bm3.7.0/0000700000175000017500000000000011365120467010203 5ustar tlktlkbm3.7.0/warn.log0000644000175000017500000002310311365042653011666 0ustar tlktlk/home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1807 Warning: Member gap_bitset_and_count found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1838 Warning: Member gap_bitset_and_any found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1877 Warning: Member gap_bitset_sub_count found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1910 Warning: Member gap_bitset_sub_any found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1948 Warning: Member gap_bitset_xor_count found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1986 Warning: Member gap_bitset_xor_any found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2029 Warning: Member gap_bitset_or_count found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2076 Warning: Member gap_bitset_or_any found in multiple @ingroup groups! The member will be put in group bitfunc, and not in group gapfunc /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2384 Warning: The following parameters of bm::gap_capacity(const T *buf, const T *glevel_len) are not documented: parameter 'glevel_len' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2166 Warning: argument 'dest_size' of command @param is not found in the argument list of bm::gap_convert_to_bitset(unsigned *dest, const T *buf, unsigned dest_len) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2166 Warning: The following parameters of bm::gap_convert_to_bitset(unsigned *dest, const T *buf, unsigned dest_len) are not documented: parameter 'dest_len' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2150 Warning: The following parameters of bm::gap_convert_to_bitset_l(unsigned *dest, const T *buf, unsigned buf_len) are not documented: parameter 'buf_len' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2462 Warning: Found unknown command `\parma' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2461 Warning: The following parameters of bm::gap_free_elements(const T *buf, const T *glevel_len) are not documented: parameter 'glevel_len' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2242 Warning: The following parameters of bm::gap_set_all(T *buf, unsigned set_max, unsigned value) are not documented: parameter 'value' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2852 Warning: The following parameters of bm::bit_block_calc_count_change(const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count) are not documented: parameter 'block' parameter 'block_end' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:4372 Warning: argument 'data' of command @param is not found in the argument list of bm::bit_count_nonzero_size(const T *blk, unsigned data_size) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:4372 Warning: The following parameters of bm::bit_count_nonzero_size(const T *blk, unsigned data_size) are not documented: parameter 'blk' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:4344 Warning: The following parameters of bm::bit_operation_xor_any(const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2) are not documented: parameter 'src1_end' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:4319 Warning: The following parameters of bm::bit_operation_xor_count(const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2) are not documented: parameter 'src1_end' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1829 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_and_any(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1829 Warning: The following parameters of bm::gap_bitset_and_any(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1798 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_and_count(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1798 Warning: The following parameters of bm::gap_bitset_and_count(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2067 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_or_any(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2067 Warning: The following parameters of bm::gap_bitset_or_any(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2020 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_or_count(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:2020 Warning: The following parameters of bm::gap_bitset_or_count(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1901 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_sub_any(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1901 Warning: The following parameters of bm::gap_bitset_sub_any(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1868 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_sub_count(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1868 Warning: The following parameters of bm::gap_bitset_sub_count(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1977 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_xor_any(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1977 Warning: The following parameters of bm::gap_bitset_xor_any(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1939 Warning: argument 'dest' of command @param is not found in the argument list of bm::gap_bitset_xor_count(const unsigned *block, const T *buf) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:1939 Warning: The following parameters of bm::gap_bitset_xor_count(const unsigned *block, const T *buf) are not documented: parameter 'block' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:354 Warning: argument 'buf1' of command @param is not found in the argument list of bm::wordcmp(T a, T b) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:354 Warning: argument 'buf2' of command @param is not found in the argument list of bm::wordcmp(T a, T b) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:354 Warning: The following parameters of bm::wordcmp(T a, T b) are not documented: parameter 'a' parameter 'b' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:332 Warning: argument 'buf1' of command @param is not found in the argument list of bm::wordcmp0(T w1, T w2) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:332 Warning: argument 'buf2' of command @param is not found in the argument list of bm::wordcmp0(T w1, T w2) /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:332 Warning: The following parameters of bm::wordcmp0(T w1, T w2) are not documented: parameter 'w1' parameter 'w2' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmserial.h:1130 Warning: The following parameters of bm::deserialize(BV &bv, const unsigned char *buf, bm::word_t *temp_block=0) are not documented: parameter 'bv' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmserial.h:1042 Warning: The following parameters of bm::serialize(const BV &bv, unsigned char *buf, bm::word_t *temp_block, unsigned serialization_flags=0) are not documented: parameter 'bv' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmtrans.h:677 Warning: The following parameters of bm::compute_tmatrix_rstat(const TMatrix &tmatrix, const unsigned char *pc_vector, typename TMatrix::rstat *rstat, unsigned effective_cols) are not documented: parameter 'effective_cols' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:814 Warning: The following parameters of bm::dgap_2_gap(const T *dgap_buf, T *gap_buf, T gap_header=0) are not documented: parameter 'gap_header' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmfunc.h:752 Warning: The following parameters of bm::for_each_dgap(const T *gap_buf, Func &func) are not documented: parameter 'func' /home/tlk/dev/release3.7.0/bm3.7.0/src/bm.h:821 Warning: The following parameters of bm::bvector::bvector(strategy strat=BM_BIT, const gap_word_t *glevel_len=bm::gap_len_table< true >::_len, size_type bv_size=bm::id_max, const Alloc &alloc=Alloc()) are not documented: parameter 'alloc' /home/tlk/dev/release3.7.0/bm3.7.0/src/encoding.h:524 Warning: Found unknown command `\grief' /home/tlk/dev/release3.7.0/bm3.7.0/src/encoding.h:513 Warning: Found unknown command `\grief' /home/tlk/dev/release3.7.0/bm3.7.0/src/bmalloc.h:186 Warning: The following parameters of bm::mem_alloc::alloc_gap_block(unsigned level, const gap_word_t *glevel_len) are not documented: parameter 'glevel_len' bm3.7.0/Doxyfile0000644000175000017500000001724011313264720011721 0ustar tlktlk# Doxyfile 1.2.13-20020210 #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- PROJECT_NAME = BitMagic PROJECT_NUMBER = OUTPUT_DIRECTORY = doc OUTPUT_LANGUAGE = English EXTRACT_ALL = YES EXTRACT_PRIVATE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ALWAYS_DETAILED_SEC = YES INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = INTERNAL_DOCS = NO STRIP_CODE_COMMENTS = NO CASE_SENSE_NAMES = YES SHORT_NAMES = YES HIDE_SCOPE_NAMES = NO VERBATIM_HEADERS = YES SHOW_INCLUDE_FILES = YES JAVADOC_AUTOBRIEF = YES INHERIT_DOCS = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 4 GENERATE_TODOLIST = NO GENERATE_TESTLIST = NO GENERATE_BUGLIST = NO ALIASES = ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 OPTIMIZE_OUTPUT_FOR_C = YES SHOW_USED_FILES = YES INTERNAL_DOC = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = NO WARN_FORMAT = WARN_LOGFILE = warn.log #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = ./src/bm.h ./src/bmfunc.h \ ./src/bmvmin.h ./src/encoding.h \ ./src/bmconst.h ./src/bmsse_util.h ./src/bmsse4.h ./src/bmsse2.h \ ./src/bmalgo.h ./src/bmalgo_impl.h ./src/bmgamma.h \ ./src/bmdef.h ./src/bmtrans.h ./src/bmutil.h \ ./src/bmundef.h ./src/bmserial.h ./src/bmalloc.h ./src/bmrandom.h \ ./samples/sample1/sample1.cpp \ ./samples/sample2/sample2.cpp \ ./samples/sample3/sample3.cpp \ ./samples/sample4/sample4.cpp \ ./samples/sample5/sample5.cpp \ ./samples/sample6/sample6.cpp \ ./samples/sample7/sample7.cpp \ ./samples/sample8/sample8.cpp \ ./samples/sample9/sample9.cpp \ ./samples/sample10/sample10.cpp FILE_PATTERNS = *.cpp \ *.h RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = ./samples/ EXAMPLE_PATTERNS = samp*.cpp EXAMPLE_RECURSIVE = YES IMAGE_PATH = INPUT_FILTER = FILTER_SOURCE_FILES = YES #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 2 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO GENERATE_CHI = NO BINARY_TOC = YES TOC_EXPAND = YES DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = MAN_EXTENSION = MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = *.h PREDEFINED = BMSSE2OPT BM64OPT BMSSE42OPT EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HAVE_DOT = YES CLASS_GRAPH = YES COLLABORATION_GRAPH = YES TEMPLATE_RELATIONS = YES HIDE_UNDOC_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES GRAPHICAL_HIERARCHY = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO CGI_NAME = CGI_URL = DOC_URL = DOC_ABSPATH = BIN_ABSPATH = EXT_DOC_PATHS = bm3.7.0/samples/0000700000175000017500000000000011365042152011641 5ustar tlktlkbm3.7.0/samples/sample7/0000700000175000017500000000000011365120465013215 5ustar tlktlkbm3.7.0/samples/sample7/Makefile0000666000175000017500000000303011365120465014667 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2003 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample7 DESTTYPE = DESTINATIONDIR=samples/sample7 include ../../makefile.in bm3.7.0/samples/sample7/sample7.cpp0000666000175000017500000001272511365120465015316 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* @example sample7.cpp This example demonstrates using of memory save mode of bitset operations. For more information please visit: http://bmagic.sourceforge.net */ /* @file @ingroup mset */ #include #include #include #include // Example disabled as deprecated... int main() { return 1; } /* // BM library version 3.1.3 and later can keep internal bit flags in pointers. // This is efficient but not completely portable hack. // For compatibility it can be disabled it by defining BM_DISBALE_BIT_IN_PTR. // If you do not disable bits in pointer the second template parameter of bvector // is simply ignored and portion of this example is becoming irrelevant. #define BM_DISBALE_BIT_IN_PTR #include "bm.h" using namespace std; // Customized bitvector uses standard memory allocator and uses // an alternative implementation of internal set. Saves memory when we // work with sparse or dense bitsets. typedef bm::bvector > bvect; const unsigned setscount = 10000; const unsigned randombits = 150; const unsigned maxbit = 100000000; bvect* bitsets[setscount]; // --------------------------------------------------------- void CreateSets() { unsigned mu = 0; for (unsigned i = 0; i < setscount; ++i) { if ((i % 100) == 0) { cout << "."; cout.flush(); } // create bitvector using in GAP mode using an alternative // GAP levels table (minimalistic). bitsets[i] = new bvect(bm::BM_GAP, bm::gap_len_table_min::_len, maxbit); bvect& bv = *bitsets[i]; bvect::statistics st; bv.calc_stat(&st); mu += st.memory_used; } cout << endl << "Created " << setscount << " sets." << endl; cout << "Used " << mu / (1024*1024)<< " MB." << endl; } // --------------------------------------------------------- void FillSets() { unsigned mu, bit_blocks, gap_blocks; cout << "Filling sets..."; mu = bit_blocks = gap_blocks = 0; for (unsigned i = 0; i < setscount; ++i) { if ((i % 100) == 0) { cout << "."; cout.flush(); } if ((i % 3) == 0) continue; bvect& bv = *bitsets[i]; unsigned bn = 0; for (unsigned j = 0; j < randombits; j+=3) { bn += (maxbit / randombits) + rand() % 10; if (bn > maxbit) bn = rand() % maxbit; bv[bn] = true; bv[bn+1] = true; bv[bn+2] = true; } bvect::statistics st; bv.calc_stat(&st); mu += st.memory_used; bit_blocks += st.bit_blocks; gap_blocks += st.gap_blocks; } cout << endl << "Used " << mu / (1024*1024)<< " MB." << endl; cout << "BIT Blocks=" << bit_blocks << endl; cout << "GAP Blocks=" << gap_blocks << endl; } // --------------------------------------------------------- void EnumerateSets() { cout << "Enumerating sets..."; unsigned bitcnt = 0; for (unsigned i = 0; i < setscount; ++i) { if ((i % 100) == 0) { cout << "."; cout.flush(); } bvect& bv = *bitsets[i]; bvect::enumerator en = bv.first(); bvect::enumerator en_end = bv.end(); for (;en < en_end; ++en) { ++bitcnt; } } cout << endl << bitcnt << endl; } // --------------------------------------------------------- void DestroySets() { for (unsigned i = 0; i < setscount; ++i) { delete bitsets[i]; } } // --------------------------------------------------------- void OrSets() { bvect res; cout << "Calculating Or..."; for (unsigned i = 0; i < setscount; ++i) { if ((i % 100) == 0) { cout << "."; cout.flush(); } const bvect& bv = *bitsets[i]; res |= bv; } cout << endl << res.count() << endl; } // --------------------------------------------------------- int main(void) { time_t start_time = time(0); CreateSets(); FillSets(); EnumerateSets(); OrSets(); time_t end_time = time(0); time_t elapsed = end_time - start_time; cout << "elapsed=" << elapsed << endl; unsigned ops; if (elapsed) ops = setscount / elapsed; else ops = setscount; cout << "Time = " << (end_time - start_time) << endl; cout << "Operations per second:" << ops << endl; DestroySets(); return 0; } */ bm3.7.0/samples/sample7/sample7.vcproj0000666000175000017500000001225611206705076016037 0ustar tlktlk bm3.7.0/samples/sample2/0000700000175000017500000000000011365120463013206 5ustar tlktlkbm3.7.0/samples/sample2/sample2.cpp0000666000175000017500000000546611365120463015306 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample2.cpp Example demonstrates using set operations AND, OR, XOR, etc. For more information please visit: http://bmagic.sourceforge.net */ #include #include "bm.h" using namespace std; void print_bvector(const bm::bvector<>& bv) { unsigned value = bv.get_first(); do { cout << value; value = bv.get_next(value); if (value) { cout << ","; } else { break; } } while(1); cout << endl; } int main(void) { bm::bvector<> bv1; bm::bvector<> bv2; bm::bvector<> bv3; bv1.set(10); bv1.set(100); bv1.set(1000000); bv2.set(10); bv2.set(100); // Logical AND operation on bv2 (bv1 is the argument) // bv2 = bv2 AND bv1 bv3 = bv1 & bv2; print_bvector(bv3); bv2 &= bv1; // You also can use: bv2.bit_and(bv1); print_bvector(bv2); // bv2 = bv2 OR bv1 bv3 = bv1 | bv2; print_bvector(bv3); bv2 |= bv1; // You can also use: bv2.bit_or(bv1); print_bvector(bv2); bv1.set(1000000, false); // bv2 = bv2 SUB bv1 bv3 = bv2 - bv1; print_bvector(bv3); bv2 -= bv1; // You can also use: bv2.bit_sub(bv1); print_bvector(bv2); // bv2 XOR bv1 bv3 = bv2 ^ bv1; print_bvector(bv3); bv2 ^= bv1; // You can also use: bv2.bit_xor(bv1); print_bvector(bv2); // For lexicographical comparison there is set of overloaded // operators and function compare. if (bv2 == bv3) { cerr << "Equivalent. Comparison result = " << bv2.compare(bv3) << endl; } else { cout << "Error." << endl; return 1; } return 0; } bm3.7.0/samples/sample2/sample2.vcproj0000666000175000017500000001225611206705076016025 0ustar tlktlk bm3.7.0/samples/sample2/Makefile0000666000175000017500000000303011365120463014660 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample2 DESTTYPE = DESTINATIONDIR=samples/sample2 include ../../makefile.in bm3.7.0/samples/sample9/0000700000175000017500000000000011365120466013220 5ustar tlktlkbm3.7.0/samples/sample9/sample9.vcproj0000666000175000017500000000776711224764264016062 0ustar tlktlk bm3.7.0/samples/sample9/sample9.cpp0000666000175000017500000000473311365120466015323 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample9.cpp Example demonstrates binary distance metrics. \sa bm::count_and \sa bm::count_xor \sa bm::count_sub \sa bm::count_or \sa bm::distance_operation For more information please visit: http://bmagic.sourceforge.net */ #include #include "bm.h" #include "bmalgo.h" using namespace std; int main(void) { bm::bvector<> bv1; bm::bvector<> bv2; bv1[10] = true; bv1[100] = true; bv1[10000] = true; bv2[10] = true; bv2[100] = true; bv2[20000] = true; bv2[30000] = true; // Hamming distance: unsigned hamming = bm::count_xor(bv1, bv2); cout << "Hamming distance = " << hamming << endl; // Dice distance using basic distance functions double dice = double(2 * bm::count_and(bv1, bv2))/double(bv1.count() + bv2.count()); cout << "Dice distance = " << dice << endl; // Dice distance, can be computed using "metric pipeline" bm::distance_metric_descriptor dmd[3]; dmd[0].metric = bm::COUNT_AND; dmd[1].metric = bm::COUNT_A; dmd[2].metric = bm::COUNT_B; bm::distance_operation(bv1, bv2, dmd, dmd+3); double dice_p = double(2 * dmd[0].result) / double(dmd[1].result + dmd[2].result); cout << "Dice distance (pipeline) = " << dice_p << endl; return 0; } bm3.7.0/samples/sample9/Makefile0000666000175000017500000000303011365120466014672 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2003 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample9 DESTTYPE = DESTINATIONDIR=samples/sample9 include ../../makefile.in bm3.7.0/samples/sample5/0000700000175000017500000000000011365120465013213 5ustar tlktlkbm3.7.0/samples/sample5/sample5.vcproj0000666000175000017500000001225611206705076016033 0ustar tlktlk bm3.7.0/samples/sample5/sample5.cpp0000666000175000017500000000422511365120465015306 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample5.cpp Example demonstrates using enumerators - the fastest way to retrieve indexes of 1 bits from the bitvector. This approach works faster than get_first/get_next functions. \sa bm::bvector<>::enumerator For more information please visit: http://bmagic.sourceforge.net */ #include #include #include "bm.h" using namespace std; void Print(unsigned n) { cout << n << endl;; } int main(void) { bm::bvector<> bv; bv[10] = true; bv[100] = true; bv[10000] = true; bm::bvector<>::enumerator en = bv.first(); bm::bvector<>::enumerator en_end = bv.end(); while (en < en_end) { cout << *en << endl; ++en; // Fastest way to increment enumerator } en = bv.first(); // This is not the fastest way to do the job, because for_each // often will try to calculate difference between iterators, // which is expensive for enumerators. // But it can be useful for some STL loyal applications. std::for_each(en, en_end, Print); return 0; } bm3.7.0/samples/sample5/Makefile0000666000175000017500000000303011365120465014665 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample5 DESTTYPE = DESTINATIONDIR=samples/sample5 include ../../makefile.in bm3.7.0/samples/sample1/0000700000175000017500000000000011365120463013205 5ustar tlktlkbm3.7.0/samples/sample1/sample1.vcproj0000666000175000017500000001225611206705076016023 0ustar tlktlk bm3.7.0/samples/sample1/Makefile0000666000175000017500000000303011365120463014657 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample1 DESTTYPE = DESTINATIONDIR=samples/sample1 include ../../makefile.in bm3.7.0/samples/sample1/sample1.cpp0000666000175000017500000000453411365120463015277 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample1.cpp Example of how to use bvector template class to set bits and then retrieve indexes of ON bits. For more information please visit: http://bmagic.sourceforge.net \sa bm::bvector<>::get_next() \sa bm::bvector<>::get_first() \sa bm::bvector<>::set() \sa bm::bvector<>::count() \sa bm::bvector<>::clear() */ #include #include "bm.h" using namespace std; int main(void) { bm::bvector<> bv; // Bitvector variable declaration. cout << bv.count() << endl; // Set some bits. bv.set(10); bv.set(100); bv.set(1000000); // New bitvector's count. cout << bv.count() << endl; // Print the bitvector. unsigned value = bv.get_first(); do { cout << value; value = bv.get_next(value); if (value) { cout << ","; } else { break; } } while(1); cout << endl; bv.clear(); // Clean up. cout << bv.count() << endl; // We also can use operators to set-clear bits; bv[10] = true; bv[100] = true; bv[10000] = true; cout << bv.count() << endl; if (bv[10]) { bv[10] = false; } cout << bv.count() << endl; return 0; } bm3.7.0/samples/sample3/0000700000175000017500000000000011365120464013210 5ustar tlktlkbm3.7.0/samples/sample3/sample3.cpp0000666000175000017500000000564711365120464015312 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample3.cpp Exmaple demonstrates using bitvectors with different initial block allocation strategy. Bitvector 1 (bv1) by default working without RLE compression option (best performance, maximum memory consumption). Bitvector 2 (bv2) will be working in compression mode and use less memory. \sa bm::bvector<>::set_new_blocks_strat() For more information please visit: http://bmagic.sourceforge.net */ #include #include #include "bm.h" using namespace std; const unsigned MAX_VALUE = 1000000; // This procedure creates very dense bitvectors. // The resulting set will consists mostly from ON (1) bits // interrupted with small gaps of 0 bits. void fill_bvector(bm::bvector<>* bv1, bm::bvector<>* bv2) { for (unsigned i = 0; i < MAX_VALUE; ++i) { if (rand() % 2500) { bv1->set_bit(i); bv2->set_bit(i); } } } void print_statistics(const bm::bvector<>& bv) { bm::bvector<>::statistics st; bv.calc_stat(&st); cout << "Bits count:" << bv.count() << endl; cout << "Bit blocks:" << st.bit_blocks << endl; cout << "GAP blocks:" << st.gap_blocks << endl; cout << "Memory used:"<< st.memory_used << endl; cout << "Max.serialize mem.:" << st.max_serialize_mem << endl << endl;; } int main(void) { bm::bvector<> bv1; bm::bvector<> bv2; bv2.set_new_blocks_strat(bm::BM_GAP); // set DGAP compression mode ON fill_bvector(&bv1, &bv2); // Fill both bvectors with the same values // For a given distrubution statistics should demonstrate // lower memory consumption for the vector with compression print_statistics(bv1); print_statistics(bv2); // Now run optimization procedure for bv1 and see statistics. bv1.optimize(); print_statistics(bv1); return 0; } bm3.7.0/samples/sample3/Makefile0000666000175000017500000000303011365120464014662 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample3 DESTTYPE = DESTINATIONDIR=samples/sample3 include ../../makefile.in bm3.7.0/samples/sample3/sample3.vcproj0000666000175000017500000001225611206705076016027 0ustar tlktlk bm3.7.0/samples/sample10/0000700000175000017500000000000011365120466013270 5ustar tlktlkbm3.7.0/samples/sample10/Makefile0000666000175000017500000000303211365120466014744 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2009 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample10 DESTTYPE = DESTINATIONDIR=samples/sample10 include ../../makefile.in bm3.7.0/samples/sample10/sample10.cpp0000666000175000017500000000437411365120466015444 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample10.cpp Example of how to get random subset of a bit-vector For more information please visit: http://bmagic.sourceforge.net \sa bm::random_subset */ #include #include "bm.h" #include "bmrandom.h" using namespace std; template void PrintContainer(T first, T last) { if (first == last) cout << ""; else for(;first != last; ++first) cout << *first << ";"; cout << endl; } int main(void) { bm::bvector<> bv; // ----------------------------------------------- // set some bits // unsigned i; for (i = 0; i < 30000; i+=10) { bv.set(i); } for (i = 300000; i < 400000; i+=100) { bv.set(i); } bm::bvector<> bvsubset1; bm::bvector<> bvsubset2; // random sampler instance can be shared between calls // bm::random_subset > rand_sampler; rand_sampler.sample(bvsubset1, bv, 20); rand_sampler.sample(bvsubset2, bv, 20); PrintContainer(bvsubset1.first(), bvsubset1.end()); cout << endl; PrintContainer(bvsubset2.first(), bvsubset2.end()); return 0; } bm3.7.0/samples/sample4/0000700000175000017500000000000011365120464013211 5ustar tlktlkbm3.7.0/samples/sample4/sample4.vcproj0000666000175000017500000001225611206705076016031 0ustar tlktlk bm3.7.0/samples/sample4/sample4.cpp0000666000175000017500000001031611365120464015301 0ustar tlktlk/* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample4.cpp Exmaple demonstrates bitvector serialization/deserialization. For more information please visit: http://bmagic.sourceforge.net \sa bm::serializer \sa bm::deserialize */ #include #include #include "bm.h" #include "bmserial.h" using namespace std; // This exmaple demonstrates bitvector serialization/deserialization. const unsigned MAX_VALUE = 1000000; // This procedure creates very dense bitvector. // The resulting set will consists mostly from ON (1) bits // interrupted with small gaps of 0 bits. void fill_bvector(bm::bvector<>* bv) { for (unsigned i = 0; i < MAX_VALUE; ++i) { if (rand() % 2500) { bv->set_bit(i); } } } void print_statistics(const bm::bvector<>& bv) { bm::bvector<>::statistics st; bv.calc_stat(&st); cout << "Bits count:" << bv.count() << endl; cout << "Bit blocks:" << st.bit_blocks << endl; cout << "GAP blocks:" << st.gap_blocks << endl; cout << "Memory used:"<< st.memory_used << endl; cout << "Max.serialize mem.:" << st.max_serialize_mem << endl << endl;; } unsigned char* serialize_bvector(bm::serializer >& bvs, bm::bvector<>& bv) { // It is reccomended to optimize vector before serialization. bv.optimize(); bm::bvector<>::statistics st; bv.calc_stat(&st); cout << "Bits count:" << bv.count() << endl; cout << "Bit blocks:" << st.bit_blocks << endl; cout << "GAP blocks:" << st.gap_blocks << endl; cout << "Memory used:"<< st.memory_used << endl; cout << "Max.serialize mem.:" << st.max_serialize_mem << endl; // Allocate serialization buffer. unsigned char* buf = new unsigned char[st.max_serialize_mem]; // Serialization to memory. unsigned len = bvs.serialize(bv, buf, 0); cout << "Serialized size:" << len << endl << endl; return buf; } int main(void) { bm::bvector<> bv1; bm::bvector<> bv2; bv2.set_new_blocks_strat(bm::BM_GAP); // set DGAP compression mode ON fill_bvector(&bv1); fill_bvector(&bv2); // Prepare a serializer class // for best performance it is best to create serilizer once and reuse it // (saves a lot of memory allocations) // bm::serializer > bvs; // next settings provide lowest serilized size bvs.byte_order_serialization(false); bvs.gap_length_serialization(false); bvs.set_compression_level(4); unsigned char* buf1 = serialize_bvector(bvs, bv1); unsigned char* buf2 = serialize_bvector(bvs, bv2); // Serialized bvectors (buf1 and buf2) now ready to be // saved to a database, file or send over a network. // ... // Deserialization. bm::bvector<> bv3; // As a result of desrialization bv3 will contain all bits from // bv1 and bv3: // bv3 = bv1 OR bv2 bm::deserialize(bv3, buf1); bm::deserialize(bv3, buf2); print_statistics(bv3); // After a complex operation we can try to optimize bv3. bv3.optimize(); print_statistics(bv3); delete [] buf1; delete [] buf2; return 0; } bm3.7.0/samples/sample4/Makefile0000666000175000017500000000303011365120464014663 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample4 DESTTYPE = DESTINATIONDIR=samples/sample4 include ../../makefile.in bm3.7.0/samples/sample6/0000700000175000017500000000000011365120465013214 5ustar tlktlkbm3.7.0/samples/sample6/sample6.cpp0000666000175000017500000000663711365120465015321 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample6.cpp This example demonstrates using of custom memory allocators. In this case allocator works as a memory checker, counts number of allocations and deallocations to make sure that there is no memory leaks. For more information please visit: http://bmagic.sourceforge.net */ #include #include #include "bm.h" using namespace std; // Custom allocator keeps number of all alloc/free calls. // It also reservs the front word of the allocated block and saves // number of elements allocated. On deallocation it makes sure // it deallocates the same size as allocated class dbg_block_allocator { public: static unsigned na_; static unsigned nf_; static bm::word_t* allocate(size_t n, const void *) { ++na_; assert(n); bm::word_t* p = (bm::word_t*) ::malloc((n+1) * sizeof(bm::word_t)); *p = n; return ++p; } static void deallocate(bm::word_t* p, size_t n) { ++nf_; --p; assert(*p == n); ::free(p); } static int balance() { return nf_ - na_; } }; unsigned dbg_block_allocator::na_ = 0; unsigned dbg_block_allocator::nf_ = 0; class dbg_ptr_allocator { public: static unsigned na_; static unsigned nf_; static void* allocate(size_t n, const void *) { ++na_; assert(sizeof(size_t) == sizeof(void*)); void* p = ::malloc((n+1) * sizeof(void*)); size_t* s = (size_t*) p; *s = n; return (void*)++s; } static void deallocate(void* p, size_t n) { ++nf_; size_t* s = (size_t*) p; --s; assert(*s == n); ::free(s); } static int balance() { return nf_ - na_; } }; unsigned dbg_ptr_allocator::na_ = 0; unsigned dbg_ptr_allocator::nf_ = 0; typedef bm::mem_alloc dbg_alloc; typedef bm::bvector bvect; int main(void) { { bvect bv; bv[10] = true; bv[100000] = true; bv[10000000] = false; } cout << "Number of BLOCK allocations = " << dbg_block_allocator::na_ << endl; cout << "Number of PTR allocations = " << dbg_ptr_allocator::na_ << endl; assert(dbg_block_allocator::balance() == 0); assert(dbg_ptr_allocator::balance() == 0); return 0; } bm3.7.0/samples/sample6/Makefile0000666000175000017500000000303011365120465014666 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2003 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample6 DESTTYPE = DESTINATIONDIR=samples/sample6 include ../../makefile.in bm3.7.0/samples/sample6/sample6.vcproj0000666000175000017500000001225611206705076016035 0ustar tlktlk bm3.7.0/samples/sample8/0000700000175000017500000000000011365120466013217 5ustar tlktlkbm3.7.0/samples/sample8/sample8.cpp0000666000175000017500000001127111365120466015314 0ustar tlktlk/* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** \example sample8.cpp Example demonstrates some STL compatability set operations using set iterators. \sa bm::bvector<>::enumerator \sa bm::bvector<>::insert_iterator For more information please visit: http://bmagic.sourceforge.net */ #include #include #include #include using std::vector; using std::list; // This example requires STL compatibility #ifdef BM_NO_STL # undef BM_NO_STL #endif #include "bm.h" using namespace std; void Print(unsigned n) { cout << n << endl;; } // Utility template function used to print container template void PrintContainer(T first, T last) { if (first == last) cout << ""; else for(;first != last; ++first) cout << *first << ";"; cout << endl; } int main(void) { bm::bvector<> bv; bv[10] = true; bv[100] = true; bv[10000] = true; cout << "Source set:"; PrintContainer(bv.first(), bv.end()); // copy all bitset information into STL vector using copy algorithm { vector vect; vect.resize(bv.count()); std::copy(bv.first(), bv.end(), vect.begin()); cout << "Vector:"; PrintContainer(vect.begin(), vect.end()); } // doing the same with the help of back_inserter { list lst; std::copy(bv.first(), bv.end(), std::back_inserter(lst)); cout << "List:"; PrintContainer(lst.begin(), lst.end()); } { vector vect; vector res1, res2, res3; vect.push_back(100); vect.push_back(15); vect.push_back(150); cout << "Argument vector for set operations:"; PrintContainer(vect.begin(), vect.end()); // set should be ordered by < to make set algorithms possible std::sort(vect.begin(), vect.end()); cout << endl; std::set_union(bv.first(), bv.end(), vect.begin(), vect.end(), std::back_inserter(res1)); //10;15;100;150;10000 cout << "Set union:" << endl; PrintContainer(res1.begin(), res1.end()); std::set_intersection(bv.first(), bv.end(), vect.begin(), vect.end(), std::back_inserter(res2)); // 100 cout << "Set intersection:" << endl; PrintContainer(res2.begin(), res2.end()); vector::const_iterator it1 = vect.begin(); vector::const_iterator it2 = vect.end(); bm::bvector<>::enumerator en = bv.first(); bm::bvector<>::enumerator en2= bv.end(); std::set_difference(en, en2, it1, it2, std::back_inserter(res3)); // 10;10000 cout << "Set diff:" << endl; PrintContainer(res3.begin(), res3.end()); } // Using bvector<>::insert_iterator to set bits { bm::bvector<> bv1; std::vector vect; vect.push_back(300); vect.push_back(200); vect.push_back(275); vect.push_back(200); cout << endl << "Source vector:"; PrintContainer(vect.begin(), vect.end()); // 300;200;275;200; // The "side effect" of this operation is that we sorted // the input sequence and eliminated duplicates std::copy(vect.begin(), vect.end(), bv1.inserter()); cout << "Bitset:"; PrintContainer(bv1.first(), bv1.end()); // 200;275;300 } return 0; } bm3.7.0/samples/sample8/Makefile0000666000175000017500000000303011365120466014671 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2003 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Sample CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = sample8 DESTTYPE = DESTINATIONDIR=samples/sample8 include ../../makefile.in bm3.7.0/samples/sample8/sample8.vcproj0000666000175000017500000001225611206705076016041 0ustar tlktlk bm3.7.0/platforms/0000700000175000017500000000000011365120467012212 5ustar tlktlkbm3.7.0/platforms/sparc-solaris2.mk0000755000175000017500000000331211365120467015423 0ustar tlktlkCOMMON_DFLAGS = $(DBGFLAGS) LINKER_DFLAGS = $(DBGFLAGS) ARCH=$(shell uname -m) ifeq ($(COMPILER),GNU_CC) OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed 's/\./_/g') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib-gnu CXX = g++ -mcpu=v8 -Wall CC = g++ -mcpu=v8 -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 SO_FLAGS = -shared SO_LIBS = LDSO = gcc else CC_VER = $(shell CC -V 2>&1 | sed -e 's/.\../|b&|e/' -e 's/.*|b//' -e 's/|e.*//') PLATFORM_CXXFLAGS = -mt PLATFORM_CFLAGS = ifneq ($(CC_VER),5.0) PLATFORM_CXXFLAGS += -template=no%extdef -D_RWSTD_COMPILE_INSTANTIATE endif COMMON_LDFLAGS = $(LINKER_DFLAGS) -xildoff -mt -staticlib=Crun COMMON_CLDFLAGS = $(LINKER_DFLAGS) -xildoff -mt EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib ULTRASPARC=sun4u ifeq ($(ARCH),$(ULTRASPARC)) ifeq ($(SUN_ARCH),) SUN_ARCH = v8plusa endif CXX = CC -xchip=ultra2 -xarch=$(SUN_ARCH) CC = cc -xchip=ultra2 -xarch=$(SUN_ARCH) ifeq ($(SUN_ARCH),v9a) PLATFORM_CXXFLAGS += -DSS_64BIT_SERVER -DBM64OPT LD = CC -xchip=ultra2 -xarch=v9 else LD = $(CXX) endif else CXX = CC CC = cc LD = $(CXX) endif CC_PIC_FLAGS = -KPIC CXX_PIC_FLAGS = -KPIC OPT_FLAGS = -g0 -xO2 SO_FLAGS = -G AR = $(CXX) -xar ARFLAGS = -o CXX_CACHE = SunWS_cache endif SYS_LIBS = -lnsl -lsocket -lpthread -lposix4 -ldl DAEMON_LIBS = -lkstat COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/local/bin/install INSTALLDIR = /usr/sbin/install -d AWK = awk TEST = /bin/test bm3.7.0/platforms/cygwin.mk0000755000175000017500000000152011365120467014056 0ustar tlktlkCOMPILER = GNU_CC COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g # OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') OS_VER = -DCYGWIN_NT PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE -Wno-deprecated PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic -L/usr/local/lib COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = g++ -msse4 -march=core2 -Wall CC = gcc -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 -march=core2 -fomit-frame-pointer -pipe SO_FLAGS = -shared SO_LIBS = SYS_LIBS = -lpthread COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/bin/install INSTALLDIR = /usr/bin/install -d AWK = awk TEST = /usr/bin/test bm3.7.0/platforms/amd64-linux-gnu.mk0000755000175000017500000000313211365120467015416 0ustar tlktlkifeq ($(COMPILER),GNU_CC) COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = g++ -march=core2 -m64 -Wall CC = gcc -march=core2 -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 -fomit-frame-pointer -pipe SO_FLAGS = -shared SO_LIBS = SYS_LIBS = -lpthread -ldl -lrt else ifeq ($(COMPILER), ICC) COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = icc -tpp7 -restrict -DBM_HASRESTRICT -fno-fnalias -DBMSSE2OPT CC = icc -march=core2 -Wall LD = icc CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -O3 -opt_report_fileopt.txt -opt_report_levelmax SO_FLAGS = -shared SO_LIBS = endif endif SYS_LIBS = -lpthread -ldl -lrt COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/bin/install INSTALLDIR = /usr/bin/install -d AWK = awk TEST = /usr/bin/test bm3.7.0/platforms/rs6000.mk0000755000175000017500000000161111365120467013511 0ustar tlktlkCOMMON_DFLAGS = $(DBGFLAGS) LINKER_DFLAGS = $(DBGFLAGS) ARCH=$(shell uname -m) ifeq ($(COMPILER),GNU_CC) LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = g++ -Wall CC = gcc -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 SO_FLAGS = -shared SO_LIBS = SYS_LIBS = -lpthread -ldl -lrt COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/bin/install INSTALLDIR = /usr/bin/install -d AWK = awk TEST = /usr/bin/test else # TO DO: add Xlc support here endifbm3.7.0/platforms/intel-linux-gnu.mk0000755000175000017500000000312511365120467015620 0ustar tlktlkifeq ($(COMPILER),GNU_CC) COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = g++ -march=core2 -Wall CC = gcc -march=core2 -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 -fomit-frame-pointer -pipe SO_FLAGS = -shared SO_LIBS = SYS_LIBS = -lpthread -ldl -lrt else ifeq ($(COMPILER), ICC) COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) -export-dynamic COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = icc -tpp7 -restrict -DBM_HASRESTRICT -fno-fnalias -DBMSSE2OPT CC = icc -march=core2 -Wall LD = icc CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -O3 -opt_report_fileopt.txt -opt_report_levelmax SO_FLAGS = -shared SO_LIBS = endif endif SYS_LIBS = -lpthread -ldl -lrt COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/bin/install INSTALLDIR = /usr/bin/install -d AWK = awk TEST = /usr/bin/test bm3.7.0/platforms/mips-irix6.5.mk0000755000175000017500000000203711365120467014734 0ustar tlktlkCOMMON_DFLAGS = $(DBGFLAGS) LINKER_DFLAGS = $(DBGFLAGS) ifeq ($(COMPILER),GNU_CC) COMMON_CXXFLAGS = $(COMMON_DFLAGS) -D_REENTRANT -DSS_64BIT_SERVER COMMON_CFLAGS = $(COMMON_DFLAGS) -D_REENTRANT COMMON_LDFLAGS = $(LINKER_DFLAGS) COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib-gnu CXX = g++ CC = cc LD = g++ CC_PIC_FLAGS = -KPIC CXX_PIC_FLAGS = -fpic SO_FLAGS = -shared else COMMON_CXXFLAGS = $(COMMON_DFLAGS) -64 -DMIPS_ABI -DBM64OPT -LANG:std -signed -no_auto_include -woff 1107 COMMON_CFLAGS = $(COMMON_DFLAGS) -64 -signed COMMON_LDFLAGS = $(LINKER_DFLAGS) -64 -LANG:std COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = CC CC = cc LD = CC -Wl,-woff,84 CC_PIC_FLAGS = -KPIC CXX_PIC_FLAGS = -KPIC SO_FLAGS = -shared OPT_FLAGS = -O2 CXX_CACHE = ii_files # SYS_LIBS = AR = $(CXX) -ar ARFLAGS = -LANG:std -o endif SYS_LIBS += -lpthread -lm -lgen DAEMON_LIBS = -lelf INSTALL = /usr/local/bin/install INSTALLDIR = /usr/local/bin/install -d AWK = awk TEST = /bin/test bm3.7.0/platforms/alpha-osf51.mk0000755000175000017500000000341611365120467014604 0ustar tlktlkCOMMON_DFLAGS = $(DBGFLAGS) LINKER_DFLAGS = $(DBGFLAGS) ifeq ($(COMPILER),GNU_CC) PLATFORM_CXXFLAGS = -D_REENTRANT -DBM64OPT -DA_OSF -DSS_64BIT_SERVER -D__USE_STD_IOSTREAM PLATFORM_CFLAGS = -D_REENTRANT PLATFORM_LDFLAGS = EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib-gnu CXX = g++ CC = g++ LD = g++ OPT_FLAGS = -O2 CC_PIC_FLAGS = -fpic CXX_PIC_FLAGS = -fpic SO_FLAGS = -shared -Wl,-expect_unresolved,* SO_LIBS = else PLATFORM_CXXFLAGS = -pthread -DDIGITAL_UNIX=0x510 -DBM64OPT -DA_OSF -ieee -noimplicit_include -D__USE_STD_IOSTREAM PLATFORM_CFLAGS = -pthread -ieee PLATFORM_LDFLAGS = -pthread -ieee -use_non_shared_libcxx PLATFORM_CLDFLAGS = -pthread -ieee EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = cxx CC = cc # LD = cc /usr/lib/cmplrs/cxx/_main.o LD = cxx OPT_FLAGS = -O2 -arch host CXX_PIC_FLAGS = CC_PIC_FLAGS = SO_FLAGS = -shared -Wl,-expect_unresolved,* SO_LIBS = CXX_REPOSITORY = cxx_repository CXX_CACHE = cxx_repository COMPILE.cc = $(CXX) $(CXXFLAGS) -MDf.deps/$(*F).pp -c DEPCOMMAND:=$(CXX) -MDfdepend.d~ -c MAKEDEPS = \ -egrep -v '\/usr\/' .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ | egrep -v '\/usr\/' >> .deps/$(*F).P; \ rm .deps/$(*F).pp endif #SYS_LIBS = -lpthread -lrt -no_so -L/usr/lib/cmplrs/cxx -lcxxstd -lcxx -so_archive -lexc -lm SYS_LIBS = -lpthread -lrt -lexc -lm AR = ar ARFLAGS = cr DAEMON_LIBS = -lmach COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) COMMON_LDFLAGS = $(LINKER_DFLAGS) $(PLATFORM_LDFLAGS) COMMON_CLDFLAGS = $(LINKER_DFLAGS) $(PLATFORM_CLDFLAGS) INSTALL = /usr/local/bin/install INSTALLDIR = /usr/local/bin/install -d LDD = ldd 2>&1 AWK = awk TEST = /bin/test bm3.7.0/platforms/intel-macosx-gnu.mk0000755000175000017500000000155611365120467015761 0ustar tlktlkifeq ($(COMPILER),GNU_CC) COMMON_DFLAGS = #-g -D_DEBUG LINKER_DFLAGS = #-g OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed -e 's/\./_/g' -e 's/-.*//') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) -D_GNU_SOURCE PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib CXX = g++ -march=core2 -Wall CC = gcc -march=core2 -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O3 SO_FLAGS = -shared SO_LIBS = ##SYS_LIBS = -lpthread -ldl -lrt endif ##SYS_LIBS = -lpthread -ldl -lrt COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/bin/install INSTALLDIR = /usr/bin/install -d AWK = awk TEST = /usr/bin/test bm3.7.0/platforms/intel-solaris.mk0000755000175000017500000000330111365120467015342 0ustar tlktlkCOMMON_DFLAGS = $(DBGFLAGS) LINKER_DFLAGS = $(DBGFLAGS) ARCH=$(shell uname -m) ifeq ($(COMPILER),GNU_CC) OS_VER = -D__$(shell uname -s)_$(shell uname -r | sed 's/\./_/g') PLATFORM_CXXFLAGS = -D_REENTRANT $(OS_VER) PLATFORM_CFLAGS = -D_REENTRANT $(OS_VER) COMMON_LDFLAGS = $(LINKER_DFLAGS) COMMON_CLDFLAGS = $(COMMON_LDFLAGS) EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib-gnu CXX = g++ -mcpu=v8 -Wall CC = g++ -mcpu=v8 -Wall LD = g++ CC_PIC_FLAGS = -fPIC CXX_PIC_FLAGS = -fPIC OPT_FLAGS = -g0 -O2 SO_FLAGS = -shared SO_LIBS = LDSO = gcc else CC_VER = $(shell CC -V 2>&1 | sed -e 's/.\../|b&|e/' -e 's/.*|b//' -e 's/|e.*//') PLATFORM_CXXFLAGS = -mt PLATFORM_CFLAGS = ifneq ($(CC_VER),5.0) PLATFORM_CXXFLAGS += -template=no%extdef -D_RWSTD_COMPILE_INSTANTIATE endif COMMON_LDFLAGS = $(LINKER_DFLAGS) -xildoff -mt -staticlib=Crun COMMON_CLDFLAGS = $(LINKER_DFLAGS) -xildoff -mt EXTERN_LIBS = $(EXTERN_LIBS_BASE)/lib ULTRASPARC=sun4u ifeq ($(ARCH),$(ULTRASPARC)) ifeq ($(SUN_ARCH),) SUN_ARCH = v8plusa endif CXX = CC -xchip=ultra2 -xarch=$(SUN_ARCH) CC = cc -xchip=ultra2 -xarch=$(SUN_ARCH) ifeq ($(SUN_ARCH),v9a) PLATFORM_CXXFLAGS += -DSS_64BIT_SERVER LD = CC -xchip=ultra2 -xarch=v9 else LD = $(CXX) endif else CXX = CC CC = cc LD = $(CXX) endif CC_PIC_FLAGS = -KPIC CXX_PIC_FLAGS = -KPIC OPT_FLAGS = -g0 -xO2 SO_FLAGS = -G AR = $(CXX) -xar ARFLAGS = -o CXX_CACHE = SunWS_cache endif SYS_LIBS = -lnsl -lsocket -lpthread -lposix4 -ldl DAEMON_LIBS = -lkstat COMMON_CXXFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CXXFLAGS) COMMON_CFLAGS = $(COMMON_DFLAGS) $(PLATFORM_CFLAGS) INSTALL = /usr/local/bin/install INSTALLDIR = /usr/sbin/install -d AWK = awk TEST = /bin/test bm3.7.0/bmenv.sh0000755000175000017500000000030611223672562011663 0ustar tlktlk#/bin/sh # This script sets environment for building project. # Execute this using . command like this: # >. bmenv.sh PROJECT_DIR=`pwd`; export PROJECT_DIR echo Base project directory $PROJECT_DIR bm3.7.0/src/0000700000175000017500000000000011365120467010772 5ustar tlktlkbm3.7.0/src/bmgamma.h0000644000175000017500000000410711365120467012560 0ustar tlktlk/* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #ifndef BMGAMMAENC__H__INCLUDED__ #define BMGAMMAENC__H__INCLUDED__ namespace bm { /** Elias Gamma decoder */ template class gamma_decoder { public: gamma_decoder(TBitIO& bin) : bin_(bin) {} /** Start encoding sequence */ void start() {} /** Stop decoding sequence */ void stop() {} /** Decode word */ T operator()(void) { unsigned l = bin_.eat_zero_bits(); bin_.get_bit(); // get border bit T current = 0; for (unsigned i = 0; i < l; ++i) { if (bin_.get_bit()) { current += 1 << i; } } current |= (1 << l); return current; } private: gamma_decoder(const gamma_decoder&); gamma_decoder& operator=(const gamma_decoder&); private: TBitIO& bin_; }; } // bm #endif bm3.7.0/src/bmdef.h0000644000175000017500000000716311365120467012241 0ustar tlktlk// Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) // // BM library internal header // // Set all required preprocessor defines // macro to define/undefine unaligned memory access (x86, PowerPC) // #if defined(__i386) || defined(__x86_64) || defined(__ppc__) || \ defined(__ppc64__) || defined(_M_IX86) || defined(_M_AMD64) || \ defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ (defined(_M_MPPC) && !defined(BM_FORBID_UNALIGNED_ACCESS)) #define BM_UNALIGNED_ACCESS_OK 1 #endif #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ defined(__i386) || defined(__x86_64) || defined(_M_AMD64) || \ defined(BMSSE2OPT) || defined(BMSSE42OPT) #define BM_x86 #endif // Enable MSVC 8.0 (2005) specific optimization options // #if(_MSC_VER >= 1400) # define BM_HASFORCEINLINE # ifndef BMRESTRICT # define BMRESTRICT __restrict # endif #endif #ifdef __GNUG__ # ifndef BMRESTRICT # define BMRESTRICT __restrict__ # endif # ifdef __OPTIMIZE__ # define BM_NOASSERT # endif #endif #ifndef BM_ASSERT # ifndef BM_NOASSERT # include # define BM_ASSERT assert # else # ifndef BM_ASSERT # define BM_ASSERT(x) # endif # endif #endif #define FULL_BLOCK_ADDR bm::all_set::_block._p #define IS_VALID_ADDR(addr) (addr && (addr != FULL_BLOCK_ADDR)) #define IS_FULL_BLOCK(addr) (addr == FULL_BLOCK_ADDR) #define IS_EMPTY_BLOCK(addr) (addr == 0) // Macro definitions to manipulate bits in pointers // This trick is based on the fact that pointers allocated by malloc are // aligned and bit 0 is never set. It means we are safe to use it. // BM library keeps GAP flag in pointer. # if ULONG_MAX != 0xffffffff || defined(_WIN64) // 64-bit # define BMPTR_SETBIT0(ptr) ( ((bm::id64_t)ptr) | 1 ) # define BMPTR_CLEARBIT0(ptr) ( ((bm::id64_t)ptr) & ~(bm::id64_t)1 ) # define BMPTR_TESTBIT0(ptr) ( ((bm::id64_t)ptr) & 1 ) # else // 32-bit # define BMPTR_SETBIT0(ptr) ( ((bm::id_t)ptr) | 1 ) # define BMPTR_CLEARBIT0(ptr) ( ((bm::id_t)ptr) & ~(bm::id_t)1 ) # define BMPTR_TESTBIT0(ptr) ( ((bm::id_t)ptr) & 1 ) # endif # define BMGAP_PTR(ptr) ((bm::gap_word_t*)BMPTR_CLEARBIT0(ptr)) # define BMSET_PTRGAP(ptr) ptr = (bm::word_t*)BMPTR_SETBIT0(ptr) # define BM_IS_GAP(ptr) ( BMPTR_TESTBIT0(ptr)!=0 ) #ifdef BM_HASRESTRICT # ifndef BMRESTRICT # define BMRESTRICT restrict # endif #else # ifndef BMRESTRICT # define BMRESTRICT # endif #endif #ifdef BM_HASFORCEINLINE # ifndef BMFORCEINLINE # define BMFORCEINLINE __forceinline # endif #else # define BMFORCEINLINE inline #endif // -------------------------------- // SSE optmization // #if !(defined(BMSSE2OPT) || defined(BMSSE42OPT)) # ifndef BM_SET_MMX_GUARD # define BM_SET_MMX_GUARD # endif #define BM_ALIGN16 #define BM_ALIGN16ATTR #else # ifndef BM_SET_MMX_GUARD # define BM_SET_MMX_GUARD sse_empty_guard bm_mmx_guard_; # endif #ifdef _MSC_VER #ifndef BM_ALIGN16 # define BM_ALIGN16 __declspec(align(16)) # define BM_ALIGN16ATTR #endif # else // GCC #ifndef BM_ALIGN16 # define BM_ALIGN16 # define BM_ALIGN16ATTR __attribute__((aligned(16))) #endif #endif #endif /*! Define calculates number of 1 bits in 32-bit word. @ingroup bitfunc */ #ifndef BM_INCWORD_BITCOUNT #ifdef BMSSE42OPT # define BM_INCWORD_BITCOUNT(cnt, w) cnt += _mm_popcnt_u32(w); #else # define BM_INCWORD_BITCOUNT(cnt, w) cnt += \ bm::bit_count_table::_count[(unsigned char)(w)] + \ bm::bit_count_table::_count[(unsigned char)((w) >> 8)] + \ bm::bit_count_table::_count[(unsigned char)((w) >> 16)] + \ bm::bit_count_table::_count[(unsigned char)((w) >> 24)]; #endif #endif bm3.7.0/src/bm.dsp0000644000175000017500000000627607714312332012122 0ustar tlktlk# Microsoft Developer Studio Project File - Name="bm" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=bm - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "bm.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "bm.mak" CFG="bm - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "bm - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "bm - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "bm - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "bm___Win32_Release" # PROP BASE Intermediate_Dir "bm___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "bm___Win32_Release" # PROP Intermediate_Dir "bm___Win32_Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /G6 /W3 /GX /O2 /I "../../src" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\bm.lib" !ELSEIF "$(CFG)" == "bm - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "bm___Win32_Debug" # PROP BASE Intermediate_Dir "bm___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "bm___Win32_Debug" # PROP Intermediate_Dir "bm___Win32_Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../src" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"lib\bmd.lib" !ENDIF # Begin Target # Name "bm - Win32 Release" # Name "bm - Win32 Debug" # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\bm.h # End Source File # Begin Source File SOURCE=.\bmalloc.h # End Source File # Begin Source File SOURCE=.\bmconst.h # End Source File # Begin Source File SOURCE=.\bmfunc.h # End Source File # Begin Source File SOURCE=.\bmfwd.h # End Source File # Begin Source File SOURCE=.\bmsse2.h # End Source File # Begin Source File SOURCE=.\bmvmin.h # End Source File # Begin Source File SOURCE=.\encoding.h # End Source File # End Group # End Target # End Project bm3.7.0/src/bm.vcproj0000644000175000017500000001201611302253364012621 0ustar tlktlk bm3.7.0/src/bmalgo_impl.h0000644000175000017500000014665111365120467013454 0ustar tlktlk#ifndef BMALGO_IMPL__H__INCLUDED__ #define BMALGO_IMPL__H__INCLUDED__ /* Copyright(c) 2002-2010 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4311 4312 4127) #endif #include "bmdef.h" #include "bmutil.h" namespace bm { /*! \defgroup setalgo Set algorithms * Set algorithms * \ingroup bmagic */ /*! \defgroup distance Distance metrics * Algorithms to compute binary distance metrics * \ingroup setalgo */ /*! \brief Distance metrics codes defined for vectors A and B \ingroup distance */ enum distance_metric { COUNT_AND = set_COUNT_AND, //!< (A & B).count() COUNT_XOR = set_COUNT_XOR, //!< (A ^ B).count() COUNT_OR = set_COUNT_OR, //!< (A | B).count() COUNT_SUB_AB = set_COUNT_SUB_AB, //!< (A - B).count() COUNT_SUB_BA = set_COUNT_SUB_BA, //!< (B - A).count() COUNT_A = set_COUNT_A, //!< A.count() COUNT_B = set_COUNT_B //!< B.count() }; /** Convert set operation into compatible distance metric \ingroup distance */ inline distance_metric operation2metric(set_operation op) { BM_ASSERT(is_const_set_operation(op)); if (op == set_COUNT) op = set_COUNT_B; // distance metric is created as a set operation sub-class // simple cast will work to convert return (distance_metric) op; } /*! \brief Distance metric descriptor, holds metric code and result. \sa distance_operation */ struct distance_metric_descriptor { distance_metric metric; bm::id_t result; distance_metric_descriptor(distance_metric m) : metric(m), result(0) {} distance_metric_descriptor() : metric(bm::COUNT_XOR), result(0) {} /*! \brief Sets metric result to 0 */ void reset() { result = 0; } }; /*! \brief Internal function computes different distance metrics. \internal \ingroup distance */ inline void combine_count_operation_with_block(const bm::word_t* blk, const bm::word_t* arg_blk, distance_metric_descriptor* dmit, distance_metric_descriptor* dmit_end) { gap_word_t* g1 = BMGAP_PTR(blk); gap_word_t* g2 = BMGAP_PTR(arg_blk); unsigned gap = BM_IS_GAP(blk); unsigned arg_gap = BM_IS_GAP(arg_blk); if (gap) // first block GAP-type { if (arg_gap) // both blocks GAP-type { for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; switch (dmd.metric) { case bm::COUNT_AND: dmd.result += gap_count_and(g1, g2); break; case bm::COUNT_OR: dmd.result += gap_count_or(g1, g2); break; case bm::COUNT_SUB_AB: dmd.result += gap_count_sub(g1, g2); break; case bm::COUNT_SUB_BA: dmd.result += gap_count_sub(g2, g1); break; case bm::COUNT_XOR: dmd.result += gap_count_xor(g1, g2); break; case bm::COUNT_A: dmd.result += gap_bit_count(g1); break; case bm::COUNT_B: dmd.result += gap_bit_count(g2); break; } // switch } // for it return; } else // first block - GAP, argument - BITSET { for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; switch (dmd.metric) { case bm::COUNT_AND: if (arg_blk) dmd.result += gap_bitset_and_count(arg_blk, g1); break; case bm::COUNT_OR: if (!arg_blk) dmd.result += gap_bit_count(g1); else dmd.result += gap_bitset_or_count(arg_blk, g1); break; case bm::COUNT_SUB_AB: { bm::word_t BM_ALIGN16 temp_bit_blk[bm::set_block_size] BM_ALIGN16ATTR; gap_convert_to_bitset((bm::word_t*) temp_bit_blk, g1); dmd.result += bit_operation_sub_count((bm::word_t*)temp_bit_blk, ((bm::word_t*)temp_bit_blk) + bm::set_block_size, arg_blk); } break; case bm::COUNT_SUB_BA: dmd.metric = bm::COUNT_SUB_AB; // recursive call to SUB_AB combine_count_operation_with_block(arg_blk, blk, it, it+1); dmd.metric = bm::COUNT_SUB_BA; // restore status quo break; case bm::COUNT_XOR: if (!arg_blk) dmd.result += gap_bit_count(g1); else dmd.result += gap_bitset_xor_count(arg_blk, g1); break; case bm::COUNT_A: if (g1) dmd.result += gap_bit_count(g1); break; case bm::COUNT_B: if (arg_blk) { dmd.result += bit_block_calc_count(arg_blk, arg_blk + bm::set_block_size); } break; } // switch } // for it return; } } else // first block is BITSET-type { if (arg_gap) // second argument block is GAP-type { for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; switch (dmd.metric) { case bm::COUNT_AND: if (blk) dmd.result += gap_bitset_and_count(blk, g2); break; case bm::COUNT_OR: if (!blk) dmd.result += gap_bit_count(g2); else dmd.result += gap_bitset_or_count(blk, g2); break; case bm::COUNT_SUB_AB: if (blk) dmd.result += gap_bitset_sub_count(blk, g2); break; case bm::COUNT_SUB_BA: dmd.metric = bm::COUNT_SUB_AB; // recursive call to SUB_AB combine_count_operation_with_block(arg_blk, //arg_gap, blk, //gap, it, it+1); dmd.metric = bm::COUNT_SUB_BA; // restore status quo break; case bm::COUNT_XOR: if (!blk) dmd.result += gap_bit_count(g2); else dmd.result += gap_bitset_xor_count(blk, g2); break; case bm::COUNT_A: if (blk) { dmd.result += bit_block_calc_count(blk, blk + bm::set_block_size); } break; case bm::COUNT_B: if (g2) dmd.result += gap_bit_count(g2); break; } // switch } // for it return; } } // -------------------------------------------- // // Here we combine two plain bitblocks for (distance_metric_descriptor* it = dmit; it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; bit_operation_count_func_type gfunc = operation_functions::bit_operation_count(dmd.metric); if (gfunc) { dmd.result += (*gfunc)(blk, blk + bm::set_block_size, arg_blk); } else { switch (dmd.metric) { case bm::COUNT_A: if (blk) dmd.result += bit_block_calc_count(blk, blk + bm::set_block_size); break; case bm::COUNT_B: if (arg_blk) dmd.result += bit_block_calc_count(arg_blk, arg_blk + bm::set_block_size); break; default: BM_ASSERT(0); } // switch } } // for it } /*! \brief Internal function computes AND distance. \internal \ingroup distance */ inline unsigned combine_count_and_operation_with_block(const bm::word_t* blk, const bm::word_t* arg_blk) { unsigned gap = BM_IS_GAP(blk); unsigned arg_gap = BM_IS_GAP(arg_blk); if (gap) // first block GAP-type { if (arg_gap) // both blocks GAP-type { return gap_count_and(BMGAP_PTR(blk), BMGAP_PTR(arg_blk)); } else // first block - GAP, argument - BITSET { return gap_bitset_and_count(arg_blk, BMGAP_PTR(blk)); } } else // first block is BITSET-type { if (arg_gap) // second argument block is GAP-type { return gap_bitset_and_count(blk, BMGAP_PTR(arg_blk)); } } // -------------------------------------------- // Here we combine two plain bitblocks return bit_operation_and_count(blk, blk + (bm::set_block_size), arg_blk); } /*! \brief Internal function computes different existense of distance metric. \internal \ingroup distance */ inline void combine_any_operation_with_block(const bm::word_t* blk, unsigned gap, const bm::word_t* arg_blk, int arg_gap, distance_metric_descriptor* dmit, distance_metric_descriptor* dmit_end) { gap_word_t* res=0; gap_word_t* g1 = BMGAP_PTR(blk); gap_word_t* g2 = BMGAP_PTR(arg_blk); if (gap) // first block GAP-type { if (arg_gap) // both blocks GAP-type { gap_word_t tmp_buf[bm::gap_max_buff_len * 3]; // temporary result for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; if (dmd.result) { continue; } res = 0; unsigned dsize = 0; switch (dmd.metric) { case bm::COUNT_AND: dmd.result += gap_operation_any_and(g1, g2); break; case bm::COUNT_OR: res = gap_operation_or(g1, g2, tmp_buf, dsize); break; case bm::COUNT_SUB_AB: dmd.result += gap_operation_any_sub(g1, g2); break; case bm::COUNT_SUB_BA: dmd.result += gap_operation_any_sub(g2, g1); break; case bm::COUNT_XOR: dmd.result += gap_operation_any_xor(g1, g2); break; case bm::COUNT_A: res = g1; break; case bm::COUNT_B: res = g2; break; } // switch if (res) dmd.result += !gap_is_all_zero(res, bm::gap_max_bits); } // for it return; } else // first block - GAP, argument - BITSET { for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; if (dmd.result) { continue; } switch (dmd.metric) { case bm::COUNT_AND: if (arg_blk) dmd.result += gap_bitset_and_any(arg_blk, g1); break; case bm::COUNT_OR: if (!arg_blk) dmd.result += !gap_is_all_zero(g1, bm::gap_max_bits); else dmd.result += gap_bitset_or_any(arg_blk, g1); break; case bm::COUNT_SUB_AB: { bm::word_t BM_ALIGN16 temp_blk[bm::set_block_size] BM_ALIGN16ATTR; gap_convert_to_bitset((bm::word_t*) temp_blk, g1); dmd.result += bit_operation_sub_any((bm::word_t*)temp_blk, ((bm::word_t*)temp_blk) + bm::set_block_size, arg_blk); } break; case bm::COUNT_SUB_BA: dmd.metric = bm::COUNT_SUB_AB; // recursive call to SUB_AB combine_any_operation_with_block(arg_blk, arg_gap, blk, gap, it, it+1); dmd.metric = bm::COUNT_SUB_BA; // restore status quo break; case bm::COUNT_XOR: if (!arg_blk) dmd.result += !gap_is_all_zero(g1, bm::gap_max_bits); else dmd.result += gap_bitset_xor_any(arg_blk, g1); break; case bm::COUNT_A: if (g1) dmd.result += !gap_is_all_zero(g1, bm::gap_max_bits); break; case bm::COUNT_B: if (arg_blk) { dmd.result += !bit_is_all_zero((bm::wordop_t*)arg_blk, (bm::wordop_t*)(arg_blk + bm::set_block_size)); } break; } // switch } // for it return; } } else // first block is BITSET-type { if (arg_gap) // second argument block is GAP-type { for (distance_metric_descriptor* it = dmit;it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; if (dmd.result) { continue; } switch (dmd.metric) { case bm::COUNT_AND: if (blk) dmd.result += gap_bitset_and_any(blk, g2); break; case bm::COUNT_OR: if (!blk) dmd.result += !gap_is_all_zero(g2, bm::gap_max_bits); else dmd.result += gap_bitset_or_any(blk, g2); break; case bm::COUNT_SUB_AB: if (blk) dmd.result += gap_bitset_sub_any(blk, g2); break; case bm::COUNT_SUB_BA: dmd.metric = bm::COUNT_SUB_AB; // recursive call to SUB_AB combine_any_operation_with_block(arg_blk, arg_gap, blk, gap, it, it+1); dmd.metric = bm::COUNT_SUB_BA; // restore status quo break; case bm::COUNT_XOR: if (!blk) dmd.result += !gap_is_all_zero(g2, bm::gap_max_bits); else dmd.result += gap_bitset_xor_any(blk, g2); break; case bm::COUNT_A: if (blk) { dmd.result+= !bit_is_all_zero((bm::wordop_t*)blk, (bm::wordop_t*)blk + bm::set_block_size); } break; case bm::COUNT_B: if (g2) dmd.result += !gap_is_all_zero(g2, bm::gap_max_bits); break; } // switch } // for it return; } } // -------------------------------------------- // // Here we combine two plain bitblocks const bm::word_t* blk_end; const bm::word_t* arg_end; blk_end = blk + (bm::set_block_size); arg_end = arg_blk + (bm::set_block_size); for (distance_metric_descriptor* it = dmit; it < dmit_end; ++it) { distance_metric_descriptor& dmd = *it; if (dmd.result) { continue; } switch (dmd.metric) { case bm::COUNT_AND: dmd.result += bit_operation_and_any(blk, blk_end, arg_blk); break; case bm::COUNT_OR: dmd.result += bit_operation_or_any(blk, blk_end, arg_blk); break; case bm::COUNT_SUB_AB: dmd.result += bit_operation_sub_any(blk, blk_end, arg_blk); break; case bm::COUNT_SUB_BA: dmd.result += bit_operation_sub_any(arg_blk, arg_end, blk); break; case bm::COUNT_XOR: dmd.result += bit_operation_xor_any(blk, blk_end, arg_blk); break; case bm::COUNT_A: if (blk) dmd.result += !bit_is_all_zero((bm::wordop_t*)blk, (bm::wordop_t*)blk_end); break; case bm::COUNT_B: if (arg_blk) dmd.result += !bit_is_all_zero((bm::wordop_t*)arg_blk, (bm::wordop_t*)arg_end); break; } // switch } // for it } /*! Convenience internal function to compute combine count for one metric \internal \ingroup distance */ inline unsigned combine_count_operation_with_block(const bm::word_t* blk, const bm::word_t* arg_blk, distance_metric metric) { distance_metric_descriptor dmd(metric); combine_count_operation_with_block(blk, //gap, arg_blk, //arg_gap, //temp_blk, &dmd, &dmd+1); return dmd.result; } /*! Convenience internal function to compute combine any for one metric \internal \ingroup distance */ inline unsigned combine_any_operation_with_block(const bm::word_t* blk, unsigned gap, const bm::word_t* arg_blk, int arg_gap, distance_metric metric) { distance_metric_descriptor dmd(metric); combine_any_operation_with_block(blk, gap, arg_blk, arg_gap, &dmd, &dmd+1); return dmd.result; } /*! \brief Staging function for distance operation \return temp block allocated (or NULL) \internal */ inline void distance_stage(const distance_metric_descriptor* dmit, const distance_metric_descriptor* dmit_end, bool* is_all_and) { for (const distance_metric_descriptor* it = dmit; it < dmit_end; ++it) { if (it->metric != bm::COUNT_AND) { *is_all_and = false; } } // for } /*! \brief Distance computing template function. Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes all metrics saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline. \param bv1 - argument bitvector 1 (A) \param bv2 - argument bitvector 2 (B) \param dmit - pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field \param dmit_end - pointer to (last+1) element of metric descriptors array \ingroup distance */ template void distance_operation(const BV& bv1, const BV& bv2, distance_metric_descriptor* dmit, distance_metric_descriptor* dmit_end) { const typename BV::blocks_manager_type& bman1 = bv1.get_blocks_manager(); const typename BV::blocks_manager_type& bman2 = bv2.get_blocks_manager(); bool is_all_and = true; // flag is distance operation is just COUNT_AND distance_stage(dmit, dmit_end, &is_all_and); bm::word_t*** blk_root = bman1.get_rootblock(); unsigned block_idx = 0; unsigned i, j; const bm::word_t* blk; const bm::word_t* arg_blk; BM_SET_MMX_GUARD unsigned effective_top_block_size = bman1.effective_top_block_size(); unsigned ebs2 = bman2.effective_top_block_size(); if (ebs2 > effective_top_block_size) effective_top_block_size = ebs2; for (i = 0; i < effective_top_block_size; ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) // not allocated { // AND operation requested - we can skip this portion here if (is_all_and) { block_idx += bm::set_array_size; continue; } const bm::word_t* const* bvbb = bman2.get_topblock(i); if (bvbb == 0) { block_idx += bm::set_array_size; continue; } blk = 0; for (j = 0; j < bm::set_array_size; ++j,++block_idx) { arg_blk = bman2.get_block(i, j); if (!arg_blk) continue; combine_count_operation_with_block(blk, arg_blk, dmit, dmit_end); } // for j continue; } for (j = 0; j < bm::set_array_size; ++j, ++block_idx) { blk = blk_blk[j]; if (blk == 0 && is_all_and) continue; arg_blk = bman2.get_block(i, j); if (blk == 0 && arg_blk == 0) continue; combine_count_operation_with_block(blk, arg_blk, dmit, dmit_end); } // for j } // for i } /*! \brief Distance AND computing template function. \param bv1 - argument bitvector 1 (A) \param bv2 - argument bitvector 2 (B) \ingroup distance */ template unsigned distance_and_operation(const BV& bv1, const BV& bv2) { const typename BV::blocks_manager_type& bman1 = bv1.get_blocks_manager(); const typename BV::blocks_manager_type& bman2 = bv2.get_blocks_manager(); bm::word_t*** blk_root = bman1.get_rootblock(); bm::word_t*** blk_root_arg = bman2.get_rootblock(); unsigned count = 0; BM_SET_MMX_GUARD unsigned effective_top_block_size = bm::min_value(bman1.effective_top_block_size(), bman2.effective_top_block_size()); for (unsigned i = 0; i < effective_top_block_size; ++i) { bm::word_t** blk_blk; bm::word_t** blk_blk_arg; if ((blk_blk = blk_root[i]) == 0 || (blk_blk_arg= blk_root_arg[i]) == 0) { continue; } for (unsigned j = 0; j < bm::set_array_size; j+=4) { (blk_blk[j] && blk_blk_arg[j]) ? count += combine_count_and_operation_with_block(blk_blk[j],blk_blk_arg[j]) :0; (blk_blk[j+1] && blk_blk_arg[j+1]) ? count += combine_count_and_operation_with_block(blk_blk[j+1],blk_blk_arg[j+1]) :0; (blk_blk[j+2] && blk_blk_arg[j+2]) ? count += combine_count_and_operation_with_block(blk_blk[j+2],blk_blk_arg[j+2]) :0; (blk_blk[j+3] && blk_blk_arg[j+3]) ? count += combine_count_and_operation_with_block(blk_blk[j+3],blk_blk_arg[j+3]) :0; } // for j } // for i return count; } /*! \brief Distance screening template function. Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes possybility of a metric(any bit) saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline. \param bv1 - argument bitvector 1 (A) \param bv2 - argument bitvector 2 (B) \param dmit - pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field \param dmit_end - pointer to (last+1) element of metric descriptors array \ingroup distance */ template void distance_operation_any(const BV& bv1, const BV& bv2, distance_metric_descriptor* dmit, distance_metric_descriptor* dmit_end) { const typename BV::blocks_manager_type& bman1 = bv1.get_blocks_manager(); const typename BV::blocks_manager_type& bman2 = bv2.get_blocks_manager(); bool is_all_and = true; // flag is distance operation is just COUNT_AND //bm::word_t* temp_blk = distance_stage(dmit, dmit_end, &is_all_and); bm::word_t*** blk_root = bman1.get_rootblock(); unsigned block_idx = 0; unsigned i, j; const bm::word_t* blk; const bm::word_t* arg_blk; bool blk_gap; bool arg_gap; BM_SET_MMX_GUARD unsigned effective_top_block_size = bman1.effective_top_block_size(); unsigned ebs2 = bman2.effective_top_block_size(); if (ebs2 > effective_top_block_size) effective_top_block_size = ebs2; for (i = 0; i < effective_top_block_size; ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) // not allocated { // AND operation requested - we can skip this portion here if (is_all_and) { block_idx += bm::set_array_size; continue; } const bm::word_t* const* bvbb = bman2.get_topblock(i); if (bvbb == 0) { block_idx += bm::set_array_size; continue; } blk = 0; blk_gap = false; for (j = 0; j < bm::set_array_size; ++j,++block_idx) { arg_blk = bman2.get_block(i, j); arg_gap = BM_IS_GAP(arg_blk); if (!arg_blk) continue; combine_any_operation_with_block(blk, blk_gap, arg_blk, arg_gap, dmit, dmit_end); // check if all distance requests alredy resolved bool all_resolved = false; distance_metric_descriptor* it=dmit; do { if (!it->result) { all_resolved = false; break; } ++it; } while (it < dmit_end); if (all_resolved) return; } // for j continue; } for (j = 0; j < bm::set_array_size; ++j, ++block_idx) { blk = blk_blk[j]; if (blk == 0 && is_all_and) continue; arg_blk = bman2.get_block(i, j); if (blk == 0 && arg_blk == 0) continue; arg_gap = BM_IS_GAP(arg_blk); blk_gap = BM_IS_GAP(blk); combine_any_operation_with_block(blk, blk_gap, arg_blk, arg_gap, dmit, dmit_end); // check if all distance requests alredy resolved bool all_resolved = false; distance_metric_descriptor* it=dmit; do { if (!it->result) { all_resolved = false; break; } ++it; } while (it < dmit_end); if (all_resolved) return; } // for j } // for i } /*! \brief Computes bitcount of AND operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return bitcount of the result \ingroup distance */ template bm::id_t count_and(const BV& bv1, const BV& bv2) { return distance_and_operation(bv1, bv2); } /*! \brief Computes if there is any bit in AND operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return non zero value if there is any bit \ingroup distance */ template bm::id_t any_and(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_AND); distance_operation_any(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes bitcount of XOR operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return bitcount of the result \ingroup distance */ template bm::id_t count_xor(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_XOR); distance_operation(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes if there is any bit in XOR operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return non zero value if there is any bit \ingroup distance */ template bm::id_t any_xor(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_XOR); distance_operation_any(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes bitcount of SUB operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return bitcount of the result \ingroup distance */ template bm::id_t count_sub(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_SUB_AB); distance_operation(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes if there is any bit in SUB operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return non zero value if there is any bit \ingroup distance */ template bm::id_t any_sub(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_SUB_AB); distance_operation_any(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes bitcount of OR operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return bitcount of the result \ingroup distance */ template bm::id_t count_or(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_OR); distance_operation(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /*! \brief Computes if there is any bit in OR operation of two bitsets \param bv1 - Argument bit-vector. \param bv2 - Argument bit-vector. \return non zero value if there is any bit \ingroup distance */ template bm::id_t any_or(const BV& bv1, const BV& bv2) { distance_metric_descriptor dmd(bm::COUNT_OR); distance_operation_any(bv1, bv2, &dmd, &dmd+1); return dmd.result; } /** \brief Internal algorithms scans the input for the block range limit \internal */ template It block_range_scan(It first, It last, unsigned nblock, unsigned* max_id) { It right; for (right = first; right != last; ++right) { unsigned v = unsigned(*right); BM_ASSERT(v < bm::id_max); if (v >= *max_id) *max_id = v; unsigned nb = v >> bm::set_block_shift; if (nb != nblock) break; } return right; } /** \brief OR Combine bitvector and the iterable sequence Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance. \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo */ template void combine_or(BV& bv, It first, It last) { typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); unsigned max_id = 0; while (first < last) { unsigned nblock = unsigned((*first) >> bm::set_block_shift); It right = block_range_scan(first, last, nblock, &max_id); if (max_id >= bv.size()) { BM_ASSERT(max_id < bm::id_max); bv.resize(max_id + 1); } // now we have one in-block array of bits to set label1: int block_type; bm::word_t* blk = bman.check_allocate_block(nblock, true, bv.get_new_blocks_strat(), &block_type); if (!blk) continue; if (block_type == 1) // gap { bm::gap_word_t* gap_blk = BMGAP_PTR(blk); unsigned threshold = bm::gap_limit(gap_blk, bman.glen()); for (; first < right; ++first) { unsigned is_set; unsigned nbit = (*first) & bm::set_block_mask; unsigned new_block_len = gap_set_value(true, gap_blk, nbit, &is_set); if (new_block_len > threshold) { bman.extend_gap_block(nblock, gap_blk); ++first; goto label1; // block pointer changed - goto reset } } } else // bit block { for (; first < right; ++first) { unsigned nbit = unsigned(*first & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; blk[nword] |= (bm::word_t)1 << nbit; } // for } } // while bv.forget_count(); } /** \brief XOR Combine bitvector and the iterable sequence Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance. \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo */ template void combine_xor(BV& bv, It first, It last) { typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); unsigned max_id = 0; while (first < last) { unsigned nblock = unsigned((*first) >> bm::set_block_shift); It right = block_range_scan(first, last, nblock, &max_id); if (max_id >= bv.size()) { BM_ASSERT(max_id < bm::id_max); bv.resize(max_id + 1); } // now we have one in-block array of bits to set label1: int block_type; bm::word_t* blk = bman.check_allocate_block(nblock, true, bv.get_new_blocks_strat(), &block_type, false /* no null return */); BM_ASSERT(blk); if (block_type == 1) // gap { bm::gap_word_t* gap_blk = BMGAP_PTR(blk); unsigned threshold = bm::gap_limit(gap_blk, bman.glen()); for (; first < right; ++first) { unsigned is_set; unsigned nbit = (*first) & bm::set_block_mask; is_set = gap_test(gap_blk, nbit); BM_ASSERT(is_set <= 1); is_set ^= 1; unsigned new_block_len = gap_set_value(is_set, gap_blk, nbit, &is_set); if (new_block_len > threshold) { bman.extend_gap_block(nblock, gap_blk); ++first; goto label1; // block pointer changed - goto reset } } } else // bit block { for (; first < right; ++first) { unsigned nbit = unsigned(*first & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; blk[nword] ^= (bm::word_t)1 << nbit; } // for } } // while bv.forget_count(); } /** \brief SUB Combine bitvector and the iterable sequence Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance. \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo */ template void combine_sub(BV& bv, It first, It last) { typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); unsigned max_id = 0; while (first < last) { unsigned nblock = unsigned((*first) >> bm::set_block_shift); It right = block_range_scan(first, last, nblock, &max_id); if (max_id >= bv.size()) { BM_ASSERT(max_id < bm::id_max); bv.resize(max_id + 1); } // now we have one in-block array of bits to set label1: int block_type; bm::word_t* blk = bman.check_allocate_block(nblock, false, bv.get_new_blocks_strat(), &block_type); if (!blk) continue; if (block_type == 1) // gap { bm::gap_word_t* gap_blk = BMGAP_PTR(blk); unsigned threshold = bm::gap_limit(gap_blk, bman.glen()); for (; first < right; ++first) { unsigned is_set; unsigned nbit = (*first) & bm::set_block_mask; is_set = gap_test(gap_blk, nbit); if (!is_set) continue; unsigned new_block_len = gap_set_value(false, gap_blk, nbit, &is_set); if (new_block_len > threshold) { bman.extend_gap_block(nblock, gap_blk); ++first; goto label1; // block pointer changed - goto reset } } } else // bit block { for (; first < right; ++first) { unsigned nbit = unsigned(*first & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; blk[nword] &= ~((bm::word_t)1 << nbit); } // for } } // while bv.forget_count(); } /** \brief AND Combine bitvector and the iterable sequence Algorithm combines bvector with sorted sequence of integers (represents another set). \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo */ template void combine_and_sorted(BV& bv, It first, It last) { bm::id_t prev = 0; for ( ;first < last; ++first) { bm::id_t id = *first; BM_ASSERT(id >= prev); // make sure it's sorted bv.set_bit_and(id, true); if (++prev < id) { bv.set_range(prev, id-1, false); } prev = id; } } /** \brief AND Combine bitvector and the iterable sequence Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance. \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo \sa combine_and_sorted */ template void combine_and(BV& bv, It first, It last) { BV bv_tmp; combine_or(bv_tmp, first, last); bv &= bv_tmp; } /*! \brief Compute number of bit intervals (GAPs) in the bitvector Algorithm traverses bit vector and count number of uninterrupted intervals of 1s and 0s.
    For example: 
      00001111100000 - gives us 3 intervals
      10001111100000 - 4 intervals
      00000000000000 - 1 interval
      11111111111111 - 1 interval
    
\return Number of intervals \ingroup setalgo */ template bm::id_t count_intervals(const BV& bv) { const typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); bm::word_t*** blk_root = bman.get_rootblock(); typename BV::blocks_manager_type::block_count_change_func func(bman); for_each_block(blk_root, bman.top_block_size(), func); return func.count(); } /*! \brief Export bitset from an array of binary data representing the bit vector. Input array can be array of ints, chars or other native C types. Method works with iterators, which makes it compatible with STL containers and C arrays \param bv - destination bitvector \param first - first element of the iterated sequence \param last - last element of the iterated sequence \ingroup setalgo */ template void export_array(BV& bv, It first, It last) { typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); unsigned inp_word_size = sizeof(*first); size_t array_size = last - first; size_t bit_cnt = array_size * inp_word_size * 8; int block_type; bm::word_t tmp; unsigned b1, b2, b3, b4; if (bit_cnt >= bv.size()) bv.resize((bm::id_t)bit_cnt + 1); else bv.set_range((bm::id_t)bit_cnt, bv.size() - 1, false); switch (inp_word_size) { case 1: { size_t word_cnt = array_size / 4; for (unsigned i = 0; i < bm::set_total_blocks; ++i) { bm::word_t* blk = bman.check_allocate_block(i, false, BM_BIT, &block_type, false /*no NULL ret*/); if (block_type == 1) // gap { blk = bman.convert_gap2bitset(i, BMGAP_PTR(blk)); } bm::word_t* wrd_ptr = blk; if (word_cnt >= bm::set_block_size) { bm::word_t* wrd_end = blk + bm::set_block_size; do { b1 = *first++; b2 = *first++; b3 = *first++; b4 = *first++; tmp = b1 | (b2 << 8) | (b3 << 16) | (b4 << 24); *wrd_ptr++ = tmp; } while (wrd_ptr < wrd_end); word_cnt -= bm::set_block_size; } else { size_t to_convert = last - first; for (size_t j = 0; j < to_convert / 4; ++j) { b1 = *first++; b2 = *first++; b3 = *first++; b4 = *first++; tmp = b1 | (b2 << 8) | (b3 << 16) | (b4 << 24); *wrd_ptr++ = tmp; } while (1) { if (first == last) break; *wrd_ptr = *first++; if (first == last) break; *wrd_ptr |= (*first++) << 8; if (first == last) break; *wrd_ptr |= (*first++) << 16; if (first == last) break; *wrd_ptr |= (*first++) << 24; ++wrd_ptr; } } if (first == last) break; } // for } break; case 2: { size_t word_cnt = array_size / 2; for (unsigned i = 0; i < bm::set_total_blocks; ++i) { bm::word_t* blk = bman.check_allocate_block(i, false, BM_BIT, &block_type, false /*no NULL ret*/); if (block_type == 1) // gap { blk = bman.convert_gap2bitset(i, BMGAP_PTR(blk)); } bm::word_t* wrd_ptr = blk; if (word_cnt >= bm::set_block_size) { bm::word_t* wrd_end = blk + bm::set_block_size; do { b1 = *first++; b2 = *first++; tmp = b1 | (b2 << 16); *wrd_ptr++ = tmp; } while (wrd_ptr < wrd_end); word_cnt -= bm::set_block_size; } else { size_t to_convert = last - first; for (unsigned j = 0; j < to_convert / 2; ++j) { b1 = *first++; b2 = *first++; tmp = b1 | (b2 << 16); *wrd_ptr++ = tmp; } while (1) { if (first == last) break; *wrd_ptr = *first++; if (first == last) break; *wrd_ptr |= (*first++) << 16; ++wrd_ptr; } } if (first == last) break; } // for } break; case 4: { size_t word_cnt = array_size; for (unsigned i = 0; i < bm::set_total_blocks; ++i) { bm::word_t* blk = bman.check_allocate_block(i, false, BM_BIT, &block_type, false /*no NULL ret*/); if (block_type == 1) // gap { blk = bman.convert_gap2bitset(i, BMGAP_PTR(blk)); } bm::word_t* wrd_ptr = blk; if (word_cnt >= bm::set_block_size) { bm::word_t* wrd_end = blk + bm::set_block_size; do { *wrd_ptr++ = *first++; } while (wrd_ptr < wrd_end); word_cnt -= bm::set_block_size; } else { while (1) { if (first == last) break; *wrd_ptr = *first++; ++wrd_ptr; } } if (first == last) break; } // for } break; default: BM_ASSERT(0); } // switch } } // namespace bm #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmtrans.h0000644000175000017500000006624711365120467012642 0ustar tlktlk#ifndef BMTRANS__H__INCLUDED__ #define BMTRANS__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4311 4312 4127) #endif namespace bm { /** Mini-matrix for bit transposition purposes @internal */ template struct tmatrix { typedef T value_type; T BM_ALIGN16 value[ROWS][COLS] BM_ALIGN16ATTR; enum params { n_rows = ROWS, n_columns = COLS }; /// Row characteristics for transposed matrix struct rstat { unsigned bit_count; unsigned gap_count; bm::set_representation best_rep; }; static unsigned rows() { return ROWS; } static unsigned cols() { return COLS; } const T* row(unsigned row_idx) const { return value[row_idx]; } T* row(unsigned row_idx) { return value[row_idx]; } }; /*! Bit array grabber - template specitialization for various basic types @internal */ template struct bit_grabber { static unsigned get(const T*, unsigned) { BM_ASSERT(0); return 0; } }; template<> struct bit_grabber { static unsigned get(const unsigned* arr, unsigned j) { return (((arr[0] >> j) & 1) << 0) | (((arr[1] >> j) & 1) << 1) | (((arr[2] >> j) & 1) << 2) | (((arr[3] >> j) & 1) << 3) | (((arr[4] >> j) & 1) << 4) | (((arr[5] >> j) & 1) << 5) | (((arr[6] >> j) & 1) << 6) | (((arr[7] >> j) & 1) << 7) | (((arr[8] >> j) & 1) << 8) | (((arr[9] >> j) & 1) << 9) | (((arr[10]>> j) & 1) << 10)| (((arr[11]>> j) & 1) << 11)| (((arr[12]>> j) & 1) << 12)| (((arr[13]>> j) & 1) << 13)| (((arr[14]>> j) & 1) << 14)| (((arr[15]>> j) & 1) << 15)| (((arr[16]>> j) & 1) << 16)| (((arr[17]>> j) & 1) << 17)| (((arr[18]>> j) & 1) << 18)| (((arr[19]>> j) & 1) << 19)| (((arr[20]>> j) & 1) << 20)| (((arr[21]>> j) & 1) << 21)| (((arr[22]>> j) & 1) << 22)| (((arr[23]>> j) & 1) << 23)| (((arr[24]>> j) & 1) << 24)| (((arr[25]>> j) & 1) << 25)| (((arr[26]>> j) & 1) << 26)| (((arr[27]>> j) & 1) << 27)| (((arr[28]>> j) & 1) << 28)| (((arr[29]>> j) & 1) << 29)| (((arr[30]>> j) & 1) << 30)| (((arr[31]>> j) & 1) << 31); } }; template<> struct bit_grabber { static unsigned get(const unsigned short* arr, unsigned j) { return (((arr[0] >> j) & 1) << 0) | (((arr[1] >> j) & 1) << 1) | (((arr[2] >> j) & 1) << 2) | (((arr[3] >> j) & 1) << 3) | (((arr[4] >> j) & 1) << 4) | (((arr[5] >> j) & 1) << 5) | (((arr[6] >> j) & 1) << 6) | (((arr[7] >> j) & 1) << 7) | (((arr[8] >> j) & 1) << 8) | (((arr[9] >> j) & 1) << 9) | (((arr[10]>> j) & 1) << 10)| (((arr[11]>> j) & 1) << 11)| (((arr[12]>> j) & 1) << 12)| (((arr[13]>> j) & 1) << 13)| (((arr[14]>> j) & 1) << 14)| (((arr[15]>> j) & 1) << 15); } }; template<> struct bit_grabber { static unsigned get(const unsigned char* arr, unsigned j) { return (((arr[0] >> j) & 1) << 0) | (((arr[1] >> j) & 1) << 1) | (((arr[2] >> j) & 1) << 2) | (((arr[3] >> j) & 1) << 3) | (((arr[4] >> j) & 1) << 4) | (((arr[5] >> j) & 1) << 5) | (((arr[6] >> j) & 1) << 6) | (((arr[7] >> j) & 1) << 7); } }; /*! Bit transpose matrix grabber - template specitialization for various basic types @internal */ template struct bit_trans_grabber { static T get(const T tmatrix[BPC][BPS], unsigned i, unsigned j) { T w = 0; // Next code hopes that compiler will completely // eliminate ifs (all conditions are known at compile time) // ( typically C++ compilers are smart to do that) // 8-bit (minimum) w |= (((tmatrix[0][i] >> j) & 1) << 0) | (((tmatrix[1][i] >> j) & 1) << 1) | (((tmatrix[2][i] >> j) & 1) << 2) | (((tmatrix[3][i] >> j) & 1) << 3) | (((tmatrix[4][i] >> j) & 1) << 4) | (((tmatrix[5][i] >> j) & 1) << 5) | (((tmatrix[6][i] >> j) & 1) << 6) | (((tmatrix[7][i] >> j) & 1) << 7); // 16-bit if (BPC > 8) { w |= (((tmatrix[8][i] >> j) & 1) << 8) | (((tmatrix[9][i] >> j) & 1) << 9) | (((tmatrix[10][i] >> j) & 1) << 10) | (((tmatrix[11][i] >> j) & 1) << 11) | (((tmatrix[12][i] >> j) & 1) << 12) | (((tmatrix[13][i] >> j) & 1) << 13) | (((tmatrix[14][i] >> j) & 1) << 14) | (((tmatrix[15][i] >> j) & 1) << 15); } // 32-bit if (BPC > 16) { w |= (((tmatrix[16][i] >> j) & 1) << 16) | (((tmatrix[17][i] >> j) & 1) << 17) | (((tmatrix[18][i] >> j) & 1) << 18) | (((tmatrix[19][i] >> j) & 1) << 19) | (((tmatrix[20][i] >> j) & 1) << 20) | (((tmatrix[21][i] >> j) & 1) << 21) | (((tmatrix[22][i] >> j) & 1) << 22) | (((tmatrix[23][i] >> j) & 1) << 23) | (((tmatrix[24][i] >> j) & 1) << 24) | (((tmatrix[25][i] >> j) & 1) << 25) | (((tmatrix[26][i] >> j) & 1) << 26) | (((tmatrix[27][i] >> j) & 1) << 27) | (((tmatrix[28][i] >> j) & 1) << 28) | (((tmatrix[29][i] >> j) & 1) << 29) | (((tmatrix[30][i] >> j) & 1) << 30) | (((tmatrix[31][i] >> j) & 1) << 31); } return w; } }; /* template<> struct bit_trans_grabber { static unsigned get(const unsigned tmatrix[32][bm::set_block_plain_size], unsigned i, unsigned j) { return (((tmatrix[0][i] >> j) & 1) << 0) | (((tmatrix[1][i] >> j) & 1) << 1) | (((tmatrix[2][i] >> j) & 1) << 2) | (((tmatrix[3][i] >> j) & 1) << 3) | (((tmatrix[4][i] >> j) & 1) << 4) | (((tmatrix[5][i] >> j) & 1) << 5) | (((tmatrix[6][i] >> j) & 1) << 6) | (((tmatrix[7][i] >> j) & 1) << 7) | (((tmatrix[8][i] >> j) & 1) << 8) | (((tmatrix[9][i] >> j) & 1) << 9) | (((tmatrix[10][i] >> j) & 1) << 10) | (((tmatrix[11][i] >> j) & 1) << 11) | (((tmatrix[12][i] >> j) & 1) << 12) | (((tmatrix[13][i] >> j) & 1) << 13) | (((tmatrix[14][i] >> j) & 1) << 14) | (((tmatrix[15][i] >> j) & 1) << 15) | (((tmatrix[16][i] >> j) & 1) << 16) | (((tmatrix[17][i] >> j) & 1) << 17) | (((tmatrix[18][i] >> j) & 1) << 18) | (((tmatrix[19][i] >> j) & 1) << 19) | (((tmatrix[20][i] >> j) & 1) << 20) | (((tmatrix[21][i] >> j) & 1) << 21) | (((tmatrix[22][i] >> j) & 1) << 22) | (((tmatrix[23][i] >> j) & 1) << 23) | (((tmatrix[24][i] >> j) & 1) << 24) | (((tmatrix[25][i] >> j) & 1) << 25) | (((tmatrix[26][i] >> j) & 1) << 26) | (((tmatrix[27][i] >> j) & 1) << 27) | (((tmatrix[28][i] >> j) & 1) << 28) | (((tmatrix[29][i] >> j) & 1) << 29) | (((tmatrix[30][i] >> j) & 1) << 30) | (((tmatrix[31][i] >> j) & 1) << 31); } }; */ /** Generic bit-array transposition function T - array type (any int) BPC - bit plain count BPS - bit plain size \param arr - source array start \param arr_size - source array size \param tmatrix - destination bit matrix */ template void vect_bit_transpose(const T* arr, unsigned arr_size, T tmatrix[BPC][BPS]) { BM_ASSERT(sizeof(T)*8 == BPC); unsigned col = 0; for (unsigned i = 0; i < arr_size; i+=BPC, arr+=BPC, ++col) { for (unsigned j = 0; j < BPC; ++j) { unsigned w = bm::bit_grabber::get(arr, j); T* row = tmatrix[j]; row[col] = (T)w; } // for j } // for i } /** Restore bit array from the transposition matrix T - array type (any int) BPC - bit plain count BPS - bit plain size \param arr - dest array \param tmatrix - source bit-slice matrix */ template void vect_bit_trestore(const T tmatrix[BPC][BPS], T* arr) { unsigned col = 0; for (unsigned i = 0; i < BPS; ++i) { for (unsigned j = 0; j < BPC; ++j, ++col) { arr[col] = bm::bit_trans_grabber::get(tmatrix, i, j); } // for j } // for i } /*! \brief Compute pairwise Row x Row Humming distances on plains(rows) of the transposed bit block \param tmatrix - bit-block transposition matrix (bit-plains) \param distance - pairwise NxN Humming distance matrix (diagonal is popcnt) @ingroup bitfunc */ template void tmatrix_distance(const T tmatrix[BPC][BPS], unsigned distance[BPC][BPC]) { for (unsigned i = 0; i < BPC; ++i) { const T* r1 = tmatrix[i]; const T* r1_end = r1 + BPS; distance[i][i] = bm::bit_block_calc_count((bm::word_t*)r1, (bm::word_t*)r1_end); for (unsigned j = i + 1; j < BPC; ++j) { r1 = tmatrix[i]; r1_end = r1 + BPS; unsigned count = 0; { const T* r2 = tmatrix[i]; const T* r2_end = r2 + BPS; const bm::word_t* r3 = (bm::word_t*)(tmatrix[j]); do { BM_INCWORD_BITCOUNT(count, r2[0] ^ r3[0]); BM_INCWORD_BITCOUNT(count, r2[1] ^ r3[1]); BM_INCWORD_BITCOUNT(count, r2[2] ^ r3[2]); BM_INCWORD_BITCOUNT(count, r2[3] ^ r3[3]); r2 += 4; r3 += 4; } while (r2 < r2_end); } distance[i][j] = count; } // for j } // for i } const unsigned char ibpc_uncompr = 0; ///!< plain uncompressed const unsigned char ibpc_all_zero= 1; ///!< plain ALL ZERO const unsigned char ibpc_all_one = 2; ///!< plain ALL ONE const unsigned char ibpc_equiv = 3; ///!< plain is equal to plain M const unsigned char ibpc_close = 4; ///!< plain is close to plain M const unsigned char ibpc_end = 8; ///!< ibpc limiter /*! \brief Make a compression descriptor vector for bit-plains \param distance - pairwise distance matrix \param pc_vector - OUT compression descriptor vector
        pc_vector[] format:
            each element (pc_vector[i]) describes the plain compression:
                first 3 bits - compression code:
                    0 - plain uncompressed
                    1 - plain is ALL ZERO (000000...)
                    2 - plain is ALL ONE  (111111...)
                    3 - plain is equal to another plain J (5 high bits (max 31))
                    4 - plain is close (but not equal) to plain J
                next 5 bits - number of plain used as a XOR expression
                 ( compression codes: 3,4 )
    
@ingroup bitfunc */ template void bit_iblock_make_pcv( const unsigned distance[BPC][BPC], unsigned char* pc_vector) { BM_ASSERT(pc_vector); for (unsigned i = 0; i < BPC; ++i) { unsigned char pc = ibpc_uncompr; unsigned row_bitcount = distance[i][i]; const unsigned total_possible_max = sizeof(T)*8*BPS; switch (row_bitcount) { case 0: pc_vector[i] = ibpc_all_zero; continue; case total_possible_max: pc_vector[i] = ibpc_all_one; continue; } // Dense-populated set, leave it as is if (row_bitcount > total_possible_max/2) { pc_vector[i] = ibpc_uncompr; continue; } // scan for the closest neighbor // unsigned rmin = ~0u; unsigned rmin_idx = 0; for (unsigned j = i + 1; j < BPC; ++j) { unsigned d = distance[i][j]; if (d < rmin) // new minimum - closest plain { if (d == 0) // plain is complete duplicate of j { pc = (unsigned char)(ibpc_equiv | (j << 3)); break; } rmin = d; rmin_idx = j; } } // for j if ((pc == 0) && rmin_idx && (rmin < row_bitcount)) // neighbor found { pc = (unsigned char)(ibpc_close | (rmin_idx << 3)); } pc_vector[i] = pc; } // for i } /*! \brief Compute number of ibpc codes in pc_vector */ inline void bit_iblock_pcv_stat(const unsigned char* BMRESTRICT pc_vector, const unsigned char* BMRESTRICT pc_vector_end, unsigned* BMRESTRICT pc_vector_stat ) { BM_ASSERT(pc_vector_stat); // pc_vector_stat MUST be assigned to 0 before do { unsigned ibpc = *pc_vector & 7; ++(pc_vector_stat[ibpc]); } while (++pc_vector < pc_vector_end); } /** \brief Matrix reduction based on transformation pc vector */ inline void bit_iblock_reduce( const unsigned tmatrix[bm::set_block_plain_cnt][bm::set_block_plain_size], const unsigned char* BMRESTRICT pc_vector, const unsigned char* BMRESTRICT pc_vector_end, unsigned tmatrix_out[bm::set_block_plain_cnt][bm::set_block_plain_size]) { ::memset(tmatrix_out, 0, sizeof(tmatrix_out)); unsigned row = 0; do { unsigned ibpc = *pc_vector & 7; unsigned n_row = *pc_vector >> 3; switch(ibpc) { case bm::ibpc_uncompr: { const unsigned* r1 = tmatrix[row]; unsigned* r_out = tmatrix_out[row]; for (unsigned i = 0; i < bm::set_block_plain_size; ++i) { r_out[i] = r1[i]; } } break; case bm::ibpc_all_zero: break; case bm::ibpc_all_one: break; case bm::ibpc_equiv: break; case bm::ibpc_close: { const unsigned* r1 = tmatrix[row]; const unsigned* r2 = tmatrix[n_row]; unsigned* r_out = tmatrix_out[row]; for (unsigned i = 0; i < bm::set_block_plain_size; ++i) { r_out[i] = r1[i] ^ r2[i]; } // for } break; default: BM_ASSERT(0); break; } // switch ++row; } while (++pc_vector < pc_vector_end); } /** \brief Transposed Matrix reduction based on transformation pc vector */ template void tmatrix_reduce(TMatrix& tmatrix, const unsigned char* pc_vector, const unsigned effective_cols) { BM_ASSERT(pc_vector); typedef typename TMatrix::value_type value_type; const unsigned char* pc_vector_end = pc_vector + tmatrix.rows(); unsigned row = 0; unsigned cols = effective_cols ? effective_cols : tmatrix.cols(); do { unsigned ibpc = *pc_vector & 7; switch(ibpc) { case bm::ibpc_uncompr: case bm::ibpc_all_zero: case bm::ibpc_all_one: case bm::ibpc_equiv: break; case bm::ibpc_close: { unsigned n_row = *pc_vector >> 3; BM_ASSERT(n_row > row); value_type* r1 = tmatrix.row(row); const value_type* r2 = tmatrix.row(n_row); for (unsigned i = 0; i < cols; ++i) { r1[i] ^= r2[i]; } // for } break; default: BM_ASSERT(0); break; } // switch ++row; } while (++pc_vector < pc_vector_end); } /** \brief Transposed Matrix restore based on transformation pc vector */ template void tmatrix_restore(TMatrix& tmatrix, const unsigned char* pc_vector, const unsigned effective_cols) { BM_ASSERT(pc_vector); typedef typename TMatrix::value_type value_type; unsigned cols = effective_cols ? effective_cols : tmatrix.cols(); for (int row = tmatrix.rows()-1; row >= 0; --row) { unsigned ibpc = pc_vector[row] & 7; int n_row = pc_vector[row] >> 3; value_type* r1 = tmatrix.row(row); switch(ibpc) { case bm::ibpc_uncompr: break; case bm::ibpc_all_zero: for (unsigned i = 0; i < cols; ++i) r1[i] = 0; break; case bm::ibpc_all_one: for (unsigned i = 0; i < cols; ++i) r1[i] = (value_type)(~0); break; case bm::ibpc_equiv: { BM_ASSERT(n_row > row); const value_type* r2 = tmatrix.row(n_row); for (unsigned i = 0; i < cols; ++i) r1[i] = r2[i]; } break; case bm::ibpc_close: { BM_ASSERT(n_row > row); const value_type* r2 = tmatrix.row(n_row); for (unsigned i = 0; i < cols; ++i) r1[i] ^= r2[i]; } break; default: BM_ASSERT(0); break; } // switch } // for } /** \brief Copy GAP block body to bit block with DGap transformation \internal */ template//, typename BT> void gap_2_bitblock(const GT* BMRESTRICT gap_buf, GT* BMRESTRICT block, unsigned block_size) { GT* dgap_buf = block; GT* block_end = block + block_size; GT* dgap_end = gap_2_dgap(gap_buf, dgap_buf, false); // GT* block_end2 = (GT*) block_end; // zero the tail memory for ( ;dgap_end < block_end; ++dgap_end) { *dgap_end = 0; } } /** @brief Compute t-matrix rows statistics used for compression @param tmatrix - transposed matrix @param pc_vector - row content vector @param rstat - output row vector @internal */ template void compute_tmatrix_rstat(const TMatrix& tmatrix, const unsigned char* pc_vector, typename TMatrix::rstat* rstat, unsigned effective_cols) { BM_ASSERT(rstat); typedef typename TMatrix::value_type value_type; unsigned cols = effective_cols ? effective_cols : tmatrix.cols(); //unsigned cols = tmatrix.cols(); unsigned rows = tmatrix.rows(); for (unsigned i = 0; i < rows; ++i) { unsigned ibpc = pc_vector[i] & 7; switch(ibpc) { case bm::ibpc_all_zero: case bm::ibpc_all_one: case bm::ibpc_equiv: rstat[i].bit_count = rstat[i].gap_count = 0; rstat[i].best_rep = bm::set_bitset; break; case bm::ibpc_uncompr: case bm::ibpc_close: { const value_type* r1 = tmatrix.row(i); const value_type* r1_end = r1 + cols; // TODO: find how to deal with the potentially incorrect type-cast bm::bit_count_change32((bm::word_t*)r1, (bm::word_t*)r1_end, &rstat[i].bit_count, &rstat[i].gap_count); const unsigned bitset_size = sizeof(value_type) * cols; const unsigned total_possible_max_bits = sizeof(value_type)*8*cols; rstat[i].best_rep = bm::best_representation(rstat[i].bit_count, total_possible_max_bits, rstat[i].gap_count, bitset_size); } break; default: BM_ASSERT(0); break; } // switch } // for } /** \brief Compute effective right column border of the t-matrix \internal */ template unsigned find_effective_columns(const TM& tmatrix) { // TODO: need optimization in order not to scan the whole space unsigned col = 1; for (unsigned i = 0; i < tmatrix.rows(); ++i) { const typename TM::value_type* row = tmatrix.value[i]; for (unsigned j = 0; j < tmatrix.cols(); ++j) { if (row[j] != 0 && j > col) { col = j; } } } return col; } /** \brief Bit-plain splicing of a GAP block GT - gap word type BT - block word type BLOCK_SIZE - bit block size in words (works as a transposition basis) @internal */ template class gap_transpose_engine { public: /// cryptic calculation of equivalent size for the transpose matrix /// based on BLOCK_SIZE and sizeof(GT)(16) /// /// matrix[size_of_gap*8][(Size_block_in_bytes / size_of_gap) / number_of_planes)] typedef tmatrix tmatrix_type; gap_transpose_engine() : eff_cols_(0) {} /// Transpose GAP block through a temp. block of aligned(!) memory /// void transpose(const GT* BMRESTRICT gap_buf) { const unsigned arr_size = BLOCK_SIZE * sizeof(unsigned) / sizeof(GT); BM_ASSERT(sizeof(tmatrix_.value) == tmatrix_type::n_columns * tmatrix_type::n_rows * sizeof(GT)); // load all GAP as D-GAP(but not head word) into aligned bit-block gap_2_bitblock(gap_buf, tmp_gap_block_, BLOCK_SIZE * 2); // transpose vect_bit_transpose (tmp_gap_block_, arr_size, tmatrix_.value); // calculate number of non-zero columns eff_cols_ = find_effective_columns(tmatrix_); } /// Transpose array of shorts /// void transpose(const GT* BMRESTRICT garr, unsigned garr_size) { BM_ASSERT(garr_size); bit_block_set(tmp_gap_block_, 0); ::memcpy(tmp_gap_block_, garr, sizeof(GT)*garr_size); const unsigned arr_size = BLOCK_SIZE * sizeof(unsigned) / sizeof(GT); BM_ASSERT(sizeof(tmatrix_.value) == tmatrix_type::n_columns * tmatrix_type::n_rows * sizeof(GT)); // transpose vect_bit_transpose (tmp_gap_block_, arr_size, tmatrix_.value); // calculate number of non-zero columns eff_cols_ = find_effective_columns(tmatrix_); } void compute_distance_matrix() { tmatrix_distance (tmatrix_.value, distance_); // make compression descriptor vector and statistics vector bit_iblock_make_pcv (distance_, pc_vector_); bit_iblock_pcv_stat(pc_vector_, pc_vector_ + tmatrix_type::n_rows, pc_vector_stat_); } void reduce() { tmatrix_reduce(tmatrix_, pc_vector_, eff_cols_); compute_tmatrix_rstat(tmatrix_, pc_vector_, rstat_vector_, eff_cols_); } void restore() { tmatrix_restore(tmatrix_, pc_vector_, eff_cols_); } /// Restore GAP block from the transposed matrix /// void trestore(GT gap_head, GT* BMRESTRICT gap_buf) { BM_ASSERT(sizeof(tmatrix_.value) == tmatrix_type::n_columns * tmatrix_type::n_rows * sizeof(GT)); // restore into a temp buffer GT* gap_tmp = tmp_gap_block_; vect_bit_trestore(tmatrix_.value, gap_tmp); // D-Gap to GAP block recalculation gap_tmp = tmp_gap_block_; dgap_2_gap(gap_tmp, gap_buf, gap_head); } public: // GT gap_head_; tmatrix_type tmatrix_; unsigned eff_cols_; unsigned distance_[tmatrix_type::n_rows][tmatrix_type::n_rows]; unsigned char pc_vector_[tmatrix_type::n_rows]; unsigned pc_vector_stat_[bm::ibpc_end]; typename tmatrix_type::rstat rstat_vector_[tmatrix_type::n_rows]; GT BM_ALIGN16 tmp_gap_block_[BLOCK_SIZE*2] BM_ALIGN16ATTR; }; } // namespace bm #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmfwd.h0000644000175000017500000000324411365120467012257 0ustar tlktlk#ifndef BMFWD__H__INCLUDED__ #define BMFWD__H__INCLUDED__ /* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include "bmconst.h" namespace bm { class block_allocator; class ptr_allocator; template class mem_alloc; template class miniset; template class bvmini; typedef bm::bvmini standard_miniset; typedef mem_alloc standard_allocator; template class bvector; } // namespace #endif bm3.7.0/src/bmutil.h0000644000175000017500000001051511365120467012453 0ustar tlktlk#ifndef BMUTIL__H__INCLUDED__ #define BMUTIL__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include "bmdef.h" #include "bmconst.h" #if defined(_M_AMD64) || defined(_M_X64) #include #endif namespace bm { /* // SSE2 vector equality comparison int _mm_any_eq( vFloat a, vFloat b ) { //test a==b for each float in a & b vFloat mask = _mm_cmpeq_ps( a, b ); //copy top bit of each result to maskbits int maskBits = _mm_movemask_ps( mask ); return maskBits != 0; } */ // From: // http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.8562 // template T bit_scan_fwd(T v) { return DeBruijn_bit_position::_multiply[((word_t)((v & -v) * 0x077CB531U)) >> 27]; } /** Get minimum of 2 values */ template T min_value(T v1, T v2) { return v1 < v2 ? v1 : v2; } /** Fast loop-less function to find LOG2 */ template T ilog2(T x) { unsigned int l = 0; if(x >= 1<<16) { x>>=16; l |= 16; } if(x >= 1<<8) { x>>=8; l |= 8; } if(x >= 1<<4) { x>>=4; l |= 4; } if(x >= 1<<2) { x>>=2; l |= 2; } if(x >= 1<<1) l |=1; return l; } template<> inline bm::gap_word_t ilog2(gap_word_t x) { unsigned int l = 0; if(x >= 1<<8) { x>>=8; l |= 8; } if(x >= 1<<4) { x>>=4; l |= 4; } if(x >= 1<<2) { x>>=2; l |= 2; } if(x >= 1<<1) l |=1; return (bm::gap_word_t)l; } /** Mini auto-pointer for internal memory management @internal */ template class ptr_guard { public: ptr_guard(T* p) : ptr_(p) {} ~ptr_guard() { delete ptr_; } private: ptr_guard(const ptr_guard& p); ptr_guard& operator=(const ptr_guard& p); private: T* ptr_; }; /** Lookup table based integer LOG2 */ template T ilog2_LUT(T x) { unsigned l = 0; if (x & 0xffff0000) { l += 16; x >>= 16; } if (x & 0xff00) { l += 8; x >>= 8; } return l + first_bit_table::_idx[x]; } /** Lookup table based short integer LOG2 */ template<> inline bm::gap_word_t ilog2_LUT(bm::gap_word_t x) { unsigned l = 0; if (x & 0xff00) { l += 8; x >>= 8; } return (bm::gap_word_t)(l + first_bit_table::_idx[x]); } // if we are running on x86 CPU we can use inline ASM #ifdef BM_x86 #ifdef __GNUG__ inline unsigned bsf_asm32(unsigned int v) { unsigned r; asm volatile(" bsfl %1, %0": "=r"(r): "rm"(v) ); return r; } BMFORCEINLINE unsigned bsr_asm32(register unsigned int v) { unsigned r; asm volatile(" bsrl %1, %0": "=r"(r): "rm"(v) ); return r; } #endif // __GNUG__ #ifdef _MSC_VER #if defined(_M_AMD64) || defined(_M_X64) // inline assembly not supported BMFORCEINLINE unsigned int bsr_asm32(unsigned int value) { unsigned long r; _BitScanReverse(&r, value); return r; } BMFORCEINLINE unsigned int bsf_asm32(unsigned int value) { unsigned long r; _BitScanForward(&r, value); return r; } #else BMFORCEINLINE unsigned int bsr_asm32(register unsigned int value) { __asm bsr eax, value } BMFORCEINLINE unsigned int bsf_asm32(register unsigned int value) { __asm bsf eax, value } #endif #endif // _MSC_VER #endif // BM_x86 } // bm #endif bm3.7.0/src/bmsse2.h0000644000175000017500000003214511365120467012355 0ustar tlktlk#ifndef BMSSE2__H__INCLUDED__ #define BMSSE2__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ // Header implements processor specific intrinsics declarations for SSE2 // instruction set #include #include #include "bmdef.h" #include "bmsse_util.h" namespace bm { /*! SSE2 optimized bitcounting function implements parallel bitcounting algorithm for SSE2 instruction set.
unsigned CalcBitCount32(unsigned b)
{
    b = (b & 0x55555555) + (b >> 1 & 0x55555555);
    b = (b & 0x33333333) + (b >> 2 & 0x33333333);
    b = (b + (b >> 4)) & 0x0F0F0F0F;
    b = b + (b >> 8);
    b = (b + (b >> 16)) & 0x0000003F;
    return b;
}
@ingroup SSE2 */ inline bm::id_t sse2_bit_count(const __m128i* block, const __m128i* block_end) { const unsigned mu1 = 0x55555555; const unsigned mu2 = 0x33333333; const unsigned mu3 = 0x0F0F0F0F; const unsigned mu4 = 0x0000003F; // Loading masks __m128i m1 = _mm_set_epi32 (mu1, mu1, mu1, mu1); __m128i m2 = _mm_set_epi32 (mu2, mu2, mu2, mu2); __m128i m3 = _mm_set_epi32 (mu3, mu3, mu3, mu3); __m128i m4 = _mm_set_epi32 (mu4, mu4, mu4, mu4); __m128i mcnt; mcnt = _mm_xor_si128(m1, m1); // cnt = 0 __m128i tmp1, tmp2; do { __m128i b = _mm_load_si128(block); ++block; // b = (b & 0x55555555) + (b >> 1 & 0x55555555); tmp1 = _mm_srli_epi32(b, 1); // tmp1 = (b >> 1 & 0x55555555) tmp1 = _mm_and_si128(tmp1, m1); tmp2 = _mm_and_si128(b, m1); // tmp2 = (b & 0x55555555) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b & 0x33333333) + (b >> 2 & 0x33333333); tmp1 = _mm_srli_epi32(b, 2); // (b >> 2 & 0x33333333) tmp1 = _mm_and_si128(tmp1, m2); tmp2 = _mm_and_si128(b, m2); // (b & 0x33333333) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b + (b >> 4)) & 0x0F0F0F0F; tmp1 = _mm_srli_epi32(b, 4); // tmp1 = b >> 4 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 4) b = _mm_and_si128(b, m3); // & 0x0F0F0F0F // b = b + (b >> 8); tmp1 = _mm_srli_epi32 (b, 8); // tmp1 = b >> 8 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 8) // b = (b + (b >> 16)) & 0x0000003F; tmp1 = _mm_srli_epi32 (b, 16); // b >> 16 b = _mm_add_epi32(b, tmp1); // b + (b >> 16) b = _mm_and_si128(b, m4); // (b >> 16) & 0x0000003F; mcnt = _mm_add_epi32(mcnt, b); // mcnt += b } while (block < block_end); bm::id_t BM_ALIGN16 tcnt[4] BM_ALIGN16ATTR; _mm_store_si128((__m128i*)tcnt, mcnt); return tcnt[0] + tcnt[1] + tcnt[2] + tcnt[3]; } template bm::id_t sse2_bit_count_op(const __m128i* BMRESTRICT block, const __m128i* BMRESTRICT block_end, const __m128i* BMRESTRICT mask_block, Func sse2_func) { const unsigned mu1 = 0x55555555; const unsigned mu2 = 0x33333333; const unsigned mu3 = 0x0F0F0F0F; const unsigned mu4 = 0x0000003F; // Loading masks __m128i m1 = _mm_set_epi32 (mu1, mu1, mu1, mu1); __m128i m2 = _mm_set_epi32 (mu2, mu2, mu2, mu2); __m128i m3 = _mm_set_epi32 (mu3, mu3, mu3, mu3); __m128i m4 = _mm_set_epi32 (mu4, mu4, mu4, mu4); __m128i mcnt; mcnt = _mm_xor_si128(m1, m1); // cnt = 0 do { __m128i tmp1, tmp2; __m128i b = _mm_load_si128(block++); tmp1 = _mm_load_si128(mask_block++); b = sse2_func(b, tmp1); // b = (b & 0x55555555) + (b >> 1 & 0x55555555); tmp1 = _mm_srli_epi32(b, 1); // tmp1 = (b >> 1 & 0x55555555) tmp1 = _mm_and_si128(tmp1, m1); tmp2 = _mm_and_si128(b, m1); // tmp2 = (b & 0x55555555) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b & 0x33333333) + (b >> 2 & 0x33333333); tmp1 = _mm_srli_epi32(b, 2); // (b >> 2 & 0x33333333) tmp1 = _mm_and_si128(tmp1, m2); tmp2 = _mm_and_si128(b, m2); // (b & 0x33333333) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b + (b >> 4)) & 0x0F0F0F0F; tmp1 = _mm_srli_epi32(b, 4); // tmp1 = b >> 4 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 4) b = _mm_and_si128(b, m3); // & 0x0F0F0F0F // b = b + (b >> 8); tmp1 = _mm_srli_epi32 (b, 8); // tmp1 = b >> 8 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 8) // b = (b + (b >> 16)) & 0x0000003F; tmp1 = _mm_srli_epi32 (b, 16); // b >> 16 b = _mm_add_epi32(b, tmp1); // b + (b >> 16) b = _mm_and_si128(b, m4); // (b >> 16) & 0x0000003F; mcnt = _mm_add_epi32(mcnt, b); // mcnt += b } while (block < block_end); bm::id_t BM_ALIGN16 tcnt[4] BM_ALIGN16ATTR; _mm_store_si128((__m128i*)tcnt, mcnt); return tcnt[0] + tcnt[1] + tcnt[2] + tcnt[3]; } #define VECT_XOR_ARR_2_MASK(dst, src, src_end, mask)\ sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask) #define VECT_ANDNOT_ARR_2_MASK(dst, src, src_end, mask)\ sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask) #define VECT_BITCOUNT(first, last) \ sse2_bit_count((__m128i*) (first), (__m128i*) (last)) #define VECT_BITCOUNT_AND(first, last, mask) \ sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and) #define VECT_BITCOUNT_OR(first, last, mask) \ sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or) #define VECT_BITCOUNT_XOR(first, last, mask) \ sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor) #define VECT_BITCOUNT_SUB(first, last, mask) \ sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub) #define VECT_INVERT_ARR(first, last) \ sse2_invert_arr(first, last); #define VECT_AND_ARR(dst, src, src_end) \ sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_OR_ARR(dst, src, src_end) \ sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_SUB_ARR(dst, src, src_end) \ sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_XOR_ARR(dst, src, src_end) \ sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_COPY_BLOCK(dst, src, src_end) \ sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_SET_BLOCK(dst, dst_end, value) \ sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value)) inline bm::id_t sse2_bit_block_calc_count_change(const __m128i* BMRESTRICT block, const __m128i* BMRESTRICT block_end, unsigned* BMRESTRICT bit_count) { const unsigned mu1 = 0x55555555; const unsigned mu2 = 0x33333333; const unsigned mu3 = 0x0F0F0F0F; const unsigned mu4 = 0x0000003F; // Loading masks __m128i m1 = _mm_set_epi32 (mu1, mu1, mu1, mu1); __m128i m2 = _mm_set_epi32 (mu2, mu2, mu2, mu2); __m128i m3 = _mm_set_epi32 (mu3, mu3, mu3, mu3); __m128i m4 = _mm_set_epi32 (mu4, mu4, mu4, mu4); __m128i mcnt, ccnt; mcnt = _mm_xor_si128(m1, m1); // bit_cnt = 0 ccnt = _mm_xor_si128(m1, m1); // change_cnt = 0 __m128i tmp1, tmp2; int count = (block_end - block)*4; //0;//1; bm::word_t w, w0, w_prev;//, w_l; const int w_shift = sizeof(w) * 8 - 1; bool first_word = true; // first word { const bm::word_t* blk = (const bm::word_t*) block; w = w0 = blk[0]; w ^= (w >> 1); BM_INCWORD_BITCOUNT(count, w); count -= (w_prev = (w0 >> w_shift)); // negative value correction } bm::id_t BM_ALIGN16 tcnt[4] BM_ALIGN16ATTR; do { // compute bit-count // --------------------------------------------------------------------- { __m128i b = _mm_load_si128(block); // w ^(w >> 1) tmp1 = _mm_srli_epi32(b, 1); // tmp1 = b >> 1 tmp2 = _mm_xor_si128(b, tmp1); // tmp2 = tmp1 ^ b; _mm_store_si128((__m128i*)tcnt, tmp2); // compare with zero { // b = (b & 0x55555555) + (b >> 1 & 0x55555555); //tmp1 = _mm_srli_epi32(b, 1); // tmp1 = (b >> 1 & 0x55555555) tmp1 = _mm_and_si128(tmp1, m1); tmp2 = _mm_and_si128(b, m1); // tmp2 = (b & 0x55555555) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b & 0x33333333) + (b >> 2 & 0x33333333); tmp1 = _mm_srli_epi32(b, 2); // (b >> 2 & 0x33333333) tmp1 = _mm_and_si128(tmp1, m2); tmp2 = _mm_and_si128(b, m2); // (b & 0x33333333) b = _mm_add_epi32(tmp1, tmp2); // b = tmp1 + tmp2 // b = (b + (b >> 4)) & 0x0F0F0F0F; tmp1 = _mm_srli_epi32(b, 4); // tmp1 = b >> 4 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 4) b = _mm_and_si128(b, m3); //& 0x0F0F0F0F // b = b + (b >> 8); tmp1 = _mm_srli_epi32 (b, 8); // tmp1 = b >> 8 b = _mm_add_epi32(b, tmp1); // b = b + (b >> 8) // b = (b + (b >> 16)) & 0x0000003F; tmp1 = _mm_srli_epi32 (b, 16); // b >> 16 b = _mm_add_epi32(b, tmp1); // b + (b >> 16) b = _mm_and_si128(b, m4); // (b >> 16) & 0x0000003F; mcnt = _mm_add_epi32(mcnt, b); // mcnt += b } } // --------------------------------------------------------------------- { //__m128i b = _mm_load_si128(block); const bm::word_t* BMRESTRICT blk = (const bm::word_t*) block; if (first_word) { first_word = false; } else { if ((w0=blk[0])) { BM_INCWORD_BITCOUNT(count, tcnt[0]); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = (w0 >> w_shift); } else { count -= !w_prev; w_prev ^= w_prev; } } if ((w0=blk[1])) { BM_INCWORD_BITCOUNT(count, tcnt[1]); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = (w0 >> w_shift); } else { count -= !w_prev; w_prev ^= w_prev; } if ((w0=blk[2])) { BM_INCWORD_BITCOUNT(count, tcnt[2]); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = (w0 >> w_shift); } else { count -= !w_prev; w_prev ^= w_prev; } if ((w0=blk[3])) { BM_INCWORD_BITCOUNT(count, tcnt[3]); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = (w0 >> w_shift); } else { count -= !w_prev; w_prev ^= w_prev; } } } while (++block < block_end); _mm_store_si128((__m128i*)tcnt, mcnt); *bit_count = tcnt[0] + tcnt[1] + tcnt[2] + tcnt[3]; return count; } } // namespace #endif bm3.7.0/src/bmvmin.h0000644000175000017500000003017111365120467012447 0ustar tlktlk#ifndef BMVMIN__H__INCLUDED__ #define BMVMIN__H__INCLUDED__ /* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4100) #endif namespace bm { #define BM_MINISET_GAPLEN (bm::gap_len_table::_len[0]) #define BM_MINISET_ARRSIZE(x) ((x / 32) + ( (x % 32) && 1 )) /*! @defgroup mset Small sets functionality * Templates in this group are used to keep block types in BM library. * Classes of this group can tune bvector template (MS parameter) * for best performance or minimal memory usage. * @ingroup bmagic * @{ */ /*! @brief Template class implements memory saving set functionality Template can be used as template parameter for bvector if we want to tune bvector for minimal memory consumption. @sa bvmini */ template class miniset { public: miniset() : m_buf(0), m_type(1) {} miniset(const miniset& mset) { if (mset.m_buf) { if (mset.m_type) init_gapbuf(mset.m_buf); else init_bitbuf(mset.m_buf); } else { m_type = mset.m_type; m_buf = 0; } } ~miniset() { if (m_buf) { A::deallocate(m_buf, m_type ? (BM_MINISET_GAPLEN / (sizeof(bm::word_t) / sizeof(bm::gap_word_t))) : (BM_MINISET_ARRSIZE(N))); } } /// Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise. unsigned test(bm::id_t n) const { return !m_buf ? 0 : m_type ? gap_test((gap_word_t*)m_buf, n) : m_buf[n>>bm::set_word_shift] & (1<<(n & bm::set_word_mask)); } void set(bm::id_t n, bool val=true) { if (m_type == 0) { if (!m_buf) { if (!val) return; init_bitbuf(0); } unsigned nword = n >> bm::set_word_shift; unsigned mask = unsigned(1) << (n & bm::set_word_mask); val ? (m_buf[nword] |= mask) : (m_buf[nword] &= ~mask); } else { if (!m_buf) { if (!val) return; init_gapbuf(0); } unsigned is_set; unsigned new_block_len = gap_set_value(val, (gap_word_t*)m_buf, n, &is_set); if (new_block_len > unsigned(BM_MINISET_GAPLEN-4)) { convert_buf(); } } } unsigned mem_used() const { return sizeof(*this) + m_buf ? (m_type ? (BM_MINISET_GAPLEN * sizeof(gap_word_t)) : (BM_MINISET_ARRSIZE(N) * sizeof(bm::word_t))) : 0; } void swap(miniset& mset) { bm::word_t* buftmp = m_buf; m_buf = mset.m_buf; mset.m_buf = buftmp; unsigned typetmp = m_type; m_type = mset.m_type; mset.m_type = typetmp; } private: void init_bitbuf(bm::word_t* buf) { unsigned arr_size = BM_MINISET_ARRSIZE(N); m_buf = A::allocate(arr_size, 0); if (buf) { ::memcpy(m_buf, buf, arr_size * sizeof(bm::word_t)); } else { ::memset(m_buf, 0, arr_size * sizeof(bm::word_t)); } m_type = 0; } void init_gapbuf(bm::word_t* buf) { unsigned arr_size = BM_MINISET_GAPLEN / (sizeof(bm::word_t) / sizeof(bm::gap_word_t)); m_buf = A::allocate(arr_size, 0); if (buf) { ::memcpy(m_buf, buf, arr_size * sizeof(bm::word_t)); } else { *m_buf = 0; gap_set_all((gap_word_t*)m_buf, bm::gap_max_bits, 0); } m_type = 1; } void convert_buf() { unsigned arr_size = BM_MINISET_ARRSIZE(N); bm::word_t* buf = A::allocate(arr_size, 0); gap_convert_to_bitset(buf, (gap_word_t*) m_buf, arr_size); arr_size = BM_MINISET_GAPLEN / (sizeof(bm::word_t) / sizeof(bm::gap_word_t)); A::deallocate(m_buf, arr_size); m_buf = buf; m_type = 0; } private: bm::word_t* m_buf; //!< Buffer pointer unsigned m_type; //!< buffer type (0-bit, 1-gap) }; /*! @brief Mini bitvector used in bvector template to keep block type flags Template is used as a default template parameter MS for bvector Offers maximum performance comparing to miniset. @sa miniset */ template class bvmini { public: bvmini(int start_strategy = 0) { ::memset(m_buf, 0, sizeof(m_buf)); } bvmini(const bvmini& mset) { ::memcpy(m_buf, mset.m_buf, sizeof(m_buf)); } /// Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise. unsigned test(bm::id_t n) const { return m_buf[n>>bm::set_word_shift] & (1<<(n & bm::set_word_mask)); } void set(bm::id_t n, bool val=true) { unsigned nword = n >> bm::set_word_shift; unsigned mask = unsigned(1) << (n & bm::set_word_mask); val ? (m_buf[nword] |= mask) : (m_buf[nword] &= ~mask); } unsigned mem_used() const { return sizeof(*this); } void swap(bvmini& mset) { for (unsigned i = 0; i < BM_MINISET_ARRSIZE(N); ++i) { bm::word_t tmp = m_buf[i]; m_buf[i] = mset.m_buf[i]; mset.m_buf[i] = tmp; } } private: bm::word_t m_buf[BM_MINISET_ARRSIZE(N)]; }; /*!@} */ /*! @brief Bitvector class with very limited functionality. Class implements simple bitset and used for internal and testing purposes. */ template class bvector_mini { public: bvector_mini(unsigned size) : m_buf(0), m_size(size) { unsigned arr_size = (size / 32) + 1; m_buf = A::allocate(arr_size, 0); ::memset(m_buf, 0, arr_size * sizeof(unsigned)); } bvector_mini(const bvector_mini& bvect) : m_size(bvect.m_size) { unsigned arr_size = (m_size / 32) + 1; m_buf = A::allocate(arr_size, 0); ::memcpy(m_buf, bvect.m_buf, arr_size * sizeof(unsigned)); } ~bvector_mini() { A::deallocate(m_buf, (m_size / 32) + 1); } /// Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise. int is_bit_true(unsigned pos) const { unsigned char mask = (unsigned char)((char)0x1 << (pos & 7)); unsigned char* offs = (unsigned char*)m_buf + (pos >> 3); // m_buf + (pos/8) return (*offs) & mask; } /// Sets bit number pos to 1 void set_bit(unsigned pos) { unsigned char mask = (unsigned char)(0x1 << (pos & 7)); unsigned char* offs = (unsigned char*)m_buf + (pos >> 3); *offs |= mask; } /// Sets bit number pos to 0 void clear_bit(unsigned pos) { unsigned char mask = (unsigned char)(0x1 << (pos & 7)); unsigned char* offs = (unsigned char*)m_buf + (pos >> 3); *offs &= ~mask; } /// Counts number of bits ON unsigned bit_count() const { register unsigned count = 0; const unsigned* end = m_buf + (m_size / 32)+1; for (unsigned* start = m_buf; start < end; ++start) { register unsigned value = *start; for (count += (value!=0); value &= value - 1; ++count); } return count; } /// Comparison. int compare(const bvector_mini& bvect) { unsigned cnt1 = bit_count(); unsigned cnt2 = bvect.bit_count(); if (!cnt1 && !cnt2) return 0; unsigned cnt_min = cnt1 < cnt2 ? cnt1 : cnt2; if (!cnt_min) return cnt1 ? 1 : -1; unsigned idx1 = get_first(); unsigned idx2 = bvect.get_first(); for (unsigned i = 0; i < cnt_min; ++i) { if (idx1 != idx2) { return idx1 < idx2 ? 1 : -1; } idx1 = get_next(idx1); idx2 = bvect.get_next(idx2); } //BM_ASSERT(idx1==0 || idx2==0); if (idx1 != idx2) { if (!idx1) return -1; if (!idx2) return 1; return idx1 < idx2 ? 1 : -1; } return 0; } /// Returns index of the first ON bit unsigned get_first() const { unsigned pos = 0; const unsigned char* ptr = (unsigned char*) m_buf; for (unsigned i = 0; i < (m_size/8)+1; ++i) { register unsigned char w = ptr[i]; if (w != 0) { while ((w & 1) == 0) { w >>= 1; ++pos; } return pos; } pos += sizeof(unsigned char) * 8; } return 0; } /// Returns index of next bit, which is ON unsigned get_next(unsigned idx) const { register unsigned i; for (i = idx+1; i < m_size; ++i) { unsigned char* offs = (unsigned char*)m_buf + (i >> 3); if (*offs) { unsigned char mask = (unsigned char)((char)0x1 << (i & 7)); if (*offs & mask) { return i; } } else { i += 7; } } return 0; } void combine_and(const bvector_mini& bvect) { const unsigned* end = m_buf + (m_size / 32)+1; const unsigned* src = bvect.get_buf(); for (unsigned* start = m_buf; start < end; ++start) { *start &= *src++; } } void combine_xor(const bvector_mini& bvect) { const unsigned* end = m_buf + (m_size / 32)+1; const unsigned* src = bvect.get_buf(); for (unsigned* start = m_buf; start < end; ++start) { *start ^= *src++; } } void combine_or(const bvector_mini& bvect) { const unsigned* end = m_buf + (m_size / 32)+1; const unsigned* src = bvect.get_buf(); for (unsigned* start = m_buf; start < end; ++start) { *start |= *src++; } } void combine_sub(const bvector_mini& bvect) { const unsigned* end = m_buf + (m_size / 32)+1; const unsigned* src = bvect.get_buf(); for (unsigned* start = m_buf; start < end; ++start) { *start &= ~(*src++); } } const unsigned* get_buf() const { return m_buf; } unsigned mem_used() const { return sizeof(bvector_mini) + (m_size / 32) + 1; } void swap(bvector_mini& bvm) { BM_ASSERT(m_size == bvm.m_size); bm::word_t* buftmp = m_buf; m_buf = bvm.m_buf; bvm.m_buf = buftmp; } private: bm::word_t* m_buf; unsigned m_size; }; } // namespace bm #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmserial.h0000644000175000017500000032314211365120467012760 0ustar tlktlk#ifndef BMSERIAL__H__INCLUDED__ #define BMSERIAL__H__INCLUDED__ /* Copyright(c) 2002-2010 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ /*! \defgroup bvserial bvector serialization * bvector serialization * \ingroup bmagic * */ #ifndef BM__H__INCLUDED__ #define BM__H__INCLUDED__ #include "bm.h" #endif #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4311 4312 4127) #endif #include "encoding.h" #include "bmdef.h" #include "bmfunc.h" #include "bmtrans.h" #include "bmalgo_impl.h" #include "bmutil.h" //#include "bmgamma.h" namespace bm { // Serialization stream markup constants const unsigned char set_block_end = 0; //!< End of serialization const unsigned char set_block_1zero = 1; //!< One all-zero block const unsigned char set_block_1one = 2; //!< One block all-set (1111...) const unsigned char set_block_8zero = 3; //!< Up to 256 zero blocks const unsigned char set_block_8one = 4; //!< Up to 256 all-set blocks const unsigned char set_block_16zero = 5; //!< Up to 65536 zero blocks const unsigned char set_block_16one = 6; //!< UP to 65536 all-set blocks const unsigned char set_block_32zero = 7; //!< Up to 4G zero blocks const unsigned char set_block_32one = 8; //!< UP to 4G all-set blocks const unsigned char set_block_azero = 9; //!< All other blocks zero const unsigned char set_block_aone = 10; //!< All other blocks one const unsigned char set_block_bit = 11; //!< Plain bit block const unsigned char set_block_sgapbit = 12; //!< SGAP compressed bitblock const unsigned char set_block_sgapgap = 13; //!< SGAP compressed GAP block const unsigned char set_block_gap = 14; //!< Plain GAP block const unsigned char set_block_gapbit = 15; //!< GAP compressed bitblock const unsigned char set_block_arrbit = 16; //!< List of bits ON const unsigned char set_block_bit_interval = 17; //!< Interval block const unsigned char set_block_arrgap = 18; //!< List of bits ON (GAP block) const unsigned char set_block_bit_1bit = 19; //!< Bit block with 1 bit ON const unsigned char set_block_gap_egamma = 20; //!< Gamma compressed GAP block const unsigned char set_block_arrgap_egamma = 21; //!< Gamma compressed delta GAP array const unsigned char set_block_bit_0runs = 22; //!< Bit block with encoded zero intervals const unsigned char set_block_arrgap_egamma_inv = 23; //!< Gamma compressed inverted delta GAP array const unsigned char set_block_arrgap_inv = 24; //!< List of bits OFF (GAP block) /// \internal /// \ingroup bvserial enum serialization_header_mask { BM_HM_DEFAULT = 1, BM_HM_RESIZE = (1 << 1), ///< resized vector BM_HM_ID_LIST = (1 << 2), ///< id list stored BM_HM_NO_BO = (1 << 3), ///< no byte-order BM_HM_NO_GAPL = (1 << 4) ///< no GAP levels }; #define SER_NEXT_GRP(enc, nb, B_1ZERO, B_8ZERO, B_16ZERO, B_32ZERO) \ if (nb == 1) \ enc.put_8(B_1ZERO); \ else if (nb < 256) \ { \ enc.put_8(B_8ZERO); \ enc.put_8((unsigned char)nb); \ } \ else if (nb < 65536) \ { \ enc.put_8(B_16ZERO); \ enc.put_16((unsigned short)nb); \ } \ else \ {\ enc.put_8(B_32ZERO); \ enc.put_32(nb); \ } #define BM_SET_ONE_BLOCKS(x) \ {\ unsigned end_block = i + x; \ for (;i < end_block; ++i) \ bman.set_block_all_set(i); \ } \ --i /** Bit-vector serialization class. Class designed to convert sparse bit-vector into a block of memory ready for file or database storage or network transfer. @ingroup bvserial */ template class serializer { public: typedef typename BV::allocator_type allocator_type; typedef typename BV::blocks_manager_type blocks_manager_type; public: serializer(const allocator_type& alloc = allocator_type()); ~serializer(); /** Set compression level. Higher compression takes more time to process. @param clevel - compression level (0-4) */ void set_compression_level(unsigned clevel); /** Get compression level */ unsigned get_compression_level() const; /** Bitvector serilization into memory block @param bv - input bitvector @param buf - out buffer (pre-allocated) No range checking is done in this method. It is responsibility of caller to allocate sufficient amount of memory using information from calc_stat() function. @param buf_size - size of the output buffer @return Size of serialization block. @sa calc_stat */ unsigned serialize(const BV& bv, unsigned char* buf, unsigned buf_size); /** Set GAP length serialization (serializes GAP levels of the original vector) @param value - when TRUE serialized vector includes GAP levels parameters */ void gap_length_serialization(bool value); /** Set byte-order serialization (for cross platform compatibility) @param value - TRUE serialization format includes byte-order marker */ void byte_order_serialization(bool value); protected: /** Encode serialization header information */ void encode_header(const BV& bv, bm::encoder& enc); /** Encode GAP block */ void encode_gap_block(bm::gap_word_t* gap_block, bm::encoder& enc); /** Encode GAP block with Elias Gamma coder */ void gamma_gap_block(bm::gap_word_t* gap_block, bm::encoder& enc); /** Encode GAP block as delta-array with Elias Gamma coder */ void gamma_gap_array(const bm::gap_word_t* gap_block, unsigned arr_len, bm::encoder& enc, bool inverted = false); /** Encode BIT block with repeatable runs of zeroes */ void encode_bit_interval(const bm::word_t* blk, bm::encoder& enc, unsigned size_control); private: serializer(const serializer&); serializer& operator=(const serializer&); private: typedef bm::bit_out bit_out_type; typedef bm::gamma_encoder gamma_encoder_func; private: allocator_type alloc_; bool gap_serial_; bool byte_order_serial_; bm::word_t* temp_block_; unsigned compression_level_; }; /** Base deserialization class \ingroup bvserial */ template class deseriaizer_base { public: typedef DEC decoder_type; protected: deseriaizer_base(){} /// Read GAP block from the stream /// /// @return GAP length /// unsigned read_gap_block(decoder_type& decoder, unsigned block_type, bm::gap_word_t* dst_block, bm::gap_word_t& gap_head); /// Read list of bit ids /// /// @return number of ids unsigned read_id_list(decoder_type& decoder, unsigned block_type, bm::gap_word_t* dst_arr); protected: bm::gap_word_t id_array_[bm::gap_equiv_len * 2]; }; /** Class deserializer \ingroup bvserial */ template class deserializer : protected deseriaizer_base { public: typedef BV bvector_type; typedef typename deseriaizer_base::decoder_type decoder_type; // typedef DEC decoder_type; public: deserializer() : temp_block_(0) {} unsigned deserialize(bvector_type& bv, const unsigned char* buf, bm::word_t* temp_block); protected: typedef typename BV::blocks_manager_type blocks_manager_type; typedef typename BV::allocator_type allocator_type; protected: void deserialize_gap(unsigned char btype, decoder_type& dec, bvector_type& bv, blocks_manager_type& bman, unsigned i, bm::word_t* blk); protected: bm::gap_word_t gap_temp_block_[bm::gap_equiv_len * 4]; bm::word_t* temp_block_; }; /** Iterator to walk forward the serialized stream. \internal \ingroup bvserial */ template class iterator_deserializer { public: typedef BV bvector_type; typedef SerialIterator serial_iterator_type; public: static unsigned deserialize(bvector_type& bv, serial_iterator_type& sit, bm::word_t* temp_block, set_operation op = bm::set_OR); /// experimental 3 way deserialization /// target = mask %OPERATION% BLOB /// static void deserialize(bvector_type& bv_target, const bvector_type& bv_mask, serial_iterator_type& sit, bm::word_t* temp_block, set_operation op); private: typedef typename BV::blocks_manager_type blocks_manager_type; /// load data from the iterator of type "id list" static void load_id_list(bvector_type& bv, serial_iterator_type& sit, unsigned id_count, bool set_clear); /// Finalize the deserialization (zero target vector tail or bit-count tail) static unsigned finalize_target_vector(blocks_manager_type& bman, set_operation op, unsigned bv_block_idx); /// Process (obsolete) id-list serialization format static unsigned process_id_list(bvector_type& bv, serial_iterator_type& sit, set_operation op); }; /*! @brief Serialization stream iterator Iterates blocks and control tokens of serialized bit-stream \ingroup bvserial */ template class serial_stream_iterator : protected deseriaizer_base { public: typedef typename deseriaizer_base::decoder_type decoder_type; public: serial_stream_iterator(const unsigned char* buf); /// serialized bitvector size unsigned bv_size() const { return bv_size_; } /// Returns true if end of bit-stream reached bool is_eof() const { return end_of_stream_; } /// get next block void next(); /// skip all zero or all-one blocks void skip_mono_blocks(); /// read bit block, using logical operation unsigned get_bit_block(bm::word_t* dst_block, bm::word_t* tmp_block, set_operation op); /// Read gap block data (with head) void get_gap_block(bm::gap_word_t* dst_block); /// Return current decoder size unsigned dec_size() const { return decoder_.size(); } /// Get low level access to the decoder (use carefully) decoder_type& decoder() { return decoder_; } /// iterator is a state machine, this enum encodes /// its key value /// enum iterator_state { e_unknown = 0, e_list_ids, ///< plain int array e_blocks, ///< stream of blocks e_zero_blocks, ///< one or more zero bit blocks e_one_blocks, ///< one or more all-1 bit blocks e_bit_block, ///< one bit block e_gap_block ///< one gap block }; /// Returns iterator internal state iterator_state state() const { return this->state_; } iterator_state get_state() const { return this->state_; } /// Number of ids in the inverted list (valid for e_list_ids) unsigned get_id_count() const { return this->id_cnt_; } /// Get last id from the id list bm::id_t get_id() const { return this->last_id_; } /// Get current block index unsigned block_idx() const { return this->block_idx_; } public: /// member function pointer for bitset-bitset get operations /// typedef unsigned (serial_stream_iterator::*get_bit_func_type) (bm::word_t*,bm::word_t*); unsigned get_bit_block_ASSIGN(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_OR (bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_AND (bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_SUB (bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_XOR (bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT (bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_AND(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_OR(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_XOR(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_SUB_AB(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_SUB_BA(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_A(bm::word_t* dst_block, bm::word_t* tmp_block); unsigned get_bit_block_COUNT_B(bm::word_t* dst_block, bm::word_t* tmp_block) { return get_bit_block_COUNT(dst_block, tmp_block); } /// Get array of bits out of the decoder into bit block /// (Converts inverted list into bits) /// Returns number of words (bits) being read unsigned get_arr_bit(bm::word_t* dst_block, bool clear_target=true); /// Get current block type unsigned get_block_type() const { return block_type_; } unsigned get_bit(); protected: get_bit_func_type bit_func_table_[bm::set_END]; decoder_type decoder_; bool end_of_stream_; unsigned bv_size_; iterator_state state_; unsigned id_cnt_; ///< Id counter for id list bm::id_t last_id_; ///< Last id from the id list gap_word_t glevels_[bm::gap_levels]; ///< GAP levels unsigned block_type_; ///< current block type unsigned block_idx_; ///< current block index unsigned mono_block_cnt_; ///< number of 0 or 1 blocks gap_word_t gap_head_; }; /** Class deserializer, can perform logical operation on bit-vector and serialized bit-vector. \ingroup bvserial */ template class operation_deserializer { public: typedef BV bvector_type; public: static unsigned deserialize(bvector_type& bv, const unsigned char* buf, bm::word_t* temp_block, set_operation op = bm::set_OR); private: /// experimental static void deserialize(bvector_type& bv_target, const bvector_type& bv_mask, const unsigned char* buf, bm::word_t* temp_block, set_operation op); private: typedef typename BV::blocks_manager_type blocks_manager_type; typedef serial_stream_iterator serial_stream_current; typedef serial_stream_iterator serial_stream_be; typedef serial_stream_iterator serial_stream_le; }; //--------------------------------------------------------------------- template serializer::serializer(const allocator_type& alloc) : alloc_(alloc), gap_serial_(false), byte_order_serial_(true), temp_block_(0), compression_level_(3) { temp_block_ = alloc_.alloc_bit_block(); } template void serializer::set_compression_level(unsigned clevel) { compression_level_ = clevel; } template unsigned serializer::get_compression_level() const { return compression_level_; } template serializer::~serializer() { alloc_.free_bit_block(temp_block_); } template void serializer::gap_length_serialization(bool value) { gap_serial_ = value; } template void serializer::byte_order_serialization(bool value) { byte_order_serial_ = value; } template void serializer::encode_header(const BV& bv, bm::encoder& enc) { const blocks_manager_type& bman = bv.get_blocks_manager(); unsigned char header_flag = 0; if (bv.size() == bm::id_max) // no dynamic resize header_flag |= BM_HM_DEFAULT; else header_flag |= BM_HM_RESIZE; if (!byte_order_serial_) header_flag |= BM_HM_NO_BO; if (!gap_serial_) header_flag |= BM_HM_NO_GAPL; enc.put_8(header_flag); if (byte_order_serial_) { ByteOrder bo = globals::byte_order(); enc.put_8((unsigned char)bo); } // keep GAP levels information if (gap_serial_) { enc.put_16(bman.glen(), bm::gap_levels); } // save size (only if bvector has been down-sized) if (header_flag & BM_HM_RESIZE) { enc.put_32(bv.size()); } } template void serializer::gamma_gap_block(bm::gap_word_t* gap_block, bm::encoder& enc) { unsigned len = gap_length(gap_block); // Use Elias Gamma encoding if (len > 6 && (compression_level_ > 3)) { encoder::position_type enc_pos0 = enc.get_pos(); { bit_out_type bout(enc); gamma_encoder_func gamma(bout); enc.put_8(set_block_gap_egamma); enc.put_16(gap_block[0]); for_each_dgap(gap_block, gamma); } // evaluate gamma coding efficiency encoder::position_type enc_pos1 = enc.get_pos(); unsigned gamma_size = enc_pos1 - enc_pos0; if (gamma_size > (len-1)*sizeof(gap_word_t)) { enc.set_pos(enc_pos0); } else { return; } } // save as plain GAP block enc.put_8(set_block_gap); enc.put_16(gap_block, len-1); } template void serializer::gamma_gap_array(const bm::gap_word_t* gap_array, unsigned arr_len, bm::encoder& enc, bool inverted) { if (compression_level_ > 3 && arr_len > 25) { encoder::position_type enc_pos0 = enc.get_pos(); { bit_out_type bout(enc); enc.put_8( inverted ? set_block_arrgap_egamma_inv : set_block_arrgap_egamma); bout.gamma(arr_len); gap_word_t prev = gap_array[0]; bout.gamma(prev + 1); for (unsigned i = 1; i < arr_len; ++i) { gap_word_t curr = gap_array[i]; bout.gamma(curr - prev); prev = curr; } } encoder::position_type enc_pos1 = enc.get_pos(); unsigned gamma_size = enc_pos1 - enc_pos0; if (gamma_size > (arr_len)*sizeof(gap_word_t)) { enc.set_pos(enc_pos0); } else { return; } } // save as an plain array enc.put_prefixed_array_16(inverted ? set_block_arrgap_inv : set_block_arrgap, gap_array, arr_len, true); } template void serializer::encode_gap_block(bm::gap_word_t* gap_block, bm::encoder& enc) { if (compression_level_ > 2) { gap_word_t* gap_temp_block = (gap_word_t*) temp_block_; gap_word_t arr_len; unsigned bc = gap_bit_count(gap_block); if (bc == 1) { arr_len = gap_convert_to_arr(gap_temp_block, gap_block, bm::gap_equiv_len-10); BM_ASSERT(arr_len == 1); enc.put_8(set_block_bit_1bit); enc.put_16(gap_temp_block[0]); return; } unsigned len = gap_length(gap_block); bool invert, use_array; invert = use_array = false; if (bc < len-1) { use_array = true; } else // inverted array is a better alternative? { unsigned inverted_bc = bm::gap_max_bits - bc; if (inverted_bc < len-1) { use_array = invert = true; } } if (use_array) { arr_len = gap_convert_to_arr(gap_temp_block, gap_block, bm::gap_equiv_len-10, invert); if (arr_len) { gamma_gap_array(gap_temp_block, arr_len, enc, invert); return; } } } gamma_gap_block(gap_block, enc); } template void serializer::encode_bit_interval(const bm::word_t* blk, bm::encoder& enc, unsigned //size_control ) { enc.put_8(set_block_bit_0runs); enc.put_8((blk[0]==0) ? 0 : 1); // encode start unsigned i,j;//,k; for (i = 0; i < bm::set_block_size; ++i) { if (blk[i] == 0) { // scan fwd to find 0 island length for (j = i+1; j < bm::set_block_size; ++j) { if (blk[j] != 0) break; } enc.put_16((gap_word_t)(j-i)); i = j - 1; } else { // scan fwd to find non-0 island length for (j = i+1; j < bm::set_block_size; ++j) { if (blk[j] == 0) { // look ahead to identify and ignore short 0-run if (((j+1 < bm::set_block_size) && blk[j+1]) || ((j+2 < bm::set_block_size) && blk[j+2]) ) { ++j; // skip zero word continue; } break; } } enc.put_16((gap_word_t)(j-i)); // stream all bit-words now BM_ASSERT(i < j); enc.put_32(blk + i, j - i); i = j - 1; } } } template unsigned serializer::serialize(const BV& bv, unsigned char* buf, unsigned buf_size) { BM_ASSERT(temp_block_); const blocks_manager_type& bman = bv.get_blocks_manager(); gap_word_t* gap_temp_block = (gap_word_t*) temp_block_; bm::encoder enc(buf, buf_size); // create the encoder encode_header(bv, enc); unsigned i,j; // save blocks. for (i = 0; i < bm::set_total_blocks; ++i) { bm::word_t* blk = bman.get_block(i); // ----------------------------------------- // Empty or ONE block serialization bool flag; flag = bman.is_block_zero(i, blk, false); if (flag) { zero_block: unsigned next_nb = bman.find_next_nz_block(i+1, false); if (next_nb == bm::set_total_blocks) // no more blocks { enc.put_8(set_block_azero); return enc.size(); } unsigned nb = next_nb - i; if (nb > 1 && nb < 128) { // special (but frequent) case -- GAP delta fits in 7bits unsigned char c = (unsigned char)((1u << 7) | nb); enc.put_8(c); } else { SER_NEXT_GRP(enc, nb, set_block_1zero, set_block_8zero, set_block_16zero, set_block_32zero) } i = next_nb - 1; continue; } else { flag = bman.is_block_one(i, blk, false); if (flag) { // Look ahead for similar blocks for(j = i+1; j < bm::set_total_blocks; ++j) { bm::word_t* blk_next = bman.get_block(j); if (flag != bman.is_block_one(j, blk_next, false)) break; } if (j == bm::set_total_blocks) { enc.put_8(set_block_aone); break; } else { unsigned nb = j - i; SER_NEXT_GRP(enc, nb, set_block_1one, set_block_8one, set_block_16one, set_block_32one) } i = j - 1; continue; } } // ------------------------------ // GAP serialization if (BM_IS_GAP(blk)) { gap_word_t* gblk = BMGAP_PTR(blk); encode_gap_block(gblk, enc); continue; } // ---------------------------------------------- // BIT BLOCK serialization { if (compression_level_ <= 1) { enc.put_prefixed_array_32(set_block_bit, blk, bm::set_block_size); continue; } // compute bit-block statistics: bit-count and number of GAPS unsigned block_bc = 0; bm::id_t bit_gaps = bit_block_calc_count_change(blk, blk + bm::set_block_size, &block_bc); unsigned block_bc_inv = bm::gap_max_bits - block_bc; switch (block_bc) { case 1: // corner case: only 1 bit on { bm::id_t bit_idx = 0; bit_find_in_block(blk, bit_idx, &bit_idx); enc.put_8(set_block_bit_1bit); enc.put_16((short)bit_idx); continue; } case 0: goto zero_block; // empty block } // compute alternative representation sizes // unsigned arr_block_size = sizeof(gap_word_t) + (block_bc * sizeof(gap_word_t)); unsigned arr_block_size_inv = sizeof(gap_word_t) + (block_bc_inv * sizeof(gap_word_t)); unsigned gap_block_size = sizeof(gap_word_t) + ((bit_gaps+1) * sizeof(gap_word_t)); unsigned interval_block_size; interval_block_size = bit_count_nonzero_size(blk, bm::set_block_size); bool inverted = false; if (arr_block_size_inv < arr_block_size && arr_block_size_inv < gap_block_size && arr_block_size_inv < interval_block_size) { inverted = true; goto bit_as_array; } // if interval representation is not a good alternative if ((interval_block_size > arr_block_size) || (interval_block_size > gap_block_size)) { if (gap_block_size < (bm::gap_equiv_len-64) && gap_block_size < arr_block_size) { unsigned len = bit_convert_to_gap(gap_temp_block, blk, bm::gap_max_bits, bm::gap_equiv_len-64); if (len) // save as GAP { gamma_gap_block(gap_temp_block, enc); continue; } } if (arr_block_size < ((bm::gap_equiv_len-64) * sizeof(gap_word_t))) { bit_as_array: gap_word_t arr_len; unsigned mask = inverted ? ~0 : 0; arr_len = bit_convert_to_arr(gap_temp_block, blk, bm::gap_max_bits, bm::gap_equiv_len-64, mask); if (arr_len) { gamma_gap_array(gap_temp_block, arr_len, enc, inverted); continue; } } // full bit-block enc.put_prefixed_array_32(set_block_bit, blk, bm::set_block_size); continue; } // if interval block is a winner if (interval_block_size < arr_block_size && interval_block_size < gap_block_size) { encode_bit_interval(blk, enc, interval_block_size); continue; } if (gap_block_size < bm::gap_equiv_len && gap_block_size < arr_block_size) { unsigned len = bit_convert_to_gap(gap_temp_block, blk, bm::gap_max_bits, bm::gap_equiv_len-64); if (len) // save as GAP { gamma_gap_block(gap_temp_block, enc); continue; } } // if array is best if (arr_block_size < bm::gap_equiv_len-64) { goto bit_as_array; } // full bit-block enc.put_prefixed_array_32(set_block_bit, blk, bm::set_block_size); continue; } } enc.put_8(set_block_end); unsigned encoded_size = enc.size(); return encoded_size; } /// Bit mask flags for serialization algorithm /// \ingroup bvserial enum serialization_flags { BM_NO_BYTE_ORDER = 1, ///< save no byte-order info (save some space) BM_NO_GAP_LENGTH = (1 << 1) ///< save no GAP info (save some space) }; /*! \brief Saves bitvector into memory. Function serializes content of the bitvector into memory. Serialization adaptively uses compression(variation of GAP encoding) when it is benefitial. \param buf - pointer on target memory area. No range checking in the function. It is responsibility of programmer to allocate sufficient amount of memory using information from calc_stat function. \param temp_block - pointer on temporary memory block. Cannot be 0; If you want to save memory across multiple bvectors allocate temporary block using allocate_tempblock and pass it to serialize. (Of course serialize does not deallocate temp_block.) \param serialization_flags Flags controlling serilization (bit-mask) (use OR-ed serialization flags) \ingroup bvserial \return Size of serialization block. \sa calc_stat, serialization_flags */ /* Serialization format:

 | HEADER | BLOCKS |

 Header structure:
   BYTE : Serialization header (bit mask of BM_HM_*)
   BYTE : Byte order ( 0 - Big Endian, 1 - Little Endian)
   INT16: Reserved (0)
   INT16: Reserved Flags (0)

 
*/ template unsigned serialize(const BV& bv, unsigned char* buf, bm::word_t* temp_block, unsigned serialization_flags = 0) { bm::serializer bv_serial; if (serialization_flags & BM_NO_BYTE_ORDER) bv_serial.byte_order_serialization(false); if (serialization_flags & BM_NO_GAP_LENGTH) bv_serial.gap_length_serialization(false); else bv_serial.gap_length_serialization(true); bv_serial.set_compression_level(4); return bv_serial.serialize(bv, buf, 0); } /*! @brief Saves bitvector into memory. Allocates temporary memory block for bvector. \ingroup bvserial */ template unsigned serialize(BV& bv, unsigned char* buf, unsigned serialization_flags=0) { bm::serializer bv_serial; if (serialization_flags & BM_NO_BYTE_ORDER) bv_serial.byte_order_serialization(false); if (serialization_flags & BM_NO_GAP_LENGTH) bv_serial.gap_length_serialization(false); else bv_serial.gap_length_serialization(true); bv_serial.set_compression_level(4); return bv_serial.serialize(bv, buf, 0); } /*! @brief Bitvector deserialization from memory. @param buf - pointer on memory which keeps serialized bvector @param temp_block - pointer on temporary block, if NULL bvector allocates own. @return Number of bytes consumed by deserializer. Function desrializes bitvector from memory block containig results of previous serialization. Function does not remove bits which are currently set. Effectively it means OR logical operation between current bitset and previously serialized one. @ingroup bvserial */ template unsigned deserialize(BV& bv, const unsigned char* buf, bm::word_t* temp_block=0) { ByteOrder bo_current = globals::byte_order(); bm::decoder dec(buf); unsigned char header_flag = dec.get_8(); ByteOrder bo = bo_current; if (!(header_flag & BM_HM_NO_BO)) { bo = (bm::ByteOrder) dec.get_8(); } if (bo_current == bo) { deserializer deserial; return deserial.deserialize(bv, buf, temp_block); } switch (bo_current) { case BigEndian: { deserializer deserial; return deserial.deserialize(bv, buf, temp_block); } case LittleEndian: { deserializer deserial; return deserial.deserialize(bv, buf, temp_block); } default: BM_ASSERT(0); }; return 0; } template unsigned deseriaizer_base::read_id_list(decoder_type& decoder, unsigned block_type, bm::gap_word_t* dst_arr) { typedef bit_in bit_in_type; gap_word_t len = 0; switch (block_type) { case set_block_bit_1bit: dst_arr[0] = decoder.get_16(); len = 1; break; case set_block_arrgap: case set_block_arrgap_inv: len = decoder.get_16(); decoder.get_16(dst_arr, len); break; case set_block_arrgap_egamma: case set_block_arrgap_egamma_inv: { bit_in_type bin(decoder); len = (gap_word_t)bin.gamma(); gap_word_t prev, bit_idx; prev = 0; for (gap_word_t k = 0; k < len; ++k) { bit_idx = (gap_word_t)bin.gamma(); bit_idx -= (k == 0); bit_idx += prev; dst_arr[k] = prev = bit_idx; } // for } break; default: BM_ASSERT(0); } return len; } template unsigned deseriaizer_base::read_gap_block(decoder_type& decoder, unsigned block_type, bm::gap_word_t* dst_block, bm::gap_word_t& gap_head) { typedef bit_in bit_in_type; unsigned gap_len = 0; switch (block_type) { case set_block_gap: { gap_len = gap_length(&gap_head); --gap_len; *dst_block = gap_head; decoder.get_16(dst_block+1, gap_len - 1); dst_block[gap_len] = gap_max_bits - 1; ++gap_len; } break; case set_block_bit_1bit: { gap_set_all(dst_block, bm::gap_max_bits, 0); gap_word_t bit_idx = decoder.get_16(); gap_len = gap_add_value(dst_block, bit_idx); ++gap_len; } break; case set_block_arrgap: case set_block_arrgap_inv: { gap_set_all(dst_block, bm::gap_max_bits, 0); gap_word_t len = decoder.get_16(); for (gap_word_t k = 0; k < len; ++k) { gap_word_t bit_idx = decoder.get_16(); gap_len = gap_add_value(dst_block, bit_idx); } // for ++gap_len; } break; case set_block_arrgap_egamma: case set_block_arrgap_egamma_inv: { unsigned arr_len = read_id_list(decoder, block_type, id_array_); dst_block[0] = 0; gap_len = gap_set_array(dst_block, id_array_, arr_len); } break; case set_block_gap_egamma: { gap_len = (gap_head >> 3); --gap_len; // read gamma GAP block into a dest block { *dst_block = gap_head; gap_word_t* gap_data_ptr = dst_block + 1; bit_in_type bin(decoder); { gap_word_t v = (gap_word_t)bin.gamma(); gap_word_t gap_sum = *gap_data_ptr = v - 1; for (unsigned i = 1; i < gap_len; ++i) { v = (gap_word_t)bin.gamma(); *(++gap_data_ptr) = gap_sum += v; } dst_block[++gap_len] = bm::gap_max_bits - 1; } } } break; default: BM_ASSERT(0); } if (block_type == set_block_arrgap_egamma_inv || block_type == set_block_arrgap_inv) { gap_invert(dst_block); } return gap_len; } template void deserializer::deserialize_gap(unsigned char btype, decoder_type& dec, bvector_type& bv, blocks_manager_type& bman, unsigned i, bm::word_t* blk) { typedef bit_in bit_in_type; gap_word_t gap_head; gap_word_t gap_len = 0; switch (btype) { case set_block_gap: case set_block_gapbit: { gap_word_t gap_head = (gap_word_t) (sizeof(gap_word_t) == 2 ? dec.get_16() : dec.get_32()); gap_len = gap_length(&gap_head); int level = gap_calc_level(gap_len, bman.glen()); --gap_len; if (level == -1) // Too big to be GAP: convert to BIT block { *gap_temp_block_ = gap_head; dec.get_16(gap_temp_block_+1, gap_len - 1); gap_temp_block_[gap_len] = gap_max_bits - 1; if (blk == 0) // block does not exist yet { blk = bman.get_allocator().alloc_bit_block(); bman.set_block(i, blk); gap_convert_to_bitset(blk, gap_temp_block_); } else // We have some data already here. Apply OR operation. { blk = bman.deoptimize_block(i); gap_add_to_bitset(blk, gap_temp_block_); } return; } // level == -1 set_gap_level(&gap_head, level); if (blk == 0) { gap_word_t* gap_blk = bman.get_allocator().alloc_gap_block(level, bman.glen()); gap_word_t* gap_blk_ptr = BMGAP_PTR(gap_blk); *gap_blk_ptr = gap_head; set_gap_level(gap_blk_ptr, level); bman.set_block(i, (bm::word_t*)gap_blk); bman.set_block_gap(i); dec.get_16(gap_blk + 1, gap_len - 1); gap_blk[gap_len] = bm::gap_max_bits - 1; } else // target block exists { // read GAP block into a temp memory and perform OR *gap_temp_block_ = gap_head; dec.get_16(gap_temp_block_ + 1, gap_len - 1); gap_temp_block_[gap_len] = bm::gap_max_bits - 1; ++gap_len; break; } return; } case set_block_arrgap: case set_block_arrgap_egamma: { unsigned arr_len = read_id_list(dec, btype, this->id_array_); gap_len = gap_set_array(gap_temp_block_, this->id_array_, arr_len); break; } case set_block_gap_egamma: gap_head = (gap_word_t) (sizeof(gap_word_t) == 2 ? dec.get_16() : dec.get_32()); case set_block_arrgap_egamma_inv: case set_block_arrgap_inv: gap_len = read_gap_block(dec, btype, gap_temp_block_, gap_head); break; default: BM_ASSERT(0); } // check if encoded GAP block length is too high and use bit-block instead if (gap_len > bm::gap_length_threashold) { blk = bman.deoptimize_block(i); if (!blk) { blk = bman.get_allocator().alloc_bit_block(); bman.set_block(i, blk); bit_block_set(blk, 0); } gap_add_to_bitset_l(blk, gap_temp_block_, gap_len-1); } else { bv.combine_operation_with_block(i, (bm::word_t*)gap_temp_block_, 1, BM_OR); } } template unsigned deserializer::deserialize(bvector_type& bv, const unsigned char* buf, bm::word_t* temp_block) { blocks_manager_type& bman = bv.get_blocks_manager(); bm::wordop_t* tmp_buf = temp_block ? (bm::wordop_t*) temp_block : (bm::wordop_t*)bman.check_allocate_tempblock(); temp_block_ = temp_block = (word_t*)tmp_buf; bm::strategy strat = bv.get_new_blocks_strat(); bv.set_new_blocks_strat(BM_GAP); decoder_type dec(buf); BM_SET_MMX_GUARD // Reading header unsigned char header_flag = dec.get_8(); if (!(header_flag & BM_HM_NO_BO)) { /*ByteOrder bo = (bm::ByteOrder)*/dec.get_8(); } if (header_flag & BM_HM_ID_LIST) { // special case: the next comes plain list of integers if (header_flag & BM_HM_RESIZE) { unsigned bv_size = dec.get_32(); if (bv_size > bv.size()) { bv.resize(bv_size); } } for (unsigned cnt = dec.get_32(); cnt; --cnt) { bm::id_t id = dec.get_32(); bv.set(id); } // for // -1 for compatibility with other deserialization branches return dec.size()-1; } unsigned i; if (!(header_flag & BM_HM_NO_GAPL)) { gap_word_t glevels[bm::gap_levels]; // read GAP levels information for (i = 0; i < bm::gap_levels; ++i) { glevels[i] = dec.get_16(); } } if (header_flag & (1 << 1)) { unsigned bv_size = dec.get_32(); if (bv_size > bv.size()) { bv.resize(bv_size); } } unsigned char btype; unsigned nb; for (i = 0; i < bm::set_total_blocks; ++i) { btype = dec.get_8(); bm::word_t* blk = bman.get_block(i); // pre-check if we have short zero-run packaging here // if (btype & (1 << 7)) { nb = btype & ~(1 << 7); i += nb-1; continue; } switch (btype) { case set_block_azero: case set_block_end: i = bm::set_total_blocks; break; case set_block_1zero: continue; case set_block_8zero: nb = dec.get_8(); i += nb-1; continue; case set_block_16zero: nb = dec.get_16(); i += nb-1; continue; case set_block_32zero: nb = dec.get_32(); i += nb-1; continue; case set_block_aone: for (;i < bm::set_total_blocks; ++i) { bman.set_block_all_set(i); } break; case set_block_1one: bman.set_block_all_set(i); continue; case set_block_8one: BM_SET_ONE_BLOCKS(dec.get_8()); continue; case set_block_16one: BM_SET_ONE_BLOCKS(dec.get_16()); continue; case set_block_32one: BM_SET_ONE_BLOCKS(dec.get_32()); continue; case set_block_bit: { if (blk == 0) { blk = bman.get_allocator().alloc_bit_block(); bman.set_block(i, blk); dec.get_32(blk, bm::set_block_size); continue; } dec.get_32(temp_block, bm::set_block_size); bv.combine_operation_with_block(i, temp_block, 0, BM_OR); continue; } case set_block_bit_1bit: { unsigned bit_idx = dec.get_16(); bit_idx += i * bm::bits_in_block; bv.set_bit(bit_idx); continue; } case set_block_bit_0runs: { //TODO: optimization if block exists bit_block_set(temp_block, 0); unsigned char run_type = dec.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = dec.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); temp_block[j] = dec.get_32(); } } else { j += run_length; } } // for bv.combine_operation_with_block(i, temp_block, 0, BM_OR); continue; } case set_block_bit_interval: { unsigned head_idx, tail_idx; head_idx = dec.get_16(); tail_idx = dec.get_16(); if (blk == 0) { blk = bman.get_allocator().alloc_bit_block(); bman.set_block(i, blk); for (unsigned i = 0; i < head_idx; ++i) { blk[i] = 0; } dec.get_32(blk + head_idx, tail_idx - head_idx + 1); for (unsigned j = tail_idx + 1; j < bm::set_block_size; ++j) { blk[j] = 0; } continue; } bit_block_set(temp_block, 0); dec.get_32(temp_block + head_idx, tail_idx - head_idx + 1); bv.combine_operation_with_block(i, temp_block, 0, BM_OR); continue; } case set_block_gap: case set_block_gapbit: case set_block_arrgap: case set_block_gap_egamma: case set_block_arrgap_egamma: case set_block_arrgap_egamma_inv: case set_block_arrgap_inv: deserialize_gap(btype, dec, bv, bman, i, blk); continue; case set_block_arrbit: { gap_word_t len = (gap_word_t) (sizeof(gap_word_t) == 2 ? dec.get_16() : dec.get_32()); if (bman.is_block_gap(i)) { // Here we most probably does not want to keep // the block GAP since generic bitblock offers better // performance. blk = bman.convert_gap2bitset(i); } else { if (blk == 0) // block does not exists yet { blk = bman.get_allocator().alloc_bit_block(); bit_block_set(blk, 0); bman.set_block(i, blk); } } // Get the array one by one and set the bits. for (unsigned k = 0; k < len; ++k) { gap_word_t bit_idx = dec.get_16(); set_bit(blk, bit_idx); } continue; } default: BM_ASSERT(0); // unknown block type } // switch } // for i bv.forget_count(); bv.set_new_blocks_strat(strat); return dec.size(); } template serial_stream_iterator::serial_stream_iterator(const unsigned char* buf) : decoder_(buf), end_of_stream_(false), bv_size_(0), state_(e_unknown), id_cnt_(0), block_idx_(0), mono_block_cnt_(0) { ::memset(bit_func_table_, 0, sizeof(bit_func_table_)); bit_func_table_[bm::set_AND] = &serial_stream_iterator::get_bit_block_AND; bit_func_table_[bm::set_ASSIGN] = &serial_stream_iterator::get_bit_block_ASSIGN; bit_func_table_[bm::set_OR] = &serial_stream_iterator::get_bit_block_OR; bit_func_table_[bm::set_SUB] = &serial_stream_iterator::get_bit_block_SUB; bit_func_table_[bm::set_XOR] = &serial_stream_iterator::get_bit_block_XOR; bit_func_table_[bm::set_COUNT] = &serial_stream_iterator::get_bit_block_COUNT; bit_func_table_[bm::set_COUNT_AND] = &serial_stream_iterator::get_bit_block_COUNT_AND; bit_func_table_[bm::set_COUNT_XOR] = &serial_stream_iterator::get_bit_block_COUNT_XOR; bit_func_table_[bm::set_COUNT_OR] = &serial_stream_iterator::get_bit_block_COUNT_OR; bit_func_table_[bm::set_COUNT_SUB_AB] = &serial_stream_iterator::get_bit_block_COUNT_SUB_AB; bit_func_table_[bm::set_COUNT_SUB_BA] = &serial_stream_iterator::get_bit_block_COUNT_SUB_BA; bit_func_table_[bm::set_COUNT_A] = &serial_stream_iterator::get_bit_block_COUNT_A; bit_func_table_[bm::set_COUNT_B] = &serial_stream_iterator::get_bit_block_COUNT; // reading stream header unsigned char header_flag = decoder_.get_8(); if (!(header_flag & BM_HM_NO_BO)) { /*ByteOrder bo = (bm::ByteOrder)*/decoder_.get_8(); } // check if bitvector comes as an inverted, sorted list of ints // if (header_flag & BM_HM_ID_LIST) { // special case: the next comes plain list of unsigned integers if (header_flag & BM_HM_RESIZE) { bv_size_ = decoder_.get_32(); } state_ = e_list_ids; id_cnt_ = decoder_.get_32(); next(); // read first id } else { if (!(header_flag & BM_HM_NO_GAPL)) { unsigned i; // keep GAP levels info for (i = 0; i < bm::gap_levels; ++i) { glevels_[i] = decoder_.get_16(); } } if (header_flag & (1 << 1)) { bv_size_ = decoder_.get_32(); } state_ = e_blocks; } } template void serial_stream_iterator::next() { if (is_eof()) { ++block_idx_; return; } switch (state_) { case e_list_ids: // read inverted ids one by one if (id_cnt_ == 0) { end_of_stream_ = true; state_ = e_unknown; break; } last_id_ = decoder_.get_32(); --id_cnt_; break; case e_blocks: if (block_idx_ == bm::set_total_blocks) { end_of_stream_ = true; state_ = e_unknown; break; } block_type_ = decoder_.get_8(); // pre-check for 7-bit zero block // if (block_type_ & (1 << 7)) { mono_block_cnt_ = (block_type_ & ~(1 << 7)) - 1; state_ = e_zero_blocks; break; } switch (block_type_) { case set_block_azero: case set_block_end: end_of_stream_ = true; state_ = e_unknown; break; case set_block_1zero: state_ = e_zero_blocks; mono_block_cnt_ = 0; break; case set_block_8zero: state_ = e_zero_blocks; mono_block_cnt_ = decoder_.get_8()-1; break; case set_block_16zero: state_ = e_zero_blocks; mono_block_cnt_ = decoder_.get_16()-1; break; case set_block_32zero: state_ = e_zero_blocks; mono_block_cnt_ = decoder_.get_32()-1; break; case set_block_aone: state_ = e_one_blocks; mono_block_cnt_ = bm::set_total_blocks - block_idx_; break; case set_block_1one: state_ = e_one_blocks; mono_block_cnt_ = 0; break; case set_block_8one: state_ = e_one_blocks; mono_block_cnt_ = decoder_.get_8()-1; break; case set_block_16one: state_ = e_one_blocks; mono_block_cnt_ = decoder_.get_16()-1; break; case set_block_32one: state_ = e_one_blocks; mono_block_cnt_ = decoder_.get_32()-1; break; case set_block_bit: case set_block_bit_interval: case set_block_bit_0runs: case set_block_arrbit: state_ = e_bit_block; break; case set_block_gap: case set_block_gap_egamma: gap_head_ = (gap_word_t) (sizeof(gap_word_t) == 2 ? decoder_.get_16() : decoder_.get_32()); case set_block_arrgap: case set_block_arrgap_egamma: case set_block_arrgap_egamma_inv: case set_block_arrgap_inv: case set_block_bit_1bit: state_ = e_gap_block; break; case set_block_gapbit: state_ = e_gap_block; //e_bit_block; // TODO: make a better decision here break; default: BM_ASSERT(0); }// switch break; case e_zero_blocks: case e_one_blocks: ++block_idx_; if (!mono_block_cnt_) { state_ = e_blocks; // get new block token break; } --mono_block_cnt_; break; case e_unknown: default: BM_ASSERT(0); } // switch } template void serial_stream_iterator::skip_mono_blocks() { BM_ASSERT(state_ == e_zero_blocks || state_ == e_one_blocks); if (!mono_block_cnt_) { ++block_idx_; } else { block_idx_ += mono_block_cnt_+1; mono_block_cnt_ = 0; } state_ = e_blocks; } template unsigned serial_stream_iterator::get_bit_block_ASSIGN( bm::word_t* dst_block, bm::word_t* /*tmp_block*/) { BM_ASSERT(this->state_ == e_bit_block); unsigned count = 0; switch (this->block_type_) { case set_block_bit: decoder_.get_32(dst_block, bm::set_block_size); break; case set_block_bit_0runs: { if (dst_block) bit_block_set(dst_block, 0); unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { decoder_.get_32(dst_block ? dst_block + j : dst_block, run_length); } j += run_length; } // for } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); if (dst_block) { for (unsigned i = 0; i < head_idx; ++i) dst_block[i] = 0; decoder_.get_32(dst_block + head_idx, tail_idx - head_idx + 1); for (unsigned j = tail_idx + 1; j < bm::set_block_size; ++j) dst_block[j] = 0; } else { decoder_.seek((tail_idx - head_idx + 1) * 4); } } break; case set_block_arrbit: case set_block_bit_1bit: get_arr_bit(dst_block, true /*clear target*/); break; case set_block_gapbit: BM_ASSERT(0); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_OR(bm::word_t* dst_block, bm::word_t* /*tmp_block*/) { BM_ASSERT(this->state_ == e_bit_block); unsigned count = 0; switch (block_type_) { case set_block_bit: { bitblock_get_adapter ga(dst_block); bit_OR func; bitblock_store_adapter sa(dst_block); bit_recomb(ga, decoder_, func, sa ); } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) dst_block[i] |= decoder_.get_32(); } break; case set_block_bit_0runs: { unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); dst_block[j] |= decoder_.get_32(); } } else { j += run_length; } } // for } break; case set_block_bit_1bit: case set_block_arrbit: get_arr_bit(dst_block, false /*don't clear target*/); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_AND(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block != tmp_block); unsigned count = 0; switch (block_type_) { case set_block_bit: for (unsigned i = 0; i < bm::set_block_size; i+=4) { dst_block[i] &= decoder_.get_32(); dst_block[i+1] &= decoder_.get_32(); dst_block[i+2] &= decoder_.get_32(); dst_block[i+3] &= decoder_.get_32(); } break; case set_block_bit_0runs: { unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); unsigned run_end = j + run_length; if (run_type) { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); dst_block[j] &= decoder_.get_32(); } } else { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); dst_block[j] = 0; } } } // for } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); unsigned i; for ( i = 0; i < head_idx; ++i) dst_block[i] = 0; for ( i = head_idx; i <= tail_idx; ++i) dst_block[i] &= decoder_.get_32(); for ( i = tail_idx + 1; i < bm::set_block_size; ++i) dst_block[i] = 0; } break; case set_block_bit_1bit: case set_block_arrbit: get_arr_bit(tmp_block, true /*clear target*/); if (dst_block) bit_block_and(dst_block, tmp_block); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_XOR(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block != tmp_block); unsigned count = 0; switch (block_type_) { case set_block_bit: for (unsigned i = 0; i < bm::set_block_size; ++i) dst_block[i] ^= decoder_.get_32(); break; case set_block_bit_0runs: { unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); dst_block[j] ^= decoder_.get_32(); } } else { j += run_length; } } // for } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) dst_block[i] ^= decoder_.get_32(); } break; case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /*clear target*/); if (dst_block) { bit_block_xor(dst_block, tmp_block); } break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_SUB(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block != tmp_block); unsigned count = 0; switch (block_type_) { case set_block_bit: for (unsigned i = 0; i < bm::set_block_size; ++i) dst_block[i] &= ~decoder_.get_32(); break; case set_block_bit_0runs: { unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); dst_block[j] &= ~decoder_.get_32(); } } else { j += run_length; } } // for } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) dst_block[i] &= ~decoder_.get_32(); } break; case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /*clear target*/); if (dst_block) bit_block_sub(dst_block, tmp_block); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_COUNT(bm::word_t* /*dst_block*/, bm::word_t* /*tmp_block*/) { BM_ASSERT(this->state_ == e_bit_block); unsigned count = 0; switch (block_type_) { case set_block_bit: for (unsigned i = 0; i < bm::set_block_size; ++i) count += word_bitcount(decoder_.get_32()); break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { count += word_bitcount(decoder_.get_32()); } } else { j += run_length; } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) count += word_bitcount(decoder_.get_32()); } break; case set_block_arrbit: count += get_arr_bit(0); break; case set_block_bit_1bit: ++count; decoder_.get_16(); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_COUNT_A(bm::word_t* dst_block, bm::word_t* /*tmp_block*/) { BM_ASSERT(this->state_ == e_bit_block); unsigned count = 0; if (dst_block) { // count the block bitcount count = bit_block_calc_count(dst_block, dst_block + bm::set_block_size); } switch (block_type_) { case set_block_bit: decoder_.get_32(0, bm::set_block_size); break; case set_block_bit_0runs: { unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { decoder_.get_32(); } } else { j += run_length; } } // for } break; case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) decoder_.get_32(); } break; case set_block_arrbit: get_arr_bit(0); break; case set_block_bit_1bit: decoder_.get_16(); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_COUNT_AND(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block); unsigned count = 0; switch (block_type_) { case set_block_bit: for (unsigned i = 0; i < bm::set_block_size; ++i) count += word_bitcount(dst_block[i] & decoder_.get_32()); break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); if (run_type) { unsigned run_end = j + run_length; for (;j < run_end; ++j) { count += word_bitcount(dst_block[j] & decoder_.get_32()); } } else { j += run_length; } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); for (unsigned i = head_idx; i <= tail_idx; ++i) count += word_bitcount(dst_block[i] & decoder_.get_32()); } break; case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /*clear target*/); count += bit_operation_and_count(dst_block, dst_block + bm::set_block_size, tmp_block); break; default: BM_ASSERT(0); } // switch return count; } template unsigned serial_stream_iterator::get_bit_block_COUNT_OR(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block); bitblock_sum_adapter count_adapter; switch (block_type_) { case set_block_bit: { bitblock_get_adapter ga(dst_block); bit_COUNT_OR func; bit_recomb(ga, decoder_, func, count_adapter ); } break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); unsigned run_end = j + run_length; if (run_type) { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j] | decoder_.get_32()); } } else { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j]); } } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); unsigned count = 0; unsigned i; for (i = 0; i < head_idx; ++i) count += word_bitcount(dst_block[i]); for (i = head_idx; i <= tail_idx; ++i) count += word_bitcount(dst_block[i] | decoder_.get_32()); for (i = tail_idx + 1; i < bm::set_block_size; ++i) count += word_bitcount(dst_block[i]); return count; } case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /* clear target*/); return bit_operation_or_count(dst_block, dst_block + bm::set_block_size, tmp_block); default: BM_ASSERT(0); } // switch return count_adapter.sum(); } template unsigned serial_stream_iterator::get_bit_block_COUNT_XOR(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block); bitblock_sum_adapter count_adapter; switch (block_type_) { case set_block_bit: { bitblock_get_adapter ga(dst_block); bit_COUNT_XOR func; bit_recomb(ga, decoder_, func, count_adapter ); } break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); unsigned run_end = j + run_length; if (run_type) { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j] ^ decoder_.get_32()); } } else { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j]); } } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); unsigned count = 0; unsigned i; for (i = 0; i < head_idx; ++i) count += word_bitcount(dst_block[i]); for (i = head_idx; i <= tail_idx; ++i) count += word_bitcount(dst_block[i] ^ decoder_.get_32()); for (i = tail_idx + 1; i < bm::set_block_size; ++i) count += word_bitcount(dst_block[i]); return count; } case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /* clear target*/); return bit_operation_xor_count(dst_block, dst_block + bm::set_block_size, tmp_block); default: BM_ASSERT(0); } // switch return count_adapter.sum(); } template unsigned serial_stream_iterator::get_bit_block_COUNT_SUB_AB(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block); bitblock_sum_adapter count_adapter; switch (block_type_) { case set_block_bit: { bitblock_get_adapter ga(dst_block); bit_COUNT_SUB_AB func; bit_recomb(ga, decoder_, func, count_adapter ); } break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); unsigned run_end = j + run_length; if (run_type) { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j] & ~decoder_.get_32()); } } else { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(dst_block[j]); } } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); unsigned count = 0; unsigned i; for (i = 0; i < head_idx; ++i) count += word_bitcount(dst_block[i]); for (i = head_idx; i <= tail_idx; ++i) count += word_bitcount(dst_block[i] & (~decoder_.get_32())); for (i = tail_idx + 1; i < bm::set_block_size; ++i) count += word_bitcount(dst_block[i]); return count; } break; case set_block_bit_1bit: //TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /* clear target*/); return bit_operation_sub_count(dst_block, dst_block + bm::set_block_size, tmp_block); default: BM_ASSERT(0); } // switch return count_adapter.sum(); } template unsigned serial_stream_iterator::get_bit_block_COUNT_SUB_BA(bm::word_t* dst_block, bm::word_t* tmp_block) { BM_ASSERT(this->state_ == e_bit_block); BM_ASSERT(dst_block); bitblock_sum_adapter count_adapter; switch (block_type_) { case set_block_bit: { bitblock_get_adapter ga(dst_block); bit_COUNT_SUB_BA func; bit_recomb(ga, decoder_, func, count_adapter ); } break; case set_block_bit_0runs: { unsigned count = 0; unsigned char run_type = decoder_.get_8(); for (unsigned j = 0; j < bm::set_block_size;run_type = !run_type) { unsigned run_length = decoder_.get_16(); unsigned run_end = j + run_length; if (run_type) { for (;j < run_end; ++j) { BM_ASSERT(j < bm::set_block_size); count += word_bitcount(decoder_.get_32() & (~dst_block[j])); } } else { j += run_length; } } // for return count; } case set_block_bit_interval: { unsigned head_idx = decoder_.get_16(); unsigned tail_idx = decoder_.get_16(); unsigned count = 0; unsigned i; for (i = head_idx; i <= tail_idx; ++i) count += word_bitcount(decoder_.get_32() & (~dst_block[i])); return count; } break; case set_block_bit_1bit: // TODO: optimization case set_block_arrbit: get_arr_bit(tmp_block, true /* clear target*/); return bit_operation_sub_count(tmp_block, tmp_block + bm::set_block_size, dst_block); default: BM_ASSERT(0); } // switch return count_adapter.sum(); } template unsigned serial_stream_iterator::get_arr_bit(bm::word_t* dst_block, bool clear_target) { BM_ASSERT(this->block_type_ == set_block_arrbit || this->block_type_ == set_block_bit_1bit); gap_word_t len = decoder_.get_16(); // array length / 1bit_idx if (dst_block) { if (clear_target) bit_block_set(dst_block, 0); if (this->block_type_ == set_block_bit_1bit) { // len contains idx of 1 bit set set_bit(dst_block, len); return 1; } for (unsigned k = 0; k < len; ++k) { gap_word_t bit_idx = decoder_.get_16(); set_bit(dst_block, bit_idx); } } else { if (this->block_type_ == set_block_bit_1bit) { return 1; // nothing to do: len var already consumed 16bits } // fwd the decocing stream decoder_.seek(len * 2); } return len; } template unsigned serial_stream_iterator::get_bit() { BM_ASSERT(this->block_type_ == set_block_bit_1bit); ++(this->block_idx_); this->state_ = e_blocks; return decoder_.get_16(); // 1bit_idx } template void serial_stream_iterator::get_gap_block(bm::gap_word_t* dst_block) { BM_ASSERT(this->state_ == e_gap_block || this->block_type_ == set_block_bit_1bit); BM_ASSERT(dst_block); read_gap_block(this->decoder_, this->block_type_, dst_block, this->gap_head_); ++(this->block_idx_); this->state_ = e_blocks; } template unsigned serial_stream_iterator::get_bit_block(bm::word_t* dst_block, bm::word_t* tmp_block, set_operation op) { BM_ASSERT(this->state_ == e_bit_block); get_bit_func_type bit_func = bit_func_table_[op]; BM_ASSERT(bit_func); unsigned cnt = ((*this).*(bit_func))(dst_block, tmp_block); this->state_ = e_blocks; ++(this->block_idx_); return cnt; } template unsigned operation_deserializer::deserialize( bvector_type& bv, const unsigned char* buf, bm::word_t* temp_block, set_operation op) { ByteOrder bo_current = globals::byte_order(); bm::decoder dec(buf); unsigned char header_flag = dec.get_8(); ByteOrder bo = bo_current; if (!(header_flag & BM_HM_NO_BO)) { bo = (bm::ByteOrder) dec.get_8(); } blocks_manager_type& bman = bv.get_blocks_manager(); bit_block_guard bg(bman); if (temp_block == 0) { temp_block = bg.allocate(); } if (bo_current == bo) { serial_stream_current ss(buf); return iterator_deserializer:: deserialize(bv, ss, temp_block, op); } switch (bo_current) { case BigEndian: { serial_stream_be ss(buf); return iterator_deserializer:: deserialize(bv, ss, temp_block, op); } case LittleEndian: { serial_stream_le ss(buf); return iterator_deserializer:: deserialize(bv, ss, temp_block, op); } default: BM_ASSERT(0); }; return 0; } template void operation_deserializer::deserialize( bvector_type& bv_target, const bvector_type& bv_mask, const unsigned char* buf, bm::word_t* temp_block, set_operation op) { ByteOrder bo_current = globals::byte_order(); bm::decoder dec(buf); unsigned char header_flag = dec.get_8(); ByteOrder bo = bo_current; if (!(header_flag & BM_HM_NO_BO)) { bo = (bm::ByteOrder) dec.get_8(); } blocks_manager_type& bman = bv_target.get_blocks_manager(); bit_block_guard bg(bman); if (temp_block == 0) { temp_block = bg.allocate(); } if (bo_current == bo) { serial_stream_current ss(buf); iterator_deserializer:: deserialize(bv_target, bv_mask, ss, temp_block, op); return; } switch (bo_current) { case BigEndian: { serial_stream_be ss(buf); iterator_deserializer:: deserialize(bv_target, bv_mask, ss, temp_block, op); } case LittleEndian: { serial_stream_le ss(buf); iterator_deserializer:: deserialize(bv_target, bv_mask, ss, temp_block, op); } default: BM_ASSERT(0); }; } template void iterator_deserializer::load_id_list( bvector_type& bv, serial_iterator_type& sit, unsigned id_count, bool set_clear) { const unsigned win_size = 64; bm::id_t id_buffer[win_size+1]; if (set_clear) // set bits { for (unsigned i = 0; i <= id_count;) { unsigned j; for (j = 0; j < win_size && i <= id_count; ++j, ++i) { id_buffer[j] = sit.get_id(); sit.next(); } // for j bm::combine_or(bv, id_buffer, id_buffer + j); } // for i } else // clear bits { for (unsigned i = 0; i <= id_count;) { unsigned j; for (j = 0; j < win_size && i <= id_count; ++j, ++i) { id_buffer[j] = sit.get_id(); sit.next(); } // for j bm::combine_sub(bv, id_buffer, id_buffer + j); } // for i } } template unsigned iterator_deserializer::finalize_target_vector( blocks_manager_type& bman, set_operation op, unsigned bv_block_idx) { unsigned count = 0; switch (op) { case set_OR: case set_SUB: case set_XOR: case set_COUNT: case set_COUNT_B: case set_COUNT_AND: case set_COUNT_SUB_BA: // nothing to do break; case set_AND: case set_ASSIGN: // clear the rest of the target vector { unsigned i, j; bman.get_block_coord(bv_block_idx, &i, &j); bm::word_t*** blk_root = bman.get_rootblock(); unsigned effective_top_size = bman.effective_top_block_size(); for (;i < effective_top_size; ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) { bv_block_idx+=bm::set_array_size-j; j = 0; continue; } for (;j < bm::set_array_size; ++j, ++bv_block_idx) { if (blk_blk[j]) bman.zero_block(bv_block_idx); } // for j j = 0; } // for i } break; case set_COUNT_A: case set_COUNT_OR: case set_COUNT_XOR: case set_COUNT_SUB_AB: // count bits in the target vector { unsigned i, j; bman.get_block_coord(bv_block_idx, &i, &j); bm::word_t*** blk_root = bman.get_rootblock(); unsigned effective_top_size = bman.effective_top_block_size(); for (;i < effective_top_size; ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) { bv_block_idx+=bm::set_array_size-j; j = 0; continue; } for (;j < bm::set_array_size; ++j, ++bv_block_idx) { if (blk_blk[j]) count += bman.block_bitcount(blk_blk[j]);//, bv_block_idx); } // for j j = 0; } // for i } break; default: BM_ASSERT(0); } return count; } template unsigned iterator_deserializer::process_id_list( bvector_type& bv, serial_iterator_type& sit, set_operation op) { unsigned count = 0; unsigned id_count = sit.get_id_count(); bool set_clear = true; switch (op) { case set_AND: { // TODO: use some more optimal algorithm without temp vector BV bv_tmp(BM_GAP); load_id_list(bv_tmp, sit, id_count, true); bv &= bv_tmp; } break; case set_ASSIGN: bv.clear(true); // intentional case fall through here (not a bug) case set_OR: set_clear = true; // fall to SUB case set_SUB: load_id_list(bv, sit, id_count, set_clear); break; case set_XOR: for (unsigned i = 0; i < id_count; ++i) { bm::id_t id = sit.get_id(); bv[id] ^= true; sit.next(); } // for break; case set_COUNT: case set_COUNT_B: for (unsigned i = 0; i < id_count; ++i) { /* bm::id_t id = */ sit.get_id(); ++count; sit.next(); } // for break; case set_COUNT_A: return bv.count(); case set_COUNT_AND: for (unsigned i = 0; i < id_count; ++i) { bm::id_t id = sit.get_id(); count += bv.get_bit(id); sit.next(); } // for break; case set_COUNT_XOR: { // TODO: get rid of the temp vector BV bv_tmp(BM_GAP); load_id_list(bv_tmp, sit, id_count, true); count += count_xor(bv, bv_tmp); } break; case set_COUNT_OR: { // TODO: get rid of the temp. vector BV bv_tmp(BM_GAP); load_id_list(bv_tmp, sit, id_count, true); count += count_or(bv, bv_tmp); } break; case set_COUNT_SUB_AB: { // TODO: get rid of the temp. vector BV bv_tmp(bv); load_id_list(bv_tmp, sit, id_count, false); count += bv_tmp.count(); } break; default: BM_ASSERT(0); } // switch return count; } template void iterator_deserializer::deserialize( bvector_type& bv_target, const bvector_type& bv_mask, serial_iterator_type& sit, bm::word_t* temp_block, set_operation op) { BM_ASSERT(temp_block); BM_ASSERT(op == bm::set_AND || op == bm::set_OR || op == bm::set_XOR || op == bm::set_SUB); gap_word_t gap_temp_block[bm::gap_equiv_len*3]; gap_temp_block[0] = 0; bv_target.clear(true); // clear and free the memory const blocks_manager_type& bman_mask = bv_mask.get_blocks_manager(); blocks_manager_type& bman_target = bv_target.get_blocks_manager(); unsigned bv_size = sit.bv_size(); if (bv_mask.size() > bv_size) { bv_size = bv_mask.size(); } if (bv_target.size() < bv_size) { bv_target.resize(bv_size); } unsigned top_blocks = bman_mask.effective_top_block_size(); BM_SET_MMX_GUARD typename serial_iterator_type::iterator_state state; state = sit.get_state(); if (state == serial_iterator_type::e_list_ids) { bv_target = bv_mask; process_id_list(bv_target, sit, op); return; } unsigned bv_block_idx = 0; for (;1;) { bv_block_idx = sit.block_idx(); // early exit check to avoid over-scan { unsigned tb_idx = bv_block_idx >> bm::set_array_shift; // current top block if (tb_idx > top_blocks) { if (op == bm::set_AND) break; if (sit.is_eof()) break; } } if (sit.is_eof()) // argument stream ended { if (op == bm::set_AND) break; // (OR, SUB, XOR) need to scan fwd until mask vector ends state = serial_iterator_type::e_zero_blocks; } else { state = sit.state(); } switch (state) { case serial_iterator_type::e_blocks: sit.next(); continue; case serial_iterator_type::e_bit_block: { bm::set_operation sop = op; const bm::word_t* blk_mask = bman_mask.get_block(bv_block_idx); bm::word_t* blk_target = 0; if (!blk_mask) { switch (op) { case set_AND: case set_SUB: // first arg is 0, so the operation gives us zero // all we need to do is to seek the input stream sop = set_ASSIGN; break; case set_OR: case set_XOR: blk_target = bman_target.make_bit_block(bv_block_idx); break; default: BM_ASSERT(0); } } else // block exists { int is_gap = BM_IS_GAP(blk_mask); blk_target = bman_target.copy_bit_block(bv_block_idx, blk_mask, is_gap); } // 2 bit blocks recombination sit.get_bit_block(blk_target, temp_block, sop); } break; case serial_iterator_type::e_zero_blocks: { if (op == set_AND) { sit.skip_mono_blocks(); break; } sit.next(); // set_SUB: set_OR: set_XOR: bman_target.copy_block(bv_block_idx, bman_mask); } break; case serial_iterator_type::e_one_blocks: { BM_ASSERT(bv_block_idx == sit.block_idx()); const bm::word_t* blk_mask = bman_mask.get_block(bv_block_idx); sit.next(); switch (op) { case set_OR: bman_target.set_block_all_set(bv_block_idx); break; case set_SUB: break; case set_AND: bman_target.copy_block(bv_block_idx, bman_mask); break; case set_XOR: if (blk_mask) { int is_gap = BM_IS_GAP(blk_mask); bm::word_t* blk_target = bman_target.copy_bit_block(bv_block_idx, blk_mask, is_gap); bit_block_xor(blk_target, FULL_BLOCK_ADDR); } else { // 0 XOR 1 = 1 bman_target.set_block_all_set(bv_block_idx); } break; default: BM_ASSERT(0); } // switch } break; case serial_iterator_type::e_gap_block: { // Single bit-in-block optimization if (sit.get_block_type() == set_block_bit_1bit) { if (op == set_AND) { unsigned bit_idx = sit.get_bit(); unsigned bn = (bv_block_idx << bm::set_block_shift) | bit_idx; bool bval_mask = bv_mask.test(bn); bv_target.set_bit(bn, bval_mask); break; } } const bm::word_t* blk_mask = bman_mask.get_block(bv_block_idx); sit.get_gap_block(gap_temp_block); // gap_word_t gap_head = gap_temp_block[0]; unsigned len = gap_length(gap_temp_block); int level = gap_calc_level(len, bman_target.glen()); --len; if (!blk_mask) { if (op == set_OR || op == set_XOR) { bman_target.set_gap_block(bv_block_idx, gap_temp_block, level); } } else // mask block exists { bm::operation bop = bm::setop2op(op); bman_target.copy_block(bv_block_idx, bman_mask); bv_target.combine_operation_with_block( bv_block_idx, (bm::word_t*)gap_temp_block, 1, // GAP bop); } } break; default: BM_ASSERT(0); } // switch } // for (deserialization) bv_target.forget_count(); } template unsigned iterator_deserializer::deserialize( bvector_type& bv, serial_iterator_type& sit, bm::word_t* temp_block, set_operation op) { BM_ASSERT(temp_block); unsigned count = 0; gap_word_t gap_temp_block[bm::gap_equiv_len*3]; gap_temp_block[0] = 0; blocks_manager_type& bman = bv.get_blocks_manager(); bv.forget_count(); if (sit.bv_size() && (sit.bv_size() > bv.size())) { bv.resize(sit.bv_size()); } BM_SET_MMX_GUARD typename serial_iterator_type::iterator_state state; state = sit.get_state(); if (state == serial_iterator_type::e_list_ids) { count = process_id_list(bv, sit, op); return count; } unsigned bv_block_idx = 0; for (;1;) { bm::set_operation sop = op; if (sit.is_eof()) // argument stream ended { count += finalize_target_vector(bman, op, bv_block_idx); return count; } state = sit.state(); switch (state) { case serial_iterator_type::e_blocks: sit.next(); continue; case serial_iterator_type::e_bit_block: { BM_ASSERT(sit.block_idx() == bv_block_idx); bm::word_t* blk = bman.get_block(bv_block_idx); if (!blk) { switch (op) { case set_AND: case set_SUB: case set_COUNT_AND: case set_COUNT_SUB_AB: case set_COUNT_A: // one arg is 0, so the operation gives us zero // all we need to do is to seek the input stream sop = set_ASSIGN; break; case set_OR: case set_XOR: case set_ASSIGN: blk = bman.make_bit_block(bv_block_idx); break; case set_COUNT: case set_COUNT_XOR: case set_COUNT_OR: case set_COUNT_SUB_BA: case set_COUNT_B: // first arg is not required (should work as is) sop = set_COUNT; break; case set_END: default: BM_ASSERT(0); } } else // block exists { int is_gap = BM_IS_GAP(blk); if (is_gap || IS_FULL_BLOCK(blk)) { if (IS_FULL_BLOCK(blk) && is_const_set_operation(op)) { } else { // TODO: make sure const operations do not // deoptimize GAP blocks blk = bman.deoptimize_block(bv_block_idx); } } } // 2 bit blocks recombination unsigned c = sit.get_bit_block(blk, temp_block, sop); count += c; } break; case serial_iterator_type::e_zero_blocks: { BM_ASSERT(bv_block_idx == sit.block_idx()); bm::word_t* blk = bman.get_block(bv_block_idx); sit.next(); if (blk) { switch (op) { case set_AND: case set_ASSIGN: // the result is 0 blk = bman.zero_block(bv_block_idx); break; case set_SUB: case set_COUNT_AND: case set_OR: case set_XOR: case set_COUNT_SUB_BA: case set_COUNT_B: // nothing to do break; case set_COUNT_SUB_AB: case set_COUNT_A: case set_COUNT_OR: case set_COUNT: case set_COUNT_XOR: // valid bit block recombined with 0 block // results with same block data // all we need is to bitcount bv block { unsigned c = bman.block_bitcount(blk);//, bv_block_idx); count += c; } break; case set_END: default: BM_ASSERT(0); } // switch op } // if blk } break; case serial_iterator_type::e_one_blocks: { BM_ASSERT(bv_block_idx == sit.block_idx()); bm::word_t* blk = bman.get_block(bv_block_idx); sit.next(); switch (op) { case set_OR: case set_ASSIGN: bman.set_block_all_set(bv_block_idx); break; case set_COUNT_OR: case set_COUNT_B: case set_COUNT: // block becomes all set count += bm::bits_in_block; break; case set_SUB: blk = bman.zero_block(bv_block_idx); break; case set_COUNT_SUB_AB: case set_AND: // nothing to do break; case set_COUNT_AND: case set_COUNT_A: count += bman.block_bitcount(blk);//, bv_block_idx); break; default: if (blk) { switch (op) { case set_XOR: blk = bman.deoptimize_block(bv_block_idx); bit_block_xor(blk, FULL_BLOCK_ADDR); break; case set_COUNT_XOR: { count += combine_count_operation_with_block( blk, FULL_BLOCK_ADDR, bm::COUNT_XOR); } break; case set_COUNT_SUB_BA: { count += combine_count_operation_with_block( blk, FULL_BLOCK_ADDR, bm::COUNT_SUB_BA); } break; default: BM_ASSERT(0); } // switch } else // blk == 0 { switch (op) { case set_XOR: // 0 XOR 1 = 1 bman.set_block_all_set(bv_block_idx); break; case set_COUNT_XOR: count += bm::bits_in_block; break; case set_COUNT_SUB_BA: // 1 - 0 = 1 count += bm::bits_in_block; break; default: break; } // switch } // else } // switch } break; case serial_iterator_type::e_gap_block: { BM_ASSERT(bv_block_idx == sit.block_idx()); bm::word_t* blk = bman.get_block(bv_block_idx); sit.get_gap_block(gap_temp_block); unsigned len = gap_length(gap_temp_block); int level = gap_calc_level(len, bman.glen()); --len; bool const_op = is_const_set_operation(op); if (const_op) { distance_metric metric = operation2metric(op); bm::word_t* gptr = (bm::word_t*)gap_temp_block; BMSET_PTRGAP(gptr); unsigned c = combine_count_operation_with_block( blk, gptr, metric); count += c; } else // non-const set operation { if ((sop == set_ASSIGN) && blk) // target block override { blk = bman.zero_block(bv_block_idx); sop = set_OR; } if (blk == 0) // target block not found { switch (sop) { case set_AND: case set_SUB: break; case set_OR: case set_XOR: case set_ASSIGN: bman.set_gap_block( bv_block_idx, gap_temp_block, level); break; default: BM_ASSERT(0); } // switch } else // target block exists { bm::operation bop = bm::setop2op(op); if (level == -1) // too big to GAP { gap_convert_to_bitset(temp_block, gap_temp_block); bv.combine_operation_with_block(bv_block_idx, temp_block, 0, // BIT bop); } else // GAP fits { set_gap_level(gap_temp_block, level); bv.combine_operation_with_block( bv_block_idx, (bm::word_t*)gap_temp_block, 1, // GAP bop); } } } } break; default: BM_ASSERT(0); } // switch ++bv_block_idx; } // for (deserialization) return count; } } // namespace bm #include "bmundef.h" #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmsse4.h0000644000175000017500000002327611365120467012364 0ustar tlktlk#ifndef BMSSE4__H__INCLUDED__ #define BMSSE4__H__INCLUDED__ /* Copyright(c) 2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ // Header implements processor specific intrinsics declarations for SSE2 // instruction set #include #include #include #include "bmdef.h" #include "bmsse_util.h" namespace bm { /** @defgroup SSE4 Processor specific optimizations for SSE4.2 instructions * @ingroup bmagic */ /*! SSE4.2 optimized bitcounting . @ingroup SSE4 */ inline bm::id_t sse4_bit_count(const __m128i* block, const __m128i* block_end) { bm::id_t count = 0; #ifdef BM64_SSE4 do { __m128i tmp0 = _mm_load_si128(block); count += _mm_popcnt_u64(_mm_extract_epi64(tmp0, 0)) + _mm_popcnt_u64(_mm_extract_epi64(tmp0, 1)); __m128i tmp1 = _mm_load_si128(block+1); count += _mm_popcnt_u64(_mm_extract_epi64(tmp1, 0)) + _mm_popcnt_u64(_mm_extract_epi64(tmp1, 1)); block +=2; } while (block < block_end); #else do { const unsigned* b = (unsigned*) block; count += _mm_popcnt_u32(b[0]) + _mm_popcnt_u32(b[1]) + _mm_popcnt_u32(b[2]) + _mm_popcnt_u32(b[3]); } while (++block < block_end); #endif return count; } /*! \internal */ BMFORCEINLINE unsigned op_xor(unsigned a, unsigned b) { unsigned ret = (a ^ b); return ret; } /*! \internal */ BMFORCEINLINE unsigned op_or(unsigned a, unsigned b) { return (a | b); } /*! \internal */ BMFORCEINLINE unsigned op_and(unsigned a, unsigned b) { return (a & b); } template bm::id_t sse4_bit_count_op(const __m128i* BMRESTRICT block, const __m128i* BMRESTRICT block_end, const __m128i* BMRESTRICT mask_block, Func sse2_func) { bm::id_t count = 0; #ifdef BM64_SSE4 do { __m128i tmp0 = _mm_load_si128(block); __m128i tmp1 = _mm_load_si128(mask_block); __m128i b = sse2_func(tmp0, tmp1); count += _mm_popcnt_u64(_mm_extract_epi64(b, 0)); count += _mm_popcnt_u64(_mm_extract_epi64(b, 1)); ++block; ++mask_block; } while (block < block_end); #else do { __m128i tmp0 = _mm_load_si128(block); __m128i tmp1 = _mm_load_si128(mask_block); __m128i b = sse2_func(tmp0, tmp1); count += _mm_popcnt_u32(_mm_extract_epi32(b, 0)); count += _mm_popcnt_u32(_mm_extract_epi32(b, 1)); count += _mm_popcnt_u32(_mm_extract_epi32(b, 2)); count += _mm_popcnt_u32(_mm_extract_epi32(b, 3)); ++block; ++mask_block; } while (block < block_end); #endif return count; } /* template bm::id_t sse4_bit_count_op2(const __m128i* BMRESTRICT block, const __m128i* BMRESTRICT block_end, const __m128i* BMRESTRICT mask_block, Func op_func) { bm::id_t count = 0; #ifdef BM64_SSE4 do { unsigned *r1 = (unsigned*) block; unsigned *r2 = (unsigned*) mask_block; count += _mm_popcnt_u32(op_func(r1[0], r2[0])); count += _mm_popcnt_u32(op_func(r1[1], r2[1])); count += _mm_popcnt_u32(op_func(r1[2], r2[2])); count += _mm_popcnt_u32(op_func(r1[3], r2[3])); ++mask_block; } while (++block < block_end); #else do { unsigned *r1 = (unsigned*) block; unsigned *r2 = (unsigned*) mask_block; count += _mm_popcnt_u32(op_func(r1[0], r2[0])); count += _mm_popcnt_u32(op_func(r1[1], r2[1])); count += _mm_popcnt_u32(op_func(r1[2], r2[2])); count += _mm_popcnt_u32(op_func(r1[3], r2[3])); ++mask_block; } while (++block < block_end); #endif return count; } */ #define VECT_XOR_ARR_2_MASK(dst, src, src_end, mask)\ sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask) #define VECT_ANDNOT_ARR_2_MASK(dst, src, src_end, mask)\ sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask) #define VECT_BITCOUNT(first, last) \ sse4_bit_count((__m128i*) (first), (__m128i*) (last)) #define VECT_BITCOUNT_AND(first, last, mask) \ sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and) #define VECT_BITCOUNT_OR(first, last, mask) \ sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or) #define VECT_BITCOUNT_XOR(first, last, mask) \ sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor) #define VECT_BITCOUNT_SUB(first, last, mask) \ sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub) #define VECT_INVERT_ARR(first, last) \ sse2_invert_arr(first, last); #define VECT_AND_ARR(dst, src, src_end) \ sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_OR_ARR(dst, src, src_end) \ sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_SUB_ARR(dst, src, src_end) \ sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_XOR_ARR(dst, src, src_end) \ sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_COPY_BLOCK(dst, src, src_end) \ sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end)) #define VECT_SET_BLOCK(dst, dst_end, value) \ sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value)) /*! SSE4.2 optimized bitcounting and number of GAPs @ingroup SSE4 */ inline bm::id_t sse4_bit_block_calc_count_change(const __m128i* BMRESTRICT block, const __m128i* BMRESTRICT block_end, unsigned* BMRESTRICT bit_count) { // __m128i mask1 = _mm_set_epi32(0x1, 0x1, 0x1, 0x1); register int count = (block_end - block)*4; register bm::word_t w0, w_prev; const int w_shift = sizeof(w0) * 8 - 1; bool first_word = true; *bit_count = 0; // first word { bm::word_t w; const bm::word_t* blk = (const bm::word_t*) block; w = w0 = blk[0]; *bit_count += _mm_popcnt_u32(w); w ^= (w >> 1); count += _mm_popcnt_u32(w); count -= (w_prev = (w0 >> w_shift)); } do { __m128i b = _mm_load_si128(block); __m128i tmp2 = _mm_xor_si128(b, _mm_srli_epi32(b, 1)); // tmp2=(b >> 1) ^ b; __m128i tmp3 = _mm_srli_epi32(b, w_shift); // tmp3 = w0 >> w_shift // __m128i tmp4 = _mm_and_si128(b, mask1); // tmp4 = w0 & 1 // --------------------------------------------------------------------- { if (first_word) { first_word = false; } else { w0 = _mm_extract_epi32(b, 0); if (w0) { *bit_count += _mm_popcnt_u32(w0); count += _mm_popcnt_u32(_mm_extract_epi32(tmp2, 0)); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = _mm_extract_epi32(tmp3, 0); } else { count -= !w_prev; w_prev ^= w_prev; } } w0 = _mm_extract_epi32(b, 1); if (w0) { *bit_count += _mm_popcnt_u32(w0); count += _mm_popcnt_u32(_mm_extract_epi32(tmp2, 1)); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = _mm_extract_epi32(tmp3, 1); } else { count -= !w_prev; w_prev ^= w_prev; } w0 = _mm_extract_epi32(b, 2); if (w0) { *bit_count += _mm_popcnt_u32(w0); count += _mm_popcnt_u32(_mm_extract_epi32(tmp2, 2)); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = _mm_extract_epi32(tmp3, 2); } else { count -= !w_prev; w_prev ^= w_prev; } w0 = _mm_extract_epi32(b, 3); if (w0) { *bit_count += _mm_popcnt_u32(w0); count += _mm_popcnt_u32(_mm_extract_epi32(tmp2, 3)); count -= !(w_prev ^ (w0 & 1)); count -= w_prev = _mm_extract_epi32(tmp3, 3); } else { count -= !w_prev; w_prev ^= w_prev; } } } while (++block < block_end); return count; } } // namespace #endif bm3.7.0/src/bmdbg.h0000644000175000017500000002600011365120467012226 0ustar tlktlk#ifndef BMDBG__H__INCLUDED__ #define BMDBG__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ // BitMagic debugging functions (internal header) #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4996) #endif #include #include #include #include #include #include #include #include #include "bmdef.h" using namespace std; #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4311 4312 4127) #endif inline void PrintGap(const bm::gap_word_t* gap_buf) { unsigned len = (*gap_buf >> 3); cout << "[" << *gap_buf << " len=" << len << "] "; for (unsigned i = 0; i < len; ++i) { ++gap_buf; cout << *gap_buf << "; "; } cout << endl; } inline void PrintDGap(const bm::gap_word_t* gap_buf, unsigned gap_len=0) { bm::gap_word_t h; memcpy(&h, gap_buf, sizeof(h)); unsigned len = gap_len ? gap_len : (h >> 3); cout << "[" " len=" << len << "] "; unsigned i = gap_len ? 0 : 1; for (; i < len; ++i) { cout << gap_buf[i] << "; "; } cout << endl; } inline unsigned int iLog2(unsigned int value) { unsigned int l = 0; while( (value >> l) > 1 ) ++l; return l; } inline unsigned PrintGammaCode(unsigned value) { unsigned bits = 0; // Elias gamma encode { unsigned l = iLog2(value); //cout << "log2=" << l << endl; for (unsigned i = 0; i < l; ++i) { cout << 0; ++bits; } cout << 1; ++bits; for (unsigned i = 0; i < l; ++i) { if (value & 1 << i) cout << 1; else cout << 0; ++bits; } } return bits; } inline void PrintDGapGamma(const bm::gap_word_t* gap_buf, unsigned gap_len=0) { unsigned total = 0; bm::gap_word_t h; memcpy(&h, gap_buf, sizeof(h)); unsigned len = gap_len ? gap_len : (h >> 3); cout << "[" " len=" << len << "] "; unsigned i = gap_len ? 0 : 1; for (; i < len; ++i) { unsigned v = gap_buf[i]; unsigned bits = PrintGammaCode(v+1); cout << "; "; total += bits; } cout << " gamma_bits=" << total << " src_bits =" << len * 16; cout << endl; } template void LoadBVector(const char* fname, TBV& bvector, unsigned* file_size=0) { ifstream bv_file (fname, ios::in | ios::binary); if (!bv_file.good()) { cout << "Cannot open file: " << fname << endl; exit(1); } bv_file.seekg(0, ios_base::end); unsigned length = bv_file.tellg(); if (length == 0) { cout << "Empty file:" << fname << endl; exit(1); } if (file_size) *file_size = length; bv_file.seekg(0, ios::beg); char* buffer = new char[length]; bv_file.read(buffer, length); bm::deserialize(bvector, (unsigned char*)buffer); delete [] buffer; } template void SaveBVector(const char* fname, const TBV& bvector) { ofstream bfile (fname, ios::out | ios::binary); if (!bfile.good()) { cout << "Cannot open file: " << fname << endl; exit(1); } typename TBV::statistics st1; bvector.calc_stat(&st1); unsigned char* blob = new unsigned char[st1.max_serialize_mem]; unsigned blob_size = bm::serialize(bvector, blob); bfile.write((char*)blob, blob_size); bfile.close(); delete [] blob; } inline void SaveBlob(const char* name_prefix, unsigned num, const char* ext, const unsigned char* blob, unsigned blob_size) { char fname[2048]; sprintf(fname, "%s-%u.%s", name_prefix, num, ext); ofstream bfile (fname, ios::out | ios::binary); if (!bfile.good()) { cout << "Cannot open file: " << fname << endl; exit(1); } bfile.write((char*)blob, blob_size); bfile.close(); } template void PrintBinary(V val) { for (unsigned i = 0; i < sizeof(V)*8; i++) { cout << (unsigned)((val >> i) & 1); if (i == 15 && (sizeof(V)*8 > 16)) cout << "-"; } // cout << " :" << val; } inline void PrintBits32(unsigned val) { PrintBinary(val); } void PrintDistanceMatrix( const unsigned distance[bm::set_block_plain_cnt][bm::set_block_plain_cnt]) { for (unsigned i = 0; i < bm::set_block_plain_cnt; ++i) { const unsigned* row = distance[i]; cout << i << ": "; for (unsigned j = i; j < bm::set_block_plain_cnt; ++j) { cout << setw(4) << setfill('0') << row[j] << " "; } cout << endl; } } template void PrintTMatrix(const TM& tmatrix, unsigned cols=0, bool binary = false) { unsigned columns = cols ? cols : tmatrix.cols(); for (unsigned i = 0; i < tmatrix.rows(); ++i) { const typename TM::value_type* row = tmatrix.row(i); cout << i << ": "; if (i < 10) cout << " "; for (unsigned j = 0; j < columns; ++j) { if (!binary) { cout << setw(4) << setfill('0') << row[j] << " "; } else { PrintBinary(row[j]); } } cout << endl; } } /// Binary code string converted to number /// Bits are expected left to right /// inline unsigned BinStrLR(const char* str) { unsigned value = 0; unsigned bit_idx = 0; for (; *str; ++str) { switch(*str) { case '0': ++bit_idx; break; case '1': value |= (1 << bit_idx); ++bit_idx; break; default: assert(0); } if (bit_idx == sizeof(unsigned) * 8) break; } return value; } template void print_blocks_count(const BV& bv) { const unsigned sz = 128000; unsigned* bc_arr = new unsigned[sz]; for(unsigned x = 0; x < sz; ++x) bc_arr[x] = 0; unsigned last_block = bv.count_blocks(bc_arr); unsigned sum = 0; for (unsigned i = 0; i <= last_block; ++i) { cout << i << ":"; unsigned j = 0; for (; i <= last_block; ++i) { cout << setw(5) << setfill('0') << bc_arr[i] << " "; sum += bc_arr[i]; if (++j == 10) break; } cout << " | " << sum << endl; } cout << "Total=" << sum << endl; delete [] bc_arr; } inline void print_bc(unsigned i, unsigned count) { static unsigned sum = 0; static unsigned row_idx = 0; static unsigned prev = 0; if (i == 0) { sum = row_idx = 0; } else { if (prev +1 < i) print_bc(prev+1, 0); prev = i; } if (row_idx == 0) { std::cout << i << ":"; } std::cout << std::setw(5) << std::setfill('0') << count << " "; sum += count; ++row_idx; if (row_idx == 10) { row_idx = 0; std::cout << " | " << sum << std::endl; } } template void print_stat(const BV& bv, unsigned blocks = 0) { const typename BV::blocks_manager_type& bman = bv.get_blocks_manager(); bm::id_t count = 0; int printed = 0; int total_gap_eff = 0; if (!blocks) { blocks = bm::set_total_blocks; } unsigned nb; unsigned nb_prev = 0; for (nb = 0; nb < blocks; ++nb) { const bm::word_t* blk = bman.get_block(nb); if (blk == 0) { continue; } if (IS_FULL_BLOCK(blk)) { if (bman.is_block_gap(nb)) // gap block { printf("[Alert!%i]", nb); assert(0); } unsigned start = nb; for(unsigned i = nb+1; i < bm::set_total_blocks; ++i, ++nb) { blk = bman.get_block(nb); if (IS_FULL_BLOCK(blk)) { if (bman.is_block_gap(nb)) // gap block { printf("[Alert!%i]", nb); assert(0); --nb; break; } } else { --nb; break; } } printf("{F.%i:%i}",start, nb); ++printed; } else { if ((nb-1) != nb_prev) { printf("..%i..", (int)nb-nb_prev); } if (bman.is_block_gap(nb)) // gap block { unsigned bc = bm::gap_bit_count(BMGAP_PTR(blk)); /*unsigned sum = */bm::gap_control_sum(BMGAP_PTR(blk)); unsigned level = bm::gap_level(BMGAP_PTR(blk)); count += bc; unsigned len = bm::gap_length(BMGAP_PTR(blk))-1; unsigned raw_size=bc*2; unsigned cmr_len=len*2; int mem_eff = raw_size - cmr_len; total_gap_eff += mem_eff; unsigned i,j; bman.get_block_coord(nb, &i, &j); printf(" [GAP %i(%i,%i)=%i:%i-L%i(%i)] ", nb, i, j, bc, level, len, mem_eff); ++printed; } else // bitset { const bm::word_t* blk_end = blk + bm::set_block_size; unsigned bc = bm::bit_block_calc_count(blk, blk_end); unsigned zw = 0; for (unsigned i = 0; i < bm::set_block_size; ++i) { zw += (blk[i] == 0); } count += bc; printf(" (BIT %i=%i[%i]) ", nb, bc, zw); ++printed; } } if (printed == 10) { printed = 0; printf("\n"); } nb_prev = nb; } // for nb printf("\n"); printf("gap_efficiency=%i\n", total_gap_eff); } #include "bmundef.h" #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmblocks.h0000644000175000017500000013505111365120467012756 0ustar tlktlk#ifndef BM_BLOCKS__H__INCLUDED__ #define BM_BLOCKS__H__INCLUDED__ /* Copyright(c) 2002-2010 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include "bmfwd.h" #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4100) #endif namespace bm { /*! @brief bitvector blocks manager Embedded class managing bit-blocks on very low level. Includes number of functor classes used in different bitset algorithms. @ingroup bvector @internal */ template class blocks_manager { public: typedef Alloc allocator_type; /** Base functor class (block visitor)*/ class bm_func_base { public: bm_func_base(blocks_manager& bman) : bm_(bman) {} void on_empty_top(unsigned /* top_block_idx*/ ) {} void on_empty_block(unsigned /* block_idx*/ ) {} private: bm_func_base(const bm_func_base&); bm_func_base& operator=(const bm_func_base&); protected: blocks_manager& bm_; }; /** Base functor class connected for "constant" functors*/ class bm_func_base_const { public: bm_func_base_const(const blocks_manager& bman) : bm_(bman) {} void on_empty_top(unsigned /* top_block_idx*/ ) {} void on_empty_block(unsigned /* block_idx*/ ) {} private: bm_func_base_const(const bm_func_base_const&); bm_func_base_const& operator=(const bm_func_base_const&); protected: const blocks_manager& bm_; }; /** Base class for bitcounting functors */ class block_count_base : public bm_func_base_const { protected: block_count_base(const blocks_manager& bm) : bm_func_base_const(bm) {} bm::id_t block_count(const bm::word_t* block) const { return this->bm_.block_bitcount(block); } }; /** Bitcounting functor */ class block_count_func : public block_count_base { public: block_count_func(const blocks_manager& bm) : block_count_base(bm), count_(0) {} bm::id_t count() const { return count_; } void operator()(const bm::word_t* block) { count_ += this->block_count(block); } private: bm::id_t count_; }; /** Bitcounting functor filling the block counts array*/ class block_count_arr_func : public block_count_base { public: block_count_arr_func(const blocks_manager& bm, unsigned* arr) : block_count_base(bm), arr_(arr), last_idx_(0) { arr_[0] = 0; } void operator()(const bm::word_t* block, unsigned idx) { while (++last_idx_ < idx) { arr_[last_idx_] = 0; } arr_[idx] = this->block_count(block); last_idx_ = idx; } unsigned last_block() const { return last_idx_; } private: unsigned* arr_; unsigned last_idx_; }; /** bit value change counting functor */ class block_count_change_func : public bm_func_base_const { public: block_count_change_func(const blocks_manager& bm) : bm_func_base_const(bm), count_(0), prev_block_border_bit_(0) {} bm::id_t block_count(const bm::word_t* block, unsigned idx) { bm::id_t count = 0; bm::id_t first_bit; if (IS_FULL_BLOCK(block) || (block == 0)) { count = 1; if (idx) { first_bit = block ? 1 : 0; count -= !(prev_block_border_bit_ ^ first_bit); } prev_block_border_bit_ = block ? 1 : 0; } else { if (BM_IS_GAP(block)) { gap_word_t* gap_block = BMGAP_PTR(block); count = gap_length(gap_block) - 1; if (idx) { first_bit = gap_test(gap_block, 0); count -= !(prev_block_border_bit_ ^ first_bit); } prev_block_border_bit_ = gap_test(gap_block, gap_max_bits-1); } else // bitset { unsigned bit_count; count = bit_block_calc_count_change(block, block + bm::set_block_size, &bit_count); if (idx) { first_bit = block[0] & 1; count -= !(prev_block_border_bit_ ^ first_bit); } prev_block_border_bit_ = block[set_block_size-1] >> ((sizeof(block[0]) * 8) - 1); } } return count; } bm::id_t count() const { return count_; } void operator()(const bm::word_t* block, unsigned idx) { count_ += block_count(block, idx); } private: bm::id_t count_; bm::id_t prev_block_border_bit_; }; /** Functor detects if any bit set*/ class block_any_func : public bm_func_base_const { public: block_any_func(const blocks_manager& bm) : bm_func_base_const(bm) {} bool operator()(const bm::word_t* block, unsigned idx) { if (IS_FULL_BLOCK(block)) return true; if (BM_IS_GAP(block)) // gap block { if (!gap_is_all_zero(BMGAP_PTR(block), bm::gap_max_bits)) { return true; } } else // bitset { bm::wordop_t* blk1 = (wordop_t*)block; bm::wordop_t* blk2 = (wordop_t*)(block + bm::set_block_size); if (!bit_is_all_zero(blk1, blk2)) { return true; } } return false; } }; /*! Change GAP level lengths functor */ class gap_level_func : public bm_func_base { public: gap_level_func(blocks_manager& bm, const gap_word_t* glevel_len) : bm_func_base(bm), glevel_len_(glevel_len) { BM_ASSERT(glevel_len); } void operator()(bm::word_t* block, unsigned idx) { blocks_manager& bman = this->bm_; if (!BM_IS_GAP(block)) return; gap_word_t* gap_blk = BMGAP_PTR(block); // TODO: Use the same code as in the optimize functor if (gap_is_all_zero(gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, 0); goto free_block; } else if (gap_is_all_one(gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, FULL_BLOCK_ADDR); free_block: bman.get_allocator().free_gap_block(gap_blk, bman.glen()); bman.set_block_bit(idx); return; } unsigned len = gap_length(gap_blk); int level = gap_calc_level(len, glevel_len_); if (level == -1) { bm::word_t* blk = bman.get_allocator().alloc_bit_block(); bman.set_block_ptr(idx, blk); bman.set_block_bit(idx); gap_convert_to_bitset(blk, gap_blk); } else { gap_word_t* gap_blk_new = bman.allocate_gap_block(level, gap_blk, glevel_len_); bm::word_t* p = (bm::word_t*) gap_blk_new; BMSET_PTRGAP(p); bman.set_block_ptr(idx, p); } bman.get_allocator().free_gap_block(gap_blk, bman.glen()); } private: const gap_word_t* glevel_len_; }; /*! Bitblock optimization functor */ class block_opt_func : public bm_func_base { public: block_opt_func(blocks_manager& bm, bm::word_t* temp_block, int opt_mode, bv_statistics* bv_stat=0) : bm_func_base(bm), temp_block_(temp_block), opt_mode_(opt_mode), stat_(bv_stat), empty_(0) { BM_ASSERT(temp_block); } void on_empty_top(unsigned i) { bm::word_t*** blk_root = this->bm_.get_rootblock(); bm::word_t** blk_blk = blk_root[i]; if (blk_blk) { this->bm_.get_allocator().free_ptr(blk_blk); blk_root[i] = 0; } if (stat_) { stat_->max_serialize_mem += sizeof(unsigned) + 1; } } void on_empty_block(unsigned /* block_idx*/ ) { ++empty_; } void operator()(bm::word_t* block, unsigned idx) { blocks_manager& bman = this->bm_; if (IS_FULL_BLOCK(block)) { ++empty_; return; } if (stat_) { stat_->max_serialize_mem += empty_ << 2; empty_ = 0; } gap_word_t* gap_blk; if (BM_IS_GAP(block)) // gap block { gap_blk = BMGAP_PTR(block); // check if block is empty (or all 1) if (gap_is_all_zero(gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, 0); this->free_block(gap_blk, idx); ++empty_; } else if (gap_is_all_one(gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, FULL_BLOCK_ADDR); this->free_block(gap_blk, idx); ++empty_; } else { // regular gap block - compute statistics if (stat_) { stat_->add_gap_block( bm::gap_capacity(gap_blk, bman.glen()), bm::gap_length(gap_blk)); } } } else // bit block { if (opt_mode_ < 3) // free_01 optimization { bm::wordop_t* blk1 = (wordop_t*)block; bm::wordop_t* blk2 = (wordop_t*)(block + bm::set_block_size); bool b = bit_is_all_zero(blk1, blk2); if (b) { bman.get_allocator().free_bit_block(block); bman.set_block_ptr(idx, 0); ++empty_; } else if (opt_mode_ == 2) // check if it is all 1 block { b = is_bits_one(blk1, blk2); if (b) { bman.get_allocator().free_bit_block(block); bman.set_block_ptr(idx, FULL_BLOCK_ADDR); ++empty_; } } if (!b && stat_) stat_->add_bit_block(); return; } // try to compress gap_word_t* tmp_gap_blk = (gap_word_t*)temp_block_; *tmp_gap_blk = bm::gap_max_level << 1; unsigned threashold = bman.glen(bm::gap_max_level)-4; unsigned len = bit_convert_to_gap(tmp_gap_blk, block, bm::gap_max_bits, threashold); if (len) // compression successful { bman.get_allocator().free_bit_block(block); // check if new gap block can be eliminated if (gap_is_all_zero(tmp_gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, 0); ++empty_; } else if (gap_is_all_one(tmp_gap_blk, bm::gap_max_bits)) { bman.set_block_ptr(idx, FULL_BLOCK_ADDR); ++empty_; } else { int level = bm::gap_calc_level(len, bman.glen()); gap_blk = bman.allocate_gap_block(level, tmp_gap_blk); bman.set_block_ptr(idx, (bm::word_t*)gap_blk); bman.set_block_gap(idx); if (stat_) { stat_->add_gap_block( bm::gap_capacity(gap_blk, bman.glen()), bm::gap_length(gap_blk)); } } } else // non-compressable bit-block { if (stat_) stat_->add_bit_block(); } } } private: void free_block(gap_word_t* gap_blk, unsigned idx) { this->bm_.get_allocator().free_gap_block(gap_blk, this->bm_.glen()); this->bm_.set_block_bit(idx); } private: bm::word_t* temp_block_; int opt_mode_; bv_statistics* stat_; unsigned empty_; }; /** Bitblock invert functor */ class block_invert_func : public bm_func_base { public: block_invert_func(blocks_manager& bm) : bm_func_base(bm) {} void operator()(bm::word_t* block, unsigned idx) { if (!block) { this->bm_.set_block(idx, FULL_BLOCK_ADDR); } else if (IS_FULL_BLOCK(block)) { this->bm_.set_block_ptr(idx, 0); } else { if (BM_IS_GAP(block)) // gap block { gap_invert(BMGAP_PTR(block)); } else // bit block { bm::wordop_t* wrd_ptr = (wordop_t*) block; bm::wordop_t* wrd_end = (wordop_t*) (block + bm::set_block_size); bit_invert(wrd_ptr, wrd_end); } } } }; /** Set block zero functor */ class block_zero_func : public bm_func_base { public: block_zero_func(blocks_manager& bm) : bm_func_base(bm) {} void operator()(bm::word_t* block, unsigned idx) { if (BM_IS_GAP(block)) gap_set_all(BMGAP_PTR(block), bm::gap_max_bits, 0); else // BIT block { if (IS_FULL_BLOCK(block)) this->bm_.set_block_ptr(idx, 0); else bit_block_set(block, 0); } } }; /** Fill block with all-one bits functor */ class block_one_func : public bm_func_base { public: block_one_func(blocks_manager& bm) : bm_func_base(bm) {} void operator()(bm::word_t* block, unsigned idx) { if (!IS_FULL_BLOCK(block)) { this->bm_.set_block_all_set(idx); } } }; /** Block deallocation functor */ class block_free_func : public bm_func_base { public: block_free_func(blocks_manager& bm) : bm_func_base(bm) {} void operator()(bm::word_t* block)//, unsigned idx) { blocks_manager& bman = this->bm_; if (BM_IS_GAP(block)) // gap block { bman.get_allocator().free_gap_block(BMGAP_PTR(block), bman.glen()); } else { bman.get_allocator().free_bit_block(block); } } }; /** Block copy functor */ class block_copy_func : public bm_func_base { public: block_copy_func(blocks_manager& bm_target, const blocks_manager& bm_src) : bm_func_base(bm_target), bm_src_(bm_src) {} void operator()(bm::word_t* block, unsigned idx) { bm::word_t* new_blk; blocks_manager& bman = this->bm_; bool is_gap = BM_IS_GAP(block); if (is_gap) { bm::gap_word_t* gap_block = BMGAP_PTR(block); unsigned level = gap_level(gap_block); new_blk = (bm::word_t*) bman.get_allocator().alloc_gap_block(level, bman.glen()); int len = gap_length(BMGAP_PTR(block)); ::memcpy(new_blk, gap_block, len * sizeof(gap_word_t)); } else { new_blk = block; if (!IS_FULL_BLOCK(block)) { new_blk = bman.get_allocator().alloc_bit_block(); bit_block_copy(new_blk, block); } } bman.set_block(idx, new_blk, is_gap); } private: block_copy_func(const block_copy_func&); block_copy_func& operator=(const block_copy_func&); private: const blocks_manager& bm_src_; }; public: blocks_manager(const gap_word_t* glevel_len, bm::id_t max_bits, const Alloc& alloc = Alloc()) : temp_block_(0), alloc_(alloc) { ::memcpy(glevel_len_, glevel_len, sizeof(glevel_len_)); blocks_ = 0; top_block_size_ = effective_top_block_size_ = 0; if (max_bits) { top_block_size_ = compute_top_block_size(max_bits); init_tree(); } volatile const char* vp = _copyright::_p; char c = *vp; c = 0; } blocks_manager(const blocks_manager& blockman) : blocks_(0), top_block_size_(blockman.top_block_size_), effective_top_block_size_(blockman.effective_top_block_size_), #ifdef BM_DISBALE_BIT_IN_PTR gap_flags_(blockman.gap_flags_), #endif temp_block_(0), alloc_(blockman.alloc_) { ::memcpy(glevel_len_, blockman.glevel_len_, sizeof(glevel_len_)); init_tree(); blocks_manager* bm = const_cast(&blockman); word_t*** blk_root = bm->blocks_root(); block_copy_func copy_func(*this, blockman); for_each_nzblock(blk_root, top_block_size_, copy_func); } ~blocks_manager() { alloc_.free_bit_block(temp_block_); deinit_tree(); } void free_ptr(bm::word_t** ptr) { if (ptr) alloc_.free_ptr(ptr); } /** \brief Compute size of the block array needed to store bits \param bits_to_store - supposed capacity (number of bits) \return size of the top level block */ unsigned compute_top_block_size(bm::id_t bits_to_store) { if (bits_to_store == bm::id_max) // working in full-range mode { return bm::set_array_size; } unsigned top_block_size = bits_to_store / (bm::set_block_size * sizeof(bm::word_t) * bm::set_array_size * 8); return top_block_size + (top_block_size < bm::set_array_size); } /** Returns current capacity (bits) */ bm::id_t capacity() const { // arithmetic overflow protection... return top_block_size_ == bm::set_array_size ? bm::id_max : top_block_size_ * bm::set_array_size * bm::bits_in_block; } /** \brief Finds block in 2-level blocks array \param nb - Index of block (logical linear number) \return block adress or NULL if not yet allocated */ bm::word_t* get_block(unsigned nb) const { unsigned block_idx = nb >> bm::set_array_shift; if (block_idx >= top_block_size_) { return 0; } bm::word_t** blk_blk = blocks_[block_idx]; return blk_blk ? blk_blk[nb & bm::set_array_mask] : 0; } /** \brief Finds block in 2-level blocks array Specilized version of get_block(unsigned), returns an additional condition when there are no more blocks \param nb - Index of block (logical linear number) \param no_more_blocks - 1 if there are no more blocks at all \return block adress or NULL if not yet allocated */ bm::word_t* get_block(unsigned nb, int* no_more_blocks) const { unsigned block_idx = nb >> bm::set_array_shift; if (block_idx >= top_block_size_) { *no_more_blocks = 1; return 0; } *no_more_blocks = 0; bm::word_t** blk_blk = blocks_[block_idx]; return blk_blk ? blk_blk[nb & bm::set_array_mask] : 0; } /** Recalculate absolute block address into coordinates */ void get_block_coord(unsigned nb, unsigned* i, unsigned* j) const { BM_ASSERT(i); BM_ASSERT(j); *i = nb >> bm::set_array_shift; // top block address *j = nb & bm::set_array_mask; // address in sub-block } /** Find the next non-zero block starting from nb \param nb - block index \param deep_scan - flag to perform detailed bit-block analysis @return bm::set_total_blocks - no more blocks */ unsigned find_next_nz_block(unsigned nb, bool deep_scan = true) const { unsigned i,j; get_block_coord(nb, &i, &j); for (;i < effective_top_block_size_; ++i) { bm::word_t** blk_blk = blocks_[i]; if (blk_blk) { unsigned r = i * bm::set_array_size; do { if (blk_blk[j] && !is_block_zero(r + j, blk_blk[j], deep_scan)) return r + j; ++j; } while (j < bm::set_array_size); } j = 0; } // for i return bm::set_total_blocks; } /** \brief Finds block in 2-level blocks array \param i - top level block index \param j - second level block index \return block adress or NULL if not yet allocated */ const bm::word_t* get_block(unsigned i, unsigned j) const { if (i >= top_block_size_) return 0; const bm::word_t* const* blk_blk = blocks_[i]; return (blk_blk == 0) ? 0 : blk_blk[j]; } /** \brief Function returns top-level block in 2-level blocks array \param i - top level block index \return block adress or NULL if not yet allocated */ const bm::word_t* const * get_topblock(unsigned i) const { return (i >= top_block_size_) ? 0 : blocks_[i]; } /** \brief Returns root block in the tree. */ bm::word_t*** get_rootblock() const { blocks_manager* bm = const_cast(this); return bm->blocks_root(); } void free_block(bm::word_t* block) { if (BM_IS_GAP(block)) { alloc_.free_gap_block(BMGAP_PTR(block), glevel_len_); } else { alloc_.free_bit_block(block); } } void set_block_all_set(unsigned nb) { bm::word_t* block = set_block(nb, const_cast(FULL_BLOCK_ADDR)); free_block(block); } /** Create(allocate) bit block. Old block (if exists) gets deleted. */ bm::word_t* alloc_bit_block(unsigned nb) { bm::word_t* block = this->get_allocator().alloc_bit_block(); bm::word_t* old_block = set_block(nb, block); if (IS_VALID_ADDR(old_block)) { free_block(old_block); } return block; } /** Create all-zeros bit block. Old block (if exists) gets deleted. */ bm::word_t* make_bit_block(unsigned nb) { bm::word_t* block = this->alloc_bit_block(nb); bit_block_set(block, 0); return block; } /** Create bit block as a copy of source block (bit or gap). Old block (if exists) gets deleted. */ bm::word_t* copy_bit_block(unsigned nb, const bm::word_t* block_src, int is_src_gap) { if (block_src == 0) { zero_block(nb); return 0; } bm::word_t* block = alloc_bit_block(nb); if (is_src_gap) { gap_word_t* gap_block = BMGAP_PTR(block_src); gap_convert_to_bitset(block, gap_block); } else { bit_block_copy(block, block_src); } return block; } /** Copy block from another vector. Note:Target block is always replaced through re-allocation. */ bm::word_t* copy_block(unsigned idx, const blocks_manager& bm_src) { const bm::word_t* block = bm_src.get_block(idx); if (block == 0) { zero_block(idx); return 0; } bm::word_t* new_blk = 0; bool is_gap = BM_IS_GAP(block); if (is_gap) { bm::gap_word_t* gap_block = BMGAP_PTR(block); unsigned level = gap_level(gap_block); new_blk = (bm::word_t*) get_allocator().alloc_gap_block(level, glen()); int len = gap_length(BMGAP_PTR(block)); ::memcpy(new_blk, gap_block, len * sizeof(gap_word_t)); set_gap_level(new_blk, level); } else { if (IS_FULL_BLOCK(block)) { new_blk = FULL_BLOCK_ADDR; } else { new_blk = get_allocator().alloc_bit_block(); bit_block_copy(new_blk, block); } } set_block(idx, new_blk, is_gap); return new_blk; } /** Function checks if block is not yet allocated, allocates it and sets to all-zero or all-one bits. If content_flag == 1 (ALLSET block) requested and taken block is already ALLSET, function will return NULL initial_block_type and actual_block_type : 0 - bitset, 1 - gap */ bm::word_t* check_allocate_block(unsigned nb, unsigned content_flag, int initial_block_type, int* actual_block_type, bool allow_null_ret=true) { bm::word_t* block = this->get_block(nb); if (!IS_VALID_ADDR(block)) // NULL block or ALLSET { // if we wanted ALLSET and requested block is ALLSET return NULL unsigned block_flag = IS_FULL_BLOCK(block); *actual_block_type = initial_block_type; if (block_flag == content_flag && allow_null_ret) { return 0; // it means nothing to do for the caller } if (initial_block_type == 0) // bitset requested { block = alloc_.alloc_bit_block(); // initialize block depending on its previous status bit_block_set(block, block_flag ? 0xFF : 0); set_block(nb, block, false /*bit*/); } else // gap block requested { bm::gap_word_t* gap_block = allocate_gap_block(0); gap_set_all(gap_block, bm::gap_max_bits, block_flag); set_block(nb, (bm::word_t*)gap_block, true/*gap*/); return (bm::word_t*)gap_block; } } else // block already exists { *actual_block_type = BM_IS_GAP(block); } return block; } /*! @brief Fills all blocks with 0. @param free_mem - if true function frees the resources */ void set_all_zero(bool free_mem) { if (free_mem) { // TODO: optimization of top-level realloc deinit_tree(); init_tree(); } else { block_zero_func zero_func(*this); unsigned top_size = this->effective_top_block_size(); for_each_nzblock(blocks_, top_size, zero_func); } } /*! Replaces all blocks with ALL_ONE block. */ void set_all_one() { block_one_func func(*this); for_each_block(blocks_, top_block_size_, bm::set_array_size, func); } /** Places new block into descriptors table, returns old block's address. NOTE:Old block is not deleted. */ bm::word_t* set_block(unsigned nb, bm::word_t* block) { register unsigned nblk_blk = nb >> bm::set_array_shift; // auto-resize the top block array if (nblk_blk >= top_block_size_) reserve_top_blocks(nblk_blk + 1); if (nblk_blk >= effective_top_block_size_) effective_top_block_size_ = nblk_blk + 1; // If first level array not yet allocated, allocate it and // assign block to it if (blocks_[nblk_blk] == 0) { blocks_[nblk_blk] = (bm::word_t**)alloc_.alloc_ptr(); ::memset(blocks_[nblk_blk], 0, bm::set_array_size * sizeof(bm::word_t*)); } // NOTE: block will be replaced without freeing unsigned j = nb & bm::set_array_mask; bm::word_t* old_block = blocks_[nblk_blk][j]; blocks_[nblk_blk][j] = block; return old_block; } /** Allocate an place new GAP block (copy of provided block) */ bm::word_t* set_gap_block(unsigned nb, const gap_word_t* gap_block_src, int level) { if (level == -1) { bm::word_t* blk = get_allocator().alloc_bit_block(); set_block(nb, blk); gap_convert_to_bitset(blk, gap_block_src); return blk; } else { gap_word_t* gap_blk = get_allocator().alloc_gap_block( level, this->glen()); gap_word_t* gap_blk_ptr = BMGAP_PTR(gap_blk); ::memcpy(gap_blk_ptr, gap_block_src, gap_length(gap_block_src) * sizeof(gap_word_t)); set_gap_level(gap_blk_ptr, level); set_block(nb, (bm::word_t*)gap_blk, true /*GAP*/); return (bm::word_t*)gap_blk; } } /** Places new block into descriptors table, returns old block's address. Old block is not deleted. */ bm::word_t* set_block(unsigned nb, bm::word_t* block, bool gap) { if (block) { block = (bm::word_t*) (gap ? BMPTR_SETBIT0(block) : BMPTR_CLEARBIT0(block)); } // top block index register unsigned nblk_blk = nb >> bm::set_array_shift; // auto-resize the top block array if (nblk_blk >= top_block_size_) reserve_top_blocks(nblk_blk + 1); if (nblk_blk >= effective_top_block_size_) effective_top_block_size_ = nblk_blk + 1; // If first level array not yet allocated, allocate it and // assign block to it if (blocks_[nblk_blk] == 0) { blocks_[nblk_blk] = (bm::word_t**)alloc_.alloc_ptr(); ::memset(blocks_[nblk_blk], 0, bm::set_array_size * sizeof(bm::word_t*)); } // NOTE: block will be replaced without freeing unsigned j = nb & bm::set_array_mask; bm::word_t* old_block = blocks_[nblk_blk][j]; blocks_[nblk_blk][j] = block; return old_block; } /** Places new block into blocks table. */ void set_block_ptr(unsigned nb, bm::word_t* block) { BM_ASSERT((nb >> bm::set_array_shift) < effective_top_block_size_); blocks_[nb >> bm::set_array_shift][nb & bm::set_array_mask] = block; } /** \brief Converts block from type gap to conventional bitset block. \param nb - Block's index. \param gap_block - Pointer to the gap block, if NULL block nb will be taken \param gap_len - GAP block length (optional) \return new bit block's memory */ bm::word_t* convert_gap2bitset(unsigned nb, const gap_word_t* gap_block=0, unsigned gap_len=0) { bm::word_t* block = this->get_block(nb); if (gap_block == 0) { gap_block = BMGAP_PTR(block); } BM_ASSERT(IS_VALID_ADDR((bm::word_t*)gap_block)); bm::word_t* new_block = alloc_.alloc_bit_block(); gap_convert_to_bitset_l(new_block, gap_block, gap_len); // new block will replace the old one(no deletion) //set_block_ptr(nb, new_block); if (block) { set_block_ptr(nb, new_block); alloc_.free_gap_block(BMGAP_PTR(block), glen()); } else { set_block(nb, new_block); } return new_block; } /** Make sure block turns into true bit-block if it is GAP or a full block */ bm::word_t* deoptimize_block(unsigned nb) { bm::word_t* block = this->get_block(nb); if (BM_IS_GAP(block)) { return convert_gap2bitset(nb); } if (IS_FULL_BLOCK(block)) { bm::word_t* new_block = get_allocator().alloc_bit_block(); bit_block_copy(new_block, block); set_block(nb, new_block); return new_block; } return block; } /** Free block, make it zero pointer in the tree */ bm::word_t* zero_block(unsigned nb) { bm::word_t* block = this->get_block(nb); if (!block) return block; free_block(block); set_block(nb, 0); return 0; } /** Free block, make it zero pointer in the tree */ bm::word_t* zero_block(unsigned i, unsigned j) { bm::word_t** blk_blk = blocks_[i]; bm::word_t* block = blk_blk[j]; blk_blk[j] = 0; free_block(block); return 0; } /** Count number of bits ON in the block */ bm::id_t block_bitcount(const bm::word_t* block) const { if (!block) return 0; id_t count; if (BM_IS_GAP(block)) { count = gap_bit_count(BMGAP_PTR(block)); } else // bitset { count = (IS_FULL_BLOCK(block)) ? bm::bits_in_block : bit_block_calc_count(block, block + bm::set_block_size); } return count; } /** \brief Extends GAP block to the next level or converts it to bit block. \param nb - Block's linear index. \param blk - Blocks's pointer \return new GAP block pointer or NULL if block type mutated */ bm::gap_word_t* extend_gap_block(unsigned nb, gap_word_t* blk) { unsigned level = bm::gap_level(blk); unsigned len = bm::gap_length(blk); if (level == bm::gap_max_level || len >= gap_max_buff_len) { convert_gap2bitset(nb); } else { bm::gap_word_t* new_gap_blk = allocate_gap_block(++level, blk); bm::word_t* new_blk = (bm::word_t*)new_gap_blk; BMSET_PTRGAP(new_blk); set_block_ptr(nb, new_blk); alloc_.free_gap_block(blk, glen()); return new_gap_blk; } return 0; } bool is_block_gap(unsigned nb) const { bm::word_t* block = get_block(nb); return BMPTR_TESTBIT0(block) != 0; } void set_block_bit(unsigned nb) { bm::word_t* block = get_block(nb); block = (bm::word_t*) BMPTR_CLEARBIT0(block); set_block_ptr(nb, block); } void set_block_gap(unsigned nb) { bm::word_t* block = get_block(nb); block = (bm::word_t*)BMPTR_SETBIT0(block); set_block_ptr(nb, block); } /** \fn bool bm::bvector::blocks_manager::is_block_zero(unsigned nb, bm::word_t* blk) \brief Checks all conditions and returns true if block consists of only 0 bits \param nb - Block's linear index. \param blk - Blocks's pointer \param deep_scan - flag to do full bit block verification (scan) when deep scan is not requested result can be approximate \returns true if all bits are in the block are 0. */ bool is_block_zero(unsigned nb, const bm::word_t* blk, bool deep_scan = true) const { if (blk == 0) return true; if (BM_IS_GAP(blk)) { gap_word_t* b = BMGAP_PTR(blk); return gap_is_all_zero(b, bm::gap_max_bits); } if (!deep_scan) return false; // block exists - presume it has bits // BIT for (unsigned i = 0; i < bm::set_block_size; ++i) { if (blk[i] != 0) return false; } return true; } /** \brief Checks if block has only 1 bits \param nb - Index of the block. \param blk - Block's pointer \param deep_scan - flag to do full bit block verification (scan) when deep scan is not requested result can be approximate \return true if block consists of 1 bits. */ bool is_block_one(unsigned nb, const bm::word_t* blk, bool deep_scan = true) const { if (blk == 0) return false; if (BM_IS_GAP(blk)) { gap_word_t* b = BMGAP_PTR(blk); return gap_is_all_one(b, bm::gap_max_bits); } // BIT block if (IS_FULL_BLOCK(blk)) { return true; } if (!deep_scan) return false; // block exists - presume it has 0 bits return is_bits_one((wordop_t*)blk, (wordop_t*)(blk + bm::set_block_size)); } /*! Returns temporary block, allocates if needed. */ bm::word_t* check_allocate_tempblock() { return temp_block_ ? temp_block_ : (temp_block_ = alloc_.alloc_bit_block()); } /*! Assigns new GAP lengths vector */ void set_glen(const gap_word_t* glevel_len) { ::memcpy(glevel_len_, glevel_len, sizeof(glevel_len_)); } bm::gap_word_t* allocate_gap_block(unsigned level, const gap_word_t* src = 0, const gap_word_t* glevel_len = 0) { if (!glevel_len) glevel_len = glevel_len_; gap_word_t* ptr = alloc_.alloc_gap_block(level, glevel_len); if (src) { unsigned len = gap_length(src); ::memcpy(ptr, src, len * sizeof(gap_word_t)); // Reconstruct the mask word using the new level code. *ptr = (gap_word_t)(((len-1) << 3) | (level << 1) | (*src & 1)); } else { *ptr = (gap_word_t)(level << 1); } return ptr; } unsigned mem_used() const { unsigned mem_used = sizeof(*this); mem_used += temp_block_ ? sizeof(word_t) * bm::set_block_size : 0; mem_used += sizeof(bm::word_t**) * top_block_size_; for (unsigned i = 0; i < top_block_size_; ++i) { mem_used += blocks_[i] ? sizeof(void*) * bm::set_array_size : 0; } return mem_used; } /** Returns true if second level block pointer is 0. */ bool is_subblock_null(unsigned nsub) const { return blocks_[nsub] == NULL; } bm::word_t*** blocks_root() { return blocks_; } /*! \brief Returns current GAP level vector */ const gap_word_t* glen() const { return glevel_len_; } /*! \brief Returns GAP level length for specified level \param level - level number */ unsigned glen(unsigned level) const { return glevel_len_[level]; } /*! \brief Swaps content \param bm another blocks manager */ void swap(blocks_manager& bm) { BM_ASSERT(this != &bm); word_t*** btmp = blocks_; blocks_ = bm.blocks_; bm.blocks_ = btmp; xor_swap(this->top_block_size_, bm.top_block_size_); xor_swap(this->effective_top_block_size_, bm.effective_top_block_size_); BM_ASSERT(sizeof(glevel_len_) / sizeof(glevel_len_[0]) == bm::gap_levels); // paranoiya check for (unsigned i = 0; i < bm::gap_levels; ++i) { xor_swap(glevel_len_[i], bm.glevel_len_[i]); } } /*! \brief Returns size of the top block array in the tree */ unsigned top_block_size() const { return top_block_size_; } /*! \brief Returns effective size of the top block array in the tree Effective size excludes NULL pointers at the top descriptor end */ unsigned effective_top_block_size() const { return effective_top_block_size_; } /** \brief reserve capacity for specified number of bits */ void reserve(unsigned max_bits) { if (max_bits) { unsigned b = compute_top_block_size(max_bits); reserve_top_blocks(b); } } /*! \brief Make sure blocks manager has enough blocks capacity */ void reserve_top_blocks(unsigned top_blocks) { BM_ASSERT(top_blocks <= bm::set_array_size); if (top_blocks <= top_block_size_) return; // nothing to do bm::word_t*** new_blocks = (bm::word_t***)alloc_.alloc_ptr(top_blocks); for (unsigned i = 0; i < top_block_size_; ++i) { new_blocks[i] = blocks_[i]; } for (unsigned j = top_block_size_; j < top_blocks; ++j) { new_blocks[j] = 0; } alloc_.free_ptr(blocks_, top_block_size_); blocks_ = new_blocks; top_block_size_ = top_blocks; } /** \brief Returns reference on the allocator */ allocator_type& get_allocator() { return alloc_; } /** \brief Returns allocator */ allocator_type get_allocator() const { return alloc_; } private: void operator =(const blocks_manager&); void deinit_tree() { if (blocks_ == 0) return; unsigned top_size = this->effective_top_block_size(); block_free_func free_func(*this); for_each_nzblock2(blocks_, top_size, free_func); free_top_block(); alloc_.free_ptr(blocks_, top_block_size_); blocks_ = 0; } void free_top_block() { for(unsigned i = 0; i < top_block_size_; ++i) { bm::word_t** blk_blk = blocks_[i]; if (blk_blk) { alloc_.free_ptr(blk_blk); blocks_[i] = 0; } } } /// allocate first level of descr. of blocks void init_tree() { if (top_block_size_) { blocks_ = (bm::word_t***) alloc_.alloc_ptr(top_block_size_); ::memset(blocks_, 0, top_block_size_ * sizeof(bm::word_t**)); } else { blocks_ = 0; } effective_top_block_size_ = 1; } private: /// Tree of blocks. bm::word_t*** blocks_; /// Size of the top level block array in blocks_ tree unsigned top_block_size_; /// Effective size of the top level block array in blocks_ tree unsigned effective_top_block_size_; /// Temp block. bm::word_t* temp_block_; /// vector defines gap block lengths for different levels gap_word_t glevel_len_[bm::gap_levels]; /// allocator allocator_type alloc_; }; /** Bit block buffer guard \internal */ template class bit_block_guard { public: bit_block_guard(BlocksManager& bman, bm::word_t* blk=0) : bman_(bman), block_(blk) {} ~bit_block_guard() { bman_.get_allocator().free_bit_block(block_, 3); } void attach(bm::word_t* blk) { bman_.get_allocator().free_bit_block(block_); block_ = blk; } bm::word_t* allocate() { attach(bman_.get_allocator().alloc_bit_block(3)); return block_; } bm::word_t* get() { return block_; } private: bit_block_guard(const bit_block_guard&); bit_block_guard& operator=(const bit_block_guard&); private: BlocksManager& bman_; bm::word_t* block_; }; } #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmfunc.h0000644000175000017500000036607311365120467012446 0ustar tlktlk#ifndef BMFUNC__H__INCLUDED__ #define BMFUNC__H__INCLUDED__ /* Copyright(c) 2002-2010 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include #include "bmdef.h" #include "bmutil.h" #ifdef _MSC_VER # pragma warning( disable: 4146 ) #endif namespace bm { /*! @brief Structure with statistical information about bitset's memory allocation details. @ingroup bvector */ struct bv_statistics { /// Number of bit blocks. unsigned bit_blocks; /// Number of GAP blocks. unsigned gap_blocks; /// Estimated maximum of memory required for serialization. unsigned max_serialize_mem; /// Memory used by bitvector including temp and service blocks unsigned memory_used; /// Array of all GAP block lengths in the bvector. gap_word_t gap_length[bm::set_total_blocks]; /// GAP lengths used by bvector gap_word_t gap_levels[bm::gap_levels]; /// cound bit block void add_bit_block() { ++bit_blocks; unsigned mem_used = sizeof(bm::word_t) * bm::set_block_size; memory_used += mem_used; max_serialize_mem += mem_used; } /// count gap block void add_gap_block(unsigned capacity, unsigned length) { ++gap_blocks; unsigned mem_used = capacity * sizeof(gap_word_t); memory_used += mem_used; max_serialize_mem += length * sizeof(gap_word_t); } }; /*! @defgroup gapfunc GAP functions * GAP functions implement different opereations on GAP compressed blocks * and serve as a minimal building blocks. * @ingroup bmagic * */ /*! @defgroup bitfunc BIT functions * Bit functions implement different opereations on bit blocks * and serve as a minimal building blocks. * @ingroup bmagic */ /*! @brief Default GAP lengths table. @ingroup gapfunc */ template struct gap_len_table { static const gap_word_t _len[bm::gap_levels]; }; template const gap_word_t gap_len_table::_len[bm::gap_levels] = { 128, 256, 512, bm::gap_max_buff_len }; /*! @brief Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. @ingroup gapfunc */ template struct gap_len_table_min { static const gap_word_t _len[bm::gap_levels]; }; template const gap_word_t gap_len_table_min::_len[bm::gap_levels] = { 32, 96, 128, 512 }; //--------------------------------------------------------------------- /** Structure keeps all-left/right ON bits masks. @ingroup bitfunc */ template struct block_set_table { static const unsigned _left[32]; static const unsigned _right[32]; }; template const unsigned block_set_table::_left[32] = { 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff, 0xffff, 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff }; template const unsigned block_set_table::_right[32] = { 0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, 0xffffff00, 0xfffffe00, 0xfffffc00, 0xfffff800, 0xfffff000, 0xffffe000, 0xffffc000, 0xffff8000, 0xffff0000, 0xfffe0000, 0xfffc0000, 0xfff80000, 0xfff00000, 0xffe00000, 0xffc00000, 0xff800000, 0xff000000, 0xfe000000, 0xfc000000, 0xf8000000, 0xf0000000, 0xe0000000, 0xc0000000, 0x80000000 }; /*! Returns bit count @ingroup bitfunc */ BMFORCEINLINE bm::id_t word_bitcount(bm::id_t w) { #ifdef BMSSE4OPT return _mm_popcnt_u32(w); #else return bm::bit_count_table::_count[(unsigned char)(w)] + bm::bit_count_table::_count[(unsigned char)((w) >> 8)] + bm::bit_count_table::_count[(unsigned char)((w) >> 16)] + bm::bit_count_table::_count[(unsigned char)((w) >> 24)]; #endif } inline int parallel_popcnt_32(unsigned int n) { unsigned int tmp; tmp = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111); return ((tmp + (tmp >> 3)) & 030707070707) % 63; } #ifdef BM64OPT /*! Function calculates number of 1 bits in 64-bit word. @ingroup bitfunc */ inline int word_bitcount64(bm::id64_t x) { x = x - ((x >> 1) & 0x5555555555555555); x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333); x = (x + (x >> 4)) & 0x0F0F0F0F0F0F0F0F; x = x + (x >> 8); x = x + (x >> 16); x = x + (x >> 32); return x & 0xFF; } inline unsigned bitcount64_4way(bm::id64_t x, bm::id64_t y, bm::id64_t u, bm::id64_t v) { const bm::id64_t m1 = 0x5555555555555555; const bm::id64_t m2 = 0x3333333333333333; const bm::id64_t m3 = 0x0F0F0F0F0F0F0F0F; const bm::id64_t m4 = 0x000000FF000000FF; x = x - ((x >> 1) & m1); y = y - ((y >> 1) & m1); u = u - ((u >> 1) & m1); v = v - ((v >> 1) & m1); x = (x & m2) + ((x >> 2) & m2); y = (y & m2) + ((y >> 2) & m2); u = (u & m2) + ((u >> 2) & m2); v = (v & m2) + ((v >> 2) & m2); x = x + y; u = u + v; x = (x & m3) + ((x >> 4) & m3); u = (u & m3) + ((u >> 4) & m3); x = x + u; x = x + (x >> 8); x = x + (x >> 16); x = x & m4; x = x + (x >> 32); return x & 0x000001FF; } #endif //--------------------------------------------------------------------- /** Nomenclature of set operations */ enum set_operation { set_AND = 0, set_OR = 1, set_SUB = 2, set_XOR = 3, set_ASSIGN = 4, set_COUNT = 5, set_COUNT_AND = 6, set_COUNT_XOR = 7, set_COUNT_OR = 8, set_COUNT_SUB_AB= 9, set_COUNT_SUB_BA= 10, set_COUNT_A = 11, set_COUNT_B = 12, set_END }; /// Returns true if set operation is constant (bitcount) inline bool is_const_set_operation(set_operation op) { return (int(op) >= int(set_COUNT)); } /** Bit operations enumeration. */ enum operation { BM_AND = set_AND, BM_OR = set_OR, BM_SUB = set_SUB, BM_XOR = set_XOR }; /** Convert set operation to operation */ inline bm::operation setop2op(bm::set_operation op) { BM_ASSERT(op == set_AND || op == set_OR || op == set_SUB || op == set_XOR); return (bm::operation) op; } //--------------------------------------------------------------------- /** Structure carries pointer on bit block with all bits 1 @ingroup bitfunc */ template struct all_set { struct BM_ALIGN16 all_set_block { bm::word_t _p[bm::set_block_size] BM_ALIGN16ATTR; all_set_block() { ::memset(_p, 0xFF, sizeof(_p)); } }; static all_set_block _block; }; template typename all_set::all_set_block all_set::_block; /// XOR swap two scalar variables template void xor_swap(W& x, W& y) { BM_ASSERT(&x != &y); x ^= y; y ^= x; x ^= y; } //--------------------------------------------------------------------- /*! \brief Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes. \param buf1 - First word. \param buf2 - Second word. \return <0 - less, =0 - equal, >0 - greater. @ingroup bitfunc */ template int wordcmp0(T w1, T w2) { while (w1 != w2) { int res = (w1 & 1) - (w2 & 1); if (res != 0) return res; w1 >>= 1; w2 >>= 1; } return 0; } /*! \brief Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes. \param buf1 - First word. \param buf2 - Second word. \return <0 - less, =0 - equal, >0 - greater. @ingroup bitfunc */ /* template int wordcmp(T w1, T w2) { T diff = w1 ^ w2; return diff ? ((w1 & diff & (diff ^ (diff - 1)))? 1 : -1) : 0; } */ template int wordcmp(T a, T b) { T diff = a ^ b; return diff? ( (a & diff & -diff)? 1 : -1 ) : 0; } // Low bit extraction // x & (x ^ (x-1)) /** Internal structure. Copyright information. */ template struct _copyright { static const char _p[]; }; template const char _copyright::_p[] = "BitMagic C++ Library. v.3.7.0 (c) 2002-2010 Anatoliy Kuznetsov."; /*! \brief Byte orders recognized by the library. */ enum ByteOrder { BigEndian = 0, LittleEndian = 1 }; /** Internal structure. Different global settings. */ template struct globals { struct bo { ByteOrder _byte_order; bo() { unsigned x; unsigned char *s = (unsigned char *)&x; s[0] = 1; s[1] = 2; s[2] = 3; s[3] = 4; if(x == 0x04030201) { _byte_order = LittleEndian; return; } if(x == 0x01020304) { _byte_order = BigEndian; return; } BM_ASSERT(0); // "Invalid Byte Order\n" _byte_order = LittleEndian; } }; static bo _bo; static ByteOrder byte_order() { return _bo._byte_order; } }; template typename globals::bo globals::_bo; /* \brief Binary search for the block where bit = pos located. \param buf - GAP buffer pointer. \param pos - index of the element. \param is_set - output. GAP value (0 or 1). \return GAP index. @ingroup gapfunc */ template unsigned gap_bfind(const T* buf, unsigned pos, unsigned* is_set) { BM_ASSERT(pos < bm::gap_max_bits); *is_set = (*buf) & 1; register unsigned start = 1; register unsigned end = 1 + ((*buf) >> 3); while ( start != end ) { unsigned curr = (start + end) >> 1; if ( buf[curr] < pos ) start = curr + 1; else end = curr; } *is_set ^= ((start-1) & 1); return start; } /*! \brief Tests if bit = pos is true. \param buf - GAP buffer pointer. \param pos - index of the element. \return true if position is in "1" gap @ingroup gapfunc */ template unsigned gap_test(const T* buf, unsigned pos) { BM_ASSERT(pos < bm::gap_max_bits); unsigned start = 1; unsigned end = 1 + ((*buf) >> 3); if (end - start < 10) { unsigned sv = *buf & 1; unsigned sv1= sv ^ 1; if (buf[1] >= pos) return sv; if (buf[2] >= pos) return sv1; if (buf[3] >= pos) return sv; if (buf[4] >= pos) return sv1; if (buf[5] >= pos) return sv; if (buf[6] >= pos) return sv1; if (buf[7] >= pos) return sv; if (buf[8] >= pos) return sv1; if (buf[9] >= pos) return sv; BM_ASSERT(0); } else while ( start != end ) { unsigned curr = (start + end) >> 1; if ( buf[curr] < pos ) start = curr + 1; else end = curr; } return ((*buf) & 1) ^ ((--start) & 1); } /*! For each non-zero block executes supplied function. */ template void for_each_nzblock(T*** root, unsigned size1, //unsigned size2, F& f) { for (unsigned i = 0; i < size1; ++i) { T** blk_blk = root[i]; if (!blk_blk) { f.on_empty_top(i); continue; } unsigned non_empty_top = 0; unsigned r = i * bm::set_array_size; for (unsigned j = 0;j < bm::set_array_size; ++j) { if (blk_blk[j]) { f(blk_blk[j], r + j); non_empty_top += (blk_blk[j] != 0);// re-check for mutation } else { f.on_empty_block(r + j); } } // for j if (non_empty_top == 0) { f.on_empty_top(i); } } // for i } /*! For each non-zero block executes supplied function. */ template void for_each_nzblock2(T*** root, unsigned size1, F& f) { for (unsigned i = 0; i < size1; ++i) { T** blk_blk; if ((blk_blk = root[i])!=0) { unsigned j = 0; do { if (blk_blk[j]) f(blk_blk[j]); if (blk_blk[j+1]) f(blk_blk[j+1]); if (blk_blk[j+2]) f(blk_blk[j+2]); if (blk_blk[j+3]) f(blk_blk[j+3]); j += 4; } while (j < bm::set_array_size); } } // for i } /*! For each non-zero block executes supplied function-predicate. Function returns if function-predicate returns true */ template bool for_each_nzblock_if(T*** root, unsigned size1, F& f) { unsigned block_idx = 0; for (unsigned i = 0; i < size1; ++i) { T** blk_blk = root[i]; if (!blk_blk) { block_idx += bm::set_array_size; continue; } for (unsigned j = 0;j < bm::set_array_size; ++j, ++block_idx) { if (blk_blk[j]) if (f(blk_blk[j], block_idx)) return true; } } return false; } /*! For each block executes supplied function. */ template void for_each_block(T*** root, unsigned size1, F& f) { unsigned block_idx = 0; for (unsigned i = 0; i < size1; ++i) { T** blk_blk = root[i]; if (blk_blk) { for (unsigned j = 0;j < bm::set_array_size; ++j, ++block_idx) { f(blk_blk[j], block_idx); } } else { for (unsigned j = 0;j < bm::set_array_size; ++j, ++block_idx) { f(0, block_idx); } } } } /*! Special BM optimized analog of STL for_each */ template F bmfor_each(T first, T last, F f) { do { f(*first); ++first; } while (first < last); return f; } /*! Computes SUM of all elements of the sequence */ template T sum_arr(T* first, T* last) { T sum = 0; while (first < last) { sum += *first; ++first; } return sum; } /*! \brief Calculates number of bits ON in GAP buffer. \param buf - GAP buffer pointer. \param dsize - buffer size \return Number of non-zero bits. @ingroup gapfunc */ template unsigned gap_bit_count(const T* buf, unsigned dsize=0) { register const T* pcurr = buf; if (dsize == 0) dsize = (*pcurr >> 3); register const T* pend = pcurr + dsize; register unsigned bits_counter = 0; ++pcurr; if (*buf & 1) { bits_counter += *pcurr + 1; ++pcurr; } ++pcurr; // set GAP to 1 while (pcurr <= pend) { bits_counter += *pcurr - *(pcurr-1); pcurr += 2; // jump to the next positive GAP } return bits_counter; } /*! \brief Counts 1 bits in GAP buffer in the closed [left, right] diapason. \param buf - GAP buffer pointer. \param left - leftmost bit index to start from \param right- rightmost bit index \return Number of non-zero bits. */ template unsigned gap_bit_count_range(const T* buf, T left, T right) { BM_ASSERT(left <= right); const T* pcurr = buf; const T* pend = pcurr + (*pcurr >> 3); unsigned bits_counter = 0; unsigned is_set; unsigned start_pos = gap_bfind(buf, left, &is_set); pcurr = buf + start_pos; if (right <= *pcurr) // we are in the target block right now { if (is_set) bits_counter = (right - left + 1); return bits_counter; } if (is_set) bits_counter += *pcurr - left + 1; unsigned prev_gap = *pcurr++; is_set ^= 1; while (right > *pcurr) { if (is_set) bits_counter += *pcurr - prev_gap; if (pcurr == pend) return bits_counter; prev_gap = *pcurr++; is_set ^= 1; } if (is_set) bits_counter += right - prev_gap; return bits_counter; } /*! D-GAP block for_each algorithm D-Gap Functor is called for each element but last one. \param gap_buf - GAP buffer */ template void for_each_dgap(const T* gap_buf, Func& func) { const T* pcurr = gap_buf; const T* pend = pcurr + (*pcurr >> 3); ++pcurr; T prev = *pcurr; func(prev + 1); // first element incremented to avoid 0 ++pcurr; do { func(*pcurr - prev); // all others are [N] - [N-1] prev = *pcurr; } while (++pcurr < pend); } /** d-Gap copy functor @internal */ template struct d_copy_func { d_copy_func(T* dg_buf) : dgap_buf_(dg_buf) {} void operator()(T dgap) { *dgap_buf_++ = dgap; } T* dgap_buf_; }; /*! \brief Convert GAP buffer into D-GAP buffer Delta GAP representation is DGAP[N] = GAP[N] - GAP[N-1] \param gap_buf - GAP buffer \param dgap_buf - Delta-GAP buffer \param copy_head - flag to copy GAP header \internal @ingroup gapfunc */ template T* gap_2_dgap(const T* gap_buf, T* dgap_buf, bool copy_head=true) { if (copy_head) // copy GAP header { *dgap_buf++ = *gap_buf; } d_copy_func copy_func(dgap_buf); for_each_dgap >(gap_buf, copy_func); return copy_func.dgap_buf_; } /*! \brief Convert D-GAP buffer into GAP buffer GAP representation is GAP[N] = DGAP[N] + DGAP[N-1] \param dgap_buf - Delta-GAP buffer \param gap_buf - GAP buffer \internal @ingroup gapfunc */ template void dgap_2_gap(const T* dgap_buf, T* gap_buf, T gap_header=0) { const T* pcurr = dgap_buf; unsigned len; if (!gap_header) // GAP header is already part of the stream { len = *pcurr >> 3; *gap_buf++ = *pcurr++; // copy GAP header } else // GAP header passed as a parameter { len = gap_header >> 3; *gap_buf++ = gap_header; // assign GAP header } --len; // last element is actually not encoded register const T* pend = pcurr + len; *gap_buf = *pcurr++; // copy first element if (*gap_buf == 0) *gap_buf = 65535; // fix +1 overflow else *gap_buf = *gap_buf - 1; for (++gap_buf; pcurr < pend; ++pcurr) { T prev = *(gap_buf-1); // don't remove temp(undef expression!) *gap_buf++ = *pcurr + prev; } *gap_buf = 65535; // add missing last element } /*! \brief Lexicographical comparison of GAP buffers. \param buf1 - First GAP buffer pointer. \param buf2 - Second GAP buffer pointer. \return <0 - less, =0 - equal, >0 - greater. @ingroup gapfunc */ template int gapcmp(const T* buf1, const T* buf2) { const T* pcurr1 = buf1; const T* pend1 = pcurr1 + (*pcurr1 >> 3); unsigned bitval1 = *buf1 & 1; ++pcurr1; const T* pcurr2 = buf2; unsigned bitval2 = *buf2 & 1; ++pcurr2; while (pcurr1 <= pend1) { if (*pcurr1 == *pcurr2) { if (bitval1 != bitval2) { return (bitval1) ? 1 : -1; } } else { if (bitval1 == bitval2) { if (bitval1) { return (*pcurr1 < *pcurr2) ? -1 : 1; } else { return (*pcurr1 < *pcurr2) ? 1 : -1; } } else { return (bitval1) ? 1 : -1; } } ++pcurr1; ++pcurr2; bitval1 ^= 1; bitval2 ^= 1; } return 0; } /*! \brief Abstract operation for GAP buffers. Receives functor F as a template argument \param dest - destination memory buffer. \param vect1 - operand 1 GAP encoded buffer. \param vect1_mask - XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector) \param vect2 - operand 2 GAP encoded buffer. \param vect2_mask - same as vect1_mask \param f - operation functor. \param dlen - destination length after the operation \note Internal function. @internal @ingroup gapfunc */ template void gap_buff_op(T* BMRESTRICT dest, const T* BMRESTRICT vect1, unsigned vect1_mask, const T* BMRESTRICT vect2, unsigned vect2_mask, F& f, unsigned& dlen) { register const T* cur1 = vect1; register const T* cur2 = vect2; T bitval1 = (T)((*cur1++ & 1) ^ vect1_mask); T bitval2 = (T)((*cur2++ & 1) ^ vect2_mask); T bitval = (T) f(bitval1, bitval2); T bitval_prev = bitval; register T* res = dest; *res = bitval; ++res; while (1) { bitval = (T) f(bitval1, bitval2); // Check if GAP value changes and we need to // start the next one. if (bitval != bitval_prev) { ++res; bitval_prev = bitval; } if (*cur1 < *cur2) { *res = *cur1; ++cur1; bitval1 ^= 1; } else // >= { *res = *cur2; if (*cur2 < *cur1) { bitval2 ^= 1; } else // equal { if (*cur2 == (bm::gap_max_bits - 1)) { break; } ++cur1; bitval1 ^= 1; bitval2 ^= 1; } ++cur2; } } // while dlen = (unsigned)(res - dest); *dest = (T)((*dest & 7) + (dlen << 3)); } /*! \brief Abstract distance test operation for GAP buffers. Receives functor F as a template argument \param vect1 - operand 1 GAP encoded buffer. \param vect1_mask - XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector) \param vect2 - operand 2 GAP encoded buffer. \param vect2_mask - same as vect1_mask \param f - operation functor. \note Internal function. \return non zero value if operation result returns any 1 bit @ingroup gapfunc */ template unsigned gap_buff_any_op(const T* BMRESTRICT vect1, unsigned vect1_mask, const T* BMRESTRICT vect2, unsigned vect2_mask, F f) { register const T* cur1 = vect1; register const T* cur2 = vect2; unsigned bitval1 = (*cur1++ & 1) ^ vect1_mask; unsigned bitval2 = (*cur2++ & 1) ^ vect2_mask; unsigned bitval = f(bitval1, bitval2); if (bitval) return bitval; unsigned bitval_prev = bitval; while (1) { bitval = f(bitval1, bitval2); if (bitval) return bitval; if (bitval != bitval_prev) bitval_prev = bitval; if (*cur1 < *cur2) { ++cur1; bitval1 ^= 1; } else // >= { if (*cur2 < *cur1) { bitval2 ^= 1; } else // equal { if (*cur2 == (bm::gap_max_bits - 1)) { break; } ++cur1; bitval1 ^= 1; bitval2 ^= 1; } ++cur2; } } // while return 0; } /*! \brief Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument \param vect1 - operand 1 GAP encoded buffer. \param vect2 - operand 2 GAP encoded buffer. \param f - operation functor. \note Internal function. @ingroup gapfunc */ template unsigned gap_buff_count_op(const T* vect1, const T* vect2, F f) { unsigned count;// = 0; const T* cur1 = vect1; const T* cur2 = vect2; unsigned bitval1 = (*cur1++ & 1); unsigned bitval2 = (*cur2++ & 1); unsigned bitval = count = f(bitval1, bitval2); unsigned bitval_prev = bitval; //if (bitval) ++count; T res, res_prev; res = res_prev = 0; while (1) { bitval = f(bitval1, bitval2); // Check if GAP value changes and we need to // start the next one. if (bitval != bitval_prev) { bitval_prev = bitval; res_prev = res; } if (*cur1 < *cur2) { res = *cur1; if (bitval) { count += res - res_prev; res_prev = res; } ++cur1; bitval1 ^= 1; } else // >= { res = *cur2; if (bitval) { count += res - res_prev; res_prev = res; } if (*cur2 < *cur1) { bitval2 ^= 1; } else // equal { if (*cur2 == (bm::gap_max_bits - 1)) { break; } ++cur1; bitval1 ^= 1; bitval2 ^= 1; } ++cur2; } } // while return count; } /*! \brief Sets or clears bit in the GAP buffer. \param val - new bit value \param buf - GAP buffer. \param pos - Index of bit to set. \param is_set - (OUT) flag if bit was actually set. \return New GAP buffer length. @ingroup gapfunc */ template unsigned gap_set_value(unsigned val, T* BMRESTRICT buf, unsigned pos, unsigned* BMRESTRICT is_set) { BM_ASSERT(pos < bm::gap_max_bits); unsigned curr = gap_bfind(buf, pos, is_set); register T end = (*buf >> 3); if (*is_set == val) { *is_set = 0; return end; } *is_set = 1; register T* pcurr = buf + curr; register T* pprev = pcurr - 1; register T* pend = buf + end; // Special case, first bit GAP operation. There is no platform beside it. // initial flag must be inverted. if (pos == 0) { *buf ^= 1; if ( buf[1] ) // We need to insert a 1 bit platform here. { ::memmove(&buf[2], &buf[1], (end - 1) * sizeof(gap_word_t)); buf[1] = 0; ++end; } else // Only 1 bit in the GAP. We need to delete the first GAP. { pprev = buf + 1; pcurr = pprev + 1; do { *pprev++ = *pcurr++; } while (pcurr < pend); --end; } } else if (curr > 1 && ((unsigned)(*pprev))+1 == pos) // Left border bit { ++(*pprev); if (*pprev == *pcurr) // Curr. GAP to be merged with prev.GAP. { --end; if (pcurr != pend) // GAP merge: 2 GAPS to be deleted { --end; ++pcurr; do { *pprev++ = *pcurr++; } while (pcurr < pend); } } } else if (*pcurr == pos) // Rightmost bit in the GAP. Border goes left. { --(*pcurr); if (pcurr == pend) { ++end; } } else // Worst case we need to split current block. { ::memmove(pcurr+2, pcurr,(end - curr + 1)*sizeof(T)); *pcurr++ = (T)(pos - 1); *pcurr = (T)pos; end+=2; } // Set correct length word. *buf = (*buf & 7) + (end << 3); buf[end] = bm::gap_max_bits - 1; return end; } /*! \brief Add new value to the end of GAP buffer. \param buf - GAP buffer. \param pos - Index of bit to set. \return New GAP buffer length. @ingroup gapfunc */ template unsigned gap_add_value(T* buf, T pos) { BM_ASSERT(pos < bm::gap_max_bits); register T end = (*buf >> 3); T curr = end; register T* pcurr = buf + end; register T* pend = pcurr; register T* pprev = pcurr - 1; // Special case, first bit GAP operation. There is no platform beside it. // initial flag must be inverted. if (pos == 0) { *buf ^= 1; if ( buf[1] ) // We need to insert a 1 bit platform here. { ::memmove(&buf[2], &buf[1], (end - 1) * sizeof(gap_word_t)); buf[1] = 0; ++end; } else // Only 1 bit in the GAP. We need to delete the first GAP. { pprev = buf + 1; pcurr = pprev + 1; do { *pprev++ = *pcurr++; } while (pcurr < pend); --end; } } else if (((unsigned)(*pprev))+1 == pos && (curr > 1) ) // Left border bit { ++(*pprev); if (*pprev == *pcurr) // Curr. GAP to be merged with prev.GAP. { --end; if (pcurr != pend) // GAP merge: 2 GAPS to be deleted { // TODO: should never get here... --end; ++pcurr; do { *pprev++ = *pcurr++; } while (pcurr < pend); } } } else if (*pcurr == pos) // Rightmost bit in the GAP. Border goes left. { --(*pcurr); if (pcurr == pend) { ++end; } } else // Worst case we need to split current block. { *pcurr++ = pos - 1; *pcurr = pos; end+=2; } // Set correct length word. *buf = (*buf & 7) + (end << 3); buf[end] = bm::gap_max_bits - 1; return end; } /*! \brief Convert array to GAP buffer. \param buf - GAP buffer. \param arr - array of values to set \param len - length of the array \return New GAP buffer length. @ingroup gapfunc */ template unsigned gap_set_array(T* buf, const T* arr, unsigned len) { *buf = (*buf & 6u) + (1u << 3); // gap header setup T* pcurr = buf + 1; unsigned i = 0; T curr = arr[i]; if (curr != 0) // need to add the first gap: (0 to arr[0]-1) { *pcurr = curr - 1; ++pcurr; } else { *buf += 1; // GAP starts with 1 } T prev = curr; T acc = prev; for (i = 1; i < len; ++i) { T curr = arr[i]; if (curr == prev + 1) { ++acc; prev = curr; } else { *pcurr++ = acc; acc = curr; *pcurr++ = curr-1; } prev = curr; } *pcurr = acc; if (acc != bm::gap_max_bits - 1) { ++pcurr; *pcurr = bm::gap_max_bits - 1; } unsigned end = pcurr - buf; *buf = (T)((*buf & 7) + (end << 3)); return end+1; } //------------------------------------------------------------------------ /** \brief Compute number of GAPs in bit-array \param arr - array of BITs \param len - array length @ingroup gapfunc */ template unsigned bit_array_compute_gaps(const T* arr, unsigned len) { unsigned gap_count = 1; T prev = arr[0]; if (prev > 0) ++gap_count; for (unsigned i = 1; i < len; ++i) { T curr = arr[i]; if (curr != prev + 1) { gap_count += 2; } prev = curr; } return gap_count; } //------------------------------------------------------------------------ /** \brief Searches for the next 1 bit in the GAP block \param buf - GAP buffer \param nbit - bit index to start checking from. \param prev - returns previously checked value @ingroup gapfunc */ template int gap_find_in_block(const T* buf, unsigned nbit, bm::id_t* prev) { BM_ASSERT(nbit < bm::gap_max_bits); unsigned bitval; unsigned gap_idx = bm::gap_bfind(buf, nbit, &bitval); if (bitval) // positive block. { return 1; } register unsigned val = buf[gap_idx] + 1; *prev += val - nbit; return (val != bm::gap_max_bits); // no bug here. } /*! \brief Set 1 bit in a block @ingroup bitfunc */ BMFORCEINLINE void set_bit(unsigned* dest, unsigned bitpos) { unsigned nbit = unsigned(bitpos & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; dest[nword] |= unsigned(1 << nbit); } /*! \brief Test 1 bit in a block @ingroup bitfunc */ BMFORCEINLINE unsigned test_bit(const unsigned* block, unsigned bitpos) { unsigned nbit = unsigned(bitpos & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; return (block[nword] >> nbit) & 1u; } /*! \brief Sets bits to 1 in the bitblock. \param dest - Bitset buffer. \param bitpos - Offset of the start bit. \param bitcount - number of bits to set. @ingroup bitfunc */ inline void or_bit_block(unsigned* dest, unsigned bitpos, unsigned bitcount) { unsigned nbit = unsigned(bitpos & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = dest + nword; if (bitcount == 1) // special case (only 1 bit to set) { *word |= unsigned(1 << nbit); return; } if (nbit) // starting position is not aligned { unsigned right_margin = nbit + bitcount; // here we checking if we setting bits only in the current // word. Example: 00111000000000000000000000000000 (32 bits word) if (right_margin < 32) { unsigned mask = block_set_table::_right[nbit] & block_set_table::_left[right_margin-1]; *word |= mask; return; // we are done } else { *word |= block_set_table::_right[nbit]; bitcount -= 32 - nbit; } ++word; } // now we are word aligned, lets find out how many words we // can now turn ON using loop for ( ;bitcount >= 32; bitcount -= 32) { *word++ = 0xffffffff; } if (bitcount) { *word |= block_set_table::_left[bitcount-1]; } } /*! \brief SUB (AND NOT) bit interval to 1 in the bitblock. \param dest - Bitset buffer. \param bitpos - Offset of the start bit. \param bitcount - number of bits to set. @ingroup bitfunc */ inline void sub_bit_block(unsigned* dest, unsigned bitpos, unsigned bitcount) { unsigned nbit = unsigned(bitpos & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = dest + nword; if (bitcount == 1) // special case (only 1 bit to set) { *word &= ~unsigned(1 << nbit); return; } if (nbit) // starting position is not aligned { unsigned right_margin = nbit + bitcount; // here we checking if we setting bits only in the current // word. Example: 00111000000000000000000000000000 (32 bits word) if (right_margin < 32) { unsigned mask = block_set_table::_right[nbit] & block_set_table::_left[right_margin-1]; *word &= ~mask; return; // we are done } else { *word &= ~block_set_table::_right[nbit]; bitcount -= 32 - nbit; } ++word; } // now we are word aligned, lets find out how many words we // can now turn ON using loop for ( ;bitcount >= 32; bitcount -= 32) { *word++ = 0; } if (bitcount) { *word &= ~block_set_table::_left[bitcount-1]; } } /*! \brief XOR bit interval to 1 in the bitblock. \param dest - Bitset buffer. \param bitpos - Offset of the start bit. \param bitcount - number of bits to set. @ingroup bitfunc */ inline void xor_bit_block(unsigned* dest, unsigned bitpos, unsigned bitcount) { unsigned nbit = unsigned(bitpos & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = dest + nword; if (bitcount == 1) // special case (only 1 bit to set) { *word ^= unsigned(1 << nbit); return; } if (nbit) // starting position is not aligned { unsigned right_margin = nbit + bitcount; // here we checking if we setting bits only in the current // word. Example: 00111000000000000000000000000000 (32 bits word) if (right_margin < 32) { unsigned mask = block_set_table::_right[nbit] & block_set_table::_left[right_margin-1]; *word ^= mask; return; // we are done } else { *word ^= block_set_table::_right[nbit]; bitcount -= 32 - nbit; } ++word; } // now we are word aligned, lets find out how many words we // can now turn ON using loop for ( ;bitcount >= 32; bitcount -= 32) { *word++ ^= 0xffffffff; } if (bitcount) { *word ^= block_set_table::_left[bitcount-1]; } } /*! \brief SUB (AND NOT) GAP block to bitblock. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_sub_to_bitset(unsigned* BMRESTRICT dest, const T* BMRESTRICT buf) { const T* pend = buf + (*buf >> 3); T b = *buf & 1; ++buf; if (b) // Starts with 1 { sub_bit_block(dest, 0, *buf + 1); ++buf; } for (++buf; buf <= pend; buf += 2) { T prev = *(buf-1); BM_ASSERT(*buf > prev); sub_bit_block(dest, prev + 1, *buf - prev); } } /*! \brief XOR GAP block to bitblock. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_xor_to_bitset(unsigned* BMRESTRICT dest, const T* BMRESTRICT buf) { const T* pend = buf + (*buf >> 3); T b = *buf & 1; ++buf; if (b) // Starts with 1 { xor_bit_block(dest, 0, *buf + 1); ++buf; } for (++buf; buf <= pend; buf += 2) { T prev = *(buf-1); BM_ASSERT(*buf > prev); xor_bit_block(dest, prev + 1, *buf - prev); } } /*! \brief Adds(OR) GAP block to bitblock. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. \param buf_len - GAP buffer length @ingroup gapfunc */ template void gap_add_to_bitset_l(unsigned* dest, const T* buf, unsigned buf_len) { BM_ASSERT(buf_len); register const T* pend = buf + buf_len; T b = *buf & 1; ++buf; if (b) // Starts with 1 { or_bit_block(dest, 0, *buf + 1); ++buf; } for (++buf; buf <= pend; buf += 2) { T prev = *(buf-1); BM_ASSERT(*buf > prev); or_bit_block(dest, prev + 1, *buf - prev); } } /*! \brief Adds(OR) GAP block to bitblock. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_add_to_bitset(unsigned* dest, const T* buf) { gap_add_to_bitset_l(dest, buf, *buf >> 3); } /*! \brief ANDs GAP block to bitblock. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_and_to_bitset(unsigned* dest, const T* buf) { register const T* pend = buf + (*buf >> 3); T b = *buf & 1; ++buf; if (!b ) // Starts with 0 { // Instead of AND we can SUB 0 gaps here sub_bit_block(dest, 0, *buf + 1); ++buf; } for (++buf; buf <= pend; buf += 2) { T prev = *(buf-1); BM_ASSERT(*buf > prev); sub_bit_block(dest, prev + 1, *buf - prev); } } /*! \brief Compute bitcount of bit block AND masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_and_count(const unsigned* block, const T* buf) { BM_ASSERT(block); const T* pcurr = buf; const T* pend = pcurr + (*pcurr >> 3); ++pcurr; bm::id_t count = 0; if (*buf & 1) // Starts with 1 { count += bit_block_calc_count_range(block, 0, *pcurr); ++pcurr; } ++pcurr; // now we are in GAP "1" again for (;pcurr <= pend; pcurr += 2) { count += bit_block_calc_count_range(block, *(pcurr-1)+1, *pcurr); } return count; } /*! \brief Bitcount test of bit block AND masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_and_any(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; bm::id_t count = 0; if (*buf & 1) // Starts with 1 { count += bit_block_any_range(block, 0, *pcurr); if (count) return count; ++pcurr; } ++pcurr; // now we are in GAP "1" again while (pcurr <= pend) { bm::id_t c = bit_block_any_range(block, *(pcurr-1)+1, *pcurr); count += c; if (count) break; pcurr += 2; } return count; } /*! \brief Compute bitcount of bit block SUB masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_sub_count(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; bm::id_t count = 0; if (!(*buf & 1)) // Starts with 0 { count += bit_block_calc_count_range(block, 0, *pcurr); ++pcurr; } ++pcurr; // now we are in GAP "0" again for (;pcurr <= pend; pcurr+=2) { count += bit_block_calc_count_range(block, *(pcurr-1)+1, *pcurr); } return count; } /*! \brief Compute bitcount test of bit block SUB masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_sub_any(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; bm::id_t count = 0; if (!(*buf & 1)) // Starts with 0 { count += bit_block_any_range(block, 0, *pcurr); if (count) return count; ++pcurr; } ++pcurr; // now we are in GAP "0" again for (;pcurr <= pend; pcurr+=2) { count += bit_block_any_range(block, *(pcurr-1)+1, *pcurr); if (count) return count; } return count; } /*! \brief Compute bitcount of bit block XOR masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_xor_count(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; unsigned bitval = *buf & 1; register bm::id_t count = bit_block_calc_count_range(block, 0, *pcurr); if (bitval) { count = *pcurr + 1 - count; } for (bitval^=1, ++pcurr; pcurr <= pend; bitval^=1, ++pcurr) { T prev = *(pcurr-1)+1; bm::id_t c = bit_block_calc_count_range(block, prev, *pcurr); if (bitval) // 1 gap; means Result = Total_Bits - BitCount; { c = (*pcurr - prev + 1) - c; } count += c; } return count; } /*! \brief Compute bitcount test of bit block XOR masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_xor_any(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; unsigned bitval = *buf & 1; register bm::id_t count = bit_block_any_range(block, 0, *pcurr); if (bitval) { count = *pcurr + 1 - count; } for (bitval^=1, ++pcurr; pcurr <= pend; bitval^=1, ++pcurr) { T prev = *(pcurr-1)+1; bm::id_t c = bit_block_any_range(block, prev, *pcurr); if (bitval) // 1 gap; means Result = Total_Bits - BitCount; { c = (*pcurr - prev + 1) - c; } count += c; if (count) return count; } return count; } /*! \brief Compute bitcount of bit block OR masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_or_count(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; unsigned bitval = *buf & 1; register bm::id_t count; if (bitval) { count = *pcurr + 1; } else { count = bit_block_calc_count_range(block, 0, *pcurr); } for (bitval^=1, ++pcurr; pcurr <= pend; bitval^=1, ++pcurr) { T prev = *(pcurr-1)+1; bm::id_t c; if (bitval) { c = (*pcurr - prev + 1); } else { c = bit_block_calc_count_range(block, prev, *pcurr); } count += c; } return count; } /*! \brief Compute bitcount test of bit block OR masked by GAP block. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc bitfunc */ template bm::id_t gap_bitset_or_any(const unsigned* block, const T* buf) { BM_ASSERT(block); register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; unsigned bitval = *buf & 1; register bm::id_t count; if (bitval) { count = *pcurr + 1; } else { count = bit_block_any_range(block, 0, *pcurr); } for (bitval^=1, ++pcurr; pcurr <= pend; bitval^=1, ++pcurr) { T prev = *(pcurr-1)+1; bm::id_t c; if (bitval) { c = (*pcurr - prev + 1); } else { c = bit_block_any_range(block, prev, *pcurr); } count += c; if (count) return count; } return count; } /*! \brief Bitblock memset operation. \param dst - destination block. \param value - value to set. @ingroup bitfunc */ inline void bit_block_set(bm::word_t* BMRESTRICT dst, bm::word_t value) { //#ifdef BMVECTOPT // VECT_SET_BLOCK(dst, dst + bm::set_block_size, value); //#else ::memset(dst, value, bm::set_block_size * sizeof(bm::word_t)); //#endif } /*! \brief GAP block to bitblock conversion. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_convert_to_bitset(unsigned* dest, const T* buf) { bit_block_set(dest, 0); gap_add_to_bitset(dest, buf); } /*! \brief GAP block to bitblock conversion. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_convert_to_bitset_l(unsigned* dest, const T* buf, unsigned buf_len) { bit_block_set(dest, 0); gap_add_to_bitset_l(dest, buf, buf_len ? buf_len : *buf >> 3); } /*! \brief GAP block to bitblock conversion. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. \param dest_size - length of the destination buffer. @ingroup gapfunc */ template void gap_convert_to_bitset(unsigned* dest, const T* buf, unsigned dest_len) { ::memset(dest, 0, dest_len * sizeof(unsigned)); gap_add_to_bitset(dest, buf); } /*! \brief Smart GAP block to bitblock conversion. Checks if GAP block is ALL-ZERO or ALL-ON. In those cases returns pointer on special static bitblocks. \param dest - bitblock buffer pointer. \param buf - GAP buffer pointer. \param set_max - max possible bitset length @ingroup gapfunc */ template unsigned* gap_convert_to_bitset_smart(unsigned* dest, const T* buf, id_t set_max) { if (buf[1] == set_max - 1) { return (buf[0] & 1) ? FULL_BLOCK_ADDR : 0; } gap_convert_to_bitset(dest, buf); return dest; } /*! \brief Calculates sum of all words in GAP block. (For debugging purposes) \note For debugging and testing ONLY. \param buf - GAP buffer pointer. \return Sum of all words. @ingroup gapfunc */ template unsigned gap_control_sum(const T* buf) { unsigned end = *buf >> 3; register const T* pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); ++pcurr; if (*buf & 1) // Starts with 1 { ++pcurr; } ++pcurr; // now we are in GAP "1" again while (pcurr <= pend) { BM_ASSERT(*pcurr > *(pcurr-1)); pcurr += 2; } return buf[end]; } /*! \brief Sets all bits to 0 or 1 (GAP) \param buf - GAP buffer pointer. \param set_max - max possible bitset length @ingroup gapfunc */ template void gap_set_all(T* buf, unsigned set_max, unsigned value) { BM_ASSERT(value == 0 || value == 1); *buf = (T)((*buf & 6u) + (1u << 3) + value); *(++buf) = (T)(set_max - 1); } /*! \brief Init gap block so it has block in it (can be whole block) \param buf - GAP buffer pointer. \param from - one block start \param to - one block end \param value - (block value)1 or 0 \param set_max - max possible bitset length @ingroup gapfunc */ template void gap_init_range_block(T* buf, T from, T to, T value, unsigned set_max) { BM_ASSERT(value == 0 || value == 1); unsigned gap_len; if (from == 0) { if (to == set_max - 1) { gap_set_all(buf, set_max, value); } else { gap_len = 2; buf[1] = to; buf[2] = (T)(set_max - 1); buf[0] = (T)((*buf & 6u) + (gap_len << 3) + value); } return; } // from != 0 value = !value; if (to == set_max - 1) { gap_len = 2; buf[1] = (T)(from - 1); buf[2] = (T)(set_max - 1); } else { gap_len = 3; buf[1] = from - 1; buf[2] = (T) to; buf[3] = (T)(set_max - 1); } buf[0] = (T)((*buf & 6u) + (gap_len << 3) + value); } /*! \brief Inverts all bits in the GAP buffer. \param buf - GAP buffer pointer. @ingroup gapfunc */ template void gap_invert(T* buf) { *buf ^= 1; } /*! \brief Temporary inverts all bits in the GAP buffer. In this function const-ness of the buffer means nothing. Calling this function again restores the status of the buffer. \param buf - GAP buffer pointer. (Buffer IS changed) @ingroup gapfunc */ /* template void gap_temp_invert(const T* buf) { T* buftmp = const_cast(buf); *buftmp ^= 1; } */ /*! \brief Checks if GAP block is all-zero. \param buf - GAP buffer pointer. \param set_max - max possible bitset length \returns true if all-zero. @ingroup gapfunc */ template bool gap_is_all_zero(const T* buf, unsigned set_max) { return (((*buf & 1)==0) && (*(++buf) == set_max - 1)); } /*! \brief Checks if GAP block is all-one. \param buf - GAP buffer pointer. \param set_max - max possible bitset length \returns true if all-one. @ingroup gapfunc */ template bool gap_is_all_one(const T* buf, unsigned set_max) { return ((*buf & 1) && (*(++buf) == set_max - 1)); } /*! \brief Returs GAP block length. \param buf - GAP buffer pointer. \returns GAP block length. @ingroup gapfunc */ template T gap_length(const T* buf) { return (*buf >> 3) + 1; } /*! \brief Returs GAP block capacity. \param buf - GAP buffer pointer. \returns GAP block capacity. @ingroup gapfunc */ template unsigned gap_capacity(const T* buf, const T* glevel_len) { return glevel_len[(*buf >> 1) & 3]; } /*! \brief Returs GAP block capacity limit. \param buf - GAP buffer pointer. \param glevel_len - GAP lengths table (gap_len_table) \returns GAP block limit. @ingroup gapfunc */ template unsigned gap_limit(const T* buf, const T* glevel_len) { return glevel_len[(*buf >> 1) & 3]-4; } /*! \brief Returs GAP blocks capacity level. \param buf - GAP buffer pointer. \returns GAP block capacity level. @ingroup gapfunc */ template unsigned gap_level(const T* buf) { return (*buf >> 1) & 3; } /*! \brief Sets GAP block capacity level. \param buf - GAP buffer pointer. \param level new GAP block capacity level. @ingroup gapfunc */ template void set_gap_level(T* buf, unsigned level) { BM_ASSERT(level < bm::gap_levels); *buf = ((level & 3) << 1) | (*buf & 1) | (*buf & ~7); } /*! \brief Calculates GAP block capacity level. \param len - GAP buffer length. \param glevel_len - GAP lengths table \return GAP block capacity level. -1 if block does not fit any level. @ingroup gapfunc */ template inline int gap_calc_level(int len, const T* glevel_len) { if (len <= (glevel_len[0]-4)) return 0; if (len <= (glevel_len[1]-4)) return 1; if (len <= (glevel_len[2]-4)) return 2; if (len <= (glevel_len[3]-4)) return 3; BM_ASSERT(bm::gap_levels == 4); return -1; } /*! @brief Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length. @param buf - GAP buffer pointer @parma glevel_len - GAP lengths table @return Number of free GAP elements @ingroup gapfunc */ template inline unsigned gap_free_elements(const T* buf, const T* glevel_len) { unsigned len = gap_length(buf); unsigned capacity = gap_capacity(buf, glevel_len); return capacity - len; } /*! \brief Lexicographical comparison of BIT buffers. \param buf1 - First buffer pointer. \param buf2 - Second buffer pointer. \param len - Buffer length in elements (T). \return <0 - less, =0 - equal, >0 - greater. @ingroup bitfunc */ template int bitcmp(const T* buf1, const T* buf2, unsigned len) { BM_ASSERT(len); const T* pend1 = buf1 + len; do { T w1 = *buf1++; T w2 = *buf2++; T diff = w1 ^ w2; if (diff) { return (w1 & diff & -diff) ? 1 : -1; } } while (buf1 < pend1); return 0; } /*! \brief Converts bit block to GAP. \param dest - Destinatio GAP buffer. \param src - Source bitblock buffer. \param bits - Number of bits to convert. \param dest_len - length of the dest. buffer. \return New length of GAP block or 0 if conversion failed (insufficicent space). @ingroup gapfunc */ template unsigned bit_convert_to_gap(T* BMRESTRICT dest, const unsigned* BMRESTRICT src, bm::id_t bits, unsigned dest_len) { register T* BMRESTRICT pcurr = dest; T* BMRESTRICT end = dest + dest_len; register int bitval = (*src) & 1; // *pcurr |= bitval; *pcurr = (T)bitval; ++pcurr; *pcurr = 0; register unsigned bit_idx = 0; register int bitval_next; unsigned val = *src; do { // We can fast pace if *src == 0 or *src = 0xffffffff while (val == 0 || val == 0xffffffff) { bitval_next = val ? 1 : 0; if (bitval != bitval_next) { *pcurr++ = (T)(bit_idx-1); BM_ASSERT((pcurr-1) == (dest+1) || *(pcurr-1) > *(pcurr-2)); if (pcurr >= end) { return 0; // OUT of memory } bitval = bitval_next; } bit_idx += sizeof(*src) * 8; if (bit_idx >= bits) { goto complete; } ++src; val = *src; } register unsigned mask = 1; while (mask) { // Now plain bitshifting. TODO: Optimization wanted. bitval_next = val & mask ? 1 : 0; if (bitval != bitval_next) { *pcurr++ = (T)(bit_idx-1); BM_ASSERT((pcurr-1) == (dest+1) || *(pcurr-1) > *(pcurr-2)); bitval = bitval_next; if (pcurr >= end) { return 0; // OUT of memory } } mask <<= 1; ++bit_idx; } // while mask if (bit_idx >= bits) { goto complete; } ++src; val = *src; } while(1); complete: *pcurr = (T)(bit_idx-1); unsigned len = (unsigned)(pcurr - dest); *dest = (T)((*dest & 7) + (len << 3)); return len; } /*! \brief Iterate gap block as delta-bits with a functor @ingroup gapfunc */ template void for_each_gap_dbit(const T* buf, F& func) { const T* pcurr = buf; const T* pend = pcurr + (*pcurr >> 3); ++pcurr; unsigned prev = 0; unsigned first_inc; if (*buf & 1) { first_inc = 0; unsigned to = *pcurr; for (unsigned i = 0; i <= to; ++i) { func(1); } prev = to; ++pcurr; } else { first_inc = 1; } ++pcurr; // set GAP to 1 while (pcurr <= pend) { unsigned from = *(pcurr-1)+1; unsigned to = *pcurr; if (first_inc) { func(from - prev + first_inc); first_inc = 0; } else { func(from - prev); } for (unsigned i = from+1; i <= to; ++i) { func(1); } prev = to; pcurr += 2; // jump to the next positive GAP } } /*! \brief Convert gap block into array of ints corresponding to 1 bits @ingroup gapfunc */ template D gap_convert_to_arr(D* BMRESTRICT dest, const T* BMRESTRICT buf, unsigned dest_len, bool invert = false) { register const T* BMRESTRICT pcurr = buf; register const T* pend = pcurr + (*pcurr >> 3); D* BMRESTRICT dest_curr = dest; ++pcurr; int bitval = (*buf) & 1; if (invert) bitval = !bitval; // invert the GAP buffer if (bitval) { if (unsigned(*pcurr + 1) >= dest_len) return 0; // insufficient space dest_len -= *pcurr; T to = *pcurr; for (T i = 0; ;++i) { *dest_curr++ = i; if (i == to) break; } ++pcurr; } ++pcurr; // set GAP to 1 while (pcurr <= pend) { unsigned pending = *pcurr - *(pcurr-1); if (pending >= dest_len) return 0; dest_len -= pending; T from = *(pcurr-1)+1; T to = *pcurr; for (T i = from; ;++i) { *dest_curr++ = i; if (i == to) break; } pcurr += 2; // jump to the next positive GAP } return (D) (dest_curr - dest); } /*! @brief Bitcount for bit string Function calculates number of 1 bits in the given array of words. Make sure the addresses are aligned. @ingroup bitfunc */ inline bm::id_t bit_block_calc_count(const bm::word_t* block, const bm::word_t* block_end) { BM_ASSERT(block < block_end); bm::id_t count = 0; #ifdef BMVECTOPT count = VECT_BITCOUNT(block, block_end); #else #ifdef BM64OPT // 64-bit optimized algorithm. No sparse vect opt. // instead it uses 4-way parallel pipelined version const bm::id64_t* b1 = (bm::id64_t*) block; const bm::id64_t* b2 = (bm::id64_t*) block_end; do { count += bitcount64_4way(b1[0], b1[1], b1[2], b1[3]); b1 += 4; } while (b1 < b2); #else // For 32 bit code the fastest method is // to use bitcount table for each byte in the block. // As optimization for sparse bitsets used bits accumulator // to collect ON bits using bitwise OR. bm::word_t acc = *block++; do { bm::word_t in = *block++; bm::word_t acc_prev = acc; acc |= in; if (acc_prev &= in) // accumulator miss: counting bits { BM_INCWORD_BITCOUNT(count, acc); acc = acc_prev; } } while (block < block_end); BM_INCWORD_BITCOUNT(count, acc); // count-in remaining accumulator #endif #endif return count; } /*! Function calculates number of times when bit value changed (1-0 or 0-1). For 001 result is 2 010 - 3 011 - 2 111 - 1 @ingroup bitfunc */ inline bm::id_t bit_count_change(bm::word_t w) { unsigned count = 1; w ^= (w >> 1); BM_INCWORD_BITCOUNT(count, w); count -= (w >> ((sizeof(w) * 8) - 1)); return count; } /*! Function calculates number of times when bit value changed @internal */ inline void bit_count_change32(const bm::word_t* block, const bm::word_t* block_end, unsigned* bit_count, unsigned* gap_count) { BM_ASSERT(block < block_end); BM_ASSERT(bit_count); BM_ASSERT(gap_count); *gap_count = 1; *bit_count = 0; bm::word_t w, w0, w_prev, w_l; w = w0 = *block; BM_INCWORD_BITCOUNT(*bit_count, w); const int w_shift = sizeof(w) * 8 - 1; w ^= (w >> 1); BM_INCWORD_BITCOUNT(*gap_count, w); *gap_count -= (w_prev = (w0 >> w_shift)); // negative value correction for (++block ;block < block_end; ++block) { w = w0 = *block; ++(*gap_count); if (!w) { *gap_count -= !w_prev; w_prev = 0; } else { BM_INCWORD_BITCOUNT(*bit_count, w); w ^= (w >> 1); BM_INCWORD_BITCOUNT(*gap_count, w); w_l = w0 & 1; *gap_count -= (w0 >> w_shift); // negative value correction *gap_count -= !(w_prev ^ w_l); // word border correction w_prev = (w0 >> w_shift); } } // for } /*! Function calculates number of times when bit value changed (1-0 or 0-1) in the bit block. Also calulates number of bits ON. @param bit_count - OUT total number of bits ON @return number of 1-0, 0-1 transitions @ingroup bitfunc */ inline bm::id_t bit_block_calc_count_change(const bm::word_t* block, const bm::word_t* block_end, unsigned* bit_count) { #if defined(BMSSE2OPT) || defined(BMSSE42OPT) #ifdef BMSSE42OPT return sse4_bit_block_calc_count_change( (const __m128i*)block, (const __m128i*)block_end, bit_count); #else # ifdef BMSSE2OPT return sse2_bit_block_calc_count_change( (const __m128i*)block, (const __m128i*)block_end, bit_count); # endif #endif #else // non-SSE code BM_ASSERT(block < block_end); BM_ASSERT(bit_count); #ifdef BM64OPT bm::id_t count = 1; *bit_count = 0; // 64-bit optimized algorithm. const bm::id64_t* b1 = (bm::id64_t*) block; const bm::id64_t* b2 = (bm::id64_t*) block_end; bm::id64_t w, w0, w_prev, w_l; w = w0 = *b1; *bit_count = word_bitcount64(w); const int w_shift = sizeof(w) * 8 - 1; w ^= (w >> 1); count += word_bitcount64(w); count -= (w_prev = (w0 >> w_shift)); // negative value correction for (++b1 ;b1 < b2; ++b1) { w = w0 = *b1; ++count; if (!w) { count -= !w_prev; w_prev = 0; } else { *bit_count += word_bitcount64(w); w ^= (w >> 1); count += word_bitcount64(w); w_l = w0 & 1; count -= (w0 >> w_shift); // negative value correction count -= !(w_prev ^ w_l); // word border correction w_prev = (w0 >> w_shift); } } // for return count; #else unsigned gap_count; bit_count_change32(block, block_end, bit_count, &gap_count); return gap_count; #endif #endif } /*! Function calculates number of 1 bits in the given array of words in the range between left anf right bits (borders included) Make sure the addresses are aligned. @ingroup bitfunc */ inline bm::id_t bit_block_calc_count_range(const bm::word_t* block, bm::word_t left, bm::word_t right) { BM_ASSERT(left <= right); unsigned nword, nbit; nbit = left & bm::set_word_mask; const bm::word_t* word = block + (nword = unsigned(left >> bm::set_word_shift)); if (left == right) // special case (only 1 bit to check) { return (*word >> nbit) & 1; } bm::id_t count = 0; unsigned acc; unsigned bitcount = right - left + 1; if (nbit) // starting position is not aligned { unsigned right_margin = nbit + (right - left); if (right_margin < 32) { unsigned mask = block_set_table::_right[nbit] & block_set_table::_left[right_margin]; acc = *word & mask; BM_INCWORD_BITCOUNT(count, acc); return count; } else { acc = *word & block_set_table::_right[nbit]; BM_INCWORD_BITCOUNT(count, acc); bitcount -= 32 - nbit; } ++word; } // now when we are word aligned, we can count bits the usual way for ( ;bitcount >= 32; bitcount -= 32) { acc = *word++; BM_INCWORD_BITCOUNT(count, acc); } if (bitcount) // we have a tail to count { acc = (*word) & block_set_table::_left[bitcount-1]; BM_INCWORD_BITCOUNT(count, acc); } return count; } /*! Function calculates if there is any number of 1 bits in the given array of words in the range between left anf right bits (borders included). Make sure the addresses are aligned. @ingroup bitfunc */ inline bm::id_t bit_block_any_range(const bm::word_t* block, bm::word_t left, bm::word_t right) { BM_ASSERT(left <= right); unsigned nbit = left; // unsigned(left & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; const bm::word_t* word = block + nword; if (left == right) // special case (only 1 bit to check) { return (*word >> nbit) & 1; } unsigned acc; unsigned bitcount = right - left + 1; if (nbit) // starting position is not aligned { unsigned right_margin = nbit + (right - left); if (right_margin < 32) { unsigned mask = block_set_table::_right[nbit] & block_set_table::_left[right_margin]; acc = *word & mask; return acc; } else { acc = *word & block_set_table::_right[nbit]; if (acc) return acc; bitcount -= 32 - nbit; } ++word; } // now when we are word aligned, we can check bits the usual way for ( ;bitcount >= 32; bitcount -= 32) { acc = *word++; if (acc) return acc; } if (bitcount) // we have a tail to count { acc = (*word) & block_set_table::_left[bitcount-1]; if (acc) return acc; } return 0; } // ---------------------------------------------------------------------- /*! Function inverts block of bits @ingroup bitfunc */ template void bit_invert(T* start, T* end) { #ifdef BMVECTOPT VECT_INVERT_ARR(start, end); #else do { start[0] = ~start[0]; start[1] = ~start[1]; start[2] = ~start[2]; start[3] = ~start[3]; start+=4; } while (start < end); #endif } // ---------------------------------------------------------------------- /*! @brief Returns "true" if all bits in the block are 1 @ingroup bitfunc */ inline bool is_bits_one(const bm::wordop_t* start, const bm::wordop_t* end) { do { bm::wordop_t tmp = start[0] & start[1] & start[2] & start[3]; if (tmp != bm::all_bits_mask) return false; start += 4; } while (start < end); return true; } // ---------------------------------------------------------------------- /*! @brief Returns "true" if all bits in the block are 0 @ingroup bitfunc */ inline bool bit_is_all_zero(const bm::wordop_t* start, const bm::wordop_t* end) { do { bm::wordop_t tmp = start[0] | start[1] | start[2] | start[3]; if (tmp) return false; start += 4; } while (start < end); return true; } // ---------------------------------------------------------------------- // GAP blocks manipulation functions: /*! \brief GAP and functor */ BMFORCEINLINE unsigned and_op(unsigned v1, unsigned v2) { return v1 & v2; } /*! \brief GAP xor functor */ BMFORCEINLINE unsigned xor_op(unsigned v1, unsigned v2) { return v1 ^ v2; } /*! \brief GAP or functor */ BMFORCEINLINE unsigned or_op(unsigned v1, unsigned v2) { return v1 | v2; } /*! \brief GAP or functor */ BMFORCEINLINE unsigned sub_op(unsigned v1, unsigned v2) { return v1 & ~v2; } /*! \brief GAP AND operation. Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \param tmp_buf - pointer on temporary buffer \param dsize - out size of the destination \return Result pointer (tmp_buf OR vect1) @ingroup gapfunc */ BMFORCEINLINE gap_word_t* gap_operation_and(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2, gap_word_t* BMRESTRICT tmp_buf, unsigned& dsize) { gap_buff_op(tmp_buf, vect1, 0, vect2, 0, and_op, dsize); return tmp_buf; } /*! \brief GAP AND operation test. Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \return non zero value if operation returns any 1 bit @ingroup gapfunc */ BMFORCEINLINE unsigned gap_operation_any_and(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_any_op(vect1, 0, vect2, 0, and_op); } /*! \brief GAP bitcount AND operation test. \param vect1 - operand 1 \param vect2 - operand 2 \return bitcount of vect1 AND vect2 @ingroup gapfunc */ BMFORCEINLINE unsigned gap_count_and(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_count_op(vect1, vect2, and_op); } /*! \brief GAP XOR operation. Function performs XOR logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \param tmp_buf - pointer on temporary buffer \param dsize - out destination size \return Result pointer (tmp_buf) @ingroup gapfunc */ BMFORCEINLINE gap_word_t* gap_operation_xor(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2, gap_word_t* BMRESTRICT tmp_buf, unsigned& dsize) { gap_buff_op(tmp_buf, vect1, 0, vect2, 0, bm::xor_op, dsize); return tmp_buf; } /*! \brief GAP XOR operation test. Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \return non zero value if operation returns any 1 bit @ingroup gapfunc */ BMFORCEINLINE unsigned gap_operation_any_xor(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_any_op(vect1, 0, vect2, 0, bm::xor_op); } /*! \brief GAP bitcount XOR operation test. \param vect1 - operand 1 \param vect2 - operand 2 \return bitcount of vect1 XOR vect2 @ingroup gapfunc */ BMFORCEINLINE unsigned gap_count_xor(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_count_op(vect1, vect2, bm::xor_op); } /*! \brief GAP OR operation. Function performs OR logical oparation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \param tmp_buf - pointer on temporary buffer \param dsize - out destination size \return Result pointer (tmp_buf) @ingroup gapfunc */ inline gap_word_t* gap_operation_or(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2, gap_word_t* BMRESTRICT tmp_buf, unsigned& dsize) { gap_buff_op(tmp_buf, vect1, 1, vect2, 1, bm::and_op, dsize); gap_invert(tmp_buf); return tmp_buf; } /*! \brief GAP bitcount OR operation test. \param vect1 - operand 1 \param vect2 - operand 2 \return bitcount of vect1 OR vect2 @ingroup gapfunc */ BMFORCEINLINE unsigned gap_count_or(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_count_op(vect1, vect2, bm::or_op); } /*! \brief GAP SUB (AND NOT) operation. Function performs SUB logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \param tmp_buf - pointer on temporary buffer \param dsize - out destination size \return Result pointer (tmp_buf) @ingroup gapfunc */ inline gap_word_t* gap_operation_sub(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2, gap_word_t* BMRESTRICT tmp_buf, unsigned& dsize) { gap_buff_op(tmp_buf, vect1, 0, vect2, 1, and_op, dsize); return tmp_buf; } /*! \brief GAP SUB operation test. Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size. \param vect1 - operand 1 \param vect2 - operand 2 \return non zero value if operation returns any 1 bit @ingroup gapfunc */ BMFORCEINLINE unsigned gap_operation_any_sub(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_any_op(vect1, 0, vect2, 1, bm::and_op); } /*! \brief GAP bitcount SUB (AND NOT) operation test. \param vect1 - operand 1 \param vect2 - operand 2 \return bitcount of vect1 SUB (AND NOT) vect2 @ingroup gapfunc */ BMFORCEINLINE unsigned gap_count_sub(const gap_word_t* BMRESTRICT vect1, const gap_word_t* BMRESTRICT vect2) { return gap_buff_count_op(vect1, vect2, bm::sub_op); } // ---------------------------------------------------------------------- // BIT blocks manipulation functions: /*! \brief Bitblock copy operation. \param dst - destination block. \param src - source block. @ingroup bitfunc */ inline void bit_block_copy(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { #ifdef BMVECTOPT VECT_COPY_BLOCK(dst, src, src + bm::set_block_size); #else ::memcpy(dst, src, bm::set_block_size * sizeof(bm::word_t)); #endif } /*! \brief Plain bitblock AND operation. Function does not analyse availability of source and destination blocks. \param dst - destination block. \param src - source block. @ingroup bitfunc */ inline void bit_block_and(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { #ifdef BMVECTOPT VECT_AND_ARR(dst, src, src + bm::set_block_size); #else const bm::wordop_t* BMRESTRICT wrd_ptr = (wordop_t*)src; const bm::wordop_t* BMRESTRICT wrd_end = (wordop_t*)(src + bm::set_block_size); bm::wordop_t* BMRESTRICT dst_ptr = (wordop_t*)dst; do { dst_ptr[0] &= wrd_ptr[0]; dst_ptr[1] &= wrd_ptr[1]; dst_ptr[2] &= wrd_ptr[2]; dst_ptr[3] &= wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif } /*! \brief Function ANDs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks. \param src1 - first bit block \param src1_end - first bit block end \param src2 - second bit block @ingroup bitfunc */ inline unsigned bit_block_and_count(const bm::word_t* src1, const bm::word_t* src1_end, const bm::word_t* src2) { unsigned count; #ifdef BMVECTOPT count = VECT_BITCOUNT_AND(src1, src1_end, src2); #else count = 0; # ifdef BM64OPT const bm::id64_t* b1 = (bm::id64_t*) src1; const bm::id64_t* b1_end = (bm::id64_t*) src1_end; const bm::id64_t* b2 = (bm::id64_t*) src2; do { count += bitcount64_4way(b1[0] & b2[0], b1[1] & b2[1], b1[2] & b2[2], b1[3] & b2[3]); b1 += 4; b2 += 4; } while (b1 < b1_end); # else do { BM_INCWORD_BITCOUNT(count, src1[0] & src2[0]); BM_INCWORD_BITCOUNT(count, src1[1] & src2[1]); BM_INCWORD_BITCOUNT(count, src1[2] & src2[2]); BM_INCWORD_BITCOUNT(count, src1[3] & src2[3]); src1+=4; src2+=4; } while (src1 < src1_end); # endif #endif return count; } /*! \brief Function ANDs two bitblocks and tests for any bit. Function does not analyse availability of source blocks. \param src1 - first bit block \param src1_end - first bit block end \param src2 - second bit block @ingroup bitfunc */ inline unsigned bit_block_and_any(const bm::word_t* src1, const bm::word_t* src1_end, const bm::word_t* src2) { unsigned count = 0; do { count = (src1[0] & src2[0]) | (src1[1] & src2[1]) | (src1[2] & src2[2]) | (src1[3] & src2[3]); src1+=4; src2+=4; } while ((src1 < src1_end) && (count == 0)); return count; } /*! \brief Function XORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_xor_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned count; #ifdef BMVECTOPT count = VECT_BITCOUNT_XOR(src1, src1_end, src2); #else count = 0; # ifdef BM64OPT const bm::id64_t* b1 = (bm::id64_t*) src1; const bm::id64_t* b1_end = (bm::id64_t*) src1_end; const bm::id64_t* b2 = (bm::id64_t*) src2; do { count += bitcount64_4way(b1[0] ^ b2[0], b1[1] ^ b2[1], b1[2] ^ b2[2], b1[3] ^ b2[3]); b1 += 4; b2 += 4; } while (b1 < b1_end); # else do { BM_INCWORD_BITCOUNT(count, src1[0] ^ src2[0]); BM_INCWORD_BITCOUNT(count, src1[1] ^ src2[1]); BM_INCWORD_BITCOUNT(count, src1[2] ^ src2[2]); BM_INCWORD_BITCOUNT(count, src1[3] ^ src2[3]); src1+=4; src2+=4; } while (src1 < src1_end); # endif #endif return count; } /*! \brief Function XORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_xor_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned count = 0; do { count = (src1[0] ^ src2[0]) | (src1[1] ^ src2[1]) | (src1[2] ^ src2[2]) | (src1[3] ^ src2[3]); src1+=4; src2+=4; } while ((src1 < src1_end) && (count == 0)); return count; } /*! \brief Function SUBs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_sub_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned count; #ifdef BMVECTOPT count = VECT_BITCOUNT_SUB(src1, src1_end, src2); #else count = 0; # ifdef BM64OPT const bm::id64_t* b1 = (bm::id64_t*) src1; const bm::id64_t* b1_end = (bm::id64_t*) src1_end; const bm::id64_t* b2 = (bm::id64_t*) src2; do { count += bitcount64_4way(b1[0] & ~b2[0], b1[1] & ~b2[1], b1[2] & ~b2[2], b1[3] & ~b2[3]); b1 += 4; b2 += 4; } while (b1 < b1_end); # else do { BM_INCWORD_BITCOUNT(count, src1[0] & ~src2[0]); BM_INCWORD_BITCOUNT(count, src1[1] & ~src2[1]); BM_INCWORD_BITCOUNT(count, src1[2] & ~src2[2]); BM_INCWORD_BITCOUNT(count, src1[3] & ~src2[3]); src1+=4; src2+=4; } while (src1 < src1_end); # endif #endif return count; } /*! \brief Function SUBs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_sub_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned count = 0; do { count = (src1[0] & ~src2[0]) | (src1[1] & ~src2[1]) | (src1[2] & ~src2[2]) | (src1[3] & ~src2[3]); src1+=4; src2+=4; } while ((src1 < src1_end) && (count == 0)); return count; } /*! \brief Function ORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks. \param src1 - first bit block \param src1_end - first block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_or_count(const bm::word_t* src1, const bm::word_t* src1_end, const bm::word_t* src2) { unsigned count; #ifdef BMVECTOPT count = VECT_BITCOUNT_OR(src1, src1_end, src2); #else count = 0; # ifdef BM64OPT const bm::id64_t* b1 = (bm::id64_t*) src1; const bm::id64_t* b1_end = (bm::id64_t*) src1_end; const bm::id64_t* b2 = (bm::id64_t*) src2; do { count += bitcount64_4way(b1[0] | b2[0], b1[1] | b2[1], b1[2] | b2[2], b1[3] | b2[3]); b1 += 4; b2 += 4; } while (b1 < b1_end); # else do { BM_INCWORD_BITCOUNT(count, src1[0] | src2[0]); BM_INCWORD_BITCOUNT(count, src1[1] | src2[1]); BM_INCWORD_BITCOUNT(count, src1[2] | src2[2]); BM_INCWORD_BITCOUNT(count, src1[3] | src2[3]); src1+=4; src2+=4; } while (src1 < src1_end); # endif #endif return count; } /*! \brief Function ORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. @ingroup bitfunc */ inline unsigned bit_block_or_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned count = 0; do { count = (src1[0] | src2[0]) | (src1[1] | src2[1]) | (src1[2] | src2[2]) | (src1[3] | src2[3]); src1+=4; src2+=4; } while ((src1 < src1_end) && (count == 0)); return count; } /*! \brief bitblock AND operation. \param dst - destination block. \param src - source block. \returns pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value. @ingroup bitfunc */ inline bm::word_t* bit_operation_and(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { BM_ASSERT(dst || src); bm::word_t* ret = dst; if (IS_VALID_ADDR(dst)) // The destination block already exists { if (!IS_VALID_ADDR(src)) { if (IS_EMPTY_BLOCK(src)) { //If the source block is zero //just clean the destination block return 0; } } else { // Regular operation AND on the whole block. bit_block_and(dst, src); } } else // The destination block does not exist yet { if(!IS_VALID_ADDR(src)) { if(IS_EMPTY_BLOCK(src)) { // The source block is empty. // One argument empty - all result is empty. return 0; } // Here we have nothing to do. // Src block is all ON, dst block remains as it is } else // destination block does not exists, src - valid block { if (IS_FULL_BLOCK(dst)) { return const_cast(src); } // Nothng to do. // Dst block is all ZERO no combination required. } } return ret; } /*! \brief Performs bitblock AND operation and calculates bitcount of the result. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. \returns bitcount value @ingroup bitfunc */ inline bm::id_t bit_operation_and_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1) || IS_EMPTY_BLOCK(src2)) { return 0; } return bit_block_and_count(src1, src1_end, src2); } /*! \brief Performs bitblock AND operation test. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. \returns non zero if there is any value @ingroup bitfunc */ inline bm::id_t bit_operation_and_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1) || IS_EMPTY_BLOCK(src2)) { return 0; } return bit_block_and_any(src1, src1_end, src2); } /*! \brief Performs bitblock SUB operation and calculates bitcount of the result. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block \returns bitcount value @ingroup bitfunc */ inline bm::id_t bit_operation_sub_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1)) { return 0; } if (IS_EMPTY_BLOCK(src2)) // nothing to diff { return bit_block_calc_count(src1, src1_end); } return bit_block_sub_count(src1, src1_end, src2); } /*! \brief Performs inverted bitblock SUB operation and calculates bitcount of the result. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block \returns bitcount value @ingroup bitfunc */ inline bm::id_t bit_operation_sub_count_inv(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { unsigned arr_size = unsigned(src1_end - src1); return bit_operation_sub_count(src2, src2+arr_size, src1); } /*! \brief Performs bitblock test of SUB operation. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block \returns non zero value if there are any bits @ingroup bitfunc */ inline bm::id_t bit_operation_sub_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1)) { return 0; } if (IS_EMPTY_BLOCK(src2)) // nothing to diff { return !bit_is_all_zero((bm::wordop_t*)src1, (bm::wordop_t*)src1_end); } return bit_block_sub_any(src1, src1_end, src2); } /*! \brief Performs bitblock OR operation and calculates bitcount of the result. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. \returns bitcount value @ingroup bitfunc */ inline bm::id_t bit_operation_or_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1)) { if (!IS_EMPTY_BLOCK(src2)) return bit_block_calc_count(src2, src2 + (src1_end - src1)); else return 0; // both blocks are empty } else { if (IS_EMPTY_BLOCK(src2)) return bit_block_calc_count(src1, src1_end); } return bit_block_or_count(src1, src1_end, src2); } /*! \brief Performs bitblock OR operation test. \param src1 - first bit block. \param src1_end - first bit block end \param src2 - second bit block. \returns non zero value if there are any bits @ingroup bitfunc */ inline bm::id_t bit_operation_or_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1)) { if (!IS_EMPTY_BLOCK(src2)) return !bit_is_all_zero((bm::wordop_t*)src2, (bm::wordop_t*)(src2 + (src1_end - src1))); else return 0; // both blocks are empty } else { if (IS_EMPTY_BLOCK(src2)) return !bit_is_all_zero((bm::wordop_t*)src1, (bm::wordop_t*)src1_end); } return bit_block_or_any(src1, src1_end, src2); } /*! \brief Plain bitblock OR operation. Function does not analyse availability of source and destination blocks. \param dst - destination block. \param src - source block. @ingroup bitfunc */ inline void bit_block_or(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { #ifdef BMVECTOPT VECT_OR_ARR(dst, src, src + bm::set_block_size); #else const bm::wordop_t* BMRESTRICT wrd_ptr = (wordop_t*)src; const bm::wordop_t* BMRESTRICT wrd_end = (wordop_t*)(src + set_block_size); bm::wordop_t* BMRESTRICT dst_ptr = (wordop_t*)dst; do { dst_ptr[0] |= wrd_ptr[0]; dst_ptr[1] |= wrd_ptr[1]; dst_ptr[2] |= wrd_ptr[2]; dst_ptr[3] |= wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif } /*! \brief Block OR operation. Makes analysis if block is 0 or FULL. \param dst - destination block. \param src - source block. \returns pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value. @ingroup bitfunc */ inline bm::word_t* bit_operation_or(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { BM_ASSERT(dst || src); bm::word_t* ret = dst; if (IS_VALID_ADDR(dst)) // The destination block already exists { if (!IS_VALID_ADDR(src)) { if (IS_FULL_BLOCK(src)) { // if the source block is all set // just set the destination block ::memset(dst, 0xFF, bm::set_block_size * sizeof(bm::word_t)); } } else { // Regular operation OR on the whole block bit_block_or(dst, src); } } else // The destination block does not exist yet { if (!IS_VALID_ADDR(src)) { if (IS_FULL_BLOCK(src)) { // The source block is all set, because dst does not exist // we can simply replace it. return const_cast(FULL_BLOCK_ADDR); } } else { if (dst == 0) { // The only case when we have to allocate the new block: // Src is all zero and Dst does not exist return const_cast(src); } } } return ret; } /*! \brief Plain bitblock SUB (AND NOT) operation. Function does not analyse availability of source and destination blocks. \param dst - destination block. \param src - source block. @ingroup bitfunc */ inline void bit_block_sub(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { #ifdef BMVECTOPT VECT_SUB_ARR(dst, src, src + bm::set_block_size); #else const bm::wordop_t* BMRESTRICT wrd_ptr = (wordop_t*) src; const bm::wordop_t* BMRESTRICT wrd_end = (wordop_t*) (src + bm::set_block_size); bm::wordop_t* dst_ptr = (wordop_t*)dst; // Regular operation AND-NOT on the whole block. do { dst_ptr[0] &= ~wrd_ptr[0]; dst_ptr[1] &= ~wrd_ptr[1]; dst_ptr[2] &= ~wrd_ptr[2]; dst_ptr[3] &= ~wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif } /*! \brief bitblock SUB operation. \param dst - destination block. \param src - source block. \returns pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value. @ingroup bitfunc */ inline bm::word_t* bit_operation_sub(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { BM_ASSERT(dst || src); bm::word_t* ret = dst; if (IS_VALID_ADDR(dst)) // The destination block already exists { if (!IS_VALID_ADDR(src)) { if (IS_FULL_BLOCK(src)) { // If the source block is all set // just clean the destination block return 0; } } else { bit_block_sub(dst, src); } } else // The destination block does not exist yet { if (!IS_VALID_ADDR(src)) { if (IS_FULL_BLOCK(src)) { // The source block is full return 0; } } else { if (IS_FULL_BLOCK(dst)) { // The only case when we have to allocate the new block: // dst is all set and src exists return const_cast(src); } } } return ret; } /*! \brief Plain bitblock XOR operation. Function does not analyse availability of source and destination blocks. \param dst - destination block. \param src - source block. @ingroup bitfunc */ inline void bit_block_xor(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { #ifdef BMVECTOPT VECT_XOR_ARR(dst, src, src + bm::set_block_size); #else const bm::wordop_t* BMRESTRICT wrd_ptr = (wordop_t*) src; const bm::wordop_t* BMRESTRICT wrd_end = (wordop_t*) (src + bm::set_block_size); bm::wordop_t* BMRESTRICT dst_ptr = (wordop_t*)dst; // Regular XOR operation on the whole block. do { dst_ptr[0] ^= wrd_ptr[0]; dst_ptr[1] ^= wrd_ptr[1]; dst_ptr[2] ^= wrd_ptr[2]; dst_ptr[3] ^= wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif } /*! \brief bitblock XOR operation. \param dst - destination block. \param src - source block. \returns pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value. @ingroup bitfunc */ inline bm::word_t* bit_operation_xor(bm::word_t* BMRESTRICT dst, const bm::word_t* BMRESTRICT src) { BM_ASSERT(dst || src); if (src == dst) return 0; // XOR rule bm::word_t* ret = dst; if (IS_VALID_ADDR(dst)) // The destination block already exists { if (!src) return dst; bit_block_xor(dst, src); } else // The destination block does not exist yet { if (!src) return dst; // 1 xor 0 = 1 // Here we have two cases: // if dest block is full or zero if zero we need to copy the source // otherwise XOR loop against 0xFF... //BM_ASSERT(dst == 0); return const_cast(src); // src is the final result } return ret; } /*! \brief Performs bitblock XOR operation and calculates bitcount of the result. \param src1 - first bit block. \param src2 - second bit block. \returns bitcount value @ingroup bitfunc */ inline bm::id_t bit_operation_xor_count(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1) || IS_EMPTY_BLOCK(src2)) { if (IS_EMPTY_BLOCK(src1) && IS_EMPTY_BLOCK(src2)) return 0; const bm::word_t* block = IS_EMPTY_BLOCK(src1) ? src2 : src1; return bit_block_calc_count(block, block + (src1_end - src1)); } return bit_block_xor_count(src1, src1_end, src2); } /*! \brief Performs bitblock XOR operation test. \param src1 - first bit block. \param src2 - second bit block. \returns non zero value if there are bits @ingroup bitfunc */ inline bm::id_t bit_operation_xor_any(const bm::word_t* BMRESTRICT src1, const bm::word_t* BMRESTRICT src1_end, const bm::word_t* BMRESTRICT src2) { if (IS_EMPTY_BLOCK(src1) || IS_EMPTY_BLOCK(src2)) { if (IS_EMPTY_BLOCK(src1) && IS_EMPTY_BLOCK(src2)) return 0; const bm::word_t* block = IS_EMPTY_BLOCK(src1) ? src2 : src1; return !bit_is_all_zero((bm::wordop_t*)block, (bm::wordop_t*)(block + (src1_end - src1))); } return bit_block_xor_any(src1, src1_end, src2); } /** \brief Inspects block for full zero words \param data - bit block pointer \param data_size - data size \return size of all non-zero words @ingroup bitfunc */ template unsigned bit_count_nonzero_size(const T* blk, unsigned data_size) { BM_ASSERT(blk && data_size); unsigned count = 0; const T* blk_end = blk + data_size - 2; do { if (*blk == 0) { // scan fwd to find 0 island length const T* blk_j = blk + 1; for (; blk_j < blk_end; ++blk_j) { if (*blk_j != 0) break; } blk = blk_j-1; count += sizeof(gap_word_t); } else { // scan fwd to find non-0 island length const T* blk_j = blk + 1; for ( ; blk_j < blk_end; ++blk_j) { if (*blk_j == 0) { // look ahead to identify and ignore short 0-run if (blk_j[1] | blk_j[2]) { // skip zero word ++blk_j; continue; } break; } } count += sizeof(gap_word_t); // count all bit-words now count += (blk_j - blk) * sizeof(T); blk = blk_j; } ++blk; } while(blk < blk_end); return count + (2 * sizeof(T)); } /** \brief Searches for the next 1 bit in the BIT block \param data - BIT buffer \param nbit - bit index to start checking from \param prev - returns previously checked value @ingroup bitfunc */ inline int bit_find_in_block(const bm::word_t* data, unsigned nbit, bm::id_t* prev) { register bm::id_t p = *prev; int found = 0; for(;;) { unsigned nword = nbit >> bm::set_word_shift; if (nword >= bm::set_block_size) break; register bm::word_t val = data[nword] >> (p & bm::set_word_mask); // TODO: consider BSF and de bruijn sequences here: // http://www.0xe3.com/text/ntz/ComputingTrailingZerosHOWTO.html#debruijn if (val) { while((val & 1) == 0) { val >>= 1; ++nbit; ++p; } ++found; break; } else { p += (bm::set_word_mask + 1) - (nbit & bm::set_word_mask); nbit += (bm::set_word_mask + 1) - (nbit & bm::set_word_mask); } } *prev = p; return found; } /*! \brief Templated algorithm to unpacks octet based word into list of ON bit indexes \param w - value \param func - bit functor @ingroup bitfunc */ template void bit_for_each_4(T w, F& func) { for (unsigned sub_octet = 0; w != 0; w >>= 4, sub_octet += 4) { switch (w & 15) { case 0: // 0000 break; case 1: // 0001 func(sub_octet); break; case 2: // 0010 func(sub_octet + 1); break; case 3: // 0011 func(sub_octet, sub_octet + 1); break; case 4: // 0100 func(sub_octet + 2); break; case 5: // 0101 func(sub_octet, sub_octet + 2); break; case 6: // 0110 func(sub_octet + 1, sub_octet + 2); break; case 7: // 0111 func(sub_octet, sub_octet + 1, sub_octet + 2); break; case 8: // 1000 func(sub_octet + 3); break; case 9: // 1001 func(sub_octet, sub_octet + 3); break; case 10: // 1010 func(sub_octet + 1, sub_octet + 3); break; case 11: // 1011 func(sub_octet, sub_octet + 1, sub_octet + 3); break; case 12: // 1100 func(sub_octet + 2, sub_octet + 3); break; case 13: // 1101 func(sub_octet, sub_octet + 2, sub_octet + 3); break; case 14: // 1110 func(sub_octet + 1, sub_octet + 2, sub_octet + 3); break; case 15: // 1111 func(sub_octet, sub_octet + 1, sub_octet + 2, sub_octet + 3); break; default: BM_ASSERT(0); break; } } // for } /*! \brief Templated algorithm to unpacks word into list of ON bit indexes \param w - value \param func - bit functor @ingroup bitfunc */ template void bit_for_each(T w, F& func) { // Note: 4-bit table method works slower than plain check approach for (unsigned octet = 0; w != 0; w >>= 8, octet += 8) { if (w & 1) func(octet + 0); if (w & 2) func(octet + 1); if (w & 4) func(octet + 2); if (w & 8) func(octet + 3); if (w & 16) func(octet + 4); if (w & 32) func(octet + 5); if (w & 64) func(octet + 6); if (w & 128) func(octet + 7); } // for } /*! @brief Adaptor to copy 1 bits to array @internal */ template class copy_to_array_functor { public: copy_to_array_functor(B* bits): bp_(bits) {} B* ptr() { return bp_; } void operator()(unsigned bit_idx) { *bp_++ = (B)bit_idx; } void operator()(unsigned bit_idx0, unsigned bit_idx1) { bp_[0] = (B)bit_idx0; bp_[1] = (B)bit_idx1; bp_+=2; } void operator()(unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2) { bp_[0] = (B)bit_idx0; bp_[1] = (B)bit_idx1; bp_[2] = (B)bit_idx2; bp_+=3; } void operator()(unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2, unsigned bit_idx3) { bp_[0] = (B)bit_idx0; bp_[1] = (B)bit_idx1; bp_[2] = (B)bit_idx2; bp_[3] = (B)bit_idx3; bp_+=4; } private: copy_to_array_functor(const copy_to_array_functor&); copy_to_array_functor& operator=(const copy_to_array_functor&); private: B* bp_; }; /*! @brief Adaptor to copy 1 bits to array with base increment @internal */ template class copy_to_array_functor_inc { public: copy_to_array_functor_inc(B* bits, unsigned base_idx) : bp_(bits), base_idx_(base_idx) {} B* ptr() { return bp_; } void operator()(unsigned bit_idx) { *bp_++ = (B)(bit_idx + base_idx_); } void operator()(unsigned bit_idx0, unsigned bit_idx1) { bp_[0]=(B)(bit_idx0+base_idx_);bp_[1]=(B)(bit_idx1+base_idx_); bp_+=2; } void operator()(unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2) { bp_[0]=(B)(bit_idx0+base_idx_);bp_[1]=(B)(bit_idx1+base_idx_); bp_[2]=(B)(bit_idx2+base_idx_); bp_+=3; } void operator()(unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2, unsigned bit_idx3) { bp_[0]=(B)(bit_idx0+base_idx_);bp_[1]=(B)(bit_idx1+base_idx_); bp_[2]=(B)(bit_idx2+base_idx_);bp_[3]=(B)(bit_idx3+base_idx_); bp_+=4; } private: copy_to_array_functor_inc(const copy_to_array_functor_inc&); copy_to_array_functor_inc& operator=(const copy_to_array_functor_inc&); private: B* bp_; unsigned base_idx_; ///< Base increment factor }; /*! \brief Unpacks word into list of ON bit indexes (quad-bit based) \param w - value \param bits - pointer on the result array \return number of bits in the list @ingroup bitfunc */ template unsigned bit_list_4(T w, B* bits) { copy_to_array_functor func(bits); bit_for_each_4(w, func); return (unsigned)(func.ptr() - bits); } /*! \brief Unpacks word into list of ON bit indexes \param w - value \param bits - pointer on the result array \return number of bits in the list @ingroup bitfunc */ template unsigned bit_list(T w, B* bits) { copy_to_array_functor func(bits); bit_for_each(w, func); return (unsigned)(func.ptr() - bits); } /*! @brief Choose best representation for a bit-block @ingroup bitfunc */ inline bm::set_representation best_representation(unsigned bit_count, unsigned total_possible_bitcount, unsigned gap_count, unsigned block_size) { unsigned arr_size = sizeof(bm::gap_word_t) * bit_count + sizeof(bm::gap_word_t); unsigned gap_size = sizeof(bm::gap_word_t) * gap_count + sizeof(bm::gap_word_t); unsigned inv_arr_size = sizeof(bm::gap_word_t) * (total_possible_bitcount - bit_count) + sizeof(bm::gap_word_t); if ((gap_size < block_size) && (gap_size < arr_size) && (gap_size < inv_arr_size)) { return bm::set_gap; } if (arr_size < inv_arr_size) { if ((arr_size < block_size) && (arr_size < gap_size)) { return bm::set_array1; } } else { if ((inv_arr_size < block_size) && (inv_arr_size < gap_size)) { return bm::set_array0; } } return bm::set_bitset; } /*! @brief Convert bit block into an array of ints corresponding to 1 bits @ingroup bitfunc */ template T bit_convert_to_arr(T* BMRESTRICT dest, const unsigned* BMRESTRICT src, bm::id_t bits, unsigned dest_len, unsigned mask = 0) { T* BMRESTRICT pcurr = dest; for(unsigned bit_idx=0; bit_idx < bits; ++src,bit_idx += sizeof(*src) * 8) { unsigned val = *src ^ mask; // possible to invert value by XOR 0xFF.. if (val == 0) { continue; } if (pcurr + sizeof(val)*8 >= dest + dest_len) // insufficient space { return 0; } copy_to_array_functor_inc func(pcurr, bit_idx); bit_for_each_4(val, func); unsigned word_bit_cnt = func.ptr() - pcurr; pcurr += word_bit_cnt; } // for return (T)(pcurr - dest); } /*! OBSOLETE function \brief Convert bit block into an array of ints corresponding to 1 bits \internal @ingroup bitfunc */ /* template T bit_convert_to_arr2(T* BMRESTRICT dest, const unsigned* BMRESTRICT src, bm::id_t bits, unsigned dest_len) { register T* BMRESTRICT pcurr = dest; T* BMRESTRICT end = dest + dest_len; unsigned bit_idx = 0; do { register unsigned val = *src; // We can skip if *src == 0 while (val == 0) { bit_idx += sizeof(*src) * 8; if (bit_idx >= bits) { return (T)(pcurr - dest); } val = *(++src); } if (pcurr + sizeof(val)*8 > end) // insufficient space { return 0; } for (int i = 0; i < 32; i+=4) { if (val & 1) *pcurr++ = bit_idx; val >>= 1; ++bit_idx; if (val & 1) *pcurr++ = bit_idx; val >>= 1; ++bit_idx; if (val & 1) *pcurr++ = bit_idx; val >>= 1; ++bit_idx; if (val & 1) *pcurr++ = bit_idx; val >>= 1; ++bit_idx; } if (bits <= bit_idx) break; val = *(++src); } while (1); return (T)(pcurr - dest); } */ /*! @brief Calculates memory overhead for number of gap blocks sharing the same memory allocation table (level lengths table). @ingroup gapfunc */ template unsigned gap_overhead(const T* length, const T* length_end, const T* glevel_len) { BM_ASSERT(length && length_end && glevel_len); unsigned overhead = 0; for (;length < length_end; ++length) { unsigned len = *length; int level = gap_calc_level(len, glevel_len); BM_ASSERT(level >= 0 && level < (int)bm::gap_levels); unsigned capacity = glevel_len[level]; BM_ASSERT(capacity >= len); overhead += capacity - len; } return overhead; } /*! @brief Finds optimal gap blocks lengths. @param length - first element of GAP lengths array @param length_end - end of the GAP lengths array @param glevel_len - destination GAP lengths array @ingroup gapfunc */ template bool improve_gap_levels(const T* length, const T* length_end, T* glevel_len) { BM_ASSERT(length && length_end && glevel_len); size_t lsize = length_end - length; BM_ASSERT(lsize); gap_word_t max_len = 0; unsigned i; for (i = 0; i < lsize; ++i) { if (length[i] > max_len) max_len = length[i]; } if (max_len < 5 || lsize <= bm::gap_levels) { glevel_len[0] = max_len + 4; for (i = 1; i < bm::gap_levels; ++i) { glevel_len[i] = bm::gap_max_buff_len; } return true; } glevel_len[bm::gap_levels-1] = max_len + 5; unsigned min_overhead = gap_overhead(length, length_end, glevel_len); bool is_improved = false; gap_word_t prev_value = glevel_len[bm::gap_levels-1]; // main problem solving loop // for (i = bm::gap_levels-2; ; --i) { unsigned opt_len = 0; unsigned j; bool imp_flag = false; gap_word_t gap_saved_value = glevel_len[i]; for (j = 0; j < lsize; ++j) { glevel_len[i] = length[j]+4; unsigned ov = gap_overhead(length, length_end, glevel_len); if (ov <= min_overhead) { min_overhead = ov; opt_len = length[j]+4; imp_flag = true; } } if (imp_flag) { glevel_len[i] = (T)opt_len; // length[opt_idx]+4; is_improved = true; } else { glevel_len[i] = gap_saved_value; } if (i == 0) break; prev_value = glevel_len[i]; } // // Remove duplicates // T val = *glevel_len; T* gp = glevel_len; T* res = glevel_len; for (i = 0; i < bm::gap_levels; ++i) { if (val != *gp) { val = *gp; *++res = val; } ++gp; } // Filling the "unused" part with max. possible value while (++res < (glevel_len + bm::gap_levels)) { *res = bm::gap_max_buff_len; } return is_improved; } /** Bit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal */ class bitblock_get_adapter { public: bitblock_get_adapter(const bm::word_t* bit_block) : b_(bit_block) {} BMFORCEINLINE bm::word_t get_32() { return *b_++; } private: const bm::word_t* b_; }; /** Bit-block store adapter, takes bitblock and saves results into it /internal */ class bitblock_store_adapter { public: bitblock_store_adapter(bm::word_t* bit_block) : b_(bit_block) {} BMFORCEINLINE void push_back(bm::word_t w) { *b_++ = w; } private: bm::word_t* b_; }; /** Bit-block sum adapter, takes values and sums it /internal */ class bitblock_sum_adapter { public: bitblock_sum_adapter() : sum_(0) {} BMFORCEINLINE void push_back(bm::word_t w) { this->sum_+= w; } /// Get accumulated sum bm::word_t sum() const { return this->sum_; } private: bm::word_t sum_; }; /** Adapter to get words from a range stream (see range serialized bit-block) \internal */ template class decoder_range_adapter { public: decoder_range_adapter(DEC& dec, unsigned from_idx, unsigned to_idx) : decoder_(dec), from_(from_idx), to_(to_idx), cnt_(0) {} bm::word_t get_32() { if (cnt_ < from_ || cnt_ > to_) { ++cnt_; return 0; } ++cnt_; return decoder_.get_32(); } private: DEC& decoder_; unsigned from_; unsigned to_; unsigned cnt_; }; /*! Abstract recombination algorithm for two bit-blocks Bit blocks can come as dserialization decoders or bit-streams */ template void bit_recomb(It1& it1, It2& it2, BinaryOp& op, Encoder& enc, unsigned block_size = bm::set_block_size) { for (unsigned i = 0; i < block_size; ++i) { bm::word_t w1 = it1.get_32(); bm::word_t w2 = it2.get_32(); bm::word_t w = op(w1, w2); enc.push_back( w ); } // for } /// Bit AND functor template struct bit_AND { W operator()(W w1, W w2) { return w1 & w2; } }; /// Bit OR functor template struct bit_OR { W operator()(W w1, W w2) { return w1 | w2; } }; /// Bit SUB functor template struct bit_SUB { W operator()(W w1, W w2) { return w1 & ~w2; } }; /// Bit XOR functor template struct bit_XOR { W operator()(W w1, W w2) { return w1 ^ w2; } }; /// Bit ASSIGN functor template struct bit_ASSIGN { W operator()(W w1, W w2) { return w2; } }; /// Bit COUNT functor template struct bit_COUNT { W operator()(W w1, W w2) { w1 = 0; BM_INCWORD_BITCOUNT(w1, w2); return w1; } }; /// Bit COUNT AND functor template struct bit_COUNT_AND { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w1 & w2); return r; } }; /// Bit COUNT XOR functor template struct bit_COUNT_XOR { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w1 ^ w2); return r; } }; /// Bit COUNT OR functor template struct bit_COUNT_OR { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w1 | w2); return r; } }; /// Bit COUNT SUB AB functor template struct bit_COUNT_SUB_AB { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w1 & (~w2)); return r; } }; /// Bit SUB BA functor template struct bit_COUNT_SUB_BA { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w2 & (~w1)); return r; } }; /// Bit COUNT A functor template struct bit_COUNT_A { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w1); return r; } }; /// Bit COUNT B functor template struct bit_COUNT_B { W operator()(W w1, W w2) { W r = 0; BM_INCWORD_BITCOUNT(r, w2); return r; } }; typedef void (*gap_operation_to_bitset_func_type)(unsigned*, const gap_word_t*); typedef gap_word_t* (*gap_operation_func_type)(const gap_word_t* BMRESTRICT, const gap_word_t* BMRESTRICT, gap_word_t* BMRESTRICT, unsigned& ); typedef bm::id_t (*bit_operation_count_func_type)(const bm::word_t* BMRESTRICT, const bm::word_t* BMRESTRICT, const bm::word_t* BMRESTRICT); template struct operation_functions { static gap_operation_to_bitset_func_type gap2bit_table_[bm::set_END]; static gap_operation_func_type gapop_table_[bm::set_END]; static bit_operation_count_func_type bit_op_count_table_[bm::set_END]; static gap_operation_to_bitset_func_type gap_op_to_bit(unsigned i) { return gap2bit_table_[i]; } static gap_operation_func_type gap_operation(unsigned i) { return gapop_table_[i]; } static bit_operation_count_func_type bit_operation_count(unsigned i) { return bit_op_count_table_[i]; } }; template gap_operation_to_bitset_func_type operation_functions::gap2bit_table_[bm::set_END] = { &gap_and_to_bitset, // set_AND &gap_add_to_bitset, // set_OR &gap_sub_to_bitset, // set_SUB &gap_xor_to_bitset, // set_XOR 0 }; template gap_operation_func_type operation_functions::gapop_table_[bm::set_END] = { &gap_operation_and, // set_AND &gap_operation_or, // set_OR &gap_operation_sub, // set_SUB &gap_operation_xor, // set_XOR 0 }; template bit_operation_count_func_type operation_functions::bit_op_count_table_[bm::set_END] = { 0, // set_AND 0, // set_OR 0, // set_SUB 0, // set_XOR 0, // set_ASSIGN 0, // set_COUNT &bit_operation_and_count, // set_COUNT_AND &bit_operation_xor_count, // set_COUNT_XOR &bit_operation_or_count, // set_COUNT_OR &bit_operation_sub_count, // set_COUNT_SUB_AB &bit_operation_sub_count_inv, // set_COUNT_SUB_BA 0, // set_COUNT_A 0, // set_COUNT_B }; } // namespace bm #endif bm3.7.0/src/bm.h0000644000175000017500000025646011365120467011570 0ustar tlktlk#ifndef BM__H__INCLUDED__ #define BM__H__INCLUDED__ /* Copyright(c) 2002-2010 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ // define BM_NO_STL if you use BM in "STL free" environment and want // to disable any references to STL headers #ifndef BM_NO_STL # include #endif #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4311 4312 4127) #endif #ifdef BMSSE42OPT # ifdef BM64OPT # undef BM64OPT # define BM64_SSE4 # endif # undef BMSSE2OPT #endif #include "bmconst.h" #include "bmdef.h" #ifdef BMSSE42OPT # define BMVECTOPT # include "bmsse4.h" #endif #ifdef BMSSE2OPT # undef BM64OPT # define BMVECTOPT # include "bmsse2.h" #endif #include "bmfwd.h" #include "bmfunc.h" #include "encoding.h" #include "bmalloc.h" #include "bmblocks.h" namespace bm { #ifdef BMCOUNTOPT # define BMCOUNT_INC ++count_; # define BMCOUNT_DEC --count_; # define BMCOUNT_VALID(x) count_is_valid_ = x; # define BMCOUNT_SET(x) count_ = x; count_is_valid_ = true; # define BMCOUNT_ADJ(x) if (x) ++count_; else --count_; #else # define BMCOUNT_INC # define BMCOUNT_DEC # define BMCOUNT_VALID(x) # define BMCOUNT_SET(x) # define BMCOUNT_ADJ(x) #endif //typedef bm::miniset mem_save_set; /** @defgroup bmagic BitMagic C++ Library * For more information please visit: http://bmagic.sourceforge.net * */ /** @defgroup bvector The Main bvector<> Group * This is the main group. It includes bvector template: front end of the bm library. * @ingroup bmagic */ /*! @brief bitvector with runtime compression of bits. @ingroup bvector */ template class bvector { public: typedef Alloc allocator_type; typedef blocks_manager blocks_manager_type; /** Type used to count bits in the bit vector */ typedef bm::id_t size_type; /** Statistical information about bitset's memory allocation details. */ struct statistics : public bv_statistics {}; /** @brief Class reference implements an object for bit assignment. Since C++ does not provide with build-in bit type supporting l-value operations we have to emulate it. @ingroup bvector */ class reference { public: reference(bvector& bv, bm::id_t position) : bv_(bv), position_(position) {} reference(const reference& ref) : bv_(ref.bv_), position_(ref.position_) { bv_.set(position_, ref.bv_.get_bit(position_)); } operator bool() const { return bv_.get_bit(position_); } const reference& operator=(const reference& ref) const { bv_.set(position_, (bool)ref); return *this; } const reference& operator=(bool value) const { bv_.set(position_, value); return *this; } bool operator==(const reference& ref) const { return bool(*this) == bool(ref); } /*! Bitwise AND. Performs operation: bit = bit AND value */ const reference& operator&=(bool value) const { bv_.set_bit_and(position_, value); return *this; } /*! Bitwise OR. Performs operation: bit = bit OR value */ const reference& operator|=(bool value) const { if (value != bv_.get_bit(position_)) { bv_.set_bit(position_); } return *this; } /*! Bitwise exclusive-OR (XOR). Performs operation: bit = bit XOR value */ const reference& operator^=(bool value) const { bv_.set(position_, value != bv_.get_bit(position_)); return *this; } /*! Logical Not operator */ bool operator!() const { return !bv_.get_bit(position_); } /*! Bit Not operator */ bool operator~() const { return !bv_.get_bit(position_); } /*! Negates the bit value */ reference& flip() { bv_.flip(position_); return *this; } private: bvector& bv_; //!< Reference variable on the parent. bm::id_t position_; //!< Position in the parent bitvector. }; typedef bool const_reference; /*! @brief Base class for all iterators. @ingroup bvector */ class iterator_base { friend class bvector; public: iterator_base() : bv_(0), position_(bm::id_max), block_(0) {} bool operator==(const iterator_base& it) const { return (position_ == it.position_) && (bv_ == it.bv_); } bool operator!=(const iterator_base& it) const { return ! operator==(it); } bool operator < (const iterator_base& it) const { return position_ < it.position_; } bool operator <= (const iterator_base& it) const { return position_ <= it.position_; } bool operator > (const iterator_base& it) const { return position_ > it.position_; } bool operator >= (const iterator_base& it) const { return position_ >= it.position_; } /** \fn bool bm::bvector::iterator_base::valid() const \brief Checks if iterator is still valid. Analog of != 0 comparison for pointers. \returns true if iterator is valid. */ bool valid() const { return position_ != bm::id_max; } /** \fn bool bm::bvector::iterator_base::invalidate() \brief Turns iterator into an invalid state. */ void invalidate() { position_ = bm::id_max; } public: /** Information about current bitblock. */ struct bitblock_descr { const bm::word_t* ptr; //!< Word pointer. unsigned bits[32]; //!< Unpacked list of ON bits unsigned idx; //!< Current position in the bit list unsigned cnt; //!< Number of ON bits bm::id_t pos; //!< Last bit position before }; /** Information about current DGAP block. */ struct dgap_descr { const gap_word_t* ptr; //!< Word pointer. gap_word_t gap_len; //!< Current dgap length. }; protected: bm::bvector* bv_; //!< Pointer on parent bitvector bm::id_t position_; //!< Bit position (bit idx) const bm::word_t* block_; //!< Block pointer.(NULL-invalid) unsigned block_type_; //!< Type of block. 0-Bit, 1-GAP unsigned block_idx_; //!< Block index /*! Block type dependent information for current block. */ union block_descr { bitblock_descr bit_; //!< BitBlock related info. dgap_descr gap_; //!< DGAP block related info. } bdescr_; }; /*! @brief Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces). STL container can be converted to bvector using this iterator Insert iterator guarantees the vector will be dynamically resized (set_bit does not do that). @note If you have many bits to set it is a good idea to use output iterator instead of explicitly calling set, because iterator may implement some performance specific tricks to make sure bulk insert is fast. @ingroup bvector */ class insert_iterator { public: #ifndef BM_NO_STL typedef std::output_iterator_tag iterator_category; #endif typedef unsigned value_type; typedef void difference_type; typedef void pointer; typedef void reference; insert_iterator(bvector& bvect) : bvect_(bvect), max_bit_(bvect.size()) { } insert_iterator& operator=(bm::id_t n) { BM_ASSERT(n < bm::id_max); if (n >= max_bit_) { max_bit_ = n; if (n >= bvect_.size()) { bvect_.resize(n + 1); } } bvect_.set(n); return *this; } /*! Returns *this without doing anything (no-op) */ insert_iterator& operator*() { return *this; } /*! Returns *this. This iterator does not move (no-op) */ insert_iterator& operator++() { return *this; } /*! Returns *this. This iterator does not move (no-op)*/ insert_iterator& operator++(int) { return *this; } protected: bm::bvector& bvect_; bm::id_t max_bit_; }; /*! @brief Constant input iterator designed to enumerate "ON" bits @ingroup bvector */ class enumerator : public iterator_base { public: #ifndef BM_NO_STL typedef std::input_iterator_tag iterator_category; #endif typedef unsigned value_type; typedef unsigned difference_type; typedef unsigned* pointer; typedef unsigned& reference; public: enumerator() : iterator_base() {} enumerator(const bvector* bvect, int position) : iterator_base() { this->bv_ = const_cast*>(bvect); if (position == 0) { go_first(); } else { this->invalidate(); } } bm::id_t operator*() const { return this->position_; } bm::id_t value() const { return this->position_; } enumerator& operator++() { return this->go_up(); } enumerator operator++(int) { enumerator tmp = *this; this->go_up(); return tmp; } void go_first() { BM_ASSERT(this->bv_); #ifdef BMCOUNTOPT if (this->bv_->count_is_valid_ && this->bv_->count_ == 0) { this->invalidate(); return; } #endif blocks_manager_type* bman = &(this->bv_->blockman_); bm::word_t*** blk_root = bman->blocks_root(); this->block_idx_ = this->position_= 0; unsigned i, j; for (i = 0; i < bman->top_block_size(); ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) // not allocated { this->block_idx_ += bm::set_array_size; this->position_ += bm::bits_in_array; continue; } for (j = 0; j < bm::set_array_size; ++j,++(this->block_idx_)) { this->block_ = blk_blk[j]; if (this->block_ == 0) { this->position_ += bits_in_block; continue; } if (BM_IS_GAP(this->block_)) { this->block_type_ = 1; if (search_in_gapblock()) { return; } } else { this->block_type_ = 0; if (search_in_bitblock()) { return; } } } // for j } // for i this->invalidate(); } enumerator& go_up() { // Current block search. ++this->position_; typedef typename iterator_base::block_descr block_descr_type; block_descr_type* bdescr = &(this->bdescr_); switch (this->block_type_) { case 0: // BitBlock { // check if we can get the value from the // bits cache unsigned idx = ++(bdescr->bit_.idx); if (idx < bdescr->bit_.cnt) { this->position_ = bdescr->bit_.pos + bdescr->bit_.bits[idx]; return *this; } this->position_ += 31 - bdescr->bit_.bits[--idx]; const bm::word_t* pend = this->block_ + bm::set_block_size; while (++(bdescr->bit_.ptr) < pend) { bm::word_t w = *(bdescr->bit_.ptr); if (w) { bdescr->bit_.idx = 0; bdescr->bit_.pos = this->position_; bdescr->bit_.cnt = bm::bit_list_4(w, bdescr->bit_.bits); this->position_ += bdescr->bit_.bits[0]; return *this; } else { this->position_ += 32; } } } break; case 1: // DGAP Block { if (--(bdescr->gap_.gap_len)) { return *this; } // next gap is "OFF" by definition. if (*(bdescr->gap_.ptr) == bm::gap_max_bits - 1) { break; } gap_word_t prev = *(bdescr->gap_.ptr); unsigned int val = *(++(bdescr->gap_.ptr)); this->position_ += val - prev; // next gap is now "ON" if (*(bdescr->gap_.ptr) == bm::gap_max_bits - 1) { break; } prev = *(bdescr->gap_.ptr); val = *(++(bdescr->gap_.ptr)); bdescr->gap_.gap_len = (gap_word_t)val - prev; return *this; // next "ON" found; } default: BM_ASSERT(0); } // switch // next bit not present in the current block // keep looking in the next blocks. ++(this->block_idx_); unsigned i = this->block_idx_ >> bm::set_array_shift; unsigned top_block_size = this->bv_->blockman_.top_block_size(); for (; i < top_block_size; ++i) { bm::word_t** blk_blk = this->bv_->blockman_.blocks_root()[i]; if (blk_blk == 0) { this->block_idx_ += bm::set_array_size; this->position_ += bm::bits_in_array; continue; } unsigned j = this->block_idx_ & bm::set_array_mask; for(; j < bm::set_array_size; ++j, ++(this->block_idx_)) { this->block_ = blk_blk[j]; if (this->block_ == 0) { this->position_ += bm::bits_in_block; continue; } if (BM_IS_GAP(this->block_)) { this->block_type_ = 1; if (search_in_gapblock()) { return *this; } } else { this->block_type_ = 0; if (search_in_bitblock()) { return *this; } } } // for j } // for i this->invalidate(); return *this; } private: bool search_in_bitblock() { BM_ASSERT(this->block_type_ == 0); typedef typename iterator_base::block_descr block_descr_type; block_descr_type* bdescr = &(this->bdescr_); // now lets find the first bit in block. bdescr->bit_.ptr = this->block_; const word_t* ptr_end = this->block_ + bm::set_block_size; do { register bm::word_t w = *(bdescr->bit_.ptr); if (w) { bdescr->bit_.idx = 0; bdescr->bit_.pos = this->position_; bdescr->bit_.cnt = bm::bit_list_4(w, bdescr->bit_.bits); this->position_ += bdescr->bit_.bits[0]; return true; } else { this->position_ += 32; } } while (++(bdescr->bit_.ptr) < ptr_end); return false; } bool search_in_gapblock() { BM_ASSERT(this->block_type_ == 1); typedef typename iterator_base::block_descr block_descr_type; block_descr_type* bdescr = &(this->bdescr_); bdescr->gap_.ptr = BMGAP_PTR(this->block_); unsigned bitval = *(bdescr->gap_.ptr) & 1; ++(bdescr->gap_.ptr); for (;true;) { register unsigned val = *(bdescr->gap_.ptr); if (bitval) { gap_word_t* first = BMGAP_PTR(this->block_) + 1; if (bdescr->gap_.ptr == first) { bdescr->gap_.gap_len = (gap_word_t)val + 1; } else { bdescr->gap_.gap_len = (gap_word_t)(val - *(bdescr->gap_.ptr-1)); } return true; } this->position_ += val + 1; if (val == bm::gap_max_bits - 1) { break; } bitval ^= 1; ++(bdescr->gap_.ptr); } return false; } }; /*! @brief Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit When increment operator called current position is increased by 1. @ingroup bvector */ class counted_enumerator : public enumerator { public: #ifndef BM_NO_STL typedef std::input_iterator_tag iterator_category; #endif counted_enumerator() : bit_count_(0){} counted_enumerator(const enumerator& en) : enumerator(en) { if (this->valid()) bit_count_ = 1; } counted_enumerator& operator=(const enumerator& en) { enumerator* me = this; *me = en; if (this->valid()) this->bit_count_ = 1; return *this; } counted_enumerator& operator++() { this->go_up(); if (this->valid()) ++(this->bit_count_); return *this; } counted_enumerator operator++(int) { counted_enumerator tmp(*this); this->go_up(); if (this->valid()) ++bit_count_; return tmp; } /*! @brief Number of bits ON starting from the . Method returns number of ON bits fromn the bit 0 to the current bit For the first bit in bitvector it is 1, for the second 2 */ bm::id_t count() const { return bit_count_; } private: bm::id_t bit_count_; }; friend class iterator_base; friend class enumerator; public: #ifdef BMCOUNTOPT bvector(strategy strat = BM_BIT, const gap_word_t* glevel_len = bm::gap_len_table::_len, size_type bv_size = bm::id_max, const Alloc& alloc = Alloc()) : count_(0), count_is_valid_(true), blockman_(glevel_len, bv_size, alloc), new_blocks_strat_(strat), size_(bv_size) {} bvector(size_type bv_size, bm::strategy strat = BM_BIT, const gap_word_t* glevel_len = bm::gap_len_table::_len, const Alloc& alloc = Alloc()) : count_(0), count_is_valid_(true), blockman_(glevel_len, bv_size, alloc), new_blocks_strat_(strat), size_(bv_size) {} bvector(const bm::bvector& bvect) : count_(bvect.count_), count_is_valid_(bvect.count_is_valid_), blockman_(bvect.blockman_), new_blocks_strat_(bvect.new_blocks_strat_), size_(bvect.size_) {} #else /*! \brief Constructs bvector class \param strat - operation mode strategy, BM_BIT - default strategy, bvector use plain bitset blocks, (performance oriented strategy). BM_GAP - memory effitent strategy, bvector allocates blocks as array of intervals(gaps) and convert blocks into plain bitsets only when enthropy grows. \param glevel_len - pointer on C-style array keeping GAP block sizes. (Put bm::gap_len_table_min::_len for GAP memory saving mode) \param bv_size - bvector size (number of bits addressable by bvector), bm::id_max means "no limits" (recommended). bit vector allocates this space dynamically on demand. \sa bm::gap_len_table bm::gap_len_table_min set_new_blocks_strat */ bvector(strategy strat = BM_BIT, const gap_word_t* glevel_len = bm::gap_len_table::_len, size_type bv_size = bm::id_max, const Alloc& alloc = Alloc()) : blockman_(glevel_len, bv_size, alloc), new_blocks_strat_(strat), size_(bv_size) {} /*! \brief Constructs bvector class */ bvector(size_type bv_size, strategy strat = BM_BIT, const gap_word_t* glevel_len = bm::gap_len_table::_len, const Alloc& alloc = Alloc()) : blockman_(glevel_len, bv_size, alloc), new_blocks_strat_(strat), size_(bv_size) {} bvector(const bvector& bvect) : blockman_(bvect.blockman_), new_blocks_strat_(bvect.new_blocks_strat_), size_(bvect.size_) {} #endif bvector& operator=(const bvector& bvect) { clear(true); // memory free cleaning resize(bvect.size()); bit_or(bvect); return *this; } reference operator[](bm::id_t n) { BM_ASSERT(n < size_); return reference(*this, n); } bool operator[](bm::id_t n) const { BM_ASSERT(n < size_); return get_bit(n); } void operator &= (const bvector& bvect) { bit_and(bvect); } void operator ^= (const bvector& bvect) { bit_xor(bvect); } void operator |= (const bvector& bvect) { bit_or(bvect); } void operator -= (const bvector& bvect) { bit_sub(bvect); } bool operator < (const bvector& bvect) const { return compare(bvect) < 0; } bool operator <= (const bvector& bvect) const { return compare(bvect) <= 0; } bool operator > (const bvector& bvect) const { return compare(bvect) > 0; } bool operator >= (const bvector& bvect) const { return compare(bvect) >= 0; } bool operator == (const bvector& bvect) const { return compare(bvect) == 0; } bool operator != (const bvector& bvect) const { return compare(bvect) != 0; } bvector operator~() const { return bvector(*this).invert(); } Alloc get_allocator() const { return blockman_.get_allocator(); } /*! \brief Sets bit n. \param n - index of the bit to be set. \param val - new bit value \return TRUE if bit was changed */ bool set_bit(bm::id_t n, bool val = true) { BM_ASSERT(n < size_); return set_bit_no_check(n, val); } /*! \brief Sets bit n using bit AND with the provided value. \param n - index of the bit to be set. \param val - new bit value \return TRUE if bit was changed */ bool set_bit_and(bm::id_t n, bool val = true) { BM_ASSERT(n < size_); return and_bit_no_check(n, val); } /*! \brief Sets bit n only if current value is equal to the condition \param n - index of the bit to be set. \param val - new bit value \param condition - expected current value \return TRUE if bit was changed */ bool set_bit_conditional(bm::id_t n, bool val, bool condition) { BM_ASSERT(n < size_); if (val == condition) return false; return set_bit_conditional_impl(n, val, condition); } /*! \brief Sets bit n if val is true, clears bit n if val is false \param n - index of the bit to be set \param val - new bit value \return *this */ bvector& set(bm::id_t n, bool val = true) { set_bit(n, val); return *this; } /*! \brief Sets every bit in this bitset to 1. \return *this */ bvector& set() { BMCOUNT_VALID(false) set_range(0, size_ - 1, true); return *this; } /*! \brief Sets all bits in the specified closed interval [left,right] Interval must be inside the bvector's size. This method DOES NOT resize vector. \param left - interval start \param right - interval end (closed interval) \param value - value to set interval in \return *this */ bvector& set_range(bm::id_t left, bm::id_t right, bool value = true); /*! Function erturns insert iterator for this bitvector */ insert_iterator inserter() { return insert_iterator(*this); } /*! \brief Clears bit n. \param n - bit's index to be cleaned. */ void clear_bit(bm::id_t n) { set(n, false); } /*! \brief Clears every bit in the bitvector. \param free_mem if "true" (default) bvector frees the memory, otherwise sets blocks to 0. */ void clear(bool free_mem = false) { blockman_.set_all_zero(free_mem); BMCOUNT_SET(0); } /*! \brief Clears every bit in the bitvector. \return *this; */ bvector& reset() { clear(); return *this; } /*! \brief Returns count of bits which are 1. \return Total number of bits ON. */ bm::id_t count() const; /** \brief Returns bvector's capacity (number of bits it can store) */ size_type capacity() const { return blockman_.capacity(); } /*! \brief return current size of the vector (bits) */ size_type size() const { return size_; } /*! \brief Change size of the bvector \param new_size - new size in bits */ void resize(size_type new_size); /*! \brief Computes bitcount values for all bvector blocks \param arr - pointer on array of block bit counts \return Index of the last block counted. This number +1 gives you number of arr elements initialized during the function call. */ unsigned count_blocks(unsigned* arr) const { bm::word_t*** blk_root = blockman_.get_rootblock(); typename blocks_manager_type::block_count_arr_func func(blockman_, &(arr[0])); for_each_nzblock(blk_root, blockman_.effective_top_block_size(), func); return func.last_block(); } /*! \brief Returns count of 1 bits in the given diapason. \param left - index of first bit start counting from \param right - index of last bit \param block_count_arr - optional parameter (bitcount by bvector blocks) calculated by count_blocks method. Used to improve performance of wide range searches \return Total number of bits ON. */ bm::id_t count_range(bm::id_t left, bm::id_t right, unsigned* block_count_arr=0) const; bm::id_t recalc_count() { BMCOUNT_VALID(false) return count(); } /*! Disables count cache. Next call to count() or recalc_count() restores count caching. @note Works only if BMCOUNTOPT enabled(defined). Othewise does nothing. */ void forget_count() { BMCOUNT_VALID(false) } /*! \brief Inverts all bits. */ bvector& invert(); /*! \brief returns true if bit n is set and false is bit n is 0. \param n - Index of the bit to check. \return Bit value (1 or 0) */ bool get_bit(bm::id_t n) const; /*! \brief returns true if bit n is set and false is bit n is 0. \param n - Index of the bit to check. \return Bit value (1 or 0) */ bool test(bm::id_t n) const { return get_bit(n); } /*! \brief Returns true if any bits in this bitset are set, and otherwise returns false. \return true if any bit is set */ bool any() const { #ifdef BMCOUNTOPT if (count_is_valid_ && count_) return true; #endif word_t*** blk_root = blockman_.get_rootblock(); if (!blk_root) return false; typename blocks_manager_type::block_any_func func(blockman_); return for_each_nzblock_if(blk_root, blockman_.effective_top_block_size(), func); } /*! \brief Returns true if no bits are set, otherwise returns false. */ bool none() const { return !any(); } /*! \brief Flips bit n \return *this */ bvector& flip(bm::id_t n) { set(n, !get_bit(n)); return *this; } /*! \brief Flips all bits \return *this */ bvector& flip() { return invert(); } /*! \brief Exchanges content of bv and this bitvector. */ void swap(bvector& bv) { if (this != &bv) { blockman_.swap(bv.blockman_); bm::xor_swap(size_,bv.size_); #ifdef BMCOUNTOPT BMCOUNT_VALID(false) bv.recalc_count(); #endif } } /*! \fn bm::id_t bvector::get_first() const \brief Gets number of first bit which is ON. \return Index of the first 1 bit. \sa get_next, extract_next */ bm::id_t get_first() const { return check_or_next(0); } /*! \fn bm::id_t bvector::get_next(bm::id_t prev) const \brief Finds the number of the next bit ON. \param prev - Index of the previously found bit. \return Index of the next bit which is ON or 0 if not found. \sa get_first, extract_next */ bm::id_t get_next(bm::id_t prev) const { return (++prev == bm::id_max) ? 0 : check_or_next(prev); } /*! \fn bm::id_t bvector::extract_next(bm::id_t prev) \brief Finds the number of the next bit ON and sets it to 0. \param prev - Index of the previously found bit. \return Index of the next bit which is ON or 0 if not found. \sa get_first, get_next, */ bm::id_t extract_next(bm::id_t prev) { return (++prev == bm::id_max) ? 0 : check_or_next_extract(prev); } /*! @brief Calculates bitvector statistics. @param st - pointer on statistics structure to be filled in. Function fills statistics structure containing information about how this vector uses memory and estimation of max. amount of memory bvector needs to serialize itself. @sa statistics */ void calc_stat(struct bm::bvector::statistics* st) const; /*! \brief Logical OR operation. \param vect - Argument vector. */ bm::bvector& bit_or(const bm::bvector& vect) { BMCOUNT_VALID(false); combine_operation(vect, BM_OR); return *this; } /*! \brief Logical AND operation. \param vect - Argument vector. */ bm::bvector& bit_and(const bm::bvector& vect) { BMCOUNT_VALID(false); combine_operation(vect, BM_AND); return *this; } /*! \brief Logical XOR operation. \param vect - Argument vector. */ bm::bvector& bit_xor(const bm::bvector& vect) { BMCOUNT_VALID(false); combine_operation(vect, BM_XOR); return *this; } /*! \brief Logical SUB operation. \param vect - Argument vector. */ bm::bvector& bit_sub(const bm::bvector& vect) { BMCOUNT_VALID(false); combine_operation(vect, BM_SUB); return *this; } /*! \brief Sets new blocks allocation strategy. \param strat - Strategy code 0 - bitblocks allocation only. 1 - Blocks mutation mode (adaptive algorithm) */ void set_new_blocks_strat(strategy strat) { new_blocks_strat_ = strat; } /*! \brief Returns blocks allocation strategy. \return - Strategy code 0 - bitblocks allocation only. 1 - Blocks mutation mode (adaptive algorithm) \sa set_new_blocks_strat */ strategy get_new_blocks_strat() const { return new_blocks_strat_; } /*! \brief Optimization mode Every next level means additional checks (better compression vs time) \sa optimize */ enum optmode { opt_free_0 = 1, ///< Free unused 0 blocks opt_free_01 = 2, ///< Free unused 0 and 1 blocks opt_compress = 3 ///< compress blocks when possible }; /*! \brief Optimize memory bitvector's memory allocation. Function analyze all blocks in the bitvector, compresses blocks with a regular structure, frees some memory. This function is recommended after a bulk modification of the bitvector using set_bit, clear_bit or logical operations. Optionally function can calculate vector post optimization statistics @sa optmode, optimize_gap_size */ void optimize(bm::word_t* temp_block = 0, optmode opt_mode = opt_compress, statistics* stat = 0); /*! \brief Optimize sizes of GAP blocks This method runs an analysis to find optimal GAP levels for the specific vector. Current GAP compression algorithm uses several fixed GAP sizes. By default bvector uses some reasonable preset. */ void optimize_gap_size(); /*! @brief Sets new GAP lengths table. All GAP blocks will be reallocated to match the new scheme. @param glevel_len - pointer on C-style array keeping GAP block sizes. */ void set_gap_levels(const gap_word_t* glevel_len); /*! \brief Lexicographical comparison with a bitvector. Function compares current bitvector with the provided argument bit by bit and returns -1 if our bitvector less than the argument, 1 - greater, 0 - equal. */ int compare(const bvector& bvect) const; /*! @brief Allocates temporary block of memory. Temp block can be passed to bvector functions requiring some temp memory for their operation. (like serialize) @note method is marked const, but it's not quite true, since it can in some cases modify the state of the block allocator (if it has a state). (Can be important in MT programs). @sa free_tempblock */ bm::word_t* allocate_tempblock() const { blocks_manager_type* bm = const_cast(&blockman_); return bm->get_allocator().alloc_bit_block(); } /*! @brief Frees temporary block of memory. @note method is marked const, but it's not quite true, since it can in some cases modify the state of the block allocator (if it has a state). (Can be important in MT programs). @sa allocate_tempblock */ void free_tempblock(bm::word_t* block) const { blocks_manager_type* bm = const_cast(&blockman_); bm->get_allocator().free_bit_block(block); } /** \brief Returns enumerator pointing on the first non-zero bit. */ enumerator first() const { typedef typename bvector::enumerator enumerator_type; return enumerator_type(this, 0); } /** \fn bvector::enumerator bvector::end() const \brief Returns enumerator pointing on the next bit after the last. */ enumerator end() const { typedef typename bvector::enumerator enumerator_type; return enumerator_type(this, 1); } const bm::word_t* get_block(unsigned nb) const { return blockman_.get_block(nb); } void combine_operation(const bm::bvector& bvect, bm::operation opcode); private: bm::id_t check_or_next(bm::id_t prev) const; /// check if specified bit is 1, and set it to 0 /// if specified bit is 0, scan for the next 1 and returns it /// if no 1 found returns 0 bm::id_t check_or_next_extract(bm::id_t prev); /** \brief Set specified bit without checking preconditions (size, etc) */ bool set_bit_no_check(bm::id_t n, bool val); /** \brief AND specified bit without checking preconditions (size, etc) */ bool and_bit_no_check(bm::id_t n, bool val); bool set_bit_conditional_impl(bm::id_t n, bool val, bool condition); void combine_operation_with_block(unsigned nb, unsigned gap, bm::word_t* blk, const bm::word_t* arg_blk, int arg_gap, bm::operation opcode); public: void combine_operation_with_block(unsigned nb, const bm::word_t* arg_blk, int arg_gap, bm::operation opcode) { bm::word_t* blk = const_cast(get_block(nb)); bool gap = BM_IS_GAP(blk); combine_operation_with_block(nb, gap, blk, arg_blk, arg_gap, opcode); } private: void combine_count_operation_with_block(unsigned nb, const bm::word_t* arg_blk, int arg_gap, bm::operation opcode) { const bm::word_t* blk = get_block(nb); bool gap = BM_IS_GAP(blk); combine_count_operation_with_block(nb, gap, blk, arg_blk, arg_gap, opcode); } /** \brief Extends GAP block to the next level or converts it to bit block. \param nb - Block's linear index. \param blk - Blocks's pointer */ void extend_gap_block(unsigned nb, gap_word_t* blk) { blockman_.extend_gap_block(nb, blk); } /** \brief Set range without validity checking */ void set_range_no_check(bm::id_t left, bm::id_t right, bool value); public: const blocks_manager_type& get_blocks_manager() const { return blockman_; } blocks_manager_type& get_blocks_manager() { return blockman_; } private: // This block defines two additional hidden variables used for bitcount // optimization, in rare cases can make bitvector thread unsafe. #ifdef BMCOUNTOPT mutable id_t count_; //!< number of 1 bits in the vector mutable bool count_is_valid_; //!< actualization flag #endif blocks_manager_type blockman_; //!< bitblocks manager strategy new_blocks_strat_; //!< block allocation strategy size_type size_; //!< size in bits }; //--------------------------------------------------------------------- template inline bvector operator& (const bvector& v1, const bvector& v2) { #ifdef BM_USE_EXPLICIT_TEMP bvector ret(v1); ret.bit_and(v2); return ret; #else return bvector(v1).bit_and(v2); #endif } //--------------------------------------------------------------------- template inline bvector operator| (const bvector& v1, const bvector& v2) { #ifdef BM_USE_EXPLICIT_TEMP bvector ret(v1); ret.bit_or(v2); return ret; #else return bvector(v1).bit_or(v2); #endif } //--------------------------------------------------------------------- template inline bvector operator^ (const bvector& v1, const bvector& v2) { #ifdef BM_USE_EXPLICIT_TEMP bvector ret(v1); ret.bit_xor(v2); return ret; #else return bvector(v1).bit_xor(v2); #endif } //--------------------------------------------------------------------- template inline bvector operator- (const bvector& v1, const bvector& v2) { #ifdef BM_USE_EXPLICIT_TEMP bvector ret(v1); ret.bit_sub(v2); return ret; #else return bvector(v1).bit_sub(v2); #endif } // ----------------------------------------------------------------------- template bvector& bvector::set_range(bm::id_t left, bm::id_t right, bool value) { if (right < left) { return set_range(right, left, value); } BM_ASSERT(left < size_); BM_ASSERT(right < size_); BMCOUNT_VALID(false) BM_SET_MMX_GUARD set_range_no_check(left, right, value); return *this; } // ----------------------------------------------------------------------- template bm::id_t bvector::count() const { #ifdef BMCOUNTOPT if (count_is_valid_) return count_; #endif word_t*** blk_root = blockman_.get_rootblock(); if (!blk_root) { BMCOUNT_SET(0); return 0; } typename blocks_manager_type::block_count_func func(blockman_); for_each_nzblock2(blk_root, blockman_.effective_top_block_size(), func); BMCOUNT_SET(func.count()); return func.count(); } // ----------------------------------------------------------------------- template void bvector::resize(size_type new_size) { if (size_ == new_size) return; // nothing to do if (size_ < new_size) // size grows { blockman_.reserve(new_size); size_ = new_size; } else // shrink { set_range(new_size, size_ - 1, false); // clear the tail size_ = new_size; } } // ----------------------------------------------------------------------- template bm::id_t bvector::count_range(bm::id_t left, bm::id_t right, unsigned* block_count_arr) const { BM_ASSERT(left <= right); unsigned count = 0; // calculate logical number of start and destination blocks unsigned nblock_left = unsigned(left >> bm::set_block_shift); unsigned nblock_right = unsigned(right >> bm::set_block_shift); const bm::word_t* block = blockman_.get_block(nblock_left); bool left_gap = BM_IS_GAP(block); unsigned nbit_left = unsigned(left & bm::set_block_mask); unsigned nbit_right = unsigned(right & bm::set_block_mask); unsigned r = (nblock_left == nblock_right) ? nbit_right : (bm::bits_in_block-1); typename blocks_manager_type::block_count_func func(blockman_); if (block) { if ((nbit_left == 0) && (r == (bm::bits_in_block-1))) // whole block { if (block_count_arr) { count += block_count_arr[nblock_left]; } else { func(block);//, nblock_left); } } else { if (left_gap) { count += gap_bit_count_range(BMGAP_PTR(block), (gap_word_t)nbit_left, (gap_word_t)r); } else { count += bit_block_calc_count_range(block, nbit_left, r); } } } if (nblock_left == nblock_right) // in one block { return count + func.count(); } for (unsigned nb = nblock_left+1; nb < nblock_right; ++nb) { block = blockman_.get_block(nb); if (block_count_arr) { count += block_count_arr[nb]; } else { if (block) func(block); } } count += func.count(); block = blockman_.get_block(nblock_right); bool right_gap = BM_IS_GAP(block); if (block) { if (right_gap) { count += gap_bit_count_range(BMGAP_PTR(block), (gap_word_t)0, (gap_word_t)nbit_right); } else { count += bit_block_calc_count_range(block, 0, nbit_right); } } return count; } // ----------------------------------------------------------------------- template bvector& bvector::invert() { BMCOUNT_VALID(false) BM_SET_MMX_GUARD bm::word_t*** blk_root = blockman_.get_rootblock(); typename blocks_manager_type::block_invert_func func(blockman_); for_each_block(blk_root, blockman_.top_block_size(), func); if (size_ == bm::id_max) { set_bit_no_check(bm::id_max, false); } else { set_range_no_check(size_, bm::id_max, false); } return *this; } // ----------------------------------------------------------------------- template bool bvector::get_bit(bm::id_t n) const { BM_ASSERT(n < size_); // calculate logical block number unsigned nblock = unsigned(n >> bm::set_block_shift); const bm::word_t* block = blockman_.get_block(nblock); if (block) { // calculate word number in block and bit unsigned nbit = unsigned(n & bm::set_block_mask); unsigned is_set; if (BM_IS_GAP(block)) { is_set = gap_test(BMGAP_PTR(block), nbit); } else { unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; is_set = (block[nword] & (((bm::word_t)1) << nbit)); } return is_set != 0; } return false; } // ----------------------------------------------------------------------- template void bvector::optimize(bm::word_t* temp_block, optmode opt_mode, statistics* stat) { word_t*** blk_root = blockman_.blocks_root(); if (!temp_block) temp_block = blockman_.check_allocate_tempblock(); typename blocks_manager_type::block_opt_func opt_func(blockman_, temp_block, (int)opt_mode, stat); if (stat) { stat->bit_blocks = stat->gap_blocks = stat->max_serialize_mem = stat->memory_used = 0; ::memcpy(stat->gap_levels, blockman_.glen(), sizeof(gap_word_t) * bm::gap_levels); stat->max_serialize_mem = sizeof(id_t) * 4; } for_each_nzblock(blk_root, blockman_.effective_top_block_size(), opt_func); if (stat) { unsigned safe_inc = stat->max_serialize_mem / 10; // 10% increment if (!safe_inc) safe_inc = 256; stat->max_serialize_mem += safe_inc; stat->memory_used += sizeof(*this) - sizeof(blockman_); stat->memory_used += blockman_.mem_used(); } } // ----------------------------------------------------------------------- template void bvector::optimize_gap_size() { struct bvector::statistics st; calc_stat(&st); if (!st.gap_blocks) return; gap_word_t opt_glen[bm::gap_levels]; ::memcpy(opt_glen, st.gap_levels, bm::gap_levels * sizeof(*opt_glen)); improve_gap_levels(st.gap_length, st.gap_length + st.gap_blocks, opt_glen); set_gap_levels(opt_glen); } // ----------------------------------------------------------------------- template void bvector::set_gap_levels(const gap_word_t* glevel_len) { word_t*** blk_root = blockman_.blocks_root(); typename blocks_manager_type::gap_level_func gl_func(blockman_, glevel_len); for_each_nzblock(blk_root, blockman_.top_block_size(),gl_func); blockman_.set_glen(glevel_len); } // ----------------------------------------------------------------------- template int bvector::compare(const bvector& bvect) const { int res; unsigned bn = 0; unsigned top_blocks = blockman_.effective_top_block_size(); unsigned bvect_top_blocks = bvect.blockman_.effective_top_block_size(); if (bvect_top_blocks > top_blocks) top_blocks = bvect_top_blocks; for (unsigned i = 0; i < top_blocks; ++i) { const bm::word_t* const* blk_blk = blockman_.get_topblock(i); const bm::word_t* const* arg_blk_blk = bvect.blockman_.get_topblock(i); if (blk_blk == arg_blk_blk) { bn += bm::set_array_size; continue; } for (unsigned j = 0; j < bm::set_array_size; ++j, ++bn) { const bm::word_t* arg_blk = arg_blk_blk ? arg_blk_blk[j] : 0; const bm::word_t* blk = blk_blk ? blk_blk[j] : 0; if (blk == arg_blk) continue; // If one block is zero we check if the other one has at least // one bit ON if (!blk || !arg_blk) { const bm::word_t* pblk; bool is_gap; if (blk) { pblk = blk; res = 1; is_gap = BM_IS_GAP(blk); } else { pblk = arg_blk; res = -1; is_gap = BM_IS_GAP(arg_blk); } if (is_gap) { if (!gap_is_all_zero(BMGAP_PTR(pblk), bm::gap_max_bits)) { return res; } } else { bm::wordop_t* blk1 = (wordop_t*)pblk; bm::wordop_t* blk2 = (wordop_t*)(pblk + bm::set_block_size); if (!bit_is_all_zero(blk1, blk2)) { return res; } } continue; } bool arg_gap = BM_IS_GAP(arg_blk); bool gap = BM_IS_GAP(blk); if (arg_gap != gap) { bm::wordop_t temp_blk[bm::set_block_size_op]; bm::wordop_t* blk1; bm::wordop_t* blk2; if (gap) { gap_convert_to_bitset((bm::word_t*)temp_blk, BMGAP_PTR(blk)); blk1 = (bm::wordop_t*)temp_blk; blk2 = (bm::wordop_t*)arg_blk; } else { gap_convert_to_bitset((bm::word_t*)temp_blk, BMGAP_PTR(arg_blk)); blk1 = (bm::wordop_t*)blk; blk2 = (bm::wordop_t*)temp_blk; } res = bitcmp(blk1, blk2, bm::set_block_size_op); } else { if (gap) { res = gapcmp(BMGAP_PTR(blk), BMGAP_PTR(arg_blk)); } else { res = bitcmp((bm::wordop_t*)blk, (bm::wordop_t*)arg_blk, bm::set_block_size_op); } } if (res != 0) { return res; } } // for j } // for i return 0; } // ----------------------------------------------------------------------- template void bvector::calc_stat(struct bvector::statistics* st) const { st->bit_blocks = st->gap_blocks = st->max_serialize_mem = st->memory_used = 0; ::memcpy(st->gap_levels, blockman_.glen(), sizeof(gap_word_t) * bm::gap_levels); unsigned empty_blocks = 0; unsigned blocks_memory = 0; gap_word_t* gapl_ptr = st->gap_length; st->max_serialize_mem = sizeof(id_t) * 4; unsigned block_idx = 0; unsigned top_size = blockman_.effective_top_block_size(); // Walk the blocks, calculate statistics. for (unsigned i = 0; i < top_size; ++i) { const bm::word_t* const* blk_blk = blockman_.get_topblock(i); if (!blk_blk) { block_idx += bm::set_array_size; st->max_serialize_mem += sizeof(unsigned) + 1; continue; } for (unsigned j = 0;j < bm::set_array_size; ++j, ++block_idx) { const bm::word_t* blk = blk_blk[j]; if (IS_VALID_ADDR(blk)) { st->max_serialize_mem += empty_blocks << 2; empty_blocks = 0; if (BM_IS_GAP(blk)) { ++(st->gap_blocks); bm::gap_word_t* gap_blk = BMGAP_PTR(blk); unsigned mem_used = bm::gap_capacity(gap_blk, blockman_.glen()) * sizeof(gap_word_t); *gapl_ptr = gap_length(gap_blk); st->max_serialize_mem += *gapl_ptr * sizeof(gap_word_t); blocks_memory += mem_used; ++gapl_ptr; } else // bit block { ++(st->bit_blocks); unsigned mem_used = sizeof(bm::word_t) * bm::set_block_size; st->max_serialize_mem += mem_used; blocks_memory += mem_used; } } else { ++empty_blocks; } } } unsigned safe_inc = st->max_serialize_mem / 10; // 10% increment if (!safe_inc) safe_inc = 256; st->max_serialize_mem += safe_inc; // Calc size of different odd and temporary things. st->memory_used += sizeof(*this) - sizeof(blockman_); st->memory_used += blockman_.mem_used(); st->memory_used += blocks_memory; } // ----------------------------------------------------------------------- template bool bvector::set_bit_no_check(bm::id_t n, bool val) { // calculate logical block number unsigned nblock = unsigned(n >> bm::set_block_shift); int block_type; bm::word_t* blk = blockman_.check_allocate_block(nblock, val, get_new_blocks_strat(), &block_type); if (!blk) return false; // calculate word number in block and bit unsigned nbit = unsigned(n & bm::set_block_mask); if (block_type == 1) // gap { unsigned is_set; unsigned new_block_len; new_block_len = gap_set_value(val, BMGAP_PTR(blk), nbit, &is_set); if (is_set) { BMCOUNT_ADJ(val) unsigned threshold = bm::gap_limit(BMGAP_PTR(blk), blockman_.glen()); if (new_block_len > threshold) { extend_gap_block(nblock, BMGAP_PTR(blk)); } return true; } } else // bit block { unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = blk + nword; bm::word_t mask = (((bm::word_t)1) << nbit); if (val) { if ( ((*word) & mask) == 0 ) { *word |= mask; // set bit BMCOUNT_INC; return true; } } else { if ((*word) & mask) { *word &= ~mask; // clear bit BMCOUNT_DEC; return true; } } } return false; } // ----------------------------------------------------------------------- template bool bvector::set_bit_conditional_impl(bm::id_t n, bool val, bool condition) { // calculate logical block number unsigned nblock = unsigned(n >> bm::set_block_shift); int block_type; bm::word_t* blk = blockman_.check_allocate_block(nblock, val, get_new_blocks_strat(), &block_type); if (!blk) return false; // calculate word number in block and bit unsigned nbit = unsigned(n & bm::set_block_mask); if (block_type == 1) // gap { bm::gap_word_t* gap_blk = BMGAP_PTR(blk); bool old_val = (gap_test(gap_blk, nbit) != 0); if (old_val != condition) { return false; } if (val != old_val) { unsigned is_set; unsigned new_block_len = gap_set_value(val, gap_blk, nbit, &is_set); BM_ASSERT(is_set); BMCOUNT_ADJ(val) unsigned threshold = bm::gap_limit(gap_blk, blockman_.glen()); if (new_block_len > threshold) { extend_gap_block(nblock, gap_blk); } return true; } } else // bit block { unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = blk + nword; bm::word_t mask = (((bm::word_t)1) << nbit); bool is_set = ((*word) & mask) != 0; if (is_set != condition) { return false; } if (is_set != val) // need to change bit { if (val) // set bit { *word |= mask; BMCOUNT_INC; } else // clear bit { *word &= ~mask; BMCOUNT_DEC; } return true; } } return false; } // ----------------------------------------------------------------------- template bool bvector::and_bit_no_check(bm::id_t n, bool val) { // calculate logical block number unsigned nblock = unsigned(n >> bm::set_block_shift); int block_type; bm::word_t* blk = blockman_.check_allocate_block(nblock, val, get_new_blocks_strat(), &block_type); if (!blk) return false; // calculate word number in block and bit unsigned nbit = unsigned(n & bm::set_block_mask); if (block_type == 1) // gap { bm::gap_word_t* gap_blk = BMGAP_PTR(blk); bool old_val = (gap_test(gap_blk, nbit) != 0); bool new_val = val & old_val; if (new_val != old_val) { unsigned is_set; unsigned new_block_len = gap_set_value(new_val, gap_blk, nbit, &is_set); BM_ASSERT(is_set); BMCOUNT_ADJ(val) unsigned threshold = bm::gap_limit(gap_blk, blockman_.glen()); if (new_block_len > threshold) { extend_gap_block(nblock, gap_blk); } return true; } } else // bit block { unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = blk + nword; bm::word_t mask = (((bm::word_t)1) << nbit); bool is_set = ((*word) & mask) != 0; bool new_val = is_set & val; if (new_val != val) // need to change bit { if (new_val) // set bit { *word |= mask; BMCOUNT_INC; } else // clear bit { *word &= ~mask; BMCOUNT_DEC; } return true; } } return false; } //--------------------------------------------------------------------- template bm::id_t bvector::check_or_next(bm::id_t prev) const { for (;;) { unsigned nblock = unsigned(prev >> bm::set_block_shift); if (nblock >= bm::set_total_blocks) break; if (blockman_.is_subblock_null(nblock >> bm::set_array_shift)) { prev += (bm::set_blkblk_mask + 1) - (prev & bm::set_blkblk_mask); } else { unsigned nbit = unsigned(prev & bm::set_block_mask); int no_more_blocks; const bm::word_t* block = blockman_.get_block(nblock, &no_more_blocks); if (no_more_blocks) { BM_ASSERT(block == 0); break; } if (block) { if (IS_FULL_BLOCK(block)) return prev; if (BM_IS_GAP(block)) { if (bm::gap_find_in_block(BMGAP_PTR(block), nbit, &prev)) { return prev; } } else { if (bm::bit_find_in_block(block, nbit, &prev)) { return prev; } } } else { prev += (bm::set_block_mask + 1) - (prev & bm::set_block_mask); } } if (!prev) break; } return 0; } //--------------------------------------------------------------------- template bm::id_t bvector::check_or_next_extract(bm::id_t prev) { for (;;) { unsigned nblock = unsigned(prev >> bm::set_block_shift); if (nblock >= bm::set_total_blocks) break; if (blockman_.is_subblock_null(nblock >> bm::set_array_shift)) { prev += (bm::set_blkblk_mask + 1) - (prev & bm::set_blkblk_mask); } else { unsigned nbit = unsigned(prev & bm::set_block_mask); int no_more_blocks; bm::word_t* block = blockman_.get_block(nblock, &no_more_blocks); if (no_more_blocks) { BM_ASSERT(block == 0); break; } if (block) { if (IS_FULL_BLOCK(block)) { set(prev, false); return prev; } if (BM_IS_GAP(block)) { unsigned is_set; unsigned new_block_len = gap_set_value(0, BMGAP_PTR(block), nbit, &is_set); if (is_set) { BMCOUNT_DEC unsigned threshold = bm::gap_limit(BMGAP_PTR(block), blockman_.glen()); if (new_block_len > threshold) { extend_gap_block(nblock, BMGAP_PTR(block)); } return prev; } else { if (bm::gap_find_in_block(BMGAP_PTR(block), nbit, &prev)) { set(prev, false); return prev; } } } else // bit block { if (bm::bit_find_in_block(block, nbit, &prev)) { BMCOUNT_DEC unsigned nbit = unsigned(prev & bm::set_block_mask); unsigned nword = unsigned(nbit >> bm::set_word_shift); nbit &= bm::set_word_mask; bm::word_t* word = block + nword; bm::word_t mask = ((bm::word_t)1) << nbit; *word &= ~mask; return prev; } } } else { prev += (bm::set_block_mask + 1) - (prev & bm::set_block_mask); } } if (!prev) break; } return 0; } //--------------------------------------------------------------------- template void bvector::combine_operation( const bm::bvector& bvect, bm::operation opcode) { typedef void (*block_bit_op)(bm::word_t*, const bm::word_t*); typedef void (*block_bit_op_next)(bm::word_t*, const bm::word_t*, bm::word_t*, const bm::word_t*); unsigned top_blocks = blockman_.top_block_size(); unsigned bvect_top_blocks = bvect.blockman_.top_block_size(); if (size_ == bvect.size_) { BM_ASSERT(top_blocks >= bvect_top_blocks); } else if (size_ < bvect.size_) // this vect shorter than the arg. { size_ = bvect.size_; // stretch our capacity blockman_.reserve_top_blocks(bvect_top_blocks); top_blocks = blockman_.top_block_size(); } else if (size_ > bvect.size_) // this vector larger { if (opcode == BM_AND) // clear the tail with zeros { set_range(bvect.size_, size_ - 1, false); if (bvect_top_blocks < top_blocks) { // not to scan blocks we already swiped top_blocks = bvect_top_blocks; } } } bm::word_t*** blk_root = blockman_.blocks_root(); unsigned block_idx = 0; unsigned i, j; BM_SET_MMX_GUARD // calculate effective top size to avoid overscan top_blocks = blockman_.effective_top_block_size(); if (top_blocks < bvect.blockman_.effective_top_block_size()) { if (opcode != BM_AND) { top_blocks = bvect.blockman_.effective_top_block_size(); } } for (i = 0; i < top_blocks; ++i) { bm::word_t** blk_blk = blk_root[i]; if (blk_blk == 0) // not allocated { if (opcode == BM_AND) // 0 AND anything == 0 { block_idx += bm::set_array_size; continue; } const bm::word_t* const* bvbb = bvect.blockman_.get_topblock(i); if (bvbb == 0) // skip it because 0 OP 0 == 0 { block_idx += bm::set_array_size; continue; } // 0 - self, non-zero argument unsigned r = i * bm::set_array_size; for (j = 0; j < bm::set_array_size; ++j) { const bm::word_t* arg_blk = bvect.blockman_.get_block(i, j); if (arg_blk ) combine_operation_with_block(r + j, 0, 0, arg_blk, BM_IS_GAP(arg_blk), opcode); } // for j continue; } if (opcode == BM_AND) { unsigned r = i * bm::set_array_size; for (j = 0; j < bm::set_array_size; ++j) { bm::word_t* blk = blk_blk[j]; if (blk) { const bm::word_t* arg_blk = bvect.blockman_.get_block(i, j); if (arg_blk) combine_operation_with_block(r + j, BM_IS_GAP(blk), blk, arg_blk, BM_IS_GAP(arg_blk), opcode); else blockman_.zero_block(i, j); } } // for j } else // OR, SUB, XOR { unsigned r = i * bm::set_array_size; for (j = 0; j < bm::set_array_size; ++j) { bm::word_t* blk = blk_blk[j]; const bm::word_t* arg_blk = bvect.blockman_.get_block(i, j); if (arg_blk || blk) combine_operation_with_block(r + j, BM_IS_GAP(blk), blk, arg_blk, BM_IS_GAP(arg_blk), opcode); } // for j } } // for i } //--------------------------------------------------------------------- template void bvector::combine_operation_with_block(unsigned nb, unsigned gap, bm::word_t* blk, const bm::word_t* arg_blk, int arg_gap, bm::operation opcode) { gap_word_t tmp_buf[bm::gap_equiv_len * 3]; // temporary result const bm::gap_word_t* res; unsigned res_len; int level; unsigned threshold; if (opcode == BM_OR || opcode == BM_XOR) { if (!blk && arg_gap) { res = BMGAP_PTR(arg_blk); res_len = bm::gap_length(res); level = -1; threshold = 0; goto assign_gap_result; } } if (gap) // our block GAP-type { if (arg_gap) // both blocks GAP-type { { gap_operation_func_type gfunc = operation_functions::gap_operation(opcode); BM_ASSERT(gfunc); res = (*gfunc)(BMGAP_PTR(blk), BMGAP_PTR(arg_blk), tmp_buf, res_len); } BM_ASSERT(res == tmp_buf); ++res_len;// = bm::gap_length(res); BM_ASSERT(!(res == tmp_buf && res_len == 0)); // if as a result of the operation gap block turned to zero // we can now replace it with NULL if (gap_is_all_zero(res, bm::gap_max_bits)) { blockman_.zero_block(nb); return; } // mutation check level = gap_level(BMGAP_PTR(blk)); threshold = blockman_.glen(level)-4; assign_gap_result: int new_level = gap_calc_level(res_len, blockman_.glen()); if (new_level == -1) { blockman_.convert_gap2bitset(nb, res, res_len-1); return; } if (res_len > threshold) { gap_word_t* new_blk = blockman_.allocate_gap_block(new_level, res); set_gap_level(new_blk, new_level); bm::word_t* p = (bm::word_t*)new_blk; BMSET_PTRGAP(p); if (blk) { blockman_.set_block_ptr(nb, p); blockman_.get_allocator().free_gap_block(BMGAP_PTR(blk), blockman_.glen()); } else { blockman_.set_block(nb, p, true); // set GAP block } return; } // gap operation result is in the temporary buffer // we copy it back to the gap_block BM_ASSERT(blk); set_gap_level(tmp_buf, level); ::memcpy(BMGAP_PTR(blk), tmp_buf, res_len * sizeof(gap_word_t)); return; } else // argument is BITSET-type (own block is GAP) { // since we can not combine blocks of mixed type // we need to convert our block to bitset if (arg_blk == 0) // Combining against an empty block { switch (opcode) { case BM_AND: // ("Value" AND 0) == 0 blockman_.zero_block(nb); return; case BM_OR: case BM_SUB: case BM_XOR: return; // nothing to do } } gap_word_t* gap_blk = BMGAP_PTR(blk); if (opcode == BM_AND) { unsigned gap_cnt = gap_bit_count(gap_blk); if (gap_cnt < 128) { gap_word_t tmp_buf[bm::gap_equiv_len * 3]; gap_word_t arr_len = gap_convert_to_arr(tmp_buf, gap_blk, bm::gap_equiv_len-10); BM_ASSERT(gap_cnt == arr_len); blockman_.zero_block(nb); unsigned arr_i = 0; int block_type; blk = blockman_.check_allocate_block(nb, true, BM_GAP, &block_type, false //no null return ); BM_ASSERT(block_type==1); // GAP gap_blk = BMGAP_PTR(blk); unsigned threshold = bm::gap_limit(gap_blk, blockman_.glen()); for (; arr_i < arr_len; ++arr_i) { gap_word_t bit_idx = tmp_buf[arr_i]; if (bm::test_bit(arg_blk, bit_idx)) { unsigned is_set; unsigned new_block_len = gap_set_value(true, gap_blk, bit_idx, &is_set); BM_ASSERT(is_set); if (new_block_len > threshold) { gap_blk = blockman_.extend_gap_block(nb, gap_blk); if (gap_blk == 0) // mutated into bit-block { blk = blockman_.check_allocate_block( nb, true, this->get_new_blocks_strat(), &block_type, false // no null return ); BM_ASSERT(block_type == 0); // BIT // target block degraded into plain bit-block for (++arr_i; arr_i < arr_len; ++arr_i) { bit_idx = tmp_buf[arr_i]; if (bm::test_bit(arg_blk, bit_idx)) { or_bit_block(blk, bit_idx, 1); } } // for arr_i return; } // if gap mutated } } // for arr_i } return; } } // BM_AND blk = blockman_.convert_gap2bitset(nb, gap_blk); } } else // our block is BITSET-type { if (arg_gap) // argument block is GAP-type { if (IS_VALID_ADDR(blk)) { // special case, maybe we can do the job without // converting the GAP argument to bitblock gap_operation_to_bitset_func_type gfunc = operation_functions::gap_op_to_bit(opcode); BM_ASSERT(gfunc); (*gfunc)(blk, BMGAP_PTR(arg_blk)); return; } // the worst case we need to convert argument block to // bitset type. gap_word_t* temp_blk = (gap_word_t*) blockman_.check_allocate_tempblock(); arg_blk = gap_convert_to_bitset_smart((bm::word_t*)temp_blk, BMGAP_PTR(arg_blk), bm::gap_max_bits); } } // Now here we combine two plain bitblocks using supplied bit function. bm::word_t* dst = blk; bm::word_t* ret; if (dst == 0 && arg_blk == 0) { return; } switch (opcode) { case BM_AND: ret = bit_operation_and(dst, arg_blk); goto copy_block; case BM_XOR: ret = bit_operation_xor(dst, arg_blk); if (ret && (ret == arg_blk) && IS_FULL_BLOCK(dst)) { ret = blockman_.get_allocator().alloc_bit_block(); #ifdef BMVECTOPT VECT_XOR_ARR_2_MASK(ret, arg_blk, arg_blk + bm::set_block_size, bm::all_bits_mask); #else bm::wordop_t* dst_ptr = (wordop_t*)ret; const bm::wordop_t* wrd_ptr = (wordop_t*) arg_blk; const bm::wordop_t* wrd_end = (wordop_t*) (arg_blk + bm::set_block_size); do { dst_ptr[0] = bm::all_bits_mask ^ wrd_ptr[0]; dst_ptr[1] = bm::all_bits_mask ^ wrd_ptr[1]; dst_ptr[2] = bm::all_bits_mask ^ wrd_ptr[2]; dst_ptr[3] = bm::all_bits_mask ^ wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif break; } goto copy_block; case BM_OR: ret = bit_operation_or(dst, arg_blk); copy_block: if (ret && (ret == arg_blk) && !IS_FULL_BLOCK(ret)) { ret = blockman_.get_allocator().alloc_bit_block(); bit_block_copy(ret, arg_blk); } break; case BM_SUB: ret = bit_operation_sub(dst, arg_blk); if (ret && ret == arg_blk) { ret = blockman_.get_allocator().alloc_bit_block(); #ifdef BMVECTOPT VECT_ANDNOT_ARR_2_MASK(ret, arg_blk, arg_blk + bm::set_block_size, bm::all_bits_mask); #else bm::wordop_t* dst_ptr = (wordop_t*)ret; const bm::wordop_t* wrd_ptr = (wordop_t*) arg_blk; const bm::wordop_t* wrd_end = (wordop_t*) (arg_blk + bm::set_block_size); do { dst_ptr[0] = bm::all_bits_mask & ~wrd_ptr[0]; dst_ptr[1] = bm::all_bits_mask & ~wrd_ptr[1]; dst_ptr[2] = bm::all_bits_mask & ~wrd_ptr[2]; dst_ptr[3] = bm::all_bits_mask & ~wrd_ptr[3]; dst_ptr+=4; wrd_ptr+=4; } while (wrd_ptr < wrd_end); #endif } break; default: BM_ASSERT(0); ret = 0; } if (ret != dst) // block mutation { blockman_.set_block(nb, ret); blockman_.get_allocator().free_bit_block(dst); } } //--------------------------------------------------------------------- template void bvector::set_range_no_check(bm::id_t left, bm::id_t right, bool value) { // calculate logical number of start and destination blocks unsigned nblock_left = unsigned(left >> bm::set_block_shift); unsigned nblock_right = unsigned(right >> bm::set_block_shift); bm::word_t* block = blockman_.get_block(nblock_left); bool left_gap = BM_IS_GAP(block); unsigned nbit_left = unsigned(left & bm::set_block_mask); unsigned nbit_right = unsigned(right & bm::set_block_mask); unsigned r = (nblock_left == nblock_right) ? nbit_right :(bm::bits_in_block-1); bm::gap_word_t tmp_gap_blk[5] = {0,}; // Set bits in the starting block unsigned nb; if ((nbit_left == 0) && (r == bm::bits_in_block - 1)) // full block { nb = nblock_left; } else { gap_init_range_block(tmp_gap_blk, (gap_word_t)nbit_left, (gap_word_t)r, (gap_word_t)value, bm::bits_in_block); combine_operation_with_block(nblock_left, left_gap, block, (bm::word_t*) tmp_gap_blk, 1, value ? BM_OR : BM_AND); if (nblock_left == nblock_right) // in one block return; nb = nblock_left+1; } // Set (or clear) all full blocks between left and right unsigned nb_to = nblock_right + (nbit_right ==(bm::bits_in_block-1)); if (value) { for (; nb < nb_to; ++nb) { block = blockman_.get_block(nb); if (IS_FULL_BLOCK(block)) continue; blockman_.set_block(nb, FULL_BLOCK_ADDR); blockman_.free_block(block); } // for } else // value == 0 { for (; nb < nb_to; ++nb) { block = blockman_.get_block(nb); if (block == 0) // nothing to do continue; blockman_.set_block(nb, 0, false /*bit*/); blockman_.free_block(block); } // for } // if value else if (nb_to > nblock_right) return; block = blockman_.get_block(nblock_right); bool right_gap = BM_IS_GAP(block); gap_init_range_block(tmp_gap_blk, (gap_word_t)0, (gap_word_t)nbit_right, (gap_word_t)value, bm::bits_in_block); combine_operation_with_block(nblock_right, right_gap, block, (bm::word_t*) tmp_gap_blk, 1, value ? BM_OR : BM_AND); } //--------------------------------------------------------------------- } // namespace #include "bmundef.h" #ifdef _MSC_VER #pragma warning( pop ) #endif #endif bm3.7.0/src/bmalgo.h0000644000175000017500000000251611365120467012422 0ustar tlktlk#ifndef BMALGO__H__INCLUDED__ #define BMALGO__H__INCLUDED__ /* Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include "bm.h" #include "bmfunc.h" #include "bmdef.h" #include "bmalgo_impl.h" #include "bmundef.h" #endif bm3.7.0/src/encoding.h0000644000175000017500000004744511365120467012761 0ustar tlktlk#ifndef BMENCODING_H__INCLUDED__ #define BMENCODING_H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include #include "bmutil.h" namespace bm { // ---------------------------------------------------------------- /*! \brief Memory encoding. Class for encoding data into memory. Properly handles aligment issues with integer data types. */ class encoder { public: typedef unsigned char* position_type; public: encoder(unsigned char* buf, unsigned size); void put_8(unsigned char c); void put_16(bm::short_t s); void put_16(const bm::short_t* s, unsigned count); void put_32(bm::word_t w); void put_32(const bm::word_t* w, unsigned count); void put_prefixed_array_32(unsigned char c, const bm::word_t* w, unsigned count); void put_prefixed_array_16(unsigned char c, const bm::short_t* s, unsigned count, bool encode_count); unsigned size() const; unsigned char* get_pos() const; void set_pos(unsigned char* buf_pos); private: unsigned char* buf_; unsigned char* start_; unsigned int size_; }; // ---------------------------------------------------------------- /** Base class for all decoding functionality */ class decoder_base { public: decoder_base(const unsigned char* buf) { buf_ = start_ = buf; } /// Reads character from the decoding buffer. BMFORCEINLINE unsigned char get_8() { return *buf_++; } /// Returns size of the current decoding stream. BMFORCEINLINE unsigned size() const { return (unsigned)(buf_ - start_); } /// change current position BMFORCEINLINE void seek(int delta) { buf_ += delta; } protected: const unsigned char* buf_; const unsigned char* start_; }; // ---------------------------------------------------------------- /** Class for decoding data from memory buffer. Properly handles aligment issues with integer data types. */ class decoder : public decoder_base { public: decoder(const unsigned char* buf); bm::short_t get_16(); bm::word_t get_32(); void get_32(bm::word_t* w, unsigned count); void get_16(bm::short_t* s, unsigned count); }; // ---------------------------------------------------------------- /** Class for decoding data from memory buffer. Properly handles aligment issues with integer data types. Converts data to big endian architecture (presumed it was encoded as little endian) */ typedef decoder decoder_big_endian; // ---------------------------------------------------------------- /** Class for decoding data from memory buffer. Properly handles aligment issues with integer data types. Converts data to little endian architecture (presumed it was encoded as big endian) */ class decoder_little_endian : public decoder_base { public: decoder_little_endian(const unsigned char* buf); bm::short_t get_16(); bm::word_t get_32(); void get_32(bm::word_t* w, unsigned count); void get_16(bm::short_t* s, unsigned count); }; /** Byte based writer for un-aligned bit streaming @sa encoder */ template class bit_out { public: bit_out(TEncoder& dest) : dest_(dest), used_bits_(0), accum_(0) {} ~bit_out() { if (used_bits_) dest_.put_32(accum_); } void put_bit(unsigned value) { BM_ASSERT(value <= 1); accum_ |= (value << used_bits_); if (++used_bits_ == (sizeof(accum_) * 8)) flush_accum(); } void put_bits(unsigned value, unsigned count) { unsigned used = used_bits_; unsigned acc = accum_; { unsigned mask = ~0; mask >>= (sizeof(accum_) * 8) - count; value &= mask; } for (;count;) { acc |= value << used; unsigned free_bits = (sizeof(accum_) * 8) - used; if (count <= free_bits) { used += count; break; } else { value >>= free_bits; count -= free_bits; dest_.put_32(acc); acc = used = 0; continue; } } used_bits_ = used; accum_ = acc; } void put_zero_bit() { if (++used_bits_ == (sizeof(accum_) * 8)) flush_accum(); } void put_zero_bits(register unsigned count) { register unsigned used = used_bits_; unsigned free_bits = (sizeof(accum_) * 8) - used; if (count >= free_bits) { flush_accum(); count -= free_bits; used = 0; for ( ;count >= sizeof(accum_) * 8; count -= sizeof(accum_) * 8) { dest_.put_32(0); } used += count; } else { used += count; } accum_ |= (1 << used); if (++used == (sizeof(accum_) * 8)) flush_accum(); else used_bits_ = used; } void gamma(unsigned value) { BM_ASSERT(value); unsigned logv = #if defined(BM_x86) && (defined(__GNUG__) || defined(_MSC_VER)) bm::bsr_asm32(value); #else bm::ilog2_LUT(value); #endif // Put zeroes + 1 bit unsigned used = used_bits_; unsigned acc = accum_; const unsigned acc_bits = (sizeof(acc) * 8); unsigned free_bits = acc_bits - used; { unsigned count = logv; if (count >= free_bits) { dest_.put_32(acc); acc = used ^= used; count -= free_bits; for ( ;count >= acc_bits; count -= acc_bits) { dest_.put_32(0); } used += count; } else { used += count; } acc |= (1 << used); if (++used == acc_bits) { dest_.put_32(acc); acc = used ^= used; } } // Put the value bits // { unsigned mask = (~0u); mask >>= acc_bits - logv; value &= mask; } for (;logv;) { acc |= value << used; free_bits = acc_bits - used; if (logv <= free_bits) { used += logv; break; } else { value >>= free_bits; logv -= free_bits; dest_.put_32(acc); acc = used ^= used; continue; } } // for used_bits_ = used; accum_ = acc; } void flush() { if (used_bits_) flush_accum(); } private: void flush_accum() { dest_.put_32(accum_); used_bits_ = accum_ = 0; } private: bit_out(const bit_out&); bit_out& operator=(const bit_out&); private: TEncoder& dest_; ///< Bit stream target unsigned used_bits_; ///< Bits used in the accumulator unsigned accum_; ///< write bit accumulator }; /** Byte based reader for un-aligned bit streaming @sa encoder */ template class bit_in { public: bit_in(TDecoder& decoder) : src_(decoder), used_bits_(sizeof(accum_) * 8), accum_(0) { } unsigned gamma() { unsigned acc = accum_; unsigned used = used_bits_; if (used == (sizeof(acc) * 8)) { acc = src_.get_32(); used ^= used; } unsigned zero_bits = 0; while (true) { if (acc == 0) { zero_bits += (sizeof(acc) * 8) - used; used = 0; acc = src_.get_32(); continue; } unsigned first_bit_idx = #if defined(BM_x86) && (defined(__GNUG__) || defined(_MSC_VER)) bm::bsf_asm32(acc); #else bm::bit_scan_fwd(acc); #endif acc >>= first_bit_idx; zero_bits += first_bit_idx; used += first_bit_idx; break; } // while // eat the border bit // if (used == (sizeof(acc) * 8)) { acc = src_.get_32(); used = 1; } else { ++used; } acc >>= 1; // get the value unsigned current; unsigned free_bits = (sizeof(acc) * 8) - used; if (zero_bits <= free_bits) { take_accum: current = (acc & block_set_table::_left[zero_bits]) | (1 << zero_bits); acc >>= zero_bits; used += zero_bits; goto ret; } if (used == (sizeof(acc) * 8)) { acc = src_.get_32(); used ^= used; goto take_accum; } // take the part current = acc; // read the next word acc = src_.get_32(); used = zero_bits - free_bits; current |= ((acc & block_set_table::_left[used]) << free_bits) | (1 << zero_bits); acc >>= used; ret: accum_ = acc; used_bits_ = used; return current; } private: bit_in(const bit_in&); bit_in& operator=(const bit_in&); private: TDecoder& src_; ///< Source of bytes unsigned used_bits_; ///< Bits used in the accumulator unsigned accum_; ///< read bit accumulator }; /** Functor for Elias Gamma encoding */ template class gamma_encoder { public: gamma_encoder(TBitIO& bout) : bout_(bout) {} /** Encode word */ BMFORCEINLINE void operator()(T value) { bout_.gamma(value); } private: gamma_encoder(const gamma_encoder&); gamma_encoder& operator=(const gamma_encoder&); private: TBitIO& bout_; }; /** Elias Gamma decoder */ template class gamma_decoder { public: gamma_decoder(TBitIO& bin) : bin_(bin) {} /** Start encoding sequence */ void start() {} /** Stop decoding sequence */ void stop() {} /** Decode word */ T operator()(void) { return (T)bin_.gamma(); } private: gamma_decoder(const gamma_decoder&); gamma_decoder& operator=(const gamma_decoder&); private: TBitIO& bin_; }; // ---------------------------------------------------------------- // Implementation details. // ---------------------------------------------------------------- /*! \fn encoder::encoder(unsigned char* buf, unsigned size) \brief Construction. \param buf - memory buffer pointer. \param size - size of the buffer */ inline encoder::encoder(unsigned char* buf, unsigned size) : buf_(buf), start_(buf), size_(size) { } /*! \grief Encode 8-bit prefix + an array */ inline void encoder::put_prefixed_array_32(unsigned char c, const bm::word_t* w, unsigned count) { put_8(c); put_32(w, count); } /*! \grief Encode 8-bit prefix + an array */ inline void encoder::put_prefixed_array_16(unsigned char c, const bm::short_t* s, unsigned count, bool encode_count) { put_8(c); if (encode_count) put_16((bm::short_t) count); put_16(s, count); } /*! \fn void encoder::put_8(unsigned char c) \brief Puts one character into the encoding buffer. \param c - character to encode */ BMFORCEINLINE void encoder::put_8(unsigned char c) { *buf_++ = c; } /*! \fn encoder::put_16(bm::short_t s) \brief Puts short word (16 bits) into the encoding buffer. \param s - short word to encode */ BMFORCEINLINE void encoder::put_16(bm::short_t s) { #if (BM_UNALIGNED_ACCESS_OK == 1) *((bm::short_t*)buf_) = s; buf_ += sizeof(s); #else *buf_++ = (unsigned char) s; s >>= 8; *buf_++ = (unsigned char) s; #endif } /*! \brief Method puts array of short words (16 bits) into the encoding buffer. */ inline void encoder::put_16(const bm::short_t* s, unsigned count) { #if (BM_UNALIGNED_ACCESS_OK == 1) unsigned short* buf = (unsigned short*)buf_; const bm::short_t* s_end = s + count; do { *buf++ = *s++; } while (s < s_end); buf_ = (unsigned char*)buf; #else unsigned char* buf = buf_; const bm::short_t* s_end = s + count; do { bm::short_t w16 = *s++; unsigned char a = (unsigned char) w16; unsigned char b = (unsigned char) (w16 >> 8); *buf++ = a; *buf++ = b; } while (s < s_end); buf_ = (unsigned char*)buf; #endif } /*! \fn unsigned encoder::size() const \brief Returns size of the current encoding stream. */ inline unsigned encoder::size() const { return (unsigned)(buf_ - start_); } /** \brief Get current memory stream position */ inline encoder::position_type encoder::get_pos() const { return buf_; } /** \brief Set current memory stream position */ inline void encoder::set_pos(encoder::position_type buf_pos) { buf_ = buf_pos; } /*! \fn void encoder::put_32(bm::word_t w) \brief Puts 32 bits word into encoding buffer. \param w - word to encode. */ BMFORCEINLINE void encoder::put_32(bm::word_t w) { #if (BM_UNALIGNED_ACCESS_OK == 1) *((bm::word_t*) buf_) = w; buf_ += sizeof(w); #else *buf_++ = (unsigned char) w; *buf_++ = (unsigned char) (w >> 8); *buf_++ = (unsigned char) (w >> 16); *buf_++ = (unsigned char) (w >> 24); #endif } /*! \brief Encodes array of 32-bit words */ inline void encoder::put_32(const bm::word_t* w, unsigned count) { #if (BM_UNALIGNED_ACCESS_OK == 1) bm::word_t* buf = (bm::word_t*)buf_; const bm::word_t* w_end = w + count; do { *buf++ = *w++; } while (w < w_end); buf_ = (unsigned char*)buf; #else unsigned char* buf = buf_; const bm::word_t* w_end = w + count; do { bm::word_t w32 = *w++; unsigned char a = (unsigned char) w32; unsigned char b = (unsigned char) (w32 >> 8); unsigned char c = (unsigned char) (w32 >> 16); unsigned char d = (unsigned char) (w32 >> 24); *buf++ = a; *buf++ = b; *buf++ = c; *buf++ = d; } while (w < w_end); buf_ = (unsigned char*)buf; #endif } // --------------------------------------------------------------------- /*! \fn decoder::decoder(const unsigned char* buf) \brief Construction \param buf - pointer to the decoding memory. */ inline decoder::decoder(const unsigned char* buf) : decoder_base(buf) { } /*! \fn bm::short_t decoder::get_16() \brief Reads 16bit word from the decoding buffer. */ BMFORCEINLINE bm::short_t decoder::get_16() { #if (BM_UNALIGNED_ACCESS_OK == 1) bm::short_t a = *((bm::short_t*)buf_); #else bm::short_t a = (bm::short_t)(buf_[0] + ((bm::short_t)buf_[1] << 8)); #endif buf_ += sizeof(a); return a; } /*! \fn bm::word_t decoder::get_32() \brief Reads 32 bit word from the decoding buffer. */ BMFORCEINLINE bm::word_t decoder::get_32() { #if (BM_UNALIGNED_ACCESS_OK == 1) bm::word_t a = *((bm::word_t*)buf_); #else bm::word_t a = buf_[0]+ ((unsigned)buf_[1] << 8) + ((unsigned)buf_[2] << 16) + ((unsigned)buf_[3] << 24); #endif buf_+=sizeof(a); return a; } /*! \fn void decoder::get_32(bm::word_t* w, unsigned count) \brief Reads block of 32-bit words from the decoding buffer. \param w - pointer on memory block to read into. \param count - size of memory block in words. */ inline void decoder::get_32(bm::word_t* w, unsigned count) { if (!w) { seek(count * 4); return; } #if (BM_UNALIGNED_ACCESS_OK == 1) memcpy(w, buf_, count * sizeof(bm::word_t)); seek(count * 4); return; #else const unsigned char* buf = buf_; const bm::word_t* w_end = w + count; do { bm::word_t a = buf[0]+ ((unsigned)buf[1] << 8) + ((unsigned)buf[2] << 16) + ((unsigned)buf[3] << 24); *w++ = a; buf += sizeof(a); } while (w < w_end); buf_ = (unsigned char*)buf; #endif } /*! \fn void decoder::get_16(bm::short_t* s, unsigned count) \brief Reads block of 32-bit words from the decoding buffer. \param s - pointer on memory block to read into. \param count - size of memory block in words. */ inline void decoder::get_16(bm::short_t* s, unsigned count) { if (!s) { seek(count * 2); return; } #if (BM_UNALIGNED_ACCESS_OK == 1) const bm::short_t* buf = (bm::short_t*)buf_; const bm::short_t* s_end = s + count; do { *s++ = *buf++; } while (s < s_end); #else const unsigned char* buf = buf_; const bm::short_t* s_end = s + count; do { bm::short_t a = (bm::short_t)(buf[0] + ((bm::short_t)buf[1] << 8)); *s++ = a; buf += sizeof(a); } while (s < s_end); #endif buf_ = (unsigned char*)buf; } // --------------------------------------------------------------------- inline decoder_little_endian::decoder_little_endian(const unsigned char* buf) : decoder_base(buf) { } BMFORCEINLINE bm::short_t decoder_little_endian::get_16() { bm::short_t a = ((bm::short_t)buf_[0] << 8) + ((bm::short_t)buf_[1]); buf_ += sizeof(a); return a; } BMFORCEINLINE bm::word_t decoder_little_endian::get_32() { bm::word_t a = ((unsigned)buf_[0] << 24)+ ((unsigned)buf_[1] << 16) + ((unsigned)buf_[2] << 8) + ((unsigned)buf_[3]); buf_+=sizeof(a); return a; } inline void decoder_little_endian::get_32(bm::word_t* w, unsigned count) { if (!w) { seek(count * 4); return; } const unsigned char* buf = buf_; const bm::word_t* w_end = w + count; do { bm::word_t a = ((unsigned)buf[0] << 24)+ ((unsigned)buf[1] << 16) + ((unsigned)buf[2] << 8) + ((unsigned)buf[3]); *w++ = a; buf += sizeof(a); } while (w < w_end); buf_ = (unsigned char*)buf; } inline void decoder_little_endian::get_16(bm::short_t* s, unsigned count) { if (!s) { seek(count * 2); return; } const unsigned char* buf = buf_; const bm::short_t* s_end = s + count; do { bm::short_t a = ((bm::short_t)buf[0] << 8) + ((bm::short_t)buf[1]); *s++ = a; buf += sizeof(a); } while (s < s_end); buf_ = (unsigned char*)buf; } } // namespace bm #endif bm3.7.0/src/bmconst.h0000644000175000017500000001346011365120467012626 0ustar tlktlk#ifndef BMCONST__H__INCLUDED__ #define BMCONST__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ namespace bm { #if defined(_WIN32) || defined (_WIN64) typedef unsigned __int64 id64_t; #else typedef unsigned long long id64_t; #endif typedef unsigned int id_t; typedef unsigned int word_t; typedef unsigned short short_t; const unsigned id_max = 0xFFFFFFFF; // Data Block parameters const unsigned set_block_size = 2048u; const unsigned set_block_shift = 16u; const unsigned set_block_mask = 0xFFFFu; const unsigned set_blkblk_mask = 0xFFFFFFu; const unsigned set_block_plain_size = set_block_size / 32u; const unsigned set_block_plain_cnt = sizeof(bm::word_t) * 8u; // Word parameters const unsigned set_word_shift = 5u; const unsigned set_word_mask = 0x1Fu; // GAP related parameters. typedef unsigned short gap_word_t; const unsigned gap_max_buff_len = 1280; const unsigned gap_length_threashold = set_block_size * 3; // should be 2-3 bits per word const unsigned gap_max_bits = 65536; const unsigned gap_equiv_len = (sizeof(bm::word_t) * bm::set_block_size) / sizeof(gap_word_t); const unsigned gap_levels = 4; const unsigned gap_max_level = bm::gap_levels - 1; // Block Array parameters const unsigned set_array_size = 256u; const unsigned set_array_shift = 8u; const unsigned set_array_mask = 0xFFu; const unsigned set_total_blocks = (bm::set_array_size * bm::set_array_size); const unsigned bits_in_block = bm::set_block_size * sizeof(bm::word_t) * 8; const unsigned bits_in_array = bm::bits_in_block * bm::set_array_size; #ifdef BM64OPT typedef id64_t wordop_t; const id64_t all_bits_mask = 0xffffffffffffffff; # define DECLARE_TEMP_BLOCK(x) bm::id64_t x[bm::set_block_size / 2]; const unsigned set_block_size_op = bm::set_block_size / 2; #else typedef word_t wordop_t; const word_t all_bits_mask = 0xffffffff; # define DECLARE_TEMP_BLOCK(x) unsigned x[bm::set_block_size]; const unsigned set_block_size_op = bm::set_block_size; #endif /*! @brief Block allocation strategies. @ingroup bvector */ enum strategy { BM_BIT = 0, //!< No GAP compression strategy. All new blocks are bit blocks. BM_GAP = 1 //!< GAP compression is ON. }; /*! @brief set representation variants @internal */ enum set_representation { set_bitset = 0, //!< Simple bitset set_gap = 1, //!< GAP-RLE compression set_array1 = 2, //!< array of set 1 values set_array0 = 3 //!< array of 0 values }; template struct DeBruijn_bit_position { static const unsigned _multiply[32]; }; template const unsigned DeBruijn_bit_position::_multiply[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; /** Structure keeps index of first right 1 bit for every byte. @ingroup bitfunc */ template struct first_bit_table { static const char _idx[256]; }; template const char first_bit_table::_idx[256] = { -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, }; //--------------------------------------------------------------------- /** Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers @ingroup bitfunc */ template struct bit_count_table { static const unsigned char _count[256]; }; template const unsigned char bit_count_table::_count[256] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8 }; } // namespace #endif bm3.7.0/src/bmsse_util.h0000644000175000017500000002355011365120467013330 0ustar tlktlk#ifndef BMSSE_UTIL__H__INCLUDED__ #define BMSSE_UTIL__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ namespace bm { /** @defgroup SSE2 Processor specific optimizations for SSE2 instructions * @ingroup bmagic */ /*! @brief SSE2 reinitialization guard class SSE2 requires to call _mm_empty() if we are intermixing MMX integer commands with floating point arithmetics. This class guards critical code fragments where SSE2 integer is used. @ingroup SSE2 */ class sse_empty_guard { public: BMFORCEINLINE sse_empty_guard() { _mm_empty(); } BMFORCEINLINE ~sse_empty_guard() { _mm_empty(); } }; /*! @brief XOR array elements to specified mask *dst = *src ^ mask @ingroup SSE2 */ BMFORCEINLINE void sse2_xor_arr_2_mask(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end, bm::word_t mask) { __m128i xmm2 = _mm_set_epi32(mask, mask, mask, mask); do { __m128i xmm1 = _mm_load_si128(src); xmm1 = _mm_xor_si128(xmm1, xmm2); _mm_store_si128(dst, xmm1); ++dst; ++src; } while (src < src_end); } /*! @brief Inverts array elements and NOT them to specified mask *dst = ~*src & mask @ingroup SSE2 */ BMFORCEINLINE void sse2_andnot_arr_2_mask(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end, bm::word_t mask) { __m128i xmm2 = _mm_set_epi32(mask, mask, mask, mask); do { //_mm_prefetch((const char*)(src)+1024, _MM_HINT_NTA); //_mm_prefetch((const char*)(src)+1088, _MM_HINT_NTA); __m128i xmm1 = _mm_load_si128(src); xmm1 = _mm_andnot_si128(xmm1, xmm2); // xmm1 = (~xmm1) & xmm2 _mm_store_si128(dst, xmm1); ++dst; ++src; } while (src < src_end); } /*! @brief AND array elements against another array *dst &= *src @ingroup SSE2 */ BMFORCEINLINE void sse2_and_arr(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end) { __m128i xmm1, xmm2; do { _mm_prefetch((const char*)(src)+512, _MM_HINT_NTA); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_and_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_and_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_and_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_and_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); } while (src < src_end); } /*! @brief OR array elements against another array *dst |= *src @ingroup SSE2 */ BMFORCEINLINE void sse2_or_arr(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end) { __m128i xmm1, xmm2; do { _mm_prefetch((const char*)(src)+512, _MM_HINT_NTA); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_or_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); } while (src < src_end); } /*! @brief OR array elements against another array *dst ^= *src @ingroup SSE2 */ BMFORCEINLINE void sse2_xor_arr(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end) { __m128i xmm1, xmm2; do { _mm_prefetch((const char*)(src)+512, _MM_HINT_NTA); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_xor_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_xor_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_xor_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_xor_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); } while (src < src_end); } /*! @brief AND-NOT (SUB) array elements against another array *dst &= ~*src @ingroup SSE2 */ BMFORCEINLINE void sse2_sub_arr(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end) { __m128i xmm1, xmm2; do { _mm_prefetch((const char*)(src)+512, _MM_HINT_NTA); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_andnot_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_andnot_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_andnot_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); xmm1 = _mm_load_si128(src++); xmm2 = _mm_load_si128(dst); xmm1 = _mm_andnot_si128(xmm1, xmm2); _mm_store_si128(dst++, xmm1); } while (src < src_end); } /*! @brief SSE2 block memset *dst = value @ingroup SSE2 */ BMFORCEINLINE void sse2_set_block(__m128i* BMRESTRICT dst, __m128i* BMRESTRICT dst_end, bm::word_t value) { __m128i xmm0 = _mm_set_epi32 (value, value, value, value); do { _mm_store_si128(dst, xmm0); /* _mm_store_si128(dst+1, xmm0); _mm_store_si128(dst+2, xmm0); _mm_store_si128(dst+3, xmm0); _mm_store_si128(dst+4, xmm0); _mm_store_si128(dst+5, xmm0); _mm_store_si128(dst+6, xmm0); _mm_store_si128(dst+7, xmm0); dst += 8; */ } while (++dst < dst_end); _mm_sfence(); } /*! @brief SSE2 block copy *dst = *src @ingroup SSE2 */ BMFORCEINLINE void sse2_copy_block(__m128i* BMRESTRICT dst, const __m128i* BMRESTRICT src, const __m128i* BMRESTRICT src_end) { __m128i xmm0, xmm1, xmm2, xmm3; do { _mm_prefetch((const char*)(src)+512, _MM_HINT_NTA); xmm0 = _mm_load_si128(src+0); xmm1 = _mm_load_si128(src+1); xmm2 = _mm_load_si128(src+2); xmm3 = _mm_load_si128(src+3); _mm_store_si128(dst+0, xmm0); _mm_store_si128(dst+1, xmm1); _mm_store_si128(dst+2, xmm2); _mm_store_si128(dst+3, xmm3); xmm0 = _mm_load_si128(src+4); xmm1 = _mm_load_si128(src+5); xmm2 = _mm_load_si128(src+6); xmm3 = _mm_load_si128(src+7); _mm_store_si128(dst+4, xmm0); _mm_store_si128(dst+5, xmm1); _mm_store_si128(dst+6, xmm2); _mm_store_si128(dst+7, xmm3); src += 8; dst += 8; } while (src < src_end); } /*! @brief Invert array elements *dst = ~*dst or *dst ^= *dst @ingroup SSE2 */ BMFORCEINLINE void sse2_invert_arr(bm::word_t* first, bm::word_t* last) { __m128i xmm1 = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); __m128i* wrd_ptr = (__m128i*)first; do { _mm_prefetch((const char*)(wrd_ptr)+512, _MM_HINT_NTA); __m128i xmm0 = _mm_load_si128(wrd_ptr); xmm0 = _mm_xor_si128(xmm0, xmm1); _mm_store_si128(wrd_ptr, xmm0); ++wrd_ptr; } while (wrd_ptr < (__m128i*)last); } BMFORCEINLINE __m128i sse2_and(__m128i a, __m128i b) { return _mm_and_si128(a, b); } BMFORCEINLINE __m128i sse2_or(__m128i a, __m128i b) { return _mm_or_si128(a, b); } BMFORCEINLINE __m128i sse2_xor(__m128i a, __m128i b) { return _mm_xor_si128(a, b); } BMFORCEINLINE __m128i sse2_sub(__m128i a, __m128i b) { return _mm_andnot_si128(b, a); } } // namespace #endif bm3.7.0/src/bmundef.h0000644000175000017500000000231511365120467012576 0ustar tlktlk// Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) // // BM library internal header // // Cleaning the BM related preprocessor defines to eliminate the risks of collision // with other programs. Please let me know if something is missing. // #undef BMCOUNT_INC #undef BMCOUNT_DEC #undef BMCOUNT_VALID #undef BMCOUNT_SET #undef BMCOUNT_ADJ #undef BMCOUNT_INC #undef BMCOUNT_DEC #undef BMCOUNT_VALID #undef BMCOUNT_SET #undef BMCOUNT_ADJ #undef BMRESTRICT #undef BMFORCEINLINE #undef BMGAP_PTR #undef BMSET_PTRGAP #undef BM_IS_GAP #undef BMPTR_SETBIT0 #undef BMPTR_CLEARBIT0 #undef BMPTR_TESTBIT0 #undef BM_SET_MMX_GUARD #undef SER_NEXT_GRP #undef BM_SET_ONE_BLOCKS #undef DECLARE_TEMP_BLOCK #undef BM_MM_EMPTY #undef BM_ASSERT #undef FULL_BLOCK_ADDR #undef IS_VALID_ADDR #undef IS_FULL_BLOCK #undef IS_EMPTY_BLOCK #undef BM_INCWORD_BITCOUNT #undef BM_MINISET_GAPLEN #undef BM_MINISET_ARRSIZE #undef BMVECTOPT #undef VECT_XOR_ARR_2_MASK #undef VECT_ANDNOT_ARR_2_MASK #undef VECT_INVERT_ARR #undef VECT_AND_ARR #undef VECT_OR_ARR #undef VECT_SUB_ARR #undef VECT_XOR_ARR #undef VECT_COPY_BLOCK #undef VECT_SET_BLOCK #undef BM_UNALIGNED_ACCESS_OK #undef BM_ALIGN16 #undef BM_ALIGN16ATTR #undef BM_x86 bm3.7.0/src/bmalloc.h0000644000175000017500000001452411365120467012574 0ustar tlktlk#ifndef BMALLOC__H__INCLUDED__ #define BMALLOC__H__INCLUDED__ /* Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include #include namespace bm { /*! @defgroup alloc Memory Allocation * Memory allocation related units * @ingroup bmagic * * @{ */ /*! @brief Default malloc based bitblock allocator class. Functions allocate and deallocate conform to STL allocator specs. @ingroup alloc */ class block_allocator { public: /** The member function allocates storage for an array of n bm::word_t elements, by calling malloc. @return pointer to the allocated memory. */ static bm::word_t* allocate(size_t n, const void *) { bm::word_t* ptr; #if defined(BMSSE2OPT) || defined(BMSSE42OPT) # ifdef _MSC_VER ptr = (bm::word_t*) ::_aligned_malloc(n * sizeof(bm::word_t), 16); #else ptr = (bm::word_t*) ::_mm_malloc(n * sizeof(bm::word_t), 16); # endif #else ptr = (bm::word_t*) ::malloc(n * sizeof(bm::word_t)); #endif if (!ptr) { throw std::bad_alloc(); } return ptr; } /** The member function frees storage for an array of n bm::word_t elements, by calling free. */ static void deallocate(bm::word_t* p, size_t) { #if defined(BMSSE2OPT) || defined(BMSSE42OPT) # ifdef _MSC_VER ::_aligned_free(p); #else ::_mm_free(p); # endif #else ::free(p); #endif } }; // ------------------------------------------------------------------------- /*! @brief Default malloc based bitblock allocator class. Functions allocate and deallocate conform to STL allocator specs. */ class ptr_allocator { public: /** The member function allocates storage for an array of n void* elements, by calling malloc. @return pointer to the allocated memory. */ static void* allocate(size_t n, const void *) { void* ptr = ::malloc(n * sizeof(void*)); if (!ptr) { throw std::bad_alloc(); } return ptr; } /** The member function frees storage for an array of n bm::word_t elements, by calling free. */ static void deallocate(void* p, size_t) { ::free(p); } }; // ------------------------------------------------------------------------- /*! @brief BM style allocator adapter. Template takes two parameters BA - allocator object for bit blocks and PA - allocator object for pointer blocks. */ template class mem_alloc { public: typedef BA block_allocator_type; typedef PA ptr_allocator_type; public: mem_alloc(const BA& block_alloc = BA(), const PA& ptr_alloc = PA()) : block_alloc_(block_alloc), ptr_alloc_(ptr_alloc) {} /*! @brief Returns copy of the block allocator object */ block_allocator_type get_block_allocator() const { return BA(block_alloc_); } /*! @brief Returns copy of the ptr allocator object */ ptr_allocator_type get_ptr_allocator() const { return PA(block_alloc_); } /*! @brief Allocates and returns bit block. @param alloc_factor indicated how many blocks we want to allocate in chunk total allocation is going to be bm::set_block_size * alloc_factor Default allocation factor is 1 */ bm::word_t* alloc_bit_block(unsigned alloc_factor = 1) { return block_alloc_.allocate(bm::set_block_size * alloc_factor, 0); } /*! @brief Frees bit block allocated by alloc_bit_block. */ void free_bit_block(bm::word_t* block, unsigned alloc_factor = 1) { if (IS_VALID_ADDR(block)) block_alloc_.deallocate(block, bm::set_block_size * alloc_factor); } /*! @brief Allocates GAP block using bit block allocator (BA). GAP blocks in BM library belong to levels. Each level has a correspondent length described in bm::gap_len_table<>. @param level GAP block level. */ bm::gap_word_t* alloc_gap_block(unsigned level, const gap_word_t* glevel_len) { BM_ASSERT(level < bm::gap_levels); unsigned len = glevel_len[level] / (sizeof(bm::word_t) / sizeof(gap_word_t)); return (bm::gap_word_t*)block_alloc_.allocate(len, 0); } /*! @brief Frees GAP block using bot block allocator (BA) */ void free_gap_block(bm::gap_word_t* block, const gap_word_t* glevel_len) { BM_ASSERT(IS_VALID_ADDR((bm::word_t*)block)); unsigned len = gap_capacity(block, glevel_len); len /= sizeof(bm::word_t) / sizeof(bm::gap_word_t); block_alloc_.deallocate((bm::word_t*)block, len); } /*! @brief Allocates block of pointers. */ void* alloc_ptr(unsigned size = bm::set_array_size) { return ptr_alloc_.allocate(size, 0); } /*! @brief Frees block of pointers. */ void free_ptr(void* p, unsigned size = bm::set_array_size) { if (p) ptr_alloc_.deallocate(p, size); } private: BA block_alloc_; PA ptr_alloc_; }; typedef mem_alloc standard_allocator; /** @} */ } // namespace bm #endif bm3.7.0/src/bmrandom.h0000644000175000017500000003152711365120467012764 0ustar tlktlk#ifndef BMRANDOM__H__INCLUDED__ #define BMRANDOM__H__INCLUDED__ /* Copyright(c) 2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information please visit: http://bmagic.sourceforge.net */ #include "bm.h" #include "bmfunc.h" #include "bmdef.h" #include #include namespace bm { /*! Class implements algorithm for random subset generation. Implemented method tries to be fair, but doesn't guarantee true randomeness. Performace note: Class holds temporary buffers and variables, so it is recommended to re-use instances over multiple calls. \ingroup setalgo */ template class random_subset { public: random_subset(); ~random_subset(); /// Get random subset of input vector /// /// @param bv_out - destination vector /// @param bv_in - input vector /// @param count - number of bits to pick /// void sample(BV& bv_out, const BV& bv_in, unsigned count); private: typedef typename BV::blocks_manager_type blocks_manager_type; private: void get_subset(BV& bv_out, const BV& bv_in, unsigned bv_in_count, unsigned count); unsigned find_max_block(); void get_random_subset(bm::word_t* blk_out, const bm::word_t* blk_src, unsigned count); static unsigned process_word(bm::word_t* blk_out, const bm::word_t* blk_src, unsigned i, unsigned count); static void get_random_array(bm::word_t* blk_out, bm::gap_word_t* bit_list, unsigned bit_list_size, unsigned count); private: random_subset(const random_subset&); random_subset& operator=(const random_subset&); private: unsigned* block_counts_; unsigned short* block_bits_take_; unsigned blocks_; bm::gap_word_t bit_list_[bm::gap_max_bits]; unsigned* block_candidates_; unsigned candidates_count_; bm::word_t* sub_block_; }; /////////////////////////////////////////////////////////////////// template random_subset::random_subset() : block_counts_(new unsigned[bm::set_total_blocks]), block_bits_take_(new bm::gap_word_t[bm::set_total_blocks]), block_candidates_(new unsigned[bm::set_total_blocks]), candidates_count_(0), sub_block_(new bm::word_t[bm::set_block_size]) { } template random_subset::~random_subset() { delete [] block_counts_; delete [] block_bits_take_; delete [] block_candidates_; delete [] sub_block_; } template void random_subset::sample(BV& bv_out, const BV& bv_in, unsigned count) { if (count == 0) { bv_out.clear(true); return; } unsigned bcnt = bv_in.count(); if (count >= bcnt) { bv_out = bv_in; return; } if (count > bcnt/2) { // build the complement vector and subtract it BV tmp_bv; unsigned delta_count = bcnt - count; get_subset(tmp_bv, bv_in, bcnt, delta_count); bv_out = bv_in; bv_out -= tmp_bv; bv_out.forget_count(); return; } get_subset(bv_out, bv_in, bcnt, count); bv_out.forget_count(); } template void random_subset::get_subset(BV& bv_out, const BV& bv_in, unsigned bcnt, unsigned count) { bv_out.clear(true); bv_out.resize(bv_in.size()); const blocks_manager_type& bman_in = bv_in.get_blocks_manager(); blocks_manager_type& bman_out = bv_out.get_blocks_manager(); bm::word_t* tmp_block = bman_out.check_allocate_tempblock(); candidates_count_ = 0; // compute bit-counts in all blocks // unsigned block_count = blocks_ = bv_in.count_blocks(block_counts_); for (unsigned i = 0; i <= block_count; ++i) { if (block_counts_[i]) { float block_percent = ((float)(block_counts_[i]+1)) / (float)bcnt; float bits_to_take = ((float)count) * block_percent; bits_to_take += 0.99f; unsigned t = (unsigned)bits_to_take; block_bits_take_[i] = (bm::gap_word_t)t; if (block_bits_take_[i] == 0) { block_bits_take_[i] = 1; } else if (block_bits_take_[i] > block_counts_[i]) block_bits_take_[i] = (gap_word_t)block_counts_[i]; BM_ASSERT(bman_in.get_block(i)); } else { block_bits_take_[i] = 0; } } // for i for (unsigned take_count = 0; count; count -= take_count) { unsigned i = find_max_block(); take_count = block_bits_take_[i]; if (take_count > count) take_count = count; if (take_count == 0) continue; const bm::word_t* blk_src = bman_in.get_block(i); BM_ASSERT(blk_src); // allocate target block bm::word_t* blk_out = bman_out.get_block(i); if (blk_out != 0) { blk_out = bman_out.deoptimize_block(i); } else { blk_out = bman_out.get_allocator().alloc_bit_block(); bman_out.set_block(i, blk_out); } if (take_count == block_counts_[i]) { // copy the whole src block if (BM_IS_GAP(blk_src)) { gap_convert_to_bitset(blk_out, BMGAP_PTR(blk_src)); } else { bm::bit_block_copy(blk_out, blk_src); } block_bits_take_[i] = 0; // exclude block from any farther picking continue; } bit_block_set(blk_out, 0); if (block_counts_[i] < 4096) // use array shuffle { unsigned arr_len; // convert source block to bit-block if (BM_IS_GAP(blk_src)) { arr_len = gap_convert_to_arr(bit_list_, BMGAP_PTR(blk_src), bm::gap_max_bits); } else // bit-block { arr_len = bit_convert_to_arr(bit_list_, blk_src, bm::gap_max_bits, bm::gap_max_bits, 0); } BM_ASSERT(arr_len); get_random_array(blk_out, bit_list_, arr_len, take_count); } else // dense block { // convert source block to bit-block if (BM_IS_GAP(blk_src)) { gap_convert_to_bitset(tmp_block, BMGAP_PTR(blk_src)); blk_src = tmp_block; } // pick random bits source block to target get_random_subset(blk_out, blk_src, take_count); } block_bits_take_[i] = 0; // exclude block from any farther picking } } template void random_subset::get_random_subset(bm::word_t* blk_out, const bm::word_t* blk_src, unsigned take_count) { for (unsigned rounds = 0; take_count && rounds < 10; ++rounds) { // pick random scan start and scan direction // unsigned i = rand() % bm::set_block_size; unsigned new_count; for (; i < bm::set_block_size && take_count; ++i) { if (blk_src[i] && (blk_out[i] != blk_src[i])) { take_count -= new_count = process_word(blk_out, blk_src, i, take_count); } } // for i } // for // if masked scan did not produce enough results.. // if (take_count) { // Find all vacant bits: do logical (src SUB out) for (unsigned i = 0; i < bm::set_block_size; ++i) { sub_block_[i] = blk_src[i] & ~blk_out[i]; } // now transform vacant bits to array, then pick random elements // unsigned arr_len = bit_convert_to_arr(bit_list_, sub_block_, bm::gap_max_bits, bm::gap_max_bits, 0); BM_ASSERT(arr_len); get_random_array(blk_out, bit_list_, arr_len, take_count); } } template unsigned random_subset::process_word(bm::word_t* blk_out, const bm::word_t* blk_src, unsigned i, unsigned count) { unsigned new_bits, mask; do { mask = rand(); mask ^= mask << 16; } while (mask == 0); unsigned src_rand = blk_src[i] & mask; new_bits = src_rand & ~blk_out[i]; if (new_bits) { unsigned new_count = bm::word_bitcount(new_bits); // check if we accidentally picked more bits than needed if (new_count > count) { BM_ASSERT(count); unsigned char blist[64]; unsigned arr_size = bm::bit_list_4(new_bits, blist); BM_ASSERT(arr_size == new_count); std::random_shuffle(blist, blist + arr_size); unsigned value = 0; for (unsigned j = 0; j < count; ++j) { value |= (1 << blist[j]); } new_bits = value; new_count = count; BM_ASSERT(bm::word_bitcount(new_bits) == count); BM_ASSERT((new_bits & ~blk_src[i]) == 0); } blk_out[i] |= new_bits; return new_count; } return 0; } template void random_subset::get_random_array(bm::word_t* blk_out, bm::gap_word_t* bit_list, unsigned bit_list_size, unsigned count) { std::random_shuffle(bit_list, bit_list + bit_list_size); for (unsigned i = 0; i < count; ++i) { bm::set_bit(blk_out, bit_list[i]); } } template unsigned random_subset::find_max_block() { if (candidates_count_) { return block_candidates_[--candidates_count_]; } unsigned candidate = 0; unsigned max_i = 0; for (unsigned i = 0; i <= blocks_; ++i) { if (block_bits_take_[i] == 0) continue; if (block_bits_take_[i] == candidate) { block_candidates_[candidates_count_++] = i; } else { unsigned diff = abs((int)block_bits_take_[i] - (int)candidate); double d = (double)diff / (double)candidate; if (d < 0.20f) // delta is statistically insignificant { block_candidates_[candidates_count_++] = i; } else if (block_bits_take_[i] > candidate) { candidate = block_bits_take_[i]; max_i = i; candidates_count_ = 0; block_candidates_[candidates_count_++] = i; } } } if (candidates_count_ > 1) { std::random_shuffle(block_candidates_, block_candidates_ + candidates_count_); return find_max_block(); } return max_i; } } // namespace #include "bmundef.h" #endif bm3.7.0/readme0000644000175000017500000000741111365120467011400 0ustar tlktlkHow to build BitMagic library: BM is small software package and you probably can just take the sources and put it into your project directly. All library sources are in src directory. However if you want to use our makefiles you need to follow the next simple instructions: Unix: ----- - Apply environment variables by runing bmenv.sh : $ . bmenv.sh - use GNU make (gmake) to build installation. $gmake rebuild or (DEBUG version) $gmake DEBUG=YES rebuild The default compiler on Unix and CygWin is g++. If you want to change the default you can do that in makefile.in (should be pretty easy to do) Windows: -------- If you use cygwin installation please follow general Unix recommendations. If you use MSVC please use supplied bm.dsw and corresponding project files. Fine tuning and optimizations: ------------------------------ All BM fine tuning parameters are controlled by the preprocessor defines. ================================================================================= BM library includes some code optimized for 64-bit systems. To turn this optimization on you need to #define BM64OPT in you makefile or in bm.h file. To turn on SSE2 optimization #define BMSSE2OPT To turn on SSE4.2 optimization #define BMSSE42OPT You will need compiler supporting Intel SSE intrinsics. (Tested with MSVC and GCC) BM64OPT and BMSSE42OPT can be used together. BM library does NOT support multiple code paths and runtime CPU identification. ================================================================================= BM library supports "restrict" keyword, some compilers (for example Intel C++ for Itanium) generate better code (out of order load-stores) when restrict keyword is helping. This option is turned OFF by default since most of the C++ compilers does not support it. To turn it ON please #define BM_HASRESTRICT in your project. Some compilers use "__restrict" keyword for this purpose. You can correct if by defineing BMRESTRICT macro to correct keyword. ================================================================================= Bitcounting optimization can be turned ON by defining BMCOUNTOPT. Please note this optimization is not completely thread safe. bvector<> template keeps mutable variable inside it and update it when it count() function is called. So it creates a certain chance that this function will be called from multiple threads and crash on updating this variable. ================================================================================= If you want to use BM library in STL-free project you need to define BM_NO_STL variable. It will disable inclusion of certain headers and also will make bvector iterators incompatible with STL algorithms (which you said you are not using anyway). ================================================================================= Different compilers use different conventions about return by value optimizations. For instance operator or for bitvector can be implemented in two different ways: --------- With explicit temp variable template inline bvector operator| (const bvector& v1, const bvector& v2) { bvector ret(v1); ret.bit_or(v2); return ret; } --------- Temp variable is hidden template inline bvector operator| (const bvector& v1, const bvector& v2) { return bvector(v1).bit_or(v2); } ---------- Some compilers can successfully optimize one or both of this cases. BM implementation uses hidden temp variable unless you define BM_USE_EXPLICIT_TEMP ================================================================================= Thank you for using BitMagic library! Anatoliy Kuznetsov (anatoliy_kuznetsov at yahoo.com) bm3.7.0/config.guess0000755000175000017500000012626011311223506012531 0ustar tlktlk#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-07-02' # This file 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 2 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, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[3456]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[3456]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: bm3.7.0/Makefile0000644000175000017500000000462611313255516011662 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002-2009 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ TARGETS_BLD = \ samples/sample1 \ samples/sample2 \ samples/sample3 \ samples/sample4 \ samples/sample5 \ samples/sample6 \ samples/sample7 \ samples/sample8 \ samples/sample9 \ samples/sample10 \ tests/stress tests/perf SHELL=/bin/sh MAKE := ${MAKE} --no-print-directory ifeq (${MAKECMDGOALS},) MAKECMDGOALS=all endif .DIRS_BLD: @for dir in $(TARGETS_BLD); \ do \ echo $$dir; \ ${MAKE} -C $$dir $(MAKECMDGOALS) ; \ if [ "$$?" != "0" ]; then exit 127; fi; \ done; \ rebuild all clean: .DIRS_BLD relprep: .DIRS_BLD $(RM) -r CVS *.plg *.ncb *.opt $(RM) -rf samples/CVS tests/CVS platforms/CVS src/CVS $(RM) -rf html $(RM) -rf src/bm__* src/*vcproj.* $(RM) -rf *.suo $(RM) -rf debug release cvsenv.sh cd platforms; dos2unix *.mk; cd - dos2unix readme *.txt cd src; dos2unix *.h chmod -x src/* chmod -x Makefile makefile.in Doxyfile license.txt *.sln readme install : .DIRS_INST bm3.7.0/doc/0000700000175000017500000000000011365042652010747 5ustar tlktlkbm3.7.0/doc/html/0000700000175000017500000000000011365042652011713 5ustar tlktlkbm3.7.0/doc/html/a00204.png0000644000175000017500000000264611365042646013254 0ustar tlktlk‰PNG  IHDR€(6qòHbKGDÿÿÿ ½§“[IDATxœí›_HSoÇ¿êK¶„ŒcXQ‚¡I7Ê"HéBAC‰é*bxcCá4êB/Ô¦QÊ HCQ‘nTRHÃ5)ÑJ0uÍ2LDÇçwQšíÌ­~þ~÷ö¾{Îó}Þw_ÎÞw'„ˆ Õº×0öf•à  r4;;æææ0>>¾µ0þ0ƒÇŽóì¤X­VÀŽ¿ð°Z­;?núå ðöãàï"$$Äk?[¨f•à  r˜T3€ÊaP9AàÍ›7¸ÿ¾¥ì­ÎçÏŸQ__¯Xœ7ˆUUU^o´utt`rrò·òCИ™™Ass³µì©Î—/_ÐÖÖ¦Xœ7DQDee% °¶¶æñ^[[&&&~+o0°¯€ïÄÄÄ`vvV±8_hµZ˜L¦ r(…"ØÞÞÆµkר¨(ÔÖÖ–——‘••…;wîàðáÃày÷îÝCyy9xžGtt4>|(å¹u늋‹eÛr:W¯^ÅÝ»w¥¸ÕÕU$%%Áf³ù­¿´´„‹/zÔmµZ N‡Ë—/CE89666|¾ßØØ‹Å‚/^ì:·»å E 011Žã°¸¸ˆ'Ož ®®CCCXYYÁüü|ø i={–?~ìGD´½½M”““C'Ož¤Û·oÓòò²×1‚@ÈétÒææ&%&&RUU¥¥¥‘ÅbñzÞØØÑÑ£G©¢¢‚æææüš³ŸÌf"W€ØØXp'µO:………©­Óé|ÛÐjµÐh4R[ žç‘™™‰®®.¸ÝnŒŒŒàÒ¥KAëGGGK¯½ÅŽŽŽ"!!­­­¸~ý:^½z£ÑˆÈÈÈ]ÇÂq, jjjàp8|Æ ´··Ãn·cÿþýHOOG^^Þ®þ »n·Û£ír¹üš%u ÑÜÜŒððpdgg#22‹‹‹Š×ð3ÇA«ÕâãÇøôé¶¶¶< ºƒ¥¥¥(++ók÷UE4 ôz}0¥K(rx÷îúúú|[€µ´´ ;;;à<6› OŸ>•mûÒÉÍÍÅÔÔqåÊ•`†ã7ƒv»ÕÕÕèêê‰'`6›1??ïwŽêêj8N<þ\6fxxHMMattíííJ A¤¤¤Àh4"-- qqq8~ü8ÊÊÊÎÓÑѳÙ,Ûö¥£×ë‘““ƒÕÕUœ;w.øAÀ™3gðèÑ#ŒΟ?ï÷¹z½MMM²‹ÁÎÎN˜ÍfäççÃápÀd2çyEêü"ðëëë488H6›-àsÿ :¢(’ÛíV$nkkK©²Ë…@ÿ(ûöíCFF†RéþuÐÐPû™Í|çÌ>3 „ˆŒ1ƒõtŒý¿†CØHÆD’µ¿!??W¯^í‰ZëµæÏŸ/ü[#4iiiX¼xñ -ˆ±Þ®íõ2ÐhkÄØ/ÕñãÇ5N"¼¦aL$ c"qh‰CØHÆDâÐ0&’ÎKΆøé§Ÿ––†eË–uQ9†;}ú4lllàååÕíc•——ãðáÃØ¸qc—´ë*=9ÿ†úüóÏQVVH$°²²ÂôéÓ1tèP¡Í¡C‡PZZªÑ×ÁÁA¸Ü[__ÈÈH\¿~‰>>>X´h¤Ré‹y m<×™æÞ½{øüóÏ»ªQ¢££qùòå2Vee%Ž9ÒeíºJOο¡öíÛ‡ . °°ùùùˆŽŽ†““Ž?.´Ù¿?’’’PXX¨¶µ†­°°£FBxx8ìííaee…ôÈç‰Ïu¦ù¥°··GNNN—µû¥Y¾|9–,Y"ìGEEáÝwßÅ믿;;;Àïÿ{gÌÕ«WãÕW_ÅñãÇ!‘Hï¿ÿ>œ‡ÀÀÀn m=÷šF¥RaíÚµ033ƒµµ5vîÜ xúô)¦L™‚½{÷ÂÖÖƒ Â_|?ÿùÏ4hlll%ç“O>ÁÒ¥KuîGEEÁÞÞýúõÃìÙ³QYY)Ü—••ôíÛ¿þõ¯Õ^ÅBBB0hÐ ã7Þ@aaa‡ýJKK1uêTDDDÀÂÂ.\Àï~÷;¡ß‰'àèè™L|òÉ'€'OžíΟ?Ñ£G«mË—/=ö?þØ©ù×WggçE¥R©÷þö.\777|ýõ×¶-,,DBBvïÞ-^~ùeüç?ÿ……Ås×#µIZnÖêÌ™3$‘HèOúÕÖÖÒ¥K—ÈÜÜœ¢££©¤¤„ŒŒŒhëÖ­¤R©èàÁƒ€víÚE*•ŠöìÙCŽŽŽÂ±NŸ>Mû÷ï׺ëÖ-266¦˜˜ª¯¯§°°0@aaaTSSC666ôé§ŸRCC%%%‘™™}ÿý÷töìY²µµ¥ÜÜ\ªªª¢™3gÒªU«ˆˆôö+(( ~ýúQ`` ]¾|™rrr¨ÿþDDTUUEÆÆÆK ”ššJFFFTZZJ<ÚÕÔÔPnn.åææÒíÛ·ÉÁÁvîÜ)zl¥RÙ©ù×Wgg祽Ÿþ™Ö¯_ONNN:ktrr¢cÇŽiܾzõjZ¾|9¹ººRPP…‡‡«mׯ_§ØØX²³³Óy|mbbbhìØ±tôèQjhhÕ·=myxîÐ 0€…Û¶lÙBTRRB¨¦¦†ˆˆîß¿O2™Œšššˆˆ(##ƒ^~ùeƒÆÙ¸q#½ýöÛj·¹»»SXXEEE‘§§§Ú}k×®¥àà`Š‹‹#[[[ºsçµ|ˆ{÷îÁÞÞ^¸¯¾¾¿ýío€äädL˜0ð÷÷Ç–-[`aa¡·ÁÖÖV£cccܼy›6mÂO?ý„B¥Ré¬}ÇŽÈËËÃÅ‹…Û:;¶6ºæ__—´´4¬X±...†ŸŸŸ¨Ÿc[EEE°±±ö×®]«uMsîÜ9”””€ˆ4ƺ|ù2 °`Á~ÞÞÞðööFYY>ŒI“&ÁÃçNêT½m=whZ¯p´*--ÅÀŸ÷°j  qI²u\333Lœ8gÏž¯‡D"!44¡¡¡ÈÈÈÀþýû1wî\dddèíWVV¦óɇ-[¶ &&&L€T*Õú¾¾ùæ>|W¯^Eß¾}…Û;;¶6ºæ__—~øÆÆÆP(øïÿ‹gÏž©ÖPUUUøî»ïðå—_vØvܸqhllDrr2üüüÔîÛ¹s'lll´†¦Uss3ˆ2™ ¦¦¦¢kÕæ¹/<|ø €êêjüûßÿ^1Ÿyó&¾ûî;­û~~~ˆŠŠBII àöíÛÂ+÷”)SpéÒ%ܽ{PWW‡±cÇ"66»wïÆ¤I“ “Éàåå…¥K—¢¸¸¸Ã~úÂÅÅ'N„T*Ezz:ªªª4ÚeffbÕªUˆÕ8ktvlmtÍ¿¾:;;/ÞÞÞÈÌÌÄÇŒ˜˜8::bÛ¶m(**Ò[c]]***P^^Ž7n`æÌ™pqqÁŒ34Ú´Ý*++aff†÷ß+V¬@nn®Ð>!!‰‰‰jWÚJIIÁ‚ 0~üxÒÒÒ!z~µ2ä=œ.gΜ¡qãÆÑˆ#È××—LÓ§O§ÆÆFaMÓ*77Wíý~ff¦Úšfݺuäíí­u_¥RÑâŋɂ&MšDC‡¥éÓ§SXX…††’™™ùùù‘ÍŸ?Ÿš››©  €†JîîîäççGææætèÐ!a }ý¤R©Ð®íZ%??Ÿ¬­­É××—¦L™BÓ§O§W^y…fΜ©ÖnÕªU$•J©ÿþÂÖvAkèØ}uvv^Ú+..¦?ü\]]uÖèääD„ÍÒÒ’‚‚‚„5QËš¦m›ÖÍØØ˜ˆˆ”J%­\¹’úôéC£G&211¡h3::š|}})::ZXCw–¶!»8?ëÿcèìÅàÐôYEYÈ-Ímùk_:ô‘õÁ‰k'^\QL'M/püªþÿÊŸ5â£o?zÕ°Žð_£éšš›0Ùy2,Mÿ÷ F߈†÷po ØòßìUÕW¡_Ÿ~(®(†­…auþÂf/%ù?D¾‰EÞ‹zºÖ¿=cL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰EˆŒŒ$´üo¼½ÈÍ„Á½ Ž_è¦Áÿ}à¶mÛ mʺÊk=]À/ORRÒÒÒô¶184“&MzÞzëõš››; ¯i‰CØHÆDâÐ0&‡†1‘ ¾zfˆ¢¢"deeaÚ´i]yXƒ|ÿý÷°´´„³³s·U]]o¿ý .ÔÛ®®®qqqX´h‘Á}ºÛñãÇÑÜÜ H$055…··7lllpëÖ- 6ÀÜÜ—.]R;Û\¼x^^^x饗 cúôéð÷÷ö“““±gÏxxxÀÊÊ 0uêTïJöíÛ'''„„„@"‘æÌ™ƒ¥K—"-- 'Nõ˜»R—Ÿçˆÿú׿0cÆ "22PUU…õë×#::óæÍÃìÙ³‘˜˜ˆÏ>û ³gÏÆÜ¹s‘œœ,'** ;wîÔ¹ŸœœŒ… bêÔ© Amm­p_^^þøÇ?âÍ7ßÔx…;räfÏž |ðÁP(ö«¨¨À† pîÜ9 33›7oú%%%añâÅðóóÃܹs¥1/åååBŸ›7oâ½÷ÞSÛvïÞ-ºŽGiý455éûi077‡\.‡D"ŸŸŸÚ|@jj*&Ož,ê˜íMž<¸páB‡m ÒÓÓ±råJ!00`Àlذ¦¦¦}Ä>æçÑågšœœ¸»»ãÔ©S¸ÿ>6mÚ„!C†ÀÝÝ™™™pssCtt4âãã±gϬX±±±±øúë¯ñÅ_?œ¡C‡¢OŸ>ÂqÛîÿüóÏØµk¶nÝ oooÄÇÇãÀðôôDCC6n܈%K– ,, wîÜAHHŒºº:$&&âÀ0`>þøc|õÕWøàƒôö³¶¶FVVúõë‡Ý»wÃÜÜ™™™ZÖ-»wïÆ‡~oooܽ{ÁÁÁ¯ J¥RèãêêŠíÛ· ·‡„„àW¿úˆªÃÎÎNmŒ’’ÄÅÅ!==:FéééÈÏÏáÑ£GÈÊÊBëïïèèhTVVÂÜÜ÷îÝCee%|||:ýœhåää„ûYYYm P(`ii©¶jåëë«õØW®\ÁW_}…9sæ`òäÉËåÏ]¯.]SSS¬X±2™ îîî DRRÜÝÝADxûí·!‘H0vìXH¥R¼õÖ[ÂþÉ“'…ãL˜0Aí¸m÷ÏŸ?___á=oÞ<$&&hyB 8³gÏŒ3Ó¦MCJJ F  åUÉÄÄ[·nųgÏ:ì÷Ö[oA©Tbݺu°´´ÄãÇ…Zär98€#FhYÈÊd2ÔÖÖª…¾­¾}û Oø;vÀÅÅ‹-]Ðrf¿~ý:bccQ\\Œ€€8p@ïÏèîÝ»(**Ðz¥R‰GÁÎÎÇǰaÃ’’‚Y³f!55>>>èÛ·¯ÞcÂØØ555Â~nn®°†iËÈÈ&&&¢Ž=qâDXYY!..GŽÁ›o¾‰™3gj ÞóêòÐØÚÚB&ûßÃ:88 ##CØo|‰D¹\©T*쪬¬ öööj· 6 ðøñcäçç«]¥R*•7nÆŒŒ ¬Y³¦¦¦xõÕW±dɘššêí×Z_ëµ-¹\Žœœ:tEEE0333x¡’’üóŸÿnSGVVBCC1lØ0Ì›7žžžÍã»ï¾«¶¦IJJ®]»púôiH$øûû#99³fÍÂÅ‹±f̓OGÊÊÊÔæpΜ9Z×47nÜÀÓ§OAD';;¥¥¥xã74ú9#GŽDee% GGGìØ±£KêoÕå¡iÿÊQQQ!jiˆ—^zIãreë¸&&&5jöìÙ#ܧT*!‘H@DX½z5V¯^ÜÜ\ÄÄÄ`Û¶m8tèÞ~•••:ŸŒiii8rä¶oß777!  ÃÇššŠ„„|öÙgjg$1uÈd2ÈårTTT ººÍÍÍj/X†rrrBuu5jkkajj ???>|—/_FUU¼¼¼D³½ºº:\¿~ýë_;lëââ‚gÏž!33žžžj÷EFFÂÒÒRkhZ©T*€T*E¿~ýž¯p-ºüBÀãÇ‘žž e¢âãã…WI1îß¿ëׯkÝ÷ôôDrr2ž>}  eá|ûömÀرcqûöma‘¬T*±råJ\ºt 'Nœ@pp0¤R)œ1uêT”••uØO…BaÆaÔ¨Q022Bvv¶Æ%Ûörss±wï^üýï×8{‰©cäÈ‘8|ø0Þ{ï=¤¦¦bñâÅ“.õõõ¨©©AMM  Ž;a=hÐ xxx`ïÞ½ðõõÕbZZòòòôŽ¡T*QSSƒêêjäää`óæÍ6lƯѦíV[[ âÿø …öééé¸zõªÎ+n·nÝÂöíÛ±fÍá‚Ô¦M›ôÖÙ]~¦qqqÁÁƒ…ÂÂBŒ1¨ªªuœsçÎáÇÄo~ó}¤¦¦bÙ²epttDqq1ÆŽ 2d‚‚‚°zõj8;;#??nnn˜ýôSL›6 Ç×9Fhh(BCCfffxíµ×ð‡?üAíL¹oß>ìÛ·O­Ÿ\.ǹsç„ÚÚZ,_¾öööhjjÂãDZvíZ¸ººjŒ—ššŠS§NaΜ9 Þöw uðüøñãX¼x±A— [566";;¦¦¦Â¹;äå塼¼#GŽÔX8–••ááǰ²²R[ÿ455áîÝ»hll„££#,,, êסººfffZΨwïÞÅ€0|øp”––¢¤¤:ûtÄ:tQ©TÝú©yii©pÉ¿»UTTàÁƒ022ˆ#t^ èªÇœ””„>úHﺴ[>ÜìӧƌӇV£ï•ÎÊÊJø­-¹\ŽQ£F‰î×–D"Q{ò›˜˜g:°¶¶Ö¸jÓ¾OG ©C—îþšÉÙ³g…¯ºt7 ƒžK/ò«5ü&ÚÒ¥K{º„ÅßrfL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰dð‡›­¿4ÅØÿÏRRR:lÓah†ŠùóçwE=Œõz†<×;üÂ&cL¯i‰CØHÆDú¿`GLŸO‡ IEND®B`‚bm3.7.0/doc/html/a00204.map0000644000175000017500000000025311365042646013235 0ustar tlktlk bm3.7.0/doc/html/a00245.md50000644000175000017500000000004011365042651013140 0ustar tlktlk5128afec79965ef1dc76c062ed83acfcbm3.7.0/doc/html/a00172.md50000644000175000017500000000004011365042644013141 0ustar tlktlkf08d863f28ee57e88cc0480fe17c3d3fbm3.7.0/doc/html/a00223.png0000644000175000017500000000461411365042647013253 0ustar tlktlk‰PNG  IHDR½(«|ûÀbKGDÿÿÿ ½§“ AIDATxœíœyHT]ÆŸYôÚâhe–M‹‘š¥5`ÅTæÔ‡c´GX¶XP‰ÿ˜´GTDEÒJ+‰Ñš$“¶@E ™F«…-Yf.Y.%f5YÎóýͧ3ÍØd}ÍùÁ9ï¹ç}ß3|`nn.½¼¼˜‘‘ÁŠŠ Êår®]»–&“‰ &%%Ñd2qëÖ­ 0û:}ú4÷ìÙÓbß_õõõôóóã¾}ûh4™M•JÅk×®9œ“5êêê(I333i4™““C¹\ÎÊÊJ«gúׯ_ÓÓÓ“GŽ¡ÑhdVVÛ·oÏ'Ož°´´”žžžÌÌÌäǹiÓ&öéÓ‡&“©YìçÏŸséÒ¥ìß¿¿Õü$IâÊ•+™’’Âääd&&&2 €………Ç…††òàÁƒ$ɨ¨(.Y²ä‡kÿFÃ]»v±ªªŠUUU,(( N§cDDD«b 2„G¥Ñht(—ïùååM§NØÐÐ`¶­Y³†Ó¦McEE°¾¾ž$ùôéS*•J~ùò…$y÷î]‹¯A[8â+==aaa󘘘贜ŒF#óóóÍý&qZýÁƒ©Óé,üLŸ>6làöíÛ9yòd³½¡¡IIIüðáIÒd2ñüùóœ8q"ƒƒƒ¹cÇÖÔÔXÍO’$Ž3†ÑÑÑŒŽŽæØ±c©V«yæÌó1twwçÛ·oI’)))T«Õlllüáú›Ðh4”ËåT(T(æ¸/^¼huŒ7npΜ9ìÙ³'W¯^Í’’»óišè²{ýúõƒ›››¹Šììls¿C‡¾í"H’¥Riî;Š=¾Š‹‹ñäÉøûû›mŸ>}„ œ–“$IÈÏÏÇêÕ«ñìÙ3tîÜ&“Éæœ²²2YØú÷ïÒÒRsÖ„››V®\ ÈËËâE‹0pà@$&&"22Ò®<7n܈Q£F™ûiiiˆEuu5är9RSSAÒ¼Óòùóg”——#''ÿüó]ï$''cÁ‚-޵&†V«…V«Euu5RRR0fÌh4œ:uÊá4Ñ_¿@ee%:wîì,÷£R© .˜mŸ>}‚L&Cmm­SbdeeaÍš50 9r$ ¼½½˜×Ç-l555ðòò‚»»;*++-ÆN:…ÈÈH¸¹¹A’$TUUáíÛ·øúõ«ÅIÆ^†ŠwïÞ¡®®^^^8qâ6n܈©S§š‰GZZšC¢·ÉŸŠÑØØ’P*•èØ±ãOç8ñâTqq1Î;àÛurr²ÅYÕ^òóóqñâE«}{ÑëõÈÍÍÅãÇ?~Ä!C™™é°/k”••aàÀˆˆˆ€B¡Àõë×QWWgsNTT.]º„¢¢"À›7o`0 ×ë…3gΘ…óæMÌž= …Z­÷îÝÃæÍ›a0€õë×£¼¼Üf¼úúzÔÖÖ¢¶¶eeeØ´iBCCáíí«W¯âÍ›7X´h‚ƒƒÍmîܹ0 hhhðíÃ}ÿþýV½GöÆø/W®\ÁÌ™31bÄD^^Ž?Þªša­‚ƒ5ýðáÃHNÇîÝ»süøñlhh0×ÏM²C‡æþ½{÷,êçÅ‹[l~ßwÔ׎;¨R©IµZÍ3f°±±Ña?Ö())¡¯¯/u:õz=ÇÏ~ýúqÊ”)6·,×­[GoooFEE±K—.Œ·X¯###©R©¸oß¾c¿zõŠëÖ­cHHˆÕü$I²x B©T2<<œ?&I.\¸S¦Li6¯¶¶–’$1++‹$Ù§O›{ë-mY6aoŒïÉÈÈ N§cFF†ùwVk°VÓËÈ–ÿD&“9ü‰ÑhÄõë×áåå…°°°ŸÿD:òòr BitMagic: bm::bit_ASSIGN< W > Struct Template Reference

bm::bit_ASSIGN< W > Struct Template Reference

Bit ASSIGN functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_ASSIGN< W >

Bit ASSIGN functor.

Definition at line 5092 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_ASSIGN< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5094 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00067.html0000644000175000017500000001020211365042651013422 0ustar tlktlk BitMagic: bm::gap_len_table_min< T > Struct Template Reference

bm::gap_len_table_min< T > Struct Template Reference
[GAP functions]

Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. More...

#include <bmfunc.h>

Static Public Attributes

static const gap_word_t _len [bm::gap_levels]

Detailed Description

template<bool T>
struct bm::gap_len_table_min< T >

Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets.

Definition at line 117 of file bmfunc.h.


Field Documentation

template<bool T>
const gap_word_t bm::gap_len_table_min< T >::_len [inline, static]
Initial value:
 
                                { 32, 96, 128, 512 }

Definition at line 119 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespaces.html0000644000175000017500000000322211365042647014735 0ustar tlktlk BitMagic: Namespace Index

Namespace List

Here is a list of all namespaces with brief descriptions:
bm

Generated on Sun Apr 25 09:37:43 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00212.md50000644000175000017500000000004011365042646013136 0ustar tlktlkdbb9f5ed6475e6ccfd1651246a746575bm3.7.0/doc/html/a00119.html0000644000175000017500000035620411365042643013440 0ustar tlktlk BitMagic: GAP functions

GAP functions
[BitMagic C++ Library]

Collaboration diagram for GAP functions:

Data Structures

struct  bm::gap_len_table< T >
 Default GAP lengths table. More...
struct  bm::gap_len_table_min< T >
 Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. More...

Functions

template<typename T >
unsigned bm::gap_test (const T *buf, unsigned pos)
 Tests if bit = pos is true.
template<typename T >
unsigned bm::gap_bit_count (const T *buf, unsigned dsize=0)
 Calculates number of bits ON in GAP buffer.
template<typename T >
int bm::gapcmp (const T *buf1, const T *buf2)
 Lexicographical comparison of GAP buffers.
template<typename T , class F >
unsigned bm::gap_buff_any_op (const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f)
 Abstract distance test operation for GAP buffers. Receives functor F as a template argument.
template<typename T , class F >
unsigned bm::gap_buff_count_op (const T *vect1, const T *vect2, F f)
 Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument.
template<typename T >
unsigned bm::gap_set_value (unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set)
 Sets or clears bit in the GAP buffer.
template<typename T >
unsigned bm::gap_add_value (T *buf, T pos)
 Add new value to the end of GAP buffer.
template<typename T >
unsigned bm::gap_set_array (T *buf, const T *arr, unsigned len)
 Convert array to GAP buffer.
template<typename T >
unsigned bm::bit_array_compute_gaps (const T *arr, unsigned len)
 Compute number of GAPs in bit-array.
template<typename T >
int bm::gap_find_in_block (const T *buf, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the GAP block.
template<typename T >
void bm::gap_sub_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 SUB (AND NOT) GAP block to bitblock.
template<typename T >
void bm::gap_xor_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 XOR GAP block to bitblock.
template<typename T >
void bm::gap_add_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 Adds(OR) GAP block to bitblock.
template<typename T >
void bm::gap_add_to_bitset (unsigned *dest, const T *buf)
 Adds(OR) GAP block to bitblock.
template<typename T >
void bm::gap_and_to_bitset (unsigned *dest, const T *buf)
 ANDs GAP block to bitblock.
template<typename T >
void bm::gap_convert_to_bitset (unsigned *dest, const T *buf)
 GAP block to bitblock conversion.
template<typename T >
void bm::gap_convert_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 GAP block to bitblock conversion.
template<typename T >
void bm::gap_convert_to_bitset (unsigned *dest, const T *buf, unsigned dest_len)
 GAP block to bitblock conversion.
template<typename T >
unsigned * bm::gap_convert_to_bitset_smart (unsigned *dest, const T *buf, id_t set_max)
 Smart GAP block to bitblock conversion.
template<typename T >
unsigned bm::gap_control_sum (const T *buf)
 Calculates sum of all words in GAP block. (For debugging purposes).
template<class T >
void bm::gap_set_all (T *buf, unsigned set_max, unsigned value)
 Sets all bits to 0 or 1 (GAP).
template<class T >
void bm::gap_init_range_block (T *buf, T from, T to, T value, unsigned set_max)
 Init gap block so it has block in it (can be whole block).
template<typename T >
void bm::gap_invert (T *buf)
 Inverts all bits in the GAP buffer.
template<typename T >
bool bm::gap_is_all_zero (const T *buf, unsigned set_max)
 Temporary inverts all bits in the GAP buffer.
template<typename T >
bool bm::gap_is_all_one (const T *buf, unsigned set_max)
 Checks if GAP block is all-one.
template<typename T >
bm::gap_length (const T *buf)
 Returs GAP block length.
template<typename T >
unsigned bm::gap_capacity (const T *buf, const T *glevel_len)
 Returs GAP block capacity.
template<typename T >
unsigned bm::gap_limit (const T *buf, const T *glevel_len)
 Returs GAP block capacity limit.
template<typename T >
unsigned bm::gap_level (const T *buf)
 Returs GAP blocks capacity level.
template<typename T >
void bm::set_gap_level (T *buf, unsigned level)
 Sets GAP block capacity level.
template<typename T >
int bm::gap_calc_level (int len, const T *glevel_len)
 Calculates GAP block capacity level.
template<typename T >
unsigned bm::gap_free_elements (const T *buf, const T *glevel_len)
 Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length.
template<typename T >
unsigned bm::bit_convert_to_gap (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len)
 Converts bit block to GAP.
template<class T , class F >
void bm::for_each_gap_dbit (const T *buf, F &func)
 Iterate gap block as delta-bits with a functor.
template<typename D , typename T >
bm::gap_convert_to_arr (D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false)
 Convert gap block into array of ints corresponding to 1 bits.
BMFORCEINLINE gap_word_t * bm::gap_operation_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP AND operation.
BMFORCEINLINE unsigned bm::gap_operation_any_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP AND operation test.
BMFORCEINLINE unsigned bm::gap_count_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount AND operation test.
BMFORCEINLINE gap_word_t * bm::gap_operation_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP XOR operation.
BMFORCEINLINE unsigned bm::gap_operation_any_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP XOR operation test.
BMFORCEINLINE unsigned bm::gap_count_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount XOR operation test.
gap_word_t * bm::gap_operation_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP OR operation.
BMFORCEINLINE unsigned bm::gap_count_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount OR operation test.
gap_word_t * bm::gap_operation_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP SUB (AND NOT) operation.
BMFORCEINLINE unsigned bm::gap_operation_any_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP SUB operation test.
BMFORCEINLINE unsigned bm::gap_count_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount SUB (AND NOT) operation test.
template<typename T >
unsigned bm::gap_overhead (const T *length, const T *length_end, const T *glevel_len)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T >
bool bm::improve_gap_levels (const T *length, const T *length_end, T *glevel_len)
 Finds optimal gap blocks lengths.

Detailed Description

GAP functions implement different opereations on GAP compressed blocks and serve as a minimal building blocks.


Function Documentation

template<typename T >
unsigned bm::bit_array_compute_gaps ( const T *  arr,
unsigned  len 
) [inline]

Compute number of GAPs in bit-array.

Parameters:
arr - array of BITs
len - array length

Definition at line 1406 of file bmfunc.h.

template<typename T >
unsigned bm::bit_convert_to_gap ( T *BMRESTRICT  dest,
const unsigned *BMRESTRICT  src,
bm::id_t  bits,
unsigned  dest_len 
) [inline]

Converts bit block to GAP.

Parameters:
dest - Destinatio GAP buffer.
src - Source bitblock buffer.
bits - Number of bits to convert.
dest_len - length of the dest. buffer.
Returns:
New length of GAP block or 0 if conversion failed (insufficicent space).

Definition at line 2522 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::serializer< BV >::serialize().

template<class T , class F >
void bm::for_each_gap_dbit ( const T *  buf,
F &  func 
) [inline]

Iterate gap block as delta-bits with a functor.

Definition at line 2612 of file bmfunc.h.

template<typename T >
void bm::gap_add_to_bitset ( unsigned *  dest,
const T *  buf 
) [inline]

Adds(OR) GAP block to bitblock.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1763 of file bmfunc.h.

References bm::gap_add_to_bitset_l().

Referenced by bm::deserializer< BV, DEC >::deserialize_gap(), and bm::gap_convert_to_bitset().

template<typename T >
void bm::gap_add_to_bitset_l ( unsigned *  dest,
const T *  buf,
unsigned  buf_len 
) [inline]

Adds(OR) GAP block to bitblock.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.
buf_len - GAP buffer length

Definition at line 1733 of file bmfunc.h.

References BM_ASSERT, and bm::or_bit_block().

Referenced by bm::deserializer< BV, DEC >::deserialize_gap(), bm::gap_add_to_bitset(), and bm::gap_convert_to_bitset_l().

template<typename T >
unsigned bm::gap_add_value ( T *  buf,
pos 
) [inline]

Add new value to the end of GAP buffer.

Parameters:
buf - GAP buffer.
pos - Index of bit to set.
Returns:
New GAP buffer length.

Definition at line 1261 of file bmfunc.h.

References BM_ASSERT, and bm::gap_max_bits.

Referenced by bm::deseriaizer_base< DEC >::read_gap_block().

template<typename T >
void bm::gap_and_to_bitset ( unsigned *  dest,
const T *  buf 
) [inline]

ANDs GAP block to bitblock.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1777 of file bmfunc.h.

References BM_ASSERT, and bm::sub_bit_block().

template<typename T >
unsigned bm::gap_bit_count ( const T *  buf,
unsigned  dsize = 0 
) [inline]

Calculates number of bits ON in GAP buffer.

Parameters:
buf - GAP buffer pointer.
dsize - buffer size
Returns:
Number of non-zero bits.

Definition at line 678 of file bmfunc.h.

Referenced by bm::combine_count_operation_with_block(), and bm::serializer< BV >::encode_gap_block().

template<typename T , class F >
unsigned bm::gap_buff_any_op ( const T *BMRESTRICT  vect1,
unsigned  vect1_mask,
const T *BMRESTRICT  vect2,
unsigned  vect2_mask,
f 
) [inline]

Abstract distance test operation for GAP buffers. Receives functor F as a template argument.

Parameters:
vect1 - operand 1 GAP encoded buffer.
vect1_mask - XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector)
vect2 - operand 2 GAP encoded buffer.
vect2_mask - same as vect1_mask
f - operation functor.
Note:
Internal function.
Returns:
non zero value if operation result returns any 1 bit

Definition at line 1015 of file bmfunc.h.

References bm::gap_max_bits.

Referenced by bm::gap_operation_any_and(), bm::gap_operation_any_sub(), and bm::gap_operation_any_xor().

template<typename T , class F >
unsigned bm::gap_buff_count_op ( const T *  vect1,
const T *  vect2,
f 
) [inline]

Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument.

Parameters:
vect1 - operand 1 GAP encoded buffer.
vect2 - operand 2 GAP encoded buffer.
f - operation functor.
Note:
Internal function.

Definition at line 1084 of file bmfunc.h.

References bm::gap_max_bits.

Referenced by bm::gap_count_and(), bm::gap_count_or(), bm::gap_count_sub(), and bm::gap_count_xor().

template<typename T >
int bm::gap_calc_level ( int  len,
const T *  glevel_len 
) [inline]

Calculates GAP block capacity level.

Parameters:
len - GAP buffer length.
glevel_len - GAP lengths table
Returns:
GAP block capacity level. -1 if block does not fit any level.

Definition at line 2450 of file bmfunc.h.

References BM_ASSERT, and bm::gap_levels.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize(), bm::deserializer< BV, DEC >::deserialize_gap(), and bm::gap_overhead().

template<typename T >
unsigned bm::gap_capacity ( const T *  buf,
const T *  glevel_len 
) [inline]

Returs GAP block capacity.

Parameters:
buf - GAP buffer pointer.
Returns:
GAP block capacity.

Definition at line 2392 of file bmfunc.h.

Referenced by bm::bvector< Alloc >::calc_stat(), bm::mem_alloc< BA, PA >::free_gap_block(), and bm::gap_free_elements().

template<typename T >
unsigned bm::gap_control_sum ( const T *  buf  )  [inline]

Calculates sum of all words in GAP block. (For debugging purposes).

Note:
For debugging and testing ONLY.
Parameters:
buf - GAP buffer pointer.
Returns:
Sum of all words.

Definition at line 2218 of file bmfunc.h.

References BM_ASSERT.

template<typename D , typename T >
D bm::gap_convert_to_arr ( D *BMRESTRICT  dest,
const T *BMRESTRICT  buf,
unsigned  dest_len,
bool  invert = false 
) [inline]

Convert gap block into array of ints corresponding to 1 bits.

Definition at line 2667 of file bmfunc.h.

Referenced by bm::serializer< BV >::encode_gap_block().

template<typename T >
void bm::gap_convert_to_bitset ( unsigned *  dest,
const T *  buf,
unsigned  dest_len 
) [inline]

GAP block to bitblock conversion.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.
dest_size - length of the destination buffer.

Definition at line 2175 of file bmfunc.h.

References bm::gap_add_to_bitset().

template<typename T >
void bm::gap_convert_to_bitset ( unsigned *  dest,
const T *  buf 
) [inline]
template<typename T >
void bm::gap_convert_to_bitset_l ( unsigned *  dest,
const T *  buf,
unsigned  buf_len 
) [inline]

GAP block to bitblock conversion.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 2158 of file bmfunc.h.

References bm::bit_block_set(), and bm::gap_add_to_bitset_l().

template<typename T >
unsigned* bm::gap_convert_to_bitset_smart ( unsigned *  dest,
const T *  buf,
id_t  set_max 
) [inline]

Smart GAP block to bitblock conversion.

Checks if GAP block is ALL-ZERO or ALL-ON. In those cases returns pointer on special static bitblocks.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.
set_max - max possible bitset length

Definition at line 2196 of file bmfunc.h.

References FULL_BLOCK_ADDR, and bm::gap_convert_to_bitset().

BMFORCEINLINE unsigned bm::gap_count_and ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP bitcount AND operation test.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
bitcount of vect1 AND vect2

Definition at line 3227 of file bmfunc.h.

References bm::and_op(), and bm::gap_buff_count_op().

Referenced by bm::combine_count_and_operation_with_block(), and bm::combine_count_operation_with_block().

BMFORCEINLINE unsigned bm::gap_count_or ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP bitcount OR operation test.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
bitcount of vect1 OR vect2

Definition at line 3338 of file bmfunc.h.

References bm::gap_buff_count_op(), and bm::or_op().

Referenced by bm::combine_count_operation_with_block().

BMFORCEINLINE unsigned bm::gap_count_sub ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP bitcount SUB (AND NOT) operation test.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
bitcount of vect1 SUB (AND NOT) vect2

Definition at line 3405 of file bmfunc.h.

References bm::gap_buff_count_op(), and bm::sub_op().

Referenced by bm::combine_count_operation_with_block().

BMFORCEINLINE unsigned bm::gap_count_xor ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP bitcount XOR operation test.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
bitcount of vect1 XOR vect2

Definition at line 3293 of file bmfunc.h.

References bm::gap_buff_count_op(), and bm::xor_op().

Referenced by bm::combine_count_operation_with_block().

template<typename T >
int bm::gap_find_in_block ( const T *  buf,
unsigned  nbit,
bm::id_t prev 
) [inline]

Searches for the next 1 bit in the GAP block.

Parameters:
buf - GAP buffer
nbit - bit index to start checking from.
prev - returns previously checked value

Definition at line 1436 of file bmfunc.h.

References BM_ASSERT, bm::gap_bfind(), and bm::gap_max_bits.

template<typename T >
unsigned bm::gap_free_elements ( const T *  buf,
const T *  glevel_len 
) [inline]

Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length.

Parameters:
buf - GAP buffer pointer glevel_len - GAP lengths table
Returns:
Number of free GAP elements

Definition at line 2471 of file bmfunc.h.

References bm::gap_capacity(), and bm::gap_length().

template<class T >
void bm::gap_init_range_block ( T *  buf,
from,
to,
value,
unsigned  set_max 
) [inline]

Init gap block so it has block in it (can be whole block).

Parameters:
buf - GAP buffer pointer.
from - one block start
to - one block end
value - (block value)1 or 0
set_max - max possible bitset length

Definition at line 2270 of file bmfunc.h.

References BM_ASSERT, and bm::gap_set_all().

template<typename T >
void bm::gap_invert ( T *  buf  )  [inline]

Inverts all bits in the GAP buffer.

Parameters:
buf - GAP buffer pointer.

Definition at line 2320 of file bmfunc.h.

Referenced by bm::gap_operation_or(), and bm::deseriaizer_base< DEC >::read_gap_block().

template<typename T >
bool bm::gap_is_all_one ( const T *  buf,
unsigned  set_max 
) [inline]

Checks if GAP block is all-one.

Parameters:
buf - GAP buffer pointer.
set_max - max possible bitset length
Returns:
true if all-one.

Definition at line 2366 of file bmfunc.h.

template<typename T >
bool bm::gap_is_all_zero ( const T *  buf,
unsigned  set_max 
) [inline]

Temporary inverts all bits in the GAP buffer.

In this function const-ness of the buffer means nothing. Calling this function again restores the status of the buffer.

Parameters:
buf - GAP buffer pointer. (Buffer IS changed)

Checks if GAP block is all-zero.

Parameters:
buf - GAP buffer pointer.
set_max - max possible bitset length
Returns:
true if all-zero.

Definition at line 2352 of file bmfunc.h.

Referenced by bm::combine_any_operation_with_block(), and bm::bvector< Alloc >::compare().

template<typename T >
T bm::gap_length ( const T *  buf  )  [inline]
template<typename T >
unsigned bm::gap_level ( const T *  buf  )  [inline]

Returs GAP blocks capacity level.

Parameters:
buf - GAP buffer pointer.
Returns:
GAP block capacity level.

Definition at line 2420 of file bmfunc.h.

template<typename T >
unsigned bm::gap_limit ( const T *  buf,
const T *  glevel_len 
) [inline]

Returs GAP block capacity limit.

Parameters:
buf - GAP buffer pointer.
glevel_len - GAP lengths table (gap_len_table)
Returns:
GAP block limit.

Definition at line 2407 of file bmfunc.h.

Referenced by bm::combine_or(), bm::combine_sub(), and bm::combine_xor().

BMFORCEINLINE gap_word_t* bm::gap_operation_and ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2,
gap_word_t *BMRESTRICT  tmp_buf,
unsigned &  dsize 
)

GAP AND operation.

Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
tmp_buf - pointer on temporary buffer
dsize - out size of the destination
Returns:
Result pointer (tmp_buf OR vect1)

Definition at line 3186 of file bmfunc.h.

References bm::and_op(), and bm::gap_buff_op().

BMFORCEINLINE unsigned bm::gap_operation_any_and ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP AND operation test.

Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
non zero value if operation returns any 1 bit

Definition at line 3210 of file bmfunc.h.

References bm::and_op(), and bm::gap_buff_any_op().

Referenced by bm::combine_any_operation_with_block().

BMFORCEINLINE unsigned bm::gap_operation_any_sub ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP SUB operation test.

Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
non zero value if operation returns any 1 bit

Definition at line 3388 of file bmfunc.h.

References bm::and_op(), and bm::gap_buff_any_op().

Referenced by bm::combine_any_operation_with_block().

BMFORCEINLINE unsigned bm::gap_operation_any_xor ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2 
)

GAP XOR operation test.

Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
Returns:
non zero value if operation returns any 1 bit

Definition at line 3277 of file bmfunc.h.

References bm::gap_buff_any_op(), and bm::xor_op().

Referenced by bm::combine_any_operation_with_block().

gap_word_t* bm::gap_operation_or ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2,
gap_word_t *BMRESTRICT  tmp_buf,
unsigned &  dsize 
) [inline]

GAP OR operation.

Function performs OR logical oparation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
tmp_buf - pointer on temporary buffer
dsize - out destination size
Returns:
Result pointer (tmp_buf)

Definition at line 3318 of file bmfunc.h.

References bm::and_op(), bm::gap_buff_op(), and bm::gap_invert().

Referenced by bm::combine_any_operation_with_block().

gap_word_t* bm::gap_operation_sub ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2,
gap_word_t *BMRESTRICT  tmp_buf,
unsigned &  dsize 
) [inline]

GAP SUB (AND NOT) operation.

Function performs SUB logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
tmp_buf - pointer on temporary buffer
dsize - out destination size
Returns:
Result pointer (tmp_buf)

Definition at line 3363 of file bmfunc.h.

References bm::and_op(), and bm::gap_buff_op().

BMFORCEINLINE gap_word_t* bm::gap_operation_xor ( const gap_word_t *BMRESTRICT  vect1,
const gap_word_t *BMRESTRICT  vect2,
gap_word_t *BMRESTRICT  tmp_buf,
unsigned &  dsize 
)

GAP XOR operation.

Function performs XOR logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.

Parameters:
vect1 - operand 1
vect2 - operand 2
tmp_buf - pointer on temporary buffer
dsize - out destination size
Returns:
Result pointer (tmp_buf)

Definition at line 3252 of file bmfunc.h.

References bm::gap_buff_op(), and bm::xor_op().

template<typename T >
unsigned bm::gap_overhead ( const T *  length,
const T *  length_end,
const T *  glevel_len 
) [inline]

Convert bit block into an array of ints corresponding to 1 bits.

OBSOLETE function

Calculates memory overhead for number of gap blocks sharing the same memory allocation table (level lengths table).

Definition at line 4847 of file bmfunc.h.

References BM_ASSERT, bm::gap_calc_level(), and bm::gap_levels.

Referenced by bm::improve_gap_levels().

template<class T >
void bm::gap_set_all ( T *  buf,
unsigned  set_max,
unsigned  value 
) [inline]

Sets all bits to 0 or 1 (GAP).

Parameters:
buf - GAP buffer pointer.
set_max - max possible bitset length

Definition at line 2249 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::gap_init_range_block(), and bm::deseriaizer_base< DEC >::read_gap_block().

template<typename T >
unsigned bm::gap_set_array ( T *  buf,
const T *  arr,
unsigned  len 
) [inline]

Convert array to GAP buffer.

Parameters:
buf - GAP buffer.
arr - array of values to set
len - length of the array
Returns:
New GAP buffer length.

Definition at line 1346 of file bmfunc.h.

References bm::gap_max_bits.

Referenced by bm::deserializer< BV, DEC >::deserialize_gap(), and bm::deseriaizer_base< DEC >::read_gap_block().

template<typename T >
unsigned bm::gap_set_value ( unsigned  val,
T *BMRESTRICT  buf,
unsigned  pos,
unsigned *BMRESTRICT  is_set 
) [inline]

Sets or clears bit in the GAP buffer.

Parameters:
val - new bit value
buf - GAP buffer.
pos - Index of bit to set.
is_set - (OUT) flag if bit was actually set.
Returns:
New GAP buffer length.

Definition at line 1168 of file bmfunc.h.

References BM_ASSERT, bm::gap_bfind(), and bm::gap_max_bits.

Referenced by bm::combine_or(), bm::combine_sub(), bm::combine_xor(), and bm::miniset< A, N >::set().

template<typename T >
void bm::gap_sub_to_bitset ( unsigned *BMRESTRICT  dest,
const T *BMRESTRICT  buf 
) [inline]

SUB (AND NOT) GAP block to bitblock.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1677 of file bmfunc.h.

References BM_ASSERT, and bm::sub_bit_block().

template<typename T >
unsigned bm::gap_test ( const T *  buf,
unsigned  pos 
) [inline]

Tests if bit = pos is true.

Parameters:
buf - GAP buffer pointer.
pos - index of the element.
Returns:
true if position is in "1" gap

Definition at line 489 of file bmfunc.h.

References BM_ASSERT, and bm::gap_max_bits.

Referenced by bm::combine_sub(), bm::combine_xor(), bm::bvector< Alloc >::get_bit(), and bm::miniset< A, N >::test().

template<typename T >
void bm::gap_xor_to_bitset ( unsigned *BMRESTRICT  dest,
const T *BMRESTRICT  buf 
) [inline]

XOR GAP block to bitblock.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1705 of file bmfunc.h.

References BM_ASSERT, and bm::xor_bit_block().

template<typename T >
int bm::gapcmp ( const T *  buf1,
const T *  buf2 
) [inline]

Lexicographical comparison of GAP buffers.

Parameters:
buf1 - First GAP buffer pointer.
buf2 - Second GAP buffer pointer.
Returns:
<0 - less, =0 - equal, >0 - greater.

Definition at line 866 of file bmfunc.h.

Referenced by bm::bvector< Alloc >::compare().

template<typename T >
bool bm::improve_gap_levels ( const T *  length,
const T *  length_end,
T *  glevel_len 
) [inline]

Finds optimal gap blocks lengths.

Parameters:
length - first element of GAP lengths array
length_end - end of the GAP lengths array
glevel_len - destination GAP lengths array

Definition at line 4874 of file bmfunc.h.

References BM_ASSERT, bm::gap_levels, bm::gap_max_buff_len, and bm::gap_overhead().

Referenced by bm::bvector< Alloc >::optimize_gap_size().

template<typename T >
void bm::set_gap_level ( T *  buf,
unsigned  level 
) [inline]

Sets GAP block capacity level.

Parameters:
buf - GAP buffer pointer.
level new GAP block capacity level.

Definition at line 2434 of file bmfunc.h.

References BM_ASSERT, and bm::gap_levels.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize(), and bm::deserializer< BV, DEC >::deserialize_gap().


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00164.map0000644000175000017500000000215011365042642013234 0ustar tlktlk bm3.7.0/doc/html/a00094_source.html0000644000175000017500000002150011365042627015010 0ustar tlktlk BitMagic: bmgamma.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00141.png0000644000175000017500000025517611365042634013261 0ustar tlktlk‰PNG  IHDR‹«•È?bKGDÿÿÿ ½§“ IDATxœìÝwx“õúð;iÒ½Ó6Ý{Z¨@+C¶ 2‚þ\Ç}TÔƒŽ €Êqá>ŽÃQOËTA@­ K²WKwKw“t¤{eýþH¨‚2ZÒq®+W³úæyí›;Ïû|z½^""""""""""ÈŽ M]™Ãb""""""""""bXLDDDDDDDDDD€ÈÔQß²yófS—0 ùúúbøðá¦.ƒˆˆú1¸#"""""¢«!L]€´`Á$''›º ""꿎³³˜ˆˆˆˆˆˆ®ÚÒ¥K1~üxS—1`¬\¹ÒÔ%ÑÀ™ÅDDDDDDDDDDݘˆˆˆˆˆˆˆˆˆˆQ*++CJJŠ©ËøS¿ýö²²²zlû­­­HNNî±íu†ÅDDDDDDÔcŠ‹‹±mÛ6S—ñ§öíÛ‡ôôôÛ~ss3Ö®]ÛcÛ'""ê. ‹‰ˆˆˆˆˆˆˆˆˆ"S@DDDDDDý›^¯Ç|€””˜››ãÎ;ï„L&C}}=^yå$$$`ãÆÐh4xøá‡QXXˆŸþfffxüñÇ1nÜ8ÔÖÖbÕªU˜8q"Þÿ}|ôÑGÈËËÃÚµk!—Ëáèèˆ9sæà®»î2nwÊ”)X»v-jjj0fÌ,^¼B¡{öìÁgŸ}•J…¡C‡B§Ók=}ú4>øàÃÃÃ?ü0FŒqUµ^Î?ü€¯¿þuuu;v,/^ @p#þ ˆˆˆ®;‹‰ˆˆˆˆˆ¨GeggÃÌÌ ß}÷^}õU¬_¿û÷ï‡F£Á©S§ÐØØˆÍ›7ã¾ûîÿþõ/8::bË–-˜3gŽq|ƒZ­FZZ<ˆÕ«WÃÉÉ «W¯Æ£>Š””,[¶ Ÿ}öjkk¡ÑhpöìYœ9s_ý5þûßÿâ·ß~ÃÉ“'‘ŸŸ7Þx?þ8¶oߎ¸¸8¤¦¦T*–,Y‚9sæàÇÄÃ?Œ+V ¤¤äªj½N‡¬¬,$''cíÚµ8pàNŸ>}Cþü‰ˆˆ®Ãb""""""êQ¶¶¶x衇`aa˜˜Ìš5 »wï`è:ž?>âããaff†¹sço777·ÓÖÖ†§žz QQQ°²²ÂG}„‘#GB,ÃÃÃ"‘MMMFƒ{ï½"‘ DSS~ùåŒ=£F2v9<ˆàà`Lž<b±#FŒ@BBöîÝ{Õµ^Ê<‘HOOOøûûk%""ê-8†‚ˆˆˆˆˆˆz”§§'D¢ o?pòäIãmKKK€@ €X,†™™™ñöÅ$ @,#;;Ÿ}öÊÊÊ`oo½^ßåùϽx[UUUð÷÷ïòkkkœ?¾Ëcõõõ°±±¹êZ‰ˆˆú"Ž¡ """""¢%—Ës›››±mÛ6$$$\×6+++áçç‡AƒA(âܹs9† ‚={ö ººPPP€³gÏnºé&?~ 3ŒýõWÄÇÇ_u}üCðLDDÔÛ±³˜ˆˆˆˆˆh«­mFmm3TªfãõÚÚ¦ßÝîú¸£ãä«zÈÈH|üñÇØ°aJKK‚Ûo¿õõõ×\÷ˆ#ðõ×_ã©§ž‚X,6Î&þøãñì³Ïþé÷íß¿÷Þ{/‚ƒƒQ^^n ƒƒƒƒ1wî\<ôÐCGNNÆŽ‹aÆ¡¦¦æªêûðÃ1uêT\ó>Ýhýï‡:QŸ¢Õê.ì^¸Ý„ºº–?<þû·„b±­áèh k89Yow^yd>/¾ãÇ¿âÛÛÛqîÜ9ØÚÚ"$$¤[ö»¹¹™™™prrB`` ”J%***û—ß[PP•J…ˆˆX[[wyL.—£´´îîîðööî–Z¯×Ê•+!•J‘œœlêRˆˆ¨ÿ:ÎÎb"""""¢^D¥jBMM“ñkmmËe;~;CàúúÖ?lÇÜ\ô‡ ×ÕÕ¡¡R8:Úïsv¶îrÛÖÖâ/k¼ÿþÒ«Þ/sss <øª¿ïÏX[[wáææ77·+úÞÀÀÀË>æîîww÷뮯»ÕÖŠQ^^ OOÇ¿~2Ñ5`XLDDDDDÔCZQ]݈êjCø{q\UÕØ%6<Þ ­V×eVVæÆ ·3üõòrBT”œmº„ÁNN†n`GGkX[››h¯©'èõBœ>í„›nz¶¶ tCp°BB¤ 2\ t…¹9ßæѵão"""""¢+ÐÔÔ•ªÕÕ†·¦¦*Us—ð÷÷]Ájµ¶Ë6,-Åpr²³³ $[8;Û *Ê«ã>k8;ÛB"±³³á1''XXðm€b±þþžpp°‚™™yyJ9’ŠŠ:ètz˜™ áããŒà`·Ž‹!H •ÂÉÉÆÔ;@DD}:ˆˆˆˆˆhÀimUÝ áogÈÛŒšC7pMÍ…îß¶6M—mˆÅf¡®µ1üí å:ƒÞ‹CaggXY±Û—®•~~M1"yyJäç+Q^^ ÀðoÑÛÛ‰-ÌÍE¨®nBaa&¾þúš›ÛR©=ÂÃ=å…ðpDDx 4Ôb±™)wŠˆˆz†ÅDDDDDÔçµ´´£ªªJeCGÐÛ…¢¾KÜy]¥j2hD"a—×ÉÉþþÄÇûý!üí €¯d¶/QwôðönÁªUwïkjjC~¾ùù•ÈÍU ?_i ’ÛÛ nH$6J`eeŽÚÚüøãY|öÙ>h4:ˆÅf rë‘=ቈxxp&2Ñ@Ű˜ˆˆˆˆˆz­V‡êjCÀ[UÕ€ªªÆŽÙ¿‡À†p¸ªª--]Ã_ ¸ºÚÁÅʼn ÜÝå‰ÄNNÖÆÐ×Éɉ ¬M´§D×ÎÆÆƒù`Ð Ÿ.÷ëtz””Ô ?_i ‘óó•(*ªBUU#ÀÜÜ ®®öÐjµ8s¦û÷gA¥j8:Z#2ÒÓØíÈHOv! ‹‰ˆˆˆˆè†hjjCeeªªP]Ý„ÊÊTV6;~•Êzc \]ݽ^oüÞΑ‰ ÜÜì!‘Ø" Àå¢@Ø..¶ps³‡³³ ,-Å&ÜS"Ó ðó“ÀÏO‚qã"ºÞññ~]îW«µ(.®FNކq¹¹ ´µ)ÐÞ®F£EV–•X·îpÇ ÂÂÜ1lX bc½ëƒà`)„B‰öŽˆˆ®Ãb"""""2ª¯oEeå…à÷â‘UUÆNપF¨TM]¾×Ü\‰Ä¶£Û׉-‚ƒÝàææ‰Ä0ç×ÍÍ..†ßÌÍùv„¨·èœ_äö‡Ç”ÊääÈ‘—§DNNrsÈÊ’£ººéé¥ÈÈ(ƒ^¯‡^oø9àï/A\œ/FÃ!~ð÷w1ÁѵàÑQ?×ÒÒ…¢Þ8öA¡¨CUU#äòzTU5@©¬‡Baèþí\«“““1øuuµCD„'$8;ÛB*µ7†À®®ö°··4ÑQOrs³ƒ››FŽ ér}}+òòÈÉ‘#'G“' ;ÛS"'GM›Ž0ÑŽˆŽöÂèÑ¡˜2e\]íL±+DDôú‹QŸ ÑèP]Ý¥²ÁØý[QQkû T^†››/,þ&Œá¯››=ÜÜìàêj©ÔÐýëâb… ÀÙrA+º¤Î¹¶—"ZÃÊ*––¨©ùz½ö_C;»‘hmÍF{{ŵ–jææ^°²ŠDCÃAèt-ݶÝ  99¹Û¶×SÚÛ5ÈËS"3³‡å#=½ÅÅÕ¨«k`ˆ ÌÍEpuµCx¸‚0x°/ÂÂÜ!‘Øš¶x"¢í8Ãb""""¢^¤®®¹£ ¸ÑجTþ±+¸ªª±ËpÖÖæJàêj×Ñh÷àáá‰ÄÐìæf‰ÄŽ RÑuÛ¼ys—Ûz½¹¹u8tH´4ÄbnºÉS§úÂÊêêOh-,l@RRÕÉ‚ãÜ]¥ßYYµX¿>mmZÜv›FŒp‡™ÙõÏñõõõÅðáû¡BÓÐju8q¢))i8~¼yyJÔÕµüîg™]1h7‚ƒ¥ sGp°¼½þôC ""ê ‹‰ˆˆˆˆn„ººfÈåõP*ë!—×u|ýýí:´µ]!›]ôÚÃÅÅîî†ØÍÍ®®º‚­­ÍM¸w4PUV6`Ó¦£HN>ŒÂÂ*ÄÇûcáÂDLŸ+««ÿ7ÙÞ®Á›o¦àßÿÞ‹Ñ£CñöÛwÁÝÝ¡*ïyMMmxï½]øôÓ}–bÅŠY¸ùæ`S—Õë46¶áرóØ¿?‡å"'ǰ žXl¡P`ü™hmmŽà`)ÂÃÝ"Eh¨;BCÝáããÌõˆˆºÃb""""¢ëq-!°……R©¤RûŽËÅ×/Ã..<›zN_ÍFròaìÜ™kk ÜqG|}%ÝXyïðóÏéX¾|+ªªñôÓñÐCc8ü VuÇ8t(……U07!"Âް²C¥jB~~%JKUÐëõ07!8Ø ¡¡îÆQááðósá("¢ËcXLDDDD‹Z­…BQŠŠZÈåuËëPQQ …¢å嵯ÇfÌîÛ—¤¤Cؽ;¶¶–˜;w(d²D„„H¯{ûYYxòÉdäå)ñâ‹SñÀ£ûõHÖV5>ùd/>øàxz:bÅŠÙ;6ÜÔeõ9ee*:”‡ƒsqèPÊÊT°¶6Çðá¸é&øøH Õꛫ@N޹¹ ””Ô@§ÓC,6CP[Ç )BB s‘\Þ1,&"""¢þ¤³¸¼¼Je=ÊÊTP*ëQQa„•Êz(• Æç›™ áâbCØëééww{¸»;0¦­¢¢ë×ÁúõGP^^‹ÄÄ Èd‰˜:uÌͯ~ÁºßÓjuø÷¿÷âÍ7Sã÷ß_€€×n¨¼o(+Sáå—·à§ŸÒ0eJ –-›Ñ/»©o”ª‹Âã\(• Hl1jT(n¹% £G‡ÂÑѹ¹ŠŽYìl9rrä()©V«ƒXl„…¹_$:’"Ѱ˜ˆˆˆˆz?µZ‹ªª”•© PÔwt×ut«Œ]Á­­jã÷XY™ÃËËR©=<<!•:ÀÃáãº=<=áâbÇÓ‘‰:hµ:ìÞääÃØ³'NNÖ˜3g(,H@P[·½Îùó•xòÉuHK+Å?þ1<2vÀΖýõ×lüóŸ[PRRƒÇ‡Ç]#=È 3³û÷gcÿþ,=z--í uïŽÃpóÍAÆÛÚ4ÈÍU /ïB€œ-Gqq54D"!|}%÷0v!K*í–Nˆˆz†ÅDDDDdZmm”—« —:ËËk!—×¢¼Ü0"B¡¨Ceet:Ãa«@ €››±ë×ËËnn†®`C0ìwwGØÛ[šxψú†²2Ö­;Œõë@¡¨ÇÈ‘!É1yrt·†az½ÿýïA¬ZµAA®xÿ}Âï}A¼þB­Öâ‹/~Å;ïü ''k¼òÊ,L™cê²ú¶6 Ž-ÀþýÙøõ×lœ;W‘HˆáÃ0aB$Æ‹@pð? Q«µÆùâNäÂÂ*¨ÕZ˜™ áããŒÈHO„†º#<Üaa ä8 "êÓQÏQ«µ¨¨¨EEEÊÊTËëP^^‹ÒRUÇýµ¨ªj4>ßÜ\OOG¸»;ÀËËþº»;táêjÇ7âD×I­Öâ—_2œœŠ}û² ‘ØbîÜaÉàïïÒí¯WQQ‹§Ÿ^ÔÔ<<ùäD<õÔDþ?þ…¢+VlÖ-'qË-aX±bV·vt“AUU#~ý5{ödbÿþlTW7ÂßßcÇF`ܸŒ ‹ËH¢VkQPP‰œœ ]ÈYY(,¬‚F£ë29"ÂÃøÕ×WÒ¯çqQ¿Á°˜ˆˆˆˆ®F£3Î./¯Ey¹!ü½ø«RÙ€ÎÃM±Ø A°#<<áééoo'xxn»¸Øšx¯ˆú·¢¢j¬_7EeeFƒL–€I“¢{,¼Ý¶í4^xa3œmðᇠçÛ#¯Ó_9R€¥K¿CNŽûÛ-X´hll,L]V¿¤Õêpút1öìÉÄ/¿d =½ ––bÜ|sÆÂ„ ‘ðövº¢mµ·kŒó33ËÈÅÅ5Ðëõ°´#4Ôaa†Kx¸!H¾ÒíÝ ‹‰ˆˆˆèt:=*+ëQZZkìîì–ËëQZZƒÊÊhµ:€H$„››=¼¼:ƒ_Cg°§ç…PØÍÍ»ªˆn4µZ‹””4$'ÆÁƒ9puµÇ]w ÃüùÃ{tQµ††V,Yò-¾ýö.LÄòå3ŒsbéÏi4:$%¥â7~€••Ë–ÍÀŒƒù3´‡)• Ø»×8úúVDEyaòähLš˜ï«ÞfSSrsÈʪ0v!ggË!—×ìí-b £, ã,\]íº{÷ˆˆ®Ãb"""¢¨©© ¥¥*”–ªPVváRRRÓÑ\µZ  puµ‡··£±ØËË îîðôt€··3\]íìUD½Uaa’’R±iÓQ¨TÍ3& ÞŒñã#{|aÇ#G ð÷¿'¡­Mƒ·Þš‡‰£zôõú«šš&¼öÚlØpÇbÅŠÙˆŒô4uY‚F£ÃáÃyøùçsøùç4”–ªàåå„I“¢1yr4‚®«¿®®YY†1ÙÙ†93³*UÀÉÉ‘‘ÝÈ‚dëîÚE"¢KaXLDDDÔ)õ…ÀµÆ ¸ó¾ÚÚfãs­áåå//'øø8ÃÓÓ±£#ØÁ¸hg‹õ ííüôS’“SñÛoypwwÀüùÃ1þpxyõüéîjµo¾ù>þxÆÄÛoßÅñ2ÝàÌ™,]ú-Μ)ÁÝwÀóÏO½½•©ËPÎ+CJJ:vîLGZZ)ìí­0n\&OŽÁ„ ‘°¶îž®ùÊÊc÷±¡¹99 44´ÜÝvarç8‹îz}"ðõ5jµeeº‚ Â5ÆP¸¬L…öv ÀÌÌ0ÂÛÛ ÞÞ†@ØÛÛ¹ã«áÂY˜D}_^žÉɩؼùêêZ0~|$d²Œqúþsräøûß“‘Ÿ¯Äòå3±paâ yÝB§ÓcÓ¦£Xµjôz=–,¹óæ ç¢i&PV¦ÂÎéHIIÇáÃù03b̘pL›‡ "aggÙí¯YZªêÒ…Ü9¹µU @__gcxl¥ u燽Dtµõ6õõ-/†•Êzã¢q––bøø8;ƒ½¼áííl †ÝÝøF‘¨ŸjkÓà‡Î ))GŽÀÓÓ $`Á‚áJnXz½_~y+VlGd¤'>ø@†€×öúM}} Þ|3_}u11ÞX¹ò ÌEM¥®®?ÿ|?üpû÷gÆŒ ÇÔ©ƒpë­Ñ=Ú®ÕêPRRƒÌÌ dgW +Ë çç+¡Vk! è†ðpDFz""Â$ûø8÷XMDÔç1,&"""ºÑêêšQR¢BQQJJ ã!JKkŒc":O5‰ÄÖüvŽ‰è …½¼œ ‘ðôn¢&;[ŽääT|óÍq45µa„HÈd‰3&ü†w™*õX´h=ÌÁSOMÄSOMêñyÈd™Yþó;>œ¹s‡aéÒipv¶1uYZCC+vîLÇ?œÅÞ½™Ðéô=:·ß‡[o†£ã™7¬Vk‘Ÿ¯DNŽåÈ̬@VVJJjvv–÷@D„"":CdOØÛwG4õ9 ‹‰ˆˆˆº[ss;ŠŠªQZZƒââj””‚àÎûêë a°P(€Têgøú:wŒ‡pì [ZŠM¼7DÔ´¶ª±mÛi$'§âرóðó“`Á‚Ì; R©½IjúñdzX¼xìí­ðÁ ïg’:2½^ï¿?…W_݆ææv<ÿüÜ}÷ö½@ccvïÎÀŽg°gO&´ZÆŒ ǬYCpë­Ñ&ùýÞÐЊ¬¬ dfV 3³3D.7—x{;!"ÂÓØ‰î  7þ{"X]­öv Š‹kŒ!pII×P¸ººÑø\WW;øø8wÂ’‹®ÂaŽˆ ¢?“™Yޤ¤ÃøöÛchiQcòäÈd 92Ôd³jÛðÏ~‡B&KÄòå38ûÜÄššÚ°fÍ.|öÙ>„„H±bÅl$&™º,êÐÒÒŽ;Ïá»ïN`ß¾,˜›‹0yr fÍ‚Q£BM~,PZªBff9²²*pî\9²³+Ÿ¯„F£ƒXl†ÐPwã‹Îq7rÔ ÝP ‹‰ˆˆˆ~O­Ö¢¼¼Ö8¢¨¨ú¢P¸¦ËÌ`køúvÁ†n`oogøùIàë+ag0]µ¦¦6lß~II©8y²®É ]Ä..¦=sêT1{ìk46¶á­·æáÖ[£MZuuþ|%–.ýûöecÆŒÁX¶l†É:ÏéÒjk›±cÇlÝz‡çÃÑÑÓ§ÇaæÌ!:4AïX°P­Ö";[ެ¬ŠŽ¹ YYr(u''DFÆWt޳ s‡µµ¹‰+'¢ëݘˆˆˆ&¹¼ÅÅÕ(.¾0¢3./¯…V«X[›ÃÏOoï Áá°··3çûQ·IK+Err*¶n=‰ÖV ¦L‰L–ˆ#‚M étz|ôÑn¼õV FŒÁš5 àæfgÒšèòRRÒ°|ù÷¨®nÄ¢E“ð·¿ÝbòîUú£ŠŠZ|ÿýi|÷Ýq¤§—ÁÛÛ sæ Åœ9Cáïïbêò.I¥j2vgfV #£99r47·C(À×WÒe1½ÈHOøù¹˜ìL"ºj ‹‰ˆˆ¨R«µ(.®FQQ5ŠŠªPXxñõ*´µi"ãhˆßŠðñqærDÔ£ššÚ°eËI$%¥âìÙ»A&KÄœ9C{Íbe Eþþ÷d9R€_¼?|‹ÉÃkúk­­j|üñ|øánxy9aÅŠY3&ÜÔeÑeäç+ñÝw'°iÓ1”•©ïyó†aúôÁ½þƒiNââjc÷qg'rqq5t:=¬¬Ìæ~Ñbz†¹·üŒ#¢.QßU_ß‚ÂBC\\\ÂÂ*U¡¨¨ååµÐé ‡9‰-üý c!üý]àçç?? üý%ps³gèAD7ÜéÓÅHN>Œ­[OB£ÑbêÔX,\˜ˆ„„Þ5gvçÎt<óÌ8:ZããïÆ A>¦.‰®Ri© Ë–mÁO?¥aÊ”,_>>>Φ.‹.C§Óã·ßr±qãQ¤¤¤A§Óã¶ÛaÞ¼a1"¤Ouè¶´´#;[ŽŒŒò‹ÆY”C¥jH¥öÆà¸ó,e<‘i1,&""¢ÞK§ÓC.¯ëÒl¸n†kk›"‘žžN°!î¼îë+]ïîÈ!¢¡¾¾[¶œ@RR*Î+CX˜;d²DÜyçMpt´6uy]´µiðê«ßãË/ÃܹC±rål.b×ÇíÛ—…—_Þ‚ÒR|<|çê÷rMMmرã 6n<Š#G àáá€Y³â1þpºšº¼k¦PÔ»³³åÈÌ,Gv¶jµb±ÂÃ=å…¨(ODDx":Ú ööV¦.›h `XLDDD¦ÕÖ¦¹¨+Øðµóvqq ÚÛ ã"ll,::ƒ%a°‹1öòrb õZ'N"))Û·Ÿ†N§ÇôéqX¸07Ý`êÒ.);[ŽÇûee*¬^=3f 6uIqÍ´A IDATÔMÔj->ÿ|?Þ}w'$[,[6S¦Ä˜º,º……Uؼù6m:†òòZÜ|s.¼S¦ÄÀÜ\dêò®›Z­En®åÈÈ(Czz9ÒÓK¾¾cxÜ$ûúJL\5Q¿Ä°˜ˆˆˆz^ccΟ¯ÄùóU8¾ò¢@¸ry:GÜÜìàëëÒ»t †]]¹õõõ-øæ›ãHNNEff""<±paî¸ch¯ž?úõׇ°|ùVDEyáãïæ¸‚~J¡¨Ç«¯~­[Oa̘0¬\9}·Su Ñéô8p II©Ø¹3ööV˜;w(d²Ä>Ým|9ååµÈÈ(ǹse8w® ééf!ÛÛ[ÇWDG{!*Ê áál º> ‹‰ˆˆ¨{´µiPP ÄùóU((¸ (¡T6Äb3xy9]4*¢k lmmnâ½ "º>G 9ù0¶o? 33!¦M3tâgêÒþ”JÕ„çžÛˆ;Ïá‰'ÆãÙg'C$šº,êa‡çcéÒÀ#ŒÅ“ONฑ>D©lÀÆG°nÝa×ô»nãËijjCff9ÒÓ !rF†aa½––vˆDBK;º½mèFæ‚ÅDWŒa1]9µZ‹ââjäç+QPPeì.(P¢¢ÂÐ!, àíí º Àn t··3»=ˆ¨ß©­mƦMÇœœŠÜ\bb¼!“%bæÌ!½º‹¸Sjj>žx" ðᇠ‘˜Ø»Ù£ž¥ÑèðÕWñæ›)°³³ÄË/OÇ´iq¦.‹®Âåºï¾ûføû»˜º¼B«Õ¡  ²£Ù0Êâܹ2c»»ƒ±û¸s²¿¿KŸZ0èaXLDDD]i4:”–Ö;ƒóó•Æë¥¥*hµ:€‡‡#]àïïŠÀ@W¸ 0Ðþþ.ýº›…ˆôz=.@rr*vì8±Ø ³f ÁÂ…‰4ÈÇÔå]F‡·ßNÁ‡îƤIQxë­ypr²1uYd"•• xíµØ´éFŒÁÊ•³ênê²è*)• ذá’“SQV¦Â¸q¸ÿþQ¸å–0/U*‘Q†ŒŒr¤§ä‚‚Jhµ:ØØX "‘‘ÆNäˆXYñL7Ð D:ååµ(,¬D~¾a†pg(\\\ µZ pq±E` ›1¸ ó@šˆ¢ªªFlÞ| ëÖF~¾qq¾É0sæ>uú~II {ì8w® Ë—ÏÄ=÷Ülê’¨—8q¢/¾ø ²³åøÛßnÁ¢E“úÔ¿m2ÐjuصëÖ®=ˆß~ËE@€ x`æÌ[Ûý÷ÙÒÒŽœÒÓK;æ —#+«m03" À¥c²·1DvsãÚ4`0,&""êÏ*+—§4ξx‘¹¶6 ÀÑѺ#6„ÂAAnð÷7Œè §Oõ4½^ß~ËERÒa¤¤¤ÁÒR„Ù³ã!“%"*ÊËÔå]µ””4<ýôzxy9âãïAX»G©+N¯¿>„Õ«„¥¥Ë–MÇÌ™CL]]£œ9þû߃øæ›ã ˜3g(î¿T¿\ïZéõzU»32Ê‘‘Q޲2@"±í˜ÜyñF` +ÇXPݘˆˆ¨¯S«µ(*ªFn®Jäå)‘›«@~~%êêšvv–ÆøÂÈÃažrLDti•• Ø´é(’“£°° ññþX¸0Ó¦ÅõÉ9Õj-V­ÚŽÏ?ÿ2YV¬˜ Ž ¢Ë«©iªU;°qã$$aÕª;øáBV_ߊàË/Caan¹% <0ãÆ…ÈW¢¶¶é饯îãôô2äæ* Vkacca Žcb¼1h7‚ƒ¥\”ú:†ÅDDD}E]]s— 8/OÜ\JJj Vk! àåå„à`7Kä†à`7¹A*µ7uùDD}Âïв¶¶Àwºˆ#"H§ÓcݺÃxã ›aéÒi˜=;ž©}\ff>ýt/¶l9 gg[<øà(Ü}÷Ͱ··2ui}ŠZ­En®gÏ–t„Ȇq--í‹Íáiì>މñFD„'Ïì ÞŠa1‘)45µ!?_‰üüJääÈQPP‰¼9âˆú†ÅDDD=©¼¼ùù†9Âyy c \^^ ‹ÍŒ]ÂAA®]Ba;;žÞIDÔ**j±~ý¬_ååµHHÄÂ…7cêÔA07ï^­­ê?íxæØ êigÏ–`É’oqæL î¹g/žÂnÔ~ ¡¡II©øÏ~Eee¦OŒGÓ'óìt:= «pöl ÒÓËpö¬aŒE}} ÌÌ„ r3ÈÑÑÞˆŽöâ{ºÑ]/NââjdgË‘“#GNŽ¢c®°MMmggãØˆÎYÂ!!Røø8ÃÌŒ‹`õ4­V‡={2‘””Š={2áäd9s†bÁ‚õ­± µµÍ˜1ã}¬[÷0¼¼œþðø/¿dà©§ÖA*µçØ êQ:›6ÅÊ•Û! °dÉ4Ì;”g@õjµ۶¿ÿ½å?>O?= C†ø™º´~©¨¨ºKrZZ)ª«!àÒ1ÿøB²ƒƒµ©K¦þ‹a1Ñ•ê …;áìl9²³+—§Dk«B¡>>Î ‘"4ÔAAæ ;9Ù˜º|"¢©¬L…uëcýú#P(ê1bD.LÄäÉÑ}¦‹ø÷}ôk|ÿý)ÄÆú`Û¶§Œ '©ÕZ¼öÚ|öÙ~Ž ª¾¾«Wÿˆÿýïbc}ñúëw":š¨ýÅîÝ™X³ægœ8Q„1cÂñÔS1|x ©Ëê÷ÊÊTHO/3.¢—–V …¢àë+1vw†È‰­‰+¦~‚a1Ñïétz””Ôt„ÂòŽŽarrähmUC 0„¡¡†P84Ôááî–rÎQ/ VkñË/HNNž}YHl1wî0Èd ð÷w1uy×å§ŸÒðÀkffB<üð,]:Í8v"#£¯½væÍfâJi JO/ÃK/}‹“' qÏ=7ãùçocd?rà@Ö¬Ù‰ÔÔ|$&áé§'aÔ¨PS—5 (• -¢g¸”•©žžŽˆŽ¾Ð}Ž×^ÛF‡—^ºwÝ5B!GSôGŽ`͚ؿ?ññþX´hÆ‹0uYVMM“18\XXps³Cl¬/ òA\œ/bc}àâÂdúS ‹‰ˆ¨ÿÓëõ(-U]4SØÐ-œ›k…ÀÇÇÁÁnˆˆðDHˆaaî ‘ÂÆÆÂÄÕÑŸQ«µHIICròa<˜WW{Üu×0ÌŸ?¾¾S—×­zè+¤¤¤A£Ñï ¸í¶¬Y³€c'¨×¨¯oÁ[o¥àË/"&Ư½v'bc}L]u£'ŠðÞ{;±{w&bb¼ñÜs“1aB¤©Ë"þÿ=kÏœ)Á™3Å(*ªx{;!6Öqq>4ȱ±>\œ’.ư˜ˆˆúÎP87W¬¬ŠŽŽaC(ܹМ——¡S8<Ü£#6|µµe(LDÔ—V!9ù06n<‚šš&ŒŽ… oÆøñ‘‰úß¡;vœÁÃ…K½}‰Ìí…￲_tPSÿ’™Y¥K¿Å‘#X° /¼0ÎÎ\Ë¡?IO/ÃÛo§`çÎs¸é&¼øâT$$™º,ú•ª©#8¾p©¨¨…@ €¿¿ ââ|Œ!rt´7Ϥ¸QߤR5áܹrdf–#+KŽÌÌräå)ÐØx!6t _…CCÝ õaííüôS’“SñÛoypwwÀüùÃ1þpxy9™º¼SUՈѣ_C]]ë%Ãb ëüb¢ÞF¯×cË–“X±bÚÛµxþùÛ°pa"GSô3§Nã7~À9=: /¼pââ|M]ý …¢gÏ–àôébœ9cøZSÓ33!BC¥]ÆWDEyñÉa1õnjµyy dd”#3³ÂøU¡¨¸ºÚ!"³K("…½½¥‰+'"¢î’—§Äºu©Ø´éêêZ0~|$d²Œ3³þ×Eü{>ø_ìÜy®Ëø‰Ëùê«1qbÔ ¨Šèê56¶áwRðÅ¿""¯½v'âãýL]u³ƒs±zõ8y²“'GcñâÛænê²è •”ÔÃã3gŠqöl)Z!›!*Ê ƒycð`?ÄÅù"$DÊ}ú†ÅDDÔ{(uÈȨ@ff¹1ÎËS@­ÖÂÜ\„°0wDDx "‘‘žˆˆðä DDýT[›?üpII©8r¤žžŽX° ó燻ûÀYÝ}Û¶SxôÑÿ]¶£¸“XlµZ 77;:´”§S¯–“#Ç’%ßâС|Ì›7 K—NãhŠ~h×®sX½úGdeU`öìx<ûìdøùõ¯YòN§GAAe—ä´´R´¶ªakkØX ì×qñíößÑuuÍ„lºqÑ×ÚªFv¶Ü geUàܹr¨TM #$:Cá¨(O„‡{ 0Э_Π$"¢®rräHJJÅ7ßGSS&Lˆ„L–ˆ1cÂ\÷ReeFz —?!‹ Vk`oo‰)SbqÛm1=: "TKtõ¶m;…åË¿Gss;žþ6Ü}÷Í<Þëgt:=vì8ýë'””Ô@&KÀsÏMá‡}œF£CVVNž,©SE8uªyy ètzxx8bð`_ bè>4ÈçºF®[wÏ=·Û·?…øxÿîÛ º†ÅDDÔ³Š‹«‘•UÑeŒDaa´Zll,æn쎈ð@d¤'Wã%"`Z[ÕØ¶í4’“SqìØyøùI0~æÍ©ÔÞÔå™Ì}÷ý{ödB­¾0~âB±=¦M‹Ã”)1>„„Âá}ûö!""‚añ_P(ÈÌ̼dXÌwùDDPSS22Ê‘–Vj¼äæ* Vkagg‰¨(/ÄÇûãÿþobb¼,åéDDtÅNŸ.FròalÝzS§ÆbÙ²>>Φ.zŒ_~ù¬¬Ìaoo ¬¬Ìáà`KKñŸv˜_XàŽAñµbXLDÔËTV6àôéâ‹.%P©š ›!2ÒÑÑÞ¸ýö8DG{!"ÂVVæ¦.™ˆˆú±ÚÚflÞ| II©ÈÍU &ÆË—ÏÄÌ™Cúeq^^<ˆ{ï½·[·ÛÔÔ„÷Þ{/½ôR·n—h ³´cÑ¢I˜3g(^~y îºëߘ:5Ë—Ïี~F*µÇÇß ™,/¾¸ãÆý /¾8÷Þ;B!×[éo¤R{LšdÚÅ ðÑGá…^è¶mªT*|þùçX¼xñëMÇ œYLDdBmHK+Å©SEÆp¸´T¡P€  7ÄÅù/ÑÑ^<µŽˆˆn½^Ç œœŠ;Î@,6ìYC “%"6ÖÇÔå]•«Y¼cǬ\¹‡îÖ:är9¼½½¡Ñh®yœYLôçöîÍÂ’%ßB¡¨ÇSOMÄ£Žåñs?ÔÞ®Áš5»ðÑG»1x°Þ~{‚‚ÜL]õ:‹¥×µÒÒR£µµµ›* që­·";;ðàƒbÉ’%è–ã„«Á™ÅDD½€Z­EFFy—®áÜ\t:=<=ç‹{î¸8_ÄÆúp”ÝpÕÕØ´éÖ­;Œü|%ââ|±jÕlÌœ966¦.ˆèOŽýû_À'ŸìÅûïï† G°jÕ;6ÜÔ¥Q727añâ)˜6-Ï<³&¼‰E‹nÅcƒH$4uyD—åïïo Š %%O<ñ„ +º4þ/""êz½yyJ|óÍq,]ú¦M[ƒ0eÊ;xã!—×aÊ”AX»ö~œ:õ Ž_†/¾¸O<1#G†0(&"¢F§ÓãÀ<òÈWˆï½·#G†`×®çðã‹ “%¸ X§ÓáÉ'Ÿ„½½=ÜÜÜðú믪««1a¼óÎ;ðôô„««+Ö®]‹çž{®®®ðððÀ† þtÛ_|ñüüü`ccƒûî»:îFìÑ€!›áÉ''`ÿþå™ìS<ðÀZ”•©L]u³ˆOlßþ4/¾ kÖìÄ”)ï -­ÔÔeQ³~ýzC$ÁÃÃo¾ùæ%Ÿ·}ûvÁÚÚ÷ÝwþñàÇ`èfŽ………ÂÃÃñý÷ß”J%n½õV|ýõ×pttÄÞ½{1mÚ4À¼yó T*1oÞ<8pÀø:—:NèŽã«Á°˜ˆ¨ÈåuHIIÃë¯ÿ€¹s?ADÄK=úu,^¼ gΔ`ð`?¼óÎ]øí·—‘±ë×?‚Å‹§`Ò¤hH¥ö¦.Ÿˆˆ …¢|ð FŽ| óæ}‚²²Z¬^='O¾‚×_¿QQ^¦.ÑdŽ?±X ¹\Žï¾û«W¯Æ7ß|µZ½{÷¢¶¶eeexõÕWñÀÀÕÕJ¥Ï<ó þùÏ^v»Z­ÇŽCnn.Ξ=‹-[¶`ÿþý7pψ//'|þù½X¿þdgË1jÔëxï½]P«µ¦.º‘H$Ä£ŽÅž=‹áà`…©SßŪU;ÐÚª6uiÔ444à¾ûîÃ[o½…¦¦&lܸ/¼ð*++»<¯   ,Àš5kPSSƒÐÐP¼û©©B¡ÀôéÓ±hÑ"Ô××cõêÕX°`²³³ÑÞÞŽ`ëÖ­øé§Ÿàåå…½{÷>ýôS¸¸¸àÓO?EBB€Ë'\ïñÇÕâ "¢«T_ß‚3gJpê”a”Ä©SÅP(ê`f&Dh¨qq~˜6-ƒû!<܃§BQ¯¡Õê°o_6’’aÏžLØØXàÎ;o‚ ÷0uy½†££#Þxã ˆÅbŒ9O<ñÖ­[‡‘#GB§Óáù矇@ À„  ‰ðì³Ïo¿ýöÛºí•+WÂÜÜAAAˆŠŠB]]Ý Ú+¢é–[°wïóø÷¿÷â½÷vaãÆ£MÑùû»`óæÇ””Š•+·ãçŸÓðþû2ÄÅùšº4êÅÌÍÍqèÐ! 2±XŒºº:XZ^8Ûwýúõ˜4i’±+ø…^À|غu+l\wÆŒ¸í¶Û°qãFÜÿýhiiÁ‡~OOO·éèè¡PGGGˆÅbãý—;N¸Þã«Á°˜ˆèO´·k–V†Ó§‹pút NŸ.FAA%ôz=|}%ˆ‹óÅÃA\œ òµµ¹©K&""úƒ²26l8‚ Ž¢¼¼ x÷Ýù˜:5|Kð{AAA]Þ¸EGGc÷îÝÆÛ666@ ˆD"ãí?cffWWWãí¿z>u±Ø ÿûÌžW^ù2Ù§˜<9¯¾: ÞÞN¦.º‰@ ÀÝwߌ "±hÑLŸþžyæV<ñÄ6ðÐ%YXXàĉxñÅ‘——ggçKއ*,,Dhh¨ñ¶@ @`` ÃBx?aaa())^µ“ IDAT…Bxzz^Q=uœp­ÇW‹G†DD‘ËëpìØyœ«¿ƒ ¬¾¾~ÀŸkkk177×ÐjA*vvfüã›9{6Ÿ—^:DTÔyúéElÙÃäÉ"/lmMÙ¿ÿüë_‰lß~”S§ry÷ÝXœ-5½4a”ùòË/y饗8xð aaaLš4 SSÓ[ngddDCCÀÏ55©zйzõê€ÿÖÐЀ‰‰ 06 ‹WCA&¬žž^®\©àâÅR.\(%#£ŒÊÊ&tu'áå59sœùÙÏ" tÂÑÑBÓËA„A)-­gß¾48O]]+‘‘î|ðÁF–-óEWw’¦—÷£zzzio¥“ÖVmm2Z[e´·wÑÖÖE{{]]rZ[etttÓÕÕCk«ŒÎÎnd29Ri'2Y]]=47wÒÑ!COÏíŽÖPZZÊÑ£G¹ï¾ûhmmeÇŽlٲ原˗_~‰««+>>>wüµ‚ Ÿ¨(âãÿ“;NóÎ;'øì³ó¼þújbb¼4½4aˆhiiñøãQDFº³uë^/þ Û¶­dýúPM/ME***˜5k‘‘‘¤¦¦"•Jo¹Ý¢E‹Ø¼y3Û·oÇÊÊŠÔÔTrrrÐÒÒbñâÅlÛ¶’’\\\¨©©áàÁƒìÞ½{¤ŸÎa± Fuu e\¸p nN [[èÌæÍáÌ™3ƒÙ³ÐÓÓýñ;A„Q¢»[ÎñãWˆ‹K#)©kkcÖ­ eíÚ=à©P(iié ¥¥“æfÕeߟ¥ÒN¤Rmm]´µõ…À]7>ßI{{­­²ÛnJ¤­­…‘‘>úúºèéébl¬žž.S¦è`j:SÓ©èéé2uêdººä7ÂãòòJ¨©¹³ŽBCCyþùçyã7((( €'Ÿ|ò–©¢óì³ÏòóŸÿ\„Å‚0 éêNbëÖ…¬Zȶm_±aÃ?X¶Ì—mÛVâà Î$/Üݧñï?Ço|Íþçgœ8‘Í_þ² CM/MV¬XÁk¯½Æüù󙦨÷ËTU5SVÖ€DÒ@yyã€ëuu­êǶ²2bêT»éê*¿£¿™LFjj*&&&êo4-66©T—}ûþŽ‘‘Þ ƒ–˜XÀK/¤¢¢‰§žRUSˆN÷ñ%=½„§ŸŽC&ëáÍ7ײhÑ,M/I§OŸÆËË ›AÝ^*•rîÜ9¬­­ñóóC"‘PRRÂüùóÕ·©««£¾¾žžž ÃËË‹¸¸8BCUÓꥥ¥àìì|K‡q…BASSêû½téÁÁÁ˜™lzMM ¹¹¹,X°à»ÿé‚‹AÚÚº¸x±”óç¯qîÜ522JéèèÆÂ  g‚ƒ r›Ð ‚ cžLÖÑ#™ìÛ—Fzz ööf¬[ʺus™6Íä–ÛwttÓØØNCCí46ª.›š:hll£¾¾¦¦öÿ­¦¦väò›»hiiab¢©éTLLô11™Š©©êòÇ>ol¬Çϱ¡¡íFÜHy¹*V]6pýz3==½L:'' ,pt4ÇÉÉGGÕ‡ƒƒ9S§Nfß¾}ÄÆÆ2~íY»v‰‰Vhii1c†~~öøù©6Ùõñ±² Ü¥žž^þñÓ¼ýö ¬¬ŒxíµÕ,\(ª)Æ“ÖV¿ÿý!>ÿüO<ÅK/Ý?&*š„Á»Ó°x0.]ºDLL Ÿþ9³fÍâàÁƒ¼ñÆ Øw,a± ãNuu éé%7Âárs«èíUàæfCP3s纜ɒ%>¼úêJÅFÙãÅ¡CùÍoàãcÇlüÞ=„±A„Ń#ÂbAF•––ÎS…ÃééÅ\¾,A.Wõ ‡†Îdî\æÍ›‰­­©¦—*‚ L@ mÔÖJ©¬l¦¶VJUU3UU-7>×Dmm+ mêÛëèhciiÄô馨Øck{órÚ4llŒ±³3»ííùó׈‹KåðáLV¬ 66”9sf ëóìíUPUÕrKo°jc¹jkoVEXZÞ÷UGØÙÝ]UÄêéé%5µˆøø\âãs)*ªÅØXÈH-šEt´ÖÖ7êñÖYÜÖ¦ÃÒ¥›8}:ôôz{xxØbkk‚LÖCvöuZZ:°¶6"2ÒãFxìvÛ÷UÕÕ-êà¸/D®­² ÜNRR/½$ª)Æ£¢¢Zž|r'uu­¼÷ÞæÏ÷Ðô’„Ÿ@„Ń#ÂbA4ª®®•ôôÒÒŠIM-&?¿ ---¼¼lÕáðܹ3µI ‚ ÜÞ^µµR$’F$’F**š¨¬l¢¢¢‰Š ÕŸûo×7 ùä­­44|MGGî>ƒáñݰø»ŠŠj‰Ï%!!—´´â•vxxØZT“]‰¶¶sæÌ :Ú“èh/¼½§ÿh2ØÙ×W ‹÷yÂDP]ÝÂ+¯|Åá×X¼Ø›W_]…““¨¦öíKãw¿;ÈÒ¥>üõ¯ë4~ÐT<Ž‹AVuu­¤¦‘”THJJ%%uèéé䤞 t?`A„»ÖÕ%§´´þ;SÁ7&ƒ›¨­•ªë¦NŒ½½9·†Áª€ÔxDºðëêZùì³sÄÅ¥QZZO` ±±¡<ð@À†Ñß­ŠønopMT}[ ÃÇõŸž>Ý]ÝIÃýTïJQQ-§OçqæL))ÅtvvãêjMLŒÑÑ^„†ÎdÊ”Ûoæ×Û«àÛo³Ù½;™³g °³3eÆ0¦L©ä—¿ÜŽÝíR £‡‹G„Å‚ ©ÆÆvRS‹HN.$%¥˜‚‚j&OÖ!0ЉðpWÂÂÜ rÒØîì‚ ÂØÖÞÞEii=×®ÕSVVOii¥¥u\»¦ÚÈ«ïí«©éTuøëà`~#6ÇÎÎ{{sÌÍ 4ö %§Oç±o_'Nd3uêV¯bÆyxyÙ¸mSSû€¸ïzyyÀª}ýÉß»‰\ßõ¡œ‚ --7*ò8{6ŸŠŠ&LL¦áFt´'QQ?8=ܧ¦Fʾ}iìÝ›JMM óç{°ys11^Lš¤=î:‹apañw}ÿÔñt||ìÑÑѦ°°–‹¯¡P(ñós :Ú“˜/üýï¨fEÈÂD%ª)ƧÊÊ&{ì#ª«[øè£Ÿ<¼û wO„Ń#ÂbAîJKK©©Å$'‘’RH^^5::Úøû;æJx¸sæ8‹£ç‚  I¥”–öÁõ\»V§¾ìÛXM[[‹éÓMqv¶bÆ Kœ-Õ—ööæ޾p´ªª™O>9Ǿ}iTV6:“G ÁÛ{:55Ò[Âà響èßÜ?mUwª·WAff9gÎä“Gff9þþŽ,XàÁ‚žƒ&•J%))ÅìÞÌñãW02ÒcíÚ¹<úhØ-§€÷…Å?üð-÷ÓØ¨‡¹¹lhžà0ihÐÇܼ--8pàëׯÿIaqݤ¤«ÃãÒÒzŒõWm„×Ú*#-­X=å¡®¬è¿yà`UW·påJÅ€¹¦F*da\ª©QUS|õ•ªšbÛ¶•8;[jzYÂ]èèèæ¹çösüøþ÷bݺPM/Iø§OŸÀÊÊJ³ åêêêDX,Âà´µuõ›."'ç:ÚÚZøù90ož+nϵ‚ ÂjnîàÚµzu¬º®ºlllT©½½ù€ xÆ U8ìèh1ê«@Õ“üùçØ¿?K—$èéé`gg†žž.µµÒ[ª"†Á7§ƒÇBUĺ~½™Ó§ó8}:¤¤Bš›;°³3cþ|UøéÔAߟT*ãÀsìÞBaa AAÎlÚÎøßöŒ¦¤¤$þö·¿ øœ\®MAÍÍzÔ¢¯ßó½_{'’’ìððhÂʪã®ï«Og§ÖöàáÑ„žžœˆˆž~úé!{ Pu<Ÿ8‘sËÔ±¿¿ººÚבž~óóÑÑ^DG{2gÎŒïÝXp0jjZúM‹Y’“‹x饃7ª)bøõ¯Šáš1L©TòöÛ'øË_Žó³ŸEòòË+~òëŸ0¼²³³5½„1ÅÛû–3 DX,‚ꔩŒŒ2’’ 8{¶€K—ÊP*ÁÛÛŽ°°™„‡»3w®Ë¨œàA4K¡P"‘4RXXCAA5EEµäåUQRR‡TÚ ¨6’st´`Æ UììlyãÃ{{ó1öUEômW^ÞH~~5ùùÕ´´Ü uu'1c†%NN–·TE88ŒÎiè¡Ô7±š˜˜O||.EEµèëO&,l&‘‘ÄÄxáêj}Ç÷{õj%;w&ñå—hii±jU ›6…ãímwÇ÷uþü5¶lÙÀßÿ¾‰  §;¾ï3}ús¼ÿþ£¬Z8$÷×'/¯Š§ŸŽ£¸¸Ž—^ºÇ‹øÑÍèîÆí¦ŽÃÂܰ³3£­MFzz‰úó‘‘,Z4‹E‹f ºëøvD€,Œ7==½üóŸgyë­o°´4äÕWW‰jŠ1î믯ðôÓq9³cÇFLLÀSÆ ÂD¤T*ÉË«&1±€¤¤RS‹ioïÂÅÅŠ¨(w"#= ›)~ð ‚ jr¹‚òòòòª(,¬!?¿š¢¢ŠŠj‘ÉTS™vvf¸ºZãá1M=ììl‰ÙužjBW—\——׫k"úâÖVUUÁ¤IÚ˜šN¥··—ææN §æÆC2ó'¢?–õö*¸|YBRR!‰‰ùœ?_JOO/žžÓˆŽöbþ|BB\~pcºÛéê’søð%víJ&#£ w÷ilÚƃÿ¤P©TòÿÏŸþtŒèh/Þ~{ffC×k=\a1¨§wÞ9Áßþv‚ÐЙ¼õÖºAõ9…ÒÒzr‰ÏUo<èåeKp° S¦L¢¨¨Ž””BärAAÎ,YâͲe¾¸¸ Íé¿"@ƃšš¶m;Ì—_f°hÑ,^}u•¨¦Ãrs¯³yóGLaïÞ'™>ÝTÓK„¡$ÂbA˜(*+›HJ*äìÙ|’’ ©«Sí|îFT”‘‘î⇜ ‚@w·œ¢¢ZŠŠj((¨¡°PõQ\\KOO/ÚÚZ8:Zàî> 77ÜÜlpw·ÁÕÕfTOÍ*Jªªšt÷¿þݪó“Áºº“8þß|s•ææ,ð`Æ0bb¼ÆÄdôP*)©ãìÙóIN.B*íÄÆÆ„¨(w""ܘ?ßó®BóÒÒzöìIá“OÎÑÖ&ãž{üظ1Œ°0ן|Ÿí<ûì>ΜÉ祗îç‰'¢†|:w8Ãâ>—/Kxæ™}TU5óÊ++F¼7³«KNJJ'OæÜ2ulccLccÉÉE46¶3s¦5K—ú°t©AAÎhkÝß·ØDO«RRŠøÝïTÕ[¶Ä°u«¨¦«jk[yôÑÐÐÐÆÞ½Oâéiûã_$cƒ‹a¼jié 9¹H]-QRR‡ÁæÍ›Id¤;îxzNÖÓA„Ñ«££›¢¢šõ5©¦…ËËËèêNÂÙÙw÷iêiaWW\]­Gí/¶MMí`‰¤Q½™\EE#==½èééâè¨ê î …ûúƒ,Ô¡·LÖñcYìÝ›Jzz Ó§›²ví\Ö® ÁÎnd¦:GƒººVõçÄÄ®_oÆÈHÐЙ7ÎHrÇÝ}Ú]=Fo¯‚“'sص+™³gó™6Í„G cݺлžÖNO/áW¿ÚͤIÚCZ;ñ]#ƒ*°ýóŸ±cÇibb¼xã5ØØëcÞÎ÷M{zÚâéiKo¯‚«W+¹v­ C/öfÉoæÏ÷@_è÷½²0VÈå þùϳ¼ùæq,, yõÕ•,Yâ£ée ?A[[?ÿùÇ\¾,áãFhèLM/I†‚‹a¼èÛa\µ‰L>™™åhiA@€“ú¹€§ 7ý$‚ @EE99•äæV‘]IvöuÊÊêQ(”Lž¬ƒ««5®®ª a77<=mqv¶u?3VE4 ‘4¨Ã`‰¤©ôfU„­­‰º+øfo°* þ±`-7·Š}ûÒ8xðíí],\8‹ØØyDG{étähÕÞÞEZZ ‰‰ªp8/¯mˆŒt'*ʧ!ÙØ§¶¶•ýûÓØ³'…êꢢ<Ø´)œE‹fÝuuIÿÚ‰E‹¼ùë_×kÅÖH…Å}Î+áÙg÷ÓÜÜÁÿüσ¬\92{;]]rÒÒŠÕáqQQ-SpÂÄD‰¤‘«W+™¥Ržg×® ª tbÓ¦px à'm€w;}µ“'ëðÁ p²ûþ!š‹ûœ=›Ï /|JWWÿû¿³|¹ßˆ¯á‡ÜnêØÝÝIÕÐÔ¤zX¶Ì‡%K| q±I~ š&—+øè#U5…™™¯¾ºŠ¥KE5ÅXóÑGgyùå/Ù²%†ßþöÞqý>B×DX,£]aa y$$ä’ž^Bw·{æÏ÷ :Ú“9sf Éi ‚ ÂèÕÞÞEvv%YYêp¸¨¨–Þ^†ê.Noo;||ìpt´ÐX]BW—¼_W°ª*¢pÿªˆiÓLnÛ<œÓ¼R©Œ/¿Ì ..•+W*puµ&6v?Œ¹¹Á°=®&ÕÔ´¨'‡ ©©iÁØXŸðpW"#=ˆŠrÇÅÅjX;;»’]»’ùâ‹ ”J%+W²ys>>vCú8J¥’÷ßçÏVÕN¼ýö:Œõ‡ô1~ˆ&Ãb€ÖV¯¼òû÷§ñÐCsؾýÁQjJ$ê÷·II…´·waoo†••55R®_oÆÚÚˆåËý¸÷^BC]Fü  šPS#åÕW¿âË//ãÉk¯­ÕcÌ‘#™<õT+VðÖ[kGÍÙ[‚pDX,£M{{‰‰7v™Î£ªJõf9*ʃ <™?ß ‹Ñqz¡ ‚0ôzzzÉͽNFF9—.•qù²„âbU0lee„¯¯½: ðós`útÓ]_ÿªˆ¾®à¾šˆ²²jk¥ô½½433÷ÃNN?­*ân]¼XÊÞ½©9’‰B¡äþûýY¿>”¹s]Ft#¡µUFjjgÏ”THAA5“'ëìLd¤‘‘îøùÙÛ/±ÝÝrÎd×®d.^,ÅÍ͆ÃxøáaÙX¬µUÆÓOÇŸ;bµߥ鰸ωÙüÇ|Ê”):¼ûî†QÿýÝÓÓKzz 'Of«§Žõõ'cggJ{{7UUÍXZ²|¹÷Ý…× IDAT7›yó\5¾ˆY)ý«)~õ«ž~ZTSŒ%))E<öØG,XàÉ{ïmu{@Âa± Œ%%uœ<™Ã©S9¤¥£T*™;×…ùó=Y°ÀoïéâA„qª²²‰‹˸t©ŒŒŒ2®\©@&ëÁÔt*NÌž}3|°µ™`¸¥¥C÷MßÜTîÖª3-Õ5}¡ðhJš›;øüó ìÛ—F^^^^ÓÙ°!”œ3¢S§Ã­§§—‹KIJ*äìÙ23ËP(”Ìš5¨(U82}ýÉÃºŽ²²öìIá“OÒim•±d‰›6…î:lïeòòªxüñéèèfÇŽ„„h&-a1@}}/¼ð §Nå°eK /¾xϘ +¾oêØÂÂ---êëÛ077PÇaan?ÃNÈÂp‘Ëüë_‰¼ùæqLLôyõÕU,[æ«ée ƒ”‘QÆúõ;wåïß4f^ƒ ‚fôõ¶8¡š (-­ÇÚÚˆèh/.œET”ǰLÝ‚ š%“õ™YÎ… ¥dd”‘‘QJmm+ºº“ðö¶# À‰À@Gœ†­TSŸ7ƒàFÊËëüY*í@[[ [[Ó]Áý¯Öß”J%ii%ÄÅ¥rôèetu'±bE±±óF¬¿v¸)•JòòªnL–VB{{ŽŽDFºéNx¸ëˆœÔÛ« >>—;“8s&kkcbcç±aC(66&ÃúØ_|‘Á‹/~Н¯=;vlÆÚzh{–ïÄh ‹ûìÝ›Ê+¯|Éּ̙ûnìˆl 7”ú¦ŽOŸV…ǹ¹UèêNB__©T†‰ÉTî¿6«V1wîÈuÿ C©¦FÊk¯æ‹/2ˆŽöäõ×E5ÅX‘•%aíÚ¿<ƒ?ÜÌäÉC×Ï/ÃH„Å‚0Rªªš9q"‡„„\Ξ- ««??/ö&:Ú??‡QóWAÍÍœ?ôôλÆåËåôôôbooF` 3AAN8âëë0¤|)JjjZÔÓÁ}½Á}=Â55«"¾/ ÖTUÄݨ¯oã³Ïαo_%%uøû;²~}(«VŽŠÍýîVeeÓÎaUµD]]+ffDD¸éND„ÛˆõõmìߟÆÞ½©TT4áÆ¦Má,Yâ3ìÓž==½¼úêa>úè,O>9ŸßÿþO˜ŽÆ°àÚµ:¶nÝKnnøÃýlÞ1fÏX«ªj&>>—“'sHL, ££›)Stèê’cnnȃòðÃ!CÞ‡= Ϟ퀯¯ýmâ)Œ©©Å¼ôÒAJJêØ²ETSŒÙÙ•¬Yó³g;ðÑG?ÿfÂX ÂbA.½½ Ο¿F||.§Nå›[…‰ÉTæÏ÷ &Æ‹… ½D÷° Â8SYÙDzz‰: ÎϯF[[ OO[æÎu!$Ä…¹sg É´eKK‡z¸¬LUÑw½¢¢‰în9 ªŠ¸[ö †U=ÂcýL…BIbbûö¥qüøôõuyðÁ9¬_Š·÷è ŒîDKK))Å$&æsöl%%uèééâBT”*öñ±ñƒÍçΕ°sg2ÇŽe¡¯?™5k‚Ù¸1|X§áû«®ná¿ØENÎuÞ|s <0"ûcFkX ªÓÙß~û[þö·DD¸ó׿®µg Vÿ©ããǯPRR‡––J¥++CV¬ä±Ç"˜1cd¾/ŠÛÈÚÚZÌœiÍìÙªðØßßoo;2 êjŠ·Þ:Ž‘‘ªšâž{D5Åh——WÅš5àéiËÎ{%” Ü% ÂPjoï"!!'²9y2‡¦¦v¼¼l‰‰™ÅÂ…^Ì™3CãS/‚ ÂЩ®n!)©¤¤RRЍ¨hBOO—Ù³ IHˆ sæ8ÿ¤SŒ»»å7àÆapßtpý÷VEômçàps2ØÑÑ|Øk4¥ºº…ýûÓùä“t$’F‚ƒg;ð³JW—œ JILÌ'1±€¬¬ |}퉈p#*Êà`—!B¬¶¶.¼ÀîÝÉäæVáïïÈÆa¬\8¢ßiiÅüò—»06ÖçŸÿ|lTÕ*Œæ°¸ÏÅ‹e<õÔ^¤ÒNþüçGX¾ÜOÓK2UUÍ$$äñÅœ?_Bw·ª[ÝÒÒˆåË}ùõ¯cpp°Ðð*\UU3—/KÈÌ,'+«‚Ë—%45µ£££›Û4üýoÈxyMSgC§¦FÊë¯áС‹,XàÁöíŠjŠQ®°°†Gù?\\¬Ø½û‰qqÆ“0n‰°XîVuu 'NdsüøRRŠP(”Ì›çʲe¾,^< ;;3M/QA"í$'’’RDb¢jÒsêÔÉ„„¸æJh¨ ~~ƒê¤S*•TW·Ü²‰\ß”puu‹º*ÂÔtê€ãú‡Áööæ&,èéé%>>—¸¸Tò01Ñ硇æ;77M/ïŽõö*Èʪ %¥ÄÄBΟ¿Fgg73fX©'‡ÃÃÝ05ª±5ææV±{w2^@.W°re 7†áï?²ÝÏJ¥’üã Û·aéR_Þzkí¨ëy a1¨†^~ùKöíKcÍš^{mõ¸«<Ëœ;WÌž=©œ9“Gs³êàš¥¥‹{óË_ÆŒ©×Œ²²._î U—­­2uß}ßô±ŸŸ=nnÓÄpÊ’–¦ª¦(*ªeË–žyfñ˜=`:””ÔñÐCïãèhÁž=OŒºŸc‚pƒ‹á§Èɹηß^å›o®’•U±±>11ž,]êKt´§xÑA'::º„ÃyyULš¤M` ª0/0Ðé¶amÿªˆ¾îà›=ª"ú&ƒ-pp¸‡ªˆ»UZZO\\Ÿ~žººVÂÃ݈Dze>cj³¥RI~~5Éɪp8-­©´kk#ÂÂ܈Œt#2Ò{{Íhîî–sìX;w&sî\ ..VlÜΚ5Á˜˜Œ|pÝÞÞÅóÏÂ×_gñ_ÿu/¿úUô¨ìÜ+aqŸãǯð⋟ah8…wßeΜš^Ò°)/¯çý÷øæ›«ÔÕIQ*ÁÈH¨(OÖ® !,læ˜:-\¡PRRRÇåËå\¾,áòe W¯VÒÙÙ¾þd||ìÔ³g;ââb%öFÇärœÈ›oŠjб ¬¬Õ«ßÃÅÅ’Ý»ŸS¯=„!ÂbA U'Z1ß|“Í·ß^E"iÄÑÑ‚%K¼Y²Ä‡ÐЙâ¾ Â8QTTK||. ¹¤¥#—+ðñ±#"ÂðpWæÎuQ¿±ïî–SQѤÞ8N"¹¹‰\yy#--€ª*bÚ4õD°½½¹: vr²ÀÚÚxT†_š$“õpìXûö¥‘šZŒ1ëÖÍeÍšGÿ©ä}ÊÊHJRmH—’RD]]+&&S™7o¦zrØÃctT)H$ìÝ›Êþýi47w°d‰›6…ᦱïÏ¢¢Zü_45µóÁ›wÕÈ:c¬…ŵµ­¼ðÂ~NŸÎç©§ñÜsKÆý™ ••ÍüßÿâðáLÚ-tt´žqãÌ@ï1y:¿\® °°š¬¬ 23U!rvv%==½éáçgÏìÙŽêK'§±ó:* NM”íÛpðàEæÏ÷`ûöÕ£º³{"+*ªeÕªw ræŸÿ|Ld Âh#ÂbA¸¶¶.âãs8~ü*ññ¹´¶Êð÷w`É–,ñÁËËVÓKA†@GG7‰‰$$ä’‡DÒˆµµÑÑ^DG{âå5¦¦võDpÿʈ響¸¹ÜÍë§*ânåæ^gïÞ4¾øâ"íí]ÄÄx;èhO&Mý¿LÕÔHIJ* 9¹ˆ¤¤**šÔU%}á°Ý¨y. …’øø\öìIáÔ©¬¬ŒÙ°!”ØØyL›¦Ù¾ëÿû2Ï=·i|øác_Ï‹a1¨&ÞwíJáµ×ãá1÷ßß0a¦¬, ;w¦pøp=Lš¤…\®ÀÉÉ’˜/bb¼ÆÜÔq==½äæ^'3S¢îA.,¬F.W`ffÀìÙøùÙ«{mmM5½da¤§—ð»ß¤¨¨†_ý*šgžYýô§Oç¡§§‹ÁêëۘdzÏîCOo2ï¿¿  gM/iÄõö*8u*‡Ý»S8}:kkæÏwÇÀ` éé%dgW¢¯?™°°™ÄÄx‹©ãþZZ:ÔõYYª ‹ë×›ÑÒÒÂÅÅ Güýð÷wÂÇÇn\„æãÙ¹sªjŠÂÂ~ùKU5ÅÔ©£ó æDtèÐEžz*ŽW^YÁOÌ×ôrA„ÅÂÄQ\\˱cYüûßYdeI°´4déR_î¹Ç—ÈH÷1qz£ ÂDUS#——7"‘¨6”«¬lB.W0uêdÌÍ P(”46¶#“õܘóäÁç8¶Â§ñB¡P’œ\ÈÞ½©|óÍU¦LÑaÅŠbcç1{¶ƒ¦—7@o¯‚¬¬ ’“ IL,àÂ…R:;»qr² ,ÌÈH7ÂÂܰ¶6ÒôRTNÎuvïNæàÁ‹ôö*X¹2Ãð÷wÔôÒnñÍ7WyꩽxzNçÃ7úú‘ï3žÂbPU•<óL‰‰üÇÜÃÖ­ ÑÖÿÃM"i$..•ýûÓillgÉoxÀŸöönòHLÌWO/^ìMLŒ¡¡3Ç]€ZW×Jff9™™å\º¤ºlnî@Ww^^Ó p¼";âêj=jºÙ¹\Á®]I¼ñ†ªšâ•WVpï½³5½,á†?Nä÷¿ÿ‚·ß^ÇÃkz9ÂÄ&Âba|+(¨æÈ‘L޽L~~5¶¶¦Üs/÷Þ;›â Œ Â(!•Ê(/W…¿eeªK‰äæ†r2Yºº“°³3ÃÁÁ''ÕÆqæ´·wqñb'OfÓØØNHˆ Ë—ûqÏ=¾ØÙ™iøÙM\ÕÕ-ìߟÎ'Ÿ¤#‘4ä̆ ó¸ï¾ÙLÑôòÕæ^ùùÕ$%©j%ÒÒŠJeØØæJd¤;aa®8:Zhz©ƒÒÝ-çèÑËìÚ•Ìùóט9ÓšG cÍš`LLFßä¶R©äÍ7¿á¯ý–ØØP¶opÌÀoa1¨þ}>üð,ÿó?G™3Ç™wßЛ õôôòõ×Wس'™ää"¼¼¦ó‹_,à¾ûf“•%áäÉrÉÍ­0u¼pá¬1ór§JKëÕÁqff9W®T “õ`h8__{œÔ²½½øy<ÔÖ¶²}û>ÿüQQîlßþ ¨¦%ÞzKõóð£cÉM/G˜¸DX,Œ?×®Õqøp&‡_"7· {{3î¿ßŸ{ïM@€ã¨í@AϺºä‚àòòz$’&õ”pKKZZZØØ÷ÛDN÷ýyÚ4õ¾üüj¾ü2ƒ/¾È ¼¼oo;V¯bÅŠ¦OŸ¸a†¦õôôŸËÞ½)œ>‰‰>=4‡ØØy¸¹Ùhzy€*ÜHJ*$9YõQ_߆‰ÉTÂÂfáFx¸îîÓ4½Ì;R^ÞÀž=©|òI:Ri'K–ø°iS8áᮣö½Ok«Œ­[÷rútÛ·?Ȇ ó4½¤»2Ãâ>W¯V²eËnÚyóÍ5,[æ«é%i\vv%ÿøÇ¾ü23³©lÞÁÆá˜›PUÕLBB yœ=›Ok« WWku]Åxœ:î#—+ÈϯâÒ¥›ÓÇÕôö*°²2RÇ}SÈ£±~h¢8w®„—^:DAA5¿øÅžyfñ¨9;‘ýæ7øê« ¾øâi¼¼l5½aba±0>H$9’ÉW_]âÊ• lmM¹ÿþÙÜ" An}½Áýë!nà ÔÔHÕ·533¸%î›þ±ÞàÚÚV>ÿü<‡]$'ç:ŽŽ¬ZȪUc.ÜoJK뉋KãÀsÔ×·îÆ† óXºÔGã]Ð55-$&ª7¥«¬lbêÔÉÌëBx¸nøøØ¹Sì{{ÄÇç²sggÎäcmmLlì<6lÅÆÆDÓËûAÅŵ<öØG´¶ÊøðÃÍÌ™3CÓKºkã9,èèèæø‚ýûÓØ´)œ—_^1ª:¯5¥¦FÊÇ'²gO*2Y>Ä“O.ÀÕUµidOO/éé%œ>7`ê8"Â… g퉃ƒ¹†ŸÅðêèèVo × ——7àìl9 ¾Â××^|_ ¹\ÁîÝÉüùÏ_cd¤ÇË/¯à¾ûD5…&õôô»ƒââ:¾ýö,, 5½$aâa±0vUU5säÈe¾Ä¥KåXYrï½þ¬XáÏœ93ÆÜ/|‚ £]mmë÷ÁI#ׯ7ÓÓÓ ¨zƒoN[ÜRad¤wG«P(9s&Ÿ¸¸TNœÈÆØXŸ`õê@ÄA ’Éz8v,‹¸¸TÒÒJ°±1fݺ¹¬];W£áGSS;))Eêp¸¨¨]ÝIÌ™ã¬îp³uuu­ìߟÎÞ½)TV6áÆ¦Má,Y⃎Îè¯Ø:q"›§žÚ‹›› ~øÓ¦î`{°Æ{XÜçÈ‘L^|ñ3lmMøàƒxzŠÉ7€ÎÎn¸À‡ž¡¤¤Ž… ½øõ¯2w®Ë€ÛUU5ŸËÉ“9$%ÒÞÞ5`ê8,Ìu̾6݉††623%df–©C䯯vtt´ñð°% àæô±»û4Q8ÌêêTÕ\ 2ÒíÛW3s¦µ¦—5aI¥2–-{ssØ‚¾¾ØŒPQ",Æ–ÚÚVþýïL¾ú*“ ®aj:•{ïÍê"ÞD‚ Ü©T6 '¸¼¼‘Š U0|»Þà¾zˆþÂVVC³ñWMM ûö¥³••Í7&UCY¶ÌW㓪]nîuöîMãС‹tttãņ a,Xà¡‘ŸÅíí]¤¥•œ\@RR!99×ÑÒÒÂ××^=92cÌÿ²•–VÌ®]É;–…ÁÖ® áÑGØ1cltM*•JÞ~ûo¾yœ5kæòÇ?>8®þ_ž(a1@ee[¶ì!+KÂË/¯dÓ¦0qàî…BÉ©S9üýï ¤¦îÊóÏ/cÞ¼™·Ü¶ÿÔq||.yyUL!"Âèh¯ 1uÜ_yyÀéã+W*èèèfêÔÉøúÚ¨¯¯Кvþü5~÷»ƒ¢šb(-­ç¾ûÞfþ|Þ{oƒxF’‹…ÑO*•ñõ×YâÓ~Ý|öÙyvì8Myy‘‘îÄÆªúnÅk¾f;WÂþýé=z™Þ^Ë—û;ÐP—›réíUpù²DŸ? ™¬'' ""Ü w%<ÜmȦÚGƒììJvíJæ‹/2P(”¬\ȦMaøù9hziw¬´´žÇûˆÆÆvþñÍ·œ–?^L´°¸Ozz [·î¥·WÁl·ÿ¾wãܹÞzë[ΞÍ'$Ä…çŸ_BT”Ç~MßÔñ©S9œ:•CQQí€©ã… ½°³3¡g0zÈd=êþã¾¹´´sœð÷w$0Ð??‡1uPm´©¯ocûö#|öÙy""ÜØ¾ýAu·0r>ù$^ø”wßeõê M/G˜DX,ŒJ¥’óç¯qèÐEΤµUFD„«W±|¹Ÿ8ýEU§Ü÷ÁIÀÞ`}ýÉ·l"×÷g{{sŒï¬7x¸ÔÖ¶ò¯Uo ôÈ#Áüâ ı†Õ×·ñé§é|úé9ŠŠjñö¶cýú¹¬^„‰Éðï\¯T*ÉÍ­R‡ÃiiÅ´¶Ê°±1V‡ÃîØÛ¯ ¤»[ÎáÙìÚ•ÌÅ‹¥¸¹Ù°qc?2jþŸ½SÉÉE<ùäNìíÍØ¹óqlmM5½¤a3QÃb€––ž{îNžÌæ7¿YΖ-1â”éïqáÂ5Þzë[NŸÎcΜü×-',ÌuP_û}SÇ^^¶DG{MÈ©ãþš›;ÔWdf–SW×ŠŽŽ6³fÙèH@€N¸¸X‰ïÍ;tႪš"?¿š'Ÿ\À³ÏŠjŠ‘ö?ÿs”?<ÃÁƒ[ tÒôr„ñO„Å‚æÖpèÐEºˆDÒˆŸŸ«W±bE66Æš^ž ˆ’Je·ÔCTT¨Bá²²½ÁÓ§›~ÏrªPx´OXT³cǼ€±±›7G°ys„8…Yƒz{ÄÇç²o_ññ¹èëëòàƒsX³&dD¦Y‹‹kIJ*ToL×ØØŽ™™óæÍT÷»¹Ù û:4¡´´ž={RøôÓs´¶ÊX¶Ì—à ›9¦C]»’ùïÿþ‚{îñå¯]7æ;£ÌD‹AuçÃϲ}û"#Ýyçõ¢à622ÊøË_Žsút÷ÜãËþðÀ$íê’“–VLBB.ññ¹ê©ãÈHw-šEt´ç¸>03I#eê+W*èî–cb2•À@GÔ²©éðë¾[Mñßÿ½‚Õ#¥·WÁãLffß~ûâˆ× Ž‹ͨ©i᫯29xðW®TàèhÁêÕA¬^$Nma\ëî–ߘ÷M 77ì vt¼÷Ÿ¶µ¾Þàᔓs?ÿùkNœÈÆÅÅŠ_üb?Ì”)ãg“«±¦´´ž¸¸4>ÿüµµRÂÂf²n](Ë—û ë黕•M$%ª§‡««[04œBhèLÂÂTáð¬YÓÑÖ»aééíUpòd»v%söl>66&lØ0õëCÇüÁòžž^þû¿¿`÷î^|qÏ<³xL‡Þƒ5ÑÃâ>/–ñË_Ƕm_qíZ7†óÜsK~ÒAS‰¤‘øø\NžÌ&%¥˜ÎÎn1uü==½\½ZÉ¥Ke\ºTÎÅ‹¥êú «Á±#ÎÌš5}Âÿ}ÝNCC¯¿®ª¦wcûöÕãö@îh#•ÊX¾ü-lmMøä“_Éß„1C„ÅÂÈ‘Éz8v,‹Ï>;Orr!FFz¬Xy  ® IDATÀêÕAÌ™ãIt´§¦—#ŒO",†G}}‡]äÓOÓÉÍ­ÂËË–5kTãXZŠî2AF·¾Þàþõ}apyy#ÝÀÍÞྞà¾Mäúª"F{oðpª©‘ò·¿`ïÞTììÌxþù¥¬^4n+F³ææºH\\*¹¹U¸ºZ³~ý<zhÎþLnoï"=½D==|õj>>ö„‡»îÆÜ¹.jòH*•qàÀ9vïN¡°°†À@'6m çÆ\H®T*Ù¾ý(¿ùÍòï=Øÿí·WÙºu/ÞÞvüóŸû®Ú]»’ùío?ÿÑÛ9:Z–öûXÑèÕWKðÞ{n[KññljDG{«(?EeeÛ·åË/3¸÷ÞÙ¼þúê!«¦é›:>y2‡S§r(-­0uãÅ´iïÀÆéèèæÊ•ŠýÇUUÍL𤻻 N©úÝÜlÆÅ"wª¡¡íÛòé§çwåõ×Wãî>MÓËמz*îÿٻ︦®6à¿°‘ "²dÈPQ@EDWÝZ7n­¶¾­Vm_«¶¶ZkÕjõ­Uë q·RPQe˽ HrÞ?")¨„ 7„óý|ø($œûporrîsÏ}BBâpíÚ*˜˜Ð;(‰£ÉbJrjjx¸u+§O‡ãÖ­8hh¨bÂWLÚ§UÆ¡(ŠWu5÷mò÷ßDpÝÂEElásŒt>˜63Ó‡‰‰n»<)…ÇããØ±0lÝzªX±b¦NíKï$ie|>AXXüý 8ø9”•1z´3fÍêWWK‰l£ªŠ‹ˆˆTáÌᨨ×àrùèÖ­³pæ°‡‡5ttÚßÂAÏŸgâèÑP\¸ð, &¸`öìèÞÝ”éКíðá{X·î>ùd¾ûnœðç„ìÙs [¶ü…éÓݱyó¤vñ~/,dÃÙy=x¼†O¥ðÓO“1kVÿVŒL6±ñŸ}ûåËR<~œ‚qãvÃÜÜ÷ﯥܽû _ˆ¢¢ ¬_?3f¸Kü®œwgs85pr2||ìé¬ãdg—ÔKGG§£¢¢ššªèÕËüíìc ôêeÑ®"‹Œ|5kÅ.Mñða,, hY”f¨¬¬ÆÈ‘;¡££Ž³g?kŸ»T«¢Ébªåââ²pæL8΋DQQ ê†)SúbøðîPQi[³f(Š’<ÙÙ%ÂäoÝYÁ¯_Ô«¬£Ó¡Îrúõf Ë[Ý`i{ú4 ÿýïYÄŽÁ'Ÿ Šà®®ÂtXmVY§N…cñbo±'3³gÎ<©SáÈÌ,‚««%fÌ臱c{·xF/—Ëdzgio¥KÄãÇɨªâÂÒ²ãÛä°`ö°¼Ì¨OO/„™™¾ØÏçpjpéÒS?†'O^Ãή3æÌñÀ¤I}Ú|É™ÔÔ|øøüŒª*.X,Ž]__'TUqñå—§pùòS|÷Ý8,XàÅt¨­jÚ´½ MŸÏÿà㊊ ˆ‰Ù]ÝöwÁäC*KQTÄÆàÁ[‘“S`ÆñX¸°}½–RYYíÛƒqàÀ h‡;¦KmL§aa‰¸u+!!qõfê‡v•øl .—øølDF¦ ÈII¹àó ºtу««%\\,л·9zô0“ë±%ŸOpüø}lÙò:tPÁ† ã0vlï÷žÇåòan¾ðòåOmþs’ 99rüü<ê]Ä¥(  ÉbªyØìª··´>Dtt:ll:aêÔ¾˜<Ù­]Öd£(ªõåå•Õ[@®î,áÌÌ¢zuƒÿ\?lnn@§PZZ‰Í›¯àäÉèßß›7O¦+c·PQžž?¡¨ˆÇ¿¹°Nu5ÿüóqï^<ôõ50i’fÎì›NÍŽÏ'xñâ BCpÿ~>LByyŒŒt0p ­pQ:y\ôgÇŽ°}{0^¿ÞÞèl””<œ8q§O?›]…‘#{bölxxØ´R´ÒÅ猷Ϟ¥ƒËåAA 5üùç¬Y„””|ìß?^^ݘµÕ=/¾À‡N§0h=NœXÄ@d²­nYн{gcçÎpï^¸\Á綪ªBB¾n÷å(êzòä5–-;‰ÒÒJlÛ6#GJáÈÔÔ|ܺ‡ë×cñðaª«yõf÷écEﮡ´”ƒ§Oÿ}•†‚‚r(++ÂÉÉômýcÁ,d++C¦Ã•¸ÂB66mºÜ`iŠ“'૯þ¸»[ãÌ™¥tvl3EàóÏpèмvµ ,%u4YL5MLLNž|€sç"ÁçŒÛ Ó¦õk°öEQTs••qÞ+!˜,øEÅ»uƒÿM×Î633 ³`¤ìâÅ(|ûíyÀúõc1i’+]¼®…rrJ0iÒ¼~]‡¥K}°~ýØ÷žW{gÏŸ>FYƒuÃôéîðõujö W||6–€’PTþ¾ÆÛ’6ðô´…µuóвŽÇãcíÚ ?~€ ‘5nÜû3¢x<>®]‹Åñãa¸{7¦¦º˜9³?¦Ow—»>çàÁ»Ø°áøüO”•¡  €.]tqüø"¹Ltˆ£¼¼ Ý»¯Cu5÷½ÇXøí·Y?Þ…Èd_mYŠ— „Ô{})))¢gO3\ºô9-GQGEE5¾ûîüý`áB/¬_?¶Õ’k••Õ¸?©Þ¬c]ÝðòÔ:¦³ŽÅ“šš¨¨´·Éã׈‰É@M špuµDŸ>–ps³‚³³ÔÔ”™W""#_ã›oÎâåË,,\è…/¿B€~ý~@QQ@II£G÷ž=³è²V¯þW®<í[«iIJRh²˜j›]…‹£pòä<}š{{cøùõ—‹Û*)ŠbNu5EõÁuËEÔ¯¬ýÁD°¹¹>Œui==””T`Íš \¼?¿þøæ›ÑÐÖVg:¬6/-­'þ†¼¼2áìøTñìÙ÷ÐÐPEi)—.EáÔ©‡ˆŠJƒ¥eG|üq̘ѯYwö¼~]€û÷ÞÎNDNN)´´Ôàîn OOÁìaãvqòÆfWañ⣸s'|> ,ôíÛçÎ->''§á8yòrrJàíÝ sçzbð`¹œa—’’ŸŸQ]Í{ï1Ì›ç‰'0™ìX¼ø(‚ƒŸ gÅÖRUUBlìèЖâiÈ£Gɘ8ñ·z‰âZ ,|ûí¸&•ái/®\y†+N¡{wSìß?—‘$mRR.nÞ$ŽëÎ:2ÄC‡:¢W/s¹ì%­ºš+\ýô!عs:¼½ÛßíçÒƒ‰CIIe½Ä“’’|}!!/£FõÄ´iý0`€M“N rrJ„5‡Ãž^uuôécOOÁìagg³vw’Ÿ›[†3ö!>>\î¿'¯, wïþYY%8v, ×®=‡––¦Më??XX0µtñx|Œ÷?DG§¿—­U·~q{uõj .<ŒºgTJJŠøè£žØ»w6sɸÚ:ÅùùåõFu)++âöí¯ÛíÌuQr°`Áa°ÙÕð÷_ {{cÆb©u|óf,nÞŒCzz¡Dg9r~~ÚÍÄ€ÌÌ"<~œ‚ˆˆTDD¤âÅ‹Lp¹|t>}¬àæf WWKôèѥ͕m(,dcíÚsøûïg âu±X,¬];Ÿ~:˜èÚ¶ÈÈTŒÿ?lÙ23gÒEU©£Ébª¾ÊÊjá,âÚÅYüüúcòd·v¹š9EQ¢åç—×K×-ñ¡ºÁJ››ëÓ©m!û÷ßÁæÍ—1|xlÛ6….Ü$!Ïž¥cÊ”½¨¬¬~/1Çb„:iã‹/†bÒ$7±ß3EElÜ¿/H ‡†& 11ÊÊŠpq±Îvuµls'œ’ôêU6¦Oß‹ü|ö{û^YY3gö‡¿ÿ8;›cölŒÛ«],à»ÿmlÜx郳>kÕÖ/¾uku›žõÖÕÕ\8:®CEEUŸ²püøB êÈX\²Œ‚Y³þ¨W§øC””³+¯\ù¢Ý]ÀGY‹ETTž/3uÒs…å*>LBM ={šÁÇǃ;4iÖqbb.¼¼~‚M'œ:µ¤]ö3ÕˆŽNGdd*?NEdd* Ê¡¦¦Œ=ºÀÕÕ}út…««e›(òŸpáɓŀ aü¿ÿÍÄĉ®­YÛ÷ãWpìX(nÜX ssù½˜Mµ š,¦âã³qìX‚‚"PUÅÅèѽàç×}ûÒZÄÕž•—W½WâCuƒ•”`jªW¯} d77ËŸç8p‡ÝÅÁƒóѽ»i“~wâÄÿ!"âµÈ; Á箚š2._^æJ¬´EÑÑé3fÖ¯‹… ½˜‡j»h²¸=*-­D@@8Ž EFF!vÀüùáíÝ^}¢(9Ãçde “¿…HKû·TDvvI½ºÁffz°°è33½·‰á“ônpû”˜˜‹éÓ÷AMM'N,‚¥eG¦C’—.Eá³ÏN‚Ïo8Iò®Ï>__Gá‚t©¨®æ¢kWC  (+ááaƒŽž©E»v]ÇÖ­W4¶ë?´Ð<ûý÷[ؼùÊ{/jÄúúš3Æ£Fõ„»»u»M×%Hx­GQQ (hú÷§ÕÄŸààç¸x1 /_fAQ‘¯~Ÿ¨¤¤GGSüõ×rZŽ¢„¬\)˜aø)\\,˜©QlvBCêÍ:60Є·w7aâØËë§÷ú"%%˜›àÀ¹pp0a(zÙÆçÄÇg×›}œœœ‹›N™Ǯ®–°±éÔ¤À¢EGñ×_ÏÀb±àç篾 }}FïÆ˜=û@QQAäT€à8ëêjàŸ¾„±±®ØñQÀ/¿cÏž[¸qc5ºv¥5ß©f¡ÉâöäÕ«l>|AAPRRÀÔ©ý0ož'=ñ§¨6®  ¼^"¸î,áºuƒUU•„‰`Aý`ƒz‹ÊѺäÔ»^¾ÌÂÔ©{ann€'Ñ»N$èÔ©‡X½úO±Å€àööòrLMõ0`€pö0=‘—ËÇêÕâÏ?5i¿@hè7rÒ•ƒAƒ~îeeÔÔðÑ¥‹>Æë#z wos((ÐÉïúöÛó8xð. µõ=ÝGÍ™Y„àà\¹ò§Ü’^›TZ·n ]øJùó#&&ÁÁ+ÛDýÚº^½ÊÆÍ›/pûöK„‡'ÃÆÆ¯^e}ð®EE((°°aÃxÌ;€NxCAA9¢¢ÒÞÖ>NÁÓ§i¨¨¨†ŽN¸¸˜ÃÕÕ}úX¡wo hjª6ØŽ»ûF¤¥\DTWWÆš5£áçç!²ßËÉ)Ett:âã³ñâEbc3œœ.—‹eeÅ÷î²RRR„••._^mm5Éí 9WSÃÃèÑ¿BEE .ü‡^d£šƒ&‹åŸOpíÚs>а°X[bÞ¼˜2¥44þ š'44»wïf:Œ6ËÓÓŸþ9ÓaÈœòò*¤§ Àµ3„ë.*W·n°±±®°NpÝäÌÌ hÝ`ªIââ²ðñÇ{`kk„'‹Ÿ`øðCÂï»vÕ‡——<<,`e¥ßàïuéÒ::: >Þ±±±RiW^¾ÌÃþsîîæØ¸qÓáˆMšÇoÊ”æ—⨩Q@Q‘:òòÔP\¬ BI(—\tèP#©ÛœÏ?ÿžžž >^ZÊÁ¨Q;`h¨…  emö¢›]…Å‹áîÝW"?XðñqÀîÝ3 §§Ý»w#44´#m»aÍVBY™*JKU ¢b‚ÌÌ"(** [·Î™ÇnnV°°Ôìg³«`g·¦ÞÅVKpQÇÎÎ[·N››U½íˆÂ‡£6[ J`³•Q^®‚êjá{¾Ö€oÀbÑÔ•¸çË/_faĈøê«‘ô"Õôžb9URR€€p;&,5qêÔ'8ÐŽ^y•¢´´4âã?f:”6'00ÊÊÊL‡ÁˆÚºÁµ‰àÚÅäjÿ-,¬_7¸6}&NJ9Bù <ëÜY#GöÀÈ‘=&´DG§#"â5?NÆ_Åë׿«6±éÒS\½Õ«GaÁ‚ÂÇéø°åšz¾¼té`œ>ý7^ž=~RŠŠ’W4ë '¢£Ó±gÏ-üýw4LMõðÍ7£1uj_Zj‚’k§€ÅÂ{·;1¡  \˜®;Cøõë÷ë×.çà`ŒáÃ{Ô[TŽÖ ¦˜DÁЧœœ‡¿ÿ^ºHš4ÔÔðpùrôõÇ£¨¨ŠŠ Â’µ3tZ)¼¦†‡'îcË–ÉôN!J¢h=È–›4©í$ŠÛ*eeEº¨¢V¬Ž ¢°yó_ض­ùå@˜rñb”ÈÇkk >[««ùxýZEE*HO/„™YÃås(ñ¨¨(ÁÍÍ nnVX²d–-;Ùè±áryàryØ´é2Nž¼__z˜¢ªª„ ÆaÁ‚#˜?ß ®®²¿ð%%;h²¸ #„àæÍ8ìß‚°°Dôìi†ß~›…>r¦·¢Sr‹‚7^`×®xò$+Wo•d± npýYÁu•c³«ü[7¸¶Np¿~]ß. '˜-LëS²lçÎk¸z5þþŸÐ;R¤(7·ÖÖÚ¸xñ8§N Š‹+QU%øII%Øì*TTT£¸¸••Õàpj“#¸óùóLôèÑ…á¿„¢(Š’EZZjX¿~,þ󟓘5«?œÍ˜©In܈èëkBMM ÚÚêèÐAêê*Ð××@‡*PSS†¦¦44T ¦¦MMU:tÊÊå4Y,)b¯±Àç󑜜‡ýûóЩÓ|dfÁÔTOÊRï1¢ °Á† pùòL‡Cµ!4YÜUWsýûï !!C†8 0ð3 `Ãth%555<\¸ð»wß@RR3êòóË%Ö¾ \X§\Ä¿µƒ þÝN§NZ03Ì6¬»0lf¦SSZ7˜j›îÞ}…;¯aÓ¦‰ðô´e:¹fjªGG]TV¾ÀÌ™ý™‡¢(Š’CãÇ÷ÆñãaØ´é?c:œ&yútC³~ïêÕß½z™K0 ,n—ž^Ôà㊊ PTT—Ë–ÖÒÔTEyyx¼EbÑ"¯&—7£ZníÚ19r"#_ÓÙÅ”Øh²¸ )-­Ä‰÷qðà=–câDWüñÇØÙuf:4Š’šŠŠj<Äo¿ÝD~~ÙÛŸðx‚AHvv‰Xíðù99%õ«M¿~]ðNÝ`5aò·¶npmrØÜÜ ]ÖÉ£ä[NN –-;‰Ñ£Ûìb8EQEý‹ÅbaÍš0~üÿpÿ~"<<èÄ"ªùbb2@ K¸ÐŽŽ:,- Ñ­›,-;¢#,-;Âʪ#tu;¼­‰ü+>ÿü,Í:íV IDAT£ñ·gÎÎfpuµÀÁƒwàê:›ép¨6‚&‹Û€ìììÛ‚€€‡PPP€ŸŸ.##º¢%%¿ Ù8räþøã.**ª¼å)=½Pøÿ‚‚òz³ë."—‘QX¯n°™™>,, `oß¾¾NÂD°¹¹>­Lµ+<K–‡®nlÛ6•ép(Š¢(Š’¾}»ÂË«¶oƹs˘‡jÃÊÊ8øøã>°µ$…‰ahiÑz÷mÁ¢EÞøÏü‘“SJË"Rb¡÷J˰ôôB¬Ysîî›pùò3¬^=ßaíÚÑ4Q,qôèQ¦ÃKzz:òòò>ø›ÍÆæÍ›%¶­ŒŒ"¬_®®°k×u”•UЬ•šš!C¶ÂÎî¿èÑc=FÚ‰eËNâøñûHJÊ…±±.&OvÃÎÓqñâ爊ڀ””m¸{w NœXŒÍ›'céR|ô‘3zôèBÅT»óë¯×?þ˜ MÍÖYU’ý_ff&¶lÙ‚çÏŸK¤½ÆHºÏc𬋋/âÑ£Gïý\Þö{QQ¶nÝÊtrER¯eQ픕•aË–--jÿõë×øã?ZÔ ï YPÛÿHãýÉäñZµj8>LBhh#Û—e­q>V·ßDò®Özmùú:a×®X¶lFvF÷î¦RIËâ9rCc“w‰1ÝgÙúú8}:œ±¨¶…&‹ePjj>V®<OÏÍ y‰M›&âáÃuX´È»ÕNä)é{ùò%öíÛÇt*((€»»;.^¼øÁÇËÊÊðí·ß¶x;ååJ7@ß¾?àøñ0TUqÁå6¾€‡S__'lØ0þ¹¬CRÒV„‡¯ÇÙ³ŸaÇŽiX±b&NtEŸ>VôB EÕŽÝ»o`ýú±°·7nµíJ²ÿ›={6ž>} %¥Ö¹YJR}ž¬µcˆû÷ï¿÷syÛï%%%8tèðû… "%%EâÛ‘V»²HR¯eQí”””`Æ -j?%%»wïnQ€ü½'dAmÿóîûS˜<^nnVðñ±Ç¯¿^cdû²¬5ÎÇêö’èCÞ%o},ž#746y—¨qÓÇIYY&¸àêÕÆb Úš,–!‰‰¹øÏüáåõ>LÂÖ­SpïÞÌšÕÊÊŠL‡GµSóçÏG~~¾T·èh]TT^ç|ñÙ}û\‚… ½1c†;<=í`aa@ß/%†êj.¾ø"îîÖ˜3ǃépš--- Ë—/‡½½=Ó¡´{ôXˆÏÒÒ¯^½~Œ’ñjð7…´Ú¥(yöîûS|öÙÜ¿Ÿˆ—/³˜…¢ä–¬ƒ†uBLLrr踀jMË€¸¸,,]zƒmAtt:v횉»wÿ‹©SûÒ¤—œãóùøüóÏ¡­­N:á§Ÿ~ ˜Í;tèPìØ±&&&044ÄáDZjÕ*ÂØØ§OŸ¶³nÝ:BUU>>>ÈÈÈ뱘˜ 0jjj°³³C@@@½øöìÙBú÷ïßèßrðàAXXX@CCóæÍ¿ ßI“Üàá‘w÷ìÜ9“&¹ÂÄD  À‚ŠŠè÷ýÀ£¨¦Ûºõ*²²Š±cÇ4°«•´*IôóæÍCZZfÏž¿ÿþ©©©ðññ©·©S§"<<\Ø®¿¿?¬­­¡¡¡¹sç‚ÇÔ2¿q㜜œ ¢¢DDDˆŒ¿%}ž¬‘Ʊ˜>}:.\¸@p[f¯^½pîÜ9@VVz÷"œ>}–––PWWÇøñãMlÊË~ÏÉÉÁ˜1c^£¹¹¹˜:u*îÝ» áÏçÜÜ\ >LJ®®.^¼xS§NÁÆÆJJJ066ƶmÛl÷öíÛpvv†ªª*ìíí…w }¨Ý¶HR㪆ÚyWCû¯O!„`åÊ•X¾|¹p±(Qã¶‘—÷Ððë¾%ý·¨cÔPÿS÷ýÙØ¶/_¾ kkktèÐóæÍÃêÕ«ñ÷ß7ø72u¼<¤.yê $qLZ2&56i¨ŸzwÔ&S¿~]¡££Ž›7ãZm›TF(ÆÄÄdyó“dÈ­äÒ¥(Âãñ™‹j"îÛêòåË„Åb‘/¿ü’°ÙlrïÞ=¢££CIVVQPP ëׯ'|>ŸüþûïÙ²e áóùdëÖ­ÄÆÆ†BHpp0111! ¤´´”Œ;–,Y²¤ÑÇÊËˉ±±1ùí·ß‡Ã!7oÞ$ÚÚÚ$,,ŒBHLL ±²²"yyyÄÛÛ›8pàƒGVV@/^LªªªHbb"ÑÑÑ!·nÝjÒ¾›1c™1cÆ;m“ žÿþ7xxl"&&+ˆ‰Érbn¾Š/~ݼù¢IÛ¢¨öîÙ³4ҥ˗äôép‰µÉDÿW\\L¬¬¬Hpp0áp8$..ŽÔÛ–³³3¹~ý:ÉÊÊ"***¾*99™èêê’k×®‘ôôt¢¥¥EΟ?O***ȦM›ˆ……áóßÿL–TŸ×”ýÕT/^¼ /^ˆ×/JëX¬ZµŠÌ;Wø·ªªª’9sæB9yò$qvv&OŸ>%ªªª$((ˆTVV’;wdçÎïÅ)©ýB²³³›ô;âÈÎÎ&!!!b??%%…hhhB)**"ÆÆÆ$$$„TWW‹ü|NOO'êêêd„ äþýû$??Ÿ¨ªª’óçχCîܹCHnnî{ífgg---räÈÂápÈ… H‡ÈË—/ßk·ªªJ¬¿CZû³9íKêµ,ªôôt¢ªªJ!îφú”âääDø|>Yºt)ñöö&ååå„Ñã¶wIâ=!íã€øûû‹õ\Q¯ûæöߢޑ¨þ§îûSÔ¶“’’ˆ¦¦&¹t马¬$›7o&ŠŠŠäĉïý}’8^MÙŸrìX±±ùš””T4» Y÷¡ó Q$Õo”––6Ø×í7$ч¼«¥¯-iŽGšÓ¾¤ŽIsÇ„¢úQýÔ»ã wI¢hêëûC>ýô8™7ïP‹Ú Ú…Ç4YÌ€/2ÉìÙˆ‰É 2|ø/$88æƒ?Õö45Y¢§§Gª««…?[»v-™0a‚ðäöä!>>ž())‘ššB!Ož}š¸¸¸Ô‹éóÏ?'Ë—/'¤GäÚµk„"V²877Wø3rþüy±öC-q>ü ËIpp ùî»ódÈ­¤K—ÄØx99uêa“¶EQíÇ'£Fí ü»DÛe¢ÿ#„kkkòàÁBHã'È›7o„yyy‘ÀÀ@²}ûv2fÌáÏ«««É–-[›Í~/vIõy²”,–Ʊ¸uë133#„²xñb²lÙ2baaA!dÁ‚ä›o¾!_}õ™>}z½xzôè!2YÜÒý.‹ÉbB155%QQQ„ÑŸÏéééÉÌÌ$„ÂápHdd¤ðyµ‰ˆ„„„÷ÚÝ·oñòòª×îäÉ“É÷ßÿ^»â’µd±$^Ë¢Ú©›èµ?Eõ)!!!ÄÑÑ‘,]º”tìØQ!¢Çmï’Ä{B–’Å¢^÷Íí¿E#QýÏ»É↶½iÓ&2qâDáÏù|>166™,nÉñji²¸¼œCºu[C¸Óì6d]s’Å’è7DõÅ %‹›Û‡¼«¥¯-YLKâ˜4wL(ªoÕORô.Iô’H8p‡8;¯oQT»ð¸uVƒ¡))yض-—.E¡{÷.8~|† q`:,ŠAÖÖÖPVV~ß½{wܼySø½††€ÅbAUUUX,¿î-ã£GÆ­[·àáá]]]øúúbíÚµÐÕÕùXjj*^¾| KKKa[•••5j6mÚ¨««#44%%%HLLDLL zôèñÞß¡¨¨CCCá÷Òº¥]OOÇwÇðáÝååUˆˆHŽN©l¢ä‘¿ÿÄÆ¾Á«Cý_sÿ»_m[©©©°³³þ\YY_ýuƒm´VŸ×Z¤q,<==QRR‚øøxܹs—/_F@@RSSqëÖ-œ›NŒÆ"‰þOl6»Ñçhii¡¸¸¸ÞÏÎ;×n“ƱPVVÆÐ¡C6› [[[ 4ÇŽCii)ÜÝÝ¡§§‡ÜÜ\‘±´G¢>Ÿú'—.\ÀÚµk±nÝ:ÄÇÇãñãÇèÐáÃPµµµßÛ¿ÐÑÑy¯Ý¶JR¯eqÚµ?ëS,--qöìYlß¾+V¬>WÔ¸MÞ5öºoˆ¨}-êI¢ÿÑÒÒBAAA½Ÿ5©Ö6i’+bb2œœÇt(2CýFSúâZ-éCä´ÆˆâŒ Eõ Íí§d‰££à¢ð‹oŽ„’u4Y,E……llØplÆ;/±mÛTܺõFv–‹9Õr©©©¸rå  ¬¬ û÷ïûÊd­Ÿþƒ ‚’’úöí‹Ù³gãÍ›7>6tèPÜ»wqq‚÷puuÅùóçñÃ? ""BøåêêŠuëÖáàÁƒ¢çÏŸKj7PÕJ¶n½ ,_îËt(éÿÞ¥¬¬Œ’’ÂÃј˜ØèïùúúâÒ¥K“ƒððpÌš5 ŠŠ‚Å5å½Ï“Ʊ€Q£Fá×_…——`ÛàÁƒ±sçNŒ1 2dNŸ>¬¬,@tt4îÞ½+ü}yßï õùü®ŒŒ 8::bàÀPTTăPZZúÁv}}}qýúu$'',â„¡C‡Jïie’z-‹ÓލýÙXŸ¢¡¡%%%Ì™3öööøïÿ @ô¸ ï÷DS^÷u‰Ú×¢ŽQcý¸1_¸pyy‚ÄëƒðâÅ áyž,¯Þ½Íann€ ž0ŠÌD¿Ñ”¾¸VKúY|mI’$ŽIsÇ„¢ú†¦öS²xœtu; sgš,¦E“ÅRPZÊÁöíÁè×o#.\x‚uëÆ ,l-¦Ní EEºËåQ~~9^½ÊFBB)4Äþ=www|ùå—ðöö†,,,°xñâ&m{Μ9HOOGÏž=1tèPL™27nlô1[[[lܸîîî:t(ìììн{wL:µÑm._¾\¸Ê=EQmCBBNzˆõëÇB]]…ép$Òÿ½ËÊÊ ýúõƒ‹‹ Ƈ•+WbÀ€þžf̘''' :Æ ömÛ ©)¸=OÞû;v <9näû=ÑÜq©¨}-ê5ÖÿˆcÔ¨Q3f œœœàëë‹•+WÂÙÙ**‚ÏXY<^, cÇöÂ¥KO™EfH¢ßh¬/þ–ô!²øÚ’$I“æŽ Eõ Mí§dõ8YZvDzz!ÓaP2ŽE!L!/8œ>|{öÜÇDzeC0þ@tèÀüI9Õ4„°‘Ÿ_†üü2äæ–!?¿¹¹¥oVŽœœRäç—£   \î¿5©Š‹¯¢¢â¥ØÛâp8xðàtttàââÒ¬x«ªªðèÑ#p88;;£S§Nb=ê2ÅÆÆÂÔÔô½úL­iæÌ™Æb (y6þaää”àÊ•åR¹»% 3gÎDS†’èÿÞÅårñðáC‚“Ú:vâHHH@JJ `ff&‘xÒœý%®Ú/â—»’ƱWLL rrrзo_hkkKu[·o߆ƒƒŒŒŒ$ÚnNNâââ0hÐ ±žÏçóQTT@^^¢¢¢Ð§Oèééÿó¹´´=B§NгgO¤§§#99ÞÞÞl755ñññ°´´|¯^fSIk¶¤}I½–ÅmGÔþlNŸÒظM’¤}üX,üýý1cÆ ±§¹ãRQûZÔ1úPÿóîû³!yyyÈÏÏGMM áááøûûÃÝÝ]ìØÅÕœýù!±±™ðõÝŽ¯Ñ­[g E'š{>!‰~CT_,Фû¦’æx¤%íK☴dL(jlÂÔù³¤Î—,8 %ìÝ;[aQò)‚.p'„\¼…¼‚ââ ÌŸ?Ÿ}6ÚÚêL‡F}@YYYÅÈÉ)Evv Þ¼)Fnn23‹›[Ь¬’÷ÀÊÊŠ00Є¡¡:uÒ‚¡¡M`h¨…ŽµÐ©“6:vÔÄ;ÿà“O~mRýt0Ó¡PÕÊôõ5›Ét”Œ£ÉâfJMÍÇÆ—põj ||ìqãÆjØÙÑ+³ÒTSÃCff22ŠÞþ[ˆôôBá÷oÞ£¦†'|¾`° liÙîîÖ01ÑþÌÈHzzâצ(Šj‹BC㙊7V3 EQEÉ•ñãÇcüøñL‡ÑdÞÞvX¾ü8œ¨©É~r›¢(ÉÑÑQGii%ÓaP2Ž&‹›¨´´¿þz ‡݃••!üý?=ÓaÉ…ŠŠê· à“Áµ‰à´´Bäå•‚ÏÔ:RSS†¹¹LMuacÓ ÞÞÝÐ¥‹>ºtÑÎVVVdø/¢(ŠbÞ®]×1bDØÛ3 EQEQ2`à@;TWsñèQ2¼¼º1EQ­ˆuuz‘ˆ&‹ÅÄåòqòälß~ðý÷0kV())0YÛRXÈFJJ>RSó’’””<¤¦æãõë²…ÏÓÑé€.]ôÐ¥‹zö4ÃG9ÃÔTW˜60x5iŠ¢(ª¾G’qÿ~‚ƒ¿d:Š¢(Š¢d„žžœœLqï^MST;SVÆa:ª  Éb1„„¼Ä÷ß_DJJ,ˆåˇÑÅëD¨›NN|¥¦æ#%%_x»ƒŠŠ,, `eeˆ¾}»bòd··‰`A2XKKá¿‚¢(ªíÛ½û† q@]˜…¢(Š¢(Ò«—9ž=Kc: Š¢(JÑd±oÞcýús¸z5#GöÀÑ£ `iÙ‘é°dBIIrœœÿ6,:!ìîniÓúÁʪ#,-;¢K}((°þ+(Š¢äW||6BB^âҥϙ…¢(Š¢(Ó«—.^|>ŸÐó2ŠjGø|eeš ¤D£¯àrùøãÛØ¹ó:uÒÆéÓKÚíí9EElÄÇçàÕ«lÄÇg#>>ññYÈÍ-¨ª*ÁÊÊ––ááaƒ3Üß&„ ab¢KEQ 9pà.\\ÌáêjÉt(EQEɘ^½ÌQZÊAJJ¬­;1EQ­¤  :i1%ãh²øááÉX³æ,RSó±lÙ,[6**ò¿›ŠŠØˆ‹ËBbb.^½ÊBB‚ Aœ—'H kk«ÁÎÎvvF:Ôݺu†M'˜˜è‚Å¢ aŠ¢(YRXÈFPP~ýuÓ¡P"hk¼y‡àããOO[tíjÈtHEQT;akÛêê*xú4&‹)ªÉÊ*‰‰.ÓaP2Nþ³ b*,dã‡."00ƒuÃáÃóå²äDAAùÛY‚ 9xù2å ËÙÚÁÞ¾3|}Э[gØÙuFçÎ: GNQE‰ëôépèéi`Ô¨žL‡B‰PS“ ظñØì*èêv@ïÞæpq±@¯^èÝÛúú GIQEÉ#%%ØÛwF\\Ó¡PÕŠòòÊàâbÁt”Œk÷Éb>Ÿ à!6o¾uuìß?£G;3V‹ñx|$'ç!.. ÏŸg 66±±™Âò::`oß¶¶F1¢ìì:ÃÎÎFF4), ïý¬´´ÚÚ*Ý!€´&vK«íÒÒhi)¿×v`` >þøcÉo¢Ú>ŸàèÑPøùõ‡’’B«oÿCý%PRR --e((°ˆÊÊ—8rdjjxxþ<QQ¯•†óçŸ`ÇŽk`±€ž=Íàãcoïnpq±û˜æææ¢cGù»è-ëòòò˜AîäååAA¡õû2J2Nœ8eeåVݦ4ÇÇòÆÂ¢#’’r™C¢1~üx¦Ã`Le%êêâ§yZkÜFLJ-'©óå¼¼RÒ2”hí:Y›‰¯¿Dtt:,ðªU# ¡¡ÊtXMVUÅ&ƒŸ?ü—…ÊÊj(++ÂÖÖÝ»›â³Ï†ÀÁÁvvÆ´F”M™2Eø3hjºBEÅ ¹¹‡Áç³%¶]Ýaàr‹Q^þHbm€¦f_()颸øšDÛƒIPPЛý••/@WâÛ ¨ö,4499¥˜5˃‘í×íÿZ‹žÞTTÄ ª*µÕ·Ýúú¡¤¤ 6û*+Ÿ ®¬¬ˆÞ½ÍÑ»·¹ðg%%xø0!!q |Œ;¯ASSîîÖ0ÀÚÁÁÁ¸ÁRP„ÄÆÆJýo¢ê£û\òòóó‘ŸŸÏtT¤¥àܹHÎÆ³gº˜6møüÊVÛ¾´ÆÇò¨kWCüýw4ÓaHTMM #c‘Æèé}6; ÕÕo¤¶ EEmú¡¢"eeá ¤ZjÛj*Y<&íQi)ùùå°²¢ (ÑX„Ât­­ºš‹mÛ‚±z÷¶À–-“áà`ÂtXb©©ááÕ«l<}š†èèt<}š†W¯²QSö¶:ºw7…ƒƒ œœLàäd {{c(++2v»ÃãñqåÊ3ìÝ‚èètôïo¥KcȉÕx>{6_|€£GÀ××I"mÖº~=sç®]30y²›DÛNJÊÅþý·øª˜7Ïóæ ¤·ZS”„,]zÕÕ\:4ŸéPZÅ;¯0}ú>\»¶ Ý»›2ŽH©©ù8tèΜ !ÀÇ»aÁ/±jE&%å"44aa  KDQš0ÀØÂÓÓVV´æ1EQÌ(.®ÀÅ‹Q8w.©00ÐÀ˜1½1q¢+\][ïvgiŽåQPPV­:ƒ¤¤­tar)31Y={ü0a‚‹Ô¶Áçøû?ÀÏ?ÿ eeE¬];“&¹Ò5†(¡ˆˆŒ»‘‘ßÁؘÖ-¦Ñî’ÅQQiX±â²²Š±nÝÌšÕ_f;OBs•†gÏÒ†çÏ3QUÅ…––zö삞=ÍàìlggsXX0r»WQQÓ§ÃqàÀddaÔ¨žX²Ä§Þl1IHLÌň¿ÀÏÏß}7N¢m×úþû‹8qâ>‚ƒWÂÆFò‹^äç—ãèÑP>|UU\L™ÒŸ|2H.k…STk).®@¯^ßáàÁy:Ô‘épZÅÔ©{gÎ,e8ñ••qpêT8޹‡´´BøøØcÑ"oxyÙ‰5&áó bc3…Éãððd°ÙU05Õƒ§§­ð‹––¢(Jš8œ\»‹sç"%%EŒÑ'ºÁËË®Õ'¬´ÆøXÞDF¦b̘]ˆˆøŽ.x%e­‘,®UTÄÆÏ?ÿ“'ÀÕÕ?þ8Iæ/¨S­Ãßÿ6n¼„—/b:J¶µŸdqu¿ŸH‘ IDAT5Û·cß¾ôïoƒ_~™†.]ô˜«žòò*<}š†ÈÈTDF¦"""ÅÅPWW““éÛ¤°zõ2G×®†ôê¯ ©M|9 §Fª‰O§}ô+ÔÔ”páÂçRˆ×Ôð0~ünp8\üõ×r¨©I§Þ\Ý{zz!FŒè¥K·ê,Š’GŽÜÃÿþw}ËH½âÖöüy&† ÛŽS§–ÀÛ»Óá4ŸOpíÚsöí Á™3 ¡¡Š¹s=1¾tK*|ýu .^ŒÂõë«`f¦/µí‚×è°a¿`Ü¸Þøùgé.>Çãññ÷ßÑØ·/QQièׯ+–.õÁСNôÂE‰iäÈ0ÀëÖa:”V±dÉq$'çâÚµUL‡Òb/^¼Áwpþütè ‚™3ûcÞ<ÏfÍôª¬¬Fxx2BCš€çÏ3Àb±àäd*œuܯ_×&%¤)Šjßž?ÏDPP.\ˆBNN zõ2Ç„ .7ÎE&ÖBiÍñ±<©©áÁÂbš‘#{0Ž\c"Y îVþóÏÇøé§+àrùøæ›Ñ˜6­=¿j§&Mú ööÆøñÇIL‡BÉ6ùNWWs±cÇ?øý÷[pw·ÁŽÌÎ&NNÎÃÇIxð $âÍ›b¨©)ÃÙÙ ®®–Â/YpQ¢=yò¿ÿ~ ÁÁ103ÓÇ'Ÿø`êÔ>R?ñ¾t) K–ÇÁƒó0jTO©n«Ö_=âEG±oßlŒÛ»U¶–ˆýûCpófºv5Ä'Ÿ ”)} ¢Ò®×ä¤(‘RSóááñ#‚ƒ¿DÏžfL‡#u¯_`àÀÍØ½{&ÆoÝ/iÊÏ/lj÷qüx Ê1jTO,ZäÝ¢_ÅÅxð ¡¡ñ M@BB”•áæf [ h‹Þ½-èL<Š¢êÉÈ(¹s‘8w.ññÙ°´ìˆ \0q¢«XµÖ[ ãcyâè¸ß|3³fõg:¹ÆT²¸Vii%~ùå9rÝ»wÁ¦MáâBïälOjjxèÖm vì˜&WcgJ*ä7YüìY:V¬8…ŒŒB¬[7~~­;›˜‚„„œ·‰á$„‡'!'§ššªèÛ·+ÜÝ­áîÞÎÎæôä¬àó n܈ÅÞ½!OF¯^æXºÔ£Fõ„¢¢ôg~§¦æcøð_0y²[«_ ü曳 ŠÄ?ÿ¬lÕšÂññÙØ¿ÿ‚‚" ««Žùó½0{¶tuéíSõ®]»®#0ð1BC¿a:”V±nÝ9\¿‹°°µry÷MM —/?ÅwðìY:zõ2Ç¢EÞ=Ú¹Å㆜œÜ»'¨wš€ÌÌ"hh¨¢_¿®ðô´ƒ§§-Mè¬#Šj‡Š‹+pùòSœ;‰GR §×ãÆ ªsq±‰»3ëbr|,/ü &¸àË/‡3Š\c:Y\ëÕ«l¬]„‡“0eJ_¬[7†.4ÞNÐåTÈ_²˜Çãã×_¯a×®ëpw·ÆöíSanÞ: ¿åæ–áîÝW¯ÜÜ2hk«£_¿®èßßîî]ѽ{¹<©•gÕÕ\E`ÿþ;HHÈÁ!øä `Ój1ÔÔð0zô¯ „àÊ•å­>öºš‹Ñ£‹Å•+Ë[ýGNN ¼‡'îƒËåaÚ´~X¼Ø»ÕÞÛÕ ¼£FõĪU#˜Eê ÙpsûëÖÁüù™Gê?NÁÁƒwqõj4 ´0gŽüü<`` )‘öSRò„%+ÂÂPXȆžž °Á€¶8Ð]»Jd[Eɧׯ×.T÷ , Þ'ºbÐ {™ØÂôøX^LšôL°iÓD¦C‘k²’,®uñb~øáØì*|ýõHøù  y 9÷ûï·pìXÂÃ×3 %ûä+YüæM1>ûìž>MÃwßÇœ9R½ú]YY‡“…ÉḸ,¨«« _¿®ðòê†máà@gæ´U¥¥•8qâ>¸ƒ¢¢ L˜à‚¥K£[·Î­˺uçðçŸðÏ?+aeÅÌ {rrFŒøS¦ôel0Y^^…S§âÀ;ÈÎ.ÁG9céRŸvqË=E‰òêU6||~FHÈ׌ôQ­í—_‚qäH(=ú:´Ÿº»™™E8r$þþÁáTcÂW,Zä‰mƒ‚¸¸,Ü»°°ùIÇ`åÊ3èÔI {÷Ά½½±T¶“ššþyŽ›7_àñãÔÔðàèhoo{x{Û¡OŸ®PU¥WµÛ²7oŠñÇ·ð, ~~X´È FF:ŒÄƒ Ž`ÏžYŒ×:þ –-;‰C‡æaÄæÁàrù¸t) {÷† 66Øà“O|0dˆƒÌÝIQ­açÎk Šh%(8œ¸¹}9s`õê‘L‡ÃˆŠŠjœ=ƒï 11žž¶X°À ¾¾’_”Ëå#*êµp½…ˆˆT°ÙU04Ôz{ç”5ÜÝmЭ[gzqœ¢Ú€¸¸,œ=ûçÏ?Avv zö4Ãĉ®7®7ŒŒ´™Ol²4>në.<UU%ìÙãÇt(rM“ŵRRò°nÝ9ܾý S¦ôÁúõcii 9ÃáÔÀÑq-~ùešL¾)™Óö“ÅUU\üðÃ%=Š3ÜñÃã%ºÈÇGDD*®_ŵkÏ‘˜˜ CC- ì€Aƒìáéi+±Û@)fÅÇgcïÞœ; M,ZäY³úCKK±˜22Šà뻣G;cÛ¶)ŒÅQתUgð×_Ѹ~}£ FÖºw/{÷†àÎWèÖ­3–,ñÁ„ .2{Ë$EIÃèÑ¿¢o_+|ûí8¦C‘ºÃ‡ïaӦˈˆø®ÝŸÈBpûö+ø %Ó§w×ÈÂatôsœœ~¡[·¦¿Ré'ŸlåäÉ0ŽûœjÕ4ódD¡P²{÷EÜÜNMçΙ6­Û[µ‚ i”J––ß0þ† ³“;N‘ºzõ!={.ÃËk:hÖ>MwåÊÖ¯?ÍÞ½!”-[Š>êÀ˜1e+"EFÆáïÁùóáœ?‡žadd@ëÖui×®>íÛ7ÄÆÆœ2eDŸLò’’’Á?ÿ\ÁÛ;ˆ³goS¾|i hƒ««-VVµåާvÚÔ?Ö6óæyÏæÍ厢Ӵ±XüÂãÇ |ûínþùç2¶aþüT©RVîXBÍ›çEHÈ}ž-wA{hO±øôé›L™²™zõ*±aøB¦‚ƒ#Ù±#€}ûBHKSààЄZãäd)ëfBÑJHHeãÆ³lØpš¤¤t\]ÛòñÇݨ[·¢ÜÑ^K©Tá켊§O“9th¶ÆŸ(§¤dЫ×r*W.‹§çT¾^’$NºÉªUÇ9{6KËšL™â@ÿþ­5fÞeA(¬‹ïñÁ¿ðÎO—4eÊ&""žpôègrGÑZ±±IlÚt†¿þ:GBB|Ð’‰»ÐªUYs=zôœsç¹pá.Ü!"â ††úXYÕþwÎãúØÙ5ÀÌLôׄ’M¥’8w.oï ¸Lffݺ5eØ0;ºukª³ýmëk›éÓ·˜˜&ŠÅEL›‹Å/øø\ã›ov‘Ƽy}ùè£3…£ðz …’Ö­¿ç“O™<ÙAî8‚öÐŽb±››/ îgÈk–,ZàÛ'cbðò bÇŽÂÃciÚ´:®®v lM¥JïqjAN11 ¸¹ù²eËyôõõ=º#&t¦re;ºdÉAÜÜ|9p`ÍšÕ;N\¿þˆ¾}W0eJWæÎí#wœ¹råkÖœäŸ.S¥Š“&90bD;qg u~û͇;9{ö+¹£©¨¨xÚ·_ȲeÃpq±•;ŽÖËÌÌb÷î‹üùç)®_„µµ9'v¡O+X„.&&ÿ;œ?Ÿ]<¾u+}}=7®†]lmÍiÛ¶¾˜‹^(1""žàíÄÎDEÅceUWW[ ².«ÚkcÿX›L›öIIé¢X\Ät¡X Ù‹/[v„uë|iÙ²6K– ïK æãs±c7ü½NMK$9Í.gddñÙg;Ø»÷"ß~ÛŸ‰»¼ñ{T*‰'ÂØ´é ¾¾7)[¶ƒYëì-YBnwîIJzõI¼¼©Pá=&NìÌGuЊÑã~~·>|-‹93jT¹ãÊæÍçøúko¶m›¬UÓ;<|Ϻu¾lÛvCC>ú¨&t¤‚Ö2d%Õøé'g¹£©ÜÇ®]Á|§³#çärî\8ëןÆÇçU«š1v¬=#G¶×¨ÔÓ§ÉøûGàïAPÐ]®^}HV–Šš5ßÇÖ¶mÛÖ§mÛz4n\M£ïp„ÂHLLcß¾KìØ@pp$U«–ÃÙÙ,,ªÉ¯ØhsÿX[L™²™¬,%ëו;ŠNÓ•bñ aaÑÌëÉ¥K÷˜8± ³g÷£þ5Є $&¦³sçÇrG´‹æ‹££Ÿ3nœ;÷ï?ÃÍmööù ÓپݟÏpïÞS3l˜={6«m—!!÷Yµê8‡_¥nÝJLÚ[­9ö±±I89ýLûö Y»v”ÜqÞÊ”)›¸páG~®usX=žÊæÍçpw?M||*ƒ[óñÇ]KÔɘ }23³hÜx¿ý6’þý[ɧȤ¤d`mýS¦80kV¹ãè¬û÷Ÿâáq†¿ÿ¾€B¡ÂÙÙ† :Ó¨QU¹£½"55“K—îsႃ# Š$))3³RX[›ccS;»ú´jU‡Ò¥åŽ+¦Tªðõ½ÉÎ9о¾}úXáìlC§N%îbˆ.ôµÁˆnT«VŽåˇÉE§éZ±²êmÛvÿýïï½g¢ECpr²”;–ð¯ØØ$llæ³rå‡ôïßZî8‚vÑÌbq`à]&Lð R¥²¸»Ëw~Ù[·ãáq/¯ ôõõpq±eܸNÔ¯/Vy, ^ÌA{æÌmZ¶¬Í´iÝéÓÇJ«æNR*U ¶†¨¨ç92G+FA¿Nbb:½z-£V­÷ùûï)ZyB“™™…·wk×úK÷îM™<¹+;ŠÅ´Ít—þý'8ø{ªW×ÝÛñÝÝýX¸p?AAßS¡B¹ãè¼ää <=X¿ÞÈÈ8:u²`âÄ.tíÚDc?[•J7o>& à.Þ%**>gÞckksÚ¶­‡­m}­»˜)” aaÑìØáÏî݉‹KÆÎ®>..6ôíÛªÄÎÕ­+ýcmðÁ¿bk[ï¿ w¦‹Åâž×T¿þz”ÀÀHöÕa3³R¸¹æƒ~å×_}˜3§§Ü‘ ÍØØáÃÛáêjDZc×X³æ$..«°²ªÍÔ©]éÛ·¥VÁÝp—Úµ+èt¡X¥’X¿þ4ÎÎ6¢P\LÞ{Ï„±c;1z´=Ç_gýúÓŒõ'õêUbüøÎ j«q·™èÓ¬Y š5«Á˜1ìEó² Ç‘œ={ww?”Jææ•hÛ¶^Îèㆠ« §§™EpA·ÅÅ%³kW0žž\»…¹y%FêÀ!6˜›W’;žìt¥¬ Ò033•;† Å*W.ËŒdèP[¾üÒ‹.]óå—}=Ú^c/4뺣¾‡µ…bá­hÔÈâµk}ùñÇ}̞݃ٳ{¾¶ó~âD¿þêCPÐ]ºtiÌäÉtéÒXtôK€ŒŒ,vî `Íš“Ü¿ÿ”¾}[2mZ7­ž‹úÌ™Û ¾– 1v¬½ÜqÔÂÃã ß}·›íÛ?Ö‰¹!!÷Y»6{1¼Úµ+0qb† ³·6 ²7ÎSS#V­úHî(EæÈ‘PÆwçÌ™¯DñDF7nD³aƒÞÞA2b„cÆØS§NÞw~išää ÿBBšIùò¥ÿ÷¸¶¶õhÕªŽÖLa%hŸÌÌ,Ž ÅÛ;˜“'Ã055¢OŸ– j‹]}q>ó/]ìk²–-¿cæL'Æë$w¦Ë#‹_–ž®à·ß|X½ú-ZÔâ矇Ҵ©X¯¸‰>´ðŽ4c I’˜?/îî~üô“3~Øþ•ç»Î¯¿%$ä>ŽŽÍ˜9³ÖÖueJ,§ÄÄt6o>Ëúõ§xþ<¡Cm™:µ›Ö7z±±Iôèñ3vv ps-wµš8q#øø|NåʺqËoddnn¾ì܈©©cÆØ3fŒ=•*½'w4¡„jÑâ[fÏî©Ó'ÒÎΫ([¶ãåŽ"Ïž¥°mÛ<<ΛH–L˜Ð…öíȭв²T„†>$0ð.ÙÓWÄÆ&allˆ•UmììêckkŽ­m=Þ_ŒjÞÍåËع3Ý»ƒIJJ§C‡†¸º¶¥O+J•2’;žFÑåþ±¦ª[÷3~ûmêvSn%¥XüBXX4_|±“Ë—ï3eJWfÏî)Ú»b$úÐÂ;’¿X¬P(™5k‡]eÍšQôìÙ<×óG†òË/‡¹ví=zXòé§=´z$©Pp±±I¬[çË_à£:0qbªV5“9Ù»S*U îÆƒO9rä3›.11=~¡nÝŠlÛ6Y§¦nxú43lÜx†”” † ³còd­¿x!h—¨¨xlm°ÿ,½pE¿àå5´ÿ.]¢P(9tè þyšààHš5«Áĉ]4¨Vʽwï)þþÝ% à.·oÇаa•G×ÇÆÆ\¬‹!HLL^^AìØ@xx, VÁÕµ-ÎÎ6T­*æò|]ïk¢¸¸d¬¬¾ÅÓsšNܨÉJZ±²§Bؼù‹ B…÷X²Ä…N´sêHm"úЂÈ[,NNÎ`Â._~À¦MãiÛ¶~Îs7nDóÍ7»8þ½{·`öìž4k&n_( "#ãX½ú;wR®œ)'vaÔ¨Ž:Õa\±â(¿þz”ýûgêìÅ+WЯßo|úifÍê!wµKKËdûöÖ­óåÁƒgôêÕ‚iÓºÓºu¹£ %€Ï5ÆŽÝÀ­[‹uvJ”™3·öˆ£G?“;ŠK—îó矧8pà2åÊ™òá‡=º£N\Ø}þ<õßQÇw ºKHÈ}23³(_¾466æX[›cm]—V­êŠ53 ûö냯°{w0¾¾7)[¶ƒµað`k¬­Í厧ñJBÿXÓ¼(*=ûõê‰ aE©$‹_ˆ‰Iàë¯wqðàœmøþûT¬(îÎ,*¢-¨|Åâ'O’øè£?‰‹KbëÖÉ4n\ ȾÅñ—_±eËy¬¬jóÃtvÔ”ÛÕ«Yµê8\¦NŠL™ÒW×¶˜˜hï(¥×9{6œaÃÖ°`Á@ÆŽÕí¹ÁÜÝýøþû=ìØñ±Î^ÕT*UxzræÌWrG)11‰´m»€%K\6ÌNî8BÄÄ$²iÓYþú뉉iôë׊ :Óª•î\@ËÌÌ"44ŠààH‚‚"¹xñQQñèÓ¸qµ‹Çæbôq ÉŽìÛBJJ&:´-={6×êÑöÅ©$õ5‰Ï5F^ODÄR1E@+ÉÅ⎠嫯¼IOWðÝwý:ÔVœ/©ÙýûO±·_ÄòåÃqv¶‘;Ž ½ä)GFÆ1b„ÆÆ†lÛ6™5Ê£P(Ù°Á_=Š©©sçöaèжbõÌàÌ™[¬\y‚Ó§obiY“O>éNß¾-ujꂞ×?N 0ð.!!÷ ºÇ•+Äèã"**ž;ñô $22ަM«ãêjÇàÁÖ:ßßQ·’Ö?Ö$[¶œgÑ¢\¿þ?¹£èú¨ƒÜqíV¼Åâ[·ãâ² ‹ªlÞ<##CV®<ÆŠG±±1gÅŠáÔ©S±¸â2P(”xz²zõ "#ãèÙ³9Ó¦u§MÝŸjdÙ²#üþ»ûöͤeË’uBqéÒ} ø™3˜=»§ÜqŠMLLëÖbË–óH’ÄÈ‘í™8± 5j”—;š ÅRS3±°øñ89YÊGí<=ùì³|§óÞ Ù·Dzxœáï¿/ P¨<Øšñã;ѤIu¹£ 1úX»I’„¿;vpàÀe23³èÖ­)ÆÙÑ­[SQÜxG%¹¬ ¦LÙ„J%éìJšD‹_••¥ÂÍí$Ë–ÁܼK—º`cSOîXZëûï÷°ÿ%üý¿ŸM»*¾bqXØ#†]ƒ¥eM<<ÆõœY³¶qýú#æÍëËøñKĈÒ*99ƒ¿þ:Ǻu§xö,™!Cl˜:µ V‘;Z±8uê&~¸Ž 1v¬½ÜqdáááÇwßíaëÖItîÜXî8Å*))-[Îç¼þû÷oÍÔ©]iÚT,Ú)^pð=úõû•ÀÀï¨Yó}¹ã¨]¿P¿~eÖ®-wAÍRR2ع3 Ns÷nöö˜0¡3Ý»7+Q}@1úX;DFÆá鈗W<Ãʪ6®®¶ І twt|qýcùuïþ3ŽŽÍ˜7¯¯ÜQtž(çíÞ½§|ù¥'~~·5ª_~ù¸Ë ¢¢â±·_Äwßõó¾ êP<Åâ°°h\\VaeUw÷qüý·??þ¸fÍjðë¯#JLÁ°$Š‹KfÆÓxxœA¥R1rd{&MêBõê%gdetôszôX†½}#Ö¬%wYM™²™³goããóÕª•“;N±S(”ìÞ}‘µkOróæcºtiÌÇw¥S' ¹£ ZD—ç|Qß¿–XÜV‡©T'OÞ`ýúSœ>}‹ºu+2~|'\]íJìÈZ1úX3$&¦sèÐvìÀß?‚*UÌ8°5C‡¶¥iÓ’1¾¸ˆþ±ü$I¢aÃ/Y¼Ø[¹ãè>…C‡f—ø¹¸““3èÓg9ï¿_/¯i%öƒL’$ŽÃÍí$gφceU›?îJß¾-E›(¼Ñ¼y^ܾƒ—×4¹£¨Ý”)›ˆŠŠgÿþYrGŠÉíÛ1¬_oï ôqum˸q07¯$w4Y)J®^}Hppä¿_Ù£õõõhÔ¨*­ZÕ¡u뺴iS—&Mª‹ÏŽw RIœ={›;8xð *•DÏžÍ:´-urÁe¹‰þ±fxôè966?°ÿL¬­Í厣óD±¸`âãSX°`;wâèØŒÅ‹KÔ@³·qãF4NN¿ðûï#ÅëKP—¢-GEÅÓ¿ÿïÔ®]+†1qâFbbY³fööŠêÇ 2ºzõ!«WŸàÀËÔ¨Qž)S6ÌSSc¹£Ébþü=üõ×yú ‹jrÇÑ7o>¦OŸ|ôQ{æÏ(wÙ]ºtŸ5kNrðàjÔ(ÏäÉÙï™Ò¥Kæ{Fx³ÿ yóš,\8Xî(jOûö Y¾|8ÎÎ6rÇŠYBB*[·^ÀÃã ÑÑÏéÖ­)ãÆu¢K—Æè镜)*òóøq/ÞãâÅ{\ºtŸ+Wœœ©©1-ZÔ¢uë:ÿ~Õ¥ví rÇÕxáá±ìØÀž=‰ŠŠÇÚÚœ¡CméׯU‰ÜPÜDÿX3œ>}“aÃÖrãÆ"±s1ÅâÂ9{6œ¹sw›Èܹ};¶S‰š²ª0F^Otôsž#þF‚º]±8&&‘AƒþÀÌ̔̔)›¨X± ãurŽÅ’îô雬Zu?¿[XZÖdêÔnôëתDŒtIMÍ|maïŸ.3iÒ&~ÿ}C†ˆÂÇ˼½ƒ˜1cëÖ~ííEyýMuÙ½{OY·Î—íÛ011dô莌ß™J•Þ“;š aZ·žÏ´iݘ0¡³ÜQÔê§Ÿþaçξ+±w Tª8r$?Ξ §~ýÊŒ× [Ê–ó¾L©Tqûv —.ÝÏ)"ߺõ˜¬,•*½GëÖusŠÇ­[×Å ²G¬íÙsoï`.^¼Gå4ÈW×¶bZ<5ýcÍ·zõ 6nÇŽ]göì¿ üCÊãÙ³6n<ƒ‡Ç’“Óqq±eÊ”®b‘#È^«^½/pwGÏžÍ厣6éé ll~`„ÎÌšÕCî8‚†¸q#3x{¡¯¯‡‹‹-cÇvE½|¤¦frõêCBBîséRvùáÃxôôô¨_¿rÎèãV­êÒ¼yÍqa&33 ŸkxyqâDÆÆ†ôîÝ[:vl$FaÑ?ÖÓ§o!99ƒÇËEç,X°—ÐÐ(ÞÿÿÃÜ¿ÿmÚÔÍ8—””N©RFüôÓªV-yk¹ÆÑÌëIHÈ=&Mr`Μž%îÎå{÷žÒ¾ýBfÎtbΜ^9ƒòú÷ÿR¥ Ù¹sªÌ £þb±B¡däH7îÜyÂÂ…ƒ˜9s={¶`ùòa%¢CZ¤¦f²}»?nn¾ùd+ÇŽ]cÑ"gæÎõ¤o_+–-&:ó:àÙ³ÜÝýظñ ii \]m™<¹+uëV”;šl>ýt;»v¢P¨00ЧyóšÔ­[_ß›=:‡:uJîߦ îßJËpph̽{O B©Tad¤ÏàÁ¶¬X1LS©$þùç2kמ$$ä>mÛÖgêÔ®8:ZŠÑP%¯ï FŒpãÆŸ03Ó[ò»v]‚•Um~ûm„ÜQ ¦RIœ8†»»§NݤV­÷=º#ÇÛå½%äO’$îÜyBHȽœ),®_„B¡¤|ùÒ/M]‘]D®PA{þ¶‘‘qx{ãíDddM›VgȆ ±#÷Š‘èk¾ŒŒ,5š‹›Ûz÷n!wM÷îKóÝÆÈÈ€iÓºóŽ‹)•nˆ‰IäÛowqàÀe¶fþüùNÛ'I±±‰Zÿ0uêf¸LV– @bÒ$jÕªÀرåŽ'èõ‹-:€››/ü1’~ØGûö øí·¢P¬n܈¦I“êÚöå¹TK•2bìX{ÆŽµ/ñ£¿”J––_“˜˜žó˜‘‘*•ÄŒŽ|þ¹øà/ˆŸ>Äï¿C__…B™ó¸™Y)®]ûŸh?^ráÂV¯>ÁñãaÔ¯_™©S»2dˆMFçH’Ä­[14n,’Ñf›7Ÿcñâ¸~ýrGQ›sçÂqv^ÅÑ£ŸÑ¼yM¹ãZ""â îî~xz¢P(4Èšqãì±´,øk¨0}!]—‘‘EhèÃGgBŽŒŒÀܼ­ZÕù÷«6Í›×Ò¨už?OåÀËìÜHpp$•+¿ÇÀmpq±-ÔëAPÑ?Ö!!÷éÛwþþߊ1‹ˆ½ý"""‼Ë-¾¾sÅ"oÉÇçóæy‘ššÉwßõÇÕµíkÄ=pà2_|቟ߗZ]¿°´üšøøÔ\éëëcaQ•U«>¤iSݹãPÐê+{y1sæ6–-såÏ?OS±b¶n,¦žÐ@ß}·›õëO±”R¥ŒòÜîÊ•¬Ys’.S½z9¦Léʰavu‚ §ŽÿÒ××C’àã»2wnñȃB¡dÉ’ƒ¬Ys=½ìcÿåå5ÊN³Ýºõ˜5kN²kW0ï¿_šqã:3ztÊ•Ë{õö#RwíšN»v Š1­ N îçÌ™Û><[î(j3vìÓðöž.wA %'gà鈇‡áá±ØÙÕgìØNôîÝ"ßÏßôtõëÁ„ Y°`P1&Öññ)\¼x?g ‹K—îóìY Ù'§VVµiÕª-[ÖÆÒòíæ?–$éµ'÷o¢P(9q" oï Ž½†¾¾½{·`ð`‹ Í2ýcí°~ýiV®<Æ¥K 䎢³~û͇åË£P¨^yNO5ª†¯ï\’鎔” –,9ˆ‡ÇÚµ«Ï’%Cs­ó¢P(iÙò;ž?OÅʪ»w¢•sߺõ‡%¯}îÅ(ãÙ³{òÉ'Ž9s Â;RO±88øƒÿÁäÉÄÄ$x—ÇçèÔ-²º@’$¾þÚ›ÏðóÏC9²ý+Û:u“Õ«Oàçw KËšLÚ~ýZ‰†ç?¾ýv7›7ŸC¡Èzíóú4kVw÷q9 Ù¢¢â7ÎëסT¾Ú022dÔ¨üø£8‰ÏKLLë×ûñ×_çP©T ÞŽ‰»P«Ö«¯7—Õœ={ccC6lG÷îMeH,¼«)S6¡RI¬[7Fî(j‡½ý"V¯Eÿþ­äŽ#h1I’ðó»…»ûŽ»F•*fŒÕ‘#ÛS¹rÙW¶1÷À˜1ùßÿ†¼UѲ¤yðà—.Ýçòå\¾|Ÿ+W’””Ž‘‘––5iÙ2»€leU›FªæÛwܵ+˜‹ï±páàÿü‹ïáíÌž=IHH¥]»¸¸ØÒ»·•8ïТ¬>þx3J¥JgúšèÞ½§tèð?^Wn14ÔçË/û2uj7’éžË—ðùç;¸};†3œ˜>½;FF¬[wŠ ö¢RIÐ¥Kc6n¯u=<Îðý÷»ÉÊzýyó U«š±ÿ¬×ž B!½{±8:ú9={.£Ms hÅœ9;Ø¿¦¸íKÃ(•*fÎÜÆîÝ‘$ }}=ÌÍ+áç7===²²T8p‰U«NpíZ:Y0uj·5i|aH’DëÖó‰M|ã¶UåÈ‘9ùŽâ.IÒÓô칌۷cÞ¸m•*f„„Ì'ðo””Ζ-çÙ°á4±±‰ І)SrÚá[·ÓµëÒœ\úúz¬Zõ!ýû·–9¹PX}û® ]»|ûm¹£¨Å‚{Ù¿ÿ2çÏ#.H jsÿþS6m:Ëßû“ššI¿~­7®­[g/þ"I:ýDdd*Uv»8hP1uÚ[P©$""žä/]ºÏµkQ¤§+055¦yóÿ/ ·lY›úõ+“ššÉ—_záíÀƒËòý»GEÅãéÈ®]Á„‡ÇÒ°aœm2ÄZ5Œèkkë˜4© “';ÈE§õ«W¾r¥žžþþߊ¢žee©X·Î—eËŽP»v¾ÿ¾“'ÿEròÿO‰c` ÏÈ‘íX¼ØEƤ…7~¼GŽ\}í¸=…J¥âÓO{0gN/±® ïV,V(” ø;ii 6ožHïÞË™=»'cÇÚ«3¤ðŽ %'zpüxX®Qœzzz¸»#**77_=zNß¾-™:µ+VVµeL¬ù._~@ïÞËó|^OOI’0 5?ýäLùòyOP=žÊ¼y^ìÝ’ó·ÊË¡C³iÙR¼ B¡P²gÏEÖ®=IXX4;7fÚ´nìÞ}oï œ9¡õôôÐÓ˾»`øðv2§ £E‹ouæs6%%kë˜9Ó‰?î*wA¥§+ؽ;w÷3\»EëÖu7®åÊ™2zô†\Ÿ=útïÞ”?ÿ+nGYY*nÞŒÎ)_¹ò°°ìôÊ”1!+K…B‘•sÒ»gÏ'´m[?×>Ó9x0{bÿ*V,C¿~­qq±+¾k0Ñ?ÖÑÑϱ¶þ}ûf`cSOî8:mÆÓüðÃÞ\#Bõõõhժ̒1™îºÿ)óæyqãF4Ož$“•¥Ìõ¼žžóæõeúôî2%,•J¢iÓ¯HJJí󆆘™™àæ6–ŽÅô‚Ú¼[±øë¯½ñò âàÁOY½ú$áá1ìÙó‰¨ARS35êOüý#^¹ÝßÐP=== puµeòä®Ô­+V'.ˆ%K²zõ‰\ ²½`hh@Ù²&üü³+}úXÉN{›7Oë3¨YF†‚<ÀÆ~H¹ õ¦¦FtèÐ+«Úèééqýú#|}o RIôìÙœ!C¬éÚµ©(âkÑ?Ö{÷†ðé§sãÆ¢-’,¼½ØØ$Ú´ù>׈P}.ÌèÑeL¦ÛîÝ{J§N?½öü²Ïþøc$ƒ[s²Â»v- '§_^ûœ¾¾mÛÖcíÚ1T©òê”[‚ð‚Þú^»={.²qãY–-FV– OÏ~úÉYŠ5HbbÎΫxµP ü;²CÅßOfÑ"gQ(.„½{C^égÖÔ£W¯øù}%:ÂЧ~~_Ñ«W‹œ¿ßË %{÷†È”N{éééáàÐOÏiŒÑ}ý×7õ’$ñÃ{ùå—ÃÅœPxÏž%P©’öw%IÂÝÝ!ClD¡X(vvõY»v4ÿ=™ÌLåkçýS*UDà켊ÄÄ4Rê¦'O’5j=7ú¡RI¯ÜMdjjLdd¿ÿîÃòåG8|ø*¥JáàÐKËšæ9¢JÐ,¢¬Ξ½­m=Q(.Uª”¥]»†¯L ЯŸX§¡(ýïûó}^’$fÎÜÆ™3·Š)ÑÛ;sæ6††¹/–êëg·«3g:áé9MŠ…"ñVŸOøì³LœØ™>hÉ„ ôéÓ’fÍj¨;Ÿð–žh)S2íT¡BÖ­Í—ù⋤¤dæ:шŒŒãÎX4¨"cJ픞®àÀËy."Ù¥+Ž’˜˜Î? ü4X\\v±¸Bí/®ž:u“»wãpw'w¡„ñö¾ˆ‘‘þkG>Bö…ôÐÐ(ü;¦¾vq<¡à|}o0mÚ_$'gä9×â³g)T¯^ŽÙ³{áèØ”gÏRs¦°øë¯sDEÅP³æûXYÕÂʪö¿_µ¨Xñ½âüu„|ˆþ±ö8sæ6ÇÛÉ£Äpq±áÂ…p {nÙŽR¡B™Sé®àà{üóÏ•|§9„ìs >Z·÷4Ú´©[Lé ÏÏï*ÕÿŸËPº´ k׎ëK EªÐÅb…BÉôé[°°¨Æ×_÷ãîÝ':t•ÇgE>á-DEÅã켊¨¨çyÞzñ‚B¡ÄË+€/¾èMÕªfÅ”P»:tCC²²”9…5''K/v¡R%qÒò¶>ø %íÚ5àË/=9tè*ý!nhhÀ¡CWµf^)MâíT ÑXÙ£~ú4™+WråÊ®\yÀ–-牊:d[´¨•«ˆ,úbòýcíOdd:4’;J‰Ñ§Ÿ¾•J‰$I8;ÛÊIgI’ÄØ±ëßX(†ìÏ%¥RÉÈ‘n:4sóJŰp”J.ÜÉù 50ЧeËÚ¬[7†jÕÊÉœNÐu…./_~„[·sôèg°u묬jÑ¢E­¢È'ÒÝ»O2d%OŸ¦¼±Pü‚B¡âÏ?OñÍ7ýŠ8nØ·/„¬,%FF˜š³t© ýû·–;–N¨Té=Ö¯˾}!|ñ…'iiÙ£Œ÷í ÅâB’$‰Ï?ßYàíU* oï ’“ÓY³f”˜R=}š‚‘‘åÊi÷ÈâÛ·c8uê¦U,»?ÿ<õÆBñ YYJ=zN¿~¿âí=zõ*q:Ýq÷î&MÚÈ‘$éµsæ¿L¥’8|84W±øe+¾G×®MèÚµIÎcÏž¥ü[<Î."ÿý·?K— zõò¯Œ@#Ä‹žèk‡3gnS¶l)Zµ‹G—²eKѽ{SŽ ÅÈÈ€^½ZÈIg={–Bÿþ­9w.œGžçL)•=ƒôÊ×YY*’“3pqYÍáó5în•K—šš™snÊ”®ÌÛCC1°G(z…*D°råq~úÉ™úõ+#IÞÞÁLŸÞMíÁžÜ#×cúd7.J¥ôÊíèú(•*BBî¡RI¯Ì§ô¶tõøÅÄ$€½}¾ý¶7+–‘í÷511ÁÌLý#Â===Õ¾ÏÂúâ‹æìØq‡«WŸÅŸn¡|y¹c;;;êÔyû߯_„©©1ii™¯yVCC}ôõ³‹ÊYY*$)ûêõÁƒWhÔh.~~³)UÊèí¤råâ)"=}š¬£Š7m:Kݺqr²”;ŠP‚¨T!!÷€ÿïû¼,»¿¤H9ý%…BÉãljt츈¿ÿK³fÕeH®]<<Îóë¯' õ=*•„¿‰‰é˜™•*Ð÷T¨P‡&88ü9>>å¥ÈÙ±#€ŸÎ. W«V.§pü¢ˆ¬©s<úûûsÿþ}¹cÊóç9ýã&MÊáêÚ€ŒŒp<=ÃÕ²ÿ:uê`g'¦MP‡'°·o$î"ËGzz:IIIjݧ““GŽ„biY´´DÒŠ`Züâêj²ŠßcáÂÁ9ÿ‹KæÆhnÞŒææÍÇ„„Ü#"â ii {J¥RETT<-Z|‹¿ÿçuþ³iÓ)Ê”1æ§ŸйsCâ㟾Ó>‹ª~ è=© côÉîÈ9:þLõêåØºu2W¯>¤gÏeœ;÷µÚ‡íûúúªuºîöíx–.½@JJ&¥JQ¥Š)åË—¢\9Ê–5ÆÌÌ$çßÙ_&˜™S¯^-š6mªö<ºzüŽ`ãÆ«LžÜš.]Þ¾§.U«V-’ã§IóÖ–.mI¹rN$&ž$%å²ÜqŠÍÖ­[1b„Zö¥Tªxö,…gÏRxú4™Ó§HLÌ ))ó߯ ž=K#!!“dzçÅmÒ¤"Ÿ}ÖŽÒ¥Åâ'oâààP,?géÒC=ʱcŸËÏ+ ‰‰iX[ÿÀ¼y}7®“Üq„,11¸¸dž=KÎiãâ’¹t)Œ¤¤L2xþ<ØØ4ÒÓ”)cÌ_´£Q#1%Åë(*¶n½ÆÑ£ùn§¯úú¹'(•*”Jnn£Õ¾èÓó穹F _½ú{÷²O´«V-—SM&%%Cí™Ê—/MçÎéÜùÿç@NHHÍ5ÙÛ;ˆeËÙ£ÒZ´¨Eóæ5iÞ<{.äºu+¾ÓçòêÕ'X½úýû·fþü*Hk[qtýúÓôïßš*UV¨}ß#GŽTû>Kªóçï’’‰“S3¹£hu_'NLdîÜ06Vï@Œâîj»ªU«âàðj±T©TqïÞSÞ¿4ï¿/ÿ| …’þý3˜1ÃImÓNˆ×‰Pj©²²TüòËa† ±¡aÃ*9_¿þˆfÍjY8¡àÄÉKñ()ÅJMS¥JYñ·/fåËk÷¼¸º(>>… ´÷¸¨T›7ŸÅÕµ­¸!hSSãB]/ÉLL )_¾´Æ~Ž”+WšN,èÔÉ"ç±ÄÄ4BC£¸zõ!¡¡Qøø\cÍš“(•*Ê–-•S>…¦Mµ÷­Ï5ŒÙŽ:u*æz.66I¬.,‚ Åàùó4­>ÑøóÏStíڤȦ®AP'SScÚ´©K›6usS(”ܾÕ+rF"ïÚLJJ††úXXTË}ܼy-‚‚îbddHffVÎ>T*'0r¤ŽŽÍX°`h…"wõêC?N gÏærGA´À‹ÅG†òèÑs¦NíþÊs‰‰i”+§ž‰¶AAÈ[ffeʘÈã­„…=âܹp¶m›,wA„·fdd@³f5rMçRIܽû$g ‹+Wrôè5ž?O¥bÅ2(Y¯ìG©TpêÔMºtYÌԩݘ9Ó‰R¥ŒŠíwJ–#GBiܸš¸0!‚ È‹Åîî~89YR«Ö««?+J ug¾-AAÐTéé ­ëÎÝý ÕèÒ¥ñ›7AÐ"úúz4hP… ª0p`›œÇ>ŒÇÑq)’”÷÷*JV­:Îöíþüøãࢎ+”P‡‡ŠQÅ‚ Bå»2í[9w.œ±cí_ûü{ªþ•‹AAÈ-%%C+§¡ˆOÁÛ;ˆÑ£;¢§§'wA„bah¨Obbz¶ÍÊR›Ä¤Iñõ­BJŠŒ#¨ÏýûO {D¢X,‚ L¾Åâ-[ÎÓ¨QÕ\«¿¬L™Rîéšøøx–.]*Û~RRRX´hÑ;ÿü’J?õ gãÆrÇ(R/礤$/^üÚíté¸5ñ,¼ÌÌ,LMµ¯X¼}{ÆÆ† j+wAò m¢¦»|ù¹>f` Ÿë®I‚÷Ù³çâ¿WŽ>˜èiŸƒ¯Rµj9Z·®#wA(QöîÝK@@@®¶òå6´0m¸hS…â–o±øØ±ë Ø&Ï‘@ææ‰Œ|R$Á4]BB6l(ж&Làîݻ?—%%%ñÝwßúû„lâø©Ï7X»v­Ü1ÔîåãþòqNHH`þüù¯ý]:®EM¼ /55횆"+K…»»®®mµv¾eA( ´±MÔtAA‘9SP¼(¿|NeffŠ•U-lÃŒެ\ù!ÿüó)ööqØÛÇåšÒ"/ÅÕ}"íæíDß¾VâîAP³üÎQ<==9wî\®¶òå6´0m¸hS…â–çYgxx,‘‘q8:6Ëó›4¨BDD\‘ÓtæææÜ¼y³@Û>|˜éÓ§¿ó~õÇOx“—»8Îê'Þƒ…“––  u×cÇ®ý<Ïé¬AtÕÍ›ÑØØ˜Ó AêÕ«Œ¹y%êÕ«„¹y%Ê–-õÚï32RgÌ}"íöˆk×¢øåW¹£‚ÎÉï%/¢ ´Ež#‹»NÕªåhÞ¼fžßܪU®\y€J•ÏÊ ÅäêÕ«tìØ‘R¥JaaaÁ¶mÛxúô)ŽŽŽ,_¾œ5jP¹reÜÝÝùì³Ï¨\¹2Õ«Wgûöí…Þ6&&†~ýúåú¾­[·Ò AÊ”)Ø1cP*•¸ºº‹««+~~~ÄÆÆÒ³gO6oÞLùòå9yòdö“—õë×S·n]Ê”)ÃØ±cQ©4¯ƒYß|ó •+WÆÄÄ„®]»òðáC@?m¡R©˜1cfffT©R…Ÿ~ú (Ü1¼_oz.¯÷~"##éÚµk®Ç\]]ñ÷÷帿üz)]9® Þƒš"33 €R¥´kdñúõ§éÞ½™X}]ÐI…ýŒSG_À××—–-[bbbB“&MØ»w/À+íãˆ#X¶lYÎ÷=yòž?žçï¤-m¢6ذa­`ß¾™¬X1œ3éß¿-ZÔʳPü6ÔÑ}"Ýåå„…E5Z¶¬-wô¦¾g^íþðáÃÙ³gQQQ´jÕŠ]»vMëÖ­‰—ç—rÉëô¿m#ÀöíÛ177ÇÔÔ”’ðÊþþÛ†æÕ†çE´©B±‘ò0|øZiÖ¬my=-I’$ݽûDª^}–tõêÃ|·{'Ož”?~\ m“““¥êÕ«K+W®”ÒÓÓ¥ãÇKfffÒÙ³g¥èèhI___úöÛo%•J%­^½Z¤Å‹K*•JZºt©Ô°aCI’¤Bm{÷î]©L™29ßgll,Mš4IÊÈÈ"""¤òåËKG•âãã¥êÕ«K'Ož”233¥H¦¦¦Ò Aƒ¤sçÎI7oÞ,Ð~þ+::Zr¶ —Ê•+'8q¢ÀãëׯKׯ_/ðö…Q˜ãwøða©FÒíÛ·¥ÄÄD©ÿþÒ”)S$I*Ü1ÇO}iëÖ­Úvÿþý’žžž4{öl)%%Eòóó“Ê•+'yzzê˜ä÷:Èï¹üÞÿù “*V¬˜ë±–-[J>>>¯÷—_/|&U¯>Kò÷¿S,?OÂÂIÕ«Ï’Nž “;Š XQµêê«>~üX*[¶¬äáá!¥§§K{öì‘J—.-ݸqã•öÑÛÛ[²°°ÈÉûÇHÝ»wÏówQÇçWaþ~Âë1B1bD¶UWL“ûD…ù{¹ee)¥V­¾“V®<&w­R˜þ]~}ÏüÚýÏ>ûL3fŒ$I’´uëVÉÄÄD=z´$I’´eË©eË–E’·¤+ìùs~ç ÿm/]º$™˜˜HÞÞÞRZZš´bÅ V¬X‘«­|¹ ͯ ÿ/M¯:'0Ï‘ÅׯGai™÷¨bsóJÔ®]S§n¼SÁú]8p€êÕ«3mÚ4LLLèÖ­cÆŒÁÓÓȾZ3wî\ôôôpttÄÐÐ9sæäü?)))g_…Ùöe™™™ÌŸ?cccêÕ«‡•• ”/_}}}Ê—/‘‘iii¬\¹’öíÛcll\ ýäeáÂ…Ó A,--óÝVS¥§g/’˜‘‘AÙ²eÙ¶m[®+jâøi¾òå˳xñbJ—.½½=Ó§OϹr^Ðc’ßë ¿çÞôþÛßç¿Ç½0t帾 Þƒš£lYS¹#؆ ~XXT£K—ÆrG„"SÐ6O]}Õ={öкukÆŒƒ‰‰   OŸ>ìØ±ÈÝ>~ðÁÄÆÆrõêU¶nÝʨQ£òý}´­MÔÓ{ÓþEŸH;>}‹'O’<ØZî(:-¯¾g~í~Ÿ>}8~ü8§NbâĉøúúpòäIúöí+ão$¼ß9èÛÆmÛ¶1xð`L©R¥˜5k-Z´xãÏȯ Ѧ ÅåµÅâää bc“¨_¿òw0`@köì Q{°ÂˆŒŒäƘ››ç|mß¾=×mveÊ”@OO sþÿ_…ÙöeÕ«WÏùw~ÛêëëS£FwÞ•+W.жšìƒ>ÀÙÙ™:P·n]fΜùÊm7âøi¶ ä:hÞ¼9ÑÑÑ9ÿ/È1Éïußsyÿ']:®/ïA¡0RñöbÔ¨âï*輂´yêê«>|ø ‹\?¿qãÆ3`À¼¼¼¸sç¡¡¡ 2$ÏßC´‰ÚI}°¢"^Sòòô ¤cÇFT¯^^î(:ïu}ÏüÚ}{{{¸uë§NbÆŒ$%%ɉ'D±XC¤NñBTT–––¹kÖ,ïõ¿^xSþ2Ѧ ÅéµÅ⸸ì«Ì+¾÷Æ8;ÛpíZ7n¼þ]ÌÌÌèÔ©‘‘‘¹¾Ö¬Y#[¦üˆ7un’$±lÙ2ž>}Ч§'éééùžÌÈM¿WÅÅå^è266– *jù½ò{Nïÿ”””BPüÄ{PómÛæ±±!®®måŽ"A]ŸUfff¯|æ>}ú”råʯ¶C‡ÅËË‹­[·2hРœÂ¡ ;ÔÑ{Ñ'ÒnIIé9Š‹‹­ÜQJ¬üÚ}###Ù¶m)))4jÔ6mÚDbb"íÚµ“;¾@áêï¿ÿ>±±±¹ûoûü:EÕ† »zm±8-M€±ñ›Ò±°¨†µu]6lðSo²BpttÄÏϰ°0RSS±¶¶f÷îݲe* {öì!44Tîj·dÉ044¤mÛ¶Œ5ŠGÉKítõøAö•ó””„››}úô)Ô>ò{ä÷ÜÛ¾ÿŒŒHHHàÙ³gøûû^¨Ì ÛÇU׈cU::š?þøã•)(D›¨ÔÑ}"ÝóÏ?—ÑÓƒÞ½ß|¼P4ÞÔî÷éÓ‡_ý•Î;Э[7V¬XA¯^½Ð×Ïs¶P¡¦Nѽ{w¶oßž3*øÊ•+œ>}ú?#¿6\´©‚œ^Û ¼• h'':°sg11‰êÊU(5âǤ]»v8::baaAóæÍquu•%ÏU©R…éÓ§üNû™5kVΪ©ºdôèÑ}”69ç¼OKsÎyåsÞ+*++pÉç–••áĉ2düüü®x=í­ù]ÎÄÄÄv_÷åþþpøðaÔ××cÀ€n÷šÎÅßßÅ ¤¦¦bÞ¼ym^¦¾¾‡‚ tEÛ½ØÿƒKý¹’¿³ÙŒ_ý€ý@ÝÜÇhù{÷ññéÔßó•üü/Ç•¼¾¶·žð7¨Ñh••…±cÇvø¶TªJ òøé§Ç‘˜(»ôN4sæ»pw—àÓO//¬ ê :úõ±½ÎUóóó‘““ƒèèèózÿÕÂ… ‚_|ñŠ·×V]áøÒÝ¥¤¤°OHØVíqÖUω®äçÑÛåä”bܸ—°uëƒ9òâ¯t¾ö>¿ë茢3ÏG»»+¹~¾Ø5hk×(éééÐh4:t(¤RéyëkíÚ¥=^ÃÛ¢#óêq޶ÚgB*uƒ¿¿' tmZ‹P(À²e“ñlÅÂ…#Ø®U¶•\.‡\.ï”m …Â6Ÿ$aòäÉW½žžÌÕÕ£FuÞ(4þþÚŸ››ÆwUë¸ØÿƒKýùëß¿Z­vÌ2Üšääd 0#GŽlõñ¿þÞù{n_ü¼< fg—Ð&99¥8tè RSµ¦½ÎU›'Kº˜²²2ða1JÝÚ­P""¢Þêωg»®ÔÔ_! yJDÔ £±YY%ÈÊR##C…ÌL²²Ô¨«k„D"B\\”J9ÂÃka³uý×|êzl66músæ åÄvDDtU.‡„ø`̘~ذa_›ÃbxöÙÛ0vì<ûìN¼öÚíR$QoÖ|ÑWW×èäJZgµÚ°qãAÌš5„¨DÔëiµdfªšF ##C…üürX­6x{»!)) Fbþüë PÈ‘ ƒD"¤¤ü×ÉÕSwuà@.rs5xÿý»œ] us ‹ࡇ&`öìµøã" Ѧúøx`ÍšYX¸ð#ŒiÓ:n6G""¢Þ@"±®Íf‹“+iÝîÝ™(.®À¢E£] Q§±ZmÈÏ/oj!Q숵Z 4ÔJ¥·Ü2 …J¥QQlÕCâ£öcäÈ8ÄLJ:»""êæ._},®¿>Ï<³;w.ió‰ÍäÉJ,Z4?¾ ÉÉሉ n—b‰ˆˆz#77 À`hpr%­Û°a?Fî‡èè@g—BDÔ!ÌÈÎV;Bጌde•Àhl€X,Dll 9x`Š0(rx9»lê%TªJüøãI|øáBg—BDD=ÀEÃbXµj:¦Ly}´÷ÞÛöCO=u ŽÍÃ}÷}‚]»–ÁÃÃåjê$""êµÜÝía±ÅÒõFçä”âàÁ\¤¦ÞïìRˆˆÚ…NWã˜t.+KÌLNŸÖÀl¶ÂÓÓ‰‰aP*Ã0gÎ(•áHHÁÕõ’—UDæ“O"4Ô'&9»""ê.yV“˜(Ã#LÂêÕ»0rd<úõkÛm-‰ëÖÝ…›nz=ô)6lX‘HxÕõ6ͽ,Ʈ׳øÃ÷!**cÆôsv)DD—Åf³¡ @ç˜p®9 .-­{C¡câÄ$,[6J¥ÑÑ ÙF‚º£±ÿùÏ!,Y2×ÛDDÔ.ÚôøÒ¥“°oß),\¸ß}·R©[›VááöÛßÁêÕ_ã™gn»ªb‰ˆˆz+oo746š]F z}vì8Ž+nfN"êÒL& ²³ÕŽ@83S…“'K`0ÔC( ::J¥÷Ü3 … …ÁÁÞÎ.›è’>ýô¬V+æÏ¿ÎÙ¥QѦ°X,âƒâÆ_Ã=÷lÀ§ŸÞw÷¶µ•4( ¯¾z/þÂÂü.kò›¬¬,deeµùùtùBBB:lÝüýu¼Žüý¥¤¤ %%¥ÃÖOÎÅ¿ÏîG$¢¾Þäì2ZHMý0gÎP'WBÔ~øúØýéõuçÎÍÕÀd²ÀÝ݉‰2(r̘1IIaHHÁÓÓÕÙe;lÞ¼›7ovv—M"‘A"ñGmmf»®wÞ¼yíº¾žÄd²àý÷÷àÎ;G@*uwv9=Êž={œ]uFFãì2œ¦#óêYÚÜ\+8Ø›6-œ9ïaÁ‚ðÉ'‹Ú|R5cÆ`hµüë_;!‘ˆp×]×_r…BÑÖÒè*¸ºv̉1££~Û¶mëõRÛ 6¬ÃÖÍ¿ÏîÉÓÓuu]',¶ZmøôÓ_0gÎÐ.²] ¾>^=oïÎ[X¨Cff‰c¤ðÉ“%(,Ô¼ PÈ1vl/ž…B޾}ƒºô­ú<ò¦M›æì2®È÷ßãûï‹°rå2ÄÇû´Ûz###Ûm]=ÍgŸAE…÷Ý7ÆÙ¥ô>>><ôPr¹½{2æŽÊ¨çØl6Ûå,•¥Æ¼yë •ºcÆ{Üæeß~ûG¼øâ7øÛ߯aÅŠ›»ô‰QWrýõÏcîÜaX¼x‚³K|ÿ}î¹ç#8°}ú9»"êáL& rs5çÖëë ¥Rîh!¡TÊÚ~%]šÍfÃ’%©øñÇLìØñeÎ.©G³Zm=úŒ‹—^šíìrˆˆ¨ç8zÙa1h4Õ¸ÿþÈÎVcåÊ©X°`D›{~õÕ <úè …×^›‹ðp¿Ë®šˆˆ¨·¹á†W1zt?<ùäTg—¸ãŽu ؼùg—BD=ŒÁP“'KZôÎÎVÃd²@"!!Aæ„ 9’’Âàíݶ9U¨c™LÌœù.´Z=víZ†€/g—ÔcíÚõþö·MØ¿¢£{÷hI""jWWö—_þëÖýŒ¡Cûâ…f".®mýO22TX¼ø?P««ðôÓ·bÞ¼áœU˜ˆˆè"fÏ^‹>}‚°fÍ,g—‚œœRŒ÷þóŸû1n\‚³Ë!¢n¬´´ú¼ÑÂ:Øl6øúz@© ‡RÖ Ë ‰Däì²é"tºÜrË›ð÷÷Äöíµy®º†X,ê…+V|†½{OáÀ•|³—ˆÚÄjµ!/¯ ééÅÈÈøsİNWˆŒ €BÖbİ\Î;»«¼¼2Üxãk7.k×ÞÙæ»P©möí;…¹s×ãûï—C©”;»""êY®>,ì'Û¶Æš5ß ®®÷Ü3÷Ý7~~—Ož,Á3ÏìÀ¡CgpË-ðØc7 >>ôjK"""êQ{l JK«ÞöA¯¯ÃàÁ«°bÅ͸çžQN­…ˆº&“É‚ìl5ÒÒŠšF — +«FcÄb!ââBœÞ¢¿°Têî첩8‹””õxà±X¹²k´Pê)fÏ^ ‰D„ÔT¶‚""¢v×>aq3£±6ìÇìE}½ ŒÀ}÷iÓäß}—Ž—^ú99¥˜6m–,™ˆ~ýÀªU_âÈ‘<ìڵ̩u¬_¿¯¼òŽ{R){„õvÍý…ÿ †UÈÍÕÀd²ÀÝÝII2G0¬T†#!AWW±³Ë¦N²uëa<úèÿÃ[o¥`æÌk]NðÛog1}úÛøâ‹Å><ÆÙåQÏÓ¾aq³ÚÚF|úé/X·n**jpãÉX´h4®½¶ÏE—³Zmصëw¼þúÈÉÑ`̘~xðÁ±5*ž·.Q¯öúë?à‹/ŽaÿþN«ÁjµaäÈç1~|"þýïN«ƒˆœC«5 3SÕÔJ¢¸ÕþÂýû‡;ÚHôí‘Hèì²ÉÉž~֯߃ÔÔ0rdœ³ËéöfÌxb±Û¶ýÍÙ¥QÏÔ1aq3“É‚]»þÀGíñcHL”aΜa˜1c0/<3®ÍfÃÏ?gcýú=Ø¿?±±Á˜?Ä%—#""ê©>úh?Þzk7~ÿýÿœVÃ÷ßgàž{>Â+ЧOÓê ¢Že³ÙPP kê-\Œôôbdfª Õr¹ 9’“ÑœÌþÂtq6› >¸ û÷çà›oEtt ³Kê¶öî=…¹s×á믗q¾""ê(ŸëĉBlß~;wž€ÁP±cûaö졘WY™?ü~Èľ}§`µÚ0|x n¸A‰qã.8©NZZ¾ý6ß|“†Ü\ är?L™’ŒnPbذ¾¼Õ‰ˆˆº­ººFÄÄü7.¤IŠNÝöÚµÿÃ[oýˆcÇþOO×NÝ6ýÉb±"7WƒÌLUS0\‚ôôbTW×B( ::J¥ÜÑJ"99œ“CS—´qãA¬\ù9Þ~;3f vv9]šÙlÅøñk0p`$Þz+ÅÙåQÏ×5ÃâsÕÖ6bÏžl|ÿ}~úé$**Œ÷ÃÈ‘ñ=:#GÆ·zœ›«qÇééÅððpÁðá}1~|"Fö9&"¢î%.î <÷ÜtÜqǰNÛ¦ÙlÅu×ý·Þ:O?}k§m—¨·kh0Ÿ Û?ge©QW׉D„„ ¹cÔpRR¼½Ýœ]6Q›­Zõ%>þø¾øb1 Šrv9]ÖÖ­‡ñøãÛ°wtv9DDÔóuý°ø\V« ééÅØ¿?û÷çàðá³hl´ 1Q†Q£â1jT<†‡Gˉ8´ZöìÉÆ¾}§°wï)èt5ˆˆðǘ1ý0fL?ŒÕR)O®‰ˆ¨k1b5æÎ†%K&vÚ6¿úêw<ôÐ&:ô""ü;m»D½‰^_‡´´bG(œ™©ÂéÓ˜ÍVxzº:áæÏ 2Þ1GÝžÅbŽ÷~ŒcÇòñõ×K„¶¢¶¶×_ÿþøÞNÛ&QOVZZôôb¤§7Ã%(,Ô¼œîh%¡TÊ¡spPÏTW׈iÓÞF}½ _½ŒxþâÕW¿ÇûïïÁ/¿<‰€¶”!"¢NѽÃ⿪ªªÅ¹8p ‡ÁéÓZ…ôëŠáÃcpíµÑ><¡¡>ŽeŒÆ<˜‹½{sðË/¹ÈÉÑ@$ 99ÆõÅðá1:´/|}=œ¸gDDDÀ½÷~WW Ö®½³S¶—‘¡Âäɯà³Ïƈ±²M¢žÂjµ!?¿Å-F ët5€ÈÈ(•ö¾ÂÍ£†Ï=G%ê-Ôê*Lú&bb‚šúGÍ7ÑhªqýõÏã±ÇnÀCwv9DDÔ{ô¬°ø¯ªªjqøðY9’ß~;‹´´"46š!—ûaøð áÃû">>Ô1b£¢ÂˆÃ‡ÏâС38|ø,22T°ÙlMs¬#@övòÞQoóøãÛŸ_ŽmÛê”í-]º'O–`÷î¿wÊöˆº+“É‚ìl523UHK+BFF ²²J`46@,"66ä¼`X*uwvÙD]FVV ¦N}·ß>/½4ÛÙåt =¶ä`ÿþ•pu;»""ê=Žö裎¯¯&OVbòd% ±ÑŒ' qôhÎÃK/}ƒªªZxy¹¢ÿ ‰"pÍ5Q˜2%PSӀÇÏâ·ßÎâ×_Ïà?ÿù&“þ4( ƒEášk"‘œÁƒ8u¨üúë™NÙ–F£ÇÎÇñüóì‘Ht.ƒ¡'O–œ «›«Éd»» eP*å˜3g”Êp$$ÈxŽHt ‰‰axï½;qï½#22‹OpvINuòd ¶m;Œwß½“¯DDÔézôÈâK±ÙlÈÉÑàøñ|üñGŽ/À©S¥0™, ô€80Ê"z¡¾Þ„ãÇ pìX>Ž/À‰Ðj HDP(䏿š( ‰k®‰Bß¾AÎÞE""êA¶lù O?½¹¹/vø¶^ýlذGþ nn’ßQW¤ÕÎ5÷.(ÐÁf³Á××£©¯p’“# TÊÑ·oD"¡³Ë&ê¶Þ/ž{î+lذÐ1à§7š3ç=ÔÔÔc×®eسœˆˆ:UÏnCq%ÌÈÈPá÷ß ðÇEøý÷Bœ9S›Í†ˆGp¬TÊ‘†à`o¨T•8vÌ?^€ôôbÔ×›àëëÑ4ò8 ÉÉö[e2_gï"uS{÷žÂܹëpòäêí¥o2Y0tèÿaîÜáxüñ;l;D]‰½¿°Ê§¥A«5är?Gûˆæ èär?'WLÔ3­Xñ¶m;‚Ï?F:»œN÷ÓOYX°àìܹC†ôqv9DDÔû0,n ½¾iiöàø÷ß ñÇEP©*ÁÁÞP(äMáP( —û!'§ÇâÄ {ˆ|öl¬VÛy³\÷ïލ¨¾cLDD—tú´£G¿€Ÿ~úÃ:l;Û·Áòå[ðÛoOóMNêqÌf+NŸÖ =ýÏIç22TÐëë  ì†•J9ú÷àDÇDÈb±bÞ¼õ8}Z‹]»–öªãÉdÁ„ /¡_?>øàng—CDD½Ãâ+¥××µ}ÒZ¿ºæ …BŽˆäç—;naLO/v<ßÛÛÍ1áIs±˜·1ÑŸŒÆÄÅ=M›îÃĉI¶o| QQX·î®ÛQg¨«kDV–ºE‰ìl5ÌHDHH5{ÙÛI$&†ÁÓÓÕÙeõzz}=¦O ðõ×ËàááâäŠ:Ǻu{°fͱw pv9DDÔ;1,nO&“¹¹šóBäæ‘*þHH!>>‰‰2ôíÜ4{v‰ctËÉ“%¨¯7ÁÅEŒ~ýìÏë×O…" ýúÉ"uön‘%$¬ÄÊ•S±`ÁˆYÿ±c¸å–7ðõ×Ë0xpT‡lƒ¨#TW×6O•4ƒãôi-,+¼½Ý”…Â>RX©”#..‰ÈÙeÑè0uê<86,ìñýÀKK«1jÔ xðÁqX¾üg—CDD½ÃâÎP\\‰¬¬dg«‘•¥FNN©cT±X,DŸ>AŽ9..îîTUÕáÔ)µcµº àï¤0$$È CRRâãC{Í»íDD½Ý„ /còdþùÏ›:dý>¸EEøïíõµ‡ÒÒjÇHaûô%(,Ô‚‚¼wv±åQ÷vüxfÍZ‹ùó¯ÃªUÓœ]N‡zøáOqìXöî}®®bg—CDD½×Q…:Ax¸ÂÃý0i’Âñ=³Ùм¼2dgÛÃãS§J±sçq”Ãl¶ÂÅEŒ¸¸ÄÅ…`Á‚ •Âf ¦¦99¥8q¢[¶ü†šš…DF )) qq!è×/±±!ˆ æ öDD=LX˜JJª:dÝ*U%¾ù& ¯¾zG‡¬ŸèrY­6ÇÄsÅHK³‡Ã:] 22J¥sçs´ÿ õqrÕDÔ^ ŠÂË/ÏÆ’%©èÛ7wÝu½³KêžÆŽDZqã"ÅDDät<9‰X,t„Áçjl4#7WƒS§J›‚d ¶m;‚¢"Ìf+D"!""üŒ””áð‚Í&€ÑXüür|ÿ}Ö®ýL&‹£õE\\âãCÜô9R©›“öœˆˆ®Fx¸?N*íu§¦þŠ€/L›6¨CÖOt1öÖ\jG¯æÏFcÄb!bcC PȱdÉDÇäsR©»³Ë&¢6cÆ`Wâ©§¾@X˜o‹8=ÙlÅÓO‰“zܾQ÷ݸ‹qqC¡°ß:y.“É‚¼¼2äæjpö¬ýóo¿åáÌ- †z€ŸŸ'bcƒqûí×Âßß"‘&hµ58p Ÿ|rµµ€ÐPGXŠ˜˜`ÄÆ!$„£qˆˆº²ÈÈüðCf»¯·¾Þ„M›bÑ¢ÑìãJÎhl@VV ÒÒŠÁpv¶&“nnGá3C© GRRGÛõbK–L@NN)–,ùvìx‰‰2g—Ôn>üpòòÊðÑG÷8»"""{÷¥¥Õ8}ZÛô¡ÁéÓZœ9£…JU ‰„÷CŸ> ò†‡‡+L& †z””Tãôi ª«k^^®èÓ'}û!6611ÁèÛ7}ûÃË‹³ƒ9Û7ߤá¾û>A^ÞKpqi¿ð,5õV®üGŽü ÁÁÞí¶^"®Æ1JØ#?¿V« R©;”J9ú÷w¼Y±¸gOdED—Ïd² %e=Μ)î]K!“ù:»¤«¦Ñè1zô X´h4þñ]À îz¶ººFäç—ãÌ™2äç—ãìÙ2äå•áìÙ2”•‰ááþˆˆðƒ\\Dhl´@¯¯ƒJU‰‚L& $ı±öà¸OŸ ÄÄØåðpŽB#"ê$'O–`âÄ—±wïçµ2º&¼ ¥RŽ7ßœ×në¤Þ§¸¸Ò1é\F† ééÅŽIzCC}Ïõï…" ‘‘N®˜ˆº½¾Ó§¿رã‘nßZï6"-­?ÿüOÎ5CDD]ÃâÞÊ`¨?/@¶.Ge¥€=H–É|ì oow…˜LfTWס´T¦€}ärX˜/¢¢ˆ¨¨DF ::QQðññpæ®õ(55 ˆ›6݇‰“Úe¿ür3g¾‹~ø;”Jù¥ ^Ïb±âìÙ2¤§ÛG gd” #£UUµèÓ'°©¯pxS8Ž€/g—MD=€Z]…©SßDLLRS趃VvïÎÄ]w}ˆÍ›Àر Î.‡ˆˆ¨Ãb:_UU-òòÊQT¤CA……(,Ô¡¨¨*U¥c¤±»»¡¡>J=àê*‚ÕjC] F”•éa6[¾¾MAò_Ãä@Èd>‰x«)ÑåP*ŸÂcÝ€{îåøžÙlECƒ žžnd46 ¬Ì€èèÀß_¸p*+k±sç’«™º¯†3²³ÕM¡°}´pV–uuHDˆ‹ Arr8’“íÁpRR¼½»÷h?"êÚ²²Ô˜>ý-Lœ¨ÀÛo§@ 8»¤ËRSÓ€±c_Äu×Åâí·Sœ]ѹÓå±X¬()©BQ‘=@n’ t(.®€F£w<×ÏÏ^ððpƒH$„Éd†ÁP²2ŒÆ¶Áh…Ü&7Ê =ˆˆz«©Sß@Ÿ>A92iiÅøõ×3ÈÊ*ÁÜ›opÁå²²Ô˜0á%Œ‹å˧àºëbPP ÃõׯÆÚµ pë­;q/¨+2êm$23UHOW!7·f³žž®HL ƒR†ääp(•áHHuÛQ}DÔ½íÞ‰{îùK—NÂßÿ>å¼Ç³²ÔË}!•º;¡:»?þ(Â9xè¡ñ-í§žú;vǾ}Oð® ""êjSûª¯7µÿ:2Ù`¨ˆÅBøû{ÁÏÏÃ1AS}½}TrE…Íÿ-ƒ‚¼£ÿÚÞ"$ÄÇiûIDÔYÌf+rs5HK+BZZ1ŽËGVV L& „BÄb!íw|üøã?”vÁu8‹Ù³×B(Àjµ!)) aa¾8y²¿þú4'ëe´Z22Š[ô.(ÐÁf³ÁßßJexS+ 9’“ÃѧO„Âî5zˆz¶båÊÏñöÛ)˜1c°ãûû÷ç`Μ÷°zõ ,\8ê"kèX«V}‰õë÷`ܸ¼óÎ|øùyâĉBÜzë›xõÕ;0{ö§ÕFDDt ‹©sUVQP ;odraaŠ‹+-.\]Åð‚‡‡KÓ¨d+jk ÓÕ8žãæ&AD„?är¿¦_„‡û;þ-“ùr´u{?ý”…;ï|“^Hn#㫯~Çßþ¶Éñ†œ}”“ ®X¶læÏ¿Ž}æ{ ›Í†‚22죅ÓÒŠ™©‚VkŸìV.÷sÂÍÐÉå~N®šˆ¨mž~֯߃ÔÔ0rd¶m;‚åË·Àb±"**‡=å´Ú†ÿ7 uHDðóóÄúõwcåÊÏà…­[ìví3ˆˆ¨W`XL]‡ÕjƒZmoqa™\‰’’*¨ÕU()©BqqjkÏ÷ôt…‡‡kS lC}½ z}£W²P(@p°þ óu„Êáá~ŽP¹»Ï LD½Ã´ioáøñÇë[küü<™¹ú¢ëùè£ýXµêKÇ›nç‹…‰„˜;wî¿ìy}©{°D/EzºêœVÅ0ê! Ñ·o ûháþýí­$|}ùu_6› K–¤â—_NãŽ;†áÍ7w;¾_~ù† éÓéuåä”bìØ5ޝE"!l6D"öìy}úuzMDDDmÀ°˜º—ªªZ¨ÕUŽ ¹ù£¸¸ju5Ôê*G"^^îpw—@(Àb±¢¶¶ÑÑ/¼½Ý —û5P¶ÊaaͲ‚ƒ¥œ€ˆœ./¯ cƬÙ|áQÅFâ›o½èz^}õ;¼ýöOhl4_ôyC‡öÅçŸ?Ì׿.®®®YYj¤§Û'žËÈ(Fv¶ f¸¸ˆ‘˜(ƒRÞ‡A¡ÃÝÝÅÙeµ»ÚÚF<üð§Ø½;V럗·b±Ó¦]ƒ·ÞêüIäÞ|s7^{í;˜L-ßè 1cþlKADDÔÅ0,¦žÅf³A«5@¥úsTrqq¥ct²JU ­Öài  áååæhWÑØhFMM,ûID"Bh¨ÂÂ|ÿÒòÂÞê""ŸÞDÔ)ž~Þ{ïgÇëÓ¹D"!n¿}0ÞxcÞE×±bÅgؼù×VGö‹ê˜˜ |ùåRÞyÑÅTUÕ"#£%HO/BF† gÏ–Áb±ÂÛÛ IIaèß?Â1j8..„­˜ˆ¨W¨©iÀÂ…ðë¯gZ=FJ$"¤¥ý_§·Yš8ñede©ÑÚåvs[Š îÁàÁQZÑ%;»¢ö$"EHˆƒµ~âe2Y VWA­®FqqTªs[]؃媪ZÇs5šj uÈÉÑÀb±¢¾ÞÔbTž··;d2)ärûHäæÏ2™d2_KìÝ)ûOD=×Ò¥“°eËoÐéŒç]xŠDÂ6ÝÎZ^^sÁÑɉaa¾øì³‡;™Z]å-ÜÜF¢¸¸ì …BŽnP¢ÿ(•rDE°ï%õJ¥¥Õ˜3ç=äç—·öVwÛ·Å¢E£;­.•ªò‚A1`¿ÆÐj ¸å–7ðÜsÓqï½WÑ¥0,¦^G"!22‘‘6¬o«Ï©­mDqqJJª ÑèQRR…²2=JJª¡Õê¡RU¡¢Â‹Åƒ¡Còòtpq ±Ñ“éÏ@Y,"(Èr¹d2_„†ú4}–B&óEHˆý³«+ÿ$‰¨užž®Xµj:/þô¼ÇÌf3¢¢.¹Ž²2=Z»n‹EðÄ_,F@€W{”Km`µÚŸ_ŽŒŒb¤¥ýët5€èè@(•r¤¤\…Â>]HˆÔÉUu ……: þïK>Ïjµá“OtjXüÝwé‰0›/|¯P„…ùc„¤N«‹ˆˆ¨-˜LµÂÃÃññ¡ˆ½às¬VÊÊ Ðhª¡Ñè¡VÛƒdµºeez¨T•Ðhô¨¨0Âl¶6õT®†««"‘V«æ}Õ¤Rw„„HéÈd> õAHˆärû(e9D½×´i×`ãÆçMvgµ¢M#‹µZÃyß‹…ðövÃ_,LæÛ®õÒŸL& ²³ÕM#…í£…³²J`46@,"66ÉÉá˜0!ÑÑJB*uwvÙDD]VD„?Ö®½O<ñŒÆ† Ž,¶Ùl8{¶ ¿ývö‚EÚÛ×_ÿ‹¥õ X,B(âé§oÁÂ…£ òÎ""êZس˜¨ƒÙo3ÓC­®BYY ÔjûhåÒÒj”–VA¥ª†FS£±Ñ±ŒPˆÅb…BX,æcˆÅ"y!4ÔááþÉ| —û!0С¡> òFHˆÞÞ¼œ¨'ÊÎVcÒ¤—Ï»ÍÎ~þ’ábbâJTW×9¾ …pwwÁW_=‚ÄDY‡ÔÛ ŽQÂÍÏ:U “Éww$&Ê#…““Ñ ã%DDW¨¾Þ„õë÷àÍ7wÃl¶¶ÚnI"áæ›`íÚ;;¼žŠ #ú÷ºÅ€fB¡FáwRØáµ]NpGÔUÔ×›PZÚ_„‡û#8Xꚃ‚죖==]±ËDôz}† û7ôú:Øl6(•áøá‡å]¦¢Â¥ò)ö¿{±XˆÔÔ0rd\g”Ü#ê™Yâ˜t.=½¥¥Õ€ÐPÇHa…B…" ‘‘—î#MDDí+#C…§žúGŽä€c’9±Xˆ§žº÷ß?¦C·çïcÏžS޶ýûGàÝwç£oßK·Œ"""r2†ÅD=™^_­Ö€òrC‹€¹¤¤%%ÕŽ Ù`¨kqK»@ €@ €Ífk1‹³D"†¯¯;þlƒfŸ¬¯ù{AA^ð÷÷‚D"rÆ.õ›7ÿŠÇß› ˜>}ÞygþEŸú´£GÛG‹DBlذ“'+;£ÔnÇb±âôi-22Š›ZI” -­z}„Bcâ9¥2ýûÛÃaö“'"êZ¾ý6Ï<³ju5¬V+ 22¿üò$‚ŽÙk46 )éI˜LÇhâ'ž¸<0–£‰‰ˆ¨»8ÊyD=˜Tê©Ô±±Á—|nyy tºš¦‘É”—× ´´*UeSåjTUÕ¢¼¼eedg« édÛ†¿¾íäîî©Ô ¾¾M#”}!—û ,ÌÁÁÞðB@€‚ƒ¥ðòâˆe¢ËuÇÃðñÇ™©jSßÃòò?'·{óÍy Š›44˜‘­vŒÎÌT!+KººFH$"ôë ¥2S¦(Ïñ. "¢®ïÆ“1qb6lØW^ùµµ ((ÐáС31"¶C¶ùã'a2Ù[D%%ÉñÎ;óÛtNDDÔ•pd1]‹Å ÎέÖÎ2k4zV@«­†NgDUU- †:46þu’{¸|.‘HOOøúzÂÏÏ^ ósLààÕÔ_Ù“£–©ËÚ¼y3RRR:u›‰ s ×ïÑøûEŸëîÞ¾¾7¶é¹íérN3vïÎÄøñ‰ÖÓW¯¯k1ñ\zz1NŸÖÀl¶ÂÓÓ‰‰aèß?J¥ … 2¾Þu ””lÞ¼¹Ã·#ºÃÛ{8<< ±±:ݶÙN`àHBa0@MÍ1üõœ·£¥¦¦bÞ¼yºM""êq8²˜ˆ.H$Dp°7‚ƒ½‘˜xéç74˜QQQã‘\Qa„V«‡JU‰’ûD~••öpY­®Ba¡î’ëts“ÀËË >>î ôBp°d2)ÂÃýîçµà vØk¢¶Û¶­c.@/dË–3>| ¢£½/ú¼ƒKQ_oÁ„ +;¥®Í›7cçÎmzn~~9–,Iűcùøé§Ç‘˜(»êík4zÇHáæÃö×—|Êh»IDAT€/(rŒŸˆeË&A© Gtt o&"r‰D‚ÔÔÔNÙVii-¾þÚóæMƒ§gû^ [,6¬[w·ßÞ¡¡#ÚuÝm1{öìNß&õL ‹‰¨C¹ºŠ!“ùB&ómÓóëê›eû¨åŠ #Tª*•;ú/WTÔ¢ººùùµ8sF{Ñõ …¸ºŠáééoo7ÇÈ埦¾Ë~É|àïïOøû{ÂÅ…/tåfÍšÕ©Û?¾b±ð’oŒŒYÕæ¿Ãö`2™. xóÍÝx⦅ý#ÓÒŠ.+,¶Ùl((Ð!#C…´´"G8¬ÕÚÛn„‡û!99³f R)Grrx§þˆˆèâfÍšÕ©ÇÎ%K“ÉÒîwŽ44˜1sæLˆÅsw Qga"BD]Š»» ärÈå~mz~mm#ÊËí=–++kQV¦o곬Gii•£%FMM=JK«PPP«õâ·ŠÅBxx¸ÂÓÓR©üý=èå½ÃÃý"…¿¿½ •º·Ç®]‘¶N¬ÖÕÒ;ã™gv¢²Òè˜1^"!=½sæ mu“É‚Ü\£•DZZNž,ÁP‘Hˆ¾}ƒ TÊñàƒã¡T†A© ‡¯/ï. "¢–:¢Å«+/­‰ˆ¨gàˆº5DF 22 ÍËèõuM£–kQQQ•ª *U%´Újh4¶Å¨©©Gee rrJÏ›Àï\B¡.."xx¸ÂËË>>ðD@€7‚‚¼!“ù@&ó…\î??øû{A*uk‡½'ê~²²ÔX±â39r€ EOc“É‚£GóØï2°÷.iú\Œ¬,5Ípu#!A¥2Ó¦ Brr8epwwqÒ^õ ‹‰¨×‘JÝ!•º£OŸ¶/SYiDE…••Fh4z¨TU()©BiiÊÊjPYi„ÁPêê:”–êa2™/0 H$B¸¹¹ÀÝ]oo{Mþþ ôFHˆ7d2?„…ÙCføúzrÔ u[z}Ö¬ù›6€@ lúû8ÿ$+KÑ£_@^^9,+¼½ÝœŽ¡CûbáÂQHN–#..”·ùu¦DDmàçç ??ÏËZF¯¯GU•••µ(-­†JU µºZ­:½m†^_ ƒ¡M5 Ëa2Y[Œ´ü+û(f1ÜÜ$ðôt…··|}Ý-1š{1Ëå~ˆˆðƒ|}=8q9Õjöm‡ñì³_¢¶¶‹ €å‚Ï7™,6,?~”J9¢¢ýŒ‰ˆˆˆˆˆ¨c1,&"ê R©¤R7DF`À€ˆ6/×2——P\l˜Õêj”—ë¡Ó›Bæ:ÔÔ4 ººgÎha6[.:’Y$@"‘ÀÕUwwx{»ÂÛÛ¾¾ŽžÌÁÁ> •"<Üaa~ðõõ€‡Gï¼­?'Gƒ3ÞÆ’%“ðÀcœ]N·%‘„âÆ_Eff l6ÛEÿ6 ¸öÚhL: ã $"""""¢u1ç†ÌƒE·y9½¾5Ðhô()iÅl@yysæ: öY«5 ¨¨æKNø'‘!‘ØG37÷e–JÝàë뀯¦¶ö Y.÷uÍ1yLgÉÎ.AE…«VíÄK/ý ŽÂOÜÜn­NŸ>àî»ïn—õëË/¿„L&ÃС­O×L¥RáÓO?ÅÔ©S¡T*[ù丹¹áÑGÅŠ+ Óé0gÎÜtÓMxå•W`2™°fÍœ®½öZÀž={°téRdgg£OŸ>X³f n»í6Ç6.\ˆgžy¥¥¥˜5k6lØ‘H„§žz ëׯ‡^¯Çˆ#ðé§Ÿ"<<sæÌV«Åœ9sðá‡bÔ¨Q­î[Gw‰ˆˆ.Ãb""r*{ûŒPôëzEË76š¡RU£´´}dsY™:]MÓd€õŽ^͵µÐëëÐÐ`†ÙlÅbƒ­­Ít[qäH>Æ ññ!7Îç²–=zô(F…ÒÒR?~S§NE\\FމŸþ#FŒ€J¥Âºuëpï½÷âÅ_„V«Å+¯¼‚§Ÿ~wÜqþøãÜ}÷ÝØ¼y3nºé&¬[·>ú(&L˜£Ñˆn¸O>ù$þ÷¿ÿáàÁƒ˜>}:¢££ñÆo`ïÞ½xûí·1vìØVë³X,8rärssQTT„ÁƒcÁ‚7nÜÿ¼.ÅÓÓ … …¼Ã¶ADDÝ[{?‹‹‹1cÆ lÚ´ 7Üp^{í5Ìœ9yyyÐjµ¸õÖ[ñÖ[oaîܹøî»ï0oÞ<?~>>>Ø¿?bbb•••J…Aƒ!%%V«ü1:„ÌŸ?«W¯Æ{gõë×cÿþýX¿~=†Þê~9ã¸KDDÔ†ÅDDÔ­¹¸ˆÑ§Oúô ¸âu””TB¥ª‚V«‡F£Ç /üFcC›—ÏÉÑ 'GƒÐÐ%عó¦M»æ’ËøúúâÅ_„D"ÁÈ‘#±xñblÞ¼#GŽ„ÕjÅ?ÿùOLœ8b±Ë—/w|ýꫯ6oÞŒ3f`ÆŒ€eË–á£>ìÚµ 2™ ?ü0`üøñ¸ûî»±}ûvŒ1B¡>>>pu½ðèÝÿûßpqqALL  ª««Ûü3!""êíqüܺu+ÆŽëèÛÿøãC,£®®;wîÄ5×\ãè‹|Ûm·á¦›nÂÖ­[qÿý÷£±±Ï>û,\\\ЧOôïßÕÕÕH$€††x{{cóæÍ0™LŽš…B!|}}Ïk »DDÔðž""êõÂÂü0dHÜ|óÜsϨ®] ~ü15—|fLLL‹ F¥R µZíøÚÓÓ€½§´««+Äb±ãëf*• …¢Åz“’’ùùùÈÎÎFtt´ãcË–-¨ªªjÓžˆD"9¾>w»DDDÎÒÇÏüü|ÄÇÇ;¾–H$øç?ÿ ·x úõ뇢¢"Ç×2ÙŸí§š×;uêTÌœ9#FŒ@TT–.]ŠÊÊÊ6ï»DDÔU0,&""ú‹†Ë%Ÿ# Ñ·o0RR®Ã_<ŒW^‚ÒÒµxç;áïïuÉåËËË[|­ÕjáïïYuúùùA«Õ¶º^©TŠQ£F!??¿ÅÇ{ï½wYÛ ""êJÚãøéíí}Þ›§_|ñª««!•JÏÛ†N§ƒÏÅÛMÙl6¼úê«Ðétؾ};êëëqûí·_V]DDD]Ãb""¢sX­VØlç,vq!11 ‹Á?>Ž¢¢WqàÀ ¼üòl {ÙÛÉÏÏÇ®]»ƒëׯ¿àDs2aÂlÙ²Å1¢*-- ûöíLœ8û÷ïGVV ¶¶ƒÆŽ;Z]×Î;‘‘‘qÙûADDÔ™Úãø9iÒ$|õÕWŽ7\ûí7ÌŸ?"‘“&MÂîÝ»qöìY€F£ÁçŸމ'^tkÖ¬Áرc!‹1tèP,X°%%%|>»DDÔU1,&"":ÇéÓe¡P€#ñ裓ñÛoO!?ÿüôÓ?ðÿ7 II²K¬åÒ†ŽÇ{ cÆŒA||<¢¢¢pÿý÷_Ö:n»í6Lš4 III7nn¹åÇÅl\\ž{î9 >'ND||<”J%æÌ™Ó꺖-[†;w^õ~u¤ö8~Ž7óæÍƒB¡Àĉ1yòd¼üòËðòòÂÀ±|ùr <“'O†B¡ÀÌ™31eÊ”‹®ó®»îBQQú÷ï‰'böìÙxî¹çcñâÅ8vìw‰ˆ¨ëØ®fx""¢¦¦¦õõf^º•Ĺ6oÞŒ””\Îaµ¾¾‡‚ t¹¥:¤§§C£Ñ`èСJ¥-S©TÈÌÌ„\.?¯¿qGº’Ÿõ.)))€ÔÔÔËZ®½ŽŸ¹¹¹ÈËËCbb""""Z<–ŸŸœœDGGŸ×ÃøBpøðaÔ××cÀ€vÈÙ¥Q÷r”=‹‰ˆˆˆˆˆˆˆˆˆˆÜÃb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb""""""""""Ãb"""""¢ÿßÞý…XYçqÿ8眱\ÿŒnŽhµ„¥Û4«³Íd™"jåÂòÏ‚„ty'T¢ âEL]Äý¹ º0D(‰ ‚a@iœ%\¥Bšº˜™ 1lÆLÏ^HÃʦYkótìõ‚¹8Ïï~ßç¹xÏ™ç b1‹ˆX @Äb"±€ˆÅD, b1‹ˆX @’1ÕjµZôÀ/·fÍ?ÓÕuü²Þ{øð?2mÚ¤ßx"jX·o@Z»¶õ²Þ÷—¿üY(àg‰ÅP£xàï)•Æ\ò=¥R]6o¾w”& –‰ÅP£¦LùS.œ•ººKÿ:_µªe”& –‰ÅPÃÖ¯Ÿ—‹=~ TªË’%·¦¡aÜ(O@-‹ †­\9'•Jé'תÕjÚÛÛFy"j•X 5lüø±Y¾¼9åòÿãJ¥”åËÿVÀTÔ"±jÜÚµm9{öìÇÊåRV®œ“qãê š €Z#@»÷Þ¦\{íØ Žýðù´·ßQÐDÔ"±j\}}9>xû÷.?~l/þkSPkÄb¸ ¬[ך3gÎߊ¢R)eõêÛ/úà;ø)b1\î¾ûæLž<.IræÌÙ¬[×VðDÔ±®¥RÝÈ=ЧN»îšYðDÔšrÑÀÕäÈ‘#…íÝÒ29IróÍ“sôè¿ ›ã†nȤI“ Û€_Ç7‹à êïïO!{ßzëÔ̘11›6µ²rþü‡‡‡ Û€_Ï7‹à kjjÊ´iÓ Ù{ëÖ²fÍ…ì$û÷ï/loþ?¾Y W‘ï[ ¿”X €X €X @Äb"±¸ˆÇ{,'Nœ(z F‰X ü¤÷Þ{/ƒƒƒEÀ(‹ @|ðAš››S__ŸÖÖÖtww¬½ñƹå–[R.—3}úôtttŒ¬mß¾=S§NÍØ±c³téÒôöö^ÖÚ'Ÿ|’… æšk®ÉìÙ³³k×®$I___V¬X‘×_= ™3gNúúú²aÆtvvŽÂ• hb1¤··7ëÖ­ËÎ;388˜ööö¬_¿>Õj5ß~ûm}ôÑ<ûì³9uêTvïÞ§Ÿ~:ýýýyÿý÷óÚk¯åàÁƒÈĉ³sçÎ$¹äÚ©S§²bÅŠlܸ1ƒƒƒyùå—óøãçÀùþûïÓÙÙ™½{÷æÝwß͇~˜ë®».¯¼òJæÏŸ_äe`””‹þ¨vïÞ%K–dÍš5I’'Ÿ|2år9CCC©¯¯ÏÒÚÚš$™9sf*•J3<<œ$9}út&L˜]»våÌ™3IrɵwÞy'Ó§OÏO<‘$¹çž{òÈ#dÏž=Ù²eK†††ò /dÆŒI’ººº444¤R©ŒÞE 0b1¤§§'³gÏy]©TòÔSO¼þøã³uëÖ|þùç™2eJÎ;—$YµjUöíÛ— ¤¡¡!Ë–-˶mÛÒÐÐpɵžžž;v,7ÝtÓÈCCC¹ÿþû“œÃ?†bþx܆ 2a„|óÍ7{óÍ7388˜½{÷fÛ¶mÙ¾}{>ýôÓ:t(ãÆK’T«Õ<÷Üsùú믳gÏž §½½ýg×&Nœ˜E‹¥§§ç‚Ÿ—^z)I2f̘Q<{~oÄb(ȲeËòöÛo§¯¯/IòÑG塇J©TJooon»í¶,Z´(¥R)ÌÉ“'“$Ï<óL–,Y’r¹œ;ï¼3›6mÊW_}õ³k÷Ýw_:;;sôèÑ$Éwß}—¶¶¶¼õÖ[œ=¿7nCYºti6nÜ˜æææ´´´äСCéèèÈøñã³zõêìØ±#‹/N}}}*•JfΜ™-[¶äÅ_Ì«¯¾š¹s禱±1ÝÝÝéèèH’<üðÃ]›5kVvìØ‘ùóçgÞ¼y9vìX,X 6ŒåÿÖØØ˜Í›7çùçŸO[[Û¨^FߘjµZ-z¸Zìß¿?MMM™6mÚeæ³Ï>ˉ'ÒÔÔ”o¼qäøÉ“'ÓÕÕ•ÆÆÆÌ;7_|ñEŽ?žÅ‹çôéÓéêêÊððpZZZÒØØ8ò¹K­%É—_~™#GŽäúë¯OssóEçêïïÏáÇ3oÞ¼Lž<ù7;~ºÅb¸‚þè±ô~þ5¬Û=‹ð€;Äb"±€ˆÅD, b1‹HR.z¸Úô÷÷§®Îßc¨-b1\a(z øEÆT«ÕjÑCP¨nÿ# €Ü ó¸ûWÑCP¨}ÿòýK3Ÿ©YùIEND®B`‚bm3.7.0/doc/html/a00023.html0000644000175000017500000000775111365042651013431 0ustar tlktlk BitMagic: bm::bit_COUNT_XOR< W > Struct Template Reference

bm::bit_COUNT_XOR< W > Struct Template Reference

Bit COUNT XOR functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_XOR< W >

Bit COUNT XOR functor.

Definition at line 5120 of file bmfunc.h.


Member Function Documentation

template<typename W>
W bm::bit_COUNT_XOR< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5122 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00157.png0000644000175000017500000020144611365042640013254 0ustar tlktlk‰PNG  IHDR3«Ý:Ü2bKGDÿÿÿ ½§“ IDATxœìÝw|Óõú>þ+]éLgº÷^Ì2ʨLq BõèGýº@=ç œãú(vî܉þóŸøì³Ï V«ÑÑÑS§N¡¡¡›6mÂý÷ß·Þz NNNغu+ñå—_Ð/%Ù¾};ÌḬ̀e˼üòËøïÿ‹#GŽô¨¥¥¥Ï=÷fΜ‰_~ùÏ<ó V¯^¬¬,ÄÇÇãÛo¿ÛÚÚŠãÇ#22ò’ç¤R©°jÕ*<øàƒøùçŸqÓM7áŸÿü't:ÝUkémDDDD4t0Ì "2Ammm€öövØÚÚâÅ_Ä_ÿúW€¥¥%>úè#Lž<–––ðòò‚……:III‰Dˆ‹‹ƒ¹¹9-Z$ÜnjjÎ#‹ñðÃC,#66óçÏÇ®]»zÔ’žžÜyç°´´Ä¨Q£0gÎìÛ·¯ÇãN:…‡~þþþ¸å–[.yN{÷îÅÈ‘#1yòdˆÅb,Y²óæÍžëÕjéMDDDD4tp™ ‘ š0aNž<‰Ç{ ööö3f î¾ûnØÛÛÃÒÒyyyøì³Ï “É ‘H Óézü¼µµ5@$ÁÒÒæææÂí y{{÷Ô„S§NõxŒB¡@ii)–,Y"Ü×ÚÚŠøøxúN‘Õ«WãÌ™3xðÁqóÍ7_ö9) øúú ·-,,””Ô«ZzS'  3ˆˆLN§Ã²e˰lÙ2`óæÍÂr’´´4¬]»/½ôbccaff†Ûn»íºÎSWW×ã¶Z­†Mûlmm1|øp¼õÖ[Â}­­­‰Dèììæ^|óÍ7‹ÅW<—­­-jkk{Ü—ššŠÑ£Gÿi-½©“ˆˆˆˆ†.3!"2Aß}÷žzê)˜››#22³gÏFUUý쉀€ >fffÈÊÊê±täZ¨T*Èxøá‡‘ššŠÃ‡£¦¦‹/Fmm-  4 -- ÅÅÅÂq:µZ ÈÉÉÁk¯½33³?­¥7uÑÐÁÎ ""4{öllß¾<𜜜——‡Gy0iÒ$|óÍ7xòÉ'aii xyyáã?Æòå˯é<øâ‹/°qãFÈd2øúúâ®»îêÑ áëë‹xË–-Cdd$JKK‹éӧ㫯¾Bee%’““{÷Î;ïÄ“O>‰?ü·Þz+‚‚‚0jÔ(̘1÷ÝwBBB››‹GyDè°¸R-'Nœ¸â÷ˆˆˆˆhhé.^hMDD·téR(•J¼ð ½þ™ööväää ­­ ¡¡¡prr¾×ÔÔ„œœ8;;#88•••Ëå1bD¯ŸžžŽ¯¿þ}ô²³³aee…ˆˆˆKæjt«ªªBII ÜÜÜØëó\¬¼¼ …þþþpwwÿÓZ®µÎËyõÕWáááõë×_wÝDDDDd2޳3ƒˆÈDYZZbøðá—ýž­­meîîîB0p­,,,®xž ¹¹¹ÁÍÍíºÎq!__߃@{[Koë$"""¢Á33ˆˆ†(;;;øøø» W¯Å”ê$""""ÓÀÎ "¢!jøðá&ÓépµZL©N""""2 ìÌ """"""¢…a ( 3ˆˆˆˆˆˆˆh@a˜ADDDDDDD à """""""PfÑ€Â0ƒˆˆˆˆˆˆˆ c@D4TüöÛoøí·ßŒ]ÆeÙÚGKËYhµ×õóffv°¶ASS†+3œäädc—@DDDD"Òét:cAD4Ø9r¥¥¥Æ.㲊‹5xÿýLüõ¯‘ˆ‰q¾®cdeÕâóÏsñ䓱 r0p…†áïïñãÇ» """"ºqÇf a:·ßþ>lmÅØ¸ñÑ:Ö¢EŸ ©©Û·? ‘Hd  ‰ˆˆˆˆ.qœ33ˆˆ†°Ÿ~:Ó§K±jÕ7|¬U«îÀéÓ¥øé§Ó¨ŒˆˆˆˆèÊf Q­­xýõŸ‘˜8±±>7|¼ØX$&ŽÅë¯ÿŒÖÖTHDDDDty 3ˆˆ†¨µk ªªÏ??×`Ç|þù¹¨ªjÀÚµ vL""""¢‹1Ì "‚ª«ðÁ{°lÙ4xz:츞žŽX¶l>ø`ª« v\""""¢ 1Ì "‚V¯Þ+<úètƒû‘G¦ÁÆÆ «Wï2ø±‰ˆˆˆˆ†DDCNAß~{Ï??¶¶V?¾Ï??ß~{……•?>à "¢!æÕW·#,Ì‹ë³s$&ŽEX˜'^yå§>; ] 3ˆˆ†´´|ìÙ“…ýkÌÌD}vss3üë_ó°gOÒÒ úì{ËŸ¦L$áÙgoÁo,„™™èŠÏ¥©© E]?WGDDDD¦†a‘ Ëɹ|'‚™™,-Íñå—ÿ‡{î™ØÏUõ{/¿ü?XZšÃÌìòÿD]é5!"""¢¡ƒa‘ ËÍ•ÃÒ²çÖ«æ°³cóæÇ1kV¬‘*ë;³fÅbóæÇag' XZš#7—aÑPÇ0ƒˆÈ„åç+ ÕžßÕÃÂÂîîرãiÄű²¾€;ž†»»C@C«Õ è][ˆˆˆˆÈ0f™°ŒŒraw s„…¹ã×_ŸAp°ÔÈ•õ½à`)~ýõ„…¹ Fg§–;šà ""S¥Õêpöl%ÀÜÜ &„à§Ÿž„»»ƒ‘+ë?îîøé§'1aBÌÍõÿd=[Ù£[…ˆˆˆˆ††DD&ª´´mm€ùóGcݺ‡`g'6rUýÏÎNŒuëÂüù£mm(-­6rUDDDDdLÆ.€ˆ¨¿(•Jää仌^;|X˜3'óç{ãàÁÔ~9ïÔ©Sûä¸)))Xºté C"™;»QˆŠšˆ––Uv}’““±~ýz£Ö@DDD4T1Ì ¢!'&&ÆØ%ôÊáÃuX¹r-Ý/çS*•¨ªªêóólܸñ†~>-MææGqó;ªèÚÝh(CDDDD7†a 9RéÀžùÀÓ!•öß| ­VÛ/aFbbâ þ< Riúõµ¹Ø¶mÛŒvn""""âÌ ""“eÌ7릎¯ ÑÐÆ0ƒˆˆˆˆˆˆˆ†DDDDDDD4 0Ì """"""¢…a ( 3ˆˆ® ¶¶o½õ–±Ë² ñõ×_ü¸xýõ× ~\""""ê? 3ˆˆ® ®®k×®½áã<øàƒ(..6@ECKnn.Ö¬Ycðãj4¬ZµÊàÇ%"""¢þÃ0ƒˆè ‘——wÃÇÙ¹s'êêê P 3ˆˆ®H©TâöÛonïÛ·#FŒ€X,Fdd$~üñGá{/¼ð¤R)Äb1¦M›†òòrÀâÅ‹QYY‰Å‹#55•••˜={6¾ùæ899!;;gΜÁ¤I“`mmððp¤¤¤Çýî»ï xyyáí·ßTWWcæÌ™X½z5¼½½!•Jñå—_bÅŠJ¥ðòòÂ÷ßßO¯TßÑjµxâ‰' ‘HàîîŽÿûß óü¿øâ ÀÎÎ÷ß?´Zm<%""""2†DDWÐÜÜŒ½{÷ÐwÜqž~úiÔ××ãÍ7ßDrr2òòò°k×.|õÕWHOOGUU$ ^{í5À§Ÿ~ 777|ú駈G[[RSS±mÛ6ìØ±^^^˜={6’““QWW‡5kÖàÑGÅ¡C‡ Ñhpÿý÷ãwÞAcc#6lØ€¿ýíoP©ThooÇÞ½{¡V«!“ÉðòË/ã€T*Eee%žyæ¼øâ‹Æ|ù âøñã°´´„B¡À–-[ðæ›oâ‡~¸áçßÙÙ‰cÇŽ¡  غu+öïßßÏŒˆˆˆˆnà "¢^ضmF…ûî»b±óæÍÃܹs±aô´´Z[[áàà€””¡ƒÀÉÉ fffprr‚¥¥%}Hòá‡b„ ؽ{7¼¼¼ðØcA,cúôé¸ï¾û°iÓ&XYYáСC¸óÎ;!‹ KKKaÉŠV«ÅóÏ?‘H„™3gÂÂÂË—/nk4ã¼Xäää„7Þx¶¶¶˜ù$jkk¯x,333x{{JJJ››‹ÀÀ@áòý÷ßC­VC,ãĉ˜={6BBB0þüK–BØÙÙD"Äb1,,,„ÛƒAHHˆ@ll,är¹pûzŸ¿¹¹9¤R©p{°¼^DDDDCà "¢^H$¨ªªêq_uu5¡Óéðî»ï¢ºº›6mBKK ,XpÅc]øÆY"‘ !!%%%=.Ÿ|ò ¶mÛ†•+Wâ…^@~~>Ž;[[Û>{ަèâ×¼²²...Fª†ˆˆˆˆLà "¢^¸ùæ›±gÏÐÏÐØ¼y3fΜ‰7ß|S§N………Ƈ{ï½½:îÌ™3‘ššŠœœ@SSâââ°uëV”——#:: 077Gzz:êëëûì9𢒒üüóÏô[ª~ú駘;wî5gÛ¶mÈÌÌ4tyDDDDd$ 3ˆˆzaäÈ‘X¾|9âââ0kÖ,ÄÄÄ`áÂ…˜3gþò—¿ ¬¬ ÇÇÌ™3±hÑ"¼òÊ+ÂϺ»»ãñÇlj'.9nXX^yåÄÇÇcæÌ™Gll,/^Œyóæ!''S¦LÁÍ7ߌW^yÁÁÁX¾|y>u£ŠÇ3Ï<ƒ)S¦ <<x衇®ù8O=õ¶mÛfÐÚòòðæ›¿â«¯R±kW&Nœ(\®F{{§AÏCDDDD—ét:±‹ "êJ¥999˜:uj¯¯ÕjQ[[ WWWá¾’’äçç#00°Ç ÖÖV=z---1bÜÝÝ…ï©T*œ:u cÇŽ…³³óeÏ%“É••ÄÄÄ÷×××ãèÑ£pwwÇðáÃQVV†¢¢"L™2åŸýŸ»Ö×çZ¥¤¤`éÒ¥¸ÖvZZZžžGGGŒ=ºOj»VÉÉwãäI'xxø¢¦¦ÕÕ =¾/•:@*u€··ÜÜô×R©¼¼áî.——#\]`aÁψˆˆˆ®Ãq cW@DdªÌÌÌz„!‹ÅHHH¸ìq¤R)fÍšuÕsùøøÀÇÇç’û% fΜ)Üöó󃟟_/ª<¬­­1mÚ4c—уV h4–¨¯WÂÅÅ'†ÀÇÇnnpp°†……4šV(uÉjqêÔ9(õ¨«kŽaf&‚Têww <=áá!‡G÷µþ>ww ¤R˜™q@)Ñ…f]#ss&N¬ÆO¼€¼<òòÈÍ•c×®LÔ×ë·êõðpDD„'¢¢¼0oÞ(DFzÁßß­P*ë PÔ¡²R…¢Je=JJªpäHär5Z…sYX˜ÁÍÍA7º»;||œáé©=¼½ao/6ÖËADDDÔïf]™ÌZ­÷Ü3b±Å÷×"?_‰œœ (qäHÖ­KGSSÀÏÏáሌôFD„'ÆFX˜¬­ÏoAÛÜܹ¼••õBèQQQ‹ªªäå)pà@>är5ZZÚ…Ÿ±·ÃËË žžŽðòÒx{;ÁËË ú."""¢Á€aÑ5êè0Ce¥IIk`cc…‰C0}z¦M‹B` ||œ1mZ¤ðx­V‡²²äåÉ….Ž}ûrñùçûÑÖÖss3øù¹ *Ê ááúnް0OÄÅÂÒÒüŠuÔÖ6B¡¨GE…Jeär5**ê TÖ!#£ry]¥-VVðôtìêæp‚§§ÞÞÎ]÷é¿–J®zN""""SÀ0ƒˆˆèYXh1~| Þxã?HMÍÇÞ½¹xóÍ_±råºaÚ´(LŸ…‰C`cc33\àŠY³b…ãtthqî\rsåÈÍU ?__ÍÀGý†Ž-,-Í$ED„§p‰ŒôB@€,,Ìàìlgg;DEy]±Öææ6TT¨¡PÔC.WC.×-“Õ"=ý,Š:¨ThµúÁ¬Ý³<º»9ôËY. @ô×v’õ7†DDD×ÉÏÏÉÉñHNŽGG‡ÇcïÞ\ìÝ›ƒ¯¿Nƒ••9âãC„p#4Ô½ÇÏ[X˜!$Ä!!î¸õÖÂýíí(,T ËUòó•øá‡ã(-­†V«ƒ••ÂÂ<º–«xu^ð÷wHÔsX¨•pŽ+ioï„J¥_Ê"—ëçyè:dfʰgOŠºÛÎ:9ÙÂÓÓ>>Nððp„——¼¼áá¡¿ÏÛÛ ‰^i"""¢ž¸5+ }½õè@×—¯Ïþý¹X±â[dfnFss®Áßß–.] ™Ìß~ûüü\.û˜ÊJ öîÍÁÞ½¹8p juüü\0mZ$¦M‹Âĉ¡pp°¾¦ó¶´´#?_! ÍË“#?_‰²²€­­ÂÃõÝËUÂÃ=áíítÃϹû9u/•ÉÎ/m¹0il6EMM#¦M‹ÄÝwOÀŒ½ëÖèVUÕ€òšš}ûò TÖÁÉÉ úå( áWBjZ””T!'§¹¹rääÈ‘›+vVé:åÝpx!2ÒnnWÿét:TVj„pC.×Ý_Ëdúå,ÝÄb‹® ãüR__ýµŸŸ ¼½ÙÝADDdBfÑ¥”Êz|ÿýìØ‘œy-9l0wîp¬Zuœ¯m¶ÂÉ“çðÔS)¨¬¬ÇË/ß…E‹ÆÞPŸ¾«WïFfæ+}Ò© TÖá¾Baa%>ùä^L›yÍÇhoïÄ®]ç»5<<$Xº4IIñ×µËHn®äãÀ<¤§ŸEss‚ƒ¥˜2%7ÝŽI“Â`oo¸%)WÒÔÔ&tqäæÊ‘›«@nnªªôá”››="#½¥<åðpOØÚZõym½ÕÖÖÑÕÑ¡îPªRÚ½œ¥´´--úÌÜÜ žžŽðóÓ‡¾¾Î]× ;ˆˆˆŒ€auuMغõ$~þ9™™eÂìý.:ØØXaÁ‚1¸ï¾ÉˆŠòºæã··wâÝwwâãÇĉaX½z‰A¶ ½ûîÏ`kk…Ï>»ï†u%­­xö٠غõ$þñÛðè£Ó®ûX%%UX¿þ06l8‚ÚÚ&LŸ…»ïž€éÓ£®+ŒimíÀ±cżìì ˜™‰0jT‘ŽÑ£úõM¶J¥:8òòÈΖ!?_‰ææ6˜™‰àïïŠèh}Gd¤¢£½èÖ'a”!¨T”•Õ@&«EYY ÊËkPVVƒ²²«‡ÝÃ""¢>Á0ƒˆh(ª«kÂæÍ'±sç8s¦uuMô³ììÄhmí@G‡7ß%KÆcúô¨ë~#–]'žX’’*¼øâ¸÷Þ‰Ùj³­­‘‘ÿÀ+¯ÌÇÒ¥nøxfÍš}xíµí˜?4Þ~{ñ ÃloïÄŽg°n]:,€——#’’⑜<^^×òTW7 -­ä#--ee5°³cüø`Lž¬ß)%*ʫ߷:Õju(-­FvvEWÈ¡;JJªÐÙ©…XlðpOaب~.‡'<<ûµÎëÑv”—×¢¼¼÷a‡¿¿‹°œ…aÑ5c˜AD4TTÔbÓ¦ãØ·/99 Ô×7ÌÌôo°ÜÝPSÓ€ÒÒ„†ºcñâqX¸pÌ ½™ìèÐâãÇ»ïîĨQxï½$ºê)!55‹‚cÇVdÓÞØ·/<ò BB¤øòËÿ3ț풒*¬[—ޤ[ãâc§¦æ#-­ii¨­m„««=&OCBB8&Oƒ¿¿ë ?‡ëÕÚÚ!.YQ*ëNN¶ÂÀѨ(/ÄÄø "Â66¦³TåÏœ;ν ;º·¢eØADDt †DDƒM{{'Ž+ÆO?ÆÑ£gQRrþ “¥¥9||œ1vl‚‚¤8}º{÷æÀÆÆwÜ1 ‹C\\à ×PXX‰§žJAV– Ï=7?<Õà;^¼úêvìÞ‰þnÐãþ™¢"þò—/ÐÐЊµkïÇèÑ9®¾[#£«[£ÞÞNHJ¤¤ëÖè¦Õê•%Â#GŠÐÜ܆À@7!ܘ4) ..vx67¦¶¶ÙÙräçË‘-GNŽ~w•ÆÆV˜™‰„]U¢¢ô39¢£½áççÒï'†À°ƒˆˆèº0Ì "ÈÔê&dgWàðá³8t¨ùù TW7B§ÓA$llÄ sGBB,‹ÖÖvlÙr[¶œ@MM#&LÁâÅãqÛm#`mmyÃõhµ:¬]{ÿþ÷/ˆˆðÄûï'#<ÜÓÏôR3f¼‰CñÊ+óûäøWS_ß‚ÇûiixûíÅX¸pŒA_\¬Âúõ‡…n©S#p÷Ýoh¹ÏÅÚÚ:püxIW¸‘Ó§Ë Óéí-ÌÛ?>Ødº º—ªdeÉ“£8rrä8w®:ÖˆˆðBt´¢£}í…ˆ/88X»ôraØqáìŽÞ†Ý»²0ì "¢A†aÑ@ Ñ´ ¨H…¢"²³+püxrs¨«k#‰àîî€èhoÌš‹ÛnWW{TVj°mÛIlØp99rº!1q,-kÐ奥Õxúéïpüx ž|òf<ñÄͰ°è›¡ŽJe=Fþþûß1sftŸœãÏtvjñïÿ‚?þ<2+WÞnð!–mmÂN(@*• 1q ’“ã ºdÐ4‡vÍÛ(@~¾––æ;6¨«s##FøõÙÿ¦×«¡¡yyrdgW39rr* Ñ´@$ÁÏÏ¥«‹Ã QQÞˆ‰ñF@€›Á;…Œåâ°ã|wÇ•Ãøû»" Àþþú‹‡‡ÄÈÏ„ˆˆèš0Ì "2M ÊËkpö¬ %%U8{¶%%U(,T¢ºººÞ€‰ Õê‡&FEyaÒ¤pL›‰Ñ£„îŠî7Á7ž}y°³³2è2’‹­_ŸŽ—^ú¾¾.øàƒ¥ˆõ1ø9.´iÓ1<ûìFdg¿fô­>·l9å˿DŽ ¡X³æ/Hú¦ ´´6EJÊTVÖcÒ¤P$%ÅãÖ[‡ÃÊêú‡‘^‰RY‡ÔÔ¤¦æ#55 E¬1aB(ôËRúªëÆJK«‘›+ެ,ΫFg§66VˆŒôDt´rDG{ÁÑñÚ¶.;º/çÎU£¬¬FØvÙÚÚR7\/úÚí†Þõ†DDý¡±±*•••õ(/¯EE…µÉÔ(/¯L¦†rš››ÁÙÙVVhnn‡ZÝN Æ ÁøñA?>‘‘^—tœ8Q‚ Žbûö?ÐÐЂ©S#˜8³fÅdÉÅ”Êz<ûìüþ{}t:ž}vNŸ¼±¾Øc} •Jƒ—õù¹zã?Êpß}káädƒÿþ÷Á>ªÙÙ©Åï¿ç %å0~û-ööÖHL‹¤¤ñˆŒ¼öms{« @‰´´|¤¦àСBÔ×7ÃÃCÒ5HT¿SЧ§iï>ÒÜ܆ü|%²³eÈΖ#7·YYP«õ»ùøø8#*J¿£JLŒ>èv7¹nCÑjuËÕB°qî\5ΫBii5ΫFUUƒðXÉ‚×±ë  : 3ˆˆ®U]]ÔêfÔ×7£®®uuM]_· ®® ••TUiPSÓ€ÊJ T*Ðê è?õñq†3¤Rèt@SS+ 5 +ÑÐÐ kkK 拸¸Œ„Ñ£®øFQ&«Å¦MǰeË V"*Ê ŒÁ‚q}ú&cûöÓøû߀Dbƒ÷ÞK¸qÁ}v® iµ:Œ¹ ?<=6£_ÎÙr¹÷Þû”Ê:|õÕ}Òs1¥²6Ã÷ßAIIââ±tiרØ*çÎU£´´¥¥UÂ×mm±Ønp…ŸŸË%‡©Ì]!"¢A…aõTWׄººfÔ×· ®®MM­Âñîù --íhmm‡Nwþ¾ææ6´µu@«ÕA£i¹ê9lm­®i•Á?íokë@ssÚÛ;ÑÔÔ†ŽŽN44´B«ÕB£i…N§:%ÔjýµFÓ ­öÒ_™––æpr²…Db''¸¸ØÃÕÕ¸ºÚÃÍÍîîØØXA¥ªGqqNŸ.Å” à ýý]1ztÆŒ ĨQˆõ¹êk¤Ñ´à×_3°eË „H¬!™A,6>a“Hl ‰`eeýòGGý}b±ÚÚ:a¨_/Ý-à†æà` ss3ØÙ‰aaaÖ²èŸXl±ØÖÖ–Âs´´4‡ÖÖ–Bp!‘Ø\öSÇ––vdeÉ‘Q†Ó§ËðÇe(,TB«ÕÁÍÍ#FøaÄáÚÝÝáOëmoïÄþýyؼù8víÊ„V«ÃŒQX´hœAw¹¸šòðÔSßA§Óáw–`ÆŒ¨>?çÅ>üð7|þù~œ>ý’InÅÙ=ô“Oöâ©§nÆŠsúµNµº 7CJÊaäç+í¥Kã±`Á˜~ë”P«›–V ,K).VÁÚÚãÆ#!! “'‡cØ0ß9„S¥Ò 'G¿<¥{&G~¾íí°´4–¨twpÄÆú ˜Cjnn»$ä()©BIIUY‰ ÝèÚu톀7¹™ü²%""2*†DƒEe¥yyúÖè¢"ýšçîo ­ 3¸º:@*Õw ¸¹9×..vHlà訃.‘XC"±éÓVõÁ¢¾¾™™2deɺŒr¡E]"±Áˆ~9R\ î_ßkÛAääÉsؼù¶o?…êêFŒ„ Æà¶ÛFÀÉ©67·áå—Â7ßÂí·Ào$öÛ¹/¶páGðòrÂþ³Ô(çï­””ÃøûßÀܹÃñÞ{ÉFéJ8q¢ëÖ¥ãçŸÿ@g§·Þ:K—Æcüøà~ XÊËk‘––òqð`T* œœl1iR&OÃM7…#(HÚoõZ{{' ”ÈÌ”!7·™™ÈÌ,‚XWDFz!6ÖÑÑÞˆŽöF@€«I†qý¡³S ™¬%%UBÈQ\\…sçªPRRææ6ú%yÝGP›ÐÍègƒïDDD à ¢¦¥¥gΔãÌ™räå)Ÿ¯èÚ¢SÿG³»»‚ƒÝ…í÷üü\»®]àééÈ?þnBQ'¼þú𢥥ÕWW{ÄÄø 6ÖÆùbÄ¿ëÞ>³¤¤ [¶œÀ–-'PT¤Bh¨;îº+ ŒŸŸ‹!ŸÒŸ:q¢O<‘‚ššF¼ñÆBÌ›7ª_Ï¡ÆÆVDG¯ÄêÕKúm ÇHKËÇ_ÿú_„†J±ví½êÀé õõ-øé§SX·.e qGRÒx,Z4nný;ûA§Ó!7WÑÕµ‘ôô³hll…3‘ŽI“ÂŒöZ’BQ'99ÈÌ”¡¤¤ Z­Ö–±úß¾ˆˆðì“A½BQ'ÅÅ*””è“W Ëÿ,-Íáëë"„ú%,RºÁßߥ_‘Q1Ì 2eZ(qút)NŸ.ÅÉ“ç›+GG‡®®öˆŠòBX˜'""Î_Œõiù`£Ri„°(?_¼<ýåÂOZcb¼1l˜/bc}ësÃ-Ñju¶m;…Í›ãäÉsps³ÇwŽÆ‚q}>ãrÚÛ;ñî»;ññÇ¿#!!ï¾»Äèmß{ödá¾ûÖâôé— •Œ7»gÏVâÞ{¿@[[¾ù毈Šê»Gz#+K†””ÃØ¼ù8š›Û1{v,’’â1eJ„Q–}tthqòd‰° ì©SçÐÑ¡ED„'&OÖo‡¾Ùò¶¿56¶"7Wìl23eÂÀÑÆÆV˜››!8XŠ˜}‡~¹ŠÏ v ¥¦¦ñ‚nUWàQ…’•0ÏÄÌLoo'J…9ÁÁRëÃDDƒà "S¢Óé—§èZk^€Ã‡ Q_ß[[+ æ‹Q£ü1rdF¸æ¥ tyÕÕ ÈÍU  @‰ÜÜŠ®kjkNN¶=¢ˆ/ƒ®omíÀîݙزå~ÿ=––æ˜3gîº+S¦D­“&7WŽÿ÷ÿÖ£¸X…_¼÷Þ;Ñ$ZâW®Ü‚£G‹°gÏ c—rMÔê&<ðÀ—8s¦kÖüÓ§÷ÿ¬‘‹µ´´cûöÓøî»#8|ø,||œ‘”4‹ƒñ~¿46¶"=ý,Ô‡99r˜›‹0b„Ÿ°,eìØà5LôÏhµ:””T!+Kntw}Éåj€››=¢£}z,SJÃF{«¡¡Uèà8¿„E…ââ*ÈåuÐét03ÁÇÇAAR»u]»#8Ø ¾¾.ý2{ˆˆˆ ‚a‘±UT¨±o_.ÒÒ z¬%Ÿ81“&…!>>ááž\rƒjk‘“#GAyyräç+‘›+GM>´ptÔ‡áሌôBx¸ÂýúäQ­V‡Ã‡Ï⇎ã×_ÿ@cc±`AæÌfÔ9%Z­kÖìÅ[oíÀ°a¾øÏ–^÷R™¾0yòë¸å–áX¹ò6c—rÍÚÛ;ñÜsñÃÇñÏÎÃÞdì’……•øî»ÃØ´éjk›0uj–.€3¢þ殺ºâàA}È[\¬‚Xl±cƒºÂpŒá7(ߨ«ÕMÈÌ,GVV…°L¥ @‰ööNˆÅˆˆðBt´wc(íææ6””TáìYU×u¥pÝÝÑѽt%8Ø ÁÁî=ç9°–ˆhc˜Ad 99rìÚu;wfâÌ™rØØXbüø`áSÇØØ9åߨ[/;P.7W.ü±*‘Ø <Ü‘‘ž ;\xxôýò‰Ü\96o>mÛNB&«Å°a¾X°` æÍIŸŸÿÏœ;W'ŸLÁ©Sçðì³·àÑG§™TˆVVVƒñã_ÁÆË0yr˜±Ë¹nü;^ýgÜsÏD¼úê]&õ··wbçÎ3HI9ŒÔÔ|¸ºÚcÑ¢qX²dBBÜ]@&«ÂßÔÔ(•upp°F||&OÖÿŒô2‰N¢¾pá°Ñìl²³å— í6ºwUñós´¯‡!h4-(*Ò‡EEª®K%Š‹«„×ÕÊÊç—«to1,5úò;"¢!ŠaQÐju8r¤»vÁ®]™8w®Ž˜5+sæ äI¡\ÃÛKjuÓ-ÄU=B‹ÊJ €óë¥\(EX˜‡°L¤¿ÿèT*ë°mÛ)üðÃqdeÉàããÜ5È3áážýZË•èt:|óÍ!¼úêvøû»â?ÿYŠèhoc—u‰o¿=„—^úÙÙ¯ øÿ¿ìØq?¾'†`Íš¿˜ä®A2Y-RRcãÆc¨¨Pcüø`$'Çã¶ÛF˜ÔÊ‚¥n:Tµº nnö˜81L7L©»¨¯ÈdµÈÉ‘ »*eeUàܹžÃF»ÇÄø 2ÒËè]7AMM#Š‹«„p£ûº¸X%ìfkk%Ý!GHˆAAR¸ºöï€]"¢!„aQ_*,¬ÄÆG±u«þ“øðpOÌ™‹Ù³‡aäH?~RvZ¨T¡»¢ç¥Zص¥»80ÐUغ¯ûàjÔ7»­øå— lÞ|‡ÂÎNŒÛo‰ âú}KÌ?SVVƒåË¿ÇáÃg±lÙt<óÌl“ |ð+aˆæ`pêT)þò—Ïáééˆo¿ýk¿t]ÎN-öíËÃ÷ßÁîÝ™°±±Ä‚c°xñ8£ ¦½­V‡ÌÌr!Ü8r¤MMmðõu:ß&O7‰N¨þÐØØŠœœ ääÈ/ØUEŽææ6XZš#,ÌÇû Gt´÷ ´Ú*+5]ËUTÂò•âb}gGkkýÆ)BCÝâŽà`)BC=ÄA¤DD7ˆa‘¡UU5`ûöSذá22Êàã㌅ Çà®»âæaìòŒ®¦¦2Y-är5ÊËkQQ¡¾–ÉjQYYŽ-@,¶¶ÚÓwY¸!(È nðñq6©5òZìߟ‡-[ŽcÇŽ3Ðju˜6- ŽÁÍ7ǘÜ­:ëׯË/ÿoog¼÷^FŽô7vYWÔÙ©ELÌJ<ûì-xàÓ™5q£JK«q÷ÝŸ¡¹¹Ý$v:ù3UU ظñ(¾ÿþ +1|¸–,»îŠƒDbzo‚ÛÛ;qòä¹®¡Êù8yòÚÛ;î‰I“B1yr8&N £ãÐÙª³S‹¢"²²dÈÈ(Cff…°LE$!(È ±±ú­bcbôÛL÷÷ö½N§ƒL¦BŽÂÂJœ=«¿ÈdµÐju077ƒŸŸ ‚ƒõ݃ÁÁR„„è¡¶Ý †D† Óéšš¯¿>ˆß~ˆµµ%æÎŽÄıˆ2ó/ê뛡PÔ EE…ee5¨¨¨ƒ\®†LV‹––váñnnöðöv†··||ô×Ý“ý¤úB§N•bóæãøé§S¨®nÄØ±A¸ë®8ÜqÇH“Ý&W&«Åòåpð`ydV¬˜cò;C;VŒyó>ÀGh¨iÌn0”îN²²døüóû‘nì’zåðá³Ø°á(~üñàöÛG")i¼Éu]¨©© GŽ ÃD33Ë!‰ã#,I?>66VÆ.µßÉdµÈÈ(GV–LèâÉjžžŽB÷Æðá~ˆ‰ñ†¿¿«‘+˜Z[;„`£¨H…‚%ŠŠT8{¶M @"±Fp°>Ø íîæpGp°»Éÿ®&"êG 3ˆn„FÓ‚M›ŽáË/SQ\\…I“B±dÉxÌ;ܤ֔߈ööN¨TÈåu¨®Ö@©¬Ge¥UU(u¨ªj€RY•J#´Õ€ƒƒµRxy9ÁËË~~.]á…#¼½ìe……•ضí$¶n=‰âbBCÝ1¾~†)ÿ¯Óéðý÷Gð¯ý Þ{/£G»¬^yçØ°á(Ž[eìRúD[[ž~ú;üüóxë­EX¼xœ±KêµúúlÛv))‡‘‘Q†w,Y2‹7ùOôÕê&:t~§”‚%,-͈I“†Q£†ìl‰êê!ÜÈÌ”áÌ™r« Õê ‘Ø 6Vß¹Ñtp»Ø£TÖ£°°EEú°£»££¼¼Z˜™‰ºv[9¿lE‘ÂËËÉØåõ7†D×#?_¯¾JÃ?,\8÷ß?Ùd:þ™ÆÆVTU5 ªª55 ¨©iDuuT*MW8Q•ª*•Fغ´›““-ÜÝ%Jíááá77ýµ»»<<$J%ðòrtÛÊåjlÛv [·ž@f¦ ޏóÎQ˜7o”I/Ïè&—«±bÅìߟ‡‡žŠçž›; Â¤Ûo‘‘ÞxûíEÆ.¥Ïèt:¼õÖ¼ÿþ<ýô,¬X1Çd;®$3S†ï¾;‚Í›£¹¹ 3gF#9y¦N0©][®D©¬CjjnÈdµ°³cܸ LžŽÉ“Ãã3dºí.§{Gff22Ê•%Cn®\Ø.V¿U¬o9ƒ%Ü7–¶¶¡{£¨èü²•ÂÂJÔ×7ìíÅv–­„„œ_¶Âןˆ)†D×âàÁB|ðÁ¤¥ (È ÿ÷ HLkôiõõ-¨®Ö¡DMM#T*ðuuµ>¸¨®Ö_.ì ;;1¤R¸ºÚÁÕUJ¸»K„€ÂÕÕ^^úàÂÔf?ô%µº ?ýt?þxGŽA"±ÁܹÃ1~&L8ˇ6l8Šþs+ÜÜðþûɈ‹ 4vI×D­n°a/â“OîÅm·0v9}îûïàùç7aÞ¼Qx÷Ý%²+ ¥¥¿þšuëÒqäH<=±dÉ8,Y2~~.Æ.¯×Š‹UÂ0у Q]Ýgg;L˜‚ɓÑf2[ÖS÷v±gΔãÌýR•ìì h4-°°0Ch¨G×6±úNŽaÃ|]àm,UU ]KUºçrè—®”—× £CßÍáçç‚°0„‡{"4Ô½ëÚÃ$çÜ]†DF§Óá·ßrðÁÿÃñãŘ<9?> á}ò©ikkGn‰êêFÔÔ4 ¶¶ 55úÛÝ!Emm#jjÑÞÞÙãÖJàâb;¸¸ØÁÝ]ÛÕÕ..öBxáâb? >¡ïk­Ø½; ۶ľ}¹077ÃìÙ±˜?4¦NPaŽBQ‡çžÛˆßÏÁÜ„¿ÿýÖù Ýöí§±lÙ·ÈÌ|eÈ jÜ¿?=ô5† óÅÚµ÷èç]\¬BJÊüðÃ1¨TLš†»ïž€Ù³cÔÿŸt:rräB¸‘ž^ˆ††Vxx8"Þe¥X IDAT!!LèÜðöf»? ½Š‹«º–¨èŽ3gÊQUÕð÷wELŒw×2}'Go=˜µ·w¢¤¤ ùù V"/OÂB% +…ÙUžžŽ ó@X˜BC=„ ÃÝÝÁÈÕõ à ¢+Ñjuعó Þ{o7²²*0cFž|rââz?c@«ÕõÎ —Ü_U¥ï¬hjjëq KKó®PÂ..úÎ }¡¿8;ÛÁÍÍ^.\]íä'¹ÆÔÞÞ‰}ûr±uëIìÞ‰ööNL™yóFaΜa°³»Äk¶iÓ1¬Zµ Îζxï½$Œlì’®ÛŠ—§ÀöíO»”~•“#ÇÝwk|ó̓&=¥7ÚÛ;ñûï9X¿>{÷æB"±Abâ$%Å#"b`,Ñ»PG‡§OŸÃÁƒ…HKËÇñã%hmí@p°TØvÒ¤0¸¸Ø»T“¢PÔ FÏœ)Gf¦ ¥¥ÕWW{aGwÀè6`ºà­V‡²²©„€#?_‰‚¥°õ¹ãÿÏÞy‡7U½qüÛ‘¦»¥“îBÝ 2ËÞX@† Š(Š€DA7òCQÊ(C–Œ–e´@÷.mÓ½“Ž$Í8¿?ÒF:éHš&=ŸçÉÓ479÷½÷Ü{ιßó¾ï1ÒmôäˆC†H<:lm(]è…BQi¨˜A¡´D,&8}ú!¾ÿþ2²²J1k–/Ö­›k†l”•Õ ´”# ßhÊ?ÑäA!+êÑò0à?!¢-1¢é3Iȇ¾ÂCXT±˜àÎ,„‡?À¹sqàp¸>|æÎ Àœ9~JûRRÂÁ¦Ma¸r% +VŒÅÌRú•†ÿ Ï?ÿ BB¦+Ú”^§¤„åË÷¡¬Œƒ?ÿ\©ùY:CI GŽÜűc÷›[¡C±lY æÌñSJñ„ÖÜ¿ÿXšo#.ŽBÜܬ0v¬+FvÁÈ‘NJ{|ò„ÃáJŒ6 ™™% ÅÐ×gJÃS||ìàím gg ¥ÈÁ¢l”–ÖH=9ÒÓ‹ÿ£´´ ««ggËfB‡‹‹%Lé$ …BQTÌ P ªJ’câÊ•düùçMVÃÕÕƒ™£¡AˆÒÒ”–Ö ²²¶YHƒ¡33ƒÆ=© 1`€.LMõajÚ\ 01Ñ£0ÏBxøœ>ýEEÕðô´Á¼yö‡ÍE›×#NžŒÅ–-'ad¤ƒo¿]‚‘#mRÉÈ(APЗ8sf-† ¤hsBm-o¼qwîdáÿ{S¦x*Ú$™!ܺ•#GîàÂ…0˜7/‹è’\_„ÃááÎLܼ)7ÒÒŠ¡¡¡??é2°Ã†9*U¨MoÂç ‘œ\ˆÄD‰ÀÏBrr!tuµš >>¶pq±¤ý«œ`³ë‘‘!ñàÈÎ.Czz122JÀbUB,&`04àèh&ÍÉ!ñä„­(ch#…BQ¨˜AQm„(.f£¸˜‚‚j³QTTÂÂj””H>«¨h.P¨©©ÁÔTVVÆÉ/õWï0®Üaf&É9al¬¼qìý‰ìì2œ:õáá•U GG3Ì€yóàâb©hózLAA6m CDD*^zi4>üptu•Û£‰ß~»]».")i[¿~P ÅØ´) aa÷ðÕW ±dI ¢M’9ÕÕõ »ÐлHI)‚»»–, Ä‚ÃT¢­-+«‘&½y3¹¹ÐÑѰaŽRÏ Û~}? @„´´bÄdzÏBBB>’“ Áç ¡££k©¸!8Ò¥bå'@ff)23KCV$ž99åDPWWƒ½½)Üܬàêj wwk©Gõä P(2€Šå…Ç    ÅÅœVEQ‘ä}“k$ ñ¢°°0„µµ1¬¬Œ1p !tt´pëV&bcsàîn…÷Þ›‰©SUgÖ³?S\ÌÆéÓþqq,XZbÎ?Ì€€åžñmB,&8pà&vìø––Føæ›ÅJ£-^xáWhkkaß¾—mŠÂ!„à›o.á»ï.#$dÞ}wš¢M’±±9 ½‡ððD˜9ÓK–ŒÀèÑ.*“?!/¯·og"**·ne ´´††: t’&UÆ\"½@ Bzz1òEI²Q>_mm†4ɨDä°ƒ«+8äÍ“ÉGÓÓK–V„´´bdg—A ÁÐÀ Aæ2d ôåæfGG3*æQ(”®@Å Jß…Ï"7·yy•`±*›[¼¼JäåU °°ÕÕõÒï2™š…ll`à@#XYÁÚÚ¸ñ½1,, ¤‰«8.¾ýööï¿ {{S|ðÁlLŸîE[)9ÕÕõ8>§NÅ":: úúÚ˜9Óóç`äHg•$ed” $ä(ââòðæ›±~ýT•[•¦¡Aw÷ñé§s±|ùHE›Óg8t(›7Ç’%#°cÇ•º®[RWÇÇ™3qäÈ]ÄÆæÀÑÑ ‹ Ç’%#`i©Z+_¤¥Kómܾ ‡ ssŒ킱c%ÉD•= lo!Š[,$'Ëm“©ùDˆŠ­Tà žòG !3³ÅHI)Bzºä/‹U ‘H --M¸ºJ–us³Â!áê:öö&t|F¡PÚ‚ŠÅ!‰Q\ÌFnnX,‰HÑ$X°X()áH¿kjª{{ØÙ™ÂÁÁ66`e%.šBA:!ÇÇà‹/ÎB$"ظq–. ¤³4J —ۀ˗“pêÔ\¿ž uL™â‰yó0q¢»ÊÅ£ "üôÓüðÿðð°Æ·ß>wwkE›%nÞLÇ¢Eÿý{ÃÖV¹ó™ÈšË—ñÆaܸ!Ø»÷Å~—žšZ„Ðл ‹‡ÃÅĉîXº4'º«Üƒ¨H$F||>nßÎ@TTîß .·öö¦ÍÄ ssº„fg ÅÈÈ(‘†§4ypp¹ ÐÒÒl Q±•zq¸¹Y©ÜuÕWáñHO/FZZÓ«éé’œ §Ç„‹‹ec¸Ê@¸»KÂV¬¬è2ÈJ?‡ŠùR_߀ìì2dg—µò®((¨’æªÐÑÑ‚½½ ìíM_ÍßË"û{JJ>øà8îߌ^…Í›gÁÐP§ÇåRzŸ†!"#Ó¤K©641v¬+æÎ ÀŒ>Ð×WÍÕ<ÈÅÆG‘“S÷Þ›W_§ÒBܶmgqéR"¢¢6+Ú”>Ill^xaœœ,pðàk*‘W¢344qñb"ŽÆ­[077À‚ñlY Ímž\hh"&&G–òða.D"WWKŒ㊱c]è CCºúUW‰$G“¸Ñ”d´®ŽCÖÍ’Œº»[S£©­åKÅ´´b¤¦J¼9š&» u¤nnáâ"::;ÁE¡P”*fPdCq1»1 ”$TV–ä}aa5!ÐÔT‡••q3ïŠ'E yÎ.ÕÖò±k×üñG¼½m±cÇøøØÉmù ‰qûv&ÂÃâüùxÔÔü·”êìÙ¾J;x!„à‹/ÎaÓ¦™í’9.¶o?‡C‡¢1j” vî\Õw7ŸýùùUpuˆà`ÌëAƒÌmžÌÈÉ)Ç„ _ÏBMM þù*¦L‘¬¦“]†÷ß?ŽÛ·3°lÙH|øáì~uüx 6l8Ф¤m2 3SujjxxõÕ?ÇÂï¿¿‚1c\PUU‡‰¿FII ÔÕ­[çbåÊqŠ6UÕàØ1‰·FVV)||ì°lY ‚ƒº†!UÃÆFùòµVK“‰FE¥£¸˜ ==&FŽt’zn¸»[ч¸ <~\& OIHxrÔÔðÀ`hÀÅÅ>>vðõ•¼<=mhˆŠ „ 7·ÉÉ…HI)DJJ’“ ‘›[B ´áæfÿ77k• W¥PT *fôgšbSS ‘š*Q°““ QY)qÓÓÓc6 æRÑÂÙY"\ôe—Ê£Gïá“OÂajªï¿_‚áÃ)Ú¤~‡Ã!bu=v?;» §N=À™3‘‘Q;;Ì€à`ÿf3ͪ‚XLü#ââX EPWWƒžž6.^|'OÆâ§Ÿ®ÂÙÙ_}µC‡ªÆR²]aÍšC()a#,ì-E›¢4"¬]{çÏÇ㇖",ì>¢¢2 Jr1™š¸~}“J†›´!wïfãÈ‘;8w.ìçŸ#ž¾„qDD*–.ýÿüóüýíåm®\ÉÊ*ÅÍ›¸u+·ne¢ªª&&z=ÚE깡JB±¢ „àñãò'<8$9‰Àáéi{øøØÁÏÏÎÎ*½Q_¦®ŽÔÔ"©È‘œ\„””BÔÔ𠦦S¸»[ÁÝ]"pxzÚÀÞÞTe½Û(%…Šý@„ìì2i£Ýä~ÇbU‚==&\]-áîn-M¤äädkkårá/.fcÆ£ˆˆHÅk¯aÓ¦™4^¸‰ÍÁœ9?`×®ÅXº4°S¿),¬ÆéÓþ ù°´4ÄìÙ~˜;7ö*=køÛo7°uk8Äâÿš`CL&b1Á{ïÍÀ+¯Œí—ná„øú~ŒU«ÆcÍšIŠ6G© „àÓOOcß¾PSC³ëKSS>>v8sfm¿s8<œ8ƒ£Gï!>žgg ,Yˆ… ‡·ëQøÒK¿áß“ÀdjbïÞ—0mšW/[-Äb‚ääBܼ™›7Óq÷n6êêø°¶6n6$ EUmé[E!dg—áÑ£<ÄűðèQ. Àç ¡¯Ï„··-üüìáëk{ØÙ™(Úä~M^^Å"G’’ ›[‘H ==&† ØèÅaÓ(vXõ+¯I ¥AÅ U£¦†‡ääB$% 1±IIHM-‚@ ‚¦¦:¶€››dýî&ñBÖï–xcœ‚™™¾ÿ~ † £Þ½…XL°{÷UìÜy"Á¸qCúF»ß//¯Å¹sq€û÷ÃÈH3gú`îÜŒéÔ/f©?.Ä _¡¡AÔj›ºº:–/Ä—_.T€e}ƒÄÄLº —/o€——êç;5÷ï?Æüù»!‰[mSWWÃÇcÕª XÖ7ˆg!4ô.NžŒ—+ÀÔ©^xþù˜0ÁM*ò”–Ö`èÐO ¨©©AM øì³yx啱 ¶^ö"<|˜+õ܈‰É@ ‚““ÆŽ•ˆ#G:aÀª)+ÒÒŠñða.=báÑ£úèY•ölárpïÞc©çFbb!ðô´‘znŒ1ººteYÂå6 !!±—‡‡ó“S°±??{øùÙÁ××¾¾v00 Ëð*šÂÂj©¸‘˜(™<ÌÎ.…P(†¶6C† „——-<=m—öµ¢+ªP(²…ŠÊB~~ââò¤‰¦ââX¨®–(Âöö¦ðô”ˆ^^6ðô´QÊ„e]åÂ…„„„Jsc ê¨h“ú—/'âí·€ËmhñP®†¿þZ‰Ñ£ñï¿Iˆk×R'ºcî\LêÕoE§_~‰À矟iæþß’¦ü×®mì÷rK.ü––Fؽ{¹¢MQ*!X¾ü×fy2ÚBSS»îÜ::sØHVV)BCïáèÑ»ps³FVV)ŠŠª[}O]] Ó¦yã矗÷›6ŒÍ®GttV£¸‘ôôb0ð÷wzn8ÈD”f±*i˜Å°ÙõRÏ É‹…’6ÔÕÕ0x°y£À! Qñò²‘ù *"‘×®¥ô[a½;ðùB¤§·šläp¸ÐÐPÇàÁæðñ±k³[ÃÛÛ¶[yÆ:­?J?€ŠÝ…"·ÃÂÂjÄű¤¢E|< ••uPWWƒ³³¥tmó&ñ¢¿ÅêñùBlÝŽnaÙ²‘øì³¹TéîEø|!>ýô ¸ @r/< ƒ¡À@'<=·`×®ÅX° ,C++ö칆mÛÎvê»jjjøè£gñÆãåk”’!ˆpî\Þz뀶‡Gššêðô´Åáëúå*Y%%ܾ‰¨¨tܼ™Žüü*èèhaĈÁÒd¢žž6ÝÊfÍúb1Á‘#¯Ó°–v()aãáü'rp°Àf×K—ˆ p€¯¯$<ÅÕu`Ë””"Lšô5†uÄO?-ë7ɃåANN¹4ü;1Q²òMii €ÿ&%½¼$ã{// Øóœ5´þ(ý*ft‡“'cñàA.¶m›ßã²ÊÊjðða.ââþ.ÊËk¥ª»ti///›~¿DaZZ1V¯þ ……ÕØµk1fÏöU´IýŠŒŒ¬\¹—5s¿n‰±±6nœŽ9süúÌr½ŠF$cöì”TÐî¬9ƒ¡@==mLžìŽ9sü0eŠg¿3®\IÆK/ý†‡?……ï qq,„‡?À… ÈË«ƒ¡¡´›`04põê{pv¶èeKû6+VüŽ«WS:ôna04`aaˆcÇV÷ûpœœré2°·ne ¼¼FFº5Ê cƸb̸¸X>µ‡7·ÍssìÝûFŽt’·ùJ!99åÍÂS Àå6@WW ^^¶ðó³“zqtåöèÑ{xç¿¡©©BV¯ž€uë¦ôû±¨¬(-­‘ -ÃÅMMõáãÓ4qi [88˜vi"•Ö¥@ÅŒ®PWÇÇûïlj1ë›.)Þ<ž‰‰ùxð æâÁƒ\°X•PSSàAfRÑÂÇG"\ÐxÈæ?< ±XÜ¡ÑÄ¥K!ðö¶íË”ƒ={®aûös­ÂKš }̙㋙3}èÔ¯Œ'Ù²å$îÜÉ•+mŠR“ž^Œ‹qúôC¤¦ACC "QsaCSS6øçŸõ4ܤIâÏ­íæyMM èêjáС×hÒéF!HM-Æ­[ˆŠJÇ;Y¨©áÁÒÒP*lŒãÒføÜÙ³ðÆ"ÍI²ví¼ûî´~¹ªSO ÅÈÈ(Æ£GyR/Ž´´b"éÂÏÏþþMví®\³eËI_GG3i2ÑQ£œaf¦uëãÔ©ÍÄruuuøúÚâ—_^¦=„Ç )©@žòða²³Ë@ÁÀFOäß°ƒ¿¿= u0}ú7ˆÏoVŽÄ3€`øðÁرcÜÝ­s@ý>_ˆ””B©¸‘”$yñùB0RÃÓÓÞÞ¶ðð$¥õGé´3Øl6òóóÛûJckk #£æê4!{÷F`ûös ü1xýõñøàƒÙ$q¶7of ::ÑÑYÈÌ,›]--MxyÙH…‹€³Ö<ÈÅ므H$ÆO?-ÇèÑÎ~ÿæÍ›øñÇ{É:Õ‡ÃÑB||÷\¨-pãÆæv·ÿøã¸yófwMSnÝúoyQ==!ÌÌêabÂ…žž°Ke3k×®•µ‰}†üü*<óÌg8vl5ÆŒqU´9}–E‹uû·:ªªtPV¦êj&‘h¥ÐÕÈÊÄ>ͱcÇÚü\,&ðõýµíþVSS½q©VÉy#„Hg=W­… ½eo° Ð4¾â󅈉ÉÁÍ›’|qq,ˆDC† Daa58n«ß2`04ñý÷Kš F´¿ï>k׮Ř1cÀáðÿd‚Ñ<VCMM ¦Èϯj7ÜJº Æ‹/ŽÁ¦M3¤ùÛ’’’zóPú%¶¶¶ÐÓ3@ffI3Ž'd†œœŠ.×_OúJkÚëo(2£µ˜QRR‚””˜›÷¯в²2¸»»ÃÒÒò‰Ïj°fÍ!ܺ•ÑæÊƒ[àÕWÇà޽Ǹv-uu|¸»[ÃÍÍJêÂçåe--Ùf—î/4…5Œë‚~XÖ©DkGŽÁ²e˰páÂ^°Pµáñ4qãF˜LGx{»‚Éd€Ëm‡Ã'Ÿ/@]¿Ã2>ÜÚ®ûê²eËpäÈ•¯«ü|}TTèÀаÖÖu`2»&`4†¥K—âðáÃ2¶°ïpèP4>ù$))_Ðv³š¤{zïˆDj¨ªÒAA44<=+ ¦¦ºÎšaaaZ'-~O>_€êj.ø|x<8.¸ÜÿÞóùÂÆ¶>_€úúœ9ó®®0k–'ÆŒqì¥#RÚ_5QSÃÃ;Y¸p!¡¡÷Ú-C]] b1ÁóÏÀ_Ì‡ŽŽíï»IXX>Œ¥K—¶¹½¬¬åáÊ•d"#ÓpøpôSËkYM!‡ô¾êéo(2!¦ÝÑ¢§gÿZÆ'""¢Åÿ©xë­ƒ¨­å·»„bvv)víºˆaÃᣞŴi^07§ ëzJCƒ›7Ÿ@hè]¼óÎT¼ûî´.»ßS%T64 ¯\éxðÏã ÀfsÁå6€Ï6þt\oªþpH’ÚÉb—eË–ÉÀš¾MddFv¦BF'èèa¤;"ˆDb•^n´©=ëmm´µ]ý\±Bâ‘áîîÞmûT•–ã«'10ÐÆ”)ž¸ÿ±4P[4ÃŽÁÝ»YØ·o…tíï»ÆÓHš›`ÊOTVÖáðáè—¡P„š.6l8Šýû£°p¡æÌÕîÃ6¥gtt?’•QìíMQWÇÇßßérý1ñçŸßÈ´ét¦¿¡È:bl@ —_þƒ½{# ¦†MMu¼ûî4¼úê¸^´Pµ)*ªÆÊ•û‘•UŠ?ÿ|•®­4 þiÞ—¶èïËÑv‘HŒ¨¨4lÜ8CѦôK$®üý3é,Eñœ?ŸÐ©%«…BX¬J̘ñ-fͲyê÷)Ý'!!ššêhhxz½4M>'$ !¡±±Õøüó…t53ÒÝú33{G>ÆÔ©µ´þ(J3ž /¯Ë—ÿ…ÔÔbBžšì¸Ì†” IDATP,&¸x1‘Š2âöíL¼ñƘ˜èãüùw1x0uQ¤Pú ä‚Ãá!(ÈMѦP(”^$'§ÙÙ¥þ~S‚ÐððøöÛçéØJ?#22 66àìl¡hS(J/rõjr‡Û54Ô¡­Í€¾>L&ººZ06ÖA\\ØìJìßkÖL“I‡´²B(#5µXúÿ€ºpt4‡‹‹Í0hyã_3iâÈ&"""àînÝêsJïÑ“úÛ¸qôhýQ”†~ßòóùB|öÙüýwÇ©º: ®®Ñ,wƒH$†P(Bdd*æÌñ“·©*ICƒ!!Gþ›7ÏÂêÕžÏI¡PTÈÈTŒO½2(”þÆÐ¡Ž8th•T°Ð×׆¶6zzZÐ××–&$l‰$&}BBŽ÷²ÅªŸ/À¯¿¾ŒAƒÌàèhF'˜” Z”þD¿3˜LM|ñÅ|L™b‚Áƒ]`h8@šÈÇ ¦†‡úúÿÞ×ÕñÁå6 ®®µµuEJÛTUÕaÅŠ?šZˆC‡V!(hˆ¢M¢P(  ºº±ðúëm …Béeüüìm¥zzÌfËàR” Z”þDÛrw¨ªªÂ×_- [“© cc]88˜6.¯j±c]1mš‚ƒý±|ùH¼þúx¬_?~8;v,À¯¿¾ŒçŸ¡hÓ•ŽÇË0{ö(.fãôéuýVÈ8}ú4îÝ»'—û¨®®Û·o—i™Š"33þù§LÊ*((À—_~‰ÄÄD™”÷4T©äETT:`ìX[¢zÈòÞ‘7, eeemnS¥û¨¯µgMýPKT霽s/ÔÔÔàË/¿lõ^VÐ:éz9²¨‡ÜÜ\üúë¯=* õ״מµ¤£¶SÕêIÕ鱘Áf³ñûï¿Kÿ_¹r%?~ÜÓb[!¯r)½OttfÍú&&º8wn=† ¨h“FXXnß¾Ýê>’555øøãeZ¦¢HMMÅÞ½{eRÖ‹/¾ˆGAS³wÓT©äEddüü컼&åéÈòÞ‘' ÄéÓmç®R¥û¨¯µgMýPKT霽s/°ÙllݺµÕ{YAë¤ëåÈ¢?~Œü±Ge´þzƒöÚ³–tÔvªZ=©:=3‘––&ýÿâÅ‹`³Ù=-¶ò*—Ò»=zÏ?ÿ?Œã‚°°·è²O´¼(ò#//ëׯ‡›ÍÏÐWˆŒLÃøñýÓ;‹"á•W^Ayy¹¢ÍP:h{F¡P(]‡¶ªCÅŒ’’Ì™3°xñb”––bñâÅˆŠŠ$$$`ôèÑÐÖÖ†««+Ž9(--Å´iÓð×_ÁØØÉÉÉøûï¿áìì MMMXYYaçÎí–___0™L¸¹¹IgsÚ*—¢x!عóÞyço¼ñÆüòËKÐÖf(Ú¬v¯ÏŠŠ Lž<‡†““ôôôðòË/C$’,suåÊxzzBKK ˆ‰‰‘–ÙÞµ ¡¡¡ptt„ŽŽæÎ+èž¼ž¶ï³gÏÂÉÉ ºººX±b6n܈óçÏ·{Œ¿ýö §§‡+V@Ü´—’!‹±víZÂÂÂ;vìðßùúöÛoamm sssüñÇذaÌÍÍaee…ÐÐPÀŠ+——‡_|çÏŸGNN&Lhž§añâŸ{÷n®¶P•z5%((¨ê·¡f½,îزe ÌÍÍÁd21aÂäççwj[{íl?ÿü3!9räSEUî#y´gK–,Axx8‰ µŸŸNž< (**‚¿¿?ªªªÚí‡ÚCUÎ9 »{¡½ñjGt46èÏý‰¬ê¤½rZÒÓz „ $$ëׯ!@Çí_[Ðúk^=‹uÔžµ×÷´l;ÛC•êI¥!-(..&ׯ_oùq»<~ü˜èééB©ªª"VVVäúõ뤡¡ÔÖÖ+++²{÷nÂãñÈÕ«W‰¡¡!¹uëa±XDGG‡Ì›7ܾ}›”——&“IN:Ex<‰ŒŒ$êêꤴ´´U¹ÅÅÅÄÀÀ€ìß¿Ÿðx<NtuuIjjj«rù|~§Žãúõ뤸¸¸ÓÇMéðù²bÅïÄÉé=‘*÷ýu¥ñèèúljÈ ¥ÛÆGÂÂÂÈ®]»Èœ9s¤Ÿ744/¿ü’ÔÕÕuxm¾÷Þ{dÉ’%Ͷy{{·)f´·ïmÛ¶‘ùóçK?‹ÅÄÊʪC1£´´TúÙ¨Q£È©S§:u~é[bÆ€HCCƒô³?üÌ›7OzœM‹ôôt¢©©I!„KKKéœHtt4!äéhw®–È¢Q]1cùò_ÈÊ•ûm†RÑÕÁ¦,îððpbmmM !‘¢ªªê©Û:jgëë뉷·7¹|ù2!„tJÌè«íYWÅ y´g×®]#vvv„BV­ZEÖ¬YC!„¼úê«äƒ>è°j‰¬Ú®¾$fÈâ¼w4^mOÌèhlÐÛýI_3dQ'•#‹z¸~ý:ñðð «W¯&fffR›é¸ýk‰,꯯‰²¨¿îŽÅ:jÏ:ê{iÞv¶¤¯÷7”fÜïq˜IGäää 55ŽŽŽÒWhh(ª««êêê°¶¶0™LÄÆÆbÚ´iprr¼yóÚuçÉÏχ««k³Ï† ‹Õª\Šâ¨«ãcùò}ˆŽÎÂÑ£«ûœùÓ®O°²²’¾WSS“þîÉëÁ``Ó¦MÐÕÕíðÚ,((€§§g³míÚ×™}«©©aðàÁí–¡¡¡ssóVå(#NNN`0þ MòòòBQQ‘ô===’cd2™Ò¤N==æ®^m¡Jõ K„¸};«Ïµ ª†,îÙ³gcÁ‚5j°nÝ:TUU=u[Gíì¶mÛ`mm ܼyl6™™™HHHhó8Té>’G{6f̰Ùl¤§§#22k×®EMM rrrpíÚ5Ìš5«Ëý*s@6ç½+ãÕ&:ô÷þDV÷ÂÓÊzVÉÉÉ(,, ÷m¢£ö¯-hýuolÖÖX¬£ö¬3cüŽPµzReä*fbìØ±ÈÉÉiöúßÿþ ù…Ž?ü[¶lAzz:îß¿ßnCnhhØ*QXEEŒŒŒZ•KQ ÕÕõX´hÒÓ‹pòä[:ÔQÑ&µâi×g{´j Ož< 6›Ýáµ9`À”––6ÛÖÕ„w¨¨¨höYG¦*Ñò\•––ÂÄÄDæû©««{êw:º(çÞ½lp¹ ?ž&à’'²¸w!øæ›oPQQ°°0ðx<<÷ÜsOÝÖQ;«¡¡òòr¬_¿ëׯGff&BCCñÃ?ÈæÀû0òhÏ &OžŒ#GŽ ®®...?~<8‡ƒÀÀ@™ôCÊŒ,Î{WÆ«Mt46èïý‰¬î…ΔӓzpttÄñãDZk×.¼óÎ;ÒïvÔþõä56ëÌX¬£ö¬»c|Šò!W1còäÉˆŠŠBJJ  ¾¾C‡Å©S§Z}7??;v,444 ‡Óf¹S¦LÁ¿ÿþ‹ììl’ä‰'NœÀäÉ“åw0”NSRÂÁ¼y?¡¼¼áákáîÞ7½dºr}>É”)SpæÌiz÷î],_¾^›“&MBhh¨T±ŽÇ7ºlsxx8ÊÊÊÑÑÑHNN– xááám®™­ äääàܹs$ËfýòË/˜9sfÊd0`³Ù¨¬¬ ©ËÌÌ̧þ®£kPíz%ipr²€­íE›¢ÒÈâÞùꫯ0~üxhjjâ™gžÁ‹/¾(¥ìh[GíìgŸ}†˜˜ékèСزe ~ûí7ª}É£=€™3gâûï¿Ç¸qã'NÄwß}‡éÓ§C]]ý©ý*Ÿs@6ç½+ãÕ&:ô÷þDV÷BgÊéI=èééASS/½ôÜÜÜðþûïè¸ýhýu†îŽÅ:jϺ:ÆWõzRed.fXXX`Íš5ˆ…‹‹ >ÿüsbòäÉpuu…——/^ÜêwÁÁÁHIIAPP¦L™‚Ï?ÿƒFHHH«rýüü‚¡C‡bêÔ©ðôôÄ‚ 0}útY¥‹äæV 8øGœ9³ŽŽfŠ6©]ºr}>É„ °téRxzzbòäɘ:u*vîÜ }}ý¯Íàà`L™2˜0aæÌ™ÓenæÌ™˜3g<==1eÊ„„„À××ZZZ€õë×K³Ù«x÷ÝwWWW888`ÕªU=*sРA1bŒŒ=ú©¿ëèT»dIDD* 1édqï¼ôÒK`±XðññÁäÉ“±hÑ"|þùçOÝÖÝvPíûHí̘1l6»™˜Áf³1kÖ,xj?¤ÊçÍyÚxµ-:ô÷þDV÷BgÊéI=<ÉÞ½{qàÀDGGwØþ´þ:CwÇbµg]í{T½žT5B×j¤¤¤)))?~|§ ‹Å¨ªª‚©©) ¬¬ >ÄðáÃ1`€d¶­  III°±±iÛô$÷î݃……|||Àb±   6ËÍÉÉAzz:[ÅÀu•ˆˆ¸»»ÃÒÒ²Gåôgòó«0oÞO03ÓÇ‘#¯cÀ½^·áÈ‘#X¶lZ\ÖÒÙë³%xüø1ÜÝÝagg×l[G×fBBJJJðÌ3ÏÀÐÐ@ëû¨=ÊÊÊP^^@€ÊÊJŒ5 îîî8|ø0;m{géÎùì,Ë–->|¸Ó¿áñxˆŽŽ†‘‘db‡P(Ä;wH:å¦xÎÎÐÑ5 kºs¾ú2¥¥5ð÷ÿ¬ÄäÉíÇìSZ£¦¦†Ã‡céÒ¥þ,î>Ÿ{÷îÇãÁ××Út¿•%òlÏšfÿÜÝÝ;ýy´g¥­~H^Èk|ÕÝú”Åyïh¼Ú z«?éNûѺSß²º:[ެëáiíŸ,‘÷óŠ¢ú—žŒÅ:jÏÕ÷ȳ¿¡4#¦óWJ;¨««7{377ÇÔ©S›}ÇÆÆ666O-ËÐа٠´!i«Ü¦„.ÅSTTE‹öÀÔTG¾ CCmE›Ôi:{}¶ÄÅÅ...mnëèÚôöö†··w³ÏZÞG푟Ÿ‰'âøñãðððÀ¯¿þ ¡Pˆ¡C‡vÙ~eD[[»ÕZä=ESScÆŒéÖo;º(sãF Œé¤hSú²¸w˜L&ÆŽÛåm@÷ÛYUFíYgi«ê/Èâ¼w4^툎Æý¹?‘Õ½ÐÙrd]OkÿTYÔ_OÆbµg´ïQ}z,fP(µX¼øÐÑaàȑוJÈP6üýý±ÿ~ìØ±•••pvvÆ… še’¦P”ˆˆT î==¦¢M¡P( …B¡(!TÌ ôˆªª:,Z´„G¾ “Þ-éoÌ;sçÎU´J·!„àÆ4¬Z5^ѦP( …B¡P”*fPº ‡ÃÃ’%¿€Ëàĉ·`fÖ:I…B¡´$)©ååµtIV …B¡P(J·¡b¥[p¹ X¶ì”—× <|-¬¬Œm…BQ""Raf¦OϾ¹l3…B¡P( ¥ïCÅ J—‰ÄX½ú òó«pêÔØÚP´I E‰ˆŒLŸqC ¦¦¦hS( …B¡P(JŠº¢  (Û·ŸCTT:~ÿ}Ím…BQ"êêø¸?‡†˜P( …B¡PzõÌ t‰ná×_#ñûï+à hs(Š’@„qã†(Ú …B¡P(ŠC=3(&**[¶œÄæÍ³0uª—¢Í¡P(JHDD*ÜÝ­`aa hS(ý3³e6ìSlÞ|ééÅŠ6‡Béuôõ‡áÃ`áÂ=8q"lv½¢M¢P(”nC=3("%¥¯½¶Ë—Ä›oNT´9 EI‰ŒLôiT ¥( õõ8pà&¸ --MxxXaÂw8Âßßž.1NQiD¢2…[·2FF:ðò²¿¿¼¼làæfggK¨«Ó¼F ¥oÓ®˜QVVÖ›vPú0µxá…_áãc‡mÛæ+ÚœN¦hTyŸÇ°°0Ì;·Ýí\®ZZêÐРª°°0,\¸PÑfôˆüü*de•büxbÒSÂÂÂÀ`0ze_„¥IÖZS#€¾>m™6û*ª«¯ '§¿ý…‹ãñè qq,¢55++cxyÙbâD7,X0ººZÚwii)ÌÌh©Þ†ö÷]ƒËMæMÞX°`ΞÉ÷q÷îcܺ•‰ØØ\44!  ‡1c\0fŒ FvÁàÁæÞGYYÔÕ©ó·²Ò›ý‹ªBÛ¥Þ£]1#))©7í ôQ!X·îôõµñÛo¯@CC9:§E‹)lß † Ç¢ªêÄb~ÊRWgbÀ€gQS††|YØwíÔ•:tu½a`ˆšš;¨¯ëÑ~ÔÔ4`b255wÐÐÀêòï ƒ ”‚ËMé‘ýˆˆTèèhá™g+Ú¥'<<ááárß“é}ý¨¬<B2+WKˆ†ãQYy¢Çí䓘š>uu=ÔÖÆ€ËM nó{ŽŽfضm¶m›‡ÜÜ Ü½›7ÒÇBI —/'âòåD¼ÿþqëÂÏÏ3fxcܸ!pp0m³LB;)Eö÷ÊŒ––&ž{n(ž{n(„B1¢£3ñÏ?q8>åå5`04˜˜K—ÐÐ ‚¥¥!0r¤3ÃÕu`»e———£¼¼¼†"Kz«¡Pd!„(ÚJßeÏžkøæ›K8þ Ò~ÇEùçžÛ @ŒÓ§ß–ÉlæK/ý†ÌÌR\½ºÚÚª¯”_¸€Ï??ƒ‚‚*¼úêX¬[7FFº=*s÷î«øî»Ë¸qã}ØØt})áU«þDM ÿýFìèï¼öÚŸàñpðà*E›BéUUu˜8ñkŒᄽ{_”iÙµ˜4ékŒ킟~Afåff–â矯âäÉXXZbõê X²$°[mgDDÂÂîáîÝ,±Ñ4ZÒÕÕ‚§§ ÃÇÇÞÞ¶°·o[à P” ‘HŒ{÷ãŸâpáBŠŠªaeeGGs…"¤¤¢¶–33ýFqà Îps¨4\ Eeˆ¡b¥]bcs1þOؾý9,[6RÑæ(.$`åÊý8{vÌV{))a#(èK,YˆO> –I™}‘ØØ\|öÙiÄÄä 8Ø›6Ílw´+³1vì¼ùæD¼óÎÔn•qüx BBB‘° ††Ú=¶©?"‰áé¹6LÇÊ•ãm¥¼úêˆÏÇ•+z,(¶Åµk)xá…}ؽ{9æÍ iÙUسç:BCïBOO ¯½„—_ƒîݿ׮%ãÔ©ˆŽÎDm-ššê‰Ä 02Ò…-Üܬ0dÈ@¸ºZÂÕu udz\JoBÁƒy8>çÎÅŪ„­í >ÆÆz`±*qï^68. Ðȃ1j”3àáaMsnP(yCÅ JÛp8\L™² C‡:bÏÙÍš©2ãÇ[üï²Åüûï;xï½0œ9³þþö2-[Ñää”cÇŽpî\FŽtÂ̖鲿o½u±±¹ˆŒ|Lf÷rWW×ÃÇç#ìÞ½Ï>ë/3Ûú11ñì³?"2ò}¸¸X*ÚÊS8t(›7DZcobäH'¹íçÃOâĉ\¹²¶¶]÷šzå嵨·/ܼüò¬\33ýn—) ')ĵk)¸t)qq,ffÐÔTGUU=¸ÜÀÀFpq±l8$"Ç!å"Q(ò&>ž…þ‰ÇùóñÈÊ*…¥¥fÌð—— jky¸s' wïf£ªª††:1b°4,ÅÛÛViB•)ŠÒ@Å JÛ¬Zõ' péRH·g²úûöEbûösˆŠú@æƒrB–,ù%%l\º--å_ˆ¨²²?üð/þüó& 2ǦM31c†·L÷q÷n6æÏßß_éÓ{VöÂ…?ÃÜÜŠ{Ýä›o."4ôîßÿXѦPžBvv¦NÝ…W^‹>˜-×}ñxÌœùŒuö¦Üv8¸‰}û"QW×€%KF`õê Ý ;kIuu="#Óðï¿IˆŒLCEE-,- áåe 33ˆD"dg—!#£55<€……† ±‚‹‹%œœÌakkSØÛ›ö‹pBŠò“šZ„sçâpþ|ÿüøxŒŒt1}ºfÍòŸq®ÈÉ)ǽ{ó119ÈÎ.ƒºº\]bØ0G 6Æ9viÅ …B3(-a±*1qâר°a:^}¼¢ÍQ>ù$§NÅâÖ­åêɲ¶n=óçß§§Üö#Äb‚Ó§bûös¨¬¬ÃªUAX³fôô˜rÙß·ðñǧpõê{2yPÉÍ­ÀÈ‘ÛúÆ£K‹v6»^^aÏž0gŽŸ¢Í¡tÀ—_þƒß~»‹Cdö€ß~ù%Û·ŸÃéÓkáç'ÿP:@„“'cñóÏW‘]†™3}ðöÛ“áím+Óý”—×âêÕd\¿žŠ7ÒP]]GG3 Áøñn3ÆzzLp¹ ÈË«D^^Eã«Rú—Ū@m­dÅCÖÖÆ°³3••1,, 1p aã_#XZÂÒÒ¨Û!uJOÉË«À¹sq¸p!äA_Ÿ‰É“=0s¦&Mò€¶6µˆÍÁýû9ˆ‰yŒ¸8x<LMõ1t¨#†—¾¾vÔS‰B¡t3(ÿAÁÒ¥¿€ËàäÉ54qS'ÉÉ)GPЗضm>^xa”\÷%ÌŸ¿õõ|œ?ÿ®ÒÌÐݾ‰­[Ñœ\ˆE‹žÁ¦M3aii(·ýUUÕa̘X²d¶l™#³r'Mú#G:cÛ¶ù2+³?pî\V¯þ ŸÃؘæ è«DGgaÑ¢=رc–/ïݤτ,^¼……U¸|ytuµze¿b1Á… ñøñÇ+HHÈÇ„ nX³f²\ò„…bÄÄ<Æõ멈ˆHERR44ÔñÌ3ƒ0nÜL˜àOOë6W„¨¨¨‹%8X¬J°X•(*èOׯ IDATb£¬¬EElTTÔ@(üoZcc]©°ai):,, 0p LMõ1`€^ãK—zšQäFQQ5.\HÀ¹sq¸w/ÚÚ LšäY³|0q¢ôõ%“ ùˆÍALLîߌâb6 xxXcèPG & M±³3QðQQ(”>3(ÿqìØ}lÚt W®l„“SïÍÈ);«Vý‰ôô\¹²±WÄ…ÇË0iÒN¬[7Eî.Ù=%=½Ÿ~zׯ§bÂ7|ôѳps³’û~7l8Šk×RµY¦ž;w^À±c÷iÞ‡.²qã1¤¦âìÙõŠ6…Ò“'‡ þüóU…ØP\ÌÆ¤I;1k–¾þzQ¯ï?""?ýtÑÑY>|Þ~{2&Mr—Ûr“µˆŒLkl«ÒQVV Œ'ñÚ SÓÎ%*‹ ÊÊjPZÊAq1»ñ/GúI %%”—×@$7û­6LLô`b¢×Lähzob¢ }éÀÐP††ÚÐ×צ"¥K”–ÖàâÅüóO¢£3¡¡¡Ž  7ÌšåƒiÓ¼Z­üSPP…û÷%a)119HN.€P(†‰‰üüìáëk??{øøØÉur„B¡ôi¨˜A‘Àáp1zôv¼þúx¬Y3IÑæ( æaöìï±ÿ+˜:Õ«×ö»wovì8‡³g×Áǧïå5))aãë¯/",ìÜܬðÑGÏbìX×^Ùwll.ž}öìÙó‚ƒe»òÈ£Gy˜9ó;\º"swtUføðϰxñ3ذaº¢M¡´Ã[oÄ­[¸zõ½N?@˃ ðê«à?^éqÒÞîó?ýtW®$ÃÝÝ o¿=³gûÊu%†¦R®_OÁõ멈ÍH$†ÆŽuÅ„ n6lPsBªªêQUU×øªGeeô³ŠŠZéçO~G µ*‹ÉÔ„D؈:Ð×gJ?30¼74Ô6455`d¤CººZÐÓcBSSÆÆ:ÐÔÔ[È!¥ïQUU‡Ë—“pöì#DE¥FvÁÌ™>˜:Õ ­~Ãå6 1±qq,6nœ †õZÈ’H$ÆŒßÂØXÇŽ½)óò !øË—"$„>˜w†ÌÌRŒ·§O¯Åðáƒm¥ Nz€5káðáU?ÞMÑæ $ä(.^LÀµkï)tÆ59¹»w_ÅÙ³`gg‚5k&aáÂá½ÒGÖÕñqóf®_OAddrs+`h¨Ñ£]ä† ÜzÕݾ¦†‡ªª:ÔÕñQSÃCM µµ<ÔÔðÀáp?ã=±6›Ûø<žï©ûÑÕÕƒ¡ ##hjªC__L¦¦´k SÓÑa@KK’ž fˆv³þGCC½U^+--Mèè4ïCuu™­êÙаyYjjêt5Àápñï¿I¸x1×®¥€Ï`èPG̘áƒ3¼áà`ÚÁoyˆg!..IþæçWÍš ÞÞ¶T0£PT*fP$ËkMº ®BPMlØY®]KÁòå¿âÌ™µ6¬÷Ò «1qâ×xî¹aøâ Åæphhâ?nb÷î+ xûíÉX±bL¯'¡Û¿ÿ&¶n —YÒ϶ؼù8<ÈÅ¥K!r)_Õøý÷عó’’¾ëÌ6¥{°X•˜_BˆT(©«ãC(A(K“¦@}=¿MïY#ñ:iÿY"Ð<ýZMM­UØE{ê ½[DWW«Í¥Ü›Ä –hk3Àd¶žÑÖÖlsÒD"I®»'E'mm†ôý“ûjòÆ‘ˆJL0šÍî#.·‘‘i¸p!—/'Í®‡‡‡5fÌðÁÌ™Þpw·~ÊÙ$ÝmòÞˆ—ü-+«ººÌàéi OOxzÚÀËË=µL …Òg¡bxñÅ}ÐÔÔÀ¼¢hS”±˜`êÔ]°·7UèykšQ=th&LèýU±˜àĉ|ýõTTÔbåÊqX³fR§a²¤¼¼cÆlÇ‹/Ž’Ûò¸€$®~éÒ_pÿþǰ± ·ý¨ /¾¸ZZšøí·Š6…Ò‘HŒçžû.¼Û§VÀxð sçþˆ?ÆÊ•ãmIN_~‰ÀÁƒ·Ád2°rå8¬X1¦×“Ú "ܽ›ˆˆT\¿žŠÔÔ"hii`Ä'Œ犠 !ððh;‘(å?8ù/ˆXLZyH„~³Ï¸\„Í>«­•ˆ(Oò¤Èò4ØìúNÛ,w ôöî;,Š«‹ð–® @À‚‚tÄ ˆREŠ=_,Q{ –˜5öÄ®±F£Æ5{W¥ *"½‰H/Ò-óý±²é°Ël¹ïóø¨ìîÌa§ìì™{ωÉDLLÒÒ ]»vä%6LMµad¤]]u‘)°NŽ$3$]XX &Múþþ¿ OÒß»¹®]{üÞÞ« ¯ßÖXÜÝ/ $$>>«Ñ¹s‡v[¯O¶o¿‡¤¤LžlU«\i½ÃñÃN†Ÿß%­®fÁÌl#Ö¬¹sm¶qP]Í‚±ñzlÞ k׎°±á&6lmõ¡©©JKl„äb±8(/ç&6˜LÊ˹I¡šdHU ••ÌO£oXøð¡l6…ÒÒ`³9(-­‹ÅFyyªª˜ÈÌ,AZZòòJQ]̓!iiéGÜÈÊ2й3·xmMÛnÝ:~*jÛŠŠr(.®@AA923‹’’‡„„0™lÈËËÀÐP¦¦=`b¢ ƒî02Ò$ݸBød†¤›8ñ0ôõ5h©/ªª«Y1bll °oßTºÃAIIFŽüææ=qú´àG‰„‡¿ÃŽ÷œ WW3üòËhÚ:¡¡)øßÿŽàäÉÙ=º¿À×·hÑ9Wàòåï¾.Qöôi¦L9ŠÐФžyõ* 'þ ÆaÁ;ºÃ©—0¸wã/\Ɖ~(.®ÀÔ©pwwD¯^ Ïñ4‡BllˆÐÐ7¨ªbAOO66°³Ó‡µu¿fMu aŸ OÏ(xzF"::ÊÊ 1BVV}ab¢ ‹ÍKT•£°ð¿?ïß—}*|û¡ÎÈ55e¨ª*A^^EáÇJäç—¡¢‚;E]]††š04ìƒî04Ô‚¾¾©ÅAô!É Iæç9sN#$d™3Ø'Nøc×®û Z'4w»‚‚’1uêQìÛ÷ ¦NµÈ:RRò±k×}Ü¿‰!Ct°qã8Zj…|‰ÅâÀÅe/ºwï„‹µË:oÜx‰üQQÛH¸FìØq÷ïG"(hÝ¡Ÿ¶šÆš_ª®fáÒ¥0;æƒÌÌ"Œ?Ë–9ÁÀ€Þ$/TU±ú‰H@ll¤¥¥0p`oØÚr“ô&Cê ‘•ž^ÈKl¼x‘ 99ØÙÀÍÍ ÎÎ&v5)/¯BQQòóËðþ}22Š]Œììdf!'§YYŵ¦)(ÈÁBU ,RRRÐÔìcc-jÂȈ›àè×O£Þº$AðIfH²I“þ„¾¾vì˜Dw("£´´ÖÖÛ0mšÖ¯\]†Öøí·Û¸x1¯j´úwKåæ–âÀGððx†¾}Õ±ví¸¸´_Ú¦œ8á;îÁ×wu»M•*)©@ÿþ›pðàt|õÕ vY§(rvÞ‹¡Cû`ûö¯é…øŒ°t i®k×^à‡<àá±H¨‹T³Xܹó GŽx#!!ÎÎ&X¶Ì ƒõ¦;4ž‚‚xú4 þþ H@VV1TT0l˜lmõakk]]ÁO&A{ÿþ=Š‚§gAQ† ÓûÔÅ­»q——W†ÜÜdg##£))ùxó& ¹ÈÍ-EQ––‚Œ L&›÷ÿîÝ;Áؘ;MEOOýúi@OOƒÜ!þ!É IUS\- `-ttºÑŽÈØ»÷!NŸijgë…®‡yu5 nnб£>q¨¨¨Æ A½àêj†1cÌùví[QQý)¹‘‡¤¤\$&æ">>ïÞ½“ɹ¡  &“Ûeºwï„~ý4xtuÕ¡¯ßêêÊ|‰‰ $IfHªyóÎ@VV†|kââ XZnÅ’%#±|¹ÝáÔ+..nnû±|¹~úÉ¥UË`2Ù8w.zÅâ`Ù²‘˜7϶޶lt[²ä^¾|?¿5í_MËѨ¨m•e´ëºEÁÍ›áX±ÂÑÑÛ ¬LîB ƒ¢¢r88솃ƒ˜Fw8-RRR{û=>\GŽ|Kw8Íöôi~‚ÀÀD Ø Ë–9ÁÙÙÒÒÂ7µ‡ÅâàÕ«w¼))¯^½‡CÁØXëÓ”XXôºÚ%Ñ”ª*ðàA$?ŽAaa9 5áæf7·þ05Õæû:ÙlRRò™Ž¨¨ DE¥ãõë TTTCAA]º(AZZ %%•(+ã¶®éÖ¢§§]]uôí«== ôí«F®3¢~$™!‰23‹`i¹·n-Šš¢bçÎûððx† B]<íìÙ@lÚt W¯ºÃÊJ·Ù¯ãp(ܾý »w?@^^)æÌåË„nJààdLž|gÎÌ¥eÚKzz!,-·âß õÐwºüøã¿HM}›7—Ñ ñÉâÅçðüy*|}׈ä0goï8|÷Ý ‘Uiøã'ðòŠF¿~X²d$&N$T#ݾTVV‰ààd$"00ÉÉy——áµ€µµ5€‰ iKˆ6›ƒgÏRà鉇£•UŒž=»ðC†è´ydkcëŽÍÂóçoö¡¡)ÈÍ-A§NŠ02Ò‚–V'()É#+«oÞä!#£l6 †4zöì]]5ôë§¾}¹É==u¨©‘Ñ„D#É I´{÷xyÅÀÛ{Ý¡ˆŒ÷ï?ÀÊj+~úÉîîŽt‡Ó(Š¢0wîDFfÀÛ{U³†dûùÅcÇŽ{ˆÍÂäÉCñóÏ®ÐÖîÜѶ‹Å³ó^ôèÑçÏ/ -'§ßaaчԩÇÀ¿bÖ,k¬XáLw(€»w#°xñy¡¯;Ñ”•+/ãñãhøú®É鉉98rÄ·n…CK«3/vÀ´i–"1Ú!+«˜7%%00‘×vĈ~ŸZÀ@KK8ŠbDsP…ׯÓyD““óЭ[G¸¸˜ÁÍÍ 66ú‘”” ÿøûÇãÙ³Þt7·þpv6‹ÅÆ›7yxó†;•%99oÞä¡´”Ûö¶f4GMrƒŒæ $ IfH&“ ‹-X±Â³f §;‘±eËmܸñ!! ¨(Gw8M***‡“Ó^ôïßgÎÌmðÎÙë×騾ý.ž>M¨Q&X·n¬PTàoÊñã~ؽû>|}×ÐZóå÷ß=qùrž?ßDîN~&>>ŽŽ{pÿþ8°ÝáH¼¼¼28:îÆèÑýE¾ wYY%÷`àÀ^8qb6Ýá´Zzz!ŽóÁ¿ÿ†BEEóçÛbÖ¬"3b†¢(ÄÄü×6,,••LèêªóêmX[ë‘)f„HIJÊÅÇQxð ‘‘èØQ#GÃÍÍ ŽŽFoÁZ]ÍB@@"îß /¯•cèÐ>˜>Ý cÇš×Z^^’“skÕëHIÉGzzaƒ£9úöåþ›Œæ ÄIfH/¯h,\x‘‘[E梉n¹¹¥6lÖ¯‹yólé§Ùž={ƒÉ“bË–‰˜3ǦÖc©©ï±k×}ܽûƒõ† ãaiÙ—¦H[†Î¢Ÿ_ŠŠÊ€‹Ë>’“ëŽæèÔIéSgu^—•~ý4гgò™Mˆ’Ì4îîPUÅÄéÓséEdlØpD"$dƒH þÜþýðÇOpïÞ ˜šj#7·‡yáâÅgèÓG kÖŒ¹¹çtýüEQ2d ¾ùÆ‚öÄŠ0™1ã/(++àøñYt‡"ñjÚš^½êkk=ºÃᛵk¯áöíWðóûE,:”•Uâܹ œ<éÒÒ˜:ÕßïÈ×6Ûí© à‚‚’àïÏ-&š™YeeX[s[ÀÚØ@O´€%DCaa9¼¼¢áé…€€°XXZö…««\]ÍУ‡`§å––Vâöípœ>ˆ¤¤\ØÙÀÝÝ#FôkÑròóË””‹ää¼Osÿ™Y““®.wšÊç­dõôÔi¿Þ"ˆd†$©¨¨Fÿþ±ÿ4Œ?€îpDBvv1† ÛŽß~›(’ÓrØl¦N=†ììŒc†³gƒ ¬¬€ŸvÅ”)"w—Œî¢ŸõY·îÂÂÞâÉRƒàÞ¡52Z‡mÛþ‡éÓ­èG¢åä”ÀÁa&O‚-[¾¢;¾*/¯Â¨Q{ѯŸΛOw8|SUÅÂ¥K¡8~Ü™™E7n–. ##-ºCkn Xnb#$$¥¥•ÐÒRý¬¬>ºu½(„ä)/¯‚O>Œ‚·wJK?Â̬Üܸ‰ CÆGM´EQðöŽÃ_ù"((66úظq|›»±TTTó5ÉŽš),L&›7eÅÈHúúÝyëꪓºÝH2C’Ü»÷Ë—_DLÌ6‘¨û Ö¬¹ ?¿x<}ºN$OØL&GŽxcïÞ‡•eàçŸ]1¾p¶Ymаýü’¿¦M;ް°M¿;# 1uê1<¾I¨‹ÈŠ;Š¢ðÝw'ñöí{Kˆ&“  $xzFÁË+¹¹¥ÐÑé†Ñ£ûÃÕÕƒé¬ ó³go°}û]¼z•†‰á·ß&ò½(2‹ÅAZZâⲘ˜‹„„l$$äð’²² ôí«ƒî00Є¾¾ŒŒ´Ð»wW2]…h/$™!IV¬ð@aa¹P}fii°±Ù‰;'‰Üæ/Û¬:8âáÃh><ÿûß`ºÃka)úù%&“ 3³ XµÊM¤jªʶmwá倀µt‡"Ñ<<žaÍš«¸ys©X·àÞ¼ù._ƒ¯ïjhjŠ_'š;±GŽx#,,}±d‰#œœŒÅ¦èpyy‚ƒ“˜ˆ§O“Ÿ YY† ÑÁˆú°µÕ‡¹y/‘IHH‡Bxx*>äÖÙHM} 8;›ÂÍÍ Ã‡÷ãûM1Š¢ðàA$~ýõ6ªª˜Ø¶íëvyÍdr;¬$&æ >>‰‰9ˆ‹ËFZZØläåe`h¨ mkñþ&  É IAQÜŒe˜ȮfZ·î¼½ã´^¤.¢j³ºiÓM\ºŠGV¢O5ºÃl‘‚‚>|;æÍ£¿èg}/>‡ÂÂr\¹âNw(´srúVVºØ¶ít‡"±rrJ`g· ß}g ÆÑŽ@UV21jÔ^ôéÓMìõaa)8|ø ||âah¨‰¥KGbܸ"õùÔyye L@``"‘“SXYÕÔÛÐG¿~t‡IŠÏÆÃ‡QðôŒBTTTT0r¤1\]ùߥ¬¬Û¶ÝÅ?ÿ„`òä!ؽ{ -5ÞªªXHJÊE\\ââ²…èè Wzõê “ÿ’ÆÆZèÕK4ëBƒ$3$Ett&œ÷"8x½PÝÕVùùe°´ÜŠÇcΜt‡Ó,MµYe2Ù;ö (ŠÂ;?ˆÔT“Õ«¯àÉ“X®Ên 7o†cÅ DFnA§NJt‡C›üü2 °ÿ=£F™ÐŽÄš7ï ââ²áë»F䊷Fhh þ÷¿#8vl¦DÔƒŠ‹Ë‘#Þ¸{7ÚÚ±h‘¦M³Ûmœœ‡À@n ØšzÝ»wâMI±±Ñ‡†† ÝaDƒ22Šðða>ŒªÕÅÕÕ..f|ëŒâë%K. o_5œ>=ø²Ü¶ÊÎ.FLLbb2Ëý;5õ=8 **Š01Ñ‚‘‘ÌÍ{Âܼ'ôô46=‡;$™!)N À‘#O±…îPD®]÷ááñ aa›„þKKÚ¬¾{W—½;vöîÚΑ¶NLL&\]÷ãÀi˜4iÝáÔ«´´ffpðàt|õÕ ºÃ¡Íõë/ðÓO—»](“N’àÑ£hÌ{—//ƈút‡ÓnV­º‚'Obàïÿ TTé§]¼{W€ãÇ}qéR(TT±`fÍ.ÖC¹Ùl""Òy#7^¼H“ɆAwÞ””aÃôб#9ÿ©¾Î(}xQzöìҦ姦¾Çœ9§QYÉÄK…vú]yyÕ§ÙˆŽÎDL ÷OU ;ÊÃ̬ èõ)ÁÑKd;;G’’bñâsàp(œ81›îP„^YY%†ÝwwG,_îDw8 jm›Õ‡£0oÞY<8 “'m‡HÛfòä?ññ#wïþ ÔsħN=UU%üõ—ä¶#]¾ü"23‹pýúRºC‘H>TÁÎnFŒè‡C‡¦ÓN»*)©€­í.¸ºša÷îÉt‡Ó®òóËpò¤?Î Ìš5 ØAMMô[Ö6åãÇj<{–¹— C öæuI4¨·Hð&Ä_EE5||âàéY«3JMbÃȨuQÊÊ*1mÚqUàÆ¥"3r‰Éd#!!iˆˆHÃë×éHHÈ‹ÅAçÎ`nÞ“—à0 §ÐŒ07ï)ô£© ¾#É Iðþýôï¿ׯ/Űaºt‡#ÔªªX°²ÚН¿"t…óX,.] ž}QQQ wwG,Zdߪ7“ÉÆäÉGQPðžž? åܪ*ììvaèÐ>8|xÝá4)3³C‡n‡Ç"ØÛÒN»‹‹ËÂÈ‘¿ÃÓó'˜›÷¤;‰óêUÆ?„ýû¿‰W‚òí·'‘Q„ÇÙ‹÷¶ªªbáßCqü¸/23‹0v¬9ÜÝafÖƒîÐÚ]jêûO‰D%¡¸¸êêÊ1â¿zZZÂ9 Ÿ\…W¯ÞÁÓ“[@ôíÛ|¨«+êŒÒ#F4¯3JAÁ89íÅ×_ºkÚ¶(+«Ddd^¿æŽàxñ"99%•eÀ̬ë’‰Í IDATÖÁ!::´ºw'£7ÄIfH‚§O“0eÊQDGo“È»u ¹y3nnfµ’.cÓ¦›xöl£P Ë{ô(;wÞÇÛ·ù˜1à ?ÿìÖæm™“Sgç½°¶î‡ãÇgÖyœÅâ€Ãá|”A~~¢£3áàP;päˆ7ôÂÓ§ëDæÃÈÙy/ÖÁΓè¥Ý=ꃣG}¹•î ŠŠj()ÉÕú‹Å«ë>téÒ—//–è»Îéé…ppØ¥KGbÅ ç:üX EE¹z^)~X,îß#G¼“ }¸»;ÂÎ΀îÐhÁfsÉë’òüy ªªXÐÕUçMI>\O(Gd’-!!žž‘xø0‘‘éPQQ€££1ÜÜÌàà`Ôè ©7˜:õ(®__*Ö#Ö23‹ðüù[¼x‘Š/R› ‹míÎ:´Ï§Ñ:06Ö»PŽ$3$ÁÙ³8xð1^¿&Å?kp8zôø pðàtLš4[Û°±Ñš9×/_¾ÃÎ÷ò£G÷ÇúõcùÚ& 3fœÀ–-1gŽ ïç™™E˜9óV®tÁèÑýù¶¾ú¸wï5´´T±h‘=¾ùƲÎhITTTŽ  dr“©©ï¡¨(K˾°±ávJ16Ö’¸D5!¼ Ëñøq ¯3 “ÉÆÐ¡ÜÎ(nnÿuF),,ǰaÛðÇ3àâbJsÔôàp($&æ|¹ÁÁ‘’’iôï߯éÁÚZ$7DIfH‚™3O¢K—8xP²ªÛ7ÆË+³gŸÀÝý i°ÙiáØ±ï ¯ß¯ëËÍ-ººJ“A……å8xÐ çΡwï®X»vl³:”´‡CáÛoO ))..f8{ö)¤¤¸?ïÐA±±Û:÷|É’pçÎ+°Ù€¬,ŒgŽ={¦ˆ\‹Ï¡C·`Ê”¡XµÊîPÚŸ_<¦Oÿ /_nÚ6pâàÇ/áÆç`29`0¤ajª %%9”Ktˆú¼~ޱcböìá¸rå*+«Ád²HáâÅ…u¦µIšwï pâ„?.] …¢¢,fϹsmÈTÔϤ¥ðЉ%¡ àºví}ØÙÀÖVŸœï¡QÓåáÃ(§²’‰“'ýñçŸ>PT”Å?8ãÛo‡µÛàèè L˜ðªªØàp8µ»ti1lm7ÇÚÎn’’rëüœÁ†ªª"V­éÓ­Df8ôúõ7ðìY2¼½WÓJ»Ù²å6||âáç·†îPě͉Éz”–Vò~&+ˇCaݺ±øþ{£>L&ãÇÂë×–æ&gî{6eŠ~ÿ} Í ‡ÂÂrœ=ˆ³gŸâãG&¾ùÆ Ú7»J||¶PwÄâ‡Bllà°0n½~ý4`kk;; ¦K¾ôB¡¦3Êýû¯áå¼¼2hkwFVVþþ{>œœŒÉ£zäç—}Jl$ãÙ³^rÃܼ¬­ÿ¹AF² ’̦¦°zõhÌœiMw(BÃÝý<îÞ›]ÿî/## ‹ƒuëÆbéÒ‘­^ÏÇÕøê«ÃˆŒÌ€ªª^¿ÞRëî)‡CáÊ•0ìÛ÷ÅÅX¸ÐîîŽízAT3­ä¿;—ÿ‘•e`Æ +ìØ!˜‚–,}û®‹Ånò¹7o.ƒ¥e_ÄÁO øæ›ã Ù 1-GŽÜƒ#ôñÛoéEl'cÒ¤?ëü\ZZ |ÿ½Ö¬MFg€;§|þü³ˆŽÎäøúœªª¢£·‘BµŸùø±ÿþŠ'ü›Ý¥²’‰¾}Wcþ|[lÙòU;FK¿ÊJ&BCSxɸ¸lÈÈHcð`O£6 п0¢‘„'ćCáÅ‹·ðôŒÂ©S`³¹E1]\¸#6,-û’ý´Ÿ'7‚ƒ“‘œœYY à&7† Ó…¥¥.äå%sÚ¢ É qGQ´µ‰³ ‰llvàÍ›ü¯™vò÷ßóàìܺù…l6³gŸ†¿X,6¤¥¥°iÓ,\hðõÇöíw‘˜˜ƒo¾±ÄÊ•®íÚA¥¦ Þ‰þ¼i%õéÒ¥#"#·äÂÿÍ›<ØØìlÖsEe “Ɇ™Ùüü³æÏ·¥;ËÍ-Á A¿áüù9ÒˆîpÄÖÆ7qþ|0˜LV½3Ò06Ö™3s¡­Ý¹£Ç`É’PUŬ“œýÜ­[Ë`a!üÉÑöV_”%KëwñbV­º˜={8¶oÿZbïöæç—}ê’’ÿDäæ–@UU Ç÷ãMIéÕK2’Û„ðš=û4X,ú÷Ÿ.]:ÀÕÕ ®®f°µÕ—ØzBÍ‘›[Z+¹‘’’yyXYéÂÎÎvv02ÿ‘jB†$3Ä]ii% ×ÂÃcìí%{Žp îh€U`±êÞ±””äpñâ¢6Ýüå—«¸xñY­;ƒ;*àüùù8pÀ ‰pq1ÅÚµcø^££9¶m»‹£G}šõÜ»wW¤é½{¯±hÑ94tª¹ÓuîÜ|‘j—çî~ùù¥¸zUü‹î^½ú«V]A\Üv‰iyÙÞ(ŠÂÀ¿"/¯´Éçöë§GVŠTá\~yõ* cÆhòy²² ÌkƒÍ›'´CT¢ëË(K—ŽÄ˜1æ¼é˜66;‘šú)))|õÕ :4Üåwú ·KJBBÞ ¢¢::Ýx£6†ïºÃ$$ÌÞ½qÿþkøúr§„¦¤äÃÓ3÷ïGâõëttì(#ŒÓ¿É–¯]Œ€€DøúÆóêꨫ+ÃÁÁˆW[§¾î2_‘d†¸ËÊ*Æ!¿áÎå2D|ûK·Dbbìíw×û˜Œ êêʸrŽM-ñÆÎ÷ë|Iç.¿#45U±víXX[ëµzmEQΞ}Š­[ï€Íæ4˜Ü‘•e`Á;lØ0Žï1ìÛ÷‡{ש]RRR3ÆGŽÌ¹;·o¿Â²eÿ 2r+TU•èG –,¹€üü2\¹âNw(bëõët¸¹íoðq)))P… bçÎIb¿Ï5&<ü–.ý… žÓ@KK/^lnÇÈD×çP´µ;cáB;hkwÆÜ¹gj}Æ1Ò9Ò'OÎ!Ó>Ãd²ö  LDdd:¤¤¤0`@/8:ÁÎÎææ=ÛœJK+ £?ˆF]¾†M›n"!¡îˆØììbxzFááÃ(„„¼ŒŒ4ìì ?µ|5AçΤ8pc8 ‘‘é L„Ÿ_<^¼H‹Å‰‰ìí akkK˾äÜÈ$™!îràà°ÞÞ«ÉЧOîÜyw÷ u¦UÈÈ0 ¯¯ÅPWWnõòoÜx‰eË.6:Ú €þö¯5RSßcùr„‡§68Õ¤G. ÛÈ÷uÏŸFÕY¯””,°ÅæÍDrØrii%ÌÌ6`ß¾o0iҺÊ¢`n¾ ‹ÙcÉ’Ö×–!·{÷=êSï´ ”•åñûïS1zt¢>UU,üþ»'Ž÷…””T½u3àñãŸab¢ÝÎщ.n?\º‹ Š¢ê$Œ iXZöÅùó H‘¼•#00  ðõGvv1TU•`kkC88µø¤¸¸ÆÆë±ví,]:R$?7 Á»y3K–\@VVã#Ø Ëáå"˜6›++]¸¹õ‡››ºwïÔN‹®òò*'ÃÏ/ xó&ŠŠr°¶æNI±·7„žž:ÝaŠ’ÌwqqÙ9rIf|æ÷ß=ñçŸ>µF0Ò°¶ÖÙ3sÛT|óéÓDL›öWƒÏ÷ˇ««)Nœ˜Ýêõð‡Cáôélß~Ný£4|}×ÀÀ€¿Óa,-·"=½÷îõ—6oþ¯¶ˆ¨š6í8TTñ×_³èE`¢£3áì¼^^?ÃÔ”|)këíHM}_ëg5_VÆŒ1Ç®]“HKÍz¼|™Š%KþAVVQsšŒ ?üà„•+]iŠNt=þ&FMkó/ÉÈHÃÔ´.]Z,RÓé—€€øùÅãÙ³7¨®fÃÐPÜ/<͹›{õêsüðƒÀÖV‡ 5µÖß”!ÄÓãÇ1˜5ëÞ½ÛÛì>TÁÇ'DÁÇ'ååÕ4¨\]Í0fŒy‹oÌ=y‹G¢±eËD‰šššž^øé8O@PPŠ‹+ ¥¥ {{CÞ±Nº!µÊ 2±‘8±±YµºgHKsçúþóÏÂ6HÂÃßá»ïN58"£‹ÅÆýû‘xùò]«×ÅoÒÒRX°À¾¾«afÖ³N±OYYixzFòuÕÕ,df}ƒ4 Ž›)ò‰ pv6…O\½ShÄ…¿<ºuë-ºC[oÞäÕIdÈÊ2Щ“þúkNœ˜E 8vÌgÎâùóMm^›ÍAHÈ^ììbôîÝnnf=º? Ò©scŒ¢(˜™mBaá0Ò––¯¿NÄìÙÃ…îZ¸=–ÃÇ'OžÄÂÏ/¥¥•è×O£F™ÀÉÉC†ôá%+›²{÷:ôîҮL3wii°²Ú†~Ä€½è‡v••LôíËýB.--…;&aæLë6-³ à\]÷#'§¤Þé%Ü/) ¢¢--UX[ëáÇ…¶Òqrr–-»ˆ¨¨t^M‹°°Mèу?¥×¯¿À²e!##Î;àòåïah(^ 7—}0 vïžLw(|÷ñc5ŒŒÖcÏž)˜2e(Ýáˆ-g罈ŽÎ„¬,ŠŠrسg2ÆHwX"éãÇjìØqgÎBJJ ›6MÀâÅöt‡&2ZÒ àŽ"êÚµ®__Š>}Z_T›àŽxyñâ-/¹“õ©H£ž<‰­÷5 †4 5qòäl’´#ð믷ðòe*îÞ]Á×åR…ˆˆto8 “'ÿ‰7`0¤ë$ï iÞT6›ªóø¿ÿα±x%¬ÛCCÛ//¯  ¸y3AA‰¨®®[ àŽ‘••ÆîÝSx©CCC‘––&°˜‰¦õêÕ –––íºÎ©S¡wï®Ø³gŠ@ן OÏ(xzF":::)aÔ(c()ÉãߟÕ)f-#Àªª"Ž›…áÃkÎÍÏÏh¬Â.=½Ïž¥ÃÏ/¡¡)àp( ÚNNÆpr2†¾þµìrsK0hÐo¼éî22 ÈÉ1°{÷d|ýuýÅèEñýUVV†‚¯µ5Ifˆ;6›ƒž=WâÔ©9|©tŸ››‹¸¸8>DFÿ4üõ×+üú« ôõ»´iY…ýûÞ Ò½zuB*èÑCݺ5\øÌÞÞ¾Mënˆ‡‡f̘Á÷åÊÈtšÚL0™9xÿþ_–Ùµëדë‰ÜÜcàpû¥†®Ó\ÍTšû÷ÄÀâ52jóæ[xú4ÞÞü›zÔV¢~~ú’—W þþ; ‹ „]ûï?02Ì©¸¸8äææ dÙÍQUÅÆŽÁHJ*ÄÑ£®PUßÂk‚ø¼‰‹‹ÃÛ·(-­FYYÊʪQVV’’*”–Vñþ]\\‰¼¼¨¬d¢C9¬^m…~ýÈ”“–hjû ²YYE>§&™þÕWƒ°sç$,^<ü ‘h…éÓ§ãâÅ‹í¶>6›CÃuضí˜:Õ¢ÝÖ›–Vð)±…œœb¤§Õ{M&-- Š¢°|9·0sÍ´ ??¿v‹UXACC¥¥•ð÷Ç“'±ðñ‰CAÁôîÝ#GcÔ(¤¥`ݺëµÉŸû»vMFÇŽµ?ëDñý­y?>y!Cg0„à1ÒèÐAee•|]® ¾Œ Ú»wAxúÔ }û¶ýNUQQ9þøÃ½{wmvøöú²%ˆ/ï,'NøáÛoÏBEE¡é4aëÖ;X³f4ääoÖ‚Jî4—‰‰6zôè /¯h±Kf$ÀÞÞî0ê%ªç§/%'K#"br›ZE·V{œ§™,i—‘NFu5Kh÷å¶ôçMŸ>=Z´ý>~¬FEEµÐN­6ÍÙ~‰‰9M&2€ÿ® îÜy…ÐÐtï.Óî_¦‰ÿÐq]Ÿòò*XXôi×õöêÕ‹ÙcâĵF |‰Ãá~?rÄ~~ 8qbzöäÞtüâË«Dù<Ù ¢¢€qã`ܸàp(¼zõ^^1ðöŽÅ™302ÒÄ—oïÇ~ÂÂÞâäÉÙ07ïYë9¢ôþÖ—|!ÝL$€šš2òòJéC(ÌœiÍ—DtîÜ}ûª5;‘!êdd¤áîîÈ—DlÜ8rrâŸOuq1ãGÑt‡ÁWÙÙÅHHÈÝ¡ˆµùómiIdHkk=±Ld#EE9’Èà3/¯˜:EÃbq™Y„—/» -M‰¶Q‹DûóõGïÞ]i«]ãí׬}•Íæ 66{pçΫvˆL4IKKað`¬];Ož¬Âӧ뜜ÇK }‰Åb#;»cÇıc¾buìKÆ·0 §­­Z«¦$·º„ðsq1A||vƒ-õDQ@@"äåe`e¥Kw(Aëòå0^îúÈËË@YYšš ««SSmXYéBJŠÂ‡2¸Ÿ¿-× áu÷nÆ@Ûú==#ëŒh“ÉAEE/>Õ«}ññ#S°Á‰””ü&»L±Ù°Ùlß~S§C^žxÔÿÛ¢´µ;“dAÐÄÒR**Šxô(‹ÙÓ_øùÅÃÒR ²t‡B!±Ö­‹Ž塨( 9(++@II ²PVnxeÍ4‡±cÍÛ+T‚Foßæ#**ûö}CËú++™ðöæN™’“c@JŠÛ:˜Ã¡@Qu‹.#£óæ]Ä©SsIG¤F<~YYé:ÅUëÃáP MƒÃ.,\hNëtO~ É Ð£GDEeÐAH$YYFŽ4ÂãÇ1b‘Ìàp(&ÂÝÝ‘îP‚ $š››Ý!"àÊ•çÐÓãŽÌ¡CZZÆyy¨©)CAAŠŠ²PQQ„‚‚,d¡ªªÄû·ŠŠ"¹I¹ððgŸj:DFC(ŠÂ… Á>GF†›Dª ÎfsPTTÝ»CÍÆÖ­S +Ëh‡hù$3$€®®:޼ɋÅáU&¢ý¸ºšÁÝýŠ‹+í. ¢£3PXXNê A„«¬dâÂ…`üô“ m1èëwÇñã3i[¿¸‹ŽÎäý[CCåS²HªªJPR’C‡òèÔ‰›8’——…ªêI¤ää$˜˜ôF^^)´µE³ÓIfHCÃfáÝ»÷ÐÕU§;‚8vv†`0¤áåƒ)S†ÒN›øû'@]]FFšt‡BAD#®]{‹Ó®íX‰öefÖYY­ë èçW##]hhˆf" @%‚®®:dd¤‘Cw("­¼¼;vì ; ¾INNÆßÿÝ®ë,**ž={eeeصkW½Ï·÷ZEEÆéâñãºCi3ÿØØbºø|?§c9âvüÐlCÑF¶Ñq½ÐÞÄñú„ÅâàèQ̘a…äéGèݾ}aaaµ¶ÿçûEKŽQÚODIfH99èètC\\6Ý¡ˆ´²²2lÚ´‰î0ø&>>ÇøzæÏŸ·oßJJJpúôiÞ¿ýõ×z_#nï5ÀmÑêçêjÝ¡´Zyyž? {{Ò’µ1ŸïçMùüøhËr>'ŽÇO{#ÛP´‘íÇ_íu½ÐÞÄýúäÊ•0dgcþ|[ºC ëpõêU×ÚþŸï-9Di?u$™!!ÖÁ«Wïèƒ@>DII @GG 4GDTTT# ‘îPZ-$ä X,llH2£1-ÙÏ??>Ú²‚¿È6mdûÍ!Î×'••LìÝûsçÚ@SS•îp„BcÇzCÄm¿G$™!! êððw šÛä™O àää„ýû÷CKK jjj8sæ ~þùg¨©©ASS—.]â=?** LJ‚‚ôõõáááѪåøùùÁÜÜòòò044ÄíÛ·yyypqqÁùó硪ªŠéÓ§cß¾}¼×åççcÈ!(..nðw:uêz÷î:`Μ9àpïë,Ì8–/_¨««cçÎZö~§¦¦ÂÁÁ¡Ör§NŠÐÐPL:yyy˜:u*‘››‹qãÆ5;>qz¯55Uajª /¯hºCi5?¿xiB]]™îPø¢%ûyKžûù~^óº‹/BWW:tÀìÙ³Áf³ë_žŸ|}}›µœ†ˆÓñÃϲ é³aè©©A^^ÈÈàvX#ÛOtðãzhx_h걆Αäë“Ó§PQQeËœè¥]5´}¹½àÒ¥KÐÑÑ¢¢"&NœXo¢ãËý¢¡ã !¾Ÿ´DSçÀ†ŽÑiÓ¦áÖ­[€ÌÌL 07nÜdggcàÀ(**j}`!bb2)MÍTrrn›–“““Cùúú6ûùÙÙÙ”´´4µqãFŠÃáPG¥P»ví¢8µgÏJOO¢(Šúðᥩ©I9r„ª¬¬¤¼½½)*(è<@ IDAT(¨EËÉÉÉ¡”••©³gÏR•••Ô­[·(%%%*>>žJOO§©¯¾úŠ ¦®_¿Néëëóâ=|ø05räÈÔÂ… ©ªª**99™êÔ©åãã#°÷¯¥.^¼H5÷°¾{÷.%%%EýôÓOTyy9HuêÔ‰ºzõj‹Þ︸8ªk×®µ–mnnN=~ü˜***¢455)___ªººšzûö-Õ¡CŠ¢(*==’——¯76~¼×-}?ÚÃþý¨6Sl6‡îPZÅÆfµuëºÃh ÏO-yîçûyvv6%''ÇÛ—SRR(UUUÊËË«Îññåù)!!¡YË©ï÷jëñKÅÆÆ6ûù-Õ’åóë³AÒ¶¡ ?oZ²ý>|HiiiQIIITii)5~üxjñâÅE‘c°1‚Ü~Ó§O§¦OŸÞìçóëz¡±}¡±Ç;4FX¯OZúþ·T^^)e`°–:|ø‰ÀÖÑ^|}}©œœœf=·±}èËíAÉËËSׯ_§>~üH8p€@8p Ööÿ|¿hì8ø¿®c[òû·FK–ߨ9°±cô矦fÏžMQ÷º\^^žš5kEQõÏ?ÿPæææm‰÷¹ð\åÅb±)}ý_¨ ‚Û´œÖ|Y@}øð¢(ŠJLL¤ddd(&“IQE…‡‡SEQÔ¥K—¨AƒÕzýòåË©+V´h9ǧlmmk-gÒ¤IÔo¿ýF¥§§S¨ÌÌLŠ¢(ªªªŠRUU¥"##)Š¢(+++êܹsþ.yyy¼ŸY[[S7oÞlöû!lÉŒÎ;SÕÕÕ¼Ÿ­_¿žúꫯZô~7v±@Q¥­­M½zõŠ¢(ªÅ my¯)Jø’5IÅ—/Sé¥Å22 )MÍT@@Ý¡4Hç§–<÷Ë/R¨¬¬,Þzmmmy?Ÿ_žŸZ²œú~¯¶?”Ìà×gƒ¤mCaIfܺu‹ÒÒÒ¢¢££)Šâ~1-**¢(Šƒ¶d?®Û{¬±s@c„õúDÐɌŋÏQÆm£>~¬núÉB®%_¶Û‡(ªöö^½z55mÚ´Z¯733k2™ÑÐqð%~]Ç [2£¡s`cǨÕ³gOŠ¢(jáÂ…ÔÒ¥K©Þ½{SEQóæÍ£Ö­[×–xŸ“i&‚Á†••.è™÷Õ¡C€””äåå!##ÃûÔÔTÄÇÇCGG‡÷çÒ¥Kµ¦|4g9Ð×ׯµ~¤§§¤¥¥¡¥¥““Ä píÚ5¼yóÑÑÑøúë¯ü= ÔÔÔxÿõŽººº••åýßÔÔÙÙÿŠmÎû-(âö^€±±zôè,’SM   ‹¾t‡Âw-ÙÏ[{Lhjþ×ʶ±ç~~~jËrÄéøá×gCkžû9² [gìØ±˜4i¬­­Ñ»woüðÃu†“í'üøq½ÐØ¾ÐØcÍ9´'aÞ¶>>q¸}ûvíšÙ¦_ Fšs®©‘™™ “Z?366nrMŸæý¤-ê;6vŒŽ1%%%HLL„¿¿?–/_޲²2¤¦¦ÂÇÇcÆŒiS<$™!Aìí ðôiØlᜯ¥¢¢¤¦¦ÖúsìØ±/çýû÷µ~VPP€N:¨{2™2e ®]»†‹/⫯¾â} K‚/ß§¼¼LMM1uêÔ-gÀ€X¹r% ggg˜˜˜`Ò¤Ipuu­÷ù²²²˜8q"àèèXë±+Vð*ðŠ#+++üôÓO°³³ƒ¾¾>z÷î… ¶h}úô¥¥% „ &`åÊ•>|8ïquuu,]º/_¾lt9âþ^×°´ì ETß±…ÜÜ\XXX@EE¥Îòê;ðã8h®–þþt/_ПÓõÄû‚L~–0nnf8yÒ))ùèÛW­éÐ@[[ÚÚÚm^NMšÆäçç#((W¯^Exxx›×)Šêôao)Œ1¢ÞÇÔÔÔàììÌû?…ÂÆÕÕ îîP\\UU%ºÃi’Ÿ_<ììOÿ‘––nö~þåñÑÚåH~}64Ù†ü%//›v[Ù~‚Áë…Æö…¦ö“/ÏÙÙÙðöönðùfff077ûë“5k®BV–;'Ñ íÛ‡ê;ÖÍÌÌ`ffÖàòê;ðã8Wíù9]ƒL3‘0}¡¦¦Œ"éE(¼}ûÛ·oÇþýû›½AübggCZ$ ~øP…ððw°³3¤;‚ ‚à‘••E·nÝü£¤$ü7 ÚêâÅM‚­-™bBAtJO/ĬY§`ggˆ ÆÑA ’Ì`#G£gÏ.dtAÐÈÙÙ _2#"" %%¤^AAШ´´³gŸ‚ºº2Ž%? âsdì°“––ÂÌ™Öøã'øå—ÑèÐA¾Ù¯õóó\`D›IIIµñõ2PV¶FYY((ªŠOQµNÇŽ`2³QU•Nk‚ââbŠÓ§šú::Ýè‡Çß?ššªÐ×ïNw(-FÎOü¡¡¡!Ðåçææ"77W ë ‡l?ÑæááºÃXÓ§OoÖó*+™˜?ÿ ËñàÁPR’pdÂ'..qqqt‡!¶Dýý%É 7}ºðÂåËa˜;צÉçwêÔ &&&íÑ#FŒÀ•+WÚ´Œêj6NJ@FF9¶m›‹îÝ•ø]ËQ…óç“Q€ñã{ÃÁA‹¶XÅÒ²/:uR£GÑX´Èžîpx¸-YEkT9?ñ—¼|óÜ-¥­­nÝ„'yG´ Ù~¢mùòå˜8q"ÝaH´^½z5ùœª*æÍ;ƒ˜˜,\¹ò=45UÛ!2áB>Óeee-[ßß/ß)Š¢„³Œ>Ñn6l¸G¢²22dèš$«ªbaöìSˆˆHÇÕ«î05Õ¦;$P…cÇ|±sç}Œ?ûö}YºÃâ«%K. '§ׯ/¥;Ü!­¦¦ëqøð·˜0a ÝáA„DÉÎ.ÆÜ¹g–VˆK—Ã̬Ý!„0zA¾¹˜?ßÙÙŸw/‚îPUW³0wîi¼z•†Ë— E"àN™qwwÄ?ÿ,„¯o<Æ?„ŒŒ"ºÃâ+WW3„…½EqqÝ¡‚ƒ“ÀáP°±Ñ§;‚ ‚(OžÄÂÍm?ª«ÙxðàG’È ˆFdn˜8qöï6›Cw8 ˜L6æÎ=ƒ—/Sqùò÷èß_øz—ÛÙàÁƒÁfSpsÛ  dºCâ{{C0ÒðòŠ¡;Ü)&ff=Ð¥KºC!‚ ‰PZú?þø/fÎ< [[ܹ³½{ÿ¿½ûkêÞÿþÎd†- 2q[nWUênÕ*VkµZGmÑÖq½¥ýµVm«ÖY÷ Ž^µÚ:n­Šóºªu‚XAÙa“õû#¥‚¢%ï×óä!9çä|?‰G%ï|‡½ÐeUi 30sf/ÄÆ¦bÏžËB—B•Ld¬Ç¥K1رcš5«zAF1ìß?:xã­·Vá‡"„.©BXY™¡}{¯*³DkDD—d%""ª*•›6A@À8~ü66m‡eËF¾ÔÄüD5à xz:bÈÖX¼ø0 UB—C•D©Tcüø¸x1ááѼù‹'¤š……)V­Ðоøì³ý˜:u; ŒÿšíÝ» ""¢ÿûwÿ~bcSѵkCAë ""ªÎ´Z-޹ÀÀEø×¿öbذÖ8yòôìÙXèÒˆŒÃ Ò íƒôô¬][=¾í¦çS*Õ˜0aþ÷¿¿°}û{hÙ²žÐ%•›H$”)=°yóxüöÛ-/ãGB—õôìéÜÜBDDD Zlj‘°°0Åk¯yZQu¤Ñhqðà5-Æ;ïl€¯¯3""fcþü`X[׺<"£Â0ƒôj×¶ÁäÉݱtéoHNκ2 ¥RI“¶àÌ™hlÛ6­Zy]Ò+éÞ݇Í@a¡ ½{/Á¹s ]Ò+sq‘£Y3w9"ìP““'£à ™L"hDDDÕInn!6m:ƒ.]¾Â„ ›àåå„£G?ÆÚµ!ððàRÇD¯‚a•0iRwØÛ[â³Ï~º2¥R÷ßߊˆˆ(lÛ6­[{ ]Ò?âáဦ¡m[/¼ùæ*lÜxZè’^YïÞMðßÿÞ€F#ÌŠÙ*•gÎD£KΗADDTîÞMÆçŸ@«VÿFXØ~xãĉÙX³f üü\„.Ȩ1Ì LM¥øòË!سç2Nœˆºª`*•“'oÅñã·±mÛ´iS_è’*„……)Ö®ƒ3zbÞ¼= Ý¥R-tY/­wïÆHMÍÆÅ‹1‚´åÊ}(ù 3ˆˆˆþŒŒ\lÚtýû/EçÎ_âàÁk˜<¹;._þ. oo'¡K$ª¤B@UO·n 1p`KÌšµÇÏ‚¹¹‰Ð%QP«uAÆï¿ßÆöíжmõ2ЉD"LŸÞ~~uðÁÛ•ˆuëÆÂÑÑJèÒÊÍ×·6ê×wÄ‘#×ùó9y2 ®®¶ðòâ/YDDD/C­Öàĉ(ìÚuGŽÜ€L&A¿~Í0gN?´m["‘H艪‘V«¦?3UiiiÙèÚu!^½)¾új¨ÐåÐ?TdüöÛ-lÛ6íÛ{ ]’Aݹ“ˆõ(,TaãÆqhÒÄMè’ÊíóÏààÁk8{vN¥·Ý¿ÿR4lè‚E‹†UzÛDDDÆF£ÑâòåX:t {÷^Ar²mÛÖÇðámЯ_3.¯JdX—8Ì„Jeoo‰o¿} [·žÃ¡C×….‡þµZƒ©S·ã·ßnaóæqÕ>Èt=œoog/ÃÞ½]R¹õéÓ±±©¸}ûQ¥¶«PäáêÕèÔÉ·RÛ%""2&*üþûm|üñ.4o>ÁÁËq£GàÂ…yسg †oà ƒ¨p˜ •)0°Æë„?ܦMÝàêj+tIô’Ôj ¦Oÿ‡ßÀÆï cÇšóAU.7Çöí¶S¦lí[0{v_H$U;ÃmÑ¢.œ­qèÐuøùÕ©´vOºèܹæ\#DDDå¡Päá÷ßoãðáë8~ü6òò”hÝÚ“'÷@ïÞMP¯ž½Ð%ÕHfBÏ¥TªñúëßÂÂÂ?ý4¹Ê¤'Ôj >üp¸ŠÇÕèIwíºˆY³v¡C¬\9ÖÖfB—ô\³fíÆÕ«päÈÌJmóÆ8üúëŒJk“ˆˆ¨*Òh´¸y3'OF!"" çÏ߃D"F§N¾èÓ§ ‚‚üaoo)t™D5Ý%†ôBý•Œ^½–`Ò¤n˜9³·ÐåP9¨Õ|ôÑNìÛ÷6n‡®] ]’àþøã>ÆÛKKSlÚ4®JOryâD$FŒXƒ æÃÍ­rzDµm†Áƒ_ChhŸJiˆˆ¨*‰‹{Œ“'£pòäœ>}éé9ps³EçΠн»ºvmÈIñ‰ª†T>;w^ÀGíÄ?¾W£†*#F‹™3w`ï^]Ñ­ƒŒbII™?~#¢£“°bÅhôèá'tI¥*,T¡iÓyøè£>?¾³ÁÛ‹‰IA‡ÿ‡½{?¨v«Ü•F¡ÈÇÙ³ÑE½/î &&ÖÖfðAçΠХ‹/<=….“ˆÊÆ0ƒÊoÆŒqôè-80 B—C¥Ðjµøè£]øé§‹Ø°a\•ý°.¤ÂBBCwá?ÿ¹ŒÙ³ûâý÷»WÉåÒ&MÚ‚ÔÔ,ìÞ=ÙàmmÜx_}õ+nÜø2™ÄàíU¶ÄÄL\¸p.Äàÿû QQ‰‰€V­<йstîì‹fÍêB*åj"#Á0ƒÊO©TcäÈ5ˆÏÀ¡CVùyj¢¹s÷`ëÖ³X·n,‚‚ü….§Jûᇄ…íÇ€-°dÉ›05­Zó!ïß“'oŵkŸÁÖÖ m…„¬lÚ4ΠíU­V‹»w“qþü=\¸p/Æàþý4˜˜HѬ™;Ú´©¶më£}{/®:Bd¼fÐËIKËFÿþKáæf‹íÛßã·¸UHXØ~¬]U«F£_¿fB—c""¢0qâx{;aÆwàèh%tIzÙÙhÜx..ŠáÃÛ¬¥R ÿ9øôÓþ é`°vˆˆˆ %7·7nÄáòåû8þ.]ŠAzz¬­ÍЦM}´ní‰6mê£E‹º01©Z_^Ñ+c˜A//&&}ú|ƒàà–X¸p¨Ðå€%Kã»ï~÷߾…!C^º£r÷n2FþJ¥[¶Œ¯ÔåP_dÔ¨µÉ$ظÑp=&Ο¿‡—ãÌ™O96˜ˆˆª<•Jƒ¨¨\½úW®ènÑщP©4¨SGŽ6mêë{^4hPbqÕJJDâ£IzižžŽX·îŒ¹îîv˜2¥‡Ð%Õh+WÃ7ßü‹ cñ ¼½pðà Œ¿,ÃÊ•oW™!:}ú4Á¼y{‘—WˆZµ 3ƒzDDÜÝídQ•›Š+WàêUÝíúõ8äç+amm†fÍê"(¨>þ¸7Z´¨ gg¡Ë%¢JÄžôʶn=‹Ù³Â×_ÅÈ‘í….§FZ¿þ$æÍÛ‹°°7Îð«^TgJ¥Ÿ|òvì8O?í‡÷ßï.tIHIÉB‹ÿÂ?ŒEŸ>M ÒÆë¯‹ÆÝØËŠˆˆ¥Vkpï^ nތǺ۵k‘‘‘ SS)7vEóæõЬ™;Z´¨‹úõ«äÞDTiØ3ƒ^ÝÛo ;»³gÿSS{T²üæÏ߇¹sû3Ȩ2™‹‡¯om„…íGtt¾þz˜ óÂ8:Z¡U+>|Ý aFFF.®]‹«Á Õ99ˆŒLÀ­[pãFMТE]øùÕáúh~úé"V®|¯¿Î!'éôéh¼ýöZ Ø K– gQI Uøøã]سç2,d~’¯¿>„]».àâÅùöç~÷n2:wþ?ÿ<­[{VÈ9‰ˆ¨úHJR :: ÷î¥ :: wï&!:: e¬­kµáççÝO{{K+'¢‚€RʼnDX¼x¬¬L1qâ|õÕ®rRAþøã>BBÖ¡OŸ¦X´hƒŒJdb"ÅÒ¥#àããŒýk¢£“ðùçƒ!•Š+­†Þ½ã»ïþ‹ë×ãд©{…œóäÉ(X[›¡eËzr>""2>J¥±±©ˆŽNÂ_%ãîÝä¢# E>ÀÖÖ^^NðñqFçÎ àç§ëmáâ"¸z"ªéfP…‰DX°à Èåæ ÝŒŒ\LžÜC貌ZTT"ÆŒY‡€o,]:Iå}ˆ¦'¦Lé//'|ðÁ6<|˜ŽµkC`aaZ)m7iâWW[>|£ÂÂŒˆˆ(tèàÃ뉈¨HJÊĽ{©ˆMÁ_¥àîÝdܽ›„Ò Ri ‘ˆáînoo'´kW£Fµ‡——¼½ØÓ‚ˆª,3!ƒÙ¼ù æÌù&Nì†9sú±7Á+xô(ýû/…««-vZµL„.©Æ»zõÆŒY‡Úµm°eË»pv¶®”vçÍÛ‹Ó§ïàøñYÿø\J¥ÍÁܹý1fL‡ ¨Žˆˆ„–šš{÷’“Š˜˜ÄĤâÞ½ÄÆ¦"'§`eeOOGxy9Â×·6ê×w„··3¼¼abÂï8‰È¨p˜ Θ1`cS Ó¦…#%% ‹ ã”/!--C†¬€\^ Û¶M`QE4o^LÃÈ‘kÑ¿ÿwضm|} ¿ÒI¯^±~ýIÄĤÀÓÓñëÒ¥Xää kWa&4%"¢W“ššû÷ÓJ„ÅEV–nXˆ¹¹ <=áéé€nÝÂËË ¨_ߎŽV¿"¢ŠÃždpQxï½Mðñ© Þá¤å Päcذ•P(ò°wï•öí?•_FF.ÆŒY‡;w’°aÃ;hßÞË í©T4m:|ˆI“ºé·çç+ñða:||œK}^ttÜÝí`f&ÓoûòË_qàÀUœ=;Ç 5Ñ÷ØÝñ IDATË),TááÃtÜ¿Ÿ†û÷ÓðàAZ‰ûÅ=,LM¥¨_ßžžŽú ¢8À¨]ÛFàWADT)¸š UŽ»w“1fÌ:(±yóxøû» ]’à U¥öT)(Páí·×":: {÷~ª£ò((PaêÔí8rä–.ààmoúôpÜ»—Š~ƒ£GoáСë8vì6ú÷oŽ5kÆ”úœ÷ÞÛŒ®¢{w?ôéӲ͛×Å—_1h½DDô¬âÞº "µDh‘˜˜ F÷«¹½½%êÕ³/º9 ^={Ô­«{ìâbÃá»DTÓq˜ Uoo'üúët¼÷Þf/ÃÒ¥#ž»tkA ¦¦Õ÷òLJR`øðUøñÇ÷JÌ®VkðÞ{›qíÚCìÝ;•AFgj*ŪU£ñÙg?ãý÷·">þ1Þ¿{™Ççç+Kô(/­V‹7âab"CJŠ-[þb±ÅYôó&"-ÞwâD$""¢ Ñháîn­¸~=»òb"¢ ”’’…‡Óÿ¦#..½è§îqnn!@&“ÀÝÝõêÙ£AƒÚ j¬/êÖµ‡¥eåL2MDd¬ªï§EªrärslßþæÏ߃ 6cúô |øa¯gVSÐjµx÷Ýxë­vèÓ§‰@ÕÖêÕÇqçN"‚ƒ—á矧ÂÅE­V‹™3wàÔ©;صküü\„.“ÊA,Ö­àãîn‡ ~F\\:ÂÂ=s]ïÚu'NDbåÊ·Ëu^­V‹£GoáàÁk8zôÒÒ²!“I R©¡Õjµ.È01‘B.¯UæyäòZ01‘¢°P@÷œ‡ÓðãÿÖ-g`oo‰ÀÀFèÛ·)1Ø "z¤$âãëCŠ'ÁÅc]»6ÄÅ‹14è{¨ÕH¥ôéӤ̹ŒÕ×_Â÷ß…J¥H¥XX˜@¡ÈÇòå#1hP++¤âòåXŒ³õêÙcóæwaaa‚  Åxð jµ¶¶µpòä§°³{qH——Wˆ=!.î1Tªgƒ 01‘ 4´o™Ã[V®<†¯¿>ˆÂÂÒŸ/•Jàæf‹ßÿ˜+æQµ–“S€øøÇxô( xô(ññHLÌ,ºÿX?Á&ØØ˜ÃÅÅFL¸¸Øèƒ ww;Ô®móL/<""ª4œ”„•“S€Y³vcïÞ?ðÎ;pàÀU¤¥eC­Ö}ЉDX»vÌsç×0& E>Z¶\€ÜÜ‚Û%1¬­ÍpôèÇ%æÐ ã“‚‘#×6¬£GoëÈ— énß~„Þ½¿)µW ûfð³Ïb̘¥îß¼ù æÏßûÜç>ü!üüꔫ"¢ª(?_YÔƒ"e"..IIŠ¢ÞºC¡ÈÓoaa WW[Ô©#‡‹‹uêÈ‹B ýмDDU'%aYX˜âûïG¡CoÌžýSÑ\šÇ|üñN´oï]®o²«ºÍ›O£°PùÌvµZƒ¬¬ýÆÍÓÓû÷OCÿþKqøðMÏU*•¿üò'~ùåOôë÷âÎϯ,xsçîAiÙ³F£}á Å3ãÿH¤›ïƒAUe……ª¢Þº!‰‰™%BŠ„„ ¤§çè73“ÁÕÕ¶(¤°AÓ¦îú¢x»µµ™€¯ˆˆˆ*à ª?Î…Z­yæC—V«ENN!BCwaݺ±UW1òò ±rå1ýð’¿S©ÔHJR”˜”ŒWzz62 鿍ø»ÐÐhßÞ öö–/|('RS³‘žþä¾n{æ3H[X˜êà ‡§ƒ «¢ûpp°‚““5,-Ë^¾™ˆˆÈH1Ì a…‡‡cäÈ‘/÷˜×^ëúÂc A©Tòº¤*!7·¹xü8çêCˆ§C ]H‘«ü÷^¦°µ5‡££UQ@a‰úõ‹zSXêCŠâàB.7èÕÕ 3ˆ ¤²B ªÙÊRdBa¡ çꃉ§ Ý-ç©í¹EÇæ  @Uâ}!!!B—R¡rrr°téR|úé§B—B•Ä×òÏ?ÿ ´iÓæ¹ÇÅÇÇcëÖ­èׯ7n\b_e^“ E6o>ƒÕ«ãñcÝðƒšfü=tÐýÔ…YYùÈÌÌÓºí%ÏÎ~v @7dÃÚÚ VVf°¶~4øøX=þ{(ñ$¸°¶6«äwˆˆˆèå1Ì £‰Õ«We˜1~üxÌ™3žžžÏìËÊÊÂüùófÔ †¼–wïÞ×^{í…aÆèÑ£áèèˆ7Þxã™}•qM&%ebíÚlÚtJ¥*•ŒbÕˆ¬¬|ää '§ÙÙú°!;»99ùEÛžÙÙ%Š⢴a2™DB<¹™ÁÑÑ ÞÞN°²Ò=¶¶®Ut\Éc­¬Ì8U{Uÿ7F¢jâðáØ2eŠÐeé=xð_|ñ6lX©íþõW2V¬8†Ý»/B,A©T—Ø_P Bvv,-M+´Ýœœäå)‘“£ tÁƒîVÜB<äë÷¯ ñôv…"¯Ì6ÌÍM`ii ‹'½",-MammWWÛgzK< $žµj™Tèë&"""ªŽfÑÑh4˜:u*6mÚ333̘1Ÿ|ò ÒÒÒ0|øpôíÛ‹/†R©ÄÂ… qëÖ-lÞ¼R©ß~û-Þ|S×}ýèÑ£˜6m¢££Ñ¸qc¬]»¯½öàĉ˜6m"##áé鉅 "88XßÆØ±c1þ|$&&bèСX¿~=$ æÎ‹5kÖ@¡P [·n…››†Žääd >ëÖ­C§NJ}mëÖ­CXXRSS1lØ0¬_¿b±¸ÒÞ[ª\u-ïØ±³gÏFRRzõêµúI8pýúuLœ8—/_Fݺu±`ÁŒ1cǎŃ0zôh|÷ÝwèÛ·o©5Vä5yåÊ,_~GŽÜ€D"†Z­Z]ú±÷ï§ÂÅE^ÔÛ!yy…ÈËS"##¹¹…E¡„®—Cñc…"¹¹ÈÍ-DNN!Š<äå)‘—§ë%Q©T 3Èåµ`aa KK3XZšÂÒÒõêÙëÉâmÅÁÃÓÛu!E-ÎADDDTIfѹté:uê„ÄÄDüñÇèׯ|||бcG?~ˆÇêÕ«1nÜ8|õÕWHNNÆâÅ‹1oÞ<¼ù曈‹‹Ã Aƒ°eËôêÕ ß|ó † ‚˜˜$''cÀ€X¶lÞzë->|#FŒÀüœ:u ^^^¸}û6âããѲeKŒ97nĹsçàììŒQ£Fá‹/¾ÀªU«°fÍœ:u kÖ¬A»víJ}]jµ/^Dtt4>|ˆV­ZaôèÑèÖ­[%¿ÃTY*âZþóÏ?‚ððpôíÛ«W¯ÆŒ3УGäää W¯^˜3gŽ;†3gÎ`àÀðððÀwß}‡ˆˆ,_¾]»v-µ¾Šº&IJe¿áüù{É$ÐjµP©ÊH1Š-.sŸ¹¹ ÌÍM`aa ++]OssX[ׂƒƒÌÍMann›Z¨UKVÔ[ ––fúÇ66æEÁ…)WÑ """2B 3ÈèÈår|õÕWÉdèØ±#¦L™‚ððptìØ³fÍ‚H$B`` ¤R)fΜ©¼dÉÀÎ;ѵkWý\¡¡¡J¥ÈËËþ}ûТE ý\ÁÁÁèÛ·/vî܉ & °° ,€‰‰ <==Ñ´iSdffB&Ó} *((€••ÂÃáT*õ5‹ÅbÈårýq¥ùüóÏabb///øûû#33Ó€ï$ ­"®åððp 4ƒ LŸ>6lüòË/pqqÁäɓݻwGHHvïÞ€€ˆÅbØØØÀÔ´ìá¯zMªT\¹’—é9r D"]…¿))X,ÂĉÝн»,-u…¹¹IѤ–µÊÕ>Uo 3Èèxyy•7nŒßÿ]ÿØÂ ‰`jj ©Tª\,66¾¾¾úÇ2™ ³fÍÄÅÅ•Ø 4ÀÇõ]\\ô÷‹ÏÛ¯_?;v Ëå œ9s —ËËõº$ Ÿ9/U_q-ÇÇÇÃßß¿Äy5j@wGFFÂÃÃC¿///¯Ì!%÷O®É¸¸t¤¥=YiC«ÕB&“@­Ö@£yvÒË’íŠaoo‰€ïr·GDDDD5 ã“ÑIMM-ñ899vvv/u+++ddd”ضgÏdffÂÚÚú™6ÒÒÒ`ccóÜsjµZ,Y²iiiؽ{7òóó1xðà—ª‹j–Џ–mmm‘œœ\êy­­­Ñ©S'ÄÆÆ–¸­ZµêŸ^ ¬ƒ„„ïðàÁüúë |úi¿¢Þº¥?¥R1$’g‘H·Ò QYfщÅ/¿ü@·|äš5kÊýMs±   ìß¿_ÿ!ðüùó5j$ ‚‚‚ðÛo¿áÞ½{€¤¤$üç?ÿA``àsϹpáBtíÚR©mÚ´ÁèÑ£ñèÑ£2ß·onܸñRuSõR×r=°cÇ$$$®]»†“'OqêÔ)ܾ}››‹V­ZaïÞ½¥žËPפT*F‹uñÞ{]±eË»ˆŒü?;Šÿ{ úöm;;Kºá%R©……jܹ“TáuQõÁ0ƒŒN»víðᇢK—.ðõõE½zõ0a„—:G·nÝ0bÄøûû#00={öÄ¢E‹`ii‰æÍ›cæÌ™hÕªzöì  2½{÷~î9ÇŒƒ‡¢iÓ¦ İaæßïää„)S¦àòåËtsìÛ·ïåߪ6*âZFPP5j„nݺ¡ÿþúàÍÇÇaaah×®áëë‹Æcøðᥞ«²®I±X„† ]0vlG¬Y37n„áìÙ9X²äM Ø‘‘cð:ˆˆˆˆÈx‰´Zíó/Pxx8Fމ—½ óóóqîÜ9ØØØ eË–¯Ü~tt4bbbàççww÷ûbccqçÎxxx<3‡FY páÂäçç£Y³fprrÒïKIIÁ•+WкukØÚÚ¾rÍe9r$`ûöí~n*ŸW¹ž+êZ¾~ý:’’’ЦMX[[—Ø›7oÂÕÕõ™ù5 éUÿ~@FF.ärsTEDDDDÕÀ%NJFÉÌ̬B–,õññO©û<<­V‹Áƒ[UrEDDDDD†Å0ƒˆÈÈYZš¢gOH¥Ï2™={6 *"""""Ãa˜ADT Ø jµºÄ6©T‚Þ½›ÀÜÜD ªˆˆˆˆˆ ƒaQ5У‡jÕ2-±M¥Ò`ðàתˆˆˆˆˆÈpfU&&R ТÄÜ––¦èÒ¥€Uà "¢jbР–P*uCMd2 ‚ƒ[”91(‘1c˜ADTM´oï[[ݬJ¥ƒq""""ªžfU‰X?G†££Ú¶­/pEDDDDD†!º"¢êææÍ›‚µÝ¬™-ÀËË·o߬777ØØØÖ>Uoì™ADTÁRRR’’"HÛ :¢NkŒÝRöÝëÏÏϬ}""""ªþØ3ƒˆÈüüüàìì,HÛŸ|Òo¼!Ü’¬'Nœ¬m""""ªØ3ƒˆ¨š)ž7ƒˆˆˆˆ¨ºb˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a•iüøñˆ‰‰º """"¢fQ™>ŒÌÌL¡Ë """"*a‘ÀŽ= ˜˜˜ eË–¸té’~ß?þoooH¥R¸¸¸`Ñ¢Eú}sçÎ…££#LMMÑ­[7ÄÅÅ•kßõë×Ñ¡C˜™™Á××ááá€äädôêÕ [¶l\.G“&MœœŒáÇãÔ©S•ðN•à ""ÅÅÅaРAøâ‹/™™‰ÁƒcÈ!ÐjµÈÊÊÂØ±c±xñbäää`çΘ={6RRRpäÈlܸçÎCjj*¬­­ñÅ_Às÷åää W¯^1b233±zõjLš4 gÏžEaa!N:…}ûöáСCøý÷ßáàà€5kÖ ]»vB¾MDDDDD%H….€ˆ¨&Û¹s'ºvíŠ7Þx ©Tм¼<˜˜˜àìÙ³hÙ²% ~ýúÉdÈÌÌD~~>   VVV‡R©€çîûå—_àââ‚É“'ºwïŽìÞ½3gÎD^^¾ÿþ{Ô©S ‹!—Ë!“É*ïM!""""z†DDŠ…¯¯¯þ±L&ìY³ô/_¾ŒO>ùwïÞ…4  _¿~8vì —Ë„9sæ@.—?w_ll,"##ááá¡o#//}ûö  /Šƒ """"¢ªŠÃLˆˆdee…ŒŒŒÛöìÙƒÌÌLìÛ·sæÌÁܹsqçÎ\¼xæææ­V‹%K– -- »wïF~~>üÂ}ÖÖõ²U{IDATÖèÔ©bccKÜV­Z‰D•øê‰ˆˆˆˆ^ à ""aÿþýHNNœ?£F‚D"A\\5j„N:A"‘àܹsP(€… ¢k×®J¥hÓ¦ FG½p_`` N:…Û·orssѪU+ìÝ»W€WODDDDôj8Ì„ˆH@ݺuÈ#àïïfÍšáâÅ‹X´h,--Œ°°0téÒ&&&Éd¨_¿>fΜ‰+V`íÚµhÚ´)œœœpéÒ%ýJ'cÆŒ)sŸÂÂÂЮ];´nÝ‘‘‘ÀðáÃõÇÓœœœ0eÊ,]º­ZµªÔ÷†ˆˆˆˆ¨,"­V«º"¢êäĉðó󃳳s¹Ÿ˜˜øùùÁÝÝ]¿]¡PàÂ… prrBÓ¦MñðáCÜ»w]ºtAAA.\¸€üü|4kÖ NNNúç=oÄÇÇãæÍ›puu…¿¿™u¥¤¤àÊ•+hݺ5lmm öú‰ˆˆˆˆ^Â%†DD¬¦˜¯é¯Ÿˆˆˆˆ îçÌ """""""£Â0ƒˆˆˆˆˆˆˆŒ à """""""2* 3ˆˆˆˆˆˆˆÈ¨0Ì """""""£Â0ƒˆˆˆˆˆˆˆŒ à """""""2* 3ˆˆˆˆˆˆˆÈ¨0Ì """""""£"º"¢ê(%%b1ób"""""C`˜ADd©©©HMMº """"¢jI¤ÕjµBADDDDDDDTN—ØšˆˆˆˆˆˆˆŒ à """""""2* 3ˆˆˆˆˆˆˆÈ¨Hü)tDDDDDDDDåtìÿëú¤«óÍUIEND®B`‚bm3.7.0/doc/html/a00219.png0000644000175000017500000001064211365042646013255 0ustar tlktlk‰PNG  IHDRU(NÇi…bKGDÿÿÿ ½§“WIDATxœíœ}PTÕÿÇß<®‚.Šº  ‚€€J‚‰b‘ éPŠ)R¢–¤¢£3YæS…I+¢èbˆ Š")’šò´«è а‹°Ÿß wZØ]]L¿¿óš¹Üóð9ïÏ=÷~öÜsÎ^""0 C/þ× ã T C° Ê`0zĸsBuu5 ÿ - ƒñRakk OOOÕDê„H$"ì`;ØÁŽnŽÐÐÐÎ!”ºŒT;`› C3aaajÓÙœ*ƒÁ`èT C° Ê`0z„UƒÁÐ#,¨2 †aA•Á`0ôˆÆ-UºRVV†üü|„‡‡ëAã™úúzìÙ³±±±Ï½í'OžàСC8{ö,ZZZàââ‚yóæÁÊÊ "‘jë5 !!!ÝÚ߸q#ÚÚÚ ˆ#zÝ~›6mBHHìììºÔW(HIIÁüööv¸¹¹aÞ¼yàóù*åZZZ ‰páÂÀÛÛ¡¡¡022ât„……aذa\[·n!%%aaa*z4qâÄ dffâÑ£G1bÂÃÃUì}:·o}íÚµ¨ªªâêTTTÀÏÏMMM:Ô¸¸8,X°–––˜0aÊËËáêꊫW¯re’““‘ Ëåܵê8JJJ‚‚À¶mÛ““Ó¥\mm­N×VïhúG•®ˆÅbòôôÔ¹üË„ ÿ×2ÏHPPQkk«JzTT;V%máÂ…´pá·Áãñ(//O%múôéñÜì›››ÓéÓ§»Ôõòò¢9sæP[[›JzLL >œär9͘1ƒÞ{ï=R*•\™»wï’@  Ã‡wÑQYYIvvv«“r¹œLMMéÌ™3*é‹/¦ pçÓ¦M£¸¸8vÂÂÂÈÍÍš››‰ˆÈÅÅ…’’’tÒ OBCCÕþ£J/sªJ¥Ë–-ŸÏÇ Aƒ°aÃ@]]°uëVX[[ÃÊÊ ?ýôbbb`ee¡Pˆpv6oÞŒùóçk<‹Å°··‡™™"""°bÅ üöÛo€””888ÀØØB¡›7oäååaéÒ¥X¾|9ø|>† ‚­[·vëSHHd2BBB——™L†)S¦`ß¾}¸~ýºÆ6;ü‰D°··‡¹¹9ÂÃÃÑÞÞXµj¬¬¬Àãñàçç©Tª“ÖÜÜ\¸»»ƒÇãÁÉÉ Gåò4Ù€«W¯ÂÛÛ}úôÁèÑ£±ÿ~úUS½îüÓÔO÷îÝÃŒ3t²ÑSÍ …BmzYYNœ8;vÀÄÄD%oíÚµXºt)÷Z­o×+¶uµþüy\ºt ;vìà^á;X¿~=Z[[qøðaH¥Rddd 11\™Áƒã‡~€@ P©+‘Hàçç‡wß}‰‰‰:émkkCkk+>|¨’‹ÈÈHllß¾b±‡Bß¾}uªÓM÷ŠÞèeŸf¤j``@Ÿ~ú)=~ü˜òòòÈ‚RSS©¦¦† )>>ž”J%}ÿý÷€6nÜHJ¥’6mÚDœ­£GÒ¶mÛԞߺu‹úõëGÇŽ£––Z¿~=Qrr2=|øx<9r„är99s† I&“‘X,&cccŠŽŽ¦ÇS~~>YXXÐñãǵúU__OB¡NŸ>M­­­$‘H¨oß¾4kÖ,:wîÕÖÖjl³¦¦†LMM)22’ •——“@  “'OÒ‰'ÈÚÚšJKKéáÇ4sæLú裸k©IëÝ»w©ÿþ”””Dr¹œÒÓÓÉÌÌŒnÞ¼©ÕfSS …Búî»ïH.—SNNñù|:{ö¬VÿµÕÓæŸ¶~ª¨¨ sss""­6z¢ùÖ­[ôÙgŸ‘£££Z?’““iôèÑZ}ý7Ï2’üüóÏiÏž=´k×.ŠŽŽ&*--}nöÕT¿ùæš0a‚F»¡¡¡´|ùr:räÙØØè¤ãÀdooO£FRÕê¢E‹ÈÄÄ„‚ƒƒiÏž=T^^Þ¥Œ¦‘jAA™ššr£æ\\\háÂ…”””¤r\¸pA­†´´4òðð ½{÷r£ô§AÓHU/Aõ•W^QyµŠ‹‹£Y³fQMM  ¦¦&""*))!ccczòä ]ºt‰¬S; 4{ölî\©T’P(¤ääd’ËåTTTÄåI$âñxTZZJb±˜ø|>) }!!!ݶùï׉DBèöíÛDDZÛìðûÎ;\¾¯¯/¥¦¦Rzz:Y[[Ó_ýEDÿ¯úúzîZjÒºsçNòõõUÑ7gÎúòË/µÚùäruu%òðð +W®peÔU™LFC‡¥˜˜˜.6]\\hܸqôöÛo«Ú¦Ο?OóæÍ£¡C‡ÒÊ•+©ºººG~iªÏ¼úööö*¯VcÆŒANNwnnnàŸUKcccî\W*++1zôhîÜÀÀ#GŽðx<aåÊ•(++ƒ¥¥%”J%WväÈ‘055UÑwêÔ©z ÂÚÚZ§6@(ªè€éÓ§ãÔ©Sxýõ×!ˆ¸¸8îõJ“V©Tªâ?8::B"‘ ..N£ÍÊÊJܼyÇçêµ´´ ((H«¯ºÔS矶~R‡&šÚÎÏÏGdd$œ ­÷Ñ!CPQQ¥R CÃf»Ž=Š'OžÆ§í2ôˆuëÖaâĉÜùþýû±`ÁÔÖÖrm?oûB¡ÕÕÕmJ$Œ3ƒFMM ˆ¨Ëõ¬³ MèeNµó*›L&ƒ¥¥¥>Lsôïß¿ËJi}}= ==qqqXµjJJJpᘙ™iÔwÿþ}ôïß¿ÇþÝáݵ© "–-[PWW‡ÔÔTÈårw«•ÏçwÉ«««ƒ………V›|>>>>¨¬¬T9vìØ¡UçÓÖÓÖOº¢­mðx<Ü¿<èv>ÔÇÇÍÍÍ8~ü8—fnn@€ææfH$’ië ¯¾ú*êëë»Ì!>Oû())AQQQ—¼;wî ;;AAA˜0aZ[[Õ66lØ 2HêìS§NÅûï¿yóæé4/žž777•4;;;¬_¿•••hjjR[/>>×®]ÃÁƒ¹™¾hooÁØØýúõÓ‹M½ÕÊÊJddd=z„]»vu;RGQQ²²²Ôž ==÷ïßàúõë000€T*…³³3|||`dd„‚‚•M*•r‹:MMMؽ{7žÚß›ÚÚÔDbb"&Ož ccc¼öÚk˜?>îܹӭÖÀÀ@dgg£¼¼pïÞ=¤¥¥! @«Í€€äååáÆ€ææfxxxàÈ‘#Zu>K=Mý¤+ÚÚöôôDqq1¾þúk¤¥¥ÁÁÁkÖ¬ÁíÛ·ÕÚ²´´DLL –,Y¢Xd2æÎÛeñFééé¸råŠÖ2MMMhhh@CC¤R)0f̘.‹<½iÿße …\»v+'‘H0kÖ,¼õÖ[˜8q"ø|>>þøcDFF¢´´”+—‘‘ÌÌLDDD¨ÕÔñc¾nݺn}ôññAUUöîÝË¥D"ÜÜÜÔtÄb16mÚ„]»v¡OŸ>*¾µ´´påš››UòÐØØ¨QKnn.BBBàåå"B~~>öíÛ×­:Ñy>àiæT'L˜@£F"___2dM:•Z[[¹y³JKK¹95"¢ââb•9ÕåË—«lÏê|þÁ••——¹»»Ó¯¿þJÕÕÕ4hÐ òõõ¥€€š:u*ÙÛÛÓÌ™3I,“¹¸¸ …Bš4iµ´´tëÛ¸qãÈÛÛ›.^¼H‰„ŒŒŒ¸ŸüýýÉÆÆ†ÞyçjooïÖMõ´ù§­ŸÔÍ©j²¡«æ;wîÐêÕ«ÉÅÅE£íííK&&&äèèH$ é矦ٳgë4§jggGkÖ¬ÑØÇS™§566&oooºqã†J¹Þ´onnÞå#Ê  ¶¶6Z±bñxÇS«!55•›¿ïXßyzm¡ªƒ––:uê”Êâ>‘Édtýúuº|ù2>}š 9’{ );;›._¾LDÿ½ÜÜ\‹ÅäááA …‚Μ9C………:¯XÊd2ÊÊÊ¢¨Í×ÔfwÈårúý÷ßéäÉ“tïÞ=.]­”••Eÿý·N6;J¥”••¥róêBOëië§öövª­­í•¶;ïÁTG]]åääP~~>·ê«P(tú©ªª¢ÄÄÄîE?%½mŸˆ¨¡¡rss)''Gí=ÒL&£œœÊÍÍ¥ÆÆF½ëËåtöìYÊÌ̤˗/÷xÁ³¢Ë½¢ š‚ª‘ê'þ÷ïß°°°îËÿÅÅÅxã7pèÐ!8;;#-- ›7oFYYY—ý‡ÿ&##ƒû7Ê¿©©©Q™'ꌫ«+ÜÝÝõ¦_4ií zËÿ§í§uëÖ!44ööö/¥ýçÁ‹øLõ&‰D*éúõíEƇ¤¤$lذ<€ƒƒ233»}Pù|>º¤›˜˜`àÀëé²è¤o4ií zËÿ§í§øøø—ÚþóàE|¦þ ^š‘*ƒÁ`¼Hh©²Oÿ1 †aA•Á`0ô ª ƒ¡GXPe0 =‚*ƒÁ`èT C° Ê`0zDãæÿž|ƒÁ`0þ?Ú%­Ëæÿêêj>7Q ƒñ²bkk OOO•´.A•Á`0O›Se0 =‚*ƒÁ`èT Cüí Èmˆ9›IEND®B`‚bm3.7.0/doc/html/a00049.html0000644000175000017500000001401711365042651013432 0ustar tlktlk BitMagic: bm::d_copy_func< T > Struct Template Reference

bm::d_copy_func< T > Struct Template Reference

d-Gap copy functor More...

#include <bmfunc.h>

Public Member Functions

 d_copy_func (T *dg_buf)
void operator() (T dgap)

Data Fields

T * dgap_buf_

Detailed Description

template<typename T>
struct bm::d_copy_func< T >

d-Gap copy functor

Definition at line 780 of file bmfunc.h.


Constructor & Destructor Documentation

template<typename T>
bm::d_copy_func< T >::d_copy_func ( T *  dg_buf  )  [inline]

Definition at line 782 of file bmfunc.h.


Member Function Documentation

template<typename T>
void bm::d_copy_func< T >::operator() ( dgap  )  [inline]

Definition at line 783 of file bmfunc.h.

References bm::d_copy_func< T >::dgap_buf_.


Field Documentation

template<typename T>
T* bm::d_copy_func< T >::dgap_buf_

Definition at line 785 of file bmfunc.h.

Referenced by bm::gap_2_dgap(), and bm::d_copy_func< T >::operator()().


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00223.md50000644000175000017500000000004011365042647013141 0ustar tlktlk2673fd88701e2a2923e123ed134d3852bm3.7.0/doc/html/a00164.png0000644000175000017500000027325611365042642013264 0ustar tlktlk‰PNG  IHDR#ø±øCbKGDÿÿÿ ½§“ IDATxœìÝ{\Í÷ãð×é®Hè²\£ÐM¡HŠ¢ˆä²!Ìuc›ÍÌeÆÆ¾Ì}s¿lr‹Ü&Ò"©DtK.T$Òýœß¶~î2u>uz==;ç|ÎûýªÍñèÕûýy‹¤R©DDDDDDDDDD5+^AèDDDDDDDDDT?°Œ$"""""""""™`IDDDDDDDDD2¡$t"""""¢W‰ÅÍ›7…ŽQ¯µnÝ]»v:ɰ!""""¢ÚhĈ:F½6|øpìØ±CèDD$?â¹2’ˆˆˆˆˆj-Ìž=[èõÒ?ü t""’C¼g$ÉËH"""""""""’ –‘DDDDDDDDD$,#‰ˆˆˆˆˆˆˆˆH&XF‘L°Œ$"""""""""™`IDDDDDT ž| Ø¿?¾ÿþ{lÛ¶ ±±±Ïe)..ÆW_}±XŒ?ÿüÓ§ODzeËœœ Ü¿ÿ¹ë ð÷ß¿ô5åää`Μ97nŽ9‚ž={bîܹJ¥oÌRÕœDDD²Æ2’ˆˆˆˆˆäBii) ¬¬ êêêøî»ïðñÇ”••±fÍ888@YYúúúPRRBaa!@*•bذa‰D°±±¢¢"† RùøÉ“'•󨪪b„ PUU…¹¹9ˆãÇ?—%&&M›6Å€ ¬¬ kkkôéÓ‘‘‘pttÄ7°}ûv$''cÆ ¸|ù2ÊÊÊ^úš"""`ee¨ªªbèСðöö®üZß”¥*9‰ˆˆdÛ´‰ˆˆˆˆH.tëÖ çÏŸÇ”)SаaCØÚÚâÃ?DÆ ¡¬¬Œ+W®`ýúõÈÊÊ‚¦¦&¤RésïWSSˆD"(++CQQ±òñ³š7o%¥ÿÿQªmÛ¶HLL|îš»wïâæÍ›:thås%%%°··‡ŽŽ–/_ŽßÿgÏž…œÑ°a×¾¦»wï¢eË–••””0lذ*e©JN"""YcIDDDDDrA*•bòäɘ}PTT„#GŽÀÆÆæ¹klll””„7nxZDN˜0QQQÈÎΆŸŸîÞ½ HNNÆõë×ѵkW@tt4®_¿^9Ι3gŸŸHMMÅÂ… ¡  ðÖ,UÉIDD$k\IDDDDDrÁÝÝ‡ÆØ±c¡¥¥…+W®`âĉ€=z`ûöí˜:u*”••¡¤¤}}}¬]»3fÌx§yôôô°qãFìÙ³YYYhÙ²%|||ž[‰Ø²eKŒ;“'O†±±1nÞ¼ sss8;;C$ÁËË ãÇGÛ¶m‘‘‘/¿ü5¬^½žžžhÛ¶-¬­­áââ‚Ñ£GÃÐÐiii˜8qbå Ç×eIHHxíkDDDBI_¼Q Q-0bÄdggcöìÙU~OYYRSSQZZ ###hiiU¾öäɤ¦¦¢I“&h×®îÝ»‡;wîÀÒÒ²ÊãÇÄÄ`ëÖ­X³f RRR ¢¢‚Ž;¾t_Éåææ"33ÚÚÚ000xîµ7nàÞ½{022B“&MÞ8ïíÛ·q÷î]´nݺººoÍò®9_å‡~€žžvìØQå÷½EwMU³T5'‘¬ðž‘DDDDDDU¤¡¡-ZÀ›³Ô¦œDDDÏâÊH"""""¢*²°°¨5+ ß”¥6å$""zWF‘L°Œ$"""""""""™`IDDDDDDDDD2Á2’ˆˆˆˆˆˆˆˆˆd‚e$ÉËH"""""""""’ –‘DDDDDDDDD$JB """""z°°0„…… 6¿ºº%ÊËï¡´ôN•®WVÖ‚‚:JJnÔp²÷£ªÚ ¶xòä2Š‹ÿ yåuÇ—m0""’{"©T*:Ñ‹bccqóæMÁ抺‹}û®cà@ôê¥_¥÷ìÝ››7cÆ ‹N÷~nÞ|Œàà›HK{ %ØÙéÀÞ^zz ž»®uëÖèÚµ«@)‰ˆHųŒ$"""""zÁÎgñÅ{ðÕW}1uªk•ß×½ûBxyYáë¯=k0]õ¹s'»vî]±¸uë>ºti‡aúÂËË ¨ˆˆäËH"""""¢gíÙ‡éÓwâóÏÝ0cFŸ*¿ïƼœœ:BQQAèxDDT»±Œ$""""¢ú+**£Fm„··5–. …ÿ¶õxéÒcصëââæTsÂÚ«¸¸ G&! à,bbþ‚¾~cøùuÁ°aöhÙ²‰Ðñˆˆ¨vbIDDDDDõSB ²nnfX½úÃ÷ZÕçåµ;~€ŸR ëŽÌÌ\ìØqqÈÉy‡1ÂîîæPQṩDDT‰e$Õ?©©w0pàJØÛaãF()ý÷"²  ff³±víGèßߪSÖ=eeOÅŽ1ˆˆHƒ––: ²Ÿ_W˜˜è ˆˆ„Ç2’ˆˆˆˆˆê—ÌÌ\ôï¿&&úøý÷ñPU}¿•{G&a„m¸ti´´Ô«)eÝ—ý±Ø»7™™¹°°h??; hÃïQýÅ2’ˆˆˆˆˆê;wòÑ¿ÿ |ðAcìÚ5 ª¾÷˜3gîErrŽ™V åT*Ellvï>‡#G.¢¬¬îîæ2¤ ½!"ªXFQý—÷ÞÞ+¡ªª„ÀÀ)hÒD£ZƵ·ÿ>>6øê«¾Õ2ž<+,,Á‘#±{÷9ÄÆf@WWƒÛÂϯ ŒŒäûr""À2’ˆˆˆˆˆêƒ‚‚b ´……% úzz«eÜë×sУÇ"}Š®]ÛU˘õEff.öîÞ=qÈÊzøùu——545Õ„ŽGDD5ƒe$É·¢¢R únß~€ýû?A›6ͪmì­[OãÇàòå ¬¬XmãÖ'‰§O_ÅîÝçpôhÀÃÃ~~]УG{((ˆNHDDÕˆe$ɯ²² Œµ—.ÝF`àtìøAµŽïï¿ R)°uëØj·¾*((Æ¡C‰Ø½û2Ñ¢E b__;h ˆˆÞËH"""""’OLš´§N]Á®]“`eÕºZÇ/+«€¹ùl|ýµ'üýªul®]»‡Ý»Ï!00÷î k×vðóë‚~ý,¡¡ñþ‘ XF‘ü‘J¥˜1c7LÄᅩîݪ}ޏ¸ëðö^‰èèYh×N§Úǧ§**$ˆŒ¼‚={ÎáøñËPVVD¿~–ðóë‚®]ÛA$â6n"¢:$^IèDDDDDDÕíÇÿD``6nô¯‘"Nº‚–-›°ˆ¬aŠŠ pq1‹‹ òóŸ ((»wÇÁÇg5 ´áëk‡!CìТE¡£Qpe$É•OaîÜXµj||ljl/¯•èØñüüó›ƒ^/5õvïŽÅþý ¸¿=z´‡Ÿ_xxX@MMYèxDDôjܦMDDDDDòcÿþ|úé|ó'>ùÄ¥Ææ)((†™Ù·X³æ#xyYÕØ<ôveeOÅ®]±OEƒÊðò²†Ÿ_ØØˆˆžÇ2’ˆˆˆˆˆäÃÉ“W0räŒï„o¿íW£s_ÂÇoÁåË?@KK½F碪ËÍ}Œýû°{w,RSïÀÈHƒÙbð`[nã&"ªXFQÝwþü øú®Eß¾°jÕˆ?ÔdÖ¬@$&ÞDpðô‡þ»¤¤[ؽ;‡'âþýBØÛÂ××hÔHMèxDDõËH"""""ªÛ22ràí½66ذa4”•k|Î=¡_?K|ógÏEïçßmÜû÷'àøñËPPÁÃÃ>>6èÕ«#„ŽHDTŸ°Œ$""""¢ºëÎ|ôë·úú±wïd4h RãsÞºu]».@`à”;©›jÆÃ‡OpøðEìÙ‡„„LèêjÂÛÛ ~~]ab¢/t<"¢ú€e$ÕMÅ8p%`ÏžÉhÖ¬¡LæýãÌ›w)) ¡¢¢$“9©úefæ"00û÷' 33&&ú2¤  °†ž^c¡ãÉ+–‘DDDDDT÷•bȵøûï‡8rd*ôõµd6÷øñ[QTTŠß/³9©æH¥RÄÅ]G``<JDaa)zõêxxX@MMYèˆDDò„e$Õ-Œ» ™Ø»w2Œe·½V"‘ÂÜ|6¦MsÃøñ½d6/ÉFii9Ž¿ŒÀÀxDF¦AUU žž–ðõµƒ½½!jö`$"¢z€e$ÕR©Ó¦íÄ‘#±wïdtîÜF¦ó_¸p¿ <ü+™– ${¹¹qðàyìݤ¤[hÑ¢  ²ÁàÁv02Ò:Q]Å2’ˆˆˆˆˆêŽE‹Ž`ݺHlÜèWW3™Ï¿re(¶l‰Fbâ<™ÏM¹z5{öÄ!((ÿkëÖ<ØÞÞÑ´©†Ðñˆˆê–‘DDDDDT7üö[$,8„U«FÀÇÇF ƒ­FË–M±bÅpAæ'aI$Rœ>}û÷'àÈ‘‹(--‡³³ ¶…««4""z;–‘DDDDDTûíߟ€O?Ýo¿í‡É“ÉPXXSÓoñË/Ã+C©ö(,,Áñã—±gONŸ¾ŠFÔп¿† ±CçÎm ñþ’DD¯À2’ˆˆˆˆˆj·°°TŒ³ &8aÖ¬~‚å MÁ¨QqáÂ|èè4,Õ>ÙÙ±o_öí‹Gjê´iÓ Ú`àÀÎhß^OèxDDµ ËH"""""Vy¹" ¨¨ðÒkçÏ߀¯ïZôíÛ «VtµÙܹ}aa_ –j¿ää,ìߟ€qçN>ÌÌZÀÇÇXC__KèxDDBcIDDDDDÂúý÷3HHÈÄÒ¥CŸ+$¯^͆ÏjØØ`Ó&ÿW–•²Ô»÷b8;›à»ï¼ÍAuƒD"ÅÙ³aÿþ=š„‚‚"ØÛÂÇÇžžhÜX]èˆDDB`IDDDDDÂ)/— mÛ/QQ!¯¯–-{ZHÞ¹“~ýV@_¿1öîŒ TÍy÷îCtî<àäd,hª{JKË‘†  „„$C"‘ÂÙÙ>>6‹M¡¦¦,tD""Y‰çQ_DDDDD$˜ƒÏãßõûöÅæÌñ‡®‡–VìØ1^ð"""R¡¦¦ {{C¡£P¤¢¢wws¸»›ãÑ£b_BPP&MÚ ôík;£Gö‚¯&"ªi\IDDDDD‚H¤ppX„7ò* Iš4Q‡²²þüsZ­¹ÇÞ„ ÛPXX‚?þ/t’#÷î=¡C‰ J@bâMèéiÂËËv†•Uëw+::úúZ04Ô­¡´DDÕ"ž¿r!"""""A'áÆ\<»>B"‘âþý'°²j ]]MÓý¿Š NžLCïÞÜžMÕKW·Æë‰?ÿü§OχvGXX <<~ƒÃ",]z9UëóÏwÁÑñGÄÆfÔpj"¢÷Õ‘DDDDD$sR©..?#==‰ä¥×D4ȶò’B:w.¬Btô,´k§#hª.\¸‰  ó8t(ÙÙ°²j;ÃËËzz/—ô9ppXPRRÄêÕ#àåe-ëØDDUÁ•‘DDDDD${áái¸råî+‹Hàé É}ûâ1}úNTT¼úY O…6‹H’+«Ö˜?âãçb÷îIèØñ,]z ¶¶ó1tèoؽû Š+¯8 eeEO…š4éw¬Y&T|"¢7âÊH"""""’9OÏ_”tû-E£€S§ºbæLYE{‰»ûRØØ´Á¢EƒË@TRRŽÐÐdìߟ€°°T((ˆ ›bÂ„ÞøðÃuxø°è¹ëE"FŒ°Ç?|u1Ñ3xš6ÉÖ™3טxóµ¯+(ˆ •Í›kaút7 l'ÃtÏËÉy„Ë—³ðå—}Ë@ªªJðô´„§§% ŠðçŸÿ)&“ñèQñK×K¥Rì܋۷ïcÃhh¨ šˆèeüõÉÔҥǡ¤ôò" D00ÐÆêÕâìÙÙ6̾rû©""Ò ¬¬ˆîÝË@ô"MÍ6Ì{÷NÁÙ³¯?°¦¢B‚èè«ðòZìì&$"z=–‘DDDDD$3‰‰7s ååÿ¿=ûß-¤ÆÆ`ófDE}ƒ;׊­¥‘‘ièÖÍêê*BG!zIFFbc3 ‘¼þîkåå\½z}ú,Å•+we˜ŽˆèÕ„ÿÛˆˆˆˆˆê¥KU®ŠTRzºâÑʪ5& 4ôKôéÓ "‘HȈ•**$ˆŒLC¯^ÆBG!z¥€€³¯\eü¢òò äå=†§çrDG_•A2"¢×cIDDDDD2‘’ò7ÂÃS+WEvëfˆ  OqøðT89Õ¾Â/!!ùùO › …è%eeX»6eeUº¾¼\‚ââR ²{÷ÆÕp:"¢×ã6DDDDDu@dd¤ÐÞÛ÷ßG¬­õ0h1ÚµÓBQÑMDF¾þ0›wabb==½j BCS``  ##Ýj“¨º\½šÎ[ãñãR((ˆðøq1Š‹ËPTT†ââRTT¼¼uûßíÜS§`̘Oñøq¬¬c×IRéë·ÁÑ»cIDDDDTGhkkWkÙ&K·n=€¡¡>.ô‘‘NµŸœœ\íc†…¥ÀÅ…«"©v25mŽ#G>íëå声°ÅÅexüøé¿—””ÁÃc llìðÑGŸ Iž²ý:8pà€Ð1ˆäËH""""¢:BGG::Õ_äÉB³fÚØ°¡ƒÐ1ª,+ëRSï`Îo¡£ý'JJ hÜX«¿ôZQQ&MúÇ YÝQVVÆ2’¨ðž‘DDDDDTãjÇ¡4Uš Utëf(t"""¹Â2’ˆˆˆˆˆè¡¡Épr2†Š 7“U'–‘DDDDDDÏ(,,ATÔU¸ºš …ˆˆHî°Œ$"""""zFTT:ÊË+àìl"t"""¹Ã2’ˆˆˆˆˆè¡¡)°²j mí†BG!""’;,#‰ˆˆˆˆä̃°dÉ¡cÔIR©aa©pq1: Q­píÚ5lݺµFçxôè~úé§j³°°‹-ªÖ1‰¨z°Œ$""""’3>ĦM›Þ{œqãÆáúõëÕ¨î¸té6²³B,fIiiiøí·ßjtއbÞ¼yÕ:æ£G0gΜj“ˆªËH"""""9c``€+W®¼÷8ÇŽÃÇ«!QÝ| -[6¹y ¡£É%–‘DDDDDr&;;ýû÷¯| KKK¨ªªÂØØ¬|möìÙÐÑѪª*z÷îÛ·oüüüpïÞ=øùù!** ÷î݃»»;¶oß---¤¤¤àÒ¥KèÑ£ÔÔÔСCTŽ»sçNAII úúúøùçŸyyy‹ÅX¶lš7olÞ¼_|ñttt ¯¯]»vÉè;õ²ààKèÛ×"‘H° DµD"ÁgŸ}MMMèêêâÇðîž_÷¹ð¢Ã‡ÃÐÐêêêð÷÷Ç—_~‰£GxóçÙ«lܸmÚ´††üýý!‘Hªé»BDÿËH"""""9STT„ˆˆO‹I///|þùç(((ÀâÅ‹1|øp\¹rÇÇ–-[ƒÜÜ\hjjbáÂ…€uëÖA[[ëÖ­ƒ½½=JKK… 88úúúpwwÇðáÃñðáCüöÛo˜4iΜ9ƒGÁßßÿûßÿPXXˆÝ»wã믿FNNÊÊÊüü|deeáûï¿Çرc¡££ƒ{÷îaúôéøî»ïù¾ýõ×=¤§ßEß¾™Ÿ¨¶Š‡²²2îÞ½‹ýû÷cñâÅ |§?Ïoú\xVFF†ŽåË—ãþýûèС~ùåÜ¿ÿŸg¯RQQ¸¸8\½zIII ÂÉ“'küûEDoÆ2’ˆˆˆˆHŽ8pÖÖÖ=z4TUUáíí ìÞ½ÅÅÅ€’’4jÔ•+ž´´´   ---(++xZr®^½ݺuCHHôõõ1eʨªªÂÙÙ£GÆÞ½{¡¢¢‚3gÎ`À€PUUE»ví ¬¬\¹å["‘`æÌ™‰D‹ÅPRRÂŒ3*?zôHïÕŸ&A[»!ììÚ 2?Qm¥¥¥…Ÿ~ú êêêpppÀ'Ÿ|R¹ºªžßö¹ð¯;wÂÍÍ ýû÷‡šš¾þúkèêêxóçÙëüðÃPQQ¡¡!ÌÌÌêÝ­'ˆj#–‘DDDDDrìöíÛèСÃsÏuìØ·nÝB¿~ý0xð`tïÞmÚ´ÁÔ©SñàÁƒ×Ž¥  €æÍ›233‘––ƒÊvíÚ…üü|¨ªª"!!îîî044ÄÀ_Ú©¡¡‰DPUU…’’Råc¡;v îȓˆžehhXùK 077Ç;w*WåÏsU>€§Ÿ-Ï~f‰D"´k×À›?Ï^EQQ:::ÏEDÂãß²DDDDDrLSS¹¹¹Ï=———‡ÆC*•béÒ¥ÈËËÃÞ½{Q\\ŒAƒ½v¬g×ÔÔ„££#233Ÿûç×_Åðí·ßböìÙHOOG\\ÔÕÕkìk¬ÿ‹oÁÃÃBè(DµÎ‹Ÿ!÷îÝCÓ¦MßiŒª~.4jÔyyyÏ=÷ï/IÞôyFDuËH"""""9æêêŠ'N ##ÀÓ{HîÛ·b±‹/†““”””Ð¥KŒ9ÿýw•Æ‹ÅˆŠŠBjj*àÉ“'°±±APPnß¾ SSS8::BQQ111(((¨±¯±:=š„FTÑ£‡‘ÐQˆjÌÌL9rÀÓ{?®[·ï4FU?Äb18Py/ɘ˜¤¤¤@$½ñó xZx^¾|ù}¾T"’%¡Qͱ²²ÂŒ3`cc;;;œ?C† AŸ>}`nnŽõë×úººˆît[]]£ñh: IDAT]|òÉ'X±bôôôž·}ûöX°`ìííagg‡´´4tïÞ~~~ÈÊÊ‚ ЫW/¨¨¨@YYíڵÌ3°nÝ:Y ªäرKpq1…Š D"z‘½½=¦OŸŽŸþééé°¶¶Æøñã_ZÁø&ÞÞÞ¯ý\X³fMåuèß¿?ÌÌÌ`ii‰ÂÂBXZZBEEåŸg0mÚ4Œ7æææÕþ= ¢ê#’J¥R¡CÑ›EFFÂÄÄä¥RðU$ —™™‰ôôtψ¨n`IDDDDDõÚÁƒл·144T…ŽBTïY[[cË–-øñÇqÿþ}!88ø¹Ó¼‰¨ncIDDDDDõVnîcœ9s«W$t"úÇ€0`À¡cQ áiÚDDDDDTo>œ55e¸ºš …ˆˆ¨^`IDDDDDõVPP"ÜÝ;¡A¡£Õ ,#‰ˆˆˆˆ¨^º}û2áím-t"ª¥45{ã£ÖcÆ“HK»#t"¹À{FQ½tàÀy4i¢Ž^½: …H&ž<)EXX ÔÔŒ„ŽRg”•e¡AüòKæÎ===M8:v@ÏžáèØzzšBG$ªsXFQ½tàÀyôëg eeE¡£Õ˜û÷ qâD2‚ƒ/áäÉ4”—K ªÚVèXuFQQ:Ö¯ ‰DФ¤[ˆŠJGTT:¾øb7JKËal¬_YNÚÛ·ƒ††ªÐ‘‰j=–‘DDDDDT蠟ßEJÊßX°ÀGè(DÕ.+뎿Œàà$œ=›EEôìÙ ‚»»9´µ-tÌ:EAA+«Ö°²jO?£¨¨±±8uê NJÇÆ§ ¤¤€®] !›ÂÍÍ ÚBÇ&ª•XFQ½tÍ›k¡k×vBG!ªW¯fãØ±K8z4 II·Ñ°¡*z÷6Áš5ÁÙÙ rÅ^ujÐ@NNÆpr2ääзo'ØÙµ…¢¢Â[Ç2dˆ Ò¾Ù… ºhÒ¤mÚ¼õÚK—´¡®^CÃü7^'•‰‰z¤01ÉCƒÕ’uÏž=ïõþ[·î#44'N¤ &æÊÊ*`mÝb±ÜÝÍù9Dõ ËH"""""ª_>úh=ŠŠÊ8Eè(DoUTTŠS§ÒqìØ%„„$ãÁƒBë£oßNèÓ§:uj)tÄwVTTŠŽ¿ÁªUÂÛÛú­×oÜx ‹Å… óßz@Ì;ù=z²²`Ó¦1µîV Ož”"**'N$#,,ÙÙѶ­<<,àéiKËV•+W‰äËH"""""ª?23sáà°›6»»¹Ðqˆ^)7÷1Nœ¸Œdœ:•Ž’’2X[·Fß¾ðð°¨ó£œ=û||V#6ö;´jÕô­×ÁÊj.æÎõƨQ=Þzý“'¥øì³8q"K– Ÿ_—êˆ]í¤R)Ο¿‰àà$üùçEܸ‘‡-šÀÃãég;»¶PP`1Ir‡e$Õ³gïGxx*¢£gñ‡|ªU®]»‡ãÇŸ®~LHÈ„²²";ÀÍÍ®®fÐÓÓ:bµYµ*[·žFBÂÜ*¿çóÏw")é6¾¬ÒõR©‹ŪUa˜4©7¾ùƳJ[Ø…tùrŽ}ZL^½š ]ÝFèÓ§<=-Ñ­›””jw~¢*bIDDDDDõCAAllæcútwLšÔ[è8TÏUTH‰d;v 9hÚTb±)ÜÜÌáäd uu¡cÖˆQ£6BUU ë×®ò{.\¸ _pèÐg°µm[å÷íÛ/¾Øž=;bíÚ޺ͻ¶¸z5G&!8ø’’n¡I ¸¹™ÁÓÓ={vxíáDDuËH"""""ª6m:…Ÿ~:Š„„¹ÐÔl tª‡ŠŠJy!!—š‚¼¼ÇhÛVîîfps3¯ò4u]§Nßá“O\0a‚Ó;½¯OŸehß^«Vx§÷%$dÂßtta۶Ѳe“wz¿ÐnݺÿÏŠÉ$œ?Ÿ‰† Õàéi tëfÈUÞT×°Œ$"""""ù'‘Háà°ÎÎ&øá¡ãP=’“ó!!Oïÿ•ŽÒÒrX[·»»9ÜÜÌСÃBG”©¿þºGÇqäÈ4tîÜæÞ»sçYÌšµ óд©Æ;½7+ëFŽÜˆœœlÙ266ïôþÚâî݇8tè‚‚pñâ-|ðAc ` [˜›·:QU°Œ$"""""ùwüøeŒ³'O~ ##]¡ãœKO¿[¹ýúÂ…›PQQ‚£c¸»?½ÿ£ŽN#¡# f÷îsøúë½HOÿ ÊÊŠïôÞ'OJѹó<|ö™“';¿óÜ……%˜<ùwœùÄ_푨îosNL¼‰  :”ˆœœÇèܹ ||:£khk7:ѳXF‘|KO¿‹Þ½—`ÇŽñpr2:ɉüü'ˆˆHCHÈeDF^ÁÇOЮúôé773ØØÔ‹û?¾+gç%pv6ÁìÙýÿÓûÓÓïÂÉi1v^½:þç»wŸÃW_íXlŠU«>”›Ã‚**$ˆŽ¾Š  _BQQ)zöìˆ;ÃÃÂ¥8Õ,#‰ˆˆˆˆH¾}ùåœ;—ÈÈ™r±Š„síÚ=„„\FXX ââ®ìí áâb 773´m«#pÂÚ­  ¦¦³°aƒ?úöíôŸÇ4h57VÇæÍcÞ+Ϲs3f3š7×¶mã ¯¯õ^ãÕ6ÅÅe IFPP""Ò ¦¦//k fkëÖBÇ£ú‹e$ɯû÷ ak;³g÷ǘ1ŽBÇ¡:¦¬¬±±áĉœ8‘ŒÌÌ\4i¢gg¸ºšÂÉÉššjBǬ3ÂÂR1rä$%}fÍþûÖáƒñé§ 6ö»÷.oÜÈÃèÑ‘Ÿ_„Í›ÇÈmI—Ÿÿû÷'`ÇŽ¤¦Þ‰‰>†í __;hi© ê–‘DDDDD$¿Ö® ÇÊ•¡HH˜ U¡ãPpÿ~!ÂÂRš‚“'ÓPPPŒ>€Xl WW3ØÚrûõµpá„„\ÆÉ“_¿×8ee°µ‘#»cÆŒ>ïëÑ£bLš´gÎ\Ã/¿ ƒ··õ{Y›%%ÝÂŽgqðày—ÃÝÝ#FØÃÁ¡Ãº'Ñ;bIDDDDDò©¼\‚nÝ~€——¾ûÎKè8T‹¥¥ÝAhèÓÕçÏ߀‚‚ݺÁÕÕb±O&®&ýû¯€‰‰>–,òÞcýøãŸØ³'qqs ¤ôþåpE…ß7žÂôén˜>Ý]îoëP\\†#G." à,bc3м¹†í‚¡C»¢E‹&BÇ#ùÅ2’ˆˆˆˆˆäÓ¡C0yòvœ>ý-Ë$zNii9bbþBHH2BC“qëÖ}4kÖb±)ÄbSôêeŒ† ¹’¶:•ÂØx~ùe||lÞ{¼Û·ÀÞ~Ö¯ ‹jHøÔÄàÛo÷¡o_ ,_> jjÊÕ6vm–™™‹;Î"0099èÑ£=>ü°ÜÝÍ¡¢¢$t<’/,#‰ˆˆˆˆH>y{¯DÓ¦زe¬ÐQ¨ÈÉyôÌöë+(,,‰IsˆÅ¦ps3‡µuknQ­A§O_ƒ¯ïÄÇÏEóæÕsPÌÈ‘PRRŽÝ»'UËxÿ:}ú>þx ´±eËèé5®Öñk³Š ÂÂR°sg,ÂÃS¡¡¡ ?¿.5ª ´…ŽGòe$ÉŸË—³àæö?NA÷îFBÇ!$'gUn¿¾pá&”•ѽ»\]Í!›¢eKnE••¥KcïÞ8œ=;»ÚÆ}mÛjcÌGøúÚ¡Q#ž&OïŒe$É—ììtéò=-„#º ‡jXvöÃV?¦ **ÅÅe03k7·§«--[q—ÀÊÊ*`l<  ÄðáöÕ:öÊ•¡X·. skäþŽååÌ™³Û¶ÁÌ™øôS—zýÿSzú]lÙÀÀxˆD€¯¯üýad¤+t4ª;XF‘|Y²$Û·ŸF||Í”$,©TŠK—nãĉ§Û¯/]º 55e88´¯<€F_¿zîIHÕ#!!ýû¯@tô,´kW½Û©srÁÖv>þ÷??øúÚUëØÏÚ²%sçÁÛ»3þ÷??¨ªÖïC] Š‡Í›£pýz.;`̈Åf¼÷*½ ËH"""""’ÅÅe°µ‘#{૯ú ‡ªIQQ)¢¢ÒqâÄÓh²³B__«²|tph ¸ýº¶Z³& 6œÄ… ß×Èø'nGVÖ><µFÆÿ×É“W0qâvébóæ1ÐÑiT£óÕR©'O^ÁæÍQOEË–M1jT ÖZZêBÇ£Ú‰e$É;b0kÖ>œ;7zzšBÇ¡÷ð÷ßùÿl¿¾Œèè«(-­€¥e+¸ºšÁÕÕ ffÍëõvÙºdäÈ PWWÁo¿ª‘ñcbþ A«qâÄ03kQ#süëÚµ{9rÊÊ*°}û8˜˜4¯Ñùê’ÌÌ\lÛv;wÆ¢´´>>6?¾:tø@èhT»°Œ$"""""ù •JÑ»÷XZ¶ªÖC2H6$).^¼…§‡Ï$'gA]]={vüg¤tu¹­®©¨ÀÌl6fÎì Ç™C*•ÂÉi1ìí ±x±oÌñ¬üü'7n .^¼…µk?‚««YÏY—|BB¾€¹yÍ®Ž¢êQPPŒ¨¨+ MAxx*rr¡eË&‹MáêjŽîÝêý½ùêºË—³àæö?„…}Y£«7m:…Ÿ~:ŠÄÄùhØPµÆæùWYYfÍÚ‡;ÏbÖ¬~˜<Ù¹Æç¬k¤R)ÂÂR±n]NŸ¾ ‹V˜4©7<=-¡¤¤ t<ËH"""""’ǯCii9§…Þ௿î!44aa)ˆÍ€D"…•Uk¸¹™A,6å¶W9³n]$V® Å¥K jô`“‚‚"XYÍży0rd÷›çEëןÇ0x°-–,eeE™Í]—$&ÞÄo¿EàèÑ$´hÑãÇ÷ÂС]¡®Î{½ÖC,#‰ˆˆˆˆ¨îKO¿‹Þ½—`óæ1pw7:=£¬¬gÎ\CXØÓÃg23s¡¥¥Žž=;ÂÍÍ NNÆhÚTCè˜TCFÚUU%¬_?ºÆçš6-©©wpüøŒŸëYáᩘ8q:uj‰M›Æðà–7¸q#6œÄ®]±PUUÆÇ÷„¿¿7æ÷¬aIDDDDDuß—_îÁéÓW=«FW_QÕdg ,ìéêÇS§ÒQXXcc}8;›@,6…­m[nÓ¬**$05ý_í ‡Ÿ/.î:¼½W"8x:,-[Õø|ÏJM½ƒ‘#7@YYÛ· ##]™Î_×|øÖÖó0þ|ô‘ì²y–T*ŲeDZlY>þ¸'¾ûÎ ŠŠ¼-AU”•U (è°Œ$""""¢º©¸¸ öö 0x°fÏî/t¹q÷îC„‡§âĉdDG_Eaa LLôáâòtûµ­­WyÑ[ÅÇ_‡—×JDE}CCÙæòïA6ÇŽM‡……l²yQBB&üý7AGGÛ·C‹¼â»ø·”üå—ܾ}ƒÛaÚ4W´nÍR²cIDDDDDµ›D"}å ÙÛ¶Æüù3zzš$“‰‰‰7–‚ÐÐd$'ÿ 55etïnWWs8;›ð0 zg+W†bëÖhœ??Où{÷^Œ.]Úañb_AæVVÖŒ¹yy±eË8X[·:RS^.Áþý X¾<YY0thWLŸî=½ÆBG£wÇ2’ˆˆˆˆˆj·ŒŒŒ³Ÿ}&FÿþVPVVDy¹‹Ð»·1~üq°Ð뜂‚bDF¦",,áá©ÈË{Œ–-›ÀÙÙ®®æèÞ݇ÏÐ{2äWèéibÕª‚Ì¿qã),^,ÜA6/zü¸'nÙ3×°|ù0xyY ©N*/— 00K—G^ÞcŒãˆ)SœÑ¤‰†ÐѨêXFQíöïvOÐÖn„ z¡qc5ÌšµQQ³x±*ºvíBB.#""±±J[[ƒÊí×&&úBG$9QZZcãYX¸ÐÆ٠’á߃l,ˆ#jljÖÌŸ›6Eá‹/ú`Ú4W™2.oJK˱mÛi¬XqååLœè„?îU+Šgz+–‘DDDDDT»_ÂØ±›++))@"‘¢m[müþûxh ˜®öú÷ð™d„‡§àÆ>«Ñ¦M3üòË0¡£ÀÉi1ìíÛá§Ÿ„?ÈæE×®ÝÃÈ‘ ‘H±mÛ8tìøÐ‘꼬¬øùç`ÆÃÚº5æÎõ†­m[¡cÑóâëÏßÒDDDDDT'åå=ðú5ÉÓ×fÎô¨EdAAJÄgŸí€¥åôï¿û÷'ÀÖÖÛ·Œ””…ضmFŽìÎ"’d®¸¸ çÏß@÷îFBGŒaýûPXX"t”—éâÈ‘iøàƒÆðö^ˆˆ4¡#Õy-Z4ÁòåÃqìØ ¨ª*ÃËk%ÆŽÝŒÌÌ\¡£Ñ3¸2’ˆˆˆˆˆjµO?Ý  „ÊÒñY €H¤€€€ ptì @:ÙHO¿[¹ú1.î:ÀÖ¶-ÄbS8;›Àؘ‡ÏPí}C†¬E\Ü´hÑDè8ÈÏ‚Îk×A6/*--ÇW_íÁ¾} øþûð÷w:’܈ˆHÃüùqýz>ú¨;¦OwGÓ¦VPaâÄÞ˜=»¿€©ÞMZÚ„‡§"44ññOŸ±³k SˆÅ¦èÐáUE‹ŽàرK8uê¡£¼äÁƒBtî<‹ °aöBÇ©’ÂÂ|öÙ„…¥béR?ü{çÞT½ÿñw÷Nº÷¬²Z ‹*C†2[TV"ÃqñŠ[”«^DÅŸ ˆâ…²D(‚(Ëqié¤eSè^i›6mF³×ï“sÚ2dµ=Iú}=Ožs’&ç|òm(É+ŸñøãæÑ’˜P«µøî»Óذá8¬Y3'd;,s‡ÈH@ `¼TV6#)锈œ;7ü$,,,ºíœ"äåU`êÔ¡÷õx¥RƒÌÌœ:u§N]EMM <<œ1fL?Œ7£G÷‡ãÐÅQì3yò „>z‚íPnÉòå;Q^Þ„£G_b;”»F§ÓãÃàË/ÿÄŠãñê«vëß¿ÞJc£|p?ÿ|ãÆ À<ŽÀ@RºÝMI @ Œ—¢¢jLž¼0}z 6ož×­C\Nœ¸Œ… ¿ðxîúq<=|æ 23K P¨íÏd?ÆÄ„ÀÒ’‚Œrlã IDATù"‘(0`ÀÛøâ‹ù˜6íþD~w““S†36ãäÉ×0`€?ÛáÜ»vå`åÊý˜8q 6nL#åÄÝDff V®Üúz!^~y"–.+¶Ã27ˆŒ$@ ·fãÆÈÌÌd5ÀW¯ºƒËUbà@,,îÿãË¿ÿýo$'ßzàJ¥ÁêÕ‡±mÛizèõÀ™3o#4Ôó–÷×ju(,¬ÂÉ“Wpòä\½Êƒ£#5|fܸ;¶?>CèUœÅ?fB¯§D¤µµ%NºÒé~B¡ …X¾|' ú¦O߈_~)BBBvï~—/€mÛ#--‘ˆHB¯#;»}ûú­ˆ Ì›—„ÎB&S±Î=“˜_]¡PŽI“Öãòå:¶C2Kll¬°bÅüñÇëðõå"5u3^ye/„BÛ¡™ $3’@ @ Ü’´´4@zz:k1œ9SŠÁƒƒàìü`Óo-,,žžŽ¹sçvº}÷î¬\ù3t:=4m§û'%EbõêTœ:E•_Tˆǘ1ý1aÂ@DFz?P\‚¹0a§ˆ‹ Çš53Øåii¡Ù¬]ûfÏŽg;œûB(”aÙ²PTT…-[æcüøh¶C2k>‡wÞÉ€N§ÃG=I“³’©C2# @ ‚ñ’”ùÀ"òVˆÅr,[¶¯¾º*•¶“ˆ¨rΜœ2Lœ¸[·þ…|ñÅ|\ºô~úé_xþù±DDD"®\áaäÈ(¶C¹#îîN˜¦LùMl‡dÖ8:ÚbÍšÈÈxÕÕŒó1ÒÓ³Ùˤ 2’@ @ ˜5ÇŽ]‚·÷TTH ÓéakkÍ\¬­­þ1óQ$’ãìÙÊž –@01‚67 ))’íPî‰'Ÿ¹\ÇϱJ—€£G_‡cÉ“?CvvÛ!™=LJáĉװpa2Þ|s?,ø†ô’¼KˆŒ$@ ]Bii)¶oßÞåÇ•J¥øðÃïë±J¥ŽŽ¶hm=ŠÔÔ¬]û$^{íQüë_c±xñC˜=;Ó§ÇàÑG"11ƒ 2Ò~~\p8€“'¯tåÓ!ÌŠ¬¬XYY !!‚íPî jͤ§ç°J—áãÃÁÏ?/GrrfÏþ{÷æ±’Ùcgg·ßž‚–£´”1c>ÆÑ£ØËè±Ðëõ·îÖL @ z5iii€ôôô»ºÿ‘#G°fÍäätí‡û††B£ÑÜ÷1,,,žžŽ¹sçvadá7~•+u8|xÛ¡Ü3™™%˜9s þøãuôëçÇv8]†^¯ÇÚµG±iÓI¼ðÂ8¼ùæ$XXÞ·ÝM[›«WÂÎÙxòÉxÿýdèÙ­) ™‘@ @ î‹ÌÌŒi:ý";2rd$BC=Í*; ¾|Y¹r26l˜ƒ¯¾úÏ=·Jåý™C¸;œíðÿ7?þ¸ÿ]ŒGù?df–°–QBd$@ @è2t:þýïƒÃáÀÛÛ}ô@ `ܸqX¿~=üýýáåå…ï¿ÿ¯¾ú*¼¼¼àçç‡={öü㱿ýö[„„„ÀÉÉ ‹-‚NGËlÂã QQÑdRÃk:baa´´ìß_…BÍv8]άYqHOÿ} O<ñš›ÛØ©W0nÜüñLj‰ ÆìÙ_bÍšÃP«µl‡eTI @ ºŒ‚‚ØØØ ¡¡ÀÇŒýû÷C­VãÏ?ÿ„P(D]]V¯^Å‹ÃËË |>/¿ü2þóŸÿÜö¸Z­ùùù())Á… pðàAüý÷ß=øÌÂde•ÀÖÖLJ±Ê}3sfd2%~ýõ<Û¡t ÉÉQ8|øEm˜2å3\»ÖÀvH½ww'|ýõSX¿~~ø! ))Q]-`;,£ÈH@ Ðe¸ººbíÚµpttDrr2–/_Ž]»v ²&ßxã XXX`ܸq°¶¶Æ+¯¼Â\—Hþy éš5k`kk‹ˆˆDGGC$õÄS"·!3³LJÂÞÞ†íPî//L˜0;wf³J·é#GVÀ×—‹””MÈ̼ÎvH½†™3GàØ±W Vk1~ü§øå—"¶C2 ˆŒ$@ ]FDDllÚÅÄÀQ__Ï\wrr@•GÚÙÙÁÚÚš¹þOXYYÁËË‹¹N†1ìcÊý";2o^"rsËQZÊg;”nÃÝÝ ûö=‡Ñ£û"-íkìÚe^}2™ðp/9²3gÆá¹çvàÕW÷B.W±«X³@ `îhµ:´µ)r¹š$ •*¡ÑP}¤Äb9ôzj ªH$ïð8%@¥Ò0^:CF×éôýe²ö; …ºÓ™LÙ©‡U[›’9Nû±¼1f̽}8onnîtÏçÃÝÝýžŽA ŒŸŠŠ&Ô× M¶_dGz¨‚ƒ=žžwßÎv8݆­­5¶l™O?ý¯½¶ååMxûí)äËÀÖÖï¿ŸŠ‡ŠÂK/íA~~¾új!ú÷7Ÿ)î÷‘‘@ ³G$’A«ÕC"Q@­ÖB&£Ä›Tª4ü\½^™LµZ ¥R …BÍ< åœÞ uP*)9¨Óé ‘(;ÝG&SA¥Òvˆ÷ƒ¥¥\\66–pr²ØÙÙ0e‘ŽŽ¶°±±¸¸ØÃÊŠ*~²··—ëNF KØØXB¥ÒA¯×A¯×ÃÊÊ’y*• %0år\\ìÐØxïý­*++qäÈL™2‰[·nÅóÏ?ÏÇÉÈÈ@dd$xÏ%ÝOff m1th0Û¡<0––˜;7_ýÞzk ó7Õ±°°Àk¯=†ðp/¼òÊ^TW °qcšI—Ú›& ÄÉ“¯bùò˜4i=Ö®}³fűVCd$@ ¡Ç¡å'Ë¡Óé!Ë¡ÑPY„”ÈS3÷•J)Q(‘È¡ÕÒ÷Õ¢­MiŒ*CöŸR©jµ uÜ»ÅÁÁ¶¶Ö°µµ‚££-,,,ÀáP2ÐÅÅ–––pp°…5œíàíírÃ}ìaeeÁÇÆ¦ý8\.uKK XX‰66VP«µP(4°¶¶€B¡†F£…J¥…V«‡Tª0ÈBµA”j ‘( Õê É™ÌIZžÒô^ž·…˜lJ꺬­­`gg =îu`uBB^~ùe|òÉ'¸~ý:bbb°lÙ2÷&6W¬X%K–I )YY¥HHˆ0q7kÖ|úéoøõ×óHI‰e;œnçñLJÃßß ‹ÇߌmÛ–ÀÛÛ…í°z~~®Ø·ïy¬[w /¿¼•øàƒ°µí=ŠÎB¯×ßý»3@ B¯€ÊT@*¥D X,‡\®†J¥P(ƒR©B¡†X,‡RIeÓI¥ (H¥JÈdJ(•ˆÅ F& …rFšÝ ”ȳƒ½½5ìím €ÖŒär`ii Çþ¦ûÒ2ÐÙÙVVô})ihmm'';Ãu{€³s{F! A)+ PPR”^¹\mØWÖAÁdJ¥J´µQ‘JUHŒ(¤3'ï‡c+++p8öL¼öö6°±±„••´Z-,--¡TRÙ›´„•ÉThkSB*UB«m·ˆVV–puu„»»||8ðôt†¿¿||8ððp†·7^^.ððp†§§3ó¸´´4@zzú]ýÎh ²³³Áårkê-,,žžŽ¹sç² `òèõz üž{n ž~,Ûát‹}©T‰}ûî=›ÛT©¨h¼yß@¥Ò`ÇŽ¥èׯw– ³Å‰—ñ é óÄ·ß.B@€Û!õ½G»@ ˜!”¤„Y[›Â •H¨ëJ¥öž¥b[›¢“Ⱥ´üsq±ƒ œœìàäd ;;¸¸ØÃÃÃvv6àpAÈá8ÀÖÖŽŽ¶°··é ­àâbKKK¸ºR‚ÑÅÅþ¾ÖC"Q@&SB*¥ž‡H$‡TªDS“mm”$‹J•Ì…¾%•™§èÔ?ñVp8pp Ä'½O?OooìímàìlggJ$:9ÙÁÅÅžyÞ..ö°³³†££ J"ŠDr´´HÁç‹ÑØ(FS“ "47KPVÆgÊÊJ®yy9ÃÃÃ~~\xz:ÃÓÓÞÞ”l¼`ì ìíí1f̘='@è9Š‹ ´™E¿Èޤ¥%báÂoQQÑ„°0¯;?À  󯿮ÀâÅß#%e#¶n} £Fõe;¬^ÃøñÑøý÷—±tévL˜°[¶ÌïëOd$@ BBgÛ …rÈd*ÈdJÈd*…2æºTª‚H$7ìS?§…-)¡öÏÂÌÉÉvvÖpq±gJ‹)9HI³à`ØÙYÃÁ¡]ŒQR±ããln)»²Ù½JE•K$ TU Ë rõFa¨`$c[›b1-©¬L±XqÛsØØPÙ…\®œœìàìl''[8;Û#8ØÎÎÔóvt¤Ä"‰Hßîà`GG;p8öLæåP«µÚÐÐ BS“|¾¥¥|47KP_/‚@@m›š$ÉØÚZÃÛÛ>>”`ìßßQðõåÂËË>>CF£ ¬­-ÿ!BG¬­ÝqüxBBJ GÇ;ÿ ­ÉÊ*—ëˆÙ¥K;¶?üü¸Øµ+o¿=…ípz WWGìÞý,^ye/æÏÿkÖ<Ž ’Ø«×ê‰_~ù7Þ|s?æÍû¯¼2/¾8Þ¬ I p”JZ–É!‘PÙvb±Ü ÛEXGYHÉDS²LËÄŽÒéFmáèhkfކ}[8:Ú!$ă‘eNNvŒ0£ïC_ï(ÔzªtYÁd¶µ) ʹH_Äb9#E"y§õì8á¹#t6¡³sûóuv¶3¬‡3\\ì™çÜY4Ú1‘ñ‡³³}—ö4Óëõàó)¹X_/Dc£"Ô׋Àç‹QW׊ææ645I:=ÎÅž¾”`ôõå"44>>\ƒxäÀË‹’Œ®®Ž]ëƒ@õî´†³ó­?¦†•yyÍ8~ü X[[bР@ †øøp Fz¥÷ÀéÓב”KKó’%––˜3'?ü‰×_ÌlúaÞ ¶¶Öظq.Âý°rå~”—óñÎ;ÓÍîwl¬88ØâóÏç"66ï¾›sçj°yó<8;Û±Z·@zF@0kd2•Az) B¬]&J$JFˆµK3…!3¯ýv•êÖ2†Î$tq±7dÚÙ1å·..öŒ8tv¶ƒ‹‹#i¹Fÿœ–‰=ý ¸N§‡H$ƒH$gÖD(”uXEÑ(g„#¹(‘Èo›™I?gz-\\(1Èá8€Ãé|;uq€‹ %a»C Þ-2™ <ž "44ˆÐØ(BCƒØ°OÉG>_ÜI*s8öðõu…¾¾\øùqáíM‰Eoo³oì“JµZ.]ªCVV ²²J—W™L‰ää&ìÝ»“íðºg䨱“‘“S†‚‚Jäæ–£¸¸Z­¡¡žˆ‹ C\\8FŒCd¤·Yg¥÷‹V«Ctô*¼ñÆcX´è!¶Ãérx>fø‹Ÿ÷®J¶½^ââF>fg—A,–ÃÓÓII‘HJŠBFÆV88hîy€1r»6mmJTädŠŠª!“©àææ„# ‚2 ƒõªI§Âí(*ªÆäÉðçŸo o__¶Ãé,øjµ»w?Ëv(¬‘—WާŸþîøá‡Åðñá²R¯¢±Q„§žú55-øî»§ÎvH] ‘‘@ ºZ”Ñ"ŒÎº‰d å7ÝÞ^º«„H$»å1-,¨‰È\®“ax££d™Ã ­sö1ѱô»],¶ï …rF6v܉䷜LmccŬuq¼§}c‰wB.W¡¶¶•Œuu­†j“ÉØÔÔÖiе—— ¼¼\àfèÁØžÑèïïÊüÜÜ(+ã#+«YY%8s¦A¸\G$$„#99 #GF¡o__æ5p¿Ó´kkW<óÌ{X½z <…o¿ýEEÿ5¹ÿ/î–ãÇ/áé§¿Ç™3o›cVÚ]SYÙŒ ¾TªÂÎKÑ¿¿?Û!õ* 5V¬Øß~»€µkŸÀœ9 l‡ÔUI ៹W¡Øñö[‰2[[k¸ºÒò˱þC§,»öì¼Î¥¼ÆÜ;‡DÓÚ*Ek« B¡ --R…2…Ômôí­­ôí²[ö‘¤û>ºº:2Ù†®®Ž†­ƒA6:vÚ§e¢““ñ®Ñ½¢RiÀãµKFj_OÈH¡°]\;8Ø" ÀÞÞøù¹2Ù‹tF£Ÿõ³ÞÒ¬¦¦ÅùXŠÌÌ46Šàäd‡øøp$%E"99 ÑÑ·Íò}üñ°·×š…Œtp蟩Ðë-ðÐC}’‹GtWS*+› b²yyå(-åúöõÅðá¡LiwHHï•„ÞÜ9_ÁÍÍ [¶Ìg;”nC£ÑaĈ՘5kÞ|s2Ûá°ŠH$Ã’%Ûpþ| ¾új!ÆŽíÏvH½ ½^ ŽcݺcX¶lV­šj•9‘‘@ ôT*Mqxg‰(ÉÑÚ*»/¡H˳ÛÝn %­”€•¢¥EÆCZ¶´Ð¢QÚA,R?¿UoI.×nnÔÅÕÕnnN†mû>µ6׫7È2FÇ |áñ„Ì¥®ŽÎr¤Jªilm­áïï ??.Ü û®ð÷wE` üü\{}¦Zc£ˆgΔ¢ºZ{{ Š‘#£0rd$† ùÇ)Ü …‡aÇŽ3(*ªDR’?ý´£ŸE÷`aamÛvÀÕu,Ä_ÃÊÊ& DJJ ÆŽí×eØ­­RäçW ?Ÿê;yáB T* ||¸ˆ‹ cÊ»  Ï f…Z­E¿~oaõꤥ%²N·òñÇG±gOòóßéõÿŽÕj-^}öï/ÀêÕ)fÙ+ÔØ9r並¦‰‰kðí·‹ð裃ØÇ(Ø´é$Ö®=ЧŸ~ï½7Ý2ôLŠ‹kñÔSßÁÍÍééËL¹'‘‘@ °…J¥a¤bK‹ --m7IFzŸ–i·8ââbww'¸»;1ìn²Mq2"½f--R47K H™uki¡¤¬@ÐÖA@Jo`ãèhËÈCZ*Ò[WW§NYŒ¥boÈT¼ÄbêêZP[ÛÚ©_cmm Ó«‘.?·°°€··K§LFZ2úûsè//ò¡æ.‹åÈÉ)Cf&Uz]\\KK ˆ¤$*ó1..ü®ÿ}«T>|;vd#/¯¡¡žHKKÀ¬Yñðôt6«ž‘·`õõB:tžÅÅ‹µðñábÚ´¡HI‰ELLð=ŸK¯×ãúõFCö$UÚ]U%€••%¢£0|x(âã©Òn__“ý0Iè…¬[÷;öíËGnîØ¥G˜;w+¬¬,°cÇ2¶C1Ž9^؉‡î‹-[æ›UkS ¡A„´´¯!‘ȱsç2ôéc’C¤ˆŒ$¡+ÉTŒ8lÏR¤$ã­¤bk« R©ò¦ãЙunn´\¤³í¨ëÎnss3mI&ËÑÜÜÖAÄRë×Ü,é$››)ÉxãšY[[2–^OOg¸»;3‚¶ãu77§»Ê#P=¢hÑXSÓ‚êjjjZPSC H±XÎÜ×ÕÕ~~T©ô‘Îp4å×)›Èd*äæ–3Ù/ÖB§Ó£?Œ…ää(ÄÇG€Ã¹·r­²2>vîÌÆÞ½yJ•?>óç'ᡇútÊæMKKÃO?ýdÒ2R.×ÀÁÁ3gμ­ŒìHY…8p M õÄŒÃ0}z ¢¢|î;ŽÆF1òòÊ™Á8W®ÔA£Ñ!8؃)ë1" }úøöÚŒj‚ñ3cÆf„„x`Æ9l‡Ò#üúëy<óÌÈË{þþ®l‡c4œ=[‰E‹¾ƒ?þ¸~~dmz‰DÅ‹¿Ç¥Kuضm±)NÚ&2’@ „‘HŒë(; ÆŽò¬µUzS_E++Ë›¤!-Ìn'ÝÜœLú¨Z­½A JnÈZ”B è,oÜâèh ww'xy¹ÖêÖR‘^ÃÞÞðA‰d¨©ií [:íwÌÂõñá 0ÐAAîpCPµè†À@7“*Û7v”J *qæL 23Kpî\5Ôj-¢¢|0rd$’’¨Òkww§{>¶J¥Áï¿_ÄŽgpæL\‘––ˆÙ³ãn[ê•––†]»v=èÓ‚8œ‡ÑÚz:ÝÍ_ÄÜ;»89Å ¥%ã¾ÎkeÅ—×}ÞÞ¤¥%`îÜ„/§ËÎ.Ããoƾ}Ï!9¹Ï=?~éÒí¨¨h‰¯Þ÷ßOˆ•+÷ãäÉ+˜5+ï¼3í¾…žJ¥Á_ãàÁB;v Z­£G÷CJJ,&LˆîÒþiUU‚Nr²¤¤з¯/#&ãã#øõB Ü |pÇŽ]Äÿþ·’íPz”ÊÊfŒù!~øa ÆÀv8F‡Z­ÅÊ•û±woþóŸiX¶lÛ!õ:¾ûîxï½Cxî¹1xë­)l‡s7I ã c-ùüÎ’‘î-(tJbeeÙ©_ %aæééløµon¶µZSMËE:‹‘^ÏÆÆ[g~ZXXtXgx{sn»ïééL¤U"Ê:ôilíTJ][{kÙØQ2ÒåÔD6²‹^¯Gqq²²¨²ëœœ2ˆÅrxz:#)‰*»NNŽBx¸W—œ¯¶¶ééÙØ³'MMŒÕóç'aüøhV2zôz=¦MûNNöسçÙû:ÆÕ«<Œ÷)¾ÿþiLœ8ðâùõ×óXµê ´Z-Þ{/3f { ãI¥JüþûE:T„¿ÿ¾kk+Lœ8©©±=º_—÷J eŒ˜ÌË«ÀùóT¿¯/ 1"ññè×ÏϤÛ~Œ“I“6`È |ôÑl‡ÒãÌœù%m±}ûb¶C1Z¶lù~x ŽÄêÕ©$‹´‡9rä<þõ¯HKKÀ_lXG1“¹Hg€R²VŠŽÿÛØXÁÈ^^í"–Z3z-9ÌÚ‘7‹ì ÑèÀãQÙŒ••TU P]Mm++›™1––ðñá2b±£p r‡¿¿+‘FFYYY¥Léµ@Ð.× áLöcß¾¾]öwK«ÕáÔ©+ع3üqžžÎ˜=;ii‰ rï’sÜ/¿ývK–lÃo¿½„Áƒƒîû8O?ý=x‡ŒŒBäåU€ËuÀ”)C’‹„„ˆn‘ƒ …çÏ× '§ ùù((¨€X¬‡cáÃéÌÉp LÚ`±XŽèèUøò˘2ŤzÓu ‡á…v"/ïøúöžõ{åèÑ X¾|'’’"ñÕW Í®ºÈØùë¯b,^¼ Ó¦ ŧŸÎ2æ÷øDFá/a$b}½°S/AªÄ—š&ÝZÑYvt&#•¹èˆ1Z2šk:•Jƒ¦& Dhj’0ëÇã ë)BS•ŨӵÿíèhÛA"¶ËYOOg¦ÄœÚ:›M¿Js@"QtŒô~U•uu­L–ª‹‹=‚ƒ=âÐPOf?$Ändµ‘SSÓb(».Eff Epr²C||¸¡ì:ÑÑ]þ¡ ¡A„ôôìÚ•ƒ†’“£0~&Nh¯­V‡Gùýúù᫯<б.]ªÃĉë°}ûâ.ëI–Ÿ_—_Þ>_ŒU«¦bÞ¼Ä.Äuu­8t¨âòå:øúr‘’ƒ””Ø’²wB§Ó£¸¸¹¹åÌ`œúz!ll¬0dH0ââÚ§vwEŸKBïáøñKxúéïqñâû½òµ£Vkó.–,y+VL`;£¦¨¨‹} güøãR6=INN,øcÇÀ¦MiFñ~àI ªì‹àB•óR²‘Œ"ÃÀ’¶NxŽŽ¶ðñá2½©žÎú1¶—N›» “ËUhl¤²élF>_ÌÜFo[Z:KZ:ËÓLJÃl;îÓ[2­Øxih¡¢¢UUÍŒh¤²›™ß·¥¥|}¹ÁèɈÆà`J>ÞÏdd{46Š™IÉÇ3gJQ]-€½½ †3 œ‰ÄС!°¶îúŒ­V‡?þ¸Šôôœ:u®®Ž˜5+óæ%"4Ô³ËÏ÷ ìÞƒ7ßÜ¿þzaa^†¾pá·hj’àèÑ—º : ¥RƒO?ý[·þ‰øøp|úél„„xtÙñàúõdd!#£••͈ˆðFJJ,RSc»¬<ÿŸ¨­mEnn™¡÷d®_o€^DFz#>>qqá1"¬ËŸ7Á¼xçƒ8s¦'O¾Æv(¬±zõ!üúëdg¯"mî@]]+,øA~üqi·~ C¸™¢¢jÌ»qqaøúë§Œ1ɃÈH@0WÔj-š›%àñ¨Ì»†3”„Êj” ¾ž’Œ*•†yÁH‹0OOøúr˜²_Z:úøpáèhþ‚L"Q0YŒÿ´•HÚ'[ZZzWràçÇ…§§ ³õ÷w…§§3üü\áååb¬ßVn€Ž••M†m3ÊÊšPYÙÌ ùqp°í iÙè‰ÐP¹“RjF hÙ3”xÌÊ*Ai)66Vˆ‰ Arr’’"1lXh·¾Ù¯«kÅîݹؽ; "$%E --“& 6Ê×–R©ÁÈ‘`üøè.ë/wþ| {l=vìX†Géß%Ǥ¹p¡/½´••ÍxóÍIX¼øán‘ ……UÈÈ(ÄáÃçÐØ(Æ!AHI‰Åôé1=Vú)ÊPPP‰ÜÜräå•ãüù¨Tøúr ™“” ìßßϘKü≠qŸà¡‡úàÝw§³ k”•ññðÃk‘ž¾ £G÷c;£§­M‰¥K·!?¿›6ÍÃc b;¤^Å•+<Ì™óúöõÃöí‹ís‘‘`jÐ’‘*ç•0e½”t”€Ç1};âêêÈôôñáÂÓÓ¹SV#-==Yzf= ݃‘ÎXì¸Og666Š;M“¦E­Ÿ^^øúr˜mǬF—nɈ"tz½õõ7 GzK¿œœìꉰ0Ï[/„…y’Rf„X,GNN“ýX\\KK ˆ¤$ªì:..¼Ûߨ«ÕZœ:uééÙøóÏb¸»;aæÌ8¤¥%tI¦aw²mÛi¼ÿþadg¯‚§ËŽ»`Á7hm•áðá»ì˜4jµ7žÄÆ'0dH0Ö­›…¨(Ÿ.?@e¸ž9SŠƒ qôèy´µ)‘3†aÒ¤Á÷=éû~P©4(*ªf¦vççWB$’ÁÙÙ#F„aøpªïdLL0ÉÒ若¶J1hÐðÝw>DÊÔ™1c3<<œñÍ7O±ŠI Ñè°jÕÏØ¹3o½5Ï??–íz¥¥|Ìšõ%‚‚ܱk×3Æ$$‰Œ$cA£Ñ¡¹™Ê²ãóÅ·•MMK¥é2_J¹0w~~®ðöv¯/u»1fÎtZ­MMÔÕ ÑØ(B}½<ž "ðxBÔ׋ÐÐ ê” jggm‰ÜNkFoýü\ ½ÍnPNoƒÇ¢¼œ“l¬¨h‚RI½&\\ìoŽ^ÌÖÛÛ…åg@è¤R%òò*˜3/ÖB¯×£_??ŒIM»Ž‡cß#ñTU °{wöîÍGS“ÉÉ}––€GdÙÔjµ k0iÒ`¼ÿ~j—»°° S¦|†Ý»ŸÅ¨Q}»ôØ4W¯Öã•WöàêU^{í1<óÌènÍT©48uê*22 qâÄehµ:ŒÓ©©±˜0!ºÇ N§Çõë ÈÉ)GAÕw²®®66V4(qqaˆÀðá¡ððè_`öv~ûí"–.݆˗ט}Û;qàÀY¼ôÒn¼ //òžànùúë¿ñþû¿`î\jÒ3ùҾ種 5u3BC=°sç2cùR‰ÈH@è „B#ÃEàñD¤£éרq`‰››#Ƽ½9ðõå2™wÔ…ºÞ[$#@}Àmhè(ÅàñZ ·‰PW׊æf 4ÀÂÂ^^TI´nðõåÀÏÏ•Éjôñáôh ¡û‹å(+kBy9¿Ó¶¢¢ 2•áÈá8Ü$Ãé,ÇÞ’Ü›Q*5((¨Ä™3%ÈÌ,Á¹sÕP«µˆŠòÁÈ‘‘HJ¢J¯{²—§Z­Åï¿_Dzz23¯ÃË‹ƒY³F`Μ“ëå÷ãgðÎ;‘“³ª[2†ÓÒ¶B*U!#ã….?6F£Ã—_þuëŽaР@lØ0‘‘ÞÝv>‰Dß¿ˆŒŒBœ>}vv6˜8q RRb1jT_Öd4'D^UÖ›[Žk× ÓéåÃdNÆÅ…]ßRB×ðŸÿDnnŽ•íPXG¡P#6ö=<ÿüX,_þÛá˜ÇŽ]¿þµ#F„á›o‘IÛ=Hee3fÌØŒ>}|ñÃKŒ¡‡$‘‘ð ÐÙŒuu”PäñZQ_/Bc#µOm…P(ÔÌcœœìàïOÉ1??Z4¶ËEZ4Á=Š\®b#-E¨«¢¾žÚçóÛKÏ­­-áåÅé$ýý]áëË…¿¿«A@rL"‹ˆpï¨ÕZTT41’±¬¬ ee|”—óÑÜܰµµFh¨'""¼îðpODDx#"›dóô2Ôj-Ϋ6L¼.AAA%”J BB<”Åô}ìÊr⻥¢¢ éé9Ø·/--RŒÓii‰xä‘&ù÷K£ÑaäÈ0vlÿ.ëy#˜6m#öí{ÉÉ}ºå4ÅÅõxé¥Ý¸v­¯¿> Ë–ê±ÁÍÍm8|ø22 QPP WWGL›6))±1"ŒÕb±yy홓çÎUC©ÔÀÛÛññ1‚šÚ=`@É€2H¿ÈμóÎAœÒÓ³±o_>Äb9ydÒÒ0vl³ç£F­E||8Ö¯ŸÝ­çÊË+GJÊ&üüór$&Ftë¹h®^­Ç‹/¦£´”•+'wÛÄí;Q\\ψÉêj¢¢|š‹””X£)“Öëõ¸~½ÑPÚM Æ©©iµµ% ÄðáaHH 2(ÉÿùÆ éyk¦Oß??W|õÕ¶C1IÄb9–,ÙŽs窰uëS3†L'ï)._®ÃOlÁÃ÷Á–-óÙzÿAd$@0?Ôj-#Äè_OˆÚÚVÔ×S×é2N€^âïïÆˆ±€7øùµg7R¨{gƒj­V>_ŒÚÚVÔÔ´ ®Ž·µµô¥¥“häráçÇE@]†îÊìS¥Ó\p8,>#›H$ ”•ñqýz#JJQ^N‰Çêj4¬¬,äŽÈHoôéã‹ÈHo¦¬º'{÷Lƒ²2>23©3gΔB h—ëˆÄÄŒI Ⱦ}}Y/¡S(Ôøõ×óHOÏANNÝ0gNæÎ‡yM`?pà,V¬Ø…ÿýoeH±'Ÿüz=°ÿ¿ºý\47žÀ矟@LL>ûlkP¯×ãìÙJddáðáshj’ &&©©Ã0uêPVÚü "äæ–#?¿99e¸v­Z­áá^ˆ‹ GBBâãÃM®Gª¹CúEÞ: ¼¨è¿ä=Ê}¢VkñÚk{qàÀY|øá˜7/‘íz çÎUcöì/1aÂ@|þù\6Þ+I L N¦&1jk…ŒXì(kk…hj3ƒ`ll¬˜Ré€W¦¯`` üü\™)ɽ¥RÓA0¶ ®ŽÊ ¥÷ëë…P«µ¨µô÷wE@€ÝäÎìÓëj$ÓÙ,ÃçKpýzJKù(-¥ÄcII#D¨LãÈHoDFú Of?2Ò»W d"Ü••ÍŒxÌÊ*Ec£NNvHHGRRFŽŒDtt€Ñd×#==?ÿ\©T‰ñ㣑––ˆQ£úše‹ N1c>Æ!Aظ1­GΙ“S†36³R*yå /¾¸ ååMxë­ÉX´è!V¯Z­§O_GFF!~ÿý"¤R#1cF,&Ml”_ŠÅ œ=[‰¼¼rää”1}'}}¹LYwBBúöõ5Ë3¦Â¸qŸ 99 ï½—Âv(F…\®BLÌ{X±bž}v4Ûá˜,z½ë×ÇúõÇð¯ÅÊ•“Yÿ±·PPPY³¾Â¢EÉXµjjŸžÈH`T(jƒ ke$Y]]{V^c£˜‘c––ðòâ 0Е‹%c` é+(+PW×Âd1ÒëJoÅÌ}œìèf¸´‹Æ€J<ëÖÍ6Š2i…BS§®ààÁBœ:uz=0vl¤¦Æbüøh£mm¡Ripî\µ¡ï$UÞ-‘(Àå:".ŽšØŽÁƒƒze[6 ý"ÿ™·ÞÚÓ§Kð¿ÿ½IÚ²o_>^{m/{l06nœK¾œî!Ž¿„Å‹·á7&õôtx"# BÏ"´£‘Œt^]]+‚öòi{F„ÑRŒ.û¥û öö7£â‚‘ZGJ:RòV,V0÷õðpfÖ‘ŽíâÑnn¤Ä„pkD¸v­ÅÅõ()id¶ õúòósEŸ>>ˆˆh/¯îÓÇ·WgVF>ž9SŠššØÛÛ`øðP$&Rò1&&Ä(ÿî_¾\‡ôôl8p …>:ii‰HNŽê5P'Løáá^øê«…=zÞsçª1yògؾ}1ÆîÑsÓ\ºT‡+v¡²²o¿=O=•l4¿w±Xß~»€ŒŒBdf–ÀÁÁ>:©©ÃðÐC}ŒJæßˆV«ÃÕ«õÈÍ-c%Ÿ/ƒƒ-bcƒ„„pÄÆ†’¡8ÝéùÏ\¹ÂøqŸàÀåHHè™ÞµæLff –.ÝŽ¾}}±}ûb¸º’×\OðÃYxë­Ÿ±iSfÌÖS§%2’@ tÎ0)¹õÙTù¯\ÞÞ_ÐLJÃÈ1úÒQ<cIQO¢Vk™2ôººVTWwîÙXW× •J°²²„¯/÷¦5ìXRm¬™ãÏ—àÚµz\¿Þ€k×Ú/t¦£·· úöõCŸ>¾èÛ×ýúù¢Oß^ÿo•pÔ× ‘•E‰ÇììRTU `kkØØŒ‰ÄÄH j´Ùb±¿üR„;³qáB Âý˜,ÈÞ&âÿú«sçnÅñã¯bàÀžŸŠºhÑw¨­mÅñ㯰&Õj->ûì86m:‰¸8j€Op°qõ>äó%8|¸…(,¬†»»¦MŠÔÔX j4õŸ(/obʺssËQU%€µµ%B\\ûPòk×ðÎ;‘“CúEþ“&m@x¸6ožÇv(fÁµk ˜?ÿkØØX#=}™Qd›÷Ö­;†O =ý$'GõÄ)‰Œ$wF£c¦M×Ô´ ºZÀì×Ö¶¢±QF€ê/HÉ0ׂ̹àf´0{ z=«ª¨­mAUÕÍëI÷¾´³³f2o·îðõåuvÁ¸ÚP\Ü`ÈräáúõF\»Ö€ÖV)*‹–”|ôA¿~~äjÂÑØ(Fvv{æcyyll¬ÓY>û'ùùص+‡ŸƒN§Ç¤Iƒ‘––ˆ„„p“9ÝÁÌ™[`ee‰Ý»ŸeåüW¯ÖcüøO°eËL›6”•h.^¬Å‹/îBMM Þ~{*.L2Ê×EU•…8x°ׯ7 8Ø))1HM†¾}}Ùﮡ‡âЂòÚµèõ@Ÿ>>HHˆ0ô ‡ŸŸ+Û¡š$ãÆ}‚‘#£ðßÿ’~‘·c×®¼ýöÏ(*ú/yŸÔEðù,\ø jk[±}ûb ÊvH½‚•+÷ã§Ÿò±oßóˆ éîÓI ÚÑëõàóŨ®¦Dcuu SFM÷l¤e£½½ ‚ƒ=ÔQ4Rò‘î/hŒo¾{š¦& #n;¯«<^ûpGG[„„x 0ÐÁÁú5ºõÚiÞ„C©Ô ¸¸W¯òpõj½áÂcÚ!¸º:¢_?J6ÒýúùÂãweuº‡¦&I'ùXZʇµµ%† f¦]jƒ¯š›ÛðóÏHOÏFi)ø#--3f ëõ¥‹çÏ×à±ÇÖcïÞçðÐC=;D¦#Ï?¿—/×á?^g}ˆ‘Z­ÅúõÇðŧŽuëŒ/K²#—/×áàÁBdd‚ÇbÀ̘1 ))±ð÷7-‰'É—WÜÜräæ–ãÂ…¨ÕZ¹3='ãâÂåÃv¨FéywH¥JÄļ‹×^{ K—Žb;³A&Sá¹ç~ÄéÓ×±iS&OÂvHfV«ÃâÅÛpöl%~±»³R‰Œ$zA#Ãè,¼ššCv^{Ù/Ùìà`wµ_‚ƒ=ˆ3ÐÖ¦ì”%ZU%0GêºLF•¥ÓëI¯_p°»Aæº#$ăÈÂSSÓÒA:òpå ÍÐjupp°E¿~¾0  SÆ£¹Ô ô,--RF>fe•âúõ¦|211II‘ˆ‹ ƒ““Û¡Þ:ÿ} {öäâ÷ß/ÂÁÁÓ§Ç"--ƒ±žÑðì³? ¢¢Ç޽ÂjM5j-Ö­›'ŸÁj,4/ÖbÅŠ]¨ªàí·§â©§Fõµ:¹¹å8xð,Ž9±Xޏ¸p¤¦ÆbêÔ¡&™õ%—«PXXÜÜ2ä䔣°°2™ žžÎˆ‹ gettëÛØøý÷‹X²„ô‹¼Þxã'äçWà?^g;³B«Õáw2ðÙXµj™ZÞÈå*<ùäˆÅr9ò8ûî:‘‘‚¹!•*QU%èTò{+9fee ??.#ĨŒ¼vQæãÃ%Ón 44ˆPYÙŒª**+›QYÙÌd8v¸ããÃAPµ~!!Œx r‡¿¿+y“KèÚÚ”¸v­W®ð Ò±ÅÅ<ˆÅ XXX 8ØýûûcÀôëç‡èh„„x’Ï„.§µUŠœœrCæc Š‹`iièè$'G!11ññápv6 ùHSW׊={ò°gO.êêZŽ9sâ1mÚP“ÈâìI*+›‘œü¡Q”GÀË/ïÁ™3¥8}z¥Ñ :R«µØ°á86o>‰#°~ý„„o–$Z­ÅŸ^Å…8~ü´ZFî‡3†aâÄFßNávh4:\¸Pƒ¼¼ ää”!?¿­­R8;ÛaĪçdBB† 6š×[~‘w!~èп1bDÛá˜[·þ…÷ßÿ $áý÷gÏTÝLss&N\‡~ý|ñãK»k½‰Œ$L‘ÆF1ªªšQYIIFZ’UU5£¹¹£ãvÊj¤öÛåXo“E£Vk™ž”hlß6A©¤²ElêO„„ÐÙž rCHˆ'ììzwLB×¢ÓéQUՌ˗yL©õ•+>Ü$©ÕZüþûEìÝ›‡¿þ*†»»žxb8æÎMDd¤7Ûá-o¼ñNŸ¾ŽÓ§WŇÃÚÚV$'ˆÿþ7 Žd;œN\ºT‡_Ü…ªªf¼õ x[` IDAT5qÛT¾$’J•øí·‹8xð,þ÷¿ë°··Ác BJJ,~¸¯I÷¬Öëõ¸~½‘ˆ“]†ÆFìím0lX"‘aÃBLVÀÞ/ãÆ}‚¤¤H¬^Êv(&Áĉë0`€?6l˜Ãv(fÉÑ£°|ùN<ôPlÙ2ßdª,L•+Wx˜:õsÌŸŸˆ÷Þë–ž±DFƈZ­e$cU‘G‰ÇÊÊf(j€­­5BB< bÌ¡¡”$ õDp°‘cJ•Œdl—·Ô–Çkï…éîîĬaHˆg§5õñá°ü,æŠR©ÁÕ«<\¼X‹K—êpùrŠ‹ë!“©`ee‰°0O àþý)ùØ¿¿?‚‚ÜÙ›`æH$ ää”J¯Ëpùrt:=ú÷÷cäcBB¸I—ï•–ò±kW6öï/@K‹£G÷ìYqxôÑAä »;ÀçKð>Þ}wºQ‰¿wßÍ@FF!²³WÁÑѸ2YÕj->ÿü6m:‰aÃB±~ýl“›ÛÜ܆_~)ÂÁƒ…(,¬‚‡‡¦NAjjŒÉL侕•Í1YŠœœrTW `cc…¡Cƒ™ÌÉ#ÂÌúË?Ò/òÞùá‡,¬^ý ŠŠÞ3É/åL³g«°hÑ·ð÷wÃ?.%톺™£G/`éÒíX·nfÏŽïêÃI °…P(»…l¤²ëë…ÌeZŽÑ²‘!!ðóãšÅ›¾®B"Q ²²ååM¨¨h2ì7£ºº|¾`ii__.ÂÂ<ìiØz ,Œ’ŽäÍ¡»‹å¸t©.ÔâòeJ<––6B£ÑÁÅÅøcàÀ@DGSò±o_ß^—A`©T‰ÜÜrfàÌÅ‹µÐéôèÓÇIIQHJŠ@bb$ÜÝØõËUøå—sؽ;yyåpÃìÙñ˜=;nl‡g2|üñQ¤§g#/ï£úÕÒ"Ebâ<óÌh¼üòD¶Ã¹%—/SY’ÍX¹r2ž~ú!“É’ìHU•žEFF3‘;55©©±èÓÇt&rß OȈÉÜÜ2f×ÀˆGb"5µÛ{jÞŽcÇ.añâïI¿È{@"Q &æ]¬Z5 O=e<_И••͘?ÿ(•jìܹ̬þÖ#6ÇgŸǾ}Ï#>>¼+Md$Ð47·¡²² ååͨ¨ •ñ(ÉÖÖ–ð÷w3ÈFN²1$ij;›Æš$r¹Ê ©5-/§¤cYŸ)Q·±±B` ;ÂÂ<Kg8†„xÀÖ–dŒz††‘A<ÖÄ#ÕÕ€·· ¢£0p`  ÄÀ ñ _0z ™L…üü F>ž?_ F‡>}|ñ˜˜ OOó°uáB ÒÓspèP!är5}tfώǨQ}MR±‰TªÄ°aÿųώƊØç&>ÿü¶lùYYoíëW­ÖbãÆ“Ø¸ñbcC°~ýl„…y±Ö}sùr Äd}½ÑÑHM5ɉÜw¢©I‚œj NNN)®]kôíë‡ÄD*s2>>ܤ‡=’~‘÷ÇË/ïÁùó58uê5¶C1k„B.üׯ7bÛ¶§‘ÁvHf‹^¯ÇsÏí@VV Ž}©++³ˆŒ$”–)**šQ^ÎgYe%µ‹¨rêðp/„†¶gâÑ¥¿n¤ì”JAÞ6wÚ–—7¡¡A€Àà†ðp/„…y¶Ô~P‡I÷/"˜:••ÍŒx¤K­‚6XXX $Ä ::ƒ!::€”–z¹\…‚‚JF>ž;W µZ‹ðp/$%E.QfõÚ‰d8pà,ÒÓspå ‘‘ÞHKKÄã7ZIe |ÿýi|ôѯ8{ö]£¬(ËUHJúS¦ Åûïw¿»+WxX±bÊÊšðÆ“°dÉÃ&-Çé‰ÜœÅ¯¿R¹ããÑš: S¦ 1«ìA¡P†¼<*«<7·—.ÕA«Õ!2Ò›)ëNLŒ€ŸŸéHYÒ/òþ8{¶ S§~†_} 11Ál‡cÖ(•,_¾'N\þöÎ;,ª£ ãïîREPPºô^ EE¬± bÃ’hº%Æ&Qc£±$ÖhͧF Ĉ»±iŠŠ" ,½÷ [æûca…¥-,»Ìïyxwï{vfîÌ÷ž9û÷/ìIÔä•êêZÌœy<ž/~&©ÝTŒ¤PZBIIó‘’ÒPKN.@YY5€—ñÍÌ´anÞW$Œ™šjÃÀ ·L?Xv<žéé…`³óDÛª“’ ’’¬,á6uƒCÃÞ05mX§:06îCE\ŠTØì\DE¥ãÉ“t<{–ØØ,TVÖ@Q‘++Ý£½½ÔÕ©‡3¥ó©©á!22¡¡lÜ¿ÏÆ£G©¨­åÁÔ´¯H|tw·„®n/i›*Q! K‚¯o(®\y &“/¯X°À…f9•<žnn[0a‚#¶l™)msšäĉ|óÍYܽûu—Ï^ÍåòqàÀ-ìÝ{cïÞù2í%YOm-AAqx™‘ÛÓÓ3gÆ„ ²›‘»9**j‘„ðð$„…%Š^ü÷‹‹9\]-1|¸y—JãE¶±cwbÐ üü³´M‘{‚ï¾;‡#GîaÓ¦iX²d´´M’[22Š1aÂϘ2Å ?ý4WER1’B©§¤¤ ÉÉ¢˜ƒIIyuŽ()n©VTdÁظÌ͵x:š™iÃÐP“ ŽP\\ 6;‰‰y"á‘ÍÎEjj!¸\>@O¯WÏÆWÿK“ðP¤MJJA𘆨¨tDGg ¢¢**Špp0Dÿþ/…G[[}*’S¤Fm-¥âþ}6BCÙˆŒLAM FFZ"ñqÄ+™òÎi ¹¹¥8sæ!|}Ã’R€ŒðöÛ®˜6m y"A.\x‚åËO 8x}—S¡h:zôv89áàÁw¤mN‹ˆÍªU#!!_~9}ä!7Ï–5¸zõ)áÞ½—¹½½1j”u—ÈÆÞQTW×"22áበKDdd*8.ôôzÁÕÕÇ[ÀÅÅVVº]"T Ù>Ž»‡¼ŒÇ¿—ë$G]‰Ã‡ï`óæóxÿý‘øî»r3nv5nÜxŽwß=‚ýû`Ö¬!í-ŽŠ‘”î—ËGrr>ó‘˜øR KNÎGQQ%¡àhd¤%ÇLMûÂÂB[´¥Zž–Ú —ËGjj!r‘””‡ÄÄ|‘Y\,¬×=”`n® XZêÀÂBøgn® 55:QSºYY%"ѱþ¯´´ ŠŠ,ØÙ`À€~8ÐNNF°±Ñ§á(R¥¶–‡'OÒêÄÇD<|˜ ‡ CCÍW¶][Êuæu>_€ÀÀXøù…!00jjÊðövÆÂ….°·7¶yr‰—×^èèhàÈ‘÷¥mJ³\º…%KŽãÚµ5pt4”¶9-‚ÇàÀ›Ø³ç: è‡;}`g§/m³$ÊˌܑˆŒLEß¾=áå53gÆàÁ&]BëH¸\>?N­‹9)»+*jзoO‘0éêj [[}©ˆ*›6 447nÐx‘m¡¬¬~‹ï¿ŸwÞq“¶9݆ ž`åJ_Œï€Þ¦-Ä–-ñçŸÁ¸zu5¬¬tÛS#)òInn™Hl¬÷ÄKLÌGzzø|hû¯¹¹,,´ai©#ûõÓ¢CTˆGa½ ÅÜôôBðxÂzí×O³ÎsTVVº°°z‘Ò ¥”®F~~9žðövÆŒƒºM–\O€èè „…%!4”ˆˆd”–VASS Æ™ÁÝÝ nn'NÒx‘ígåJ_$$äâêÕÕÒ6¥[–ˆ÷Þ; kk]?þ¡\ƨ•6<ž³gDII®\ù=z(µµ(*FRd‡['8 ·T×{â%%壼\˜8F]]E´¥ÚÊJW$>š›kCUµÍ7Ž\#¤§!!!ññ9`³óDÿ­ÙX½ZZ ½é"Ò)+«ÆãÇBǧO…[®³²JÀ`0`fÖNNFpr2ÆÀFptìמ‰•B‘55/ÅÇÐPaÌG‡ ƒÞ"¯G‹.½UV’TVÖàÒ¥(üóO¡¯ßóæ Ü9C»MH›÷ß?Šüü2\¼¸JÚ¦´˜6fÏ>ˆþY†‘#­¥mN«Ž½‡;®ÀÀ 7víòÁ!ò÷4:: 3rÏœ)&å5¼Dc±±Y MÄýû OBIIzõês¸»[ÁÅÅöö'KJªà踑Ƌl'I˜1ã\»¶ýû÷“¶9ÝŠøø¼ýöa(++Â×÷cËÿ ÚÎ&'§ãÇÿŒÑ£mñË/ ÛZ #)]B23K^Ùú›+33K@‹Å„‘‘V‡£®È+ÏÒRººÒþ ].—/Ú¦ž˜˜‡/rÀfç‚Í·ÃjÂÒRèáhi©[·ÅZ[î’Pä >_€øøDF¦"22¥‚ÍÎ!FFZuÞŽBñqÀ#KŽÒex5áLHˆP|¬©á5ØvíâbÑ-<_%22¾¾a¸xñ ¸\>&NtÄܹÃ0z´ ÒAÇ£_?­"oJJFŒø¿þºHæ²–.^ü?ddãúõ52ÙgÒÓ‹ðÕWþ¸sç/vÇ×_O•ëXtAXXb]Fî§(/fäž9ÓS¦ÈgFnqqqÙ a‹2vWŠÄIWWáüÐZqòÅ‹œºøºýDb/)9<<¶ÃÕÕÛ·Ï}›Û·ã°l™§-“rsËðÎ;‡‘—W†ãÇ?‚““‘´M’;nߎÃÛoÆŽs°p¡k[Š b$¥kÀåò‘’R òÀkLÓÔTƒ¹¹vƒxƒ¸Ž4aDÓTUÕ‚ÍέótÌ›‹/r–&ÜZ]/æZ[ëÁÊJVVº°¶Šòü K‘ +ðèQ*=ŠOž¤¡¢¢={*cÐ 8;›bð` l--5i›K¡ˆàp¸xø0áበ²]iÁÕÕB´À”ç˜M‘—WÿüóOØì<ØÙéÃÇg8æÎÚí„iðÞ{GpíZ4–.U«&@CC7žÅÏqÿþ™ gÃfçaìØØ¾}6æÏw‘¶9mæßâÛoÏAEEÛ·ÏÁ¸qöÒ6©Ãy™‘;ׯ?‡@@0z´­ÜgäG½8Yÿâ*,ì¥8ùê¶n;;}±â{PP.<èÝ»4‡ÃEVV Î[ ==ê|оƒ]»þCdä·xð "$$•µGÊÖÉ?5øøã?ñàA2~ÿ}1ÆŽµkòXBˆÜǪív츂ÇïàÆ/`n®ÝÚÓ©Ié\8n]œÁÜ:ÁQ¸8%¥\.L&FFZu‚˜^ᑊâ)+«F||NÁ‘ÍÎCFF1!PRR%yUp´´Ô‘ËDù„Ç &&‘‘/ÅÇ””0™ XZêbð` "­­õh6=J—¢>£jýòñã4ÔÖò`lÜ®®"ÏÇî(>“±8u*±PUU„··3æÏލWCgâá± ¹PP`BEE Ë—ÁÁƒ·ðõ×Sðþû#¥m^›Ø¸ñ,.]z‚àà 2ý²µ°°›6 ༼bóæbw¬TW×"%¥P.’à”—sðßÏD¹UU1iÒx{ÆÈ‘ò‘[Á‹9 I@h¨0cwQQ%44T1|xý¶ns886¨£””¸¹mý›ÁÀåò@ ©ÙŽŽý0h1fÌ [[ÙïCInn)†Ý MM5T€Éd€Ï@II))?IÛ¼n—ËǺu§ñ￱sç\Ì›7ücΞDjj!>ÿ|‚,”m¸\>¦Oß&“óçW¶v ¦b$¥c(+ã€Íns0!!ééEY05í+mlôDÂXw|ÃÙªªjŸƒ/rðâE6bc³Ÿ‹ìì@Ϟʰ´Š/=õ`d¤ÕmÒ(²Knn™HtŒŒLATT:8.z÷î!òvtv6Å A&t»5¥ËQ]]‹‡SšX'>¦‚ËåÃĤ\]-EdwOðUŸŒæôéVÀÝÝ >>Ãh2)Áç `añ%jky¢Ï˜L&44T°uëL̘1X&=HŠ‹+áêºï½7_~9YÚæ´›  8¬_EE•X·nÞ}wD£Ïyï¼óc‘”´S®²Ëæç—ãÂ…Ç8wî‘(#÷´iƒàíí,É•:BâârÊFhh"BCÙ ÄI¡×½llôai¹|~ór@XØF{¯…äå•ãĉû8rä.ÊÊ8^W\’’vÒù­“ „`×®kؽûÖ¬™ˆÕ«'Šæ°ààÌû+àÑ£ï¨7pHHÈÅĉ»°rå8¬ZÕ*A—Š‘”öQXXÑÀÃ1!A¸8'§ ¢¢KKXZêÖ Ž:°¶Öƒ©i_ºµºjkyˆ ºqqÙxñ"ññ9HK+!ªªJ°²Ò…­­¬­õ`k«kk=ôë×½µÙ…ÇàùóLDD$‰â=ffƒÅbÂÆF¯ÎãQèõha¡-“‹aŠ|SUU‹’&Ÿ´n)2Muu-?NCXX"""’ñèQ **jЧOO8;›ÂÙYèõèäd55ÙÝRG‘_*+kððaJ]¶ëDDE ÅG33m‘×£««…܉¯–ˆ™3ÀÏo F¶{,!ááIøçŸ\º%JF³p¡ FŒ°¦sZáêÕgøðãoxòÔ£ À'À¸qصËÚÚêk`;¨­åaôè<ؼ-ms$›‡¯¾òGXX"/vÇ—_NFNN)&LØ.—Bˆh³³©´ÍíP¢£3qöìCœ;÷99¥pt4„·w÷ËÈ-Bâãs’€={®£  ¢Ñã˜L o_ „†n€ªªR'[){TVÖ`ذDëcqü÷ßj~D ܺ‹¥KcÞ¼a8þ JJ*Áã _¸]¹ò9MvÓ!˜;÷WVâêÕÕ-õ§b$¥!åå‘àW/Œe‰&©Þ½{ÀÎN_´õ·~0uinééEˆÍB\\bb² ô*årùPP`ÂÔ´/lmõacóÒÛÑÌL[æÅS(QRR…ˆˆ$DD$#<< OŸ¦‹¶¬nŽáÃÍ1l˜9,,t¤m*…Ò(••5ˆˆHm}‹ŠJ'€¹¹¶(Þ£»»¥ØømòÄ­[±øàƒ£¨­åÁÝÝ þþË=.7·gÎ<%£±·7ÀÂ….ðöv¦Éhº {ö\Ǿ}7lÓnŒ¹s‡b×®y2æÊ•§øè£?qéÒ* dÜìñ²!gÎ<ÄæÍÀb1Àd2QPP!òÎb±˜è×OAA_v‹í¡Ahh"^fävq±¨ËÈ=€fŠ®cÆñ×_¡àr÷âst4ÄŒƒáæf‰þýûÉÜýÞÙ”–VaÚ´}HN.ëù÷ßKááaÓ‰–QꉈHÆêÕ#=½¨A¿WP`ÁÉÉ/~&Eëd—ŒŒbŒ» º`Ó¦é-9…Š‘Ý•šrëDÇl¼x!Üœ‘Q PSS†••.ìì `c£[[=ØØèCWWCÊ–Ë••5u‚c&bc³›ØØ,”•qÀ`0`l¬ýººÕÅw¤‰d(òDff1ÂÓDä‹9`0[[}¸¸X`Ø03 nÞm„ŠìQQQƒðð$„… cn=}šOKKѶkWWËn97^¸ðŸ|ò"ÊB´ÖÖz^&£ñó C``,ÔÕUàíí Ÿ¡Ô¤‹³dÉq\º…Æ— 0Àºu“ðÙgã;Ý6I1sæðùœ;÷©Ü…ü(-­Â”){‘šZ>_Ðà;&>ø`¾ý¶E E¹¡¶–‡ÀÀX<ÂŒܞž¶ðövÆ„ ­g»‡wÞq— gú핯‹‘ Lôë§…ú!44ùù墘“#GZÃÝݶ¶úrwÿH‚üürLž¼¹¹e ’L&{öÌÇœ9C¥`]÷†ËåÃÇç7<|˜Ò„XÌÀ,Æ”)Nn›<ðÏ?X³æΜù..ÍNÅHy‡Ç 99_sðŋįf‰PY°²Ò‰bõqµèäÒ‚´´B<ž‰¸¸lÄÄ…ÇÔÔBB ®®[[}ØÛÀÞÞvvú°µ5é,ŽJcÔoù©Ã‘™Y %% h,òz:ÔŒ&š¡H”ôô"‰eŸ./ç¼âùÈÆ³gàñ°²Òm»>Ü¢[Нò÷ßaX»ö4H°RTdaÖ¬!X¶Ì¾¾¡8{6EE•¢d4S§:Ñn2‚›ÛV¤¤¼ñ9“ɃÁÀ®]ó0w®l/¢£¢Ò1eÊüþûbL*_‹ÎÓ§àóÏÿnBL¶c@À§:Ô¬“-ë”—spõê3D"88=z(á­·ú·8#7›‡Q£¶ÁÒRÿ½Tæãþݸñ‹ÿïÏY,nÜX+Ê ýâEîßOÀýûÂŒÝ%%UÐÒRƒ»»ÜÜ,áînKKº³¥žÌÌbLš´¥¥•àr¾PTTÀ† SññÇR²®{BÁ'Ÿü…‹Ÿ¼ñ¢¦&“=½^ Ù@ŸYÚȻÀÀuÍÕ!#;šŠŠšNž!HO/j 8Ö'?árù`±˜06îSsPW´ØÜ\G.ÞêueeÕˆ­³“…/rPYY‹ “>¯ˆŽBá‘f£È+|¾0ÙÌýûl„‡'áÁƒdWBCCC‡šaèPá¶ëAƒŒédN銋+±`Á!0™ \¾üy›Ê(/ç ,,±Îó1Ïže€ÏÀÚZ¯ÎëQèù(K1ñ:šÃ‡ïàûïÏ7*t0!€¡¡&æÍ†yó†ËüB½»Áåòaa±NC«‹ EEŽ}¿ÙØ ²ÂgŸù!<< wî|%7Y¦ããsĉl ‹ }ýÞ¸{÷«n±][õ¹áÑ£Thk«cÚ´A˜1cp“ š¸…¼””°oß|™ö¢JHÈ…‡ÇöŸ)(°ðá‡#›Üj)ÄÄd!88!!  KDEE tu{ÁÝÝ#FÊî¾JLÌÃÔ©ûPQQ>ÿ¥ž’’–.¯¾š"Eëºû÷ßÄöí—›=ŽÅbâ믧`ùò1`•ü‘•UíXºÔkÖLw(#;в²jlÜ€¸¸,\¿þ…DË®ªªyáÅÄd"&F¸¸¼œè×OSoðÕøƒòò ÕÑBšZˆèèL<ž)ë·°÷îÝöö <mlôh`gŠ\CA\\BB,|+^VV ]] ‘×£‹‹llôhLAuu-ŒŒ´Dž“#GZu˰<ÏŸgbÆŒýàpx"o<æÎŠŸö‘²u݇‹uëNãÌ™‡`±˜¢3MÑ£‡ÂÿAŸ>=;ÑJùáÐ¡ÛØ¶í2×ÁÜ\»©Ã¨)i‚S§Â±yó”•UÒÒvµÙû0#£¸.î`¶HKI)€@@ ¦¦,òÀst4„>¬­õåˆìâk IDATr $'ÀÉ“÷ñÞ{#%Z.—ËGBB®Hx|ö,ÏŸg¢¼œ‹ ØÙéÃÁÁPT×4¥{˜˜‡û÷Ùu[rØ((¨mÉqu¾ù¦[r( 'ÀîÝ×°ÿ Â9—Á`à÷ßÁËkàÇ—–V!""Y´­,&&K$>º¹YÁÕÕ..èÛ—>lŠƒ‚o¿=#GîŠ}x U{6—/GA_¿7r Y,&˜L¾ûnÞ}×]¦ž•fÎ<€°°D((0áà`ˆ+W>—¨ýÕÕµxð Yô‚ûéÓtðù¶¶zpw·ª'- ¡¡Úâ2ÃÂ1sæÀ¦MÓñÁ#¡¨È’˜Í’æîÝX¸ð0!œœŒqõjÛBÌP$CDDNœÁÅ‹O@ŸßÐ[’ÉdàæÍ—qS)­ãÑ£TL›¶ûö-À¬YC;„Š‘’ ?¿[·^‚¿ÿƒ7&{&SèÛÇg˜è³ìì<ž…¸¸lDGg 66IIùàóPUU‚>ìì D‚˜½½A‹ÝäåË—£ðÙg£¶–õë§bÅŠ±ÍžWTT‰èè DGgмó hh¨ÂÑÑôƒƒƒPx´´Ô¥±3)ÝŽÜÜR'àþ}6BBØHK+„šš2† 3m«éß¿ÝvM‘:—.EaÕª¿Áåò}ƒ­¡¡ CÃÞxñ"`c£77˺„3æT|l#\.Ë–ÀµkÑM{oŠÌÌÝ2µ§Y´è¸yó9˜L&ÆŒ±Å¡C‹åþÅì­[±xçÃð÷ÿîî–Ò6G¢TTÔ 00—.=E`` ªª¸PTdŠÆQ‹…E‹Ü°uëL)[Úõ©­å჎âöíbÇC&“OO;ìß¿@fDü/¿ôÇÉ“!`0¸rås89ul8†úxÍ!!Bq2&& †1B(Nf5µ¦ó.>|?üp|>“É„±±¶m› ›µ½=\½ú }t A¿~šˆˆØ$m“(JJªDÞ’))"oI‹  øû/—¶‰2ËúõgpéRîÝû½zõxýë7ÅH‡ƒòòòγPÆPVV†††ÐœÇàØ±{رãj“ $%%F²™™vW^&JJª¼×{;ö„­­.úõëÝ­þ¯Öç«TW×bãÆüýw˜( ƒ h‚Ë—W586=½§">þåvëÌLa|G=½^pt4¬óxì¹ÜfD¡´„ „„…Çàà$&æAYYC†˜ŠÞLhÜ¥ß,wòóó¥m‚Ü£®®TW×bƳ8u*L&C¬gžÏPLœØÇ›‹]úûûw„ÉrGm-_ïe3­K „º ¡o¶‰ªª.\X ÃN´¸k‘––†ððpi›Ñj>û,àٳͥûsøðá066îÔk¾ÿþQ¤¤àúõ/dâåt[ú'@||¢¢ ñôi!ªªx¢ï>úÈŽŽZ’6Sæ˜3gN“ßq¹|ØÙ­GUUm³å((°Ð»·*~ûm1 ‘––&I3%Ε+é¸v-®®º˜7Ï¢Ó¯_YÉ›]†„„2$$”"'§ L d"z9>t¨YƒüŸ|r.¼ÌŠ\ÿŒ0a‚¶l™…~ýÞ »Ðæÿˆˆ<øú²ûö¹IÙšö!î~iÒœ?Ëpÿ~?.=s¾óކ i2îa·¦¹ùº¬¬£FmÃĉý±cÇýåM1277±±±`ª| «« ;;;„„°±nÝi$'4?IKK FFZuÞŽ¢ÿ¾ªß¾}»ƒ-ïšÔ×ç«ÄÆfá£þDZZá˜L>Ü„ÌÌ\»«WŸ!11 ff}áèhGÇ~"¯Gt–Òáñxò$AAq ŠÃÓ§é`±˜8и.Ó¡† 1¥É­ZIw¯;;;;òñÑGÇž^ ïÍ—}¯¢¨ÈÂ’%£±~ýÔf˦ÞzÍÃ`(CKk””„b"Ÿ_ <^–/ÿZZjÐÒRCŸ>=Ñ·oOôéÓSôYwz¡*???,\¸PÚf´ CzzŸ º:%%ÿIÍ___,X° S¯™–VíØ¸Ñ |0ªS¯ÝÚß¿PR2€ŠŠÔԃϯ@~þq•˜²ˆ¸5ݽ{ñðñù­Åe1™LB`l\°°#Zç]Þ™¨¨XASs rs‡@À‘¶9˜=ûm,\ø¹h[wJJ”•àì,|y>b„>ýô/¤¥½q®ð…°råx|òɘñ‹»Êü¯¡1 jjƒ‘½]¹_4GGm°í ó'“©UU{hhŒŸ_м¼ãå¶ê(Z2_Ÿ;÷+Vü…k×Ö¼þ’úa“+ÐÑ£GKÆB9"66yyسç8.]zf‹nŠŠ\º´ªÙt;;;èêêŠ=Fžx]ô&„àÏ?ïã»ïÎA Mnøè£ãˆŒL••.¦L€ aoo@ƒåS(²²Jpû¶P|¼wïÊÊ807׆‡‡-Ö¬y ®®46”ènãug„S§"±{w !o¼”j .—+WžµHŒ¤#vÈeeôîýò¥iýâ`ëÖ+R´Lö¥hHõ»K^ -ÔÙHK,06îƒåËÇà§ŸþÃôéƒe&©•¤úWtt&X¬ÍÍÆ¸—WZ"~œ?ÿXì÷õ1#…}XØ.µµ¤¦ªÁÆfnÜØ #£®é}›ˆˆ$,^¼GÚ¦Ôµƒ3f3™Âüõ¤¯o(~úé*š*ê_^îÝ{¾¾¡Øºu&Mê/ú¾«ÌÿûöÝÀüù›¡££.mSZMg‰…]aþ$D7¶oßam­'msº-¯§O„?þ¸ƒ­[/ÁÏoIƒï¨;L ©­åÁ×÷1Ž} ú¬% ¤úsããs»íߊ‹+±r¥‚‚bÅnÃc0PSSBDĦFÝï)”î‡ÃExx‚‚b 6;êê*ps³Äúõ^ðô´í²¿ÊëUbùòk(-­iõ¹IIyHI)€©iß°¬{¡¡Ñ=ãTww àèØ}·Ö¯X1§O?À–-°w¯ôŊΤ;·{K¹ySèD¡¥Õ** ÐÐPEJPUU‚––zôP‚ŠŠ"zöTššTT”г§2Žù +ºì󘥥¬­»î VCCMÌ;T”áûܹGX¾ü¤Øsø|òòÊðá‡Ç0b„¶nÕ¦¶˜Ï>ßb-"= ÜÜä+–pgÃ`0°~½æÌ9ˆààxŒa-úŽŠ‘-äæÍäæV45{ ¤¤Z¤Ö×ÇWk,f$ tÓö,ƒŠ‘Mpÿ>Ë–GIIu³™:ù|>L®î›q&)”ÀÀXÅ",,\.öö˜4i<=m1dˆ™Lļ¢P^¥¦†‡cǂѯŸ: PRRªªZÔÔpQQQ‡+6qÀ­[12±Å’BéŠt•-ŒÒBUU ›6MÃÒ¥'ðÎ;îpv6‘¶I”.Ä“'ߵ鼫W…ŸìÜ8¨­AÖb…çå•‹’Œˆ£~]ÂÆ¨QÛ ¥555âÏéLè³:¥»àîn‰1cì°mÛe\¾LÅÈV3yò˜™)bõê‘°³³Cm-©©…HNÎGrrRR ˜˜¤¤<äæ–‚Ï~ ,ðx|DF¦ˆÞæP„ðùÇ?„Ÿß0 -{;TUU‹°°DŒiÝüÁŠPVÆÁ½{/D±³³KЧOOxxØ`×®yðð°¡ñQ)2²²Ö¬™gge±Ûàù|**8¨¬¬‡ÃEEG$TÒ¬Ù ¥=xy ĉ÷±q㿸|ùs©$ð¡P(≊JkÖxÓaHYÙ‡½À¨Qy°°ÐéP)JCÖ®„I“vãîÝ5J˜õžŠ‘mDIIVVº°²zs±Äåò‘‘QôŠH™ U)XÙuIO/ªU“ PTd`fè3Æm¡b$Ež‰‹ËÆÏqýúsDE ³0b†wßu‡§§ º½ ¥{Âb1Ñ«WIà( ERlÙ2 &üŒ“'C°x±»´Í¡P(¯ðHôÿJJ,òRpd2ÐÑÑ€¹¹¬¬t`jÚ&&}`jÚööÆøùçãTˆ¤P¤€““F²Á/¿Ü¤bdG¢¨È‚™™6ÌÌh ø¦(,¬€JK«¡§§_çÕR‹ÊÊZTTpÀápQUU‹¢¢JTW×¢ªªeeÕàpx(*ªÅm¡PäO€°°D\¿7ž#5µ††š;Ö+VŒÅˆVPSS–¶™ …B¡È566zX²d4¶m»ŒI“Èd‚ E^©¨xSÚÃÃ:07׆©i_˜šö…‘‘V“ÛÎ áu–™ ¥V®‡Ù³"22ÎÎ&TŒ¤H‡¡¬\ @˜•–B鎔•q‹k×¢‹òrú÷ï‡Ù³‡bâDGPžB¡P()ðùçpáÂ|ûm~ûm‘´Í¡P(u¨ª*"=}X,o‘B‘5ÜÜ,1x° ޽ gçwЮ»˜ÍfãÏ?ÿ”ˆa™™™Ø¾};¢££Û\ÆùóçñÆç•••øñÇÛc^—¢¸¸;wî”¶ ¥ ¤¥âÈ‘»˜;÷7ôï¿«Vù¡´´ ë×OEdä·øï¿ÕX³f""åIÍ“âÊ)//ÇöíÛÛU~jj*>Ü®2ù›o%ùœÓѤ§§#??¿Ñïä­]ä‘Îèk¯Ž’7^Gžú™ªª~üqΟŒ;w^HÛ™§~Ökyêw]mmÝ:«X,f§‘]qþoJëxqm/O÷ ÐùsgGÐã¢8›¥Ý-rÇ¥KQ()©j߇ßÿ]BF-“'O  ÐvgM„„„¼ñyyy96mÚÔ󺥥¥8räˆèß~ø!’““%~Ž*—BéN§aûöË;ö'¸¸lÁž=×a`Ð ¿ý¶ÑÑ[à뻋¹AO¯—´Í¥HIÍ“âÊ)--Åwß}×®ò“““±ÿþv•Èß|+É眎¤°°...8þ|£ßË[»È#Ñ×^+$1n¼Ž¼õ³1cìàå5_}55t{g{¨_£½¾†‘òÔïºÚÚº5ÈS;]sþoJëxqmOÛ©õtÄ|ùzù’ÅÙ,í>0mÚ@¨«« 00V½Ëø7§¥¥aÕªU°µµ•¶)]SSS¼xñò-íÿý‡ÒÒR‰_§£Ê¥P䇋7žcíÚÓpvþS¦ìÁåËOáéi‹sç>ETÔfìÝ»“' q )J»yÿý÷QPP m3(¹cóæ(,¬ÀÞ½×¥mŠ\ðú†Òqеu÷…¶½lÑÝÆEEÌ™3aaìö‹‘+W®„††ttt°mÛ6·ôãÆÃîÝ»a``mmm=z_|ñ´µµ¡¯¯S§NÞ{ï=¤¥¥aÑ¢E¸rå æÏŸsçκ8gÏždggcРA(..Æ©S§`jj UUU̘1£YáìÿûLLL ¦¦†÷Þ{AÓÙš»2¹¹¹ðòòøøø //>>>¸wïàÙ³gpww‡ŠŠ ¬­­áççÈËËÃĉqâÄ ôîÝ111øûï¿aii èëëã§Ÿ~j²ÜÛ·oÃÉÉ ÊÊʰµµy`4V.…Òݨ¬¬Á¹sðÁGáà°ï¿‰‰yøøãÑ^{÷¾ÆÆ^6̜ƹéfHbžWÎë45VÀÍ›7áàà%%% <>|ã|BÖ¬YƒU«Vظq#´µµ¡¬¬ OOOdddˆýÍò2ß’k?qu(æôz<B\]]›ý-òÔ.òˆ¤úZSÏvâhï¸ñ*òÔÏtu{᫯&ã×_‘+msÚLSãH}ßòõõ………ÔÔÔðî»ï‚Ïf&×öâúLSk´W×0Í]ûâÅ‹°°°@=ðÞ{ïaíÚµ¸råJ“¿Q^ú]G¬­SRRàééÙà:>>>oWh yi@2mÑžº§u4uO¿ÞöMAÛ©ís§¸±IܸØ‹-±ùÞ½{X±b>ûì3hhh@OO»wïnq½I³Ìž=yyåŠ ¯‘““C‚‚‚^ÿ¸Q.^¼H Y½z5©¬¬$÷îÝ#½zõ"þþþ$;;›0™LòÍ7ß@@~ýõW€lß¾²sçNbiiI!¤¤¤„˜™™‘ÿþûp8òÅ_wß}—Bˆ¯¯/QVV&‹/&„ò×_'''òäÉ¢¬¬Lþý÷_R]]MöìÙC={ö¼agvv6@>þøcRSSCØl6éÕ« lÑï¬'&&†ÄÄĴ꜖DrrrZtlrr2QSS#„R\\LôõõIPP©­­%D__Ÿ8p€p8rëÖ-¢¡¡Aîß¿OÒÓÓ‰ªª*ñöö&!!!¤  €(++“€€ÂápÈ;w“É$yyyo”›““CÔÕÕɱcLJÃ!çÎ#=zô qqqo”[SSÓ¢ßÑ‘õI¡t••5äܹG䃎3³µÄÄä ²hÑäôéRTT!mó(DkÆkIÍ“âÊIOO'ÊÊÊ„ÒìX­®®NHUUÙ²e 111!€"Ȳeˈ‡‡©¨öáÿþû„„RVVF¦M›F–.]Úèï•Ä|Ûšúm ˆ¯¯o‹Ž•Tû‰«Cq߉›Ó !äÙ³gÄÌÌŒäççòÇ4ú;$Ñ.¾¾¾x㱑Ò­­/Iõµ²²²&Ÿí^+$1n¼Ž$úYkîÏ΂Çã“I“v“™3iôwKƒÖô/qãHvv6QRRµYRRéÝ»7¹~ýºØ¶×gÄ­Ñ^]È»vbb"éÙ³'¹pá©®®&?þø#a±XääÉ“oü¾®>¾-X°€,X° EÇvÔÚ:66–ôéÓ§ÁµœœœÈ7ÚÜ^GRëíÖÔWk‘ÆüßÖºw‰»§_oû×éê÷KkËïì¹SÜØ$n\ÇëãbkÖ dÕªU¤²²’“^½z‘Ë—/7°ùu$u¯¶w¾^·îtv»ÅHMMMR[[+úlÆ ÄÛÛ[ô#ë3ñññDAAp¹\B!="ººº¢ó,,,Hhh(!„ÀÀ@bddD!äã?&+V¬ &&&„B>øà²~ýz²nÝ:2þüöôïß_¬™——'úÌÍÍ´èwÖÓÅHB144$?&„rêÔ)2xðàǯ\¹’¬ZµŠ¤§§$33“B‡Ã!‘‘‘¢ãê;mBBÂåþþûïdÔ¨Q Ê={6ùþûïß(·¥P1’"‹TVÖóç“?<Ö@€ô÷@JK«¥m¥h­)‰yR\9¯>pˆ«þùgâåå%ú¼¶¶–lß¾TVV’   booO–-[Fúöí+²‰BÎ;G Htt4!D¸°-..nô÷Jb¾íjb¤$ÚO\ŠûNÜœ^UUEú÷ïO®_¿N!-#ÛÓ.TŒlm#%Ñ×Ä=Û5%F¶uÜxIô³®(FBÈÓ§é¤_¿ÕäÔ©pi›Bi]ÿ7ŽÔ·YVV–è»Q£F±m/®Ïˆ[£½¾ènêÚ[¶l!3gÎ}.ˆ¾¾¾X1²«Žo­#;bmÝœ Ö–>ð:’Zow%1RmÑÖºw‰»§ iØö¯ÓÕï—Ö–ßÙs§¸±Iܸ(ŽÆÆÅ–® 4448‚mذøøø´HŒlï½ÚÞùúôéìvï´°°€¢¢¢èßŽŽŽÈÎÎý[MM À`0 ¬¬, ¤Ê`0š,sĈ(--E||<îܹƒ•+W¢¼¼))) Ä”)S™™ ‡çÙÛÛ7Y&‹Å‚¶¶¶èßâ®/ˤ¤¤ ..¦¦¦¢¿S§N¡¤¤Àd2a``PVVFdd$&Nœ x{{7éž›‘‘kkëŸÙØØ ==ýr)y£ºº/>Á’%ÇÑ¿ÿ7øôÓ¿PSÃÅŽsðôéf?þ!fÏ i›Jé‚Hjžl®@üX’’Òà;EEE|ùå—èÑ£ &&YYY„[Pê™:u*fÏž 777˜˜˜à³Ï>Cqqq“¿WÞæ[I´Ÿ¸:÷¸9}Ë–-000€ªª*‚ƒƒQZZ 6›gÏž5ú;ä­]äIôµÖ<ÛÕÓžqãu䵟õïßï¿??üpEE•Ò6§U4·6}}}Ñÿ×·™¸¶×gZ»Fkɵ ÌÍÍ›,Cžú]G¬­[Bkû@cÈS;×Õ½¸û¨%÷´8h;µ}î765§—´†–ö-sss())5øíiiiÍ–ßúÀС¦•í#_˜ž——--­v•©¨¨ˆqãÆÁÏÏ•••°²²ÂèÑ£qüøq”••ÁÅÅšššÈËËkKwDCC#GŽDJJJƒ¿ß~û @ÃŽvîÜ9lذ7nD||<ÿüsѱ„ìÚµ ………ð÷÷‡ÃÁ¬Y³Zm¿¬"‰öW‡â¾7§³X,`ÕªUXµjØl6N:…}ûöIæ‡S:IôµÖ<ÛÕÓžq£;±ví$(++bóææc€u%š[4…¸¶×g$±FSWWGaaaƒÏĽ“':bmÝ••Í‹êÝýþ喝hIÝ‹»ÚzOË+9wŠ›šÓK:‚ׯ—ŸŸuuõ»ž$15í[Ûn12%%—.] L~èÐ!Lž<¹ÝÆMž<{÷îŨQ£cÆŒÁž={ðÖ[oÉdbìØ±8uê”Hõ~úô)îÞ½+:ÿܹsˆŽŽn·²Æ¸qãpïÞ=ÄÆÆªªªàì쌀€€7ŽÍÈÈ€½½=FŽ ‹…ÐÐP”••5ZîøñãqãÆ $%%Zý÷ß1nܸŽû1J'ÃápqåÊS,[vŽŽñÉ''Q^ÎÁÖ­³ðôéfœ<ù1||†Q’Ò*$5O¶¤qcõøñãqáÂÑÃmxx8Þ~ûm°X,·° X¼x1lmmñÕW_vìØÑ£GCAAÆ âE‹D”€üÏ·’h?qu(î;qsúæÍ›ñðáCÑŸ³³36n܈ÿýïä¿]äIôµÖ<ÛÕÓžq£;õ³ž=•±}ûlœ>ýAAqÒ6§Å´fmð*âÚ^\ŸinÖR›Ï;‡üü|@hh(bbbDÎòÜï:bm­¨¨ˆÒÒR¶%›Ínö¼î~ÿK¢-ÚZ÷âî£ÖÞÓ´š§¥s§¸±IzIFF†(INEE>Üèõºjh·éââ‚Õ«WÃÃÃÖÖÖ011ÁÇÜnÃ&Mš„ÒÒÒbdii)¦L™˜>}:Æ{{{xzzÂËË«AůZµJ”‘[ÞÑÑÑÁŠ+ +++üðÃpqqÁ¸qã`mm GGGøøø¼qÞôéÓ Œ??üðÌÍͱfÍš7Ê8p Ö¬YgggL˜0˜={6Þzë­Îþ¹ŠDárù¸u+Ë—ŸDÿþß`Ù²(-­Æ–-3µ¾¾Kàã3 ½z‰÷,¡PšBRódKÊ7V{zzbÁ‚pppÀ¸qã0aÂüôÓOèÙ³ç×úý÷ßqüøq„††bñâÅHOOÇ€0nÜ8Ì;?üÔË\à IDATðƒèXyŸo%Ñ~âêPÜw­™Ó_GÞÛE‘D_kîÙ®1Ú3nt·~6~¼fÎtƺu§QQQ#msZD[Çqm/®Ï4·Fk “'O†——0~üx¬Y³NNN¢íˆòÜï:bmmff†áÇcðàÁ˜>}:Ö¬Yww÷fÏëî÷¿$Ú¢­u/î>jí=MÛ©yZ:wŠ›¤¡—˜˜˜`Æ 5j¬­­Ñ§O|úé§o×Uû£.ø¤ˆÜÜ\ÄÆÆbôèÑ-.„Ãá 44½zõÂàÁƒ%m£Xž={†ÜÜ\ 6 z­ú·vvv/ûöíÛ°³³ƒ®®n³Ç £OŸ>„î¸?ÆÐ¡C¡©© @gâùóç044|#ÞÄ«”••!"":::0`ÒÓÓ‘””FËMIIA||)”æxü8 ÿþû. ggçVÛ/‹tÄÚZAA#FŒhÓ¹Ýùþ—D[´§îÅiôÙà%5w¶dlz}\ÌÎÎÆ­[·š¼nÿþýáääÔf»•””D»‰e ‰ˆ‘ …ÒU)+ãàÂ…Ç8}ú"#S ££™3cöì!°³£à) …B¡´Ž©S0yò¬]ûnÞ\‹=”š?‰Òb „cÇŽaÛ¶m(**‚¥¥%®^½Ú c.…B¡t6m›Ñ·oß&¿o.É\ShhhÀÒR6^†5#)ŠÜ!Ü¿Ÿ€þ‰À•+OÁb11uªÖ®} îîV`2iöw …B¡P(mgëÖY=z;¶o¿ŒÍ›½¥mŽÜ1cÆ Ì˜1CÚfP(JZ;6õíÛ·CâFŽ5Jf="ë¡b$…B‘RS qútNŸ~€¬¬ nŽmÛfcêT'¨©)KÛ< …B¡P(r‚ŽŽ:~øÁŸ}æ‡iÓbÈ3i›D¡P(ŠÌ@ÅH …"Óp8\\¹òÿüû÷ ­­Ù³‡`þüá07×–¶y …B¡Pä”Y³†àüùÇX½únÜX eeº´¢P( ¥%ГB¡È$ ¹8y2gÎ>à­­.mó(J…‚ôô"ÄÄd!&& qqÙxú4ii…PQQ„ŠŠ…´M¤P(rƒÁÀ®]>;ö'lÛvß~;]Ú&Q(2 —KÃ-Q(Ý*FR(”.EiiüüÂqüø}ddaÌ;øú~ŒQ£lÀdR/H …Ò.—ÈÈ' 88±±Y(/ç€ÅbÂĤlmõ1h1úõÓBTT˜ÌÒ6™B¡È!††šØºu&>ûÌãÆ9ÀÝÝRÚ&Q(2GM aa}°r¥/V¯žSÓ¾Ò6‰B¡tMŠ‘·oßîD3d]]Ý+;66±±±V~W¤#ë“"[ÄÅeãØ±`üûïC((0áã3ï½7‚>„Pº$Ýq¼î*ðxDE¥!$„-úãrù06#­1gΘ™é =½7oÆ 00µµ<¸ºZ`ýú©øð÷°páY,\¸°Õ×VUµ‹Õáÿ],–:õÀá$´ø55gÔÔ¤‚Ç+¸=ÉÐC‰(*ê¸ÜœVŸ«¤¤EETVFIÚ,¹`Ö¬!¸q#«VùáÖ­µÐÐPíÐëuÅþÕVÔÔƒÃIŸ_Þ®r 45½PU ‡-!ëÚ‡ŸŸüüü:ízÊʦ „‡ÚÚŒv—ÅdªBUÕ••‘°¬%00nÜ»xô(Û1oÞp¬Z5úú½%RúÂ… Û4ÿS:IŒoŠŠ:èÙs*+ŸHä~€=Àã¡¶6["åug„òêååí›äeeehhhH¼Üüü|‰—) tT}Rdƒú­Øüq÷ï³ae¥‹÷߉ٳ‡@MMYÚæQ(Ò]ÇëÎD]]***Þ>LAee tu{ÁÕÕîî–pw·‚––®]‹ÆåËOqçN77KL™â„I“ú‹’\ùûû·ÚžÊJüý“ðäI!FŒÐÅìÙæý½Y€'â±oŸ[‹Žçó |Ž‚V®tDß¾*·©1æÌ™Ó)בuÒÒÒ.yÑZœ8X´ÈºÕçÞ½›ÿMÆŒ¦ðô4´i€áÃ‡ÃØØ¸CÊî JJª0fÌN¸¹YâÀ·;ä]¹µ.W€Ÿ~Š‚šš"V¬p‹Õv¢¼œ‹3g’UCØ<Ùöö½[$ltÄøŽ´´4‰—Û55|lÝúööš˜7¯ýaIËðË/ј?ßÇëHÀÂæ166†³óPøûG`÷îë(,¬À¢EnX¹r<´´ÔÚ\n[æJÓtÔó€$Æ76» 7nd .®FF=1s¦)ÌÍÛ¯9ÄÅ•àСX¼õV?LœH“•µs¾~ø†I¡P(MM þþpèÐm$%åcìX;|øá(Œi-Woù)Jëáñxú4¡¡Bñ1""¹N|Ô€««%ÜÜ„ææÚ(.®ÄµkѸt) ÷î L™â„  ©ÙöEK=ׯGcíÚÓPTda÷îy5ʦÝe6F@À#|òÉIdeíiñ9eeÌ›÷ ÊqþüJ‰yŽPä›O>9 8xð6èÐm|ÿýy|ûít,Y2Z‚–Éwï¾Àüù‡ðÛoï`Ú´AÒ6G&ˆÍÆÔ©{ñᇣðõ×S$P^vëןÃÉÉkÖ¼…±cí$`i׿Ç/áĉÜ¿¿^ô®½lÞ|ýŠ[·ÖÁÈHK"e¶.—'îã—_n¢²²ì%KFw¸×1Eö „àæÍìß‘‘)puµÀÊ•ãáá!™ç¶ØØlx{ïǸqøå—…tÍÚ~¨I¡P:¢¢Jüùg0þü3eeÌš5K–xÀÚZOÚ¦Q()ñºøøàA2**j ££——⣥¥Ð#£  ÿý÷ />Ah(,¶ðòrÂøñ[ ”•q°iÓYœ>ýsçÅæÍ3¡¡ÑqÞ‡m# °°sçþ ‡‡óçW¢o_É,>)òK{ÅH€ ’-aÓ¦œ9óë §×KÚæÈýŠ/¿ô‡Ÿß‰ OŸ¦c×®k¸qã9œM±nÝ$ŒÙz¯`Y 99žž;ñÍ7^øàƒQ+·¦†‡I“vCKK §O/—J ÷ªªZ=z‚Åbà‹/&áí·]¡ @“Ýtwø|.^|‚_~¹…¸¸lŒg•+ÇÁÙÙTb×ÈÎ.ÁÔ©û`a¡ _ß%PTdI¬ìn #)JÇ“’R€C‡nãôéPUUÄ»ïŽÀ¢EîÐÑ¡Y±)”î—ËGTT""’ÊFxx**j ­­ÞÀó±^|€ÜÜR\¹ò W®D!,, JJ 3ÆS§:aìX{ôì)Ù°wï¾ÀêÕ§ÀåòñÓOs1a‚£DËoŒ¶Š‘›[oï_ ªªˆ³gW W/š¤‡Ò4’#*H6‡ÃÅ[o톮®NZJ½hZÈòå'7ÖBWWr¡œ?NÃÏ?_EPP† 3Ǻu“àæ&_I†-úŸ~ý ‰‹tÑÑ™˜2eÖ¯Ÿ*Õû½¬¬{÷^Ç‘#÷`f¦o¿OO[©ÙC‘µµÂv"=½^^ñé§cag'Ù"ÕÕµ˜5ë JJªpåÊçèÝ›>cI*FR(”ŽãÿìÝuXTéÀñïv66 ¶kƒ‚(6Šíb(ëÏXc×n0cmTÜU»Ql¥TA™ùý²º*Ìàý<Ï>Ë ÷`î=ïyÏ gÅŠcìÛçGùòÅ>¼ÖÖ È›7—Ô¡ ‚ " IøøqéÒ#._~ˆOoÞ$¡£SFôÞ% õ>© ‹áÀ<èÏÕ«É—/mÚÔ~—€¬•)G’øóÏ}lÞ|Ž˜;·ÇOõ§ú?“Œ ÆÊÊ…2e ³}û TMI!ëɨd$ˆ„ä·Ü¼ù”Ž—ñûïV ’q•jÙY\\"ææK([¶0;vØ¡©™±Iµ«W³hÑaΞ½G³fUqr² aÃŒï¬jÇŽÝfÀ€µìÚ52Ó&¹/[vggoOÒîj zÁŸîãС›´n]“?ÿìF•*%%IPøø·lÝz7·S¼|OÏž 9²M¦ =•ËØÚnàúõ ¼¼Å`ÕŒ%’‘‚ d<ÿ',[æÍ‘#Ô¬YšÑ£ÍèÔ©®$Û:AP­˜˜®\yÄåË©ÿüýŸ’¢ bÅâ4jTåÝ?½ÏÞ4SÎqéÒC.<ÄÅ‹iÑ¢NN溭S•’’RhÝzº¸¹ Ì´óÈå ºtq!)IÎþýcÔb«ê… ˜>Ý“{÷"°µmΘ1íD?Él*&&õëÏò×_gIJJ¡_¿& Þ*SÛ`Lº›­[/²{·ÆÆ3í<9”HF ‚q._~„³³7§NÝ¡^½ 8:šaf¦/¶& B6ñê]âñ!—.=âÞ½”J¨Q£4W¡aÃ*4n¬÷ŋŠ xyùqà€?þþO(R$íÛ`iiD‹ÕÉ•+óz·páa\]Oвe –,±ÉЭé•ÉHH­HïÞ}&&ùë/[µ¸YÔKF'#A$$¿F.WнûJÞràÀXñ;™N6œeÚ4Ovî´ËÔíÔçÎÝgáÂC\½ú˜¶mk1~¼9uëf­iî..ÇX¾ügÎü/Ó™=~ü3³E ÖŠß~³ÈÔs¥WJŠ‚­[/²hÑ!&L° ÿ&^U+H#227·“lÝz--Mlm›óë¯Í3dHá×lÚtžÉ“ÿaùò¾tëf’©çÊ¡D2R„ŸwñâC-J]]nÜXÑ£MiÕJôo„ìF¡Prï^×®qíÚc._~DppZZ–§aÃÊ4n¬GÆU¾ÚSçþýHöï¿Áþý7 £X±üXXÒ±£M›VUÙÍz@@(£GoãéÓ—L›Ö™¾}K¶x’QÉHŸ`llVÓ²e \]ˆ2á#™‘Œ‘üšàà(ÌÌ2pà/L™ÒQêp² [Û¿ðñ ÆÛÛ)Ó‡s>}—… áë‚©imœœ,00ÐÍÔsf„ÐÐhZ´˜Çرípph«’snØpŽiÓö°ÿŒŒÊ«äœéña?I}}]-êEíÚÛ?PPàà(V­:ÁÎW(Z4?Ç·¢ÿ&äÏŸ±}Â?çèÑlm70qb•ý^å@")Âóñ fþüƒœ={æÍ«3n\{5Êú}wAH•„Ÿ_W¯>æêÕÇ\»ö˜ØØDòåËE½zhÔHFª`bR‰|ù¾¾%øÑ£çìÛç‹——áèèÄÂÂKK#š4ÑSiÂ,%E‹‹7ÎÎÞÔ¯_‰¥Km¨P¡¸ÊÎÿ9™Œ„Ô­kýû¯¥CC–-³ I!Mf%#A$$¿f÷î댵­[‡‰éû3³Eèéé°mÛ0•,;v›Å‹ãïÿss&L° V­2™~ÞekûwïFpâÄo™¾“à=¥RI¯^®DE½æðáñjWí{ï^¿ý¶ Ÿ †oÍøñíÉ“G[ê°„tz?sÀËËråŠagך^½ªìç;00œŽ—aeU—¥KmTrÎJ$#Aø~·o‡1þA¼½oÑ Aeþ÷?Kš4Ñ“:,A~Rhhô»¤c×®qûv()) tu‹Ò AeêׯDýú•¨][7]“:ƒ‚^°oŸ^^~ܺJÉ’±´4¤S§z4jTE’>²%11™"EòQ¿~%LL*Ñ AeêÖ­ðÍ-×ÿõôi4^^©~~!-šŸ éÔɈfͪI~ÃÍØ±Û¹té!ŽŽípt4SéJ{zdV2àøñ@~ýu=ÖÖ Y° §øÛé" "!ù%÷ïGba±„¡C[2qb©ÃÉ”J%®#00oï _íIœ %û÷û±xñ=zN·n&ŒÛŽJ•J¨4Ž-]z”U«N¨dhÍ—¤N×^Ž\®ÀËËQò÷ú¯9|ø&“'ÿCr²œ™3»ˆ$S(”9€‹‹77n<¡E‹Œmš©Ãª¾F.W`k»ë׃ðòr”ôw;ÉHA¾ìÍ›$Ö¬9ÍŠÇ)R$ÿû_ºv5Q‹-‚ |Ùû^¾¾ÿ&##cÑÒÒ zõÒ˜˜TÂØ¸"ÆÆ©ZU燒Saa1ì߃}û|ñõ ¡P¡¼XXÔÁʪ.ÍšUS›­-W™6m7¥KÁÙ¹Z5ÛÿPf&#Ž `ذôíÛ˜Ù³»‹„d¦ªd$ˆ„ä—ìÚu•±c·ãî>œ-T»½6«ŠŽŽÇÔtºlÜh+Éß0…B‰§§K–!$$Š=0fŒ™Ê{‡„DѲå<œœ,°·o£Òsÿ׃Ï05]Èo¿IË·ÄÅ%2wî~6o¾@Û¶µY´¨%K”:¬%9Yާ§+VçáÃg´ooÀèÑf’_›Mšô7WÙµËc㊒ƒƒˆd¤ ŸR(”xx\aþüƒ¼~ý‡¶ ÞJ45$—+xøð¾¾!\¿„O0wïF —+(Uª0ÆÆ01©D½z12*ÿÝUŠˆxÅþý7ðòòãÚµ ̃…E:v¬K‹ÕÕ& ðâÅk&NôàÈ‘lm[0i’¥Zÿ Ëìd$ÀÁƒþØÙmfÀ€füñG‘Ì¡T™Œ‘ü’1cÜ9yòGN T©BR‡“%\¹òˆîÝWòûïV ÖR²8RRìÙs%KŽC¯^ qt4CW·¨JÎ?`ÀZBB^âí=A-Þw]\ޱlÙQŽw¢rå’R‡óM—/?bìØíÄÅ%²`5u¤)ÛKLLfûöˬ^}’ˆˆWtébŒƒC[µh—ãævŠ?þØÇºuƒÅÏ‚j‰d¤ ;þ3gzrçN8ýú5aüxsŠ/ uX‚ ºPðèÑsüýŸàïÿ„7žJ|ü[òäÑÆÐ°<ÆÆ¨W¯"&&•([öç·n={Ç©= ¯^}Lþü¹ißÞ€NêÒ²e •M7üGŽàä´“ÙÚn`âÄ*%¤ÉHAR…†FóÇûðòò£M›ZL›f¥vS!'Q*•½àÆÔ¤£¿jâ1..mmMjÕ*‹¡a9ŒŒÊcdT5JgX…Äóçq<è———.=$_¾\˜™éceUÖ­kªeR/z§MÛÃÎW²ÜÍ…ª’‘ûöù2räV† kÉï¿[eúùõ"E2DBòsîÜ ÇÒrööê9‘X)Júôq#(èGNP‹!ÉÉrv츌³³7QQ¯éׯ)£F™¢£“±[€ß¼I¢u똘TTùïï·ÜºJ‡K™1£ ƒÿ"u8éæí}‹ v’?n\]H¾]8»ˆŠzͺugذáÜ»ž¯Í6¬%J¨O‹O0={®ÂÚºsçö:œ',,æ†zÞM‚ 2ÉÉrV¯>‰‹Ë1J–,ÈÖ­ÃÄ„lA@PЋwO¹q#„›7Ÿ›šx¬Q£4††åéÜÙ#£òÔ®]6÷f½|Ï7ðòºÁÅ‹È[ 33}Ö¬D›6µÔz‹3À¹s÷7n;‰‰ÉlÜhK»vR‡¤¶¬¬ê‘’¢ÀÑÑMM &Oî(uHBð>9sæÞþ?'«Y³ þÙ•‰wѸ±žÚTº©3 Ë—÷ÅÌl!&ì`ÍšAR‡„¶¶&ýû7¥wïFlÝzå˳mÛElÆÈ‘m3,³|ùq¢£ã™6­s†/#éëëbo߆9söcf¦O¹rªÙ²þ³ÌÌô9~ü7FÚJçÎ.LÚ [ÛæY¢ºS…†F³zõ)ÜÝ/‘?.ììZ3xpsµX4øPxx ¶¶abR‰Y³ºINŽtùò£|")9Ø©Sw˜:u7aa18:šaoßF-zÏBvõ®ÚñiÚvëØØ7hiiP­ZiŒŒÊciY7-ñ˜;wæ¼]GGÇsèÐMöíóãüùûäÊ¥EÛ¶µpu@Û¶µÈ›÷ÇûKªJbb2sç`ýú3´ooÀüùÖjµò®®ºu3!9Y΄ ;ÑÖÖÄÉÉBê„@$$?Õ§Oc.\x€ƒÃŽ j¤CÉ’Y±¢?66«Ù¸ñ<ƒ5“:$ 5)9xpsll³uëEV¬8Æ–-<¸9vv­)V,ÿûñãç¬Zu‚)S:ªmѱcÛ±ÿ &Oþ›Í›‡JNº•(Q€mÛ†ãêz‚?þØËùó÷Y²¤7E‹þøë•Ó<|øŒ+޳{÷utt 1y²%}ú4VËëÈØØDúõ[C±bùY·n°h‘!?¿ü")9PDÄ+¦NÝÍÁƒþtè`ÈÎv*kº-9ÍÓ§Ñi Ç÷•ÑÑñhjjP­Z)ŒŒÊcnn€¡ayôõu3½ñÕ«º‰——çÎÝGSSƒ6mj±bE?ÌÌôjÀªùù…àèèNdä+–,±ÁÚºÔ!e)½z5D‹Ï[à IDAT©T2aÂN’’äL™"*$…Ì'’Ÿš?¿'ææKppØŠ»ûpqsœ¿üRÑ£M™1Óúõ+a` +uHiòäÑfÈôíÛ˜M›.°råq6n<Ç!->¼EŠäûîcþþûªT)ÉàÁÍ3!⌑+— XÓ£ÇJöíóÃʪ®Ô!¥›††Œ‘#ÛÒ¨Qìì¶`a±”õ룯¯>?Wê( oô§rå’,X`M·n&j[Ü"—+2ä/¢£8p`ŒÚUlæOž¼$88*“J-APKJ¥’;.3sæ>ŠË»ûpZµª)uX‚-¤¤(xð ’۷ø};Œ€€PžòòejâQOOCÃrŒ×CÃòèªlÅ8..‘#Gػׇ3gî!“Éhݺ&Ë–õÁÌLŸr«$ŽŒ’œ,gñâìZu‚Æõpw.T~PïÞÐÒÒdìØí$$$1kVW±=MÈt"!ù±üùs³ví :urföl/µÜ†«ŽÆkÏ•+>|‡S»ÁyóæbĈVôïß„ϱjÕI6l8ËС-:´%… åM×q¾ÉÉ“wؽÛ--õNT7i¢GïÞ˜>}­ZÕH÷ר.êׯÌѣ㱷߂•• ¦&ׄ]ºôåËqòä tY½z :¢¡¡Þ×S§îæúõ`ví²§L™Ÿò(ü˜]»®RªT¡d1ÀFrˆàà(œœvréÒC†m‰““…Ú÷€uÿ–ÀÀ0¸u+5éxçN8oߦ ­­Iµj¥00ÐE__7-ñ˜?¿j~‰‰Éx{ßbï^_Ž¿B¡¤U«štêT—öí Ôî¦-½nÞ|Š££;!!Qüþ»4ÍÉ3U°ù//?¶bmÝyózˆÊ¬lLª6Ÿ#†Ú|ìàA†ÝȪUýéܹžÔád ‘‘±´k·ˆ&Mª²zõ©Ãùª×¯ß²nÝiÜÜN0lXK† iñÕ÷ã7o’hÙr VaÅŠ~ª õ§ÄÄ$ТÅ\,, ™?¿§Ôáü¹\ÁüùY¹ò¶¶Í™6­³Ú'‚3›R©äر۬Xqœ«WÓ¸±£F™ÒºuÖ(lY±â8óçdýúÁ¢¯¸„”J%MšÌfâÄ÷Ee¤ dsr¹‚uëΰ`Á!*U*Ž—×1)N¾CDÄ+ÃÓ’Ž¡½@¡PR¨P^ tiذ ƒ7ÇÀ@—jÕJI¶=%))…Ó§ïâééÃÑ£·HLL¦iӪ̙Ó )\øû·†©‹äd9ÎÎÞ¸¸xÓ Ae6n´¥B…âR‡•mtêT—fÎ슃ÃVzô¨Oƒ•¥黽îfdTž1c¶sçNk×ÌÒ×Q?*%EÁ¾}¾¬Xqœ»w#05­ÍÞ½£³Ôëzð ?sç`ÆŒÎ")±Ó§ïC«V5^‹ÊHAÈÆ‚‚^àà°õ]%‘£F™ªmAš\®àÑ£çï’Ž©ÿnÝ %*ê5ººEÑ××M«xÔ×/«É0¹\Á¹s÷Ù»×—C‡n÷†úõ+Ó¹s=:v4ÊÃnÝ ÅÑÑÇ_0eJGþ%[TC~HêÊÈ÷Μ¹ËàÁѺuM\]ˆ÷ŒlH*#ß’ÿR(” ´Ž»w#8xp,Å‹‹\é±`Á!\]Oàå5F­úG~Í«W ¸¹fݺÓäέýnòð/i-\?~NëÖ ˜2¥#C‡¶”8Úï×§aa1x{OÈÒï%wïF0pà:råÒdË–aT¬(ýµŸ*$&&³}ûeÜÜN•U=ÚR³f©Cû.>>Áôì¹ këÌÛCêpr¼>}Ü(Y² ÎÎ}®‰d¤ dSÛ·_bÚ4OôôtpvîC¥¥IÔF|ü[î܉àö퓎á¼y“ôÉ6ëÚµS?Òp>³(J®^}ÌÞ½>ì߃/^cdTžÎ±²ªKٲ٣Nr²—c¸¸xcl\‘¥Km¨T©„Ôae uIF\¾üˆÖÒ°aeÖ­û5Ó¦¹ ÒPÇd$ˆ„ä‡bcéÐa eËeûv1Ð&=ärÖÖ«ˆŒŒåðáñYªrtt<«VdãÆsäË— ‡¶ôïß”¡C7ÃÑ£²äáàà(Ú´YÀ¨Qm3¦Ôáü”çÏã4hOž¼dÃ[LL*IR¦‰}æMçY»ö4¯_¿¥wÑZ-à¿WPÐ :urÆÄ¤ë׋ÉÙR»w/‚Ö­päÈx tE2R²›èèxœœ<8|ø&öömpr²ÈÒ«‘‚ð³ÂÃc¸u+µ·ãíÛ©ÿ}¿Íº`Á<Ô®]ö£ŠÇš5˨íoûöù²oŸáá1Ô¬Y†Îëѹs½l—¤ ÃÑÑž1i’%¶¶-Ô¾1úÏP§d$¤þ¬õéãF:娏Ñ6KMY¾N]“‘ ’º?’N–Ñ»w#fÌè"u8YBdä+ÌÌѬY5\]Õ»äçDE½fåÊãlÚtܹµxõ*{š5«&uh?lÕª,\xˆãÇ£J•’R‡óS“=zÞÞ·X¹²?:JR†zö,Ž5kN±eËd28ð†mI‰Y³:;66‘ÎÑбw¯c–Z È®ÆÛADÄ+Ü݇ˆd¤ d'gÏÞcôhw´´4pqéK“&zR‡$*“œ,çþýHB¹s'u¸L@ÀSbb¨P¡8µk—MK>êë—¥|ùbj¿Ý700œ½{}Ø»×—àà(*W.™–€ÌŽÏ)) V¬8ÆÒ¥G12ª€³³ •+gí˜ôP·d$@@@(66«ÑÓÓaóæ¡*”5‡ Sçd$ˆ„䇾‰­í–-³¡gÏR‡“%œ>}—¾}ݘ;·ýû«oÿȯ y‰™ÙB’ÐÑ)ÄèѦôéÓXmJ¿&%E¹ùbŠ͇‡‡½Ú_s}‹R©döìý¸¹báBkz÷n$uH?-(è®®'ñð¸BáÂy6¬ýû7Ͳƒ!õž o_7>|ÎþýŽbr¶ ‰¢yó¹üý÷È÷ýF¯‰}7‚ Èå æÍ;ȪU'°²ªËüù=)T(¯Ôa B¦‰‰I àiÚ`™[·Â¸w/‚äd9¹skQ½ziôõu177 V­²èë—ÍR¿=gï^_öîõå޽ʖ-BçÎõ°²ª—­PݹÎØ±Û¹{7‚I“:2lXËl] ©î tÙ½ÛkëUô굊íÛG¨U»!{Cmþen^‡qãÚñ¿ÿýM¥14̾ÿ3JË–5pphËô鞘˜T¢ví²R‡ôÝvíº À¡CãØ¾ý2Ó§{²råqͰ¶n˜¥’’ZZ,\Ø ++gvíº†µuÖNªËd2¦NíD±bù™0a'ÑÑ ØÙµ–:¬rûv+VÇËËråŠ2sfWzõj˜å[³(•JÆŽÝŽ¿ÿöì-‘jbÅŠã4n¬÷Ñà#Q)Y\TÔkìì6sýz0óæõ+çB¶¢P( ‰Jëëxûv·o‡ @ñâÒ¶X¿¯z¬ZµT–ì­ôôi4^^~xzúpóæStt biY—.]êQ¿~¥,_Mð5)) \]O°xñêÔÑeéÒ>T­ª#uX*¥Ž•‘ï½ÀÚz… åeÇ»,»eKH¥î•‘ï‰ ÉTJ¥’Áƒÿ" à)GŽŒmÒA.Wгç*ž=‹åСqYªÂ+44š-æ1~|{ìíÛƒ‹‹7Û·_¦L™"ŒÛŽîÝëg©k)Sv³oŸ/çÎMÊ6©ÝÝ/1qâ.ìíÛ0i’¥Ôá¤Û¥KY±â8'OÞ¡V­288´¥S§ºÙ¦Ÿâ‚‡X¾üÛ¶ £E‹R‡#<ÃÔt!{÷Žþ°¨BlÓ„¬ÌÇ'˜¡C7’;·ëצV­¬·ú+ï%'˹s'µÒÑßÿ a†ÿMM ªT)ùÁëÔ::Y{Rô³gqxy¥ö€¼v-ˆÂ…óbaaH×®õhÒ¤j¶¹0üš{÷"7n·n…âädÁðá­rÄ×ý_꜌„Ôd¹µõ*´´4رÃ.Û Iʉ²J2DBò½ØØD:v\JÉ’Ù±Ã.KUÆI%2òíÚ-¦Q£*¬Y3HêpÒmäÈ-øú†pêÔDråú¸BíÉ“—8;{ãáq…òå‹3vl;ºv5Îï™±±‰´h1só:Ì›×Sêp2Œ——[±µmδi¥ç‹”J%ÇŽÝfÅŠã\½ú˜Æõ9²-mÚÔÌV‹Ý»w_gÔ¨m̙ӛIŽðNŸ>n”*Uˆ¥Km>ü°Ø¦-YÕ¦Mç™>Ý“–-k°|yß,µUÞ¼I"00ÿ§iÉÇ;wÂIN–“7o®wÕŽeéÕ«úúºÔ¨Qš¼y³Ç˜˜¸§§—.="o^mÌÍëààЖV­j昛Ì÷ÕK–¡ví²92žêÕ³_Ìì¢\¹¢ìÙã€VVÎlß>‚jÕJI–͉-Û© ÊÆ ¶XZ.eÚ´=ÌÛCêÔ^©R…Y¹²?66«Y·î C†´:¤oºví1žž¾¬_?ø“D$@ùòÅX´¨£F™²téÆÛ޳³7ãÇ·ÇʪžZ·5)T(Ó¦ufôèmôêÕˆzõ*HR†èÔ©.¹sk1tèF455™2¥£Ô!}$%EÁ¾}¾¬Xqœ»w#05­ÍÞ½£?Ú*›]œ;wŸ±c·3rd‘ˆT#ÇŽÝæúõ ΞüÉc¢2R²˜äd9“&ýÍÎW?¾=ŽŽfÙjEKÈ~ââ % à)7o>% ”û÷#‘Ë*”ƒrÔ©S]êÔ)‡žžN–Xåÿqq‰9ÀÞ½>œ9sMM LMkÓ¹s=Ú¶­Mž<ÚR‡¨R7o>eܸ<|øŒqãÚ3bDë,µÝ,3¨{eä{¯^%0`À:føðM=:bÅòKÒgíÚu€€P¼½'¤ûsªT)‰‹K_F6cñâÃØÙm¦F2L˜`޹¹Ú]_Éd2æÎíIÛ¶ ؼù<ƒ7—:¤ Ó¡ƒ!«VõÇÞ~ ZZ89YHGLL›6gýú3¼~ý–Þ½2bDk*T(.I<ªõš×Rµj)–,é­v?÷9ÙúõgQ*aèЖŸ}\$#!‹xú4šþý×ðúõ[<=GS³fö\Ù²ŽˆˆWiIÇ€€PnÞ|š6X¦té–§{w“wUårD9¹\ÁÙ³÷ðôôáС›$$$Ñ´iUæÌéN‡†Ù¦iû8þNN;yùò5³gw§_¿&â‚1‹Ê›7ë×ÿŠ“ÓN^ÏâŽéÑ£¾Ôa ÙœHH¦êÝ»=gìØíTªTBT'ƒL&cùò¾´o¿‡­lÝ:LÒÊÁ/^2,>þ-sçî§_¿&?t}_µª®®pt4cÉ’# ²]&L0ÇÔ´¶Z½×V­ªÃˆ­™?ÿ ––u³|ïïYZ±ti £FmCG§J· ‡†F³fÍiÜÝ/¡¥¥ÉÀM2¤e¶8÷æM®CKK“M›†|¶½ §O£Y²ä0..}¿øºˆWK²?¿ ZG™2EعÓ>[½q YCxx 7n<áÆ'ï†Ë„òüy•*•ÀÀ@—›¡¯¯‹¡a¹5íS©Trýzžž¾ìÛçË‹¯16®ˆ““:Õ¥T©BR‡(©ØØ7Ìœ¹;.cf¦Ï¼y=(]º°ÔaI*&&³gï}ô1Ÿ` µþ‡òæÍ…©im•Å–^ZZ,YÒ›% âèèNttüW¾éܾÆÃ‡Ï>úØûE£ÿþ¬éééP»¶zÂKoB2))%[ß”NšdIXX ®ÃËË‘J•JH’Z+Z4?nnƒèÒÅ…eËŽ2n\û¿~=_ß`•ô•lÐ`&†ÌšÕ-­Jsùòc¼y“Ì„ æ?uìš5˰fÍ ÃX°àƒ­ÇȨ<ãǛӶ­úT°c†§§3gz~Ô.B©T²jÕ ~ù¥ú‡w³”nÝLˆŠzÍÔ©»ÑÑ)„…EL=_``8«V`ß>_J–,ˆ““}ú4λoärvv[ŽÂËË1GÝ{¨;…BÉØ±î4iRsó/ÿˆž‘‚ æŽ»Íˆ›hÞ¼:+Wö'_¾ì1ÄCP_/_ÆãçÂOðó Áßÿ ‘‘±hhÈÐÓÓI«t44Líó˜S‡'ݽÁž=×ñôô%$$ŠjÕJѵ«1]ºgûÃÄÄätõ¹ôòòcÚ4O ³fu£S§º*ˆNý½}›BåÊNézn×®ÆjßÛoõêSüùç>† iÁôéÕ¶_YNtèÐMlmÿJ×sׯÿ5Óoœ3Ê×zH†‡Ç`cãÆÎvÙz1(9YNß¾n<}-nÄÓiƳL›æÉ¶mÃhÑ¢FZòköìý™Þ³7&&Úµ§'6ŽŽftè`H»v‹˜<¹c†/èøû?añâ#x{ßÂĤNNæ´hQ#CÏñ£¼½o1hÐz<<ìiÖ¬*ÑÑñ88låäÉ; ÞŠéÓÕw2uzÌ™³7·SlÛ6œ_~©–áÇ?þ®®'8yò5k–fĈÖtébœc† Lžü7îî—Ù½ÛATˆ«™5kNãììÍÉ“¿VDuM$#A½o†Ü·ocþü³[¶jô,¨‡¸¸DüýŸrãÆ¿ÉÇ'O^P±bqŒŒ*`dTžºu+P§N¹±Òú5OŸFãééÞ=>†Q¶lºt1¦kWcôõu¥Oeìí·ÐªUM¬­|öñàà(¦Lù‡“'ï`mÝ€éÓ;S¤HÎÝ¢þ9ŽŽÛðôô!9Yñ•gÉØ¼yˆZVFþ×¾}¾Œ펙Yjóøœ6”I]%%¥P»öTÞ~õyùòåæöíYYªšðs Éðð:wváéÓèl‘Ðø–ØØDºvu!oÞ\ìÚeOÞ¼bÁú[FŒØÌùó÷ٵˎ?ÿôâôé»(©·ÃÇ;Q«VæU_¼øîÝW¤ý¿¦¦… å¥D‰=:ܹ3ç÷ÏÏ/„… qòä6¬‚““ÍšUÍ”s}×ñøñs.ìÍð቎Ž'9YN… ŹtiªÔáý¥RɨQÛ8vìŒEOOç§©P(9xÐW×øú†Ð¤‰vvmhÛ¶–ZmÅW…M›Î3yò?,_ÞWôÎU3÷îEоýbV¬è‡¥¥Ñמ*’‘‚ ®öîõeÔ¨­ Ò‚ß·Êqo2BÆKN–sóæSüüBÒþ=zô…BI©R…¨[÷ßÄ£‘QyŠUÏ&ïªõ/¯ìÙskׂ(R$:Ñ¥‹1 VÉqU`VZ:5‘êÕK§=–œ,ÇÕõ$Ë–¥bÅâ̛דFªHªZ;yò}û®¾|V°`fe™J‡Ë—1xðzôôtØ´iˆÚŠÈiÆÛÉ?ÿ\%9YþÙǵµ5éÞ½K–ôRqd?ïĤ•U]¬¬\ˆŒŒ%%ENž<Ú\»6=Ûÿ½ S'gêׯÄ_ý*®¿!>þ-­[/ **Ž”EÚï…––&ŽŽfŒßþGøq6œeúô½¤¤üû»(“ÉÉ zõRÌšÕ¦M3/IxíÚc.<ÌÙ³÷hÚ´*¿ýfAÆé{NIQ ¥•±E!!Q4o>¹\L&C.ÿwqî¿×YQr²œ=Vòòe<Œ¥P¡þmZ¢GKKS~ûMš©¶ªäãLÏž«°µmÎäÉ¥Gm½ß–=oÞA€’_2T«VšS§&fÚù'Múw÷KŸ]ÐÔÔ@.WФ‰sçöÈÔDÜåËX¸ð.< yóê89™S¿~å¯~NÏž+™8±Ã7Ÿ—^ï·eŸ>}Å6hkk0nœ9ŽŽfr.)=‡¹ùôõ˲aƒ-šš,Yr„/))…“'ï°gG —+hÕª&]»Ó®è× ¾‰C‡n~p³¯‰……yòäâ￯ajZ›Y³ºQ¾|1‰#ͦLÙÍÖ­INNùìãÿüã@“&z*Žêç½xñš×ÅÆ¶vó*ü¹\¡áïDG'|öñ¢Eóáïÿg–mCÛ¶ ‰‹Kü(¹©ÛÏ}|f|T‘”]½¯š5«›J§øfÿ&¿þÝ–ý9—.M¥B…♃¥å2|}ƒ¿ù¼>}³hQæW*Ÿ;wŸE‹såÊ#Z·®‰““uë~ZmwáÂzôX ÀÎv4oþs ׯckûWÚ¶ìÿ’ÉdÔªU†cÇÒ×[YÝùù…Ð­Û † iAr²7·S/úì¢mXX kÖœÂÝý Ø [Û9~€ihhô»Ä®.Û¶ ˲ïYÙÕ‰ ´w÷áé]ÜÉHAP'žž>Œµ ²Çj 9RRÜ»ÁõëAiÉÇ"Q(”èêÅĤ"õêUÄØ¸"uê”ËQ½ÛBC£±±Y̓Ï8sfU«~½GB¡äâŇìÞ}ƒý‰‹{C£FUèÒŘNêŠ>‡Ø¿ÿÇoâÓË… çeñâ^tè`(IlYÕÕ«éÜÙ峕,Y_ß™Y¶ À›7IŒ¹•“'qvU=©CÊѦMÛæMç?¹ñ×ÖÖdàÀfüñGW‰"û9áá1mÍþ/-- œœ,5ÊT‚èToÓ¦óLº›õëÓ®Ôá¨Û·Ã05]øÍçijj0uj§/NiÿYU«N$!!é‹Ëd2ÆŒ1cÂs•.Ÿ9s—… sýzffúL˜`N:åÒ8p-'OÞA¡P¢¡¡›ÛÀvµ~ý~ÿ} ãkmJd2W®üŽ®nÑ:ºñð¸Ê˜1Û‘É”(• ¡!céRzöü·÷v``8«WŸÄÓÓ‡’% 2dHKúõk’ãûµÃ¿ýqöì#˜²’  ˜›/fÈ–L˜`žÞOÉHAPçÎݧo_7†mÉÔ©¤GP#11 \»ÄõëA\½ú?¿’(P 7††å11I­x¬W¯bŽ^5=pàŽŽÛIJJ!%EÎäÉ¿ØKÆÏ/„½{}ñôô%2òºtíjB—.õÄ–õψŠzMóæsxõ*ñ“d¤L&C[[“£GÇgùþNª¦T*16žAddìG×ÖÖL뜕Éå þüskמaܸvŒ×>[We«3_ß,-??)øÀ±Y²÷Øûa5ŸOD¾W¸p^||fä˜á.³gï篿βiÓL™â›½}›ÂŸî㯿Φm‡þ™L†±q¼¼Ædx ¯06žñÅóÊd0wnú÷ošáçN¯ãÇY¼ø07n<¡}{œœÌÉ›7ÍšÍI{ï×бlYzô¨ÿÝç zµµ+aaÑ_­PÕÒÒ`úôÎØÚ¶øÁ¯F}$'Ë9r+Üøàû(£zõRœ81‘‹âêz‚ãÇ©^½vvmèÚ5gMÆþšäd9}ûºñðásöïwóµn IDAT×éj&!!‰Ž—Q®\Q6nò=‹è")êÀ×7WLMS§Š›µœK©TòàÁ3®_âÊ•Ç\¿ăÏP*•T©R’úõ+Q¿~eLL*Q½z)±EÔ ¬©S÷°}û%d2P*S{?Õ­[‘þ½¡xøðYÚ$ìGžS©R ºu3¡KãoVPætC†lÀÛûÖ`hii~Ô?RH¿9söãævê“ïíáÃã04,/QTËÝý“&ý¹y–-³?#iÐàBC£?ú˜®nQ®^&QD?îíÛÚ·_̽{ß|®¦¦Ó¦Y1thKD&=¥R‰££;G°s§=FFÙãïHF¸~=‡-„†F“’ò儤ŸßLJ–ÌØÅÝÔ¡enŸ|\CC-- Ö¬¨Õ¬J¥’cÇn³pá!nÝ £bÅâ<}ýIÂ_&“1{vw úþ– …’ ÎòçŸ^(ŠÏ¾2™Œ *áé9ú‡¿uðæM¶¶qöìýÏ&Á«VÕáÁƒg4jT…‘#ÛæÈÉØ_óáTò={FS«V©C> T*>|·n…qèиï­XÉHAÚû)ˆÆÆY·n°XËa^¿~‹¯opÚ–ëkׂˆ‰I _¾\Ô­[úõS«ML*Q¼x©ÃU;a º‘¨O.f54dœ8ñ[ZHÿ'”*U+«ztébœ%+¤°oŸvv›?³=ûc2LMõÙ¸ÑVE‘eá´m»à£U¨PœK—¦JQæ¸té!C†l \¹blØð«¨lÀüùYµêDZâ[[[{û6LœØAâÈ~Ldd,«WŸdãÆsÈåʯTGÊ(Q"?ׯÏÈ1×Xr¹[Û \¿Äž=£Ä‚Û“Y¸ð«WŸBCäòßÛ444˜?¿}û6ÉÐ󺺞dÞ¼-WCCFß¾™3§Ç/ø>zôœ‘#·âïÿ$mñóýuÜ–-Ã~è˜R‰Œ|E÷î+yòäåW‘Z¡Þ¿SfÍꦢ貆÷³†oÅäÉ¥Gøk×Ó«×j†oÅo¿YüðaD2R$²bÅq.<„‡‡=U‘:áøø·8;{ãêz™LFJŠœ¥KmÒµ*›˜˜ÌO¸té!W¯>æÚµÇÄÆ&R¨P6¬Bƒ•iذ FFåsÔ„ëŒtþüìì6óæ« ÞË—/srÌÖ¼ŒäééÃÈ‘[?ªˆÔÒÒD.—“+—mÚÔÆÒÒSÓÚ*”WÂH³¾àà(š6R©¤V­²?î$uH™J.W0{¶nn§>¼%“'wÊQ ")­Zu‚¹s0i’%ööm$Ž(ã½y“ÄÖ­Y¾ü/_Æ£Tþ;½ÖٹݻÿЬ,*ê5Ý»¯DSS†‡‡½hùò—/?bÔ¨­„‡Ç"—ËÑбre:w®—!ÇW(”T©òII)hjjдiUþúëWòçWß)ɩӟÝÓý| ;Öeùò¾?|Í¥P(qs;żyÒª$µµ5¹}{¶Z¯>E·n+xþ<Èݹ3G\K½sï^VVδlY“Õ«ˆšj&00œ®]]èÒŘ¹s{üÌë#’‘‚ …Ó§ïүߦOïÌ!YJ\váééôižDGǧ­ŽmÅ2&&«WsåÊc._~„¿ÿ’’R(]º0ëÑ Ae7®Be¾g²˜ð)) />Œ‹Ë1d2Ùû}ÎÎv4o.¶ gÏâ¨[7u¨…¶¶&ÉÉr ̃…E,, iÙ²†H¨g°6mpçN8Ó§wføðVR‡£žž>L˜°“zõ*°zõ@‘$Q§O£iØð®\™F¹rE%Ž(ó$%¥àáq•¥Kù*­’þéÓ%9î=92òݺ­$þ\ìÚeOáÂù¤Ií¼y“ĬYûÙ¸ñJ¥’Fª°gϨ 9vPÐ š6 @õY¼¸·Ú/’¶l9û÷#ÔÉÖi ¯¥š6­Ê¶mÃÉûÇw¤—_~©ÎêÕÒõ9§NÊÜ r˜V­Z}ôÿáLšô7W¯>dŸ\d–ãðáñ„†Fsùò#®^MM>Þ»R Õª•¢aÃÊ4o^ž‚ߪî É!ž?O`ÅŠëÜ¿ÿxQ,ãýkõ¥ž‘ïõéÓ˜E‹z}ó<‘‘‘fTØYÚœãÎ(òäÑ¢E‹ 4hP†š5‹£©™17ðµjÕ¢T©Rr¬÷ÜÝÝéÛ·o†S• jAþüÆ<{¶¹<^êp~Ø÷^V†ak»·oSX·npŽ,Hdd¤dçïÓg/îî%‹¡T©RÔªU+SŽýßï¯\®äÂ…§¸ºú0fL6,›)çþQ™ùýx/<<†nÝVP´h~vì°ËÐ-È™M•ïÏQüùç96oΘªíK—Bqq¹†¹yú÷7¬Òë¿×¿_¢P(yüø9/_ÆóòeØ€ãî^€£G=Òµ¿S§ºÌœ¹—mÛ.2n\ûLŒP½ÍšåÅÉ“ìØa'&‹«™¸¸Dúõ[CTÔkvïvÈЪzÑ-\ThÆ OjÖ,C¯^¤%Çzð  ‹ÅL˜°“¸¸ô AÑÐadTž¦M«Š>y‚ dš¬šˆÌ2ÆoÏÆC8pà:9óøñs©ÃÊ–ŠË/Y"RÈd2µIDJ¡R¥xxØñèÑ3úôqãõkÑ^æK2jhŠ”‰Èì@KKC­‘?#OmúôiÌ–-¾kàMv²iÓyÖ¬9ÍÒ¥64i’Îr\A%bcéÓg5‘‘±xxØS¦L‘ =¾HF ‚Š\¼ø“'ï0sf××8]¼xñš32mÚnÞ E©ä‹Í¥ÿKKKƒ›7Ÿfn€‚ ¦¦µ9zt<2ÌÍ—°gÔ! B¶£§§Ã?ÿ8…Íjbc¥Ir¬›ñüyÇ«¦eƒ:9z4€©Sw3i’%ݺ™HŽðØØDll\yñâ5ÿü3’òå‹eø9D2RTdÍšS4mZU¬øH$W.Mºu«ËÀu7®=]ºÔC__—‚ÿ-5×Ѐ\¹´>™ –”$çÂ…ûªY!GªP¡8ûö9bcÓ‡­Œ¿“7o~f‚ ÿ¥§§ÃîÝDD¼ÂÚz11 R‡$9’®nQš6­Š§§¯Ô¡¨”O0vv[Þ½×·•:á¯^%`m½ŠèèþùÇ]Ý¢™ržìYï,j&(èÞÞ·X¿>sz©ßV¨P^ Ë¢­ýê“i‚±±oxüøAA/xüø9AA/¸ÿAAωŽN½8¿s'‚”E†LUA¾N[[“3ºÐ¬Y5ƌَ¯o0«Võ§fÍ2R‡&ÙF¥J%ؽ۞=Wam½Š;ìrô~AÊûÞ‘ IYªë aèИ˜TdöìîR‡#| &&^½\‰ËîÝ”.]8ÓÎ%’‘‚ ëÖ¡B…☙åì)½êªP¡¼•ÇȨü'ÅÇ¿}—¤|ÁÛ·Éhie­É“‚ Y™™™>ÞÞ9r ––˘5«+66¥K²ò勱{·=z¬¤G•ìØa‡ŽŽèq(ªdiiÄÔ©»9vìVVõ¤'SÅÆ¦D)R$/ëÖýš®A?‚j„…Åз¯)) þùg$¥Je^"Ä6mAÈtÉÉrþþû*C†´ÈÒ½"£££Y°`dljgΜ9?}þï•?nôõuéØÑ(ÙK%§¾†Ù…xý2Öƒظq£Ôadª_븸8æÍ›÷Ùç©ûk[¶lvíɰa-qrò`øðMDGÇKV–±wïÿٻﰦηà_6 ²÷–)CQ@Å­Xµh•:ªµ¶Z+µVý©mÕÚÚVí²®V[Gø¢¨hµjµn¨8²!̰7„伄Dp hÂIÂý¹.. ãœ;9û>÷ó<'pûöíë@óu£=Û‚¬¯+äÕXXè!""|¼õÖfde•°i¢hÛÇ^y8haÀ'œ9ËÊü; ÇÇìFyùc80W¢#3“ד˜ÈEPÐ&hh¨áèÑ©'"JF"u·og ºº^îïrUTT`×®]mzí|€ŒŒŒ×žNsUUUX½zu»ßGž e(ßhùIVbb"¶oßÎv×|Ù7_ÖX³fÍsß#ËVUUË—AXØGˆŽæ`ذpñbÛaɄֶwÇ7Z¬Í×öl ò°®Wcjª‹ãÇBW· ÆßŒÄD.Û!(Þ6×QÇ^y<æŠk×’!´q„M9ôÅG‰Ý»ß—øÈÌäÕݼ™† ¶ÂÙÙGŽ,è°êxJF"e.ÄÃËËFFÚl‡òZìì씔Ԧמ={¯="Y´ å-?ÒÍ—½".ë€g\¼¸ Îx÷Ý?±bE8jk;÷à6­mï/¢ˆëy}Z_''SLœ¸ÑѶC"ä•Èã±pà@g”–Ö >>—íP¤bëÖ  ‹Âï¿¿ûÜ®±;NzˆiÓ¶cäH7ìÛ÷!´µ;®% %# ‘²ÿþ{„áÃÝ:l~%%%1b~ùåXXXÀØØ»wïÆÒ¥Kall sss„……µûµ jñ¾ÐÐP888@KK ï½÷ø|>‚ƒƒQXXˆàà`\»v ………5jöíÛ===\ºt©MÓy‘;wÂÖÖZZZ˜={6”¿Qé‰Å€ ©© ggg—/_†§§'444УGœ8qž9O›6 ?ÿü³ø}EEEèÓ§ÊËË_ø™e›$sìUÄc¡‹‹ÌÌtqõªì'NÛëØ±h¬[÷¾ýv"=؇4Ù½ûæÏ߇9saÓ¦iß'C‘šüürÆÜ|sëVÚkMçÒ¥KL~~~›^ËåreeefÕªUŒ@ `~ûí7³~ýzF 0?üðãèèØî×fdd0ZZZâ÷©««3sçÎeêëë™ôôtFOO9wîSVVƘ››3—.]b˜ììl¦K—.Ì„ ˜7n0IIImšÎó>ñkSSS]]]æâÅ‹mþóóó™K—.µùõíÕžéWWW3æææÌÖ­[™ºº:æÂ… ŒŽŽsýúuZ†/Ñží¡=Ú³üΞ=ËXXX0)))Lee%3nÜ8æ£>b†¶Á—‘Öò eÚsZsòäIFII‰Y¼x1SSSÃ\»vÑÕÕeÂÃÃÛµ\Z[Z{®µ}@kCCÃyzz2çÏŸfÙ7_g²³³ çNS˶½ß¿¤äçW03fì`¬­3ëÖb;<†özôèóèÑ£6¿¾µõèéeþàÁFCCƒ9zô(óøñcfãÆ fãÆ-ÖæëFkÛÂÓ$±®´÷ó·W{¦ßÚ>°µmtéÒ¥Ì{ï½Ç0ŒpÝ×ÐÐ`fÍšÅ0 Ã8p€ñôô”J¼©±‘Ï,Zt±±YÂ;Íj,í=kÏ>\RçcùùùL·nݘ={ö0uuuÌñãÇ™®]»2‰‰‰Ï‡=Ê8;;‹ãݲe 3|øð~Y?ÿmÏþ_RÇ^Y=¶÷ûxÚÂ…¡Ìôé;^é½²êîÝ ÆÆf ³jÕ1¶C!Mù̪UÇKËϘ;¯°ÆJF"E—/'2ææ‹˜ŠŠÇ¯5ö&#0ÕÕÕ Ã0Lrr2£ªªÊðx<†aæÞ½{Œ©©i»_ût"“——'žï AƒÄ.–––Ìýû÷†ô0¹¹¹ížÎó>Waa¡ø±þýû3mú^F¶’‘aaaLïÞ½[<¶páBfÑ¢E´ _B’‘Çg,,,˜¸¸8†a„3eee ÃÐ6ø2²”ŒÔ××gÄ}ùå—Ì„ Úµ\Z[Z{®µ}@kZ»c˜–˾½`¯³lÙJF2 Ãf߾댃Ã2fذ˜{÷2Y‰£­Ú›|jm=b˜–Ë|Ù²eÌÔ©S[¼¿gÏž/MF¾h[xš$ÖYKF¾hØÚ6zñâEÆÚÚša†™;w.ÂØÚÚ2 Ã0sæÌa¾øâ ©ÄÛѳvíߌ…ÅgÌæÍçY‹ãU’‘m݇Kê|lûöíÌ AƒZLgòäÉÌ×_ýÌq¸¾¾žÑÓÓcbbb†afïÞ½­~Y>ÿmo2RÇ^Y=2Ìëÿú+’qwÿò•Þ+‹22Š•̬Y;™ÆF>Ûá†aÊËk˜ààßGÇåÌ?ÿ ¦¦¦ÝïQD¶¶†8tè#üüó;8v,C†lÀÿ=b;¬×Öžý¾¾> [<öôzþ<’ØMkÛ¨ššFŒƒ¢¦¦NNN2döîÝ‹ÊÊJøûû³¾D½÷ÞìÞý>Ž‹Æ{ïíT˜D? ¹}±ŽŽÎ3ÛQII tuu<{ž2e Ž9‚ÐÐPL˜0Aœ€ë ¤µ¿Q„c¡››ÔÔT“Ív(¯…Çãã½÷v¡¡¡{÷~€.]ÔÙ©Óûï¿G ú&&Ýpúôgps{q‘BG¡d$!R¦©©Êvrëøñ㈋‹c; ©1b®]»†„„@mm-|||Árd’¥¨ËpÆ 2dTUUáëë‹™3g"//í°$NQ—Ÿ‡ÃÁ©S§UUUرcƌӮi´¶.´öÜ«îÔÔÔPQQÒÒR@TTRSSÛ3 ¸ËVII ÁÁ¾¸re|}»cæÌ?1þ>U±Ú+kÏþføðá WÅÄÄàêÕ«/GkÛ‚¢®+/ó²mt̘1øõ×_1hÐ À°aðqãF¼ñÆPVV¼K¬‘#ÝqäÈÄÅå`âÄ­((hßî²JRçc#GŽÄùó瑞ž@8HÔÑ£G1bĈ¾žËåbË–-˜9sf‹ç}›“ıWQ…jj*puµÀÇò›ŒdŸ}öHIÉÇþýsah¨ÍvHÞo¿]ÄìÙ»0nœ7þXf–‰â) ‘!**Êàñ^<*­¢211AHH¢££_k:‹-V©hœœœ°víZøûûcĈpvv†‡‡‚ƒƒÙ -×™5k²³³Ñ«W/Œ1S¦LÁÚµkÙKŒ–_ÛøûûcñâÅ~üxŒ9nnn:t(‚‚‚^˜ i®µmAÑוyÙ6:zôhTTT´HFVTT(Líçñò²Áߊº:ÆŒùU®&"’:óòòÂ+§5s IDAT’%KàããƒÀÀ@¸»»còäÉxã7žûz555¼õÖ[ÐÔÔİaÃZ<§èÛœ$޽Š|,´·7FjjáË_(£Ö­û'O>ÀÎïÃÕÕüåo RSUU‡yóöbýú°víDüðÔŽ1»J ÃÈßY!r",, «VE %eýkMçòåËpuu…©©©„"k?@€²²2¾ôµEEE¸ÿ>úöí }}ýWžŽ¤ !!C† ‘™éçææ">>–––Ïôó%iа émí]~õõõ¸}û6êêêàéé ‰Æó4Z~­;xð ¦OŸŽöžÖÔÕÕáæÍ›ÐÕÕEïÞ½_iÞ­­ /[O^eÐØØˆ[·n^Ô‰úÓZ.{]]Ý[Ö¯úýw„ššzüøãìÞ} VX»v"||lY‹GTåêêÚæ÷´¶=o{EAA|}}¡££óÌôž·ĶЯòùÙœ¾´ÓÒþ>¤¡¢¢óçïÇ­[iøå—wðÖ[Ò[_響’[ÎÉÉɰ³³{¦ɧ͞=¦¦¦X¿þõ®^FÚßß«ìÿ%±¿‘Åc!ðúÇß~:‹Ó§cpñâ2 G&}¡¡7ñ¿ÿƯ¿NÔ)}Ù§S‹ÏÅܹ{QSS‡ß~›‰þýÙéiw©ý(!Rdkk„ššzWÃÈH6Ê¡_•²²r›âÆÆÆ |íét–––°´´ìyÑ2”, 8°ÃæGËO:4551tèÐךFkëÂËÖ“§÷\..\xáë{öì OOO<÷ù§—=-k@KKkÖ¼…©Sýñå—G1nÜ&ŒﯾSÓgu²¨µõèyÛ{Ïž=ѳgÏNïyûIl Ѝ#ÓòBW·+öïÿk×þ  !‹åËÇ@YY~û'–Ôr ‚Óš¢¢"\¿~ááá¸wïÞkÏSIb£ªªªÇB{{cddA `äj›ŠŒLÁ_EHÈpJD²ìÀ›Xµêúô±Ã¶mŸÀĤÛ!=5Ó&DŠzö´‚²²’ÜwBL!¤c¨©©ÁÈÈè…?]»ve;D¹åâb†#G`çÎÙ¸?ßcÓ¦ó¨«ã±!rGEEkÖ¼…_~y;v\ÆûïïFuµâ l#Møî»ïðË/¿¼´z’t>vvF¨¯o—[þòˈ„.>ø`7‚‚¼ðùçŠÛU…¬«©©GHȬXŽ?†°°ù2›ˆªŒ$DŠ´µ5г§nÜHŰaòÓü†B;ŒŒŒ^ØÇ‘ŒÑ£{bèÐرã2¶n½€°°(¬^=£G¿¸’ò|ÁÁ¾pp0Æœ9{ðæ›¿bçÎÙpt”n·%òÎ××wîÜa; "£Dû•°´ÔÉ«ÙWPP3þ€»»%6nœúÌÈñ¤c$&r1wî_(+«Ehè< ìÂvH/E•‘„HÙØ±ž8}:F&ûÑ"„B:#MM5|úéHDF~oo[|ðÁŒ¿7o¦±!r§OŸî8{v1´µ50zô/8yòÛ!"·Œ…•l……•,Gòr7`Μ=ÐÐPż'Sƒ£t Ã`ÏžHŒ³††Ú8~©\$"JF"u&ôFNN)®\Ib;B!„4cjªƒß~{§N-‚¦¦&MÚŠààßqÿ~Û¡"WÌÍõpìX¦Lñży{±jUx<>Ûa"wÔÕU¡§×ÅÅÕl‡Ò*>_€ùó÷#3³΃¡¡| *1cÆøê«„„ Gxø˜™é²V›Q2’)³´ÔLjîØ¶íÅB!„=ÞÞ68th>ŽY€º:Ǝ݈Y³v"!!íБêêªøî»‰øí·w…‰· /O~ú½#DVjË|eäÊ•ÇpõjöîývvFl‡Óéœ=‹áÃ@FF1Ž_ˆÅ‹GAUU¾Ò{ò-!rjá¸q# .$° !„B^ Gœ8±û÷ÏEAA%FŽü }´ii…l‡FˆÜxë­Þ8sf1**cÔ¨Ÿqñ"ÿÒºº]PS#»BíÝ{ûöÝÀO?£wo[¶ÃéTjjê±dÉ!¼ÿþnŒÝ çÏ/•Ûe@ÉHB:€—— Æ÷ƪUÇP[ÛÀv8„BiÅðá®8sæ3ìØ1 II\ ¼|°wïf°!rÁÑÑgÎ,Æ!=ðî»bõêÔ×7²‘‚ââ:()©±†BÑÐP•ÙkÆsçâ°rå1|þùXLœèÃv8Jt4#Gþ„sçâ°gÏüøãhii°Ö+£d$!䫯ƣ¼¼ß}wŠíP!„òJJJ;Ö.,Ãï¿Ï—[Žqã6cܸÍ8}: LGHk´´4°eËtlÞ< ‡ÝƘ1‘””ÏvXä5ÔÔÔãÞ½L8pK–‚ŸßZ¬_‹.]œÙM¡hiiÈdeä½{™˜??fÌè‡ál‡Ói<~Ü€¯¿>ñã7ÃÁÁ.,èQl‡õÚTÙ€ÎÂÔTß? €¿¿=‚‚¼Ø‰B!/¡¬¬„  /y!**¿ÿ~ sçþCÌ›7S¦ôE—.êl‡IˆÌš4©úôéŽ=ú¬^=³fõ‡’’Û¡‘VÔ×7âöítܾÄD.âãs‘•U€ŽŽ&ÜÜ,1eJ_ÔÕeaåÊÍl‡«PºvU—¹Jb.·sæì-Ö®Èv8ÆÍ›iX²$ eeµøùçwìËvHCÉHB:Ð[oõÆ;,^GG¸ºZ´ù½ (..–btН¨¨¨Cæß!ó!ÒAËO¾M™2…í:¥ððp¶Cè~~öðó³GZZ!v츌5kŽãÇÏ`æÌ˜5kLMuÚ4‚‚)G+›ŠŠŠ`jj*ÕyÈÓ÷Û߇,°µ5DDÄ'ظñ_¬Zu —.%àçŸß‘QÛGà¥ãó«iëùomm<È­[iˆŒLÁýû™¨¯oD÷îÆèÙÓÁÁ¾pu5‡««¬­ Äï;xð LT ¦ÆGGä¿%q,-õáï' è ½V§+ëÇ߯FeܹcGÇr×vØ|_çx¸`Á~TW×cïÞ$Ñ«]»¦¥áÔ©OanÞúú@^ßåˉX¶ì0jk°víDL˜Ð›í¤á.%# aÁãÇ ˜>ý$$p±cÇL äÂvH„ByE ˆˆ¸‡]»®"..>>¶øðÃÁ=ºÔÔTØ™SUU‡Õ«#pèÐmL›æ5kÞ‚¶¶üÄ 8œbܾ¨¨tܽ›””(++ÁÙÙ þþöèÛ×¾¾Ýai©Ïv¨÷Ùgÿ‡¨¨t\¹²B.öÉ ìlÛö.Ë‘K—BDÄ=DD„ W/k¶ÃQh¥¥5øæ›¿‹  O|ûí¤vUËJF–††F,[vGFcþü¡øßÿFËÅÁ‘B!/vófvニ³gcad¤É“û"8ØŽŽ&l‡FˆÌù矇X¾<::]°yó4ôéÓíŸ/@||nSåc¢¢ÒPXXuuUx{Û oßîðõ&utº°®Ôåä”aàÀï±zõ8Ìž=íp^JV’‘[·^À† §±k×lÊÿ€)²Ša>|k×þ uuU|÷Ý$ŒÝ“í°¤’‘„°-4ô&Ö¬9[[C¬[7}ûÒI!„"ï²³K…Çï 7· >>vöŸqÞÐÑÑd;ÿü®^MƤI>X²ä ØÚ²!„B^“@Ààúõ:t§OÇÆŒé…É“û À™ ÂÊ ýûoâë¯OÀÉÉ›7OkS¿ê•¨¿Ç¨¨tܹӲ¿GQâÑÏÏÎÎfPV¦QËáwæë»+VŒÁ‡f;œV½ýö688˜`ýú·Y™ÿÝ»˜4ifÍ€o¾™ÀJ Š®®Ž‡_~ù;v\†»»%6lx={vž¾ƒAÉHBdËÉ“°aÃide•`òä¾X´h$ll()I!„(‚ÊÊ:üý÷}„…EáÞ½LhaìXOŒç {¨¨Pb’tnééEX¸0±±9X¸p.Ùé«$y<>=ÊCt4÷ïg!:š§ÊÊJpq1kJ>ÚÃÏÏþ¥ƒÍtv_}u'O>@TÔ*™^¯Fþ8aåÊ Ÿ7‡SŒ  Mðñ±Ã®]³é¸$ÿý÷+WCyy –/ƒY³:ãMJF"kˆˆˆÆÆç›[†I“ú`á°³3b;4B!„HHVV þþûNœ¸øø\˜˜tÃØ±^?Þ }útïŒ&„ž ïÞ} ?þxææºøñÇ`øùÙ³V‡árˉ{÷8ˆŽÎDllêêxÐÑÑDïÞvèÝÛÞÞ¶èÛ×®Sô÷(Iðóûß|33gög;œ ø“'÷Á¢E:ß’’jm‚ÂÃ?F—.ê:EÇácÕªc¸p!ãÆyáë¯'ÀÔT‡í°ØBÉHBdUc£GÞŦMç‘•U‚¡C{`æÌ>Ü.P!„’‘Q„¿ÿ~€¿ÿ¾„.ÌÌtèŽQ£zbÀÇNÛÇéÜrrÊðÅGpáB¦NõêUAÐÕíÊvXUWÇÃÇÙâŠÇèhòó+ ¢¢ gg3øøØÂÇG˜€tp0¡k X±"—/'!2ò ™í&ÃÓs5>ýt$Þ¿ãÛáñø˜8q+¸Ürüûï*ì(ή¦¦7žÃŸ^½½1¾ûnú÷wd;,¶Q2’YÇç páÂ#üõ×u\½šKK}ÌœÙï¼ãG B!DÁ$'çãÌ™Xœ=‹˜˜hi©cèPWºcøp7èé)V2†—ùûïûX½: |óÍŒïÍvH¯,#£÷îeâÞ½LDGg"!!<ÆÆÝàím‹Þ½mѧzõ²î,ƒXt8§ßã·ßfbÜ8/¶ÃyFc£vvK±}û,¼ù¦g‡Ì“a|òI(þû/ áêjÞ!óUt¢Q²×¯ÿuuX¾| fÌè'³IðFÉHBä ‡SŒýûoàÿþ/ µµ 5Ê&ôưa®T5A!„(˜üü œ?³gcqýz*üüì1r¤† s…££ Û!Ò!*+ãÛoO"4ô† ë￟ kk¶ÃjUee>V<Š¥¥5PSSAÏžVðö¶…°É5 \Ù±fÏÞ…ââ*œ<¹ˆíPžQXX/¯Õ8~üøúvL÷ëÖýƒíÛ/!4tœ:džŠ.::kÖDàáÃl̘ÑK—ކÛaÉJF"êêx8yòŽ‹Fdd ´µ51fL/Lœèƒ~ý¨ !„¢`ª«ëqéR΋Çåˉ()©†µµ†í¡C]à--ª¤"Šíöítü]Šyó† $d¸L¬÷õõˆÏÅÇو‰ÉÆÃ‡ÙHN·@ÀÀÒR_ÜÜÚÛÛ½zYSËnÜHÅäÉÛpòä"øøØ²N 11Ùxã_pãÆ—2fÀ±cÑøä“PlØð6fÌè'õù)ºÜÜ2|ÿý)œ8qþþX³æ-xxX²–,¢d$!ò®¨¨ ÿ}ÇßCtt&ÌÌt1~¼7ÆŒé;JLB! F `“K—qñb<È‚²²üüì1p 3†u…»»””è€(]»®á×_ÏAKK«Vaüxï[ßy<>’’òñàA>ÌÆÃ‡YHJÊÇ‡ŽŽ&zõ²†§§ z÷6»îÄTÈ´ÀÀŸàâbŽ-[¦³J çÏÇcÖ¬HKÛ õdnÞLÃ;ïüŽyó†à‹/Þ”ê¼]eåclÛvþyffºøòË71vlÇ4³—S”Œ$D‘df– ""'O>@BFFÚ9Òo¼á€'BQ@å嵸z5 —.%âÒ¥VÁظú÷wD@€ pê B:Rii ¾ýö$¾ oo¬Y3AâUn|¾ÉÉMÕŽÂäc||¡¥¥ž=­Ð«—<=màåe ;;#º 'ÂÃï`éÒC¸}{µL%ŒwニM›ÎãáÃo¤:§AA›àãc‡={Þ§õö56 pàÀMüôÓ@HÈÌ™3jj*,G&ó(Iˆ¢ÊÌ,Á¹sq8w.QQéPSSÅ AÎ5Ê#F¸ÃȈ¿!„B Ã0HLäâêÕd\¿ž‚[·ÒP]]++} à„€'8ËÔÅ7!¯#..kÖÇÍ›i˜2¥/V¬ûJë·@À =½d‰›ZÇÅåâñãhjªÁÝݽzYÃËËžžÖpp0Š D!¯x<>|}¿ÁÔ©þX¶l4ÛርZ˜˜lœ8±Pj󨨨ÅèÑa` …ðð©`å9‹o¿=‰œœRÌ™3‹BG§ ÛaÉ JFÒ”—×â¿ÿáܹ8\º”ˆÚÚ¸»[`Ð  ₾}í¡¡A}×B!Ц±Q€2™‚ë×Sp÷.õõpr2EÿþŽð÷w€¿¿=LMuÙ•×rêÔC|ýõ ”—×"$d8æÍMMµ¾žÃ)'<ÈB\\.ªªê ¦¦77 xz “޽zYÃÅÅœFÀU@¿þz;w^ÅÝ»_µº®t¤Y³vBW· 6o–NóqéÓw -­ÿü³ff´ïo¯Û·Ó±nÝ?¸};ãÇ{cÅŠ1°±¡A¨Ú‰’‘„t6 ¸y3 ×®%ãÒ¥D$&r¡©©{ ܃9£Gs¶Ã$„BˆÔÕñp÷n"#SpãF>ÌLJüüìáïï??{jÖMäR];v\ÆÖ­ ­­Ï>…)Sú";»ññ¹ˆ‹ËELLbcsPQQ UUe8;›ÁÓÓ¦)ñhwwKjbÙI”–Ö OŸ¯±víLŸ.ƒ· ¼ãÇ{cñâQR™þgŸýNŸŽÁñã áêJ×|ퟋ Nã¿ÿ! À Ë—•¹ä%# éì «põj._NDdd2 «`jª‹ѯŸúõs„½½1ÛaB!D êêxˆŽÎÄ­[iˆŠJý{™¨­m€©©.üýíáëk??{¸¸˜Q“T"óê둘ÈÅ­[i¿„„|Âî ÔÔTàäd ˦Af¬áîn)3q„K—ÂÝ»\º´Œõ~á踿ý6o¾)ùÁO¶n½€ Nc×®Ù ôøôUFF~øá Nž|€ž=­ðùçc1h ÛaÉ;JFBž`åáêÕdܸ‘‚Û·3PUUSSøû “ýú9ÀÉÉ”íP !„"<11ÙˆŠJÿTV>†¶¶¼½mÑ·owøøØÁÇÇ::šl‡K:±ÊÊ:ÄÅå >>W\õ˜œœÆF´´4àêj;;Cdf–àÞ½L89™âóÏÇbäHw¶C'2$..?áðáàÄj,ññ¹9ò'\»ö9L$:íS§bÞ¼½øöÛ‰˜=;@¢ÓVT\n96n<‡°°(tïnŒeËFc̘^¬'­%# !/Æç —‹›7Ópófªø‚ÄØ¸úõs€¯¯=||ìàæfAÍY!„$0HNÎÇÝ»ܽ›»w9HO/‚²²œÍЧúôéŽ>}ì¨%‘šÂÂ*ÄÄd·H|˜º:tu»ŠGöòöÁgn®Çv¸DŽ0 ƒÌÌÄÆ ûu% «ÖÖðð°l–|´‚…EÛ×±²°nÝ?¸v-ƒ¹à³Ïáçg/­CäDDÄ=|úi(nß^Íê€.ß~{‘‘)8{v±Ä¦Éå–cÔ¨Ÿáéi¿þú€j­(.®Æo¿]ÀÞ½7 £Ó!!Ã0sæ*º‘JFB^OzzQ‹j‰ää| ìíѧ01éím‹=hBB!Dñx|ÄÆæàáÃ,jjê¡¢¢ ôìiÕ”x´€‡‡ôôºJdÞ‘‘)ظñ_ܼ™†~ý°hQ t–È´‰üáñøðñYƒ™3`éÒ7X‹câÄ­pr2ņ oKdz••u˜0a3 "b!u­ñÅÅÕØ¾ýþú+ÚÚ 3úQ²ÒEÉHBˆdUUÕáÁƒ,ܹ“èh¢£9¨¬¬ƒ¦¦ÜÝ-áåeooች½1õ¹A!„( êêzÄÆæàÁƒ,<|˜‡³™Y@XÝ&JNzzÚ W/+tëFÉŠª±Q€ôôB$$pŸ‹ÄD.¸ÈÍ-èêv…››9zô°€››9\]-àêjŽ.]Ô¥[TT:6m:Ë—Ñ»·-.‘#Ýéü´Z¿þ:t·o¯f¥ŽÏÀÙùs|÷ÝD¼óŽŸD¦7kÖNÄÆæàìÙÅT¥þ%%ÕøýwaRKK  ÇÌ™ý) Ù1(I‘.€Azz<ÈÂýûYˆ‰ÉB\\.êë¡££‰^½ž$'==­ai©ÏvÈ„B‘‚²²<|˜-NPÆÄä€Ë-‡²²ìí[TOÒ(Çò©¨¨ yxôˆ‹ÄDaÕcRR>¡ª*¬vìÑÃîî–èÑî®æ2qîwÿ~6m:óçãáêjŽO?‰±c=[ô;I[nnüý¿Å¶mïbÜ8¯Ÿÿ£Gy1âG\º´..f¯=½Ï??‚Çï <ücôîm+G~~v츌n¢K5|üñpÌšÕ¿Cn€1JFB:ÇGb"÷ïg5]”d"9¹|¾zz]ááaWWsq@NN¦ÔW!„¢€ *ó$AùàAJKk ªª sxzZÃÃà pq1§ JÑÐЈ¤¤|pw&)å½bOrrÊ’R€„„<¤¤ 1‘‹””ÔÖ6¬¬ôáäd WW 89™¢Gs89™vꦌµµ  ‹ÂÎW‘•U‚À@Ì›7~~öl‡F$lÇŽËøù糸ÿkhiitÈ<“’ò1tèœ=»½zY¿Ò4¸Ür¼ùæ&88#4t^§½öœ;‡­[/àÞ½L8!$d8 ra;4Ò%# !Š¡¦¦IIùâ*Êøø\$$p[\89™ÂÅÅ NN¦pr2…ƒƒI§=PB!ŠHÔª"!‹¸¸ñù@~~ÀÔTnnOú¥vq1‡½½±BžT ))¿ÙÉɨªª ü.\\Ìšý˜ÃÙÙ”úål…@ÀàìÙXìØqwîdÀÛÛ|0cÇö‚ºº*Ûá ¨¬|ŒÞ½×à‹/ÞÄûïìyîØq›6GlìZ¨¨´¿Òøñã¼ýöo(-­ÁÙ³‹;eWV<Çßöm‘šZ€À@„„ §Á{d%# !Š«ùIó»ÿYY%hl@MMvvFpvž„;; “”ŽŽ4`!„¢HJJª›ª'¹â*ÊÔÔBðx|¨©©ÀÞÞ¸é\@xNУ‡9lmä¢ r~~RR ’RЬ™u>**j††Úpu5‡“Ó“ÄcfÐÕ¥þ_ÇýûYرã2Μ‰®nLê3úÁÚÚ€íÐÈkúßÿãÖ­4\½ºJJÒoÒ;qâVXYécóæéí~¯@Ààý÷w#:šƒ“'?ít]<~Ü€ƒoaûöË(,¬Äĉ>˜?h‡÷ùIÚ’‘„·Çã#5UtÒ^€¤¤|$'çƒÃ)LJªª2ll ÅÍ’šWSÒ]oB!D1ðx|qOØG¢ð¦evv)ø|áMKÑñ_ÔdÙÕÕÖÖ¯T½ô:…ɈÎ_Dç0©©¨®®èëkÁÙÙT\å(Š—š¦KWAA%¼…n¢  Ç»á½÷0x° õM'§’“ó1dÈ<8C†ô꼊‹«áíý¶oŸùJ#_ÿý)ìØq‡͇¿¿ƒ"”MEEUØ·ïþú+µµ ˜6Í}4––4 ™œ d$!„ˆðx|¤§!99))Â$eJJÒÒ„•**ʰ¶6WN8;›ÂÙY˜¨ÔÔTc;|B!„H@]¯Y’2¿i —|de•‚ahh¨6ݬ4W:;›ÁÚÚ൓Ouu<¤¦"5µ©©…âÄ£è\,-õáèhgg38:šÀÁÁ..f”tdŸ/À¿ÿÆaïÞ눌Lf΀wÞñ…¾¾Ûá‘všÜ ~8Îl‡F^%# !DÊËk‘–V„ôôB¤¥"#£ééEHO/ÂãÇ .ppUS·HZ¶·™!„BØQQ!<槤ˆõii…HO/BCC# Kõ¦d¤ÕÕõPRR‚…….LáèhGGS8: “ffº,*"i©©… ‹Âá÷QVV‹!C\0eŠ/Fò >ÉeÔï¿_¦Mçý´´4ÀãñqòälÞüvï~ööÆmžÖ¹sqøúë¿1uªÝáìl†“'àã÷ãáÃo``в)tt&ÜÜÌÑ¥‹z‹ÇKJª´ Z8rdBv•‘Q„;¯!<ü6 8Øsæ ìtƒó(8JFBHGËË+_¬dd/XÒÒŠ“S*îÊÔTŽŽÂäd÷îÆppVUÚØR¥!„ÒÁx<~Ó2…âD£èï’’j HÑMFQkaŸŽÆ-F®æñøÈÎ.Err¾ø %%©©Eâ°µµ5šÞo*îÒÑQ8]J\É7‹…‹ ¥¥)SúbÊ_¸¹Y°i¦¬¬>>_céÒ7À0 v츂ââ*Àß/DŸ>ÝÛ<­Ë—1mÚ() XXèÁÍ̓={æ°²¢QÙÆácöìHI)„²²âçvíz£G÷ló´nßNÇ[omiñ˜šš*x¼FtíªŽaÃ\èáÃ]Áç3èÕkáMŽ ÞÆ”)}ñÉ'¡øï¿xDD,„««¹d>$Ëêêx8zô.víº†ÄD.ú÷wÄ B` õ»¯Ø(I!ò ¶¶¡©Š²YY%ÈÌ,Aff123K—W>_xr¤§×vvFO%+…‰JL‡Bv¥"ºá—‘QŒ´´Bp8ÅÈÈ(FeåcOúr|RÝø¤Ú‘®TÅÉÑôô¢¦ªJaw0ÕÕõ-- ØÙ¡{w#q×/¿M`d¤8TŠêþý,DDDãĉû(.®†¯owL˜àƒqã¼ §×õå sóf~ÿý".\H€ªª²øF„ˆªª2Ö¯Ó¦ù·yš \ þà ŸWQQŸÏùåX¬[wFܸ¹Y )‰‹ƒ?B@€Ó+|*Ù’ž^„ýûoàСۨ­mÀ„ ½ñᇃ©:¸ó d$!„È;œœÒ¦å“$%‡S‚¬¬ÔÔ/RÔÔT`mm ®¢UTŠ—]»ª¿dN„Bˆ|¨¬|ŒŒŒbq aßÍÂ>œËË…M¡ÕÔT`cc(XÎÎÎHÜÌZžÉϯhñYE‰ÕôôBÔ× û¬ìÖMvvÏ&)»w7z¦¯:Â.>_€k×’qìX4Μ‰ECC#† sÅ„ > tWÈ>eŸ/ÀÔ©Û™UUå•Í©««bñâQX¸pD›§Íá£ÿï^úº+ÆâÖ­T\½šàÉüUT”ah¨°°Ð£‡|VEòx|œ9‹nàúõTXYécúô~˜6ÍŸn˜t>”Œ$„EW\\-NP6OVff– ?¿Bü:“nâ*JQóokkX[ÀÌL÷µ›žB!’TUU'N¼ «‹ž.L•–Ö&­¬ ž©ìÞ]2ͪeÃ0àr+ÄU ¢ï*-­™™%âÁuDꉒ•öö&â KªÈc×ãÇ ø÷ß8;+W’ ®®Š#Üðæ›ž>Ü“RÍAPÐ&(++A x~ªD]]³fàë¯ßjót «àåµú…Ï«©© _?üùçl¸»¯Dc#ÿ™×¨ª*CYY¹Ý£o³-;»¡¡7…’’ æŠY³`ÈÔj«ó¢d$!„tfõõO%*Ÿ$+³²JÄjj*03Ó''­¬ `e¥/þßÜ\ªªŠ{AG!„¢ ÇÌÌbp8%Í’jE(,$¡¢¢ ++ýfO’ŽVV4ðÛs rsËÄMÕ9a’2#£YY%âf©ZèÞÝvvÆOõSm“n,ŠÎ¥´´ÿüó§N=Ä©ÐÐ%&½0|¸ë3£.“WwíZ2¦MÛ†@ðœâHee%L˜àƒ-[¦·yšUUupqùü¹Ï)))A_¿ .]Z›7S1þ~¼(M£¤¤†a0r¤;¶oŸ)³ËÏàâÅìÛw—.%ÂØXÓ§ûcÚ4¹ª<'RCÉHB!/VPP‰œœRdg—"7· ÙÙ¿sr„×Õñ/›'+ml `i©++áÿzt1H!ä¹ «‘QÔÔň01–™YÜ¢Iµh7QÅÞ“*>cØØÒ1F‚ø|²³K[TRfe —MVV©¸¢²KuØÚ6ûµ®0‚µ5%¥©´´gÎÄàäɇ¸q#jjÂÄ䨱ž1ºޑ€³gcñÁ{š’‘ϦLœpøðÇ횦…ÅgÏ}\II ÎÃàÁ.˜;w/Ξyaqeœ;·Tæ²)(¨@hè-4GÉHB!¯®¨¨ª)9)LPŠ—ÙÙ¿kkï ›šêŠ•OWVZZêÓ !„((>_€Üܲ¦$ã“„#‡#üûñcá±B]]UœÌýØÚR…£ äçWˆ[Rˆ–©0YY‚²2aóxee%XXèµHR>IVBW—šKJYY Μ‰Å©Sqýz ”••0h Ýèccª`}UGŽÜŧŸ|n•bæ¸xqY»¦×½ûÿÄ­ŽDTT”1oÞ¬\„††F¸¹})>~šŠŠ2†ÁG Åÿþ7ªíš¿´ ®]KÆþý7pþ|˜6ÍŸ’ݤ=(I!Dvñxü¦ädrrJÁåV 7· yyåâÄ¥¨?1ÐÒÒ'*…U•º°²2€……nSµ¥Ì4i!„YSPP‰ìla’Q” ÊÎ&¹Ü qU›¶¶†8A$ªhkþ7ðK^Eó®_D‰îæ}U‹úªTWWmÑÕ‹¨¢RÔO55K~–@ÀàÁƒ,œ=‹sç⑜œM è‚¡C{`Äwè%¾ýö$¶o¿Ôb„íÔÔ íêŸ3 à{¤§ož†I“úvgѳçJ”—?©œTQQ†……¶n¾}»Kè“´´gÏ5|õÕ ðù0 ƒðð0Àñ™×ÅÄdãС;ˆˆˆFUU† sÅ´iþ6Ì•ºÐ ¯‚’‘„BäÛãÇ ÈÎ.E^ž°¢R”¨ÌÍþŸ›[&hŒŒ´an®33]XXèÁÔTú03Ó™™0iÙ­›&‹ŸˆB¤£ªªNÜŒúÉoQò±XÜ—™šš ,-õÅIž–¿ ©º‘t8€AAAESr¼Tœ$%+¹Ürñ€]º¨‹×WQ‚ÒÖÖ°)y©OýUÈÊ*Á… pñbnÜHC]îî:ÔC‡ö@Ÿ>T5ù4†a°|y8¼%NHÞ¸ñe»úD|ã_“ UUyaÛ¶âçnÝJÃĉ[<©†œ3g>ÿ|ŒTFÌ®­mÀÒ¥‡pâÄ=qÅ§šš ¦NõÃúõoÊËkqôè]\LMu`m-L26¯n´±1„¹¹n«Íô‘5ÂA’š÷M-Jºge•¢°°RÜ矶¶†8I)êŸZø[ø¿©©ËŸ¦cÕ×7âÖ­4œ?‹ÀáCO¯+œ0p 3t¦AHšðù„„À‰÷ÿüó¼½mÚüþ‰·áÖ­TXYéãâÅåÐÖÖ?·fÍqüñǨ¨¨ÀÜ\›7O‡¿¿ƒÄ?¤¥böì]àpŠŸµ[O¯+6mš†#Gîâßã ¦¦‚qã¼1mšŸTúª$%# !„@x÷7?¿¢)QY¼¼ äçW   ¹¹ÂÇš÷‰¦¦¦cãn°°6UX  +/ÍÌt©Y¸œ™2e Û!(”dz‚Â)(¨xnŸYY¥ÈÏÒ”º[7ÍaÂߢä£í›H§ÒÐÐ(H/;»T|sR”¼,(¨o;¢fàÂ$¥0A)j.XO‘«9œb\º”€Ë—“pãF*jjêamm€1h3 p‚¡¡6Ûa>×æÍ›)Õy0Œââ QQ¡W×R>~ù›š\¿n †<= Ñ­¯Ås‘‘–sójØÙUBEE2iš€€,\¸Püÿ?ÿ<ħŸDCü¼K þþööÅ›ozBKKã¯#ä•Q2’Bi«úúFp¹ÂªÊÜ\aU%—[Žüü äç +.®jÑñ¸¡¡6LLºÁÌLÆÆÝ`n®cãnâêJ33áHá4ê lU»¾ýöÛ,G"ßÂÃÃà™ÑGIëš7E%JDIQµ×ÓM©›BܼïF}}jJMH[ñx|äçW´ØÖš®—›û¤ÏJe˜™é6ue` ®¬öQ­++}©4«eCc£÷îqpíZ2®]KÁ½{ ÜÜ,0p 3úõs„ŸŸ½Ìto3}útÏwï½X=ôGqW·Åb Ò®]ó9ÆàZ"ŒÀ›UQQ£ÒRÇ™ðÒq&¬¬:çþjUTœôX¹1,,蜠òlHÙ`öìÙ]6[h§©Rèj#;ÆFÖ×7zTTµ†Œ­CCËʪÝÿ?˜ÜcëÐÖ9ìúô‰Íʉ Ð…TUr_T(*:¡ÒÒ*•–:TTt\¥¥•–ž½Ø`0d³…(*Ê¢ÈH‹;¸týí -­ÖNÿpüx­>ÿük|­M›jß¾RIÒ AQºýöJNî§#bi¹¢íGE=.IºçžázöÙ‰êÝ»íES¼FvÓ§OWU•Yß~­êê†6†eŸïí·ÑwÄ^ÃÞá·ò |Àlö;S)Ñöô¦¦UTÔèØ±³¡eyyµŽ«VYYµöí;¦²2WhyîÕîÀ@³l6WXÙ£G°z÷SÏž!²ÙBd³¹BË^½\Cǯ×jK»ÝÁj]Lgÿ7«®®Wqñq¹æ\R®ðñÜŠç@÷ÐÍ!CnÒ]w õ­Ö¾Íb ’Ťøøè ¶·VW–”T©´´J%%®…õJK«ôÅGµví—*/¯qËM&ã™ÅóÂeqÿ´†–‘‘®i^|)""XYY ÊÊJä d7oþFUPðµ–-û§ššZÔ»w˜ûjĈ~>üf ÖGæ6·]ZZåþûƒvêïß­Ù³ÇëG?Jë’U¥Þæt:uäH¾þº»¤S—ýü·Þúœ0×ÔõyöÀuÂd2ºÃiKss‹**Nêøñ“gª,Oª¬¬Zåå5ª¨¨ÑþýÇ´iÓA•—רªÊóKiHHà™ªÊ÷o«õìß®3D=z„t©Iû'Mz]uu§õÒKßWZÚ­¾îÚ°aÃ^Íž½Rݺùë_ÿú¥ÏúQ^^s¦ªélÈxnèX]}v¡‚ˆˆ`wUcJJ?õé“䱨EG Sp}0 îQ [¹©©Å=ÅKII•û§¸ø„6m:xf ˜³=üýMgª+ÃÜ¡ek¥eëðp‹Å{ŸEKÆ¢ñã‡H’N:­/¾8¢ÂÂoµ}û·Z¼x½ÊÊjd6ûiР(%%õUb¢ë§_?«Ç¶vî,’Á 9®Ñ$Ízá…¿éOú—~ó›û”žÎq½-ï½÷…jjÌ2™œºë®ÛTUuÊã¢uCC“N:íñœêê:9N•–:tà@™œNçyCÊŽB ÀuÀÏÏè>É4(ªÍÇž>Ý¤Š Whyü¸+´´Û«UYyRv{µvî<ªòòÙíÕª«óü¢¬=º»Ûl!Šˆè®=\·{ö ñh7}÷%öСrIRNÎÝrKo=öØ8M˜0¬Ó{»Q47·híÚ/õòË×¾}Ç®ùþšTRâª`,.®rÏùÖz¢_\|½8Œke¨{Ètzú w•cŸ>®ßAA×Ç:“É讀¼˜Ó§›Î|nU¹?ÓZ‡ïÞ]¬’’* 'ݺùÿÛ¼•áç ¿V«%ùkäÈó*Ðö퇵cǷڱ㰖/ÿ\§O7)""ØL&%ÅèÍ77É`0xL÷ÑÒÒ¢cÇš>}‰22ë¹çîULLÏkÒ÷®nâÄázûm‡$iéÒ\ßv¸ÂHn0­•mì´:uê´ìv×q×ÏIUVžÔñ㵪¬¬Ñ¾}Çtüxí™Ûžó[ õèìVZ­!ŠˆpÝ׳gkxyö1uÞétÊd2ª©ÉUpà€]<ò¦æÏO?þq†¾ÿýï\·ÃÓ;»††&­\¹Y¯½ö‘JK:÷ŸÜd2^q%FkUckEѹ‹Â””œð¨& 4+::üÌâJIé¯>}"Μ˜»NÎYá@gäïoRLLÏ6C¸ÚÚ÷ç_ëp×<–íØñ­ŠŠNx\l TïÞ–3#1B~fˆ¸Å½˜žÍÒ!ÇèÖêñ‰‡Kr…«»wkûöÃ*,<¢+>×o~óºu3{|§hÕZÝ÷é§û4fÌ zä‘;õÓŸf^rØ7€Î…oYࢂ‚üÕ¯Ÿõ¼áSât:UYY«ãÇOª²²V5î¡ãÇת¼¼F{ö”ºƒËãÇk=*ŒFƒGUå¿WYZ­ÝÕ£Gwû.¦²²ÖDJrŸÐ”–:4oÞ;Z¸ð}ýçÞ©ÜÜQ ívEïÍÁƒõÏþS¹¹¹WôüΪ¶¶V¯¼òŠ~ùËŽ.]]]§eËþ¥Å‹×«ºº^N§ë¿™s׸ijjQ:¡kÓßIDATee­zöôü·m«ª±uXukU£$Ùl!î°1%¥Ÿnº)éÌm‹¢¢ÂÏÛ>\O‚ƒ×[qq½/ú˜ªªS*-u}žÚíÕ:vÌ¡’’*••UkçÎ";æð˜ÖÅlö“Õ¢¨¨põîíZ ßÔ€OY­!í^U¸©©Å#˜,/¯vß®¬<©òòíÞ]ì^ÄçRš›[TW×¢ÿþïÏ´té§š:5Y&SøÕ¾¬.aݺuš5kÖ5݇ɮٳW*/o« ƒššÚwbùÖ[ê×Ïz^UcëÜfT5€wš/9:¢¥ÅyfžiÇ™êJ‡ìv×–ÅÅ'´cÇ·*)9¡“'ÜÏñ÷7)22L½z…ùíZ5¼W¯PEFZ´¿Ý½xM[ ׅɦ&×N©°0\ùù;”Ø!ïÁµtäÈ-X°@·ÞÊb<¸ñ0ƒ;èL&£l¶ ©Q£*;;Q?øÁhýüçßÕ /LÕÿüÏ”Ÿÿc}öÙ“š?ÿÞv/TÓÔäªÖ[¹r³¬Ö´lÙ8`o×s[ZZô“ŸüD¡¡¡²Ùlzþùç%I•••ÊÈÈÐK/½¤¨¨(Y­VýñÔÏ~ö3Y­VEFFjåÊ•îí|ôÑGŠ—¿¿¿µmÛ6wÛ† 4lØ0èÖ[oÕ»ï¾ë±åË—kÀ€ Vnn®š›]¡ßSO=%«Õª€€¥§§«¨¨H’4mÚ4•••iÚ´iÚ¸qãE_ÛþðõíÛWÁÁÁzðÁÕÒÒvEc«ìZ¶ì€¬Ö´råf57·´;ˆôó3ê™g&êý÷×Ò¥¹zöÙl=ôÐÿÑw¿;TÆõ!ˆ€NÆht­žÐGãÆ Qnî(Í›¥—_ÎѪU3µaÃ\íßÿ‚\¨O?ý…Þ~û-ZtŸrrR­úúFmÝzHÿõ_ŸèÑGÿŸ&N|U?ÿùªK‘.57·(,,P?œ¦Ûo¯ÔwT´;ˆì¨cøÊ•+£nݺ);;[ÇÙ ¢»víÒ¨Q£¨¸¸8­X±B’ôàƒêÈ‘#š1c†þö·¿]´Wz,:;ÂHpÝ))©ºdi2ù¹'ãïÕ+T÷Þ›¨ššMÊÊê£ØØ^íÚ϶mÛd6›uìØ1­^½Z .Ô_þò566ê“O>QUU•Š‹‹õÜsÏé‡?ü¡¬V«ÊÊÊ4{öl=ýôÓ’¤¢¢"Mš4I ,ÃáÐäÉ“5eÊ9NÙívÝsÏ=züñÇU]]­… *''GûöíScc£6nܨÏ>ûL{öìÑîÝ»õî»ïjýúõúðÃõÆo¨  @ Õ‚ $IK–,QÏž=µdÉ¥¦¦^ðu577këÖ­:pà€vîÜ©5kÖèÓO?m×{ÛKYY}TS³I÷Þ›¨^½B%¹†ñ›L~m>×ÏϨ’’ªvíÐuù+6¶—î¸#VS§&ëÇ?ÎЂ“ôÆ?Ôûï?®ÂÂguèÐ"íØñ¬FŒ8 ‘ izÅá¨×Ò¥TPÐC‡Ÿ7­ËÅtÄ1üË/¿Tnn®^zé%8qBiiiZ»v­$×¼ãÇWNNއ/^¬™3gjÓ¦Mzùå—­×^{McÇŽ½`ÿ®æX tv„‘àºS^^ã±8Žäš|¿5|¼ùæM›–¢W_ÍÑ֭Ϩ°ðWzýõÿÐÉ“[d³¶{?‹E/¼ð‚‚‚‚tÇwhÖ¬Y––Í;WƒA2™Lš3gŽûvMkÄU«V)--MÙÙÙêÖ­›žxâ Íœ9SuuuÊÏÏ×ðáÕ››«€€Mœ8QYYYZµj•$éôéÓzöÙgåïï¯~ýú)!!A‡Cõõõ’¤††…„„hŊÅ"£Ñ(‹Å"³ùâ üú׿–¿¿¿  øøxJK±Ùuòä½þú¨°ðWÚºõ½újަMKÑÍ7GHr…“f³g8étº†ûn<&“Q½{‡éµ×rÚý×Ág÷MM}ùåÑv=·#Žá+V¬Ð¤I“4iÒ$ê±ÇÓСC%Ik×®Udd¤}ôQèÎ;ïTnn®òòò&£Ñ¨°°0\´Ws,:3æŒ×;ž™üÞ £Q8°—FŽSjj}ç;:l¸ï€<½!C†èã?vß–ä Þd2™Ü·[>|XqqqîÛf³YsçΕ䪚<·M’n¹å=zöD+22Òýwëv'L˜ õë×käÈ‘²X,ÊÌÌÔ¼yód±XÚõºüüüdµž#ìÜþ^‰èèpMž>Þc»ƒ–ä:¾ïÝ»W111º:eeeµ«},:ÂHpÝIHè£ÔÔºýöJIé¯ÐÐöW;^ŽŠŠ ÛeeeŠˆˆ¸¬m„„„¨¬¬Ìã¾Õ«WkìØ± ÕîÝ»=Ú*++ÖöÊßN§S/¾ø¢^|ñEíØ±C¯¾úª&Ož¬;v\Vß®•ž=»ë{ߦï}o˜$©ºº^[¶|£‚‚ƒ:uê´{ð%»ÝUýçšÞÃ¨ÆÆf˜4|x_«ÔÔJJê«ÀÀ‹W÷·GGÃÃÃÃÏ;†·n744T£GÖºuëÜmuuu„Š€¦ ®CÏ??EO?}22_³ RrU=´Î USS£%K–´»â¡Uff¦Þ{ï=÷ÉÌæÍ›uÿý÷ËÏÏO™™™úÇ?þ¡o¾ùF’d·ÛõÎ;ï(##£Ím.\¸Piii2™LJIIÑŒ3TRRrÑÇçççŸzzShh 22ëé§ïÑóÏOñY?¾g·WK’ÒÒnÑܹYúë_ªýû_ÐêÕ³4gÎx5ðªƒH©cŽácÇŽÕÊ•+UZZ*IÚ¹s§>ûì3IRFF†6nܨ={öH’N:¥¤¤$­Y³æ‚Ûòõ±ð&ÂH€+”ššªÙ³gk̘1Š‹‹Sß¾}õðÃ_Ö6ÒÓÓ•““£øøxeddhܸqZ´h‘ºwï®Ûn»MsæÌQRR’ƧøøxM™2EwÝuW›Û|àtôèQ%$$(##C÷ÝwŸæÏŸïn·Ùlš5k–¶oß.Izì±Ç”ŸŸùolòä**zIË—ÿHÛ||o)33Nååå>ë‡ÕjõÙ¾ö Œ]žÃáО={|¶ÿÔT› ‹dµ6ꫯ¾òY?ÒÒÒ|¶o =#ÀuÃWaÜÈ‘Mjj Qfæ>Ù¿Ýn÷i ´sF\%“æÎÍòu7€N0 ùûº @§G À+#xa$¯ Œà„‘¼‚0 “y衇tèÐ!_wèp„‘̺uëäp8|Ý  ÃF€ÒG}¤øøxùûû+11QÛ¶ms·½õÖ[8p L&“"##µhÑ"wÛSO=%«Õª€€¥§§«¨¨¨]m»víÒ¨Q£¨¸¸8­X±B’TVV¦ñãÇëÏþ³,‹†ª²²2M›6M7nôÂ;xa$¸áiÒ¤IZ°`‡&Ož¬)S¦Èétª¦¦F>ø ~ûÛߪ¶¶V«V­Ò/~ñ •——ëÃ?Ôo¼¡‚‚UTT(44T ,¤6Ûjkk5~üxåääÈáphñâÅš9s¦6mÚ¤Ó§OkãÆÊÏÏ×| ?þX={öÔ’%K”ššêË· èp&_wÀÛV­Z¥´´4eggK’žxâ ™L&ÕÕÕÉßß_›6mRbb¢$©ÿþ2›Ír8ª¯¯—$544($$D+V¬Pcc£$µÙ¶víZEFFêÑG•$ÝyçÊÍÍU^^žæÌ™£ºº:ýîw¿STT”$Éh4Êb±Èl6{ïM¼€0Üp>¬¸¸8÷m³Ù¬¹sçºooß¾]O>ù¤<¨ˆˆµ´´H’&L˜ õë×käÈ‘²X,ÊÌÌÔ¼yód±XÚl;|ø°öîÝ«˜˜÷>êêꔕ•%É>¶‘ÀõŒaÚà†¢ªª*ûV¯^-‡Ã¡üü|Í›7OO=õ”öï߯­[·*((H’ät:õâ‹/ª²²Ryyyª¯¯×äÉ“/٪ѣGëðáÃ?¿ÿýï%IƒÁ‹¯ðÂHpÃÉÌÌÔ{ï½§²²2IÒæÍ›uÿý÷ËÏÏOEEExõ€ï0LÜpÒÓÓ•““£øøx 6L[·nÕ¢E‹Ô½{wMœ8QóçÏט1cäïï/³Ù¬þýûkΜ9zýõ×µtéR%$$Èf³iÛ¶mî•¶xà‹¶ÅÆÆjþüùJMMUrr²öîÝ«‘#GjÚ´iîÀò\6›M³fÍÒ+¯¼¢¤¤$¯¾7Àµdp:N_wàjØívíÙ³Giii—õ¼èСC4húôé㾿ººZ[¶l‘ÍfSBB‚Ž=ªo¾ùFcÆŒQCCƒ¶lÙ¢úúz 6L6›Íý¼¶Ú$©¸¸X_}õ•¢££Ñ~•——«°°PÉÉÉ ¿f¯ð²m„‘ Ë»Ñøýõ£ËØÆœ‘¼‚0€WFð ÂH^A À+#xa$¯ Œà„‘¼Âäët” 6øº Ú@ º¼°°0ÅÇÇûº.0ty ôu7\sFð ÂH^A À+þ?$ñ•]œß5&IEND®B`‚bm3.7.0/doc/html/a00191.map0000644000175000017500000000027211365042645013242 0ustar tlktlk bm3.7.0/doc/html/a00233.png0000644000175000017500000000643211365042647013254 0ustar tlktlk‰PNG  IHDRý(5Æü`bKGDÿÿÿ ½§“ ÏIDATxœí{LSçÇ¿åV•IV® p‘‚ÌÑMȘf]º‰ »eàıP’9ð‚âæ2ó2CÒÁFÜH¸NV‹ÈœRH+8.Cg¹´Ïïà  -”í7û~’þñÞžó}Ïyžóž÷=—òˆˆÀ`0Ì‹[ƒÁøgaAÏ`˜,è 3ÃJ_AAAÁ?©ƒÁ`LÖÉãé[Èãñxÿˆ(ƒ1}H$H¥R<½#=H¥RH$’iÅ`0¦‡7ÞxcÌ|6§g0Ì ô †™Á‚žÁ03XÐ3f zÃÌ`AÏ`˜ãÞ²3”ÆÆFTTT !!ÁæþïèééÁ±cÇššjR»R©ÍÍÍc–-\¸b±xB'OžD[[—¶°°€»»;^yå.¿¿¿yyy¨®®†F£H$Âúõëagg‡ÂÂB âµ×^ãê—••¡¾¾III\Þï¿ÿŽÂÂB|ôÑG8þŒÒÒR®]cc#233ÀÙhmmE@@rrr  1oÞ<äååÁÇǵµµ¸yó&¶oß®c733ÉÉÉ:'”üü|äååaçÎØ°a‚¦¦&øûûãÚµk÷]¥RA$á믿ÆüùóñôÓO#==kÖ¬Áðóbéæã?óØ¥¥¥MYçtbŒ/›ÔïIH*•ê+Öá‡~ àà`ƒêNwww’Ëåÿ»†²iÓ&Ú´i“Ñí‚‚‚èóÏ?×É{øð! …B:zô(…††ÒºuëhhhH§Þ¶mÛhþüùôóÏ?jkk#"¢ÐŒ3È××—Nœ8ÁÕŠŠ¢ÄÄD²±±¡‹/êØzçwhÆ 뎉‰¡×_´Z-—wçβ··§3gΤ[­V‘­­-•——ëÔQ«Õ&Ñ9ãs“ñO‰DB‰dT¾ÉæôZ­III°³³ƒ““vïÞ èîîFTTrrràææ¡Pˆ“'ObÛ¶m …puuE~~>g';;ñññc¦Åb1::: ‹qéÒ%£mçååÁÛÛVVVpuuEvvö˜v;::ÜÜ\ØÛÛ£¼¼111€³gÏ"..À£wÞ|óMnt‹þþ~íeØ1c Õjqùòe\¹rGŽѹl€¬¬, àÖ­[øå—_.\€¯¯/$ JKK<:¾ÕÕÕ ÃÀÀz{{ul¥¦¦"11Ñ }*• ÅÅÅØ»w¯ÎãÞÎÎÎ8~ü8ìíí Ò}æÌ½Û2Z§!Çi<ÿ|Üo®_¿Žôôt…Bðù|DFFB¥Rís€áþ9eô%`äHÏãñhëÖ­ôàÁºté *(( ööv²°° ;vV«¥Ã‡Ú³giµZÚ·oy{{s¶Îž=K‡3ÝÓÓC®®®T^^NFÙîíí%>ŸO………¤V«éâÅ‹daaA£ì*•Jš9s&ÅÅÅQee%ݼy“lmm‰ˆH£ÑPxx8eggÓ;wÈÕÕUïø?þ ””zöÙg'܇Sé322H¡PB¡ 7nСC‡hîܹôçŸÒgŸ}F!!!zÛK$JNN¦˜˜Ú²e %''Sjj*ÕÔÔƒƒ ÑÕ«W‰ÇãQww7mÞ¼™¬­­iíÚµtìØ1jjj2Jsaa!¹»»[ÇPÝDcôDd´ÎÓ§OSPP:uŠ»Šxœñüóq¿ùþûïÉÍÍ õööRll,½ýöÛD4Ú—ñOCÑ7Ò›,èçÌ™£#(--ââ⨽½P__544•• Ñ•+WÈÙÙÙàŽŒ¼Ì1ƶZ­&™LÆÙQ*•ÄçóI¡PŒ²«T* ݾ}›ˆˆš››¹ '"jjj"¡PH+V¬ ¬¬,}Z­–JJJèå—_&:pàuwwOد©½­­-9::’££# @_|ñ}òÉ'­·ý»ï¾K7n¤ƒÒ²eˈˆÈ××—~üñGÒjµ$ ©²²’Ž9B\ËÊÊèƒ> âñxDuuuiÎÍÍ%Ÿq몛HÐOFçåË—iýúõ4wî\Ú¾};µ¶¶Ô'¢Ñ~STTDnnnT__ODD}}}ÔÓÓÃÕésÆø§¡Lûå½——¬­­¹ôâÅ‹ÑÞÞÎ¥mmm>µµµHIIáò+**àçç‡ãÇcË–-¸~ý:¶nÝ ‡)÷q<öìÙƒ®®.tuuáîÝ»(//GRR”J%\]]ÑÚÚª·­R©„‹‹ "##!—ËÑÐЀ––¼ð àñxX¹r%JKKQUU…ÈÈH´Z-"##‘““ƒºº:477ÃÅű±±ãNs†qvvF{{û˜u+++ñí·ß¬[“ÕŒÜÜ\ÈårÌž=xõÕW'ìÓ0#ýfÍš5X·nžþyxzz"99===c¶3Ö?§‚É‚¾««K'ÝÑÑ1íÎn EEEHKKCzz:PSSƒY³fé­?ÞÉH¥Rá›o¾Á3Ï<ƒýû÷sùÖÖÖàóùèììÄ_ý…¡¡!“öÁP"""`gg‡ÆÆFDEE¡¡¡2™lT½¶¶6œ?/½ôD"ìíí±k×.„……ÏçV­Z…sçΡ²²‘‘‘(**‚H$Ò±ãé鉬¬,´´´ ¯¯oB}!!!@YYÙ¨²Ý»wã§Ÿ~2X·>¦ªS£Ñ€ˆ`ee…§žzjÂ> 3Òoˆ@ww7  V«±víZ½zñÏ©`² oiiAqq1àþýû8zôè¸E2™Œ[<+=YT*-Z„°°0XZZ¢ªªjÔ"!’’‚üü|ìß¿õõõr¹™™™8}ú4¼½½‘‘‘Û·oOZwQQêêêŒn7sæL ÂÃÃï½÷Äb1~ûí7®\©T"..«V­âFõˆˆäååaåÊ•\½èèhÈd2477#<<aaa¸uëN:¥³O¤R)D"fÏž=¡n;;;¼ÿþûHLL„B¡àò‹‹‹QRR‚7¬{˜¾¾>ܽ{—û¤óq.\¸±XŒÐÐP***››Ë•ãŸ{÷îEDD¬¬¬ðÜsÏ!>>^çèHL埡o>#çô!!!´páB 'Z½z5·Ø6r3 …Bg~,—ËuæôÉÉÉ:·ÿO/Y²„–/_N¿þú«Q¶[[[ÉÉɉÂÃÃ)**ŠV¯^M^^^;Ê®R©$KKKÎÎÈ9ý§Ÿ~J¡¡¡¤ÑhˆˆèàÁƒ´téRna$mmm´sçNòóó›pê›Ó{zzRFF†Þvcݲ#zt»kØÞÐÐ}øá‡ÄçóÉÏÏÉÆÆ†èï¿ÿæÚ /„^½zuÔ6‚‚‚¸tQQ9::’‡‡“««+ùøøpsWCt÷÷÷Ó[o½E666H‹-¢Y³fqkÆè¶µµ%:?GGGƒtޤ  €ÂÃé  `ÌãI4¾>î7J¥’<<<Èßߟ^|ñEôÕW_qå#}Îÿ4}súq¿œcìG4Ôj5ªªª °téÒ)ŸÆ¢³³r¹Ë–-Ü9sŒjÛÛÛ‹êêj899A$A©T¢©© +V¬×®V«EOO'¥Y£ÑŒºíd(­­­ÈÏÏ7ÉÓ€÷îÝCmm-4 /^ ''§IÛêïï‡L&Coo/ÜÜÜàïï¯sik¨îÎÎN\»v –––X²d‰Î“v¦Ð=‘ΑLå8·ýêêj¨ÕjèhÜç&ëŸúþˆÆã_Î1iÐ3LÏ®]» ‘HàååõoK1Šÿªî' }Ao’gïÓÇŽ;þm “⿪Û`oÙ1f zÃÌ`AÏ`˜,è 3ƒ=ƒaf° g0Ì ô †™Á‚žÁ03ØX2O0Fýåwß}7í‚ Æôâáá1*OïHÏ`0žLØœžÁ03XÐ3f zÃÌøâëç䘸IEND®B`‚bm3.7.0/doc/html/functions_func_0x67.html0000644000175000017500000002572011365042644016431 0ustar tlktlk BitMagic: Data Fields - Functions
 

- g -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00099_source.html0000644000175000017500000010003211365042630015005 0ustar tlktlk BitMagic: bmsse_util.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00137.md50000644000175000017500000000004011365042632013137 0ustar tlktlk1a2a41088a4985ac0f47cceecb87344ebm3.7.0/doc/html/a00235.md50000644000175000017500000000004011365042647013144 0ustar tlktlk22c197ae4a6b04f70b38cf7bbd134975bm3.7.0/doc/html/a00134.png0000644000175000017500000001122011365042632013235 0ustar tlktlk‰PNG  IHDRusŸbÑbKGDÿÿÿ ½§“EIDATxœí}TUUÞÇ?÷ „ðBSÁLz”TP²2]iІša*äÂQ†ÖÌ?µªÇ)[“c†:2ê¡c-¨—DMÍ­F䯫À¹ çùƒñry¹p_á|ÖºkyÎ=wÿ¾{óuŸ}öÞgo‰ "": 5µËC4ˆÎˆ¦Ñ¹©`fÄÇÇ €øéÇ'>>Þ(#³«imj EPPÑb‰mM#¢3¢iDtF4ˆÎˆ¦ÑÑ4":cñ¦Q*•¤§§4†Z­&!!¡Ë¿õEKK ñññzMÓX¼iJKKIKK3hŒ¦¦&>ÜåßúB­V§×4 ‰Å›FÄø˜m°.‚ÀÞ½{IOOÇÊÊŠ•+W²víZøÓŸþ„ŸŸÇŽ£µµ•ˆˆJJJÈÈÈ@&“É‚ ÈÌÌ$..ŽŠŠ  áÅ_ì1öåË—Ù»w/¥¥¥8;;¿¿?/^dïÞ½(•J&NœÈk¯½ÆäÉ“»MëóÏ?çèÑ£¨T*‚‚‚øãÿˆD"Ñ_Aé‰AQÓ\¿~™LFrr2þóŸùôÓOÉÉÉ¡µµ•o¿ý–;wîpâÄ 6lØÀ{g££#'Ož$$$Ds[P«ÕìÚµ‹-[¶žžÎ[o½Å¨¯¯ï6n]]¯¿þ:!!!|ñÅDDD°cÇnݺEuu5o¾ù&›6mâÔ©SÌ›7·Þz ¡›9oíííO\\yyy\¾|Ù å5PEM3|øpÂÃÑËåøøø°|ùr233ñññABCC‘H$øúú"“ÉXµj•æøøñã( bbbðòòÀÙÙ¹\NSSVVVZãæççóè£òÌ3ÏàïÙÙÙØØØ0cÆ xñÅ‘ÉdÜ»wkkk­émܸ¹\Îøñãñðð ©©IßE¥…iÆ\þKV&NœÈ¥K—4Ç666H$ 2™Lsü…BÁõë×9pàJ¥‡nk…TWW3a„Nç&L˜@UUVVV¸ººjÎËårBCC»MK*•âèè¨96ÇÛÒÅíI¥Ru:®¯¯ÇÞÞ^§4òóó9tè/½ôŸ|ò ±±±ÝÖ°µµí»¡¡;;;lmm¹sçN§ïòòò̶öÐ…AašŠŠ €Ž¶IZZ~~~:¥Q]]»»;Ó§OG*•ríÚ5Ôju¿yòÉ'¹páååå@G'77___|}}9s挦MTTTÄÎ;‘J;Šú(«V­"<<œÇ{Œ7nĬY³X¸p!aaaxzzR\\Ì«¯¾Ê°aÃøè£xî¹ç˜8qâÀ ÀÈH„ÞnÜF&!!µk×ê< ëÞ½{\»váÇk³º¢V«)**bĈüæ7¿¡ªªŠòòrüñWQQAYYãÆëÔŽ(++£¢¢777ÆŽÛ/]}!((ˆøøxÖ¬Yc°5 €••O<ñÄ€Ò°µµÅ××Wsý¡ÇǸqã´~çêêÚÅH–ΠhÓˆÑ4":#šFDgDÓˆèŒhM#¢3¢iDtF4ˆÎˆ¦Ñ³í6æ»É°µNKËO´·÷o$Z*µÃÆÆµúŠž•™f7ödª¥FJKï°{÷U6nœŒÏÈ~¥qõj-‡]':Ú7·ázVØ;ÆZjÄìLc*V­ÚÇÝ»­¤¦nP:K—~À°aV?¾EOÊ̱Mdg“Ÿÿ¯¿¾dÀi½ñÆRòóo›{]Ê̱¦ž}v7NNpøðF½¤·~ýAjk›8uJû<KgÈ×4™™E\¹RFtô"½¥ý4—.ý99ƒ³¶ò¦ùðïX¸p Ó§Oèýâ>2c†AA±gÏ—zKӜҦÉÏ¿Á7ßÜdûvýÕ2ˆŠZĹsÿ¡ à'½§mj†t›&$$©Tʱc†yÒ ‰A¡“aôMÅ­i •|ýõlݺÐ`1"#’“sÂB¥Áb˜‚!kš?ÎÂÛÛ…¹s',Æüù“™2Å™ƒs à IÓ(•uüûß— 4h‰DBDD ))—P*ë ˘ IÓ:”‹“Ó#,[6Óà±–-›ÉèÑöÄÅå<–±r¦ihhæ_ÿ*à•Wæ"—>û …ŒM›æ–††fƒÇ3CÎ4ññg‘ɤ¬[÷[£Å\»ÖAˆ?k´˜†dH™æþý6ÈaíZ?ìímŒ×ÁaëÖý–¸¸<îßo3Z\C1¤L“’r‰ÚÚ;lÜ8Ïè±_ye.••*RR.õ~±™3dL#±±§Y¶l&ãÇ;öþ=ãâ2‚åË}9p §×uoÌ!cšœœë—>ßd6ožÏµkJ‹È2¦Ù·/›ùó'3mš‹É4x{»ø±±§M¦A Ó*ÉÏ¿Á–-ÆŸwü0ááóÉ͵졅!aš˜˜Lƒô•ÀÀÇðöv!6Ör7Aô¦Q*ëøüóïØ²e©¥hˆˆ$-í[‹Zô¦‰=“Ó#,]:ÃÔR4<ÿüLœœ±ØÌAmš††fÏh”!ƒ¾"—K-zhÁ|JÒÄÅå!“I mj)]X·î·ÈdRŽùÚÔRtfКæîÝVŽùš°0ììz^ØØÙYóÒKs,rhaК&1ñõõj6l˜kj)ݲiÓ<êêÔ$&ZÖæõƒÒ4÷ï·“IhèlœœL-§[œœ MLL­­í¦–Óg¥i’’¾¡²²­[ƒM-¥W"#R^^ÏgŸ]0µ”>3èLÓÚÚÎÞ½™¬^=Ë$“ºâê:‚+žäÃÿ×bj›Agš””K”•Õô-}³m[0·nÝ&5Õ2¦M *ÓÜ¿ßÆîݬ\ù?¸¹2µœ>ãá1šåË}yÿý ‹x’²HÓ45Ý¥¤¤¦Ëù„„³üüs=ÑÑO›@ÕÀxíµ§Q*ëHHè:%´¤¤†¦¦»&P¥‹4Mii-sæìdåÊÍk¯ÍÍ÷سçKÖ¯Ÿƒ«ë+Ô7·Q¬[7‡={¾¤¹ù?±re sæì¤´´ÖÄ Ál—Oë‰Û·;6ß:{ö'V¬øˆ©SÇãååÄ;wÙ¶í)«ë?QQOqüøy¢£ùá‡J¾ÿþg¤ÒŽæäÙ°È𦶶 ‰DB{{Ç´É¢¢rÒÒ¾EŽ;‡JÕóæ^æˆJ¥æøñó‚@ZÚ·ul<ÖÞ. ‘H¨­5Ÿé,²¦©©iD.—jæÜªÕ÷صë þö·tBCgˆ‡ÇhSJí•’’8ͧŸž£­­ýWÝ¿Ì#–Ë¥ÔÔ4šF ,Ò4uuMÝn ÚÚÚQð‡Í÷ß—óÙg‘ÈdæY¡¶µµõ)çÏÿ§Çë$ uuæSÓ˜giöBMÍgôËå2&OÇÑ£›ÍÖ02™”£G73yò8ärY·× ‚@Mئ55whmÕÞŸ¡PÈpqq$))ã½×_lHJŠÄÅÅ…B»qZ[ÛDÓ ”êê´U4r¹ŒQ£ìHNÞʨQÆ_Ç·¿Œ5ü¿ší´Ö8‚БgsÁ"MSUÕµQ(—K±··!9ùw8;›ÿ˜ÓÃ8;;’œü;ìím´Î2Ô–gSa‘¦y¸Q(•J±¶¶"))Ò쟖zÂÃc4II‘X[[iöï~€Ø‚ ÐØØ¢9–H$XYÉ8vìU¦Lq6¡2ý0eŠ3ÇŽ½Š••¬Óbcc‹Ù¼Îkq¦©«Sk:õ$ ryÇÈÌ™î&V¦?fÎtçèÑÍÈåRqÚÛêêÌ£ÓÒâLóëžQ©TÂÁƒaôoóvs& À‹ƒÃ4ÀÙô [œi~Ý3úÁkX´ÈÛ„j Ë¢EÞ|ðÁͱ¹ô w鮬¬¤¨¨ÈZúDAAÇ;Ð/¿ìÃÈ‘œ>}Ú q ’®®å;rdG^¹JvöYZZnDWoüº<ºF˜6mš1´èÌ÷ßßå÷¿_@X˜ŸAÒ¯¬¬¤¦¦ë\}£KùN›6‘#Ç`ggeô¿‹¶òèÖ4cÆŒ1¸ þ°|ùlƒöô··Å4º–ïþ°”òòzÆŒ1n”¶ò°¸6%vÜé sɻřFÄôˆ¦ÑÑ4":#šFDgLnšÔÔTΟ?Occ#ï¾û.uuu¼÷Þ{üøã>|¸Oi555ñ׿þÕPREþ‹ÁM³iÓ&nÞ¼Ùí÷'NœàÌ™3¨T*Þ~ûmT*‡ ¸¸˜ØØØ>ÅjlläÍ7ß°f‘ž1¸iÒÓÓQ©T:ýÆÃÃë×-{­ÝÁŒ^LóÆo0f̬­­ ¢¬¬ €Õ«WSUUÅêÕ«ÉËëØº&11† ƲeË´ª²²’¥K—jŽÛÛÛÙ¶mŒ;–wÞy§G=ÿøÇ?pwwÇÎÎŽ 6ÐÞn/Ö?ÌíÛ· &>>OOOììì £­­cªëÕ«Wñ÷÷ÇÆÆ†I“&‘@hh()))(•Jf̘Arr2ååå<ñÄÔÕõ‘È›&##ƒþóŸPSSƒƒƒ;wî`ÿþýŒ=šýû÷ãççÇwß}GXX»w瑩®ŽÀÀ@N:Õ%Íææf²³Y2õÂ… ( ***HNNf×®]$%%iÕÓÖÖÆ7ß|Ã?üÀ•+W8yò$99–¹ âýû÷ÉËË#77—¢¢" IMM%++‹¦¦&ž~úiÖ¬YƒJ¥"66–-[¶pæÌ\]]IMM ''‡ââbÒÒÒÈÊÊBFŒèÿ[¨6MKKÇ„¨»wïbooOBB‚¦&pttD*•âèèˆB¡ !!^x^x¢¢¢ðññé5†££#ï¾û.¶¶¶°uëVÍÿ*müå/ÁÊÊ OOO¦M›¦óíÑœ¸wïo¿ý6VVVLœ8‘éÓ§£R©8uêÎÎÎDFFbmmÍ‚  ãĉ,^¼˜ÌÌL Ã4›7oÖ ìfggóÜsÏ HÓ€M³dÉV®\Éœ9spwwgûöíÝV}J¥²Ë€ÛÔ©S{áéé‰B¡Ð{{{S^^®õZ™LÖi\§»÷£, gç_f$>ÈOII ÅÅÅxxxh>‰‰‰Ô××€J¥âÆäää°mÛ6)))!++Ëô¦÷ߟ۷osâÄ ZZZX±b…ÖkGŒAUUU§s}|øšªª*FŽÙуæÎKIII§ÏÇŒB¡ 88˜„„šššðòò"00#GŽÐÐЀŸßÀf Ø4»ví"00¹\άY³X¿~=?ÿü³Ök.\Hbb¢¦–¸rå ¹¹¹½Æ())Ñ´}Ù¿?‹/ %%…ÂÂÂfÃâ&//O37G­VãëëËÉ“'X¼x1{öìaÞ¼Ž½­,XÀßÿþwžyæ™.“ÖueÀ¦yùå—¹uëÓ§O'88˜U«V±cÇÍ÷cÇŽeëÖ­\¼x‘矞§žzŠ©S§ÄÒ¥K î}]“&MÂÝÝððp¢¢¢4O C ///vìØŸŸÁÁÁLš4 oooV¯^ À³Ï>‹J¥êd•J5à[ÂCTTTÙÙÙŸî‘––!77WøòË/…ÊÊÊNßUUU Bmm­æÜ•+W„¯¾úJP©TZÓkkkjjj:knn²²²„‹/ê¤MWú“S¦_VV&ddd………zKó×hÓ«—¬­­™;Wûz½cÆŒaÑ¢EÎùøøôøÔ$•J5ªóòg666™~ësÃÅÅãîaeò±'ËC4ˆÎˆ¦ÑÑ4":#šFDgDÓˆèŒhM#¢3¢iDt¦Ûák×®S‡ÙP]]m”8–R¾ÚÊ£‹illlÌö=nc`è¼[ZùjÓ*3Y“KÄbÛ4":#šFDgDÓˆèÌÿm}¬ÚÑüÕhIEND®B`‚bm3.7.0/doc/html/a00203.map0000644000175000017500000000023211365042646013231 0ustar tlktlk bm3.7.0/doc/html/a00244.png0000644000175000017500000001123011365042651013241 0ustar tlktlk‰PNG  IHDRÕuÙ\¤mbKGDÿÿÿ ½§“MIDATxœíÝ}TLùð÷43"QQm…²ÊC%´,Ë¦ÈÆÑz.‹CØÝ<¬Ý³ëd9yÞß.aí Ñ‘­Tˆ-Ií¶’ÍCŠ%ÓNÙ™5i¾¿?œ½¿¦šiFWSú¼Î™sÜ™ïý~>÷Ž·¹÷ºSÆ!„7ún€· …ŠžQ¨á™Hß ¼®ˆˆ}·@Z€­­-F¥ï6t"h«*¾[ -À××aaaúnC'mö“ ÂÂÂàëë«ï6Èâçç§ï^ SÂ3 !<£PÂ3 !<£PÂ3 !|È30ÆXFF†Ê9U@@5jT£ËšêüköìÙ¬W¯^¬¶¶V«Þóóó™­­-srrbîîîÌÄÄ„:tˆ{ÝÙÙ™3†Ý¼y“ååå1KKK6nÜ86qâDæååÅìííÙ´iÓŒ­ÁAÛu×ûwûÍÍÍ™»»;ëÚµ+Û·oŸVsj£­žSµéoþêú%Ūª*¤¥¥ÁÄÄ...o¬7¾ëTWWãúõ먪ªÂСCaiiɽVTT„ŒŒ Œ1fff(--Åõë×aii‰!C† ???Æ| 2ÖÄÄ2™ Ý»wשFýõàáÇxòä Ñ«W/­úÖÆ¿çœm훿í*T­‘D"Abb¢Úלœ0tèÐì¨õh«¡jÓ_§ˆÅb˜››«}]› ¤u¡P陹¹9&Ož¬ï6ÚÍÕ?BZ …ŠžQ¨á…ŠžQ¨á…ª¨¬T転% U±}ûy(/õÝÑB›¾£¢½D°²úrùEü÷¿Yún§EÑ/(hA§OŸÖw -æöí8r$..3à¤ïvZ”­­­¾[ÐY›ý¤jO>ù$/ÞE‡"ܽ»ÆÆ†ún‰h@çT­\YY_òÕÔÔ">þŽž;"M¡PµrçÏgr_‰8s憞;"M¡Pµrÿÿ‘_J¥¿ýöÿüS¡ÇŽHS(T­˜TZ†?þx¥Rõ´76ö¶ž:"Ú Pµb±±00Pý¯Æ""è°5£PµbgÎÜlð)¥T2ddä¡  }ü¸¯¶ˆBÕJ=}ú™™ BB¡11zèŠhƒBÕJEGß‚HÔø]#µµJœ>M‡€­…ª•Šˆ¸ššÆÿ_ž1 '§99…-ÜÑ…ªÊÊ’àñã"êov‹…ˆŽ¦CÀÖˆBÕ EE¥79¦¦¦ÿùÏ¥è†èªÍÞPû6{ù²ï¿ßff¹çbcoÃÅÅ=z˜xuûRÇŽbüýw ÞyÇD_­’FÐ µm„Í„„,€Ï›ûɺ„tøGÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðÕÆðê—ÍÒ£=ÌÌ>b:Øè½z4þ¨Kí¯'Ý´i“º—ˆÞ¸ê»RObb"RSSUžSªñãÇ¿é~iójkk„ŠÎ©á…ŠžQ¨á…ŠžQ¨áY³BõìÙ3ÄÇÇóÕ‹Þëè[ff&Ž?©Tªò|ee%Nž<ÙàÏo»²²2„‡‡·Øz|iV¨òòòÃW/z¯S×Î;!‘HZ´fhh(Ž9‚óçÏ«<_QQ£G6øs[¡Ë¾¬;¶¢¢çÎ{£ë½ tø§Æõë×QQQÑbõ¤R)îܹƒ9sæ 11±Åê¶]öeݱVVV8~üø]ïMhv¨cØ»w/>úè#øøø ,, PZZŠuëÖ!""3gÎÄôéÓqáÂ8pÓ§OÇŒ3pùòenžððp«]VWgÏž=ˆ‹‹ãÆUVVbùòå(,,<~üŸ~ú)<==±`Á•¿°éééX´h<<<°lÙ2dgg‚‚‚ —Ë„ÌÌLÀíÛ·±dÉxxx`áÂ…øí·ßr¹ëׯǥK—àíí§OŸ6ºŸjjj4îÇ„„ 4sçÎ…D"áziŠº¾4mŸ®½M¿?¡¡¡˜>}:<<<°fÍh|_&&&ÂÏÏîîî˜1cw¨V¬L&Ã7ß|£súëiÚêælŽf‡*;;B¡‘‘‘ؼy3N:…ääd¼|ù(//GDD>ùäìØ±¦¦¦ˆŠŠÂ¬Y³pøðan[[[ôïß_í²º:}úôQù¨OMM…R©„••ªªªðå—_bâĉ8wîÖ®]‹={öàÞ½{(**·ß~‹¥K—"..ãÆÃ¦M›Àúuë`bb‚uëÖaàÀÉd ĬY³pþüy,_¾ß}÷òóóQSSƒ;wî 55Û·oG=TöD"Á°dÉû1!!žžž011³³³VŸVšúÒ´}õýñÇX¾|9.^¼¨6`šÞŸ7nàÂ…  ÁÙ³gadd„'N@ƒ}YYY‰íÛ·cÅŠˆÇ¦M›pèÐ!Èåòc«««‘‘‘¡sºëiÚšælµ·)iËØØË–-ƒH$‚““|||˜˜'''0Æ0oÞ< >B¡³gÏæ–OŸ>ÍÍ3zôh•yë/««³víZ„„„@*•ÂÒÒ—/_†—— -- ݺuÃôéÓÎÎΘ`îܹ …P(066†@ €±±1D"RSSáàà€É“'ÆŒ777$%%ÁËË ÕÕÕ@÷îÝ€{⢢ðüùsx{{#$$Dí>|üø1òóó¹[ÃÆ£GbÅŠj×ÓÔWÇŽÕnŸ¡¡¡Êptt„££#JJJ‡Õ«WÃÁÁ›7oÖØ;¼÷Þ{¸uëV­Zccc¸ººbþüù066n0V,#;;‡³gÏеk×F?=›S£®ÂÂBµûáuçlJ³ÿJJJT–år9ºtéÒÜiuªãîîŽääd$''cÔ¨QÜóFFF2dÂÃÃUkÖ¬‘‘ÊËËUæLIIiô„ÚÈȨAýÒÒRtîÜ€ê?"‘b±r¹eee¨­­Õ¸]Œ1\¾|‹/Fpp0‚ƒƒ±k×. 6¬ÉC@M}é²}u)•J€P(D§N4Ž­» +W®DLL ‚‚‚ P(Ô~Ë!55¡¡¡X°`Nœ8ƒ6øälnº4í‡×³)ÍUaa!ÒÒÒ¼ºH777çÉÉÉÁ7Ô.kª3vìXüõ×_ˆŒŒÄ”)S¸u†ŽÌÌLîâAuu5–/_Ž”” >¿ÿþ;är9 ++ [·n…AÃ]âêꊛ7or—le2®^½ŠáÇ7ëè舟þK—.Err2üüüpäÈ7ºÝ™™™øçŸàíí [[[îáé鉫W¯j<ÑÔ—.Û¼ºà„U«Vq…¾þúkîuMïÏ©S§°zõj…B 0“&MR»½EEE°³³Ã!C```€{÷²Rí6þK—uiÚ¯;gSš}ø7pà@ìß¿ááá(((@ß¾}áííÒÒRæ¹téîß¿#F4º¬®têÔ nnn¸ÿ>\]ÿÿ£ž={bÉ’%X¹r% €¼¼< <~ø!ÜÝݱhÑ"ØÛÛãÁƒð÷÷çþu633Ã?ü€Ï>û ýúõÃìÙ³±lÙ2 0999˜0aFŽ©öj‘““œœœðâÅ ÄÄÄ`ýúõ8räHƒq 9rdƒO÷qãÆáûï¿Çµk×Я_¿Fk888¨í €Æí«+99‘‘‘øøã±aÃî]Û÷gÒ¤IˆÅ’%K`jjŠììlîP¶þ¾3f Ž;†€€ˆÅbˆD"X[[cÿþýغu«ÊØ®]»rsèR£îzÎÎÎj÷CSs¾.«w@{òäIøùù!))IëI îÝ»cccîôMxÝ:ÅÅÅÈÍÍ…¹¹9z÷î­òZAA akk«rb.—ËñèÑ#ôïߟû _XXˆ‚‚XYY©§kC©Tªý”h.M}©Û>¾{«©©AVV `jjʽV_VVV"++ fffèÓ§¤R)$ †ª2ÖØØeee\H´­Q=MûAÓœÚHLLÄ–-[TÎ y !íUc¡¢;*á…ŠžQ¨á…ŠžQ¨á…ŠžQ¨á…ŠžQ¨á™Ú{ÿ‚‚‚Z²BÚ¤+W®4x®A¨lmm1kÖ¬–è‡6¯±¬4¸÷ÒZDuGIEND®B`‚bm3.7.0/doc/html/inherits.html0000644000175000017500000006206211365042647014452 0ustar tlktlk BitMagic: Graphical Class Hierarchy

Graphical Class Hierarchy

Go to the textual class hierarchy


Generated on Sun Apr 25 09:37:43 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x72.html0000644000175000017500000001210011365042644016411 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/globals.html0000644000175000017500000002503711365042652014245 0ustar tlktlk BitMagic: Data Fields
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

- b -

- d -

- f -

- i -

- m -

- p -

- s -

- v -


Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00106.html0000644000175000017500000001332511365042637013431 0ustar tlktlk BitMagic: sample10.cpp File Reference

sample10.cpp File Reference

#include <iostream>
#include "bm.h"
#include "bmrandom.h"
Include dependency graph for sample10.cpp:

Go to the source code of this file.

Functions

template<class T >
void PrintContainer (T first, T last)
int main (void)

Function Documentation

template<class T >
void PrintContainer ( first,
last 
) [inline]

Definition at line 39 of file sample10.cpp.


Generated on Sun Apr 25 09:37:35 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x67.html0000644000175000017500000002407611365042652016717 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- g -

  • gap_2_bitblock() : bm
  • gap_2_dgap() : bm
  • gap_add_to_bitset() : bm
  • gap_add_to_bitset_l() : bm
  • gap_add_value() : bm
  • gap_and_to_bitset() : bm
  • gap_bfind() : bm
  • gap_bit_count() : bm
  • gap_bit_count_range() : bm
  • gap_bitset_and_any() : bm
  • gap_bitset_and_count() : bm
  • gap_bitset_or_any() : bm
  • gap_bitset_or_count() : bm
  • gap_bitset_sub_any() : bm
  • gap_bitset_sub_count() : bm
  • gap_bitset_xor_any() : bm
  • gap_bitset_xor_count() : bm
  • gap_buff_any_op() : bm
  • gap_buff_count_op() : bm
  • gap_buff_op() : bm
  • gap_calc_level() : bm
  • gap_capacity() : bm
  • gap_control_sum() : bm
  • gap_convert_to_arr() : bm
  • gap_convert_to_bitset() : bm
  • gap_convert_to_bitset_l() : bm
  • gap_convert_to_bitset_smart() : bm
  • gap_count_and() : bm
  • gap_count_or() : bm
  • gap_count_sub() : bm
  • gap_count_xor() : bm
  • gap_equiv_len : bm
  • gap_find_in_block() : bm
  • gap_free_elements() : bm
  • gap_init_range_block() : bm
  • gap_invert() : bm
  • gap_is_all_one() : bm
  • gap_is_all_zero() : bm
  • gap_length() : bm
  • gap_length_threashold : bm
  • gap_level() : bm
  • gap_levels : bm
  • gap_limit() : bm
  • gap_max_bits : bm
  • gap_max_buff_len : bm
  • gap_max_level : bm
  • gap_operation_and() : bm
  • gap_operation_any_and() : bm
  • gap_operation_any_sub() : bm
  • gap_operation_any_xor() : bm
  • gap_operation_func_type : bm
  • gap_operation_or() : bm
  • gap_operation_sub() : bm
  • gap_operation_to_bitset_func_type : bm
  • gap_operation_xor() : bm
  • gap_overhead() : bm
  • gap_set_all() : bm
  • gap_set_array() : bm
  • gap_set_value() : bm
  • gap_sub_to_bitset() : bm
  • gap_test() : bm
  • gap_word_t : bm
  • gap_xor_to_bitset() : bm
  • gapcmp() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00200.md50000644000175000017500000000004011365042645013132 0ustar tlktlke6fe64d81d6c2ae9ac7d167e2854b8c1bm3.7.0/doc/html/functions_func_0x6e.html0000644000175000017500000000747111365042644016512 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00105_source.html0000644000175000017500000002376311365042630015010 0ustar tlktlk BitMagic: sample1.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00231.md50000644000175000017500000000004011365042647013140 0ustar tlktlk3ee842dc0b33d2bdbe36872033fa6dfdbm3.7.0/doc/html/a00104.html0000644000175000017500000001612611365042636013430 0ustar tlktlk BitMagic: encoding.h File Reference

encoding.h File Reference

#include <memory.h>
#include "bmutil.h"
Include dependency graph for encoding.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::encoder
 Memory encoding. More...
class  bm::decoder_base
 Base class for all decoding functionality. More...
class  bm::decoder
 Class for decoding data from memory buffer. More...
class  bm::decoder_little_endian
 Class for decoding data from memory buffer. More...
class  bm::bit_out< TEncoder >
 Byte based writer for un-aligned bit streaming. More...
class  bm::bit_in< TDecoder >
 Byte based reader for un-aligned bit streaming. More...
class  bm::gamma_encoder< T, TBitIO >
 Functor for Elias Gamma encoding. More...
class  bm::gamma_decoder< T, TBitIO >
 Elias Gamma decoder. More...

Namespaces

namespace  bm

Typedefs

typedef decoder bm::decoder_big_endian
 Class for decoding data from memory buffer.

Generated on Sun Apr 25 09:37:34 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00246.md50000644000175000017500000000004011365042651013141 0ustar tlktlkc8a2e50e90ad72d270f2e92597b24e8cbm3.7.0/doc/html/a00251.md50000644000175000017500000000004011365042651013135 0ustar tlktlkcff12f1ed37c819e85c2e2bc17e25bccbm3.7.0/doc/html/a00252.map0000644000175000017500000000022511365042651013233 0ustar tlktlk bm3.7.0/doc/html/a00173.md50000644000175000017500000000004011365042644013142 0ustar tlktlk2ae8ec4adff3f237f70745f300778a99bm3.7.0/doc/html/a00186.map0000644000175000017500000000023511365042645013245 0ustar tlktlk bm3.7.0/doc/html/a00187.md50000644000175000017500000000004011365042645013150 0ustar tlktlkab18c8b55755340edcd4d10ed0b8a42ebm3.7.0/doc/html/a00234.png0000644000175000017500000000352011365042647013250 0ustar tlktlk‰PNG  IHDR“(úèÈ£bKGDÿÿÿ ½§“IDATxœíœ]HÓßÇß:m¹šµ$ Jœ•ÌD쪨,rb…F!aE7ÞôH`D¤  DÖQTâC>E%V³Š¥˜^ ³ÍiÖJm–ùp±÷ÿBιï¦~MûýÏëj;ç{>ï÷ÙÞÛ9û~¿Ì‹$!Ìœï¹v øï Â$ &løLlèììD}}ý\xüCì߿ߩÍ)L/_¾Djjê_1$øw™ìw›S˜¤îÞ½ëòËF왲!Â$ &lˆ0 dC„I "LÙ˜•0•——ãÕ«Wxÿþ=nÞ¼)km©š?þDVVÖŒêúô 7nܘQ‰Œ÷%‡Çùʬ„©¨¨µµµhmmE^^ž¬µ¥jZ­V\ºtiFõÛÛÛqõêÕÕ˜Èx_rxtÇÑ£GÑÞÞ>«“!–¹ÿ ?†Õjý뺲„©  ¡¡¡ðóóCRR’ÃDl6Ž;#33ÓÞWYY ­V •J…ÇãÌ™3xøð¡[=©šã©©©Att4”J%"""P^^nï{òä "##±`Álذ NãIâôéÓ8qâ„GWîÝ»‡ððpøøø $$ÙÙÙnÇL×£+­””X,¤¤¤Àh4JjX,$$$àÖ­[ „ÉdrëWNàÎ;œ¤Ù%oÞ¼¡R©dII ‡††˜››KÌÍÍeee%½¼¼xêÔ)Òh42 €EEEüðá/^ÌŠŠ  ñÊ•+T(¼}û¶¤žTM³ÙL¥RI’üòå Õj5óóó9<<̲²2ªT*¶¶¶Òl6S­V³´´”¿ÿfFFW¯^M›ÍFƒÁÀÈÈHÚl6¦¥¥qÛ¶müõë—Û×a``€J¥’¥¥¥æóçÏéííM‹ÅâàKRZýýý ¡Á`àèè¨[ ???&''³¶¶–###nç)‘×3ÓÙ³gyàÀ‡¶¨¨({˜‚‚‚8::jïKOOgrr2322¸wï^{»ÍfcHHˆGarUsü•——ÇØØX‡±ûöíãåË—™““ÃÝ»wÛÛGGG™••ÅÁÁA êt:¦¥¥Q£Ñx$’fcc£ýù/ïÞ½s¦éz”Ò"É•+W²©©É­†Ùl&vww{4GR:L3^溻»éЦÓéìµZ-|}}íÏׯ_žžttt`íÚµöv///„……y¤éªæxºººêÀºuë`6›´}}}qîÜ9¨T*€ÉdÂçÏŸŒ-Åž T*ÑØØˆ„„hµZ$''Ãf³IŽ™®Ç©hIi€··7V¬XáÑÝ1ã0Áb±8´}ÿþ}ÒÇÀØ:½dɨÕjôöö:ôõ÷÷{¤éªæxüýýŽëííE@@Ôj5~üøáÐwÿþ}û^/44ÅÅÅÈÉÉÁÉ“'ŽŒ²²2¤§§ãÂ… hkkÃëׯíátÅt=NEKJûËŌÇ‚‚û7CKK ^¼xaïïèèÀƒŒc¹~ý:víÚ½^²²2|ûö PWW“ÉäÑä\ÕO||<ª««ññãGÀׯ_QRR½^øøxTTTØ?õõõ8xð  `Ñ¢EðññÁ¡C‡óçÏ»õÔÕÕN‡­[·B¡P ®®’c¦ëq*ZR²3…5qRl6SSSÈíÛ·sÕªULLL´ï™6nÜÈ5kÖ066–Ë—/gbb¢}¿säÈ.[¶Œz½ž›6mbtt4 %õ¤jŽßäÅ‹Èøøx.]º”iiiö¾ãÇS£Ñ0..Žþþþ¼víIÚ7àhmmåÂ… Y[[+髳³“ÁÁÁŒ¥^¯gbb"µZ-÷ìÙãrÏ4]RZ$ÃÍ›7³¡¡ARÃl6S¡PHÎk"³ºÿCKK «««iµZú†††øìÙ3‡M£Åb¡Édbss3 GFFƺº:ô&«9ííí¬ªªâÛ·oúÚÚÚXUUÅÎÎN4ÝaµZY]]Íææf’cozMMÛqÓñ(¥e±XXUUž¾>4¦‚T˜¼HÇ(î¤ã,ßiÙÔÔ„;v ¸¸:%%%ÈÎΆÑhtX&'…èèèYõ6===xúô©Ëþ¹òõ·‘ÈGƒËÛvg›˜˜äçç#33}}}Ç£G R© Ñh\Žs·©-|}}祯ùÄœ… ’’’””äÔ¾sçÎ9p#F£™—¾æâÚœ@6D˜²!Â$ &lˆ0 dC„I "LÙpyžIΫɂÿœÂ´eËÎ…Á?ŽÓµ9`šˆÿ´ȇ“@6D˜²ñ?ÜjÄ›ë‡-IEND®B`‚bm3.7.0/doc/html/a00112.html0000644000175000017500000000557111365042641013425 0ustar tlktlk BitMagic: sample7.cpp File Reference

sample7.cpp File Reference

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
Include dependency graph for sample7.cpp:

Go to the source code of this file.

Functions

int main ()

Function Documentation

int main ( void   ) 

Definition at line 42 of file sample7.cpp.


Generated on Sun Apr 25 09:37:37 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00150.png0000644000175000017500000015411111365042636013246 0ustar tlktlk‰PNG  IHDR›¸u¡bKGDÿÿÿ ½§“ IDATxœìÝy\Ôuþð×r ÷-2 ‡à…Ì æ‘«YšZ©¨xd[Ù¶mÛim‡Ûo·ÚÖ+»Ûj·ì˳¼­4+of@QAaa¸æúý10JÞ Çëùxø˜û;ï™4f^¼?ïÀb±X@DDDDDDDDtãB{W@DDDDDDDD=Ã&""""""""ê0 ›ˆˆˆˆˆˆˆˆ¨Ãˆí]u?‡FQQ‘½Ëè1’’’Я_?{—ADDDDÔ!NDD×jþüùHMMµw=ÆêÕ«1oÞ<{—ADDDDÔìl""¢ërÛm·á¥—^²wÝÞ¸qãì]Q‡âÌ&""""""""ê0 ›ˆˆˆˆˆˆˆˆ¨Ã0l""""""""¢ð‰ˆˆˆˆˆˆˆˆ: Ã&""""""""ê0 ›ˆˆˆˆˆˆˆˆ¨Ã0l""¢NWRR‚;wÚ»ŒvöïßS§N]ñ~•••HMMEAAÁ·éõz¬^½º3Ê#""""ê¶6Q§+**ÂæÍ›í]F;{÷îʼn'®x¿%K– //"‘è‚Ûñé§ŸvFyDDDDDÝÃ&""¢ËÐh4˜9s&úõëgïRˆˆˆˆˆº†MDDtSX,¼÷Þ{˜2e ¦OŸn[~¦ÕjñÌ3Ï`ݺu˜9s&¦M›†;vàÃ?Ä´iÓœœŒ={öÔj5ž~úévÇ}å•Wm;ÎO?ý„yóæaÒ¤IX¶lÌf3`Ïž=˜3g&Nœˆ—^z :ÎvŒüü|<öØc¸ãŽ;°`ÁìÞ½°|ùr”——céÒ¥8|øð%_Û¶mÛ’’‚I“&aùòå°X,úÞu' ›ˆˆè¦ÈÉÉH$ÂÆñꫯbÍš5øå—_`4‘‘‘††¬[·<ðV¬XOOOlÚ´ ³fͲ-UkiiA~~~»ã£±±F£™™™8vì¾üòK|öÙgØ¿?ÒÓÓqæÌ,[¶ ýë_±eËÄÇÇãàÁƒ¬s—ž{î9L˜0Û¶mâE‹ðæ›oâäÉ“xì±Çàçç‡'žx }]f³§NÂêÕ«ñé§Ÿâ·ß~ÃÑ£G;÷Í$""""êÂ6ÑMáææ†‡~NNN.!!{öìAUUë@ðÌÌL€L&Cff& Xƒ¦?ÿùÏøí·ß.z¬}ûö¡  àšê&""""êMØÙDDD7E\\>øà|óÍ78{ö,¢¢¢0uêThµÚ«>FPPbccñ§?ý ýû÷‡V«Å Aƒ®ø¸Q£Fá—_~Áý÷ßÈÈH”––B&“úöí‹… âÑGÅ€PTT„Aƒaüøñ=Öûï¿)S¦ <<üªë&""""êMîÏLDD×hþüù(//ÇK/½tMkiiÁÉ“'áææ†¨¨¨ëzn“É„¬¬,Ö«m¶ÓÕÈÏÏGMM bccáââÒî¶ÊÊJ¨T*øúú^0ß©37«W¯Æ¼yónÚsu";›ˆˆè¦qttİaÃnè"‘ƒ¾®Ç¶í@w1¾¾¾ðõõ½Þ²ˆˆˆˆˆ¨g6Q‡agQ7b4šqöl5TªJz`À€ {—DDDDDÔÃ&""¢.¦¥ÅˆÂÂ*V¡  *U%òò48sFƒòò:˜LÖq‹Ÿ}¶au9 ›ˆˆˆìÀh4£¬¬ÎÎÑøá‡;¶§OkŸ_ŽŠŠ´íßáè(‚Å ¦ Ž1thèÍ.›ˆˆˆˆèŠ6Ù@ À©SÕðòšŒ~(PzÑûµ´\2€§§ =:±B""""¢ëÃáDDDv  pûíR”—ÿII~‰DWõX6¬_'WHDDDDt}6Ù‘ÙÜ„Y³¤Ø¹s †@ €@pùÇ88ˆ Ó5ã»ïÒQRRss %""""ºJ\FGDÔ‹ÅÇ¿ ¦ÞÞnpvC"éGôéãooW¸¸8ÂÙÙnnÎpuu„³³#ÜÜœPZêŒÆFœ9Sƒþý½ìý2z„Áƒûbûö§±vm^{m3êêš`4š/z_ƒÁ¦O<±F£HL ‡\.…L&ÅàÁ}áàpu]RDDDDDaQ/6aB,RS¡ººPZZÛîv‘H¡P@À:°Ú:CH‚>}ÄHœ®éùš›M(/×!4Ô½õ˜ÝÏÙ³õ‹… tíðc ¤¤ ÇwÆ[oý€O>ùFcû¹M °qãcHúàèÑ"¤¥@©Tá­·~@mm#œ0th(äòp$&Z(·¯—ˆˆˆˆèb–¶ínˆˆ¨×ùí·\¤¤|xÕ÷ …°X,èׯ‡­pñÎ@‘È >‹}!ûÀÙ9P[»MM§:¢|» áë{/D"745BssZZŠa2Õ_÷1W¯^yóæ]p}n®/¼°‡çC ÌfëlOOdeýû‚û[,äåi Tªpäˆ5€ÊËÓÀb± "Âr¹r¹µ*::Ba÷ üˆˆˆˆ¨KS0l""êÅ bc£±±åŠ÷‹Eðôìƒ?ü#Äâ*Ál¶ ºº%%:¨Õ(-mDI‰UUÍ0›-­C¯£Ñú£&)ÉóæEvöËêt§NÕâóX»‘, <=1`€'bb<Ñ¿¿ŽW}¼¤¤$ôëwéß[¶Å?þ± •• 0™Ì3&ß~û—«:vmm# •­*#£ ÍHœ!“Y»žÃ1lXÜÜ®­Sˆˆˆˆè"6õf--F<ôÐgøùçS0™.Þ¥B¡ãÆÅâÝwçáäÉR¬Zõ+òó+PXX‰–ÀÁA £Ñdë¾9ŸH$Äüù#°lÙ¬Î|97Õ‡þŒÿ{K»×ëà ‚Éd†ÙlTê‡qãb0rd$FŽŒ„—×-»kjjÁ»ïþ„wÞùO<1/¼0庎c2™‘“£¶u>)(,¬‚H$DLL †‡Lfí€ ó¹¡š‰ˆˆˆ¨WbØDDÔ)•*¬_¯À÷ßg À§O«/ …¼üò4Üÿ(Vá–[^»êç‹E;6Ÿ¾"QÏÙÕb±à¾û>Á/¿ä\0S©ƒƒÈ6ä;**II˜9SŽÄÄðë~^•ªz½]÷1~O£©‡R©BZZ>ŠBdf£¥Åw$$H!“…A.ÇС¡pvvè°ç%"""¢‰aQo¡RUbÃ%6lP@¥ªÄ€AHN–a„8ÜvÛë„Mb±ýúùàãïGllp»Û^~ù;|úé¾K†,çŽ!B\\6mz}ú\ý²²î¢®®ãÆ-GEEÃe;ÃηfÍ#;6¦“+»1--FdfC¡(DZZ>”J4šz88ˆ0xpßÖÎ'ëò»À@{—KDDDD] Ã&"¢ž¬¶¶[¶źu (•*øù¹aÚ´$'Ë1xp_Ûý¦LyGÂbëngsçŽÀk¯M¿hHTW׈ÄÄ¡¡AÉç‹…ðÀ΋zôNhéé…¸çžw¯6‰ÅBÌœ™ˆ7ßœs“*ëX……UP( lÃÇsrÔ0™Ì ñBbbxëðq)ââB ÷œ6""""ºf ›ˆˆzš–#~þùÖ®=‚Ý»³! 0yòLŸ.ÃþsÑ¥lï¿¿K–l…X,‚££ï¼3S¦ ½ìó¼ûîn¬X±í¢ËïÄb!\]±cÇÓJ};ìµuUŸ|ò+þùÏïp©©B¡¾¾îØ·oqÂÝÐÐŒŒŒB¤¥Y(¥R­VGÄÇ÷Cbb¸­ÊÓÓÅÞåÑÍð‰ˆ¨§8“VÛ„‘#£œ,ÃÔ©Cáêzù€#/Oƒ[o]ŠÈH¬YóBB¼.y_ƒÁ„Ï>Û‡wßýf³ZmS»ÀI(ÀÙÙk×>Š„„°{}]™ÅbÁƒ~ŠÝ»³/º´P  5õÏ]~ùÜ0›-ÈÍUC¡°W(TÈϯ€@ @d¤?d2©møxd¤?½K&"""¢ÎÁ°‰ˆ¨;S©*±q£ë×·ŸÃ4}º ÁÁž×t¬Ï>û Œºä(³Ù‚•X±b;*+ðàƒcˆ'Ÿ\àÜ‘Hˆ5kÁèÑQ7òÒº­Vñã—£¼\ÛnIX,ÄŒrètÍxüñÛ0dH¨«¼¹ªªZ[¨cÇŠ¡×àéé¹\ ™Ì:÷)>¾\\zÞL/"""¢^ŠaQwsµs˜:Òž=ÙX²d+rsÕ˜93Ï>; ÁÁž°X,˜2åmœ8qF£ï½73fÈ:¥Ž®.3³S¦¼m ›Ú–ÏmÜø8ž}ö9’ûïçž› ‰ÄÙÎÕÞ|ƒ ÇŸ…R©‚B¡BZZÔê:ˆÅBÄÅ…Øæ>%&†_¶»Žˆˆˆˆº4†MDDÝÁõÌaêJe!–.ÝŠò0qâ ¼øâDG^pŸ»îz°xñT<öØmRKwñÙgûðÒKa±XÚ-Ÿ³X,X·NW_ý"¼òÊtÜ}w¼½Ëµ»ÒÒZ[ø¤TªpüøY &zØËdR Ü"{—KDDDDWư‰ˆ¨+S*UذAï¾k?‡iÊ”¡:húÌ –-ÛŽíÛ3‘˜Ž—^š ¹<ü’÷¿ï¾áí튷ߞ×i5u'úÓçØ¶íæÍ•+SÚÝV[Ûˆÿ{+RSa̘h,[6³W Q¿Zz½ÇŽC¡(@Zš5€ªªj€³³† …\ŽÄDkÕ“w9$"""êÆ6u59‡éZ•—kñæ›»°fÍ!DDøcñâ)¸ãŽAW|\ee¼¼\:­Ãª»©¯×cáÂOñé§ / ¦¥à…Ö¡  =v|;w.!?¿¢ÝàñÜ\5Ìf ÂÂ| —‡Û†ÇÄòï ‘ý1l""ê jkñý÷ذA ¥R__7LŸÞ¹s˜Î§Õ6áƒöàã…··+žyf"fÏ¡;†]/³ÙrÅ÷Ïh4ããÁ›oîBp°'Þx#å²dd¥Õê¡TªZ‡ #£ Ípss°aaHL´P2™´WÎÆ""""²3†MDDö¢×ðã'±aƒ?ÿœ &MÜés˜Î×ÒbÄgŸíÃ{ïý³Ù‚ÇŸ€ gg‡Nn:§¸¸/¼°¿ü’ƒ?þq^|qj§.“ìiL&3rrÔ8r¤ uþS «  Ø:xÜ:ÿ)"ÂÏÞåõt ›ˆˆn&³Ù‚ò°aƒ;vdB§kÁ˜1ÑHN–aÒ¤Ápu½9ƒÙlÁúõ ¼þúTU5`áÂ[ñøã·A"ésSžŸ.nÃþùÏïàìì€eËfa„8{—Ômi4õ­OùP( ‘™YŒ–#||Ü “I‘˜h  † e¸JDDDÔ±6Ý Ù٥ذA‰•P«ë0dH(’“e¸çžøû»ßÔZ~ú) K—nÅéÓå˜5k8þö·I ô¸©5Ð¥UU5àÿØ„M›Ò1mZ^}u:|}9ûFµ´‘™Y …¢iiùP*UÐhêáà ÂàÁ}!“I!—K‘˜ÎDDDD7†aQg)-­Å¦MÖ€);» ýúù`Æ fÌ!2Òÿ¦×£TbÉ’-8xð î¼s0ž~2¢£oztuöìÉÆóϯCcc ^~ùÌš•hï’zœÂÂ*(Ö¥wGŽ 'G “ÉŒ/$&†·.¿“"..b1]%†MDDI«ÕcÛ¶£Ø°A‰C‡Î@"郻ïŽGr²r¹Á͸}út9–-Û†;O`øðp¼ôÒÝÉÂnztítºf,]º Ÿ¾øÃ¬\™Â®›NÔÐÐŒŒŒB¤¥Y¨ôô"ÔÕ5ÂÅÅññýlƒÇår)<=]ì].QWۉˆèFµ´ñóϧ°aƒ?üppǃ0c† ãÇÇÚm;ûòò:¬\¹ ß~{‘‘xñÅ)¸ýöv©…nŒBQ€§žZƒÊÊz¼üò4Ì™“dï’z‹Å‚¼<­óI©T!/OˆŒô‡L&ÅðáÖ*2Òß.a2Q݉ˆèzX,¤¥`Ã%¶l9 ­¶ ·ÜÒÉÉrLž<Ô®Û­kµMøÏöàãž}vfÍJ„PÈ/ÂÝ™^oÀŠÛñ¿ÿý‚±cc°re ‚‚<í]V¯S[Û…BÕ:|¼G¡±±žž.˥ɬâãûqGA"""ê­6]‹Ó§Ë±q£uSqq5bcƒœ,Çôé vÿâ¯×ðùçûñÞ{?|x`4œœÄv­‹:–R©ÂÓO¯F£Å?ÿyæÌIbGfde•@¡PA¡°P%%5‰„ˆ‰ ´u>Éåá ó±w¹DDDD7Ã&"¢+)/×âûï3°q£™™Å òÄôé HN–#66ÈÞåÁl¶`ݺ4¬\¹UU øÓŸÆâ¯‰¤½K£N¢×ðúë;ð¿ÿý‚1c¢±re ‚ƒÙåÔU¨ÕuHK+°u@?~ƒ þþîɤHLŒ€\†!CBáèÈ0˜ˆˆˆz†MDD£Ó5cÇŽãØ°A}ûNÃÕÕ“'Er²·ÜÒ¿Ë,IûñÇ“X²d+ÎœÑ %% Ï>; {—E7‰RYˆ§ŸNEy¹ÿøÇݘ7o»œº ½Þ€cÇŠ¡P -Í@UU5ÀÑQŒ!CB!—‡!112™þþîö.—ˆˆˆèF1l""jc2™±wo6mRbÇŽã0M?>3fÈpǃºÔr4¥R…×^Û‚#G 0iÒ ¼øâTDFúÛ»,²ƒæf#^}þûß½=: ¯¿ž‚¾}½ì]]A~~EëÒ;kTn®f³aa>ËÃmÃÇcb! í].ѵ`ØDD”™YŒ•Ø´)•• Ë¥HN–ãî»ã»Üöæ¹¹j,_¾;vÇ-·ôÇâÅwA& ³wYÔ¤§bÑ¢oPVV‹—^º ÷Þ{ »œº­V¥òÜàñŒŒB444ÃÍÍ Ã†…!11Ü6|Üž]†MDÔ;•”Ô`Ó¦t¬_¯@n®R©/fÍJÄôé J}í]ÞÔê:¼þúN¬[wQQX¼ø.Üv[¬½Ë¢.¦¹Ùˆ7ÞØ‰>ú·Ü‰•+Sêmï²è:˜Lfää¨qäH”JkTaa„B¢£!—[‡ŽËåRDDøÙ»\"""¢ó1l"¢ÞC«ÕcÇŽL¬[—†C‡Î@"éƒéÓ0c† 2™ÔÞå]”VÛ„÷ÞÛU«~…ž{îN$'Ë»ÌÌ(êš22аhÑ””Ôà¥—îÆ‚ìrê 4šz[÷“R©Â±cÅÐë ðñqk¼ûîO‰xüñ xàÑܹЮZK‹o¼± ~¸#FôÇÊ•)è×ÏÇÞeQ2L8~ülkç“uùZ]±Xˆ¸¸Öî')ÃÂ9^DDDtÓ0l"¢žéرb¬_¯À÷ß§£ªJ‡áÃÃms˜$’>ö.ï’Ìf Ö®=‚7ÞØ…êj~x,þò—q]ºfêÚŽ+ÆÓO¯ÁÙ³ÕìrêJJj–VÐ:|\…¬¬fzØf>Éåa2$”á5u†MDÔs””Ô`Ã%Ö¯OC^žýûûcÆ ’“eÝ¢£ã‡N`É’mÈÏ×`îÜX´h"$ö.‹z€ó»œn¹%o¼1‡;Öõ-8~ü,Ф¥Y—ßUU5ÀÑQŒ!CB!—‡!11ÆõC` ‡½Ë%""¢žauoZ­Û¶źu 9’//WÜ}÷0$'ËÐ=viS( ð¯mB¡ÂäÉCð “Ñ¿¿¿½Ë¢(#£O?½eeµø¿ÿ»óç`—S/”Ÿ_…B…ôtk÷SNŽ&“!!^HL ·-¿‹‹ X,´w¹DDDÔý0l"¢îÇ`0aïÞSX¿^< ‹Å‚;î„ädÆëºs˜~/7W¥K·a×®92‹Oí6u_ÍÍF¬\iݱnôè(¼ñÆ{Ú»,²£††fdd"-­À6|\«ÕÃÅÅññý0lX­Kð||Üì].u} ›ˆ¨ûÈÈ(Âúõ lÙ’ª*’’"0s¦S§ÆC"q¶wyW­´´+WîÄúõiˆŽÄâÅS1~|¬½Ë¢^&=½O=• F‹þóÌ;ÂÞ%Qa6[pæŒJ¥ GŽX¨¼< , ""üZ;ŸÂ!“…!::"»Ÿˆˆˆ¨†MDÔµWcýz6mR"/OƒÈH$'Ë1s¦¼Ûí®TW׈÷ÞÛO?ý ¾¾nxî¹É˜1C¡Ë˜È>š›X±b;þ÷¿_pë­Ñxã9œÛCU[ÛØºô®J¥ …hhh†››SkçS¸myw ÿ‰ˆˆ¨S0l"¢®G«Õcóæ lܨÄáÃùðñ±Îaš9SŽøø~ö.ïš55µ`Õªßðþû»! ñä“·ãþûGw›å~Ôó)•*<õÔTThñÊ+Ó‘’2ÜÞ%Qg2™‘“£¶u>)(,¬‚P(@tt âãûaøpkéÏÙ`DDD½ Ã&"êL&3öîÍÁÚµG°k× …ÜqÇ Ìœ)ÇØ±1Ý2˜1LX³æ0ÞzkšñðÃcñÈ#ãàîÎßúS×£×°|ùv|üñ/?>+VÌf—]“ªª(•*¤¥YçcÇŠ¡×àéé¹\jë|Šï77'{—KDDD‡aÙWvv¾ýö0¾ÿ>M=’’"’2wÞ9¤Û.Å0›-زå(–/ߎ’’,X0O=u|}9X—º¾´´<õÔTWëðê«Ó0kV¢½K¢nÊ`0áøñ³­ËV€’’ˆDBÄÄÚ:Ÿäòp„…ùØ»\"""ê8 ›ˆè櫬lÀæÍX»6 ™™ÅJ}1}zfÍJ„TêkïònÈž=ÙX¶l²²J1c† ûÛ õ¶wYDפ©©Ë–mǪU¿â¶Ûâ°bÅlHì]õjuÒÒ  PXw½;~ü, üýÝoÝõN.ÇС¡pvv°w¹DDDt}6ÑÍa0˜°gO6¾ùæ0öìɆ££S§EJÊp$%EtûyJ¥ K–lÅÁƒgpûíñâ‹S0`@½Ë"º!‡çãé§× ¦¦¯¼2 ³g³Ë‰:VK‹™™ÅP( ‘––¥R¦" Ü·ué]d2i·Û‚ˆˆ¨cØDD+3³ß~›†ï¿OGmm#FŠBJÊpLš4..Žö.ï†å檱té6ìÚuIIøûß§B.·wYDæü.§±cc°bÅl~é§NUXX…¢EP(TÈÊ*ÑhF` ÃmóŸîÛ-çùõ ›ˆ¨ã•—×aÓ¦ ¬[wÙÙeˆŒôGr²3gÊ{Ì—Ô’’¼þú¬_¯À€AxñÅ©¸í¶X{—EÔiŠ,Zô Ê˵X¼x*î»od·ïH¤î¡±±GZg>)•*(•…¨©ÑÁÙÙ¡µû) ‰‰ɤð÷w·w¹DDD݉ˆ:ŠÁ`®]'ðí·‡±wo\]q÷ÝÃ’22™ÔÞåu˜êjÞ~û|ñÅ~„„xáo»÷Ü3 B!¿tSÏ×ÜlÄ›oî‡îÁðáX¹2¥ÛÏY£î)?¿ …u×;…B…Ü\5Ìf ÂÂ| —['$ôC\\Äb¡½Ë%""êm6ÑiÛMnãF%ª«u¸õÖÌ›„‰ÁÑQlïò:ŒN׌>ú}´nnNxòÉ;0þ.á ^éøñ³xê©5P©*ñüó“±páˆDüBOö£Õê[w½+lí~RA«ÕÃÅÅññý˜Ø¶óžž.ö.—ˆˆ¨§cØDD×®¶¶›6)ñí·çv“›5+³g'ö˜erm >ÿ|ÞyçGf<úèx,\8®®Nö.È® Þ{ï'¼óÎ80+W¦ ?Ñò IDAT..ØÞeÌf rsÕ¶î'¥²ùù€ˆ?ÈdaË­óŸ¢£ÙJDDÔ±6ÑÕ1›-Ø¿ÿ4¾ýö¶oÏ„P(À]wÅ÷˜Ýä~Ïl¶`ݺ4¬\¹UU xðÁ1øë_ÇÃËËÕÞ¥u)¹¹j<÷Ü:¤§«ððÃÀ3ÏLDŸ>Ýø?õ<µµP(¬]Oii8z´-Hœ[w½“bØ0ëÎw‰³½Ë%""êÎ6Ñå©T•X·. kצ¡¤¤2™))Ãq÷ÝÃzì‡ñ;cÙ²íÈÏ× %% ‹Ý  O{—EÔeY,|õÕA,Y²žž.X¾|ÆŽ±wYD—e4š‘•U¥²éé…P( PXX¡P€èè@ÈåR[÷SD„Ÿ½Ë%""êN6Ñ…ôz¶oÏÄš5‡pàÀøûK0s¦))Ãéoïò:ÍyXºt+ÒÓ‹0uêP<÷Üèß¿ç¾^¢ŽV^®Å?þ± [¶ÅŒ2¼üò4øúºÙ»,¢«¦ÑÔ·v>åC¡(ĉg¡×àåå ™ÌÚõ”˜Žøø~pqaÑ%0l"¢s22аfÍ!|ÿ}ôzÆÅܹI¸í¶¸=ü÷ĉ,Y²{÷žÂ­·Æàŧ`èÐP{—EÔ- 89…ÃÃc ³f ‡XÜs—Qçrvv@RR’’"l×VA¡(€R©Âþý§ñé§¿Ád2#$Ä ‰‰áHHCBBî ‘«'""ê ›ˆz¸–cë°ïÃØ¿ÿ4¼½]1{öpÌ™“Ô£‡}ŸO¯7à“O~Åûïï†X,ÄóÏOÆÿ8 ÎÎö.ˆˆz °0„…ù 9YhhhÆÑ£E­ËïTxóÍ]¨­m„³³† …\ŽÄD)d2)||zöv""ê6õPYY¥X½ú6mR¢¾^qã`Õª1~|l¯ù-ªÑhFjê!¼õÖ.444ãá‡ÇâωÄÙÞ¥Q/âææ„Ñ££0ztëàù¼< ”JŽ)ÀîÝYøðÃ=0›- ó\™LŠáÃÃØ£7é "¢ž‰aQ¢Õê±q£ß|s™™ÅJ}ñè£ã1k–½gN„ÅbÁæÍG±|ùv””Ô`Á‚‘xòÉÛáççnïÒˆˆˆ €¨¨Ì™“Àú3¼­ó)-­K–lACC3ÜÜœ0l˜uÇ»„„0ÈåRxzºØù]Ã&¢nÎb±ààÁ3HM=„íÛ3S§ÅË/߃¤¤ˆ^7ôzïÞSX²d+²²J1c† ß|óúõãvÔDDÔµI$Î7nÆ0™ÌÈÉQ#=½ E6oÎÀÛoÿ@€ÈH[ç“L&Eÿþþ {×Ï{""êÚ6uSååuX³æ0Ö®MƒJU‰!CBñê«Óq÷ÝÃzå21¥²K—nÅy¸ýöxçùˆ ²wYDtyyyØ·oî¿ÿþ=®N§Ã;#ŋwèq‰n&‘Hˆ¸¸`ÄÅãÞ{oTU5´v>©ž®ÂæÍhllDâ ™Ì:ó)11Æ…ÁÍ­çoüADD]—ÀÂ=}‰º ƒÁ„<‰5kaïÞ¸»;cæL9æÎÑkƒ•Ü\5–-ÛŽ;#))‹OEbb¸½Ë"êµV¯^yóæ]ñ¾[·nÅk¯½†C‡uh jµ}ûö…Ñh¼îc¤¦¦bþüùàÇ$êÊŒF3²²J P¨ PX—ß•”Ô@$"&&Ð<ÉåRDDøÙ»\""ê=ìl"êTªJ¤¦·ßAUUFŠÂ,ÀĉƒàèØ;ÿ—”Ô`åÊX·. 11AøòË?a„8{—EDDtÓˆÅB Š!CBñàƒcju22Š––…¢kÖFK‹>>n­ORÈåá2¤/úôq´ó+ "¢žªw~K%ê vî<ޝ¿>ˆ}ûNÃß_‚{ï½sçŽ@ß¾^ö.Ïnª«uxçñùçûì‰wßiÓ8«‚¨›2›Íxâ‰'ðùçŸÃÙÙO?ý4^|ñETUU!%%“'OÆÊ•+a0°|ùrdeeá‹/¾€X,Æ[o½…9sæ\òØŸ|ò þõ¯¡²²³gÏÆªU« vή^ƒ {÷žÂwߥãaâÄAòýôAL˜׫·>ÖéšñÑG{ñÑG?ÃÕÕ/¿< ÷Þ{ Dö.¨GÚ²å(¤R_ÄÅwêÿ{ ÆŒµZôôtL:QQQ=z4~þùgŒ9%%%øè£°páB,[¶ +W®Äÿýßÿ]2l2™LHKKÃéÓ§Q\\ ™L†ûî»ãÆë°ÚÍf ÎÇwߥcÓ¦t444°`„öD7ÊÑQ ¹<rù¹%æ%%5HK+°-¿ûòËý0Í ô€\.EB‚ry† íµÔDDtcøÓƒ¨ hi1Úº˜öïÏC` î»oæÎMêõ¿e4Løâ‹ýxûí`4šñØc·á¡‡n…«+Ÿu¦•+wáôi5\\‘˜Ž‘##1bDÄÇ÷ëÐ×ÓÓË–-ƒƒƒFÇ{ ©©©=z4Ìf3žþyL˜0b±Ï<óŒíòo¼qÙc¿öÚkpttDÿþý1pà@ÔÕÕuHÍ'N”`ãFÖ¯W¢²²b±F£Év{ccK‡<Qg ñBHˆ¦MK`ý;{üøY(HKSá?ÿÙªª8:Š1dH(äò0$&F !¡<ì\=u ›ˆì(?¿«Wĺui¨©iÄøñ±øüó…?>¶Ww1ÖŽõëxýõ¨ªjÀŒÆcÝ//W{—FÔ+TUÕ°~ ýõ×\ìߟ£ÑGG†í‡1c¢1bD¤pq¹þ¹/ýû÷‡ƒƒƒíò Aƒ°{÷nÛeWWë¿y@'''ˆÅbÛåˉDðó;7ùJ÷¿’üü lÚ”ŽuëÒPTTGG1ZZ¬ÈÏšàý÷Âüù#nèùˆn&G$%E ))Âv]~~ ”J~ý5ü+L&3BB¼˜n[~±¸wf!"¢ 1l"ºÉZZŒØ¾=«WÄgì‰?þq4æÍKBP§½Ëëví:¥K·!?_ƒÙ³‡ã™g&ò½!ºÉÜÝQ]­X,[ ÒÒb‚B¡ÂÑ£ExóMD" ÁèÑÑHJŠ€Pxm]‡•••í.k4x{{wÌ‹¸A"‘þûß½X¿^“'Kàà ‚ÁÐö>\z§;v^ROᇈ?ÌžhhhFFF!ÒÒ  Tª°bÅvhµz¸¸8">¾† Cb¢2™>>nv®žˆˆìaÑM’—§AjêA¬]›†ºº&Üv[¾øâ!Œ7 ×w1µ9xð –,Ù‚ôô"L™2«V=€þýýí]Q¯£Ó5ÃÙÙá’·[,[èb2Y™y'N”àƒö à/xÿýl$&–#**àŠÏ¥R©°uëVL:õõõøïÿ‹G}ôškþî»ï‰Aƒn|0÷éÓåøè£øû?„W^ùÞv}Ûk¾’ìì2ÄÆ.†§§ úôq„““IôéãgçóÏ;@"q¶wwwnw½‹‹Sëc­ç9£ŽìÉÍÍ cÆDc̘hÖä¼¼r¤§âÈ‘üðà |ðÁX,DDøµv>…C& Ctt ?ëõ2 ›ˆ:QK‹[·ÃêÕqèP>‚ƒ=±pá­˜7/‰3ÎsâD –.ÝŠŸ>…1c¢±}ûÓ:4ÔÞeõõ¨¬l@ii-*+ëqöl rrÔ×t ³Ùb;é~ÕÁȈ#°hÑ"¼þúëÈÍÍŰaÃðð㪪ꚞÿ©§žÂC=Ô!a“ƒƒ¡¡®ÈËÓ^×ã- þö·Éhjj†NׂæfêëõÐéšÑÜlDaa›ÑÔd€N× ®z½¡uÀø¥ …¸»÷‹Ë¹ËÅå\PÕvÞÍ͹Ýõ®®ÖÐÊz'8;‹áæf½Þzvbѵ ˆŽDtt æÌIÔÖ6Ú–Þ¥§âÕW¿GCC3ÜÜœZ;ŸÂ!“Y»Ÿ$g;¿""êL‹Åb¹ò݈èZäåiðõ×°vmô˜0a æÏ¿ãÆ €PxcsCz•ªË—oÇæÍG1th(/ž‚Ñ££í]QQ]­ƒF£EYY**êQVV ¦jµõ´¬¬õí:vœàë놲²:˜LæëzÞ‰CðÆ·÷ÕÍXÓëõ8xð <<BC½1wnæÎeÓï•—kñÖ[»šzR©/ž~2&OrÃ|‰z ®%%5P«ëP^®…Z]×"Y/——[OÏŸ+äè(†§§‹mi–X,´-‡³†zÔÖ6¡#>$&úbÕª'áëÛ=ç¶TV6`áÂw–Vyå;_77'øúºÃÇÇÞÞn¶Ê××ÝvÞÛÛ >>Öë:£ÓÈ`0¡±±õõÖ J§k¾®®©5¼jn½ŸZmSkç•5°ª¯·þihh¾ì̪¶ªí‡G¸¹9µT} ‘8Û‚*>HúØ.[O­Ë ©gª¬l@zº iiÖð)3ó,ššZ ‘8ÛºžÂÀî'"¢nŒaÑ:sFƒ¯¾²v1ét͸ývkÓØ±1ü ÝïhµMxï½ÝXµêWx{»â™g&bÖ¬áÜņ蔪¬l@UUŽ?Ûîúßû}øäãã__·v×ûù¹ÃÏÏ ÞÞn78 ÑÔÛ‚'…¢7*¡×àáá‚„„~ɤHL ÇСýØýDDÔE±³‰èœ=[ƒ¯¿>€o¾9Œª*ÆÅ‚#1~|,»˜.Â`0!5õÞ~û444ãá‡Çâ‘GÆÁÝ ©ç2›-(/¯CQQ5Nž,Ann9Tª ””Ô¢¢B‹úz½-°‰°XÚ׬Ë|}ÝáïïI»î–€Éy!’亿hÕÕ5âäÉRdg—ÚNO*Cs³"‘ðŠ3~„B,  Åĉqððp³³þô§‡°hÑ_ñ—¿ÌEHˆ×uÕÖ,Yò?¼ÿ~öu=ÖÑQ Àº¼Z  o_/DFúcÀ€ DE ::QQ×ýÿB“ÉÜ®Cêr!U[gÕï;ܬ¡¤5²þ²†QþþçŸw‡¯ïÕ{·“ÉÜH5RYOµÚ&ÔÕ5¢¶ÖzZWׄÚÚFÔÖ6Ú®¿Ø’@gg[(e ¢. ¨¬§®\ßÕ߯îÈ`0!+«´uª¸¸ÚÖýÔÖù”Æî'"¢®Ë舮Äl¶`÷î,|ýõAìÞ__7Ì;óçß‚¾}»ï©Îd6[ðý÷xýõ()©Á}÷“OÞÞmç·¯¹ÙˆÒÒ;VŒS§Êpú´¥¥5Ðh´¨«kBSSËE»_D"ëNb>>Ö/÷R©BB¼(i –$ ”tH×ÉùL&3TªJœ; O>y;Š‹«‘›«FN޹¹å8}Úú§©Éºl.$ÄBÅĶîêe ¢$’>þzêëõ¨¨¨·Sju]ëò¾zh4ÖÝ++ë¡Ñh/XÖçáákל5ü<RYƒÐsç»cGPSS‹-„jFý>¨jl½í\põû\\mTm]fÞÞ®ðòrm½Î­Ým^^®pqጪkÕÖý”––ŒŒ";V ½ÞOOÈda¶Ýï† ãŽ‹DD7Ã&¢KÑhêñÍ7‡ñõ×PRR‹Q£"±`ÁHLš4¸[êl?ý”…e˶áÔ©2Ìœ)dzÏÞÉPŽº…ÚÚF”—kQQ¡mº­ENNΞµ⮩i„N× £±ý—K¡P`ÛnÞÏÏH¥~ˆˆðELLüüÜ é”á÷´Ú&de•Ú¥“'K“£FSS Äb!ÂÃýŒCŒƒxñ ž{n-V¯>tÕÃDpss™3©øôÓ÷ˆ™MóçχÅbÁêÕñ÷¿o„Ùl†Ñxåúvízƒ÷½èmf³ÅÅÕ8}º99e8}ºÜDµ- ô°u@ÅÄX» bbáéyãKÖ®Fcc **êQQ¡EU•®õßE=ª«P^®mL54´_Âæîî|^ ÕÖ)å ‰m9§u9Ÿ{Þ6\½®®55íªÚZk‡YM55¨®Öµž×]ð÷ÈÉIÜF¹ž7£ë\0õûÛ¼¼\®¸<³·1L8~ü,22 ¡T"-­%%5‰„ˆŠ €\.…\Ž„„0ôïïÇî'"¢Îۉè|‹œÁW_íÇŽÇáêê„””á¸÷Þ[п¿¿½ËëÒŽÉÇ’%ÛpäH>&N„^˜‚˜˜@{—E½œÁ`Bee=Ôj-*+ë[wjÓ¶^W‡ŠŠzœ=[ƒêjÝ! ` €‹‹u&R` '¤RôCû">¾ßM ‘~Ïl¶@¥ªDVV)Nž,Avv²³K[ç Y»•Úº”â₌‚®©ëä§Ÿ²pß}ŸÀú\žP(ÀÈ‘‘xÿý`õêÕ=*l€Ó§ËñÐCŸ¡  â²SŸ>Žxê©Û1zt4† é ‘èê6@°X,8{¶yydg—"/OƒÜ\5NŸ.G}½uˆ¶¿¿»m ^LLmiž··ë¿àë¤×PYi ¡ªªêÏ;ßÖ5e=¯ÑÔC«mj÷XWW'[ðäãã†À@ ||Î?.˜êiÁŠVÛԺ̱55ºvATÛÒÈššÆv×]. òöv;¼½]Z/»Ú:ÑÚ–Lúø¸öº€¥¼¼ééEHKˇBQˆ'ÎÚºŸÎ_zÇî'"¢ǰ‰°v4¬]›†¯¾:€3g4ÉÂpß}£p×]ñb}ÙÙ¥X¶l;~üñ$FŠÄ /L…LfﲨÐjõP«k¡V×A­ÖÚ–²•”Ô¶v&Õ¢¢¢¡]g޳³úôq„@´´XwÓ2›-ðñqE¿~¾¶eMáá¾J}îg×¥AµµÖÙJ99e¶PéÔ©246¶@$"<Ü·]·RllP‡ÌJ**ªÂèÑK/ÂÓ¤,^<<ò‚n6•–ÖbéÒ/ðÉ'`ïÞ¶!Û®®NxõÕ-øâ‹}pÑ®¯ÄÄpU¡¼\ ‰¤FŒè1c¢0zt4¢£®ëË~I‰5„².Û´vBåæªmább[ç`Ûßa??÷{#:XK‹•• ÐhÚ:¥tP«ëló¥ÊËëPU¥CEE=jjÚAïÓÇÑÖ%èï/±zÀß߶Ъ§Òjõ¨®n@UÕ¹`ÊÚ1Õ~—ö۪ªtíf¯‰DÂvóÞ¬ï—kkÇ™»m†W[@Õ—D^I[÷Ó¹áã*[÷SLL d2k%—Kágïr‰ˆº3†MÔ»¥§âË/÷c󿣉„HN–aÁ‚‘80ÄÞ¥uy*U%V®Ü‰ï¾KÇÀ!X¼x*ÆŽ±wYÔ˜LfTVÖ£´´®5<ªAy¹eemÁRJKkÛÍ•qvv@P<=]áêê‹0Œ¨«k‚F£EMM£í~~ˆŒ @d¤?¢¢п¿?ú÷÷³û’ƒÁ„œ5N*éSe¶¥pååÖ]áÚº• ²…KÑÑZwy¹Û·Ö-ÇpäH>¢£‘›«¾`€9`Ý….0Ð|?† µ]ßÂ&xøá7±ukq»ë„B$’>pr£²²f³å‚Àé¹ç¦`âÄhn6 #£ûöÆgPW×??wŒ…1c¢0rdÂÂ|n¨Fµº®u9žÚÖ•“£Fm­õï»——+¢£pÞpò\|édWb0˜Î뎪Gee=**¬Ý‰ÖvªV×µÛ¡ÑÁA??wyÚN}}Ýì __wyØ–óõô.‹Å‚ª**+­gm3»¬Áž¶µ³ªÁ6³«m–X77§vQÖ¹\ÖÝ Û†Ç[ƒ+·Ù•Ð^Ôê:(•ªÖáã…ÈÌ,FK‹^^®ÉÂZçp Êî'"¢«Ç°‰z®7*ñå—pòd â₱`ÁH$'Ëù!â*”—kñöÛ? 5õBC½ñÜs“q×]C{ü‡vêMM-(-µvYOëPVV‡²²s×UVÖ·[.Òö›ö/X;úôqDs³uuMP«ëŸ_Ó§Ëm_:}}Ýh –¬¡’úöõî;GWãÔ)k§RV–µS)?_£Ñ ¢£d – ºäl¥¥ÑÔcÛ¶cغõ(·‹‹#n¿} îº+M=þþ÷ íº#Úþ­OŸž€eËf]ðÿÍ߇Mf³¥Ãßóìì2@llP‡O¯7@$¶›Ç—ššŠ‡~É®ë˜üR©/k€zâD öï?}ûNãðá|45µ _?Œ…Ñ££0jTüý;¦I£©o Ÿ¬ÃÉÛº¢ª«­ÝB.¶à©m8yTT‚ƒ=;äùo6­VòòºÖe²uÐhÎ-“-+«EE…õòùµƒƒ>>n­á“u8[§”uöš‡möÔÕ.…ìîÚfuN?T¾m†W[`u¾¶÷óüΨ€‰íÿÙmïm@€ŽŽ]»cêüî'…ÂÚu~÷Óðááˆc÷Ñå1l¢Þ#;»_~y7*ÑÒbÄ]wÅã¾ûFB.·wiÝ‚VÛ„ÿügV­ú.X´è¤¤$A,îÂéÊ4ë|–²²Z”•]Ø•TVV×nf‹££yÚ¾„´JAA ô€ƒƒgÎT 7·­ãGÜÜ2hµÖ6ÁÁžˆŽD\\pk§R "#ýºÌoÙµÚ&dgŸëTjëZj›ÁꬡÒÀý½ IDATÁˆ‰ BÿþþþïJ£©Çöí™Øºõ(:GL˜` ˜Æµ-Ÿ)/¯CBÂ+¶î±XGG–/Ÿ…ädùE-:ÁÑ1L‚^/†DÒ ©TÛ¡õ«Tè°ãZ,œ<é“I€¼¼š°qãZÀÆJ<ñÄê‹v1]ŒH$DRR¬_ÿè%ïc0˜ž^ˆ}ûrñÛo§‘‘QƒÁ„˜˜@ŒQ£"1rdd‡Ï«ªj@NŽÚ6œüðœ9SͶm»Ñé %8ýç?÷“| =Ä©S•dd”’™YN~~ …‚˜)v0nQÏŽŽ>©J£JK›¤çìÙÓ‡E¨ BTHˆ;¾¾N“ÒÕ:00Dc£àé”b{b|]]ýÒÿ£P(pu&ðŒì]øüB”ÏœD”‰@Ô Vw ßwÐÚÚ‹ZÝ) ~ÍÍ=_sK‰qGñyóòr%òyy9àì<Û$ÏçÐŽÜ\çÎÕ’]MVV]£ÜO ú3¾Ÿì~’‘‘™ªÈb“ÌäD¥jçõ׳wïIzzY»6šÍ›HL ™”ãñ@§3°wïI^xá ½½¶o_Á½÷®4›‹{™±ahHG}}jujuÇðÇB7R}}§4IJÄÆF8å¿à@rÀÓSp%yy9ß;|§Y_ßAAA=ùùõÔSP ¦¶¶ .jÃÂ< ó”¥ðpO³*:V«;‡ÝJêa·R#ååMhµzlm­‡Ë™/ˆJcUØ}9ˆ“à`¦+®ˆ”L#?ûlÿûçÜwßj~þó+),T“]Å©SUdeUÒÕ5€••kk+Ip´²Ràä4›/¿|tÌÿíNŸ®äºë^`ß¾Ÿ±xqà˜ýÝ/½tˆ§žÚŽq‹ïOd¤7o¿} ­VÁðÍÓ謬 4ÔƒC‡ûAëèììçøñrI|*+kbÚ4.ôŸB‰‹ó÷‹ì®®þPMR/”ZÝ À¬YÓ£x„(¥Ò<âªãF£ß»áûª@%ÆE\\fKލ‘ýR¢ÓÇÛÛqÊŠR¢;¶¥¥wX„z¹.<ÇÝ£ÊãE‘O¡.”Æ Ÿûø8âéé€ƒÃø»]:ÉΣwÕäåÕKî'¡x\è’ÝO222SYl’™< FŽ-áßÿÎàË/ quµgÓ¦elÚ´Ô"ÊP̓ÁÈþýçyöÙ4êë;Ø´)_üâJ³ºØ—¹8ôz--=ÔÕµ£V ¤º:APbmÂi²Èôé6xy9âå5//ǯ‰Hb·ÉÅ^Dêõ*+[$a)7·Žüü::;ûQ(øù9íMT”·$̘S\§»{pÔ¸’’F ÕRÐËËaXL&ÀEDxìnò ÄÖÖ^I`:q¢‚éÓm†#róX³&ò’]‰Ÿ^À[o ²²…ªªVôz¶¶VèõÆo,!n÷ñÇ2¾ïX|K£xòÉyóÍãlÚ”ÀŸþtý˜ýÝz½””¿QXX?ª7L¡P`m­@§3b5œ”ú¦ï]¡€•+ÃyöÙãã3vcSSééeRçS}}vvÓY²$¤¤P’’BˆŒôš0§»{òr!Š7RŒ|ß&BMV'Ô÷14¤Õ)¦ŒtüŒŒ›YY)†§ïÍv„ÎÅÝ}î×þ©Ø5©Ñè¾"BuI޳‘ÂÔHç™Ýt¼½ñòrÀÛ[xS*ðòrÄÛÛ//‡1ï’ÝOÙÙ5œ;W#¹Ÿll—èÈòñ:,@FFFÆ ‘Å&˧³³Ÿ½{OñÆÇ©®n%11˜Í›“X·.Úä}–Æ¡CE<óL*EEj®¿~!<²__yd®´·÷ÑÐЉZ=ZDª¯ïD­îm³¶¶ÂÕu>>NÒÆZÜt ;âârù#Æ(*jåX**j```[[ëáN"ïQâÒDFȾ‹¯FàÄ^¥º:áÂyΜRìMt*EDxšM/]yÑ_¯P(xá…ŸpóÍ‹/û1¿ Î@lì¯éì?‡™äæ>5¦]9ååͬYó—Q±ÐÑ(P(Œ|ÓîÉÎn:sæÌ ¥¥‡cÙ¾}ù¸ôVUµ™yÁùÔÖÖ‹££Ýpד» róÇý>z{5ÃQ6Sžd.­VO}}‡$"ÕÕµSW×!u$©Tí£.8œœì$ÑÈÇGØ{z:àã㈷·#nnöcvA>00D~~=99*Ϋ!?¿žÊÊôzöö3%AI—BBLïö§À‰.%±$yd.4Ôƒ¨(o)ÂgNn«‘´·÷‘––Ë'Ÿœçĉr¦M³‘"rkÖDŒi¿Ïdóàƒo}£À2kk+n¿}O?}ã˜=öH.æ¶Û^Ä…(xë­»Yµ*|Lç_ÿ:ÂÿøÉEõ3‰X[[ñ?ÿsÛ¶-'55‡W_=ÊùóµÄÅùr÷Ý+HI™7.¿F£‘ââ22×Ó‰åôöjðð˜KRRˆä|2夹žžA©”¼¬¬‰¢"á÷n¤%ˆO’ *4Ô¥R¡¾‰ŽŽ>ššº©¯ï¤¥E¸Ü=zõ¾-þìæ6//G<<„¸™(PyzηN0s¦µµW:¨ßoEqª®Nx~Eã´i6Ãï­s‡nGÜøø8bgwiN³‘î§ìì*Ξ­‘ÜO‘‘Þ,\èÏ‚¾²ûIFFÆ‘Å&ËB£Ñ±oßY^=“sçj ÷dóæDn¼qÑ%¿ÁËãÃÿüçT>ÿ¼€¥KƒxòÉ«X¸ÐßÔËšôõi¨«ë¾µ•:P©Úinî–.tg̰Å××Y¼¼DÉA:u¯ÂvÎ@II99*Ξ­!'GEII:—ÙÌ›§$:ÚG–FG›’®®þá^¥FÉ­TRraŠ#aaÃ8/ÂÃ=Ì"÷}´·÷ñÙg‚Àtü¸ 0­YÁÕW ¦ñ¼X¼á†’•U9*^6kââ”|ðÁãö<þìgoòñÇçÑéôÒc^{m/¾¸iLG¯7pÕU§  ^z¬oÃÊJÁ`dÆ [Οÿý¨^»¬¬*^{í(Ÿ}–‡››=[·&qÛmËÆµ?F§3“£v=•‘•U…F£#0ЕÄÄ’’BHL ÁÉÉôC2Ä8^qqåå'B……yàãã(‹PßÃÈÁÂýèé ¢Kj¤ƒÏÁa–tH! P‚ "ˆSãù^c®hµúQbµºókâÔÈé…öö3ñöv\Ä>>Nøù9ãë댯¯ÓE9bëë;ÈʪâܹÚQî'7·9ÄÅù/Dïbc}¦¤@(##c1Èb“ŒePSÓÆogïÞSôö²aC,wÞ™ÈÒ¥A¦^šER[ÛÆsÏà£ÎéÅã§°zu„©—5©ho®úúNêêÚQ©Ú%a©¾¾sTÁ©ƒÃ,ɤT:áãã$}îã㈳óåÇÛ.£ÑHuu+çÎÕrþ|-99*òòêÔ2{ötbc•ÄÅùJ·±ì¤¹\´Z½4ÅN—„›X`Þy篿~•ªÄÄ`î¼3‰µk£Ç´v*ÑÝ=ÀK/bçÎtfÏžÁ/¹–[nY*?ŸßAKKµµí¨Tm£6‰*• ,‰n[[ëQÝH¾¾N£D%sÙTët ëÉήæôé*NŸ®¤±± kk+‚ƒÝ$·Ò¼yJ¢¢¼Mz¡ÙÙÙOAšÒÒÑ“àz{5( ”J'©O)*Ê‹°0O]ÍòâøRèèèãÀ<öïÏ!3³ kk+V¯¾‘3ETX§3ðê«Gøë_àÂÓOßÈCíE¥jG¯âtãY>’-[vòÅ…ÒãŠX[[qÅ‘ìÞ}ט?¦Á`äškþ¹¹ªQq:++F#<ùäUÜwßjt:Ã%½ž F>ÿ¼€×^;Êñã儇{²mÛrn¸aÑ„»BZ[{9~\p=ed”Q]ÝÊ̙ӆ'Ý âST”·YL "”(> ÷%%46v`o?ƒÐPOÂÃTX˜àv/ÞT¤µµWšr*ŠP ]ÔÕµ‹S]_¤„Ézb÷\©sp¬{ÍîîAêê.ì1„û6jj„›ø¼ÙÛÏ$ À??güý]p•îííg“£’ŠÇE÷“­­5QQÞÃâ“¿3W²ŒŒÌ”@›ḋsçjù÷¿3øä“sLŸnÃM7-fóæD‚ƒ'~¢ÎdapPË®]éüóŸ‡0<ðÀ¶nM–O¹:}TªjjZQ©:†%á”±¶¶M*ß¶µµ–¦ÒˆÝ ÂÇBäÍÍÍkkóÛwwJÎÓ§+9{¶†þþ¡¯M¼‰õ1Yß™F£“"pÅÅ Ãn¥Fšš„ D‡YÃ8/i\h¨‡ÙL± š›{8p ÔTaŠœ5«V…sÍ5óM&0‰äæªxä‘w)+kâ¿XË}÷­ÆÖÖš“'+¸á†b4±¶¶bóæDžzêúq]Kw÷ÑÑ¿ùÖþ$kòóÿ8ª/i¬¨®neÕªg¥(‘5ÉÉ!¬ZÎoû1=¶‘¼â²ÿþüüzvì8ʾ}ç˜3g·ßžÀw&™ÌÁ[[ÛFffééedd”ÒÚzaÒ]r²P6àj’µ]*]]ý‹â“àŠ,*jœ$NNvï+#…(³š49™hnî¡¡A(3#gblOœ¶'䨨X »‚'°Ø%ô ‚Ôxü¾›ƒµº“êꪪZ©®n•îkjÚ\ÔvvÓ‡…'üýAÊÎn==””4’]MQ‘z”û)>>ùó}e÷“ŒŒÌx!‹M2¦epP˾}gÙ³'“œ‘‘^lÞœÈõ×/” ¿:wÞ9Å /¤»{€mÛ–sß}«§ÄÆL¤¿h„Mý‚;It+‰EÑVV ÜÝç¢T:êMo^^f)&}•šš6²³«8s¦šS§*))iÄ`0âÎÂ…þ,^ÀÂ…þ„„¸OøÚ #µµm£:•ŠŠÔTUµ¢×˜6͆ÐÐ ‘—ÈH!çá1wÂ×:Ô×w––KZZ.YYU̘aËš5‘¤¤Ä²zu¤É»s†xî¹Ïرãññ<÷ÜÍŽzèÞ}÷‹ùk!¸È»ïžæá‡ßùÆ8¿ÇÏ??~îª;Žñ»ßíÃ`w÷9:ô+íø÷¿3yòÉøå/×ñðÃë~Ðc47÷°gO¯¿~œîî®»nÛ·¯ :Ú{Œ¾‹Kg䤻ôôRNœ¨ ¯Oƒ··#ÉÉ¡Rç“¥EÛ[Zz()i„(¡ªQz_ðôt~Mò$,ÌS*(—GÑ/bD]ì6˸GN‰Ùw8{ötÉI,QŽRtO쑲tÇë÷ÑØØ5,>}]ŒêëÓ‚#*(HpAÍš5-ÍÍÝ”–6JæÏ÷cáB?âãðö–ÝO222?Yl’1 µµmìÙ“ÉÞ½§èëÓ’2;ïLdñâ@S/Í¢1ìߟóϦQW×ΦMËxðÁ+qw·7õÒÆ­VO] ‰Öó‘cŸ]\fãëëŒ ‰î$Ñ¡d1·KA«Õ“—WÇ™3ÕR,®©©‹iÓl˜?_‘/†NT¹¸H{{……õ7J¢RII#ýýC( üüœ ÷”n‘‘^øû»Lú¸Duu+©©9¤¦æ’“£bΜ\ye))±¬\n6§ÊÇŽ•ð«_½Ogg?¿ùÍÕÜzëÒoìêèèãæ›_fïÞ{'ägìÆ_âäÉòï›–. æ?ÿ¹o\ß`0’ð'jkÛøøã‰þìÍ7OðØcïóóŸ_ɯ~µá?–F£ãóٱãEE ,[Äöí+X»6ÚäQ6ÎÀ¹s5¤§—’ž^ÊÙ³5hµzÂÃ=¥ÈÝÒ¥Aë>¬«ëܖ½ËÔ¢P(ðõu"4ÔCzý u'$ÄÝâÞC,™á ItC©ÕßwH•;³²Ràêj?|pt¡Ô\ø\øØ¦2ŽMM]”—·PYÙLEE3ååÍTV¶H1hñ°ÍÁa …‚ÎÎ~ššºÐë ¸»ÏeÁ_âãY´Èèh³yŸ’‘‘±d±Ifâ0¤§—²kW_|Q€»û\î¸#[o]Š««eŠš#GŽóÌ3©Ôó£-ä‘GÖ[üT’îîAjjZ‡{ „ûêjÁ©T_ß!u·ˆÓ]DIt'‰÷–~­Õê9w®†ÌÌrNœ(‰[¼8@Ú ÆÆ*'ì¢g``ˆÒÒ¦¯Dàhié„xJd¤×p7Š‘‘Þ„†ºO)Çbqqii¹¤¦æRT¤ÆÉÉŽõëcظ1–ääP³:qïèèãw¿û˜÷ßÏ"%eO=uý÷ŠÔ—ÚSt¹47÷÷¿õµçÏÿaÜ\6ÕÕ­>\Ä–-É_û³wÞ9Å£¾ÇOºŠÿùŸ«ÆäñŒF#e¼úê.Æ××™»îJææ›—˜Üý&Òß?Ä©S•¤§—ž^FQ‘+« eãII!ÄǘÕÏú¥":3ª‰ÂB5ee”—7£Õê±±±Âßß…ð𠨈ˆ©!¢›#F£‘ææÉ%”š·K××wÐÚzá0jæÌi’Jœ+ö/šsTþ‡ Õꩪj‘Ä'Qˆª¨h¦³³€éÓm˜1ÖÁAkk+"">N’CZìmôð˜kÑbêWio¢™²²&©l¿¨¨ææn¬­ ÂþmΜ„‡{²lY0kÖ„3ož¯ìò“‘‘‰,6ÉŒ••-ìÚ•Îûïg¡Ó¸þú…lÝšd1Bˆ¹SRÒÈŸÿœÊÁƒù,YÈÿüÏU£¢æÂÐŽÚÚvª«[©­m“„%ñs±twæÌiÒ¨_gITò÷wA©tšT›¹¯¢×ÈË«ãøñr23Ë8}ºJêEIH&!!˜ÄÄqŸ ÓÒÒ3Ê¥$žä ae¥À××™¨(ïá"]!çççl–ÊDa49{¶†O?Í!--•ª¥Ò‰cII‰eÁ³½°T©Úyâ‰ÿpäH1·ßžÀO\…½½eÄŸî¿ÿ þùÏÛM¼’Ñ|øá~þó·Ù²%‰ßÿþºoŒ þ:;ûyããìÚ•A{{/W_ÇÝw¯ 6V9¦3V¨Tídd”’ž^Fff--=RÙxRR(ÉÉ–S6~±h4:ÊÊšFtB ÅäuuFfÍšFh¨‡4QS~à%;¼ÍƒÁHKK÷pÇ£ >©Tí’(¥RµK{kk+<<æJâ“(D‰¢”¹L¤ý¡…Ÿë¢"5ÙÙÕTUµÒÝ= }B!¸šƒƒ=X¶, b‰‰ñ1áªeddLŒ,6ÉŒ-ƒ‘C‡ŠØµ+£GKP*ؼ9‘[o]2éÜ'¦B¥jç¯=ÀdîÉO\Åš5&]Sggÿ(w’{«®n¥±±KêYqq™=ìF¦¥Œ–¦’Æ`0RPP/ÅâNž¬ §gw÷¹$&“˜LBBȸŠµÃ§•jŠŠ(*j °°^r’¹¸Ì&"ÂK:#p3gZvq¬Ðë œ>]EjjŸ}–GCC'AAn’Àd®þ"z½]»ÒùË_>ÃËËçžû±Åõ噫ØðÉ'çxà7¹óÎ$þð‡Ëchµz>úè,¯¼r„¢"5‰‰ÁÜsÏ*V¯Ž0[qó»ÊÆ“’BX¾<Ì"ËÆ/–Þ^ eeM©)-m”&ŒŽ b¾ B ,=>Yiié%@‰Î(q I¿0%N¡Pàæf¯¯“Ó)Fùø8ZtRO B?^ΩSÃe»¥É¡VV œgêÎâŬ]Md¤×¤>@”‘‘‘Å&™±¡»{€½{O±gO&55m$'‡²ukW\e¶_K£µµ—¿ýí¿¼ñÆq¼½yôÑ \{íü {~»»¤ '••-TV¶P]ÝBee«4ÆÆÆ §¯¹“DÉ\zFLAQQ™™ÂéþÉ“•tuõãê:‡ÄÄɽ4Ö±8£ÑˆJÕ>,(©‡E%5ÕÕ¸™3§ê.]àQ8/\\&¶TÜÐjõ?^NjjäÑÚÚKx¸'7ÆrÕUó÷4õ/Š¢"5?ü.õ<øà<øà•¹é7g± à“OÎsÿýoð‹_\Éï×ÇJO/åå—sôh ®ÜsÏJnº)žéÓÍÛMñmeãaaÒ¤;K.¿X¾:T¡°P£úû/8JŘ²(B¸LiG©%ÐÑÑ7BŒê´õ@± IDAT†˜ˆÂ”8ùÀÕuŽÔ%PNÃNoA²DgTCC'Ÿ|ržŒŒÒo fâÎÒ¥A,YHD„×”:t”‘™"Èb“Ì£¸¸Ý»3øàƒl¬¬ÜtS<[¶$ìfê¥Mº»yå•üúêQfÏžÎC­ã–[–ŒËbo¯†ªª–¢R3••ÂH]±PÓÖÖ'\ rÃßß…€Á©äãã$÷p ÓÙÙϱc%>\ÌÑ£%46váâ2›eË‚Y¶,˜„„ BC=Æìñº»).¾ (5PRÒ@OÏ 4EIt+EDxɸ‹@£Ñqôh1ii¹F^†Îž=°0O‚‰‹ó%6ÖG.!—‘±ld±IæÒÑë <˜ÏîÝédf–èÊÖ­ÉÜtSü¤?œHµìÞÁ?ÿù%:Xöm˰Ýz``ˆÊÊ–Q.%A`j¡¹Y°ó‹%AHr%(È]eAé[Ðë äæÖqäH1‡qþ|-VV –, dùò0V® '*Êëw¸ètªªZ¤è›x1¢RµÂd>APº *……yNiWÙ¥Ðß?Ä—_’ššË¡C…ô÷±`¿$0)•N¦^â%sî\-<ò55m<þx [·&[ÌÅÉ·a bÀ¿þu„?þñžþf~ò“%ò˜ÍÍ=üûß¼þz&}}n¼1žíÛ—©¸=|_ÙxRRÑÑ>ÿ³|)h4:)‚WRr¡_¯©I(ovt´#2R D§jX˜‡üúotwJ‘¼šá¾¶¶•ÚÚöQ}—¶¶Öx{;J—‚J¸÷õuÆÉÉÎÄßÉ·Ó×§!'GEzºð;^T¤¦¿HÚ'‰%ä11>,ZäOl¬’˜‹|–‘™¢Èb“ÌÅÓÞÞÇÛoŸdÏžL:Y½:‚­[“Y±"lÌKP§2:÷Þ;ÍóϤ³³Ÿ»îJæÖ`o?ó¢ÿF'‰HÕÕ­TU .¥ª*¡C „RKooGÉ™èJ@€+B—’%Fk&šææ.âðábŽ+¡³³¥Ò‰U«ÂYµ*‚¤¤ìì.“ßÒÒCQ‘šÂÂɵTRÒÈÐ+Ý÷$*ÊKŠWŒw‰ød¤»{€Ï?/ 55—#GŠÑjõ,[Ć ±lÜc±nÁA-Ï=÷¯½v”¥Kƒøë_oÆ×w|zÀ&K›þò—ÏxñÅ/عs k×Nܤ¿!Þ{/‹×^;JUU+kÖDp÷Ý+IJ ™°5Œ%ßU6ž˜Âòå¡“®lübéè裰°a¸¼Yx¿(.n¤¯O#9[GÆðÂÃ= t“Ž,˜¦¦îo£„{µº½Þn¡‘âÓ…{ácsëb¬¬l!;»šÓ§+9~¼œÚÚ6 #¶¶Öèõ #sæÌ$.NɼyJbc•ÌŸï+; ddÌYl’ù~rsUìÞÁ¾}g™>Ý–[nYÂæÍ‰øû»˜zi“ £ÑȧŸæð—¿|Fmm·Þº”_übí·fØ #uuíTT´P^ÞDEE³Ô¥ÔÐÐ…ÑhD¡Pàí퀿¿ "¸(Üûù9O‰8ÂX¢Õê9uª’cÇJ8r¤˜‚53fØ’ÄêÕ,_vYÑ*ñ´Z<¥bpj)ºèê:gØ¥$œT‹ÅÝò¿ßåÓÞÞÇy¤¥å’ž^ @rr(7Ʋ~}ŒYŸ_ §NUòðÃïÐÚÚÃo~s ·ÞºtR X’ØðÄÿá½÷²xÿýûX°ÀoBÛ`0òżüòaNª$*Ê›{ï]É5×Ì·ØC…‘eãe?^>ªl\ˆÝ…NÚ²ñ‹Áh4R[Û.ÅðŠŠª²²΀­­µ4/<ÜsØë§§ƒ©—.óÑjõÒ½ÚÚ6É %~.î-@Ø_|Õ %~îííhrA²·WÃùó5œ9SÃéÓ•dgWÓÓ3ˆ••‚éÓmÑh´ F\]ç°h‘? ø±`?óæ)år}Ó#‹M2ߌV«çÓOsصëgÎÔîÉ–-IÜpÃ"ùÅ{8v¬„§ŸN%?¿Žk¯Ï£nļžžA**š©¨h¦¼\”Ê˅χ†µ‹ËlBBÜ t“\JbÎÜKbÍ•ªÃ‡‹9|¸ˆŒŒ2úú4„†z°re«VE°tiÐ%=Ç*UûðÆÿB ®ªªîB‡Ð¿!lþ#"äÂî±¢¹¹gx‚\.'NT`kkÍʕᤤÄrå•Q—ä4Wúú4<ýô§ìÙ“ÉêÕ<ûìM“òâÑÒÄ&½ÞÀ]wíæÌ™jöïÿ¹ÉkrsU¼üòaRSspq™Ã]w%sûí ÿ³?²l<#£Œ3gª¥²ñ¤¤P–/ŸeãÃÐŽÒÒ¦Q]P%%44t0wî¬áƒ "Th¨‡üÜM"úû‡F‰O55‚ ¥R ÷}}àBDÏß_öòÕ{S¸¢ŒF#UU­dgW“]Evv5eeèõFi=CX[[IðæÏ÷cÁ?‚‚\'Õ¡‹ŒŒ ‹M2£ijêæ7Žóæ›Çikëcݺh¶lI&11ØÔK›”œ?_ËÓO§’‘QJBB0W_ÇÐn„¸ÔBS“{³µµ&0Е  7éìFP+sçÎ2ñw2y0äåÕqð`>äQTÔ€½ý ’“ÆãqáuñÞ×§5NŒ6ˆh”J§áHƒ'‘‘ÞDDxàjòSÄɆJÕNZZ.©©¹œ=[ͬYÓX½:’””XÖ¬‰œTâùÑ£%üêWïÑ۫ḎnXdê%–&6ptÓM/ÑÞÞÇþý?ÇÙÙt"r]]»vã­·Nb4¹ùæ%lÛ¶?¿É³ËÆ32J9v¬tDÙ¸’¤$aÒÝT)¿X:;û¿VH^ZÚ( ™ðós–Þ¯"#½ˆŠòB©t’/Þ'!mm½ÔÖ¶SS#t{ÖÔ´Q]ÝJuu›´'pwŸ‹¿ÿWE(üýqtœ8wpo¯†sçjÈήæÜ¹²²ªèêÀÚÚŠY³¦18¨E«Õco?“… áiÑ¢-òÿAU222ß‹,6ÉdgW±sg:ii¹Ì™3ƒ[o]ÊæÍ‰rzŒ]J'N”óÎ;§)/ofÆ [´Z½4Vt)¹(JÁÁn(•Nòä°qB«ÕsâD9äñßÿ Vwâëë̺uѬ[ÍâÅß)‰Sƒ ê¥ûšš6©ÜR,kœJBÎÞ^>%/ÊÊšHMÍ!--—üüzæÎźuQlÜËŠá“Îí×Ý=Àï~÷1ï¾{š””Xþô§puÜñ!K›@¸ˆ»úê¿ãädLJ>`r±£§g7ß<ÁîÝé44t±qc,wß½‚… ýMº®±¦½½ÌL!r—ž^*•ÇÇœ,Äî¦ZÙøÅR[ÛFqqB¼;?¿^êÑ™3g†ñE¨ˆO³ë’;µ£(A>®¯ï@«ö²öö3ñós–z@…{¡#ÔÃcî¸þ®FÊË›9w®–ìì*²²÷“Á`dÖ¬iXYYÑ×§ÁÊJALŒ7K–±lY‹âà ÞÊÈŒ!²Ø4•ÑhtìÛw–]»ÒÉË«#&Ƈ­[“¹îº“îbl"1Œ¨TíÃq·¦Q8qb Àôé6DGû,¹”‚ƒÝ,>Î`)ôô røp1äqèP==ƒÄÄøHSd¤××þŸÁA-%%äç×—º»FüFEy!ŸüN$¹¹*RSsIKË¥¢¢7·9¬_ÃÆ±,[l±Ý4ßÇÿ›ÏcýƒÁÀ3ÏÜÈÆ±¦^Ò„`©b@uu+ë׿À† 1üßÿÝbêåB -55‡—_>Ln®ŠE‹¸÷Þ•¬_3)˜ººŽá²q!v×ÒÒƒƒÃ,‚¥Ø]`àÔ,¿úú47RXXOAA½4Ä¢·W¸€÷÷w!*JŸÄ›|x9ùÑé Ô×wHTM JUUµR[Û&Åó¦M³ÁÏÏYrCùû_¤”J§qáE÷SVVgÎTsölä~š1Ö!ŒFv#))”%KX²$è[{Sedd. YlšŠÔ×w°gO&o¿}’žžA6nŒå®»’Y´(ÀÔK³(´Z=ÕÕ­”–6R^ÞLII£ôñW»””J'êê:ÉʪÂÙÙŽGÝÀÍ7/ž”›xs¦©©‹ƒ 8p ÌÌ2–. býúhÖ®µnl좰PMa¡p’[T¤¦²²½ÞÀ¬YÓ†§À]•ÂÃ=åN‹ Ä`0’•UEZš 0Õ×w T:±qc,6İhQÀ¤þýjkëå7¿ùˆ}ûÎrÓMñüþ÷×M©YK›.æŽ;^ã·¿½–mÛ–›z9£8uª’—_>Ì_àëëÌ=÷¬äæ›3c†­©—6.FJJ%×Ó‰åôöjðòr ))DŠÝÉßÑh¤¦¦M:„ß?kkÛ¡ **Êk”æ)nN!š›{¨­&$ÕÕÖ&”–[Y)ðòr¢\%AJ˜˜ì2f®9ÑýtæL5gÎ"TYYF£‘éÓmÒc4ñòr$99”„„ ’“Cñð°Ìé´22&B›¦™™åìÞÎÁƒù¸¸ÌfÓ¦elÚ” o ¾­VOEE3¥¥”–6QV&Ü**šÑjõXY)P* õ 4ÔƒwÉ¥4mš ;vãÿø+|ðJî¼3Ñäщ©DII#æsð`çÏ«°³›ÆêÕ¬_ÃêÕÌœ9²²&òóë).V“Ÿ¯¦°°žöö>¼½GmŽ£¢¼ñ÷w™ÔB†¹¢Õê9~¼œÔÔÈ£µµ—wRRæ±~}4±±JS/qBøøãsüæ7bkkÃsÏý˜Õ«#L½¤ ÇÒÅ&€—^:ÄŸÿœÊÞ½?5Ë^ÄŠŠf^yå￟Ŝ93¸óÎ$î¼3Éâ'5~:óçk¤IwYYUhµzBC=†Å§Bä(ôEÒÝ=HQ‘ZŸ ê))id``+‚‚ܤC1Š'ïK§==ƒ’U[Û6BjA­îÄ`.W== tÁßßU „ûº·îîäܹΜ©&+Kˆßõ÷k°²²Œ F¼¼X¹2ŒuëbHH–;Ÿdd¾Ylšìô÷ñÁÙìÞAqq‹p×]ÉlÜ;ic%—Ëà –òòfÊË…)-eeM””4R[Û†NgÀÆÆ __gÂÂ<v'"“à`AXúꉯNg`ïÞ“¼ðÂAz{5Ü}÷ î½w•ì|™ŒF#çÏ«¤ÎžêêVÜÝç²vm ÁØÛÏ ¤¤‰ÂÂz Õ”•5¡Õê™6͆°0a·’§˜JnsdpPË‘#Ť¦æòùçtw«$%%–õëc q7õ'Œ¦¦.žxâÌgÓ¦eüú×WOÙ×”É 6Fî»ï 22ÊHK{¥ÒÉÔKúFZZzعó¯¿~FÇO~²˜»ï^9iÊÄ¿±l\ŸòóëP(IJqA|Š”:—€^o ºº•‚õ°J¢Ôja"ž³ól©„\ BBÜå}ëehHGMMÍTUµRUÕ2|k•~fDG”8•9 @£]Q*.ëgGt?=+8Ÿ23ËP©Ú1Œ(  P*IL æÆã‰÷—»UedF#‹M“•êêVöìÉdïÞSh4Z®»n[·&ãc꥙œþþ¡¯¹”JJ¤7[[k‚‚Ü q'$ÄÐPwBB<vûÞ7+£ÑÈþý9<ûluuílÚ”À/~qå¤/ë5Ο¯eÿþó|úi*U;J¥‘‘^ØÛϤµµ‡ÂÂiŠŠ›Ûœá“ToI\ v—'Á™ Ý݃|ùe!ii¹:T„F£%>>`8"‹ÏÔêþ0¼÷^¿ûÝÇ88ÌäùçBB‚ù9a&’É 6 d\sÍÿcÚ4köí{Ь/¦ûû‡xçSüë_‡¥2ñ{ï]Åüù¾¦^Ú„ÒÑÑGff9™™B쮲²…3l‡ËÆCIL !6ÖG¾è¼ :;û¥Øºè„*.n@«ÕckkMHˆû¨øzd¤—I§:ʘž!ª«[©¨h¡ºº•ÊÊIŒjnîÀÆÆ ']ñ÷w!(è‚ åããxI¿«½½Ο¯%3³ŒÃ‡‹)-mdpP €µµJ¥Ë–qÓMñ,]4.ß³ŒŒ!‹M“ £ÑÈÑ£%ìڕΡCExz:°ys"·ÞºtÒÛÞ¿‰îîAÊË!It)•—7SW×ÑhdÚ4‚ƒQ)<Ü“à`7BC=ð÷w¹¬ ÿ±c%<ýt*ùùu\wÝ}tÔ9ù599*>ø ›?>GKKsæÌ`Ö¬ittô14¤—„CQPŠŽ6©²øg~´µõrð`>ii¹¤§—LJÊ<Ö­‹ž²ÿf*U;=ö>ÇŽ•°mÛr{l£<é‰É#6TUµ°nÝólޜēO^eêå|/_-OL æž{V±fMÄ”†P_ß!¹ž22JijêfîÜY$$‘”JRRÈ”r`Ž5:òò&i(‡è„…w÷¹Ò4DG{íCd¤—u”‘èìì—"y••-#Q­tw bÑôé6RO,)§G—£®·w}ûÎññÇgÉÍ­£§g@ŠÝ-_Ê’%ÌŸï'O½”™ìÈb“%SUÕÂÎé¼÷Þi #7ܰˆ-[’÷4õÒÆ£ÑHmm»$*©).n¤²²΀­­5aa„‡{î)•uûúŽÏèùŠŠfž}6ÔÔ\,ðãÉ'¯’-³c„V«§¬¬‰¼¼:òòê8w®†ÂB50åÏÆÆš€’“CY¹2œÈH/¼¼L¼j™‹¡ªª…´´\RSsÉÉQ1{öt®¸"’cYµ*B>õ*+[xä‘wÉήâþû×ðÐCkå¡_a²‰M?ÿùÛ9RÌ_öõuþšØ^[ÛÆþ“ŧŸæRZÚˆÑ(t> FíX¸Ð… ýY¸Ð¸8?fÏ–KÇe& ²ØdiFÒÓKÙ¹3/¿,ÄÛÛ‘-[’¹õÖ%“jS×ÙÙOAšÒÒ (.ÜJ½½ aú[D„'aaDFzî1a¶éÆÆ.žþ ï¾{ŠÀ@7žx"…uë¢Çýq'+==ƒÒ„šü|Á"/v4ØØX1}º-}}ì즱jU›7'2%ã–Ja¡š´´\ÒÒr).nÀÉÉŽõëcظ1–¤¤YHF§3ðÚkGyî¹Ï rão»…¨(oS/Ë,™ŒbS_Ÿ†õë_ À…×_ßnêå\ju';wãÍ7O`4¹ýöîºk¹|0Ìà –Ó§+IO"wùùõÄÄøH®§øø€¯ ‘¹|ŒF#UU­äçדŸ_Gnnõ´µõ¢P(ðós–ÜO¢åæfYb¯ÌÄQ_ßAee‹4P¨¢¢…ŠŠfÔêNŒF¡÷U©t¡Ü¤éÔAAn8:ÚÑÝ=È‘#E¤¥åqèP}}šáë7#]]X[[â΢Eþ,X ˆPÁÁnòžWÆR‘Å&Ka``ˆ>8ÃÎÇ()idÙ² ¶m[ÁÚµQ•Óht”–6ŽŠÀ7JEγˆŒô",Ì“ˆO""¼ ó0‰êßÕÕÏ‹/~É®]é8;Ïæ‘GÖsÓMñXYÉoKssÔ¹ nújjÚ0ÃÿÖÞØÙÙÒÐÐEqq¶¶6¬_Í~´+¦t4Ã’0Œœ;WËgŸå’ššCMMžžlØ LK–ZôëÖxPTÔÀ#¼CAš‡ZËý÷¯‘;G¾ƒÉ(6ÐCwÕUão»…nXdêå\6==ƒ¼þz&;v¤ÓÞÞË5×Ìç¾ûV!GÌGÒÕÕOff¹»«¨hfútâ㤾§yó”òëå8ÐØØEn®J:äÊÍ­£¾¾wwûî'Á åë+wpÊ|;ýýCTV ÂSyyeeÍTV6SQÑ"U>89ÙIS¬…Ž(7z{9{¶†´´ZZz tÁÃc.ýýZŠŠÔ j±·ŸÁÂ…‚ø´`? øÊnHKA›Ìµº“Ý»3xë­ô÷ñ£-`Û¶åwÚ-öí\ˆÀ 1¸êêVt:Ó¦Ùê.‰I‘‘^DDxâînú^ƒÁA-;vãÿø+|ðJî¼3Qvc|F£‘êêVòòQI˜ÄBOooGiåB‡±½½ƒ¬\Æ~´u뢱³“íÄ–€NgàäÉ >û,—´´<ššºð÷w!%e7Ƨ”Oæ¾­VÏ‹/~Áßÿþ9±±>¼ðÂ-r™ðE0YÅ&€§žÚÏ;ïœâÈ‘Çqq±ìI[Z­ž>:ËË/¢´´‰+ÂøéOW‘œj꥙%];V*‰OMM]ØÛÏ`Ù²`©ó)4ÔÃÔËœ´Óð„ƒ0Q„ª¬lA¯7`o?“èhobc}¤I¶!!î²(óFêë;©¨h–„¨òrA”»emm­ñósÆÉÉŽÞ^ ÕÕ­ jY´ÈŸ¥Kƒ™={:ÅÅ œ9SMMM …‚à`7Éù´p¡¡¡òÏ¢Œ9"‹MæJVV;vã³ÏrqvžÍæÍ‰lÚ”`Ï‘±(¡´±žÒÒ&úú„œ¯¯^R·Rd¤þþ.fwНÓØ»÷$/¼pÞ^ wß½‚{ï]Åœ9r¾$Z­žââ†Q18±#ÁÚÚŠ  ·'„Ba§ƒÃ,ÔêN>úè ï¾{šòòf""<¹ùæ%\{í|ÜÝíMýmÉ\ŽôôRRSsøï èèè#"‹””X6lˆ%"bröÇ99*~ùËw¨®nå±Ç6²mÛrÙ)y‘Lf±ipPËš5Ïãÿþu‡©—3&F¾ü²ˆW^9Lff9ÑÑÞÜÿRRæ™Ý{¿9QVÖ$ OÇ—ÓÝ=€»»=II¡’ø$GÇ—¾> EEjòóÕäåÕ‘Ÿ_'EýgΜFD„'QQ‚íCx¸§\D.sQôöj$÷SYYÓAª™¡!¡£T¡…B§ç\âãY±"­VOmm;gÏÖ“£¢¯OÃìÙÓ‰‹óá€òûÎs™ B›Ì ­VÏÇŸcçÎcä䨈‹óeÛ¶å\}uœÙƇ»$AFÆ¢¢¢¼÷"<ÜCr-™»SÅh4²Ï>›F]];›6%ð‹_\iq…­ãÁH!Q´Ÿ—•5}mÓ%:–""]8hëëÓ`ccEHˆ11Â>H!Q)ìELŒ’èho]¿ÕÂ[TÔÀ›ožàÃÏÐ߯aõê~ò“%¬^a¶BªÌ::úøüóBÒÒr9z´ÎÀ²¦Q IDATeAÃSŒYÄ]-…Ó§+yøáwinîæ×¿¾šM›–ÉñÂË`²‹M?þ>ÇŽ•räÈc“2¶]SÓÆk¯eïÞSÌœiË–-ÉlÝš„££,–\ ެ¬J22ÊÈÈ(#7W…Á`$<Ü“ääP‚Y¶,Xžl5A\Ø'Žá,"‰¹PBãció¡»{·Þ:Îoœ¤ºº—Ù¸¸Ì¡¯OC]]‡TPàŠ££VV ººú©­m£·WÃ̙ӈõŽÞ "”œ$gd±É”äåÕ±kW:}t;»éÜvÛR¶lIÂÓÓ´–hFGqqƒ$*åç«)*RK'6ÁÁîR^}d,Ê’9¾–§ŸN%#£”5k"x≫ˆŒœE¦ß$$æç×ÓÒ"‰¾¾ÎDEyr,]ŒØ×§áãÏñöÛ'9{¶†À@Wn½u)?þñbyƒe45uqð`©©9œ8QŽ••Ë—‡’’2µk£ä ÂK¤·WÃ3Ï|Êž=™¬\ÎsÏýØä¯õ–ÌT›::úX¶ìO<ôÐZî¹g¥©—3n´µõ²kW:»wg04¤ã¶Û–qÏ=+åxØ%ÒÓ3ÈÉ“’øT\Ü€µµ‚¸8?ƒIJ eÑ"9â5ÁÔ×wPPPO^^=yyÂK,"÷ð˜+Ï›§dÞ<¥|x#sQœ=[Ã[oä“OÎa4Ù°!–¤¤`ll¬).n¤¬¬‰ÒÒFTªvôz66Ö¸¸ÌfÚ4úû‡hoïÁ`Ì#'ßEG{OÊà “!‹M^oàÀyK—™zYã†Á`¤²²…Ü\¹¹*ÉÞÓ38fBbNŽŠ·Þ:ÁGE§Ó“’2Ûn[ÆÒ¥²ƒÃÌ©©iãÀ o¾y‚W_=Jkk×_¿ûî[-æ_&­­½?.LºËÌ,§ªªexÒ] »›7O)ÇjL@GGߨ^n®ŠªªVŒF#îîs‰‹S+ˆOqq¾r4Ræ[éédß¾³¼õÖIrsUDDxrljüøÇñÌœ9ÁA-ååB1yqqeeM””4R[Û†NgÀÊJÁŒÓÐjõhµ:ll„xÞÒ¥ÄDzp¡ŸE&UdÌYlš(º»xóÍüûߨլYÉöíËIL ™° pñtåB4JMmmÎγGÄà„{—I[VÛÔÔÅóÏäwNèÆO¤°nÝäêÅ0ŒTT4 KuR±eo¯[[kÂÃ=‰UãCl¬^—-$ö÷±oßYvïΠ  žðpOn½u)7Þ¸Èâ]o“’’Æá r¹äç×3wî,Ö­‹bãÆXV¬ŸTâòDÓÔÔͯý!©©9Üxã"~ûÛkåÂÎ1bªˆMCC:V®|–Õ«#xê©ëM½œ A«ÕóÁÙ¼ôÒ!*+[X»6šûï_ÃÂ…~¦^šES_ßAFF™™eÒ¤»9sf°tiII!$%…î) ™ˆîîAé 0'GÅùóµ¨Tí(•N’óiÞ<_bc•ØÛËP2£ÉÍUñæ›'øàƒ3Ìš5-[’غ5ù÷áZ­ž²²&ÊË›(-¨‚‚zÉ ¥P(%;»é»²xq0W\A||€I 2‰,67ååÍìØq”ÿü'kk+n¾y1[·&{‰n]]99µœ?/¼iåç×ÑÙÙ/åÆÅ8”òð˜¶Ýîî^|ñKvî<†³ólyd=7Ýoñ¢š^o ¢¢™¼<¡+@,ïîë-,ÅÆú«$2ÒkLº’*+[س'“wß=Íà –k¯Ïw$˜UߘÌhŒF#¹¹u¤¥ SEE3nnsX¿>†””y,[,Ÿtÿ@ŒF#o½u’§žÚƒÃ,ž}ö&V¬3õ²&SElHMÍá¾ûÞàøñ'§Ô ³Á`äàÁ|þñ/8w®–„„`î¿ «V…›zi“‚ŠŠfÒÓñéøñr::úpvžMbb0‰‰‚øàjêeNiÚÛûÈÉQ‘“S;,@©hjêB¡Pà"‰OqqJ¢£}ä’}@ˆ&ïÞÁ®]é é¸å–¥ÜsÏJ||¾ÿýC«ÕSYÙBii#……j²²ª(/o¢¥¥WŸ ˜3g&¾¾ÎÌŸïËêÕ¬Z.Çïd¾ YlŒF#‡³cÇ1Ž-ÁÏÏ™­[“¹ùæÅã2¢©©›Ü\áD< ioïÃÚÚŠà`7ââ|¥BÂÈH¯)9cpPËÎÇxñÅ/±±±âg?»‚-[’,ò…Q–DQ)7·Nš‚bkkMD„—$*‰Ž¥±,áÖë |ñE!ÿþwÇŽ•¢T:qÇ üä'Kd«·™¢×Èʪâ³ÏòHKË¥¾¾¥Ò‰cII‰eÁ‹\Í…òòf}ô]Μ©fûö<òÈúQeƆ©$6¬[÷<‹òÇ?þÈÔK1 eüóŸ_rôh QQÞ<ðÀ®ºjÞ·¥¹4 #……êá¾§RNª¤¯Oƒ··£Ô÷””2e&Í™¯îùsrT´µõŽÚ󋼨(oÙ<…éïâí·Oòê«GhlìâÚkpß}«ˆˆ¸ôNZÎ@uu+¥œ>àç‹»wS‘––‚‚ñíªªÊhÒDvvMÑ©“ììšÀÖ¶ ø|Ï>7‘ Tl’„””ؽ;† ¤¤ƵÄ î°¶6ú¬ã¾~]Œû÷ÓÞùô"—õXjÚ´xýöÛ?"ô‹ûÆλ‡¿þº€ÔÔlŒÝ Ó§÷‚6סUJ(!>>£ÜŒ¥èè²Â’ššÊ›ÂR³7=–¤[XzW\\:¶o¿ oï;¨WO _ÝcƸJ})(©¾ÂÂøúÆâÂ…H\¹…¼¼"´nÝ _|a~ýìannÀuˆ éÎ$Ì™siiÙ˜=»/&NìLK¥¬®›„BÜÝ—aĈö˜1£×áp.99 7^ÇÑ£w ««‰»`ÌW¹ù IÞ– 44þþq JÀ½{©`ŒÁƦ ÜÝ-áêÚ;šAK‹6‘Œ•í2\V|J÷íÌÏ/†ºº Zµj {{cØÛ7C›6ư°0 Y‚uÀÛ•7kÖ\Fxx ¾øÂsçöƒ……dß¾xñ ¸q#áá‘’ò%%Âr÷iÐ@ 66Fpt4llŒ`aaH…PÅCŦÏœˆíÛýàã>¼¼Ü0jTÇ-%** *êÉ›©±eŸL$$d@$bÐ××O‹}[X¢­ã+çKÏáþý4 äˆ9súÊ\a¤´ôma)UÜg)*ê K ®^VXz[T²·o^ëŸD1Æpóf¶lñ…Ÿ_,ÌÌô1qbgñîDväæâêÕh\¼xׯ?DII)Úµ3E¿~e¦ºÔ㥶åæaÙ²sØ·/]ºXaÙ²á06Öã:¬:¡®›`Ïž@¬\y¡¡¿RsÖ722r±m›öí ŒãŠI“ºÈôKŠ 7··n%¼YvØØt(+óàèh"î÷Ô®©\¶*PTogÊ¿]™‚ž ¸¸ZZêhÕªi¹P¦¦¨Y¼óñy€åË/ !!ǷǼyý`hȗʹD"†„„ „‡?†¿ÂÂ#--"ƒŠŠ2D"Ñ›+ÁÜÜÖÖF°³k +«Æ°±iR¥^SDfQ±©ºJJJqòd8¶móCtôS89™bÒ¤ÎèÛ×¾ÊÅ@ˆØØtܽ›"žµû ¥¥"èèh¾³ãDYq©I])?*Åpï^*–.=ÿ8tïnƒÿýï ØÙq¿Œ¥¬°”þfÆRÙ¬¥èè§âÂ’]SñŽpööÍѲ%wSœ‹‹Kqüx(¶móCll:ÜÜZâÛo» {wZ*'C²²^ãòåû¸xñ>üýã..øâ ôéÓšŠÑµàâÅûøùçã …øí·Á:Ô‰ëꔺXl** M›_±dÉP ÞŽëpdJnnöì Àöí7‘›[ˆ#:à»ïºÉÜMŠ*+ë5ãÅËî’“³P¯ž*Ú·o77K¸ºZÂÁ¡9Íž‘1o¯GÞö€º{7±±é„àó5`oßL\|rp0¦‹~#1œ8†¿þº€¼¼"Ì˜Ñ &¸×Ê5HAA îÞMADÄc„†ô1^¼ÈÇCýúê‰òó‹|~=XY½™Õ66F°¶6¢=ò¡b±) ëÖ­ã* ™VR¢„ˆC”–òШQ!š4y¾}1mÚ´þc ÷î¥âܹ{ I,÷IBëÖÍÊ-…{÷Ѻuë 퇥ÒÓµ  >¿&&¹ÐÑ)þ¬ã=z´Æ?ûäÉKܹ“„ÐÐdÜ»—‚¨¨§(*ˆ Kÿ5ï.+,ÉÂr›W¯ °c‡?vï@^^† i‹o¿íòÑ&‚4>¹ß™™šàñÌ͵0mÚôìi'ñ?º”ßÊ=}ZéÀа-Zä@EE$•󸹹}òïKMÉ{~ccË.z¬¬^rIÍÕ$¿³fÁ³g¯pðàd)E%{FŒQåûŠDJJÀó篑žžee%XY5F‡-àäd ''Ó*Ïn¥ú‡d|`¼…V:‚>gfG]áéé ¡xúô^¼x¤¤çˆŒLý{)ovîÂή ¾ü²}w’æÅ©èí‹Í‡0Æðøñ ñN€o—@  ««‰víL1v¬+Ú·o6mŒez'À´´—Ø´é:¼ üôSo|óKµ? ñÉOOé_@Q~¹SÙë$Q~¹SÓüº¸XÀÐ3g"0qbg G%»>·ØAjN}{,- aii//7ˆD ¤!00qPUmŠíÛ¥ür¤*ùÕÔTC‡fèÐÁ ß~Û›Ž  xDG?ÃíÛ°wo K ¢¢ C´oßîî-¡¤Tûöí ür¤:¿¿Íš5ÀÞ½“pøp~ýõ®_ˆõëGs¶³®ªª²x%ȸq®ÊVbDDüW|ŠˆHÁ«WPUU±qC(+ópóf<¸@=½úpr2EÛ¶&o–…6ÿè.šTÿø<oÔ¹ï3ݼi€ví€x‹Q{ûæ>¼=ºu³©3Ÿ<*¢·[ɾm¦xï^ÙV²**J°²2‚££1¾þº#Úµ3E‹òÑH1116\ÉahÜX‹ ¨QiÛhB‘JJ< äˆ'ÂêT±‰(%%žøò»ïºÇ›`"×a‘j²²j +«Æâÿ‹De;àEG?Åýûi ŠÇÁƒ· «Û—Ã(IM|õ•3ÜÜZbúôøâ‹5˜9³7¦Ní!«3tu5Ñ­›5ºu³P6 )) aaÉâåw©©/ ¡««=½úHNÎBxøcdeåLLô`o_Öùík‘ºÂüL­[¿ÂÒ¥¿¡aCM4kÖ¶lT|~g´jµÙÙùPVV‚……š£OŸV°·7†]¹Û èÑ£çX¹ò"Ξ½‹-ô±bÅ êDã•B䌻{KlÙ⋜œèèhr!„@I‰33}˜™é£eû640œÛàHµ5kÖÞÞS±m›–/?7b°eËX©íXWS<ÞãîË/Û(ÛL#22áá)o Pe…&%%ŒŒ€Ï×@bb&‚‚âñâE>x<5R‡ºz Žb¢bÓgjÔ¨NN&\‡A$H ÈÄ´i=áàЭZ5…–VÍšÍÉ‚gÏ^aõj933lÚ4_|á@;ËBˆœj×®x<nßNBÏžv\‡C!Äç׃P˜Ëu¤†””x˜<¹+ºt±Âĉ»Ð§ÏjlÛ6íÚÉvQ¦^=Uñ²Ï·22rÞô~*k@~÷n J ©©cc=çq±b£b!ï),Œ¯I—WÙÙùø÷ßkص+ÕÇß…áÃÛQ‘‰Bä\ýúêhÕª)BBQ±‰BˆTY[áâÅ™øñÇ6ì_üþûŒëÊuXÕbh¨ƒ¾}[£oßÖ¡P„ØØt„‡?FXX2|}ïs¡â¢b! $?¿[·úaË–PSSÁ‚ý1fŒ+-—#„âìl†D®Ã „Rhk×î]ãñÏ?W°`ÁqÜ»—ŠeˆËmÏWee%ØÚ6­mŒÝ 2xz&q–BúìN_ ؽ{·B©\^^–/_.ÑcæççcéÒ¥=&×j#ŸëôéÓ¸}û¶Ôޝˆy­ŠÒRv츉N–`Ë–˜<¹‚ƒb„ÎThz£º¯#¥¥¥ˆŒŒDrr²ô‚"SÝüæää <<™™™RŒŠHJMÞ¼zõ iiiRŠˆ[mÛš 22 ¥¥"®C!ï¨î8ÍÍÍExx¸ÂŽSESÝüfff",, ÏŸ?—bTDRª“ßäädܺu«ÜWAA”#äÇÃO?õž=“páB$† Û€/^sV­“µëí—/_bÅŠŸ¼ßÇÆ·4¯Ÿ?»ØƒÍ›7K"–Jåääà·ß~“è1óòò°hÑ"‰“kµ‘‹Ïåíí   ©_óú)7nÄÀÃc%þüó† k‡  …øé§^rÝkJªó: +++ >ðòò’npä³U'¿›6mB³fÍ0zôh˜™™aÞ¼yÒ Ž|¶š¼X¹r¥ÌÿM¬)ssB¤¥es yGuÆéÆÑ´iSL˜0­[·Æˆ#PRR"ÝÉg©N~çÎ KKKLœ8-Z´Àüùó¥ùlÕÍoŸ>}0xð`ñWRRݘÓ£‡ .]š‰—/ 0hÐ:<~ü‚ëj•¬]oçää`ÇŽUº_eã[š×ÏÜïaH©‘¸¸txzn§ç˜›ëãúõ¹øõ×AhØP‹ëÐäž§§'¾ÿþ{ÄÅÅ!..çÏŸÇ¥K—¸‹HÀ‹/0mÚ4œ?ÑÑѸwïÖ­[‡ÐÐP®C#rþüyxyyaåÊ•\‡"5ÆÆz€ää,Ž#!5‘‘‘3fàìÙ³ˆˆˆ@RR"##±qãF®C#ðàÁ¬[·‘‘‘ˆˆˆÀ;w°jÕ*Ü¿O}aEBB¼½½‘žž.þ²³«;=ôLMáÌ™iàó50hÐZÜ¿O³3¹bjjŠØØX®Ã¨”DŠM"‘Ó¦MŸÏ‡–-[ ìM½‡‡V¯^&Mš@__;wîÄìÙ³¡¯¯###>|X|œC‡ÁÂÂ***022ªôâÙ³gannMMMxyyaΜ9¸páÀ××PWW‡µµ5NŸ>ýÑØ·oßhiiÁËË "‘|OI—D.233Ñ»woìÝ»ºººˆŽŽ®47o{àÀ˜››CKK ãÆƒP(>|¦¦¦ÐÐÐÀàÁƒ‘““#޵²\UwÜ|ˆ¢åõ]¹¹…øùçcððX‰çÏópìØTìØ1¦¦¸í“.\}}}¨««£[·nå–|jŒUe<øûûã‡~ÀôéÓÁçóѸqc¬^½úƒ±Ü¿®®®¨W¯Z¶l‰ƒ(›Õ”””„éÓ§ ''§çêÕ«°³³ƒššÚ¶m+.Z|,–êÄ)Oä!¿ÙÙÙ …hß¾l‹\sss4jÔÏž=ûàq(¿ÿ‘‡ü¾åàà{{ûO>&yͯ¶v=¨«« 3“vÐyŸ<ŒÓÐÐP´hÑ]»vèêê¢OŸ>ˆŠŠúàqäuœJƒ<ä÷éÓ§ðôô„‰IÙnÕ666000ÀÓ§O?xÊïä!¿˜˜KKKäå副y*£¨ùÕÓ«cǦ¢U«f6lüý㸩ÖHªöñ±ñ^Ùø{ÿ:ýÆ0`€øçªZOù©\?³÷8p€}àÛ•:{ö,ãñxlæÌ™,??Ÿùûû3æííÍž={Æ”””Ø/¿üÂD"Û¸q#À–/_ÎD"[±b³°°`Œ1–››ËÔÕÕÙÉ“'YQQóóócJJJ,33“¥¦¦2uuuÆc‰‰‰¬~ýúìÌ™3¬°°-]º”)++³}ûö±ôôt¦­­ÍvíÚÅŠŠŠØ©S§˜¦¦&‹‰‰©÷³gÏöí·ß²ââb–ÀtttØõë׫üØGÅFUåûWWu/©\¤¦¦2 6dÈIJ²²*ÍͳgÏ˜šššøy|ôèÓÕÕe>>>ìîÝ»L]]?~œ²5kÖ0lÍš5ÍUub}ßçæµºã¿6 B¶kW³³[À~a‡ÝbB¡ˆ³xª;>/]ºÄš4iÂâããYnn.8p ›2e cìã¿ÿÕgÏže***lÆŒ,??Ÿ0vþüùr¯#¯_¿fFFFlÆ ¬¨¨ˆ]»vñù|È8À:vìÈöíÛÇÈ<==Ù­[·>ø˜RSS™¶¶6;yò$+((`K–,a&&&L$}4–Ý&­ç¿º5¿Œ16pà@6dÈvôèQ6eÊæèèÈ^¿~]á1Q~ÿ#Où}ËÓÓ“-X° ÒÇ$ïùmÛö7¶yóÏ:†<À8P¥ûÊã8eŒ±üü|fccölÙRá6.ÇiuŸÿšPäü³›7o²Å‹³-Z°¼¼¼ ‰òûyÉoFFÀ™††ÓÖÖfþù瓢痱²ë“32cãYìĉ0©žKZªsý'©ëí÷¿÷¯Óccc™––c¬êõ”÷I¢.ÂØÇÛ‰›4hÀJJJÄß[°`2dˆ8ð·oâãââ˜ŠŠ Œ1ÆÂÃÙ¡¡!cŒ±¢¢"öß}û„ÄÇÇ—{r–,Y†*¾ŸH$bFFFlß¾}lóæÍ¬sçÎåâ>|8[¼xq…¸ßÆ–™™)þž‹‹ ;yòd•»¬] H*©©© {òä cìã¹y{ܧOŸŠoïܹ3óööfsçÎe_ýu¹[·nÍÖ¬YóÑ\U'Ö÷}n^eµØœÀºtYÎŒg±Å‹O±œœ®CªöøŸÏŠ‹‹ÅÇZ°`9rd¹×‘dz¶mÛ–‹oÚ´ilÆŒlýúõLSS“õë×e:t`ºººlÚ´i2÷w†1Ê/cÕÏïƒX§NÄD3>ŸÏNœ8Qá1)z~߉DléÒs¬Y³™ìر;R?Ÿ¤U·Ø$‰ëí÷¿÷¯Ó“’’ÄŦªÖSÞ'‰ºc.6Id¹¹9TUUÅÿoÕªU¹% ZZe=dx<ÔÕÕ¡¢¢"þÿ[êêê CïÞ½annŽ!C†|pêVrr2Z¶l)þ?ǃ™™ --­Üm`ee…ÔÔÔÆ­¬¬ }}ýrÇ’w’È())¡I“&ª–###ñ¿ßëÉ“'Ö/ÛÚÚ¨Z®ªëû)¯ÙÙù˜1ã † ûÆÆ áç7‹ Ÿ¯ÁuhÕÖ¿ >...011ÁôéÓñòåKUcUfffPSSÿ¿U«VHII)wŸäädÄÄÄÀÔÔTüuøða¼zõ ªªªÐÒÒÂÉ“'1xð`,\¸ À¶mÛ*<¦÷_TUU1oÞ>^¼¦1Æ"""ÄëSRR˜ëܹ3óðð`}ûöeææælàÀÖŽ?žéëë3Ö©S'æààÀŽ=ÊclÑ¢ELWW—õìÙ“ééé±ï¾ûNüs&&&ì?þ`Œ•­MTVV.÷X\]]å¾g“$r‘ššZî¹ùXnÞ?.cŒuéÒ…y{{3‘HÄ<==™®®.ëÚµ+366f}ûöekÖ¬aŒUž«êÄʘdóÊeϦ‚‚b¶dÉYfl<‹õë·šEF¦rGUUw|¦¦¦2cccÖºukÖ£G¦££Ã¶nÝÊ«ÞûØx8{ö,311avvvÌÝݱ.]º°Â ¯#«V­b|>Ÿõèу5mÚ”}ùå—L(2ÆÛ·oÓÖÖf]ºta7f#GŽ÷Zxw¼1ÆØôéÓY£FX=ŸÏg6lød,»MZÏu)j~E"›2e kРëÞ½;344d}ûöee}Ð(¿&/ù}ׇz6)J~‹ŠÌÈh»|ù~!/Pž#ò2N.\ÈTøš:u*cLvÆiuŸÿšPÄü–––²2}}}Ö¹sg¦§§Ç¾úê+qßÊï‡ÉK~…B!1bkذ!ëÖ­kÔ¨‘¸±3cu+¿ó÷ßY³f3Ù©S᜜¿:ªÛ³IR×Û•wÆ*ï_§¿Û³©:õI×E“Rƒð· Ùõë×Ë5¥ª®œœvåÊvïÞ=ÆXÙæëë[î>™™™,::šÝ»wݸqƒ3333,¾ORR»|ù2‹­q,U!koI"ï«Jn*É®\¹Ârrr*ÜV[¹ª*®ŠM7oÆ2gç?˜•ÕÿØîÝœî2WU5ŸEEEìæÍ›ÌÇLJedd”»ísÆØ[gÏžeNNN¬¸¸˜ùùù±&Uþ\¦¥¥±Ë—/‹›ó½+==ùøø|ð¶÷ÅÅű˗/³”””*ÅRÝ8?D_ä)¿‰‰‰ìÒ¥K”ßj§üV‡<æ7&æ32šÁbbžÕøò¢ºK4N%7N“­bcò•ßÈÈHvéÒ¥*½Ç¥ü–‘§üFGG³K—.±øøøOžWQóû)+W^dÆÆ³˜¿g1TEM®ÿ$q½ý±ñÎXÕþ~…B–••%þ¿$~OjêCŦŠk¨^½zèÖ­ÛgƒÏç—›ؼys4oÞ¼Ü}ÒÒÒн{w;v ¶¶¶Øºu+JKKáää$¾ÏÛFZu•$rñ¾ªä¦2­[·FëÖ­?x[]ÏUnn~ÿý4 A¿~öøóÏa00íõØŸC]]îîî¼ísÆØûÔÔÔÄËÞ>¦iÓ¦hÚ´éo344DÏž=«t>KKKXZZV;–ªÆ)/ä)¿fffâÍ%>…ò[Fžò[ò˜ßÄÄL¨¨(Éu?i¡qZõÛä‘<å÷cïßGù-#Oùµ±±M•ÎWWó;{v¼xñ'îÄÉ“Ó`ccôé’’¸ÞþØxªö÷CII zzzâÿKò÷D$Vlª-ŽŽŽØµk–-[†ììlXXXàâÅ‹å:Â"®^ÆÜ¹G!аeËX…èËÄ5>Ÿ ®ÃðñXd)Ny"KÏåWòdéy“õü†‡?†­mS¨«ËÝÛ8¹' ùKÖÇ©<’¥çò+y²ô¼Õ•ü.Y2Ïžå`Ĉ8{v:}HRÇÈå»”ÁƒcðàÁ\‡AH¼|™E‹NáøñP Ö¿ÿ> hq–Bèܹ³Ì|ô±Xd)Ny"KÏåWòdéy“õü†…%ÃÉÉ”Óê*YÈÿ[²>Nå‘,=o”_É“¥ç­®äWYY ›6}ƒo¾Ù†Q£¶àìÙéÐÓ«ÏuX¤–О¹„Ô¢sçî¡k׿½{'aýzO*4B©²W¯ þÝ»Wmù!„Â% 5ìÜ9ª;v; K¸‰Ô*6R ^½*ÀäÉ{0yòôìi_ßùðð°å:,B!rÆÇ' jj*pwÿpÿB!DÖðùõ°ÿ·xö,3gFY?i¢è¨ØDˆ„…"…¢ ß÷õA·n!,,‡MÆßŸ_ƒ !„È»ƒo¡wïVPS“ËN„Bê(##]ìÚ5>>QX»ö ×áZ@ïT©@ˆÔÔl$'g!99 =Gbb&üübqqËQ¿¾: °°üq{öað`G,]: ::š\†O!DŽÅÅ¥ãöíG˜?ÿ®C!„BªÍÞ¾9Ö¬ù ß¿ÖÖFèÓ§j;6ùDÅ&BÞÃã© &æ’“³ðøñ $'g!>>e"33"QÙ´OUUeðx@I‰Pü³o Máá1mÚdgçcÓ¦18° '…BˆâX¿þ¬­àìlÆu(„BH èˆØØtLºçÎÍ€×!)¡b!o$&fbݺh4nüºw_ ¬ ”Íhzß»ßSVVÂÀmPZ*ÂÚµ>X»ö \]-qüøTêÔÎ „¢°’’žãôép¬_?<ëp!„›=»bbžaìØm¸xq&íP§ ¨g!o˜›`òd+'(+ šާ¤ÄCóæ 1pàZlÜx‹ÁÁƒ“©ÐD!D"þøã,ÌÌ 0`Í”%„"ßx<6l MMuüøãñÊ‘º*7·yyE\‡!q•Îlòöö®Í8jEq±çϧÀÒRVV:PSSþ¬ãy{{ãË/¿”Pt•ŸcðàÁR=ùÏ™3'} ññX°à8âÁãá“/€[·úÂÊÊ>>³`nnPKs‹Æ'wèõG±Q~[uóëëƒK—îãèÑT÷f5y{{CUU•ë0ˆ”P~å—TFCC Û·{¡oßÕøç̜ٛÓx¸ª””±yóCL˜`--Åú]©´Ø4bĈڌ£ÖhhXCW· ¨(EE (.~‘¨˜ãÈ>L (l.d™……Žù/ÞÇ‚ÇñüyÞwš{WQQ)ž? ®ÁÕÕîî– ?³‰Æ§b£ü*6ʯ|xõªsæÅÀmàæfÉu8œ8uêN:ÅuDJ(¿ŠòK>ÆÂÂ+VŒÀ´iСC ¸¹µä,.ÞñxÊhÜx*%xyyÖúù¥Ç«ssÖ¾øb ""R ¬¬‘ˆAI‰gg3 Ð}ú´Rø©ž¢"þý÷:Ö­»Æ€ÒÒŠËêôõµ±mÛ8øûÇ#00aaÉ„077€»»%\]-áâb ´8x„Bäc ãÇïDdd®^MC!„(¤yó¼qéÒ}øøÌ†¡!Ÿëpj…P(ÂäÉ{páB$àéÓ5G$q¡u²Ø”™™7·¥(((/RRâÇãA$b°·oŠþýÛ _?{´h¡Ïq´DV¤¥½ÄÂ…Çáㇷ¿:o›ƒÿûï7âû– $䇞€1[Û&ps³„›[K8;›AKK«‡C!DÆ-]z[¶øÂÛû{tè@;ÐBQLÅÅ¥0àhk×ÃÑ£ßCYY±[K3ÆðÓO‡püx„BÌÍõáïÿ3×aIZÝ,6ÀéÓøþû}¨ì᫨(£´´lfÊ€mзok´nݬ–£$²æùó<Œ³ ‘‘©Ê NÊÊ<üòË |ûm—J.7·AA (›ù›%8:šÀÍ­læS»v¦PS£ " !„{öâçŸcýzO êÄu8„BˆT%'g¡W¯¿1yrWÌšÕ‡ëp¤ê×_OaÇŽ›â‰/ÎÎf8yòGŽ£’¸º[l€ñãwâêÕ(”–~¼’RÙŒ§1c\°|¹t¶ÙòS¦ì…††*Ö­óDhh2~ÿý4àĉб£y••™™‡  xñ²»””ÐÐPC»v¦pwo  884Wøª>!„ŠÁìÙGðóÏýñý÷ݹ‡B©GŽÜÆœ9GpêÔ4´mkÂu8R±jÕ%¬^í#žôÂãñп¿¶lËqdW·‹MYY¯áæ¶yyE•ÎpÊ–IñxÀ½{¿S¿„:ˆ1†¯ã¯¿.ÀÃÃÿü3 |~=@FF.þüó,–-þYKâRR^ 00^<ó)33|~=tìhñfÙ%¬¬ƒÇ«{»BH]òvFÓÿþ÷~ø¡×áB!µjҤ݈Šz‚+Wf+\Ë‘­[ý°xñérµUUe|ó –,ÊadRQ·‹Mpöì]L™²÷“Ŧ'~@ûö-j12" ^¾ÌÇôéáç‹ `ҤεRð‰MŸ‚ƒ‘“S€FêÃÕÕR¼ìÎÔ´‘Ôã „R;cøë¯ X¿þ~ýõãK³ !„Eõòe>ºw_;¬\©8»æ:t ³g­PwPSSÆ?öĬY½9ŠLj¨Ø'î•+Q*î2¦¤Ä£iìuTDD ¾ýv7`óæ±prâf*§P(ƒO‡ÀÀ„„¹¹µ¬3;7Bˆ¢ÉË+ÂìÙGpùò¬]; ƒ9r!„Â?¿XŒµ»vG¯^­¸ç³9sß¿WÜ£é]ªªÊøí·Áðòrã 2©¢bdgçÃÍíOää”_N§¢¢ %%`ÇŽñèÑÖÃIm۵ˋŸ««6l-SË'!ÂÃ# þþñˆˆx @KKCñ¬' èêjr*!„OˆŠz‚o¿Ýƒüü"lÞ<¶Zýÿ!„Eµpá œ>_ßyÐÓ«Ïu85víÚCŒ·B!P±ôÂã•Ml0 Mí']Tlzëüù{øöÛ=å¶³×Ó«WW œ9s¿ü2¦´×ùùŘ5ëΟ¿‡™3{cúôžPR’í>I% y$^v÷àA U«fpuµ€›[KtèÐBáÖ<Bˆ¼Û¿?¿üríÚ™âßÇÀÀ@›ë!„™PXX‚=VÂÁ¡96mÃu85œˆ¯¿Þ @øÑ¶=ÞÞSáêjQ‹‘Õ *6½kòä=¸xñ>JK…åú4mÜxK—žƒ§g',Y2ªªÊ\‡J¤ )é9&LØ…çÏó°iÓ¸¹YrRää ((QÜl<..ªªÊpt4»»%\\,Ñ®)cBáÈë×Ř?ß§N…cúôž˜9³7í>J!„¼'00#FlÄîÝг§×áTKLÌ3tï¾¢J÷½qc¬¬K9¢ZGŦw½|™;»…€… ”ëÓtéÒ}üøã8:š`Û¶±ÐÑ¡%JŠäÊ•(üøã~˜™`Û¶qhÚ´×!ILFFn¹îRS³¡¡¡†öí[ÀݽlÙ]ëÖÍèB‡Bj¯o æÍóFAA 6l.]¬¸‰B‘YsçÅÕ«Ñðõ/Þ\0Æàç‹ ®!88**Jì ”íz¯¯¯p³›©Øô¾‹ïãС[سgb…]Ç¢¢ž`̘í¨WOû÷OB‹úEI$E$bXµêþùç ¾úÊK—ƒºº ×aIÕãÇ/ÄÍÆãñüyø| têd.n6®€•uBáÔË—ùX´èŽÅ AŽøý÷!ŠøÆ’B‘¨ÜÜ"tíº=zØÊíît>ÃÖ­¾8zô””x EâÛx<?þ** ÷Á?›>¤¸¸´Ò‚Cff¼¼¶#)) [·Ž“Û¥Vxõª?ü°ñøóÏ¡ðôìÄuHµŽ1†¸¸ q³ñ[·‘›[}}mñNw®®–01Ñã:TB‘['O†ã×_OBEEË—Wˆu!„ÚråJÆÛ#G¾“Ûëï#Gncöì#;ÖLJ"/¯H¼;ÝÓ§k8ŽN*¨ØTEE̘q/FbéÒau²H!ï>|Šñãw¢¤DˆíÛ½àèhÌuH2A(!22 AAñð÷Ç;I(,,±±\\,àîÞ..04äs*!„ȼää,,Zt×®=Ę1.øùçþÐÖ–Ÿ%„Bˆ¬˜3ÂÍÍ›6Eýú´½¼¬bŒaõêËX½ÚcƸà÷߇ЎlÕ”Ÿ_ŒGââSTÔðx<ØÙ5}ÓïÉ:˜ASSëP !¤Ö BìØáþñ††*fÍꃯ¾rVÄ> „BH­Û¼Ù+W^„Ÿß|4k&:åç£S§%1¢.Àu8µ‰ŠM’ö&쀞^}ìÞ=Í›7ä:$òžüübLŸ~W®DaÉ’¡øæ®CR¯^ ((AÜp<>>ªªÊhÛÖDÜl¼m[*êBÞÅ‹÷ñÇgžžƒÉ“»â‡z@K‹>€"„B$¥´T„^½þ†‰‰víšÀu8Uòï¿×°víܾ½ººuj5›$åÉ“—;v;23s±k×89™ry#55ãÆí@ff.¶m‡Ž͹Iaedä ^üõäÉKhjª¡C3ñ²»V­šÒ’SBˆÂ¸ví!V­º„{÷R1h#,è¦MåãÓVB!DÞ„„<ÂС°gÏDxxØrÎG àìüFŽì€ŸîÏu8µŠM’”Ÿ_Œï¿ß?¿X¬Z5Ƶã:¤:/((ß~»ë`÷î‰r3ÝRQ$'g! e_YY¯¡££ sñnw-[6æ:LB©¶w‹L¶˜=»Z·nÆuX„BˆÂ›6íBC“áë;O¦›…oÛæ‡¿þº€_êbŸ`*6IšHİté9lÚtÓ¦y`îܾàñx\‡U'9rsçE¯^­°ví(ê#Ä1ÆbbÒÿ8„„$"7·Úpuµïtgl¬Çu¨„R©ë×bõêˈˆH‡‡-fÍê {ûæ\‡E!„Ôéé9pu]Š9súbÊ”®\‡óAÅÅ¥èØq vį¿â:.P±IZº…ùó¡wï²B‡†:j c Ë—_ÀúõWñã˜?¿üdP(½{©âfãwî$¡¨H=¸¸XÂݽlÙ¾¾6סBê8‘ˆáêÕ(¬[wááѳ§fÎì *2B!\Xµê2¶móCPÐ4l¨Åu8ìÞˆß?àà…04äs¨Ø$MÁÁ‰˜8qš7oˆ={&ÀÐPçÓ?D>KQ‘Ó¦Àå˰bÅŒÙëH•””"44Y¼ì."â1JKE°²j 7·–puµ€‹‹ø| ®C%„ÔÅÅ¥ðö¾ƒ-[|‘”ô={ÚaúôžhÓÆ˜ëÐ!„:­°°®®KÑ·¯=þüs(×á”#1¸¹-E—.VX¶l8×áp…ŠMÒ–œœ…1c¶!?¿»v§©öR”™™/¯íHJÊÂŽãÑ©5—gùùŸuëãà‚Çã¡uëfâ~O:´ Yƒ„‰ËÎÎÇîÝؽ;yyEøòËö˜<¹+ÌÍ ¸B!o=z³gƵksaiiÈu8bgÏÞÅwßíE@ÀÏ05mÄu8\¡bSmÈÉ)À”){qçNÖ­óD¿~ö\‡¤pbcÓñÍ7[¡¢¢Œýû¿…™™>×! {ù2  Ї¿<3¡ªªŒvíLÅËîM ªªÌu¨„9•œœ…-[|qô訫«`üxwŒç†Fê\SOB!Dæ‰D ýú­¡!{öLä:±þAãÆºØ¶mסp‰ŠMµ¥´T„_~9½{ƒ0~?üø£×!) ?¿XLž¼ÖÖM°sçx™\³K$/==ñˆC``žŽQ±‰ ¾¾1˜2e¬­›`ûv/šž_B¡üqÛ¶ÝÄìÙ}0cFOÚqŽ”›Ž  ²înÝz„—/óÑ \\Ê»ºZ eËÆ\‡I©e÷ï§a÷î@œ<55eŒ錱c]iù5!„"§ÂÃcÀ€µØ»wzô°á,ޏ¸ttë¶;wŽGïÞ­8‹CFP±‰+±±éðòÚ‘ˆaÏž‰°²¢‹Þª*((ÁÔ©ûpãF þùçk Ü–ëˆòHTª¶IDATŒ‰¢£ŸŠg=ݺ•ˆ¼¼"hÃÅÅ®®puµ¬Ë üQh¹¹E8s&ÞÂÝ»)°±i‚qã\1lX;Z*G!„(€ v"55—/Ïâlœ9Gqûö#ܸ1fIS±‰[ÙÙù?~'¢£Ÿ`Ó¦±œVaåEFFÆŽÝ´´lìÜ9^&ÖåùSZ*Bdd*‚‚Ê–Ýݾ„ÂÂ4mÚ..ps³„‹‹š6mÀu¨„ÏpëV"޹3gî‚1†þýàéÙ ÎÎô·ƒBQ$qqéèÑc%þýw4t¬õógdä¢C‡ß±té0xzvªõóË *6qM bîÜ£8v, ÀäÉ]¹IfÅÄ<ÃèÑ[¡©©†½{'Ñ,"1áïàà„†&£¤¤¦¦àêj)n8n` Íu¨„OÈÊz#GBpäÈm$$dÂÞ¾9¾þÚC†8ϯÇux„B‘’~Øžàúõ¹µ>³è¯¿.àðáܺõ ÔÕ©0¨Ø$;6n¼ŽeËÎcäÈX¶l8mßþž[·áåµÖÖ±{÷èèhrQ`EE„†&½i8ž€»w£´T„–-¿)<•}5h@;" JJJáã…ãÇCqýúChi©cÈ'xzv„­m®Ã#„BH-HHÈD׮˱iÓ ЦÖΛŸ_ '§Å˜2¥+fÌèUkç•qTl’%W®DaêÔ}hݺ¶móBÆt! çÏßÃ?ìG¶ø÷ßo¨RLj]~~1BB!((ñˆŠzƬ­àæf WWKtìhmmš5AHmaŒ!44ÞÞwpîÜ=äåÁÕÕ#F´Ç_8Ðß B!¤úˆ‹ËÀÕ«³k­wÓÎþX¶ìü cc=©ŸOŽP±IV•””bîÜ£8~< ‹ ĤI]¸©ÖBÌž}§N…cÅŠ9²×!R-9(+<% %åêÕSE»v¦pu-+>9:š@E…fêR™W¯ páB$NŠ@pp44TÑ»wk ê„Î[ÒLWB!„|ЃOЫ×ß8th ºt±’ê¹úôY SS=lÞ_;š‹—ÝÙØÕZSCB¸ôúu1®\‰Âùó÷pýúC…"tíjÛ wïÖ¨__ë !„"g|}c0jÔøøÌF«VM¥rޱc·#?¿ÇŽM•Êñå›äÅÇO1fÌv¨ª*cïÞI°°0à:$‰JNΨQ[N†©i#Ž#"¤v0Æ›.î÷œˆœœ4l¨…N,àâbK´liHÅ'¢0rs qéÒ\¸ ?¿ˆD ..8° úöµWØU!„R;cèÝ{,, ±qã7?~\\:ºu[]»Æ£W¯V?¾ b“<ÉÊz /¯ˆOdž ßÀÃÖë$âÞ½T|óÍV4kÖ{öL„¾¾6×!‘ˆ!*êÉ›ÂSnÝJD^^5ªN,Ĩ–-ëöN•Dþ¼|™K—îãüùHøûǺt±Â_8 W/;4h Åq„„BQ$ÇŽ…bæÌC^ˆ¦MHôسgAhh2nܘK›äMII)æÍóƱc¡˜?¿¾ÿ¾»\îÀÀxym‡““)¶o÷‚–-— ä]B¡÷ï§!(¨¬øò¯_ÃÀ@..eKî\\,`f¦Ïu¨„T’òW®Dáòå(ܺ•ee%tíjþýг§ø| ®C$„Bˆ‚„hß~1FꄹsûJì¸éé9pvþË– ǨQ%v\CÅ&yµm›~ÿý lƒU«¾’˦©—/?À”){лw+¬_?Zᛟ" ¥¥"DF¦"88ñ¸s' %04Ô««…¸øDKQ c¸{7>>àã…‡Ÿ‚ϯ‡®]mЯ_ktïnK=˜!„Rk–/?#GnãöíE»Þüå—“¸p!·n-¤kØÊQ±IžÝ¼‹)SöÂØX»v‡‘‘.×!UÙÑ£w0kÖaŒU¶ËíÂEHÍBܽ›‚  % 44……%02Ò…««\]Ëf?5oÞëP‰‚*..ÅÍ›±¸r% W®D!##Íš5@¯^­Ð»w+tìhNoÄ!„‰'O^ÂÙùlÚ4´ùìãefæ¡cÇ?ðË/àåå.›ä]rrÆÛ—/ó±c‡ÚµkÁuHŸ´u«/>~èùóûÉõ2@Bd@ DDÄc& ((¡¡É(..Eóæ ųž\\,$¾nÔ-YY¯qõjYqÉ×7EEØÛ7CïޭЫW+ØÚ6á:DB!„e»Æ–àèÑï?ûXK–œÅñã¡^(—«‹j›Áë×Ř:uüüb±|ùp|õ•3×!UjÅŠ‹X»ö .€ï¾ëÆu8„(¼ââR„…%#88 Œ’’R˜˜è¡S' ¸ºZÀÍ͆†:\‡Jd\\\º¸ÿRxx2TU•áæf‰^½Z¡W/;C„B‘I×®=Ę1Ûàç7ÿ³vuþ<:-Áœ9}1yrWɨ˜¨Ø¤(D"†+.`ýúk?Þ¿þ:**²³4M$bX°à8öïÆÊ•#dº Fˆ"+* 4ô¿âSDÄcB˜™é‹g=uêdCC>סŽ B„„<ÂõëѸté’“³ §W¶èÙÓ]»ZCSSë0 !„B>J$bèÔi úôiŋ׸8 œÀÅ‹‘ üôè¨Ø¤hΜ¹‹Ÿ~:''SlÝ:ººš\‡@ˆéÓâÂ…HlÜø úõ³ç:$BÈ%¸s'IÜóéÞ½”–Š`aaðβ;K4jTŸëPI-HMÍÆ1¸qã!⑟_ ñì%''Sê±G!„¹³aÃ5üûïuDDüV£åo))/àî¾ þ9 £Gw’B„ ‡ŠMµÅÛÛ»ÖΕ––íÛc ¬ÌÃwßÙ¢Q£zµvî÷ … Û·?Dbb&N´BË–Ü51wvv†±±1gç'Däçãöí²âSpp"#S!2´liK¸¸˜£S' 4l¨%þ™Ú|}#Õ÷å—_Vz[aa ‚‚áç_ß$$dBKKnn–èÖÍݺYSsyB!„|’¬¿ÌËà×_C1r¤9œ«¿”nïÞ8¤¤äãÿkeeÙì9,c×»Tlª-µÝ[IIÚÚ.ÈÍõc¥µzî÷Õ¯ßÅÅ©Ò9ãÀ5j§1"o^¿.FppYá)((QQO 1X[7~S|²@ÿþ q*©Äûæ2qýúCܸñ·n%¢¸¸66FèÖÍ]»ZÃÙÙŒv#„BHµÈæOõ굄@¡0·Ú?«¦Ö <ÅÅ©RˆL2dìz7T…ëêK~"/~„È¢úõÕѳ§zö´äæ"$ä㔀]»ü¡«Ûë× ×7sðàAxzz"?¿ñ¸qã!n܈Ajj6øüzpw·ÂŸC·nÖ02ânÖ)!„B]ïrG¯w©ØD!¤Êø|rŧœœ4jÔÀn#¤£Ó¶¶ Š`oßC‡:¡K+´k×B¦6‘ „B!Š…ŠM„BjLGG¥¥¯¸ƒT¢¸8 kÖ¬@—.VÐÓ£&ï„B!¤vP±‰BQPEEq:Ô‰ë0!„BHCsè !„B!„BˆÄP±‰B!„B!„H ›!„B!„BˆÄP±‰T——‡åË—Wùþ¯^½BDD²³³¥!„|¾ê¾¾e¯qiii¾ÿúõk„‡‡Ók!„Bˆ©ÉûAHMMÅóçÏ¥‘b¢b© ''¿ýö[•î»zõj˜˜˜`üøñ011ÁÚµk¥!„|†ê¼¾½µråJlÞ¼¹Ü÷|||мys|óÍ7066ÆÖ­[%%!„B‘–š¼|ñâ:vìˆÓ§OK'(DÅ&Rcaaaøí·ßòÿöî4$Ê®øttRq2r—æ©&)m#)Ss)§¢i1 ©>DQ4m´T´¢-TЂ"ÍŠ2ZH*Á°ly,?ØF¶XeTfÎD4×ûáÁûi_µ÷ÕfFÿ?˜ç>ǹ¯38×\÷áž3¨¬¬ÄíÛ·±aÃ<{öÌÙ¡ýß.^¼ˆ¹sçbçÎvÇ¿ÿŽ9sæ`×®]xðà®\¹“É„ÚÚZ'EJDDDDiÞ¼y¨««svn…‹M.*;;AAAÐh4=z´ÝW8Ž?ƒÁµZ N§\}øðF£¹¹¹ CPPòòò°råJA§Ó¡°°PVV†Å‹Ãd2A«Õ"44¹¹¹ÍÆRUU…ÄÄDtëÖ QQQ(((””” 55ýû÷DGGÃh4âÂ… Í>ÏÕ«Wooo 6 ­Æò;q‘{p‡üÖdÈ!>¾Å9±æû…Ð@òóóÛ4¶¸¸X¤ººZêëë%==],X ""õõõ¢Ñh¤¨¨H¬V«\»vM<<<äÝ»wR[[+²~ýz±ÙlràÀ Û¶m›Í&;vìƒÁ ""çÏŸµZ-K—.•¯_¿Êõë×¥{÷îrñâE1›Í¢ÑhDD¤¡¡At:ìÛ·O¬V«”””ˆV«•7nÈž={dĈv±§¦¦Ê’%Kæd6›Åßß_ŠŠŠ¤±±Q6oÞ,z½^l6[‹±´Ô×Q¯?ýžÎ˜ß~6kÖ,Y·nÒÎËË“¸¸8»1YYY²f͇ù:3÷åçç ?扈ˆèOè¬õ`UU•ôîÝ[Þ¿/)))røðáfçÄë]óÎ&dµZß¾}ƒ¿¿? °uëV€··7ÊËË1yòdh4ôéÓ^^^øüù3Àf³aõêÕP©T0P«ÕX±b…Òþòå‹r___lß¾¾¾¾HLLÄâÅ‹qôèQ»X.\¸N‡E‹A£Ñ`̘1˜3gN:…©S§âáÇظq#nÞ¼‰µk×¢¼¼ß¾}s˜Ó‰'ššŠÉ“'ÃÇÇ«V­ÂÂ… a±XZ¥-q‘{p—üÖ’††øùùÙóóó³;æ>""""{îRZ,dffâàÁƒ lqN¬ùq±ÉMš4 HHH€^¯‡ÉdÂÇwïÞÅøñãÑ·o_L™26›Íîï›.‚T*4 ÔjµÒþYŸ>}àíí­´ˆW¯^Ù©©©ÁãÇñ×_)ÂÂB|úô (--Eee%–-[///Ìœ9sª©©ATT”ÒöòòÂêÕ«áëëÛj,m‰“ˆÜƒ»ä·–øøø(…C‹Å‡±Ì}DDDDöÜ¥ܼy3ÂÂÂàããƒëׯãóçÏxúô)ªªªæÄšÏ‘ÚÙ#ANNrrrpïÞ=ìݻӦMý{÷pöìY¬[·§OŸFBB<==›]Üi‹_78{ÿþ=üýýíŽiµZ$%%¡¸¸X9f±X R©`µZ¢¢"¥/!!ãÆs8—¿¿?Þ½{gwìÌ™3HKKk5–¶ÄIDîÁ]ò[K ƒÃ!<þ#GŽtËÜGDDDdÏ]êÁ-[¶ ®®K—.<}ú?~D]]Ž9b÷<¬ùñÎ&´}ûv¤¦¦B­VcĈÈÊÊ›7o¯_¿Ftt4’’’àé鉛7o¢¾¾þ:Ïëׯ•ŸnlhhÀ¡C‡`4íÆF”••áÑ£G€ÆÆFÄÆÆ¢¨¨/_¾„^¯GMM  ¼¼÷ïßÇĉgÏžÅýû÷cǎŹsç”7àíÛ·1{ölxzz¶K[â$"÷à.ù­%ñññ°Ùl¸|ù2€š***˜ûˆˆˆˆÚÀ]êÁ7¢¢¢ByÄÆÆ";;[YhbÍ× 'oÕeà76ì2›ÍÒ«W/4h¤¥¥I÷îÝåСC""òêÕ+ –ääd12aÂéÛ·¯¤§§Kmm­Ýf°ÕÕÕâçç§´+++%$$DDþÙ0M¯×KLLŒ$%%‰N§“””±X,v¦‰ˆäääˆV«•´´4 —éÓ§Ë?DDÄd2I=$99YäĉÊßéõzÙ´i“Ò6™L(iii¢Õjeß¾}­ÆÒR_G½þDô{:k~kòëá""§N’ž={Jzzº„„„HNNŽÒç*¹„ÑŸÒÙëAqØ ÜUj>—¼Þý›_£sAxòä‰òóÚC† App0 22ÕÕÕ¸s炃ƒ1xð`˜Íf<þ¡¡¡åy ”öСCñöí[¥ˆòòrܺu ݺuÃðááR©¡lÚË—/ÇŒ3ðàÁ„‡‡#&&FéÛ½{7æÏŸ³ÙŒ¡C‡"$$Dékºãé籋-‹/0`ÀDFF¶Kk}Dä^Ü)¿59vì˜Ã±ŒŒ Œ5 UUUؽ{7z÷î­ô1÷ýwîX@ii©]›5_˸Øä¢4 ’’’šíÓjµv·ÕEFFÚý#ÿooo$''·:.<<áááÍöEGG#::ºMçëׯúõë÷Û±´5N"r}î”ßZŠÐÐÐ6eî#"""úWg©Åšï_ܳ©‹Òjµ0 Î@˱¸RœDäÜ%o0÷u Wª¥ºjͧ’ŸïC££R©ŸŸÌÌLg‡Ò%ñõ'ê8|¹¦‚‚Ìš5 ü˜'""¢ŽÆzй\ðõ¯àMDDDDDDDDÔn¸ØDDDDDDDDD톋MDDDDDDDDÔn¸ØDDDDDDDDD톋MDDDDDDDDÔn¸ØDDDDDDDDD톋MDDDDDDDDÔnT""΢+P©TΡËËÏÏGff¦³Ã êt˜ß\?扈ˆ¨£±t>»Þ­P;;‚®âäɓΡˋ‹‹svDóQׯzÐù\íz—w6Q{©àžMDDDDDDDDÔn¸ØDDDDDDDDD톋MDDDDDDDDÔnþÐ’éÖ¬å‰_IEND®B`‚bm3.7.0/doc/html/a00201.png0000644000175000017500000000651711365042646013252 0ustar tlktlk‰PNG  IHDR8(jÞæEbKGDÿÿÿ ½§“ IDATxœíœLÔõÇ_ ÇayPH@jü©9R&jkXZö–ζZ5Ýš0Óš£ÈŠ%ƒÍXcºÔ©üX„@—™ü蔢!D9†üã@òäG€tÁ=¿ðå3îó>@¼½Ûm÷~>Ÿ÷ûùúÁkŸ÷ûs$@‡cƒØÍ·‡Ã¹[ðÇápl^à8ŽÍâ0¹£­­ªªªæC ‡ÃáÌšÐÐPòöö6ïÄ$233ADüÃ?üÃ?÷Õ'33sr9Ô;¸qøÃU‡s¿ ‘H,öó=8‡c³ðÇápl^à8ŽÍ ‡Ã±Yxãp86 /pÇf¹ã×ÜÜL§Nš) cžùF«ÕRbb"ét:³þJJJšò}¡ÐÛÛKÉÉÉó-cVܹUXXH¿þúë|Ë ¢…¥Åw\à(##c.´,ˆy&òæ›oRkkë=3>>ž>úè#úꫯÌúûúúèСCS¾/úúúÌ4ß-ßÝqç#·fJnn.UVVη "ZXZ¬Á—¨ Š‹‹©¯¯ïžÍ×ÖÖF—/_¦ýû÷Svvö=›w.ðññ¡k×® í»å»{ÎýÍœ8“ÉD{÷î%¹\Ntøða""êîˆ:räyzz’R©¤'NÐþýûI©T’J¥¢œœaœ””zíµ×DÛbóìÞ½›Ž;&œ700@O>ù$]¿~ˆˆþøã £x€–/_NYYY¹?þø#’££#­^½šª««‰ˆ(&&†ôz=ÅÄÄV«%"¢òòr !™LF+W®¤ÂÂB""ÒëõôÌ3ÏÐéÓ§I¡PP}}½E? 1ý˜••EëÖ­£Пþ)h±†˜.–}3ÕFÄŽÏÍ›7iëÖ­DdÙwb1°ä»ììlò÷÷'R©T”’’":îÆd±Ü""Q=DD|ð)•J’Éd´yófjooޱòÎZ®çää999Ñ /¼`VÔ5 ùùù‘³³3½þúëtàÀúþûï™ZµZ-½óÎ;Kr¹œ–.]JGŽaúd:ZX6²|#–—3›UÄÞE.‰ûöíÃàà ´Z-ÜÜÜ››‹ÎÎNØÙÙáÃ?„Éd—_~ "BRRL&’““áïï/ŒUXXˆ£GZl³æIOOÇÚµk…ëNŸ>'žxpûöm¨T*¤§§Ãh4ââÅ‹Ëå¸|ù2t:\]]‘ŸŸÿý‰‰‰X¶lL&z{{¡R©PVV†ááaüý÷ßpuuÅÉ“'a4QPPggg444@§ÓÁÉÉ Û·oGee%†††Ì|ÔÒÒ‚wß}+V¬`ú2((€ÈÈHìÛ·O8¦Óé “É¦|·¦K̾ÉäååaÍš58uêŒF£E}¬ø´¶¶ÂÅŦøÎZ &ú®«« 2™ ùùù0¨¨¨€ôzýœÆd"¬ÜêïïÕS\\ OOO455¡¿¿Û¶mÃîÝ»­æ5_þöÛoÉdÈË˃Á`@ZZˆiiihiiÁ¢E‹ðí·ßÂ`0à³Ï>ƒ½½=Μ9ÃÔªÑhààà€¸¸8 âÒ¥KpssÃùóçY)ÉÔ²‘åV^Î$n!‘wQç¤À¹»»cxxXè‹ÇöíÛÑÙÙ "ÂíÛ·pppÀÿý¨©©ÁC=tÇóèõzH¥Rüõ×_€¨¨(!Yrrr°zõj³±öîÝ‹¸¸8|þùçØºu«Ð?<<Œ¤¤$ ¼¼¼P[[ ÈÈÈ@xx¸Ù8/¿ü2>þøcèt::::„c&“ EEExöÙg±råJ¤¦¦¢»»[Ô¾ºº:8::¢§§püøqxyyatt€xcé²fßd~ùåìÚµ ?ü0<ˆ¶¶6Q½“™Xàsß±b0ÙwF£W®\絩©iʸ3‰¬Übé)((€§§'®^½ `¬¨õööZµÙï½÷^}õU³¾àà`¤¥¥!11/¾ø¢Ðo2™ R©pæÌ¦VF¹\nV0âãã3k-,Y¾aååLâ6±'ú²ýLðóó#©T*´ƒ‚‚èâÅ‹BÛÅÅ…ˆÆ^ˆ•Édäàà ´çb¥RIjµšòòòh×®]¤ÕjéìÙ³DDtýúujhh á:ƒÁ@[¶l¡‘‘Z¾|¹Ð/•Jéý÷ß·8w{{»Ù¹DD+V¬žvÚÙÙ‘§§']ºt‰Þ~ûm  ¸¸8R«ÕVmÍÌÌ$´víZ"[2vttPEEmÞ¼Yô:–®ñeÃtì#ûw3¡¡¡ÔÕÕEǧM›6QHH;wŽ©Ý¬™ûN&“Ñ•+WèàÁƒÔÜÜL‹/&“ÉdqÜ™ÄÄb¹ÅÒóÜsÏQii)­_¿ž EFFR||<) «6³èèè ÀÀ@³¾€€"óåD›% ùúú‘ußùúú’£££™¥¥¥w¤EÌFk¾ËËžžžÅÍsR຺ºÌÚz½ž/^<CO{ž;vPFF999Ñ–-[„~¹\N6l ââbá:ƒÁ@‰„>ùäÒëõfcž;wŽÔj5¹¹¹™õËårºzõªY_ww·pÞÄ&•JI&“Ñ­[·¨§§‡FFFÌþx&€²³³éÓO?¥çŸ^èß³geee1 K—££ã´í›Èèè( Z´h‘èyÓ…ƒ®®.3ßP||<åååÑúõëÉÞÞž …è¸Ó‰5Är‹¥¥¦¦Rjj*ÕÔÔÐÑ£G饗^¢šš¦ÍÖpwwŸ·q}®®®ÔÝÝmv¬··—ˆ¬ûn²·nÝ"WW×YkaÙÈò«««h^ÍüƇÉä[ºÙ,Q‰Ðß߀€¤§§ KÔqšššÌ–1µµµfKÔêêj[l³æ€¸¸¸ ÀlŒÆÆF8;;£¾¾088ˆÇYYY(--…R©ÄÍ›7Œ-Ñœœœ000À|9T[[ ´´´ÛûR*•(**‚N§ƒ½½ýßhµZDGGÃÛÛ hoo·èÃòòr³åé8'Nœ€»»;†††D—¨,]Öì›LYY¢££ñè£"11z½Þì8+>¬%*+“}÷Å_`ãÆB»²²‰Äâu61±+·Xz&+))ò™e³5_æççÃÃÃ7nÜ0¶}!•J‘––†óçÏC©T ±©¬¬áìÙ³L­ã6û{ Brr2Ó7,-,Y¾aååLâ6º›{pO=õ{ì1„‡‡céÒ¥ˆŠŠÂðððŒ \ll,BCC-¶YóŒGyDØ·'55r¹jµ^^^xå•W„sbcc±dɨÕjÈår¡`ÀªU«†êêj@BB "##ñàƒbÏž=`5(7nÜ@BB-ë­·°mÛ¶)ýÿüód2 D K—5û&’››‹ððpäææ {¤“aÅgr›ì;±Lö][[<<<ŽˆˆDEEÁÏÏOðÏ\Åd"¬ÜbéÑétðööFpp0Ôj5ÜÜÜpìØ1a\ky'æK“É„;wB¡P`Ó¦MðööFTTÒÒÒo¼ñ”J%"""°nÝ:„„„à믿fjÕh4X¶l±aèT*lܸƒékZXqeùF,/\Ç`0 ´´Ôl“ón0ÛyÚÛÛQRR"lzN¤±±%%%S6Õõz=JJJÌî¬Z[[QRR‚k×®ÍXûÈÈÈŒ¯™.,]böÍ¥¶ÑÑQtuu mK¾cÅ`"}}}¸páêêꌽòòrÑqï$&Ë-–£ÑˆŸ~ú ?üðƒpG2‘éÚl‰ßÿ.\@__ŸÐ§×ëQ__ºº:”••ahh¾¾¾øù矙Z5 Ö¬Yƒ¡¡!TTT ªªÊâÓô™h±f£5ßL'/§‹X“üÿ @VVíܹ“ÿG_ŽÍÐÙÙiöÐk2ÁÁÁrÍžÚÚZzúé§é›o¾¡€€ÊËË£””jnnfîó~÷ÝwtèС)¿ƒ´ßH$ÊÌ̤;v˜õÏÉCg!#•JiÉ’%¢Ç;cÕªUtòäI:|ø0õôô¿¿?1‹ÑØÿ)ý¶äKð;8‡sß#vÇßEåp86 /pÇfáŽÃáØ,¼Àq8›…8‡c³ðÇápl^à8ŽÍ"úCß9}£ŸÃápæ)?ômkk£ªªªùÒÃáp8³"44”¼½½Íú¦8‡Ã±ø‡Ã±Yxãp86 /pÇfùí| Å\V³IEND®B`‚bm3.7.0/doc/html/a00211.md50000644000175000017500000000004011365042646013135 0ustar tlktlkfe4c24b97d62ec5885f7d4280941a61dbm3.7.0/doc/html/functions_0x76.html0000644000175000017500000001047111365042644015413 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- v -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x62.html0000644000175000017500000002324011365042644015404 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- b -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00221.map0000644000175000017500000000020611365042647013233 0ustar tlktlk bm3.7.0/doc/html/a00241.map0000644000175000017500000000061111365042650013227 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_enum.html0000644000175000017500000000542711365042652017156 0ustar tlktlk BitMagic: Data Fields
 
  • ByteOrder : bm
  • distance_metric : bm
  • operation : bm
  • serialization_flags : bm
  • serialization_header_mask : bm
  • set_operation : bm
  • set_representation : bm
  • strategy : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00228.md50000644000175000017500000000004011365042647013146 0ustar tlktlkbf36fbe4ab19ea8c82caef9d1dc0b1b2bm3.7.0/doc/html/a00228.png0000644000175000017500000000411211365042647013251 0ustar tlktlk‰PNG  IHDR(ßs bKGDÿÿÿ ½§“ÿIDATxœíœoHSoÇ¿s³eê´?3gYáf…&BVÖ*¿² Ò7#¢¨ô¥¤Ù©Þô"…^DIT#i²õOF©M2#úÂ"‹djƒ™ KÑ™íû¼ø=Ì­i[OõtàÀ®ûÜ÷u]çì{îssIHÁö«üÙ ‚BH²oìv;E.‚ßœÌÌLÌš5kd#¿Á`0€ØÄ6j3 ßÊ…£f /ˆ‡3Á×H$Ÿí¢… („€A!$ ! AP ‚ÂïcüXyõêêëë±mÛ¶¤ó÷PUU•J…E‹kœÁ`À›7o|îKNN†^¯Ezc&èèÅ‹8{öl(r Šüü|¿'öwÄh4âÑ£Gã÷îÝ;tvv¢³³ƒƒÁk÷ôôü„L¿OÐ3Ðï½{÷PPPð«Óøéz?çççÀ/½€CRy<ìܹ …qqq8vì §§:¥¥¥HHH€R©Ä… °gÏ(•J¨T*TVVzýœ}Ú§m6›)“ÉXTTÄþþ~Ö××3&&†·oßæû÷ï©R©XSSá¡!vtt0""‚999|ôèÝn·ßü_¿~ͨ¨(Þ¼y“ÛÛÛ1wî\¯-‘H””pœ\.GSSÖ¬YµZœœx<Ÿñ»ººšš:b|JJ  ¾¾©©©8þ<ŠŠŠÐÚÚŠââbL™2%`c%33°ÙlˆŽŽÆÊ•+‘››ß!)¢ß½{7Âv:!=þâtww#::Úgß±Š3::zÔÓËû÷ïýöïïïܸq%%%0™LXºt)¤R)bcc}ÆŸ~üˆsçÎaݺuãöÓÔÔ„êêj¿vgg'ªªª}}}(//‡N§ *wN‡7n »»ÐÐЀÖÖVH$„‡‡£··.— ÐØØˆW¯^ysIIIÁòåË!•JÑÐЀ>øŒ±zõjTVVzgå––<|øÀ¿³ƒÍfÑ#G`2™ ÑhpèÐ!tuuu\_S[[ ½^%K–€$êëëQQQçßÞÓ~¤Z¼x1“““©ÕjÏììl yk /´µµ122ÒkÛl¶5Paa!333}Úf³™³gÏfjj*—/_N•JÅ+Vp``€$¹páBfeeñéÓ§ìèè T*ó1ìØ±ƒJ¥’:ŽK–,azz:¯^½ÊÏŸ?3++‹³gÏæ† ˜••Ŭ¬,Z,ÚívÆÅÅQ«ÕR§Ó1;;›jµš6lßãñpóæÍŒåÊ•+9kÖ,fggû,¢ß¾}˃2555`Þc©ŒF#µZ-F£·öüð³Šè/ ðÁƒ# ËPb6›™‘‘A·Ûͺº:666Òãñx÷;NVWWÓår˯Óédkk+›››YSSC·Ûͤ¤$644$?}úD«ÕJ«Õ:ê èíí¥Åbass3IÒn·³¶¶Öo¬––Z,öööÌkxxx\Çñ³ýøPÈ^$Nœ8qÔ;“ŸÁ„  ÕjGµ+•JüóÏ?£Úîß¿ï×ßðð0víÚ…k×®!%%åååFFF@&“aÙ²e>Ç*Š·ÐÄÄD$&&ú•––†´´4¿û¿F*•Ž©ßÿÊ?þ˜7Ñ …fÜãÂÃÃ1mÚ4¿ûÕj5.^¼ˆcÇŽÁårA£ÑàîÝ»?­ýãV«õ9óbÚ´iX»víwû$''cãÆ?šÚ_ø9‡ („€A!$ ! AP ‚BHB@‚ ðûh¼?µüHþ»ÎáEü½‹À¾þÞe”€‚ñ j AP ‚BHÿՂŠB¯¶IEND®B`‚bm3.7.0/doc/html/a00138.md50000644000175000017500000000004011365042632013140 0ustar tlktlk8d70203ab611bc4529e25da868bc52c4bm3.7.0/doc/html/namespacemembers_func_0x67.html0000644000175000017500000002207511365042652017727 0ustar tlktlk BitMagic: Data Fields
 

- g -

  • gap_2_bitblock() : bm
  • gap_2_dgap() : bm
  • gap_add_to_bitset() : bm
  • gap_add_to_bitset_l() : bm
  • gap_add_value() : bm
  • gap_and_to_bitset() : bm
  • gap_bfind() : bm
  • gap_bit_count() : bm
  • gap_bit_count_range() : bm
  • gap_bitset_and_any() : bm
  • gap_bitset_and_count() : bm
  • gap_bitset_or_any() : bm
  • gap_bitset_or_count() : bm
  • gap_bitset_sub_any() : bm
  • gap_bitset_sub_count() : bm
  • gap_bitset_xor_any() : bm
  • gap_bitset_xor_count() : bm
  • gap_buff_any_op() : bm
  • gap_buff_count_op() : bm
  • gap_buff_op() : bm
  • gap_calc_level() : bm
  • gap_capacity() : bm
  • gap_control_sum() : bm
  • gap_convert_to_arr() : bm
  • gap_convert_to_bitset() : bm
  • gap_convert_to_bitset_l() : bm
  • gap_convert_to_bitset_smart() : bm
  • gap_count_and() : bm
  • gap_count_or() : bm
  • gap_count_sub() : bm
  • gap_count_xor() : bm
  • gap_find_in_block() : bm
  • gap_free_elements() : bm
  • gap_init_range_block() : bm
  • gap_invert() : bm
  • gap_is_all_one() : bm
  • gap_is_all_zero() : bm
  • gap_length() : bm
  • gap_level() : bm
  • gap_limit() : bm
  • gap_operation_and() : bm
  • gap_operation_any_and() : bm
  • gap_operation_any_sub() : bm
  • gap_operation_any_xor() : bm
  • gap_operation_or() : bm
  • gap_operation_sub() : bm
  • gap_operation_xor() : bm
  • gap_overhead() : bm
  • gap_set_all() : bm
  • gap_set_array() : bm
  • gap_set_value() : bm
  • gap_sub_to_bitset() : bm
  • gap_test() : bm
  • gap_xor_to_bitset() : bm
  • gapcmp() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x6d.html0000644000175000017500000001156011365042644015470 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- m -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x74.html0000644000175000017500000001132111365042644015404 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- t -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00189.map0000644000175000017500000000017211365042645013250 0ustar tlktlk bm3.7.0/doc/html/a00237.md50000644000175000017500000000004011365042650013140 0ustar tlktlk0908ecc4e3a05cc323ec063a702e1b8cbm3.7.0/doc/html/a00182.png0000644000175000017500000000607111365042645013254 0ustar tlktlk‰PNG  IHDRý(5Æü`bKGDÿÿÿ ½§“ îIDATxœíLÔuüÇŸü¼S;õ°óHF7c õ1Ž5¬˜–Å-­¹êµŸ›CqÍÒ”‘[?-+ c]t™ü˜Hb‘ØääääGÄ!pÏï~¹y?áôÔï×{?¶ÏÆûçëù~½ß¯ûÜûÍçî|HÀkð½ÓÁíE½@àeˆ ¼ ÛŒŽŽÔÕÕÝ -ÀÃDFF"11Ñ:“6€¸Ä%®»àÊÌÌ´ qÚÝé'‡úÁÿo4Ã|±§¼ ô—!‚^ ð2DÐ ^†zÀËA/x7ômmm8xð ¤Ü¸ìÙ³ç–kp†+m·Ë?·ƒ;áç’’üòË/nµÆÎ;o‘¢éñÏ?ÿ ««Ë.||Ðëõ·_ÔÿrÓAßÜÜŒ}ûöyBË ÛÄ—_~iI¿øâ‹hoo¿åš&q¥ívùçv`ëçÛV«ÅéÓ§Ýjóï¿ÿ"''Ç#öot-åææÚÍ{SSbcc±nÝ:(•JdeeyD£»Üo£qþüyKº´´ƒƒƒwPÑ݉­Ÿ½w×ÒÑ£G‘••…ÜÜ\»2FƒW^y---hiiÁÑ£GQZZêI¹ÓÂ#Ao6›±qãF„……aΜ9صk ¯¯jµï¿ÿ>""" “ÉðÕW_á7Þ€L&ƒ\.Gaa¡¥ŸÜÜ\¬_¿ÞiÚ™žž<ùä“€ŒŒ Fddd ººzJíGŽB¡@pp0²²²ðæ›oâÇ„ÑhÄc=†C‡A*•¢©© _ý5bbbàïï¹\n5±Î´MUvöìY¨T*ÜsÏ=X¸p!> í;bttÔa¾^¯ÇªU«¬ò222PWWg™—‚‚( „„„àùçŸÇÄÄ`ëÖ­ÉdH$Xµj•åmêõ~v廩úw6f(,,Dtt4‚‚‚°fÍ—çLç$_|ñ¢¢¢‚¬¬,˜Íf@UU”J%$ -Z„’’‡>wk-M¢T*ñàƒZå555¡½½›6mÌ;uuuHHH°kïlN=†³gï§Ë‘#GèããÃ×^{ÃÃì®®fxx8µZ- }}}¹mÛ6šÍf~òÉ'À÷Þ{f³™{öìaLLŒ¥¯’’~ðÁӮ촷·3$$„$900@¹\Î'NðêÕ«.µÿõ×_œ1c¿ÿþ{ŽŒŒpçÎôóóc~~>;;;ĵk×òôéÓìíí¥D"¡N§£ÉdâO?ýD___F—Ú\• Q.—ó£>¢ÉdâñãÇÆŸþÙÎþèè¨ö×_±±±ÇvîÜ9Ξ=Û*O©T²¢¢‚ƒÜ°aGGGyáÂJ¥R–——³´´”lmmå•+W˜žžÎ—^z‰$­üìÊw®úw5æ?þøƒ‰„EEEáÞ½{ €{÷+ƒ,öÛÚÚÎÊÊJ^ºt‰¡¡¡¦ìówÞáSO=eI›ÍfÊårKÐàÅ‹I’&“‰õõõ–º”H$lmmu©ÍUYaa!zè!+M7näæÍ›íìOê;vìüq.Z´ˆyyyìëës8¶©‚»»»-eIIIÔjµ,..fDDÿüóO’äÐÐHZ½+ß¹êßÕ˜ßzë->ûì³VeñññƒÞ•ÎIûF£ÑRùòåÔétÜ·o“’’¬úZ·nß~ûm‡>ŸîZ²Å6è?üðCsõêÕÔétܱcƒ‚‚œö][[Ëçž{Ž÷Ýw·lÙÂŽŽ·58 z§¸q…B€€KúÀñãÇ-é€$ üýý-iOÚq½^… ZÒ>>>X°`%íë니ˆ€D"A}}=¶lÙ‚¶¶6Ìš5Ëòvq*mÎÊôz=š››m)ÁêÕ«íìŸ:u 6l@\\6oÞŒ””·ýg‹\.·;<ñĨ¬¬ÄòåË!•J‘ššŠììlH¥R«¶SùÎYÿ®Æ<66†Å‹[õçPûT:ýüü “ÉììwuuY逨ØXtvv°ö¹' @HHt:±fÍœ={û÷ïÇÇlW?11‰‰‰èííÅþýû‘œœ ¥R‰ï¾ûxdOßÛÛk•6˜5k–'º¾¥vBCCÑ××g•700`ùûú *..Fvv6¶nÝŠ––üú믞–6geaaaX±bôz½Õõé§ŸÚÙ€D"ÁåË—Ñßßññq·Ç;<<ûì3ËÝÊêëëQVVæ4í);“¨ÕjãòåË€šš4559œø®®.ÄÅÅaÅŠðóóCMMÕ„¹Òæ¬L­V£ººçÎü÷ßHHH€N§³³Ÿ˜˜ˆ††¼ûî»(**BLL ¶oߎ‹/:[@@Ñßߨ««C[[Û”>Ù½{7’““áïï‡~ëׯGww÷Mùζ³1§¤¤ °°ƒÐØØˆ“'OÞ”N[RSSQQQ .¸v8YTTµZ=e[àÚ‹ccã´ê^Ï#<‚îînÔÖÖ¸¶Š‹‹‘””ä°~UU222°lÙ2Ä©S§pèÐ!·í:Äöýþìé—.]Êû￟IIIœ7oÓÒÒxõêUËÞj’ÖÖV«½wCCƒÕž~Ó¦MLLLt˜veÇvO¿dɪT*þöÛoSêá…(“ɨV«¹lÙ2*•J~óÍ7ìì줟ŸŸ¥^GGç̙ä¤$ªÕj¦¥¥Q¡P0==Ý¥6We$™——ǰ°0¦¤¤pþüù|æ™g811agß–îînæääpñâÅË'&&¨R©ÅôôtªT*ªT*«=ýõ¬\¹’Z­–ŒŒŒd|| FsW|sŽÁ`pyÐ7>>ŽW_}ß~û-âââPTT„ÜÜ\´µµY¼ ìihhÀ£>êu¾Û±c233¡P(î´”)™ü朂‚«|œÞÿ_% ÷Þ{¯Ór…B`×®]èïïGLL Ž;vW/ZO±dɯôݶmÛî´„›æ®¾Ó ÞŒ³;ý]ñì½@ ˜>"è/C½@àeˆ ¼ ô—!‚^ ð2DÐ ^†Ó‡snÕ§Áí#33Ó.ÏîáñSÕÁ݃£Ÿª¶ z@pw#öô—!‚^ ð2DÐ ^Æÿ®F@ß”—nIEND®B`‚bm3.7.0/doc/html/a00244.md50000644000175000017500000000004011365042651013137 0ustar tlktlk20a1a535bd33ecbaf009c66bb11618a2bm3.7.0/doc/html/a00259.png0000644000175000017500000001340411365042652013255 0ustar tlktlk‰PNG  IHDRèuDQ­åbKGDÿÿÿ ½§“¹IDATxœíÜ{PT×ðï²KV‘ò| 1¢ ‰bÁG1*¥R#4‘hKɨ1õÑPMm«–hm5©†`´è6ˆ¨Á¢L(*j1¢<YoeAö×?(7,Ë®,¬p1¿ÏÌæîž{Îwü¸{î>$DD`Œ‰’IO`ŒéÆʘˆq2&b2cuc¬®{!øøøÀÁÁ¡K}HŒu‘H"‘£Æ^ÑÑÑX´hQ—ú0Ú0N Æ^Æ:añ”1ãeLĸ@1.PÆDŒ ”1ãeLÄŒú2KGݽ{)))øÕ¯~ÕícŸ|8BBBOžþøc 2 À矎ßýîw0`ììì P(„~vî܉%K–èÜW(pttDß¾}1wî\TUU ÷eggcòäÉèÓ§F¥ñßyãÆ0`är9¦M›†ÂÂÂgWZZŠ™3gâСC°²²Brr2~ñ‹_Ç=zNNNÉd°³³ÃÎ;=Ú}ýõ×xõÕW5¶ÐÐPƒÇþöÛo;5ÿúrvv^tQ©Tzïoë­·Þ‚»»;þõ¯=³maa!âãã±}ûvwõ 4Ÿ}ö¬¬¬ºœ§[‘ èèèµýꫯH"‘Ð|@uuutñâE²´´¤˜˜*..&úè£H­VÓ¾}ûýùÏ&µZM;vì '''¡¯“'OÒž={ÚÝ¿qãÉårŠ¥'OžÐ®]»íÚµ‹jkkÉÎÎŽþþ÷¿S}}=%%%‘……]ºt‰Îœ9CC† ¡ÜÜ\ª®®¦9sæÐòåˉˆôWPP@}ûö¥   º|ù2åääP¿~ýˆˆ¨ººšär9ÅÅÅQ}}=]¸pLLL¨´´”òòò„vµµµ”››K¹¹¹”••EǧmÛ¶<¶J¥êÔüëËÙÙyië»ï¾£ððprvvÖ™ÑÙÙ™>¬uûŠ+(44”ˆˆÜÜÜ(,,Œ¢¢¢4¶´´4Š‹‹#{{{ý·'66–¼¼¼èàÁƒT__oбmRzûér-X ÖÖÖÔÐРܶaà ¢ââb@µµµDDtçÎ’ÉdÔØØHDD4hР³nÝ:zûí·5nóðð ]»v‘B¡ qãÆiÜ·jÕ*Z³f 8q‚† Bÿýù¯¢¢‚ˆHïq€ŠŠŠˆˆ4 ¯¾¾žÒÓÓ…c H.—Snn®F»Ö.\¨‘ß±õÑ7ÿúrvv^ˆˆÔj5%$$ÐìÙ³ÉÅÅ…"""¨¼¼\gF].̉››;–Þxã -**Š:D...Ïœ‹¶®\¹B‹/¦¡C‡Òúõë)??ßà>ˆŒW =¶1bLMM…}www$%% ûýúõÐ|O.—C&“ ûUTT777Û\]]÷ïßÇíÛ·áèè(Ü÷äÉüüç?G`` Î;‡I“&ÁÊÊ 3fÌÀ† `ee¥÷8011Á!C´²Èår¤§§cýúõ¸{÷.ú÷ïµZ­3û–-[pïÞ=|óÍ7Âm»=ºæ__ÎÎÎKJJ –.] WWW¬Y³~~~~3yQQììì„ýU«Vµ»MLLDqq1ˆHk¬Ë—/£   .Ô:ÎÇÇ>>>(++Ã0uêTxzzâøñãÊÛU=V -WÚZ”––¢ÿþFÃÚÚZë2|˸ðõõÅ™3g„ûž|øÌãô),,„««+|}}!•J‘ššŠêêj­v™™™X¾|9âââ´Î†»=ºæ__ÎÎ΋233±uëVÄÆÆÂÉÉ ›6mBQQ‘ÞŒ?Fee%***pýúuÌ™3®®®˜={¶V›Ö[UU,,,°råJ,]º¹¹¹Bûøøx$$$h\xkíüùóX¸p!&Nœ"BJJ :dðüM—Ÿ$ÿ \ƒN˜0FŽIS¦L¡ÁƒS@@544kй¹¹ë³ÌÌL5èêÕ«ÉÇǧÝ}µZM!!!deeES§N%  ]»vQDDYXXŸŸÙÛÛSpp0555QAA988‡‡ùùù‘¥¥%íß¿_CßqR©Th×zm™ŸŸO¤)S¦¿¿?Ј#hΜ9í–/_NR©”úõë'l­/vttìÎο¾œ—¶>|HøÃÈÍÍMgFggg l666&¬y‰š× ­Û´lr¹œˆˆT*-[¶Œ^zé%zõÕWÉÕÕ•ÌÌÌhïÞ½íŽCS¦L¡˜˜ášGgRúõ ýÀv}}=RSSaii‰qãÆ#F»²³³ñèÑ#x{{ÃÂÂBã¾¢¢"ܼyöööëU•J…k×®¡¾¾žžž8p`‡ŽkM­V£¢¢666šŸ¢]»v Ę1cPPP€{÷îÁ××W£Ý³tdìŽÐ5ÿºr¾öÚkF™—MMMÝòŽ¥R‰ììlH¥RŒ;VëoàyäéL=´ÛOO({>Š‹‹5.¸µåááOOÏnLôãc¬zàw½€LMMakk«ó~33³nLú‚ ôdkk‹Y³fõt füq3ÆDŒ ”1ãeLĸ@1.PÆDŒ ôÒØÔˆÆ¦ÆžŽÁŒˆ ô’x3‰7{:3"£¾"|YëoüÿçÉMÁŒÈhúå—_«+Ö ª&'->zr©¼‡1Ÿ.÷a´ 6VW¬Ž^; üÿí·ÒW¤öæßÇ‹€× /ˆè+Ñ™È 3‘!úJtOÇaFb´O³°žó}Ý÷>O›ždREÁܹs1þ|œ;wNèG¡P`Û¶m:÷###1wî\̘1¿ýío¡T*…ûîÝ»‡ßüæ7xýõ×5þcVVVbíÚµHLLD`` 233ñᇠÇ%%%!$$~~~˜?> …Á_W®Í›7£²²›7oFVV–V–èÌ­/›¡óªKEE…0m³2§<Йµ½~oܸ°°0̘1K–,Á¥K—töÛžÆÆFƒ~?Ó§OÇðáÑœœü̶J¥©©©X¶l™Pœ`mmµk×ÂÜܼËy ÕåÍÉÉT*ÅñãDZeË=z.\ÀÓ§O‘™™‰ÚÚZÄÄÄ 44;v쀕•âââŒÏ?ÿ\èÇÁÁÎÎÎíî§¥¥!!!{÷îÅÉ“'aff†þóŸ€úúz¬[·þþþ8}ú4>øà|üñǸyó&‘””lß¾ @ff&€æuæöíÛñÞ{ïáÌ™3Ø´iöïßÊÊÊ?v}¹ÂÃÃaii‰ððp¸ººjeéß¿¿ÎÜú²:¯º¨T*a.Úf5dN­­­ufmÛoEE6lØ€àà`üûßÿƲeËðÇ?þZýÚÛÛkä-..Æ'Ÿ|‚°°°ÿ~Z8;;#//OØÏÎÎÆ™3g4¶œœäääÀÆÆFcÍÚbÊ”);v¬ÖíW®\Á²eËpöìÙçR¬]~ŠknnŽ¥K—B&“ÁÃÃAAAHJJ‚‡‡ˆo¿ý6$ ¼¼¼ •J±`ÁaÿË/¿ú™4i’F¿­÷4ÿ·233ÃG}„§OŸRSSÑ¿Ì;0vìXÌš5 çÏŸÇ‚  R©°zõjØØØ ¤¤DèÓÔÔ{÷îÅÈ‘#4_$Éd¨««ÃK/½Ô¡Ç®/—¹¹9$ ÌÍÍ!“5Osë,ÉÉÉ:s5Jg¶¾}û4¯Ñ6ëÅ‹;<§:³ÚÛÛkô›’’'''áéåäÉ“1aÂ$''# @£_ ùÙYZZâââððáCbïÞ½=6Ë娭­össs…5gk&&&0333¨o___ØÚÚâĉˆŒŒÄ믿Ž9sæ´[äÑå2dˆðÇGFF†°ß§OÍWÕLMM!•J…ýŽš8q"222ðþûïÃÜÜãÇÇ;ï¼sss””” ??_ãj¤J¥Â„ „qZ~á­™šš"''û÷ïGQQ,,, ¾ /W{ZgÑ—»#ÙŒ1¯º2§†Ì£R©ÄË/¿¬qÛË/¿ŒÒÒR­~³³³aÆáÍ7ßĸqã:ýØÊÊÊ4þæÍ›×îôúõë(//iuóæM”––bÚ´iZÇ=£GFUUâãã±fÍ899aË–-ÊÛZ— ´í¢ÊÊJüä'?éj·ˆ+V¬ÀŠ+››‹ØØXá©”™™ÆŒƒ;víU*$ ªªªtþRSRR‰Í›7ÃÝÝ&&& 4Z®ö´Î¢/·1²u…!sjHV333§š@óšº_¿~4çG&“ÁÔÔ•••¨©©ASS“Ɖ £?~Œ´´4üþ÷¿f[WWWa 1nÜ8û¢££accÓn¶P«Õ©Tо}ûœµ=]^ƒ–”” 55@ódœ:uJøOkˆ;wî --­Ýý£GbÍš5J¥pqqÁÌ™3QVVðòòBVV–pQA¥RaÙ²e¸xñ¢Þñ”J%† †1cÆÀÄÄDXûB_®gÑ—ÛÙºÂ95$ëøñãqýúuáe—ŠŠ |óÍ7ðòòÒj;zôh8pï¾û..\¸€DEE=s~U*jkkQSSƒœœ|øá‡6l&Nœ¨Õ¦õVWW333á/ù …ö©©©¸zõªÎ+¿7nÜÀæÍ›ñþûï Mׯ_¯7gGuù êêêŠ}ûöA¡P °°#GŽD`` ª«« ê'11ß~û-~úÓŸjíÏœ9_}õÂÂÂ`ee…œœ,_¾0tèP„……aÅŠpqqA~~>ÜÝÝ1}út½¿ÌÉ“'ãСCX½z5LMM!“É`gg‡}ûöaÍš5ʬ/Ð|õï¯ý+V®\ kkkcõåV*•:³…‡‡4¯Õ:ë¨Q£:<§úæqëÖ­Zý.X°K—.…‹‹ îܹƒiÓ¦ÁÛÛ[ãª|kððð@yy9N:…µk×"**Jç㈈ˆ@DDÀÂÂ?ûÙÏðÞ{ïiœwïÞÝ»wkgjjŠÄÄD„……¡®®¡¡¡pttDcc#JJJ°jÕ*¸¹¹iwáÂ?~óæÍÃÆ…¥†±H¨Í‚áÈ‘# éÐeé ¸yó&ÌÍÍ…‹ÆÖØØˆ[·n¡¡¡NNN°²²Ò¸¿¬¬ ÷ï߇­­-Û탈PSS Ígü[·nÁÚÚ¯¼ò JKKQ\\ OOO£äª¬¬ÄÝ»wáìì¬ói¿®ÜÆÈ¦OÛ¹h/kGæôYYÛë·¤¤……… bm3.7.0/doc/html/a00161.map0000644000175000017500000000165011365042641013234 0ustar tlktlk bm3.7.0/doc/html/a00150.md50000644000175000017500000000004011365042635013135 0ustar tlktlk3022619a0bb4776eae58c57002bd1cbebm3.7.0/doc/html/functions_func_0x6d.html0000644000175000017500000001016211365042644016500 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00206.map0000644000175000017500000000023611365042646013240 0ustar tlktlk bm3.7.0/doc/html/a00159.md50000644000175000017500000000004011365042640013142 0ustar tlktlkef9bac895cc048fbf143baf9333d50c5bm3.7.0/doc/html/namespacemembers_func_0x69.html0000644000175000017500000001002111365042652017715 0ustar tlktlk BitMagic: Data Fields
 

- i -

  • ilog2() : bm
  • ilog2_LUT() : bm
  • ilog2_LUT< bm::gap_word_t >() : bm
  • improve_gap_levels() : bm
  • is_bits_one() : bm
  • is_const_set_operation() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00154.map0000644000175000017500000000231111365042636013235 0ustar tlktlk bm3.7.0/doc/html/a00151.md50000644000175000017500000000004011365042636013137 0ustar tlktlk2270d3dbaf42c2de94cea6516cb1c0edbm3.7.0/doc/html/a00139.map0000644000175000017500000000045111365042633013240 0ustar tlktlk bm3.7.0/doc/html/a00255.png0000644000175000017500000002063211365042652013252 0ustar tlktlk‰PNG  IHDR£uã…ŽrbKGDÿÿÿ ½§“ IDATxœíÝy\TåþðÌŒ"  B¢ ‹($¸$™àB*¹¡bøÃܺ*eæ†f?—"Íļ ÒEYŠ2ü‘^qE‰ðŠ;¹Ä"Ⱦ*Ã2Ïï/#3#ƒÀaù¾_¯ùãÌœå3Ïá;ç9gÎ(1Æ!„î\Uæ:!„BňBç¨BáŸë=]VV’““¹ŽAH§âêêÊuÒÁ¨q,11\Ç ¤S¡ëªz*FĹs縎@ç°cÇ®cÐ9#B!œ£bD!„sTŒ!„pŽŠ!„ÎQ1"„Â9*F„B8G—vw!¹¹¹ÈÈÈÀ´iÓ:|Û—/_†¶¶6ÌÌÌÚ}[•••8yò$.\Ø&óµ.Û¿¥Nœ8òòr€’’455aoo]]]ñ¿’öA=« ÉÊʉ'8ÙöùóçqãÆÙVuu5Nž<Ùfóµ.Û¿¥~þùg¤§§£°°Ož<Áùóçáé鉄„ñ<ÑÑÑHKKCaa¡Ä£±ˆÂÛÛñññ8p 455ŒM›6Ñ—QI»¡##Òé 8Gm³ùzgggLž{ö,.\ˆ©S§Â××ÕÕÕâ×ú………/]®¬¬ ëׯÇéÓ§1cÆ ¤§§cóæÍâåàááGGGÌ;‘‘‘€ÒÒRñ|©©©Xºt©Äc÷îÝ oû¯¿þjUûËËÙÚv‘¥®®Nîë/š4iŒ[t—ÂÂB$%%aùòåâBýúõÃúõë¡®®þÊy‘†ŽŒº˜»wïÂÊÊ Çǽ{÷°iÓ& 4VVVHOO‡¥¥%¢¢¢pâÄ ìٳ˖-CLL ~üñG9r“&M¢W¯^âõ6¾ÿ>víÚ…­[·ÂÞÞ'Nœ@@@lllPSSƒO?ý‹-ÂÞ½{qãÆ øúúbàÀxúô)âãã€~ýúáË/¿Ä±cÇðÑGÉ]NWWPUUÅîÝ»¡©©‰ôôtÀÓ§O±{÷nlÛ¶ ööö¸}û6|||0mÚ4…Bñ|ðóóðü|‡¯¯/^ýuPhÛ­jÿÑ£GËÌ™™™Ùªv±°°Øv^^bcc‘””„ÐÐP…ú©©)>|(žÎÈÈh6±±1 ¡­­-qŽ©‘ƒƒƒÔuÿþûï8vìæÌ™ƒI“&A (”€ŠQ—£®®ŽeË–ÏçÃÊÊ ³gÏFBB¬¬¬Àƒ››”””`kk ‡ùóç‹§úé'ñzÆ'±Þ¦ÓgΜƒƒƒx8fÞ¼yˆ$%%¡ÿþ˜5k`Ô¨Q˜6mΟ?‘#GxþIYMM [·nE}}ýK—›?>„B!Ö®] mmmäç狳`èСžŸdçóù¨®®ÇÏ×»woq!Ù¾};ÌÍÍáîî®ð¶[ÛþãÆ“™³¶¶¶UíbaaÆRRRƒÇcÆŒxiΩ¨¨ ªªJ<™™)>GÔ”²²2ÔÔÔZ÷„  ££ƒØØXcÊ”)pqq‘ZБ…ŠQ£¯¯>ÿï?›±±1ÒÒÒÄÓ½{÷ðüJ*@ þ‡ÝtÈåeŠŠŠ`dd$ñÜàÁƒùùùÈÊÊ’¸‚M(b̘1;v,ÒÒÒðá‡B]]o¾ù&-Zuuu¹Ë5æ“V îÞ½‹ÀÀ@äææBCCCîIôÐÐPäååáÛo¿?×ÚmK#«ýåålm»dddÀß߃Ƽyó`cc£Ðß±©¢¢"‰÷8gΩ献^½Šââb0ÆšmëæÍ›(((À;ï¼Ól¹áÇcøðá(//G\\|||`bb‚íÛ··*/éy¨u1/~š-++Cß¾}Ût}ûömvéoãvÕÔÔ0bÄìÙ³GüšP(„’’cXµjV­Z…ÌÌLDGGã³Ï>C`` ÜåÊËËeþ“MLLDpp0üüü`ii eee̘1Cê¼.\@\\¾ÿþ{‰!ÈÖn[Yí//gkÛåþýû(++Cee%$ aK=}ú)))ظqãKç577G}}=ÒÓÓacc#ñZXX´µµ¥£F"‘Àãñ ªªªpVÒsÑ ]L~~>’’’<ÿ'sâÄ ñ'|EÜ»w)))R§mllpöìYx~‚ýúõë[[[\¿~]|¢_(bùòå¸té"""àãã333L:EEE/]NžÂÂB <#FŒ€²²2nÞ¼‰§OŸ6›/33ß|ó ¾øâ‹fG9­Ý¶4²Ú_^ÎÖ¶ËðáÄ¥K—âÂ… ððð@HHˆxYY„B!ªªªPYY‰»wïbóæÍ[·naôèÑͦÇ .ÀËË &&&xüø1lmmƒ ‚··7V­Z333deeÁÒÒ“&MBQQ~ýõWx{{CKK wïÞÅŠ+Z´œ,ãÇGhh(Ö®] @>Ÿ===aÞ¼ÙIí¢¢"XøÊ|8wÄ\›¹xoä{ÐwGi á #Âja5þç_ÿƒŸR~‰# iøÊ|¬zg¾]ø­Ìy:«K™—ðöž·Áäœ0â)ñ% AÔ€ÁÚƒñAÆ+s~Bº™«t5áD•>Ð×ÔOË+DN>R‡ëx<,õ-á1ƃƒd„pŠáL½¨£7⋸/`¥gÕl‹1†cÞÇ *På(aÛÛ1{k–x¯|e>tÕuñ ð&}= Y%Y&$„TŒ'rËr1éëIøîìw8âu©ÛRakh+>ÄSæaÝ”uÝîŠ2U*Žz•®ã)ópæã3HÞœŒÂÊBØ|aƒ“×Or˜’ŽGňt¸“×OÂÚÏ…•…HÞœ ¯q^âóGª½žëcû{Û9NÚ>Æ‹O¦~"žnTûVï"nu\³×¸ò> û¶ƒm±,Z¤$¤ÃЗ^IÇÈ-Ë…[ RÿJE€G¼ÆyÉœ7ùa2ìíe¾Þ]däf`È€!2/㾑{®‡\Q\]ŒcÞÇ0ÅbJ'$¤ÃP1"íïôÍÓX¼Ú}´µ" ––\Gê2ª„UXqt"þˆÀç ØþÞv¹_ž%¤‹¢bDÚOã°ÜW§¾‚›yj6,GZ&ðb |"}ð¦Ñ›4lGº#*F¤}4–ûvá·X:a)בº<¶#ÝÝ›Ž´½Ó7OcÔöQâ«å¨µ KK¤ø¦`Šù8ëŒm¿lkv'pBº*:2"m¦^TÏO|Žÿ·“†åÚYàÅ@¬\‹±CÆâ¨÷Q¶#] Ó‘¶‘U’·@7\˾†½ öb™Ã2®#u{ײ¯aaàB”T—àˆ×Ì1ƒëH„´ Ó‘W k?kTÔTà-P!ê #_‰«¾Wñ®Õ»p9àŸHë…\Ç"¤UèȈ´Ú³ºgøøÇqèÂ!¬x{¾YðM·º\WžŽ•a+a2ÀË"0ìµa\G"D4LGZçæã›X¸9¥98üþa̵™Ëu¤ïÏ‚?áä†;ywà€Åcs‰–¢a:¢¸À‹°ûÒ½5ðŸÏþC…¨“0Ñ5Á•W°üíåð ñ‚g°'*k*¹ŽEH‹Ð‘i±²§eø ôO;ŽMïnÂç.ŸÓÝ:©ßnü†ÅGCKU á„ãM£7¹ŽDˆ<4LGZ&é~܃ÜQÛP‹£ÞG1ÉlבÈKä—çÃ3Ø3/bçœøÈé#())q‹ih˜ŽÈ'b"üïÿý/ö8ÀÂÀ×¶]£BÔE ÔˆS‚Ÿ‹6ü¼Ó÷OGae!×±‘ŠŽŒˆLyåyð öDbf"vÍÝ…µŽké“uõûƒßá䎚ºõ> ÇáŽ\G"¤):2"ÒÅ߈‡µŸ5²Š³pyãeø8ùP!êÂÆ¼1i[Ó0aèLÙ;[b¶Ð÷‘N…ŽŒˆa½›Žo¾3û°hÌ"ô8H·ôéf‚.Á'ÒÖ¯[#liŒuŒ¹ŽD]À@þv'ÿ܃Üq¿ð>¸€çXO®#‘vrëñ-¸¹áQñ#Ztnvn\G"= Ó‘ç_: Û/l!à ¶5 Q7g®oŽäÍÉðçÃxÿÈûô$Â):2êáš~whƒóø¹øAÀp‹t “×ObÉK ©ª‰ðÂ1Úh4בHÏCÃt=Y⟉ðò@ƒ¨¡Þ¡tÉv–_žÅGãüÝóØ1k>™ú ”•hà„t*F=Q½¨;âv`Çɘn5G¼Ž@[]›ëX„cŒ1øŸöÇ–Ø-pê€PïPèiêq‹ô TŒzš¿Šÿ‚Ça¤þ• ÿùþXùöJºd›HHý+îAî(}ZŠà÷ƒ1Óz&בH÷G0ô$?¦üˆ‘ÛG¢üY9R¶¤`ÕÄUTˆH3¶ƒm‘º5Ó­¦ã½€÷°:b5jêj¸ŽEº9:2ꪄUX¹!—C°òí•ðŸïÞ‚Þ\Ç"]@dJ$V]Ãþ†ˆX } ®#‘麻Æ!—’ê{ÃÅÚ…ëH¤‹yTüAHÏJ>´;q%בH÷CÃtÝc _ŸúãvÃëý_Ç>û"Ò*FÚF¸ðé|2õ¬ŽXY³P\UÌu,ÒÍБQ7Ôô2Ý/f}õS×Óeº¤M\¼wžÁžôuÒÖèȨ»‰¿~#ð°è!.o¼Œ Ó6P!"mÆa˜®}v cÞƒÉßLÆæ˜Í¨k¨ã:éèȨ›Ö ±áç Øv?<Çxâ€ûôíÝ—ëX¤;|é0ÖF®…¥%Â?ÇC¸ŽDº.º€¡;¸wnAnxXôß{|w{w®#‘‚n®KÚ ÓuuñæŽ7Ñ›ßé[Ó©‘e6Ð I›’àý–7Þy‹/Bų ®c‘.ˆŽŒº¨’ê|úbÓc±Ñy#üÞó_™Ïu,Òƒývã7x…xA]Eá„ÃÎØŽëH¤ë aº®è½ ð öc G½b¢éD®#xRñ^!^H¸??lp¦ hH‹P1êJêEõøüÄçØ¿ .Ö.ZD78%c {ÏìÅæã›1Þdÿüs…–ioûöíùsç““ƒ¬¬,DEEÁÔÔáááâyöïß„„äääH<;{NNFŒAGG¾¾¾˜1czÊ <¸ìë­Ñš>û*–.]Ї¾òzÚËmÑ^Y;² ºå~-ë -ñ믿2{{û6ù6¼¢<<<ØÞ½{9Ù¶,ÙÙÙLEE…ëLMMÙÑ£G%ž‹ˆˆ`ªªª,''‡1Ƙ…… ‘¹Ž™3g²… 2‘H$~.??Ÿiii±ãÇ·KîFŠôGE¹»»3ww÷ÍËe_oOmÕg Xzzz$j핵#Û «ï×r†W>g$‰°fÍhhh@WW;wîÃÉÉ ß|ó ôõõ1`À9rŸ|ò  ===DFFŠ×óÕW_añâÅ2§###addUUUÌš5 åååâ×2220~üxôîÝÆ “øtàëë‹@EEï¼órrr^º\AA¦NŠÐÐPhiiáܹs˜9s¦x¹ˆˆ˜˜˜€ÏçCOO_}õU³vyòä‰x™3gÎ`äÈ‘%K–(œãÖ­[RÿB¡PÞŸ¨™… ÂÒÒ?þøãKçÍÉÉA\\vïÞ-ñ-ú×^{ ‡†––Ö+çé*:ª¯sÕg_FV®     ,À¥K—¤ö[yû¨¬lж«,M÷ų*Ò¦·nÝ’™UÚzÏŸ?kkk¨¨¨ÀÌÌ ¿üò‹ÌõJÓãöë+–¢GFJJJìã?fÕÕÕìÒ¥KLSS“EEE±¼¼<¦¬¬Ì¶nÝÊD";xð ÀvíÚÅD"Û³g311¯ë—_~aû÷ï—:}íÚ5¦¢¢Â¢££Ù³gÏØÞ½{¶wï^VUUÅôôôØXMM KHH`ìòåËì·ß~cúúú,33“UTT0¶bÅ Æ“»\vv6SUUe³gÏfW®\awïÞe}úôaŒ1VQQÁTTTXLL «©©a.\`ÊÊʬ  @âSæÃ‡ÅËTUU±ÌÌL–™™É®_¿ÎŒÙÎ;Î! %ÚÿþýûlݺuÌÔÔTæßHÚ'(Æ[µj[²d cìù'(ooo"ñHIIa111ÌÀÀ Eý¡Qtt4³µµe?üð«©©QhÙu¦#£Žèë\öYyäå*--ezzzìܹs¬¶¶¶Y–’’™¹åeS´]eiº/¾˜U‘6-**’™õÅõæçç³¾}û²VSSÃbcc™šš»sçí×Lú‘Ñ+£~ýú±ÚÚZñs[¶la³gÏfyyy «ªªbŒ1vïÞ=ÆçóY]]cŒ±´´4öÚk¯µh;Ÿ~ú)sss“xÎÊÊŠíÝ»—EFF2‰×Ö¬YÃ|||Xll,Ó××g7nÜ`Œ=ß™KKKcLîrÙÙÙ ËÍÍeŒIvæšš–šš*^¦qgÎÌÌ”YŒšZ°`Ä{Q$cŒ‰D"ϦOŸÎÌÌ̘¿¿?+..–Ùv²:íºuëÄ9,,,بQ£Ø{ï½'ñ a¡¡¡ÌÌÌLæúeùý÷ß™§§'4hÛ´iËÊÊRxŒu®bÔ}Ë>ÛÚ\ŒIQ½˜E^nyÙÚª]_Ü›fU¤Måe}q½‡bë7oóóó£ýšI/F¯üklC† @ O[ZZ"!!A<ݧOϯøPQQŸÏO·Tnn.,,,$ž377Ÿuuu…³v&Ñ×;SŸmi.išf‘—»-²½ EÚT‘¬¸qã†ÄsÅÅÅÐÔÔÚ¯¥xå =z„¸¸8Ï¿³ðÏþSü©B©©©8uê”ÔiGGGDFF"//pýúuñÑ…““.]º„Û·ož>} [[[ÄÄÄ`÷îݘ8q"ø|>ììì°xñb<~üø¥ËÉ“““sssL˜0<III¨¨¨»Lzz:V¬X˜˜˜fŸ\Éaooôôt|ùå—ˆŽŽ†‰‰ >ûì3äææÊÝþÓ§OQVV†ÒÒR\½z...077ÇôéÓ›ÍÓôQ^^ ¬^½Ë–-Cff¦xþ¸¸8ÄÇÇK\ˆÑÔùóç±`ÁŒ;Œ1$&&"44TnÎή#úzgé³/’—ëeäån‹l¯B‘6U$ëäÉ“ñïÿ<ðü"Šèèh8995›—öëÿzq,OÑsFcÆŒaC‡elàÀÌÙÙ™ÕÖÖŠÇ{effJŒÛ¦§§KŒ÷®]»VâÒÙ¦Ó"‘ˆyxx0---6qâDfhhȜŗvûûû3 æèèÈ ˜««+khh`ÙÙÙÌÐÐYYY1GGG¦©©ÉÅÛ·ÇÏ×tÌ9++‹éêê2æääÄœÙ!C˜‹‹‹ÌsF+V¬`<õéÓGühzò°¥9^ôøñc¶mÛ6faa!sSSS‰´ÒÖÖfÞÞÞãýRüªñ½…B¶|ùrÖ«W/6räHfnnÎÔÔÔX@@€ÔmFEE1%ßo­ÎtΨ#ú:—}Vž—å5j?~<»zõªÔ~++·¼lж«,/ž3jšU‘6•—UÚz·mÛÆ´´´ØäÉ“™¶¶6[¹r¥¸-{ú~ )猚ýìxxx8<<<úÒSMM ’’’ ©© ›W(òeddàÉ“'°³³ƒ†††Äk¹¹¹¸yó& $Î/ …BüñǨ©©µµ5tuu[´\S"‘¥¥¥ÐÖ~þßøã? ««‹#F ;;<ÀÛo¿-s™—iIY:äÓ………ÈÈÈÇèQ£š6éq@CIDATý Ú#OkúcK5~ ]‘×눾ÎUŸ}•\………HOOÇèѣѯ_?©ËËÊÝÙäy±-¤eméþ'/«´õ>zô÷î݃‘‘Q³sH/Ó÷k%%%„……ÁÝݽñ©«mRŒi/­uWyyyc¼ÈÊÊ ÖÖÖ˜¨åºröžJZ1zå !]Ÿ@ €ŽŽŽÌ×ÕÔÔ:0bºrvò7*F„èèè`Ú´i\Çh•®œü~B‚Bç¨Bá#B!œ£bD!„sTŒ!„pŽŠ!„ÎQ1"„Â9™ß3š?~Gæ Dª¨¨¨v]xx8êêêÚu„—kVŒ áêêÊEBšiϾhooO…ˆ¸ººÂÐÐPâ¹f÷¦#„B:ØU:gD!„sTŒ!„pŽŠ!„Îý?jÕÎò>ÐIEND®B`‚bm3.7.0/doc/html/a00228.map0000644000175000017500000000023711365042647013246 0ustar tlktlk bm3.7.0/doc/html/a00231.png0000644000175000017500000000440211365042647013245 0ustar tlktlk‰PNG  IHDR£(’J›bKGDÿÿÿ ½§“·IDATxœíœYLS[†ÿB±‚Zê€Z4jy@ qˆSƒC¨1܇5>ø`œâƒ&>80Qãôà˜* `q@¨ Ñ  E‹€ Ø‚Úÿ>Nn½t@{¥7î/9묽öZ{÷ïîÞ9d$  ÷©ðëí ‚.„>ƒ£Àg;sdffþÎ:K–,ù×=™³ŒL&ûÏ ü¹t#;×N’â—×.NçTobÏ(ð„>ƒ£Àgbø BŒŸAˆQà3xEŒµµµ¸pá‚7ºüÏÈÍÍÅǽҗWÄøòåKœ>}Ú]ý‘¬[·uuu½]ÆO‘™™‰ÒÒR¯ô%~¦}€Û·o£¥¥¥·Ëèu¼&F»ÝŽ7B©TbèС8xð  ±±Z­iii EHHÎ;‡mÛ¶!$$jµéééR?)))Xµj•S{÷îÝ B¡Àœ9sP__ï‘ïÙ³gÐh4èÛ·/"##qåÊÆå,®'ã2 ذa6mÚ¥R‰áÇ#-- ””‹Å‚¤¤$ ìÛ·©©©Rþ††Lž<?~t[«^¯Gxx8‚‚‚°fÍlß¾7oÞ„ÑhÄœ9sÚ&%%¡¼¼põêUDDD@.—C­V#%%`±X0oÞ<\ºt *• ÕÕÕHOOǘ1cˆ… z÷KD' N§sæv@¯×S&“qëÖ­loo§Á``pp0333i6›éççÇ={öÐn·óäÉ“ÀC‡Ñn·óÈ‘#ŒˆˆúÊÍÍå±cǺµoß¾ÍÐÐPÖÔÔ°µµ• \¿~½[_[[Õj5Oœ8A›ÍÆÂÂB*•J–””¸—«¸žŒK¯×S.—sóæÍlooçƒÌ7n°¹¹™jµšÅÅÅììì¤^¯gdd¤TÃñãÇçö3xýú5û÷ïÏëׯÓjµòÀô÷÷çåË—ùâÅ <Ø¡}LL ØÚÚJ…BÁììlÚl6Þ»w~~~´X,4™L dbb"KKKùðáC* ^»vV«•G%=zÔm}]èt::‘Ý#¯‰qàÀììì”î%''311‘f³™ØÖÖF’|õêår9¿|ùB’|üø1‡ æQžœœ†††òùóç$¿‹¥¹¹Ù­/=='NtèkãÆÜ¼y³Ë|®âz2.½^O¥RÉŽŽ‡ùIJJ"IŽ1‚Ož}槨¨è_9ûôéƒ  ++ AAAxþü9/^ìvnŒF#"##%[&“!,,ÌmœB¡@ee%víÚ…ÚÚZ 4v»]òûùù!44ðöí[Œ7Î!>**ÊmOñÚžñǶÅbÁ Aƒ¼Õ=€ï¯¥¦¦¢±±™™™°ÙlÒåʧT* £Ñèp:uÊe¾ŸëŽç§¡¡ è¶íÒ¥K‘••N‡ÄÄDIð®0`î577;mßÞÞÈÉÉArr2vïÞW¯^áÑ£G ’ÚýóK5pà@X,—ãú¼&F£Ñˆ¼¼<À§OŸpæÌ·+OwTVV"??¿[ûðáØ={6är9¦L™‚U«VáÝ»wn}Z­ƒ/^¼|þü“&MBvv¶ËZ~6®;êëë‘›› hkkÃÙ³g¡Õj»m;wî\˜Íf?~Üáðæ®Öœœ444ÊÊÊP]] ™L†€€´´´ ©© P^^ŽÚÚZ©®¨¨(ÄÆÆÂßßeeehmmí6G\\ÒÓÓa6›UUU¸ÿ¾ç“àg¿íèážqÚ´i;v,gΜÉáÇ3>>žÒÞª‹ššöë×O²ŸïܹÃ÷ïß{ì#ÉúúzæççK‡OùÙ¸.ôz='MšÄŽŽÞ»wååå´Ûí’ßb±0??ŸMMMÒ½Õ«WsçÎç°X,¬®®æÓ§OY\\ÌŽŽ†……±¬¬Œ$ùåË  éÕEKK øôéS’ä›7ox÷î]§¹ªªªXPPÀ––ëë•]þÙN§Ãòå˽· ûf³Ùáõ#ÑÑш‰‰ùåƒøÇO‚^¡GO`222þÛj‚pº2 ¿ñFà;1 |!FÏð7¢$"¦þÙ¾IEND®B`‚bm3.7.0/doc/html/a00125.png0000644000175000017500000000742711365042643013255 0ustar tlktlk‰PNG  IHDR(ê.ÑbKGDÿÿÿ ½§“ÌIDATxœíÝ{TTUßÀñïà Žê󆂄”âmÉEÌå…ÒD‡T3o壣fúào¥e&KÔE3äAC+Å^M—ð†’†ˆxá" Èe€˜÷–³DîõÙŸµæsöÌïüÎ>‡ßì³ç0#Q«ÕjA´¤C{' ÂQtAÐ*QtAÐ*ÝúÂÃõ™‡ÐB¼ùæ›íF‹\ºt‰ŒŒŒöNCxŠê}úpüøq²³³ñðð 44¹\Nll,ãÇo0·={ö`iiI§Nðõõ¥ªªŠû÷ïãææÆ¶mÛèÖ­¦¦¦ìÝ»—%K–`jjй¹y¡m@@¦¦¦Èd2FEfffs»¾^eeDEý¾¾!ôï€Rù-—.ýÝfñŸ%...¼úê«ÄÆÆ’ŸŸÏgŸ}¦i ÁÓÓwww-ZDNNHRR§OŸÆÛÛWWW&Mš¤9V………(•J~þùg cÆŒaãÆTUUîîîÌž=»ÆVZZ ,`ôèÑ5FdOz´ððp&OžŒ§§'ÑÑÑìÚµ OOO&MšÄ™3gûä~°téR~üñGÆGbbbþi(÷úú®µÚ¤ètêÔ‰Y³fñÎ;ï0yòdöìÙÃ7°²²ÂÙÙ¨Öyxx P(xðàß|ó sçÎåÂ… ìÞ½vïÞÍàÁƒkÅ/**Â××—-[¶P\\Ì‘#GX¾|y­NHKKC¡PðÅ_——G¯^½øüóÏÉËË#++‹ &°hÑ" B¡PššJyy9çÎãØ±cDGGÓ½{wbccêÌíŸþ!..Žk×®‘””Ddd$¿üò ÄÆÆRPPÀíÛ·Y½z5~~~˜šš’ÍâÅ‹Y±b§Nbß¾}\¼x‘ÜÜ\ŒY·n]«ŽCee±±Wùøã0lm˜3'”Ó§ÿ¤²òªªÔTU©[ÿYÖ»wonܸJ¥"11€¸¸8¢££Ù¹s'ÇÇÀÀ€ƒ T*éܹ3J¥’~ýúQRRBPPsçÎ%&&†U«VLAA•••$%%ñûï¿ʾ}ûøõ×_IHH ''‡•+W2kÖ,Nœ8Áˆ#Xµjjµš²²2–-[†››'OždñâÅlÛ¶äääZùWVV’˜˜ÈÇ Ç××—M›6!—ˉŒŒäÝwßeïÞ½ Æ}r¿***¸rå çÏŸ'((SSSMÿ4”{C}×Zm6§Ì©S§°°°`ÇŽØØØ0hР͜Ή'077gþüùÈd2\\\ðññ!<<¹\N‡ËåH¥ÒZ±õôô¸pážžžÈd2¬­­‘J¥ÌèÑ£?~<úúú,_¾333Ž;†ƒƒ>>>Èd2&NœÈرc9r䥥¥|õÕW 2===MÌúr[»v-zzzØØØ`kk«É¥ªªŠO>ù‰D‚››ººº(•JÍrQQP}â@õ¥©‘‘‡bÆ -êû¸¸øûG`g€·w0Ç'PZZŽZ­¦²²ªE1Ÿ72™Œòòòë-WTT```ÀŠ+øàƒ044D"‘`hhˆ®®.R©”;w2lØ0¤R)æææèêêR\\ TÍHÛÚÚšââbbcc8p Æ C&“1uêT&NœHyy9/^¤k×®xzz"•Jqpp`̘1œ={¶Î}P«ÕL›6 ‰D‚££#:::L™2E³\RRÐ`Ü'÷ ªÏ±… bkk«Y4˜{C}×Zm2§£V«©ªªbÔ¨QŒ5 €›7o2þ|&L˜@ZZééé\½z+++ÍëJKK;vl£ñe2ñññ|úé§\¿~®]»j†¶KOO§W¯^še‰D‚µµ5™™™5Ú úÝñÑ'l:t [·nMÚ_LMMklçq:uÒ¬—ÉdšýøóÆÇ™3gpvvF.—ãî¿?r¹¼I9¤¤Üáï¿;‘‘Ñ‰ØØH¥:TTü@EEã#š?üŸ&mçiJNIV›ÄÊÍÍ套^ª±nÈ!$$$0þ| 4hï½÷†††µ^/•JIMM%88˜Û·ocllŒú‰oò}<þ£cyïÞ=zôè¡Y¯««Ë´iÓ4mL:UÓ®R©êÍ?¢¯¯¯‰/•JÑÑÑ©±½–Ä•H$µú¦±Ü›ÓwÍÕ&EçØ±cÔ6ZZZ²~ýzìííyøð!ÆÆÆ >œ˜˜ÍsJKKkýÁÖßßߟˆˆœÑÑÑ©óÓÈȈû÷ï×X—ŸŸ€±±1üñG¶û÷ïÓ¹sg váxÚÔj5[·neëÖ­$$$°cÇ&MšDBB‚Vóx”””ÇòåËk¬W«ÕÌ›7yóæqíÚ5"""4—MO:þ¨^>9i àææ†ëÖ­ÃÔÔ”‹/òçŸ"‘Hpww'00´´4¬­­ÉÊÊ"""‚ÐÐжè‚f "::šóçÏóÆo0cÆ f̘Ñä×÷íÛ ›bllŠù׿ÖrìX‘‘ñ”!•J¨¨hø²j÷î™­Ý…Vóöþ‘¬ tT*>D­VsçÎvíÚ…¥¥%C† !ë±€‡æÒ¥K|ùå—ôéÓzï±ÊÉÉÁÒÒ;;;’““5—3 qttdõêÕ —ËIIIaݺuDFFâèèÈ®]»¸yó&–––¨T*>üðC¦OŸŽ««kówü±m¶E܆roNß5W›ÂÂÂðóócÕªU˜››“‘‘AçÎ9zô(¯½ökÖ¬aðàÁ899qõêUœñòòÀÌÌŒ °}ûvkÄŸ8q"kÖ¬aäÈ‘èéé!•J±¶¶F©T²sçNÍóÆŽËøñã±µµÅÞÞžââbìííÑÓÓcàÀ(•Jqrr"!!)S¦0f̘F?5z<·îÝ»·E—1sæL‚ƒƒ±³³ÃÌÌŒß~û­ÞOäãäô*NN¯ø6çÎýEdd<'O&QVVŽŽä…›×y4B„êì°aØ;wn­wt¢¢¢ðóóC.—“ššÊœ9s4í]ºtaûöí|ôÑG :”ÐÐP.\ˆT*ÕÌÝ|ýõ×(•ÊzsqppÀÕÕlll¸zõ*sæÌ¡cÇŽôèÑ???æÍ›GŸ>}ÈÈÈ ÿþ¸¸¸´jÿ‹ûø~uéÒ¥E¹7Öw­!Q?yáú¨A"iö—x©T*âãã),,¤[·n 0 Ö‰pûöm’““éÞ½;¶¶¶šõ999$&&âääTgGrùòeÌḬ̀³³ãÖ­[¤¥¥1räÈ1rss©¨¨ //gggúöíKXX˜æz7==¿þú ++«Zs¢™{ô Ö;Ÿ·2ûÖóöö&++«M¿ÄK­VSTT„±±1P=š’’Byy9={ö¬qY^PPÀõë×éÝ»7FFF”””’’B—.]°¶¶&;;›»wïbooßèv333¹w﵎cnn.éé阘˜Ô˜Ól­úâ>¹_{²ʽ¡¾kеk×òòË/×:?Û´è´·ÄÄD\\\8zô(ýúõ#""‚Í›7sýúõ:?{Þ5TtW×Í/jÑžõ6¹¼zV888°oß>6lØ@^^={ö$::ú…,8Íal¬—×xy½AvvQQ‰í’ð_ì…*:žžžxzz¶wÏ,33£çú_ „çŸøj A´JA´JA´JA´JA´JA´JA´«¾·çøñuñhÙÔ?/ E»÷Ÿxhÿü¬÷æÀï¾û®¾&ábaaÑÞ)´ØÇ,nä|ÁÕu~Öû¿W‚ Oƒ˜ÓA«DÑA«DÑA«þ~SH‡,¡×IEND®B`‚bm3.7.0/doc/html/a00216.map0000644000175000017500000000021311365042646013234 0ustar tlktlk bm3.7.0/doc/html/a00006.html0000644000175000017500000002607311365042627013433 0ustar tlktlk BitMagic: sample6.cpp

sample6.cpp

This example demonstrates using of custom memory allocators. In this case allocator works as a memory checker, counts number of allocations and deallocations to make sure that there is no memory leaks.

For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample6.cpp
 This example demonstrates using of custom memory allocators.
 In this case allocator works as a memory checker, counts number of 
 allocations and deallocations to make sure that there is no memory leaks. 

For more information please visit:  http://bmagic.sourceforge.net
*/

#include <iostream>
#include <cassert>
#include "bm.h"

using namespace std;


// Custom allocator keeps number of all alloc/free calls.
// It also reservs the front word of the allocated block and saves
// number of elements allocated. On deallocation it makes sure
// it deallocates the same size as allocated

class dbg_block_allocator
{
public:
static unsigned na_;
static unsigned nf_;

    static bm::word_t* allocate(size_t n, const void *)
    {
        ++na_;
        assert(n);
        bm::word_t* p =
            (bm::word_t*) ::malloc((n+1) * sizeof(bm::word_t));
        *p = n;
        return ++p;
    }

    static void deallocate(bm::word_t* p, size_t n)
    {
        ++nf_;
        --p;
        assert(*p == n);
        ::free(p);
    }

    static int balance()
    {
        return nf_ - na_;
    }
};

unsigned dbg_block_allocator::na_ = 0;
unsigned dbg_block_allocator::nf_ = 0;

class dbg_ptr_allocator
{
public:
static unsigned na_;
static unsigned nf_;

    static void* allocate(size_t n, const void *)
    {
        ++na_;
        assert(sizeof(size_t) == sizeof(void*));
        void* p = ::malloc((n+1) * sizeof(void*));
        size_t* s = (size_t*) p;
        *s = n;
        return (void*)++s;
    }

    static void deallocate(void* p, size_t n)
    {
        ++nf_;
        size_t* s = (size_t*) p;
        --s;
        assert(*s == n);
        ::free(s);
    }

    static int balance()
    {
        return nf_ - na_;
    }

};

unsigned dbg_ptr_allocator::na_ = 0;
unsigned dbg_ptr_allocator::nf_ = 0;


typedef bm::mem_alloc<dbg_block_allocator, dbg_ptr_allocator> dbg_alloc;

typedef bm::bvector<dbg_alloc> bvect;



int main(void)
{
    {
        bvect bv;

        bv[10] = true;
        bv[100000] = true;
        bv[10000000] = false;
    }

    cout << "Number of BLOCK allocations = " <<  dbg_block_allocator::na_ << endl;
    cout << "Number of PTR allocations = " <<  dbg_ptr_allocator::na_ << endl;

    assert(dbg_block_allocator::balance() == 0);
    assert(dbg_ptr_allocator::balance() == 0);

    return 0;
}

  

Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x65.html0000644000175000017500000001064611365042644016430 0ustar tlktlk BitMagic: Data Fields - Functions
 

- e -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00160.map0000644000175000017500000000164411365042641013236 0ustar tlktlk bm3.7.0/doc/html/namespacemembers.html0000644000175000017500000001007011365042652016120 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- a -

  • all_bits_mask : bm
  • and_op() : bm
  • any_and() : bm
  • any_or() : bm
  • any_sub() : bm
  • any_xor() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00226.png0000644000175000017500000000511711365042647013255 0ustar tlktlk‰PNG  IHDRË(P+bKGDÿÿÿ ½§“ IDATxœíÝolSÕðï¶nUfï¦lH‡qh,²ÈQë d%ˆÂ’)¤/Ô1šº Ñ5‘ˆâxaˆ"þ#3ÅÅenXÔ•‰;Å…Íi406dMÛ­®¬à ºAûý½ »ùÕ­í-¶óIšôÞ{î9ÏswŸÛ{ú'K"I‚MkòtG × Q,‚ (APHõïN§---Ó‹ \3Ö­[7aÝ„binnÆO<1% µj²÷½&K¤Æ‚p£;pà@Ø 1g…D±‚B¢XA!Q,‚ (APH‹ (ö­c¥NŸ>ææf¬_¿>á\?ñá‡âÅ_LØ===øì³Ï°zõj,\¸0aãŒ›Šœba±XÐÝÝ=é¶yóæÁd2Mi<ÿù•¥££{÷îG,×¼7ʼ¡¡!|üñÇ ¯¼¼¿ýöTªÿ|M kªsŠE?Ün7Ün7, ,‹¼ìóù¦<žÄýn@ Ø´i`îܹ8uêTBÇs:رcòóó6ÆTç ³Ù,?߸q#Lë…9.s–`0ˆÍ›7C’$Ìš5 o¾ù&ÀçóÁh4b÷îÝÈÉÉAvv6>ùä¼ð ÈÎΆV«EuuµÜÏ®]»P^^v¹©© ………P«ÕÈÏÏÇÁƒv»›6m‚Ùl†$I˜={6vïÞ-ï÷Ç@¯×㦛nÂüùóqàÀ€×ëÅÊ•+QUU…ÌÌLœ8qŸþ9òòò R© Õj±k×.€Éd‚×ë…Éd‚ÝnG__Ö¬Y5¶ñc`±X ÓéžžŽõë×#D<¦O?ý4œN'ÊËËñÍ7ßÀáp`ùòå!mL&ZZZ¢ŽñÝwß¡  iiiX¼x1Z[[šÓ¶mÛ µZåË—ÃívGÌutt4âv¥âÕOXü‹ÅÂIV‡eµZ™””Ä-[¶pdd„v»¬©©¡Çãarr2_yåƒA¾÷Þ{À;w2 òí·ßf^^žÜ×Áƒùî»ïNºü÷ßS£ÑðÓO?¥ßïg}}=g̘ÁŽŽZ­VªT*VTTpdd„ÍÍÍÌÈÈà×_ÍááajµZîÙ³‡~¿ŸGŽ¡$Iüé§Ÿèr¹xóÍ7³¬¬Œ?ÿü3ûûû©V«YWWG¿ßÏ£G299™^¯—ƒƒƒÔjµüá‡866Æîîn¦§§GÍãñ0--Ï<ó GGGyæÌfffòðáÃë¹sçx×]w±¡¡~¿Ÿ'OžäÌ™3CÚ²±±1â.—‹†uuu¼páßxã æææ2 &$§††æää°««‹çÏŸgii)Ÿ}öÙIsü믿øüóÏsÁ‚Qϳ 6pÆ ÛÔÖÖ²¨¨ˆû÷ï§ßïÚçd"œÿÇãR,·Þz+ÇÆÆäu[·neYY=pxx˜$ÙÙÙI•JÅK—.‘$ýõWÞ~ûíŠÆÙ»w/ CȺµk×òõ×_§Õj¥$I ‰Ád2±ººš‹/ÙoóæÍ¬¨¨ Ëå"öôô$ý~?ÛÚÚäv.—‹jµš]]]$É9sæ°½½$CN¬H±ƒÞÞ^y›Á``MMMÔœu:;F’Q‹%Üï¼ó׬Y#¯ãÎ;922’œêë뙓“Ã?ÿü“$9<<ÌÁÁA¹]0ä·ß~ËG}”ùùù¬¬¬¤Ïç‹z,” IþòË/|ê©§xÇwðå—_¦Ó錺Ïÿ‹T,q¹ ÓétHMM•—.\Ç#/§§§’’’ V«å kRR’â1Ün7æÏŸ²nÁ‚p¹\€»ï¾iii!18N8ttt`îܹò£ººçÎ$''#'' V«ÑÖÖ†•+WB§Ó¡¬¬ Á`ð?ÇZ­V~KÞ±˜l ‡Ã[jj*^zé%̘1#b_W›ÓêÕ«±víZ<øàƒÈÍÍ…ÙlÆàà €+ßh/((ÀG}„ŠŠ œ8q[¶lÁm·Ýv•O´dÉTUU¡½½Ë–-Ãc=—¾ãR,ýýý!Ë^¯7®$Iš0ŽÏçCFFƤ1œ={’$¡¸¸‡#äñþûï=qëëë±uëVlÛ¶ 8~üxÔ“JIl‰222µF£‘/ ã¾üòK EÜïjs"‰ÊÊJø|>ÔÔÔÀï÷ãñÇp¥PÕj5Ξ=‹\¾|9jüW+€$T*n¹å–¸ô—bq88tèàŸþÁ|€Gy$æ~ÚÚÚ`³Ù&]^±bqæÌ@__jkka4\¹ŽO@‡‡‡±oß>FFØívœ}ZQl_}õ¼^¯¼ß“O>‰”””¨û]MNo½õ–-[•J…ûî»åååèíípåªßÞÞŽ;v ¶¶yyyxõÕWÑÓÓ5¥ššš`2™ðÀ€$š››QUUŸÎc¸g›”Õjåý÷ßÏyóæÑ`0pöìÙ\µjÇÆÆä{Ûq]]]ò=1I¶··‡ÌYÌf3—,YvyûöíÌÌÌäŠ+8sæL>÷Üsr ¹¹¹,((`qq1µZ-—.]Ê‹/’$+++)IKJJ8gή[·Ž@€.—‹)))rÿN§“³fÍ¢Á` ÑhäªU«¨ÓéXZZJ’¼÷Þ{©×ëÙÚÚr)¶’\ºtiÌs–@ @½^ÏÜÜ\–––R¯×S¯×‡ÌYÂa6›™••Å’’J’Ä={öÈíâ“ËåâwÞÉE‹±¤¤„Ü·oߤùõöörûöí,((ˆz,”ÌYjjjä¹Óø¼8V à»xñ"¿ÿþû r"twwÓf³ñÔ©Sò:«ÕÊ¢¢"ŽŽŽòèÑ£liia0 ÙÏívÓf³ÉÏp†††ØØØÈßÿä•jjj"Iz½^Úl6 0°¿¿?jlñtéÒ%ÚívÚíö˜O†ÎÎNÚl¶ ÞDää÷ûùã?òðáÃìëë‹ÚþòåËŠûNt?‘Š%‰ ýIäø/ÅxýRòСCxíµ×äÏ®GŽ »}Ñ¢E(,,œÂˆ âùßzC|‚/Iòòò¦;Œ˜¤¦¦"+++ìv%o,Së†(ƒÁƒÁ0ÝaÄ$++ ?üðt‡!Ä@|E_Å" ‰b…D±‚B¢XA!Q,‚ (AP(ìç,‰ú¹ \¯&ËC=„/¾øb:b„kÚ„ï† ‚0)ñ?%A)Q,‚ (APèÐóÝÊј9-IEND®B`‚bm3.7.0/doc/html/a00102.html0000644000175000017500000001622411365042636013425 0ustar tlktlk BitMagic: bmutil.h File Reference

bmutil.h File Reference

#include "bmdef.h"
#include "bmconst.h"
Include dependency graph for bmutil.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::ptr_guard< T >
 Mini auto-pointer for internal memory management. More...

Namespaces

namespace  bm

Functions

template<typename T >
bm::bit_scan_fwd (T v)
template<typename T >
bm::min_value (T v1, T v2)
 Get minimum of 2 values.
template<typename T >
bm::ilog2 (T x)
 Fast loop-less function to find LOG2.
template<>
bm::gap_word_t bm::ilog2 (gap_word_t x)
template<typename T >
bm::ilog2_LUT (T x)
 Lookup table based integer LOG2.
template<>
bm::gap_word_t bm::ilog2_LUT< bm::gap_word_t > (bm::gap_word_t x)
 Lookup table based short integer LOG2.

Generated on Sun Apr 25 09:37:34 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00171.md50000644000175000017500000000004011365042644013140 0ustar tlktlk98307cd22c5a4562d41641be7a0a78f8bm3.7.0/doc/html/a00011.html0000644000175000017500000001101211365042651013407 0ustar tlktlk BitMagic: bm::all_set< T > Struct Template Reference

bm::all_set< T > Struct Template Reference
[BIT functions]

Structure carries pointer on bit block with all bits 1. More...

#include <bmfunc.h>

Collaboration diagram for bm::all_set< T >:

Data Structures

struct  all_set_block

Static Public Attributes

static all_set_block _block

Detailed Description

template<bool T>
struct bm::all_set< T >

Structure carries pointer on bit block with all bits 1.

Definition at line 301 of file bmfunc.h.


Field Documentation

template<bool T>
all_set< T >::all_set_block bm::all_set< T >::_block [inline, static]

Definition at line 313 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00241.png0000644000175000017500000003754011365042650013251 0ustar tlktlk‰PNG  IHDR ]âïNbKGDÿÿÿ ½§“ IDATxœíÝyTǾðï 3 ² ƒŠ(EEQQÁ¸K”•˜E£‰Q\bâÃDúâõ^—õ}&, ¢¨$ê;‰¢DŠ`ȾïÛÔûƒK_èÀPŸs8‡îžîúÕ¯ŠejºªEŒ1B!„B!„Ñâ¶Ž€B!„B!í B!„B!D B!„B!D…¤¥'k2Byæ,,,àèèØÖaB!„Òî‰ZºÀ¡H$Òt,„òLyyyÁßß¿­Ã „B!¤½‹nñàïï///MC!ÏÌìÙ³Û:B!„Bž´f!„B!„BTÐ`!„B!„BTÐ`!„B!„BTÐ`!„B!„BTÐ`!„B!„BTÐ`!„B!„BT´Ê`ÁÇqøðᦜ¶Ž7"))Ieaa!6oÞÜàûö"77[·nmë0Zäyè['NœÀµk×Ú: í+B!„BHóµÊ`All,üüü^˜rêzÿý÷ñèÑ£V-Ó××k×®ÅÁƒUöçççcݺu ¾o/òóóUb~V¹{×m‹¾Õ\ÁÁÁˆŒŒlë0´¯X!„B!ÍGÓžÒ™3gŸŸßjå=~üW¯^ÅÊ•+Øjåj‚¥¥%ùäüòË/‚±†‡‡cñâÅXºt)är9ºté‚;væ¤)±ÕQ(7|ý²¹íF!„BiÖB˜¿¿“^{êÔ)&‰ØòåËYqq1 g†††,88˜¥¦¦2±XÌ>ÿüs¦T*Ù7ß|ð͛73¥RɶnÝʬ¬¬¸k8q‚íÚµ«Ñm¡röìÙÆÊwäÈ6pà@ÆcEEEÌÌÌŒíÙ³‡•••±óçÏ3¹\ή^½Ê’’’˜;~ü8+))a7nd=zô`J¥’åææ2333vñâEVQQÁÒÒÒ˜;tè+++c¡¡¡LWW—ÅÆÆ²¤¤$Ö¡C6mÚ4ÉÊËËUrô×_±+V°¾}û æ²ÿþÌÏÏ1Ƙ»»;[¾|9w,))‰Éd²ß«‹‹¯~õ…„„0vøðaVVVÖh|BíóèÑ#¦§§Çc r§® êæ.++‹Éd2vüøqVVVÆ._¾ÌÄb1ËÈÈÐh›Ô%Ô· xã9sæ ëÚµ+‹glÊ”)láÂ…jûº\þñÇL&“±VZZÊvîÜɰ;w²¿þú‹éë볓'O²ÒÒRö¿ÿû¿LKK‹}ÿý÷‚±ž:uŠI$æããÊ‹‹YDD344d?ÿü³P—ŒE¨ŽB¹ê—Íi·º¼¼¼˜——W“^K!„BÈKîz« ±ŠŠ nŸ¯¯/›6mKMMeXQQcŒ±¸¸8&‘HXee%cŒ±›7o²Î;?u9L*•²¿ÿþ›1ÆØÄ‰¹7^AAAlðàÁ*×Z²d óñña_ý5›B}K(žÐÐPÖµkWöçŸ2ÆjrssÕÖYU«V±·ÞzKeŸÛ¹s'Û¸q#›>}:·_©T2333öý÷ß ÆzêÔ)&—ËUÞ|ûúú2OOÏÇ"TG¡ÜõËæ´[]4X@!„BH“]—´Ö ½zõ‚T*å¶û÷ïóçÏsÛzzz‘H™L‰DÂmk¢¸ºº"$$sçÎExx8~øá@bb"bccaiiÉWZZŠI“&¡ªª }úôáöK¥R|úé§–œœ¬òZèÛ·/÷Ô±XŒ®]»"""°`ÁØØØÀÇÇ®®®jëêïïÆ†  fZ@JJ ._¾ Þó„⪽5¼)õGGG8::"++ €³³3ìííqìØ1ÁØÕj@5w2™ 7nÜÀêÕ«ñðáCtìØJ¥²Ñë6§MÔáë[BñxxxàÂ… 1b ÜÝÝáëë …B¡¶ÎBRRR`kk«²ÏÆÆ@M.ëÖY$¡gÏžÔç®gÏžÐÖÖV©ã… ž*¾:ªË _¿ÌÉÉiV»B!„Bš¯ÕÖ,ÈÊÊRÙÎÈÈ@ÇŽ[µ///=zGŤI“¸ýr¹£GFbb¢Ê×·ß~ äåå©\óرc. '—Ë”Ÿ CCCªR©2™ ™™™ÈÉÉAUU•`½c Ć †°°0üúë¯pvvV™Þ¡¸šS¿ºª««ÁƒD"¾¾¾àk›B¨ ÕÜ…††Â××kÖ¬A\\®_¿]]]Þë6µMÔáë[Bñ0ư}ûvdgg#88eee˜1cF“ê,ÄÈÈÆg``€ììl•c¹¹¹Ôç®~333a``ÐâX„ê(”uý²¹ƒˆíQk¯+A!„BHs´Ú`Abb"ÂÂÂÔ,.¸oß¾&}‚Zß7pöìYÞm¡r¦M›†[·na÷îÝx÷Ýw¹sÜÜÜŽû÷ïJJJààà€ãÇÃÝÝ'OžäÞ ýþûï˜3g´´´ÄæîîŽ_ý jô ››[ƒ×:::"&&›6mBHH¬¬¬°víZ¤¤¤4Zï+W® == ,€µµ5÷åííTTTðæL(®æÔ¨Y,ÐÓÓÇc 8räw\]ûðjƒú’““accƒÑ£GCKK QQQ(((hvÝ›‹¯o ųeË8;;C"‘`ذaðööÆ“'OšTg¡\ººº"((©©©€Û·oãÊ•+ÜuCCC‘™™ ˆŠŠÂ½{÷ ‰Ôæ.99™[²¨¨û÷ïW›+u±ðÕQ(7Íí—Ï›„„xyyáÿørrrЧOìܹ999(,,Ä;#¯¿þÅÅÅøñÇñÙgŸ!33ùùùØ·oÄb1ÒÒÒ‚/¿ü’d „B!DcZ:Í\³ÀÉɉõîÝ›3†uéÒ…Mœ8‘UTTpkÔŠW™×£²fÁÒ¥K™££c£ÛBåÔš5këÞ½;7Ï¿ÖöíÛ™\.g®®®ÌÜܜ͜9“{ÍÒ¥K™±±1suuer¹œíÙ³‡;oРAläÈ‘,::š1ÆØ_|Á swwg:ub‹-bŒÕÌ ×ÒÒâÍÑ“'OØ_|Álmm=>þ|6eÊ”ûóòò˜L&c¡¡¡¼kÅ¥®~u³1cưàà`nM‰ú„Ú§þšõsÇ×õs÷øñcfjjÊÆŒÃÜÜܨĉY¯^½¸ühªMêê[Bñ$%%1 fggÇ\]]™¡¡!Û¿?w]uýŽ/—J¥’Íž=›) æììÌ,,,ØÄ‰ÙÎ;cŒ½ûî»ÌÄÄ„¹¹¹±áÇ3{{{öÓO? ÆzêÔ)Ö£GfkkËFÍÌÌÌØØ±cYii©`nÔÅ"Ô®B¹áë—Íi·ºÚÓš­½®!„B!Ít]Äc-d‰Dð÷÷‡——W“Ï)++CTT 1xðà–ûLËIIIÁÝ»wannÞ`v||<=z„~ýú¡{÷îÜþÌÌLÄÄÄ`èС022Pó t\\,--Ì—W§ººú™}z*_ý4›R©Dnn.:uê ñÜ µA]¸víLMM1`À$%%!!!cÇŽÕx›ÔÅ×·„â)//ǵk×PVV{{{˜ššª\³©unÌ;wžžŽaÆA.—¨ÉkVV*++‘““ƒ#F _¿~ð÷÷‡““o¬………X·n"##ñÛo¿AGGC‡mò-ÿÅ¢®ŽêrÓ”~ÙT³gÏP³öG[›?>ŒU¿9jÔ(,\¸sæÌÁpôèQn]‰[·náÞ½{ˆÅ矎˜˜î¼   ìÚµ ‘‘‘mQB!„òbŠnÕÁBÚ«ÔÔT•7ë³³³ƒ½½}+FÔr111xõÕWqôèQØØØ $$Û¶mÃÇUh¬/,, ëÖ­Ctt´Êþ%7íi°`ùòåÜ4Z¶¶¶X½z5ôõõ±`Á„„„`ĈÐÒÒ‚B¡@tt4bcc±hÑ"nNؽ{7š4݇B!„&Šnµ§!ÒžI¥Róç[@±=4h:„¯¾ú 999°²²ÂéÓ§ €šÅ­¬¬ì‘rÓ^¸¹¹aÞ¼yØ´iLLLxוÀ»®Ä믿Π8x{{·UU!„BÈ Šî, „¼ZrgAeI5ÒoC&ׂ‰­žFãyï½÷pêÔ)ØÛÛ£¸¸%%%ðõõ…““† kkkhkkC*•"..¶¶¶˜?>/^ }}}tìØ>DŸ>}pæÌèèèh4>B!„òR£; !¤VY~ÒcŠ‘z³O®"ça˜’aÌ=4:X™™‰•+WbéÒ¥*ëJtïÞÝ»wG||<ïºÆÆÆ-^W‚B!„¦¢ÁBÈK«8£i1EH»Y„äk(H*‡€H"‚²ò¿7]é Oáh®ääd•u%öïߪª*888¨™R÷‘•µƒµîÔÖÖÆ˜1c¸ã/ʺ„B!¤ý ÁBÈK£C…q§²‘]„'× Q”^‘i‰ ¬ª`X¥êì,Mк„B!¤½£5 !/¼‡¿äàì—B»R –üwp )æü::ÒØ*!„æ{øð!"""0oÞ¼&½þĉ033ðaÞm`„"ŒÖ, „¼ø¬&uÄÖïB`ûĺåšu®H DóÚZꉡ­«©®¤úbÈ $èØ»ÃK?0kÖ¬¶BZlÉ’%5jÔ3»~ll,üüüš>ýû÷Çþýû1dÈddd`îܹ˜={6–,Y‚ÈÈHØØØ´Jø¬Y³®®®m!/³Q£FaãÆ{ªÁ‚Ù³gsÏ.'„ö®î›Y…˜ÁÞ»3bC³pëp:J³+kÆ ê è›ñ¿×6ÐR[fß©Ðwjó¦>ÔõŠ«F½tPQXÊ"%*þswCIF%*Š«aé¬,8³ä!ž\/‚¶¾¸f*…îôj/0ƒQOÞó‹Ó+°šóšP_B! EGGcôèÑHKKÃÍ›7áááÞ½{£wïÞ˜7o0iÒ$øùùaÙ²epuuEqq1Æ___\¸pW¯^Å´iÓ`ii‰ÂÂB:tQQQèܹ3æÌ™ƒM›6áÛo¿Err2¦OŸŽ#GŽ`üøñرcÞxã Ý袹„R«ÅƒÍi „öÌ¢Á>I1ú¿e ›™&øëL.b¾KCþã2ˆD"0Æ g¢Ù'!4—¥3ÿ‡¦pø +¬§V ¢¨å…Õÿ™J¡äîn€š5n/üÏ#¤ýQÄm×½»Aª«…±kæ”Bˆ*…BÍ›7C*•bÔ¨QX¼x1лwoLŸ>Ó§Oøøøà»ï¾„……ÁÌÌ }ôàÕW_żyóÌݶ_^^ ²²ðã?ÂÙÙ™›^±jÕ*H$”––JKK±gÏtíÚµ5S@yµx°€æ¦B^$b‰½=:¢÷kñ8"1Óq§:Ïùâ…íõèµøü±ë{ ,¯ •ÅÿløÏÚ %5ßK:ÐÝ„¢N¯^½TÛ¿œ?ººº°µµUymí´€ÄÄDÄÆÆÂÒÒ’;VZZŠI“&ÁÃÃ.\Àˆ# P(àîî___( $&&¢OŸ>Ü9R©Ÿ~ú) ''b±˜ !Mò|ÿL!š&,FÂb´!ÒoÕìx‰É»É§9BQ/++Ke;##;v„‘‘222}­\.ÇèÑ£qæÌîXii)wçÛöíÛ±}ûvܼy»víÂŒ3póæM4¸æ±cǸuZkBÈóOxe.By‰u¶×ÿÏ'ó„BHË%&&",, PXXˆ}ûöaÒ¤IpuuEPPRSS·o߯•+WnnnÇýû÷%%%pppÀñãDZeË8;;C"‘`ذaðööÆ“'Oîîî8yò$7`ðûï¿cΜ9ÐÒ¢;Á!ÍCƒ„BZÍÇqøðᦜ¶Ž7"))Ieaa!6oÞÜàûö"77[·nmë0Z¤½õ-¡x4Ñöÿý7öïßÿTרuâÄ \»vM#×zÞ899aùòå;v,úôéƒ=z`Á‚xýõ×áî¸`òäÉpssôîÝ6l€““ÜÜÜЧOôïßžžžxûí·‘””„ÀÍÍ ³f͆ ...ðòò‚­­-ÜÜÜ0nÜ8lÛ¶ úúúm™‚§–’’¢r—Åó^N[»}û6¾ÿþûw¡”””  Á÷íEaa!‚‚‚Ú:Œyû Bi5±±±ðóó{aÊ©ëý÷ßÇ£GZµL___¬]»TÙŸŸŸuëÖ5ø¾½ÈÏÏW‰ùYåîY\·-ú–¡x4Ñö=®]»žêµ‚ƒƒ©‘k=O<<<…Û·ocݺuøùçŸñË/¿@*•B$á‡~À•+Wàëë‹;wîà—_~`ùòå¸wïV­Z…³gÏâ§Ÿ~‚X,F·n݇½{÷âÓO?E\\æÏŸÏ•ùü‘‘‘XµjþüóOn‘Änݺ¡ªªªMòð´?~Œ“'O¾0åÔµmÛ6îî’ÖrðàA:t¿üò‹Êþââbn²î÷íEqq1~þùgnûYåîY\·-úÖÓ¢5 !„ 8sæ /^Üjå=~üW¯^ÅÊ•+Øî„XZZâÁƒÜö³Ê]k· yñåÄ—â¯3¹€¡7o‘@¸¸¸4zÌÎÎvvv377‡¹¹yƒý2™ £Gæ-¯öÑŒ|RSSqþüyÞãvvv°··ç=N4çÚµk˜6mZ«•—‘‘;wîÀÓÓçϟǼyóZ­ì§Õ¥K|ÿý÷Üö³Ê]k·I{EwBiUJ¥K–,\.‡©©)¾úê+@vv6ÜÜܰcÇtíÚ&&&øî»ï°råJ˜˜˜ÀÌÌLåÖÃmÛ¶ÁÛÛ›w›¯œ… ªÜV]XXˆ!C† 11pçÎŒ9:::èÓ§Ê-˜ç΃­­-´µµ1xð`DGG<==‘‘‘OOO„‡‡.]º{{{Èd2X[[ãĉjþI?~<Ž9…B{÷î5š§òòrÁ<`øðáøä“OÀÅ¢_\Bõknl€pû¤§§còäÉÏ_4–»ÀÀ@XYYA"‘ÀÌÌ Û¶mã½îÓ¶I-¾¾€7X³f LLL “Éàââ‚äädî˜P¿ki_¯ïiÛž1†+VÀÇÇLÍcW ((–––èС¦NŠüüü&ÕW(O|q6· ›£0¥1ÓðÓô»yó>þ8œ†¬Ø]¿­H¥Ró~éêê¶uˆ 0ư{÷n¼öÚk˜6müýýX±b‚ƒƒñÆo`êÔ©8}ú4¾ýö[L:3fÌÀ… ¸ë©üœÔßæ+gÇŽÜÚ@Ímú|ðÒÒÒ X¼x1Ƈ¹sçª ÆÜ¸qóæÍƒ»»;,XÀ ˜®_¿yyyX¿~=nß¾ øã?ðÞ{ïÁÝÝÞÞÞ¸zõ* //Ÿ|ò þýïÃÃÃÿýw£yª}Œ&ŸÚŸ£7ß|©©©*ƒ·Bøâª_sc„Û'77ÿó?ÿ ñÜñµAc¹;þüüü°hÑ"DFF"99Ó§OǦM›ŸŸ3fà7Þc ûö탱±1öíÛ'''¤§§cÊ”)X¶l °eËxyyáÁƒ¨¨¨@xx8BCCqúôiXYY©ä'!!+W®Tû‰ž¿¿?æÎ ccc¸¸¸ 00Pmî…âª_}?ÿü3† ‚ÿû¿ÿã8jŸÒÒR\¼xäN¨ êç®sçÎxçwðõ×_£¸¸?þø#>ûì3dffj´Mêãë[………¼ñœ={‡BTT²²² —˱iÓ&¬³º\ ţɶgŒá£>Â7°iÓ&µ+êߺu óæÍÃŽ;›› gggîM–P}…ò$gsÛP’ìJü”ãsbôúŸ¸¹?ùÿ·¯ë(žÿ›s1aÂÞ/¡»Úʃ ¥¥…cÇŽáË/¿D`` ._¾Œªª*ÄÄÄ ¨¨ÁÁÁxçw°uëV( ?~3gÎÄwß}Ç]ÇÂÂ}ûöåÝæ+§gÏž*·ÀGDD@©T¢K—.(++êU«àææ†ŸþË—/ÇŽ;p÷î]dffâ‹/¾Àûï¿°°0Œ3k×®åà ±bÅ ØØØ 77¾¾¾˜9s&~ùå|ðÁذa’’’PYY‰;wî ""[¶lipÇIjj*¾ýö[¼÷Þ{‚yøàœ={–wà@¨}ÊËË r'Ôõsgdd„-[¶`Ñ¢E8sæ Ö®]‹ýû÷#//O£mR_ß*))áçúõë8}ú4öîÝ‹'N@WW?üðÖYžÿßt„ò«oÜØ-€µóºW­Z fþµ¯¯/^yå•VŽR³ 6oÞ ©TŠQ£FañâÅÀ¨Q£ T*ñé§ŸB$ÁÍÍ ‰+V¬à¶·oßÎ]gÊ”)*×­¿ÍWξ}û°lÙ2<~ü Ä»ï¾  ƒ™™7¿÷ÕW_żyóŒnݺÁÙÙS§N¬Zµ ‰¥¥¥P(‹ÅP(J¥ Å Aƒ¸v}ýõ×1iÒ$üøãx÷ÝwQZZŠ={öpÏ:gŒáìٳسgþúë/ÌŸ?_pn÷íÛ·‡Y³ffÍš…uëÖaÛ¶m‹ù?ŠKOO·~õ?aœ>}:ÌÍͱwï^¬Y³sçÎÅ¢E‹Ð½{÷&·OÝvª›»cÇŽñ¶ÁŠ+TrW^^ŽÈÈH <гgOH¥RäççÃÊÊê©ÚD_ßšàããýYª¯³³3ož~üñGÁ8›Ó†©(ªFâ…<Äÿ’ƒÔè"ˆÄ€RÉ(«ÔßIAž=}}},X°‰vvv˜6mΟ?;;;0ÆðÖ[oA$ÁÁÁZZZ˜5k·ýÓO?q×1b„Êuëoó•³|ùrìÝ»055Å… 0qâD@TT:vìÈõÏAƒa„ ¸téLLL0pà@Œ5 ðæ›oBKK Ð×ׇH$‚¾¾>$ """`ee… &FŽ '''\¼x'NDyy9–.]ŠN:¨ùù¼~ý:Ž?Ž'OžÀÃÃ{÷îåÍaBB’’’¸Ÿ5ggg>|‹-ŠKGG‡·~2™êã—G ccc„††âàÁƒ7n¦L™SSÓ&·OÝvª›»ððpÞ6˜5k–Jî*++±wï^nPÌÌÌ ‰ÅÅÅ077ª6Â×·FŒÁOEE€š»2tuuñùçŸskõ;[[[µñ¨Cƒ„ÒNµÖ¼îÖÖ«W/H¥Rn»ÿþ*ŸjÔ¾‰DÉdH$ܶ&Ê111««+BBB0wî\„‡‡s#ô‰‰‰ˆ…¥¥%w^ii)&Mš„ªª*ôéÓ‡Û/•Jñé§Ÿ6Zvrr²ÊkšOƒkŸZ ‹¹74X°`lllàããWWWµuõ÷÷cŒût¹¼¼)))¸|ù2ïœhuqÕÞÞ”ú€££#‘••…ÀÙÙööö8vì˜`ìêµ š;™L†7n`õêÕxøð!:vì¥RÙèu›Ó&êðõ-¡x<<|ø0ttt°lÙ2¬^½éééxÿý÷qêÔ)•ù×ÿú׿µjï²²²T¶322бcÇV-ÇËË ~~~èС&MšÄí—Ëå=z´Ê£JKK!‰ðå—_6xÄÔ±cÇàêê CCC•ýr¹þù§Ê¾ììlîuuÿ™“J¥ÉdÈÌÌDNNªªªTÞøÕÇC`` 6lØ€×_Û¿hÑ"Å¥­­ÝäúÕU]] Æ$‰FÍ&ÔYYY*¹ …¯¯/BBB0bÄhiiA¡Pð^·©m¢_ßЇ1†íÛ·cûöí¸yó&víÚ…3fàæÍ›‚u~šxêjiÛ5—G…¿¿?–-[† &ðæ¹–‘‘QƒkÖÆ)T_¡<ÆÙœ6¬*Sâúî'Ø;0å§€¿‘_ç¨ú»žÉÁÃ39¼Ççß,xþ‡›‚Ç_–óß·Ü TðµuÕ]÷¨™/n``Ðäó5QŽ««+Nž< ™LGGGn¿®®.  2}°¼¼"‘GŽAnn®Ê5ÃÃÃ1xðàwêèêê6xŠKAAÊ@z-‰D©Tм¼<¢ººZåh}Œ1\¸pï¾û.FŽÉíß¹s'Ο?/8X —T*mrýêªLÕÒÒB‡x_×TBmŸŸ¯’»ˆˆüðC|øá‡ˆGHH7MA¨Îš@kBHã›o,4¯ûy–˜˜ÈÍ].,,ľ}ûšü j]7nÜÀÙ³gy·…Ê™6mnݺ…Ý»wsSÀÍÍ ááá¸ÿ>€šÅ«püøq¸»»ãäɓܛ•ßÿsæÌá>¹ªËÝÝ¿þú+ÔÌ ស^—££#bbb°iÓ&„„„ÀÊÊ k×®EJJJ£õ¾rå ÒÓÓ±`ÁX[[s_ÞÞÞ ánWlŒP\Í©P³Xž§§'†Æ"""päÈöá#Ôõ%''ÃÆÆ£G†––¢¢¢PPPÐìº7_ߊgË–-pvv†D"Á°aÃàíí'Ož4©ÎOÓ×›Rum¯§§‰D‚·ß~ÖÖÖøì³ÏÔæÈÕÕAAAÜ£Çnß¾+W®¨­¯PžšÛG…HtĶÔ×@˼ZR Dâ¦ýƒÝe >\·¼Âû¥6?ç¾LçŸÏT¿ÖJ]iiiˆŠŠPÓoNž<Ù¢¿‰qqq¸~ý:ï¶P9£GÆ_ý…cÇŽ©üœ988àöíÛÜwåååøàƒDFF"//pÿþ}lÚ´©ÑicC† Att4÷³“››‹+W®ÀÁÁ¡Ákûõë‡àý÷ßÇåË—1{öl:t¨Áb­Û·o#''°°°à¾Æ‡+W®>VS(®æÔ¨Y,pýúõøè£¸ÿV¯^ÍW×>|„Ú ¾ÌÌLôèÑ €X,ÆÝ»wQRÒøÂ¥Íiuøú–P<ðññ––¬­­1~üx®›Sç– ; !¤ñÍ72dˆÊkêο~ž999aùò娶mâââ0hÐ ,X°ÙÙÙͺÎ÷ßß~û ãÇot›¯ fÎàk¯½†¨¨(¸»»s×ìÝ»76lØ''' :±±±1b<==!‹áåå[[[ØÛÛãúõëØ¶m÷iº©©)/^ŒþóŸpppÀŠ+ààà€¡C‡âæÍ›˜5k&L˜ ²²{]£F¨Q£šš ???Œ?¾Á'Á@Í„ &ÀÈÈHeÿôéÓ±hÑ"œ>}š÷˜òÆ@°~u=z»wïÆÇ ÿF?ÉR×>uÕÏ_Ô¾i¬õúë¯cÆ ;v,´µµ!•JѳgO¬X±'Nœxê6áÃ×·ÒÒÒxãÙ»w/öïßÀÔÔÑÑÑÜ“„ú]SrÉOzzºÆÛÞÏÏÄÛo¿áÇóæèõ×_ÇÑ£Gaccƒ"!!˜ªï“'OxóäââÂgí›”æÐÒá÷œÓXòæÌœê‰Ä‹ùxøK6R®A¦ñÞ–¬ßE=ÝŒ=ÖOsî‹tþ£â?Lmòy666øæ›o„äädôîݼƒ„|þýïãÞ½{ÜT®úÛ|å@‡àää„{÷î©üîÖ­Þ{ï=|øá‡°¶¶ÆãÇÑ¿¼ú꫉DpuużyóЫW/ÄÆÆbá…ܧéFFFøç?ÿ‰?þ}úôÁ¬Y³¸Ḹ8¸¸¸`ذa*+à×UûèÍììlœ>=B¿~ýTæ0fff"&&C‡åÞÈ'&&"..–––¼ÿ€ñ©®®nÑ'¦M!_ý4›R©Dnn.7dz±Ü µA]¸víLMM1`À$%%!!!cÇŽÕx›ÔÅ×·„â)//ǵk×PVV{{{•½šSçæÄSßÓ¶}sݹsééé6lär¹Ê1¾úªË“&ãlì÷WYnÎå">,w‹!‹À” uÿc¶šÐ.›,ŸªlR“ÿ5kÖpSI𢢢wïÞ…¾¾þ3}bCKËÉÊÊBbb"ŒUÖåjî†JKKƒ………J¿ÎËËÃÇÑ·o_î|ZZ’““Ñ¥K•õšB©T .vû4„â⫟&ccŒ¡°°û}ÒXî„Ú ®’’Ü¿FFFèÙ³'222šš {{{·I]|}K(žÊÊJÜ¿°²²j0¬©unÌùóç±qãÆÆG£i°€BÚPXX>þøc•¹p»víÂÙ³g±wïÞv°€ö*55Uð1bvvvjkù2xQò¤î÷WQZþ‹¸SÙÈM(ƒX*‚²’Áb”!Æÿ³W+GûâiÉ`!íUvv¶Ê‚›õõìÙ½zµ¿ßBƒ4 BÚXí|cn¾ñ‡~ØÖaòR’J¥066æ=^ÿ1’/«—%Oú]´1À»3xwFnBþ:›ƒ˜¥A¢CË~BTI$Áë?Fòy@ƒ„ÒÆøæ×_à®þükBˆæsóø ¿—1OF=u0dQW YÔ%Y•m!¤144äÖpxQÐ`!„´!xxx4:ߨ‚[ÝΞ=‹˜˜ôìÙ³­Â%„@×øù^h–Bš‚ !¤ÐÑÑ‹‹‹Ê>±XÌ-&&&7nRSSñÃ?ð^ëy™+L!„BÚ/, „çÌË2W˜B!„´, „çÌË8W˜B!„´.ZÊ•BZ¨ºB‰ûG³på˿տ˜B!„çï"‘¨5ã „v£‘ç̪¨(¬Æ½£™¸}$åU€1_ôhО eCY~ÊóªP–Wòü*”åý÷ËÌÁ=Æò? ÈXÛ¼£%„B!­ApÂÔ©SáååÕZ±BH› @hh(ïñ’ÌJÜñÏÀ½Ÿ2¡¬bPV× *hi·ÁÕò‚j”dU¢$«¥Y•(É®DIf%:ÐÇ+n Þóþ ÊÀï;UÓ¨m …FÈ %0´Ð,·¸:_#ñB!„öCp°`æÌ™˜9sfkÅB!mª²²²ÑÁ‚ü¿ËpëÿÒ–‘¨æ“øºª+*Kª!ÕÕÒl@ (Í­‚HèñÿºŽ;™ˆ¯’P]¡äö‰¥"tè(ž©6 Ìe‚Åôt3‚©­d†è(´ 3”@¬ÕôÒê"C*¥G‰BižK—.AKKÃ? !MvéÒ%Þc´À!!„ðȼ[Œ˜ïÒðør>DZ"°j¾ %™•èШ™ÁÀPQX PVb‰æÚ‚åü˜‰ŠÂjTU£¼° åyÕ(Í­S2ôñ脱ëù§9˜ÐÃh_ tè$ž©:JêÓï¢ ý.üñ5Ehh¨à]„BHc"""ÑÖaBAƒ„R‡"$EàïÒS±DÆV%¼ŽÁOÓïñ³šÐ.›,yWW0T–VCG!¼› ÚúZi¡ƒB ]‰Ú7ò K(,…§ º Òê:B!„¢)4X@!ŠžT€å×ù_Y3}@©d€’ÿ<IÄÐï¬î#äÏ6HB!„BZ Byw¤NY˜·{<ª«”ÈŽ-AZL1žD õF1*Kª!ÖúÏ”eû J2+Û jB!„Bž ±&.òðáC>|X—jå´µððplܸIII*û ±yóæß·¹¹¹Øºuk[‡Ñ"í­o Å#”g¡ó4Ñgþþûoìß¿ÿ©®Qëĉ¸víšF®¥ib-Llõ`7Çãÿa…·/ÛãŸúaøÊn°tUp‹ŠÄ"ˆ´DPV*‘›PÖÆQB!„¢9,ˆ…ŸŸŸ&.Õ.Ê©ëý÷ßÇ£GZµL___¬]»TÙŸŸŸuëÖ5ø¾½ÈÏÏW‰ùYåîY\·-ú–¡x„ò¬î¼§í3=®]»žêµ‚ƒƒ©‘k=k"1`Ô«lf™Àmó+˜{nà^{îÜ9ØÚÚB[[ƒFtt4ÀÓÓðôôDxx8àÒ¥K°··‡L&ƒµµ5Nœ8ÈÈÈÀøñãqäÈ( Ü»×øcÔÊËËó€áÇã“O>ABB‹:|q Õ¯¹±Â퓞žŽÉ“'h>¾Áu›Û&|„ú–P<¡¡¡¬k×®ìÏ?ÿdŒÕ äææª­óÓÄ#”g¡ó4Ñg.^¼ÈlllØ¢E‹˜±±q“ clÕªUì­·ÞRÙgggÇvîÜ)˜'¡ü ÅÙœ¶¯‹ !„BaŒ1v]c÷ÍöêÕ R©”Ûîß¿?Ο?ÏmëééD"d2$ ·­‰rLLLàêêŠÌ;áááøá‡‰‰‰ˆ…¥¥%w^ii)&Mš„ªª*ôéÓ‡Û/•Jñé§Ÿ6Zvrr²Êk oß¾ÜS Äb1ºví ˆˆˆÀ‚ `cc¸ººª­«¿¿?c:t(€ši)))¸|ù2\\\xÏŠ«ö¶î¦Ôáè般¬,8pÎÎΰ··Ç±cÇcWG¨ ÕÜÉd2ܸq«W¯ÆÃ‡ѱcG(•?è¾9m¢_ߊÇÃÃ.\Àˆ# P(àîî___( µuni<š8ïiú̽{÷лwoÀ©S§ðæ›oª)%%¶¶¶*ûlll÷ uùå‹3''§YmO!„BQ¥±5 ²²²T¶322бcGM]¾IåxyyáèÑ£8zô(&MšÄí—Ëå=z4U¾¾ýö[ //OåšÇŽktÁ8¹\Þ üììlPøJ¥ÉdÈÌÌDNNªªªëÅC`` 6lØ€°°0„……á×_…³³³ÊüíÆÅÕœúÕU]] Æ$ ôõõ_ÛBm¨æ.44¾¾¾X³f âââpýúuèêêò^·©m¢_ßЇ1†íÛ·#;;ÁÁÁ(++ÃŒ3šTç–Æ£‰óž¦ÏXZZâèÑ£øú믱lÙ²¯mŒ‘‘222S(OBùUgs" !„B!ÿ¥±Á‚ÄÄD„……¨Y\pß¾}Mþµ®7nàìÙ³¼ÛBåL›6 ·nÝÂîÝ»ñî»ïr縹¹!<<÷ïß”””ÀÁÁLJ»»;Nž<ɽ‘ùý÷ß1gÎhii5ˆÍÝÝ¿þú+Ô,477·¯uttDLL 6mÚ„XYYaíÚµHIIi´ÞW®\Azz:,XkkkîËÛÛ!!!¨¨¨àÍ™P\Í©P³è§§'†Æ"""päÈöá#Ôõ%''ÃÆÆ£G†––¢¢¢PPPÐìº7_ߊgË–-pvv†D"Á°aÃàíí'Ož4©ÎOÓ×[R¦æM]ŸÑÓÓƒD"ÁÛo¿ kkk|öÙgjcruuEPPRSS·o߯•+WÔæI(¿ÍíÛ„B!„fà› €f®YàääÄz÷îÍÆŒútéÂ&NœÈ***¸5 jÅÇÇ«Ì·Ž‰‰QY³`éÒ¥ÌÑѱÑm¡rjÍš5‹uïÞ›ç_kûöíL.—3WWWfnnÎfΜɽféÒ¥ÌØØ˜¹ºº2¹\ÎöìÙÃ7hÐ 6räHÍcì‹/¾` …‚¹»»³N:±E‹1Æjæ±kiiñæèÉ“'ì‹/¾`¶¶¶Ÿ?>›2eJƒýyyyL&“±ÐÐPÞ5 „âRW¿º‚ƒƒÙ˜1cXpp0·¦D}BíS.}ýÜñµAýÜ=~ü˜™šš²1cÆ07776qâDÖ«W/.?šj“º„ú–PÓ\wîÜAzz:† ¹\®rŒ/Oêò«É80{öì&= ’B!„X´F i¯RSS´³³ƒ½½}+FôbyQòKƒ„B!„¢5ö4BÚ3©T cccÞã| (’¦¡üB!„òb¡ÁòR066Æ„ Ú:Œå—B!„‹Æž†@!„B!„ B!„B!D B!„B!D B!„B!D B!„B!D B!„B!D B!„B!D…ˆ1Æ= fΜ٪BH[ ðüZ$„B!äe-á;Bƒ„— ýÞ#„B!¤ï„B!„By)EÓš„B!„BQAƒ„B!„BQAƒ„B!„BQñÿäP†nêâOsIEND®B`‚bm3.7.0/doc/html/a00179.png0000644000175000017500000000550611365042644013263 0ustar tlktlk‰PNG  IHDRÃ(CüNëbKGDÿÿÿ ½§“ ûIDATxœí]LS÷Ç¿µ”2^JÇ((fÄ dC´;)L@ØÐ°Mâ,..&Àveq(ÑL.æPdÄ ™n¬ Ùâ&)Ì6‘%²:k]5cn`#K©ÀJU„!òRžÿ…ådµ/¶Ú©Ûÿ÷¹{žóüž—r¾œžß9 †nÞ£î€Áx\`b`0l0106üîvFœ={öQôÂ`<4Þ|óMŸƒºººðöÛo?”†ŒG…³}#1¸ f0þí=zÔå/{vÏÀ`Ø`b`0l0106˜ L † &Æ˭UO1 èêê–-[|ÐÎýÕ¹qãT*¶oß~_¹'&&ÐØØˆsçÎÇãaÕªUØ´iø|>399‰¦¦&hµZX­VH¥RlÞ¼"‘ˆ‹9pಳ³g—ÿ‹/¾@RRd2***°fÍ( »˜††,[¶ ¿þú+úúúœö¹xñbäå幜ã·ß~ƒZ­FQQBCC9OOš››Q\\ ‘HäÑ,‡ÆÀÀgÏ›7 .DNNŽ]nOiiiÁôô4rss9ß©S§ÐÝÝ ¥Ri7CKK ÊÊÊì>ÿ‡Á_~ÿýw|þùç¾èå¾ëܼyõõõœ]PPàò„º“É©TŠ#GŽ`Ñ¢ELJ~ˆuëÖqÏZŒF#d2öï߉D‚§Ÿ~MMMxþùçqáÂ.WUU.]ºäPãÀÐét°Z­Øµkòòò0>>nS__N‹Å“É“É„ÆÆF466röµk×Ü΋ææf”––r>«ÕŠÍ›7Ãh4B$y<Ë¡C‡ÐÞÞÎÕ6 ¨¨¨€L&»gÎèééÁŽ;ì|())±ݱcÇÐÔÔôÐ… »hll$'n—´¶¶’B¡ð8þ~ñ¦ÎÂ… I¯×{»~ýzzë­·hvv–ó ‘X,&µZMDD)))´qãFš™™±[[ZZJ‹-¢Û·osu[ZZj$$$J¥¢ééi@qqqTRRb³zõjR©Tv¾üü|ÊÏÏ÷hŽ9.^¼HB¡Nž>NOõõõ\\VV{ßSÜœßç|rÏ0;; ¥R ‘H„ˆˆìÝ»píÚ5deeaÿþýˆŠŠ‚D"ÁáÇQZZ ‰D‚ àØ±c\žO>ùï¼óŽKÛU?ÿüëׯäååÁl6#//§OŸvÛ·Éd·ß~‹}ûöÇãqþÈÈHÔÕÕA,ã§Ÿ~ÂÏ?ÿŒÏ>ûÌá·Õž={055µZíÕçUSS•J­VëÕ:OJ¥(//Gaa!Ο?Ý»w£¡¡AAAƒN§ƒ@ ÀÐÐÔj5öíÛ‡ææfLOO£³³###¸zõ*>úè#äççC"‘Àl6cë֭صk—ç¹çžÃÊ•+]Ú®êLLL ³³P[[‹ððpÔÖÖ"99ùž}GEE!::ÚáØo¼ÌÌLhµZ$&&"<<Ü!F  ##Ãëãââ°sçN`zzÚ«µžPVV†ˆˆ¤¥¥¡¤¤)))àõ,‹ƒƒ===¨©©Áøø86lØà°þÊ•+(--…L&sÚŸÏGzz:'†ï¾ûkÖ¬Avv6Nž< «ÕŠîînŒaõêÕëOœ8^x_~ùå?& ŸˆA,£²²HMMEQQŽ= àŽÚËÊÊÀãñ••???|ðÁœ=66Æåyýõ×Q\\ìÒvWçï1óæÍƒX,†@ pÛ÷ØØBBBîãî†Q,cttÔmgÌÝìWUUy½ö^ðù|ÄÇÇcbbR©”ó{;Kuu5’““‘œœ …B¥R‰;v ""À÷×ÚÚÚ°nÝ:¼öÚkˆŠŠ‚F£q™ÿ¥—^²ÃÚµk!—ËÁçó¡Õj¡Ñh “Éæ°vÆ 8xð :::‹;w¢¿¿ßëÏÆ>CLLŒÝ‰·téR rvPP€ÇãA(ÂÏϳ}YÇ["##188èô¥DFƒ¯¿þ ,€Ñht™£¿¿óçÏ÷º¶@ €J¥Âž={ÐÛÛëõzw´¶¶B­V£ªª EEE¯g©¬¬„ÅbÅbÁÈÈ:;;¡T*Ñßß®®.$$$ ®®ï¿ÿ>.]º„­[·:=‘çÈÌÌ„^¯Goo/þøã¤¦¦‚ÇãaíÚµhooÇ™3gœ~EšC¡P૯¾‚^¯GHH222œ^¥îŸˆÁb±ØÙf³Ùí‡ò¸ÔINNÆÔÔN:åplïÞ½èèè@VVz{{qþüy‡˜|ÿý÷xõÕWÜùN}ëÖ-‡¸ññq<ñÄ~…B‚‚¼ûî»>{Kxxx………¨®®Æ¶mÛðâ‹/¢  ¼šÅ‰D0  …Æõë×133sÏÞ¤R)Äb1vïÞ´´4…B@vv6ÚÚÚ ÑhÜŠa«Õ "‚ŸŸ‚ƒƒïï1^Üm;¥µµ•Pkk+ŽŽÒ’%KèÓO?¥ÁÁA»\—/_¦   ÎÖëõÉÙ:ŽÚÚÚœÚîêôõõÙåõf7iûöíôì³ÏRoo¯ÝL|>Ÿ4 )•JЉ‰¡îîn.Æh4RRRåääp¾ÂÂBJKK£ÑÑQÎ×ÐÐ@þþþd4¹Ý¤¾¾>îøØØEGG“@ ðÉnRNNeeeqöÕ«W)44”Ûòtg»IDDQQQÔÞÞÎÙ§OŸ¦ÜÜ\ŠŽŽ¦òòr2™LnûÛ¸q#ñù|ª®®æ|f³™üüüˆÏçÓÈȈ˵”››KÏ<ó }üñÇd6›ÝÖr†»Ý$Ÿˆ!99™/^Lééé4þ|zå•WhjjÊk1”””ØmŸþÝvWçn1$&&ÒªU«H§ÓݳÿÉÉIzï½÷Èßߟ–/_NK–,¡ÀÀ@:xð 333CÛ¶m#¡PH ´|ùrò÷÷§-[¶Ð­[·¸¸ëׯÓË/¿LÁÁÁ”””D±±±FÍÍÍDDNÅ@DtâÄ ðÀb8rä;䯫«£àà`2 ÏâJ )))N{ òòrJHHpÛã¡C‡]¼xÑÎ/—ËI.—»\wüøqJOO§ãÇÓôô´Ûîp'‘ýõyîÈËËöíÛ·qæÌ„††bÅŠ|Åò¦Îìì,nܸ§žz À¯ z½+W®Ä“O>éQÞááaüòË/àóùHLL´{;ÇÍ›7qáÂX­V,]º”»‘¼›Ë—/ãÊ•+ ÁŠ+pŸÓþsx:‹·X­Ö䙯òº9¿u>ÃãÈàà :::\_¶l™Ë­ÀÇ‘ÿÚ<wbxàw“gÓ=õ9b7ÎmžÇÿ´ÂÃÑý¨Ûðÿµy7Ø+Ü † &Ãaƒ‰Á°ÁÄÀ`Ø`b`0l0106\>gðöõjãߎƒRSSñÍ7ß<Š^ŒGŠÃ»I Æÿ)ìº1s0106˜ ÿ9 Rö¼v˜IEND®B`‚bm3.7.0/doc/html/a00252.md50000644000175000017500000000004011365042651013136 0ustar tlktlkcff12f1ed37c819e85c2e2bc17e25bccbm3.7.0/doc/html/a00118.html0000644000175000017500000001632611365042643013435 0ustar tlktlk BitMagic: The Main bvector<> Group

The Main bvector<> Group
[BitMagic C++ Library]

This is the main group. More...

Collaboration diagram for The Main bvector<> Group:

Data Structures

class  bm::bvector< Alloc >
 bitvector with runtime compression of bits. More...
class  bm::bvector< Alloc >::reference
 Class reference implements an object for bit assignment. More...
class  bm::bvector< Alloc >::iterator_base
 Base class for all iterators. More...
class  bm::bvector< Alloc >::insert_iterator
 Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces). More...
class  bm::bvector< Alloc >::enumerator
 Constant input iterator designed to enumerate "ON" bits. More...
class  bm::bvector< Alloc >::counted_enumerator
 Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit. More...
struct  bm::bv_statistics
 Structure with statistical information about bitset's memory allocation details. More...

Enumerations

enum  bm::strategy { bm::BM_BIT = 0, bm::BM_GAP = 1 }
 

Block allocation strategies.

More...

Detailed Description

This is the main group.

It includes bvector template: front end of the bm library.


Enumeration Type Documentation

Block allocation strategies.

Enumerator:
BM_BIT 

No GAP compression strategy. All new blocks are bit blocks.

BM_GAP 

GAP compression is ON.

Definition at line 115 of file bmconst.h.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00096.html0000644000175000017500000005642311365042634013444 0ustar tlktlk BitMagic: bmserial.h File Reference

bmserial.h File Reference

#include "bm.h"
#include "encoding.h"
#include "bmdef.h"
#include "bmfunc.h"
#include "bmtrans.h"
#include "bmalgo_impl.h"
#include "bmutil.h"
#include "bmundef.h"
Include dependency graph for bmserial.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::serializer< BV >
 Bit-vector serialization class. More...
class  bm::deseriaizer_base< DEC >
 Base deserialization class. More...
class  bm::deserializer< BV, DEC >
 Class deserializer. More...
class  bm::iterator_deserializer< BV, SerialIterator >
 Iterator to walk forward the serialized stream. More...
class  bm::serial_stream_iterator< DEC >
 Serialization stream iterator. More...
class  bm::operation_deserializer< BV >
 Class deserializer, can perform logical operation on bit-vector and serialized bit-vector. More...

Namespaces

namespace  bm

Defines

#define SER_NEXT_GRP(enc, nb, B_1ZERO, B_8ZERO, B_16ZERO, B_32ZERO)
#define BM_SET_ONE_BLOCKS(x)

Enumerations

enum  bm::serialization_header_mask {
  bm::BM_HM_DEFAULT = 1, bm::BM_HM_RESIZE = (1 << 1), bm::BM_HM_ID_LIST = (1 << 2), bm::BM_HM_NO_BO = (1 << 3),
  bm::BM_HM_NO_GAPL = (1 << 4)
}
enum  bm::serialization_flags { bm::BM_NO_BYTE_ORDER = 1, bm::BM_NO_GAP_LENGTH = (1 << 1) }
 

Bit mask flags for serialization algorithm.

More...

Functions

template<class BV >
unsigned bm::serialize (const BV &bv, unsigned char *buf, bm::word_t *temp_block, unsigned serialization_flags=0)
 Saves bitvector into memory.
template<class BV >
unsigned bm::serialize (BV &bv, unsigned char *buf, unsigned serialization_flags=0)
 Saves bitvector into memory. Allocates temporary memory block for bvector.
template<class BV >
unsigned bm::deserialize (BV &bv, const unsigned char *buf, bm::word_t *temp_block=0)
 Bitvector deserialization from memory.

Variables

const unsigned char bm::set_block_end = 0
 End of serialization.
const unsigned char bm::set_block_1zero = 1
 One all-zero block.
const unsigned char bm::set_block_1one = 2
 One block all-set (1111...).
const unsigned char bm::set_block_8zero = 3
 Up to 256 zero blocks.
const unsigned char bm::set_block_8one = 4
 Up to 256 all-set blocks.
const unsigned char bm::set_block_16zero = 5
 Up to 65536 zero blocks.
const unsigned char bm::set_block_16one = 6
 UP to 65536 all-set blocks.
const unsigned char bm::set_block_32zero = 7
 Up to 4G zero blocks.
const unsigned char bm::set_block_32one = 8
 UP to 4G all-set blocks.
const unsigned char bm::set_block_azero = 9
 All other blocks zero.
const unsigned char bm::set_block_aone = 10
 All other blocks one.
const unsigned char bm::set_block_bit = 11
 Plain bit block.
const unsigned char bm::set_block_sgapbit = 12
 SGAP compressed bitblock.
const unsigned char bm::set_block_sgapgap = 13
 SGAP compressed GAP block.
const unsigned char bm::set_block_gap = 14
 Plain GAP block.
const unsigned char bm::set_block_gapbit = 15
 GAP compressed bitblock.
const unsigned char bm::set_block_arrbit = 16
 List of bits ON.
const unsigned char bm::set_block_bit_interval = 17
 Interval block.
const unsigned char bm::set_block_arrgap = 18
 List of bits ON (GAP block).
const unsigned char bm::set_block_bit_1bit = 19
 Bit block with 1 bit ON.
const unsigned char bm::set_block_gap_egamma = 20
 Gamma compressed GAP block.
const unsigned char bm::set_block_arrgap_egamma = 21
 Gamma compressed delta GAP array.
const unsigned char bm::set_block_bit_0runs = 22
 Bit block with encoded zero intervals.
const unsigned char bm::set_block_arrgap_egamma_inv = 23
 Gamma compressed inverted delta GAP array.
const unsigned char bm::set_block_arrgap_inv = 24
 List of bits OFF (GAP block).

Define Documentation

#define BM_SET_ONE_BLOCKS (  ) 
Value:
{\
         unsigned end_block = i + x; \
         for (;i < end_block; ++i) \
            bman.set_block_all_set(i); \
    } \
    --i

Definition at line 126 of file bmserial.h.

Referenced by bm::deserializer< BV, DEC >::deserialize().

#define SER_NEXT_GRP ( enc,
nb,
B_1ZERO,
B_8ZERO,
B_16ZERO,
B_32ZERO   ) 
Value:
if (nb == 1) \
      enc.put_8(B_1ZERO); \
   else if (nb < 256) \
   { \
      enc.put_8(B_8ZERO); \
      enc.put_8((unsigned char)nb); \
   } \
   else if (nb < 65536) \
   { \
      enc.put_8(B_16ZERO); \
      enc.put_16((unsigned short)nb); \
   } \
   else \
   {\
      enc.put_8(B_32ZERO); \
      enc.put_32(nb); \
   }

Definition at line 106 of file bmserial.h.

Referenced by bm::serializer< BV >::serialize().


Generated on Sun Apr 25 09:37:32 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00258.map0000644000175000017500000000020611365042652013241 0ustar tlktlk bm3.7.0/doc/html/a00103.html0000644000175000017500000001304211365042636013421 0ustar tlktlk BitMagic: bmvmin.h File Reference

bmvmin.h File Reference

Go to the source code of this file.

Data Structures

class  bm::miniset< A, N >
 Template class implements memory saving set functionality. More...
class  bm::bvmini< N >
 Mini bitvector used in bvector template to keep block type flags. More...
class  bm::bvector_mini< A >
 Bitvector class with very limited functionality. More...

Namespaces

namespace  bm

Defines

#define BM_MINISET_GAPLEN   (bm::gap_len_table<true>::_len[0])
#define BM_MINISET_ARRSIZE(x)   ((x / 32) + ( (x % 32) && 1 ))

Define Documentation

#define BM_MINISET_ARRSIZE (  )     ((x / 32) + ( (x % 32) && 1 ))
#define BM_MINISET_GAPLEN   (bm::gap_len_table<true>::_len[0])

Generated on Sun Apr 25 09:37:34 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00175.md50000644000175000017500000000004011365042644013144 0ustar tlktlk518a629ac06b317ef543546fab6553d6bm3.7.0/doc/html/files.html0000644000175000017500000001325211365042652013720 0ustar tlktlk BitMagic: File Index
Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00256.png0000644000175000017500000001374711365042652013264 0ustar tlktlk‰PNG  IHDRÍuí%eqbKGDÿÿÿ ½§“œIDATxœíÝ{TT×ù7ðï03¢H‰€U0X‹(¦ ‰‰Z©Š—hÔX yÕj£¤V[cµÉò’"ÖF“j ƒ ‚HÆ%JÄ+‘(’ rUËý2 ó¼ðãüæÂá}ó|Ö:kyfö>û™Í|çÌ>3 „ˆŒ1ƒõtŒý¿†CØHÆD’µ¿!??W¯^í‰ZëµæÏŸ/ü[#4iiiX¼xñ -ˆ±Þ®íõ2ÐhkÄØ/ÕñãÇ5N"¼¦aL$ c"qh‰CØHÆDâÐ0&’ÎKΆøé§Ÿ––†eË–uQ9†;}ú4lllàååÕíc•——ãðáÃØ¸qc—´ë*=9ÿ†úüóÏQVVH$°²²ÂôéÓ1tèP¡Í¡C‡PZZªÑ×ÁÁA¸Ü[__ÈÈH\¿~‰>>>X´h¤Ré‹y m<×™æÞ½{øüóÏ»ªQ¢££qùòå2Vee%Ž9ÒeíºJOο¡öíÛ‡ . °°ùùùˆŽŽ†““Ž?.´Ù¿?’’’PXX¨¶µ†­°°£FBxx8ìííaee…ôÈç‰Ïu¦ù¥°··GNNN—µû¥Y¾|9–,Y"ìGEEáÝwßÅ믿;;;Àïÿ{gÌÕ«WãÕW_ÅñãÇ!‘Hï¿ÿ>œ‡ÀÀÀn m=÷šF¥RaíÚµ033ƒµµ5vîÜ xúô)¦L™‚½{÷ÂÖÖƒ Â_|?ÿùÏ4hlll%ç“O>ÁÒ¥KuîGEEÁÞÞýúõÃìÙ³QYY)Ü—••ôíÛ¿þõ¯Õ^ÅBBB0hÐ ã7Þ@aaa‡ýJKK1uêTDDDÀÂÂ.\Àï~÷;¡ß‰'àèè™L|òÉ'€'OžíΟ?Ñ£G«mË—/=ö?þØ©ù×WggçE¥R©÷þö.\777|ýõ×¶-,,DBBvïÞ-^~ùeüç?ÿ……Ås×#µIZnÖêÌ™3$‘HèOúÕÖÖÒ¥K—ÈÜÜœ¢££©¤¤„ŒŒŒhëÖ­¤R©èàÁƒ€víÚE*•ŠöìÙCŽŽŽÂ±NŸ>Mû÷ï׺ëÖ-266¦˜˜ª¯¯§°°0@aaaTSSC666ôé§ŸRCC%%%‘™™}ÿý÷töìY²µµ¥ÜÜ\ªªª¢™3gÒªU«ˆˆôö+(( ~ýúQ`` ]¾|™rrr¨ÿþDDTUUEÆÆÆK ”ššJFFFTZZJ<ÚÕÔÔPnn.åææÒíÛ·ÉÁÁvîÜ)zl¥RÙ©ù×Wgg祽Ÿþ™Ö¯_ONNN:ktrr¢cÇŽiܾzõjZ¾|9¹ººRPP…‡‡«mׯ_§ØØX²³³Óy|mbbbhìØ±tôèQjhhÕ·=myxîÐ 0€…Û¶lÙBTRRB¨¦¦†ˆˆîß¿O2™Œšššˆˆ(##ƒ^~ùeƒÆÙ¸q#½ýöÛj·¹»»SXXEEE‘§§§Ú}k×®¥àà`Š‹‹#[[[ºsçµ|ˆ{÷îÁÞÞ^¸¯¾¾¿ýío€äädL˜0ð÷÷Ç–-[`aa¡·ÁÖÖV£cccܼy›6mÂO?ý„B¥Ré¬}ÇŽÈËËÃÅ‹…Û:;¶6ºæ__—´´4¬X±...†ŸŸŸ¨Ÿc[EEE°±±ö×®]«uMsîÜ9”””€ˆ4ƺ|ù2 °`Á~ÞÞÞðööFYY>ŒI“&ÁÃçNêT½m=whZ¯p´*--ÅÀŸ÷°j  qI²u\333Lœ8gÏž¯‡D"!44¡¡¡ÈÈÈÀþýû1wî\dddèíWVV¦óɇ-[¶ &&&L€T*Õú¾¾ùæ>|W¯^Eß¾}…Û;;¶6ºæ__—~øÆÆÆP(øïÿ‹gÏž©ÖPUUUøî»ïðå—_vØvܸqhllDrr2üüüÔîÛ¹s'lll´†¦Uss3ˆ2™ ¦¦¦¢kÕæ¹/<|ø €êêjüûßÿ^1Ÿyó&¾ûî;­û~~~ˆŠŠBII àöíÛÂ+÷”)SpéÒ%ܽ{PWW‡±cÇ"66»wïÆ¤I“ “Éàåå…¥K—¢¸¸¸Ã~úÂÅÅ'N„T*Ezz:ªªª4ÚeffbÕªUˆÕ8ktvlmtÍ¿¾:;;/ÞÞÞÈÌÌÄÇŒ˜˜8::bÛ¶m(**Ò[c]]***P^^Ž7n`æÌ™pqqÁŒ34Ú´Ý*++aff†÷ß+V¬@nn®Ð>!!‰‰‰jWÚJIIÁ‚ 0~üxÒÒÒ!z~µ2ä=œ.gΜ¡qãÆÑˆ#È××—LÓ§O§ÆÆFaMÓ*77Wíý~ff¦Úšfݺuäíí­u_¥RÑâŋɂ&MšDC‡¥éÓ§SXX…††’™™ùùù‘ÍŸ?Ÿš››©  €†JîîîäççGææætèÐ!a }ý¤R©Ð®íZ%??Ÿ¬­­É××—¦L™BÓ§O§W^y…fΜ©ÖnÕªU$•J©ÿþÂÖvAkèØ}uvv^Ú+..¦?ü\]]uÖèääD„ÍÒÒ’‚‚‚„5QËš¦m›ÖÍØØ˜ˆˆ”J%­\¹’úôéC£G&211¡h3::š|}})::ZXCw–¶!»8?ëÿcèìÅàÐôYEYÈ-Ímùk_:ô‘õÁ‰k'^\QL'M/püªþÿÊŸ5â£o?zÕ°Žð_£éšš›0Ùy2,Mÿ÷ F߈†÷po ØòßìUÕW¡_Ÿ~(®(†­…auþÂf/%ù?D¾‰EÞ‹zºÖ¿=cL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰Ä¡aL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰EˆŒŒ$´üo¼½ÈÍ„Á½ Ž_è¦Áÿ}à¶mÛ mʺÊk=]À/ORRÒÒÒô¶184“&MzÞzëõš››; ¯i‰CØHÆDâÐ0&‡†1‘ ¾zfˆ¢¢"deeaÚ´i]yXƒ|ÿý÷°´´„³³s·U]]o¿ý .ÔÛ®®®qqqX´h‘Á}ºÛñãÇÑÜÜ H$055…··7lllpëÖ- 6ÀÜÜ—.]R;Û\¼x^^^x饗 cúôéð÷÷ö“““±gÏxxxÀÊÊ 0uêTïJöíÛ'''„„„@"‘æÌ™ƒ¥K—"-- 'Nõ˜»R—Ÿçˆÿú׿0cÆ "22PUU…õë×#::óæÍÃìÙ³‘˜˜ˆÏ>û ³gÏÆÜ¹s‘œœ,'** ;wîÔ¹ŸœœŒ… bêÔ© Amm­p_^^þøÇ?âÍ7ßÔx…;räfÏž |ðÁP(ö«¨¨À† pîÜ9 33›7oú%%%añâÅðóóÃܹs¥1/åååBŸ›7oâ½÷ÞSÛvïÞ-ºŽGiý455éûi077‡\.‡D"ŸŸŸÚ|@jj*&Ož,ê˜íMž<¸páB‡m ÒÓÓ±råJ!00`Àlذ¦¦¦}Ä>æçÑågšœœ¸»»ãÔ©S¸ÿ>6mÚ„!C†ÀÝÝ™™™pssCtt4âãã±gϬX±±±±øúë¯ñÅ_?œ¡C‡¢OŸ>ÂqÛîÿüóÏØµk¶nÝ oooÄÇÇãÀðôôDCC6n܈%K– ,, wîÜAHHŒºº:$&&âÀ0`>þøc|õÕWøàƒôö³¶¶FVVúõë‡Ý»wÃÜÜ™™™ZÖ-»wïÆ‡~oooܽ{ÁÁÁ¯ J¥RèãêêŠíÛ· ·‡„„àW¿úˆªÃÎÎNmŒ’’ÄÅÅ!==:FéééÈÏÏáÑ£GÈÊÊBëïïèèhTVVÂÜÜ÷îÝCee%|||:ýœhåää„ûYYYm P(`ii©¶jåëë«õØW®\ÁW_}…9sæ`òäÉËåÏ]¯.]SSS¬X±2™ îîî DRRÜÝÝADxûí·!‘H0vìXH¥R¼õÖ[ÂþÉ“'…ãL˜0Aí¸m÷ÏŸ?___á=oÞ<$&&hyB 8³gÏŒ3Ó¦MCJJ F  åUÉÄÄ[·nųgÏ:ì÷Ö[oA©Tbݺu°´´ÄãÇ…Zär98€#FhYÈÊd2ÔÖÖª…¾­¾}û Oø;vÀÅÅ‹-]Ðrf¿~ý:bccQ\\Œ€€8p@ïÏèîÝ»(**Ðz¥R‰GÁÎÎÇǰaÃ’’‚Y³f!55>>>èÛ·¯ÞcÂØØ555Â~nn®°†iËÈÈ&&&¢Ž=qâDXYY!..GŽÁ›o¾‰™3gj ÞóêòÐØÚÚB&ûßÃ:88 ##CØo|‰D¹\©T*쪬¬ öööj· 6 ðøñcäçç«]¥R*•7nÆŒŒ ¬Y³¦¦¦xõÕW±dɘššêí×Z_ëµ-¹\Žœœ:tEEE0333x¡’’üóŸÿnSGVVBCC1lØ0Ì›7žžžÍã»ï¾«¶¦IJJ®]»púôiH$øûû#99³fÍÂÅ‹±f̓OGÊÊÊÔæpΜ9Z×47nÜÀÓ§OAD';;¥¥¥xã74ú9#GŽDee% GGGìØ±£KêoÕå¡iÿÊQQQ!jiˆ—^zIãreë¸&&&5jöìÙ#ܧT*!‘H@DX½z5V¯^ÜÜ\ÄÄÄ`Û¶m8tèÞ~•••:ŸŒiii8rä¶oß777!  ÃÇššŠ„„|öÙgjg$1uÈd2ÈårTTT ººÍÍÍj/X†rrrBuu5jkkajj ???>|—/_FUU¼¼¼D³½ºº:\¿~ýë_;lëââ‚gÏž!33žžžj÷EFFÂÒÒRkhZ©T*€T*E¿~ýž¯p-ºüBÀãÇ‘žž e¢âãã…WI1îß¿ëׯkÝ÷ôôDrr2ž>}  eá|ûömÀرcqûöma‘¬T*±råJ\ºt 'Nœ@pp0¤R)œ1uêT”••uØO…BaÆaÔ¨Q022Bvv¶Æ%Ûörss±wï^üýï×8{‰©cäÈ‘8|ø0Þ{ï=¤¦¦bñâÅ“.õõõ¨©©AMM  Ž;a=hÐ xxx`ïÞ½ðõõÕbZZòòòôŽ¡T*QSSƒêêjäää`óæÍ6lƯѦíV[[ âÿø …öééé¸zõªÎ+n·nÝÂöíÛ±fÍá‚Ô¦M›ôÖÙ]~¦qqqÁÁƒ…ÂÂBŒ1¨ªªuœsçÎáÇÄo~ó}¤¦¦bÙ²epttDqq1ÆŽ 2d‚‚‚°zõj8;;#??nnn˜ýôSL›6 Ç×9Fhh(BCCfffxíµ×ð‡?üAíL¹oß>ìÛ·O­Ÿ\.ǹsç„ÚÚZ,_¾öööhjjÂãDZvíZ¸ººjŒ—ššŠS§NaΜ9 Þöw uðüøñãX¼x±A— [566";;¦¦¦Â¹;äå塼¼#GŽÔX8–••ááǰ²²R[ÿ455áîÝ»hll„££#,,, êסººfffZΨwïÞÅ€0|øp”––¢¤¤:ûtÄ:tQ©TÝú©yii©pÉ¿»UTTàÁƒ022ˆ#t^ èªÇœ””„>úHﺴ[>ÜìӧƌӇV£ï•ÎÊÊJø­-¹\ŽQ£F‰î×–D"Q{ò›˜˜g:°¶¶Ö¸jÓ¾OG ©C—îþšÉÙ³g…¯ºt7 ƒžK/ò«5ü&ÚÒ¥K{º„ÅßrfL$ c"qh‰CØHÆDâÐ0&‡†1‘84Œ‰dð‡›­¿4ÅØÿÏRRR:lÓah†ŠùóçwE=Œõz†<×;üÂ&cL¯i‰CØHÆDú¿`GLŸO‡ IEND®B`‚bm3.7.0/doc/html/a00001.html0000644000175000017500000002026211365042626013417 0ustar tlktlk BitMagic: sample1.cpp

sample1.cpp

Example of how to use bvector template class to set bits and then retrieve indexes of ON bits. For more information please visit: http://bmagic.sourceforge.net

See also:
bm::bvector<>::get_next()
bm::bvector<>::get_first()
bm::bvector<>::set()
bm::bvector<>::count()
bm::bvector<>::clear()
/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample1.cpp
  Example of how to use bvector template class to set
  bits and then retrieve indexes of ON bits.
 
  For more information please visit:  http://bmagic.sourceforge.net

  \sa bm::bvector<>::get_next() 
  \sa bm::bvector<>::get_first() 
  \sa bm::bvector<>::set()
  \sa bm::bvector<>::count() 
  \sa bm::bvector<>::clear()
  
 */

#include <iostream>
#include "bm.h"

using namespace std;

int main(void)
{
    bm::bvector<>   bv;    // Bitvector variable declaration.

    cout << bv.count() << endl;

    // Set some bits.

    bv.set(10);
    bv.set(100);
    bv.set(1000000);

    // New bitvector's count.

    cout << bv.count() << endl;


    // Print the bitvector.

    unsigned value = bv.get_first();
    do
    {
        cout << value;
        value = bv.get_next(value);
        if (value)
        {
            cout << ",";
        }
        else
        {
            break;
        }
    } while(1);

    cout << endl;

    bv.clear();   // Clean up.

    cout << bv.count() << endl;

    // We also can use operators to set-clear bits;

    bv[10] = true;
    bv[100] = true;
    bv[10000] = true;

    cout << bv.count() << endl;

    if (bv[10])
    {
        bv[10] = false;
    }

    cout << bv.count() << endl;

    return 0;
}


Generated on Sun Apr 25 09:37:26 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00198.map0000644000175000017500000000067611365042645013261 0ustar tlktlk bm3.7.0/doc/html/a00217.md50000644000175000017500000000004011365042646013143 0ustar tlktlkc8eb44ac1cc93219b3f0ae25f478f479bm3.7.0/doc/html/a00240.map0000644000175000017500000000052611365042650013233 0ustar tlktlk bm3.7.0/doc/html/a00175.map0000644000175000017500000000017711365042644013247 0ustar tlktlk bm3.7.0/doc/html/a00199.map0000644000175000017500000000021511365042645013247 0ustar tlktlk bm3.7.0/doc/html/a00126.png0000644000175000017500000001071611365042644013252 0ustar tlktlk‰PNG  IHDRU(NÇi…bKGDÿÿÿ ½§“ƒIDATxœí{TTÕ÷À?0 :’‚¨™!‘ˆA¨¨˜DmE+Qƒ"- i©deÚ„)Ë M–þ,J„: «Ò20JRRY>p dŒ‡Ä ðûƒÅ]  È Õ÷|ÖºpÎ>ûì»ï½ûœ³Ï‹Y]]]@ 0 æ]m€@ ü—AU Lˆª@`B,šäååqüøñ®°Eðâ™gžéj:ÄîÝ»»ÚÁ¿€2jÔ(ýº&lß¾½‡8:tüÛéjÿ‰ãßqÜ;3ÕêÄK‚;`ÇŽ<ÿüó]m†IX¹r%^^^]m†àJDDD³å"§*&DU@ 0!"¨  AU Lˆª@`BDPb’ ºfÍ"""ˆˆˆ 22’˜˜.]º$Õ³víÚfÛÖÔÔÁöíÛ›­‰‰áÓO?í}­õß*++Ù²e óçÏgÁ‚|õÕWÔÔÔtȦÖX»v-W®\1(o|¹¹¹|ñÅfƒ í\»v”””®6£K)++cçÎFå***رcG»Út†‰I‚êûï¿ÏÉ“'Ñh4\¹r…øøxT*'Ož ´´”­[·JòóæÍ“‚nuu5ï¼ó , ²²ROo^^‹-êP@l®ÿö ÑhpqqaÛ¶m 4ˆÞ½{³råJ|||:í]Þððp½A©ÆçñÇðùçŸwJÿwî6))Ùüþûµ®6åŽÈËËcÿþýwµÏèèhòóóïjŸ­Q^^ηß~Û&¹†É@[Û£±/L¥³#˜lùÿúë¯óùçŸKZZ“'OfãÆ 4ˆsçÎI²)))”––êµ···çàÁƒze{öìÁÑѱö5í¿=„„„àîîNZZË—/'""‚ŒŒ Ž;FRRR‡mk955µ¤¥gÉ’¨T+yé¥ÿãÂ…ë]mÖ¿†ŒŒ ÊËË»Ú ‰¾}ûòÕW_uz›æhì Séì–SíÝ»7ݺuàúõë<õÔSøûûSXXˆ¿¿?©©©’¼ŸŸ z:víÚ…ŸŸŸ^Y||<ŽŽŽXXX`ooOtt´TwàÀŒµµ5sçÎeÙ²eúHêC«ÕâîîNIIÉÛݘÌÌ+¼ûî7 þ.~~›HL¡¨¨'''>þøcŠŠŠôú×h4̘1ƒÈÈHJKK™9s&³fÍjv)òäIúõëÇÀ êfΜ©gÀÒ¥KÉÈÈhÑGÆêÑø<ì“Ë嘘HTT{öìA§Ó‘ššJRRÉÉÉØÙٵ跦²³fÍ"66Vê#!!¥Ri0€´‡óç X»6™#Âññù„/¿>ž#GŽààà ·MKK£¶¶–¾}ûò÷ßóÆo0yòd¾ýö[–.]ʺuë8sæ Z­–wß}—yóæ¡V«yüñÇyï½÷¨««#44”ž={ŠJ¥¢¸¸˜+VðÌ3ÏpðàAæÏŸÏªU«¸zõ*ÕÕÕdgg“––FTTýû÷׳ûĉ$''þ}û°¶¶æë¯¿hÕ¾¦zûôéCVVP?pDEEñòË/“’’Â{ï½Gll¬ÁÀ\UU%µ:t(aaa„……ñöÛoSQQÁý÷ßoT_S_4ÖÙš_nß¾ÍéÓ§ùí·ßˆ‹‹cÛ¶m=z”ÌÌÌß -þö¿½?~œÜÜ\ >øUVV’““c°|W*•˜››£T*‘ËåÒ† cÆŒA­VãïïÏîÝ»ñõõE&“Im---ùå—_pssÀÁÁ¹\Nii) L™2EšÉ½õÖ[lذÁÀ΄„&L˜ÀôéÓxã7°°° ²²kkk=Ù²²2ºwïn"™¥RÉš5kËåxzz²páBvìØ‡‡•••|öÙgôëתªªýfee¥'«Óé ";;›aƱ}ûv^~ùåvÛvíZ1ûöe‘Á… ×±°qûvýµþ¯ÒÆ( ‚ƒƒ±°°`ذaøúúrèÐ!–.]JLL ………ØÚÚrøðažxâ ÒÓÓ±±±‘îEWWW¦M›ÆO?ýDŸ>}xôÑGñôôàÙgŸE&“¡ÓéP(˜™™¡P(°°° -- GGG¦M›ÀرcñððàÇä‰'ž ªªŠ×^{ûî»ÏÀnNÔïmX[[óÎ;ïpûöm£öùùùéém˜yÈårbbbx衇€úÔž……åååXZZ6ë?+++)à‡‡‡£R©0ª¯ÿþz¾hLk~ñññáöíÛJ«7“¤TLTW­Z%ÝPÿa_|‘7n´YGC Àßߟ]»v±fͽúnݺqêÔ)–/_Nnn.666ÒtýòåË899I²fff888ôÑTN.—óæ›o6kùùùÔÕÕé-ÿ~ùå®^½Š‹‹ ûöí ''‡;vpìØ1¬¬¬X¼x1999­Öw„Áƒ#—Ë¥¿¥å™¹¹9ýúõZ÷[SYKKKž~úiöìÙƒµµ5¿ÿþ;3gÎl“=ýu‹£G ±·_̈áÈdfÔÖÖ¯jklÝšJJJvÛN¾“¹÷ÞGÛ%߯_?½‡úÁ$33¥R‰››GŽaÊ”)œ>}š+VPPP@^^Ï>û¬Ô®ªª jjj0`€TnaaÁsÏ=×lßZ­VšÕ5pÿý÷SXXÔ? ÍT€Ñ£G“™™É+¯¼‚B¡ÀÝÝÙ³g£P(Zµ¯5½r¹œsçÎ˵k×èÑ£G›7uãââÈÏÏgýúõÖgÌ/€žýMŸñ;ÅdAµ)îîîsóæÍ6·™>}:‹/&;;›¼¼<ÆÏÏ?ÿ,Õ'%%±bÅ öîݢ1cÉdÒ²´{÷îüõ×_zúŠ‹‹ úèÞ½»žSñòò¢gÏžzåèt:>lðµ¢Õ«Wcoo««+VVVÈd2,--±²²’òÉ2™¬ÕúŽÐtÀ*,,ÄÆÆпAZó[SY¨Ü–-[†L&Ã××—{キöþ×iºñZRR"­r¼¼¼Ø¿?ݺucÔ¨QR¹µµ5...zo·TUUaffF\\œÁý›ššŠ›››Áõ°¶¶6x[äæÍ›’\kÁ¢®®ŽBBB¸pá{÷î•–×­ÙWZZÚ¢Þ´´4¶nÝJXXÎÎΘ››ãããÓ¢ 9rµZͦM›ôf´wªÏ˜_: “Õ[·nI9“[·n³³3J¥²Í›J¥’Çœ—^z‰3f`n®ŸòÕh4¨T*ÆÔ/O‚öäÉ“ $22’>}úžžÎÙ³g .¼···´YfkkËñãÇ™={¶A èÑ£‹-"88˜””iù¡V«INN&55'''iæ{ìØ1f͚ń $Æê[¢±?_@ý¬[­VãããCYY›7o&$$Ä@®5¿5‡··7ùùùlذøøx£¶6pß} ÆŽµeãÆ%h4E-.ÿ["(h¾¾nmî¯3‰ Œ?¸ žžÎèÑ£©¨¨`ÿþýÒ²yܸq|üñÇ$&&òÊ+¯Hm{ì16mÚÄ•+WxਪªbþüùÌ™3‡Ç{ŒððpJJJP*•äääÉ7ß|cз»»;_~ù%ùùùØÛÛS\\ÌÏ?ÿÌòåËÚÏñãÇÙ°aC† aêÔ©|ðÁFísqqiQ§V«ådΜ9ctƒöÂ… ¬[·Žµk×Ì~ïDtÌ/ÁdAµ!OõK•Q£Fµøõt[[[.\Èúõë:t¨^¿¿?³gÏæÃ?4h÷ôÓO³jÕ*Æ¥¥%r¹BCCÙ·oO=õC‡eøðá”——3|øpƒÎĉ äNœ8Att4 …¢Y[W­ZEii)ÎÎΨT*t:—/_æÓO?eôèÑíuS›i¼ËõË”¦o)xxx°téR¢££9þ<®®®sýºþ«I­ù-&&Æ o¹\ÎôéÓùþûï™4iÒÙß¿/BB&2‰óç HJÊb÷î\»VŒ\.ûÏåUU*7ndçÎh4zè!i6uÏ=÷àááÁÙ³gqww—Ú 0€   BBB2dyyy8;;3iÒ$ÌÌÌðòò"00Áƒóǰ`Áî¹çzõêÅúõëY´hNNNøùùÌ!C8þ<'NdäÈ‘z;ùÍ1uêT8@PPJ¥’sçα`Á£öµ–Ö;v,qqq¼öÚkÈår)g¹qãÆS^jµš[·néÕ+ vïÞݪ¾ÈÈH=_ôèÑCjïèèØ¢_ŠŠŠŒ\Ñ;Ǭ®Ir¢á#æ|±½¶¶–ââbiÒjµdee1bÄzõêÕ.]7oÞ$##[[[\\\¸zõ*/^D¥RqãÆ ª««)**b̘1<òÈ#lß¾‘#Gêõõ#ã¥K—xä‘G ò.Í¡ÕjÉÎÎF&“áêêªwñËtïÞ]Zî··ÞMýõ;´éééôìÙSÚˆjŽ–ü6~üøfåç΋A^ÛÆîŸÌÌ+$%e’˜xŠ¢¢r½3ç3S533k÷Gªu:gΜA¡PH«š¶pãÆ ._¾LïÞ½4h^F£¡  €bkk+•—””››ËÃ?,¥ Ðh4ôíÛW/kŒêêjrrrÐét8::¼éÑš} ÔÕÕQVV&=äääЫW/(,,$??ŸáǷئ5ZÓר …Â@çúÅØÙÙüô®Õ»AVV“&MbÏž=¨T*öîÝKtt4¹¹¹z›9‚ÖÑjµ=z”Ù³g“™™©·©×ÚzÿÔÔÔ’žžËÞ½™8ð+Uÿú *øß¢¥ ÚiUwWWW¶mÛÆêÕ«)**ÂÑÑ‘äädPÛÉ¥K—ˆŒŒdݺuí¨íA&3ÇÓÓ OO'¢¢fqøpØtZÁÝâ?T¡þí†ÍÁ1räHNœ8qWû´´´`Ú´awµO ³Ÿþ"‚ª@ ˜TÀ„ˆ *&DU@ 0!"¨  AU LH‹ï©šê3XÁ¿•†f)´DÃ7_cT===Ùµk×]1H ø§"žA[hî¿‚üö_ wŽÈ©  AU Lˆª@`BþO&<¹­'ÙIIEND®B`‚bm3.7.0/doc/html/a00135.map0000644000175000017500000000231111365042632013230 0ustar tlktlk bm3.7.0/doc/html/functions_func_0x66.html0000644000175000017500000001122111365042644016417 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00101.html0000644000175000017500000000577311365042636013433 0ustar tlktlk BitMagic: bmundef.h File Reference

bmundef.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


Generated on Sun Apr 25 09:37:34 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x6f.html0000644000175000017500000001055511365042652020006 0ustar tlktlk BitMagic: Data Fields
 

- o -

  • op_and() : bm
  • op_or() : bm
  • op_xor() : bm
  • operation2metric() : bm
  • operator&() : bm
  • operator-() : bm
  • operator^() : bm
  • operator|() : bm
  • or_bit_block() : bm
  • or_op() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00021.html0000644000175000017500000000777011365042651013430 0ustar tlktlk BitMagic: bm::bit_COUNT_SUB_BA< W > Struct Template Reference

bm::bit_COUNT_SUB_BA< W > Struct Template Reference

Bit SUB BA functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_SUB_BA< W >

Bit SUB BA functor.

Definition at line 5154 of file bmfunc.h.


Member Function Documentation

template<typename W>
W bm::bit_COUNT_SUB_BA< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5156 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00166.png0000644000175000017500000000436611365042644013262 0ustar tlktlk‰PNG  IHDR˜(3TbKGDÿÿÿ ½§“«IDATxœíš{HT[ÆŸqF-uF˦´"żDR£EvÓZ4™‘Ñ•ŠŒÀ.tºÝ/Æ@8Úm*“J í¥!Y™‘ÖÔŒ—¢ÌÆtžóGßÙ|ƒÎŒvö|‡Î·~°`Þõ®õìµÏìy÷Þ£ IÂëŸ^€àß0˜À£ƒ <ŠÊYÂh4þ/×!ø Óé0lØ0ÇN:€h¢õª †.>rzƒÁ€ ¸" E·ý¢xa0Gxa0Gxa0Gqù˜¢§¼zõ X²d‰r¿%---8~ü8Ö¯_ïr\kk+öïßM›6ɾƒÁ€ºººnsQQQÐëõ²Ó²\Áž?Ž#GŽÈ!õÛòùógœ33Ó©IÜÑØØˆ††444À`0À`0HqSSÓ/iþ]d¹‚ €ððpÔÔÔüm7n`ÅŠ¿47++Kúœ™™ ÿø_¶Ìn·cåÊ•Ðh48p vîÜ hjjBrr2rss1xð`hµZœ:u k×®…V«Ehh(Ο?/éìÙ³‹/v»âÖ­[ˆ…ÆŽ‹GI¹²²2ÄÅÅÁ××#FŒÀåË—åååX±b²²² Ñh‚ÜÜ\@NNöíÛ'iX­VŒ7Ÿ>}‚ÅbÁôéÓ‘——‡   ”––böìÙÒX“É„áÇÃÏÏéééX·n®_¿.åOœ8°°0øûû#==v»z½‹z½åååNÏÓf³õh?Ü!—ŽK\½‹ìîÝRw˜L&* ®^½š­­­,//g`` F#Íf3½¼¼¸eËÚív>|˜¸k×.ÚívîÞ½›‘‘‘’ÖåË—yàÀ§±3êëë©V«yñâE~ûö999 £Ýn燨V«yúôi~ÿþ—.]¢ŸŸŸ?N“ÉD•JÅU«V±µµ• äµk×h2™-ãàÁƒœ6mšt¼¾}û255•÷îÝcMM ýýýI’µµµ à•+WØÖÖÆ;vP©Tòܹs4›ÍÀeË–Ñf³ñÕ«W dII [ZZÊÒÒR¶··w9ÇÚÚZ®Y³†111n÷###ƒ.Ç2>>žgΜá÷ïßÝjºÂ™_d3X¿~ý6eóæÍLMM•6ôëׯ$É/^P¥RñÇ$ÉÊÊJ4¨W'Ó{÷îåìÙ³¥¸½½»víbkk+9¤¤$‡ñóæÍã¶mÛh2™¨Ñhh³ÙÖ®×ëi³ÙħOŸ’$xöìY’? €ïÞ½#IÖÕÕIËÉÉaZZš¤g·Ûê`0‹Å"åÇÏ‹/’$‡ ªª*‡¹EEEœ5kGŒÁ}ûö±©©Éí~ôÄ`$ùàÁ.Z´ˆC‡åÆùöí[·sºÃ™_dû‰>|8¼½½¥xÔ¨Q0›ÍRìïïàçKQ___¨T*)–ƒ7oÞ ::Zн½½±aÃøùù¡¡¡Á!111¨¯¯DDDÀÇÇÇaíoß¾…æÌ™ƒ‚‚ÔÖÖâÙ³g˜;w®4ÎËË ƒv»…Bˆˆ)V*•Ðjµù¨@ll,Nœ8U«V¡ºº«W¯Fÿþý{º-nÑétÈËËCUUÔj5&OžŒ´´4Ùôe3Xcc£Cl±XdÝw¨Õj|úôÉ¡ïÂ… øüù34M—õ555!00@×µ[­V¨ÕjÀüùóQPPƒÁ€ÔÔTé‹87†Z­îr×ÖÒÒÒësòöö†¯¯/¬V+š››ÑÑÑÑkžÒÙÙ ’P©TMW6ƒ½yóW¯^ðóVüèÑ£˜9sf¯u?~Œââb§±3RRRpåÊX,ÀDZpáB(•J¤¤¤àæÍ›xýú5àãÇ(,,Drr2 ¡¡A*ú¿~ýŠcÇŽI¹””˜Ífzô¨Ëù½ÿžÙÙÙŒu»=©ÁŒF#“’’h4¥šøWqæY ömmm,))áãÇ{¿B™xñâ‹‹‹»-VëêêX\\Ìšš©Ïd21>>ž6›wîÜáÇi·Ûæ-Y²„6lpyÜÎÎN666’$- «««ùäÉ–––Òf³1""‚÷ïßw»~‹ÅÂââb677;ÓÑÑáV§'È¥C:÷‹¬Zûôéƒ)S¦È))a6›qûöm§ùÑ£G#..QQQˆŠŠêvLxx8ÂÃûÍùøø ))É¡ÏjµâîÝ»0¨¬¬t¹>///øù“;uêT`äÈ‘8vì:::ïR´Z-þøã—c”J¥[ž —Ž+~›'ùÞÞÞ0`€Ó¼ŸŸß/éj4DFFv›«««ÃöíÛ‘››Ûå.ÔcÆŒÁéÓ§±sçN477#22EEEwÙÿ/(þsyëšP(Äò=Æ™_ÄßuELàQ„ÁELàQ„ÁELàQ„ÁžÅÕ£ÑDëMëÕ«¢üü|g) [t:]—>§Oò95˜À£ƒ <Š0˜À£ü V%ž ¹PeIEND®B`‚bm3.7.0/doc/html/namespacemembers_vars.html0000644000175000017500000001772511365042652017171 0ustar tlktlk BitMagic: Data Fields
 

- a -

  • all_bits_mask : bm

- b -

  • bits_in_array : bm
  • bits_in_block : bm

- g -

  • gap_equiv_len : bm
  • gap_length_threashold : bm
  • gap_levels : bm
  • gap_max_bits : bm
  • gap_max_buff_len : bm
  • gap_max_level : bm

- i -

  • ibpc_all_one : bm
  • ibpc_all_zero : bm
  • ibpc_close : bm
  • ibpc_end : bm
  • ibpc_equiv : bm
  • ibpc_uncompr : bm
  • id_max : bm

- s -

  • set_array_mask : bm
  • set_array_shift : bm
  • set_array_size : bm
  • set_blkblk_mask : bm
  • set_block_16one : bm
  • set_block_16zero : bm
  • set_block_1one : bm
  • set_block_1zero : bm
  • set_block_32one : bm
  • set_block_32zero : bm
  • set_block_8one : bm
  • set_block_8zero : bm
  • set_block_aone : bm
  • set_block_arrbit : bm
  • set_block_arrgap : bm
  • set_block_arrgap_egamma : bm
  • set_block_arrgap_egamma_inv : bm
  • set_block_arrgap_inv : bm
  • set_block_azero : bm
  • set_block_bit : bm
  • set_block_bit_0runs : bm
  • set_block_bit_1bit : bm
  • set_block_bit_interval : bm
  • set_block_end : bm
  • set_block_gap : bm
  • set_block_gap_egamma : bm
  • set_block_gapbit : bm
  • set_block_mask : bm
  • set_block_plain_cnt : bm
  • set_block_plain_size : bm
  • set_block_sgapbit : bm
  • set_block_sgapgap : bm
  • set_block_shift : bm
  • set_block_size : bm
  • set_block_size_op : bm
  • set_total_blocks : bm
  • set_word_mask : bm
  • set_word_shift : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00174.map0000644000175000017500000000017611365042644013245 0ustar tlktlk bm3.7.0/doc/html/a00167.png0000644000175000017500000000324711365042644013260 0ustar tlktlk‰PNG  IHDR€(6qòHbKGDÿÿÿ ½§“\IDATxœí›}HSmƯ½±ÈX&›¥†j…%Òç,q[”AD Œ¤˜A¨„(³ ±õ_ä Š‚cÆÊ„ŠZ‘IŽ,r(HTjÌ©57k©¹üØÝ½ÞmŽÙœ¯å9?8pîç9»vÉ®sŸó8xË?³m@`vÀs„ð&pÀn·ãåË—³áE`†Q(HNNö¤X–%Â67–e?n :L ÜÌ-D"ѤãBÀs„ð!~ü8é\ZZ4ÍÿêgÚg€¶¶6ÔÔÔDÃKÄx<œ>}:h¦(,, ù!†ÃårÁápÀáp€eY°,ËÕn·;ÊNÃ3í3yøð!Ž;Ñk‹‹‹¹ýÂÂB˜Õ/PTzŸÏ‡¢¢"H¥RÄÇÇãìÙ³·Û µZóçÏ#11r¹W®\Aii)är9PWWÇéTWW£   d}ãÆ ¤¦¦‚a$$$ ººzZ¾+** —Ë!‘H°uëV8nîíÛ·ÈÎÎÆüùó±bÅ ÔÖÖ4 œN'4 š››CjÿøñcZÞ¢­Ѝ µµb±Ÿ>}B}}=ªªªpëÖ-ŒŽŽâéÓ§øúõ+º»»qæÌhµZÈår8N?~'NœàtV®\‰7NZ àðáÃ8w†póæM”••¡¯¯/"Ï&“ W¯^EKK \.¤R)*++CCCؾ};òóóáñxPSSƒ£Gâùóç0 Éd0 ÈÊÊ ÒýðáJKK‘™™‘¯@îß¿ 6àÚµk3†P‹ASåîÝ»´xñbáÆt:íÝ»—z{{ Q{{;1 C£££DDôúõkZ²dÉ”ÞÇëõ’Åbáê®®.’H$ÔÑÑÁíÿw< ”˜˜HïÞ½#"¢ÁÁAúòå ÕÕÕѺuëüŽ/**¢’’""JJJ"«ÕÊÍù|>zðàíÚµ‹V­ZEz½žÜnwXZ­–´ZmØã^¼xA¤eË–Qyy9Ùíö°¯ ¿»ô;¤¤¤@,sõš5kðäɮމ‰ðkAB"‘€a®ž*‰‹åååèììD\\|>_ÄžwïÞÆÆFlÙ²±±±Ø¶mt:bcca³ÙÐÖÖ†åË—sÇcçÎA:f³GŽAzz:JJJ R©~ëïš … ….— —/_Fnn.233Q__?mí¨\\.—_ít: iކ†èt:TTT ½½¯^½Â‚ "Ö#"èõz¸ÝnFx½^ìÛ· •J‘““›Íæ·]¼x1HG,C"‘ ¯¯ýýý‹ØS8ÆÇÇAD` .ŒŠfT`³ÙpïÞ=¿®ÕƒaÒoK8, L&Ó¤µÃá@zz:rrr0oÞ<´´´àÛ·o{®ªªBnn.†Á¦M›PPP€žž€Z­Fss3Þ¿øþý;Ö¯_;wîé( X­VTVVâöíÛHMMÅ©S§ÐÝݱ·@ššš Ñh°yófÌf3®_¿ñÀkB$=@VV¥¥¥‘R©¤¥K—R^^ŒŒp=ÀÃÕV«Õ¯(..&…B1im·Û)>>ž”J%©ÕjÊËË£””Ú³gOD=@WW%''SFF©T*Z´h]ºt‰›×ëõ$•JI¥RQRRíß¿ŸÆÇljˆhíÚµ”M­­­Aº===tòäIZ½zuXSéŒF#)•J2\ï ÑL; Scc£_£m<=~ü˜Þ¼yCD¿BÑÔÔ±ž×ë¥gϞѣGèóçÏAó‡ƒL&×(Nàt:Éd2QHí±±±ˆ}Í„N¨ˆþ䨭­ÅþúÿêííõkDÉÈȈڭÚ߀H$˲ÈÏÏ÷Ÿ³OÅb1d2YÈùé4s‰9™L†;v̶?a9˜çà9BxŽž#€çà9BxNÈçÑ^Òø3 z,ü<|î2ÙÏà À/„€çà9BxÎO¬«„áwg5IEND®B`‚bm3.7.0/doc/html/a00088.html0000644000175000017500000000711411365042631013433 0ustar tlktlk BitMagic: bmalgo.h File Reference

bmalgo.h File Reference

#include "bm.h"
#include "bmfunc.h"
#include "bmdef.h"
#include "bmalgo_impl.h"
#include "bmundef.h"
Include dependency graph for bmalgo.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


Generated on Sun Apr 25 09:37:29 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00181.md50000644000175000017500000000004011365042645013142 0ustar tlktlk152df9f27b9b3995cc421a932f8f57cebm3.7.0/doc/html/a00076.html0000644000175000017500000003223211365042651013431 0ustar tlktlk BitMagic: bm::operation_functions< T > Struct Template Reference

bm::operation_functions< T > Struct Template Reference

#include <bmfunc.h>

Static Public Member Functions

static
gap_operation_to_bitset_func_type 
gap_op_to_bit (unsigned i)
static gap_operation_func_type gap_operation (unsigned i)
static
bit_operation_count_func_type 
bit_operation_count (unsigned i)

Static Public Attributes

static
gap_operation_to_bitset_func_type 
gap2bit_table_ [bm::set_END]
static gap_operation_func_type gapop_table_ [bm::set_END]
static
bit_operation_count_func_type 
bit_op_count_table_ [bm::set_END]

Detailed Description

template<bool T>
struct bm::operation_functions< T >

Definition at line 5203 of file bmfunc.h.


Member Function Documentation

template<bool T>
static bit_operation_count_func_type bm::operation_functions< T >::bit_operation_count ( unsigned  i  )  [inline, static]
template<bool T>
static gap_operation_to_bitset_func_type bm::operation_functions< T >::gap_op_to_bit ( unsigned  i  )  [inline, static]

Definition at line 5213 of file bmfunc.h.

References bm::operation_functions< T >::gap2bit_table_.

template<bool T>
static gap_operation_func_type bm::operation_functions< T >::gap_operation ( unsigned  i  )  [inline, static]

Definition at line 5219 of file bmfunc.h.

References bm::operation_functions< T >::gapop_table_.


Field Documentation

Initial value:
 {
    &gap_and_to_bitset<bm::gap_word_t>,    
    &gap_add_to_bitset<bm::gap_word_t>,    
    &gap_sub_to_bitset<bm::gap_word_t>,    
    &gap_xor_to_bitset<bm::gap_word_t>,    
    0
}

Definition at line 5206 of file bmfunc.h.

Referenced by bm::operation_functions< T >::gap_op_to_bit().

template<bool T>
gap_operation_func_type bm::operation_functions< T >::gapop_table_ [inline, static]

The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00122.html0000644000175000017500000005263411365042643013432 0ustar tlktlk BitMagic: Processor specific optimizations for SSE2 instructions

Processor specific optimizations for SSE2 instructions
[BitMagic C++ Library]

Collaboration diagram for Processor specific optimizations for SSE2 instructions:

Data Structures

class  bm::sse_empty_guard
 SSE2 reinitialization guard class. More...

Functions

BMFORCEINLINE void bm::sse2_xor_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 XOR array elements to specified mask dst = *src ^ mask.
BMFORCEINLINE void bm::sse2_andnot_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 Inverts array elements and NOT them to specified mask dst = ~*src & mask.
BMFORCEINLINE void bm::sse2_and_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND array elements against another array dst &= *src.
BMFORCEINLINE void bm::sse2_or_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst |= *src.
BMFORCEINLINE void bm::sse2_xor_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst ^= *src.
BMFORCEINLINE void bm::sse2_sub_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND-NOT (SUB) array elements against another array dst &= ~*src.
BMFORCEINLINE void bm::sse2_set_block (__m128i *BMRESTRICT dst, __m128i *BMRESTRICT dst_end, bm::word_t value)
 SSE2 block memset dst = value.
BMFORCEINLINE void bm::sse2_copy_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 SSE2 block copy dst = *src.
BMFORCEINLINE void bm::sse2_invert_arr (bm::word_t *first, bm::word_t *last)
 Invert array elements dst = ~*dst or dst ^= *dst.
bm::id_t bm::sse2_bit_count (const __m128i *block, const __m128i *block_end)

Function Documentation

BMFORCEINLINE void bm::sse2_and_arr ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end 
)

AND array elements against another array dst &= *src.

Definition at line 126 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_andnot_arr_2_mask ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end,
bm::word_t  mask 
)

Inverts array elements and NOT them to specified mask dst = ~*src & mask.

Definition at line 98 of file bmsse_util.h.

bm::id_t bm::sse2_bit_count ( const __m128i *  block,
const __m128i *  block_end 
) [inline]

SSE2 optimized bitcounting function implements parallel bitcounting algorithm for SSE2 instruction set.

unsigned CalcBitCount32(unsigned b)
{
    b = (b & 0x55555555) + (b >> 1 & 0x55555555);
    b = (b & 0x33333333) + (b >> 2 & 0x33333333);
    b = (b + (b >> 4)) & 0x0F0F0F0F;
    b = b + (b >> 8);
    b = (b + (b >> 16)) & 0x0000003F;
    return b;
}

Definition at line 64 of file bmsse2.h.

References BM_ALIGN16ATTR.

BMFORCEINLINE void bm::sse2_copy_block ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end 
)

SSE2 block copy dst = *src.

Definition at line 322 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_invert_arr ( bm::word_t first,
bm::word_t last 
)

Invert array elements dst = ~*dst or dst ^= *dst.

Definition at line 366 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_or_arr ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end 
)

OR array elements against another array dst |= *src.

Definition at line 167 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_set_block ( __m128i *BMRESTRICT  dst,
__m128i *BMRESTRICT  dst_end,
bm::word_t  value 
)

SSE2 block memset dst = value.

Definition at line 288 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_sub_arr ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end 
)

AND-NOT (SUB) array elements against another array dst &= ~*src.

Definition at line 248 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_xor_arr ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end 
)

OR array elements against another array dst ^= *src.

Definition at line 207 of file bmsse_util.h.

BMFORCEINLINE void bm::sse2_xor_arr_2_mask ( __m128i *BMRESTRICT  dst,
const __m128i *BMRESTRICT  src,
const __m128i *BMRESTRICT  src_end,
bm::word_t  mask 
)

XOR array elements to specified mask dst = *src ^ mask.

Definition at line 72 of file bmsse_util.h.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00157.map0000644000175000017500000000164411365042640013243 0ustar tlktlk bm3.7.0/doc/html/a00254.map0000644000175000017500000000022411365042652013235 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_func_0x64.html0000644000175000017500000001002211365042652017711 0ustar tlktlk BitMagic: Data Fields
 

- d -

  • deserialize() : bm
  • dgap_2_gap() : bm
  • distance_and_operation() : bm
  • distance_operation() : bm
  • distance_operation_any() : bm
  • distance_stage() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00156.md50000644000175000017500000000004011365042637013145 0ustar tlktlkca548a7dbc7d3d360f4063a80f9c9e59bm3.7.0/doc/html/a00208.md50000644000175000017500000000004011365042646013143 0ustar tlktlkd518368e670bf6a15d66ab4aa2dea1f4bm3.7.0/doc/html/a00207.md50000644000175000017500000000004011365042646013142 0ustar tlktlkb5f6a4a49504d2497e2ec45a76c28436bm3.7.0/doc/html/a00183.png0000644000175000017500000000563111365042645013256 0ustar tlktlk‰PNG  IHDRÝ(z›ÿ°bKGDÿÿÿ ½§“ NIDATxœí}PTÕÇ¿ ‹A¸iP /.Z Ä2NÑ “6EA9½˜cÓ Q©“ƒæ4e¦ 9Ã4LÖTŽE1n$F%ȈƒD ›«!Å&¸;¬¼Ä[¼ï÷÷Ço¼ãÂîe)ØÊÎgæÎpÎsîó<çá~÷Þs÷^P$Çðú»þkÑ FˆN ð0JW½^ïÉ<‚+’ÐÐPèt:ÇNº€ØÄ&¶¿¸eddLÒ–Ë3"##Cnˆ@ pAff¦Ó~±¦<Œ@àa„è#D'x!:ÀÃÑ fFD×ÜÜŒ}ûöÍ„«?§»»»wïžõ\!—›§êã þŽ::tßÿ½Ûãm6êêêpñâÅI¶ÞÞ^Ô××£­­m&Sœ3"ºÆÆF¼óÎ;3áêOÇéééÁûï¿/µ×­[‡–––YÏér¹yª>ž`b=^¯Ç‰'Ü»yóf,\¸ëÖ­CDD^~ùeÉVPP€<ýôÓˆ‰‰ÁÃ?Œ‘‘‘ÙJÛ%WÌåexx8Î;'µËÊÊÐÓÓó7fte2±Îÿ$Μ9ƒüü|˜L&FüðÃÈËËÃéÓ§ÑÞÞŽììl”––Âh4¢¥¥&“ ÏsÆDg·Û‘••…€€aç΀ÎÎN¤¤¤à­·ÞBpp0ñÁ`ãÆ „F£AQQ‘ä'77k×®uÙv§½½÷ß? ==6› ééé0 Sæ^ZZ ­V‹«¯¾O>ù$6mÚ„¯¿þ6› wÝuöïßµZ††|ú駈ŒŒ„R©„F£AnnMe;}ú4pÕUWaÑ¢Eøä“OÀi|g ;í7›ÍX¹r¥C_zz:jkk¥ßKaa!´Z-üüüðÄO`||°uëVB¥RaåÊ•ÒåØåu–«ÝTþ]ÍŠŠŠ___<ðÀnxZ,dff",, …   X,œ{9c¢»öÚk𜜮^½šV«•ØßßO’üù矩T*9::J’¬¯¯çõ×_ÿ—ã\~0dHHFã”>_ýu®Y³FjÛívj4ItxáÂ’äÐÐëêꤱ­­­T©Tljj’ÍMÎVTTÄ[o½Õ!§¬¬,fggOŠ)¿Ã‡óÞ{ïåÍ7ß̼¼ú¨ƒ-&&fZ¢³X,\¶lÕj5³²²866æ`¯¬¬dTT׬Y#‡ùî»ïøøãóÆoä–-[xþüy·ã_•èdxžZ­>>>R{É’%8zô¨Ôöóó( ¨T*(•J©=“q¦‹ÙlÆ¢E‹¤¶B¡À‚ ¤¶——‚ƒƒ*• uuuزe š››1oÞ<Øív·rse3›ÍhllDxx¸dÄ=÷Ü3)~uu5Ö¯_èèhdgg#99yÚõ›ˆF£q˜;Üwß}¨¬¬ÄòåË¡V«±jÕ*äää@­V;ì;Uí\ù—›óèè(/^ìà#::zÚsª­­E?âââ°dÉ<óÌ3èííųÏ>‹êêjìØ±=ö˜K::xï½÷””„ØØX|þùçÓÊÅ3&ºŽŽ‡¶ÍfüyófÊý¬Å¹æškÐÙÙéÐ×ÝÝ-ý|ùA]RR‚œœcùòåðööv8årse ÀŠ+PVV&Ù¡P(ÐÑÑáßÇÇ*• /^DWWÆÆÆ„ìSŽ!‰¼¼<äå塾¾ùùùxðÁQ__ï0nªÚ¹BnΛ6m‚Ífs?±v®øøãÑßß 6üýýÆÆFŒaÕªU¸í¶ÛÐØØ___·|Žƒ$”J%üýýÝÚg*fìFŠÙlÆ—_~ èëëÃÞ½{¥OëéPWW‡òòr—홊s‰”””””HßéÔÔÔ ¡¡Á餭­ ÑÑÑX±b¼½½QSSƒÞÞ^·rseKIIÁ`ÀÙ³güñâââpðàÁIñu:ŒF#vìØââbDFFbûöí¸pá‚Ó¹ùøø §§]]]€ÚÚZ477OY“]»v!)) J¥Ë–-ÃÚµka±XþRí&îçjÎÉÉÉ(**‚Õj˜L&TUUIû–””Àd29õ;gÎäææ¢¯¯ðûï¿Ã`0à–[nÁW_}«ÕŠ7¢½½f³f³YªÍDŽ?ŽôôtÄÇǃ$ª««±ÿþ)*ç&®®G1Í5Ýí·ßÎ… 211‘7ÜpSSS922"]Û_¢©©Éaíe4ÖtÏ?ÿ>>¸îºë\ÚµZ->üðCìܹ]]]ˆŒŒÄáÇ…àÜ`éÒ¥¯Ý¶mÛfÍ·§¸âÏtÁß…«3Ýóì¥@ðoAˆN ð0Bt‡¢<Œ@àa„è#D'xW°àðÏÄ&¶û6­÷é8àÊ$Ü$44tRŸË'RÁì Öt‡¢<Œ@àaþWi@EEEüIEND®B`‚bm3.7.0/doc/html/a00189.md50000644000175000017500000000004011365042645013152 0ustar tlktlk72949031df984981db8810cda5da6554bm3.7.0/doc/html/a00243.map0000644000175000017500000000030111365042651013226 0ustar tlktlk bm3.7.0/doc/html/a00253.md50000644000175000017500000000004011365042651013137 0ustar tlktlk178520000fd2f3c4c508b087c689a6adbm3.7.0/doc/html/a00108_source.html0000644000175000017500000002764411365042630015015 0ustar tlktlk BitMagic: sample3.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00214.md50000644000175000017500000000004011365042646013140 0ustar tlktlkb28ff75d010468f93ad820b0b0e6eadcbm3.7.0/doc/html/a00114.html0000644000175000017500000001117711365042642013427 0ustar tlktlk BitMagic: sample9.cpp File Reference

sample9.cpp File Reference

#include <iostream>
#include "bm.h"
#include "bmalgo.h"
Include dependency graph for sample9.cpp:

Go to the source code of this file.

Functions

int main (void)

Function Documentation


Generated on Sun Apr 25 09:37:38 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00098.html0000644000175000017500000006337611365042635013454 0ustar tlktlk BitMagic: bmsse4.h File Reference

bmsse4.h File Reference

#include <mmintrin.h>
#include <emmintrin.h>
#include <smmintrin.h>
#include "bmdef.h"
#include "bmsse_util.h"
Include dependency graph for bmsse4.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  bm

Defines

#define VECT_XOR_ARR_2_MASK(dst, src, src_end, mask)   sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)
#define VECT_ANDNOT_ARR_2_MASK(dst, src, src_end, mask)   sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)
#define VECT_BITCOUNT(first, last)   sse4_bit_count((__m128i*) (first), (__m128i*) (last))
#define VECT_BITCOUNT_AND(first, last, mask)   sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and)
#define VECT_BITCOUNT_OR(first, last, mask)   sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or)
#define VECT_BITCOUNT_XOR(first, last, mask)   sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor)
#define VECT_BITCOUNT_SUB(first, last, mask)   sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub)
#define VECT_INVERT_ARR(first, last)   sse2_invert_arr(first, last);
#define VECT_AND_ARR(dst, src, src_end)   sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_OR_ARR(dst, src, src_end)   sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_SUB_ARR(dst, src, src_end)   sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_XOR_ARR(dst, src, src_end)   sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_COPY_BLOCK(dst, src, src_end)   sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_SET_BLOCK(dst, dst_end, value)   sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value))

Functions

bm::id_t bm::sse4_bit_count (const __m128i *block, const __m128i *block_end)
BMFORCEINLINE unsigned bm::op_xor (unsigned a, unsigned b)
BMFORCEINLINE unsigned bm::op_or (unsigned a, unsigned b)
BMFORCEINLINE unsigned bm::op_and (unsigned a, unsigned b)
template<class Func >
bm::id_t bm::sse4_bit_count_op (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, const __m128i *BMRESTRICT mask_block, Func sse2_func)
bm::id_t bm::sse4_bit_block_calc_count_change (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, unsigned *BMRESTRICT bit_count)

Define Documentation

#define VECT_AND_ARR ( dst,
src,
src_end   )     sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 219 of file bmsse4.h.

Referenced by bm::bit_block_and().

#define VECT_ANDNOT_ARR_2_MASK ( dst,
src,
src_end,
mask   )     sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)

Definition at line 198 of file bmsse4.h.

#define VECT_BITCOUNT ( first,
last   )     sse4_bit_count((__m128i*) (first), (__m128i*) (last))

Definition at line 201 of file bmsse4.h.

Referenced by bm::bit_block_calc_count().

#define VECT_BITCOUNT_AND ( first,
last,
mask   )     sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and)

Definition at line 204 of file bmsse4.h.

Referenced by bm::bit_block_and_count().

#define VECT_BITCOUNT_OR ( first,
last,
mask   )     sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or)

Definition at line 207 of file bmsse4.h.

Referenced by bm::bit_block_or_count().

#define VECT_BITCOUNT_SUB ( first,
last,
mask   )     sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub)

Definition at line 213 of file bmsse4.h.

Referenced by bm::bit_block_sub_count().

#define VECT_BITCOUNT_XOR ( first,
last,
mask   )     sse4_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor)

Definition at line 210 of file bmsse4.h.

Referenced by bm::bit_block_xor_count().

#define VECT_COPY_BLOCK ( dst,
src,
src_end   )     sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 231 of file bmsse4.h.

Referenced by bm::bit_block_copy().

#define VECT_INVERT_ARR ( first,
last   )     sse2_invert_arr(first, last);

Definition at line 216 of file bmsse4.h.

Referenced by bm::bit_invert().

#define VECT_OR_ARR ( dst,
src,
src_end   )     sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 222 of file bmsse4.h.

Referenced by bm::bit_block_or().

#define VECT_SET_BLOCK ( dst,
dst_end,
value   )     sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value))

Definition at line 234 of file bmsse4.h.

#define VECT_SUB_ARR ( dst,
src,
src_end   )     sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 225 of file bmsse4.h.

Referenced by bm::bit_block_sub().

#define VECT_XOR_ARR ( dst,
src,
src_end   )     sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 228 of file bmsse4.h.

Referenced by bm::bit_block_xor().

#define VECT_XOR_ARR_2_MASK ( dst,
src,
src_end,
mask   )     sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)

Definition at line 195 of file bmsse4.h.


Generated on Sun Apr 25 09:37:33 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00138.png0000644000175000017500000032261411365042633013256 0ustar tlktlk‰PNG  IHDRŸ«n^6mbKGDÿÿÿ ½§“ IDATxœìÝ{\Î÷ÿÇñÇÕœ•(SN¡ƒóiÎ2Qå4_fccØœç4s›œÆð3M¡Ëù¼a9t RBr%Jçºêº~ôÕwæªëª^÷Û­›Õõù¼ß¯ëºÌ\Ͻ߯·B£ÑhB!„B!„"ÿèi»!„B!„BQ|Iø$„B!„B! Œ„OB!„B!„¢Àh»!„B!„Èo[¶lÑv :§E‹Ô¨QCÛe!J …4B!„B7 …BÛ%èœM›61pà@m—!„(ydå“B!„¢Xš>}:;wÖv:¡cÇŽÚ.AQ‚IÏ'!„B!„BQ`$|B!„B!„FÂ'!„B!„BQ`$|B!„B!„FÂ'!„B!„BQ`$|B!„B!„FÂ'!„B!D‰Íþýû dì“'OþÊëâââðööæÆÏ<–žžÎ¦M› ¢ !„B!J´[·n±sçÎûèÑ£\ºté•×Í›7k×®¡¯¯ÿÌc©©©üöÛoQžB Ÿ„B!„BËbccéÛ·/5jÔÐv)B‘ï ´]€B!„Bh›F£á§Ÿ~bÿþý”*Uо}û2hÐ ™={6-[¶ÄÇLJ¬¬,FŽITT@__ŸQ£FÑ©S'þúë/V¯^M||<Íš5C­VçÎÉÒ¥K‰ˆˆÀ‚¡C‡Ò¹sg.\HLL óçÏgôèÑ´hÑâ¹5îÙ³‡ÿû¿ÿãñãÇtìØ‘‰'¢P( åõBˆ·!+Ÿ„B!„%Þ•+WÐ××ÇÏÏ9sæðÇpìØ1²²²&99™-[¶0lØ0-Z„‰‰ J¥’~ýúån‰»~ý: ,`Ô¨QìÚµ üýýœ¾M'N¤K—.ìÙ³‡ñãdztéRBCC=z4æææŒ3''§çÖ§V« gÓ¦MüöÛo?~œóçÏÚë#„oCÂ'!„B!D‰W¾|yFŒAéÒ¥iÔ¨üùçŸ@Ϊ¨ P(pvvF__OOÏÜïSSS8|ø0íÛ·§]»v¹«§jÕª€¿¿?•+WÆÝÝCCCqqqáèÑ£”+W…BA¹rå044|aÇÇÀÀKKKlllHII)øF!òl»B!„B”x–––üïãQÍš5 ÊýÞÈÈ…B¡¡ancðn{‹‹‹ÃÆÆæ©q­­­¸ÿ>·nÝ¢ÿþ¹eddвeË<Õ§§§‡‰‰Iî÷…µÝ.55=J•’ŽBˆ7'‚!„B!J¼Ç?õ}BB*Tx­1*T¨@||üsÇ-[¶,7fÑ¢E¹eddè\ϦÇS9{ö§O_gÛ¶@bc ù3³òÚ.MQ„ɶ;!„B!D‰wÿþýÜþL©©©ìܹ3Ï«’žprr⯿þâáÇ@Nƒñœ áæÍ›@Nð4räHŽ?þܱNœ8Á7ÞôéäYll;wžgÚ4?Ú·ŸOƒÓùÏÖ²víqbc05-Wàu!Š7Yù$„B!„(ñ4hÀòåËÙ¼y3wîÜ¡nݺ¸ºº’˜˜˜ç1Ú´iñcÇ:t(uêÔáîÝ»8;;P½zu†ÎgŸ}Fýúõ¹uëööö¹§äýÛÏ?ÿLÏž=©Y³f¾<¿'nÝzÈ™3‘œ>ÉßGý==úúz¨TÙ¹×eff`fVAçVg !Š…F£Ñh»!„B!„ÈO …‚éÓ§Ó¹sç<ß“™™Ihh(åË—§nݺo5j˜bdôâ“ø„âe$|B!„BˆbÌÆ¦"qqY¶l-ÑÑؼù æ•+Ÿ õ ¸I‡ 05-•U%ªWòU9÷W++*U’ÞPBˆç“ðI!„B!J33#ÆŒéÇ—_º°ví߬YsœÌLÙÙjž×ŒE¡P0ztgÜܹsç·o?"::ž;wâ9wîJe$å^_®\éÜ`ªF ÓÜ/këœ_Ë—/]ˆÏV¡K$|B!„BˆÄܼ“'÷dôè.lÜxŠåËÿâÑ£@óT•­¦fM34°¤AË玕‘‘•J= ¦îÜyÄ¥KÑìÝBLÌÿ¶W®\kkSÞy''Ê ¥*S£†)––•00ÃØ…(®$|B!„BIYYjRRÒIIÉ$=]ErrÎ?gd¨(S¦>W¯fáà†©im—ª“Ê—/ͧŸvä£Ú³uë9–-;ÌíÛQ(ôP«Õdg«©RÅø¥c”.m@:U¨S§ÊsÏÈÈâæÍ8nÞ|ÈíÛ¸yó!·n=äðáPnÞ|Hjj&zXYUÂÚÚŒš5Ͱ±ÉùµfMsllÌ04ÔÏ÷ç/„(<> !„B!tÒåËw™8чääLôô$'§“ž®"-MEzz&ÙÙ/nšmbâBr²Z‚§<04ÔgÀ€–xyµ`ÿþ‹,[v‹£°°xyøô*¥K`k[[ÛªÏ}<..ù¿ÁÔCnÞ|HTTáá÷Ø·/„ØØœ-}úú9ÁÔ“@êŸÁ”µµ)¥JÉÇZ!tü[*„B!„ÐIuëZtëµîÑÓS VkHH8€£ãûTYñ“­&99‡¬XñNž¼ÊœáêÕTªljȼffå13+³³õ3¥¤dÇõ눊ŠãƯ ¦rVaYP«–9Õ«WB¡PHÝBˆ×£Ðhž×ZN!„B!´oîÜ]üúë1TªìW^«§§@__¶mm9tèuê˜3aB§½úI¥R³sçUþøã+Ö¤I“$$¤‘šš³=199ƒôôœ¦ã/òÍ7 Þ¾«~µçS7nÄqíZÌûW‘‘!µkW¡ví*Ô­›JÕ®]…ZµÌ)[¶”–Ÿ%J€¬|B!„Bè¤7–¦B¥zq0òOj5(Ž ÃÀ ¥ 4xÒh4yZY“‘‘MéÒÚéYdh¨G·n5Ù²¥2iiYœ>ùÚctîÜ *{;åÊ•¦aC+6´zæ±øø®_åÚµÿ})•Aܺõ¬,5 …KKêÔÉ ¦êÔ± NsêÔ± jÕŠZx6B> !„B!tR•*Ƭ[wü5îÈ ƒÌÍ+pùò/˜š~öÌg––EÕªåÞª¶û÷S¸x1–®]k¾ôº¬,5¾¾a|ðýs?p '§ª˜›—}íùË”1 bÅÒ¯¼¶B…RÄÄüʧŸ.eÏžh4 YYy ôjÕª‚ÙkÕ¦m•*•£iÓš4múô{£ResóæC®^áúõX®_åüù[lÛÈãÇ©—ÁÖ¶*õëçô©ªW¯*¶¶XXH(%ÄÛmwB!„B£Resðà%¾ùf'ÑÑ /Ýö„>U«VdÛ¶QØØXb``Š)††fXPªTUÔêt>ÜLVVÂ×Vª”%¦¦ž$$$-íòK¯-SÆ“îÜ¿ÿ3MÖ3—-ÛŠ»òè‘’ŒŒ›y®ÁÀÀSÓþèé‘™yŸ¬¬Tª8²²’•õµ:ã™{6mÚ„ƒC>þx·oÇ“•õò­Œ††úŒÙ©S]ó\WQ—LDÄ}""bˆˆ¸GDD áá÷r·ðU¬X67ˆª_¿¶¶ØÚV£J• Z®\ˆ"!@Â'!„B!„ΈŒ|€·÷i|}ÏŸJË–µð÷¿ŽZýò-úúŠÿ®Z©Æõë±ÄÅ%åþ\¡€¬¬œûÇŒ±§ví7?ÁíâÅG¬YÀ¸q°±yyø°lÙE"#“6¬¦Ï<~ï^* œÀÝ݆Ž-ó\Ëõë‰üøã% h4äžX¡‚!Õª•åwÊcaQK˲¸º¶ÇÖ¶6ii™L›æÇæÍgr´¿ÈСm<¸5 ä½®âäáÃdÂÂîqõj W®äü~ŸøøœPÊÄ$'”zòU¿¾% Zbl\rûŒ ñ> !„B!´+##‹={.°i“?§OGbiiBÿþ-èß¿9VV•øè£uìßñ¥!‰B††df>»ºrNEûý÷¼ûn½7®óÿþïS§nÍ­#2rFF†/¼>99{ûédffѽ»=ëÖ æFƒ­íTRRÒQ(ôîíÀÒ¥ý)S&o ±»ÂàÁ«_¸2¬T)²²²Q«s¶$V«VKKzöl‚•U%¾øâTª¬ç6t¯P¡ +qçNw%Ó?õï¿‚'®¡V«ÑÓS°dI¼¼š?sÝ?ä‡å®Ú20ЧlÙR¬Y3Œ¶mëæ©ÎŸþ“ùó÷¼2€ÒÓSP­š §NMÃÐ0羬,5K—àÇä®’Z¹r½z9äÞ›­ÆßÿJe0{÷†””FÓ¦5qww¢W¯&˜š–ÏS­%MFFáá÷ »Khè]ÂÂîrùòÝÜURÕ«WÂÎ.g•TÆV4n\5žÝ¢)D&á“B!„¢àÝ»—À† 'ñö>ÍãÇi¼÷^cnMëÖµ¹uëJe JeW¯Æ`mmЇ‡3NÔ­kÀ—øðõ<ùô¢P(^´èëë1hPK,è÷F5§¤dðᇿqêÔµ§¶µ•*eÀ¨Qøê«/¼÷Ñ£š4™‘{Ÿžž‚–-ë°uë³'ð8qOÏåOýLOO…BÃ×_»1bÄ»yªwòä-lÚtúÍÙ¬^ý\]›<óˆ¿ÿu>ùdäôË Ÿ±ñ³+µ '”;z4¥2ˆC‡BIOWÑ®-nnŽôèÑø…÷‰ÿy²J*'”Š&,ì^î*)“²4jTFªÓ¸ñ;4n\kkS …¶ËâMHø$„B!„(8þþ×Y·î8û÷_¤rår Üš>h¾¾»vãçDPÐMLMËÑ«—#}ú8áädý̇lµZC‹ßžž‚[ráÂmÂÂî’•õlØb` Ï»ïÖcýúáoÔg'66‰WóÌ©pzz –/ÿ€Þ½_xÿ† '™>Ýï© HOOAPÐìgNHKIÉ ^½)Ïíi¥P(pssdéÒþ/í/9+“†]˱cWž{’vvVìß?î…!F|| ®BOOÁž=ã^:ßii™<ÊŽÁüõW;ÛáææH·nö¯¬[üOjj&—/Gr‡Û\¼x‡«WcÈÊRcl\†F¬hÜøÜPÊÆÆ == ¤„ΓðI!„B‘¿RS3Ù¶-€õëOv—¦Mk2|x;:u²ãСPüüùûï+”.mHpww¢}ûz¼<$Z³æofÌPòé§©Zµ"‹ï'%%ã™P††úØÙUC©ü<Ï»ÿ)2òžžË‰Mznˆpôè$lm«¾p W×8þÖS’3gº1|xûg®ïÐa!÷Ÿ;–uëZ°aÃÇT¯^饵§¥eâáñaa÷ži"®P(([Ö#:0fLWJ—6xá8·o?ÊsÏ©JLLcß¾‹lßĉW122¤[·†¸»;Ñ¡CýÜ­~"ïÒÓU„†ÞåâÅÿR÷Q©²©PÁ{{«¬z‡ÚµÍe…”Ð5> !„B!òGTT6œä?Α¡ÂÝ݉¡CÛ’œœÁÖ­çØ½û™™YtèPŸ>}œéÞýõVŤ¤d°|ù_DáïqãºÍÁƒ—rW?èaaQ‘ýûÇ¿Q¢ÀÀ› ´ŠÔÔÌOzDF.~aXvçN<-Z|óL(¦§§ Q£êìÛ7þ™{¦MÛÆï¿û?÷Ô¹œ9sú@­]û!mÚÔyésxø0—¥ÄÄ<~êuéÖÍž–-k³pá^,,ŒY¼Ø‹V­j¿t¬·—Ì®]çÙ±#˜sçnP±bÞ{¯1îîN´jU[N~{ Y„…Ý%$äNn(ž8áädƒ““55pv¶¦R¥rÚ.Y”l> !„B!ÞN@À ~ùå/ ÅʪC†´¦eË::t‰mÛ‰ŽŽ§qãwðôlFïÞŽ˜™½Ycê;ƒ™4i+ffåùé§A88ÔàæÍ‡´k7Ÿ¬¬l ô(_Þˆ½{ÇaccöÚã¾|ù_,X°ç¹Û §NMÃÚúé†ÒÛ¶0fŒwžN¬;|ø+4°|é5QQq¼÷Þ÷$'§“•¥ÆÀ@Ÿãǧ`mmÊÝ» L™²•Ç/ãåÕœ3zcbRö•ó¾èèxvîP©²¹|ù.AA7 ºIpðM"#P«–9ŽŽÖ89ÕÀÉɆ ,eš(L> !„B!^ŸZ­áÀK¬Xq„€€4mZ“Áƒ[‘””†Ÿ_ ÁÁ·°´4ÁÃÃOÏf¹ÃßDbbS¦leûö`þóŸÖ|ýuï§¶ÓÍšµÕ«¡¯¯`ÿþ 4lhõFóüüóŸÌ›·½çGúú zõr`ùò!/§C‡…\½zŸç}Ò24ÔcüxÆŽíúÔÏoÝzHË–s_8¦žž[[ ¾ÿ~ M𼓧ç‹Ë²³5Œñ.³f¹?õøž=rûRÍšåNŸ>Îy÷mEF>@© bÇŽ ®]‹åw*ãîî„››ã+C5ñzâãS ºEpðÍÜP*11 ##Cìí«ãìl££5ÎÎÖXY½|K§oAÂ'!„B!DÞedd±eË9V­:ÊèܹÎÎÖß⯿Â(UÊW×&ôéãL›6uߺò… ·9r*–,éO§NvÏ\óøq*Ï`Ó¦‘´m[÷­æ{ô(…Å‹÷ñûï§P(Ï„P¥J0~|wÆŒéòÜû#"îӡ×̠ V-3NœxvåTÆӈO}új…‚Ò¥ ˜<¹'~Øî•}±þíĉ« ´Š9T¬øìê¦ÄÄ4æÍÛÍï¿ûÓ®- ö£F ÓçŒT0BC£Q*ƒØ¹3˜;wâ±µ­Š››#îîŽÔ¬i^hu”†k×b Î ¤¢¸råYYj,,Œqr²¦E‹Ú4o^{ûê¯ýûMˆðI!„Bñj ©lØp’µkÿ&))ŽëcddÈÑ£WHJJ§uë:xy5§{w{Ê•+/s®[wœÙ³wÒªUm~þyðK{8=x„¹y…>þº""îóé§ »û¯mx Ö¯ÿnÝìŸ{ߢEûøå—?_Ø»é‰?ÿœˆ]µ§~6lØZ E­Ö §§@­ÎéÕÔ·oS–.íÿÆÏ%/¯Í¹s7˜4i 7o>d„îŒÑ¡PƒFC@@;v³k×y>•+> m[Û|Ÿ#/¦O÷ãÀKøûOGOOÁÖ­|ñ…7wî,}nó˜)S¶‘ž®¢B#bc9s&’÷Þkœ{º[|| ööV̘áöÔý7èÝûG† iÃôé½(_>gÙàÁ«¹yó!‡EéÒù´œžL“&ùâïaÃÚ1iÒ{¹µ¶ÌÌ,Ž gûö`¼DffíÚÙâææ„‹K#Œ´RWIsï^§OGæRW®ÜG¡€zõªÒ²emš7¯E‹µ¨Z5ÿBhQ¬Hø$„B!„øŸˆˆû|ÿýÁÿ†NeÉÌT‘žžE‡õðôÌÙVWªTÁ Û¶0qâ7®ÎŠC´öAöÑ£š5›Ã´i®|øa»ÜŸ§§«Ø·ï"Ny+00Š^½–<ë•«Ã22²¿÷LCñ{÷èØq!ƒ·fúô^¯÷dÞF£Á×÷sæì¤LCæÏïK×® eîIMÍäСP”Ê Ž G¡€Nìpww¢k׆²%¬%$¤æQgÏFr•*›š5Íi×®.íÚÙÒ¦MÝ?EQ> !„B!rB§ùó÷rðà%J—Ö'==‹:uªàåÕ<ß·Õý›Z­aþü=üòËŸ|öY'&Oî©ÕFÇß_=ƹs3ÞºÕµk±´o?ÿ¹=ž^Çï¿û3eÊVvî‹£cám…{ø0™Ù³w°uk={6aî\ý½W‰‰iìÝÂöíÁœçˤ§«hÚt6C†´aâÄo=^\\2ÍÖ­£hݺΣÑhðòZɃ‰80¡ÀVŸ½È±cW˜ !„BQRÄÅ%³rå¼½ýIHH£T)}zôhÌÔ©®¼óNåB­åÔ©kŒ±+«J¬_?œjÕL uþçQ«5´m;¶më²h‘g¾kk;™Ù³Ý0 å[µnÝ fÍÚÎÞ½ãhØÐ*ª{}aawùê+_.^¼ÃgŸubìØ®:ÙoéÚµXvìB© "2ò5j˜âî›#vv–Ú.¯ÄÒh4„‡ßçĉœ0Êßÿ:))ØØ˜Ñ½»=;7 eËÚZÝz+ò„OB!„Bg*U6ýÆúõ'8~<µZCÅŠe1¢=cÇvEO¯ð?àùøœeâD_zôhÄ÷ß L™R…^ÃóìÜyžÏ>û?Nœ˜ŠY¾Û²å\† iÍgŸuzë±Ôj }úüLJJ{÷ŽÓZo#µZúuÇY¸p/ææÆ,\ØWk'æÅ¥KÑ(•ìÜyžèèxêÕ«Š››#îîNùú^‹×§Ret“#GÂ8|ø2—/ßÅØØˆìèÖ­!:ÙIãò¢OÂ'!„B!Š£°°{øøœaÛ¶=JA¡PP¹r9fÎt£Og­m?Z¶ì‹ícüønŒß]§¶A½÷Þ÷XZš°fͰ|·{÷%´o_iÓ\óe¼7йób>ÿ¼ ãÆuË—1ßÔ½{ LºƒD\ IDATCñôlÆŒ½©T©œVkzFùs7ر#˜]»Î—ŒƒC ÜÜéÝÛA'Và•twîÄsøðeºÄ©S×ÈÊRÓ´© ]»6¤k׆ԭk¡íÅë“ðI!„Bˆâ"!!¥2Ÿs„„ܦR¥r¤¦fR¦Œ!_}åÂàÁ­µ¶R&;[Í×_û±q£? ôeРVZ©ãENºFß¾¿°k×ùÞ{ÊËk5j˜²xqþmå[µê(óçïáÀ Ô«W5߯}Sûö]dÚ´m¨TÙÌœé¦õÆñy‘­æÄ‰«lßľ}INN§E‹ZôîíH¯^T®¬»!ZI‘’’ÁßGpøðeåÁƒ$llÌþD5 E‹Úr²aÑ á“B!„EYv¶š£G¯àë{–.ah¨OãÆÕ¹z5–äätFŽìÀ§ŸvÂØØHk5fdd1jÔFþú+Œ•+‡Ð­›½Öjy‘ÁƒW“––ɶm£ó}ìO>Ù@v¶†_šocfg«qwÿ µZÍÎcÑ××~œ¤¤tæÏßÍÿýß)Ú´©ËÂ…ýŠÌ–¶ÌÌ,þú+Œ;‚9x0”¬¬lÚ¶­‹»»..¨PA{ÿþˆjµ† nsðà%¾LhhtîöF`àÌ|;+K«ëâç7==ÝiàÇĉ[8uê*ÿùO[&O~¯Èna‹Mb×®`vì8O``&&eéÙ³1δhQKç^û’*11ýû/±gÏŽ §T)zôh„‡‡3íÛÛêÄÕHÂ'!„B!tQLÌc¼½Ï°eË9¢¢âhÜø¼¼šáááLùòFlØp‚Å‹÷S¾|i¦Oï…››£Îœwûö#úõ[N… FlÞü ¦¦åµ]Ò -Yr€uëŽ0³ÀVGøøœeêÔm\¿¾°@Æ »‹‹ËR¾þº7}Ô¾@æx†­[˜={¥J0oÞû¸¸4ÒvYoåöíGìÜŒRÄåËw©VÍwwG<<œ±··Òvyâ¿RÙµë !„B¡+23³8p྾g9zô *áéÙ /¯ØÙUrNe›>Ýë×cù䓎ŒÓ…råJk¹òÿ‰ŠŠ£_¿å˜š–góæO01)«í’^H¥Ê¦yó9xy5gòäž6Ï—6l-QQ‹)UÊ @æøî»ý¬\y„Ç¿ÒÙ&ߥ0{ö¶n ÀÅÅž¹sûP­š‰¶Ëzk÷Q*ƒØ¾=ˆ›7R·®îîNxx8éì{QEGdzcG0Û¶v—:uªàåÕœ~ýšS¥Jm—WÜIø$„B!„¶…„ÜÆÇçJe IIétèPOÏætïnŸVÄÄØ^»K¿~Ë©^½›6Ôê {y±cG0Ÿþ;þþÓ±²ªT`óœ=‰»ûOÏÆÂ¸@æP©²qqYBåÊåðõýLgVÁ=ωLš´•ØØD&NìÁ°aíŠTCòÑh4ÝB© dçÎ`ââ’qr²ÆÝ݉޽%àÐ!aa÷Ø´É?¿@RR2èÔÉŽþý[Щ“ôñ*> !„B¡ ©(•üþûé§þ/|ß¾M±°ø_$µZÆ 'X¸p/•+—göl÷9‘ím…‡ßÃËkµj™³qãÊ—×ÕX/Ò«×T«fÂêÕC tž«Wcx÷Ý=:©@›®‡„ÜÆÕõ¾ýö}>ø uÍ“ÒÓUüüóŸüôÓaêׯÆÂ…ýpp¨¡í²òMv¶šãÇ#P*ƒØ¿ÿ"©©™´m[ww'zôh¬óÁlIñïÕ¦•*•eÀ€–|ðAkªW/¸@º’ðI!„BˆÂ’­æèÑ+øúžåÀKêãêÚ„Áƒ[áìlóÌõ—/ßeâD_.^¼Ã'Ÿtdܸn:yjSdäÜÜ~Äή6|D™2ºÄùÅ‹wèÞ} [·Ž¢uë‚mÒ›„ƒÃ ¶mM«Vµ t®o¿Ý͆ '8rdR®æÊ/ׯÇ2iÒNŸ¾ÎСm™8ñ½b̤§«8t(¥2ˆ¿þ C¡€.]âááD—. l+¦x=÷ï?ÆÛû4¿ÿîσItîÜ€¡CÛо}=i&ÿö$|B!„¢ ]»‹ÏY¶n 66‘-jáåÕW×&Ïí×”––É’%X½ú(ŽŽÖ,\Øúõ«i¡òW»s'7·±²ª„Ï'E"x;Ö›K—îðçŸ |.•*kë/ùí· ¼ÑvFF]».ÆÊªÞÞ#uzûÝO’Ï™³=æÌñ W/m—U ÓØ³çJe§N]£|ùÒôèј>}œiÝºŽœÄ¦²²Ô>…¹sw³yó:v¬Ï·ß¾µµ©¶Ë*011Ù±ã}œ mÞütóæC¦NÝÊÑ£Wèß¿_Ý+Onq Vk8uêJe{ö\ 99–-kÓ§3={6¦bÅ’ñ:è"FÃá×Yºô!!wèÖ­!_~éBÆVÚ.MWIø$„B!Äë ŒÂ×÷»v'))êáéÙœîÝí_ëÔª€€ŒãMrr:óæõÅÕµIV?4 Ÿ¾‰Ã‡CQ*ÇÉ-'£Fm$**Ž={Æê¼#F¬`õê¡…:ï´iÛØ±#˜£G'ë|°ù2;wžgæL%YYjfÌèMß¾M‹D3õü’™™ÅŸ†¡TrøðeÔj ;ÖÇÃÉnÝìuòÌ’àIõÝwû¹t){&Mz[ÛªÚ.M×Hø$„B!Ä«ÄÄ""î3xp+¾ü²•+—ÓviºBÂ'!„B!ž'=]ÅÁƒ—زå\î¶:g¼¼šÑ¸ñ;o4fTTŸþ;¡¡wùúëÞ Ú¦È¬ÞØ°á$S§n+Ò[¸V¯>Æwßí#8x6åÊ•.Ô¹çÏßÑ#a<øe¡Î pìØ\ŪUÿ)+ì^åüù[LœèË•+÷ù䓎ŒÓ¥ÐßO]ñàA»v團t SÓrôê倇‡ÎÎ6EæÏ—âB­Öàë{–… ÷’–¦â‹/º1|x»bß0?$|B!„⟣ðñ9ËÎÁ¤¤d¾ñ¶ºóõ=ÇôéÛ°¶6ã—_©mGŽ„3dȯ|ù¥ cÇvÕv9oìÝwЪUm,èWès¯Xq„uëŽsöìŒBŸ`ºıc“©T©è¯ÆÈÊR³aà /ÞOùò¥™1ÃÞ½´]–Vݼù¥2íÛƒ‰ˆ¸O¦¸»;âááL½zEçÏ›â %%ƒŸþ“U«ŽR­š ö+’«Eó‘„OB!„Bü{[]5¼¼Zàææˆ……ñ[––ÉÔ©Ûðõ=ÇÇ·gêT×· ± [XØ=<<~¤K—†üôÓ "»’âìÙHÜÝâÀ Z9™jóæ3|ýµ’«Wúܳe­cÇ…´n]‡Ÿ~¤• B\\2óæíÆÇç,­[׿Ûoß/RÁnA F© bûö îÞMÀÎÎ’>}œpwwÂʪ’¶Ë+1¢£ãùúk%\ÂÓ³3gº•˜†ùÿ"á“B!„(™ÒÓUìÝ–-ç8qâj¾l«û·k×b1b=wï&ðÃpqi”/ã–’pqYJíÚælÚ4²Ho?~3¡¡Ñ80A+óïÝÂG­ãÖ­%ZëÉsøðe† ù• >¢k׆Z©¡ ÞdÚ´m\¾Íðáí7®;ÆÆFÚ.KëÔj gÏF²}{;wžçñã4š5«‰‡‡½z9HO¢B²woÓ¦ù¡V«ùæ›>%q•ž„OB!„¢dù綺´4:Ô§oߦo½­îßüü™4i uêTaÕªÿP£†i¾]Tªl<=—“ÈþýŠôù´´Lf2qb†o¯•Nœ¸Š§çrBCçjuÛÛçŸoâĉ«=:‘Š‹× µZƒ·÷i,؃¡¡>S§º–¸Sñ^F¥ÊæèÑp”Ê ¼„J•Í»ïÖÃÝ݉îÝíKl߬’˜˜ÆÜ¹»Ø´é4^^ÍùöÛ>”)SJÛe Ÿ„B!DñÏöíAÏl«ëÓÇ9ߟW©²™5k;ëÖ`ذv̜ٻHm³{bæÌíüþ»?»w]5m—óV¶obìXogåûûW!!·qqYÊ©SÓ°±1ÓJ ©tè°€N°ti­ÕQâãSX´h7žÂÙÙ†o¿}{{+m—¥SRR28pàÛ·qìØ õéÖÍ':t¨_¤W9êºC‡B7î*W.ǪUC‹üŸ¯y$á“B!„(žžl«óñ9ËÉ“W16.“ïÛêþíÑ£FŽ\Opð-–.íOïÞŽ2OAS*ƒ5j#+V ÁÍ­h>‡4húlØð‘ÖjˆŠŠ£uëoµÖsêŸöí»ÈG­ÃÛ{$ï¾[O«µ¤K—¢™2e+çÏßâƒZ1iÒ{ÅnµW~xô(å¿'æqîÜ *V,CïÞ¸»;Ѽy-ôôdåX~»ÿ1£Fm$(è& ôÃË«¹¶K*h> !„BˆâåßÛê:u²ÃË«9:Ùè ¤Ë—ï2lØZÖ­Nƒ–6WA »‹«ë2>ø ³f¹k»œ·“HÓ¦³Y¾üzõÒ^Ÿ•GR°·ŸŽ¯ïg:qêÕ'Ÿl 0ð&GŽL¢|ùâ»ÝJ£Ñ°eKóæí"+KÍ”)=0 ¥*/ðd•¨Ÿ_aaw±´4ÁÝÝ '6”Õcù);[ÍâÅûøñÇÃ|ñE7¾úÊ¥8o•ðI!„B}ÑÑñøúžcÛ¶"#趺çÙ¹ó<ãÇÿƒC V¯Zd›ø&&¦áâ²”ªU+âëû™Öcç§+Žðㇹpa¶V·?ªTÙX[ÉÚµÒ£‡öÏÇÅ%Ó¡ÃzölÂÂ…ý´]NKLLcÉ’¬[w{ûêÌÛ''km—¥Ó®\¹RˆRÄíÛ°µ­Š‡GΉyÖÖE«‡.óñ9Ëĉ¾ôêåÀÒ¥ý‹ä6í<ðI!„BM™™Yì߉M›ü9yò*•+—£woG<= n[Ýó,[vˆE‹ö1thfÍr/Ò½R† [Ë… ·9xðK­õFÊo;/¦iSXêԙķ߾¯3[lvìæ³Ï6²uë(Zµª­ír^Û Aƒðöö~­{ L©X±#n-ˆ²ŠŒM›61pàÀW^§Ñh ŒB© b×®ó<|˜‚“S <<œéÕËsó ¹×z{{3hР‚,»HzUìrüx¼k6nü¸HÿwäŠe¤&„B!Н‹ï°yóY”Ê@’’Ò騱>kÖ £sç…úöìl5Ó¦mcÓ¦Ó|ûíû Ú¦Ðæ.›7ŸáСP|}?+6ÁShh4aawY¸°¯¶K B…2$&¦i»Œ\nnŽìÜÌ„ ›9|ø+Ê–-z'o²iӦ׾/--‹2e<  ¢¢ÁÓ3ïÏ]¡PдiMš6­ÉìÙ?RÈ‚{˜9s;íÚÙâîîôÔŠ>__ß‚(»Èñööfûöí¯¼®];[¶lE¿~¿0zôï,_þúúEåé?Iø$„B!t^BB*Je >>ç ¹M:U5ª}û6Å¢b¡×“ž®âÓOÿcÇ®ðë¯CqqÑþ6ª·qûö#fÌP2bÄ»´n]GÛåä›­[¨YÓggm—@ÅŠeHLL×vO™7ï}:tXÄ‚{˜3ÇCÛå¼¶~ýúѯŸöWµ•ztìXŸŽ듞®âàÁK(•ALœèËäÉ[°µ-¡¡…¼'ÿ¥R©ò>4jTß~ÎüÊ´iÛ˜?¿o±ê%á“B!„ÐIjµ†“'¯âí}š}û.bh¨«kfÍr£E‹ZZûKy|| C†¬áúõX||>¥Y³šZ©#¿¨ÕÆûƒêÕ+3yrOm—“o4 »w_ÀÓ³™Î|€«PÁH§V>XXTdÖ,7&LØŒ«kš7¯¥í’DaddHïÞŽôîíHBB*{÷†°bÅ^ôôŠÞ :]ѺuV¬ø€áÃ×al\†©S]µ]R¾‘ðI!„Bè”;wâùãÓøúž#::ggæÏŸÞ½)WN»§rÅÄ<¦_¿å¤§«Ø±c uëZhµžü°zõ1λÁž=ãŠU£Û  [DGÇãꪽîþÍØX÷Â'/¯æìÚuž/¿ôáС¯(]ºøü>…ÃĤ,¶"9qâ¶¶Ë)Òºu³gÙ²|þù&LLÊòÙg´]R¾?U„B!„Ö¥§«Ø»7Ÿ³œ`áÂ=Œ× {ûâuŒú®]ÁÔ©S;»jÚ.%—±±nõ|ú§Å‹=éÐa!‹ïcúô^Ú.Gˆ­OgâãS˜1c;•+—£ÿÚ.é­Iø$„B!´&$ä6>>çØ¶-€´´L:u²cíÚéÔÉN§Nûùgð´eË(ªT©ðê›tœF£aÂ„ÍØÚVeôè.Ú.'_=Ùr§kØŒËpãÆm—ñ\Õª™0}z/¦NÝFÏžMpt¬¡í’„(цoOLL"_}å‹•U%Úµ³ÕvIoEÂ'!„BQ¨RÙ¶-oïÓ„…Ý£N*|þyg<=›?ud·®(ŽÁÀÆþF±wïx Š×©JAA7¹{7W×&Ú.å)ÆÆexüX7W> ÜŠ]».0~ü<ø¥NÀB”DS¦ôäîÝ>þxJåZÉùºŠ×e„B!„NR«5üùg#GnÀÁa& ìÅÁÁš]»Æò÷ßS5ª³O…èÞ½¾ývŸ|Ò±Øm·عó=Q£†)S§ºò㇠)>£ÃÃÃY¹r¥¶Ëx¡åË—ceeÅðáÃiÔ¨žžždff>s]RR3fÌÐB…ù¯°Þ“>úˆ7nðøñcÖ®]›ûϳfÍzî=ºô:ê³f͇˜˜”aðàÕ¤¤dh»¤7"á“B!„ÈWéé*üüé×ïÚ´™‡·÷ÜÝøûï)øùÆË«¹ÖO­{•´´L† [CBB›7R¬‚§½{C8|ø2K–xËSÍ¢¸w/A§N¹{¢(„OC‡¶¡Y³šŒ÷*U¶¶Ë)öbbbøâ‹/صkÁÁÁܸqƒ–/_®íÒŠ…ýû÷óøñclll¸r劖+z}ÆÆFüöÛpbc“5êw²³ÕÚ.éµIø$„B!òÅ… ·™8чŒ÷å˱~ýpf0mš«ÎœZ÷*ÙÙj>ýt#1x{¤Z5m—”oRR2˜9s;ýú5¥eËÚÚ.§@ìÛ‚­mUêÕ«ªíRžal\†¬,5©©Ï®hÑ% …‚%KúsóæÃbµýN­V3fÌŒ©R¥ óçÏàáÇtéÒ…¥K—bii‰¹¹9¿ýö_~ù%æææT«VÍ›7çŽ3}útÌÍÍ)]º4;v|j›ÜË»xñ"mÚ´ÁÈÈ[[[¼½½ fÍštèÐ\\\ }ásY³f ÖÖÖ”+WŽaÆ¡V½0òç=‰ŠŠ¢cÇŽOëååÅ™3gðòò"66///Ž?NLL ½zåý4G]z­­MÙ°á#Ž`Ö¬Z«ãMIø$„B!ÞX\\2«W£sçEôè±”3g"?Þ…ÀÀY¬[7œ®]¢¯_tþÊ©Ñh˜Zǃ¯át„OB!„â…ÒÒ2ññ9KŸ>?óÿìÝy\Íù÷ðWËmÑf«ÐP¤HY*”R¡J1Æöe,cÉ0˜1 c²Î0c™SÚ³¤dì"m–DJÈ’”öõÖíÞûû£_Í0´Ün÷sïí<ïwºÝÏçUÝÏ­{îûœ·µõ&ÀÓsnÞ\[?<\YYé˜-vçÎ |ýu .´‡»»9Óq„îìÙ{ˆ}Š­['KTds]ºôööFbû5þ³ò‰Íp’¦ÓÓëŒÕ«¥£ý.//ï½ÿÎÍÍEÇŽ›u >Ÿ]»v!??ÁÁÁ`³Ù˜4iR£·©««ÃÖÖ™™™ïýûå—_PSSƒQ£F¡}ûöxüø1¦OŸ.œ/Xãgò1ååå->†8“““ÅÁƒ3 ¤ÄÂÿþ÷»D¬LÏgeB!„¨¤¤L¬ZSÓõXµ*ššjøóÏÿ!1ñ{¬^=zz™Ž(4ÙÙE˜3ç8†ïƒ5kÆ1G說j°ys¦LSÓLÇi5%%lÄÇ?‡ƒƒø®ZSQQ„œœ,JK%§øÔ¶ß™šêJ|û]ff&""" ~³³s³Ž±}ûvØÙÙA^^C‡ÅŒ3ðæÍ›FosttÄ7šš  v®“¹¹9ÂÃÃqîÜ9dggã믿FNNN}aª  pêÔ)¤¤¤ëÛ V„ñ3a±X(..®ÿ~ÅÅÅ!##£ÙY$íû¬®®„ãÇg#5õ Ö¯g:N£¨øD!„Bü3<|Ĉm˜0a/’’2뇇>üÄwE‰ *+«1kÖ1tìØN«¶ aùí·kÈÏ/ÃêÕÍ{A'i®]{ 1¢/ÃI¦®®ŒâbÉh»«#++_ß©xöìöï¿ÈtYZZÂÇÇ#FŒ€¡¡!tuu1oÞ¼fã‹/¾À«W¯0`À8::ÂÃÛ6mjô6lÚ´ –––ptt„¡¡!LLLàéé‰ÄÄD¼zõ ½zõBÏž=ëÿ}ÿý÷€eË–áÔ©SÂýfˆ aüLzöì ˜™™ÁÕÕ+V¬€µµuýíZZZX¼x1’’’<Ž$~Ÿ »`ÏoüñÇ-œ>}—é8 ’áóù|¦CB!„fp¹<\¾œ ÿÛ¸|9ÊÊ,¸¸˜bÚ´a8°;ÓñZÝüùàÖ­ DEùà³Ï:0GèrsKak»_~9Ë—f:N«úê+?¼}[„ààELGiаa?búôaX´Èé(ÍväÈulÚtçÏûÀȨÓq0mÚ4€ŸŸ_“ïÃf³ ˜™™ tÞªª*ÄÇǃÍfcàÀÐÒÒjÒm••…‡BGGÆÆÌíÊ(##???x{{ õ¸þþþ˜6mšSfÆÏ¤¦¦·oßP[Ðú÷¼¬wïÞáîÝ»2d444PXXˆN: tžæäû!ˆõëO! ÑÑ+ÄuerâÇ'˜B!„©–‘‘‹ÀÀx„„$"7·VVúðõõ‚³ó()5G ItäÈuœ?ÿ!!‹¤²ð;vDB]] Œd:J«ªÝñ||œ˜ŽÒ(55%‰[ùTgöl[DDÜÇ’%þˆŒ\KŽéHͦ¤¤„‘#[v=(**ÂÖÖ¶Ù·€ŽŽtttZt~i#ŒŸ‰¼¼z›¦¦&Fþ§ø.ªÂ“(}÷ÝÄÇ?Ãüù "b™X^›ÒµnšB!„|RyyUýððá÷âÔ©;ðö¶ÀÍ›k¼îîæm¦ð”˜ø›6Á·ßNÀ!=™ŽÓ*?ÎF``<¾ýv¼Ôÿ\ïÞ}¢¢ ‰Ø¥PCCYbv»ûP]ûÝÓ§¹Ý~Gˆ´a±äpøðxñ"?üpšé8E+Ÿ!„B¤\RR&üünãìÙ{àp¸pr2Á‰ó0rd_ÈÊJߌ£Æäç—aþü?áäd‚ÿýo8ÓqZÍŽQèׯ\]M™ŽÒênÞÌ@ĵÝä=jjʵÛ݇zöÔÄ7ß8cË–Œ;FF]™ŽDУG'ìÜé‰/¿ü663¦?Ó‘ÞCÅ'B!„)ôî])‚‚⌌\uÅêÕΘ4i0Ú·oÇt<Æp¹<,Zô”•YصkªT€»w_"::ý5Oj¿Æ»yó ll ˜ŽÑ$Êx÷®”é-2wîpœ;—ŒåËO""bäå©¡†q0a ܼù>>03Óƒ––Ó‘êѳ!„Bˆ”àp¸ˆŽNÁ¬YG1xðØ¿ÿlmûàüy\º´ sæ oÓ…'ؽ; ÏñÛo³ ¦¦ÄtœV³}{$†퉑#Å{ç7a¨ªªABÂsX[KFñIMMI¢W>€œœ,öîõBzú[8@íw„ˆ“ &¢S'U¬\Èt”÷ÐÊ'B!„ W7<<((ùùe°¶6hsÃÛ"6ö)öí»ˆŸ~ò”êV¡[·2pýzNúŠé("‘ðUU5S|RWWFi©dÎ|ú··ß99õ—êkŠI¢¤ÄÂÞ½Þpu݇€€8LjÁt$T|"„B‘HååU8sæ.üýã”” ˜>}¼¼,¥vç¶–(.®À’%~7n<=‡2§UmÝz#GöÅС½˜Ž"7o>¡a±j/iˆªªÊʪ˜Ž!sçGDÄ}j¿#D̘™ébáB{¬_ ¶¶†ÐÑaþï*>B!„H>Ÿ¸¸g ŒGDÄ}p8\ŒÛ«V…µµA›ÞTß| ؾ} ÃIZ×Å‹pçÎ œ?ïÃt‘¹y3ÖÖ½™ŽÑdªªŠR±ò ¨m¿óõõ¨Q;ñóÏ—±d‰#Ó‘ˆˆTVV£ªªÅÅ•`³9`³9()©Drr”” œ77s*H2èë¯ÇàâŇX¾<_2>ÿŠO„B!b.'§!!‰õÃà 莵kÇÁÍͼÍÏpjŠÀÀxœ;—Œ  …ÐÐÞïŸÏǶmç0nÜôïÿÓqD¢¬¬ ÷ï¿Ä‚#™ŽÒdjjÒ³ò z÷ÖªUÎØ¾=NN&èÓ§ Ó‘ˆüþûM>|Ê`³«QZÊ›ÍAUU **ª¼o‡ã §×™ O c±ä°oß48;ûâĉX̘aÅhz4B!„ˆ¡ºáá3fü†Áƒ7âàÁ˰µíƒèè8Þ³fÙRá© 23ó°n].´Ç°aúLÇiUgÏÞCZÚ[¬\9–é("÷ \.O¢~¶**Šàñø(/—žÔ¼y#пÿgX¾ü$jjxLÇ!B §× /^ä!9ùÒÓs]ŒÂŠ O²²2PU•Ç»w¿cÈžÍ:ßÛ·Å-\/44Qàû&%e -‡806ÖÁâÅز%‚ñ]6iå!„BˆIO ÿÛ KBAA9¬­ pðàç3Æ ô§[sp¹<,[v½{kãë¯Ç0§UÕÔð°sçyLšdm¦ãˆÌ­[OЯ_7‰*Ī«×î²XVVE†Ó“íwþþþàp8";_[1|xtíÚÙÙEMú|yyYëÀÍ­æÏ/‚‡‡G£÷áñd•¥Šw£Sm튖ÆFy9 vB`à©Ž’ôí[…–Rƒƒƒ[|Œ–Z²dÂÃïà‡NãÀéŒå ¿`!„BVRÂÆ™3w¤¤LôèÑ ³fÙÂÃcˆX •TGŽ\ǽ{/½,–ÓqZUhh"^¾Ì‡Ÿß<¦£ˆTBB&† “œyO@íÀqRµò ¨m¿[¹r,vìˆYû……ž4eÊôèÑã“·ËÊÊ`æLkìÜÕèj6YY8:ãçŸ?Gbb¦Lix¶^y9 99*ÈÉQ—[ÛŒ¥¥Õò¤¥uDuµ*+å ¬Ìmöý;ubãõk5ÄÇwEŸ>ÐÔlÙ|¶Æ¾¢ ¨(mÛ&cêÔC˜:u(ll É!ÃçóùŒœ™B!¤ û÷ððÓ§ïœkwb£áá-÷üù;88ìIJe£¥~2LJÍØÙõÁ–-“™Ž#2††«±g7\]M™ŽÓd/_æÃÒòGDEù`àÀîLÇ*.——½€3g–BNަ¼H²ÜÜR˜›o—ûéⓌŒ æÌŽ \ü½ÅfspæÌ=?ƒû÷_‚Å’‡S[ Y+«–‘³² 1dÈF€¯¯—@;›òù|®Ayyddd0z´1vìð€¦¦dì¦Ù… O 9ù._^ÅÄJêDz6 „B¡œœbìÝû7¬­·ÀÝýRS³±n îÝÛˆ¦ÃÖÖ O-Äåò°téIuÅ¢EöLÇiuçÎÝÇë×øòKɺ- ©©oPUUƒAƒ>½zCÕ­|’¦¡ãuêÚï=zƒÃ‡¯2‡(+«¾¾0gÎ188A^þ¿+Gedd ++ƒ'bãÆ‰Ÿü½•žþëÖ…£ÿï±|ùIè222ðð K|>—.=‚­íVœ9sO(™´aÃDäå•áàÁËŒœŸÚî!„BZ‡ÃÅùó«WÓ ¦¦„É“ÃËËFF]™Ž'u޹ŽääWˆŽ^Ñ&V^üüóeŒ?=ztb:ŠH%%½@§NªÐÕ•¬¯[UµvÎSy9›á$­Ãа V®‹;£ààÐv¿“ååUˆˆ¸  xÄÅ=CÇŽ*pu5ƒ¥e/\¸ðè½Ï•““œœš1cúÿçXUU5ˆˆ¨]åtç΋÷V9ý»ñŠÇãcƉBÉ_PP?¿ØúóÄĤ |¬±cûãøñjçé•–²±`ÁŸ8{ö¶nŒÎU…’YÔ´´Ô°jÕXlÝzÓ¦ ƒ––hWsQñ‰B!¤•¤¦f#00aaI(,¬€]üüóçpr¢áá­%33Û·GÂÇÇ©M¼è‰IGròküô“'ÓQDîÞ½—03Óe:F³)(ÈCAA¥¥ÒY|€ùóípîÜ}øøœ¤ö;1Æãñqóæ' *ê8.ìípôèlØÛÅ’ÇG×®õƒÇååå ªª€¿þšÿŸë/##ÇŽ]GHH**þYÙWWú7yyYÌ™3zz…òµ?~\î?…­7oŠðöm1ºtÑhö±,-õ¡ªª„²²Úk´®`‚›7Ó±c‡'Æ(”Ü¢öùçV8vìvîŒÂÎ…&z „B¢’6þú+cÇÃ\¸ð³fÙâöíïpâĤö;q”‘‘‹;¢`a± žž¿ ==k׎ý{?àØ±Ùpr2©ß¤¡nð8P[0êÖM‘‘>-üž?ÿ¿ÿ~eelðx|ðx/-##ƒví±|ùh¡|=ååUøí·k¨©ù§È%++ƒÛ·k½“——…³sÿÿ´ÖÔpQ\ÌÆüù`þü?PPPÞ¢ÜL`±äðÝw‡´´·"=7ýåC!„ÒB|>·n=ÅÉ“·™  vxø÷ß»ÂÒ²ddh†“(„†&âæÍ'8sf)äå¥ÿ=Ö””,\»–†ELG¹ââ <{öƒë1E ªªJR½ò úôé'ìÜ…Ñ£Mл·Ó‘Ú´¢¢ DDܯßUU[[“'†‡Çh7x_OO lÝz]º´Çùó+о}»~ÞâÅxýº~~·R|ó3ÔÕ•[ô5Õ ˆCyyõ{“““E\Ü3Lœh&Ð1ÇŽ€àà„ÿ|¼nTTÔÄĤ㧟¦bìØÿ¶г1cúcð`=lÚtý%ºR©øD!„" ¬¬B% 88™™y05íÝàâb uu%¦ãµ)……娰á4f̰†©©d  Ôaf¦+´a½’äþýW Ñ+Ÿ¤½ø Ú#:ú–/?‰S§¾¢ö;ãry¸z5 AAñˆŽN¬¬ œ`Å 'ØÚ6ùç¡¥¥†]»<áî>ŠŠ —6ož„¬¬"\»–öÞJ¤:²²2ÐÕí„Ï?·èkúPM \úO±‹ÃáâÆ Áç>ÑŠŠ,°ÙœOœ—‹¢¢JÌ™s ®®¦ðõõ‚’Kàó‰Úúõ®7nnÜH‡­­¡HÎIÅ'B!„f¨®®Att ãqõêctì¨wwsxzZÐðpmÚt,–V¯vf:ŠHdfæáܹd>üÓQ‘˜˜‰^½4¡¡ññâ®vžŒô¶ÝÕ‘—¯m¿srڅǯ¶™vX¦ÕÍ ¿ƒ¼¼2XXôÂæÍî˜0Að7F¼¼,›ôyrr²øõ×/0qâ~¤¦fÿ§Åãñ±i“»ÐV§†‡'áÝ»ÒÞöüy ËÑ¡ƒJ³«¤ÄÂÈ‘F¸p!å“«¸äädPSÇ]_‰*<À A=àâ2?ýtžŠO„B!â$55~~± KBi)vv}pèÐïÍÆ ̈}ŠÀÀx92 jjmcÅÙ¡CW §×ù£;MµÉɯ%z…›ºº’Ôîv÷!j¿¼¼2„…%!$$))YÐÕí„éÓ‡aÊ”!BêÝT?ÿ|²²€¶¶:rrJê Pòò²6¬7ìí„r>Ÿ½{ÿnè3ÿNN&ßÙ¹?¢£|ô6yy9ôèÑGŽÌBß¾’ùÆÓŠc`g·Md«Ÿ¨øD!„ò ÅÅ KB``’“_AO¯3.´Ç”)ƒ¡­Ýütˆðq¹<|ÿ}8Œ$nrsK”€Í›Ý!+Û6牥¦¾ÁŒÂiÛa‚ŠJÛh»«³p¡="#“©ýNȪ«kpáÂC„†&âòåT((ÈcüøØ¸Ñ ¢Ÿ7Èåò°n]NœˆÅöíS`eÕcÇîFiix<ø|>6ntÚù.^|„gÏò||°¹¼¼eòÿßÃ/ƒ1cL°w¯7”•:¶8èÝ[ & ÂîÝÑT|"„Bµº­§ã™ 99YŒ?6¸2òÇq85ˆ‰y"ðñÕÕ•`eÕ7o>LJ¼¼,deeѾ};”KÅεK—Ž‚£ãNܼ™këÖ(ùß-B!„!¨îïYY…07×£ááb®°°;vDaÎ[ôì©Ét‘àp¸øóÏ›X°`d›m÷ÌÈÈŸÏ—è⓪ª"ÊË¥æÓ¿u…¶oÄèÑÆmæš–œœb„„$"00¹èÝ[ ‹ÙÃÍÍݺµg4[yyæÌ9Ž»w_ÀÏoþ{EŒÁƒ{bß¾iX²Ä+WŽÚ9žãÎ~ÞãÇÙ(+«‚ªª¢@ç?~ nÜH‡¬¬,tu;ã·ßf‚Ëåaܸ=Ø·ï"–/-ÐqÅEß¾]1nÜ@ìÙMÅ'B!„ÖR]]ƒÈÈdœ<‡›7Ÿ cGLš4Ó¦ £¹$`÷î `±d±|¹ÓQDæÔ©;¨¨¨nòð_i”žžeetïÞ‘é(SQQjSmwu-r@TÔ,YâOíwMPQQóç 007o>ºº2ÜÜÌáëëss=¦ãJKÙ˜>ýWdfæ!$dú÷ÿì?Ÿ3yò`˜›ë¢S'U¡WFX±Â ùùexýº99Åxú4l6<Þ?+¡x<>ŸÃή¯@ç=Úß|ŒQ£úáçŸ?¯o³[·n6l8  ÒS(_S–-GÇŸ’’V;Ÿ!„Òæ$'¿B``ÂÃk‡‡ÛÛáèÑÙ°·7j³«I$ÍãÇÙøãìÜéÙf†ŒÀŸÞÄ„ ƒÐ±cówo’ééoÑ»·–DÏ»RSk»Ý}ˆÚïÇåòpëVBB™ŒêêØÙõÅ/¿Ì€““‰Xµz•”°1mÚ!¼~]ˆÐÐÅ ¾i#ì•nƒ÷ÄàÁï}ìíw`Ô¨~˜;wÞ½+Evv1Þ½+iÑ®˜ÚÚê Z›÷g"Ížm‹ë×Ó±hÑ \¼¸J¢WHuÈ}ðÛo×°w¯w«G|¹„B!­¨¨¨ááIˆÇƒ¯ë[&O¦áá’hݺ0ë`Ê”¶3÷èþýWHJzM›Ü™ŽÂ¨´´·ÝrԵݵ½•O@mûÝÒ¥£¨ýî©©Ù I@XØääcРX³f\\Lѹ³ðV KII%¦N=„·o‹º½z1ÿs|ù2zz¡©©MM5ôë×M(Çý°ð222ؽ{*ìíw`ýúpøúz å\L™3g8fÏ>еkÇC[[½UÎAÅ'B!„H­ºáá~~±8>,–Ü{;Éõ·n=Å™3K%zõKsýþ{ ÌÌt1hP¦£0êÉ“x{KvÛ¡ªªJJÚfñ ¾úÊQQ°|y·©ëøßrrŠš„ÐÐD¤¦f£{÷Žðö¶€››¹X·~U`êÔCÈË+EXØbèéuf:rsKQQQ ]]ÑeéÔI;vx`Ö¬£3¦¿À»ê‰ƒ‘#ûBG§þú++V´N+;Ÿ!„"u^¾ÌG``<‚‚ꇇoß>ãÇ„ŠŠ`CG‰x¨ªªÁ?œÆ”)µ3DÚŠ‚‚rœ>}Û·Oa: £Øl^¾Ì‡¡¡6ÓQZ¤nøqi)»MµÖa±ä°oß4Œ³ ÇŽÝÀܹÙŽ$2ååU8w.¡¡‰¸yó TU•àâ2›7O’ˆUKJØððøEE ] ]ÝNLG¼|™èÑC´yœœLàá1ß|„!CzJlK´¬¬ æÎŽýû/bÉÇVA@Å'B!„H6›ƒÈÈäúÁ¬ššj˜•—WµÉâðOûÝ–-pp0’êö;.—‡k×Ò–„¨¨¨©áÂÞÞ‡}Ñ£ÅjŽSC*+«1}ú¯ÈÏ/Ç©S_‰ÕÐÿ—/ ÀbÉ¡kWÑ·ÑoÜè‡X½:¿þ:SäçOϡضíλ‰Í„~|Éx”B!„|Bíððx„†&¢²’CÃÃ¥ØÛ·Å8pà–/.]ÚΜ.?þ¸‰iÓ†IÌ‹ÔÖ’‘‘KN¬^ô BMMÚäÐñ“öö»^#44§NÝAnn)ÌÍõðÝwàæf†öí‚͇‹Y³ŽáùówbWxjW<ëèt`dEuu%ìÞ=S§Bdd2œˆ<ƒ0¨¨(bÂS%Pñ‰B!¨7œ€€€8¤¦f£wo-,Y2 CÅr0+ŽíÛ#¡­­ŽyóF0E¤.^|ˆ7oŠ0c†ÓQ÷æM´µÕy)Lu«JKÛîÜ' ¶ýnÏ/8;ûJMû]VV!ÂÃï $$ééo¡§×Ÿn…I“‹Ål$Ap¹<|ùå¸wïBCC__üV¿x‘Ïh  ­­!<<†àÛoÃ`ccuueƲ´„§ç¸»@vvºvm/ÔcSñ‰B!ËåáêÕ4Å#:ºvxøÄ‰fرÃææzLÇ#­ìñãl„„$bß¾imnõÏï¿ß„£c?èèt`: ã²³‹…þ‚ˆ ÿ´Ýµíâë૯±mÛ98:ö“ÈMI QQÉNÀíÛO¡®® WWSìÚå 33]±ŸãÔ>ŸŸ\½š†ÀÀ/al¬Ãt¤zñ"Ì΂[¿Þ—/oæMg±s§£Y5dHOèêvFpp"–,qê±ÛÖonB!„HœÌÌ<' 00ÙÙ۰èEÃÃÛ mÛ"ѧO—67óèùów¸v- 'OÎg:ŠXhwã™P÷ÜÕÖÛîê,]: ÑÑ)X±"ÁÁ‹$¢ýŽÃáâÚµ4„„$âÂ…ðx|8:öÃÑ£³1rd_©)’oÝz§NÝÁ‰ÿÃàÁ=™ŽóI/_æÃѱ£Ú·o‡M›Ü±`ÁŸps3ƒ•UoFóBFFS¦ FppŸ!„"ýꆇÿõW,ââžAKK“'†——zõ’Þ¡´äã’’2qáB Nœ˜'/J…éäÉ8tïÞ¶¶†LG÷ø IDAT oÞIä º±XrPRbµù¶»:’Ô~w÷îK„„$âìÙ»ÈÏ/ÇС=±q£&L ÉšãÔ?¿Xý‹8·ß½zU€D„‡'!##úúZ˜5Ë“&™£Gææ µ¦˜˜'X»6+WŽ»»9Óqôôi.ˆÍζ›7»cøðmøõ×kX¼Øé8ͦ£Óƒuǹs÷¨øD!„é‘—W†°°$ÖïÛ·+||jÿØ¥ááäʕLj}гg—2Eä®]KCnn ¦LÂt±Àápñî]©T´Ý€ªªÊÊhåÓ¿-]: QQÉX±"!!‹-º–”TâÌ™{ KB\Ü3tì¨SìÙã 33á½ G©©Ù˜;÷&L„¥KG1§Qÿì‚)…@X¾|4öì¹773‰œ×7vìøùÅâûï]…vL*>B!DäꆇÄáÂ…(+³àâbJÃÃÉ{ø|>¶nÀèÑ&mòq+«Þb·¥9S²³‹ÀãñÑ­›´Ÿ©íî,–|}½0aÂ^üþûMÌše#ÒóWW×àòåT„„$ââÅG••ÁèÑÆøý÷9°³ë KN¤y˜Ÿ_†3~ÀÝáëë%«.ÓÓs ¯¯yyñY!=oÞÄá‡Nã×_g2§ÙÆŽí-["ðèÑôë×M(Ǥâ!„BD&33þþ·œˆÜÜXXôÂΞpq%%Óñˆ˜9{ö=zƒ}û¦1E䊊*pþ| víòd:ŠØÈÎ.Zù$å 莯¾rÄ–-°·7‚®në®fáóùHHxŽÐÐ$œ={%%•°´ÔǶm“áì<êêJ­z~qÂåò0þ`±äpäÈl‰)¶edäˆÅ¼§SPÇæÍ“àåu×®¥aÄñ™õ1úúZ04삨¨d*>B!D2”—W!"â>ã뇇{yYÀÃcˆXÍô â…ÃábÛ¶H¸»›£oß®Lǹðð;PR’Ǹq™Ž"6²³‹ÀbÉASSé(BA3Ÿ>­®ýÎÇçd«µßedä"<< ¡¡Ixù2FF]±h‘=ÜÜÌ¥fu]smÝz÷î½Ddär‰*ºedäŠåsåˆ}0vl¬_ /®«•YM1vlDF>ÀŠc„r<*>B!¤U$%e"00gÎÜ›]''NšÌßÿ6²² ð%ÓQWW3Zø/¹¹¥èØQUjv>N¸pá!¾þ:_6¹ýŽËå!&æ ÂÂ’™Œêê nˆýû§a̘þ´¢ð_*+«1wîqôíÛ ß}7é8ÍöäIdee ¯¯Ét”OZ¶l‚‚pðà%¬^=Žé8MÆbÉÁÒR7nPñ‰B! ÊÈÈE``}99Å05í5kÆÁÅÅ;ÓêÛÙ¸ñ òòÊð¥Ä ÿ·ŒŒ\èèt€²²ÓQ>IC£–/-["0c†µDͳ±1Ä‘#ׄr,*>B!¤ÉꆇŸ<‡øøgÐÑéoo L™BÃÉpøûÇ¡°°‹Û3…—/§¢°°“& f:ŠØ).®”šaã@mÛ­|j\]ûݦMg`g×ç?íwYY…¯ã”–özzáímwwsèëk1”Z2\¹òþy G΂¶¶Óq’žþ}úˆÿŒª/¾°Æ±c7°{w4~úIrv1>Ü7žÆ³gïЫWËV—Qñ‰B!JJÊÄ_Å""â>8.œœLàï?Ç÷‘šá¿„yû÷_„··¥Ä¾j©ðð$X[´ÉU_)+«‚®®ôÌSUUDy9­|j 'DG§Ô·ß•–V!"âBC÷ êêÊpu5ÅÎ07×k•Ýñ¤MQQ||NÂÃcÆŒéÏt¥§¿…­­!Ó1ÅbÉÁÇÇ >>'±x±ƒÄ¼a×·oW¨¨("!á9Ÿ!„Ò:rrŠ’ˆÀÀøÿÞ k׎ƒ››9Ú·oÇt<"…üýo#?¿ ‹;0…ÕøûïGøñG7¦£ˆ%6›E¦cMÝÌ'>ŸOÅ’F((ÈcÇO¸¹íǘ1»‘–ö0z´1Ž {{#‰lcÒêÕÁPPÇÆ’û|Ããññôé;ÌžmËt”&qs3×°kW4öïŸÆtœ&‘••©iܽûžžC[t,*>B!¤‡ÃÅåË©¨®¢¢77sNZ‡ÃÅ—àåe®]%g†0]¸‚š.œ0E,q85PT”ž—/ªªµ…´ÒÒ*¨«KÎX¢Äçó‘””‰ÐÐ$œ>}|>eaÍšñ˜>ÝŠ¾o ¿ƒˆˆû Z(Q»¯}èÕ«TVVÃÀ@üÛî@NN+V8aÁ‚?ñÕW04”ŒÜtGLÌ“‡ö•$„B22rñãgan¾sæCEE5|}½p÷îؼ٠O¤ÕÆ#7·¤Íîp§Oß…]_hhÐÊÂ)-eCQQz63¨+>••Që݇ž>ÍÅÎQ°²Ú —}¸}û).´GLÌZô쩉7Ò¡¦&=«àD©°°ß}†9s†Ãʪ7ÓqZäÉ“€6ÃIšnüø02ê†]»¢™ŽÒdffºxô( UU5-:Žô¼u@!„f)/¯Â©Sw¤¤LèètÀŒÖðò²€ŽN¦ã‘6¤nÖ“——…Dí$L%%•¸rå1vïžÊt±ÅáðЮøîhÕ\ªªµ+N¨øT«¨¨ááI KBRÒ hkkÀÕu&OúÏóõõÂĉû//KK¦­[ÏAQQ«Ve:J‹¥§¿E×®í%jœŒŒ V¬pÂܹǑžþV"V?™šö@M ))¯an®'ðq¨øD!„´!|>qqÏ_?<|ܸXµj,¬­ hx8aDHHÞ¾-ÆâÅmwÕSTÔÈÊÊ`ôh¦£ˆ­ÊÊ*ÈÉIOãF]»SiiÛÝñ®ººÿý!!‰¸|9 òpr2Á×_…ÁGÞææz˜;w8~øá4ììú¶Ù6]AÜ¿ÿ þþ·qðàçR1?íÉ“‰ZõTÇÉɽ{kãçŸ/cÏo¦ã4ªk×öèÐA))YT|"„BHÃꆇŸ<‡gÏÞaÀ€î4<œˆýû/aòä!øì³¶»âîôé»ptìWߊE¤_]ñ©­íxW7Ç)88gÏÞCII%¬­ °s§'ÆФ¢È7ß8ãï¿båÊ üõ×<¤–|<«WcØ0}¸ºš2G(ž<É©©.Ó1šMFF‹Ùã믱råX‰Xmn` ]ßæ((*>B!RŠÃáâÒ¥Gðó‹ÅÕ«iPSS‚››9þÆÆ:€ˆˆ¸—/óÛô È‚‚rÄĤãçŸg0…ˆP]‘¥¬¬m¬|ÊÌÌChhBC‘™™‡¾}»bÑ"{Lš4]ºh4ëXJJ,ìÝë‰÷#00¾Å»pµ~~±xôè .^\Ét¡yò$’ù³ws3ÇŽQ8tè*6mÿ ©øD!„<~œ€€8„…%¡  66†øùçÏáädúÕOÄŸÏÇ1nÜ@ôê¥ÉtÆDD܇’ ŽŽý˜ŽBDHNNíÚ) ´TzW>U "â>‚ƒ˜˜‰NTàînwwóodQ×~·aÃiØÙõ¶vó XmIi)Û¶EbîÜáÙ¦ö1oÞ¡´”>}ÄfÒÇÈËËbÁ‚‘ؼ9Ë—FÇŽ*LGj6þþûQ‹ŽAB!R ¤„3gî"0°vx¸ž^gÌše !±œ›´MW¯¦!%% »vµí!ÛgÎÜÅèÑ&PR’žÜHÓ¨ª*¢¼\ºV>q8\\¾œŠÐÐD\¸ð²²2pr2ÁŸþvv}„:·ë›oœqáÂC¬ZŒ?þ˜+´ãJ›cÇn€ËåbÉ陫'‰;Ý}ÈÛÛ?ýt'NÜÂÒ¥£˜ŽÓ mä䣤„-ð€w*>B!ªnxøÉ“q8{öÀÙ™†‡ÉqàÀEØÙõEÿþŸ1…199%¸}û)ŽŸÃt±§¬¬Ït ¡RQQ’š•Owî¼@hhNºƒââ Ú Û·OÁرZm72%%|}§ÂÝýµß}Bi)‡_Åܹ# ¡!=3ÓÓߢsgU±_1Ô%%¼¼,ð×_±X´Èòò⻡BÝêäÌÌw¯Z¤â!„"arrŠáï‡ààdfæaÀ€îX¿ÞnnæµÝ0iÛŸ#6ö)BB1…Q.¤ ];Œчé(bO^^NêV ©©)Iô̧¬¬B% << ¹èÝ[ óæÀäɃE¶êvèÐ^˜=Û–Úï>áèÑëàñø˜7oÓQ„JRwºûЬY¶8|ø*Ο€ñã2瓺vmYY¼~]HÅ'B!DšUW× ::AAñ¸z5 êêʘ2e0<=-`dÔ•éx„4Ûþý—`n®+«ÞLGaTTÔŒiDóØš@MM ÕÕ5LÇ*UUE”•IÖʧ’6"#ï#((qqÏСC;¸ºšaïÞi05íÁH¦Õ«ÇáâÅGÔ~÷’6¾†yóF@]]™é8B•žž#ÿ|öYŒeŒßëâ‹%MMude | ú-G!„ˆ±ÔÔlÆ!$$ÅÅ•°³ëCÃÃÉÄÄÄ`ß¾}LÇh²êjY$$t‘Q<<<˜Ž,Y²Däç-)aãÖ­ øúz‰üÜ’HVVl6§EÇØ·obbb„”¨å?î„'O’ñôiÓQ>ÉÆÆ .ƵkiNÀ… )àñøpr2Á±c³aooKŽÑŒíÚ)`×®©˜<ù BC1iÒ`Fóˆ‹ß~»>Ÿ¹s‡7éóÅíúhȽ{]Ÿâ{íMûý2{¶-<=Ajj¶XÔ>û¬=Ÿ!„iRRÂÆ©SwàïÉɯ §×sæ ‡——E³·£&mÃË—/Œ)S¦0¥Ix2$ \¦£ 88,3ƒ¾¯^MŸÏ‡ƒírתªJ¨¬lYñ)..N¬®•~ýò™ŽÐ ÐÐ3xñ¢#ŽYüür Ò7ºa„b7?hØ0}ÌœiuëÂakÛZZjLGb›ÍÁñã70{¶m“W=‰ÛõÑ¡Cß‚ÏïÙ–Mýýbcc€Ï>뀰°$|ûíx$L·nðæM‘À÷§â!„"ø|>bbž 00‘‘É€ñãbÃWXXô‚ŒŒxÿEÄCPx¿,ަM›ÆØ¹£¢`ذÞ4«­‰„Õ¢æíí ???!$’~ÞÞÓqçŽ<æÍ³»»9ôô:3©Ak׎ǥK©X³&GÎf:£BCQZÊÆ_X7ë~t}OS¿ÈÈÈ`ܸˆŒLóâS{$&>øþT|"„BT7¬µnx¸¹¹.6ntƒ‹‹)½ %DŠUW×àÊ•T¬^-¾/4ÄMÇŽ*(,¬`:F›"#ǹy!||œ˜ŽÒ$**Šøé'xzÂéÓwáêjÊt$Æ;v'šA[[é(¤ ƈǯŠuë]ûöíPP øs0Ÿ!„«~òd®_OCÇŽ*pw7§áá„´!·ne ´´ cƘ0Ebhh´Ã‹âݦF˜gccˆÏ?†o¿ …µµ:wVe:’Èݺ•ÔÔlìÝËÜÊNÒ<¦¦ºÐÖÖ@dä}±ý[°S'U ^|’bB!„4 5õ ¾ý6 ƒ­ÇÂ…' ''ƒ_‰¤¤ ذa¢Øþ±A¾óç`àÀî4Ç­Ú·o×¢>¤íX·ÎªªJX»6„é(Œ8rä:¬¬zÃÄD‡é(¤‰deeàì< ~ô‚8ª{æñøÝŸV>B!­¨¨¨ááI L¨¾h‘=&O mmzÑIH[Äçóý3g6oK[סC;Sñ‰4îßíw÷Åz {a{÷®/>ÄÓ™ŽBšiìØþ8~ü23óÄr¾ZûöíÀçóQTTŽUš}*>B!BÆãñqófíððsçîC^^ކ‡Bêݽû99Å;¶?ÓQ$J—.ÈË+‡Ã‹%Çt"æll 1}ú0¬]‚aÃôÑ©SÛh¿ M‚ŠŠœœèùEÒXXô‚ºº.]z„9s†3ç?:t¨ÝáRÐâµÝB!B’•Uˆ]»¢aa± žž¿àÅ‹|lÚ䎻w€¯¯,-õ©ðD—‘‘ßÿéMòêÕ+¼{÷•——cË–-"N$ÑÑ)ÐÓë CÃ.LG‘(ݺµÇGv¶à[}7‡0¯•¬¬,lÛ¶ )))B9^c$ùú¦uë\ ¨Èš5m§ý.88..ƒ ¨(ýëLNŸ>øøxbÇŽB=6׋%‡#úââÅG"=oS©¨(ªª8ÝŸŠO„BH TW× ,, žž¿ÀÂbþø#..ƒpýúœ=»Ó§ƒªª"Ó1 ©÷øñc:tˆéÊÏχ¥¥%NŸ>ýÑÛKKKñý÷ß‹8•p\¹’ ‡~LÇ8]»¶dg‹ä|¼Vf̘{÷îA^^4I¾>„IUU?ýä‰sç’qŸé8­.%% ©©ÙððÊt‘Æ­[·P\\Œ£G õØL]Cýûl¶`žÖT·â´´”-Ðý¥¿J!„´‚ääW L@xxÊÊØpp臣GgÃÞÞˆÚA‚Ù³g#//éB—“SŒ‡ß`íÚñLG‘8ššj`±äD¶òI˜^¾|‰Í›7£oß¾LGisFŒèƒ©S-°vm¬¬z Ô.$)‚ƒ ¯¯ss]¦£ˆ”žžÒÒÒ˜Ž!#F‚Ãá"&æ ÅëMŠº•O55<îO+Ÿ!„&**ªÀñã7àè¸cÆìÆiX´È ßãøñ9pr2¡Â‘<K–,ºº:´´´°uëVµ«±{÷ntëÖ ššš8vì¾þúkhjj¢k×®¨?Îwß}MMM(**bäÈ‘xýúu“n{ðଭ­¡¤¤CCCøûû¿—ïàÁƒàóù6lX£_Ë‘#G «« Ìš5 <ž`‹ÊÕ«iPT”‡¥¥>ÓQ$ެ¬ ºvm¬¬B‘S×ʬY³ðòåK̘1‘‘‘ÈÌÌÄÈ‘#ß;§§'âââêëçç}}}¨¨¨`æÌ™àr¹€‹/ÂØØ 033Cbbbƒù%íúh-ë×»‚ŒǷ߆2¥Õðù|DF&câD3‘óSÏå-y_½z„¢¢"úöíûÞê×€€èééAYY'NDqqí*ÈœœL˜0¡Iç>{ö,ôõõÑ®];Ìš5 +W®Dddä'¿FQ_CÚÚ01ÑÁ•+©­zAÈÊÖ–**ª»¿0ÃB!Ò†ÇããÚµ4ÌŸÿ Z-[ΡÿÏpæÌ\¿¾‹9ЮuDâ$&&‚ÅbáíÛ· ÃöíÛ‡ƒ+W® ¨¨YYYظq#æÌ™MMMäææÂÇÇëÖ­DGGãøñãˆE^^ÔÕÕ±yóæFo+//‡““¼½½Q\\ŒC‡aÁ‚¸uë %%»ví±cÇý:¸\.ðäÉ$''#<<×®]k¥ïšp\¾œ ()±˜Ž"‘ôõ5ñôéÇ瀵a\+{ö쎎öïß°Ùl}—/_ÆëׯáîîŽÍ›7£¸¸“&MÂäÉ“Áç|ÛsI¼>Z‹ººvîôÀéÓwõ ñ;H ^#+«Pd4ô\.èã8''...X¾|9JJJ°}ûvx{{#-- ÷ïßÇÌ™3±{÷nÂÎ΀ÊÊJ\¹r<÷³gÏàíí={ö   †††ðõõEAAÁG¿F¦®![[Cܺ•Ñêçi.uu%µ#'AÅ'B!ä#23ó°sg,,6ÁËëÞ¾-ÆöíSpï^íððÁƒ{2‘µoßÛ¶mC»ví`ccƒÅ‹׿cÍãñðÍ7ß@FFŽŽŽ——ÇŠ+êÿ»´´Àf×Î|¨ªª‚ššüýýëW…4t[DDºvíŠE‹AQQööö˜9s&‚ƒƒQYY ooo>|;7m›éü Ð×ׇ±±qý;á⨦†‡k×cäHj½T¯^Zxú4WdçƵ¢¡¡YYYhhh@Q±ñ€ÕÕÕØ°aгgO 0ÅÅÅ „&Nœeee¬Zµ ,@eeå'%I×Gk³·7‚§çP¬YŒ¢¢ ¦ãÝùó)ÐÕí„~ýº‰ä| =—‚=ŽO:SSSÌœ9ŠŠŠpuu…³³3áïïwww¸»»CII Ë–-Cÿþ/´}êÜ'OžÄèÑ£1aÂ())aõêÕÐÒÒjðëdâ²´ÔGzzòóËZý\‚¨ª¢â!„Ò"l6§~x¸µõøûÇaâD3\¿¾§O/§çÐú~wB$™¾¾>X¬VÞ˜˜˜ ;;»þ¿UTjg¢ÈÈÈ@QQ±~Hò¿wk?~<&Ož +++èêêbéÒ¥(,,lô¶ÌÌL<~üzzzõÿPTT„üݺuƒ²²2bbbP\\ŒŒŒŒÿ¬©#''MMÍúÿ÷Ý$ïÜÉDI #G1Ebéë‹¶ø$ŒkE]»v­ÿÿuÇÊÌÌ„¡¡aýÇY,¾ùæ´k×î£Ç´ëC6lp…ŒŒ,Ö­ g:ŠÐEE%cÌѬz~.¯ÓÜÇñëׯ߻ úôéƒW¯^!++ ÆÆÆïÝ֯ߧg"5åÜ222èÕ«×'ÁÔ5daÑ ²²2ˆ}*’ó‰ Ÿ!„´yÉɯ°fM úË—ŸD»v 8vl6¾Ç·ßŽGïÞ ¿+Fˆ¤ùpwnn.:vìØ¬cðù|ìÚµ ùùù›ÍƤI“½M]]¶¶¶ÈÌÌ|ïß/¿ü999äååaÙ²eX¶l222€½{÷ ç gØÅ‹Ð«—&ôôš¶ª‹üWïÞZ(((ÙÊa\+MQ^^Þè稩©½÷ÂÂÂÂÚôj¦æÒÐh‡;¦ 44ÿýé8B“™™‡´´·"k¹~.oHCcuuõÿ\sùùùÐÐÐ@‡›û~á¹¹›R¨©©!??ÿ½Õ½1"NÔÔ”`b¢ƒØXñk½k *>Bi“ Ëñë¯×àà°cÆìÆÍ›O°téh$%m¨./O¿&‰tÊÌ̬Ÿ•QZZŠÃ‡ÃÙÙ¹YÇØ¾};ììì //¡C‡bÆŒxóæM£·9::âÆHM­¦ZQQsss„‡‡cãÆHLL¬ÿgnnŽï¾ûGŽœ:u )))Âú6ˆÜÕ«iÕS Ô¾ššÝÈg ‡0®•±X,×Ï™‰‹‹CFFã/2G…3gÎÔ¿‹‹ÃôéÓ!'W»Ñ…¤_¢2j”1<=‡bÕª`KGûÝÕ«ihß¾HG4ô\ކǣFÂßÿgÏž¨$ GGG888  ~åarr2®_¿Þì̧N»wµsãbccñèÑ£úMât YYõ¦•O„Bˆ¤âry¸t)óçÿSÓ øé§(˜›ëáìÙ¥¸~} ,‰ÎU™ŽIH‘)v£ IDAT«³´´„FŒCCCèêêbÞ¼yÍ:Æ_|W¯^aÀ€ptt„‡‡6mÚÔèmØ´i,--áèèCCC˜˜˜ÀÓÓ³Ñs.[¶ §Njþ,rrŠñðá±Û:[Òhkk@[[¼nü“…@×ʇzöì ˜™™ÁÕÕ+V¬€µµu£÷9r$¼½½all GGGŒ=;wjíï-I¾>DmÃ×ÿÿßÓ|¦dˆ‰I‡µµdeE×Z)èsyCãAƒaÅŠ077ÇèÑ£allŒÉ“'c̘1puuŨQ£Ð¯_?Œ9&L€££c³2;;;c„ 066ƨQ£°bÅ 8 Äë6¬7ÒÒÞ¢  ñU‘’B†ÿ©í!„)‘™™‡ààœ<‡œœXXô‚§çPŒ?f8©àïïiÓ¦}r׫a³Ùˆ…††ÌÌÛš»ªª ñññ`³Ù8pà{ƒ[º ²²²ððáCèèèügއ(M›6 àççתç ˆÃÚµ¡xôh3ít×B3fü vØ¿Z³ï+ÈÏ[×ʇjjjpûömµ®ºYQMñäÉ<þFFFèÞ½»Pò|Ѝ®&üý÷C|ñÅœ81’»"‘ËåÁÄdÖ¬‡3¬Zt,A~Þ‚>—7ô8ÎÌÌDzz:ôôôþ3êÁƒÈÉÉÁСC¡®® vøaa!:uêÔà9ß½{‡¼¼û?Ž¿ÎÉ$ÃȲ3FöIŒZ‘"Db%B(U¥Õ¢fïjKÕ¦uÓ[2Ì&!Ví*!Ûˆ ‘ 2Œ,"’œs~¤Òª(â¬p=ûqk’s]ŸÎI¾Ÿïu½¯²ŠÏK$êÖ­E^ž5•Œ“枈ðXŽŽM8}úš¶Ë  à¦¦bå“ ‚ð‚y¾}{>N"ÃC^2wïÞÇÄD÷·¹<‹’’2NJ'0°“¶Kyávâĉ4”JåS­îø;7·ûl¨¶ËydUSrò5îÝ+E"¹\ÎСÙ!“ÙU6`ÂÃOrð`ÊCãèëK‘Ë•Èøà_¬¬Ì™kóæÍ 4H#ÏKUîÞ-cýúT&Nl§Ñ×Ç“¨êõãäÔT'BÇ+V>Õ®öãEóIAЈS§.r‚;’*ÃÃÃÂ&Ò­[qü¸ ¨Èðáõ]BµI$z4hðGfsëÖJKµÿ‹öóЉù[[ 6¬«íR^8uëÖÆÙ¹‰‰ÿÚ€Ò×—R«–«WãííÀÈ‘Û(++cøð ôõ롯oåŸÿožÞ_ã7n|ÏçŸçkàÙ€D¢OƒoóÞ{›¸}{{_!¥aÃ)ÄÄärãÆ”—ßÖH]/+KKS.¤I?áãã¤Ñíwåå ÎË$66„„+ÄÆ^®\ÕÔ²¥52™‰‹K'!á*!!«ÇÉ©) EÅ‹C"©hÂÚÛ7dñâaÈd¶¿âõQó~–4lø3f';{-J士½j2GÇ&„„œÐvdgbcc^íÇK”ʧ¹_ ‚ Ï.'§€-[b ?É¥K¹tèИààNȨ[·úwNAx1ü—˜˜4$ cÆtã?ÿñ¥V-Cm—UmÆ­¥qãz|þy°¶Kya”––søp* \»–G\\:ryÕOR©ww;þónß¾Cjj6gÏfröìuÒÓo"—+J%•Ë.Ô"#§àîÞ\SO‹óç³ðòZ À‘#shÕêÑíw=z,æÒ¥Œ X¾<Áƒe«ïe5nÜΞ½®Öíw¹¹E$&fpêTŪ¦Ó§¯Q\\й¹12™®®¶Èd¯j=ú[ÌÌŒY³fT•ã–—+hÖl:ææµ˜7ÏŸ  N/ì ¿F¦àããÄW_~¡NE>tè<ÁÁ_qöì§Z=|gðà5´k׈… Wçá±bå“ ‚ ReerH!,,†_=‡™™±ᩌÓS§.£P(ùñÇßÙ·ï ÿýï(:uj¡íÒžYY™œøø+ â®íRj¼²29GŽ\ **Ý»ÏPTT‚»»^^í8y2푯¯¸èTâããLTT"þþ_ õË5« åC™8R©„ ^×hã àÊ•[•µÏ»…M›&=ò5AAY¼8š’’rÞyg#‡§²xñÐÝ Õu‹ ÃÓs1Ÿ}¶ƒ… ‡<÷xO»ªÉÅ¥mÚ4ø×FÑåË74Èí±Ÿ××—âàИ¶mñé§Ï•ÕS´liÅÜ`Ïž3LŸƪU#4¶eVÝšpæLf•§jJNNásåN‰æ“ ‚ —.årœ-[b¹}û.]»¶fõê‘ à$Žìá©ôêÕ©TŠB!G.—“•UÀàÁk?¾sæ ¨Q$'_åÞ½ÒÙ8Óåå ~ÿý"‰ìÚ•LAÁ=\]›1mš7¾¾Î4jT±•ñ§ŸŽsýz^åã ô°°0áë¯ÇààЄ¨¨Ä??óä`r‰DÂÂ…CèÛ×A]Oë±ÒÒnb` GY™œcÇ.±{÷iúõs|èkºvmMyyE£L©„mÛâHHÈ`ÆqU®”žŸµµ 0eJ¾¾.téÒò™ÿ¤UMC†¸W¹ªéIär·hÑÂê_¿nÛ¶w05Õ½Àtu°´4ã?n —+ز%–:ujóÉ'5+»êq,-M±±1'55[«Í§¬¬üçÚv'®A„j+**!""ðð“ÄÅ¥Ó¸q=ÆŒéF``G7®§íòA¨aÌÍéÚµG^@¡PV®PùìÞ}šµkGi|EJu8ñ66æ4oþï‡Â_är'N¤™ÀÎIܾ}g禼ýö«øù¹Ð´iýGÓ¿¿#ß¹\‰DÞÞ,_X¹Êã‹/‚yï½Pž”4"•J˜4ɋѣ»ªå¹=IFÆÍÊ?K$ðÁÛèÕ«FF]®984¦vm#Š‹ï߯ôô›ôí»\lÃS£!C܉ŒLdúô0~ýuµkW½Òìq«š$ ­Z=Ûª¦'ÉÌÌ£¬LþÄæÓËÒx°¶6G"‘ T*Q(”|ûíÌÍ™>½Ÿ¶KS‰–-­ùã\­Í_XXBII Ö©ö¢ù$‚ <¥RILLáá'Ù±# ¹\3gö§k×Ö/l–€ šáëëÌÑ£¿šåå ®_ÏcàÀÿ2q¢'3fô×ùUP11ibÕÓSP(”œUyyÅ6ÂwÞÙÈñã—øôÓ!5¬ÕXºtžžKY¼x'óçpãFÅ t§N¥—NròÕÊUMnnÕ_Õô4þøã€hnÿ••úúÒÊבR©dåʽ˜™Õb„žZ®îùµj¥ÝæSNNVVbå“ ‚ fÂÃ7n÷ª¦§‘ž~KKSÌÌTÛÔªÉêÕ3áŸ/a¥RÉ'ŸD`ffĈµS˜Š´liÍÞ½gµ6ÿƒæSƒ¢ù$‚ ¨AY™œ½{ÏáC©•áá£Fu¡]»†Ú.O„••nn͈¿Re3¡¼\Áµkyøù}Îë¯wçÃýun¥GJÊu ïѹs+m—¢S®•@dd"ׯçÓª•5#FtÂßß{ûÕÓÀ@­['³`A${÷žeÞ¼@ÅEgtt2+Wî!55›vírñbåå­~Ò××£}û†üøã ôTò«£¬LNnnA•Ÿ›7ï¾ÿ~\åWä>U½‚K.W––CŸ>ËYµj~~.j©÷eð¸UMúúRbbÒxãžtêÔB-«šžFffžˆ7ø‡úõM¨ªÿ¬T*™1c&&Æøû×Ü×DË–ÖdgPTT¢•¦cvv!††úÏuÚžný¤AtBJJáá1lÛÇíÛwéÑÞ/¿| oo.‚Úùúº˜xµrµÓ?=Ø>µaÃQ‚ƒ;Ó¾}#M–÷D11iÔ­[»Ú •ÉéÓ׈ˆH **‘«WocggÉСîøû»ªìïM"‘àããĺu‡8wî:·X¾|7©©Y àÌÚµ¯¡§'ÅËkIåcôõõ°±1gãÆ7›á£)W®Üzh%Ón>œJÏžö´mÛssc Kª«¬LAyy)o¾ù11iÌŸ ¶Ã?Áƒ¬¦¸¸tâã«Îjz°ª©NZôêµ”û÷ËèÕ«ú§~=¯ë×óiذ®Öæ×E––¦•üÿ¤PÀäÉ?abbÄ«¯¶ÓpeªñàP´´8;kþôèÜÜB4¨~Þˆæ“ ‚ð§ÂÂ"#!..;;KÆŽíÎðáâîš Õ¿¿#Ÿ|ñØÏK¥zö´gÍšQÏuV]NºŒ‡Gó—ö¢ÿܹëDE%™ÈåË7hÚ´>~~. 芣cµÌéêjKݺ&­ãöí;øø8±fͨ‡VéŽù !!ÇQ(”˜˜²yó$,,LÕRϳHO¿õØÏI¥fÏÞÌ‘#s00ÐC"‘У‡=»vþ× «òr½{·iÿ þ››7ïŸ^í¬¦>ògæÌÍøú:#“Ùiþ PqêXûöµ2·®ª_ß´Ê•O”(0nÜBC'>ó©…º I“úéóǹZi>åäbm]ý-w šO‚ /µáá7ž`çÎ$||œ˜5ˇ®][k5ÿB„—W³f´iÓ€‹³º˜ÐÓ“0{¶“&yéì{T||#GvÑvuáB6QQ‰DD$péR.ÕÅÏÏ??\]›©íïJ©T²gÏV¬ØC~~1ffÆìÛ7£Ê­áï¿ß<ÀÆo>1Ì\S22nb` W”üw …’«Wo³~ýQ&Nô*¶ÞíÞ}ú‘¯•J¥(•J† ëÈÇy@ü}USññU®j:Ô7·§Ïj êDdd"ï¿Ξ=Óµ²"<+«€>}:h|^]fiùïd¥RIii9C†¬áÀ™´m[³â#¤R -ZXqé’vBdz²ò±±Í'Aáeeåv’Í›OU†‡òÉ tÓJv Â?ùù¹ðÅû*·Qè!•JiÕÊF§OÙÙ\½z77Ý CW¥´´DD$™@jj666uðõufÅŠ ÜÝíÔúw¤T*Ù»÷,Ë—ïæÜ¹ëøø81n\w¦M Ãаêü&KKS>øÀ—Ö­mtêïçŸaãÿ¤P(™??‚€7llÌéÖíÑÜ'}})¦|þypå½—ÑßW5Åǧ“”ôת&WWÛ¿­j²ÅܼVµæH$,[H¯^KX¹r³gkþ”Ĭ,±íîŸê×ü*X=ÊËtéÒ’·ß~µÆn‰nÕÊFk'Þ]¿ž‡GóçC4ŸA^¥¥åìÙs†M›NrèP*uëÖfÈDx¸ :ÇÇÇ‘+vw|»ukͤI^­#<ü$AA´\aÕbcÓÑÓ“âêÚLÛ¥¨EzúÍÊ-ugÏfbeeÆ€N,Z4”Ž[¨}›—R©dß¾³¬X±‡3g2é×ÏÕ«ƒi×®r¹‚E‹v²cGï¾Û§ÊÇOžüªZ뫎´´Ü*W=Á_«ýär D²fÍ(Z¶´ÆÂ”[·î<´ÚÉ”½{ϼ4ͧ²29çÎ]ÿ3«)ƒ¸¸ôGV5 òl«šžV“&õ˜;×—>ÚŽŸŸ :hn \AA1eer,,to˱6Uœv'yè  ==) …’!CÜyãž5þ÷Ý-¬´vâÝåË7:Ôã¹ÆÍ'A„܃ððM›NQTT‚§§A÷µk÷Wõœ9*W;Û ¢èÓ§ƒNäõüS\\:öö 011Òv)*síZÞŸ §’’®R¿¾ 8óÑGþtéÒª²A¢NJ¥’_=Çòå»+›N+W=tѯ§'ÅÛÛ;ß|ÒE‡_*ê—J%”•É‘H*2^ÜÝípvn†“SþÊËòð°c÷î3XYýµÚ)22·Þú oozôxñPÙÙ$$\áÔ©4®”t•’’2ÌÍ+MÏ»ªéYŒÓ•¨¨DÞ{/”èè©;11/¯€:ujkd¾šB__ZÙx’J%˜™Ó·¯›7Ÿb„ž5n›]UZ·¶aݺƒ(Jæ¹–—w[[‹çG\u‚ ¼€ Kض-ް°’“¯bggÉ„ =1¢66ÏwR… ‚¦ÌŸ€«k³‡B}gÎôaÇŽ$,ˆäóσµWÜcÄÅeh-„X•²²ò‰ŠJ"22„„+˜›×¢GfÍò¡[·6èë«¿á5V®ÜCrò5úöíðHÓéïüü\øùç㤧ßÔ™L§#—+*/˜ýý]pvn†9o½õ#+WŽ k×VU>ÎÛÛ 3æÍó¯Ìvò÷weçÎd¦N ãàÁ™iÀ¨Kii9ÉÉWIH¸BllÅʦÌÌ<¤R mÚ4@&³#0°#2™-[Zk%X]"‘°bE ¯¾ºŒµk÷óÞ{}52oAÁ=êÖͧª]ÛââR–,ÆÐ¡êqêÔeBCcøä“AÚ.ï¹5mZŸû÷ËUròܳÈȸ €h> ‚ TdB;v‘ðð“DG'¿È~üñ@:uj¡³ù(‚ 3~|G>fjjħŸæ7¾gøð޼òJÕçÚPV&çô髌ÙYÛ¥TKNN!;v$•DlìeLMðövdêTozôh£±•ìÛwö¡¦ÓҥßxZÞ+¯´ÂÚÚŒ­[c™>½Ÿ†*­>‰DÂ… ‹15}x¥ÜÒ¥»8|øüc›OÆyØñ‘/Z4/¯%Ì›·]'›³“™™WÙdŠ‹KçÌ™LJKË©_ß77[Fê‚››-®®¶|¯´©ys+fÍòaÑ¢ôï螺,¡üüŠ•Oõê‰æÓ?EF¾K»v ú78¸3ÿûßA>øÀ·Æ¯øpútff¾F›O—/ßDOOJ“&õŸkœšýÝAÈÌÌcÓ¦SlÚt’ŒŒ[ÈdvÌŸ€¿¿«á…äããDïÞí™={3¿þ:Cg.(ΜÉäþýrÜÝí´]ÊS»yó;w&•ȉP»¶!}û:0iR/<=Ûjå{» +Vì&)é*½{·g÷îiOl:= §'% @ÆÖ­qL›æ­ó7^¤RI•ÍOO{:Ïܹ¾}\Uê×7aɒጻžþýðövPi½ªpï^)ÉÉ׈‹K¯ü_nnúúRÚ¶mˆ»»cÆtÃÍÍ–-¬´]î߃ÈȦM %2ò]µoC-((FOOZ£W¶©KûöùØðáYº4šèèd rÓBUªcmm޾¾”ë×óÉ4wh•+·hܸÞs߀ПԂ Â3yþóÏÇ9vì"õë›0x°Œ#:ר<AžÅÂ…Cðô\ÌÚµ˜:U3Û]ž$..ºukëüs^Þ]¢£“‰ˆHäøñKéÓ»w{¾þz ^^í066ÐJ]ÿl:EGOÅÙ¹é33dˆ;_}uˆøøš»ÒÓ³-ߌ›7ï<ñùòöv 0°#³fmÂãù¿ž¦ éé7ÿ žÁ¹s™”—+°¶6ÃÍÍŽ7Þè‰Lf‡“SSj×6Ôj­Õ¡§'eåÊx{¯à›oŽ0q¢§Zç»uë®Ør÷ ¬­ÍèÝ»!!15¾ù¤¯/ÅÚÚœÌÌ|Λ‘që¹óž@4ŸAj”3g2 aûö¸Êððõë_Ç˫ƷC‚ hS“&õ˜6Í›eËv1h+Í›k¿áŸ››­N®¶)((f×®ÓDF&rìØEôô¤xyµcíÚ×èÓ§=µjiï¢ÿÀV®ÜC||}út¨vÓ釯´iÓ€­[cklóé•WZ¡¯=‰B IDAT/åÈ‘T–=óã?ù$€£G/0gξúj´*¬Ú;÷IL¼RÙlŠÏàÖ­;èáèØæLœè‰LfGӦϷ…G—ØÛ7`êÔ¾,]·wµ¾S§ŽXõô,‚ƒ;3zô·*k¢hSãÆõ¸~=O£s^¾|ƒ–-­Ÿ{Ñ|AÐqùùÅlßGxø)’“¯Ò¢…“'{1t¨»á¥6a‚'[·Æ1{öÂÃßÒv9$'_Õ©;ë……%ìÝ{†¨¨D:D"¡W¯¶|ñE0½{wÐzvÎÁƒçY±b÷CM'—f*{èPwÖ­;È'ŸÔÈ›3&&Fxx4çСóÕj>™›³re#F|Å/¿Ä«åߥR©äÒ¥ÜÊœ¦¸¸ .\ÈF.Wаa]ÜÝíxûíW‘ÉlqtlŠ‘Ñ‹}é9i’;v$1mZÛ¶½­¶&t~~±È{zF½zµ¥Aƒ:lÜxü±[YkІ ërýºæW>yyµ{îq^ìwA„êAxxhh ÑÑÉèáëë,ÂÃAþF__ÊÒ¥Ã8p5Û¶ÅUë"]UŠŠJ¸|ùæSg©ËÝ»÷Ù·ï, ÿ|>>«øþûcŒÛM-óÜÛîž‘žž”  ŽlÜxœ™3}4vZ§:4iRcÇ.jl¾²29YYùbÛ ‹&33ÐÐÂÃO’™™‡LfÇÂ…ƒ4È Ý9ÝEAWÈdv¼öÚ+Ì›·ž=í±°x¶|UIN¾†R©ÄÅ¥úÛŪëÞ½Röí;GTT"û÷Ÿ£¼\N·nmX¼x(ýû;R§Žn\¨>œÊòå»+›N;v¼‡››zBs7®GÏžölÜx¼Æ6Ÿzö´ç³ÏvpæLfµ›š~èÏï¿ÿÁ”)Ù´iÒS‡aËå .^ÌyèºK—rQ*•ØÚZàêjËŒýpqi†£c“¹ºL:thÌ[oõâ³Ïvлw{µl-ÌË+Ö™×tMÔ‰/¾ØÇ¯¿ž­±ï ivåSFÆ- ¥J¶’Šæ“ ‚–•””LxøÉÊððáÃ;Ô‰V­žµ ‹îƒüØ·ï,ÿùÏ6þ÷¿ÿÓJ §O_ÃÚÚLcÛ¡KJÊ8p …¨¨Döí;ËýûåtéÒŠ èßßIë!ÓwäH*+VìáÔ©ËôêÕV­M§¿5êÞxã;®^½]#ó…ccS‡}ûÎV»ùT«–!_~ù>>«X³f?ï¾Û§Ê¯»uë e5%$dpçÎ}j×6ÄÅ¥}û:ðÁv¸¸Øbmmö ‚ ÔXÉÉW ?Åöíqܽ{/¯v"<\¡LMXºt8£F}ÍàÁ2úôé ñ’“¯âä¤ÞUO¥¥å>œJDD{÷ž¡¸¸”Î[òŸÿø3`€VVºÕ8zôË—ï®l:EE½«Ñð>}:`mmÎÆÇ™={€ÆæU‰DB¿~ìÙs†iÓ¼«=Nûö˜;×—O?¤{÷6895%%å:qq+š2HK»@‹VÈdvÌ뇇‡öö kô%m04ÔgÅŠ \MXX #FtVéøÅÅ¥*ïeÜ™I“~"++Ÿ† ëj»œjiܸJ¥’ë×ó±³³Tû|ii7°±1WIF h> ‚ hЃððŸ>NJJ­ZYÿî¹¶ËA¨±¼¼Ú1dˆ;³fm¦S§–Ï6JN¾J@€êCËÊä9rÈÈöì9CQQ îîv̚僯¯‹Nþìøí·‹,_¾›“'ÓèÙÓ^ãM§ôõ¥wæçŸgúô~5òÆÎ«¯¶çÇ''§ Ú«êrs‹hÚ´ÕcèеH$îÝ+ÅÌÌ—f 芫«-îîv"KHEÜÜl?¾Ÿ|—W;•¯ˆÔׯyÿ–uA¿~ŽÔ­[›°°“LÚWÛåT˃¦Yf¦fšO/æ¨l'†h> ‚ ¨™B¡äðáTÂÂbسçLexøÒ¥ÃkìЂ ºhþüAô치O?déÒá›÷AظƒƒjÂÆËËüöÛ¢¢’ص+™‚‚{¸º6cÚ4oüüœuöŽý?›NSððh®Õš‚ƒ;óÅûØ³ç ¾¾ÎZ­¥:zôhCíÚ†ìÞ}†Ñ£»>ñëËÊäœ>}íÏPð bc/síZR©;;+”JèСË– §M›H¥âu™5ˇ½{Ï2sæf~øa¼Êƽ¿ŒZµ T6ÞËÄÀ@aÃÜ ‹áÝwûÔÈÿ––¦èëK¹y³H#ó]¼˜Cûö U2–h> ‚ ¨IzúM6o>ŦM§ÈÌÌ£S§,Y2 __g.‚ õê™ðé§Cxë­8Ю][id^U„Ëå NœH#22;“¸}û.ÎÎMyûíWñósÑéÌ¢cÇ.±bÅnNœøƒîÝÛèDÓéFêÒ»w{¾ûîhl>êÓ½{öï?Weó)++ÿo¡à$'_¥´´œºukãæfKPP'd2;\]m177fß¾³Œ³ž””,Ú¶UÍ¥P5cc–/dèе*=³´´\%㼬‚ƒ»°nÝ!޽@ÏžöÚ.§ZêÕ3ÑXó)55›AƒT³ªW4ŸATèAxxXX ÇŽ]ÂÚÚœ¡CÝ ì(ÂÃA4Àßß…_~‰gÆŒpöïŸA­Z†jŸ³ºaã …’“'4œ’¹q£ˆöí1a‚'þþ.ÙRñ<~ÿýË—ÿÕtúå—wèØ±…¶ËzÄĉ½ø/qqÈdê:W5oofÏÞÌ­[wHK»Q™Õ—NvvzzRìí “Ù1jTÜÜliÙҪʠë>}:0fL7æÌÙ‚»»N75_]º´d̘®Ì›·=ì±´TÍiœÆÆbåSuµjeMÇŽ- 9Qc›O––¦äå«}ž7Š(((¦uk•Œ'šO‚ *œ|•ÐжoãÞ½2¼¼Úñý÷ãðòj÷ÔÇ ‚ ª±hÑ<=—²té.>úh ÚçKJºòÔaãJ¥’ØØt¢¢Ù±#‰ìììí0fL7t¥E‹ç?ÎZÝbbÒX¶l¿ÿ~‰nÝZëlÓéNZ “Ù²nÝA¾ùfŒ¶Ëyj·HHÈàäÉË”––ãêúåå ,,L‘Éì3¦îîv895}¦0àyóü9~ü“'ÿÌÖ­“kdVM2w®/{÷žeîÜ-|ýõ˜çïîÝRœrö" îÌŒáܺu Õ45ÉÂÂT#+Ÿ.^Ì™O‚ Ú–Ÿ_ÌÖ­±„„œ¨ ÷ݾ 桲;[‚ ³³±©Ã¼y~Ìœ¹W\]›©u¾ääk üøm J¥’ÄÄ«DE%™Èõëù´jeÍÈ‘ñõuÁÞ¾ZëS•¸¸t–.ÝÅÑ£xå•VlÛö6;·ÔvYOeòäW?þ;ÒÓoê䊲;wî“”t•¸¸Š-t ܸQ„íÚ5ÂÒÒœ–--Yµ*[Ûç;òÜÈHŸuëþŸU,\ÅÇRѳªbbbÄòåEtt2>>NÏ5ž\®PQe//??gæÍÛÆæÍ±Lœè©íržY½z&ܺuWíó\¼˜C:µUv°…h> ‚ <…BÉ‘#©„†þ>p «AÐ1AAøå—¦M eÏžéj[)PXXBzúM ?}ú DE%rõêmìì,:ÔWÚ·o¤–zÔ!1ñ Ë—ïæÀ:vlÁ¦M“èÖ­µ¶Ëz&}û:`kkÉ—_Ðh}U %.d“˜x¥2¯éâÅär ÔA&³ã­·¼pum†³sSŒ øúëì\¹‡† UsjZ›6 Xºt8ï¼³æ Póò°j’ž=í êÄܹ[èÚµuêTÿTA¥R)²CŸS­Z†È 9^#›O––¦¤¦f«}ž ²iÓF5[î@4ŸAžÊ•+·?YÞ±£AÐe‰„eˆóê«ËX½úWÞ¿ŸZæ9}º"lÜÙ¹bÛݹs׉ŒL **‰Ë—oдi}üü\8еÊ•.;s&“eËvñë¯çpumFhèÄ›‘"•J˜<Ù‹ÿügÓ¦yÓ jš8OãÖ­;•§ÏÅÇg˜x…¢¢jÕ2ÄÉ© žžöLŸîLf÷غüý]˜??‚ÇSéÓ§ƒJêþ8‚U«FT{œ;wî×ÈSÚtMppg~øá'O¦éô¶áªÔ¯ošØv—«²¼'Í'A„Çz~’cÇ.beeÆÐ¡"<\¡†hÖÌ‚¹s}ùøã_èßß‘«|Žää«XX˜òóÏljˆHàÒ¥\5ª‹¿¿ ¾¾.¸º6«2øY—¥¤d±bÅnví:“S~øa<½{·×vYÏmØ0Ö¬ÙϪU{Y²d˜Zæ(+“súô5¯Tn¡Ëȸ…D"¡ysKd2;æÌñE&³¥]»Fèë?].dƒuððhNDD‚ÊšOóç˜x• ~ 2rŠFú_VuêÔfáÂ!¼ñÆ÷ ,£{÷6ÕÇÌÌ…B©Úâ^BŽŽMprjJHȉ×|ªWÏ„¼<Íl»óòj§²ñDóIá’“¯~ŠíÛã¸{÷>^^íX¿þu¼¼Ú‰PNA„fôè®DD$ðÞ{¡DGOUÙûxZÚ ""X·î EE%lÜx‚œY±"ww»×p‚Š +ö°cG"mÛ6dÆ×éÛ·C|.U10Ðãý÷û1uj(o½ÕK%ÙO×®åý-§é ÉÉW)--§NÚ¸¹5cÈwÜÜlqs³¥nÝêoµð÷weѢܿ_Ž‘‘j.ã õùúëÑx{¯äƒ¶±reJƪæããDÿþŽÌœ¹‰ýûgR»võš}wïÞWqe/§ààÎ|òIóçÆÜÜXÛå<5KK3òòŠQ*•j{.,¼GNNØv'‚ jùùÅlßGHH gÏfÒª•5“'{1lXG¬­Í´]ž ‚PMR©„U«‚xõÕeü÷¿¿2mšwµÇJO¿Idd"QQ‰œ=›‰•• vdÅŠ »&-í«Víeûö8Ú´iÀºu£0Àé…i:ýÝ An¬Y³ŸeËv±víkÏôØ»w+BÁãã3ˆ‹K'!!ƒÜÜ"ôõ¥ØÛ7ÄÝÝŽQ£ºàæfKË–V*ÿþ à̼yÛÙ¿ÿÜs‡Vÿ]³f¬^̘1ëéÔ©U6¶ð¨… ‡à鹄åËw1ožúOã/ Àùó#ؾ=ŽÑ£»j»œ§V¿~märyyÅÔ¯o¢–9.\¨È”jÓFubˆæ“ /-…Bɱc 9Á®]§10ÐÃ××™Ï>‚‡Gsm—'‚ ¨HóæVÌšåÃgŸí`Àçg:]îêÕÛìØ‘DddIIW©_ß„œùè£8:6¡}ûèßß±F6ž22n±jÕ¶m‹ÃÎÎ’5kFáïïZ#ŸËÓ’J%ÌžíÃë¯o`òäWü®P(¹t)硬¦ÔÔìÊPpW×fL˜à‰››-NNM«½‚åYX[›Ñ¥KK"#TÚ|èÓ§“'{1wîV«e‹ªPÁÆÆœ?ôcÖ¬ŠÓ8]\ží4NSS‘5ª*ffÆøù¹r¢F5Ÿ,,*nŒçåÝU[óéâÅj×6¤qãº*S4ŸAxédfæCXØI23óÉìX¼x(~~."<\á5~|vìHbÚ´P"#ßEOïñY;YYùDEU4œ®P§N-ú÷wbÖ,ºukS™Ó—ŽR©¤mÛ†šz*qíZŸ¾—Í›OѸq=V®A@€Û¿~O^$}û:àîÞœùó# ›ÀíÛwÿÜ:—A\\‰‰–`ll€£czôhûïöA&³£Q#Õ]Œ=+??>ù$‚ââR•7¼fÍò!.. ~`×®i5jRM3bD'~ù%žéÓÃÙ½{Ú3m–J%•¨±º—Kppg\ÍéÓ×jÌ¡^›ùùÅj›ãüùlìí¨t§h> ‚ðR(--g×®Ó„„œàر‹Ô¯oÂðá ê$ÂÃA^zzRV® ¢OŸå|õÕ!&Mòzèó99…ìØ‘Hdd"qq阚áííÈÔ©ÞôèѦʋÔ”,LMhÚ´¾¦žÆsÉÊÊgõê_ 9AÆuYºt8C†¸?uèõ‹¢¬LÎÿýß+L™²‘€€5äærùò Z´°ÂÕÕ–Y³|ps³£}ûF:•÷8`€3|°•}ûÎ2p «JÇÖÓ“ò¿ÿ¦oßeL™²‘ ^¡WÁi“D"aéÒáxy-åË/ðî»}žéñJ¥Wæ´iÓ€,Z4TÛå<3³Šæ“:³¿RS³UºåDóI„ÜÙ³™„„İ}{EE%"<\á%Öºµ Ó¦y³lÙ.úöu NZDG'•ȉP»¶!}û:ðöÛ¯Ò³§=††ÿþ«rJJöö u>)'§5köóóÏ¿ciiÆÂ…C ìøÒüÌÌÌ«Ü:—Á™3×())ÃÐP„„ Þ|ÓæÈd¶Ô«§ž-,ªR¿¾ ½zµ#,,FåÍ'¨ØÚ·aÃ8þËâÅ;™;×Wåsìì,yÿý~,]º‹œŸúf¨8‘Põ‚ƒ;³rånæÍó¯ßß;5îÜQ_óéüùëôêÕV¥cŠæ“ /œáááá§HN¾JË–ááC‡ºccSGÛå ‚ Z4bD'~þù8|Nqñ}ŒŒôéÝ»_=/¯v<õXgÏfâà »Ù8·oßeÍš_ùþûcÔ­[›yó2jT—ºéT\\úg(xúŸ §+ää §'ÅÞ¾2™#GvÆÍÍ++s<=!—+èÝ»½¶Kj#Gvæõ×7põêmµ¬ºss³eåÊ Þyg#öö 2Ä]åsÞ|Ó“ÈÈDÞ?œmÛÞ~ª•fúúz—j º—ÇСî,\ETTÇ{h»œ'ÒÓ“bll ¶•O·nÝ!7·ˆvíT»¥\4ŸAx!<?Itt2zzR|}ùøãtêÔBçïJ ‚ êSPPÌ®]§‰ŒLä·ß. §'¥¬LÎðá,\8¤ÚwºÏŸ¿N@€›Š«}~……%|ýõ!¾þúÆÆÌë˨Q]ž©±V(•J.]Ê%!á ññéÄÆ¦sáB6åå ¬­Íps³cüøî¸ºÚââҬʌ¤?ôgÚ´0†u¯1Ù]^^í±²2cÓ¦“LŸÞO-s âNjj6Ó¦…agg…Lf«–y^vzzRV¬ÄÇg?þø;cÆ<9ôZ__Š\®Ð@u/úõMèß߉5¢ùÁóêZùtþ|ÅIwmÛV} Cu‰æ“ 5Zff›6"<ü$W®ÜB&³cþüt­Ü-‚ ¼| Kسç4;v$qèÐy$ ½zµeõê‘ôéÓ5kö³~ý¦OïGãÆÏÞ|ÊÌÌ£°°Dåw†ŸÇ½{¥|÷Ýo¬]{¹\ÁÛo÷fܸî/ÌaùùÅÄÅU„‚?ØFWXx##}›Ò­[k¦LéLfGãÆõžjÌÁƒeDD$ðÎ;‰ŽžZ#V…éëK6̃ÐЦNõV[.ÓìÙ¸p!‡1c¾eÏžéZ Z‘uèИ‰{ñÙgQx{w aÃÿ>›˜‰Àq5 êÈÈ‘_óǹ´l©ûy°¦¦Æj[ùtáBõë›`mm¦ÒqEóI„§´´œ={ÎÑ#©Ô¯oÂàÁ2‚ƒ;«<OA¨9î޽Ͼ}g‰ˆHààÁó(•J<=Û²|y ÞÞŽÞõÞ{}Ù±#‰Ù³7óÓOžy®s箪¿3\eer~þùwV¯þ•;wî3n\w&MòÂܼ–¶K«¶òrçÎe¥r ]ZZE(¸%nn¶ÌœÙWW[W»i$‘HX¾<ˆW_]ʲe»jLÆQppgÖ®=À¡Cçñòj§–9¤R _~ù~~ŸóÚk_õžÊOØ*L›æÍÎIÌšµ™|ã_¿V+^^f=zØÓ¨Q]ÂÂNòÁºÿ>P»¶!……÷Ô2vEž¡ê¯©DóI„#%%‹lÝKQQ žžö|óÍXz÷n_#îT ‚ ªwï^)ûö#22RËtíښŋ‡Ò¿¿#uêÔ®òqFFú¬XH@À¶oæísçÎ]§Y3 ­G_^®`ëÖXV¬ØÍE¼öÚ+L™ÒKKS­ÕT]YYùÄÅeüÙhºBròUJJÊ077ÆÙ¹þþ®¸¹ÙâêÚ Õ>?kk3–.΄ ßÓ»w{:vl¡ÒñÕÁÎÎ’Î[£¶æT\àþôÓ¼½W0iÒOâ<5©x? bðà5üòK<ƒ=þýÈܼ99…¬îå •J ìÈÆÇ™5ËGçO­Xù¤žì¯””,œœšª|\Ñ|A§–°}{¡¡1$'_ÅÎÎ’·ÞêÅðá"<\á%URRÆ)DF&òë¯g¹¿œ.]Z±`A>>NO}bYÇŽ-ø¿ÿ{…yó¶Ó³§=õë?ýIg))YZËR*•DE%±lÙ.22n؉©SûÖ˜mQÅÅ¥œ>}íÏÓç*V5egW„‚·icƒ››AAquµ¥uk4;ú÷wdèPw¦L aïÞ÷µÚT|Z#GvaêÔPnÞ¼£Ö†c£Fuùþûñ ,NÀS§NZðÚk]˜7o;=z<þýÈÔÔX¬|R“ÀÀŽ|þù^L¡OŸÚ.ç_™›s÷®ê·_*•JRS³ ì¨ò±EóI£T*ùý÷? =Att2~~."<\á%VZZÎáéDD$°wKéܹ%~èVVÕ˦˜;×—½{ÏòÑG¿ðßÿŽ|êÇ?ŸEÿþŽÕšóyìÛw–%K¢9>‹AƒÜøé§7°³³ÔxOK©T’–vƒ¸¸ 3ˆMçüù¬ÊPp[ÆŽí†Lf‡“SSLMµ—Oµ`Á`úö]ÎäÉ?òãoèüï>>N|ðÁ6¶l‰eâDOµÎ%“ýu^Û¶ þøV¯®úý¨bÛÈ|R‡¦MëÓµkkBBNè|óÉÄD=Û/¯_ÏçÎû´m+¶Ý ‚ð»~=Ÿðð“lÞ|Šôô›¸¹Ù2~þþ®5⤠‚ Zeer޹@dd{öœæÎûÈdv̚僯¯ 66æÏ=‡™™1‹ a̘õ ,£W¯¶O|Lii9ii¹ ÿí·‹,]º‹¸¸túöíÀš5£tòt¶üüâ?OŸ«ØB—p…üüb õqtlL—.­˜4É ™ÌަMëk»Ü‡˜š±~ýX|}¿`åÊ=j;INUŒ 2DÆ?c„žj_!ö༩SC±¶6§[·Öjïednþðû‘§ç£ïG¦¦Fj š`ĈNL™²‘7Šª}SCLLŒÈÌÌSù¸))Y´i£úŸ/¢ù$‚V=ß´é$‡¥R¯^m–ØI§NA4£¼\Áo¿] 22‘Ý»OSPpW×fL›Ö??ç= jóæÍÕž×ÕÕ’wÞùžÙ³]02ú÷Á«WïP^®àêÕÓlÞ|©Ús>ɰaÈÏ`É’h޽@öìÜù..ÍÔ6ç³(/Wpþ|±±é$&fW ®T*±µµÀÕÕ–éÓ½quµÅѱIÈgl×®+W1iÒO895ÕùÕãÇ÷àÇŒ¯¯³Úç›3gׯç3~ü¶oŸRã~W‹‰‰áÊ•+Ú.ã‰\]-yûíªßRRrÉÏ¿û\ïw5Á°aô2oÿþN˜˜leóæSLšä¥•ž†÷î•©|Üóç³hܸžZnüK”J¥Rå£ ‚ }ââRLMpqi†Lf‡«k3ÜÜìjdèùß}üñ/„…Åù®ÎŸ¤;qâdfæõžFæ++“3räWüñÇ vìx÷_ºfäÈ‘„„„h»Œ'úëý(‰¾Çèé™a`Ѐ’’‹Ú)NC´Ù¦øàƒ­9r£Gçh­†'Y° ’¸¸ ~ù啎;yòO•<ñÔÅjˆWx‚ hLaa ‘‘ „†ž !á vv–¼þzw‚‚:Ö¨_\A„ç'—+8q"¨¨¢£“¹yó:4fÂOüý]ªc´qãF‚ƒƒU\­f…„„0eÊ6®_ÏãÇß wïö¯¡¤¤Œää«ÄÇ_!>!ã IDAT>¸¸ ²²ò‘J%´iÓWW[†÷ÀÕÕ–6m¼p' }ø¡?çÎ]gĈ¯t¾ÁòÆžøù}N\\2™­Úç30ÐãÛo_' `5£F}ͦM“T~¡:³qãFm—!}þž:ŒÑ™ï¾ûS§.ãáÑ\«µ<Žžž”¢¢{*755[m'hŠæ“ j¥T*‰‰I#$ä;v$2ýèÒ¥¥Î‡y ‚ ª#—+ˆ‰I#**‘èèdnÜ(¢}ûFŒ×??Z´°Òv‰:#/o'{ölÖØÏÉ´´ÄÇgP±}.%å:eer,-Mquµåÿþïd2[\\lµ ®)zzÒ‡,Û·OÑÙüI™Ì–NZ°fͯ|÷Ý8ÌinnLHÈ›¬aôèoÙ¼yµjjdnAP7‡Æ884&44Fg›OêØÆ\^®àÒ¥\&Nì¥ò±A4ŸAP“œœÂÃOCzúMœœšòñǃ4ÈMgyATO¡PþÙpªXá”›[D»v ;¶~~.´li­íu’BQ¢¶ÆSaa ññé5›òó‹10ÐÃѱ Í™8ÑWW[lm-ÔRCM`nnÌÏ?OÀ×÷ ÆßÀÆoêlnÕĉ½7néé75vú¡MBBÞÄßÿ ÆŽÝÀO?½¡³ßAxV#Ftæ³Ïv°`A&&º×p¯UËPå™Oii¹”––«-ËM4ŸAP™²29ûö%4ô‡¥bffÌСîŒѹÆR ‚ Õ§P(9y2íÏ §Drs‹hÛ¶!£GW4œZµ 'M)/WpáB6±±é$$Tä5]º”‹R©¤iÓú¸¹Ù2uj_ÜÜ*BÁEîâÃ6¬Khè› ²–wÞù™µk_COOªí²ѧOš5³à›o³páÍkggIxø$^ÛoþÀ7ߌÑÉï <«ÁƒÝ˜??‚ÈÈFŒè¬írªTV&Wéx.ä ¯/¥uk•Žû€øé"ÂsKMÍ&4ôÛ¶Åqûö]zö´çË/_áá‚ /…BÉ©S—‰ŠJdçÎ$rr ±·oÀk¯uÅßßEm¿Ì ËÉ)¬ O')éje(¸“SSúõs¬Ü>gm­»Çˆë’6mðÃã ü“'ÿ¤“ (©T¤I^Ì›·éÓûQ¿¾‰Ææn×®!7N`Ĉu¼ûn«W|á2À„—O:µéß߉ÐГ:Ù|255¦¼üßÇxVçÏgakk©¶ë7qU(Bµ<?I\\:¶¶ŒÛáÃ=hܸž¶ËA4@¡P{¹ò”ºììÚ´iÀ¨Q]ðósÑùSÂjº’’2Μ¹F\Ü_Ûç23óJ%´nmƒ««-ƒËps«×µ†IMâæfËÏ?O`äȯ˜<ùgÖ®¥sßÏ¡CÝY²$šï¾;Êôéý4:·››-6ŒãÿþïæÌÙÂâÅCE®§PãщÀÀÿqñbŽÎÝ@‘HàÞ½û*3%åºZw«ˆæ“ OíAxxxøIvìHB.WàããÄÌ™ýéÚµµ¸Ë%‚ðP*•ÄÆ¦ÿ¹Â)™¬¬|Z·¶!8¸3~~.ØÛ‹†“º¤§ß$..„„+ÄÇgpöl&eer,,LqumÆÈ‘‘Éìpvn&òÕ S§lÜø¦Î6 Œ ˜4É‹/¾ØËøñ=¨S§¶FçïÚµ_=†×__¾¾Ÿ~ PBÖµkkš6­OxøIþó?m—ócc•yáBƒ¹©|ÜDóI„'ÊÉ)`Ë–XBCcHK»“SSæÎÀàÁ2ÿb#‚ hžR©$>>ƒÈÈDvìH"++ŸV­¬ ꈯ¯KÌõ»té¿ýöcÆŒQé¸wïÞå‹/¾`îܹÏ5ŽDbÄ‘#©•«šâã3¸}û.z884ÆÍÍ–ñã{àæf«±€iááÔ¤I?±fÍ( Ù3¦+_}uÿýï ³gÐøü¯¾ÚŽõë_gܸ (• .RcPêzø»¢¢"Ö®]ËìÙ³Õ2~^^ß|ó 3gÎTÙ˜ÿV³ªÞÿt…T*!0°#?üpŒY³|têµnh¨Ï;ª[ùTRRFzúMµÞ@ÒV½ :¥¬LΞ=g=ú[ÜÝç³vízöl˯¿Î`÷îiŒÛ]4žA^`J¥’¸¸ >þø<<æãç÷û÷Ÿ#0°#û÷ÏàÈ‘9̘ѿF6žÎŸ?ϺuëT>nQQóæÍ{îqêÖõ&(h!!'¨]Û)Sú9… ³sçT>ýt0ƒËDãI 4 NeäȯUzø¼jÕ2äí·{³aÃQnß¾«•z÷nÏwß#$$†9s¶ T*µRÇóR×{ÄßðñÇ«uüõë׫|ÌÇÕ¬ª÷?]Ø‘[·î°ÿ9m—ò…Bu¯­ ²‘ËbÛ šséR.¡¡'ؼù·oߥk×Ö¬];Š~ýEx¸  N©T’p…;‰ŠJ"33æÍ­6Ì??Ú·o¤í_EEGIIù sm—"T¡S§lÝ:™‘#¿bøð/ùé§7°°0ÕvY¼öÚ+|ùåþûß_ùè£Z©ÁË«ß}7Ž×__B¡dÉ’a5vTMfggGjjª¶Ë¨Ñ7®Gö„†ÆÐ¯Ÿ£¶ËQ› r02ÒWë ±òIîÞ½Ohè üü¾ GEDF&2zt7bb>$<ü-üý]EãIáõ á´`A$:-À×÷svï>Ã!2öí{ŸcÇæ2k–Ï ÙxR(L™2sss¬­­Y´h·nÝ¢wïÞ¬\¹’Faeeņ xÿý÷±²²¢aÆ„……ýëØß~û-¶¶¶˜˜˜0vìXŠg;•¨¼ ÂKìäÉ4¦N ÅÅå#æÌÙúg Þ[ÄÄ|ÈôéÞâÔ:A„Xbâ>ý4ŠÎ?eÀ€UìÚušAƒÜØ»÷}~ÿýfÏ@‡µ]¦ZÅÆÆb``@vv6Û¶mcÉ’%lÙ²…²²2™™™ÌŸ?ŸqãÆaeeEnn.Ó¦MãÃ?|ì¸r¹œS§NqñâE’““Ù¾};‡Öà34ÅÖÖ‚_~™B­Z†øù}AròUm—ÀðáiÙÒŠE‹vhµO϶lÜø&{÷žaܸ ”””iµžg¥Š÷ˆ¢¢"ÆŽËòå˹{÷.áááÌž=›7n<4×ÿ³wÞáQ”ë¾·¥7RI ½C „Tª*Eši–s¬¨`l¨?Ä£¢{ïGQšŠ4ED…$J()¤÷^6m7Û~L²:¤ç¾®\›Ùù6Ùï™ç}ÞÌÌLæÎËûï¿Oee%¼÷Þ{TVVRRRÂäÉ“yê©§P*•¼ùæ›Ì;÷Š®¦ÆÆFöîÝ pMc®©©á‹/¾@*•R\\Lll,¯¼òŠQ»=ñø7nܬ­ÍY¿þpW¥ÃèèNw ŠO""ÿ8JJ”|òÉ‚©S?âÔ©–.½cÇ–óé§w3bD€ØµNDDD¤‡rüxžQpš0á=¶o?ÎäÉaüúëbx¥K'Ò³§s±³³ã7ÞÀ‚ádz`ÁV¯^ އgŸ}‰DÂ-·Ü‚\.gñâÅÆåÚÚÚËnûÕW_ÅÄÄ___ú÷ïOMMϽbþOÇÙÙšÔ›iÓ>fçÎ]=$d2)/½4™­[“˜˜Ó¥c2Ä—ØØ;–˼y_P[«êÒñ\ íqŒ011áÀL:SSS|||P(Ö¬YÃm·ÝƤI“033ã¹çžÃÙـ͛7Æ¿þõ/LMM™2e &L`ݺu×ôz®å¸faaÁ›o¾‰……Æ cÁ‚¬\¹òªöÓÓŽ&&r¦M gíÚø6ÃìJ¤¥•$ŠO"""m¤%<üßÿþ†¨(!<|Ĉ@~ùe»v-áßÿ."""Ò9q"Ÿ×^ÛÆ!¯2~ü»lÛvœ‰CÙ¹s¾È /LdÀ€¾]=Ì.Á××…âl»êŠŠŠŒË–––H$LMM‘ËåÆåË!“Éprr2.wfÖMuuC§íKä,ÖÖfüðÃC̘ÁƒþO?ÝÓÕCbÔ¨ FŽ `Ù²MíL|=„„ôaÓ¦…äåU2}úÇ”•]^¼í.´Ç1ÂÔÔ”ÄÄDÆŽ‹¯¯/wÜqÇEËв³³ 0.K$|||ÈÏÏoõ@`` yy×î´»Úãš&&&­^{nnî·ß•Ç¿ŽdîÜh23ËHHÈêê¡´;J¥Š‚‚*:®Óˆã""=šôôRÖ­K`ÆC”•Õ2l˜?ï½7‡ bf¦¸òDDDDDnHNž,à矲mÛq²³Ëqw·gÒ¤ALœÊ A]=¼nCyyy«åÒÒRìíí»h4×Gvv9ññ™8Îúõ‡4È;uõ°þ‘ÈåRÞxc&~~.,_¾…3gJxë­;»´=ûòåS¹õÖ·Y½:Ž»îÒeãðñqbË–Ç™=ûs¦Lù•+ÄÏϹKÇt%Úã±yóf^xábcc:t(2™ ;;» Ö³¶¶¦¢¢uFWU•#fccÃÉ“'[=VQQ­­í5åZ8ÿµ—••ammÝaûëî»êΚ5qDGûtõpÚ•””B±ìNDDäÚ¨¯W³n]S¦|ÈÈ‘+ؼùsçÆpðà‹¬[÷Ó¦…‹Â“ˆˆˆHäÔ©Þxc;C‡¾Æm·½ÍæÍG?~Û·?E\Ü‹¼øâ$Qx:ììl¶m2qjkkùâ‹/˜0aÂ5ogóæÍL ;½Þ@JJÿûß_<üð÷„„¼ÄС¯±xñZ6m:€e‡Cäò<ðÀH¾ÿþ¶o?Îw~Ú¥.Ÿ€€Þ<ôÐ(V¬ØNee}—£WW;¶lyWW[&Mú€¿ÿNïê!]–ö8FäççÓ¯_?FŒL&ãàÁƒ(•Ê Ö»å–[ؼy³1 êàÁƒœ>}‰D­·ÞÊo¿ýFff& ‰ÇÆÆrË-·´ñ^~Ü-¡æuuu|ùå—Ý_gÿº³gG³mÛñªtôjHK+ÁÚÚ¬Ãó~E瓈H!11›Õ«ãùùç£h4:ÆŽ aÍšùb†“ˆˆˆHæôéB¶n=ÆÏ?#+«Œ>}z1iR('",Ìã†,w¨¯W³wo ÞÞŽxy9biiÚaûЉ‰aÑ¢Eü÷¿ÿ%--°°0zè¡ ÜWâÉ'Ÿä $$¤]ǧÕê9q"Ÿ„„Lþþû qq™ÔÕ©Ë¥ t:¡”J¯7 ×ë01‘àÒ®c¹>FæçŸŸà¾û¾eìØwøæ›û ëñ÷É'oeóæ#¼úêVÞ}wv—Œá\ìì,X³f>‹¯cîÜÏyë­;™5+ª«‡uQÚã1eÊþóŸÿpÓM7abb‚B¡ÀÇLJŋóÉ'Ÿ×›0a“&M¢ÿþ„††R__Ohh(&&& 4ˆÅ‹Ndd$GŽáÎ;ïdܸqñ²ðôôä…^àwÞ!==€€.\x#ª£ŽÝ‘;îÌòå[زåh—; Û“ää¢/¹zjb–ˆÈ?€òò:Ö¯?Äš5q¤§—ìÊܹ1LŸ!f8‰ˆˆˆôP’“ Ùºõ8?ÿ|”ÌÌ2ÜÜì˜81”I“Â<øÆœÎ¥ºº~ý^0.÷êe——þþÎxy9âííÔ|ëˆy«çJ$V­ZÅܹs¯z*•ŠƒbkkËàÁƒÛíu\/ÙÙå¼òÊwüòKñ>…B†N§¿bnB!ã¹çnç‘GnîèaŠ\%55 <öØüõ×V¬˜Îœ91]2Ž;’xðÁïØ°á1† ñí’1œÁ`à½÷vñÎ;¿²páž}vB‡¿æÍ›ÀªU«®ú9íqŒP*•$$$àììÌÀÉËË#33“›nºÉ¸NYYåååh4*++:t(ÁÁÁ¬ZµŠ˜á}“MZZ^^^d@] ½^OUU×4ÞmÛ¶ñòË/sàÀâââ033#22²S¾_V¯^ͼyóºm°÷‚?’“SÎÖ­Ové86m:Âcý@aá{mÞÖôéãëëÌ[oÝÙ#»$‡Eç“ˆÈ †N§gÏždV¯ŽcÏždÌÍL›ÎÇßÅÀî]=<‘ 9¹ˆmÛŽ±uë1ÒÓKqu§>ÄàÁž7¼àt.ùùÕ­–«ª¨ªÊáØ±\¤R z½ž–9‰µµ¸àíí„¥å rrêQ*/¦.…™™7ßÜ}Äš¾}íqp8ëö’H$h4º«z®N§§±QCUU=½z‰åwÝ[[ V®|·ÞÚÁ’%?qüxÿùÏ´NÏš0a ãÆ…°hÑvï~ºC…W‹D"aÑ¢±xz:°xñ:’“‹øè£yWýÙí,ÚãaccÓªdÍÝÝw÷ÖçíùùùŒ=š 6Я_?¾üòK´Z-áááÆu¼¼¼ðòò2.ñûï¿_r¿ 44ôºÇmbbÂÈ‘#¯ûù=‘9sb˜9óRS‹ ìx·Pg–VÂí·_ÿûäjÅ'‘„ÌÌ2Ö¬‰gÆÔ–*6ÌO éÁ$'²mÛq¶m;Ι3%¸ºÚqûíyçÙDDxõ(Áé\BBÜ.zÿ¹ef-ÔÖª8uª€S§—Í(ââJyðÁ«kº#r¹”°0Þ~ûq~úé0_ý'Nä!“IÑé.ìu.z½·ßÞÉÛoïÄÎÎooG||œñövÄ×÷¬sÌÆÆ¬“^€T*á¹çngà@wž|r5§Nðùç÷vx¾Êù¬X1“Ñ£ßäõ×·ñÚkÓ;uß—cúô¼½xðÁï?þ=¾þúß|Ü ãÿû+V¬ ²²???vîÜÙªÛÞù( /ù¸…ÅõUBØØØàççw]Ïíé ê‹§§kׯ³lÙ”®N›)-­¥¢¢N,»ù§S_¯fÛ¶ã¬[—@||&®®¶ÌšÅÌ™‘xy]ú‹FDDDDäÆ$))íۓغõÙÙ帺Ú1aÂ@&M %"Âû“á×§Ï¢ë.¹Hà™gÆóÄ·µó¨:‡?ÿLå¢©éú´¯¿þ7¥¥µde•‘™YJff9ùù•F•££ÞÞNøø?ÞÞNÍB•ææ&WغH[HK+fþü•””(ùàƒ¹ÜrK¿NÝÿ–-GyôѺUù] ååuÌŸÿ=ÇŽåòöÛ³˜:µýË`¯§ìN¤séîewï¿¿‹o¾ù“#G^î²n–›6aÉ’udd¼Ù¦íìߟÊìÙŸsâÄpp°j§Ñ]±ìND¤;’˜˜Íºu üüóQT*-cdž°r僌ˆL&6©é) ŽÉeçNApÊË«ÄÝÝž 2qbh+©»ŽcÇr13SÐØØt[0°hQÈ +<ŒÈÒ¥yùåÃÀµOjìí-™0aà÷k4:òó+ÉÊ*'#£”ììr22Ê8x0ƒ‚‚*£«ªwo[|}ðò:+HµˆS&&âÔ¡­ôfûö'Yº4–{ïýšùóGñÜs·wÚvÊ”0~þù(O<±Šß~[‚­m÷Éut´bíÚGxýõ­<öØ$&æðÒK“Ä÷H·cÖ¬(Þ~ûví:Ù)åj£®N…BÑöyaZZ NNÖ-<bÙˆH·¡¼¼ŽY½:Ž´´b‚ƒ]Y´h3fD`o/æ6ˆˆˆˆôôz‡e±cGÛ¶§¨¨//G&OãöÛ2hP×tÄê ZĦÒ9p dzillB&»¶‰¸D"aúôp¾þúUòó}((¨êô’¦öÄÊJNQÑGüßÿm䫯ö_ÓsÇŒ¹¸“F¡5‹HNŒÜ걦&-99df–‘™YFvv9™™¥ìÝ›LQQ ƒ©T‚››±ŒÏÛÛ __g|}èÛ×¹\¼8vµ˜››ðÞ{sˆ‰ñeéÒX2;µ ïí·gqË-o³hÑZ¾ùæ¾NÙçÕ"—Kù¿ÿ›BX˜'K–¬ãàÁt>ýôîN) ¹Z\]í5*ˆuëºL|ºRŠ«%9¹¨Ó²«DñID¤ ÑéôìÛ—Êš5qüöÛ)ÌÍLžÆûïÏùGM>DDDDz::žƒ3ع3‰;’()Qâïï¬YQL˜0>]=ÄNA£ÑqôhŽQl:t(µZƒ©©ƒÁ`, Óé®­äÌ`0°aÃaììÆQU¥¾¡…§sY¾ün¿=”9s¾¸j'؃^{8°‰‰üý].x¬±±Éè’D©2RRŠØ±#‰²²Z@¶<=ðósÁÇÇ _ßaʹS®¦ß¨ÌšEh¨;<²’Ûn{§ÓÊðzõ²ä“OîbæÌOùù׿†uø>¯•I“1p ; ®bܸwY¶l ÷Ü3ôåéÞÌžÍ#¬¤¸¸†Þ½m»d mošZÄàÁží0š+#ŠO""]@vv9kׯ³nÝ!JK•DGûðÎ;³™81T é!h4:HgûöãìÜy‚ŠŠ:‚ƒ]¹ûî¡L˜0  ž¨Û"6ýýw:{÷¦””GS“™LÚªkZ­@*•âèhe5®¡ žêê_¹í¶Ûûet)QQ>œ:õ³f}Ê¡CY—]W"‘0eʇøù¹pÛmý¹ãŽp||œÚ´ss‚ƒÝ¾0¾¶VetK¥§—‘QÆþý©|÷Ý_44b™­­E+1J§Ç”XNAA®ìØñ”± ï‘GnæÙg'tx^LŒ/O=uË—o&2Ò‹þý»ŸîééÀÆ xÿý]¼ôÒFöìIæwfãè( š"]ÏØ±!ØÚšóÓO‡xüñ[®ü„v¦®NÕæ8ƒÁ@ZZ1sæD·Ó¨.xÄé$T* [·cÍšxâã3qv¶aöì(fÍŠÃÃEDDDzMìߟÆ/¿œ`×®STUÕÒ‡‡º‰ âëëÜÕCìPšš´;–Ë®]§Ø·/…´´´Z Ζ´ä ÉåRÜÜz1~|O>9[[¡Åú«¯nåÓO÷\Õ>år)&& ¾ûî~FŒx¿½_R·ÀÌLΖ-óÅðÊ+[.ÄäŠT*„ZŸ8‘Ï;ïüŠ©©‚ÀÀÞŒÂM72`@ßv6¬­Í u'4Ôý‚Ç ªÈÌ,##£ŒŒŒR22J‰Ï$?¿½^(ãëÛ×þ1J¤||œps³ûG9\Î/ËÏè”2¼'ž¸•¸¸Lî»ï[vìxª[ºÔär)K–ŒcÔ¨@{ìGn¾ùM–/ŸÊ´iá]=4‘8 …ŒéÓ#X»6ž… Çtú1«=òØóò*©«SwÚÅ0Q|é`ŽÍeÍš8~þù(n»M éI””(Ù½û»vâÏ?ÓhjÒæÁcæöÛCñôtèê!vjµ–ýûSY½ú qq™ÔÔ4^bMr¹{{k pcêÔÁLvÉl§¹sc®J|’Ëe88X²ví#–Yq)´Z}»ä•—×±gOff~dg—ãáá`ìrøðÃ7qÛmý˜<ùC**ê.xî‚£¹ãaR~út«Vä?R8y2Ÿ¤¤<þûßÈå2‚‚zsóÍÁDFzåƒY›Ç}>}úô¢OŸ^ŒÐêþ¦&--]ø×Ô±c9ÄÆ¦ººĘ–ò=güüœ›;ó9wÈX» -exóçwNžL&å³Ïîf„÷xøáïY³f~—uîºÞìÞý4+VlãñÇW{˜7Þ˜‰»»}W­[¡Vk15§øÅìÙÑ|õÕÄÅevz÷HƒÁ€µuÛŽ‡©©ÅH$EñID䆥¢¢ŽØØDÖ­‹7†¸-Z4ŽiÓÂE«°ˆˆˆHàôéB~ûí¿þz’ãÇó03S0bD¯¾:[né³³uW±ÝÉÍ­âóÏgïÞJJjP«µ½ò*‘H05•ãæfKÿþ}¸õÖî¸ãÒBÓÅðñqÂÁÁ’ŠŠúK®#—Kñ÷wfõêù¸¸Ø\ÕvšøõדLœÚî“ìÊÊzÖ¬‰ã‰'nmÓv­03“Ñ«×D†} 9>>N„†ºЛà`W~ùå)^ye+[·3>O(¹ 3.÷ëçÊk¯MGÞß§³iÓaþø#“' 8}ºÐè@òñq&&Ƈèh""¼;T051‘ìJpð…“ÊÊz22J%|™™elÛvŒœœ c˜‹‹±|ÏÇGpKùû»ô˜Ðó  Wvî<[†÷裣yæ™ñ& 98XñÝw÷3qâ¼üòã{¦;bmmÆë¯ÏàŽ;Âyú韸ùæ7yöÙ Üwßñ‚n3_}õwÜ1¸]\s©©Å(²6—îöd‚ƒ]4ȃµkã;]|ª­UÑV³Ujj1}úØaeÕö"iÖž IDAT쨫Ab¸”oWDDäšh ÿé§~ýõ$ffr&OcÖ¬(Âýºzx"""""×ICC'NäsøpGŽä˜˜Mii-ÎÎÖÜzk·ÝÖŸáÃý177éê¡¶¥²‘ß~;Éöí'8uª€ÒÒZ4-ƒá"B“…B†££%ááÞLžÊøñ®¹S]ëý«Ø¹3‰ØØÃxy9òã/ºžL&eľúêßXZž=i¾TÙƒBሥe$ææÔÕ¢¶öïë㥑âêú8õõGP*¯­CÝ۱…¥å ã²L&E*•¢Ñh!hÖÅņœœrôz®®¶ìÞý4½z]¹Cnzz){ö$³k×IÊB«Õcn®@­Ö¢Óéqv¶eäH†õcèP?<<ºÖ½§ÕêÉϯ$#CÈ–S¥¤§—QRR%0¾¾‚KÊ××™€€Þøú:áçç‚…ÅùÙ\·.¥Kc éÃ_ÜÛ¡¡Æ[·cþü•¼þútî½·ûŸF£ãÃãƒ~£ÿ>¼óÎlúõ»0—ì|æÍ›ÇêÕ«;a„]ƒƒÃ d2JK¿mó¶¤R3ïB&³¢±1µ:—¦¦úJe#?þøP;Žì’Å'‘6’]Îúõ‡X»6â⢣}˜5+ŠI“ݰ';""""ÿd23Ë8zT™sHN.D«ÕãâbËàÁDDxíàAÆr¨¥²‘ââÊÊêÈÊ*%!!›ääB ª©«k@§»˜À$ “I±··"2Ò‹%KƵk>„F£cß¾bc³k×)ôz·ÜÒGÍ]w}qA)ŸD"aÞ¼V¬˜qÛaýúõçlWÏ‘#åüùg1yygKÔÞ|33³Žq‘<ñÄæÍó#*ªmù^ƒ}ûÔüüó1ôzý%דËehµzZ2µÌÌ$$üßU;­›8p ƒ={’Ù³ç499˜šÊ±¶6£¦¦F‡»»=C‡ú1l˜?Æùáêjצ×ÖžÔÕ©n©´4A˜JK+&;»F‡D"ÁÍÍ??güý]ðós1þîäÔýŠÉÉ…<üð÷TU5ðÙg÷0|¸‡íëãçÍ7wðÑGó˜:up‡í§=9}º¥Kc9r$›‡ÅâÅc/{! >>žÜÜÜNaçÒr zä‘~µýsš’RÍgŸ„c¯Á`ÀÎ΄  ;íðõµÁÖ¶cæ;3gÎìí¶7J¥ŠAƒþå˧r÷ÝC;m¿/¾¸‘“' ؼyáuo㦛Þ`„<ûì„vÙ%Å'‘ëA¥Ò°cGkÖÄqà@ÎÎ6̘ÁܹÑx{‹ÖT‘ž‰R©Â`УVëŒ-¿•ÊF jµ•Jc\W¥Ò´Z¨¯W7Oôzµµ—ʇ¹2 M45][;ökÁÆÆìaA.—µrY´`eezÁ$X&“^ô ˜……Éå‰ó Öµ¶6C&;;KK³QVÒ¨«S…¦#Gr8r$‡ÊÊzLLä ЗÁƒ= ÷"<ܳÃï…ššª«Q*¿×Ô4PSÓØüÓ@yy-ÙÙÕ T âÒ¥ CÂÄB"//ÆŒéψDEyckkÑî¯!11›Ù²å(UU DGû0}z8'†÷÷ê«[ùê«?šK®$H$°téí<öؘKn75µ˜~8ÀÚµ ¨TM€½^T*á­·îdîܘv--DE½B~~R©„¯¾ú7ãÇhÓö4sæ|FBBvspû•™<9ŒÏ?¿çº÷™]ÎÞ½ÉìÙ“Ì466áäd…B!§¤D‰N§ÇÇÇÉèŠ6Ì¿[Š8Z­žÜÜ ÒÒŠÉÈ(åÌ™ÒÓ‘J©TB'>??'üý{ãç'¸¦zãîn߭ʸêëÕ,Z´–;’X¼x,OÛËk¯mE¯?û¢PÈÐéôèõ¼¼œ¸ùæ@ã1ájÜ—=… W‘•UƶmOvÚ>Ÿyæ'rs+Y»vþu=¿¡¡‰ÀÀçùì³{˜81´GwQDñIDäZHJÊcÍšx6mJ¤±QÃèÑÁÌÃèÑÁÝê$E䟃Z­¥¶VE}½¥²‘¦& jêëÕ45éšïÓÒØØDm­ FGm­ •JƒZ­m¾ª­¥¾¾ Fx.uä:Fkl—}½\LX11‘]à D™îw¢Ø"°‹ðw¾ðïRW§2vñê ,-M‘Ëeç,·¶Îÿ›š›+Zµ6777iurnf¦hµljªÀÌLqβsó³Ë&&òVW˜ŠÖÿW…¢µX'“I[å œ/æ ‚ÝÅs.%Ð] z½ôôŽÉáðaAlJK+F¯7ЧO/"#½ ó <Ü‹>WÝ^Va@¥:+Ä666ÑÔ¤m^§É¸ŽðùÒ765ÔÖªhjÒRW§nUµ(•F·¶V…Z­¥¡Am™.†B!3^™Öjõ—,YP(„îp:•Jƒ©©œÁƒ½2Ä—˜öê0çnvv9±±‡‰M$;»œ€€ÞL›Îôéá÷23Ë>üu@x¿|üñ<&O»`½–޲ß}÷Gæ6»ÎŠ5R©__'öìy¦C¿¯ÇãÇs‘J%H$V­zˆ‘#Û´M¥RÅÌ™“œ\|EÊ„¸¸—Ú-_R­Ö—a£ÒÓK13Sàæf‡V«§   NO@@o† &žC†øaoß½'Ÿ%%ÊVbÔ™3%dd”RXX \XÂØŸ®/áûæ›ý¼òÊÏÜtS |0·C&ùƒ… WñÛo§X³f>ƒ{¶û>:ŠÒÒZ>ùäw~øá¶¶,X0šyó†´úëÉTW7Ð¯ß H¥^|q2óçjóv ÷Üó5ü‘zÉcB!3^`ô÷w!:Ú‡3"ˆŒônóþoHgÆŒOسç™Në÷Øc?PW§æû︮ç'&æ0iÒû8ðBgu^Å'‘+Q]ÝÀ† ‡Y³&Žää"üüœ™;w3fDˆáá"mF©TQQQKMM#µµ*ª«¨«S¡Tª¨­~”ÊFãï55­–[&¶CL±´4ÁÄDŽ9¦¦rÌÌX[›ab"ÇÊÊsó–ǧϹ‚‚9‰ J´œ¼µ´B„ ÉÙû@tçœV«§¾^uÁý-‚ß¹ ”ÊÖn0Aljµ\_¯6.ëtzêêÎ.Ÿ¿?Î@míÙåó÷a0pÞ²á‚2§ó—Ïä”JU«+¢µµ­–»…BÈÉÑéôètz Áå#“I‘ÉdÆ[éÞ²ñš,-MŸ½–Ï“ð9mùìš6‹‰”ÊFÊËk©ªª§ººÚZ Mˆ‚B(Ÿ“J…NpŽŽV òòª¨¯WammFT”7ÑѾÆòÁŽìpUQQÇÏ?eãÆDspq±aÊ”0¦O`À€¾W|~dä+T±iÓB¢£}Z=væL‰Ñå$ˆç’K–¨ýôÓ# pÑÇÚ‹ýëví: “?¹\Ɔ Ѷ XEEãÆ½KI‰ò’“?™LÊÓOçñÇoiÓ¾.G^^%{÷¦°wo2ýu†úz5nnv89YS[«"'§½Þ@p°+C‡ú1|¸?11¾mŽ;‹«)áëÓÇîœL)çN/áKLÌáᇿC.—ñÅ÷êÞîûÐhtÜ{ïל8‘ÏÖ­OtÖÄ´Ý(-­åÓOç‡bccÆý÷dÞ¼˜ïÈ9z4—ÛoϸlaaÂ/¶KŒššn¾ùMÊÊê®ú"Ûš5ó¹é¦¶‰ï7 ƒ¡C_cܸ,[6¥Söyß}ßbn®à“Oî¾®ç÷Ý߬X±””×;ÌIy¢ø$"r1ôzû÷§²fM<¿þz…BÆ”)aÌ™-†‡‹\’úz5UU ÍÄ*+ëšo멪ª§¼¼îœû„ÛóÅʬ­M±¶6ÇÆÆ kkáÇÆÆ++3ìì̱¶67Þob"C*&ØBÉŒ33£@QW'¸2Q⬳éR´ššÆKæ¾´p¾ÃZ„ª³_^r¹Ôèji™D·ˆ_-ÂØ¹Â•••™è 졜ÿ~Þ“g—Ïu ËMWUbÔØØ„Z-° j²²ÊÉÎ.';»‚œœ2jjTH¥\]íðòrÄËËoo',-[—3^³Kž”YYµZ¥Ò³Î­–÷8´vŒ™™u›i4:ÊÊj),¬¢¸XIVV©©Åäæ ¥rÕÕ 444µúáL†L&A§ÓÿŽ..¶¹bggŽV«£°°š””b›pt´"*ʇ˜_bb| víðÏšJ¥a×®“ÄÆ&²o_ &&rÆÀ´iáŒpMûÿë¯4\]…  IIyÜÿÿ((¨B¡]ôXÚ‚B!cäÈ@~øáÁ6½¦«aÉ’uüôÓ!ãûW&“bf&góæÇéß¿O›¶]ÎøñïR[«¾àø-8ÍøñLJ:íDEyåCT”O»”X\ ÉÉ…lØp˜M›ŽP\\Ch¨;Ó§G0eJX‡–"]M)šB!ã_ÿÞi'×_~ù¯½¶ ¦õq]¡bkkÉÎOµ9¸~×®“Üwß·Æ÷’L&% À…ß~{šýûSùôÓ½üõW!!}xì±1LœÚél­VÏáÃYƽS§ 11‘1x°'}ûÚ£Vk8y²€ÌÌ2 áþgTx¸WŠ®«SË÷ÒÒŠIK+æÌ™rs+1 ˜˜È©  Wüüœ vÃÃÃáš.–;–ËÂ…«¨¨¨ãÍ7g2iÒ v}55 Ì™óEE5¬_ÿè }nl0Ø¿?¯¾úƒ}ûRpuµcöìhæÎîV¯—Ç_ŦMGZ9“d2)~~.ìÞ½¤]Žƒûîû–ßO¾èqW"‘°zõÃÿ˜r»ó¹ë®/‘J%¬\ÙñNÛqãÞeäÈ–.xÍÏmll"(h)ï¿?—;îè´Î–¢ø$òÏåÔ©V¯ÂÃëëÕŒÌìÙÑŒÜ)VI‘ÎA£Ñ‘—WI^^%99F¡©e¹ªª¾,mpq~\]mqv¶iβn­qp°¢¶VEaaµQX*,¬¦  šââšæû«Z VVV¦¸ºÚµ§¬ŒËöö–89YR=᤻«hé ×Ø(5+•Íb—†šš³÷×Ö66µ75 ZMÍ%Nj£³L©T]6@ÜÂâ¬(T¦Í–àÀ²²2ÅÔT•• j™™É±²2ÃÜÜ33¹Qt05U`gg~A¸÷?µZË©Sœ8‘ORR>'N䑚ZŒF£ÃÚÚŒ> ènœ<<®iûuujjk›3Õ„[¥òìruuc«û±IŠÏïÞhf¦ÀÊÊÌø}Ñìn>—½½%îîö89Ù`f&76((¨¢°°N‰‰Üè„hš‚‚\qq±áĉ|Ê&..ƒÃ‡³¨¬¬Ç„Áƒ=›…&oöê’«ËEEÕlÚt„ØØÃ$'áînÏôéL›Þ©“ÓË•¢kkS^ên}cýúC<õÔš‹æƒÉå2\\lرã©6‹rßÿ7K—ÆÝë×?ưa~ÆÇ“’òøä“=ìØ‘Dß¾½xè¡QÌžÕe£ÒÒZöîMfïÞöïO¥ººww{¢£}èÕË’ªªz²ÈÍ­ÀÄDÎàÁž æGt´/^=êØØÐÐDzz ©©Å­„©¼¼Jôz … ??ãq! À…€€Þx{;]R”jllbùò-üðÃAf̈àÕW§]´Ûêõ¢Tª¸ûî/ÉÎ.gݺGzDÙZvv9?þxŸ~J ªªÑ£ƒ¹ë®!7t¡ ÞãØ±Ü î—J%¼öÚtî½wX»ìG©T1zô›Æî—-ÈåR¦M‹ ¾^ÍÂ…c8°ýóȺ;Û¶ç‘GVrèÐÿµ»ñ|F~‹Ûoeñâ±×üÜýûS™=ûsŽ}—Žç9ˆâ“È? ¥RÅÆ‰¬]ORR¾¾ÎÌžÅÌ™Q~¥X¤ýÐht­Ú(ç䔓›+ˆLÅÅ5ÆI€­­îî½ðôtÄݽŽxxØãáျ»}+ÑG©l4æÇdd”6ÿ^Fff¹Q°¡”ÍÕÕ77;z÷¶¥OŸ–ß…[77»v=é|T*M«2ÇúúsªFêꄲȆus@¼àÂR©Îv,S«5TW7¢Vk.1ÎG¥„rH¡ŒPntlµˆY––¦˜šÊ±¶6kÕN(­”âÏí.×âÖ²°0ÁÄä¬ÀnmmŽTÚù.®ÆÆ&NŸ.âØ±\ŽÍáÔ©22JÑjõXY™Ø¼¼éÛ×GG+”JZ­Žº:µñïznGµZktÈ ã©%ÐÿbB¢B!ÃÆÆÜè"´µ‚ù% ‰èÞÒ‘®ªªÒÒ£«ÉÄDŽ»»=žž¸ºÚbnnŠ^¯§¾¾‰ÒÒ²²ÊÉË«D§Ó#—Kñôt4–̺䊗—#r¹”ÚZ‡gsèPññ=š‹J¥ÁÁÁÊáÅÀî]VBªTªØ¹3‰ qð`66æLš4ˆéÓÉŒôî27à÷ß`Ù²M”¢I¥–/ŸÊý÷ì´±üñG*sæ|~ÉÇårÞÞüüómÄ^}ü;ÑÑ>lÚ´ð¢ëdg—óÅûX»6++3þýïáÜwßìì:GŒ»:žcÇrÙ³G£’’òɤÆð{kk323Ë8x0Ã(F……y4wÒó%<üÆ.Ó»*•ÆèŽ:W˜ÊÍ­0ŠRBй Fµ8¦¼¼"øîݧY¼x-¦¦r>úè® úÛB}½š{îùŠÔÔbÖ®}„¶e˜u4¿ür‚<ÈߟÁÙÙ†¹sc˜1#â†+3ì×磌/Œ:HÀÊÊœ¸¸Ú-t=))Ûoßø½ÚRn·qãB–,YKBB&ÿú×pžyf66ÿœó`FGXØ2zhT‡6¡ǽ÷cÁ‚1×üÜ+¶³cGþù|Œì’ˆâ“HÏÇ`0ŸÉªUqlß~€)S˜5+Šèh±tæB¥Òž^JZZ1©©ÅÆ+‡¹¹hµÂäÎÃÃ//ATrwwÀÃÃÞ(6¢__¯&3³Œ¬¬223ËÈÎ.'3³œÌÌR*+I¡Ñ·¯=¾¾Nx{;5‡;ŠÂ’H›P*Q«µ44Î+•JKCƒ p©Õ£ ¥Vke‡‚˜"ˆY*•àäj³ÎÍÚjkW6 гB¬©©¬Í=FGMPv©ÓéÐhtW µ¿çvg”ËeFNp"™Å$…B޵µàJk•ZjZ­ŽêêFª«(.®!?¿Šü|Á!™Ÿ_e,…•Ë¥¸ºÚáîn»»=}ûÚcccÞ\>ÚDI‰’Œ á˜TZZ Ž(??g£s¡¥¬Æ××¹•«¶¸¸†„„L²ˆÏ$%EÈkòöv:'¯É»ÍAmE£Ñ±o_ ±±‡Ùµëz½[oíÏôéጌ‰I×955Ï?¿uëX´h,o¿ý‹Ñ $“IéÛ·û÷?ß©n椤<Æ{÷ŠëõêeIBÂKm*‹6 <õÔ{l þþ.—]·¼¼Žo¾ÙÏ÷ßÿMS“–»ïÊüù£:óŠ÷%©¨¨c÷îÓ¸¢n¾9ˆÝ1 $&æ—Avv9 …Œ°0O† ñeèP¡L¯+rÝ:‹óÏ}Μ)!%¥È(l+2||œ\R®®vlܘÈÁƒ<ðÀHžyf|»•ß766ñïËñãy|ûí} âÛ.Ûí.dg—³zu?ý”@YYQQÞLŸÁäÉaÝ^@©­Uxi!A.—2wn o¼1³Ýöù¿ÿýÅ‹/nlnvs¶ÜÎ`0°~ýa^ye …Œå˧2yrX»í·»³lÙf~ûíÿ½´C發Ē%ã®ËÑ6iÒûôïß§]ßW(>‰ô\JJjذá0«VÅ‘]ÎÀîÜu×â äŸNcc))Ť¦O¸Îœ)ieI÷õ=ÛI¦å*àù“»t:=ÙÙå$'‘œ\HJJÉÉEÆ«‰r¹”¾}íññÄ%'ãï}ûÚ‹AÕ"7$‚`¥ÑœírØþ.¸†ÎfÒh4:ã: Lj[:8µpµáöJe#eeBvQQQ5……5TV 9F––¦¸»Ûãåå`ŠÏWÌÍF1ã\G—­­9r¹ìªÊË›Èϯ2–ÀV—óò*)(¨2fƒ)2ÜÜq©OŸ^ôík‡‡=nn½É ººÑèª>N¸»Û_à$3 ¤§—ŸIBB&‡eµÊkŠŽJè"#;?¯éR=šË† ‡Ù¼ùÕÕ DGû0}z8“& 2þ_º’êêî¿ÿ[’’òùôÓ»¹õÖþ|üñï¬X±Ý8úî»û¹õÖþ:®‚‚*"#_¹äãr¹ ­VǤIƒxñÅIÞA¬¾^Í?ä‹/öQYYÏœ9Ñ<úèènÓÉìR®¨˜_ÆŒéÇ€})(¨"..ƒÒbÔ AÄÄbTd¤w£ZhjÒ’–&œ§¤S99ètzc阩©œqãpÛmý/{®t-û}üñÕüòË Þ{oNgæÅt:ž}ûRÙ°á¿þz½ÞÀر!̘Á¨QAÝ2žãÔ©n½õíË®#•Jøõ×Åmî¼y.>øÛ·gîÜÞ~»u×µêê^{m«WÇ1bDo¼1ã†s“]ÉÉEŒó±± :T õòzš·ßžÅŒ×ô¼º:5ýú-åãïfòäö͈»¢ø$Ò³ÐjõüþûiÖ®g÷îÓX[›1mZ8óæ !8øÆ¯Od¼?žg >s¦­VßÊAìjœàäÝ9d IDAT].Œ³¬¬–ääB’“‹Œ"Sjjjµ™LŠ··#ÁÁn¹Ë_úöµï–'""ÝFÇ™3%œ>]ÈéÓœØêûý¹çÖ³råödÛ¶';}l*•ŸgZÝ'\ø–`ccÆý÷äž{†u¹ÈØÔ¤eÍšx>ýtÅÅ5L›Îãß‚·wÇw¼**êØ»7…Ý»O_àŠ3¦.$&æpð`¦“™YÖª›^LŒ/QQÞÝêsÖÑ45i÷ŽÉaûöãV#•JŒܼ¼ tm.ÝëÝ|ls¹ês!ƒÁÀë¯oçÓO÷ðì³:¼¼¨+Q*UìØqœŸ~:D||&–LžÆwFv«L£­[1þÊ+^$òôtàÀÚÍ‘S[«âþû¿åÛoï¿ä¢C‡²xî¹ de•ñØccX¸pL—ºf;ƒ ÞÃßß…>˜Û!Û×htxz.áÿ»Ÿ±cC®é¹{ö$s÷Ý_qüø+8:vL“–K ŠO"=ƒ¬¬2V¯ŽgÆÔ•)6ÌŸ9s¢™0a`?¸ÝH45i9uªÐ(2%%呚*t­²±1gà@wìKh¨;ôÅÃÃá²Y4ÅÅ5=šklµ~út±\ÎÅņÀ@Wúõsm¾u#  ·æ-"r”•ÕÅÜääBNŸ„SS9AA®„„ô¥_?WúõëC¿~n×\’ÚÐÐDaa5¥¥J «))©¡¸XIQÑY©¤Di\_¡áêj‡««-}ûÚKaÝÜ쌂“uujcimFF)¥F©ÅÅdaa‚··¾¾Nøø8ãë넯¯ 8]ÛJ©T‘˜˜MBB&ññ™;&ä599YáELŒ/Þ зÛ9)ëêÔlß~œõë—S¦ fÆŒÂÂ<ºzx°*?¼??g¾ýö¾ ‚»u:==ôO?=¾ËB‘½¼ž¦©I¸à¡×°··¤®NÅѣ˻4kébh4:6nLäÃw““SΤIƒxüñ[»å»s]Q{ö$“””‰‰Œ˜_n¾9˜Ñ£ƒ±¶6m¢1*=½¹\ÊÀî "ˆQÑÑ>ÿ¸ð»väùçcillbúôpllÌ™RYYehµgË÷ZΙ‚‚„æîîö—*~øáK—Æ2{v4+VÌèvÇ·ö¦  ŠŸ~:ĦM‰FþÎ;£¸ãŽÁ].ÐôÑnÞxc»±¤]&“"•JÐhtH$<<ì0ÀÈH/fÍŠn×*½ÞpÅìH­VÏW_ýÁ»ïþŠ››ÿýïDEµ_&YwcåÊ,_¾…cÇ–wHDGUU=ýû¿ÈO?=Êðáþ×ôÜåË·°o_ {÷>Ûî㺢ø$rã¢Riضí8«WÇŸ‰««-³fEqçQxz^[$‘ö§¥ÌäС,ŽÉiš„®U66f ЗÐPìËÀîW´áÖÕ©9~<£Gsšr).®A&“âïïBh¨;ýû÷!(H8i²·oŸ@E‘õõjÒÒJŒå©))Eœ>]huœ¬ v£_?W££ÉÏÏå²­VOyy­Q<**n‹‹kŒ?EEÕ­:D*2œmšK¶¸ºÚѧO/ÜÜìŒ.&ggkã„H£Ñ‘›[Ñ,.u/ed”+¹\Š»»ƒQXòöv2–غ¹][‹íâââã…ò¹¸¸ RS‹Ñéôøø8éÝ\FçƒO÷r‘´ ÓéÙ¿?ØØÃìØ‘dÌqš1#¢[w|]½:Žçž[ϤIƒx÷Ý9—¼˜p5¡ŽÄÍí)†õç±ÇFÒ‡Áƒ_æÓOïfÒ¤N-q¸jôz[·ãÃ#%¥˜±cCxòÉ[»•³ã|.ÖAÏÃÃ1cú1zt0C‡ú¢TªˆJôÌàÌ™är)!!}‰Šò&&Æ—ÈHïË:{ µµ*V¬ØÆÊ•5*ˆ7Þ˜Iß¾½Ðhtƈƒ– ©©B÷=ƒÁ`l$R-âTËyÖï¿'3þ÷DEyóùç÷þc²0sظ1‘M›Q*:ÔéÓ#˜81´KœvO<±šõë!‘HpwïEx¸û÷Ÿaüø–-›ÒmÜyy•<ÿüöíKáž{†òüó{ä{F©T1hÐÿ±|ùTî¾{h»o?7·‚˜˜WÙ¹s¡¡×vœ>üuÆÈ /Ll÷q]Q|¹ñHJÊcõê86o>Bc£†Ûn aöìhF ¼a[£ö4IIùÆÉXbb6uXZšÝLº*M—³ûjµzRRŠ8r$§ÙՔ˙3%èõ\]í ó`ð`O ò`à@÷ÜL‘¶¢ÕêÉÌ,%%¥Ø(2¥¤‘“SÁ`ÀÒÒ”€úõësÑÉ` Ü.+«¥¬¬–’’ÊËë(.VR^^KI‰’’’ÊÊj[ ;8XáìlCŸ>vÍ“-..¶¸¸ØÐ§O/œœ¬/Ú†¾±±‰ììr²³+ÈÎ.''çìï……UhµBÇÞ½m Îu1¹»__y­Á` -­¤¹ 8åæ yMýû÷!*ʇèh""¼»¼”êJ$'±~}›6¥¤¤†ðp/fÎŒdòäAÝΑs.ƒÿþ÷Þ‹eÑ¢±ÝºYÈgŸíeÔ¨ Vî¡Ù³?ÇÒÒ„o¾¹¯ Gve ¿þz’÷ßÿ¤¤:33ÅëÕÕ©IM-6F¤¥qút‘±ã¯““µñ‚Ÿ••ß}÷66f|ûíýöîì—Õeh4:öìIfýúCìÞ}™LÊøñ˜1#‚#:mn²{÷i¬¬L ék_g°pá*²²Ê:¤<9¹1cþËŸ>MIÒÓK9r[·>ÑÇuQ|¹1¨®n`Ó¦DV­ŠãôéBüüœ™7oÓ§Gtv­ªH3z½“'óùë¯3ìߟơCY466áìlMd¤žåCÿþ}®hî¯Wsøp6¦—IRR*•kk3BCÝ ó$,̃°0nÑ™GDäFA£Ñ³[º$µgk4:är)>>Îõ&8Ø \\l03SPR¢¤¼¼ŽÒR%¥¥‚ÈT\Ü"0Õ´ (pt´ÂÑÑggœ©woAXruµmþÝæ²¥Ð••õääœ+.µLeÆnr‰¼½ñôt4v ôöš´õêîùyM ™TW7`aaBx¸—ñØv£tØ*)Q²eËQÖ­K 9¹OO¦M gæÌÈ"øU£Ñ±dÉ:6mJä­·îdöìè®Òu±fMK—Æ’”ôŸæ*ÿ¾})¼÷Þ.Êâæ›ƒX¼xƒ{võ°®Šs]Qûö%£Tªðòr4–ç ꋹ¹ Je£±ãd||&Çç¢Ñèps³3–èEGûàïïÒ­ÏkE£ÑñÕWðÞ{»pp°âå—§0nÜ€«znI‰’ÔÔ"c¶fJJii%466!‘ÇèÐPF lÎ×tÃË˱Ǘä0_ùùçc¬_ˆÄÄlœœ¬¹ýöL:˜ˆïNwd~÷Ý߬X±Ó§_ë–è++ëY¶l3±±‡™<9Œÿü王^|ºQ9p 3>aïÞgÛ]MHÈdêÔ8zôåkš}üñï|ùå>Ž{¥+¢ø$Ò}1 üõ×Ö­K`Û¶ã(2&N å®»†tû+p=•œœ öíK᯿Îð÷ßg¨®nÀÙÙšáÃ1"€ÈHï«*3©«S“ÉÁƒÄÅepüx.Z­??gbb| ÷",Ì??—.-¹QP«µœ9#t=JM-&=½”ääBrs+Ðj…®G..6¸¸Ø`kk…… 2™FKee••u”•Õ»áµ`f¦h“lpt´ÂÕÕ+\\Zwoáöj\EZ­žÂÂ*rs+ÉÍ­ '§‚œœr²²ÊÉÉ©@©l„²»¾}íñôtÀÛÛ‡VbS{f·)•*Î2º6Äoggk""ΖÐ]Þ]P©4ìÜy‚³o_*––&LšÆôéáDGûÜ0“èÚZ<ð?ŽÍáË/ÿŨQA]=¤ëF©ldÀ€—xûíYÌœÙÕù&þø#•wÞù•dz3&˜§ž{ÈP wÎbïÞ”V®¨áÃý=:˜›o6 ±*•†£Gs‰‹Ë !!“ÄÄlêêÔØÛ[éÝ`îÓ-óÛ®‡’%Ë—oaË–£ŒÈþ3íºÊ…u:=¹¹œ8QÀ—_þÁ‘#9ØÙ™Q[«F§Ócj*' @È ìM¿~nöÆÕõÚJžo$²³ËÙ¼ù[¶%5µWW;&M eòä0ÂÂ<:å8ÜÒuí×_3`@ßßßõ²o_ Ï>»žÚZË–MáÎ;#o˜ï©Ëa0:ô5ÆÀ²eSÚuÛ»wŸæž{¾âÌ™7®é¢Û¤IØû‚΄„(>‰t?JJjX½:žõë‘]Nx¸³gG1uêànS¯üOA£ÑŸÁîݧٳ'™ôôR¬­Íˆ‰ñeäȆ¸*%¿%s!>>“Ò9y2΀¿¿ C‡úãKLŒ_·/YéJT* ¥œ8Q@ZZYYeäåUQTTCMMz½Ð^ÞÜ\\.C§ÓÓÐÐÔªóT*ÁÞÞ+§’££öö–8: n%KciÜõ84JKkÉË«0 L¹¹•ÆåsËã,,Lðôt4 L‚°ä€§§#}úôê°‰]QQµ±|.>>“””"ôz>ÿÏÞy‡GUçoû&¤÷Þ{BI!•@éBhb£ êÚWW}Qw]»®ûS±íb_; AA ¡ƒR’@RH¤÷^¦$3™öþqfB“’ÂÜ×u®9çÌ™™/fæœçû|žO ‹¾„îr…ô„Z­!#£”ää RRréììfÒ¤Q,XÏŒa,«ÈÔÕµ³lÙ—´¶JùñÇGï½ÖàýÅ}÷ý•JÍêÕô÷P®ŠN²re*™™åL›³Ï&5ðBéÿŒÆF1»wŸ`ß¾"þøãdWÔŒa$&én¥RM~~5‚8}ôh--½RW¦ã‹…ÅÀwB^Œ´´^~y§NÕóðÓxæ™×tνys6+V$3fŒ7Ï<3ƒúúNž¬çĉŠŠêihèÀÎÎRßyX9šÄôfö@àäÉz¶lÉfóælJK›ðñqdþühæÏ&,¬ï¾ÛÔj áá/ñÌ33xøáI}ö:½T*çÝwSøúëß¹ù摼÷Þ¢!QþúÑG;ùúë?ÈÊz­Wó7oÎæñǤ¦æƒË~LS“˜èèWùöÛû«ÌÑ >(*vï.`íÚ#ìß;; îºk,‹'ô[·š•¶6);wž 55ƒO#•Ê ñÐxŽð§…‰œ#GŠ9tè4ii¥œ8QƒZ­aôhwƒ?>ˆ„„ Cɤ¹\I{»”¶¶NÚÚ:ioïì±ÝÜ,¡¶¶†mmR$r¹²Gn’cc#¬¬Ìqp°ÀÅÅww;œ­±··Ô L‚ d­®ÕM(ɨ®>#,UT´P]-ÜVV¶ “)Á½äåå€#¾¾Nøú ·ºíëñùW«5œ:UOzz)ÇŽ•“–VBMMÆÆFŒãÍØ±ÚNtþƒÖê_\ÜȦM™¬_”šš6""|¸ãŽXî¸#vÐ~Çž>ÝÀ’%ŸcccÎ?>2$.@6mÊâé§×’ýú nбo_￟JVV·ÜÆòå3¯8ðv p¶+j÷î k±°0eüø ó\Qp¦™Š®L/=½„êê6LL†éK|¼Î-€ÝÀÍQ»J¥š<Ì;ïlÇ„^˜Í]wÅ]õD@QQ>ø-R©Œ?^ʤI£ô÷µ·wö(ÛBÎëôH½½ô!ç:qjäH÷Û áJÈË«fóæl~ûí8UU­º0~4·ÞÝ'YYùË×ñ¿ÿÝßëÏÝdfVðì³ë¨­mãŸÿœÇ½÷ŽÔ.¨ººvââÞàË/ÿÂìÙ½ö¼kÖá_ÿJ*/—µkÓxùåMœ8ñVMHÄ'ýKqq#ëÖ¥³~}­­R&NÅ’% Ìœ~É\½KCCÛ·ç‘’’GZZ1&&ÆLœ8’iÓB™6-ä²lÑ……uìÛWÈþýE¤§—¢R©=Úƒñãƒ7.˜„„ÀA}²mÀ€Žîn%b± ±X†HÔ…H$C"¶…[9b±L+*už'4uuuŸ÷œ¦¦Ã12Ú²+J4!7ÃÎμ½ðós"8ذ0O‚‚ܰ··ìwPS“˜šš6ª«…¥¦¦ÊÊíz«þâÀÍÍV+,/.yxØ]÷Œ‰în%ÙÙ•=*d5=ZNGG'ÖÖfÄÄœÉkЉñyMC—ƒ¸qc™™å¸¹Ùq×]c¹ãŽØ!׃‘¬¬ î¹ç+‚ƒ]ùᇇÝü¥JåDDÝ–-×ßùföì)äý÷SÉÉ©búôPV¬HÐ¥=—C]]»¶<ïŒ+*(È•iÓ!êlW”ŽÚÚv}™^ZZ)§O70lŒå®/ÓKHÄÝ}pdV¶¶JY¹2…Õ«èÊK/ÍcúôЫz.±XÆßÿþ3¿þšÍÃOäÅç^òü¾ººÂÂZ}ÐyQQ=ÅÅ çdzh]Rî„…yáå58ÅiFCvv¥^ˆª¯ï $ă[oæÖ[£è÷ígŸíãÓO÷’›ûÆ qº»•|ðÁ>ýt/ññ¼ÿþâAÝÉ|Ù²/12Æ?<ÜkÏùßÿîæ§ŸÒ9|øŸ—ý˜Å‹?ÇÖÖœ/¿üK¯ã 1ˆO®?R©œ­[sX»6£GËðòr`ñâ/Ž´? ƒ‘æf ›7g±yóq²²Ê±¶6cÚ´PfÏŽ`êÔ?µ‹D2þøã¤þ$­®®WW¦L aÊ”ÑLœ8j@wO2pã¡Vk‹»èèèB"‘ë$pt®t¶˜ÔÑÑ©Lw·ò‚ÏoaaеµÖÖæØØ˜ccc¦¥†R©¢³SXÜEk«”¶6©ÞÉäêjC@€ þþιj¡[[oÏòªTjDTW·RUÕª—¡IØÖ9—ŒŒ†áêj‹#ÞÞx{÷¼õõuêÕ쥫¡½½S+4 bSNNÝÝJÜÜl‰Üqq„…y ȰÕ+¡»[ÉÞ½…$'g°wo!¦¦Æ$%aáÂ8Æôÿ>ʺzè[ÆæóÏïÔeLãÑG¿§µUÂÏ?ÿ­¿‡ÒkìÚu‚?ÜINN3fN¨Á.BàJO/Õ—RXX§wEMŸÆÔ©!øø8ž÷¸ÖV©>C.#£”¼¼j”J5~~N=:ê ôÒÞòòfÞ|s ©©ùŒÄK/Í»ê2Ë3ùÇ?~ÁÛÛ‘Ï>»‡‘#/ßá£P¨(-mâäÉ: tÂTUU­h4ìí- ó$4Ô‹°0/Âý1ÂmP¹¤teÓ[¶d³m[.MMbÆŒñæ¶Ûb˜7/êšÜŸYYÌûü#ÜzqÔ}O^^5O?ýååÍüãsxà›eìo¿çñÇäèÑWzM„~óÍ-9RÂöíÏ\Öñbbc_ã³ÏîeîÜÈ^ÃU`Ÿ \?23+HNNgóælär%3g†³ti"7Ý4rP~‘ F¤R9©©ylÚ”Å'±¶6göìæÌ‰àæ›G^ò‡Z£ÑpâD­¾{̱ceŒÀ”)£™2%„°0ÏA3«b``ÓÕÕL¦@$’ÑÙ)¬K$2¤R¹v]ŽD"G&ëF*íF"‘!“)èììF$êB&SÐÕ¥@$ꢫëÌc/„±±ÖÖæØÙYhE#ó³$aÝÞÞâ¼}¦ú×km•PUÕª_*+[hh‚ˆãéiŸŸþþ.œéÎæïïÜ«ØÝÝJjkÛõB’àZjÕo××w P¨€3eqÞÞÚÛžâ’§§ý€;y¯¬lÑg5=ZÆ©S À™6éqq‚³i0ÏžKff97f²iS"Q&ŒàÎ;Ç2gNÄÊAܼ9›§žZÃüùѼÿþâ÷¯·Ø±#Ÿü†ôô—‡Ü„Û®]'øàƒäæV3cF+V$õižÍõFçŠÚ³§€ß?…T*'8ØU_žw!W@gg7™™åú2½¬¬J}w`+*!!ˆ)"gfVðúë›ÉÌ,gþühž~ÖUuʬªjåo[M~~5¯¾:ÿšË©Äbµœ8QCaaùùÕÕ!—+11Έn„‡ ‚THˆááÞƒbRT¥Rsøp1¿þšMJJ.]ÄÄø1~4sçF^±x¡Tª=ú¼öÚàt\**þóŸÝüç?»ˆŒôåÃäÚßú" Ñѯò裓yòÉé½òœË—¯£¾¾ƒµk½¬ã¿ùæÞyg;¹¹oöçÄ¡A|2з´·w²~ýQ’“Ó),¬#$ăE‹X°`,†¬ëF£áСbÖ­K'55¥RÍôé¡ÜyçX¦M ¹¤ý¹½½“ß?©ïÓØ(ÆÃÃ^+6ææ›G ¹PH—GWW7ÝÝJD"J¥ ±Xär¡$M©T! .¡®.A R(Ttttj÷)èèD"™LAGGgÁèR˜˜ ÇÒÒ 3ÌÍM°´4ÃÖÖss,,L±µµÀÜÜssìí…ukks¬­Í°µµÀÖÖâ,Éì¢âB¡¢¡ADmm›6ϨU窱l¡®®•êLxöÙ%g>>Žøû;à‚ŸŸS¯•K¥rª«ÛÎq-µêKäEú€q Ó³\KgD%//|}qq±пJ¥¦¨¨ŽôôR½³©¾¾£G¶ŠÎÙ4Ô~OjjÚX¿þ(7fRRÒȈn,\Çí·Çâé9ôºC}ûíA^~y#=4‘W_?¤'1 11¯ñàƒ7óôÓ3ú{8½ŽF£a÷îV®L%?¿†¤¤pV¬H"$ij¿‡Ö« YJÙ¿¿H²2㦛FèàrEé››[¥ÏÊÈ(£££s½€žHt´ï€Š HIÉãí··RYÙ½÷Nà‰'¦^Q‹w„?ÞÉÇïb„¼ûî‹þ®¥RMqqEEuäçן_É5´´HðòrЋQ:—”ŸŸÓ€ýÎQ(Tüþû)¶lÉ&55©TNLŒ?óæE2{vÄe ØK–|ŽƒƒŸ~zO¸ï(,¬å™gÖqêT=+V$ñÈ#“UÇÉW^ÙÄîÝ:ôb¯ü{ào077¹ì÷tÞ¼ vå×\ók_ñÉ@ï£Vk8tè4«WaÇŽ|LM‡sÛm1,Z”@lìàiÍ;Øin–œœÎš5i”—7“ÈÂ…qÌ™‰­­ÅEWSÓÆŽùlßžKzz)FFÃHHdòdÁÝ4ØóD†: …ŠÎN9]]‚$‘ÈP(TÚr1á¾ÎNA‰ºP*ÕˆÅ2är…ÞQ¤TªèèèÒ‹DR©°¯½½ ¥RuQÑÙè‚°ÈkksLL†cc£‰L°µµÀÂÂsslmͱ´4Õ EVVfÚu¡ŒÍÌÌkk3¬¬Ì{íd£µUJmm;µµg²jkÛ©©œCMMb½¸dffŒcE'2ùø8âäÔ;ÁÎ--’yKg„¥VjjÚik“êµ··Ô‹I‚ÈtFhòòrèµ1]/ºººÉήԆƒ—qôh‰[[á‚Lé3è:·]R©œ””<~þù(‡ÆÑÑŠùócX°`,ƒ3ÌùrX¹2•?ÜÉßÿ>»×f„:½}2Ñh4ìÜy‚•+S)(¨eöì–/Ÿ9dÏ!jjÚØ³G(ÏÓ5k veúôP¦N %!!ð¢n>µZÃÉ“õú2½ôtAh755&:ÚWÛAÚû{ÂO©T³vm¼‹¶6)÷Þ;ž¿ýmÚ7lÈ̬`ÅŠuTW·ñâ‹s¸ï¾›út2¤±Q̉‚•Ÿ_Maa¥¥M¨TjllÌ5ʃðpO­ åÍÈ‘n®ìW.Wrà@¿ý–î]'‹eDEù0gN$sæD^Òñûé§{ùì³}ƒ*÷éB(•j>ûl/ï¿¿ƒ°0O>ø`IŸ„´÷……uL›ö.6<Á¸qA×ü|wܱŠÐPOÞzëŽ?=¶¢¢…ñãÿÅêÕ0eÊèk~íkÀ >è=jjÚHNÎà§ŸÒ©©icìØ–.MdîÜÈ!U0Ð9xð4?þx˜ÔÔ<¬¬ÌX¸0Ž¥KÇ]²Î»¤¤‘íÛsIIÉ#'§ s¦OeÖ¬1Lž<ÚðþõºÌ¡®.…¶¤¬K+qÉåÊ ŠB‚¤¦½½¿Ð[7 IDAT•J­-9+‘ÈõbÒå`mm†±ñpìì,06Ž••&˜šckk±±‘^$233ÁÆF|lm-055ÆÂÂ++!ÏÈÎÎc,-M±´4ÅÔt8¶¶ýzr#“)¨¯ï ±QD}½H{{f»¡¡ƒêê¶ÁßÎÎÖxy9àáa¯oÎÞvuµ¹æ“J¥¦±QtÁ¬¥ššvªªZõc6LÈ[:S'8—¼¼ìñõuÂËËkëÁý¹li‘èƒÁ32ÊÈË«F¡Páéi¯Ík $!!€Q£<´CëZÐh4¤§—’œœÁÖ­9tw+™:5„Å‹˜:5dÈ–žðyxùåüøãÞ}wK–$ö÷®'NÔpË-+ùõ×'‰ìïáô)†ÔÔ|Þ?•¢¢:æÌ‰äé§g Y θ¢öí+d×®7beeƤI£˜6-„iÓÂpu½´XSQÑr–3ª”’’FŒŒ†1r¤; ŒëO\\¾¾ýSb,—+Y½ú0«VíA,–ñ—¿ÜÄãO½¢Æ2ÝÝJ>úhŸ|²‡èh?ÞÑu-§êêꦰ°N[¶WK~~-……µH¥r†7"0ÐEïŽ „©?{ß®:GÔÖ­ÇÙ¹ómmRÆŒñfî\Áuîß1?¿†3V²k׊!Q {útË—ÿDnn5Ï<3ƒ'ž˜>(\Psç~„¿¿3«V-»æçš<ùæÎdÅŠ¤?=vÕª=|ùå~²²^ïï¿“A|2pmtw+Ù±#ŸuëÒ9pà$ŽŽV,XÇ’%‰®zÜÁLw·’M›²øê«Ô’˜IJeã˜;7ò¢–íÜÜ*RRòؾ=—Ó§pq±aæÌpfÏŽ`„Cú¢çÏÐ9†$9"Qr¹B_&¦[ö+éìì™7$‘È´—#•ʑˈÅr:;åú¬‹aaaŠ™™±VÐJËÎ…†7ÂÖÖ\+õ{t¹Eºr3KK3LLŒ°³³ÔÞg†¹¹i¿D_ r¹’úú:hhµôÜîèèÔ?føp#œ­qs³ÃÍÍV»ØiE{<=q§7þ.ÝÝJ½ ¤»­ªjÕ¯×Õµ÷È[òô´× K:ç’——=ÞÞŽxzÚ¨r‹Þ ´´IŸ×tìXÅÅÂÅÔ¨Qº‹)¡EùPËÁ¹ååÍlܘÉ/¿£¼¼™ˆ-ŠcÞ¼hœ—cíjP(T<ùävìÈãÓOïeÖ¬1ý=¤ëÎôéïåËÊ•‹ú{(×µre*'O "Ôòå3káZ¨ªjeß¾"víÊçСbär%ÞLŸÊ´i¡DFúüéäFK‹„cÇÊIO/áØ± rr*Q(T¸»ÛiKõgTh¨×u½¸”ÉüðÃaV­ÚMW—‚¸™Ç›rEÙJµ<óÌOœ>ÝÀ³ÏÎäÑG§ôÛ²Z­¡¢¢™'jõN©'j©«k„!¡¡^„†zêó¤]ú5«K©TsèÐi¶mË!55æf !!žÌ™Áœ9‘ŒåŽZ­!"âe|*?>µßÆÚ›¨Tjþ÷¿ßyçíúr².¬­Ys„—_ÞDvök×ÜÉ5*êžxb:=4ñ’Çi4&Nü?&MuY.©>Æ >¸:Nž¬ç§ŸÒذ!“ööN&OÅ’%‰ÜrKØ -Z\oš›%|ÿý!~øáííÜv[ ?<‰ððó¿|U*5G–‘’’GJJ.ÕÕmøú:1kÖfÍÃØ±ƒÚ] s ÝÊäH¥²s:šÉõ¡ÓºÎfºÐjÝþŽŽ.¤ÒK‹DffƘ››bgg™™±6cH( ³´4Ó @––¦ØØû­¬Ì°¶6ÃÌL(#³´4Ó—¢YZšbffÒïVúþB¡PÑÚ*¡µUJK‹„æf --’ :–ΕŒŒ†áâbƒ««-îîvÚ[ÛsD&[œmzí¤P,–U ת-Ïk£¦Fp2éÆAÈ€òövÄÇ猋JWçã㈫ëÀÎ[ºV”J5ùùÕ=ĦÆF1ææ&DFúèŦøøÀæÿ¾®Ókrréé¥89YqDZ,Z”0¤] ç"•Êyào8~¼’o¾y ‚û{HýÂW_`åÊTŽ}À•÷ô%†íÛsùàƒœýt«WÁÒÒ”{ïÏ}÷ÝtžX¡Pñǧؾ=—;óin–0z´‡VpЏ HÕ_tvvÓÑÑI{{'íí]=ÖÛÛ¥tttõŠD"ATÒ‰LÝ}n[[ }vd†…V2×Þg†¥þ~!wÈ;;K}nѵÎRÜH¥r½ˆÔÚ*Õ/ÍÍbZZÎß'Ëz<ÞØØ''k\\lðð°×ÞÚ'2õ¦¨¤C&SPYÙBEE ÕÕ­TV ÁâBÐx[ñËÑѪG§8])œÎ¹t%¥C‰DNvv…><7+«œÎÎnìí-µ%tÂÌ|D„Ïst] ]âÆ™lÝšƒB¡bæÌp,ˆcÒ¤Qö¹¯hk“²té—ÔÔ´±fÍ£ê7èzÓÜ,!6ö5>ø`1wÞy鋇¡ˆZ­aëÖV®L¡¼¼™;ïËòå3{5|z0PPPËž=ìÜy‚ãÇ+12ƸqÁLŸÊôé¡—ÝUN£r£Ž+× R- nĨQîÚÜ(âãû´iT*ç»ïòÅû‘Hä,Y’ÀcMÅÛûò­ååͼüòFöî-â¶Û¢yå•ù¸¹ÙöÙx¯…BEQQµú®{ùù5ˆD] 6 ??'Â×Th¨P¶w=½jµ†£GËØ¾=—mÛr¨­mgذa<úèdæÏ&2rèd ªÕ¾ÿþ ÿú×V|}øàƒÅDEùö÷°.ÈòåëÈÉ©bÏžç®ú9:;» ~|„iÓB.yìSO­¡¸¸‘íÛŸ¹ê×ëE â“?'3³œÕ«èOœçÎdÑ¢x&L1¤gî"uuí¬Zµ‡µkÓpp°â‰'¦q÷݉=ÂwÕj ¥lÚ”Åo¿§££‹èh_fÍÃìÙôÝì¢Ðͬ‹ööN:::ikn;:ºôëÂ}]ZaI·O·>++3ìí-±³³ÀÁÁ+«3B‘¶¶æújaŸ¹¾‹™NDê™§¡@w·R/ŠD]úuÝûÕÖvFDjjk×%Èå=ßG S­pv¶ÆÉÉGG+íb‹‹5ŽŽgö99Y÷id…BEmm;••-úŽu••gº×55‰õÇ:9YkCÅññ‚Å…`oÁÁdiyã8.Dc£˜ôôíEN5(•jüüœôÝšâã1ÂmP‡›^-ååÍüüóQÖ¯?JMM›¾¬îöÛcE«ï¾ ¶¶Å‹?C.W’œüØUµjjÜÿ×tu)X·î¯ý=”~C¥R³qc&|°ƒÚÚvî¾;‘ÿ÷ÿn¹!'5[Z$ìÛWÄîÝìß_ˆH$#8Ø•[n Ó‡–_I9Zc£˜ŒŒRŽ-ãØ1!WO©Tãåå wF%$2j”{ŸLæüôS:Ÿ¾úún»-†¿ým*#G^^™åŽù¼ú꯴¶JX¾<‰‡šØßY5—MUU«6CJ(Û+(¨¥²²Fƒ½½%ááÞDDx3fŒ°øû;÷ùõ”Pöz‚üWWÅøø82{vsçFã;$~«++[X±b=iiÅ<üð$ž{nÖ€kP’™Yμy³}û3W-ÕÔ´÷[·>MLÌÅ›y‰D]DE½Êk¯Ýƽ÷Ž¿Ú!÷&ñÉÀ…in–°qc&«W¦¸¸‘O–-K¼¡Oœû“¦&1}´“Õ«àêjËOLcÉ’„‚ÂÂZ6lÈdóæljjÚ óâŽ;b¹í¶h<<®l–K£Ñôp¨è\*:á茨¤˜1éB]ÐLM±··ÀÎÎ{û3‹°ÏÁAX···êqœ.÷ÈÀÕ#“)ôb‘ ï•nŸNlo¦3ÂaW0nº÷ÒÖÖ‡K‹HÎÎÂöõ.'io郎¬™ÊÊÊÊš¨¨8#4ÕÕuè»×YY™é…%__¡sÝÙBÓ`óîM4 ÅÅ=ÂÁËË›>܈}8x||À yÁ¨C$’ñÛoÙlØIzz)®®¶Üu×X,{Ù\C•ÒÒ&/þ kks~úé¯ÖÉp½IMÍ㡇¾%=ýå"ëìR(*’“3øøã]´´HX¶lO>9ýŠ»¨ ”Jµ>´|çÎ|Š‹±µ5gòäÑL›ÊÔ©!WÜÑ´³³›ãÇÏtÍÌ,G$’amm¦/Ñ‹$&Ư×&X”J5¿þšÅªU{(.n`æÌpž|rúe]tËd V­ÚçŸîÅ×׉W_ßߺ®±X¦wGååU“—W­/Û³±1',ÌK/F…‡{1b„[ŸäHM˜ð6sçF2gNÛ¶åòÛoÇ)/oÆÃÞ¤$!†cܸ ~ͰºV4 kצñæ›[pv¶aåÊE$&^{w¹ÞdêÔw;ÖŸwß]xU×È<øâ%K–¿ûîo½µ…ìì×Êd¼A|2p•JÍþý'INNgÇŽ|,,L˜??†¥K‡t›çLgg7_}u€U«ö`mmγÏÎdÑ¢x½(S]ÝÆ¦M™lÚ”EQQ¾¾NÜ~{ ·ßÓãb§»[©/y:ãR‘ž•³#¦­­Sï^im•¢V÷üj°µµÀÑÑJ/ õ’,±··¸àúî¹D¢3儺RC]•.]"‘ÓÑÑ©6—Hdú|+!÷JvÁì*ssììtâŸE!P'þéîӭ뎹$†úúÊË[¨¨h¦¼¼Y¿^VÖ¬ïøgll„··#~~Ng K‚ÈäããxÅ'í7 …ŠœœJŽ-×_¤´¶J±´4%:Ú—„¡|cìØ€^¤Ó•Õ%'g°}{.jµ†™3ÃY¸0žÉ“G êøÞ¢  –%K>ÇÛÛ5k5L`…B¡"&æ5î¿ÿ&–/ŸÙßÃ(*~üñ0ÿýïnÄb÷ß3?>‡«”ù\Ê˛ٳ§€Ý» 8|¸•JMt´·Ü"dE]MвZ­¡¨¨ŽŒ Á•ž^JMMÆÆF„†zé»êÅÇàævm jµ†;óYµjYY$&ñÈ#“˜1#üO]?ååͼùæRRò˜ƒwÞÙŽD"ç‰'¦ñ裓177¡­MÊ–-ÇÙ°!“ÌÌrlm͉‹ `ôhÌÍMôSS“˜æf1MM’Y5 tÚ:Sþd…³³ÍYÎK­µûÎcp!]…B…D"ÓgQéD¢sÎu÷éÎÏ“¤RáñãìÜ*kk¡ÄP—g¥ 5?³O8®§¸d9(N" ÕÕ­”—·P^Þ¬™ÎˆMºÒ> Süýðós>ëÖ??'¼½E¿¿‰d;V¦?~¼™L³³µ¶,C›""| S-ÅÅüüóQ6n̤¦¦ØX-ŠçÖ[£°µµèïá Ž+cÙ²¯ˆˆðæÛo¼¬ å·ÞúM›²HOÙðù: ™LÁ·ßä“Oö P¨xä‘I<üðä¦AÁ¥Jå8p’½{ Ù½ûb<<ì¹å–PfÎÄ ÁW­W_ßAzºPªwôhµ¨TBIµ®#騱þŒé~Õ¥b‡óå—ؽû¾¾N<ôÐD.ŒÿSaàðábÞ~{+ÇW²pa<+V$õi~U P¨8uªþ,AJ(ÝëêêÆÄd¸¶ËžP¶îMh¨ç×éÜ–¹¹o^P´(/oÖwÍËʪÄÊÊ”©SC™=;‚©SCŒxs%lÚ”ÅK/mÄÚÚŒwÞYÀäÉýïžkk“ýï¼³€E‹â¯øñ[·æðÈ#ßQ]ýÁE?‡99UÌšõ›7?E\\Àµ¹·0ˆO7*ÝÝJRRòX»6C‡Nãâ"”,Y’pÃtˆ¨Õ8Åë¯o¢¸¸‘qよŠòE$ê"/¯šòò::º ç~r­­Íps³Ó—<¹¹ÙjK¢lps³ÅÉÉJ+*Y.ŽÎâj]F‰‘¨KßIïB™U }º€ó³ÃÍ­¬Ì±µ„"p¤•„0tó³ö™ ¹°sµZCMMeeM””4QVÖDi©°TW·¢T åqöö–8÷–üý±éZgboTDÚ`ðRÒÓK)*ªC¥Rè¢Ï‰4üœƒH$cË–l’“…¦nnvÜu×X-Š'8ص¿‡7à8pà$>ø 7ß<’/¾¸ï† š¿ª«ÛHL|“Ï>»—yó¢ú{8©TÎÿþ÷;Ÿ¾ŸaÃ௃Þl2µh4rs«Ù½»€;óÉϯÁÊÊ”)SB¸å–0¦O½&·¡®™„®ä:;»‰DŽ%qqþÄÆú“˜Dd¤ÏOX——7óÕWHNÎÀØx8Ë–ãn¾¤ ¤Ñhؼ9›ÿ{MMb}t2=6uH‹’*•šââFòó«ÉÍ­ÖvÝ«A,–allÄÈ‘îú’½ÈH¼.ú^ˆÅ2ÂÃ_â£îæöÛc.ùºuuí¤¦æ“’’Ë‘#%1qâ(fÏŽ`ÆŒ°AåFln–ðÒKزå8‹ÅóÚkóûý¼úñǤ¦¦Í›ŸºâÇ®^}„·ßÞJAÁ¿.zÌßÿþ3ii¥ìßÿµ ³·1ˆO7……u¬Ys„3‹eL›Ê’% Lbp¶ô!*•šæf±¾}|Cƒ°œÝJ¾®®ƒæfqr7ssLL†ÓÙÙF£ÁËËžÈH_ÆÆËË''k};ùÁàhé-T*5"Q"‘ìQH®u…tûçÑ•¹ŒÎ€lm-´aægöÛÚšcccÑCP²±9Ó5ÏÚÚü†z_.Dc£˜ÒÒÆ"SYY3¥¥MzÁÎÞÞ’À@—‹ŸŸ3Ρ´(+k"#£Œ´´ÒÓKõyMaaBYEBB qq7l¶Ê¥Ð•£ÿòËQvìÈ`öìCÓ?aëÖþö·™??š>Xbpôü ÷ßÿ5b±Œ_~ù[eÀ"uñå—øòËý˜™™ðÄÓ¸ï¾ ‡þ9ÔÖ¶³sç RSó8r¤FCBB 3f„3cF8~~N×ôü*•š'j8v¬œŒ !°¾¾“áDDxkƒÌ… ÀË-oïèèdõê#|óÍAššDÌžÉÜD||àE£P¨øúë?øøã]7¤(©Ñh(+kÖ R:§T{{'ÆÆFŒáNT”/g)ÝuÞ‚ŸàêjË'ŸÜsÙ¯×Ö&eçÎlßžË￟D©T3n\³fE”~ÅÙ²ýEjjÿøÇ/üûßw‘”4¦ßÆ¢+Û¿ÿ…+Î…üÏv³n]:‡ÿó‚÷wvvý*Ï>›Ä#LêáöñéF@7[»fÍrrªð÷wféÒDîºk¬Á9Ð Èd jkÛ©«ë ®®ººvêë;¨©n:hjê)*ÙØ˜kÛÆÛàînXÜÅ‘#%h4°paÆÁîÝTT´ëÏwÄrë­QC&§¦³³[+ "QGG—¾4M×YM,Ä%È$wé»P°9.#kks­(t~×;]‰ÚÙûíí-±´4Ò.£¾F$êêá^*)i¤¬¬™²²&ÄbAà³´4% @–œ t%(È•€çKÖ«¸2T*5……u¤§—èÝMbÌÍMˆŽö%11ˆ¸¸C^ÓŸP\ÜHrr¿ürŒÆF11~Ú²ºè!=ÃÞ¬[—ÎsÏ­ç¾û&ðæ›·‰J}Í'Y²äsöî}žÑ£=ú{8šÖV)Ÿ~º—o¿=ˆ­­O=5eËÆ&P/€X,cß¾"RSóØ»·‘¨‹½åÓ+ŸÏšš6ÒÒJÈÌrOž¬G­ÖäJ\\‰‰AÄÇüi‡K…BÅÖ­9|ýõïdeUâÉ}÷MàÎ;c/**‰D]|õÕ¾üò&&Ãyüñ©ÜÿM"£²?¨¨h!'§ŠÜÜ*rr*ÉÍ­F,–ab2œO¢¢|hi‘rðàirrÞÀÔôÊ?7‰œ½{ ؾ=½{ J»‰‰ñ%)i sæDøN¦¼öÚf’“3¸õÖ(ÞzëNœ¯ÿõ•F£aüø1sf8¯½vÛ=öõ×7“ž^ÊöíÏ\ðþää ž~=ÙÙ¯´slƒø4TÑh4¤§—’œœÁ–-ÇÑh4ÌžÁ²eãHH4œ ^&b±ŒººvjkÛihQSÓF] (éÖÛÛÏä)™šãîn‡»»^^ö¸»Ûááa¯™ìpuµÅÍÍVÿ£ØÑÑÉ?þ±_ÍfâÄ:TŒ½½%wÞË’%‰Œ50»$I$rÚÛ;µ‹”ÖÖÎÛºkg$xÔ¥/©:cc#ll,°µ5ÇÎÎ[[ ½ˆdgg¡¿OØo¡ß¶#ÉPÖÑ·ÔÔ´QZÚÄéÓ œ:UOII#§O7ÐØ(ñÏ×׉  W‚‚\ð÷D¦À@çA3+6ØË•úîEº–Úb± [[ âãôΦÈH_ÃÅÙŸpnY—— Ʊ`AÜ€?™(|ñÅ~Þxc O?} Ï=7«¿‡3hÐh4Lšô$&]u÷£ÆF1«VíæÇãìlÃÓOߢE —ÝEP*Õ¤¥³cÇ vìÈ£ºº 77;fÌcæÌp&LÑkNm‘H¦ÍŒJ»srªÉ¸ºÚôèŽæuѦ yyÕ|÷Ý!~ý5 cc#îº+ŽûîQ‡H[›”Ï>ÛÇ·ßÄÒÒ”'ŸœÎ=÷Œ¿áÝç†ÒÒ&½ uüxyyÕú ©ˆo""|‰Œô!2Ò‡à`×+j”!—+ùãSlۖî]'hm•âÁ¬YÌš5檂ð¯û÷ñüóë‘J»yë­;þ´ ±/øïwóÅûÉÎ~ýŠÎÑž~z-­­R~øáá Þ?þðð°çóÏïí­¡öñi¨ÑÔ$fýú ’“3(.n$"‡E‹â¹óα†ÙÚsP(Tza©ººêêVjjÚ©­m£¦¦šš¶ S<=íñð%;ÜÜìðövÀÝ]Xwu½ü²•ß?É“O®¥³SÎðáFH$2&NÅ’% Ìœ~Ý„‘HF{»”¶¶3â‘°.=g»çrn'µaÆé»ß98·g$ ìí-ÎŽtn$óÆ*=ÐQ(TTV¶pêTÅÅ œ>Ý@qq#ÅÅ H$ÂçÁÁÁŠ‘#Ýv#(È•Q£Ü p6„|_t'õº¼¦ãÇ+éîVâîn§ÏjJL bÔ¨«ƒ½‘ÐMÔ¬]›ÆÖ­9€¡¬îjyï½>úh¯¾: Ùüß|óÿþ÷623_5”_uuí|ôÑ.Ö­KÇËËåËgrDZ†ÏîŸPPPËŽùìØ‘O^^5––¦L™2š3™6-¤Wó|º»•äæVi'I„ óööN¬­Íˆ‰ñ×N”í{^ç/‘¨‹uë2øá‡C”–61aB0÷Ü3¤¤ Ÿ'·´Høä“=|÷Ý!llÌyôÑÉÜsÏøÒf~@ R©‰}èh?<=íÉÍ­$?¿¹\‰••aa^DEù!R.—eZP©Ô9RBJJ©©yÔÕµãççĬYc˜5+‚ØXÿ÷¹”Häüûß[ùþûCL›Ê;ï,ÀÝýúU54t÷«V-ãÖ[£/ûqK–|Ž»»Ý»Ø:UÏäÉïœü7ß<²7‡Ûħ¡€J¥fïÞBÖ®McïÞB,-͸ãŽX–,I­H¯‘¨‹šš6­°ÔFMni§ºº•ÆF‘¾ÎÔÔOO{¼¼ìñòrÀÛÛOO{ÜÜ“‡‡]¯•buttòÈ#ßóǧðð°çî»Y¼8//‡kzn™LAK‹„¦&1--RZZ$Úm­­RZ[¥ç I*UO’±±‘^D²··ÂÞÞâ¬m°dužÐdhŸ=¸Hä”–6j]L zSyy3 …ŠaÆáíí@p°+ÁÁnŒ!,ÁÁ®C¦üs0p±pðà`WââõΦkÍñ¸Ñhhè`Ý:a¢¦¼¼™ˆî¾;‘Ûn‹1LÔ\!†—^ÚÄ?â½÷²xqBiP"ˈ‰y矟ÅÃÄ»+¥²²…>ØÁBZ·Ì IDATÆ™øû;³bEsçF ¸‹ÝH}}‡^ˆ:tè4jµuË-aÌš5_ßÞý}Ñh4œ>Žxy9hÅ&¼½puµéó/™œœ*¾úê›7g¡RiˆõçÙgg2q⨋~9(*ZZ$´¶JiliÅ$éY“„ÖV ÍÍÂrn’……)ŽŽVÚÎwV89Y_@H²ÄÁጘd˜ZˆÅ2NjàäÉ:Nž¬çÔ©zŠ‹©©i„R9¡LΕà`ÁŤÛ>wÒ@ßs9áàññý’O0ØQ(TìܙϺuéìßsýÅKHˆ!gçjP(T,_¾Ž-[²ùä“{˜;7²¿‡4¨ùç?7°o_Ñ@½h””4òÁ;ؼ9›Q£ÜyöÙ$fÍcˆ›¸L$9ûö²cG>{öÒÑÑID„óæEöižO]]ûY-eœ<ð ‡ÿó²…ÞØØ×yä‘I<úèäûe2QQ¯òÔSÓyüñ©}0ÚkÆ > 6d2Û·ç²vmGŽ”àêjËâÅñ,Z?ä2)$¹^TÒÝVV¶RU%lëÄ%#£a¸»Ûáëë„·÷×’——^^öøø8ö[ð`GG'6d²fÍ ë´®"+Þxã6œmhnëÅ¥¦&1ÍÍ’³¶Eçuc355ÆÑÑ ggk\\lpr²ÆÑÑ œmpt´ÂÑÑWWá>ƒxpã “)8uªž¢¢zím§NÕS]-ˆL––¦ŒéÎÈ‘g»˜Üðõu2”Êõjµ†¢¢:Ž)6„ƒ÷!EEu¬[—ÎÆ™´¶J™4i‹_ßòæ¡HWW7ýë>\Ì×_ßÏĉ£ú{HƒžS§ê™2å]~üña¦N éïá jNªçý÷w°m[¡¡ž<÷Ü,n¹%¬¿‡5¨P*Õ>|šß~Ë!%%—ÖV)cÆx3wn$óæEõéu‡H$Óçfd%ær¹WW„ó±cýéèèbýú£lÛ–ƒ±ñpn»-†Å‹ã‰õïñ|]]ݬ]›ÆgŸí£±QÄœ9‘<òÈd¢£}ûìß0‘Hä„…ý“>ºûвŽ$¹6;ª’¬¬ ²³+©«kÇÈhÁÁnDGûåKLŒ£G{\0Ǩ¶¶ÔT¡4/-­###nºiIIc˜93¼ß;ïæäTñÜsÉœ:ÕÀ“ONçÉ'§õ鹂R©&.î /Žç…f_ÖcüýŸã½÷²`A\ýëÖ¥ó ?Ä qñi°—WͺulØpŒ®®n¦N aÙ²ñLž<ꊂáÝÝJ­˜ÔÚCdªªj¥¢¢…¶6©þX||ñõuÂÇÇQ».l{y9 ˆ Ý– bêë;8~¼’;NPPP €™™)2† ֣뱱‘^@rr²ÁÅÅúë5bŸ2"‘Œ Ž’œ|”ÜÜ*‚ƒ]Y´(žE‹MÉ…H$£¢¢™²²f*+[´·Âv}}‡^ˆ±µµÀ××Q/0ùú:âí-¬ûù9õk¡àHS[Û¡½m§¹YB]];MMbýí¹Ü&&Ãõ9-L›­·Fãîn‹««­Þ©dÀÀ…P*ÕTT4ST$”Ë<)¸™ÊÊšP*Õ(”Éé–Ñ£=ðós68™ÝÝJ²³+õΦcÇÊ‘Jå8;[“Db¢âi(±é.ÖåÕÞ»44ˆX²äsD¢.~ú鯌áÖßCRdd”rÛmÿeÓ¦'IHìïá rs«xÿýìÚu‚±cxÆ;(‚¥‹Ùº5‡íÛsin–êɼyQÌy]J•Ôj §NÕë[ÓÒJ¨©iÃÄd8ÁÁ®˜˜ §¼¼±XNBB Æ1{vdL¿ôôR¾úê©©yxy9pÿý7³xqü “aúÙgûøä“=äæ¾Ù«¿jµ†’’F­ %¸£ „ü(+}¹^T” Hé®…ºººÙ¿ÿ$©©yìÚu‚ööNBB<™5k IIcú%Ǹººþs»w°pa¯¼rk¯†ñ먨haüøñÝwþ©C³¬¬‰ ÞfÇŽg3Æ[¿?7·Š¤¤øõ×'‰°¿ñi ¡ÑhHK+eÍš#lßž‹‘Ñ0æÍ‹bÑ¢xûNq½ÅçLMTT´P^ÞLk«à^>Ü;üý]ðós" À__'üýññqèµ0ïËE­ÖÐÜ,q×Õuèo››ÅÚm±~ûlQÉÒÒww;\]mqw·Óº‘,(*ªåÈ‘::º˜>=„‡šÈر<õÔví:ÁªU˘3Ç…aàÂ44ˆ((¨¥°°–'j8uJè2×Ý­ÄÈh¾¾NZ“!!žúNswÌÀ¢³³›cÇÊHO/åÈ‘²³+Ë•xxØ3n\ ‚Ød¸Xï]:øå—c¬Y“¦_´(Ž;ïŒ3„‡÷2eeM,^ü9ffƬ[÷Ø Ÿ›ÒWÜqÇ*,,LX³æÑþÊ#+«‚÷ÞKáÀ“$&ñüó³ìùõ`@×álÛ6Aˆjjâ©/Í î{!JGmm»Ö%4è8y²µZƒ9Ý còäÑ,[6ŽÉ“GëÏ¡**ZøúëßINÎ@¡P1~4÷Þ;aÈ—äÖ1mÚ»lÝútŸ»Wår%ùùÕdgW’]ÁñãU”•5àïïLl¬?±±þÄÄø*ˆLiiŤ¤ä³cGµµíøø8’”$Qññ×Õ©¶m[/½´ ¥RÅ+¯ÜÊ]wíõj‚… ?ÃÊÊ”o¿}ð’Ç;VÆ­·þ‡¬¬×z¿¯X‘LVV{÷>ß«ãêe âÓ@áÜð¼¨(_î¾;‘[oî÷“gµZCuu+ååÍzQ©¢Bp1UT4ÓÙÙ yD~~‚SÉßßgüüœñ÷wÂ××éº^( î„®vµµíÔÕµë·ëê:¨«kï!*Y[›éÅ${ý­³³õYÛv=‚ +ã›o²m[66æÜ}w"÷Ý7//:::¹ÿþo(,¬ã»ï4Ì^»wQQ……uZ¡IœZZ$¸»Ûê©/•=Ú‘#Ýoˆƒ‘¨‹ôôRíRBNNJ¥g7.˜ÄÄÀ^ïd@ø,íÙSÀš5Gôáá·ß˲eã áá}D^^5Ë–}‰··«W?Ò'³¿öï/â %e9‘‘>ý=œ!IFF)w¡CÅÜ|óHž{.‰±cú{Xƒ•JMzz)Û¶å°m[‚µhQ<óçGãæf{]Ç#uéKôŽ)&;»•JͰa`bbLD„7 ıhQ<¦¦ÆH¥r6lÈä‡QPPKT”/÷Þ;žÛn‹²çaqqo°hQ<+V$]÷×noï$;[ÈŽÊÊ*'3³‘H†¥¥)QQBy\œ?ÑÑ~ÔÖ¶³}{.©©yœ>Ý€££3f„3kÖ&N…™Yßç7ŠÅ2þïÿ¶óý÷‰‹ à­·î ,¬÷ÜX¿þšÅSO­áر×pu½xîUJJ>ø ååï鳨D¢.bc_çÅçrÿý7õÚ˜úƒøÔŸ(*öî-díÚ4öî-ì÷Î;bJJ)/o¢¤¤‰²²&JK›(+k¦»[ €¹VT:_`òð°¿.e ÝÝJjk1©¶¶šš6jjtSÕÕm=º¾ÙÛ[öèlçé)t½óôD%ww»Ëæ–Ë•üúkß|óyyÕDFúpÿý73~´þ‹O$’±xñg44ˆøé§G9òü°†> ÔéÝL……u””4¢P¨033fäHwBC= õ$$ă°0/ÃÅܧ¹YBzz ii¥¤¥•PXX‹F#Gº‘˜¤]qs»t bWOqq#«WÖ‡‡O˜0‚eËÆÂÃû˜C‡Šy௉Žöãë¯ï?¯£”Þgîܰ¶6gݺ¿ö÷P†4‡óÞ{)dd”2uj+V$5´/×µZ(ƒÞ´)“-[²‘J»™Ý€Z­ÁÏω±cˆ‰ñÃÍ͆’’&vìÈ';» ¦N !)i Ó§‡bkkѧãÌË«æÅ!'§Š{îÏ /Ìî•×ìîVý=6…'ž˜vÑãÖ®Mã7¶PTô¶~ß·ßþÁÛoo#3óµ~7­ü ñ©?()idݺ ~þ9ƒæf &Œ`éÒD’’Æôù—±HÔÕCX*)i¤¬¬™²²&Äb¡³š……).ºàL` +AA.¸ôyF‘F£¡±QLuuuuíÔÖžë^j£±Q¬?ÞÌÌ//­˜d‡··#^^öxxØãéÙ{ZùþûCüôS:R©œ9s"xà‰ÄÆö´©J¥r–,ù‚êêV6n|bÈu 4p>r3ÔèKNun¦3B“'AA®†\¦A@]];GŽ”ž.ˆM§O70|¸¡¡ž$&1n\ññ†ì¶>F"‘óë¯Yúðpoo–,I4„‡_'RRòxì±HJÃÿ»ÔPî{8r¤„;ï\ÅúõqÓM†l¢¾æ÷ßOòÞ{)deU2}z(Ï??«W] 72ÝÝJvìÈgýúŒ³œª1<øàDû6¨üR¨Õöî-äûï‘‘Qª¿>\èÜ6yòhBC½(/o"%%¢¢:}þî]wM©©y<ôз?þƀ̉ddf–_ÐéÃèѨTjNŸn䨱2ÆfÖ¬fÎ ë³÷H£Ñ°~ýQÞ~{+*•š_œËâÅ ×lÂxõÕ_ٵ뇽xѲ¾?ÜÉ/¿ãСõû¦Ly‡¸¸Þ}wá5½þuÀ >]/d2[¶gݺtÒÓKñô´gáÂ8–,IÄÛ»wOže2ee=ÝKºEWÞcb2__']ôÂR` +Î}šá ɨ­mÓ‹K55mZÓ÷’®ÎÈh..¶øø8âéi§w/ b“à^êË/JFÃÁƒ§ùöÛƒìÚuî½wœífÊϯ¡¨¨Žââ”JõÜLž„‡{Ý0Á•Còòfm^S1ii¥TV¶`b2œˆ}]||€¡ëäuàìðð­[sP*UÌ™i¿Î¬]›Æ /üÌ=÷Œã­·î4üݯ3Ë–}IK‹„íÛŸ1t+½NìÞ]Àûï§’›[ÍìÙ<ûìLF6”òö lØÉêÕG¨¬laòäÑ<üð$&NÙïÿÇOœ¨aÍš4RRòhhèÀØØ•J #(È•à`¤R99•H¥ò~wrõR©œÐÐòÑGwsûí1ý=œ?å\wÔñ㕜:%d{ùø8âînGWW7ÅÅZ'‘/IIc˜5+¢O„N‘¨‹•+Sù„‡{óÖ[w\S~VQQS§¾ËÏ?ÿ ‚/xÌ+¯l"'§ŠÍ›Ÿ„àüÛoÿïyä”óŧµkײtéÒþÐÅÒ2;»©Èd%tv ——=u¿5kÖp÷Ýw_ñs—–6qìX9ÇŽ•qìX9EEu€ ÞxzÚèJ` ³öVp4y{;ö™ó¢±QLYYååÍ=–²²fD¢.ýqvvB9œ··^^‚˜äáa§›ps³í—V•JÍ–-ÇYµj7……uŒÄ}÷ÝĬYc.:•JÍ|Cff9¿üò·Ë:QYºt)k×®ííá¸î¾ûîÿÏÞ}‡5u~qÿö 3@@Ùî½÷@ÑÖ¶RkÝXœua—µjµþ´u´ŽªuV­Z\¨¨Ô½jq×QnQAöL¼¿?Ba ¸ œÏóø÷ž›“\¸‡÷=/‚ƒƒK½ÿõëd\¿‰‹Ÿàâŧˆ‰I >š©I4j$„§§úh&Ê/÷*“_C´jåªê×Ôºµ{‰Ór)¿U‹Ç3…£ãxäæ&!+ë²²C.ÏV{ÌÛòû.(¿Àƒ½ý`H¥¯ _­ö½S~CCøüîHMý r¹ôíOÐ!Úž_/XXtcYHN> ¡Èj·åW.g8}ú¶lù/>EÓ¦.øá‡èܹä îêöôi<Ž¿‡¿þú÷ïÇÀȈKKS¤§g!/O++3˜˜ 1Q ssc ÔC‡¶CóæëÑÆuÁ ¬¬|“‹¬¬G\‡òV%™QŽŽº}ûnÞ,ell[[s¤§g!33õê9¡_¿¦èׯ9š7¯£öÚ¿kýÃÀÀVV>€ääý•ÞX[÷CVÖ#H¥‘%ÞofÖ<ž $’ëcc˜™5Bjê±wÚ¯¦¼¥žq£Ô2í¾}ûª&¢Z*'G©TKË’›€ R¾ar™™9øï¿×ù.Ň,9YC4o^={6ÀŒ}P¿¾<=UR‰—ËbbÒðòeb~ÓñdUqéåË$de)ÀÃCww{tìè…aÃ: n]Ûüb“ÖõŒÈÍ•áàÁ›X½ú ^¿N†Ÿ_K¬Y3;¿õ¹‹Exø“rž” «ì—/R¶Â?d23sðða ""bòWSŒn‹³add€¶mÝ1rd'´h¡X¶¼£™(¿Ü©L~;tðB›6nå>oR~«Vrr6ììL (v_uü‘Œò äåÉ9™"Lù-j(×h”®ä—1†ŒŒ>þ¸5ÆŒé 7·ò-62`À€J >¨MvíÚ…C‡•xŸoŸ†ðñi@qúüy.]z†«WŸáâÅgÈÌÌÁóçñX¿>«WŸŸo‚¼1hPôë×\µ­w­deåÁÔ”«©oc8ÚoòÔ3JùD³ñª—žž^±Jan® Æà¿ÿ¢pçNîÞÂãDZÈË“ÃÉÉ íÚy m[ÅҔ͚ÕÑè(¡Ü\¢£SŠ—£™^¿N)Ö€\Ù„ÜÃÃîÛÁÉÉJ+*úo#•æa÷îkX¿þââÒ1p`LŸî ò όݥB…'Â=!1ÑíÛÛåzñ¤æÅ5å—BÑ]»Ölj_aß¾ëXºô8BBn`êÔÞ˜8±g¥þHTlmÍ1|xG Þ‰çÎEàØ±{8w.‰  Ñ´i¤¥eâÁƒh„…ý‡°°ÿ`jj„¶mÝñùç>èÙ³!ׇQ«èé)zvyy9Àϯ¥êv‘('OÞÃÞ½ÿâÆçÐ××®BgMEÅ'-ajÚË—?€©©bÞs›6î 솖-]áé)¨t“O±8»XqéÕ+Å×±±éª ²££ÜÝíàînνáîn77{xxØWù’•Õ1†#GþÃҥǗŽÑ£»`Ò$8:ò+¼­™3÷ÁÆÆ óæùUA¤¤*ñx@»v)X¹r8ס*@ù%„Bt §‡aÃ:`À€Öظño¬]{þyßï§V8ÐÆðók?¿VÈÉÉÕ+ÏqþüCœ;÷Ïž%ÀÜܽz5‚žžž=‹Ç¥KOþ¦¦†èÒ¥fÌèËõ!Ôj|¾ n‡ÁƒÛå¬ZÁuHµŸ´„Tú_}ÕAAš—/ ¦Æ½z¥,6%")I±º¾>B¡ÜÝðòr@ïÞ M“³‡©iñ†º5ÑÍ›¯ðá¸}û5>ý´-fÎìWéѧO?À™38rdz­yý!„B©J&&† êƒaÃ:`éÒcøüóøóÏ+øé§Oµr5i##ôèÑ=z4À? @TT Ο„óçââŧÈÈÂËK+¼z•„³gâÌ™c¸jEÅ'-!—K!š•Zx*Ï r††ú¨SÇöhÞ¼ú÷o<<ìáêjÇÉÊqÚâåË$,\x'NÜG§N^8qâ+4mêRéíåæÊðý÷¡<¸-Ú´q×\ „B!„8:ò±bÅ0øûwÄwßíGïÞË0aBO̘ÑGë.*¬n][ŒÕ£FuFn® —/?SŠŠ‰Iƒ™™1œœ¬ñœëP ©VT|ÒzHMÍÁÅ‹OT£˜Ê»‚œrô’³³ '«Òh3±8+WžÄ–-áðð`ûöqðõmüÎÛݳç’“%˜=»¿¢$„B!„”¤Mw?þ%v츌¥K!4ô&~øa>ú¨ס½•¡¡~©£¢îÝ“p!Õê+Ïž=Ãü¡PªÎáÇqýúõ*Û~FF~úé§wÚ†©iüøã ² Axøèëóлw#,Zô ˜Š›7çãÅ‹e8wn&¶n Äüùcôè.èÞ½\]í¨ðTÄ_ÝAK°oß¿X°àœ9óF O¹¹2¬]{cÆtÕºU8ª’X,Æ’%K*ôœ´´4DGGWQDD“*š_‘H„[·nQ~uDE󛀛7o"11± £"šR‘ü¾|ùW¯^Uû—™™YÅ’wQÑÏo^^îÞ½‹—/_V]PDc*šßôôtܺu U•öÑ×ç!  +.^œnÝêcâÄí6l^¼Ð­ŸSÊQQÛ¶…Ht¾ÜÏ«ŽkîÊü®ÿ6š¸NÖ&ÚVûHMMŲeËÞú¸²r[9zçjÅ£G°aÃMÄReBBBpùòå*Û¾X,ƼyóÞiRé+L›Öwï.ÄãÇ‹qòäWظq4fÏþÇwD§N^ ­¡§W¹ÆãµITT FÚŒ‰·£GøçŸï0fL玻‹¤$ &Mê©‘íéŠôôtüðÃzÎÏ?ÿ¬õç¢P‘ü®[·...;v,š5k†!C† ''§j$ï¤"ù9s&êÕ«‡qãÆÁÃófͪÚàÈ;«h~ßÿ} 0@õ/22²j$ï¤"ùˆˆ@ƒ 0hÐ ´hÑUygÉïúõëQ§NŒ9žžžøöÛo«68-doo•+Xª…Q IDAT‡ãСiHJÃ×÷g¬^}FµJwMU×Ü•ù]ÿm4q¬M´­ö‘žžŽ-[¶”ëq¥å¶:sDCe´„\ž77 ØÛ[pŠÎÊÍ•á·ß΢gÏ¥xõ*LÁÊ•Ãakk®ÑýlÛv¶åª4GE@@~þùg®C!3f ,, ·oßFdd$îÞ½‹uëÖqÑ€û÷ïcõêÕ¸{÷.nß¾ÿýË—/ǽ{÷¸hȳgÏ‚¸¸8Õ¿&MšpÑLž<Ož<Á“'OpôèQœ8q‚ë°ˆ$''cúôé8zô("""pçά^½7nÜà:4N´kç'¾ÂW_½‡U«Náý÷—ãÎ(®Ã"¤Z¹»»ãñãÇ\‡Qn)>ÉårLŸ>|>X¼x1ÅIÒ××+V¬€³³3¶nÝŠ¯¿þB¡{öì âÿÞ{ïaÇŽ°¶¶FDDvïÞ ooo@(ª.d•Û †——ÌÍÍ1fÌÈd2Àž={àîîSSS 0éééªXÿþûo´hÑÆÆÆhذ!>\áXKóûï¿ÃÍÍ æææ€\^³+ðÚäÆH¼ÿþr,_~Ó§ûâÌ™oб£—Æ÷óøq®_€€®ßvyÌ;ÆÆÆðññQ›òô¶ÏKyÞÛááá˜:u*‚‚‚Àçóáää„+J^zôÞ½{èÒ¥ LLLP¿~}ìÚµKíþ-Z yóæo=¦3gΠI“&022BëÖ­U¿D•KEâÔ%ºß7nÀÃÃ={öX[[ãý÷ßǃJÜå·€.ä7&&þþþpss4jÔˆ‰‰)q;”ߺ_xþü9êÕ«±X¬ú½©4”ߺ߈ˆDFF"((àèèˆk×®¡M›6%n‡ò[@ò›’’™L†víÚ¼¼¼`ooØØØ·Sòk`ÀÔ)½qöì7°¶6Cÿþ«°páU¯ÜšF×Ü@éïé¢ÂÂÂàåå333à›o¾Á±cÇ”~M]ššt¬©<”uÞ)íù„íÛ·Mš4‰µjÕŠI$’bÇT“ó[¹\΂ƒ¯° ¾c;.dáá«=†ŠªÈõŸ¦®¹ËzO~/>þœYXX°#Gް¬¬,öÓO?1}}}¶sçÎ2¯©‹ÒÄurEëU‘ík*ewÊ:­™<~ü˜™››3ÆÊŸÛ¢4‘#ÆÊõ~þW#Å'–““£ºmΜ9ì“O>Qˆò¤øäÉf``ÀrsscŒÝºu‹9::2Æ'IìÍ›7Œ1Ʋ³³ÙÍ›7UÛT¾`OŸ>Um7&&Fu÷îÝYHH›9s&>|¸ZŒÍš5c+W®d6l`Ý»wW»oРAlÁ‚е(åsT·uîÜ™…††–ûu¤âSÅÝ»Ízö\ÂêןÅvï.ù—+MëÜùGö믧5²­Šþp>tèsvvf÷ïßgŒ)NL©©©Œ±ò}^ÊóÞ c|>ŸI¥RÕ¶æÌ™Ã†ªvÒÚ³gkݺµZ|Ó§Og3fÌP»ímŧ_~ù…õïß_õ}NN[²d ËÈÈ(3–²î+/mûåWó{îÜ9Ö¨Q#6pà@Õþ £üеüÆÄİöíÛ3kkk6}út–——Wì˜(¿t%¿÷ïßg:uR$®\¹Âø|>;xð`±c¢üЕü®Y³†™™™±>ø€…††²… 2SSSvûöíbÇDù- +ùeŒ±E‹1¡PÈȼ½½ÙøñãkÝùùmââ񯯱[™³ólÆŒ],==‹³XÞ¦¢Å'M\s—õž.ü^\´h8p êqr¹œ …B¶sçÎ2¯©‹ÒÄu²¶Ÿ4‘‡²Î;eŠÖL"##Uŧòæ¶(M䈱òŸ42íÎËË †††ªï›6mª6ÔÜ\ÑsGOOÆÆÆ000P}_ǃ³³3ÀØØ7oÞÄ{ï½///|òÉ'ņ~ …BÕ×Êm½yó¦Xï‚Æ+œEGG£~ýúj÷5hÐQQóƒËkQúúúÅâ!š——'ÇŠ'ñá‡+!XâìÙ™6¬C•ï÷É“8DF&¢o_nzc|ôÑG4h:wî 777!55@ù>/å}o{zzÂÈÈHõ}Ó¦MñúõkµÇ¼|ù=‚»»»êßž={––V¡czùò¥ÚgÒÐÐß~û-ÌÌÌÞKyâÔ%º”_‘HŒ3³gÏÆTû+ºʯ‚.åPü|½ví¢¢¢pâÄ lݺµØ1Q~ èJ~›4i‚Ë—/£CÅÏÌŽ;bĈ +vL”ߺ’_CCC˜››#44 ÀܹsÑ¿lÞ¼¹Ø1Q~ èJ~ÿúë/¬_¿8pà"""p÷î]üúë¯ÅŽ©6ç×ÑÑ ¿ÿ€Í›Çàܹ‡èÕk)Âßp–Fhâš»<ïi ø{HOOžžžÊwM]XM»NÖDÊ:ï¼í÷´Â5“ÂʛےTWŽ4R|JJJRû>!!¶¶¶ÞNჟnݺáåË—jÿÖ¯__¡}YZZ+X°¶¶Æ£G0räÈR÷Eù- +ùýóÏ?ÕVq±°°@§NðèÑ£bû¢üЕü>þ¼X6KKK(þ`‰b·S~t%¿nnnj…wwwˆD¢bû¢üЕüÞ¾}:t€µµ5EA©W¯^¸uëV±}Q~>hŽóç¿E›6î6læÎ=¨ó½ 4qÍ]Þ÷´¥¥%’““ÕnSGjû5µ&òPÖyçm×Y¥†4y¾ª*)>½|ùýõÅR}7nÄ|ðNÛŒŽŽFãÆÑ­[7èëëãÊ•+%þð,ªwïÞØ³gªúx÷î]üóÏ?€>}úàôéÓxñâŪM€¯¯o…ã;tèîß¿_áç‘ÊaŒaÛ¶pôíû ôôôpêÔ×?¾GµVÎ/^|ŠnÝêUÛþŠZºt)zöì ´oߣFR5®ìç¥$ÑÑѪ¦‰›6m*öñõõExx8>|ÈÌÌD›6múÖíþìôéÓGŽQŒ¯]»†‘#GB__ÿ­±”'N]¢+ù=zô(bccñõ×_#>>^õ1%%å·4º’_###üüóϋŀ´´4„‡‡« ü–LWò{ûömôíÛWõ‹szz:<ˆ÷Þ{å·4º’ß®]»"&&W¯^ øüСCèÞ½;Êoit%¿-Z´À¥K—T9ËÈÈÀ±cÇèü\[[slÜ8ëÖ}†ƒoÂ×÷ܼù’ë°*M×Üå}OûúúâСCHLL\¹rÐÓÓ{ë5uM¿NÖDÊ:ïTö:«"ç+ÎrTt"^ez>uìØ‘Õ«WuïÞ999±~ýú±œœÕüA¥§OŸªæ$2ÆØíÛ·Õz>éëë«î{ýú5spp`Ý»wg¾¾¾¬_¿~ÌËË‹ùùùÛ.cŒõèу…„„0¹\Îüýý™µµ5ëÙ³'suueýúõc+W®dŒ16oÞiHzz& ØÂêÖý’-_~‚åæÊ8‰£iÓ¹lëÖpm¯¢s⣢¢˜««+kÖ¬ëÝ»7³²²b›6mbŒUìóRÖ{;,,Œ¹¹¹±&Mš°nݺ1¡PÈzôèÁ²²²ŠÍ^¾|9ãóù¬wïÞÌÅÅ… <˜Édê¹)©çSáÏcŒ1{{{Ö»woÆçóÙÚµkßKY÷•—¶õœÐ•üÎ;—(öoÊ”)Œ1Êoit%¿yyyÌÏÏ Ö½{wfggdž ¦êW@ù-™®äW&“±!C†0[[[æããÃìííU N£ü–FWòËc;wîd–––¬GÌÉɉ :TÕˆò[2]ɯ\.g“&Mb666¬W¯^ÌÑÑ‘õë×eff2ÆjO~++..}öÙ&V§Î—lÑ¢0&•ïUYY©©•z^E®ÿ4uÍ]Ö{ºè{100 æëëË:uêÄZ´hÁöíÛÇ+ýšš1Í_'k[Ï'MÕ>J;ï0Vúy hͤpϧŠäVÓ9b¬šŽ+eee±sçΩ5¹zWéééìôéÓìÎ;Œ1Å ú÷ß—ë¹wïÞe§OŸféééÅŒd'OždkÏ*T|*Ù/YÛ¶ XÛ¶ ØÕ«Ï9‹ãõëd&Î`·n½ÒØ6+óÃ9;;›ýóÏ?ìÔ©S,>>^í¾wù¼(………±6mÚ0©TÊ.\¸À®]»Æäry©ŽŽf'OžT5Ë«¬'Ož°“'O²×¯_—+–ŠÆYmûå—1Ê/åW{ò{÷î]vâĉrýœ¤ü*èR~#""؉'ØÓ§Oߺ_ʯ‚.å7..Ž:uª\çnʯ‚.å÷ùóçìĉµ6¿ïj×®+¬~ýYÌÇg)‹ˆˆyûÊ¡_¿åL(œÁ¦Of{ö\+÷êÛ•¹þÓÄ5wyÞÓ ,""‚ݹs‡?žI¥RæééÉ®\¹¢zLu]SkSñIIy(ë¼ÃXù~—Éd,))Iõ½&ÎW•UžâSñ±•dbbMm€b¾cáažuëÖEݺuËõÜfÍš¡Y³f%Þ§lÜE´c ëÖòeÇѳgC¬Z566æœÅóôi< ^=GÎbäºuëVâ}ïòy)ÊÈÈH5L¿,...pqq©Ô> «W¯êÕ+yJcY±”7N]Aù-ÿ}ºH—ò[ÖÏТ(¿ º”ßF¡Q£FåÚåWA—òëèèˆ>}ú”k”_]ʯ§§§ªñóÛP~‹>¼#ºuk€éÓƒñÁ+0wnv{§VÖÖŠk”ÐÐ[8pàär[[ té⎽Щ“ê×w÷îíB4qÍ]ž÷ttt4zõê…ýû÷£qãÆØ´iòòòЦMÕcjó5µ&òPÖy(ßïá<vvvªï5y¾ª +>¢)ÉÉíBxøÌ™ÓãÇwç|U„¨¨ØØ˜Ã˜Ó8ªŸÏ‡··7×a(;mŠS—hÓëFùÕAA}Э[}L™²½{/êU#àãÓ°ÂÛrt´B ‹†B&S¶Æ$’lœ;÷.ÎåääaöìسçfÎüÓ¦õæ|š]QQQ)èØÑ‹ë0!„B!dii‚Õ«ýÑ«W#|ûm.]z†GÃÛÛAõ˜ÔÔ èÕ«Zµ †!µŸ§ââÒ1nÜ6<{–€;Æ£W¯ò5@­n bNžB!„BªŽŸ_+8;[ã›oö¡OŸŸÑ¾½d2†Çãœ,XXÃÛÛõë;¢k×z¨WÏ&&†6lC©Û50ЇL&GïÞ1mš/ZµÒžÙ„T'*>Îüûo$Æßsœ8ñ¥VÎuVbŒÁÌ̈ë0!„B!ï %%ÏŸ'àÅ‹DÕÿ‘‘‰xþ…··#¦NíÆáé)€‹‹M±íI$Ò÷ch¨¹œaР¶˜2¥¼¼J|!µŸ'v¹s¢oߦXµj8Ì͵{9‰$úú4$–B!„mŸŽ×¯S•‚ׯ“™„çÏðüy"ÒÓ3( Löðòr@Ÿ>M0i’¼¼àé)€µµΜ‰@PÐ.ìÝ{›6)±ð(FC@*U® x04Ôǘ1]1aB8:ZUÛq¢Í¨øDª•L&ÇÂ…GðûïÿàÛo?ÀÔ©Ú×ß©4&&´´(!„B!\KMÍÈ/,)ŠKÑÑ_GE¥¨ A††úpq±§§mÚ¸cðàvðòÀÃCggë2¯C|}ãÔ©¯0iÒvôë·K—ÆÀmJ|¬r66f˜4É£GwŸoªù'D‡ÕºâÓÅ‹OÑ¡ƒ' õ¹¥ÖÉÈbòä¸té)6o@¿~͸©ÜD¢lÕº !„B!Õ&'' bÄÅ¥!>^„¸¸ôüïÓó¿!66 "Q6€ÇÓƒPhºumQ·®-Zµrƒ««âk77;8:ZÇ«üº]\lpðà4,]z Ó¦ãÒ¥gøñÇÅþ(=lX´l銡CÛÃØ˜®HÜ\ÒÓ³`ooÁu(œ+õ“1dÈꌣÚÄĘ#)É Mš$C_ÿíKb͈MèQ¿#)I‚ƒ§¢yóº\‡T!U5ån×®]ÈÍÍ­’m“²…„„`ĈUºÊ/w(¿5å·f£üÖl”ßš­¬üJ¥yˆŽNAllÞ¼ICtt*¢£SPPdR6ö===°··„³³¢ÀÔ®œœ¬àêj WW;¸¸ØTù CC}ÌÛ;z!(hîÞ–-puµS=fÅŠa•Ú¶¿¿?:¤©Pk¤jÙ¦ëR©^¾´„Db„fÍ’`d$ÓèöuQ±â“««+ÌE,ÕÂÌL‘È7n8¢U«­y <®®5s僻w£0zôØÛ[àØ± ­¹©Â,,L ‘dkt›:t _Œ84xð`tèСʶOùåå·f£üÖl”ßšò[31äæêãý÷ýÁç7Áúõ瓆7oRñæM*bcÓ”TPX255B:6 ­!Z¡E Wpv¶É/6YÁÞÞR«f«øú6Æñã_`ܸmxÿýX³f$z÷®üJÝ5ùš[“ªúuÒdýƒ1 5Õ11æHKSô4vvÎКšCU*O=C1ƪ)­œ,A³fßœ­±oßdxz 8Žªæ:~ü¦Mû]ºÔúuŸi}cñÒ´oÿ?ŒÓ“'÷â:B!„BªUzz&bb£•Þ¼ICLL*bcÓ•‚˜˜TÄÇ‹›«¸À60àÁÁ¸¸ØÀÙÙZ5rÉÙÙB¡5lmÍ9>¢Ê“Jó0kVBBþÅ_¼‡/¾èûNSûˆî{ó&»w_Ãöí—’"ǃL&‡þýwõV¸Që&¤ÚÙYÀÊÊééYHH£_¿•صk"Ú´qã:´gëÖpÌŸÝ0ožŸN¯gii ±X³#Ÿ!„BáZNN^þ(%EQ)::11Н߼QŒ^ÊȪokk¡PQPjÚÔ}û6³³µªØäàÀ‡îþÞÿ6ÆÆX¹r8Zµrüy¡øï¿WX»v$¬¬Ì¸T#™LŽsçbûöKøûïGÐ×ç© °2™zzÀÂ…ŸPá©ZW|€FœqõêsäåÉ‘!ŧŸ®Å¦M£Ñ·oS®C«cX¶ì8V¯>ƒï¿÷äI=¹éYZšPñ‰B!„èÆĈŽVL}SŒ^JÉ/.) L bÕã P§Ž-„Bk¸¸X£uk·ü‘KŠLuêØÀÔÔˆÃ#Ò£FuF³fu0~¼bÞï¿ I®Ã"U,..ÁÁW±cÇ%$&J ¯¯¹œA./˜Zg`ÀCãÆÎøøãVFª}jeñ©iSܺõ992Èåräæ2nÅO? ¨Q¹O§ÉdrÌœ‚ýûÿÅêÕ#ðé§m¹I#llÌ eq!„B!*é陈MW—Þ¼I-Ôk) ±±iªÑ<žø¨SÇÎÎVèÔÉKmÄ’PhM+rUP«V®8yò+|þùNôïÿ+–/†O>iÍuXDÃär†óçaÓ¦¿qéÒSèëë!7W±x™LV¼‹‘LÆðãŸBO¦cV+‹Oõë;A./x“0ÆÀðÝwû—Žo¾yŸÞ(•••ƒI“vàòågرc> Zå÷Z²£#_«x×vvؽ{"- Ô);ƒY³>Ðé–#DL&ÇÚµgpíÚ P«%e` ~ýš¡M÷jŠNwÔÊâS£FBäåÉ‹ÝÎÃêÕ§ñæM*~ùe(œ+ --Ÿ}¶/_&!$d2Z¶¬Y+÷¹ºÚáĉû\‡A!„Bj€¤$ âãÓU½–ââÒTÅ%ÅÿiÈÎ.XµÏÊÊ B¡êÔ±››:vôÌ­d''+¸¸ØèìÂ>5¾>ó猦M]ðõ×{ñða Ö­û |¾)ס 04ÔÇï¿àý÷W >>½ÄZ‚’ž0ož_5F§;jeñ©Aa©÷Éå ÞD||:¶l ¤“x9ÄǧcèÐ Jsqøðô¹z »»=ââÒ‘““#£Zù±!„B!å F||ºj\llºZa)66 Rižêñ66æprR–<=Ð¥K½üKVpt´¢>K:äÓOÛÂÛÛ[ñÁ+±mÛXÔ«çÈuXDìì,2ýú­€X,…\^¼¥¯ÏÃäɽàâbÃA„ÚO1Vú˜±¬eËùHH•z¿>ÜÜìpðàT–Õ™nyý:C†¬‡¹¹vïþ5óµzø0½{ÿŒþùÞÞ\‡C!„Bª™²ywllââÒU…¥¢_çä–ìí-àèh•ß[ÉNNÖ ­àìl“ÿ¿5­†U%$ˆ1nÜ6<~‹µkG¢OŸ&\‡D4äÚµ:t=òòdjÓïôô}‚¯^ ÀR‚µvG“&ÎHL¡´Ò›\.Çóç ˜=û6oS­±éЧOã1dÈz89ñ±{÷$X[×ÜåEëÖµ (¶Qñ‰B!¤f‘ËEùSàÓÞ”«Ã)G-ÅÇ‹TÍ»ÀÁÁŽŽV ­Ñ¸± z÷n¬VX ­al\k/·j5Kìß?³g@@À|ûí˜6Í—ë°È;ŠOÇüù‡ðé§m°wïuµûôôô0gN*<•¡Öž 7vÁ¥KO‘“#+vŸ¾>öö˜=û£³Z›¦Ý¿ÿÆ­GýúNؾ},-M¸©JYX£n][±dÉ`Ž#Ô>ÿý[ñÑG-°råpèëóÞþ¤äܹ‡øì³Íxôè§?ÍB!¤*(G+)¦¾)F+)¦Ã¥¾u´’““¢’²ÀTx“““õW"Z/!AŒ€€ß™„­[ѱ£×!‘RäæÊðÕW{z ÿûßt+õqÉÉ89YUs„:çF­->ÀçŸïÀgŸuFçÎÞªÛöo¾Ù‹³ggÒ²˜…œ?ÿ[0`@küòËÐZWx€ÄD1Z´˜‡ƒ§Ò B!„"J­¤ø_ÑÄ;)I¬Ö´ÛÆÆNNüü‘IVpv¶‚££ùpq±@`I+O“%;;Ó§ãÔ©X¾|(õÖB"Q6ÆÛŠÿþ{Í›УG®Cª jwñ©$r9CŸ>¿ n][üñÇX®ÃÑ çÎ=D`àV Ø¿ü2´VÏeíÐa!Fî‚É“{q !„BHµÈÉÉC|¼(¿·’HÕ°;>^ù½è-£•¬T«Â99ñU£—h58R[1Æðãaýúó˜1£¾þú}èéÕÞk,m“†‘#7!55ÁÁи±3×!ÕT|*É… 1|ø80:Õî.gÎD`ìØ­<¸~þyH­?)~ñÅn$&Šñ矸…B!ääæÊ”$FLLĈ‹Sü«ü^Q\JMÍP=‡ÇÓSF }”œœø4Z‰Jصë*¾ûn?>ø 9V­AÅXŽ=|ÿM°¶6ßN€³³5×!Õ$T|*Íðá––‰cǾ¨µeáièÐöXºtp­} Û¿ÿfÍ ÁÇ?Õªfë„BÑyyr$%)ŠG Š>J‰‰bU“nå÷‰‰bµç –°··€³³5ÅêoÎÎVªïíí-ÕîBÞÍÅ‹O0~üvx{;`Û¶±ÔŸ#ÿüóãÇÿæÍë`Ë–@ðù¦\‡TÓPñ©4Æ¢oß_ðë¯#0p`®Ã©vgÏ>D`à*<›†6màÈ‘éhÛÖƒëp!„R‹(›u'&ŠU«¾)§Á)§Å%$ˆ˜(V­ê (ú*9:òUÿ„BëB#—,áäd>ýaŽ<{–€Q£6C.gؾ}4pâ:¤Zeÿþøê«=èß¿%V®NçªAŧ²|ùå\¼øáá³kÕÈË—Ÿá³Ï6ç7§©vEuîü#† ë€éÓ}¹…B!5Db¢8 \:EªæÜÊÕàââÒ‘”$F^ž\õ>ßNN$åÔ7e¯%Å×´ !º %%[ñèQ 6nCM®«É¦M°`ÁaLžÜ ³gH×¾U‡ŠOe‰OGçÎ?᫯ޫ5 ¦oÝz…áÃ7Àǧ~ûmd­\ÕîmfÎ܇§Oã:ëP!„¢Å”KpÇÆ¦š'FB‚bÄRb¢qq¢b+À™™åO}+Tx´’²ÀdjjÄáÑB4-''_}µGŽÜÆòåÃ0h­„WUcX¼ø(~ûíæÍóÃĉ=¹©¦»A)ƒ££&Mê‰Õ«Ï`øð°±1ç:¤*õða,FŽÜ„޽°f?žJÑ»wcìÞ} ©©5þ=A!„â²²r/R‘DHH#>^ÑKI1JIR¬§Ÿo ''+pr²†‡‡=„BkØÛ[¨¦¾ …V077æèÈ!\222ÀêÕ#àäd…  ]ˆOÇ”)½¹«Æ‘Éä˜93!!×ñë¯#¨ÈWMhäÓ[H$Rtéò# h pN•yù2 ¼ 8aÇŽñ011ä:$­•‹Æç`É’Á2¤×áB!DCÒÒ2ÕF$’Äj£—$©ê9<žìí- (V}³·WŽR²€££,áà@Óß!³eË?˜?ÿÆŽíŽùó?GÓÁ4A*ÍÃäÉ;ð÷ß±aÃ(ôéÓ„ëj švW;v\Æ÷ßÄ… ³àînÏu8“†þý…Ph…½{?§¿¶•C@Àèëóðûï\‡B!„2Èdr$%IJœê¦\õ->^1.''Oõ<##Š^JÊàìì,T+¾)F*YÂÞÞ’F‹BªÄ‘#·1mZ0úõkŽ5kü©ö;‹³°Ä`ûö±hßÞ“ëj*>•G^ž¾¾?£^=GlÞ<†ëp4*!AŒVÃÔÔ¡¡ÓÀç›p’Nصë*æÏ?„ÁȈþŠI!„T7åÔ7åêoññŠ©n11ij}–Š®üfnn¬V@,áèÈϤøßÁÁ’¦ÖB´Â¥Kϸ-Z¸bË–XZÒõZe$&Šá￉‰bìÚ5  ¹©¶¡âSy>ýcÆlÁáÃÓж­×áhDjj ú Riž;; ®CÒII´l9[·¢oߦ\‡C!„Ôyyr$'‹óû'‰ò‹HiªþI "$%I—ŽŒ ©ÚsSß,‹Lu㫦Ã)G1Q“nBˆ®yðà üý7B à#8x",¹I§¼~ŒaÃ6öîýuëÚrQ­DŧŠ<ø7H¥2>ŒÁˆáàÀÇŸN€@@…;ŽPñ©"îÞB¿~+±iÓh|øa ®Ã©´¬¬Œ¹ /^$!4tjìcUvハ¹sCqçÎÿ`aA}²!„Ô.%M{KNÎP­þ¦hέø?7W¦zž¡¡>ìí “,óu[¨ MŠbff4J‰B”’“%øì³ÍˆŠJÁÎãѲ¥+×!iµë×_`ôè-hÚÔ[·Ž¥)‹Ü¢âSEMú'nÝz… féä_ØrseØ‚;w¢°oßdšëúD¢,4o>¿ü2”–ç$„R#äæÊ’")qÚ[B‚ b$'—>íMQTRôL²³³P5ëVN,akK½”!¤²23s0a¸ví6mŸ†\‡¤•NŸ~€‰·Ãǧ!Ö­E«rŠOŠnÝ~ÂìÙaüø\‡S!Œ1L›Œ3g`ïÞÉhÑ¢.×!é¼ñãÿ€Xœ={&q !„R¢œœ<$'+ J‰‰âü¯½“” ¹•_'%IÔž[Ú´7¡Ð¶¶æ4íB8›+Ã×_ïÅ¡C·°|ù0úCx¡¡·0cÆ. ÜK—¦IµÃ *ÿUP:67®V­:¡CÛƒÏ7å:¤r[¼ø(ÂÂþCpðD*ߊH%7vbd’@` ;;sÕ´7*(BˆîÓÓÓÜ9ÁÆÆ ?üpbqv­¿Y³æ />ŠY³>Äôé¾\‡CŠ âS%ðù&øê«÷°`ÁŒÝ®®v\‡T¦S§îcî܃øî»1p`®Ã©Q õ1thìÙs 3fôG•uB!Å#‰ÚT7eϤ””ŒB…% ¤Ò<µçÚÛ[ÀÎÎööŠUÝêÖµUH*|»½½ŒŒèW:B©&Oî Ìž½I6¾ÿÞ¯ÖöaŒáÇÿ† çñÓOƒ0fL®C"% žO•”—'‡ÏR4i⌠FsN©nÝz…Áƒ×aÈvX¼x×áÔH‘‘‰èÚu1vìÞ½q!„*$“É‘”$AJŠññ¢R KÉÉHN#/O®z®vv°µµ€“Sá’•ªÐääć­­âkêQA!¤|¼‰/¾Ø¡CÛcñâAµ¦Ï‘L&ÇwßíÇž=×°jÕl¡½¨áø»8uê>¶âÈ‘éhÓÆëpŠyù2 ýûÿŠ6mܱeK@­9qaÈu°°0ÁÖ­\‡B!¤‚ÊjÈ]´9wrr ÿêddd 6ÉÎ΢ÐT7õÛíí-8½«Aƒ~ƒTš‡#G¦kÕðÆäd ú÷ÿ¶¶æ ™ SSêïP•ŽùS§îÄ•+sáâbÃu8„Rë½­!·âkq¹rLu+蛤,,ñù&!!„RÜÅ‹O°;{cÓ¦106®™Ó²³²r0a¸víþøc:wöæ:$R6*>½«{÷¢Ñ¯ß ¬[7 ~~-¹€âƒ8xð:¤¤d ,,vvô—Öª–—'G§N‹àç×RgšÐBˆ®‹³ ­âön ¹Ë*,QCnB!ºìæÍW9rš5sÁ¶mcannÌuH%ecôèÍxò$ÁÁв¥+×!‘·£â“&íµk/ðÏ?³8oø)“É1vì6ܼùaaApw·ç4žÚdݺsX½ú nÞœ_ãNð„R”ÓÝ’“3T#””M¸ÅnÈ­,,98ðak[PX¢†Ü„Bj›ˆˆ ¾®®¶øóÏ °²2ã:$HJ’Àß#ÄØ»wê×wâ:$R>T|Ò„ØØ4tíº_ý>>ÿ܇ÓX¾ûn?öíû!!“Ѻµ§±Ô6))hÛvæÎíÀÀn\‡C!Õ.7W†”õb’² ¤¥”’’‘?rI‰Dªö|##ØÙY¨F$•ÔÛÑ‘ŸÿjÈM!„”åùó ¶VV¦Ø½{K®Cz'oÞ¤bøð ÈË“cÏžIZ¿êiJF†]ºüˆ>j‰E‹VûþOº±c·aîÜþ˜8±gµïŸ(DF&¢G%´Ì'!D+ÉåLmôQábRJФØè¤”” µçðTÅ";;Kªâ’½½¥jt’rÊŸoÊÑ‘B!D)!AŒ!CÖA*ÍÅþýStn¤[·^á³Ï6ÃËË;wŽ«1Sk*>iRpðÌž}çÎÍ„——Cµí÷áÃX|òÉj|øaK,_>´ÚöKJ6mZ0þûï5.\˜O{V@$„ÔL…§¶%%IT½’RR$ª•ݔťää þ±Ïãé©>²··TM{³µµ(6:‰«‘½„By7II ºI6öºum¹©\.\xŒqã¶¡sgolØ0ŠVq×]T|Ò$™L޾}««¶m[-ûLN–à£VÁÙÙ{ö|CCýjÙ/)Ýóç èÙs)Ö¬ñÇ€­¹‡¢cÒÒ2‘”$)µwRb¢H­˜$“ÉUÏÕÓÓS+ÙÛ+pÛÚ*ŠIööÊ“¹jÄ’žÉ !„Ú %%Æ­Gjj&öïŸ77íî™täÈmL›Œ?n…åˇѵ®n£â“¦ýý÷#Œ±û÷OAçÎÞUº¯Ü\† Y‡øx‚`ggQ¥û#å7eÊNÝ—ëpˆfPñ©*}~ÁŠÃ0xp»*ÙÇúõçñÓOaëÖ@ôéÓ¤JöAÞÍäÉ;ñèQ,Μù†F?¢¥²³sÕVs+((•”ß+ N…§¹€……±Z1I±r›zï$GG¾ê>*&B!„k"Q6FŽÜ„W¯’2õë;qär†¹s`çÎ+Xºt0FŒèÈuHDs¨øTUfÎ܇sç"<ü;7E;}ú·bΜþ˜4©§F·M4çÉ“8ôêµ ë×Bÿþ-¹‡O.gª¢Qjj¦jŠ[Ñ‚’²1wJJ²²rÔ¶ah¨ŸßÉ\5*©ð÷Ê©mÊB“9ŒŒ 8:bB!„Ê“H¤9rž?OÀ¾}Ÿ£Q#gÎbÉÍ•aÚ´`œ8që×B¿~Í8‹…T Ý-> 2„ëÊ”“£›7àí ScÛ•Ëõpã†#ll¤¨W/UcÛÕ´}ûöUË~.^¼ˆÕ«WW˾*ãÑ#[ÈdzhÒ$™ëPªTuå›Ô.R¤¦fªú#LuS‘T¸ØTôGŸoªšÂfcc¦}¤,) J¶¶f°··„¥¥ GGK!„Úˆëë™LvÈÉ1@ëÖñÐÓã¦<ðê±±hØ0ÖÖÒjß?]ÏT9Ý->)Ž <˜ãHJ—­ÙÛXA™™05•qvb(KHH»¬*»ví‚¿¿¿Ö¾rsõa` ×Ê\iBuç›è®¼<¹Z¡HÙh» p¤è—T0õM©4OmÆÆª"’rÅ6sµ•ÜÔ Jæ00 æÛ„BÑ^Úp=#—ë!+Ëææ¹œÅ—ÇƒTª_í1ÐõLµ¹¡Ós‚ƒƒ1bĮà …(OžÕ*ÕÜà*ß„{bq¶ZƒmÅȤLÕªnÊ‘HÊ¢RzºúP===ÕH$e¡ÈÅÅ-[Ö-4JIÙ[ñ¿¹¹1GGK!„Rµèz†t=S}tºøD!äÝegç"55CU0RŒ>RŽ@ÊÌŸæ&Vû¾è n¦¦F…¦´) Jnnv°±1Ë_ÁͲX±‰ñB!„R;Pñ‰Bj‰DŠÔÔ Õè#EQ)CõuáæÛÊÛ‹6ÝÖ×ç©<²µ5‡——Úµ+øÞÆF1"ÉÎN1JIÓ +B!„Bj*>Bˆ–*Z4*\L*Z@RÞVtD’rõ6sØØ˜ÁÆÆnnvhÕÊ5ÿ6sÕˆ¤Â!„B!„M¡â!„T±¼455R‡”#6ª”_+F$™Ã‚ú$B!„B¸EÅ'B©©4¯Pñ(³P³íâ$eÃm‘(»Øv,,Œacc®š¶fccŽºum‹— ßobbÈÁB!„BÈ»¡âS5‹Åøí·ß0kÖ¬r?'-- ‰uêÔQ»]"‘àÉ“'pww‡­­­¦C%U¬¢ï…´´4DFFÂÍÍò]D¢l¤¥)F¥¥e"--SUT*©ˆ”’’ÌÌœbÛ)<òHY0òövT+"}Œ¡¡>GL!„BHåUæÚ¢¢¢`bb@PE‘mGŧjžžŽ~ø¡BПþzzzX´h‘ê¶S§NaèСpvvÆ«W¯°bÅ L˜0¡*B&U¤"ï…+V`Á‚ðôôijgϰhÑ"UC”ºG"‘ª G©©ŠBRJJ&ÒÒ •ÿ”·¥¦fB&“«mÇÀ€§6uÍÆÆB¡5š4q)TD2+öZµB!„Ô•¹¶MNNFÇŽ±`ÁŒ7® £#ÚŒŠOZæèѣؿ?‚ƒƒ1sæLÕí¹¹¹3f V®\‰1cÆàÊ•+èÕ«ú÷ï¡PÈaĤ*ܼy?üð®_¿Ž† """;wÆG}///®Ã«2RµbQáIii… H£”ÒÒ2‹5Ùæñô`m­( )þ7ƒµµÜÝíamm¦ºMý~sðù&9!„B!5S`` ’’’¸ƒpŒÇuÕeîܹ066†¢££U÷íÞ½ÞÞÞ000€P(ÄÏ?ÿ @Q¡õõõÅŠ+àìì @€­[·â믿†@ €P(Äž={ááá˜:u*‚‚‚Àçóáää„+V”˽{÷Ð¥K˜˜˜ ~ýúصk—Úý-Z´@óæÍÕn»~ý:²³³1jÔ(@§NЬY3?~¼Ä}œ9sMš4‘‘Z·n7n¼5Ίƒ.Ó…÷ÂÙ³gѳgO4lØиqcøúú⯿þ*q;ږשּׁÄÆ¦ááÃ\ºô GÞApð¬Ys Á—_îA`àV|òÉøø,E«Vóáîþ êÕ›…víþ‡>}~Á!ë0iÒv,]z {÷^Çõë‘HLÃÒÒÍšÕAÿþ-Ô«V@pðD=ú._žƒG~Btô Ü¿¿ááß!,,;vŒÇêÕþX°`¾ø¢/ºbÀ€ÖèÑ£Z´¨ WW;*<B!„  ×3J¿ýöcèÔ©S™Ç¤m×3¤ 0€—ë±'Nœ`ÎÎÎìéÓ§L$1???6iÒ$Æc"‘ˆ³ÐÐP–Í.\¸Àx<KHH`±±±ŒÇã±ï¿ÿžÉår¶nÝ:€-Y²„Éår¶lÙ2æííÍc,,,Œ°3f°ŒŒ vñâEfeeÅŽ=Ê¢¢¢˜±±1cŒ1‰D„B![»v-ËÎÎfgÏže|>Ÿ]ºtI-f6gÎÕ÷[·ne:tP{̨Q£Ø¬Y³ŠoTT³´´d¡¡¡,33“-Z´ˆ¹¹¹±ÿ·sw1M¥iÀÿ dZ•Ò"¢àDe$%ˆŒr1~`Ðx©qH€˜MüÀd£2FgìY/6èÕFŒ~T/\ÃL *Ì TDKÔ2DiÕ±Ï^O¨5Pœ@9íÿ—ôâœ÷í9Ï{Î{’>ON_·Û=jœ£µùª¾¾^&sZ÷|j™ Ç—¬¬,Øóòò¤¼¼ÜkLþ¾ßÓ§gÉ·ßþSV¯>*ß|ów™7ïo2gN¥×çë¯÷ÊÊ•ÕRTô)-ý—|÷Ý¿eß¾ òãÿ‘S§þ+çÏß‘_~ùMl¶^ééy!ü1$n·ÛçXˆˆˆˆˆÔ&Pó‘ŽŽIJJ’þþ~ÉÍÍ•“'O~vLþÎgT\Q“;ª½Êã)>Y­V‰—ÎÎNù𠊈ˆËå’¶¶6¥ïLJ©»»[ž={&dhhHDDºººD«ÕÊ»wïDD¤½½]bccEäêÓéäÍ›7ʱªªª¤¤¤Äã={ö¬,[¶Ì#¾òòr©¬¬ôØ÷iñ©¶¶VV¯^íÑgçÎRVVæ5Þcǎɺuë”í·oßÊ‘#Gäõë×£Æ9Z›¯¦zñI-sÁápÈôéÓåÀÒÒÒ"{öì‘°°0Ù±c‡×˜ü}¿¿új©ìÛw^~øáªÔÕ5ËO?µÊÏ?ß›í‘Øí¿ËÀÀÿäÏ?ßû|L""""¢`¨ùÌð𰤧§Kcc£ˆÈ¨Å'ç3,>MŠ;A±æÓÚµkÑÔÔ„ììlèõz ªª z½áááhkkÃÞ½{a·Û1kÖ,¸Ýž‹GFF4 ÂÃáÕj•í‘æÏŸ°°0e{ñâÅhjjòèÓÛÛ‹`Þ¼yÊ>§Ó‰5kÖŒ:†ˆˆ8N}N§ÑÑÑ^}{{{±páBe;44»wïö)N_Æ fj™ F£ÍÍͨ®®ÆÕ«WQXXˆÍ›7C¯×{Éß÷{xøW|ÿýúq}‡ˆˆˆˆˆÆO-ùLuu5âãã7nàåË—°Ûíèèè@zzº×q˜¿¾ (>‰, , ÚÛÛQ[[‹õë×£½½V«UUU¸pá²³³òÙߟ.¢Ößߨ¨(}:&.|‹|¥IDAT“ ×®]Sö9N¯‡ýSÉÉÉxøð¡Ç¾žž¬X±Â«oTT^¼xá±ïâÅ‹0›ÍcÆéËÔL-sÁårÁh4âÒ¥KJ[vv6 ½ÎÅûMDDDDÔ’Ï>|¨¬¬Øív b``§Nò8ó™à Ž=zyyyÐjµÈÊʶmÛðôéS@__RSSa2™‚›7oâÕ«W_tž¾¾>\¾|044„ºº:äçç{ôÉÏÏÇõë×qÿþ}Àðð0233=Š Ÿ³råJ¸Ýn466øPx²ÙlÊSV«€‚‚\¹rEy€oß¾­[·"$$dÌ8}ƒš©e.<~ü‰‰‰èíí´´´ ³³“÷›ˆˆˆˆ(ˆ©%Ÿ9xð l6›òÉÌÌÄþýû•Âó™ äçÿý}1ŒcÍ'‡Ã!sçΕôôt1›Í2cÆ ©««‘'OžHLLŒäääH~~¾É‚ ¤¸¸Xù_ìGÝÝÝ©lß½{×㱉‰‰’––&&“IæÌ™#¹¹¹ât:=þ+"b±XD§Ó‰ÙlƒÁ 7n”÷ï=×ÄùtÍ'‘††™={¶Kll¬X,¥-11Q:¤lWTTHtt´˜ÍfÑétrâĉ1ã­ÍWS}Í'5Í…ŠŠ ™9s¦äääˆ^¯—sçÎ)ß ÖûMDDDDH9ŸéÓ5Ÿ˜ÏàXóÉh4¢«« ­­­p¹\Xºt)bbb èîîFkk+bbb°dÉ8ôôô .."¢'99CCCÊvFFž?®lGGG£¥¥·nÝ´iÓ°|ùrh4F¸\.¥ß®]»PRR‚{÷îÁ`0 --Í+æÓ§O{íÛ°aV­Z…ŽŽÔÔÔ ))Iiûø†ÌG555(++ãG°hÑ"$$$ŒçXm@Ms¡¦¦Û·o‡Ãá@FFbcc•6Þo""""¢à£¦|f¤ææfmæ3Á'(ŠO“ÉôÙ6Nçñj^BB‚Çd°°0äääŒÙÏ`0À`0Œûøqqqˆ‹‹ó©oJJ RRR>Û6Zœ¾ŽA­Ô4RSS‘ššêÓùx¿‰ˆˆˆˆŸšò™ñ`>Ø‚bͧɠÓ霜ìï0Æ4ZœjÃT7•®#ï7ÇTʘό|÷NE4 êëëQZZêïPh„3gÎ`Ë–-˜¬i5Ùç#O¼þDDDDD_Ž¿§ý‹×ÒØøæMŸˆˆˆˆˆˆˆˆh°øDDDDDDDDD†Å'""""""""š0,>Ñ„añ‰ˆˆˆˆˆˆˆˆ& ‹ODDDDDDDD4a´þà¯hhh@hh¨¿Ã ‚ê¼ÁŽ×ˆˆˆˆè¯ãïjÿàuŸ<ª.>Y­VX­V‡ASÀ¦M›üÑa>CN#"âï ˆˆˆˆˆˆˆˆ( Ù¸æMŸˆˆˆˆˆˆˆˆh°øDDDDDDDDDF àWADDDDDDDD©éÿÅŠPjÄS$ŠIEND®B`‚bm3.7.0/doc/html/a00208.map0000644000175000017500000000022011365042646013233 0ustar tlktlk bm3.7.0/doc/html/a00127.png0000644000175000017500000001067011365042644013252 0ustar tlktlk‰PNG  IHDRM(z¾¨™bKGDÿÿÿ ½§“mIDATxœí{P”ÕûÀ?°,.hfæ ™!?ïÊâ-›ÁÁH µA%Í Y™vQaäRZ&’ä¥45¼ Ž$Œ¡T`(¢˜˜xaPY[TøýÁð~]–Û H—ó™Ùöœóžç9Ï{Þçœóœw5555 Ev´@ðOB8M@ Ðá4@Œê'äççsâĉŽÐEð/bÊ”)­B«Ø³gOG« øгgO†ªXS;vÔâ#>­úüÓéhû‰Ïßããïï¯Ó7tfšuÔˆMuÁc°sçN^ýõŽV£MX¾|9£Gîh5DHHHƒé"¦)z œ¦@ èpš@ Âi §)z œ¦@ èA›8Ͱ°0BBB !44”¨¨(®\¹"å—””Ñàµ>$$$„;v4˜źuëZ¥_Sò[ÂÝ»wÙ´i³gÏfΜ9lß¾‡¶J§¦ˆˆˆàÚµk:é¶#77—o¿ý¶Ýt´œêêj¶oßNrrrƒùñññÄÅÅ=a­ZÏÙ³gÙ¾};ÅÅÅZéìܹSçï'Á;wøá‡ž˜¼†h§ùé§Ÿ’™™IAA×®]c×®]ØÛÛ“™™ @ii)›7o–Ê¿õÖ[’S½ÿ>}ôsæÌáîÝ»Zõæçç3þüV9¼†äëCAAŽŽŽlݺ•^½zÑ­[7–/_ާ§g»½ËºråJ­A§ŽGÛqá¾þúëv‘ÿ¤©ªz@RR6çÎÝèhU‹°eËÖ¬YCee¥V^qq1ëÖ­c×®]¤Ýã³yóf¶nÝÊ¡C‡´ÒËËË¥ûѿۋÈÈH %y?þøc»ÊkŽ6[ž¿ûî»|ýõ×ÄÄÄ––Ƙ1cذa½zõââÅ‹RÙ¤¤$JKKµ®·±±Ñ¹9{÷îÅÎήպ՗¯AAA 4ˆ´´4–.]JHH?~œøøøV릭iÇ߇«IK»Ä¢E?`o¿œ™3·pùòÍŽV«UtíÚUç'È¿üò Ï=÷\iôø“ŸŸGŽéP]222(//àÙgŸeûöíªO»Å4»uëF§N¸yó&&LÀÏÏââbüüüHMM•Êûúú«UÇîÝ»ñõõÕJÛµkvvvaccCdd¤”wðàAz÷î©©)3fÌ`É’%:tHK>@rr2ýúõÃØØ˜H3âú@xx8Rºµµ5›6mB¡Ph•ÿóÏ?©¨¨hÔ&Íå7GývTWWóÎ;ïйsg¬¬¬X½z5PÛá_yå¶mÛ†B¡àüùóÚ­~Y>ÿüsI†J¥bРAh4šÇÖûQNŸ¾ÆÇïÇÉéc|}£‰‹Ë¤¢¢²ù ÿŒ9’””­´””FŽ©•–——Ǽyó7nÓ§O—œÒíÛ· fÏž=øøøàååEbb"ÑÑÑxyyáííÍÑ£G¥zΜ9ìY³;v,o¼ñÇŽ@£Ñ°dÉ>Œ§§'!!!ìÞ½[ºN£Ñ0{ölÊÊÊmKÝ32uêT [£¼¼œØØX>øàT*yyyøûûóÅ_ V«éÓ§k×®E­VkÉ/((`òäÉ„††RZZŠ··7>>> .µ333éÞ½;={öÔÉóööÖÒ `ñâÅddd4j£æò›ãÑvÔé'—Ë)**"..ŽððpöîÝKUU©©©ÄÇÇ“˜˜ˆµµu£v«_ÖÇLJ˜˜IFll, …Bg€Ð‡K—ŠˆˆHdðà•xz~ÁwßC­®½Ï÷ï·_løIãææÆÉ“'¹wïP; áìì,•¹wïï½÷cÆŒáÇdñâŬY³†?þøƒ••EYY{öìaÆŒDDD P(Ø¿?S¦LaË–-@m|{Ù²eL™2…C‡1{ölV­ZÅõë×¹ÿ>ÙÙÙ¤¥¥Ž»»;”tHIIÁÌÌ 33³FÛ’œœÌ¸qãèÒ¥ ÎÎÎ-šm6¥“J¥âã?æ­·Þ"!!777>ùäjjj¨¨¨ <<œ¹sç’””Ä'Ÿ|BLL †àà`ºtéBpp0öööTVV’••Õ¬¼pöìY~ÿýw¶mÛÆÖ­[9vì§OŸ~¬{û(mæ4Oœ8ARR‡æüùóܽ{—œœr …CCC r¹\J·´´dĈ$$$µ§ÌLš4 ™L&•166æ·ß~ÃËË‹N:akk‹\.§´´”]»v1nÜ8&L˜€‰‰ |ðVVV:òccc9r$^^^<õÔS¼÷Þ{Ì;W'ž µNÚÜܼ-ÌÓ.( ÂÂÂ055E©T2oÞ<)(÷î]Ö¯_ÏðáÃ133kÔnõËzzzJK3€;vðÆoè­Û%lØpw÷0FŽ gýú#ܸQü»壘››ãàà@zz:?ÿü3®®®þï1KOOÇÒÒ///är9ÎÎÎŒ?žŸþ¨=óáµ×^ÃÀÀ€"“Éðõõ•¾×­TÒÒÒ°³³cüøñÈår\\\6l˜4¨VVV²`ÁúõëÇðáÃÑh4äååµñ•W^i´yyy\¿~]š!×Í ›‹á7¥SJJ ýû÷G©TÒ©S'¦NÊĉ©ªªB.—…R©D.—cccƒ‘‘åå嘙™a``€™™FFF-–µ±æ€€iuekk+MÊZC£vè˪U«P*•Ò÷;wòæ›orëÖ­×Q·D÷óóc÷îÝ„……iåwêÔ‰S§N±téRrss±´´”¦ÛW¯^¥OŸ>RYlmmudÔ/'—Ëyÿý÷ÔÇÚÚšÂÂBjjj´–ç¿ýöׯ_ÇÑÑ‘““ÃÎ;9~ü8&&&,\¸œœœ&ó[CïÞ½µiF`hhH÷îݦíV¿¬±±1'NdïÞ½˜ššrîÜ9¼½½[¤Ï_•qìX166 MédllL=¤t###^{í5éûÅ‹‰‰‰áÆtîܹE›¬ÍÙlè<ÃK›9Íú 4ˆ’’nß¾Ýâk¼¼¼X¸p!ÙÙÙäççãîîί¿þ*åÇÇdzlÙ2öíÛLj#ÉdÒ²ÑÜÜœ¿þúK«¾’’æææ:¯PÄÅÅ1zôhºt颕>lØ0ªªª8zô¨Îi7«W¯ÆÆÆggg©“Ëd2Œ111‘â¹2™¬ÉüÖP@*..ÆÒÒÐî MÙ­~Y¨¼–,Y‚L&cÒ¤I<ýôÓ­Öõ¿‚R©dýúõäååQ\\Lÿþýùý÷ߥ|SSSµÞ©¬¬ÄÀÀ Éc}LMMuÞ°¸}û¶t¯êßS¢££‘Éd¸ººJ}²>555=z”™3gâââ"¥¯]»–#GŽ4é4›ÒI.—ë<©©© 0€¬¬,6oÞÌŠ+pppÀÐÐOOÏVÛ ½h3§YVV&m”••‚ƒƒ …¢Å› …777fΜÉäÉ“µ–5P´··ÇÕÕ¨]êÔ9å1cÆ@hh(Ï<ó éééœ?^§óŒ;VÚŒ²²²âĉL›6MÇ‘tîÜ™ùóçHRR/¾ø"P¿MLL$55•>}úH3×ãÇããã£øo.¿1µ' c ¨5'$$àééÉ;wظq#AAA:åš²[CŒ;–ÂÂB¾úê+½^•éÚÕ +6lXDAš²ˆÍàòå›ÉšmΚåʤIZ,¯=‰‰ špëcff†““¸ººêô¿͵k×xá…¨¬¬döìÙLŸ>½I‡TŸAƒñÝwßQXXˆ %%%üúë¯,]º´ÁòD­VÇG}Ôh½gÏžE­Vãé驚7nÑÑÑM®ŽšÒI.—³råJ4 …‚œœBCCÙ¿?*•Š^xGGGþøãm˜êkƒ¶¢Íœæ«¯¾ú¿JŒ:th£§_[YY1oÞ<¾üòKúõë§•çççÇ´iÓøì³Ït®›8q"«V­ÂÝÝcccär9¶¶¶sàÀ&L˜@¿~ýprr¢¼¼'''ŒµêðððÀßß_*wòäI"## НZµŠÒÒR°··§ªªŠ«W¯²nÝ:†®¯™ZÌ£»äP»Ì¨¿Ë?lØ0/^Ldd$—.]ÂÙÙ™ÀÀ@nÞÔ~u§)»EEEéÈ–ËåxyyñÓO?1jÔ¨ÇÒÿ¹ç, EPÐ(.]*">>‹={NrãF r¹ì_ׄÚ>ÊܹsuòzôèÁ¬Y³ ¢oß¾äççãààÀ¨Q£\5†¾¾¾Ò·o_.]º„‡‡C† A¥Ré”722B©T’™™É€LÉÉÉ 2D'–ïææÆÚµk9qâ„Vx«¥:Œ=š€€z÷îÍ… ˜3gO=õ...lÛ¶  —Ë¥ä†  Å‚/¿ü’ùóçÓ¹sçÉS«Õ-¶¥¾ÔÔ Ô"Û–/nWWWSRR"ÅT*YYY < ½êº}û6XYYáèèÈõë×ÉËËÃÞÞž[·nqÿþ}Ôj5#FŒàå—_fÇŽ 2DK>ÀåË—¹rå /¿ü²N\¤!T*ÙÙÙÈd2œµnÞ£eÌÍÍ]ú4—ßõíµ»±ééétéҥɇ¡1»¹»»7X~ÆŒX[[ëÄ•›£¹þsúô5âãOw µº\ËFEMÿÛÌ4 Úõâ[·nqõêUºuëF¯^½»ž¢¢" xöÙgµb† Ž………Nœµ­iJ§‚‚ŠŠŠèÙ³§ÖFmEE999XXX`kkKqq1………899¡ÑhÈÍÍ套^ÂÌÌŒ;wîh=úØ@BBB°¶¶ÖùµâqšO‚¬¬,FÅÞ½{±··gß¾}DFF’››«µY"h•Jűcǘ6m§OŸntVÑ-í?V“žžË¾}§9xð •ÿ)§ù$Ñh4œ;wŽÐÐP¾ùæ›6u,ÿfsší¶ô¤qvvfëÖ­¬^½µZ‰‰‰ÂaêÉ•+W eÍš5z;L}É Q*û Tö!<܇£GsèÑòÝäý—)**âûï¿çí·ß³ ø×8M¨Ý}÷òòêh5þÑ 2„“'O>Q™ÆÆFŒÿOT找}ûþkÎ)ø; ކ=NS ô@8M@ Ðá4@„Ó=NS ô@8M@ ЃFßÓl«c”‚*uÿ,PðßÅßß_'MÇi*•J­£ñ‚ÿ"â þ×ßž  qDLS ô@8M@ Ðá4@þJ¤32”æ³IEND®B`‚bm3.7.0/doc/html/a00088_source.html0000644000175000017500000001215411365042627015020 0ustar tlktlk BitMagic: bmalgo.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/modules.html0000644000175000017500000000411111365042644014261 0ustar tlktlk BitMagic: Module Index
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00082.html0000644000175000017500000032415711365042652013441 0ustar tlktlk BitMagic: bm::serial_stream_iterator< DEC > Class Template Reference

bm::serial_stream_iterator< DEC > Class Template Reference
[bvector serialization]

Serialization stream iterator. More...

#include <bmserial.h>

Inheritance diagram for bm::serial_stream_iterator< DEC >:
Collaboration diagram for bm::serial_stream_iterator< DEC >:

Public Types

enum  iterator_state {
  e_unknown = 0, e_list_ids, e_blocks, e_zero_blocks,
  e_one_blocks, e_bit_block, e_gap_block
}
 

iterator is a state machine, this enum encodes its key value

More...
typedef deseriaizer_base< DEC >
::decoder_type 
decoder_type
typedef unsigned(serial_stream_iterator
< DEC >::* 
get_bit_func_type )(bm::word_t *, bm::word_t *)
 member function pointer for bitset-bitset get operations

Public Member Functions

 serial_stream_iterator (const unsigned char *buf)
unsigned bv_size () const
 serialized bitvector size
bool is_eof () const
 Returns true if end of bit-stream reached.
void next ()
 get next block
void skip_mono_blocks ()
 skip all zero or all-one blocks
unsigned get_bit_block (bm::word_t *dst_block, bm::word_t *tmp_block, set_operation op)
 read bit block, using logical operation
void get_gap_block (bm::gap_word_t *dst_block)
 Read gap block data (with head).
unsigned dec_size () const
 Return current decoder size.
decoder_typedecoder ()
 Get low level access to the decoder (use carefully).
iterator_state state () const
 Returns iterator internal state.
iterator_state get_state () const
unsigned get_id_count () const
 Number of ids in the inverted list (valid for e_list_ids).
bm::id_t get_id () const
 Get last id from the id list.
unsigned block_idx () const
 Get current block index.
unsigned get_bit_block_ASSIGN (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_OR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_AND (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_SUB (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_XOR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_AND (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_OR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_XOR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_SUB_AB (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_SUB_BA (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_A (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_B (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_arr_bit (bm::word_t *dst_block, bool clear_target=true)
 Get array of bits out of the decoder into bit block (Converts inverted list into bits) Returns number of words (bits) being read.
unsigned get_block_type () const
 Get current block type.
unsigned get_bit ()

Protected Attributes

get_bit_func_type bit_func_table_ [bm::set_END]
decoder_type decoder_
bool end_of_stream_
unsigned bv_size_
iterator_state state_
unsigned id_cnt_
 Id counter for id list.
bm::id_t last_id_
 Last id from the id list.
gap_word_t glevels_ [bm::gap_levels]
 GAP levels.
unsigned block_type_
 current block type
unsigned block_idx_
 current block index
unsigned mono_block_cnt_
 number of 0 or 1 blocks
gap_word_t gap_head_

Detailed Description

template<class DEC>
class bm::serial_stream_iterator< DEC >

Serialization stream iterator.

Iterates blocks and control tokens of serialized bit-stream

Definition at line 371 of file bmserial.h.


Member Typedef Documentation

template<class DEC>
typedef deseriaizer_base<DEC>::decoder_type bm::serial_stream_iterator< DEC >::decoder_type

Reimplemented from bm::deseriaizer_base< DEC >.

Definition at line 374 of file bmserial.h.

template<class DEC>
typedef unsigned(serial_stream_iterator<DEC>::* bm::serial_stream_iterator< DEC >::get_bit_func_type)(bm::word_t *, bm::word_t *)

member function pointer for bitset-bitset get operations

Definition at line 438 of file bmserial.h.


Member Enumeration Documentation

iterator is a state machine, this enum encodes its key value

Enumerator:
e_unknown 
e_list_ids 

plain int array

e_blocks 

stream of blocks

e_zero_blocks 

one or more zero bit blocks

e_one_blocks 

one or more all-1 bit blocks

e_bit_block 

one bit block

e_gap_block 

one gap block

Definition at line 408 of file bmserial.h.


Constructor & Destructor Documentation


Member Function Documentation

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::block_idx (  )  const [inline]

Get current block index.

Definition at line 431 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::block_idx_.

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::bv_size (  )  const [inline]

serialized bitvector size

Definition at line 379 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::bv_size_.

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::dec_size (  )  const [inline]

Return current decoder size.

Definition at line 400 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::decoder_.

template<class DEC>
decoder_type& bm::serial_stream_iterator< DEC >::decoder (  )  [inline]

Get low level access to the decoder (use carefully).

Definition at line 403 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::decoder_.

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_B ( bm::word_t dst_block,
bm::word_t tmp_block 
) [inline]
template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::get_block_type (  )  const [inline]

Get current block type.

Definition at line 477 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::block_type_.

template<class DEC>
bm::id_t bm::serial_stream_iterator< DEC >::get_id (  )  const [inline]

Get last id from the id list.

Definition at line 428 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::last_id_.

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::get_id_count (  )  const [inline]

Number of ids in the inverted list (valid for e_list_ids).

Definition at line 425 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::id_cnt_.

template<class DEC>
iterator_state bm::serial_stream_iterator< DEC >::get_state (  )  const [inline]

Definition at line 423 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::state_.

template<class DEC>
bool bm::serial_stream_iterator< DEC >::is_eof (  )  const [inline]

Returns true if end of bit-stream reached.

Definition at line 382 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::end_of_stream_.

Referenced by bm::serial_stream_iterator< DEC >::next().

template<class DEC >
void bm::serial_stream_iterator< DEC >::next (  )  [inline]

get next block

Definition at line 1762 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::block_idx_, bm::serial_stream_iterator< DEC >::block_type_, BM_ASSERT, bm::serial_stream_iterator< DEC >::decoder_, bm::serial_stream_iterator< DEC >::e_bit_block, bm::serial_stream_iterator< DEC >::e_blocks, bm::serial_stream_iterator< DEC >::e_gap_block, bm::serial_stream_iterator< DEC >::e_list_ids, bm::serial_stream_iterator< DEC >::e_one_blocks, bm::serial_stream_iterator< DEC >::e_unknown, bm::serial_stream_iterator< DEC >::e_zero_blocks, bm::serial_stream_iterator< DEC >::end_of_stream_, bm::serial_stream_iterator< DEC >::gap_head_, bm::serial_stream_iterator< DEC >::id_cnt_, bm::serial_stream_iterator< DEC >::is_eof(), bm::serial_stream_iterator< DEC >::last_id_, bm::serial_stream_iterator< DEC >::mono_block_cnt_, bm::set_block_16one, bm::set_block_16zero, bm::set_block_1one, bm::set_block_1zero, bm::set_block_32one, bm::set_block_32zero, bm::set_block_8one, bm::set_block_8zero, bm::set_block_aone, bm::set_block_arrbit, bm::set_block_arrgap, bm::set_block_arrgap_egamma, bm::set_block_arrgap_egamma_inv, bm::set_block_arrgap_inv, bm::set_block_azero, bm::set_block_bit, bm::set_block_bit_0runs, bm::set_block_bit_1bit, bm::set_block_bit_interval, bm::set_block_end, bm::set_block_gap, bm::set_block_gap_egamma, bm::set_block_gapbit, bm::set_total_blocks, and bm::serial_stream_iterator< DEC >::state_.

Referenced by bm::serial_stream_iterator< DEC >::serial_stream_iterator().

template<class DEC>
iterator_state bm::serial_stream_iterator< DEC >::state (  )  const [inline]

Returns iterator internal state.

Definition at line 421 of file bmserial.h.

References bm::serial_stream_iterator< DEC >::state_.


Field Documentation

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::bv_size_ [protected]
template<class DEC>
bool bm::serial_stream_iterator< DEC >::end_of_stream_ [protected]
template<class DEC>
gap_word_t bm::serial_stream_iterator< DEC >::glevels_[bm::gap_levels] [protected]

GAP levels.

Definition at line 490 of file bmserial.h.

Referenced by bm::serial_stream_iterator< DEC >::serial_stream_iterator().

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::id_cnt_ [protected]
template<class DEC>
bm::id_t bm::serial_stream_iterator< DEC >::last_id_ [protected]

Last id from the id list.

Definition at line 489 of file bmserial.h.

Referenced by bm::serial_stream_iterator< DEC >::get_id(), and bm::serial_stream_iterator< DEC >::next().

template<class DEC>
unsigned bm::serial_stream_iterator< DEC >::mono_block_cnt_ [protected]

number of 0 or 1 blocks

Definition at line 494 of file bmserial.h.

Referenced by bm::serial_stream_iterator< DEC >::next(), and bm::serial_stream_iterator< DEC >::skip_mono_blocks().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00112_source.html0000644000175000017500000004521111365042630014776 0ustar tlktlk BitMagic: sample7.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x70.html0000644000175000017500000000700211365042652017712 0ustar tlktlk BitMagic: Data Fields
 

- p -

  • parallel_popcnt_32() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00171.png0000644000175000017500000000460011365042644013245 0ustar tlktlk‰PNG  IHDR (y,ñ˜bKGDÿÿÿ ½§“ 5IDATxœíœYLS]†ß Dªe£!p@…bD¿‚UÑÄ!Ö`4^(`%ÑDƒˆ&^hP° -`@¸㈚ˆ µX8¡„¡ (ˆJÙß…?'Ö¶X­ùþý$½X묽ÖÚíÛÓsö>)‹B@¡˜‰ æn€òÿ  ŬPR̊厖–<~üؽPþãðx<Ìš5KÝI~@,ôE_&‰ÅâåF4΀cЛcŠ)a±XZýôbV¨)f… bV¨)f… bV¨)fEç2Œ¡¼{÷ÕÕÕˆ5A;ã«ÓÛÛ ‘H„½{÷Ž+÷—/_ ‹ñäɰX,,Y²111°°°`b†††P\\ ‰D•JooolÙ²öööLÌÉ“'!àéé©–ÿìÙ³ ‚233 §sñâE,\¸/_¾„\.×Ú§‡‡„B¡Qs«¨¨€R©ÄÆßÝ»wQ__¤¤$Æ÷úõkTTT --MmÞ¿›_>¾yó¹¹¹¦èeÜuúúúPPPÀØñññ:?Äikkƒ··7Ο?777p¹\ìß¿ÑÑÑÌZhKK |||pâÄ 8::bæÌ™(..ÆÜ¹sñìÙ3&×±cÇðêÕ+'Ož„T*…J¥BFF„B!Ôb •Jñáôµµ¡­­ b±b±˜±?~ühМ¾çíÛ·Ø·oŸš/33ÉÉÉP(Œ¯¤¤ÅÅÅT| s'ÄP®^½Jx<žÁñãŘ:3fÌ 2™Ì ØÕ«W“M›6‘ÑÑQÆ×ÙÙI8)//'„²xñb²aÃ222¢6655•¸¹¹‘¯_¿2u+**4jxyy‘HD”J%@<==Irr²ZLXX‰Dj¾¸¸8gП$&&þR-}@ÇNˆI®GGG‘””{{{899!++ ðñãGðù|œ8q®®®pttĹsçšš GGGLŸ>%%%LžãÇcëÖ­:m]uÞ¿Õ«W„B!ººº  ñàÁ½}·µµ¡²²ÙÙÙj+õÎÎÎÈÏχÃÁ£GðôéSœ9sFãìpäÈ £¼¼Ü¨÷ëÔ©S‰DH$FÓÇÐÐV@@ððáCÀýû÷1oÞ<ÄÄÄàæÍ›¾½¯‰ç5& T*›ÍFgg'ÊËË‘²²2(•JÜ»wŸ>}B{{;:„¸¸88::¢«« )))ÈÈÈ`òÌ™3:m]u¾|ù‚{÷îòòòÀår‘——‡àààŸöíêꪹA`ýúõˆˆˆ€D"ŸŸ¸\®F ›ÍFxx¸Ñoxzz"==ñññP*•Fý‘¦¦&¤¦¦ÂÇÇGëq „††2¼uë"##!pçΨT*Ô××£¿¿aaaã¯]»†E‹áÂ… ¿EŒ& ‡ÃÁÑ£Gakk‹ìܹEEE¾}»ÒÒÒÀb±Àçóaii‰Ý»w3v?“gÍš5HLLÔië«ó}Ì„ ÀápÀf³õöÝßß;;»ŸÆ888èûçÏŸõæÐÆØ Ó±cÇŒKÁ7U«VÁÕÕ555:ã—-[¦&À¨¨(À‰555ðññÁÔ©S5Æ®[·999¨ªª‚»»;ÒÓÓÑÚÚjtϺ0‰gÏž­öa/X°Œ=iÒ$ß6¤­­­aiiÉØ¦¬c,ÎÎÎèèèÐúàEMM ._¾ŒéÓ§£¥¥EgŽÖÖV¸¸¸]›ÍfC$áÈ‘#hhh0x\uu5¼¼¼ŸŸ]»váÕ«WHIIÑ*ž1""" “ÉÐÐЀææf„„„€Åb!** 7oÞDmm­ÖŸß1x< !“É`gg‡ððp¬[·Î¨ùêÂ$üðლÝÕÕ¥÷ ù[êcxxwïÞÕ8–••…ªª*ðù|444 ®®N#F¡PàöíÛX¹r%ÀÆÆƒƒƒq˜8q¢†ŸÇã!>> ?}Äf³ammîînôôô`ddä§c¼½½Ááppøða,]ºÖÖÖ@€7n ¦¦F¯ÇP©T „ÀÒÒ“'O6¨ßŸa677£²²À·Ÿ¬¼¼<æC1†ºº:æÂX›mª:cØÛÛ#11 hlldü•••¸~ý:¶mÛ†Y³faÇŽ …xùò%ÓÚÚŠµk×B  $$À·ŸºÜÜ\µËŠK—.A¡P 44Tk™™™Ë娭­5¨g™L†ÌÌL\¹rîîî8xð ÚÛÛuŽa±XGqq1¢¢¢ÿòåËQWW¹\®³?àÛ‹P(ÄâÅ‹AAuu5 ê÷§üx[<že˜àà`âááABCC‰‹‹ Y±b&j¹ɤI“[&“gggÆNNNV[jùÞÖWG.—«åõóó#K–,!R©ô§ý ‘íÛ·+++âëëKæÏŸOlmmINN322BöìÙC¬­­‰——ñõõ%VVV$66– 2q===äŸþ!“'O&AAAÄÝÝL:•”••B³ #—ËÕz¸ví0®e…BA8@¼¼¼ôÆ>}š ÏŸ?Wó€€ãJKKIhh()--%J¥Ro }@Ç2 ëŠŠŠ°yóf£Hýúõ+jkkáààÓ|; ¬3::ŠÞÞ^L›6 ÐÝÝ ™L†ÀÀ@L™2Å ¼ÝÝÝxñâ,,,àçç§¶Ã1F__ž={•J… ÀÉÉIk®ÆÆF455ÁÎÎþþþ°±±çl G¥Rý–EdSåe±X‹Åˆ‰‰Q÷›J€#¨ªªÒy|áÂ…:—/(¦E—y/øo†Ífk]¿ÃÖÖövCÑÆZ€\.ÀÜmPô@Ç¢˜*@ŠY¡¤˜*@ŠY¡¤˜*@ŠY¡¤˜ë€Æ>*E¡Œ­8ú÷l”ß…¶¿gÓ …ò'¡×€³BH1+T€³ò/Šëѯ§_)IEND®B`‚bm3.7.0/doc/html/a00258.png0000644000175000017500000001340411365042652013254 0ustar tlktlk‰PNG  IHDRèuDQ­åbKGDÿÿÿ ½§“¹IDATxœíÜ{PT×ðï²KV‘ò| 1¢ ‰bÁG1*¥R#4‘hKɨ1õÑPMm«–hm5©†`´è6ˆ¨Á¢L(*j1¢<YoeAö×?(7,Ë®,¬p1¿ÏÌæîž{Îwü¸{î>$DD`Œ‰’IO`ŒéÆʘˆq2&b2cuc¬®{!øøøÀÁÁ¡K}HŒu‘H"‘£Æ^ÑÑÑX´hQ—ú0Ú0N Æ^Æ:añ”1ãeLĸ@1.PÆDŒ ”1ãeLÄŒú2KGݽ{)))øÕ¯~ÕícŸ|8BBBOžþøc 2 À矎ßýîw0`ììì P(„~vî܉%K–èÜW(pttDß¾}1wî\TUU ÷eggcòäÉèÓ§F¥ñßyãÆ0`är9¦M›†ÂÂÂgWZZŠ™3gâСC°²²Brr2~ñ‹_Ç=zNNNÉd°³³ÃÎ;=Ú}ýõ×xõÕW5¶ÐÐPƒÇþöÛo;5ÿúrvv^tQ©Tzïoë­·Þ‚»»;þõ¯=³maa!âãã±}ûvwõ 4Ÿ}ö¬¬¬ºœ§[‘ èèèµýꫯH"‘Ð|@uuutñâE²´´¤˜˜*..&úè£H­VÓ¾}ûýùÏ&µZM;vì '''¡¯“'OÒž={ÚÝ¿qãÉårŠ¥'OžÐ®]»íÚµ‹jkkÉÎÎŽþþ÷¿S}}=%%%‘……]ºt‰Îœ9CC† ¡ÜÜ\ª®®¦9sæÐòåˉˆôWPP@}ûö¥   º|ù2åääP¿~ýˆˆ¨ººšär9ÅÅÅQ}}=]¸pLLL¨´´”òòò„vµµµ”››K¹¹¹”••EǧmÛ¶<¶J¥êÔüëËÙÙyië»ï¾£ððprvvÖ™ÑÙÙ™>¬uûŠ+(44”ˆˆÜÜÜ(,,Œ¢¢¢4¶´´4Š‹‹#{{{ý·'66–¼¼¼èàÁƒT__oбmRzûér-X ÖÖÖÔÐРܶaà ¢ââb@µµµDDtçÎ’ÉdÔØØHDD4hР³nÝ:zûí·5nóðð ]»v‘B¡ qãÆiÜ·jÕ*Z³f 8q‚† Bÿýù¯¢¢‚ˆHïq€ŠŠŠˆˆ4 ¯¾¾žÒÓÓ…c H.—Snn®F»Ö.\¨‘ß±õÑ7ÿúrvv^ˆˆÔj5%$$ÐìÙ³ÉÅÅ…"""¨¼¼\gF].̉››;–Þxã -**Š:D...Ïœ‹¶®\¹B‹/¦¡C‡Òúõë)??ßà>ˆŒW =¶1bLMM…}www$%% ûýúõÐ|O.—C&“ ûUTT777Û\]]÷ïßÇíÛ·áèè(Ü÷äÉüüç?G`` Î;‡I“&ÁÊÊ 3fÌÀ† `ee¥÷8011Á!C´²Èår¤§§cýúõ¸{÷.ú÷ïµZ­3û–-[pïÞ=|óÍ7Âm»=ºæ__ÎÎÎKJJ –.] WWW¬Y³~~~~3yQQììì„ýU«Vµ»MLLDqq1ˆHk¬Ë—/£   .Ô:ÎÇÇ>>>(++Ã0uêTxzzâøñãÊÛU=V -WÚZ”––¢ÿþFÃÚÚZë2|˸ðõõÅ™3g„ûž|øÌãô),,„««+|}}!•J‘ššŠêêj­v™™™X¾|9âââ´Î†»=ºæ__ÎÎ΋233±uëVÄÆÆÂÉÉ ›6mBQQ‘ÞŒ?Fee%***pýúuÌ™3®®®˜={¶V›Ö[UU,,,°råJ,]º¹¹¹Bûøøx$$$h\xkíüùóX¸p!&Nœ"BJJ :dðüM—Ÿ$ÿ \ƒN˜0FŽIS¦L¡ÁƒS@@544kй¹¹ë³ÌÌL5èêÕ«ÉÇǧÝ}µZM!!!deeES§N%  ]»vQDDYXXŸŸÙÛÛSpp0555QAA988‡‡ùùù‘¥¥%íß¿_CßqR©Th×zm™ŸŸO¤)S¦¿¿?Ј#hΜ9í–/_NR©”úõë'l­/vttìÎο¾œ—¶>|HøÃÈÍÍMgFggg l666&¬y‰š× ­Û´lr¹œˆˆT*-[¶Œ^zé%zõÕWÉÕÕ•ÌÌÌhïÞ½íŽCS¦L¡˜˜ášGgRúõ ýÀv}}=RSSaii‰qãÆ#F»²³³ñèÑ#x{{ÃÂÂBã¾¢¢"ܼyöööëU•J…k×®¡¾¾žžž8p`‡ŽkM­V£¢¢666šŸ¢]»v Ę1cPPP€{÷îÁ××W£Ý³tdìŽÐ5ÿºr¾öÚkF™—MMMÝòŽ¥R‰ììlH¥RŒ;VëoàyäéL=´ÛOO({>Š‹‹5.¸µåááOOÏnLôãc¬zàw½€LMMakk«ó~33³nLú‚ ôdkk‹Y³fõt füq3ÆDŒ ”1ãeLĸ@1.PÆDŒ ôÒØÔˆÆ¦ÆžŽÁŒˆ ô’x3‰7{:3"£¾"|YëoüÿçÉMÁŒÈhúå—_«+Ö ª&'->zr©¼‡1Ÿ.÷a´ 6VW¬Ž^; üÿí·ÒW¤öæßÇ‹€× /ˆè+Ñ™È 3‘!úJtOÇaFb´O³°žó}Ý÷>O›ždREÁܹs1þ|œ;wNèG¡P`Û¶m:÷###1wî\̘1¿ýío¡T*…ûîÝ»‡ßüæ7xýõ×5þcVVVbíÚµHLLD`` 233ñᇠÇ%%%!$$~~~˜?> …Á_W®Í›7£²²›7oFVV–V–èÌ­/›¡óªKEE…0m³2§<Йµ½~oܸ°°0̘1K–,Á¥K—töÛžÆÆFƒ~?Ó§OÇðáÑœœü̶J¥©©©X¶l™Pœ`mmµk×ÂÜܼËy ÕåÍÉÉT*ÅñãDZeË=z.\ÀÓ§O‘™™‰ÚÚZÄÄÄ 44;v쀕•âââŒÏ?ÿ\èÇÁÁÎÎÎíî§¥¥!!!{÷îÅÉ“'aff†þóŸ€úúz¬[·þþþ8}ú4>øà|üñǸyó&‘””lß¾ @ff&€æuæöíÛñÞ{ïáÌ™3Ø´iöïßÊÊÊ?v}¹ÂÃÃaii‰ððp¸ººjeéß¿¿ÎÜú²:¯º¨T*a.Úf5dN­­­ufmÛoEE6lØ€àà`üûßÿƲeËðÇ?þZýÚÛÛkä-..Æ'Ÿ|‚°°°ÿ~Z8;;#//OØÏÎÎÆ™3g4¶œœäääÀÆÆFcÍÚbÊ”);v¬ÖíW®\Á²eËpöìÙçR¬]~ŠknnŽ¥K—B&“ÁÃÃAAAHJJ‚‡‡ˆo¿ý6$ ¼¼¼ •J±`ÁaÿË/¿ú™4i’F¿­÷4ÿ·233ÃG}„§OŸRSSÑ¿Ì;0vìXÌš5 çÏŸÇ‚  R©°zõjØØØ ¤¤DèÓÔÔ{÷îÅÈ‘#4_$Éd¨««ÃK/½Ô¡Ç®/—¹¹9$ ÌÍÍ!“5Osë,ÉÉÉ:s5Jg¶¾}û4¯Ñ6ëÅ‹;<§:³ÚÛÛkô›’’'''áéåäÉ“1aÂ$''# @£_ ùÙYZZâââððáCbïÞ½=6Ë娭­össs…5gk&&&0333¨o___ØÚÚâĉˆŒŒÄ믿Ž9sæ´[äÑå2dˆðÇGFF†°ß§OÍWÕLMM!•J…ýŽš8q"222ðþûïÃÜÜãÇÇ;ï¼sss””” ??_ãj¤J¥Â„ „qZ~á­™šš"''û÷ïGQQ,,, ¾ /W{ZgÑ—»#ÙŒ1¯º2§†Ì£R©ÄË/¿¬qÛË/¿ŒÒÒR­~³³³aÆáÍ7ßĸqã:ýØÊÊÊ4þæÍ›×îôúõë(//iuóæM”––bÚ´iZÇ=£GFUUâãã±fÍ899aË–-ÊÛZ— ´í¢ÊÊJüä'?éj·ˆ+V¬ÀŠ+››‹ØØXá©”™™ÆŒƒ;víU*$ ªªªtþRSRR‰Í›7ÃÝÝ&&& 4Z®ö´Î¢/·1²u…!sjHV333§š@óšº_¿~4çG&“ÁÔÔ•••¨©©ASS“Ɖ £?~Œ´´4üþ÷¿f[WWWa 1nÜ8û¢££accÓn¶P«Õ©Tо}ûœµ=]^ƒ–”” 55@ódœ:uJøOkˆ;wî --­Ýý£GbÍš5J¥pqqÁÌ™3QVVðòòBVV–pQA¥RaÙ²e¸xñ¢Þñ”J%† †1cÆÀÄÄDXûB_®gÑ—ÛÙºÂ95$ëøñãqýúuáe—ŠŠ |óÍ7ðòòÒj;zôh8pï¾û..\¸€DEE=s~U*jkkQSSƒœœ|øá‡6l&Nœ¨Õ¦õVWW333á/ù …ö©©©¸zõªÎ+¿7nÜÀæÍ›ñþûï Mׯ_¯7gGuù êêêŠ}ûöA¡P °°#GŽD`` ª«« ê'11ß~û-~úÓŸjíÏœ9_}õÂÂÂ`ee…œœ,_¾0tèP„……aÅŠpqqA~~>ÜÝÝ1}út½¿ÌÉ“'ãСCX½z5LMM!“É`gg‡}ûöaÍš5ʬ/Ð|õï¯ý+V®\ kkkcõåV*•:³…‡‡4¯Õ:ë¨Q£:<§úæqëÖ­Zý.X°K—.…‹‹ îܹƒiÓ¦ÁÛÛ[ãª|kððð@yy9N:…µk×"**Jç㈈ˆ@DDÀÂÂ?ûÙÏðÞ{ïiœwïÞÝ»wkgjjŠÄÄD„……¡®®¡¡¡pttDcc#JJJ°jÕ*¸¹¹iwáÂ?~óæÍÃÆ…¥†±H¨Í‚áÈ‘# éÐeé ¸yó&ÌÍÍ…‹ÆÖØØˆ[·n¡¡¡NNN°²²Ò¸¿¬¬ ÷ï߇­­-Û탈PSS Ígü[·nÁÚÚ¯¼ò JKKQ\\ OOO£äª¬¬ÄÝ»wáìì¬ói¿®ÜÆÈ¦OÛ¹h/kGæôYYÛë·¤¤……… bm3.7.0/doc/html/a00042.html0000644000175000017500000004012011365042651013415 0ustar tlktlk BitMagic: bm::bv_statistics Struct Reference

bm::bv_statistics Struct Reference
[The Main bvector<> Group]

Structure with statistical information about bitset's memory allocation details. More...

#include <bmfunc.h>

Inheritance diagram for bm::bv_statistics:

Public Member Functions

void add_bit_block ()
 cound bit block
void add_gap_block (unsigned capacity, unsigned length)
 count gap block

Data Fields

unsigned bit_blocks
 Number of bit blocks.
unsigned gap_blocks
 Number of GAP blocks.
unsigned max_serialize_mem
 Estimated maximum of memory required for serialization.
unsigned memory_used
 Memory used by bitvector including temp and service blocks.
gap_word_t gap_length [bm::set_total_blocks]
 Array of all GAP block lengths in the bvector.
gap_word_t gap_levels [bm::gap_levels]
 GAP lengths used by bvector.

Detailed Description

Structure with statistical information about bitset's memory allocation details.

Definition at line 48 of file bmfunc.h.


Member Function Documentation

void bm::bv_statistics::add_bit_block (  )  [inline]

cound bit block

Definition at line 66 of file bmfunc.h.

References bit_blocks, max_serialize_mem, memory_used, and bm::set_block_size.

void bm::bv_statistics::add_gap_block ( unsigned  capacity,
unsigned  length 
) [inline]

count gap block

Definition at line 75 of file bmfunc.h.

References gap_blocks, max_serialize_mem, and memory_used.


Field Documentation

Array of all GAP block lengths in the bvector.

Definition at line 59 of file bmfunc.h.

Referenced by bm::bvector< Alloc >::calc_stat().

Estimated maximum of memory required for serialization.

Examples:
sample3.cpp, and sample4.cpp.

Definition at line 55 of file bmfunc.h.

Referenced by add_bit_block(), add_gap_block(), bm::bvector< Alloc >::calc_stat(), bm::bvector< Alloc >::optimize(), print_statistics(), and serialize_bvector().

Memory used by bitvector including temp and service blocks.

Examples:
sample3.cpp, and sample4.cpp.

Definition at line 57 of file bmfunc.h.

Referenced by add_bit_block(), add_gap_block(), bm::bvector< Alloc >::calc_stat(), bm::bvector< Alloc >::optimize(), print_statistics(), and serialize_bvector().


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00089.html0000644000175000017500000004666311365042632013451 0ustar tlktlk BitMagic: bmalgo_impl.h File Reference

bmalgo_impl.h File Reference

#include "bmdef.h"
#include "bmutil.h"
Include dependency graph for bmalgo_impl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  bm::distance_metric_descriptor
 Distance metric descriptor, holds metric code and result. More...

Namespaces

namespace  bm

Enumerations

enum  bm::distance_metric {
  bm::COUNT_AND = set_COUNT_AND, bm::COUNT_XOR = set_COUNT_XOR, bm::COUNT_OR = set_COUNT_OR, bm::COUNT_SUB_AB = set_COUNT_SUB_AB,
  bm::COUNT_SUB_BA = set_COUNT_SUB_BA, bm::COUNT_A = set_COUNT_A, bm::COUNT_B = set_COUNT_B
}
 

Distance metrics codes defined for vectors A and B.

More...

Functions

distance_metric bm::operation2metric (set_operation op)
 Convert set operation into compatible distance metric.
void bm::combine_count_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Internal function computes different distance metrics.
unsigned bm::combine_count_and_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk)
 Internal function computes AND distance.
void bm::combine_any_operation_with_block (const bm::word_t *blk, unsigned gap, const bm::word_t *arg_blk, int arg_gap, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Internal function computes different existense of distance metric.
unsigned bm::combine_count_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk, distance_metric metric)
unsigned bm::combine_any_operation_with_block (const bm::word_t *blk, unsigned gap, const bm::word_t *arg_blk, int arg_gap, distance_metric metric)
void bm::distance_stage (const distance_metric_descriptor *dmit, const distance_metric_descriptor *dmit_end, bool *is_all_and)
 Staging function for distance operation.
template<class BV >
void bm::distance_operation (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance computing template function.
template<class BV >
unsigned bm::distance_and_operation (const BV &bv1, const BV &bv2)
 Distance AND computing template function.
template<class BV >
void bm::distance_operation_any (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance screening template function.
template<class BV >
bm::id_t bm::count_and (const BV &bv1, const BV &bv2)
 Computes bitcount of AND operation of two bitsets.
template<class BV >
bm::id_t bm::any_and (const BV &bv1, const BV &bv2)
 Computes if there is any bit in AND operation of two bitsets.
template<class BV >
bm::id_t bm::count_xor (const BV &bv1, const BV &bv2)
 Computes bitcount of XOR operation of two bitsets.
template<class BV >
bm::id_t bm::any_xor (const BV &bv1, const BV &bv2)
 Computes if there is any bit in XOR operation of two bitsets.
template<class BV >
bm::id_t bm::count_sub (const BV &bv1, const BV &bv2)
 Computes bitcount of SUB operation of two bitsets.
template<class BV >
bm::id_t bm::any_sub (const BV &bv1, const BV &bv2)
 Computes if there is any bit in SUB operation of two bitsets.
template<class BV >
bm::id_t bm::count_or (const BV &bv1, const BV &bv2)
 Computes bitcount of OR operation of two bitsets.
template<class BV >
bm::id_t bm::any_or (const BV &bv1, const BV &bv2)
 Computes if there is any bit in OR operation of two bitsets.
template<class It >
It bm::block_range_scan (It first, It last, unsigned nblock, unsigned *max_id)
 Internal algorithms scans the input for the block range limit.
template<class BV , class It >
void bm::combine_or (BV &bv, It first, It last)
 OR Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_xor (BV &bv, It first, It last)
 XOR Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_sub (BV &bv, It first, It last)
 SUB Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_and_sorted (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_and (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV >
bm::id_t bm::count_intervals (const BV &bv)
 Compute number of bit intervals (GAPs) in the bitvector.
template<class BV , class It >
void bm::export_array (BV &bv, It first, It last)
 Export bitset from an array of binary data representing the bit vector.

Generated on Sun Apr 25 09:37:30 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00148.md50000644000175000017500000000004011365042635013144 0ustar tlktlk08f283e54421bb15c90c5d45833b1d61bm3.7.0/doc/html/a00203.png0000644000175000017500000000421711365042646013247 0ustar tlktlk‰PNG  IHDR¥(Ÿ:ÜbKGDÿÿÿ ½§“DIDATxœíœkHT_Æ/£©9Zi¥æ?¡‹–†eÉ$’£T†…P šQ’_4º•‘Xö¡$,©DÒ™´ dÉš¬K¤›i©9©9¦•—)çy?„çmtÆ2§šÿûîp¯³öZ{oŸ3gí9‡±"I„õ߀@Ð!JÅ!D)°8lûPVVö7Æ"ø?äŸþB¡04²¹¹¹ qü‘#66¶¿9à“²±)ünâââŒÚEM)°8„(‡¥Àâ¢XB”‹CˆR`q [”/_¾Dvv¶†by,‰ŽŽ¤¥¥™ÍïG¨Õj¤¤¤@£Ñ ;Öp¶(«ªª™™iޱXDžïY¿~=êêêþhÎïùðáN:e6¿±sçNìÙ³Ç,±†ƒ¸}BQQ>|øð×òûøøàÅ‹f󌆆”––bëÖ­8wîܰb ³ˆR¯×#)) r¹cÇŽÅÁƒmmmÇ‘#Gàéé wwwœ>}[·n…»»;<<ÑÃÃìîîfqq1år9KKK©ÑhèììÌ‚‚vvv2%%…'N¤^¯gGG=<ŠXìëxê«mµ–j­hkÅ:ѧ•ºÚZk_,Jµ´*h㨵.­ {ˆÈ#¹ß?xLK‚$99Éïs]^—ÉIîû—ûðMNNÎ}Ž€1Æ@á›ëB®+ „¼ /!¥¶I4 …W´k×?üð×ežÑº#¬šãñãÇØ¶m’’’жm[Ì™3žžž(**ÂÚµk1nÜ8ìÛ·Ïž=ÃÈ‘#±|ùr…BÄÇÇcÇŽÈÈÈ@§N°téRtëÖ pëÖ-ìØ±©©©°±±Á‚ àîîˆÅÞ½{QPP€@.— °eË|þùç/íûÒ¥K ųgÏàáá333ôëׯÁãOž<‰ °°X¾|9z˜¨”Î~òJ¥R,_¾^^^8yò$–,Y‚mÛ¶áÞ½{¨®®ÆíÛ·ñÇàÀøî»ïpñâEܸqyyyX³f æÍ›‡'N`øðáøä“OÀCAAV­Z___œ:u ,Àºuë––†?ÿü7nÄÂ… ¾}ûâòåË€ŠŠ ܼyí;++ ÁÁÁX´hŽ?ŽöíÛ#""EEEõ¾F¹\ŽÄÄD„……aß¾}H$¸uë–ÚÆ˜¨–Ά÷òå˰´´„ôôôЯ_?Œ;çÎP¢9sæ@,ÃÆÆ;wFii)âââзo_ :˜1c&OžŒÊÊJ\¸p]ºtÁرc¡§§www <qqq8sæ †ŽaÆA__Ó¦MCçÎë­­¡¾Ïž=‹þýûcÈ!Ð×ׇ¿¿?,,,}o¿ý6Äb1lmmáàà€ÒÒRe%áˆÎn6ggg#553fÌPÜWQQÁƒ+n·nÝZñÿ›šÙÙÙhß¾½â~±XŒ7ß|——‡:Ôê§C‡ÈÍÍEEEj-³··o°¾†úþ{û666 ¶! ann^§¢t6¼FFFèÓ§6oÞ¬¸¯¢¢%%%>¯   Ö}‰®®®022Brrr­eEEE066†¾¾~ç6»æn"7« ¢=tv³ÙÍÍ ·o߯“'OÔwÁ‚H$/}Þ¥K—ðüùs@BBÖ¯_¡PˆþýûãúõëÈÊÊP³#ê·ß~ƒ››\]]‹üü|5;Ënß¾Ýìš/\¸ èûÞ½{xòä‰âõÂ… uÞ<ˆöÒÙOÞöíÛãí·ßÆ{gîÝ»#55½zõ¨Q£ê|Bþ]¿~ýàéé‰9sæÀÑщ‰‰xçwЪU+téÒÓ§OÇüùóѽ{w$%%ÁÃÃc çÏŸÇœ9sÐ¥KdffÂÍÍ­Y54¯¿þ:æÎ GGGH¥R8::B,®Y¡¡¡xã7ЩS§ á­;“FNNN³&ã?}ú)))hÓ¦Mï¤IOOGvv6:vìkkëZ˲³³‘žžŽvíÚÕú~ Ô|â G0220ÆP\\ SSÓFû|þü9 !“ÉPTT„^½zaÖ¬Y BÏž=›\{S£mÛ¶t¤–fÒ¾3i4W›6mЦM›f?¯}ûöu‚ùB»víЮ]»z—Õ·‡Y ¼4¸@ͱ%K–`íÚµ°··Gtt4d2œœœšW<Ñ :^>éÚµ+†ââbØÙÙaóæÍŠÍf¢[h­óÌСC1tèP®Ë @g÷6Âw^BxŠÂKOQx á) /!‚\Þò9³úú6 •þ©„Ê^¿¿?§ý“†iÕ±Í\^â31ñ9víºwßí‰îÝÍ_þ„—8z4W¯æaÅ ˜›(¡ÂWC—øÔX×µ*¼\©ª’ÁÓs3ºti‹}ûþ­”6¥Ò*x{o…~üqM¤'ÿt¾ó*Á·ßJ–ö Ÿ~:YimêáË/gâÒ¥‡Ø¿ÿ¢ÒÚ%ÚƒÂÛBÙمؾý,Z䉎[¿ü ÍЯ_G¼ÿ¾Ö¯FrržRÛ&üG›Í-´pሂóçWÀÀ@ùûÿªªd˜0á?Ð×!*j1D"z¿%h³¹e®\yŒ¨¨›øôÓÉ* .èé‰ðå—3q÷n¾ú*V%}~¢ð¾"™LŽ  £>Ü cÇöVi_ݺµC`à ‰Áýû™*í‹ð…÷íßæ`ýú©jéoþüpssÀâÅa¨ª’©¥O¢Ù(¼¯ ;»›6»ïz sg+µô) °mÛ <~œ‡={Ω¥O¢Ù(¼¯`õêH´ic‚€€Ñjí×Á¡ –,ƒ¤¤‹F^]îDWQx›(!! _}+V¼kk®ËÁ²eã`jjˆÕ«r] á…· c Œ@ïÞí1kÖ®ËécÓ&_?~ §OßãºÂ o„…ýŽ[·ž`Ó&_…š3»gäÈî˜:µ?V¬ø %%\—CÔŒÂû¹¹ÅX¿þæÍgg;®Ë©cíZTTTaóæS\—BÔŒÂû«V™Y+,]:–ëRêeiiŒÕ«'aÿþ ¸w/ƒërˆQxqêÔmœ:u›6ùÂØ˜»³Y¼ÌôéàâÒAAGé·_Bám@aa>þø'LŸ>€³ßt›J  8x*®]KFTÔM®Ë!jBámÀ§Ÿƒ@ PêÙ1TÉÅ¥fÌ„u뎣´”v^é o=Ο€Ã‡¯aýú©033⺜&[¹ò ”•Uâ‹/Ns] Q ï?”–V 00o¼ÑãÇ÷ẜfiÝú5,[6{÷ž§Óæè ï?lÚt EEåVÏ<]e›={(:w¶Â'ŸDq] Q1 ïßÄǧ`ß> >ùd²Fù*Äb!Ö­ûΜ¹3gîs]Q!:ÝUVVÃÛ{+lmÍñãïp]N‹½ûîܾޏ¸åÐ×׺ c:Ý_þóŸÓÈÌ|ŽÍ›§s]ŠR|òÉdäæáë¯Ïs] Q /€û÷3ñÕWg±råèÐÁ’ër”¢];3¼û®vì8ƒ‚‚–_;‰h¯L&Ç’%ápqéˆ9s†r]ŽRÍŸ?úúb|ùå®K!* óáݳç³°mÛ š1¤ ¯½f€€€ÑØ¿ÿ23Ÿs]Q2orr¶nÁ‡ŽF—.Ö\—£ÿó?Cж­¶lù™ëRˆ’élxcøè£Cpt´Æ{ï⺕ÑÓaÙ²±øé§ëHJÊæº¢DZÞüü’zgÚüðÃe\»–Œ?èé‰8¨L}¦LqC·ní°iÍùÕ&ZÞmÛ~E¯^Aˆ¢¸/+ë9֯ƂèÓ§‡Õ©‡P(ÀŠo &æ.âãSj-‹‚o¾ù›ÂH‹hýA›ðàA6&LpÁÊ•o`ÍšHüùgbc—srîe®L™²B¡GŽ,c ;wÆbýú€ÌÌíWGšéºÖÿåfg¨ùŽs§N݆•Õkغu†N‚‚&bâÄ/püøM:tçÏ?P,KHÈD¶VGšK«7›Ÿ>-Aaa¹âvU• 2™OŸ–àÝw`÷îs:uÑ.77 èˆÅ‹âÂ…‡Ëk6ºÄbNºÃqu¤¹´:¼‰‰YõÞ_]-Gq±ÁÁÑpuý'Oþ¡õ§aŒá«¯Î">>2™¼Ö›–L&Ctô-«#¯B«ÃûàAV£{’år9òóKørsµ÷Ê¥x뭽ذá$d29d2y­åŒIIÙHMÍç¨Bò*´<¼Ù~¢ŠDB¸¸t„D²mÛšª±2õ¹?ÎÎAˆ‹KTl&×G$âçŸiÓ™O´:¼·o§£ºZ^ï2¡PˆQ£º#2r,,ŒÕ\™ú8:Zãßÿ &  ‘ËNœ Mg>Ñêð>z”Sïý3g¾}oÃÐPOÍU©—ÁÁÿBttÚ··€X\ÿ*gŒáÆTºphmx32 PVVù{X¶l,6mšÞè'‘¶qs³G\\ þ÷G@ @$ª; C à×_ïrPyZû×›P{O³PXó»mÛ µ_Ñ^SêaõêI8vì}ØÚÖ÷)ÌpâÄœÔFšOkÛ””­ØÓ, ¡¯/Æ?ü/üür\÷ú÷ï„óçW`îÜaÿý®ù3Ë.^|„¢")Ç’¦ÐÚð&&fA&“C,ÁÌÌQQïcäÈî\—¥1 õ°v­Ž]3ˆD5otr¹qq WGšBkÃ{òäËlmÍpò䘀ð* êŒóçW`Ö¬!Ëöï¿ÀuY¤ êÜ›““ƒ„~¿óÊå ååU€U«!9ù’“Õ[ÃÈ‘#UÒîÁƒ1sæL•´­¯ß­[OÕ+!ŠÁÕö#äêÓà‘ùÎÎÎê¬C©RRò1bDWlÞì£öŸ‚rrrðôéS•÷søða•´[Y)Çñã)èÑc'œ-TÒ‡2Í ˜ ‹‹‹c•••,99™3ÆKKKcõÖ¦Œ±nîxh™kJ /VRRÂc,))‰‰ÅbVUUÅcìÆ¬mÛ¶Œ1ÆÂÃÙ««k­ç/^¼˜4«Ý»w³áÇ×jgÚ´ilíÚµ,--`Œ1Æ***˜¹¹9»}û6cŒ±Áƒ³ï¿ÿ¾Ñ×’››«¸oÈ!,22²Éã¡iáµ°°`•••ŠûV­ZŦL™Ò¬ñn,¼Œ1fggÇnÞ¼ÉcÍoKÆš1ݯÒ46®9$Q ÀÀÀb±Xqû…””$&&ÂÁÁAq_yy9Æ߬vÒÓÓáääT«ÿnݺ!-- @ÍÉålmkÎþ¯¯¯É“'ã§Ÿ~‚‘‘îÞ½‹©S§6ø:D"Q­ãºÿÞ/9::BOï¯É½zõÂÙ³g·›2Þª¢mc­nj=¶ÙÔÔÆ CLLŒâ¾òòr‚F¿ƒÖ×ÎÝ»µÏµ”ŸŸ333uÿ¦OŸŽeË–A$aÊ”)Š?X]ðÏI¹¹¹°´´lq»¥¥¥-nƒ´ŒZ÷6{yyA"‘(æ —••ÁÍÍ ‘‘‘ÍjÇÛÛ§OŸÆãÇÔLÃ;rä¼¼¼||VVvìØY³fÕZUç@›¤¤¤àĉš‹‰cÏž=µ¶tšBOO………xöìàÊ•+xôèQ³kÑö±V7µ†·k×®X·n ///899¡W¯^ðóókV;}ûöÅÒ¥Káææ†Ñ£GÃÙÙÓ¦MÃØ±cë}¼žž|||`hhˆQ£j_H; @«§” <K–,Áˆ#àää{{{ÌŸ?¿YmtêÔ ƒ ‚««+&OžŒ¥K—ÂÝÝ]±ÜÚÚ‹-B|||£íhûX«Ý?¿«z‡ cŒ¥§§³_~ù…ݽ{·Eí$''³_~ù…=xðà¥3g lQM¡I;¬^(//g±±±,>>þ•û­ªªb‰„I$ÅN­rssÙ/¿üž={Æd2{úôé+÷Ó\´ÃJÍììì`gg×âvjíüªO^^.^¼ˆˆˆܸq£Å}ò‘¡¡aßi›K,cèСõ.³²²ÂèÑN·uëÖ-ê‹4Öa•œœŒõë×cÛ¶muöPÂgZy&¿8p ®]»Æu„(Öò¢­(¼„ð…—ž¢ðÂS^BxŠÂKOQx á©ç½wïž:ëÐyyyjégúôé*i·¢B==9„Bå\¸«¼\ŒV­ª•ÒV}"""TÖ¶¦«^CCC^_§ˆkª»Ž;ªì:Er9` ##œœžµ¸½gÏZ!!Á}ûæÁظJ Ö¥Êk6i:c:xmDR¯ì܇ӧ?BçÎ-’Éäø×¿BQZZŸ^==‘ª$ÿu¾óÀÍ›©øâ‹ÓXµj‚R‚ "‘_|á'Oòóò'f¡ðH¥UX¼8 ¯¿ÞsçÖ?sèU98´Áš5“ðÕW±ˆ¢Ô¶u…—`ýúÈË+ÆöíoªäüðGŒ×¾¾TÚWÛ¶fذaö￈ß~£+*(…W‡}òI$*+«±i“z~n™<¹&NtÁ‡†£¨Hª–>µ…WGI$I8|ø6nôEëÖ¯©­ß}QUUÏ?§Íç–¢ðê òòJF`ܸÞ7®·Zû677ÂgŸMÁ?\ÆÕ«ÕÚ·¶¡ðê _ðìY Ö¯ÿ'ýûø¸bÔ¨îX¶ì0*+Uw褶£ð꘻w3°wï9MBÛ¶fœÕ±aƒ/23Ÿã‹/NsVßQxuˆL&ÇÒ¥ápssÀÌ™ƒ9­¥}{ ¬X1¡¡gñàA6§µð…W‡ìÝ{dcëV?¸¨×œ9CÑ»w{,[vr9bß\^ñâøâ€o8:Zs]€šcŸ·l™Ž?þHÅ÷ß_àºÞ¡ðêˆ+"бck,\èÉu)µôèa‹÷Þ… N"+«éWŠ$^ðÓO×!‘$aË–é9-/ `4¬­M±bÅO\—Â+^-WTTŽÏ>;†Ù³ÝáææÀu9õ20cË?œ9sgÎÜçºÞ ðj¹-[bÀؼkòªÛë¯;Âǧ‚‚Ž¢¢‚~ûm ¯KLÌÂ÷ß_ÀÊ•oÀÔ´×å¼ÔêÕ“Ÿ_‚;c¹.…(¼Zlõê£pv¶ÃŒƒ¸.¥IÚµ3Ãx#4ô,22 ¸.GãQxµTtô-\ºô'‚ƒ§B(äþ7ݦš?Úµ3ÃgŸçºGáÕBå啸ì³ãðõí77{®Ëi}}1Ö®õAtô-\¼øˆër4…W …†žEQQ9>þx"×¥¼/¯žðòê‰Õ«¢ºZÎu9‹Â«eRSó±sg,–/kk®Ëyek×úàñã<:òª^-³zu$:u²ÂìÙÊ= ¤ºuêd…ùóG`Ë–äç—p]ŽF¢ðj‘3gîãôé{X·î_‹ù¿j?üp4LL ±aÃI®KÑHü_ÃP]-ǺuÇ1a‚ ÜÝ»p]ŽR´j¥Õ«'"<ü îÝËàºCáÕááW’ò<ëR”jâľpqé@?Ճ«JK+°uëϘ5Ëm¸.G©Ö¬™ ‰$ qq‰\—£Q(¼Z`÷î8H¥UøðÃÑ\—¢ƒuƘ1½M“öÿ†ÂËs99Eص+ï¿ïKKc®ËQ™?ž€‡³qëR4…—çþóŸ_ann„yóFp]ŠJuíÚþþƒ±eËÏtÆÉÿ¢ðòD|ü”—×¾HWjj>ü£a`Pç:éZ' `4ž=+Å?\ª³ìÂ…$*â…—'Þ{ïkiqûö_aggÁ›YC-Õ®fÏvÇ—_žQ\m°¼¼sç~‹éÓw!'§ˆã Õ‹ÂËOŸ– -í`̘:tþ™‹#G®cÉ’1Zq@FS-\è‰òòJìÛ'AbbFÁéÓ5gßøõ×»W§^Æí¾Óp?þø;–-‹€\.Wœ²µ}{ ê!6v9D"Ý /lÚt _}ÕÕrÈårTWË! àîÞ‡½Ëuyêr]·Ö:OEGßRüŸ1Æ23Ÿ£´´æpX™ú•—WâÉ“§(+«BeeµbÖ‘\ÎpéÒ#ºú …WÕ”TàÂ…GËkO“ÉäÈÍ-ÄØ±ÛpèÐUŽªS¯ÄÄ,x{oʼn·ÔÝ`dŒáôiÝÙt¦ðj¸ØØûÉêŸÓZ]-GU• ~ø#fÏþ¦ÎÞhmrèÐUŒµ©©ù¨®–Õû@€S§î¨¹2îPx5܉·!5|›»,bc’’¯®²ÔJ*­Â¹s5‡FÊd É䈋K€TZ¥®Ò8EáÕ`••Õˆ½ßàÙ$D"!„BÞ{o=Ú„=lÔ\¡zêa×®YøöÛÃܼÄâ†O_QQ…ó稱:îPx5˜DòeeõŠˆÅB´oocÇ#(h¢N¤1n\oH$cܸÞõ^,M$áçŸosPúQx5Ø©S·¡§W{‰DBÌ›7qq{U±´4Æž=³±gÏl˜™Öù®®–áÔ©;:qî+ ¯†’Éäøùç?PUõ×ΑH[[sDE½5k&ÃÐPà ¹5a‚ ~ûícŒӫΧpI‰¿ÿþ'‡Õ©…WC]»–ŒçÏËüõi;wî0œ;ˆ:q\fhÓæ5|ýõìÚ5 &&†Š#ÍôôDøùgíßëLáÕP115|"‘66f8rd!>ûÌ­Zés\™æ™4©/$’•ðôì @€ª*¾ m?xP§üòË/qá?N%zá‚ÀƦE‰T³š†ŠÅ‹+½ÝéÓ§+½Í¦ÈËk…,..y01ÑŽß¾>üÏ»®kÿ.Ê¿¹rå """àëëËu)*-Õ‡ ŽŽÏai©ºÃý""" §§šïÍ ö±¶²*‡™Y-‘ŸoÈûð¾ÇúèTxÀßßaaa\—Ѩ„„LtìØÆÆ*ígæÌ™*m?,, þþþ*í£1ññ)¼ßðàÁד΅—zô°åº­À÷ྠí°"„§(¼„ð…—ž¢ðÂSÞúVVV°±±Axx¸¢ððp888 U«Vðññ©µ²ïܹwwwÂÉÉ Ì;©©©˜5kN:Õ`ß|ó ìííallŒ¹sçÖ9×_(k¬Ïœ9gggèëëÃÕÕׯ_W,;wî\\\```€îÝ»ãØ±cµú ƒ££#Œ1gÎÈd53º‚‚‚`eexxx ==àçç‡ÜÜ\øùùA"‘4øÚT¶Ž˜ñ÷÷gþþþMzltt4lÉ’%¬´´”I$fffÆ"""XVV …lõêÕL.—³;w2lãÆL.—³Í›7³.]º0Æ»uë300`GŽaååålûöí Û¾};+))a666,44”I¥RvöìYfjjÊ.^¼Èž?Î:uêÄbbb˜T*­S_VVôÚ«Ã  IDATÀæÏŸÏ***Ø£G˜™™‹UÉx4Ö¤Ç*k¬ÓÒÒ˜‰‰ ‹ŒŒdeee,88˜ÙÛÛ3¹\β³³™‰‰ ûî»ï˜T*eQQQÌÈȈ%&&²¬¬,¦¯¯¯ËÇ3sssö믿²˜˜fkkË>|ÈŠŠŠØ¤I“Ø;ï¼Ãc¬  €ÙØØ°¸¸8VYYYçu)c………±bzÂÛ€èèhfaaQk¥¬ZµŠM™2E±RJJJcŒ%%%1±X̪ªªcŒÝ¸qƒµmÛ–1ÆØòåËÙ›o¾Y«íÞ½{³íÛ·³ððpæêêZkÙâÅ‹Y@@cŒ1GGGvùòåzë{QCnn®â¾!C†°ÈÈÈ&½>Æ4+¼Êë­[·²‰'*Ú¨¬¬d7nd¥¥¥l÷îÝløðáµú6m[»v­¢ÌÌLŲádzˆˆÅlmmÙÝ»wcŒ•””°‚‚ÅãìììØÍ›7ë}]ÊXG…—6›áèèXëÀý^½z!++KqÛØ¸æª|ŠKŸž‘‘ggçZíöìÙ’’‚ÄÄD888(þ…‡‡ãùóçMªO$ÁÊÊJq»¾ÓÂð…2Æ:%%NNNŠÛzzz „‘‘ÒÓÓk-€nݺ!--MqÛÆæ¯s€½hw„ ˜6m† {{{|ðÁ(((hòëRå:¢ð6âéÓ§µnçææÂÒÒ²YmXXX 77·ÞvMMM1lØ0¤¤¤Ôú·k×®–ÎCÊk“:o|GEaa!LMMëô‘ŸŸ33³FÛdŒ!$$ùùùˆˆˆ€T*ÅÔ©S›U—ªPx‘’’‚'N¨Ùí¿gÏŒ?¾Ymxzz"<<\ñ)rûömüöÛo///H$$$$ÊÊÊàææ†ÈÈÈzÛŠŠŠª÷7_m Œ±öööÆñãÇo–W®\Á[o½‘Hoooœ>}?äääàÈ‘#ðòòj´ÍM›6aäÈ‘‹Å8p fÍš…ÌÌ̯ÎuDámÄàÁƒ±dÉŒ1NNN°··Çüùó›ÕÆäÉ“áííž={ÂÃÃ'NTüÁtíÚëÖ­ÃàÁƒáåå'''ôêÕ ~~~õ¶€¨¨¨¿.M¤Œ±öðð€¿¿?œáåå…Ñ£GcË–-xíµ×зo_,]ºnnn=z4œ1mÚ4Œ;¶Ñ6gÏž´´4ôéÓ^^^˜>}:Ö­[§XnmmE‹!>>€zבNIãÅ¼ÈæÌç•J¥¸|ù2ÌÌÌàêêúÊ}ß¹s9998p LMMk-ËÈÈÀ½{÷`ggWçû±*½Êx4•@ hö|^eõÇ‘œœŒ=z C‡µ–¥¤¤ )) u¾7¤¢¢W¯^…T*…‹‹ ¬­­ËòòòpóæM 0¯\sC^Ìç­'¦ºu&Wahh·Ó»woôîÝ»Þevvv°³³kq|§¬±îÚµ+ºvíZï²;›ÃÀÀÆ «w™••FÝÜ•‚6› á) /!>>\—¡T}Ý&U^ IWеŠþ¦ªªŠ³+Ø€¾¾-Œû¡ à$g5¨KTT”ÖN¤Ð:51ADFÞÀÂ…? 3s;×¥~»Nßy á) /!}ÚÃÞ¾5U¾£ðªAûöèׯ#„ÂÚÛÎB¡Ó¦õç¨*Âw^5ñõÁ?¾øÊå 'öã¨"Âw^5™8±o­ÛB¡ƒwµµ G¾£ðª‰¥¥1ÜÝ»@(ükÈ}}i“™¼: ¯M›6ŒÕì¸ …?¾Ç>£ðªÑر½G[yzöPïLȫйc›¥R)Š‹‹9ëßÙ¹nÞL‡··òòò8«ÃÊÊŠ³¾‰rè\x ‘ÀYÿƒ[ãæÍtXYUáÞ½{œÕ1räHÎú&Ê¡sá}«?Þ!CªQ]moïQœôŸ““Ãé›QúΫfúúbŽçº ¢(¼02Ò红(¼„ð…—ž¢ðÂS^BxŠÂKOQxynÞ¼yHNNæº Â /ÏÅÄÄ °°ë2(¼MpæÌ8;;C__®®®¸~ýºbÙ?þˆ.]º@,ÃÆÆ[¶lQ, ‚•• àááôôô&-»sçÜÝÝahh'''--™˜˜°ÈÈHVVVÆ‚ƒƒ™½½=“Ë嬨¨ˆ°ÈÈH&•JÙùóç™P(d¹¹¹,&&†ÙÚÚ²‡²¢¢"6iÒ$öÎ;ï0ÆX£ËJJJ˜ eR©”={–™šš²‹/²´´4ÖªU+6eÊvéÒ%–““ÃlllX\\«¬¬TÉë'ëšÎÛÜT‡ÂÈ‘#áããX¾|9Äb1ÊËË¡¯¯K—.ÁÕµæì;w†žž !•J011ÁÁƒQUU.;qâlll°páBÀ¨Q£0gÎDDD`éÒ¥(//Ghh(lmmÔÌ 677‡žžžú…h ïK¤¤¤ÀÉÉIq[OOŠÛñññX¹r%=zKKKÈårÀ„ ‹!C†ÀÜÜÞÞÞXµjÌÍÍ]–’’‚ÄÄD888(ú(//Çøñ5ÇC …BEp‰n£ï¼/abb‚çϟ׺ïèÑ£(,,DTTV­Z…   $%%áÚµk0220Æ‚üü|DDD@*•bêÔ©/]fjjŠaÆ!%%¥Ö¿]»v@“ØÝEá} ooo?~¹¹¹€+W®à­·Þ‚H$Bzz:zöì‰aÆA$áòåË(**lÚ´ #GŽ„X,ÆÀ1kÖ,dff¾t™——$‰bÚ^YYÜÜÜÉÁ«'ëoÝêö*;l>øàÖ¦MæééÉLMMYhh(cŒ±ÔÔTfmm͆μ¼¼Ø¸q㘣£#›4iKKKc;vd½{÷fžžžÌÌÌŒíÝ»—1Æ]Æc!!!ÌÔÔ”yzz2;;;æëëËd2KKKc"‘¨Vmýúõcîîîìúõë*{ýD#]0ÆêžÊ_‹½˜ŒÞÜÉø>Drr2zôè:(î/**ÂÕ«Wamm>}ú -- ?ƈ#PQQ«W¯B*•ÂÅÅÖÖÖŠç5¶ 222pïÞ=ØÙÙÁÙÙ¹ÁºòòòpóæM 0*{ýDã\§ðê]ýZä:}ç%„§(¼„ð…—ž¢ðÂS^BxŠÂKOQx á) /! bm3.7.0/doc/html/a00146.png0000644000175000017500000002720711365042635013257 0ustar tlktlk‰PNG  IHDRÃÓ5(!bKGDÿÿÿ ½§“ IDATxœíÝw\gþðÏ‹AΈ¨(H‰%bŨ€ˆBΚh,g}ºÊåùùùضm›–«"¢†b€ "Z³f  …Ôe‘šq$J"=&¾úê+:tÆÆÆðóóCPP²³³ñŸÿünnnFII æÎ‹ääd>|†††X°`FŒغu+öîÝ‹¼¼<ôë×ÿú׿`nn^ë²Û·ocýúõ¸qã:vìˆ3f`äÈ‘õEDDlmmk}/û÷ïÇO?ý…BáÇcÙ²eÉdê>dD¤&¼A¤Ç®_¿CCC„……áƒ>ÀÎ;ñßÿþ%%%HHH@nn.BBB0sæL¬]»¦¦¦‡¿¿E·ÁùóçqðàA|ýõ׈ŒŒDË–-ñË/¿ÔºL©TbÙ²e5jöïß%K–`ýúõHLLܹs»wïÆ²eËj}*• ×®]ÃöíÛ±mÛ6DGGãâÅ‹:jD¤¼A¤ÇZ·n9sæÀÈÈvvvðññÁÑ£GaggA0uêTÈd2899ÁÐГ'O®ø~÷îÝ€¢¢"@qq1Z¶l‰wß}%%%µ.;{ö,Úµk‡‰' €±cÇâĉèÙ³'V®\‰%K– mÛ¶uz/³gφ‘‘,--amm¼¼<µ+"R/"=fii #£ÿ?»uë†øøøŠï›7oÉdËå044¬ø¾ÜK/½„øøx,X°­[·ÆÀñꫯ¢uëÖ5.{øð!RRR0eÊ”ŠmÂÍÍ ?ÿü3Ú·ofÍšáÊ•+ÈËËCjj*nß¾îÝ»?÷> `jjZñ=».ˆt‘{öæÄ'Ož M›6¢¶!æÏŸùóçãæÍ› Å¿ÿýo|ûí·5.kÙ²%ìíí±víÚŠmB&“aûöíP(ذa€²GNsrr P(ðöÛo7ü‘äx‘{øð!Ξ=  ìqȨ¨(¸¹¹‰ÚÆÎ;±xñb¢wïÞððð@fff­ËœœœpùòeüùçŸÊÂÃܹs™3gbóæÍ_666øë_ÿZN:…;wî¨ë0‘x‚HõíÛß|ó víÚ…{÷î¡W¯^˜0a²³³ë¼ ìÝ»³gφ©©)®_¿Ž7Þx£ÖeùË_0{ölÌŸ?½{÷FJJ úõëWñdGM6lØ€ñãÇ£[·nõ{ãD$9™ ‚ÔEQ™;v ((ǯóÏ!11­[·F¯^½êµßââb$%%¡¨¨={ö¬t?BMË 33ÉÉÉèС¬­­ëµuX¹r%:vìÈQ-‰´„W ˆôœ±±1 РmÈårØÛÛ‹^:t@‡´"Ò?¼‚ˆˆˆDc€ """Ñ ˆˆˆH4"""‚ˆˆˆDc€ """Ñ ˆˆˆH4"’›[™L.uDDµâ@RDS*‹ñ믉 ‰Å‰×Т…Ô%ÕŠCYI@ÄÄÜFhhöîM@^^ÜÝ_D§N…X·n ¡¤ÞÛnÑâE™!'çœ+äòN€ââ‡jÙžLf„¶mG"'ç JKsÔ°Eôî=sæxaòdgXY™©a›DT"-JNÎDHÈy„†Æ!%åúöµÄäÉ.˜8Ñm’’‚˜˜˜zm;/¯!!·qñâ# Ò ~~ê¨ê§Ÿn¦MSÏ’Ç ñí·IÈÎ.FPPOØÚ6ì~AA NžÌBlì<~œ‡Áƒ{! ÀãÆÙ£ysv ©‘†=y’¨¨‹ 9¸¸dtìØ>>àïï‚>}:«eGŽ\ÅÒ¥» —býú)xùåղݧ-Xð3àë¯ÿª¶má_ÿ ÅîÝç1oÞp¼óÎ8Èå† Úfqq)ŽK®]18v, -ZÈñÊ+öp«kwÈd25UOÔ´1@i@ù±={.à·ßa` øqöðóˆ¡Cm`h¨žû—sr”xÿýHìÜy¾¾±jÕ$˜˜´P˶Ÿ¥‰Q.88Ë—‡¢OŸÎØ´iºÚº23s‡àà$%=€µuøû;³‹ƒH  ˆÔ(!!{ö\@DD<Š|¼ôRøù9c´jÕL­û:uê&–,Ù ¥²«WûcܸêgÌTM¸u+sæü€´´l|þùTŒm«Öí'%=@pp ÂÂâ*º8|}büx{µ· QSÀAÔ@©©Y Þ=çqëV:zö´€ŸŸ3|}4ò_nAAV­Ú‡ï¿?…W^±ÃêÕþèСµÚ÷ó,M r—Æë¯¿ŒåË=Ü¥ñ¬g»8Œ0a‚»8ˆDb€ ª‡ÜÜBìß {öœÇÙ³ÀÔ´%¼½áï?ýû¿ ±ýÆÅ%cÑ¢xü8+WúÀ×w Æöõ,mˆr¡¡ðìAïÞÔÚ¥ñ¬ÌÌ\ìÝ›€ààó¸|ùnE‡Ÿß@téÒN#û$j, ˆê¨´T…“'o 4ô¸ •JÀèѶðóˆ#ú¨ý?å§•à“OaÓ¦ãxùe¬[7:µÕØþª¢Íü—ÆÃ‡ ¬_?cÇÚitOwqþOtèÐ':bÒ$'88t‘º<ää(ñÞ{áŽÅ”)®øà´n­›ýéº àáCæÎýW¯ÞǺuðò uIÏuq”càÂ.jT ¨ÑQ*‹ñ믉 ½€'®ÁØØýàë;/¿¬¾y(êܹ?ðæ›;PPP„O> €‡G?©Kª‘. ì>–>ˆÂÖ­'ñúëÃðî»^02Ò6.ëâˆGXXââ’ÙÅA 5 *•€3gn!4ô¼Œ¼¼"¼ü² |}ÂãŸNÝ%_TT‚µkbÓ¦ã9²/Ö­›¢•¡¨JWD¹ˆˆx¼ýönôëg…Í›gÀ¢Ô%UrëV:‚ƒc+º8»" À^^ØÅAz‰‚ôZRÒ}„†–Ý×ðð¡]0i’&Nt„¹¹nýÊê]¸p;îÞ}„÷ߟˆÀ@7©Kª3]píÚÌžý=òó ±iÓt¸ºêÞ½$Owqüö["°‹ƒôéû÷Ÿ ""¡¡”ô/¼Ð¾âfÈž=-¤.¯J*•€M›ŽcíÚƒppè‚/¿ B×®ÒÞ¸)–> ì¾’7ßÜ£G¯bÅ O¼þú0©KªVv¶QQ Ž­èâ(°LW—‰Ê1@^ÈÎVâÀK ½€³gÿ€‰I xyõǤINpvî¦Óà ߽ûo¾¹qqÉxûíW0oÞp¹C } @Ù£ž_} kÖÀ„ X¿~ Z´0–º¬=ÝÅQ>d:»8H—1@Î*Ÿ“ ,,¿ý–•JÀ˜1¶ðõˆáÃ{K2È“X;wžÃûïGÂÊÊ _}[[+©Kª7} åNº¹s‚••)¶n¥3l––ªpúôMìÞ}\PÖÅáç7C‡êÎMÀD ¤SA@lìDDÄ#22ÙÙpuí?¿?¾¿Þü'öô PsçºcÙ²qhÖL÷OMô1@@JÊ#Ìšµ *°iÓt ÒKê’êìÙ.ŽŽÛÂß ÝøIŽ‚tÂÕ«÷‡ÈȤ¦f¡OŸÎ7CZY™I]ž(\Ʋe»Ñºus|þùT¸¹õº$µÐ×ùùEXºtöï¿„wßõÒéû"ªóìSœ‹ƒ¤ÆA’ùóÏGˆˆˆGxxÝxXX?ÎÃàÁ½à‚qãìѼ¹\êò¨b€ (**Á‘#W#G!Àˆ}0q¢#ÆŒ±mhññbñâÈÈÈÅÊ•>ðõ(uIÕ˜P65øßÿ¾‡ÿŽÿÛ³f •º$µ(zi×®;–„-äðò€€89YK]5" ¤6埅‡ÇãàÁËÈÍ-Ä A=áããˆqãìѶ­4Ód«[qq)>ÿüW|õÕ Ô ë×OÑëËàuÕØPv_ÄW_ÅÚµàïïŒÕ«ýõò¾ˆêdfæ",,ÁÁ1HJz€ž=-à?¿èر­Ô呞c€ ‹ÿñˆŠJ@zzú÷':ÂÛ»£ûºqã!þö·í¸u++VLÀŒCôö¾ ±c€(wôh,ø=z˜cëÖYèÔ©qýÞÀåËw|ááqÈÉQÂÝýELžì~z1¦ 骗›7Óˆˆx$'g¢G‹ÿM“íˆnÝÌ¥.OíT*ß}÷_¬^½¶¶Vøê« Fù>kÒ˜ܾY³¶!++[¶Ì„³s7©KÒˆ¢¢>ü;vïŽÅ‰×ѦMsøø8! ÀööÒOqOúƒ‚êìþý'ˆŒL@XXSÑ©S[Lœ8':6êžääL,]º .$cÉ,X0R¯oü¬¯Æ 7·ûÛ/8v, «WûaêTý™ì¬>ÒÒص+ÁÁ±HNÎDŸ>àŠI“œôb†X’ÕèÉ“|DE]DDDþx?ºví€/¾D¿~ú;uC5…”Ýñ駇ðùç¿aöì¡xï=ïFA@LÌmÇbß¾K(**Á˜1ý0eŠ+ÜÝ_äðÙT%zN~~þñ8qâ àáÑ>>Žpw×9(*99K–ìB\\2.‰Å‹Ç@.7”º,I5•Q.*ê"þþ÷pvî†Í›§5š›€k“—Wˆ}û.!8811·aaa?¿pá ¡T (ë=~ü"#ð믿£¸¸C‡ÚÀÇÇcÇÚ5™¡rU*[·žÄêÕЭ[|þyÓ¾êð´¦ àÊ•{˜1c+š7—ãÇ_kr@““3r»wŸGjjg¥J š°ââRœVCdäEÒR€¦ÑµSuÍzêÔ tîlŠ=šÖ«ú„BG””¨ðóϧ1s¦ø }®^½¨¨DE]Drr&¬­;ÀË«?¼¼4Ù¾üýû/aΜQþëmhh€öí[ã¯} 6EŸ>–X¿~ z÷æU‡ê”–ª`oÿ.²²ò«\nfÖ—/ØdÇP(ò1wîO8þf΂Wü¾Éd€©iKDGÿ«ÉÝŒü´†ÌêìüRS³þ7¸ºv×RÅ$„HMÍÂÔ©›pëV:Nžüg»u+‘‘ñˆŒLÀ­[é°´4…—Wx{;ÂÁ¡ñŽ YçaÈUP(”xú×ÛÈÈ€€·Þ‹ùóyÕ¡.Þ{/?þxú¹n ¹ÜÓ§ÆøHT™n()Qáí·wcÏžó*Uåß·±cíðí·Ó%¬P7<;|v«VÆðò€)S\áèØõ¹õoßÎÀ!(;Ž6ÁËk€¶Ë¦Z4;ŸtØþý—ðæ›;QTT8tè .YåºÉÉ™ˆŠºˆ¨¨\½z;š`„þX·n ´f?ãÿ,[¶yyEx6—””ÂÀ@##C†‡:òñq–-'Ÿ{½¸¸>>NT¤[AÀõë “É*º.Ê•””bÿþKØ·ï&Lp¨BÝ`llOÏþðôì´4öì¹€ààXüòËÙ*‡ÏÞ±ãärC—¢¤D…yó~ÆÝ»±`AÕŸ$ ^HAAV¬ÇÎç “‚PvÙ³ÿ®Ø¿qÅz÷îeaïÞ²ÐpéÒ]´oß&8ÀÓ³£Jº>ö7Þøé¹ðð´§ï‡ Ú•_J~š••ΟO¢Štdz÷=^ý¤¤—_MU4Ý~r¹\ÔÌ'O qåJTª0lXã5((¨A?ß·¯%öíû{•Ëd2¼½}0i’? U(.VA©,Aa¡ %%*俣´´'llÂÌŒOg¨ÛäÉ“«|½Úanξâ†>Ü:•ýܧOíÇ¢I·Õ'ŸÖ¾R¨T*þÒ§ö›:uèÕÐÌšn?øûóIˆˆˆÐèö'OöC`àTîƒÄámþDT'úˆHó8"‰ÆADDD¢1@‘h DDD$šÎˆ¬¬,¬]»V²íäååá£>jðþ›2¶¡~cû©Ï­[·ðÃ?hdÛ‘‘‘ˆ­u½ÔÔT¬^½¿ÿþûsËx¬õËÓçTNNV¯^]åzšnW  …[·n­Óº¯½öîܹÓàí<-''ï½Ç銂m¨ßØ~êsíÚ5lÚ´I#Û Á™3gj]oÚ´i¸xñ"ŒŒžøŽÇZ÷=}Ž=}N) ¼ÿþûUþŒ¦ÛUg„µµ5®_¿^§u:…BÑàíz± õÛ¯qIIIÁâŋѻwo©K¡zxúÓ•sªÁâÑ£G5jÖ¯_KKK˜››cÛ¶mxë­·`nnŽÎ;c×®]¢×MKKƒ§§g¥ŸÛ¾};zôèV­ZaÆŒ(--E@@ÒÓÓ€èèh¤§§ÃÃÃ?ýôLMMqüøñ:m§:[¶lA×®]ѪU+Ìœ9SÔ|ºæÊ•+ûL |öÙg5žãOž<ºuë&:tHP*•ÏÕ§Žc-æxˆ@ؾ}{ÖU×±®éœ«iYMíP“¤¤$¡}ûö•^spp~ûí·çα§ÏÍ»wï Íš5«r›êhWA¨þø«%@rssA„7nFFFBqq± ‚/tìØQôºÏ~xîß¿_±ß—_~Y A¬¬¬„„„AÊ&!55Uôvªz_ééé¯ 4H¯ó±Ñ¥±k×.ÁÑѱÒk‹-/^Ì6¬®ˆˆˆÁÒÒRøý÷ßA(ûÊÊÊç`Mt)@˜™™ EEE¯-_¾\ðññÕ&Ë–-¦NZiÛvvvÂgŸ}Vã9.‚УGáìÙ³UÖ§Žc­KBǺ¦s®¦eµµCuj ‚Pù Ò®‚PýñWÛPÖ­Z• s+“ÉЬY³Šud²çgP³îÓ:wþÿÉgjZ×ÀÀ––– ÞŽ¡¡a¥y j«O—%''ãÚµk°¶¶®x­  ãÆ«øžm¨»&L˜€cÇŽaРA055ÅèÑ£±|ùr˜ššV¬ÃöÓm=zô€\þÿ¾õë×G­ø¾.m’ššúÜdf哱Õå¯ uå÷\Ó9WÓ²†¶ƒºi²]uö&ʆÐç_|M111ÁСC‘œœ\ékãÆR—V%¶ae‚ `ݺuxôèBBB T*áëë+uYÕbû=ïÙI½ÒÓÓÑ®];QÛ033Czzz•ÛÕ·s\“Ôq¬k:çjZ¦ÎvÈËÓí)ße€¨¯ˆˆˆ*Ÿ‘n F…èèh$%•MžŸŸ'''„‡‡K\™z5Ö6\³f ÜÝÝaddL›6 ÷ïß—º,µk¬í”]!Ø·o€²Çë6oÞ,ú¿Ò‘#Gb×®]xðààòåË8yò$ñç8uÍj:çjZVßÏZ¹\…BÇbbbpëÖ-Q5Úm×F ,,,°páBÄÅÅ5h;‹/Öø”´RéÕ«>üðC¸¹¹aÔ¨Q°±±A¿~ý ui؆µ™>}:îÞ½ {{{Œ5 “'OƇ~(uYØ~µsssÃ’%K0lØ0ØØØ k×®˜3gލmx{{côèÑèÛ·/†OOOŒ5 €øsœÇºf5s5-«ïgm·nÝàêê GGGx{{céÒ¥Ö§JJJpîÜ9e!èéA¿ž>ÇÚ¶m«Õsªºã¯¶›(ÕÍÀÀ ÎÇÜÜcÆŒiðvš+++XYYie_lCõjÖ¬†ªµý±ýÔ¯yóæÏ=ë_vvv°³³«r™6Ïq]¦Žc]Ó9WÛùøl;|8akk œ?Ÿ|ò Z·n ooo|øá‡6lŒ!—Ëѽ{w,]º_ý5¾ýö[ØÛÛÃÂÂ.\¨xBcúôéÕ.ëÕ«>üðC¸¹¹ÁÙÙ×®]àAƒP2žfaa… â‹/¾€“““V é™ ‚ÔE飴´4$%%ÁÝÝ]ÔÏݼywîÜAŸ>}Ð¥K—Š×³³³ ØÛÛãîÝ»¸}û6† †ÂÂBÄÆÆB©TÂÁÁ?WÓ2HMMEbb"¬¬¬`kk[m]HHH€³³3ÌÌÌ4öþ©q`€ "ª§¦þ´©¿ÿ¦Ž÷@‘h DDD$‰ÆADDD¢1@‘h DDD$‰ÆADDD¢1@‘hœ ƒˆ¨222¤.AMõ}S"¢JLL”º"­ã\DDD$ï """Ñ ˆˆˆH4"""ÍÀ%©‹ """ýòŒÏGí”9fÝIEND®B`‚bm3.7.0/doc/html/namespacemembers_eval.html0000644000175000017500000001707411365042652017142 0ustar tlktlk BitMagic: Data Fields
 

- b -

  • BigEndian : bm
  • BM_AND : bm
  • BM_BIT : bm
  • BM_GAP : bm
  • BM_HM_DEFAULT : bm
  • BM_HM_ID_LIST : bm
  • BM_HM_NO_BO : bm
  • BM_HM_NO_GAPL : bm
  • BM_HM_RESIZE : bm
  • BM_NO_BYTE_ORDER : bm
  • BM_NO_GAP_LENGTH : bm
  • BM_OR : bm
  • BM_SUB : bm
  • BM_XOR : bm

- c -

  • COUNT_A : bm
  • COUNT_AND : bm
  • COUNT_B : bm
  • COUNT_OR : bm
  • COUNT_SUB_AB : bm
  • COUNT_SUB_BA : bm
  • COUNT_XOR : bm

- l -

  • LittleEndian : bm

- s -

  • set_AND : bm
  • set_array0 : bm
  • set_array1 : bm
  • set_ASSIGN : bm
  • set_bitset : bm
  • set_COUNT : bm
  • set_COUNT_A : bm
  • set_COUNT_AND : bm
  • set_COUNT_B : bm
  • set_COUNT_OR : bm
  • set_COUNT_SUB_AB : bm
  • set_COUNT_SUB_BA : bm
  • set_COUNT_XOR : bm
  • set_END : bm
  • set_gap : bm
  • set_OR : bm
  • set_SUB : bm
  • set_XOR : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00255.map0000644000175000017500000000035611365042652013244 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_func_0x78.html0000644000175000017500000000727611365042652017737 0ustar tlktlk BitMagic: Data Fields
 

- x -

  • xor_bit_block() : bm
  • xor_op() : bm
  • xor_swap() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00129.map0000644000175000017500000000215311365042631013236 0ustar tlktlk bm3.7.0/doc/html/a00167.md50000644000175000017500000000004011365042644013145 0ustar tlktlk831dcbf2ea676bfa29a5f2aecb65ad07bm3.7.0/doc/html/a00004.html0000644000175000017500000003464511365042627013435 0ustar tlktlk BitMagic: sample4.cpp

sample4.cpp

Exmaple demonstrates bitvector serialization/deserialization.For more information please visit: http://bmagic.sourceforge.net

See also:
bm::serializer
bm::deserialize
/*
Copyright(c) 2002-2009 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample4.cpp
 Exmaple demonstrates bitvector serialization/deserialization.
 
For more information please visit:  http://bmagic.sourceforge.net

  \sa bm::serializer
  \sa bm::deserialize 

*/

#include <stdlib.h>
#include <iostream>
#include "bm.h"
#include "bmserial.h"

using namespace std;


// This exmaple demonstrates bitvector serialization/deserialization.



const unsigned MAX_VALUE = 1000000;

// This procedure creates very dense bitvector.
// The resulting set will consists mostly from ON (1) bits
// interrupted with small gaps of 0 bits.

void fill_bvector(bm::bvector<>* bv)
{
    for (unsigned i = 0; i < MAX_VALUE; ++i)
    {
        if (rand() % 2500)
        {
            bv->set_bit(i);
        }
    }
}


void print_statistics(const bm::bvector<>& bv)
{
    bm::bvector<>::statistics st;
    bv.calc_stat(&st);

    cout << "Bits count:" << bv.count() << endl;
    cout << "Bit blocks:" << st.bit_blocks << endl;
    cout << "GAP blocks:" << st.gap_blocks << endl;
    cout << "Memory used:"<< st.memory_used << endl;
    cout << "Max.serialize mem.:" << st.max_serialize_mem << endl << endl;;
}


unsigned char* serialize_bvector(bm::serializer<bm::bvector<> >& bvs, 
                                 bm::bvector<>& bv)
{
    // It is reccomended to optimize vector before serialization.
    bv.optimize();  

    bm::bvector<>::statistics st;
    bv.calc_stat(&st);

    cout << "Bits count:" << bv.count() << endl;
    cout << "Bit blocks:" << st.bit_blocks << endl;
    cout << "GAP blocks:" << st.gap_blocks << endl;
    cout << "Memory used:"<< st.memory_used << endl;
    cout << "Max.serialize mem.:" << st.max_serialize_mem << endl;

    // Allocate serialization buffer.
    unsigned char*  buf = new unsigned char[st.max_serialize_mem];

    // Serialization to memory.
    unsigned len = bvs.serialize(bv, buf, 0);


    cout << "Serialized size:" << len << endl << endl;

    return buf;
}


int main(void)
{
    bm::bvector<>   bv1;    
    bm::bvector<>   bv2;

    bv2.set_new_blocks_strat(bm::BM_GAP);  //  set DGAP compression mode ON

    fill_bvector(&bv1);
    fill_bvector(&bv2);

    // Prepare a serializer class 
    //  for best performance it is best to create serilizer once and reuse it
    //  (saves a lot of memory allocations)
    //
    bm::serializer<bm::bvector<> > bvs;

    // next settings provide lowest serilized size 
    bvs.byte_order_serialization(false);
    bvs.gap_length_serialization(false);
    bvs.set_compression_level(4);


    unsigned char* buf1 = serialize_bvector(bvs, bv1);
    unsigned char* buf2 = serialize_bvector(bvs, bv2);

    // Serialized bvectors (buf1 and buf2) now ready to be
    // saved to a database, file or send over a network.

    // ...

    // Deserialization.

    bm::bvector<>  bv3;

    // As a result of desrialization bv3 will contain all bits from
    // bv1 and bv3:
    //   bv3 = bv1 OR bv2

    bm::deserialize(bv3, buf1);
    bm::deserialize(bv3, buf2);

    print_statistics(bv3);

    // After a complex operation we can try to optimize bv3.

    bv3.optimize();

    print_statistics(bv3);

    delete [] buf1;
    delete [] buf2;

    return 0;
}


Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00216.md50000644000175000017500000000004011365042646013142 0ustar tlktlk5604052f48374dd56015bb0f370797e1bm3.7.0/doc/html/a00209.png0000644000175000017500000001524711365042646013262 0ustar tlktlk‰PNG  IHDRe]}ÛwÏbKGDÿÿÿ ½§“\IDATxœíÝ{PTWžðo? y„îæmƒ@¯Uœ{8÷wîiëÇõÜ{Ï1Ƙ]NtcŒý„“2cŒÙNÊŒ1fGÄÝÆ^………¨¯¯Ÿèn¼”'º #&à }Œ=ÉÉÉ8~üøDwã¥ô"¥9ž¾`ì9JJJñ×súÊÌÌœè|Ô8)3Ƙá¤Ìcv„“2cŒÙNÊŒ1fG8)3Ƙá¤Ìcv„“2cvªªª GŽ™Øyyy(**š´ñì'eÆìTyy980!±³²²PPP0iãÙ3NÊŒ1fG8)3fÇÌf3RRR •JáããƒO?ýÐÔÔ•J…½{÷ÂÏÏÞÞÞ8tè6oÞ ooo( ¨ÕjË~ÒÒÒ°aÆ!ËjµJ¥ÎÎΈGKK‹¥®´´‹-‚““¬?þ<"""àè舘˜\»vÍRwñâEDGGC"‘`ÆŒÈËËS<ƒÁ€+VàèÑ£Ëå(++!¶?Ä{.’’’())iÄ¿êÔ)”ššJ”ŸŸO2™Œ²²²H§Ó‘P(¤mÛ¶‘Ùl¦ýû÷Úµk™ÍfÚ½{7…„„Xö•——Gƒ–oܸA‰„²³³Éh4Rzz: ôôtjoo'…BAûöí#“ÉD.\ ©TJW®\!FCnnn”““C´sçN "³ÙL÷ïß'777:|ø0™L&ÊÍÍ%*//S}:4 ŒF£Mñ@(Ž8!¿¨8)3fǭʃãÃÝ݃aиR©‹/Æ™3g,uF£Û·oÐîĉˆ…T*Å­[·¬êššš “ÉàäädS¼ÆÆÆQý±yQñ…>ÆìX]]NŸ> hkkÃÁƒ-g£Q\\Œ³gÏZŽ…Z­†N§ܼy—/_¨T*äççãÎ;€ÎÎNÌ™3999ˆ‹‹ÃÉ“'- ¶°°ëׯ‡H$B\\Î;‡šš€^¯Gvv6T*•Íñ^|¦Ì˜[°`RSS‘––†ŠŠ ¼úê«Ø¸q#šššFµŸcÇŽáÛo¿ÅŠ+”ß|óMüãÿ@xx8fÏžšš¨T*@hh(vìØ `îܹ(//ÇÂ… ±nÝ:…B$%%!""ÑÑÑøî»ï––†W^y³gÏÆ¦M›0gÎÌ;%%%xûí·±råJ‘MñîÝ»7¾ƒk§øBcÏÉh/ô=b2™põêUÈd2ÄÄÄ<‹®è¿M¯×cÞ¼yJ¥VuZ­·o߆¿¿ÿ€ùàÊÊJÔÖÖbæÌ™°ª«««CEE”Jå€9f[ãÆ‹x¡“2cω­I™ÙîELÊ<§Ìcv„ç”{ †6TTèPQ¡GEÅ}ܽ{ßï… ŸÞ˜½Ô8)3f£Þ^3~DuõTUéQ]m@E…wïÞGKK'ÀÝÝÓ§OÁôéSÐÜ|D“ÿ–.66œ”{ ½¾µµPSÓÿU]m@uµ?üЄžž>€¯¯ÁÁ>˜9Søø„„ø`Æ ¼¼^±ì'99w¢½@8)³—^OO´ÚfÔÕ5⇚ðè«ûé»ÑØ pqqÄ´iÞ˜6ÍkÖÌFHˆï?ËÞpssšà£`“'eöRèìì¶$ÙººFÔ×7¡¶¶ÿ{CÃèí5äryB©ôB\\”J/yá_þÅ S¦È&ø(ØË`@Rþæ›o‘‘1}aväïÿû¨~_¯o¯ïÄ&­ÚP_ßôØa0´è_bÊ”JOyaáÂK ò„\î2¡ÇÀØ€¤\__¬¬,$&&NDØËÊÊÕï_¼XŽÔT5œqåÊoŸQ¯úõôô¡¡áGKÂýiš¡ õõMèèè88ˆ艠 ODFNÅë¯G?–x½ ‘ð™ýò_çhÏ”Øäðèfûáôõ™qúô÷øÓŸ¾ÄÝ»O_r4ÚÚL¨«k´L1<žtµÚfôõYO3yA¥ ‡Ré‰À@/(•žP(ä ù.öbâS6b]]½P« ñ—¿œ‡NׂÇì‹… ¢­â5Ø­dîjÐë["‘ … J¥=±dI=ÿ9íà ™ìÅœf8~ü¸Õ:ÂŒ=‰“2{ªÖV#޹‚¾Bk« Dáñ'W{{Íhjê°º¬¹¹ÕÕTUP]ý55ýßkk ¸•lÚ4oÄÅEüóŽ/LêÑó>Ôg*%%ñññÝ fç8)³!éõ-øüóK8rätw÷Y¦†’‘qmm&TUõŸù67wœœìƒà`o¬^= !!ýI88Øç¥º•lþüù˜?þDwƒÙ9NÊl±Ø©©jde}@€ÞÞ¾µËÍ-Ax¸?fÍ ÀüÇ÷ßÓëï/)'glL&“‰rssÉÅÅ…ÊËËÇÏÙÙ™¨  €ºººl»ÖÖV’H$”““C&“‰.]ºDB¡ 9s†üüü¨²²’Z[[é7Þ _ýêWDDÃöm$Fûù3ÆÆ×¸$ewwwêîî¶lÛºu+%$$N§#ÔÞÞNDD$‹©§§‡ˆˆJJJÈ××wDq>üðCzçw¬¶EEEQzz:©ÕjЉ‰±ªKII¡>ø€>ûì3Z³fe{ww7íÚµ‹:::èÀ´dÉ«vk×®¥O>ùÄæx†V«}ê1 7v&“‰Š‹‹-Û5 I$ª¬¬¤ÜÜ\òóó£[·nQ"nnn&"¶o#ÁI™±‰5.sÊÁÁÁppp°”###qáÂKÙÕÕ@ÿ"‰D±Xl)”V«ðVÛððpýoÌ-//‡R©´ÔF¬^½½½½VoÑuppÀ–-[ Þ°;}úth4F›â€P(„ŸŸßˆŽk¨±“H$(..ÆG}„ªª*xxxÀlîxãõ×_ÇW_}…… B.—#..[·n…\.jßcöm\’rc£õ{Ç <<<Æc×îîî0 ƒÆ•J¥X¼x1Μ9c©3ؾ}û€v'Nœ@ll,¤R)nݺeU×ÔÔ™L'''›â566ŽêÍPc—››‹­[·";; .„H$‚\.ЧÞ={°gÏ””” ##o½õJJJ†ícÌþË…¾ºº:œ>}ÐÖÖ†ƒÚtfV\\Œ³gÏZŽ…Z­†N§ܼy—/_¨T*äççãÎ;€ÎÎNÌ™3999ˆ‹‹ÃÉ“'- ¶°°ëׯ‡H$B\\Î;‡šš€^¯Gvv6T*•ÍñFk¨±khh@xx8/^ ‘H„«W¯¢µµ±ž?þñX¶lÄb1æÍ›‡ 6àÞ½{ãÞ7ÆØxr>Ö9å Phh(-Y²„¦L™B«V­¢îînËœò#•••äêêj)_¿~ÝjNùý÷ß§ùóçZ6›Í”œœLr¹œ–-[F´jÕ*JOO'"¢={öT*¥ØØXò÷÷§ÄÄDêëë³ìÇËË‹bccI*•Ò¾}û,1~÷»ß‘\.§¸¸8òôô¤÷Þ{oLñ4 ‰D¢1]}}=ùøøÐ’%KH¥RѪU«(88˜Þxã Òh4HQQQK2™Œ>ÿüsË~‡‹§á9eÆ&–€èñµ¾~ZO÷‰ÍOe2™põêUÈd2ÄÄÄŒß_'”––B¯×cÞ¼yJ¥VuZ­·o߆¿¿ÿ€ùàÊÊJÔÖÖbæÌ™°¾u«®®P*•æ˜m7C]kk+ŠŠŠàããƒY³fA£Ñ ¦¦K—.EWWŠŠŠ`2™ Ÿqé›­Ÿ?cl|Œ[Rfét:« žOŠŠŠBttôsìÑÓÙòù÷õ™QVvuuX³fö3ìc“?Ñ÷ 988ÀËËkÈz—s¡öžž>ܸQo¿­FAA¾û®ݘ1CÁI™±1â¤ü yyyaåÊ•Ý1ëììFIIåÑê￯GwwDèí5[Þ8ÍOô16Vœ”ÙB¡çÎÝFaa ¾ù¦·okÑ×Gpt£§§Ï2µñèí!@ÿËJ­*dz'efQY©Ç¾}wàëû~þóÿH$@_ßOsËÝݽC¶%"NÊŒƒq¹O™M¡¡¾ø¯ÿ …ÑX¡P"`¤Ïœôôô¡  ÿû¿7¡Ñüøl;ÊØ$ÆgÊÌŠ³³~ î4Ôê"ìÛ×ÿæjO½#ãûï5ø¿ÿ» ³™ —» *j*¢¢¦bÖ¬DEùC©ôâ' { NÊlPNNx÷ÝEX¿þßpúô üùÏçp÷î}ˆDÂ!_ zâįáîî‚[·´¸u«¥¥ øê«;øüó‹èí5ÃÍÍ ¡¡¾ õýç‹T}ê‹  ÏI÷æjÆlÅI™ K,">>ññ1¸x±þó9Ö@,¢·×:9ûúJáà ÂüùÓ0þ4Ëv“©ee÷PZÚ€ÊJ=ª« ¸r¥ZíCÄb!=-É:(ÈžðÀÔ©îptý?S>#g/‚¤¤$dffZmã¤ÌFlÙ²X¶l®_¯Ç_þrgÏÞ‚H$Doo\\‡<Ûurr@LLbb‚¬¶wvv£¦æª« ¨¬Ô£ªÊ€K—îB£iBk« @rõñ‘"0Ð?}Mê…BŽ©SÝáìì8hÜøøx$%%ï 06N’““Ý>dRÎÊÊzfaök$Ÿû«¯âС_ ºÚ€¿þõ+¨Õ…èììu,GDFú#2Ò@]KK'êëD}}4šfh4?¢¡áGœ9S æG«xr¹‹%AûùÉ¡PÈ!‘"11‰‰‰£îcÏCnnî Û‡LÊo¿ýö3ë ›‚ƒ}°wïϰeË*\¹R5®û–É\Õ±p0vâÞ½‡Ðj›ÑÐÐ î!tº”—ëðõ×åpvž1®ýaìy°öc“@ @ff&O_0»õhúâÉ9e¾O™1Æì'eƳ#œ”cÌŽpRf/½ªª*9rdBbçå塨¨è…×ÖÖ†]»vš››±{÷îQ·³Æe4Çð¬pRf/½òòr8p`Bbgee¡  à…×ÒÒ‚?üá–Ÿÿö·¿Yê~ùË_¢¶¶vÐòãíìÁ£qyò&'eÆØ¸P*•¸{÷®¥|æÌ´´´ Y¶GOÃDà¤Ì³ÙŒ””H¥RøøøàÓO?455A¥RaïÞ½ðóóƒ··7:„Í›7ÃÛÛ …jµÚ²Ÿ´´4lذaȲZ­†R©„³³3âãã­’Tii)-Z'''„……áøñã–ºóçÏ#""ŽŽŽˆ‰‰Áµk×,u/^Dtt4$ f̘¼¼¼1Å3 X±bŽ= ¹\޲²²¡^¯Çš5këÖ­ƒÁ`Àºu럟? ü¤áŽ}8Cµ{ô¹eff"88®®®x÷ÝwÑ××7ì¸<~ ðÅ_ $$b± …iii#Úÿ˜LÀËZ{æPffæˆ~÷Ô©S$(55•:::(??Ÿd2eee‘N§#¡PHÛ¶m#³ÙLû÷ï'´k×.2›Í´{÷n ±ì+//222-߸qƒ$ egg“Ñh¤ôôt@éééÔÞÞN …‚öíÛG&“‰.\¸@R©”®\¹B†ÜÜÜ(''‡:;;içÎDf³™îß¿Onnntøða2™L”››K...T^^>¦xÎÎΔ@ÔÕÕ5äØi4’H$DDT[[ky[}ss3) úú믩»»{@ùñvÃõe8õÓétäèèH7n¤®®.ª©©!¹\N_~ùå°ãòø1´¶¶’D"¡œœ2™LtéÒ% …d0†ÝÿH%%%QRRҀ휔٤4Ú¤ìîîNÝÝÝ–m[·n¥„„Òét€ÚÛÛ‰ˆ¨¢¢‚Äb1õôôQII ùúúŽ(·~Hï¼óŽÕ¶¨¨(JOO'µZM111Vu)))ôÁÐgŸ}FkÖ¬±lïîî¦]»vQGG8p€–,YbÕníÚµôÉ'ŸØO£ÑÒjµO=¦¡’2‘¿¿?]¿~}Ðòãí†ëËp†k÷ès»wnÉ’%”••5ì¸<~ &“‰Š‹‹keeå°û©¡’2/HÄ€àà`888XÊ‘‘‘Vo"wuuÐÿ¤ D"X,¶”GJ«Õ"""Âj[xx8 ®®åååP*•–:£ÑˆÕ«W£··aaa–íزe  ¡¡Áª¦OŸF£ÑhS< …ðóóñ±ÅÓú2–v …Âòó£Ïj¸Ïáq‰ÅÅÅøè£PUU˜ÍÖ+#¶ÿ±â¤Ì€ÆÆF«²Á`€‡‡Ç¸Æpww‡Á`4®T*ÅâÅ‹qæÌKÑh„@ ÀöíÛ´;qâbcc!•JqëÖ-«º¦¦&Èd2899Ù¯±±ñ¹.}:\_lm÷ðáÃ!Û ÷9<.77[·nEvv6.\‘H¹\>Òò_èc ýg]§OŸÐíÁƒŸz¦6˜ââbœ={vÐrll,Ôj5t:àæÍ›¸|ù2@¥R!??wîÜtvvbΜ9ÈÉÉA\\Nž ü$[ûbk»ÁÆåÉchmmEQQ|||0kÖ,h4ÔÔÔ`éÒ¥#Ž3”¡V‰ã¤Ì&%^ºs|èt:« žOŠŠŠBttô¤‹ý< •”ùBclHðòò²ÞÅÅeRÆžHœ”cCòòòÂÊ•+_ºØ‰/ô1Ƙá¤Ìcv„“2cŒÙNÊŒ1fG8)3Ƙá¤Ìcv„“2cŒÙ¾O™MZÉÉÉÈÍÍèn06¨¬¬¬AŸ8å¤Ì&¥ÄÄĉîcÃJLLÄüùólçµ/cÌŽðœ2cŒÙNÊŒ1fG8)3Ƙù%3Ú'ÁZöIEND®B`‚bm3.7.0/doc/html/a00164.md50000644000175000017500000000004011365042642013140 0ustar tlktlk05f89d5a6624115a9349146794e9e065bm3.7.0/doc/html/a00201.map0000644000175000017500000000021711365042646013232 0ustar tlktlk bm3.7.0/doc/html/a00155.png0000644000175000017500000020123211365042637013251 0ustar tlktlk‰PNG  IHDR3«Ý:Ü2bKGDÿÿÿ ½§“ IDATxœìÝwx”eú>ü3½Oê¤÷Þ¨¡„©bA… èêWׂþl î®Ê®uË«®…Uq]…H‘¢ ´UJ¡ƒ!=! I&ÓR&™ô2óþ1É¡2ÉL’óssLf’<ÏõÌ®ÀœsÝ×m¢Õjµ """""""Nšº"""""""¢›Á0ƒˆˆˆˆˆˆˆ†DDDDDDD4 ˜º"¢¡àرc(--5tCš¿¿?Æoè2ˆˆˆˆHL8”ˆ¨ï-Y²)))†.cHKNNÆúõë ]õÞIvfõ“3fàÕW_5tCÒ[o½e興ˆˆH83ƒˆˆˆˆˆˆˆ†DDDDDDD4 0Ì """"""¢…a ( 3ˆˆˆˆˆˆˆh@a˜ADDDDDDD à ""ºBcc#RRRnêwêëë¡T*û¨"""""¢‹fÑðí·ßÞÔïlذ?ÿüsßDDDDDt †DDÔ+GŪU«°qãFC—BDDDDC„¹¡ "¢«[»v-vìØ††ÄÆÆâoûÄb1à·ß~Ã7ß|™L'''$&&bñâŨ««Ãë¯¿ŽøøxlܸíííxüñÇQRR‚={öÀÌÌ O=õ¦OŸŽŒŒ ìß¿¦¦¦Ø½{7¬¬¬””„ÄÄÄ+j)**‡~ˆüü|xxxࡇÂŒ3„„ ¨¨è†×têÔ)üë_ÿ‚D"APP–/_ŽˆˆˆëÖr3uÑÐÀÎ ""#tâÄ ìÚµ Ÿ}ö~úé'ØÚÚbݺutó,V­Z…'Ÿ|»wïÆßÿþw|ùå—P©ThooÇ™3gP__Í›7ãá‡ÆêÕ«áää„mÛ¶!11ß|ó ÝR’;vÀÔÔ[·nÅo¼ÿþ÷¿8vìX·Zš››ñÒK/aæÌ™øå—_ð /àÃ?DVV >> ,€¿¿ÿu¯I©TbåÊ•xôÑG±sçNÜvÛmøûßÿ­V{ÝZzZ'  3ˆˆŒPkk+ ­­ ¶¶¶xíµ×ðç?ÿ`aaÏ>û “'O†……¼¼¼`nnކ†€V«ERRLLL333,\¸PxÜØØ(œÇÊÊ ?þ8¬¬¬‹ûî»{öìéVKzz:\\\pï½÷£Fœ9spàÀ›º¦ýû÷cäÈ‘˜}O=õìíí1fÌ,]ºööö°°°@^^¾üòKH$ˆD"hµÚn¿omm 011……ÌÌ̄Ǘòöö†¹ùÅ¿ ‚‚‚pæÌ™n?#“ÉPZZŠÅ‹ ϵ´´ >>þ¦®I&“Á××Wxlnnޤ¤¤ÕÒ“:‰ˆˆˆhè`˜ADd„´Z-–-[†eË–¡  [¶l–“¤¥¥aíÚµxýõ× SSSÜu×]·tžÚÚÚnU*lllº=gkk‹áÇcõêÕÂs---W#7bkk‹šššnÏ¥¦¦bôèÑ7¬¥'uÑÐÁe&DDFè‡~ÀsÏ=333DFFböìÙ¨¬¬ ›=€áÇÃÔÔYYYÝ–ŽÜ ¥R‰Ã‡ššš°sçNÄÅÅuû™¸¸8dddàÂ… tAÆã?ŽÔÔÔ?-- ÅÅÅÂqŽ9•JÈÉÉÁÛo¿ SSÓÖÒ“:‰ˆˆˆhè`g‘š={6vìØGyNNNÈËËÃO<˜4i¾ûî;<ûì³°°°€¹¹9¼¼¼ðùçŸcùòå7u|ýõר´i$ |}}qÿý÷wë„ðõõÅ#<‚eË–!22¥¥¥ˆÅôéÓoxüO?ýwÞy'‚‚‚0jÔ(̘1=ôBBB››‹'žxBè°¸V-§Nºæ÷ˆˆˆˆhh2Ñ^¾ÐšˆˆônÉ’%ËåxõÕW{ü;mmmÈÉÉAkk+BCCáää$|¯±±999pvvFpp0 ¤R)FŒÑãã§§§ãÛo¿ÅgŸ}†ììlXZZ"""âšËG*++QRR777öø<—+//‡L&ƒ¿¿?ÜÝÝoXËÍÖy5o½õ<<<°~ýú[®›ˆˆˆˆŒÆIvf) >üªß³µµí¶ÌÂÝÝ]n–¹¹ù5Ïs)777¸¹¹ÝÒ9.åëëÛmhOkéiDDDD4øqfÑeggC—àúµSDDDDdØ™AD4D >Üh:®W‹1ÕIDDDDÆDDDDDDD4 0Ì """"""¢…a ( 3ˆˆˆˆˆˆˆh@a˜ADDDDDDD à """""""PfÑ€bn興†Šß~û ¿ýö›¡Ë¸*[Ûáhn>¦á–~ßÔÔÖÖ!hlÌÐseú“œœl興ˆˆHOL´Z­ÖÐE vÇŽCii©¡Ë¸ªâb5>þ8þs$bbœoéYY5øê«\<ûl,‚‚ô\¡~øûûcüøñ†.ƒˆˆˆˆzï$à "¢!L«Õâî»?†­­6mz²WÇZ¸ð 46¶`ÇŽgabb¢§ ‰ˆˆˆˆ®p’33ˆˆ†°Ÿ>‹³gK±rå=½>ÖÊ•÷àìÙRüüóY=TFDDDDtm 3ˆˆ†¨––v¼óÎN$&ŽEl¬O¯ëƒÄıxçhii×C…DDDDDWÇ0ƒˆhˆZ»ö*+ëñòËsõvÌ—_ž‹ÊÊz¬]{HoÇ$""""ºà "¢!¨ªªŸ|²Ë–Mƒ§§£ÞŽëééˆe˦á“Oö¡ªª^oÇ%""""ºà "¢!èÃ÷ÀÆÆO>9]ïÇ~â‰i°±±Ä‡îÑû±‰ˆˆˆˆ†DDCNAß/¿<¶¶–z?¾^~y.¾ÿþ z?>à "¢!æ­·v ,Ì Žë³s$&ŽEX˜'Þ|óç>; ] 3ˆˆ†´´|ìÛ—…ücLMMúì¿þõNXY™¬kk üå/s±iÓqääH V Üš•ˆhKJZƒÚÚ&üòËs011ìÖ¨Z­wÜñÿÁÕÕë×?nÐZˆˆˆˆh@ãÖ¬DDƒÕÁƒy8x0¯½vÁƒ 011Ák¯Ýƒýûsqð`ž¡Ë!"""¢ŒDDƒF£Åí·¿??|ûí#†.§›‡Z‹²²jìÛ·¦¦†YˆˆˆˆhÀagÑ`´yó ÈðÊ+wº”+¼òÊ]((aóæ†.…ˆˆˆˆ(†DDƒLSS+V¯Þ…ääx„…yºœ+„…y 99«WïBSS«¡Ë!"""¢ˆaÑ ³fͨÕMX¾|Ž¡K¹¦åËç@­n—_4t)DDDD41Ì "D”J5¾øâw<õÔ ˆÅ†.çšÄb<ùät|þù館¬7t9DDDD4À0Ì "D>ø`7lðØcS ]Ê =ñÄTØÚZáý÷wº""""`f r¤¤ÅK/ÝKC—sC66–øË_æ"%å( ä†.‡ˆˆˆˆ†DDƒÄÛoïDX˜'Ǻ”KL‹°0O¼ýöNC—BDDDDà "¢A =ý<öîÍÄÊ•÷ÀÔÔÄÐåô˜©© V®¼{÷f"=ý¼¡Ë!"""¢ÂD«Õj ]Ý:­V‹;ïüŽŽ6øá‡' ]Î-IJZƒÚÚ&üòËs018a ÄIvf p۶ƹsåX¹òC—rËV®¼eøé§3†.…ˆˆˆˆ†DDXKK;Þ}÷$&ŽET”·¡Ë¹eQQÞHL‹wÞÙ‰––vC—CDDDDFŽaѶví!TU5àå—ï0t)½ö—¿ÌEUUÖ®=dèRˆˆˆˆÈÈ1Ì "*+ë¯x®¦¦Ÿ|ò?<ñÄTxx8 *ýòðpÄOLÅ'Ÿü55 W|ÿj¯ M 3ˆˆ€±c_Dzeߣºúâ›ü>Ú++s<ùätV¦_O>9VVæøè£}ÂsÕÕ X¶ì{Œûº+#""""cÂ0ƒˆÈÈ©ThiiÇöí§1fÌëøøã}ÈË“áÛoÓ°|ùØÛ[ºD½±··Âòåsðí·iÈË“áã÷a̘ױ}ûi´´´C¥j4t‰DDDDd¸5+‘‘KO?ùó?›™™B$²X쀽{WÀÒÒÌ€Õé_kkfÍzJ¥uuMèèÐßÛ²åiL˜bÀꈈˆˆÈpkV""c—›[só‹EG‡*U# å˜3ç}9RhÀêôëÈ‘BÌ™ó> åP©»ææfÈÍ­0`uDDDDd,f¹ü|9LLº?§Õj¡ÑhQP À‚ŸaþüO‘Ÿ/3LzŸ/ÃüùŸbÁ‚ÏPP €F£Ååƒ&&º×‚ˆˆˆˆˆa‘‘ËÈ(G[[ÇU¿×Õ¹ž~_~y°?ËÒ«/¿<ˆôôóЭãRmmÈÈ(ïϲˆˆˆˆÈH1Ì "2ryyÒë~ßÄÄÏ?? ï½·°Ÿ*Ò¿÷Þ[ˆçŸŸ“Ë[P.s£×‚ˆˆˆˆ††DDFL&«EccëU¿gbbSS¼ûî¼øâ7 Œ™‰‰ ^|ñ¼ûš\óZ[!“ÕösuDDDDdlf±œœ«w"˜ššÂ ß|óxà‰ý\Ußyà‰øæ›ÿƒ……LM¯þWÔµ^"""":f±Ü\),,ºo½jnn;;+lÙò4fÍŠ5Pe}gÖ¬XlÙò4ì쬺íâfÈÍe˜ADDD4Ô1Ì "2bùù2h4wõ077ƒ»»vízqq¬¬oÅÅ`×®çáîîÐ-ÐÐh´z×""""Ò†DDF,#£\ØÝÃÜÜ aaîøõ×,6pe}/8XŒ_}aaîB ÑÑ¡áŽ&DDDDÄ0ƒˆÈXi4Zœ?¯˜™™b„üüó³pww0peýÇÝÝ?ÿü,&L™™î¯¬óçݺUˆˆˆˆhèa˜ADd¤JK«ÐÚÚ¸ï¾ÑX·î1ØÙY¸ªþggg…uëÃ}÷´¶¶£´´ÊÀU‘!™º"¢þ"—Ë‘““cè2zìèQ `Μ`ÜwŸ7Ní—óN:µOŽ›’’‚%K–ôê"ÑØÙBTÔD47該[“œœŒõë×´"""¢¡Ša 9111†.¡GŽ­Å+¯ÌÁÂ…£ûå|r¹•••}~žM›6õê÷ÓÒdhjz·ßî«§Šn^oC""""ê†D4äˆÅcxæ#L‡XÜó14M¿„‰‰‰½ü}@©T÷ëks¹íÛ·ìÜDDDDÄ™DDFËoÖ_"""¢¡a ( 3ˆˆˆˆˆˆˆh@a˜ADDDDDDD à """""""Pf]CMM V¯^mè2†¬ÂÂB|ûí·z?nCCÞyç½—ˆˆˆˆúà "¢k¨­­ÅÚµk{}œG}ÅÅÅz¨hhÉÍÍÅš5kô~\µZ•+Wêý¸DDDDÔf]C`` òòòz}œÝ»w£¶¶VÀ0ƒˆèšär9î¾ûnáñ0bÄXYY!22?ýô“ð½W_}b±VVV˜6mÊËË‹-‚B¡À¢E‹šš …BÙ³gã»ï¾ƒ““²³³qîÜ9Lš4 ÖÖÖGJJŠpÜ~ø¡¡¡077‡——Þ{ï=@UUfΜ‰?üÞÞÞ‹Åøæ›o°bÅ ˆÅbxyyaÆ ýôJõFƒgžy"‘îîîøç?ÿ @?×ÿõ×_# vvvxøá‡¡Ñhúã’ˆˆˆˆHf]CSSöïß@lÜsÏ=xþùçQWW‡U«V!99yyyسgþóŸÿ ==•••‰Dxûí·ÿþ÷¿áææ†ÿû߈Gkk+RSS±}ûvìÚµ ^^^˜={6’““Q[[‹5kÖàÉ'ŸÄ‘#G V«ñðÃãý÷ßGCC6n܈¿üå/P*•hkkÃþýû¡R© ‘HðÆoà‘GX,†B¡À /¼€×^{Í/Ÿ^œû,jjj®y,SSSx{{JJJ››‹ÀÀ@á¶aèT*XYYáÔ©S˜={6BBBpß}÷]±ÂÎÎ`bb+++˜›› ƒ!€ØØXH¥Ráñ­^¿™™Äb±ðx°¼^DDDDCà "¢‰D¨¬¬ìö\UU¡ÕjñÁ ªª ›7oFss3æÏŸÍc]úÆY$!!!%%%Ýn_|ñ¶oߎW^y¯¾ú*òóóqâÄ ØÚÚöÙ5£Ë_s…BUCDDDDÆ‚aQÜ~ûíØ·oŠŠŠèfhlÙ²3gÎĪU«0uêT˜››cܸqxðÁQQQÑ£ãΜ9©©©ÈÉÉ466"..Û¶mCyy9¢££‘333¤§§£®®®Ï®Ñ•””`çÎt[ªþûßÿÆÜ¹soú8Û·oGff¦¾Ë#""""a˜ADÔ#GŽÄòåˇY³f!&& ,Àœ9sð§?ý eee>|8fΜ‰… âÍ7ß~×ÝÝO?ý4N:uÅqÃÂÂðæ›o">>3gÎDxx8bcc±hÑ"Ì›7999˜2e n¿ýv¼ùæ›ÆòåËûóÒ *>>/¼ð¦L™‚ððpà±Ç»éã<÷Üsؾ}»^kËËsÀªU¿â?ÿIÅž=™8uªR© mmz=]ÉD«Õj ]QËåÈÉÉÁÔ©S{ôó555puuž+))A~~>»ÍÐhiiÁñãÇÑÜÜŒ#FÀÝÝ]øžR©Ä™3g0vìX8;;_õ\‰YYYðññALLŒð|]]Ž?www >eee(**”)Snòêoìf_Ÿ›•’’‚%K–àfÿÚinnFzz:1zôè>©íf%'/ÅéÓNðððEuuªªê»}_,v€Xìoo'¸¹éîÅbxy9ÂÝ]//G¸º:ÀÜœŸ)Ý‚“憮€ˆÈX™ššv 2C:/gee…„„„«G,cÖ¬Y×=—|||®x^$aæÌ™Âc???øùùõ úÁÃÚÚÓ¦M3tÝh4€Zmº:9\\ì0qb||œáææk˜››B­nLV ‰¤gÎ\€LV‡ÚÚFᦦ&‹àî.‚§§#<>Nððp„——¼¼áá¡{ÎÛÛ "‘ž^i"""¢î¸5+ }½õè@×—¯ÏÁƒ¹X±â{dfnASS®Þßß–,Y‰Äß¿~~.Wý…Býûs°.ʃJÕ??L›‰iÓ¢0qb(¬oê¼ÍÍmÈÏ— CGóò¤ÈÏ—£¬¬`kk‰ðp]G×r•ðpOx{;õúš»®©kx©DrqiË¥HCÃÅá¥Öðöv‚3||œáåågøúºtÎõp‚¥%?W!""¢›v’a  3®O߯ÏÁƒ¹xûíÈÉ‘¢£Chn.Duõ½ßÄÉ“Îhk3Ô)Xºt"n¿=ææ¦WýùŽ Ξ-Åï¿ëÂŒŒ2˜šš`̘ L›‰„„p îwË[°Ö×· ?_7‹Cw¯ ;äòZ€Hdðp/DFz^²dÅ«O‚ªÕÍJU(/¯éœá¡ûº¢¢‰îqkk;ÀÄÄîîðöv‚··3¼½àëëÜí±»»ÃÝ&DDD4ä1Ì ¢¡ƒaÆõéãõ¹Z€akk‰iÓ"1v¬9üA †¿v–,Yxà—±n]:ʃX,BRÒx$'ÇÃ××ùº¿_UUƒó:o¹P(Ôpv¶CBB8n»-S¦DÀÇçúÇè •ª±3à#7·¢sÙŠ55 ÌÛèÚ]¥kÙŠ““m¯Ï}=]»³TTt…Õ¨¨P !ˆB¡þbiiÞ¹#‹#|}]ºuxøøè›íp!""¢a  3®ïV_Ÿë3±Ø’’‚%K– š0Ö¯_(-­BJÊQlØp ••õ˜:5<03gFÃÌìêÝ—ÊÉ‘ ÁÆñãÅhjjEh¨;"0uj&N …•ÞêW*ÕÂÎ*ºÝUdÈÏ—¢®®àááˆÈHODG{#2Ò ‘‘ºå*—nAÛ—ÚÚ: •ª ‘¨ ‘èB‰¤F;$’¨ÕÍÂÏ‹D6BW‡.ìÐÍìðóÓ-gñòrâ-DDDƒ à ":ºÞ¬‹ÅbC—b””J%Ü0ÌèèÐ`ãÆøúëƒ((_7À¸TW˜‘˜˜¨­µ‚­m,,4½ª»½Ýææ½;Ƶ¨Õ–°±i¿âø›7oFrr²ftikëÀÞ½™X·.©©ù‹EHNÖukô´Ó¢¥¥ÇáàÁ<:”‡¬¬ ˜››"..·ÝŽ©S#1l˜oB’›UQ¡B~¾ ÙÙ²yy2aûØÀ@7!àˆˆÐ…þþ®·¼<¦7ÔêfTT¨PVV-,g‘Hj„ð£¢B% ,ÕíÐ"‚¯ïÅå+—vvxy閳рÁ0ƒˆ†ŽÚÚZ”——º £sÅsåøî»4üïÙP(êèþê°³³ÄÔ©×0.•––†O>ù JJDJíP _ßú[®µ±ÑgθcÔ(%lmÛnù8×rú´;´ZDGW|ÞÊ IDATÁƦ½Û÷&OžŒgžyæš¿{áBÖ¯OÇÆÇQ]Ý€iÓ"±té̘ѳn.••õ8t(©©ù8p ry-œœl‘ [Ž’~Í!¤úÐÞ®AII%rr*›+EN޹¹Rag•®¡£QQÞ‡"#½áævýÿ?ô5­V …B-„R©.øèúZ"Ñ-gébeeÞt\Rêë«»÷ós·7»;ˆˆˆŒà ""º’\^‡ Ža×® ääH»mÉéà`ƒ¹s‡cåÊ{àì|s³NŸ¾€çžKBQ‡7Þ¸ ŽíU_}u~¸™™oöI§‚\^‹Gù øâ‹1mZäM£­­{ö\ìÖððaÉ’x$%ÅßÒ.#¹¹R:”C‡òž~MM­cÊ”HÜv[8&M ƒ½½þ–¤\Kcc«ÐÅ‘›+En® ¹¹¨¬Ô…SnnöˆŒôFT”nðhT”7ÂÃ=akkÙçµõTkk{gG‡ªs@©nHi×r–ÒÒ*47ëB233Sxz:ÂÏOnøú:wÞ3ì ""2†DDÔÖ6bÛ¶ÓØ¹3™™eÂìÝ.ZØØXbþü1xè¡ÉˆŠòºéã·µuàƒvãóÏÇĉaøðÃÅzÙ.téÒ/akk‰/¿|¨×Ǻ–––v¼øâFlÛvûÛ]xòÉi·|¬’’J¬_7CMM#¦OÂÒ¥0}zÔ-…1--í8q¢X˜·‘]SSŒ€„„p$$„côè€~}“­Tª…޼<²³%ÈÏ—£©©¦¦&ð÷wEt´®‹#2Ò ÑÑÞ të“0J”J5Êʪ!‘Ô ¬¬ååÕ(+«FYÙõÃŽ®ÀƒaQŸ`˜AD4ÕÖ6bË–ÓØ½ûœ;WÚÚFºÙvvVhiiG{»·ßÅ‹Çcúô¨[~#–]gžY’’J¼öÚ=xðÁ‰zÙj³µµ‘‘ÛoÞ‡%K&ôúx7²fͼýöÜwßh¼÷Þ¢^ ÃlkëÀ®]ç°n]:.€——#’’⑜<^^·òTUÕ#-­‡å#--eeÕ°³³ÂøñÁ˜-ú'N¬ÔË6¦=qà@.žxâ;„„ˆñÍ7ÿ§—7Û%%•X·.›6×K·ÆåÇNMÍGZZÒÒ PSÓWW{Lž†„„pLž×^_íjii‚K—¬Èåu''[aàhT”bb|á ãYªr#ÃŽ‹GOÃŽ®­hv]aÑ`ÓÖÖ'ŠñóÏgqüøy””\|ÃdaagŒ„  1Ξ-Åþý9°±±À=÷ŒÂ¢EãØë xî¹deIðÒKsñøãSõ¾ãÅ[oíÀÞ½™8tè¯z=î)ñ§?}úú¬]û0FÐËquÝÝ…ðövBRÒx$%õ®[£‹F£EV–D7Ž+BSS+Ý„pcÒ¤0¸¸Øéájz§¦¦ÙÙRäçK‘-ENŽnw•††˜šš»ªDEéfrDG{ÃÏÏ¥ß;NôaÑ-a˜AD4©TÈήÀÑ£çqäH!òóe¨ªj€V«…‰ `cc…°0w$$„aþü±hiiÃÖ­§°uë)TW7`„,Z4wÝ5ÖÖ½®G£ÑbíÚCøç?AD„'>þ8áážz¸Ò+͘ñ&N Å›oÞ×'Ç¿žººf<õÔwHK+À{ï-‚côzüâb%Ö¯?*tkL¥K'öj¹ÏåZ[ÛqòdIg¸‘³gË Õjí-ÌÛ?>Øhº º–ªdeI“£ 8rr¤¸p¡ Z­ÖˆˆðBt´¢£}í…ˆ/88Xºô^¹4ì¸tvGOÃŽ®]YvÑ Ã0ƒˆh P«›QT¤DQ‘ÙÙ8y²¹¹2ÔÖ6 ?cbbwwDG{cÖ¬XÜu׸ºÚC¡PcûöÓØ¸ñrr¤ tCbâX,\8V¯Ë3JK«ðüó?àäÉ<ûìíxæ™ÛanÞ7Cåò:Œýü÷¿bæÌè>9ÇtthðÏþ‚Ï?ÿO<1¯¼r·Þ‡X¶¶¶ ;¡>\±X„ÄÄ1HNŽ×ë’@Ð=ZØ9o£ùù2XX˜aìØ ÎÎŒá×gÿ›ÞªúúäåI‘]!ÌäÈÉ©€ZÝ øù¹tvqx!*Ê11ÞpÓ{§¡\v\ìî¸vØáïïW¸Âß_wóðøJˆˆˆn à ""c¡V7£¼¼çÏ+QRR‰óç()©Da¡UU ÐùÌnhbT”&M Ç´i‘=:@è®èz¼iÓq8;;K½.#¹ÜúõéxýõŸàëë‚O>Y‚ØX½ŸãR›7ŸÀ‹/nBvöÛßêsëÖSX¾|&LÅš5‚HÔ7¥¥Uظñ8RRŽA¡¨Ã¤I¡HJŠÇw‡¥å­#½¹¼©©HMÍGjj>d²Z88Xc„P$$è–¥ôU×>”–V!7W*YY\¸P…Ž ll,é‰èh!䈎ö‚£ãÍm5<\vtÝ.\¨BYYµ°í²µµ…n¸^öµ[¯Þõ†DDý¡¡¡J¥ EÊËkPQ¡BEE $ÊË«!‘¨„¡œff¦pv¶…¥¥9ššÚ R5B«ÕÂÃC„qãB0~|ÆFd¤×§N•`ãÆãرãÔ×7cêÔ$&ŽÅ¬Y±zYFr9¹¼/¾¸¿ÿžƒ'ŸœŽ_œÓ'o¬/÷ÔSßC©TcÓ¦e}~®žøã2<ôÐZ89Ùà¿ÿ}´O‡jvthðûï9HI9Šß~ˆ½½5Ç")i<"#o~ÛÜž*(#--©©8r¤uuMððuÕí”âéiÜ»45µ"?_Žìl ²³¥ÈÍ­@VVT*Ýn>>>ΈŠÒí¨£ :‚ƒÝ®E_4-¤R•l\¸P… *QZZ… ªPYY/ü¬‡‡èA‡ë€Øu†ˆˆ†DD7«¶¶*UêêšP[Û„ÚÚÆÎ¯›Q[Û…BÊJ5ª«ë¡P¨¡Tª…Vo@÷ ¨3||œ!;@«[ “©PX¨@}} ¬­-0l˜/ââ0fLF¸æE‰¤›7ŸÀÖ­§PX¨@T”æÏƒùóãúôMÆŽgñ׿þ‘È}”„qã‚ûì\—Òh´9r%|*žzjF¿œ³'¤R|ðkÈåµøÏ铘ËÉ嵨¸ñ6l8†’’JÄÅbÉ’xÜ}÷HØÙYõÙy;:4øã2¤¥ 55'O– ¥¥!!î¸í6]¸1iR(D"›>«AŸ¤Rrr..UÉÍ•¢°PŽöv ,-Íá)쪣<êêjoè²û\CC‹l\¸P…ÒÒj”–V _·¶¶¬¬Ìà†€Wøù¹\xËÜ""TfQwµµ¨­mB]]3jk›ÐØØ"¼ïšÏÐÜ܆––6hµŸkjjEkk;4-ÔêæëžÃÖÖò¦ÑÙØXêýÓþÖÖv45µ¢­­­hoï@}} 4 ÔêhµZ¡SB¥ÒÝ«ÕMÐh®ü#Ó NN¶‰làäd{¸ºÚÃÃCWW{¸¹ÙÃÝ]K(•u(.®ÄÙ³¥øã2ax¡¿¿+FÀ˜15*±±>×}Ôêfüúk¶n=…Ç àìl×¹Œd,†÷Óëku¹ÚÚF¼òÊVlÛvK–ÄcåÊy°·ï»7Η;w®³g€}ûV &¦o—³Ü¬††,[ö=ÊÃûï/Âüùú z-Z­iiHI9Š]»ÎÁÒÒ ÷Þ;ÉÉñ9Ò¿ÏÏßÔÔŠ'Š…y™™å011Áðá¾BçÆØ±Aj©B[[òòº¶‹­@v¶ÙÙ¡[ÁÝÝ¡s‡°mlh¨Ç í⸜V«…LV{IÐq1ô(+«‚B¡~ÖÝÝþþº°#(È AAbøûë¾6†Ýsˆˆh@b˜A4ÔÔ4 ¬¬*Èdu¨ªRC¡PC.¯CUU=ŠºÎî‚«‡"‘5LLLaee&|Â&ÙÀÄÄ––æ°±Ñ-_ptÔ=geeŽÖÖèë—®p}sp°†™™)ìì¬`nnÚ²è®ÇÊÊVV°¶¶®Ñ vvV°¶¶‚ ‘ÈæªŸ:67·!+K‚ŒŒ2œ=[†?þ(Ca¡nnö1Â#Fø ÷îî7¬·­­æaË–“س'3fDaáÂqzÝåâzÊÃsÏý­V‹÷ß_Œ3¢úüœ—ûôÓßðÕWqöìëF¹g×`Ð/¾Øçž»+VÌé×:UªFlÚt))G‘Ÿ/Ct´7–,‰Çüùcú­SB¥jDZZ°,¥¸X kk ŒŒ„„0LžŽaÃ|äN¥RœÝò”®™ùù2´µuÀÂÂLX¢ÒÕÁë3`:Tô©©©õŠ£¤¤%%•ÝfuˆD6 tC` kç½ÜäfôË–ˆˆÈ f  …yyºÖè¢"Ýšç®oõõ-ssS¸º:@,Öu ¸¹9÷..v‰làè¨{ƒ.YC$²éÓVõÁ¢®® ™™deI:Œr¡E]$²Áˆ~9R\ î_ß›ÛAäôé Ø²åvì8ƒªªŒ„ùóÇà®»FÀÉ©65µâ7~ÆwßÁÝwÀ»ï&öÛ¹/·`Ágðòr¿þµÄ çï©””£øë_ÄܹÃñÑGÉéJ8uªëÖ¥cçÎ?ÐÑ¡ÁwŽÀ’%ñ?>¸_–òò¤¥åãС|>\¥R ''[Lš†É“ÃpÛmá ÷[=úÖÖÖ‚923%ÈÍ­@ff23Ë… Ößß‘‘^ˆõAt´7¢£½àj”a\èèÐ@"©AII¥rWâÂ…J””T¡©©€nI^WÀä&tsºÁÇÇYï»Ñ€Â0ƒh innùså8w®yy2äçË:·èÔý£ÙÝÝÁÁîÂö{~~®÷.ðôtä?þzI&«^]xQÒÒ*€««=bb|ëƒaÃ|1b„ß-oŸYRR‰­[OaëÖS(*R"4Ô÷߇ùóÇÀÏÏEŸ—tC§N•à™gRP]Ý€wß]€yóFõëù/ÕÐЂèèWðᇋûm Go¤¥åãÏþ/BCÅX»ö‘uàô…ººfüüó¬[—ŽŒŒ2„„¸#)i<.7·þý Õj‘›+ëìÚÈGzúy44´ÀÇÇ áHHǤIa{­ôI&«‚Μœ dfJPRR F kaËXÝŸ¾ˆˆðì“A½LV+ÅÅJ””è“W Ëÿ,,Ìàëë"„º%,bºÁßߥ_‘A1Ì 2fÈqöl)Ξ-ÅéÓ›+E{»®®öˆŠòBX˜'"".Þ õiù`£Tª…°(?_†¼<ÝíÒOZcb¼1l˜/bc}ëÓë–h•ªÛ·ŸÁ–-'qúô¸¹ÙãÞ{Gcþü¸>Ÿƒq5mmøàƒÝøüóß‘Ž>Xlð¶ï}û²ðÐCkqöìë‹Æ›ÝóçxðÁ¯ÑÚÚŽï¾û3¢¢únÇ‘žÈÊ’ %å(¶l9‰¦¦6Ìž‹¤¤xL™aeííœ>]"l{æÌ´·ká‰É“u[ÀÆÇ‡ÀÁ¡o¶¼ío -ÈÍ•!;[‚ÌL‰0p´¡¡ff¦#&F×Á¡[®â3(‚}©®n¸¤›CÙxT¢¤D)Ì3155··ÅœŽà`1‚ƒuaƒ"¢Aa‘1ÑjµÈË“u®5/ÀÑ£…¨«k†­­%† óŨQþ92£GÜôRººªªzäæÊPP GnnEç½ 55 ''ÛnaQD„—^×À·´´cïÞLlÝz ¿ÿž 3Ì™3 ÷߇)S" ÖI“›+ÅÿûëQ\¬Äk¯Ýƒœh-ñ¯¼²Çaß¾†.妨Txä‘opî\9Ö¬ù¦OïÿY#—knnÃŽgñÃÇpôèyøø8#)i<-ÃýùÒÐЂôôó8|XnääHaff‚#ü„e)cǨa¢7¢ÑhQRR‰¬,]¸ÑÕõ%•ªnnöˆŽöé¶Le( í©úú¡ƒãâ%Š‹+!•ÖB«ÕÂÔÔ>>Î #8Ø­óÞÁÁnðõué—ÙCDD¤ 3ˆ ­¢B…r‘–VÐm-ùĉ¡˜4) ññÁ÷äò^ª©i@NŽräåI‘Ÿ/Gn®ÕÕºÐÂÑQZ„‡{ 2Ò áá÷ê“OD5-Ž=<‰_ý ­HHÇüùq˜3g˜Aç”h4Z¬Y³«Wï°a¾ø×¿–ÜòR™¾0yò;¸ãŽáxå•» ]ÊMkkëÀK/mÂ?žÄßÿ>>z›¡K*ðÃG±yó ÔÔ4bêÔ,Y23fDüÍ]UU=.Äáú·¸X ++sŒÔn„cÄ¿AùÆ^¥jDff9²²*„e*r´µuÀÊÊ^ˆŽöîr Åa£=ÑÔÔŠ’’Jœ?¯ì¼W÷]]KW‚ƒÝìÞ-ððñqk‰ˆ1†D†“#Åž=ç°{w&Î+‡Æ>uŒ˜Sþ ­¡¡åªårs¥Â?VE"„‡{"2Òaaƒ ¾_>‘›+Å–-§°}ûiH$56ÌóçÁ¼y£àá!êóóßÈ… UxöÙœ9s/¾xž|ršQ…heeÕ?þMlÚ´ “'‡ºœ[öùç¿ãwvâ&â­·î7ª×¸­­»wŸCJÊQ¤¦æÃÕÕ ŽÃâÅãânèòIþ¦¦@.¯…ƒƒ5âãC0y²îÏÐÈH/£è$ê —ÍΖ ;[zŰѮ`£kW??—AûzèƒZÝŒ¢"]ÈQT¤ì¼)P\\)¼®––æ ¼¸\¥k‹Ùà`±Á—ß Q 3ˆúƒF£Å±cEسçöìÉÄ… UððpĬY1˜3g&M åÞR©/i!®ìZ(j×K¸"0PŒ°0a™Hÿ£S.¯Åöígðã'‘•%sç Ï8„‡{ök-×¢ÕjñÝwGðÖ[;àïïŠýk ¢£½ ]Ö¾ÿþ^ý'dg¿=àÿ{Ùµëž~z&N Áš52Ê]ƒ$’¤¤ŦM'PQ¡ÂøñÁHNŽÇ]w0ª!•r!Ü8r¤*U#ÜÜì1qb˜nSwQ_‘Hj“#vUÊʪÀ… ݇v (މñAd¤—Á»n‚êêW áF×}q±RØ)ÌÖÖR6ºBŽ1‚‚Äpuíß»DDCà ¢¾TX¨À¦MDZm›î“øðpOÌ™‹Ù³‡aäH?~Rv(•j¡»¢û­Jص¥«80ÐUغ¯ëàjÐ7» -øå— lÙrGŽÂÎÎ wß=óçÇõû–˜7RVVåË7àèÑóX¶l:^xa¶Ñ>úaˆæ`pæL)þô§¯àééˆï¿ÿs¿tÝŠŽ ÈÆ ǰwo&ll,0þ,Z4Î ƒi¯G£Ñ"3³\7Ž+Bcc+|}…ηɓâª?44´ '§99ÒKvU‘¢©©f óÀðá~BÀí=h­ö…Bݹ\E),_).Öuv´´´Ð-a #4Ô!!î#4ÔAADJDÔK 3ˆô­²²;vœÁÆ'‘Qg,X0÷߇°0C—gpÕÕ Hj •ªP^^ƒŠ •ðµDR…¢í퀕•¹°Õž®Ë AAnpƒ³Q­‘oo×ààÁ}¡s¨r>NŸ¾€¶¶„‡{bÒ¤PLžމCàè8tvêèР¨H‰¬, 22Ê™Y!,S111APbcu[ÅÆÄè¶™îïí{:­V ‰D%„…… œ?¯»I$5Ðh´033…ŸŸ ‚ƒu݃ÁÁb„„è¡¶õà "}ÐjµHMÍÇ·ßÆo¿eÃÚÚsçGbâXÄLJ ™ùuuMÉj…€¢¢B…²²jTTÔB*UA"©Ass›ðónnöðöv†··||t÷]7£ý¤úRgΔbË–“øùç3¨ªjÀرA¸ÿþ8ÜsÏH£Ý&W"©ÁòåqøpžxbV¬˜cô;Cœ8QŒyó>Á¡CEh¨qÌnЗ®N²²$øê«‡‘nè’zäèÑóظñ8~úé àî»G")i¼Ñu]ª±±ÇŽ ÃD33Ëabb‚˜aIÊøñÁ°±±4t©ýN"©AFF9²²$B‡DRðôtº7†÷CLŒ7üý] \ñÀÔÒÒ.EEJÈQT¤Äùó ¨ÕÍ‘ÈÁÁº`#4´«›ÃÁÁîFÿg5Q?b˜AÔju36o>o¾IEqq%&M ÅâÅã1wîp£ZSÞmmP*ÕJkQU¥†\^…BÊJ5d²ZTVÖC.¯…R©ÚjÀÁÁZ)¼¼œàåå??—ÎðÂÞÞÎöe…… lß~Û¶Fq±¡¡î¸ï>Ý cþ¾V«Å† Çðü>ú(£Gº¬yÿýÝØ¸ñ8NœXièRúDkk;žþìÜùV¯^ˆE‹Æº¤««kÆöí§‘’re qÇâÅã°hÑx£ÿD_¥jÄ‘#wJ)(àqq˜4) a5*`ÈΖ¨ªªÂÌL Î+Gq±"‘ bcu]A·‹í¹¼…… éÂŽ®ŽŽòòtth`jjÒ¹ÛÊÅe+º›^^N†.Ÿˆ¨¿1Ì ºùù2üç?iøñÇ“€ Æàá‡'Í@ÇihhAee=*+ëQ]]êêTUÕC©Tw†uP*ë Tª…­K»89ÙÂÝ]±ØŽpsÓÝ»»;ÀÃC±X//ÇA·= TªÂöíg°mÛ)dfJàááˆ{ï…yóFõòŒ.R© +VlÄÁƒyxüñ©x饹*Lºûîé÷Þ[hèRúŒV«ÅêÕ»ðñÇûðüó³°bÅ£íp¸–ÌL ~øá¶l9‰¦¦VÌœää ˜:5¨vm¹¹¼©©B¸!‘ÔÀÎÎ ãÆaòäpLž†˜Ÿ!Ómw5]s823+‘Q†¬, rs¥Âv±º­b}»Íá,ᾡ´¶¶ ÝEE—­*PW×°··Bp°»°l%$äâ²¾þD4H1Ì º‡â“Oö!-­AAnø¿ÿK@bâXƒL««kFU•Z%ª« Tª…¯«ªtÁEU•îviØÙYA,v€««\]u¡„»»H(\]àå¥ .ŒmöC_R©ñóÏgñÓO§qìXD"Ì;÷݇ Îò¡ãïß77|üq2ââ ]ÒMQ©1lØkøâ‹q×]# ]NŸÛ°á^~y3æÍ…>X< »š›Ûðë¯X·.ÇŽÁÓÓ‹ÃâÅãáççbèòz¬¸X) =|¸UUõpv¶Ã„ !˜<9 aF³e­!um{î\9ÎÓ-UÉή€ZÝ ssS„†ztn«ëä6ÌgÐÞ†RYYß¹T¥k.‡néJyy5ÚÛuÝ~~. ó@x¸'BCÝ;ï=ŒrÎ ÑM`˜At#Z­¿ý–ƒO>ùNž,ÆäÉáxúééHHï“OM[ZÚ»uKTU5 ºº55¨®Ö=î )jjP]Ý€¶¶ŽnÇpp°†Xì{¸¸ØÁÅÅîîºÇ®®vpq± ûõ }_khhÁÞ½Yؾý4È…™™)fÏŽÅ}÷ÆÔ©‘*Ì‘ÉjñÒK›ðûï9xä‘Ûð׿Þ9 ?¡Û±ã,–-û™™o™Aæá±Ç¾Å°a¾X»öá}ÝÅÅJ¤¤Ã?ž€R©Æ¤IaXºtfÏŽPÿ=iµZääH…p#=½õõ-ððpDBB˜Ð¹áíÍv@÷zWv.QÑçΕ£²²àïïÎe*ºNŽþÞ:{0kkë@II%òóe(,T /O†ÂB9 Âì*OOG„…y ,Ì¡¡BÐáîî`àꉈz„aѵh4ZìÞ}}´YY˜1# Ï>; qq=Ÿ1 Ñh»…Šú+ž¯¬ÔuV46¶}ØŸ IDATv;†……Yg(a ]ç„.„ÐÝœíàæf/®®öò“\CjkëÀ¹Ø¶í4öîÍD[[¦L‰À¼y£0gÎ0ØÙYºÄ›¶yó ¬\¹Îζøè£$Œlè’nÙŠ‘—'ÎϺ”~•“#ÅÒ¥_ÂÁÁß}÷¨QÏc鉶¶üþ{Ö¯OÇþý¹‰l˜8IIñˆˆKô.ÕÞ®ÁÙ³pøp!ÒÒòqòd ZZÚ,¶4) ..v†.Õ¨ÈdµÂ€ÑsçÊ‘™)AiiÀÕÕ^˜ÁÑpº ˜.¸@£Ñ¢¬¬EEJ!àÈÏ—£ @.l}îèhÛÙÉ¡ 9""t¾¾Îné j 3ˆ.§ÑhñÓOgðÑG{qþ¼wÞ9Ï>{;¢£½@X²¡Tª¡PÔ Ë7ºæOtuPèŠF\þŸ˜³óÅ âjaD×sº%ö_Â2Xi4Z=zÛ·ŸÆÎ ®® cÇáÞ{Gãî»GØ7 ry^~y3þ÷¿,<üpþö·;üÎ cǾŋÇaùò9†.¥ßÉåµXºô+(•uøöÛGÄ|–žËk‘òÿ³wÞaM]oÿaƒLÙ(CöR+NÜÛ¢ÖQG‡­µµµŽºjk[ÛZm«ÝêOk[kEqਫ¨ì@Ø;a$!ãüþ¤"CFB œÏóä!ä&ç¾÷ž{Ï9÷{Þ÷=GïáøñûÈÎ.ÃÀX´(3føöHñ†Ö}t`b¢“Æ…±±.€)™ØX6BCâÌ™Ç((¨„‡‡5fÍòGP¬­û(Û¼NqêT46o>CCm|ÿý ê¨l“:MZZ¿ÆÙ³+1hP?e›£ª«x烸{7ÿûß«˜0ÁCÙ&É ‰„àöí4=z/ÆÉTǬYþ˜?H»¼àº#\.wï¦ãÖ-©¸‘’Ruu5øúÚË–4È¡G…Út%‰‰ùˆ— ±±l$&æC(CGG³‘Àáímgg Ú¿*§iiRŽÌ̤¦"-­lv9$&S¦²œROiØJO m¤P(=*fPT›º: 9(,ä /¯……T"?¿EEÒÏÊÊ jjj01Ñ…¥¥Q}òK½úÕ;ôe+w˜šJsNõÜ8öÞDff NŸ~ˆÐЇÈÈ(†ƒƒ)fÎôǬYþpv¶P¶y&/¯7† ,,¯½6<::=Û£ß~»‰;/!!ak¯~P‰$ظ1!!÷ñÍ7s±`A€²M’;••µ y€àà{HJ*€››%,Àœ9ƒT¢­-)©’%½u+ÙÙeÐÖÖÄ A2Ï oo›^}?¡PŒ””BÄÆ²ËF\\.ó!ˆ ­­ ww+™¸!8úÒ¥bŸ/Dzz1ÒÓ‹êCV¤žYY¥ Å`0Ô`ggWWK¸¸XÀÍÍJæÑA=9(Š b¥çÂç ‘—WÂBn¢ @ú¾Á5zQ˜›ÀÊÊ––FèÛ×ÚÚš¸};ÑÑYps³Ä† S1q¢êÌzöf 98sæBC"&† ̘ዙ3ýáïß³g|H¼…íÛÿ……!¾ûn~Îѯ¼ò+´´4±ÿëÊ6EéBðÝw—ñÃW°ví$|ðÁ$e›¤0¢£³|¡¡!Š1uª7,‚áÃU&BNNîÜIGDD*nßNCqq ´à(K(Ús‰t5B¡©©…ˆ‹Ë­9¤ÉF´´˜²$£R‘Ã..TàP4O'MM-BJJRR ‘™Y¡P &Sýú™aÀ€¾²—««%L©˜G¡PÚ3(Ý@„ììRä䔃Í.CvvrrÊ‘“S†üüJTVÖʾËbiÔ †°¶îƒ¾} aii++£ú÷F07×—%®âryøþûË8pàììLðÑGÓ1y²'MlÕ鬬Ņ ±8}:‘‘ÐÓÓÂÔ©Þ˜=ÛC‡:©Ô )-­k×CLLÞ}w,V¯ž¨r«ÒÔÕ‰àæö1>ÿ|&/ªlsº ‡GbÓ¦X°`¶oŸ£R×õ³ÔÔpöì#=zÑÑYpp0żyƒ±`ÁXX¨ÖÊ))…²|wËåÁÌLÇ;cäHi2Ñžž¶«‰$Ïl$&€Ç«‹¥ñTˆŠLà žŠG(#=½ii…HJ*@jªô/›]±XMM ¸¸H—uuµÄ€}áâÒvvÆt|F¡PšƒŠå!KPXÈAvvØl©HÑ X°Ùe(*âʾkb¢;;cØÚšÀÞÞÖÖ}`i).BAÚ!'ND᫯ÎA,&X¿~ .  ³4=¯W®$àô釸q# êê L˜àY³ü1v¬›ÊÅ£ …büòËUüôÓ¿pw·Â÷ß¿ 77+e›¥nÝJżyÿÃýûŸÂƦgç3‘7W®Äãwþ¨Q°w﫽".=9¹ÁÁ÷.—‡±cݰpaÆŽuS¹Q±X‚ØØ\ܹ“†ˆˆ4 ”4TF†ô}~~%!ÐÐ`ÀÒÒ¨‘wÅÓ¢…"g—ª«عó"þø#^^6ؾ}¼½m¶?Šb‹%¸s'¡¡páB,ªªþ[JuútŸ;x!„૯ÎcãÆ©-’¹\¶m;Ç#1l˜3vì˜{{Õw7?~±uële›ÒmIO/Æ¢EûÀbiàèÑwšõ`9p cƸ©äƒ~NNŽ»ààû(,ä  ?-Š©S½UÚ[¥¦F€»w3qûv*""Ò””555x{ÛÔ{n¸`ðà~*}…X,AFF1bcsea*ññy2ÃÕÕR&nxyÙÀÝÝJå<»;••µ²0•#9¹5SS½z‘î®}áîn W×¾=~™r …Ò*fPÚN]™™%2¡"=½¸þ}ª«CC8:šÁÙYº$Wÿþæpq±€rÖ ?sæ¶l …P(ƦMÓ°`A€Ê$ë B…ÐÐG8þ1Š‹«àãc‹  ùª„‹éD`óæSxûíÑøì³ &ÛOžŒÂ_œ|úé‹xé¥A]m¢R(.®‚Ÿßg8xp)ÆwW¶9Ýš¢".-Ú‡²²j9ò6ÜÝÿ ;zðà ‚‚~† îÜùXeÛ?±X‚°°9‰kס­­‰—^„… ‡ÀÃÃZÙæ)œòòܹ“ŽÛ·Ó‘ŠÌÌhjj`Ð Ù2°¾¾ö*íÉ¥H$R/pü¢Ÿ‹êj©À1`@_x{Ûʼ8ÜÝ­T.‡QO ¸¸ ))HN.yt$'¢¦FC ¦pw·‚››Uý_KØÚÒ|J†Š”¦”•U7*„‹†M †lmáèhgg 8:šËÞ›švÙñÂBÖ¯?†7’±`A6mšcc]e›Ei# y }„3g"7·..}䇙3ýЯŸ™²Í“YY¥3æ"¨©©áÏ?ßÄ„ ÒÕt23Kðá‡'pçN-Š?žÞ«Â¢NœˆÂºuǰU.afªNUo¾ùbbØøý÷70b„3**j0vì·(*ªƒlÙ2K—ŽR¶© §¤¤ ÇK½522Šáím‹E‹äß®0 ‰„   ÖÖ=/_K~~¥,™hDD* 9ÐÕeaèPG™ç†››%}ˆë Á“'%²ð”¸8©'GUL¦:œ-àím éËÃÚ†¨(B²³Ë˜˜¤¤|$% 11ÙÙe „@__ ®®–pwÿOàpuµRÙpU EÅ bFo¦!199ÉÉR;11ååR7=]]V½Pa&-œœ¤ÂEwv©>û,&&zøñÇ<¸Ÿ²Mê5p¹|"¡aûc÷33KpúôCœ=ûiiE°µ5ÆÌ™þ òk4Ó¬*H$AA?#&† ‘H C ººZ¸ti NŠÆ/¿\ƒ““9¾ùfT¥dÛʇQTÄAHÈ{Ê6¥Ç бrå\¸‹Ÿ~ZˆˆˆHƒH$ÍMÄbiàÆ*nÒ„Ü»—‰£Gïâüù@P^~y† yþÆaaÉX¸pþùg üüìm®BÉÈ(Æ­[i¸}; ·o§£¢¢ÆÆº>ÜY湡JB±² „àɓҧ<8¤¹\©Àááa ??;x{ÛÂ××NNæ*½Qw¦¦F€ää™È‘˜X€¤¤|TUñ¡¦¦{{¸¹YÂÍM*pxxXÃÎÎDe½Û(” 3zB¡™™%²F»ÁýŽÍ.!ºº,¸¸XÀÍÍJ–HÉÑÑVV=Ë…¿°ƒuëŽ!,,o½ˆ§Òxá.$:: 3fü„;çcá€6ý&?¿gÎ~üq ¢Þ]…DB°k×5ìØqb1Á¨QüN‹ß/-­Æùó1 }ˆžÀÐPS§zcæL êØ+f©ž<)Á˜1ß ®NÜdƒÁÀâÅøúë¹J°¬{Ÿ‡‰wâÊ•uðôTý|òæÁƒ'˜={ÄbI“m †>ý4Ë–*Á²îAl,ÁÁ÷pêT4x‰DÒªÑÀåËkáåeÓ–õ ö칎mÛÎ7 /i0Œõ0c†¦NõF@€c¯0žfóæS¸{7W¯®W¶)=šÔÔB\º3g!9¹êêj‹  ¸»[ãŸVÓp“z¤‰?·´˜oäi44Ô¡££‰Ã‡ß¢I§ë!„ 9¹·o§!""wïf ªŠ ™°1b„s³ásçÎ=Æ;ïüBˆ,'ÉÊ•ðÁ“zåªNA$’ -­çȼ8RR !Šah¨__[øù5xpض¸rÍæÍ§pèЙ7¡º:}úèâ‹/fbæLÿ®<¤^—Ë“ypÄÅå">>ééE‰$Ð×ׂ»{cgg‹Ç ´þ(½*f´•˜6ÞzëOrd³5¡¡ïã…š_«¾a­ñ‡³eÂEbb~ýC‹.üýíáëk{øùÙ),^NàryX»ö.^ŒÅûïÇÚµ“éÀ¦ áryX³&—.Å¢­­“©ŽU«¤ƒPŠÔ£eôèod’L&B¡66Æ òÃäÉ^ðó³S餂meäÈí˜4É›7ÏP¶)*C^^.]ŠÃùóñàAi˜IÃûæÍ3ðî»c•ha÷á»ï.á»ï.·ùû êêjؽûê)Ø "‘±±lY¾2!ˆàà`*K&:l˜LMõ°jÕœ>ý°‘XÎ`0àãcƒ}û^§„Ï"!!OžòèQ23K@Aß¾†Oåß°…ŸŸ ´1yòwˆÍmTŽÔ3€`ðàþؾ}ÜÜ,•s@½@„¤¤|™¸‘ } "0™ê2ÃÃÃ^^6pw—&¥õGé438rss[úJcccCÃÆê4!{÷†aÛ¶ó ü1™êxûíÑøè£é¤q¶·n¥!22‘‘HO/‡S MM xzZË„ {³Ö>ÌÆÛo„X,Á/¿,ÆðáN­~ÿÖ­[øù矻È:Õ‡ËÕDllÇ\¨œÌq󿦷ÿüóϸuëVGMë1ܾýßò¢ºº"˜šÖÂØ˜]]Q»Ê1bV®\)o» ¹¹xá…/püørŒá¢lsº-óæÍëðo…B**´QR¢…ÊJ‘ hþþÅÐÑÊËÄnÍñãÇ›ý\"!ðñùeeÕ-þVCƒQ¿T«ô¼Bd³žË– Áܹ^ò7Xh_ "DEeáÖ-i¾˜6Äb‚ú"?¿\.¯Éo™Lu0™øñÇ#Úßwœ•+WbĈàrùˆ}:Áhòó+¡¦¦{{äæV´n% ]àÕWG`ãÆ)²üm ]y(½èêê#=½¨‘ÇÓ‰Fûõ3EVVY»ë¯3ý ¥)-õ7¹ÑTÌ(**BRRÌÌzW hII ÜÜÜ`aañÔgUX±â0nßNkvåþýÍñæ›#pÿþ\¿ž„šÜܬàêj)sáóô´†¦¦|³K÷ÂFŽtÆO?-jS¢µ£GbÑ¢E˜;wnX¨Úðù¸y³,–¼¼\Àb1ÁãÕËåÏA ¢¦FÐjmiÑ}uÑ¢E8zô¨Ê×Un®ÊÊ´a`P+«°Xí0 ÁÂ… qäÈ9[Ø}8|8Ÿ}Ф¤¯h»Ù Ò½wÄb5TTh#/OêêePSS]gÍM“? Ÿ/„@ De%|¾\.<ÞïQ}[ȇ@ DmmΞ}—>˜6Í#F8tÑõ š_5PUÅÇÝ»¸x1ÁÁ÷[,ƒÁPƒDBðòËCðÕW³¡­­Iûû‚#GŽ`áÂ…Ín/)©ÂãÇ9¸z5‡Ýyny áV[¶aÞ¼póf8ôºçˆ®¢µû rrÊ›‹ðð9ùÜòž­¿†Cz_u޶ô7¹ÕâhÑãw-ãöÌÿÉxï½C¨®´¸„bff1vAƒúá“O^ĤIž03£ ë:K]›6Dpð=¬Y3|0©Ýî÷T • ƒÅ«W[üóùBp8<ðxuDõƒÿ:­×›ª?œÒ¤vòXÅeÑ¢Er°¦{ž‚áèÑZ{éB¡b±D¥—mhÏZCK‹ --f»C?—,‘zd¸¹¹uØ>UåÙñÕÓèëkaƒP(Æ×_ÿƒ½{আV >ø`Þ|sTZ¨ÚTbéÒÈÈ(ÆŸ¾Iׯî4 þŒhÞ—æèíËѶ±X‚ˆˆ¬_?EÙ¦ôJ¤®ü½3é,Eù\¸צ%«E"1ØìrL™ò=¦M³~î÷)'.. ÔÕ=¿^&Ÿãâò—‡èèJ|ùå\ºš™éhý™š¾ŒcÇž`âÄjZ”3ž"'§‹ÿ…ääBBž›ìP"!¸t)žŠrâÎt¼óÎAëáÂ…п?uQ¤Pz fƒËå#0ÐUÙ¦P(”.$+«™™Åmþ~C‚ÐÐÐXX¼…òòš6…¡RÚÇ;iM„ÕÕPWg@$ARŸ§U__ vv&pq±@¿~f(+ËÇØ±¾ÐÔ¤â¨2éhýmÙ² ïÒú£ô¨˜QϹsiøû[̧, IDATï3íúDBpï^¦ÜÜÈ{3¿þŽ­[ÏbÊo|ÿýËt l ¥—žkë>pr2W¶) ¥ ¹v-±Õíêê hi1¡§Ç‹Å„ŽŽ&ŒŒ´“§ÜŠãÀbÑ!­¼‰$HN.”ýß§ÌàìlSôëgVÿ×T–8²°°0¸¹Y5ùœÒut¦þÖ¯Ÿ{{]Z”C¯où¾øâ,þþ»õΔÁ õF¹Äb D"1ÂÓ1c†¯¢MUIêêDX»öBCbÓ¦iX¾|Ìsã9)ŠêžŒÑ£©W…ÒÛ8Ї/“ zzZÐÒbBWWzzZ²„„Ï"I߉µkOt±Åª@ į¿¾Ž~ýLáà`J'˜z´þ(½‰^/f°Xøê«Ù˜0Áýû;ÃÀ ,‘!Ÿ/DUµµÿ½¯©€Ç«CMMª«ù(+«~橨¨Á’% 99‡/C`àe›D¡P”@ee-?fãí·Ç(Û …ÒÅøúÚ)ÛÊ3èê²-ƒKéYÐú£ô&š—»ÛAEE¾ýö[yØ¢tX, éÀÞÞ¤~yU;Œé‚I“<ä‡Å‹‡âí·Gcõê‰øøã騾}~ýõu¼üòe›Þãxò¤Ó§ÿ„ÂBΜYÕk…Œ3gÎàþýû ¹jjj°mÛ6¹–©,ÒÓÓñçŸÊ¥¬¼¼<|ýõ׈—KyÏC•êAQDD¤FŽtV²%ª‡<ïEÃf³QRRÒì6Uºº[{ÖÐ=‹*s kî…ªª*|ýõ×MÞË Z'í/Gõ_ýµSe´þº‚–Ú³gi­íTµzRu:-fp8üþûï²ÿ—.]Š'Ožt¶Ø&(ª\J×™iÓ~„±±Ο_ú*Û$¥‚;wî4¹äAUU>ýôS¹–©,’““±wï^¹”õꫯâñãÇÐÐèÇ4UªEž__»v/‡Iy>ò¼wIYYpæLó¹«Té>êníYC?ô,ªtή¹8¶lÙÒä½¼ uÒþräQOž<ÁÏ?ÿÜ©2Z]AKíÙ³´ÖvªZ=©:3’’"ûÿÒ¥Kàp8-¶ Š*—Òµ;v/¿ü?ŒáŒ÷è²Oõ<{QGNNV¯^ WWšŸ¡»ž‚Ñ£{§wEÊo¼ÒÒRe›Ñã í…B¡´Úvª3ŠŠŠ0cÆ ÀüùóQ\\Œùóç#""‡áÇCKK ...8zô( ¸¸“&MÂ_ý###$&&âï¿ÿ†““444`ii‰;v´XnXX|||Àb±àêê*›Íi®\Šò!„`ÇŽ‹X³æo¼óÎìÛ÷´´˜Ê6«Å볬¬ ãÇÇ‘#Gàèè]]]¼þúë‹¥Ë\]½zÐÔÔ„¿¿?¢¢¢de¶tm@pp0 ­­™3gʺ§ï£çíûܹsptt„ŽŽ–,Y‚õë×ãÂ… -ão¿ý{{{èêêbÉ’%4¬ÇÕÃH$X¹r% `nnŽíÛ·øï|}ÿý÷°²²‚™™þøã¬[·fff°´´Dpp0`É’%ÈÉÉÁ«¯¾Š . ++ cÆ4ÎÓ0þ|Ü»w¯S×@s¨J=È›´´"äåUôÚP³®@÷lÞ¼fff`±X3f rssÛ´­¥v¶Ý»wƒ‚¡C‡>÷XTå>RD{¶`Á„††ºPûúúâÔ©S€‚‚øùù¡¢¢¢Å~¨%Tåœò»Z¯¶FkcƒÞÜŸÈ«NZ*çY:[„¬]»«W¯!@ëí_sÐúk\‹µÖžµÔ÷<Ûv¶„*Õ“JCž¡°°Ü¸qãÙ[äÉ“'DWW—BHEE±´´$7nÜ uuu¤ººšXZZ’]»v>ŸO®]»F ÈíÛ· ›Í&ÚÚÚdÖ¬YäÎ;¤´´”°X,rúôiÂçóIxx8a0¤¸¸¸I¹………D__Ÿ8p€ðù|JtttHrrr“rA›ŽãƤ°°°ÍÇMi;"‘˜¬Zu„ØÙ­%ÁÁ÷º¯#GŽf.ëfiíú,(( šššdÙ²eD ÌÌLbddD®\¹BØl6Ñ××'§OŸ&µµµdëÖ­ÄÞÞžH$’V¯ÍÇ‹ENž>>äßÿíð5ð,ò¨‡öž¯žÄþýádÀ€MD$+Û”räÈ‘6}W^÷Î¥K—ˆ••IKK#\.—¼øâ‹äwÞyî¶ÖÚYB‰‹‹#ýúõ#%%%$00ìß¿¿ÙãèîíYbb"ILLlÓwÕž­[·Ž¼þúë²ce±Xäµ×^#„røðaâããÓj?ô,òj»5¾jo}Êë¼s¹ÜÇ«l6›°X,BiôþyãÖ®ìOÚÓ~t„öÔ·¼ê¤µräQ7nÜ D"‘åË—“ÀÀ@R]]Mi½ý{yÔŸ¢ŸW”Ñ¿tt,ÖZ{ÖZßólÛù,ݽ¿¡4â\Å B±¶¶&="„Lüýý}åÊ•dõêÕ„Íf$//BŸÏ'ÑÑѲï54>iiiMÊÝ»w/5jT£rçÌ™C>ÿüó&å¶*f(@H–,ù8:n aaÉ ß_{֮φ†,??_¶mÔ¨Q$$$„ìܹ“̘1Cöy]]ùúë¯IMMM«×æ† È‚ móòòjVÌhiß[·n%³gÏ–}.‘Hˆ¥¥e«bFqq±ì³aƑӧO·éüҽČ>}úºº:Ùgü1™5k–ì8©©©DCCƒ…BB!>$²ß9::’ÈÈHBÈó;ÐŽ\Ï"z DuŌŋ÷‘¥K(ÛŒE{›ò¸wBCC‰••‰'„HEŠŠŠŠçnk­­­­%^^^äÊ•+„Ò&1£»¶gí3Ñž]¿~ØÚÚBY¶lY±b±··'„òæ›o’>ú¨Õ~èYäÕvu'1Cç½µñjKbFkcƒ®îOº›˜!:i­yÔÃ7ˆ»»;Y¾|9155•ÙDHëí߳ȣþº›˜!úëèX¬µö¬µ¾‡Æmç³t÷þ†Òˆ3i¬¬,$''ÃÁÁAö Fee%€Á`ÀÊÊ Àb±I“&ÁÑѳfÍjÑ'77...>0`Ølv“r)Ê£¦F€Å‹÷#22ÇŽ-ïvnäÏ»>ÀÒÒRö^MMMö»§¯?&“‰7BGG§Õk3//¶¹»»·h_[ö­¦¦†þýû·X†ºº:ÌÌÌš”Óqtt“ù_h’§§' dÿëêê#‹Å’%uêì1·÷hUªyRW'Â;Ý®mP5äqïLŸ>sæÌÁ°aÃ`ooU«V¡¢¢â¹ÛZkg·nÝ +++hkkãÖ­[àp8HOOG\\\³Ç¡J÷‘"Ú³#F€Ãá 55áááX¹r%ªªª••…ëׯcÚ´iíî‡Téœò9ïí¯6ÐÚØ ·÷'òºžWйzHLLD~~>i¸o­µÍAë¯cc³æÆb­µgmã·†ªÕ“*£P1ÃÀÀ#GŽDVVV£×ÿþ÷?/ŒÐÐP|üñÇØ¼y3RSSñàÁƒrƒ&‰ÂÊÊÊ`hhؤ\Šr¨¬¬Å¼y{šZ€S§ÞÃÀÊ6© Ï»>[B__¿IcxêÔ)p8œV¯Í>}ú ¸¸¸Ñ¶ö&¼Ó××GYYY£ÏZë4U‰gÏUqq1Œå¾Ÿšššç~§µk€ÒvîßÏW‡Ñ£i.E"{‡‚ï¾ûeee ŸÏÇK/½ôÜm­µ³êêê(--ÅêÕ«±zõj¤§§#88?ýô“|¼£ˆöŒÉdbüøñ8zô(jjjàììŒÑ£GãàÁƒàr¹K?Ô“‘ÇyoÏxµÖƽ½?‘׽Жr:S8qâvî܉5kÖȾÛZû×PÔØ¬-c±ÖÚ³ŽŽñ)=…ŠãÇGDD’’’µµµ8p NŸ>Ý仹¹¹pwwÇÈ‘#¡®®ŽÈÈHp¹ÜfË0aþý÷_dff&OüðC­·­¿¶ÐѱXkíY{Çøª^OªŒÜÅ sss¬X±ÑÑÑpvvÆ—_~‰€€Œ?...ðôôÄüùó›ü.((III Ä„ ðå—_¢ÿþX»vm“r}}}±víZ 8'N„‡‡æÌ™ƒÉ“'Ëûp(í$;» AA?ƒàìÙ•pp0U¶I-ÒžëóiÆŒƒ… ÂÃÃãÇÇĉ±cÇèééµzma„ pwwǘ1c0cÆŒv pS§NÅŒ3àáá &`íÚµðññ¦¦&`õêÕ²löªF@@>øàÂÅÅöööX¶lY§Êìׯ† aíÚµ>|øs×Ú5¨v=È“°°dbÒÈãÞyíµ×Àf³áííñãÇcÞ¼yøòË/Ÿ»­£í, Ú÷‘"Ú3˜2e 8N#1ƒÃá`Ú´iðÜ~H•Ï9 Ÿóþ¼ñjs´66èíý‰¼î…¶”Ó™zxš½{÷âàÁƒˆŒŒlµýhýµ…ŽŽÅZkÏÚÛ÷¨z=©2j„Ô¯+TOQQ’’’0zôè6 ‘HPQQ@II =z„Áƒ£Oél[^^`mmÝ$¶éi¸\.îß¿sssx{{ƒÍf#33Í–›••…ÔÔT8884‰k/aaapssƒ……E§ÊéÍäæV`Ö¬_`jª‡£GßFŸ>º]nÃÑ£G±hÑ">>>077oÓ6 ãí¬‹³³3œ›ÝÖÚµéåå//¯FŸ={µDnn.ÆŽ‹'NÀÝÝ¿þú+D"Ønû{"ZZZMÖ"ï,1bD‡~ÛÚ5@i›7SÀdªcèPGe›Ò+ǽÃb±0räÈvo:ÞΪ2ŠhÏÚJsýPoAç½µñjk´66èÍý‰¼î…¶–#ïzx^û§êÈ£þ:3k­=£}êÓi1ƒB)+«Æüùÿƒ¶6G¾Ý£„Œž†ŸŸ8€íÛ·£¼¼NNN¸xñb£LÒJO ,,ƒ;@W—¥lS( …B¡P(=*fP:EEE æÍÛB€cÇÞ…±qׇ–ô6fΜ‰™3g*Û ¥ÃBpóf –-­lS( …B¡P(=*fP: —ËÇ‚ûÀã qòä{05mš$‰B¡Pž%!!¥¥ÕtIV …B¡P(J‡¡b¥CðxuX´hJK«º––FÊ6‰B¡ôÂÂ’ajªî¹l3…B¡P( ¥ûCÅ J»‹%X¾ürs+púô ØØôQ¶I ¥žŒQ£@MMMÙ¦P( …B¡Pz( e@éylÛv©øý÷%pp0U¶9 ¥QS#ÀƒY4Ä„B¡P( …Ò)¨g¥]}t1b„3FŒpÆðáÎèß߬Íû())ƒA¿{*]Ù¿¨*´]ê:Z3ºÒJ7…‚U«ŽBOO ¿ýöÔÕ{Fç4oÞ<¥í›É4‡ÁHTTœ‡D"èTY  }ú¼ˆªªHÔÕåÊÉÂîƒP(l¡®ÐÑñ‚¾~ªªî¢¶6¦SûQSS‡±ñlTUÝE]»Ý¿70„PX /©SvôvÂÂ’¡­­‰^è¯lSz<¡¡¡ Uø~X,{èé Ayùi"”[¹ššV00òò“n'ŸÆÄä%0º¨®Ž— @Òì÷L±uë,lÝ: ÙÙe¸w/7o¦ &†¢"®\‰Ç•+ñøðÃ02Ò¯¯¦Lñ¨Q`ooÒl™„:vRÊìï{2ššxé¥x饉$ˆŒLÇ?ÿÄàÂ…8”–VÉTG||.._ŽC]pÄСNè—¾-–]ZZŠÒÒÒ.<Š<éªþ…B‘j„¢l#(Ý—={®ã»ï.ãÂ…50 åŽ‹ò/½´ B¡gμ/—ÙÌ×^û ééŸvm=´´T_)¿x1_~yyyxóÍ‘Xµj u:Uæ®]×ðÃWp󿇰¶nÿRÂË–ý‰ª*>þþûNÙÑÛyë­?Áç×áСeÊ6…Ò**j0vì·2Ä{÷¾*ײËʪ1nÜ·>Ü»w¿"·rÓÓ‹±{÷5œ: ,_> t¨í KAHÈ}Ü»—‚FK::šðð°F@@x{ÛÂËËvvÍ JOC,–àþý'øçŸ\¼‡‚‚JXZÂÁÁ "‘IIù¨®ÀÔT¯^ÜpD@€\]ûö. …¢2DQ1ƒÒ"ÑÑÙ˜=ûlÛö-ªlsz/ÆaéÒ8wn•ÜV{)*â 0ðk,X€Ï> ’K™Ý‘èèl|ñÅDEe!(È7Nmq´=r0räv¼ûîX¬Y3±Ceœ8…µkƒ·Z¶©7"Kàá±ëÖMÆÒ¥£”m¥ ¼ùæˆÍÅÕ«ë:-(6ÇõëIxå•ýصk1fÍò—kÙyyس炃ïAWWo½ˆ×_}ýŽÝ¿\.ׯ'âô釈ŒLGuµ ˆÅêÀÛÛ®®–0 /\\,àâÒÚr=. ¥+!„àáÃ\¸ƒóçcÀf—ÃÆ¦î##]°Ùå¸?\.}úèbÈþ6Ì Žpw·¢97(Š¢¡b¥y¸\&L؉°güfÍT¡PŒÑ£¿·· þ÷?ùÎbþý÷]lØ‚³gWÁÏÏN®e+›¬¬RlßþΟÁÐ¡Žøè£ér]ö÷½÷!::áá‚ÅêXÎãÊÊZx{‚]»ãÅýäf[o"*ê ^|ñg„‡gg e›Cy‡GbÓ¦8~ü] ꨰý|üñ)œ<…«W×ÃÆ¦ý^SÏ£´´û÷‡ãàÁ[€×_¥Kajª×á2¥á$ù¸~= —/Ç#&† €ÀÔT TTÔ‚Ç«ôíkgg‹zC*r ÐW!â…¢hbcÙøçŸX\¸‹ŒŒbXXbÊoxzZ£ºš»w3pï^&**j`` !CúËÂR¼¼lzL¨2…Bé1P1ƒÒ<Ë–ý‰øø<\¾¼¶Ã3Y½ýûñmÛyDD|$÷A9! ìCQ—/¯…¦fÏ_ˆ¨¼¼?ýô/þüóúõ3ÃÆS1eŠ—\÷qï^&fÏÞ…ß_‚É“;Wöܹ»aff@ŽòÝw—||ªlS(Ï!3³'îÄoŒÄGMWè¾ø|!¦NýFF: yWa;\.ÞÂþýᨩ©Ã‚C°|ù˜…=Kee-ÂÃSðï¿ OAYY5,, àéiSS}ˆÅbdf– -­UU|€¹¹> °„³³Í`cc {{ØÙ™ôŠpBJÏ'9¹çÏÇàÂ…X$'ÀÔT“'{aêTo˜˜è#**‘‘¸{7¥¥ÕÐÓcÁÏσ÷ÃÀ8Ðz:R(”ÎBÅ JSºƒÍ›OáìÙUðñ±U¶9=‚ÊÊZ ö/ª°ÁNNÆÛ·Þ Ć S²®€Ïâ?"ðóÏWÁbi`ÍšIX¼x(44äû#K0yò÷05Õ“K®‹ýûÃñÝw—·L¦º,ì]̘ñ è‹;ç+ÛJ+…bý ‰„àܹU]r­'%åcÊ”°fÍD¬Z5A¡ûâñê|{öÜ@q1³gÄ{“¹\Ê—Hbbظz57n$#6– u êˆ1cÜàéi ¡PŒ¤¤¤§!%¥99e()©’•an®[[ØÛ›ÀÖV*r4ˆ––Fro+)”Î’‘QŒ bñÏ?±ˆeÃÐP“'{bÚ4Œ催¬RÜ¿ÿQQO•…ÌÌ0jpqé‹Aƒ0hP? äЮS( TÌ < ›]ޱc¿Åºu“ñöÛ£•mNá³ÏBqút4nßþX¡ž,D`Ë–3¸pa <<¬¶E ‘œ9óÛ¶Gyy –- ÄŠã «ËRÈþ¼O?=k×6ÈåA%;» C‡nEpð;5Š.-Ú8œZxz~‚={^ÁŒ¾Ê6‡Ò _ý~ûí&.]Z+·ü¶°o_¶m;3gVÂ×Wñ¡tB¡§NEc÷îkÈÌ,ÁÔ©Þxÿýñðò²‘ë~JK«qíZ"nÜHÆÍ›)¨¬¬…ƒƒ)`ôhWŒá ]]x¼:ää”#'§¬þU.ûËf—¡ºZºâ “©++#ØÚÃÒÒææèÛ× þ¯!,, `aaØá: ¥³ää”áüù\¼‹‡s §ÇÂøñî˜:ÕãÆ¹CK‹‰²²jDGgáÁƒ,DE=AL |¾&&z8ЃK[ê©D¡PZƒŠ”ÿ „`áÂ}àñ„8ujMÜÔF²²Jø5¶nW^¦Ð}I$³gïBm­.|ÐcfèîÜIÇ–-¡HLÌǼy/`ãÆ©°°0PØþ**j0bÄv,X0›7Ï[¹ãÆ}‹¡C°uël¹•Ù8>Ë—ÿ…¸¸/adDstW"#30oÞlß>‹wmÒgBæÏß‹üü \¹²::š]²_‰„àâÅXüüóUÄÅåbÌW¬X1^!yBD" ¢¢žàÆd„…%#!!êê ¼ðB?Œ5cƸÁÃêÙ!ÊʪÁfK6»lv9 8()©BAeeU‰þ[†ÖÈHG&lXXH…ss}ôík=ôé£[ÿÒ¡žf…QPP‰‹ãpþ| îßÏ„–ãÆ¹cÚ4oŒë==éd†P(F\\.¢£³•…ž °&SîîV8ЃICSlm•|T ¥AÅ Ê?þ7ÇÕ«ëáèØu§Pi IDAT3r=eËþDjj®^]ß%â“'%7nV­š p—ìÎ’šZˆÏ??ƒ7’1fŒ+>ùäE¸ºZ*|¿ëÖÃõëIˆˆØ$WÏ;.âøñ4ïC;Y¿þ8’“óqîÜje›Bi.—‡ñãwÀÝÝþù¦Rl(,ä`ܸ˜6Íß~;¯Ë÷–Œ_~¹ŠÈÈ Üï¿?ãÆ¹)l¹É²²j„‡§Ô·U©()©‚¹¹>F’zm€‰IÛ•J$%%U(.械Sÿ—+û¿¨ˆ‹¢".JK« KýV__ ÆÆº06Öm$r4¼76Ö±± µa`  -èéiQ„Ò.Š‹«péRþù'‘‘éPWg 0ÐÓ¦ycÒ$Ï&+ÿäåUàÁiXJTTó I`l¬ __;øøØÂ××ÞÞ¶ ¡P(Ý*fP¤p¹< ¾ o¿=+VŒS¶9=†Gr0}ú8pà LœèÙeûÝ»7 Û·ŸÇ¹s«àíÝýòšqðí·—r®®–øä“1r¤K—ì;::/¾øöìyAAò]yäñãLú._^+wwtUfðà/0þ X·n²²M¡´À{ïÂíÛi¸vmC› ÁÅ‹qxóÍ?ðÇot:ioG‰Šz‚_~¹†«Wáæf‰÷ßéÓ}ºCà )7n$áÆdDGgA,–ÀÛÛ#Gº`ÌW Ô¯Ó‚9!µ¨¨¨©Õ¢¼¼FöYYYµìó§¿#Š›”Åbi@__*lHEmèé±dŸéëKßhC__ ê04Ô“©Mèê² ¡¡##mhh¨+,äÒý¨¨¨Á•+ 8wî1""RÇ;cêToLœè ssý&¿áñꟇ˜6?ÎAL ™™% „ÀÒÒH&nHÿÚÒƒ(”Þ3(R>ùä4ÂÓqíÚ:ÛÒæÎÝ ¡P‚ÐÐ÷»t¿ Áüù{P\\…Ë—×v›˜R.—‡Ý»¯cÿþp˜˜èaýú)˜3gP—…,‰ÅL™ò=ŒŒtpüø»r/ŸÿϱxqÖ®¥æm!=½£FmÇ™3+1xp?e›Ci†Ó§bÅŠÃ8rdFvU¶9X»ö.]ŠÃõë”:㚘˜]»®áܹǰµ5ÆŠã0wîà.é#kj¸u+ 7n$!<<ÙÙe00ÐÂðáÎ tŘ1®]ên_UÅGEE jj¨ªâ£ªJ€êj>ªªøàryõŸñŸÚ·ëÿŒ>_.—ÿÜýèèh‚ÉÔ€¡¡644ÐÓÓ‹¥!ëãÂÔ´µ™ÐÔÔ€ººô; «« &S½‘0¢¯¯Õ¨ÿQWg4Ék¥©©míÆ}¨Ž«I=4.KMAWã\.ÿþ›€K—âqýz!tÀ”)Þ˜2Å öö&­ü–ØX6bbrðø±ôonnÀÁÁ´‘ÀáåeC3 Eõ bEº¼Öĉ;qèÐ2ÒĆmåúõ$,^ü+Ξ]‰Aƒºþ!-?¿cÇ~‹—^„¯¾Rn‡º:þøãvíº B€÷ß%KFtyºnaË–P¹%ýlŽM›NàáÃl\¾¼V!å«¿ÿ~;v\DBÂW Ù¦t 6»ãÇïÀüù/à‹/f)ÛÒù vÂÞÞG¾­°0¶’•UŠÝ»¯ãøñû01ÑÃ;ïŒÁâÅC»,¯Gƒ 7n$áúõ$ܽ›‰šœœÌe¹6† s„¶v×ÙÓQêêDàñêP]-€P(—˃P(Fmmjj¤Ÿq8<…"ÔÖÖ¡¶¶uubÙï€ÃáÎÔ "BdBIM"‘"‘D–4jkÍz—È©×IËÌRæùÔjjjMÂ.ZÂÀ@-Ý"::šÍ.åÞ =‹–,VÓÉ--f'M¤Bôº{ZtÒÒbÊÞ?½¯o©¨Ä“©Ñè>âñêž‚‹ãpåJ8œZ¸»[aÊoLê77«çœ iÒÝïØXéß’’*0j°·7…‡‡<<¬ááa OOkôíkøÜ2)J·…ŠàÕW÷CCCüñ†²Mé1H$'RÏ[ÃŒêáÃË0fL×ϨJ$'OFáÛo/¢¬¬K—ŽÂŠãÚ<“'¥¥Õ1b^}u˜Â–Ǥqõ îßÂÚºÂö£*¼úê~hjjà·ß–(ÛÊ3ˆÅ¼ôÒnp¹<\¼øA·ZãáÃlÌœù3>ý4K—ŽR¶9¤9=öí áCwÀb1±té(,Y2¢Ë“Ú …bÜ»—‰°°dܸ‘ŒäähjªcÈGŒå‚ÀÀpwo>‘(å?¸\>ù/ˆDBšxH…A£Ïx«®–Š(Oó´Èò<8œÚ6Û,‘´>loI¸©­­köóQèYø|a³Ÿ?-,Ï›D"AUUÛŽùi¤Bˆf½ø¢==-0 ååÕ(-­@ „6œœÌáåe,e!Mºº,HCštuYÐÓc5÷òó+Ÿ‹øø<$$ä!!!99e=™°áéi 77+8:š÷˜ëJ/‡Š½û÷31gÎn„‡ˆ~ýèúÞmåĉ(¬Yó7®][—¾JµåÝw!22ׯo@Ÿ>º]¶ßëדðÕWç‘–Vˆ¹s_Àúõ“•:ñjÕQܹ“ް° u%­«ÁËëlÜ8o¼1RaûQêêDpwÿŸ}¤ð•~(íç§ŸþÅ?\ÁÅ‹kÚ4ãÙÕüôöî;,Š«‹ð–® @À‚Ò›XQªH±ç‹%jboÁcŒ5‰]cF½D‚{Qº€ "ÒAD¤é‚À–ùþXÙˆÒÙe¶Ü÷y|Tvwæ°Svö̽ç|€|qïÞ06|áà–*)©Ä©S!8}:,³fÀÂ…ö´M‰)(¨@@@"“ðèÑK½C÷îakËMlØÙ@SS•–ØÉÅbqPYÉMl0™TVr“BuÉšª«™Fß°ðî]5Øl ååïÁfsP^^ ‹ÊÊÔÔ0‘]†ŒŒ"”£¶–C ÒÒÒŽ¸‘•e kWnñÚº·=ztþPÔ¶åPZZ…¢¢Jdg— -­ÉÉy`2Ù——‘‘&ÌÌzÁÔT††=al¬Iºq„ð!É I7iÒ!hÐR9^TÕÖ²0rävØÚbïÞit‡ƒ²²*Œõ;,,zãÔ)Á‰ŠzƒíÛï ,,nnæøùç1´'t""Òð¿ÿƉs0f̯oñâs(-­Â¥Kß |]¢ìÑ£—˜:õ""6’vzBæùó Lšô6l… íé§AÂÇ_Ð8 9NFpp ""^¡¦†==uØÚÂÞÞ66ú-šê@Â*))ÞÞ±ðöŽA\\6”•0r¤¬­ûÃÔT,›—¨()©DqñÞ¾­øPøöÝg#OÔÔ”¡ªªyyYP…wïªQXXª*îHuuiÂȨ' {ÂÈH ¤AЇ$3$Y``æÎ=…ðð dÎ`+?„;ï"4tÐÜí MÅ´iG°wïW˜6ÍR ëHK+ÄÎwq÷n †ÕÁÆãi©ò)‹W×=èÙ³ .^\Ü!ë¼ví¾ÿþÄÆn%àš°}ûܽƒÐÐut‡B|DØjR4Ekz|ª¶–/¯H=êììL˜0Ë—;ÃÐÞ$/ÔÔ°ñ ÁÁ)NFBB¤¥¥0hP_ØÙq“ö%Cê ‘•™YÌKl<}š99ØÛÂÝÝ..¦Mv5©¬¬AII +ðöm²²J›[ŠÜÜ2dg— /¯ 99¥õ¦)(ÈÁBM ,RRRÐÔì-iÂØ˜›àÐ××h°. A|E’’lòä?a` íÛ'ÓŠÈ(/¯†ÍVLŸnõëW—¡-~ûí&.^ ǃ«›¬þÝZùùåØ¿ÿ><=£u¬];®®׆¶9Çaûö;ø©Ã¦J••UaÀ€M8p`¾øbp‡¬S¹¸ìÁ°aý°mÛ—t‡B|DXº…´Ô¿ÿ>ÅwßyÂÓs±P©f±8¸uë9öCrr\\L±|¹3îKwh\ïCg3hh´íÆ]AAòóË›[Ь¬¤¥âÕ«|$'ç#?¿EAZZ 22 0™lÞÿ{öìî4==uèëk@OOƒÜ!þ!É IUW\-8x-ttzÐŽÈسǧN…àñãõB×ü¶–w÷ýèÜY×®-kw爊Šj9â“'ƒ¡¢¢ˆÕ«Ý0yò0¡ºƒ—Ÿ_;»X°À«W»w躧N=‚nÝ:ãØ±Yº^QQTô›púô<¸¸OòKÒÝ¿‡¹sOáÔ©ypw7§;œûöÛóxü8 ? ý¼uŠ¢àëÇâÙ³79R+V8cäHºCûÌ«W¼))aa©¨¨¨†¶vWØÙqkmŒ©îÝ;Ó&A´ZEE5üüàí ÿDTUÕbðà>ps3ÇØ±|»ö­ªªýÜ(ÀË—ùHIÉGRR.Þ¼y &“;rCAAL&·ËôìÙúú¼?ººê00è uue¾ÄD„$3$Õüù§!++C¾ˆµBii¬¬¶`éÒQX±Â™îp”˜˜ w÷}X±Â?üàÚ¦e0™lœ;Š|Ábq°|ù(ÌŸo×`[6º-]zÏž½A`àš¯®åhlìVÈÊ2:tÝ¢àúõ(¬\鉸¸­PV&w¡„AII%wÁÑÑû÷O§;œV)+«‚ƒÃnŒ¡‡Ã‡¿¦;œ{ôè%zˆ ÔË—;ÃÅÅ ÒÒÂ7µ‡Åâàùó7¼))ÏŸ¿‡CÁÄDëÔCXZöºÚ%Ñœš‚ƒ“qï^ <ˆGqq%ŒŒ4áînw÷03Óæû:ÙlÒÒ “‰ØØ,ÄÆfâÅ‹,TUÕBAAݺ)AZZ eeÕ¨¨à¶®ëÖ¢§§]]uôï¯== ôï¯F®3¢a$™!‰²³K`eµ7n,Šš¢bÇŽ»ðô|Œðð B]<íÌ™lÚtW®xÀÚZ·Å¯ãp(ܼù»vÝCAA9æÎ‰+œ…nJ°°TL™r§OÏ£eÚKff1¬¬¶àŸ–õÐwº|ÿý?HO‹ë×—Ó ñÁ’%çðäI:Öˆä0g?¿D|óÍq‘UÑÑøã‡ðõƒ¾¾–.…I“ ÕH·OUTT#,,ÁÁ) IFjjäåex-`íì ajJZÀ¢…Íæàñã4x{ÇÀÇ'99¥èÝ»/±1t¨N»G¶6µî„„"âåË|%#(( §ñ¦Ã¸»€‹‹X,6^½*À«WÜ©,©©ùxõªååܶ·u£9ê’d4!aH2CÒ0™lXZnÆÊ•.˜={Ýሌ͛oâÚµgßEE9ºÃiVII%œ÷`À€^8}z^£wÎ^¼ÈĶm·ñèÑKŒmŠuëÆ Eþæ;ˆ]»î" ` ­5_~ÿÝ—.EâÉ“MäîäG’’ráä´wï~AƒúÐŽÄ+(¨€“Ó.Œ3@äÛpWTTÃÉi7 êƒãÇçÐN›efãèQüóOTT±`fÏ)2#f(ŠB|ü-`##ÓP]Í„®®:¯Þ†™bFˆ”—/óáã‹{÷b“…Îå1j” ÜÝÍáäd,𬵵,§àîÝðõGII%† ë‡3¬1nœE½õT 55¿^½Ž´´Bdf7:š£î¿ÉhBŒd†¤ñõâEç³Ed.šè–Ÿ_Žá÷býúq˜?ߎîpZìñãW˜2å6ož„¹smë=–žþ;wÞÅíÛ/0xplØ0VVýiŠ´uè,úù©ØØ,¸ºîÅýû«`nÞ‹ÖX„É_âàÁˆÝ"°áºDËÍ›w 9ðó[-ð‹ñŽ’‚¯¾:†#G¾Áĉƒè§] +pâDÎ Ìž= Ú‹Ü—š"#Óx]Rê·€åNI4ˆ´€%DGvv îßý{1ˆˆHƒŒŒ4ììêZ¾š¡[·N]?‹ÅAhèK\¹ò÷îÅ€ÁÆøñ±p¡=Œ5}]m-‹—àHK+Djêç£9ºtQúÐYE×eE__½{w#ŸÙ„¨!É Iãáq55Lœ:5îPDƆ ×pï^ ÂÃ7ˆÄPàíÛwüñw™™6òóËqð /.^|Œ~ýÔ°fÍ‘›{NgÑÏOQ…¡C7㫯,iO¬“™3ÿ‚²²Ž›Mw(¯®­é•+°±Ñ£;¾Y»ö_ܼù?‹E€ŠŠjœ;Š'‚P^þÓ¦YâÛoøÚf»#½ChèKq‹‰fg—@YY66ܰ¶¶†ÐÓ#-` ÑP\\ _ß8x{Ç"88,VVýáæf77sôê%Øi¹ååÕ¸y3 §N…àåË|ØÛÂÃà #Gê·j9……xù2©©þæþ;;» '']]î4•[Éêé©Ó~½E É IRUU‹6bß¾é˜0a ÝሄÜÜR ¾ ¿ý6I$§å°ÙL›v¹¹e;Ög΄BYY?þ膩S-Eî.ÝE?²nÝ¿ˆŒ|‡I €{‡ÖØx¶nýf̰¦;‰–—WGÇݘ2e(6oþ‚îpøª²²£Gï¾¾Î[@w8|SS—WŽ @vv ƈeËFÁØX‹îÐÚ…Û–›ØOEyy5´´T?jk€=D¯ !y*+kàXøù%¢¼ü=ÌÍ{ÁÝ›Ø02j|ÔD{Q?¿DüõWBCSakk€'´»KUU-/±Q—쨛ÂÂd²ySVŒ5a`Г÷·®®:©ËAÐ$3$É;/°bÅEÄÇo‰ºÂ`Íš+ L£GëDò„Íd²qø°öìñ¬,?þè† „³Íjs„¥èç§‚‚’1}ú1DFnøÝQ’‚iÓŽâÉ“MB]DVÜQ…o¾9ׯßâáÃÅòœÿøñ+Lžü'öîý Ó¦YÒ_±XܾÇý>Ô 1Âòåΰ´é€Ma±8ˆŽ~ƒ  n!Ѩ¨t°ÙŒ5akk[[X[ëBIIüöYB¼0™l„†¾„·w,|}ãŸ_3fÜÜÌ0x°ŽÀÚ0?~ü Û¶ÝÆóç˜4i0~ûmß‹"³Xdd!11))ùHNÎErr/É!+Ë@ÿþj04ì CCMhÀØX }ûv'ÓUˆŽB’’dåJOW ÕAa–‘Q[Ûرc²ÈÝaþ´Íª££||âpèÐLüïCè¯M„¥è秘L6ÌÍ7`õjw‘ª©"([·Þ†¯o‚ƒ×ÒŠDóô|Œ5k®àúõebÝ‚û—_nàÒ¥HüMMñë¤Qw'öða?DF¦ÁÒ²?–.u‚³³‰Ø®¬¬AXX*BBRðèÑK$%åBV–¡Cu0r¤ìì `aÑGäF’…á•nôô·ÐÐP‹‹ÜÝÍ1b„>ßoŠQ…{÷bðë¯7QSÃÄÖ­_vÈÈk&“Ûa%%%IIyHIÉCbb.22ŠÀfs //##M˜šjÃÄD‹÷7)LIfH Š¢0hÐ/X¾Ü™|áj¡uëþ…Ÿ_"BC׋ÔETcmV7mº/¯Ü¿¿ ýú©Ñf«½ÃˆÛ0>ýE?²dÉ9WâòeºC¡³óï°¶ÖÅÖ­ÿ£;‰•—W{ûøælØ0žîpªºš‰Ñ£÷ _¿bŸ¨ŒLáCáïŸ##M,[6 ãǩϧ–((¨@HH2BBRœ‚¼¼2¨¨(ÀÚº®Þ†ôõ5è“ š””” ŸXx{Ç"66 ** 5ÊnnüïŒRQQ­[oãï¿Ã1eÊPìÚ5•–o55,¼|™ÄÄ$&æ ..qqY(-­ôéÓ¦¦ÿ%7LL´Ð§hÖ"„IfHЏ¸l¸¸ìAXØz¡º«-¬ +`eµ7NÀܹ#é§Ešk³Êd²1nÜP…[·¾©©&?ýt& $d­Pvc¸~= +Wz"&f3ºtQ¢;ÚV`àÀ_pöì|ŒmJw8kþüÓHLÌE@À‘+ZÜiøßÿãèÑYQ*11‡ûáöíhhkwÅâÅŽ˜>ÝJl·ujjBB¸-`ëêmôìÙ…7%ÅÖÖ*t‡IÊÊ*O,||bëuFqs3ƒ««9ß:£$aéÒ èß_ §NÍ…†F¾,·½rsKŸƒøøl$$pÿNO ‡‚ŠŠ"LMµ`l¬ ‹Þ°°è == MÏ!ÄIfHŠ“'ƒqøðCDGo¦;‘°sç]xz>Fdä&¡ÿÒßš6«oÞÁÕuƈ={¦up¤mŸ 7·}Ø¿:&OJw8 */¯†¹ù80_|1˜îphsõêSüðƒ¶ eÒIÜ¿‡yóNãÒ¥%9Ò€îp:ÌêÕ—ñða<‚‚~†ŠŠ"Ýátˆ7oŠpìX¼¼" ¢¢ˆ… í1{ö±ÊÍfsɹñôi:˜L6 {ò¦¤ ®‡ÎÉù‡N uF±´ìÇëŒÒ»w·v-?=ý-æÎ=…êj&®][&´Óï*+k>ŒàÈE\\6âã¹jjXèÜYææ½0p`Ÿ Ž>"ÛÙ‰8’ÌK–œ‡Cáøñ9t‡"ô**ª1lØfxx8aÅ gºÃiT[Û¬úøÄbþü38p`:¦LÖ‘¶Ï”)âý{&nßþN¨çˆO›vªªJøë/ÉmGºbÅEdg—àêÕet‡"‘Þ½«½ýNŒ©ƒgÐN‡*+«‚ÝN¸¹™c×®)t‡Ó¡ +pâDÎ Ìž= ÚCMMô[Ö6çýûZ<~œÆ¹‘˜˜ C ƒõåuI<¸¯Hð&Ä_UU-üýáíS¯3J]bÃØ¸mQ**ª1}ú1””TáÚµe"3r‰Éd#99ÑшŽÎÀ‹™HN΋ÅA×®`aÑ›—à8°·ÐŒ‚]»î!6v ääÄs¸wSêêòÌŸo‡åË…7 (Î6l¸†7¢¼–oÖEÉÍ›Ïááq7n,ǰaâ[ô´1ååÕ8>'N¡¼ü=¦O·ÂâÅŽuG³¨è=z‰àà„„$#+«:Écøp]ØÚr“FF=…:1NH&&“°°Tx{Çàþýxäç—µ«3Jyy5¦Lùrr \»¶\dzÕÕLÄÇgó’ÑÑHK+‡CAC£ ì¡Cu0th?XXôúÑÔß‘d†$xûö ؈«W—aøp]ºÃj55,X[oÁ—_ºÂy,^^Ø»×UUµððpÂâÅm:q3™lL™rEEïàíýƒPÉ­©aÁÞ~'† ë‡C‡fÒN³²³K0lØfxz.†ƒƒÝát¸ÄÄŒõ;¼½€…EoºÃ‘8ÏŸg`„ƒØ·ï+‘q%(_}YY%xðàG‘½xo¯šþù'ÇŽ ;»ãÆYÀÃÃ ææ½è­Ã¥§¿ýØHAhèK”–VA]]#GþWoCKK8‡á’‹Ã¡ðüùx{s ˆ¾~]uuåQ`äÈ–uF)*zgç=øòË!BwMÛÕˆ‰É‹ÜOŸ¦#/¯ ²² ˜›÷Â!::TÆõCÏždô†˜#É IðèÑKLzqq[%òn]c®_‚»»y½dÀ… aØ´é:?Þ(TÃòîßÃŽwñúu!fδÆ?º·{[æå•ÁÅellôqìØ¬Ïg±8àp8ePXX¸¸l8:ÖO>ì‡|ñèÑ:‘ù0rqÙƒ!Ct°cÇdº4ª@I IDATCépGŽøãÈÄÄl!…»¨ªªJJrõ~Æbqàæ¶ݺuÆ¥KK$ú®sff1waÙ²QX¹Òå³Çß¿¯…¢¢\¯?,wï¾ÀáÃ~ˆÏ†­­<<œ`ooHwh´`³9ˆ‹ËæuIyò$ 55,èêªó¦¤Œ¡'”#2 É–œœoïøøÄ!&&** pr2»»9›¼!þ Ó¦ÁÕ«ËÄzÄZvv žŒÚ0Ä€½À`ˆFž_…§O_ÃÛ;'OƒÍæÅtuåŽØ°²êOöÓF|œÜ KEjjde8›Ü>\VVº——Ìi‹B‚$3ÄEQÐÖþÇÏitT€$²µÝŽW¯ }¼nÚÉÙ³óáâÒ¶ù…l6sæœBPP2X,6¤¥¥°iÓD,ZdH¶m·‘’’‡¯¾²ÂªUnÚA¥® ÞñãA¼i% éÖ­3bb6 äÂÿÕ«ØÚîhÑsEe “Ɇ¹ùüø£;,°£;ËÏ/ÃàÁ¿áüù…5ʘîpÄÖÆ×qþ|˜LVƒ3Ò01ÑÂéÓó ­Ýµƒ£ÄcéÒ¿QSÃü,9û±7–ÃÒRø“£­¡(K—:58:ïâÅp¬^}0gÎlÛö¥ÄÞí-,¬øÐ%%AA)ÈÏ/ƒªªFŒÐçMIéÓG2’Û„ðš3çX, èŸX$%å¢[·Nps3‡››9ìì $¶žPKäç—×Kn¤¥B^^ÖÖº°·7‚½½!ŒÅ¤š!É qW^^ #£µðô\ Éž#\‡;`5X¬ÏïØ€Œ JJr¸xqq»Šnþüó\¼ø¸ÞÁÎpþüìßºšaíÚ±|¯ÑÑ[·ÞÆ‘#þ-zîíÛ+R€ôÎX¼ø; ÕÝé:wnHµËóð¸€ÂÂr\¹"þEw¯\y‚Õ«/#1q›Ä´¼ìhEaР_QPPÞìsõõ5pÿþ*‘*œË/ÏŸg`ìØýÍ>OV–yólñË/; *Ñõi”eËFaìX ÞtL[ÛHO ‡‚””¾øb0œAîò‚;ý†Û%%áá¯PUU ¼Q#FèCEEî0 ³gîÞ}€î”д´Bx{Çàîݼx‘‰ÎåáèhŒ±c4Ûò•rsKœ‚€€$^]uue8:ójë4Ô]†à+’Ìw99¥:ô7ܺµC‡ŠoéÖHIɃƒÃ®“‘a@]]—/{´«ÅááÃ~رãîg_Ò¹Ëï MMU¬];66zm^G{Q…3gaË–[`³9&wdeX¸Ð6Œç{ {÷úàÐ!¿Ïj—€””ÆŽµÀáÃ3EîNÁ͛ϱ|ù߈‰ÙUU%ºÃ¨¥K/ °°—/{ЊØzñ"îîû}\JJ EaâÄAرc²ØïsM‰ŠzƒeËþFVVq£ç4ÐÒRÅÓ§¿t`d¢ëã(ÚÚ]±h‘=´µ»bÞ¼Óõ>ã iŒeŒ'æ’éNa2ÙˆŒ|ààd„„¤ &&RRR8°œœŒaoo ‹ÞíNed‘ÑD“.]ŠÄ¦MבœüùˆØÜÜRx{ÇÂÇ'áᯠ## {{£-_Mѵ+)܇BLL&BBR˜„§OÓÁbq`jª#ØÙÂʪ?97òIfˆ»ää<8:ßOdèÓ·n=‡‡Ç…ϦUÈÈ0`` OÏ%PWWnóò¯]{†åË/69Ú 8˜þö¯uÒÓßbÅ ODE¥7:Õ¤W¯nˆŒÜÈ÷u/Xp>>±Ÿ­WJJ Úá—_&Šä°åòòj˜›oÀÞ½_aòä¡t‡#0EÁÂb/vÀÒ¥m¯-C4m×®{8rÄ¿Ái22 (+Ëã÷ß§a̘4D'|jjXøýwo;))©ëfÀƒ?ÂÔT»ƒ£]Ü(ðòŠ‹ÅEQŸ%Œ iXYõÇùó I‘¼F””T"$ä%‚ƒ“„ÜÜR¨ª*ÁÎÎŽŽFpt4nõ5HiiLLÖcíÚ±X¶l”H~n‚wýz–.½€œœ¦G°WÂ×7÷îÅ $$l6ÖÖºpwwwsôìÙ¥ƒ"]••5 KE``2‚ƒ“ñêUå`cÃ’âà`==uºÃ$™!îs1jÔn’ÌøÈï¿{ãÏ?ýë`0¤ac£‡Ó§çµ«øæ£G)˜>ý¯F/žî—773?>§Íëá7‡Â©SÁضí8œ†Gi¬¡!§ÃXYmAff1ïÿÜë/)üò˵EDÕôéÇ ¢¢ˆ¿þšMw(— —=ðõýffäK¡ ØØlCzúÛz?«û²2v¬vîœLZj6àÙ³t,]ú7rrJ>;§ÉÈ0ðÝwÎXµÊ¦èDד'¯1qâ!Ôµ6ÿ”ŒŒ4ÌÌzÁËk‰HM¤Kbb.‚ƒ“˜„Ç_¡¶– ##M8:r¿ð´änî•+OðÝwž;;:ô5ÔÔÚ~S†OÄcöì“xófO‹G¼{WÿÜ» ÿTVÖbðà>ps3ÇØ±­¾1÷ðaîßÃæÍ“$jjjffñ‡ã<¡¡/QZZ--U88ñŽuÒ ©Mž’‰„ÄIHÈ©×=CZš;×÷￵ëDõß|s²ÑuX,6îÞÁ³goÚ¼.~“––ÂÂ…öø ææ½?+ö)++ oï¾®³¶–…ìì’bƒÁÀÑ£³D>‘..fð÷Olp ¸ JBajªEw(bëÕ«‚ϲ² t颀¿þšãÇg“DF#† ÑA`àÌŸo)))0ÿרl6nÝŠ¦1:Ñåå YÙÆ/Y,ââ²1iÒ(,¬èÀÈD“±±&/vÀ?ÿ,ABÂ6œ?¿ÖÖºðõÃÔ©G`b²sæœÂ™3!Ÿ êøúÆóÚ—‡‡¿‚£ãN%wä¯Aˆ€ŠŠjÈÊ2Z5Õ¡sgyL˜0ÇŽÍBlìVœ=;zz8z466Ûàä´{öø >>»EË»{÷.^ ÇèÑ{˜˜ÓÖ_EäôîÝ 3gljs»·o‡™3‡#99K–œ‡‰ÉzLŸ~ §NãÍ›¢6¯'%%ÁÁ’uì“‘bŽŒÌøÜС¿!'§÷îæw߯êÕní–™žþîîûPYYÓä<íõèÑ/^lºá …'‚°}ûPx‰##MøûÿÄ·õÄÇgcôè=¸wòäädqþüZëˆðSvv ,-·àÂ……prÏ.S§…šZgüùç7t‡"¶öÃîÝÞ`±Ø¼s…»»9v=Ha±–ŠŒLòe‘›[6û¿dvXØz¡™ò' òóËaiù˜Ìæ?çddÐÖVÅ¿ÿ.•è;í‘™YŒ€€$$âÑ£—¨¬¬ŽN8:ÃÁÁ66z““±ñ:TUÕò^WײyÉüüóX2OŸ=€Ó§Cðäɦv/‹Íæ <ü¯ÎFnn)úöíwwsŒ3ƒë|vcŒ¢(˜›oBqñ;0Ò––¯¿Nœ9#„îZ¸#WÂß?& 00ååÕÐ××ÀèѦpv6ÁСýxÉÊæìÚu>€‡‡“¤´k'ÓLÄ]FF¬­·âÞ½ï1p`ºÃ¡]u5ýûs¿KKKaûöɘ5˦]Ë,*z7·}ÈË+kpz ÷$ÅK ¨¨(BKK66zøþ{¡­tœšZ€åË/"66“WÓ"2rzõâÏEéÕ«O±|ùEÈÈH£k×N¸té[‰WÂÍÕu/ìƒ]»¦Ð ß½_ cãõؽ{*¦NFw8bËÅeââ²!+Ë€¢¢vïž‚ Ñ–Hzÿ¾Û·ßÅéÓ!’’‡ÃÁ¦M±d‰Ý¡‰ŒÖtÁ¸£ˆºwï„«W—¡_¿¶Õ&¸#^ž>}ÍKnÄÇç|(Òhˆ‡| ƒ! ##Mœ81‡$íüúë <{–ŽÛ·Wòu¹E!::÷îÅÀÛ;ii…ÐÐP««ÆŒ€áÃõ +Ë@ll\]÷Ö{­´´ñÇ3H‘QpóÇ_Áß?¾¾ñHK+„ªªŒ0z´)š,ò=jÔïHL̃! cc-?>[Ü}’ÌwuE¡._þ#G´{yÕÕÕ¨¨Ýa£±±9øúë³€ƒ§ÀÁA¿]Ë«®fÂÊêwÜ2ƒ!Í+Ò§¨(‹~ýzÀĤ'tu{@WW úúêèÖM jj‚¹¨ËÈÈ@DDß–ÇáPÈÁíÛo@Q€££&MÒá˲ϜIFtt44ááa UUÁÍœ2…žd¾}÷qáB8¢¢~»»þþ‰øúëãxþüWhhG10Q??}*?¿..‡ŽŽظÑÝ»wÜÅž¼¼}º W/ôꥌ=/|æààЮu7ÆÓÓ3gÎäûredºAMm˜Ì<¼}ëÅ—evïþ%ääz#?ÿ(8Á~©¡ë4W7•æîÝï1hxŒúå—xô(~~ü›zÔ^¢~~ú”¯oΞÅâŃ`oßñû††Œ3E*11ùùùYvKÔÔ°±}{^¾,Æ‘#nPUßÂk‚ø¼ILLÄë×Y(/¯EEE **jQQQ‹²²”—×ðþ]ZZ‚‚÷¨®f¢S'9üô“5ôõÉ”“Öhnû º99%M>§.™þѱcÇd,Y2žžžü ‘hƒ3fàâÅ‹¶>6›#£uغõ˜6ͲÃÖ›‘Qô!±‹¼¼Rdf–4xM&-- Š¢°b·0sÝ´ŠÀÀÀ‹UXCCCååÕ JÂÇ ð÷ODQÑ;ôíÛ£F™`ôhSddaݺ«õÉû;wNAçÎõ?ëDñý­{?>x*Cg0„à1ÒèÔIÕ|]® ¾Œ Ú›7¡xôÈýû·ÿNUII%þøÃ }ûvoqøŽú²%ˆ/ï,Çâë¯Ï@EE¡ù4cË–[X³f ääšnÖ‚Jî´”©©6zõê _ß8±Kf'ÃÁÁˆî0$ªç§O¥¦J#:zJ»ZE·UGœ§™,i W×Q KEm-Kh÷åöôçM¿~½ZµýÞ¿¯EUU­ÐN­6-Ù~))yÍ&2€ÿ® nÝzŽˆˆ4ôì)Óá_¦‰ÿÐq]’””‹ÊÊXZöëÐõöéÓ‹;`Ò¤AõF |ŠÃá~?|ØÉ8~|6z÷æÞtüäË«Dù8Ù ¢¢€ñãbüøàp(<þ¾¾ñðóKÀéÓ!06ÖħoïÇ~4"#_ãĉ9°°è]ï9¢ôþ6”|!ÝL$€šš2 ÊéC(Ìše×DtíÚ ýû«µ8‘!êdd¤áááÄ—DlÜ8rrâŸOuu5Çýûqt‡ÁW¹¹¥HN΃½½!Ý¡ˆµ ìhIdH=±Ld#EE9’Èà3_ßøÏŠ,6…Åâ ;»ÏžuCF†m£‰Ž„¾}»ÓV»ÆÏ/±Eû*›ÍABBwãÖ­ç™h’––Â!:X»v,>\GÖ!5µ€—ú‹ÅFnn)Æ;€£GÄêØ—ŒoaN[[µ^ LI&nu áçêjФ¤ÜF[ꉢààÈËËÀÚZ—îP‚ $Ö¥K‘¼Ý ‘——²²45»@WWffÚ°¶Ö…”…wïdp÷.[®ÂëöíhŒ?¶õ{{Ç|6j 1L&UU5X²ä<~ú)ïß3œHK+l¶Ë›Í›ÍÁ¶m·1mÚQˆG1ñ¿-J@[»+IfM¬¬t¡¢¢ˆû÷ã°x±ÝáðE``¬¬t¡  Kw(AkݺqèÜYŠŠ²PPƒ²²””ä   eåÆGQÖMs7΢£B%hôúu!bc³°wïW´¬¿ºš ??î”)99¤¤¸­ƒ9 õy±àee•cþü‹8yréˆÔ„â!++ýYqÕ†p8""Òà踋YÐ:Ý“H2CôêÕ ±±Yt‡AIV–Q£ŒñàA¼X$38 !!)ððp¢;‚ ‰æînNw„¸|ù ôô¸#sè‘Q„ A^^jjÊPP…¢¢,TT¡  Y¨ª*ñþ­¢¢EEnR.*êñ‡š$‘ÑŠ¢páBX“Ï‘‘á&‘ꨳٔ”Ta×®päæ²±eËTÈÊ2: Zþ#É  ««ŽW¯ ÁbqxÕ ‚è8nnæðð¸€ÒÒª&ûƒ‹‚¸¸,W’:A!䪫™¸p! ?üàJ[ =qìØ,ÚÖ/îââ²yÿÖÐPù,’ƒªª””äЩ“<ºtá&Žäåe¡ªú_)5õ%LMû¢  ÚÚ¢ÙiŠ$3$€‘QOÔÖ²ðæÍ[èêªÓAH{{#0ÒðõÇÔ©Ãè§]‚‚’¡®® ccMºC!‚ ¢ ÿþû,§CÛ±ËܼrrÚÖ00°ÆÆºÐÐÍD@ €J]]uÈÈH#99îPDZee%¶oßNw|“ššŠ³gÏvè:KJJ°{÷n@EEvîÜÙàóÄí½VQQÀðáºxð žîPÚ-((¶¶†¤˜n>ÞÏéXޏ?t ÛP´‘íÇ_t\/t4q¼>a±88rÄ3gZ£S'yºÃz7oÞDddd½íÿñ~Ñšã@”öQG’@NN::=˜˜Kw("­¢¢›6m¢; ¾IJJ±cǾž àõë×€²²2œ:uŠ÷ï_ýµÁ׈Û{ p[´&¡¶–Ew(mVYYƒ'O^ÃÁ´dmÊÇûys>>>Ú³œ‰ãñÓÑÈ6mdûñWG]/t4q¿>¹|9¹¹¥X°ÀŽîP„BSÇ:\¹raaaõ¶ÿÇûEkŽQÚODIfHˆ!CtðüùºÃ $ÊÊÊ:::HNN¦9"z¸ºš¢ªªÁÁ)t‡Òfáá¯Àbq`kK’MiÍ~þññÑžåüE¶¡h#Ûh q¾>©®fbÏÌ›g MMUºÃ Më·ýB‘d†„<¸/¢¢Þ€ji“g>)**‚³³3öíÛ---¨©©áôéÓøñÇ¡¦¦MMMxyyñž‹#F@AAðôôlÓraaayyyáæÍ›€‚‚¸ººâüùóPUUÅŒ3°wï^Þë 1tèP”––6ú;5pà/›Í¡;”6±µÝNmÙr‹î0%ÈóSkžûñ~ž››KÉÉÉñöå´´4JUU•òõõýìøøôü”œœÜ¢å4ô{µ÷øIHH ZüüÖjÍòùõÙ iÛPŸ7­Ù~>>>”––õòåKª¼¼œš0aµdÉŠ¢È1ØAn¿3fP3fÌhñóùu½ÐÔ¾ÐÔcMš"¬×'­}ÿ[«  œ24\K:ôP`ëè(T^^^‹žÛÔ>ôéöŽŽŽ¦äåå©«W¯Rïß¿§öïßO öïß_oû¼_4u|Š_×±­ùýÛ¢5ËoêØÔ1úã?RsæÌ¡(Š{].//OÍž=›¢(Šúûï¿) ‹öÄûDx®ò b±Ø”ÁÏÔ… aíZN[¾, Þ½{GQE¥¤¤P222“ɤ(Š¢¢¢¢( Š¢(ÊËË‹}z½×›››7›Ìhì8ø¿®c…-™ÑØ9°©cÔßߟêÝ»7EQµhÑ"jÙ²eTß¾})Š¢¨ùóçSëÖ­kO¼OÈ4 Á`HÃÚZÁÁôÌûêÔ©@JJ òòò‘‘áý¿Nzz:’’’ ££ÃûãååUoÊGK–“••ƒzë744Dff&@ZZZZZ999Lœ8ÿþû/^½z…¸¸8|ùå—þ jjj¼ÿ‹zG]]]ÈÊÊòþoff†ÜÜÿ Ŷäýq{¯ÀÄD ½zuÉ©&ÁÁÉPP…¥eºCá»Öìçm=&45ÿkeÛÔs?>?µg9âtüð볡-ÏýÙ†m3nÜ8Lž<666èÛ·/¾ûî»Ï†“í'üøq½ÐÔ¾ÐÔc-9t$aÞ¶þþ‰¸yó9vîœ Ùæ_ FZr®©“ SSÓz?311ivÍæý¤=:6uŒŽ9eeeHIIAPPV¬XŠŠ ¤§§ÃßßcÇŽmW<$™!A ñèÑK°ÙÂ9_KEE¶¶¶HOO¯÷çèÑ£­^ÎÛ·oëý¬¨¨]ºtðùÉdêÔ©ø÷ßqñâE|ñżdIðéûTPP€nݺµ{¹•••í^†¸ru5‡¯¯èµh J†µµ.äåeèE¬‰ËÅ?ñ볡£mXEQØ»w/ŠŠŠpåÊTWW7yÓ€ndû5Œ× Mí M=ÆÏs€8_Ÿ¼_‹uë®âÿ;;É+ÔÝšsM×®]QPPPïgŸîã Ôu³¨kê•••…³³3<==QYY }}}888àܹs(//‡µµu»ÖM’ÄÎÎ¥¥Uˆ‰ÉjþÉ4pvvFHHUUU2d®_¿ÞªåŒ=<@ZZnñž«W¯ÂÙ¹á"H£GFnn.:„Y³fÕ{ìÆˆ‹½»è-•žžŽ;wîà¶‘ú믿0f̘V-CVVeee(..DDD 55µÕ±ˆû{]ÇÕÕ II¹HOoþCSXp8‚ƒS`o/yG¢Bœ~}6;q݆»v킃ƒddd`ii‰Y³f!''‡î°øN\·_~\/4µ/4õX[Ï’v}²cÇ]”—¿Ç¯¿N¢;Z´æ\3jÔ(xyyñFUÄÄÄ 88¸Ùu4uˆÊ~"Í£cÆŒÁ`gÇmìää„ýû÷ÃÍÍ ÒÒíKGd†ÑÕUG¯^]áç—@w( Ò××Ç–-[`mm gggÀÌÌ Ó¦MkÕrˆU«VaÈ!pqq©©)&Ož 77·Ÿ/++‹I“&AAANNNõ[¹r%¯¯8²¶¶Æ?ü{{{ oß¾X´hQ«–ѯ_?XYYaðàÁ˜8q"V­Z…#FðWWWDzeËðìÙ³&—#îïu+«þPQQÄýû¢ó÷âE&JK«$òN µôøhŽ8?üúl² ›6{öldffbÀ€pvvÆÔ©S±e˺Ãâ!Û¯eøq½ÐÔ¾ÐÔcm=HÒõIPP2N Á¶m_¢GÎt‡C‹æÎ5oï‰'bôèÑ011££#ÆßèMÏ5uˆÂ~"(Í£îîî(++«—Ì(++k÷¢¨îÕIÐê—_n 88kÚôúüü|$&&ÂÁÁ¿}$;;ñññÐÖÖþl>[k¤§§#%%:::ŸÕÐøÔܹs¡¡¡;w¶y}-!è÷ÏÓÓ3gÎlU Þêêj„‡‡£K—.Ôб‹üü|XZZBEEå³å5tàÇqÐR­ýýé^¾ ?§ˆ÷)™ü,aÜÝÍqâDÒÒ Ñ¿¿Zó/ ¶¶6´µµÛ½œº4M),,Dhh(®\¹‚¨¨¨v¯S)((|Ö‡½µddd0räÈSSSƒ‹‹ ïÿt\ 77sxx\@iiTU•è§YI°·o:!HüGZZºÅûù§ÇG[—# øõÙÐdò—¼¼=äææÂÏϯÑç›››ÃÂÂBì¯OÖ¬¹YYvì˜Lw(´kjjèX777‡¹¹y£ËkèÀã@\uäçt2ÍDÂXZö‡šš2îÝ‹¡;¡ðúõklÛ¶ ûöíkvôAð‹½½ i‘(úî] ¢¢ÞÀÞÞˆîP‚ ‚GVV=zôhô’’ðß,h¯‹Ãqï^ öïŸEºÃ!ˆGFfHii)¸¹™ãÆ(,[6Šîphgii‰'OžÐ!aTT0|¸.<ˆÇÔ©Ãè§IaaÜH¶¶$ÙGA=z4ZMÄÄdbýúkX±b4FŒÐ£;‚ ™!&OŠ„„$$ˆ_5q‚nnæ LBm-‹îPš” -‰-(FA¦¤¤ œÁðáºXµÊ•îp‚6$™!†ÕŽN\¾Iw(!±\\LQUU‹ààºCiRPP2™bBAB‚Íæ`éÒ¿þù  òuŽ\dï—@RRR˜2e®_‹Å¡;‚Hššª07ï__ámÑš™YŒ´´BØÛ“–¬A! öï÷EXX*Nœ˜‹nÝ:ÑAЊ$3$ÔäÉCQTô B‚W®®fxð ŽpµŽ­” EE9XZö£;‚ ‚x×®=Ãþý¾Ø¾ýKXXô¦;‚ IfH¨Þ½»ÁÞÞgφÒ AH,WW3äç—!::ƒîP” ]ÈÉ‘ZÑAA§¨¨7XµÊ ‹ÙcÆ kºÃ!¡@’lΜ‘ IÁ«Wt‡BÉÄD ½{wÊ©&l6½„™bBAtÊÌ,ÆìÙ'aoo„ ÆÓA ’Ì`£F™ wïndtAÐÈÅÅ ÷ï _2#::eeU¤^AAШ¼¼s朄ºº2Ž!? âcdì°“––¬Y6øã‡øùç1èÔI¾Å¯ \`D»IIIµóõ2PV¶AEE(ª†OQµMçΖ`2sQS“Ik‚âêj†S§‚‘žþ::=è‡'((ššª00èIw(­FÎOü¡¡¡!Ðåççç#??_ ë ‡l?Ñæéé OOOºÃX3fÌhÑ󪫙X°à4Š‹+qïÞ÷PR’pdÂ'11‰‰‰t‡!¶Dýý%É 7c†5öï÷Å¥K‘˜7϶ÙçwéÒ¦¦¦Ñ#GŽÄåË—ÛµŒÚZ6NžLFVV%¶n‡ž=•ø]ëQ…óç_":º&ô…££m±Š•Ut预û÷ã°x±Ýáðp[²ŠÖ¨ r~â/yù–'¸[K[[=zOòŽh²ýDÛŠ+0iÒ$ºÃh}úôiö955,ÌŸññ9¸|ù[hjªv@dÂ…|¦ÊÊÊ[¶(¾¿Ÿ¾RE g}¢ÃlØp ÷ïÇ!<|ddÈÐ5IVSÜ9'‰+W<`f¦MwH ( G`ÇŽ»˜0a öîý ²t‡ÅWK—^@^^®^]Fw(¸CZÍÌÖãС¯1qâ ºÃ!‚ ‰’›[ŠyóN##£^^K`nÞ‹îB=%ß\ ,X`‡ÜÜRܹMw(jkY˜7ïž?ÏÀ¥KK„"‘p§Ìxx8áï¿! &DVV Ýañ•››9"#_£´´ŠîPaa/ÁáP°µ5 ;‚ ‚(&ÀÝ}jkÙ¸wï{’È ˆ&d˜4i0öí»6›Cw8 ˜L6æÍ;gÏÒqéÒ·0@øz—ÛÛâÞ½ïÁfSpw߇ÐÐTºCâ#0Òðõ§;Ü)&ææ½Ð­['ºC!‚ ‰P^þßÿfÍ:;;Cܺµ}ûv§;,‚j$™AV­rEzú[\»öŒîPˆÆMdœÂÓ§¯áåõ-,,„/‘QGG§nÝZ#ô0}úQœ8DwH|¡¬¬€áÃu…¦EkPP2iÉJA€ÅâàìÙPØØlC@@"Ξ?þ˜ÙªÂü!©H2ƒô맆ɓ‡aÏÔÖ²è‡è L& œÁ“'¯áé¹6_Šn:ÉãèÑYø{÷ÖÔ½ÿüÈ [d(â¶.\¨àªJÝ­ZÅj­V[µ¶hë¸Þb­UÛªu^÷ *­Zm·Ô=®«Z'ˆT6!Éï@” Š–p¼_Ï“‡äœ“óý$•¼ó!!ýðùçûñá‡;PP`ø×lŸ>ÍpâD”àÿîßOCll*üý ZQM¦ÑhpäÈ ,Æ¿þµÇ·ÅÉ“Ÿ¢W¯¦B—Fd0fNHH_¤§ç`ݺšñm7=ŸR©Âĉ›ñ¿ÿý…;ÞCëÖ „.©ÂD"¦Ní‰-[&à·ßn!(h9=ʺ¬¤W/_äæâĉ(Aë8~<ffÆxí57Aë ""ª‰Ôj ¼†ÀÀ%xçðövĉ³1~,-ë]‘Aa˜A:uëZaÊ”X¶ì7$'g ]é‘R©ÂäÉ[qæL4¶oŸˆ6mÜ„.é•ôèáƒC‡f °°}ú,Źs ]Ò+sr’£E W9"ìP““'£àçç ™L"hDDD5Inn!6o>ƒnݾÂĉ›ááဈˆO°n]0ÜܸÔ1Ñ«`˜A¥LžÜ¶¶æøüóŸ….…ôD©Táý÷·áĉ(lß>mÛº ]Ò?âæf‡¦¡}{¼ùæjlÚtZè’^YŸ>ÍðßÿÞ€Z-ÌŠÙEEjœ9nÝ8_Qe¸{7 @›6ÿFhè~øùyâøñÙX»v,||œ„.È 1Ì RŒ¥øòˡسç2ŽºªdEEjL™² ÇŽÝÆöíÑ®]C¡KªffÆX·n,fÌè…yóö $d7”J•Ðe½´>}š"55/ÆÒþ•+÷¡Pä3Ì ""ú22r±yó ° ]»~‰ƒ¯aÊ”¸|ù_X´h<=„.‘¨F ]U?Ý»7Æ A­1kV8Ž›SS#¡K¢J RiƒŒß¿;&¢}ûšd”‰D˜>½||êჶ#**ë׃½½…Ð¥U˜·w]4lh#G® òçsòdœ­ááÁ_²ˆˆˆ^†J¥ÆñãQؽû޹™L‚þý[`Μþhß¾!D"‘Ð%Õ8"F#LfªÖÒÒ²á￯¿Þ_}5Lèrè* 2~ûí¶oŸˆŽ=„.I¯îÜIDpðaÓ¦ñhÖÌEè’*láÂ8xðΞSåm° ;añâáUÞ6‘¡Q«5¸|9‡]ÃÞ½Wœ¬@ûö 1bD;ôï߂˫é×%3¡2ÙÚšãÛoß¶mçpèÐu¡Ë¡@¥RãÃwà·ßnaË–ñ5>È´=œOOG-ÇÞ½]R…õíÛ±±©¸}ûQ•¶«PäáêÕèÒÅ»JÛ%""2$Eøý÷Ûøä“ÝhÙr>‚‚–ãĉ;3Æ.ÌÞ=S1bD;DU€ÃL¨\M0~||ôÑN4oîggk¡K¢—¤R©1}ú8|ø6mz;מªr¹)v예ÐÐý˜:u;nÝz„Ù³ûA"©Þn«Võáèh‰C‡®Ãǧ^•µ{êÔ@×®µç!""ª…"¿ÿ~‡_DZc·‘—§DÛ¶î˜2¥'úôi† l….‘¨Vâ0z.¥R…×_ÿffÆøñÇ)Õþƒ =¡R©ñÑG;qàÀUlÚ4¾VOê¸{÷EÌšµ:yaÕª1°´4º¤çš5+W¯>À‘#3«´Í7âðë¯3ª¬M""¢êH­ÖàæÍxœ<…'¢pþü=H$btéâ¾}›!0ж¶æB—ITÛ]b˜A/ô×_ÉèÝ{)&O3û]U€J¥ÆÇï¾}`Ó¦ñð÷o,tI‚ûãû?~Ìͱyóøj=Éåñã‘9r-.\˜—ªéÕ¾}(† y !!}«¤=""¢ê$.î1NžŒÂÉ“wpúô¤§çÀÅÅ]»6B>ð÷oÌIñ‰ª†T1»v]ÀÇïÂ?¼W«†*"µZƒ™3wbï^mѽ;ƒŒII™˜0a¢£“°råôìé#tIe*,,BóæóðñÇ}1aBW½·“‚Nþ{÷~PãV¹!""*‹B‘³g£‹{_ÜALL ,-Màçç…®]¡[7o¸»Û ]&•aUÜŒ? "â˜77;¡Ë¡2h4|üñnüøãElÜ8¾Ú~XRaaBBvã§Ÿ.cöì~xÿýÕr¹´É“·"55 ááSôÞÖ¦M§ñÕW¿âÆ…É$zoˆˆ¨ª%&fâÂ…{¸p!ÿûß_ˆŠJ„H´iㆮ]¡kWo´hQR)‡T†TqJ¥ £F­E||ú¨ÚÏ;Pͻ۶Åúõãè+t9ÕÚþs¡¡û1p`+,]ú&Œ«×|Èû÷_Å”)ÛpíÚç°¶6Ók[ÁÁ›7×k;DDDUA£ÑàîÝdœ?.ÜÃÅ‹1¸? FFR´háŠví¢}û†èØÑƒ«Ž.†ôrÒÒ²1`À2¸¸XcÇŽ÷ø-n5ºëÖÀêÕcп ¡Ë1'NDaÒ¤­ðôtÀÆïÀÞÞBè’t²³ дé\,Z4 #F´Ó[;J¥ ¾¾sðÙgÜIoíéKnn!n܈ÃåË÷qþü=\ºƒôôXZš ]»†hÛÖíÚ5D«VõadT½¾¼ ¢WÆ0ƒ^^LL úöýAA­±hÑ0¡Ë!K—Æwßý†o¿} C‡¾&t9åîÝdŒó(•*lÝ:¡J—C}‘Ñ£×A&“`Ó&ýõ˜8þ Z3g>ãØ`""ªöŠŠÔˆŠJÀÕ«påŠöˆ¢"5êÕ“£]»†ºžÕ…X\ý†’Q¥¸Äh’^š»»=Ö¯£F­…«« ¦Ní)tIµÚªUGñÍ7ÿÅâÅÃd¼OO<8&lÂÀ˱jÕÛÕfˆNß¾Í0oÞ^äå¢NýÌ ~âD\]mdQµ›Š+WàêUííúõ8äç+aii‚-ê#0° >ù¤ZµªGG+¡Ë%¢*Äžôʶm;‹Ù³Ä×_èQ….§VÚ°á$æÍÛ‹ÐÐA?^ÿ«^ÔdJ¥ Ÿ~ú#vî<Ï>ë÷ßï!tIHIÉB«VÿÂþ3}û6ÓK¯¿þ-š6ua/+""”J¥Æ½{)¸y37nho×®=DFF.Œ¥hÚÔ-[6@‹®hÕª>6´¯–xQ•aÏ zuo¿í‡ììÌžý#ŒeìPÅ~øá˜?æÎÀ £Èd,Y2ÞÞuºÑÑIøúëá‚Î coo6mÜpøðu½„¹¸v-®Z7DDT{ää 22·n=Âñ¸y3·o' /¯2™;Á××}û6C«VõáãSó´Ñ3fÐ?2yrwäæ`ÆŒ`b"ãÄ“UdÏžË ÇGõâÑJ6qb7xx8`òä-ˆMņ ïÀÆF¿«‰Í°bE”JU¥ÿ"wòä@—.Þ•z^""¢ ˆŒL,îq‡7â› µZ¹ÜM›º ];wŒ×>>õàååÈà‚ˆ*„ÃL¨R„†îÇúõ'±aÃ;h"t95Ú¯¿þ‰I“¶âÝw»bþü ¡Ë©±"#¼b±›6G£Fu©#66~~_`÷î÷ѹ³W¥žûãw!**L«ÔóQ퓞žƒ[·!::‘‘‰ˆŠJDddŠ<@ýú¶ðõ­__g4mê __g8;[ \50®fB•C£Ñ`îܽ ;‡Í›' [·FB—T#EDÜÂøñ1z´.ı¢z–šš 6!2òV¯‹îÝ RG_ÃÏÏ ®Ôó¶mû9Þ|³fÎìS©ç%"¢šK¡ÈÇ; ˆŒÔ†wîh¦¦flmÍáããoïºhÜØ ÕE£FN°´4¸r"ªafPåÑh4øøãÝøñÇ‹Xµêm¼þ:‡œT¦Ó§£ñöÛë0hP,]:‚AF),,Â'ŸìÆž=—±`A ó“|ýõ!ìÞ}/ί´?÷»w“Ñµë—øùçѶ­{¥œ“ˆˆjޤ$¢£“pï^ ¢£“p÷n¢£“ðèQÀÒ²NqPQ>>NðòÒþ´µ5¸r"ª%8(U‘H„%K†Ã“&mÅW_ å*'•ä?î#8x=úömŽÅ‹‡3ȨBFFR,[6^^Žø×¿ö!:: T*®²úôiŠï¾û/®_C󿮕rΓ'£`ii‚Ö­TÊùˆˆÈð(•*ÄÆ¦":: ý•Œ»w“‹Œd(ùkk3xx8ÀËË]»6‚¶·…““\àꉨ¶c˜A•J$aÁ‚7 —›"$$¹˜2¥§Ðe´¨¨DŒ»~~žX¶l$$’ªûMOLÚøàƒíxø0ëÖÃÌ̸JÚnÖÌÎÎÖ8|øF¥…'ND¡S'/^ODDµ@RR&îÝKEll þú+wï&ãîÝ$†_…"{÷~PeßþSÅedäbìØõ¸s' 7¾ƒŽ=ôÚ^Q‘Í›ÏÃ`òäîºíùùJ<|˜//Ç2ŸWW˜˜ÈtÛ¾üòW8pgÏÎÑkÍDDôr ‹ðða:îßOÃýûixð ­Ôý’ÆÆR4lhww{]PQ`Ô­k%ð« "ª\Í„ªÆÝ»É;v= ”زe|}….Ip……EeöT)((ÂÛo¯CttöîýnnvTGQPP„?Ü#Gn`Ù²‘ j¥×ö¦Oý{©øÏÆ""ê˜n IDAT⺎£GocÀ€–X»vl™Ïyï½-8pà*zôðAß¾ÍÐÁÁвe}|ùåP½ÖKDDÏ*é]¡ *RK…‰‰™P«µ¿šÛÚš£AÛâ›4°EýúÚÇNNV¾KDµ‡™PÕðôtÀ¯¿NÇ{ïmAPÐr,[6ò¹K·Áظæ^žII Œ±?üð^©ÙÀU*5Þ{o ®]{ˆ½{?dQÍK±zõ|þùÏxÿýmˆŒ÷ßïQîñùùÊR=$*J£ÑàÆxÉ’¢@ëÖÿ†X,BIý¼‰HKö?‰'¢ Vkàêj¸~=M›:ób"¢J”’’…‡Óÿ¦#..½ø§öqnn!@&“ÀÕÕ Ø¢Q£º lª /ê×·…¹yÕL2MDd¨jî§EªvärSìØñæÏ߃‰·`úô@|ôQïgVSÐh4x÷ÝMxë­èÛ·™@Õêך5ÇpçN"‚‚–ãçŸ?„““3gîÄ©Sw°{÷døø8 ]&U€X¬]ÁÇÕÕ üŒ¸¸t„†~æºÞ½û"ŽĪUoWè¼·pðà5DDÜBZZ6d2 ŠŠTÐh•JdI!—×)÷þ12‘¸¸tÐö¬¨WOggk¸ºÚ e˨_ß..6pq±†““R)—¿&"ÒΙA‚¹y3'nB‘‡+FÁß¿1.^ŒÁàÁßC¥RC*• oßfåÎ`¨¾þú¾ÿ>EEj€T*™™Š|¬X1 ƒ·¸Bú'._ŽÅرëÑ -¶lyffF \‚Ò¡R©am]'O~›‡tyy…èÙs1â⣨èÙ ŒŒ$ éWîð–U«Žâ믢°°ìçK¥¸¸Xã÷ß?áŠ9DT£åä >þ1=Ê@BB=Ê@||3‹ï?ÖM° VV¦pr²ÒNNVºàÂÕÕuëZ=Ó ˆˆª '%aåä`Ö¬pìÝûÞy§ ¸Š´´l¨TÚú"‘ëÖ}îü†D¡ÈGëÖ ›[Pj»D"†¥¥ "">)5‡¦˜˜Œµиq]DDÜÖ…/Òݾý}ú|Sf¯ @ûÍàçŸÂرÊÜ¿eËÌŸ¿÷¹Ï?|ø#øøÔ«P=DDÕQ~¾²¸E=ÊD\\:’’Ž)´†B‘§;ÞÌÌÎÎÖ¨WO''9êÕ“‡Vº¡! x‰ˆª5NJÂ233Æ÷ßF§Nž˜=ûÇâ¹Ô¥Žùä“]èØÑ³BßdWw[¶œFa¡ò™í*•YYº!' 4 ›»»=ö–áðá›(™«ŠŠTøå—?ñË/¢ÿ‡t>>õ°`Á˜;wÊÊžÕjÍ '-™ÿïD"í| 2ˆ¨:+,,*îM¡ò‘˜˜Y*¤HHÈ@zzŽîxœ­‹C +4oîª )J¶[ZšøŠˆˆ¨20Ì jáñã\¨Têg>ti4ää"$d7Ö¯'Pu•#/¯«VÕ /ù»¢"’’¥&%Õžž„„ ˆDÚ9*þ.$d:vô€­­ù ÏÜ GÞÆÉ“QÏô°P©Ôº¹9ÊbjjôL@h{dtíÚÁÁe÷è "Ò·ÂÂ"$'g!11))Ú3SR²t?3‘œœ…´´lÝsŒŒ¤Å½)´C>||œJõ¬pt´ª_~Ñ‹1Ì Á]¼ƒ/¿üµÜo•JºŽ®bÀ€–U\]åÙ¾ý²³ ž{LQ‘ qqñÖ[kqäÈ̽ø £GwäÒo5œB‘‡ˆˆ[øõ×k8zô ‹ ‘”ìD"V®7Þh]¡s>|˜ŽîÝ¿Fnn! ®\ù7-Ë<6)IV­þ@SS#;WW›JxeDT• Št=&J‰¤$Å3=*JzY<ÍÄD[[s8:ZÂÖÖ¶¶æ¨[× ¶¶fÅ۟ܯȤÄDDDÕà ª¾’’2qøð 8pçÏ߃Z­X¬ýv»U«úøõ×B—øBjµ..Ð1ŽŽV˜1£†o ##Žòªmòó•8q" ‡]áCב••™L¢[¡äêÕÏ+Òíß“&mDE}YnÏž¬¬|4jô)`Íš18Ðpz5Õt Ež.|( 'RS³‘žþä¾v{æ3H›™ë ;»§ƒ ‹âûf°³³€ƒƒ%ÌÍË_¾™ˆˆÈ@1Ì a………aÔ¨Q/мâ[>²²žü, (þVü}@;Ÿ„6ˆ0…••6Œ°²ªƒ laeeª (ž+´Çiï‹Åœ/ˆˆˆˆôa”»wïâôéÓº”J•““ƒeË–á³Ï>ºª"ú¼–þùg899¡]»vÏ=.>>Û¶mCÿþýÑ´iÓRûªòšT(ò°eˬYs k‡Ô–0ãö§6”ÈÊÊGffž. Ðn/}|vö³sHÚ!––&°°0¥å“ ÁË˲øñßC‰'Á…¥¥I¿ DDDD/a”ÈÈH¬Y³Æ ÃŒ &`Μ9pwwf_VVæÏŸÏ0£Ñ絎×^{í…aƘ1c`oo7Þxã™}UqM&%ebݺؼù4”JŠŠÔ`«Fdeå#'§99ÈÎ.Ð… ÙÙÈÉÉ/Þö$pÈÎ.(V”„e ÓÉ$ºâÉÍööðôt€……ö±¥eâãJkaaÂy$ˆˆˆ¨Æ«þ¿1Õ‡ÆÔ©S….ƒHçÁƒøâ‹/иqã*m÷¯¿’±råQ„‡_„X,‚R©*µ¿  ÙÙ077®Ôvsr —§DNŽ6|ÐÚ[Iomð¯ÛW²‚ÆÓÛмrÛ055‚¹¹1ÌÌžôŠ077†¥¥ œ­Ÿé-ñ$xLÔ©cT©¯›ˆˆˆ¨&b˜AG­VãÃ?ÄæÍ›abb‚3fàÓO?EZZFŒ~ýúaÉ’%P*•X´hnݺ…-[¶@*•âÛo¿Å›oj»¯GDD`Ú´iˆŽŽFÓ¦M±nÝ:¼öÚk€ãÇcÚ´iˆŒŒ„»»;-Z„   ]ãÆÃüù󑘘ˆaÆaÆ H$˜;w.Ö®] …B???lÛ¶ ...1b’““1bĬ_¿]ºt)óµ­_¿¡¡¡HMMÅðáñaÈÅâ*{o©jUÖµ¼sçNÌž=IIIèÝ»7Tª'áÀõë×1iÒ$\¾|õë×Ç‚ 0räHŒ7<À˜1cðÝwß¡_¿~eÖX™×ä•+°bE޹‰D •J •ªìcïßO…““¼¸·C>òò ‘—§DFF.rs ‹C m/‡’Ç Ers ›[ˆœœB(yÈËS"/OÛK¢œÔÔÔR“““accóRç°°°@FFF©m{öìAff&,--Ÿi#-- VVVÏ=§F£ÁÒ¥K‘––†ððpäççcÈ!/UÕ.•q-[[[#99¹ÌóZZZ¢K—.ˆ-u[½zõ?+¼ÜÜìP ßáÁƒ¥øõ×øì³þŽ-´KJ¥bH$Ï$"‘v¥""""¢ò0Ì ƒ‹_~ù€vùȵk×Vø›æØ¿¿îCàùóç1zôhH$â·ß~ý{÷IIIøé§ŸðÜs.Z´þþþJ¥h׮ƌƒG•{ü¾}ûpãÆ—ª›j–ʸ–{öì‰;w"!!píÚ5œ|ˆæÍ›# ÇGhh¨n¿ƒƒ¦NŠË—/ÐÎm°oß¾—¨Æ¨Œk9((hÒ¤ ºwïŽè‚7///„††¢C‡€··7š6mŠ#F”y®ªº&Åb7v¸q±víXܸгgç`éÒ71hPk@FFŽÞë """"Ã%Òh4ϼL¤Gaaa5j^ö2ÌÏÏǹsç`ee…Ö­[¿rûÑÑш‰‰\]]Kí‹Å;wàææöÌå)((À… ŸŸ-ZÀÁÁA·/%%W®\AÛ¶mammýÊ5—gÔ¨Q€;vTú¹©b^åz®¬kùúõëHJJB»ví`iiYj_||ggg8;;ÿã6ªƒ """"z3!"""""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒ"º">|¸Ð%¼ððpŒ9Rè2¼žK„‡‡ ]ÕP 3HPõë×ǰaÄ.£F6lÚ·o/tµZu¹žOŸvF£FaoŸ+hÕá½ """¢šI¤Ñh4BADD•§^½X¹òm ÔZèRˆˆˆˆˆôáçÌ """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ 0Ì """""""ƒÂ0ƒˆˆˆˆˆˆˆ à """""""2( 3ˆˆˆˆˆˆˆÈ ˆ4Fè"ˆˆèÕ¼ñÆ \¸p¯BÇ^¹²ŽŽVz®ˆˆˆˆˆHï.±g‘4¨u…Ž«_ß–AÕ 3ˆˆ Ø€-!‘ˆž{ŒD"ÆÔ©=«¨""""""ýc˜ADdÀllÌЩ“ÄâçÿsÞ¿‹*ªˆˆˆˆˆHÿf¸¡CÛ¢¼é$1üýC.7­âªˆˆˆˆˆô‡a‘ëÓ§d2I™û4 † iSÅéà ""gnnŒ^½|!•>hÈdôêÕT€ªˆˆˆˆˆô‡aQ 0hP¨TªRÛ¤R úôiSS#ª"""""Ò†DD5@Ïž>¨SǸԶ¢"5† yM Šˆˆˆˆˆô‡aQ `d$ÅÀ­JÍannŒnÝ X‘~0Ì "ª!n ¥R;ÔD&“ (¨U¹ƒ2†DD5DÇŽ°¶Ö.ÁªTª0x0W1!"""¢š‰aQ !‘ˆusdØÛ[ }û†WDDDDD¤R¡ "ªinÞ¼)XÛ-ZX<<¬qûö-Áêpqq•••`íQÍÆžDD•,%%)))‚´Ý¸±=êճĘ1­iоþüü|ÁÚ'"""¢š=3ˆˆôÀÇÇŽŽŽ‚´ýé§ðÆÂ-ÉzüøqÁÚ&"""¢Ú=3ˆˆj˜’y3ˆˆˆˆˆj*†DDDDDDDdPf‘Aa˜ADDDDDDD…a†DDDDDDDdPfQ¹&L˜€˜˜¡Ë """"*…a•ëðáÃÈÌ̺ """"¢Rf ,""¾¾¾022BëÖ­qéÒ%ݾ~øžžžJ¥prrÂâÅ‹uûæÎ {{{£{÷‹«Ð¾ëׯ£S§N011··7ÂÂÂÉÉÉèÝ»7¶nÝ ¹\ŽfÍš!99#FŒÀ©S§ªà """"ª†DDŠ‹‹ÃàÁƒñÅ_ 33C† ÁСC¡Ñh••…qãÆaÉ’%ÈÉÉÁ®]»0{öl¤¤¤àÈ‘#Ø´iÎ;‡ÔÔTXZZâ‹/¾€çîËÉÉAïÞ½1räHdffbÍš5˜† òÂ}–––èÒ¥ bccKÝV¯^ ‰DUøê‰ˆˆˆˆ^ à ""bÿþýHNNœ?£G†D"A\\š4i‚.]º@"‘àܹsP(€E‹ÁßßR©íڵØ1cðèÑ£î À©S§pûöm@nn.Ú´iƒ½{÷ ðꉈˆˆˆ^ ‡™ ì°±ïIDAT¨{÷î9r$|}}Ñ¢E \¼x‹/†¹¹9‚‚‚ŠnݺÁÈÈ2™ 6ÄÌ™3±råJ¬[·Í›7‡ƒƒ.]º¤[édìØ±åîóòòBhh(:t耶mÛ"22~~~1b„.ðxšƒƒ¦NŠeË–¡M›6UúÞ•G¤Ñh4BADT“?~>>>ptt¬ðs¢££¸ººê¶+ \¸phÞ¼9>|ˆ{÷î¡[·n(((À… ŸŸ-ZÀÁÁA÷¼çí€øøxܼyÎÎÎðõõ-·®””\¹rmÛ¶…µµµÞ^?ÑK¸Ä0ƒˆ¨’Õöóµýõ‘Þ]âœDDDDDDDdPf‘Aa˜ADDDDDDD…a†DDDDDDDdPf‘Aa˜ADDDDDDD…a†DDDDDDDdP¤B@DT¥¤¤@,f^LDDDD¤ 3ˆˆô 55©©©B—ADDDDT#‰4Fè"ˆˆˆˆˆˆˆˆ*èû@‘Aa˜ADDDDDDD…a)€?….‚ˆˆˆˆˆˆˆ¨‚Žþ?[žëSIEND®B`‚bm3.7.0/doc/html/a00132.map0000644000175000017500000000044511365042632013233 0ustar tlktlk bm3.7.0/doc/html/a00224.png0000644000175000017500000000372311365042647013254 0ustar tlktlk‰PNG  IHDR˜(3TbKGDÿÿÿ ½§“ˆIDATxœí›mH“ßÇ¿Út‚bZ̘‹´%¡IM+SkVô6² ½³±d/œ”†½¨Èb–L­e >„VNÉ"³'¨¬œùˆæ•é|خߋþÿý[{pwîî÷'ÎìœsëºîÃw÷¹vßêEDƒ'¼ÿí7L` ^acðŠÀÙ„^¯ÿ“y0þd2–,Yb;HNÀkœšN§³Ó‘Ó;èt:ì߿ߕ ƒðòòr8Îj0¯01x… ŒÁ+L` ^acð ƒW<"°> ¨¨È®<Æèè(òóó=f÷§0 Ðh4èîîæ´Žˆ Ñhðøñc»¹ââb<þÜS)rÃÕƒVGÎQYYI2™Ì-Û?…Ñh$©Tê1»Ù8|ø0uttÌÙOBBy{{“Z­æ´nzzšPXXÙÌ%&&’V«sn®p¦—¿öˆ Ç»wïukïæÂ… Ðjµxòäɬ¶³åã¸ÞòQYYI^^^”™™Iß¿'ƒÁ@óçÏ'½^OýýýäííMÙÙÙd±XèÒ¥K€Îœ9C‹…òóó)22ÒêëîÝ»tþüy‡}.¾ŒF#ùûû[×ùúú’R©¤ÉÉIêèè    ª««³±«©©¡ÐÐPzÿþ=}ýú•víÚEG%"¢±±1‹ÅtñâE2™LT__OÔÜÜL£££$‹éþýû455e·??~¤ãÇÓ²eË\îctt4]¾|™ˆˆRRR(33Ó­ý'úßi4I£ÑPLLŒ5gGdyy9ÅÆÆRQQ™L&·c9™^<&°àà`›ÍU©T´{÷nêïï'Öº ½½MOOѳgÏhÑ¢EnÅáâëW ¾¾>«¯ 6^¯·±«¨¨ ÐÐPzýú5ýÕèè(•••ѪU«lòIOO§ŒŒ ""’H$ÔÖÖf³X,T]]MÛ·o§¨¨(*(( ááa§×öâÅ òõõ¥‘‘""Òjµ$‘HÈl6»µ7? ljjŠbbbH£Ñ‘묥¥…8@‹/¦“'ORWW—[ñ~Å™^\¾ìæBDD|||¬ýèèhÔ××[ûþþþ~¼ …Ö>W~×—X,¶~vd»cÇ444`íÚµ BJJ T*‚‚‚ÐÙÙ‰·oß"<<Üj?11mÛ¶Ùùijj‚R©ÄòåË‘‘‘M›6Íš›N§aõêÕ~_½½½xøð!’““]®ýhµZlܸ©©©.me2d2††† Õj‘””„•+WâöíÛœb:Ãc5ØÐÐMpp ,ð”û?¡  ÃÃÃÐëõ0™LØ»w/ 00 èìì´i………v~|||  ñùógŒŒŒ`fffÖ¸¥¥¥ÈÉÉAUUªªªpïÞ=$%%Yë<®Èd29rJ¥äÆ¿]˜Íf~+¦#<&°ÎÎNTUU¾}û†+W®8üvÏFkk+jkköù$//IIIX³f ÒÒÒÐ××Ëå0 xóæ `||±±±¸s玙L†¶¶6äææ¢¼¼‘‘‘P«Õèííu·±±P*•ˆŠŠ²¶´´4”——cjj PQQ—/_º}=¹¹¹0xôè‘S›@¡P >>D„¦¦&\¿~Ýí³á1ÅÅÅ!33‰‰‰J¥ ƒR©ä째¸jµÚiŸO<ˆîîn¬X±r¹ûöíCNN`éÒ¥ÈÉÉA\\är9¤R)¢££¡P(!!!8vìZ[[­þÖ¯_7n ¥¥°eˇqu:¶nÝŠàà`›ñ={ö`||ÕÕÕ€ŒŒ NGW@@ 1==ípþÖ­[P«ÕHMME{{;T*D"‘ÛþÝ‚kÑæŠ‰‰ jhh ÖÖVNëøÀl6ÓÐÐg;“ÉDTWWGvö===T[[ký!ð_©¶¶ÖZ¤;bff†ÃØóéÓ'ÊËË›“Ÿ™k>?ãL/+òÀÏÏsAÊÞÞÞX¸p!g;¡Pˆ„„§ö‰‰Än\$aóæÍ.cÍ›7oÖ|\qíÚ5þ…ñ\óq ŒÁ/ÙÙÙÿv œùk_1þ?`cð ƒW˜À¼ÂÆà&0¯01x… ŒÁ/®ý³Æ—ÆéUÑÍ›7M1‘Édvc^ÿ¹[1¼Àj0¯01x… ŒÁ+ÿ>*‘RÇkà1IEND®B`‚bm3.7.0/doc/html/a00239.map0000644000175000017500000000076711365042650013252 0ustar tlktlk bm3.7.0/doc/html/a00254.png0000644000175000017500000003304311365042652013251 0ustar tlktlk‰PNG  IHDRˆègëbKGDÿÿÿ ½§“ IDATxœíÝwX×þ?ð÷.,KgA: Ò,T ((*zÅ1`,Á‹¹šXBÔ°M¬‰QI¢ÄòUTò³""ŠQP ‚€ÒDé=¿?¸ÌeÝÂ.RÏëyðqfΜùÌìÏœ93³,BEQEIï6»»# (Š¢Þ=4yPEQ2£Éƒ¢(Š’™üë3rrrpóæÍ¢¨äääccã­³¶¶Z'Õ1ÔÔÔ ¨¨ØeÛJׯ_‡ŸŸ_—@QT燯¯o‡ÖYVV†´´´­“êìÞäтބEQï.‹Õ©õ»ººvjý”l®\¹ÒåÛ¤cEQ”Ìhò (Š¢dF“EQ%3š<(Š¢(™ÑäAQEÉŒ&Š¢(JfboÕ•Fff&®_¿Ž9sætP8o—W¯^!,, Ë—/ïÐzÃÃÑ••%r™¥¥%|||Ú¬cß¾}xþü93Íf³add„)S¦@CCƒ™_WW‡ÈÈH$%%¡©© vvvøôÓO¡®®Žèèh444`úôéLùË—/ãÁƒX´h3/-- ÑÑÑX±b.^¼ˆ³gÏ¢¢¢¦¦¦˜3gúôé#Óþ×ÔÔ <<·n݋ŰaÃàëë 999©ân±yóføøøÀÄÄDhçÎ{ã8©Ž±qãF466h¾…˜Çãa„ 055eÊHú,¥i @ÛíjãÆðóóhÿüó"##áçç'8mµ«£GB__£FBvv6>,²Œ3{öìAQQ‘ÐrSSÓ·þy»7êy}‰àÞ½{xüø1V®\)Pï† °xñbÄtäÈDFFbõêÕ˜={6´´´àììŒ'OžÀÖÖ)))Rï{^^ììì°ÿ~ôíÛÚÚÚ†——ólQ[q·øî»ïD~vAAAogg’¥-wV»ïJk×®ÅíÛ·‘——‡§OŸ"22VVV¸}û6SFÜg)m[¦]­]»OŸ>eÖÉÊÊ‚››*++¥JÒ´«C‡áâÅ‹šŸÆoùýlùIOOǪU«˜˜رcâââ„ʽxñBÆ£Ü ÈkÂÃɈÙ"9s†899IUöM‘»wï¾3õJËßߟøûû˼žƒƒÙ¹s§À¼šš¢££CvïÞM!ÄÅÅ…L›6466 ”ûúë¯Iß¾}ÉŸþIçÏŸB©ªª"ŠŠŠdàÀdïÞ½Lywww@ÈÕ«WêúÏþCfÏž-uÜ“&M"3fÌ |>Ÿ™WPP@x<9yò¤Tq×ÖÖBQQQ!ñññejkk;$ÎÎ$K›koû@ÂÃÃe^¯-BǼ-\.—\»vM`ž——™;w.3-ê³$Dú¶ M»jGvv6111!Ë—/—j¤mW'N$AAAbëñóó#vvv¤ººšBˆµµ5Ù¿¿T1HO Þ¸Üzã1>ŸE‹A]]ºººøá‡%%%pwwÇ?þCCCèèè`ß¾}øú믡££9r„©gË–-˜5k–ÈiÁÇÇ×®]“¹îÈÈHXXX@^^زe‹Èz‹ŠŠ0nÜ8ýõîܹƒ_ýUàr|ÿý÷¨¯¯ÇÓ§O¡¡¡7nh~JuàÀðõõÅùóç4¾III1bêëëQ^^.P×òåË U|yyyˆÅ¦M›ž€ÖÓÓÃï¿ÿ'UÜ'Ož»ÆÆF™ã”æs’Ô>_o7©©©†ŽŽ¸\.ÜÜÜ——@¸ÍÒ·ÏžD[[\.WbiÛ‚4íªµÜÜ\¸¹¹aúô騴i“Tñ¶§]½.44gΜÁñãÇ¡¤¤$Õ:oµ×Ó‰¬=‹E¾úê+RUUE®]»F444HTTÉÏÏ'l6›¬ZµŠðù|òË/¿dãÆ„Ïç“Í›7 ¦®S§N‘;vˆœ~õê100 ñññ¤¾¾^¦ºËËË —Ë%ÑÑѤ¶¶–\½z•°ÙlRTT$Tonn.QRR"ÞÞÞ$!!<~ü˜¨¨¨Bijj"#GŽ$[¶l!ÄÀÀ@ìá?ÿüCIÿþýÛ<†oÒóX³f ÉÈÈ äÑ£GdÇŽ¤wïÞ¤°°üüóÏÄÙÙYìú¾¾¾dñâÅdÒ¤IdÉ’%„B/^L–/_NnݺE´´´Hcc#ùûï¿ ‹Å"%%%dÞ¼y„Ãá>úˆ„……‘'OžÈstt4122’XFÚ¸ ¶*kœ'Nœ äÀÌ™ìë$µÏ×ÛÍéÓ§‰¡¡!ÉÈÈ ååådòäÉäóÏ?'„·eYÚ§,ð–õŸ ¹G£¦¦†ˆˆ¦Gþz›“µ}¾«nÞ¼‰sçÎáÂ… HMMEMMM›/X”¶-HÓ®ZÌ›7sçÎEee%BCCeÚ‡ö¶ÿââb|üñÇX´h¼½½…–ß¹s111?<)¶îðFw[€¹¹¹@ö±±A\\3­¢¢ ù. .— yyyfúMIS7—ËErr2V®\‰ÌÌL沎8l6†††"—™ššbÖ¬Yøý÷ßqáÂfþõë×+++,Y²cÆŒéôÓÍw|ñÅÌô•+WàîîŽI“&ÁÀÀ999b×ÍÍÍ… ÜÜܰlÙ2¤§§#;;Ç‹ÅÂØ±cqþüyfP‘>Ÿ777¸¹¹ž>}Š… bòäÉxòäI›û¬§§‡üü|B„Ê&$$ 77Wê¸ÅioœNNNprr‹/WWWØÛÛK¼DÖZëvãåå…Ë—/ãÃ?ǃ‡‡‚‚‚„.Ÿ²·ÏwUHH†ÎLGDD`öìÙxñâØlÑç°Ò¶iÚUËŒAAAøæ›o0dÈL›6 èß¿›ñ··]555á“O>™™sñºE‹½“w¬¾qÏãõ»ŠŠŠ ¥¥õ¦Õv˜˜˜!88ééé¸u딕•Å–—ô0//èׯ¶nÝÊÌçp8àr¹(..ÆË—/™Û»š««+ÔÕÕ‘™™ www¤§§#99Y¨ÜóçÏqñâEL˜0vvvàñx Áˆ#˜ëОžž8wîàææ†˜˜ØÙÙ Ôcbb‚ï¿ÿÙÙÙ¨¬¬l3>gggÔ××ãòåËBË~øáÄÅÅI·8ogSS!——‡ªªj›ûÔ¢u»!„`Û¶m())ATTjkkñÑG‰W–öÙS8::âÕ«W{‘Ò¶iÚU‹–6~üxÌœ9Ÿ~ú©T¿¯ímW«V­ÂÇqôèQæä¶§xã䑨ØXÍÝÌÝ»wKüå'99™¤5Ý^yyy°²²Âˆ# ''‡ÄÄÄ6/{ˆBÁœ9sˆ#GŽ`ëÖ­L×ÒÉÉ wïÞņ pâÄ XXX`Íš5xöìY»ãމ‰Áýû÷e^OII 066ÆÂ… áãデ2Ësssáíí OOO¦—áêêŠÈÈHŒ;–)7nÜ8$''#++ #GŽÄˆ#ðôéS8p@à˜„‡‡ÃÎÎŽ¹l )nuuu|ùå—@FF3?66gÏžÅܹs¥Ž»Eee%JKK™{{{©â|Ý•+WàããBpýúuø³f͸õ¹µŽjŸo»ÖŸS^^Ö¯_ÞØëŸ%Ç“ª-HÓ®DiIð!!!mÆ/mûoíÌ™3ؼy3vïÞ EEE}«©©aÊUWW ,+--EYYY›1u»×GAd0wvv&–––däÈ‘D__ŸŒ?žÔn]OFF3øL!wïÞ%zzzÌôâÅ‹nû}}zðàÁdذaäöíÛ2Õ““CtuuÉÈ‘#‰»»;?~<177'“'Oª777—ÈÉÉ1õdee1õnß¾¸¸¸¦¦&B!?ýô2dihh:.ÏŸ?'«W¯&ÖÖÖmCqæ&&&dÍš5b×u«.!Í·6¶ÔרØH–-[F¸\.±¶¶&ƒ " dΜ9Ì­‚„憃¿ÿþ[hÌtLL éÕ«166&NNNÄÀÀ€ 0€ îV2m¼Ã@{}}H£Éƒ’Í«jpÂç‘À‹3Y¬æØr€©‡&~¤ ýAÒ‘E‰E€œkeHÞ“iÕ`Ëü¦æE,9Œ†ªa|¨E÷Æø~¢Éƒ’Ýõ 9x|º„9ók­åŒPÄ «é:è7±Ô:öuçTÏGø@VÜ+ÜÙ“WYµ`±Y MÂímò¾~г§'*Ý€&Jvµ¯qÄëj% P²6»ù,Ñr¢†CžKoî£$ã7dž{‰;{ Pù¼`5'’×±åXеWÁ¤°~]$ÐW²Sí¡¨)!ó ´ó9_̹ùßå^_Eš8¨6½H«FôÌGšïö$-ß«'¿‰`È¿ º.8Jý¦ÚÅz†.”u8`IhA,9ÀÜS ƒæêw]`Ô;«W%ô®¿ŒŽÅfA{ 2Œ>ý}ôTנɃj9\{CÜï8[гW…ëZ€>2DIÅfaÜOf°œØKâI !ói¯£»ÑäAµ›étmUÀ–ÌlyÔ á´ØlÍ”ôXlF­5†ÅxÑ „Å4Maüß Õ}hò ÞȇËúŒ{°äXàjÈÁÀAçýƒ’ÇôBJ6,6 ½,AøN `@{³oš<¨7¢c¥ ‹ ½À–gÅn¾œ5áK¸|ݽú+áÿý'ƒ&J&)‡‹ð×ögp^b$Ða±XP5äÂtŒf÷H ÉƒêC¿0¿‘€ðq?™CËB òŠlŒýÉœ&J&)‡‹ð×Oyp^Ú¶Ÿê1—°€æ±Ž!ÿÖ—8BuúœÕ!îüžu#.,Æk Ìo¬åãÂÒæËW~µD¯þJÝ!õ¶H3u™ù„Op~éä^/ƒÒ`¡16ª[Ї©B ö:4M T[Ä%Ž„OPò¸Úé;¬Þ·iêN[_Âz~«{ßÈJ½}øMÙñ¥bð¿g;¨·íyP]†ßDè%J$~có[š©wíyP]‡&Jš8Þ=4yPEQ2£Éƒ¢(Š’MÔ[ß@‡ÞÞMõôsî)hò º]qj5Žüë!}°‡K9\„ÓsÓ…‚&ªÛiš)‚gÂ¥O¢÷`-ÏqXŒ×¢/Ëì!hò º}•IÏÖÖ€Ô»‰&ê­@HÏDGÏE“õÖ  ¤g¡‰£g£Éƒz«´N q+³Ào¢ƒ«ï¢’ÇÕ4qôpôõ$Ô[©±–ªÂzh˜(vw(T;½xT íÍï£Ú¸q#4/ÇÄ `jj hjjÂ?üSSSøùù ÕЦ¦&,Z´Hêí_»v W¯^ÅìٳѧOe›7o†LLL„Ö;zô(ôõõ1jÔ(f^CCŽ?Ž7n ¦¦ÖÖÖøôÓO¡££ ùuñ6l€‡‡œœœê;tèlmm1hÐ f^ii)*++Ñ»wo²HMM…ºº:úöí+Õ>…‡‡#++Kä1°´´Dcc£Äå>>>Ø·ož?ÎÌg³Ù022”)S ¡!ò[é[u)jÞ¼y bþuTÙÎÐÝÛo/EEExzzB__|>©©©HNNƵk×àèèˆÚÚZ())AUUEEEPRúß›—srrзo_"//OêmŽ97nÜÀªU«°víZeªªªˆ…«««Ðz^^^4hÖ¯_ÈÏÏÇØ±cÑÔÔ„iÓ¦AII .\Àýû÷qáÂ888 ±±&&&xøð!TTT˜ú\]]1sæLÌ›7™‹ÅlRSS1iÒ$ÈÉÉ¡°°S§NÅþýûÛܧŸþiii€«W¯“øìììÐÐÐ qù‚ àèè%%%X[[êëëqýúuÔ××#99½zõzý0Ý¡¨÷œ‘‘¹{÷n‡—í ݽýöâr¹äÚµkó¼¼¼Èܹs !„ÔÔÔÄÒÒ’?~\ Ü¶mÛˆ¥¥%122’z{OŸ>%l6›,_¾œôë×Oh¹ŠŠ ‰¹îĉIPP3=aÂ2aÂR__/PnáÂ…dРA„BÒ¯_?²xñbr£F"aaa„BbccÉœ9s‡ÃØ!„ 4ˆlݺ•BHAAÑÑÑ!gÏž•zŸ!Äßߟøûû‹\&i¹ƒƒÙ¹s§À¼šš¢££CvïÞ-ªª[t̃êqŠŠŠ0nÜ8IKQQZZZàóù¢ ˆMQõŽÊÍÍ%JJJÄÛÛ›$$$Ó§OCCC’‘‘AÊËËÉäÉ“ÉçŸN!äÕ«WÄÀÀ€ÄÇÇ“úúzR^^N¸\.‰ŽŽ&µµµäêÕ«„Íf“¢¢"¡²’ìÚµ‹ :”™>xð s–ZYYI È®]»Hmm-‰‹‹#êêêäÆ$77—¨©©‘èèhR]]MÖ¯_OLLLŸÏÚ~AAQSS#û÷ï'µµµ$&&†(++“G ƒºººÎ;àRàr¹dÅŠ$,,ŒìÞ½›,Y²„XXXŒŒ BÈÿzÉÉÉDCCƒTVVBšÏ¶õôôÈ¥K—dêyØØØß~ûBˆ‡‡ùꫯ–KÛó8tèØ³üÖZzYYYdýúõÄÖÖ–i#­{-üüüzáááÄÙÙ™:tˆLž<™øùù‘¿þúK¦}"äÍzkÖ¬!$##ƒŠRªvü…į´e³Ù044Ð<zùòe|øá‡àñxððð@PPx<žÐz\.ÉÉÉX¹r%233%wÛ%ÐÑÑÁ˜1cpâÄ |ú駸ví> ÈÎÎÆ£G©©Á„ ÐØØˆ~ýú1ó9V¬X!ryyye ÿþÈÍÍ:¡å9—¯{£·‹z›åCBB0|øpf:""³gÏÆ‹/ʵüaôññÁ±cǰqãF™â !C‡Ð|ÒðìÙ3\½znnn2Õ¥¯¯¬¬,ðù|°ÙÍçÚ§NBCC`ðàÁBëp8„……aôèÑøøã¥Ú‡ÃŠŠ ¢££¡  €)S¦ %%aaa íÐ}gãÆøâ‹/˜é+W®ÀÝÝ“&Mº[  ÏyPï9é$d±þ÷þ$B¶mÛ†’’DEE¡¶¶}ô‘Èõbbb„àà`¤§§ãÖ­[PVnßןúúúâøñã8~ü8&L˜---€ºº:FŒììlŸ_ýjjj(--¨çäÉ“(++ª_]]]èoII skeëcÐÑZ?hóIûžãpttÄ«W¯P^.Øs™2e ._¾Œ””äääÜ2ÛB"##‚ØØXÄÆÆââÅ‹puuW’Öˆ#P]]?þøƒ™§¢¢‡êêj&Q¿ÎÉÉ óæÍC@@ˆ7´š˜˜@GGG ‡Ø·o_”——wø>IËÕÕêêêÈÌ̹œ&ê#ë“è›6m‚««+äååñÁ`Ö¬Y÷´·–——+++Œ1rrrHLLúã&-oooüý÷ߨ¹s'sÉ h¾ìqíÚ5æ’Muu5 œ>}EEEš/õÌœ9Säe\¼xOž<âĉpwwoW¼Òjï“ã•••(--Eii)òòò°~ýzØØØõy<FމÏ>û S§NeÎø¥ñ矢°°0`ó3kÖ,œ8qõõõ"ã)--ù9kiiá믿Ƃ œœÌÌ/**Â'Ÿ|"ñrÚ† ••…ÄÄÄ6ã>|8ž?Î\«¨¨@LL FŽ)Ó>u4%%%¦—õ:š<¨w’, döìÙÈÍÍ…ÜÝÝ1}út„„„0ËuuuñÅ_ 99ÿú׿––†Q£FÁÃÃ!!!033C`` PÙ¶¨ªªbâĉ¨¨¨€‡‡3ßÒÒ!!!pvv†»»;úõëøøøÀÍÍ ¾CL'•ÌIDAT¾¾°¶¶†»»;ÆŽ‹-[¶@UUUhûƒ B`` 0vìXX[[cÚ´iðôôlïamÓ›¼rdüøñÐÔÔ„¦¦&LMMñäÉDEE‰,ëããƒÛ·oË|—Uxx8<==¡©©)0êÔ©¨®®ÆÙ³g™y“&MbâÑÔÔ„™™™È:×­[___¸¸¸`À€pttÄ Aƒàïï///±±¨ªªâ×_ûÇ÷õ²;wîÄØ±cáêêŠ~ýúaðàÁøì³ÏdÚ§Žfbb‚cÇŽ‰\F¤Þiµ|\XúJ×`òþ~bŸH¯««CRRjkkaoo/0X\\Œ»wïbèСÐÔÔDyy9’’’ «« ;;;äææâÉ“'5j”PÙ7ñìÙ3<|øFFFÌÃY-222••… \oµýììl¤§§£oß¾Bc )õx1nüûÞ¾räåË—¸wï¸\.ÁårQ__yyy™zG’âþýû044joú„9õîk¬åãï…ì¯ßeß‘ŸŸ¸¸8±Ëmmmaooß%±´¥£b-ͪÅóä XMÓéÈðdò.÷î6½ÛŠzçÉ+²áð¹A—n“Ãá@[[[ìòö²w†ŽŠ•gªži÷¾kì]:î=íyPEQ²ºMÌ)Š¢(™ÑäAQEÉŒ&ªG«.nÀË ú„²ÈK,èÅlª 4yP=Zòî|ü1Ÿ~¥­´Ráì™Èû«}FRïš<¨ÍåëÞô;Ñ¥Ôú@iÞUE½ßhò z4Y_eò¾z“'Ç©÷MTGˆd4qPíA“õ^  D4š8¨ö¢Éƒzo´$íÊxõM @áýJš8¨v¡O˜Sï k^õÖ#|€EO!)ÙÑ'Ì©÷M š8¨ö¢M‡¢(Š’MEQ”Ìhò ¨VªùÝB§h¨nê&Šú¯g7+pô_zÜm¼)‡‹pbFZMŒT÷ Éƒ¢þKÏ^Z=ë9–ç8¬§ë‚£LÝ©ŽC[EýWO{>Hu&š<(ª•ž’@hâ :Mõšw=ÐÄAuš<(J„Ö äÚú§ïÌ—#•çÖáæÏÏhâ :}= EIÐXËG]yTt9ÝŠÔÊrê aÌíî0¨ží6MEQ”¬è»­(Š¢(ÙÑäAQEÉŒ&Š¢(JfòÝ@gËÉÉÁÍ›7»; ª§á³P}^Ü¡eÓ®ïòÍ×%k€ÅåCÁ¦¢Ë·Mõ\ÆÆÆprr’®0éáÂÃà šo´¤?ô§Ã~ØŠäãÞK‰’œj·lßLÅŽ¸éLïöã@zÖ¯¯¯´ZoõøžG‹øøøîê`r·n5þÓ­Û§zŽõë×ËTžŽyPEQ2£Éƒ¢(Š’MEQ”Ìhò (Š¢dF“EQ%3š<(Š¢(™½7·êJëÙ³gHII§§gw‡B½å***ðÇ`ÆŒ]¾íÆÆF\½z<@]]LMMááá‡K—.!??_äz½{÷†››[›õGDD ©© Àb± ªª '''tzý-Ž9777èéé ­ßÐЀ¸¸8444°wï^¬\¹ä¿/?pà ™uòóó±téRÔÔÔH•8~ÿýwüðÃPWW‡••òóóñÙgŸáÉ“'L™ .àöíÛ€úúzæXµüäååaß¾}xøð!àĉ¸sçŽP¹²²2©ŽmW¡=÷HRR¼½½»;ŒC__‡êòínÙ²ºººX¿~=äå›…ýüüðóÏ?cË–- ( _}õ•ÌÛñññ­­-3ýí·ßâÔ©SX¾|y—Õ/Êwß}333¬^½šéA|úé§øí·ß°jÕ*™7nܸ·þêM"B°sçNœ;w ˜6müüüP^^ŽuëÖÁÙÙGEcc#æÏŸììlœ?rrrX¸p!F  ¹Û••…•+WŠœNHHÀ®]»ðòåK¸¹¹ACCƒ†““âââ°oß>€Çãáã?ÆŒ3pÿþ}ÄÇǃÍfãܹsàr¹øä“OðñÇKܧuëÖ¡´´ë֭òeË`llŒ 6ÀÃÃ;vì@hh(233En³e¿Ç}ûöáåË—puuÅòåËÁf³±wï^œ9sUUU°±±Á·ß~ 6c½wïvî܉œœ`þüù6lˆ­ž§~ýúaË–-øþûïÛ¬CÖ˜ÀáÕ³gÏ””„#GŽ0‰£Åœ9spãÆ 455ANN®Íã!+ ‘1ueý©©©HOOdž ˜ÄÑbÞ¼y¸téþüóOØÙÙ!11GŽahjjbÙ²ePUUX·¨¨K—.…››æÏŸ/U¼MMMhllDUU•Àü3f ¤¤Dª:bbb€Ý»wƒËmßx‰k+&?~ [[[œ qðàA# wîÜ!gÏžEhh(455±aÃ>|K—.•k¿~ý„/¿ücÆŒARRBBB†‚‚±uÖÖÖbùòå˜9s&~úé'}PTT„™3gŠ­³  999w8ÕÕÕÁÙÙYâ¾J³ž¨ý“ô9‰"®qÛNIIÁ¶mÛ`bb‚iÓ¦aÈ!Û‘––òóóAaÊmذI®ÿþ÷¿%Y|öÙgcqqqظq#N:%S[ïÈú{õê…¢¢"±uÃÔÔZZZ())8N->|ˆ¢¢"æ®°™3gÂ××–––X³f …Ú¦(„B0xð` <@ó¸ÉöíÛ„ˆˆ‘ûÁçó±Ÿ×Ô©Seó8p ˆ²²2ÄÆÆbÉ’%°°°Àwß}'u²¢ÉC„×3~ii)ÔÔÔ:tÊÊÊBw¦TT47Ãõë×±wï^¬[·666`³Ùðòò’Ÿ’’’Ì1´nØmmSB,X€  ##'NœÀš5k°gω±*++#++K`Yyy9TTT$Ö©¬¬ ;;;lÞ¼™Y¯®®®Í?f’Ö«¬¬”¸ž¸ÏIZ’¶ýÏ?ÿ€Ãá ´´hjjËhÍÎÎuuuHLLdzC-'3%%%ÿ°¾©þýû£¢¢UUUBc]U¿ƒƒ¶nÝŠôôtôë×O`YII nß¾3fÀÜܸ{÷.† "P.<<½zõb’GKsrr‚‡‡¾ÿþ{ìÚµ«Íq£–ß™0óôôôðïÿþþþ¨©©ÙûÙ·o²³³ÖácS|> ''×®¿ ² ·êŠPPP€ÄÄDÍÝäÓ§O·yf+Jzz:nݺ%rÚÁÁׯ_Gii)€æ³¡§OŸ‚Åb¡¸¸&&&°³³›ÍÆÃ‡Q]]ÍÔS\\Œ7njjj ‡vïoK’¶)Ndd$–,Y999 0ãÆÃ‹/ÚŒÕÑÑ·oßfnÅ|õêþüóO888H¬ÓÁÁ÷ïßÇÓ§O4ÿž?>®]»&1Î7YOÜç$-IÛ8p ÂÂÂ0oÞ<\½z~~~Ø¿¿À1lMMM >>>ؾ};ÒÓÓ™ù¥¥¥øî»ï„‘Ź~ýºÀí¤¢ÔÔÔ ²²•••(..Æ¡C‡`jj*Uâè¨ú[—©¬¬„ªª*¦L™‚uëÖ!;;›)WTT„àà`|ðÁ°µµ…²²2¼½½±uëVäåå1åqóæM±gõ ,@YY™Èñ¦×ÙÙÙ¡°°çÎcæBpñâE˜™™‰L ˆŒŒD`` ö­®®Ž)WWW'°¬²²Rh`¾µ{÷îaݺuX¸p!sÃOË9…ö€©©©Ø:{÷î ,X° @NNlll˜›Ä‘´ž¨²ZHúœ¤%M̶¶¶°µµEII NŸ>eË–aÿþý"ë›;w.°páB@II‰yöCÔ@²(»ví‚§§§Äëò+V¬`þ/''‡bíÚµ]Zÿ·ß~+0­®®Žèèh((( FFF——Gvv6ÜÝݱdɦ¬¿¿?ªªª0wî\ôíÛ (((À¢E‹ÄŽ)))áÛo¿ÅÒ¥Káâ₈_CCÁÁÁؼy3öïßÏ\RSQQÁºuëD®>Ÿ   ¡eS¦LÁâŋ۷oÇöíÛ–s8\¸pAh½«W¯âäÉ“˜:u*‚ƒƒ;åN;QXäõ Û=LDDüüüdþ2¨úúz<|øªªªÌ rG*--EYYšššP^^Ìš5 ÁÁÁ°²²Buu5ÒÒÒ ©© 333!??ÕÕÕ8pàBCC‘šš ôïß_ª3áÒÒRdff¢ÿþ"/Éۦ½½½Äz––†úúzXXX€Çãh>Ëk+Ö‚‚äååA___àŽqu¶xñâ²³³¡­­¾}û¶¹ïí]OÒç4pà@TTT@]]½Ã·ÍçóÛìETTT 33ýû÷‡ÃAcc#äääÚlEEE¸|ùr§=ßÙõÍifff‚ÏçÃÔÔT¨´(--EVVØl6,--¥H—VCCÒÓÓQUUmmm˜ššvȘ´¤i+ÒX¿~=ôôô.MñÛ´ç!†‚‚3ÖŠ‹‹ñÕW_aݺu011Á™3gÐÔÔÄ\ÇUVV¸¥«« ]]]ærš¼¼<ó`Ð|½·õ þëÌÌÌ`nnGGG±eÄm³-G –×½kkúúú"okl«Nmmmhkk3ÓÒîÿëëµEÒçÄb±¤N¢b–Dš?jjjBmTÚѹsç:õU]?¨¨¨´yb<¯]¿ËÒ¶)‡#ñN¿ÎÖ‰£=hòè&-·ó…‡‡£¢¢FFFؼys›¿ü***"oe”———xÉ¢½ ½ q±v†ÎÚÿö~No»Y³f½Óõw…·ñwêmB/[QEQ2_¶¢w[QEQ2£Éƒ¢(Š’MEQ”Ìhò (Š¢dF“EQ%3š<(Š¢(™ÑäAQEÉìÝ~ÒI-oФ(Š¢Dóõõ•ºlOÇø‚&Š¢(J4ccc©Ëöø'Ì)Š¢¨GŸ0§(Š¢dG“EQ%3š<(Š¢(™ý"íýƒi-@IEND®B`‚bm3.7.0/doc/html/a00181.png0000644000175000017500000000576611365042645013265 0ustar tlktlk‰PNG  IHDRó(+ÌÓbKGDÿÿÿ ½§“ «IDATxœíœmP”ÕÆ/XÖÍPX ´EG­ŒA§H6Yœ¢’‡)Íɦ>‘YÖ8¤~ˆ|#rbœì=ÇFc Å$Ñ%úóÔ  &²ãÊË,ñ»×ÿCÃ3.»û,$Bmç÷‰óÜç9÷uîó\Ëž³°n$ @ðo§Ò}º‚ÉA˜Y p„™Ácì…ææfTTTL‡@0NÖ®]ksÍÆÌeeeX·nÝ”{çÖ6f–ë,¦—£G:üe+öÌ‹ Ì,¸ÂÌ‹ Ì,¸ÂÌ‹ Ì,¸wlæÆÆF:th¤üý<]]]Ø·oß]×à9mSUŸ©`:ê|üøqüôÓOº§··»víºKŠl1™L¨®®†Ñhœ²œö¸c3_¹rüñdhùÛyL&¾øâ ©ýÊ+¯àúõëw]Ó(rÚ¦ª>SÁØ:O999¸téÒ„îùóÏ?±cÇŽ»¤ÈšƒbáÂ…X¿~=ñöÛoOI^{¸ÄÛ쀀üöÛoR»°°&“i¹&cëü_§££)))øî»ïP__ÚÚZdff¢²²rZôLŠ™- RRRàåå…yóæa÷îÝþšlll,>øàøùùÁ××_~ù%Þ|óMøúúB£Ñ ++K'==6lpØv”çæÍ›X½z5 )) F£III(--uª½  Z­÷Þ{/6n܈­[·âÔ©S0xòÉ'qøða¨ÕjÔ××ã›o¾APP<<< ÑhžžîT›³Ø/¿üN‡{î¹K–,ÁÑ£GÀn~{ Ú½ÞÔÔ„•+WZ]KJJBEE…´.GŽV«…§§'^zé%˜ÍfÀ;ï¼___¨T*¬\¹­­­6u–«³ñͲ²²€™3g"!!AöEùûï¿GHHf̘eË–Ù˜èóÏ?‡¿¿?<==±qãFX,p¸Žã­ù(0›Íxä‘GZ­>>>0 6}­Ó¤Â19r„v.;¤  €nnnܲe {{{YZZJoooæääÐ`0ÐÝÝÛ·o§ÅbáG}Dܳg- ÷íÛÇ   i¬ãÇ333Ón[.Ïõë×éééI’ìêê¢F£á¹sç844$«ýÚµkœ5kOœ8Áþþ~îÚµ‹ …‚_ý5[ZZ8sæL&&&òÒ¥Kloo§J¥b^^øÃ?ÐÝÝF£QV›\¬§§‡†àÀÀÏž=K///^¼xÑ&ÿàà ö7Þxƒ<ð€Ý¹]¾|™÷ÝwŸÕµÐÐPÓ`0pƌܴiùûï¿S­VóÌ™3,,,¤ŸŸØÝÝÍøøx&''“¤Uåj'7¾ÜœþùgªT*æææ²¿¿Ÿû÷ï'îß¿ßf~---œ={6óòòØ××Ç´´4úûûÓb±Ð`0€”¿±±‘ÞÞÞ,))aww·ÃutVs{ÄÇÇ311‘ÙÙÙLNNfXX{zzlúåæærùòåóÌ3|ðÁ™‘‘ÁŽŽ»ssfflkk“bQQQÌÉÉa~~>ýüüøë¯¿’${zzØÕÕEÒÚÌrµ“_nÎo½õŸþy«ØÒ¥Kíšùý÷ßçêÕ«¥öÐÐ÷ìÙÃÞÞ^)¿Ñh”â’­£½š;#--†kÖ¬aPP_}õUŽŒŒØíûã?òÅ_äÂ… ¹mÛ6677;Ï(rfvøA«ÕB©TJí‡zgÏž•Úžžž777¨T*xxxHíÉÌ3Qššš°dÉ©íææ†ÀÀ@©íîî???€J¥BUU¶m󠮮FÌ;WzÛæL›£XSS®\¹‚€€)Ößß§Ÿ~Ú&YY6mÚ„àà`lÞ¼z½~Âõ‹F£±š;<ûì³())ADDÔj5V­Z…ÔÔT¨Õj«{ÕÎÑørsFHHˆÕÁÁÁvµÍ¯T*¥Ã§îîn( øúúÚäw¶Ž·×Ü'OžÄÁƒQ__µZááaDFFâÃ?Ä–-[lú‡‡‡#<<íííøì³ÏÐÐP;vl\ùœ1)fnoo·jFÌ;w2†¾«yfÏžŽŽ«k]]]ÒÏ·›%??©©©ÈÍÍEDD …Õ.§ÍQÌËË ‘‘‘(,,”býýýpssC{{»U~¥R •J…[·n¡³³###V/ã¡··×i’ÈÈÈ@FFª««‘™™‰çž{ÕÕÕVýœÕÎrsÞºu«ÍÇ;ckw{þ±};½^/›ßÙ:N䲦¦áááÒýJ¥1116µ‹ÙlIxxx`Ö¬YãÎçŒI9kjjÂÉ“'üõ±À'Ÿ|"ýv™UUU(**rØž¬<£ÄÆÆ"??·nÝ”——£¾¾Þî‚¶¶¶"88‘‘‘P((//Gww÷¸´9ŠÅÆÆ¢´´—/_ôõõaùòåÈË˳ÉŽšš¼÷Þ{ÈÍÍEPPvî܉7nØ›R©„ÉdBgg' ¢¢Nk²wï^DGGÃÃÃ>ú(6lØ€¶¶¶;ªÝØûÍY¯×#++K:@ª««Ã… 쎳jÕ*œ8qB2tEEÖ¯_…B!›ßÙ:Ž%??uuuvc¡¡¡¸xñ¢¤¡··§NÂÃ?l·ÿùóç‘””„+V€$ÊÊÊpøðaY½bïÉíRPPÀÇ{Œ‹/fTTï¿ÿ~ÆÅÅqhhHÚ»ŒÒÐÐ`µ·­©©±Ú3¿öÚk ·Û–Ë3vÏFNÇÊÊJ§ú_~ùeúúú266–+V¬`hh(³³³ÙÒÒB…B!õknnæ¼yóÅØØXÆÅÅQ«Õ2>>^V›\Œ$322èååE½^Ï píÚµ4›Í6ùÇÒÖÖÆ;v0$$ÄnÜl6S§ÓÑßߟñññÔétÔétV{æÛyâ‰'˜““Ö–.Z´ˆK—.¥^¯§··7?ýôS’´©³£ÚÉ/7g‹ÅÂuëÖQ­V3::š‹-b\\œÝ=3ù×óáããC½^O///8p€$i0lj§Ó阗—'»ŽöjîïïÏ;wÚÍo±X˜œœÌ9sæ0&&†óçÏg\\ûúúlúæääHç£gF‡»z6J?KJJ¬îöò˜Íf¶··Km£ÑÈ¢¢"vvvÊŽe4Y__ÏÚÚZž;wŽƒƒƒ dyy¹Ýþ&“‰ÅÅŬ­­%ù—ÁÏŸ?/«m<±ÖÖVI‡NÁÑa I³´´”¥¥¥z€xáž9s†7oÞ”®ß^ç‰Ön,rs®««cqq1M&“Óq®^½Ê¢¢¢ &9[ÇÛùã?¸wï^Ùñ®]»ÆÂÂBÙõ“[§‰ gf7Òú+EF¿É€.ðM#ƒAö€ldd¯¿þ:¾ýö[#77éééhllœð~ô¿FMM bbb\¾vï¾û.^xáhµÚé–@ÖŸ•“röOE©TÂÇÇÇa\«Õ⫯¾ÂîÝ»ÑÙÙ‰   œ>}ڥƻEXXØ¢vÛ·oŸn ãÆ¥ÍìãョžzJ¶ÏâÅ‹‘0EŠ\‹„„Q».ñ·Ù@˜Y p„™A˜Y p„™A˜Y p„™ÁáçÌwúïu`j±1óã?ŽìììéÐ"ÍÿJ*ÅžY p„™A˜Y pþF$nŠ4¼ÁIEND®B`‚bm3.7.0/doc/html/a00229.md50000644000175000017500000000004011365042647013147 0ustar tlktlk852ff2fc830afc0acef2e15edfea1c4cbm3.7.0/doc/html/a00188.png0000644000175000017500000000621211365042645013257 0ustar tlktlk‰PNG  IHDR(÷ÓïÍbKGDÿÿÿ ½§“ ?IDATxœí{L›ÕÇ¿ÐBl¬" Ê.…IpPµ R!àe“'1˜8‚ãd^f˜3ÙC‚FƒdºÓmYeÔȘ˜°a2°¶ „²v°•cC)}~ðãÍ^ 7V`ÎóIšpÎyÎy¾ç¼ôé9ÏÛ‹  ãÿ¸Î·ƒqkÁ‚ƒÁàÁ‚ƒÁà!´Ô V«çRƒÁ˜!—Ëyu.–...s"ŠÁ`ÌJ¥*•ŠWgq§*• J¥rVE1Œùᥗ^š¶žå      «·$í¥­­ uuuHKKsÆp3òÓßßââblÞ¼yV5ü[°¶Vsu½&£R©ÐÑÑ1m[pp0RRRlޱk×.ŒŽŽ/X,Æš5k°|ùrÎf÷îݸ|ù2W^°` yäÞXCCCP©T8}ú4\\\ ¥R @`×|œ©åèÑ£¨¨¨Àõë×±|ùr¤¥¥áÞ{ïµK‡³qÊNáüùóøúë¯1ÔŒý àÛo¿åÊÿ'ãˆí¿kk5W×k2F£z½z½*• *•Š+÷ööÚ5Ƈ~ˆ††èõztvvbÿþý ECCgSXXˆ_~ù…»¦¦QQQ(,,älôz=ÂÃñgÏ,[¶ >>>ÈÉÉAbb"ìýà°³´dgg#55ÞÞÞˆŒŒD{{;ÂÂÂpöìY»t8²R©T–šy9r„är¹]¶7ƒ#~¨©©Éé¶ÿ¬­Õ\]/klذ6lØàp?‘HDµµµ¼ºÄÄDJOOçÊ2™ŒŠ‹‹y6Ÿ}öùùùqåµk×Ò‹/¾Hf³™«»|ù2‰Åb:tèМi1™LäîîN'NœàÙ¼þú딚šj—Ž™¢T*I©TN©wZNÁl6cãÆðòòÂ’%K›› èííEBB>ùäøûûÃ××ß}÷Þ}÷]øúúB"‘àÀÜ8ùùùX¿~½Å²%?W®\ÁÚµk)))0 HIIAmm­UÝ“m ž~úi”””@,£¥¥û÷ïGPP„B!$ òóóysS©TJ¥ðôôDZZÆÆÆ999ðõõ…H$B\\ôz½]kyäÈH¥Rxxx ==ï½÷~úé'‡´Y[+[mgÏžEtt4î¸ã¬\¹ûöí€iýOÇðð°]ót>>>‰DVmBBB`4ŒïÊËË‘——Ç{;¿ŸŸvïÞ ±XSQQeeeQPPµ¶¶r62™Œ>ýôSêé類žjnn&…BA111DDTVVFûž -DDäææFÉÉÉT\\LíííVý–––RDDíÝ»—L&ÓŒõ[Ú)8-(Üyç¼'`vv6­[·Žº»» Ñ… H(Ò?ÿüCDD¿ÿþ;o[7S?7¢™t: K—.Ñøö®±±‘³Õét$‰¨µµ•›[WW×®P(H­V“F£!úã?ˆˆhppúûûmjÙ±c=ÿüó\Ùl6“D"á‚‚½Ú¬­•µ¶ÐC=ÄÓ´qãFÊÊÊšâB_EE=ûì³BÔÛÛksž7bcc)99™’““é©§ž¢€€:|ø0g#“ÉÈÕÕ• ®OGG•””PHHˆÃ¾gC ÑøVWWÓ¦M›(,,Œ\\\(""‚Μ9cÑ÷o¿ýF/¿ü2ÝsÏ=´e˺xñ¢Ãú-§Ü}©T 777®¼jÕ*TUUqeOOOãYZ‘H¡PÈ•éǸººÂßß ‰ÐØØˆ-[¶ ­­ ÞÞÞ0›Í<{‰DÂý=1ŸÄÄDTWWã±ÇƒX,Æ“O>‰ììl›[S­V‹•+WòÆ[±bÅŒ´Y[+KmZ­çϟDze˸¶¡¡!¬Y³fŠÿºº:dff"44YYYˆŸ“O×nß¾?þ8WÞ·oRSSa4áê:~".**BFFÆ´ýýüüÐÝÝ "š¢÷Ô©SÐétvÝ q†"‚ÙlF\\âââxã7””„öööi×T.—C.—Ãh4¢¸¸±±±Éd8tè]º­á´œÂÄiƒÁooog ?§~n¼ÙÙÙÈÉÉÁ… púôixxx؃ˆPPP€ÞÞ^¨Õj˜L&$''Ûì·hÑ¢)™øþþþi³¶V–Ú¼¼¼­VË{|õÕWSü»¹¹A$¡§§}}}Üí¹¹æá‡Fÿ”s¹%"##122‚êêê)m¹¹¹7õ"ã¨Fƒððp^ÝÒ¥K±sçNhµZ Zí?66"‚P(ÄÂ… g¬ûFœ´Z-ÊËËׯ_GQQ÷ê⨬¬´Xv–{Ñëõ ELL êëëíºàyyyˆ…P(Ä£>Šõë×£««Ëf¿„„h4ôôôêëëÑÒÒ2í«…-mÖÖÊR[BBjkkqîÜ9Àßÿˆˆ”••Mñ/—ËÑÔÔ„>ú¥¥¥ ¶mÛpéÒ%›ó´„F£Á™3g¬Ú âêÕ«¸zõ*ôz=vìØU«VÙ ôòò›o¾‰ÌÌL´¶¶rõåå娨¨@zzúœi‰‰‰Agg'öîÝËÕT*ÂÃñhÑ¢iûÕÔÔ %%QQQ "ÔÕÕ¡¤¤Ä.Ÿ6±tÞ€ƒ9…ÈÈH &…BAwß}7­^½šFFF¸s÷­­­¼³SS/§ðÖ[oñn—ÝX¶ægrNáÁ¤èèhjhh°©ÿF[NG€k»xñ"-Y²„ %$$ÐêÕ«I*•RRRÒ”¹=ñĤV«I§ÓQ`` ………Q||<-^¼˜¾ùæ»Öó•W^!___JHH ¨¨(’ÉdtðàA‡´Y[+kmDDäååEñññ@/¼ðMñ?™®®.úàƒèþûï·9GK9…¥K—Ò¶mÛ,ö‰D€{…BŠŽŽ¦sçÎq6ÓÝœÌðð0½úê«äîîN<ð…††’‡‡}ñÅs®E£ÑÐ]wÝE$—ËI"‘PHH—šŒZ­ærW¹¹™0«‰Æ †††¨ººš—üš ¦ó366FF£‘+ ª¬¬¤¾¾>›ãÙ² Ÿþ™š››‰hüÉXSScs\“ÉD¿þú+;vŒ®\¹bÓ~BKKK 577ÓñãÇixx˜V¬XAõõõ3ÒfíšXkÓëõTYYiñÓ£££÷™ ³³“òòòfÜßQ UUUQMM Ì›“ÉD'Ož¤ŠŠ jnnæ½b27³¾7b)(Xý:¶Ûá›—º»»­žà“Én=£££Ø´i~øá„††¢´´ùùùhkkã%oW¶oߥR ©T:ßRn)-³ÁÄ7/9ôul·nnnðññ±ØnOÒЙØÒ#•J±gÏäææ¢¯¯AAA¨¨¨øOغuë|Kต´Ì%·}PðññÁ3Ï<3ß28ìÑŒçž{nŽ1|ØG§       ö³ Ƈ~`öàÁƒ³.ˆÁ`Ì/Sê,î Æ–S`0 bm3.7.0/doc/html/a00257.md50000644000175000017500000000004011365042652013144 0ustar tlktlke125033e9f28abcb3913c160b510aa24bm3.7.0/doc/html/a00185.map0000644000175000017500000000017111365042645013243 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_func_0x62.html0000644000175000017500000002167611365042652017730 0ustar tlktlk BitMagic: Data Fields
 

- b -

  • best_representation() : bm
  • bit_array_compute_gaps() : bm
  • bit_block_and() : bm
  • bit_block_and_any() : bm
  • bit_block_and_count() : bm
  • bit_block_any_range() : bm
  • bit_block_calc_count() : bm
  • bit_block_calc_count_change() : bm
  • bit_block_calc_count_range() : bm
  • bit_block_copy() : bm
  • bit_block_or() : bm
  • bit_block_or_any() : bm
  • bit_block_or_count() : bm
  • bit_block_set() : bm
  • bit_block_sub() : bm
  • bit_block_sub_any() : bm
  • bit_block_sub_count() : bm
  • bit_block_xor() : bm
  • bit_block_xor_any() : bm
  • bit_block_xor_count() : bm
  • bit_convert_to_arr() : bm
  • bit_convert_to_gap() : bm
  • bit_count_change() : bm
  • bit_count_change32() : bm
  • bit_count_nonzero_size() : bm
  • bit_find_in_block() : bm
  • bit_for_each() : bm
  • bit_for_each_4() : bm
  • bit_iblock_make_pcv() : bm
  • bit_iblock_pcv_stat() : bm
  • bit_iblock_reduce() : bm
  • bit_invert() : bm
  • bit_is_all_zero() : bm
  • bit_list() : bm
  • bit_list_4() : bm
  • bit_operation_and() : bm
  • bit_operation_and_any() : bm
  • bit_operation_and_count() : bm
  • bit_operation_or() : bm
  • bit_operation_or_any() : bm
  • bit_operation_or_count() : bm
  • bit_operation_sub() : bm
  • bit_operation_sub_any() : bm
  • bit_operation_sub_count() : bm
  • bit_operation_sub_count_inv() : bm
  • bit_operation_xor() : bm
  • bit_operation_xor_any() : bm
  • bit_operation_xor_count() : bm
  • bit_recomb() : bm
  • bit_scan_fwd() : bm
  • bitcmp() : bm
  • block_range_scan() : bm
  • bmfor_each() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00224.map0000644000175000017500000000024411365042647013240 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_0x70.html0000644000175000017500000000713511365042652016706 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- p -

  • parallel_popcnt_32() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00100_source.html0000644000175000017500000030204411365042630014773 0ustar tlktlk BitMagic: bmtrans.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00101_source.html0000644000175000017500000001666111365042630015003 0ustar tlktlk BitMagic: bmundef.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00163.png0000644000175000017500000021311511365042642013247 0ustar tlktlk‰PNG  IHDR3«Ý:Ü2bKGDÿÿÿ ½§“ IDATxœìÝwX“çþð; !l)CÀ-CDQëÀ:@­ÖY‹µJmÝÕs´¿®£]ÚÚqZmm=Uqà¨{T­GÁÕ:ª2ȽÂ&$ïïH*Šãþ\—$yó¾ßä ‘Ü<Ï÷ ‚ €ˆˆˆˆˆˆˆ¨a¸(ÖuDDDDDDDD5Á0ƒˆˆˆˆˆˆˆ†DDDDDDDÔ èéº"jœ.\¸€øøx]—Ѥ9;;ã…^ÐuDDDDDZ'bP"ª 'NÄÖ­[u]F“ˆ]—ADDDD¤m92ƒˆjŸŸ-Z¤ë2š¤¥K—êº""""¢ZÞDDDDDDDÔ 0Ì """"""¢…a5( 3ˆˆˆˆˆˆˆ¨Aa˜ADDDDDDD à """""""jPf(,,ÄÖ­[«½}AAbcc‘““S‹UQefANWkÛýû÷# Ÿ}ö&L˜€Ÿ~ú©v‹#""""¢ ôt]QC"—˱råJ|ûí·ðòòÂýû÷„~ýú¡}ûöº.ˆˆˆˆ¨I`˜ADõƺuëpðàAÀÓÓ|ðlll¡¡¡X¿~=RRR`aa€€Œ?r¹Ÿ|ò zôè;v ¬¬ 3fÌ@\\~ûí7H$Ì™3 Àµk×pòäIˆÅb=z2™ &L@@@ÀcµÜ¹sß~û-bbb`gg‡©S§ÂÏÏr¹*•J\888ÀÜÜ™™™•>¦K—.aåÊ•HJJBË–-±páB´oß¾ÊZjR'QSÄi&DT/üõ×_8räV¯^ýû÷ÃÈÈ[¶l îgñå—_bÖ¬Y8zô(>úè#¬]»999(++Õ+WŸŸ;w"((_}õ,,,°wï^`ýúõÔSI<±XŒ={öàÓO?ÅÆqáÂ… µãwÞ¿¿?~ýõW,X°ß~û-"##áä䄞={â³Ï>éS§°|ùrXXX K—.=¦ôôt|øá‡xã7pèÐ!¼øâ‹øè£ B•µT·N""""¢¦ŠaÕ ¥¥¥…B###,^¼o¾ù&@*•bõêÕðõõ…T*…½½=ôôôPPP&L€H$‚$ ÆŽ«¹\XX¨9ŽL&ÃŒ3 “Éàéé‰Ñ£Gã·ß~«P˹sç`ii‰Q£FA*•¢sçÎx饗pêÔ)€››¢¢¢pâÄ \ºt íÛ·‡¾¾þcéäÉ“ðöö†¯¯/d2Æ‘#GjkUµT§N""""¢¦ŠÓLˆ¨^èÙ³'._¾Œ9sæÀÄÄ]»vŤI“`bb©TŠ›7obíÚµHJJ‚™™A¨p€H$‚T*…D"Ñ\~˜ƒƒôôþyëkÙ²%®\¹Ra›””ÄÇÇcüøñšëJJJУGœ;wû÷ïGpp0LLLPVV†yóæa÷îÝMIII“““沞ž&L˜P­ZªS'QSÅ0ƒˆêA0{ölÌž=±±±Ø½{·f:Ixx8Ö­[‡O>ùžžž‹Å6lØ3'77·Â圜V¸ÎÈÈ^^^øê«¯4ו””@$aûöípssƒ‰‰ u@Ñ¥KÄÄÄúúŽ02òD^ÞY(•y5:^Uµ¶/""""¢úD$‚ ë"ˆ¨ñ¹páâããŸx{jjÂÂ’ñ×_éP©k î ccé3óÌ™ìÞ}^^–˜2¥=D¢gÞ6mмöZ»jßG©°fM$RRŠ0ož'ìì «u¿7r°sçäæ–¢øù9ÂÀ@òLu?ÌÙÙ/¼ðÂsˆˆˆ¨ž¹È0ƒˆêŒJ%àøñH¬_ް°´ha‰)Sz#0ð˜›=ó~ËÊTøðÃ=ظñ,,Œ Aô| ={¶ÆÇ‚§§öQÆ0ƒˆ´K¡PâÈ‘ëØ°! .ÜA›6¶ ꃀ€n01‘ií8.ÜAPÐ:´jeƒàà7`mm¢µ}Ïf@VVÖ ¨¨»wϽ½E÷qéÒ=|üñ^\¹#:ã?ÿVã`„ˆˆˆˆ¨‘a˜ADÚ‘––‡-[ÎbË–sHOÏÃÀxýu_ôîÝö¹ûWµ2JP¯Xòþû»°}û|úé(õ©•ã”Óf˜ÉÉ93f5 õ±k×l4kfüÌû’Ë‹°bÅ1¬[+¼ÿþ0 ÒQ+u5 3ˆ¨ú’’²±qãlÝzyyÅ:Ô Ó¦õA×®-kõ¸……¥˜9s#Ξ½…5k&cРÚ_ÝCÛa$&fcôè•°³3öm3ajjð\û‹‹ËÀ_üŠƒ¯¢gÏÖøðÃðòj¡¥j‰ˆˆˆˆê-†DôtgÎ܆ aøí·XYcÒ¤^˜<¹ììÌjýØÙÙ˜<ù¸w/›7¿ ooçZ?&P;a  FŒø:ØcÓ¦7µ2’¥¼IèåËñ9’MB‰ˆˆˆ¨Ñc˜AD•+((Á®]Ž›7SеkKL›ÖC‡zA*•ÔI ‰‰Ù ü%%eضm¦Ö–t­ŽÚ 3 ::£G=Úà矃´ÒóB9rK—DJJ.¦M{o½åÇ&¡DDDDÔ1Ì ¢ŠîÞMGpðìØq%%e5ª ^½:vtªÓ:¢£ï#0p-¬¬Œ2£NF<¬6à @=šbìØ52¤#V®œ¨µ_Ê›„®ZuØ$”ˆˆˆˆ#†D¨TNºõëÃpêÔ 8:6ÃäɽØ––ÏÞ¨òY;wAAëб£#Ö¯Ÿöܽ%žEm‡ƒI“Ö"0°–-{U«û~¸I¨““%-Î&¡DDDDÔX\äŸêˆš0¹¼?ýt ¾¾Ÿcòäÿ¡´T‰ŸÂÙ³ÿÁܹ~: 2¾†ÀÀñâ‹í2C'AF]éÓ§~üq ¶l9‡eË~Õê¾ÍÌ ñá‡#qúô{èÔ©Þxc^}u5®\‰×êqˆˆˆˆˆtAO×QÝ»q#6„c÷DxõÕ® òE»vÍuZWpð,^¼S¦ôÆ'ŸŒ‚DÒøóÖ!C:â›oÆãßÿÞssCÌž=@«ûwuµÆš5“1mÚ‹øøã}6l›„QƒÇ0ƒ¨‰(+SáèÑëØ¸1gÎÜB«V6øàƒaxõÕn03Óýè‡ÿþ÷(–/?†wÞ‚ùó꺜:5vl7ÈåEøè£}033ĤI=µ~ <8GŽ\Ç’%ЧÏ2ùbþülJDDDD à ¢F.33!!ç±q㤦æbÀ7lÝ:}û¶×ZÓÉç¡TªðÞ{»°}ûü÷¿c1aB]—¤o¼ñ"rs‹ðþû»`jj€‘#;×Êq† éw‡ã»ï~ÇŽâí·‡`âÄu¶J Ñób˜AÔH]½š€ °oßêcüøî˜2¥7\]­u]šFq±3gnBXX Ö¯zèº$Z¸p0äò"Ì›SS àV+Ç‘J%xó;7®;V¬8†>Ú‹µkOañâlJDDDD W3!jDJKËpðàßX¿> W®ÄÃÍͯ¿î‹W^ñ¡¡¾®Ë« 7·S¦¬CLL 6o~>>®º.©‚ºXͤ2‚ à­·BpäÈuìÜ9]º¸Ôú1²°lٯؿÿ zôh…>ŸÚ?.Ñ3âÒ¬DAJJ.6m:‹sÈÎ.ÀK/uDPPôìÙZ×¥U*%%?A./ÂÖ­3tÞx´2º 3@¡PâÍ7ƒqéRœ_g£i.]º‡%K௿îbäÈÎxÿý—Ñ¢…e›ˆˆˆˆ¨f5dgÎÜÂÆá8zô:š53ÆÄ‰=1yrOØÛ[躴'ЉIÁ¤Ikabb€éõ¶V]†PTTŠ€€5HK“cÿþyuú<•7 MJÊÆ´i}ð¯ b“P""""ªOf54ùù%ؽû"6lGLL ||\0uª/†÷†¾~ýnƒséR&OþÚµkާÁÜÜH×%=‘®Ã @ݼuÔ¨•Ð×—`ïÞyuºêŒB¡DHÈyü÷¿G R ˜7o ¦MëÃ&¡DDDDT0Ì j(bbR°qãìÚu …£FuAP/:vtÒuiÕòû9súôi‡| R]—T¥úf@rr† û­[Û`óæéÉê6°’Ë‹°zõ üï§Ñ¼¹9ÞygFŽì\/VÂ!"""¢&‹aQ}VV¦Â±cÇ™3·àâb…É“{a„`aQG5ùd?Nž¼þý;à£F¢]»æº.‹ˆˆˆˆ†Dµéï¿ã±qãìÛw2™ºcêÔÞhÝÚV×¥iÕÙ³·0mÚ´oßÁÁÓÔj+ORßà @Ý›dâÄŸpûv:˜GÇfº.©‚³goáã÷!*ê>ÆŽíŽwß ;;3]—EDDDD à "m+--ÃþýWŽ+Wâáæf)S|1fŒŒeº.Oëöÿ{öÄ÷ßO„LÖ8Zñ4„0äòbŒý=ŠŠ8xp~½›®¤R Ø»÷¾øâ0rr ñæ›}1g΀Fù³@DDDDu†a‘¶$$daÓ¦³Ø¶í<òòŠ1dHGL™â‹ž=[뺴Z³jU(–-û3fôÅâÅ# 5ž† %Ì€ä䌳––ÆØ¹s6 õu]ÒcŠ‹øùç?°jU( ¥X¸ð%ŒÿôôÇ4+""""ªS 3ˆž‡ 8}ú&‚ƒÏ 44 ÖÖ&˜4©&MêÙ¨‡Ó+JMÊO?…  >º.é¹DEÝÇíÛi®[·îÀ´i/V¸¾uk[¸»;ÔYmÕ—áÿƒ·w ¬_? R©¤Âí……¥¸}; ;:é¨Bµ¬¬|óÍQlÙr-[Ú`ñâðósÓiMDDDDÔà0Ì zryvìø7žÁ;éèÙ³5¦LñÅ!ûÙ>}..Vpuµ~ì¶œœBLŸŒ+Wâ±fÍd 衃 µëÈ‘ë˜6m}µ¶]·îu Ò±–+z6—/ßC@À Ò+WNÔŒ”ÉÈÈGÏžK`ii‚ ë¸Jµ¸¸ ,YrGŽ\G¯^mðñÇ£àéÙpW¿!"""¢:Å0ƒ¨&¢¢îcÆpìÝ{ "‘cÆø`Êßzµ’ÄóR(”pqypýú’ =îÞMǤIÿCii‚ƒ§5è¥WVZZw÷E(,,©r;##¢¢–B_¿þö ‹Á¤Ik1cF?|ðÁ0ܹ“ŽqãÖ ))púô{hÛÖNÇUþãâÅ»øä“ý¸r%#GvÆ «wL‰ˆˆˆ¨Þ¹(ùøã?ÖuDõ™B¡Ä¡CWñÞ{»°lÙ¯(,,żyþøî»‰xùåN°±1Õu‰Zµn]Nº‘H„ððŒÓR©áá1?þ'ØÛ›ã—_æ eËÇGm4T‰qq™¸y3*Uåù®T*ÁèÑ>:Ô«Ž««+¸¸Xá“OÀÚÚ3flDnn!T*R©b±ýûwÐu™Í0a hÛ¶9víºˆ•+#/¯ÞÞÎɤO¼ßêÕ¡ÈÉ)lt+QµÜçÈ j2nßNCrr|}ÛUkû””\lÞ|!!ç™Y€=ä _ß¶ªÑåò³ ЭÛÍ== úöm#¼ñöÛ;0t¨V¬l4+–<,<<cÇþPå6¿ü2«Ú¯]ûî»ßñí·¿A©TUhŒ pýú§00xrP + …ëׇaåÊ〠còä^MÝÊÈȇ——zºÌ¡CÿB—..u^+é§™PÓpáÂŒ½ŽŽÍð×_V¹í™3·°qc8޽ #öÀäɽšÄÐ÷>؃3P(Tšë$1 ò€»»,Ühƒ¥R/¯ÅÈÎ.¬ôöfÍŒpíÚH$õõ<…%Kðè;¼H$ŠÐM'µU‡\^„+Žaýúp88X`ñâxé%OÍkï½÷vaëÖsP©˜šàÈ‘•öw!"""¢Fëbýÿ­œè98pkIIÙ¸s'ý±mòóK°qãôë÷%V#99Ë—OÀÅ‹á½÷^nAFll*6o¯dêùGF@&“6Ú P‡6åSj%•J0fL×zd(•*|ðÁn,Y²‚ðx"^÷ÅÕ€™™!>üp$ΜùÞÞÎxã 1â;\ºt±±© 9‹²2õˆ“‚‚R¬Aff¾®Ë&"""¢:đԨ­^ŠÏ?ÿõÁ‡:uÏ€7ßì‹E‹†bbR°qãìÚu …£Gû`êÔÞ:_¾RDxx,ÊÊT•Þ.‰°råD¼òŠOWVw®\‰ÇË//¯ô¶_ý7:wv®ãŠªO¥0cÆFüúëÕjmâÄ;èСa4®½z5K–À¹s·Ñ®nßN«ð:ÕÓ“ÀÝÝ{ö¼##}VJDDDDu„ÓL¨qR*Uxÿý] 9G_âææ†~ß|sgÎÜ‚‹‹&Oî… ^€……‘Ž*Ö­Ó§ob„Ÿ²•€€æ¡k×–uQ–Ntëö)’’²+\WéIõALL þïÿ~ÁÅ‹q‹EP*+¦¤R &Oî…¥K_©ã ŸÏòåÇðõ×G*½MOO‚îÝ]±mÛ¬F±<2U‰ÓL¨ñ)((ÁäÉk±mÛ…Ç‚ ÈË+ÆéÓ7!“éaÓ¦7þfÍêßdƒŒ²2/Þ±¸ê·ƒò›ßz+%%euP™n¼újÅ©&R©¯¾ÚU‡U_»vͱÿZµ²©£êê§¼¼btï¾¹¹Eþy+‹EÀÈH†ñã»còäžh×®¹î ­cýú}‰ØØ@Û¶ÍqêÔ»:®èÙ•¯ ò¿ÿý±X¤ jD":ujÇÿ­ã Ÿ®¸XV­Þ©öö"‘Ÿ>S¦ô®ÅªˆˆˆˆH‡8Í„‡ððX¼üò dfæ?5È==1¶n=_•Õoß}÷; JPdèé©ÿ‚ïåÕ+VLÀõëŸbÉ’ÑM*È€±c»A,C,cìØú»„iu”¯ ö>ú÷ï@½r‹ øûïxDG'ë¸Â§;|øÚC—DÐ×׫reAðŸÿìÆ±cµ_éGfPƒ·sç_˜?+ÄbTªš½œïÝûo“m—^½> ‰a` Ÿq/`òäž f•‹Ú’˜˜îÝ?üùç‡prj ÇÍ›™pv6Ã!­Ñ³§#ôõŸ/ر³³ƒ›››–*¬(::©©©µ²ïÊîlÝ:²ÎŽY®_¿~ZßçÃÏŸ üŸ~R÷ÌØ°ad2݆znnn°³³«ñý %îÜIÇÍ›)¸q#7n$ãڵܿŸ£Ù&==ee9Uì¥a DHHGLÅ’ IDATˆ®Ë """ª.6Þ.~Œ‡‡‡®K¨w’“sáêšÙ³àëÛ 2™ÆÆú011€ú{ccèé=ÿlªÆöüÇÆ¦¡S',]:íÚÙjeŸQQQZÙOUD"ÜÝÝký8ðŸÿ”¨ÛsŸššŠŒŒŒZÛÿÃÏŸ§§¦NõÃúõçš*Á!º{GFF>ó}¥R Ú·oŽöí›cÄoÍõÅÅ ¬XŒO?]¹s— gOÛJWvi(&Nœ¨ëˆˆˆˆê† „MÓnTYØÙ™"::ýúu¨õc5&666èÕK»^mmµŠ<íuu.&LðXZ×Éñ@¥RÕj˜QÙó÷É'¯B¡P6ºéVR8;£¨( Ë—ÏÕu9Ïmß¾}º.ˆˆˆ¨^a˜ADT‰º 1t­±DDDDÔøq5"""""""jPfQƒÂ0ƒˆˆˆˆˆˆˆ†DDDDDDDÔ 0Ìhd²³³ñÕW_éº ªD^^¾øâ ­î³ªó]PP€Ï?ÿ\«Ç£¦áá×jSzO¹u낃ƒµ¾_þ,iÃŒF&77ëÖ­{îý¼ñƸ{÷®*¢r¹¹¹øøãµ¾Ï‡Ï÷Ãç-//~ø¡V×Ô5•Ÿ‹‡_«5yOièÏÏ7ðã?j}¿üY$"""Ò>†Œ««+nÞ¼ùÜû9zô(rssµPÕ¦GÏ7Ï[íjŠÏoMÞSšâóCDDDDºÁ0£‘IMMÅðáÃ5—O:…N:A&“¡C‡Ø¿¿æ¶E‹ÁÆÆ2™ ýû÷Gbb"`ܸqHKKøqㆴ´4 <›6m‚……¢¢¢pýúuôîÝh×®¶nݪÙï¶mÛЦMèééÁÞÞ_ý5 33þþþøöÛoáàà¬_¿o¿ý6lll`ooíÛ·×Ñ3U{žôøuðàA´nÝFFF ÂÿýßÿáðáÞ|Þ='OžÔœïGÏ[¹Ÿþ...066FPPT*U£?3gÎÄÚµk5—óòòеkWÄÅÅ@•¯ßãÇÃÃÃúúúèÒ¥ .^¼ òç·ºç)**ªŽ¹ö=úžRÝ÷†J¥RaÞ¼y033ƒ­­-–-[@;ï_•ý,Ñ3¨^KIINž-ˆÅb!--MHNNÄb±°xñbA¥R kÖ¬_|ñ… R©„¯¾úJhÓ¦M­>?5UÓýWõø™L&‚ ܾ}[0118  Ÿþ¹ ‘H„Í›7WyÞ=7oÞÔœïGÏ[rr²@˜>}ºPRR"ܺuK077Nœ8Q+ç"**JˆŠŠªÑ}jkÿ«V­ºu릹¼iÓ&ÁÛÛ[AÈÏÏâë7!!A055öîÝ+ K—.\\\•JõØó[“óTRRR­ºkóõ\“çïá×êÃï)5yߨ‰“'O )))5ºOu„„„5ùoîàÁƒ‚H$,X aaa‚¹¹¹°sçÎçú™©êg±º…ÀÀÀjoODDDÔÈýÅ‘ؾ}ûйsgL:2™ #GŽÄСC±cÇJJJ`jjŠ­[·jþiaa±X H¥R@QQV­Z…ž={âØ±c°··Çœ9s “É0`ÀL:;w¾>Ξ=‹Q£FA&“¡U«VJ¥š¡ç*• ï¾û.D"üýý¡§§‡… j.çååéæÉÒ’§=þrÛ¶màAƒ0|øpà½÷Þƒ­­-€ªÏPñ\èëëköYÙy€¥K—B__­[·†‡‡G“8cÇŽÅßÿøøxêçûõ×_:t良ß;v _¿~5j ñÎ;ï`Ö¬Y(**zìù}ÖóÔÕô}£!²°°À_|###øúúbîܹš‘;Ïû3ó¤ŸE""""ª9†Xbb"ÚµkWáºöíÛ#!!Æ ë¯¾Š^½zÁÅÅóçÏGvvö÷%‹áààˆ‹‹Ã7àêêªù·}ûväää@&“áÒ¥K~SSSdffV¸®üCaUç à‡ ê Ä®]»°k×. :–––ª~ýššš"''§Â~öìÙSé_ЛâyªéûFCôè9MKKÓ¼vˆˆˆˆ¨þ`˜Ñˆ 8¿ÿþ;îܹ@ÝÈo÷îÝð÷÷Ç—_~‰~ýúAOOÝ»wÇk¯½†û÷ïWk¿þþþ Ctt4 °°>>>Ø»w/áîîŽ>}ú@"‘àܹsËåµöë›ê>~ìÛ·ééé€sçÎ!** "‘¨ÊóFÕ7zôh\½z+W®ÔL1ª~ý8@ZZàÂ… ˜4i$ÉcûoŠçéyÞ7Џ¸8:t€ºqìO?ý„¡C‡Öx?ûöíCDD„¶Ë#"""¢f4bÞÞÞX¸p!|||0hÐ xxxàÕW_ÅK/½„)S¦ !!^^^ð÷÷ÇØ±c±dÉÍ}mmm1wî\\ºté±ý¶mÛK–,A=àïïvíÚÁÓÓãÆÃÈ‘#¾}ûbàÀX²d Zµj…… ÖåC×™ê>þ¡C‡bøðáðððÀÀ±páBtêÔ úúúUž·§©ê¼55&&&xùå—‘——‡j®¯êõÛ¿ÂÃÃþþþ4h¾þúk˜˜˜¨øü>Ïyj¨žç}£¡èÑ£,X€¾}û¢]»vpqqÁôéÓk¼Ÿýë_Ø·oŸVk‹‰1Áòåǰk×E\¸pIIÙ(+ãŠ(DDDÔ4‰At]=Yjj*¢££Ñ¯_¿jm¯R© +++Íuqqqˆ‰‰««k…9þ%%%øóÏ?Q\\ŒN:iP@zz:®\¹‚nݺ¡Y³f•+)) ‘‘‘ptt„‡‡‡æz¹\Ž?ÿü¶¶¶ðòòBBBîܹƒ¾}ûÖðÑ?]MŸŸºØuzz:222 P(••…^½zÁÍÍ !!!èÑ£€'Ÿ·‡=z¾«sÞjKùH77·±ÿ'½~ 66wïÞ…››Z´h¡¹¾²ç·:空jóõü¬Ïߣ¯±ç}ߨ̩S§àææ;;»Õö4[·nÅĉQÓÿ抋‹qîÜ9˜››£K—.Z­éYNÂÕ«æhÖ̉‰Ù(--èé‰aooGÇfhÑÂNNê¯å—, ¯¯§ãꉈˆˆ´î"ÃŒz®¶?¬7tõ1̨Ž+W®`À€صkÜÝݱ{÷n|ýõ׸uëVƒ] ¢¡…õQ} 3êB} 3ê£ò¶!!!€ÔT9³””„õ×ÄDõ÷ Y(,, îÝbkköXÈ¡þÚ NN–02j«íQ“r‘®!ÒÎ;cÆ X¶l²²²Ð¦M9r¤ÁDT»¸pÁãÆýxx8ÂÝÝC†xA*}¼§KvvÁƒ#‰‰YšãôéHHÈFnn¡f[++“‡B‹#<,5—ÍÍ›Ng"""j8féȨQ£0jÔ(]—AD € ˆàèX{{sœ9s ëÖ…A¡PB*• C{¸»;ÀÝýŸ£Y3c4kf /¯•î/?¿Dr¨Gx¨C‹ã°oße¤¥åi¶555€““zÇÃ!‡úr3ØØ˜ÖÕÓ@DDD¤Á0ƒˆˆ¨ž‹XZ*ðí· ‹ P(›ŠèèûˆŒLBDÄ}üþ{$²² ŽŽÍ4Á†»»<=áâb¥Y2ØÄD†ìÑ¡ƒ}¥Ç+)){húJÕÓX"#“pôèu¤¥É¡Tª›H+Lc)9Ê{xØÙ™C,n|K‘n1Ì ""ªçÊÊDøë/Ktêô!úõë€Ýñâ‹íáîî€1cºj¶KIÉEDDnÜHFDD"¸‚•+C©TÁØX77xz:ÀÍM=ŠÃÍ͆†÷ÌÉôЦ-Ú´±}ì6P(”HNÎÑ„å#<ââ2‹¤¤l(J€T*ƒƒE…Ñÿ|ß •N•!"""ª à ""¢zNOO@×®Y""îcç΋(((D"†‹‹<=áéé„ìáééˆæÍÍ«¬G*•ÀÙÙ ÎÎV•Þ®R HK“?9Ý‘…Ë—ï!!! ÅÅ €X,‚¹f$ÇÃAGù´™Œ¿®QEü퀈ˆÓ§o`ùòH´×u)ZcbR†Ù³`öìË‹qêT4Nž¼ÿýï4–-ûööðósƒŸŸ;|}ÛÂØX04ÔG—..èÒÅE³/Apï^&""’uQQ÷±qã$%eP7-Å¡Áံmíª=‚B,i‚•nÝZVºMFF~…),å=<~ÿ= IIYË‹5ÛÚØ˜>r¨¿wv¶‚‹‹ Ø<™ˆˆ¨©a˜ADDÂéÓ7ðÙg‡¬éç`hØVÇUiOi©Xó½™™FŒèŒ#:C¥píZBC£­[ÏC*• GÖ0À zÀÕպ¾D"\]­áêjaÃ:i®ÏÉ)DT”ºGTÔýJ›º¹Ù?èÇáXX<Ûj'ÖÖ&°¶6··s¥·ËåEBŽòÐãìÙ[HLÌFff¾f[S´h¡Åáìl¥ùÞÅÅ ŽŽÍ8…ˆˆ¨b˜ADD Ve†‘‘>ú÷ï€nÝô0cÆ W¨¥¥bœ=k…)S~ÆÜ¹~F;ˆÅ"x{;ÃÛÛ ¾„ŒŒ|„†FáäÉøæ›£øè£}puµÆ Aèßß ={¶†¾~åÿý[X¡W¯6èÕ«æ:…B‰[·R5!Gdä}„†FkÂGÇfVSñôt„³³Õs7ý433„»»!ÜÝ*½½°°÷îe"11 ññ™HHȽ{™ Bbâ?#;ʧ±8;[>˜c©Õáìl‰æÍÍ!‘ˆ+=Õ_ 3ˆˆ¨A©*ÀøüóØØ˜¶nݪË2µJ__OÏ\de`äÈïÑ£GkÌë‡þý;hV()gmm‚qãºcܸî(+SáâÅ»8~< 'OFcíÚÓ06–Á×·-üüÜáçç{{‹*-•Jàæ¦núh³Ñò)*‰8tè*V­ ­ÐlÔÃãŸãIÍFŸ•‘‘>ÜÜÔ#E*““S¨ 9²Ÿ„„,\½š€øøLMÏŽò¥èx8ô°³3ÓZÍDDD¤= 3ˆÈÈH]—P/¥§§×Éqøü?]zz:ìììjõ©©©P©Tµz ]ªí×sC}þÊÊ” 9ààpܺ•Ve€ñ°ÈÈˆÅÆ;v¬VêP*ʼnTkéøùùR˜˜(ªµíÎ;ˆù8wî6V­:ŽI“ÖÂÃÃsçúaذN•Ž.ÐÓ£GÖèÑ£5-ŽÄÄlœ8ÐÐ(|ôÑ>¼óÎ/pww€ŸŸ; pC×®®Õ¥PÞcÀ7ÍuåÍFÕ!‡zÉØÝ»/"?¿b±zjKy³QGtìèkëÇÏ6XXÁÂÂ^^-*½=5U®™ÂÿÏ莳goUXE&ÓÓ„ê&¥êé+åÁG³fƵR?UM$‚ ë"èÉrss‘˜˜¨ë2ê=ZÙ/Ÿÿš177‡““S­ì;11¹¹¹µ²ïú¦6^Ïõýùsrr‚¹¹z ApîÜmlÞ|üqÙÙ…šíŒŒdèß¿ý ¸té–.=€?ÿ¼‹V­²ao_ •oß¶@A^^Ï:åæÊa 7·LXZ?ý|}}1oÞ<Í刈$¬ZŠ_½Š-,1kVŒ×ý‰SHURR†sçná÷ßÕ£6ââ2`aa„_lAƒ<зo{XY=Ððp³ÑèèûˆŒ¼ëבœœ@Šxz:ÂÃÃ^^-àááðÄURêŠR©BJJ®&èHHÈ|ðUz¤¤äB¥Rÿúdjj  6Êût8;[iVb11‘éô±5Rf‘ÎÅÆ¦aË–³8y2wîdhFˆD€••)FŽìŒw߃'î#..K—Ä‘#×Ñ£G+|ðÁpøø¸;ÿB³fFxó;˜<¹LMŸü\UæÖ­4œ8ãÇ#qáÂ(•*tîìŒÜáïïOOÇǦ´<ÌÌ|DF&!"" ׯ'âúõDÄÅe@¥`ffOOGxy©Gpxx8¢M;èéÕÞ …IIÙš>ê©,ÿ„ééyšm­¬L*L_quU¯Àââb  öë ""z6 3ˆˆ¨îÝ»—‰íÛÿDhh$nÝJÓô/‰DNN– ꀀîO†žž‡åËÖ-çЪ•->øàe ä©Õz7o>‹>ڇ˗?~æÕ;¥Tª0a¸};‡ÍjIMÍÅÚµ§±yóYˆÅbùbÚ´ŸiGAA NŸ¾ù`JJ4RSsakkŠÔ}6úôi3³š…%Õ=ntôýáF"#“pãF2 %d2=M°Q>’ÃÃÃ2Yý›1[\¬@||¦fTGyߎ¸¸ ÄÇg"/O=G*•h¦­¸ºZÁÙÙºBØad¤½#DDD à ""ª}7nÜÇŽ!,,w¸¸ ‘ˆ!‘ˆQZZggKtǘ1>-%Z™‚‚üôÓ)üðÃI˜˜ÈðÎ;CнVþz?pàáæf￟¨ÕýÊåÅ=ú{ÀóalüüSrs ±aC8Ö­ Caa)Ƴfõ‡“S³gÚŸ ˆŒ¼'¢ñûï‘øûïxˆÅ"¼ðB+ôë׃y¢MÛç®ûI %nÞLADD"""’¬¨’„üüèé‰Ñ¦&àèØÑ žžŽ033¬µz´!+«qq¸w/÷î•ÍD\\RSå(ÿÕÌÖÖÎÎÖš°ÃÅÅZtØÚšêøQéà ""Ò.¥R…3gbqðàUœ?ññ™šfŠú°´4‚J% %%66ê)$£Gû sgçjí¿¬L…sX±â K1{ö̘ÑÒZyØØT ä¹sýµÒOD©Táï¿ãñûï‘8q"‘‘÷a` E¯^­áçç??7´ha©…GQ=))¹ˆˆHµk FpÜG||&õ’µ;:=7œàåå+­ö©m‚ 99·ÂˆŽò°#..ÙÙêf·‰ööæpuµ~h4‡ÕƒÖõ~ä Q50Ì "¢êÉÏ/All*¢¢’ðDZøûï{¸?G³TªX,†¼¼œàççSSŽ‹À±c‘(--Cß¾íñÊ+><؆†5ëpñâ]|òÉ\¾|#FxãÝw‡Vk*Êó’Ë‹àíý>üp$¦Ní]«Ç:pà fÍÚŒÏ?ƒ)S´,•JÀ±cXµ*—/ßC¯^m0gŽú÷ï µc¤¤äjFlœ>}%h×®9üýÝѯ_ôèѺΛxÊåE¸v­â•ØØT(•ª F==б£Z·¶…XÜpއÉåÅêÈ@\œz4G||&’’²5?«Fpuµ~¬!©««5š77o°Ÿˆˆš†DDTQnn!bcS“ŠØØT\¿žˆ›7S4CøËHѺµ zõjƒ¡C;ÁÓÓgÏÞÂÁƒã·ß"PPP‚îÝ[aøpoŒÙù™FPܺ•†eËáÈ‘ëèÕ« -oïêMGцuëþÀ_ÆåË×xug±jU(¾üò0Ö¯ÖÎ’Ópöì-¬\y§Oß„§§#æÎõǰa´ú!V¡PâÂ…Û8~< 'NDãÖ­4˜™ OŸöð÷wGÿþn:ëûPTTЍ¨û¸~]=Š#"BýW(”06–ÁÝÝ;ªÃ //'´mÛ¼Þ¬¤ò¬ %³4ÓU;îÝË@aa)@__-ZX>ң㟰£>6\%"¢&‰aQSSÞ¯âáÕâã³4jRSåÔ+-H$bÍJ#èÒÅ~~îèÖ­%Zµ²B¡ÄÄàÀ+øí·äçÃÇÇ#FxcذN°³{¶>©©r,_þ¶n=Ö­m±hÑøù¹ií9¨®~ý¾D·n-ñõ×cëì˜óçoÅo¿]ÇÞ½óàæf_«Çº~=+WÇáÃ×àâbÙ³û#  ôõµÿ5..'OFãØ±Hœ?¥¥Jxy9aÀ7øù¹ÃÛÛY§# %¢¢î#""ñÁHŽDDEÝGIId2=¸»;h¦§tìè77‡FÕ—"==ï¡©+™¦®dàÞ½ ¤¥ý³Ôlóææšé*-[Ú<øª:ê"ð#""z€a=…B‰Â¨Tärõ2ƒ¹¹…•n[XXªiil,{ì/œff†šyëææ†‰­5BlJJKËžž‡””\¤§ç!99ùHNÎErrâ㳘˜¥9††RXY™B__‚ÒR%23óPT¤€L¦WtëÖ>>®èÚÕU³$©B¡Dxx,¸‚£G# —¡KM€ñ;ÿ‚¥¥ fÌè‡I“zÂÄäùWW©LQQ)ÂÃcªµ‘˜˜ ++ôïßþþîxñÅöZ[÷y”•©“ò`©Xõ¿¨¨û(((T*AûöÍ-б£ÜÝík<…ª!(**­pÄÇgâîÝ ÄÅe 11 eeêé+ÖÖ&puµA«VÖš°£eKõWDD¤e 3ˆšºÒÒ2¤¥å!%¥üC¯úkNN!rs‹ —i¾ÊåÅË‹PPPRgõ©Ã ¥Éô ¯¯CC}H¥bÉ ‘ˆajj©T##}êC__ffê0ÄÌÌðÁ}¤06–A*•ÀÌÌR©ÆÆ2èiV^¨/JiiŠŠJ‘—W‚ÒÒ2äå#7·99…ÈÉ)ªôûÌÌ|¤¥åiê&€ÖÖ&°µ5Cóææ°¶6T*AQ‘©©rܹ“ŽÄÄ,@Ë–6èÜÙùÁ?tìèTá¯ÎeeêJøG^GNN!:wvưaÞ>¼ŸmÙÏrÅÅ ¬[÷V¯>˜;ׯ¿Þ§ÖWŨʜ9›q÷nþw;7·C†,‡¥¥1vîœ]gSRrñÓO§°eË9H¥ùâõ×ûÀÊʤVŒ“'£qüx.^¼ Aºukù Üð¨õ*5¡TªpçNúƒTþÅ!—C"£m[;Í2±^^-àîîШ?È—O_)7îÜIÇÝ»é¸{÷éAGù¨6$%"¢gÀ0ƒ¨±{øÍò9Òwï¦#!! ©©rääü3šBýá×¶¶¦°´4†¹¹!ÌÌÔÿÊ¿777„‰‰ÁCÁ‚ôAP,Ôì/¹……¥(-Uryu#;AŸ_‚²2¥ftGq±%% ”””¡¨H²2% JŒ)EQQ)JJÔ@Y™yyÅšm K4#ª"‹`jªþåZ__’€‘‘>¤Rõð{33ƒJWA‰D07¯ø‹ùÃϱ @ó@¥R!/¯øAÝÊ'Žn™Lư³¸è, IDAT°0„¹¹,,Œ*|ß¼¹llÔÁE³fÆÈÎÎGdä}\½+Wâu …––ÆèÜÙÞÞ.èÒÅ;;WúWp¥R…sçnáÀ¿qøð5de S§>ÜÇ{ke• …B‰mÛ.`ùòߟ_‚7Þx³fõ×ù‡›¬¬tîü¾øâUL˜ÐC'5ÄÅe`øðïàã㊠^¯ÓU7rr ±aC8Ö­ûEE öÀÌ™ýž;´ª¹¼§NEãäÉ8~< ™™ù°··x°ô«|}ÛÂØ¸vFŒ<+Apï^¦&ظvM=Š#;»b±®®ÖzptìèssÝ<©m•qqš £üýØÒÒX3‚£U+DDT 3ˆ‹ò¿FG'#""ÑÑ÷›V¡ƒ½­­)œ­Ñª•5Z´°‚££¬­MaookkSØØ˜6‰.öry %òóKPR¢@q±¢BÈPZªžBEE ”––òòŠ¡R©*L­Q(Ê4óªbb"ƒDòÏHSSH$êçº|´‰©©:$26–ÁÈH™L¦¦00ÂÜÜð‰£ %nÜHƵk þZ¬^±¡|®¿§§“fÄEçÎÎU®¢Tªpþü:ô7ºŠÌÌ|tìè„áý1b„7œ­ªñ ?J%`ß¾ÿgï¼ãšºú?þIÂ-[öd8Ñâ`¹mµC[µ»O[[­>µ­}úóiûX»‡ÖªµÃV¬JµŽÖZe¸*¢¢È { dœß!QD"#Áy¿^yr““oî¹÷œs?÷;nàÓOO£¢¢O>9ëÖEÃÚZ5 !ïfçÎD|ýuÝSí“rVW7÷832ÊQQÑpp0G` ôü tBPÓ ªi:w ÅÅu(.®• w†®ØÙ…»»Tè‰îîÖpv¶Tûã€B¡P(C†ŠŠ& qóf®^-ÂÕ«EHM-As³¦¦cè 6ÛþþRñÂ×׎.â´„²²zääð] ‡‡¬¬ ”–ÖC,–ÀÔt {ÜÙuw·îwÎöö.$$dãôé ÄÇg£µµAANX¸0  ËÝîääB|øáŸHM-ÁüùãñÆóGìÿ@¸p!?¾ ‰‰oÀ×W=r5|üñ_øæ›Äƾ„°0/•Ù!‘üýw&¶oGZZ¼‰™3}FÜ‘H‚ë׋Ÿ¤$8ŒŒôæ%IJ2Ú‘¤¾¾ééRÏ éã¶Àáèh.7dBÇh8d…b”•Õ£°°……²üµ(,¬EU £Ã„££ÜÝ­áá!õèyu88ŒÑ- …B¡ TÌ PÔ±X‚´´2$&rpáBÒÓ¹ Ű³‹©SÝ1y²¦Nu‡Ï8µHXI­­ÈÍ­Bvv8œJdgó“S‰æf œ-àçg6Û¾¾vp€‹‹å€ä|~;þþ; ý•Žóçs!ŠêŽùó1þøa»ðKOçbÛ¶S8w.3fxãÍ7"$ÄyX¾K¼ð¨«kűckTmŠBÖ¬‰E||Ž_Õ‹@—.åaÇŽD\¸‹ñã±fM,TY¨—Û€¤¤$$dãÒ¥|tttÁÏÏ‘‘~ˆŒdcâDW/©À1pÚÚ:Q\, [©‘{sÕÊséëëÀÝÝFª"<¬áînC÷!…B¡hTÌ PÔ…šš$%I“Þ]¸‹¦¦v89Y`öl_LꎩSÝG$ùeøhn /‡¼¼jT#'§ ùùÕò “1ðñ±ƒŸßmO»!UB¨®nÆßgâÏ?o!9¹L&3gzcþüñ˜;wü°.Þ kðñÇá?n!8Ø o½µaaÞÃö}Ê ºº“'ÿ_~¹?¤jsú¤  ‹}¨(lß¾Rí.Ây¼&ìÞ}û÷'COOÏ??Ï=7Cm.¢ÛÚ:qî\NwH ÕÕ|ØØ˜ <\*l̘áSÓáü†*p(¡PŒ¢¢ÚnqCú((>dÕ¯LLÆÜ!nÜöæðð°žžúˆ …¢…P1ƒB ÊËqòdNœ¸‰[·¸°´4ÆâÅAxðÁL™â®1{£ ‘H¯ \nÊÊêÁå6t?o@qq-jk¥åuuYpv¶”/b¥és[[Óa³O,– 5µÿ‰¿ÿÎDQQ-lmÍ0o^,Ä´iž÷­b¢,ZZسçví:##=¬]'Ÿœ®q‰hÏžÍÂ3Ï|K—Þ‚››µªÍQÈ¥KùX¹r7^}5o¼1_ÕæÜ“ÆÆ6üðÃE|ÿýEtu‰°jÕ4¼ôÒlµJÊIAVV%’’88s& iie`0€I“Üå‡ðp6ØlõH;Tî8¤!*åàñz Ò'Œk¨b‹Õ›ÚÚÔt{áÕ ?¿º—7‡““4 ©——mwž©à1œs…B¡Œ"¨˜A¡ ]]"œ>ýû“ñÏ?033Àüùxè¡`<ð€—F%¢ÓFÄb ªªø=DŠòòùÿ<^“¼üŸ¡¡œœ,àìl GG ¸ºZÊ3ä;:ZŒ˜hÐÑÑ…sçrqæL&âã³Q_ß wwkÌ›7óæ`Âׯ!~úéìØ‘H‚W^‰ÀóÏÏÐXžú‡¯Vµ)ýbÿþdlÚ‡íÛWª]~;ikëÄþýÉØ½ûêë[ñØc“ñê«j)55µãÂ…\œ9“…óçsQ_ß ;»±ˆŽöÓJï¹ÚÚ–^IFe‡³³¥Ü{#(Hú055P±ÅêÌ›£  ºûo ¤B‡Ì›ÃÔtŒÊËQVVßC°¨¬l‚P( ÍnïädÑãáìl)®ÊDµµ-8s&gÎdáÂi’‰]1wnæÎ €‡ÇÈçU‰$8x0_|qMMíx‰‰€™™æÞÉ-/oDhèûصëi,Z¤jsúÍÖ­`÷îsˆ‹{S¦¸«Ú……bÄÅ]Ã7ß$¢´´‹!&& ª6ížH$éé\œ=›…¤¤¤§sÁb11}º§Vç5êKà`0puµBp°‚‚œä„€­w†›ÚÚäçWËCWd"‡Ì›ƒÅbÂÉÉÞÞ·ó)y{ÛÂÓÓÆÆt?S(Ê]P1ƒBQ]]"üõWbc¥^ööc±bE(V¬˜J“ƒ)™ÎNªªø¨©i¾ãos¯ÿùüvùgôôtàèhÞK°pr²€££…Ú¹üæåUáÌ™,œ>´´2èëëbæLoÌ€èh•‰+ ÁÉ“iøøã¿P^Þ€•+C±nݵۃá£Ná×_¯àÚµÿÓ(ÑQ,–àùçDjj Nž\WW+U›t_Äb þüó¶oO@VV""؈‰‰Dh¨‡ªMSH}}kwu”Û§\]­äÂFX˜—Z%dU&ÕÕÍHOç"-­ ·nIÿ64´ÅbÂÓÓÁÁÎ tBp°3üýí©wÁéꡨ¨Vž,:/¯Zž£C Ìå!+²>ã4²*…B¡( *fP(C¡¡¡ ?ýt ?þx |~;"#ý°jÕt„‡ûÒ<@$’ ±± ÒG]] jjš»=+šåÕÕÍhjº-R°XLXY™ÀÖÖôއY¯ÿmlLÔ.IâˆÅ\½ZŒ³g3qút&JJê`eeŒèèÌ›€3¼1fŒ®JmŒÏƶm"'‡‡‡žˆ æÁÅÅR¥6) ¡PŒ)SÞÃòåSðæ› Um΀éèèÂ#|ƒ–þüó5I^IARRvìHÀ•+…˜<Ù 11‘ˆŠòSëóž³×®#))IIdfVÀÀ@Ó§{ "ÂQQ~pr²Pµ™Ã —ÛÐ-ppqëVÒÓ¹hn@W—6ÛŽ–zpøøØX8ž6!‘p¹ ÝG jºÿV£¹Y077‚··Ô‹ÃÃÃF.t G¢i …BQ3¨˜A¡ †²²zìÙs¿þš]<óLž|rõÂ覥E€ºº44´£¡¡ mhllG]] êë[ÑØØÞ-\H·Ý)P“É€µµ llL1nœYŸB…••‰Ææ‘UT8s& ññÙhllƒ——-æÌ‘ !!.j!ˆ¥¤áÃÿÄÕ«E˜;7›6-€¯¯v$D”ñÇ·ðòËûpåÊàèh®jsׄE‹¾‚‡‡5bc_Ò(ï¸zµÛ·Ç#11¾¾vX³&‹kÌùÍã5!))‰‰œ?Ÿ‹¶¶NxzÚ 2Ò‘‘~˜:Õ]ãúd BPTT+÷ÜHO/Gff9ÚÛ»0fŒ.üýäâFP<>ãàäd¡õÇ"…B5P1ƒB™™øæ›üùç-ØÛ›ãÅgáñǧÂÐPOÕ¦)@>¿MMàóÛÁçwt?îýŸß!÷®å¢ad¤KKcXZÁÂÂÆ077„……1¬­an~÷ëFZyG‰Ëm@BññYøçŸ|ˆDLšä*0Ô)!bff>úèO$$pæ…M›bâDU›5,,_þ-ôõuðóÏÿRµ)C‚Ãáañâ/±téD|òÉ2U›3(²³+±cGNžLƒ““V¯ÇòåS4*lA(#%¥IIœ=›…‚‚écÆ ïî )¾jUÑe8‹%È˫•U¡P cc}Œïx‡Àá¬5Þ^ª„Ïoïª" ]ár ‘èê²àêjÕ#TE–£ƒŠ Eàb…Ò.]ÊÃöí ¸x1þþˆ‰‰ÄÂ…Ají6+IÐÜÜ!È„ÙóÛÛ=Šææ45µ£³SÔ«MCC=˜™bìX˜šÈŸ›™ÂÌÌcÇJ…©pa #˜›imùý‹%¸q£ññوχñ±>fÍòEt´?¢¢ü`aa¤j3{PTT‹?>…“'o!(È o¾¹3gú¨Ú¬a£¸¸aaâ§ŸžGt´¿ªÍ2gÎdâùçĦM ©jsMII¾ù&qq×`nnˆ_œ'Ÿœ®‘I¹Ü$&JEÌË— ÑÑÑ6Û^.lLšä¦Ös‰² ÅÈήĭ[\¹G~~D" ÌͺKÃÞ9F‹ð3ÜBye•ÜÜÛ!+%%u ÅÐÑaÂÅÅ ¾¾vðö¶…ô¯‡‡ 9(ŠºBÅ E))EضíO¤¤aÆ oÄÄDbÆ ïùî;Å™øÐÔÔ. îÞÆçw ¥E ÿ¿­­³W› ¦¦wˆÒ¿²çÒ‡!ÆŽ5”?—½>v¬!]Ðôƒææœ;—ƒ³g³‘”ÄACC\]­å‡èh„†z¨å~¬¬lÂçŸÿǯÂÝÝÿþ÷<,X¨•2wòþû'pâD®\yGcBîÇwßÇ–-ÇñãÏaΜU›3$ª«ùؽûöïO†Ž Ï>†çŸŸ©v"`éì!9¹@>>””ÔÁÔÔ³gû"<ÜáálØØ˜¨Ú̧££ ™™w„¨pQTT ‰„ÀÖÖTž\T¢B“^*Y)Ù¼¼*äæV!/¯ 99<””ÔA$’@W—77køøŒ“{qøøŒƒ››õ¨á(ŠZBÅ å^¤§sñÑG§””Óíb¿'º¸®.QwèE;ÛÐØ(Íq·gÄÝ¢DssÚÛ»zµÇd2zˆw‹ÒçcîùI ¨iÔàìÙ,$&f#%¥0eŠ;"#¥†:—olhhÃ×_ŸÅ¾}ÿÀÚÚ7ÎÇ#LÔš {Etu‰0aÂ<÷Ü ¼þú\U›£TÞzë7>| qq¯`ÂÍjjjÇ?\Ä÷ß_Dg§+V„bõêp¿k_\\+6®\)„P(F` ÂÃ}á‡çQ›W¢¥E€ôôrܺu»‚ —Ûpt4GP³¼Ll` ß”ŒP(FA4D…Ãáu‹U(+«‡X,9<=màå5l¶¼¼láëkËQ1P(µ€ŠÊäåUá“ONãÔ©t„„8ãÍ7 ,Lê‰ÑÖÖÙ¸òvBK©@q[¨¸3±ecc{/ïƒÑÃB&6˜˜Œé%>ÜýºT ‹5u@(ãÊ•BÄÇgãìÙ,””ÔÁÜÜlDGûaöl_˜š¨ÚL…´¶vb÷î$ìÞ}zX·.O>9]-½F†‹£GS±~ý\»ö®Ö%ïÕÄ’­ý¡½½ û÷'c÷îs¨«kÁ#LBLL$ÜÝÕ'ßÌ`ioïÂÅ‹yHJâ 1‘ƒòòFXZcÖ,DFJCRÆŽ5Tµ™*¥¡¡­;êë[P]ÝŒÚZiIPººVÔÔH_ëèèÊaff ØÙIË~ÊʃZZÞ®²!«¸1/þF Az:ññÙHLä = ]]¦O÷Dtt"#Ùpr²Pµ™ýF"!8vì¶mûuu­xþù™xõÕˆQ{§77· áááàÁ—µ:Ái}}+æÎý ãÆ™!.îhWå%‰„à?naÇŽxdfV <Ü11Q˜6ÍCÕ¦)•æf.^ÌEbb²PSÓ„‡³å‡3|h˜E7²±2qãÖ­2ddT «K“1 rBHˆ ‚ƒ¥ǸqÚå•¥n´µuÞ!rHóqäåU£¢¢`jj6Û¾¾vð󳇯¯ô9õD¥P(ý€ŠÍ‚‚ššTT4¢²² ••M(/o@ee**Áã5Ék¬Ë;Ö66¦°¶6†­­,-acc‚ââ:üõW:Äb‚˜˜H¼øâlèé{JoššÚqáB.â㳑””ƒúúV88˜#2’ðp6fÎôÖÈ‹Á¤¤|øáÈήIJeS°qã<ØÛkv®¡²yóQ$%qpéÒÛZ§–ÃáaéÒ¯åíÛWjíÝü¤¤ìØääBLœèеk£å§u¿—‚¬¬J$&JK¿¦¥•Á&OvëGaƒÍ¶Sµ™j…P(FVVE·G)ÒÒ¸((¨îN0j&O qF` 3†F€ææääðÀáðÀáT‚Ãá!7—‡æfÀÉÉB.løûÛÃÇÇ64é(…B¹*fPÔ‹¶¶N”—7ö+**Q^ÞŠŠF…b‹Å„µµ -àà0ööcáà`GGsX[›bÜ8©GÅÝ1³7o–áÝwâÖ-.V­š†çklf|ÊÐ]$%qŸ7JÁ`H“wFD°5þ¢ #£ï¿—.å!:Ú›7/‚·÷8U›¥r::º²k×Fá•W"TmΈpéR>V®Ü—^š·ß^Ôk{^^ÌÌ akkªë”˵kÅØ±#ññÙðñ‡5k¢°xq°Ö^55µãüù\œ=›…óçs{‰°aa^Ô“ð´´ä‰EoÞ” <^˜LYþ ;!8Ø£*Ÿ*ár“ÃCNÙÙ•ÈÉᡨ¨B¡ºº,x{ëáÉáã3NãS(”ACÅ ÊÈÒÒ"@YY=JJêPZZòòTT4ÉŒææù{MM àà0ŽŽr¡ÂÎÎ NN°·7‡­­é€55-ضíO>|¡¡زe †ãgRÔ˜–.\ÈERR9¨ªâk»vII>þø/?~&8cóæÅ Õ.·û¡pð` 6mŠÃ[´*Äý8z4kÖÄbëÖGðôÓÈ_?tè*^{íW|ðÁÃxî¹*´P¹p8•ر#'O¦ÁÁÁ«WG`ùò)Ð××Þ¤ AZZ¤Þe²ð¸ÐPù§ ÉR‡‹êj¾<ï†,D¥¹Y]],8BB\àáa­u^?êŠP(–'• <^©®Tà°›m6[*rSBÑr¨˜AQ.„TW7£´ô¶`QZZ×-`Ô£¾¾€´Ä¨ÝX8;[t{V˜ÃÞþ¶w…ƒƒ¹Ò&!‘H‚½{/àË/ÏÀÄd 6o^„‡ ¡‹QD~~5Ξ͹s9HI)‚DB´2‘^CC>ÿüoüòËe89Yàí·aþüñZñ۔ɂ_ÀÕÕ ;w>©jSFœ;ðÑG§ðý÷ÏbÆ o¼ùæoøí·ë „`òd7?¾VÕ&*ÒÒzìÜ™ˆC‡®bìX¼øâl<õÔ£âB§¶¶‰‰$%åàüù\ðùípuµ’ Ó§{jµ¸3T!(,¬½#¹h)²²*ÑÕ%‚©é:cÂgyþ m«Š¤îðùíÈÎæu‹·CUZ[;Á`0àì, Ua³íåžnnV‘¬›B¡ô *fPŸßŽÂÂZÖ ¨¨EEÒçÅÅuò¤šcÆèÂÕÕ ÎΖpq±„««%\\¬àâb ''‹)™–‘QŽ×_?ˆÂ¼ôÒl¬YCCÍËy@mm¸t)¿»@¸Üy‰Ãˆ6""Ø‘ø’‚“'oáÁƒ¾¯­­{÷^À7ß$ÀÈH¯½6+V„j­[ýPHOçbÞ¼Ïqôh̨õVyë­ßpðàUX[› ªŠ‘HºÇ@FÆqn †êêf|÷Ýyüüó?`±XxöÙ0<ÿüŒQã#Ipýz1’’rììJèaútDFúk\RcU!Š‘™Y´´2yˆJQQ-$;»±rÏà`g9ÑD–# !\n8œž"Gqq-D" ƌхÏ88Âßßö`³íiòq7ƒ IDAT(…¢™P1ƒÒ7B¡%%uÈϯ–‹²¿ m==¸»[Ë6puµ‚««¥JïPB|öÙߨ½; “&¹áÓO—S×Z-GVÆPæ}!Kè„ðp_DD°â¢q‰ÿóŸßñý÷pæÌÆ{†D‰D8p_|ñ7Z[;ñê«ø×¿fÑE™Þxã0RRŠpþü›ª6Eeüúk Þxã0 é1$ƒÉdà³ÏÇòåSThÝðÃç·ãÇ/aïÞ èèbÅŠP¼üòì~•ˆÜ³ç<žxbªV\ òxMraãÂ…<´µuÂÓÓQQ~ˆˆðÃÔ©î4OD?in =]ê½! S©ªâƒÉdÀÃæGyXšCtu‰äa*ÙÙ•Èʪ@ffš›;À`0àâb‰€øûËö4…¢þP1ƒ"àóó«å¥³ j—W…’’:…b0™ 88˜Ë OO¸»ÛÀÍÍ ŽŽjwxåJ!6n<„ÚÚ¼ýö"<õÔtêf¯…ÈJ&%å ))<^Sï‹Y³|4úŽëÞ½ð¦MóÄ‘#¯Ê·Bpút&¶nýeeõXµj:6l˜KÙÞ‡–&LØ‚M›à…fªÚœ§££«GXÉݰXLDDøbß¾©Àº‘§½½ \Á®]I¨­mÁÃOÄ«¯FÂÓÓæžï¯¨hÄäÉïÁÜÜ—.½ssí9ß„B1RRŠ˜˜øølÔÀÈH3gzwWHñ¥v¤ªŠ/O¹y³éé\47  §§ƒñã1a‚ &LpÁĉ®pt¼¿FÊÊêÁáð•UÑý¨DYY=i.Ž€GØÃßß~~ðô´¡b…¢>P1c4!»k|WÉÅ‹¼¼*p¹ ‹%ÐÕeÁÕÕ ÞÞãàéiŸqðô´…——­FÄÔ¶´°uëøùçˈŒd㣣‹/-âÎÊ#II9¸~½„ÁÁÎÝ•G|è¤vâÚ`%j¼sxþùç!*ÊW®âÿ;‰7ÊðÐC!xãùpuµR¡µšÃÏ?_Æ–-Çpóæ˜™ig(E_ääðñ1X,Äâ¾§}]]8œ­£*O(ãèÑTìØ‘€ââZÌŸˆ˜˜H9õxßûïŸÀ·ß&ÅbÁÅÅG޼ªµ9¸Ü$$p…Ë— ÑÑÑ??{¹°1i’ c  Aaa\ÜHM-AN"‘66&vÁĉRq#0ÐiTätQWš›;ä™™R‘#'‡'¯¨"-뀀°Ùöð÷·‡©©ªÍ¦PF#TÌÐF!(-­ï/XRR±X==xzÚÀÓÓl¶<=màí=®®V«6ÇÇgcÓ¦8tu‰ðÞ{K±téU›DQMMíòÊ#IIÔÔ´È+„‡ûbæL­‹ï¿t)O<±  ‘‹L&ŽŽæðö‡øø,„…yáw#0Ðé>­QîdΜOÁfÛ㫯V¨Ú”çÀ+ظñ Æ=½2d0Àž=Ï`á ´N=HNJÇöíñÈÈ(ǬY>X³& Ó§{¢­­AAÿ‡ööNRÑÇÚÚGÆÀÙÙRÅ–/"\¾\€øøl$%qPRR33CÌšå#ã³¶6Qµ™I{{22Ê‘šZ‚7JqãF)ªªø`±˜ðö¶Å„ ®˜8Ñ!!.ðò²Õ ±^S Å(,¬‘{pdfV"3³MMíggKøûË<8ìáçg¯õc…¢P1CÓijjGVV%rs¥eª8œJäæV¡­­L&ÎΖò2U²LÎ..–Z“ɹ¥E€Í›à·ß®céÒ xï½¥Z é\¸‹qãÌàí=nPŸ‹%HK+ùs¹8w.iie`0€I“Üî‹ðp¶ÖT¹‹‰Ža¯ N&“__;lÞ¼áá¾*²PsIK+Â_àøñµ˜<ÙMÕæ¨„’’:¬]{7n”@"¹÷Ô¯£ÃƒcÇŽU#lzqþ|.¶oÇå˘8Ѿ¾ö8t(¥GŽÌÌ pôh ¼¼lUhíÈRTT+6®\)„P(–ç'ŠŠòGPÐà=äNžLÔ)nZëñÒx¼&¤¦–âÆܸQ†ôt.!LLÆ 8ØYž2a‚ ]ï¨UU|¹÷†,GYY=$SSƒy8áéiK½š(åAÅ M¢¢¢™™ÈÈ(—œ¤q}þþöðõµ‡¯ï8øù9ÀÛÛV«^¿^Œ˜˜XtttáÓO—#:Ú_Õ&Z„B1>úèvîLĺuÑØ´iA¿?[SÓ"¹p!MMípr²ÀŒÞ÷ÅŒ>05Õüd{÷ƒÇkÂܹŸ£©©­ÇÓm077@JÊ»Ôýxüû߇»+9lRµ)*E"!øá‡‹øàƒ“Hˆ¼’ÉêÃÙª±žzÊ$5µ_}øø,0ÀÝ+& ôpøðê^a)£;+GÅÇg£²òvî¢èhÌš50ï9{û×ûö½@çônD" ²³+pãFY·ÀQŠââ:Bàâb)Ï»ìŒñã•zÞŠÅ$&rh_ ¶¶Np8•ÈÌ”%-GN"èÁÏÏN?ÞNðò²–ñ–öe@ÅŒÁB¶»Ãb±EEµÈÊ’ rW6ƒWW+Œï /+åçg7ªîbˆD|õÕ|õÕYÌšåƒÏ?‚º¸ª’’:¼øâ>p8•‹%`³í‘ðï>ßgyÀ¤$²²*¡§ÇBh¨ÂÃ¥eSûJÀ§­47 °xñ()©‡PØûâR‹ÅÄš5Qxãù#hæÓÚÚ‰ÿµ‰?ïEqq-Ö¬9€´´Ò{ziüúë˘5ËG–©ÿ‰çžû¾—!ƒÅbB__û÷¿8jËýÊU•JHÈÆµk·óEGû#"B±g]II¦Oÿ¤›xöÙx÷ÝÅ#RÆ]Óhjj—‡¥Ü¼YŠ7ÊÀç·+=¹(‡ÃCdäǘ8ÑÛ·¯¤ù™†€H$A^^ÒÓ¹ÈÈ(Gzz9²³+ÑÑÑ}}°ÙöÝâ†#Æw›m?dƒöe@ÅŒÁpôh*nÜ(Å<<ä¶D" òó«–VÖ-\”#;›‡ŽŽ.èê²àåe‹ñ㥛,OJ –ÒÒz¬Y‹Œ .Þ}÷A<óL˜Ö†hGŽ\ïÎU"–ßáe0¸qãÿzl²€II9¸x1Í͸ºZÉÅ‹éÓ=``0zÞ‰P(Æòåßâúõ’{Þ%¿]]®\y‡&·¿ürÿ÷ÇpãÆ­Ë±2$‚ï¾;­[ÿ!ºº,<þøT|ôÑc*¶P=X¼øKܼYÖgh ÓÑaáûïŸCd${­S_d§d!)²œG‘‘þˆˆèíu÷ý÷ðßÿ—{¦éè0áîn½{Ÿu÷@!„ °°V.n(+¹è¡CWñÚk¿BG‡BV¯ǺuÑZíõ;’ˆÅäçWË×ÿ2Ïë¶¶Ny¢Q™ÇøñŽðó³PB~Ú”Q3B[['Þ|ó79rÀå~6 Ü„ÕâÖ-.ÒÒÊpë™™èèè‚^wfd{:Áßß¾¾vÔÍ÷޹޷ß>GG ìÜù$||——2tZ[;ñæ›qøý÷Ð#¿‹ÅÄÖ­ÀÍÍçÎI½/8 ô0}ºGwå6½Cé~{õÕýøã´>BKnÃ`0 £Ãì?¦à‹/ž!+5Ÿyó>‡——-¶o_©jSÔ’ÂÂÄÄÄ"=+?—-,Œžþþ¨O8˜šZŠÅ‹¿ì×{ ˜L¾ùf|0d˜-Ó,dÕ¨âã³À‘çCš:Õ½;¡3ï¾û;._.è1Ÿèè°Àd2ðá‡à‰'BUø 4e$}ç£øå—ËrA‹ ss#¼÷Þ,YB­²ª7w åhi@G‡ oïq=<8üýú¼Dû2  bF¹u‹‹ýë'TUñåw¯Ž[ƒ)SÜûü —Û -nÝ*Czºt0ÒÕeÁßßAANv–ÇËÑ„@÷¦¹Y€M›ãĉ4¼ðÂL¼ýö"(«­Üë\¸&“ Ÿqàp*áéi#/BC=h¿ÝÅÿ{ß}w¾×_==Äb±Xƒ[[S¹g–¯¯|}íÀfÛ©ÈjÍâÖ-.æÏÿü¾ãõhG,–`ÏžóضíOùÂ÷äÉu˜8ÑUµ†©˜§žÚÛ/Cq  ðÉ'ËèÅ·ššÚ‘””ƒ„„lœ?Ÿ‹ÆÆv0Òã°7 0 áÓO—Ó˜CàÎä¢7oJ×§Š’‹Î›÷ÒÓË{´!õ†%˜<Ù~ø(‹FBJJêäá)ÒÍÍ`±˜=¼¸ÇwD@€ŒŒôiÿQF½Å >Ÿòòò¾> Õ8::Â̬gî Bví:‡­[ÿp{¢ÕÕeᥗfãí·ºŠ_º”ää\¹R„¢¢44´ÉðÀ@©p$õº ýãÆR¼üò>tu‰ðå—+0{¶â*—.]Â×_=BÖ>Üç¹p/tuYHHxC¡kð×_K—.)ÝVM¡¬Ìee=s½èêJ`h(‚±q …04ÁÐPK:L‡……aíÚµª0WcÙ´)W®âüù7UmŠÒX¶lÙ°µÝÞ®ƒ¼< ´¶êÂÂB?¿úaû.Uqøðá~½O"!ع3••hn ¦¦ÕÕ|44´Ïïè%æ2™ °X …Ò±ñ_ÿš‚eË•n¿&r¯õ• ‰„`Ïžsxÿý“ #]],-°gÏ3˜4ÉÎ÷C`íÚµ S˜\ÔÙÙ••÷¾i ;tA‚§ž æMóå"SVVÖHþ”Q‰ì|*-­ï8¸rކ†60™ ¸¹Y¡´´aÀý7œóËh¤¿ó eÐ\ïu›T  ¶¶ÖÖÖª0HeÔÖÖÂÊʪÇd[[Û‚˜˜ýøçŸü^wN…B1NÊ€®^-Fb"mmò¨‹!8Ø Ž04¹†Jll26o>а0/|õÕŠ~• +++C\\{ŒÆz+ƒ¸¸8ÒŠ#11¿àòå…qã2„B JJêŠ)))£¶¯Æ€Ïׇ±±¶¶í04ÂÈH¾¢¸¸8èêꎠ•šO[['ŽMÕº„©²ór8ÎCC‚‚jQRb‚ÆFíÊÏ$Ûoý…Éd &&²Ïí­­¨«kA}}nÝâ€Ë­D¢‹¦¦üóO)ÒÓypr2ôi.C5]£¹×úêN˜L8œJ°XL…yƒ„B1jk[±tévlÜ8––5£v qqqX²d i^’À@':á™gp;¹èßgá—_þé³Y_ýòËe9r[¶<„e˦ ¶¶FÝuÄHqçùäâb K,Z$ß^Qшôôr$%å °ðrŸíôÕÃ9¿Œ&:ßPOŸ>ßþþ£«ŒÏ¹sçîú?¯¾ú Z[;û¼x+*ªÁ§ŸžÆ¤InøÏÄܹ´ª†èêá­·ŽààÁ¼öÚ¼þúÜÇmS%T98pÏ=·ááÛž w£«ËÄÙ³YˆŠòSø¾+V 66V¦j=+WÒ|å÷ßo@$ã±Ç&«Ú¥‹+V ëwäåUÁÎn¬Ö$>pà€RÏ#cc}ëÃÕÕ ††í˜6Íl6Mþy7w¯¯îF,–àÌ™¬~%@–y~òÉ_pq1‹eLçûr¿¤écÇ""‚ÚÚÄÆ^¾ï¼/‰ÑÒÒáÇ/â±Ç<°xñtØÚÚ*ÓlJ7÷;ŸÌáà`Žææ8<àþÓÕ‡Ÿ~úlØçmGÙó ¥ohû]…blÛö'ví: &^}.žž–úS<^^xáGÖà§Ÿž§µ±UˆP(ÆÉ“e°°X‚ÆÆv°XLy‰…B1~ùå2¶m{”V›¡¨ŒØØd,\D+˜ oošd™2ü¤¦–€Ïïès;“É“ÉìqS£«K„ââØØ¼€¿ÿÎÄܹ#aê¨"#£::LtuÝ_d’EedT #£©©MxÿýÇ`euZÊð0Øþ³²z‡cΜVÚ€ŠwPVÖ€U«~FNN!}Ö”—!‘œ>IÅ %qùr^~y,,ŒqêÔëpw§.Šª¤¦¦¦8~ü|÷Ý^BB45u ³SúœÏï@[['ÚÛ»ÐÔÔŽŽŽ.BTW723+0~¼£Š e4’‘QŽ[·¸Ø²e‰ªM¡P( ˆÏ˜šÀÈHFFú00Ð…±ñ˜™ÀÀ@úš‰ÉŒ£ CC=˜˜ %å*~øá[®Fg§ˆ&˜V2—/ç÷ºf±˜Ýá@"Hº£"MLÆÀÙÙÞÞ¶ps³F}}%""‚¡§Gsé’Áöß–-o!4ôÚŽüÝœ<™_=> ÏH$))Ehnô¨•N8{öœÇœÀüùøüóÇi l5ÀÁÁ~~cÑÑ‘•+§©Ú e@ÄÆ&ÃÓÓS¦¸©Ú …¢€·ß^$O¦>ttJ°sgfÌð«F7"‘99UòÿÍÍ áêj //¸ºZÁÍͺû¯U¯ê2çΛmO«Î¨¡ôß¿ÿ=..F´ÿ(è3:;Exï½øõ×l…ïc2&“ÕÃÍQ,–@$ãüù,^<ܦj%]]"lØpÇŽÝÀ[o-ÄêÕá4,B¡ YâÏçÓñ„B¡PHg§{ö<77+¸ºZÑLí?ÊhbÔ‹úú:øßÿFt´Üݽ`jj>¿Cî.ßÒ"@{ûíçmmèèèB[[Z[¨¯oE[[§ª†F񯯠gŸý99•Ø¿ÿEÌšå£j“(ŠpüøMtu‰ñØc“Tm …B¡hFFú=*dP4 Ú”Ñs¨ 466âã?V†-*G__cÇÂÅž¾vvƌޘ;7=‚U«¦á¥—fcýú9ؼy>üðQìÙó |ªªM×8Š‹k±hÑW¨ªâãøñu£VÈ8~ü8®^½:,çQ[[¶nݪÔ6UEAA~úé'¥´UQQmÛ¶!33S)íÝmêMaÿþd,\ss#U›¢r”yî 7\.W^Öñn´éùä“>Û=wî‚‚‚ ¯¯___ùÝœ{µKQ=„|òÉ_xíµ_ñòËáØ½ûiŒ£«j³ú<>ëëë…ØØXxxxÀÈÈÏ<ó Äbi™«øøxøûûCOO&LÀõë×åmöulÀÁƒáêê ,Y²D.ÐÝyÝï»Ož< âÙgŸÅ¿ÿýoœ:uªÏ߸wï^¸¸¸ÀÈÈÏ>û,$²z\†D"ÁÚµkajj |øá‡nï¯Ï?ÿööö°¶¶Æ?ü€7ÂÚÚvvv8xð àÙgŸEYYžzê)œ:u %%%ïñ=Ë—/GJJÊŽ{¡-ý ÎÈ®Z5&þ¼eœ;ðÎ;ïÀÚÚúúúGyyy¿¶õ5ÎÊøæ›o@Á´i÷¯š¤-çÑpŒgO<ñŽ;@êBŒ£Gx<BBBÐØØØç<ÔÚ²Ïå }­W¡hm0šçeõI_íÜÍPû‚ 6`ýúõ „P<þÝ Ú=ûo(k1EãY_sÏÝcg_hS?i5ä.ªªªHRRÒÝ/÷Iqq1122"„ÒØØHìììHRRéêê"­­­ÄÎÎŽìØ±ƒ’@LMMÉ?ÿüC¸\.100 K—.%—/_&uuuD__ŸüþûïD óçÏ&“Ijjjzµ[UUELLLÈ?þH9vì144$999½Úíììì×ïHJJ"UUUýþÝ”þ#‰Éºu±ÄÙy9x0eX¿+66–Üã°¾'ŠŽOGôôôÈ‹/¾H:;;IQQ;v,9sæ ár¹ÄÄÄ„üþû綠½|ðÁÄÅÅ…H$…ÇfZZÑ××'GŽ!ä‹/¾ È_|Ñãžegg“ììì~½w¸Æ³7’gžyFþ[õõõÉÓO?M!dÿþý$((Há!„ôx~¿uëHÎ'?Ã@ú[Y}¢¨eôCRRñ÷÷'‰„¬^½šÌš5‹´¶JçEãßÝ(£ÿ†ûzEóË`×bŠÆ3EsÏÝcçݨû|CéÁ5¥Š„âàà@nÞ¼I!äàÁƒd„ =Þ¿víZ²~ýzÂår RQQA!D ÔÔTùûdƒO~~~¯vwíÚEfΜ٣ÝG}”ü÷¿ÿíÕn¡bÆðÐÙ)$Ï>û=ñðxƒœ;—3ìß7ÁCÑñ)È*++åÛfΜIâââȧŸ~J/^,½««‹lÛ¶´µµ)<6ßxã òÄOôØ6~üø{Š}}÷|@~øaù뉄ØÙÙ)3jjjä¯MŸ>üþûïýÚ?„¨—˜annNºººä¯mÞ¼™,]ºTþ;e ‹¼¼<¢££C„B!!„7n[[[ùç<<...X·nï»MÑ8ûÁÀÞÞ¸téø|> ‘‘qÏß¡MçÑpŒgaaaàóùÈËËÃùóç±víZ´´´ ¤¤‰‰‰X¸pá€ç!mÚç€röû@Ö«2­ Fû|¢¬sá~íCë‡ììlTVV†ûÊP4þÝ Úƒ[›Ýk-¦h<ëÏ_ÚÖOṴ́Ц¦¦˜1cJJJz<¾ýö[=ŒcÇŽaóæÍxçw——‡k×®õ9›ššöJV__33³^íRTCSS;–-Û‰¼<Ž}'ºªÚ¤^Üïøì “^ƒáÑ£GÁçó›æææ¨©©é±m  ïLLLP__ßã5E“¦6q÷¾ª©©………Ò¿§­­í¾ïQt PTÃþý—áîniÓû õõõˆ‹‹ƒ@ À#QE$o IDATֹПv†Ò®®®øí·ßðé§Ÿâµ×^“¿WÑø7®µYÖbŠÆ³Á®ñ)šÇ°ŠQQQ¸xñ"8 ½½'NÄï¿ÿÞë½åååðóóÃŒ3Àb±œœŒæææ{¶³gÏ¢¨¨€4yâ‘#G5|?†Òoª«›±tévÔÕµâØ±µ`³ÕÓKf ÇçDGGãĉò4%%«V­‹ÅRxlFFFâàÁƒrÅ:==.\°ÍÇŽCmm- 99ÙÙÙrïØ±c÷¬™­ ”””à?þ -›µ{÷n,X°`Hmêêê‚Ï磡¡€´/ îû9EÇ Ýý Ž´·wáèÑT¬\IÞ eœ;}ôfÏž L™2O=õ”ü.¥¢mŠÆÙ÷Þ{ׯ_—?&NœˆwÞy{÷î ÝçÑpŒg°`Á|ùå—˜9s& ""_|ñæÍ›&“yßyH›÷9 œý>õª EkƒÑ>Ÿ(ë\èO;Cé###èèèàé§Ÿ†¯¯/Þ|óMŠÇ?€ö_ìZLÑx6Ð5¾¶÷“6£t1ÃÆÆ111HMM…——Þÿ}„††"** ÞÞÞÀòåË{}‡ÃÁ¬Y³÷ßîîîØ°aC¯vƒƒƒ±aÃLœ8sæÌ¿¿?}ôQÌ›7OÙ?‡2@JKëñÐC_ƒàĉµpuµRµI}2ãóNÂÃñbÅ øûû#** sæÌÁ'Ÿ|ccc…ÇæC=„èèhøùù!<<‹/°·`Á,^¼þþþˆŽŽÆ† ===ÀúõëåÙìµÐÐP¼þúë˜5k¼½½áââ‚_|qHmº¹¹aêÔ©˜0azè!lذ<ðÀ}?§è´»Ô‘“'ÓÐÑ!IJe“UmŠZ¢Œsçé§Ÿ—ËE`` ¢¢¢°lÙ2¼ÿþû÷Ý6ØqÐîóh8Æ3˜?>ø|~1ƒÏçcáÂ…pßyH›÷9 œý~¿õê½P´6íó‰²Î…þ´3”~¸“]»vaß¾}HNNV8þ´ÿúÃ`×bŠÆ³Î=ÚÞOÚ ƒîºBÝTWWƒÃá`öìÙýj@"‘ ±±–––€ÚÚZܼy“'O†¹¹9iLSVVzÅ6ÝIss3®^½ ‚Ë墨¨³fͺg»%%%ÈË˃««k¯¸rîÜ9°ÙlØÚÚ©ÑLyy#–.Ý++c8ðÌÍF܆`åÊ•¸ë°VHÏ»ÉÏÏGqq1Øl6œœœzlStlfdd ººS¦L©©)€ÞçQ_ÔÖÖ¢®®B¡ ˜>}:Øl6bccÚoÛûË`ögY¹r% 66¶ßŸHNN†™™&L˜ ;D"®\¹@:)Ëâ9ûƒ¢c@Ù f/þŽŽøöÛ§TmʈÀ`0‹+Vôû3Ê8w:;;qõêUÁÆÆ¦_Û€Á³Êd8Ç3ÙÝ?6›ÝïÏ ÇxÖ_î5 õ¾l*c¿+Z¯*BÑÚ`¤æ“ÁŒa0ý­¬s¡¿í(»î7þ)“á¾^QÕü2”µ˜¢ñLUsÏpÎ7”\ïÿ‘ÒL&³Ç˜µµ5æÌ™Óã=ppp¸o[¦¦¦=î899É’{µ+KèBQ=<^–-Û KKc:ô LMǨڤ~Óßãón¼¼¼àååuÏmŠŽÍñãÇcüøñ=^»û<ê‹òòrDDDà·ß~ƒŸŸöìÙ‘H„‰'Ø~Md̘1½j‘„…… 곊ŽÊÈÀáT"5µ›6-Tµ)j2Î}}}̘1cÀÛ€Á³ÚÌpŒgýå^óÐhAû]ÑzUŠÖ£y>QÖ¹Ðßv”Ý÷ÿ´eôßPÖbŠÆ3:÷h?C3(”úúV,_þ- tqàÀK%dh!!!øñÇñᇢ¡¡žžžøë¯¿zd’¦PFû÷'ÃÍÍ<à©jS( …B¡P(#3(C¢±± Ë–í!À¡C¯ÀÂbäCKFK–,Á’%KTm…¢r::ºpäH*Ö®¢‰?) …B¡PFTÌ  šæfžxb7::„8räUXYõN’D¡P(ÃʼnièèèÂòåSTm …B¡P( e„¡bePtttaåÊݨ«kÁ±ckag7VÕ&Q(”QFlìÌŸ?––TH¥P( …Bm(½4+Eû‹%X½ú”—7â·ß^…££¹ªM¢P(£ ‡‡ë׋±jÕ4U›B¡P( …BQÔ3ƒ2`¶ný/æ!.Z©Ú …2 ‰M†««x`tfÿ§P( …BíPÏ Ê€Ø·ïìÙsß~û$&LpQµ9 e"ñÛo×±re(MüI¡P( …2J¡b¥ß\¼˜‡wÞ9Š·ÞZˆ9sTm…B¥ÜNü9UÕ¦P4 +«•˜4é¿xë­#ÈË«Rµ9ʈcl< ›7ßÀcíÄ‘#×Áç·«Ú$ …B44Ì„Ò/8þõ¯±jÕ4¼òJ„ªÍ¡P(£˜ØØdÌ@+(QŒPX…övìÛw ûö]‚žžüüìÎÆ„ ® q¦%Æ)ZXÜSS]$'âŸòffp@Hˆ àëkOO[0™ÔóB¡¨7}еµµ#iE©¯oÅ“OîA` >øàaU›Ó/âââTm‚V0Üû1..K–,és{G‡zzL°XtA‡Ç{LÕf¨œœ®]+Æ¡C«UmŠJ‰‹‹ƒ®®îˆ|!DcÂyZZ„06ÖŽ̋‹ŸŸ€¦¦x””ÔaïÞ‹8}:ii\ܺÅ! 0vvcàˆˆ_<úèdêõë»kjj`eEóH4t¾¹Ø´i<}tNž¼…#G®!%¥ÿüS€ÔÔRtu‰ ‘˜›!,Ì aa^xà/¸»[÷û;jkkÁdRçoMe$çm…ŽK#GŸbFVVÖHÚAQS!X·îŒÇ`ïÞçðÿìw\ÔõÇŸplq¢âFPp¡¸qšY9²Ì½rdýLMS3÷¬4Wšš™fVnE‘! ¢ˆƒ¡€""ÈÞóÖïÊÜ2î¾ÏǃÇÁ÷î>Ÿ7¾ãõy‘H=N#FŒPÚÜÚÚõ16v #ã2YQ™ÆÒÔÔ¥V­!ääP\ü¨œªb±øï•&6u#'ç ùùÁešGCCDíÚï““s…ââ¸7~¾±±bq2áeÒ!Pv¼B³fuª}áÏcÇŽqìØ± ŸGW·††ö¤§E.—Û¸::06îMzúßeÞOþ›:u>@S³¹¹AD²ç>®yóº¬Xñ+V¼ÇÇi\½Ÿ_$ÁÁq$%eáᆇG_}õ&&tèÐWWÛЬYçŽ)—Ë…s'% Ìã½:£££Åtæƒ:#‘Ȉâôé`Μ %55mmaa8w.”âb)¦¦ÆtëfN÷î­èÖ­% ^8vjj*©©©•øß”'•u|(4är¹\Ù"T—mÛ¼Ù¸ñgÎ|A›6/>p üÃlA,–qüø¬rYÍ;ög¢¢’ñòš‹ž^ÕwÊÝÝCY¾üññLœèÀìÙý©YÓ LcnÙâÅ÷ß{àç÷ffoÞJxÊ”_ÈÉ)ä÷ß§•I‡@Ù(,Ó±ãRfÌèÃÌ™}•-§Ê“‘‘GŸ>ë°·7gÇŽ1å:vZZ.}û®£gÏÖlÝúI¹•ÌÖ­^9rSSc>ýÔ™Q£º½Õ¾óÂ…Hþü3«W˜EÉÙ’mۚѭ[Klm›`cÓ˜¦MŸop¨R©ŒÀÀœ>Œ»{(‰‰™4lX“æÍë!‘H O 7·ˆºu Ÿ˜ætëÖ KËjÁ% PeÌ rýúCÞÿGV­ú€?î®l9j»{(“&íåäÉÙåÖí%)) '§5ŒÕo¾y·\ÆTE®_ȲeÇ ŠáÝw;2¾Û W@߄dzppXÍôé}øâ‹o5Æ_1gÎ!BCW`l¬WfMoGÉûô õê)[N•gâÄ=„„<ÂÓóË2ŠÏÃÛ;œO>ÙÅ–-£yï½Nå:v||Û¶ùpèÐUjÔÐaòd'Æë…‘ÑÛ}³³ ñö¾ÃÑ£7ˆ"7·--M¤Rr9Ô¬i€­mc,-Ò¦M,,L±°h€±±~¹þ_•‰\.çÆXΜ æÔ©`ââÒiܸ]º´ÀĤqqéF“]@­Z5°·oI­èÖÍkëFBÍ ŠF03žOvvýûo sçælÛV~«fU±XJïÞk±µmÌöí廊ùûïW˜7ïONœ˜MÇŽMËule“ÊêÕ§9u*˜îÝÍY¸pp¹¶ý1c?ׯ?Ä×÷+tuß®æqff>¶¶‹Ù²e4C†t,7moÆÐ¡?R¯ž»vS¶”*Ïo¿°`Á_><îÝÍ+lž¯¿>Âßáé9—Æß}Öñå—.LÚ[ÙrÔ†o¾9ÆÑ£×¹téë dٻן¥KsæÌ´mkVaóT2™œãÇo²jÕ)ÒÓó˜2ʼn™3ûR£†n…Ì·oß%–,9Š—×¼r¹Pyø0îÝW‘J °PL§NKùôSgfÍê§l9Uš5kNóóÏ~œ=;§Ü.ð_‡Ÿ~ºÀªU§8~ü3:t¨øT:±XÊ‘#×ÙºÕ‹èèÜÜl™5«66ËužÔÔ\¼¼îàãŸ_$™™ù4o^'§6ôîmI¯^­©QC—‚‚bbcÓ‰M{ò“^z—Fn®¢ã‹¶¶ˆFLhÒ¤6 šP¿¾1 ?¹­‰©©1¦¦5ß:¥N@ ¬ÄƦqêT0îî!ܸ‹¡¡.ýúYãæfKß¾Öèéi“––Ëõë1\»CPЂƒã(,S§Ž!;7§K…ÁѾ}!RI@@àef†À?Èår>úè' Ä92SXý|MbbRqrZÊïóÉ'=*t.™LÎûïo!?¿ˆ3gþ§6+t—/G±té1îÜI`Ĉ®ÌŸï†©©q…Í—‘‘G¯^«5ÊžE‹Þ)·qûö]G÷î­X±âýrSàÕ9rÏ??HPÐRê× V÷1b«WcôèÊ-ú,—Ë9r xx|‰N¥Ì+“ÉqwaófOBCáìlÉÌ™ý*¤NˆD"#(è>>\¸ÁíÛñˆDštíÚGÇ68;[Ѷm£çv„HKË%.NapÄÅ¥—Nbb))9$&f‘––ƒDòOZƒRcÃÔTatÔ¯oDƒ5©SÇZµj<ù1"Í*ŒÄÄLÜÝC9u*˜ÀÀhôô´éÛךAƒléÓÇCCÅb†X,%4ôׯÇõkxü8 mmÖÖèܹ9vvŠÔ”&Mj+ù¿P!3Cà¾Æüù‡ñôœ‹¹yå­È©;S¦üÂÝ»IxzέsáÁƒúö]ÏìÙý+<$»¬Ü½û˜o¿=ŽOÎΖ,^<Kˆ>ï—_þ·w8þþ Ê5òcýzw¾ÆµkKÊmLWóÞ{?R§Ž!?ÿ<^ÙRª,ÙÙôë·kk3~ùe¢R4<~œEß¾ë4È–uëFTúü.DðãžܧK—ÌšÕ¾}­*¬ÝdZZ.¾¾‘OöUwIIÉ¡~}#QNNm¨Sçõ •ÊdrRRrHNÎæñã¬'·Ù¥'%e“””MjjR©ì©çéQ»v j×®ñ”ÉQò{íÚÔ®mHÍšúëcl¬‡¡¡ž`‚¼ÉÉ9œ=ÊéÓÁD!iâädÉ A¶ Øî™Î?ññ\»¦HK ŠáÎx$µk× C‡¦´oß„šbkÛ¤BGTÁÌP]@Ïž«˜:µ73göU¶µáæÍXþ½{'0`@»J›wÇŽ ¬^}Š“'gck«zuM’’²X·î,þˆ¥eC/‚ƒƒE¥Ì}ýúC† ÙĶmŸðî»åÛyäÖ­XÜܾçܹ9åŽ.ð|îÝKÂÉi N¥woKeË©²Ì˜±ŸK—îáå5ïµ/ +w÷P&NÜÞ=Ê\´÷m zÀ?záéy+«†ÌšÕÁƒÛWh'†’)>>áøøDpýz R© [Û&88Xàìl‰]‹2ær¹œŒŒ|22òžü䓞žWº---·tû¿#KŸKWW ##…±¡09ô14Ô-Ýfd¤øÝØX##=´´DÔ¬©¶¶jÔÐEKK„‰‰>ZZ¢ K9P=22òðð¸ÍÉ“·ð÷¿ @Ïž­qs³eÀ€vÏÀ+((&,,žàà8nÝŠ%88Žèèär9 š”šŠÛ&BÇ ê`f(X¼ø(¾¾xyÍV[Þ€á÷"Ë8vlV¥Î+“É9rÉÉ9œ;7GerJ³³ غ՛]»|©Sǹs]6Ì®ÒR–¤R®®ßabbÀáÃÓË}|¹\N§Nß2zt7æÌq)÷ñžeéÒc¸»‡°HH}« ޽ÁÌ™¿qàÀ•0ŒæÌùƒ³gCñöž§Ô×;wزŋ“'oѤImfÎìËðá]*å™—WÄÅ‹÷ðñ Ç×7’‡Ó06Ö£gÏÖ89YâìlY©áö99…ddä‘—WDNN!99Eäæ’“SHvvÁ“m…ÿº¿¬¬‚'Û ),“]øÊy tÐÖÖ¢fM}´´414ÔCWW«ôgb¢¸@Õ××FGG ‘Hñ€5tÐÖ=eŒé=µß‰4Ÿ©k¥££…¾þÓÇPÝgÞgcã§ÇÒÐкq”ÙÙœ?›³gÃðö§¨HLçÎÍquµÅÕÕ†fÍê¼ä¹…„„ÄË­[ŠÛG2hÞ¼îS‡McÁ0¨zf†€¢½Ö€Ø¿ NNBaÃ×ÅÛ;œÑ£wrâÄgØÙµ¨ôù2éÓg|`ÇʕʭáP\,aÏž‹lÙâ‰\³fõcüø^•^„nïÞ‹,]z¬ÜŠ~> þâÆ‡œ;7§BÆø‡¢" :-eêÔÞ|ö™Pø³"ˆ‹K§_¿õŒÙ•eËÞS¶@q!ß¿ÿš5«ÃÁƒS+,Íãu‰‰IeëVo¤NC¦Msfôèî•V×£DƒO8ÞÞá\¹M^^­ZÕ/­µÑ£‡9úú•§çm).–PPPLnnb±”ììÄb)ùùÅäå)¶ee KÈÏ/&?¿˜âbiéó²² ÅJ}Q‘¹\^j”äå!‘H‘Hd¥ESòó‹ž]RÞ(¢N^|Á¬0h^}A­¡¡ñLÚÅ‹06ÖçE_ç¶r/1ƒþ‹žž6ººÏ.Žèéi=wÑDa)>wÿ6ôô´Kÿ÷\%Ñ8 SImm­§¾GÅøúFâîЇÇm²²ò±¶n„««-nn6XY5zÅ«¡(º[½¢¸MIÉASSƒfÍêÒ¶m#Ú¶5£m[3Úµ3£Aƒš¯S@@@eÌ 3fZZ"öì™ l)jƒL&gÀ€ 4mZG©¯[ÉŠêo¿MÁÙ¹òWTe29ÿĺuå2i’#3gö}í“°ò$55—^½V1fL k мú>ú‰k×–`fV«Âæø§ðçµkK05N8Ë©TÆl%;»w÷ÿ©TŒ72tèf–,y—I“•-PÔôøé§ ìß]]m&Mrdüø^¥Ñ•…X,åêÕh.\ˆÀÇ'‚ˆˆDttDØÛ›ãèh“S¬­Ÿ_HTಳ ‘Ëÿ©"“ÉŸ‰Q-EOm+(S\,yj[n®ÂDù7ÿ6Y^EVVþkk–É^~Úþ"ã&?¿ø¹ÛKL¡ÿRX(~îöKðôë&“ÉÈÉy½ÿùß(Œ'æ‹CC=4559é鹤¦æQT$ÆØXŸV­êcccF›6 KSšjÔÐÅØX‘ÒT£†.††ºO™{ ™„…=",,žÛ·ã¹};ØØ4êÔ1,56Úµ3ÃʪææõÕ¦Àº€@5G03ª;Ñ ¶_߯hÑBèïýºüõW_|ñ;^^s±°h T-Ó§ï' oïyÔªU£ÒæõögåÊSÜ»÷˜áû2w®‹RW8fÏ>ÈåËQ\¸0¿BCI‹‹%ØØ,fþ|7&Lp¨°yàý÷·P«–»w FkE°iÓy¾ÿÞw÷/^kų²Ù´é~~wñó‹äÎ455èØ±ŽŽ s£C‡fBH½€Ú—^jlÅ ££…“S\]m0 íK»šäå‘‘‘OJJ©©9¶¶Køá‡xï½N•2guB,–Ò©ÓRÆëÅœ9•-§Ê¡*ÝB^—¿þ böìƒ<8U¥‹TK$2Nœ¸É–-^DF>fÀ€¶ÌšÕNš)[Z)ii¹\¼x_ßHüü"IHÈÄØXîÝ[áèh£cÌÍ+ ƒb IDAT¦x²€@E“ššË¹s¡¸»‡âï¹\N÷î­žtFi÷Öµ—’“sHJÊ"11“G2ˆŽNáþý$"#“HJÊF.—£©©––±XZúwƒ5±¶V¤©´jUŸÖ­MiÕÊTX(?3£ºRR\ÍÏoÍ›×U¶µaƳìÞíÏ•+_«\óâb ®®ßch¨Ë‘#3‰Ê¶Ò–“SȶmÞüü³ÆÆúÌë°a]Tj/)) GÇ5LšäÈܹ®•:÷ˆÛ¨]Û;ÆTê¼Õ'n1cÆ~«LôSUáܹ0ÆßÍîÝpuµQ¶œ×æÓOåÊ•h||æ©|Þº\.ÇÃã6[¶xrýúCzõjÍgŸõ£W/ eK{†û÷“KSR._Ž"'§3³Z8:*jmôêÕš:u •-S@àÉÉ)ÄËëîî¡x{‡“Ÿ_L§NMqq±aРöåv_üÄÜHæÞ½$îÞM"""‘‡S‹‘zzZˆÅŠ.; Ô¤ukÓÒsóúXX4 ~}£rÑ$ PÌŒêÊĉ{ÐÖÖ.ÄÞ€ÌÌ|ìí—3cF_•mžˆ«ëw|öY?þ÷¿·[Ñ‹¥ìÛw‰~ð@"‘1kV_&Nt|n[6e3cÆ~®_È… ó+]ßîÝ~¬_ïNhè ´µE•:wUgäÈíèêjñ믓•-¥J‘‘‘‡³óZœ­øþûQÊ–óFdeåÓ»÷:zölÅ–-£•-çµ¹xñ?þ艿ÿ]:vlʬYý0 J¦NI$2nÞ|Xš’róæCd29ÖÖž¤¤´¡k×–*W»D@àUIðó‹äÌ™Ο¿Mzz–– quµÁÕÕ–víÌÊ}N©TFtt !!q„†>"44ŽààGä磧§CíÚhjj•UHNŽ¢ÝpI·–V­êcn^Ÿ–-ëѪ•)-[ÖÎ3ž`fTGâã3°·_αc³T¢æº°zõi¼B@À"•.ž¶w¯?K–ãÏ?§Ó­›ùk?O&“süøMÖ®=Crr6ãÇ÷â³Ïú©\J —/G1|ø6öì™ ”´—¸¸tìí—óûïÓT:ô]Ýxø0=V²wï Pt¦ªÀ´iû¸v-ŸùjæìåÎ'ŸìT»¨€[·bÙ¼Ù0Z·6eÆŒ¾ ÚI¥"ÝþKNN!—/GáçwÿH¢¢’ÑÕÕ*mëèØ†¶m…°ê…T*ãÊ•hÜÝC8{6”„„Lš4©]jlØÙ5/sdëËæ¾s'k×ø€«W£IJÊ¢fM}¬¬ѨQM tIHÈäþýd=Ê@*•!iÒ¤ImÌÍëѺµ)-[*ÌŽV­êS¯žÍ!P­ÌŒêÈÚµgðð¸—×\eKQRSséÖm9ÿûß@¦Oï£l9/E.—3aÂBBáå5÷µB²/\ˆ`ÕªSܹ“Àðá]øòKÌÌjU‚Ú·C"‘1`À7®¥ÔÕû~ýÖÓµk ¡îL9²zõi¾ÆµkKTúBOÝ8yòÓ¦ýªòu'^Åœ9pþ|>>óÕ2ýáîÝÇlÙâűc7hÔ¨Ó¦93j”½ZD;$$d–¦¤øûß-mÛ«Wë'-`ÛШ‘& >Èår‚ƒãJ ˆFE%S·®!ÚàêjƒƒƒE…GDÜ»—„¯o$¾¾\¹]šãêjË€íH¤Ü¿ŸÌýûŠT–¨¨$îßO&;[Ñö¶$š£ÄÜ¢9ª‚™QÝ‹¥tíºŒÏ?Àر=•-GmX¶ì8GŽ\' `úú:Ê–óJ22òè×o¶¶Ù³g W΂ƒãX¹ò$/Þ£ÿ¶,\8X%*ð¿Š;.°víi||æ+µæËúõîüñG ×®-V'ˉD†ÝRFêÆüùnÊ–SeHNΡOŸµ¸¹Ùª}BúôYGÇŽMÙ¹sœ²å¼5qqélßîÍï¿_ÅØXŸI“;¶—ÚDÌÈårnßþ§l``4……bÌÍë—ÖÛèÑ£FFêñÿ€ÂX8{6”3gB y„¡¡.}ûZãêjCŸ>VÞ‚µ¸X‚Ÿß]NŸÆÃã6ytéÒ‚>êÆàÁퟚ?99‡¨¨¤§êuDG§—þÂhŽ–-¿ ÑUĄ́nxx„1eÊ>BB–«ÍI“²IJʦ{÷|ýõ`&NtT¶œ×æÊ•û ¾eˆ2~¼ÃS÷ÅĤ²fÍiNž ¦S§¦,Z4{û–JRúf(³èç }ÄÀ9wn66•ª¥*àîÊäÉ{¹|ùkš6-¿Ž<Õ öpçN^^s+üd¼2ð÷¿Ë‡î`Û¶Ox÷ÝŽÊ–S&RRrص˗}û.0vlO&OvR»‹¢" Ñ¥]Ržn«HIéØQh+ >ÄÇgpî\g΄põj4ZZš8:–´|mGíÚ5*t~‰DÆ¥K÷øóÏkœ9‚H¤É;ït`òd'¬¬¾ðyÅÅ’Rƒ#::…¨¨g£9jÖ4xÒY¥~i—•Ö­MiÒ¤v…¥ØT‚™Qݘ>}?EEbvïž l)jâEG8s&„€€Ej üo¾ûî›7{rêÔç´kgFRR6›6ypàÀZ´¨Çüùnj—{®Ì¢ŸÿE.—cg·Œ?ìªtc¥*ðÉ';‘Hdüþû4eK©2”´5ýóÏéôèÑJÙrÊ þâøñ›\¸ðU•è“SȾ}—ص˗ììFŽìʧŸö)×6Û•IZZ.—.ÝÃ×WQL4>>##=zôP´€uphC«VB Xõ ==0ÜÝCñó‹D"‘aoß\\lhܸbÓr³³ 9~ü»wûsï^NNm˜>½½zµ~£qRRr¸w/‰¨¨ä'·Šßãã3ÐÑÑÂÜ\‘¦òïV²­ZÕWúù–€À ÌŒêD~~1¶¶‹ùî»Q ÒAÙrÔ‚ÄÄLºw_É·ßUË´©TÆÈ‘ÛILÌbÐ ö‘‘_~éˆ]Õn•LÙE?ŸÇÂ…øOO¡MY()L¼cÇXn¯l9U‚dzpv^Çðáv,[öž²å”+yyEôï¿Ö­MÙ·o’²å”EEºÊŽ>ÄÇgðÎ;˜9³/VV”-­L(ZÀ*Œ€€(²³ iÔÈä_-`-¨[Wýj T?òòŠðöçìÙP¼¼ÂÉÎ.ÀƦ1®® cÃÒòÅQeE.—ãåÎO?ùpéR,^<¤ÌÝXòó‹K³£$…E,––¦¬XY5Ä¢Aé­¹y}¡.‡€²ÌŒêÄ©SÁ|öÙnß^¡uTùóÿäÂ….^\¨–;l±XÊ–-^lØpmm_~é¤IªÙfõU¨JÑÏÿâëɨQ; \Rá«3U™ϲoß%®__ª–ß5UC.—óÉ'»xð OÏ/«ä>ÿÊ•û ¶•?däȮʖS®H$2Nž¼Å–-^DD$Ò§%³fõ£kWõH|‰Œ[·âë«($zãF R©+«†88Xàà`A·næT½Ï¬@ÕB,–réÒ=ÜÝCñð#))›æÍëâæf‹‹K;:uj^am˜¯\¹ÏÊ•'¹y3–¡C;ñí·C˽(²D"#66ððîÞM"22‘ÈÈÇ¥&‡¶¶ˆ–-ëѦMÚ´iˆ……)VVh֬ޮ"PYfFuâóÏ’žž§R‚ªLll«Y½z}ÔMÙrÞˆÿ¶Yuv¶äìÙ0~üñcÞ¿³²å½ªRôó¿ˆÅRll1w®«ZÕTQ%¤RööËyï½Î|ýõ`eË©00šôÄÛ;Kˆ̜ٗwÞé Vǧ×!99ÿHüýïâçw—dz06Ö£[·’z´nmªl™/%""‘³gCqw%4ôÆÆzôík‹KùwFÉÉ)dÅŠ“üö[Ç۱ví¥Ôx+*’pï^áá „‡'–@XØ#23óhÚ´mÛþcnX[7Š} ”Ą́.„…Å3`À._þZ¥VµU•””ìí—³xñÆï¥l9¯Å«Ú¬ŠÅRþ¹\Ή³Õ*ÕdÞ¼ÃxzÞÁßJvc8zôŸ~eÔ¬i l9jÇøñ»ÉÍ-äÏ?g([J•`âÄ=„‡'âã3_튿 W¯Fóþû[ؾ}Lµ¨žÀ–-^œ½Ÿ}ÖOÙr^ÈÛ¶Y={6”‰÷òã>¼K%(-Ço¥ @ÌÉ“³U:G|äÈ혘ðÓOc•-E­Ø¼Ù“Ÿ~ºÀÍ›KÑÑ©š+Ë•EnnNNkèÕ«5›6}¤l9•JVV>ŽŽkpq±aíÚáÊ–S©¤¤ä°k—/ûö]`ìØžLžìD½zêß²öUsåJtiäFxx""‘;6+í’Ò©S3¡¨°€J’Ÿ_Œ·w8îî!OuF)16¬¬Þ®3JNN!£Fí ##Ÿ#GfªMä’X,%2ò1·nÅrëV,ÁÁqDF&"‘ȨU«íÛ7)58:th¢2‘'JE03ª ;Ë”)NLÚ[ÙRTžmÛ¼Ù´é<×®-Qɾ¼¼"vîôeÛ6o õ˜;÷ÍÛ¬._~‚_~¹ÄéÓŸWh±²rút0S¦ìãĉÙtîÜLÙr^Êž=þ¬]{†ÐÐåÂEùk"“ÉéÑc%¶ãÛo‡*[ŽÚ³hÑŽ»Ÿß‚r [V'Ž¿Éôéû9vl]ºTÝ¢§/";»_½Ä®]¾dg0j”=S§:W«Í´´\.^¼‡Ÿß]üý#yô(ƒ5téÞÝ…¹aiÙ@¥qê‰X,åòå(ÜÝC8wî6IIYeꌒ]Èðá[ÑÑqäÈ,µ5ô Åܾ_jnܺKtt 2™SÓštèÐ;»æØÙµ }û&*M-PîfFu 55[ÛÅüý÷Lºw7W¶•¦¨HB·nËùà;•+œ'‘È8tè*7ž%?¿˜éÓû0ujï·Úq‹ÅR†ßFZZ.îîÿSÉÜ¢" NNkèÒ¥?þø±²å¼’øø ºtYÆÁƒSéÝÛRÙrÔ?¿H>üp.ÌÇ¢Á«Ÿ ðBnÞŒeÈM|÷݇jqUQŒ½“G28þKµ=y/+EE~ÿý*;vøŸÁàÁí™>½66•-­Ò‰‰I}blÜåÒ¥{dfæS¿¾½zýSo£Q#Õ Ã¨¾ÈdrnÞ|ˆ»»¢€èƒ)Ô¯oô¤3Š-½z½^g”´´\úõÛÀtV¹sÚ²“SHHÈ#‚ƒAA1<~œ…¶¶›ÆtîÜ;»ætéÒ‚ „è*Ž`fT.^¼ÇˆÛ [Q-Wë^ÄÑ£7puµyÊ Ø¿ÿ2K–åÊ•Å*–wî\«WŸæÁƒ>þ¸_~éZæ÷òñã, Ø@­Ù±cÌ3÷K$2d2Y…G¤¤ä³óÓÀ–-^üðƒ/.T›ƒÑ€èܹ9«WS¶µ`êÔ}<~œÅñãŸ)[ŠÚŸ_ŒÎSÛ$..©]Û?þ˜V­WãâÒqv^ËÌ™}ùüóÏÜ_PPŒ¾¾ÎsžYõHdœ>Ì–-^ܾƒƒÓ§÷ÁÉ©²¥)©TFXX|i—”k×¢)*’`n^¿4%¥gÏV*‘)P½‰Œ|Œ»{gφ‡±±}úXãêjƒ³³ÕK¤î3rä6þþ{f•ŽX‹ÏàÚµÅÃ;ñH$2ÌÌjÑ¥K‹'Ñͱ¶6«r ª9‚™Qػן~8Op°Pü³™LNãÆÿà‡>bØ0;d29ŽŽ«qp°P™œëëײzõ)îãæfË×_.×n4~~‘|üñN–-Êøñ¥Ûãã33ægæÌˆ››m¹Í÷<<=ï0fÌ.ºvmÁŠЮÉÉ9ôì¹’éÓûðÅÏ^¨*7žå·ß®pãÆ7Õú‚òuHMÍ¥s祬_?’#ªo$Á›PT$¡K—oùî»Qôëg]º}Û6oÖ¯wÇËkžÐÚؾ݇uëÎ<õzˆÅRV­:E||Fµ¬åçÉÖ­Þøûߥm[3fÌèÃàÁU¯­ë›PX(æÚµ¥‘aaÐÐР}û&¥QvvÍ…´A•">>£´åkIg \]m0 uê>óœ%KŽrëV'NTŸ…ƒüübnÝŠåÚµ\¿C`ಳ 00СC‡¦tëfNçΊè UŒNxm3£:ðÕW•Ì_ mKˆM£[·€šš`aaŠ««-›7{âï¿@éíkJÎpòä-ºtiÁâÅC*¬fÄwßcÓ¦ó?þ:4ÅÓó3füFNNC†t`ÇŽŠ-h¹e‹«VBKK©TÎðá](((æÆ‡øû/P«üÇÐÐG ¸w÷ÿѾ}eËQi¶mófófOnÞ\ZmVÊËÊùó·;ög¦OïÃüùn$$dÒ§Ï:fÍz~$BuD"‘áæöFFzüõ× 2™4i/ÁÁqÄĬ¯¶¨¡¡Ø¶Í›S§‚iÔÈ„©S{óá‡öÏDûTG22ò¸t) …¹“о¾öö-qpPtJ±¶n$Õ*CzzçÏß.íŒ"KéÒEÑÅÕõŸÎ(ééytツ͛?fàÀvJV­d29wï>~¹¡ˆàˆŽNAKK[Û&tïÞŠ=Z æ†ú!˜Õ1cvQ»v ~ø¡zU·aŒ·P|üE"M¤RVVؾý“rÏßOJÊ¢~}ãWž¥§çñÃìÛw‰fÍê°`Áà×êPRd29£GïäÞ½Ç hÃÞ½ÑÐPl¯QC;wVThîùŒ¿qâÄM¤RÚÚ"ärxçö¬[7‚5Ôë Ò¥Ë2FŒèÂܹ®Ê–¢²ÈårVãèhÁªUBJÎëòŇ8räb± ‘H“víÌ00Ð!--¯Z׈xÁÁq üãÆõäðá ‹‹¥€Ly&­­ºñða;wúrèÐUôõµ7®&8©¨ÿ"66­´˜è¥K÷HKË¥NC,prjƒ££…ʶ½¨~”tF9{6OÏ;dg`kÛ—v¸¹Ù²oße""øûï™Ê–ª2¤¦æE@@—/ßçîÝÇϘ]»¶P»óÐj†`fTú÷ß@¿~ÖÌŸï¦l)*ÃæÍž|÷Ý9Š‹%Om×ÒÒD.—3ztæÎ-{] P`rpXúuÃ<¸ýsSX(f×._¶nõF__›Ù³0zt÷J  {Ä»ïn¦¨HŠL&{ê¾C‡¦áèXq9ÖNNk¸w/é™í"‘&&&úÌëÆGuS›p诿>•+QxyÍS¶•åòå(† ÛŠ§ç\¬­)[ŽZ •ÊhÛök²³ K·ik‹Éä,\8˜O?uV¢:ÕC,–2dÈ&‚ƒ¡©©0gAñšÑ•õëG(Y¡jžžÇÞ½þìÝ{‘‚1~Ø•)Sz¿v”ˆˆD•îˆU^ÈdrîÜIÀÏ/_ßHõ6Z·6Åѱ NNmèÞÝ\¸èP J:£œ>Œ‡GÉÉ9˜™Õ"!!ƒ_~™D¿~ÖB„ÑsHIÉyblDqåJt©¹Ñ¾}Szôø'rCˆdS)3£:ЮÝ"æÍsc̘Ê–¢2LŸþ+'OÞB*}þÇ_KK‰DÆÂ…ƒ™9³ï[ÏSPPÌ{ïýHHÈ#LL ^öÔê©L&çðá@6nS¦81}zŸJ=!*I+ùgåò´µE|üq· [=—Hd´l9‰DúÊÇ=: {û–¢£<)éа¨ZµD|fÌØÏƒ©œ9ó…²¥¨ %ÐÑÔÔ@.‡O?ufþ|7!:ENù¤I{ ‹/øú7&&„…­x£6‡U‚‚b~ÿý*;wú¾v”ÂB1-[ÎcÒ$G–-{¯Õ*ŸÂB1W¯F—šáá‰hiiÒ¹só'Qm°µmŒH¤&¼@ÕE&“ôw÷P~þÙ©TQsà@Eý}Kásúþmn\¾ETT2ÚÚ":tP˜Ý»›cooŽ®nõL[T3£ª#—Ë13û;wŽ{aT@uÄÁa÷ï§¼ðþ’´“_~™È€o—_(•Ê7n7¾¾‘H$R455X²ä]¦LqÀÇ'‚•+Or÷îc>üО9s\*µƒJIA¼;}KÓJžGíÚ†„„,«ÿû÷“qpXýZ½~ýµé‹¥ØØ,âË/]™4ÉQÙrTŽŒŒ<:uZÊŠïóñÇÝ•-GmX¼ø(¿þz±XòÜûE"M¬­±gÏÌÌjU²:ÕáüùÛ̘ñEEâgÌÙsìØ,ºvU}s´²y^”3ú<7:ïÀæÎ= À¸q=Y¹òƒj»Ú›’’ó¤KJ$¾¾wIJÊÂÄÄ€ž=[—¦¤4m*˜ÛÊeܸÝH$2lmsöl(‰Ô®]\\lpt´¨¶õ„^‡¤¤ì§ÌèètuµèÖÍ''KœœÚ`eUõ#ÕT Ą́êdgbi¹€ƒ§Ò»wõÎ.A 0‰äÙ;--:80µLE7¿úêO¸òÔÊ ¡¡¿þ:‰ï¿÷Àßÿ.¶cÁ‚Aå^£ãuX±â$Û¶y¿ÖcOžü¼B ž:ÌÔ©ûxÑn¨d¥kß¾IjÕ.oúôý¤¤dóçŸBÑÝÿ²k—/ëÖ¹sëÖ·BHök"—ËéØq)ÉÉÙ¯|lëÖ¦œ;7G­ ç–7oÆ2hÐ÷¯|œ¶¶ˆ øæ›w+A•úòß(3göeРö¥é˜«‰‰IE&“£¡¡Á{ïubÓ¦„U^é7Š.)‘Ü'?¿˜æÍë–FmôìÙcc=e˨flØp–Ó§ƒññ™@tt îî!œ>Bpp††º8;[1hí+[¾ @bb&~~wññ‰(­«S¿¾ÎÎV¥µuž×]F \ÌŒªNBB&vvßrâÄgØÙUÝþÒoÂÝ»éÝ{ísïÓÒQ¿¾‡O/S‹Ã-[¼X½úô3éŠñ iØÐ„ Ó£G«·ž£¬Èåröî½Èòå'Je/4w´µELžìÄ¢Eï”»†Ïòã^ÏÔ.ÐÐÐ`РölÙò±Ú­?~“Y³~#$d9&&Ê–£R8;¯Åή…P³à ŽÃÕõ»Þ¯¡¡\.çÝw;²zõ°jý™»qã!3gþÆ£Gé/ܧ4jdBPÐ7•¨L}ùw3³ZL™â„™Y-&LØóÔ1N$Ò¤o_+ví/¤;ý ±XJ`àüü"ñ÷¿KHHtèД>}¬prjCûöMÊlÅÆ¦ Ñ/å?Y²ä(‘‘ÏFÄ&&fâîÊÙ³¡ÜGKK''Ë'-_ÛR«–PøeÈdrBBâð÷¿Ë… Å ‘ÈhÛ¶½{[âèØ{û–¾±üÌŒªNdäcœ×âå5O}z‰7™>}ÿ3iZZ",,L9xpõë½õøGŽ\gÖ¬/6ðóS~û×bbRù쳃ܸóÂT“Æk¸¸Üçž4i/gφ>3¯††“';òÍ7ïªeØrvv!66‹Ø¸ñC† ³S¶•áÚµ¼ûîfΜù‚š*[ŽÚ°ví¶mó~nÚ„––##]Ö¯‰››­Ô©EEÖ¯wgÇ444ž[7àüù/iÛÖ¬’Õ©/Š(8t(‰DŠ\.Æ0‰4±·oɯ¿ÇáRÈ IDATNŠä½€ŒŒ<üýïáç‰O‰‰™˜˜àèØggKœ­Þø$33kë¯Y°`3göUËã¦@Åsôè fÌØOBÂË#ØÒÓóððãÌ™üýï"•ÊèÖÍWW[\]mhРf%)V_òòЏ|9Š "ñó‹äþýdôõuèÑC‘’Ò»·%­ZÕW¶Ìª€`fTuÂÃéÛw`fü‹õëÝÙºÕû©h‘H“=Z±gÏ„2…¾_¼x—Q£~záÉ3(.>\\Ú±s縷ž§¼‘ÉäìÞíÇÊ•§Éž¥áã3Ÿ6mÊ7ÆÞ~9qqé¥+ο4øæ›j‹¨+£FíÀØXŸŸ~«l)*Ã_üNhè#<=ç*[ŠZÑ£ÇJbbRŸÚVr±2hP{Ö¬&´Ô|ׯÇ0cÆo$$d<³OÓÒ1{v?æÌqQ’:õEaJþHIkóÿ¢¥¥I»v9thšZ¥*‹ððDüü"¹p!‚+WîS\,ÅÒ²!ÎΊ ž×YÍýóÏkÌž}GG ~üq4õê½ý¢Œ@ÕäüùÛŒû3nxíÜÜ"¼½ïpæL(ÞÞwÈË+¦S§¦¸¸Ø0hPû7^˜óô¼Ã¹sa,[6}ýêcxÆÅ¥?ùžGréÒ=23óiÔȄ޽-K¿ëBêí[$$6 T;îÜIxª{†¦¦"×÷·ß¦”iGrãÆC>ùäçFd” ‘H9}:„ë×¾õ\妦“';áã3›&ÏûÔÖÖÄÝ=¤\ç,.–Ÿñ/ šˆD"¶o£öFÀ€íðön Mu$;»'n1z´ÐUéM¸?ù#C[[DÍšzüôÓXvî+/ sçæ\¸0Ÿ‰ÑÐÐ@$úg¿&•J9qâ–Õ©/‡¢­ýâÓG‰DFXX;wVò믓éÖÍ0FŒØ†µõ׌·›½{ýŸÙ”àáq»´}y@À}œ×àëY™ÿ†€“Sˆ¶¶èR u2¤#;vŒ!4t¿ü2‘V­Lپ݇=VÒ§Ï:6l8ËíÛñ¯5ÞéÓÁ8@ÿþOxÛEíhÒ¤6Ü]»Æºœ“'góñÇ݉Œ|Ì´i¿bmý5£Fí`÷n?>L{ëyîÞ}ŒŸ_õúî ‘U!2ãYìì¾%!!P¬nΞݟ¹s]Ê–“Š«ëwäå½4OûßÔ­kHpð2• •ÉäìÚå˪U§Ë)5~,-âí=¯Üæ¹};žþý7Š•<m~ýu’R눔'ññtíºœýû'Ó§•²å(_~¹Äòå'¸yó[¡ðݰe‹ëÖ¹#‘HK÷®®6¬Y3œºu…Âb¯K``43g 11 ©ô3ûòå¯U&åOHJʦk×o‹_}œÓÒaffÂ_ͨÖvÊB\\:>>øø„sñâ=òòŠhÞ¼.ÎÎVôî݆=Z¡££…•ÕBòó‹KŸWÒ²yÚ´Þ|õÕ !O_€íÛ}سǟk×–”y,©TF@ÀýÒ:‰‰™4kVWWÜÜléÔ©ù3 cr¹›%¤§ç"i¢©©ÁÒ¥C7®§Ê W&ééyx{‡ãéy‡ ÂÉÎ.¤ukSú÷oK¿~ÖØÙµ(5+_ÅÚµgØ´é<Ó§÷©.íÚ…4“ªNllݺ­rÔŸPX(¦eKʦ¦«V c̘²­§¥åââòg=7½D±Ò(5ŒõiÔÈ„=ZñÅT¶ÒqTT2³f 44®´¦E`à7.Ÿ“Ò¿ÿbÖ¬hiiR«V þøãS,-«–á6pàF:thÊڵÕ-Eéôï¿víÌøþûQÊ–¢V °°°x´µEèëë°nÝp† é¨lYjIAA1«VfÏ444Éd,Yò.Ó¦õV¶4µáMº`"ЍNüý÷LZ´xû¢ÚŠˆ—  ¥æÆíÛ OŠ4¶ÁÓóÎsŸ#ibiÙ]»Æ ¦K—ãúõNžü¼\Ç•ËåܺÇ™3!¸»‡‚©©1¶ÃÍÍ–îÝ[¡­-"4ôn|깚š8;[±yóGB‘Qßó+Wîãí}ÛDG§`bb@ïÞ–ôïßggË—ùîÛw=áá ˆDšXY5bçαUý»/˜U’¢P‡J¯^e¯°°œõ  M`ôè_Ø´i8½{·.Óx……bìí׊²H¤YZ¤O__›-êbmÝs󺘛ףuëúÔ®m@½zsRËÕ«WËm<™LŽO'O>D.gçF Ú¼\ÆÞ»7’[·Ò05Õgúô¶˜˜T\îäðáÊ1¾ûîû÷pãÆ7ÕzÕáÖ­XÜܾçøñÏèÒ¥âº*©ûþé¿$%e3`Àœ-X¼Ø•:u*ïdOWWccã ;;;›¢¢¢ ûUŲhÑI³^¨•Eyod29Ço% à>"‘æ3æ½H¤YšÊ#•ÊŸ¹ÿ÷ßÇcm]µ ëÊàEï_rr~~‘=zƒK—îR\ül`PDÈhkk²víˆÒ‚ÔW¯^%66¶Â4 ¼š¦M›boo_©s޹fÍê°n]Åv‹ˆHÄÝ=w÷ÂÂâ©YÓ€þý­10Ðå÷߯۷¥gϧ£sSRR*T«ª—Á•+q\¸ÉÕ«ÑÈdrºtiA¿~Öôëg…Å?µì’’²èÔéÛÒtw--::"Ö®Î<¿½:¾¾FFFèé•Fø fFUG*•ѤÉ~þy|¹TºOJJ"<<¼”)_ßX~úé&K—:`aQ»LcÉdr¾û.7£§§…]š6­IãÆÆ4nlDݺ/.|Ö»wï2Íý"<ÈÇ\îãjiÕ¦^½1ˆÅIM=T.cÖ©ó::MHJÚŽLV±5ÊÚÍ•¤Òœ>ý;VßȨyósíÚƒÒÞö…ºïŸþ‹‡G4¿üÊÔ©qrªüÏ©©)VV“"NRRR…Œý:IYµê2÷m› &&U·ðZEoÂÃÃyðàÙÙÅää‘“SLNN1YYEdg•þž™YHrr……bjÔÐaÞ¼n´n-¤œ¼ ¯zÿìì–‘ñÒÇ”˜éï½×‰Õ«‡1mÚDúˆTÚ|R© KË…¬Xñ>#Gv­´yccÓž¡<~œI\\ÆsÏÉ455‘Ëå|ö™¢0sIZÅ… *M«ªbee…©©)ÙÙ…øúFàéyoïpÒÒriÖ¬}ûZÓ¿[bcÓX¸ðï§Œä÷׬Ž¡áÓÇ:u|}K^'i)SŒ@Å#iR£†.99…å:nE]ŒW4^ââEWZ¶,ûJUFF›7·£Y³:¯Ý¾².¶*ââ]"‘±sçFÞ[.5–/?Áüùnèè¼¼EXY¨(sçuiÛÖŒÆkááVmÍŒ¼¼"޽Á¼y®•6§ºîŸþKT”&·n /S«è·¥2öSi–¼öåòå(Š‹%ôîm©4EEoZ´hüFï_AA1ùùÅ*›Z©j¼Îûw÷îãWðÏ9Á‰7¹z5š ´*ýbZà”q^‘H^^]»V\täóhÚ´S§öfèÐŽOE ü™Lq¾e‹.D²sçXš4Q,:þçâµZño³ÁØXwÞéÀ;ït@&“sóæC<“&9*ÅȨNôèѪJªˆ¾¾Ž`d”3·Ÿ)²ø2$ññ\¿^›ØX¥E- T>>>4kVGiµk¼¼Â_ë³*•ʸsçÎÎë8qâf%(SO455èܹ9  ÂÓs./.$**¹Ôú/‰”ÄÄLþíÛ}ªÔw¿z\…UsÌÌLžjY©Îu ”ÃÀm‰ˆH|aK½ªÎo¿àæf+ö(gþø#°´@÷óÐÕÕÂÈH† kbn^ŸvíÌèÖÍ 9¹¹Zœ>]¾-×T—“'oñÎ;”6¿»{È3Q/B,–‘Ÿ_Ä´i¿2ožâŠWˆŽNye—)©T†T*cåÊ“Œ¹ääªQc¬ê/‹ `fVK03”„½½9ÆÆúœ;ÆÔ©½•-§R OàÖ­X-zGÙRª ÆÐP}}môôt02ÒÃÀ@==mŒŒ^EY’æ0xpûÊ’* D}?™™ù/í^•(((æÈ‘|öY?!½K@@@@@@ ŠÙ¿ÿ2ÿûßÀÿ³wßqM{ÀŸ †Ì°DÀ¢8q´ÜгZG¬»V«µŽ^õVm½×Újë¨ÚºêV¨Š«¶u×=êöºÀQAÙ{¯œûG$Š"CCNžïçÃ’srÎ/É{NOÎy_Ñjpw¯‚Õ«‡‰¶~Cwûv„úoGG«ga‘1 3˜™ÃÜÜÖÖªàÈÄÄ ÅóéáÃð𨘘¸¸èçHS 3*€zõª ''ÇÁÍ­²ØåU8íÛ׃L&Å‘#w0hлb—£¿ÿþ?dfæ`Ð í GDDDÏíÚuyyJ­ÇJÚåéYOŸ¾ÙÈ€'Of£~}78:êg°Ð ÁÍ­2är)îÝ‹»½–žžŽo¿ýVì24æáÇشi“V×™˜˜ˆï¿ÿššŠ 9Ÿ¡½ÖVV¦hÕÊ GÞ»­ñ÷¿€nÝÂÞ¾â^ðb;c9†¶ýˆï¡~ãû§Yb/h›!Ÿäå)±råqøùµ„¹¹‰Øåè¼ß~û —.]*ôþ¿Ø.ʲèS;Ñw 3*cc9\]í)v)z-55_}õ•ØehLpp0V¯^]îë3f BBBÉÉÉX¿~½úï¹sçùC{­Õ­'O#''OìRÊÝýûQ¸|9~~­Ä.E/¶ó’¼¸}¼Ír^dˆÛ¶ñ=Ôo|ÿ4K[Ç ÚfèÇ';w^BddÆŒi'v):¡¸mqþüùBïÿ‹í¢,Û>µ}Ç0£‚hÖÌׯ?» ª€:„ääd€««+îÝ»'rEâèÖÍ98}ú¾Ø¥”;ÿ¿Q½ºÚ¶u»Q”¥¿¸}¼ÍrH³øê7¾T†||’••‹E‹aÔ¨¶prRˆ]ŽN(n[Ck†ˆaFÑ´i \»öBiyÖøøxøøø`É’%pvv†ƒƒ6lØ€/¾øprrÂöíÛÕóߺu ­[·†©©)ÜÝÝðFË9yò$¼¼¼`bb‚zõêá·ß~ÄÄÄ [·nزe  |}}±xñbõãbccñÎ;ï ))éµÏiݺu¨Q£ÌÍÍ1räH(•Åë¬Ë”J%&Mš+++T®\ß}÷€²½Þ¡¡¡èرc¡å</^ÄàÁƒƒÁƒãÌ™3ˆŽŽFïÞ¥¦Ó^k''6tÁ‘#·Å.¥\åääa×®+2¤¤RÝîø³,í¼,ó¾ØÎ çïï777˜››cĈÈÏÏeûxyÿtâĉR-çu iûÑÄgßCñÌž=011AÇŽ®aïŸþÐÄñðú¶PÒ´×íŠS‘OÖ¯?ŒŒ|ö™Ø¥hÕëÚÐËï7lß¾®®®¨T©úöí[dÐñr»xÝvð:ºÞNÊ¢¤}àë¶Ñ!C†`ß¾}€ˆˆ4nÜ{öìDFF¢I“&HLL|óªî܉œœ& F¿Õr¢¢¢„'N”zþÈÈHA*• sæÌ”J¥°råJ€°`ÁA©T ßÿ½P»vmA!--Mprr~úé'!++Køë¯¿+++áܹseZNTT”`ii)lܸQÈÊÊöíÛ'˜™™ ÁÁÁBXX˜P©R%¡_¿~Âùóç…Ý»w îîîêzW¬X!tîÜùµÏ€0vìX!;;[xøð¡`mm-?~¼Ü^¿²ò÷÷J»Yÿþûï‚D"¦N*¤§§ gΜ¬­­…ÀÀÀ2½ÞAAA‚]¡e{yy G'''áĉBNNŽ"˜›› ‚ aaa‚‰‰I‘µiâµ.ëë¡ K–7þZÈÏWŠ]J¹Ù³çªP­ÚT!**Iëë.ÏýSYæ}±GFF ÆÆÆê¶üèÑ#A¡PGŽyeûxyÿtïÞ½R-§¨çõ¶ÛÏÝ»w…»wï–zþ²*Ëò5õÙPÑÞÃòü¼)ËûwèÐ!ÁÙÙYxðà’’"¼ÿþû¸qãAà6Xœò|ÿ|}}__ßRϯ©ã…âÚBqÓŠÛGWOÊúú—ULLŠP·î¿…+Ž•Û:´åĉBTTT©æ-® ½ü~߸qC011vïÞ-dff K—.K—.-ôþ¿Ø.ŠÛ^¦©ãز<ÿ7Q–å·,nýâ‹/„#F‚ :.711†.‚ lÛ¶Mðòòz›z/ëÎQ>•«¼¼|ÁÝ}¦°uëù·ZΛü³@HKKAîß¿/Èår!77WA¸víšàèè(‚ lß¾]hÚ´i¡ÇOš4I˜Xx›×Zt/Ì(¯^ »”r3`ÀOÂðáëDYwyîŸÊ2ïËÿHž>}ª^o»víÔ?/n/ïŸÊ²œ¢ž×Ûl?ºfh곡¢½‡ºfìÛ·Opvvnß¾-‚êÓÄÄDA¸ G× M/׊›VÜ> 8ºz|RÞaƸq›…V­¾23sJžYÇ•åŸíâÚ ~¿§OŸ. 2¤Ðã===K 3^·¼LSDZºf¼nXÜ6züøq¡Zµj‚ ÂØ±c…‰' 5jÔAF-|ùå—oSïe^fRAÈdR´lé†Ó§Å¹îËÜÜ ‘H`bb¹\®¾] 44ÁÁÁpuuUÿlß¾½Ð%¥YNxx8ÜÝ _«_·n]„……¤R)œÆÆÆèÓ§víÚ…þù·o߯|ðÚç!“Éààà ¾ýâzõ‘››ŒŒŒÔ·6lˆÈÈçÅ–æõ./†öZ@ƒΨZÕÆ`/5yô(çÏÿƒ¡Cõ«ãϲ´ó7Ý&œœœÔ7ï‹û§·YŽ!m?šúlx“y_Ä÷ðÍôêÕ  €··7jÔ¨Ï?ÿü•SŠùþé>M/׊›Vš}€6éò{{üx~ûí:,SS£’`@J³¯)B÷5hРÄu”´¼H—ÛÉÛ(jXÜ6Ú¦M$''ãþýû8uê&Mš„ÔÔT„††âøñãxï½÷Þª†H‡uqöìäçëæõZVVVhÛ¶-BCC ý¬ZµªÌˉ‹‹+t_||<¬­­¼º34hvíÚôë×Oý\¼ü:ÅÄÄÀÖÖö­—›žžþÖË0TݺyâÈâõ×_/ÂÉÉ;Ö»½e(;š¤©Ïmá{X˜ X¼x1âã㈬¬¬b¿4ß¿¢iâx¡¸¶PÜ4Mî ùø$33_~¹ýû7C»vuÅ.Gëʲ¯±±±ALLL¡û^nãE)¯ãf}WÜ6jdd ==uêÔA‡°yóf¤¤¤ eË–oµn†H»vu‘””›7ÃKžY>>>8sæ ‚‚‚hÖ¬öîÝ[¦åtéÒGÅ£G¨:ïÙ½{7||Šî©K—.ˆŒŒÄŠ+0lذBÓöíÛ‡Û· ó[t@•¤þñÇTÃH­Y³={ö,Ó2ŒŒŒœœŒ„„ÀÅ‹ñðáÃ2×bè¯unÝ"88¡¡%hê“ÜÜ|ìØqC†´€LÆm3äíGSŸ ºÎPßÃ… ¢C‡ËåhÞ¼9† †§OŸŠ]–ÆêûW@Ç Åµ…⦽é> ¢Ÿ|÷ÝŸHIÉÄܹ}Å.EeÙ×tîÜÛ·oWŸUqóæMœ>}ºÄu·èK;)%m£={öÄ?þˆvíTÃwêÔ K—.E÷îÝ!•¾Ý1#8+7·Ê¨ZÕýuWìRŠT§NÌ›7-[¶„ÜÝÝѰaC <¸LËiܸ1¦M›†fÍš¡k×®ðððÀ€н{÷"ç722Bß¾}ajjŠN:š6yòdu¼†¨eË–˜:u*Ú·owwwÔ¨QcÇŽ-Ó2jÖ¬‰-Z iÓ¦èÓ§¦M›†Ö­[«§W®\'NÄÕ«W‹]Ž¡¿ÖZ´¨+«J8|ذ>ðŽ¹„„t|øa ±KÑ+¥Ý>JbÈÛ¦>Ê ßÃâ >aaahÔ¨|||0hÐ Ì›7Oì²Ôøþ•Ž&ŽŠk ÅM{Ó}@E:>9uêÖ¯?ƒùó?€½½…Øåˆ¢¤}Í‹ïwŸ>}Ð¥K4hÐ;vDïÞ½_û¥ç‹ŠÛô¡”—’¶Ñ=z 99¹P˜‘œœüÖ—˜€D´::AAAèСƒf {ADDîܹ—W®g+‹ÐÐPÜ¿®®®¯ô¡ñ²‘#GÂÑÑ ,xãõ•Fy¿~ðóó+Ó¼YYY¸pᬭ­Ñ´iÓ7Zo^^þþûoª}Áµ²€j¸ÛëׯãÝwß…µµ5agg÷Fë)«7y=´a„­ˆŽNÁ®]Ä.Ec† Y ¹\Š­[Ëvp«IÚØ?•†R©,u;qû°±±yãåhZÁ·+õë××™åk곡4 á=,Ïí¡¬ï_vv6.]º„¬¬,xyy¡råʯéE|ÿŠçççð÷÷/Óã4q¼P\[(©¼É>@OÞôõÄÄttêô=¼½kãçŸ?ÒÈ2uÅÉ“'Q¿~}8::–jþâÚPQÛú­[·æÍ›ÃÊÊê•åµÐÄvPZe}þb/¿¼?§‹¨÷м¸áéÑÿür Å¢V-‡’ ¸¸¸¼õr : )Nll,Î;‡ÀÀ@\»ví­×©LMM_‡½¬är9Ú´iSä4tíÚU}[ŒƒB]Ó½»'>ýt+’’2 P˜‰]Î[ KÀ™3÷ñË/#Å.E'H¥ÒR·ó—·7]NE ©Ï†Òà{¨Y&&&hÛ¶­ÖÖÇ÷¯|hâx¡¸¶PR;yy‰¿þúëµó{zzÂËËËàOfÌ„‘‘ ß}7@ìRDW\*j[÷ôô„§§çk—WÔ>@Û¡Òæçt^fRÁ4o^ –8pà¦Ø¥è„ÌŸ?K–,)ñì "Miß¾d2©Átð7ìí-Ð¥Kù~[NDDTÀÈÈööö¯ý13Óÿ/ JâïÜÄÒ¥¾°²ª$v9DZÇ33*©T‚îÝ=±oß5LœØYìrD×¼ys\¾|Yì2¨‚±²2E«Vn8zô zWìrÞJ^ž;v\ÂàÁ- —3'""í°··mhÁÍ›a˜5k&Mê‚Ö­k‹]‘(xäY ðîÞ}Š»w ¯7q"}ѽ»'Nž FNNžØ¥¼•ãÇï"::¾¾o7´•Nbb:ƌوV­Ü0mZ7±Ë! ÃŒ èw\áêj;/‰] Q…Õµ«22rpúô}±Ky+þþ£M›:¨QC?¯5&""Ò'ùùJL˜° ðóÏq8tªÐØú+ ‰D‚ßÅÞ½×—§»¢ ÉÉIOϪ8rD‡hŒLÂñãAðóãYDDDÚ°téœ?ÿ¿ü2¶¶æb—C$*†Ô€ï >> ÇŽF„Dú¨[·†8zô.”JÝ:¶´.B¡0CÄ.…ˆˆÈàíÙsK—Á·ß~/¯jb—C$:†Tµj¶hß¾.6m:'v)DV·n Œ7žˆ]J™)•v츈ß‘‘Lìrˆˆˆ Úµk1mÚvŒÛžýT=Ã0£1¢ Μ¹þ‰»¢ ©AgT«f«——šœ8Œˆˆ$øùµ»"""ƒ–€áÃס}ûz˜=»·Øåé †0‰<¹ IDATXçÎ P­š-ÏÎ Q×® qø°þ…¿þú7š7¯ 7·Êb—BDDd°RR²0bÄ:T®l‰•+Ùá'Ñ‹äb@â‘J%6ÌË—ÃÌ™=annRêÇž¾¾/¿Aô³}Ò˜Ù³÷àðáÛ¸pa6äržºV‘egçaĈu¸q# Ÿ¢aC±K‚ Xµê¾ûîO¼ÿ~c,^ü!LMÄ.K£&LØŠ¨¨dìÞ=QìRJ$¼½çÃÇÇóæõ»"""ƒ™„Q£6àÉ“lß>žžUÅ.‰H]ᮄ1cÚ!22 üqCìRHD99y5j=®_‚;ÆéD¨.™ùôÓNضm,NœÆûï/Cxx¢ØeiT÷t)IIb—R¢sçàñãxøù±'u"""M;vì.zôX‚œœ|80…AQ1f\]íÑ·oS,YrùùJ±Ë!äææcÔ¨ ¸z5;vŒG£Fº7vyûöuqàÀäç èÑc Î{(vIÓ¡C=ÈdR9rGìRJ´mÛßhÖÌõê9‰] ‘ÁHIÉÄ”)¿bذ_Ю]]ìß? 5j؉]‘Nc˜A€iÓº!44{ö\»Ò2U±W®„`ûöñðòÒ½ £€««=ö֭kcÈUøå—Sb—¤––¦hÕÊMç‡hMHHÇÁƒ71t(‡c%""Ò„¼<%6m:oïù8q"›6Æòå~eꘟ¨¢b˜A€š50`À»X´èrròÄ.‡´$77cÆlÄåË!‡ÆKîJlææ&Xµj¦Oï‰ÿþw?&MòGv¶þ·ÙîÝ=qêÔ=Þþvî¼ SS#ôîÝXìRˆˆˆôš 8|ø6||~À×_ïÅ Aïâôé£k׆b—F¤7fÚôé=޵k ãÛn*^nn>ÆŽÝ„¿ÿþþþŸ iÓb—Tj‰'vÆæÍcpôè]ôé³OŸ&‰]Ö[éÚÕ98uêžØ¥I\@ÿþÍ*äÐpDDDš T 8pà&ºtY„Q£6ÀÝݧNÍÄW_õ•U%±Ë#Ò+ 3H­JkL˜Ð Ë–ELLªØåP9ÊÍÍÇøñ[pîÜlÛ6Íš¹Š]ÒéÔ©>œ‚œœÎž½„„tT­jƒvíê¢S§úèС;Å'Ò- 3¨tv츄/¾Ø_ý¤B]ª ”JÓ¦mÇÞ½ª £cG¢£“1fÌFó¢nÝ*JuïRR"Ò†ôfΞ}?¿5ø×¿z`âÄÎb—S¡­\yóçÿ~_ß–b—£—’’20fÌFüïaX¹ò#¹DÇßÿæÌÙ‹;w¾A¥JÚëA½wïQ­šV®üHkë$""*Jhh®_‚7T?·n…#++VV¦ðòªŽ&Mª£qcÕoGGk±Ë%"ía˜AonëÖó˜9s¾ÿ~ üüZ‰]N…´~ýiÌ™³óæõÃèÑâzarsóñïïÂöíñå—½ðé§Ä. ±±©hÒäküòËHôèá©•uE¢sçï±sçxŽ\DDDZ“Ÿ¯Ä£G±¸s'·o«~nÞ CRRLLähØÐ×€—W54iRµj9èdÞD¤5Wxѽ±>òFZZ6fÎÜ#^Þ e¿þú7¾újfÏîÍ CŒŒdX´h0ÜÝ«`Þ¼ýxð ß?HÔ~a,Ѭ™+º¥µ0Ãßÿ\]íѺu­¬ˆˆ*žôôlGâîݧ¸};wîD ((™™902’¡^='xx¸ GO4iRõë;³Ÿ6"zà z+ãÇwDFF6¦Lù¦¦FìxRKö칊éÓ1ujW8ƒÀŒÛnn•1~üf„†ÆaýúQ¢öѽ»'V¬8†ÜÜür?ËÊÊÅîÝW1a‚nWKDDú'22 ÁÁQÏθÇíÛ ƒR)@¡0CÆUѼyMŒÙõë;£NGDT*¼Ì„4bÞ¼ýX·î4Ö¯Ÿb—cÐþüó7n >þ¸¾úªØå¬ààHŒ±R©7ŽFݺUD©#44ÞÞó±sç§hÓ¦|ϖؽû ¦NÝŽ+W¾Ö©‘]ˆˆH÷%$¤ãîݧxð ÁÁQ¸w/ ÁÁ‘HIÉT¯ngxx¸ aCxx¸ÀÅÅF䪉H±Ï Ò A0{ö^\À¦Mcо}]±K2HÇŽÝÅèÑ0t¨7¾ù¦¿=/gqqi3f#‚ƒŸbÕªáèØ±ž(utêô=¼½kã›oú—ëzúõ[;; ¬[7²\×CDDú+%% ÷ïG"8XVÜ¿¯ú—°³³@ýúNpw¯‚zõœP·nÔ­ë++S‘+'"Ã0ƒ4G|ñÅNìÚu+W~„÷Þã%'štöì|ôÑZôë× ‹f¡%99yø×¿vbÏž«˜;·(ý“|ÿýAìÜy —/UnïûÇ1hß~¶m+ZhCDDº#::DãÑ£XMXYUzTTAýúN¨SGõÛÎÎBäʉ¨‚` ¤9‰‹ ‚¥¥ ÆÛ‚ p” ¹ví1FŒX‡=á‡1ÈÐ"cc9–-óE:Žøúë}xð ß|óär©ÖjèÞ½!~üñnÝ G£FÕÊeàâ¢àYUDDHnn>BCãðàA4þù'Æ< 0b’’°±1‡›[eÔ©ãˆvíê¢~}ÕÙNN ‘«'¢ŠŽai”D"Áܹ}¡P˜aúô@$%e`„Îb—¥×îÝ‹Âðáëàí]Ë–ùB&ÓÞ?ÑôÜĉáæVŸ}¶ aa X»vÌÍM´²nOϪpq±Á¡C·Ë%ÌÈÍÍÇΗ1zt;H¥ ʈˆ Mtt2=ŠChh,þù'ÆàáÃh> ½{/C¥JFØ»w;ÎÒ!OžÄÃÏo-²³s±mÛX¸»—ÿH'gÏ>À A+qîÜ—¨YÓA£Ë4h*U2ÂæÍc4º\""Ò¬¸¸4<~_(´(,RSU—…˜™£fMÔ¬iWW{¸¹U†««=jÕràHUDdHfPù;uê>ùdêÔ©‚ Fñƒ´RR²0hÐJ¤¤dbïÞÏ´öí?•^RR†_‡û÷£±aÃ(´jåV®ëËËS¢Q£9øì3ŒßQ}VV.ÂÂP§Žc‰Ë ‰…ƒƒ,,ž_‡Ö­¿Å¦M£Ñ¥‹G¹ÔNDD¥“““‡°°<~ÇãñäI|¡¿ ΰ01‘£V-Ô¬é * Œ*U¬E~DDZÁ0ƒ´ãáà ¾Ùٹؼy <<\Ä.It99yEž©’‡>Z‹¢±wïgpuµ¡:*ìì~Ñ¢CX²ä0ÆïˆÑ£ÛÁÙYo¿ý»v]Á¥K_iµSS"¢Šªàì UPW(´ˆŠJ†R©:4·³³@vÏ~ìQ£†ªWWÝvr²æå»DTÑq4ÒŽÚµ+ãÏ?'ã“O6£OŸåX¶Ì·Ø¡[³³ó`bb¸Í3::ƒ¯Â¯¿~R¨‚ü|%>ùd3nÞ ÃÞ½“dè89V­†ÿþ÷7|úéVDD$âÓO;½vþ¬¬\˜š•y=‚ àöí!66M›þR©Yti;"ŒLüòËi¬]{=z4¹s0|xDD›Š°°DD$",,áá Ï~«ngd䌌d¨VÍ5jØ¡nÝ*èÒ¥¡:¼¨^Ý®ÐYtDDô*Ãýo‘tŽBaÿOðÕW{0vìfLžÜS§v{etAðñÇ1dHKôèá)Rµåkõê¸? }ú,Ço¿M‚““‚ `Ú´í8sæ>vîúõÄ.“JA*UàS­š-æÎý áá ˜7¯ÿ+ízçÎË8y2+W~Tªå ‚€cÇîâÀ›8vì.âãÓ`d$C^^>ÈÏWÆÆr(•JµÌää H$äå庼¼|;v º {wOŽfBDT‚èèDD$ªCŠçÁE"ž<‰GVV.@.—ÂÉIªUmPµª-7®ŽªUmÕ†““‚û\"¢·À0ƒ´J.—âÛo AÌ™³—.=ŠC ]ß¹jÕ ;vÇŽÝÅ;ßÀÆÆ\ÄŠ5/!!›7ŸDE¥àý÷—cÿþIX·î4öõëG¡Y3Wq‹¤2=ºœœ˜8q"#“ñóÏÁÌL5úÌýûQ˜<9лwãR…t‰GÞÁŽ—Ô÷åææ1`fVºoïbcSñâ•…¡ÆÝ»‘øøãprR`üøŽ<¸¿$¢ )%%OŸ&!<<‘‘IˆŒLFDD""#“™„ððdgçPYá쬀‹‹ ªU³EãÆ5P½º-ªVµEÕª6prRð¬7"¢rÄ>3H4wîD`ìØÍHIÉÄŠ~èС._Aÿþ?!?_ ¹\†=ùþûƒøé§cÈËSärÌÍ‘’’…+üп3‘+¤·qõj(†_‡5ì°yóÇ077F—.‹ðäIòó•°±©„Ó§¿„­mÉ!]ff:wþáá‰êàáeÆÆ2LŸÞ³ØË[ ´jõ ?Žít‰`îܾ;¶}‰Ë#"Ò'ééÙˆˆHÄÓ§IˆŒLÂÓ§IˆˆHBTTò³¿Õl€µµœœ¬ÕÁ„““µ:¸¨VÍUªX¿ri ;%q¥§gcÆŒ@ìÝ{ £FµÅï¿ß@||òóUÿèK$¬];¼Øþ5ôIJJš6‹ŒŒìB÷ËdRXY™âرêCƒôSHH,üüÖêÕ«‚cÇ‚ÔaDYCº  §èÞ}I‘geªoÿûß~>¼u‰ËªWïK¤¤d¾vºT*Á¸q1{vïRÕFD¤+²²rŸA‘„§O“ž€èè”ggS¨Œ÷ææ&pq±³³NN 8;+ž…ÖêKC*U2ñQ fnøõ׿1sæ. }-‘H`mmгgg•ê›l]·bÅ1üðÃAõY/’Ëept´Âþý“h€¸¸4ôî½ìÙ™…w³‰kÖ G¯^¥ é6n<‹Ù³÷ ¨ÝµL&ÅÒ¥C0`À;Å.C©P­Ú´"—¨‚ _ß–X¸p {È'"’““÷ìl Õ%QQÉ…BŠÈÈ$$$¤«ç755‚‹‹Í³ÂU«ÚªCŠ‚û­¬LE|FDD¤Í„tCbbòó•êáÈ ‚€ôôLŸ¾ëÖ©:ÍÈÌÌÁʕNj 2UˆR¨SPÒ_ iˆŒLR_ºñ²éÓw U+7ØÙY”¸¬#Zãøñ œ>}ï•34òó•ê¾9Š“˜˜þÚ C&“¢W//|÷ÝD¤599yˆ‰IETTbcUûÌØØTõ﨨dÄĤ">>Mýccù³³)T—|Ô¯ïTèÌ GGkƒøòƒˆˆJÆ0ƒDwùr¾ûîÏW‚Œ¹¹ù8xð~ÿýz÷n¬åê4gÛ¶ HKË.vž¼¼|„‡'bÈ58|xšAOkÈ23s0jÔ(•B‘BAH7cF`©B:‰D‚åË}Ѿý$$d@©,ˆ•æT迵|‘L&E‡õ°|¹¯ý&"ÈÎÎCtt2¢£S“¢% î+¸ÿÅý’D"ƒƒìí-áäd GGk4n\öö–pqQ JkT©¢@åÊ–">3""Ò%üO‰D•˜˜Ž>ø©Tóþë_;ѪUmØÛ—üM¶®ÉÍÍÇŠÇÔÃiE.—A&“`Ĉ67®#ƒ =6~üV„†Æ½6 ž‡tû÷ßÀûï—ÒÙØ˜cÕªá #^ *T¿_¼?))Cý©T{{ T®l…*U¬áìlƒfÍ\áà  -ìí-á쬀÷CDDT&üo‰Dµpáäå)Kg]dddcúôذa”–ªÓœíÛ/">>/÷¨†«566ÂØ±íññÇí n(ÚŠæìÙû8rä6ÕA|qLŸ¾ÞÞ¥ éZ·®‰;ã矫;ÉKË’¯ýNL,|f†\.CƒNزåc˜š•øx"2\qqiˆOC\\bbRŸöìlŠçaETTr¡4e2i¡¢Z5[¼û®«úvAXaggÉáI‰ˆ¨\°PÝ­[áêËHþù'r¹ìµÃPJ$¬\ùúôi¢å*ß\^ž-[ÎCddò —H “I`aa‚ñã;aäÈ6¥ú‡”ôCLL*Vµé þ H$…ˆFF2têT7Ž.Õ²óò”èÝ{îÞ Gn®jyçÏÏ‚««}±Û²å<æÌÙƒÜÜ|Èå2Ô¬i‡ß~û …YÙŸ é´¼<%âãSŸŽèèÄÅüŒøø´gaE T¿Ø—“‘‘ ¶¶¨RÅJLT®lGÇÂ?öö–¼4ˆˆÄÄÑLH·„„ÄâÀ›øã¸y3R©‚ ¨¿Ý–J%033ÁÙ³_êÍu³»w_ÁçŸ@© ‘¨[[s|ö™†mÅ¡ß \JJ&Ž»‹?ÿ¼‰ãÇï"''2™ì•Q{~þy(úömZªe†…% cÇï‘‘‘@Àõëÿ££U±Y²ä0~üñÀÑÑþ9Eo¶!"RõCQpÆDA òÊgY¼ÈÔÔvvpt´‚ìì,P¥Š5ììÌŸÝÿüïÒtJLDD¤fNÆ¡C·ñûï7pñâ#(•¤RÕ·ÛMšTÇŸN»Ä)•ªV @Ä8:ZcÊ”®4è]ó*¯Š&++§NÝÃÁƒ7qðà-¤¦fÁÈH¦¡äÆÿ–:`Ø¿ÿ:ÆÛ¸wï»Ïìùâ‹øöö–8p` ªVµy»'CDo-%%S>„qqiHHxþ·êþäW:677Q‡öö/–Ïþ6‡½½%*W¶‚……‰Hψˆ¨Ü0Ì qÀÏϯÄù¤R˜˜Ô‚©im˜šº’’!33¸¼K|+¦¦µacÓ ”t™™÷=4«&øúúÂß߿ܖOÅ+m{V‘ÂØØ¦¦µQ©R}H¥ÆÈɉ@||`©×go?FFöˆŒü±Äy†C.·Alìfäå%–zšÀªrs󑆄„tõ‰‰éHHH/tŸêv3^jÙÖV@ØÙ™£re+õߪ³(,Ô—ØÙY°¯""ªè®ð«aÒ ;wî,õ¼99ùNÆÃ‡Nxï½ê01ÑÍÞÏAÀöíРÙA"ñ.×õ•þŸh*oeiÏ€ª­„…¥ãÿs§gw¸º–î쌜%–/¿eËJ^߆ ÷еkUT­º¦Lµ½€€ìÛ·Okë#Ò¤ÔÔ,ÄÅ¥ªÃˆ‚ŸÂ÷¥!>^T¤¦fz¼\.…9lmU?vvpww„­­lmÍacc®>{ÂÎζ¶̓»ç>¢IDATˆˆ¨,fN8p Ø%hœ 8PÕ‚6ðŸFÝ¡ÍöìíÝ 5k:”8_ëÖIpvVh¡¢çrssÙ.I'ddä ))‰‰éHLÌP‡/†ª"C}ûå³&ÌÍM`ccËg…jÕrxv6……:¤(.ع.Qùb˜ATN´bPÅVš €Öƒ ¢ò““‡ÄÄ u0ñb@¡úIáþŒgó¦#;;¯Ðr¤R‰:( j×vTŸ1Qpß‹Á…‰ ™ˆˆˆt ?™‰ˆˆH«”Já•0¢ €(P¤šžžžýʲ,-M¡P˜ÁÖÖ …llÌQ¯žll n›A¡06™z"""Òo 3ˆˆˆè¤¤d"))))YHJÊ@rr’“3Ÿý¨þVMÏ,t¶DrrÆ+˪TÉ …Ù ¡ƒ9\]íѸquØØ˜ÃƦ ˜0S …û™ ""ª fUPJ¥PDèðjQð÷‹!Errf‘#ÕXY™ÂÚÚ VV• PT‚µµªTQ ^=§WΠPªÛƒˆˆˆÊ‚aé„ìì<ìØq 7n<Á’%Š]Ž^P*¤¦ªˆÔÔ,¤¤d>ûÉBjêóßÅËaÅË#pªþ$TA„¬­Ua„µu%Ô¨akk3u@ñbX¡šOõ·TÊþ‚ˆˆˆ¨ü1Ì ½òðáCœ={#FŒ»JOODzeËðå—_Š] iIy¶åß~û NNNhÞ¼y±óEDD`ëÖ­èÕ«6lXhš6ÛdJJ&6o>‡Õ«O 1QuùAE 3^T¿U¡Djj’“3Õ…êþÂó§¥½Ú‡ ºdÃÊÊ––¦°²z4Ô©cõìöË¡ÄóàÂÊÊT˯QÙ1Ì ½ŒÕ«Wëe˜1fÌÌš5 5kÖ|eZjj*¾úê+†Hy¶åÀÀ@¼óÎ;%†Æ ƒƒƒúöíûÊ4m´Éèèd¬]{ ›6Enn>òò” £F¤¦f!==ééÙHKËV‡ iiÙHOÏzvßóÀ!--»PXQRu™†‘‘LB<ÿ1…ƒƒ%j×® KKÕm+«JÏæ+<¯¥¥)û‘ """ƒ§ûGŒDâСC˜8q¢Øe©=yòóçÏG½zõ´ºÞþ‰ÁÏ?G`àeH¥äææšž‡´´lXX˜ht½ééÙÈÌÌEzº*|PªŸ‚³!TÁC–zZÁ/ÞŸ’’ùÚu˜™ÃÂÂææÏÏŠ°°0••)\\l^9[ây ñ<˜¨TÉX£Ï›ˆˆˆÈ1Ì ½£T*1iÒ$lÚ´ ¦¦¦˜2e þýï#>>ƒFÏž=±hÑ"äææbáÂ…¸{÷.6oÞ ¹\Ž¥K—âÃU§¯;v Ÿþ9}Ôë9r$¾úê+DEEaàÀX¿~=d2fÏž5kÖ %%ÞÞÞØºu+ªV­ŠÁƒ#&&ƒƺuëжmÛ"ŸÛºuë0oÞ<ÄÅÅaРAX¿~=¤R©Ö^[Ò.MµåíÛ·cæÌ™ˆŽŽF·nÝŸÿ<¸uëÆ‡«W¯¢zõê˜;w.|}}1räH|2™ùùJäç=ïãÇqprR<;Û! ™™9ÈÌÌERR22rž…ª³ n§¤d"##9HOÏAJJ&23s‘™©:Kâuär)ÌÍM¡PT‚¹¹ ,,Laaa Ô¨a§' î+^¼_RTbDDDDZÂ0ƒôΕ+Wжm[DEEáÚµkèÕ«êÔ©ƒ6mÚàĉðööFDDV¯^Ñ£GcÁ‚ˆ‰‰Á¢E‹0gÎ|øá‡Gÿþý±eËtëÖ K–,Á€‚˜˜¼ÿþûX¾|9† ‚C‡Á×××®]ƒµµ5Μ9777!""M›6…ŸŸ”J%6n܈ .ÀÑÑC‡Åüùó±jÕ*¬Y³gΜÁš5kвeË"ŸW~~>._¾Œ ,, Íš5ðaÃбcG-¿Â¤-šhËÿûßÿ0bÄ gÏžX½z5¦L™‚Î;#==ݺuìY³püøqœ;wýúõƒ««+~üñGœ:u +V¬@‡ЬOSmòĉ`,_~/>‚‘‘ ‚ /ï5)Æ3]º,zí433c˜™ÃÜÜ––ª3ÌÌŒaeU öö–033™™1¬­+¡R%£ggK˜ÂÂÂT}ÛÚÚìYpaÂQ4ˆˆˆˆôà Ò; … ,€‘‘Ú´iƒ‰'" mÚ´R©ÄŒ3 ‘Hàãã¹\ŽiÓ¦©o/^¼°cÇtèÐAÝWÀôéÓ!—Ë‘™™‰}ûö¡I“&ê¾ úô郞={bÇŽ;v,rrr0wî\£fÍšhÔ¨’““ad¤ú‡(;;–––@nn®ºf©T …B¡ž¯(ß|ó Œáææ$''—ã+IbÓD[@ÿþýÑ¿ÀäÉ“±aÃÀü'''L˜0ЩS'Œ1ðöö†T*…µµ5LL^9Ç›¶É¼<%®_‡“Ódøù­D¢:cáåKJŠ"•J0n\GtêTªÀÂÌÌøY§–•Jµ~""""2l 3H︹¹ 6lˆ¿þúK}ÛÜÜ ‘H`bb¹\®¾] 44îîîêÛFFF˜1c <<¼Ð4¨[·.ÂÂÂÔ·œœÔ,·W¯^8~ü8¼½½¡P(Ð¥KÌš5 …¢TÏK&“ÁÁÁá•å’áÒD[Žˆˆ€‡‡G¡å6hЀªÃÕÕU=-33óµ—”¼ìmÚdxxâ㟴!ŒŒdÈÏWB©|µÓËÂë•ÂÎÎÞÞµK½>""""ªXx1>鸸¸B·cbb`kk[¦eXZZ"))©Ð}{öìArr2¬¬¬^YG||<¬­­‹]¦ X¼x1âã㈬¬,|ðÁeª‹*M´eÄÄĹ\+++´mÛ¡¡¡…~V­Zõv…—‚««=||œù#ž}úÚù÷íÛ‡Û·o—©n2,šhË;wÆöíÛ ¸yó&NŸ> ðññÁ™3gÈÈÈ@³fͰwïÞ"—U^mR.—¢I“êøä“زåc‹ãǧã?ÿ釞=½`kk@uy‰\.CNN>îßÖxDDDDd8fÞiÙ²%¦NŠöíÛÃÝÝ5jÔÀرcË´ŒŽ;Â××ðññA×®]ñÃ?ÀÂÂ7Æ´iÓЬY3tíÚ0`ºwï^ì2‡ް°04jÔ>>>4hæÍ›§ž^¹reLœ8W¯^ êÛ`ß¾}eÈ`h¢-÷éÓ]ºtAƒ бcGôîÝ[¼Õ©SóæÍCË–-áããwww4l؃.rYÚj“R©õê9aäÈ6X³f8nßž‡óçgañâѯ_S@RRz¹×ADDDDúK"Bñ/•£€€øùù¡¬Í0++ .\€µµ5š6múÆëðàBBBP¿~}T«V­Ð´ÐÐPÜ¿®®®¯ô¡ñ:ÙÙÙ¸té²²²àåå…Ê•+«§ÅÆÆâúõëx÷ÝwaccóÆ5¿ŽŸŸÀßß_ã˦Òy“ö¬©¶|ëÖ-DGG£yóæ°²²*4-""wîÜ‹‹Ë+ýk”§7ݾ )) …Y9TEDDDDà ;%½djjª‘!KëÔ©ƒ:uê9ÍÕÕµPlj¥abb‚¶mÛ9ÍÁÁ]»v-k‰dà4Õ–===áééYä4¸¸¸¼õ:´‰A‡—™‘^a˜ADDDDDDDz…aé†DDDDDDD¤Wf‘^a˜ADDDDDDDz…aé†DDDDDDD¤Wf‘^‘‹] 4Hìô^`` |}}Å.ƒÀö\ 00P숈ˆˆÈ@1Ì QU¯^» ƒ0pà@´hÑBì2*4]iÏgϺ nÝD88dˆZ‡.¼DDDDd˜$‚ bADDšãì<?ÿüúõk*v)DDDDDåá ûÌ """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯0Ì """""""½Â0ƒˆˆˆˆˆˆˆô à """""""Ò+ 3ˆˆˆˆˆˆˆH¯HAÄ.‚ˆˆÞLß¾+péÒ£RÍ{ýú\8:Z—sEDDDDDåî ÏÌ "Òcýú5-Õ|Õ«Û1È """"ƒÁ0ƒˆHõîÝ2™¤Øyd2)&Nì¬¥ŠˆˆˆˆˆÊà ""=fkkŽÖ­ë@*-~wÞ«——–*"""""* 3ˆˆôÜ€ïâuÝÉdRtèP …™–«"""""*? 3ˆˆô\÷îž02’9M|ðA3-WDDDDDT¾fé9 tíê¹üÕ@ÃÈH†®]ŠPQùa˜ADdúõk†üüüB÷Éå2tïî 33c‘ª"""""* 3ˆˆ @çÎõQ©’I¡ûòò”øàƒwDªˆˆˆˆˆ¨ü0Ì "2ÆÆr¼ÿ~“B}gXX˜ }ûº"VEDDDDT>fˆþý›"7Wu©‰‘‘ }ú4ymÇ DDDDDúŒa‘hÕÊ 66ª!XssóÑ¿?G1!""""ÃÄ0ƒˆÈ@ÈdRu–hÑ¢–È•¹Øš;wn//€›› ‚‚îŠVGÕªUamm-Úú‰ˆˆˆÈ°ñÌ "" ‹Ell¬(ë®WÏÎÎV6¬©(ëTÏ?++K´õ‘áã™DDå ~ýúptteÝÿþwoôí+Þ¬'OžmÝDDDDT1ðÌ ""SÐo‘¡b˜ADDDDDDDz…aé†DDDDDDD¤Wf‘^a˜ADDDDDDDz…a½Ö˜1c"vDDDDD…0Ì "¢×:tè’““Å.ƒˆˆˆˆ¨†DD";vì<<<`llŒ¦M›âÊ•+êi¿þú+j×® ¹\'''üðÃêi³gφƒƒLLLбcG„‡‡—jÚ­[·Ðºuk˜ššÂÝÝ€˜˜tëÖ [¶lB¡€§§'bbb0xð`œ9sF ¯Qé0Ì "Qxx8ú÷ïùóç#99|ð AššŠ‘#GbÑ¢EHOOÇŽ;0sæLÄÆÆâðáÃØ¸q#.\¸€¸¸8XYYaþüùPì´ôôttëÖ ¾¾¾HNNÆêÕ«1~üxœ?9998sæ öíÛ‡ƒ⯿þ‚½½=Ö¬Yƒ–-[Šù2"»"¢ŠlÇŽèСúöí ˜>}:är9233allŒóçÏ£iÓ¦€ZµjÁÈÈÉÉÉÈÊÊdggÃÒÒÈÍÍ€b§ýñÇprr„ :uˆ#ˆiÓ¦!33?ýôœÿ·w÷,­¤qÆï¼Œ…¨Œc!‚ 1!"Óˆ`a!ˆè°³‰]* ü ‚Š@ 1‰ÈbPÑ_ AShlœ-– { îauv<×RÌ< ù?Óå"“Hòûý2MS†a|ÝMÞAÌÙ¶­îîîÚ±aš­jnnNçççjiiÑëë«$ixxX;;;J$2MSétZ™LF¦iþtͶm‹EuttÔÞãùùYCCC’þЇ àÿŠÇLÀEzxxøáÜÆÆ†µµµ¥L&£ùùyžž*ŸÏ«¾¾^’ä8Ž–––t¯õõuU«UŽŽ¾»ÖÔÔ¤d2)Û¶x­®®J’|>ßîø5Ä pQ:Ööö¶îîî$Iš˜˜P Ðõõµzzz”L&´¿¿¯J¥"IZXXP¿‚Á z{{599©ÛÛÛw×µ··§““IÒÓÓ“b±˜677]Ø=ðkxÌ\400 ññq…ÃaE£Qåóy-..ª¡¡A###Êf³J¥Rª««“aêììÔÌÌŒVVV´¶¶¦H$"˲T(jÿt255õæZWW—²Ù¬úúúÇU,•H$466V ÿdY–¦§§µ¼¼¬X,ö¥÷x‹ÏqÇí!à;ÙÝÝU(Rkk뇯9;;Óåå¥B¡ÚÛÛkç+•Šr¹œ,ËR$ÑÕÕ•...”J¥ôòò¢\.§jµªh4*˲j×ýlM’nnnt||¬¶¶6…Ãá7ç*•J:::R<Wssó§íø Ä øýîæ÷ýàÓøÍ à)Ä à)Ä à)Ä à)Ä à)Ä à)Ä à)Ä à)Ä à)A·€ï¨T*Éï§Ÿ˜Ÿ \.«\.»=ð-ùÇqÜàƒ |x 1x 1xJPÒnðA;7yc{Ñ\aÖIEND®B`‚bm3.7.0/doc/html/a00037.html0000644000175000017500000001456111365042651013433 0ustar tlktlk BitMagic: bm::bitblock_sum_adapter Class Reference

bm::bitblock_sum_adapter Class Reference

Bit-block sum adapter, takes values and sums it /internal. More...

#include <bmfunc.h>

Public Member Functions

 bitblock_sum_adapter ()
BMFORCEINLINE void push_back (bm::word_t w)
bm::word_t sum () const
 Get accumulated sum.

Detailed Description

Bit-block sum adapter, takes values and sums it /internal.

Definition at line 5003 of file bmfunc.h.


Constructor & Destructor Documentation

bm::bitblock_sum_adapter::bitblock_sum_adapter (  )  [inline]

Definition at line 5006 of file bmfunc.h.


Member Function Documentation

BMFORCEINLINE void bm::bitblock_sum_adapter::push_back ( bm::word_t  w  )  [inline]

Definition at line 5008 of file bmfunc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00128.map0000644000175000017500000000151211365042631013233 0ustar tlktlk bm3.7.0/doc/html/a00141.md50000644000175000017500000000004011365042633013133 0ustar tlktlk0b17274b6f48d7a3d207f3444f42c484bm3.7.0/doc/html/a00129.png0000644000175000017500000011207611365042631013253 0ustar tlktlk‰PNG  IHDR›Ã%e”bKGDÿÿÿ ½§“ IDATxœìÝwx›åÙ6ðSÃÛ–—,Y²åmÉŽ“BÇv&{RViyiIÚ„ÊK¡tPzZ¾¾VK¡@ iB˜IHˆã•A¶ã)ÙòвdmK^ZßôØÎ ŽãD¶sýŽC‡dYã–‡lº®ëæ!„B!„B9{¸á^!„B!„B™9(l"„B!„B!“†Â&B!„B!„2iøá^!„2uwwcß¾}á^ƤÉÊÊ¢E‹Â½ B!„r °‰B9‰ÚÚZÜu×]á^Ƥ¹óÎ;ñÞ{ï…{„B!ä@a!„ò*++ý„³öÔSO…{ „B!äB3›!„B!„BȤ¡°‰B!„B!„L ›!„B!„BȤ¡°‰B!„B!„L ›!„B!„BȤ¡°‰B!„B!„L ›!„I Óé°uëÖI¿ÝÁÁA¼÷Þ{“~»„B!„œ+6B!“ »»Ÿ}öÙ¤ßn?Þzë­I¿]B!„BÎ ›!„B!„BȤá‡{„BÈL°qãFlݺ‘‘‘¸õÖ[q×]wÁétâÉ'ŸÄâÅ‹ñŸÿü^¯kÖ¬Agg'¶mÛ‡uëÖaåÊ•§¼í/¿üï¾û.V¬X_þò—àp8çñÑB!„2>TÙD!„L’ÖÖVðx<|üñÇøÃþ€M›6¡ªª ^¯‡†Ëå‡~ˆ{ï½Ï?ÿ<’’’ðÉ'Ÿà{ßûÞw¶Êùý~´´´à½÷ÞÃ[o½…šš9räœ=Žîn >ø`?|ð}lÞ|èœÝ!„B™™¨²‰BÈŒæpôcÇŽ&,YR©4éœÞW||<î¿ÿ~ðù|Ì™37Ýt¾ùæÌ™3@wÜq8,X‡Ûn»ýøƒ>øÎÛ¾ï¾ûÀçó!•J‘““·Û=)kP©ŒØ»W½{ÛPS£‚Åâ—Ëß@vvÚ¤Ü!„B¹pPØD!dFóùxàf77±X€²²B,YR€E‹òŸ/šÔû’J¥àóGþ´æææâС‘Ê èèh‡ÃADDx<ûñwár¹HJ ÊΦ}Îçó£±Q‡}ûÔ¨«kÃÞ½mp:Áãq0UTà÷.×À„ï‹B!„\˜(l"„2£…B0øä“ÃØ¼ù0|>?’’bQZZ€ÒÒ,^œ¢" ¸Ü‰9‡cÌÇv» ¾½ÉàóÐß ¥2wÜñ:¾ýVø||>Ðåü'½þdr„B!d棰‰BÈŒvèPç˜C•;`·÷cëÖlÛÖŸÏØØ(,^œ‡ÒÒ8.œéhÞžìÙ³K–,A?>ûì3Üxãg¼æÚÚZddd 77÷Œ¯{¼ýûõ0204 ®•=ßëõëúûö©qç‹Ïz„B!äÂAa!„M ˆùÎÏŸúû‡PYÙ‚;›É¼õÖQÜ}÷lDFòN{_³fÍ«¯¾ŠÿûßÐjµ(,,ĵ×^ §ÓyFk~ùå—qÍ5×LJØäõúáó~í§ò駇±‚$&†±HLŒ@Þ/Ä )iìyÑÑg½~B!„2ýp@àô#„B¦ŸÏž´Z4+ÚÛMxñÅí¼5/,aÍšyˆ×5†‡‡ÑØØˆøøxNð~'Ïþý¼ùæ8‚ ]_¡HGv¶|>Sååóù10àÓ9‡cN'sðxN¬”ŠŒä ¨NNÅŽ ±FN ˆADÄÄC2B!„6¨²‰BÈ´âñø ÓÙ ÕÚ ÕZ¡ÓÙÐÝm…Vk…VkƒÁ`‡×ËT+EFò! Àá{k…‹U«²Ç41÷‰‹/¾x"wvN\|±ÑÑ›üþì„ÅâbÏ‹ŠâC*M†Tšˆ… s™™‚ÔÔ8$$Ä >> ÑÑðx|låpŒœÎ¨Õ½ìi»}GÿIï;..jL5úxìéX$'Ç"99.xˆ¥ ŠB!$Œ(l"„2¥ zت$nìqw·½½Nvèwll$¤Òd¤¤Ä"66 ……bääÑ×7³Ù…ž4ë¯!!!W^™Ž—^zóæÝ4Ùñ¼âó¹ MÈÏçC XŽmÛŽÇãžr øñ.¹$/¼p;=Ðé˜0O¯w@«µÂ`pÀ`°ãèQ ´ZÜî!öz ÑJ“™™ ©4I"fÍ’²!•TšŒ¨¨‘CFWJ>>ÙyZ­uÌy.×Ð ëNHˆFRR,RSãO¢’“ã’2rHJb΋¨H!„BNÚè!„œW.×4šP%’5X¡dcO÷öö±—b™™ ¡0ññQˆˆàÁãñÂí†Õê‚Vk‡Íæp¹H¥IÈÎNEVV*âã£àvãÈ‘n45é'¼ÞË/ÏÃ]w• "â̆…O{÷êñÊ+{'<·)..—_>EEÈåéP(Ò!“¥€Ç;ñëát@¯·³fƒ: z½ :z½ÃÃ^öòBa<$’$dd$###Ri{ÈÈH†H$`Û÷¾‹×ë‡ÍæúÇœ¶ZݰZOþ¹ã·¨(>J¥¤Ä"%%))cCªP0Å|>‰‰±úºB!„Ì`(l"„2©úû‡ƒUHtw[ÐÕeUdÓ2•š™,é鉢ÁC ÀÜ†Íæf+œBEll$²³S‘-dC¥ììTÈd)p»‡qà@öîmǾ}jX,.ÄÇGaþüÔÔ´N¨®¯¯Ÿþ§ÉúÒ„Íoû'´·Ë'tÝU«fÃZ[{ ÕÚ‚ ŠtÈåbÈåéÈÊJ—ËùÎÛ3™ú‚A”=DÙÙƒFcEooñx\¤¥%@&K9!ˆ’H’ ‘$A$J˜Ðã‡#FõÃnï?!°b>ç‚Õ:ò¹¡!ï˜Ûàñ¸§¬œJNŽVŹÜxB4B!„iŠÂ&B!gÆëõƒ# º»C¡’•ýxteRZZ²²˜0(55‘‘LÛThÀt(”2Gvk‹ÈÊJENŽ0xœ –„l°àñøP_¯Á¾}jìÝÛŽo¿UÃéDRR,.½4K–äcÑ¢<Ì™“ ‹²²g V÷Žëññx\¥ãºëRñóŸß‡ÊÊÊIüê…ÇSO=…´´täæÞ„wÞ©ŒçÏ?‡46>¤$¦zÇí‚JeDkkT*#ZZ P©Œl«bttär&|bB(æ “¥œ6„ ñzý0™œ'Q#Û`6ÌŠŒä¨$H¥ÉÁ *I¨…/é´;ž‰þþa6˜ UMªrÊbqÁnïG_ßà ·#D³•S¡j©ÑaT¨²*55žm÷£9T„B™&(l"„r¢ÞÞ>6D&uuYÆ àŽ‚L–Ь¬dg§")‰©Øðùüèë€VkCG‡föwd$2Y rr˜i$LbŽcbNœ›34äÅáÃ]س§{ö´ãСNô÷C$JÀâÅL°´xqŠô“†O<ñ Þx£ú;3—ËA ¬]»=v >üð?¸ë®»fLØ$‹ñÞ{ïaÛ¶lØð>†Øïã©dg ±gϯO{û.W(„2@©ìAkk”J#t:¦"­ @Œ¢¢‘J.C&K‡3¾j´¡!/ôzôzG°Eσ9­Õ2¡Ôè€'.. ™™É£*¢‘™™©4‘m㋎Ž8ãuŒ—Çã;!ˆ²ÙܰX\cÚýFª«˜ãÐl²ÄÄX…Lø”šÊQBáH •š´´6œ …»„B!ç…M„r!r¹†ÐÝÍ´·uuYØÓ¡¶·ÁA "‚‡ŒŒdde1RVV ¢p04äÉÔ‡®. :;™@)4 :&&99Bäæ2ín¡Ó99iJ“N[åÐØ¨Guu+jj”øöÛ #33‹ç³S~¾è”·¡ÕÚPW§B] ûö©¿sPxDññQxå•`ùò"Àûï¿?#Ã&èéq`íÚwqà@Ç Æh äB(ŒÃŠÅX±¢2YÊÝo_ß [ÕÖfDs3S ¥×Û0!ThTa¡EEŠ‘™™<¡êøûUD…æGiµÖàyL…Ôè–¸””86Œ UD1AS1% Î{eÑHå” V«½½}°X\°X˜ó,æ¼Ðe<ߘë'$DC(LS•–vòSSãÇ l'„B9 6BÈLäñø ÓÙØyIÌñH¥’Õêf/+'²•I2Y d²ÄÆFÁï÷ÁáDw·…­Nêèèe_ ÇÅE ‘F¤Ü\!ÒÓÏxÍ: ÕÕ­¨®V¢¶V‹Å…ÔÔx”—ËQQ!ÇÒ¥…ßv˜L}ؽ[…ÚZ&`êê² *ŠK.ÉÁÒ¥…xóÍX,®®Çår°ti!^~ùn¤¥Ìÿ™)aÓ¡C=xýõíðùâðîbǤ¤XìÜÙŒ÷ÞÛ‡sÒÝé~÷»ë±oŸµµ*¸ÝC((aåÊbTT(°dIþI«ÐÆÃé„JÅT@1UPÌqOS1ÇTBIN¡&“ÙìbçG…*¢B•NgƒÉäd«¿¸\D"Á Q¡PJ*eæGmHv6œNfÆPeµºÐÛë‚Åâb)“i$œ:~þT\\T°:*žmñ‹ìÏLZZ[I•š?îÖHB!„\p(l"„éÊju££Ã ƒzG å¶Â`°³+AL°*)T$ n;ÏÃð°Z­ ’B·ªbF…IiÈÉaÚÞrrÒÎj03Àuu*ÔÔ0“ZÝ‹˜˜H\zi.**¨¨cÖ,é)_¼ÛlnìÝ«fÃ%¥²|>_œ¥K QZZ€… sÙj'Ÿüo½UÃ>¶Ðnj?~-Ö®]~ÂýLfØ&BLôzÇ{è¡¿ÂhLDFòàóN.‰ï!¤Òdüä'˰víjAee3š› ˆŠâcñâ|¬XQŒ•+‹QPpê*³ñr: Tö ¥¥gL;žÑ8B1•PLøT\,AA“B…ø|~ôöö+¢ìPóÐü(ƒÁ“idFY¨P"IDFFr0˜ í¶—™,eÂݹàr ÁlîF¹a6÷Álv+¨\0lp5ºrŠËå°Á“P˜ÀVH …ñ‰'œ¦ª)B!ä‚Ba!„LU~==Ž`dFG‡™mYëê2ÃédfÒDDðFILuRvv*$’$ðùôöºÑÕe†ZÝ •ÌÐj­ì Çää¸`€ÄJ£+”RRâ&íñx<><؉êj%jjZqäˆ@sæd¢¢Bòrù˜pèx.×öîmg«—ššô€Ù³3±ti–.-Ä¢Eyˆ‹‹:éõ¿ýVoÜàóyHOOÄoü]$;éåCaÓ7ßì„ÉÔøøÄÇŸyPÐÓãÆ±c&\vYî_·³Ó®.–-Ë:ãëŽöÔSOÁïφR™ˆ@`|ÃÁ€V¯.Á»ïþxÌg ;víjAU•ÕÕ­°Ûû!“¥`ÅŠ"¬XQŒ²²ÂS~&Âáègƒ§ÐPòÖVôÑ(,C¡°my Eú„*ìÎÔð°7<9Æ„PÌ}fF—kˆ½|JJ@ef¦°³¤Bç‰Å‚s¾æ‰²ÙÜ0›]0›]èíu²¡Too_°ÅÏÞ^'z{ûÐß?<æºññQ‰BURLÅÓΑ(B!S5•–&€@¦GH!„IBa!„„“ÇãƒFcegžÔÕeÁððØ–µÐü£P…QVV* »Û‚öö^ttô¢½ÝµÚ ÆÂ¶ …ñÈÉIC^ÞØ*¥Ü\á¤îÔu¼¶6vîlFMM+öîUÃíBvv*.••²;opЃýû;°{wjkU8z´>_r¹eer”– ´4‰‰'¿þñ|>?d²‡·Ür ž}öÖ­Ölí2`Ë–Ý8p NÕ°Ù>pf2##¥HM½ vû×h:£ë‡ôôuhݾõŒ¯?ÚwÞ‰ïÿ±nÝ¿à÷Æ8Ÿþ ,È>åç}>?ŽéÆÎͨ¬lA}½<‹åaùr&|*.–œÕÚOÅnïg[ñ˜ò˜ãÐŽˆA4ärIpg¼‘v¼óBæpôC¯gZõ´Z+tº‘¶=ÆŠÞ^'[‰ÉVB1ÕP™™L(•‘jÛKžUBÃ0›Cm{L e21UR‹+xš «Fï.0_ƒÔT&„‰HI‰ƒD’ÄVJ…ÚùÒÓ'5Ô$„BȤ¡°‰Bεáa/:;™Ê¢‘ÙGLu’^ogÛ™„Âø`˜”†ììÔQõÓ½P«™0©£ƒ¹=µÚÄÎ]ILŒE^žyy"ä奱‡œap¨÷¹700ŒÝ»Û±sg3¾ù¦ ÝÝ$%Å¢¬¬ ˜²³SOz]LJÇ»P[«ÂîÝm8p ÃÃ^ääQVVȶƞ«t¦~ó›1~6**hi1 µÕ€ÖÖÔ×kÑÖfd«1""xðùülð§?-Bdä™ ‡>vÌŠ¿ÿ½ðÐCs“3±uÿüç»K—Šqë­yž““••…E‹á›ošqß}oÁëõ}çpp‡ƒùó³ðùçžÑýX,.TUµbçÎfTUµÂbqA"I V=¡¼\qÎ+Wl67ZZz‚ÃÉõhk3¡¹ÙÀÎìJLŒ…\.f+ B­ygÛ:Qo̬(­ÖÆž}Ú"Q¨@*9X%5rz2+ϯ×låcÂ)¦µÏ “ÉÉVM1í|L‹ßèŸÛ˜˜HˆD HK@(Œ‡D’ÈVK1ÕS HOg*ª¦CHG!„Ì6BÈdðx|ì m&Tê ž6A¯gæ'q8H$‰l›ZNN*²³…lÅözíí¦1¡’Ó9€ya•›+D^^rs™0)?? yy¢°½Àìì4£²²ß|ÓŒº:†‡}()‘båÊb\vY æÍËbç#æóùq옻w·±;Æõ÷C*MÂÒ¥…ÁCÁ¤Ìã±X\øË_¾ÆîÝmÐëíìדÏç°`£ñx\¤§'bëÖ_ 55þŒîïÝwwãñÇ?b_«ÕÏ#::bBk¿çž¿cÇŽFp¹\¬\Y„¿þõ‡g=÷gïÞvÜ}÷ß04ä=åì&xë­ûpų'|?~õõTV¶`çÎf9Ò ˜7/ +W2;ÜÍ+;oƒ¦­V7ZZ P*™6¼ÐNy¡ùÉÉq(*b§âb)ärf.Ôx«çÎ%‹Å ŸFZôFT¡j.ˆŽŽ€L–2¦B*Ô¶—‘Á 4?ß;ëMŸÏ϶ïõô8‚ÕSN¶Rjä¼>8ýc®+ÄžTHTJ„RBaüIŸ³!„2n6BÈxy½~hµV¶Jit¨¤ÕZÙÀB$J@~¾ˆm[ ÍAÊÍM—ËHn} ½XŒˆàA&K I¢`¨ÄT,I$‰aÝí `^ìíÛ§ÆŽغµfÑ(/W`õêYX±¢ø¤"@--=¨«cf.íÝÛ§sBaŸ‹¸¸(lÙò ääÏè~þô§­xñÅíl›šTš„ž˜Ðºà¹ç¾Âk¯UbxØ >Ÿ‡’)Þ ’“Ï.\Çá°zu ~þó˾³îLØíý¨®nEee ªªZÑÓã@jj<–-S`åÊb,[¦8ã`o2X,.47 Rõ ¹ÙÀ¶R†æ¢‰Å‰P(ÒQ\, ¶ã1AÔTjáòŽ©†H…ZöBm¹£wÖ Q¡ê¨P…Ô¹l¯=_†‡½Á°XFWH…Îs±ç ŒÌ˜âp˜áçBa<ÄâD¤¥1ÐÓÓƒSÌqzzâ”øN!„L!6BÈñ ;ÚÛ™¨³ÓÌVÞ¥-55~L”“ª6"**Z­•­lbZߘPI§³±UNIluRn.,åå !“¥‚ÏŸZ請\C¨¬lÆöíØ±£ v{?äòt\vY V­*Æ%—äžtÍju/êê˜ÝâvïnƒÙìBbb,–,Ég‡z+éç%@;x° ×_ÿâigq¹DDðñßÿ®ÃüùãY<~øßøøãƒlE—ËÁe—•àÿ¸oÂëþä“Cxà±·Éçó •&âƒ~ÆÎìš(•ʈ›o~ÇÀ˜À‰Ïçâûß_„–=ìBiix`5–-SœÕý¯¹Ù€ÊÊfìÚÕ‚}ûÔðùü˜;W†+аreñ)«âνޥ²MMz¨TÆ` eÄÀÀ08d²¶¯¨ˆ™ UX(FdäÔk× 0™ú‚ÁÓØ ©Ð`s›ÍÍ^>!!ÉÉR™™™,2Y2{^8BÁsÉíbÛöL¦¾Q•RN˜ÍÌÇ==L+ßèJÈøø(¤§3Th®”D’ĆS¡ãóÕÊL!„L6B.LÃìü£öö^¨TFvRhç¨Ð ¤ÑP(Pb`4:ÐÖªnêeªÑ¡”P¼<rs…Á*%ap–’hÊÏÑélؾ½ _Ý€º:üþ-ÊÃêÕ%¸òÊÙ'­øÑél¨­U±ÕK==ÄÅEáÒKs±t)S½TR’¶áþû֭߯ 'TòŒÆãq±iÓ”•ÉÇ}»n÷þçÞÂîÝmcÚÒ"#ùX·n%yäª ¯¹¹Ù€U«žsŸÏ…@÷ß_‹¹sO¾›Þxuw[póÍ/£··ý¹ÂÑ£O".. uumظqª«[1w® <° W]5wÒ[ßÜî!ÔÖªPYÉ ×h¬HJŠEE…‚Ýå.\3•Fóûèî¶°íxÍÍz(•=hk3ÁãñÏç"'GȆO …EEää§\ˆ|¼þþahµVvfTh€yè`2 2„LÆì€9:Œ µïÍ´0*Äï°»ñ öØlîcõzæ8ôû0-Ðb±"‘ééÌqèc±XÀVKmÅ"!„2EPØD™¹ôz;(µµÙ@H¯·#€Ïç"++ùù"ŠÙÖµ‚RSã1<ìe¯ÓÞn‚JedO‡B©„„hvw~¾hL¨4ÝZQT*#¶l9†¯¾ªG}½ññQX±‚™½´zõ¬vŽ3™ú°{· uuÌÜ¥ÎN3¢¢ø¸ä’¶5nÞ¼¬)3¦«Ë‚òò?ž2lâp8ظñ.Ü|ó‚qߦÉÔ‡;ï|J¥ñ„Ûår9xõÕàúë/žðš=òóyÂ\)‹ˆÞzë°|yÑ„oŒFn¹åtuYáóùðÓŸ®Ào{ý˜Ë=ªÁË/ƒ-[ê‘——†uëVáæ›œ³ïmh'ÃÊÊfìÝÛÎΫ¨P`ùò",Z”7e~®æû¤V÷²-x­­LK^w·>Ÿ‘‘|Šƒs ¤ì`ò¬¬”°·ÆŽ—Çãc«¡Ž?tw3aTèßÊï £23S¦Ýó‰`B©>ôô8Øc“É £ÑÉv“€ ¨™½$¤¥Å³ÇLÕT¤ÒD… gµQ!„rPØD™þÜî!´·3íjmm&´µ™ V3ShGrr Dl”——†ÂB1²²RÁƒÙìbƒ$µÚ¥’9­ÕÚàóùÁãq!“¥ ??-JÜÖtÿ§¿¡A‡¯¾ªÇ—_…Je„H”€+¯œƒ«®š‹ÒÒ‚1/èíö~ìÙÓÎV/)•=àó¹˜7/›m‹[¸0wJVmuw[ð«_}„–z{]'™SÄÁ¯~u Ö¯_5îÛT«{qÛm¯Âdê;e€µk×£ËÓÏjí¥¥O£³Ó|Âù\./¼p;n»máYÝ‡ÍæFYÙa³¹±ÿïN9˜]¥2âÕWwâãB$`íÚå¸óÎÅçtvÍè]++›ÑÙiF\\ÊÊ ±b3h\&K9g÷6=P©Œhmí³¢VkÄÅE¡°PÌ$/*’ ¨(bqb˜W~æ&+Œ’ÉR.¨ ‡£Ÿ  zzœc©ÑAUh·L€™í—––©4b±éé‰HOg*¤¤Ò$ˆDH¥Iˆ¥™R„B‚Â&BÈôápô³/Ú”J#Ûº¢Ó1/Ú""xÈÎN¥±ÕJÉÉqðx|èê²[æ˜PŠ ˜zÙ]‹âã£PP fƒ¤P¥R~~Ú”œÃ2~‡u²L]]df&㪫æâê«çbáÂ\¶EjpЃo¿U£ºZ‰š%u€Ù³3QZš¥KåX¼8oJ J>ž×ëÇßþ¶ /¼° 2Y žxâ:¬YóO¸\ƒìex<.îºk1ž}ö{ã¾Ýƒ»p×]Eÿ‰¶Cø|.Ôê?uûÔš5ïà‹/ŽžbÞðè£WcÆÕgu?}}ƒØ´iî¿Ùi/«ÓÙðÚk•Ø´ibc#ñãWàÞ{ËÎK5_W—UU­¨¬lFm­ n÷ DÁ!ãEX¼8oÊnîë„RiDK‹>X Õ B™c1k–$>IP\,B!™Ö³†‹¸ IDAT‡½'´æ*ŒŠ‹‹Bff2…Q£¸ÝC£Zõì0™ú`0Øa4:a0ØÑÓã€ÑèdÁÌß4‰$)F1±X0& ¦|‹'!„i‡Â&BÈÔc±¸ÐÚÊI¡íɕʘLÌ‹°P Æ[X(FAˆ¬m³¹ÑÞnb«œBíoÝÝx½~v87(‰ÇT<¥§O¿j‚ñ8t¨ Ÿ~zŸ~F£ùù"\}õ\\sÍ\vîÏçGCƒ55JTW+±¿CC^äç‹PQ!GY™¥¥ùSb+øñ8zTƒÿýßÿ ­Íˆ .Ãúõ«ÁÃßþV…?üáSøýðù<,[¦ÀÛoß7îYR_Ý€ýèMðxÜ13šŽ—ŸŸ†ššÇÏúqüå/_ãÅ·yy2·Ý¶/¼pûy‰e6»ðæ›ÕøÇ?jðƒ”bÍšåç­âÏãñaß>5víjAee3š› ˆŠâcáÂ<,_®@E…%%ÒiÓªf³¹ÑÔd€RÙƒæf=š›™Ó}}L8*“¥°Ô¬YRÈåé((M©–‰ö²ó¢NFÅÇG±!…QcY,.˜L}Ðél0™˜™RF#D1!•“ 5¦B24Èœ©ŒJDZD‰Å‚`X%˜6Ïû„B¦ ›!áÓÓã€JeU­ÄT,…vDJLŒegœ„曈‘‘ ¯×­Ö •ÊÈJ¡PÉje®‰ü|f7J‰ØŠ§©^õ0Ytؼù>ûì0´Zäòt\wÝ<\sÍ\If¶r©®N»½"QÊÊä(/—£¢B‰$)Ìä̸ÝCxðÔbñâ<<÷ÜmÈËKc?ïñøpÑE¿ƒÝÞ¹s3ñÉ'œÑÏÄË/ƒgžù|>÷„YJ!<×]7¯¾zÏY?ž-[ŽáÇ?~ §ú‹ZÇêÕ%xá…µ³¯oï¼S‡7Þ¨‚Ó9€;îX„µkWœõŽygÊhtb×®ÔÔ(QUÕ ‹ÅÅþ¼öÚN vÜpÃ|¬_¿ ÅÙÍ­šˆ@ €ÆF=víjAuu+öíSÃëõ£¨H‚+ŠP^.ÇâÅùSrÆØxx<>´µÑÜl@s³--z´´ô°­ÅA4ŠŠ¤£B(¦"jºm\0^£Ã¨ã©S…Q2Y*²²RЬ¬Ð!å‚yCâtœÎAôô„Zõ0˜ö=½Þ†ÞÞ>ètv˜Í}c*À´7æç?:¦ŽËåB ˆÆ“OÞˆ[o½dÊ…ƒ^¯›7Â+¯|¥ÒˆË//Áúõ«Ãˆ…WW·b×®¨TFÄÄDâÒKsÙª§âbIØÖ7YœÎàóðÈsqK‹Nç@*M O#Ta¡xÚ?œÎñaBY ÑXÑÕeÅâb/›––ÀOYY©cÂ(‰$ñ¼¶ªNu>Ÿfs zzÐëíÐë™ê(ÎÆž?úùK(Œg«¡23“ÙÁæRiLQ E!Ó…M„3z7 “ôhnÖÙ]I ˆawT µsÌš%E\\4+”ʨTÌõ™68#»ËŽPÏV'åå‰ —3§33“éŸûã8ƒøâ‹#øè£Ø·OÔÔ8\wÝŸˆˆˆ@] 55­Ø¿¿ÃÃ^ŠÙ¶¸%K ¦õ áÑüþþõ¯=xæ™/œ‹gŸý–-Sœ·û?x° ×_ÿ"}ô*lÞ|J¥~?°wïo&­lÙ²g¡RÁçs‰uëVáÍ7«Ø`mª ض­/¿ü êBYY!Ö¯_…ŠŠó÷=:ƒÁŽ]»ZPUÅTùÙlnˆÅ,_ÎT=-[¦˜PÕÛT¥ÕÚ‚U¦ú`+SmjÅËËKƒB!AI‰EE(éÉR¦\y®¸ÝCèîf(æ0rº«Ë‚ÁAf3ŠŒŒd6ŒÊÎNS!u¡·èŠÉÔ‡ž&„Òjml«žNgcCªÑTJJ$’$6„JORÉHOgZù¢£#Âøˆ!„| ›!§ ÑX¿sNˆ\ž…"}—\¡H‡X,@g§™Ý-®¹ÙÀ¶Á {Ááp™™l›KGA3—©°PLHOÃãña×®|ôÑlßÞ¸òÊ9Xº´CC^ìÞ­B]]Ž~ˆÅ”—3C½+*ä3røyK‹>ú!îš5+ððÃWœ÷7Üðx<.>þx=üþ>úè|ð}€VûÿØýÎÖ½÷¾‰mÛ°vír<øàåbðöÛuøýï7£ªê1dgŸßÙHQ[«ÂÆ;PS£ÄEɰaÃe¸âŠÙ“ö5:~õõTW+±kW ì„×ëGI‰”­zZ´(oÆUÿx<>´·›ÐÚÚÃ>Ç·´ ÑX ÑË™çøÑÕPIIÞsµÉÔ† žŽ£ [Õ˜ ™ltk^ ²²„l•U윚Ùì †Pvhµ6#•Rƒz½ CC#TrrÒÓ‘‘‘Ä‘‘ ©”vž™™L-‘„6Bn÷š›õ8vL˶^´¶öÀå‡ÃL–Üz›©RR($ÈÌLFW—mmF(•ÌŽq­­=èì4ÃãñËå ++rùÈ®qr¹bj};C‡w³mr6›—\’…B‚þþaìÝÛΆ¸¸(”– ¼œi ÇŒœóepЃ_ÜŽW_݉’’ ¼ðÂ÷Q\,=ïëØºõî»ïøâ‹qñÅYcÖ·eË1ÜtÓüI»¯ÚZ%23S“#dÏózýX±â9””dàõ×Ï~ùùräH76nÜmÛŸ/ÂÏ~¶7ß¼`J9n÷êêT¨ªR¢ªªju/bb"QZšŠ –//Ba¡8ÜËDEñ!—§³áSq±%%Ä×åtúú¡ÑXÑÙiFW—]]ftv2UQZ­•Ý`@ ˆfƒ§ìl!rrRÙÓRiµ““Íæ>i»žVkeCªÐ&#<—Ýa/33RéHÅ|œDUׄræ(l"d& èê² ¡AdžKõõ˜L}€ŒŒdÌ›‰’’ Ìžìl!Üî!¶ýM©ìRi„FcE @Dùù"v°w¨Z)?_4¥*¦3ŸÏ]»Zñþû{°}{#ø|’’ba6÷ÁëõC¡Hg+—JK wáTˆÙlnüáŸáƒöãòËKðÌ3·@"I ÛzÞ}w7~ûÛQUõؘj£p¸é¦€Í›ë:&J«µáµ×*±iÓ^ÄÇGá¾û*pï½å¦æ\1ŸÏ#G4ì ñÇ»à÷3»VTȱ|y,ȹ`ž=ߨ6<=™™P¡Ûéé‰(.–`Ö¬ vTAø‚ÇÇÃëõC«eZò:;™ ª«ËÂSn÷fVTff rsdžQYYLu½¹3~¡ "´Z;t:ôzû˜0J§³Áju³—‹‹b+¡B•Q#áÓÂw¡ü¾BÈ8QØDÈLáñø RQ_¯aÃ¥¦&=úúÁçsQP FIIJJ2““Šˆ G°Z‰Ô­×ÛÑÑ((±ó˜ ˜Ýã²²RéÅÁ9ÒÙiÆßþ¶ |}}àr™]ÍÄâD¶r©¼\±XÅGÀ“O~ >Ÿ‡gž¹W]5'¬ëq¹†°téÓ¸ñÆùxòÉðç>|¸×^ûxãáê«ç†{9f6»ðÆUxçZÀ¸?ùÉ2¤¥%„{ißÉéÄîÝ*ìÚÕ‚êj%:;͈‹‹ÂÒ¥…X¶LŽeËŠ——îežw&S[ÕÔÄl&ÑÖÆTAEFòÙ¶ìâb)fÍbÂ(j#;‘Ùì VB…ª¢BA”™}óÄâÄ1•P99Â`•:£ÝŸ/ƒƒh4V¶EO§³C«µB§cNhÎår–&Õª7F…Â)ªð#„\`(l"d:ò¢¡A‡£G»Ù`©¥ÅLJ˜˜H¶u!'Gˆ˜˜Hx½~¨ÕF¶Z)ôÏi||;œ›©Vbf+Éd)Sb`ïL§ÓÙðòËß`ëÖc0ûÅÇÂ…y¸òÊÙ(++„\>sç.Gg§>ú!êêT¸çžR<öصS¢Úå…¶â7ª°{÷o¦Ì‹ãŸý쟨¯× ²òÑiÿ{_ß Þ~»o¼Q…¾¾AÜyçb¬]»2YJ¸—6.fvÐøîÝ*8ƒÉR‚³žXº´ð‚° 0oŒ„fA57ëÑÔd@S“f3S%'bÖ, Š‹¥()É@q±„ªg¿ÃÀÀð˜j¨P{^WÓžjKHˆFN޹¹Âàq{,Mí0w*3l%”^oS¥×ÛÑÛ;ÆÄDžrnTècú9'„Ì 62Õù|~(•F=Ú#Gºqøp7,%%Åbî\òòÒ˜ ¿°Z]ÁPÉÈ$MLŒe‡sT+‰‘‘æGwaq»‡°w¯_~yÛ·7ÂbqÃ’“ã±|yî¹g1æÏÏ¥ê10m%ýk%^xars…xþùÛ°`AN¸—€yq±téÓxè¡Ë±nݪp/‡¥ÑXQ^þG<ñÄõ¸÷Þòp/gR z°iÓ>¼þz% ;n¼q>Ö­[5­†ß{½~>ÜÅV=9Ò ˜7/‹m¹»øâì þ÷ÞdêCK‹ ̨¦&=ÚÚŒìΧ£« JJ˜cªÖùn^¯z½­„êì4££#tÜËîêu\%DNNrs…3rÓóihÈ žB•QcçFiµVöûÀãq‘žÎ 2ÏÌL†L–<†TFB¦ ›™jºº,8z” •ŽÕ ¾^ƒþþaÄÆF¢¤$ɈÄЃ MMzv®@JJ;¤;T©$—§Ó»–aâõúqäHª«•¨©QáÀøýÌظ¸(\uÕ\<üð•ÈÊšÕçË¡C]xä‘ÐÑÑ‹‡ºk×®˜Rÿ`?òȨ¬lFmíãSnFÊþð)>üðvïþ5Â_6Y<6o>„W^Ù‰¶6#.¿|6Ö¯_…ùó³Ã½´3æpô£¶V…]»ZQ]Ý Æ ¥¥…X¾¼ò°Ï›*Bíá¡*¨ÆFæ8T-" ‚-xR6ˆ*( *¨ñ0Áð©wTÅ `ªqrr˜ÙPÌñH%•&Qô$0›]Ðj­Ðh˜ÓªgGw·ýýÌ÷‚ÇãB$bZõ²²RÆ„Q¡ )úÙ'„L!6N½½}8r„ •Ža*—¬V7""xÈÉB"IDd$.×0t:+´Zâ⢠—‹Q\Ì Z í'Ò»¼á¦RQS£Duµ{ö´¡¯oA4|¾úû‡±dI>î¿V­šE» §¯oÏ>ûÞy§¥¥…xþùïM¹ÝJeV¯þþüçÛqÛm ýœ8ýX²äiüà¥øÕ¯® ÷r&ßÀ×_7ॗvàÈ‘n”•bÆÕ(+“‡{i¦V÷¢ªªUUJÔÕ©àv!'GÈV=•–N‰ÖÑ©¤··oLøÔÔ¤‡J5RÚ¯¸XŠÙ³¥˜=;ó‚m[œ¨ž&ˆêî¶ ££wLÕ×7ˆŒä#;;¹¹iÇUE ‘‘‘Lã&‰Åâbƒ(ÎÎRLJQ\.bqâ˜0*#c¤BŠÂ(BÈyFa!ç‹Ë5„£G5£ª–º¡ÕÚÀáp  ƃÃá ¯o:ý§9// …³fI¡P¤£¨H‚¬¬p8ônâT`±¸‚U L‹ŒÁ`‡@ââ {ÐРC\\n¿ýRüà¥Èͽð†ÇÖ­ÇðøãÿÅð°O> Ÿœ‡Y³$Ë%(.fryúŒš¯2Ó(•=¨ªbæ«ìÞÝŽaää±bE**˜;7Ÿ~zo½U ƒÁ«¯ž‹5k–OËy2ç‹ßÀ;ïÔâÙg¿Bjj<žþ{Sº*àškþA þýïµá^Îi}þùüô§ïbË–_`ΜÌp/ç¼P*{ðÊ+;ñÉ'‘žžˆŸþt%î¸cÑŒ zC»ÜÕÔ(Q[«‚Ãѱ8Ë–1UOåå šÑ7n÷š›õhhг!TK‹CC^DDðPT$S5k–”þFO³Ù…övÔjÔê‘ J­îÅð03$;))– ¡˜ƒ(H æG03£BmzÝÝ–Â( ©4 ÙÙ©ÈÊJEv6sɘc !Ç¡°‰‰ôàС.lÛv {÷ª¡R18è—ËA @ ÀÌ2ížSTÄ„J …b± ÜË'§q²Ö¸ÄÄX”•bÙ2–-S@&KVkÃßÿ^…M›ön¿}~ò“eÈÌœ¹­K“¡¹YGùÇŽi±ví <ôÐåS>øì³ÃøÙÏþ‰mÛFIIF¸—sZ@×_ÿ"bb¢ðÁ? ÷rÎ+ÆŠ×_¯Äûïï…@ƒ5k–ãž{–">~f½Põùü¨¯×¢ºš Âè„×ëGQQ:**(/—cÉ’|ÄÄD†{©Ó‚×ëG[›qT” ZØíýàp8ÈÎN=¡ Švj›~: ½hoP&tt˜¡ÑXáó1k¤§'"??-8#* ùùiÈÏ!++•*nÎ!›Íîn+ºº,èîf¡Ó: ^/óýIHˆfC¨¬¬de GR)ô="äÂCa!ãQ_¯Á¶m س§J¥6›¡_‡ƒÔÔx””dà’KrP\ÌÌWÊÊJÖ³C.$ßÕ·l™ Ì›'c‡>Ü×_¯Ä–-õHOOĽ÷–ãî»—Ð;ß§18èÁ_þò5^{m'.º( Ï?Š‹%á^Öiy<>TTü—^š‡_¼3ÜË·ýû;pà /áŸÿ¼«V‡{9ç]ooþú×]x÷Ý:ðx<Üw_9ÉÉ3óÝ÷þþaìÙÓŽššVÔÔ(ÑÜl@D æ²-wsædÒÐæ3¤ÓÙ‚á“.DéÑÝmöoÿìÙ#UPyyiô5žD]]–`EÓŽ ¥zz>Ÿ‹ÌÌ”`kS •ŸÏTEed$Ñ|¨sÈëõC§³Buu1»½3/J"I †P¡ª(!{š6¸!dF¢°‰Ñl67šš 8x°µµ*´´`µºá÷3¿&™ÇQÝÝÌÌ(Lj<¡=/+KȆSQQô6!Ó…MäÂäõúÑÞn ÎlÐáèQ ´p8ØË„v‰+)É@YY!®½v22’¸jr6ÆÛw<¿?€/¿<Šw ±QU«Š±nÝ*,Z”†G1ý˜L}øýï7cóæC¸úê¹xúé›!OŸÖ§sK–<;ï\Œ_ÿúÚp/猩սX±â9<ýô-¸ûî%á^NX¹ÝCøç?÷௭„ÍÖÛo¿?ûÙÊ fG²ÖÖ6|Ú³§n÷²³SQ^.GE…ee…HJŠ ÷2§­¡!/ZZ hhвmxÍÍz¸ÝCàñ¸ÈËK;¡ *5•ª9ΫÕövÚÚŒhoïE[sº»Û¯×‡©4 ùù"äç‹PX(fÛò¤Rú_ï|ðùü0ÁðÉ̆P¡@ÊbqùüøQ¡pj¦¿q@È4Fa™ùìö~45éÙCc£­­=ö‚Ëå""‚‹¡!x<òóE¨¨ã²ËJ°pa#CNíL[ãŽçõúññÇñòË; V÷âÚk/† —aÖ,éy~$Ó“ßÀ?ÿ¹üã—HLŒÁSOÝŒË.+ ÷²ÎØÓO÷ßß‹={~ &ÜË™ßüæc|ñÅÔÕýšì‚Ù­oÓ¦}xíµJèõ6Üxã|¬_¿ê‚ÚÕÍãñáàÁÎà°ñV9¢Ì™“ɆO æPÕîYòûèì4£¡AdžP:˜L}˜D¡àiΜLÌ+£™çX¨-O¥2B­6±!T[[/¦*..Š­~bB( ˜éÿÂóÇåÓš7º=O£±²Cåcb"‘“#Dn®pÔ13T^"I¤6JB‡Â&2sŒþ§®¹y$\Òél II±ö¢·×‰@€ƒ‹.ÊDii!JK °hQ•TOsgÚw2CC^üûßûðê«;ÑÓãÀÍ7/Àúõ«Ÿ/:ObúkjÒãÑG?ÀÑ£ÜÿrüâWLËß-Ά²²gðøã×â'?YîåL˜ÕêFiéSøÉO–áᇯ ÷r¦ ¯×Í›aãÆho7áÊ+ç`Æ՘;Wî¥wNçêêÚP]ÝŠªªVtvš‰Å‹óØyOEEzÑ6IL¦¾Q-xZ44èÐÙi†ß@rræÎÍdç9s2‘}aTß…›Åâ‚JeD{»)XÅBCʹ\22’Ùð© @ ¤DÓªbw&ðû0løÔÑÑ‹ÎN3::Ì?à`³ IDATèì4£¯oÅGnnÚIÃ(©4iÚ´ó2MQØD¦§¾¾Á` d@c#.57000Ì–«çäÁçsa±¸ÑÔ¤‡Ë5ˆììT¶ª¥¬L€:Ogm;™Ñ-6v{?î¼s1Ö®]1îëækøÿþß6¼ñFæÍËÆsÏ}oZ ?•|ûö©QUõØ´¯ðxõÕxá…mؽûqzQt¿?€­[ᥗv ¾^ƒåË‹°aÃj,^œFceg=ÕÖª`µº!% ¬Œ™õ´l™‚vb›dn÷t8vL‹úz ŽÓ¢­ÍŸÏÄÄØ`øÄPsç2…ç‡ÇãƒZÝ‹¶6cð8Ôžg‚ÓÉ„ ÑlK^AÓ–WT$AVV*Íu ³Ù…ÎÎ^¨Õæ`5F9ÌÈŒÈH>²³Sƒ» ÇRÉìœCB&…Mdêëî¶ ±Q¦&]° NÆŠ@ %%RKQT$Ï@G‡ ;w6£­Í K–`ùò",[¦ a¨ÓÜÙ¶ÆÌð°ï¾»7î@ÿ0î¹§kÖ¬€H”pÉ̳}{#ü¿p¹†ðë__‹;ï\<­ß1llÔáŠ+^À«¯þ×_q¸—sÖ††¼(/K—â/¹#ÜË™²*+[°qãìÝÛŽK/ÍÆ «±rå…·“ßh~ ZTW+Q]­Äþýj y!—§[îä(-- Ís ¿MM:Ô×P*•^¯A æÌÉ`«ŸæÎ•!'G8­Ÿw§#“© žÚÛMÁʨ^öÿÔˆ;ª°P ¹\Œ‚1 DÓþMŒéÊju+ zÑÑ16ˆ –ˆà!++¹¹Â*£23S(@$d|(l"S‡×ëG[›qTi¹ÇŽiápôƒËå ++³gg`Ö,ið˜˜ìØÑ„;›QUÕ§s³fI±jÕ,¬\YŒ rèÂ47­q'ãõúñŸÿìÃÿýßvX,.üèGK±~ýj¤¤ÌÌmÑϽގßüæclÝz ·Ür ~÷»ë‘–6ýƒºÛoNç¾üòÁS=ð駇±nÝ?±mÛÃ()É÷r¦´}ûÔØ¸qvîlÆìÙذá2\}õ\z!```ß~Ûš%ªªZÑÔ¤ÇÁ‚9lÕÓEeÑßÞsdpЃÆF=[U_¯Je„ÇãCBB4fÏÎÓ‚—Ÿ/¢ŸÛ0èïF[›*•J¥mmF´¶ö°Êy<.d²Èåé(,C¡Hgƒ¨éØv>SØíýl+^GG/Jµ·÷Ž ¢23SØð)ÔM‘›ËQ¼0? B¦ ›Hx £¹ÙÀn|ì˜ÍÍz yÁCQ‘ä„][BTF|õU=¾þºGj²²B¬Z5 —]6  í"2MfkÜÉøý|úéaüùÏ[¡ÕZqÇ‹ðÐC—SkÑòzýøÇ?jðüó[  ðÜs·¢¬LîeMŠªªVÜqÇëøï×cÉ’™ÓJpíµÿ‡¸¸h|ðÁOýœi¡¡A‡_ÜŽ-[ꑟ/ºu«pÓMóéÅÄ(‹‹ žjj”Ðëí¢QZZȆOyyiá^æŒ64äES@…B¨–<ââ¢N  DÔ"&­€ Q*UÚÚLðx|àp8ÈÌLFA E: ˜j¨ÂB1i·Èp:UÕÑa†Õêðù\df¦°áS^^rsÓ——™,…~ïÈ…†Â&rîÙíýÁ˜z;¦ACƒju/|>?¢1k–”݉eΜLŠOøG¾¾^ƒ/¿¬Ç–-õhk3A"I•WÎÆªU³°ti!¢¢¨yº:­q'°}{#ž{î+(•FÜ|ó<üð̶ç“éÈ‘n<òÈP*{°aÃj¬_¿zÆüúý\~ùŸ‘‘‘ŒwÞùq¸—3éöïïÀ7nÄÛoß7-w •ʈW^ù|ÿŸ½ûŽkòúþþaƒŠŠ,e# Ž*Š€âjU¿j«à®ÕÖmmµEm­u·®º÷Âú“:qÕ…nDE6([ö̸¿?"Q‘‘ð$á¼_/^ „ç9ɹ<$'÷žkdÔß}×cÇ:)̸—¤èè4DàÖ­Hܹ¼¼b˜˜èÁÍͽzY£gO+4oÞ˜ë0'À‹¯ú®ö<žZZê°·7)׈ÜÊÊ€f£qˆÏ"!!)ˆŽ.+B‰fD–Z¶Ôµµ!,-[ÂÖÖX\¢ß'îåæ•+DÅÇg¼í•ŽŒŒ|¢QmÛêÃÂB¿\/ss}èéѬz¢¨ØD$ëÕ«,<þêí»k¢åpe»Áµl©óv¶’èÉMûö&mp)2<|‡‹E¦¤¤,´m«Aƒ0x°MfiKC$­¥qsçN4V®ôEHH"vÀ?„••ÄŽßPäæaíÚ‹8tè6œ-±zõ(…Û¥ïĉ‡X¸ð8®]ûÖÖ†\‡#Ó¦Ddd ®_ÿ‰^\ÖPbâìØqÿüsMšhá»ïú`üxgZöò|¾ÁÁ/ßö{Š@pðK… vvÆps³†‹‹5ºw7‡–=~õÇ ""EÜÿééÓ$<þ %%|hjªÁÞÞ¸Ü (kkCšÅÇ1Æ’’²&.DED$#**UÜœ\OO[<ûÉÆÆ66F°µ5B‹T„’¹¹ÅˆM7—/ëâbQ--[¾-BéÃÜ\TˆjÓ¦ýyFÅ&R;Œ1¼|™ù¶_@BC“ðìY²³ ¡¤¤33Q%SØÛ‹–ÁU§árHHΞ ÆÙ³ÁHIɽ½ ì€Aƒ`k+¿»Z5tÙÙ…¸u+~~ÒY÷1ññX±â.]z ww[,^<:´’øy‚sçBð믧Áç ±lÙ0Œõ™Â|‹‹ypqYww;¬_?†ëp¤&>>½{¯Åo¿ ǤI=¹G.¥¦æb÷î›8tè6´´Ô1}zoLšä‚Æ©IvUòóKp÷n4nÝŠD``$""R ¦¦‚Ï>õ{ruµ¦~OõŒÏ"22å½PI {¢¢Rhh¨ÂÎÎ¸Ü ([[#zñ+#RRrÞ[Ž'ZŠ÷âE2²²DKºš7o ;;#X[ÂÖÖ¶¶†°¶6¢˜ec ¯^e#6VT|¢Ò›†W¯²Á/˳°Ð‡¥¥ÌÍßÍŠ20Ðåú.ò)Tl"ŸÆC\\†ø0Ñ¿¯›[UUeXYˆß³·5ð®É¬”¨¨Tœ=ŒÓ§#..ÖÖ†>¼†ïL»ÇÉ)@ˆøû‹ L!! PR‚Ä—Æ}Ì›7øóÏK8zô.,,ZbÙ²/áîn+•s)º¨¨T,]z‘;Ö K– EÓ¦ŠÙ7bÛ¶ëØ¸ñ nßöRø'q¿ýv'OáÎ/‰Î"lh23ó±g?öª ¦Më…©SÝèÅ\5¥¦æ"00‘ˆBrr6ttD»ÈººŠz>)ê CYV¶aËû»à……½FAA ÔÔTЮ1:vl-þ°²2 &ä2$55‘‘)xñ"ùí¿¯•Šüü€‰‰llD(ÑL(CX[BSSãÈI™âbžx&TllÚÛE…¨²m::š07õƒ²²2€¹yÙ¬(}š-Jd›HyB!Cllú{E%Ñ4ë¼¼b¨ª*ÃÚڦkõÇéÍ›üûï#øø<Äóç¯`b¢‡/¿ì„‘#» ];c)Ü3"miiyðó{ñvöR²³ adÔîî¶pw·…««Ô_€ñxìÛ€M›®@KK ‹ ˜1ÝèIp-”`ãÆ+سÇ66†Xµêøì³¶\‡%5oÞÀÙùL›Ö ?üð×áH]NN!œWaܸîðòÂu8r/;»{÷ÞÂÞ½·0Lê†iÓz)laVZbbÒijžnߎFnn táê*Zrçæf CCÚÌ 11ixú4 !!‰ IÀ³gI()á£qc 88˜¢cÇÖèÔ©5:u2ƒ±1mÖ"KcHL|ƒˆˆDD¤ <<)ˆŠJEi)_¼;^»vÆï-Å3DÛ¶ú4“MƤ¦æŠ—á•¢¢£Ó”ô|¾JJJ06n*^’'ê %ê Õª•žÂÍJ'2ŠM ™PÈ“&ž6ýô©h)\~¾è+CqQÉÁÁíÚשªPȉcÇîá¿ÿžASSÇwÆÈ‘]еk[ºøÉ™²ÆÞ7o†ÃÏ/ááÉPWWA÷îpw·ƒ››u½.}¼té)V¬8‡””LŸÞ³fõï`Hª1Ñn}Ë—ŸEq1‹ Âøñ=~/¯S¸p!·o{5˜q³g?V­:€€_Ъ•×á(„ÜÜbìß {öÜÇǤI.˜>½75ð­@ˆÐÐ$ˆŠOÆ¡¤„KË–â%wÎΖÐÕÕâ:Ô‹Ç <<ÁÁ ~‰'O• @ˆ–-uàè(*>•¡h75ÙÃç Ÿñ¶ø$*@½x‘Œøø B¨©©ˆwÄk×ÎX¼$ÏÔ´½‘'cx<^¾ÌDttêÛ¾PéâþPe»åijª‰—â™›‹ QVV°´4 ÞƒD¨ØÔPBDG§½·NÔ²lJ´]YSHQaÉÎÎêê’ÙeçÕ«,?~Ç?Àë×Ùpr2‡‡Gw ìHSvåL||üý#póf8£PPP ‹–ps³AŸ>vpv¶¨÷©»aa¯±lÙiܽƒ/¿ì/¯!01¡εñâE2–,9‰û÷c1vlwüüó`4k¦ø;¤ÄƦÃÝ}-V®ü<={pN½áñèÝ{-M±}ûx®ÃQ(ùù%8t(»vÝDaa)ÆwÆ÷ß÷¾þ§{’ÊóðàA,¢‰gÏ’ ¤¤GGS¸¸XÁÕÕŸ}Ö†väXAA BC“’€Q*)I´QLÛ¶úèØÑ:™¡cGS´oߊžʨÒR>"#EÍÈÃÃSÄ…¨ÄÄ7€FÔamm(^Žggg„víL¨)¹ŒÊÎ.DLLº¸+*DÅÅe ´”%%%´j¥KË–°³ít(ÚùЀ–…“º b“¢ŠÏÿ¡ IijgI(,,…ºº*ììŒÞ.…5|´³3–ÊÙ{÷b°o_._~Š-t0jÔgððèN}˜äHQQ)î܉Á/àç÷ññÐÖÖ€‹‹ÜÝíàîn+•ÆÞÕQPP‚?ÿ¼Œ}ûnÁÑÑ¿ý6]º˜q‹¼ËÍ-Âúõ—qèP LñÇ#ѱck®Ãª7ß|s11i¸zõÇטøâÅPL›vçÏÏC§N 'çõ¥°°GŽÜÁÎ~ÈÉ)‚‡G̜ه–‚I@vv!£Þö|ŠB\\:´´ÔѵkÛ·;ÝY¡}ûV4ûBddä‹g>‰ P ÈÊ*€ªª2lmÄŧŽÍ`mm ð3iåY~~ÉÛ¥xÉâ¥xááÉHOÏ ÚyÚÎÎXÜõ¬pAKñd“@ DBB&ÂÃE;FFŠÎGG§¢°°`hØD\X´²ízhmm==Å3’Ô›Ajj.BBÊýÏÉ)/…+kàèà` énc[ZÊÇÙ³ÁØ»÷ž>MB×®mñÍ7n8СÁ½ˆ“W/^$ÃÏïnÞŒÀDZ(-ÀÞÞîîvpuµ†““9çO._~Š%KN¡°°^^C0n\wZ†Y Œ1œ8ñ«V‡@ „—×|õ•SƒzqöàA,†ÿGŽ|‹¾}í¸‡#Gn…@ ÄÙ³s¸EaópìØ=lÛv™™ù;Ö ³fõ¥Y˜”””…ÀÀHܺ‰Û·£žž==môìi)^vGovÉŽøø ÙÛ‹þ¥åŲK(õøz§ÃÈÈDF¦ˆÍëëëÀÆÆðí,(#XZ¶„!Íà%ï£b“¼ÉÍ-*WTzò$ÉÉÙPRR‚¹¹þÛÂ’è´½½I½MOÎÍ-ƾ}·pèP ²² 1thGL›Ö ŽŽ¦õr~R{eï—õ^JNΆžž6\]­ß6÷¶CË–²ñ‡#)) ^^'qíZþ÷¿.X¶ìKš²]KOŸ&á—_þÅ“'‰?Þ‹ jp½Oc2d´µ5qâÄw\‡Ã™ ¼ »wOÄàÁŽ\‡£Ðx<Ž»‡íÛo %%£FuÅܹýкus®CS(Œ1„‡'# @4óéîÝ” U+=¸ºÚÀÕÕ ..Öô÷C†ðùBDF¦ $$¿DHH"#SÀç Ѽycņ̃²þO a‰·¼ãñˆŠJEXØk„…½BXX2ÂÂ^!##``ÐíÚ‰–ßÙÛÃÖÖ––ôæ´Œ{õ*K\|ŠŠJEx¸èßœœB€žž6¬­ Þ›%šE3z$*6ɲâbž={·ëGHHââ2Àƒ‘QStêÔŽŽ¦èÔ©5Zs²¦67·{÷úcÏž[`ŒaòdLšä¢ðÛ†Ë3¡!44~~á¸qãBB;¶FŸ>¢¥q¦25»…ÏbÏüõ×e5ÅêÕ£àâbÅuXréÍ›¬[wGÞÅgŸµÅÊ•#aooÂuXœ8w.ß—/ÿ€öíæcPföloÅÃß1ç3O€ÿ}ˆ¿ÿ¾Ž¤¤79² æÌéss}®CSH<žÁÁ/ Zr÷øq<[[£·Kî¬Ñ½»yƒÙ@^•âéÓ$'ˆŸ¿|™ hݺ¹¸ðÔ±cktèЊˉ´´<¼xñÏŸ¿Ï‚ŠŽN'€ººªx”h&”Ú·oE;{Ê´´<ñ,¨ðpQN#"R™)*.êêj¾m6oX®7í§Ð¨Ø$+ø|!""’ßN)ýAˆHŸ/„žž¶¸¨T¶Žëb·E¦iÓzaÚ´^ÔDNF¥¥åÁÏïüý#‰ÌÌ|5…»»-Üܬáæf#³È=ŠÃ¢Eÿ"..³fõÅìÙýèÅp-… ÞÞw±víE¨©©`É’¡9²Kƒý_Zʇ›ÛtïnŽM›Æqç^½Ê‚‹Ë*üüó|ûm/®Ãi0ø|!NŸ–-ןaÃ:bîÜþ°¶6ä:4…VPP‚»wcÄ;Ý…‡§@UU;›ÁÅÅnnÖèÔÉŒfXÈ 7o Þ›Ý/z¾œ‘‘UUeXY¢S§w(#Ê¡œàñˆˆHŸž?ý[V¨04l"^~×¾½ ììŒÑ¶­>åWde¼m6Ÿ"ž •Š””¢fó––¢YP¶¶†âÙP¦¦Í¨›ü«Xl:vì<<<¸ HîŒ7ÞÞÞ5þ¹’>‚ƒ_âîÝܽƒ  xñZõZ‰û,9:šÊT²/¿ýv¶FE¦†ú‚VÒª;Þx<‚‚âáç?¿xþü5TU•áädŽÞ½EKãììŒê!âÚ+)ácåJ_ìÛWWk¬Y3ê“¿ týú8]èëGaa(òòR‰ßÛÛãÆÉOÑfçΛX·î"±qÓz9§¬O”—w‡ëP¤JZï±Õ-¿JÐÒ²FãÆÝ "3ó¤DckHj“ßôô<F½ù‰W¯² ­­ggË·;ÝY#(è<==¥1©‰Êò›˜øF\| NÀÓ§I(((¦¦ÚÛZÃÙÙ¢Ê qdýúÜP|˜ßÔÔñò»çÏ_#<<ÑÑ©àó…”_9ô~~ss‹•‚ˆQsrÑ¿iHJÊcŒò+‡*¹>?úèþ°'Nœn4  &ƒº°°AAñ¸wOT\ ~‰’>Œ›¢GK,_>]º´‘é]8ââÒ±h‘îÞÁäÉ.X¸p`f2 >\®^ŒÊšO·ÄÄ7ââR`` JЦM ¸»ÛaÑ¢Ápv¶€––|L1öìfÍ:Š””llÚ4£Gw­ÑÏÓõ«rEE|hiõ0[¢Ç3fŒD'mÙمؼù*¦Oï]o…¦÷ÉþøœÇuRqìØ1œ9sFêç©K~ xhÜø+ FÔ0Ô%¿úú:1¢3FŒè ˆMž6n¼‚_=]]5hjšãðá5’ ›TSUù55mSÓf6¬#Ñ[‘‘©¸w/÷ïÇ`Û¶ëøý÷³PSS…EKØÙÁÞ^4;¦];ãr«dÿú¬˜>–_ƒ&00hww[ñ×JKùˆˆHÁÇqxð –ò+*˯®®&ºtiƒ.]Ú”ûzAA ¢¢R‡ã(¿r ªëóG‹M£G–Z@Š¢ª'5Œ1<þ×®=Çáxò$<žmÚ´€““9¾þÚ Ý»›ËESPO€;ý°q㘛ëÃ×wn­¶E=z4«:øp¼•âÎܼÿpDG§A[[..Vøå—Ápw·“©YqÕ!±c‡Ö¯¿„®]ÛâèÑoѪUÍwk¢qFª²q㨩)ãûïûpr~ŸÜàñxõRl¢ürC’ù57ׇ¹¹>&Nì @ˆgÏ^áï¿O &&‹òË‘šäWEEvvF°³3ÂäÉ.`Œ!66]¼4+,ì5ºÄÄ7KË–00P‚šš>å—#5ɯºº*:th…ZaÊWʯ¨I~µµ5Ä+|¦Nu£üʪòûÑb©¹ÒR>nÜxÿþ{?¿HKËCË–:pw·Ã¤I=áìl)wø?~‰<¸¸tüðÃç˜>ÝÖGs¨°P»wûÃÏïîÝ‹AI vvF0 =V­²…““¹Üö3JL|ƒÙ³½’€E‹aÆ w™jRNC|| Äòå# £C=æ!USQQ†££)úô1¾}Y\‡CjAII -aaÑR<û -ãyò$·nEâìÙ{PVnX;²* ʯb£üÊ7*6IÀ½{18u*çÏ?Annºvm‹©SÝàîn{{c¹ìWÄã °~ý%ìØággKìÛ7YîfÉ(>_ 4CDĸ¹Ù`ÍšÑèÝÛ–ófñ’pî\0~üñLLôpñâ|´kgÌuHDA­^}mÚ´€§g®C!„Â!]]M¸ºZÃÕÕmÛæÂÃ#ëˆQ~åW>P±©x–/?‡0y²+–- º,éxô(çÏ?ÁSh†&!„B!RD¯êê@MMˆV­ ±gÏ ØØÈÿ6ÅŒ1>|¿ÿ~¶¶†¸zu!Íf’1ÚÚ|…)4½z•…iÓ"&& »vMÄС?ù3„Ôc ¿ÿî‹îÝÍ1`@{®Ã!„B!D¡Q±©ŽLM ¢Ð”žž‡ þ¿æÌéyóÐ;ÿDj®] ÃܹÇ`` ‹K—ÀÜ\Ÿëˆ‚»x1AAñ¸ti>סB!„¢ðê\MˆŽŽÆÁƒ%ÊÇåååaÍÉn5[PP€U«VIô˜òÊß?}û®CLL:NŸž… ¿à´ÐTcª&²²²°nݺOÞ®ªqJãMD bÍš ˜8q/ °Ç… ó8-4ÉÚX«ÌÙ³gñàÁ©¿!ŒMO€•+ÏcĈÎpp0å:¹Q›¿½ÙÙÙHJJ’RDD’jšßÜÜ\<~ü˜ò+'jšß´´4!==]ŠQI©I~ãããqïÞ½r………RŽÔEMù|>BCC/½ ˆÄÔ4¿999xüø1ÒÒÒ¤•tÔ¹¢Ž;wJ"–ÊÉÉÁo¿ý&ÑcæååaÙ²e=¦¼ 6n¼]ps³Á•+ Ñ¥K®Ãª—1U999Ø·o_µn÷±qJãM´kĤI{±k×M¬_?7Ž…––:§1ÉÚX«Œîܹ#µã7„±yð` ’“³±xñ`®C‘+µùÛ»~ýz™ÿ""5ÉïöíÛabb‚©S§¢C‡3f JKK¥ ©“šä÷§Ÿ~‚••¾ùæ´mÛ‹/–np¤Îjšß/¾øÇÄÅÅI7@R'5ÉoXXlll0jÔ(8::bòäÉÒ ŽÔYMò»cÇ´jÕ žžž077Ç¢E‹¤œ„Ñ:©*+«&ìÁæÍW±jÕ(lÝê‰Æ5¸K&µiÓ\‡!×âã30tè&<{ö§OÏÆ¸qݹ‰4¹¹EØ´é*¦NuC«Vz\‡£°.\¸€É“'cýúõ\‡B$,55óæÍƒ¯¯/‚ƒƒ‡ÐÐPlß¾ëЈ<{ö [¶lAhh(‚ƒƒñðáCüõ×_xúô)ס ‰ŽŽ†RRRÄööö\‡E$ÄÃÃßÿ="##‰ .àòåË\‡E$ 33sæÌÁ… †'Ož`Ë–-xôèסU›DŠMB¡sæÌ®®.Z¶l‰Õ«W=@ýúõÆ `ll }}}ìß¿ .„¾¾>ŒŒŒpüøqñqþùçXZZBUUFFF}Òêëë 4jÔ“'O+'ä IDATÆ?þˆ‹/nÞ¼ GGGhhhÀÖÖgÏž­2ö½{÷ÂÌÌ ÚÚÚ˜yŸ®]»{{{¨««£sçÎâ'MUÅR“8å‰<ä÷Ñ£GhÛ¶-z÷î hÚ´)¾øâ <þ¼ÒãP~ß‘‡ü¾~ý033ØÙÙ¡eË–xýúu¥Ç¡ü¾#ù€˜˜XYY!//Oü\ãc(¿ïÈC~ǹsç pÿþ}téÒ¥ÒãP~ß‘‡ü¾yó]»vXXX E‹HNN®ô82™_öoooVÉ—?Ê××—)))± °‚‚Àš4iÂ|||Xrr2SVVfK—.eB¡mß¾`kÖ¬aB¡­[·ŽYZZ2ÆËÍÍeìôéÓ¬¸¸˜ùûû3eee–––Æ™††cŒ±˜˜Ö¸qcvîÜ9VTTÄV­ZÅTTTØ‘#GXJJ ÓÑÑa`ÅÅÅìÌ™3¬Q£F,<<¼BÜÉÉÉ ûöÛoYII ‹ŽŽfMš4a7nܨö}7n7n\µo/  dff ™§ç.öæM~½óöö®Öm%5¦._¾ÌŒYTTËÍÍeÆ c3fÌ`Œ1–ŸŸÏŒŒŒØÖ­[Yqq1»~ý:ÓÕÕe·oßf‰‰‰LKK‹1‚ݹs‡EDD0mmmÆXõÇé‡êxÛ¿ÿ35]À¾ÿþ0+.æIý|\]¿>3'ÉÉÉL]]]<bccYÓ¦MÙ•+WXHHÓÐÐ`'OždEEElãÆ Û¸qc•×·šÄú!IŒÍšü~×§„„Lff¶íÝëÏu(Œ±šÏª®aU]‹j2|}}™ªª*›7o+((`¬I“&ìÂ… å®iU]3ßçááÁ¼¼¼>zŸ™ŽŽ;}ú4+,,düñ333cB¡°ÊXªúž´ÿšjùeŒ±‚‚fggÇvíÚUá{”ßwä-¿%%%ìÖ­[lùòå¬mÛ¶,//¯Â}¢ü¾#/ùMMMeX§N˜––ÓÑÑa+W®¬ô>Q~ß‘—üz{{³îÝ»³#GްaÆ1vïÞ½Jïå÷yÉ/cŒ 6Œ1‚8q‚͘1ƒuêÔ‰åçW| /£ù}(‘b“žž+--ÍËË‹1Bü"¦ì‰ŒŒdªªªŒÇ½è|üø1300`Œ1V\\Ì‚‚‚ÄÇ(KBTTT¹„üñÇläÈ‘âÛ …BfddÄŽ9ÂvîÜÉÜÜÜÊÅ7jÔ(¶|ùò q—Å–––&þš³³3;}útµï»<½ø/-å³E‹N°V­° þc°^Ï_Ób“$ÆÔ™3g˜±±1{öìcLôËœ••Åcìøñã¬sçÎåÎ;gÎ6oÞ<–˜˜È°W¯^1Æ‹‹‹›ª;N?ÔÐÆ'`?ýt‚™˜Ìgÿ} …õ3Þ¸º~}8fª'eÇ}ýúµøûnnnÌÇLJýôÓOlìØ±åbìСÛ¸qc•×·šÄú!IŒMY-6}÷ÝaÖ³çJVZÊç:ÆXÍÇgUװꌱêŒ___¦««ËJJJÄÇòòòb_}õU¹kZU×Ì÷}ªØô矲¡C‡Š?/--ekÖ¬aUÆRÕ÷ªKÖžìÊc~oܸÁìììØÈ‘#Åç{å÷yËïëׯY·nÝXÓ¦MÙœ9sŸ_ñºIù}G^òûìÙ3Ö£GqâîÝ»LWW—:uªÂ}¢ü¾#/ùýûï¿Y£FØ AƒØéÓ§ÙŠ+˜–– ®pŸ(¿ïÈK~Õ>ŒŒŒØÈ‘#™¥¥%›6mš<]ŸJd……ÔÔÔÄŸ·oß¾Üô.mmm€’’444 ªª*þ¼Œ††‚‚‚ðùçŸÃÂÂ#FŒ¨tG||<¬­­ÅŸ+))ÁÜÜ””Tî{`ccƒÄÄÄJãVQQ¾þ»°ÞG‘dgÂÃc7N ÂS1þ(+Ëö}•Ę2dFggg˜™™aîܹÈÊÊ GáááhÓ¦øãøñãÈÎÎ(++ÃØØ¸B\Õ§•i(ã­°°“'ïÅ©SAØ¿ fÍê+Ó÷Uc (?fª3NŒŒŒÄÿ/;Ö«W¯*ôQh×®€ê]ߪë‡ql'àìÙ`üò˨©©pN­Tu «Î«îx077‡ºú»fýíÛ·GBBB¹Û|êšY]þ WSSâE‹Ð¨Q£OÆR8å‰<å777˜4i~ùåœQ~ß‘—üª©©A[[§OŸÆðáñdÉ :{öì©pŸ(¿ïÈK~ÏŸ?;v ,, 'OžDXXBCC±yóæ ÷IVó+‘bSFFF¹ÏÓÒÒЬY³ãÌ™3ðòòÂ’%K‰‡Šœ÷éèè 33³Ü×ʇ®®n…X233ѤI“Å¢HbcÓ1xð&$$dâìÙ¹èׯ×!U‹$Æc ýõ233áããƒââbüïÿ +®®®ˆ/÷±cDZ]ÝqÚP¥§çaÔ¨m M¿ÿÎÄ€í¹é“$1Ö€òc¦¶ãDOO¯Â¶¦eñÑõ­f~ÿý,>û¬  út!YUÕ5L’×¢ÇUzz:tttÊ}íS×ÌêÒÑÑ©P :uꔸ7YU±T'Ny"/ùåóùèß¿?š6mŠððpxzz~ô\”ßwä%¿G-·ƒdãÆÑ£G„‡‡W8å÷yÉoLLL…þj:::`ŒU8å÷yɯ™™ôõõË Ú´iƒÜÜÜ ç¢ü¾#/ù †““š6m @T@êÓ§?~\á\²š_‰›âããqþüy¢m´wíÚ…AƒÕèIIIh×®\]]¡¢¢‚»wïVú‹Ò¯_?œ9séé逻wï",, JJJèß¿?®^½ŠØØX¢TNž<‰~ýú žgÏžÕå®Ê•€€H ¼ úú:8~ììŒ>ýC2BcjíÚµèÝ»7TUUÑ­[7L˜0AÜð²_¿~À‹/………èÒ¥ NŸ>]å1«;N†7ÞbcÓ1lØfäæáܹ¹pt4å:¤j‘ÄXûPMÆÉûúöí‹ãÇ‹gV…††âÖ­[ðÉë[M(úؼ|ù)<ˆÃo¿ ç:”:©êVÛ1V™¤¤$q³ùüü|ìÞ½»Â¸ªí5(?Þú÷ïsçΉ‹ª÷ï߇§§'TTT>Kuâ”'ò’ß . 99 .Djjªø‰ð›7oP~?F^ò«®®Žõë×#//€€q³Êoåä%¿ÁÁÁ0`€øÅdNNN:…Ï?ÿå÷cä%¿...xýú5îÝ»@ô<öÌ™3pss@ùýyɯ££#nß¾-ÎYAA.^¼(_×笹«”¯¯/ëÞ½;³²²bnnnÌÐÐ 8•––Š×5–‰ŠŠ÷¾aŒ±àà`ñºÆ„„Ö²eKæææÆúõëÇÈ,,,ذaÃ*ô™2e Ó××gýúõc=zô`ŽŽŽìĉŒ1Æ–-[Æš6mÊú÷ïÏš7oξûî;ñÏ™™™±+V0ÆD}JTTTÊÝ—ž={*LÇo3SÓlÎoVR"ýÆÌŸ‚öl’ĘJLLd­[·f:t`}ûöeMš4a»wïßö¯¿þbººº¬oß¾ÌÄÄ„=š –˜˜Xnl¼ß³©&ã´!·‡cY»v^lèÐÍõÚxþC\]¿>3U“Ëc½zõb>>>L(2Ö´iSÖ»woÖºuk6pà@¶qãFÆØÇ¯o5‰•1ÉÍšü~K[i)Ÿõì¹’MŸ~ˆëP*¨éø¬êV“1VÕxðõõefffÌÞÞž¹ºº2###Ö«W/VTTTášö±kæû*ëÙôþxcŒ±¹sç²-Z°¾}û2]]]¶uëÖOÆRÕ÷ªKÖzFÈK~—,YÂTø˜9s&cŒòû1ò’_>ŸÏ† Æôõõ™››kÞ¼9ûúë¯Å=H(¿•“—ü 6fÌÖ¬Y3æîîÎZ´h!n„Ìå÷cä%¿Œ1väȦ££ÃzõêÅ ÙW_}%îéCù­œ¼äW(²3f0===Ö§Of``ÀÈ cr‘ߺ7/STTÄnܸQ®¡VMåää°«W¯²'Ož0ÆDɾyóf¹Û¤¥¥±°°0öäÉæççÇJJJ˜¹¹9»{÷®ø6qqqì¿ÿþcµŽ¥:dñÅ¿P(dkÖ\`ÆÆóÙ֭׸G¬6/F%1¦Š‹‹Ù­[·Ø•+WXjjj…ï'%%±ÿþûOÜ ®2€eddˆ?¯Î8•YoŒ1ößOYÛ¶?²©S÷³¢¢ÒOÿ€qyýúP]ÆIhh(»zõ*ËÉÉ©ð½úº¾Õ„,›öï¿ÅÌ̲øøŒO߸žÕf|Vu “ĵÈ××—uéÒ…•””0vÿþý*úWçšY‘‘‘ì¿ÿþc ÕŠ¥¦qVFÖžì2Fù¥üÊN~CCCÙåË—«õ·…ò+"Où c—/_fQQQŸø÷ßÑ®];ìÞ½|>]ºtߦ¬¹VCÃç ñãÿ‡S§‚°m›'†ïÌuHu"‰1¥¡¡WW×~ßÄÄ&&&UCYYÍ›7^qÚPœ:„yóŽÁÓ³V¬ ‰¬Ì­w’kªË8éС:tèPé÷êõ­:òòбaÃL™â3³æŸþ9PÕ5L’×"uuuñ´ûªTçšYVVV°²²ªq,ÕS^P~«ÿ=y$Où­êï·(¿"ò”_;;;ØÙÙUë|”_yʯú÷ï_­óQ~Eä)¿æææâ Ñ>EÖò+±bS}éÔ©8€Õ«WãÍ›7°´´Ä¥K—Êí&Õ–búôƒxð ÞÞßÂÅÅúÓ?DH8ˆ%KNaîÜþøé§\‡C¶l¹@ˆ¹s«÷„‹ˆžPYZZr€ªc‘¥8å‰,=n”_É“¥Çò+y²ô¸Q~%O–7ʯäÉÒãÆe~宨ÇÇðáòÝøU’23ó1a¼~S§fÁÞ¾îïJR•Í›¯bݺKXºtfÌèÍu8„àÕ«,ìÝ럂&Mh‡Èêrss“™w*«ŠE–â”'²ô¸Q~%O–7ʯäÉÒãFù•å XPP}Úáï¿= ¢"w«åRPÐK º °k×D Ú‘ãˆêc ?ýäƒÿ}ˆÃ‡©¸¬9xð6~ùå_(++aÐ lÝê uõ†ÙvoîÜcxð þþ‹ìc@!„Bˆ {$wÕ‹èhÑò¹ââ¬]{‰ëp¤&$$;Ñ«—-šêÙË—PVV‚²²–-;¢¢R®CªË–Á‰°wï*4É C¢Ùg—.=Ř1;›[ÄqTõïéÓ$œ<ù?ÿ<˜ M„B!„È(¹«`ÄĤ‚1€ÇâèÑ;xþ\v–9IÊ‹ÉøúëpuµÁ¶mã©ÐTÏâã3 ªª ¡!33[·^ç:$©ûã_:ˆ;& o_;®Ã!•°³3ÿ_ âñã—2d’“³9Œªþ­Xዎ[7˜‡„B!„È#¹ªb0Æ””%þ\YY ‹û@ÎVV)>>cÇî@çÎfؾ}>Àç ±uë5$$dr•ôlÙr »vÝÄß{bÐ ®Ã!Ñ´i#4könÙ0Ÿ/ÀË—™øâ‹ Oæ0²úsõêsFâ×_¿„’,5­"„B!„”#W•Œääðxñç|¾èÝý3gc›úäälŒ· ¦¦Í°oßd¨©©pRƒ™ à]“1ÀËë‡IÏ¡C·±víE¬\ù?|ùe'®Ã!Ÿ`kk\îsO€¬¬B ²wîDsUýàó…X¹ò<v”»Æõ„B!„44rUlzù²²Ù%¢¾:yyÅõ$egÂÓs7´´Ôàí=ZZê\‡Ô`ÅÇg”ûœÏâúõ0\»ÆQDÒqæÌc,Yr ?ÿ<&8s©†öí+ô)âó(.æáë¯wâܹŽ"“¾þ¹‡¸¸txy á:B!„BÈ'ÈU±)66­Bÿ"ÆrrаqãEUwEE¥ðôÜ¢"þùç;èêjrRƒ•—W\iÓeexyDi)Ÿƒ¨$Ïß?sçôin˜5«/×áj²±1/ñ|ŸP(„@ Àw߯ž=þD&]ùù%øóÏ˘8±'Ú´iÁu8„B!„O«bS||&TT*öéàóس碣Ó8ˆªnx<&N܇ää;6-[êpRƒöᬦ2¯_gc÷nù!ÿøñKL™²ÇwÆÒ¥Ã¸‡Ô€­­q¥Å&@´Ü“1†_=£p½ì¶m»Ž’>æÏÀu(„B!„j³bS:øüÊ_h)))á—_þ­çˆê†1†ùóÿAhhŽý–Þ±—qqém<,±aÃHIÉ©ç¨$çÅ‹dxz«56løšš,Ëkkƒjåìðá;ðõUŒ%uÉÉ¢"ïœ9ý §§ýé „B!„pN®ŠM) +·žÏàöíh\¾ü´ž£ª½Õ«/À×7{÷N)·­9áÎË—™U6f„X¾ül=F$9ùðôÜ ss}ìÜ9¡Â’T"û´µ5``ФÒï)+‹ŠPݺ™ãÊ•…6L1¾¯[w -Z4Æ7߸q !„B!¤šäêÕfRRV•ßg ˜2e?JJd¿¯Î¡C·±mÛ lÜ8..V\‡CÞŠ‹Ëøè2%@´ìñìÙ`Ü»SQÕ]QQ)&MÚ U:ô 45Õ¸‰ÔRûöÆ(?¹I JJJ05moïé8sf6Ú·7á*<‰zþü||âçŸWhŒN!„B‘]rSlJKËCq1¯Â×UT”ß›‰"šõ$ë…€+Wž‰w9² ×á÷DF¦T(6))êêªå^à_½ú¼ž#«=@ˆï¾;‚—/3qìØt4oÞ˜ëHØÚAUUtÍSQQFóæ`a¡ÎÍàînËqt’õûïçàèhŠ/¿TŒYZ„B!„4róVñË—å7+))¡Y³FÐÓÓ†§§3Z¡}ûVhÜXƒ£«çñã—øî»#ðôìA»€É Ç_˜tuµ ¦¦Œ¯¾ê†®]ÍáàÐ FFM9޲f–,9…€€Høø|O}Á€1x<TUU0sfÌšÕ—/?Åüùÿ`ñâA05mÆuˆqýú DâôéÙÔ[ŒB!„9#7Ŧ‚‚ Ö ;›ÁÑÑöö&8u*+VœÃÔ©®rÑ&1ñ &NÜ WWküñÇH®Ã!àñèׯllŒðÙgmààÐ jèÐa)œœ,п¿=×!ÖØÖ­×qôè]ìÛ7;›q‘€víŒñõ×NX¸ð ‹ Ÿ_~ÙëÖ]ÂÎ~X¹òGXwüqƒ9ÀÉÉœëp!„B!5¤Ääxìððdôé³—.-€££)×áT)7·#Flªª Μ™ --u®C"ÕÔ«× Ð^^C¸¥FN ÂìÙÞXµê˜8±'×á);p +VœÃƒËТ…|/•…ùóÿÁÌ™}¨ÐÔ@Œë„Æ5°w¯?סÔIAA þüóÆw¦B!„B!rJ®‹MJJJèÚµ-<íbÓ￟C``öî,wý~ˆ¨ØšXiƒzY›Žo¾Ù>}ìðóσ¹‡ÔMM5|óM/<=wÃÒÒÛ·§ÆÊ ̤I=ÁÑ#w¸¥VRSs°sçMÌ™ÓÍšis!„B!¤–ä¾ØÔ­›923óÆu(&MÚ‹NZcùò\‡CdÌìÙýðæM¼½ïrJ•þïÿ ::^^C¸…B!„"! QlÒÐPE—.m8-äæá›o sçÖøåzѤˆzô°Äƒ±àó¹ïÛÄã ðí·¡¤¤„]»&BMM…눌14l‚ñã±eËuó¸§R%X¿þÆï ‹–\‡C!„B‘…(6àtÖ c 3gAI ;wN„ŠŠÂ<¬ä!$]ÃIDAT=ÎΖÈÏ/Á“'‰\‡‚¥KOáÉ“D80•vž#5kV_äæáСÛ\‡R©;ýPXXŠ p !„B!D‚¦*âìl‰W¯²ðòef½Ÿ{Æ+¸u+{öL¢þ ÌÊÊ-[êàî]n—Ò>|GŽÜÅß{ÂÎΈÓXˆlÓ××ÁäÉ.ضí: K¹§œÔÔ\ìØá‡Ù³ûÑu“B!„£0ŦÎÍ ©©†;wê·ó/°q£h'°ÎÍêõܤþõèÁmߦ;w¢±té)üðÃç8°gqùñý÷}P\ÌÃ\‡RÎÚµ¡§§iÓzq !„B!D¦ؤ®®ŠÏ>kƒ;wbêíœIIY˜9ó(FîJ;5Î΢¾M<ž ÞωéÓaÀ€ö˜?Ÿ–‘êiÖLS§ºaûv?äåsÑ.Š>>±xñ hh¨r!„B!D¦Ø..Öõ6ëD bÖ¬£02j‚Õ«GÕË9 ÷œ-QXXŠ'Oêõ¼EE¥˜:õZ¶ÔÅ–-ã ¤¤T¯ç'òmÆŒÞØ»÷סV¬8{{ŒÙ…ëP!„B!R PÅ&gg $'g#66]êçÚ´é*žØØ¡I“FR]J'1sæQ0lÛ6** ÷«J8 ¦¦‚Å‹áôé „…½®×sïØá‡ÂÂ,XðE½ž—B!„Rÿîl—.m ¢¢,ñÙMññðò:‰3zÃÕÕZ¢Ç&òEYY ]»¶ÁƒqR;ǦMWpûvö완fÍ´¥vÒð âS¬\é[oçLKËÃÎ~˜9³/Z´ B=!„B!ŠNáŠMkÀÞÞD¢MÂy<¾ÿþ,,ZbñâÁ;.‘_NNÒk~ãÆ lØp+VŒDÇŽ­¥rÒp)))á—_†ÀÏ/QõrÎuë.¢I-|ûm¯z9!„B!„[ WlÊ ’+6­_ ‘‘)ضÍjj*;.‘_ݺ™#--qqé=nBB&fÍ:ŠÑ£?Ä Î=6!e\\¬Ð»·-V¯>ƘTÏžŒÿû¿X¼x045Õ¤z.B!„BˆlPÈbS·nmžŒÜÜâ:ëÑ£8lß~+VŒ€…EK DGAÇŽ­¡¡¡*Ñ¥t¥¥|L›vÆÆM±zõ(‰—Êxy Á“'‰¸p!TªçY±âÚµ3ÆÈ‘]¤zB!„BˆìPÐb“9!‚ƒ_Öé8%%|,Xp½{ÛbìØîŠŽ(55têd&ÑbÓòågŸ½{'CKK]bÇ%¤2öö&1¢ V­:ÒR¾TÎ ?¿p,]: ÊÊ´{'!„B! …B›ôõu`b¢‡„:gýúKHIÉÁÚµ£%Q$ŽŽ¦ M”ȱ.^ ÅX·n Ú´i!‘cò)‹BJJ”ø±…B†ß~;‹þýíáâb%ñãB!„Bd—B›Q!àÉ“ÚBC±{÷M,]: &&zŒŒ(ŠNZ#""Åż:'!! ÇøñÎøòËNŠŽO31ÑÃôé½±qãdeHôØ>>•/¯!=.!„B!Dö)l±©cÇÖµžÙÄã 0þ?pr2‡§g GF…ƒƒ)ø|!ž?Uëcðx̘q­Zéaùòጎê™9³/45Uñ×_ÿIì˜EE¥X»ö"ÆëkkC‰—B!„"¶ØäàÐ ))9ÈÈȯñÏnÙr/_fbýú¯ ¤D}FHåÚ´i]]M<}ZûbÓÊ•¾ˆŠJÅÎi§.‰Æ5ðãqäÈÄĤIä˜;wÞDAA ~øá ‰B!„"_¶ØdccˆˆH©ÑϽx‘Œ-[®añâÁÔ;‡|’­­1""’kõ³W®<Þ=·°fÍ(XZÒN‡„;_íKË–X±Â·ÎÇJKËÃŽ7ðý÷} ¯¯#è!„B!òFa‹MºhÚ´"#«_àó…˜?ÿ88˜bÊW)FG…a šðêUæÍûcÆtÅÿþ÷™"#¤úTT”ñë¯_âÊ•g ŒªÓ±þüótt´ðí·½$!„B!DÞ(1ÆXun8fÌiÇ"q¡¡úhܸææ9Õº}F†"#õЩS:´´êÖôYæÌ™®ÃªÀÀ@lÙ²…ë0ª-9¹1uЭ[Íf7EEé!/O;¦AY¹Z¿‚õêĉ\‡ Päåúùüys()íÚeÖêçy"ytý”=4Þ !„B‘…íÙD!„B!„Bê›!„B!„BˆÄP±‰B!„B!„H ›!„B!„BˆÄP±‰B!„B!„HŒB›òòò°fÍšjß>;;ÁÁÁxóæ£"Ѝ¦c­Lbb"ÒÓÓ¥!uS›1¤¤¤ _ÏÏÏÇãÇéÚJ!„BH£Å¦œœüöÛoÕºí† `ff†)S¦ÀÌÌ ›7o–npD¡Ôd¬•ÉÌÌD÷îÝqöìYéEHÔfL¯_¿;wî,÷µ+W®ÀÔÔãÇGëÖ­±{÷n FI!„B‘e Ylª®   üöÛo¸ÿ>‚ƒƒqÿþ}üú믈‰‰á:4¢À¦L™‚ŒŒ ®Ã ¤Î.\¸€É“'cýúõå¾Îãñ0iÒ$lܸÏŸ?ÇÕ«W1wî\$''s)!„B!¤>I­Ø´dÉèëëCCCîîîå–XüóÏ?°´´„ªª*ŒŒŒÄ/T233ѯ_?lذÆÆÆÐ××Çþýû±páBèëëÃÈÈÇ`Ö¬Y˜;w.tuuahhˆ 6TËÓ§OѳgOhjjÂÚÚÇŽ\¿~½{÷†­­- ]»vèׯΟ?_éq®]»{{{¨««£sçÎxôèÑ'c©Iœ¤väa¬•Ù¶mcèÑ£G•÷‰ÆZÃ&OcÚÑÑå¾öàÁc„ €=z C‡¸téR¥ç ñN!„Bˆ‚aÕ€y{{Wë¶—/_fÆÆÆ,**Šåææ²aƱ3f0ÆËÍÍeìôéÓ¬¸¸˜ùûû3eee–––Æ’““™²²2[ºt) …lûöí [³f  …lݺuÌÒÒ’1Ƙ¯¯/SUUeóæÍc,005iÒ„]¸p%&&2 ÆcùùùÌÈȈmݺ•³ëׯ3]]]vûöm¶yófÖ­[·r±÷îݛ͙3§Â}JLLd:::ìôéÓ¬°°ýñÇÌÌÌŒ …Â*c©ê{5Q“Ç_žy{{³ K¹kŒ1öôéSÖ¶m[–žžÎzõêÅöìÙSé}âr¬Õôñ'Õ£ˆ×Ï÷yxx0///ñçû÷ïgNNNån3a¶xñâ ÷—Æ;!„B! ç¡Tf6JJJ ££ƒcÇŽaõêÕõÿoïnB¢þö8ŽGMÅÉH|Hm*5H{¤(K“ÆŠþ„X…F´ ÂÀ ‰ZY.‰6I«HI†R¢E´¸ÅX]S.Ú)f*%˜%M-òÜEø£ÉÐÑëÜ}¿`çwÎÌï;ãÇÌ—™3aaòx<***Rxx¸V¬X¡ÐÐP K’FGGUQQ!›Í¦‚‚Ùív>}ÚùòÅ:Odd¤ªªª©Í›7ëøñãº~ýºO-wïÞUbb¢ÊÊÊ®mÛ¶éÈ‘#r»ÝÚ»w¯ž?®ÊÊJµ´´èìÙ³òx<úþýû¸çÔÐРüü|)""BgΜѱcÇäõz'­ÅŸ:1=Á’5¯×«’’]½zU±±±>'²6¿K¦'222¢¨¨(ŸcQQQ>çCÞ€¹' ͦݻw«¸¸X999r:*//×ÐÐ$)<<\OŸ>ÕÎ;•ššª={öhttÔçþcoRl6›ÂÃÃe·Û­ñ¯V¬X¡°°0k¼zõjõõõù¬éííÕË—/µlÙ2ëvóæM}úôIÉÉÉjnnV{{»Nž<©ÐÐPø»}û¶\.פµøS'¦'X²véÒ% êĉ’¤îîn ippP×®]óy²6¿K¦'’––6î‡zzz´qãÆqkÉ;0÷ä“MUUUÊÏÏ—Ýn׆ tøða½}ûV’400 ŒŒ åææ*$$D---úüùó´Î300`ý|üÈȈjkkUPP೦  @<Ћ/$I_¿~Uvv¶õæÍ9NõööJ’<:;;õÏ?ÿH’šššÔÙÙ)IÚ¾}»îܹc½)züø±:¤Ikñ§NLO°d­²²R­­­Ö-;;[çÏŸ·Md c‚%ÓÙ´i“FGGuÿþ}I?M­­­\[€ùÂßÝ4… nûûûÍÒ¥KÍš5kŒËå2 .4µµµÆcúúúL\\œÉËË3f×®]&55ÕšwïÞùlÖÚÕÕe¢¢¢¬q{{»‰7ÆüÜàÖétšÌÌL“››kÍÖ­[×ëõÙàÖcª««Ãá0.—Ë$%%™ýû÷›?~cŒ)//7‹-2yyy&&&Æ444X÷s:æÂ… Ö¸¼¼ÜÄÆÆ—Ëe‡¹råʤµL47SyýƒÙT7ì ¦¬ýê÷ ÂgKÖØ090æêõsÌï„cŒÛí6‹/6………&>>ÞTWW[sä˜Óþ¯Ñ%''ëÕ«WÖÏ_¯[·Nqqq’¤””uuuéÉ“'Š‹‹ÓÚµkÕß߯žž%$$Èc=NZZšFFF¬qVV–Þ¿occcåñxôèÑ#-X°@ëׯ—ÍfSrr²µÉ®$:uJгgÏ”””¤ÌÌLk®¦¦FGU¿²²²oÍ}âé×µeeezýúµV­Z¥”””Ik™lÿ›`ÊÚ¯š››}Æd c‚1Ó7nÜw¬¸¸X[¶lQGG‡jjj´|ùrk޼s[@šMÒÏlsssÿ8çp8|¾ê’’âóæb*”——7麤¤$%%%ýq.##C~/==]éééS®Åß:1uÁ”µ© kó×\ÉtBB‚üZKÞ€¹# {6ý?8¥¥¥ýí2$M\ËlªÓ3›þ†d 3!X²BÞ€àd3¿~ïb¢…6›êêêTRRèšðóåõ¯¯¯Wii©üŒ%f¯`Ì—ÿß`CÞ€€h ÚO6`ö¡Ù€C³ 3†ff Í&ÌšM˜14›0cìSYìv»¨Z‹ÛíþÛ%ÌK¼îÃõsö!ï@`ØŒ1Ư…6[ kÁ$êêêTRRò·Ë¨úúz•––þí2æ=?/ ð×ÏÙ¼3ªÕïf0‰VölÀŒ¡Ù€C³ 3Æ.é?»Ì ÿú/áK‘¹^*;IEND®B`‚bm3.7.0/doc/html/a00018.html0000644000175000017500000000773011365042651013432 0ustar tlktlk BitMagic: bm::bit_COUNT_B< W > Struct Template Reference

bm::bit_COUNT_B< W > Struct Template Reference

Bit COUNT B functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_B< W >

Bit COUNT B functor.

Definition at line 5176 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_COUNT_B< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5178 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00087_source.html0000644000175000017500000122747411365042627015035 0ustar tlktlk BitMagic: bm.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00095.html0000644000175000017500000000771311365042634013441 0ustar tlktlk BitMagic: bmrandom.h File Reference

bmrandom.h File Reference

#include "bm.h"
#include "bmfunc.h"
#include "bmdef.h"
#include <stdlib.h>
#include <algorithm>
#include "bmundef.h"
Include dependency graph for bmrandom.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::random_subset< BV >

Namespaces

namespace  bm

Generated on Sun Apr 25 09:37:32 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x64.html0000644000175000017500000001566711365042644015424 0ustar tlktlk BitMagic: Data Fields
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x62.html0000644000175000017500000001413411365042644016421 0ustar tlktlk BitMagic: Data Fields - Functions
 

- b -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00046.html0000644000175000017500000002555211365042651013435 0ustar tlktlk BitMagic: bm::copy_to_array_functor< B > Class Template Reference

bm::copy_to_array_functor< B > Class Template Reference

Adaptor to copy 1 bits to array. More...

#include <bmfunc.h>

Public Member Functions

 copy_to_array_functor (B *bits)
B * ptr ()
void operator() (unsigned bit_idx)
void operator() (unsigned bit_idx0, unsigned bit_idx1)
void operator() (unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2)
void operator() (unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2, unsigned bit_idx3)

Detailed Description

template<typename B>
class bm::copy_to_array_functor< B >

Adaptor to copy 1 bits to array.

Definition at line 4582 of file bmfunc.h.


Constructor & Destructor Documentation

template<typename B>
bm::copy_to_array_functor< B >::copy_to_array_functor ( B *  bits  )  [inline]

Definition at line 4585 of file bmfunc.h.


Member Function Documentation

template<typename B>
void bm::copy_to_array_functor< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1,
unsigned  bit_idx2,
unsigned  bit_idx3 
) [inline]

Definition at line 4607 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1,
unsigned  bit_idx2 
) [inline]

Definition at line 4599 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1 
) [inline]

Definition at line 4592 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor< B >::operator() ( unsigned  bit_idx  )  [inline]

Definition at line 4590 of file bmfunc.h.

template<typename B>
B* bm::copy_to_array_functor< B >::ptr (  )  [inline]

Definition at line 4588 of file bmfunc.h.

Referenced by bm::bit_list(), and bm::bit_list_4().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00183.md50000644000175000017500000000004011365042645013144 0ustar tlktlk619afa7916a7a1c5040920faf478c4dabm3.7.0/doc/html/a00193.png0000644000175000017500000000316311365042645013255 0ustar tlktlk‰PNG  IHDR“(úèÈ£bKGDÿÿÿ ½§“(IDATxœíœ_HSoÆ÷§•²i5­ÙEÁ¬D ©›‚h]´aƒB¨¨‹®vÓ(°‚ h¤tÕEE°Š¬Ôì¢a5C0B—t#6ÃÌY«CVZÖZpžß…¸ŸKÏÙõ«ßûsñž÷¼ïóÎÃy¿¼—E’&O»îw;ü=ˆ0 4C„I ¥ŽÚÚÚ_éCð‡±yóæqç²” 𬬬)7$øs™ 6ê¸ÏçIqˆ#~ø|>żˆšI "LÍah†“@3D˜š!Â$Ð MÂôâÅ \¾|Y‹©2Öùüù3¼^ï¤æõê.\¸0©9~f¬/-<þ§¡èóù”ºhlläŠ+Rºv2¨é„ÃašL¦IÍXZZ:©9~f¬/-<&cçÎìé陲ù}>bÓ&–¹¿Œ{÷îappð·hk&Y–±k×.X,àĉ€8Nœ:u ………ÈÏÏÇÅ‹qàÀäççÃf³áúõëñyª««±}ûvŶ’ÎÏ477£¬¬ &“ ÅÅÅhhhˆ÷Ý¿¥¥¥˜6m–/_ŽöööqãIbÿþýسgÈäŸ|]»v EEE0 °Ùl¨®®N:&SJZ•••$ •••hiiQÕ$ ååå¸rå òòòÐÙÙ™ÔoR”^gHs™ËÊÊâ¾}û8<<Ì––æææ²¶¶–‘H„:ŽGŽ¡,Ë<{ö,ÐëõR–ežeYŽ/s²,ÓãñpÍš5üòåKÒû¢Édb]]£Ñ(=zDNGI’—¹L=ªi}üø‘6›@€±X,©ÆŒ3èv»ÙÚÚÊïß¿§ô¬Õ–9ÍÂ4sæLÆb±ø¹ªª*ºÝnF"ˆ?”P(DƒÁÀ?~$Ÿ>}Ê9sæLZgìƒ:wîGÂØM›6ñرc¬©©á† âçc±½^/‡‡‡XRRBÇC«ÕšRH22 ÆÛ£^º»»Ô©G5-’œ7o;::’j„ÃaàëׯSºÇQ~IÍd·Ûa4ãí%K– ‰ÄÛ999F¾F0™L0 ñ¶–:ÐßßE‹%œ[¼x1Âá0z{{úŒF#<ˆììl@gg'Þ¼yhllLÉ“ÉdB0Dyy9ìv;Ün7dYV“©Çt´Ô4@§Ó¡°°0¥{LÍÂôþýû„¶$I˜5k–VÓ§¥c±XÆ]700€ÜÜ\˜Íf|úô)¡ïöíÛñ¢uÁ‚¸yó&jjj°wïÞq×ND}}=ªªªpøða„B!´µµÅéD¦ÓÑRÓ´ÿÌH³0õööâîÝ»FöSΟ?õë×§=O0„ßïWl§¢ãr¹ÐÔÔ„žžÀ»wïpëÖ-8N¸\.ܹs’$žS&Õ´HrÙ²e\µjÛÛÛU5Âá0õz½ê}MÄ”à£|ûö>L(§‚Tu^¾|I¿ßÏçÏŸë …BôûýìëëÓÄÓàà ›ššøìÙ3’#½¹¹9é¸L<ªiI’D¿ßÏ>¤¤‘.jaRýl×çóaË–-SóJüƒˆD"xðàbÿÒ¥KQVVö ý>®^½Š­[·N´÷Ö®ø‚1°Z­ŠýÉŠíÿ "L)`µZ±nݺßmã?øÛœ@3D˜š!Â$Ð &fˆ0 4C„I "LÍ?\!Ȉ´vÀoܸ1µnŠo& MÄoZ ´C„I "LÍøžÉÙ2Íkš IEND®B`‚bm3.7.0/doc/html/a00142.md50000644000175000017500000000004011365042634013135 0ustar tlktlk7ef096d26b80691104e9eb492c5f9941bm3.7.0/doc/html/a00131.png0000644000175000017500000000666511365042631013252 0ustar tlktlk‰PNG  IHDRkuIcçbKGDÿÿÿ ½§“ jIDATxœíPTåþÇßûÛ‹°ÀÜ –_«^.b¥8@üŠ J+tÆIȰñŽ5#5:BM“Í@“¤ ßk05ÞYD)— ¥ÚIñ’ü°„P¸SüX¡XýÜ?¸í·û«gç¼fÎç<ÏóÞóâ<çìÙ³ûðˆˆÀÁM|G'àX:œ,†àd1„Ð’?nllDoo¯µ²8=QQQ \ydééé€[–¸(•JKv÷U‹Ž,HJJBNNŽ¥Í8= …Ââ6¸sCp²‚“Åœ,†àd1'‹!ì*ëÖ­[P«Õ6íC¯×£¬¬Ìªm (•J«¶¹ì*«··UUU6ícbbŸ~ú©UÛÔëõ(--µj›+Ââ;Ë…ˆpòäI¨ÕjˆÅbìÚµ {öìN§Cnn.¢££qæÌLOO###ÝÝݨ©©@ Àðä“O4 JKK100¤¦¦b÷îÝsúkhh@QQîÞ½ …BwwwlÚ´ QQQ¸víNž<‰ÞÞ^Èd2ddd 66vÁìçÏŸÇ©S§0:: …B·Þz <ÏfûêØýȺyó&Î;‡÷Þ{§OŸFmm-¦§§ÑÚÚŠññqTTT`ß¾}ÈÏχ‡‡T*RSSMC‘^¯ÇñãÇñÚk¯A­VãÝwßEII FFFÌúêïïDZcÇpðàATUUÁßßÐétFvv6RSSqáÂdddàèÑ£èëë›7·ÑhÄ7 T*QZZŠºº:\»vÍæûë÷Ø]–««+öï߉D‚7bçÎÐh4fº_|<HKK3­ëõz€H$ÂG}„¸¸8ˆD"Èd2…BLLL˜õ¥Ñh°eËÄÄÄ@,#==žžž€úúzcÛ¶m‰DˆEtt4¾ýöÛ³¿òÊ+ …ðõõÅš5kæôgkì> úúúB(üÿn×®]‹––ÓúªU«<"‘À´þ"‘7oÞDII nݺ©TŠùžN@@@€iÇãA&“†††ÌÊ ƒƒƒóææóùððð0kËÞØ]Öèè¨ÙúÈÈÜÜÜ–ÕF}}=>þøcäææ"<<|>)))s깸¸@§Ó™m3•ýüóÏfe:«W¯^V{b÷ap``W®\0{ªBttô²Ú‚\.Ç#<>ŸöövÓù{"""P__o:—µ··£§§<[¶lASSúûûÃÃøté"""ÌþCüQ¦£±û‘†ââb”——C«Õ"$$)))sŽ€ÅˆÅ©S§™™ ‘H¡P™L†ââbdee™êEEEáñÇǾ}ûƒÁ€   …B#-- û÷ïGhh(:;;¡P( (**ÂsÏ=‡µk×Z}¬ž%¢íÙ³wîÜYö‡÷ïßG{{;\]]²¢¾õz=:::àéé‰uëÖappýýýxôÑGMuFFF0::Š™™èt:„‡‡cïÞ½ÈÉÉAXX€Ù#]«ÕÂÇÇþþþ+ʲ ”J%ÒÓÓWÚD“Ý,‹ÅØ´i“Em¸¸¸˜†,ðöö†···Y¡¡!¼ñÆÈÍÍ…\.Guu5fff°~ýzSøøøX”Å^8D–½ ÁáÇ¡T*166???äçç›]²›©—A\\âââÃ*p÷‚“Åœ,†àd1'‹!œRÖä䌣#ا“5=mÄÙ³ŽŽa,~Ÿ¥ÑhLŸGýøË_þ­øä“×A4íè8VÅ¢{ƒƯüœ8q?ý4†}ûþ†Çû«£ã˜aáW~š,’õgc||áá9¸[·†ã“O^qt$kâ\ß)V«¯cjjöâB£éÀؘÁÁ‰¬‹SÉú쳫¦ÛF#.\øÁÁ‰¬‹ÓȺ{w—/ÿF£Ñ´­¢¢É‰¬ÓȪ®6,Ìh$üûßÿÁàà˜ƒY§‘UQquÎN|>ÕÕ­Jd}œB–V;ŒÖÖ^沌FÂgŸ9ÏP貪ªZ!Ì}ŽÏh$üðƒ==¿: •õq YgÏ^ÅÌŒqÞ2¡‡ÊÊ–yËXƒyYèìÀBoí§¦WíÊF0/«²²"‘`‘„Ÿ~BGG¿Ý2Ù æeýóŸ_™îZ,†JÕl‡4¶…é§›îÜŶma0LÁÍmö ·n £¥¥Û·?fª7<<éiö?ãrª¹ RµàÀáöíÿstkã\7rNCp²‚“Åœ,†àd1'‹!8Y ÁÉbNCp²‚“Åœ,†àd1'‹!8Y ÁÉbNCp²‚“Åœ,†àd1'‹!8Y ÁÉbNCp²‚“Åœ,†àd1'‹!8Y,A@©Tf±Ø—<=ŸsxK—y¸ºà×TÏž=»P#üÃÑVDYY*++ç-[PVjjªÍq,ÌÔÔÔ‚²¸sCp²‚“Åœ,†àd1ó²ÆÆÆ——·äú###hmmÅÝ»wm˜Ê60/kttGŽYRÝÂÂBÈår¼üòËËå8qâ„mÃY¦»i9477ãÈ‘#øî»ïŠü111HIIAPP£ã- «Y999ðòò‚D"B¡€V«5•>}ÁÁÁ¦éißÿ}À¯¿þŠäädÂ××^^^(--Å›o¾ ///Èd2”——êêêpðàAdffB*•ÂÇÇ………óf¹~ý:bcc±jÕ*¬_¿eeef§áHLLDhh(€Ù)x“““ñå—_ÎÛÎ7ß|ƒ 6@,cóæÍhjjz`–åä\ Ý\*jµš|}}©««‹t:íØ±ƒ^}õU""Òét$‘HH¥R‘Á` ÚÚZâóù488HýýýÄçóéwÞ!£ÑHÅÅÅ€òòòÈh4R~~>Quu5 …BÊÊÊ¢‰‰ ª¯¯'www:þ<õõõ‘D"!"¢ññq’ÉdTTTDƒ4 I¥Rº|ù28q‚"##Ͳ'&&Ò¡C‡æ¼¦¾¾>rss#•JEz½žŽ;Fr¹œŒFã¢Y+[*‹ìÿ«˪¬¬$___jkk#¢Ù6<>NDD$ ijjŠˆˆZZZèá‡&¢YYR©”&''MmeggÓ /¼`&«¼¼œ6oÞl–ïСC”••E}}}äêêJ¹¹¹ÔÐÐ@o¿ý6‰ÅbÊÈȘóš>øàÚ¾}»iýþýû”——G‹fY¬l©,&Ëâa0%%»víBLL är92331<< H$hnnÆÖ­[„;wšýH>Ó\ö<‰Ä4-ío3üƺuë ‹Mëááás&­éîîÆ7°fÍÓR^^Ž‘‘øûûãâÅ‹hmmÅ믿‘H„Ý»wÃÃÃcÎkêîî6›ËX$áðáÃpqqy`–¥ä\)_` PPP€––|øá‡xþùçÑÒÒ‚ÊÊJdggãóÏ?GLL Á¼;g)üòË/fëCCCpss3Û&•JµZmÚvïÞ=ðx< øûûC¥R™ÊbbbðôÓOÏéËÍÍ ƒƒƒfÛÎ;‡¤¤¤fYJΕbñ‘uüøq$&&B("22{÷îÅíÛ·Z­aaaˆ‡@ À•+W ÓéVÔV«Å_|GII ’““Íê$''£®®³“éõzDDD@¥R¡§§r¹ÝÝÝ€††´µµáÙgŸTVV¢­­ ðÔSO¡ªªÊ$¬±±/½ôÁ³,%çŠYƘ9/}}}H7n¤¤¤$rww§’’""êíí%oooJHH äädzæ™g(((ˆvìØa:gýFWW­^½Ú´ÞÚÚjvÎ’Ëå´aÊ'™LFO<ñÝ»wÏìœEDTPP@R©”’’’ÈÏÏRSSiff†ˆˆ233ÉÓÓ“ÈÃÃΜ9cú;¹\NG5­gffÒC=DIII$•J©¨¨èY+[*6½À š½¸té}õÕWtçγ²ÑÑQúúë¯éûï¿'¢Y/^\VûÕÕÕA“““T[[Kd4¬¯Õj©¦¦ÆtÑó{ÚÛÛI­VÓÀÀÀûíì줚šêíí]R–åæœÅdYåM±D"A||ü¼eR©Ôl@@@ÀŠú‹ÅHHHx`=???øùùÍ[†°°°%õ‚egYjÎåÂÄí&©TŠàà`Gǰx›ç\ÆaÈalú>‹Ã~p²‚“Åœ,†àd1'‹!8Y ±àŒ´´4{æàø –Í‘È=çî@Û÷N7–ÃÍŸÅœ,†àd1ļöñyÙÏŸ_IEND®B`‚bm3.7.0/doc/html/namespacemembers_func_0x73.html0000644000175000017500000001402111365042652017714 0ustar tlktlk BitMagic: Data Fields
 

- s -

  • serialize() : bm
  • set_bit() : bm
  • set_gap_level() : bm
  • setop2op() : bm
  • sse2_and() : bm
  • sse2_and_arr() : bm
  • sse2_andnot_arr_2_mask() : bm
  • sse2_bit_block_calc_count_change() : bm
  • sse2_bit_count() : bm
  • sse2_bit_count_op() : bm
  • sse2_copy_block() : bm
  • sse2_invert_arr() : bm
  • sse2_or() : bm
  • sse2_or_arr() : bm
  • sse2_set_block() : bm
  • sse2_sub() : bm
  • sse2_sub_arr() : bm
  • sse2_xor() : bm
  • sse2_xor_arr() : bm
  • sse2_xor_arr_2_mask() : bm
  • sse4_bit_block_calc_count_change() : bm
  • sse4_bit_count() : bm
  • sse4_bit_count_op() : bm
  • sub_bit_block() : bm
  • sub_op() : bm
  • sum_arr() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00113_source.html0000644000175000017500000004213411365042630015000 0ustar tlktlk BitMagic: sample8.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00170.png0000644000175000017500000000473311365042644013253 0ustar tlktlk‰PNG  IHDR¥(Ÿ:ÜbKGDÿÿÿ ½§“ IDATxœíœyHTÝÇ¿“NÙb:–VX¹`cå$c‹¦Ôk¦$¤T&T–&””•KTdPP‰•ŒcÙb¤¤iš-j¡M-Žjii›-3Í<ïáýuÇ›±©†÷w>pÿ8ÏyÎyι|çžçž{ç ˆˆÀ`Xýþö }˜(V%Ãê°Õ7<þ7nÜøcaüâêê ™LÆ7’r¹œ°ƒ䈊ŠÒ— õ¸RvÃnÊ¿›èèhƒv–S2¬&J†ÕÁDɰ:˜(V%Ãê`¢dX¿,ʧOŸâèÑ£Jßãtvvb×®]¿ÔÿÕ«W‘––†/^¬/))ABB–-[†ÔÔTƒ~?ó9q⪪ªx6F…BøøxÄÄÄ 33ííí\=!--ÍàÜÜ\ܾ}Û칞={'OžäÙ***°oß>žíáÇÈÈÈ€V«5;ƯðË¢|ôè:d‰±ô9λwÕccc¡R©Ìê?99)))¼~~¬[ºt)àïïÆÆFH$Ü»wÏ,ŸÜÜ\”••qåÖÖVøúú"55pssÃùóçáéé‰úúz€V«ÅæÍ›‰®®.Þ¸rrrPWWgÖ<àñãÇØ¸q#Ï–žžŽ„„´´´p¶üü|( ØØØ˜ã—0öDÇTΟ?O2™Ìdÿ¾bNœQ£F‘R©4¹ïgÏžQ¿~ý())‰ÜÝÝyu_¾|¡þýûSUUϾbÅ Zºt©É>DDááᔜœÌ•ÃÂÂ(,,ŒÔj5¯ÝªU«hÒ¤IDD¤Ñh¹»»SBBÏoæÌ™”mò<»¹qã ––""êêꢗ—åääp~³gϦիW›Ý¿©DEE|¢c‘œR§ÓaÍš52d†Ž;vÞ¼yƒÙ³g#33#GŽ„““Ž9‚ÄÄD899ÁÅÅùùù\?»wïÆ’%KŒ–ÅyõêæÍ›ˆŒŒD[["##qõêU“ÆŸ——‡©S§bÆ hllä]}¾}ûµZ÷ïßóÚ$%%!..Îd}ž>}Š’’þŒÊÊJ@VVÄb1²²²àïïoÒøår9/^ ±XŒàà`( ®ÎÎα±±ˆˆˆÀÂ… qøða¨T*Œ;Ó¦M3ÙGŸÚÚZ¸¹¹ÁÕÕµGX,FLL lmÿ÷ØÝÝ›6mBll,4M¯óillDbb"&Nœh°ÞÆÆœ(/^¼ˆþù¡¡¡(//‡V«Åýû÷ñáÃÌœ9³GûââbL™2ÇŽû=Õ¿töeù6lo JNN¦ Pkk+ ?QCCÙÚÚ’F£!"¢[·nш#~9ŽJ¥";;;ÎnÎò}çÎêß¿?uttQvv65Š´Z-ç£Ó騢¢‚Ö­[G‰„I¥Rº{÷®Y>?.߇"©TÊˬY³x/+ÔÔÔpË·J¥"µZM‰„ÒÒÒˆˆ¿|ët:ºpá…‡‡“§§'íÙ³‡Þ¼yctÞ{÷î%???""òòò¢òòrÒétäääDÕÕÕtðàA.…0Dmm--^¼˜FM7n¤çÏŸ›t¾ä·.ßãÆã-A&L@kk+W¶³³ˆD"î ,§/Èårüüüàææ†mÛ¶¡¹¹™»K&"èt:#33wïÞ…J¥‚³³3æÏŸ"2ÉGggg¨T*èt:ÎvîÜ9tvv¢³³cÇŽíÑF(";;hhhàì×®]ƒ··7>Œµk×âÁƒX¿~=ŒÎ;88J¥ hjjÂŒ3 ‚ÒÒRÔÔÔ\º»‘Éd8~ü8”J%Œ   DDD˜rÊŠEDùúõk^¹­­­×b-qˆ …©©©(**BQQÊÊÊ„¼¼<@aa!|||xíÆŒƒŒŒ 455áãÇ&ùè€OŸ>¡¸¸˜³ÙÙÙÁÞÞŸ>}2º5%“É‹¸¸8NìB¡"‘íííèèèà墯ðññ½½=RSS‘H EII ª««{e7Z­D[[[ 4è§þ¦`Q655¡¨¨ðáÃdee!,,Ìì~êëë¹DÛPÙRqº¹rå ^½z…¸¸8xzzrÇ’%Kpúôi¨ÕjàÙ³g¼=R"‚\.‡l’>HLLÄÊ•+¹íàûmÑ¢E½nä§§C¥R¡¦¦Àw¡*•J¤§§ãôéÓpssCJJ š››ö!…BÎ>gÎÔ××C¥R!00ÐhûË—/#22S§NáÚµk8~ü¸Q³Ð_Ïû’SúûûÓøñã)00œiîܹ¤V«¹œ²›'Ožðr?¥RÉË)xÛ>?–{‹£ŸSNž<™¦OŸNuuu½Ž}ùòå4þüö·oß’H$¢ÂÂB""*,,$GGGruu%™LF...äééI÷ïßçژ⣿%¤Õj)))‰„B!yxxT*%:vìEDDôÈ)¤¸¸˜Üjii¡-[¶··w¯ó?pà ;wîðìR©´G¾û#HÜýA_0–S ˆø O^^¢££Í~É÷Ë—/¨©©ÁСCáëëk™_Œ‰qt::;;áèèhoo‡R©„ŸŸ† f‘¸_¿~E}}=Þ¿‘#GB"‘ôȉMñ1DGGnß¾ ‘H„)S¦@$A­VÃÖÖýúõ}1Ójµ¿eãÛRýv¿ä+—Ëyv‹‰ÒimmÅ¥K—ŒÖK$£Û&Œß1Qý;Ä¡P±Xl´~àÀp4 SùO‹R,#44ôoƒa&ìÕ5†ÕÁDɰ:˜(V%Ãê`¢dXL” «ƒ‰’auݧ4÷µ2£/DEEõ°õxÌÈ>Èø“ú`Q2–S2¬&J†ÕÁDɰ:þ7ßJ-#­IEND®B`‚bm3.7.0/doc/html/a00105.html0000644000175000017500000001134711365042637013432 0ustar tlktlk BitMagic: sample1.cpp File Reference

sample1.cpp File Reference

#include <iostream>
#include "bm.h"
Include dependency graph for sample1.cpp:

Go to the source code of this file.

Functions

int main (void)

Function Documentation


Generated on Sun Apr 25 09:37:35 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00180.png0000644000175000017500000000504211365042645013247 0ustar tlktlk‰PNG  IHDR½(«|ûÀbKGDÿÿÿ ½§“ ×IDATxœíœ{LÓׯŸ^°óÖ1²Ê¢ÎG:c½- S§ËÔ,,5» FÿRQ7ãœKÔ¡#nqaF‚Î…¥hÆT2FeÉ–ÁjЄ*Z ˆc+0è³? ߟ¥î°Ÿ=Ÿ¤ ï9ï9ïsÚ·‡÷{¾me$ €¶`¤I/8DÒ eφÚÚZüöÛo£¡E r¦N £ÑèÞÈX­Vñx*‹¥gŠÓc§ïFêþßY»v­×vQÓ ‘ô‚€C$½ àI/8DÒ ‘ô‚€Ãç‘e_©ªªBQQÞÿý!3°8ÍÍÍHMMÅÎ;‡Uƒ/üi©ç§'V«ÕÕÕ^û"""×ëDgg'@&“!88Ë—/Ç‹/¾(ù?~÷ïß—ì±cÇÂd2á•W^q›ËétÂjµâ÷߇L&Ctt4,  Å@–7(½Óß¼yÇŽ -ŽÓÒÒ‚'NHö† |¾àÃ?m#õüôÄápÀf³Áf³ÁjµÂjµJvcccŸæøôÓOQRR›Í†;wîàÔ©SÐëõ())‘|’““qñâEiî‚‚DEE!99Yò±Ùl˜={6Nž<‰éÓ§#$$ü1V¬X1:÷ƒ|Ý‘í+çÏŸ§Ñhì³ÿ@éOœððp–•• ³¢ÿáOÛH=?þX¿~=ׯ_ßïq*•Š………nm+V¬`||¼d ¦¦¦ºù9r„aaa’½råJ¾ýöÛt¹\RÛýû÷Ì3gÎô[W_±X,^ïÈIMïr¹°e˨ÕjLž<‰‰‰€ÆÆF˜Íf|ñŘ2e BCCñÍ7ßàƒ>@hh(4 NŸ>-Í“””„wß}×§í+΃°råJ@\\ìv;âââPXXØ«öóçÏC«ÕbܸqˆÇ‡~ˆüv»¯½öÒÒÒŒŠŠ œ:u :J¥III½jë­ïÚµkˆŽŽÆ3Ï<ƒ™3g"==¼Æ÷F{{{¯kJBBB R©üúDFFÂápx¼ËçääàСCÉd’OXXŽ?Žàà`ñþ¦žï‚ìô2™ŒÛ·oç_ýÅÂÂB>ûì³ÌÈÈ`}}=år9÷ìÙC—ËÅ£G}šóæÍsÓ´eË&$$xÄïÖ—››Ë×_‘‘‘<|ø0{]ç`’~ñâÅ\³f ׬YÃ%K–0<<œçΓ| år9  …4¦ººš$™––ÆÈÈÈ~Çþõ×_ùÎ;ïð…^à®]»X[[Ûï9|%ý Oo@«Õ"((H²gÍš…üü|É?~<€Ç'*• J¥R²‡2N©©©ÁÌ™3%[&“aÆŒ’-—Ë1eÊ€J¥Bii)víÚ…ªª*Lš4 .—«OÚ|õÕÔÔàæÍ›˜>}ºÔçt:±|ùrøEEEظq#ôz=Ûïço ìÛ·¯¾úªd§§§ã½÷ÞƒÃá€\þ¸:NIIÁ† ¼Ž C}}=Hzè½rå êê꼞$FF8¤¦¦bñâÅ0 8sæÌ ×4$Iß]¿uc·Û1iÒ¤¡˜zXãLœ8Ñã$£¹¹YúûÉ);;»wïFff&-Z…BáVúÓæ«O­V#&&?ýô“Ôçt:!“Éàp8ÜâA¥R¡¡¡MMMèììt{# ,@ss3=zäµïÉÂ… ÑÑÑK—.!66Ö­/11ÆïñiWWHB©Tb„ ƒÖ ÑÍ©ššäääþüóO¤¤¤H»U(--E^^žO{¨âtc6›‘††@qq1***¼î 6› z½111P((..Æ£Gú¤ÍWŸÙlFaa!nܸøûï¿1þ|deeyÄ7(++Ù™ N‡½{÷âîÝ»^vv6®^½ê×§µµ>ÄÇa³Ù°ÿ~Ìš5«O jµ›7oÆÆQYY)µçää 77ñññ^Ç ..QQQ ‰¢¢"¤¥¥õ}qþèYï ¤¦_¸p!#""h2™øüóÏsÙ²eìèèjún*++Ýjï²²2·š~ëÖ­nÇ{OÚþâô¬éçÎËèèh–””ôªݺu ¥ÙlfTT ¿ÿþ{ÖÕÕQ¡PH~µµµœ ØÒÒâÓo0kz_I/#Ýo‰¥§§cíÚµOÅ7§êëëý^èvvvbÛ¶møá‡ ×ë‘™™‰¤¤$TUUJ½<ÒìÛ·‹Z­v´¥ Ýßœ²Z­níCr!û_%((!!!>ûµZ-Nž<‰ÄÄD455A§Ó!777 öìÙ3ÚF…§:éCBB°téR¿>xóÍ7GH‘à¿€øh± àI/8DÒ ‘ô‚€C$½ àI/8DÒ Ÿçô#ñ±U`¸±X,mC?Õ-xšðöSÝI/<툚^pˆ¤"éÇ¿ªÉ´œDb IEND®B`‚bm3.7.0/doc/html/a00058.html0000644000175000017500000005423011365042652013434 0ustar tlktlk BitMagic: bm::deserializer< BV, DEC > Class Template Reference

bm::deserializer< BV, DEC > Class Template Reference
[bvector serialization]

Class deserializer. More...

#include <bmserial.h>

Inheritance diagram for bm::deserializer< BV, DEC >:
Collaboration diagram for bm::deserializer< BV, DEC >:

Public Types

typedef BV bvector_type
typedef deseriaizer_base< DEC >
::decoder_type 
decoder_type

Public Member Functions

 deserializer ()
unsigned deserialize (bvector_type &bv, const unsigned char *buf, bm::word_t *temp_block)

Protected Types

typedef BV::blocks_manager_type blocks_manager_type
typedef BV::allocator_type allocator_type

Protected Member Functions

void deserialize_gap (unsigned char btype, decoder_type &dec, bvector_type &bv, blocks_manager_type &bman, unsigned i, bm::word_t *blk)

Protected Attributes

bm::gap_word_t gap_temp_block_ [bm::gap_equiv_len *4]
bm::word_ttemp_block_

Detailed Description

template<class BV, class DEC>
class bm::deserializer< BV, DEC >

Class deserializer.

Definition at line 283 of file bmserial.h.


Member Typedef Documentation

template<class BV, class DEC>
typedef BV::allocator_type bm::deserializer< BV, DEC >::allocator_type [protected]

Definition at line 297 of file bmserial.h.

template<class BV, class DEC>
typedef BV::blocks_manager_type bm::deserializer< BV, DEC >::blocks_manager_type [protected]

Definition at line 296 of file bmserial.h.

template<class BV, class DEC>
typedef BV bm::deserializer< BV, DEC >::bvector_type

Definition at line 286 of file bmserial.h.

template<class BV, class DEC>
typedef deseriaizer_base<DEC>::decoder_type bm::deserializer< BV, DEC >::decoder_type

Reimplemented from bm::deseriaizer_base< DEC >.

Definition at line 287 of file bmserial.h.


Constructor & Destructor Documentation

template<class BV, class DEC>
bm::deserializer< BV, DEC >::deserializer (  )  [inline]

Definition at line 290 of file bmserial.h.


Member Function Documentation


Field Documentation

template<class BV, class DEC>
bm::gap_word_t bm::deserializer< BV, DEC >::gap_temp_block_[bm::gap_equiv_len *4] [protected]

Definition at line 305 of file bmserial.h.

Referenced by bm::deserializer< BV, DEC >::deserialize_gap().

template<class BV, class DEC>
bm::word_t* bm::deserializer< BV, DEC >::temp_block_ [protected]

Definition at line 306 of file bmserial.h.

Referenced by bm::deserializer< BV, DEC >::deserialize().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x63.html0000644000175000017500000001353411365042652016710 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- c -

  • combine_and() : bm
  • combine_and_sorted() : bm
  • combine_any_operation_with_block() : bm
  • combine_count_and_operation_with_block() : bm
  • combine_count_operation_with_block() : bm
  • combine_or() : bm
  • combine_sub() : bm
  • combine_xor() : bm
  • compute_tmatrix_rstat() : bm
  • COUNT_A : bm
  • count_and() : bm
  • COUNT_AND : bm
  • COUNT_B : bm
  • count_intervals() : bm
  • COUNT_OR : bm
  • count_or() : bm
  • count_sub() : bm
  • COUNT_SUB_AB : bm
  • COUNT_SUB_BA : bm
  • COUNT_XOR : bm
  • count_xor() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00022.html0000644000175000017500000001063211365042651013420 0ustar tlktlk BitMagic: bm::bit_count_table< T > Struct Template Reference

bm::bit_count_table< T > Struct Template Reference
[BIT functions]

Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers. More...

#include <bmconst.h>

Static Public Attributes

static const unsigned char _count [256]

Detailed Description

template<bool T>
struct bm::bit_count_table< T >

Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers.

Definition at line 180 of file bmconst.h.


Field Documentation

template<bool T>
const unsigned char bm::bit_count_table< T >::_count [inline, static]
Initial value:
 {
    0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
    3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8
}

Definition at line 182 of file bmconst.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00048.html0000644000175000017500000003556711365042650013445 0ustar tlktlk BitMagic: bm::bvector< Alloc >::counted_enumerator Class Reference

bm::bvector< Alloc >::counted_enumerator Class Reference
[The Main bvector<> Group]

Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit. More...

#include <bm.h>

Inheritance diagram for bm::bvector< Alloc >::counted_enumerator:
Collaboration diagram for bm::bvector< Alloc >::counted_enumerator:

Public Types

typedef std::input_iterator_tag iterator_category

Public Member Functions

 counted_enumerator ()
 counted_enumerator (const enumerator &en)
counted_enumeratoroperator= (const enumerator &en)
counted_enumeratoroperator++ ()
counted_enumerator operator++ (int)
bm::id_t count () const
 Number of bits ON starting from the .

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >::counted_enumerator

Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit.

When increment operator called current position is increased by 1.

Definition at line 731 of file bm.h.


Member Typedef Documentation

template<class Alloc>
typedef std::input_iterator_tag bm::bvector< Alloc >::counted_enumerator::iterator_category

Reimplemented from bm::bvector< Alloc >::enumerator.

Definition at line 735 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::counted_enumerator::counted_enumerator (  )  [inline]

Definition at line 737 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::counted_enumerator::counted_enumerator ( const enumerator en  )  [inline]

Definition at line 739 of file bm.h.

References bm::bvector< Alloc >::iterator_base::valid().


Member Function Documentation

template<class Alloc>
bm::id_t bm::bvector< Alloc >::counted_enumerator::count (  )  const [inline]

Number of bits ON starting from the .

Method returns number of ON bits fromn the bit 0 to the current bit For the first bit in bitvector it is 1, for the second 2

Definition at line 777 of file bm.h.

template<class Alloc>
counted_enumerator bm::bvector< Alloc >::counted_enumerator::operator++ ( int   )  [inline]
template<class Alloc>
counted_enumerator& bm::bvector< Alloc >::counted_enumerator::operator++ (  )  [inline]
template<class Alloc>
counted_enumerator& bm::bvector< Alloc >::counted_enumerator::operator= ( const enumerator en  )  [inline]

Definition at line 746 of file bm.h.

References bm::bvector< Alloc >::iterator_base::valid().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00149.map0000644000175000017500000000032111365042635013237 0ustar tlktlk bm3.7.0/doc/html/a00110.html0000644000175000017500000001224511365042641013417 0ustar tlktlk BitMagic: sample5.cpp File Reference

sample5.cpp File Reference

#include <iostream>
#include <algorithm>
#include "bm.h"
Include dependency graph for sample5.cpp:

Go to the source code of this file.

Functions

void Print (unsigned n)
int main (void)

Function Documentation

int main ( void   ) 

Definition at line 46 of file sample5.cpp.

References bm::bvector< Alloc >::end(), bm::bvector< Alloc >::first(), and Print().

void Print ( unsigned  n  ) 
Examples:
sample5.cpp, and sample8.cpp.

Definition at line 41 of file sample5.cpp.

Referenced by main().


Generated on Sun Apr 25 09:37:37 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00186.md50000644000175000017500000000004011365042645013147 0ustar tlktlk4c30e5b87c9280d62893b3576873e410bm3.7.0/doc/html/a00097.html0000644000175000017500000005503311365042635013442 0ustar tlktlk BitMagic: bmsse2.h File Reference

bmsse2.h File Reference

#include <mmintrin.h>
#include <emmintrin.h>
#include "bmdef.h"
#include "bmsse_util.h"
Include dependency graph for bmsse2.h:

Go to the source code of this file.

Namespaces

namespace  bm

Defines

#define VECT_XOR_ARR_2_MASK(dst, src, src_end, mask)   sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)
#define VECT_ANDNOT_ARR_2_MASK(dst, src, src_end, mask)   sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)
#define VECT_BITCOUNT(first, last)   sse2_bit_count((__m128i*) (first), (__m128i*) (last))
#define VECT_BITCOUNT_AND(first, last, mask)   sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and)
#define VECT_BITCOUNT_OR(first, last, mask)   sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or)
#define VECT_BITCOUNT_XOR(first, last, mask)   sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor)
#define VECT_BITCOUNT_SUB(first, last, mask)   sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub)
#define VECT_INVERT_ARR(first, last)   sse2_invert_arr(first, last);
#define VECT_AND_ARR(dst, src, src_end)   sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_OR_ARR(dst, src, src_end)   sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_SUB_ARR(dst, src, src_end)   sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_XOR_ARR(dst, src, src_end)   sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_COPY_BLOCK(dst, src, src_end)   sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))
#define VECT_SET_BLOCK(dst, dst_end, value)   sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value))

Functions

bm::id_t bm::sse2_bit_count (const __m128i *block, const __m128i *block_end)
template<class Func >
bm::id_t bm::sse2_bit_count_op (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, const __m128i *BMRESTRICT mask_block, Func sse2_func)
bm::id_t bm::sse2_bit_block_calc_count_change (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, unsigned *BMRESTRICT bit_count)

Define Documentation

#define VECT_AND_ARR ( dst,
src,
src_end   )     sse2_and_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 214 of file bmsse2.h.

#define VECT_ANDNOT_ARR_2_MASK ( dst,
src,
src_end,
mask   )     sse2_andnot_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)

Definition at line 193 of file bmsse2.h.

#define VECT_BITCOUNT ( first,
last   )     sse2_bit_count((__m128i*) (first), (__m128i*) (last))

Definition at line 196 of file bmsse2.h.

#define VECT_BITCOUNT_AND ( first,
last,
mask   )     sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_and)

Definition at line 199 of file bmsse2.h.

#define VECT_BITCOUNT_OR ( first,
last,
mask   )     sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_or)

Definition at line 202 of file bmsse2.h.

#define VECT_BITCOUNT_SUB ( first,
last,
mask   )     sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_sub)

Definition at line 208 of file bmsse2.h.

#define VECT_BITCOUNT_XOR ( first,
last,
mask   )     sse2_bit_count_op((__m128i*) (first), (__m128i*) (last), (__m128i*) (mask), sse2_xor)

Definition at line 205 of file bmsse2.h.

#define VECT_COPY_BLOCK ( dst,
src,
src_end   )     sse2_copy_block((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 226 of file bmsse2.h.

#define VECT_INVERT_ARR ( first,
last   )     sse2_invert_arr(first, last);

Definition at line 211 of file bmsse2.h.

#define VECT_OR_ARR ( dst,
src,
src_end   )     sse2_or_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 217 of file bmsse2.h.

#define VECT_SET_BLOCK ( dst,
dst_end,
value   )     sse2_set_block((__m128i*) dst, (__m128i*) (dst_end), (value))

Definition at line 229 of file bmsse2.h.

#define VECT_SUB_ARR ( dst,
src,
src_end   )     sse2_sub_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 220 of file bmsse2.h.

#define VECT_XOR_ARR ( dst,
src,
src_end   )     sse2_xor_arr((__m128i*) dst, (__m128i*) (src), (__m128i*) (src_end))

Definition at line 223 of file bmsse2.h.

#define VECT_XOR_ARR_2_MASK ( dst,
src,
src_end,
mask   )     sse2_xor_arr_2_mask((__m128i*)(dst), (__m128i*)(src), (__m128i*)(src_end), mask)

Definition at line 190 of file bmsse2.h.


Generated on Sun Apr 25 09:37:33 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00179.md50000644000175000017500000000004011365042644013150 0ustar tlktlk55a5858e9dbffd45b424b89f86e7d0ebbm3.7.0/doc/html/a00242.png0000644000175000017500000002764411365042650013256 0ustar tlktlk‰PNG  IHDRÈ]¸Ÿ¯bKGDÿÿÿ ½§“ IDATxœíÝ{XTåú?þ÷03 ÇaP ET<ˆ¢¦I"†‡0ò£;EÓìëÞš‡r«yh_~0˲O¦)¿LÍôãág¡|C…wŠºQl+FiâY@`8Nsÿ gÏk ‡áÞ¯ëêºXkÍZë~îç n×>6l@jjªÁúââblܸ±ÎÏíE~~>6mÚÔÖa4ÉŸal?~—/_në0´¯XcŒ±Æj•999»víê0çÑ7þ|Ü¿¿UÏ‚>ø{÷î5X_XXˆ?ü°ÎÏíEaa¡AÌ-•»–8n[Œ­ÆŠˆˆ@BBB[‡ }ÅÂcŒ5O±h¦ØØX¶Úù=z„‹/bÕªU8|øp«×ÜÜÜpëÖ-ÝrK宵û„1ÆcK«ÈZ­K—.…R©„““>ýôS@nn.Ƈ­[·¢k×®pttľ}û°jÕ*8::ÂÙÙáááºãlÞ¼o¾ù¦à²Ðy-Z„Ý»wë>W\\ŒaÆáÁƒ€ëׯÃ××èÛ·/:¤ûìéÓ§áéé sssøøø 110cÆ ¨Õj̘1ñññ€sçÎÁÛÛ …ýû÷ÇñãÇjµ'NÄÁƒ¡R©póæÍzóT^^.šÇC‡á…^ÀêÕ«qïÞ=],ÆÅ%Ö¾ÆÆˆ÷OVV^}õUõçN¨êËÝáÇáîî™LggglÞ¼Yð¸Íí“§„ÆÁx`íÚµptt„B¡Àرc‘––¦Û&6îŒõððp¸¹¹ÁÒÒS¦L1øGAtt4z÷î +++üõ¯ÅêÕ«ñÃ?ˆÆ%K–`Ù²eP*•èÒ¥ ¶nÝ*š“†Ä"ÖF±ÜËÆöcŒ1ÖhÔD(,,¬AŸŽŽ&‰DB+V¬ ÒÒRŠ';;;Šˆˆ ŒŒ 233£÷ߟ´Z-íܹ“ÐÆI«ÕÒ¦M›ÈÝÝ]w¬ãÇÓ¶mÛê];ÏöíÛiøðáºýÑ'6¶ŠŠŠ㉥®]»ÒíÛ·©¨¨ˆ&OžL‹-2:îŒåò—_~!…BA‘‘‘ôäÉ %JwïÞ%:qâ=yò„þçþ‡¤R)}óÍ7¢±FGG“L&£åË—Sii)]¸pìììèûï¿’¢±ˆµQ,7bã²1ý¦oÖ¬Y4kÖ¬}–1ÆØ³­Õ d{{{ª¨¨Ð­ ¡©S§RFF ’’""JII!™LF•••DDôóÏ?ÓsÏ=×ìó¨Õj’ËåôðáC"" Ôáááäããcp¬¥K—ÒòåËéóÏ?§W_}U·¾¢¢‚6nÜH¥¥¥DDäââBIIIDD´k×.òóó38δiÓhýúõ”ššJ(==]·M«ÕÒÉ“'é•W^¡þýûÓ–-[(77W°}¿þú+™››S^^íÙ³‡\\\¨ººšˆ„ d±¸Œµ¯¶Ÿ~ú‰æÌ™Cݺu£5kÖУGã­M¿@&2ÌXÔÎF£¡«W¯ê>÷´­·oß®sÜÆö‰±±%OTTuíÚ•~ûí7"ª)Šóóó¶Ù˜÷Þ{^ýuƒu^^^J6l ¿üå/ºõZ­–œé›o¾5::š”J¥AÁB3fÌhr,bmËØ¸lL¿éã™1ÆXCÉZëJuïÞ½!—ËuËÄ™3gtËÖÖÖ‰D…B™L¦[6Åy€ÈÈHÌ™3ñññøöÛo<@rr2ÜÜÜtû=yò“&MBUUúöí«[/—Ëñü£Þs§¥¥|úõë§{Ú„™™ºví ¸pá,X,_¾FÛ"ÂðáÃÔLyHOOÇùóç1vìXÁýÄâzúµwCÚ#FŒÀˆ#““ƒ={öÀßßÞÞÞ8zô¨hìÆˆõ`˜;…B«W¯bÍš5¸sç:uê­V[ïqÓ'Æ-±x‚‚‚‡Q£FA¥Raüøñ J¥2Úf1éééðôô4Xçáá &—úm–H$èÕ«ã¹ëÕ«ÌÍÍ Ú׬X„Úh,7Bã2//¯QýÆcŒ5V«ÍAÎÉÉ1XV«ÕèÔ©S«žgÖ¬Y8räŽ9‚I“&éÖ+•JŒ=<0øï«¯¾‚­­- ŽyôèÑzoS*•uΟ›› ;;;†Å¾\.‡B¡@vv6òòòPUU%Ú."ÂáÇññÇ#&&111øñÇáïïo0§³>bq5¦}úª««ADÉd°±±ýlCˆõ`˜»¨¨(„„„`íÚµHIIÁ•+W`ee%x܆ö‰1BcK,"–-[››‹ˆˆh4¼öÚk j³{{{¨Õêzã³µµEnn®Á¶üü|ÆsW»ÙÙÙ°µµmr,bm˱qÙØ8·G­=Oœ1ÆX#4õÒ39ÅEGGQQQyxxÐöíÛuS,žº}û¶Á×ðIIIS,)66¶Þe±ó“µµ5yxx#%%…¬¬¬èæÍ›DDTZZJ  C‡Q\\9::RVVÕL1°´´¤ââb"2ü:?))‰¬­­éîÝ»DT3÷×ÑÑ‘Nž>ž‚ƒƒÉÕÕ•Ö­[GiiiõæðܹsÓ+žÚ·oÙÛÛSyy¹à ±¸Œµ¯¶³gÏRpp0õìÙ“6lØ@jµÚ`»XÿˆM±ëƒÚ¹ûòË/i̘1ºå„„’H$õN±hJŸÔGll‰Å³aÃòõõÕm;uê”n<‹µÙX.;FNNNôøñc"ª™~#—Ë)44”¾ÿþ{rttÔõMBB o¿ýV4Ö§mŒŠŠ"¢šÿ_H›6mÍX,bmËØ¸lL¿ékOS,Z{ž8cŒ±ÆiµyäȑԧOòóó£.]ºP`` UTT4º@^¶l1¢Þe±ó<LÝ»w×ÍÛ}jË–-¤T*) €\\\húôéºÏ,[¶Œ( €”J¥®à&"2dùúúRbb"­[·ŽT*?ž:wîL‹/&"2úGýñãÇ´nÝ:òôô¬wû[o½E“'O®³¾  € EEE ÈbqkŸ¾ˆˆòó󣈈ÝñÚÄú§v\;wB}P;w="'''òóó£qãÆQ`` õîÝ[—Sõ‰>±±%Ojj*¹ºº’——íÞ½[w\cãN(—Z­–fÏžM*•ŠüýýÉÕÕ•)44”ˆˆþö·¿‘££#7Ž^xáòöö¦ï¾ûN4ÖèèhêÑ£yzzÒèÑ£ÉÙٙƌCOž<ͱXÄúU,7Bã²#È­=Oœ1ÆXãHˆˆšråY"‘ ,, ³fÍjð>—.]‚|||šrÚ=Ozz:nܸ—:s*oß¾û÷ïcÀ€èÞ½»n}vv6’’’0|øpØÛÛ¨™w™’’77·:ó_©®®†T*mÔ> %—PûL›V«E~~>:wî  þ܉õ¾¢¢"\¾|NNN4hRSSqïÞ=Œ3Æä}¢Ohl‰ÅS^^ŽË—/C£ÑÀÛÛNNNÇlh›ësýúudeeáù矇R©P“לœTVV"//£F€†‘#G ÆZ\\Œ?ü øé§Ÿ`aaáÇ7x:C}±k£±Ü4d\6ÔìÙ³ÔÌåoko½õ øâ‹/bÑ¢Exã7°gÏ9rD7Oü×_ÅÍ›7‘œœŒ÷ßIIIºýÂÃñmÛ6~1 cŒ™P«ÈŒµW7ÖæååooïVŒ¨é’’’ðÒK/áÈ‘#ððð@dd$6oÞŒ;wîÜdX[LL >üðÃ:ÏÁî(¹iOòŠ+PRRbðlvOOO¬Y³666X°`"##1jÔ(H¥R¨T*$&&"99‹/6xÍü—_~‰˜˜œ:uª-šÂcR«=Å‚±öL.—ÃÁÁAp»ÐM€íÑ!C°ÿ~|úé§ÈË˃»»;Nž<)Z57Ô¹»»×Yß‘rÓ^Œ7sçÎÅ'Ÿ|GGG\ºt 7oÞ„D"AZZ<<<0zôhÀ¥K—PTT¤Û7-- ÇÇý×éŠlýÈ0Æk>¾‚Ì{&4å reY5²~-…B)…£§µIã™7o¢££áííÒÒR”••!$$#GŽÄ°aÃп˜››C.—#%%žžžxë­·°dÉØØØ S§N¸sçúöí‹ØØXXXX˜4>Æ{–ñdÆûƒ¦° YI¥Èø¹¯#%ø­ëaÒ9;;«V­Â²eË æ‰wïÞÝ»wÇíÛ·ç‰;884yž8cŒ±†á™1öÌ*UW"3©™?— írŠRË! ‘I ­üÏ—kVâÓS+--Í`žøîÝ»QUU…¡C‡¨™î2nÜ8ÝçŸÎ111sssøùùé¶w”yâŒ1Ö^pÌ{fXV¨‹ŒÄ<¾RŒ’¬ H$€D*¶ª¦ &Ti8óÌÔ2ÏgŒ±öç 3Æ:¼;?äáÔG¿Á¼²æ­f²ÿÄ ñƃ`Ù‰¯'0ÆØ³‚ã3Æ:<÷I°i_$<Áª¼s£ö•˜‰;ÃÜV ¹µÌ­¤[I!·1ƒÂV†N},Ÿùâ988¸­C`Œ±&[ºt)^|ñEƒuÏöouÆØ3£T‘ƒË=àëÏ÷ãú·jü~4T h«Å¯$Ë,ÌPü¸%ZT–U£²´•¥ZT”VÆÞ ncU‚û_ùò1²/…¹­æÖ×Öf0·–ÂÜFŠî¾JX?gnÒ¶¶¶ˆˆ€¿¿ÛÂctîÜ9L™2¥Îz.cÏgs¼°º†¼Õ7þo6~ S£ò‰DT3¹e7&íìSï±*Š«!³0=Ÿ²»š¢*TW£,§•¥å¨(­FeY5*Š«aãl.Z Ÿ}ÿÔ×ô l3È­¤5W²mÌЪ”Ý‚ûk«f²–ÊÅÚµkÐâçaŒ1S:wî\½ë›U Ïž=[÷lQÆkïôï™°PÉ0t¡3¼ß|ÉQ9øõ@žäVÖÔÈz…²³pñinküÕëý¦tF¿)›Ö¡¯g€ ö½-PQ\Ê-*þ¸Š]¦®DEi5ÜüU¢rìÒ;x|¥æ6f5ÓD¬þ(´­k mŸΰï%ü åÒ¬JT³_ÚËcA“ äï¾ûΔq0ÆX‹suu­³Nfi†¯;Ácº#îÆæ#i_& i ‘H@D°v4í,ËÍ_xúFC ]Øý§T ¢¤åÅÕLÑê®bÃÈ}Úqÿ}™¿”è–õ¯bË­¤óAÝœ2ÆØŸ]“ äéÓ§›2ÆkSf2 úuBŸW:áÑ…B$íÍ„úz),þä7à=çm  é/9³¾4U¨,ý£Àþc.vEYÍÏ2K¾ªÌëxþÜ¿ùcÌÔ$€ëh;¸Ž¶CÖ¯%5+žaÊn Ñ)Œ1ÖqÌcžó¶iëcŒµñÛ¯cŒ1JOOGlll‡9O[»ví¾ùæ¨Õjƒõeee8tèPŸÛ‹ââb„‡‡·uMÒÞÆ–X<¦èû¬¬,Ýkî›ëâÅ‹HNN6ɱZÈŒ1ÆZÍ£Gpâĉs}›7oFFFF«žsï޽ؿ?~øáƒõ¥¥¥8pà@ŸÛ‹ÒÒR|ÿý÷ºå–Ê]K·-Æ–±xLÑ÷ˆŒŒlÖ1ž:wî~ûí7“«¥qÌcŒ™ÀåË—QZZÚjçS«Õ¸~ý:f̘3gδÚyM¡K—.øæ›otË-•»ÖîÖqpÌc¬U¾üòK¼òÊ+˜:u*ÂÂÂEEEX¹r%"""0mÚ4L™2'OžÄW_}…)S¦àµ×^C\\œî8áááøôÓO—…γuëVƒ¯ŒËÊʰpáBdffîÝ»‡%K–`„ ˜3gŽAñyõêUÌ;ãÇÇ‚ pëÖ-ÀúõëQPP€õë×ãÚµk€_~ùóæÍÃøñãñæ›oââÅ‹€‚‚¬^½ÿüç?„‡Ö›§ÊÊJÑ<ž>}žžž˜9s&222t±#—Xû Þ?ùùùøïÿþoõçN¨êËÝ™3g0{ölàµ×^ÓMÝh‰>yJhlŒ¨¹â?eÊŒ?ï¾û.²³³uÛÄÆ]SÇzmÍí{"ÂÎ;±}ûöš—+‡™3gbâĉX»v­Á?VÄÚ+–'¡8Û‡ÆpÌcmèÎ;‚_æççcÓ¦M­P+¸uë¤R)Ž=Š>ú‡ÆùóçQUU…¤¤$””” ""ýë_±iÓ&¨T*;v Ó§OǾ}ûtÇquuE¿~ý—…ÎÓ«W/ƒ¯÷/\¸­V‹.]º@£Ñà½÷Þøqãðý÷ßcÅŠغu+nܸììl¬[·óçÏGLL üüüðÁ€ˆ°råJØÙÙaåÊ•ððð@~~>BBB0}útüðÃX¸p!>þøc¤¦¦¢²²ׯ_Ç… ðÙgŸÁÅÅÅ ?øê«¯0oÞ<Ñ<ž>}&L€† Ò «Èbq‰µ¯¶Ÿ~ú .Ä©S§‹e±þ)//GRRÔÉXÔν½=>ûì3,^¼±±±øàƒ°{÷n˜´Oj[eee‚ñ\¹r'OžÄŽ;püøqXYYáÛo¿Ñ6Ë¥X<¦ì{"Â_|””ÌŸ?‰ø~îÞ½‹7âwÞAtt4ŒK—.m¯XžÄâllÃO±`Œ±6”œœŒ]»vaîܹu¶bïÞ½xï½÷óçÏGHHzöìÙÊQš– ,X™L///L:gΜ——ˆ¯¿þ:$ † ©TŠàà`ݲþKªFepÜÚËBçY±bvìØµZ '''ÄÅÅ!00péÒ%têÔ S¦L 2/¿ü2Î;GGG </¾ø"`æÌ™J¥¨¨¨€ $ lll “Épḻ»ãå—_øúúbäÈ‘8{ö,Q^^ŽeË–¡sçš·,®\¹‚cÇŽáñãÇ ÂŽ;sxïÞ=¤¦¦Âßßàïï`ñâÅ¢…‹X\‚íS( õ7zôh888 ** {÷îÅ„ 0yòd8995¸ôûI?wñññ‚}l»ÊÊJìØ±}úÔ¼ÞÙÙ2™ ¥¥¥pqqiVŸˆ[£FŒ§¢¢@ÍÕw+++¼ÿþû¨ªª >î<==›<Ö=<>>8þ<&L˜€k×®!$$™™‰GaæÌ™ºýÊËË1räHTWW£[·nºõ2™ ¯¿þz½çÎÎÎF÷îÝ ÖuïÞ]÷´ ‰D¢û#~ýúulÙ²=zôÀ´iÓàããc´­?þø#`Ñ¢EjЉœœüòË/2dˆà~bq™››7¸}0`À 0………ˆ‰‰ÁòåËáîîŽ>úH4vcÄú0Ì\.Ç­[·°{÷n¤§§C©T ~õߘ>1Fhl‰Åó /àçŸÆ;ï¼ 6 o¼ñlllŒ¶¹©ñ4´ýÆúþáǺí x饗ŒÆ”““777ƒu=zô ÞÇÆò$gcúÐ.c¬iµZ,]º€……Þ}÷]¬Y³YYY˜?>¢££1cÆ ¨Õj̘1ÿû¿ÿ«»*ógTXXh°\PP[[ÛV=O@@Nœ8…B#FèÖ[YYaРAS[ÊËË!‘HpðàAäçç3>>>>>°¶6|[¡••îß¿o°®¨¨H÷9ýX&“A.—£  ÅÅŨ®®6(vj#"ÄÅÅáoû|}}uëCCCqæÌÑY,.¹\ÞàöéÓjµ©T KKKÁÏ5”XäîÂ… Ø»w/Ö¯_ÂÌÌ AAA‚ÇmhŸ#4¶Äâ!"¼ýöÛxûí·qûömDFFê¦`ˆµ¹9ñèkjß57U®_¿§OŸÆŽ;ðüóÏÃÆFü9ñ¶¶¶uŽù4N±öË“XœýG´žƒÌcm,11r¹™™™8zô(>ûì39rOž<ÁÙ³g_ý5ðõ×_7øªR{•™™©›‹XVV†'N4©M)))¸råŠà²ØyF»wïâèÑ£˜4i’nŸ¡C‡âÚµkº|ÊË˱páBÄÇÇcèСHHH@AAà÷ßÇ'Ÿ|3³ºJ‡ †ÄÄDÝ#Æòóóñ¯ý C‡­óÙ`Ïž=˜?>Ο?Ù³gcÿþýÈÉÉ©·Ý×®]C^^‚‚‚àêêªûo„ ø×¿þ¥û:º>bq5¦}@Í _ëׯÇ;ï¼£»IlÍš5ºíÆúGˆXÔ–=z`РA033Ã7PVVÖè¶7–ÐØ‹çðáÃX¾|9¤R)ú÷ï‰'êúØX››3ÖÒ~c}oaa©TЉ'ÂÕÕ»wï6š#ÄÅÅ!77@Í´ §7Kе×Xž3F›ƒ¯ 3ÆXS©Tظq#är9^|ñE,Y²‡°aà >cff•J¹\Þ†Ñ6Ÿ‡‡vî܉ððp¤¥¥¡OŸ> BQQQ£ŽóÏþ7oÞÄðáÃë]:XZZbäÈ‘¸yó¦Až»uë†yóæáí·ßFÿþýñèÑ# 8/½ô$ 0wî\ôîÝÉÉÉX´h‘½½=¾øâ üýïGß¾}Œ  ÿþHIIÁرcñüóÏÜ‘¯ÏËË ^^^ÈÍÍʼn'°zõjìß¿¿ÎçNŸ>矾ÎB???„††âßÿþ7úöí[ï9ÜÝÝã Ú>}çÏŸÇÑ£Gñ—¿ük×®ÕMƒiLÿè«;¡>¨ý___ù¤Ù}"Dhlååå Æ³|ùrDGGcÞ¼yP©T¸uë–nŠŒØ¸kH.…âÑ¿Újª¾_±bæÏŸ‰'ÂÓÓS0G¾¾¾8þ<æÎ www<~üX÷±öæääæiÈ!‚q–””4ª‘PCžÓÁc¬EÄÄÄ`ýúõWƒÂÃÃñÅ_àðáÃ8p î·nÝ£»‰¥½H$X»v-¼OEEnܸÝ M-¡©çÉÉÉÁƒàààPgeZZ233áêêjpSZAAîܹƒ~ýúéŠ×ÌÌL¤¥¥¡K—.s'B«Õ¶È•1cq µÏ”±Š‹‹¡T*ÔŸ;±>ÐWVV†ßÿöööèÕ«Ôj5222àíímò>Ñ'4¶Ä⩬¬Äï¿ÿŽŠŠ ¸»»C¥R³¡mnL<µ5·ïëÞ½{ÈÏÏÇ€`eee°M¨½ÆòdÊ8ÇŽ‹°°0Ìš5Ë`=ÈŒ1Ö†bbbð÷¿ÿÝ`nà¶mÛpêÔ)ìØ±£ÃÈŒµW¹¹¹unpÓ׫W/ôîÝ»#jŸ:Jž„ džbÁcmìÁƒˆ‰‰APPŠ‹‹ñõ×_ãí·ßnë°{&Éd2ØÙÙ n¯ýÈ»gUGÏÈŒ1ÖÆFމ+V`óæÍHIIÁ!C°`Á¤§§|ÎÉÉ K–,Á_|Ѥ‹cÆÙÙÙéæå2a=O\ 3ÆX BPP4 .]º;;;Ý#‹\]] ^—zêÔ)$%%¡W¯^m.cŒ=¸@fŒ±vÀÂÂcÇŽ5XgfffðÐ{GGGL˜0ºW¯ÖÇËË ÞÞÞ-+cŒut\ 3ÆØŸŒ\.‡ƒƒƒàöÚwŠ3Æk.cìOÆÁÁ/¿ür[‡Ác¿I1Æš¨ºB‹ßäà1nVMIDAT_=4þaÆc‚WMù>kÆû31öxøŠâjÜ<’kÕ(/ªy­¯ßº­Z‹ÐV4…U(/¨‚¦ å…UÐüç?ç¡¶è1FøqNæ.­-cŒµ<Ñ)S¦L©óàdÆë¨:„¨¨(ÁíeÙ•¸¦ÆÍﲡ­"h«k i©yû¸ P^T²œJ”åTâIN%Êr+Q–]‰çÙ ç8•à~¿…«ñïPÃGÊ™ÛJai/ƒÂN;W Ñó–Vš$~Æk/D äéÓ§cúôé­ cŒµ©ÊÊÊz ä‡üúÿg!%&IÍW}Õ„ʲjÈ­¤¦ ˆ€'ùUH {á_×)'rqáÓTTWhuëÌäXv’ÁÚɶ.âìï5ÎNžÖPØÉ`¡’Ba'ƒ™´áEÿ“êœ;wR©‰ÛÏcm„oÒcŒ1Ù7J‘´/ÎB"•€ª B“/ʲ+aÙ ¨™A¨(®h«3™¶.æ¢çùíp6*Š«QQRòâ*”TãI~HKèÔcÖ OápdÑ!®°ì,ƒµ“–ä¢um6]ÌaÓE8¾†¸pá.\¸Ð¬c0ÆX{Á2cŒé‘@‚Ô„"ü²/™I%0“I@P•ø¼äïþrSp›ûË0ö7ÁíÕ„Ê'Õ°Pɠ즀¹ {),UrX9ÊŒ¯*7 ¨ÜħA´$cs¶cìφ dÆ ­&Tý®Ä×>‰ˆýûÝ3~jO§¨DxÌtD÷Qvº© æ¶RH$€Ä °t‹îßeˆ º ±ivcŒ™ÈŒ1 äq¨PïJ­¶fj„VK€Vx?ÈÌ`óœ9ºR¶lŒ1ÆZÈŒ1@Ù]ùÈÌýr"ª«´ÈM.CfR)'!ãj)*˪a&ýcº…¶îUå²ìÊ6ˆš1ÆXK0É‹Bîܹƒ˜âPíâ>6l@jjªÁúââblܸ±ÎÏíE~~>6mÚÔÖa4I{ñˆåYl?SŒ™‡b÷îÝÍ:ÆSÇÇåË—Mr,S3“Jàèi ¯7œ0ñÿsÇÿ9ïiß À «ºÁ-@¥»Nb&D*¶R‹ü{š6Žš1Ƙ©˜¤@NNNÆ®]»Lq¨vq}óçÏÇýû÷[õœ!!!øàƒ°wï^ƒõ………øðÃëüÜ^ÄÜR¹k‰ã¶ÅØ#Xží×Ü1sÿþ}lÛ¶­YÇx*"" &9VK“˜ö½-áìˆq{bÎéA˜å ¿÷]ÑçåN€òÂê6Ž’1Ƙ©ð«¦ˆEaaë=ÿÑ£G¸xñ"V­Z…Ç·ÚyMÁÍÍ ·nÝÒ-·TîZ»OÚ›ÖÊ3§ì®@ßÉ1æ£xëªwônëcŒ™ˆÉ d­V‹¥K—B©TÂÉÉ Ÿ~ú) 77ãÆÃÖ­[ѵkW8::bß¾}XµjáììŒððpÝq6oÞŒ7ß|SpYè<‹-2øê·¸¸Æ Ãׯ_‡¯¯/,,,зo_:tH÷ÙÓ§OÃÓÓæææðññAbb"`ÆŒP«Õ˜1câããç΃··7 ú÷ïãÇÔj5&NœˆƒB¥RáæÍúùT^^.šÇC‡á…^ÀêÕ«qïÞ=],ÆÅ%Ö¾ÆÆˆ÷OVV^}õUõçN¨êËÝáÇáîî™LggglÞ¼Yð¸Íí“§„ÆÁx`íÚµptt„B¡Àرc‘––¦Û&6îš:ÖåY¬úš;fˆ+W®ÄòåËô˜¯ððp¸¹¹ÁÒÒS¦L1(êÅò$–_¡8Û÷¦ Pò-Œ1Öa&´Ù@tt4I$Z±b•––R||<ÙÙÙQDDedd™™½ÿþû¤Õjiç΀6nÜHZ­–6mÚDîîîºc?~œ¶mÛVï²Øy¶oßNÇ×íwðàA±±UTT$Oll,uíÚ•nß¾MEEE4yòdZ´h‘Ñqg,—bñˆåYl?SŒ™³gÏ’§§'iµZZ¼x13†JJJóúÔ/¿üB …‚"##éÉ“'J(44T4Obù‹³1}¯/,,ŒD~-2Æ{F˜¬@¶··§ŠŠ ݺš:u*eddÝÑ””’ÉdTYYIDD?ÿü3=÷ÜsÍ>Z­&¹\N>$"¢ÀÀ@]±N>>>ÇZºt)-_¾œ>ÿüszõÕWuë+**hãÆTZZJDD...”””DDD»ví"???ƒãL›6Ö¯_O©©©€ÒÓÓuÛ´Z->ß~û-àÁƒHNN†›››n¿'Ož`Ò¤I¨ªªBß¾}uëår9þñÔ{î´´4ƒÏ@¿~ýtO›033C×®]Ô¼vuÁ‚ðððÀòåË`´­aaa " >@Í”‡ôôtœ?cÇŽÜO,®§_Y7¤}0bÄŒ1999سgüýýáíí£GŠÆnŒX†¹S(¸zõ*Ö¬Yƒ;wî S§NÐjëmcúÄ¡±%OPPâââ0jÔ(¨T*Œ?!!!P©TFÛÜÔxL±_sÆÌÍ›7ѧO@tt4fΜi4¦ôôtxzz¬óðð >6ŒåW(μ¼¼Fõ=cŒ1¦Ïdssrr –Õj5:uêdªÃ7è<³fÍ‘#GpäÈLš4I·^©TbôèÑxðàÁ_}õlmmQPP`pÌ£GÖ{Ó“R©¬sþÜÜ\ØÙÙ0,öår9 ²³³‘——‡ªª*Ñv>Œ?þ111ˆ‰‰Á?þƒù˜õ‹«1íÓW]] "‚L&ƒMóßð%Ö€a¢‚µk×"%%W®\•••àqÚ'Æ-±xˆ[¶lAnn.""" ÑhðÚk¯5¨ÍMÇû5g̸¹¹áÈ‘#øüóÏñî»ïÖùl}ìíí¡V«ëS,Obù5gcÿñÍcŒé]ZF#§X èèh""***"Ú¾}»nŠÅS·oß6øz8))É`ŠEbb"ÅÆÆÖ»,v"¢ââb²¶¶&ƒc¤¤¤••ݼy“ˆˆJKKiÀ€tèÐ!Š‹‹#GGGÊÊÊ"¢š)–––T\\LD†__'%%‘µµ5ݽ{—ˆjæq:::ÒÉ“')55•¤RiÜÄÇÇSpp0¹ººÒºuë(--­Þž;wÎ`zÅSûöí#{{{*//œb!—±öÕvöìY ¦ž={Ò† H­Vl뱯þÅú vî¾üòK3fŒn9!!$I½S,šÒ'õñlذ|}}uÛN:¥Ïbm6–K±xŒM±ÚÏcæéä§üýýiáÂ…Fó{ìØ1rrr¢ÇQÍt"¹\N¡¡¡¢y˯Xœé{}<Å‚1Æ‘ ç 9’úôéC~~~Ô¥K ¤ŠŠŠFÈË–-£#FÔ»,vž§‚ƒƒ©{÷îºy»OmÙ²…”J%‹‹ MŸ>]÷™eË–‘ƒƒR©ÔÜDDC† !___JLL$"¢uëÖ‘J¥¢ñãÇSçÎiñâÅDDFÿ ?~ü˜Ö­[gP\è{ë­·hòäÉuÖB¡ ¨¨(ÁY,.cíÓA~~~¡›#^›XÿÔ.ÜjçN¨jçîÑ£GäääD~~~4nÜ8 ¤Þ½{ëòcª>Ñ'6¶ÄâIMM%WWWòòò¢€€²³³£Ý»wëŽklÜ5e¬‹åYl?SŒ™Úrrr2YXXPBB‚h~µZ-Íž=›T*ùûû“««+Rhh¨hžŒåW(N.cŒ5‡„¨þç3I$„……aÖ¬Y ¾­ÑhpéÒ%ØÙÙÁÇǧy—¶[à<ééé¸qã\\\ê̇¼}û6îß¿ {÷îºõÙÙÙHJJÂðáÃaoo fÎdJJ ÜÜÜêÌã4¦ººR©´Qû4”X\Bí3elZ­ùùùèܹ3€ús'ÖúŠŠŠpùòe899aРAHMMŽ{÷0fÌ“÷‰>¡±%Oyy9._¾ Fooo899³¡mnh< ÉsCÿiî˜i¬ëׯ#++ Ï?ÿ<”J¥Á6¡<˯)ã}z«Äcm%""øMzŒ1öŒ|QÆŒ±g ÿÞcŒ1ˆ\AfŒ1ÆcìYÄscŒ1ÆÓÃ2cŒ1Æcz¸@fŒ1ÆcLÏÿ‘Ú¦ó©TŠIEND®B`‚bm3.7.0/doc/html/a00190.md50000644000175000017500000000004011365042645013142 0ustar tlktlk940fa350328f982725bc236d9f62ed67bm3.7.0/doc/html/functions_func_0x70.html0000644000175000017500000001224311365042644016417 0ustar tlktlk BitMagic: Data Fields - Functions
 

- p -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00229.png0000644000175000017500000000522511365042647013260 0ustar tlktlk‰PNG  IHDR½(«|ûÀbKGDÿÿÿ ½§“ JIDATxœíœLÔõÇŸ‡Ÿ„:êÀ ü1”niuyžãȰÆrW#°Ô?šé?ÆÊÙ¦µjiÙZ#Ôõcnëv Ù–Å, B1ˆÊ D§wpyp¢„y˜wÏïŒûö >è©}¿÷~lï÷çý~¿Þ¯×ëž|x¿ß|>A’ÂÕÍv@ ¸ÑÑ Â!zAØ¡Vj°Z­7Òຒ’‚ììlùE*@QþçKQQÑ8m+Þé ²²EEEÁºÿZÖ¬Y3áu±¦„Bô‚°Cˆ^vÑ Â!zAØ!D/;‚YN•îîn466býúõ¡0wS¨­­…N§CVVÖÍvE‘kžwíÚ…+W®""" Õj±jÕ*Üu×]¨¯¯ÇéÓ§±nÝ:Ù’ؽ{7, æÎ{Cý ɾ££¡0uÓ°Z­hjjºÙnåzåù™gžÁo¿ývÕã_~ùe´´´ÀétâôéÓ¨ªªBFFZZZà÷û±qãF ÉÆ455açΈ¿V÷§XÞpôèQ\¸pášllٲؿ?a6›Q^^“É„øøx>|XÖßf³aåÊ•ˆ‹‹»¦y¯†‰Þï÷cóæÍÐh4HLLÄo¼ðx<0›ÍØ»w/’’’€÷Þ{[¶lABBt:ª««vöìÙƒµk×NXw»ÝX¹r%<­V‹_~ùUUUHOO‡Z­†N§Ãž={dóVVV"-- 111X¿~=|> ºº©©©˜9s&{ì1Ù‡^__½^I’°`ÁÔÖÖ^U,Áؾ}; IV¬X§Ó °ÛíX±b…¬oAAš››ƒæ9˜M8uê n¹åÌ›7‡ Øv»Ý(((@CCƒ¢¿###SŠkŒøøxH’•J…ÂÂBTUUÉÚm6 C2×´ öìMee¥R³Œ#GŽ0""‚Ï?ÿø€^¯wÒ|*QTT4á³7!}\\œ,i%%%\½z5].ììì¤Z­æ_ýE’üî»ïxûí·Oi‡ÃAìíí%Iz½^¶¶¶ÊÚ%IbWWW`Þ¾¾¾@»Ñh¤ÕjåÖ­[YXX(³™™É²²2VTTÐh4ÊÚüq¾òÊ+!‹¥¦¦†IIIüé§ŸHŽŠrppää¢WÊs0›ÕÕÕ\¼x±ÌææÍ›Y\\L’LNNf[[[ Íï÷óÓO?å#< °´´”G1I’h2™h±Xh±XøÐC199™üq Off&ËËËI’[·nå“O>4G'NœàÓO?Í9sæpÛ¶m¨:tëÖ­ÃÀÀT*žzê)TUUaÓ¦M°ÙlØ»woP{ÙÙÙÈÎÎÆÀÀ8“ɽ^>úhR_&#dkúYÝívcÖ¬Y¡2àï@MM JJJ°}ûvtvvâÛo¿Ettô¤6âââàv»eׯü×h4ãbñx<ˆ ÷£Dii)<¬V+¼^/,‹bÿ‹/ŽósŒ±<³©Ñh°lÙ2ØívYyçwÆÍI’ÐßßsçÎŽ"§Ë½÷Þ‹ÁÁÁÀ©MQQšššpäÈx<<üðÃS²ãóù@jµ·ÞzëUùòOB&z»ÝŽO>ùðÇ`ß¾}ÞI&£µµŸ}ö™býï8Nddd`Ù²eˆŒŒÄñãÇÇMDNNª««ár¹?þø#¾þúk@nn.êêêÐÓÓ8{ö,l6Ìfó´cQb÷îÝ0™LP«ÕÈÊÊÂÚµkÑ××`Tt.\À¹sçÍÍÍèîîŒUÊs0›f³ hooüùçŸX²dɸ`ôÛÖÖ†×_6› éé騹s'z{{ƒÆ4<<ŒóçÏãüùóp:xíµ×°hÑ¢À_¯9sæÀh4âÙgŸ…ÅbÁŒ3‚Ú«¯¯GAAî¿ÿ~Dcc#<8•ôNŽÒzÓ\Ó/]º”sçÎ¥ÑhäwÜÁ¼¼<^¾|9°£««‹111z[[›lüÜsÏ1;;{ºÃá`ddd íÌ™3LLL¤Ñh¤Ùlf^^ÓÒÒ˜ŸŸ?n^’\¾|9­V+ý~?׬YC­VK“ÉÄ””æå屬¬Œ$¹cÇjµZæææröìÙÜ´iIN;%SRR˜™™ÉœœÆÆÆrÿþý$IŸÏGƒÁÀ;3ùùù4 4 5½RžƒÙ$ÉÒÒRj4æää099™O<ñ}>Iòž{î¡Á``KKË8_ûúú¸cÇ.\¸P1I’d/n¨Õj ¶··Ëú½ûî»Àººº ù±Z­ýר~éjPZÓGHDDÄ´_"ñz½8~ü8bcc±xñâkþ…œ CCC8yò$q÷ÝwÃáp §§Ë—/Ÿtì©S§pöìYdeeA£ÑÈÚìv;:;;‘šš:n FFFpòäIx½^èõz$&&Ú®\¹‚'N–.]Ø3Œ¡”ç`6ѽÌÏ?ÿŒäädÙž¦¿¿mmm¸ï¾ûÏÍ}>"##¯9¹Æ^"©¬¬”]©è£¸\.Ù&þŸdffB¯×ß@Â%чìôFð_¢¢¢‚þ{}*›mÁõCˆþ:?åÓ ÁG<{#;„èa‡½ 좄Bô‚°Cˆ^vÑ Â¥çð/øòMQD¹Ö2­çé?üðC¥&à†”””qן½þ_kzAØ!D/;„èaÇ´Z/Â,Ù+IEND®B`‚bm3.7.0/doc/html/a00093.html0000644000175000017500000026234211365042633013437 0ustar tlktlk BitMagic: bmfunc.h File Reference

bmfunc.h File Reference

#include <memory.h>
#include "bmdef.h"
#include "bmutil.h"
Include dependency graph for bmfunc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  bm::bv_statistics
 Structure with statistical information about bitset's memory allocation details. More...
struct  bm::gap_len_table< T >
 Default GAP lengths table. More...
struct  bm::gap_len_table_min< T >
 Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. More...
struct  bm::block_set_table< T >
 Structure keeps all-left/right ON bits masks. More...
struct  bm::all_set< T >
 Structure carries pointer on bit block with all bits 1. More...
struct  bm::all_set< T >::all_set_block
struct  bm::_copyright< T >
 Internal structure. More...
struct  bm::globals< T >
 Internal structure. More...
struct  bm::globals< T >::bo
struct  bm::d_copy_func< T >
 d-Gap copy functor More...
class  bm::copy_to_array_functor< B >
 Adaptor to copy 1 bits to array. More...
class  bm::copy_to_array_functor_inc< B >
 Adaptor to copy 1 bits to array with base increment. More...
class  bm::bitblock_get_adapter
 Bit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal. More...
class  bm::bitblock_store_adapter
 Bit-block store adapter, takes bitblock and saves results into it /internal. More...
class  bm::bitblock_sum_adapter
 Bit-block sum adapter, takes values and sums it /internal. More...
class  bm::decoder_range_adapter< DEC >
 Adapter to get words from a range stream (see range serialized bit-block). More...
struct  bm::bit_AND< W >
 Bit AND functor. More...
struct  bm::bit_OR< W >
 Bit OR functor. More...
struct  bm::bit_SUB< W >
 Bit SUB functor. More...
struct  bm::bit_XOR< W >
 Bit XOR functor. More...
struct  bm::bit_ASSIGN< W >
 Bit ASSIGN functor. More...
struct  bm::bit_COUNT< W >
 Bit COUNT functor. More...
struct  bm::bit_COUNT_AND< W >
 Bit COUNT AND functor. More...
struct  bm::bit_COUNT_XOR< W >
 Bit COUNT XOR functor. More...
struct  bm::bit_COUNT_OR< W >
 Bit COUNT OR functor. More...
struct  bm::bit_COUNT_SUB_AB< W >
 Bit COUNT SUB AB functor. More...
struct  bm::bit_COUNT_SUB_BA< W >
 Bit SUB BA functor. More...
struct  bm::bit_COUNT_A< W >
 Bit COUNT A functor. More...
struct  bm::bit_COUNT_B< W >
 Bit COUNT B functor. More...
struct  bm::operation_functions< T >

Namespaces

namespace  bm

Typedefs

typedef void(* bm::gap_operation_to_bitset_func_type )(unsigned *, const gap_word_t *)
typedef gap_word_t *(* bm::gap_operation_func_type )(const gap_word_t *BMRESTRICT, const gap_word_t *BMRESTRICT, gap_word_t *BMRESTRICT, unsigned &)
typedef bm::id_t(* bm::bit_operation_count_func_type )(const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT)

Enumerations

enum  bm::set_operation {
  bm::set_AND = 0, bm::set_OR = 1, bm::set_SUB = 2, bm::set_XOR = 3,
  bm::set_ASSIGN = 4, bm::set_COUNT = 5, bm::set_COUNT_AND = 6, bm::set_COUNT_XOR = 7,
  bm::set_COUNT_OR = 8, bm::set_COUNT_SUB_AB = 9, bm::set_COUNT_SUB_BA = 10, bm::set_COUNT_A = 11,
  bm::set_COUNT_B = 12, bm::set_END
}
 

Nomenclature of set operations.

More...
enum  bm::operation { bm::BM_AND = set_AND, bm::BM_OR = set_OR, bm::BM_SUB = set_SUB, bm::BM_XOR = set_XOR }
 

Bit operations enumeration.

More...
enum  bm::ByteOrder { bm::BigEndian = 0, bm::LittleEndian = 1 }
 

Byte orders recognized by the library.

More...

Functions

BMFORCEINLINE bm::id_t bm::word_bitcount (bm::id_t w)
int bm::parallel_popcnt_32 (unsigned int n)
bool bm::is_const_set_operation (set_operation op)
 Returns true if set operation is constant (bitcount).
bm::operation bm::setop2op (bm::set_operation op)
 Convert set operation to operation.
template<typename W >
void bm::xor_swap (W &x, W &y)
 XOR swap two scalar variables.
template<typename T >
int bm::wordcmp0 (T w1, T w2)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
template<typename T >
int bm::wordcmp (T a, T b)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
template<typename T >
unsigned bm::gap_bfind (const T *buf, unsigned pos, unsigned *is_set)
template<typename T >
unsigned bm::gap_test (const T *buf, unsigned pos)
 Tests if bit = pos is true.
template<class T , class F >
void bm::for_each_nzblock (T ***root, unsigned size1, F &f)
template<class T , class F >
void bm::for_each_nzblock2 (T ***root, unsigned size1, F &f)
template<class T , class F >
bool bm::for_each_nzblock_if (T ***root, unsigned size1, F &f)
template<class T , class F >
void bm::for_each_block (T ***root, unsigned size1, F &f)
template<class T , class F >
bm::bmfor_each (T first, T last, F f)
template<class T >
bm::sum_arr (T *first, T *last)
template<typename T >
unsigned bm::gap_bit_count (const T *buf, unsigned dsize=0)
 Calculates number of bits ON in GAP buffer.
template<typename T >
unsigned bm::gap_bit_count_range (const T *buf, T left, T right)
 Counts 1 bits in GAP buffer in the closed [left, right] diapason.
template<class T , class Func >
void bm::for_each_dgap (const T *gap_buf, Func &func)
template<typename T >
T * bm::gap_2_dgap (const T *gap_buf, T *dgap_buf, bool copy_head=true)
 Convert GAP buffer into D-GAP buffer.
template<typename T >
void bm::dgap_2_gap (const T *dgap_buf, T *gap_buf, T gap_header=0)
 Convert D-GAP buffer into GAP buffer.
template<typename T >
int bm::gapcmp (const T *buf1, const T *buf2)
 Lexicographical comparison of GAP buffers.
template<typename T , class F >
void bm::gap_buff_op (T *BMRESTRICT dest, const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F &f, unsigned &dlen)
 Abstract operation for GAP buffers. Receives functor F as a template argument.
template<typename T , class F >
unsigned bm::gap_buff_any_op (const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f)
 Abstract distance test operation for GAP buffers. Receives functor F as a template argument.
template<typename T , class F >
unsigned bm::gap_buff_count_op (const T *vect1, const T *vect2, F f)
 Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument.
template<typename T >
unsigned bm::gap_set_value (unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set)
 Sets or clears bit in the GAP buffer.
template<typename T >
unsigned bm::gap_add_value (T *buf, T pos)
 Add new value to the end of GAP buffer.
template<typename T >
unsigned bm::gap_set_array (T *buf, const T *arr, unsigned len)
 Convert array to GAP buffer.
template<typename T >
unsigned bm::bit_array_compute_gaps (const T *arr, unsigned len)
 Compute number of GAPs in bit-array.
template<typename T >
int bm::gap_find_in_block (const T *buf, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the GAP block.
BMFORCEINLINE void bm::set_bit (unsigned *dest, unsigned bitpos)
 Set 1 bit in a block.
BMFORCEINLINE unsigned bm::test_bit (const unsigned *block, unsigned bitpos)
 Test 1 bit in a block.
void bm::or_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 Sets bits to 1 in the bitblock.
void bm::sub_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 SUB (AND NOT) bit interval to 1 in the bitblock.
void bm::xor_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 XOR bit interval to 1 in the bitblock.
template<typename T >
void bm::gap_sub_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 SUB (AND NOT) GAP block to bitblock.
template<typename T >
void bm::gap_xor_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 XOR GAP block to bitblock.
template<typename T >
void bm::gap_add_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 Adds(OR) GAP block to bitblock.
template<typename T >
void bm::gap_add_to_bitset (unsigned *dest, const T *buf)
 Adds(OR) GAP block to bitblock.
template<typename T >
void bm::gap_and_to_bitset (unsigned *dest, const T *buf)
 ANDs GAP block to bitblock.
template<typename T >
bm::id_t bm::gap_bitset_and_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block AND masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_and_any (const unsigned *block, const T *buf)
 Bitcount test of bit block AND masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_sub_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block SUB masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_sub_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block SUB masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_xor_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block XOR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_xor_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block XOR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_or_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block OR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_or_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block OR masked by GAP block.
void bm::bit_block_set (bm::word_t *BMRESTRICT dst, bm::word_t value)
 Bitblock memset operation.
template<typename T >
void bm::gap_convert_to_bitset (unsigned *dest, const T *buf)
 GAP block to bitblock conversion.
template<typename T >
void bm::gap_convert_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 GAP block to bitblock conversion.
template<typename T >
void bm::gap_convert_to_bitset (unsigned *dest, const T *buf, unsigned dest_len)
 GAP block to bitblock conversion.
template<typename T >
unsigned * bm::gap_convert_to_bitset_smart (unsigned *dest, const T *buf, id_t set_max)
 Smart GAP block to bitblock conversion.
template<typename T >
unsigned bm::gap_control_sum (const T *buf)
 Calculates sum of all words in GAP block. (For debugging purposes).
template<class T >
void bm::gap_set_all (T *buf, unsigned set_max, unsigned value)
 Sets all bits to 0 or 1 (GAP).
template<class T >
void bm::gap_init_range_block (T *buf, T from, T to, T value, unsigned set_max)
 Init gap block so it has block in it (can be whole block).
template<typename T >
void bm::gap_invert (T *buf)
 Inverts all bits in the GAP buffer.
template<typename T >
bool bm::gap_is_all_zero (const T *buf, unsigned set_max)
 Temporary inverts all bits in the GAP buffer.
template<typename T >
bool bm::gap_is_all_one (const T *buf, unsigned set_max)
 Checks if GAP block is all-one.
template<typename T >
bm::gap_length (const T *buf)
 Returs GAP block length.
template<typename T >
unsigned bm::gap_capacity (const T *buf, const T *glevel_len)
 Returs GAP block capacity.
template<typename T >
unsigned bm::gap_limit (const T *buf, const T *glevel_len)
 Returs GAP block capacity limit.
template<typename T >
unsigned bm::gap_level (const T *buf)
 Returs GAP blocks capacity level.
template<typename T >
void bm::set_gap_level (T *buf, unsigned level)
 Sets GAP block capacity level.
template<typename T >
int bm::gap_calc_level (int len, const T *glevel_len)
 Calculates GAP block capacity level.
template<typename T >
unsigned bm::gap_free_elements (const T *buf, const T *glevel_len)
 Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length.
template<typename T >
int bm::bitcmp (const T *buf1, const T *buf2, unsigned len)
 Lexicographical comparison of BIT buffers.
template<typename T >
unsigned bm::bit_convert_to_gap (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len)
 Converts bit block to GAP.
template<class T , class F >
void bm::for_each_gap_dbit (const T *buf, F &func)
 Iterate gap block as delta-bits with a functor.
template<typename D , typename T >
bm::gap_convert_to_arr (D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false)
 Convert gap block into array of ints corresponding to 1 bits.
bm::id_t bm::bit_block_calc_count (const bm::word_t *block, const bm::word_t *block_end)
 Bitcount for bit string.
bm::id_t bm::bit_count_change (bm::word_t w)
void bm::bit_count_change32 (const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count, unsigned *gap_count)
bm::id_t bm::bit_block_calc_count_change (const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count)
bm::id_t bm::bit_block_calc_count_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
bm::id_t bm::bit_block_any_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
template<typename T >
void bm::bit_invert (T *start, T *end)
bool bm::is_bits_one (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 1.
bool bm::bit_is_all_zero (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 0.
BMFORCEINLINE unsigned bm::and_op (unsigned v1, unsigned v2)
 GAP and functor.
BMFORCEINLINE unsigned bm::xor_op (unsigned v1, unsigned v2)
 GAP xor functor.
BMFORCEINLINE unsigned bm::or_op (unsigned v1, unsigned v2)
 GAP or functor.
BMFORCEINLINE unsigned bm::sub_op (unsigned v1, unsigned v2)
 GAP or functor.
BMFORCEINLINE gap_word_t * bm::gap_operation_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP AND operation.
BMFORCEINLINE unsigned bm::gap_operation_any_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP AND operation test.
BMFORCEINLINE unsigned bm::gap_count_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount AND operation test.
BMFORCEINLINE gap_word_t * bm::gap_operation_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP XOR operation.
BMFORCEINLINE unsigned bm::gap_operation_any_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP XOR operation test.
BMFORCEINLINE unsigned bm::gap_count_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount XOR operation test.
gap_word_t * bm::gap_operation_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP OR operation.
BMFORCEINLINE unsigned bm::gap_count_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount OR operation test.
gap_word_t * bm::gap_operation_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP SUB (AND NOT) operation.
BMFORCEINLINE unsigned bm::gap_operation_any_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP SUB operation test.
BMFORCEINLINE unsigned bm::gap_count_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount SUB (AND NOT) operation test.
void bm::bit_block_copy (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Bitblock copy operation.
void bm::bit_block_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock AND operation. Function does not analyse availability of source and destination blocks.
unsigned bm::bit_block_and_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_and_any (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_or_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function ORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
bm::word_tbm::bit_operation_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock AND operation.
bm::id_t bm::bit_operation_and_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_and_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation test.
bm::id_t bm::bit_operation_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock SUB operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_sub_count_inv (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs inverted bitblock SUB operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock test of SUB operation.
bm::id_t bm::bit_operation_or_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation test.
void bm::bit_block_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock OR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Block OR operation. Makes analysis if block is 0 or FULL.
void bm::bit_block_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock SUB (AND NOT) operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock SUB operation.
void bm::bit_block_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock XOR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock XOR operation.
bm::id_t bm::bit_operation_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation test.
template<class T >
unsigned bm::bit_count_nonzero_size (const T *blk, unsigned data_size)
 Inspects block for full zero words.
int bm::bit_find_in_block (const bm::word_t *data, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the BIT block.
template<typename T , typename F >
void bm::bit_for_each_4 (T w, F &func)
 Templated algorithm to unpacks octet based word into list of ON bit indexes.
template<typename T , typename F >
void bm::bit_for_each (T w, F &func)
 Templated algorithm to unpacks word into list of ON bit indexes.
template<typename T , typename B >
unsigned bm::bit_list_4 (T w, B *bits)
 Unpacks word into list of ON bit indexes (quad-bit based).
template<typename T , typename B >
unsigned bm::bit_list (T w, B *bits)
 Unpacks word into list of ON bit indexes.
bm::set_representation bm::best_representation (unsigned bit_count, unsigned total_possible_bitcount, unsigned gap_count, unsigned block_size)
 Choose best representation for a bit-block.
template<typename T >
bm::bit_convert_to_arr (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len, unsigned mask=0)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T >
unsigned bm::gap_overhead (const T *length, const T *length_end, const T *glevel_len)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T >
bool bm::improve_gap_levels (const T *length, const T *length_end, T *glevel_len)
 Finds optimal gap blocks lengths.
template<class It1 , class It2 , class BinaryOp , class Encoder >
void bm::bit_recomb (It1 &it1, It2 &it2, BinaryOp &op, Encoder &enc, unsigned block_size=bm::set_block_size)

Generated on Sun Apr 25 09:37:31 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00218.md50000644000175000017500000000004011365042646013144 0ustar tlktlk9f224f8838740992236c85a5b83e7dd5bm3.7.0/doc/html/a00213.map0000644000175000017500000000017111365042646013234 0ustar tlktlk bm3.7.0/doc/html/a00123.html0000644000175000017500000001262611365042643013430 0ustar tlktlk BitMagic: Processor specific optimizations for SSE4.2 instructions

Processor specific optimizations for SSE4.2 instructions
[BitMagic C++ Library]

Collaboration diagram for Processor specific optimizations for SSE4.2 instructions:

Functions

bm::id_t bm::sse4_bit_count (const __m128i *block, const __m128i *block_end)
bm::id_t bm::sse4_bit_block_calc_count_change (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, unsigned *BMRESTRICT bit_count)

Function Documentation

bm::id_t bm::sse4_bit_block_calc_count_change ( const __m128i *BMRESTRICT  block,
const __m128i *BMRESTRICT  block_end,
unsigned *BMRESTRICT  bit_count 
) [inline]

SSE4.2 optimized bitcounting and number of GAPs

Definition at line 248 of file bmsse4.h.

Referenced by bm::bit_block_calc_count_change().

bm::id_t bm::sse4_bit_count ( const __m128i *  block,
const __m128i *  block_end 
) [inline]

SSE4.2 optimized bitcounting .

Definition at line 55 of file bmsse4.h.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00256.md50000644000175000017500000000004011365042652013143 0ustar tlktlke125033e9f28abcb3913c160b510aa24bm3.7.0/doc/html/a00217.png0000644000175000017500000000407111365042646013252 0ustar tlktlk‰PNG  IHDR«(Ì obKGDÿÿÿ ½§“îIDATxœí›]HÓoÇ¿Óé"u™dµ 7-´óÀÊÔÈXÈ¢¨D¥(¢ò 7’:ˆŠ^ "™‰fj³ÔBK\Xüµ!…Ij‰-_Ó¬m–û>ŽL÷¢ÍÇöüïÏÑ®û·]÷÷ºöåæ¾÷ûMB’þ~¼æZ@à*¬A˜Uà1HèììÄ«W¯æB‹@`#%%eÒØ$³êõzìÚµë"H °ÇTçþIfuôf`¶ÉÏÏ·»XŠ=«Àcfx ¬A˜Uà1³ <aVÇ`÷§+Wikkƒ^¯ÇÞ½{Ý çïáëׯ¸rå Ž92×Röx¶tjµZ|üøqÊkaaaÐh4nÏþxemiiÁµk×Ü¡å¯bhh999³:GZZš]CüŠ£ϖξ¾>FFhµZhµZ[Üßßïöù\áWVÁÌ©¬¬DFFÆ\˘’¬¬,Ûë´´4˜óEÉ-{V«ÕŠÌÌLÈår,^¼gÏžô÷÷C­VãâÅ‹X¶l‚ƒƒqëÖ-:tÁÁÁP((((°åÉÍÍÅž={ìÆ:J¥óçÏǾ}ûpøða<~üpïÞ=¨T*H¥R( äææêêê‘‘¬¬,Èår,]º/^œvoÞ¼A\\æÍ›‡ððpäççO¨Q«ÕB©TÂÏÏ{÷îÅØØ˜Ã|===Ðh4¨««sXƒ£»ªÓ‹e:m˜õ<áohµZN1lNG‰DÂðÛ·o¬««ã‚ XTTÄîînzyyñøñã´Z­¼zõ*ðܹs´Z­<þ|ø&“‰gΜ¡··7óòò8<zôÈa]Ÿ>}¢L&#IŽŒŒP¡PðòåË4›Í¬®®¦\.ç‹/ØÝÝM___¦§§Ób±ðÇ ä“'Oæ¤B¡à³gÏ8::ê´{=vUçï´··óàÁƒ\µj•Óï855•©©©ßS\\̘˜Þ¹s‡f³ÙiN{8ðß?n1ëÂ… 9::j;vìwìØÁîînàÈÈIòýû÷”J¥üñãIòõë×\²d‰Kóœ:uŠ;wî´ÅV«• …‚yyy4›Ílll´]ÿ[[[©Óé(—Ëi±X&èÓh4çûÕ\·n݄뙙™ÌÎÎ¶ÕØÕÕe»–À¢¢"§5…„„Ð`0¤ÓìõØUã=«¨¨à¶mÛ¸zõj^¸pýýýNuºbV’|ùò%wïÞÍåË—óèÑ£ìììtú™ßqdV·ìY•J%|||lñš5kP]]m‹ýüü‰2™ R©Ô»JGGÂÃÃm±D"Ahh(@&“¡±±GE[[‚‚‚`µZmï …¯¯ï}555Óš»¥¥+W®´™L&lݺÕ+Š Ú¦‹³œõØ™N½^ôôtDDD ;;III3ÒéˆØØXÄÆÆ¢¯¯7oÞÄæÍ›…¸%¿[ÌÚ××7!îééAPP;RÛ˜t ”––âØ±c(..ÆÆáííÀÀ@»úz{{àòÜr¹ñññ¨¬¬´™L&H$|ùòe&åLbº5LÕcG:›šš “ÉÐÛÛ‹üüùs‚ùÝÉØØHB*•ÂßßßmyÝrÀêèè@yy9€ÿþîwýúõ «Ž«466¢ªªjÊX­V£´´½½½€úúz477C"‘Àh4"""ñññðööF}}=†‡‡myŒF#ÊÊÊ###¸qãÔjµËºÔj5êêêðîÝ;À÷ï߃’’’i×hg5¸ÒcG:ccca0púôiC¥RáäÉ“øüù³Ûjxþü94 6lØ’Ðëõ¸{÷®Ûò»eϺ~ýz†……1!!K—.err2GGGmû¹qZ[[éççg‹ Ä=kVVcccíÆû÷ïgpp0Õj57lØÀ¨¨(²³³“‹/fBBÕj5“““©T*¹}ûvêt:®X±‚‘‘‘Œ§B¡`bb"M&“ú~Ý ’ä… (—Ë™””Ħ¤¤plllR$™˜˜èÒž5::šqqqlhhpZƒ½»ªówºººxâÄ FFF:ÕéÊžµ¨¨È¶W?“Ì„Y=`c2™XSS3áàNzzzØÜÜ̦¦&>{öŒ‹…¡¡¡¬¯¯'I ñéÓ§ljj"IvvvòùóçÔétŒ‰‰¡Åbamm-_½zE«Õ:# F£‘UUU|ûö­ÛjªªªâÀÀ€ÃÆqµÇÓÑùóçÏ?¨Àýy™UBNüKÀø“ÚüËþ)`0°eËÜ¿(..Fnn.ÚÚÚî½ÊËË‘““ƒ††† ãÝÝÝ“(¿²víZDEEÍXïlçÿÅÿ<æVtt4nß¾³gÏb``*• N r¹*•jÒ¸-Zd÷sóçÏÿ#½³ÿ߈Ǭ¬‚ŽVVñˆ Àcfx ¬A˜Uà1³ <aVÇ Ì*ðìÞp÷ãcÁŸ2ɬ›6mBaaá\h2é–@ð—"î` <aVÇ Ì*ðþô1f„2ŠIEND®B`‚bm3.7.0/doc/html/a00138.map0000644000175000017500000000336211365042633013243 0ustar tlktlk bm3.7.0/doc/html/a00176.png0000644000175000017500000000616111365042644013256 0ustar tlktlk‰PNG  IHDRÛ(w…÷bKGDÿÿÿ ½§“ &IDATxœí}PTåÇ¿°,K ²â"A#A()ﲈ è!ÓAcCЀ4M •€“¦5‘¯5þAYÉ‚Nã,ké3à"mAkX’6 °‚B ìžßw\–]Ä•ú=ŸþxÎ=Ï9çÙÝï}9÷ÞÁŒˆ ãQ£0Ü0ÿ/0±1&‚‰Á0ÚÚÚP[[û8ja0þ3¼üòË:6±ÕÔÔàÕW_5IA Æ•ÉúŽ:bÓçÌ`0ôSPP0åÁŠ]³1&‚‰Á0Ll †‰`bc0Lƒa"˜Ø 1eëßPþúë/ÔÔÔ ))iÊ™Yž¾¾>H$deeÍ(öðð0¤R)~þùg˜™™!$$[·nÇã|T*d2êêê V«áãツ„,X°€óÉÉÉATTÜÝݵâçææ"((¾¾¾Ø·o6lرX¬åsòäIx{{ã÷ßGKKˤu.[¶ ñññÓ®§¬¬ çÎÃàà \]]‘””„%K–\§ŸŸ<ˆññq€™™„B!6mÚWW×ióßOuu5ªªª˜˜¨U€YË1AQQÆÆÆÇÙ.^¼ˆ††¤¥¥q¶ÆÆFaçÎZßñ£æ¡lüñ¾þúëÙ¨eÆyîܹƒüü|nœ’’2åöA”J%|||pâÄ ¸¸¸@$áƒ>@tt4w¯±­­ ¾¾¾8räìíí±dÉÈd2,_¾W®\áb>|×®]ÓÉ‘““…BµZ={ö >>CCCZ>ùùùP(èééR©„R©„T*…T*寷oßžv=»wïFbb"ìììŒææfx{{ãêÕ«× }ô ”J%Z[[!“ÉàááÁm7”Ý»wãÃ?Ôú~&˜­üùçŸxÿý÷µlûöíCzz::::8Û©S§ “ÉL*4=€T*¥IÌSRRRBb±Ø`ÿ™bLž§žzŠêëë òݼy3½òÊ+¤Ñh8Û­[·H(Raa!­^½šbcci||\knFF¹¸¸ÐÈÈ—·¨¨H'‡§§'I$#äîîNéééZ>k×®%‰D¢eKNN¦äädƒÖAD422B–––TUU¥eóÍ7)11‘OW'‘@  êêj­íÑÑÑôúë¯\Okk+™››SVV¹»»ëlŸ÷S[[K¨££ƒˆˆ†††ÈÊÊŠV¬XAùùùœ_dd$mß¾}F9¦C~~ž•k6Fƒ´´4,X°‹/Æ·oßFdd$Ž9'''ØÛÛãøñãÈÈÈ€½½=qêÔ).ΧŸ~Š×^{mÊñTyþþûolÞ¼®®.ÄÇÇ£ººZoÝJ¥¥¥¥8tèÌÌÌ8»ƒƒòòò  ñÓO?á—_~ÁW_}¥³'Ü¿?FGGQXXhÔçõùçŸC"‘ ®®Î¨yÓ1>>ŽÑÑQ hÙ³²²ššúÐñE"ÁþX½z5233ÑÜÜlÐË*•jR{@@lmmñÃ?.]º„+V`ëÖ­(//pï7TWW‡ˆˆƒãγ"6…B>Ÿ[·n¡°°‡™3g066†ÊÊJô÷÷ãæÍ›øøã‘œœ {{{tuuá½÷ÞÞ={¸8Ï>û,V­Z5åxª<ÃÃ謬;v "‘ÇŽCppð´u;99ÁÙÙYgÛK/½„ˆˆÔÕÕÁßß"‘HLJÏç#<<Üè·ÝÝݱk×.¤¤¤`ll̨¹ú°±±AJJ ¶lÙ‚ØØXäåå¡¥¥...xî¹çŒŽWZZм¼<äææâÝwßEMM vìØað|©TŠ„„ˆD"DDD@&“=TŽææfdddÀ××wÒí<aaaœØÎŸ? 6 ** ßÿ=Ôj5088ˆµk×êÌ?{ö,ñÍ7ß<áÍŠØ„B!<kkk„††âí·ßFAA€{{’;wÂÌÌ ‘‘‘°°°ÀŽ;¸ñàà '&&Û·oŸr¬/Ïý>æææ …àóùzëÄüùó§õ±µµÕ»ö$†0ÑÌ9|ø°Ñsõ‘››‹òòr8;;#''nnn Ôºf3”ÚÚZ”••áüùó¸v톇‡ÑØØhÐÜß~û MMM\³"..ß~û-4Q9ˆeeeˆŽŽÆ /¼'''Èåò)ó®[·NKl7nD@@x<êêê —Ëáëë ;;;¹[¶lÁÑ£GQQQ¥K—b×®]hoo7h½†ðÐÝHpssÓúa{yy¡¢¢‚ÛØØ¸×q°°°àƳ™ÇXÐÙÙ "Ò©E.—£½½ŽŽŽhkk›2F{{;¼¼¼ŒÎÍçó!‘H°nݺI_ǘ DFƒˆˆî4©µµo½õbbbÐÜÜlÔgžÐÐPn\PP€ÄÄDôôôÀÜ\ÿ~Z*•‚ˆ¸3•J…›7o¢ªªJëN_¹\ŽÔÔTxxxàwÞÁúõë§­?""™™™hjjÂ7 333lܸåååhii™ôr±X ±XŒžžH$„‡‡Ã×××èK…ɘ•#[OOÖ¸««kÒ=Ç\ËŒÑÑQ\¼xQgÛPQQÈÈH455áòåË:>¸pá6mÚ°²²ÂÝ»wuü†††ðÄOèØÅb1RRRšš:+oYÃÇÇGËöôÓOcÿþý¸qãþùçŸÕ9A`` úúú¦=’d2²³³QZZŠÒÒR\¸pááá:g"úrðù|tww£··—»M …BdggcÍš5Üõ_TTÊÊÊ —ËõŠmµZ "‚……æÍ›7­¿AÑM™”’’@%%%DD400@ôÅ_Pgg§V¬ëׯ“ 7®¯¯'n¬P(¨¬¬lÒ±¾<---ZqéFfeeÑ3Ïÿ¡»‘ÝÝÝdccC'Nœàl†²²²ÈÇÇÇà:‰îu Ï;G}}}Ô××Gííí”@^^^ÓÖqéÒ%²´´¤ÞÞ^-ûñãÇiáÂ…¤R©ŒÊQ]]MqqqäììL{÷î%¥R©7ll,ñx<úì³Ï8[WWYXXÇ£þþþ)çVVVR\\¹ººÒ'Ÿ|B]]]Ó®÷~ôu#gElÁÁÁ´lÙ2 £'Ÿ|’žþy5ZléééZíýûÇúò<(6 !…B1mý*•ŠÞxã ²´´$???òðð kkk:zô(ç3>>N™™™$ÈÓÓ“üüüÈÒÒ’’’’èîÝ»œ_oo/­_¿žæÍ›GAAA´téR²³³£3gÎM*6"¢³gÏ€‡Qqq1-Z´ˆœI,“££#-_¾\kG1]D÷„€û³°° jllœ¶†mÛ¶QLLŒŽ½¿¿ŸÏ(GGGíÝ»—<==õæÿòË/ ýúë¯Zö€€ ˜rÞéÓ§),,ŒNŸ>McccÓ-sRô‰ÍŒHûüeâå72ò´fdd?þø#lmm±råʇ8ÖŸG£Ñ ¯¯‹-tww£¾¾«V­ÂÂ… ŠÛÝÝ«W¯‚ÇãÁßß_ëÉ îܹƒ+W®@­VÃËË ‹/ž4Öõë×ÑÜÜŒùóçcåÊ•°²²šájg†J¥ÂåË—100'''x{{Oz­ó¸ëœ)jµú‘Üž¸zô£˜5±ÍE:;;õ6P¼½½§l#ÏEæÊzæJs}b›•nä\…ÏçOzlkkkVóðÌ•õÌ•:þmü§Å&‰õ¸Ë˜5æÊzæJÿ6Ø+6 †‰`bc0Lƒa"˜Ø ÁÄÆ`˜&6ÃD0±1&bÊûlƾþÂ`0ô£#¶ÐÐP|÷Ýw£ã?γ‘ ã‘Àþ§6ƒa*˜Ø ÁÄÆ`˜ˆÿŽ@-ÕþÏIEND®B`‚bm3.7.0/doc/html/a00158.map0000644000175000017500000000164311365042640013243 0ustar tlktlk bm3.7.0/doc/html/classes.html0000644000175000017500000003611011365042644014252 0ustar tlktlk BitMagic: Alphabetical List

Data Structure Index

A | B | C | D | E | F | G | I | M | O | P | R | S | T | _
  A  
decoder (bm)   
all_set (bm)   decoder_base (bm)   
all_set::all_set_block (bm)   decoder_little_endian (bm)   
  B  
decoder_range_adapter (bm)   
bit_AND (bm)   deseriaizer_base (bm)   
bit_ASSIGN (bm)   deserializer (bm)   
bit_COUNT (bm)   bvector::iterator_base::dgap_descr (bm)   
bit_COUNT_A (bm)   distance_metric_descriptor (bm)   
bit_COUNT_AND (bm)   
  E  
bit_COUNT_B (bm)   encoder (bm)   
bit_COUNT_OR (bm)   bvector::enumerator (bm)   
bit_COUNT_SUB_AB (bm)   
  F  
bit_COUNT_SUB_BA (bm)   first_bit_table (bm)   
bit_count_table (bm)   
  G  
bit_COUNT_XOR (bm)   gamma_decoder (bm)   
bit_grabber (bm)   gamma_encoder (bm)   
bit_grabber< unsigned char, 8 > (bm)   gap_len_table (bm)   
bit_grabber< unsigned short, 16 > (bm)   gap_len_table_min (bm)   
bit_grabber< unsigned, 32 > (bm)   gap_transpose_engine (bm)   
bit_in (bm)   globals (bm)   
bit_OR (bm)   
  I  
bit_out (bm)   bvector::insert_iterator (bm)   
bit_SUB (bm)   bvector::iterator_base (bm)   
bit_trans_grabber (bm)   iterator_deserializer (bm)   
bit_XOR (bm)   
  M  
bvector::iterator_base::bitblock_descr (bm)   mem_alloc (bm)   
bitblock_get_adapter (bm)   miniset (bm)   
bitblock_store_adapter (bm)   
  O  
bitblock_sum_adapter (bm)   operation_deserializer (bm)   
block_allocator (bm)   operation_functions (bm)   
bvector::iterator_base::block_descr (bm)   
  P  
block_set_table (bm)   ptr_allocator (bm)   
globals::bo (bm)   ptr_guard (bm)   
bv_statistics (bm)   
  R  
bvector (bm)   random_subset (bm)   
bvector_mini (bm)   bvector::reference (bm)   
bvmini (bm)   tmatrix::rstat (bm)   
  C  
  S  
copy_to_array_functor (bm)   serial_stream_iterator (bm)   
copy_to_array_functor_inc (bm)   serializer (bm)   
bvector::counted_enumerator (bm)   sse_empty_guard (bm)   
  D  
bvector::statistics (bm)   
d_copy_func (bm)   
  T  
dbg_block_allocator   tmatrix (bm)   
dbg_ptr_allocator   
  _  
DeBruijn_bit_position (bm)   _copyright (bm)   
A | B | C | D | E | F | G | I | M | O | P | R | S | T | _

Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00218.png0000644000175000017500000000426411365042646013257 0ustar tlktlk‰PNG  IHDRÈ(»µbKGDÿÿÿ ½§“iIDATxœí›mHSïÇ¿Óé"sY¤¹Š·,¬óŲP#÷Æ¢  AQ)½’”žH¤òEO$õ"*z ’•hKmö`a̰@)z´l%éÔ4m›µ}/~ÿFþtgÓÿéé÷»?p`÷}ï\÷÷ºÎ}íœëœ3IB  JЯ üΈ$ "H ô5PZZú3u¿½^É“'÷龜Mlÿ©Íd2 ÈŸg0™LX±b…ÔW‚ …bÐ~Qƒˆ$ "H D @$ˆ@ H@ÉÛ¼ÒÔÔ„šš¬^½Zs¿ Ÿ>}ÂáDZuëÖ_-E2Æ?[ggg'Nœ8-[¶Èj×d2áõë׃ŽM:F£QÖùA–3ÈÓ§OqôèQ9LýVtuu¡  à‡Î‘••åsQ|TŒ†ÎÎwòäIÙíÚívØl6Øl6˜L&˜L&o»½½]öùA–3ˆ`ø\»v ÙÙÙ¿Zƈ‰‰Á³gÏd·›““ãýœ••¿ü‡W¶Äãñ`ýúõP«ÕˆŠŠÂž={ííí0 8pà&L˜€ÈÈHœ:u ›6mBdd$4 Š‹‹½v ±jÕ*Ÿm‹Å­V‹‘#GbÍš5ؼy3®\¹8þ|ˆyóæaĈˆ‹‹Ã¹sçúùh2™ Õj†Õ«WÃívKÚ3hmm…Ñh„Õj•ôA*Æê”b(ÇéÇX¼xñ°}w¹\~õ‚\v$‘zk°wSÃb±P¡PpÆ ìíí¥ÕjåèÑ£YZZÊ––qÛ¶môx<¿>øŠq :¥Êqzýú5üûêûË—/¹qãFN›6MR Ifff233Sò;f³™IIIþœJ¥’_¾|!I>xð€ãÇhž;wrÙ²eÞ¶Çã¡F£aQQN'ëëë½cßÍ‹/h±X¨V«ér¹úé3’ó}¿ðŠ‹‹9{öì~ãëׯgnn®×Ç÷ïß{ÇRSSYZZê×§‰'²¡¡$ýúà+Æê”b(ÇéŸ "å»ÇãáÕ«W¹hÑ"NŸ>û÷ïg{{»ß¸’ $yïÞ=®\¹’“&Mb^^›››ýî3¾Ö»l5ˆV«EHHˆ·=sæLTWW{Ûaaaþ~)L¥RA©TzÛòæÍÄÅÅyÛ …±±±•J…úúzäåå¡©© cÇŽ…Çãñ~766¡¡¡ýôݼysHs?}ú111Þ>‡Ã… zÛ¦Ÿ¶¡âÏ1T§Ã=Nƒù^SSƒuëÖ!>>¹¹¹HOOV\¤ÐëõÐëõ°Ûí8qâæÏŸ„„\¼xQû²%ˆÝnï×nmmÅØ±cå2p7£³³P^^Žüü|˜ÍfÌ;ÁÁÁˆˆˆð©¯­­ áááÏ­V«‘’’‚k×®yû >~ü8w0T‹±”ΟMHHT*ÚÚÚÐÑѯ_¿öKp9q»Ý ¥R‰Q£FÉfW¶"ýÍ›7¨¬¬ð÷}ùcÇŽü«õ=õõõ¨ªª´m0P^^޶¶6@mm-?~ …B›Í†øøx¤¤¤ 88µµµèîîöÚ±Ùl¨¨¨ôôôàøñã0 ë2 °Z­xòä àóçÏHJJBYYÙ}ô…?‰ñÏÐ(z½ صkÌf3t:vìØwïÞÉ6ÇíÛ·a4‘œœ ’¨©©ÁÙ³ge³/[ 2gÎN:•©©©ŒŽŽfFFûúú¼×¨ßxñâ…÷ú•$úÕ 999Ôëõ>Ûk×®edd$ “““™À’’6773**Š©©©4 ÌÈÈ V«å’%Kh±X8eÊΘ1ƒ)))Ôh4LKK£Ãáôëûk{’Ü¿?Õj5ÓÓÓ9qâD._¾œn·{€$™––P ’˜˜Èyóæ±®®Î¯¾b¨N)†rœ«Añýýû÷ܾ};g̘á7.Ô ¥¥¥Þzç[­4\|­wY䇃7oÞìWhÊIkk+?~ÌÆÆFÞºu‹.—‹±±±¬­­%IvuuñÆlll$I677óöíÛ´X,LJJ¢Ëåâ;wxÿþ}z<žai°Ùl¬ªªâ£Gd󩪪Š’>|#ÐË­ó{Ün7ívû°÷ÿúõ«,:ä²Cú^ïŠÿ @¡Püvÿ(lhhÀ‚ páÂÄÇÇÃl6£°°MMM’×¶•••(((@]]]¿þ–––Eî÷Ìš5 ÃÖû£íÿ©Z~G|­÷?êIzbb"NŸ>={ö ££:W¯^õ[ø©Õjètºý!!!7nœÏýFŽùéýÑöÿT-ÔD øQøZïâuw@‘ "A D‚ˆ$ "H D BêÑ»ØÄö_Ú†ô’’_CÁ¿½^? Ïç“t@ j@‘ "A þ$]lÜV† €IEND®B`‚bm3.7.0/doc/html/a00178.png0000644000175000017500000000421311365042644013254 0ustar tlktlk‰PNG  IHDR³(µµËsbKGDÿÿÿ ½§“@IDATxœímHSïÇ¿êæBsšiµ | +${aµ²B…,‚b/z@H„ 4**‰¬ (2{…ô@0“DÍ_A-³Œ%?M$A+Ë¡+k©¡¥Î‡íûñÃóo>ÌY+mÜŸW»Î}{]ßsŸ¯‡ë>ž¡IB øû©vŸj³f¸ ÂÌ—A6ò@KK ªªª¦B‹@à0[·nul”™+++±mÛ¶?"H øYÆzn1ÊÌö& SM~~þ¸7[Ñ3 \afË Ì,p„™.ƒ0³Àef¸ ã>šs”¦¦&TVV"%%Å r~®Îׯ_‘——‡ƒþV Ó{kóíÛ7\¼x‡vjM­V‹æææ1Ç ÑhœZÏ~ùÎÜØØˆË—/;CËO×éêêÂÕ«W¥855uÜ…žj&£Íѹ­ÍñãÇ'#Ñ!ÚÛÛa4a4¡Õj¡Õj¥¸££Ãéõá—ïÌÓàà`¼~ýZŠyò„vµ·¶¶ÒÇLJ%%%ìííåÉ“'D«ÕÊOŸ>ÑÇLJׯ_§Ùlæ;wèååÅÆÆF644pöìÙ6¹¢¢¢XVVƶ¶6zzz2--ýýý|ÿþ=ýüüøðáÃIi9·»»› …‚%%%4›Í|úô)ÝÝÝi2™ì®Mkk+ Iòû÷ïT©TÌÍÍ¥Ùlfyy9•J%Ÿ={6ªþ»wï¸ÿ~FDDØÕI’»víâ®]»ìÎ)**âòåËyãÆ šÍæ sއþë3Ïš5Ëæâ9r„›7of[[ðû÷ï$É7oÞP&“qpp$ùòåKÎ;÷—ëühf’\°`kkk'ÌyîÜ9&%%IñÀÀÏœ9Þž^¾|™±±±6ó·lÙÂ'NLhfüøñ£4ËÂÂÂIi9×l6³¦¦F6éÛ·oí®Íf.((`tt´MôôtîÝ»—$iµZyÿþ}nÚ´‰‹-bNN;::&Ô鈙IòÅ‹ܱc.\ÈÌÌL¶´´L¼#°gf§ôÌ!!!ËåR¼dÉ”——K±··7ÀÍÍ …2™LŠYg² „‡‡K±\.Ç¡C‡F£Ñf """ÐÚÚêPn•J%}žìyŽ…B¡@MM 233ÑÔÔX­ViÜ‘µ1 hllDpp°t¬¯¯7nDee%ÒÒÒ‰½{÷"..Î)º$&&111hooG^^Ö­[‡¨¨(;%¿SÌÜÞÞn›L&øûû;#õo­ããã“Éds¬¸¸qqqP*•¨¯¯·ëè耯¯ï˜¹zzz~Z‡#ܹsGŽAQQV­ZøùùI㎬R©Äš5kðàÁéX__ÜÜÜPWW…B/_¾ ³³CCC6¿ÎÄb±€$d2fΜ鴼NÙ Ü»wÀÏ5¯\¹‚7N:OMM t:ݸ±³ê “€þùG2tUU¶oß$$$ ¬¬ ïß¿ðß&³¨¨ñññËåèêêBgg§ôsMMM?­ÃŒF#"##±fÍxxxàùóçèîî–ÆY›øøxèõz444z{{±|ùr””” &&µµµ8uêŠŠŠŠcÇŽáÇN;‡ŠŠ h4¬\¹$QYY‰›7o:-¿Szæ+V0,,Œ±±±œ7o900 õü}ûÖ¦·­­­µé™3223fl¯ÎÈžyÙ²eT«Õ¬®®žPFFG¥RÉÜÜ\i,++‹~~~LHHàìÙ³¹{÷n’¤Åb¡Z­fPP“““©V«©V«mzæY»v­Ô3OFÛs[ZZ8gÎÆÆÆ2>>ž‰‰‰ arr²Ýµù±g&Éœœ*•JÆÅÅqÁ‚ܺu+-˨Ú?~dVV/^<¡NGzæÂÂBiï0¼gú~ëp˜¾¾>>~üØf“ò;«ŽÅba{{»›L&êt:vvv:”óÍ›7ÔétcnHš››©Óéøúõk›ãƒƒƒÔëõÔëõ“º8“Ñ6rnWWËÊÊXWWG’liiaEE…4ßÑk`4©ÓéX__?¡†¡¡¡ ç8‚³òØ3³iû•’á7ùéß4ikk³»A\ºt)¢¢¢þ ¢ÿ3µMgìø³Ú%þ8r¹ãŽ{yyýA5¶Lgm+.m怀lذaªeŒÉtÖö·"^¸ ÂÌ—A˜Yà23 \afË Ì,p„™.øϙýúŸ@ð»eæÕ«WãöíÛS¡E ø%F½›!ü¥ˆÿi"p„™.ƒ0³ÀeøJžfnCxz¢IEND®B`‚bm3.7.0/doc/html/a00212.png0000644000175000017500000000467511365042646013257 0ustar tlktlk‰PNG  IHDRØ(œ²4ôbKGDÿÿÿ ½§“ rIDATxœí›{H“íÇ¿êt•ø¸J«˜¼ÚL¢‚ŒÂU¨”QQTH¢?" ¢"¢+ ‚Π%R[A˲ƒè`gÊC¤8kµ2›iNÃ}ß?úõÐÚv»õÛò5îÜà}xîë{]×sÍÝ!$ ‰DB;Z€Dò7# L" "²À$’ ¢ñ6a4ÿ¤‰¤Ó“ššŠøøx×Az€l²ÉæGËÍÍu«#¯¿Á 77sæÌ-‘H$BBB<ŽË3˜DDdI$AD˜DDdI$AD˜DDdI$A$ öêÕ+?~<[ùMaa!îÝ»‡úúzlß¾½C4t6‚«¹øt–|¤ÀÊÊÊpðàÁ@lå7F£·o߆ÝnÇ‘#G|ºfáÂ…¨ªª ²²ŽEä£?±ò‡¹øt–|ÿ5_P^^îÓÚ‹/Ân·YQÇ"òÑŸXýWé,ùX9N,[¶ Š¢ W¯^زe  ®®ؽ{7âââ‹£GbÕªUˆ…^¯G^^žºÏŽ;0þ|¯ý¼¼<$$$ k×®˜6mš¸÷ïßcÊ”)êºuëÖ!66Z­ãÇGmm- ;;6› ÙÙÙ())œ:u IIIÐh4Ðëõرc‡‹öÜÜ\$&&"22 ,@[[àòåËHNNFDD†Ž¨öŸ={†1cÆ K—.0`Nž<Ùn ý•7¿úh³Ù0aœ8q:W¯^u‰•ÈÞrÑžÿÞr#Ò"ò¡¤¤K—.ÅòåË¡( úôéƒÝ»w{Œ\»v C‡…V«Å AƒPXXèÑÆ‹/|ŠƒÑ»ˆžÞ­ò„ÉdbHHW®\ɦ¦&–””0::šF£‘V«•¡¡¡\¿~=N'÷ïßOܺu+N'·oßΤ¤$u¯ÂÂBîÝ»×cÿñãÇÔjµZ,víÚ•Ó§OçíÛ·Y^^®ÆJä‡Q.DÚD¹iù`2™¨Ñh¸bÅ 655ñæÍ›ŒŽŽæ… ÜbñîÝ;FEEñرct8,((`·nÝXVVæf£¥¥Å§ûŸô^/+°îÝ»³µµUËÉÉáôéÓiµZ €$ÉŠŠ j4~ûö$ùðáCöîÝÛ';«W¯æìÙ³]ÆRRRÜ ¬  €qqq|þü9Éï7c}}½zMß¾}ùèÑ#’¤Ãá`ii©:g±X¨ÕjYYY©jûö­:o0h4¹sçNN™2EommåÖ­[ÙÔÔļ¼<>ÜEç²e˸bÅ ¡þĪ=?ûh±X€oÞ¼!I—X‰ü!Ê…H›(7"-"L&Eq)ˆœœfgg»ÅâàÁƒ4 .ÚfΜÉM›6¹Ùðoõ"|Ù×®ö‡ ‚+W®¨ýÈÈHß_ŠÔjµÐh4jßWÞ¼yƒääd—±Áƒ»­›À?ÿüƒˆˆµ?dÈ»­«­­u±„Åbà=N¿KÀÎ`?~téÛl6ôèÑ#PÛºwï›Í&´ $±k×.ÔÕÕÁh4Âáp`ÆŒ÷,((@NNÖ­[‡ŠŠ Ü¿ݺukWKTT>þì2vöìYØív(Š‚´´4TWW»´øá­mxû ù!B” ‘6QnÚÓ"ú0þõ>øðᢢ¢ÜÖ)Šâ¶¶®®ÑÑÑíÚøV`ÕÕÕ8þ<àË—/8tèÏŸØ?SZZ ³Ù챟žžŽ¼¼Þ¾}ëÑ^mm-Œ´´4„……áÎ;hhhhWgff&Î;§ÞdwïÞży󆌌 ”””àåË—€¯_¿bĈÈÏÏ÷/eCä‡Q.DÚD¹ù]-À÷<þxXÑØØˆÃ‡###ã¿EEExýú5€ïÇΜ9ãqm@ð÷;¥'L&GÅþýûÓ`0°OŸ>ÌÊÊbkk«z®øAee¥úÝ™$=zär[¾|9SSS=öN'çÎKNÇqãÆ1>>žYYYng0‹ÅÂøøx¦¤¤0==ÑÑÑ<|ø°ºç°aÃ8fÌ>xð€555ìÕ« 322˜••ÅÄÄDN:ÕM;IŽ;–F£QÕÃôôt*ŠÂ}ûö©ëvíÚEEQ˜žžÎ¾}ûrÖ¬YlkkÆÑßX‰lüì£ÅbaXX˜zÝϱjÏoˆr!ÒÖ^n¼iù`2™Ø¯_?&''3--z½žcÇŽess³[,HrÆ ÔétÌÌÌdÏž=¹dÉ6üÁ[½¤À~ÐÜÜÌââb—‡ÁàéÓ§,**¢ÝnWÇÚÚÚøñãGµïp8xãÆ ^ºt‰ïß¿w¹Þf³Ñl6óÓ§O$I»Ý΢¢">yò„$YSSÃk×®ù¤¥¢¢‚f³™555nsµµµ4›Íê>x³ñ«?ók¬H±"<å¢=m¢ÜøªågL&GŒÁ––^¿~wïÞuy ê)UUU4›Í,//÷Ë_ox«—ÿMº"ÿ£9ÀX­V—?¿’’’‚¡C‡þAEÞéLZÏŸ?7úü÷»`à­^öQÒ>ááሉ‰ñ:ïËÕ?EgÒª( ’’’:Z†GdýAbbb0qâÄŽ–áI«Á`€Á`èhùkÞE”Hþ‹È“H‚ˆ,0‰$ˆÈ“H‚ˆ,0‰$ˆÈ“H‚ˆ,0‰$˜ˆ^ýM6Ù|o~ý?ØéÓ§½MI$¤¦¦ºy}Q"‘üÿÈ3˜DDdI$AD˜DDþ5xöÑ¥FIEND®B`‚bm3.7.0/doc/html/a00143.md50000644000175000017500000000004011365042634013136 0ustar tlktlk81aba35d4f027b5cadec342aa5859a03bm3.7.0/doc/html/functions_enum.html0000644000175000017500000000506611365042644015657 0ustar tlktlk BitMagic: Data Fields - Enumerations
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00240.png0000644000175000017500000002164411365042650013246 0ustar tlktlk‰PNG  IHDRÃYÔbKGDÿÿÿ ½§“ IDATxœíÝyPgúðïÀ #‡¨¯¼@%¢#Í¢&ct#˜èšrWã‘ìªë‘”K¢Ñ˜ŠÑ¨µ‰JË£L8J–CM«¢¼¢(‰DAP$ ˆ ¢\3Ïïö20Ý3(Í€y>UVÑ==ý>ý¾ï|íîacL6Ö.€1öôâ€aŒÉ††1&ek5ÛZM1ÆÌ m•v­u“W¡P´F3Œ1 ´Ö{;­v}ô‚ƒƒ[³IÆX)))X»vm«µÇ÷`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ¦MLQQ’““Ÿšv¬íâÅ‹øöÛo¡ÓéŒÖß¿QQQM~n+*++cí2Ëen™Ó&¦  xjÚihÆ (..nÕ6wî܉ݻwãÇ4Z_UU…={ö4ù¹­¨ªªÂ?ü ,ËÕwrì×s«-j“ó4;{ö,ªªªZ­=N‡ÌÌLL›6 )))­ÖnKèÚµ+¾ýö[aY®¾kí1ù#i³CDøúë¯ñÚk¯aÊ”)ˆŒŒTTT`éÒ¥ˆÅÔ©S1yòd$%%á›o¾ÁäÉ“ñæ›oâèÑ£Â~bbbðù矋.‹µ³iÓ&|ÿý÷Âv÷ïßǼyópóæM@^^þþ÷¿cüøñ˜9s¦Ñ‹÷üùó˜5kƇ¹sçâÊ•+€Õ«W£¼¼«W¯ÆÅ‹¿üò fÏžqãÆáwÞÁÉ“'åååX¾|9:„‰'â÷ß7ÙOuuu’ýxäÈøúúâ­·ÞBqq±P‹9buI_sk¤ÇçÎ;ø×¿þÀt߉©¾KIIÁŒ3Œ7ß|S¸ô’cL›[DëžqNž<ãÆÃ?ÿùO”””IÍ»¶¨ÍÌ•+W`kk‹øøx¬Y³ÑÑÑHMME}}=222pïÞ=ÄÆÆâ¯ý+Ö¯_$$$ 44»víöÓ³gOôë×OtY¬çž{Îèôüĉ0 èÚµ+ª««ñÁ`ìØ±øá‡°dÉlÚ´ —.]BII V®\‰9sæàûï¿GPPV­Z"ÂÒ¥Káì쌥K—ÂÇÇwîÜAxx8BCCñã?bÞ¼yøôÓO¡ÕjQWW‡ÌÌLœ8q_|ñ<==ú§¸¸ß|ó fÏž-ÙGŽÁøñãáììŒ!C†X4!¥ê’:¾ÆÎœ9ƒyóæá¿ÿý¯hØHOMM 222 IßIAã¾suuÅ_|  99«V­ÂöíÛQ^^Þ¢cÒ˜ØÜºÿ¾h=çÎCRR¶nÝŠýû÷ÃÁÁß}÷Hs[ÕªŸEj'''Ì;J¥ƒ ”)S’’‚AƒˆðöÛoC¡P`èС°µµEXX˜°¼oß>a?#GŽ4Úoãe±v–,Y‚­[·B§ÓÁÝÝGEHHàôéÓèÔ©&Ož 2d^}õU?~nnnxþùçñÒK/Þzë-ØÚÚ¢¶¶NNNP(prr‚R©Ä‰'àííW_}ˆ#FàØ±c AMM -Z„Î;xø?â¹sç€7n`âĉغu«hæååA«Õb̘1€1cÆ`Ïž=X°`ä‡O¥êêСƒèñ©Õj£ýŒ5 ]ºtAbb"vî܉ñãÇcÒ¤Ipww·x|ŽSþKKKƒ°°0£¾«««ÃÖ­[ѧO€‡‡”J%ªªªàééùDc"Eln9R´žÚÚZÏþðñÇ£¾¾€ô¼óõõ5[5´Ù€éÖ­”Êÿ•÷ì³ÏâÂ… Âr‡<ü”¶J¥‚­­­°Üí¸¸¸Àßß©©©?~<.^¼ˆððpÀÍ›7QPP€·ÞzKx^MM FŒ½^îÝ» ë•J%Þ~ûm“m—”” GFëzôè!¼Û£P(„‰œ™™‰7¢W¯^˜:u*üýýÍëáÇóçÏðpÒ–––â—_~Á!CDŸ'U—ÅÇ À€p÷î]|ÿý÷X¼x1¼½½±fÍÉÚÍ‘À¸ïT*®\¹‚íÛ·£¨¨FôÓÄÍsÄæ–T=/¾ø".\¸€÷ßNNN6lþò—¿ÀÉÉÉì1·Em6`îÞ½k´\^^ŽŽ;¶j;ÁÁÁ8pàÔj5„õ àá Öû 66M»zذaHOOÞ"½sç~úé' :´É¶ ÀŽ;0gΤ¦¦bÆŒؽ{7JKKM÷Å‹qûömLœ8={öþ??ýô“pÚmŠT]Í9>àá ÓÕ«Wãý÷ßnz®X±BxÜÜøˆ‘ƒÆJJJЫW/ <666¸téîß¿ßìco.±¹%UOtt4/^ [[[ôï߯¼òŠ0ÆÍ9涢͞Áøøø`Û¶mˆ‰‰Aaa!úô郉'¢¢¢¢Yû9tè._¾ŒáÇ›\kìíí1bÄ\¾|Æ öÙ½{wÌž=ï½÷ú÷ï‚‚ 8úÓŸ P(ŒY³fÁËË ÙÙÙ˜?¾ð¿¶««+þýïãÿøúöí‹°°0Ì;ýû÷GNN^~ùe¼ð Fï44hÐ 4eee8pà–/_ŽÝ»w7ÙîÈ‘#xá…šœõaóæÍøùçŸÑ·o_“mx{{‹Ö@òøJMME||<þüç?ã£>.c›3> 5î;±1hºØ»w/-Z•J¥R lÛ¶ Ÿ}öÙ‰±¹uûömÑz/^ŒƒböìÙpqqÁ•+W„K\©y×Vµê7Ú5÷ §jkkqéÒ%899 7Ääð¸í”––"??]ºtAïÞ½+,,ÄÍ›7ѳgO£›šååå¸zõ*úõë'¼øoÞ¼‰ÂÂBtíÚÕèþ†% ƒèÙÓ’ªKìøZ²6"Bee%4 Ó}'5 Ý¿YYYpuuÅsÏ=N‡ââbøùùµø˜4$6·¤ê©««CVVjkkáíí £}Zz̦<ú©ÖúF»60ŒµUeeeFo:4öÜsÏÁËË«+²LkL›½Db¬-S*•pvv}¼ñ[öT0Œ=gggáž×fßEbŒµ0Œ1ÙpÀ0ÆdÃÓ  cL60ÌbõõÔ׬]kG8`˜Å23K™Ù¼_—gl­ú›¼¬}ëÒåá×”–¶Ï/âfÿóÔý&oÃ/bíOm­Ë—Ÿ|÷] ììøä—™×jÚZM1$&^ð0`û`òdëÄÚþoˆY$.î|¸ð¼½{÷ÒóÏ?ODD÷îÝ#Ú²e UWWSJJ i4:yò$iµZêØ±#%$$Ðýû÷iíÚµÔ«W/2 tçÎòðð cÇŽQmm-ݼy“:vìH»wï¦êêjJLL$ÊÎÎ&­VKööö4eÊ:uêÕÔÔõѵk×héÒ¥Ô¯_?ɾ8p EDDѸqãhÉ’%ÂcZ­–Ôju“ŸÍÕ%v|ÅÅÅÑСCiÏž=T]]m²>©ñ‘êçââb²³³£¹sçRMM ååå‘‹‹ :tˆ²²²¨sçÎFíøùùÑáÇ›5ÌsÃñ)--%µZM T]]M©©©dccC:®EÇݔ澾äÐîÆÕÕ•jkk…uááá4eÊ*..&tïÞ=""ÊÉÉ!¥RIuuuDDtáÂzæ™gž¸NG*•Š~ÿýw"" &~LL ùûûíkáÂ…´xñbúòË/éõ×_Ö×ÖÖÒºu먪ªŠˆˆ<==)##ƒˆˆ"""(((Èh?S§N¥Õ«W“V«%TTT$|8€‡—,EEEHMMmr ai].,9>@@@JKK±cÇŒ3~~~ˆ—¬îçG<<<„Ÿ›3ö–Ìsí7µZóçÏcÅŠ¸zõ*:uêƒÁ`²íæŒ{{Ñ´ÔhY§Ó¡S§N­ÚÎôéÓ{{{L˜0AX¯Ñh0jÔ($'' Ï{ðà Ö¬YNg´ÏøøxÃÙÙÙh½F£Áo¿ýf´®¬¬LØ®ádW©TP«Õ())ÁíÛ·Q__oŒ¢££ñé§Ÿâ7ÞÖ/X°QQQ’#U—ÅÇ×^¯A©TÂÉÉIt»Æuˆõsyy¹Eûx¤ªªªYÛ›k¿´´Ôh|ޏ¸8Œ9¶¶¶pqqݯ¥ãÞnXóôéq.‘ÐÁƒ‰ˆ¨¢¢‚|||hË–-Â)î#¹¹¹äèè(,gdd]"¥§§Srr²Ée©vˆˆ*++ÉÑÑ‘|||Œö‘““Ctùòe""ªªª¢PTT=z”ÜÜÜèÖ­[DôðÁÞÞž*++‰ÈøT9##ƒéÚµkDôðÞ‡››%%%‘V«%[[Û&}“––FaaaÔ³gOZ¹r%šìÃãÇ]=²k×.ruu¥ššÑK$©ºÌ_cÇŽ£°°0zöÙgiíÚµ¤Ó錗©~n<ˆˆFM±±±tõêUR*•Âåã™3g€Ñ%Ò#RóGªýÆãóõ×_ÓèÑ£…åS§N‘B¡0y‰ô8ã.¥-\"µ»€1bõéÓ‡‚‚‚¨k×®BµµµÍ˜E‹Q@@€Ée©v £=z÷-Ù¸q#i4 &OOO ¶Y´huéÒ…‚ƒƒI£ÑED4dÈ ¤ôôt""Z¹r%¹¸¸Ð¸qã¨sçδ`Á""³íÆ´råJòõõ5ùø»ï¾K“&Mj²¾¼¼œÔj5%&&ŠŒT]掯¡ØØXá¾È£{I‘x?KŒ^¯§ÀÀ@êÕ«Mš4‰)00°Ù#Õ~ãñ)(( www ¢±cÇRHHyyy cÐRãnJ[‘µÎž}!Ns¿pªºº§OŸ†³³3üýýå(í‰Ú)**Â¥K—àéé ___£Çrssqýúu 0=zôÖ—”” ##LJ««+€‡×ú999èÝ»w“kssôz=lmm›õKIÕ%v|rÔ&ÕÏbêëëqæÌÀˆ#„{,r¶_QQ³gÏÂÝ݃†V«E^^FÝâãÞÐã¾¾ZR» ƘymáõÕî~ÑŽ1Ö~pÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60ÌbYYÅÈÊ*¶v¬±ú§©£¢¢PWWgí2˜òó5€Þ½+¬\ ³Dll,¦OŸnÕ¬0.íHaaG0íEhh(¬ZƒU?‹ÄÚ³gó0yò×€ÄÄà…ž³rE¬=à{0Ì"û÷ÿ•Ê*•-öïÿÅÚå°v‚†™U_o@BB:êêô¨«Ó#!!õõ¦¿ö‘±†8`˜Yii9(/¯–ËË«‘––cÅŠX{ÁÃÌŠO‡Rù¿©¢TÚ >Þ²¿£ÄþØ8`˜¤ššz$%e¢¾^/¬«¯×#))55õV¬Œµ0LÒá×ðàAÓ_%xð ‡_²BE¬=á€a’ââÒacÓôÏeØØ(Ç—IL UQñ))YÐ뛾c¤×’’…ŠŠV¨Œµ0LTRR¦è_!ƒÁ€¤¤ÌV¬ˆµ70LTl¬ùK K¶a\0Ì$®§NåÂ`ÿ$‰Á@8u*:]e+VÆÚfÒ²lËþXøÃŽÌbï¿ÿ-`ëÖ™V®„µ|Ó  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0Æd£ "j¸âĉøê«¯¬Ukî\qôëwÇÊ•°¶háÂ…x饗ŒÖ59ƒ)((@lll«ÅÚ~ýîp¸0“bccQPPÐd½Rì ûö퓵 ÆØÓC¡P˜\Ï÷`c²á€aŒÉ††1&Ƙl8`c²y‹zõ*öìÙÓ¥´v¬--- k×®…V«5Z_YY‰uëÖ5ù™=žýû÷ãìÙ³Ö.ã©÷Ä“ˆˆˆ–¨¥M´ÓМ9spýúõVm3<<«V­ÂÎ;Öß½{Ÿ|òI“ŸÿÈžd|bccqêÔ©®¨í²Æ\øIRrr2îÞ½ÛjíàäÉ“X¶l¢££[­ÝöªµÇ§=³V_µHÀ ,\¸îîîøüóÏeee;v,6mÚ„nݺÁÍÍ »ví²eËàææÄÄÄûÙ°aÞyçÑe±væÏŸíÛ· ÛUVVbذaÈÏÏdff"00:t@ß¾}%l{äÈøúúÂÎÎþþþHOOL›6 :Ó¦MCZZàøñãðóóƒZ­Fÿþý±ÿ~€N§Ã+¯¼‚½{÷ÂÅÅ—/_6ÙO555’ý…_|Ë—/G^^žP‹9buI_skÌT[b5æççãå—_6jgÚ´iøù矅ù ///8::bÖ¬YÐëõ&ÇGjœcbbлwoØÛÛcòäÉ¿ØÄö)U›%ÇdékB¬}Ss.::ÞÞÞP*•ðððÀ† „¶[z.[Œ‰ŒŒ$«Eþøc2 ´mÛ6@ëÖ­#ƒÁ@ëׯ'oooa_û÷璘¾úÊä²T;[¶l¡áÇ ÏÛ»w/=ÿüóDDtïÞ=òðð -[¶Puu5¥¤¤F£¡“'O’V«¥Ž;RBBÝ¿ŸÖ®]K½zõ"ƒÁ@wîÜ!:vìÕÖÖÒÍ›7©cÇŽ´{÷nª®®¦ÄÄDrpp ììlÒjµdooOS¦L¡S§NQMMQ]»v–.]Jýúõ“ìËRDD7Ž–,Y"<¦ÕjI­V7ùÙ\]bÇ×X\\ :”öìÙCÕÕÕ&ë“©¶¤jÌÊÊ¢Î;µãççG‡¦ââb²³³£¹sçRMM ååå‘‹‹ :t¨ÉøHó/¿üBjµšâââèÁƒ´yóf@›7o–©}JÕfî˜,}M˜›» ç\ii)©ÕjJHH êêjJMM%Òét-:—Å ÈÈȦë¯xœ€quu¥ÚÚZa]xx8M™2…Š‹‹ Ý»wˆˆrrrH©TR]]]¸pžyæ™'nG§Ó‘J¥¢ßÿˆˆBBB„‰CþþþFûZ¸p!-^¼˜¾üòKzýõ×…õµµµ´nÝ:ªªª"""OOOÊÈÈ "¢ˆˆ 2ÚÏÔ©SiõêÕ¤Õj   JJJ¢×^{ú÷ïO7n¤²²2Ñãûõ×_ÉÎÎŽnß¾MDD;vì OOOÒëõD$0Ru™;¾ÆÎœ9C3gΤîݻӊ+¨  @´ÞƤڒªÑÜ‹ݸqCx,((ˆbcc‰Èx|¤Æùƒ> ·ß~Ûè±Aƒ™ ©}JÕfÉ1Yòšj¿ñœ«®®¦óçÏ Û=š#¹¹¹Múª¹sÙb#úY¤æðòò‚J¥–ˆ””aÙÑÑÀÃÏ+¨Õj(•Ja¹%ÚqssCpp0âââ0sæL¤¥¥á»ï¾ðð<;;½{÷ž÷àÁL˜0õõõèÛ·¯°^¥RáÃ?4Ùvaa¡Ñ¶Ð¯_?áÝtëÖ ÀÃO¤Ï;>>>X¼x1‚ƒƒÍkdd$ˆÇð𒥨¨©©©MN·-­ëÑiµ%Ç@ii)vìØ1cÆÀÏÏñññ’µûY¬-s}gއ‡‡ð³X?Js]]|}}¶÷ññ1Û®Ô>›S›)–¼&̵ßpΩÕjœ?+V¬ÀÕ«WÑ©S' “m7g.?© ˜ÒÒR£eN‡N:µÄ®-ngúô鈈ˆ€½½=&L˜ ¬×h45j’““…ç=xð …kÖ¬N§3Úg||<‚ƒƒáììl´^£Ñà·ß~3ZWVV&l×pb¨T*¨Õj”””àöíÛ¨¯¯7 ÆÆˆÑÑÑøôÓOñÆoë,X€¨¨(É€‘ªËÎÎÎâãkH¯×ƒˆ T*áää$º]C;vmË\ß5VUUeQ› IóòåË›ÔÖx.5wŸåååͪ¯¥©´´ÔhÎ%&&"<<qqq9r$lmmáââ"º_Kçòk|Jó8—HèàÁƒDDTQQA>>>´eËátð‘ÜÜ\rtt–322Œ.‘ÒÓÓ)99Ùä²T;DD•••äèèH>>>FûÈÉÉ!º|ù2UUUÑ€(**ŠŽ=JnnntëÖ-"zx‰`ooO•••Dd·EªÀMIDAT|Z™‘‘AŽŽŽtíÚ5"zxïÃÍÍ’’’H«Õ’­­m“¾IKK£°°0êÙ³'­\¹’ MöáñãÇ.Ùµk¹ººRMMè%’T]掯±cÇŽQXX=ûì³´víZÒétFKT[R5^½z•”J¥pùxæÌ`t9ÑÐèÑ£M^"IsBB¹»» —3¿þú+©T*³—HRû”ª­9Ç$õšj¿ñœûúë¯iôèÑÂò©S§H¡P˜¼Dzœ¹lä¼3bÄêÓ§Q×®])$$„jkk›0‹-¢€€“ËRí<F=zôî[<²qãFÒh4Lžžž*l³hÑ"êÒ¥ “F£‹ˆhÈ!HéééDD´råJrqq¡qãÆQçÎiÁ‚DDf寴råJòõõ5ùø»ï¾K“&Mj²¾¼¼œÔj5%&&ŠŒT]掯¡ØØXá£ûI¹¶ÄjÔëõH½zõ¢I“&Q`` Z0ÇGlœ ͘1ƒ\\\h̘1Ô³gO 10Rû”ª­9Çdî5!Ö~ã9WPP@îîîDcÇŽ¥òòòæUKÍe1bÓäí¢¢¢0cÆ 4ZmVuu5NŸ> gggøûû?ÑY•íáÒ¥Kðôôlr=ž››‹ëׯcÀ€èÑ£‡°¾¤¤>|8\]~›[~~>rrrлwï&×±æèõzØÚÚ6ë9–’ªKìøä¨Mª-±ëëëqæÌÀˆ#„û昩qÎÌÌÄ­[·ð /@£ÑX|LRûó¸Çô$íWTTàìÙ³pwwÇàÁƒ¡Õj‘——‡Ñ£G·ø\nL¡P 22Ó§O7^ßRÃX{S\\lôfDcƒ ‚ŸŸ_+VÔ~‰L‹Üäe¬=R©TèÒ¥‹èã­XÍÓ‰†ýauéÒ¯¾úªµËxªñg‘c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ñ߃á¿OÍ{R¢Öšu0ÆžBM>‹Äc-…ïÁ0ÆdÃÓ  cL6J¿Z»ÆØÓéÿýOσC˜¶IEND®B`‚bm3.7.0/doc/html/a00077.html0000644000175000017500000001374611365042652013444 0ustar tlktlk BitMagic: bm::ptr_allocator Class Reference

bm::ptr_allocator Class Reference
[Memory Allocation]

Default malloc based bitblock allocator class. More...

#include <bmalloc.h>

Static Public Member Functions

static void * allocate (size_t n, const void *)
 The member function allocates storage for an array of n void* elements, by calling malloc.
static void deallocate (void *p, size_t)
 The member function frees storage for an array of n bm::word_t elements, by calling free.

Detailed Description

Default malloc based bitblock allocator class.

Functions allocate and deallocate conform to STL allocator specs.

Definition at line 104 of file bmalloc.h.


Member Function Documentation

static void* bm::ptr_allocator::allocate ( size_t  n,
const void *   
) [inline, static]

The member function allocates storage for an array of n void* elements, by calling malloc.

Returns:
pointer to the allocated memory.

Definition at line 112 of file bmalloc.h.

static void bm::ptr_allocator::deallocate ( void *  p,
size_t   
) [inline, static]

The member function frees storage for an array of n bm::word_t elements, by calling free.

Definition at line 126 of file bmalloc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00227.map0000644000175000017500000000023011365042647013236 0ustar tlktlk bm3.7.0/doc/html/tab_l.gif0000644000175000017500000000130211365042626013472 0ustar tlktlkGIF89a ,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ, ,ÿ@–P±É`H$!%CqVe2X­ŠÌJ(“Ä +€˜3 2$ÀÆ ¼kvŠä-Ëçõu*…"}ã|}|~q(" $f„ 'Žl(Œ&&$r‘™ › & ! )¢¤›{¨£¥r­ª°©¯„±¯¬´¦·»º³®«§¾¶ÃÂÀ¿²¹ÇÄËÆ²ÌÉεҽͼ„ÔÈÓ×иÙÝÕÏÙÊâÜßãçæê¾äÛÅëÇíáîÖìéïøñ÷õüÑðåùü¤Pß?‚ƒœÇÛBm åAœÎáÀ†%V܈î!Çk÷Ø/áÄ;^¤¨²$Æ–#Mf)f͇(WÎL‰“æKçÒ„° ’I)L:eD ¡Cµ´x*4 U¨h  %A«£^ÁNKb¬Ùe§X±‚´k»x!ÁÖí—2tÝÖ !¯š5tÛæé—À]$¬´%ƒXíâ.i[¬]Y­•ÊfžEëõkg`µ††:zëçÒž;£}ºµj×aa‹–Mš¶é׸cçž½»vïÛºƒóî›8ðáÈ‹'?®¼9óç©G_>Ýyuè¬_ßž]zwêß­‡Ç¾º¼mîæµG~½ûôÞთ/ž>ùööÙ«Ïÿ¿ÿýÿÅà|ÖWà}v;bm3.7.0/doc/html/a00159.map0000644000175000017500000000227511365042641013247 0ustar tlktlk bm3.7.0/doc/html/functions_func_0x69.html0000644000175000017500000001073311365042644016431 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x6d.html0000644000175000017500000000712411365042652016767 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- m -

  • min_value() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x73.html0000644000175000017500000001733411365042644015415 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- s -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x69.html0000644000175000017500000001313511365042644015415 0ustar tlktlk BitMagic: Data Fields
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00151.map0000644000175000017500000000031311365042636013232 0ustar tlktlk bm3.7.0/doc/html/a00185.png0000644000175000017500000000370411365042645013257 0ustar tlktlk‰PNG  IHDRˆ(%¦²¼bKGDÿÿÿ ½§“yIDATxœí›}HSíÇ¿¦k–¥¥®4K‚ŠË–LÉÖÓUÑ@0 û«HC¬¨ ²"ûCÒF)$È$Kÿ°¨•o™Šsö¢_f®i†™éÜ®ç~wŽÎöëé©ûç뺯ûºîsÎ×ûÜ÷9Ó…ˆ óþí0~m˜@‚00qãk(--ý™ã`üÈd2NuØñ‡ÅÅÅÓtÀ;ƒ@qq1’’’„B¿ ...výl „ „!C&† L A˜@‚nsg‹Á`@]]RRRœ‘nNu>}ú„›7oâøñãsÊ=66Fƒ¦¦&X­V„††"99žžž\Laa!ŒF#gÏ›7ؽ{7¼¼¼®Y^^‹Å‚}ûöq¾êêj´¶¶"--ó½yóååå8qâ\]]çt~sÅ)3ÈÛ·oqãÆ g¤šsÏŸ?£  €³<ˆŽŽŽYåíêêBXXrrr ‘H°jÕ*h4áÅ‹\\^^´Z-zzzÐÓÓƒÁ€ììl„……a``ÀáóikkCVVÖ_vv6ÒÓÓ§±¤¤æ§‹€ð›T{oÖìQQQA2™lV±?‚#uH¯×Ï*6::šöîÝKSü™™™´zõjúöíI¥RÊÍÍ3::J‰„Ôjõ¬jýÆÆF@F£‘ˆˆFFFÈÝÝ‚ƒƒ©  €‹‹‹‹£#GŽ8œßøî·ÓÖ 6› iiiðôôIJeËpñâEÀÀÀâââ““ƒ+V@"‘ °°™™™H$ð÷÷GII —çÊ•+Ø¿?¯ÍW§¿¿»ví¨T*˜L&¨T*<}úTpÜ hiiA~~þ´¿Ð .`||eee¼ýÝÝÝáíí ›ÍÆ366f×/•Jáåå…gÏžjkkŒ¤¤$hµZî|›šš;ë¼ÎÄiinn†H$‡PVV†Ë—/ãîÝ»°X,¨©©ÁÐÐz{{qöìY¤¦¦B"‘Àd2!##§Nâò¬_¿‘‘‘¼6_ÑÑQÔÔÔÔj5|}}¡V«%8&DDDÀ××wZ›H$‚B¡@cc#ç3›Í0 0 hkkCnn.FFF°gÏžiýß¿ÌÌL„……Ù­íêê ¹\Î äñãÇØ¶m”J%*++aµZÑÚÚŠááalݺuZÿ`Ó¦M¸}ûöÿO,ŽN9ö¨¨¨ ¥K—Òøø8ç;yò$%&&R__ /_¾Q{{;¹¹¹‘Åb!"¢––Z¾|ù×éèè Î?ÛGÌùóç)!!·ýСCtàÀ"úþˆñðð òññ!///@ׯ_çâm6=|øvîÜIAAAtõêUàÍíÚ5ŠŒŒ$"¢àà`ª¬¬$›ÍF‰„êëë)??ŸÂÃÃyû744Prr2­\¹’²²²¨««kÆs¶ßývÚ ²f͈D"ÎÞ°aúúú8ÛÃÃÀ÷Bb±nnnœíÌ:Žâïï®®.Þöîînøùùqö¥K—`6›a6›144„šš¤¥¥¡»»uuu Á­[·pôèQ¼~ýðööæÍ ½^öövtvv"&&...ˆ‡V«ÅóçÏí>^&‘Éd(**‚^¯ÇâÅ‹¡P(ìÎfsÅi1›ÍSl“É$xa~•:qqqhoo‡N§›Öf4ñäÉìØ±ƒ·¿B¡€§§' D"Äb1>~üˆÁÁALLLÌX?44K–,Á¹sç°eˈÅb€R©Ä£GP__/(I¬V+ˆnnnX´hÑŒñ³ÅiéììÄýû÷ÃÃÃP«Õ‚–NÇ-ÐìÙΪ3I`` > •J…W¯^qþîîn$&&B©T"&&F0Ç‚ `±X “É ×ë‘{÷îaíÚµ8sæ z{{yûº¸¸@¡P@£Ñ >>žó'$$@§Ó¡££r¹œ·mm-T*¢££AD¨««CQQ‘W`}&Ù£¢¢‚¢¢¢hݺu$—ËÉÏ϶oßNãããÜd’wïÞMY+èõú)kôôô)[Ù¿ÛBuþ¹‰ˆˆ Í›7SssóŒãŸ˜˜ cÇŽ‘X,¦ §ùóçSJJ }ýú•‹³·Í%ú¾MNMMæ7túôi ¬Ÿ——GèåË—SüR©”¤R)o¿ÒÒR’ËåTZZÊ­éæ ßývŠ@&¥êêjÒétŽðëX­V2›Íœm2™H«ÕÒààà¬ó Qmm-UUUQ¿ÓÆûÏ÷+¿b^¾ûíò¿F»Sßïð‹²¾¾>TUUñ¶oܸ‘wú'Áw¿ò-æWF$Ù}Ç1ÉÂ… âhþ{üöñõõ…R©ü·‡ñŸ…}îg„ „!C&† L A˜@½zeÇŸu8ôÏÛwîÜákbü¦Èd²i>Þo1 ÀÖ Œ`aÂÂä/ñ%Êsá`†IEND®B`‚bm3.7.0/doc/html/graph_legend.dot0000644000175000017500000000423611365042652015061 0ustar tlktlkdigraph G { edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"]; node [fontname="FreeSans",fontsize="10",shape=record]; Node9 [shape="box",label="Inherited",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",fillcolor="grey75",style="filled" fontcolor="black"]; Node10 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"]; Node10 [shape="box",label="PublicBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPublicBase.html"]; Node11 -> Node10 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"]; Node11 [shape="box",label="Truncated",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="red",URL="$classTruncated.html"]; Node13 -> Node9 [dir=back,color="darkgreen",fontsize="10",style="solid",fontname="FreeSans"]; Node13 [shape="box",label="ProtectedBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classProtectedBase.html"]; Node14 -> Node9 [dir=back,color="firebrick4",fontsize="10",style="solid",fontname="FreeSans"]; Node14 [shape="box",label="PrivateBase",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classPrivateBase.html"]; Node15 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"]; Node15 [shape="box",label="Undocumented",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="grey75"]; Node16 -> Node9 [dir=back,color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"]; Node16 [shape="box",label="Templ< int >",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; Node17 -> Node16 [dir=back,color="orange",fontsize="10",style="dashed",label="< int >",fontname="FreeSans"]; Node17 [shape="box",label="Templ< T >",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classTempl.html"]; Node18 -> Node9 [dir=back,color="darkorchid3",fontsize="10",style="dashed",label="m_usedClass",fontname="FreeSans"]; Node18 [shape="box",label="Used",fontsize="10",height=0.2,width=0.4,fontname="FreeSans",color="black",URL="$classUsed.html"]; } bm3.7.0/doc/html/a00227.md50000644000175000017500000000004011365042647013145 0ustar tlktlk2d4467110e47ee4e1dfd341c26736be4bm3.7.0/doc/html/a00133.png0000644000175000017500000002152411365042632013244 0ustar tlktlk‰PNG  IHDRãÃp"¦zbKGDÿÿÿ ½§“ IDATxœíÝy\Teû?ðÏl ë€ * alù—”~¦(* eŠ %fÚ¦ùhý*ñÉ«GíÑäg¢aŠþ|È5C)A5\q%à ¡DÀPa–™ëû/ÆFgp†sf¸ß¯œ9‡s_g®¹æÜ÷™³ˆˆÀ0 ×Ò„\GÀ0L3VŒ ì†'Ä\Е.]º„üü|®Ã`´Âu]NÐàÌ™3ûöíã: F ÝècÙ"­[í`„ X¾|9×a0íHIIAXX×ap‚†'X12 O°bdž`ÅÈ0<ÁŠ‘ax‚#Ãð+Ævܽ{ÉÉÉm£¶¶Ö ¿{VUU!&&F¯ëì(f…Bèèh½¶×°blG~~> ÚFMM vïÞmÐõ>|Xïël/æÚÚZìܹS¯íu'¬MX¿~ý°wï^®Ã`´ÔíÎÀÑaóæÍHNN†™™f̘9sæ@.—cÕªU9r$~øá455aáÂ…ÈËËÃÑ£G!‰ðÁà…^Ð|VÉÎ;qïÞ=ØÙÙ!$$³fÍjÕÞùóç‰Àßß¶¶¶6lžþyüúë¯Ø¼y3òóóáàà€… bôèÑÆ_^^Žõë×cÍš5:ÅüÛo¿áäÉ“ …HNN†T*Å믿®õù¢‡Æwß}‡ÊÊJøûûcéÒ¥º' ›a{ÆdggC$áÀøòË/±ÿ~œ>}MMMÈÌÌDuu5bcc1wî\¬[·vvvˆGHHˆº»V[[‹ððp¼ÿþûHNNÆ¿þõ/DEE¡¢¢B£­¢¢"„……áÃ?Dbb"ú÷ïØØXÈår”——cÙ²e ÁO?ý„… bõêÕ(((è0þúúzdff€N1×ÔÔ )) B¡P½í{öìÁ¥K—ûž©T*ܼyÑÑÑØ¹s'Ξ=‹_ýµ3o·ÃбÖÖÖX°`¤R)Œàà`¤¤¤hÞk¾þúëðññH$ÂÌ™3ÕÓµµµ‰D‚-[¶`̘1H$ppp€X,FMMF[)))xî¹çàëë 333Ìž==zô¤¦¦ÂÝÝ'N„D"ÁèÑ£1räHœ?.7WŽï¿ÏAyy=`ãF_½®?4ô< G)ÞxÃîÚÕºá#áÒºU1òQ]]Ö¬9Œ;ÏB @¥Rá‹/¦á½÷ÆëµmÛNáË/B(‚ˆ0ožþùÏɰ°0Ók;L§¥±1#‡._þãÆ…c÷îs "¨T*ÀĉƒôÞVË:U*ˆ»wŸÃ¸qá¸|ù½·Åt+F(Xµê ‚ƒ#QTT¥R ¾0 ·ÞÛ0 7<<ú¢å*(¥R‰¢¢rGbÕªƒP(Ø8’k¬»XzzÆÇŽg@DP*ŽD"¦N}Ö`mOú¬úž7 Tˆ;vœÁøñáHOÏ3XÛÌã±bì"õõM K´i›p÷n9ššT­–ijRbâÄÁ‹aâÄÁhjR¶Ñ® wï–cÚ´M KB}}“Áb`ÚÇŠ± ddÜ¿8¢¢NA¥"(•­ íàím¸ë½½àèh׿<¥R•Šu þþáÈȸc°8˜¶±b4°ÌÌ|ýyy¥mî [H$"L™b¸.j‹)Sž…D"jw~S“ yy¥ ú723ùù3©bÅh`Æ=…={æÃÚÚ¼Ã"hlTâå— ×EmñòËƒÑØØº«ÚB"ÁÚÚ{öÌǰaO<æ!VŒ] 0Ð'O.…——#D¢¶ßr;;K<÷œáï°öÜsOÃÎβÍy"‘^^Ž8yr)½  £‰cqrêÄÄP ì@¡ð¯waò䡯ŠP(ÀäÉC5öÒÍí 0xp$&†ÂÉ©‡Áã`ZcÅØ…nÞ,BVÖ]¼ûîXY=ì¶66ª0iR×ÝsfÒ¤!hll¿J$"XY™ãÝwÇ +«ÙÙ÷º,F;®‹(•*LžüoXXHpàÀ‡øóÏ ÌŸ¿ W®4?I*/o=Ì̺æ¼ý††& ðÀÐ¡ÎØ¾}.íðÊ+‘¨¯oBRRh»ÝiÆ`Øép]e÷îTܸñ'Ö­k~êSK·uáÂñ Úe…ffb ÅÂ…ãÕÝR@€ðð\»v{öœë²X˜‡Øž± U`ܸµ˜?–.}¹Õüºº†.?a»½6×®=Œ]»Rqúôgèׯý{²2zÇ®Úè o¿½¹¹Å8qb)¤R~_BZ_ßÿpxxôÅž=ó¹§;aÝTC‹‹KCJÊu|óÍ,Þ"H¥bDDÌÂÏ?_G\\×át+¬ ¨¸¸ +VÄcÞ› ;;K,]ú#סt¬ äàÁL$'_Å×_Ï„•Uç@Ã%KK3Ö]íb¬ àþ}9>ÿü¿xóÍQ3ÆóñÿÀS£F¹áwÆ`ùòx–sŽÉcGSõŒˆ0gNîÜ)ÃñãŸÀÒÒ¸ï1£P4bâÄ èÕË ?þøÙɆΦêÛîÝ©HM½…Í›ç}!€¹¹[¶¼ôô;زå×á˜4VŒz”›[Œ°°CX´(Ç»pŽÞx{;áóÏ'#""¿þÊ®q4ÖMÕ“ÆF%¦NÝ@€ÄÄPˆÅ¦õ=GD˜5k ËqìØ£<(Ås¬›ª/ß|s 99÷ù†É"lÚ4µøâ‹®Ã1I¦÷©á@zz6oþ+VL…««=×áLß¾2lØ0 û÷_Ä¡CW¸Çä°nꪩ©G`à×puµÇÞ½ƒ@`ø „¹¶té8tè NœXÊN&×ÖM}R+WDee6lx½["¬\9½{[㣾‡JžËõ…ã8vì*¢£/`ýú™èÓdžëpºŒ¥¥"#ßÀåË·±mÛI®Ã1¬;©¸¸ K–ü€×^Ñ¥·Ìà‹!Cœñé§“þ~ùå6×á˜6fì"›o~‹ß/Æñãÿ€µu÷<ÌODxç¸ví.Žû={Zq’1ccÆÎؽ;gÎd#2òÍn[ˆ@óÏ7ΆP(ÀG}ö½þdX1êèÖ­{X½: ‹¿Ó9˦³ìì,±mÛÛHMÍÁæÍü|"´±`Ũƒ††&¼ÿþ^x{;!44ëpxcøp,_>ë×ÁÅ‹¿sŽÑbŨƒ¯¾:Œ‚‚2DF¾Á®^xÄüùcè÷ßß‹ÒÒj®Ã1J쥥ÔÔ[ˆŠ:°°WáâÒ‹ëpxG àßÿ~R©~ø}»OÚbÚÇŠQ µX´h¦Ly3gþ®Ãá-™ÌQQoãÂ…\lÜxœëpŒ+F-|òÉ ŸÁu(¼7dˆ3V®œŽo¾9†ÔÔ[\‡cTX1>F\\ŽÉÂÆs`kÛöÓ›MsçŽÁäÉCðÁߣ¸¸ŠëpŒ+Æ´ÜjñwFcôhw®Ã1*ëÖ½++)>øà;6~Ô+Æ|öY,ìì,ñÏqŠÑ‘ÉÌõÒÒòq”ëpŒ+ÆvÄÅ¥áèÑ«ˆˆ˜Å®jï¤Aƒœðå—ÁØ´é8NºÉu8¼Çб 힎åÆu8FíÍ7}1mÚ0|ôQ4îÝ«ä:^c'Š·aÞ¼¸y³ÇÂöŠzPSS—_Þ€ž=­÷;a¢mìDñG±î©þYYIñŸÿ¼¬¬B„‡ÿÄu8¼ÅŠñ/X÷ÔpþçŒ-[N %å×áðéÑìÙ³ €Ñþ™™9Q¯^¯‘@ é’ö¢££õùöE¾ìì^$këœçZßzð‹Þ(‘H­ïÕv±W ÞÂÌ™3 Þ†6º:_DdR÷ Ú·oôsëJ½cHHBBBô½ZÆ@X¾žLcc£ÞŠ‘†'X12 O°bdž`ÅÈ0<ÁŠ‘ax‚ÓbÌÍÍÅîÝ» ÚFUUÖ®]«×uÖÔÔ`Íš5z]'ßuE®tQ^^ŽuëÖ=v¹ŽòÏ·øê«¯eeeÀ† àèè{{{ìܹŸ|ò ìííáàà€˜˜õzöïßwwwˆÅb888`ýúõm¶—””777XZZbîܹøÇ?þŸ~j>yùÔ©S:t(¤R)ˆƒvûöíÛáââ+++Ì;*•i_Ñ®¯\-_¾öööJ¥ð÷÷Gaa¡z^VVF sssxzzbß¾}€ââb¼ôÒKøî»ï`gg‡“'ObÊ”)êÿÓ6ÿmáMõqR]‹Ù³gÓìÙ³µ^>))‰}üñÇTSSCgÏž%[[[Š¥¢¢" …´bÅ R©T´uëV@k×®%•JEëÖ­#www""’Ëå$•J)>>ž >}š„B!SAAI¥R""úý÷ßÉÚÚš©®®ŽÖ¬YC"‘ˆöîÝK÷îÝ#Úµk) JHH KKKºyóf«¸‹ŠŠ-X°€êëë)77—lmméĉZo;xrnª¶ùÒW®’““ÉÑÑ‘rrrH.—ÓÔ©Sé½÷Þ#"¢êêjrpp ÈÈHR(”’’B2™ŒÎ;GdaaAÁÁÁtþüyÊÎÎ&+++"Ò>ÿÒG£££õvn*çÅØ£GjhhP¿¶lÙ2 V¿QÕÕÕDDtëÖ-‹ÅÔØØHDDÔ·o_""R(”žž®^GKrrr4’F¯¼òŠz9•JE´wï^Ú¶m;V#¾3fЪU«ZÅÝ[qq±ú5___Š×zÛ±õ‘«„„rtt¤«W¯Qs–——QLL >\£ÝE‹ÑâÅ‹©  €ÐÝ»w‰ˆèöíÛêbÔ6ÿÒGõYŒœwSÝÜÜ ‘HÔÓƒ BQQ‘zÚʪùÉFR©b±X=ÝB*•"==/½ôÜÜÜÜfW#//žžžêi@WWW@aa¡Æ<xæ™gPPPÐfÜ"‘öönJ'?·G¹ ÂŒ3àëë „††¢¼¼@s~nÞ¼‰¨ÿbbbPQQ …pttl—¶ùo Ÿò¨÷ÅuUZZª1]\\Œž={ê´Ž„„,[¶ qqqðõõ…H$‚]«ålllPVV¦ñZËA&“áêÕ«óÊÊÊ`kË“ÝB¹""DDD ""Ø´i^}õUddd@&“ÁÏÏÉÉÉêåëêê PZZÚn¡h›¾ã|Ϙ——‡C‡h>ÔüŸÿü“&MÒi………ðòò‚ŸŸD".\¸¹\Þj¹€€$$$ ¤¤páÂ\¿~8~ü8þøãÀýû÷‡€€Í ´X»}ä*<<ãLJX,ƈ#ðÖ[oáÏ?ÿМŸ³gÏâÆæ‹kkkáããƒøøøשmþ~ç‘ób9r$>þøcŒ7žžžpqqÁ‚ tZÇ´iÓpãÆ Œ7X½z5\]]±dÉå&Mš„)S¦ÀÛÛX²d † 333<ûì³X²d |||ðâ‹/ÂÛÛ3fÌÀĉ‹/ÖÛ¥2ÆJ¹zûí·QPP€!C† 3gÎÄêÕ«X½z5Fމ€€xzzbРAxíµ×:\§¶ùxžG}Œ<[èz§E]]8qBc®«ÊÊJ:~ü8]¹r…ˆˆòóóéÔ©SËÓõë×éÊ•+tòäIª¯¯'WWWºpá‚z™Û·oÓÑ£G);;»Ó±hFv§…>r¥P(èÌ™3tìØ1ºÿ~«ù………tôèQõAž¶(•J*--UOk“CÐçÎÇŒ`nnÿ'Z‡L&Sw)ÀÙÙÎÎÎËâ…^Àÿû_xyy!** MMMðññQ/Órà€i›>r%•Jáçç×î|'''899u¸¡Pˆ^½> L›üó/б« 6 »víÂW_}…ÀÝÝGŽÑ8BÈ0\éVÅÓ§OÇôéÓ¹ƒaZáüÃ0ÍX12 O°bdž`ÅÈ0<ÁŠ‘ax‚#Ãð„IãE¸q£èñ 2¼ÕبDRÒ¯\‡Ñ%ôþ;ã¾}ûÐØØ¨ïÕvJ^ž 0`@Û' 3üÊW[är3äæöÀÞ½÷¹¥M±±±z[—^‹ñùçŸçUb mð³CBBðÔSOqßòÕ–ÒR ÔÖŠñà9zöTpN+ú|N‰É>¹øòå?0}úf@BÂG1•㈘Θ5ëÿãÌ™[6ì)>üw®Ã1$Ó}rñÁƒ¿B"A"áàÁî1æ05J¥ iiy€ÌÌ|\¾ü·˜IcS“ ññihlT¢±Q‰øø445™öÛLÑõ뢶¶ ‹°iÓÏGdX&YŒgÏÞBEÅÃñEE…gÏÞâ0"¦3.^üb±ÐÔ¤ÄÉ“7‘}㨠Ç$‹ñÀ4ˆÅ7M,âÀ4#b:ãܹ\K‰ÅBlÙ’ÂaD†erÅX_ß„#G²ÐÔ¤T¿ÖԤđ#Y¨¯oâ02FD„‹s¡R=<¾Ø<äHÇÝ»åFf8&WŒÇ_C]]ëÃõuu8~ü1‘“sryëŸ2„B!¶m;Õõu“+Ƹ¸4…­oé' ǺªÆââÅ?4†-•øþûóx𠆃¨ ˤŠQ.¯CJÊ (•­œ*•*¤¤Ü€\^ÇAdŒ®.^ÌE{¿€+•„]»R»6 .`RÅxäHV‡w’V©T8r$« #b:+55·Í/U ùÀ·ßžRÿìa*Lªccß Õf†[w´´ªÃeª«°ÿÅ.Ѝk˜L1Wáüù£oR©çÏç ¸¸ãD3ܺté6Çý-T*V¬ˆ7©“9Læîp‰‰™:-;þXFÃ<‰¶¾TE"zô°†‹K/8;÷DÏžVèß¿'<¨AŸ>6Eª_&{¢8L›¶ C†8cõê`®Cat•ŠÐ¯Ÿ-úô‘¡_?[ŒóÿðÁð·¿ã:}x«×zõ²Ayy-Ñt“3¶¥¬¬öö¦Ñ…éîzõ²Fq1ÿ®KÕ'“-ÆÆF%äò:¶g4½zY¡¼Üô~èÿ+“-ƪ½{[s £½{Û ¤¤šë0 Êd‹±åç‹Þ½Y7Õôìi…²2VŒF©¥KÓ«릚{{“<õ¯L¶KJª ‘ˆ`kkÉu(Œôìi…ÊÊZ46*¿°‘2Ùb,+«aoLHK.Myïh²Å¨P4ÂÊJÊuŒžÈd€ÚÚzŽ#1“-Æêj,,̸ƒÑsóæ§K·uḩ0Ùb¬©i`{FbaÑ\ŒÕÕü»‘±¾˜l16wSÙžÑTXY™€É]ÃøW&[Œuu ¬›jBZ¾XY7ÕUW+Ôã Æø‰DB˜™‰QWÇöŒF§®®66æ\‡Á葹¹UUlÌhtêêaiɺ©¦ÄÆÆœuSQ]]릚KK3ÖM5FJvÇĈÅBVŒÆÈ”»3Œi2ÙbdL¥¥iŸÄaÒÅÈ~ô7-"‘55¬›jtjjê!šìæu[Ý1ÞØ™ì§Õ”“Ö]I$&ûq`Šͧ1ÆËÂÂ̤î þ(“ý´65©L~Àß±ë)ŸÝϘ&“-F†16¬†'X12 O°bdž`ÅÈ S?:Ί‘1"QûO36­–šššŠM›6qÞ¤¦:á™gÊaooœÏôûñÇ ²^cÎovvÀ3Ï”sÉ“k#¿­–šŸŸØØX„„„tMT2fÌ]®Cè”ØØXƒ®ß˜ók EØQ~Û}r±¡¾™™ŽíÛ·sæÌ1x;,¿Üè(¿lÌÈ0<ÁŠ‘ax‚#Ãð+F†á VŒ ÃF_ŒUUUX»v­ÖËWTT 33<0`TŒ¾èšß())1@D†côÅXYY‰•+Wjµì† àââ‚yóæÁÅÅ7n4lpÌÓ%¿-ÊÊÊ0räH~üxZ´hQ«m*(( ЧÚÚZ #R©TÆÒÑ#333Z¸pa«múúë¯iÊ”)ê醆Z»v-ÕÔÔtKGó´Å·b4–üÖÖÖÒàÁƒéرcDD#OóûËwSƒ‚‚0cÆ øúúÂÅÅ¡¡¡(/o>¡W*•"==/½ôÜÜÜÜê~¦VVV@©T ±X¬žþ+WWW˜™=¼Cø AƒŸŸ¯±L^^nÞ¼‰¨ÿbbbPQQþýûãÔ©SÈÌÌÄßÿþwH$Ìš5 vvv­¶)//žžžêi‰D‚O?ý–––E›8‰±ä7,, ŽŽŽ°°°@jj**++‘››‹¬¬¬VÛÄ×ü>ñ"BDD"""‘‘M›6áÕW_EFF°lÙ2ÄÅÅÁ××"‘¨Í¿6—””ÀÆÆFã5™L???$''«_«««ƒ@ €B¡@ÿþý¯žÌ ýIDATçëë‹_|±U[666(..ÖxíÀ˜0aÂccÑ&Ncb,ù]³f JKK±xñb@nn.ÊËËQZZŠíÛ·k¬‡¯ù}â=cxx8ƱXŒ#Fà­·ÞŸþ (,,„——üüü ‰páÂÈåòNµSXX¨>T]]]¨¨(h,€³gÏâÆ€ÚÚZøøø >>wîÜ‹‹ òòòçÏŸÇÕ«W1iÒ$@BB®^½  Dbb¢:a—.]Âo¼‘HôØX´‰Ó˜K~¿üòK¤¥¥©ÿ|||°|ùru!E~uèÓ¶©  €žzê)4vìX  —_~™ÜÜÜhêÔ©ê1E‹œœ²²²ROgffjŒ)\\\ÈÛÛ›üüüÈÁÁÆGuuuc "¢ˆˆ’Éd4aÂrrr¢R*•DDJ=zô ±cÇ’ýðÃêÿsqq¡Õ«W«§CCC©wïÞ4aÂ’ÉdùØX:š§-¾)¿õè˜ÑòûäpˆšògΜ¡cÇŽÑýû÷5æUVVÒñãÇéÊ•+DÔœÀS§Né´þ¤¤$òññ¡úúz:}ú4]ºt‰T*U»ËÒÑ£GÕþêÚµk”œœL÷îÝ{l»·nÝ¢£GR~~¾V±èg[øVŒDÆ•_]ð,¿¿èåG©T ??¿6çÉd2ݸ³³3œ;ÕŽ™™ÆŽûØåœœœàääÔæ½oœæW‡Ý(ÓøØMeôÇ ¿32 £¬†'X12 O°bdž`ÅÈ0<ÁŠ‘ax‚#ÃðD»gàú™LÛºê}gùåF§žµ1sæLƒÃðË/ÿ´z$Ã0œHccF†á VŒ ì†'Ä®pÃ08ñ¿¿¯¿ÎŽ{[øIEND®B`‚bm3.7.0/doc/html/a00158.png0000644000175000017500000021070011365042640013246 0ustar tlktlk‰PNG  IHDR«Ÿy¯¥bKGDÿÿÿ ½§“ IDATxœìÝy\Tõþ?ð×lìû6À ȾÍ0`ä’ij¢f‹÷Z¹·XZV–-V÷þZî½ÝêkËÍn]­4ÛÕ«•¶h·ÔLïÕTÌ Ye`€v†™ùý1p”\Q`X^Ïǃ Ìœó†Èá¼æýyD‹Å"""""""¢nÛº"""""""˜*Ña¨@DDDDDDDWDj눈ˆˆˆèÊ#%%ÅÖe y3gδu D6ÁPˆˆˆˆhÛ·oæÏŸoë2†<ο§¡Š¡Ñ °{÷n[—0$íÚµ ¯¼òŠ­Ë ²ÎT """"""¢+ÂPˆˆˆˆˆˆˆ®C"""""""º" ˆˆˆˆˆˆˆèŠ0T """"""¢+ÂPˆˆˆˆˆˆˆ®C"""""ê3MMMذaÃeß¿¶¶999¨­­íŪˆèJ1T """"¢>ÓØØˆO?ýô²î»zõjÌŸ?o¾ù&æÎ‹5kÖônqDÔmR[@DDDDDô{ؼy3¾øâ ÈåraáÂ…HNNFXX˜­Ë#¢ ˆˆˆˆˆ†˜>ú[·nEcc#Ôj5ž{î9øúúvíÚ…?þðððÀÌ™31gÎ ¼ôÒK=z46mÚ„ööv,^¼………ؾ};$ –,Y‚o¼iiiؽ{7Äb1~úé'ØÛÛcîܹ˜9sæ9µäççcÅŠÈÉÉ\.Ç‚ 0iÒ$èõz$''C.—† èõúó† GŽÁ¿þõ/hµZ„††bÙ²eˆŽŽ¾h-Ý©“ˆÎˈˆˆˆˆ†ß~û ?þø#V­Z…ï¾ûNNNX·n뼃×_?ü0~úé'üõ¯Åš5kP[[‹ööv;v øê«¯pß}÷á7Þ€‡‡¾ùæÌœ9ü1뇭[·B,cË–-øûßÿŽÏ>û )))]jiiiÁ³Ï>‹äädüðÃxê©§°bÅ dddàÚk¯Å³Ï>‹ööv¤¥¥áóÏ?‡Ôjõ9ßSUUþò—¿`Ñ¢Eضmn¸áüõ¯…Åb¹h-—[']C""""¢!¤­­ `4áää„_|<ð@&“aÕªU;v,d2 •JÑØØ°X,˜;w.D"’’’ ‘H0kÖ,ávSS“p{{{,^¼öööP«Õ˜1c¶oßÞ¥–ÀËË üã!“É0|øpÜtÓMسgpŸºº:¼ÿþûøê«¯pÝu×ÁÞÞþœïi÷îÝHLLÄØ±caoo9sæàøƒð½^¬–Ë©“ˆ.ŒËˆˆˆˆˆ†ë®»GÅ’%Kàââ‚k¯½wÝu\\\ “É5kÖ@«ÕÂÍÍ ‹¥Ëã"‘2™ ‰D¸}¶ÀÀ@H¥g.7BCCqìØ±.÷©¨¨@qq1æÌ™#|®µµ£Gn{{{ãý÷ßGss3|ðA„††âÖ[o=ç8J¥R¸-•J1wîÜ˪årê$¢ c¨@DDDD4„X,<òÈ#xä‘G››‹Í›7 ËöíÛ‡>ú/½ôÔj5Äbñ9ð—«®®®ËíÚÚZ8::vùœ““4 Þxã ás­­­‰Dعs'š››1}út€££#T*Š‹‹Ï9—““jjjº|nïÞ½¸æšk.YËåÔIDÆåDDDDDCÈ¿ÿýo<ñÄH$ˆ‰‰ÁÔ©SQ]] À:›`ذaÐh4‹ÅÈÈÈ貤¡;ªªªð믿š››±mÛ6$%%u¹ORRÒÒÒPTTÀ(,^¼{÷î…L&ÃÆ…ó744 -- ááá€}ûö¡  @8ÎþýûQ[[ ÈÌÌÄ«¯¾ ±X|ÉZ.§N"º0v* !S§NÅÖ­[±páBxxx ;;=ôàúë¯Ç矎Ç2™ R©xï½÷°lÙ²nG.—cíÚµøòË/¡Õj¡T*qûí·wé P*•X¸p!yäÄÄÄ ¸¸jµ7Þx#, vî܉ùóç#88………¸öÚk‘œœ X¹r%n¹å„††bøðá˜4i,X€ððpdeeᡇ:.TË‘#G.ø5"º<"ËïIÑ€±aÃÌŸ?»wï¾ìÇFdff¢­­ ððð¾ÖÔÔ„ÌÌLxzz",, •••(//GBBÂeÿÀøôÓO±jÕ*œgîB§êêjÂÇÇ!!!]¾–ŸŸ½^€€€.sΧ´´†ŸŸß%kénç³k×.¼òÊ+çÌž *Ø©@DDDD4ÄÈd2h4šó~ÍÉÉ©Kû¿ŸŸŸpÞ]R©ô‚ç9›|||Îûµ°°0„……]Öù”J僇‹Õr¹uѹ8Sˆˆˆˆˆz”³³3 …­ËpñZúSD;ˆˆˆˆˆ¨Gi4š~óÊÿÅjéOu TìT """"""¢+ÂPˆˆˆˆh€jo7£¼¼b±ƒ­K!¢!ŠËˆˆˆˆˆ³Ù‚üü*¤¥•àøñb¤¦– =]‹ææ6ØÛ‡Úº<"¢*õCEEz¤¥• 5µ©©ÅHK+E}} d2 bc‘˜„9sF¢¬,O?ý®­Ë%¢!Š¡‘•—×"5µii¥BBMM#¤R1"#ý¡Ñ(që­‰HH‚J¥€L&»aC>³íŠ'¢!¡Qª®nº¬AB t:ÄbÂÂ|¡ÑáÉ'§ !!jµŽŽv¶.™ˆè‚*õƒ¡¹#@8³Œ¡´´0l˜7‚ðÀã‘ F WW\$¢…¡Qhllʼn¥]B„ÂÂjX,x !!óæFbb0‚àééÜ£çŸ8qbÏd2_ˆÅhm-¹¬û‹Döpu‰úú°XÚ{¹:":‘Åb±Øº""""¢¤µµééZ¤¥ B^^%L&3||\„„kx ÑA.wëµZŠ‹‹‘’’ÒkÇïKß~[ˆ¼<ž~ZsY÷//oÂ;ï¤#$Ä< ‰DÔË^ØÌ™3mvn"[b¨@DDDDtF£ ÙÙ8~¼Ç#-­ÙÙ0Mpssì‚„ A©ô´uÉÖçŸïÇ«¯nEvöòË~ÌñãŘ3ç}Œ޵kïë2Ä’ˆzC""""¢&“yy•BxšZ‚Œ -Z[Ûáìløxe—!$Ä"‘í^löíËŬYïáøñ¿ÃÏÏõ²wäH!æÎýãÇÇàƒîD"îÅ*‰èl ˆˆˆˆhH²X,(,¬ÆñãÖŠÇ[„ÆÆVØÛK¡V+ Ñ BD„/V{YEE®¹æoøæ›Ç0jTX·{ðà)ÌŸ¿“'«°jÕ]üoEÔG*ÑPZZ#„©©ÅHK+…ÁÐ ™L‚èh$&#11M¢£ýÙFo#‘‘ÆßþöÌŸ]·»o_î½÷#Üv[V¬˜ ±˜]$D½»?Ñ £Ó–V‚ãÇ­ƒ/ÆéÓHĈˆðCbb0¦MÓ !!*•ööü³¸¿ ñAAAõ=vìØ(¬]{,X ‰D‚üc—§õ2þëIDDDDÚéÓ¿ J ÓÕA$!$ĉ‰AXºt2­‚³³½­K¦‹÷EAAÕ?~âĬ]{-úR¼òÊí ˆzC""""0 †œ8QŠÔÔ3%%§J¥'‚±hÑ8$$C£QÂÍÍÑÆSw)•^øßÿ²¯ê“'«ðÞ{wãá‡?‡T*ÁK/ý±‡ª#¢ßc¨@DDDDýRCC+Nœ(vaHK+AAA5, är7h4A˜3g‚˜ //g[—L= (È %%5W}œ[nIÀÊ•waÉ’upq±Ç3ÏLëêˆè÷*‘Í56¶"=]Û%@Èϯ‚Ùl ‚ð‡? ‡F„ÄÄ Èåî¶.™zIPêêš`0´ÀÍÍ᪎5}úp46¶âé§¿„››#/žÐ3E‘€¡õ©ææ¶ß¥8uª&“^^ÎÐh‚pË- Ðh¬[9zغdêCAA^€ÒÒÓˆ‹ ¼êãÍ;C þþ÷ïáææ€¹sG_õ1‰è † DDDDÔkZZŒÈȰii¥HM-An®&“NHHÂÔ©jh4J$$C©ô´uÉdc¡BIIÏ„ °xñ ÍxöÙ¯àââ€ÛnKì‘ãC""""ê!­­í‚ubZZ)rs+ÐÞn†››#4š Lš‡'Ÿœ‚„„ {Ûºdê‡dðóspö”gž™†ººf<úè:¸¸8`âĘ=>ÑPÅPˆˆˆˆºÍh4 Bç2†œœ &¸¹9 >^‰‰cðøãÉÐh‚âcë’i òBq±¾ÇûòË3P_ß‚E‹>Á¿ÿ½#G†õø9ˆ†† DDDDtQF£ ™™e]„¬¬r&¸º:@­V`ܸH,Yr#¬‚H$²uÙ4€z¢¬¬¶Ç+‰°bÅÔ×·àž{>Ä×_? µZÑãç!JD‹Åbë"ˆˆˆˆ¨0MÈÉ©v`HM-ÁÉ“e0Mpv¶‡Z­@BB4ë[X˜/ÄbÔ³þú×oqôh!¶n}¢WŽo4š0þdf–áÛoCx¸_¯œ‡h(`§ÑÕÞnFnî¹Bkk;œœì R)0bD(.¼rÔ'är7èt†^;¾L&ÁgŸ-ÄÌ™ïaÖ¬÷ñý÷K¡PpH(Ñ•`§Ñ`2™‘“£vaHK+FFFZZŒpt´C\\ °…cBB""ü ‘ˆm]6 Q›7ÆSOmDQÑ?zõ<C fÌxÍÍFlÝú8¼½]zõ|DƒC"""¢AÆd2ãÔ©ÊŽë„ôt-š›Û`o/…Juö%"#ý!•2@ þc߾̚õ>Nœx¹×/ô««0}ú;puuÀW_-››C¯žh°a¨@DDD4€™ÍäçW [8¦¦– #C‹ÆÆVØÙI;:”BˆÀú½¼¼JÜpÃrüüó3ˆ‹ ìõóVã|QQþX¿~1d2I¯Ÿ“h°`¨@DDD4@X,Tw™ž^І†VÈdÄÆv bbxqD’ÁЂ˜˜ÿ‡ c„˜>9gff9fÌxãÇÇà½÷îæò¢ËÄADDDDýÅbAQ‘^:g!Ô×·@&“ :ÚMf̸Mââ Ð áææ**êú윱±X»ö~Üu×¼ðÂ,_~gŸ›h c¨@DDDÔé…îƒÎÁ`h†T*FT”5@¸õÖD!@°·çŸq4¸xôêç3vl$Ö¬¹ ~__W<õÔÔ>=?Ñ@Äg#"""¢>VRrú¬Á:¡®® R©‘‘rh4A˜6M&*U d¶.™¨Ïyz:¡¦¦±ÏÏ;eН¼r;þßÿûÞÞ.¸÷Þëû¼¢„¡Q/*-­é²|!5µ55HĈˆðƒF„§ŸžŠ„„ ¨T 8:ÚÙºd¢~ÁË˵µM69÷½÷^ƒ¡/¼°¾¾®¸ùfMê *õ¢"=Nœ°náh}_ŠššFˆÅ"„‡[„'ŸœF •Jgg{[—LÔoyy9£¦Æ6¡<öX2ÊÊjñðßcýúÅ;6Òfµõg ˆˆˆˆº©sˆbZZ©ÐpâD)êêš„„øx%žxb24š ¨Õ ˆºËÃà §NUÚ´†W^¹C3-ú[¶<Ö'Û[ 4 ˆˆˆˆ.Âl¶   ªK‰¥0ZºÌ@¸é&54%ââpr⢫åáádÓNHÄøç?çaþüÕ˜=û}lÝú8BB|lZQÃPˆˆˆ¨ƒÉdF~~U—å ZaǨ(ÄÇ+qË-‰ˆWrˆ"Q/òòr±ÙL…³Éd¬]{?æÍûóæ­ÆÖ­ÃÛÛÅÖeõ"‹Åb±uDDDD}Íd2#7W',]8q 46¶B&“ &&M4%â㕈å6ŽD}iëÖãxè¡ÏQRòÄb‘­Ë^߀Ûn{ŽŽ2|óÍR¸¹9غ$¢~ÏŒDDD4èµ·›‘“S!,aHK+ÅÉ“ehnnƒqqˆWbæÌk¡Ñ!&&2™ÄÖe ižžN°X,¨­m‚——³­Ë·· 6lXŒ;îX…E‹>Æúõ‹ùï*Ñ c4š]ÑeþAF†­­ípp!..óçF|¼QQþ¼0 ê‡<<¬AB  $ÄëÖ=ˆ3ÞÅâÅŸáÃ@"Ûº,"›b¨@DDD–ÑhÂÉ“e]†(žþx!î¾ûC¼ðÂ,_~§­K"²)† DDD4 ´¶¶ãäɲ.YYå0Mpv¶‡Z­Àˆ¡X¸ðÄÇ+áÇW‰0GGë.*ÍÍm6®ä\cÆDàý÷ïÆÂ…ŸÀÓÓÏ>;í¼÷kmmç,ôøNDDDýNss[G€p¦!'§ííf¸º: >^‰1c"°xñh4A óíƒÜˆ¨çtî¬b0´Ø¸’ó›2EåËïÄŸþôär7Ü{ïõ]¾þéX¿þ 6lXl£ ‰úC"""²©ÆÆÖ.ii¥ÈÍÕÁd2ÃÍÍãÇGã±Ç’¯Dh¨D"Dƒ]çî --FWrawÝujk›ð [àéé„éÓ‡° <ð)àØ±b l»"‰zC"""ê3õõ-ÈÈÐ áAZZ òó«`2™ááá&“&Åá‰'¦@£Q"$ÄÇÖ%‘ 9:ÚõËåg{ôÑI(/¯Åc­‡—— êêšðÐCŸC,Äb Þzë'¬[÷ ­Ë$ê5 ˆˆˆ¨W -HO/í²„¡   f³ÞÞ.ˆWbÚ´xÄÇ+¯Dp°·­K&¢~ÆÁA†¦¦þ*À+¯ÜŽººfÜ{ï‡hmm`Ù ˜Í&ìÞ…ÌÌ2ÄÆÚºL¢^ÁPˆˆˆ®Z]]ÓYÝÖ¡¨H‹Å__Wh4JÜv["âã•Ðh”P(üð¿5ÊNNûr,66r¹ÜÖe ìßb""ê52™ ëׯ·uWmÖ¬Yݺ¿ÅbASSœí{©"«öv3òòt „ôô2¤§—¢¶¶ "‘ÆyC£QâþûÇA£±ÞÞÜ‘ˆ†;;Û^®øøøôèEóu× ÇÓO7cãÆ#(*2ãÎ;U=vì¾–‘‘a먟`¨@DDç5sæLÌœ9ÓÖeô©ôt--ú Þ€ßcÇmllEffÒÓË:„3e2 bb R)pÓMj¨T îÀ@DÔÁÖÃd}}}áëëÛÃÇž>‹…KÕhP`¨@DDCÞéÓxãñÅûa±XpèPÁ‡ ••õguX—0VÃl¶“’B°`ÁXa€¢L&éáhðhll³u ½‚  ˆˆhÈ2›-øâ‹ýX¾|š›èœ]|âDÉ%k±XPT¤Gzú™áĉRTVÖüýÝ¡V+pÛm‰P©P«6Ì›Du“Ùl¶u Dt ˆˆhH:|¸Ï>û%rrt°X,8{/¤’’46¶ sŒF²²Ê;Âkˆpòdêë[ ‘ˆæ •JœµZÁùDD=Äd²ÀÉ©wgÜÑÕa¨@DDCŠNgÀË/o¾9 ±X³ùÜ•- –/߆††V¤§k‘›«ƒÑh‚££bc­ón¿= *•±±pt´³ÁwBD4ø55µrÆ Q?ÇPˆˆ†£Ñ„>Ú‹7ßüŒF3, L¦sÉ$زå(4š L˜ƒG•J°0_H$â>®œˆhhsp`pKÔŸ1T "¢«–——‡}ûöaÁ‚=zÜÆÆF¼óÎ;xî¹ç®ê8¹¹Lœø: õ—µ6×l¶àÆc±rå]Wu^""º:C  O[—qI555øðÃñì³ÏÚº¢>Ç—[ˆˆèªeeeáƒ>èñãÖ××ã/ùË?^«­ŸßýX½:ùùU—=ìËd2ãðá‚+>/õ;»þÿ:h]]>ú裫>΢E‹PPÀçX*Ñ ÔÜ܆͛Àdª¸¸œô%‹`g'½èR†ÎaDDd;­°·ïÿ¡BHH²³³¯ú8?ýôêêêz "¢¾ÃPˆˆz„ÙlÆÒ¥Káææ???,_¾ ×둜œŒ+V 00¾¾¾øøãñôÓOÃ××ظqãE½víZ 6 ÎÎθï¾û.«ãÀÑÑK—&C¯ßŒücrr^ÃÉ“¯â‡žÄ¿þužxb2î¸# Ápww'‰ Y‡5ž8Qzu?""º*f³R©ÄÖe\’N§Ãm·Ý&ÜÞ³g`oo˜˜|÷ÝwÂ×^xáøúúÂÞÞ'NDi©õ¹föìÙ¨¬¬ÄìÙ³±wï^TVVbêÔ©øüóÏááá“'Oâĉ¸þúëáàà€¨¨(lذA8î¿ÿýoDDD@*•" o¾ù&€žy&º˜þûÑ€pøðaŒ78zô(n½õVDFFbìØ±Ø½{7ÆŒ­V‹>ø .Äk¯½†ÊÊJüãÿÀ‹/¾ˆ9sæœ÷¸&“ ¿ýörssQRR‚¤¤$ÜsÏ=˜8qb·kôðpÂðáÁ><øœ¯Õ×· ¨HÂÂjV#7W‡úú–nŸƒˆˆzNs³NNýPcss3vïÞ À0LŸ>ï¾û.æÎ‹Ÿ~ú óæÍÃÑ£GQXXˆO>ù€\.Ç]wÝ…W_}ï¿ÿ>V¯^½{÷bõêÕ=z4t:öîÝ gggüøã€J¥ÂóÏ?_~ù¿þú+f̘ÄÇÇã¾ûîÃÆ1mÚ4¤¤¤`âĉX°`L&ÓU=] C""êxíµ× “É0vìX<úè£Ø°aÆŽ ³ÙŒ?ýéO‰DHNN†T*ŲeË„Ûo½õÖEýÊ+¯ÀÎÎáááP©T½ÒêêêµZµZÑãÇ&"¢+c4š ÙºŠîùöÛo1|øpaxñþðÜ|óÍØ´i­­­puuņ `4XŸGÅb1<<< “ÉXÊ•+W"00›6mB@@–,Y¸ñƱ`Á|õÕWHJJÂþýûqÍ5× “ÉPWW—«~&º. "¢.üjµåååÂmgggÖåöööJO¤­ IDAT¥Âí‹‘H$ðõõn_êþDD4x´µµÃÅÅÁÖetKii)¢¢¢º|.::%%%¸õÖ[qçwb̘16lüqÔÔÔ\ðXb±€ÂÂBdee!$$DxÛ¸q#jkkaoo#GŽ`êÔ©ÇŒ3ÎY*x¥ÏÃD—ÂPˆˆzDuuu—Û•••ðòò²Q5DD445µ ˆAgsss;ç9Q¯×ÃÝÝ‹o½õôz=¾úê+´´´àŽ;î¸à±Î¾àwssøqãPXXØåíý÷ßÇ·ß~‹çŸ/¼ðrrrðÛo¿ÁÉɩ׾G¢³1T "¢QXXˆmÛ¶°n¹zõjÜ|óÍÝ>ηß~‹ôôôž.ˆˆ£Ñ„ÆÆV¸»¬‹ãÉ“'cçÎÈÏÏ`±°yóf$''ãõ×_Ç„  •J1räHÜsÏ=(++»¬ã&''cïÞ½ÈÌÌ455!)) ß|ó JKK‡qãÆA"‘àÀ0 ½ö=m`Å~DDÔcÚÚÚ¡×7 ººUUõÐë ×7¢ººYY®ˆ‰©ïÖñF§žz o¾ù&rrr0|øp<øàƒÐëõÝ:ÎO??/š/Ž?êÄåDD}Èb± ºÚºä@§«ó hmmïòx{øù¹ aAHˆFŒnûúº {y9 Ëz}23Ë‘Q†ÌÌ2üøã dgW ­­2™~ˆ‰ À¢E7 66ï½÷*$’Á‘977gaùò§v ²²Ê‘•Uޝ¿>Œâb=Ìf ííØØ@ÄÄøw„ðñq±uéDDCZMM€·üh¨a¨@DÔQQ×PUeí&(/¯…^oýœuùA=ÚÛÏtØÛKáåe |}­a@D„üüÜáííÜñµ3aÝÅÿÙ6MÈË«Äÿþ—“'Ëpò¤5DÐé¬Ãš||\§Àõ×G`Ñ¢ˆ¨(Èd’.ÇY»Ö|¾ÃHR©'Ž?‘#]ñØc*a DSSrr*pòdYGØPíÛOàôéFÖŸUll ÐÙˆ¨(9ílùí µµM°³“òß]¢~Ž¡Ñ¦³ª«ëQQaº ªªêQUU΀ææ6áqb±>>.ðövE@€;¼½]å¹Ü >>®ð÷w‡ är7¸¹]ù«/UUõ]º23Ë‘“S£Ñ™L‚ÈH9bcñÀã¡V+??×K×l¶ ©I '§öKÞw HÜ‘’R…íÛWÂÎNŠ„„ Œ†‘#­o‰‰Á]î_UU¬¬r!lHIÉÇçŸïGK‹b±ÁÁÞP©ˆ‰ñGttT*ë ‰„*õ¤ºº&xx°K¨¿c¨@DCNgXPVV‹êêz”•Õu¼¯ÞwÎ*8{쌳³}—@@£ ‚¯¯ëYaõ½K^`&äæê„®ƒÎ¡ªÊº;ƒŸŸ+bc1~|4zhââ!?§ûàbš›Û°o_.vìÈÀÏ?g ªÊ ×__}é­­xá…ÜpÃ4HÄ õEh¨/n¹%A8vssrrtÈÊ*ºE~ù%S|¼¼œ( †ŒŽ@T”®®6ùY $µµÍðð`¨@Ôß1T ¢~Ïb± ªÊºä ¢¢ååu¨¬4 ¼¼UUgÞ_,,ðó³†gßî|ooß÷ÿ¦Ž Ñò.Ýz}Àßß±±¸ñÆX<öØ$ÄÄ "B©ôê: 22´Ø¹Ó$¤¦–ÀÁA†ñã£ñÊ+3œ¬^YOIù䪿ÇþÂb1B&cÉ’upuuÀŒI˜={4š L›iÓâ ­8|¸@¾ûîZZŒËÝ;º¬ACtt€0ÓÑÑ AHHêrÎêêde•!+«™™å8|¸6DS“u™ŒR鉨(ÄÄt¼÷Gd$ç5­®® žžÎ¶.ƒˆ.¡ÙTkk;ÊËk¡ÓPVÖù¾:u(+«Ee¥F£IxŒ»»üýÝ —Ÿé,è/aÁùTTÔ íóyy:´·›ao/ET”µû`òä8ÄÆ@¥RôØQmmíØ¿?;v¤cçΓÐjkàïïŽÉ“Uxê©©7.ªßüœz‹ÑXûïĤI·àë¯cÓ¦Cøä“½Ðh‚0{ö̘‘'¸¸Øc„L˜Àú³KM-AJJ>RRNáõ×ÿƒ¡nnŽB'ÃÈ‘¡HH>g©‰ ÆŽÂØ±g–P˜Í””œFvv9²³+•UŽÿþ7k×þmmí¼kÐ Cvw) Ñ`QYY  /[—AD— ²œý²Q:}º:ZmMGgA-ÊËë ÓÕ Bç¤}É$ðñq…Bá ¹ÜXƒƒÎÏxÓûû›¶¶vdgW #C+t ¤§kQ[kÝ+0ÐCh…W«ˆ Dh¨ïUwüž^߀]»2±sgöìÉBcc+Ôj¦LQcòd4%D"ÑE1þ|Àúõë{´6[‰DX¿~=æÍ›ÀÚù’’’M›aÛ¶T&ÜtS<æÏ믺~Ïd2 ƒ;ƒ†ÊÊz88ÈpÍ5Ä!))ÎÎö—]_{»EEÕÈʲ† oU0MJ­K/:»¢£­!!>=þ»CDÔŸŒ·wÜ‘„'ž˜b“óïÙ³±±±Ëå69ÇŸuÜ/OQ¯0›-¨ª2 ´´¶#(°¾UT:Þ[—)´¶žÙ=ÀÅÅÁ€;Ôj%üüÜ Px@.w‡¿¿;|}]/xA×ßèõ ÈÈÐ"=Ý ddh…îYÇì¦NU#6Ö:û 7×…æäTËŽ-‚T*Ƙ1xá…Û0y² —}¬;3–æŽøxC¯ÕkK"‘£G‡côèp¼òÊíøþûcذ!³g¿…³fÀœ9£ÎyuL"C¥R@¥RàþûÇ ª’’ƒOaË–#X±b;¤R1âã•92 £G‡cĈPxy]¸óD*#<Üáá~]æ5tnš›[!ìì±yóa””œ†ÉdvøèÙ8{˜ÿˆˆ.F«­Báië2ˆèØ©@D種n‚‚ÒÒ”•Y?Öjk…¥ ËÄb|}Ý„Ž‚³ƒëçÜèÑ­Wnû“ÉŒüü*ddhqòd22´ÈÈТ²Ò:ˆO.wC\\ p±ˆ°0ß^ß^°½ÝŒ””|üüs¶oOGaa5¼½]œ‡É“U?>ºÛ?ó½{sðúëÿÁ±cÅðñiAzúg¸ãŽ[.ú³Y„æf)œWóíôˆÓ§àåÕrÎç¿úê«. ’—W‰M›áË/A¯oÀõ×Gbö쑸ùfÍewÇètu] 8x0ÙÙ°X€ÈHyÇ\kÐÐç÷ZZŒÈÍÕÕÕ`íp(-­Åb££"#刉ñï2·A©äæD4pèõ ˆ_½cÆDؤ†={ö|}}mrþþ®ªªŠ €¡Ñc04£¬Ìt.GÐjkPVVƒ²²:”•Õté0ðñqA@€< Tz"0Ðú±Bá!ƒe½w}}‹°ã‚µ ¡99:47·A*#"B•JØXëò•JqÅ;/\ ƒ¡»wgaûötìÞ…ºº&DGûcòd¦LQáškB®èêÇ ðÆ?bß¾\L˜ƒ?ýéfü÷¿ß`ß¾}}œÅ"ÂÉ“^hn–!)I‘¨{O'UUNÈÎöÄØ±Ún×ü{ÍÍ2;æDEÕœ³sÅÒ¥K1vìØË:–ÑhÂ/¿dbãÆüòK&e¸ãŽÂpÇk¡CHIÉÇ¡CHM-†Ñh‚Ré‰Q£Â… !"Âï’KR.¥¡¡¹¹:de• ;RdgW ¢¢àêꀨ(9¢£„%QQþËÝ®ê¼DD½!-­7Ý´û÷?›Ô‘‘a“ó$J¥îîî¶.ƒlŒ¡Ñ ÒÒbDIÉi!,8»Ë ¬¬Zm […û»¹9"0ÐXƒw(ž ôD` ;=í¿âb½tÎ@(*ÒÃb±ÀÍÍjµµë ³ !&&À&áIaa5vîÌÀÎ8xðD"F Ç”)*Lž¬Â°aÞW|ìŒ -ÞxãGìÜ™Q£Âðç?ß‚Q£Â.ë±F£ ‹†ýûs±qãÃHL îöù¿ùæ(–,ùeeowû±çsäHzè3X,¬Zu÷e/SUU/¿<„M›!/¯±±˜3gfÎqEËYZZŒ8r¤))§’’#G ÑÔÔooŒŠë® ÇÈ‘aP©=6/¡®®IèjÈʪ–Stî4âáá$ ‡Œ‰ ìÀ‰ëDdS?þx‹}‚ÂÂ7Í‹DƒC¢¤¶¶ Zm JKkPZz%%§¡ÕÖ¢´ô4JKk„‹ÀºÕÝÙaÁÙ]P(<ì’„îhmmGvv9Nž,ë˜`ݾÑ`h†H$°aÞP«Âðĸ8…MÛÄM&3Ž-ÂŽÖ !'§îîN¸ñÆLªÆ„ ±pss¸ªsäåUâÿø[·¦B£QâÙgoÆÄ‰1ݪqÉ’uع37>„#B¯¨Žž ¦¦Ë–mÂÏ?gàOºèžèèh‡˜ëðDëüë. ®®WwÞ[±gOvîÌÀ®]™Ðë⃩SÕHNVaÔ¨°yÕº¤ä4Þzë'lÙráá~xæ™i˜6-¾[Ý‹O=µßŸ}¶cÇF^q=½*Ö?üðxõÕ­3&+WÞÕ£ËT[±m[*6m:„””|¸cö쑘9sÄU·èZ,ääè:–KXƒ†²²ZØÙI‘„Q£Â0r¤õíjÃ¥ ©¨¨†œœ ääè“SƒÁ:¯ÂÛÛÑÑþˆŠ’#**@˜ßЗKˆhð{é¥ïðÛoضí [—BD—ÀP¨&að¡V[ƒ’’ÓÂÇïÛÚ¬³ ¤R1üý­K‚‚¼„°àL€à5h—%\®òòZ!@HK+EF†Zm Àßß±±P©P«•ˆ è“á‰ÝQVV‹;2°cG:öïσÉdFRRˆ°¬!2²ç†ét¼ûîN¬[w …'žzj*n¿=éŠæ/<÷Ü×X¿þ >ùd!n¼1öªêê­P¡ÓñãÅxè¡Ïa2™±zõ½¸æša=~ŽÎáŽ_}••Œ†9sFaúôÄë,(-­ÁÁƒ§„ !7W±X„˜˜ŒÝ9—!~~®=r¾ ©¨¨CNŽ5l°În°¾ïìlðôtFLŒ?"#刎öGd¤uPdo×EDƒÓƒ~ ‘H„Õ«ïµu)Dt ˆzH{»ååµ(*Ò£¸X’’ÓBpPRr••˜LÖáqööÒóÖÁr¹;÷Ÿï`±XPPPôtëàÄÎA¯oè²|!>^ µZ •JÑ//b, ÒÒJ;¶}LGzº..ö˜0!“'«0iR\·•Ÿ>݈÷Þû¼žžÎxòÉ)˜={ä¯M]¹r^ý?X³f¦M‹¿êúz;T¬Ý+K—®ÇÞ½¹xé¥?âÞ{¯ï•ó˜LfìÙ“uëö çOŽÙ³G"))¤GÏ¥×7àС‚ŽåùHO×Âd2#4Ô#G† AC_ 6Óéê“£ëÊ…)jkÏ„ Ö®ÿްÁ:,²?þJDýÇ-·¼Q£Âð—¿üÁÖ¥Ñ%0T ê†Ó§Q\l ¬áÁiávYY­°Í¢³³=‚ƒ;; ¼„å ÖÁ‹L_€ÑhBn®ééÚŽ.„Rœ\  Ç£¥Å¹Ü½£‹Á4DG\QwÊ•ª¬¬ïX>qfEvvjjîîN»Qøw,¡°.¥ð÷çq"ÿ‚ÇKÆÂ…7غ"º† Dgimmƒ’’sƒƒÎ™R©žöBp°7‚ƒ½1l˜7‚‚¼0l˜7×_†ææ6df–w ²²ÊÑÚÚ{{)bb Ñ [7ªTб䣲²?ÿœ;2°woZ[HH”)jLž¬B\\`¯»¹¹ Ÿ|²«Vý“ÉŒ‡žˆE‹n¸êœÿýo6î¹çC,^<Ï=wkUÛw¡B§Ý»³ðè£ëàŽ?\€ÐÐÞßw<-­›6ý†o¾9‚úúL˜Y³FbêT5ììzç÷¹­­©©%B'Ão¿À`h››£ÐÉ0rd(‚m2Q½ººYYåÈË«Dvö™Î†ÎA³nnŽˆŠò‡Î<ú¼V"²ÆÆVDFþ_|ñ &Mºº¥vDÔû*Ðb6[ ÓÕ¡¨¨388Ý¥ë@§«îëíí‚à`/Yƒaü…Û …'—'tƒÁÐ|Vx`¢˜›«ƒÉd†««Tª3ÝññJDFÊÔÏ÷äÉ2aYCjj ìíe;6R´ØÛ)­­íøâ‹ýX¹òg46¶áþûÇaÉ’áææxÕÇ>z´3g¾‡iÓâñ¯Íï±€¾ë|‚øÕX¹ò.$'ÇõÉyÛÚÚ±}{:¾üòöìɆ««fÌHÂìÙ# Ñõê¹M&3²²Ê‘’’ßñv ••õppášk† !CRRˆMw„Ñë„y ÙÙÖÐáì­/ÝÜaíh°¾·v8(¶Û­…ˆzGjj ¦M[^¸ª­“‰¨o0T AÇh4¡¸X‚‚jT¡°°……Õ(*Ò£´ôÌ0D{{)† ó¹`pàâ2ø·[ì ••õHO/ʼnÖÙ'N”¢¨HÀÔh4g–.h4J æÝ£ª}Áh4aÿþ<ìØ‘Ž;3PZZ¹Ü ÉÉ*L™¢Âر‘½Ú^vëÖÀ¿þõ3jk›pï½×cÉ’Iðñé™N™ÂÂjÜvÛ;ˆ‹ ĺuöø«Ú¶kóÜs›±iS žyf–.MîÓßA®_}›6B^^%bc0{ö(Ü~{Rý·»”üüª.ÛXVC*#>^)lc9bDh¿Ø>²¦¦±c' ]—å••õûŽn†3Ë(""üäeãʉèJmÙrË–mÄ©Soôé²-"º2 h@ú}pŸ_…‚kx ÕÖýü\ꋟŽe g–+Èån6þ.¾²²Z¤¥• 5µZ¤¥•è+•ž]ºâã•z­tMM#víÊÄŽ騳' ­P©óTHHê³ S£Ñ„M›áwv¢ªªwß=>:©G§ †LŸþeزåÑ^ Il*túä“}øÛß¾ÅÔ©j¼ýö\›¼JäH!Ö­;€mÛRÑÖÖŽ›nŠÇ¬Y#1aBtŸîV¢ÓÕut1ààÁB\Ÿ·]··›±yóa¼ýö”—×bÞ¼ÑXº4¹Çך›LfÜ}÷‡ÈήÀ¶m÷ÚZv[‡ pàÀ)<øà§ðósÃÇßo³6ÛÆÆVlÛ–ŠM›!%%~~n¸óÎk1{öHDDøõy=uuM8t¨ cˤ¦Ãh4A©ôĨQáBÐá×ï.Ðëꚺlyiír¨@E…uy›““ÝYÛ^Zw¢ˆŒ”#(È‹¯ˆõ<ð)$1>øà[—BD—¡ÙT[[;ŠŠô— ärw„…ù $äL`Àà ÷TW7áAZZ Ž/NW'lá˜&‰‰ÁP«puí¿;0tG{»‡åãçŸ3°}{ ªàíí‚I“b1y² &ÄØä÷Íd2ã›oŽâí·w ´ô4fÎ'ž˜¥²wBçŸß‚S°yó$&÷Ê9€þ*Ö9 ÷ßÿ´ÚZ¬^}ÆŽ²i=……Õøê«ßðå—¿A«­ARRfωéÓ‡Ûl·“–#Ž)BJÊ)¤¤äãÈ‘B45µÁÛÛå¬áaP©ývŠÁЂœœraEg—CYY-kØ!ïXBq¦»!8Ø›aQ›0áuÜv["–-›jëRˆè20T ^g±XPZZƒüü*ääT ?¿ §NU¡°° eeµ0›­¿‚þþîAƒƒ¾T[Û$„Zm (È A›FÔ#Ãÿúƒ¡{ödbûötìÞ…ÚÚ&DEù Ë®¹fXŸ¶¡ŸÍl¶`ëÖãxë­ŸPXXÛoO“ONíÕWÓ?ûìW<÷Üf¬^}/n½5¡×ÎôŸP°îœñÔSñéxñÅéxàñ¶. f³¿þš‹M›á?ÿIÜ|³³gÄõ×GÚôB·½ÝŒ'J»Ìe¨©i„‹‹=’’B0rd®».‰‰ÁppÙ¬ÎËa0´ /O×e'Šœðï ƒƒ ~ˆŽ@TÔ™eAA^6û·h0ki1"2òÏX³f¦M‹·u9Dt*PikkG~~rsu8uª99:äåéŸ_…¦¦6€¯¯+""ü„à 4Ôºd!$ħOÛ uCK—% ii%ÂÅÀ@Žð  Aðô´ý¶ÞPT¤ïØ­!))§`±X0jT’“U˜:U›Ög±XðÃiX±b;rr*ðÇ?^ƒ§žšŠ°°ÞÝqß¾\Ì›÷žzj*žxbJ¯ž è_¡`ý¹¿÷Þ/xíµÿàŽ;’ðúë³úÍ6¦C ¾ÿþ6m:„#G ¡PxbÖ¬˜9s„Í_ëÏ.'G×±\Â4”•ÕÂÎNŠ„„ Œm]21rdØ€‚ÛÐÐú»(Ê—W‰ÒÒX,ØÙI%v¤è\R1l˜7â«püx1n¾ùm<ø‚ƒ¹óÑ@ÀPº­s½j^^%òò*‘›«Cn®%%§a2™!‘ˆä…¨(DDø!"‘‘þˆˆð…»ûÀ_›Œ» IDATg?P44´"=½Tè>HM-Aaa5, ärw!8è |}{wÛC[2›-8z´;vd`çÎ dgWÀÍÍ'Æ`êT5&NŒé¿›‹;wfà7~DVV9n½5Ë–Ý„ÈHy¯Ÿ»   Ó¦­@r²ªÇ·Ž¼þ*túå—L<òÈ÷ÅGÝßïŒæåUbÓ¦CøòËC¨®nÀ¨Qa˜7o4n½5¡_u”–ÖààÁSÂ6–yy•HÄP«5* ×]Q£ÂÜü•††Väåé~·…õ9°3l°>ïÙ‰"66ÁÁÞýviQ²aÃAüýïß!3óÿúÝÌ":?† t^¿_²—WÙÑ}PêjëžáëOÃÂ|íðpk€î×ã[ÏÑÅ57·!=]ÛeéS•0›-ðñq–.t.cËû×ERohjjÃÿ›;­A‚^߀Lž¬ÂäÉ*ŒÞ¯þÀÿùç“xë­Ÿ–VŠiÓâ±lÙMˆ è“s77·á–[þ ëN}uaÚ_CÀºåâ}÷}ƒ¡~¸×^jë’Îa4šðË/™Ø¸1¿ü’ GG¦OŽÙ³G"))ÄÖ壪ª))ù8pà”°ÃDGûcôèa‡ ?¿p65µ!/ïÌ€ÈÎÀ¡¤ä4Ìf d2‰²GEY»¢¢üâÃçL¢³<ÿüdf–aË–Gm] ]¦ÿÏÞyGEu­müa¨‚`§#mè*C16PÔ5Öh£‰æšcĘ{£Ég¢Q“X’ÜÜ{©Q#±ÄJQAŠ齃Ҥw¦ìï‰ m`Úþ­åRgÎìygŸ]ÎyÎ[¨¨ ç°Ù\pв›Ëž Y°°Ðéð:à'±27׆ÁXª ‹¶6RR Â’’Š‘•U.—‡qã4‰%©ÜpSZZ‹àà4¥àÁƒlp8ÌÃܹ6صËgX+-ôÆ?ÞÃçŸ_ŹsoxÕI~èÌ‘#øöÛ`¼ñ†>ûl¹Dy¸ôDRR1΋ÆåËqhiacî\¼òŠ+æÍ³•èXÿÆÆ6ÄÄä#**QQ¹HHà—±42/X,s˜šon‘‘¢µ•œœŠ.•(22J¡„ÊÊŠ01™(È×`iÉ÷p Þ€Y†ÃáÁÊê_øê«UX±ÂYÜæP(”~BE¤©© eÈÈx‚´´Rdf–"-í jk›ðòÙØèÁÚZ¶¶ú°¶Ö“©C/R$€ÇkðèQ=*Ä£GEHJ*Fss;ÔÕUâÁÔ©ü&&åÒS¤­ƒ°°,AXCYY ÆÁÛÛóçÛÃÝ ÉH®×‘‘¹8z49˜9Ó~è#6×úèè<¬^ý_|ôÑ"¼óÎÜÿ~i:¹q#ï¿NN&8yrƒTˆ­­­lܼ™„óç£ñàA´µµ°r¥3Ö¬q“©-nóú¤³Œ%?/C.bc ÐÚʆŽÎÀÀb™ÃÒRG¦ÖÂövÎsž |Ñ¡¨¨ JJ ˜šNˆ VVü=œÉÔ–èµBéIIÅðñ9†ˆˆ=‘„–B¡ô**H1\.ùùO»x¤§?AQ?Y”¦¦¬¬ô`c£¾x`k«/s%¥•úú–.Bbb** ¨È€¥¥.¦M›ŒéÓ1mÚdXZêJôÆá¦²²·o§"88 ÷îe¢µ• GG#AXƒÝȆ †¨¨\9Â<=-àëëWW3±ÙS^^‡ ŽbÆ 3œ<¹A,7eÒ$*@jêc¼þúOPSSÆï¿oöj¢¤ à)üýcpáB ž<©…««Ö¬qÁ‹/:JMÉ^6›‹„„"AòLJóÐØØ†ñã5àâbww&X,sØØèÉäzÙÞÎéH\Žôt~EŠŒŒR>‡Ó5I2?_ƒN‡Ç¡ÔÕiu%ŠtpêÔ9€ääýâ6…B¡ **H  Ý<²²ÊÐÖÆ’ffÚ¢¬­uam­'w®ð’ ›ÍEJÊc$$v EÈË«!ã0mÚdL›ÆŒè €ôô'‚ü EPUU†§§æÏ·ƒ——tt´Ämb¿ˆŽÎÃÑ£φ»;»vù€Å2«M+V|šš&ܸñ45ÕÄb‡´‰ -Þ´égäæVâäÉ ˜9sdCF† —ËÃÝ»™¸pá!S ¬¬ˆå˧KlrGap¹<¤¤Ál…§§…¸Í¡P(€Š #‡ÃÏâŸP„ää$'— -í Z[Ù5J¶¶z˜2Ű㬬teÚ]SZ!„ '§ññ…ˆ‹+@\\!²²ÊÀåò ¯?NN&pr2Áôéü0êAÒÜÜ ¦ 88±±PTdÀ݉ùóíáím ƒqâ6qPÄÄäãèÑ@Ü¿Ÿ WW3øúúHÜEQee¼½¿†§§%¾ÿþUq›#Õ¢B' MñïKEGat&w<{6 ‘‘¹‚äŽk׺ÀÜ\ò“;öEqqµ \"**O¡¤Ä€££\]ùá®®fr›{¨¬¬NP…âÙpŠšš&€––ZGÉK~øD§ð`h8Nê`Šäqýz"¶m;ƒŒŒƒPSS·9 ePQa˜è-‹¿††*ìí 0eŠ!ìí áà`&SGªŸpÉ2õõ-ˆ‹+D||A‡Pˆúú¨©)ÃÁÁÓ§O ô NÏp8<<|˜‡Û·S˜ŠüüJL˜0óæÙÀÛÛ³g[KM¢¸žˆ‹+À‘#¸w/..fصKòÄ€/ˆ­[÷ŠŠªè‹Ñ£Åßç² *@rr Þxãg¨««àôé·d¦äagrÇ?þxˆÒÒ:©LîØååuˆŠÊ”±ÌÊ*‡‚`c£77sA^I-M;RTU5v„Qð½:ÿTT4ÔÕUÀdêtü$‘––º02/Õž.”‘eÏž‹HO/Å¥KÛÄm …B TTõõ­HJ*B||§ˆPˆŠŠ()1`m­×‘ÁßS§N†…… ªæK"\.ß›$.®PÊ“SBŒ'tx cútcØÙPO!Ô×·âîÝt¦ 44µµÍ°´Ô„5LŸn,õšqq8z4wïf`Æ SìÚå#ÑIûþóŸ|õÕ-\¿¾S¦ŠÛ²#*ü›ÓM›~A~þSœ<¹žž’;ÊóÉUT±l™t&wì‹êê&À•‹ôôRðx:`±ÌàêjwwsèèPêêšÞ 99åᡸ¸ ¢¢&SL¦Ž …¥¥.ÌÌ&Ñ=”Ò9s¾Ä‹/:Â××GܦP(”BE…APXX…‡ó“ØØde•Ç#02/Èà?mÚdL™b(U‰åäúúÖŽ†ÄÄäãÑ£B46¶ACCŽŽFpvîL¤2iÙHSXX…ààT¥"::„°Xæðöæ—}”•zÓññ…8z4¡¡Ò!&@\\!^~ùßøä“—ðÖ[/ˆÛ²$*üŽ;vœÅÍ›IØ¿ÿe¼þº»¸M9ÕÕMøóÏØ.É_}Õ/¿ì$“ëd}}+>Ìë(c™‹ÄÄbp8<˜˜LìHüÈÏË@«-u¥±±­KrÈÎü ÅÅÕàryPVV„‰ÉDArÈΪL¦6u{—S**0u꧸ti›Ø+$Q(”CE…>`³¹HN.A\\>ÌGLL** ¦¦ GG#°Xæ˜>ï…0iÍâ/ÉäåU"6¶±±]Å “‰pq1Åôé&pv6••®Ô?E x<‚øøAµ†ÌÌ2Œ£Ž9s¬±`=æÌ±–©¸äøøB?ˆt89™`×.Ìše%n³ú¤©© ^^_ÃÒR¿ýö¦DÅ=Ëš¨ðÃL¾ù&GŽ`ãFOìÛ·LfÃÛ’’ŠqæL$®^}$Hî¸~½æÌ±–Ù5´¹¹±±ù‚ꢭ=½±ps3‡››9\]ÍÁdJþ‰á ½#¡x6œ¢ à)Øl. Lž<¡KrHKK0™:²E>þúë>øà22Ò|TŠBE…çhme#66üš× Ehnn‡¶¶&œœL0c†\\L1eŠ!uÝ“`ÚÛ9HJ*Fll!bbò[€Êʨ¨(ÁÁÁÎÎÆ˜1à NN&´¤ãhjjý{™NÅíÛi¨ªj„‰ÉD,X`//;¸ºšÉÜ TBBŽ ˆ ¾¾ 0{¶µ¸Íê7»w_À­[ɸsg·Ä Ÿ²(*trý:?£‹‹)~øaƒL lÏÓ™ÜÑÏ/QQyÐÖÖªUÎX·Ž%3J½ÑÞÎA||!"#s‡ØØ|47·cÒ$M¸ºšÅâ VVz4ôQl6O‘•UÖ‘(’_"'§íí€Á8Wƒ¥¥® œBÚ“£RøìØqÕÕM8}z³¸M¡P(ƒ@îE6›‹G žˆˆÄÅ ­ ¸¸˜aÆ S8;›ÀÌL6oÉ* a yˆ-DRR1ÚÛ9]Ä ggcZ‘aÌCss;Œ'ÀÃÞžpscBGGKܦRzÇ#ÈÌ,Ett>ââøá ……U`0`i© WW38;›ÀÙÙÆÆ4Îu B”T"RRcôhUÌžm oo;Ì›g‹ñã5Ämæ°‘˜XŒcÇbÂÎ 0w®¸Í0uu͘3ç+xxXàßÿ^/nszDÖE€ŸÀqãÆ_PPð?þ¸Lq›4"p¹<ܹ“?¿(„„¤a̘QX¹Ò¯¾ê.W¡\.é饈ŠÊŃÙˆŽÎCmm3ÆŒQ‹eww&Üܘ°µ¥"Ã@ „ ¤¤99aço¨«kŒ§!ðfèLÉdjKmÙbY&!¡‹GDĹ_)YD.D…ªªF„„¤ãÎtÜ¿Ÿ‰ÚÚfèé…‡S $ÐMFrioçt<ùÉÃÇyxø0õõ-=ZÓ¦cÆ SAYG--5q›+•´¶²–…ààT§¡¼¼††ã:ª5ØÃÝ)óá>ÉÉ%8r$·o§ÁÑѾ¾>˜7OúÄ„NÞ}÷wDFæ"4t·Äº˃¨ðç׎çpëVx¯½&{ …Q^^‡³g£qþ|4Š‹«áâb†õëYX²dªÜ%åãñ22J‘ƒˆˆDG硦¦ cƨÃÕ•/2¸»3ac£'³y)†›òòzgCVV™@x¨ªjhi©uT£èônàço02O…1qüx._ŽÃýûÿ·) eȤ¨ÀåòP„;wÒš¤¤b¨ª*ÃÝÝsçÚbÖ,+Î Á44´"&&11ùˆŠÊEBBÚÚ8ÐÑÑ‚««\\ÌàêjkkzÑ5**pû6¿ZCXXÚÚØpt4Âüùöðö¶ƒ­­¾¸Mž>ø`>¼½íÄmÖ¸q#[¶œ‚Ÿß‰Îÿ /¢À²zìXŽ ĦM3±oßR¹[¿x<‚°°,øùE"00£F)cÅŠX¿ž%7ëÍótŠ ‘‘|‘!*Š/2hi‚««<<,Àb™ÁÎÎ@îÆ‹¨©©i„NdfþNQVVPSSˆ Õ(¬¬t1yò™Ë$i¼øâ7pq1ŧŸ.·) eÈŒ¨ÐÜÜŽ4¦àÞ½LA9//[Ì›g ˪ª²Ï)”—×ãáÃÑéÕPЬ¬r””Ô€eeE˜›k Â(¬¬øž ææÚ2ïÁ7”•ÕÁÙù3\¼¸ ®®fâ6‡B¡ ©Û’†ë×’.—OO xyÙbÎz*¡äåUv žBI‰[[¸ºò½fÌ0•¸LõÒ›ÍEDD‚‚RœŠ’’è茷·-¼½í0s¦¥Ü¹?+&L™b_ßðò²•¨R‹Cá½÷ü‹ÐÐ$îæŒÅ:€¢¢ª>;th¥L'ëJJ*Ɔ ?CKK §N½Õã^••U†ØØ¬[ǃ…#!‘‘¹8{6 ׯ'BYYË—OǺu,L:YÜæ‰B22Ê™ƒÈÈ\DFætˆ jpu5‡›,–¦L1¤"ƒˆinnGNÎßÉ!srÊ‘™Y†¢¢*p8<()10yòWóùFR·ùRᅥá»ïn#.n ?¡P¤©ZœŠë×q÷nx<‚Y³¬°x±#||ìeºl—4Âåò–öD ÄÄä¡¢¢jjʘ>ÝXÎàädBkP‹ˆêê&„„¤!88wïf ±± öö‚°C™¹&„àÚµD¼ôÒÔ>MO‚#G{{ìÚå#SbÜ¿Ÿ‰µkOàÔ©·$ÒëâÌ™Hüë_‚ËåõzŒ¢¢÷Ët2P€ï¹±aÃÏ(.®Æ?¾w÷¿8¶´´ÃÜü#«ÄeµµÍøóÏXøùE"3³ ööxýu,_.ßÞ ÏBß“.Á÷d¨ªj„¦¦X,sA^*2 ííääTtI™]ŽÜÜ °Ù\0 02ß%9$ÿo¹õLÆŠßÃÚZ_|±BܦP(”! ¢GðàA6üü¢ `ölk¼ø¢#æÏ·‡¦&]¤%‡‡””Ûftt.êë[1v¬:fÌ0íLáè8™º Ь¬²Ž°†TÄÇBI‰ww¦@HÐ×+n‡…O>¹ŒŸ¾  ]°·7èñ˜ôô'8z4·n%ÃÖV»vù`þ|;™~2À¹s¿‚½½Nž|CÜæôHmm3¦Lù¤WQÁ`ÀÓ“‰óç·Ž°e⡵•÷ß?‹€€d<¸ë×»¶o÷ÃåËq „`útS\¹òžÜ=Á‹‰ÉÇï¿GàÚµ¨¨(áå—ðÚkîʽÀã”–ÖÊt"fB²²Ê‘¨¨½^^¶HO/Åñã|1ÁÊJ»vùÀÇÇ^¦ÇczúøøÃçŸ/—ø\W®ÄcÛ¶3àñºo=**JHI9 —¢ñÕ«ðþûgÁáðÀã‘.c[EE ¡¡»aj*¿U‹!xð gÎDàÖ­dhh¨bõêxí5w˜›k÷ø™ ~Bpp*TU•pâÄ,X`?ÂVKYYe‚P‰ÈÈTV6Â%<<,àî΄­­¾Üì’ÄãÇ5ÈÉ©ˆ ùjjšÈ~ùKú@¡È#*°Ù\\¼‹ï¿AAÁSxyÙaýzæÎµ¡ê¥ioçàÑ£¢ŽRW¹ˆ-@KK;ttÆÀÝݼà &³ç‹: ÿ8>¾¼<àÏX´ÈAn.ˆýü"ññÇè kk=q›Ó/¶n=7’Àáü}ó¬ üôÓ&,\8EŒ–‰íÛýpåÊ£.}ò, †>ùä%¼ýöì‘5L‚áñîÞÍÀ©SpçN:Æ×ÀÚµ®X¿ž…¿þz„¯¿¾çï0lÙ2 Ÿ|òg:àñ22JñàA6Âó‡úúLœ8Z*ááaAHÏ—¿ìŠ‹«Áãu/ii©&SL¦6TT$«¬ú‘#¸q#¡¡‰Û …"Ä&*p8<œ9‰£GÐÒÒŽW_uÃÛ3œKô IDAToφžžl&”5ÅÅÕ02?äv:s"„‡gãÁƒlÄÄ䣭#£ñ¡ üy|">‹±yóo(+«Ü$\¹ò\\º×`nllÃÝ»NEHHª«›`j: ØÁËË..fRóäa8)-­Å‚ÇP[ÛÔåFáo0nÜ(DG*7îó ­ððøË–MÇçŸ/·9ýæöí4¼þúOþÞ~ÔÕU‘–v@â.|GÿìØq®›Pö<ÊÊŠ ýˆŠî=ðäI-Ξ‚Ÿ_,,t›[ÒÒÚnÇ1 X°` þóŸW宜nàryHM}ŒððlDFæò$éèh ww¦ÈÂQEu-#ï´¶²‘“Sììrdd”v+©¨È€‘Ñøn "™L±ì—<›Û¼ñ†'¶n3âßO¡PDXD…r°gÏEäçWâÍ7gâ½÷¼ä6óí@©©iºu?€ÁPÀ øóO%²ÁOâÄ¿`ƒ™3- t“„œ8q^A2:eeE¼ýöl|üñ‹€’’šŽj )ˆˆÈGàìloo;,X`ßkŒ°¼R_ߊ%KŽ£   lvÏOr@Q‘÷ÞóÂîÝ GÐ:ñqàÀ5œ;ˆˆ1fŒº¸Íé7l6vv{ÑØØ €??V¬˜cÇÖˆÙ²‘';»³fî×±JJа³3ÀõëïÓ°À^`³¹¸~=ï¾{ÏŠVÏ¢¤Ä€!üü¶È|éÒ¡Òùà!""ä &&--í00wwfG¸„Å +l,^|<ÁÙ³oÓëÀa€Íæ"7·¢K¾†ÎŠííü4ƒqÝDwEŠˆˆ¬]û?ÄÆîƒ¶¶æ°}…B9FTThiiÇþýWqêT¼½í°oßRš|qDFæâÿ8…ÊÊ@FÆ¡~¹ÂçåU D„²Q]ÍŸôð`ÂÝÝ3gZЛXPYÙ€mÛÎàÁƒì“ЙšNÂK/MEpp*ÒÒž@SS ³g[ÃÛÛóæÙÐ ª^`³¹X³æˆ-èÕ5üY”•µW潞 «0kÖa|úéKR'þá‡páÂCHtáÂ;ðô´³U#Oyy=nÜHÄ_=B||ᇂp¹=oÍ Ø»w }º'„FHHºÐõBYYÚÚZ¸pa+ çl6"<<9ˆ‹+@[ÆÆàæÆ<<˜ýª@S_ß kë&MÒĉàæf>Ü?þââên "Gª"Å»ïþކ†Vœ>½yÈmQ(É`ÄD…ÂÂ*¼ùæ/(-­ÃÁƒ+°té´‘øZ™€ÃááØ±@|÷]0¾·‚‚NœxK–Lívü“'µ‚p†°°,”•ÕACCnnæÁƆfz%wïfàÝwGcc›Ð'é––ºðô´Àüùvpsc ’ŠQz†‚wß=ƒë×z yø()1:D?þÊY)6oþ ™™¥¸sç#© ‰ŒÌÅŠßÆSGRÒ~¹ú^SÓ„  Tܼ™ˆ{÷2Áf󠨨Ðmì+++"$d7sï~‚Æ}=–,}%%E¨««àÌ™Ípv6ëd¶6ââ ðà?ñã£G…`³¹03›¾ÀàæÆÄ¤IÝŸF_»–€üã4!‚ë‘íÛ½±sç©\Ód…á®HQ^^—ÏñóÏ›àåe;Ü?‡B¡Œ#"*¤¤<Æš5ÿÃäÉãñóÏ› ¯/ÛOEIII Þ~û7$&–€Çûû"II‰å˧ãÛo×£ªªä-åçWBUU NN&ðô´€§§¦N5¦›ô0Àfsqøð œ8q èÑC¡%%þïÿ–âÍ7å³Þü`øì³¿ðã÷ºõ«ŠŠ"¸\.—èèhÁÎζ¶ú°¶Öƒµµll¤#iá`è¼!?sf æÎµ·9ƒ‚Ç#˜6íÿPYÙ€·ÞzAªrBŒÍÍí MÇÍ›I LEss”•¢å”)†¸yó¹bžçèÑ=Øïã ðŸÿ¼†_tFË䃖–v<|˜ˆˆDDd#1±VVºpw·€»;?WÓ¸qxÿ}?\¾ßE4c0pt4Ä?¼CÃÁ…TP†‡¾*R¨««€É욯ÁÊJ·[EŠãǃàïƒððéÃ- E†vQ!#£+Vü†øí·· ª*< W]]JJJ†Ó$‰ÅÐÐcÆüíVvýz"vì86›ÓãÓo-­QÐ׋ÌÌ2(**ÀÁÁ¨ÃõÐ3f˜vIBµzõêù òÄêÕ›ðÃÉÈÈ(ë×S1CnnLøû¿Óë1áááøî»ïDi¦ÔRT¤…¢¢®O·”•yPWç`ôèv¨«³¡®Îº:/þ!&+GB||Ža„Ñ8{öí~}FRçZÚTW«Áѱššíâ6§žžžØ¾}û°´]RR‚ººº~Ëk/Exx> PWÇÏE±zµ6ovûÄÍóûaàñ?EUUc¯Ç(*2  €Žê0„@pS»e‹+V­’Ïê#¢ÄÎÎNðïÆÆ6DGç JX¦¦>!VVºxü¸õõ-Ý>¯¬¬ee%|óÍ+]„º?ŠQ­oÏW¤ÈÈ(Evv9JJj@H׊ææÚøí·0¬^íŠ?^,–ļõõ­ª¢%©û§´páÂq›@!†UT¨¯oÏ1Lš¤‰óçÿQ£TúüLyy9ÒÓÓ1i’|Å8VVVÂÆÆ:::hiiÇž=—pþ|4 ¡O¿×®uÁÂ…`±Ì¡©Ùû"ÙY^oÕªU"·]¹u+ššžþœ’’"RRôº¡={ëׯ—ûóT]­†Ç5Áå*@G§êêlhh°¡¤ÔU¼ñ÷÷€>³æË7o&aË–ßpûö‡ý.!)©ó¿±Qãáì\.nSºáïïuëÖÁÏÏoXÚOOOGyyù€÷:~²Ý \¸ŒÇë°gÏ\˜˜ÈÖÝg÷ÃÒÚÊF[µµ-hkc£µ•úú´´°Q^þYYùPUUG[MMl´·sÐÚÊAXX¦LÑ…—žž&¢ÿQr@ee%`öìÙ½S_ß‚èè<ܼ™ˆ?þˆéõ¸ÎkŸµk]ñÅ/cÔ(º?Šá^ß¾·UNN×| qq…¨¬¬!KEв²:8;†/¿\…uëXý*=-©û§¤#×gòΰI„\.[·žF[?ý´±_‚³<«tËwïÞ¤¥=ÁæÍ¿¢¸¸€pwzeeELœ¨ oïþõ•ŸŸÖ­[7d[å™¶6>ÿü*ÂÃÄÇ` †b×>.—‡‹{÷2zÌ…ñ,TÙí™ò!ÇŽbÑ"‡~ Hêü¿x1+V8‹ÛŒnŒÄ¸ÒÑÑÍÀÃW¦LV­š €_VT˜ ,tAMMjjÊ=VC)//‡¡!zÓK<…„¡¥5 ÞÞvˆ‰ÉïÎó<×>þ‹èè\üøãFÁ{t:#±¾©««ÀÁÁF‚×^|ñÌ›g‹Í›_è’¯!44?þxoØ+R$&ƒÇ#øðà 8s&‡¯‚££QŸŸ“ÔýS’‘·ë3Ê0Š ‡Ý@DD._~¯Ç=”®Bpþ|Ž»BHŸIé~<ÿ͛ɂ2…”áGUU _|ñ2\ß~ûK—¾Œºº´´´£µ•††V47ÿý簾6´´´£©©­¨ªjDSS›¸EJ LAzz)þýoÙÙ¨%QP&dMP È7o& MjÜ ‡ÃEqq5.<†Å‹ FÀ2Êpž…„„"?þ ,,tº ã=U¤ˆ‰ÉǹsQ"«H‘”T %´·s’ò‹Çš5.Ø»w -/K¡ ‘a’ñ¿ÿ…âØ±µ˜:uòp|…LQ]Ý„wÞ D]ÝÀo6óò*PPð”–æÊÊ Œ«Ž±c»?£PD !ÇÁÇÇ66úâ6‡B¡PEAÁSäåUôûøÎ‡,W®AGg3ª«›è  òÝw!X¸Ð=‡5)*2`b2&&1¾}—÷ž¯H‘™Y†k×»U¤°¶Ö$ˆd2µah8®Kˆ¿: ߢ3ÖÅ‹±¸z5{ö¼ˆ×^s§IÍ)”A"rQáéÓF|øá¬[Çš5²™@J”´µqðë¯á04Ô§;;}ÔÖ¶ ¹¹mml46¶¡µ•-4`HH­(@¡È8·o§!%å1Ž]+nS( eЄ„¤ }_Q‘55eŒ­ UUe¨««`ìØQHL,B]]5~ý5Û¶Íë3ñ7Erˆ/Dxxvêóã``0³fYuy½§Šwî¤÷Z‘">¾χø³Ù\°Ù\ìÝ{ §N…ãСUps3”Š<#òy÷î ÐÐPž}KEÝ´L¢ªª_ßprRš˜ŠË塱±MM|×úÆÆVà@{ Eö9v,ÞÞv°·§.À Ezqr2Á™3[ÂÁèÑjPSS††† FVëµL*?Fû|}ÿa‹)CåÛoƒ1gŽu—ü ¢`„ÑpwgÂÝÙåõººæ. "33ËpêTêë[{m‹‚ÜÜJ¬\ù,Y2Ÿ}¶::«@C¡È3".\ˆAPP þüó]hh OæVyEQ‘1cÔ{L>E¡Pd›t$%•àæMš}šB¡H74,V¾HL,ÆíÛi¸tiÛˆ}ç˜1êpv6…³³©àµÀÀlÚôs7O…géô ¾u+ AA)ðõ]Åá6—B‘ D8TQÑ€O?½ŒÍ›gÅ9·¡šš|õÕW#ö}”‘᯿þÂLJåü655áàÁƒ"mSäääà·ß~I[?ÆáÇ‘’’"’öúBVÎÁHqüx æÍ³éW–ê¡"ÊqÕ 8|øp·‹ Y_’6×;×çç¡ý>ðvD1þ qòäÉ!µÐó7ô6wžGØ<•¶ótèÐ xzZÀÕÕL¬v$%CY¹ÏRÙl.Z[Ùøâ‹ëÐÕ}uýúœ$޹Þ(..”}icÉ@d¢ÂW_ÝÄØ±êøç?‹ªÉ~QWW‡ŸþYðÿ·Þz ùùù"ÿžáj—Ò3þþþˆˆˆèv~EACC>ýôS‘¶)222pâÄ ‘´õúë¯#!!JJ#£*+ç`$¸?ññ…øàƒ#ò}¢W½QWW‡}ûöuû·¨µñ%is½s}~ÚïoGã???ß}÷ÝÚèù z›;Ï#lžJÓyº?aaYQ¥ìÙ$ÏÃ`(@EE©K’F%%E¨©)ƒvdg×#/¯çðg‘Ä1×UUU`±Xøë¯¿z|_šÆErÉDbb1ΟÆÉ“oŒxâdff þ€mÛDïb5\íR„óüù¥ EEEøâ‹/`mm-nS(Ïñý÷!˜5Ë Ó¦Q—aÊСsB‘|dažBpèÐ ,Yâ8"^v}q÷.ÿZ’ÁPÇPUU‚¡áxXXèÀÌlLM'ÂÄdŒ'@_, (((`É?˜™M§ù"eÓ¦Mxúô©¸Í ÈCöT „`ß¾+ps3Ç¢E¢°i@”——cÉ’%€5kÖ ¢¢kÖ¬AXX 99PSSƒ¥¥%Ξ= ¨¨¨À‚ púôiŒ;iii8wî˜L&””” §§‡¯¿þº×vïÞ½ GGG¨ªªÂÚÚZ öõÔ®4Ò[¿UUUÁËË ~~~077‡††Þxã p¹üzÓ·o߆TTT0}útÄÆÆ Úì­Ïàüùó011Á¨Q£°lÙ2ÔÕñ]Íž=¿}}÷µk×`nnuuulܸ~ø!nÞ¼Ùëoüé§Ÿ`ll lܸ<^ï6$‡íÛ·CKK ÚÚÚ8t耿ûêØ±cÐ××ǤI“ðË/¿`×®]˜4iôôôpþüyÀÆQTT„×_7oÞDAAæÌ™Óå{Ö¬Yƒèèè!ÿž…s0œ¤¤G~þ× û~ùeöî]‚õëÝàáÁ„¡á80 }7Ü¢Z3„Í[aïõ6®:ùÏþBÜÜÜúü-’>Æ("×®%CÃ$-íñP›"„RVVFBCCû}|~~>ÑÐÐ „RSSCôôôHhh(ioo'DOO|ÿý÷¤µµ•„„„---òàÁR\\LFE–/_N"""ÈÓ§O‰ªª*¹|ù2imm%÷îÝ# ƒTTTtk·¬¬Œhjj’_ý•´¶¶’+W®uuu’‘‘ѭݶ¶¶~ýŽÐÐPRVV6˜.눟Ÿ_¿ŽÖo¥¥¥DEE…lÙ²…´µµ‘¼¼<2vìXDŠ‹‹‰¦¦&¹|ù2inn& ÆÆÆ„Çã í³„„¢ªªJ.^¼HZZZÈñãÇ rüøñ.çWØwçææ’Ñ£G“«W¯’––rðàA¢¨¨H~ÿý÷n¿¯´´”´“““CÆŒCîܹ3,ý9üüüH§åµk׈‚‚Ù¹s'ijj"aaad̘1Äßߟ”––ƒA>ùäÂãñÈÿû_€>|˜ðx<òÕW_&“I!¤¶¶–˜šš’€€ÒÚÚJÒÓÓÉ„ º|—££# ôùQœƒö—4²uëiâíýõÛÈxÕ¸ª¯¯ïuM-..&ªªª„Òåß}­­#9¾Ö­[GÖ­[×ïãJZZIKKë×±Ã5×wíÚEÞxã B.©ªª’ 6B9sæ qttº>?¨æõp퇽¾U¿ kGã?44”ØÙÙG¶nÝJfÍšE !„}}}’MêëëÉK/½Dþñôø{‡zþÚ¿e ë½¨Îß`÷DasGØuÖóóôy¤a}knn#®®ûÉ?ÿé?lß1Rˆcÿ6o…½'l\BHrr2155%•••dÖ¬YäÇìñwˆbŒÉúõ¥;C:Û<Ì›÷ùàƒs¢²gH¢!„GB9þ<™>}z—ã·oßNvìØAŠ‹‹ òø1_ imm%qqq‚ã:7úìììníž8q‚¼ð ]Ú]¹r%ùì³ÏºµÛ_$ITÖo Í“'Oï½ð Äßߟ9r„,Y²Dðz{{;9|ø0ijjÚg»wï&¯¼òJ—÷¦L™Ò£¨ÐÛw8p€¼üòË‚×y<ÑÓÓ**TTT^sww'—/_îWÿ"9¢Â¸qãH{{»àµ={öåË— ~cç…eVVQRR"l6›BH||<ÑÑÑ|ÎÜÜœDFFBú¾€ÌùQœBd{Ó*)©&FF;‰¿ÌÛèE‘(Æ•°5µ7QAØ:1ÒãKÒD…á˜ëwîÜ!FFF„B¶lÙB¶mÛFŒ !„¼ùæ›äã?º>?¨æµ$‰ ¢èwaíˆbü‡††[[[²uëV2qâDM„råÊ¢¯¯ORRR!ü›ŽšššïPÏŸ$Š ¢8ƒÝ…Ía×Y„t§Ï# ëÛ—_Þ$66“§O†í;F qìŸÂæ­°÷„«ææf2eÊD!ý†2ÆdùúŒÒ3C  IGff¶o÷J3ÃFAA222`bb"øsþüyÔÖÖ ôõõªªªˆ‹‹Ã‚ `nnŽåË—÷êæSRRKKË.¯YYY¡¸¸¸[»ÒH_ýzzz‚+((>÷l¿(++ã£>‚ºººÐ>{üø1ìì캼gkkÛ«}ýùn˜™õžiXQQ“&Mêr¼4bnneeeÁÿíííQZZ*ø¿††þïSUU$}êïèùï Y9ÃÅ?Ü…ŽÎ,[6}Ä¿[ãj kj'ÂÖ y_Ã1×===QWW‡¬¬,Ü»wÛ·oGCC pçÎ,^¼xÀë3í÷žû½¯v€¡ÿ´´4úh&L-nsFQŒ9aóVØ{ÂÆÕ ¯¯Q£F!<<uuuÈÉÉArrr¿C’ÇE2’¨ðÝw·±dÉT˜˜L•="EKK 3gÎDAAA—?ÿûßÿt W®\Áž={°wï^dee!&&¦×‹U--­n Nªªª0f̘níJ#}õ[ohjjvÛ/]º„ºº:¡}6nÜ8TTTtyo  d455QUUÕå5aN²ÂóýTQQñãÇ‹ü{šššú>>#ýs‡…ô۳̙3ëÖ­ƒ¼¼¼0þ||ýõ×=z´Ð>[ºt)¼½½akk‹9sæ`É’%h-Z„%K–ÀÎÎÞÞÞðõõ…££#TTT;vìd9—%X,vî܉Y³fÁÒÒÆÆÆØ²eËÚ455…««+¦OŸŽ¥K—Â××}~NØùd÷ˆ6›‹_ 믺ACCU,6ˆb\õµ¦ö„°uBÞÇ×pÌuX¸p!êê꺈 uuuX¼x1ô¹>Ó~];CÿÏrâÄ œ:u ‘‘‘ذaŠ‹‹áàà///¬^½û÷ïKÏ_ß vO6wz% 空º {÷^Ä«¯ºaêTù-,Š1'lÞ {o°×ï€tŒ1Š„3˜D UUdòd_”"Ò„ <Ñ—Ë%OŸ>ü¿¢¢‚’êêjÁk%%%$00PÔ¤7êêêHpp0ILL$„RTTDîÞ½Ûk»ùùù$00dfföÛÞÞ¤Dô·ßž'++‹’¢¢¢nï 볤¤$Lêêê¯=~{£¢¢‚¤¥¥‘ÄÄDJÚÚÚˆ™™Y¯‰Ž†Ê`ú³? &±MKK ¹sçN—¤xC…Íf“°°0&H"Ô_„Q#‹‰€üü"Éäɾ¤¬¬®ïƒûÉ`Æ«(Æ•°5UÂÖ‰‘_’”¨±“á˜ëý¥§õy¸”DˆªßûÛŽ¨Çkk+¹ÿ> "ååå¶»¿HZ¢ÆNDqþ†²' ›;ƒ½Î*ñ¾mÙòqqùœ44t¯X!͈kÿ6oûšÓâWÏ"‹×gá( Fˆð÷Áĉš˜3ÇFTÚÆ a0˜0a‚àÿ“&MÂüùó»c``ƒ>ÛÒÒÒêòÆÈÈFFF½¶Û™EVéo¿=……,,,z|OXŸM™2S¦LéòÚóç·7JJJ0wî\üù矰µµÅÉ“'Áápàää4`û¥ 55µn5´‡Š’’<==õYaçŸÒ7¿ü†e˦CGGK¬vˆb\ [S…!lçñ5s½¿ô´>Ë ¢ê÷þ¶#êñ¯ªªŠ™3gè3²„(ÎßPöDasg°×Y’ÆÕ«pýz"þøc+F‡$!Š1'lÞö5§ee\Q¤‹A‰ ~~‘X»ÖE, Ä(”ž˜6m~ýõW:tÕÕÕ`2™¸uëV— ¼Ф™‹´´'8vl­¸Mw#î IDAT¡P( ¥O**ð¯]ÄÆžðô”OÁ—B¡ BTˆ/Dnn%Ö¬q{(”A³lÙ2,[¶LÜfP(ƒæÔ©p89ÃÁ¡ï§ù …B¡ˆB|}ÏaìXu|üñ‹â6‡B¡ˆ‘»ܺ• {{LžÜ·K:…B¡PúGYYnÞLÂÆòë¦L¡P(éáßÿÁýûYø÷¿×C]]EÜæP(12`O…€€d¼ü²ìÇ©S(ÊHrút&L%K¦ŠÛ …B¡P„‘ƒ¯¿¾…Ï>[†éÓÅmE3f.–-û7¦N5´iÆpt4‚‰ÉDq›E&$*ääT 7·>>ò™¬‰B¡P†6› ?¿H¬_ïeeEq›C¡P(J¯TT4àwNcáÂ)Ø´‰z×Qz¦­­ÖÖºˆŒÌů¿†ƒÍæbüx L:Ó¦M†£#ÿï º—Æ¥H’ab266zÃe…B¡Èýõ55Mذ¡ïÚç …B¡ˆ ‡‡­[Oaôh5=J“ Sz§µ5‡¯êø7©©ñèQŠpéR<Ž Ç´iÆpr2†““ Œh1)d@¢ÂýûY4³+…B¡ˆ˜S§Â±h‘ƒØËHR( …"ŒO>¹„„„b\»ö>45ÕÄmEJPSS†““ œœL¯ÕÕ5 D†GŠðÝw·QUÕuuL:®®fpv6…““ ´´èX“tú-*°Ù\ÄÅ`íZZõB¡PDEBBââ ±wïKâ6…B¡P(”^ùþûœ9‰ŸÞ[[}q›3l´¶²šë× ¥5KÜæÈ,cƨcölkÌžm-x-'§±±ùˆŽÎÃ_=ÂñãAPTdÀÊJ..¦pq1ÃŒ¦00'FË)=ÑoQ!)©--í`±Ì‡Ó …B‘+Nz[[}¸ºš‰Û …B¡Pz$((_~yŸ|òæÏ··9"§¥¥!!é¸~=!!ihii‡‹‹8œ§â6M®`2µÁdjcíZW@UU#>ÌGLLbbòáç6› }ý±pu5ƒ‡‡<<,`lL«Š›~‹ QQ¹˜ýô2š›Ûah8N 0xzZ@WwŒH¾ŸÒú=âcc àä4r%cRSSGì»ä…+W®àÊ•+#þ½ÊʺÐÒò@MÍuðxmCjKAAãÇ/GCC$ÚÛ‹Ed¡ä±zõê.ÿWPPĨQöÐÔd¡¡! Í͉Cj_AA&¬@}ý=´·?TjjPU5F]Ýí!Ù"Ï\¾B€åˇ¿L¯¸æ¿0TTô¡¡1 557DÚ®†Æ4hhLEmmà Ç÷H@¡{ }.Ý<¿?R†‡êê&§â?"**ÞÞv8pàeq›5dÛpûv*nÜHBHHØl.Üܘø¿ÿ[ŠE‹0qb÷JýÝ?T ©é uuTVþ.·^dv«ªš@MÍuuÁ"k³%¥±˜0a êëÃÐÒ’&òöE‰šš2X,sç<›ÍÅ£G…ÏFDDvíúí혙M‚§'_dpscöx^)¢EBús ‹u¯¾ê†mÛæ ·M‚Ç#X¼ø8FV…¿ÿ»"isóæßP„Ý2Ÿ¸…‚7’pðàu<~\ƒ7ßœ‰÷ß÷Ƙ1êCjwçÎóNÅ;»1i’æ Ú¸z5ï¾û;’“÷cìØ¡Ù#¯øøƒµµ.¾ùf¸M —/ÇãÝwÇ“'ÇEÚnyy=>üðܹ“Ž·ßžÝ»AUUºžQ(ÊHSPð) JALL>””˜7Ïo¼á ¦Ôz‰64´"88ׯ'"44\.xñEG,\è€ñã5†Ô>!/Æá‹/®Íæâ£aýz70¢ë¯ƒ¯#$$!!ЬÍN8¾üò&þûß;X½z\Q£TDþ=#Ak+11ùˆˆÈAxx6‹ÀåX[ëÂÃófYÃÝÝ\jŸ$Ó¯«¬ÆÆ6WÃÚš–’¤ Œó磑šúAA»DÖæ—_®Âܹ_âÓO/ÉôÍXtt¸Šøø",]: þþïˆ$1MPP ΟÆ/¿l´ ³g[CQ‘ààT¬Z5cÈvÉÉÉ%HJ*ÆçŸ/·)2‡ŽŽNŸÞŒs碰oß_ IÇ·ß®ƒ££‘¸M£P(‰¡¡¡9¸w/wïf¢ à)ÆŽU‡——-6mš‰9s¬¡¡¡*n3E}} SpãFîÞÍ!žž8xp||¦`ܸ¡ ¤¤<Æž=W€×^sÇîÝ EÖö³de•ÃÒRGä퀒{ö¼WW3¼ÿþYÄÅàäÉ7¤ò¾OMM3gZbæLK|ôÿ6**ÙÏÆÏ?‡AEE,–9æÌ±Áܹ6`2µÅm¶LÐ/Q!3³„ØØHß࢈úú:t6xŠta?^_½6üŸ)ðñ™"²¶%ììr>|·n%ÃÉÀ@_ØÛˆ¤íªªF|øá¬^=cÈý¦¥¥77sQQa0œ=KK]¸¸ÐÃÅ+¯°0s¦vî<‡%K¾ÁöíÞxÿ}o(+‹.n”B¡P¤.—‡„„"Ü¿Ÿ…{÷2_ÀÞÞK–LŬYVpq1ƒ’Òàóш“ººf¤àÆDÜ»— ˜5Ë _~¹ >>öCöò|–ÚÚf|õÕMüþ{$¦NŒ€Ñ]«õDvv9^~yxC%½¼l¼ ï¾û;/þ®Àš5Ò]õoôhUxyÙÂËËPQÑ€ÐÐt„†fà›o‚°o߇——-æÎµ¥^ C _¢BVV´´ÔhùÊ€8|øðá‡>"oÛÛÛkÖ¸`÷î pv6•‰X©òòz|óMüü"ÁdêÀÏïmÌ™cÝ÷ÀîÝ ªª„ÿgïÌãjÌþ8þ¾·R¶ì²“ QŠÒ"!¥Bö};cilYÆ2ÃØ²3fcÆØwC¥ì{eD…„I EŠÖûüþhôÃH¥{»÷Öó~½æõÝçžó½÷<÷9ç|ÎwY°@>q‘®®¦,\x„´´ J”ÝËóÊÛ·i<Ä”)òÿmˆ|H­Zسg,›6]`Ñ"/|}¯³víÀ"]MDDDä½àìÙÛœ;w‡ îòêÕªW/O›6 >¼vvFTª¤¾k¨„„düünàåÂùówH$´iÓ+úââb‚®nI¹ö'“ ìÜÀ’%Þhii°re?z÷¶ThhHZZ½ÀÈH1ž ïS£FyöíÏÒ¥>L™²›‹ïâéÙKm=V>¦jÕ²ôíkEß¾VÙ"Û©SY"Ö-ÑÒ½¾”<åTX´È‹sçnãççQ6‰nÞŒÆÕu+Wö£OÅœb¿~‚£ã2LLj±qãp…ôQ$'§²~ý~ûí4eËê0}zúô±’k,ÀÞ½ÿ0yò.ö\ÚŒ‰y‰¥å|¶l™­‹äΞ=—™>}/×®ýPàXNuFQ9râÁƒgLœ¸‹Gxx¸2n\;µ=‘ù‰‰)øûÒPº´666õiÓ¦mÚ4,”Í©"‰OæèÑP¼¼B¸xñ.RŒéÔ©)ÎÎ&”-«˜|[AA™=û/¢>Üž)S\ä.Z|Š[·bpt\ÆÉ“Ó ÕküäÉ[Lš´“ J©m8D~xñ"‰³gosìØMλÍË—o¨]»"®®YÕ'Z´ÐGCC\3äDžŽ££D/‘<#sæÀܼ6½{[*¬Ÿ²euX½z}úüÊÞ½ÿ(L¼P2ví `Õ*?Þ¾MÃÝÝ‘¯¿n‹ŽŽüËþ=~œÀ÷ß`Ô¨ÖrªW/©i-üünˆ¢B>ع3€NÌŠµ   ôõ«pèÐ7¬_†eË|8vìkÖ O"DDDÔ–wÙïÏŸ¿Ë¹s·¹ví!2™€©éÿCZ´ÐWû°¯çÏ“²…„K—"ÐÒÒ ];cÖ®ˆ“SÊ”QÜIúóçI,^ìÅž=—±µ5àĉi4hPMaý}ÌÝ»±hhH10¨Rh}8:süøTÆŽÝJ§NkX¸°;ýûÛª …I¥JeèÑÂ=,²½Nž¼…¯ïuþøã,•+—ÁÅ%K`°·o ö¿)y“gQ¡iS1Á•HÞ8tèÿüóoïÉ ÏlggÈÈ‘­ùþûØÙªøåçwOOo½‘‘Ïññ åèÑPvî ÈÎÕàêjŠ£cc…ß‹ê@žÂZ´˜Ïˆ­3¦m!˜$¢Î$&¾ÅÞÞWWS–.í](}¦¤¤ã켂ºu+±mÛèBéóK zÈâÅG¸O§NM™5Ëzõ*+´ÏM›.0wîAŽ™¤ì÷·n=ÁÑq9^^“hÞ¼®ÜÛ/j,\x/¯üýg«my.yQØá“‘!cíÚãüøãq,-ë±fÍj×®¨[DDDD>… ܺÃÅ‹Y"B`à=S¨R¥,vvFØÙbgg¤ðµDaû Ÿ,„ÀÀûèèháäÔ773 -‰ž¿ÿ=æÌù‹ˆˆ8ÆŒq`Â'¥m¤GÚŒL&ãÏ?•ê{öìmÜÝ·›pˆœÈºG¯ãë{ÿ44¤´iÓˆLqvn¢êê@®’— ÄÆ¾¢Fr…aˆš³x±‚ 0kV§BëSGG‹+úÒ½ûÏ:t•nÝšZßyåÁƒg,]êÑ#!´h¡Ïáñ°Pü<::OO/Æk§°rzÆÆ5¨]»"~~7DQ!23e8DÿþÖÅ^PP45¥L™â‚³³ ß|³'§å,\ØC¬f"""¢T""â¸xñ.—.Epñâ]âã“)_¾¶¶̘Ñ;;£Bu¿W411/ñöή\y@©R%prjÂï¿¥];c…„…æD||2?üð7û÷_ÁÁ¡þ9\é‚ÍÍ›Ñô쩸pâ¼Ò¦MÃÂ!²ÖÞª·æV4zzå6¬Ƶ"!!™ãÇÃðñ eæÌýL›¶;;#ºw· S§¦EÞ£ã}r^¿N!#CFùòò+Ã"R4 zÈöíþ¬];P®e{ò‚•U}¾úÊ–ï¿?HÛ¶Tæ~}úô«Vù±{w úúUذa:^ Ì©S÷P½zy¦LqQh?ÎÎ&øùÝ`æÌ“ԑóçï›(nZU “šøúz°x±“&íâĉ0–.í­2Ï‘¢MTT</ÞåâÅ.\¸Klì+Ê”ÑÆÆÆww'ìì iÒ¤f‘ ÑŠŽNÈ‚‚")SFggÆŽu mÛFhk®«¿ ìÙs™ Ž ££Å ¥cǦ…jçHJJåÑ£*S±è]8Ä¢EGpwßNPP$sçv-¶ù*T(MŸ>-èÓ§oÞ¤qòd^^!|ûí>¾ýv®®¦ôìiIëÖE?C®¿ØÄÄÊ–U|vSõ%#CÆŒ{iÙÒHáutsbÖ¬ÎøùÝdÞ¼C¬Y3@)6¼#>>™_~9ɦM¨T© Ë—÷¥gOËBÍ4¿gÏe.\¸Ë¡Cß(<ÏÕÕ”?ÿAWWG%óýtébޱquFŒØˆ‹ËJÖ­‚­­²ÍR tuuè×Ïš~ý¬yòä%qà@7žÇÀ *=zXн{ó"uÈ”k¢Æ€€{ôèñ3ÁÁó©ZµlaÙ%¢FDG'жíRÆŒqÀÃC±nöyaäÈM„…=áÔ©é…‡—––ÁÖ­—øñÇ㤧g0zt[¾þº­Òb©FŒØÈ­[1œ81­Ð2Òº»oçÉ“—8à^(ý©»w2sæ~BBˆ"í¿(;QcnìÛ÷sæ FòüòËW*ã~*""¢ÚÄÇ'ãïÁ¥K÷ˆ <ü)R©SÓZÙÉ­¬êÙŒñ‘‘Ï9r$oïPBC£¨P¡4®®¦¸¹™Ñª•‘J¸Ÿ9άYñâEÓ§w`Ø0{• /™>}/q*½¶JJJeÊ”]øú^gÖ¬Î|ýu1oT„…=aÿþ8xðqq‰XXÔ£W/Kºuk®ökÃ\E…'Â<øÂÃ=ÕþÊ(†!C6pÿþ3Nžœ¦*{lì+Ú´Y A-™3§³BûÊȱÿ?¬\éÇ‹I nϸqí”ZÊéðá`ÆŽÝÊž=ciÕʨÐú=r$˜qã¶2¿H”²’7=züLÕªº¬[7XÙ¦¨ ª.*@–»î„ ;¸víÓ§w`Ì•\xŠˆˆ(w"B@À}.]º›-"4iR“–- °µ5ÄÚº>ººE7”øÞ½8¼¼²<nÞŒ¦bÅÒtìØ”N̰³3R™PŽ,OÎCüý÷5ÜÜÌX° ;zzªë¶ïæ¶3³:,ZÔCÙ¦|AX·î žž^¸ºš²jU• !QE23e\ºÁAxy…™)£k×f hƒ¥¥¾²Íû"”¿Qk|}¯sâD{öŒU A²²²Î™Ó…Y³öÓ­[sLLjʽAðöeÙ2"#ŸÓ¯Ÿ5S¦¸(=ž,>>™9sþbÐ ÛBŒÑÐrâD}úˆ‰ßçÑ£ÞgÛ¶QÊ6E$ŸÔ®]‘ýûÇóÛo§YºÔ‡Ó§o±fÍjÖ¬ lÓDDD”D||2÷³CÞZ·nÈ·ßv*ò"ÀÝ»±Ù ·n=¡rå2tìØ”¹s»`kkˆ††j 2™ÀÖ­—X²Ä›òåK±uë(œœ+۬ϒ™)#<<†m”mJ®H$ÆŽuÀ̬6cÇn¥cÇUlÜ8CêÊ6M%ÑÐboß{û,\؃ƒ¯²c‡?]º¬¥aÃj hK¯^–j•0:Ïž QQ+Uêá ¢|’“SiÝz vv†¬];PÙæ|€ ôèñ3oÞ¤áã3Y®÷îÙ³·ñôôæÆÇtîlÎŒU&&ÊÝ};þþ÷8}z†R<‹\ŽŽ–Òk)««WcË– \¹2OeNkTuðTxŸë×ãî¾ØØD<={ËRZ""Å‘„„ä½>7®­­vvFÅBDÉΑpûöSªV-K§Nftìh†M}•Ü+„…=aÚ´=ܸÍèÑm™2Å™’%U?ô$""ŽÖ­=9ztŠÂÊ‚+‚§O_1zônÝzªUýèÜÙ\Ù&© 7nD³c‡?‘ššA– ÞŠ&Mä@*oò|´¬Š åâééÍÛ·iÌÛUÙ¦ü‰DŠ}qt\ÎæÍ1¢uÛ ŠÄÓÓ›K—"prj̱cSU*Æúĉ0bÛ¶ÑJ Urv6aáÂ#¤¤¤j]iUgß¾ ½ú‡ˆü15­…ŸŸ ÆÝ};ÇßdÉ’^Åb#!"RœøXD¸}û)×ÀÞ¾A±ñDxÇ­[O²CîÞEO¯:5ÅÓ³VVõU6$,99•+|ùóÏs4kV__Œ«+Û¬<ò-- µ²²ÊNþõ×xæÍû›1c¶rõêCfÏî,®ò€‰IM<={ñÝw]8x0+±cûöX[×gøp{:thª²ßc®¢BrrjaØ!¢füóÏ6o¾ÀêÕý©T©Œ²Íù$U?¾Ë—ûÒ­[ó/¶óÖ­–.õáØ±X[×çСo°²ª/gk Frr*³fí§k×f8:+ÍWWfÍú‹óçïо}¥Ù¡J„†Fùœ®]›)Û9 ££Å¢E=qrj”)»þ-=9;;Ce›&""ò…¼/"øûG_²NL½¼‚ñò áþýgT¯^773–/¥¾Ê ï8vì³g ))•Å‹{1p Ú% Ž¢qã*^œ´´4X´¨u™6m/¡¡Q¬[7„*UĤÿy¡T© hËÀ¶\¼Á¦Mç7nU«ê2lX+n©rÏ£\ïÒw§2•UFD —´´ <åÊ©O<³< ÊöHˆŒ|NÍšps3ÃÍÍŒæÍëªÅ¦<&æ%³gÀ×÷:={Z2wnW*WVÍïÜ~H³fu”mFèÑÃc㌹ —•üùçpµÿL…!vv†DG'°yóE~þù$k×gÐ [FŽlCå•m"Qá]mî7oÒÄê"¬ZåGLÌ+ví£lSr¥dÉ|ÿ}ÆŒÙÊÀ¶XXÔÍõ=11/ùñÇãìÚH­ZùõׯèÜÙ\e'Óë׳aÃ9–,é¥ °³s6o¾€L&¨üI†¢‘ÉŽ ¦_?ke›"¢*V,ÍŸgûvæÎ=ÄÅ‹wùå—¯¨[·’²My/’¸G@Àýÿx"ØÙ1mZllŠŸˆ !!ÿ=zAíÚqs3£S'3š5«£²kŸ‘É6o¾À’%ÞT©¢ËÞ½ciÕª²Íúb22dܸÍ A-•mJ16®ÎÑ£“7n=züÄ’%½éÛ×JÙf©5kV`öl7&Nl϶m—ذáþyžîÝ›3vl;6¬¦TûrÞÕÐ}ó&UD¸y3šß~;ͼy]Õ&ûyçÎælÝz‘9sþÂÛ{rŽݸ¸×üôÓ ¶o¿D¥JeX¼¸'}ûZ«ôÉcf¦ŒiÓöbiYT#;°‹‹)Ë–åÚµGyqŠ2ÿüó€'O^Ò­›˜Ð¯(3h-ÖÖõ;v+ÎÎ+ðôìEÊ6KD¤Ø›ø¯ˆpÿ{ܽ›X±8‹%$\½úoשׁ QQñÔ­[‰ÎÍqs3S«„€ï¸uë Ó¦íåúõÇŒ׎‰Û«}^§°°hRS307/§úºº%ÙºuK—ú0eÊnBC3o^W´´4”mšÚQ¦Œ6cÇ:0rdk¼Ê¯¿ž¢]»etìØ”)S\”–ƒ#WQ¡t鬣))é 7FDµÉÈá᱇fÍê2dH+e›“/,è³ó vïüÏæûùó$~ùå$[¶\¤|ùR|ÿ} j©ºM›.ÃñãSUæ4Áظ:õêUÆÏïz±ºJ“&5Å’JÅ##=||&³`Á¾ùfgÏÞfÑ¢žbn‘B ::ÿÿ‹7œœsòät¾ùf;]»®eÆŒŽŒãP¤¼""…IDDþþÙBÂÓ§¯ÐÑÑ¢.}ú´ÀÆÆ ‹ºjs( (d2ÀÀûx{g ±±¯02Ò£_?+ÜÜÌ06V2Ø_Ê‹IüðÃßìß…NÌX¸°;zzå”m–Ü ~HÛ¶”m†Â06®ŽOVž…®]ײ|y_zõ²T¶YjD"¡CS\]Mðñ eåJ?Úµ[Ê A¶Lžì¢ð¼k¹Š +–F"‘/Š ÅA˜2e7††zŒÛNÙæ uÙ¾ýeË–dâÄö ÖJ-O2¼¼B8q"ŒýûÇ«d©!›ú”/_ŠcÇnÛ“úǯaaQZµÔ#÷ˆˆ|©Zµ,»vaݺÓ,]êÃÙ³·Y»v zzºÊ6MDD¥ðð§DpŸ€€{<{öšÒ¥µ±´¬Ç!vØÚ`n^G%ç¿Â&3SF@À}¼½ƒññ %.î5UgÐ [ÜÜÌ”ž¼M^‚ÀÞ½ÿ0þatt´Ø²ed‘­2õæMwîÄ2y²‹²MQ(åË—bÛ¶Qxzz3qâN®_ÌwßuQé\fê€D"¡S'3:thÊÞ½—Y¶ì(ûö]ÁÝÝ‘‘#[+lß“ëÓXCCJÅŠ¥yþ[¶\"((Ÿ)jùCOJJeƳ¬_È*{X¯^%ÜÝ•lÙ—‘˜˜Âwߤ_?klm ”mÎ'ÑÐf‡@GQ!--ŸPfÌè¨lSD”ˆT*aܸvØÙ1nÜ6œœ–³jU¿"»ù23e„…=! à—.Epùò’ÑÕÕÁʪ>_ÝkkÌÌj«åDdfÊð÷ÀË+ŸPž?OÂØ¸C†´ÂÍÍLåB" ʃϘ>}/þþ÷6Ìž3:é|5ׯ?&3S¦–I3󋆆”9s:cjZ Ý„…E³~ýP*V,­lÓÔ©TB¿~ÖtëÖœõëÏðË/'Ù¼ùsæt¦G ¹çbË“Ä[¡B)^¼E…âÈ“'/Y¼øcÆ8`b¢^ñwÉÉ©lÞ|_=MFF&£G·aÔ¨6ܽG—.?âíB§NfÊ63ß,YâEff&ß}×YÙ¦|–öí›0vìVž?O*vIxΜ '9977se›"¢˜™ÕÆÏσٳÿbèÐ?>Üž9s:g—l)NddÈ ‰"00+±âåË÷ILL¡B…ÒXYé3iR{ll hܸF‘Œ'ÿR22d\ºt7[HˆO¦I“šŒÑ:;F½¨‘žžÉ¯¿žâÇS¿~¼¼&‹5ÁÁ¨T© µkWT¶)…F×®Í02ÒcøðwyF¨Ý¾CUÑÑÑbâÄö|õUK–.õaâÄìÚÈâÅ=iÐ@~žLyZÑT©R–øxQT(ŽLŸ¾=½rxx¸*Û”<“’’ÎæÍùõד¼}›ÎˆöŒãÄ¢.Ý»7gÑ"/œMÔ¢ÊÃ;BB¢Ø¶ÍŸÕ«ûgUÅÁ¡RNž +võˆ½½CiÑBŸªU¿&¢>”)£Í?ÀÁ¡3fìãÒ¥Ö­\äNED>&--ƒààGÙÕ®\‰$99•*UÊbccÀŒ±±1¤Q£j*SÅHUHOÏäâÅ,!áèÑë$$$cjZ‹¯¿nKçÎæÔ«WYÙ&*ŒþyÀŒûˆŒ|ÎÔ©®ŒݶØxª\»ösó¢ï¥ð1×àèÑÉ|ýõVºv]ËŠ}éÞ]ÌK%/*V,ÍÒ¥½éßßšo¿ÝOûö+=º-“&µ—KHDžD…5*ðøqB;Q/þúë g΄sà€»Zœ¨¥¦f°mÛ%~þùII© ÚŠqãÚ}Ò…êÛo;ao¿˜­[/2bDk%X›d2o¿Ý‡••>={Z(Ûœ\)]Z{{#üün+Q!==?¿xxíXH‘/£[·æ4o^—qã¶á꺊ùó»1p ­²Í‘))é=$ à=$%%jÕÊakkÀ÷ßwÁÆÆ@Ôr ==“óçïpäH0~~7xùò ffµ7Î77sêÖ­¤lJbb žž^lÛv {ûlÚ4¢Èæ ¢gÏâ™´°B…ÒìÚõ5 aüømܸñ˜Y³ÜD¯%9bn^ŸÉlÙr‘¥K}8|ø+Wö£U+£µ›§bíÚñó»^ ŽDÔ‹çÏ“˜;÷C†ØaeU_Ùæ|–ôôL¶o÷ç§ŸNðòån‰»»Óg]îkÕªÀðáö¬^}Œ>}¬([VõkWoÛv‰°°';6UmNs\\L™;÷))éÅ&+÷… wyý:77õ ­)êÔ©Ä¡CX¾ü(3fìÃßÿK—öVˤ±""ÉÉ©\¹I@À=üýïüˆ´´ j×®ˆ½zµÀÚº~‘>U/(iiœ;w/¯`üün’˜øsóÚ¸»;Ò¹³y±qƒ÷öaΜƒdff²ví@zôPýyŸLdäóbæ‘RæÎíJÓ¦µ™2eáá1üöÛtuU­®.H¥† ËÊÁ2sæ~úöýaÃZ1{¶ÛWÃË£¨P¨¨ø/ê@D=™3ç%K–`æL7e›’#iiìØÀ/¿œäùó$¾úª%îîíò\ZhÂ'ví äçŸO2sf'[[0ž?OÂÓÓ›Q£Ú¨U&çöí3cÆ>λ³³‰²Í)¼¼BhÖ¬Õ«—W¶)"*Œ¦¦”™3;Ѳ¥!îîÛéÐa¿ÿ>”Fª+Û4‘Ï’˜˜ÂåËYUïEF† }ý*ØÚ0h-¶¶Ô¬)V¾ù©©œ=Α#!?~ƒ×¯SiÞ¼.“&µÇÍͬX}Ož¼dæÌýœ8FŸ>-˜;·«Ê‡x*Š(€bþð1Ý»7G_¿2ÆmÄÍm5[¶ŒD_¿x–)WUª”eÆaüõ׿Ì9ÈéÓá¬]; ‹zùn+¢B%’’RIHH¦B1gQÇÏï‡_cÇŽ¯U2»îÛ·ilßîÏo¿&!!™lpwwÌ÷&®\¹RLšäÌ’%Þ ÖŠjÕT·Îñ‚‡)[V‡É“•mJ¾ÐÓ+G³fuðó»Y,D…ÌL~~×7NK¯Š&mÚ4äøñ©Œ»•NÖ°pawú÷·Q¶Y""Ù$$$sùò.]Š àaaOÉŒŒô°µ5`äÈ6ØØˆåRó@JJ:g΄säH0'N„‘œœŠ…E=<<\qs3+vb´L&°iÓy–,ñAOO—½{Çagg¨l³”ʵk©S§•*¯×9an^_ßÉ ¶‘Ž×°~ý`Z·n¨l³Š={Zbgg„‡Çnºwÿ‰3:2n\»|yFçIT¨S'ËíêÑ£xQT(BLº—‹#Äp¥ñìÙëó!Ü' ‚ðð§H$ШQulm ™0Á qÓ“GRRÒ9y2 /¯Nž ãÍ›4Z´ÐgÆŒŽtìØT¥4IXئNÝÃ͛Ѹ»;2aB{µÈß%ONœ£LmLLjeâ…„D‹R’ùAO¯~Ô)»4èwæÎíª6ùÐÔ‰jÕʱ}ûh6n<Ïüù‡ zÈš5ýÑÕ-™§÷KAr»H&04œÁòå}Šm⢆L&P«ÖÖ¬@¯^–H¥¦NÝñc78wn¦Ê¸ž%&¦°aÃY6l8GFF&C†´âë¯ÛÊ­LáŽþÌšõçÏϤN¬d@ÑÑ ¼:vl*—~rÃÇ'”•+ýغud¶Ûczz&ÎÎ+¨U«Û¶.;äÍíÛOqpXÊáð´ÔW¶9 eæÌýErìØTe›¢rÄÆ¾bæÌ¿HIIÏÎaÀÕ«éÜùÿ¥7’11©É÷ßwU–©JåÔ©[Lœ¸“ J‰á"…ÂÓ§¯¸t)‚ÀÀûøûG‡††SÓZX[×§eKC¬¬ô)WN5ÖêÀÛ·iœ8†·w'N„‘šš••>nnætìØ´X{u¼}›ÆÊ•~üþûš5«Ë²e}Ô*¬SžLœ¸“}ûþA"‘P»v,,êqöì:w6gÎ7QXþ¿ürOOoú÷·añâžjUÁM ŠdÔ¨ÍèèhñÇCiÒ$÷òžyœWжm#fÍRÝ{‘¼óèÑ ll¤RhÐ@¾}­™?ÿ0ëÖ þ`‘¯,’ùãslÜx‰DʈöŒÙZîbGF†ŒÖ­=±²ÒgÍšœ8ÆøñÛyýú-]º˜³nݹö—cÆláðá`Ê–-É/¿ ÂÉ©1¿þzŠåËræÌ·jý¸eËEtìØ”9s:+Û…!“ 4o>—aÃì™8±½²ÍQIjÔ˜œ§ëÜÝ‹õ\óôé+ÆŽÝJhèc/î™kõ™L(ò^@"ò#**ž€€{ÙBBdäs´´4hÚ´6¶¶X[`m]_%ÃU™7oÒ8qâæ¿ ·HKËÀÖÖ€NÌèС©Xb8{ö6ß~»„„7ÌšåÆ A¶ÅúÙõÓO'X²Ä›w;1 )R©„ôôL$ uêTÄÔ´6-ZÔ£o_k1Qá¿?~“ñã·Ñ¸qM6l–ã!ãÕ«iÞ¼n![Wtxñ"‰±c·qõj$ë×ÅÑÑø³×çÙÏÈÈH;wb l ˆjH™ îÞã‡þÆÈHO!Šqlì+ªVÕÍSlγg¯Y·î4[·^¢D MÆsdذV «Ð ©)eêTW&L؉††”Ý»/óÎÌ“'ÃIOÏT¸šžžÉÉ“á$'§0dȾúÊ–ýûƒ˜0¡½Z ..&;v£H‹ AA‘ÄŽ«>|†I“œùå—“¤§g~öºîÝ‹_Æï÷y?bÊ”ÝøûG°hQÏOžZ={›cÇn²hQ%X*¢Ü»G`àýìê ÑÑ ”(¡IóæuéÞ½966XXÔ£T©/Ëø]œIJJåøñ›x{‡pêÔ-222±µ5dÞ¼®tèÐTn•ªL^ÖwÏŸ'1oÞ!¢sgsæÏï^¬½5Þ‘U%k-Yy™2ÿAàáÃ<|ø‚ë×£9Rt÷GûöM8rdÆýIÇŽ«Ø¼y$×øàšãÇo2dȼ½'Ó¬Yñ­¤Q*U*î]_óý÷6lË–õ¡_?ë¯Ï³¨Ð°auöì¹,#E”OxøSJ”Ð --ÈzüO8DRR*ýû¯ÀÖÖ@´DÉnߎÁßÿ^v…†¸¸×”,Y ‹zôïoMË–†4kV·ØÅ¯Ë‹×¯S8vì^^!œ9ŽL&в¥! öÀÕÕT.ë&u!·õ ìÙs™ùóSªT ¶lIûöM”`©jR¿~rs—J%lØ0LmJ‰ VÃÛ{£Go¦k×µüøã€ìpåèèÆß€»û6Nš!>ï¾ )‹õ¤Zµrxxì!:ú%.Ÿ¼6¢B5=zÁÛ·i_\¿RDuBfæO 32²Ä…;üÙ²å"³f¹áîîøÅý¼}›ÆÀëyù2™éÓ÷ââbòŸSÿ¨¨x~ýõ»vR©RæÌéÌ€6$T$ïÂRRÒ‘Éd¼¦¥¥¯ïu…‹ ¾¾×ÑÒÒøàW&“‘šš‰‹ËêìpuÅÊJŸ JsìØ ‹fe„cÇnâêjªl3Tš ªÑ A5îÞ}ʧÖQZZz÷nQø†©0NN9~|*ãÇo£S§5„C|ÿýA45¥df Lš´“šÿž|‰22d„†Fe{"\¾ü€W¯Þ ««ƒ•U}Fn‹µu}š6­-Æ€ÄÄ·øùe gÏÞFìíàéÙ “b™Ä<·õÝýûϘ1c/÷6¬3fts|Ä»<^9¡©)eÀ›<ųG*T(ÍÎcøþûƒŒµ™©S]?¾£Fm&55È*2°|ùÑ"í)[|óÕª•cêÔ=¤¤¤3{öCTó,*˜šÖ"3SFXX b|Šºsýúc23sVGß-ø4Ðûâ>23eŒ½…°° kRÞ´é£G·²¼"Ö®=ÁAT«VŽ ºÓ¯Ÿu¡-|ÒÓ3Y¼Ø‹ß?‹Dò¯9|8„… {*,îO&8|8ä“.áéé™dff…CŒ݆Y³ÜÔra¨¡!¥}ûÆøùÝ(’å#"â¸ÿÎÎâ LnôéÓ‚%K¼³Ì÷ÉÈèÖ­¹¬RmjÔ(ÿA8D`à}ºvmÆž=—³O¹ÒÒ2>üOŽõOdŠ0))é?Âßÿ÷¹råoÞ¤Q¹r¬­ ˜:Õ5ªŽ††4÷EräÕ«7øúÞÀÛ;KH€¬°K—öÆÕÕ¤X'®üÜú.==“Ÿ>ÉÚµÇ12ÒÃËk’XÍ Ê–Õ¡|ùR¼|ùæ?¯I$P²¤63ftT‚eꃖ–žž½06®ÁwßààÁ >é?ÞU2vì eKCÑãCMIHHæòåøûgUf¸y3šŒ U±¶®ÏÀ6ØØP»vEe›ª’DG'пÿ:""â°·o˜§>ññÉøú^çÈ‘`.]Š@*•жm#V­ê‡³³‰Â’D«+Ÿ[ßMº—Fª³uëÈ\]ûE²04¬ú¯÷ðÿ× R õ4ÈV‰–©ÑÑ üòË)¤Rø(’™ÌLOž$°t©sçÏrÕò¤K—f¼}›Ž‡ÇnªW/ŸO%_¢‚™Y||Bb HáƒT*ùÏ‚TSSƒ ôعsLJ8„§§÷'“Ïddd÷š}ûÜÑ×Wnì¯D"aøp{Úµ3f„\½ù™ˆ`…y>œ£  •J07¯ËÚµÔ>Vºtimìíàçw³H‰ ÏŸ'ÉØ±Ê6EmèÝ»!!Q¼š “ tî¬þIIÍÙ³·?{ø»15­%& Ubc_•!0ð>·o?E"ÉJŽmccÀØ±í°±1Ëæoï&NÜ•€Ú×÷zŽ9¡ž?OâèÑP¼¼Bð÷@SS‡F¬Y3€ö훈å4s ·õݳgI8ÐKò¾~¤R ï§9“É–-ë-†0å‘ôôLFÚLJJÚ'×ñ%ºÿñÇY:t0Åʪ~áXéÛ׊¸¸D<|#¾¾SÄÄÊ*Fdäó줊÷‰Œ|ަ¦SÓZ884bæÌNXYéëxýüòömsæd×®€ì߆DG~(*ÄŽæèÑP¼½Cð÷¿G‰š8:óóσprj"–ÔÌ…¼­ï`Ñ¢#*³¾Sôõ+ॠ©©A·nÍhÑB §Ì+ ùdÉÇH$ÜÝwpöì qn”î„D1bÄ&||&çOThÑB™L ((RáÙðEGXØ22þ/‰J¥ºwoÎÊ•ý ”×àêÕ‡|õÕ†\'œŒŒL¼½C z¨2ù9¤R £FµÁÉ©1îî; ùÐ5[KKÊÑ£¡r²B¤¤§ÿBÉŠ-¯ÍÏ?D_ÿËCPT'§&LŸ¾—3g‹L¥„cÇnboß@œ òAÅŠ¥±³3äÂ…ˆìŠ+½{‹¡¹1oÞ!ââs½.##“û÷Ÿ3{öV­êW–‰| A¸s'–ÀÀûÞÃßÿOŸ¾B[[“fÍêÒ½{s¬­ëci©/nh¿[·ž0jÔf=ÊÊõnù!òˆ»wc¹pá.^^Á\¾ümmMœœóë¯_áäÔX|nçu^ß©:uëVþ`½Y¢„sætQ¢EêÅ›7i<}úÿyñsáÄ™™2bb^±x±7 t/,‹,‰„U«úÓ±ã*fÏþ ‰Ûâ#–âæf†‡‡«¢lQ0––?ðäÉK 놘8±=Ó¦¹¨ndäs:tXErrj޹ >¦rå2„„ÌW¹Ú»2™Àœeñb/l¦Q£êœ:5]®}µk·Œðð¬ìÉššH$0k–£Fµ)2Þ ãæ¶##=V¯î¯lS LJJ:MšÌaÁ‚î PtB: ƒýû¯dŸzijjpóæB1vù3ÈdûöýÉ7ñ÷¿O||ššRN¹ÞG"‘°fM±Lg!‘™)ãæÍhïãïË—ïŸL™2ÚXZêccc€M}ÌÍëP¢„X¡£ ‚ÀæÍ™7ï2™ðÉ߀T*ÁȨÑÑñ8:6ÆÍÍ GÇÆEÆK®°(Jë;UäåË74n<ȺgçÌé˜1m•k”’žžÉùówðõ½Ž—W/_¾ÉQ`H$üõ×xll ”`iÑ#<<†VåÏS²¼(Â&‘B %%=[PJ%,^Ü‹Áƒ[¨Í/’èÝûW’’R?9±geþ•doÎuuKR£FyZ¶4$>>™J•T«€T*áë¯ÛâèØ˜o¾ÙÁõëQÈdáá1<~œ@­ZäÒÏãÇ Ù‚‚T*¡I“šüôÓÀ<%–Rg\]Mùý÷3dfÊÔ>^ðÂ…»¤¤¤ãèh¬lSÔWWS´´²Â°EA!¤R }ûZÑ·¯÷îÅqñbçÏßáÂ…;¼zõMM)2™ðÞ©—Àôé{17¯#V +|Dž±òéé™?Êe¸|ù>II©T¨P++}&Lh••>&&µÄ ør$!!™ vrúô­ã§!kãP³fyŽ, _HQ[ß©"åË—¢Lm’’R©S§"#Fä¿j‰H–‡B»vÆ´kgÌ’%½¹råGf%`}òäåƒT*á›ovpöì·¢—˜hÔ¨:£G·Í¿§ÂþýW˜9s?·n-'É÷Ø·oŸ²MÈ_,ðÁ IDAT‘‘¯Y½ú:#G6ÂÔ´`¤ÓÒ2™6-ÈšÀ¥RÈÌ̺¥tt´hРM›Ö¢aÃj4lXFª¨œ`JJ ¯_¿.Íù!3Sƶm—Y³æ4‚ 0x°5ŸNü”_V®<ÉÖ­H$&Mr૯¬ m“]¥ŠòÂ*îÞ¥M›%:ôÚ'ËùÞãØ±©Ê6Eá$&&’šš*×6‡ÝʵkY±¢íÛ7’kÛÚÚÚèêêʽ]Uàýñˆˆç\¾‰¿ÿ®\yÄÛ·ihhH³7ÓŠÜÆ*¯ã›˜ø–9sþ¤@¿Õ7oÒ¸z5’€€ûøûGpíÚ#RRÒÑÓ+‡M}¬­³<6¬†D")ôùª¨£­­ÍõëqŒ»…—/ß~Æ™¥J•à֭ʆv*âù¦î¤¤¤cm½ÈÚ„ihH³7e%Kj¡¯_™Æ«a`Pƒ*U¥bÅÜs(bý¡îãgf¶€uëúck«Ú¹1~}Ô£.xÉ’)_Þ™/ö²`Á“¶&¡B…ÎèèÔGÒyû6‚ŒŒ¤§¿ #ã[·þÆ€äb÷;^½zÅ­[·äÚfn´hQ–e˘6í/ÞÆÕU>y.^¼ À²eÔ¬Y–ððÂû\mÛ¶-´¾>ÆÈH}ý*øùÝP{QáÔ©[têÔTÙf ÑÑÑÄÆÆÊµM›ª\»ö˜*UÒ¹yó¦\ÛÐÓÓ+²¢Â§ÆÃܼææMÉùа°çœ9óˆ'O^3uênÆŽ-Ze&s_™L`÷î@æÏ?LbbÖB2#C–ç‘ÄÄ·ÿæCÈʉú˜ôôLêÕ«Œ••>}úXam]?ÇÊ<ʘ¯Š*™™¾¾QìÜŒD"ÉÎÅ’oÞ¤p{ûŸ½NÏ7uF&Xµê2::šXZV£NrÔª¥K­Ze©\¹äGïH&&æ11¹·­ˆõ‡º_ãÆ•yñâ-ººo2ÊEŒßÚµkÙ¹s§ÜÛýåÐÑ1DWמÈÈD šBZÚãBé[•0`;vìøâ÷—,Y"ÿ¢B­ZÐׯ… wEQá#vìØ!÷M´¼Ù²å"öö ¨_uÛJHH&!á uëVúÏ »¢ãè”±)îÛ·¿ÿ~†æÍmÐÕ-˜«vbb ýûË=ºm¡züÄÆÆªÄ"×Å¥ ~~7øî;õMFùœžÑ®]ñ }ÐÓÓÃØX~Ÿ·eË 22ÊÒ¾};¹µùU¸ÏM^Çã›~ƒzE¦ª@nãôo¿ÝÇ­[O>H.w÷n,ÆÆÕ?ùžgÏ^P™!ë½Ð ÖÖõ>¼5¶¶T«V._¶*SÄ- DEÅ3lØï„…emµ´¤€ A„s*¼ã￯å**€üŸoêLBB2kך|r}÷¥(zý¡ÎãwãF&Ý»7§fMù„×*E_A7µ_B\Ük¾¦m[ù{Jª”K;_”)ÈÞÞˆóço3a‚“\Œ)<n)· … ¥©P¡´\ÚR45¥Œ'ŸÍ®®ŽÜÚRG\\LY·î qj›CâÌ™Ûèêê`aQOÙ¦¨-%Jh2cFGe›QäÑÒÒ(6åÉž={Í¢E^ìÛ÷’bî¥R ¡¡QÙ¢ÂãÇ ÙB`à=""âÐÐÒ¸q Z¶4ÄÃÃ+«úT¬X|æ9UäÅ‹$úö5ãÕ«·T«V¤¤TRRÒHNN#))…””tÞ¼I#>>™·oÓxó&ÄÄ·¤¤dŸÄ‰E_`”7Åm}§lFjƒ¶¶˜¼µ°©Zµ,U«oAAž|ÑܺuCvï¾ÌÛ·ib95CÌÄ+¢ XZÖ£R¥2øú~XG\8u* ;;£•aAL’$"22dlÚtž¥K’žž dd|˜2JSSÊ‘#Á\¼x—€€{<~œ€––ææuèС)ÖÖõ±²ª/×dŽ"ÇܼÚÚÉj{-"ò9DAA¤(ðEw±!™™2îãà *<"""ùCCCŠ“Scüün¨¥¨––¿ÿ=æÍëªlSDDŠ=—.E0}ú^ž}û¸téÒóÇûóJ~æ5y?ËJ”ÐÄÈHgg¾þº-žž½Ø»w,W®Ìåþýå\¼8‹íÛG3o^W† kUìJD¾?N¹ñ¹û ?í¼OQœ» q ÕqüäKaí£ uß·HTpu5åÖ­'<|øB^öˆÈ___^½z@½zõ¸}[}6n"Ń*UÊÒ¬Y]µòx:uêvv†”(!–€):¼?_äu˜W´´4ÐׯB»vÆ nÏ¢E=™1££²Í*Tò3NŸ»Ôa¼‹*âª7âø‰äuß·HT°°¨GåÊeÔjC *Èd2&L˜€®®.U«VÅÓÓ€/^àääĪU«¨Q£UªTaãÆL:•*UªP½zuvïÞ @dd$´Û·o_éÛ·/qqqôíÛ—óçÏKçÎól߆ ¨[·.¥K—fذaÈdyK‚¥jäçû¸~ý:vvvèèèРAvîÜùEíœ9s333´µµiÔ¨ÿý7qqq¸¸¸°uëVÊ—/Ï€X¹reöûž={†¥¥%/_¾Ìñ3•±y‡‹‹ 'N„‘™©úŸ#==“ îˆùráÝïeÇŽPºti†Jff&óï¬ÿþ:t€èèhÌÍÍ9pà1114kÖŒ„„å|¨"Àœ9s¨R¥ ÚÚÚ888ðøqVnç €Ý»wS¯^=J–,I·nÝ>¹Èýx^Éi^ˉ¢ö,+(ù™gòsíûãô¹ßæÇ÷ÁÇóÕéÓ§óÔNN¥ñ–ÇZACå‘Ó³P?õAû(Èù^ÈíµœžŸ£ÈïÛ„âá±[èÙóç‚6£öÂŽ;òtí‘#G‰D"L™2EHNNΟ?/”+WNØ·oŸ#H¥Rá»ï¾d2™ð믿 €°dÉA&“ Ë–- A„[·n •*Uú m333áøñãBBB‚P½zuáôéÓBZZšðàÁ¡téÒ‚ BTT” ­­ýIÛbbb@=z´šš*DDDåÊ•N:¥°ï#?<}úT8}útž¯ÏÏ÷™””$T¯^]øù矅””áäÉ“‚®®®pñâÅ|µóôéS¡lٲ¦M›„””áСCB©R¥„ððp!**J(Y²¤Ð½{wáÒ¥KÂ_ý%4hÐ ÛÞŸ~úIpttÌñ³tlòûýwïÆ Õ«Oï)Û”\ ¸'T¯>Ixðà™²M)t„°°°<]#”(Q"û^½ÿ¾P¾|yáØ±cŸýM:U:t¨ ‚°cÇA[[[2dˆ ‚°}ûvÁÌÌL!öª#ùý|¾¾¾B5„»wï ‰‰‰B—.]„1cÆ‚ üg¾´µµ…¿þúKxûö­°zõjV¯^ýÁüñþ¼ò¹yícäñ,S‡ñUä|•Ÿkß§Ïý6?¾>ž¯nß¾§v>õ¹T}¼óÓ¾¼Ö Åm ¹þÈÏø}îY(Ž_Î(rü  0 Ï×Ëkõ¹{ás¯}îð9Tuß–ßï?' ,*;vC¨UkŠŸT`cÔ™üŠ *TÒÒÒ²ÿ6{öl¡{÷îÙ7GRRÖ÷yçÎASSSHOOA®^½*èéé ‚ðù›S¡f͚µk×Aò}sÆÅÅeÿ­eË–ÂÁƒóôÙÞ¡J¢B^¿ÏÝ»w Í›7ÿàý&L&Mš”¯vÖ­['´nÝúƒvzõê%üðÃBTT”ÑÑÑ‚ BjjªP¾|y!44TA°±±¶lÙòÙÏR±QEQAÁÎn‘ðÇ”mF®,ZtD°µ]¨l3”B~E@xòäIößZ·n-ì۷ﳿ³S§N µk×AF-¸»» uëÖAFŒ!Ìš5K!öª#ùý|‡jÔ¨!ܸqC„¬EQBBBöëïÏÓ§Oú÷ïÿÁûMMMsrš×>FÏ2u_EÎWù¹öã MN¿MAøð>øx¾ÊO;Ÿú\ª<Þùi_^k…â6†ª"*|îY(Ž_Ψš¨ }Ôçî…Ͻö¹gÀçPÕ}›¼D……?ØÛ7@GG _ßëmªXa``€––Vö¿MLLˆ‰‰ÉþwéÒY‰¤$ ÚÚÚhjjfÿ[ÑhhhP¥J•ìFŸŠ&/ßgdd$áááÔ«W/û¿Ý»wŠ—v?~Lƒ >è¿aÆDEEY%ÍjÔ¨@‰%èÚµ+û÷ïçÞ½{ܸqƒž={æø9ŠâØ8;7ÁÏ零ÍÈ•³goãà`¬l3Ô†êÕ«gÿÿ»{õs¿³V­ZñêÕ+îܹÃÙ³g™0a¯_¿&22’S§NÑ©S'e}µÇÍÍ^½zѲeKêÖ­Ëĉs %‰ŽŽ¦I“&ü­qãÆ¹ö‘Û¼ö>EõY&ò3ÿéZáS¿ÍOñþ|UvŠÒxËk­ð%×¾8†_Æÿڻ︦ÎýàŸ„Â{ˆÑŠŠàD¢Ô®Ö… Ø:Zk{»[ï­­ÚöVk[gííP{mýY/XŠ[{Uk8q[¬X¥**K3’üþ‰ ¨N€Ïûõâ9çð<_rÈIžïyF]®…<–Ïí¨ý/}:‚‚‚0hÐ  ::C† ©õx©TŠ‘#GB&“aÀ€Õö5•sce%ÆÀ°s§å&LCÏž¾°µµ:”ía¯³¡C‡B¡PTK*( }xL“&MÂõë×Ñ¥KDDD &&sçÎ5ì¯ú~1bÄDFF¢S§Nèß¿?†~ߤhUz_k*ײ†®®Ÿ¦1ŸoS}V0žÃ{صPh<ucŠvÔƒþ´ÏØk@co·‰´Z­Ö}øá&üöÛØ·o†)ŠkpD"âããWçßQ*•8|ø0œœœÐ£G£ê­¨¨À‘#Gè^`ú1C€nyÂS§N¡W¯^prrB^^ÜÜÜŒªçQó|ÔEff&RSSѯ_?“–[UFF.\¸€-ZÔWü(ÒÓÓqéÒ%øúúÖ˜cá^S¦L——>ûì3£ë«‹úxþŒµcÇ9Lº §N}¹ÐáÔЫ׌‚·ß,t(‚ÐgäýýM3§„©^g÷cêx-1_YYŽ;¥R‰®]»ÂÓÓÓ°¯êû…‹‹ Ý’Y™™™†££cò4M÷S¼¯ÕEC8¿–r½­í<ÝOmÿÆ”cjæ>߯”oîkXUášóõð¨çïA×Bsàù{° &âããé÷Lñ~ó ÿ…‡ýŸs °Äv›±Ïÿ½$?¤nÆŽí…ÿüç7œ9s]»¶2U±šL&«±^飒H$èÓ§O­û<<<0hÐ Ãc!.B Q‹-ТE‹Ç.G?y˃dggãСCHJJÂÉ“'»Î†¬oß°¶–à—_. .βÆÎÿõW.22òÆ¡¦bª×Õ ÂÃÃkÝwïûtîÜ;w¾oyb±¸ÆûŠ)Þ×È´j;O÷SÛÿ1å4õy ã94­] ÍçÏ|øáH$œP‹èa‚ƒƒqüøq¡Ã°ƒböì ())‡åÌ]œü'zöô…µµI/™DDDDÔ¸»»ßwþ´Æ®¬¬Â45ê„;wбoßESKDMÄ A(/¯ÀþýJ5ÉÉ—9ôˆˆˆˆèK—î2mR¡ysg„…µÃºu'LY,5îîèÞ½µE--™žžƒ[·ò™T """"ªââÅ[øæ›½¦M*@LL0¶o?‹ÜÜ"SMDMÀ!س'jµFèP‡¥ÁÖÖÝ»s>"""""Ðh´øç?Ñ£GkÓ'† ë ¹\†µkšºh"jîŒÜÜ"œ8‘.t(tCzõj©ÔJèPˆˆˆˆˆ,Â×_ïÁ¹sX° ÆôI™LŠØØ`¬Y“ Fkê≨‘k×ÎmÛz`çNË‘œü'‡>UÚ³' lÇìÙÃáççeú¤<ûl22ò°woª9Ч@$’¢¨H%tÔ@ €;/þü3 ™™ „…=!t(DDDDD‚ûóÏ,¼òʈŽî‰©SŸó$|}ÝñÔS°zõAsO €­m|üñY¼øâj8p‰½Vè‘ ÒW¯f#--SÐ8’“/ÃÎÎ]»ú‘Ð ”˜4i%Úµó‚1†íf[t}Ò¤ÞxþùïqíZ.||ÜÌUE™0a&L˜`Ò2e²öÐh Q^~ˤ嚛H$Á˜1/àÊbc—¡uk7ÄÆcüøxy9=vùûöí{ü ÉbùÂÝÝ;wž‡ŸŸ—`q$'_FhèœO¡Rff&23…Mô< //áþwêCC;¦ÖPÎ/߯LÃÜ绩¿ž:ž¿†-!! B‡ÑdÅÅÅÕ鸒’rL™²¥¥*¬_?¥Úçc‘V«5Ë-äŠ ž|òcŒÙ³f 3G%))Éäeff–bÑ¢3÷ÆÓO7¼™çCBBàãヴ´LÄÇƺu' P”bàÀN˜0!øÃÊêÑ:Ë(•Jš)â¦ÃÃÃCèê­·ÖâòåLlÝú¦`1tëö¦M뇗_ X –¢  eeeB‡ñHlllàèè(tfÑχ©Yúùåû•i™ó|óõTÌñùƒç¯þ˜ãü=z×®]3y¹Tw>>> yà1J<ûì·HOÏÁ?¾ÿæÕö›-©K—îÂÊ•ûqêÔG¼Ó÷ˆJKË1lØRØÙYcÆ×ÅóW^^;Î!>þLƒ§§#ÆÁ¸qÁM¦7 ÕÝŽç0uê*œ<ù<=åõ^ZZ&úöý ?ÿüºwçð""""jznßV`Ò¤•ÈÎ.ÄO?½Œvíþ–,‡V­\…Ç,|}Ýñî»Ãñãà»ïžƒL&ÅË/¯AÏžaΜ͸|9KèI`¶¶Öo;Ï Rÿá×Òö‘‡è5d*•óæmC\Ü DDtÂÏ?¿ùÀžåfÿ´} ÉÉ—Í]U£põj6Þyç'LžÜC‡v:³“HÄ<8«WOÅñã`Ê”plÛvO=õ)FúIIÇ¡Triʦjðà@8p ÅÅõ?VòÈ‘?Ê¥$‰ˆˆˆ¨é8x0 .À÷ßÀ’%ãðùçãakkýÀß1ëœ zÑÑ_ÃÞÞ«WO5wU Zyy† [ ‘H„mÛÞl4ÕF£Å—p;vœƒ­­cÆôD\\(ZÕ£œœ"tëöV®œ‚!Cê/É–žžƒ°°yؼùuôêÕ¦Þê%""""BffæÎÝ‚ R0hP >þx4Z¶t©ÓïšmIɪ^x¡/ž{î{\ºtíÛ7«*¤>ÚŒ¿þÊÅÎÓ›lBÄbúö퀾}; '§IIDZví¬Zu]»¶Â„ ObĈîËeB‡Jfæîî€îÝ[cÇŽsõšTHII‡Tj….]ZÕ[DDDDDõM¡(Á²e¿â»ïÀÕÕ«WOEddÀ#•Q/=´Z-ú÷_€^½Ú`áÂsW× ýïg1uê*,[6#Ft:‹£ÕjqôèÄÇÁÏ?Ÿ••ÇwÄ ¡ ò:<2£o¾Ù‹¯¾ÚƒsçæÖÛü3f$á÷ßobëÖ7ê¥>""""¢úTTT†o¿Ý‡o¿ý ‰/¿<Ï=™LúÈeÕKRâãcæÌõ8vìxyYîºÒB¸~ý"#áé§»aÁ&]¦  ëןÀÿ{©©7ѱ£7ÆÁر½àìl'txdbW¯f£wïO”ô z÷nW/uFD,Dxx{|øáˆz©ˆˆˆˆ¨>df*°jÕA¬YsjµÓ¦õÅ´iýàà`ct™õ–T(+«@hè\ŒŠwÞZU6*•#GþJ¥ ?ÿü–Q™¡¦ìôékHH8‚OB¥Rcðà@ÄÄ£_¿œµ¿éß>úôi¹sG™½®‚%faùò‰øÛߺš½>"""""s;wî¾ýö7lÙr ..v˜<¹¦Lé'§Ç¿)[oIXºt¾ýö7?þìíÏ„4&sælÆ?$cÇŽé÷]÷“®¸¸ Û¶Abâ1=zÍ›;#&¦ÆŽí__w¡Ã£Ç4þÿ°nÝ ;ö>D"‘YëÚ¿ÿŒ·§Oϧ§Ü¬u™‹R©Â¶mgG^A@@ ¼ðB_ŒÙÖÖ¦›^±^“ wî#$d.Þ{ïoxî¹ðúªÖbýòËLžü–.±c{ N£qåJ6Ö®=ŠuëN +«aaO`üøPDEuaOêÌ™ë:t vÎ[šµ®Å‹w )鎙mÖzˆˆˆˆˆÌáìÙëHH8‚M›NB©¬À!˜8±7ÂÂÌ3”¸^“ ðÁñóÏgqäÈì&½ÂÁÍ›ùˆŒ\„ˆˆNøâ‹8¡Ãi”Ôj ~ýõ"âãcïÞTØÚJñôÓÝñÌ3OrVÿF«Õ¢W¯9ˆ Æ?ÿiÞáSãÆ-‡‡‡_~9Á¬õ™JFF¶l9uëN 5õ&üb IDATý½1n\ýÌ;WïI…Û· ýsæŒÂĉaõYµÅP«53ækäåcûö·agg-tH^NN6lHA|üa¤¥eÂßß±±!ˆŽî WW{¡Ã£:˜={’“/cïÞwÌV‡Z­A@À,¼ûî0LžÜÛlõ=®¬¬BlÝz [¶œÆ‰éps³Ç°a]Ý =z´®·8ê=©3g®Ãž=©8xpf“ì­ðé§?cåÊýضíMøû{ N““’’ŽÄÄcزå”Ê NîØ@‹gžyRèpš´{'wlÖÌ ãÆsrG ¥R©ÑµëxýõH¼ôR?³ÔñÃɘ;w .^ü„ &""""²çÎÝÀ®]ç±cÇy\¸WW{DF *ª úõë(øzA’ 0cFöïÿÌ„DÒ4>¼gf`РEèÝÛß|ó¬ÐáPéé9ˆ?b˜Ü1$¤-žyæINîhaÞx#éé9ؼùu³”ÿÚkñÈÎ.Ä?¾d–ò‰ˆˆˆˆ¦ @‰ää4ìÛw{ö¤"##¾¾î2$ƒ¢W¯6uL°¤ÂõëwЧÏ'X° ±±ÁB„P¯Ôj Æ[†›7رãmÈå2¡C¢Z¨ÕìÛ÷c÷îß “;ÆÅ…¢[7¡Ãkò¶o?‡^X…S§>‚‡‡é—{ ›‡Ñ£ƒð 1yÙDDDDDµÑh´8{ö:~ýõ"¸„'®B$!$¤-žzª"#СC3¡Ã¼/Ó-NùˆZµrEtt/|ñÅ/3¦g£ï­°té.?žŽ­[ß`BÁ‚YY‰1p ?ô7Lî¸víü÷¿‡ “;Žww¡Cm’úöíkk ví: L;|(+«éé9èÕ«IË%""""ªJ«ÕâÒ¥L$'§!9ùO$'_F^^1|}ÝÑ¿¿?þþ÷þ k{{¡C­Áz*À_å"<ü,Y2ÑÑ=… Ã켄ñãW`îÜÑœQ¾ª:¹ci© C†tæäŽ™2å;TT¨±fÍ4“–«ïñûïŸÀÑ‘‰?""""2K—n#9ùO>|‡_FNN<<äxòÉvèÝ»úöí7¡Ã4Š IxóÍ?žŽß~{·QöVÈÊ*Ä A òV¬˜$t8ô˜”J6o>e˜ÜÑÓÓãLJ &†“;Ö—ÄÄc˜1# çÏ Óeo?þx+öìù¿þ:ÃdeQÓSTT†S§þÂÉ“!%%'N¤#?¿®®öxòÉv {½{û¡}{ËÒð(O*\»–‹ððO1oÞ˜F·‚Z­Áøñ+pýz.vîüï~62éé9X»ö(~úé¸arÇØØ` ÖµÁtUjˆòòŠÑ¥ËøúëgñôÓÝLVnLÌ7hÑŸ>ÞdeQã¦Õjqùr–!’’ŽK—2¡Vkж­zöôE·n­Ò;6ƒH$:d“<©³fmÀöíg‘œ<«QÍ´¿dÉN|ñÅ/ضíMtîÜRèpÈLô“;þôÓ1ìÜyR©† ëŠØØ`„„´m”¡EG 9–-›h’ò´Z-üýgaÆŒ¡˜2%Ü$eQãSP ÄéÓáĉtœ<©ëŸ_tëÖAA­ä‹=ZÃÕÕ^èpë…`5VõúëøñÇ£X½ú^|±ŸÐá˜Ä¡C—ñùç»0gÎH&¹ª“;æç—`ãÆ$&ÇèÑ_Á××cÇöBLL/´há"t¨Æ!±hÑv¨Tj“¬Ë›žžƒ‚‚RtíÊ>ˆˆˆˆH§´´©©·páBNŸ¾ŽS§þÂ¥K·¡ÕíÚy¢{wÌœ9 AA­Ñ¾}³&;ךEôT€O>Ù†„„#8|xvƒ_!;»ƒ-BÏžmðŸÿL:Hjê-$&ņ )¸s§½{û!66QQ]U!ܸ‘‡àà9HHxýúu|ìò6m:‰×_GZÚ|ØØXD®•ˆˆˆˆêQnn.\ÈÀùóº¯ 2påJ6Ôj œíÐ¥K+ôìé‹îÝu½œí„ÙbXLRA¡(Ahè<<ÿ|xƒ^#^­Ö .nþú+»vqT*5öîMÅ?ÅÞ½©°µ•âé§»#66AA¾B‡×` ¼ݺù`þü±]ÖGmÆ¡Ciصë&ˆŒˆˆˆˆ,•V«Å_åúDÂíÛ €š#  [  {?„Å$àË/wãË/wãðáÙpss:£,]º Ÿ¾ [·¾.]Z Y˜œœ"lØ‚ÄÄ£HM½…ví<Œèèžðòr:¼eÉ’X³&))ÿ‚XüxóVŒóÚ´ñÀ¢E±&ŠŽˆˆˆˆ„¦Tª––iH\¸ß¿‰ÂB%¤R+øùyú$‚££­Ða78•T())Ç“O~ŒÑ£ƒðá‡#„ç‘:tãÆ-ÃGÄsÏq²7z°³g¯#1ñ86nLAa¡ýúu@LL0„µ5»à?LjêM ¸[·¾‰  ÖF—£ÑhÑ¡Ã{øðÃn"""¢¦ ¨¨ —/gâÒ¥L\ºt—.ÝFZZ&®_¿F ¹\†Nª÷>èØÑÛ$ss‘…%`Õªƒøè£Í8pà=´jå*t8u–™Y€Aƒ!$¤-V¬˜Äÿ©ÎÊË+°sçyüôÓ1ìÛ÷ärF Bll/övyˆ°°yˆŠê‚Ù³‡]FZZ&úöý ;v¼Í盈ˆˆÈ‚)%HKÓ%._ÎÄÅ‹ºäAFFÀÎÎíÚyÁÏÏ ;6ƒŸŸÚ·o†Ö­ÝØ>3#‹K*¨Tjôï?-±|¹i–‹37µZƒè译]ˆÿýïmΣ@FËÌT`ݺHL<†Ë—³àïïØØŒw÷†9$ÈœæÌÙŒ]».ààÁ™F—‘”tÿüçOHKûŒÙj"""" —WlHè{\º”‰ÌLݼŽŽ2´k§K´k牎½áçç…–-]˜<€Å%`ÇŽsxþùUغõ ôèa|·æúòñÇ[±jÕAlÝú:uj.t8ÔH¤¤¤#1ñ¶l9…ÒR ðǸq!0ÀŸßJG^Á¨Q_bß¾hß¾™Qe¼ÿþF¤¤¤ãÿ{ËÄÑÑýäç—àêÕ\½š+W²qõj6ÒÓspõjòóKNNv†ú^~~^hÞÜYàè©*‹L*º‰Ó**4Ø´é5‹Î6íÚuS¦|%KÆ!66Xèp¨R*UøßÿÎ"1ñJƒ««=FBllüý½…OPݺ}€©Sûâõ×#Œ*cøð/ØŸ~mâ興ˆˆš6}â ==W®dáÊ•š‰kk Z·vC›6hÛÖmÚx M´oß žžrÿª ‹M*œ9sQQŸãÛo'áoëZm_qq$+Áד¿v-ƒ-FTT,Y2NÐX¨iÈÈÈÃO?GRÒq¤§ç K—Vˆí…Q£‚šìZ¹ÿøG"~ÿýfµžZ­çÏg sç–†m%%åpp°1l«¨Ð C‡÷0oÞhŒR¯q5yyÅHOÏ­LdãÊ•¬&Ú´qGÛ¶ºï¾¾hÞÜù±Wò"aYlR^{-))éøí·w!•Z¡¢Bƒÿþ÷0fÎ\‡M›^CppÛz‰ã½÷Öáw†ÂÅÅÞ°­¼¼ÇF‹-[^‡­­u½ÄBèÍG^Abâ1lÛv*•ø#66¸É ؽûwLš´‡ÍDZZ&vïþkÖ$nÞüÜpœZ­A«VÓ£Fõ@×®>pr’á­·~Äž=ÿ„¿?‡.Ý« @‰7îàúuÝ×µk¹†Ÿoܸƒ‚%€š‰}Ï&?‹N*ddä¡OŸOðÞ{Ãàçç…÷ß߀«Ws Õjñé§Ñ˜4©·Ùc8wî^ ‰DŒ_CP/`ÆŒ$lÞ|Û·¿6m<ÌÑý—aÛ¶3X¿>ÉÉU‡G7ú†rf¦;vœÇêÕ‡påJ6ÊËÕJÅP©Ôª' E‹·¡Õjae%†X,‚J¥†H´j加 _tíêƒ.]Z"0°eµ DDDDUII¹!YP5a ûʃB¡ëm ‰àééW´ju÷ËÇÇ•‰ƒ&΢“ ðÎ;Iøõ×TddäA,A£ÑB*µÂ„ ¡øäó^¸p;¾øâè§ux÷Ý¿ÁËËo¼±¶Ö¡DBºwxDc\=âÒ¥ÛØ¸ñ$~ùåRSoA,A«ÕB£©~)óðãÌ™9Õ¶ÅÅ-Ǿ}ÔZ®••€®GÃèÑAøê«gÌóÕ£‚‚Rܼ™7ò*¿îTKäæŽõð£U+W´lY=iàã㆖-]`m-ìðs²L›T¸y3 lGRÒqXY‰PQ¡©¶¿gO_lÙò†ÙãèÓç\¹’mx,‹ ‘ˆ1~|>ýt¬Ùë'2†V«Å±cW±~ý‰j«GŒÛ ôÂþý`ܸå=Î××Éɳªm›={Ö¬I6ôd¸ŸS§>‚——ãcÅIDDDdnÅÅeÈÈÈÃÍ›ù¸u+ß<¸}[[·ÈÈÈCqq™áx77‡j½ î&\àãã™L*à_C •ŵ,Š‹Ë°`Áv¬Zu"‘®qTQQ3ïqñâm³Ç¢_Þ¤*F ؾý<¢£ƒdùK^RÓ#‰Ò!!m1gÎ(ÃêÓ¦ým1jTbc{¡K—VB‡úÈžzª^~yV¬ØµZsßãììjÎsҶ탇*‰Å"Ìžý4 DDD$¸ÒÒrddäãöí|ܼ©Àwpë–·nå###·nåæ3{{´há‚æÍѼ¹ zölƒ–-]àíí„f͜Т… ìí9¼“LÏâ’ ÉÉ—ñŸÿüöÐ㊊”ÈÌ,0ë‡ÿíÛÏA"±BEEõ»šjäæaäÈãÝw£ðòË,zÙKjÚd2)FÂèÑA¸}[õëO 1ñV­:oŒÓcÆÁËËé‘ʽu+îîrA&…œ1# û÷_ÂÅ‹7kôbÒ«íM³uk÷ûöR‹EhÕÊÏ?nÒX‰ˆˆˆªÒh´ÈÎ.Df¦™™•_w¾qC—0Яœ¶¶ÖhÙÒ^^NhÞÜ ÝºùÀÛÛ ÞÞΆD‚\.慈Ì"‡?>ü'&N\‰²2U}U?þøžzªƒÙâ:t1ΞÍÀÞ¢ü±råv¢%%%‰‰Ç°uë)ѯ_ÄÄcðàÀ: xíµxœ>} ?ÿüëÿM,==.€R©Bm/Ñþý;">þÅjÛþü3 ááŸÞ·Ìµk_B߾滦Qã¥Õj‘]„ììܺ¥@VVnßÖ}¿uKììBܺ¥@NNaµÞ–ŽŽ¶hÖÌ ^^ŽhÖÌÉ,hÞܹ²§s“]:œ‹L*ÀÅ‹·» ùù%µÞY”J­0sæ0¼øb?³ÔŸ™©@=0¡ ïÅðý÷ÏaÈÎf‰ƒÈÜÊË+°sçyüôÓ1ìÛ÷är† ëŠØØ`Ãj'÷*,T¢C‡÷~~žX»öïhÞܹ£ÖÙ°!¯½_ËëT„‘#»ã›ož­¶U¥R£M›Ö˜ÔQ*µBÿþþø¿ÿ{ÞÌQCSQ¡Ann!rrŠpûvrr qóf¾!y­{œ›[T­Ýâà`oogxzÊѬ™3¼¼ _Íš9ÁÓS÷7&©¡³¸áz;zcÇŽ·» éé¹5z,h4À¥K™f«ûöó‹EP«k&ôC†íŒÏ>‹†‹‹½Ùâ 27kk †ï†áû!3SõëS°~ý ü÷¿‡Ñ®'bcƒ1fLO4kvwxĆ )°²C­ÖàêÕ\ ²?þøwtêT¿KXŽ„½{S±eË©jà $lmkΩ •ZÁÓÓ ·oçר7gÎH³ÆJDDD–C¥Ò gÎÊ*@vvrr ‘­ûÊÉ)DVVrrŠ“STmu@7oSóæÎpw—£ysgøúºWIè’ÞÞNµ~!jŒ,¶§‚^AA)&N\‰””ô“²¶À®]ÿ0K½cÆ|£Gÿ¬qGS"ÃÁÁ Ær9IjÔΞ½ŽÄÄãØ¸1¥èÝÛ±±ÁˆŠê‚¡C—àÒ¥Û†a‰R©¾ûî9ôë×±^ã,**À pëV¾á!•J0qbæÎUãøèèoœœfxle%Æ›oÂôéƒë-f"""2½òò äæ!3³ÙÙ…¸s§·o+›«Kdf*›[ŒììBäåWû][[kxzÊááá77{xy9ÂÝ]77‡ÊŸàî.‡——#';$º‡Å'ÝâÕWÿ‹Ÿ>[­›³L&ÅŸÎ7ù$‰ E ߯–Ä‹EÐj¨¨.øì³h¸¹9˜´N"KU^^Ý»GRÒqìÝ›Š—_€/¾ø¥Æqb±"°`A Æ­×Ïœ¹ŽaÖ^³ÖÖV˜6­fÎVãØ÷Þ[‡„„#P©Ô‹EðòrBrò,ØØXlÇ-""¢&©¤¤wîwîáÎâÊúmÅ•Û QX¨¬öûvvÖðôt„‡‡.9Ь™#ÜÜäpw×% ÜÜàá!‡§§c­«FQÝ4ˆOÑÖÖ,_> sælÆ·ßî K,(•*\¿~>>n&­ï—_~¯ÖCA"ÃÎÎ Æ`øðn&­‹ÈÒY[KÕQQ]“S„9s¶@*µª1׉þ53}z"®]»ƒwÞZo«¢tíÚ ï½÷7|òɶÊ8Dpt´­õØÖ­Ý ?kµÀ¼y£™P ""ª¥†áú$Avv‘!YpçN1rs‹ I¥RUí÷e2)\]íáææww¸º:À××®®ö†Ä»».Qàá!çð¢zÒ`>I‹Å"üë_#Ѽ¹ >úhse·k-.^¼eò¤ÂÏ?ŸH¤»ëªÕX° îîì@M›Û¶¾ï²Œz_~¹ý•‹/¾ˆ«·%'ÿþ÷þØ·ï"޽µZ}ß;mÛê–•´²ãÉ'Ÿà$«DDDH¥R#/¯ùùÅÈË+A^^1òóKpçŽîñ;ŵî»÷󃃃Må{¸ºê’;zÃÝ]WW{×»»ÜÜ8ì€ÈB5˜¤‚Þ´i}Ѭ™#^}5jœ;—AƒMV¾R©ÂÎçr¹-,‹#º›¬|¢†lãÆ“M(º^ Û¶ÆÍ›ùX½úy89™$‘H„¯¾zýû†¼¼ØÚÖ>“²> ©VkðÉ'Ñf‹ˆˆÈ’(‘—W\ùu7 —WŒ;wî&òóK›[„üü’à ÀÞÞ..vpqÑ%\\ìáïï {Ãvý¼údA]–°&"Ë÷Øs*$$$`„ ¦Š§Î¬­[ÁÍm **r‘½ÆdåÊdíàâ2 *U&îÜÙ ¦Äde×E\\âããëµN¢º ˜üü’.µZ•DbW92ju™£Ó±±ñ…«ëH(¿ ¤äBý"‘Íš½Š²²¿pçÎÆz‰©6ñññˆ‹‹¬~""jPÛJzR©Ueƒ_;;ëÊ^ºF½ƒƒ <=冿~Ÿƒƒá±>q`k+…ƒƒ “DD@½'._¾ŒƒbòäÉõ]µYã‹/¾ÀÌ™3……¨A3ç5bóæÍðööFppðËÈÈÀš5k0lØ0VÛÇ×:ÕEA*UŠŠÊ TªPV¦BAj*+·éVÊ©¨P£ @‰²2”JÝÝ}ýjåå•wü•¨¨Ð@¡Ðo«}bÀª$1ìíe•wø­ wÿu |)Z·v¨lðëùNNv†Æ¿¾Á¯?VŸ àŠDDt¯zO*\¼xË—/oI…©S§bÖ¬YhÓ¦M}………øàƒØÐ zLæ¼F$%%¡gÏžM*Lœ89rd}B¾Ö33 àååXïõ5ú»ù*•î¾Z­14Ö‹‹ËP^®®ï_^Ù ¤r[y嶊ʆ¾Åź;ÿååºm*•Ú0< ¼¼â¡±X[K w©Ô ŽŽ¶•Û¤°··µµZ·vƒT*5ìí­!•ZÁÉÉ®²·€.I`m­ÿ]«Êä€5lltÛD"NHDDæÇá`ÇŽxõÕW…ƒˆÌìÚµk˜7o:vì(t(¸té66m:…¥KwaøðnX±b’Ð!=¶ÂB%4 ŠŠÊ úŠ µ¡ë¾¾[¿¾q¯oЗ–êîîëïüëïö+•ÕÖßÉ×M¨‚JU’’‡ßÙ׳µµ†µµNN¶HÄppÁÖV kk m!“Iáîî™L )eH¬ —Ë*·I —ë¶9:Ê`c#…L&­L H*—ç%""jI*h4¼þúëø¿ÿû?Èd2¼õÖ[xï½÷››‹ØØXDEEaÑ¢EP©T˜?>~ÿýw¬^½‰Ÿþ9Æؽ{7Þxã ¤¥¥!00ß~û-zöì Ø·oÞxã \¼xmÚ´Áüùó1bÄCS¦LÁ|€Û·ocìØ±øî»ï`ee…Ù³gcÅŠ(((@XXÖ¬Yƒ–-["66YYYˆÅÊ•+^ëß¶råJÌ;999ˆ‰‰Áwß}±˜c‰…©®?þø#Þ}÷]dffbðàÁP«ïŽ>wî^zé%¤¤¤ÀÇÇÿú׿‡)S¦àÚµk˜8q"–.]Ѝ¨¨Zc4çk=##›7ŸBbâ1¤¥eº×¥»3ÑýèïÒ04æõwêôjµ……ºmúF½F£Eaa)öZ­ºm …î{~¾nFþ‚‚RhµúïZ( eh4Ú:ǬoÜËdRÈdCãÜÆFbønk«›´ÏËËÑpW_w×Þ‰ìím*‡Ø@"±‚ƒƒ Äb1ärXYéb±È°··1ÍNDDÔD’T8qâÂÃÃqûömœCVV-Z„÷ßãÆÃ70zôhüðÃp·€J¥»ëÅźîýÆÐ߉gg[04ìÀÉÉÖð]$¡U+×ʺî±\.ƒ••È0Ÿƒƒ®!oooc˜ðO*ÆêëúdY>AÞ±ñÙgŸA*•¢OŸ>xõÕW‘€>}ú@£Ñ`ÆŒ‰Dˆˆˆ€D"ÁôéÓ /^ HLLD¿~ý cžßyçH$”––bÓ¦MèÞ½»aLöˆ#…ÄÄDL›6 åååø×¿þkkk´iÓ]ºtB¡€TªûTVV¹\Ž„„¨T*CÌb±ÎÎΆãjóñÇÃÚÚO<ñ P(ÌøL5N¦¸F$$$`ôèÑ=z4àÍ7ßÄ÷ßضm¼½½ñÊ+¯ €É“'#)) aaa‹Åprr‚ÍýïXšâµ^TT†;Îaýú8x0  Õj¡ÕjQQQ÷»¹ UÕ»ßz …î·Þ½KÑéïœë黽ëéºÑkª[QyÜÝzÕ®ðú®÷úxôwÞ»wÛ»u}*•¦²\]ûÇ¥_ŽŽº;çúF7È庻ëRéÝ;éÞÞÎHĆɸÆÝ[YéîÈë¶éîÔ[Y‰ ‰);;Ýqº;öºmú±ø"‘.)@DDDT‚$žxâ‰j óÀÀ@ìÙ³ÇðØÞÞ ‰`cc‰Dbx¬—žžŽöíÛK¥R̘1pãÆjû C‡¸~ýºá±···ág}¹Ã† ÃÞ½{gggDFFbÖ¬Ypvv®ÓßeeeåÑ£1Å5"##ÕÊíÔ©ÝõãâÅ‹ðõõ5ì+--½ïP‡{=Îk½¼¼¶¶ñõ×1sæ,¨TˆD¨S—ðŒŒ|NNNèÑ£‡Ñõ§¥¥áêÕ«ð÷÷G«V­ªíKOOÇ¥K—àëë[cŽ…û)++ñcÇ T*ѵkWxzzöeggãÔ©SèÕ«\\\ŒŽù~&L˜ˆ7yÙDB‰DˆG\\\ÇT׈sçÎ!33ÁÁÁptt¬¶/##.\@‹-jÌ¿`N÷{>²² ±uë)¬[wgÏf@"£¢BmÁž DDDDdi[¯I&“™d©E???øùùÕºÏ××·ÚDluaccƒðððZ÷yxx`РA"ÁT׈Î;£sçεîkÑ¢Z´hñØu˜Š§§Ï?ÿžþ)\»–‹O")é8®\ÉܹS,p„DDDDDÕqh"" äãã†7ÞˆÄoD"5õ&6n䄱DDDDdy˜T "²pþþÍáïß\è0ˆˆˆˆˆjd¢F"""""""jø˜T """""""£0©@DDDDDDDFaRˆˆˆˆˆˆˆŒÂ¤…I"""""""2 “ DDDDDDDd‰© Љ‰1UQMVRRââ℃È,&L˜€M›6 ™Ðc'|||0vìXSÄÒä;!!!B‡Adr–pøã@‡yG¢{>|||„ƒˆˆˆˆè±‰´Z­Vè ˆˆÌí•WÖ¾þúY#!""""j<8§…I"""""""2 “ DDDDDDDd&ˆˆˆˆˆˆˆÈ(L*‘Q˜T """""""£0©@DDDDDDDFaRˆˆˆˆˆˆˆŒÂ¤…I"""""""2 “ DDDDDDDd&ˆˆˆˆˆˆˆÈ(L*‘Q˜T """""""£0©@DDDDDDDFaRˆˆˆˆˆˆˆŒÂ¤…I"""""""2 “ DDDDDDDd&ˆˆˆˆˆˆˆÈ(L*‘Q˜T """""""£0©@DDDDDDDFaRˆˆˆˆˆˆˆŒÂ¤…I"""""""2 “ DDDDDDDd&ˆˆˆˆˆˆˆÈ(L*‘Q˜T """""""£0©@DDDDDDDFaRˆˆˆˆˆˆˆŒ"ÒjµZ¡ƒ "2¥•+÷ãƒ6ÖéØ9sFaêÔ§ÌQãÄž DÔè<ýtw³KDDDDDÕ1©@Dާ§aa~‹E÷=F,!,ÌžžòzŒŒˆˆˆˆ¨qaRˆ¥±c{šä"""""º?&ˆ¨Q:´3Äâû_âÄb1†í\5>L*Q£äèh‹ýaeUó2ge%ÆÀþpt´ 2""""¢ÆƒI"j´ÆŒé ¦æ7cÆpèÑãbRˆ­ÈÈØÚJkl·µ•"22@€ˆˆˆˆˆˆ&ˆ¨Ñ²±‘`èÐÎH¬ Û$+ Ú66##""""j˜T ¢Fmô螨¨ÐWTh0z4‡>™“ DÔ¨…‡·‡³³ÌðØÙY†ððöFDDDDDÔx0©@DšD"ƨQ=!•ZA*µÂ¨Q=!‘ðÒGDDDDd üdMDވݠR©¡R©1bD7¡Ã!""""j48SÕ‹7n@¡PR·¶ÊÏ%¸pá‚ q899¡eË–‚ÔMDDDDdL*Q½(,,Dvv6<<<ê½n‘H„qãº~Bvv6Äbv#"""¢Æ…I"ª7^^^ð÷÷¤î^pøû{ Rjjª õ™“ DÔ$•L """"jÌØ—ˆˆˆˆˆˆˆŒÂ¤…I"""""""2 “ DDDDDDDd&ˆˆˆˆˆˆˆÈ(L*aêÔ©¸zõªÐa ŠI""#ìØ± …Bè0ˆˆˆˆˆŤY¬Ý»w# ÖÖÖèÑ£Nœ8aØ·víZ´k׉ÞÞÞX¸p¡aßìÙ³áááôïß7nܨӾsçΡwïÞÉdhß¾=YYY bm3.7.0/doc/html/a00097_source.html0000644000175000017500000010706111365042630015014 0ustar tlktlk BitMagic: bmsse2.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00213.png0000644000175000017500000000267711365042646013260 0ustar tlktlk‰PNG  IHDRh(D¿ÍbKGDÿÿÿ ½§“tIDATxœí›_HSoÇ¿›ÓicÇeYÍÀÍB‹À. ¢l# ‚„ºˆ"º º±ˆ¨‹(‚¤ƒ°›Š`1f«.ZfD’`d…‰- k:’Ô£ Ï·‹ßÏÃoêÖÌ•~ïìyž½Ïûœ÷{ÎyIB [Œ ]€ 9B #Ò9¦éŽÞÞ^´µµ-D-ÿ{*++QXXïä4¼^/ˆc¯×;]θƒþ#\¢à`0fõ‹=HçtŽHçtŽHçtμúôénݺ•†RôO ÀË—/ÿêœó( ¡¾¾>µè¿ßÖÖÖ¿:§xÄ霴¤ª*jjj I–-[†óçφ††àr¹påÊ ??7nÜÀñãÇ‘ŸŸ»ÝŸÏ§å¹xñ"8Ð~÷î6oÞŒììl”––âÎ;qóx½^Ãb±ààÁƒ˜œœEQ°cÇͶÛíÚï©Üáp¥¥¥š?33'OžôõõÅÅ`Íš5eŠ¢ ¼¼<.VVV–R-F£)Ÿ[2Ò"Ðàà`œF‘———ŽÔ’$aË–-xôè‘æSƒß¾}K8Îjµ"ÆùîÞ½ §Ó I’ÐÙÙBnn.²³³gŒ›:Ïdµ ÎéÂûiyI‡Ãxøð!àû÷ï¸~ýzÜ•*íí탳Ú.— ---xÿþ=`ll 7nDcccÒœn·÷ïß×»­­ û÷ïGFFÜn7šššÐÓÓ@CC\.œN'|>"‘ ££ÏŸ?ŸW-¿ÅôgÞïìA›6mâêÕ«ép8¸bÅ VUU1‹i{Ã?~¤ÅbÑì7oÞÄíAGŽaeeeBûòåË”$‰N§“+W®äž={8999c’ܺu+ý~¿–géÒ¥t:”$‰uuuÚÿΜ9C›ÍF·ÛÍ%K–ððáÃ$IUU¹oß>Úl6nÛ¶………¬ªª¢ÇãIZ‹,ËÌÈÈHyý¦ÀŸzI˜BQ>}ú”ííís;úúú ÙÙÙ9§qÝÝÝ ƒìííûüù3ƒÁ ?|ø0#ÖÑÑÁ¦¦&§­–Ùøã æG"D'AçtŽHçtŽHçtŽHçtŽHç$ìf§³#+ø} ÿ¶4Äç' ÇlŸŸÌH /Ĥs„@:G¤s~`1|jZÌ)3IEND®B`‚bm3.7.0/doc/html/a00171.map0000644000175000017500000000017411365042644013240 0ustar tlktlk bm3.7.0/doc/html/a00195.md50000644000175000017500000000004011365042645013147 0ustar tlktlk3742c092ae69f6c675db2b67118f6118bm3.7.0/doc/html/a00145.png0000644000175000017500000002456511365042635013262 0ustar tlktlk‰PNG  IHDR ÃÄ!ÅbKGDÿÿÿ ½§“ IDATxœíÝwXWÛð{wi" (`€Ä®±¡Q#¶XhŠQ±‹Š±Ç®1¼&š¼iob *ö–¨ †D°E‘( V0Ä‚‚ H‘P\Ør¾?ø$¢TÙݳË>¿ëòºÜÙ3ÏÎììÍÌœ=#`Œ1B!*&ä]!„íDD!„ B!\èð.€ª\ºt ©©©¼ËÐX}úôA‹-x—AH•Ô ¨+wwwó.CcaêÔ©¼Ë ¤JtDÔš££#V¯^Í» cooÏ»BjD×€!„pAD!„ B!\PBႈB@„B¸ " ÂãÇλŒjãÞ½{ÈÎήr±XŒ   VE?@¤AHMMÅ‘#Gx—Q¥Ã‡c„ ðññÁìÙ³ñõ×_C*•¾6_qq1víÚÅ¡BBTˆ%ËÍÍE`` ¾ÿþ{lß¾û÷ïÇýû÷Æ»4B¸¢‘HƒÁÆ ===L˜0îîî(((À×_¾}ûâàÁƒJ¥˜?>RRRpòäIˆD",^¼€;wâèÑ£(**B×®]ñùçŸÃ¢Æi<€¿¿?îÞ½‹æÍ›cæÌ™pttÄ;wðÖ[oá½÷ÞÁÎÎ)))U¾—ãÇcÏž=ÈÏχ½½=¼½½!”» Q1:" Æ;w ‰pèÐ!|óÍ7Ø¿?Ξ= ©TŠøøx"$$³fÍ‚LMMЉ'–Ÿöºrå Nœ87âðáÃ044ľ}ûjœ&‹áíí '''?~Ë—/‡¿¿?зo_ìÝ»·¼Î’’\½z;v¬ô}Èårܾ}AAAصk¢££qýúu%¯=BTŽ€Hƒadd„yóæAGG¶¶¶;v,"##akk ƦL™@€^½zA$aÒ¤IåýõW@ii)@"‘ÀÐÐ_|ñEùµšê¦ÅÆÆ¢iÓ¦3f  GpqqÁŸþ‰.]º”×uëÖ¡E‹>|x•ïeΜ9ÐÑѵµ5Zµj…¢¢"ů0B8£" †µµ5ttþýH·nÝqqqå ººº‰Då_èׯâââ°xñbáý÷ßÇ´iÓ`ddTí´ŒŒ ¤¦¦bòäÉåm•”” oß¾Ê:øûûãæÍ›˜;w.œ«|B¡¦¦¦åéÔi¨(€Hƒ‘ŸŸ_áq^^ŒëÔc ‹-¢E‹pïÞ=üþûïøïÿ‹mÛ¶U;ÍÐÐݺuƒOy[%%%Édðòò»ヒ={ö@___!ï—MG×€Hƒ‘‘‘ØØXeGGŽ)?©­ýû÷ÃÓÓ"‘;vİaÃðôéÓ§õêÕ 7nÜÀÇ”…Ïüùó‹/âŸþ››rss‘‘‘ŒŒ <{ö pþüy$''+j5¢1èˆ4;wƦM›pàÀ>?ýtQQ·ag×ÞÞÃÑ¿;…/‡E£"jC.g8|8kמăÙ3¦'<=‡¢]»ú_?©ŠT*‡«ë:À‘#ÐÑQNÇЀ€SX·.áá^ =uø²+W’ñÓOሎ¾‹ÚáÓO‡ÃήR–Eˆ"Pîd29ŽG@À)$'?ýÿàqFÛ¶Ê žüüNbãÆHœ<饴#, ì=޳¥¥2;æ ]]‘Ò–uñâ}øúž@lì} ô.>ýÔ½zµRÚòyS@„™Lް°8D %å)ÆŽí ÕüõW\]×áË/]1gÎ ¥//99ÎÎ?aÞ¼!ðö®ôå?¾¾'påJ2;ÁËËE¡×·©/ ¢rRé‹à9…ÔÔŒÛ ÎhÓÆBe5”–J1l˜,,ŒqðàÂ*»2+ÚîÝçñå—¡8vÌÝ»¿£’ež={¾¾'Ÿ '§ÎøôÓáèÚÕF%Ë&¤:@De¤R9BC¯aݺ¤¦æ`ܸ²àiÝZuÁóÂ?þ;Î!*ê?xûm3•-—17·ÍÈÉ)Dx¸—ROŽêôé[ðó ÇàâÒ+V G§NV*[>!¯¢"J'•ÊqèÐ5œÂ£Gÿ`üø÷áááŒV­Ì¹Ô“ð~¸_}5³f} ò姤<…““/.t€—×0•.›1†ˆˆøú†#11#Ft‡—×0¥tm'¤&@Di¤R9~ÿý*Ö­‹P‹àyQÓ‡úÃÐP¡¡KTvêíUÛ·ŸÅwßEx¸—£ÆþøãüýOâÎ ŒÝË—SÙõ7B ¢/‚' àÒÓóʃ§eËf¼KÃúõ§p ‘‘Ÿr9õ÷BY¯¸ Éä8zÔ"Ÿq_Œ2áçWÖõ}ܸ^øä“¡\ÿH Úƒˆ(ŒD"ûÿà‰À“'y˜0¡7<<œÐ¢ÿà€¤¤,89ùÂÛ{8-rà]ŽZÕ#—3„…ÅÁßÿ$RSs0aBoxz:«Í¶# ©7‰D†ß~»‚uëNãÉ“X²ÄI¥¿£©+ž¿»© ^¿Kª-‰D†}ûb°aC$òòŠ1cÆ,^ìss#Þ¥ FDj$‘ȰYðde`êÔ¾XºÔ ÖÖ¦¼K«ÑÁƒ—±bÅA9â=ÔwšÒR)}Ѻµ9öìù˜w9U‹%Ø·/§QXX‚Y³báB{4mÚ˜wiDQ‘*I$2]D`ài<}Zˆ©SËŽx4!x '§ƒ­Áر=ñÝwãx—S£ØØû˜0a#6ožW×÷x—S­çÏKñË/1ظ1b±sçÂüùC`jjÈ»4¢A(€ÈkJK¥.;âÉÉ)„»{_,Yâ++Íž–. BLLΞ] ##}ÞåÔŠ—×Aœ9s gÏ®„‰I#ÞåÔ¨¨¨?ÿ|›6EA&“áãããkDí„? RN,– 8ø"#‘›[„©SûaéRGìùtîÜLž¼?ÿ<C‡vå]N­ååcР0|x7üøãDÞåÔZaa vì8‹­[ÏæÍŒ¹sÁØØ€seDQ—bïÞlÞ|bL›Ö‹9hdðeAêààƒ®]m°mÛLÞåÔYhh–,Ù‡°°¥èÝ»5ïrꤠ@ŒíÛÿÄöíg!‰°`ÁÌž=kÆ(Q- -öâôÉÖ­¢¸¸Ó§÷ÇÂ…°°Ðì.¶ß {ö\ÀÙ³+Ѽ¹f†èÔ©[‘žž‡ˆˆjÛs¯:ùùÅØºõ,vì8 }}],\hY³>@£Fz¼K#j„H ={&ÆÎç°}û9H$RÌœùæÏ‚fÍ4¿Kmbb:\\üñÍ7c1cÆÞå¼±‡sàààƒ¥Káé9”w9o,7·›6EáçŸÏÃÐPK–8â£úÃÀ@—wiD Pi‘üübìØq;vDƒ19fÏ„yó7˜žKr9ÃèÑë ¶B¡zŒ*ð¦6m:_߈ŒôVéÍú”!'§7Fâ—_b`bÒK–8à£úCOO‡wi„# -›[„mÛÎb×®hˆDBÌ;sçjp=•vï>¯¾ ÃÉ“^èØQ}†ÛySR©..~033į¿.R›azê#+ëOcß¾X˜™5ƲeN˜:µ¯Fžf$õGÔ€=}Zˆ-[¢ðË/ §§ƒùó‡`Ö¬dϤŒŒ| ¼³f}€•+Gð.GaâãSáêº~~“1iRoÞå(LFF>6lˆDPP,,-áááŒI“ì(ˆ´ P”•õ ›7ŸÁÞ½104ÔÂö˜1c@ƒî‰´`ÁüõW*þüs%ôõÖiU«áÈ‘xœ?ÿš4i§K_HOÏÃúõØ¿ÿ¬¬LñÉ'C1~üûÐÑQÑʉrQ5 ù ŒDpðE4iÒ :à£ú5øžGÑÑwáæ¶{÷΃£c'Þå(\Aƒ}[¬Y£9¿ ª‹´´°n]~ýõ2Þy§>ùd(ÆŽí©6·Í ÊAÔ<~œ‹ÀÀHìß Íšañb¸»÷kpG•)-•ÂÁÁï¾ûvîœÍ»¥9tè–- ÂÑ£žj=¦]}=|˜ƒµkOâСkhÙÒ^^ÃàêÚCã;”ÊQi°ÔÔ¬_!!WðÖ[M°h‘ƒÖ]Ð 8…ÏàÏ?ÿÓ ošÆäI›PP Æ|Òà <ÈF@À):t íÛ7ÇòåÃ0bDw ¢†HÝ¿Ÿ… NãСk°±1òeN˜0¡·VPÀC†üˆ+\¸ßÒZ’’²àè胯¾Y³ò.G%’’²à玣G¯ãÝw­°b… \\º6ˆ„H£Üº•Žõë#pìØ_hÝÚK—:aܸ^Z{ÁvúôíHMýGcG x?üp¿ürçÎ}®U7…»}û üýOâøñèÚÕ+V¸ÀÉ©3‘†ÓÎo. ÷3góOHJÊÂæÍÓqöìJLšÔ[+Âç³Ï~CnnQ…çNœ¸‰ÈÈDüðí ðôtF“&†øúë° Ï3ưqc$þú+SeÊÕ±£¶m›‰Ó§WÀÚÚ3gîĈˆŒLä]©‡†ÿí¥ÁbcïÃÍm3FŽ @NÎ3ìÞ=+0jÔ{Zs.üæÍGøå— èÞýK\»– lðÔ/¿ Åøñ½Ð¯_[¾ªX£Fzøî»q ‹Ç… IÊ~hýt8 hÇ»,RK@J$•Êk}ŠL.g8uêoDàÆ488t‚‡‡³Æ ǯh|ð=<È.,  °rå­èxP•ÔÔ ød29d2yù´?ÿü:tx‹cuªwõj2|}Ã}ýû·ƒ·÷pØÙµ©Õk벟Å¢µ®$Ï1aÂF¤¤<­v>™LŽÐÐ88:ú`îÜݰ¶6ExørìÛ7OëÃ'99»BøeA °mÛY\»öOaœåæá³Ï~ƒL&ƒ\Î*„®®'NÜäXï¿ß.DhèRÀ˜1àæ¶W¯&×øÚ)Sj7Q< %xú´cƬÇå˰}ûÙJç‘HdØ¿ÿ" Zƒe˂й³5"#½±k×ltëöŽŠ+VO'NÜ„ŽÎë ¤RrrÊÖñƑЦƒøk×ÂÞÞçÏ߃\þút©”áèÑëª/LMôéÓ¿ý¶¿þº%%R¸º®‡»ûV\¿žZéü11I¸p! ®®ë}WÅÕ:§`ééy?>ééyHd00ÐÅõë_—<]R"EpðElÚtYY˜0¡7–,q@ëÖš=ܾ2 î‡7×0°cǬ™;Ïá‹/BT½N._þ¢Aÿ0·¶Î»_ßp\»–gç.X±Â¶¶o—OŸ1c;¢¢nC.g …غu†·åX±v¡# JNÎÆÈ‘kËÃ(;Ò ºˆ¢¢lÞ;»oðÍ7‡1thÄĬ‚ŸŸ…O%23ók ŸGGÓ¦õkðᎎñöÛM!¬a¯‰×¾Óp•4è]=ê½{ç!;û\\ü1{ö.$&¦#%å)NŸN„T*‡\Î —ËðñÇ»ñÛoWy—­5èHAŸ`âÄ@<{&†DRñ܈¡¡>ôõuPZ*Åôéý±`½ÖöÞª­Ÿ¾€/¾8TáúÆ /~|8rdw¬Y3ffU]7r9ÃîÝÑøöÛ£ËåJ+_?½{·BXØ2ª/ÆNŸ¾_ßHHHGË–ÍðèQ.¤RY…ùþ÷¿ñ˜9Ss飼)(€ .î!&OÞ±¸´Š/`èЮð÷Ÿ¬U_–õ1~üF\ºtÿÿ;üKGG##}øúºaĈã/%å)–, Âõë_[G@YoÁ7¾EÓ¦ôy{c ¡¡qX¶,òÊ.¤¡,„¼½‡ÃÃÃYÅÕi:WOçÏßÄ Q\\yøe懟RøÔR~~1._~Pá‹U(@ `Ø0[DG®Õá­Z™ãÈ‘eøòËÑÐÕUÚ8""CeêO  3³ÕâÃƒÏøî»£ZÕÉEÕ(€ê!""îî[QR"­ò/) ì´ÉíÛˆ‰IRauš+"âV…ð);ê1À–-Ó±}ûL4kfı:õ! 0oÞ`DEý]º¼]a\4@€cÇ´·7\u$¶l‰ªôôî˶l‰ÂÊ•!5ÎKÞ Ð ÃìÙ» •Êkõ’H$„¿ÿ)T¦ùŽÿ  ü¨ÇÉ© Οÿ£F½Ç»4µÔ¦Ž÷Äêգʆd29λ‹¢¢Þå©ÐÐ8dg?«Õ¼r9CPÐE,^¼¯¼cQ  7°kW4/Þ ™¬òð]]ôõu «+‚@PöƒÓ˜˜{5þ0UۉŜ<ù7är976À¦Ma×®Ù07§£žê…,\hÈHotîl ì/ýÓ§oq®LýlÜYþ!ôô^ì§•Ÿ““ËŽ‰Ç”)[PR"UU™ZáµN™™™HL¤f«rìX‚ƒ+ž[ 04Ô…‘‘.LLôaff=˜˜èÃÚº:wnssc4mÚï¼ÓFFú ©%11™™™ iK]\¹òk×^FÛ¶fX±¢š4Q̺ª¯!C†(¼Mwww+¼]@#£^06þIž>= „e(ÇÔ©S¤ðvÿ ttL!6zéŸa…ÿ‹D!B Ѓ@Pñ‡Ð¥¥ñÏ?‡ÁX©Âklè‚‚‚0uêÔ ÏUyÏæ.]º(½ M“‘Q€6mJáãÓF05m33C˜š6ªô¯§[·nÁÒÒ:uRZM;wVZûªöÇOðý÷®1¢+ïR”ýAöô©òŽZuuu•ò… Åøý÷d,Xp"‘úžîîî®ÔöÇŒóÚ`MJJd(,”àÙ3 òóK!·CÓ¦Ãо½‰’ªl˜&MšTéóU…ý8òU°µ­ýðÿ–––J¬æße4¤mõßÿŽCãÆêqÔr¹\©4qâDLœ8Qií/\(‡L&‡¾~•»ºÚ «y¦zPöº&u§þŸJ¢UÔ)|!ôLÔ}2 !„pAD!„ B!\PBáBm(77>>>ÜÚ)**Â÷ß_ïåk3Ú†Š“””„ŸþY)m>|—/_®q¾ÇcÍš5øûï¿_›FëZ³¼¼O={ö kÖ¬©t>eoWµ  üü|ìܹ³VóÎ;ÉÉ•ßR·.í¼ìÙ³gøòË/ëü:ò/Ú†ŠsûömlÙ²E)m‡„„ &&¦Æù¦OŸŽëׯCGçõγ´®ÕßËûØËûT~~>¾úê«J_£ìíª¶ÔªU+ܹs§V󆇇#??¿ÞíÅ¢mذ¤¦¦ÂÓÓ;vä] y/ïcê²OÕ;€rrràääX[[ûvíŠ+`aa+++8p ÎófffbÔ¨Q^„¶mÛ¢qãÆ˜9s&d2ÜÜÜ••777DGG#++ Æ Þ={`jjЍ¨¨ZµS•;v eË–hܸ1fÍšUí¨×êîæÍ›0` СC‡òa`hj¹\ŽeË–ÁÄÄ–––øá‡Ôm›ÀЪU+4jÔcÆŒ©üU}FfÍš…ÔÔTLŸ>üñG•5Òº®¸®W¯^ èëëÃÞÞ=ªÕ´ª¶CuRRR`oo_á9777\ºtéµ}ìå}³6”¶]Ù+222XTTÔ«OWéÉ“'L(²/¾ø‚Éår¶iÓ&€­Y³†ÉåræããÃÚµkWçy“““YãÆË_§§§ÇæÍ›ÇJJJ؃˜©©);uêËÍÍeVVV,**Š•––²´´4Ö¨Q#6vìXÃîܹS«v*{_ÊçMJJbMš4agΜ©õº¹uë»uëV­ç¯«º´_XXȬ¬¬X`` ‹Å,22’™˜˜° .Ð6¬F]÷‡º˜:u*›:uj­æ=zô(lùò嬨¨ˆEGG³&Mš°:m“ëׯ3}}}öû￳çÏŸ³µk×2líÚµÕ~FòòòXëÖ­Yxx8‹Å¯Õ§ˆu]—õQWXPPP­æUÔºgÖÖÖìÞ½{¬  €¹ºº² Ô8­ºíPÄÄDÖ¬Y³ ÏuïÞEDD¼¶½¼o¦¥¥1}}ýJÛTÄve¬êõ¯À cŒÝ½{—éèè0‰DÂc,..Ž5oÞ¼Îó¾ú倥§§—/wРA,$$„1Ƙ ‹gŒ•­LìñãÇun§²÷•••Uþ\ÿþýYhhh­×:ÐXÏž=+<·lÙ2æééIÛ°ê@fff¬´´´ü¹U«V±±cÇÖi›x{{³)S¦ThÛÖÖ–­]»¶ÚÏcŒµmÛ–ÅÆÆVZŸ"Öµ:"ÖuXX³¶¶fÿý7c¬,XrsskœVÓv¨JuÄXÅ}¬®TŸíÊXÕë_aCñ4n\v·O@}}ýò •• ÒY—y_feeUþÿêæ …°¶¶®w;"‘¨Â8k5Õ§ÎRRRpûöm´jÕªü¹çÏŸãÃ?,LÛP½µmÛºººå»víŠÈÈo-P›mòøñã×~1˜mm>#Õ¡u]ñ=9gΜAÿþýajj ggg¬Zµ ¦¦¦ÕN«ïvP4en×9œ&ð•ÅÄÄDxxxùsÏŸ?‡@ @^^ÇÊ*GÛðu¯Šš••…¦M›Ö© 333deeUÚnuŸm£ˆu̓ŸŸüüü‡õë×cüøñˆ‹‹«vš"·CQQQ_£JjÛ Ž‡°°°JãÐ899!::ºü^OÅÅÅèÕ«BCC9W¦X y¦¤¤àرcʺÇnݺµÎ;::âÀxòä àÆ8wFh]WïÇÄ!C ££;;;LŸ>ééé5N{Ó}UWWùùùøçŸ—.]BRRRjT»]DYZZbÉ’%¸víZ½ÚñôôTúð¼´oßß~û-úöí '''tèÐ]»v…››ïÒÐ6¬¾}ûbùòåèÙ³'F /// 0 |zm÷1Un×*Œ;@Ö…\.Gnn.š5kVã¼ÙÙÙˆGïÞ½afföÆí(Ú‹¿`”uCº7iÿñãÇHHH€Òo:ض¡2÷‡7`«Ë éÄb1bccѤIôìÙó—}óæMdffÂÎÎ&&o®¦ÊÏÈËÞd}Ô–@ ¨ôŽœÕQĺ.))ÁåË—!‹Ñ½{÷ ÷«nðfÛA*•ââÅ‹ÊBôå ¿¼5iÒD¥ûTUë_m¯ …ÂZ¯ :´ÞíhØØØ¨dY´ ÏÀÀàµßz¼ [[[ØÚÚV:M•Ÿu¦ˆu­¯¯ÖyðúvxòäI…ޝ²µµE÷îÝñÁT:ýÕ}Lö)µ B!ÿÒÕÕ…¹¹y•Ó UXbPBˆ077‡‹‹ ï2ªAtB „¢y(€!„pAD!„ B!\PBႈB@„B¸¨òw@ ª¬£AÊÎÎFóæÍ•ºŒÌÌL½ë¤&ÈÎÎVjûÁÁÁH$J]†¦ ©ÓP9uåîîÞ`Ç®ÓT¯A…{?7gaaccc¥µollLá£dÊÜúôéÃ=|²³ qçŽ>øà1×:`âĉèÓ§ÒÚ&üLœ8-Z´xíù×#%„hÐÐ8,^¼ééky—B´]"„Â!„.(€!„pAD!„ B!\PBႈB@„B¸ "„Â!„.(€!„pAD!„ B!\PBႈB@„B¸ "„Â!„.(€!„pAD!„ B!\PBႈB@„B¸ "„Â!„.(€!„pAD!„ B!\PBႈB@„B¸0Æï"!Ê—™™=¾ªÕ¼vvm¶T¹­GG@„h‰æÍ› E‹fµšwìØžJ®† B´Ê’%މªßíE"FzOEmFDˆ9²{µÓ…B! h¦M«¨"¢Í(€Ñ"¦¦†2¤c•GAŒ1L˜Ð[ÅUmEDˆ–?¾ªê{¤«+‚‹‹­Š+"ÚŠˆ-3thWèêŠ^{^GG„¡C»ÀÈHŸCUDQ¢e õàâb Š!$“É0vl/NUmDDˆ?þ}H¥ò Ï5j¤GÇNœ*"Úˆˆ-4xð»NµéêŠàêÚzz:«"Ú†ˆ-¤«+ÂèÑ=ʯI$2ŒG?>%ªEDˆ–7®$ÀÌÌýúµå\Ñ6@„h©>}ÚÀÂÂ@Ù5¡šFH DÑè„/!åççãÑ£GÜ–ß¶­²³Ÿ¡{w3$$$p«£K—.Ü–Mø¡?yáH,#;;›Ûò§Oï kktìhÁeùÙÙÙ\ß?ዎ€Q¼Žºtd²ÆÜ–Ÿ™™‰ÄÄD.Ë&üÑ!Znüø÷y—@´!„.(€!„pAD!„ B!\PBႈ¢0sçÎErr2ï2ˆ† "„(Lxx8òóóy—A4!æôéÓèÒ¥ ôôôгgO\½zµ|ÚþýûÑ®];èèèÀÊÊ ¾¾¾åÓV¯^ èëëÃÞÞ¾Â@ÕM»yó& tèÐÁÁÁ€¬¬, 6 {öì©©)lmm‘••777DGG«`MÇ!Üddd°¨¨¨ZÏŸ––ÆŒYhh(+..fß}÷kÙ²%“Ë嬠 €éëë³ÐÐP&‹ÙÙ³g™P(dYYY,<<œY[[³{÷‚æêêÊ,XÀcÕN+,,dVVV,00‰ÅbÉLLLØ… XZZkÔ¨;v,‹‰‰a™™™ÌÊÊŠEEE±ÒÒR¥¼Ò°ÐP<„hƒbÈ!3f ÀÛÛ:::xþü9ôôôƒž=ËîëÓ¦Mèêê"??b±PRRcccC"‘@µÓŽ;+++,^¼ààà€™3g"$$^^^xþü9amm  …055…®®®êV ÑX@„h””tèСü±®®.þóŸÿ”?¾ví>ûì3$%%¡iÓ¦ËËn»=räHœ9sýû÷‡©©)œ±jÕ*˜ššV;-%%·oßF«V­Ê—ñüùs|øá‡ÊçEøRWt ˆ bllŒ¼¼¼ Ï:tùùù êU«°zõjܽ{W®\¡¡!€1???äää $$b±ãǯqš‰‰ ˆ””” ÿ6oÞ *|÷¤¡¡"Dƒ8;;ãÈ‘#ÈÊÊ\ºt Ó¦MƒH$£Gйsg 8"‘±±±(((üøã2dttt`gg‡éÓ§#==½ÆiNNNˆŽŽ.±º¸¸½zõBhh(‡wOÞ¡ÑforÞÃÙ››3GGGfbbÂcŒ¥¦¦2KKK6hÐ æääĆÎÚ¶mË\]]YZZkÑ¢³µµeŽŽŽ¬I“&lÛ¶mŒ1Ví4Æóóóc&&&ÌÑÑ‘ÙØØ°‰'2™LÆÒÒÒ˜H$ªP[=Ø€ØÕ«W•öþIÃ!`Œ1Þ!Hˆ¶zq?œ!C†Ôéu÷îÝCrr2:uê„wÞy§üù‚‚\¾|–––èÖ­ÒÒÒðàÁ <%%%¸|ù2Äb1ºwïKKËò×U7 ?~Œ„„ØØØT{ï ììlÄÇÇ£wïÞ033SÚû' !iû°¶¿mG×€!„pAD!„ B!\PBႈB@„B¸ "„Â!„.(€!„pA·c D dggó. m}ߤ !j !!w „¨G!„ ºD!„ B!\PBáBÀ_¼‹ „¢}þ%ñqY?RšIEND®B`‚bm3.7.0/doc/html/a00036.html0000644000175000017500000001174711365042651013435 0ustar tlktlk BitMagic: bm::bitblock_store_adapter Class Reference

bm::bitblock_store_adapter Class Reference

Bit-block store adapter, takes bitblock and saves results into it /internal. More...

#include <bmfunc.h>

Public Member Functions

 bitblock_store_adapter (bm::word_t *bit_block)
BMFORCEINLINE void push_back (bm::word_t w)

Detailed Description

Bit-block store adapter, takes bitblock and saves results into it /internal.

Definition at line 4989 of file bmfunc.h.


Constructor & Destructor Documentation

bm::bitblock_store_adapter::bitblock_store_adapter ( bm::word_t bit_block  )  [inline]

Definition at line 4992 of file bmfunc.h.


Member Function Documentation

BMFORCEINLINE void bm::bitblock_store_adapter::push_back ( bm::word_t  w  )  [inline]

Definition at line 4994 of file bmfunc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00003.html0000644000175000017500000002327311365042627013427 0ustar tlktlk BitMagic: sample3.cpp

sample3.cpp

Exmaple demonstrates using bitvectors with different initial block allocation strategy. Bitvector 1 (bv1) by default working without RLE compression option (best performance, maximum memory consumption). Bitvector 2 (bv2) will be working in compression mode and use less memory.

See also:
bm::bvector<>::set_new_blocks_strat()

For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample3.cpp
 Exmaple demonstrates using bitvectors with different initial
 block allocation strategy. 
 Bitvector 1 (bv1) by default working without RLE compression option
 (best performance, maximum memory consumption). 
 Bitvector 2 (bv2) will be working in compression mode and use less memory.
 
  \sa bm::bvector<>::set_new_blocks_strat() 

  For more information please visit: http://bmagic.sourceforge.net

*/

#include <stdlib.h>
#include <iostream>
#include "bm.h"

using namespace std;

const unsigned MAX_VALUE = 1000000;

// This procedure creates very dense bitvectors.
// The resulting set will consists mostly from ON (1) bits
// interrupted with small gaps of 0 bits.

void fill_bvector(bm::bvector<>* bv1, bm::bvector<>* bv2)
{
    for (unsigned i = 0; i < MAX_VALUE; ++i)
    {
        if (rand() % 2500)
        {
            bv1->set_bit(i);
            bv2->set_bit(i);
        }
    }
}


void print_statistics(const bm::bvector<>& bv)
{
    bm::bvector<>::statistics st;
    bv.calc_stat(&st);

    cout << "Bits count:" << bv.count() << endl;
    cout << "Bit blocks:" << st.bit_blocks << endl;
    cout << "GAP blocks:" << st.gap_blocks << endl;
    cout << "Memory used:"<< st.memory_used << endl;
    cout << "Max.serialize mem.:" << st.max_serialize_mem << endl << endl;;
}


int main(void)
{
    bm::bvector<>   bv1;    
    bm::bvector<>   bv2;

    bv2.set_new_blocks_strat(bm::BM_GAP);  //  set DGAP compression mode ON

    fill_bvector(&bv1, &bv2);  // Fill both bvectors with the same values

    // For a given distrubution statistics should demonstrate
    // lower memory consumption for the vector with compression

    print_statistics(bv1);    
    print_statistics(bv2);

    // Now run optimization procedure for bv1 and see statistics.

    bv1.optimize();

    print_statistics(bv1);    

    return 0;
}


Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/examples.html0000644000175000017500000000345211365042652014435 0ustar tlktlk BitMagic: Examples
Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/globals_vars.html0000644000175000017500000000400211365042652015265 0ustar tlktlk BitMagic: Data Fields
 

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00222.png0000644000175000017500000000625711365042647013257 0ustar tlktlk‰PNG  IHDR((Mpg­bKGDÿÿÿ ½§“ dIDATxœíÜLÕÕÿð'pé*$\,À! R†­k dd±5JWs„kS*g3T,0QC6W e¦ÙŠn\¢MˆD¤lü´„0I¢¸Üçççx_¹|/xýv¼Ï}¿_ï×yqî‹Ë¹\,H‚ fÈòn' ‚ E4(AÌ–hP‚ ˜-™Ôyyy³™‡ ÿqJ¥îîîzcR›ä³’” dgg#&&FoLò”Ô‚ ¦&õ‚HìA ‚`¶DƒÁl‰%‚Ù J³%” fK4(AÌ–IÔ¥K—pôèQS„2¨··{÷îñûÌ–‚‚üüóϳr¯©ÖþBjjªQ×Ì´ÔÔT¤¤¤ %%»ví§Ÿ~Š––@YY>ÿüó ×Djj*ššš¦|Ÿ¢¢"lÚ´ o¼ñ’““ÑÖÖ6­|§SkøòË/qúôéiÝóÿ+“4¨††dffš"”A}}}8|ø°îxýúõº…jJ3w¼¼¼û ›7o†³³3\\\››«‹³oß>¬]»vÒãk×®á…^DEE¡«« QQQ(//œ?˜3g/^ŒãǺºº°jÕ*;v …¿ýörrràåå™LìÛ·O2nYYüüü —Ëáíí‚‚ɸ†äææÂÃÃsçÎÅ‹/¾¨·H¤r€mÛ¶ÁÙÙr¹+W®D{{û¯ŸÛ©S§tµ 9ÿ±ÆÖû‡~À£>ª÷õú믇T††† Ön<'''ÈårXZZ"::999z«T*DGGO)ÖÈȆ‡‡'¼ Û²e âââtÇ3Yëñî…õmì÷lZ(³³³¥ÖSXXH ¾óÎ;üûï¿Y^^N{{{æåå±³³“–––ܾ};µZ-322€©©©ÔjµÜ»w/½¼¼t± xàÀI[ZZhkkK’ìíí¥‹‹ O:Åááa ÐÅÅ…Ÿ|ò 5 Ož>ž$šscc£®výýý’óokk£\.ŸPï655±©©‰õõõ|衇¸{÷n£ó_£?þøƒï¾û.—,Y"Y;¹\Î÷Þ{YYYðÀSºÏØ' Iº¹¹±¶¶–$™››ËÇ\ïü72!!mmmÀŽŽ’¤F£auuµî¼Û åö‚733“AAAzq_zé%~ðÁâ²eËFGGëùúú2==Ý`îjµš®®®¼páÉ[O”ÞÞ^£ç<¶v†æ/Õ ÆŠŠŠÒ›‹1y¤V«å‰'¸zõjz{{3--===’µ“Ëå fdd$###ùÌ3ÏÐÍÍß~û­^-322tµ~å•W$ãMF«Õ²´´”o¿ý6}}}iaaAÖ××=ÇéÔšÔoPä½±¾úé'¾öÚk\¸p!·nÝÊ+W®HžkˆT¿1øaacxzzÂÚÚZw¼lÙ2œüðC477ãÌ™3º1cò¨¨¨@\\|||€)­ääd<ýôÓºããÇcݺuèî¥%^}õUäää`Æ P©TØ¿ÿ”æÜzÇO«ÕbåÊ•X¹r% µµo½õ"""ÐÜÜ|Wj=–¹®o¥R ¥R‰îîndee!88~~~øæ›oŒžãdLÖ º»»õŽ»ººàèèhªðwdgg‡ÀÀ@éÆaaaîîn½'Z­Fbb"T*V¬X+++( ɸ.\Ðëéé½½=€©7XtuuéÝ®™¡ÜI"-- iii¨©©Á‰šš£æ<–1óë믿FVVÎ;‡9sæèÆÉÃÚÚr¹ׯ_Ç7022¢÷ƒmªžxâ ôöö¢¿¿ …111xÿý÷QXXˆžž<ûì³SŽ¥V«±mÛ6üú믺±E‹á£>‚ŸŸf½Öã™ûúIÈd2ÜÿýÆNO’É6É/_¾Œï¾ûÀ­¿ï8xð ®»£ººÅÅÅ’ÇRBCCQ^^Ž‹/þùçøûûOxw¸õSÃÇǰ²²Â?þ8aƒô¶°°0””” ¹¹À­c•J…ÐÐP£æ‚ÜÜ\tvvêëëu¯B å¾gÏC&“áÉ'ŸÄÚµkqõêU£ç<ÝùßV[[‹øøxäççOø‰jLJ¥µµµØµkT*¼¼¼””„ŽŽƒ÷ÀÍ›7qóæM´··#%%Ë–-Ó=ñ.\ˆ   ¼ù曈ŒŒÄ}÷ݧw½Z­F}}ý¤±ÑÚÚª÷·|$‘GyóæÍ›ÕZOÆ\×wYY¢¢¢ðÔSO$***pìØ1£ç'ÉØß 'SXXÈåË—óá‡fPP|ðA†‡‡sxxX·u[SS“Þ¾Fmm­ÞÔ¦M›¨T*'=¿'òØc1 €UUU$É´´4ÚÙÙ1$$„nnn|ùå—9::ʶ¶6ZYYé®»rå ,XÀ   †††2<<œžžžŒˆˆ˜4îŽ;¨P(ÆùóçsÆ $9!®!Z­–±±±T( ¦»»;ÃÃÙžž~ÇÜÝÝÝéëëËÚÛÛóСCº¸SóØÚš¿ÔT||<­¬¬hkk«ûrss3:ñ®^½Ê;vpéÒ¥’çÈårÐ}Éd2ðâÅ‹zç>|˜XRR2!Æ¢E‹˜””$yµZÍùóçÓÝÝJ¥’...ôööÖíýÍt­É‰{Pæ¾¾óòòļ¼<ÝžòtIõ“4¨ÛYZZª·AgJ£££ìîîÖwuu±¸¸˜7nÜе··³¸¸XoaM¦¯¯%%%¬««#yë›ZVV&·¥¥…ÅÅÅlllü?Í¡¾¾ž%%%ìëë›ð˜Tî†gΜá÷ßÏk×®Mùº±Æ×ÎÐü¥®¹“©Ö~2###F_cŒÖÖVîÙ³Çà9†gÏžå‰'XWWG­V;᜙ªõdÌ}}›ò{&Õo þË_ñ5§®³³SïMñ|}}áçç7‹ c%''#&&žžžw;aRýÆd›äÿuÖÖÖ?Vacc3‹Ùãmß¾ýn§ LƒhP&âäädÔ;G‚ ÜÙ=õY BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- g -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00197.md50000644000175000017500000000004011365042645013151 0ustar tlktlka9fc8317cc4f388427174bce4cf328c1bm3.7.0/doc/html/a00143.map0000644000175000017500000000214411365042634013235 0ustar tlktlk bm3.7.0/doc/html/a00128.md50000644000175000017500000000004011365042630013135 0ustar tlktlk02f6bcd3c7b7e54895389b01029abd65bm3.7.0/doc/html/a00013.html0000644000175000017500000000753111365042651013424 0ustar tlktlk BitMagic: bm::bit_AND< W > Struct Template Reference

bm::bit_AND< W > Struct Template Reference

Bit AND functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_AND< W >

Bit AND functor.

Definition at line 5068 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_AND< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5070 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00155.map0000644000175000017500000000164411365042637013247 0ustar tlktlk bm3.7.0/doc/html/a00184.md50000644000175000017500000000004011365042645013145 0ustar tlktlk9060122c7856db6ab5a9e962268971f4bm3.7.0/doc/html/a00162.map0000644000175000017500000000003511365042641013231 0ustar tlktlk bm3.7.0/doc/html/a00252.png0000644000175000017500000001043511365042651013246 0ustar tlktlk‰PNG  IHDR³u¥ÐZbKGDÿÿÿ ½§“ÒIDATxœíÝ{LSgðoik¥'¨è/CP›3^ˆ˜¸1QŒÈfX\¼ì¢‹l.NƒÛ"ê”Wçœ3™ÈĨ è«rQ¼p‘¡–"ˆð–k¹ÚßûÇ ¨ÐRZÏ'!ñ9OÏùýÎÓ¯Í9mQæÕ—if즯°03¼ÁÂÌð†ÈÐär9®_¿nè2Œ‰ 0x ƒ‡9==AAA†.ظþxŸÁàanÇÞ4˜¢££ûíÅŒ]33¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð†É…¹¨¨GŽ1Jí“'OâÆ¯l=c®)0¹0çççãÀF©‹«W¯¾²õŒ¹v¦ÀäÂÌ0º2É0«Õj¬[·R©#FŒÀ¶mÛUUUðòòÂîÝ»aoo[[[:t_ý5lmmagg‡˜˜î8;wîÄŠ+ºÇÄÄ`ܸq077‡ŸŸjjj¸¹;wî`öìÙ>žìííéîÝ»Dôo€•J%‘ÖÞz¢?ÃÜo_4ê GGGˆÅbnìââ‚äädn‚P(„··7.\¸€ââbÀÓ§Oqüøqxyyé\¯·º[;…BgggÌ;B¡×®]Cmm-`ûöí˜7oD"f̘+VàÉ“'}Þ›ÁúBF—kæ™3gÒ„ ÈÃÃFŽI .¤––݃hÈ!Ü8''GãšyýúõôÎ;ït9V«ÕD2™ŒæÍ›G´páBŠˆˆ "¢]»v‘T*%OOO5jÐóçÏ¹ãØØØ§§'I¥RÚ·oWcóæÍ$“ÉÈÛÛ›†Nk×®Õ«^II …B½×N.—Óˆ#ÈÃü¼¼háÂ…äèèH‹-¢’’rpp WWWòôô$+++:xð w\mkñ2ú°]cc#¥¤¤hÜ´Bnn.]¸pjjj:Í) JJJânŒ:*,,¤¤¤$’Ëåæ>|HIIITPPÐgõz£»µ«©©¡ .ÐíÛ·‰ˆH.—Sjj*555Ñ•+WèüùóôôéÓ>ë­?Ã, 2쯀´ÿ¦Ë eee7Â/ruuÅ´iÓú±£—ëÇç?Ó$o™®‰ÅbØØØt;oaaÑݘæWˆ |||ŒÝ†É2Éw3F,Ì o°03¼ÁÂÌð 3Ã,Ìý@¥j1v  ³µ´´aûö³Ænc@è·÷™Mñ[VýÁÜü Èd ðã j3v;¼fð0Ï™3ÇŽ3t“µgÏ×á»ï~ÅôéÃݯü»Y}}3\\6¡¥¥ ¸àðá•Æn‰ÏØÿibH‰‰wÐÚúœœ‡ºº&#wÄo,Ìô÷ß7¹{µZ³gsÜ¿±0Èÿþ×€ŒŒ"î÷ì 66SËŒ¾X˜ äÔ©[cµšðßÿ¡¢¢ÎHñ ³ÄÆÞìô…t33NÊ1RGüÇÂl …99r¨ÕšaV« ÿÍ.5 ……Ùr vþH­&äæ*ðøq•ºâ?f8vì&ž?Ww9' ŸÝÏ ,Ì}¬°°……åèÖVBlìÍþmj€`aîcññ9‹…ZA(.~†¼¼²~ëi `aîcÿùÏyîS?mââ²ú¡›…ývvzú´>>®hjj…¥å`@i©ÙÙñá‡Ó¹Ç)• hk{yà™Þa_42°¸¸l|þù_xò$ÂØ­ðû¢Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð½ **аŸ>ú4Èž¬­?0z|ü‰ŠŠêÝ›Ýþ7[¶lénŠÑÉ[Æn€WÂÂÂ:më6ÌóæÍ3d/ £—®ÂÌ®™Þ`afxƒ…™á f†7X˜ÞÐ+Ì¥¥¥HLLì«^z%##ùùù¯l=•J…èèh@]]bbbz½Ÿ)h_—Þœƒ¡èf¹\Ž„„„¾ê¥WRSSq÷îÝW¶^CCŽ9ÂýùÌ™3ÜÜÎ;QVVÖå¸ã~¦ }]^<c`—&`äÈ‘øë¯¿¸ñ7ÐÐÐÐíØ½xÆ w˜‰¿þú+>øàøûû#** P[[‹ÄÆÆbÉ’%ðóóùsçðûï¿ÃÏÏ‹/FJJ wœ˜˜lÛ¶­ÛqJJ –-[† `Ó¦MOnqq1¾øâ ¼÷Þ{øøã‘œœÌÍeee!88ÞÞÞXµj ¸¹[·naåÊ•ðööÆŠ+‘‘¡W½êêj|óÍ78þ<|}}ñøñã­¡R©Ä÷ßàߪ««†ÜÜÜNãi;wmºÛ¯ýy»xñ"–/_„‡‡C­Vk]—ŽçÉÉÉ ‚§§'/^Ì]‚¼ìøúÐ;Ì …8qâ¶nÝŠ£GâòåËhkkCNNêëë‹O>ù;vì€L&C\\pèÐ!î8˜4iR—ãþùáááøüóÏqêÔ)LŸ>×®]455aãÆðòò™3g°aÃìÞ½÷îÝógϰyóf|úé§8}ú4<<<°eË”J%BCC€³gÏbõêÕøñÇQRR¢s½ÖÖVܹséé騾};FÕ£5lnnFNN $$VVV ³³s§qGÚzÑFÛ~mmmÈÍÍÅíÛ·‰Ã‡###ÙÙÙZ×¥ã9¨T*lß¾k×®Ebb"¶lÙ‚ƒ¢ººZëñõÕíÇÙ=5tèP¬Zµ "‘®®®ð÷÷Grr2\]]AD „@ €»»;„B!–.]Ê;ÆgÖ¬YÇí8¾xñ"<<<0wî\À’%KpîÜ9Àµk×0lØ0øùùÞ|óMøøø 55¶¶¶˜>}:æÌ™X¶l„B!ZZZžž'''øøøfÏž™3gâÒ¥KhllÔ©ÞÒ¥KÑÜÜŒõë×cøðá:¯§@ ÀСC!‰:;ÒÖË”)Sº­¡m¿ÀÀ@´µµ!88"‘vvv?~<••Õíºt$‹ñÛo¿a„ ;;;ˆD"444ÀÜܼÛãëKï0ÛÛÛk,ò믿®ñ·lðàÁ@±X ¡PÈ{ª²²ãÆÓØ6vìX@yy9är9–-[ÆÍ577cæÌ™xþü9FÍm‰D <{ö cÆŒÑ8æ˜1cPQQææf굟—®Aî­—õ¢Ï~Ï¡ý¹ÒöÔ˜«­­Å!C0hÐ êÕÔÔôÙÓÚzÑu¿úúún÷Óöû “'O†\.‡‹‹ Þ}÷]xzz"88ŽŽŽÈÏÏÇš5k`nn''',]º«V­ÂäÉ“QXXˆùóçcÆŒ "êUVV껜kkkìÙ³_~ù%&Nœ¨1¶¶¶æ§­m´í÷â+oGÚž‡‰õë×C,sׯû÷ïGHHˆî ózáb&::AAA¸téRÒÒÒ‚{÷îaèСÜE¿!C©Tâ7Þ€………Æ\ee%=z›N×u …åååpppÀˆ#4æÊËË¡P(0räHëk}êõ¡®®R©À¿—jEEE˜4i,--;_¤k/ºî×Õº¼x*• yyy°¶¶ÆøñãQQQ²²2L›6­Çu´™?>¢¢¢°|ùòöM™}f¦³ªª*­o7?ŽŽŽ¼«Ý_º ³Þ—L×D"¬¬¬º—H$¼¬mL,Ìbee…3f ¸ÚÆÄ¾›Áð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì otû>sWÿüزNavpp@@@€1za˜ €ƒƒƒÆ¶NßÍ`˜WT&»ffxƒ…™á f†7þŽ+ïJüàHIEND®B`‚bm3.7.0/doc/html/a00225.md50000644000175000017500000000004011365042647013143 0ustar tlktlk301b7e0d6763e8e3c1d90b5fe766f5f4bm3.7.0/doc/html/namespacemembers_0x73.html0000644000175000017500000003166711365042652016720 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- s -

  • serialization_flags : bm
  • serialization_header_mask : bm
  • serialize() : bm
  • set_AND : bm
  • set_array0 : bm
  • set_array1 : bm
  • set_array_mask : bm
  • set_array_shift : bm
  • set_array_size : bm
  • set_ASSIGN : bm
  • set_bit() : bm
  • set_bitset : bm
  • set_blkblk_mask : bm
  • set_block_16one : bm
  • set_block_16zero : bm
  • set_block_1one : bm
  • set_block_1zero : bm
  • set_block_32one : bm
  • set_block_32zero : bm
  • set_block_8one : bm
  • set_block_8zero : bm
  • set_block_aone : bm
  • set_block_arrbit : bm
  • set_block_arrgap : bm
  • set_block_arrgap_egamma : bm
  • set_block_arrgap_egamma_inv : bm
  • set_block_arrgap_inv : bm
  • set_block_azero : bm
  • set_block_bit : bm
  • set_block_bit_0runs : bm
  • set_block_bit_1bit : bm
  • set_block_bit_interval : bm
  • set_block_end : bm
  • set_block_gap : bm
  • set_block_gap_egamma : bm
  • set_block_gapbit : bm
  • set_block_mask : bm
  • set_block_plain_cnt : bm
  • set_block_plain_size : bm
  • set_block_sgapbit : bm
  • set_block_sgapgap : bm
  • set_block_shift : bm
  • set_block_size : bm
  • set_block_size_op : bm
  • set_COUNT : bm
  • set_COUNT_A : bm
  • set_COUNT_AND : bm
  • set_COUNT_B : bm
  • set_COUNT_OR : bm
  • set_COUNT_SUB_AB : bm
  • set_COUNT_SUB_BA : bm
  • set_COUNT_XOR : bm
  • set_END : bm
  • set_gap : bm
  • set_gap_level() : bm
  • set_operation : bm
  • set_OR : bm
  • set_representation : bm
  • set_SUB : bm
  • set_total_blocks : bm
  • set_word_mask : bm
  • set_word_shift : bm
  • set_XOR : bm
  • setop2op() : bm
  • short_t : bm
  • sse2_and() : bm
  • sse2_and_arr() : bm
  • sse2_andnot_arr_2_mask() : bm
  • sse2_bit_block_calc_count_change() : bm
  • sse2_bit_count() : bm
  • sse2_bit_count_op() : bm
  • sse2_copy_block() : bm
  • sse2_invert_arr() : bm
  • sse2_or() : bm
  • sse2_or_arr() : bm
  • sse2_set_block() : bm
  • sse2_sub() : bm
  • sse2_sub_arr() : bm
  • sse2_xor() : bm
  • sse2_xor_arr() : bm
  • sse2_xor_arr_2_mask() : bm
  • sse4_bit_block_calc_count_change() : bm
  • sse4_bit_count() : bm
  • sse4_bit_count_op() : bm
  • standard_allocator : bm
  • strategy : bm
  • sub_bit_block() : bm
  • sub_op() : bm
  • sum_arr() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/graph_legend.html0000644000175000017500000001117111365042652015233 0ustar tlktlk BitMagic: Graph Legend

Graph Legend

This page explains how to interpret the graphs that are generated by doxygen.

Consider the following example:

/*! Invisible class because of truncation */
class Invisible { };

/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible { };

/* Class not documented with doxygen comments */
class Undocumented { };

/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated { };

/*! A template class */
template<class T> class Templ { };

/*! Class that is inherited using protected inheritance */
class ProtectedBase { };

/*! Class that is inherited using private inheritance */
class PrivateBase { };

/*! Class that is used by the Inherited class */
class Used { };

/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
                  protected ProtectedBase,
                  private PrivateBase,
                  public Undocumented,
                  public Templ<int>
{
  private:
    Used *m_usedClass;
};

This will result in the following graph:

graph_legend.png

The boxes in the above graph have the following meaning:

  • A filled gray box represents the struct or class for which the graph is generated.
  • A box with a black border denotes a documented struct or class.
  • A box with a grey border denotes an undocumented struct or class.
  • A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.

The arrows have the following meaning:

  • A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • A dark green arrow is used for protected inheritance.
  • A dark red arrow is used for private inheritance.
  • A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00218.map0000644000175000017500000000030211365042646013235 0ustar tlktlk bm3.7.0/doc/html/a00069.html0000644000175000017500000001373711365042651013444 0ustar tlktlk BitMagic: bm::globals< T > Struct Template Reference

bm::globals< T > Struct Template Reference

Internal structure. More...

#include <bmfunc.h>

Collaboration diagram for bm::globals< T >:

Data Structures

struct  bo

Static Public Member Functions

static ByteOrder byte_order ()

Static Public Attributes

static bo _bo

Detailed Description

template<bool T>
struct bm::globals< T >

Internal structure.

Different global settings.

Definition at line 407 of file bmfunc.h.


Member Function Documentation

template<bool T>
static ByteOrder bm::globals< T >::byte_order (  )  [inline, static]

Definition at line 441 of file bmfunc.h.

References bm::globals< T >::_bo, and bm::globals< T >::bo::_byte_order.

Referenced by bm::deserialize().


Field Documentation

template<bool T>
globals< T >::bo bm::globals< T >::_bo [inline, static]

Definition at line 439 of file bmfunc.h.

Referenced by bm::globals< T >::byte_order().


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00134.md50000644000175000017500000000004011365042632013134 0ustar tlktlk74ee31cc6088d534cba584deaebc3d8cbm3.7.0/doc/html/a00195.map0000644000175000017500000000052411365042645013246 0ustar tlktlk bm3.7.0/doc/html/a00062.html0000644000175000017500000005510511365042650013427 0ustar tlktlk BitMagic: bm::bvector< Alloc >::enumerator Class Reference

bm::bvector< Alloc >::enumerator Class Reference
[The Main bvector<> Group]

Constant input iterator designed to enumerate "ON" bits. More...

#include <bm.h>

Inheritance diagram for bm::bvector< Alloc >::enumerator:
Collaboration diagram for bm::bvector< Alloc >::enumerator:

Public Types

typedef std::input_iterator_tag iterator_category
typedef unsigned value_type
typedef unsigned difference_type
typedef unsigned * pointer
typedef unsigned & reference

Public Member Functions

 enumerator ()
 enumerator (const bvector< Alloc > *bvect, int position)
bm::id_t operator* () const
bm::id_t value () const
enumeratoroperator++ ()
enumerator operator++ (int)
void go_first ()
enumeratorgo_up ()

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >::enumerator

Constant input iterator designed to enumerate "ON" bits.

Examples:

sample5.cpp, and sample8.cpp.

Definition at line 385 of file bm.h.


Member Typedef Documentation

template<class Alloc>
typedef unsigned bm::bvector< Alloc >::enumerator::difference_type

Definition at line 392 of file bm.h.

template<class Alloc>
typedef std::input_iterator_tag bm::bvector< Alloc >::enumerator::iterator_category

Reimplemented in bm::bvector< Alloc >::counted_enumerator.

Definition at line 389 of file bm.h.

template<class Alloc>
typedef unsigned* bm::bvector< Alloc >::enumerator::pointer

Definition at line 393 of file bm.h.

template<class Alloc>
typedef unsigned& bm::bvector< Alloc >::enumerator::reference

Definition at line 394 of file bm.h.

template<class Alloc>
typedef unsigned bm::bvector< Alloc >::enumerator::value_type

Definition at line 391 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::enumerator::enumerator (  )  [inline]

Definition at line 397 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::enumerator::enumerator ( const bvector< Alloc > *  bvect,
int  position 
) [inline]

Member Function Documentation

template<class Alloc>
bm::id_t bm::bvector< Alloc >::enumerator::operator* (  )  const [inline]

Definition at line 412 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.

template<class Alloc>
enumerator bm::bvector< Alloc >::enumerator::operator++ ( int   )  [inline]

Reimplemented in bm::bvector< Alloc >::counted_enumerator.

Definition at line 427 of file bm.h.

References bm::bvector< Alloc >::enumerator::go_up().

template<class Alloc>
enumerator& bm::bvector< Alloc >::enumerator::operator++ (  )  [inline]

Reimplemented in bm::bvector< Alloc >::counted_enumerator.

Definition at line 422 of file bm.h.

References bm::bvector< Alloc >::enumerator::go_up().

template<class Alloc>
bm::id_t bm::bvector< Alloc >::enumerator::value (  )  const [inline]

Definition at line 417 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00232.png0000644000175000017500000000574011365042647013254 0ustar tlktlk‰PNG  IHDRÛ(w…÷bKGDÿÿÿ ½§“ •IDATxœí{LWÀÅÏòZ• ºÂŠŠlA*Ð’ˆB!!¢m1¥/Z£¡i›‚KcPIlÁ[›j’Z¢` AByX­J[Êk”‚‚byîžïÆùXaay¸~íwÉþqïÜ{æÜ™={çÎ AF’š_L·àÿ "l‘aŒ„ÙÃÍÍÍøù矇à?Ûo¾9¢nDØJJJðÎ;ïÅ@ð_e´ûŽ#Â6Vc@06'OžÔ;Y‰5›@`$DØ#!Â& 6ÀHˆ° FB„M 0zoýJ]]JJJ9 vþïqçÎ9rqqqÓª«R©ÐÐÐ0ê¶Å‹#<<|\ãÇ£µµU*›˜˜ÀÑѯ¾ú*¬­­¥úþþ~¤¥¥áòåËÐh4ðððÀš5k`ee…ÌÌL â­·Þ’Ú¢ººÑÑÑRÝüÌÌL|úé§ÈÏÏGnn.îÝ»‡E‹!22óçÏŸÐø{{{¡R©PVV™L†eË–!""¦¦¦ù~ÀÞ½{''§û8{öì”}N'SžÙ®]»†o¿ýv:¼ŒËÆõ~A•nww7Ž;6íûìèè@KK ZZZ R© R©¤rgg§AD^^žÔ¯®®‰‰‰ðôô”4š››áé鉔”( ÌŸ?iiipuuÅÕ«WqýúulݺUG711111:ANOOGZZvìØuëÖÁÖÖ¾¾¾¨¯¯ÇÒ¥Kñ믿<ö––xxxà»ï¾ÃÂ… ñÔSOaÛ¶mxå•W¤ç»ãù~ÀÎ;G=wñññSö9íð!T*G©ÖKvv6}|| n?YQQñ¯Ñ5” 6pÆ îçííͯ¿þZ§®··— …‚‡&Iúùùñ7ÞàÐÐN»-[¶páÂ…üé§Ÿ€­­­$Éû÷ïsÆŒtssã±cǤöÁÁÁŒŠŠ¢……Ï;§£õþûïsݺuû åÛo¿M­V+Õݼy“666<}ú´A¾ûúúH’–––,**ÒiÓ××7->'Ãù)›–5›V«Ett4¬¬¬0gÎìÚµ ÐÙÙ‰àà`¤¤¤`îܹP(8~ü8¶lÙ…B¥R‰ôôtI'99k×®µŽööv„‡‡ãüùóÖNKKƒ‹‹ ÌÌÌ T*‘œœ<ªn{{;BBBšš !44pæÌ„……A£Ñ222ðî»ïŽù¶Mÿtbƒ™1clmm¡ÕjqéÒ%\¹r‡Ò¹<€¤¤$  ©© ÖÖÖ¸pá ¸¸nnnˆˆˆ@^^€ÎïåË—áïïܽ{WG+..QQQùkiiANNöìÙ™L&ÕÛÛÛãèÑ£°±±1È÷éÓ§õîchhhÂ>rž&ÌQÉÎΦL&ãæÍ›yÿþ}ž?žÖÖÖÌÈÈ`[[MLL¸}ûvjµZO:Eooož8qBš5'ÃX3Û´„íÉ'ŸäÀÀ€Tϰ°0¶µµ{zzH’555433ãàà IòÊ•+´··7x_Ã/÷&¢Ý××ÇòòrIG­VS.—³¶¶v„®Z­&Þ¸qƒ$ÙÐÐ …$ëëë©P(øâ‹/2))IÇŸV«enn._~ùeºººò‹/¾`ggç¸ãšJØ,--iggG;;;Z[[¿ùæ’äçŸÎ½ý?øà®_¿žû÷ïç /¼@’tssã?þH­VK…BÁÒÒR:tˆ^^^Ò ùñÇséÒ¥”ÉdôööfUU•AžSSSéêê:fC}“úÃ6Ÿ—.]âš5k8oÞ&ëÓÇÇ©©©¨¨¨ÀìÙ³ˆ×^{mÜ1Ê´„­££C§ÜÞÞþÈ¿d!++ ñññضmjjjPVV†Y³fém?Ö@KK Nž<‰§Ÿ~ûöí“êÍÍÍ!—Ëñ×_áöíÛšÖ1J`` ¬¬¬PWW‡àà`ÔÔÔ ¼¼|D»ÖÖVäçç㥗^‚‡‡lllðÙgŸÁßßr¹°råJœ={¥¥¥ BVV<<¦êS£Ñ€$ÌÌÌðÄOŒ;&C™–°566"''pïÞ=>|x̃¡òòriQ>Zy²´´´`É’%ð÷÷‡©©).^¼8bñl$‰ØØX¤§§cß¾}¨®®ðϯbEEqêÔ)¸¸¸ !!7nܘ´ï¬¬,TUUM¸ßÌ™3188ˆ àÃ?Dxx8~ûí7i»Z­FXXV®\)ÍbHKKÊ+¤v!!!(//GCCàï簾&œ8qB瘨T*xxx`öìÙãú¶²²ÂG}„¨¨(ÔÖÖJõ999ÈÍÍÅúõë öý€žžtuuIOOOƒ|>Lqq1ÂÃÃáçç’())AjjªaÝ&pÍ9*ÙÙÙôõõåâÅ‹@®ZµJº‰1\«¶¶VgýSQQ¡³f‹‰‰ÑyŒðpù¹çžã²eËøË/¿LH»¹¹™sæÌa@@ƒƒƒ¹jÕ*:;;sõêÕ#tÕj5MMM%ák¶/¿ü’~~~Ôh4$Éýû÷óù矗։ÃimmåŽ;èîî>î1Ô·fsrrbBB‚Þ~£Ýú'ÿ¹mþ@ohhˆŸ|ò år9ÝÝÝéååE FFFòï¿ÿ–ú<¸ÁTYY9bÞÞÞR9++‹vvv\°`}||¨T*éêêÊêêjƒ}÷÷÷ó½÷Þ£……½¼¼¸dÉΚ5KZkNÄ·¥¥%è|ììì ò9œŒŒ 0##cÔói(ôÉz{{YXX¨s#bºioog^^oß¾=á¾ÝÝÝÌÏÏ—¾LÍÍÍ,..WW£Ñ°££cÒž~N4ššš¸gÏžI÷NWW‹‹‹YPPÀ[·nMI«¯¯.\`nn.+++už—‘†ûnoogAA‹‹‹ÙÝÝ=í¾Çó9œ©œ§á%l‚égçά««{Ü6&Ì¿Õ÷t0Vئün¤àѱ}ûöÇmaRü[}?jÄ[ÿ‘aŒ„›@`$DØ#!Â& 6ÀHˆ° FB„M 0zjOÇŸ¿‚ÿeDØ–/_Ž~øáqxþÓÈHñïj# þ§¶@`,DØ#!Â&‰ÿ Iðx–iÔIEND®B`‚bm3.7.0/doc/html/a00146.map0000644000175000017500000000032211365042635013235 0ustar tlktlk bm3.7.0/doc/html/a00085.html0000644000175000017500000001020211365042651013422 0ustar tlktlk BitMagic: bm::bvector< Alloc >::statistics Struct Reference

bm::bvector< Alloc >::statistics Struct Reference

Statistical information about bitset's memory allocation details. More...

#include <bm.h>

Inheritance diagram for bm::bvector< Alloc >::statistics:
Collaboration diagram for bm::bvector< Alloc >::statistics:

Detailed Description

template<class Alloc>
struct bm::bvector< Alloc >::statistics

Statistical information about bitset's memory allocation details.

Examples:

sample3.cpp, and sample4.cpp.

Definition at line 130 of file bm.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00131.md50000644000175000017500000000004011365042631013130 0ustar tlktlk6e7060d77b9cd66c9e34e71b5f6b2f81bm3.7.0/doc/html/a00246.map0000644000175000017500000000022111365042651013232 0ustar tlktlk bm3.7.0/doc/html/a00038.html0000644000175000017500000001470511365042652013435 0ustar tlktlk BitMagic: bm::block_allocator Class Reference

bm::block_allocator Class Reference
[Memory Allocation]

Default malloc based bitblock allocator class. More...

#include <bmalloc.h>

Static Public Member Functions

static bm::word_tallocate (size_t n, const void *)
 The member function allocates storage for an array of n bm::word_t elements, by calling malloc.
static void deallocate (bm::word_t *p, size_t)
 The member function frees storage for an array of n bm::word_t elements, by calling free.

Detailed Description

Default malloc based bitblock allocator class.

Functions allocate and deallocate conform to STL allocator specs.

Definition at line 49 of file bmalloc.h.


Member Function Documentation

static bm::word_t* bm::block_allocator::allocate ( size_t  n,
const void *   
) [inline, static]

The member function allocates storage for an array of n bm::word_t elements, by calling malloc.

Returns:
pointer to the allocated memory.

Definition at line 57 of file bmalloc.h.

static void bm::block_allocator::deallocate ( bm::word_t p,
size_t   
) [inline, static]

The member function frees storage for an array of n bm::word_t elements, by calling free.

Definition at line 81 of file bmalloc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x7e.html0000644000175000017500000001065111365042644016505 0ustar tlktlk BitMagic: Data Fields - Functions
 

- ~ -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00123.png0000644000175000017500000001371511365042643013250 0ustar tlktlk‰PNG  IHDR((Ô’¬bKGDÿÿÿ ½§“‚IDATxœíÝ{\ÙþÀñOj'6r ƒ’[šC†¹¸„9òš$2áa0ËÐc†áä2©†Ã!†Ã8Ô©HŽÐ1ƒsŽLr©9šÑ0½BjJ™nºL7ýþèÕóëÙ»}馯¬÷ëÕûYk¯ç».ö^ϳÖ~TVVV"‚ ‚Ђ´jîAAT‰ Š ‚ -Ž˜ ‚ ‚Ðâ©HII!66¶9bž#3gÎlîêEŒA„goÔ¨QôêÕKvLm‚Íœ9sžYPÂóé·º÷ZŒA„g/((Ù1µ JµßêŒÐ¼‚ƒƒŸ‹/øK—.5w‚ ¿ ãÆ«õ¸Øƒ"‚ B‹#&(‚ ‚ ´8b‚"‚ B‹#&(‚ ‚ ´8b‚"‚ B‹#&(‚ ‚ ´8f\Û¶m£¼¼”J%øÃ°²² ''‡¿ÿýï¬Y³Fí½øúúbeeUëÏS©¨¨`ÅŠõŽOÛùõQ\\LPPׯ_ÇÀÀ€1cÆàáá¡¡a½cÒÆßßwwwz÷î-;^³IIIDGG3þü&‰AÐß™3gÈÎΖ^·nÝ{{{ØŒQ=žþøc–.]Jqq±¬Ü””–/_Ž¿¿ƒâS=]¤¦¦booÏáÇéÓ§¬_¿ggç&{V̦M›¤ö©©f=~üñG>ûì³&9ÿ³VZZNTTߟÖÜ¡ÔËÉ“'¹yó&YYYdeeñÝwßñî»ïròäÉæí¹RXXÈ™3g¤×Ÿ|ò IIIª¥= ¤§§×›¾+îÆˆ¥!jöECª¾P=z„¯¯/±±±²4]m¨JSýµÕÁÇLJÜÜ\|||¸uë–ìüùùùx{{†››...œ;wŽ}ûöáââÂŒ3¸xñ¢Zn޼ɢE‹d~~~Rœ.\`Μ9L˜03fðÕW_éŒE[ýªãüæ›oððð`Ê”)lÛ¶§OŸê35©ö…¶sêS”——SXX(;>{ölé³OŸøùùñÎ;ïÅÆ9p๹¹ZcÑV¿òòrnݺÅÿþ÷?Ž9Âáǹrå qqqZûV•j_4dL™˜˜0uêT6lØÀÆ9sæ ééétëÖMš@è“§ZBBQQQ²¿š“Õ{÷îªs¢£££ìNCII 7nܨuŸ™êX¨O«ö©j»uîÜY¶œððáCŠŠŠ´Žÿæ+uÕhK<±±±$%%U‰ââb±±±‘åS*•´jÕ ¥R‰B¡ ¢¢ê ªcÇŽ¼üòËDFFâîîNXXÓ§O—­ióí·ß2lØ0¬­­Q(äåå¤I“¤ôÚµkÙ½{·Zœ!!!¼þú븸¸°fÍŒŒŒ(..ÆÔÔT–÷É“'´mÛ¶‘Z¨ñ)•J¶mÛ†B¡`ìØ±,[¶Œàà`)..fÏž=tïÞ’’ífbb"Ë[ZZÊÂ… IHHàÅ_$((ˆwÞy§Î±¥¥åpêT ÄÞÞžS§N˜˜Hpp0W¯^ÅÄÄ„÷Þ{ÄÄD­é Ñ·o_Ù‡³t«¼U«VtïÞÐÞnªyyóÍ79~ü8¦¦¦|ÿý÷²}AÚüòKW®dbiù/½´ CCž>­ºj­žœhsèÐe¢¢ô«|IIIÁظ{ßçíí-Ûƒ¢ÊÀÀ@ú@ÎÊÊ’®Œ«½ð үzöì)722â­·Þ ##ƒ””ÙŽû’’=z4qqq¼û››3bÄæÎ‹¹¹¹Ö4m±¨Æ­J[¹Ý»w—}ZYY¯µ믯ŒŒ ½ËÐVÿ~ýúi¬ƒ>LLL€ª6T(ÒÅ–êg‰ª#GŽžžÎ®]»¤c …‚;wîpàÀÒÒÒh×®^›ôuõ/ ëßêØtõmCΩmLUVVRYY‰ƒƒ@ÕÒöÎ;Y·nÁÁÁR>myªëáêêªqÊÑ£GéÔ©­[·&!!ÂÂBÒÒÒHNN®õ»£¨¨ˆ;vÀ¢E‹prrÒÙÕ£µµ[Muÿ55ÇXÑ¥Éö Œ1‚œœòóóõ~‹‹ /^$!!””^{í5YzDDëÖ­cýúõܽ{—ëׯKw=Ú¶mË/¿ü"Ë_ÛOÌÚ¶m«¶Ÿ"<<¼ÖY¶££#¥¥¥ÒzqM¾¾¾\¸pCCCLLL011ÁÐÐcccLLL¤+5]é ¡:ùËÌ̤cÇŽ€üCP[»©æ…ª‰âñãÇ búô阙™58Öß»šmljjª6Þòóó133ÃÔÔ”‚‚YÚåË—),,ÄÔÔ{{{¾úê+ÙߪU«¨¬¬ÄËË‹þóŸøøøPZZÊÆ´¦i‹E5nUÚÊÔÊÍÍÍ¥M›6Zë¡­þúªKºê¯©Må?ÿù‘‘‘lÙ²cccéxtt4‡bÞ¼y|ùå—|öÙgz}†èªŸ&ºú¶!çÔ6¦¢££Y°`ìX×®]yûí·ÉÈÈ ¸¸X¯<ú044$//={ö°gÏÒÒÒ¸xñ"'NœPË[QQ··7æææ9r¤N“MêÚÆº&¶¿þú+P·ñ_SsŒ]íJAAôÅ_PPÀ–-[°³³C©Tê½ÁR©Tòꫯ²`Á\]]iÕJ>JMMÅÖÖ–W^y€˜˜i4qâDæÏŸÏÖ­[éܹ3111ܾ}[­Sœœ¤º]ºt!66–¹sçÊf‰ÕÚµkÇòåËY¼x1QQQÒíÕÈÈHÎ;ÇåË—éß¿¿tGæêÕ«¸¹¹ñúë¯KeèJפf{jmUwƒ"##qvvæÉ“'ìß¿///µ|ÚÚ­6NNN¤§§³{÷nŽ;¦3Öj:™3fLöî]Ejj¶Æ%M.|…éÓ‡é}¾¦LTÔÏMzŽ#FðÅ_žžŽ¥¥%999ü÷¿ÿåÃ?D¡P°iÓ&rssQ*•$&&²uëVNž<ÉðáÃÙ·o< wïÞ”””°dÉæÍ›Gzz:±±±ìÞ½›2yòd>ùä jc¹¦4m±è¢­\¨º"»rå cÆŒ¡¸¸˜ÈÈH&Mš¤µÇ×X}Õ¥ mõ¯¨¨ÐX‡¦ðÓO?±cÇüýýÕ®”³²²èÝ»·ô«•~øA¯ ÷õí_]}Ûç°··çÑ£GDEEIw>*++ùú믱¶¶–&·ºòT+))Qû²®^ŽòôôÄÓÓS:þÞ{ïÉ~M=°²²âêÕ«dggãîî.»ð533«÷6€†´qõò^õ6„ÄÄDÒÒªÓPßCÍ1VtÖ³QJÙZœ‘‘£F’íÚ¯©K—.,[¶Œ]»v©mjrwwgîܹ|úé§jï{óÍ7Ù¼y3¯½öÆÆÆ( ¬­­ñööæÔ©SL›6Áƒ3dÈ 2dˆì*`ܸqxxxHù®_¿N@@€ÆÛQ›7o&//;;;lmm)--åþýûüíocôèÑum&½©îFïÔ©“Ú¯Y½z5ܽ{/^Ì£Gdù´µ[`` Ú¹ ...|ýõ׌?¾^ñ÷èÑ/¯ñxyçîÝ ""â »NZZ …ás¹E_666Ìš5‹Å‹3pà@î޽˸qã9r$&L`þüùôíÛ—ü‘¥K—Ò¦MzöìÉÂ… ñòòbàÀ¤¤¤`ggÇøñãyüø1§OŸfáÂ…(•JîܹÃÒ¥KªŸZjJÓ‹®øÚÊ…ÿÿµ[hh(iiiôìÙWWWŒ5ÖÃÀÀ@cýµý ´&eÔ¥/bbb4Ö C‡ìÚµ‹åË—Ó®];½bÓ&22’‚‚ÙÒ¯¹¹9aaaŒ3†#GްråJ …´`ïÞ½lݺUc,ÚêWóႪtõ­6 SíÛ·gýúõøûûsøða:uêDff&ffføøøè§ÚÎ;Ù¹s§ì˜B¡àüùó:ë±gϦNŠ••wîÜ!33SÚTÍÅÅ…•+WêÓ,jtµqÍ>íСƒì½––– 4ˆ·ß~›¾}û’ŸŸ/mÊ×5þ[ÒXÑÅ Re!388˜9sæ4êCÈž>}JNNŽl >>>ž—^zI­áuÉÏÏçÚµktéÒ{{{>|Hrr2¶¶¶<~ü˜²²2²³³yùå—4hAAAŒ9Rv~¨ºZ¹wïƒ R[w«MVV âààPëRVVmÛ¶•Öžëš®‹j;BÕm½˜˜Ú·o/m‚­¦vS]F«æééI×®]Õöé¢küÄÅ= ""Žðð›dgÊ&+óZÄ”9sæÈ~-ÕT222HMM¥[·n²5c¨ºë•‘‘A¯^½Ôž ùøñcîß¿……}úô‘Ž—••‘˜˜Hii)666²_^iKÓ‹6šÊ‰‰áÿøܾ}ccc  »£©©šê_YYÉ“'Ojý·W[š¶6TU[ýuÕ!77—¤¤$ €¹¹¹ÆØ´ÑV'UEEE$&&Ò¡C¬­­ÉÌÌ$==!C†èŒ¥>ý«kÌèRß1U}î»wïRXXˆ……VVVjwÃõÉÓêÒ§ÚÚ¸fŸÖv—¦¢¢‚Û·o`kk«ö>žñãÇsüøqlmm9qâ$%%©íò4«¾¥=wî\âââdŠõ¡ïøÑô ¶ßÓåyVýå¾ÿþæ¥Þž‡:Âo¦ J£-ñ47>Œ¯¯/ÙÙÙØØØpîÜ919©£{÷î±uëVvìØQçÉI]¶bìØþŒÛ??7.^L¤gÏŽMv>áÙ233S{ÆÅoÍóPAø-{n&(PµXýl¡~FŽÉõëןé9˜2åÅgzN¡iÙÛÛK:«ž‡:ÂoY“ýÌXA¡¾ÄEA„GLPAAhqÄEA„GLPAAhqÄEA„GLPAAhq4>¥%<2XšË¸qãš;A„ß5µGݧ¤¤Û\ñω™3g6wõ"Æ¿ ³7jÔ(zõê%;¦6AAAhnbŠ ‚ -Ž˜ ‚ ‚Ðâˆ Š ‚ -Îÿ¬&‹õ˜ñdIEND®B`‚bm3.7.0/doc/html/globals_func.html0000644000175000017500000000722611365042652015260 0ustar tlktlk BitMagic: Data Fields
 

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00141.map0000644000175000017500000000165211365042634013236 0ustar tlktlk bm3.7.0/doc/html/a00002.html0000644000175000017500000002066111365042626013423 0ustar tlktlk BitMagic: sample2.cpp

sample2.cpp

Example demonstrates using set operations AND, OR, XOR, etc. For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample2.cpp
  Example demonstrates using set operations AND, OR, XOR, etc.
  For more information please visit:  http://bmagic.sourceforge.net
 
*/


#include <iostream>
#include "bm.h"

using namespace std;

void print_bvector(const bm::bvector<>& bv)
{
    unsigned value = bv.get_first();
    do
    {
        cout << value;
        value = bv.get_next(value);
        if (value)
        {
            cout << ",";
        }
        else
        {
            break;
        }
    } while(1);
    cout << endl;
}

int main(void)
{
    bm::bvector<>   bv1;    
    bm::bvector<>   bv2;
    bm::bvector<>   bv3;

    bv1.set(10);
    bv1.set(100);
    bv1.set(1000000);


    bv2.set(10);
    bv2.set(100);

    // Logical AND operation on bv2 (bv1 is the argument)
    // bv2 = bv2 AND bv1

    bv3 = bv1 & bv2;
    print_bvector(bv3);

    bv2 &= bv1;  // You also can use: bv2.bit_and(bv1);
    print_bvector(bv2);
    
    // bv2 = bv2 OR bv1

    bv3 = bv1 | bv2;
    print_bvector(bv3);

    bv2 |= bv1;  //  You can also use: bv2.bit_or(bv1);
    print_bvector(bv2);

    
    bv1.set(1000000, false);
    
    // bv2 = bv2 SUB bv1

    bv3 = bv2 - bv1;
    print_bvector(bv3);

    bv2 -= bv1;   // You can also use: bv2.bit_sub(bv1);
    print_bvector(bv2);

    // bv2 XOR bv1

    bv3 = bv2 ^ bv1;
    print_bvector(bv3);

    bv2 ^= bv1;  // You can also use: bv2.bit_xor(bv1);
    print_bvector(bv2);

    // For lexicographical comparison there is set of overloaded
    // operators and function compare.

    if (bv2 == bv3)
    {
        cerr << "Equivalent. Comparison result = " 
             << bv2.compare(bv3) << endl;
    }
    else
    {
        cout << "Error." << endl;
        return 1;
    }


    return 0;
}

Generated on Sun Apr 25 09:37:26 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00250.md50000644000175000017500000000004011365042651013134 0ustar tlktlk1442767f2e2531bb12021370e773278fbm3.7.0/doc/html/namespacemembers_0x76.html0000644000175000017500000000730711365042652016715 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- v -

  • vect_bit_transpose() : bm
  • vect_bit_trestore() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00051.html0000644000175000017500000002106711365042644013430 0ustar tlktlk BitMagic: dbg_ptr_allocator Class Reference

dbg_ptr_allocator Class Reference

Static Public Member Functions

static void * allocate (size_t n, const void *)
static void deallocate (void *p, size_t n)
static int balance ()

Static Public Attributes

static unsigned na_ = 0
static unsigned nf_ = 0

Detailed Description

Examples:

sample6.cpp.

Definition at line 77 of file sample6.cpp.


Member Function Documentation

static void* dbg_ptr_allocator::allocate ( size_t  n,
const void *   
) [inline, static]
Examples:
sample6.cpp.

Definition at line 83 of file sample6.cpp.

References na_.

static int dbg_ptr_allocator::balance (  )  [inline, static]
Examples:
sample6.cpp.

Definition at line 102 of file sample6.cpp.

References na_, and nf_.

Referenced by main().

static void dbg_ptr_allocator::deallocate ( void *  p,
size_t  n 
) [inline, static]
Examples:
sample6.cpp.

Definition at line 93 of file sample6.cpp.

References nf_.


Field Documentation

unsigned dbg_ptr_allocator::na_ = 0 [static]
Examples:
sample6.cpp.

Definition at line 80 of file sample6.cpp.

Referenced by allocate(), balance(), and main().

unsigned dbg_ptr_allocator::nf_ = 0 [static]
Examples:
sample6.cpp.

Definition at line 81 of file sample6.cpp.

Referenced by balance(), and deallocate().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00251.png0000644000175000017500000001043511365042651013245 0ustar tlktlk‰PNG  IHDR³u¥ÐZbKGDÿÿÿ ½§“ÒIDATxœíÝ{LSgðoik¥'¨è/CP›3^ˆ˜¸1QŒÈfX\¼ì¢‹l.NƒÛ"ê”Wçœ3™ÈĨ è«rQ¼p‘¡–"ˆð–k¹ÚßûÇ ¨ÐRZÏ'!ñ9OÏùýÎÓ¯Í9mQæÕ—if즯°03¼ÁÂÌð†ÈÐär9®_¿nè2Œ‰ 0x ƒ‡9==AAA†.ظþxŸÁàanÇÞ4˜¢££ûíÅŒ]33¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð†É…¹¨¨GŽ1Jí“'OâÆ¯l=c®)0¹0çççãÀF©‹«W¯¾²õŒ¹v¦ÀäÂÌ0º2É0«Õj¬[·R©#FŒÀ¶mÛUUUðòòÂîÝ»aoo[[[:t_ý5lmmagg‡˜˜î8;wîÄŠ+ºÇÄÄ`ܸq077‡ŸŸjjj¸¹;wî`öìÙ>žìííéîÝ»Dôo€•J%‘ÖÞz¢?ÃÜo_4ê GGGˆÅbnìââ‚äädn‚P(„··7.\¸€ââbÀÓ§Oqüøqxyyé\¯·º[;…BgggÌ;B¡×®]Cmm-`ûöí˜7oD"f̘+VàÉ“'}Þ›ÁúBF—kæ™3gÒ„ ÈÃÃFŽI .¤––݃hÈ!Ü8''GãšyýúõôÎ;ït9V«ÕD2™ŒæÍ›G´páBŠˆˆ "¢]»v‘T*%OOO5jÐóçÏ¹ãØØØ§§'I¥RÚ·oWcóæÍ$“ÉÈÛÛ›†Nk×®Õ«^II …B½×N.—Óˆ#ÈÃü¼¼háÂ…äèèH‹-¢’’rpp WWWòôô$+++:xð w\mkñ2ú°]cc#¥¤¤hÜ´Bnn.]¸pjjj:Í) JJJânŒ:*,,¤¤¤$’Ëåæ>|HIIITPPÐgõz£»µ«©©¡ .ÐíÛ·‰ˆH.—Sjj*555Ñ•+WèüùóôôéÓ>ë­?Ã, 2쯀´ÿ¦Ë eee7Â/ruuÅ´iÓú±£—ëÇç?Ó$o™®‰ÅbØØØt;oaaÑݘæWˆ |||ŒÝ†É2Éw3F,Ì o°03¼ÁÂÌð 3Ã,Ìý@¥j1v  ³µ´´aûö³Ænc@è·÷™Mñ[VýÁÜü Èd ðã j3v;¼fð0Ï™3ÇŽ3t“µgÏ×á»ï~ÅôéÃݯü»Y}}3\\6¡¥¥ ¸àðá•Æn‰ÏØÿibH‰‰wÐÚúœœ‡ºº&#wÄo,Ìô÷ß7¹{µZ³gsÜ¿±0Èÿþ×€ŒŒ"î÷ì 66SËŒ¾X˜ äÔ©[cµšðßÿ¡¢¢ÎHñ ³ÄÆÞìô…t33NÊ1RGüÇÂl …99r¨ÕšaV« ÿÍ.5 ……Ùr vþH­&äæ*ðøq•ºâ?f8vì&ž?Ww9' ŸÝÏ ,Ì}¬°°……åèÖVBlìÍþmj€`aîcññ9‹…ZA(.~†¼¼²~ëi `aîcÿùÏyîS?mââ²ú¡›…ývvzú´>>®hjj…¥å`@i©ÙÙñá‡Ó¹Ç)• hk{yà™Þa_42°¸¸l|þù_xò$ÂØ­ðû¢Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì o°03¼ÁÂÌð½ **аŸ>ú4Èž¬­?0z|ü‰ŠŠêÝ›Ýþ7[¶lénŠÑÉ[Æn€WÂÂÂ:më6ÌóæÍ3d/ £—®ÂÌ®™Þ`afxƒ…™á f†7X˜ÞÐ+Ì¥¥¥HLLì«^z%##ùùù¯l=•J…èèh@]]bbbz½Ÿ)h_—Þœƒ¡èf¹\Ž„„„¾ê¥WRSSq÷îÝW¶^CCŽ9ÂýùÌ™3ÜÜÎ;QVVÖå¸ã~¦ }]^<c`—&`äÈ‘øë¯¿¸ñ7ÐÐÐÐíØ½xÆ w˜‰¿þú+>øàøûû#** P[[‹ÄÆÆbÉ’%ðóóùsçðûï¿ÃÏÏ‹/FJJ wœ˜˜lÛ¶­ÛqJJ –-[† `Ó¦MOnqq1¾øâ ¼÷Þ{øøã‘œœÌÍeee!88ÞÞÞXµj ¸¹[·naåÊ•ðööÆŠ+‘‘¡W½êêj|óÍ78þ<|}}ñøñã­¡R©Ä÷ßàߪ««†ÜÜÜNãi;wmºÛ¯ýy»xñ"–/_„‡‡C­Vk]—ŽçÉÉÉ ‚§§'/^Ì]‚¼ìøúÐ;Ì …8qâ¶nÝŠ£GâòåËhkkCNNêëë‹O>ù;vì€L&C\\pèÐ!î8˜4iR—ãþùáááøüóÏqêÔ)LŸ>×®]455aãÆðòò™3g°aÃìÞ½÷îÝógϰyóf|úé§8}ú4<<<°eË”J%BCC€³gÏbõêÕøñÇQRR¢s½ÖÖVܹséé騾};FÕ£5lnnFNN $$VVV ³³s§qGÚzÑFÛ~mmmÈÍÍÅíÛ·‰Ã‡###ÙÙÙZ×¥ã9¨T*lß¾k×®Ebb"¶lÙ‚ƒ¢ººZëñõÕíÇÙ=5tèP¬Zµ "‘®®®ð÷÷Grr2\]]AD „@ €»»;„B!–.]Ê;ÆgÖ¬YÇí8¾xñ"<<<0wî\À’%KpîÜ9Àµk×0lØ0øùùÞ|óMøøø 55¶¶¶˜>}:æÌ™X¶l„B!ZZZžž'''øøøfÏž™3gâÒ¥KhllÔ©ÞÒ¥KÑÜÜŒõë×cøðá:¯§@ ÀСC!‰:;ÒÖË”)Sº­¡m¿ÀÀ@´µµ!88"‘vvv?~<••Õíºt$‹ñÛo¿a„ ;;;ˆD"444ÀÜܼÛãëKï0ÛÛÛk,ò믿®ñ·lðàÁ@±X ¡PÈ{ª²²ãÆÓØ6vìX@yy9är9–-[ÆÍ577cæÌ™xþü9FÍm‰D <{ö cÆŒÑ8æ˜1cPQQææf굟—®Aî­—õ¢Ï~Ï¡ý¹ÒöÔ˜«­­Å!C0hÐ êÕÔÔôÙÓÚzÑu¿úúún÷Óöû “'O†\.‡‹‹ Þ}÷]xzz"88ŽŽŽÈÏÏÇš5k`nn''',]º«V­ÂäÉ“QXXˆùóçcÆŒ "êUVV껜kkkìÙ³_~ù%&Nœ¨1¶¶¶æ§­m´í÷â+oGÚž‡‰õë×C,sׯû÷ïGHHˆî ózáb&::AAA¸téRÒÒÒ‚{÷îaèСÜE¿!C©Tâ7Þ€………Æ\ee%=z›N×u …åååpppÀˆ#4æÊËË¡P(0räHëk}êõ¡®®R©À¿—jEEE˜4i,--;_¤k/ºî×Õº¼x*• yyy°¶¶ÆøñãQQQ²²2L›6­Çu´™?>¢¢¢°|ùòöM™}f¦³ªª*­o7?ŽŽŽ¼«Ý_º ³Þ—L×D"¬¬¬º—H$¼¬mL,Ìbee…3f ¸ÚÆÄ¾›Áð 3Ã,Ì o°03¼ÁÂÌð 3Ã,Ì otû>sWÿüزNavpp@@@€1za˜ €ƒƒƒÆ¶NßÍ`˜WT&»ffxƒ…™á f†7þŽ+ïJüàHIEND®B`‚bm3.7.0/doc/html/a00176.map0000644000175000017500000000020311365042644013236 0ustar tlktlk bm3.7.0/doc/html/a00040.html0000644000175000017500000001273611365042651013427 0ustar tlktlk BitMagic: bm::block_set_table< T > Struct Template Reference

bm::block_set_table< T > Struct Template Reference
[BIT functions]

Structure keeps all-left/right ON bits masks. More...

#include <bmfunc.h>

Static Public Attributes

static const unsigned _left [32]
static const unsigned _right [32]

Detailed Description

template<bool T>
struct bm::block_set_table< T >

Structure keeps all-left/right ON bits masks.

Definition at line 133 of file bmfunc.h.


Field Documentation

template<bool T>
const unsigned bm::block_set_table< T >::_left [inline, static]
Initial value:
 {
    0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff, 0x7ff,
    0xfff, 0x1fff, 0x3fff, 0x7fff, 0xffff, 0x1ffff, 0x3ffff, 0x7ffff,
    0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff,
    0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff
}

Definition at line 135 of file bmfunc.h.

template<bool T>
const unsigned bm::block_set_table< T >::_right [inline, static]
Initial value:
 {
    0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 0xfffffff0,
    0xffffffe0, 0xffffffc0, 0xffffff80, 0xffffff00, 0xfffffe00,
    0xfffffc00, 0xfffff800, 0xfffff000, 0xffffe000, 0xffffc000,
    0xffff8000, 0xffff0000, 0xfffe0000, 0xfffc0000, 0xfff80000,
    0xfff00000, 0xffe00000, 0xffc00000, 0xff800000, 0xff000000,
    0xfe000000, 0xfc000000, 0xf8000000, 0xf0000000, 0xe0000000,
    0xc0000000, 0x80000000
}

Definition at line 136 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00234.md50000644000175000017500000000004011365042647013143 0ustar tlktlkbf1a440c97cf31281ae69b63205f220dbm3.7.0/doc/html/a00237.map0000644000175000017500000000121311365042650013233 0ustar tlktlk bm3.7.0/doc/html/a00111_source.html0000644000175000017500000003700111365042630014773 0ustar tlktlk BitMagic: sample6.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00115.html0000644000175000017500000124117211365042650013430 0ustar tlktlk BitMagic: bm Namespace Reference

bm Namespace Reference

Data Structures

class  bvector
 bitvector with runtime compression of bits. More...
struct  bv_statistics
 Structure with statistical information about bitset's memory allocation details. More...
struct  gap_len_table
 Default GAP lengths table. More...
struct  gap_len_table_min
 Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. More...
struct  block_set_table
 Structure keeps all-left/right ON bits masks. More...
struct  all_set
 Structure carries pointer on bit block with all bits 1. More...
struct  _copyright
 Internal structure. More...
struct  globals
 Internal structure. More...
struct  d_copy_func
 d-Gap copy functor More...
class  copy_to_array_functor
 Adaptor to copy 1 bits to array. More...
class  copy_to_array_functor_inc
 Adaptor to copy 1 bits to array with base increment. More...
class  bitblock_get_adapter
 Bit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal. More...
class  bitblock_store_adapter
 Bit-block store adapter, takes bitblock and saves results into it /internal. More...
class  bitblock_sum_adapter
 Bit-block sum adapter, takes values and sums it /internal. More...
class  decoder_range_adapter
 Adapter to get words from a range stream (see range serialized bit-block). More...
struct  bit_AND
 Bit AND functor. More...
struct  bit_OR
 Bit OR functor. More...
struct  bit_SUB
 Bit SUB functor. More...
struct  bit_XOR
 Bit XOR functor. More...
struct  bit_ASSIGN
 Bit ASSIGN functor. More...
struct  bit_COUNT
 Bit COUNT functor. More...
struct  bit_COUNT_AND
 Bit COUNT AND functor. More...
struct  bit_COUNT_XOR
 Bit COUNT XOR functor. More...
struct  bit_COUNT_OR
 Bit COUNT OR functor. More...
struct  bit_COUNT_SUB_AB
 Bit COUNT SUB AB functor. More...
struct  bit_COUNT_SUB_BA
 Bit SUB BA functor. More...
struct  bit_COUNT_A
 Bit COUNT A functor. More...
struct  bit_COUNT_B
 Bit COUNT B functor. More...
struct  operation_functions
class  miniset
 Template class implements memory saving set functionality. More...
class  bvmini
 Mini bitvector used in bvector template to keep block type flags. More...
class  bvector_mini
 Bitvector class with very limited functionality. More...
class  encoder
 Memory encoding. More...
class  decoder_base
 Base class for all decoding functionality. More...
class  decoder
 Class for decoding data from memory buffer. More...
class  decoder_little_endian
 Class for decoding data from memory buffer. More...
class  bit_out
 Byte based writer for un-aligned bit streaming. More...
class  bit_in
 Byte based reader for un-aligned bit streaming. More...
class  gamma_encoder
 Functor for Elias Gamma encoding. More...
class  gamma_decoder
 Elias Gamma decoder. More...
struct  DeBruijn_bit_position
struct  first_bit_table
 Structure keeps index of first right 1 bit for every byte. More...
struct  bit_count_table
 Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers. More...
class  sse_empty_guard
 SSE2 reinitialization guard class. More...
struct  distance_metric_descriptor
 Distance metric descriptor, holds metric code and result. More...
struct  tmatrix
 Mini-matrix for bit transposition purposes. More...
struct  bit_grabber
struct  bit_grabber< unsigned, 32 >
struct  bit_grabber< unsigned short, 16 >
struct  bit_grabber< unsigned char, 8 >
struct  bit_trans_grabber
class  gap_transpose_engine
 Bit-plain splicing of a GAP block. More...
class  ptr_guard
 Mini auto-pointer for internal memory management. More...
class  serializer
 Bit-vector serialization class. More...
class  deseriaizer_base
 Base deserialization class. More...
class  deserializer
 Class deserializer. More...
class  iterator_deserializer
 Iterator to walk forward the serialized stream. More...
class  serial_stream_iterator
 Serialization stream iterator. More...
class  operation_deserializer
 Class deserializer, can perform logical operation on bit-vector and serialized bit-vector. More...
class  block_allocator
 Default malloc based bitblock allocator class. More...
class  ptr_allocator
 Default malloc based bitblock allocator class. More...
class  mem_alloc
 BM style allocator adapter. More...
class  random_subset

Typedefs

typedef void(* gap_operation_to_bitset_func_type )(unsigned *, const gap_word_t *)
typedef gap_word_t *(* gap_operation_func_type )(const gap_word_t *BMRESTRICT, const gap_word_t *BMRESTRICT, gap_word_t *BMRESTRICT, unsigned &)
typedef bm::id_t(* bit_operation_count_func_type )(const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT)
typedef decoder decoder_big_endian
 Class for decoding data from memory buffer.
typedef unsigned long long id64_t
typedef unsigned int id_t
typedef unsigned int word_t
typedef unsigned short short_t
typedef unsigned short gap_word_t
typedef word_t wordop_t
typedef mem_alloc
< block_allocator,
ptr_allocator
standard_allocator

Enumerations

enum  set_operation {
  set_AND = 0, set_OR = 1, set_SUB = 2, set_XOR = 3,
  set_ASSIGN = 4, set_COUNT = 5, set_COUNT_AND = 6, set_COUNT_XOR = 7,
  set_COUNT_OR = 8, set_COUNT_SUB_AB = 9, set_COUNT_SUB_BA = 10, set_COUNT_A = 11,
  set_COUNT_B = 12, set_END
}
 

Nomenclature of set operations.

More...
enum  operation { BM_AND = set_AND, BM_OR = set_OR, BM_SUB = set_SUB, BM_XOR = set_XOR }
 

Bit operations enumeration.

More...
enum  ByteOrder { BigEndian = 0, LittleEndian = 1 }
 

Byte orders recognized by the library.

More...
enum  strategy { BM_BIT = 0, BM_GAP = 1 }
 

Block allocation strategies.

More...
enum  set_representation { set_bitset = 0, set_gap = 1, set_array1 = 2, set_array0 = 3 }
 

set representation variants

More...
enum  distance_metric {
  COUNT_AND = set_COUNT_AND, COUNT_XOR = set_COUNT_XOR, COUNT_OR = set_COUNT_OR, COUNT_SUB_AB = set_COUNT_SUB_AB,
  COUNT_SUB_BA = set_COUNT_SUB_BA, COUNT_A = set_COUNT_A, COUNT_B = set_COUNT_B
}
 

Distance metrics codes defined for vectors A and B.

More...
enum  serialization_header_mask {
  BM_HM_DEFAULT = 1, BM_HM_RESIZE = (1 << 1), BM_HM_ID_LIST = (1 << 2), BM_HM_NO_BO = (1 << 3),
  BM_HM_NO_GAPL = (1 << 4)
}
enum  serialization_flags { BM_NO_BYTE_ORDER = 1, BM_NO_GAP_LENGTH = (1 << 1) }
 

Bit mask flags for serialization algorithm.

More...

Functions

template<class Alloc >
bvector< Alloc > operator& (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > operator| (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > operator^ (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > operator- (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
BMFORCEINLINE bm::id_t word_bitcount (bm::id_t w)
int parallel_popcnt_32 (unsigned int n)
bool is_const_set_operation (set_operation op)
 Returns true if set operation is constant (bitcount).
bm::operation setop2op (bm::set_operation op)
 Convert set operation to operation.
template<typename W >
void xor_swap (W &x, W &y)
 XOR swap two scalar variables.
template<typename T >
int wordcmp0 (T w1, T w2)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
template<typename T >
int wordcmp (T a, T b)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
template<typename T >
unsigned gap_bfind (const T *buf, unsigned pos, unsigned *is_set)
template<typename T >
unsigned gap_test (const T *buf, unsigned pos)
 Tests if bit = pos is true.
template<class T , class F >
void for_each_nzblock (T ***root, unsigned size1, F &f)
template<class T , class F >
void for_each_nzblock2 (T ***root, unsigned size1, F &f)
template<class T , class F >
bool for_each_nzblock_if (T ***root, unsigned size1, F &f)
template<class T , class F >
void for_each_block (T ***root, unsigned size1, F &f)
template<class T , class F >
bmfor_each (T first, T last, F f)
template<class T >
sum_arr (T *first, T *last)
template<typename T >
unsigned gap_bit_count (const T *buf, unsigned dsize=0)
 Calculates number of bits ON in GAP buffer.
template<typename T >
unsigned gap_bit_count_range (const T *buf, T left, T right)
 Counts 1 bits in GAP buffer in the closed [left, right] diapason.
template<class T , class Func >
void for_each_dgap (const T *gap_buf, Func &func)
template<typename T >
T * gap_2_dgap (const T *gap_buf, T *dgap_buf, bool copy_head=true)
 Convert GAP buffer into D-GAP buffer.
template<typename T >
void dgap_2_gap (const T *dgap_buf, T *gap_buf, T gap_header=0)
 Convert D-GAP buffer into GAP buffer.
template<typename T >
int gapcmp (const T *buf1, const T *buf2)
 Lexicographical comparison of GAP buffers.
template<typename T , class F >
void gap_buff_op (T *BMRESTRICT dest, const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F &f, unsigned &dlen)
 Abstract operation for GAP buffers. Receives functor F as a template argument.
template<typename T , class F >
unsigned gap_buff_any_op (const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f)
 Abstract distance test operation for GAP buffers. Receives functor F as a template argument.
template<typename T , class F >
unsigned gap_buff_count_op (const T *vect1, const T *vect2, F f)
 Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument.
template<typename T >
unsigned gap_set_value (unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set)
 Sets or clears bit in the GAP buffer.
template<typename T >
unsigned gap_add_value (T *buf, T pos)
 Add new value to the end of GAP buffer.
template<typename T >
unsigned gap_set_array (T *buf, const T *arr, unsigned len)
 Convert array to GAP buffer.
template<typename T >
unsigned bit_array_compute_gaps (const T *arr, unsigned len)
 Compute number of GAPs in bit-array.
template<typename T >
int gap_find_in_block (const T *buf, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the GAP block.
BMFORCEINLINE void set_bit (unsigned *dest, unsigned bitpos)
 Set 1 bit in a block.
BMFORCEINLINE unsigned test_bit (const unsigned *block, unsigned bitpos)
 Test 1 bit in a block.
void or_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 Sets bits to 1 in the bitblock.
void sub_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 SUB (AND NOT) bit interval to 1 in the bitblock.
void xor_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 XOR bit interval to 1 in the bitblock.
template<typename T >
void gap_sub_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 SUB (AND NOT) GAP block to bitblock.
template<typename T >
void gap_xor_to_bitset (unsigned *BMRESTRICT dest, const T *BMRESTRICT buf)
 XOR GAP block to bitblock.
template<typename T >
void gap_add_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 Adds(OR) GAP block to bitblock.
template<typename T >
void gap_add_to_bitset (unsigned *dest, const T *buf)
 Adds(OR) GAP block to bitblock.
template<typename T >
void gap_and_to_bitset (unsigned *dest, const T *buf)
 ANDs GAP block to bitblock.
template<typename T >
bm::id_t gap_bitset_and_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block AND masked by GAP block.
template<typename T >
bm::id_t gap_bitset_and_any (const unsigned *block, const T *buf)
 Bitcount test of bit block AND masked by GAP block.
template<typename T >
bm::id_t gap_bitset_sub_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block SUB masked by GAP block.
template<typename T >
bm::id_t gap_bitset_sub_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block SUB masked by GAP block.
template<typename T >
bm::id_t gap_bitset_xor_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block XOR masked by GAP block.
template<typename T >
bm::id_t gap_bitset_xor_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block XOR masked by GAP block.
template<typename T >
bm::id_t gap_bitset_or_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block OR masked by GAP block.
template<typename T >
bm::id_t gap_bitset_or_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block OR masked by GAP block.
void bit_block_set (bm::word_t *BMRESTRICT dst, bm::word_t value)
 Bitblock memset operation.
template<typename T >
void gap_convert_to_bitset (unsigned *dest, const T *buf)
 GAP block to bitblock conversion.
template<typename T >
void gap_convert_to_bitset_l (unsigned *dest, const T *buf, unsigned buf_len)
 GAP block to bitblock conversion.
template<typename T >
void gap_convert_to_bitset (unsigned *dest, const T *buf, unsigned dest_len)
 GAP block to bitblock conversion.
template<typename T >
unsigned * gap_convert_to_bitset_smart (unsigned *dest, const T *buf, id_t set_max)
 Smart GAP block to bitblock conversion.
template<typename T >
unsigned gap_control_sum (const T *buf)
 Calculates sum of all words in GAP block. (For debugging purposes).
template<class T >
void gap_set_all (T *buf, unsigned set_max, unsigned value)
 Sets all bits to 0 or 1 (GAP).
template<class T >
void gap_init_range_block (T *buf, T from, T to, T value, unsigned set_max)
 Init gap block so it has block in it (can be whole block).
template<typename T >
void gap_invert (T *buf)
 Inverts all bits in the GAP buffer.
template<typename T >
bool gap_is_all_zero (const T *buf, unsigned set_max)
 Temporary inverts all bits in the GAP buffer.
template<typename T >
bool gap_is_all_one (const T *buf, unsigned set_max)
 Checks if GAP block is all-one.
template<typename T >
gap_length (const T *buf)
 Returs GAP block length.
template<typename T >
unsigned gap_capacity (const T *buf, const T *glevel_len)
 Returs GAP block capacity.
template<typename T >
unsigned gap_limit (const T *buf, const T *glevel_len)
 Returs GAP block capacity limit.
template<typename T >
unsigned gap_level (const T *buf)
 Returs GAP blocks capacity level.
template<typename T >
void set_gap_level (T *buf, unsigned level)
 Sets GAP block capacity level.
template<typename T >
int gap_calc_level (int len, const T *glevel_len)
 Calculates GAP block capacity level.
template<typename T >
unsigned gap_free_elements (const T *buf, const T *glevel_len)
 Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length.
template<typename T >
int bitcmp (const T *buf1, const T *buf2, unsigned len)
 Lexicographical comparison of BIT buffers.
template<typename T >
unsigned bit_convert_to_gap (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len)
 Converts bit block to GAP.
template<class T , class F >
void for_each_gap_dbit (const T *buf, F &func)
 Iterate gap block as delta-bits with a functor.
template<typename D , typename T >
gap_convert_to_arr (D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false)
 Convert gap block into array of ints corresponding to 1 bits.
bm::id_t bit_block_calc_count (const bm::word_t *block, const bm::word_t *block_end)
 Bitcount for bit string.
bm::id_t bit_count_change (bm::word_t w)
void bit_count_change32 (const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count, unsigned *gap_count)
bm::id_t bit_block_calc_count_change (const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count)
bm::id_t bit_block_calc_count_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
bm::id_t bit_block_any_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
template<typename T >
void bit_invert (T *start, T *end)
bool is_bits_one (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 1.
bool bit_is_all_zero (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 0.
BMFORCEINLINE unsigned and_op (unsigned v1, unsigned v2)
 GAP and functor.
BMFORCEINLINE unsigned xor_op (unsigned v1, unsigned v2)
 GAP xor functor.
BMFORCEINLINE unsigned or_op (unsigned v1, unsigned v2)
 GAP or functor.
BMFORCEINLINE unsigned sub_op (unsigned v1, unsigned v2)
 GAP or functor.
BMFORCEINLINE gap_word_tgap_operation_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP AND operation.
BMFORCEINLINE unsigned gap_operation_any_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP AND operation test.
BMFORCEINLINE unsigned gap_count_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount AND operation test.
BMFORCEINLINE gap_word_tgap_operation_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP XOR operation.
BMFORCEINLINE unsigned gap_operation_any_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP XOR operation test.
BMFORCEINLINE unsigned gap_count_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount XOR operation test.
gap_word_tgap_operation_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP OR operation.
BMFORCEINLINE unsigned gap_count_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount OR operation test.
gap_word_tgap_operation_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)
 GAP SUB (AND NOT) operation.
BMFORCEINLINE unsigned gap_operation_any_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP SUB operation test.
BMFORCEINLINE unsigned gap_count_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)
 GAP bitcount SUB (AND NOT) operation test.
void bit_block_copy (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Bitblock copy operation.
void bit_block_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock AND operation. Function does not analyse availability of source and destination blocks.
unsigned bit_block_and_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bit_block_and_any (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and tests for any bit. Function does not analyse availability of source blocks.
unsigned bit_block_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bit_block_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bit_block_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bit_block_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bit_block_or_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bit_block_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function ORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
bm::word_tbit_operation_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock AND operation.
bm::id_t bit_operation_and_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation and calculates bitcount of the result.
bm::id_t bit_operation_and_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation test.
bm::id_t bit_operation_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock SUB operation and calculates bitcount of the result.
bm::id_t bit_operation_sub_count_inv (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs inverted bitblock SUB operation and calculates bitcount of the result.
bm::id_t bit_operation_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock test of SUB operation.
bm::id_t bit_operation_or_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation and calculates bitcount of the result.
bm::id_t bit_operation_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation test.
void bit_block_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock OR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbit_operation_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Block OR operation. Makes analysis if block is 0 or FULL.
void bit_block_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock SUB (AND NOT) operation. Function does not analyse availability of source and destination blocks.
bm::word_tbit_operation_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock SUB operation.
void bit_block_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock XOR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbit_operation_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock XOR operation.
bm::id_t bit_operation_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation and calculates bitcount of the result.
bm::id_t bit_operation_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation test.
template<class T >
unsigned bit_count_nonzero_size (const T *blk, unsigned data_size)
 Inspects block for full zero words.
int bit_find_in_block (const bm::word_t *data, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the BIT block.
template<typename T , typename F >
void bit_for_each_4 (T w, F &func)
 Templated algorithm to unpacks octet based word into list of ON bit indexes.
template<typename T , typename F >
void bit_for_each (T w, F &func)
 Templated algorithm to unpacks word into list of ON bit indexes.
template<typename T , typename B >
unsigned bit_list_4 (T w, B *bits)
 Unpacks word into list of ON bit indexes (quad-bit based).
template<typename T , typename B >
unsigned bit_list (T w, B *bits)
 Unpacks word into list of ON bit indexes.
bm::set_representation best_representation (unsigned bit_count, unsigned total_possible_bitcount, unsigned gap_count, unsigned block_size)
 Choose best representation for a bit-block.
template<typename T >
bit_convert_to_arr (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len, unsigned mask=0)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T >
unsigned gap_overhead (const T *length, const T *length_end, const T *glevel_len)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T >
bool improve_gap_levels (const T *length, const T *length_end, T *glevel_len)
 Finds optimal gap blocks lengths.
template<class It1 , class It2 , class BinaryOp , class Encoder >
void bit_recomb (It1 &it1, It2 &it2, BinaryOp &op, Encoder &enc, unsigned block_size=bm::set_block_size)
BMFORCEINLINE void sse2_xor_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 XOR array elements to specified mask dst = *src ^ mask.
BMFORCEINLINE void sse2_andnot_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 Inverts array elements and NOT them to specified mask dst = ~*src & mask.
BMFORCEINLINE void sse2_and_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND array elements against another array dst &= *src.
BMFORCEINLINE void sse2_or_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst |= *src.
BMFORCEINLINE void sse2_xor_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst ^= *src.
BMFORCEINLINE void sse2_sub_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND-NOT (SUB) array elements against another array dst &= ~*src.
BMFORCEINLINE void sse2_set_block (__m128i *BMRESTRICT dst, __m128i *BMRESTRICT dst_end, bm::word_t value)
 SSE2 block memset dst = value.
BMFORCEINLINE void sse2_copy_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 SSE2 block copy dst = *src.
BMFORCEINLINE void sse2_invert_arr (bm::word_t *first, bm::word_t *last)
 Invert array elements dst = ~*dst or dst ^= *dst.
BMFORCEINLINE __m128i sse2_and (__m128i a, __m128i b)
BMFORCEINLINE __m128i sse2_or (__m128i a, __m128i b)
BMFORCEINLINE __m128i sse2_xor (__m128i a, __m128i b)
BMFORCEINLINE __m128i sse2_sub (__m128i a, __m128i b)
bm::id_t sse4_bit_count (const __m128i *block, const __m128i *block_end)
BMFORCEINLINE unsigned op_xor (unsigned a, unsigned b)
BMFORCEINLINE unsigned op_or (unsigned a, unsigned b)
BMFORCEINLINE unsigned op_and (unsigned a, unsigned b)
template<class Func >
bm::id_t sse4_bit_count_op (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, const __m128i *BMRESTRICT mask_block, Func sse2_func)
bm::id_t sse4_bit_block_calc_count_change (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, unsigned *BMRESTRICT bit_count)
bm::id_t sse2_bit_count (const __m128i *block, const __m128i *block_end)
template<class Func >
bm::id_t sse2_bit_count_op (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, const __m128i *BMRESTRICT mask_block, Func sse2_func)
bm::id_t sse2_bit_block_calc_count_change (const __m128i *BMRESTRICT block, const __m128i *BMRESTRICT block_end, unsigned *BMRESTRICT bit_count)
distance_metric operation2metric (set_operation op)
 Convert set operation into compatible distance metric.
void combine_count_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Internal function computes different distance metrics.
unsigned combine_count_and_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk)
 Internal function computes AND distance.
void combine_any_operation_with_block (const bm::word_t *blk, unsigned gap, const bm::word_t *arg_blk, int arg_gap, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Internal function computes different existense of distance metric.
unsigned combine_count_operation_with_block (const bm::word_t *blk, const bm::word_t *arg_blk, distance_metric metric)
unsigned combine_any_operation_with_block (const bm::word_t *blk, unsigned gap, const bm::word_t *arg_blk, int arg_gap, distance_metric metric)
void distance_stage (const distance_metric_descriptor *dmit, const distance_metric_descriptor *dmit_end, bool *is_all_and)
 Staging function for distance operation.
template<class BV >
void distance_operation (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance computing template function.
template<class BV >
unsigned distance_and_operation (const BV &bv1, const BV &bv2)
 Distance AND computing template function.
template<class BV >
void distance_operation_any (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance screening template function.
template<class BV >
bm::id_t count_and (const BV &bv1, const BV &bv2)
 Computes bitcount of AND operation of two bitsets.
template<class BV >
bm::id_t any_and (const BV &bv1, const BV &bv2)
 Computes if there is any bit in AND operation of two bitsets.
template<class BV >
bm::id_t count_xor (const BV &bv1, const BV &bv2)
 Computes bitcount of XOR operation of two bitsets.
template<class BV >
bm::id_t any_xor (const BV &bv1, const BV &bv2)
 Computes if there is any bit in XOR operation of two bitsets.
template<class BV >
bm::id_t count_sub (const BV &bv1, const BV &bv2)
 Computes bitcount of SUB operation of two bitsets.
template<class BV >
bm::id_t any_sub (const BV &bv1, const BV &bv2)
 Computes if there is any bit in SUB operation of two bitsets.
template<class BV >
bm::id_t count_or (const BV &bv1, const BV &bv2)
 Computes bitcount of OR operation of two bitsets.
template<class BV >
bm::id_t any_or (const BV &bv1, const BV &bv2)
 Computes if there is any bit in OR operation of two bitsets.
template<class It >
It block_range_scan (It first, It last, unsigned nblock, unsigned *max_id)
 Internal algorithms scans the input for the block range limit.
template<class BV , class It >
void combine_or (BV &bv, It first, It last)
 OR Combine bitvector and the iterable sequence.
template<class BV , class It >
void combine_xor (BV &bv, It first, It last)
 XOR Combine bitvector and the iterable sequence.
template<class BV , class It >
void combine_sub (BV &bv, It first, It last)
 SUB Combine bitvector and the iterable sequence.
template<class BV , class It >
void combine_and_sorted (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV , class It >
void combine_and (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV >
bm::id_t count_intervals (const BV &bv)
 Compute number of bit intervals (GAPs) in the bitvector.
template<class BV , class It >
void export_array (BV &bv, It first, It last)
 Export bitset from an array of binary data representing the bit vector.
template<typename T , unsigned BPC, unsigned BPS>
void vect_bit_transpose (const T *arr, unsigned arr_size, T tmatrix[BPC][BPS])
 Generic bit-array transposition function T - array type (any int) BPC - bit plain count BPS - bit plain size.
template<typename T , unsigned BPC, unsigned BPS>
void vect_bit_trestore (const T tmatrix[BPC][BPS], T *arr)
 Restore bit array from the transposition matrix T - array type (any int) BPC - bit plain count BPS - bit plain size.
template<typename T , unsigned BPC, unsigned BPS>
void tmatrix_distance (const T tmatrix[BPC][BPS], unsigned distance[BPC][BPC])
 Compute pairwise Row x Row Humming distances on plains(rows) of the transposed bit block.
template<typename T , unsigned BPC, unsigned BPS>
void bit_iblock_make_pcv (const unsigned distance[BPC][BPC], unsigned char *pc_vector)
 !< ibpc limiter
void bit_iblock_pcv_stat (const unsigned char *BMRESTRICT pc_vector, const unsigned char *BMRESTRICT pc_vector_end, unsigned *BMRESTRICT pc_vector_stat)
 Compute number of ibpc codes in pc_vector.
void bit_iblock_reduce (const unsigned tmatrix[bm::set_block_plain_cnt][bm::set_block_plain_size], const unsigned char *BMRESTRICT pc_vector, const unsigned char *BMRESTRICT pc_vector_end, unsigned tmatrix_out[bm::set_block_plain_cnt][bm::set_block_plain_size])
 Matrix reduction based on transformation pc vector.
template<class TMatrix >
void tmatrix_reduce (TMatrix &tmatrix, const unsigned char *pc_vector, const unsigned effective_cols)
 Transposed Matrix reduction based on transformation pc vector.
template<class TMatrix >
void tmatrix_restore (TMatrix &tmatrix, const unsigned char *pc_vector, const unsigned effective_cols)
 Transposed Matrix restore based on transformation pc vector.
template<typename GT >
void gap_2_bitblock (const GT *BMRESTRICT gap_buf, GT *BMRESTRICT block, unsigned block_size)
 Copy GAP block body to bit block with DGap transformation.
template<class TMatrix >
void compute_tmatrix_rstat (const TMatrix &tmatrix, const unsigned char *pc_vector, typename TMatrix::rstat *rstat, unsigned effective_cols)
 Compute t-matrix rows statistics used for compression.
template<typename TM >
unsigned find_effective_columns (const TM &tmatrix)
 Compute effective right column border of the t-matrix.
template<typename T >
bit_scan_fwd (T v)
template<typename T >
min_value (T v1, T v2)
 Get minimum of 2 values.
template<typename T >
ilog2 (T x)
 Fast loop-less function to find LOG2.
template<>
bm::gap_word_t ilog2 (gap_word_t x)
template<typename T >
ilog2_LUT (T x)
 Lookup table based integer LOG2.
template<>
bm::gap_word_t ilog2_LUT< bm::gap_word_t > (bm::gap_word_t x)
 Lookup table based short integer LOG2.
template<class BV >
unsigned serialize (const BV &bv, unsigned char *buf, bm::word_t *temp_block, unsigned serialization_flags=0)
 Saves bitvector into memory.
template<class BV >
unsigned serialize (BV &bv, unsigned char *buf, unsigned serialization_flags=0)
 Saves bitvector into memory. Allocates temporary memory block for bvector.
template<class BV >
unsigned deserialize (BV &bv, const unsigned char *buf, bm::word_t *temp_block=0)
 Bitvector deserialization from memory.

Variables

const unsigned id_max = 0xFFFFFFFF
const unsigned set_block_size = 2048u
const unsigned set_block_shift = 16u
const unsigned set_block_mask = 0xFFFFu
const unsigned set_blkblk_mask = 0xFFFFFFu
const unsigned set_block_plain_size = set_block_size / 32u
const unsigned set_block_plain_cnt = sizeof(bm::word_t) * 8u
const unsigned set_word_shift = 5u
const unsigned set_word_mask = 0x1Fu
const unsigned gap_max_buff_len = 1280
const unsigned gap_length_threashold = set_block_size * 3
const unsigned gap_max_bits = 65536
const unsigned gap_equiv_len
const unsigned gap_levels = 4
const unsigned gap_max_level = bm::gap_levels - 1
const unsigned set_array_size = 256u
const unsigned set_array_shift = 8u
const unsigned set_array_mask = 0xFFu
const unsigned set_total_blocks = (bm::set_array_size * bm::set_array_size)
const unsigned bits_in_block = bm::set_block_size * sizeof(bm::word_t) * 8
const unsigned bits_in_array = bm::bits_in_block * bm::set_array_size
const word_t all_bits_mask = 0xffffffff
const unsigned set_block_size_op = bm::set_block_size
const unsigned char ibpc_uncompr = 0
const unsigned char ibpc_all_zero = 1
 !< plain uncompressed
const unsigned char ibpc_all_one = 2
 !< plain ALL ZERO
const unsigned char ibpc_equiv = 3
 !< plain ALL ONE
const unsigned char ibpc_close = 4
 !< plain is equal to plain M
const unsigned char ibpc_end = 8
 !< plain is close to plain M
const unsigned char set_block_end = 0
 End of serialization.
const unsigned char set_block_1zero = 1
 One all-zero block.
const unsigned char set_block_1one = 2
 One block all-set (1111...).
const unsigned char set_block_8zero = 3
 Up to 256 zero blocks.
const unsigned char set_block_8one = 4
 Up to 256 all-set blocks.
const unsigned char set_block_16zero = 5
 Up to 65536 zero blocks.
const unsigned char set_block_16one = 6
 UP to 65536 all-set blocks.
const unsigned char set_block_32zero = 7
 Up to 4G zero blocks.
const unsigned char set_block_32one = 8
 UP to 4G all-set blocks.
const unsigned char set_block_azero = 9
 All other blocks zero.
const unsigned char set_block_aone = 10
 All other blocks one.
const unsigned char set_block_bit = 11
 Plain bit block.
const unsigned char set_block_sgapbit = 12
 SGAP compressed bitblock.
const unsigned char set_block_sgapgap = 13
 SGAP compressed GAP block.
const unsigned char set_block_gap = 14
 Plain GAP block.
const unsigned char set_block_gapbit = 15
 GAP compressed bitblock.
const unsigned char set_block_arrbit = 16
 List of bits ON.
const unsigned char set_block_bit_interval = 17
 Interval block.
const unsigned char set_block_arrgap = 18
 List of bits ON (GAP block).
const unsigned char set_block_bit_1bit = 19
 Bit block with 1 bit ON.
const unsigned char set_block_gap_egamma = 20
 Gamma compressed GAP block.
const unsigned char set_block_arrgap_egamma = 21
 Gamma compressed delta GAP array.
const unsigned char set_block_bit_0runs = 22
 Bit block with encoded zero intervals.
const unsigned char set_block_arrgap_egamma_inv = 23
 Gamma compressed inverted delta GAP array.
const unsigned char set_block_arrgap_inv = 24
 List of bits OFF (GAP block).

Typedef Documentation

typedef bm::id_t(* bm::bit_operation_count_func_type)(const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT, const bm::word_t *BMRESTRICT)

Definition at line 5197 of file bmfunc.h.

Class for decoding data from memory buffer.

Properly handles aligment issues with integer data types. Converts data to big endian architecture (presumed it was encoded as little endian)

Definition at line 114 of file encoding.h.

typedef gap_word_t*(* bm::gap_operation_func_type)(const gap_word_t *BMRESTRICT, const gap_word_t *BMRESTRICT, gap_word_t *BMRESTRICT, unsigned &)

Definition at line 5191 of file bmfunc.h.

typedef void(* bm::gap_operation_to_bitset_func_type)(unsigned *, const gap_word_t *)

Definition at line 5187 of file bmfunc.h.

typedef unsigned short bm::gap_word_t

Definition at line 68 of file bmconst.h.

typedef unsigned long long bm::id64_t

Definition at line 38 of file bmconst.h.

typedef unsigned int bm::id_t

Definition at line 42 of file bmconst.h.

typedef unsigned short bm::short_t

Definition at line 44 of file bmconst.h.

typedef unsigned int bm::word_t
Examples:
sample6.cpp.

Definition at line 43 of file bmconst.h.

Definition at line 101 of file bmconst.h.


Enumeration Type Documentation

Byte orders recognized by the library.

Enumerator:
BigEndian 
LittleEndian 

Definition at line 397 of file bmfunc.h.

Bit operations enumeration.

Enumerator:
BM_AND 
BM_OR 
BM_SUB 
BM_XOR 

Definition at line 274 of file bmfunc.h.

Enumerator:
BM_HM_DEFAULT 
BM_HM_RESIZE 

resized vector

BM_HM_ID_LIST 

id list stored

BM_HM_NO_BO 

no byte-order

BM_HM_NO_GAPL 

no GAP levels

Definition at line 96 of file bmserial.h.

Nomenclature of set operations.

Enumerator:
set_AND 
set_OR 
set_SUB 
set_XOR 
set_ASSIGN 
set_COUNT 
set_COUNT_AND 
set_COUNT_XOR 
set_COUNT_OR 
set_COUNT_SUB_AB 
set_COUNT_SUB_BA 
set_COUNT_A 
set_COUNT_B 
set_END 

Definition at line 245 of file bmfunc.h.

set representation variants

Enumerator:
set_bitset 

Simple bitset.

set_gap 

GAP-RLE compression.

set_array1 

array of set 1 values

set_array0 

array of 0 values

Definition at line 126 of file bmconst.h.


Function Documentation

BMFORCEINLINE unsigned bm::and_op ( unsigned  v1,
unsigned  v2 
)
void bm::bit_count_change32 ( const bm::word_t block,
const bm::word_t block_end,
unsigned *  bit_count,
unsigned *  gap_count 
) [inline]

Function calculates number of times when bit value changed

Definition at line 2802 of file bmfunc.h.

References BM_ASSERT, and BM_INCWORD_BITCOUNT.

Referenced by bit_block_calc_count_change(), and compute_tmatrix_rstat().

void bm::bit_iblock_pcv_stat ( const unsigned char *BMRESTRICT  pc_vector,
const unsigned char *BMRESTRICT  pc_vector_end,
unsigned *BMRESTRICT  pc_vector_stat 
) [inline]

Compute number of ibpc codes in pc_vector.

Definition at line 478 of file bmtrans.h.

References BM_ASSERT.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::compute_distance_matrix().

void bm::bit_iblock_reduce ( const unsigned  tmatrix[bm::set_block_plain_cnt][bm::set_block_plain_size],
const unsigned char *BMRESTRICT  pc_vector,
const unsigned char *BMRESTRICT  pc_vector_end,
unsigned  tmatrix_out[bm::set_block_plain_cnt][bm::set_block_plain_size] 
) [inline]

Matrix reduction based on transformation pc vector.

Definition at line 498 of file bmtrans.h.

References BM_ASSERT, ibpc_all_one, ibpc_all_zero, ibpc_close, ibpc_equiv, and ibpc_uncompr.

template<class It1 , class It2 , class BinaryOp , class Encoder >
void bm::bit_recomb ( It1 &  it1,
It2 &  it2,
BinaryOp &  op,
Encoder &  enc,
unsigned  block_size = bm::set_block_size 
) [inline]
template<typename T >
T bm::bit_scan_fwd ( v  )  [inline]

Definition at line 58 of file bmutil.h.

Referenced by bm::bit_in< TDecoder >::gamma().

template<class It >
It bm::block_range_scan ( It  first,
It  last,
unsigned  nblock,
unsigned *  max_id 
) [inline]

Internal algorithms scans the input for the block range limit.

Definition at line 1111 of file bmalgo_impl.h.

References BM_ASSERT, id_max, and set_block_shift.

Referenced by combine_or(), combine_sub(), and combine_xor().

template<class T , class F >
F bm::bmfor_each ( first,
last,
f 
) [inline]

Special BM optimized analog of STL for_each

Definition at line 646 of file bmfunc.h.

unsigned bm::combine_any_operation_with_block ( const bm::word_t blk,
unsigned  gap,
const bm::word_t arg_blk,
int  arg_gap,
distance_metric  metric 
) [inline]

Convenience internal function to compute combine any for one metric

Definition at line 638 of file bmalgo_impl.h.

References combine_any_operation_with_block(), and bm::distance_metric_descriptor::result.

unsigned bm::combine_count_and_operation_with_block ( const bm::word_t blk,
const bm::word_t arg_blk 
) [inline]

Internal function computes AND distance.

Definition at line 329 of file bmalgo_impl.h.

References bit_operation_and_count(), BM_IS_GAP, BMGAP_PTR, gap_bitset_and_count(), gap_count_and(), and set_block_size.

Referenced by distance_and_operation().

unsigned bm::combine_count_operation_with_block ( const bm::word_t blk,
const bm::word_t arg_blk,
distance_metric  metric 
) [inline]

Convenience internal function to compute combine count for one metric

Definition at line 619 of file bmalgo_impl.h.

References combine_count_operation_with_block(), and bm::distance_metric_descriptor::result.

template<class TMatrix >
void bm::compute_tmatrix_rstat ( const TMatrix &  tmatrix,
const unsigned char *  pc_vector,
typename TMatrix::rstat *  rstat,
unsigned  effective_cols 
) [inline]

Compute t-matrix rows statistics used for compression.

Parameters:
tmatrix - transposed matrix
pc_vector - row content vector
rstat - output row vector

Definition at line 687 of file bmtrans.h.

References best_representation(), bit_count_change32(), BM_ASSERT, ibpc_all_one, ibpc_all_zero, ibpc_close, ibpc_equiv, ibpc_uncompr, and set_bitset.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::reduce().

template<typename T >
void bm::dgap_2_gap ( const T *  dgap_buf,
T *  gap_buf,
gap_header = 0 
) [inline]

Convert D-GAP buffer into GAP buffer.

GAP representation is GAP[N] = DGAP[N] + DGAP[N-1]

Parameters:
dgap_buf - Delta-GAP buffer
gap_buf - GAP buffer

Definition at line 826 of file bmfunc.h.

void bm::distance_stage ( const distance_metric_descriptor *  dmit,
const distance_metric_descriptor *  dmit_end,
bool *  is_all_and 
) [inline]

Staging function for distance operation.

Returns:
temp block allocated (or NULL)

Definition at line 659 of file bmalgo_impl.h.

References COUNT_AND.

Referenced by distance_operation(), and distance_operation_any().

template<typename TM >
unsigned bm::find_effective_columns ( const TM &  tmatrix  )  [inline]

Compute effective right column border of the t-matrix.

Definition at line 745 of file bmtrans.h.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::transpose().

template<class T , class F >
void bm::for_each_block ( T ***  root,
unsigned  size1,
F &  f 
) [inline]

For each block executes supplied function.

Definition at line 617 of file bmfunc.h.

References set_array_size.

Referenced by count_intervals(), and bm::bvector< Alloc >::invert().

template<class T , class Func >
void bm::for_each_dgap ( const T *  gap_buf,
Func &  func 
) [inline]

D-GAP block for_each algorithm

D-Gap Functor is called for each element but last one.

Parameters:
gap_buf - GAP buffer

Definition at line 761 of file bmfunc.h.

Referenced by bm::serializer< BV >::gamma_gap_block().

template<class T , class F >
void bm::for_each_nzblock ( T ***  root,
unsigned  size1,
F &  f 
) [inline]

For each non-zero block executes supplied function.

Definition at line 528 of file bmfunc.h.

References set_array_size.

Referenced by bm::bvector< Alloc >::count_blocks(), bm::bvector< Alloc >::optimize(), and bm::bvector< Alloc >::set_gap_levels().

template<class T , class F >
void bm::for_each_nzblock2 ( T ***  root,
unsigned  size1,
F &  f 
) [inline]

For each non-zero block executes supplied function.

Definition at line 564 of file bmfunc.h.

References set_array_size.

Referenced by bm::bvector< Alloc >::count().

template<class T , class F >
bool bm::for_each_nzblock_if ( T ***  root,
unsigned  size1,
F &  f 
) [inline]

For each non-zero block executes supplied function-predicate. Function returns if function-predicate returns true

Definition at line 593 of file bmfunc.h.

References set_array_size.

Referenced by bm::bvector< Alloc >::any().

template<typename GT >
void bm::gap_2_bitblock ( const GT *BMRESTRICT  gap_buf,
GT *BMRESTRICT  block,
unsigned  block_size 
) [inline]

Copy GAP block body to bit block with DGap transformation.

Definition at line 660 of file bmtrans.h.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::transpose().

template<typename T >
T* bm::gap_2_dgap ( const T *  gap_buf,
T *  dgap_buf,
bool  copy_head = true 
) [inline]

Convert GAP buffer into D-GAP buffer.

Delta GAP representation is DGAP[N] = GAP[N] - GAP[N-1]

Parameters:
gap_buf - GAP buffer
dgap_buf - Delta-GAP buffer
copy_head - flag to copy GAP header

Definition at line 802 of file bmfunc.h.

References bm::d_copy_func< T >::dgap_buf_.

template<typename T >
unsigned bm::gap_bfind ( const T *  buf,
unsigned  pos,
unsigned *  is_set 
) [inline]

Definition at line 461 of file bmfunc.h.

References BM_ASSERT, and gap_max_bits.

Referenced by gap_bit_count_range(), gap_find_in_block(), and gap_set_value().

template<typename T >
unsigned bm::gap_bit_count_range ( const T *  buf,
left,
right 
) [inline]

Counts 1 bits in GAP buffer in the closed [left, right] diapason.

Parameters:
buf - GAP buffer pointer.
left - leftmost bit index to start from
right- rightmost bit index
Returns:
Number of non-zero bits.

Definition at line 714 of file bmfunc.h.

References BM_ASSERT, and gap_bfind().

Referenced by bm::bvector< Alloc >::count_range().

template<typename T , class F >
void bm::gap_buff_op ( T *BMRESTRICT  dest,
const T *BMRESTRICT  vect1,
unsigned  vect1_mask,
const T *BMRESTRICT  vect2,
unsigned  vect2_mask,
F &  f,
unsigned &  dlen 
) [inline]

Abstract operation for GAP buffers. Receives functor F as a template argument.

Parameters:
dest - destination memory buffer.
vect1 - operand 1 GAP encoded buffer.
vect1_mask - XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector)
vect2 - operand 2 GAP encoded buffer.
vect2_mask - same as vect1_mask
f - operation functor.
dlen - destination length after the operation
Note:
Internal function.

Definition at line 933 of file bmfunc.h.

References gap_max_bits.

Referenced by gap_operation_and(), gap_operation_or(), gap_operation_sub(), and gap_operation_xor().

template<>
bm::gap_word_t bm::ilog2 ( gap_word_t  x  )  [inline]

Definition at line 90 of file bmutil.h.

template<typename T >
T bm::ilog2 ( x  )  [inline]

Fast loop-less function to find LOG2.

Definition at line 78 of file bmutil.h.

template<typename T >
T bm::ilog2_LUT ( x  )  [inline]

Lookup table based integer LOG2.

Definition at line 121 of file bmutil.h.

Referenced by bm::bit_out< TEncoder >::gamma().

template<>
bm::gap_word_t bm::ilog2_LUT< bm::gap_word_t > ( bm::gap_word_t  x  )  [inline]

Lookup table based short integer LOG2.

bool bm::is_const_set_operation ( set_operation  op  )  [inline]

Returns true if set operation is constant (bitcount).

Definition at line 266 of file bmfunc.h.

References set_COUNT.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize(), and operation2metric().

template<typename T >
T bm::min_value ( v1,
v2 
) [inline]

Get minimum of 2 values.

Definition at line 68 of file bmutil.h.

Referenced by distance_and_operation().

BMFORCEINLINE unsigned bm::op_and ( unsigned  a,
unsigned  b 
)

Definition at line 108 of file bmsse4.h.

BMFORCEINLINE unsigned bm::op_or ( unsigned  a,
unsigned  b 
)

Definition at line 99 of file bmsse4.h.

BMFORCEINLINE unsigned bm::op_xor ( unsigned  a,
unsigned  b 
)

Definition at line 89 of file bmsse4.h.

template<class Alloc >
bvector<Alloc> bm::operator& ( const bvector< Alloc > &  v1,
const bvector< Alloc > &  v2 
) [inline]

Definition at line 1561 of file bm.h.

References bm::bvector< Alloc >::bit_and().

template<class Alloc >
bvector<Alloc> bm::operator- ( const bvector< Alloc > &  v1,
const bvector< Alloc > &  v2 
) [inline]

Definition at line 1606 of file bm.h.

References bm::bvector< Alloc >::bit_sub().

template<class Alloc >
bvector<Alloc> bm::operator^ ( const bvector< Alloc > &  v1,
const bvector< Alloc > &  v2 
) [inline]

Definition at line 1591 of file bm.h.

References bm::bvector< Alloc >::bit_xor().

template<class Alloc >
bvector<Alloc> bm::operator| ( const bvector< Alloc > &  v1,
const bvector< Alloc > &  v2 
) [inline]

Definition at line 1576 of file bm.h.

References bm::bvector< Alloc >::bit_or().

BMFORCEINLINE unsigned bm::or_op ( unsigned  v1,
unsigned  v2 
)

GAP or functor.

Definition at line 3157 of file bmfunc.h.

Referenced by gap_count_or().

int bm::parallel_popcnt_32 ( unsigned int  n  )  [inline]

Definition at line 179 of file bmfunc.h.

bm::operation bm::setop2op ( bm::set_operation  op  )  [inline]

Convert set operation to operation.

Definition at line 286 of file bmfunc.h.

References BM_ASSERT, set_AND, set_OR, set_SUB, and set_XOR.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize().

BMFORCEINLINE __m128i bm::sse2_and ( __m128i  a,
__m128i  b 
)

Definition at line 384 of file bmsse_util.h.

bm::id_t bm::sse2_bit_block_calc_count_change ( const __m128i *BMRESTRICT  block,
const __m128i *BMRESTRICT  block_end,
unsigned *BMRESTRICT  bit_count 
) [inline]

Definition at line 237 of file bmsse2.h.

References BM_ALIGN16ATTR, and BM_INCWORD_BITCOUNT.

Referenced by bit_block_calc_count_change().

template<class Func >
bm::id_t bm::sse2_bit_count_op ( const __m128i *BMRESTRICT  block,
const __m128i *BMRESTRICT  block_end,
const __m128i *BMRESTRICT  mask_block,
Func  sse2_func 
) [inline]

Definition at line 125 of file bmsse2.h.

References BM_ALIGN16ATTR.

BMFORCEINLINE __m128i bm::sse2_or ( __m128i  a,
__m128i  b 
)

Definition at line 390 of file bmsse_util.h.

BMFORCEINLINE __m128i bm::sse2_sub ( __m128i  a,
__m128i  b 
)

Definition at line 403 of file bmsse_util.h.

BMFORCEINLINE __m128i bm::sse2_xor ( __m128i  a,
__m128i  b 
)

Definition at line 397 of file bmsse_util.h.

template<class Func >
bm::id_t bm::sse4_bit_count_op ( const __m128i *BMRESTRICT  block,
const __m128i *BMRESTRICT  block_end,
const __m128i *BMRESTRICT  mask_block,
Func  sse2_func 
) [inline]

Definition at line 115 of file bmsse4.h.

BMFORCEINLINE unsigned bm::sub_op ( unsigned  v1,
unsigned  v2 
)

GAP or functor.

Definition at line 3163 of file bmfunc.h.

Referenced by gap_count_sub().

template<class T >
T bm::sum_arr ( T *  first,
T *  last 
) [inline]

Computes SUM of all elements of the sequence

Definition at line 658 of file bmfunc.h.

template<class TMatrix >
void bm::tmatrix_reduce ( TMatrix &  tmatrix,
const unsigned char *  pc_vector,
const unsigned  effective_cols 
) [inline]

Transposed Matrix reduction based on transformation pc vector.

Definition at line 554 of file bmtrans.h.

References BM_ASSERT, ibpc_all_one, ibpc_all_zero, ibpc_close, ibpc_equiv, and ibpc_uncompr.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::reduce().

template<class TMatrix >
void bm::tmatrix_restore ( TMatrix &  tmatrix,
const unsigned char *  pc_vector,
const unsigned  effective_cols 
) [inline]

Transposed Matrix restore based on transformation pc vector.

Definition at line 601 of file bmtrans.h.

References BM_ASSERT, ibpc_all_one, ibpc_all_zero, ibpc_close, ibpc_equiv, and ibpc_uncompr.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::restore().

template<typename T , unsigned BPC, unsigned BPS>
void bm::vect_bit_transpose ( const T *  arr,
unsigned  arr_size,
tmatrix[BPC][BPS] 
) [inline]

Generic bit-array transposition function T - array type (any int) BPC - bit plain count BPS - bit plain size.

Parameters:
arr - source array start
arr_size - source array size
tmatrix - destination bit matrix

Definition at line 294 of file bmtrans.h.

References BM_ASSERT.

template<typename T , unsigned BPC, unsigned BPS>
void bm::vect_bit_trestore ( const T  tmatrix[BPC][BPS],
T *  arr 
) [inline]

Restore bit array from the transposition matrix T - array type (any int) BPC - bit plain count BPS - bit plain size.

Parameters:
arr - dest array
tmatrix - source bit-slice matrix

Definition at line 327 of file bmtrans.h.

BMFORCEINLINE unsigned bm::xor_op ( unsigned  v1,
unsigned  v2 
)

GAP xor functor.

Definition at line 3150 of file bmfunc.h.

Referenced by gap_count_xor(), gap_operation_any_xor(), and gap_operation_xor().

template<typename W >
void bm::xor_swap ( W &  x,
W &  y 
) [inline]

XOR swap two scalar variables.

Definition at line 321 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::bvector< Alloc >::swap().


Variable Documentation

const word_t bm::all_bits_mask = 0xffffffff

Definition at line 102 of file bmconst.h.

Referenced by is_bits_one().

Definition at line 71 of file bmconst.h.

Referenced by bm::deserializer< BV, DEC >::deserialize_gap().

const unsigned bm::gap_max_buff_len = 1280

Definition at line 70 of file bmconst.h.

Referenced by combine_any_operation_with_block(), and improve_gap_levels().

const unsigned bm::gap_max_level = bm::gap_levels - 1

Definition at line 76 of file bmconst.h.

const unsigned char bm::ibpc_all_one = 2

!< plain ALL ZERO

Definition at line 390 of file bmtrans.h.

Referenced by bit_iblock_make_pcv(), bit_iblock_reduce(), compute_tmatrix_rstat(), tmatrix_reduce(), and tmatrix_restore().

const unsigned char bm::ibpc_all_zero = 1

!< plain uncompressed

Definition at line 389 of file bmtrans.h.

Referenced by bit_iblock_make_pcv(), bit_iblock_reduce(), compute_tmatrix_rstat(), tmatrix_reduce(), and tmatrix_restore().

const unsigned char bm::ibpc_close = 4

!< plain is equal to plain M

Definition at line 392 of file bmtrans.h.

Referenced by bit_iblock_make_pcv(), bit_iblock_reduce(), compute_tmatrix_rstat(), tmatrix_reduce(), and tmatrix_restore().

const unsigned char bm::ibpc_end = 8

!< plain is close to plain M

Definition at line 394 of file bmtrans.h.

const unsigned char bm::ibpc_equiv = 3

!< plain ALL ONE

Definition at line 391 of file bmtrans.h.

Referenced by bit_iblock_make_pcv(), bit_iblock_reduce(), compute_tmatrix_rstat(), tmatrix_reduce(), and tmatrix_restore().

const unsigned char bm::ibpc_uncompr = 0
const unsigned bm::set_array_mask = 0xFFu

Definition at line 83 of file bmconst.h.

Referenced by bm::bvector< Alloc >::enumerator::go_up().

const unsigned bm::set_blkblk_mask = 0xFFFFFFu

Definition at line 55 of file bmconst.h.

const unsigned char bm::set_block_16one = 6
const unsigned char bm::set_block_16zero = 5
const unsigned char bm::set_block_1one = 2
const unsigned char bm::set_block_1zero = 1
const unsigned char bm::set_block_32one = 8
const unsigned char bm::set_block_32zero = 7
const unsigned char bm::set_block_8one = 4
const unsigned char bm::set_block_8zero = 3
const unsigned char bm::set_block_aone = 10
const unsigned char bm::set_block_azero = 9
const unsigned char bm::set_block_end = 0
const unsigned bm::set_block_plain_cnt = sizeof(bm::word_t) * 8u

Definition at line 58 of file bmconst.h.

const unsigned bm::set_block_plain_size = set_block_size / 32u

Definition at line 57 of file bmconst.h.

const unsigned char bm::set_block_sgapbit = 12

SGAP compressed bitblock.

Definition at line 79 of file bmserial.h.

const unsigned char bm::set_block_sgapgap = 13

SGAP compressed GAP block.

Definition at line 80 of file bmserial.h.

Definition at line 105 of file bmconst.h.

Referenced by bm::bvector< Alloc >::compare().


Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00187.map0000644000175000017500000000017211365042645013246 0ustar tlktlk bm3.7.0/doc/html/a00259.md50000644000175000017500000000004011365042652013146 0ustar tlktlkfd7009427ca5aa63e7a1715b0970796bbm3.7.0/doc/html/a00183.map0000644000175000017500000000022111365042645013235 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_0x77.html0000644000175000017500000000773011365042652016716 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- w -

  • word_bitcount() : bm
  • word_t : bm
  • wordcmp() : bm
  • wordcmp0() : bm
  • wordop_t : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/tab_b.gif0000644000175000017500000000004311365042626013461 0ustar tlktlkGIF89a€„°Ç,D;bm3.7.0/doc/html/a00239.md50000644000175000017500000000004011365042650013142 0ustar tlktlk4e0c179dea03b611ec0d13930a4c9f77bm3.7.0/doc/html/a00220.map0000644000175000017500000000017511365042647013237 0ustar tlktlk bm3.7.0/doc/html/a00130.md50000644000175000017500000000004011365042631013127 0ustar tlktlk98837ebd2af5e105691c785b0161ebf4bm3.7.0/doc/html/namespacemembers_0x78.html0000644000175000017500000000743111365042652016715 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- x -

  • xor_bit_block() : bm
  • xor_op() : bm
  • xor_swap() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00156.map0000644000175000017500000000200511365042637013240 0ustar tlktlk bm3.7.0/doc/html/a00186.png0000644000175000017500000000434611365042645013263 0ustar tlktlk‰PNG  IHDR°(^‚ppbKGDÿÿÿ ½§“›IDATxœíœ{HÓßÇß3×4sYÙef¨%™H ­Y1£oE¡e70‚ ,*ŠˆŠ (º aEÁDZVPË,i&I£¢ì¦âÌÕš–”ÍKÛû÷Ç÷ç‡ïtÓY-Î xžóÙyžçøþÌç|vœŒ$!(A¿; 7 !`A@ÜÙP[[‹òòòß‹@àµZ¨¨(W#;¡×ë @4Ñþ¸¦×ë;Ë•]Þ;'2™Ì­]ÔÀ‚€FXÐ !`A@#,h„€ÇÇhÝåíÛ·(--ÅÚµkýNÏü|þügÏžÅöíÛû4¡×ëQ]]ív,..:gΜÕjí2>nÜ8¤§§÷uˆ€ÂÂB¨T*L:õ—øë ½~®¬¬Dvv¶?b鱟¦¦&œ;wNê¯[·Î£@üEo|Øl6ÔÕÕ¡®®z½z½^ê744Nœ8ââbÉÞÑl6›?ÓðŠÁ`@YYÙ/ó×zýü'W¯^Iý7n`ãÆ}ê³7>6mÚ$ý¼nÝ:p{s®Y³¦Ïÿ²:~©N'233¡T*1|øp~üˆ… t:¬V+t:L&“ÏØKJJ””…Bøøxjjj0{öl—ku:ÊËË»í£µµÕ§ÿžÐ±®z½111 ÃÚµkáp8·nÝBBBú÷ï)S¦àáÇÒk=å yyyˆŽŽFhh(–,Y‚¦¦&iìÙ³gÐh4 Áøñã‘›› °Z­˜;w..^¼ˆˆˆ¼xñâ—¬„§³ÝåêÕ«”Édܲe ›››i2™8hÐ  Z,q÷îÝt:×ÃðpÂ/¯vçÃétòúõë\°`ãããyìØ1644øŒÁ›€'OžÌÅ‹»´œœi]ëëë¥ëSRRh0xôèQ.\¸P²·µµñСClnnöšïöíÛ¹|ùr—±ÄÄDfee1//S¦LqËÌÌäæÍ›i6› €ïß¿÷˜ãýû÷¹jÕ*Ž3†;wîdmm­ÏuéŒ'û¥މ‰\.—ú“&MBqq±Ô ðï …Bàà`©ïO??K]]Æïb›0aÌfóOÍSZZŠõë×câĉؼy3´ZíOçæŽÌÌL·5ð‡*•J²uø«©©qÉI.—cÇŽ¼çk·Û‘à26qâDiÎÊÊJDGGKcv»óçÏaÔ¨QóP«ÕP«Õ°Ùl8{ö,fÍš…¤¤$øZŸøEÀwÆV«C† ñÇÔ}êG©Tâùóç.¶†† 4ÈíõÍÍÍnír¹ …Ÿ>}Bcc#~üøár£ýJÂÃû<~+((€V«õšoHHH—×u¬·R©ÄŒ3pãÆ iÌn·C&“Áf³uûfu8 ‰àà` 8°'éuÁ/›¸šš\»v ðõëWœ>}Zº;†GÁh4zìûËOsæÌAQQªªªü»ÌÏÏGjj*är9šššÐØØ(//ÇÛ·oÝΣV«QQQ ??±±±Ø»w/Þ¿ßãØàû÷ïøòå‹KûïÆÊSNW®\‘ÄX^^Ž•+W¢_¿~^óÕjµÈË˃Åb<}úwïÞ¤¦¦Âd2áåË—R\ÉÉɸtéR·ò())N§ÃôéÓA¥¥¥¸xñbÖ¤ kŠžÔÀÓ¦Mc\\SRR8räHΛ7mmmR­ÖÁ›7o\jÕŠŠ —xÓ¦MT«ÕnûÞüt®'OžLFÇúŒÏž=Œˆˆàœ9s8tèPnذ$ép8¨Ñh8vìX.Z´ˆ†Fª½ù¨¯¯çž={˜àÓ¿·nu+Š.ëJ’3gΤÁ`Ö-22’Z­–J¥’'Ožô™¯Óédzz:#""8kÖ,FEEqÞ¼yÌÊÊ"I;vŒJ¥’Z­–£Gæ²eËèp8h6›Ù¯_?ù ©>ïØûôôÕ&®»ÝÎÛ·oóÑ£G=‹°~m6›Ô·Z­4lllìÖœÕÕÕ4|õê•‹½½½&“‰&“©ËâwÇÇ?ºå¿/xýú5F£Û “§|IòéÓ§,**bSSS—±ºº:F>þ¼Ûqøk < XöÿA‰ÜÜ\¤§§ÿÿ‘a±X¼nò‘””ô #ô™L½^+V¸ØÿŠOâ BitMagic: bm::_copyright< T > Struct Template Reference

bm::_copyright< T > Struct Template Reference

Internal structure. More...

#include <bmfunc.h>

Static Public Attributes

static const char _p []

Detailed Description

template<bool T>
struct bm::_copyright< T >

Internal structure.

Copyright information.

Definition at line 385 of file bmfunc.h.


Field Documentation

template<bool T>
const char bm::_copyright< T >::_p [inline, static]
Initial value:
 
    "BitMagic C++ Library. v.3.7.0 (c) 2002-2010 Anatoliy Kuznetsov."

Definition at line 387 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func.html0000644000175000017500000001166411365042644015647 0ustar tlktlk BitMagic: Data Fields - Functions
 

- a -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00256.map0000644000175000017500000000020511365042652013236 0ustar tlktlk bm3.7.0/doc/html/a00255.md50000644000175000017500000000004011365042652013142 0ustar tlktlk62d41dae7d14c00c166476a3c76eb3d5bm3.7.0/doc/html/a00220.md50000644000175000017500000000004011365042646013135 0ustar tlktlk50d15f8c5a8b1c89c9b6fb71332b6d2cbm3.7.0/doc/html/a00208.png0000644000175000017500000000527611365042646013262 0ustar tlktlk‰PNG  IHDRÕ(iL¿DbKGDÿÿÿ ½§“ sIDATxœíL[UÇ¿ÅB¥Hite s®[ c’…Å:»_H‰›5¦dÁ,þ@Gœqɦs‰™†EÍÔ â`Êœ nË6CY`Óâb4†9˜Ü Ç€ƒµ°µß÷^nZ¤¿ØÝô}=Ÿä$œûœó=Ï}èÓÓûpoQ‘$bÄýÝÿoˆ¤F$•@ 0êP‡Ãq+ýþ'ÉÌÌ„Ùl>ÈM4Ñ"´âââ¿äNÈ ìv;Š‹‹Ã þµ<óÌ33×Tˆ¤F$•@ 0"©…I%(ŒH*@a–ԣåìÙ³hiiAii©raÙ³gúûû*• iiiX»v-233£š_YY‰ëׯËóõz= 1þü˜}q»Ý¨©©Áë¯¿Ž±±1|ôÑGغukÌ:S„‹càZ7á|ù;ü´ÛíèêêšÑ¶páBØl¶[æ  ÐNÕÑÑ={ö(!‘?üLJ$Iøã?àp8`2™PWWÕü;v ­­ ’$áüùóØ·o²²²ÐÖÖ³/ÃÃÃøüóÏW¯^EuuuÌ„‹càZðÜsÏ…|!ÝlÂù2Ýv+èïï‡$I$ v»v»]î ÜR_ ìv»=”9ˆÃ‡Ól6G5öF1™Lüú믃ŽíÛ·‰‰‰”$)â|FC—Ëtlýúõܰaƒ¢~ΆXâ8wî\¶··ßd¢ãŸäKYYËÊÊnÉZÅÅÅ3ÞQ¡Ø5•ßïÇ+¯¼N‡»îº ï½÷```V«»víBFFÒÓÓñÅ_àµ×^Czz: ¾ùæYçƒ>@IIIÈþL<ýôÓÈÎÎÆþýû¿üò , n¿ýv,Z´(â.–––FèëëÃ#<‚ÚÚZèõz|ÿý÷ÈËË o³ÙÐÚÚŠK—.áÑG•ÏsÙ²eAçl·Û±`Á$%%¡´´>ŸoÖq \Ëf³¡¯¯6› .—+¬žËåByy96mÚN‡9sæ`×®]²ýĉÈÉÉF£Á}÷݇C‡ɶ7ÞxéééÐh4ÈË˃$I} ´…ÓŸMŒÆÇÇ#Æ/”Ò I¨,DŒ;•J¥â«¯¾Ê±±1º\.¦¤¤Ðáp°··—qqq|óÍ7é÷ûùé§Ÿ+++é÷ûùþûïÓh4ÊZ‡âDz?ÓNE’/¾ø"7lØÀÑÑQ îÞ½›^¯—MMMÔétüé§ŸHNîT[¶laMM ÷îÝËŠŠ Fvvv’${zz˜˜˜ÈÇœ'OžäÏ?ÿÌÔÔÔ µrrrxìØ1vuu1))‰$ÙÛÛËÛn»Mþ9!!7näøø8Ï;G½^ÏÆÆÆYÇ1p-·ÛMƒÁÀãÇsbb"¢¦Z­fEEÇÆÆØÒÒ””=z”þù'“““ùå—_ÒëõòàÁƒÔjµìèè`CC322ØÙÙÉ‘‘ñùçŸ'ɰ¾ÚÂéÇ£ßÿ›7o¦Éd {®dt;U}}=sssùÕW_ÑëõFÔ ÅMß©ôz=*++¡Õj±bÅ ”——Ë;„ßïÇ–-[ R©`µZ¡V«±yóf¹åÊY§¨¨/¿ürÈ~(áõzqäÈ ¼ôÒKÐh4xøá‡QZZt×}kk+ÐØØˆÓ§OÃãñàÌ™3²Ýãñ`÷îÝX¾|9f‰‰ ìØ± ˜?>î¿ÿ~ Gœ.Žcâââ ×ëQS«ÕbçÎÐjµ°X,(//Gmm-<ˆ¥K—¢´´=ö ±ÿ~x½^“ïêÉÉɨ««“wÍh} §)F$ÑÐЀõë×cݺuÈÈÈÀÉ“'#žk4<ñÄøä“OÐÔԣш­[·¢§§Gm@¡ê,X° (¨ÙÙÙhjj’ûIII&+njµZî+Á… `0ÐÝÝŽŽÜsÏ=²Íãñ °°Pî¿ýöÛX±b…ܯ««Ã³Ï>+Wãââ‘‘qÃ> ùçhÏ3Rgý÷ÞôæææfH’„E‹5™LèééÁ¶mÛÐÜÜŒ‡zz½ضmôz}Ôë†ÓŸb¦µ´´`ãÆÈÊÊBEEòóó{La6›a6›Ñßßšš¬Y³999øî»ïnX[±jê9E__î¼óN¥äÃ222§Ó‰¼¼<èt:¬\¹ÝÝÝAí³Ï> 9Ù²ep»Ý9ÆÆÆõ?›Çéš—/_Frr2t:Ý_lHIIITUUa``‡^¯O>ùdLë†ÓG||<4 ._¾ŒÁÁAùO 7ŸÏ’P«Õ¸ãŽ;ÑT,©º»»qäÈÀ•+W°wïÞ Ý!ZN:§Ó²L–¯‡††àv»ÑÖÖ†¢¢"deeaݺu°Z­p¹\òǹ«W¯"77玎bhhCCC$ ï¼ó²³³g|ŽÇðð0L~t<{ölÌç-JÅ1I’äÁèè(ª««aµZQPP€cÇŽáܹs& õõõ°Z­Ø¹s'Ö¬YµZx%%%¸xñbLë†Ó‡ÙlF{{;Þ}÷]Ô××Ãh4â­·ÞÂ… fqö3sâÄ Øl6,_¾$ÑÒÒ‚ÚÚZeÄC]„!ÆBŃ>È… rÕªUœ3g×®]ˉ‰ ööö2p™ÎÎNùB–$ÛÛÛy÷ÝwËýM›6••§÷M&SÐCb©©©,++£Ûí–ÇTUUQ§Ó1??ŸsçÎåSO=EŸÏGr²P8_­VÓb±ðÌ™3$' S’ôù|´X,œ7o‹ŠŠh±Xh±X"*¦‡võêÕt8³ŽcàZ$¹téRZ,¶µµEÔœ7o/^Ì•+WÒ`0põêÕôx<$ÉíÛ·S¯×³  €©©©|á…ä8dffrÉ’%ÌÏÏgJJ «««I2¬/Óm¡ôc‰ÑÅ‹¹}ûv.^¼8ì¹’Ñ*W­ZE‡ÃÁk×®EÔ E¨B…"I5…Çãass3O:»‡ #IN'ýõ×Öºví].].WÐ/Áç󱿿ŸdpRÝ(3Å1p-’ìëë£Óéäàà`X­Ã‡377—ãããüá‡ØÚÚJ¿ß4¦««‹N§“¿ýö[Ðq¯×Ëü‘¼téRT¾L·…Ó•ëׯßÐ|¥uB%•Šœù{ÿT*•xò7J&&&pôèQ”””U2§ÓÛÛ¶è°dÉäääÄ´v$ÍóçÏãÀ³ºcDž©'ív{ÐqŪÿfNŸ>ÊÊJTUU…´´´v­VóÚ‘4ÇÇÇa4cÖ̱S ³$ÔN%ýF$•@ 0"©…I%(ŒH*@aDR  #’J PšP·`àðåöOo1ýƒ‚o¿ý6”I ü—™¾Å+ä`vˆk*@aDR  #’J P˜ÿê:`"bQIEND®B`‚bm3.7.0/doc/html/a00196.map0000644000175000017500000000022511365042645013245 0ustar tlktlk bm3.7.0/doc/html/a00207.png0000644000175000017500000000431011365042646013245 0ustar tlktlk‰PNG  IHDR¥(Ÿ:ÜbKGDÿÿÿ ½§“}IDATxœíœyH”_Ç¿“3ci3jjiˆZ®4Š‘†¥†ú‡íV$i‰bA¤X$’T*d„E´Ò8•M›Yai‹ eæ†Û”JšŽËœ÷Ÿ×‡&gQsøu?ðÀÜ{îsî9×ï>sÒ†J¥šÖZÂX~t¢ïÙ·T*ÕeÖ@¡PÇ£””¢²²2²²²"™LFJ¥’,X@§N"µZM—/_&”™™IjµšÎ;Gîî¢¢"ºxñ¢ÖvMM ™››“\.§ááaÊÉÉ!”““£7¾¶¶6‰DtïÞ=úùó'¥§§“‹‹ ©Õjúöí‰D"ºq㌌Ðýû÷É‚êêêH¡PŸÏ§ääd¢òòr²²²¢G‘B¡ OOOnŽÜÜ\ 3¸Výýý´bÅ zúô)ŒŒÐçÏŸÉÖÖVcŒŸŸ•””R©$¡PH$•JEMMMdmmMÏž=Ó›Óï466ÒÑ£GÉËËË`|‰‰‰”˜˜¨wŒ\.'ºyó&ŒŒô©‹˜˜­Ï¾&JåúNž>>P*•\ÛÒÒÀãñ`nnÎù<oÚsttt@"‘hô­ZµÊày---ðôôäÚ©©©°°°@{{»† ¼¼¼ÐÖÖX¹r%„B¡F^­­­ …ؾ}; ÑØØˆ?b×®]ÓÎe&8::r¯'×K_NåååH$¸ví’““ñéÓ'¤¤¤`É’%F‹) ùùù¨®®†H$Bhh(vîÜißFeOOF»««Ë¨‹666èêêÒ;¯6D"Ñ”ZïîÝ»€X,žâ£··VVVZýwwwC$öìÙƒÂÂBH¥RDEEqo¼?ehhÈà}9 ˜››£»»}}}7J\Ú˜˜˜ÏçcñâÅFñi4Q¶´´àáÇ€?~àÊ•+Ø´iÓŒýTVV¢¸¸Xk;,, ܸ¶¶¯_¿6è3""<à]QQ}ûöÁÌÌ ())ASSàû÷ïËå´··sŸÁÁA\½z•³EDD@©T"77Wc36Ð××ÇÅÖÐÐðG9 ººËåpwwÇéÓ§ÑÑÑ1«µQZZŠèèh¬[·D„òòräççǹ®Ï{̰¦ $ &ŠŒŒ¤ÑÑQ®.šäëׯdiiɵ«««5jʤ¤$ ÐÚV«ÕKÖÖÖJÎÎÎi°¦œôcggGaaa$‹éÒ¥Kœ---¬­­)""‚lmméСC\^...$‘HhÆ äèèH!!!4<<Ì›@NNN4111­µ"Ò¬)'&&(((ˆ\\\hÛ¶mDAAA5寄„„L&3˜Ó¯tvvRZZI$ƒ±M§¦”Éd\m;¹7˜ sºÑ™dxx˜^¾|I•••3pÔÖÖRII Ìè¼úúz*..ÖZ”777Sqq1}ùò…ëS(äïïO*•Š^½zESv·ñññ”šš:»DþÏØØ•••QYYÙŒÿÈúrúñññÙ†8'~t‰Ò¨7Ï.\8åžÛ\àëë ___®­T*ñâÅ ½ãýüüàáá­c\]]áêêªÕ& ¬Ñ×ÝÝ7oÞ@&“¡ªªjƱü ŸÏÇúõëuž£}9ýŽ™™Ù¬æ˜+?ºøO<Ѱ³³Ói·°°˜•_±X www­¶ææfddd ;;{Ê.x.bù—àiÿ… Ǿ£Ã˜S&¿£#•J5úÙ¿®1L&J†ÉÁDÉ09˜(&%Ãä`¢d˜L” ÓC×# ˜À±ã¿Ìè1ã;wt™ £áìì<¥Oçc¾`5%Ãä`¢d˜L” “ã™8 nJÈ$ÙIEND®B`‚bm3.7.0/doc/html/functions_0x6f.html0000644000175000017500000002615511365042644015500 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- o -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00224.md50000644000175000017500000000004011365042647013142 0ustar tlktlk036df9f806a3212697e26112ed6e5bf7bm3.7.0/doc/html/a00134.map0000644000175000017500000000003511365042632013230 0ustar tlktlk bm3.7.0/doc/html/a00225.png0000644000175000017500000000571411365042647013257 0ustar tlktlk‰PNG  IHDRã( ¡M;bKGDÿÿÿ ½§“ IDATxœíLÕÕÿÇŸÀÅ·B^.æg¤d”´(‰+KF?\Ž¡eµ5í)+W3J­p’Ù\1„YæÆE7 l$¢E_~$¹„®É¯¼\DãBrŸß?ïq“{á?nŸÎc»çœ÷9çùz¾ïëý¾çð¾àD’sM­ó\+7É(8"Aa­!??6uÿ)6nÜxK“µ ''§$üW'íj­Þ ;;›6mš9EÁŒœœlÞ¼yÜ6±f‘Œƒ ’Q pD2 ‚HFÀAÉ(8Ó’Œ/^ıcǦc¨½½½8pàÀ¬ÎYTT„~øaVæšl|üñRRRìê3Ó¤¤¤ 99ÉÉÉØ·o>úè#´¶¶***ðé§ŸÞÒ‡$RRR ×ëg[.€iJƦ¦&dddLÇPÏË/¿,ŸÔ¾¾>=ztVçÏÏÏGuuõ¬Ì5Ùøúúú°wï^»úÌ4{÷îEmm-ÚÛÛñÛo¿!77¨­­…ÙlFBBúûû-úTWWcÏž=ðòòšÍâcª””” ¯¯àçç‡æææ9V4sL%>GòdçÎÈÈÈ@ff&ªªª Õj‘žžŽÈÈHxyy¡  ÀâxN‡uëÖÁÓÓsNôN[2šÍflß¾J¥‹/Æþýû===Ðjµ8tè|||àíí?þ;wî„··7Ôj5òòòäq<ˆ-[¶X-WTT $$’$aåÊ•(**TVVâÕW_ÅŽ; T*±dÉ:tHî÷ÓO?!<<óçÏÇòåË‘““0 X·nŽ?•J…Ÿþ¹¹¹€B¡€Z­ÆÁƒqqq0 ˆ‹‹Cee%®\¹‚§žzjBm£dggÃßßîîîxñÅ1222¡¯yyyðóó ðôÓOË[1ÀÛo¿ oooH’„Gyííív{qúôi‹ø¬ù2–±ž|óÍ7¸÷Þ{-^/½ôÒ”ÎÉx MèßX¼¼¼ IœÜÜ\‹vN‡øøøi™kJÐ ˜m­Ù‚ââb:99ñµ×^ãõë×YYYIæç糫«‹ÎÎÎ|çwh6›™žžNLII¡Ùlæ UTTÄÇ[þý÷ß¹páB~òÉ'4™L,,,¤›››ššX\\L…BÁÄÄD^¿~UUUôððàW_}ŪÕj~øá‡4™L¡¶®®.Λ7[·nåÐÐ[ZZ¨R©xòäI›¾þøã”$‰:ŽƒƒƒLKK#¦¥¥ÙŒ©¤¤„>>>Ôëõìïïçúõë™@’vyÑÜÜ,Ç×ßßoÕ—¶¶6J’D’ž P¯×S¯×³±±‘wÝu÷ïßo·Ž¡¡! _~ýõW¾þúë\±b…Uï$Iâ›o¾É¬¬,9r„‰‰‰  ^¯'Iž;wŽ …‚ÝÝÝ$Éššº¹¹q```Üñt:CCCyìØ1šL&›çÍÙÙÙ´’vÿ7mÉèééÉááa¹.))‰6l`WWÈAþòË/T(ü믿H’õõõ¼ãŽ;&5OFF5EÝ3Ï<Ãwß}—ÅÅÅT*•'.))‰qqqÌËËãêÕ«-úmß¾‰‰‰lkk#vtt$M&ëêêäãFßh£'Ñ××— $-ßx¶´zÐÙÙ)·i4æççÛŒ÷7Þ`||¼E]pp0ÓÒÒlÆTXXHž?žäÍ7~oo/IÚåÅØølùb-Çg‹=:HÒl6ó믿æO<Á•+W255•===V½“$‰‘‘‘Œell,}ôQúúúòË/¿´ð2==]öúÙgŸµ:I~ÿý÷|þùç¹téRîÚµ‹—/_¶yüxØJF›ŠÛƒ¿¿?\]]åòªU«pêÔ)¹ìîîàæ·A$I‚B¡Ë“¥½½Ë—/·¨[±bÚÚÚ°zõjÜ}÷ݘ7ož…†òòr\ºt MMMðóó“Ûñøãœáãã$ uuuصk.^¼ˆE‹Ál6ÿ#m£¨ÕjùçÉÄÝÑÑ   ‹ºÀÀ@°Ó“O>‰òòr¬Y³*• ÑÑÑHJJ‚J¥²Ë‹±LÕxï½÷ÐÒÒ‚³gÏÊuö訪ªÂÖ­[ˆÄÄDDEEMÊ¿÷ß?ü°\ÎÉÉÁ /¼£Ñggg<÷ÜsÈÍÍŶmÛ Óé,–5ㆰ°0Fdee!22!!!øâ‹/&åÃDL[2F‹²Á`À¢E‹¦kx€R©Äùóç-êzzzàáá1®†îîn,\¸J¥())‘Ûáää£Ñhqb ‘””N‡5kÖÀÅÅ*•êk› žžž0 u£1ÚŠ‰$RSS‘ššŠúúz>|±±±¨¯¯·Ë‹±LÕ—Ï?ÿYYY¨©©Áüùóåz{t¸ººB’$twwãêÕ«¸qã†Å…²ÜÿýèííE?T*6mÚ„·Þz ÅÅÅèééÁc=6©qFFF@ …·Ýv›Ý:¬1m8—.]‰'Üü½Ó‘#G䫜=ÔÕÕ¡´´tÜrtt4ÊÊÊÐÒÒàæfN§ƒV«póî4ºi200€ÌÌLhµZhµZTVVâÂ… €?ÿü¡¡¡·ì¦Žˆˆˆ¸¸¸à»ï¾»e |<&Ò6¢¢¢——‡®®.@cc£|w±Ó|€ÈÈH( <ðÀزe :;;'ìg‹©øÒÐЀ„„Ür·µGGXX°oß>èt:`Ïž=èèè°9ÿÀÀ®]»†k×®¡½½ÉÉÉXµj•|Yºt)4 ^yåÄÆÆZ|ªŠŠ ÄÅÅᡇITUUáøñã6ûØ…µÏ¶°sÍøàƒòž{î¡F£á’%KÃááay½4Š^¯·XS444X¬wìØÁ°°0«åÝ»wS¥R1::š·ß~;·mÛ&k¸óÎ;ĈˆªÕj®]»–ƒƒƒ$ÉÔÔT*•JFEEÑ××—7näÈÈÛÚÚèââ"ùòe.^¼˜†Z­–111ô÷÷çúõëI’÷ÝwÃÃÃY[[{ËúÈš¶¿{@’k×®pÍh6›¹yófªT*FFFrÙ²eŒ‰‰aZZÚ„1-[¶ŒÁÁÁŒŠŠ¢‡‡333åq'ëÅØølùbm͘@º»»Ë/___»uüÎÎNîÞ½›AAAV‘$‰ä—B¡`xx8/\¸`qÜÑ£G €eee6ÏE~~¾¼ÎÝï˜ 3¾3Êàà ËËË-ú3Akk+KKKÙÜÜ,×344”CCCç}†y͹™9sT’$I‚ÐÕ2MººAna…a…0ë꺳ÚÚZšššººŒNenn޵µuW—ñ»$ÂxJKK©¨¨èê2:Uß¾}E#"Œ÷©oß¾ >¼«Ëèyyy]]Âïš8f…a…a…a…a…a…mt¢7réÒ%yØÄÄgggÂÃñ±±‘Ç755‘@FFZ­OOO¦OŸŽµµ5;wîD£Ñ0uêT¹ý¡C‡øù矉•Çååå±sçNÞxã 8ÀÞ½{©««ÃÕՕ矞tÎJ [ÆN´fÍöïßOII %%%°lÙ2¼¼¼¨®® ¨¨///>ýôS0` 6ŒììlÎ;ÇÂ… õú]¶lóæÍÓ úÖ­[IHH`É’%Ìœ9{{{üýý9þ<œ9s¦S×]0€$ܳÜÜ\)77×àö¾¾¾R\\œÞ¸ÆÆFÉÑÑQúꫯ$I’¤1cÆHS¦L‘ZZZôÚ½öÚkÒ Aƒ¤#GŽH€téÒ%I’$©¾¾^êÙ³§4|øpiÆ rûàà`)&&FêÑ£‡”ššª×׋/¾(Íœ9³#«*IRÇ×Wè“bËØÅzö쉽½=:ŽãÇóÓO?±víZLMMõÚ}øá‡477sñâElll8vì?üðÇç¹çžcÿþýèt:222?~<ÍÍÍÔÖÖêõõúë¯Ó9+(L„±“]¾|™‚‚ 8wîqqqÔ××IFF>>>888´šO­VHff&r“““yüñÇ åàÁƒhµZ~þùgêêê˜8q"sæÌ!22’)S¦ðõ×_SXXÈ Aƒ;vlg¯ºp"ŒlåÊ•øûûãïïÏèÑ£‰eáÂ…ôéÓ‡ºº:½9·³µµ¥¶¶– &è…1$$___LMMÉÈÈàÇÄËË {{{Ö­[Çþýû8p ÿüç?ù$’øÅEaìbX[[SPP@pp0ùùùdeeµjwéÒ%8ÀĉñôôÄÖÖ–÷ߟñãÇcnn@hh(ûöíãÇ$((ˆ]»váéé©×‹‹ ~ø!.\àúõ벎‚aDÀÂÂFÃÀ™;w.QQQäääÈÓ‹‹‹‰ˆˆ 44TÞ ’@HHˆÜî/ù YYYÀøñã¹xñ"ß|óÜF’$âããñôô¤W¯^¹šÂ]ˆ0*€‹‹ Û·oàÓO?%22___F…C† aĈlÙ²Ežg„ hµZüqyœ££#^^^x{{cccƒƒƒñññ¼öÚk¸¸¸àïï³³3»wïÖëKP•$îÙ­‹m‹‹‹¯]»Fvv6Z­–Q£FѧOŸ{î«©©‰¬¬,jkkéß¿?¨Tª÷ó[®¯@¦ø:œBÙØØð裥/sssñQF7 vSA!DA!DA!DA!DA!DA!DA!D»¡–F]W— üD»m³ÄÉ5—îÞPèvÄ7pîSEEE§Þü¦6SME‚7¼ PuÁ¯oß¾¿Ð?ÆûàììÜæUù¿¥#+&ìkÝè?Þ¢S— È—k Æ'Âx:ûÖhš-×þ[@Eš¯Èº|á·%Ž»‘ ‡¯¡m¹y‘Mñ±Zšëµ]\‘`L"ŒÝHÁžjn]ù$é$.ªéÚ‚£aì&nÔ´PšyIÞªÈOºÒ•% F&ÂØMœ?xøßuà’N¢<ë: Õš®+J0*Ænâ¿ÿwtúWç«Làü«]T‘`l"ŒÝÀõ²f*sê[ý´¢¤“(Ø#vU/D»ó®bbÒú7k$ ªò¨+mꂪcaìò“ªÑéÚþÝ0SûÄ®êï£Â]=ƒ«¿Üøõ¹=:­Ä“ª;·(á7!¨p¿ì¿‚‰Ù~VQ‚kEM\)hì¼¢„ß„£Âúº]ËÝÚö—½bWµ»ßMU°†* ƒmiiÒÑÃòæý¯—7Sùs=nÁvr»×Z ¬ lâÅ»™‚}W8¼èËúSW—"W¦ØM…a…a…a…a…a…m‚2ˆ6A)DA!DA!DA!ÄÅ»©+VÐÒÒ€J¥ÂÖÖ–‰'âêê €V«eùò帺º2mÚ´Vó¯^½­VKll¬ÁË ¬¬Œ´Z-S¦LÁ‚äädNŸ>Mrr2¾¾¾´´´ V«qqq!''KKK¹¿ÀÀ@þú׿2gÎyÜ¢E‹P©Tò2rss™¦6æ:µçòåË7á“““©¯¯'22²ÍöbËØ8q‚}ûö‘œœLnn.ò±Ì-öööŒ;–¤¤$‰ˆˆÀÔÔÔàåœ>}šüü|ykzkkÛÞ;üÔ××Ó«W/½qÁÁÁ¨T*ùqüøq½é¯¿þ:pó$‘¡®\¹ÂéÓ§IHH`Ö¬Y 6Œ   ²³³¾NíY¹r%þþþøûû3zôhbccY¸p!}úôi³½Ø2vcï¿ÿ>ãÆ“‡·lÙÂÌ™3¹|ù²^»[/´¨¨(¶oßΊ+:´œøøx$Iâᇠ©©‰ÒÒRRSS êP_NNN¢Óé01¹¹-øÏþƒFsó6>>>­æQ«Õ¬_¿ž &ðôÓO´µZ¥¥%;wî¤G„‡‡sæÌÖ¯_ÏêÕ«ºNíY±b/¿ü²<üÃ?ÌäÉ“[±eü]ñóóãêÕ«ÔÖÖêçСCœ9s†¢¢"½îF’$xÿý÷IJJ"))‰È–-[:\ãøñãihh`Ïž=ò8KKKlmmihh ¸¸¸ÍùFÍœ9sˆ‰‰iõËêmqqqÁÑÑ‘=zÈã Dmm­Ñ×ÉPX[[Ë»®·aìÆ®_¿NMM 555”””ðÁ0jÔ(lmmõÚÙÚÚÀìÙ³‰ŒŒ”·H†8räÄÄÄ0lØ0ù1cÆ þýïÓÜÜÜf=555­Þàænók¯½ÆK/½DVV–<¾²²’gŸ}öŽ»ÏË–-£°°ôôô»Ö=nÜ8.]º$ïòÖÕÕ±k×.:´NÆfaa!ïÜN„±{â‰'°³³ÃÎÎWWWΟ?Obbb›m£¢¢ÈÌÌìðYÔøøxBCC±³³ÓICCƒÞ £É“'ËõØÙÙáææÖfŸK—.å¹çžc̘1 6 ???¼½½‰ŽŽ&,,¬ÝZ¬¬¬X»vm»/æÛÛÆÅÅB`` C‡ÅÇLJٳgwhŒÍÅÅ…íÛ··9M|èßÍüž~îÊ•+dggcnnŽŸŸæææ477cffÖ¡­÷TTTpúôiú÷ï/¯P™"Œpeee¤¤¤´;ÝÃÃ//¯N¬è+SœMýƒS«Õ888´;ýèÄjþØÄ–Q”A\é/J!Â( !Â( !Â( !Â( !ÂØÍÜézF¡{a…a…a…a…a…a…a…Wm‚2ˆ«6A)DA!DA!DA!DA!DA!DA!D»q=ãï—£ („£ („£ (D«Ÿ÷/**âĉ]Q‹`€æ\+ o»w›”ÁЛºê‘n/â¡Ð‡}'É×.¸Ëë;?îÁÉvo|søðáö& а¨« Ú’’Â|pOóŠcFAPFAPFAPFAPFAPFAPˆv?Ú0Tii)gΜ!44Ôõ(N]]{öìá™gž1j¿¤¬¬¬Íi>ø AAAwícïÞ½\¾|Y611ÁÁÁqãÆaii)×h4¤¤¤pöìY´Z-ƒ&$$„x€£G¢Õj ”ÛŸ:uŠÂÂB"##åq/^$--gŸ}–ÌÌLNœ8Acc#NNN„††Ò§OŸ­SSäìÙ³¨T*FEpp0&&ÿÛ>Ü©î[¶nÝJPP}ûömµŒŒŒŒû®³3Ý÷–±¨¨ˆÝ»w£–»úä“OÚ}ÿVýÖ×׳gÏ£/óÚµkTUUQUUÅÁƒ9xð <\[[kP»víâäÉ“ò|¥¥¥|÷ÝwDGGË}TVVMbb"666ôéÓ‡””f̘AAAÅÅŬ[·N¯ßo¿ý–¸¸8ª««åq‡"%%…7²|ùr¬­­1beeeÌž=›óçϼîUUUDGG³wï^œœœ°±±aÆ ,\¸[?Vx·ºoù׿þÕæÿî믿¾ï:;Û}o;SFFÚ¯““ß~û­Ñ—ùÔSOÉòÉ'üãÿèp?AAAzµ777Å‘#G ã½÷ÞÃÍÍ%K–È[éÓ§óå—_òöÛo³páBÖ¯_Ouu5½{÷¦©©‰œœ\\\ÈÈÈà‰'ž ''‡‘#G²mÛ6V­Z…§§'aaa˜››³}ûvÞ|óMƒjþì³Ïx衇X¼x1*• €ÈÈHf̘AZZãÇ¿kÝ›7oF­V·Ù¿F£1JÍ(ÇŒ’$ǤI“ˆˆˆ >>€ÚÚZæÏŸObb"S¦L!<<œ½{÷²víZÂÃÃyê©§8tèÜÏÖ­[Y¾|y›ÃK—.¥¦¦†¥K—rúôé÷’’´iÓxì±Çxꩧغuk›ýÖÔÔ°`Á’““ ãÔ©S¼õÖ[;vŒ·ß~NÀ?üÀ²eËäwó¶h4c<ÅëÑ£½zõB§Ó‘››K~~>ÿûßõvÿæÌ™ƒF£¡¢¢KKK~þùg²³³qqqá±Ç###¸ùÿÍËËÃÓÓ“––êëëõúzæ™g˜þøclmmÙ¹s'O?ý47n”û8p =ôP›ÃóçÏÇÆÆ†ùóç3bĈõÝÐÐÀG}Ä‹/¾È¾}ûxçwX·n555­úÕh4œ9s†´´4>úè#9uêcÇŽ¥¶¶–ÄÄD®^½Ê_|ATT”Þ‹ê–²²2Ö®]Ktt´1žâv]»vÒÒRJKK)..fÇŽܸqƒ€€Îž=‹»»;666­æ333ÃÛÛ›sçÎáåå%‡ñäÉ“øúúòÈ#••…N§£°°ÆÆFüýý™4iK–,áwÞaÏž=”••áääÄÈ‘# ª÷ܹsôîÝ»Íc·€€||| ª;//¯ÝeôìÙ³Ãu?~œ^xýû÷wY0²›jeeELL fffxxxAJJ H’ijÏ>‹J¥Â××SSS¦N*oß¾]îgìØ±zýþzØÊÊ •J…••ff7Ë6´oµZÍêÕ«qww _¿~˜™™Q__³³s«~›šš˜7o½{÷¦¼¼\®A¥Rñæ›oòÒK/‘žžNDDC† ‘§K’ÄÉ“'Ù¹s'—.]",,ŒÕ«Wã)n×¶mÛØ¹s'ps‹P__Ï«¯¾Š­­- z'rngeeECC>>>¤¤¤™™Ill,C‡ÅÔÔ”¼¼<~ùåL¯^½˜?>=öéééìØ±ƒU«VáîîÎo¼››Û]ëmhhÐ;Ó^C꾓ŽÖ9~üxصk6l $$„'Ÿ|²SOø%Œýû÷—_È®®®üôÓÿ~¢gÏžÀͳZ­ÆÔÔT¾_†ô­V«9wîëÖ­£´´kkë;îZªT*z÷îÝæ´~ýúž={X¹r¥<þÌ™3¬Zµ ¦L™ÂŸþô'£¬ßÝÄÄÄè3fgg3þ|ÆŒCïÞ½©¬¬lwÞªª*\]]ñññáË/¿¤¤¤„òòr<<}:ß}÷_~ù%æææí¶¿Ó ªªªŠ”” À¶mÛäñfff¨Õjjjj¨««C«Õu åíí¥¥%¥¥¥øúúR\\L~~~«vÕÕÕdff2zôhÜÜܰ²²bóæÍxxxÈ'Fyä222ÈÉÉÁÛÛ›´´4fÏž­×Oß¾}ùÛßþFyy9w­ïׇ·‹ç§Ÿ~2¸îöÜo·Î ˜ššbaaq×u2£„±¼¼œôôtàæ.ÆîÝ»ñ÷÷ïp?ùùùœQbl555ðÐCux7¸¡¡¼¼<ìììpss£²²R~Ç¿S¿’$QWW‡µµõ=Õ¬ÓéZž7Tee%‡2Ê·êëë)((@§Óáêꊭ­í=÷¥ÑhÈÏϧ¾¾\]]õví ­»¦¦†ÂÂBLLLpwwos‹u?uß­Î_»Ÿÿӯݺ¸øî´˜i´0 Æ·yóf‚ƒƒéß¿W—Ò!ݵnc¸Ÿ0v«oàüÑ̘1£«K¸'ݵî®&®Ú…a…a…a…a…a…a…a…h÷CC~IãiÆqãÆé]ð+BçhõÝTAºD¦8f…a…a…øÂ(…¢4Ÿá:IEND®B`‚bm3.7.0/doc/html/a00039.html0000644000175000017500000001357411365042651013440 0ustar tlktlk BitMagic: bm::bvector< Alloc >::iterator_base::block_descr Union Reference

bm::bvector< Alloc >::iterator_base::block_descr Union Reference

#include <bm.h>

Collaboration diagram for bm::bvector< Alloc >::iterator_base::block_descr:

Data Fields

bitblock_descr bit_
 BitBlock related info.
dgap_descr gap_
 DGAP block related info.

Detailed Description

template<class Alloc>
union bm::bvector< Alloc >::iterator_base::block_descr

Block type dependent information for current block.

Definition at line 313 of file bm.h.


Field Documentation

BitBlock related info.

Definition at line 315 of file bm.h.

template<class Alloc>
dgap_descr bm::bvector< Alloc >::iterator_base::block_descr::gap_

DGAP block related info.

Definition at line 316 of file bm.h.


The documentation for this union was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00240.md50000644000175000017500000000004011365042650013132 0ustar tlktlkdc4f1902bf84e76ed4dcebf739de1337bm3.7.0/doc/html/a00199.md50000644000175000017500000000004011365042645013153 0ustar tlktlk0229da5f41d76851996373607d845182bm3.7.0/doc/html/a00187.png0000644000175000017500000000421011365042645013252 0ustar tlktlk‰PNG  IHDR(ßs bKGDÿÿÿ ½§“=IDATxœíšiL“KÇÿ})YT@Q#*;H¢,‚(".‰b$!Q0cQÄâ·5ჲ5"DˆhƒŠq HT" †‚aQvY”µçýàëóÞJ[ ­Þ{½óKæÃœ™9çtòÏ3gž><""0ä?uŒ6L@ •`b¨_Þ@vvö¯Ìƒñ@$ÁÜÜ\ÚHrÀkR-##cŒNä> ##ÁÁÁЦ0þ%ðx<™vV1T‚ ˆ¡L@ •`b¨C%˜€*¡ð¯,ïÞ½Cii)BCCÕánBqºººššŠ˜˜˜ ù¾sçnß¾ÞÞ^Ì›7¡¡¡˜={67ž˜˜,\¸Pj]JJ \]]áèèˆ'N`ddÀ×k¯¾¾>0oÞ¼ å”——‡ááalÞ¼™³Ý¿UUUˆˆˆàlÕÕÕÈËËÃþýû¡¡¡1¡XE-O 7oÞ ))I®&çÓ§OHOOçúaaa‹ÅJù‹‹CHH àææ†ºº:ØÙÙáÕ«WÜœS§Náõë×cÖ&&&¢¼¼pøða”——£±± ÈÌÌ„µµ57>^Þ¾}‹ØØX)[BB"##ÑÜÜÌÙ²²²™™ùËÅ ßDËzó(‹‚‚‰DJÍU…ñÄ133£ÊÊÊΠI“&ÑÇ¥ì;vì )yyycÖÛØØPjj* *))‘_»v-mÛ¶M©œ¿çéÓ§€š››‰ˆ¨¿¿Ÿ´´´ÈÊÊŠÒÓÓ¹y+V¬ ]»vM(†²ÈÓƒÚj ‰D‚ˆˆL:Ó§OÇñãÇX±bΜ9SSSãÂ… ˆŽŽ†±±1LLL••Åùùã?°uëV¹}yq>~üˆuëÖ‚‚‚ÐÚÚŠ   ”””(Ì{ddCCCèé鑲ÇÄÄ <<\µM`dd@ pÎàà L»P(„žž=z(..†••‚ƒƒQXXàë~<{ö >>>JûU'jPyy9455ñáÃäææâäÉ“ÈÉÉÁðð0""ª©©!>ŸOÃÃÃDDôüùsš1c†ÊqÄb1ikksve0""‰DB÷ïß§¨¨(²³³#GB¡^¾|)åO™#ÌÛÛ›)00üüüÈÌÌŒnܸ!ëöíÛ´fͲ´´¤Ó§OSGG‡ÜÜΞ=K...DDdeeEEEE$‘HÈØØ˜ÊÊÊèüùóäèè(wý“'OhË–-4kÖ,Š¥÷ïß+µ'ß#Oj¹…Àüùó¡©©ÉõmmmqïÞ=®¯­­ àëíD €Ïçs}uÆ/D‰DîhhhÀÎ;±~ýzÔÕÕ+Çøøxxxxpý«W¯"$$ííí(++Cxx8¬­­±{÷nøúúþзöíÛ‡ššÔ××ÃÃÃ<~~~(,,„X,–y|}C$A$¡½½©©©ðöö†ƒƒrss•þMŠPÛÖÞÞ.Õomm…ºÜÿ´8ùùù°··—²Í™3ÇŽC}}=úúúZZZøüùó˜õýýý˜>žžž\=åïï;wî ¬¬L¡€¾1:: "ŸÏ‡ŽŽÎç+‹ÚT__›7oz{{‘œœŒ€€€qû©¨¨à DY}uÅù†§§'pñâEÎFDÈÈÈ€½½=tuuË—/GRRz{{¹yW®\Ass3¼¼¼8[__º»»ÑÝÝÆÆF=z¶¶¶Ð×ׇH$Bee%pýúuXXXàСChjj’›ǃ··7233áççÇÙW­Z…ŠŠ ˆÅb©øßS\\Œ   ,Y²D„ÒÒR\¾|y"[%›ñžy²((( 777Z°`yyyÑÌ™3iõêÕ444ÄÕ@ߨ­­•ªU*++¥j ÈÈH©«úŸûŠâ|_-^¼˜ÜÝÝ©¼¼ü‡ùççç“¡¡!™››“H$"²´´¤ªª*nNgg'ùúú’ŽŽ¹ºº’……PNN7G H}€ÅçóÉÝݪ««eÆmnn¦ƒ’ÂüÎ;GèÅ‹Rv¡PHB¡Pîºììlòòò¢ììl®æœ(òôÀûß Lå÷ƒ²<~üzzzprrR]Ýãˆ#‘HÐÕÕCCC@[[*++áââ‚iÓ¦ýÐçàà ***ÐÓÓSSSØÙÙɬOjkkQWW]]]899AKKKåß3::úS^ªÓ¯<=¨U@GZZZÙvvvr¯ÑŒÿ#Oj»…ý]ÑÔÔ„‘‘‘Üñ)S¦üÂl~?~{Áßßÿ¯Nã·…}ÎÁP & †J01T‚ ˆ¡L@ •`b¨C5ý÷ÁknãúèÚµkò†ÿRD"Ñ›Üÿ e`5C%˜€*ÁÄP‰ÿ2`V:a·¥IEND®B`‚bm3.7.0/doc/html/a00159.png0000644000175000017500000032052511365042641013257 0ustar tlktlk‰PNG  IHDRø౜ bKGDÿÿÿ ½§“ IDATxœìÝyXTõâðw†MYT@d_TdGpD-3÷]KMs×¼ú»¶XÚfe¥÷æni–‰&îi© ¢‚"›(‹ˆ€,² ²ïÌùýq³RAÃò~ž‡aΜóÎdÞù~¿G"‚""""""""¢F$;µ=,ˆˆˆˆˆˆˆˆ¨Ñ±t""""""""¢F§(v"""""±#%%Eìíš±±1ÜÜÜÄŽADDM@…ĉˆˆˆ¨½š9s&<(vŒvmÆŒðöö;5Žt""""¢vmذaxÿý÷ÅŽÑ.}úé§bG "¢&Ä5ˆˆˆˆˆˆˆˆ¨Ñ±t""""""""¢FÇÒ‰ˆˆˆˆˆˆˆˆK'""""""""jt,ˆˆˆˆˆˆˆˆ¨Ñ±t""""""""¢FÇÒ‰ˆˆˆˆ¨•(--ÅÁƒ|¿ììläçç7A"""¢'céDDDDDÔJ”””à‡~hÐ} ±dÉ\½zµiB=K'""""¢6lãÆ(((;µCŠb """"jMöî݋ӧO£¤¤¶¶¶xï½÷ ££ðóóÃ÷ßÌÌLhiiaòäɘ6m ñÑGÁÝ݇Fuu5.\ˆäädœ? Xºt)<== H¥Rœ;w***˜>}:&Ožü·,‰‰‰Ø¼y3âãã¡§§‡9sæ`ذau·Ÿþøcüøã~,Kyy9Ö¬Y///üúë¯Xµj6oÞŒ˜˜@RR|||°fÍš§>¦œœ¬[·óçÏÇ™3g0xð`¬_¿‚ <5K}sQûÅÒ‰ˆˆˆˆ¨ž*++UUUPUUÅ|€7ß| ¤¤„íÛ·càÀPRR‚¾¾>QRRÓ§O‡D"³³30eÊ”º¯KKK뎣¢¢‚… BEE¶¶¶?~<Ο?ÿX–   tîÜãÆƒ’’ñÒK/áÒ¥K¨¨¨À§Ÿ~ŠU«VASSó©Éßß8p TTT0mÚ4Œ;¶î±>-K}rQûÅéuDDDDDõÔ¯_?ܸqK—.…ºº:\\\0kÖ,¨««CII qqqøöÛo‘žž ‚ðØý;tèH$PRR‚‚‚BÝ×Ö½{w(*þïOu333DDD<¶Mff&RRR0mÚ´ºïUTTÀÝÝ?ýôºtéDEE¡¤¤éééHLL„¹¹ùßöchhX÷µ¢¢"¦OŸ^¯,õÉIDDíK'""""¢zK–,Á’%KpçÎ;v¬n]`` öîÝ‹>ú¶¶¶J¥=zôsç¯ ççç£cÇŽ}OUUvvvøòË/ë¾WQQ‰Dooo`Û¶m€ôôt¡  ÿþ÷¿ÿ¶Ÿ‡>ö½€€899=3K}rQûÅéuDDDDDõtèÐ!¬\¹ °²²ÂÈ‘#ñàÁµk#™˜˜ÀÎÎR©111M™kˆœœ\½zPVV†3gÎÀÙÙù±mœ‰{÷î¨-œ.\ˆ€€Ì;»wï®ûèÙ³'^{íµºÂ)00IIIuû¹víòóó2™ 6l€T*}f–úä$"¢ö‹#ˆˆˆˆˆêiäÈ‘8}ú4æÍ›---ÄÅÅaÑ¢E€`ÿþýxë­· ¤¤EEEèëëcÇŽX½zuƒŽ£§§‡={öÀÇÇééé044Ä„ YdhhˆyóæaÉ’%°²²BJJ lmmáééùÌýoÛ¶ ¯¼ò ÌÌÌàèèˆaÆaΜ9°°°@ll,-ZT7béIYÂÃßxH„¿N4'""""j'fΜ‰¬¬,¼ÿþûõ¾OUUd2*++aii --­ºÛJKK!“É ­­ sssdgg###öööõÞPP~øálß¾·o߆²²2zõêõ·uŸþðàÁ$''£k×®055­÷qþ*-- ™™™066†®®î3³44ç?ùôÓO¡§§ooïçÎMDD-G:5€’’ìììþñ6UUÕǦ—éêêÖ8 ¥¨¨øÄãüY×®]ѵk×ç:ÆŸ>¶ x}³Ô7'µ?\Ó‰ˆˆˆˆ¨QSSƒØ1<=KKÊIDD-G:µ vvv-fäÐÓ²´¤œDDÔ2q¤5:–NDDDDÔ.–¡ @IìDDDm§×Q›—•U€¨¨tÄÄÔ~DF¦!%%‰6zõº/v<""¢6‰¥µ‚ àÞ½\DG§#22µ®dÊÎ.u†­­¦LqEŸ>†Ø½û äçËENMDDÔ6±t""""¢V©ºZŽøøLDG×KQQiˆ‰IGQQ9¤07×AŸ>†X´È¶¶Ýakk--ÕÇöñÃ,œˆˆˆš K'""""jñÊÊ*!“e 2²¶XŠŽNCll**ª¡¢¢++}ØÚbÌGØÙÂÚZ;*‹›ˆˆ¨]céDDDDD-J~~)¢£Ó}ÑÑiˆŠJCbbjjäèÔ©ll з¯9æÎ[[ôè¡%%±cÑ_°t"""""Ñšw))¹]ÝN°±1ÀÈ‘¶°³3‚­­LLº@"‘4j???øùù5ê>BUÕUU9¨ªÊhòcI¥ ªê€ââ` íKYÙjj(.AUUösïgÆŒ/”ƒˆˆZ.‰ /ö¿ Q=ü¹`ŠŒLCdd*îßÏjÃÎÎ}úÂÆÆ}ú@OO³É3#%%¥Éó$AAY8|8ãÆ™`èÐîM~¼””bl݃¾}u0y²ù íëîÝB?ž„´´ôî­ //XXh4x?ÆÆÆpss{¡,DDÔ2±t""""¢F—“STW,ýQ2edÔLFFagg;;ú¢©sg5‘7¿£GÃð¯ÂʕñzõKÍvÜßƼyûð`ÉÏÞŸ¿,¶nõÅõëwáæfŽå˽àéiÝI‰ˆ¨µcéDDDDD/¤!“!´µÛ_ÁôW¿þz ‹íÇ‚CðÁcšýø;v\ÄçŸÿн{çbÄÛFÙgHH"¶lñ…¿,llºcÅŠá5ÊRiãN‡$"¢Öƒ¥Õ[vvÑcåRTÔÿ &cã.•K}ú°`ú'¾¾·1oÞ÷˜5«?6l˜ ZŽwß= ŸP9²NN&¶ßèètlÙr¿ý ss,]: &8s±w"¢vˆ¥ý£¿L‘‘©ÈÌ,ð÷‚ÉÎÎZZª"'nùãñÚkßaüxglÚ4µÑEoˆš9^{í;ܾ޳gWA__«Q÷ŸíÛýpüx8ºuÓÄ¢E˜1Ã**¼–Q{ÁÒ‰ˆˆˆˆ•UXw¹¿L&&]êÖ^bÁôüBB1}únŒaƒmÛfAAA*v$–cüø-€'V@C£C£#-í!vC‡‚Ñ©S,\8¯¿>êê*~,""jYX:µ3– ""·n¥âæÍDF¦!+ëñ‚éÏ£˜45Y0½¨›7S0mÚN лwÏ¢¢ø…Ó22ò1jÔÑ«W7x{/h²2,'§ß~{û÷_…T*Åo Äüùƒ9“ˆ¨ céDDDDÔ†•”T **­®dºu+÷îå¨]äÛÁÁ˜S“ÉîcâÄípt4Æ?Ìo‘kݸq“'ïÀ”)®øüóIMz¬‚‚Rìۈᄏ‚ŠŠ*¼öZ,\8ݺi6éq‰ˆ¨ù±t""""j#ªªj“^7‚éæÍ$$d£¦FN XÃÁÁ]º¨‹¹ÍKHÈÆøñ[aeÕ û÷¿‰Ž•ÅŽôD¿ÿyóöaýú±˜?p“¯´´?ýt »w_B^^ ¦LqÅÒ¥Ã`bÒ¥ÉMDD̓¥Q+TS#GBBö£éq©ˆˆHALL:ªªjЩSØÙÂÁÁF°·7†¡¡¶Ø‘Ûää˜8q;ºw×ÂÏ?/‚šZË_ÃhÛ6?lÜøöïVÍrÌÊÊjøø„bÇŽ‹HKËØ1ŽX¾Ü ½zuk–ãQÓaéDDDDÔ ¤¤äâæÍÿ­Ã•†ââ ¨¨(ÂÖÖööÆF0ÃÜ\R©xWE£Úu’ÆŽÝ‚ÎÕá㳤Ièn*Ë—{ãÂ…hœ>½=zè5Ûq««å8}ú&¶nõE\\&FŽ´Åòå^pt4n¶ DDÔ¸X:µ099EuÓãþ(™òòJ ¨(EÝàà` {{#89™ W¯n-r ö,+«ãÇoEÇŽJðñYÒê¦1VUÕ`üø­ÈË+Á¯¿®lö…¾AÀï¿Ç`Ë– ˆˆHÁ A=±bÅp `Ù¬9ˆˆèűt""""Qaa9"#ÿ·ÓÍ›)¸?`f¦S7=ÎÁÁ}ú¶è5ÈÍ-ÆäÉ;PYY'–CG§“Ø‘žKnn1FŒØ x{/­Ø ˆÇ–-põjœM°bÅpxyõ†D‘|DD­K'"""¢fR^^…˜˜ôºL)HLÌ ÐÓÓ„££qÝ(&#^I®•),,ǤIÛPXXŽ'–A__KìH/D&»Ñ£¿ÁäÉ.øâ‹É¢f ¿‡-[.À×÷6¬­õ±|¹F¶‡‚‚TÔ\DDôt,ˆˆˆˆš€\. >>÷Q;‚)66ÕÕrhjªÂÁÁ¨n &#èéñrñ­Yqq¦MÛ‰ŒŒ?¾¬Í\íܹ(Ì›·Ÿ~:sç;d²ûغÕ§Oß„±q,[æ‰I“\9Å”ˆ¨…béDDDDÔrrŠq7nÔ~ܼ™‚ââ t쨌>} +™LM»Š—QYY%fÍúwîdáĉ尰Ð;R£ÚºÕ_~y.Ä A=ÅŽ öÊ€Û¶ùáÈ‘PtíÚ ‹{`æLwN?%"jaX:5Pee5¢¢ÒpãFí(¦ððd¤¦æA"‘ÀÂBNN&pt4³³)¬¬ô¡¨È)@mUUU fÏÞƒÈÈT9²ÖÖúbGjt‚ `ùroøúÆà·ßVÁÜ\GìHu22ò±s§?¼½¯CUUóçÆÜ¹ƒZÕÕ‰ˆÚ2–NDDDDÏœüà±LQQi¨ªª¶¶œœŒáèh'§Ú ŽbÇ¥fRUUƒ ~@PP^{{#±#5™òò*Lš´yy%8wnu‹+urs‹±gÏìÛ˜3g æÏ‚®][ו‰ˆÚ–NDDDDRXX^7Mîõ˜rs‹¡¤¤ƒGSmÑÔ’F|P󪩑céÒ¸p!‡/‚‹‹™Ø‘š\VV!Fú¬¬ºaÿþ7[ä"ÞEEåøá‡@|÷Ýe””TbÆ w,^ìîÝ[÷¢îDD­K'"""j·ª«åˆÏDxxrÝH¦»w³!— 00І³³é£Lưµ5D‡JbG¦@¬Zõ3~ùå&~üq>ì!v¤f‘‚ ¶â7áƒƈç‰ÊÊ*qèP0vîôGvv!&NtÁòåÃ`fÆ¢˜ˆ¨9±t"""¢v#3³ n ¦7î!22¥¥•PWWœœj×art4®n'±ãR $Ö®=oïëØ·o<=­ÅŽÔì||B±råAìØñÆs;ÎSUUÕàØ±0lÝê‡{÷`ôh¬Xá…Þ½»‹ˆ¨]`éDDDDmRyynÝJEDD nÜHFxø=ddäC*• gÏnpp0†³³ œœLѳ§^‹œ*D-ÏGž=W°{÷lŒe'vѬ_áäÉåèÓÇPì8Ï$— 8sæ&¶lñ…L–/¯ÞX±Â ÎΦbG#"jÓX:Q«'s~7oÞCxø=Èd÷Q]-G×®êpr2…£cmÉäà`uu±#S+ôõ×çðÍ7°eËLŒß²Gø4µš9fÌØ„„lüþûjtéÒ:ì~~2lÙâ‹°°$ôïo‰+¼0xp/±£µI,ˆˆˆ¨ÕÉÏ/­[ƒ©vÑï”BYY}úÔ•LNN&06î"v\j¶o÷ÃgŸýН¿ž‚éÓÝÅŽÓ"<|X‚W^ù/ôô4àã³JJ bGj  »Ø²å._Žƒƒƒ1V¬ðˆ¶J%bG#"j3X:Q‹&²žŒ$„‡'#!!‚ ÀÔ´ë£L¦pp0FŸ>†­î…/µ|{ö\Áºu'ðé§ðƃĎӢÈd3æLœèŒ/¾˜,vœçrëV*¾ùæ~ÿ==zèaÙ²a;Ö ŠŠœrKDô¢X:Q‹RZZ‰›7SZ[0……%#?¿:(ÁÞÞ}ûšÃÕÕ ŽŽÆ­fJµ^áí·àý÷_ÅâÅbÇi‘~û-o¾ù6nœŒY³ú‰ç¹ÅÅebÛ6?œ:uÝ»kcéROLÚÊÊŠbG#"jµX:‘¨ÒÓ"44 aaµÓíÛ騮–£[7M¸ºšÁÅÅÎΦÅDÍîðá¬Zõ3V¯‰U«FЧEûúësغÕGŽ,Aß¾æbÇy!))¹Ø±ã"~þ9ÚÚjX´h(fÍê55®GDÔP,ˆˆˆ¨ÙTUÕ **­nShh23  ¨(EïÞpq1…‹‹)\]Í`` -v\jÇNŠÀ²e°t©'Þyç±ã´x‚ à7¾Gxx2Ο_ }}-±#½°¬¬BìÞíŸ~ ‚²²"æÍ„7Þ--U±£µ,ˆˆˆ¨Éäæ#<<¡¡É K­[©(/¯‚––jÝ&WW388CUUYì¸Dj§‹-Zô#Þxc>üpœØqZ¢¢r¼òÊ ©ÙÇ/o3#óóK±wïìÝ€êê¼þú,X0ººÄŽFDÔâ±t"""¢F!— ˆÏ|4M®vº\bb$ ,-uáìlо}Íàìl KK]H$¼Bµ<¾¾·1oÞ÷˜1ß}6‘?§ ”W^ùÆŽuÄ—_N;N£*.®ÀþýWñí·—PPP†3ܱh‘ŒŒ:‹ˆ¨ÅbéDDDDÏ¥¸¸÷êüOFaa9TU•áà` W×Ú‚ÉÅÅ”ÓQ¨U¸r%³gïÁøñÎØ´i* §çôÇÂâ›6MÅ´inbÇitÕ8t(;w^DffÆwÂÒ¥ÃУ‡žØÑˆˆZ–NDDDT/÷îå",¬¶` IB\\&jjä00Ю[ðÛÅŽ{ðRãÔêÝŬYß⥗l±eËL((ðgøE|þù¯Ø½ûNZ{{#±ã4‰êj9NœǶm~¸{7/¿l‡+¼Ð§¡ØÑˆˆZ –NDDDô7••ÕˆŒLEXØ=„†&"<<ÙÙEPRR@Ÿ>†u#˜\]ÍЭ›¦Øq‰^Hxx2¦Oß…¡C­°sçë,œAM³f}‹;w²pþüjté¢.v¤&#— 8w. [¶ø"22VX¾Ü îîbG#"K'"""BvvÑ£¿v‘‘©¨¬¬F—.êû6…‹‹ìíСƒ’Øq‰Mdd*¦LÙ77 ìÙ3·Í,~Ý<|X‚—^Ú “.8thÑßÊ<™,ZÐÐè(RÂÆçï‹­[}qýú]ôíkŽ+¼àéi-v,""Ѱt"""jgA@\\&BC“’„°°$Ü»— ©T‚ž=»=š&W;]ÎÜ\Gì¸DMF&»I“vÀÞÞ?þ8Ÿ…SˆŽNÇØ±[0{v¬[7¶îûñ˜:u'6l˜€¹s‰˜°i„„$bË_øûÇÂÆ¦;V¬ŽQ£ì •r0"j_X:µqL• NDHHBC“Ÿ_ uu8:šÔ-øíìl bÇ%jwîda„mèÕ«~úéMtì¨,v¤6ËÇ'ÿú×!ìÚõ:^}Õ>>¡X½úgÔÔÈabÒAAÉDG§cëV_üúë-˜›ë`éÒa˜0Á™'µ,ˆˆˆÚ˜ÂÂr„†&!44ÁÁ‰¸u+ååUÐÕ턾}Íáêj77s.øMíVròŒ¿ ÆÆqèÐ"¨ª²pjjk×ÇéÓ˜9³¶lñP;êNZWW31ã5¹»w³±m›Ž‡žž/öÄôénõž®\]-çïk"j•X:µrùNDhh®_OD\\ärºpu5ƒ»»\]MafÆ©rD©©y7n+ôô4ðóÏ‹9º¯™”–Vbùò8>rùÿ^~(**`Ü8GlÙ2SÄtÍ'=ý!v츈C‡‚Ñ©S,X0³g„ººÊSï7yòv¼ýö(¸¸´írŽˆÚ–NDDD­Èë1ý1M.8ø.ÒÒBQQ ;;#¸¸˜ÂÍÍ}ûšµé«E=ŒŒ|L˜° jj*8vl)45UÅŽÔ.W`îܽ¸~ý.jjä»]II‘‘·«ó‘“S„o¿½Œýû¯B*•â7bþüÁÐÖVûÛ¶×®%`Ò¤í€Ã‡cРžÍ—ˆè¹±t"""jÁž¶“““)úö5Cß¾æpr2á!¢§ÈÎ.Âøñ[¡¬¬€£G—²”m&™™˜:u'’“ ªªæ·QPbýú±˜?p3§_AA)öí Äž=WP^^…×^ë… ‡¢[7ͺmfÏþþþ±ËH¥RìÞ=/¿ÜGÄÔDDõÇÒ‰ˆˆ¨)-­DXX‚ƒt÷PQQ]·Sí‡×c"j€ÜÜbLš´••58qb9tu;‰©]HIÉ…»û§ÏÜN"‘À̬+ßk†T-Sii%®]þÈË+Á”)®X²Ä0`Àguë_I¥ Áÿ;“&¹ˆ˜ˆ¨žX:‰¨  !!I¸~ý.®_¿‹¨¨4TWËajÚnnæpw·€››9LM»Š•¨U*((ÅĉÛQRRãÇ—A__KìHí† 8u*ï¼s%%ÿ8µîÏNœX77ófJ×2UUÕàðáìØqiiy06î‚””JL"‘`Ɖ˜3g€HI‰ˆê‡¥Q3ÊÎ.Âõëwœˆë×ï"..‚ôêÕ­®drw7‡žžæ³wFDOUXXŽiÓv"+«'O.‡‘Qg±#µKååUؽû¾ù檫å+P€Úu^yÅ;v¼&B–§ºZŸ¬Ysrù?—u‰kÖ¼Œ·ÞÞÌ鈈ê¥QJMÍ«+™‚ƒq÷n6¤°µ5€››9úõ³Dß¾fÿ¸x,=¿ÒÒJLŸ¾ ))y8qbG ¶YY…øüó_qäH($¨®~¼LQRRÀÍ›ñ÷á#;wúã³ÏΛ®õGD- K'""¢ç$— Éî?Z)ÁÁwñàA1TU•áâbV7]ÎÑÑ:(‰—¨]¨ªªÁìÙ{pëV*Ž]këîbG¢'8{6 ëÖ@FFär9$Àظ ®][ÛîGíøø„båʃõÞ^*•`ôhlÝ:JJ M˜Œˆ¨aX:ÕSM11é¸~=W¯ÞAHH J¡©©Š¾}kK&77 ØÛñÊrD"¨ªªÁüùû|>>K`gg$v$z†ªªìÝ€¯¿>‡ÒÒ ÀÑ£KÑ¿¿¥ÈÉÄ5dȸs' @í0©T AP]-ÇÓ^¾õïo oï…PQQl®¨DDOÅÒ‰ˆˆè jj䈊J«›*œˆÂÂ2tî¬77sôïo‰þý-Ñ«—>¤Òöý®<‘ØjjäX¼x?.]ŠÅ¡C‹àìl*v¤6aæÌ™8x°þ#nž—TÚ:¹CUÕ••÷‘›ëÓäÇlnõ}Ù%— HJÊA^^ òòJ›[Œœœ¢º¯sr ‘™Y€ÜÜR”ümm,+«.ø÷¿Ýѱ#‹'ÐÓÓƒµµµØ1ˆÚ-þ&"""z¤ºº¶d J¨[ü»¨¨]º¨ÃÝÝo¿ý2ÜÝ-aeÕ­ÝOý jIjjäX±Â~~28°€…S#SRR‚··w³+3³§Owƌ㠦Ö6^ªøà¸ØQÚ­3f3f̨׶§OŸ$‰°jÕ*¡¤¤D455…#GŽ‚T*>øàA.— ;vì_|ñ… —Ë…/¿üR°´´AÎ;'tïÞ]¸sçŽPXX(Œ3FX´h‘ ‚P\\,èëë Û¶mÊËË???ACCC¸zõªšš*tìØQ?~¼píÚ5!..NPSSA áĉByy¹pùòeA*• ÙÙÙBjjª ¢¢ò)##C ,X°@¨¨¨MMMáâÅ‹õ~½½½…¦zÙuûömáöíÛõÞ>))©î9ÉÌÌ:uê$ìÛ·O(//Nž<)¨ªª ±±±O=>ôõõ¡²²òoÏ{^^ÞÏÑÓÎCC~Fšêù!¢ÆÇéuDDÔ¨är11éˆG@@ö½^½z!55k×®}â9ø'~ÞŸvŽêsêó3BD­K'""j°Š€€;ˆCZÚC¨©©ÀÝÝ+Vxaðàž°²ÒçˆDÔ`!!‰˜={/†·Á×_Oåï‘VæÁƒ}Îö¦ƒ Ø´i6mÚ„7n`Ë–-˜8q"nܸ 4çΫ۾¬¬ ‰ÀËË Éd€ÒÒR8;;ãĉOÝgZZz÷îAƒAAAAAA(,,üÇmOž<ù·2¦->|8.\¸€ÄÄDµ‹Œ;v ^^^O=Ïò´sÔó@DmG:ÑßTWËqãFò£‘Lñˆˆ¸‡êj9¬¬ºaàÀžx÷ÝWЯŸÔÔTÄŽJDmDtt:fÌØWW3ìÜù:Y8µFîîîXµj¾úê+ÄÇÇÃÑÑ ,@nnn½÷1{öl|ûí·°³³ƒ®®.ÂÂÂê®pÖ£G|òÉ'pww‡««+bccÑ¿L:õ©¥ÈرcñÉ'Ÿ`È!PVV†’’ÌÍͱzõjlß¾ý±mW®\‰ùóçÃÖÖöùž„VÂÁÁ«W¯†³³3\]]qãÆ L™2/½ôlmmŸx@WWË–-Ã7ß|==½Çöû´s”žžþÄó°{÷îæ~ ˆ¨HAÄADDâKJÊÁ¥K±¸r¥vm¦’’ jcàÀž<¸' èNbÇ$¢6H&ËÀ”);лwwìßÿ&TTø¾hK1sæL€··w½ïS^^Ž   hjjÖ-ÝP Ayy9ìíí¡««ûØíéé鈉‰lllþqr¹>D—.]……… ®®.ìììššŠÄÄD 2ä¹2Ö×Áƒ1sæL4ÅË®?FY[[×kû¿>'@íè´øøx˜šš>¶ÆÓÓÎANN"""àêê mmí<Ö“ÎQsž‡†>?DÔøX:µS¥ ¼ƒË—ãpùrRSó ¡ÑýúYbèP+ Üff:ÏÞÑ ¸{7&lƒ…….¼½ cGe±#ÑŸ„¦fGØÛᥗì0~¼45;Šˆ¨I±t""‰L–.]ŠEpp"jjä°³3¤I.ðô´†ƒƒ1¸8µ^Õ˜;÷{ܹ“Ÿ%œ LíVn®Ö¬ù/Êpõê\¹÷Þ;ŠN:ÀÚº;FŽ´ÅèÑö02ê,vT"¢F%A;Q{PXXŽ€€8øûÇÂß?ùèÒEC†ô‚§§5† éÅEu‰¨Í¨ªªÁoìEhhŽYŠ>} ÅŽD —‰7ßü{0yòäFÙg^^tî\^ïí+* ¢RS¯mk_ÕH ‘<ýåMi©TU«êá¯rr:¢k×ògçGŽy”O¨û|íÚ]9‚  D¤§çA.¯½M[[nnæ˜0Áöxæ…Ad2²²² ££óܧ-ËÉÉžž¬­­ÅŽBÔn±t""j"‚ &æ~Ý”¹°°$àà` OOkxxXÁÎÎR©Dì¨DDªºZŽE‹~D``<\''±#Q=eeâÔ©=Šèèthh(ÂÊ*ÊÊòÚouµññÚÈÏïGÇltìøìÒ§ºZа0=˜™@O¯ô™Û‡„tƒ‘Q1ôõ‹Ÿ¸M~¾ bbº¢wïÐÖ®hÐc€òrܸ¡•XX@K«þšÏ?~¿¬¬W®ÜÁ‘#!¸v-ùùµU"ôô41p`O¼òŠúö5ƒ¶¶Úc÷MKKCAAAƒG{¢©© CC–ÞDbaéDDÔˆòóK- ²³‹ «Û µ%ÓàÁ½žù®%QkVS#Dzeðûï18xp!ÜÜÌÅŽDÏPRRóç£qìX®\‰‡šš2^~Ù“'»ÂÝÝâ…ß NÄÒ¥?A"‘`×®Ùpv®_ ùÙggpðàu\¿þÔÕUž¹ý¸q[am­Ï?ŸôÔí–/÷Æ… 18wnÕs­1–žþëןÄo¿Eâ•Wìñá‡cuqüÔÔ<œ?…_~¹…ÈÈTVÖŽô’HmxzöÆÐ¡½àæfþ·Šˆ¨¥aéDDô‚d² \¼x~~2„†&A"\\ÌàáakØØt‡DÂÑLDÔö ‚€U«~Æ©SØ¿>ì)v$z‚š9ïàØ±0œ=…ÊÊj j…‰]0b„ :tPzác‚€;.bãÆß0lXolÞ<­Þ%INNúõû«W¿„Å‹=êuŸ·ß>‚;w²püø²§nWVV‰ ¶¡¬¬ ¿üò44:ÔkÿuéR,Ö®=ެ¬¼õÖp,ZäÑèW–­®–ãÖ­œ=‰óçc˜˜ ö¹•H$05íOOkôëg ggSèéi4êñ‰ˆ^K'"¢*/¯ÂÕ« ðõÁÅ‹2¤¦æ¡Kuxyõ~´6“ÕsÿKDÔZ ‚€wÞ9ŠŸƾ}óàéÉ5TZ¢˜˜t=†“'#•U''LœèŒ1cu]ÁÜÜb,[v×®%`íÚWñ曃ô̺u'púô-­­w¶gÏü÷¿¿#:úÓgn›‘‘‘#7ÁÉÉûö½ñÜoUUÕ`ÇŽ‹øæ› 00ÐÆ† 0xp¯çÚW}ü1¢úÂ…Û¸xQ†‡K   …\.@të¦ ww 8;›ÀÑÑ}ú6zFDÔ,ˆˆê!=ý!üüdðõÁÕ« (/¯BŸ>†6ÌÇÛpm&"j÷Ö¯?‰~Ä®]³ñòË}ÄŽCrÿ~>NœÇñãáÉ2`bÒ&8cÂç&¹¢`pp"/ÞeeEìÜù:œwÀ€ X¿~æÌPïû]¾‡éÓw!*ê“zh¡¡I˜4i;–-†ÿûåeü«ôô‡X·îΞÂèÑöX¿¾q§Ü=‰L–€€xøúÆ 88UU5PWªjTTT£C%ØÙÁÉÉ®®æpv6…®n§&ÏEDô–NDDÿ ¦Fް°døù݆ŸßmÈdPSS©»Òœ—— ÿh#"zdÆ3صË۷Ϙ1ŽbÇ!EEåøí·H;†k× ¡Ñ¯¾ê€‰áêjÖ$Ó¾årß|s›7ŸÇðá6øï§CC£cƒ÷³f®\‰G@À» ¥“‘‘gçpüø2¸»[Ôë>ÞÞAX³ævïžÑ£íœõ¯üýc±ví1ääá­·†cá¡Í6Ò¨¼¼ ÁÁ‰ð÷—áòå8ÄÅeBII]»ª£¦FÀƒÅËå00І««ѧ!lm ëµfÑó`éDDôH~~).^”Á×÷6.]ŠE~~)LM»bøp V»^‡¨=nÓ¦óøÏÎcóæé˜2ÅUì8íZUU ®\‰ÇÑ£¡8>r¹€aì1i’+† ³†²²b“;'§+Vx#(è.Ö¯ƒ9s>W±•œüƒޝ¾šŠ©Sû6øþVVïâÝwGcöìúzï½£8|8gά„µµ~ƒùW••ÕØ±ã"¶lñ…¡¡66l˜ˆAƒš}³ŒŒ|øûÇâÊ•x\¹‡üüRtî¬-ÒÓó‘—W©T33ôéc;;#ØÙÕQ\*€ˆK'"j×d²ûðõ½ _ßÛ¸qã¤R ÜÜ,àåÕ^^½an®#vD"¢kÇŽ‹Ø°á ¾ür2fÎì'vœvëæÍ=†_~‰@nn \]Í0q¢3^}Õ¡Y®˜zõj–.Ý”±{÷lØÛ=÷¾–/÷Æ­[)¸xñm(*J|ÿW_ý/ì쌱aÄzß§ªªÓ¦íÄýûù8sfe£­m•–V;åîܹ(¼úªÖ¯‹îݵeß US#ÇÍ›)¸r%/Êpóf  wo}˜™é@UUÙÙ…ˆŽNGvv$ LLºÔ•Pvv†èÓÇšš¼/5 K'"jWÊÊ*x~~µEÓýûùÐÕíOÏÞ6¬vp1'"z¶={®`ݺøä“ñ˜7o°ØqÚÔÔ<=†'‘ ssLœè‚ œabÒ¥Y2üy:ݨQvøúë©èÔéùGÇÄÅebذ/±cÇkÏ=MsÕªŸ‘–ö>>‹t¿ÜÜb¼ôÒf˜™uÅ¡C‹  ÐðÂëI.^”áý÷#'§+WÇ‚Í7åîI Ëÿh$TÒÒBC£# ê ''hi©âþý‡ˆŒLCTT23 Ú°²ê+«î°¶Ö‡µµ>,-õDñ¨¨¨‚† «-šìíšdm "¢¶êupÖ®%K<ÅŽÓn”âôé[8v, !!IèÜY cÆ8bâDg89™4k–‡K°|¹7ï`ýú1˜;wÐ ïsþü}HN~€ßÿ¿ç¾8ÇÎþøöÛKˆˆø¨Á÷‰Iǘ1[0c†;>ùdüsÿI**j§ÜmÝê cã.øòËÉèÛ×¼Qñ"²qñ¢ q¸ví.ÊÊ*ai© k Ü =zè!!! 2Ù}Èdˆ‹ËD||&ªªj ¤¤ssô꥛ÒG¯^Ý`dÔ™_K'"j›âã3ñûï18>÷ ¢¢„{ॗl1l'"z^>>¡ø×¿aÕª‘X½z¤ØqÚ¼ÊÊjøûÇâÈ‘PøúÞ†T*Áˆ6˜8ÑC‡Z‰2ÂäÖ­T¼ùæ>°{÷ìF)¼"#SñòËÿÁ¾}o`ÄÛçÞŸŸ ¯½ö-d² Ï5ì—_"°xñOؼyÚs­)õ,))¹xï½cð÷ÅôénøàƒW[Ü”µŠŠjßÅ•+ñð÷—A&Ë€ŠŠ"úö5Ç!½àáa kk}TUÕ 11qq¸}û>bc3›ÔÔ<‚uuôìÙ ––º°°Ð…¥¥,-uajÚ•#£ˆÚ–NDÔ&ÔÔÈœ_ßœ;ääèÚUÇÛbäH Ô;*‹“ˆ¨Uûå—,]z‹{à½÷F‹§Í¡¡I8~<¿ür……epw·ÀäÉ®xùe;Qxþé§køàƒè×Ï;v¼mmµFÙïÌ™»QPP†3gV¾Ð~ÒÒ¢oßqêÔ ¸ºš=×>¾øâWìÜécÇ–ÂÅåùöñ,¿üõëO¢¦FŽ?‡ œ›ä8!+«—.ÅÂß?W¯ÞAnn1ôô40t¨<<¬0`@ÇÖÁ*.®@\\&d²ûHHÈÂ;YHLÌAjjärŠŠRw©+¡,-uÑ£‡,,t›e 2"j^,ˆ¨Õ*.®€¿¿ .ÄÀ×÷6òóKѳg7Œaƒ‘#máèhòÜÃó‰ˆèqgÏFaÑ¢1gÎ@|ôÑ8±ã´I Ù8~<ÇŽ…!55VVú˜8ÑãÆ9ÁÀ@[Ôlee•xûí#8~<+WŽÀªU#íÿØDŒ·‡/~᫼ ‚€=ÞÁG{îÅíkjä˜7oÂÓqþüê&[ü»°° Ÿ}vaÀ€ظq2LM»6ɱ‹\. 22þþ±ˆGXXärvvFðð°‚§§5ŒÿqM¬ŠŠjܽ›„„lܽ›;w²p÷ní¿KK+;«Á̬+LMu`fÖ&&]êþݹsãœDÔ¼X:Q«rÿ~>.\¨6wíZjjäps3‡—— ^zɶÅÿ±FDÔùùÉðÆ{1}º>ÿ|×iiDYY…8u*LJ#22zzš˜0Á 'º wïîbÇ$%å`þü}ÈÌ,ÄÖ­3áéiݨûŸ8q$ Ž]Ú(û{ùåÍps3LJ>9ZTTŽqã¶@"‘àôé·št´txx2Ö¬ñARÒ¼õÖp,YâÙj¦Ÿ–# þþµ#¡22ò¡¥¥ŠÁƒ{ÁÃà ÖÏ\Ò@Ü¿Ÿÿ¨€ÊAJJ.’’ ))÷î墲² ¡ÑñQ!õ¿“.04ìŒnÝ4Ÿëj‡DÔôX:Q‹Žóç£qáB ¢¢Ò ¦¦Œ¡C­0b„-¼¼zs(6Q ˆÇìÙ{0v¬#6ožÆÂ©””TàìÙ(;†ÀÀ;PSSÆË/ÛaâDgôïߣEÒ={6 +W„¹¹öì™Ûè#®®\‰Ã´i»ðË/+m*Û[oDNN\øBû¹w/£Gÿnnæøî»9Mú³_]-ÇîÝþØ´éþ ¨«¿xasà@Þ~ûvî| cÆ86BÂg;z4 ëן„ºº 6nœŒ¡C­šå¸M)!!/ÊðÿìÝ{\Î÷ÿÇñÇÕ !T*‘¢4ä’cXÈ!Ts>cfcÆ6ÌÏØÌaœ&ç–ó¬œæ\È¡ƒG´) IDAT$Ò9χëúým¾›sõ¹ª÷ývs«Ôõù¼º>Ñu=¯×ûõáâÅ{¿UÔ«HOÏ!&&­4ŒŠŽN!&&íÉÛT?Î*ýZ=½:˜˜è< £tJ—íÕÃÄD}ýºâÿAAx"tA2©©Ùœ8q›£Gorút(ÅÅr:vlгs+z÷n!ùÐTA„êêæÍG º{{s~ýub¥™/£,¢¢’ñò ÄÛ;û÷“hÚÔWW[ÜÜliÜXOêò^èâÅ{L›¶Úµkòë¯hÞܨ\Î#—+èÕkúlÜ8¾L•L§NË8th6íÚ5.“c.\èÍîÝ—ðöžAëÖ¦erÌ—INÎbÑ"o¼Æ!íY¼xp™í(µÜÜΟ¿WBEE%£¥U“®]ŸÎ‚jŽ‘Qù pÿ§œœ‚'T*11©¥aÔÓ®©ääLŠŠä¨ªª ¯_ŒŒêad¤±±ö3ïh‰ÿ/áˆÐI„ •Α#79zô&/F ªª‚£csúö- šªÊƒ)A„Ê*$$ŽaÃÖÓ¢… Û·O¦F ±œùU$'gáçW2<0ðúúu<¸nn¶R¼ …BÁ† §X¾ü½{·äÇGP·nÍr;ßÁƒ×øðÃßð÷ÿ KËezìâb9ÍšÍgùò! n_fÇ9ÒƒˆˆDŽùCC­29î«8qâóç ¨¨˜¥KÝ4¨bº­*RTT2!øû‡pþü=rs °¶6¢GkºwoN‡æ’„9ÅÅr’’2‰‰I#>>¸¸tbcSŸ¼M#..„„ ‹PQ‘¡¯¯…±q=4¨‡±ñT"˜ª: ‚P’9r$˜£Gƒ zH:5èÙÓš~ýlèÙÓºÒÎ*A¨j""qs[C³f†ìÜù~¹îØUäårìXÉ@ð3gÂÑÐPÃÙ¹nn¶tëfYi–âdfæññÇ»9qâ ¸0uªc¹ÍîÞý[ÚµkÌÏ?*—s89ý@÷îÍY¸Ð¥ÌŽ™‘‘‡³óJtukãå5£BÙŒŒ<¾ùæw<=/Ò«W ¾ýv Ô«°óW¤üü".^¼WBED$R»v ºtiVºÏÔTWê2K) 3‰‹K#>>˜˜’PêéûññéÄÅ¥—îÂ÷t¾TIUF™šêbdTòqÆÚèëk)Õ†‚ð6Dè$B¹ ‰åðá`޽IHH,ººµqvn…³s+ºu³ƒÀA”LTT2îîë06Öf÷îie2 §**.–sîÜ]¼½9r$˜üüB­puµÅÙ¹U¥FÏäÉ[ÉÌÌeÆq88X”û9÷ì¹Ä¼yû9}z>ffõËå~ø™™yìØ1¥L™D¿~«pr*®_ÑΟ`îܽ¤¤d±hÑ@FŽt¨ò3/££S% „sçî’OÓ¦ôìiMÖ88XTŠŽÌ¤¤Ì'T¥›FLÌßo3J—ò©««bh¨…±±Î“@ªÞ“@J§4¬ÒÕ«„ÊA„N‚ ” ¹\Áµk8zô&‡ßàÁƒÇkãìÜŠ~ýlèÐÁ¼Ò¼â+‚PÝÄĤ2xðôôê°oßt´´ÊoYUe·w ^#!!ƒ¶máæfË Aí¨_¿ŽÔå½_ß >ýt-Z˜àá1CÃòïœ),,¦sçetïÞœï¿Vnçùé§ìÙs™‹–ù±O e̘MÌ›×3Þ-óã¿L^^!+VcãÆStîÜŒ+†W›9˜……Å\ºÉ©S%!THHµjiЩ“EiU^Afy{º”ïÑ£bcÓŸ ¤ââJ–ò%&f–~}­Z4l¨SF™šêÒ¨‘éÒ°¡n….„¡“ o¬¨HÎ… 9̱c·HHHÇ€¾}K‚¦Ö­M«ü«o‚ •]\\îîë¨UK>³õþ!::oï’àwï&`fV7·’àææúR—÷Æ ‹Y²äw~ýõ “'wcÑ¢6cfëÖ³,Yò;çÏQ®ƒ¢ æý÷·þm¹tŸmÚtúÉ}8Þ½[–ùñ_EPÐ>þx7ññé|õÕ FŒèPíwÅÅ¥=é‚ åìÙ022ò03«OÖôìiM§NUj™pAAÑ“ *ØØÔÒ`êéÎ|¥–.ã«QC­4„25ÕÅÔTÆõhÒDssýJÑ&T "táµäçqút(GŽsâÄmÒÒrhÙÒ„~ýlèÛ×+«²*‚ ”Ÿää,ÜÜÖ “Éðöžž^åìØ)Kii9üþûu¼½¹rå>::š Ô77[lmͤ.ï­Åǧ3uêvî܉eåÊá XqC©óò éØñlËâŃËõ\‰të¶œcÇæ`cS>ƒÜ?ùd/‡]Ç×÷#¬­Ëg—¿—ÉÏ/⇎âáqŠnÝ,ùá‡á—ÿ®oʨ¨HÎÕ«÷K—âݾ‹††*¥!TÓ¦R—Y®är éDG§ðða >. ¤žîÌ'—+Édk?  ê—Qææú4j¤' eJ„N‚ ¼TAA§N…âçwƒ'n‘]“Ò¥sÊ4ÌQAx5))Ù ºŽÜÜB¼½gT١ᢠ ˆ?þ¸ÍW EEEFŸ>-qs³¥{÷æUæ ØùóLŸ¾-­ZlÞ<¡Ìw{™õëýYµê8/.*÷%‰EErš6ÇŠÃ2¤}¹œ£°°˜aÃ֟ΡC³% mðñÇ»HLÌxÒõä Y-Ê"11“€€B9s&Œ´´LMuéÑ£9=zXÓ¥K³j·™MAAQQÉDF&qÿ~ÉÛ¨¨$"#“‰‹K@UUSS]¬­hÚÔ°ô­¥¥¡˜É*¼: ‚🠊8}:Œß¿^4ÙÛ›ãâÒšþýÛ``PWêA„7”‘‘ÇСëHKËÁÇgfµìŒP(\º‰—W ~~×ÉÊÊ£sçf¸¹ÙÒ¿ë*5H]¡P°aÃ)–/?„³s+V®|ºu+vnWff;~ÃèÑ™?¿…œóÝw¿§gÏwøâ‹åvŽÇ³pqYû÷O—4 ÌË+ä‡޲qãiºu³dÅŠá庄±2).–sýúCüýKB¨ààhTUUèÐÁœîÝKB(©ºÕ”EnnAiOxxááñÜ»—Haañ†Qï¼cŒ……˜Û*¼A(õ4hòó+ š²²þšúõk- ‚ T™™yŒ±¸¸t¼¼>¬´CwßÔÝ» xy]ÅË+˜˜T¬­2¤=nní*dvEËÌÌcΜ=?~“ \˜:ÕQ’¹?«VgãÆÓ\º´zõ4+äœÓ§ÿFVVÙï`÷¿BBâpuý™>}Z±zõÈr=׫ ŒböìÝ$%e°x±+ÇÛK]’Òyü8‹Ó§Ãð÷áôé0?ÎÂÈHûITsºvµ*ø '³fõª°ó®^ý»v]äÒ¥Eå~®“'ï0a¯’íh÷¿òò ùþû#lÜxšwß}‡+†£¯/ºÔÿ‹\® 88š€€PüýC¸~ý!2´oߤt)^‹ÆÕnHûËÏ­[¸yó7oÆpçN 99¨««Ò¼¹­Z5¤M›F´oo†¥eTTÄ}X‰ÐIª¡gƒ¦[deåѾ}lCÿþ6Uò•^A„ê./¯qã6sçN,û÷O§yóª¶ääpìØM¼¼®ræL8ššôëgƒ»{{:ujZåŸüý´/Ó¦u¯Ðsß¿ŸDçÎÿÇáÃÓ¶m£ 9ç¼yû9pà*‡ÍÂÚÚ¸BÎù2YYù|õ•/»w_ä½÷:°d‰«x²ÿŠ ·oÇ–$¿zõ> ´iÓ'§wx÷ÝwDÔKË ‹çòåûFqéÒ==JEUU+«ØÛ7ÁÎΜ®]-Ë}ƒA"t„*¬°°˜3gÂñó»V4ÙÚšáâÒ†DÐ$‚PÉ™:uýu—]»¦Ñ®]c©K*s·nÅpàÀ¼NBB:íÚ5ÆÝÝ—¶ÕêIL||:S§nçÎXV¬ΠAm¥.‰… ½9r$˜ó翨ðЯ¸XN³fóY¾|H…Í5*,,fÔ(îÝKâèÑ9JµñÊñã·øôÓ½hjÖàçŸGboo.uI•Žè‚*ññé\¹rŸ«W£ ŒâæÍGɱ¶6¢[7Kºu³¢CsjÕÒºT¡ ˆÐIª˜§¯òúúqìØ-23sKƒ¦þýmÄ.&‚ ÕHq±œ?ÜÉÜf÷î©UêIfLL*>>Axy]%,,3³ú¥sšªË¬ªºpá|°-­ZlÞ<KËR—DLL*;ÿ‹fܸΒÔÐ«× ºvmÆ—_ª°s¦¥åЯßèêÖfÿþéJõÄ999‹O>Ùƒ¿Ó¦õà³ÏúŠÏoèE]P={–„P66¦U~)oYÈÎÎçüùΞ çìÙpÂÂâÑÐPÃÎÎŒnݬèÚÕ’V­Š]ò*): Bø_ß ~ÿýÉÉY´kטK:šDÐ$‚Pý( >þx7~~7ؾ}]ºXJ]Ò[ËÈÈãðáë8p•K—"ÑҪŠAmqw·ÅÖÖ¬Z.qQ(lØpŠåËѧO+V­zºu•c×­¹s÷rîÜ]Ξý\²`cæLORR²ðôœZ¡ç½?‰¾}Wñî»ï°víh¥ûÙܵë"_íKãÆõY³fT•ŸñV22ò8{6Œ“'ï”vAéë×-  DÔ«KHHçÌ™pΜ çìÙ03ÑÑ©MïÞ-pvn…££UµX.]UˆÐI*±ððx|}¯áãȃ±²j€««-ƒ·¥Q#=©ËA$¢P(øì³ýìÛw™mÛ&Ó£Gs©Kzc……Å„àåȉ·P( w︻·§gOëjÝ¥‘™™Çœ9{8~ü& ¸0uª£Ò„÷ï'áèø-+V¼Ç°av’Õ±víŸlßþW®|Yáç>wî.#Gn`öìÞ̙ӧÂÏÿ2QQÉÌšµ‹ààhæÏïÏ”)Ž¢+§Œˆ.¨²‡¿ÇŽÝ"((Š5ÔéÑ£9}û¶ÂÉéêÕaž2¡“ T2±±iøúáãÄíÛ1˜˜è”¾Ê«,+A„òwåÊ}3èß¿õ¿>÷å—>lßþã*ínUQx{âë{´´:t02§© ZZµ¤.OraañL™²•ŒŒ\~ùe;ZH]Ò3fÌØùdúy’.‰ùãÛŒ·™°°å’t€mßþ xñË/c8°M…ŸÿeŠ‹å¬_ïÏŠÇpp°`ÍšÑJ5‡ªªxÚU2 *”¸¸4ôôêàèhE¯^-pt]P¯*11“ãÇorôèMþúë.ôíkCß¾­04Ô’¸Bá‰ÐI*´´~ÿý:¾¾A\¾I½zš ؆ÁƒÛaoßDi^ÕA*N·nß‘À¦M㟠ž¾ùÆS¬[7F)Ÿä¾HTT2^^Wñò $**™fÍ qwo»»-&&:R—Wa¢¢’ a„®ÿùùƒ¯1wî^Z´0aƱJ·1HhhNN?°~½ôA˃éØñüüfakk&I _|áÍž=—Ø¿ºÒòŽfúôßHOÏåÇGàäôŽÔ%Ui·nň.¨2‘‘‡¿ÿ޽I@@¹¹…tíjÉ!íé×ÏF,ÁS"t%•“SÀ‰·ðñ âÔ©P44ÔèÝ»®®¶8:ZUëå‚ ÕÝÑôí» ™L†ŠŠŒ ÆÒ¿kV®<Æ?žàÇG0t¨tKš^GJJ6áíD``u<¸nn¶ØØ˜J]^…“Ëtê´Œ‡sðàGØÙ5)ý\aa1K—þÎæÍg˜<¹‹ TÊÇ“&mááÃNœøDòÆär––óY²Ä•‘#$©¡¸XÎèÑ OàСYJ;k3;;Ÿ… ½Ù·ï 'veÑ"44Ô¤.«Ê{QTÏžÖ8:Z¡§W}vá|SùùEœØÁ‘#Á?ó÷O;žž.µS é8p•®……nn¶ fW­æ4½Œ\®`àÀŸ ަ¨èïk«¢"C&ggV­zO’aدêÒ¥H\]×°oßtºti&u9¥Ö¯÷góæ3}-u)œ?Áˆ˜:µ;  ºœ**’³rå1Ö¬9Iß¾6¬\9\ ñ—ØÓ.¨S§B¹t)’âb966¦ôìi“Ó;¢ ꊋ儲uëYN Ã̬>“&ueØ0{êÔ/z”': BJKËáСìÝ{™ÀÀ(LLt:ÔŽÁƒÛ*õ«–‚ ‚rˆŠJ¦k×ÿ£¸ø¿¾)Kð”—WÈ‘#Áxy]åÌ™pêÔ©‰‹Kk†·—l˜³²Û¸ñ4K–D.ÿ÷µUU•áå5{{s *{unnkQU•±ÿ‡R—òŒ“'ï0vì&BB–)ÅÖê{ö\â“Oö²fÍ(ÜÜl¥.ç¥ÎŸ`æLOTTd¬[7Zé«‹¬¬|NŸ]PoàÞ½D¶l9˾}WPQ‘1|¸='vKïʉ¡œË9u*Œ}û.süø-ÔÕU0 5C‡Úáà`!^A^ÙÇïÁËëê30ÿK&“¡P(þµ«]yS(\º‰—W ~~×ÈÎ. {w+† ³§OŸ–b ñ Ü¿ŸD÷îßý«{í)UUêׯS:ßI:ÊÈ‘’î÷<11©ØÙ-Á×w¦Ò&ß|ãǦM§ñöž‰­­rîh÷O©©ÙÌ™³‡“'ï0gNfÍê%Ã*™çuAõèÑœž=­iÓ¦Qµž—÷_22òؽû"[·žãÑ£Þ}÷¦LqTªNͪ@„N‚PNBBâØ»÷>>A<~œEçÎÍpwoOÿþ6bn… ‚ðÚbcÓèÐa)ÅÅòç~šš*EEÅ4mjÈʕßÙù¬¼DE%ããÄþýWˆŠJÆÚÚˆáÃ;àæfKýúâUö—).–3`Àjnߎya˜øt¾ÓÎï+Ý, …BAÿþ?Q¿~vì˜"u9ÿ¢P(°²úœE‹2fL'©ËJ®û¤I[ Œâر9•f©éÖ­gY¼øw:v´`íÚÑ¢“FIegçsîÜ]üýK’ÇÅ¥¡­­I·nVôèÑœnÝ,•vE)Èå Nœ¸Å–-g9wî.ööæÌë,§2"B'A(CÉÉYx{âí]²S‚¹¹>îîíÅÜ Aá­-\èÍŽçÿ3˜PWW¥¨HŽ“Ó;|òIllL_é˜ …⌌Œ<Ž fïÞË\º‰ž^mÜÜl:ÔŽ-L^ûxÕÙ† §Xºôw^õ!ùÂ….LŸÞ³œ«z=ÇŽÝdÒ¤­?þ -[*çõ0à'Ú´iÄ7߸I]J©¬¬| Z €¯ïGJ=¯ëŸn܈fêÔíñË/céÐA9ºÇ„ç ‰ãìÙpB¸xñùùEX[Ñ£‡5ݺYÒ¡ƒ5jˆnT€ÀÀ(V¬8ÆéÓa88X0w®3:5•º¬JM„N‚ð– ŠøóÏöí»Œ¿µj©3p`[1·BA(3II™´o¿ø_˯ÔÔT‘Ë常´aöìÞXY½ú|@oï@‚‚¼ò“p¹\Á_ÝeïÞË9Œ\® OŸ– ÒžîÝ›£®®úZß“P²©È»ï~ÿÜeu2™ 55……r5Ò£oßV ÜŽÖ­_-T¬r¹'§hÖÌqR—ó\sæìáÑ£öí›.u)ψ‰IÅÙy¶¶füúë„J³ü)##—Ù³wsòämæÍëÇôé=•®Oøo¹¹\¸p3gÂð÷!""‘Zµ4èÔÉâIeEÓ¦R—)¹+Wî³bÅ1Ξ §S§¦Ì댃ƒ…ÔeUJ"t„7ôtÛgŸ@23óJçVôêÕ‚š5Õ¥.OA¨B–-;„‡Ç©Ò.'uuUärC‡ÚñÑGN¯5ü4;;Ÿùóàåu€èè•/|¢‘ÈÞ½—9pà* éØÚšáîÞžÁƒÛ¢­-ýPæÊª¸XNÿþ?qçN EE/™”Éd¨ªÊ(.Vм¹ƒµÅÙ¹¥Òn8âëÄÌ™žøûF³f†R—ó\§X¿ÞŸ7–H]Ê¿=ÀÕu “'wcÑ¢R—óÊJfÇaÙ2?ºwoΚ5£Äîv•PttÊ“.¨PΞ ###SSÝ'Ëð¬èÒÅ-­ÊÑ…W._Žäûïrþ|]º4cî\g¥™ WYˆÐI^ÃÓmŸ÷î½LDD"ÖÖF j«k[ ëI]ž ‚P¥§ç`mýPÒÙ$“Á˜1øàƒ¯½tûÆh¦LÙF||zi€õ_ÕÓÒrðñ dÿþ«\¿þÒåsâð²±~½?ß|ã” úÜÎÎŒÚàìÜJé—æÉqtü–öíÍX½z¤Ôå¼ÐÓAç·n}ƒ®®ò c÷ödæLOV¬ƈR—óZ0mÚvTUUðð§TxÂë)*’ÅéÓa„ŠŠŒöí›Ð½{É,(Ój9DþüùV¬8ÆÅ‹÷èÛ·‹ »Ý½": ÂKsìØMöí»Ì©SaèèhââÒ–áÃí^yf† ‚ ¼~þùgÎ;'uÏ¡C||IG‘‰I&&&Yhh<˜øG}D—.]žù;…BÁ† §ø¿ÿ;P:Œ\]]•©S»³`Á ‹ñ÷/Y.þçŸ!¨««Ò§OK†·§sçfåú$ãܹsüüóÏåv|e““£NPPIx'“)ÐÖÎG_?\ÔÕŸm_fß¾}eUâ+Ù½û"óçàìÙÏiÔH¯BÏýºââÒ°µ]Œ—× :vTÎ%2Ë—fÆvíšFçΕk†Ljj6³fíâÌ™p¾új &t•º$¡ <~œÅ_Ý% ”€€3ÑÓ«C¯^-øâ‹Õr|@@(‹äþý$&MêÊìÙ½E‡ßKˆÐIž#22‰]».²oßeRSsx÷Ýw1¢={Z‹¹‚ UȨQ£ØµkC‡•º”).VáúuêÕËÇÌ,5µû÷ïÇÓÓ“‘#ÿî:IJÊdÆŒüõ×]äò?ì33«“Ó;øú‘’’½½9ÇÛ3`@ë Ûmu×®]Œ5J)¯AYS(dܾ­Gq± “lttrQU}»‡ãû÷ïrìŠ{X_PPD—.ÿGÏžÖ|ûmå¸nÍ›ÎçŸ`ܸÎR—òŸ S¦lãÒ¥HüüfUº. …BÁúõþ|÷ÝúöµaÅŠá•f8ºðr …‚8N å›oü00¨ËªU#èÙÓZêÒ*\Q‘œ;/°bÅQæúã IDATÏïÏȑղìUˆÐIþ!?¿ˆÃ‡oàéy‹#15Õå½÷ì1¢ƒX>'‚PE5 OOO‰+ù·„„ j×®A:¯þÈd²gB§S§BùðÃßÈÊÊî°j€–-MèÛ×F²ÝVŸ†NÕáai^^!ªª*eú–÷ßÖ­gYºÔóç¿ AƒÊñiàÀŸiјåˇH]Êsåæà꺖ÜÜüüfWÊY:/ÞcÚ´íÔ©S“-[&*í<2áÍedäñùçûñõ½ÆøñY´h`µœi›‘‘˪UÇÙ²å,66¦,_>„V­J]–Ò©Û#B9 ãË/}hÛö+>þx7õë×e÷?ÿ³g÷“ ‚ CC­Wœþ©°°˜¥KgÔ¨¤§ç¾0pRSSaøp{>þ¸·ÒϪ jÖT¯ôÓ¹¹¬^ýãÆu®4@óæ —ºŒªUKƒ­['’••ÏÔ©ÛJ—ÂV&œ8ñ)††ZôïÿGŽK]’PÆ´´j²nÝÖ®—×UœW'uYNK«_=˜ãÇ碦¦J¿~?òÅÞdfæI]šR¡“Pmegç³wïe\\VÓ³ç÷„2cÆ»~‡Ç8ºu³-’‚ B¥“œœG¿~«Ø¸ñ4 …â?—Ôý“\®àر[TPlÝzŽìì>üð]©Ky-––  SîÐ ÀÈH›Í›'pùò}¾üÒGêrÞˆA]öìù€÷ÞëÀ”)ÛøöÛÕ2@^ÌÕµ'O~†¶¶&üÄÁƒ×¤.IÖÖFøøÌ`åÊ÷øý÷kôìù=þþ!R—¥4Dè$T;ÁÁÑÌ›·[Û¯ùüó4n¬‡·÷ Μ™Ïôé=©_¿ú ÄAª†:uÚóí·7¹};ö•ŸàÉå .]Š$#C¼2+¼\ffk×þÉäÉÝ*Ýc&+«¤¤d“””)u)/Õ¶m#~üqÛ¶ýÅöíI]ÎQWWeéRWV¯ÉƧ;vii9R—%”±† u8pàCFŽtàƒvðÕW¾U¿€Q&“1l˜§NÍÃÞ¾ £Goä£<ÅÏ<"tª‰ŒŒý´/AA_³víh,ÉDW“ ‚P9åçñÅÞÔ­Ûå…_§¢jjªhh¨•þQUU¡¨¨˜Ó§C+¨Z¡2Û¸ñ L›Ö]êR^ÛÓÙB•¡Û `àÀ6ÌëÌÂ…Þœ;wWêrÞØ!í9xð#îÞM _¿ ‰•º$¡Œ©©©°d‰+ë×ÁÓóǯ¯ányÐӫúucضmçÎÝÅÑñ[Nž¼#uY’R“ºA(OQìÜy?¿ëÈd2\\Ú°l™¶¶fR—&‚ e¦F 5–-sãÿþÏmÛ~cÐ 7ÒÓsÉÍ- /¯Ì̽'õêiJ]Îk34ÔB[[“ððxºti&u9¯döì^Ü»—ÈäÉ[8rdææúR—ôFZµjȱcŸ0mÚ\\V³rå{ ÔV겄26xp;¬¬0iÒVúõû‘;¦`mm$uY’èÝ»%MùòKoÆÛÌèÑùê«AhjjH]Z…¡“PåddäqàÀvî¼@hh66¦|õÕ n'¶mAÞZDDçÎcüøñezÜììlV¯^Í‚ Þê8êê*hkk¢­]ùBWU^×@ euÝ+ºuþÔ¨¡ÆäÉݤ.åYYU޹NOÉd2~øaC‡®gôèøùÍBO¯r-k|JW·6»wOeÙ2?>ø`ÁÁÑ,X0UU±ø¦*±¶6æèÑ™©ËykƒµÅÏoÑÑqv^IHHœÔ% eL]]•ÁGõbîÜ}|ûíáj´ü/CC-<=ßgÁ‚,[æÇ¸q›IM­«„J)))“Ÿ~:A‡KùàƒÔ­[‹½{?àôéùL˜ÐUt5 ‚ åJ.—óÑG¡¥¥…Ë—/àñãÇ899±jÕ*ŒÑ××gË–-Ì;}}}ŒŒŒØ³gÏ ½yóf7nLíÚµ™0aryõÛèU”Å5>|8‰‰‰ >œ³gÏ’˜˜HŸ>}رcÚÚÚܹs‡Ý»wÓ´iSÔÔÔ022â‡~xæ<žžžXXXP»vmÆOqqIÊÂ… Ñ××§FôèуG½ðûQæë›Æo¿ç£zQ³¦ºÔå¼KK#ÒÓsˆ¯|A£µµkÖŒæÀ«¬]û§Ôå¼µ’eXs°°0`РÕüñÇm©KʘL&ã“Oú°zõH~ù%€yóö¿òΪU‘L&cêÔîx{Ï$$$ŽÞ½Wø@ê²Ê„J%00Š?ü ;»%üúëYÜÝm¹pa![¶L¤kWK± ‚P!®^½Šºº:ñññx{{óÝwßqàÀ  --˜˜–,Y¤I“Ð××'11‘9sæ°hѢ緸¸˜+W®p÷î]‚ƒƒñññáôéÓøUeq <<<¨_¿>888PPPÀÙ³gñõõåèÑ£2aÂV¬XAvv6{÷îeþüù$%%QXXÈÙ³g9sæ !!!ܺu‹ƒâïïÏñãÇÙºu+.\ 99---–-[öÜïEÙ¯ûO?ÀÐP‹Q£¤.å­5o^²ƒ]xxåëvèÕ«_}5ˆåËsâÄ-©ËykÚÚšüöÛû¸»·gâÄ-lØpJê’„r0dH{¶n„—W 3gzVê%¢eÁÖ¶1'N|B‹&¸»¯eçÎ R—T®Dè$(½¼¼Böì¹DŸ>+qqYMTT2ß?ŒÀÀ¯X°` êH]¢ ‚PÍhkkóí·ß¢©©I—.]˜1c»víJ:pæÍ›‡L&ÃÉÉ 555>ùä“Ò33_¼ô7ß|ƒ††´hÑB,ýz޲¸ÚÚÚ¨¨¨ ­­ºzIOnn.k×®¥cÇŽÔ©S‡óçÏ3xð`jÔ¨¹¹9êêê¥×¤  €¯¿þ š4i‚ éééäå域OݺuÙµkWi'Öó(ëuŠJfïÞËÌ™ÓuuU©ËykzzuÐÓ«S)—Ø=5yr7ÆŽíÄüÆÍ›/î « ÔÔTX¾|K– fÙ2?æÎÝ[íC‰ª¨gOk<=ßçÏ?ï0yòVòò ¥.IR::µÙºu"³g÷bþüý|öÙ¾*ûs/B'Ai=|ø˜o¾ñÃÖv1óç ys#þ˜Ã‡?fØ0;44Äæ‹‚ ‚4,,,JC €–-[÷÷L’Úµk%­ô5jÔ@MM­ôãQUUE_ÿï-ÑEïó•×5PQQÁØØ€5jHŸ>}°°°ÀÕÕõ_ËÞŒŒþÞüé± À!CèÔ©7fÖ¬Y¤¦¦>÷œÊ|ÝW­:Ž©©.îîí¥.¥ÌT¶ìþËÒ¥nØÚ6füø_‰‹K“ºœ21aBWvî|ŸC‡®óÞ{¿––#uIBsp°`ÿþéF1zôFrr ¤.IR2™ŒÙ³{³mÛd~ÿýîîëHL|ñ S•‘¥¢P(8u*”qã6Ó©Ó2¼Æ´iÝ üŠÕ«GV»í%A唜œüÌlj‰‰èêêJTMõT^×àŸ¯¯/_|ñ .$<<œ+W® ©©ùÒc( V®\ÉãÇÙ¿?yyy¸»»¿umíîÝ||‚øôÓ¾¨©U§ U!tRSSaóæ‰Ô®­Áĉ[ÈÍ­OÞ­øý÷YÄÅ¥Ó¯ßDD$J]’PÆllLññ™É½{IŒ³±Êüì¾ '§w8rdéé9ôïÿc•¬_u~{•Zff›6¦K—匵‘ÜÜB6ožÀÅ‹ ™9Ó =½:R—(‚ ¥¢¢¢8tèP²å½‡‡ýúõ{íãøúúrëVåŸË"…²º/òèÑ#Þyçºv튪ª*.\ ##㥷ûî»ïèÞ½;jjjØÛÛ3vìXbccK?_Y®ûŠǰ´4ÄÅ¥Ô¥”)KËܽ[¹C'-­šìØ1…GRùðÃUfg0KË:4CC-\\VsæL˜Ô% e¬Y3C˜NddcÇnÁ`n®Ÿßlš65`ðàŸ9}ºêüÜ‹ÐIÔƒùê+_lm¿fÅŠctïnÅéÓóÙ·ïœ[¡ª*~DA„ò—ÎÉ“wxø°ÖkßÖÁÁ9sæàè舥¥%7æý÷ßíãÌž=__ß×¾Pv×ÀÀÀ€3fø¯Ï 4ˆéÕ«K—.ÅÜÜœO>ùä…Ç7nÑÑÑØØØàääİaÃXºtiéç+Ãu¿};†C‡nðé§}QQQžå~e¡ys#22òˆ‰yþ’ÇÊÂ̬>7ŽçÏ?ï°|ùa©Ë)3ººµÙ·o:ÎÎ-=z#;vœ—º$¡ŒYX°oßtÂØ0¡êtë½§A²‹KÆŒ©:?÷2EU‰Ä…JåêÕûlÜxš£GobdTI“º1r¤uëÖ”º4A¡’+Ù=ƒøøt>L!,,ލ¨dbcSyü8›ŒŒ\òó‹ž¹£c2»wÿöZçÉËËãÂ… Ô«WvíÚ•å·ðÆd2žžžŒ9RêR^Ë®]»5jÔkwj”Å5HJJâÚµkØÙÙ¡£óïÍI222¸|ù2ØØØMdd$ŽŽŽ/—/_&//Ö­[c``ðFõ½Š7½ÿ^dܸÍ$%erøðl¥š1UÒÒrxç/ðôœJÍ¥.§Lìß…Y³v±zõH†µ“ºœ2µ~½?ÿ÷‡7® K– /JW1aañ ²ŽV­²}ûä*±aAYX¿ÞŸeË1{v/>ý´¯Ôå¼1‰Y¨0EEr޹‡Ç)®]{ˆ­­ëס_?ñËCAx©¬¬|âãÓILÌ ..„„§ÁR*=&11ƒÔÔŠ‹åÿqk5kªQ»v ëQ³¦2™ ÄÄ$!“ý×m^¬fÍšôèÑãí¿1á•Å5Ð××§wïÞÏý¼––NNN¥›ššbjjúÒãÖ¨Qƒ®]»¾UmR |ÀÜÆÓsj• œ´µ510¨KXX|• †µãîÝæÎÝ‹‰‰:5•º¤23}zOÌÍõ™9Ó“˜˜T~ùe µjiH]–PF¬¬°ÿt†]Ïûïocóæ â¹!%?÷&&:|ô‘'g±l™{¥½_Dè$”»ŒŒ<<=/°eËYâãÓé×φ%K\±µ5“º4AA Ÿ^ú'!¡$TJLÌ$..¤¤LbbRÉÍý{{e™L†ªª r¹¹¼¤»CUU=½:èèhR¯ž&µj©QX¨ ==›¸¸tRR²ÉË+$##—FôhÒD ü€ª÷ÄZÞÔ÷ßÁÞÞ¼Ê2ÿÅÒÒˆ°°ª5¬÷óÏû‘ÈÔ©Ûñó›…™Y}©K*3Îέðòú±c71lØzv옂ŽNm©ËÊHóæFlß>™#6ðé§ûX¹rx• ¼_× AmÑÖÖdÒ¤-¤¦æ°víèJÙ &B'¡ÜÄǧ³iÓivî¼ÀÈ‘LšÔ† ÿݺ.‚ TM™™yÄÅ¥W(ÅĤ>éTJ'66„„t’“³J¿^EE…ºukR«–:……ÅdfæQPP²®V- 5Ò¥Aƒzhjj “ÉÈÍ-àñãbcSHLÌ 11uuU6Ô¥I“úX[7ÅÜ\Ÿ&MêcfVSSÝg^- ßW±wJ9RQ©ABB®Ôe•Øùóœ=Ž—× ©K)WVV  Š’ºŒ2%“ÉX·n4nnk3f‡Œ–VÕ]accÊÁƒ³5Ê—ÕìÚ5•Fô¤.K(#íÚ5æ×_'2j”ººµY¸ÐEê’”‚££ûöMg̘MŒ³‰­['VºN?1ÓI(sááñüòKÞÞèêÖáý÷=º£˜×$‚P…( ’’²ˆO#>>ØØtJ‚¤¸¸’÷cbRÉÉù{0hÍšêi£­]‹š55É   ˜ÌÌ\’’2IIÉ@]]SS] µ¨[·&ªªªäå’žžÍ£G©$&f ªª‚©©.ffõiÒ¤þ“`©$\jØP÷•_ 5jžžže|/U¿ýö>šš•'xNB™¹rå>ëÖùóÇ·iÖÌᅥ››m•ûE'‚PÕŸN\\Ú“%oÄĤ’N\\zé<¥ÂÂâÒÛèèÔÆÐP m5ÒÅÚÚUUyyEddä’œœÉÇ)DG?æþý’ùIÆÆÚ˜˜èÒ¸±+HKË&66¨¨d"#“PQ‘ѰaI°Ôª•)..m±°0 I“ú4j¤÷V¿cÂÃãñõ½F` mÛVþ]¬äòlŒ5iÕÊŒÜÜ~þùRR²ÑÔÔ ];3:t0ÇÞ¾ mÛ6¦NR—+(™€€P®\¹Ï¡C³¥.¥ÜYY5 ;;ŸGR15Õ•ºœ2ed¤Í¶m“Œµqs³•º$¥`iÙŸ ²Ž‘#=øí·)•¦©C„NÂ[‘ËœvvMغu"NN-ªÜöº‚ UAVV~i˜T²Ä-•„„ bcÓžÌSJ/í$‚’n¢úõëbb¢¡¡66¦ôéÓCC-ŒŒ´ÈÈÈ%22‰ˆˆDÂÃã¹|ù>™™y@ÉÀ^3³úÔ¯_‡Ö­MiÙ²!ÙÙù$%epÿ~2±±‘hiÕ¢iS,, èÙÓss}ÌÍ °°ÐGC£ì®ÄĤrðà5||‚¸};† ê¡­]ˆ\®¼]@¯C.ÏÅÈH“ î‘™™GëÖ¦ j‡¶¶&÷î%²oßeV®<†ªª VV °·oB›6ißÞ ss}©Ë$¤P(øî»#ôêÕ‚víK]N¹³²2JvΪj¡@«V ùå—1L˜°ss}¦Lyñn‹•M­ZlÙ2‘yóö3fÌ&V®|!CÚK]–PFFŒp >>ƒ?Þ]º4“º$¥`fVoï ºž‘#7àé9­R,¡¡“ðFŠŠäøú±víŸDD$àäÔ‚ƒ?Âή‰Ô¥ ‚ T[……ÅÄÅ¥›Æ£G©ÄƦ›úÌÇÏû©QC ##m4¨‡‰‰ÍšbdT##m ëab¢¾~]d2ÑÑ)„…Åq÷nááñøù]çîÝ„Òås Ô{²$®ämAA©©9DG§pýúCÔÔT05Õ£iSºvµdܸÎXXд©!õë×)·û%%%?¿ëøúqåÊ}´´jÑ¿k/ŒƒƒcÆŒ.·sW´ÂÂDFŒhÂСÃ9{6œ#G‚Ù¿ÿ ))ÙX[óÞ{pp0çñãl‚‚¢¸zõ»v]¢  =½:ØÚšaggFûöMhÝÚ”š5Õ¥þ–„ rìØ-nÞ|ĪUs¥.¥BhiÕ¤Aƒz„‡ÇãäôŽÔ唋޽[òùçýY²äw7Ö£wï–R—T¦TUUX±b8FFÚÌšµ‹øøt±« ™=»÷î%2yò||>ÂÚÚHê’”B£Fzx{—t<µ={> vmåî\3„×RPPÄž=—Y¿ÞŸØØTÜÜl™>½'–– ¤.M¡ÊKLÌ, ‘J‚¤”'3”Òxô(ÄČҙ.êêªk?Y¦ƒ‰‰ÆÆÚ•|lh¨…®î³;ÿËyðà1aañDD$Oxx<‰äå•ìgdTrLmíZÈd*äå””ŃÉ¥_£«[»4L²°ÐÇÜ\ŸfÍ ßz9ÜëÈÎÎçØ±›ézêÌ’%ƒ+íÖò³ ‹5ʃ{÷’8thVi‡µP2»mðà5˜šêòÛoS”z¸¸„W’“SÀo¿ÇÃã©©Ù¼÷^¦OïY%Û‘A¤ðt¶HLL*qqiÄĤ“Jll*11%!ÓÓÜ µž ‘6Ô)}ߨXƒºÏŽ[XXLTT2ááñܽ›@hhIÈ‘HAA2™¬ôšš5P(deå_²3”„ZMšè? • hÚÔ tyœ¶¶f…Ügÿõ}„àãĉ·)**ÆÑÑ WW[z÷nñÜW«zèôOr¹‚+WîsäHI“JãÆzôïßš¾}mh×®2™Œsõê}£¸x1’ððxärææú´oo†½½9vvMhÚÔ L†0‹Ðéí¼íýçëÄÌ™žÌ£iSƒ2®Ny-^| îqìØ©K)W……ÅŒ¹ÈÈdNœø=½òë,•ÒÉ“w˜6m;Ý»7gݺ1Ô¨!õTy¸ºþŒšš*¾¾3•:\©hQQɸ»¯£yólÛ6Yig)‹ÐIx¡ŒŒ\¶l9ËæÍgÈÏ/bôèŽL›ÖCC-©KA¨4ž.{‹‹K/íNúg·RL̳ËÞêÖ­ùL‡’‘Q½'Á’.FFõ06Ö~å9GÑÑ)„†ÆÇ;1„‡'pï^"……ŨªªÐ A=êׯK­Zê—òÎÍ-Y6g`P—¦M Kg,5kVÒ½Ô°¡®Rì†&—+¸xñÞÞ9LFF.vvMpuµÅÅ¥5::µ_zŒê:ý“B¡àÆhæðáDE%cd¤Mß¾­èß¿5ööMJ»22ò ŒâòåH®\¹ÏõëÉÉ)@[[;»&ØÛ7y«%y"tz;osÿÉqtü–öíͪ|ÇÏÿÚ½û" úp÷î·U~éãÇY¸¸¬.Â]UŸ¸_»ö±c7•> WöeG«‰‰IÅÙy:5eƱUnÇÉ·‘ˆ«ëììš°qãx¥xlö¿Dè$ü§ÔÔl<>¢"9**2LMuiÖÌKË4mZ.5mj@½zÒt-½ÌÑøúqðà5âãÓiÑÂW×v Ücã×k¿>| >>{•*tR(àMS>‚M›¶2iҘ׾mHH,‡—t@…†ÆQ¿~œK¨Î›=ó@¶¨HÎÍ›¸zõ>W¯–„QO—äµn݈öícooN»vf¼|IÞÓÐdß¾}¯]·Prÿùúú¾Qè´gÏ%æÍÛÏ™3ŸÓ¸±^9T§¼àâòçÏ™Y}©Ë)w‘‘Iôë·Šwß}‡µkGWÙ'î‰ ºž† µÙ¹ó}¥ý=&¼žË—#:t=³fõbΜ>R—£TBBâpuý'§¬Y3Jéþm‹ÐIxFZZ§øõ×3hh¨1ujwÆïRi¶cA(k……ÅO£Ô']I©DG§ víèëk¡©ù´s)‡¤¤’ÝèÔÕU±°( ”J&C,,J–ÄU†Ñ‘‘IøøâãDddffõKƒ¦fÍ _ûxyy…¬^ýëÖ 6v+ÅÅeVk­ZVhh“žðÚ·ÕÐ0BK«))ÞÈåy¯u[MÍÖ÷bÁ‚ŒÝé[íïÝKäÈ‘`&88ÚôîÝ‚þý[Ó­›åvÚ=]’wùò}®\¹_º$ÏÔT[[3Ú¶m„­­-[šüëöOC'áí¼îÃúÂÂb:w^FÖ|÷ÝÐrªJyeeåci9ŸmÛ&U¹!ÛÏssoNÉ IDATîÜ]Fò`æL'æÎu–ºœróðác† û-­šìÚ5­\7«*ή]ùôÓ}lÚ4ž~ýl¤.G©œ?Á˜1›˜4©+  ºœgˆÐI ==‡O³yóÔÕUùàƒŒßE´¤ ‚Påå畆HÑÑ)îÙ³áÌ›·ŸääLæÍëÇ„ ]ËtyÍøñ¿¢¢"cË–‰¯}ÛÔÔlœœVв¥ Û¶Mz­2##—Ÿ~:Á–-ç06Öfþüþ¸¸´~« 3::?¿ë=LPÐCêÔ©“Ó;ôëgCÏžÖÏ]¦“‘‘ǹz5Šk×ø€ÔÔl44ÔhÕª!íÚ5ÆÖ¶1¶¶f˜˜è¼q}›ۺõK–äüù/ªí€^;»%Œ×¹Zíz¶}û_,XàÅš5£ps³•ºœr—Æðá¿°ÿt ëI\‘P-òa×®‹:4»ÊÆS'NÜbÒ¤­|óãÆu–ºœR"tªæž†M¿þzUUU¦MëÎĉ]EØ$B•‘“SP =íVúg×RBÂßÝ-uêÔÀÔT—† Kþ”¼¯óän¹¾Rš––í[¸u+öIÀôˆˆˆDŠ‹åÔ¨¡Fݺ5Q( ++¯´³JO¯VV%Ëá,-”.‰«ìOÓÒr8|ø>>A\¼x:ujÒ¯Ÿ nníèØ±é[íJ”œœÅâÅñòºJß¾­X¶Ì Êö‰HAA-Z,dáB—7~Ðwùr$îîëøòËL™âøÚ·‰IeùòÃøúѶm#>ÿ|:5}£Zþ)..£Gorøðÿgï<££*»(ü¤Ð{ ¤Bzot¤C(itQ쀈(‚‚4CSP±|‚Šˆ(==ôNhé½Ò{ïÉdf¾“Œ  ”$3Iî³VV 3¹÷$™rßýî³·nÝ£ukuÆ3ÃÑÑš ÌÿÓS+@%˜Ldd5544:co¯W+DõÃÚZ‡öí›g挲PY)bذM¸¸Ø°qãtE—£0^~ùG:wnÇ÷ß?yKjSfÆ“ìÛwcÇ–`o¯§èrŒÜÜR^xáJK«8|ømtu[V isD,–0wînRSóñó[NçÎBGÎýìÛwµkóí·ó˜6Í^Ñå‚èÔb).®à§Ÿ.ñÓO—PUUeáÂ1¼ñÆ(:vÄ&¦EYYÉÉ2‡RrrÞ}â’LXÊÏ/“ß·k×öhkwCG§;ZZÝÐÕí!ÿ·ŽN·FË}ÈÈ($44•°°TBCS M‘O…kÓFuuU**DH$RTT@[»††µÓ_¦æ”SQQQÍéÓ?ÀŋѨ©©âà`ÁôéöŒgöÌ2©TÊ¡C7qsó¤}ûÖlÙ2 ‹zªþA._Žá…vqûöúgrð|óÍYvìðÃÃã=lltžêáái¸¹yrùr ¬Y㌱qŸ§®é~rsKñó“ Pׯǣ¢¢Â¨QÆ89Ù0q¢Åcå@VTTšJ@@¢\ˆÊÊ*B]]SÓ¾ Ø;;™¥¯ß«^êñÃرÃÿµôêõß¹[Í77O.]ŠáÌ™Š.¥Q‹%¼ñÆ^ñõýmíæë6,**祗~$=½ˆ?ÿ|»EMhl®äå•âà°[[]öìyMé2ŒÍæÍ^üøã%ŽWQYZ••"~ùå ß©TÊÂ…2g“Ù$  ¬ˆDâZAIæVJJÊ«u.呜œO^^©ü¾½zuªt(Õ¹—!¬× LÁÁÉܸOTT&ÅŨ¨€ºº55b¤RÙ¿uu{`fÖCÃÞrÉаiä-= "‘˜K—b8y2S§Â©ª1r¤1Ó¦Ù3eŠu½ý½bc3Y¹ò‰¼þúH>üpJƒ:z7ntçüùh.^\ùLÇ‘H¤Ì»‹¤¤‘H¤deÉŤää¿KIIydeÉ3•:wn‹¶vwtu{ «Û]îTªû¿¢G@gf”Ä•+qÜ#!!Wž³T‡šš*}ûvÁÊJssMŒ505íKÿþ½š\ÞÒÓ Kð÷çäÉ ||B)*ª`àÀ~L›f‹‹m½¶0VVŠøæ›³|ÿý9ÌÍ5ùüó9XYi×ÛñŨQ[˜0Áœõë§>ó±rrJppø‚¡C صë•g:–D"åðá[lÛæCE…ˆ÷ߟÈoŒ|ê°ñGQZZÅùó‘xz†pþ|ÕÕ5 Ü''¦L±zâöO‘HLXXª<*00‰ä优#Œêå˜W¯Æ2wîn6mšÉüùßùxeeU|÷Ý9vï¾HŸ>]X·Î•)S¬ê¡ÒRQQÍùóQøø„röl$¥¥UØÛë2eŠ5NN6èé=]¾JNN‰\„ H$$$…²²*:vlƒ­­lJ^]FTÂÔªû)**gÈ7Þzk4Ë— cÇËË«12ZÅÏ?¿Ö`Ïe'00‰Ù³ÿÇܹCps›¡èr‘HÌ;ïàâÅh~ýõÍzɺPR©” öqçN"§O/Ö¸#7·”I“v`nÞ—_}Sa¢² :5cN gÛ6â㳘9s +VL¦Ã4"‘X.&%&æ’œœGRRII¹$'çËÝ>jjªhjvEG§»Ü¡T'0éêv§wïÎJ×—/‘H‰ÏæÌ™pnÜH &&ƒììbª«ÅòûtèÐmíîXXh3|¸ÖÖ:kÔë$»¦Hhh îîAxx“–V€±q\]m™6;ÁþoìÛw 77O""Üêõï¿m›»v]ÀÛ{ææšõrÌ´´6mòÂÝ=ˆaà ذa–– ×rR]]Ãå˱x{‡púteXZjáè( ŒŒ4žúØb±„˜˜Ly6TPP2ññÙH¥Rúõ뉶¶ºØØè`e¥Ý¢¦lÛæÃþý×¹qc­¯PË!Ÿñâ‹Cyï=E—¢0Nž äw~cóæ™J5õª!‹%,[v/¯öî}ƒÑ£M]’À3P\\É”)_¢¥Õ•C‡5k·ÞÓ•«ëN^ziŸ|òìì§Aš!IlØp‚ÀÀdœœ¬ùè#G!0O@@à™),,— I2q)ädÙ¿32Š‹%€,¬»_¿žèêö _¿´ÀijvUZ—T*%5µ€˜˜L®_'00‰»w³)((“·÷©©©Ð­[ôõ{1`@&L0ÇÖVGám}ÊDLL&îîA¸»qï^zz=˜:ÕŽ©Sí03«±äa4fPø¿ñÊ+?£¦¦Ê/¿¼^¯Ç‹%Ìžý?rrJðñYV¯bAÝuCPP2sæ fåJG44:×ÛñFM¬ÍÒÛ;?¿0²³K02ÒÀÙÙgg›zy¬WÈÛñBCSN&'§DÞ–'¢t°¶ÖÅÂB³Ùf§ÝOnn)ƹ±lÙD/§èr”†ùó¢S§¶-n‚Ýßùê«Ó|ùå)ZȈÆŠ.§A‘J¥,_þ'îîAìßÿÏ='8žš2i¸º~Ã[obÕ*'E—£txy…°pá>~øáe\]íýü‚èÔŒHLÌeËo¼¼B6Ì€õë]±¶~ºi7-±XBZZÜ¥$•òäî¥ââ ÔÕUÑÔì&•d.¥ôë×=½M"+.#£ØØ,¢¢2j§Ç%“ššÿ€{IUU…Þ½;cb¢Á°a†Lšd…‰IýLýjn$&æÊ…¦èè úö튋‹ S§Úcg§Ûàç¿{7›?<Ì;÷%(üQTW×`a±–µk]Ä)•UÄĉ;2DŸ|µ^-•JqwbÓ&/ ËY¾|rƒä== ‰DÊíÛ÷ðñ ÅÛ;„ôôBúõ뉓“ NNÖØØèÔ›2=½BB’ I!88…¢¢rÔÕU11é+wDY[kcf¦©´"ùÓ²q£;Çàï¿VËïÃÍÍ“‹£9{öCE—¢P¤R)ï¾{³g#ððx¯Þ&]*+b±„>ø/¯~ÿ}¡ ÔÄùóÏ[|ðÁìßÿãÇ›)º¥cÓ&/~ùå žžïÕ›cúqD§f@~~ß~{–_~¹Bÿþ½øøc'&M²TtYJHiiÕBÒýÿNK+g+uìØæ!éþkiuk2 ±œœ¢£3ˆ‰É$66“¨¨L¢£Ó(+«dí~b±èÕ«3VVÚŒaÄðᆘ™i¶ˆ`ï§%=½`<<‚N¦Gޏ¸ØàêjÇàÁú¨ª6|›¤H$æûïϱs猌4ؾýy…n¶\¾à /ìâöíõ ÖÎ~õjsçîâ“O¦ò曣êýø••"¾ÿþßMÍ®|öÙ ÆŽ5­÷ó< ©TJ``2¾¾2*))-­n8:ZãèhÍ Aýëý±•˜˜KhhJ­•LXX*¥¥U´n­Ž……f­¥#o›mª­™™E ¾‰µk]xýõ‘Š.G©øóÏ[|üñQââ¶6Ù¿o}Q]]ÌߑŸ_†§ç{Í>M,–ðÎ;¿qþ|$¿ÿ¾û+º$gàƒþÀÏ/ŒS§–+|b›²!Kxù埸w/_ßuˆ„ :5aD"1{ö\áë¯OÓ¦:Ë–M⥗† ‹$Nqq÷îå’˜˜Ë½{9$&æ’Kbb¹¹¥¨¨¨ ¡ÑY.$É>þj‰kj™••¢ZQ)ƒ¨¨t"#3ˆŽN—ÿ¼íÚµ¢mÛV”•UQ]-¦]»V СC 4¨?66ºÍzTt}‘“S‚—WîîAܹsNÚ1eŠS§Ú1b„Q£.ÖùðÃÃ$%å±bÅdÞzk´Âßÿ6ntçÂ…h.\XÙ çÙ¹ó _~yŠãÇ—0`@¿9GZZëןÀ×7  >ýtýúõlsýááirT\\½{wbòd+œœl6̰Aþ扔„„‚ƒ“åBTdd:Õ´oßKKmlltäúú½”.‹îa¬^}”Ó§#¸~}M‹Ï›û;I8;Íõëkò8W6òòJqtü MÍ®>¼¸Él4=-b±„E‹ösåJ üñ6¶¶ ïÐh**ªqvþšNÚqìØ;-^Dþ;……åL™ò%ýû÷âàÁöÞ%ˆNM/¯6nt'7·”… ǰdÉøŠ) ÐÒø»°tï^. ÙÜ»—K~~ kƒÓÖîN¿~=éß¿gíç^rçR›6MoÑ!•JINÎ':Z&.EEe™Nbb.b±„6mÔéÓ§ ­[«S\\ANN)‰=½ ØŸú1xpLLú"IQQ9>>¡œ<Äõëñ´mÛ  ¦O·gôh“F_¼–”T²u«ûö]eÄc¶m›ýÔÐê›Q£¶0a‚9ë×7lP§T*åå—"::ƒS§–7¨H|õjk×çÞ½/§Ð븸,¼½Cðñ %<ô£woa„î“PZZÅéÓḻqñb4ªª*ŒoŽ««'Z(,pùôép>þøUU"6l˜Æ¬YRÇÃHM-`ðà>¼˜#Œü|……åLœ¸CC x«AEÔš {÷^aÇŽS´oßšõë]™:ÕN¡îž¤¤<¼½Cðõ %00™NÚâà`““5cƘ6ÊcT$‘&¡BBRˆ‹Ë¤¦FB÷î°²ÒÆÊJKKm¬­µÑÓë¡°ßÙ²e‡¸y3Ë—?V¸#PY4h#¯¼òœ°H½sç¢xõÕŸY¹Ò±Eü^D"1¯¿¾‡  dŽYÜ Ã/–Ý»/²y³žžï ÇaïÞ«¬_‚cÇÞaðà†Ï2D§&B~~Û·ûòÛoþØØè°aÃt ÐStYÏH~~ÙbR];ܽ{¹–2aIW·ýûËœJ÷;—´µ»7ù„H$æîÝl¹°$s1e–V@—.í13닉I:wnGyy5÷îåDQQ9ݺu`Рþ Ôûcc£Ó"¦PÕ7••"΋ÄÝ=ˆ³g#‹%ŒeÌÔ©öLšd©ÐÑêYYŬ[w/¯fÍÈ'ŸLUºÐ}û®áææID„[£¹¿‚ƒ“™:õ–.u`ùòI ~¾üü2ÜÜ<9|øƒõç³Ïf`i©Õàçý/22 ñò’9 nß¾GÛ¶­?Þ''kÆ3§cÇÆsfUTT.¢ÂÃS M%>>‹š :µÅÜ\kk,,´°²ÒÆÈH£Á_Ãr3f+_~9W©„ZecÞ¼ÝtïÞ±E¸zž„½{¯°ví ~úéU­]NƒSUUë¯þLxxG¾# i¢H¥Rž~™™…œ:µ\œð,ø•;w9{öCºwïРçD'%§¦FÂ×ٶ͇víZ±j•sæ jÙ2ÊʪHHÈ!!!‡»w³¹{7›„™ÈT7îaÂ’ì³–V·fÓ –•U$o‰«—bc3‰Ä´j¥†¡aoLMûbf¦‰‘Q¤R qqYܼ™À­[ ”–VÑ«W'†5`èP}†5ÄĤO£„V7GD"1/FãáÌ©SaTTˆ:TŸiÓìqr²iÔɇ!•Jùý÷|ö™']»¶gÛ¶ÙŒm¢ÐšÅ+¯üŒšš*¿üòz£ž÷×_¯±nÝqx‹1c'ð;44…5kŽ”ÌüùÃY±bJƒ_°>.ÙÙ%øù…áí‚¿þø(‡ßæèÑwe"©¢©¨¨fþüŸˆÍâøñ%ôVtIOAffãÆ}ÎÔ©vlÙ2KÑå(ÅÅ•Lš´ƒÞ8ðVƒê ‚è¤Ä\½ËÚµ'¸w/‡ ÆðþûBn“€€’"‰IIɯ•r¸w/‡„„lâãsÈÊ*dK::=04ìý@\s–@vÁ“y_{œ,Ü» @ÖاOÌÌdâRÝg]Ý„…¥âïÏw H¢¢¢š¾}»2l˜C†è3l˜!††ÂÅß³ Kð÷çĉ |}C)*ª`àÀ~¸ºÚââb§4­ˆwïf³bÅŸ$òÖ[£Y±b²ÒîTVW×`a±–uë\™?x£Ÿñâ\¹Ë©SËÑÔlœ–{©TÊ‘#wزŋªª>úÈQ醙”qútÞÞ!\¾‹T*eøpCœœl˜<ÙŠž=ç–“eDe–JDDšüsII%êêªj`m­-wDYXh=•Û0**‡/صëœmà'i>üþû Ö¯?AlìVAœûb±„_ÜM||6^^﵈hŠŠj^|q7IIy?¾D˜o¢xy…°pá>~ýõ ,]ŽÒ’‚«ëNV¯vfáÂ1 vAtRB²³KøôÓ“œ8ȤI–|òÉTá…N@@IÈÊ*">>§6´;‡»we”|D"1]00è…¾~/ôõ{c`Ð ƒÞèè4팥‡!‘HINÎ{ {)""ää<$)íÛ·ÆÄ¤ææZµ-r}±°Ð¤k×öÔÔH JâÊ•X®]‹# ‰êêtu{0l˜C‡Ê„&áõïÙ‘J¥Ü¾}w÷`¼¼‚ÉÉ)ÁÊJ›iÓìqq±E[»›¢K”#‰ùî»sìÜy“>lßþ¼ÒºúûßeæÌï¸qc-ººj^VV…£ãWtîÜŽãÇ—4êëLYY;vø±gÏŒŒ4ظq:Ç6Úù—’’JΞÄÇ'”ó磨®®aèP}mpt´BC£‹¢KD*•’””Ghh*áá©rgT^^)***èéõÀÚZ–ei)£þ«Íôõ×!55ŸS§– .ùÿàÎ{¸º~£°ç±²S\\ÉÔ©;QWWÃÃc©ÒnÔ'¥¥U¼ðÂddµ±­9²téA.]Šáüù”®5_øî»slßï²Ë1D'%B"‘²oß5¶mó¡K—v¸¹ÍYP\\YëTz°.!!‡²²*:uj[+*É„%CÃÞôïß}ýÞšÒ˜–! ó–µÈ¥“Iyy5ªª*èêöÀÂB«¶=®/ææ2÷RÝŽ±T*%::ƒ+Wâ¸z5ÿ»”•U¡«Ûƒçž3bøp†7.êê‘ÜÝñð&=½cã>LjÇ´ivôïßKÑåýƒ;wîñᇇINÎççð曣”Ê9ó(¶nõÆÃ#˜ë××(¬†¸¸,\\¾ÆÅÅŽ/¾˜ÓèçOHÈaݺã\¸Í´iö¬Y㌖–òˆ™÷SQQÍùóQxy…pî\$ååÕØÛ÷ÃÉÉGGk¥›<—™YDhhм5/<´oÿÏ׬ää<®^“»™rsKéÑ£#Ï=gÈȑƌa¬4ãî› ‘‘éxxááLbb.ýúõÄÕÕ–©Sí13ë«èòJII%[¶x±ÿuFŽ4fÛ¶ÙMÊiàäôVVÚlÝ:[¡uøú†ñæ›{ùâ‹9¼øâP…Ôpút86¸“]Ì»ïNàí·Ç6Z°úÓPUUÃ¥KÑøø„rêTEEåX[ëàâbƒ““Ò:- ÊäTÝktBBb±„ÎÛai©EJJjjjüüóki4;§mC`o¿7ßÅâÅã]ŠÒrëV³gÿ… ǰzµ³¢Ëi22 qvÞ‰A/\(<—š ·n%0sæ÷lÝ:‹yó†)º¥#5µ€ ¾`îÜ!|òÉÔz?¾ :)˜ââJ>ÿ܇}û®1p`?¶n-LI¨GJK«HHÈ&..«V`Ê!66“ÄÄ\y;œ¦f׈J½šÅd¸ÿ¢¦FB||iµS:¡¡)W ªªB¿~=åá¶Z˜›÷ý×6”¼¼R®^«ýˆ%))Ú0t¨>#F3r¤1ff}…6z&&& Ü݃HHÈA[»..¶¸ºÚac£Ü£‚ýüÂX½ú"‘˜ ¦2sfÓš®UTTŽ¥å:víš““â3s¾øÂ—ï¾;Çñãï*lÊ­H$æÿ;ÏwߣW¯N|öÙ Æ7SH-O‚H$æúõx¼¼Bðõ %?¿ 33M¹ÊÔT9EÛ:**ª‰ŒL',, ¢9s&œÖ­Õ¨®– j05í‹……––Zµ¯çš J©Œ<ÿühjv嫯Sß^Õ IDATæ*º¥æøñ–,ù/¿|^¢èr…¨¨ ¦Oÿ†#ŒÙ½û•áòjnlÚäž}W¹xqU£å6%NœdÉ’ßøóÏEŒa\¯ÇD'rút8+WE$ªaýú©Ìž=PXˆ <%ÙÙ%ÄÆfr÷î_SBBŽÜÓª•²68ƒÞ˜˜ôA_¿††uè4GÊʪˆŠJ'<¼ÎÁ”JttUU5,Hd­Z˜™iþçð‘HÌÍ› \¼ÍÅ‹ÑDEe ®®Š½½^­Èd„ž°+Ø$$äàG11™ôéÓgg¦NµÃÞ^OéßO²²ŠX½ú~~áÌš5O>™ª4Оoï-ÚOxøg ™ŒöwÄb ¯¼ò3QQøù}@¯^Šse¦¥°q£žžÁLœhɧŸNk2ÎFYàþ]|}Cññ #+«CÃÞ8;Ûâèh¥¥–¢KüWfÎüþøãíl,„‡§RXXþÐ ­fïäý7Ö­;A``"ÞÞË]ŠÒ³y³»w_äàÁ…Œa¤èr…Û·ïñ »˜3g0 ­ RUUƒƒÃèêöà·ß(º¥dÑ¢ý$ráÂÊz D'—Wʺu'8y29sñÉ'SéÖ­é]h 46u-qññ2Q)>>»ösÅÅ•téÒƒ^÷ÁÐP&2÷i®¥ûÉÎ.¹o‘!kÁHLÌE"‘Ê[/ê––ZOÔz‘’’Ï… Ñ\¸ÅÕ«q”•UafÖ—Ñ£M1˜!Cô…I› Dbb.žžÁxx‘FïÞpr²ÅÕÕ–Aƒú7‰‰K‰”®³e‹Ý»wdÛ¶ÙŒY¿;jɪUG KUªEjqq“'‰†Fg^¬pÑ·norrï¼3ŽwÞOÛ¶­ZÓ“ ‘H LÄË+oïPÒÒ ÐÓë““ S¦Xco¯«T"ïåË1¼ðÂ.<<–2p`ÿ‡Þ'-­àöéðð4RRòèÝ»Ó}ï²Ðòþý{*ÕÏØP8pÏ>ó 6v«¢KQz¤R) ìÃß?/¯÷•¶µ¾9}:œ7ÞØËÊ•Ž,Y2^Ñå<ŒáÃ7áêj˪UNŠ.墣3pvþšçŸ¦M3]"‘˜Ÿ¾Ì—_ž¢GŽ|úé4&M²TtYOŒT*%$$oïP¼½CHLÌES³+NN68:Z+…øëìü5]»¶âüÂÂòÚMŠtùûI||55:uj‹¹¹&ÖÖ:òÉy††Ín3çÖ­¦Mû–Û·×+m¾2QQQÍìÙÿ#?¿ ?¿å-&d{ß¾k¬^}ŒíÛç0w®bòóžžõëOpôè.^\ÕâÖ ƒ—W îã÷ß2z´I½S‰ÌÌ"V­:Ê™3ÌŸ?œÕ«…>zOAA11™ÄÆfÉKññÙ´ÄÕµÀÊD¥:¡©¥´ÄÝH$&::ãÝéÈÈtJJ*QSSE_¿—\`ª›fÔµëÓµû<ÊÍ4v¬cƘ2dˆ¾ÂÝÍ™ÌÌ"¼¼Bpw"00‰ÎÛ1eŠ®®¶ŒaÜäzÕÕ5|óÍY¾ýö,Zlßþ<ææ 3–·1INÎcèP7Ž[°aŠ.çxz³hÑ~¾üRyvt³²ŠùôSwÜ݃;Ö7·MÚ!•Ž—W^^!ÄÅeÑ»w'&O¶ÂÉɆaà ý¹zæL¯¾º?¿°²Ò~æãUUÕ!Ÿžš"oËnÛ¶ææšXYÉÜPÖÖ:˜šömÒï eXX¬åàÁ…Œkªèrš-5d{Ç?¾þú {ö¼ÆÄ‰MO@oÉ”—W×N³ëËž=¯+º¥¤¾ÛìÑ©øóÏ[|òÉIºwïÀŽ/(å…©€@CRPPFll11™ÄÄd'û\7%®sç¶rÇÒ_â’ºº=šÜ⺾()©¬J”*™âⲉĴk×3³aÍÌú>ÓÄK‘HÌw9w.’ó磈Ϧsç¶ŒiÂØ±¦‚›©ÈÎ.ÁÛ[Ö:wûö=:vläIV¸ºÚ1j”q“½¿qã.~x˜ÌÌ"V®täµ×F4)wÖ¿ñÛoþlØp’ÈÈMJ;¡ÍÍÍ“_~¹ÂÉ“ïbm­<¡òׯdzvíqîÞÍfñâq,]:¡ÉOí‹ËÂÛ;ŸPÂÃÓèÞ½“'[áèhÍÈ‘ ÿ–J¥88l§_¿žüüók vžš ±±™„…¥Ê'èED¤QVVE«Vj˜˜ôÁÒRkk¬¬dåMéokc³žÅ‹Ç±páE—ÒdˆŒLÇÅe'³f ¬×–eçãrøðmŽYŒ½½b7<W¯Æòüó»øá‡ù¸ºÚ*º¥£¾ÛìÑ©ÉÏ/cåÊ#øú†²`Áh>úȱɷüEEåDGg›)w0ÅÆfý—¸ddÔ“>Ë>›˜ô¡OŸGOCk dfý£=.))©TJåâRÀ¤¯ß«^íÅÅ•\¼Ÿ_çÏGQRR‰……&cÇš1v¬)öo±¢_c‘Ÿ_†·wAܸ‘@Û¶­pp°`êT;ÆŽ5UZ!ãq(.®`ãFºÉ„ ælÚ4míæÕ®òÎ;ÈÏ/ãСEŠ.呈Å^zéGââ²8uj9=ztTtIrjj$ìÝ{…;NÑ©S[6l˜ª냤¤<¼½e¨:uj‹ƒƒNNÖŒcÚ ×ƒÁ,^¼Ÿ³g?lôI{‰”„„ÂÃSk]QMBUSSÅÀ ·Ü[\®¬­X³g®nOvìx^Ñ¥4)겎֬qaÑ¢1Š.§Q‹%¼ñÆ^9qâ] {+º$' n~ñâª&9Ȥ¡ñðæí·÷süø† Ѧc ¢Sqñb4Ë–B]]¯¿~‘çž3TtIõFQQ¹\T’}Î$&æAqÉÐPSÓ¾ýõ¹¥'½ÿ¢\æb’‰Lyy¥èêöÀÂBó>‘I»Þgéé…œ>Ÿ_þþñ nȤIVLœhÑâÿFAQQ9¾¾axxsõj,­Z©3a‚9..¶L˜`Þ,6'<<‚Y¿þ87NÇÕÕNÁ5 ~ÊK/ ãý÷'*º”¥  Œ)S¾B[»‡-R:×\VV1›7{qôèFŽ4ÆÍmF³Z¼¥¥àãŠO(·oߣ}ûÖŒgŽ““5ãÇ›×K»¸X,aìØmX[ëðÝw/ÕCÕõCrr¡¡©„‡ÿåŠÊÉ)AEE=½X[kci©66:tîÜNÑ%³fÍ1ÂÂÒððXªèRšßŽ­[}ZTËY]®U^^)^^ï+•°/ðï””T2fÌ6† Ñçÿ{YÑå(%óçÿDRRgÏ~øLׂèTÏTTTãææÉ¯¿^cút{6ož¥´;9ÿEQQùß„%Ù第b:uj‹‘‘&&2QÉ̬/††½…ðMdÓݻل†¦Zw±Ji©¬ýÀÈHãäêb;""S§Â9}:‚°°T:uj˸qfLžlÅØ±¦B¾\#P\\É©Saxxqùr,ªª*Œg†««Í&£,=½?>ÊÙ³‘Ì;„uë\èÒåérÅ”””|† ùLióœþNTTS§îdêT{¾øbŽ¢Ëy(·oßcÍšcÄÄdòÖ[£Y¶lb³›„)k£ Á×7ÿ»´j¥Æ˜1¦89Yãà`ùÔ׌GŽÜfùò?¸tiýû÷ªçªë—ÌÌ"yk^•–V€ŠŠ ýû÷ÄÖV;;]lmu±°Ðjt!~ß¾klÙâEtô–F=osaÅŠ?qwÂÃã=ÌÌ×q§(òòJqqÙI9~|‰Ò ûæÜ¹(^~ùG~ûm0àë!¤¤ä3vì6–,ÿLl‚èT„†¦ðî»ÉÎ.aÛ¶YÍvgW ùQ\\Ill†Ü½A\\–|ZÇŽmäâR][œ±±† .Õ"Kj&Ùt]àj]¾…™™&ÖÖ²| kkmÌÌ4ô‚¤¦FÂñœ:Á©Sa¤¦ ­ÝI“¬˜4É‚!C „ ¢F ¬¬Š3g"pwâÂ…h¤R)cƘââbˤI–ÍJì“H¤ìÝ{…­[}èÓ§ Ÿ>§I1ÏÂÑ£wX¾übb¶4wZ]û˺u®,X0ZÑå<”š \gÛ6Ú·oÍ'ŸLeêÔæy=%›ø†O(W®Ä¢¢¢Â¨QÆ89Ù0q¢ݺ=^»‡H$fÔ¨-<÷œÛ·7Í–°œœ‚ƒ“ N&$$…  d ÊäQöözØØè`k«‡±±FƒæÂ]¿ϬY߸¡Å·ÿ? "‘˜yóvs÷n¾¾´˜é`qqY¸¸|Í„ |ûí —êÚâ {cf¦‰‘‘F³ËayÄb ññ2“L`J} @µn¤tÈÔX“|D"1—/Çâ鄟_8%%•XYiãà`ÁäÉ–XXh5x 2·ëÙ³‘xzsöl$b±„#ŒpuµcòdËféú‰ŠJgùò?‰ˆHcÉ’ñ,]ê@›6M7‹êqùðÃÃÄÆfâîÞ´ZpêÚ_~ýõMÆWÞ]Ýüü2ÜÜ<9|øC‡°yóLŒû(º¬£¸¸?¿p||B¹t)±X°a†89Ù0eнz=zá~àÀuÖ®=εkkšÕûubb.!!)'”Lxx*ååÕ´oß++m¹#ÊÆF=½õvÞÜÜR¬­×ñÇ‹5ª~Æ…·4 ËqtüŠîÝ;päÈâ&$ÿ,\¹Ë‹/îfåJG–,¯èr“¬¬"FÚÊk¯`Õ*'E—£tÔÔHptü’.]Úqøðâ§TÑé).®àý÷qöl+W:²xñ8AÙP ²²ŠkÅ¥4bb2‰ŠJ'&&‘HŒºº,ÔÓÔ´/ææš˜šöÅÔ´/::Ý]¶R!Kˆ‹Ë’‹K¡¡)DD¤Q^^MëÖêµSƒI“>ê ‰Ä\½‡§g0¾¾a””T0dˆ>ÎÎ2'ÏÔ8TUÕpþ|Aœ9AUU Æ2uª-ŽŽÖíVhjTVŠøòËSìÚu;;=¶m›ÝèáÅŠdÔ¨-LžlÅêÕΊ.å‰yÿýßñó ãĉ¥JßþÄš5LjŒLã7FñÁ“š•Kða”–Vqþ|$ÞÞ¡œ;IUU ƒ÷— P÷olVUÕ0|ø&&O¶bÓ¦ ¬ºá©©‘—)¡‚ƒ“‰ŽÎ ¦FB÷îä"”µµvvzôìùôÙ:––kY¶l"o¼1ª‚–Ebb.S¦|ÅèÑ&üðÃË-f}´oß5V¯>Æ?¾Òl#´öî½Â† îœ=û!FFŠ.GéNÆÙùk¾ýö%¦O·âïD§g 88™E‹öS]]Ã?ÌæTw§¡¢¢š˜˜L"#ÿr.ED¤SPP€†FLMû`a¡…©i_ÌÌd-rB{ÕƒH$Râã³ I!$$Eî`ª¨¨¦MõLVV/0Õ!K¸v-™ÐTTTÎÀýk44:7zM-‘HÌÅ‹ÑxzsêT8eeU ¬««NNÖÿêJh\½ËG!?¿”U«œ™?8ªª-cA9!X Ôn¡G!‰™5ë{rrJðô|Oéƒo%)ú³m›­Z©±v­ 3f h‹ØÊJçÎEâãÊÙ³‘”–Vao¯Ë”)Ö¸¸ØâçÆ–-Þøû¯m‘¯ÿ••"ÂÃS þË•˜˜‹T*E[»vv²¶<;;=¬¬´éØññ2ÂfÌø##zÞ’¹z5Žyóv³xñ8V®tTt9ÆêÕGùóÏÛxx,œæM±X‚“Ó×tìØ†#GžÎÍÓÜY±âOΟâÊ•Ÿ8oQž©TÊO?]fÓ&OF6açΛíN¶€ò ‘HINÎ#22¨¨ ¹‹)99‰DJûö­16¹&ff}11é‹……¦ðØ|))ùòìˆààdBCS(-­¢Mu,,´ä&++m…‹tb±ÿx<=Cðö¡  œúáêj‹³³9ÑHˆDb®\‰ÅÓ3?¿pŠ‹+8°îï`Û"|e|ú©;GŽÜaòdK6mšÙìÁÁÉ$âà`®®¬…ÇÛ;„E‹ö±©É ÉË+ÅÉék´´ºòÇo7‰ˆüü2¶móáàA êϦM317×TtYÂÕ«±hht!))oïNŸŽ    uu5 Ðcûöç10h>ÿž…¢¢r¹U÷‘•UŒªª FFØÙé1xp 臡aï‡..W­:Btt&'O¾+ÿšH$¦°°¼Ùo*Ô7úóÑGGøöÛy̘1à·×ÔHH$´nÝ|Ú²Åb sçî"))ŸeJ/ì ÈNÆÅe'_}5—Y³>pÛ… ÑXZjµèç^^)£FmeîÜ!¬]ëòDß+ˆNOHiiï½w3g„v:†£  ŒÈÈ ¢£eS]k\yy5ªª*èêö;—ê\Lºº=Z”ÓàI¨ ( ýk'4?¿ uuUŒŒú`k«‹ööz s0ý‰DÊwñô ÆÇ'”ÜÜRììtquµÃÙÙFhk$D"±ÜYæçFQQvvº8;ÛâêjÛ¢þÇðÉ''iÕJM›f2eŠ•¢KjΞdþüŸÐ×ï…££5YYEDF¦sæÌ‡ ®îÙˆŠÊ`úôopt´áË/_Pt9Mhh kÖ#$$…ùóŸã£¦4ØôOeáµ×öpêT8‹áý÷'Ò®]kV­:ÂÑ£wèÔ©-ùùe˜šöÅÉÉ''›Õêú8ddœB``wîÜ#$$…ÊJ]»¶—¿÷ëèt§k×”ræL$7o&0hP?ÒÒ ÈÉ)¥¸¸‚‰-ùõ×7ýã49ÜÜ<ùé§K?þ.èÉ¿ž–VÀüù?³|ù$­Xaý“—WŠ£ãWèéõäС… ~/P¬Ys `®\ù˜®]ÛžÆÚµÇ¸uëû÷¿Å„ æŠ.Q¡ìÛwõëOpîÜG>þF‡ :=‰‰¹¼úꊊÊÙµë¡Nà™‹%$$ä‘FxxšÜÅ”•%›×­[,,þÊ\27×ÄĤO‹ d|Š‹+ M!$ä¯Ì‡ôôBTTTèׯ'¶¶:ØØÈr,-µ”îw•Á‘#·8q"ˆ¬¬"lmuqq±ÅÅŶYÄ*355’„¦‚‚2ùßÁÙÙ¦ÅeŸ%'ç±rå®\‰eþüá¬ZåÜdÝ=OÃÍ› LŸþ­üÿ­Z©!‰éܹ'Zàà`Á˜1¦M6g¨n¢Ýš5.,Z4FÑå<6‰”Çoáææ‰ªª kÖ¸0gΠf»8zôVââ²PWW¥mÛÖ,^<ž¼À«¯Ž`ùòIܺuoï|}ÃÈÈ(ÄÀ 7ŽŽÖ89Ycm­£èò•‘HLXX*‰\»ÏéÓáòÛTTTPU©Tö8»Ÿ5kœyç! úI‹%¼ñÆ^ñòz=½œ=É;ïüFII®®¶ìÚõŠ¢Ë¬w""Òpuý†—_Ɔ Ó]ŽÀcP\\ÉèѲi êêj9r55jj$¬^íÜââÅb “'IÏž9thÑcŸ :=&—/ǰhÑ~ú÷ïÉž=¯7ûvú§¢¢š¨¨ ¹À‘FTTÕ´j¥†‘‘Z˜˜ü•¿ÔÚuž…ÊJiµöy™‹)!!©TJß¾]kÇ+×M·ÑQÚðÜÜRŽàèÑÛ„‡§Ñ¿/fÍÈÌ™äí< ‹X,áúõøÚ¬¬Pòó˰±Ñ‘ ~ÍMh‹%”ÿkÐnM„Ÿ~ºÄöí~èêvçóÏç0hPÿF¬R9 KeÒ¤½M]]±XŠT*ÅÚZ‡Ÿ~zµI>V~øá›7{ñË/¯ãà`¡èržˆââ ¶móáÀëØØè°eËl,-ÿ=C%7·”nÝÚ7çX,ÁÀ`%ÕÕ5ò¯©ªªÒ¹s[>ûl3fØËÅ6‰DJ``"ÞÞ¡øø„’’’ŽN÷Z”-ööºÍV˜{Þ}÷ Çßá¿VE_=—3¢®Þ4;ÊDEE5ÎÎ_#•Jyî9c~ùå **²Çl‡m‰ŒtS §y}ãîÄÛoïçÛoç1sæÀÿþ…RVVŇÆË+™@  ¦¦Š««ßÿ’‚+T<7o&0cÆwìÙó“'?žë]ƒÝ»/âææÉÌ™ضmN‹-ðl––JXXª\`JHÈA,–ЩS[ÌÍ5±°ÐÂÒRK.05Ç7Úú¤n’\PP2SLŒljM·n˜¬­u”^°«®®áÔ©p¾Åå˱tèÐ[æÌÄ€ý]^‹@–•õW c^^)VVÚr¡©>Gp+ï¿ÿ;ùùeìßÿÖCo MaÅŠ?‰‹ËbéR–,ßb_£âã³5jËÞÏÆF_ß¡¢†aÙ²Cøú†6‰‰v#<<5kŽÈË/gÕ*GºtiÿÐûΟÿÝ»wàë¯_lä*ŸŽÄÄ\†ßô¯ËÄ#™àéæ6ó¶¥:BCSðöÅÛ;„„„úöíÊ”)V89Ù0xpÿ&#¼54‰‰¹Œ¹±øÑË"¤RY†¦­­.ƒÉr¡ìG×®¬ -ÚOxx*.¬|¬ëCAtúªªjX±âONž díZ.£è’”ää<""Òp0¥¥лw'¬­u°°Ð’‹Lzz=„]ÆÇ ;»¤V`J"00‘YÐwûö­±¶Ö©F£‹n“¤R)Iüùç-<<‚©¨¨fìX3fÎÀ¤I–Í*DSY‹%ܸ‘€——LhÊÉ)ÁÂB YFS¿~=]bƒóÝwçØ¼Ù OÏ÷X¨–—WóžìÙs™AƒúóùçsZ|8qzz!~úÈÛUUUèÞ½#—/¯jÒ O‘H̼y»¹{7/¯÷èÛ·éå•I¥RŽ½ÃæÍ^ˆDbV¯væ…†ÜÍ›gÈ­[÷H$>>CÃÞ Ðï?Ê[2uít••Õr÷H­Z©1oÞP6ož¥ ê±X /ü@ZZ!~~Ë[T‹zSàïmôB]]„„Ï[ük%È2µ…5k\xóÍQÿyAtz……å¼úêbc3Ùµk~³UÞ‘HL\\–\Xª™Š‹+PU•åYZjai©-™z÷n¹ž„ÊJaa©&”D@@ii¨ªª`h¨.ööz Ðcã>MîÅ>99cÇ8rä6‰‰¹X[ë0kÖ@¦M³ÿ×ö&úA"‘rófžžAøø„’]‚¹¹¦ÜѤ¯ßKÑ%6ÇðJ¥¨««bi©·÷û¨¨¨páB4«V¡¸¸’uë\˜;wˆ°hB–ï`júñ#oWUUáÈ‘w6Ì «jŠ‹+™>ýNœXÚdFÅÅìØqн{¯`i©ÍæÍ3±µÕE*•âäô5áá©ÔÔHPQQyäD-e⫯N³sç™ÚëÆœ9ƒØ±ã…Çr/ݽ›O(^^!„…¥Ò­[&N´ÀÉɆQ£Œ[ä&Hxx'nèm­Z©±lÙDÞâ_/,,çÎD¹}ûÁÁÉ”—WÓµk{ìÇ€ý4¨?¶¶º´o¯\’…H$fóf/~üñ’¼îatïÞ‘ÐÐÍv(Nvv '~Á Aúüøã+Âû«‘‘QÈ€Þ\ºŸ+W>nñ›qu¸¹yrèÐM®__ýHgq‚èôRRòy饩¨¨æàÁ…i(º$F¦¤¤’ÈÈÝKÑшDbÚ´QÇÔ´¯\\²´ÔÄÌL“Ú(ºì&T*%!!G.0&•ŽH$¦gÏŽØÙéao/û°±Ñm²‹žêê|}ÃØ¿ÿ7n$лwgfÍÈŒšdëJSC"‘rûö=<<‚ññ !+«3³¾ò©s-ñ‚áêÕ8æÎÝõ7˸ ;v<ÏÕ«±œ8ˆ««7Nóû¨©‘ «»ü¡·©ªª²té>úhJ#WÕpddâ켃^<¸°I·UFGg°víqnܸËܹCÇ‘>Î IDAT0 |ðð×¥¯šš*‡-bÄ#Åú,\¸/¯~É®‚Š |ôÑÞ{ÏᩎŸ””WBJ``2;¶ÁÁÁggÆŒ1¥mÛVO|̽{¯ðòËÏ5¹M¢çŸÿÿxjjþÙZsìØ’ÿ—kj$DF¦qçN"wîÈ„¨´´ÔÕU17×bÈ}†5`ðàþôèÑ26ÜÜ<ùßÿÎ?Ö}ÿî¾mnøûßeΜÿñÉ'SË"ÐxWðÊ+?øÐç?È»w¿‚³³M#W§œ””T2|ø&fÎðŸAù‚èô7ÂÃÓxùåéÕ«,Pú\g§¸¸¢vÚ™ì#<<¤¤<¤R)]»¶ÇÒRKKM¹{ÉÐP£É]D)’üü2“N®š’)**§Mu¬¬d-ruN¦æšœœÇo¿ùóÇ7)*’W~ñÅ¡Œe,dg<&uÁ·OŠD"åÎ{xz†àíBff&&}äBSKÞ@ LbΜÿQY)z`—YUU…ÎÛÑ¡C6ožÙäB¤ åÿÈwhÕJ m<=—6»çvTTÓ§Ä |ûí¼&½#/•JqwâÓOÝ©ªª¡¸¸â϶m[qøðbìí•s±;|ø&sÿñuUUTTTرãæÌT/çÊÈ(Ä×7 OÏ`nß¾GÛ¶­?Þ''kÆ3§cÇÿÞ`«ËA34ìÍ¡C‹ÐÒj:“W¯]‹göìïÿñuuu5ââ¶>U®kff·oßãÖ­{ܸq—èè $)††½åÔ°a†hj6½–ÖÇA*•²wïU>û̱XòÈ}«Vj¼õÖhÖ®uiä —o¾9ËŽ~?¾DÈðT2ª«kX²ä ÞÞù[·VçÝwdz|ùdT§œìÛwõëOpéÒª¨D§û¸t)†·ÞÚ‹½}?~þùµÇzc¨_JK«ô÷^RRIx¸lÚYÐT'0õéÓkk¬­µåßMéBI¸‡O–Å”$¿PÖ×ïUëbÒÅÎN ­&½ƒ~?b±„sç"Ù·ï—.ÅЧOæÍÆ‹/ACC˜tù¸”ñâ‹»QUUÁÛ{Ùc}T*% `¼½CÉÈ(ÄÈHWW[œm11éÓÀU+?‰‰¹L™òee•½ØWUUaÕ*§&‘m£(ŒŒVQVV%ÿ¿L¨hÍÅ‹+ÑÖnžïW¯Æ1oÞn.ÃêÕΊ.ç™ùî»slÝêýÐÖuuU:th‹¯ï2¥Ëu‰Ä|ô箚š*­Z©ñË/¯3fŒiƒœ;;»?¿0¼½Cð÷GMM•1cLqv¶ÁÁÁâ‘aërãÔÕÕhÝZ;çâäÔtœ“&m'""ã k{{=¼¼Þ¯—ãWrëV·n%pófÁÁɈDb´µ»1t¨C†è3dˆ††ÍË‘›˜˜ËÒ¥¿˜øÈ;míîܺµ®‘+k\¤R)/¿ü11™œ9³¢Ig6G¤R)Ÿ~êÎO?]þ‡ð¤ªªÂäÉVüüók ªNù¨©‘0~ü瘙i²k×üGÞOj9q"÷ßÿéÓíùâ‹ç›Íb¸©P\\ÁÚµ'ˆŽNçôéõrÌòòjÂÃS M•‹L 9H$Rzõê„,ŒZ&4)ÿ´3eäß² êÜKuírÍñM5+«ˆß¿ÉÁƒþdf1z´ ¯¼òãÇ›7;çCCãï—E‹ö‘“S@tô–G¶VÊÙ“ñô ÂË+„ôôB {Ë3šLM…öÅ:òòJ™<ùK²²Š¹» бc[nß^÷Ÿ=ù-›õòÇf»w¿‚‹‹­‚*jê2À6ožÉ+¯<§èržš¢¢r úŒÒÒÊGÞG]] .øù} TmOQQŒÿù_SWW¥sç¶üþû"¬­u¥Ž‚‚2NŸŽÀÓ3˜+Wb9ÒGGk&O¶¢{÷òû:9}MppR)¨¨€T sçÅÍm:íÚ)®‘O(o½µWÜÞª•o¿=–U«œä|••"‚‚’ñ÷çÖ­{ܹsòòjzöìÈ!ò–<3³¾MþÚB"‘²gÏe6mòB"y¸ëéÂ…•Í~è  Œ ¶ck«Ãž=¯+º‡ðã—øôSw@úÀîܼټ…Ñ'E6ìb/§N-ätFAt¾Íòå°`ÌÒÙ”mäM ‰DÊÜdãFŠ‹+HNÞñÄík••"""Ò M–·ÉÅÇg#KèÞ½ÖÖ:ØÚêbm­N“œÊó4\¾,sÝ?û›·D"%66S.2&µÈ©-R©”«WãØ¿ÿ:§O‡Ó¥K;æÎʼyC›E{`cSS#áË/OñÍ7gÙãLEE…]»æ?° —J¥§È…¦ÔÔôõ{ɧΙ™i*êGPZ**ª™>ý["#3:é~ÔÕÕxýõÿÙ“ßR6lII2צºº*sæ fûöç\UãðÝwçØ¶Í‡={^câDKE—óTlØp’_~¹úXÏsó¾œ8ñ®Òˆ#'NòÉ!êêjhjváðáÅ {Ï).®àÌ™¼½C¹x1‘H̰a†8;Û0üÿìyú·„í‚È£Gñ˜6Í;wNÁÌ™†TË¡©ƒ€€X²¤Êÿþœù(,,„ÏŸÿn•›-Ô!ãdžŒŒ._^PçoZ}ÐÉË+ kÖøÁÙÙkÖXP-§U“„µký—BþE¾5ËDËLfÞ¾MÅË—)xõê ^¾LƇ_Q^^ YYÉêL?g15'7 ¿ÃdV`Ïž[8~<Ë–™5«m”â¿ÿ’ðôiÕ¶À11‰ÈÏ/””úö튫L¨ ä,¦ÚäçÃÛ;/F"!á 51s¦!,,úÐ3#›É—/ß1¾'^¾üRcƒ!ŒI“úãðáxñ"/póæK¤¤ä@M­#&L¨šÑ¤£S÷Ûšª%Ÿ³fEXØûÚ¿µªªtð´6¦¦{›C]º´Çýû«x&(Á Ö­» _ß§ðóãݼGõ‘””!C¶7ú÷ ††ï OO'ž˜U²gÏ-¸»‡¢¬¬ †tt”àí=íÚI7|0(**Ãýû±¸yó%îß…ŠJ|üøµÎåS""–-–˜5k(O¿œòö~ŒU«|A°°Þ½ÛEYÚ BÞ¿ÿŠÇ«‚PÑÑŸ‘‘6mÄ1p`7jÂÀ@zzM B=~ü “'lÚ4NNÆ\íÏTVœ>†;o‚T?«zõRDHÈj®é ’]»þÅ™3q玫À-§"#ãaoeeÌê™yÁÁ+é>h-"">ÂÚú8|}Õ¹1G«:?ÿþy ®®£±bÅhªå´¾}û;nÂÏï)DD„jL­®Jˆic3@Uðäýû¯xù2¹:Èôs§3 ôéÓ}úü/ÀÄk¹¨ 11 óæG\\***¡¥¥„û÷W5x\RR6ž=« 0=y’€÷ï¿¢¢¢ªª0`@7ôïßúújÐÖVnU‰Ô³púôCøú>ˆˆ¦N{{ÃV”šܼù..—Ád–ƒÉü=("++ 99Éê@Ó¸qz˜0¡_½Óvij²v­¼¼ÿ–ü¨ò³ †˜Ìrˆ‰‰@Uµ#ÔÕåáä4Œ§wñ¢Š ãÙ³DˆŠ #(ÈÚÚ¼=SƒÝTTTÂÉébb¸Œ¯žµqöìC|þü IIY(+«€ *Ê@yyE½Á‘3 °{÷T ×ÄÞþ îÝ{ aaaŒÕ 'O:ðlÀ³¤„‰9sÎ!,ì}¾ç'ÂÂB9R GŽØòLð¬6Lfú÷ߌììBhk+áÞ½†ûQÜ$>>‘‘ñxüø¢¢â‘‘‘iiñê¤äC†h@O¯+ËþÚ©Saضí**„……ѵk{ìÚe…áÃ{rñJª®ÅÙÙ ¯_§TßOžlØ|y¿ÂdVÀÒòÊÊ*pëÖrú%&òî]:llÜñý{!ÊË+qôè L™2€jY<Ç´i'PPP‚ÀÀe¿½ThµA§3gbóæëX»ÖÎΦ þÞÏÏ ª®]»bðàÁª¦ Ÿ;Ž={‚êhЉ‰Àظ'TTÚáåËÄÆ¦¡´´ÒÒâèÝ[¹:¸¤§§‚ÄÁd–qû’xyyù:?¿víÖ¬ñCYYEõ#!!!<¾¹FBëüüb<}šˆwïÒðôiÕ,¦ì숉1Ч  PÅÀêÐ×Wkµ[§GFÆãôé0¿…ŠJ{Ì™3 66ƒë}Ó™ŸŸÒÒÒ:¿£ddd !!ââ2¬_ÿ||¢!,,To2QppŠéÓ×›³¤¤¤?~ü¨ó»Ö̦M7qãÆ+U>µ¼¼••""ÂPV–C¯^ èÞ½44äÑ£G'()ɱœÑQŸ¿i)ÉÉÉˆŽŽæˆmv³fM4JJ*`eÕ ÆÆ¼‘3ì×ç+7(..ÃÔ©Ç‘“SˆÀÀe<•÷¨.êj_••99¥HM-ÄׯEHK+Bjj!²³K«—öŠˆååU~iðàN°µÕ¤B~5Ë–E†U€••:„…©™Ô˜öÆdV@KëO5Ü7c0Dж­$ÜÝÀ`d#99™]RÙFHHnÜHä‰vÐ_¿æáãÇ ¼ÿ>|EAmÛªbàÀn2D††š¿¡/¾ˆ€€ÕŸÏdsslß>¥Î §ÆC••¡¡i ¬Ê6r¤,-Õ8r.n3xð`tíÚµÞï³`n¾¶¶­r‰{tt4OÞÿµÉÍ-Ãñão‘‘QŒ¾};ÀÑ‘»ÁY^`êTÖ/b^¾L…ÅAœ9㈱cuk|×*ƒNÿüƒ%K.aÓ¦‰X°`D£Žáå)À¼Œ­­-¼¼¼Õ«}‘U甿ҡƒ4ÔÔäk,‘ÓÔìôÛ (..œ”ϳŒ1¢Æß¥X»ÖþþÏ F‹ˆc÷n+ ¢‰°°w zƒÇãQ^^‰Nd ¯¯†Õ1`€*úôQiÕk”ËË+ðNœÅ›7©00ÐÀܹÃ1ztï;ú­¹=6---dgW`îÜsHIùÞà’/QQ‘wÍÊÈÈ@\\»¥ò5}›[  ÿÎPQ‘E×®²PV–²² DDšþ,«íoØ…··7f̘ÁÛì¦}ûI•GFÆ)ª¥TóóùÊM²³ ªó6øù-®7Ù?/Дö%$$‘ví£#ŒPäæÞFqñ;NJe¡K;/Fqñ;äæÞ¦DÃOÓÞÂÃ?ÀÆÆ½Ñ6………AA×®xüø,€úgGQ:w^„ÜÜ ¿§ZN“˜0a ¦NuEdd<¢¢>!##ÒÒâ0@ ††š04ÔÄâÅ‘œœóÛ± †„„€¥KͰxñ(HHˆVÇéñƒÑòòö`2¿"+ˇ£çâ^^^°µµeù›+Wž`ùòËXŠºqIo0cÆ x{{S-£Q ‹CAa!ÊÊR}j9\§1a£yó<ñùó7¯¬á/Z]Ð)22Ó§ŸhòÀBBBr4ÿcÆŒ()F‡¦¸yó a–»'ýDLŒOŸö4˜Káç`SKK‹-zùŸƒì_/_¦`î\O|ýšWç@^XXZZŠxû6íÚIÃÌLcÆèbàÀn<ÿ¦š[””0qùr4Nž|€´´ï?¾/æÏѤ]Zc{l,¡¡¡xõª„€Ò(?êê±®ÞïëºZ3„ÄÅ¥CM­#¤¤Z¾ü†Óåû3(Àݽ{ƒàä4¬Æ]Tò3˜Âí ¤¤äÀÒò(ºtiŸ<»Ô‹í«¨¨ ‰‰YÐÒR¤äåã›7©xû6µ:åU4¶½­\yÞÞëýþgN§ª²¬ª—²²ª~‹¬,ÁÁñ\Î={naÞ¼á<» °.ꪯϟ¿U/Ç{ô(yÕ; Ö‡ˆˆ0äåe°cÇ”êY Ü•—WâÔ©°³3äéÀvchJyÙØ¸#+«wª4T>ÏšCYY9öì¹…'P-…k4åy—SÓ}ðôt‚™™Nõç­jJCbbæÏ?m¬[Ç™mOiª(++GR’4>–ð=Ð,++LJ,“‰ÓT 0Oœx€;o@½ù*++ñáÃWüû¯ tu[¶Ó‰ ‘Ÿ_Œsç"pöìC”búôÁ˜?½ ÉÉ)Ä¢Ew—×ô¥‡Ÿ?g"11‹¯òÇP‰P«Ë5Ä-–-3kÕ³@EE¥=|}ÂÒò(fÍ:‹K—æ l))1Jï)%¾Êcwï^ÕË—öíÛ@B‚YYIHI‰ARR íÛKCJJ ¢hÓFÒÒbC›6â8{ö DE ²³ x.èäìlÊ– >Õ¨«ËC]]vvCüoÕ+***‘™™9sÎÁȨ;vì˜Â ©`0„±hÑ(®œ‹—Ø½Û £FýS§´ÊëçÄÄ­*àÔT´´”`jª#GîµÎ SAA)ììNAUµÜÜìèåræÞ½X””TuBÛµ“Bnnqutôgç´®œN@Õ̜ׯ¿ÐA'dfþÀ’%Ï2'ÎO˜ÌJdgÒ§ÿ';»'N<Àù󆣣œœ†¡cGzæ;)--ǹsèÒE••BÐÑQBnn1ŠŠÊPZÊDAA)JJ˜,ÎÞ¿ '§a\TMCó;tÀ©&à뻓&Ãܹž8sÆ‘~¾p~뫾x±¥YÇUí Ö·oýyo¨BNu‘•UQQ‘zûâ?ùÙÇŒŒŒÇ°a»Ð¾½%JK¿#*MãéÖMK–˜âàÁ»°´ì%¥¶TK¢¡iK—šaüøCˆŒŒ‡¡aU>¼VÓ‹Z³Æ?~”àŸœyv*¸ aaÑ^^ùèÙ3^^^ÿ?ó) ß…ÄÄ,|úô Ÿ?g"##U5Cå刉I„µõ@Н‚7yù2‹ïFAAi£N **Œàà·05Õæ°:Þ&;»îî¡8þ$%Eáâb{û¡”mƒ,舋3àê:úúâÐÒÒ‚‚BÝ;þUTT¢  ……e()a¢  ¤: Å+Ë™hhhj¢¥¥oïù°±qDze^8rdFƒËâihhxƒ—/“Õ‡¬ý¢X\\ 'O¾Ç°a™ÐÐèÄQ­gg\½ú»vý‹£Gù#ç! MmôõU¡¯¯† µ® ÓåËqãÆ¸|yA«Ý‰‹jÄÄèÞ]¡Îmæ™Ì |ù’óK0*²²’¨äm˜Ì <‚ ž¨Zkÿóí;!øÿ\9u¿}b2+pñb$vï¶â»7§ì +«'N„ÂÓ3ÒÒâpuC:Í#ˆˆCNN rrRTK¡¡¡iýû«âÜ9'88œÁÚµWñ÷ßS[å3†††ßø¹ñ PµË)!ÿ , ¡S'Y¨«wB÷î ¦Öªª ¦ÖÚÚ]±oßy:àÄ!~.Ýš;׎ŽFèß_•jI44Íbölc,[æ…ŒŒ<((È ~Ðéýû¯Ø°ÁÎΦ06îAµš:A·nòèÖ3Ûr ™™ù0@’’LhjvGI %%L俣´´êÿyyÅ(,,EQQrs‹P\\5s$##@URR]Ý._ ÷ÈË+ÂÑ£÷«ƒM«V…½=l¢¡¡¡aFFÝqò¤œœ<Ц86ožHµ$ü/Çâðá=¡¡Ñ êêòPSë5µŽPQi_ož6Bʹ%³ÕbaÑêØ¼ù:–Ò|¾dÜ8=lÙr/FaåÊ1‚tª¨¨„‹‹7z÷VÆÊ•c¨–CCÓ"”•ÛÁØX;–aĈ!TËáiŠ‹ËpæÌC¸¹…€ÁÆêÕ°·7¬±í/ {05ÕÆÑ£vX¼ø"Ú´©šMJCCÛHJŠ"%e?½–‡Ù²ÅcÇÀ¿ÿ¾Â¸qzTË¡¡i2¢¢"°¶„kמÁÕu4ÚÛœ:†÷ï¿âСé\u¬ñññðôôäè9~üøÝ»wÿövQXXˆ;w²Õ&Õ|ÿþÿý7Õ2h8“YóçÁÐp޹‡¹s‡áñã˜7o8OœØé#RSS±{÷n¼yó¦Ù6nܸ'Ožüö¹ ùv•;+;ìðÇIII8uêT‹l‚UÜx®²‹””|ûö­Îï©Nj3aB_ìÛgƒîâĉTËi2¼ØÆêó͵aõä6G?ë…ýJnÔ—ˆˆ0WÆE¼Ö×i Tß7ºº]0aB?ìß»Ñù[[ÜcsNø Vš©lË“'ë#))11‰‚tJLÌÂÞ½AX¹r ×—m½{÷'Nœàè9òòò°eË–ßþÏ.~üøM›6±Õ&ÕäååáìÙ³ÕÏ™3 l?§ìÒ°&(è5†ßM›ü1n\_<~¼®®cx2I8;}„½½=^¼x£ùWýüüùÛç‚æØUî¬ì°Ã'$$àÈ‘#-²Výqã¹Ê²³³a``€7nÔù½ ÕI]ØØ ¶m“°m[.]Š¢ZN“àÅ6VŸo® «ç€ ·9*øY/µû•ì@ê‹×ú:MêÁÕu4âã3ø‚R¼·ÇØœ²Ïn¿ÁJ3•mYKK::ʸv-FpƒN«Wû¢GΘ?ÕRhx555¼ÿ¾úïÛ·o#//íçá”]šºyó&VVn˜3çúöíŠGÖcÛ¶IèС ÕÒ¸Brr2\\\ЫW/ª¥ÐдzfÏž¬¬,ªePÊìÙÆX½z,Ö­»Š+Wž¥CÓrèç5ÔîWÒpŽÖØÆ54:ÁÒ²?¸CÏv Z›ß˜4©?nß~-˜A§[·^!*ê˜FÙzåÊÊJ,]º²²²èÔ©víÚ ê-¨©©)8%%%ÈËËÃÃÃ+W®„¼¼<áããSmçòåËÐÔÔƒÁ€¢¢"öîÝÛà¹ÂÑÑÉÉɰ··Ç­[·0}út\¿~@ÕTô¾}ûâŸþ¤§§£_¿~øþý;||| ¦¦IIIXZZ6$$?À.ß\ŸÚ´ÔBàêê RÕéܰaäåå!..Ž‘#GâË—/,¯YPê]uǪüX}Wß3â'nnn „`Ȇsî JÔDzefpv6ÅÊ•Wø*ðÄŽ6–˜˜ˆ‘#GÖ°kccƒèèèj;^^^ÐÐЀ´´4fÍš…ŠŠª]ÃXùæúÚ_íç@}R›«¯,*_V>—•¯®¯^~íW6tîÀÀ@hhh@JJ ŽŽŽXµjU«¨/NôuZrñÛ8hùrs$$|ÃõëÏþq+ÛclV÷.+¿QuùÆhÇ’%K°lÙ2ÈÊÊ¢sçÎ8pà@£Ëª¶lnÞ»jC+"`”–2É!ÛÉÊ•WØjñòòjÔo‰Y±b),,$áááDNNŽøùù‘ôôt",,L6nÜH*++ÉñãÇ ²{÷nRYYIþþûo¢©©I!$??Ÿˆ‹‹RRRBˆ°°0ÉÌÌ$)))D\\œBjüÿëׯDFF†œ;wŽ”””ëׯ)))òîÝ;’’’Bdddˆ¿¿?)**"Û·o'ªªª¤²²ò·kHOO'ȼyóHii)‰'rrr$$$¤ÑefkkKlmmýû¦Kbccýû„„"--M!äû÷ïDQQ‘„††’²²2RPP@ɱcÇHII ¹ÿ>‘••%=")))DRR’Lš4‰DFF’¬¬¬z륶݆êãW»¥¥¥ ^Ãׯ_Ihhhs‹L (-e’C‡îMÍ5dÀ€­Äß?¦Î6ÌmšÒÙå#rssI·nÝÈíÛ·III Y¹r%™5k!„///"..N!„\ºt‰èéé‘/^qqqríÚ5R\\L–-ó"C‡î LfE‹ìð*Mi¯Üc³ºwYù VÔöMé{2 âââB IDD‘““#ÿþûo ͵aG[nêó´6††;ˆÀÜÝCIkIff>[í6Õɶk׎”••U¶~ýz2iÒ¤êŠÿ9€øðáa0„ÉdByþü9QPP „RRRBbbbªmülP?~¬7ètâÄ 2lذz¬¬¬ÈÖ­[ɾ}ûÈøñã«?/++#»wï&………¿]ÃO™™™ÕŸÿF•!¼t"„eeeòßÿBñññ!ýû÷¯ñû¥K—’’’BÔÔTBëz©m—U}Ô¶ÛZ{Ð),ì14ÜA45×C‡î’âⲆâM :±ÃGBˆ††‰ŠŠ"„BTTT!„Ì›7,Y²„¨ªªBqrr"þù'Y½z5™>}z =ººº,ƒN-ñ„ðVЉåÎÊ;üqhh(ÑÖÖ& .$;v¬ÖD!ׯ_'JJJäÍ›7„ªØ÷ïßë¼Þ–Ö¯ØQw¬ÊÕw¬žEEEDWW—ܽ{—Btjé=Å/A'BÙ¿ÿ6QRZN¼¼¢¸zÞæØÑÆ iiiÕß 6Œøùù±ôͬÚ!5Ÿµá‡þ\Sì³* VåËÊç²òÕ¬ê¥öà±¾soß¾Lž<¹úóÊÊJ¢¨¨È2èÄ«õEÅxˆšm¼¹÷·ÇA„°'蔘˜ETTV_ß'-²Ã«45èÄÍ16«{—•ß`E]~£±}OYYÙ“Ö¯_OllltjI[niÐiË–ëD –×ååáС»pv6…¼¼ ¥Z444 *ú¿Ý²z÷îôôôê¿¥¥¥BBB¯NŒ'$$TýqqqÄÄÄ`ôèÑÐÐÐÀ¤I“œ ÷åËôèÑ£Æg={öDJJ k|'**Š5kÖ@JJªN["""—ÿ_ö_µ ‰‰‰x÷îÔÔÔªÿùøø 77 ,, %%%M«VõQÛ.MýddäaÁ‚ó˜6í´µ•¶Ë–™ñÔŽtM…>¢6FFFÈËËdž¥K—âÇHLLDHHþøã¤¦¦BGG§ÆqÚÚÚõÚ4?À®roÈÐ2‹´´4US»2nÜ8XYYÁÐЪªªX¶l¾ÿ^ïõ Rý±£îX•«ïX=#¶oß%%%HJJ"""yyyˆÇëׯë¼Aª“ưbÅh¬Z5«Vùò|rqNøåºPTT¬þÿÏcYùæ†ú( !Hm®1eQWù²ò¹¬|uSŸ™9·ÔÕÕëµ!HõÅ­{ª6MmuÁ+õ ªÚS§ÂÁƒwQ^ΟË,Ù 7ÇØ¬î݆ÆxM¡±÷ºº:ÄÄÄj\{rrrƒö©nËC‡v¬œN'O†AZZsç§ZÊo‰D333Ѿ}û&Ù¸~ý:Ö¯_ 6àÇxúôi½Žñ'²²²¿;;;rrr‘‘ù­ƒòÏ?ÿÐI¯QUnÆÆÆHLL¬ñÏÝÝ@Í›³)õª>jÛ¥ùŠŠJœ>cã]xõê .^œ‡Ó§gAI©-ÕÒZ ;|DmDEEajj ooo¢{÷î1bΟ?üü| ]»vÈÌÌd©EaW¹7ÆNKü±šš®^½Š}ûöaùòåÕ¿%„`ÿþýÈÎΆŸŸJJJ0eÊ”&ëçGØQw¬ÊÕw¬ž"""ÈÊÊ‚‹‹ \\\>|˜=.¸¸˜cÍ ¬YãOÏGTË©Nøe jËê†`å›ꣴ&š[¬|.+_ÍŽg¦ŒŒ ²³³k|Æêe Á©{ª6¹Çøy´l™)¾|ÉÁ­[¯¨–B9Üc³ºwãq‚Úçûöídd¨hÓ ê&8A§¼¼"xx<Ä’%&çÎvš¬HLLÄÍ›7TmUxòäIXXX4ÉÆ—/_ ­­ cccˆˆˆ ** ùùù,133Cpp0>þ  *YÙµk×`jj 333T?<£££aggU7à›7ošz©©©)ÂÃÃ(**‚¾¾>üýýûmSê…U}аæÃ‡¯˜8ñv츉yóF $d5LL´¨–Å6Øá#ꇰaãFÂÁƒ1fÌ ÃÄÄ>>>Õo…^½z…‡V/è~€]åÞ;-ñÇÒÒÒ`0ppp@¯^½°víZÀž={0bÄ0 4öööÕ3¢Á®?vÔ«òcõ«gÄ_ý…gÏžUÿÓ××dž pæÌ‚]'MaéRS¬_?ë×_ñc÷©–S'ìhc¢¢¢ÈËËCNN€ª{;>>¾ÁãXùæ¦ôQÁnsM-‹Ÿ°ò¹¬|uCÏÌÆj¾~ý:¾}ûˆŠŠBlllõ‹GA®/Nôuš{ñó8¨k×°°èƒÓ§P-…r¸9ÆfuïR1ÆûòåKu²ò‚‚œ:uªÎóñZ[–••œ SÕ,' ̘a@µ€V¬XáÇ£GPUUżyóšdcâĉˆ‹‹ÃðáÃaff†mÛ¶A]]®®®õÓ·o_¸ººB__æææÐÑÑ••ÆŒƒ‘#GÂÖÖ:::055…¹¹9öîÝ‹6mª¶–wqq©Þùª5ЩS',Y²111èÞ½;¶mÛ˜šš¢GèÝ»7lll~;®¡zùÕ.«ú ©›òòJ> sóý€;w\±rå¾^JWìðu1vìXäååÕ:åååá?þPÕ~ÍÌÌ ­­‘#Gbüøñ5X‚îØUî±Óü+'NœÀùó礤¤ OŸ>055…µµ5¶mÛVý[A®?vÔ«òcõ]Sžµä:i*‹®]Vؽû_lßX½##¯ÀŽ6Ö­[7 <ýû÷ÇĉáêꊡC‡6x+ßÜÔö'Èm®¹÷"+ŸËÊW7ôÌl ?~Ò­Û*rüx)/çŸ:šÚ ah.¯^½"ÁÁÁ$//ãçâ•Dâ?aW¹7Ö»ýqII yøð!¹{÷.ÉÈÈh²îÆÂK‰ÄÂŽºcU~ •mcŸœ†Ÿ‰×ŵkψŠÊ ²f/©¨àÌî£ÍM|ÊŽ6Æd2Ixx8 ¯NÛXXùfªÚ/%ÿIsË‚•Ïeå«ëª—ÚýÊúÈÌÌ$±±±äåË—$44””––uuõz“¿·^I$þNôuZrqkD{‰ÿʸqÉüùžl³Ç 4§½rkŒÝ˜{·©c¼ÆúÚ}}}RZZJÂÂÂHtt4×vïni"qB¡~ðòz QQLŸ>˜j)5ÀÈ‘#[dCVV¶Æ¨¨¨4xÜÏäŠuѽ{wtïÞ½EºøaaatèСúoyyy˜››×ø²²2”••´Åª^ê²Ëª>h€ÊJ‚'B±gÏ-ôë§Š{÷VA]]¾áùvøˆæ¢«« ]]]JÎM5ì*÷ÆÚa·?‡±±q“ŽØQw¬Ê¯¡²mì3‚†5“'ëCZZóçŸGAA)²ƒÁ“ïÙÑÆ ŒŒŒšu,+ßL·¿ÿÑܲ`åsYùêºê¥v¿²>¾|ù‚Q£FáêÕ«ÐÖÖÆ©S§P^^}}ý&ëçG8Ñ×iÉ=ÆÏã ¹sG`É’‹HMýeåvTË¡ n±sïÖöéé鸿þ%人ºÐÓÓk¶n11±êÕ üßÊË+áá{û¡<‘ˉ††¦iddäÁÙÙÑÑŸ°ví˜?„…éë4444‚Ìèѽqñâ\8:ž…““Nœ°‡¤¤XÃÒÐðýúõùsç°k×.äää@SSAAA5vࢡi }   plÜ8j9Osî]QQQtìØ±ÞïÚ¬>dee¡©©Ù¬cy¾Òܺõ ™™ùpphx-/ oqûök¸º^AûöÒ¸yÓºº]¨–DCCCCÃ%Œ{À×wìíOcêÔã¸pa.Ú·—¦Z Û±´´„¥¥%Õ2høC³gãðá`¬X1ÒÒâTKxšzïvìØ‘#y† Æ—3œ~Âs™[ÀéÓ`iÙ ²TK¡¡¡i$eeåX¿þfÏö€…EܽëJœhhhhZ!ýû«" `²³ 0aÂa$%e7| M+eÆ TTTâÊ•'TK¡¡i4|tŠ‹KCLL›·¦—†††û¤¥åbòäc¸víΜqÄÞ½Öô’ šVŒºº>Ïž%P-…†¦QðmЩ´´ÿü[[ÞÚ±Ž††æw!8vì>¦O?‰áÃ{âæMtë&ø»ÓÑÐÐÐÐ4ž6mÄqáÂ\ŒÛöö§áéùˆjI4444<‡––"úöíŠË—é%v4üß‚‚^¡¸¸ S¦  Z ˜Ì ,_~{÷᯿,q옽œŽ†¦•óñcBCÓÁ`´Þ-ŸiêFTT‡M‡«ë¬_ ë×ÿƒòòJªeÑÐÐÐð66ƒøŠŠÊ¨–BCÓ |»{ÝÕ«Ï`nÞmÛ6oÛAΓ—W„Ù³=›/¯ù02êNµ$ (..CDÄGÜ¿‹ÐÐwHIÉA›6¢tЉ¦N„„„°l™44:aÙ2o|þœ‰“'gAVV‚ji4444<Á¤Iúغõ_ÀÆfÕrhhX—A§œœB„‡Àñã3©–BCCS‰‰Y°·?²² .ƒ¦f'ª%ÑÐÐp‘„„oŽEhh?þ&³}ú¨ÀÊjFÒB\Ü#Ìœ¹—j™4≮qzèÚµ=Îbܸƒ¸pa.ÔÔ:R-‹††††rde%0v¬.||¢é  Ï×A§[·^A\œSS®žwÆŒ˜1cÛ튊ÊCL¬+ cš|¬ˆˆ DE;£¤ä#Ûu±[[[ŽÚÏÈÈ@FFGÏAÓt^¿þ[Û“PSë€sçæ cÇ6TKâ t{¤†P-U¹#">"$$¡¡qHLÌBÛ¶R6¬'vQ£´ //Sýû÷ï#TÍjiÈÈ EQÑk”•¥²M³$%{¡¸ø#aÿ…6m¡´4Læ×fÛSA›6ýQXø¥¥ÉÎ?_y…>}T´³f……ÅAìÙ3ãÇ÷môñi_4 Ãéöæíí oooŽžƒSˆˆÈBLL ÅÅÜI~/$$‚öí'¡¸ø#Š‹cAó·ßp²¾85b0ÚB\\£Y㡚vÚƒÁh‹’’Ï þVT´3ÄÄ”[|Nª˜>Ý66îHHøÆ×¹Ryåþ–„ŒÌPäç?!å:FBBåå¹(/Ïá°:þFˆB¨ÑT¬­CAAG²ßáÕ‡ŸŸG즥ÂÍ-ŠŠ’X¸P""MëÅÄdáÂ…8|Ø#úZJ×®]1x0g’½çç磴´”#¶yyyÞ}°<{–;»Ó2Dîîö¥ZWhÍí±1ÈÈÈ@B‚½KcJJJðãǶڤùVþ&11 ¡¡q ‰Cdä'””0¡££„‘#µ0j” PƒˆHÝé#“““ÍòÜÅÅåNÅÇ铃µµ:zölÛ¢ëù•wïráî‹-[ôÑ®8Ûì@E‡Ç{|ø GÇžÐÖnÞRÂÄĸy3 ?æC^^FF 66 ¦¦{qçŽ+tu»4øû€€ÿàìì…‰ûaÿþilÎpšîàÒ¥(<{¶ÂÂüSï¼ÄíÛ¯áìì==œ:5 íÛK7ê¸çÏ“0nÜ!„„¬nuÏâ¦ÂwËë>üajR-¥E¼ÿS§G÷îÍ8ÑÐð!!q˜3ç¦L€Ý»­êÝ@CCÃ_¤¤ä 4ôBCãñ……¥ÐÒR„¹yoìÚ¥…ÁƒÕÙ`&„àÖ­Wرã&ÒÓsáèhsÈÊJ²Å~mîߟqz± †0˜†Nd±b…²²~`ñâæ J{ôèŒ]»¬°nÝ8øù=Á¹s¸x1††š˜5ËcÆè¶Š@ÿÈ‘½ºÛ·bá ðö~ŒÝ»­è\O4”!!! kë¸x1‹âÚÀ¿];i,Yb‚ Fâöí×ððÇ´i'УGgÌžm +«’âíñ“Y9s<‘‘Ï–€hi)¢S'„…½oTÐi„~““œ9ç›[„“'øj\6y²>öí»¨¨O:”¿ÇÇ܆‚#Gîáᅢ`g7Û·OnRÐñþýX(+·£N€ïf:-^|99…¸|yÕRšÍǰ²rC·nòðòšiéæOé§g:Ñð1cÆI88 ÅÖ­–|õ†††¦&Lf¢£?ãÁƒª@S\\:¤¥ÅadÔ#GjÁÌLŠŠì[âö“˜˜DlÙrÏŸ'câÄ~X¿~”•9·»]||&† Û…ë×1h:ÇÎóplÚä'§aزeb‹ý$!aaïqî\îß…‚‚ìí akkP#w– óôiÖ®õCBB/6³³ ÄÄøî}*ðéS&† Û æÂÄD‹2oߦâìÙpøûÇ@\\Ó§†££ºví@™¦ú „ÀÙÙ wï¾ÏBôï¯Ê6ÛK—z!--W¯.nô1ÏŸ'aæÌÓÐÐè„K—æñÕn™cÆ@¿~]±k—ÕRø†²²r¸¸\ÆÍ›/°uë$8:5Ù†…ÅAèé©ÐåÞø*èTQQ ]Ýpu '§aTËiññ™°²:UÕŽðòš6mZ–C‚:ÑPÍóçI˜6ÍVV°s'ítihø‘ôôÜÿŸÍô¾Ç%ÐÔì„Q£´`b¢  Ž-9HL̶m z CCMlÙb‰Þ½•9r®_9q⎽‡W¯þâÚÌÌŸË8ÆÓáC¶l+Óäälœ?ÿ—/G£¨¨ ãÇ÷…££[q¼Jyy%NŸÃw //ƒíÛ'cÔ(êý4­këã”Ãùós¨–‚œœBxyEÁÓó22ò`f¦''c Úg^ îÜy'O>€—×|ug«íþ‰Áòå—»£I/÷ãã3am}òò2ðñY€ví·ÌŠjÜÜîãÔ©0<¾…^iÐrs‹àèxqqé8}zŒ{4ÙFVVúöÝ„3g1fŒ.T |tЉIÂøñ‡¾ü·ýú§O™°²rƒŠJxy̓ŒLË#ètЉ†JââÒam}Ç÷ÄÑ£3x¦#CCCÚòòJ<{–P½lîÍ›THJŠÁÐP£FiÃÔT**í9ª!'§ûöÁËë1ºu“dž ãajªÍÑsþŠ••ºti‡C‡¸» \DÄÌžíþýÕpæŒc‹_>ýJI þþ1ððˆÀÛ·©ÐÓS££1,-û ü  ´´\lÝz/0rd/üõ×$¾ì+Òð/7o¾Ä‚网£³4›Byy%nÝz…sçÂý½z)ÂÑÑS¦P»ôîüùGøóÏk8zt&OÖg»ý¬¬èém‚§§S“s''gcêÔã–‡ÏBtêÄû3G“’²1dÈvøú.„‘QÓ(­‰¤¤lØÙBI —.ÍCÏž›eÇÏï)V­òÅÛ·Û[´j©µÀWA§½{ƒàïÿ‘‘ë©–Òd>þ†)Sª:¸^^óÙ6e“:ÑPEzz.Æ; ]Ý.8}zß%^¤¡imdgàÞ½X„†¾ÃƒïŸ_ 5µŽ9R ææ:00Ѐ¸8ç%%Lœ<ùîî¡”…«ëL›6˜«ùˆrs‹ «»ÇÏÄøñÜODýêU ìíO£s綸xq.G–Ã=}špܺõ 22°µ5€ƒÃPž sŠÈÈxlÙrïß…““1Gs‚ÑÐüJyy%Ü ›AX»–÷v{ýú <<Âáïÿ’’b°µŒY³Œ8þ‚¡6wモÓ9¬YcÁÑÄëææû0p :vì˜ÜäcÓÒracã¸re!””Ø¿¤œÝŒ{}ú¨`Ïžæï0&èü÷_2NCQ±-.\˜ ÙfÛZ¼ø"²² påÊB6*\ø*è4zô~ ¤ŽmÛ&Q-¥I$$Tœ””ÚÂÛ{[×ÓA'*(..ÃĉG ++‰‹çòUÂEšÖD\\‚ƒcüÿý— QQhÀĤj67“/WVøù=ž}·‘›[„ F`Á‚‘”¼!ô÷o¼~½²¼IIÙ˜>ýàòåPUåLΕŒŒ|\º…K—"‘•Uss8:ñÔ2vS^^‰K—¢°o_DD„±nݰ¶DïìDÃqöî ªÞIŒW_ÆegÀËë1<=#ðíÛÿ_z7Œ+I¨Ÿ?OÂÔ©Çam=ãypv[·^!"âÏfŸ™ùÓ¦¹£°°~~‹x2/Ö¯?w÷P¼x±•^bW·o¿ÆâÅ—`h¨'ZÔ÷ø™ògéR3,X0‚}"¾i‘ß¾ýÀ›7©9²ÕRšDbb¬¬Ž£sg9¶œhh¨€‚åË/ãǾÛ჆FÐ)--ǃï°~ý5 ôLLöÂÃã!zöTÄ™3ŽˆÝË—`Μa\ 8……½Ç˜1û±jÕ ÞÂÕu eSÒïÝ{‹AƒºQúLVUí€7–BVV'ÆÛ·©9‚‚,\]GãÉ“M8vÌ99…°¶vÇÈ‘ÃÓó J9r^*a0„1kÖPDF®ÇôÁêÕ¾;öbb’¨–F#àLŸn€ìì¿¥ZJ½tèÐK—š":z#ÜÜf"+«S§ºaÔ¨¿áå…ââ2Žœ÷Ý»t88œ±qlßÞôÙGMeøð^øüùRRršu|§N2¸vm1Ú¶•¤IÇðÍ ÙËøñ}‘“SˆÈÈxª¥ð—.Eaî\OXY €§çœ÷=¢¢â‘›[„1cz³G`+€of:ùù=Åš5~ˆÝ Qªå4Ф¤lLž| òò2ðõ]È‘éÝôL'nsðà]¸»‡àÆeÐÒ¢·¥¡¡š¬¬Ü»÷÷îÅ",ì= KÑ»·2ÌÌt`f¦ƒ>}T(›áñæM*¶oÄÇïab¢…' GæåO`¼ö†²  ³g{àåËdœ=;›í uëâíÛTxxDàúõç`0„1mÚ`Ìžm̱ÙVTóáÃWlØð=ŠÇĉý°yó((ÈQ-‹F@±³;B¼¼æS-¥Ñ¼z•p\¿þ¤¤Ä`kk€Y³ŒÐ¥ {–ãþLÉ ¨(?¿E\yaYVV Ø´ifÎ4l¶üüLŸîŽôô<\½ºêêòlTÉ^,,BGG{÷"AçÄ IDATZS-…g8xð.öî ÂÊ•c°bÅh¶ØüóÏ«xú4ÁÁ+Ùb¯5À7A§åË/#5õ;|}Q-¥Q$'gcÊ7´o/ _ß…““âÈyè  7 ‰ƒ½ýixx̆¹9ݧ¡¡ŠØØ4¿Epð[¼xQµlÎØ¸LMu`f¦ EEjóO$&fáᅢpãÆèß¿+Ö­CCÎ/Ýh Ož|†¥åQ<|¸šš¼‘hšÉ¬€³³‚‚^áèј0¡WΛ—W/¯Ç8w._¿æaÌ]Ì; ƒ©såüÜ&(è5¶m À·o?°d‰ æÏÁ7/2iø‡[·^aÞ³faÑ¢‹ððçÊyå䤰hÑ(DEm€››ÒÓsaiyqýús0™\ÑÁ-ÆŽÕEHÈj,Yb‚cÇîcÔ¨¿ôšjY4†™™:vlƒË—S-¥ÉtìØ..æxòd#޳CFF¬¬Ü`b²ÞÞQRÂl’=&³sæx 7·~~‹¸p€#z!"â***[dGVV^^  ¢ÒVVnˆÏd“Böbf¦ƒ¬¬¼x‘LµJ©z‘s —.EÁÝÝžm'ˆ‰IDFF>ÆÓc›MA§°°”?f:åæAGg.^œ‹Q£´¨–Ã’/_¾cÊ”c••„¯ïB´k'ÍÑóÑ3h¸Å¬Yg‘]€ë×é…44\ 3óîßÿß²¹âbf­es]x&taa)N Ãñã!hÓFË—†­­Ww¤k,&&Ãа;ÏnJâæv;wþ‹¥KM±zõX®×qLL"N í[¯   GG#ØÙ ¸hyغ57nü‡¡C5±}ûdÊ—~Ò;wÞĵk1xòd#ß÷™^¾LÁÙ³ðÒÒâÿ¿ô®á0 !pvö½{oáï¿”’” Ÿ>eÂØxnÜXŠ»µØÞ%°³;…¤¤,øù-F÷î lPÉ^ü ÖÖ±jÕXª¥PBQQœœ<“Ù02êÁVû[¶\GHH>\ÇV»‚LHHÌtzú4п¿*ÅJX“šúVVn‘‘À•+œ8ÑÐp‹K—¢ùÇŽÙñ}牆†—yó&‡ÝÅDÿþ›±~ý?(/¯ÄæÍ³wî¸båÊ1ÐÓSቀ“YOÏG02Ú‰'B±d‰ ""þ„½½!OœRS¿#..¦¦ÚTK©—Å‹MpàÀ4¸¹ÝÇÊ•¾(/oÙú¦¢¯¯†“'µ&ôÅ‘#÷ ¯¿ë×_ãùDºMAAAÇÏD@À2äåÃÔt/þüó*rr ©–F#ØÚàë×<„„ÄQ-¥Åèé©àÈ‘xútœœŒqõêSlǼyžˆŠúTïq»vý‹ÀÀ8sf6e9@54:AY¹ÂÂ޳ŞŒŒ¼¼æCMMVVnøðá+[ì²SSmÜ»Kµ Jøþ½ÖÖÇñöm*®^]Ìö€!·n½ÂгœšBdd<ÌtÚ½û_ܾý¬¡ZJ½¤¥åbÊ”c’‡¯ïB®M¥g:Ñpš¯_ó`l¼ Û·O†Í ªåÐÐ¥¥åxôè#îÞ}ƒ{÷b‘–– 9˜™iÃÌLFFÝyr‡HB_b÷úCáâbŽöíyûeËùó°k×M¼zµ bb ªå°$8ø-,¸#£î8qž²vPPP Ÿhœ=û))905ÕÁܹù²½:·¨¬$ðõ}‚={n¡¸˜ s89óì–÷4üµµ;¤¤ÄàééDµ¶ÂdVàæÍ—ððxˆ˜˜$èè(cöl#Lž<ââU~õüùGøóÏk8zt&OÖ§TïªU¾x÷. .l³YXX ;»Søô)~~‹Ñ³'ïÌ’¼w/gðüùæVµaBZZ.¦O?’&._^À‘„ï/_¦`ìØ¸sǺº]Øn_P13ÛÇA§)SŽAMMû÷ÛP-¥NÒÓs1eŠÄŸzu1W×+ÓA'N³`Á””0®ÓDCC™™?pï^Uð‡? ¤„ ]Ý.Õ&]]ÞY6WÅcÇŽ@¼z•‚‰ûaÍ tíÊ»žÙÚž„ŒŒNžt ZJ£xþ< 3gž†ºº<.^œ‹¶m©[âVQQ‰;wÞàôé0DG†ŽŽ2æÍKËþœ),,űc÷qòätî,‡'`ìX]ªeÑð)ׯ?ÇÒ¥^xòd:wÌÁÿÿ%ãìÙ‡ | ØÚ [·ŽX½ÚkÖX`ɪ%âæÍ—X¸ð^¿ÞÆVZTT;»Søø1¾¾‹xfGç’&´µ×cûöɰµ5 ZWøø1Ó§Ÿ€¬¬$._^YŽœgçΛxÇ7pľ ’ð C‡îäýåuåå•xñ"ªQ-¥N¾~̓•Õqˆ‰1àçÇÝ€ §yô(wî¼Æ_YR-…††o!„àÍ›T8pѯßflÜèÊJ‚­[-ñüùfܾ½®®cЧo,›«‹·oS1cÆILZµQÆíÛ®ps›É7§?JÞ]ZW›þýUqãÆRddäÁÒò(ÒÒr)Ó""" ‹>ð÷wFPÐ ôè¡€•+¯`àÀ­8tè®@,K“–Çš5_‡¾}»bΜs°²rÛ7©TK£áCþøC²²’ðñ‰¦Z Çèׯ+޳ÃÓ§›áèh„K—¢àêz**íÙ’C‰w„‡`«]))1xyÍCÏžam}±±ilµß\$$DadÔ½Õ,±{þ< ––G¡¬ÜþþK8p€ÿ}…?þèÃ1û‚H@À të&ÏûA§ØØT—ñŒãú•ŒŒ|XY¹Á†Ÿß"tìHœh&³6\ÃâÅ&|3¨¤¡áJJ˜¸w/k×úaÀ€¿`n¾—.EAW· <=ðöívœ??vvCx~úû—/ßáìì…Ñ£÷#'§¾¾‹àå5½{+S-­I„„Ässª¥4 MÍNXaa!L˜p˜'rˆèé©ÀÍm&?Þ€©SáÔ©0 °«Wûò„¾–¢¬Ü®:ßSi)cÆìÇŠ>ÈÈȧZ !**‚©SâòåhTVòüÂ’Ñ©“ ,,ôPYY ]Ý.hÛV “&…¹ù>\¹ò¥¥å”i“““Bß¾]Ù–×éW$%ÅpñâÜêÀÓÛ·¼ 61ÑFxø”•QWîÜàÁƒw°¶>ŽÔàã³€£^<ž„„„o˜8±ÇÎ!ˆ¼Àĉýx?è“99)ެËl ÙÙ˜6Íàç·òò2+¢¡a/.Æ;}ý-Ø´é:`Û¶Ixþ| ‚‚V`ÅŠÑ<Ÿ§éWŠŠÊpøp0 wÀßÿ9¶n„°°µ˜0¡ß\CmJKËqÿ~_çç‘““‚Ï ¤kkw¿¥ZR5RRb˜5k(>\OO'0™˜>ýLLöÂÛû1¥³ZŠ,-û#<|V®‹sç"`d´>>‚?{…¦åhht‚:¼¼¢¨–Â1òóK`gw mÛJÂÃéz𯯯 7·™xòd†âòåh ¼ œ¯Þ™œ[ Þ©©ßññcGìKJŠáüù9èÝ[ÖÖî”/ÉUVnuuyDD°wI!¯àíý‹_¬YF8th:ÇwËe2+pãÆsL™BmR|~# à?hjv‚––´´”¨–QM~~ lmO"'§W®,„¢b[ª%ÑаŸ'€éÓS¬„††·¨¬$ˆ‰IÂŽ7al¼ ÆíÂÉ“г§"ÎsBlìxz:ÁÖÖ€£y8Ayy%.^ŒÄС;pìØ}Ì;‘‘ë1kÖP¾Oýðá{•Á‚ƒN@U®Ž³gaiÙNN¸rå Õ’j ,,33øú.½{«Ð§Oüùç5 ¸ûöÝFfæª%6 Q,X0‘‘ë1v¬.V¯öŘ1ûOµ4ÇÎÎÁÁo‘‘AÍ,NRVVŽ9s<›[ŒK—æAVVâ·ß((ÈbåÊ1xútö¤¤lLœx£GïçÚÒ»~ýT!++‰‡93Û ¨ Ž×¯¿pì\aèÐüD©NpâĬZå 3lÝjÉ•—a¡¡qÈÍ-”)ÿÇÞ™ÇCµþqü33&JiEéV¢+-R„lY¢EEJ´¨hÑ&Jëvíi•´S‘’ÒJ%’¢J ª[´Y¢B$Ë<¿?ür“u˜qfÆy¿^½î5çÌó|æ<çYÎ÷|Ÿï·?ßë!Žƒ••¶Ñ‰Ã!HHHE¯^‚atúñ£S¦ć_pæÌ:Î HR\ÌÁÞ½70{¶‘À§§¡i ‹‘ˆ%KNC]}5FŽÜ‰Ë—Ÿ`ðà^ž‡GÖÀÃæ¦½„Ò3‚Ë—ŸÀÐpÜÜÎÂÌL11nX¸p$%Å©–Ç®\‰‡šZgŸUX,&¶m³ÆÜ¹ƒà‽{oP-©Rzö”ÃÎpÿþJLš¤ŸÛÐÔ\‹… Oáõë ªåÕ™6m$±aƒÂÂCZº¬¬öbÚ´#HNΤZ€2|xŸÿgÕ­€â%%88ø">þ=Nœp¨ñE|“&b°²ê\¼8ŠŠ2eóêÆ—‘šÊ¿D ,úúJ|Ûb÷‹¦M›àèÑièÛ·3¬­÷!>þ=_ë«nxòäHmÞ¼ù Ö­»€Õ«-°páЫ7((ÚÚŠ“£MjKXØ |øð¶¶ÚÜèôî]òó ¡¬L½Ñ©°°vv‡ñúuf£kWÁŠ1ECÃ+‚ƒã›[P6HÐÐ4Frr pþü#Ìšå •°µ=€øø°³ÓCxøDG»bÅ shj*€Åè©´Z¢£_ÃÜ||ѧO'DF.Ãúõ£E*1FI ׯ?ǰa¢“q†Á``éR3¬[g‰/cÕª`Ÿ$#Ó‹Clìj¸»Æýûo`h¸ vv‡qïÞªåÕ%¥öðó› ?¿™ø÷ßÏ00Ø„µkÏ#'çÕÒhŒ&MÄ0v¬üýïŠÔ–L7·³¸y3‡ME¸ú®ºzxy•n½³³ÓéS¥[ï|ÃïƒîˆŽ~Í÷àÚl=: jj¥†§'O¨1<éètCq1G¨ÇÙ_BàêOÏؾ}fÌ0h°ºsr~àêÕge;4µcÿþ›3¦?Ú´‘ àF§çÏ?‚ÅbBY¹=¥:ŠŠJ0c†ž\•j)|EOO gÎÌųgamí…¯_ó¨–T+44ºÂÇg"#—A[[nng¡¡±;w^÷oùTËãš-$°t©¢¢þAß¾1}úQXYí¥<“``k«-ôÅoÜHÀ‚'1w®1¦LÑåKýúuÆž=ñàÁJ̘1AA±ÐÑY©SàöíWõ*ÛØ¸nÞäo\§ßa³Y8|x*´´1q¢7>lج}zzJxúôƒPnûÍËû [Ûˆ‰ù³``нÁ5¤¤dáþý·°²¢ˆ×–ôôÇaölãrŸ ´ÑéÅ‹OèÙ“šxN„,]ˆóçáÈ‘©ÐÖV¤D MCræÌCŒKïY¦- ‹qãF–,9~ýVaäÈ] yŠ¡CUpþ¼?^‹­[­abÒS(WG~~!víºõ8w.«WBdä2XXôkŒ/TóäÉ{¤¦~ÃС¢·µîOúôé„óçðùs.,,vãǯTKª5ŠŠ2ضÍ÷ï¯Ä„ °$ú÷_7·³<ñphh:vl /¯I¸pÁ?aèP89ùáãGáiÞcfVPÜÏï.ÕRêD\\ |0rd_üóÏp¾×'-ÝóçÆýû+àéi‹ÌÌï°¶ö‚±ñ?]'¯NCCe$&¦6h_d³Y8tÈÚÚÝ0qâÆÛ‡¤¤4œ=ëˆþý»R¢ãÌ™‡h×®9lxƒ—°âåUÕÎÐÑéVîs5:•àǯPP Æ~åÊ`>À¡Cö”XVihš—/Óðî]Œ{P-…†¦Þääü@ppfÎôEïÞn˜<ù ž=ûˆiÓ""b)îÜY7·‘ÐÐè &SôŒ/ÅÅ? ]Ýõðô¼3 í {{=°Ù,ªå5!!Oѹs[‘Þ>ø; Ò¸pÁl¶ÌÍw!11•jI\!#Ó¢,†ÚÒ¥f¸vítu×cöìc”fª+êê]pá‚3¼¼&ááÃdèëoÄÆ—…Ò뀦þ4i"†‰µqüx´ÐÅüJNÎÄ”)‡ «Û ;vŒoЗl6 ýpá‚®^]UÕNX¹òÔÔVcÍšóHIɪuYÚÚŠhÚ´IƒÇÖb³Y8pÀzzcâÄý W Z·–„‚‚4bc“¤>^‘‘‹1c<‘žžƒ³g)s@).æàäÉ»7N bbk2(RR²àë{+VŒ¬pL`¯`JJJJ8PT”iðº=Űa*¸xÑqqk°e‹5 ê&MD+xu¤§çÀÅ%ƒmEzzf! `V£‰_T!!O1dHo‘ŒÙU[X,&¶l±†³³)-:ݻè–Tozõꈽ{'!:Ú Ã‡«bÛ¶Pôï¿ë×_BzzÕòjÍ_•¿ti>ØlÌÍwaÖ¬cHNΤZ ŸÑÑé†îÝÛãðaÁõv"„`Á‚“ˆ‹K¯ït¡x‰Ñ³§<†Ït¨©u¡ZW´n-‰9sŒíŠC‡ìQXX‚É“BOo¼½u½4 IDATo";;ÆÆ=(‰ëô; ›6YÁÞ^sçž@`à¾ÔÃb1ѯ_g<|XÑ蔓SÀ—:kKppìíÃܼ/¶ˆ ÂEE%¸[[íF·¾¬ 99øçŸ ÌŸ?ÒÒ-ª<ú–àê„ØØd¨©uA»v- '× /^|Bðùs.Úµk^¯83ÅÅ0¥îORak{úúJضÍFhâÙB™ù½,åg@À=|úô ™™¹ˆ‹Kºº<Ö¯C±JaáåË4tìØZ`öêÓ4Nrs öW®Ä#<<……ÅÐÔ슥KÍ`fÖ§QÄeªŽ¢¢øùÝŶm!(.æ`ñâa°·×ƒ„›ji”òôéL™rÿ-ss5 Ü wïþ‹-Äé-ÿao¯‡¶m%1ož23s±sç‘ÈdتU389™`Ö,Cœ>ýû÷ßD@À=˜šöÂìÙFÐÒR Zb­6L¦¦½pâD ¶o…¿ÿ=ÌŸ?Ó¦é‹D;Ñ”gÔ(5¬[wþþwáè8Ÿ>}Ãá÷°o_\\†`Ñ¢¡|­?'ç>~ü†=:T8æë{{÷†cÏž‰B=†²XL ª‚¡CUðòe|}ï`ûöPlÝMM$$¤"==²²Ô­- V¯qq6æÏ?‰ïß `o¯_é¹%%‚:eRSUíŒÐÐx\½ú ññïñèQ nÞL‚¹y?x{O®ïϨGÞÆŠg1c†V®4˜gðK—ž 7·ãÆiQ-E(X»ö<Ú·—ÂÌ™†ÕžÇ ðºkݺ Ø·/l6 PRBÊ;c¢¸˜iÎA‡­¸*ÿøñhÄÆ&ÃÃc\9ÃSrr&,-÷àï¿eqü¸ƒ@XW«#5õÆŽõ›7ŸË®É/X,&X,)}0™=Û+V˜S¨–F˜˜?ßYYßqü¸ÕRhÙÙù }†Ë—ŸàÖ­— „@G§†WÅС*”ïë! y w÷‹øøñ+¦MÓǼy&hÝZ’jiÁíÛ¯`mí€6›‰¢¢´jÕ ªª0uª>ôõ•½aîwnß~‰©S@]]‡ÙW;30ð† é-”qÑ8‚ëןcïÞp<|øýûwżyƒ`bÒS`jj"/ï'<=o`ÿþ›hÛ¶9\]GÀ¢ŸÐè§©kמGPP,´´ƒ‰ââŒ?6|­ûèÑ(¸ºžÅ©S³¡¯¯Töù… 0wî ,]j&’áFrs pæÌC9r ÿþû ÒX¼xÌÌúPnÜÝ»÷6l¸ —!X¸°ü6¥’. €ºº|­â§¦~C|ü‡2S\\ rr À`l¶ŠŠŠA0gŽ1ßvù=z¶¶Ú•^W«Ø¾ý*–-3üy&|©¿®XZöïŸBµçöí—˜8ñBCVjÀþ0:……½ÀäɇT/¥}û–ˆ‹[ÍUÙÅÅtíº%%Œ«íÛK OééÙ°´ôDË–MqêÔHIQ¿´6¨©­FZZv g1pìØt˜˜ÐûPijǸqÞèÔ© ¶nµ¦Z M# 3ó;BCŸâòå'ˆŽ~ &“e˜™õÁ!½Ð²e3ª% ¼ÅÚµç÷ýðÏ?ÃéL*—‚#vVøœÍf¡¨ˆƒ&MXÐÒê só~9²¯PRxM|ü{Lšt;¶Æñã3ʾvíììÃÎN6XQ¨²þ}ªªàê:::ݨ–ESO8‚ÐЧرãž?ÿ11Š‹K3©1 ¦‚C‡ìùªA[Û))Y`±˜ððkk ܾý 'îÇ„ °q£p÷ýš „ÀÌl;ÒÓsËvÕØÚjÃÖV²²R”éòó‹Á²eg0y².ÜÝ-Á`0PR‹K€ÅbâíÛ­ÕŽa99?Ы—JJ8hÒä?ÓŸ0™ xxŒƒ&ÏÇ£Gï0|ø Ü >>ÓË>'„`ÅŠsðõ½ƒM›¬0q¢6Ï뮉‰©06Þ‚Ó§çµ—_CŸ_“­=Z½Vž™1ëjjv³J¶oÇuÙçÏÇ•Å. z—|ýš öNœpƒP»kÀd–^SšÚ’—÷’’ôÖ:þ‘šú GŽDaÌOôë· «VCJª)ö왈§OÝáã3 ÖÖ"op"„`þ|ÿ³È¼~iÓŽÀÂb7ÄÅÙ u—×$ÚàT Um .M‡MPXXŒ¨¨WX¼øtà `úôé„óçðõk,,vãýû/J x¾€'î }Pk ®ðõŽëס{÷öpròƒ¾þ?ÂÂbªåÕHûö-±}û8„†.D«VÍ`eµÓ¦ª˜U4ÿñýûO>| ššk1cÆQ$$¤@™Á (#>Î嫎Þ"%% @©lÁ‚“ز%NN~6¬ÜÝGóµ~A€Á``Ì áöíå;VGÞ†¦æZÌšu ÷D×ĉÚðöžŒ'¢áèxEpq @PÐC¥÷ÇùóqÕ–!%ÕÛ¶•zÊVnpJÛžâ !pu \¿þžž7”ÎÉŽŽ'püx4¼½' œÁ (Ý¥¨(]]Ú¸_›7_¸¸œœjç©&žN`d´II•O¢L&JJ²_ÊU™žÞ¤¤d•ž˜LZ·–›ÍÂåËó¹Þª'oÆË—éeYþ¤{÷öˆˆàîZÑ4nŒ·À̬ßcÐ4.RR²pùò„„Ä#.îš7‡‰IO˜™õ±qFClÆKðô¼--œ;7¯ÂñôôìÚu 'NÄ@AA«VYÀÈH™¥ÂÃÇ_¡¡±¶ÚsX,‚ƒ ®.ß0¢„„ŒŒ\Lœ¸™™¹Ø³g"fÌðAnîOp8ˆ‰1abÒ GŽL¥Z&ÏHNÎľ}8uê>Z·n†3 0y².š7¯¸ÅP‰ˆH„»ûE¼z•[[m¸¸ ¥· Dbõê`0¨Ò]º´ELŒßt89ù!8øQ9c“É€©i/ìÝ; Íš5޹ùõë ¸ÁÁó ©©€ÂÂb?‚Ïm<~ü={ÊÁÞ^£G«×z½ròä]ŒÝ¿Þ![nß~ {û#’’@zzNÙ3ƒÁ@—.mqûöòjƒ\ÿòäzöìS¹5òèÑjžÇ´ºpáfÏ>Vv3 ìÜ9.ÄáîÝ78zt*ôô”ª/„¾|Ƀ¦æZ¸¹™ÃÎN—j9MxxììáÜ9'¨«×.Ñ€@x:€žžR•{i œs]fHHYœW9Y±Ù,ìÈ4‚MnnA£YdÐð—””,xzÞÀ!ÐÖvÇÞ½áèÖM¾¾Óñôé:ìÝ; Ç«6JƒÓ¯à¬pïÞܹóºìX^ÞOlß~zzò [¶X#<| mpª5] ‹›Ñ§J‘i³g1dˆ .<…¼¼RƒPž 4ô)bbþ¥X%ï—o‡Í›ÇâÞ½°´TÃÎ× ¡±[¶„E¶8##e\¿¾[¶X#$ä)´µÝ±k×uQ-¦88`Îãcs}ýšÏ7 ÙÙù8¾¼Á (}> {)Sáû÷Ÿ|«_èÖM:µAdd I1X[kàÊ•¸|yzö”ƒ«ëY¨©­Áš5çkôüÌÈÈÅÂ…§ ¯¿ß¾Õ¯ µµ»aÀE¤¥å”s2 „ %%!!ñÕ~¿43žu• !Áæ¹ÁéçÏâ2Ãê/!pq9 ié– œ#°Ï©>>·!!ÁƸq¼ßn(J¤¦~ƒ““œ×ÚàÑiÀ…r±Á`0 '× Ã‡«rU!WÁ`Tü‰„”™tq ¨Öú+¨ ® 9¹V•NZÅÅ  ™Zh‡¢¢âFi ùwï²êüÝ÷ï¿ÀË+Æm‡¶¶;¼½#зogœ:5Ož¬ÅŽãabÒMšv²~ríÚ3¸º•½a±˜X¹ò, KpâD ôô6`ÿþ›pt„˜WŒ§E§ê­%Õ]bbLhjvÅÜ¹Æ ¨H¸`ãåË4¤¦fWX‡±XL¬Xq¶ÚaDVV +WZàþý•pp0À±cw ©¹+WžÃ§Oߨ–W-L&ãÆi!&Æ ŽŽƒàéy::ëpO(×´ Wט0a@µã{nnßú\`àÃ*Ë.)áàþý7>|G-âÇŠÆÆ=žPáó~ý:c÷]…Ù³pñâcèém€­í„‡'Tz OºHKû†¡C=ê¼=ùW §ˆˆT¶!‰Á`ÂÃãj¥Ç~GUµÆÓ„˜XåN;¶®“¾êØ¿ÿ&>þÎC!.ÄA\\0“záÈ‘(LŸ>N†‡'"))­ìÝŸp8äÿ1žN Ý$-&Æ„£ã J',B´´)PE#Ì4k&Žïß ¨–AC„ìÙ†ܹz3÷áÃWx{ßÄðá; ¥µ{÷†£wï¿0 Ož¬ÅæÍc¡¯¯$4{ùÉïqr~QRÂAbbÞW× ˜™õALŒœMé—HH°+} Ã`0д©8¼½'—Ë\Kó„8;ûãá÷<€_÷i*P Žÿ´jÕ  Æýû+±t©._އ¶¶;,8‰×¯3¨–W-l8;›âÎW ÚK–œÆ A[qýúsª¥ÑTƒÁÀÆV9²o•ã!_¿òÇóÎÇçvµ­¢¢¼z•5µÕõz%,)ãéÓÈÌü^éñ¶m›ÃÉÉ÷î­Àv(,,ƤIË^åäüPú\éãs@©À§OÙ03ÛŽ¸¸®ô”œN"(¨jã ‡ÃARRÂÃk,oùò•nõc2øûoY®´ÕDFF.vï¾^és5‡S_ÑÆfRSϰòä]üüYŒ)SèmuÕ±eKÞ¾ý OÏI\¯«fÖ®]stîܶÂçRRuŠª¿}{ho‰9œR‹ÿ¶m¡\—O566š•@ïܹ-½¿Ÿ†kš7Gn.mtjl|þœ‹ñã½±qãe¨ñaåÓ§o8p #Gî„–Ö:ìÞ}ÊÊrð÷Ÿ‰'OÖbëVk Ø~ÀÿääLLœ¸ÅÅœJ9¸vmÖ¯ƒ6m$)P(4mZ¹¡ÎÓs"Ï·ˆnnçW©§ù/ÜÝ/"/Ot·Ü4kÖ3fàî]7lÞ<¼…¡á&88øàéÓTË«™ذÁ ‘‘ËЭ› ììcÌOÄÆr÷°KÓp°XLìÞ=††ÊUΗüØîyïÞ¼yó¹Z‹ )©¦&q…®îßc!2²z‹Å„™Yœ>=K`hØ¡è×o5/>+Wž 5õ?ï°ââäæ`ôhO„†>­µžmÛBÿïVýyL&Û·×üüÚ¶msüóÏð ÏÄbb,((H×ZWmؼù2 +¾¼øEq1ÙÙù6lrr癣¸˜ƒ"1nœZ·¦×aU‘ˆ}û±w¯-ddZpý}z2(}+þŸ ‹Å„ƒƒ!×o}££_ãÑ£wUz01™ 0 tìØ 6pqR/ÝT !Á†ƒƒa¹ÉJLŒ}}ÁÜ'K#Ø4o.A{:52"#“`d´©,^‹˜×®U4:¥¦~áC·`n¾k±cÇ5të&‹'ðäÉZxxØÀÐP™öhª„¬¬ï;Ö yy…•zÝB›[€«WŸQ N´øs &ÆÄ”)º05íE‘"Áçþý78z4ªÆó!Èη—Wx¨¢6›…qã´pëÖ?ðöž‚””, âñã½ýºæ(¤kWi:d œA`n¾ >BŸPTa³Y8xÐ]+ÝþÄ v¾¾wªŒŸ+&Æ‚„‹ ÅãÇk0j”Z±§DIIqhjv­t‹]U()µÇ† Vˆ] W×xûö3ΜyXaTRBPTT‚éÓâðá[µ*ÛÅe<ݺÉ|ÐTšúqæÌC ´IIiU¾kÒ„11žŠ§O×a÷î‰05íÕ¨³Îq˯ÀÌwïV˜ùbb¬r[*®]{Ve SššiÞ\@éUw÷Ñ<*ê°XL˜šö‰¸%æÍ3AÛ¶ÍÁ`ü÷STT‚àà¸Z=àˆ"êêòðõް°ÅèÑ£æÏ÷‡žÞøúÞÁÏŸÅTË«11æÿ3ݹbÞ<< =½ ðñ¹#гÆF«VÍèYY)ˆ‰1AAf&ï¶×BpôhTÙÜÏd2!'× ‡Ù#8xz÷îȳº„‘=:@N®"#“¸þî¯âµéOAXØsXZîAVVíæ{ƒ¡CU¶þþ3Ñ·ogÿ=㊉1ááQ»ØÄ«VY”çl6 :Ôßkµ¨¨+Wž+3º1¥šØlFŒè‹àày¸sg9¦Mˆ–-›Õ»>^ãåƒîèÙSŽj)ÉÊ•çŠÃ‡§VKšÊè::¥n~VV\ÿ|ñâÂÃÊ:¾¶¶"Λ‡‹ah¨Ìs­‚€¬lKXYiøïÚÑÐpËßËâë×¼ZO‚4ÂCnnOÀÙÙÅÕB KðâÅ' Ò›64Õ‘+J3ÿrƒg±˜`³ÿ»–Íš‰£_¿.˜0A kÖŒBP#ž?wÇ›7[èíuõà×¼?l˜ lmµ)V#ÜÈɵ*‹ërôè4èëÿ £Ôû‰;»Ã5¦êezô耽{'!*j9 »cõê`hi­…—W¸À&ä`ÃÉÉÑÑ®07ï‡U«ÎÁÀ`._~Ò¨ÛR‘isçæ¡U+Éÿg?ã]†¯˜˜‘’’BJç 7·‘ˆŽvŰa*<«CØ14TFxø ®¿wëVWÙØŠ‹9xúôŒŒ6ãíÛÏ\Õeh¨Œ‹qîÜÕøý_ž­@©Ñª.[ ÿÄË+ïÞ})û»sç¶ps3Ç“'k±w¯-45wγgqëVQ-E ñò G@À=øúNçIü¯ 1ÒÓÓ‘Pû`j¼&8ø%NŸN€‡Ç tèÀÝ|íÚÛHLÌB¿~²3F u·àÖù»ÕÁ뛚ú Þ€µuŒÅŸ@âüº4‚Azzúõ[…sçæ5ÈÍ›7oò½àÛ7&Ö¯¿‰ôôl®Þjß¼¹JJí«9~“êDë×ßâèÑx¥oÛ·—„‚B+tìØ;K᯿Z M›Úo—••E=x®S”¼}!+;L¦$ÒÓ÷ÃüíC~~~˜0a_ÊæGÿÌÌüˆˆœ;Wê àäÔ4Ö?¹8pà&Ž»‹…™3 0c†$%ÅF`x÷. ›6]Áùó ¦Ö®®#1`€"Õ²ªç·_kúöí%±}» OÊ\½: /_~©©<¬¬z E‹&5©ôèѲ²ÂåmzåJÒ>}úQ¤¦~ÃåË ¬Na!4ô)|°sçžÅŠ®òUv¯^Ôd|‘”lÌ̘˜hqõ½÷ï¿BQ±Ö¯nÝêž2==™™üÏôÁËëÛ«`lü'äÙþÜ_4Ôõ ¡YY)ÈÈ´À³g,.X»ví„nQ",B°eËøûWÌFWL&×®=¯ÖèÐí÷'_¾ä£E‹lxxŒF÷î²èرU½Þ"¾xÁýWn5jߌTàïÿÚÚ²èÚõ8ÕRjÄÚÚšïuð£ô‡«k ¢¢þEtô())‹tŒ·Ú®ddZÀÍm$æÍ„ƒoaß¾:t sæÃÞ^M›ò÷¿.tîÜ^^“0gŽ1Ö­»€Ñ£=ajÚ ®®#jûTÎo½z§NÉãÀÛ£ÁênÝJÂÌ™¾X¼xO““Uit’–æÿÀTU½«Vµæºþ¶mÛáàÁú{ùp8œ1²ðúú®ZÅŸ u=h¨GW÷oܾý Ó¦ lú¤¥¥)gDK—ž =ý'X,44ðý{~ü(B~þO|ÿþ……ÅUÆ ápNº_£»1Ý~å‘––-ë³òdddxVVeŒ;cÇŽåk ‰¦fºtáíKa†ŸýÓÆ¦=llª~ȸ]ÿ´lÙ ‹ ÅôéáåŽ;®aÿþ›˜7Ï“&éd`ûÞ½;âÔ©Ù¸y36\‚‰ÉVXYi`É’ahßž»¢Õó›´´4ÿ‚´týcî´jUÿÙ³ccgÄU(*6ÁòåÆÕnÏú垟ÿË%¼?~áûwÁßžDCó;´Á‰FPhÕª–/™3 áéy6\‚—W8œM1aÂô34TÆÀÝqî\,6mº‚àà888`Îc®³HÓð9¹úœäý&¨ Ô–f÷ÆmèÜ< ××à$Ì07ß…èè×TK«)©¦pu¨¨ £Ó ÎÎþrss±iÓ&Àׯ_±eËÀëׯáããS«²òòò°aÃ~I¥¡y””ÚCEå/œ9ój)”òûDE9ôXV?èöãÜÌÁÂÊïíüûZäOD©]ù ÝkFEå/Ì©S³‘•õƒoüy~øøñ+ÕÒ*EI©=ޙЋçƒÉdÀÜ|7ìì#))ji4<@úLC``Ð%%ò@¤bµy±¸˜ƒ/ÃÒR½zu¤Zå<~üVV{ѯ_;6ƒï' ŒNÓ§OÇÛ·U¿ Dtt4²³³±zõj@vv6> HLL„··w­êÊÍÍÅÊ•+ë­™†¦13v¬F£ÝðûTÕqÜ”ó;ôXV?èöãÜÌÁÂÄïíþ{;ÿ¾ùQjW~C÷ÁÚ£¯¯„+WÀËk2bc“¡£³kמGNΪ¥UŠºz9ÂÏo&>}úŠAƒ¶`þ||ø ˜Æ2šÚ!L}†Ÿ´i# •¿*®SCÍâ|(M¹nccƒŒŒ ØØØ ** yyy4mÚ£Fªt¡‘žžŽ‘#ÿÛoÉápàää)))ÈÈÈ`ãÆÕê9tèºtéIIIØÛۃüԴµ!++ &&&ðó󃢢"$%%agg‡’’ÒÈÓ§O¡«« ())Áßß0~üx>~üˆ¾}ûâìÙ³€ÔÔTôë×_¿Òo¤h*§]»æ07ïOÏ0ª¥”QÕ½þ«lß¾rrr––Æ‘#G°hÑ"HKK£C‡àúÜßÇ êúáŸc\FF† ‚cÇŽ¡U«Vˆˆˆ¨U9U!*cYUsÝ~ÂAUs07mT}Ôt¬ªþ_ÉÉÉ022*÷™ îÝ»W¡Ýÿ\sÔ„¨´+@÷AAƒÍfÁÎNÑÑ®°±Ñ„»ûElBHÈSª¥U “ÉÀ¨QjˆŒ\†µk-qñâchi­ƒ‡ÇUäåý¤Zßáv äÅZnÞ¼ UUUˆ‹‹CYYçÏŸ€ ýg„ ððð(ûÞçÏŸÑ¿|ûö­Êß$l}†)#%% oß~¦ZJ¼˜‡뼸cÇU””,X0˜j)”ô¶¶`eÕ;wNà[–º*!––F"""þü¸JBCC‰œœyõêÉÉÉ!ææædÖ¬Y„B¾~ýJ:tè@"""Haa!yüø1'AAAäÇdÇŽÙ±cyÿþ='„òöí["))I!äâÅ‹„Á`’——G¢¢¢HË–-I```-©©©qpp ?þ$¯_¿&-[¶$áááµþ=Üþ~ná¦üÔÔTÒ¤I“²ßóæÍÒªU+ríÚ5òýûwÒ¡CâééI È7ˆ””¹sçY´h±³³#„âççGÄÅÅÉ”)S!„œ8q‚¨ªªòE/èðüùG"'·€ÄļæKù$--­VçVw¯§¦¦&“IV¬XA8ñòò"ȦM›‡Ã![¶l!ݺu#„®Îý} ª®þ9ƽÿž4mÚ”XZZ’èèh’””T«rþ„cÙ‹/È‹/j}>7pÓ~ÕÍtûU ?Ûñóó«Õ¹ÕÍÁÜ´Iu÷AuǪëÿÕ‘@Ú¶m[î3UUUrýúõ íþûýòûZäOxÑ®„pwýë7ý“îƒU#럾ٳ9¹ÄÂb7yø0™R=5‘—÷“ìÚutïþéÝÛ<I ‹©–Åüê?¼Zˤ¥¥‘-Z£G’‚‚Lš5kF+ôŸ   ¢¤¤T¦wÏž=dРAUþ^ŒoÜ\?A¥°°˜tフ9Å·:üüüH%á•«yXçEn®7¼z•N:w^H|}«_3ˆ:»w_'rr ÈÖ­!„ÃáP¢¡ÞF§àà`"''Gž={F)T¿~ýZv¼cÇŽäÑ£G„B–,YBÆ_îû***5Z·nM ˾ãêêJ,--+hùuãgdd”}¦££CÎ;Wëß#hF'äÓ§OeŸ 8’€€¢¦¦Vî|'''2þ|N:uêD!ÄÁÁ8::’.]ºB™6mY¾|9_ôÒˆ&x[Ûý|)››EIu÷ú¯>òýûwB!/_¾$bbb¤¨¨ˆBH\\‘••%„®Îýó©ª~HHù1îýû÷ùøñ#×åü/Æ2A1:U7GÐíW5‚dtªjæ¦Mª»ª;V]ÿ¯Žêׄ”own×õiWBÏèD÷ÁʤõOll23Æ“ÈÉ- ³g#ïß¡ZRµ|ùò¬]{žtíº˜hh¬!§Oß'%%Ô<èp ¿ú¯Ö2ÞÞÞdàÀåʱ²²"kÖ¬©Ð~þüIZµjEâãã !„ 0€øúúVû[ê;¾‰‚щBìí“É“ò­|nN¼˜‡y^ä—ÑiâÄýÄÄd+)..áyÙÂ@qq Yºô4éÔÉ…œ|8U?…Fˆ˜;wÂÑPy_k(ª»×!))  ´ˆ‹‹CLL¬ìï?áæÜß©¬V“É„œœ\½Ë•±¬6sÝ~‚MMspmÚ¤ºû ºcµéÿ ‰(µëïÐ}P°QSë‚3gæâÐ!{<~üºº‚l¼ukI¬XaŽ;w–càÀîX¸0&&[E6Vdmú¯Ö2>|€’’R¹ú»wïŽ÷ïß(ßš4i œ9sÿþû/ž={†1cÆTù;D©ÏÔCCeDG¿˜˜j¼˜‡ù… Þ7aa/‘w÷Ñ ¿•LÈÏ/ÄÔ©G _ß7N‹R=õnB<<<••…ÀÀ@T9 µnÝå>ËÌ̬±Ž?ÏÉÈÈ@›6mê.Z’’‚¾¾>’““ËýÛ·oØl6LLLàïï¼¼<üý÷ß044„¯¯/rrr0`ÀªåÓ::Ý ¦Ö6\¤TGu÷º "(“­ ÀÍ!ÐíW^ÌÁÕÝÕãeÿÏË£ t¬šaÃT*?|ø–À<ÿI‡­°m› Â×BQQvv‡an¾÷ZZƒÃ«±LJJªÂ˜œ••…–-[¨Ø¬­­qæÌøùùÁÒÒ²Ì8AS=††Ý‘—÷÷ïW½!á׳°¨Î‹?cåÊs5ª´´¨–ÓàddäÂÊj/ž$$ذ´ÜƒÉ“"!Aô悪àÕZÆÔÔׯ_Ç›7¥†»ôôtÁÄĤÊóSSS±gÏLž<¹Ü±ÆÒgêBçÎm¡  ÈHÁÈbÇ‹y¸1Í‹;v\EVÖw¬XaNµ”çÉ“÷6l;òó qñâ|¨¨üEµ$<0:M™2ïß¿GŸ>}`bbkkk¬[·®ì¸ŒŒ  ˜šš¢gÏž022ÂÈ‘#«$gÀ€pqq”””Ð¥K888æÏŸ_–©­1ñ÷ßcݺu0`LLL ¤¤„Þ½{ÃÆÆ0lØ0dgg—3:eggÓ[ëh¸BSS#F¨bÍšó(.¦&EM÷:Õü>ÆÕQËjš#¨†n¿š©n®-ÕÝÕ«kÿïÚµ+´´´ ¦¦ ,\¸ºººeÇkÛî¢Ü®‚Ý놔TS¬Xaލ¨ ¡ÑŽŽ'0lØܾýŠjiUÒ¯_gœ>=³‘‘ SÓm˜;÷8Þ¼œ,aü‚Wk™¾}ûbáÂ…PWWÇàÁƒÑ«W/XYYaèС•žÏf³1jÔ(HHHÀØØ¸Ü±ÆÖg¸ÅÐP‚atâÅ<ÜXæÅÄÄTìÛeˆ£}û–TËiP‚‚bÔ¨ÝèÕK.8£S'Úög§ºN,(( ·nÝ"×®]#éééåŽedd«W¯’/_þ zO®_¿N²³³+-¯¤¤„dff–ûìÇ$<<œÄÆÆr¥[)xmøðá¹zõjYV^#H4i¨!%%“ÈË/âi懺šä÷½þ;•AUQÙW—rx '¤ú9‚ÐíW=¨C k^ÌÁÕÝ5Ý#uéÿEEE$**ŠDEE•UýÅïíÞÐí\—ëÏ ‚ÈWú °­ž?ÿH&Lð&:Ì'&x“çÏ?R-©Z8¹pá8p#éÔÉ…8;û‘”jÚúwøÝxµ–yûö-¹zõ*IJJªñ\;;;²téÒzÕW[aüáׯ?'rr HFFÏË®Kàl^ÌÂ:/ò*xI ‡Œ¹‹Œ±Ch’ð‚ââ²zu0‘“[@6l¸$¿]Œ†+qqqèëëWzLZZƒ.÷™ŠŠ TTTª,Éd¢mÛ¶å>“€‘‘QýÅŠ;vDÇŽ©–A#ÂtîÜÓ§`ëÖXXôEË–Í(ÑÑ÷zecPUT6ÆÕ¥Q¦º9‚ÐíÇ{x1WwÔtüÙÿSSSqãÆ*ÏWQQªª*ôôô*=þg»ÓíÌ[è>Øðôì)?¿™¸sç5ÜÝ/`ðàm1¢/-ŠnÝd¨–Wƒ‘#ûbøpUœ=‹íÛ¯B_#ÆÓÂüù¦èСÕù¯Ö2¿‚‘WÇçÏŸqçÎ"..®Þu66´µÁf³™+«þTËáÉ<,&&&ÒóâñãÑxòäBC]Àd6Žø€ÙÙù˜9ó>|‹}û&Ãܼ/Õ’*…îCCCS#NN&caÕ*Áu§¥¡¡i<°Ùl´k×®ÊÍšQc§¡¡]Ýn¸reö훌¤¤Tm†““’“kNÜCL&VVýqëÖ?Ø´É  ÐÖ^+Î!##—jyBÍÛ·o±~ýzlß¾½BÆ;šš‘”‡¦fWDD$Ô«œ’^¿ÎÀÅ‹±uk¦N=‚M›žB\¼+”ÒÀ§Oß°qã%Ìœiˆ=ªÎ€*J$&¦bذxûö3.\pXƒðÄÓ‰††F´iÑB[¶ŒÅ”)‡0|¸*LM{Q-‰††¦Ó®]»*c˜ÐÐ4v~÷":þ<ۇɓ111Öwˆâ‘•UHtt*ÑÑÚÊ¥èè4ââÒ)))cãÆ¸¹ÙàççĨQññqÄ×׉¦M­šÕu‘J¥föìPš7·å…n¾ Ń¢¢®ukBCŸÁÁÁBß!ÝI: !îJ¿~¾„„tcΜÙ¾ýÅ:9B!„7g` dذv Ú–]»bøì³Œñ;·`æÌ>ôíë[çN¤ÍÌòâ‹ý™:5ˆ¯¾ú‹E‹¶³ténfÍêË„ Ý$ù$ªìêÕ¿[ã´ ¦t¢¢R*µÆy{;Òµk &O$=ý2Ÿ|²mÛ^” »:æÓOwpút2[·þ##}‡S# KxóÍõ¬[wŒgŸíÃ+¯ Âаî·Óý›$„wíÝw‡sòdO?ý›6ÍÆØX^J„BˆúD¡Pз¯}ûúpäH<Ÿ}¶“I“–ãæfÃÔ©AŒÓ¹Îd[X4âÕWãé§{òùç²`Áï|öÙN¦NíÉäɘ™5Ôwˆ¢ŽP©Ô$%å™Jl¬¶réß­qžžöøú:Ó¯Ÿ/¾¾Žx{;acÓ¸Òvrr®ðá‡[Ù¿ÿœTø×!^`Ñ¢í¼ûîp||õN8vì"Ï=·†¢¢R¾ÿþiúöõÑwH÷LÎ…wÍÄĘo¾y’?á­·6°`Á}‡$„Bˆ{Ô¹s V¯žÆ¹s|ûí^æÏßÂÂ…[?¾ “'Õ¹ªfkëÆÌ›7ŒY³úòí·{ùòË?ùòË?yê©L™„µuã;oD<0²² u-qýccµ­qJ¥‚fÍlðõubÔ¨x{k[ãš5³©REŸµucüý]ؽ;F’NuDNΞ}v5>êǤIú§Ú•—«ùä“m|þùNz÷öáãÇÝ ­o$é$„¸'Í›ÛòñÇã˜6m;·`äÈúI!„÷ÁÃÞ… ÇðÚk±fÍAV® gÙ²½ Њ©S{Ô¹¹OÖÖyå•AÌ˜Ñ‡ï¾ gÙ²=|óÍnFŽìÀĉøû×½!éâÞ]½z¸¸ ]b)**˜˜T²³¯`cÓoo'ºtiÁĉÝñõuÆÓÓþ¾Û/{õòbÓ¦“ÕñÄ}Òh4<ÿ|(FFJ>ùd EÝj¾_ ÙÌœ¹š˜˜tÞ{o$'v ã-“N‘‘‘µG‘••U+û©/Ïom=¢~zì±6L›Ö“—_^‹#>>NU¾ott4ÙÙÙ5ÝÃ-++ {{ûÛ¾üûÕ¬šþ÷ aãÆ5¶}¡_ò÷yÿö÷?Mš4bæÌ¾L›Ö‹­[O³lÙFŒø __'¦NíÁ°aíêÔ%só†ÌžÝ§ŸîAXØQV­ ç‡Ò¾}3¦NíÁ!m«¼¬¸üýèŸZ­!11›¨¨TbbÒ¯'˜RILÌF­Öа¡^^x{;Ò¯Ÿ/>>Žx{;bkkV#ñôîíÃ’%;IHÈÆÍͦڶ;vìØjÛÖ­””а¡ªÆ÷s?Ö­[WåÛ.Z´}ûâX¿þ9,,Õ`TµK£Ñzˆyó6Ò²¥=Û·¿ˆ»»¾Ãª6 F£ùç/._¾Ì¥K—ôOáççW#Û­¯ÏoM=¢þ++S²”¸¸t6nœ]¥ƒq}IºÖw¸¸¸Tûvå߯vÔÔ¿_m¼É·7{ölk¦%@þ>«—¼ÿùÛñã‰|÷]8›6¤aCCFîÄ„ Ýðö®›óTŽçË/w±kW4..–̘чààÎ4hpëFùû¹...XXT}e­ìì+ÄĤ¥m‰‹ŠJ!..ƒ«W¯¡T*hÚÔ__'||ñòªh³®r±:”•©ð÷ƒ×^̤I÷½½ððp–,YR ‘Ý^Y™’ˆZ´ÈÇή¸Æ÷w¿Ö®]{Ûë·o?ËäÉ+xóÍ¡LŸÞ«v‚ª©©ùüßÿ…±woÏ>Û‡—^ðÀ F¿!é$„wëÊ•RÆûЬ¬B6n|GÇ&úI!„5 'ç aaGøá‡ƒ$$dÓ©Ssžx¢;C†´½mBG_²ùê«¿X»öææ&LÚƒ'Ÿ ÄÜ\†Ž×¦’’2bcµUK•K11ide`eeН¯3ÞÞºêyOO5ªuO=µ•JͪUSõJ•½õÖ6m:ÁoÔ™çñ^?žÈ˜1_2vl'þ÷¿Ñú§Zh4~üñ0ï¼ó+ööæ,Zô8:¸é;¬!I'!DµÈÍ-b̘/P©4üòËLâ)„B<À4 ûöÅñÃÙ¶í,¦¦ îLHH7Z¶¬{m!™™…,[¶‡ï¿ßÀOtgÚ´^ØÙÕLKÖÃJ­Ö””CTT*ÑÑiÄÆV´Æå R©iÐÀ//G]K\E‚©¦ZãªËªUû™?3QQï׋*”¤¤zôXÀ;ï çÉ'ï¿:KŸ²2äS:tpcùòɵZåVSRRòxé¥0ÂÃÏñÌ3½ø¿ÿX'“öÕE’NBˆj“ž~™‘#?ÇÔ´?üð4ööU/¯B!Dý”™YÈO?fÍšƒ\º”G·nîŒß•ÁƒÛ`l\·N¤ Jøþûý|ûíòó¯Ü™3zW묞‡EnnQQ)ÄĤëVŽ‹‹K§¸øïÖ¸¿“KÚ977›z™4HJÊ¡k×ùüüóLºwo©ïpîèùçC9v,Ý»_©I²[ÉɹÂ!ŸbeeʺuÏÖ©Yr÷B£ÑðÙ?3ŽŽMøä“q´oßLßaÕ8I: !ªUJJO<±ŒÂ¾ÿþi||êæ¬!„BT/µZÃîÝ1¬^}€;£03kȈxüñ.un%¹ÒÒrÂÂŽðõבœœËcµaÖ¬¾u.κ ´´œØØ4¢£µ­q ¦Ê­qNº &'¼¼êNk\u ø/=Öš×_¬ïPn+!!›=þÇâÅãëõêÒW¯^c̘/ÉÍ-bóæçë}E||¯¼²–Çã™>½7/¾8à®nú'I: !ª]AA S§®äôé$–-›LP§¾CB!D-ÊȸÌÏ?ã§ŸŽpáB&­[»܉‘#;Ô©U§T*5[¶œâóÏÿ$22…ž=½˜5«u¿š¥ºU´Æý\Ò¶È%$dëZã<=ðõÕÎ[òóÓ&šìíÍõz­˜;w=GƳ}ûKúå¶^|1ŒC‡.°gϫֿª2Ðþ]N™²’ˆˆ6o~¾^W"–•©X²d'Ÿ¾ww;>ú(˜¶m›ê;¬ãoŒß IDATZ%I'!D(+SñòËkY¿>‚ Fóøã]õ’B!j™F£áðáxÂÂŽ°yóIÔj ƒµ&8¸3( }‡hãܽ;–Ï?ßÉÁƒh×®)Ó§÷fРÖõ²ìN´­q©º ¦èèTbcµ­q …‚fͬñö®½W)©B!„~”•©Øµ+šŸ>ÆŽ‘*0 ÁÁ ð@©Ôÿ{…‚‚«üðÃAV¬ØGff¶æ™gzémÕ©¼¼"¢¢Òˆ‰I½¾rœ¶5®¨¨…BAÓ¦Vºã*Úãš7·}(ÛzªÛÇo#,ì0G޼¥ïPn°hÑv–/ß˱cóhØÐHßáܵŋ·óñÇÛøôÓú9ýÔ©dÞxãNJfâÄ^yeP½¬Ž¬ ’tBÔFÃ×_ïfÁ‚ßhß¾|0{}‡%„Bˆ: ?¿˜ ޳~} 88X0jTG‚ƒ;Ó²¥¾Ã£¬LÅo¿âë¯wsút2;6gÚ´ž تFf]»VNllº®z)*J›dÊȸ @“&t«ÆU´Èyy9иqݨ{=z‘aÖ°ÿë4on«ïptJJÊèØñ&N àå—ê;œ»¶|ù^Þzk# Ža„núç®äæñ¿ÿýÆ?¢K—¼÷ÞH|}ôV"I'!D­‹ŒLᥗˆŠJeæÌ¾ÌžÝ¯^~"#„Bˆšqþ|&¿ürŒŸ>FJJ­[»2vl'†mW'†8>ÏÒ¥»Ù¾ý,®®V<õT?Þõž>†¤¤\ÝŠqíq/fQ^®móô´¯Ôçãã(­qzPV¦ÂÏo.o¼1”‰»ë;5kòæ›8rä­:ñ÷q7V® ç7Öóæ›C™>½—¾Ã©2•JÍêÕY¸ðw64dÞ¼a ÖN:9nB’NB½P©Ô|÷]8 þŽ­­9 Œ&(ÈSßa !„¢Q«58pŽ_~‰`Ë–S”””Ñ£‡'#Ft`àÀVzŸÿ”Ͳe{ ;‚¡¡’n<õTÐ-£ççëV«h‘‹MçÊmkœ««Õõä’¾¾Îx{;Т…´ÆÕ!O>ù-ÆÆ†,[6Iߡڿ‘  ÿѽ{K>üp¬¾Ã¹+_½›÷ÞÛÄܹƒyöÙ>ú§Ê8ÏÛoo$66§ŸîÉ /<ª÷×¢ºL’NB½JKËç7Ö³uë†oÏË/ÄÍÍFßa !„¢Ž)))cÛ¶³¬_ÁîÝ1(éßߟ‘#;Ы—·^WëÊÏ/fÍšƒ|ûí>rr éßߟ޽}166еÆEG§UjóñqÔÍ^òñqÄËËQZãêeËö°hÑvΞ_'fŽmÛv–)SV°{÷«u¢ µª>ûl' üÎ{ïà©§êÇàó„„lÞ{o[·ž¡wooÞygD½zÎõE’NBˆ:aÇŽHÞ}wII9<ùdsæ<Š••©¾ÃB!D”Ÿ_̦M'Ù°!‚#G.baaÂСm1¢;7¯µFCrrîõ¹Kéœ={‰ˆˆDÒÓóÑh@¡GÇ&téÒ??çëýptlR+ñ‰ê“FŸ>°uëêÄŠÌdž¥e#V®œ¢ïPªì“O¶ññÇÛX°`4OýtkÖÄ̬!Ï<Ó‹‰dÞB!îèÔ©d6o>É–-§HJÒ& † iË!miÕÊ€¤¤bcµ ¦ÈHí€ï 2)/Wcdd€‡‡½nŸŠÕ㜜î­5®¬LÅÖ­gX¹r‡ÇãééÀäÉŒÝQ†×3aaGxõÕuDGÿWoŠ&$dø_¾ür"C‡¶ÕK UUV¦bΜP~ûí4_|1Çk£ïnéàÁ ü÷¿›9~<‰aÃÚ1wîà[. ªF’NBˆ:/+«o¾ÙêUá0eJS¦ô I“FúM!„õÀþýçX³æ{öÄ’—WDƒFh4®]+øÇªqÚ“——îîv56œ<22…+ÂÙ°!cc‚ƒ»0iRÍ›ÛÖÈþDõJMͧcÇw ›¡·Õ—_ýgvïŽ%<üõ:1ÐüV®\)eêÔ•œ<™ÈòåSh©ïn*::•ÿþw þM^Ì;X—œ÷G’NBˆzãòåb–/ßÇòåû(++güø®Lš(«Ý !„ÐVTœ;—¡[1N;à;ÔTmkœ¹¹ M›jg*¥¤ä‘—WLÓ¦ÖºPþþεo^^?þx˜U«ö“’’G¯^ÞLšHŸ>>u:‘ 0ð¿ Øš¹s×ú¾ss‹èØñÞ|s“'×ݕ߲² yâ‰edd\&4ô||œôÒ .]Êãƒ~gýúüý]˜;w°Þ‰*I: !ꢢRV¯>ÈÊ•ûHIÉ£O¦NíAP§ÌFB!©©ùº™KQQÚÖ¸óç3)+Sadd@Ë–öx{;\osÂÇçÆÖ¸“'“t-xÉɹ¸¹Ù0dH[†m‹Ÿ_í% T*5;vD²bE8û÷ŸÃÅÅ’ º1n\lmÍj-Qu¯¿þ3'N$±uëj}ß¼•+÷qìØ¼:;ó411‡Çÿ¥RÁ?N¯sôÓÓ/óùç²zõœ-yõÕA ÒVÎ%j€$„õÖ¿ß ¹»Û2yrcÆt’¹OB!Ä¢¨¨”˜˜ôë+Æ¥^O4¥qùr1NNM®övÂÇG;{©eË»kÓh4œ<™Ì–-' š7·eÈ6 R» ¨ 2Y½úaaG)..eРÖ<ñDwºw¯›mI«ß?Í´iß9 ‹ÚùPRRFÇŽï0iR /½4 Öö{7NœHbòäoqq±bÕª©X[7ÖwH:ɦ5kbeÕ˜çŸ×.XTS­´B’NBˆD\\:+VìãçŸa` dذvL˜Ð­Ê+Õ!„B¿T*5‰‰9DEý3¹”JRR.SÓx{;TJ.ùú:Vû ¿F£áĉ$]êÒ¥<š7·eðà6 ÔšÖ­]j¥¢¤¤Œ_=Á÷ßïçĉ$<=xâ‰nŒÓs󛯔'jO^^­Z½ÉòåOÑ¿¿­í÷»ïöórìØ<¬¬Lkm¿UµiÓIæÌ %  %K—N¢Q#c}‡h“M_|±‹~8€•Ucž{®!!]%ÙT $é$„x \%,ì?ýt˜èè4|| î¨QêÔ§,B!ÄÃ,7·ˆ¨¨]ÕRtt*±±é”””a` ¤Y3k|}®'˜´¾›5³®õÖ—& ~ûí4Éɹ895áÑGý8°5]»º×ÊIëÙ³)|÷]8¿þzµZÃðáí™8±;mÚȇkúԯ߇y2oÞ°ZÙŸZ­!0ð¿ôèáÉ‚cjeŸU¥ÑhX´h;¼§ŸîÁ›oÅÀ@©ï°ÈȸÌçŸWN6ßccC}‡öФ“âuút2?ýt˜õë#())§ÆŽíL¯^^uâ („B<èÊÊTÄÆj[ãbbÒˆŒÔÎ^ÊÈ(ÀÊÊ__çëíqÚ9OO{LLêFuÄ¿9s‰íÛϲu뢢R177¡o_ hEïÞ>5ÞÞ_PPÂ/¿åûï›NÛ¶M™8±;Ƶ«³ÏÙƒìÍ77pøð¶o©Vö·eË)¦O_Exøëuj!ÒÒræÌ å÷ßOóßÿŽ"$¤›¾C’dS"I'!ᤤŒß?MXØöï?‡µucnËðáíèØÑM !„ÕàÒ¥¼JÉ¥˜˜4âã3)/Wcdd€——ƒ®-ÎÏÏ //GìíÍõö=KJÊaÛ¶³lÛv–Çã10PäAÿþ­xôQììjvø¡Cøþûüþûi64bìØN<ñDw<<ìkt¿âo[·žáé§WÖÚ\§!CãàЄeË&Õø¾ª*3³§žZN||ß|3‰À@½ÆóïdÓ¬Y} é*É&=’¤“â¡réR›6`ÆãDF¦àâbÉСí>¼}­/“,„BÔG……%ÄÆjÛâ´ó—Òˆ‰I¥  ËJÉ%ooGZ´°ÃÐðÁ­2ÎË+bûöH¶o?Ëîݱ”––Ñ®]3lÅ€­hѶÆö}…°°Ã¬^}¤¤ºtiAHH7nSgW6{PÔæ\§Î3zôlÞ<‡šÕ辪êÔ©d¦LY‰‰1ß?•æÍkîÿùT$›Ö¬9ˆ¥¥)³fõ!$¤›$›êI: !ZçÏgòë¯ÇÙ¸ñ.dÒ¢…-Ç·gàÀVµºJBQ•—«IHÈ®4Ø;&&¤¤ÌÌâå¥m‹ÓÎ_rÄÛÛé¡r}õê5öîã?ΰcG$¹¹ExxØÓ¿¿?´¢]»¦5Re­Vkس'–ÐÐClß~cFêÈ„ ]ññqªöý ­~ý>¤{÷–¼ûîˆÝÏØ±_¡Ñ¨Y·nf~üñ¯¿þ ݺµä«¯ž¨Õüþ)11‡o¾ÙÃ?’dS%I'!„"#Sذá8¿ývŠÄÄš6µfÀí›ÃNšË (!„´¬¬Bbb´•KßãâÒ)--ÇÐP‰››Í ƒ½›6µÖwØužJ¥æÈ‘‹lÛv†mÛÎ’˜˜ƒ½½ÅõAä­ð¨‘AäYY…¬]{„5k‘MûöÍ?¾+ƵÃÔ´fçN=lÞzk‡Õì\§£G/2lØÖ­›I@@ËÛOU\»VÎë¯ÿÂ?föì~¼ôÒ½¼O>{6…/¾ø“ß~;…ƒƒ3fô–dS%I'!„ø—èèT¶n=ÜáìÙ¬­óè£þ àO^4h 3!„õSii¹®5®"¹JvölmÍðöÖV.U|÷ôtc_5‰ŠJeÛ¶³üñÇΜ¹„™YCzõò¦Oúõó­ö•v5 \`ÍšƒüþûiŒŒ 1¢=!!Ýdå»j²mÛY¦LYQ£s&Lø†+WJÙ¸ñ¹Ù~U¥¤äñôÓߟɒ%!<úhͶÞÌÞ½±|ñÅ.öí‹ÃÏÏ™3z3th»º}·¾“¤“BÜFrr.ü¡M@9rccC=èÛ×—Þ½½quµÒwˆB!Ä 4 ÉɹºäRtt*QQ©\¼˜J¥¦AC]k\ErÉÇÇ ›êMzˆ[KIÉcÛ¶³ìØÉ¡C(+SѺµ+<âGß¾>´jåR­mxùùŬ]{”ÐÐCÄÅ¥ãççÌøñ]5ªãCßy?jz®Ó©SÉ ø ?þ8ž=½ª}ûUÇŒ«±µ5cùòɵ:¿©¼\Í–-'ùâ‹]DF¦äÉŒ½éÕË»Öb÷N’NBQE¹¹EìÞÃöí‘ìÝK~~1-[ÚñÈ#~ôîíC—.-j¤D^!„¸‚‚«ÿª\J#66 ®®Vºä’¾¾N4on#­ãuHQQ)ááçØ±#’¿þŠ!--;;3úöõ£Oozõò®Ö¶¸£G/zˆ_=À°aí?¾+:5¯¶}LXØQ~ùåÅÅ¥ôíë˸q]èÓÇG*¹ï b®ÓÙ³ó15mÀ¡Cظñ»vEqâÄ;w¼||O=µ‚Ù³û1dH[Ýó=|øg°ví³5ýn°mÛYþ󟟰¶6eéÒ'keÄ„„l–.ÝMXØ52fòä &OÄÊÊ´Æ÷-jŽ$„¢ši4¢¢RÙ·ïááq:tââk¸»ÛÑ£‡'ݺµ¤K—ØÚšé;T!„zvõê5ââ2ˆŠJ¹Þ"—NTT ¹¹EØÛ›ãí툟Ÿ3^^øø8áåå I€‡Ty¹šcÇ.²sgýMtt¦¦ èÑÓ¾}}éÛ×{{óûÚGII¿ÿ~š°°#ìß++SFîÈøñÝhÙÒ®šɃ%11›©S¿ÃÎΌÇã).¾¦».5uÑïìØE†]€Ï<ÓWW+fÌXÍæÍÏÓ¾}³‹ýß®]+çÝw7±re8ÁÁyÿý‘˜˜רþ4 {öIJbÅ>víŠÆÕÕŠiÓz1n\çݯ¨=’tBˆVV¦"""ððsìÛÇÉ“I”•©pw·£K—tíêN×®îò µB<À4 ‰‰9DGk[â*ZäsP©Ô˜˜ãéi¯¯óõ9|}å~q[ÉɹìÚ¥mõ?pà%%eøù9Ñ»·½{{Ó±cóûZÕ+%%ÐÐC¬]{”””<:tp#8¸3C‡¶{è‡ÇÅ¥³sg¿ÿ~š“'“P(¨TjÝm¬¬L9{vþ·µuë¦LY¡»lh¨D­ÖàêjÉ?ÎÀÍͦZb =DÇŽn·›ÎÌ™«INÎeáÂ1 Þ¾Zö{3……%¬[w”+öŸE@@K&O¢™7÷€‘¤“BÔ²«W¯‘ÈáÃ8t艔””áâbI×®îtéÒ‚´onÖß/„¢n»|¹˜¨¨4bbRußcbÒ)**E¡PЬ™5>>Ú–¸Š¹fͬåDKÜ—«W¯qàÀvîŒdÏžX²15m@` ½{ûУ‡ç='/Ôj û÷Ÿ#,ì[¶œÂÐPÉ!m îL—.-ªu•½ú`åÊpæÎý¥RZ}óSjKŽyëŽÛ =Ä«¯®£¼\]é÷FF”—«éÛׇ3úЭ›û=ÇœM÷îïpáÂÂJUDjµ†¥KwóÁ¿ãïïÂgŸ…T[¢ëßΟÏdåÊ}¬[wµZèQ™<9ooÇÙŸÐ?I: !„ž••©8y2‰Ã‡ã9|øGŽ\¤°°só†tèàF‡n´oߌöíÝúO…¢.)/Wsþ|ÆõÙK©º ¦ÔÔ|,,áë눷·“î»··C­­ü$n ÙüõW {÷Æ~Ž¢¢RÜÜlt ¨À@{ú¿˜Ÿ_̆ „…åôédÜÜl3¦cÇvÂÙùá¨ÚV©Ôôì¹€¤¤\ÊËU·¼‡‡={ö¼zÇí-Y²“O>ÙÆµkå7½ÞÐPIy¹šÀ@~üqú]'¨Õj ÇÆñãQ(ŒÑ%KBmµÜœ9¡;–À‹/àÙgûÜWuÜ­ö¿sg$+V„³o_ÍšYóä“<þxÌÍMªu_¢î‘¤“BÔ1*•šsç28v,cÇ.rìXññY(• <=èØQ›ˆjÝÚ‡jc „âF¹¹EDE¥•öùKi”•©022ÀÝÝŸŠUã´LNNMô¶€ö®£G/²gO,ýMdd*††J:wnN^ôî탟ŸÓ]W,EG§ñÃùõ×ãäçÓµ«;cÆtbðà6|rõÒ¥>yÞÕ‚'ee*víŠfíÚ#üùg4††J hEppg<ØÖ-§˜6í»[^ß³§?þ8ýŽÛyî¹5lØqÓ6=¥ %¡¡Ïäy×1^¼˜EïÞTª¢R((•J4Ï<Ó›—_Dƒ†7Ü·¼\}Oï)Ïœ¹Ä÷ß`ýú •ŒÓ‰§ž ¢E Û»Þ–¨ÿ$é$„õJ¥æÂ…LNJæôéKœ>Ldd ÅÅ×011Æ××IQBq99WˆŠJ%22õúü¥TbcÓuÕK-[Ú_¯\Ò®çãㄬ<*,†ÈÈTþú+š}ûâ8|8žòrµn y^tîܼʉՊö»õë#ˆˆHÄÞÞ‚Ñ£;2vl'<<ìkøÑÔ¾ÿû¿0ÂÂŽÜ0 `ðà6|óͤ;ncìØ/ ?w“k(•ðí·“0 Õ]ǦVk:t §O'ßÐh``€áá¯Ýt•¸‚‚«Lœø-‹?^¥ùN……%üúë ~øá §O'ãáaϤIŒÓ‰Æìª7q{’tBˆ„J¥æüùLNŸ–D”BüSY™Šóç3ˆŠJ­TÁ”™Y€­­>>Úê%mõ’‡‡½T/‰‡RQQ)û÷ŸcÏž8þú+š„„lLLŒéÒ¥AAžyâëëT¥ê¥óç3ùùç£üòK))y´níJpp'†m‡µuãZx45ïêÕkôíû!—.åUJì(9²Ÿ~:þŽÛèÓçbbÒnø½B¡àÓOÇ3ztÇ{ŠméÒݼ÷Þ¦[:744`øðvºùN²³¯0vìÄĤ3yr ï¿?ê–ûˆˆHdÍšƒlÞ|•JÍcµ!$¤ëC9`^Üœ$„âV•DTÅI–——ÞÞŽ4iÒHßa !Ä=ËÊ*$::U7Ø;**•sç2tÕKöº¹K¯wÓF$ÄÃ&11‡ðð8öí‹cÿþóää\ÁÚº1- ò$0Гfͬo»ŠÕïÖ¯`Ë–S\»VNŸ>>ŒÛ™¾}}06¾±µëv’“squµºŸ‡U­¢£S0àÊÊþN:0~|Wþ÷¿Ñw¼ëÖo‘]Xéw …‚ùóG2yrà=ÅŸEïÞ +Åt3 …‚Å‹g̘N¤¦æ3jÔ礦æSV¦¢aC#Nž|§ÒÀïüübÖ¯`ÍšƒDG§áããHHH7FŽì ï#Å $é$„™'¢*¨¼Âß IDATâæç`oo··6åí툗—žž4jtcéµBèKY™Šsç*ª—þN2eeiOÜìì*ª—œu¾[¶”ê%!î‡Z­!::•½{ããСx®^½F³fÖj« ZÞ¶Š©¨¨”­[ϰnÝQöï?‡¹¹ #Ft`äÈöU’ýØc‹P«5„†>ƒ¥¥i5=ºû³re8o¼±žŠÓkcc¦MëÅ믾ã}›5{©RrH¡€W^yŒÙ³ûÝS,*•šÁƒ?%22å¶«ëýÓž=¯bh¨dÔ¨ÏÉÉ)ÒÅc` äõ×3}z/ŽgÍšCüöÛ) ” Ò–®÷4Ü\<<$é$„€ŒŒbcÓˆŽN#..ƒèèTââÒ).¾†R© iSk¼¼ðòr¸Þzâ@Ë–vr'„¨q™™ÕKÚ$yTT*çÏÿ]½Tñºäí­­^òõuz`Zw„¨Ë*VÅ ?Ǿ}±œ:•ŒZ­ÁÇlj=´I¨.]ZÜtf@JJ7',ìçÏgÒ²¥£GwbÔ¨8;[Þô>%x{¿h[c¿þúIºus¯±ÇXU†‰¿eïÞÊÊÔ4h`ÄìÙýxá…Go{¿ââk´lùŠî²R©`úôÞ¼ñÆ{Žå«¯þbþüÍÜêTßÀ@F£MnµoïÆ°aíðôt`úôï(,,¡¬¬ò|*SÓ8:Zpþ|&­[»Ò•áÃÛcfÖðžcI: !„¸%FCRR.11iÄÆ¦ëQçÏgVZ&ÜÓÓázîîv4ons×¥òBQQ½T1s)2RÛ—“sÐVbúú:Vª`rw—ä·uEAA ‡¿^ uޏ¸tŒŒ èÔ©9yÒ¦MӛΔ>KW›NLLII9¨Õ ”¸¸XÒ¢…--ZhQîî¶´ha‹“S,)„ ?¿øzR)…ÈÈ”VŽóövÄÇDZÒì%©^¢~Éȸ̾}çØ·O;*=ý2¦¦ èҥݻ·¤{÷–´jå‚ÁßÉ¢²2»vEóÓO‡Ùµ+ccClŘ1ðà…BY·îX¥ý(•JÚ´qaéÒI¸¸Ü¼Bª¶ìßžàà/Q«5,X0†‰»ßöö'N$ñØc‹6¬Ÿ>¡Òóq7T*5ƒ-âÌ™K€v®TY™ŠFп¿ƒµ¦woŸJ#ÂÃÏ1qâ2®]S¡Vߘpm2ÌÓÓž]»^¹éõBÜŽ$„BT›k×ʹp!‹øøLâ㳈ÏâüyíÏyyE˜˜Ó¼¹ îîv´ha{=!¥MJýsH¥x8Œ;Vß!“γÿ9‡I¼òrOßsqs³¹¯XÅÃE¦¼ !„Ð+¥R««®®VôìéU麲2))y$%嘘CRR.II9ìßޤ¤\]ËžR©ÀÁÁB—„jÚÔš¦M­®·ÆÞÞ\Mˆ:#7·ˆùó7vD×¶bllÈéÓÉwL:•—«9>C·rÜÙ³ÚLýœšàëëÄ A­¯'˜œhÖÌF·!„¨ ¥Rq½Ò™iÓz¢R©9}úœãÀó¼ýöFŠ‹Ë€;'ÊËU$'ç2pà'<ö˜sÍïmÚÕªº’ÜîÝé7$œ”Jææ&XZ6ÂÚº1ØØ4ÆÚº1VV¦XY5ÆÆÆ ++Sll̪%^ñð¤“Bˆ:ËÈÈ77›[~¢VPPBRRÎõ¯\’’²ILÌáØ±’“sum{ áêj…“Sœœ,qrj‚‹‹%ÎÎMptl‚³³% ÕæC¢V”—«Y½úï¿¿…²²r4 *•ö„­¬¬œ'+ݾ àªnîREr)..ÒÒrŒŒ ðð°Çßߙ޽½ñósÂßß…&M¤õUQý ”´k×”víš2sf_ΟϠGU¾Å*l7&aoÿ4¹¹EXY™ÖT¸õBjj> —÷;»wo½žPÒ~É"/¢¦HÒI!D½enÞP÷©è¿i4ÒÓ/ë*¤’“sIMÍ'55cÇ.réRW¯^ÓÝÞÆ¦1ŽŽM®'¤*TMpvÖ^¶µ5»çÕd„Їƒ/ðÚkë8w.ó¦m% ?žÈGýq}S*II94iÒgºvugÊ”øû;ãáa/m¬B½Ù³'¶Ê·Õ&P4¸¸X‘]Àå˹¬\άY}iÐàá=vrjB·n¶|þy]º´Ðw8â!ñðþÅ !„x ) µ•L]»ºßô6yyE×Qù\º”GJJiiùœ9s‰­[O“™Y û¤ÔÐP‰ƒƒNNÚ )[[3œœ,±³3ÃÁÁ;;s-dfлŒŒËÌ›÷+›7ŸD©TÜvŽIAA ëÖ¥MW¼ ¾¾Nøú:áì¬ß%Ç…âßÚµkŠ©©1EE×îxۊ׽””<š5kLbâ6^|ñçšQq’tBñв´4ÅÒÒ?¿›Ï{P©ÔdfpéRž.9•’¢MN;–@jêIrr®PV¦ÒÝÇܼ!ööØÛ›ë’Q7^~?i]¿>‚€€–ØÛËjdú PðÅòñÇÛP©Ô•Zén}x÷Ý÷‡ªÎ°kÅÔ©S™;w.Í›7¿áºôôt\\\(//¿§mÇÇg1wî vïNÂÄÄ”òr5ååÚê;CC%J¥’òrU¥¤g…zöô"4tú=í[!êºÐÐPBBBnÛj\¡&3&L cÇŽÌ™3ç¶·ëÛ·/¶¶¶¼ýöÛx{{Wºî~pwχÕA*„BˆZ`` ¼ÞvwçÖ³¢¢R22 ÈɹBvö•ë?’“s…ôôNŸN&;[[]UTTZé¾ ae¥m´µ5ÃÒ²VVu¿³±i¬[©ÆÒRû½:*©ÊÊTkÛ*;wFòÇgèÒ¥Ï?ÿ½zyßn´?þøƒY³fÕȶ[´°eÈW~úéU4 jµ†ÔÔ|sHHÈââÅlâã³8w.ƒK—r)-Õž¬(• Ôj »wW}8¯Bˆš•””Äûï¿CÂIˆúJ’NB!DcjÚ€-liÑÂöŽ·-))#+«ðzµTyyEäæj¿²³¯›{…””Käæ^¹~}ñ Ÿnš›7ÄÚÚ +«F4iÒˆ&ML¯o„¥¥ö»…EåËMš4ª47##£à†Ø*†°;–ÀøñKñòràùçaðà¶ÞÛJ€jµšÙ³góÝwßѰaC^xá^{í5rrrfРA|ôÑG”••±páB¢¢¢Xµj†††,Z´ˆqãÆ°sçNžþyÎ;‡¿¿?ß|ó ;v`÷îÝ<ÿüóÄÄÄмys.\ȰaÃtû˜¶o¿ý–÷Þ{ììlÆŽËòåËQ*ïþyR*¸¸XââbI@@Ë®ÏÌ,äâÅ,²¯'¢ò((¸Š¹¹É]ïK!4Õuœùé§ŸxõÕWÉÈÈ ÿþ¨TÏúˆ7ß|“qãÆqéÒ%FŽÉ÷ßOÿþýùä“O=z4/^$33“¡C‡²dÉüqþøãÆÏñãDZ°°`ß¾}¸»»MJJ íÛ·'$$µZÍÊ•+9xð öööL˜0÷ߟ¯¾úŠ¥K—²oß>–.]J×®]oñ©8zô(çÎ#99™:0qâDz÷î}×ÏÑØÙ™agg&Ëe !ÄMTÇqæÔ©SLš4‰ÐÐP Ä×_Í /¼@ß¾})**¢ÿþÌ;—]»v±ÿ~FŒ››‹/fÏž=|öÙgôêÕë¦ñÕæñBˆê I'!„â!¢T*ts îFQQ)—/_Õ%¥òó‹þñs1§O_ºã6**¬ÒÒòyã_xã_hÒäQ®^­úlŠ&Mš°`ÁŒŒŒ dÖ¬Y„††ˆZ­æ•W^A¡PЯ_? yñÅu—?þøcÂÂÂèÕ«Çàå—_ÆÐЫW¯²qãFÚµk§";lØ0 DXXÓ¦MãÚµk¼ýöÛÓ¼ysZ·nÍåË—122 ´´333BCC)++ÓŬT*iÒ¤‰îv73þ|ŒqwwÇÏÏË—/WùyBQ=ªã8ÊÈ‘#9r$sæÌaÅŠ€vn”££#3gΠOŸ>Lš4‰uëÖѽ{w”J%4hÐà–1ÊñBÔ'’tB!Ä™š6ÀÔ´NN7_ÉoåÊ}>|á¦Qÿ¦Ñ€R *•_–/?GxxØßñ¾îîî•7þþþüùçŸÿˆÓÐ(oР†††ºËðôôÔ]622â•W^àÒ¥K•®ðòò"99YwÙÑÑQ÷sÅvÌ®]»èÞ½;Mš4á‘Gaîܹ4irë•ÿÉÀÀ[Û¿Û)ÿ¯BˆÚSÇ™””üüü*m×××ЃbbbpssÓ]wõêÕ[¶Òý›/D}#ŸB!„¸o·|ã«P(06Ö¾)70Pкµ Ï<Ó›U«¦’‘ñ³fùT)á]érff&VVUk-¬`ffF~~~¥ß­_¿žË—/cnn~Ã>rrr°°¸ýxFÃÇLNNëÖ­£¤¤„Q£FÝU\B!ô¯:Ž3–––dffÞt»æææ‘Pé뫯¾º¿À…¨£$é$„Bˆû–‘Q «rR(ºñŒ èØÑY³ú6ƒØØüñÇ‹¼ñÆyĵºôv›½ABB[¶l °°¥K—VùÓá <ò›6mÒ>|˜ &```À#<ÂŽ;ˆ¿þ¸2øå—_èׯßm·¹páBzõê…¡¡!;wfâĉ¤¦¦Þòö7näìÙ³w·BˆšWÇ™¾}ûòÓO?‘––ÀéÓ§Ù»w/ýúõcß¾}DGGP\\L‡ذaÃM·%Ç QßI{B!îÛ©SÉh452¦S§ætïÞ’®]ÝiÛ¶©.UºvíÊþó>üðCâââh×®Ó¦M#''§ÊÛèÝ»7ãÇÇÏÏ6mÚpôèQ>üðC7nLÛ¶myñÅéС:uâøñãŒ;–žž~Ëm>ùä“|óÍ7´nÝ;;;Ž;Ƈ~¨»ÞÎÎŽY³fñé§ŸÒ¡CæÌ™ÃÔ©Sñ÷÷¿¯çC!DõªŽã̰aÃøùçŸñõõ¥mÛ¶ÄÇÇë>¼ðððà½÷Þ£k×®têÔ‰˜˜ºwïNppðM·%Ç Qß)4ÿ^7Y!„â.mÞ|77|}00¨z!µB¡`Íš5Œ?¾Ê÷)))áàÁƒXXXо}û{ €sçÎqñâE|||puu­t]BBqqq¸¹¹Ý0ãéVJKK9rä%%%´iÓ;;;ÝuYYYœ8q‚N:aiiyÏ1ßJhh(!!!ÈÛ:!„¨ì^^«ë8sæÌ222èܹ3æææ•®KII!22ggçæ?Õ$9^ˆÚ&•NB!„¸oC†´­µ}5lذZ–†öððÀÃÃã¦×¹¹¹UòZ 4 ((è¦×ÙÚÚòè£ÞmˆB!ô ºŽ3­Zµ¢U«V7½ÎÙÙggçûÞ‡uÌtB!„B!„ÕN’NB!„B!„¢ÚIÒI!„B!„BT;I: !„B!„Bˆj'I'!„B!„BQí$é$„B!„B!ª$„B!„B!Dµ“¤“B!„B!„¨v’tB!„B!„ÕÎPß!„âá¶nÝ:ŒŒŒôF½¶nÝ:}‡ „uš¼NjÉó j›B£Ñhô„B!N …Bß!ûɱçŸÿûX¥°½ rÓM3÷9•J]î¿ÿoc0 ”Kt€‚´µMÉ´i“’ÔüêsNœø>Ë–]9vCAID'(ÐÊ•³R©ürtª©IZ[/Hkëc<Œ=Ñ ´lYg¾ûî—³«®®6·Ü2kŒ'‚rˆNP K.ùs::.JmíÏ?íôý÷ÕÜpƒ­uœD'(ØŠWý,:ÕÖÖäÊ+ÿ’‹.šPÒT0¶D'(ØÒ¥WæäÉŸn±«©©ÉÊ•¶Öqö `--Méêšþ³O;-]ú×’&‚±':À(X¹òª‘ÿkkk3gÎôLœxn‰ÁØ`,^Ü‘ÚÚÞvW«Õ¬XakgÑ FASSc®½¶-IR©Ôåúë¯(y"[õe£i`` ´s/\ØšíÛ?J{û:’¡¡ræhjjJccc9'ç¬%:pFÛ¿içž4éd’¤««¥Ô9ÚÚÚD'ÆœèÀ¯­­-“'O.åÜwß}$k×.ICC9oÁwìØQÊyÁw:À(Z»vqiÁ Ê$:À(7®¡ì ¢…(œè@áD' ':P8Ñ þ îºë®:t¨ì1à´ˆNðñæ›ofpp°ì1à´ˆNð#o½õVÚÛÛÓÐÐÎÎÎìÝ»wdí¥—^ÊôéÓS__Ÿ)S¦dÓ¦M#këׯϤI“rÎ9çdÁ‚éëë;­µ?ü0sæÌIcccZ[[³yóæ$I-Z”_|1ÍÍ͹âŠ+ÒßߟU«V¥»»{ îüoD'8¥¯¯/7ß|s6nܘÁÁÁ,_¾<+V¬HµZÍÑ£Gsçwæ±Ç˱cDzeË–<øàƒÈöíÛó /d×®]ùòË/3~üølܸ1I~síØ±cY´hQV¯^ÁÁÁ<óÌ3¹çž{²sçÎ|ûí·éîîζmÛòÆoäí·ßÎù矟gŸ}6]]]eÞ&8-õeÿ/¶lÙ’ùóçgÙ²eI’x õõõJCCCvîÜ™ÎÎÎ$É´iÓR©T288˜ááá$ÉñãÇÓÔԔ͛7çĉIò›k¯¿þz¦L™’{ï½7IrÍ5×äŽ;îÈÖ­[³fÍš åÉ'ŸÌ…^˜$©­­Msss*•ÊØÝø/‰NpJoooZ[[GW*•¬]»väñû￟‡z(Ÿ|òI&Nœ˜“'O&I–,Y’wÞy'³gÏNsss.\˜uëÖ¥¹¹ù7×z{{sàÀ\zé¥#çÊâÅ‹“ü™þœàÆö:8¥©©)_ýõO޽üòË̶mÛ²nݺ¬_¿>üqöìÙ“qãÆ%IªÕjüñ|õÕWÙºuk†‡‡³|ùòß]?~|æÎ›ÞÞÞŸü=ýôÓI’ššš1¼z(–è§,\¸0¯¾újúûû“$ï½÷^n½õÖÔÕÕ¥¯¯/—_~yæÎ›ºººìÚµ+GŽI’<ú裙?~êëësõÕWç¶ÛnË_|ñ»k×]w]º»»ÓÓÓ“$ùæ›o2sæÌ¼òÊ+%\=Ëö:8eÁ‚Y½zuÚÛÛ3cÆŒìÙ³'›6mÊyç—o¼16lȼyóÒÐÐJ¥’iÓ¦eÍš5yê©§òÜsÏ¥££#---Ù»wïÈ/ÛÝ~ûí¿ºvÙe—eÆ éêêʬY³ràÀÌž=;«V­ S?ÖÒÒ’ûî»/O<ñDfΜ9¦÷þS5ÕjµZö0ZvìØ‘¶¶¶Lž<ù´_sðàÁ:t(mmm¹øâ‹GŽ9r$»wïNKKK:::òùçŸçÓO?ͼyórüøñìÞ½;ÃÃÙ1cFZZZF^÷[kIrøðáìß¿?S§NM{{û¯Î500>ø ³fÍÊ„ Fíú¡¢g´³=ºœí×Oy|§…(œè@áD' ':P8Ñ Ò¼nIDAT€Â‰NNt p¢…«/{m===ééé){ 8«ÔT«ÕjÙCÀh({„Ò555¥±±±ì18ˈNÎw:P8Ñ €Â‰Nî_X5^ÛÆyjjIEND®B`‚bm3.7.0/doc/html/a00144.map0000644000175000017500000000016711365042634013241 0ustar tlktlk bm3.7.0/doc/html/a00236.png0000644000175000017500000002157511365042650013256 0ustar tlktlk‰PNG  IHDRÃYÔbKGDÿÿÿ ½§“ IDATxœíÝyPgúðïÀ # *FÄ+‚¨QQƒ‘uQ#ÆÝ,SîÆxlvÕõØ”E¢Á˜ ÑhjJË£L@KDM 5&¢ÄQÑ0 :€\‚\3Ïïô20Ý3(=æùTYE÷ôôû¼Ç|nP1Æd`cíc/.Ƙl8`c²QZª¡˜˜K5Å3!88Ø"í(,u“W¡PX¢Ƙ,õ½‹½ƒ€¨¨(„††Z²IÆXÑÑј3gŽÅÚã{0Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÓ*æöíÛØ»wï ÓŽµ¥¥¥aýúõÐh4ûËËËÑäëÖ¢¸¸6l°vÏä²¶Li•“™™‰ÈÈȦ†æÏŸ»wïZ´Í°°0¬]»»ví2Ø_ZZŠO>ù¤É×­Eii©AÍrçµÆÚjZeÀ¼ÈQZZj±örrrpæÌ¬\¹û÷ï·X»-¡wïÞ¸yó¦°-רYzNþHZmÀèõz,Y²NNNèÒ¥ >ÿüs@QQ&L˜€Í›7£[·npssÃîÝ»±råJ¸¹¹ÁÝÝγqãF¼ûÛbí,Z´;vìŽ+//Lj#pïÞ=À•+WàïïvíÚ¡_¿~ˆŽŽŽ=yò$;;;øúú"==0kÖ,hµZÌš5 iii€”” 2jµ ÀáÇZ­¯¿þ:öíÛ\¿~Ýè8UWWKŽctt4^{í5¬Zµ ÙÙÙB-¦ˆÕ%Õ¿æÖHÏÏÇñæ›o0>vbs`lìöïß///(•J¸»»cãÆ¢ç}Þ9©'¶¶ˆÖ}ôÜÜÜ V«1~üxäææ I­»V‰,EEE™uìÑ£GI¡PÐòåË©¢¢‚ÒÒÒÈÙÙ™bbb(??Ÿlllèã?&½^OÛ·o'Az½ž6lØ@^^^¹>L[¶l1º-ÕÎÖ­[iäÈ‘ÂóöíÛGC‡%"¢Ç“»»;mݺ•ªªª())‰œœœèÌ™3¤Ñh¨C‡tèÐ!ª¬¬¤õë×S¯^½H¯×Sqq1¹»»Ó©S§¨¦¦†·F­6` ¶µZ-:vìhÑvBCC {{{L™2EØïää„1cÆ 11QxÞ“'O P(°nÝ:hµZƒsÆÅÅ!00ÎÎÎûœœpõêUƒ}EEEÂq D¥RA­V£  =B]]ÁâmŒˆ°ÿ~|úé§xë­·„ý‹/Ftt´dÀHÕegggvÿÒét "(•J´oß^ô8sIÍAaa¡ÁØÅÇÇ#,, ±±±=z4lmmáââ"z^sçıµ%UaÓ¦MØ´i.^¼ˆ-[¶àí·ßÆÅ‹%ûÜjYê­šy‰€Ž=JDDeeeäããC[·n.‘êݺuËàmtFF†Á%Rzz:%&&Ý–j‡ˆ¨¼¼œÉÇÇÇàYYYäàà@ׯ_'"¢ŠŠ òöö¦èèhJNN&777zøð!=½D°··§òòr"2|;ž‘‘AŽŽŽtçÎ"zzïÃÍÍH£Ñ­­m“±IKK£êÙ³'­Y³†rssŽaJJŠÁåQ½Ý»w“««+UWW‹^"IÕeª:uŠBBBèå—_¦õëדV«5x\j~¤.‘¤æ ñØ}ýõ×4vìXaûìÙ³¤P(Œ^"=Ëœ#µ¶¤êY¿~=ùûû ;vLXÏR}6߃¡§“3jÔ(êÛ·/P×®])((ˆjjjš0K—.%???£ÛRíÔ ¡=z÷-êmÚ´‰œœœ(00<<<(88X8féÒ¥Ô¹sg $'''!°ˆˆ† Fþþþ”žžNDDkÖ¬!š8q"uêÔ‰/^LDdr1ß¿ŸÖ¬YC4úøûï¿OÓ¦Mk²¿¤¤„Ôj5ÅÇÇ‹ŒT]¦ú×PLL PLLŒp¬1©ùi0ÇNl]NNuéÒ…h„ DžžžÂø´Ôœ4$µ¶¤êÑh4Ô³gOø°mÛ\+WÂÚ ¾DbŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&Ƙl8`cò!+ %ü¯üstJŽŽC­^ÿ3ÿ_hh¨5_⤄•©T*DEEY» Æ^8sæÌ±v °zÀ#88ØÚe0ö‰·v |†1&Ƙl8`c²á€aŒÉ††1&›60·oßÆÞ½{_˜v¬--- ëׯ‡F£1Ø_^^Žˆˆˆ&_3Ö\m*`233ù´ÓÐüùóq÷î]‹¶†µk×b×®]ûKKKñÉ'Ÿ4ùšµÙØØÐÇLz½ž¶oßN(""‚ôz=mذ¼¼¼„s>|˜¶lÙbt[ª­[·ÒÈ‘#…çíÛ·†JDD?&wwwÚºu+UUUQRR999Ñ™3gH£ÑP‡èСCTYYIëׯ§^½z‘^¯§ââbrww§S§NQMM =xð€:tè@{ö졪ª*Š'ÊÌÌ$FCööö4cÆ :{ö,UWWŒÑ;whÅŠÔ¿ɱ4hEFFÑĉiùòåÂc†Ôju“¯MÕ%Ö¿Æbcciøðá´wï^ªªª2ZŸÔüHs~~>ÙÙÙÑ‚ ¨ººš²³³ÉÅÅ…Ž?N7nÜ N:´3dÈ:qâD³Ö©yn8?………¤V«éСCTUUE©©©dccCZ­¶Eçݘ澾äÐæÆÕÕ•jjj„}aaa4cÆ ÊÏÏ'ôøñc""ÊÊÊ"¥RIµµµDDtñâEz饗ž»­VK*•Š~ÿýw"" þÈ×××à\K–,¡eË–Ñ—_~Io¾ù¦°¿¦¦†"""¨¢¢‚ˆˆ<<<(##ƒˆˆ"##) Àà<3gΤððpÒh4€òòò„Çôz=%$$Ðo¼A  M›6QQQ‘hÿ.]ºDvvvôèÑ#""Ú¹s'yxxN§#"ñ€‘ªËTÿ;wîÍ;—ºwïN«W¯¦œœÑz“çúupÿþ}á±€€Š‰‰10殩öÏOUU]¸pA8®~>>X¶lMö5** D„‘#GxzÉ’——‡ÔÔÔ&—æÖU©`NÿÀÏÏ~~~(,,ÄÎ;1nÜ8 2qqq’µÒã\ÏÝÝ]øº9soÎú1Õ~ÃùQ«Õ¸páV¯^Û·o£cÇŽÐëõFÛnμ·m.` ¶µZ-:vìhÑvBCC {{{L™2EØïää„1cÆ 11QxÞ“'O P(°nÝ:hµZƒsÆÅÅ!00ÎÎÎûœœpõêUƒ}EEEÂq »J¥‚Z­FAA=z„ºº:ƒ`lŒˆ°ÿ~|úé§xë­·„ý‹/Ftt´dÀHÕegggvÿÒét "(•J´oß^ô¸ÆuˆsII‰Yç¨WQQѬãMµ_XXh0?ñññ Cll,F [[[¸¸¸ˆž×Üyo3¬ùöéY.‘ÐÑ£G‰ˆ¨¬¬Œ|||hëÖ­Â[Üz·nÝ"GGGa;##Ãà)==nKµCDT^^NŽŽŽäããcpެ¬,rpp ëׯQEEy{{Stt4%''“››=|øˆž^"ØÛÛSyy9¾UÎÈÈ GGGºsç=½÷áææF ¤ÑhÈÖÖ¶ÉØ¤¥¥QHHõìÙ“Ö¬YC¹¹¹FÇ0%%Åàò¨ÞîÝ»ÉÕÕ•ª««E/‘¤ê2Õ¿ÆN:E!!!ôòË/ÓúõëI«Õ<.5?RãÜx;–bbbèöíÛ¤T*…ËÇsç΃K¤zRëGªýÆóóõ×_ÓØ±c…í³gÏ’B¡0z‰ô,ó.¥5\"µ¹€5jõíÛ—¨k×®D555͘¥K—’ŸŸŸÑm©vê…„„P=„ûõ6mÚDNNNH,³téRêܹ3’“““XDDÆ #JOO'"¢5kÖ‹‹ Mœ8‘:uêD‹/&"2¹Ðîß¿OkÖ¬¡}üý÷ß§iÓ¦5Ù_RRBjµšâããEFª.Sýk(&&F¸/R£1©ù!g©€ÑétäïïO½zõ¢iÓ¦‘¿¿?ùûû7;`¤ÚoþŸxõÕ>V®ˆµ|†™åðáß RÙB¥²ÅáÿY»ÖFpÀ0“êêô8t(µµ:ÔÖêpèP:êêŒÿÚGÆâ€a&¥¥e¡¤¤JØ.)©BZZ–+bm 3)..Jåÿ–ŠRiƒ¸8óþŽûcã€a’ª«ëpuu:a_] WP]]gÅÊX[ÀÃ$8q Ož4ýQ‚'OjqâÄ5+TÄÚ&)6666Mÿ\†±±|™Ä¤qÀ0QeeO”t:]Óïétz$%Ý@YÙ+TÆÚ &*!áŠè_!½^„„+¬ˆµ50LTLŒéK sŽa\0Ì(­¶gÏÞ‚^/þI½žpöì-hµå¬Œµ%0̨#G2d9–ý±ð‡™Ù>øà[À¶ms­\ k+ø cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ‚ˆ¨áŽÓ§OcË–-Öª‡µb7oºú÷/¶r%¬5Z²d þô§?ìS6>(''1117nœ¥êbmDÇŽ€‚+ÂZ””LŸ>½Éþ&SoíÚµ²Ä{q¤¤¤ÝÏ÷`c²á€aŒÉ††1&Ƙl8`c²yî€ÉËËCbbbKÔÒ*Ú±¶Ë—/ãÛo¿…V«5Ø_YY‰èèè&_³gsæÌdffZ»ŒÞsLNNŽ9Òµ´ŠvÚ¸q#òóó-Úæ®]»°gÏüøãû+**°wïÞ&_ÿ‘=Ïü¤¤¤àêÕ«-\Qëeµ ð%’¤_ýkO«ÕâÊ•+˜5k’’’,Ön[eéùiˬ5V-0D„¯¿þo¼ñf̘¨¨(@YYV¬X˜˜Ìœ9Ó§OGBB¾ùæLŸ>o¿ý6’““…ó8pŸþ¹è¶X;›7oÆ÷ß/WYY‰… âÁƒ€ììlüãÿÀ¤I“0wî\ƒï… 0oÞ¶¶¶ ¶<(œgôèÑçm¼-ÖÎòå˱mÛ6hµZtéÒÉÉÉ üüóÏèØ±£ð9‰aÆaòäÉHII››†*|@köìÙ°µµEMM Ú·o…BöíÛC©TâôéÓðòòÂäÉ“þþþ5jN:…   TWWcéÒ¥èÔ©€§ï¶ÎŸ?C‡áþýû˜:u*¶mÛ&:†ÙÙÙÐh4ÂgÀƇ½{÷bñâÅP(¢Ï“ª«]»v¢ýS«Õç3f :wîŒøøxìÚµ “&M´iÓÐ¥K³æçÔ©S¢mIÕhê3ouuu˜7o”J%ÜÝÝѧOTTT4™Ÿ´´4ÑyV*•À˜1c3gÎDBB‚d»€ôÚyçwDk3ÅÜׄTû!!!k®¶¶Û¶mCß¾}îîîP*•¨¨¨€‡‡Çs­åçÑ"Ó­[7(•ÿ;ÕË/¿Œ‹/ ÛíÚµ( ¨T*ØÚÚ Û-ÑŽ‹‹ |}}‘ššŠI“&áòåË ðô-xNNfÏž-<¯ºº£F‚N§C÷îÝ…ýJ¥ï¼óŽÑ¶ УGƒ}=zô¾Û£P(„ ¹rå 6mÚ„^½zaæÌ™ðõõ5Ù×'N-Zàé%Kaa!~ûí7 6LôyRuÙÙÙ™Ý?ðöö†··7JKKñý÷ßcÙ²eðòòºuë$kžŽ³X[¦ÆÎ”† ]l¥æ¹®®½{÷68¾W¯^&Û•:gsj3Ɯׄ©ö®9•J…›7obÇŽÈË˃“““Ñwª@óÖòój‘€)--5Ø.))A‡ZâÔf·ˆ#GŽ@­VÃÏÏOØïàà€W^y6lžW]] …B}ûö¡¸ØðW¤¥¥Á××ŽŽŽûp÷î]ƒ}eeeÂq †R©„J¥BII ÊËË¡Óé ‚±1"Brr2þö·¿Áßß_ØÿÕW_!))I2`¤êR©Tf÷¯!½^°µµ…½½½èqëkËÔØ5VUUeV›Û›çÈÈÈ&µ5^KÍ=çãÇ›U_K÷©´´Ô`Í>}»víBxx8 L:Uô¼æ®åçÕ"÷`—/_nVUWWcáÂ…HKKÃðáÃqöìY”””nܸÏ>û 66M‡eĈHOO¾ÕW\\ŒŸ~ú Çor¬··7vî܉ùóç#55sæÌÁž={PXXh´ß—/_Æ£G0uêTôìÙSø7iÒ$üÑwúÎ&IDATôÓO¨««3©ºšÓ?àé¿ððp|ðÁ õÕ«W KÍT[R5Ö¿///ž———'Ú_1Róìëë‹äädxz9Z³óYÏ)Å}j¬  ½zõÂ+¯¼\»v •••FÏÛœµü¼Z䌶oߎ 77}ûöÅÔ©SQVVÖ¬ó?~ׯ_ÇÈ‘#n‹µööö5j®_¿Ž#FçìÞ½;Þ{ï=üýïÇ€““ƒAƒáÏþ3 1oÞ† Òâk¹±ñãÇ#** ¡¡¡û[,`kkŠŠŠ ¾ÑXŸ>}àééiÁŠÚ.±€i‘K$ÆÚ"¥R gggÑÇ+Ÿ5 ûÃrvvîU1yðg‘c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&ÑŸƒûSŒ1f.Ñ€ ·dŒ±P“Ï"1ÆXKá{0Œ1ÙpÀ0ÆdÃÓÀ%kÁ{1ý«*p¿ IEND®B`‚bm3.7.0/doc/html/a00227.png0000644000175000017500000000321111365042647013247 0ustar tlktlk‰PNG  IHDRƒ(ÝFIKbKGDÿÿÿ ½§“>IDATxœíœ]H“mÇÿî“&Û¬¦9;Úú ©ŠÂuà† ŠAEG‘A£0D„uP¬"1µ4¬T…¼. "L#e[¬V3—sÁþïAô¼­ÜÜ^gõúÞ?<×}ï¾>¸ÿ<ÏõlÏV@’€>ÙïÎ@ðç Ä bH(ÒM477ÿÊ<¿˜;wþ4V®,((˜õ„¿)¶=sév»AR¼æÐËív§ÝoÑ3$„B  !„ƒ@BˆA ‘1¼|ùW®\ɇ«?ŽOŸ>Áårýt<É‹ÐÔÔ”W3bß¾}ΫÏh4ŠúúúŸŽg‹Ù¨![æÔeâîÝ»ˆF£¿;ñ;kÈ›’É$<N‡’’œ:u 0:: «ÕŠÆÆF”••¡¸¸—.]‘#GP\\ £Ñˆ7nH~°wïÞ)mŸÏ‡ ®®:¥¥¥hll8D"8ø|>D"ÔÔÔàêÕ«(**ÂóçÏ3æýúu˜Íf( F444L[sww7*++¡V«±bÅ ´··Ks÷îÝCEET*Ö®]‹¾¾¾icýXC¦¹Ö—LºÝîtÓ)x<ððáÃŒÅbôù|Ôëõlnnf8¦L&ã±cǘL&yþüy Ëåb2™äéÓ§i6›%_ííí<{öì”¶Çã¡B¡à¡C‡‹ÅøðáCêõzÞ¹s‡?~¤ÑhdWW‰ƒÁ çÍ›G»ÝÎGqrr2mþcccT«Õlmme<gOOe2#‘ƒÁ Õj5I¦¿yó†Z­–—/_f<g[[5  ©ÕjÙÚÚÊÏŸ?óäÉ“,//g2™ÌëǦ‹‘m}ßãv»™fÛÿÊ›æÏŸÏD"!9NÚív†Ãaàøø8Irpp …‚_¾|!I>yò„‹-Ê:ŽN§K)ÜétÒáp$/^Ìþþ~’_7_¿~=­ßxƒAÊåò¬ò,))¡Åb¡Õjemm-M&·oßž¶g Éãdz¨¨ˆ6› .äþýûSò6 ¬®®¦N§ã¹sç¦õc ™bäRß÷Ìzù‰‰ >xð ¥AÊ'‡ëÖ­ãää${zzØÛÛËd2)ÍG"z½^~øð!gßÑh”|úô)ɯ›ÖÝÝ=íºááaz½^¾xñâ§¹ÁÁAz½^¬cMUC¦¹’I {s»Ýصk×윒þ¨¯¯O¹gφp8Œû÷ï§_½z5*++gšÞ‚k×®a÷îÝS>ö–·òW Óé`6›s^§T*a0ÒÎk4š™¤5gøO‰Áb±Àb±ä¼Î`0`Ë–-³ÑÜbN}7!˜B  !„ƒ@BˆA !Ä bHˆÞþOÉéÈ›7oÎn6‚?Ž´gÁÿñŸN‚bH1$þ,c}Þm²IEND®B`‚bm3.7.0/doc/html/a00161.md50000644000175000017500000000004011365042641013134 0ustar tlktlk9c203d9caf310843b212a52623017875bm3.7.0/doc/html/a00017.html0000644000175000017500000000775211365042651013435 0ustar tlktlk BitMagic: bm::bit_COUNT_AND< W > Struct Template Reference

bm::bit_COUNT_AND< W > Struct Template Reference

Bit COUNT AND functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_AND< W >

Bit COUNT AND functor.

Definition at line 5109 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_COUNT_AND< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5111 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00098_source.html0000644000175000017500000007434611365042630015026 0ustar tlktlk BitMagic: bmsse4.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00233.map0000644000175000017500000000022411365042647013236 0ustar tlktlk bm3.7.0/doc/html/a00242.map0000644000175000017500000000040111365042650013225 0ustar tlktlk bm3.7.0/doc/html/a00027.html0000644000175000017500000000763611365042652013440 0ustar tlktlk BitMagic: bm::bit_grabber< unsigned, 32 > Struct Template Reference

bm::bit_grabber< unsigned, 32 > Struct Template Reference

#include <bmtrans.h>

Static Public Member Functions

static unsigned get (const unsigned *arr, unsigned j)

Detailed Description

template<>
struct bm::bit_grabber< unsigned, 32 >

Definition at line 86 of file bmtrans.h.


Member Function Documentation

static unsigned bm::bit_grabber< unsigned, 32 >::get ( const unsigned *  arr,
unsigned  j 
) [inline, static]

Definition at line 89 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x61.html0000644000175000017500000001261211365042644015404 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- a -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00074.html0000644000175000017500000003047411365042651013435 0ustar tlktlk BitMagic: bm::miniset< A, N > Class Template Reference

bm::miniset< A, N > Class Template Reference
[Small sets functionality]

Template class implements memory saving set functionality. More...

#include <bmvmin.h>

Public Member Functions

 miniset ()
 miniset (const miniset &mset)
 ~miniset ()
unsigned test (bm::id_t n) const
 Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.
void set (bm::id_t n, bool val=true)
unsigned mem_used () const
void swap (miniset &mset)

Detailed Description

template<class A, size_t N>
class bm::miniset< A, N >

Template class implements memory saving set functionality.

Template can be used as template parameter for bvector if we want to tune bvector for minimal memory consumption.

See also:
bvmini

Definition at line 58 of file bmvmin.h.


Constructor & Destructor Documentation

template<class A , size_t N>
bm::miniset< A, N >::miniset (  )  [inline]

Definition at line 62 of file bmvmin.h.

template<class A , size_t N>
bm::miniset< A, N >::miniset ( const miniset< A, N > &  mset  )  [inline]

Definition at line 67 of file bmvmin.h.

template<class A , size_t N>
bm::miniset< A, N >::~miniset (  )  [inline]

Definition at line 83 of file bmvmin.h.

References BM_MINISET_ARRSIZE, and BM_MINISET_GAPLEN.


Member Function Documentation

template<class A , size_t N>
unsigned bm::miniset< A, N >::mem_used (  )  const [inline]

Definition at line 140 of file bmvmin.h.

References BM_MINISET_ARRSIZE, and BM_MINISET_GAPLEN.

template<class A , size_t N>
void bm::miniset< A, N >::set ( bm::id_t  n,
bool  val = true 
) [inline]
template<class A , size_t N>
void bm::miniset< A, N >::swap ( miniset< A, N > &  mset  )  [inline]

Definition at line 149 of file bmvmin.h.

template<class A , size_t N>
unsigned bm::miniset< A, N >::test ( bm::id_t  n  )  const [inline]

Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.

Definition at line 95 of file bmvmin.h.

References bm::gap_test(), bm::set_word_mask, and bm::set_word_shift.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00242.md50000644000175000017500000000004011365042650013134 0ustar tlktlk1f476ca9eab97c6bcbeb84cde4428567bm3.7.0/doc/html/a00226.map0000644000175000017500000000021611365042647013241 0ustar tlktlk bm3.7.0/doc/html/a00201.md50000644000175000017500000000004011365042646013134 0ustar tlktlka92c734ba26fe8d9aaf46315eb17023bbm3.7.0/doc/html/a00012.html0000644000175000017500000001164311365042651013422 0ustar tlktlk BitMagic: bm::all_set< T >::all_set_block Struct Reference

bm::all_set< T >::all_set_block Struct Reference

#include <bmfunc.h>

Public Member Functions

 all_set_block ()

Data Fields

bm::word_t _p[bm::set_block_sizeBM_ALIGN16ATTR

Detailed Description

template<bool T>
struct bm::all_set< T >::all_set_block

Definition at line 303 of file bmfunc.h.


Constructor & Destructor Documentation

template<bool T>
bm::all_set< T >::all_set_block::all_set_block (  )  [inline]

Definition at line 307 of file bmfunc.h.


Field Documentation

Definition at line 305 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x72.html0000644000175000017500000001327611365042644015415 0ustar tlktlk BitMagic: Data Fields
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x63.html0000644000175000017500000001445611365042644016431 0ustar tlktlk BitMagic: Data Fields - Functions
 

- c -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00163.md50000644000175000017500000000004011365042641013136 0ustar tlktlk0d3b308e0a15aa3b9d23625b92664667bm3.7.0/doc/html/a00175.png0000644000175000017500000000515511365042644013257 0ustar tlktlk‰PNG  IHDR»(¦b‹‡bKGDÿÿÿ ½§“ "IDATxœí[LSY†ÿDŠT£1QD©Xµ5"‚"Ök¼×8£8#`5u’1õ$^°¢ÑÄ+<QTÀdk™j¼Cc `Q¨W‚¥¬y œLí…+»¿·µÎÚk­½ùÛsÎîNàÁøñQ{|댞‚‰á60±3ܯÏÕÕÕ¸}ûö·è…ÁpË–-³ðYˆ½´´?ýôS4Ä`|-¬í»XˆÝ^0ƒñ½sîÜ9›_Öì™á60±3Ü&v†ÛÀÄÎp˜Øn;Ãm°¹õè(Z­¥¥¥X½zµ Úé^·oßB©TbóæÍÝÊÝÜÜŒ¬¬,ܹs<S¦LÁÊ•+áééÉÅ´´´ ;;*• &“ ‘‘‘øùçŸáïïÏÅ>|2™ aaafùOœ8I“&A$A¡P`æÌ™H$f1üñÆŽ‹‡B§ÓYísĈËå]ÎÇ‘^O:½^ÏÙ§¶¶‘‘‘8}ú4† †   lß¾óæÍã~k¨®®†H$¡C‡  1dÈdggcÔ¨Q¸{÷.—kÿþýxôè‘EÇC­VÃd2aÇŽËåhjj2‹ÉÌÌ„Z­†Á`@mm-jkk‘••…¬¬,Î~ýúu—óq´×£G¢°°Ë­Õj¡P( ‰ªó9OŸ>ÅÖ­[Í| …©©©fªóçÏ#;;»Ç… ÏÈÊÊ"+n›äåå‘D"q8¾»8SgðàÁ¤ÑhŠ?>­X±‚ÚÛÛ9ßË—/I PNNMž<™–.]JmmmfcÓÒÒhذaôéÓ'®nnn®EˆˆR*•d4 ………QjjªYÌ´iÓH©Tšù)11Ñ¡ytâh¯b±˜ÒÓÓÍbš››I(RFF†S5‰ˆnß¾MH¯×QSSùøøPxx8effrqñññ”œœìt~G±£ß;.yfoooGJJ üýý1`ÀìÙ³ðúõkÄÇÇãСC P(Ä©S§––¡PˆAƒáüùó\ž`ÕªU6m[u^½z…ùóçär9êëë!—Ëñ×_Ùí»¶¶ùùùØ·ox<çÆÉ“'!ðÏ?ÿàßÿűcÇ,¾vïÞÖÖVäää8µ^éééP*•P©TNëŠ/íÕÇÇhoo·ÓÒÒbÕ/‹€¿ÿþpëÖ-„‡‡cåÊ•(,,Ðñ÷S©Tˆ‹‹s8¯+q‰ØÕj5ø|>^¾|‰œœìÛ·—/_†ÑhDII Þ½{‡/^à÷ßGbb"„B!êëë±aÃìØ±ƒË3räHLœ8Ѧm«Nss3JJJ BFF¤Ri—}‡„„`èС×–,Y‚¸¸8¨T*DEE!((È"†Ïç#66Öéƒsaaaضm’’’`4kg{5 ÐjµÐjµxúô)ÒÓÓÑÔÔ„Å‹[ŒöìÒÒÒ ‰¬ÖöôôDLL 'öëׯcæÌ™Éd¸yó&L&ÝLì ‹Åðôô„J¥BYYD"-Æ.^¼GŽAQQBCC±mÛ6ÔÔÔtw)¬â±>ÜLXcÆŒA]]g÷éÓÀãñàíí ///Îveg F]]ÕCoeee¸pá „êêj›9jjj0pà@§kóù|(•JìÞ½•••N·†³½îÝ»ƒƒïÞ½CII RRRPSSƒÒÒRDDDàäÉ“X¿~==z„ 6Xj'qqqÐh4¨¬¬ÄóçÏ ‡„„¢¼¼Üê#L'‰gÏž…F£ŸŸbcc­Þeº‹KÄn0Ììúúz»‹ò½Ô‘J¥hmmEqq±Åµ={ö ¨¨ñññ¨¬¬DEE…EŒ^¯Ç70gÎϼ?~´ˆkjjBïÞ½-ü‰IIIX»v­KN™:Ó«5bccáïï­V >Ÿooo444àÍ›7hkkë²~dd$víÚ…©S§ÂÛÛ “ÉpíÚ5”••Ù{'&“ D///ôíÛ·ËxGq‰ØŸ?Žüü|·ÒŒŒ »‹j‹ŠŠ îeÆšíª:øûû#99k×®EUUçÏÏÏÇÕ«W±fÍ :¿þú+är9>|ÈÅÔÔÔ`Ñ¢EÉdˆŽŽÐq?~ü¸Ù£ÙŸþ ½^˜˜«=( èt:”——w{8Ó«-z÷î £Ñ‰DF…B+W® 44¿ýö^¼xas,ÇCll,²³³‘ÀùgÍš…ŠŠ èt:›ët¼ÔÊårLž<D„ÒÒRœ={Ö‰è'¶n¬’——GR©”FŒA1114pà@š={6µ¶¶R]]Y®ªª*êÓ§gk4 æìÔÔT³íÅÿÛöêèt:³¼QQQ4eÊR«Õ]ößÒÒB¿üò õêÕ‹ÆG£G&___:räÓÖÖF›6m"oooŠˆˆ qãÆQ¯^½hõêÕôñãG.îÍ›74cÆ êÛ·/Mš4‰BCC)00._¾LDÄm=êt:³ €K¶íÕÚÖ#QÇÖ¥µšz½žvîÜIvë=z”н{÷Ìüb±˜Äb±Íq—.]¢˜˜ºt鯮¦i{[<"óûgçáwrò¶úéÓ'”——# ãÇwÑGѱ:íííxûö-ú÷ïhhh€F£Áĉѯ_?‡ò644àþýûðôôDTT”Ù¯¼ÿwïÞ…Éd˜1c¸¹Ï©ªªÂ³gÏàçç‡ñãÇÃÇǧ›³í>Žöê,&“é«ü 䪼vô«v™Ø¿GêêêPTTdóúرcmn¥}ühóùØûŸùžáóùV÷œ;ñõõíÁn¾œm>=Í-ö   Èd²oÝ†ËøÑæÓÓ°#¾ ·‰á60±3Ü&v†ÛÀÄÎp˜Øn;Ãm°¹Ïîìñ[ã{ÇBìÑÑѸxñâ·è…ÁøªXœa0~PØÿTb¸Lì ·‰á6üy¬q´CEÖIEND®B`‚bm3.7.0/doc/html/a00206.md50000644000175000017500000000004011365042646013141 0ustar tlktlkedbc8dd6d6f94c456eb92838dc392c41bm3.7.0/doc/html/a00119.png0000644000175000017500000001037711365042643013256 0ustar tlktlk‰PNG  IHDR5(Ÿ mõbKGDÿÿÿ ½§“´IDATxœíœiPTG×€ŸaDd‰‚h4.Ä ŠqA%®AÁRÜ0èkp#ŠK©$Fã’¨ *&j ·˜hÀB bD±\+AE@ш%J(5‚e‘aû~ðy_‡a_4™·Ÿª[ÅtŸîsnß¾§»O7WVRRR‚@ èz¯Û@ ¨O„S:…pj@§Ð/›ðàÁ¢¢¢^‡-b„ ¯Û„:qøðá×m‚ ´iÓ†>}úh&–”!  —¸êtýÛyÝí'®ê]nnnZÏNk¦ö‚±)*¨Lž<ùu›Q/¬X±‚¡C‡¾n3àíí]nºˆ© B85@ S§&t áÔN!œš@ Ð)„S:E…G:jÂúõë),,@&“¡T*9r$íÚµ ##ƒÝ»w³dÉ­²EEEøúúÒ®]»røûûSTTÄ‚ jm_eú«C^^ÄÄÄ “Éèß¿?nnnÈåòZÛT7nÄÕÕ•·ÞzK#ýåûHLLäÂ… ¸»»7ˆ ‚šSXXÈo¿ýÆÍ›7ÉÏϧ]»v899¡T*5änܸÁüÁðáñ°°ÐÈ;~ü8éééÒïFaggGçÎ+ÔûøñcN:Eß¾}¥w®!ÉÉÉáøñãLš4©ÁuÕ†z™©}õÕW\¹r…äädþúë/<ˆ W®\ ++‹½{÷Jò3gÎäÞ½{°råJfÏžM^^žF½<`þüùlܸ±Nö•Õ_’““±³³cß¾}´mÛ–fÍš±bÅ œì,ßš5k¤öy™—ïãöíÛ|ÿý÷ ¢ÿU£Vròd7o>|ݦԚ'OžàááÁ055¥U«V\ºt‰©S§’ !»wï^öíÛlj'´ê9räW¯^E¥R¡R©¸~ý:sçÎåÈ‘#ê^·n‰‰‰ 6Èøùù‘’’@nn.Ço0]u¥^fjŸ~ú)ŽŽŽÒïQ£F±}ûv~øáÚ¶mË;w¤¼“'O2oÞ<òVVVœ8q‚qãÆIiÁÁÁX[[óìÙ³:ÙVVMðôô¤gÏž"“ɘ?>;w&44—:ÙVêrÿ4ŠŠŠ‰ŒLä—_b9vì:Ïžåãïÿlm[½nÓj…ŸŸx{{£¯_úZMž<™­[·âççÇîÝ»HKK#..WWWΞ=[îLÛÉɉ?üPúÂ*ìkiiiÌœ9“6mÚÔÿý?ÑÑÑ’þ-ZpàÀÓUW,¦Ö¬Y35jÀ£G5j®®®¤¥¥áêêJDD„$?qâD‚‚‚4ê8tè'NÔH;xð ÖÖÖèëëcee…ŸŸŸ”wìØ1:t耑‘Ó¦Mã³Ï>ãĉúΜ9C×®]100 GÒŒ²,ÉÉÉ„……±aÃÉ¡XZZ²gÏ­eÅßÿ]©®*¿*ÊÞGqq1 ,ÀÔÔ |}}ÒN>|øpöïßR©äÖ­[¶[YY777¾þúkI‡J¥¢gÏždffÖÚî—‰ý‹U«ŽÐ­Û*&NÜAHÈž=˯—º_>$::šÅ‹Kíîî¸PTTü·ïMš4‰”””j RmÚ´!++«Ü¼ 6ðèÑ#|}}‰ŠŠ"55•E‹iȬ^½šøøx²³³ñòòâÌ™3¸¹¹1bÄÖ¯_Oqq1W¯^ÅÝÝ'''<<<$ÛV¯^Mff&«W¯æÆdddðÅ_Hõ_¿~3fàääÄÔ©S¹xñ"@•úöîݢ1cprrbÑ¢E¨Tªê4w•Ô›S cÏž=ìÚµ‹E‹qá¼¼¼€Ò˜Ôùóçعs'Íš5cçÎ888HåÇŽË©S§ÈÍÍJ—ž÷ïßgðàÁ’LNNÓ¦McÓ¦MäææÄÒ¥KQ©Tܽ{777¶lÙBzz:;vdóæÍ¤§§kèONNfìØ±øøø••Ÿqã?~|¹KÉ+W®Ð²eËrGÀqãÆiذxñb¢££+l£ªò«âåûxaŸB¡ 55•6lØ@pp0jµšˆˆBCC ÇÒÒ²Âv++;~üxvíÚ%é B©Tj9ðšÊÆáôêµgç-üôÓEÒÓKŸsAAQ­ëý§pëÖ-Zµj¥033cäÈ‘ÒÒðÌ™3 6 333ìíí9{ö¬V™¼¼<²²²ÈÊÊâîÝ»8p[[ÛruÏ›7æÍ›³`ÁzôèZ­æîÝ»2III<{öŒÂÂB)ž·ÿ~öíÛÇÅ‹‰E¥R±jÕ*fΜIXX àË/¿¤¤¤///ÌÌÌðòòÂÆÆ†üü|®]»”Æy—/_΄ 8qâŸ|ò k×®%))©R}111„‡‡ãïïÏÑ£G122â矮ë£êqùEbb"Pê|òòòˆÇÚÚZCN©T¢§§‡R©D¡PH#˜¹¹9ýúõ#,, WWW>Œ‹‹‹FœÀÀÀ€K—.Ñ£GÚ·oB¡ ++‹   † &Íd–.]ʶmÛ´ì bРAŒ3€%K– ¯¯O^^FFF²999˜˜˜ÔS Õ?J¥’õë×£P(pttdÞ¼yâàà@^^ß}÷-[¶$??¿Âv344ÔU«Õ̘1ƒ¸¸8Þyç˜3gNm{ø0ƒ£G¯ÍŸ>B__Naaé³ÖGö2ÏŸ?×ê;^^^ÄÆÆJ¿ýýý144$))‰Aƒ0hÐ ~üñGæÌ™£±ؾ};;vì@.—ÓµkW>ÿüóru7iÒ™LF“&MP(UÚZXXˆ»»»4coß¾=¹¹¹œ?žîÝ»K!¤I“&!—ËQ«Õ#“É066Öš‰^¸pkkkFŒ@ÿþýqppàüùó8;;W¨ïE=±råJi³±®Ô›S[»v­FL-00?þ˜ÇW»ŽKPWWW:Äúõë5ò5jÄÕ«WY¶l‰‰‰˜››KSÙû÷ïÓ±cGIV&“Ѿ}{-eå E…ÆÒÒ’””JJJ4:À¥K—HJJÂÎÎŽ£GO`` —/_ÆÐÐ… _i~]èСƒFG¶µµ•F~===Z¶l TÞnee =z4ÁÁÁqóæM8ge}€Ù³g¥/ôãǹ~ý:öööR}^^^1µúæ7Þþ~aojj*o¾ù¦”®¯¯ÏG}Te]*•ŠÖ­[k¤µnÝš´´´JõõíÛ—ØØXæÎ‹±±1={ödÊ”)×î¦^¢Ábj={ö$##ƒìììj—3f çÎ#..Ž0pà@üÐÐP–/_Ί+HHH &&F!MLLxò䉆|FF†–­øPHHH¹1 Ôj5çÎÓÊóõõåìÙ³Èår 144D.—c``€¡¡¡O¬*¿.”0ÒÒÒ077Ðp•µ[YY(\‚ƒƒ ÀÅÅ…&MšÔÙV]ÆÎÎŽüü|"##¥4CCCŒÉÏÏ'--’’Î;ÇôéÓñõõÅ××—M›6ѽ{÷r— õÉóçÏ«”122âéÓ§iR8¨²reßììì*ûLII žžžüú믬^½µZÍ—_~Y¥Õ¡ÞfjOŸ>•œÅÓ§OñööÆÖÖ¥RYí ³R©dÀ€LŸ>±cÇ¢§§és“““±±±á½÷Þ 22Rršï¿ÿ>îîîøøøÐ¼ys"##¹uë–Ö ëää$mVXXXÅ”)S4F–˜šš2þ|<<<8yò$o¿ý6P? '""‚Ž;J3¿Ë—/3~üxiyT™_/·' ÕP:ë ÃÙÙ™œœvî܉§§§–\eíVNNN¤¤¤°mÛ6>>•%ÒÉËO?ýDJJ VVVdddðû￳lÙ²JË|8ëÖ­«Ñ½VD½9µ>øà¿•êëÓ§OŸ ¿jaaÁ¼yóغu+]»vÕÈsuueÊ”)lÚ´I«ÜèÑ£Y»v-ÄÀÀ…BAûöíñòòâèÑ£Œ5Š®]»Ò­[7rsséÖ­u <777I.&&??¿ §½k×®%++ [[[lllP«ÕÜ¿Ÿo¿ý–¾}ûÖ´™ªÍË»œP:…/»KëààÀâÅ‹ñóó#!!{{{<<Í!Cje«VMñô‚§çR ½ÆáÃ1<|˜B!×¹¸Ú´iÓ(((`îܹXYYѸqcéìš™™gΜ¡wïÞZ1Ú°yóf¢¢¢èß¿í°²²¢K—.Ìš5‹:]á&ÃËØÛÛ3tèPÜÝÝéС·oßföìÙ4nÜ€¦M›²uëVæÏŸ©©©TÎÚÚš‰'âááAçÎIHH`ðàÁôîÝ[ãqY†αcǘ1cJ¥’;wîHËòº"+)³í÷â#õy°´¸¸˜ŒŒ im­R©¸ví½zõ¢iÓ¦5ª+;;›èèh,,,°³³#))‰»wïbccÃãÇ)(( ==~ýúÑ¥KèÝ»·†~€?ÿü“{÷îÑ¥K­˜@y¨T*âââËåØÛÛk<Ø—eLLL044¬°ŽÊò«¢l;BéÒ"22333i# <*j·²KüL›6 KKK­¸fUTÕbcÿ"44–«¤§çj88ÿÿücfj2™¬V‰ÌÉÉ!11…BA§NP("—˵V EQQ·nÝÀÆÆ¦F‡r“““IMM¥M›6»¹™™™$&&Ò©S'ŒÉÉÉÑxRSSINN¦E‹±¹Ê((( >>µZµµuwؽ½½±´´$ @#ý•8µWÁµk×2dÁÁÁØØØðË/¿àçç'u0AõP©T\¼x‘)S¦«±©RªÛ*:|ûowj‚WGEN­Þ–Ÿ¯{{{öíÛ‡¯¯/éééX[[.Z ¹wï>>>|óÍ75vh5A.×Ãѱ#ŽŽÙ°a<çÎÅ󿛿 ¦Oð¿ƒÎ85(Ý=}qþLP;z÷îMLLÌ+Õi` Ïˆï¼RÝE|zH è© B85@ S§&t áÔN!œš@ Ð)„S:E…çÔ^Õ¿tÿT¼½½ñöö~Ýf*ÁÍÍM+MË©9::rèСWb@ðOE¼ÿÊû*µÖÿ~ Á¿S:…pj@§NM èÿxõT•àÚ“IEND®B`‚bm3.7.0/doc/html/a00073.html0000644000175000017500000005166611365042652013443 0ustar tlktlk BitMagic: bm::mem_alloc< BA, PA > Class Template Reference

bm::mem_alloc< BA, PA > Class Template Reference
[Memory Allocation]

BM style allocator adapter. More...

#include <bmalloc.h>

Public Types

typedef BA block_allocator_type
typedef PA ptr_allocator_type

Public Member Functions

 mem_alloc (const BA &block_alloc=BA(), const PA &ptr_alloc=PA())
block_allocator_type get_block_allocator () const
 Returns copy of the block allocator object.
ptr_allocator_type get_ptr_allocator () const
 Returns copy of the ptr allocator object.
bm::word_talloc_bit_block (unsigned alloc_factor=1)
 Allocates and returns bit block.
void free_bit_block (bm::word_t *block, unsigned alloc_factor=1)
 Frees bit block allocated by alloc_bit_block.
bm::gap_word_talloc_gap_block (unsigned level, const gap_word_t *glevel_len)
 Allocates GAP block using bit block allocator (BA).
void free_gap_block (bm::gap_word_t *block, const gap_word_t *glevel_len)
 Frees GAP block using bot block allocator (BA).
void * alloc_ptr (unsigned size=bm::set_array_size)
 Allocates block of pointers.
void free_ptr (void *p, unsigned size=bm::set_array_size)
 Frees block of pointers.

Detailed Description

template<class BA, class PA>
class bm::mem_alloc< BA, PA >

BM style allocator adapter.

Template takes two parameters BA - allocator object for bit blocks and PA - allocator object for pointer blocks.

Examples:

sample6.cpp.

Definition at line 139 of file bmalloc.h.


Member Typedef Documentation

template<class BA , class PA >
typedef BA bm::mem_alloc< BA, PA >::block_allocator_type

Definition at line 142 of file bmalloc.h.

template<class BA , class PA >
typedef PA bm::mem_alloc< BA, PA >::ptr_allocator_type

Definition at line 143 of file bmalloc.h.


Constructor & Destructor Documentation

template<class BA , class PA >
bm::mem_alloc< BA, PA >::mem_alloc ( const BA &  block_alloc = BA(),
const PA &  ptr_alloc = PA() 
) [inline]

Definition at line 147 of file bmalloc.h.


Member Function Documentation

template<class BA , class PA >
bm::word_t* bm::mem_alloc< BA, PA >::alloc_bit_block ( unsigned  alloc_factor = 1  )  [inline]

Allocates and returns bit block.

Parameters:
alloc_factor indicated how many blocks we want to allocate in chunk total allocation is going to be bm::set_block_size * alloc_factor Default allocation factor is 1

Definition at line 173 of file bmalloc.h.

References bm::set_block_size.

template<class BA , class PA >
bm::gap_word_t* bm::mem_alloc< BA, PA >::alloc_gap_block ( unsigned  level,
const gap_word_t glevel_len 
) [inline]

Allocates GAP block using bit block allocator (BA).

GAP blocks in BM library belong to levels. Each level has a correspondent length described in bm::gap_len_table<>.

Parameters:
level GAP block level.

Definition at line 193 of file bmalloc.h.

References BM_ASSERT, and bm::gap_levels.

template<class BA , class PA >
void* bm::mem_alloc< BA, PA >::alloc_ptr ( unsigned  size = bm::set_array_size  )  [inline]

Allocates block of pointers.

Definition at line 217 of file bmalloc.h.

template<class BA , class PA >
void bm::mem_alloc< BA, PA >::free_bit_block ( bm::word_t block,
unsigned  alloc_factor = 1 
) [inline]

Frees bit block allocated by alloc_bit_block.

Definition at line 180 of file bmalloc.h.

References IS_VALID_ADDR, and bm::set_block_size.

template<class BA , class PA >
void bm::mem_alloc< BA, PA >::free_gap_block ( bm::gap_word_t block,
const gap_word_t glevel_len 
) [inline]

Frees GAP block using bot block allocator (BA).

Definition at line 205 of file bmalloc.h.

References BM_ASSERT, bm::gap_capacity(), and IS_VALID_ADDR.

template<class BA , class PA >
void bm::mem_alloc< BA, PA >::free_ptr ( void *  p,
unsigned  size = bm::set_array_size 
) [inline]

Frees block of pointers.

Definition at line 224 of file bmalloc.h.

template<class BA , class PA >
block_allocator_type bm::mem_alloc< BA, PA >::get_block_allocator (  )  const [inline]

Returns copy of the block allocator object.

Definition at line 154 of file bmalloc.h.

template<class BA , class PA >
ptr_allocator_type bm::mem_alloc< BA, PA >::get_ptr_allocator (  )  const [inline]

Returns copy of the ptr allocator object.

Definition at line 161 of file bmalloc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00092_source.html0000644000175000017500000004350211365042627015014 0ustar tlktlk BitMagic: bmdef.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00205.md50000644000175000017500000000004011365042646013140 0ustar tlktlk84a14629d67c689083051338cd9aa131bm3.7.0/doc/html/a00089_source.html0000644000175000017500000055540711365042627015036 0ustar tlktlk BitMagic: bmalgo_impl.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00250.png0000644000175000017500000000733711365042651013253 0ustar tlktlk‰PNG  IHDR‹u~–bKGDÿÿÿ ½§“”IDATxœíÝ}LSgûðoi¡‚UAqà˦ÂT"JÐBÄEf–è\ Ëq3ÑÅ-.çâ[æË”çgœèâ/*“!ÎCA}œ¼8|ÃêÛ"ˆøT¡ìõûÃy+/ µU¯Ï÷¹á¾.N¿´·í‘#!"c/Wè`ëØëƒÃÂDã°0Ñd/Ðh4¸pá‚-zavD¥Rµ9Ö&,X´hÑ+iˆÙ¯öþÝÓ&,}1{ó:t¨Ã' Þ³0Ñ8,L4 ÃÂDã°0Ñ8,L´‡åÖ­[øùçŸ-ÐJ×;v þùçk[Ï–ç®;z–²²2ìٳǽtYrr2Î;÷ÚÖ³å¹ë~b¢Y$,&“ Ë—/‡»»; €ï¿ÿðàÁDFFbÇŽðññ§§'öíÛ‡¯¿þžžžðööFRR’°Î¶mÛ°xñâÇIIIðó󃳳3æÎ‹ºº:aîòåË C¯^½0bÄ:tH˜;uêÆŒ'''£°°P˜ËËËÃØ±c!—Ë1jÔ(;v¬Gõjjj0cÆ 8p …×®]ëÖ¹€Ã‡# 2™ ÞÞÞØ¶m›0·fÍxzzB.—cÚ´iÐét¢ÎEÐ ”œœLUUUäàà@ß~û-™L&Ú½{7 Í›7“Éd¢­[·R@@€°Ö±cÇhçÎíŽ/]ºDr¹œRRR¨©©‰%$$PCCy{{Ó®]»È`0PNN¹»»ÓÙ³gI«Õ’››¥¦¦Rcc#mܸ‘†J&“‰ª««ÉÍÍöïßOƒÒÒÒÈÅÅ…ÊÊÊzTÏÙÙ™æÍ›GçÎ£æææn»úúz’Ë唚šJƒNŸ>MTSSC™™™äããC7oÞ¤úúzš3g-]º”ˆ¨ÓÞÄèäñ¿h‘°ôíÛ—ŒF£p,>>žæÍ›GUUU€ˆˆH­V“L&£––""*..¦Šª³jÕ*Z¸p¡Ù±   JHH ¤¤$ 6›[¾|9}ùå—ôÃ?ÐìÙ³…ãF£‘6oÞL?¦={öPxx¸Ù÷ÍŸ?ŸÖ­[×ízZ­–PeeåK¦ÎÎÁ` ¢¢"á¸V«%¹\N7oÞ¤´´4òññ¡+W®ÑÓ€èõz"¢N{£³°tøAbWøûûÃÑÑQ"''G»ºº$ är9d2™0«²²cÆŒ1;6zôh@EEÊÊÊàçç'Ì555áƒ>@kk+FŒ!wttÄ7ß|Ðétfs0räHhµZ455u«888ÀÇÇGÔÏÕѹ“Ëå(**ÂêÕ«qëÖ-ôë×&“ 0kÖ,äææbòäÉP(ˆŠŠB||< ÅK{ë ‹„¥¶¶Öl\SSƒ~ýúYbiAß¾}QSSÓn]wwwL:™™™Â\SS$ Ö¯_ßæûŽ= ¥R www\¹rÅlîÁƒèÓ§zõêÕ­zµµµ]ú%èèÜ¥¥¥!>>)))˜ÓÔÔD¹¹¹f›2k(--¥ììlª««k3§Óé(++KØø=O­VSVVi4š6s·oߦ¬¬,ºqã†ÅêuEGç®®®Ž²³³é¯¿þ"""FCyyyDDd0èÌ™3tòäIºwïžÅzë,,"óKâž])E|¥\UUU™mô_„±cǾŽ^®“Ç¿Ð"\Ö>GGGxxxt8ïââò »é9‹yxx ::ÚÖmX 6ÄDã°0Ñ8,L4 ÃÂDã°´£±Ñhëì‡åFc+¶l9aë6ìR‡ï³XâSÊב³ó»P(f`ÈZmÝŽ]i–)S¦àÈ‘#¶èÅ.üûß—Q^þ«W'bܸþ¶nÇ®´ùlèmÖÐÐŒÀÀ50[1cF öïÿÔÖ-Ùþ›rÏË̼Œ––'€œœëxôÈ`ãŽì ‡å9¿þzQØ«™L&œ8QjãŽì ‡åÿýïcœ={K¸Î’“ ;ùŽ·‡å—ÌÆ&á?ÿ¹…ššG6êÈþpXþ‘œ|±Í?dd”ب#ûÃa ÓéQR¢Éd“‰ðë¯üRô ‡@zz ¤Ò¶oBšL„ÒRîÜy`ƒ®ì‡À‘#ñ䉩Ý9™L‚´´âWÜ‘}zëâVWC­®FGoM¶´’“/¾Ú¦ìÔ[–´´8:J;ù Byù}\¿^õÊz²Wo}Xþõ¯“»¶IM-zÝØ··úêþ{÷ꃡnn½••zßÁìÙㄯÓ룵õåzÓñ‰/HM-Ʋeÿ‡»wlÝŠ½á™x&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢Yí/?½®÷+rrò«ëø×¶ÿ>ú´ÊÚVý3aS¦LR©´f +zßÖ tÙ¦M›¬º¾UȈk–`Ï)((°êú¼ga¢qX˜h&‡…‰Æaa¢ÙEX*++‘™™i“ÚgÏžEYYÙ[Ï’ì",ééé6©——‡+W®¼±õ,É.ÂÂ^vs£"Bbb"233áää„ùóçcÑ¢E¨¯¯ÇºuëŠ_~ù­­­ˆ‹‹CEE²²² •J±lÙ2LŸ>””„Û·ocõêÕíŽsss±wï^èõzL˜0Áìn«åå娱cÔj5ˆØØXá袢"$&&¢²²Æ ÃW_}…‘#G.]º„ÄÄDh4x{{#..aaaÝ®÷ðáClÚ´ QQQعs'~üñG :ÔúÂKØÍ3Ë7 •JqôèQ¬_¿‡ÆéÓ§ÑÚÚŠ’’444 99Ÿ|ò ¶nÝ …BÔÔT¨T*ìÛ·OXÇ××Wx_ÿý÷ߨ¼y3–-[†ŒŒ Œ7çÏŸ ¬Zµ ‘‘‘øí·ß°råJìØ±W¯^Åýû÷±víZ|öÙg8~ü8ÂÃÃñÝw߈ ×ë•J…'N ..6l€V«ív½––\¾|زe  ô ‰ŽÙÍ3KïÞ½±dÉÈd2aÞ¼yÈÉÉAPPˆ .„D"AHH¤R)bbb„ñ‘#G„u&Ožl¶îóãS§N!<<S§NÌŸ?¿ÿþ;àüùóèׯæÎ ?~<¢££‘——OOOŒ7S¦L,X°R©F£@tt4 ,, ¡¡¡øã?ÐÔÔÔ­z111hnnÆŠ+п‹Ÿëî²›°øøø@&û_;Æ CqñÿîMØ«×ÓûI$8::B*• c±jkkáççgvìÙÓ{uu54 ,X Ì577#44Ož<ÁàÁƒ…ã2™ .Ü¿C† 1[sÈ!¨©©Asss·ê=û¹ì)(€…¥®®ÎlüðáC¸¹¹Y´†››ôz}»u]\\ðÞ{ïaëÖ­Â\ss3$ 8Ðæûòóó ܾ}Ûl®¾¾®®®prrêV½ºº:»¼DÂnö,ÕÕÕÂëycc#ÒÓÓ…ß²®P«Õ¸xñb»ãàà`äææâÁƒ§·Þ-//Gii) $$¥¥¥¸s瀧\\\òóó‚sçÎááÇ€ëׯcÓ¦MpppÀûï¿ÂÂBTU=½‡¢^¯Ç™3gÒízöÊnžYFÝ»w#)) :ÇǬY³P__ߥuNž<‰k×®a„ mÆaaa8}ú4bcc€»wï"$$0xð`|úé§øâ‹/0jÔ(h4búôéH$P*•ˆ…¿¿?ÊÊʰtéR8;;# 111X²d FµZiÓ¦aâĉ ¢nÕ«­­µìɵ«ÝöN"‘`Íš5]ºøÉh4âêÕ«èÝ»7†n¶<ý ×ëõx÷Ýwáââb6W[[‹ŠŠ xxx´Ùoèt:TWWÃ×× 0›«®®†N§ƒ———Ùþ¦'õºjãÆ8p µ®”+´›gprrÂøñã­^çwÞépÎÃÃíÎ <¸Mžñòò‚———Eëٻٳ0ûÇaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰fÕ·ûð_}…òòò¬ùã­÷v¿J¥²ÖÒ¬*• “&M²ÚúV{faoœBÞ³0Ñ8,L4 íÿ?mãn†íIIEND®B`‚bm3.7.0/doc/html/a00259.map0000644000175000017500000000020611365042652013242 0ustar tlktlk bm3.7.0/doc/html/a00144.png0000644000175000017500000000654511365042634013256 0ustar tlktlk‰PNG  IHDRkuIcçbKGDÿÿÿ ½§“ IDATxœí}PTeßÇ¿ûÆê +,É‹‚ÅK)ͤ2…èÀ ZYóŒ1•¡ÛûLêôÆ@É};ÎÐHMµ°ã–  ·@a˜:([n„€c¸à Þ°,Ð.‹û{þàö<­Àº‹,ÛEç3sþ¸ö:ç:ßs>{®s¸ÎYŽ€ˆ<,pVèî<ŽÃËb^Cˆ]@¯×ãÌ™3®Èò·ãÑGE`` ã “¨T*ÀO30©T*gv}“ÓGÖ-~øá‡é.Ê >>ÞéeøsC𲂗ż,†àe1/‹!\*ëÊ•+¨®®vå*œÂh4B­Vßq¾‘‘”––NZg2™ R©f:šC¸T–^¯ÇÑ£G]¹ §FUU•Có}ñœ֌Œ ¤¤d†“9Æßª\¼x1¾úê+wǘ6.—EDØ¿?Ö¯_ÔÔT® Ä›o¾ FƒM›6!%%ÇŽÃ’’‚´´4?~œkçàÁƒHIIÁ“O>‰×_½½½\Ý¥K—°sçN<õÔSxá…PWWÀÛo¿ÚÚZ$''C«Õâ½÷Þã–«««ÃÖ­[‘€´´4‡ºÈ[TUUaË–-X·nrss1·].«­­ "‘‡ÆG}„²²2Ô××cll Z­CCCÐh4ضmòòòàííòòr¤§§sÝMSSŽ;†ÂÂB9r2™ _ý5€ñsÈ;#ÄÄDTUUá7Þ@~~>ZZZ`±X ÓéÐØØˆÜÜ\øúúB«ÕïÎrssñꫯ¢ººï¿ÿ>Š‹‹100pÇm²Z­¸páT*JJJÐÐЀŸþÙu;ñ¿¸\–§§'^~ùeH¥RDFF"55•ûæž}öYDGGC$aóæÍ\ydd0:: °X,Édسg^zé%À©S§pÏ=÷ %%‰+W®ÄºuëpâÄ €ÙlFVVÂÃÃ!ÿÿP¨D"Aaa!üqH$øûûC,cxxØ¡íÊÈÈ€X,†B¡@pp°ÃËÝ ÓÈu…Ba³“BBBÐÜÜÌ•çÍ›H$‰D\ùkÖ¬Ass3vìØOOO<òÈ#xþùçáé鉫W¯B¯×ã™gžáæ7›ÍX½z5×ν÷Þ;!—D"A[[Š‹‹qåÊÈår‡»2¡Pooo®ü笮Äå² ƒMy``^^^NµADÈÌÌDff&:::ðí·ßrÝ–L&CTTòòò¸ùÍf3 Ô;²±±ć~ˆˆˆ…B$'';¿³ˆË»Á«W¯âÔ©SÆÏGå¾õŽRVV¥R ‘H„+V )) }}}€èèhœ?—/_0.ê•W^ACCƒÝ6{{{„¨¨(…B´´´pÝîí466â÷ßw*³+pù‘õàƒ¢¨¨jµÝÝÝ Crr2n#)) •••ÈÈÈ€··7ÚÚÚ°}ûvÀý÷ߌŒ dffbÅŠÐëõˆˆˆÀO<Á Œ˜˜|ùå—ÈÊÊ‚D"X,†¿¿?ŠŠŠ T*mæ-((Àúõë2½0Cœ}­´´[·nuêæãèè(ZZZàé鉰°0§Cã­­­Ehh¨Í9úúúÐÙÙ OÚÁh4B.—?Ò[[[±hÑ",]ºׯ_GOOzè¡iet†øøx¨T*<÷ÜsŽ.rÖåGxxx`åÊ•wÕ†D"ATTÔ”õ>>>ðññ±Û†@ àD€L&Ctt4Wöó󃟟ß]åt%« Öáe1/‹!xY ÁËb^Cð²bNÊ2›oº;‚K˜s²ÆÆ¬8t¨ÕÝ1\´G0¦ó¬öl0þðöNÂ矿¢1wÇ™Qœü«ÿägß>.]2bÛ¶ÿÁÃO¼õWÂÉŸüœuZÖ_™¡!3""vctt IIøüó wGšIæÖoŠ««u°XÆ/.êêZa4šÜœhf™S²¾ù¦‰»3lµZñ¯ws¢™eÎÈúφqòäEX­Vî3æ¬Í›t›ºººÈËË‹ÊËËidd„²³³)((ˆ¬V«Ý,öêÅÎþoºkY¤P(è×_%¢ñÖßßODD&“‰Î;g³¤R)uttPOO ¡¡!""joo'±XL‹…ˆˆš››é¾ûî#¢qYr¹œÌf3×Ö®]»hË–-6²Ôj5­ZµÊ&ßk¯½FJ¥’FFF(22’jkk‰ˆìÊúôÓOiÆ \ytt”rrrhxxØn{uŽbOÖ]wƒÉÉÉØ´i{ì1!++ ýýý©TŠsçÎ!)) Ë–-CjjªÍ?É€ ‡°T*…X,æÊféÒ¥ðððàÊÐëõ6ótvvâÂ… æ&µZdggC¡P`þüùhll„Á`ÀÅ‹¡Óé&lSgg'–/_Ε% Þ}÷]Èd²;fq$çt¹kYD„½{÷âÆÐh40™LHKKTTT`×®]ؽ{7ÚÛÛÑÔÔÄm°³Ü~AÐÛÛ ///›Ïär9bccÑÙÙi38p"‘}}}P*•P*•¸xñ"Ôj5öíÛ7a]^^^°ùìðáÃ0 wÌâHÎiãÄa8)ÙÙÙÕkjj¸îkÿþýÇÕýôÓO$lºÁ[tttЂ ¸²V«µéPEEFŠˆˆ ¼¼<›n°½½d2ýöÛoDD4< BitMagic: Data Fields
 

- v -

  • vect_bit_transpose() : bm
  • vect_bit_trestore() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00235.map0000644000175000017500000000017311365042647013243 0ustar tlktlk bm3.7.0/doc/html/a00206.png0000644000175000017500000000535211365042646013253 0ustar tlktlk‰PNG  IHDRõ(&¼”bKGDÿÿÿ ½§“ ŸIDATxœí}L[ÕÇ¿@¡¤Ôͱ-ÃIÝ`ˆÛ’ÎÔ±@³éfFœÈ³ÄÄ8¢‹dA§F‰süáÌÂF|›©3vì­S‡èdiua¨1{6ª¥¼t‚kÙÚïï…ZÚ[ÊÊØú;Ÿä$<÷œó¼œsŸ{{No/Q$ @1DÏ´ ¼ˆ¤" ‘ÔA„¡Ta0n¥` ,Z´Z­Öû @QD¹ÍKqqñ„Ü x§½^ââb¹&`†xöÙgýkj ÂI-D"©‚C$µ@aˆ¤" ‘ÔA„!û•Ödéèè€ÙlFiii8Ô f˜ÞÞ^|þùçxòÉ'‘••5ÓîLšÁÁAÔÖÖâµ×^»¥v«ªªpýúu@TTÔj5Ö­[‡Å‹ßR?ÆËúüù󨩩 ‡ª;Š^x3íFØ)))Áo¿ý…",×|¿LÇØ9|ôÑGaÕ9Þzë-477£§§ýõ8€ŒŒ 477ßr_ññû¦8qâÇL»vº»»QVV†ôôôi³1cwß}÷áÂ… aÕ9Y¶nÝŠššìÛ·f³yyyسgÏŒø¶¤öxð+[,&&&òðáÃüï¿ÿXYYÉÔÔTz<þý÷ßLLLä'Ÿ|B§ÓÉ#GŽ0>>žçÏŸ§Ñh¤B¡`YYGFFh6›™””į¿þšF£‘K–,‘ìíÞ½›¹¹¹AcdJJ üñGŽŽŽÊÚ—ãÊ•+T*•<|ø0N'O:ÅèèhÚl6Z,Þu×],((àÏ?ÿÌ‹/zÉv»=`ß©Æ544ÄÅ‹óĉt:ׯ_/É£££¬ªªâÈÈkjj˜““ãÕþé§ŸæÛo¿M£ÑH•JåuBTTT°¨¨ˆ.—‹jµšüñIråÊ•üì³Ï&åÏ‚ ØÚÚJ’²öåp:lii‘d‹ÅB¥RÉöövZ,`oo¯T7^–ë{3q¥¥¥ñôéÓ$4©ðòåËR]NN ƒì\‘“;ߘåðMê©úæñxøí·ßò‰'ž`zz:wíÚÅþþþ€v•J%׬YÃÂÂBò±Çã‚ xìØ±€}~ùå>÷Üs\¸p!·mÛÆîîî ñù(©Ã¶’––†ØØXIÎÊÊÂ?ü É nì*•Ji&**jÒ6ººº°dÉIŽEyy9 §§Ç«–.] ‹Å‚eË–áþûïG\\œ—'OžD\\žzê) H_U…ÊŠ+088ˆ+W®È¶s»Ý …B»ï¾{J¶| [Rwuuáøñã€ÿý{÷îźuëBÖÓÒÒ‚úúz¿r~~>Ž;›ÍhjjÂÆƒüü|444àÒ¥KnlšÔÕÕ!//À»ÁØæËðð0öíÛ'ÕåççÃjµb÷îÝ^›r¡Ì~ zzz‘‘U«V!&&§OŸz"L¶o8⊅ÃáÀÀÀ€cÞÑÑ´ŸÜ\ùk;•±›*r¾iµZ´¶¶bÇŽ¨««ƒF£Á›o¾‰ÞÞ^YÃÃÃÂÐÐzzzPYY‰¬¬,¨Õj¿íQTT„‡~$a6›±ÿþðèó:B\S¯\¹’<ðsrr8oÞ<®]»–£££ÒÚfŒööviÝC’­­­^kê-[¶P«ÕÊÊÉÉÉÌÍÍ¥J¥â‡~(Õmß¾jµšùùùœ={6_|ñEÉ¿ÔÔTfffrÕªULIIáêÕ«yõêU©ï¦M›¸páBºÝîIÅL’=ôu:›››eíËÑÝÝ͹sç2''‡yyy\»v-ÓÒÒ¸aÃZ,ÆÄÄHm}e¹¾7×ø5µÛí¦N§cjj*7lØ@NGN給ÏêÕ«i0HÊÏÕdÇÎ7f9ü­©§âÛx._¾ÌíÛ·3333 ]¥Réõâ…BANÇsçÎùmo0¤õýØÞÒT˜Ö²1®^½Ê“'OzmÞLmmm¬¯¯÷»¹ÐÙÙÉúúz^¸pA:f4¹|ùrº\.ž:uŠMMMv:KKKY^^’6›õõõµ ‡ÃÁ††þþûï$o$kcccXúN%._®]»F“ÉD“ÉòIh®Â5vãq»Ý´Ûí7í›?®_¿>%Ÿ¦SW ¤Ž"ý¿÷;***bÞ|rüøqé©_úúúðÓO?aãÆ8s挴bµZ½6ú|yðÁ‘Ôv¸ô„ÊtÇ5ÜɾOco>Ñëõ^ǧï9ÀÛ•JFã·®³³;vì@uuõ„Ñäää€:ÇoHÉ.=¡2ÝqÍw²ï·’ÿ‹;µ@‰ºS‹g¿‚C$µ@aˆ¤" ‘ÔA„!’Z ˆ0DR †Hj Òônƒþ%Š(¢È—~OýÕW_ª· ‹-šp,àeàÎD¬©‚C$µ@aˆ¤"ŒÿF¿ÿ4&àIEND®B`‚bm3.7.0/doc/html/a00147.map0000644000175000017500000000231111365042635013236 0ustar tlktlk bm3.7.0/doc/html/hierarchy.html0000644000175000017500000001725311365042644014602 0ustar tlktlk BitMagic: Hierarchical Index

Class Hierarchy

Go to the graphical class hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:

Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/globals_defs.html0000644000175000017500000001776111365042652015253 0ustar tlktlk BitMagic: Data Fields
 

- b -

- d -

- f -

- i -

- s -

- v -


Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00168.map0000644000175000017500000000022111365042644013237 0ustar tlktlk bm3.7.0/doc/html/a00033.html0000644000175000017500000000753111365042651013426 0ustar tlktlk BitMagic: bm::bit_XOR< W > Struct Template Reference

bm::bit_XOR< W > Struct Template Reference

Bit XOR functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_XOR< W >

Bit XOR functor.

Definition at line 5086 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_XOR< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5088 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00071.html0000644000175000017500000007120011365042650013421 0ustar tlktlk BitMagic: bm::bvector< Alloc >::iterator_base Class Reference

bm::bvector< Alloc >::iterator_base Class Reference
[The Main bvector<> Group]

Base class for all iterators. More...

#include <bm.h>

Inheritance diagram for bm::bvector< Alloc >::iterator_base:
Collaboration diagram for bm::bvector< Alloc >::iterator_base:

Data Structures

struct  bitblock_descr
 Information about current bitblock. More...
union  block_descr
struct  dgap_descr
 Information about current DGAP block. More...

Public Member Functions

 iterator_base ()
bool operator== (const iterator_base &it) const
bool operator!= (const iterator_base &it) const
bool operator< (const iterator_base &it) const
bool operator<= (const iterator_base &it) const
bool operator> (const iterator_base &it) const
bool operator>= (const iterator_base &it) const
bool valid () const
 Checks if iterator is still valid.
void invalidate ()
 Turns iterator into an invalid state.

Protected Attributes

bm::bvector< Alloc > * bv_
 Pointer on parent bitvector.
bm::id_t position_
 Bit position (bit idx).
const bm::word_tblock_
 Block pointer.(NULL-invalid).
unsigned block_type_
 Type of block. 0-Bit, 1-GAP.
unsigned block_idx_
 Block index.
union
bm::bvector::iterator_base::block_descr 
bdescr_

Friends

class bvector

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >::iterator_base

Base class for all iterators.

Definition at line 231 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::iterator_base::iterator_base (  )  [inline]

Definition at line 235 of file bm.h.


Member Function Documentation

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::invalidate (  )  [inline]
template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator!= ( const iterator_base it  )  const [inline]

Definition at line 242 of file bm.h.

References bm::bvector< Alloc >::iterator_base::operator==().

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator< ( const iterator_base it  )  const [inline]

Definition at line 247 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator<= ( const iterator_base it  )  const [inline]

Definition at line 252 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator== ( const iterator_base it  )  const [inline]
template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator> ( const iterator_base it  )  const [inline]

Definition at line 257 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::operator>= ( const iterator_base it  )  const [inline]

Definition at line 262 of file bm.h.

References bm::bvector< Alloc >::iterator_base::position_.

template<class Alloc>
bool bm::bvector< Alloc >::iterator_base::valid (  )  const [inline]

Checks if iterator is still valid.

Analog of != 0 comparison for pointers.

Returns:
true if iterator is valid.

Definition at line 272 of file bm.h.

References bm::id_max, and bm::bvector< Alloc >::iterator_base::position_.

Referenced by bm::bvector< Alloc >::counted_enumerator::counted_enumerator(), bm::bvector< Alloc >::counted_enumerator::operator++(), and bm::bvector< Alloc >::counted_enumerator::operator=().


Friends And Related Function Documentation

template<class Alloc>
friend class bvector [friend]

Definition at line 233 of file bm.h.


Field Documentation

template<class Alloc>
union bm::bvector::iterator_base::block_descr bm::bvector< Alloc >::iterator_base::bdescr_ [protected]

Block type dependent information for current block.

Referenced by bm::bvector< Alloc >::enumerator::go_up().

template<class Alloc>
const bm::word_t* bm::bvector< Alloc >::iterator_base::block_ [protected]

Block pointer.(NULL-invalid).

Definition at line 308 of file bm.h.

Referenced by bm::bvector< Alloc >::enumerator::go_first(), and bm::bvector< Alloc >::enumerator::go_up().

template<class Alloc>
unsigned bm::bvector< Alloc >::iterator_base::block_idx_ [protected]

Block index.

Definition at line 310 of file bm.h.

Referenced by bm::bvector< Alloc >::enumerator::go_first(), and bm::bvector< Alloc >::enumerator::go_up().

template<class Alloc>
unsigned bm::bvector< Alloc >::iterator_base::block_type_ [protected]

Type of block. 0-Bit, 1-GAP.

Definition at line 309 of file bm.h.

Referenced by bm::bvector< Alloc >::enumerator::go_first(), and bm::bvector< Alloc >::enumerator::go_up().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00188.md50000644000175000017500000000004011365042645013151 0ustar tlktlk1580f8b5f04de4b075a1d8fb43fb2aa4bm3.7.0/doc/html/a00114_source.html0000644000175000017500000002371511365042630015005 0ustar tlktlk BitMagic: sample9.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00200.png0000644000175000017500000000614011365042646013241 0ustar tlktlk‰PNG  IHDR;(é]FbKGDÿÿÿ ½§“ IDATxœíœLÔeÇß ç ÄÊQ@Íß QQQ€CVXº\‰•³¿ú!ÿ(©ÕFµØb*±+¦ËœK`ÃMZ):’Š0j#PA$N~H$÷îw7Ž»ïsœ¼絹Ý÷ù~ïyÞŸÏûÙ‡ïó|½¯IB"‘HînêÝgZD"‘Ü d±“H$.,v‰Ä%ð˜ØÐÞÞŽ_~ùe&´H$‰SذaƒU›U±ûñDZiÓ¦;"H"‘H¦[Ï]­Šèb‰D"™Í(Þ¬É=;‰DâÈb'‘H\Yì$‰K ‹D"q d±“H$.,v‰Ä%˜r±»pá>ì)³cœ™¦¦¦YYYÐétíCCCÈÎζú<[èïïÇž={fZÆm1Ûæ–H3¼¿|ù280¥>LTTT ®®Î)}M7S.vMMMÈÏÏw†–Y1ÎxÞxã ´¶¶ÞÑ1322ðá‡⫯¾²hÀG}dõy¶000`¡yºr7ýÎÄÜ!Òã ï[[[±ÿþ)õa¢¸¸µµµNékº‘ËXUUU¸cãµ··ãìٳعs' ïØ¸Î ,, ÿý·ùxºrw§=‘Ü=8¥ØFlݺøôÓO½½½X½z5>ûì3C«ÕâСCعs'´Z-‚‚‚PTTdîgïÞ½xýõוÆÙ²e‹ÅmùÐÐ{ì1´µµΟ?¸¸8Ì›7K—.EAAùÚ~ø˜;w.¢££Q__ظq#ôz=6n܈ššÀéÓ§µZåË—£¢¢ ×ëñì³ÏâÈ‘#ðóóCcc£Í<ŒŒóXPP€'Ÿ|ï¾û..]ºdÖb%]¢øÕˆýéîîÆÚµkØÎ’¶rWXXˆÅ‹ÃÃÃAAAØ»w¯b¿SõÄ„ÒÜ ¨vïÞ ­V µZU«V¡££Ã|N4ïnw®OdªÞ“ÄŽ;žž>©_M!,, žžžxñÅ-þðˆâåII§£Ú…8zô(m4+RYYI777nß¾ÃÃì©©¡¯¯/‹‹‹ÙÕÕEwww~ðÁ4üâ‹/€ÙÙÙ4ܳg/^lî«¢¢‚û÷ï·y,'//111æï9r„?ü0Iòúõë b^^ OžŒF£Í~ñÄJsK¤ç…^À©S§ðÔSOÁÏÏÉÉÉÈÈÈ€ŸŸŸÝ˜oWÏdã·ç}cc#–,Y¨¬¬Ä+¯¼bWSgg'""",ÚÂÃÈ=¶—'%}}}yh§ìÙõôôXëõzÌŸ?ß]Ozœ×^{ %%%())Áš5kÌíÏ<ó ÚÚÚ,þ}ùå—ðññÁµk×,úm±„5qèÐ!úûûsddDq+Òe/¾‰TWW355•>ø ³²²¨×ë-΋ü-cELÌÝçŸ΄„óqmm-ÝÜÜl.coÇ[ˆæ–HOVVãââÌç¾ûî;ó|Ål/—"=ÎðÞ´gg"11‘o¿ý¶Ý<•••100W®\!ykëE¥R177W¯(O"ŽxhbÚ÷ìžxâ .Y²„ñññ¼ï¾û˜’’ÂÑÑQ‡‹Ý¶mÛkóX4މÔÔT.\¸Ð¼Ïe"''‡†III ᆠÌ×lÛ¶LJJ¢F£1O’|ä‘GÇúúz’dff&ýüü˜œœÌ 0--$íšråÊfffZL°ñ¼ùæ›\·nUûµkרV«Y^^®XìDºìÅ7žââbÆÇdz¸¸Ø¼§:‘?‹ÝÄÜ)y01wííí d||IEND®B`‚bm3.7.0/doc/html/functions_eval.html0000644000175000017500000001013411365042644015632 0ustar tlktlk BitMagic: Data Fields - Enumerator
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00121.png0000644000175000017500000001131411365042643013237 0ustar tlktlk‰PNG  IHDRh(ÓÊ` bKGDÿÿÿ ½§“IDATxœíkTT×€?d†ÐpPbMb‘PE‚EQI|$>ˆf…,QÔF%AƒšFic¬¯¢’ÔÄâƒjlTP„ VVã£)Òh$" 1 cx „œþ`1efxÌð4=ßZw­áœ}ÎÞwßs÷½gßs/F*•J…@ úúÚ@ ´Ð@ÐOZ ú)í‚ÂÂB222úÂÁψ ôµ ]BŒA_1iÒ$ž|òIÍB•111*@lbëÖö¿Šÿbë«-&&Fg<êÜA· ‹;] 66–… öµÝæÂ… }m‚àÿˆéÓ§·Y.rÐ@ÐOZ ú)"@ A?Eh@ 览-ý  ŸÒ#zûöí„„„Bhh(QQQܺuK]_^^NDDD›m›šš !&&¦Íú¨¨(>ùä“nÙב~}¨««cß¾},_¾œ+VpèÐ!šššºeSGDDDpçÎòÖû‘ŸŸÏßþö·^³A`™™™ìܹ“ˆˆˆ lÚ´‰+VPWW§Ñoaa!«W¯îVpmK¿!áììÌ1bVVVlܸ^[+¾uëÖ6yëýøî»ïسgO¯èÿ©Q*II¹Êµk÷úÚ”.±oß>°°°ÀÑÑ‘ââb–-[FAAAê©©©Q_”[ÿîI"##)..îRÛ÷ߟüü|Œ{تÿÒÚ¾ššNŸ>Ýkº´ýÝZWwüd=–âøýïÏž={ˆŽŽ&--Y³f±k×.FŒÁ7Ô²)))TVVj´·µµåÌ™3e ØÛÛwÛ6mý†ˆ««+iii¬_¿ž233¹té'Nœè¶m†Ðýèo45="--5kŽâ踑eË>åæÍû}m–Á444Gpp0¯¿þ:¬[·ŽY³fqìØ±¾6Ï`233©©©éRÛÒÒR¼½½u_WîAZÛ7tèP:ÔkºZ£­«;~2„^ËA[YYñØcpÿþ}^yå|}})--Å××—ÔÔTµ¼qqq};v ²#GŽ`ooD"ÁÖÖ–ÈÈHuÝ©S§9r$2™Œ¥K—ò‡?ü3gÎhè8{ö,cÆŒÁÄÄ„qãÆ©ïôµ)**"))‰ððpŒŒŒÔå666ìÛ·¹\®!ÿý÷ßS[[Û®O:«ï íýxôèo¿ý6X[[4Ÿ(³gÏæàÁƒÈår®_¿Þ®ß´eýüüøðÃÕ: ®®®TTTtÙîÖdgßaóæãŒ»ŸÝ$&^¦¶¶¾Gúî šššhllÔ9Y_}õUõ±ªªª"((ˆøøx¼½½ñôô$99™Ý»wãé鉗—çÏŸW·=wî .dæÌ™xyyuij½ÿ~<==qwwgÍš5( u]AA«V­âÅ_dñâÅœ;w€àà`***æ›o¾é´ŸÖ„‡‡sÿþ}ÂÂÂÈÈÈ ¤¤„5kÖhÈ“››«öÇÙ³gñóócΜ9lß¾GpåÊ–,Y‚»»;ê›mûÊËËùãÿ¨îÿ믿Æßßwww~ûÛßrñâE ÿ·§O·Ö¥mÇ¡C‡4.Æ,_¾œ‡pÄÚ¦ÇtRRûöí#::š5kÖ––FPPМÃmyuvïÞ½XYY±wï^ÜÜÜÔíçÏŸÏ?þñõ@/,,äöíÛ¯@VWW³téR>øàjjjˆ‹‹ã½÷ÞC¡PPPP€ŸŸ;vì ¬¬ þüç?SVV¦¡¿¨¨ˆùóçJee%^^^x{{·™®¸|ù2Æ kóŽÀËËKçõ̵k×’™™Ù®:«ïŒÖûÑbŸT*¥¤¤„ÄÄDÂÃÃIHH@©T’ššÊ‰'HNNÆÆÆ¦]¿iËz{{­Ö‡\.×¹B^^ ÉL˜°|öÙEÊÊšsCCïåò LMMyùå—Ù¼y3[¶láôéÓ3tèPÆŒ@cc#999<|øøøx–.]JDDr¹œãdz`Á>ýôS 9ïÎ[o½EJJ [¶l!::Ú  dVVÉÉÉDEEqòäId2‡àÇäÝwßeÖ¬Yœ>}šµk×òÑGñí·ßÄ Aƒ ÂÑѱÃ~´Yµj?þ8o¿ý6ãÆC©Tê¤xîÞ½Kmm-|óÍ7üûßÿæàÁƒ8p€‹/’B¡`óæÍ¼ñÆ$%%1mÚ4¶lÙ‚J¥Ò±¯¾¾žœœ 9€nذ pæÌ–/_ζmÛ¸{÷n‡úôõwk]ÚvØÛÛsêÔ)µì… 033ÃÌÌLïcÖí~‹ÃP222ÈÏÏši]]¹¹¹:) ¹\΀ËåH¥RõöÁƒóÜsÏ‘””„¯¯/ñññÌ›7O#ŸebbÂW_}Ÿqã°³³C*•RYYI\\/¾ø¢ú®å½÷ÞcçÎ:vÆÅÅñ /àéé À»ï¾‹D"¡®®™L¦![]]¹¹yy¨ç‘Ëålß¾©TÊ”)SXµj±±±¸¹¹QWWÇ_þò† F}}}»~355ÕU*•øûûsõêUžyæbbbxë­· ¶íÞ½rNžÌ!..“›7ï#‘ÓØØ|¬ÿ׃²6AAAÌœ9“ôôtùðÃyúé§Y·nvvv@ó·m^{í5ŒŒŒ?~<ÆÆÆøøø¨ÿn¹“J¥DEEñôÓOÍ©?‰DBMM &&&zÙ£T*æô‹L&cÓ¦M466žžÎàÁƒÕãßÅÅ…9sæðÏþ“•+Wbdd„™™‰¤Ã~´8p FFF 8©TÚ©,Y²D=£³³³£¦¦† .ð›ßü†)S¦Í3ccc”J%ffföµ&-- {{{æÌ™ÀäÉ“qssãÂ… xxx´«¯+þÖ¶c„ TTTPPP€gÏžeîܹú@z,@oÛ¶MíThþhÎ믿΃ôî£%Íáëë˱cÇØ¾}»Fýc=Æ•+WX¿~=ùùù Z-©TÊ7ˆŽŽæÞ½{XXXü0úÙgŸ%;;›•+Wbff†««+‹-ÂÌÌŒ’’ yõÕWÕòõõõ³Y}úé † ¢þÝ⃒’†®.—H$¼öÚkö¥P(xâ‰'4Êžxâ Õ4méë K$&OžÌ—_~‰©©)·nÝbÚ´iõѽ–ƒvuu¥¼¼œªª*½Ûxzzrþüy®^½Jaa!Ï?ÿ¼Fý‰'ذa7n$//¬¬,õ]¯¹¹9?üðƒ†|yy¹ŽssséKbb¢ÎCK777”J¥F~°…°°0Î;‡±±1¦¦¦˜ššbllŒ‰‰ ¦¦¦êü{gõÝAûâWZZÊàÁƒÍ“¾#¿iËBó…2!!˜˜æÍ›ÇÀ»mëÏ•´´4–-[¦QfccÛo¾III‰ÎÊ$}úÛ¿?‹/æðáÃìÙ³Çà±¢R© äïÿ;ÁÁÁ(•J¶lÙ€L&ÃÙÙ™£GjlÚùâÎúé ?þøc§22™L'w›ššÚé9™L¦sWUUu:v{ÂßÐü5º/¿ü’³gÏ2uêTõŸ»ôØôÇÕïáÇ„„„àää„\.×;&—Ë™6mË–-cþüù  yý(**ÂÑÑ‘©S§ÍÓµ– À¬Y³X²d ¡¡¡<þøã¤§§sýúuàãîî®~PimmMFF‹-jsݪ……«W¯& €””õ4())‰äädRSSqppPß‘_ºt ooo^xáuÕ·Gk:¾€æÙ@RRTWW³wï^uä:ò[[¸»»S\\ÌÎ;9räH§¶¶0dˆ“'[³k׊ŠÊÚMq´‡¿ÿTæÍ§·¾Þ 66–””ïõ–wvvæþýû¤¤¤¨§×*•Š/¾ø;;;d2™^©…BÁSO=…³³3ß~û­Á–9BFF;wîdÔ¨QÌž=›÷߀ñãdz{÷nîܹÃSO=E}}=Ë—/gñâÅÌœ9Sï~:£%MÐ’&ÌÍÍå޽ΗQŽ?ž­[·RQQ\.'77—ÐÐPŽ?Þa;WWW>ûì3Š‹‹±µµ¥¼¼œýë_¬_¿¾Ãv=áï»ËÊÊHLLdÓ¦M·o Ð/½ôÒ;•H˜4iñññmÊZ[[³jÕ*>þøcõƒ”|}}Y´h|ðN»¹sç²mÛ6žþyLLLJ¥ØÙÙÄÉ“'yå•W3f cÇŽ¥¦¦†±cÇê䑦OŸŽŸŸŸZ.++‹ÈÈÈv§mÛ¶m£²²'''Q*•ܾ}›O>ù„gŸ}ÖP7éMëÕÐ<=Ó^mâææÆÚµk‰ŒŒ$//¸_s¹ZG~‹ŠŠÒÑ-•Jñôôä‹/¾`ÆŒ]²ÿ—¿´$0p3ÈË+áĉâ㳸w¯©Ôøg“‡4h7n$""‚0dÈJKK8p ÁÁÁ÷7yòd<Èï~÷;¤R©:gºk×.½Sb³gÏæÔ©Søûû#—˹qã+V¬`øðáøûûȨQ£(,,ÄÉÉI}œ---ùøãY½zu‡ýt†­­-£GæÍ7ßdäÈ‘TUUáääÔi;fΜɒ%K9r$ß}÷+V¬à¿ø…Ž}êvöööøøøÀ¨Q£ÈËËcúôéLœ8‘²²²võuÕß­íppp@"‘0eÊ._¾¬~ÖÓ©´.-\ïÉ—0=zDyy¹:¤P(ÈÉÉa„ XZZÔWUU™™™X[[ãììÌÝ»w)((ÀÑÑ‘ÐÐÐ@YYÏ=÷£G&&&†‰'jè¸yó&·nÝbôèÑ:¹«¶P(\½zccc\\\4Gkssóv§7Õw†¶¡yÚ˜žžÎ Aƒ:íùM;ÔÂÒ¥K±±±ÑyПìì;œ8‘MbâÊÊj4‚uTÔâ~q½páBƒ?ØßÐÐ@^^555XYYñ«_ýJgö¦/µµµäææbii‰¥¥¥3vìXƒìÉÍÍE©Tboo¯³ çÁƒܾ}+++FŒ¡.¯¨¨ ??Ÿ_ÿúט››wÚOG455qýúu z¥¨¨ˆ’’ž|òI¬­­Û´ÏÌÌŒêêjs±¤¤„¢¢"†ª‘Ëî}ü­R©4tiû š—ZZZ ÷~¶0}útbbbðóóÓ(ÿIôOANN3fÌ !!GGG>ÿüs"##ÉÏÏ×멲 …BÁÅ‹Y´hÙÙÙTõAßñÓÔôˆôô|>ÿ<›S§¾¦¶¶þ:@ þ©¨¨àÚµk„††ò׿þUï CkÚ Ð=–âèk\\\8pàaaa”••aooOrr²ÎrëÖ-BCCùè£ Ά`l<€)S˜2ÅðpoΟÏeøðÁ½¦O è-JJJ8|ø0+W®ìRpM€†æU -ë;]câĉdeeý¤:ML$Ì™óÌOªS è)FÕkßÅŸ‚~ŠÐ@ÐOZ ú)"@ A?Eh@ 览-ý  ŸÒî:设¦*üÐþg A_ óªwaa!}eàg‚ úÚ„.!Æ¿ ¯˜4i’ÎoÒ Ð@ 舴@ ôSD€‚~ŠÐ@ÐOùù_Ð|kŽxýIEND®B`‚bm3.7.0/doc/html/a00257.map0000644000175000017500000000020511365042652013237 0ustar tlktlk bm3.7.0/doc/html/a00091.html0000644000175000017500000003522711365042632013434 0ustar tlktlk BitMagic: bmconst.h File Reference

bmconst.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  bm::DeBruijn_bit_position< T >
struct  bm::first_bit_table< T >
 Structure keeps index of first right 1 bit for every byte. More...
struct  bm::bit_count_table< T >
 Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers. More...

Namespaces

namespace  bm

Defines

#define DECLARE_TEMP_BLOCK(x)   unsigned x[bm::set_block_size];

Typedefs

typedef unsigned long long bm::id64_t
typedef unsigned int bm::id_t
typedef unsigned int bm::word_t
typedef unsigned short bm::short_t
typedef unsigned short bm::gap_word_t
typedef word_t bm::wordop_t

Enumerations

enum  bm::strategy { bm::BM_BIT = 0, bm::BM_GAP = 1 }
 

Block allocation strategies.

More...
enum  bm::set_representation { bm::set_bitset = 0, bm::set_gap = 1, bm::set_array1 = 2, bm::set_array0 = 3 }
 

set representation variants

More...

Variables

const unsigned bm::id_max = 0xFFFFFFFF
const unsigned bm::set_block_size = 2048u
const unsigned bm::set_block_shift = 16u
const unsigned bm::set_block_mask = 0xFFFFu
const unsigned bm::set_blkblk_mask = 0xFFFFFFu
const unsigned bm::set_block_plain_size = set_block_size / 32u
const unsigned bm::set_block_plain_cnt = sizeof(bm::word_t) * 8u
const unsigned bm::set_word_shift = 5u
const unsigned bm::set_word_mask = 0x1Fu
const unsigned bm::gap_max_buff_len = 1280
const unsigned bm::gap_length_threashold = set_block_size * 3
const unsigned bm::gap_max_bits = 65536
const unsigned bm::gap_equiv_len
const unsigned bm::gap_levels = 4
const unsigned bm::gap_max_level = bm::gap_levels - 1
const unsigned bm::set_array_size = 256u
const unsigned bm::set_array_shift = 8u
const unsigned bm::set_array_mask = 0xFFu
const unsigned bm::set_total_blocks = (bm::set_array_size * bm::set_array_size)
const unsigned bm::bits_in_block = bm::set_block_size * sizeof(bm::word_t) * 8
const unsigned bm::bits_in_array = bm::bits_in_block * bm::set_array_size
const word_t bm::all_bits_mask = 0xffffffff
const unsigned bm::set_block_size_op = bm::set_block_size

Define Documentation

#define DECLARE_TEMP_BLOCK (  )     unsigned x[bm::set_block_size];

Definition at line 104 of file bmconst.h.


Generated on Sun Apr 25 09:37:30 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00245.map0000644000175000017500000000026111365042651013235 0ustar tlktlk bm3.7.0/doc/html/tabs.css0000644000175000017500000000346411365042626013400 0ustar tlktlk/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : 80%; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs #MSearchBox { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : 80%; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.navpath { background : none; border : none; border-bottom : 1px solid #84B0C7; text-align : center; margin : 2px; padding : 2px; } bm3.7.0/doc/html/a00041.html0000644000175000017500000001212711365042651013422 0ustar tlktlk BitMagic: bm::globals< T >::bo Struct Reference

bm::globals< T >::bo Struct Reference

#include <bmfunc.h>

Public Member Functions

 bo ()

Data Fields

ByteOrder _byte_order

Detailed Description

template<bool T>
struct bm::globals< T >::bo

Definition at line 409 of file bmfunc.h.


Constructor & Destructor Documentation

template<bool T>
bm::globals< T >::bo::bo (  )  [inline]

Field Documentation

template<bool T>
ByteOrder bm::globals< T >::bo::_byte_order

Definition at line 411 of file bmfunc.h.

Referenced by bm::globals< T >::bo::bo(), and bm::globals< T >::byte_order().


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00177.png0000644000175000017500000000615711365042644013264 0ustar tlktlk‰PNG  IHDRÛ(w…÷bKGDÿÿÿ ½§“ $IDATxœímPTeÇÿ°,K ²â"A#A()ﲈ¬¢C†Lc AÒ4%TNšÖD¾Öø²’ÆYÖÒfÀ4D¢ 5,I XÁ!„v¯çƒã™g]vÙE\yzîß îë\o÷îþÏË}Î,ˆˆÀ`05 ËÇ݃ñÿƒa&˜Ø 3aõ ¡££õõõ£ã_ÃË/¿¬cÓ[mm-^}õU³4Ä`ü[™jÝQGl†œ †a õ¬Ø5ƒa&˜Ø 3ÁÄÆ`˜ &6ÃL0±1f‚‰Á0z—þ寿þBmm-’““g¡™Õ€T*EvvöŒrŽŽB&“á矆……°uëVðx<ÎG¥RA.—£¡¡jµ~~~HLLÄ‚ 8ŸÜÜ\DGGÃÓÓS+^^BBBàïï}ûöaÆ ‹ÅZ>'Ož„¯¯/~ÿýw´µµMÙç²eË0í|ÊËËqîÜ9 ÃÝÝÉÉÉX²d‰Ñ}ààÁƒ˜œœXXX@(bÓ¦MpwwŸ¶>“âkjjP]]¤¤$­>M¥¸¸ˆçl/^DSSÒÓÓ9[ss3Š‹‹±sçN­ïøQóÐG¶?þø_ýõlô2ã:wîÜAAA7NMMÕûƒ}¥R ???œ8qnnn‰DøàƒÃÝkìè耿¿?Ž9GGG,Y²r¹Ë—/Ç•+W¸\‡Ƶk×tjäææB¡P@­VcÏž=HHHÀÈȈ–OAA úúú T*¡T*!“É “ɸñíÛ·§ÏîÝ»‘””„††¢µµ¾¾¾¸zõªÑ}ÀG}…B¥R‰öövÈårxyyqۧÔøÝ»wãÃ?ÔúgŸþ‰÷ß_˶oß>ddd ««‹³:u r¹Ü¬BÐÈd2šÂ¬—ÒÒR‹ÅFûÏSê<õÔSÔØØh”ïæÍ›é•W^!FÃÙnݺEB¡ŠŠŠˆˆhõêÕG“““Z±™™™äææFccc\ÝââbÞÞÞ$•Jibb‚§§'eddhù¬]»–¤R©–-%%…RRRŒšÑØØY[[Suuµ–ýÍ7ߤ¤¤$n<]ŸDD€jjj´¶ÇÄÄÐ믿nT/ÆÆ···“¥¥%egg“§§§Q¹õQ__O¨««‹ˆˆFFFÈÆÆ†V¬XAœ_TTmß¾ý¡jéÀ~~ž•k6Fƒôôt,X°‹/Æ·oßFTTŽ98::âøñãÈÌÌ„££#œqêÔ).ϧŸ~Š×^{MïX_¿ÿþ›7o$$$ §§ ¨©©1Ø·R©DYY: Îîää„üü|…BüôÓOøå—_ðÕW_éì ÷ïßññq™ôy}þùçJ¥hhh0)n:&''1>>Ž¡¡!-{vv6ÒÒÒ:¿H$‚@ ˜ÕøÂÂB¬^½YYYhmm5êÈ©R©¦´ÁÞÞ?üðàÒ¥KX±b¶nÝŠŠŠ ÷~C H$Fç-fEl …|>·nÝBQQ:„3gÎ`bbUUUÄÍ›7ññÇ#%%ŽŽŽèééÁ{g={öpyž}öY¬ZµJïX_ÑÑQTUUŽ;‘H„cÇŽ!44tÚ¾]\\àêêª³í¥—^‚D"ACC!‰t|ø|>"##M~pÛÓÓ»víBjj*&&&LŠ5„RSS±eËÄÅÅ!??mmmpssÃsÏ=gr¾²²2äçç#//ï¾û.jkk±cÇŽY—ÉdHLL„H$‚D"\.×›¯µµ™™™ð÷÷Ÿr;ÇCDD'¶óçÏcÆ ˆŽŽÆ÷ßµZ¦¦& cíÚµ:ñgÏžEpp0¾ùæ›G"¼Y›P(ÄÁƒakk‹ððp¼ýöÛ(,,poO²sçNXXX ** VVVرc7æòÄÆÆbûöízdžêü·¥¥%„B!ø|¾Á¾‡‡‡1þüi}ìíí ÎýÁ#‰1Ü_Ì9|ø°É±†ÈËËCEE\]]‘›› k]³K}}=ÊËËqþüy\»v £££hnnžµøß~û ---Ü‚F||<¾ýö[h4·ˆP^^Ž˜˜¼ð pqqA]]ÞšëÖ­ÓÛÆ‡††ÔÕÕÁßß:±[¶lÁÑ£GQYY‰¥K—b×®]èìì4z¾ÓñЫ‘àáá¡õÃöññAee%7¶³³poUJ ÀÊÊŠÏfSqrrBww7ˆH§—ºº:tvvÂÙÙzstvvÂÇÇÇäÚ|>R©ëÖ­›òuŒ™@DÐh4H$ÜiR{{;Þzë-ÄÆÆ¢µµÕ¤Ï<''áááܸ°°IIIèë냥åôûééâe2ˆˆ;{Q©T¸yó&ª««!‘HP[[‹´´4xyyáwÞÁúõë§í_"‘ ++ ---¸qãÂÃÃaaa7¢¢¢mmmSžBÞG,C,£¯¯R©‘‘‘ð÷÷7ùRa*fåÈÖ××§5îéé™rÏ1×ꄆ†b||/^ÔÙvàÀTVV"** ---¸|ù²ŽOWW.\¸€M›6lllp÷î]¿‘‘<ñÄ:v±XŒÔÔT¤¥¥ÍÊ[%%%ðóóÓ²=ýôÓØ¿?nܸþùgF}Þ'883:’?ODËåÈÉÉAYYÊÊÊpáÂDFFrg+|>½½½èïïçn%ÂÏÏB¡999X³f wòòrÔÕÕÛ}Ôj5ˆVVV˜7oތ櫃 «)SRZZJ¨´´”ˆˆ†††ÈËË‹¾øâ êîîÖÊuýúu²³³ãÆäääÄ •——O96T§­­M+¯)«‘ÙÙÙôÌ3ÏPKK‹Öœx<ÕÕÕQzz:yxxPSSçÓÑÑA!!!ôâ‹/r¶mÛ¶Ñš5khhhˆ³>žÜÝÝé“O>¡žž£æ{C«‘³"¶ÐÐPZ¶lEDDГO>IÏ?ÿ<›,¶ŒŒ ­åýÿªó Ø),,Œ Å´ý«T*zã7ÈÚÚšÈËË‹lmméèÑ£œÏää$eee‘@ ooo  kkkJNN¦»wïr~ýýý´~ýzš7o…„„ÐÒ¥KÉÁÁΜ9CD4¥ØˆˆÎž=KZlDD%%%´hÑ"ruu%±XLÎÎδ|ùr­Åt}Ý îÏÊʊ¨¹¹Ù¨>¦‹ß¶mÅÆÆêÄ ’@  ’’m]]]´wï^òöö6XûË/¿$ô믿jÙƒ‚‚(((HoÜéÓ§)""‚NŸ>MÆLSCb³ Ò>¹ÿò™xZ366†üöööX¹råCkM¯£Ñh000€E‹z{{ÑØØˆU«VaáÂ…FåíííÅÕ«WÁãñ¨õdÈ}îܹƒ+W®@­VÃÇÇ‹/ž2×õë×ÑÚÚŠùóçcåÊ•°±±™álg†J¥ÂåË—144øúúNy­ó¸ûœ)jµú‘Üž¼ô£˜5±ÍEº»» . øúúê]Fž‹Ì•ùÌ•>æ"†Ä6+«‘s>Ÿ?åý±ûØÚÚš±›‡g®Ìg®ôñ¿Æ¿Zl"‘ÑÑÑ»Yc®Ìg®ôñ¿{ņÁ0Ll †™`bc0̃a&˜Ø 3ÁÄÆ`˜ &6ÃLè½Ïfêë/ Ã0:b Çwß}÷8za0þÕè<É`0 ìj3悉Á0Ll †™øþP@›QÄIEND®B`‚bm3.7.0/doc/html/a00223.map0000644000175000017500000000020511365042647013234 0ustar tlktlk bm3.7.0/doc/html/a00145.map0000644000175000017500000000032211365042635013234 0ustar tlktlk bm3.7.0/doc/html/a00249.md50000644000175000017500000000004011365042651013144 0ustar tlktlk1442767f2e2531bb12021370e773278fbm3.7.0/doc/html/a00248.png0000644000175000017500000001243011365042651013250 0ustar tlktlk‰PNG  IHDR(uý`|„bKGDÿÿÿ ½§“ÍIDATxœíÝyPgÞðï\ 7#:j4¬HTð@‰”º&¾Z¯ƒQ,£¯¨l©›le˵¢Ñ5Bv¥Ö+®[šÄ J¤ð@w*Š‚ZFÑĈ&b8åˆr 0¿÷vf`Æa˜~Ÿ*ª|ºé~~Ý|™~¦§1ÆHlícÌ(Ƙ`q@1ÆKjí¬­¨¨×®]³vÌÊT*•µK`ð•••…ÈÈHk—Á¬Œß+¦PZ.\°v Ì ÒÓÓ±}ûvk—Á à9(Ƙ`q@1Æ‹Š1&XPŒ1Áâ€bŒ cL°8 º¨´´©©©VéûòåËÈËËë³ýYóܱ¾‰ª‹ŠŠŠ’’b•¾322pçÎ>ÛŸ5Ïë›8 c‚Åw’›ˆ°k×.¤¦¦ÂÆÆ .Ddd$jkk±uëVá›o¾Ass3¢££ñàÁ¤¥¥A"‘ &&o¾ù& 11………ظqc§íóçÏcÿþý¨ªªÂ¤I“ Ñht5Ü¿;vì@AA† ‚¨¨(„††²³³±k×.”––âå—_Æûï¿W_}ðý÷ßc×®](**‚R©Dtt4‚ƒƒÍºü1ÂÃñsçNìÙ³#GŽìò¹Zïê>xð ÊËË¡P( R©ðÎ;ï8€S§Náùóç;v,þüç?ÃÝÝý…ç‚õmü Ê ùùùH$8vì¶mÛ†#GŽàâÅ‹hnnÆ­[·ðìÙ3$%%aùò刋‹ƒB¡ÀñãÇ¡R©pðàAÝ~<==uÁѾýóÏ?#661118uêÆ«W¯ðÁ ,, ÿú׿ðÞ{ïaÇŽÈÉÉÁãDZyóf¬\¹§OŸFHH¶lÙ"BUU6mÚ•J…ÿûßˆŽŽÆ_þò›Ý_SS~üñGdeeáÓO?ÅðáÃÍ:wuuuøôÓO±fͤ¦¦bË–-Ø¿?ª««qýúu|ûí·Ø³gNž< {{{|ýõ×/¬õ}ü Ê ŽŽŽXµj¤R)üýý±`Á¤§§ÃßßD„Å‹C$!00‰ºöÑ£Guû™6mšÞ~Û¶Ï;‡LŸ>°páB|ûí·€«W¯ÂÕÕóçÏL˜0³gÏFFFÜÝÝ1~üx¼þúë€wÞy‰jµYYYðññÁìÙ³ÁÁÁ Â… P__oVhllÄúõë1xð`³ÏÝ´iÓ°gÏŒ5  T*!•Jñüùs¨Õj@SSìííñᇢ¹¹ù…µùùù™6 L°8 Ì0lØ0H¥ÿ=u/¿ü2nÞ¼©kÛÚÚD"d2$‰®mªÊÊJxyyé-Ó^:•——£¨¨Hwù BKK FŒ¡[.•J±xñbÀãÇñÒK/éíó¥—^BEEÍêO{\¦„`øÜÉd2äççcÿþý(--…³³³î S§NÅÍ›7GGGLœ8K—.…££ã kc}”jjjôÚÕÕÕprr²hNNN¨ªªê´_{{{¼öÚkˆ‹‹Ó­kll„H$¡C‡:l—™™‰€€ØÛÛ£°°Po]mm-`cccV555] ^Cç.++ ÀÖ­[1vìXˆÅb¼õÖ[Zç­Ö®]‹µk×âÞ½{HNNÖ]«õ}<e†òòrÝüL]]RRRÌú]PP€ëׯwÚÀùóçñäÉ­Á·oßâöíÛøå—_´þ@FGG#33¸rå ª««¹¹¹øøã!‹1qâDܸqeee€ªª*\ºt f÷×U†ÎÝãÇ1räH¼öÚk‹ÅÈÉÉA]]àÈ‘#ذa$ |}}1kÖ,TVVZ¼6&<ü Ê cÆŒÁÞ½{‘˜˜ˆ’’Œ5 o½õjkk»´Ÿ3gÎàîÝ»˜4iR‡vpp0.^¼ˆ¨¨(øøøàáÇ Œ1+V¬ÀÚµkáëë‹¢¢"Œ;o¾ù&D"BCCoooäååaõêÕ°³³ƒ"""°jÕ*øúú¢  3gÎÄäÉ“ADfõ§ Šîž»§OŸâСCX¿~=d2¤R)”J%öîÝ‹ 6àÔ©SX±b òóó±zõêÖÆú>Ñ@ÿ³S‡Fddd—X§V«‘““GGGÝÄnO¸ÿ>ªªªð›ßüööözë*++ñàÁ¸¹¹u˜?*))Ayy9<==ááá¡·®¼¼%%%:t¨Þ|Uwúë Cç®®®¹¹¹4h^yåTTT ¬¬ ãÆCSSrss¡V«áãã…Ba‘Ú´¬à?‚Åef@±ŽžÿüZYÒÔÔ±X„˜˜PlÜ8·WkÑhS§nGIÉS­¡äîî„õëðxqlme½Zë8 úˆŸ®ÀÎçpìX6ÄbššZtëll¤ÈÎÞ‚Áƒ{½®o¾ù￟FûßH±X[ÄÄ„bÙ²`8:ògð˜y8 îî݇øûßÏâôé •Šõ‚ ¤R –/[·Î·J}ÍÍLž¼ Õv˜0—J۵µÁêÕoàÝw§C¡°7°Æ:Ç%P7oþ‚øø38>‰ÍÍ-~ŸD"Æõë›1t¨á§ô´¯¾ºŒM›’Û¼ŠÒ'•Š!“Iðî»!ˆŽ~nn½ÿJõMPÓØØŒåË ##2™X7Þ™L‚E‹¦ .κ¼Í˜8ñ#<}ZgÒm[¶ü¢£ßèùÂXŸÇ÷A Œ\.EddëóÍ[Z ‡h4ÄÄXÿѶr¹¿ÿ}ÄbãïÞI¥­ÝfÞ¼ñ½Që8 hîÜqøç?£ ‰!60B2™óæ`äHÓþÜSO[ºt*l ®—J%2ÄÙÙ[ T* ~cmq@ Ôܹã°oß2´¾+Öq}s³6„÷z]†88ȱzõLH$‹•J%ððpBJÊ:'Ö%Pæåå;;釔T*ÁìÙþ5jˆõŠëÄ»ïN‡\®£¨T*aÄW~u”@åä”""âsL˜0»wGê]îµ´ëÕ“–³³V¬ÑÍ5i/ë¾þúÿpïÞ#üîwP_¯¶r•¬/ဠm8ùù ÇW_­À‚Ø·oD¢Öáš1c4üýG¼`/Ö±jÕ Ý-C†8#%efÌðÅÑ£k“SÊ!ź„J`Ú‡“]ëÄóܹãðùçËøÃ,k–hÔàÁŽXºt*èÍ9ùù çb]Æ÷A ˆ¡pjëÖ­"L˜ài…êL÷èQ-4M§â¦#cZP1~pÒ±²îáK<h?°|¹ÇLÅee-œ´8¤˜)8 ¬h †“‡{(+èá¤Å!Ōဲ'}R̨^ößpÆáÔ‡ë T/Ò§•NípH±ö8 z ‡“i8¤X[P½€Ã©k8¤˜TËÉ)Å¢EN]Å!Ũ¥ §1c8œÌÁ!Å8 z‡“epH lP=€Ãɲ8¤.( ãpêR”q8õ,©‡ÊB8œz‡ÔÀÂeN½‹Cjàà€ê&'ëà8 ºÃɺ8¤ú?(3q8 ‡TÿÆe'aáê¿8 ºˆÃI˜8¤ú'¨.àp6©þ‡ÊDN}‡TÿÂe§¾…Cªÿà€z§¾‰Cªà€2‚éoãêû8  àpê8¤ú6¨Np8õ/R}T;Ný‡TßÄÕ‡SÿÆ!Õ÷p@ý‡ÓÀÀ!ÕÇP; `À}9:N¤Áƒÿ—D"©ÕjHHHh?cíó+´/™Ì<<–“LænõZøë¿_K–,Ñû+…G5´ªßji!H$‹¬ÒwDDD÷1þ|,Y²¤Çûé+ZÇ{޵Ë`ÿÙa™Á€R©T=Z ë}*•ŠÇ• Ö‰':,ã9(Ƙ`q@1Æ‹Š1&XPŒ1Áâ€bŒ V·ê§Ÿ~—_~iRºîäÉ“øî»ïúmÖÂcj¾_ý±±±€ªª*ÄÅÅuy;!О—®COèv@åååaß¾}–¨¥Ë’’’påÊ•~ÛŸµð˜š¯¦¦}ô‘îßЭ[¹r% ;m·ÝN´ç¥ý1ô6¾Äc¬‡xyy!??_×NMMEMMÁ¶µ?†Þf‘€Òh4X·nœáááO>ùðäÉ„……aÇŽ6lÜÝÝqðàAüñ„»»;”J%uûùì³Ï°lÙ2ƒíÄÄDxyyÁÎÎóçÏ×ÜüÁÁÁ°µµÅèÑ£qøðaݺsçÎÁÏÏ666À7të2220nÜ8ÈårøúúâäÉ“Ýꯢ¢³fÍ¡C‡ P(p÷î]Kœâ^ÇcÚý1}ôèÞ~ûmÀ¢E‹PQQE‹!33³C»=cÇnŒ¡í´ã–ooo888 ** ---FÏKÛc€#GŽÀÇÇR©J¥Ÿ}ö™Iû7›¡Ïâ™êÔ©S$‰è½÷Þ£çÏŸSff&¹¸¸PRR•••‘X,¦?ü4 íÝ»—Pll,i4Š‹‹#ݾNž) :sæŒÑóÒöjkkI.—ÓñãÇ©¡¡.^¼Hb±˜***ŒîßTK–,éðY<‹Ô AƒH­Vë–mÚ´‰,X@eee€ž={FDD$•J©©©‰ˆˆnÞ¼IC† 1©Ÿ>ø€/^¬·Ìßߟâãã)11‘ôÖ­[·Ž6lØ@ýë_éí·ßÖ-W«ÕKÏŸ?§}ûöQHHˆÞv .¤­[·šÝ_qq1 ÒÒR“ŽKKhÅcjÞ˜ ("¢áÇӭ[·:m·ÝÎX-ÆÛN;n>Ô­ ¡¤¤$£ç¥í1444Pvvv‡c½wïžÑý›ª³€2øY¼®ðöö†L&ӵǎ‹ôôt]ÛÁÁ ‰ —Ë!•JumS•––ÂÏÏOoÙ˜1c<@^^¼¼¼tëêëëñÛßþÍÍÍ=z´n¹L&ßþô'@II‰Þ:xõÕWQ\\Œúúz³ú±XŒaÆ™|lBÄcj½1}Q-ÝÙN©Têþ­+cãЖ\.Gvv66n܈Ÿ~ú ®®®Ðh4zßÓÙþ»Ã"UYY©×®¨¨€«««%v­3hÐ TTTtÚ¯³³3¦OŸŽÔÔTݺúúzˆD"lÛ¶­ÃvÇŽChh(œqçνuOž<‹‹ lmmÍ꯲²Ò"cm<¦ÖScµ˜»]uuµÁíŒC['NœÀ¦M›œœŒiÓ¦A"‘@¡P˜zXf±È$ùƒpúôi­÷süãÿxaÚw&;;iii¶CCC‘˜˜ˆ²²2ÀíÛ·qéÒ%@XX233‘›› ¨««C`` Ž?Žððp¤¤¤èàÚµkXºt)$ ÂÃÃqöìYÜ¿@ë„`rr2ÂÂÂÌà1µÞ˜š[‹¹Û;/m•””`̘1˜>}:$ ®^½ŠÚÚZsÑtí¯Í™ƒ ¢Q£FQHH :”æÌ™CjµZw]ªuïÞ=½kò[·néÍW¬_¿ž¦L™Òi[£ÑPdd$) zã7ÈÓÓ“æÌ™CñññDDô·¿ýœ)44”†N*•ŠZZZtûqss£ÐÐPrvv¦Ý»wëúؼy3) §ÁƒÓš5kºÕ_qq1I$“ÏŸ6ÅcjÞ˜›ƒš0aÓ7:´Ûn÷¢c7ÆÐvíLjhÆŒ”””dô¼´=†¢¢"òðð  £9sæ··7Í›7ÏèþMÕ#“äZõõõtþüy½I´žpûöm:{ö,ÕÔÔtXWRRBiiitçÎë (--ŠŠŠ:¬+,,¤´´4ÊÏÏ·X]%¤€Òâ1íž––ª¬¬Ôµ+**(--ž>}ÚiÛRµ˜»]gç¥ý1ÔÔÔÐÙ³gé‡~ ¢ÖÐÊÈÈèR?†tP""¢¶¯¨>ŒÈÈH´[Ìz˜H$BBBB=ñ²§÷?P”••é½YО¿¿?Æ×ïúî Ú'j&$$è–Yd’œ±B&“ÁÍÍÍàz{{û~Ù·µp@1Önnn˜={ö€ëÛZø³xŒ1Áâ€bŒ cL°8 c‚ÅÅ,(Ƙ`q@1ÆËà}P½Yë‘‘‘þyiÆ„ ))©Ã':”§§'T*U¯ÅZ©T*xzzöèþ2•J…)S¦è-ëðY<Æ žƒbŒ cL°8 c‚õÿçÈýÊAsdIEND®B`‚bm3.7.0/doc/html/a00025.html0000644000175000017500000000771311365042652013432 0ustar tlktlk BitMagic: bm::bit_grabber< unsigned char, 8 > Struct Template Reference

bm::bit_grabber< unsigned char, 8 > Struct Template Reference

#include <bmtrans.h>

Static Public Member Functions

static unsigned get (const unsigned char *arr, unsigned j)

Detailed Description

template<>
struct bm::bit_grabber< unsigned char, 8 >

Definition at line 153 of file bmtrans.h.


Member Function Documentation

static unsigned bm::bit_grabber< unsigned char, 8 >::get ( const unsigned char *  arr,
unsigned  j 
) [inline, static]

Definition at line 156 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00238.map0000644000175000017500000000045711365042650013245 0ustar tlktlk bm3.7.0/doc/html/a00247.map0000644000175000017500000000020611365042651013236 0ustar tlktlk bm3.7.0/doc/html/a00233.md50000644000175000017500000000004011365042647013142 0ustar tlktlk54a4e3815afe7b617f986d0e0cc21344bm3.7.0/doc/html/a00214.png0000644000175000017500000000374211365042646013253 0ustar tlktlk‰PNG  IHDR¨(jû±lbKGDÿÿÿ ½§“—IDATxœíœ{HSïÇßêd•¥jMÃŒiI&QBV¢ fÁ.E£Ð?ú#T,¢Ð.ÿH±?¢û0f‚ˆv¡´°,-‹2‹ÂL eN‡KšÕ2ÝûûG¿†N§ÓN¹>/8°ç<ï÷óÙysöœ s IvŠãxO@ P]#*°kd–;4 ž?>sLpBBBàãã3p'-P«Õ 6±ýóM­V[Æ‘ƒÎ ¿÷‚‰ƒƒÃûÅT`׈€ ìP]#*°kD@v¨À®±z›ÉV>~üˆòòrlß¾]‚é OSS®]»†uëÖÁÛÛ/^ÄÞ½{ÿšßpµ †qõÿòå NŸ>}ûöIê©V«Q__?dŸ¿¿?âãã%õ‰?>ƒÖÔÔàܹsRÌeDT*^¿~ ™L†ÎÎN\¾|yL:‰‰‰VB†«ÍÒßVM)ý>l“ßhhmm…V«…V«…Z­†Z­6·ÛÚÚ$÷‰?>ƒþK4 222øðáØtŠŠŠ°k×®?š‹¯¯ïÿÑhJáÿ·HNN6NLL€v IÖ &“ IIIpuu…§§'Ž9hkkCTTNœ8///xxxàÊ•+سg<<< P(››kÖÉÌÌ„J¥²½cÇh4¨T*ܹs---X¿~=@¯×#::ÙÙÙ˜>}:ª««‘žžÈår¬Zµ Z­½^øøx”••¹¶þþ£Ñjìõë×áçç™L…BÌÌÌý-yûö-BCC1iÒ$ÌŸ?999ÃÎãÇ#Ön RéXÅÚ³x[¹u똚šÊ¯_¿²¬¬ŒnnnÌËË£N§£££#8@“ÉÄ3gÎ=J“ÉÄãÇÓÏÏϬuãÆ žåÍ›7éååźº:vuu166–;wî$I * >|ø===c®­¿ÿh4-ÇvuuQ.—³  €F£‘=¢££#õzý°þ”Ëå$Éîîn* ž:uŠF£‘%%%tuuå“'Oùúô‰»wïæ‚ F:´LHH`BB°còóóÌ«W¯Òh4ލi Xy/I@g̘1àÀ¤¥¥1..Ž:ŽØÝÝM’¬­­¥L&ãÏŸ?I’¯^½â¬Y³löR*•¬¨¨ ÉAÀ¦¦&’daa!½¼¼øîÝ;’¿ Á`0ëx{{³ªªêjëï?M˱F£‘•••æ¾ßÁ«««Ö¿@sss¹téÒIIILII!IšL&Þ½{—k×®e@@³²²ØÖÖ6â{öŒÛ¶mãœ9s¸ÿ~j4š‘¿ ¬T’Ÿx¥R gggs{Ñ¢EÐétæ¶‹‹ €_/ÈårÈd2s[*áååX·n6mÚ„•+WbîܹHNN†Á`“îHµý)r¹•••ˆŽŽ†R©D\\L&Ó¨üPSS___ó–››‹ŽŽ”——#00—.]BJJ ª««‘ššŠ™3gJVCHH²³³QUU…iÓ¦!""6lD[’€¶¶¶hëõzI¿[èv’ÈÊÊB[[òòò`4±qãÆ1éþíÚ ‘––†ôôtÔÖÖâÅ‹˜2eʨü]]]††††ÛÙ³gáìì ¹\ŽÏŸ?£½½½½½’ÍÝ’¾¾>„L&ÃÔ©S%Ñ”$  ¸}û6€_÷çΟ?5kÖŒZ§²²ÅÅÅVÛ¶rìØ1DDD@&“aÙ²eP©Thnnµ ]mÖÐjµX¸p!ÂÂÂàää„ŠŠ tuuÊ?** eeexÿþ=àÛ·oFAABBBPUU…ŒŒ äççÃÏχBSS“d5”––">>+V¬I”——#;;[qËßü±¬A—/_N†‡‡söìÙŒ‰‰aOOy ú›ººº붪ªªkÐääd†„„Xm·urr2kll¤ƒ‚‚I777^¸pÁÜ¿dɆ††òåË—c®Ír j«¦åXFCOOO†‡‡3**Š111T*•ŒÖ¿ÿ”$³²²èêêÊÈÈHz{{sóæÍìëëäÝÜÜ̃200pÄyÚ²ÍËËcxx8óòòÌ×cë"é7ß¿çƒ,øÿ&}}}lmmµÚo4ùøñcÞ»w---úôz=‹‹‹ÙÞÞn“×PµYúFÓrlgg'ïß¿Ï7oÞ$5 KKK‡õ ­VËââbóÅápôööŽ8ƤұP‡ÿušÉÉÉÁÖ­['Äõ:%%%Vûƒ‚‚°xñâqל888@­VcË–-öÿ_=I’ggg¸»»[íï±2žš™ Pwww¬^½Úî5'2âu;]#*°kD@v¨À®Ø5" »FT`×X½*å«pÁXô¨Süý¢`¼êïT °'ÄT`׈€ ìP]ó7¢” IMÞIEND®B`‚bm3.7.0/doc/html/a00109_source.html0000644000175000017500000004455411365042630015015 0ustar tlktlk BitMagic: sample4.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00072.html0000644000175000017500000003402011365042652013423 0ustar tlktlk BitMagic: bm::iterator_deserializer< BV, SerialIterator > Class Template Reference

bm::iterator_deserializer< BV, SerialIterator > Class Template Reference

Iterator to walk forward the serialized stream. More...

#include <bmserial.h>

Public Types

typedef BV bvector_type
typedef SerialIterator serial_iterator_type

Static Public Member Functions

static unsigned deserialize (bvector_type &bv, serial_iterator_type &sit, bm::word_t *temp_block, set_operation op=bm::set_OR)
static void deserialize (bvector_type &bv_target, const bvector_type &bv_mask, serial_iterator_type &sit, bm::word_t *temp_block, set_operation op)
 experimental 3 way deserialization target = mask OPERATION% BLOB

Detailed Description

template<class BV, class SerialIterator>
class bm::iterator_deserializer< BV, SerialIterator >

Iterator to walk forward the serialized stream.

Definition at line 317 of file bmserial.h.


Member Typedef Documentation

template<class BV , class SerialIterator >
typedef BV bm::iterator_deserializer< BV, SerialIterator >::bvector_type

Definition at line 320 of file bmserial.h.

template<class BV , class SerialIterator >
typedef SerialIterator bm::iterator_deserializer< BV, SerialIterator >::serial_iterator_type

Definition at line 321 of file bmserial.h.


Member Function Documentation

template<class BV , class SerialIterator >
void bm::iterator_deserializer< BV, SerialIterator >::deserialize ( bvector_type bv_target,
const bvector_type bv_mask,
serial_iterator_type sit,
bm::word_t temp_block,
set_operation  op 
) [inline, static]

The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00016.html0000644000175000017500000000773011365042651013430 0ustar tlktlk BitMagic: bm::bit_COUNT_A< W > Struct Template Reference

bm::bit_COUNT_A< W > Struct Template Reference

Bit COUNT A functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_A< W >

Bit COUNT A functor.

Definition at line 5165 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_COUNT_A< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5167 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00153.map0000644000175000017500000000045111365042636013237 0ustar tlktlk bm3.7.0/doc/html/a00221.png0000644000175000017500000000354411365042647013252 0ustar tlktlk‰PNG  IHDR›(é?ˆWbKGDÿÿÿ ½§“IDATxœíœHSmÇ¿¾Mš?*f)aà¦ITfÐ0š„¢fB’Ù?ýÓJ Í~ˆ˜D`IÆ¡r +YFJ ä!$5T¶9sº™?"µëùCïÞmgSçñ}žçþÀ]çÜ÷u®ë:ßÝ»ÎÙXŒÕ§í?kãßC0˜Ø‚!òt@¥R ãÆÉ“']öxºAXõ€ÿ\ÜÈŠÿã8ÛØæóÆqœG=±ž!Ll Á`bcC0˜Ø‚ÁÄÆ u—Â÷ïß¡Õjqúôi¸[“““¸ÿ>Š‹‹yÇ-7V_ý/ŽãÐßßïöXll,rrrüz¾µ¼V~YÙ¾}û†šš¸Z6ããã¸víš×qËÕWÿKett&“ &“ Çã8‡mµZý~¾µ¼V~YÙËG©T:^Ÿ={Öü»Zø­g³Ûí8þ.]º„wïÞ¹ÄÓÚÚŠÄÄDˆÅbÄÇÇãõë×^c€gÏžA&“A$!22UUUnó---…D"X,Æ¡C‡`2™xë333㥂¾á‹o5äËŸ¯n+ÅobkkkC`` ~üøW¯^¡²²/_¾ÄÜÜZZZðóçO âÆ(((€D"ÅbAaa!®\¹âð³}ûvìÝ»×­Ý×ׇÜÜ\ܽ{6› qqq¸sçl6›S,ÃÃÃHOOÇÅ‹111ÊÊJäææ¢»»›7ÖÉÉIäççãÖ­[øõë^¼xââbŒŒŒ8ù×h4¨­­…N§Ãèè(BCCQ^^î¶.}}}(**Bbb¢_êüöí[ìÙ³Ož<ñ(<¾žó÷V·C@Çy:ìDcc#mذfggûJJJ(33“†††MMMQOO‰D"š››#"¢öövÚ¼y³Oç¹yó&eee9l»ÝN‘‘‘ôôéS2$‹‰ˆ¨¦¦†är¹ÓÜììlº~ý:o¬ÓÓÓ¤×ëû}ööö:ùW«ÕE_¿~%"¢©©)sŠ«©©‰Ž;FñññT]]MV«Õk~TPPàuÜçÏŸéÔ©S´uëVº|ù2 ¯sáËŸ¯n¾ÂqyÕ¿­lR©{çÎrØÁÁÁ~M"‹!‰¶¯ ..Îa &&ÆeœÉdr,¼»F#o¬b±z½GŽT*Eff&ìv»‹ÿãÇ#;;À¶mÛ T*166ÐjµHHHÀ£GpáÂtuu¡°°7nô9Oo$%%¡®® AJJ ²²²|žï)ou[)~Ûè訓m±XüZ` q¹C[¼ÈÿMhh¨Ksæ I$R(”œœL‰‰‰T__ïÔS•••Qxx8¥¦¦Ò¦M›èܹs^c5 Ar¹œ ¥¥¥‘T*¥ôôt'ÿF£‘¢££i×®]tøða £‡º­Ùl¦²²2JHHðZG_z6•JEr¹œT*•£ïý_øjÈ—?_Ý|…¯gó‹Øùýû7}üøÑ©Éö'‹…ººº¨³³“ZZZhff†bbbH§Ó¹ßßßO†º»»}Žu||œš››©³³“ˆˆ µ¶¶ºÌŸžž¦OŸ>Ñû÷ïixxØkìóóó¾¤(˜¾kÅW7o&¶Õ¦½½ÂÃÃéÇd6›éÞ½{ítgÅX[øÄö·úa÷îݨ­­EEEl6d2šššœî¬ÿ¿ü­ÄÈÈÈXë0Ë€ýĈ!Ll Á`bcC0˜Ø‚ÁÄÆ &6†`°?–a¬ ndÕæñ¡n}}ýêFÃø×áqec0ü ûO]†p0±1ƒ‰!£r˜ç"v7IEND®B`‚bm3.7.0/doc/html/a00190.png0000644000175000017500000000463211365042645013254 0ustar tlktlk‰PNG  IHDR³(µµËsbKGDÿÿÿ ½§“ OIDATxœí›}LS×Ç¿¥… Œ‚8«É ´S2ýc/ XB‰²„e˜²¸¸Ìø‰QÔ½%d‹KÌ$°ABÌÂLœËŒÚð"/uÓ†9tuößÃðGqlåm8°ÀÆýþþ0ÜPJo‹­c6ç“ðÇsÎyÎó<·_nÏ9÷VE’ÚC: P1 ‚!fAР™ÝÐÓÓƒ¶¶¶…ÈE ð™7ºµ¹‰ùܹsØ´iÓ¿’@ð°Ìuná&f¥ÁÁBsôèQ7[±f BÌ‚ AˆY41 ‚!fAÐ Ä,üóÍ›7ñõ×_ •‡3<<Œ’’’yûýõ×_(..ö+¯_ýðkŽÿ øùçŸ:‡Æo1wuu¡²²2¹uêFFF0£G˹¾…Ì- b–$ Û·o‡N§Ã’%K°oß>Ààà L&ÊÊʰlÙ2ÄÅÅ᫯¾Â»ï¾‹¸¸8èõz˜ÍfyžÒÒRlÞ¼Ù£í)ÎüÜÜ\@~~>òóóa³ÙýfsæÌ¤¦¦B«ÕbÕªUhhhû¾ÿþ{$''#,, kÖ¬A{{»›?IìÞ½………>=AµX,0 ˆˆˆÀ;#÷Þ{ß}÷àÊ•+HKKâE‹°bÅ =zÔc}J;v F£z½¥¥¥rŸÙlFBBÂÃÃñú믻ˆÐ“ŸÍfömÛ°cÇèt:,]ºeeesóT‡ÃáÀºuëðÍ7ß &&^kñ gqäÈÎÑì‹ÅB•JÅ]»vqllŒ6›ÑÑѬ®®f__CBBøÑGQ’$~ñÅÀââbJ’Ä’’Fy®††VTTÌi+Åéîîfdd$Irxx˜z½žÍÍÍœœœTô³ÛíÔjµ$ÉßÿQQQ÷îÝËøøxJ’Äææf&''S’$033“£££^¯Û­[·øÄO°±±‘N§“Ÿ~ú)Õj5>ÌÑÑQêõzîß¿Ÿããã<}ú4u:úé'·ú”¸wïµZ-ëêê8>>γgÏ2$$„‡ƒ/^¤V«emm-N'ËËË €åååŠ~‹…†………ã¹sçÍo¿ýÖ-7¥:ìv;ÃÃÙ——Ç––NLLø¤7}þ/ b^¼x±Ë…-**b^^ûúú@þp¯_¿NFÿÿþ›$yþüy>ýôÓ~Ç™)f’\¾|9/\¸àÕo¦˜+++™‘‘áó7Þà'Ÿ|ÂÏ>ûŒ¹¹¹rûää$‹‹‹966Æææf&%%±  €±±±> ™$÷îÝË 6ȶ$IÔëõ<|ø0Íf3׬Yã2~ûöí,,,t«O‰ññqvttÈöt½7nÜàûï¿Ï7ß|Óe|JJ ËËËý, u:‹øŠŠŠ˜ŸŸï–›Rv»x÷î]¯uÌDIÌYf „††ÊöêÕ«Ñ××'Û‘‘‘•J­V F#ÛŒã_oo/V¬XáÒ¶råJØívܹsÇ¥/44|ð"""øí·ßÿüósÚJqf¯™Ÿ{î9¦¥¥±½½]Ñoæš™$?þøcÆÄÄ0;;›O=õ \r‰eVVu:÷ïßO’òpš®®..Z´ˆ---^¯Ý–-[G“ÉÄ_|‘©©©¬ªª"I~þùçÔétÌÊÊâòå˹qãFNMM¹Õ§DOO—,YÂŒŒ šL&æääÐ`0ðµ×^£$IÜ´icbbøÊ+¯ð™gžaNNËËËý, ãã㙜œÌôôtêõzfffÒétΙ›§:ìv;Õjµ×k4›GºœÆétò‡~pÙ8< æŠ355ÅÙv8´Z­šw~ÝÝÝ´Z­¼víš[ßõë×iµZÙÓÓãw‡ƒ¼té›››911ÁÄÄD¶¶¶Êcz{{iµZyõêU7ßÙõybdd„MMM¼téÉ?sæŒÜùòe655qddÄ'?‹Åµk×rbb‚gÏže[[%IRÌÍSƒ’˜U¤ëèô›ü¿4ñ‹¾¾>œ>}Úcÿ?ÿüƒ;w¢¦¦III¨­­Eii)nÞ¼é²Yõ'FJJ RSSç»'NœÀž={æo wfÁc…Ò9(ÞÍ€ yÑH „˜A„³ hb BÌ‚ AˆY4x|hè7š‚G›˜_~ùeTUU-D._¸=SÄ@Að Ä,„˜AÃÿ®q¢Wß2eIEND®B`‚bm3.7.0/doc/html/a00248.md50000644000175000017500000000004011365042651013143 0ustar tlktlkb74d3de9d2ec428c16f51d9c13bf4621bm3.7.0/doc/html/a00091_source.html0000644000175000017500000006631011365042627015015 0ustar tlktlk BitMagic: bmconst.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00198.png0000644000175000017500000000774211365042645013271 0ustar tlktlk‰PNG  IHDR3(ÊR¤sbKGDÿÿÿ ½§“—IDATxœíÝ{LTgÞð×)R‡ñ-P‘®Ö h±¶Š•5hZlµ5VI‡Øt³­«¬º^Ú¸´öFR£¥&Ö·!­¯)#»¼†?¤µÞ^êŠR×kÅ[gTꈢ u™ïþA8Ë 3gø~’“0g†óüÎó<|9OÎA@ˆˆˆˆˆˆüKe ·+ """""z\Ì‘_âb†ˆˆˆˆˆüR°ý£Ñ(åååÞ¨…ˆìÄÅÅIrr²·Ëx åååb4½]QÅ| ¢ÞfΜ9wÂN^^D„7n>°éõzûQ¿¡×ë½ÞܸõäùÀ·Þ¶9ðs§;3íÀäŒÈ«233½]B·éõzÉËËóvD=óˆzƒÁà4÷ø73DDDDDä—¸˜!"""""¿ÄÅ ù%.fˆˆˆˆˆÈ/q1CDDDDD~‰‹"""""òKÝ^Ìœ?^¶nÝêR|£o+++“ììl1™L6ûdõêÕ¾öuuu²fÍo—ñ@zËÜòuÌÏò×,!r„ùàẎGcçÎRQQáí2z¼n/fΞ=+¹¹¹ž¨Å'ÚéèÝwß•K—.=Ò6³²²äã?–Í›7Ûì¿sçŽ|òÉ'¾öwîܱ©ùaõÝÃ8®7æÖÃb67ÈæÍÿïí2³Ä³ü5KzoŒ»æƒï´ÓóÁ·ug| äСC®Èwy+óø˜™ŠÒÒR¹sçÎ#kÏh4ÊÁƒeùòå²}ûöGÖ®'ÄÇÇ˯¿þª¼~X}÷¨ÇÄÔ×[äŸÿ¬Ù³ÿGÆŒY%}Täí’ȳ¤wò…¼b>ø>æƒoó…Ÿcá­¾òÈbÆjµÊ¢E‹D«ÕJTT”|ñÅ""róæM™:uª|õÕW#‘‘‘²eËY¾|¹DFFJtt´äçç+ÇY»v­¼ýöÛN_;kgÁ‚²qãFås ò /ÈåË—EDäĉ’’’"=ö˜ 6L ƒòÙüQ%44TÆŽ+•••""’‘‘!f³Y222¤¬¬LDDöïß/III¢ÑhdĈ²sçN1›ÍòòË/˶mÛD§ÓÉéÓ§öSSS“j? yñÅeÅŠrñâE¥WœÕ¥v~]­MD}|®_¿.3fÌÇ}çl õÝöíÛeèС,ÑÑѲvíZ§Çís6·DÄi=""~ø¡DFFŠF£‘)S¦È•+W”÷Ôæ]wY,-RRò‹üùÏ›eÔ¨eÙ²|)/¿à±ã{ ³„Y"⼟ÛçA^^ž 2DÂÃÃåwÞ‘ÖÖV¹|ù²L™2ŦŒŒ )//ïòüñõ¼r…ùÀ|Pãïù Ö–³ÝÉG¹Ò•ë‘üü|‰—°°0yã7ܾ°gæu/óvòòòà`·S%%%ÀÒ¥KÑØØˆ²²2DDD   555 ÄG}«ÕŠo¾ù"‚Õ«WÃjµbÍš5:t¨r¬;wbýúõ_«µ³aÃŒ7Nù¾mÛ¶a̘1€»wï"::6l€ÅbÁž={ ÕjqðàA˜L&ôíÛEEEøã?ÁƒÃjµ¢®®ÑÑÑØ·oš››ñûï¿£oß¾øöÛoa±XP\\Œ>}úàìÙ³0™L ìY³pèÐ!455ÙôÑ… °lÙ2 >\µ/G…ÜÜ\À´iÓ°téRå=“ÉFÓékWu9;?{………xþùç±uëVX,‡õ©Ï¥K—úÎÕtì»ÚÚZh4Áb±àÀ „Ùlöè˜t¤6·êëëÖSZZŠ˜˜TWW£¾¾3gÎÄ‚ \Î;wéõzèõzåuKK+öî=ƒ¿ýí;üéOï#&æï4h)¢£—tÚ|}ý®0K˜%®ú¹¦¦¡¡¡˜?>šššpñâEèt:üðÃ8sæ  `ÓNRRvïÞÝ¥ùãëyÕŽùÀ|èù Ö–Z®òÁY®tåzæ—_~F£Aaa!îÝ»‡uëÖAD°nÝ:Õñ`æ¹—y*듟=²˜éׯš››•}YYY˜5kjjj "¸{÷.àܹsFKK àØ±cxâ‰'ºÝŽÙlFHH~ûí7@zzº2ñóóó1vìX›c-Z´K–,Á—_~‰3f(û›››±zõj466bccQUUÈÍÍEjjªÍqÞ|óM|úé§0™L\½zUyÏjµb×®]xõÕW1bÄäääàæÍ›NÏïøñã Å­[·›6mBll,Z[[8µº\Ÿ½#GŽ`Þ¼yxê©§°råJF§õÚ븘lûNm ìûÎb±àèÑ£ÊçÚϵºººÓq»:&ΨÍ-µzŠ‹‹ƒ“'Oh „ºº:—çì®ö_öñüFŽ\‰èè¿#.ÎñJO¸Xa–0KÔú¹}\»vMy/55.±»;|=¯Ú1˜@ï˵¶Ôjt'å àþõÌûï¿·ÞzËæ½Ñ£G»\Ì0óÜ£¶˜ îÞ}6C† ‘åõ¨Q£dÏž=Êëððp F#ÁÁÁÊkO´)iiiRXX(óæÍ“²²2ùî»ïD¤íÖâÙ³g%>>^ù¾{÷îÉôéÓåþýû2lØ0eHHˆ|ðÁÛ¾råŠÍgED†®üK #""?ýô“ÌŸ?_dÉ’%’––æò\óòò€Œ7NDÚnÅ^½zU8Ðé6¢»uµß.tçüDD’““%99YjkkeÓ¦M2yòdIJJ’;v¨ÖîŠÚˆØöF£‘£GÊÊ•+åüùóÒ¿±Z­Û•1qÅÙÜR«çµ×^“½{÷ÊĉE§ÓÉ´iÓ$++Kt:ËsvåÌ™kráB¸á²oßz ’––ViiËïÿë_ÿ×­v¦S§"$1±kÏÎ2K˜%îüìDGG+_weìÝ™?þẆ6̇ޙÎÚrÕw®¸“+jãÜÒÒ"‰‰‰6ŸOHHpÙ.3¯û<²˜©­­µym6›¥ÿþž8´ÛíèõzÉÍÍ•°°0™>}º²_«ÕÊK/½$¥¥¥Ê÷Ý»wOä³Ï>³ÙlsÌ;vHZZšDDDØì×jµròäI›}7oÞT>×qb„„„ˆF£‘7nÈ­[·äþýû6Áh€lß¾]>ÿüsyýõוý .ƒÁ 0ju…††º}~µ¶¶ –ÇÜéçÜ¥6µµµ6}W\\,YYYRXX('N”   ÑétNëâln©Õ@rrr$''GŽ;&ëׯ—Ù³g˱cÇTÏ™œc–0KÔúùöíÛn£]ccc—>ïª}_ɫފùÀ|èÛ·¯Ó¶\õ=OçÊ+:Õf?—ºzLfž›ºpÇ¡’’ˆJJJõõõHHHÀ† ”Û\íª««mEªªª²¹õ[YY‰ÒÒR‡¯ÕÚ€††„‡‡#!!ÁæçÎCŸ>}púôi@cc#FŽ ƒÁ€½{÷"22ׯ_Ðvë3,, lo—UUU!<<.\Ðöühdd$víÚ“É„   N}SVV†¹sç"..«V­Â•+Wöáþýûmnû¶Û²e úõ뇦¦&§·~Õêru~ööíÛ‡¹sçâé§ŸFvv6Ìf³Íûjã£ö˜™ÚØ÷Ý×_I“&)¯:„€€‡·0dLQ›[jõdgg#%%Eyïûï¿Wæ³Ú9»«7>FÂ,a–¨õ³ý<€I“&¡  çÏŸGpp°òˆÍ‘#G "6\´S›?¾žWí˜̇v½)ÔÚR«±+ùü7WìÇGmœ‹ŠŠ¥<vüøq„„„¸|ÌŒ™çž‡þ73&LÀ3Ï<ƒÔÔT<ùä“HOOGsss—fñâÅHNNvøZ­vsçÎÅ Aƒ”g?Ûåää@«Õ"-- ±±±˜3gŽò™Å‹càÀHKKƒV«U ž{î9¤¤¤ ²²°jÕ*èt:L›6  ÀÂ… Àå \»v «V­Bbb¢Ã÷ß{ï=Ìœ9³ÓþÛ·oC£Ñ ¸¸ØiÀ¨Õåêü:*((PžÃl¦ÒžÚøØ/fìûÎÙØ÷ÑhDTTRSS1uêT¤§§cÈ!JÿxjL:R›[jõ˜L&ÄÅÅaôèÑHKKCDD6nܨWmÞ¹£7þ/³„Y8ïgµ_ì­­­HIIÁàÁƒ1sæL¤¤¤ %%¥Ë¿ØÕÚ÷…¼jÇ|`>Øë-ù Ö–³»’€íbÆÝë«ÕŠÌÌLèt:Lž<qqqHOOw¹˜Q;&3ï¿Ô3l°5 ’™™)v»]²X,røða‰ˆˆ±cÇvñþÐÃoçêÕ«rêÔ)‰íôLcuuµ\ºtIFŽ)ƒ Rö߸qCªªªdܸqÒ¯_?i{¶ðܹsßéY@WZ[[%((¨Kßã.µºœŸ'k³Z­RWW' Ç}§6Õ××KEE…DEEɳÏ>+&“I.^¼(“&Mòø˜täln©ÕÓÔÔ$b±X$))I¢¢¢lŽéî9;’™™)"mÏ8w®µEvï>%;v•={Î(ϬZ­m?·×®­ëR[ƒZýj˜%®õä,i÷ ?;÷ïß—#GŽˆˆÈ„ ”çÃfûÞÊ+æóÁ™Þjm9«ñAó¡«×3'Nœë×¯ËøñãE«Õº}NÌ>€¿¿?|||pòäI¬[·>>>ðóóCNNŽež}ûöaéÒ¥vûgÏžEhh(d2üüü°oß¾NŽyóføøø@.—cÚ´iÐëõ–±gÏžaòäÉpssCXXΜ9HNN†Á`@rr2 íÎýóçÏNÅÖ‘yzSÞšØ[SÍݹs‘‘‘Ë刈ˆÀ¥K—,c·nÝ‚R©DŸ>}…'OžØ\Ok×®EFF$ùzak÷þ©T*{ÃV®\¹B'''®Y³†ß¿gaa!===©V«YSSCgggnÙ²…f³™‡&fffÒl6sïÞ½ µÌuéÒ%ëêêèççÇ‚‚644ØÌûæÍ®]»–ááámư|ùr._¾¼Õsrss9vìXfggÓd2µxNoÈÛßZ[SÇùþý{zxxðÔ©S4™LÌÏÏgß¾}YZZJNGæååñÇܹs'ƒ‚‚h6›YPP@¥RI³ÙÌÔÔTÆÆÆòÛ·om>÷¿¥¤¤´xïŸdEåååe•¨M›6qîܹ¬©©!KÀeee”ÉdüõëIòéÓ§4hP»þ“ÉÄ’’K¿)¹ååå-Žüü|úûûóùóç$ÿ,ˆºº:’dNN£¢¢¬ÎOKKcFFI2 €Æ2f6›yíÚ5Κ5‹ÌÊÊ¢Ñhl3†öI>|øK–,á!C¸qãFVUUµyM“îœ7{Z[SÇyôèQÆÄÄX]»`ÁîØ±ƒû÷ïçœ9s,ǘ™™Éïß¿³  €#FŒ`jj*½½½;\P¤ý¢’ìã_HH\]]-ý‘#G¢¦¦ÆÒwww899A.—C&“Yúí%—ËQRR‚éÓ§#$$sçÎ…Ùlv8æÙ³gcÁ‚˜4i‚‚‚žžŽºº:€V«Eii)‚ƒƒ--''Ÿ?¶™çÞ½{P*•8qâ222ðòåK¬Y³ p8¶æ¢££qúôih4xxx`êÔ©˜7o^»®í®ykK[k ôz=ÂÂÂ¬Ž…‡‡C§ÓA«ÕZ¹ººbýúõèÛ·/àåË—x÷îàÊ•+ŽÏÉŠª¶¶Öªo0$]TŸŸM›6aóæÍ(++ÃãÇ- rIdeeÁh4B­VÃd2aþüù…B)S¦@«ÕZµ#GŽØÌãêê ¹\Ž?âÓ§Oøýû·Ã1µ¥±±$!“ÉЯ_¿v]Ó]óÖ–ö¬)…BasžÑh„§§'<<>………xõêàÇ;v,òòòlæ‰ŽŽ†F£Á®]»››‹ÐÐPlÛ¶ ÕÕÕÇÖÜ;wœœŒ‰'‚$îÝ»‡Ó§O[Æ{bÞÚÒž5•€›7o¢¢¢ðáÃäææ">> ¸|ù2 àÑ£GX¼x1\\\üùô$“ɰlÙ2DDD`Æ Ž%¤9{ŸÑÁ=Õ„ 8lØ0ÆÄÄpðàÁLLLdCCƒeOÕ¤¼¼œîîî–¾F£±ÚS¥§§3::ºÅ~UU}}}Ãøøx&&&2$$„IIIí t:9jÔ(ÆÅÅÑÓÓ“Ç·ŒgeeQ¡P0..Ž\¸p!I’cÆŒáäÉ“ùäÉ›yß½{Ç­[·R©T¶C{öTjµš111T«Õ–½hs½!okmM5sëÖ­ìß¿?8pà@¦¦¦ZåÁÛÛ›qqqT(C‡íà3µ¯éKŠ*•Ê긤EÕÝÔÔÔàöíÛvÇG…ÈÈÈ.Œ¨g芼õ†×Æ^Qõê;*\]]áíímw¼3›õÞ¬+òÖ›_›^]TÞÞÞ˜1cÆ¿£Ç銼õæ×F|õC$&ŠJ$&ŠJ$&ŠJ$&ŠJ$&ŠJ$&ŠJ¤fï¾&tƒü]4Ѻ{ëÐPpþüy{C‚ üW`` Í1»÷þ ‚à±§‰‰¢‰‰¢‰ý„ÀÓ´î³ý^IEND®B`‚bm3.7.0/doc/html/a00155.md50000644000175000017500000000004011365042636013143 0ustar tlktlk81a5228fb48ca29b4803c6a468862ac5bm3.7.0/doc/html/a00229.map0000644000175000017500000000021111365042647013237 0ustar tlktlk bm3.7.0/doc/html/a00139.png0000644000175000017500000002535611365042633013262 0ustar tlktlk‰PNG  IHDR E˜JsbKGDÿÿÿ ½§“ IDATxœíÝy\Tõþ?ð×l¬²‰`@ Š’ˆˆB*¹% î (ˆ¢¹”™¥¹VÞ¾Z7ÍR+õÞ2·LÓÑIÁ-)Eí¢.`*‚Ëd‰M’‘e>¿?ø1·‰Å3:3g–÷óñðñpÎ9ó9ï9s|yÎgÎùcŒB8ò]!DP`B8£À „p&æ»C“ääd¾ËÐ;aaa|—@8 ÀP³ .`úôé|—¡w¨ï]?P`hȹsçø.A/ÄÇÇcíÚµ|—A8¢> Bg„Î(0!œQ`B8£À „pFAጃGyyyˆ‹‹SK[>DTT233ÕÒÞ“Èd2DFFje]DwP`ð(;;ÇŽSK[Ÿ}öîÝ»‘H¤–öž¤ºº»wïÖʺˆî À0EEE E§Nø.…0 ž1Æðõ×_cìØ± Qæ———cùòåJ¥ Epp0N:…mÛ¶!88“'OÆÙ³g6l@aa!Ö­[‡ääd`éÒ¥JëY½z5ÒÓÓíž9s5jÖ¯_¹\¸zõ*fÏž   Ì›7·oßn³þ“'O"<<£F† èoGÁ³Û·oC$áÈ‘#X³f 8€_ýõõõHMMEee%¤R)æÌ™ƒÏ?ÿ¶¶¶ˆ‰‰AXX˜â”`áÂ…pppÀ¢E‹àëë‹ÚÚZÜ¿_i=999¨®®F}}=®_¿ŽßÿûöíÞ={pñâE¤¤¤ ¸¸}ôæÎ‹'N`È!øç?ÿÙjÈårddd 22»wïFBB®]»¦ñmFøCÁ³víÚaÞ¼y055…··7BBB ñècÚ´iðóóƒH$”)S¯«««–––°´´„D"yâ:ëëë1{ölˆÅb899¡K—.¨ªªÂ¹sçлwo 4¦¦¦˜:u*&NœˆÚÚÚVÛzýõ×!‹áìì 777TUU©gÃDÁ3gggˆÅÿ»°sçÎ())Q¼633H$E§¦@ x¦õÚÛÛ+þÞÔVAAžþyÅt±XŒiÓ¦ÁÔÔ´Å6„B!lmm›µC ÏÊÊÊ”^—––ÂÊÊJíë‘ÉdO\ÆÂ•••JÓè¨(P`𬠠IIIª³gφ»»;2220þ|˜››¶lÙ‚±cÇ¢sçÎO]ÑozÌ€zEEEaúôé*  S[[‹´´4´k×ݺuSK ¸uë€ÆPRå‚®ÜÜ\ S§NpttTK=­i@‡vCý@G:ÀÄÄ}úôQk›"‘ÞÞÞOõÞçŸ^©ó“&Ô‡AጃÂ!„3 Bg„Î(0!œQ`B8£À „pFAጮôÔ€€µ¶'ˆae5É`ì±Êï73놺º44T¨°NSXYõCEE«WyÄðн$j–äädµ¶Y[Û€o¿½¼¼*,Zä…çž³P¹Å‹1s¦üü:p~O~~5þýï›psk‡7Þð„H¤¹ñ.ÂÂÂ4Ö6Q WSS‹Y³¾CZZz ^^.OÕŽ³óR|óÍ« ñUé}×®ecêÔmð÷ïŠo¿ ‰D;£’ÝD}:L]añ,z÷î„ÈÈ7‘˜xo¿ýäZ¯è ¥ aÑÄÏÏ ûö½³gÓ±`Á~ #F¡ƒt),šøû»cïÞ×qút–/†\Ng²ÆˆCÇèbX44È»vÍALL Þ{ï zc„(0tˆ.‡E“€€îصk~üñ2V­:B¡ad(0t„>„E“  /lÝú*~ø!|”ïrˆQ`è} ‹&cÇú`Ë–ؽ;_|qŠïrˆ–Еž<Óǰh2aBTU=ƻµ9Þ|s(ß% £ÀàQcXìBZÚzM¦MóGY™ kÖƒ9¦NíÏwIDƒ(0xbaÑdþü¡(/¯Á{ïB»vf7·†P`ðÀ¢ÉûïFYY ,øíÚ™bèÐî|—D4€:=µÌâÉÚµ!˜0¡^}®\¡G*" -2ä°ŸÞþ¯MÃàÁ˜1c'nÝúƒï’ˆšQ`hISXܺe˜aÑD$âÛog£W¯¾ ™™Å|—DÔˆC þnX4‘HDøþû¹puµGhèVäç—ò]Q 3¶°hbaa‚ýûçÁÖÖ¡¡[QRRÉwID (04ÈX≭­¢¢æƒ1†Y³v¡¦¦–ï’È3¢ÀÐc‹&;Z#*êMÂË6nüMã¹Èå ‡_Á Aë–Fa¡ D"!¶l™//g|õÕi0Æ/‹ðÉ>r¹òH]õõ 8z4eeÕ@Hˆo›‡ÂD»:v´Æ¿þ5 ?ÿ¼¾¾n›0FŸÚ`tÿ"6nŒSüÕtˆÛ»w'DE½‰3gÞèQÞJ;"Ñ-={º 6öìÚ5Îζÿÿ¨hhcÏžzH’†U`ܺõΞMW]¼ü²;bbÞÁñã‹1t(\­OFöFbâJ¬Z5¦`¬ñÊϤ¤ÿò]šAkvixaa!ÒÓÓù¨EãÖ¬iüù­OŸŽ˜<¹;ºt±EMM6ΟÏVûº†ªö6 ÍôéÓõÌí…æ°²ò‡……&LX‰’’Cj¨ŽˆŒŒä»ŒVµz/‰———6ëиœœGpww§ŸNB×®[Oaa!>¤°¹’H$jûRPPãÇÛ#""––úw›ÔôéÓù.á‰ZݪšûGÅ{ûøö[¯G.—S`¨ ,, aaajkïw5ÑÇ_¶bccù.ቌ¦ãIiáa¡/Œ&0!ÏŽƒÂ!„3 BgQUU…Ï>ûŒï2H îÝ»‡ï¿ÿ^«ë|ôè>ÿüs@EEÖ¯_ßârÆ´ßP`üEEE>úè#¾Ë -ÈÈÈÀöíÛ5¾ž¹sç"33PVV†ï¾ûNñ÷?þ¸Å÷Ó~CAÈ_ÄÅÅ¡¬¬ àææ†Û·oó\‘nyæÀ())A`` 6mÚggg888`÷îÝx÷Ýwáàà'''DGG+–¿qã333xxx(. VµóçÏÃÇǦ¦¦èÞ½;Ž= (**ÂÈ‘#±oß>ØÚÚ"""7nT¼¯¸¸/½ôJKK[ýL»ví‚««+,--1gΜVGå"Ú%—˱hÑ"X[[ÃÑÑëÖ­ Ú¾“••…€€¥vÃÃÑœœŒððp!<< (,,Äøñã9×g ûÍ3F]]Î;‡ÒÒRäååaÍš5xýõ×áàà€¢¢",[¶ ~ø!€Æs½‘#G"""eeeؾ};Þzë-$&&ªÔNaa!&L˜€¥K—¢¼¼6l@DDnß¾ÚÚZ$$$ 66§NBhh(vîÜ©¨÷àÁƒ°µµ…­­m‹Ÿ§¡¡—/_ÆÝ»wqýúuÄÄÄà×_éùºàÊ•+H$(((À‘#G°aÃüøã*í;2™ 7nÜPj÷öíÛ¨¨¨ÀŽ;СCìØ±þþþ¨©©Á¹sç8Õf4û û›‚‚vîܹ¿OnU~~>À*++cŒÝ¹s‡‰ÅbVWWÇc,%%…uìØ‘1ÆXtt4óõõUzÿ¢E‹Ø’%KTjgûöílÈ!J턆†²Õ«W³œœ€ååå1Æ{üø1³µµeׯ_gŒ1æïïÏöîÝÛæg)**RL0`‹‰‰á¼=TÝ~Úâä´„9r•ï2”DDD°ˆˆNË?~œÙÙÙ±ÚÚZÅ´•+W²•öôôtfoo¯Ô¶;}ú4cŒ1–ššÊc,33“YZZ2ÆËÉÉa¦¦¦-Ö¦Žý†1Õ¶_Ôv‡Ž¥¥%€Æ¡ÕLMM!‹¯›dee!##nnnŠi5553fŒJíäææÂÃCù¾_|999GÎrvv˜˜˜`âĉøñÇaaa›7obòäÉ­~‘H¤t ¡;ÜÝÝ!‘H¯{öì‰øøxÅk.ûަË~£Õ[ú¬­­1xð`ÄÅýoPÝšš‚6ûZjçæMåçm–””ÀÆÆ@ó/kÊ”)xï½÷ ‰¢Ø±ˆ~ùûM}EEEhß¾ý3·[UECûq¥Õ_I‘ o£ºº~~~ˆ‰‰Q©   œ>}÷ï7Ž]XXˆÃ‡#00°Õåóóóñõ×_cæÌ™Jóbcc›…ÑMYYY8qâ(úþztÊ…D"AYYþüóO@rr2îÝ»§r-ƺßh50ºuë†O>ùþþþ „‡‡zöì‰ððp•ÚéÝ»7–/_???Œ1^^^ ŨQ£Z\^"‘ 88fff6l˜Ò¼%K–èÅmÅð÷÷DzeËðÊ+¯ÀÃî®®˜7ožJmtîÜýû÷‡¯¯/&NœˆåË—càÀŠùŽŽŽX¸p!®^½Úf;ƺßS±iÄ-MŽ•——‡´´4¸¸¸<Ó@=YYY¸sçÜÜÜšõiüÝœ9sбcÇV¯ÖSml¿§áì¼ß|ó*BB|ù.E¡iÀUБÉdHJJ‚ |}Ÿî³Ô××ã·ß~ÐBM}@ãÏî©©©èÛ·/lllðèÑ#ØÛÛ?ÕzTõ4ÛCÛx–ÈÅÅ..Ïþc777¥Ô–ãâÅ‹J¥HIIyæu~™™™5»ŽBUb±ƒ jqžƒƒFŒ¡x­­°Ð¥gff&>ýôSlÚ´é‰G!„¶éßÀ‡*êׯ._¾Ìw„ƒ? „¨!„3 Bg„Î(0!œQ`B8£À „pÖêuiiiÚ¬Ã`ó]‚^‰ŠŠB]]ZÚ*/7µu­ZÚbL€†@,fO^XM¤R)"""´¶¾§Ñ,0ÌÌÌ î¹ªÚDÛŽ»þýû«-,òóÛá¿ÿµO1¬¬ž=4nÞì ‹Z¸»—©¡:nÂÂÂп­­ï©ð=‚Ñ]qK]öïOdÎÎKÙ×_ŸQ[›ß|Ï^|ñVSSûä…õa½vðà%¼ÿ¾Ë–ÄÂ…ÃÕÖnXX_ÔÔÔâ§Ÿ®«­MC@AôVLL Þ}÷ Þyg8–/©Ö¶¬ä…ÈÈ$µ¶«ï(0ˆ^:~ü-ŠÄܹCðŒÕÈ:¦MóÇo¿ÝÇýûÔ‘Ý„ƒèS§n`áÂý˜={þùω[O@@w89ÙàÀd­CßP`½ŸŽùó÷bêÔþX³&X£ë ˜6­?º„ºº®K_P`½ñ믷ñúë»1yòKX¿>T+Cù‡‡÷GII%âãoi|]ú€ƒè…ß~û/^{m7Æï/¾˜¢µç~<ÿ¼üýÝKÃ;D\¿žƒÙ³w!  ;þõ¯i‰´»Ûûâôé[¨¬|¬Õõê" ¢ÓîÝ+Âôé;Ñ»·+¶m›©õ°€1cz¡¾¾§OÓíDgåæ>Bxø6¸¹ÙcÏž× ‘ˆx©£}{K âA§% À :ª¸¸S¦l…­­9"#çÃÜÜ„×z&NôÅùó(-­æµ¾Q`S^.ÃÔ©Û‡½ kk3ž+Fò†P(0úKÅ)0ˆN©©©EDÄv”–Ö@*}ööíø. Ю)‚‚¼Œþ´„ƒèŒººÌšõ<(Á¡CoÁÅÅŽï’”L˜ÐIIÿEQQߥð†ƒè„†9æÏß‹ë׳õ&ÜÝù.©™  /˜›Kpòä5¾Ká ác Ë—GãüùÛØ»÷ x{?ÏwI-25#0Ð 'NüÎw)¼¡À ¼[·î$bbRðí·³Ñ¿¾ËiÓØ±½péR&Š‹ó´„ƒðjÇŽóøæ›³Ø¼y† ó仜'6̦¦bœ:uƒïRxAAxsäÈU¬Ys |0“&ùñ]'ææ&ðÄÉ“ÆyZBAxqáÂ],]z  SëÐzÚ0~¼’’îáÏ?«ø.Eë(0ˆÖ¥¤<ÀìÙ»0~|o|ðfFËÒ¤áÃ{@$â—_nò]ŠÖQ`­ÊÊzˆY³v¡_¿.ؼyšÖnSW'KKSxâøqãûy•ƒhMaa9""vÀÕÕß}7‡·›ÉÔa̘^¸pá.ÊËkø.E«(0ˆV”—˱°wï\Þo&{V#Fô„@ @\œq–P`««kÀܹ»QZZƒæëÌý!ÏÂÚÚ C†xÝÍhD£äX¸p?®_ÏÁþýóàêjÏwIj3v¬ΟÏ@E…ŒïR´†ƒhÔªUGw»v½OO'¾ËQ«‘#{‚1fTS`Ù²%û÷'açÎÙ4¨ß娭­ èjT÷–P`Ø·/ëÖÄÚµ“0rdO¾Ëј±c}pöl:ª«Ÿý‰ñú€ƒ¨Ý/¿ÜÄÊ•‡±xqfÍÈw95z´7êêŒæ´„ƒ¨Õ•+™xë­0cÆËxÿýÑ|—£qööíðòËî8y²ù¯%r9ã¡"Í¢À *‘Ëjkë[œ—žž3vbð`¬];IË•ñgÌÄÇß‚LV(*ªÀ¦M?ÃÇç#Å4C!`Œ^ ¹àà¯qéÒ}N˦¦~ŒŽm8·ŸŽÍ›Æþýó`kk¡˜žŸ_Šqãþ 77{ìß?Oï/ÌREaa9/ŽBXØKøé§øå—›hhÒÒÖÂÎÎ’ç Õ‡Ž0 PHˆ/§å:u²W),€Æñ+RR`ôèMÈÎ.””Tbúô°µ5Çž=ú§* Ëqðà%ܽ[ˆwÞ‰ÂéÓÿ ×Ja€Æï ‘¨í›ºD"¡Ê·•çç—")é. /¯£Go•+Y˜5kÊÊj°ÿ 誖ºõP(ÀŽ3áåå¢t (PUEAôȤI¾Šì‰'öQi,Íøø[øóOåÎN±X‰D„… ‡ã·ß>ÄÔ©ýŸøk¡377Adä›èØÑZõa=óòËî°³küù´®®AåíÝ{Aq=‡X,„@ À˜1½˜¸+VŒ¥¥éZ0ööí •¾ KK…B0F×a=# }V*=»47÷Ο¿†9ÀËËÇŽ-Æöí3áâb§©’õš›[DF¾ ±XˆÚÚzƒëà›Ï4ìÂ… øê«¯x­¡¢Â¿ÿî€öíeèÑ£„óûnß¶Cq±$9ºt)…ƒƒú†Ô?tèÚÚjòÕW_áÂ… jo÷i””˜!=ÝIú÷/ໜ§²hÑ" 4HiahXvv6¤R)¯5XYÕÂ̬:•s~cTT˜ÀÉ© }û¨-,¤R©Æ¶Grr2ïÛº‰½½ nnå°²ÒÏS©TŠìììfÓÅ<Ôb”4ñ?ª*¾¢ÒÏ©V¢¡AŽŽ­ÕZGTT¦OŸ®Ö6ÿ*""‘‘‘k_U'OþޱcU»gG´v1†‘PõÚ‹ôÿÙ!º@â-tJBጃÂ!„3 Bg:äÞ½{øþûï5ÒöÑ£GqéÒ¥'.———‡õë×ãæÍæO%¯ªªÂgŸ}¦‰òx¡ÉíÍ'M~O:$##Û·o×HÛR©‰‰‰O\næÌ™¸víÄâæ? UTTà£>ÒDy¼ÐäöÖ´¹sç"33³Åyšüž(0ˆ’ììl,Y²Ý»wç»Ò†¸¸8”••i}½:F.—cÑ¢E°¶¶†££#Ö­[())A`` 6mÚggg888`÷îÝx÷Ýwáàà'''DGG+Ú‰ŽŽ†››ÌÍͬ´sݸq„™™<<<˜3g²³³1sæLüôÓO­Ö¸k×.¸ººÂÒÒsæÌ\ÞúÀ:ºN]ÛûÌ™3ðòò‚‰‰ |}}qåÊżóçÏÃÇǦ¦¦èÞ½;Ž=ª´ŽÈÈH¸»»ÃÒÒ³gÏV z´jÕ*888ÀÔÔÈÍÍ„‡‡£¨¨áááHHHhõ³iä{bD£"##×Í|üøq&زeËXUUKHH`666L*•²üü|& Ù‡~Èär9Ûºu+ÀÖ¯_Ïär9ûüóÏY×®]cŒ]»v™šš²Ã‡³šš¶yóf€mÞ¼™UVV2'''¶eË&“ÉX||<³¶¶f/^d¥¥¥¬sçÎ,..ŽÉd²fõåçç3lÞ¼yìñãÇìÞ½{ÌÆÆ†={V#ÛCU,""‚óòêÚÞ999ÌÊÊŠÅÄİêêj¶víZæêêÊär9+((`VVVlÏž=L&“±ØØXfaaÁ222X~~>311QlÏû÷ï3[[[öË/¿°¸¸8æììÌîÞ½ËÊËËÙ„ ØüùócŒ=zôˆ999±sçαÚÚÚfŸKßÙ|:çÈSQ50ììì”v‚•+W²ÅNPYYÉcìÎ;L,³ºº:Æc)))¬cÇŽŒ1ÆÞÿ}6mÚ4¥¶½½½ÙæÍ›Ytt4óõõUš·hÑ"¶dÉÆcîîî,))©Åúšj(**RL0`‹‰‰áôùÓ½ÀPÇöþòË/ÙøñãmÔÖÖ²õë׳ªª*¶}ûv6dnu) —IDATÈ¥õ†††²Õ«W+ÖñÇ(æ 2„I¥RËœÙÍ›7cŒUVV²G)–sqqa©©©-~.u|O­’èwwwH$Åëž={"??_ñÚÒ²ñ±{¦¦¦ŠÎÉ¿^ûŸ——///¥v{ôèÈÊÊBFFÜÜÜ¢££QZZÊ©>‘HÅë¶ÀÕêØÞYYYðððP¼–H$X±b,,,››«4^|ñEäää(^;99)þÞÔî¸qãŠÀÕÕ‹/Æ£G8.M}O:æáÇJ¯‹ŠŠÐ¾}{•Ú°³³CQQQ‹íZ[[cðàÁÈÊÊRú³mÛ¶g+\O©c{[YY5 Ü#GŽ ¬¬ ÖÖÖÍÖQRR›¶Ç=eŒaãÆ())T*…L&ÃäÉ“UªK(0tLVVNœ8 ñç±;v`̘1*µ1|øpDGG+þ§¼~ý:þóŸÿ‘€ôôt@uu5üüüÓb[±±±-^“a(Ô±½ƒ‚‚pìØ1EH'''cÆŒ‰D ÂéÓ§qÿ~ãñ qøða¶Ùæ† 0tèPˆÅbôë×3gÎÄüÑêòÚúž(0tŒ¿¿?–-[†W^ypuużyóTjcâĉ B=€ñãÇ+vÐnݺá“O>¿¿?áááž={"<<¼Å¶–,Y‚ØØØgþ\ºJÛ; ðòòB`` FŒ/¾øíÚµCïÞ½±|ùrøùùaĈðòòBhh(FÕf›³fÍBNNzõê…ÀÀ@L™2Ÿ|ò‰b¾££#.\ˆ«W¯ÐÞ÷D#niXÓøªlf™L†¤¤$ØØØÀ×—Û“Ø[rãÆ ¢_¿~°¶V×"//iiipqqiÖß¡IO³=¸jgCÕñ0Ôµ½ïÞ½‹ÌÌLxzzâ…^Pš—••…;wîÀÍÍ­YŸFk?~ŒK—.A&“ÁÇÇŽŽŽŠyÅÅÅHMMEß¾}ag§þá"##¡4ÆÃÐAfffxæv¼½½áííÝâ<¸¸¸<ó: º¶w·nÝЭ[·ç5u0«ÂÔÔƒnqžƒƒFŒ¡j‰ÏŒNI!œQ`B8£À „pFAጃÂ!„3 Bg„Î(0!œÑ•žZ¢+Ïü䛦·ƒT*Epp°F×aÌ(0´dÊ”)¼®ßÎn,ªªRQ[Ûú† ®®Ž÷mmÈèæ3#áì¼ß|ó*BBžþæ*B¨ƒÂ!„3 Bg„Î(0!œQ`B8£À „pFAጃÂ!„3 Bg„Î(0!œQ`B8£À „pFAጃÂ!„3 Bg„Î(0!œQ`B8£À „pFAጃÂ!„3 Bg„Î(0!œQ`B8£À „pFAáLÀc|AÔkÍš£¸y3vv–ŠiÇ_ƒ¯¯+\\ì2˜™I°nÝdtìhÃW©Dψù.€¨ŸX,Â… w›MOIy€””JÓvï~M[e@§$($Äï‰ËH$",Y2B ÕCBa€<=Ð¥‹A«ËÔÕ5 8¸öŠ"Ã@……õ…DÒr`€‡ÇsððxNËU}Ga ‚ƒ}Q_ßr¶H$Ä”)}µ\1ÊÕÕ½z=¡°ùQFCÄ t:BTGaÀBC_jB¡}útÂóÏÛñTÑglüø>Ë•OKÂÂèt„< æèhÿ®ÍŽ2ÆïÍSEDßQ`¸°°— …8°+Ú··lã„´ŽÃÀÓ Baã×ÌCh(ާGaବÌ0|¸'€Æ«;Gòæ¹"¢Ïè^-)..æmÝAAøùç›ðòz55娩á§+++˜™™ñ³r¢Z’––ÆÛºäG^ëðôô¤ÀÐsZäé鉎;ò²î7Þ(ÇŠã`bÂÏW~þüy^ÖKÔ‹ú0ŒÄŠcx b8(0Œ„…… ß%@AጃÂ!„3 Bg„Î(0ˆÊæÎ‹ÌÌL¾Ë < À *‹‹‹CYYßeP`è¨3gÎÀËË &&&ðõõÅ•+Wó8€®]»B,ÃÉÉ _|ñ…bÞªU«àààSSS 77—Ó¼7n`àÀ033ƒ‡‡¢¢¢EEE9r$öíÛ[[[x{{£¨¨áááHHHЖ :…­8wî+((à´lNN³²²b111¬ººš­]»–¹ºº2¹\ÎÊËË™©©)‹‰‰a2™Œýúë¯L(²¢¢"ÇœÙÝ»wYyy9›0a›?>cŒµ9¯²²’999±-[¶0™LÆâã㙵µ5»xñ"ËÉÉaæææ,$$„%&&²ÂÂBæääÄÎ;Çjkk5òù‰î¢k…uÐÁƒ1tèPÞÿ}ˆÅbÔÔÔÀÄĉ‰‰ðõõtéÒ‰eeeÉd€ÇÃÊÊ QQQ¨««€6ç8qNNNX°``ذa˜={6¤R)–/_ŽššlÙ²ÎÎÎâ±µµ…D"ÑÞF!:CeeeÁÃÃCñZ"‘`ÅŠŠ×W¯^Å|€{÷î¡}ûöËïF7nΞ=‹ÀÖÖAAAX¹r%lmmÛœ—••…ŒŒ ¸¹¹)ÖQSSƒ1cÆh ˆ¦° Æú0t••JKK•¦9reeeˆÅÊ•+±jÕ*ܹs—/_†……€Æµ6n܈’’H¥RÈd2Lž<ù‰ó¬­­1xð`dee)ýÙ¶m€Æƒ (0tRPPŽ;†¢¢"@rr2f̘‘H„ÜÜ\ôèу†H$BRRÊËË6lÀСC!‹Ñ¯_?Ìœ9üñÇç"!!ééé€êêjøùù!&&†‡OOtß(ÆBÕN¿Å‹³:°áÇ3kkk¶eËÆcÙÙÙÌÑÑ‘ 2„²Ñ£G3www6a–““Ã:uêļ½½ÙðáÙ Û¹s'cŒµ91Æ6nÜȬ­­ÙðáÙ‹‹ c ,''‡‰D"¥ÚúôéÃÈ®\¹¢±ÏOt“€1ÖòóôˆZ?^åtîÞ½‹ÌÌLxzzâ…^PL///Ç¥K—àèèˆ^½z!''÷ïßÇ+¯¼‚ÇãÒ¥KÉdðññ£££â}mÍ€¼¼<¤¥¥ÁÅÅ^^^­ÖU\\ŒÔÔTôíÛvv܈ô4ŸŸè -1ö0Æþù õaB8£À „pFAጃÂ!„3 Bg„Î(0!œQ`B8£ÛÛµ(==]qƒ!úˆ. ×’ââb¾Kà••=½]ÏQ`B8£> Bg„Î(0!œý? Ey=sIEND®B`‚bm3.7.0/doc/html/a00214.map0000644000175000017500000000024411365042646013236 0ustar tlktlk bm3.7.0/doc/html/a00015.html0000644000175000017500000000770611365042651013432 0ustar tlktlk BitMagic: bm::bit_COUNT< W > Struct Template Reference

bm::bit_COUNT< W > Struct Template Reference

Bit COUNT functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT< W >

Bit COUNT functor.

Definition at line 5098 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_COUNT< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5100 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00087.html0000644000175000017500000004167111365042631013440 0ustar tlktlk BitMagic: bm.h File Reference

bm.h File Reference

#include <iterator>
#include "bmconst.h"
#include "bmdef.h"
#include "bmsse4.h"
#include "bmfwd.h"
#include "bmfunc.h"
#include "encoding.h"
#include "bmalloc.h"
#include "bmblocks.h"
#include "bmundef.h"
Include dependency graph for bm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::bvector< Alloc >
 bitvector with runtime compression of bits. More...
struct  bm::bvector< Alloc >::statistics
 Statistical information about bitset's memory allocation details. More...
class  bm::bvector< Alloc >::reference
 Class reference implements an object for bit assignment. More...
class  bm::bvector< Alloc >::iterator_base
 Base class for all iterators. More...
struct  bm::bvector< Alloc >::iterator_base::bitblock_descr
 Information about current bitblock. More...
struct  bm::bvector< Alloc >::iterator_base::dgap_descr
 Information about current DGAP block. More...
union  bm::bvector< Alloc >::iterator_base::block_descr
class  bm::bvector< Alloc >::insert_iterator
 Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces). More...
class  bm::bvector< Alloc >::enumerator
 Constant input iterator designed to enumerate "ON" bits. More...
class  bm::bvector< Alloc >::counted_enumerator
 Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit. More...

Namespaces

namespace  bm

Defines

#define BM64_SSE4
#define BMVECTOPT
#define BMCOUNT_INC
#define BMCOUNT_DEC
#define BMCOUNT_VALID(x)
#define BMCOUNT_SET(x)
#define BMCOUNT_ADJ(x)

Functions

template<class Alloc >
bvector< Alloc > bm::operator& (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > bm::operator| (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > bm::operator^ (const bvector< Alloc > &v1, const bvector< Alloc > &v2)
template<class Alloc >
bvector< Alloc > bm::operator- (const bvector< Alloc > &v1, const bvector< Alloc > &v2)

Define Documentation

#define BM64_SSE4

Definition at line 45 of file bm.h.

#define BMCOUNT_ADJ (  ) 

Definition at line 91 of file bm.h.

#define BMCOUNT_DEC

Definition at line 88 of file bm.h.

#define BMCOUNT_INC

Definition at line 87 of file bm.h.

#define BMCOUNT_SET (  ) 

Definition at line 90 of file bm.h.

Referenced by bm::bvector< Alloc >::clear(), and bm::bvector< Alloc >::count().

#define BMVECTOPT

Definition at line 56 of file bm.h.


Generated on Sun Apr 25 09:37:29 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00153.md50000644000175000017500000000004011365042636013141 0ustar tlktlk7723af59dee7f90cbb2035f6719ae93abm3.7.0/doc/html/a00216.png0000644000175000017500000000603311365042646013251 0ustar tlktlk‰PNG  IHDRè(ôA¶ÌbKGDÿÿÿ ½§“ ÐIDATxœí}PTeûÇ¿ËÛ*ÈJæJ! *ÃK¤4¡‘ÈÄ’¢CYCa¦ÃL/#L‰ŽCj¤)S㘓62 ­¼Ø¤D$‰6 J†((Ê®+¯†,ðýýáÏ3­°È"ê>ÏsfÎ ×}ë\×uv¿{ö¾Ï.+#I‹ÄêA L#*X0B csû@cc#Nœ8ñ jþ§ „›››ñ oC­V€ØÄ&¶û¼©ÕêÛåÈ!WÐ[ˆÅ]àþ!“ɆsPÀ‚,!PÀ‚,!PÀ‚,“·YFK}}=ÊÊÊ;åîùùùP*•xúé§ïYµZ†††a}³fÍBttô]ǧ¤¤ ¿¿ÀÍÛNNNXºt)üq@{{;ÒÓÓ±~ýúaóÍ7ß`Ú´iX´h‘4ÖÛÛ‹¬¬,üþûïÀO<•+WB¡Pܱç{Á]_Akkk±gÏžñ¨EpŸÈÉÉÁ±cÇîiŽ––èt:èt:¨Õj¨ÕjÉnmm—ø?üÐét¸|ù2²²²àí튊 @gg'¾úê+é˜kÖ¬1}FFŠŠŠ$»±±þþþعs'\\\ðØc!++ ^^^8uêÔx³¸ë+¨@0ñññÒßkÖ¬³^ÈG¿nÝ:<ûì³’Ý»wcß¾}pwwǹsç$ß‘#Gðî»ïšÌùÊ+¯ÀÏÏÙÙÙ°¶¶|ðÁHLLDTTjkk!—ËGÝÃx0.sÐÁÁA¬]» …S§NÅöíÛ­­­P©Tعs'¦OŸìÛ·ëÖ­ƒ‹‹ ”J%²³³¥ã¤¦¦âõ×_7i:t°··ÇªU«˜˜ˆ~ø••OOOØØØ@©T"55ÕìÌ­×TÎ;ñÇ ((&LÀìÙ³‘™™i”_­VÃÃÈÅÀÀà§Ÿ~‚ììì0oÞ<éJ%%%ð÷÷‡\.‡——òóó%_vv6ÜÝÝ1qâDDFF¢³³ó޵èõz,^¼€““jjj†í¥··wT=ß/œ%]½z€èèhèõzDGG£´´tHÜñãÇqòäI|ùå—’8o±mÛ6ôõõáàÁƒCâîyÿ¦>‹;Z:D™LÆ÷Þ{7nÜ`ii)'OžÌœœ677ÓÊÊŠ›6mâàà wïÞMLIIáàà ?ýôSzzzJÇÊÏÏç_|1¬}áÂNš4‰4 ܶm­­­™‘‘ÁëׯS.—377—===üå—_heeE½^oV æì;RΑèêê¢R©ä®]»ØÓÓÃââb* þöÛolnn¦ãââØÛÛË‹/ÒÉɉ?þø#µZ-™››Ëîîn&''sÆŒä_ýEGGGîß¿Ÿ===ÌËË£½½=kkkyêÔ)Êårj4 ¦¥¥ÓÒÒF¬E«ÕrâĉŒŠŠâ±cÇØÛÛkÔÇ… øþûïsΜ9w|ެ^½š«W¯ÝÊŒx¹\Î 60=={÷îeBB===YWWG’lhh ƒƒI²½½J¥’Ge__IrÙ²eLJJ"I~þùçœ?¾Ébbb?d\£Ñ0 €_ý5{zzÆÜ#L|w\úÐCIM“dRR£¢¢ØÜÜLìêê"Iž?ž666üçŸH’'Ožä#<2ª<ÉÉÉ|ñÅ%{ppJ¥’ìééaee¥äÓjµ”Ë嬫«3«sö)çHdggsÞ¼yFck×®eBB‚”¿©©Iò3''‡Ÿ}ö#""¤ñ¾¾>¦¤¤ðÆܳgƒƒƒŽùÒK/ñ£>âúõëùꫯùüüü˜––6b-Z­–xåÊ£s~øða.[¶Œ^^^ܱc[[[Gì—¼· áòå˹|ùr>ÿüótuueAAIc’¤««+«ªª$ûßMNNæâÅ‹MÖðöÛosÕªUÃúŽ?Ε+WòÑGåÆÙØØhv¦:.sPØÚÚJ¶¯¯/Š‹‹%ÛÁÁÀÍ•6¹\É-—.]ÂìÙ³%[&“aæÌ™¹\ŽÊÊJlܸõõõ˜2e âÍ©a4ûŽ&§©>jkkáîî. ,]ºT²•J¥QŸÃõokk‹ 6t:‘æÌ™­V ƒÁ#Ÿ··÷¨j±²²ÂôéÓeeeˆ‹‹ƒ··7jÖãw¯Øºu«Ñ433o¼ñZZZÌ:ŽR©Dcc£I¿V«…¯¯ï°¾ÀÀ@¢¥¥ééé ¿¿ÿ°o‰Íe\zûÉÐëõ˜2eÊxZÂÑÑqÈê_{{; //IIIÐh4xæ™g`mm ''§qÍ;cÍ©P(°páB9rD3 Édèèè0çèè½^o4vðàA„††B¡PàÌ™3F¾ÖÖVLž<&Lwëñ©–––#ÚÚÚB.—ãÚµkhkkC¿Ñ‹²¥ðÔSO¡½½ׯ_7+N¥R!..•••0ò555¡¨¨Èäíš[ €$lll0iÒ$³kŽqY$ºté¾ÿþ{Àßÿ½{÷]FKee% ‡µU*òòòpíÚ5@yy9jjj “É Óéàíí… ÂÚÚåååf?@æ2Öœ*• ¥¥¥8{ö, »»ÈÍÍ1.,, ’ØNœ8×^{ ÖÖÖ CQQ.^¼àæâˆF£J¥Bhh(²³³ÑÜÜ ¨®®Æ¯¿þjv-¨ªªÂÇ FOOOlÙ²W®\åJ^^ª««Ç]]]èèè@GGt:’““áëëkö ´››ÞyçDGGãÏ?ÿ”ƵZ-¢¢¢°dÉ£+õ¿)))Att4,X’(++Ãîª/‰ÛßóŽe:þ|Κ5‹ÁÁÁœ6mÃÃÃÙ××'Í©nQWWg4'¨ªª2šƒÆÇÇ300Фýæ›oÒÅÅ…*•Š , ¿¿?¿ýö[666rêÔ© ¦J¥bxx8=<<øÂ /˜Uƒ9ûŽ”óNìØ±ƒ …‚¡¡¡tuuåË/¿Ì!ùIrÑ¢EÌÉɑ·³³3CCC©P(¸k×.i¿Í›7ÓÉɉaaa|øá‡ùÖ[o‘¼9o\±bœœB777†‡‡3--mÄZ´Z-­­­MöÐÔÔÄÍ›7ÓÇÇçŽýššCΘ1ƒ[¶ls¼\.7ú³ ƒ‚‚xöìY’Cç sçÎePP+**HÏAI²¿¿Ÿ‰‰‰”Ëåôññá“O>I;;;ÆÆÆ²»»{ØÚrrr¤u‚[kc÷j‘èƒ?ÿü³ÑÂÉx¢×ëYSSÃÓ§OóèÑ£ìííåÌ™3Y^^N’ìììdQQOŸ>Mò¦€JJJîI-·¸›œ:Ž………ùdÌñwb``€---’­×ëYXXȶ¶¶ã:::XRRÂââb^½zuÄ}ï¦ÿcJ ²ÿwJdffbÅŠ÷ªªªðÜsÏá»ï¾ƒ··74 RSSQ__oQs¡ææf£²Ûñó󃿿ÿ}¬ÈrÙºu+bbbàááñ KyàÈd2¨ÕjÄÄÄÿÇ|’hîܹؿ?¶oߎ¶¶6xzzâðáÃ%Nàæbг³³I¿½½ý}¬Æ²Ù´iÓƒ.Áâù(DFF"22òA—1"ÎÎÎX²dɃ.Cð_‚øº™@`Á Œ¨@`Á Œ¨@`Á Œ¨@`Á˜¼j _%þ×òQ?ñóƒÁƒa¸Ÿ"P@`9ˆ9¨@`Á Œ¨@`ÁüÇ"Ó­ IEND®B`‚bm3.7.0/doc/html/a00137.map0000644000175000017500000000003511365042632013233 0ustar tlktlk bm3.7.0/doc/html/a00078.html0000644000175000017500000001126411365042652013436 0ustar tlktlk BitMagic: bm::ptr_guard< T > Class Template Reference

bm::ptr_guard< T > Class Template Reference

Mini auto-pointer for internal memory management. More...

#include <bmutil.h>

Public Member Functions

 ptr_guard (T *p)
 ~ptr_guard ()

Detailed Description

template<class T>
class bm::ptr_guard< T >

Mini auto-pointer for internal memory management.

Definition at line 105 of file bmutil.h.


Constructor & Destructor Documentation

template<class T>
bm::ptr_guard< T >::ptr_guard ( T *  p  )  [inline]

Definition at line 108 of file bmutil.h.

template<class T>
bm::ptr_guard< T >::~ptr_guard (  )  [inline]

Definition at line 109 of file bmutil.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00056.html0000644000175000017500000001311711365042651013430 0ustar tlktlk BitMagic: bm::decoder_range_adapter< DEC > Class Template Reference

bm::decoder_range_adapter< DEC > Class Template Reference

Adapter to get words from a range stream (see range serialized bit-block). More...

#include <bmfunc.h>

Public Member Functions

 decoder_range_adapter (DEC &dec, unsigned from_idx, unsigned to_idx)
bm::word_t get_32 ()

Detailed Description

template<class DEC>
class bm::decoder_range_adapter< DEC >

Adapter to get words from a range stream (see range serialized bit-block).

Definition at line 5020 of file bmfunc.h.


Constructor & Destructor Documentation

template<class DEC >
bm::decoder_range_adapter< DEC >::decoder_range_adapter ( DEC &  dec,
unsigned  from_idx,
unsigned  to_idx 
) [inline]

Definition at line 5023 of file bmfunc.h.


Member Function Documentation

template<class DEC >
bm::word_t bm::decoder_range_adapter< DEC >::get_32 (  )  [inline]

Definition at line 5030 of file bmfunc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00117.html0000644000175000017500000001111411365042643013422 0ustar tlktlk BitMagic: BitMagic C++ Library

BitMagic C++ Library

For more information please visit: http://bmagic.sourceforge.net. More...

Collaboration diagram for BitMagic C++ Library:

Modules

 The Main bvector<> Group
 

This is the main group.


 GAP functions
 BIT functions
 Small sets functionality
 Processor specific optimizations for SSE2 instructions
 Processor specific optimizations for SSE4.2 instructions
 Set algorithms
 bvector serialization
 Memory Allocation

Detailed Description

For more information please visit: http://bmagic.sourceforge.net.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00209.map0000644000175000017500000000061211365042646013241 0ustar tlktlk bm3.7.0/doc/html/a00169.png0000644000175000017500000000377211365042644013265 0ustar tlktlk‰PNG  IHDR(ßs bKGDÿÿÿ ½§“¯IDATxœí›}HÓßÇߺ­IFen•öDš¦Y˜Ì06KŒ(JK0Íþ«(ý£$ƒ\IÏPQŽ6­ ¦´•©aJÙÊ!²ØÂZÖò)Dç<¿?¾¿ömíÁég=~ï îçìÞsŽ—7÷Ü}>Ó‹ˆ Æ8ñþÕ0þl˜€œ`bp‚ïìƒòòòŸYã@"‘ ((ÈÖINÀ6C¥RÙéÄé *• éé鮦0þ#xyy9ô³;ƒL@ N018ÁÄàƒL@ NxD@¯^½Â¥K—<jÜyzzzpìØ1Nñëëë!—ËñæÍ?A.—ãÑ£GvkJJJðìÙ3@QQär9är9> …Böööq×sóæM\¿~ÝÆWSSƒ3gÎØøž?Ž#GŽÀb±Œ;׸qõ Ñу#G¨Õj’H$nÍå‚«<ƒ‚ƒƒ­vff&éõú1Å‹‹#ooo:xð ßl6š3g}þüÙæ³„„R*•DDB2™ŒvìØAÙÙÙ”””D>>>nïã÷Òüùóm|2™ŒÑh´úòóó)<<|\9ÜÅ™þš6wî\¼xñÂjk4|úôÉíõíííhhh@NNÊÊÊÎ …ÈËËsgÛ¶m(**‚B¡@uu5.^¼ˆ¬¬,F·kùŠL&ƒ^¯GGGàË—/hllDhh(4u^cc#¤Ré˜ã{ hdd;wîÄäÉ“1}útººº°jÕ*œ:u ³fÍ‚X,Fqq1rrr ‹€«W¯Zã?~[·nuj;Ëóáì[·––“É„´´4Ô××»Uii)V¬XÜÜ\èõzèt:»9gÏž…R©DSS“Ûû²yóf„‡‡ãÚµkNç :ôGEEaÊ”)hhhÔÕÕ!44éééÐjµþÙ¦¦&‡rדxL@:ïß¿GEEŽ=Š7nÀl6£¶¶½½½08tè233!‹a2™°gÏ8pÀ'$$ÑÑÑNmgyP[[ P(‰DP(ˆ‰‰q«~•J…ŒŒ ˆD"H¥R‡§Ppp0öï߬¬,˜Íf·÷&::­­­v~½^œœDFF:\ÇãñoÐ;w°zõj¤¤¤ ºº‹­­­èïïGBB‚Ýúªª*,_¾—/_þqbkÏs„Z­&???²úòòòhÆ ÔÑÑA¬w‡¶¶6âóùd6›‰ˆèéÓ§4cÆ Îy ùúúZýÔÜÜìVÜ––š0auww‘R©¤ÀÀ@²X,DôïÈ`0ÐÐÐEDD\.'"û;PII‰]ü½{÷Ò–-[ˆˆhdd„nß¾Mk×®¥E‹ÑÉ“'©««Ëim§OŸ¦èèh"" ¥êêj!±XLtáÂZºt©Óõ>¤ŒŒ š={6íÛ·ÚÛÛÝÚ“ïq¦—/SÇ‚ ¬vxx8îÝ»gµ}}}üóRN(‚Ïç[mOæ*• Dd=éa4qÿþ}»Ö  T*!“ɰiÓ&·âFàÁƒÈÎÎFXXvïÞ¤¤¤Qÿ~©TŠÜÜ\´µµáõë×X¹r%¼¼¼œœ ­V ƒÁàòþ#‘H ‘HÐÙÙ ¥R‰ÄÄDDFF¢¢¢Â­ÚGÃc-¬³³ÓÆ6™L˜6mš§Âÿ°“ÉD|>Ÿx<õöö:][[[K©©©4oÞ<’Ëåd2™FÝG8ÓƒÇC .¤øøxš9s&­Y³††††Æ, ]»vÙ<ëùÖv•ç{-[¶ŒbccI§Ó¹¬}ûöí´~ýz;oo/ …Bºuë–CUUUá›`ùûûSff&õôô8ÌýîÝ;ÊÏϧŋ»¬ñüùó€ZZZlüQQQåt]yy9ÅÇÇSyy¹õÎ9^~¨€¾200@555ôäÉ“±WÈ1Åb¡ÎÎN«m2™H«ÕÚ,¿#ÃÃÿ}\gzðØ%|||~Ê-Gy¼½½áïïoµÅb1’““ÑÑÑ+W®8áôkôÏ‚ÇãýQq¿Å£ú‰DN?Ÿ8qâO¬æïã¯H$BJJʯ.ã¯å¯yÆø5018ÁÄàƒL@ N018ÁÄà†«G×l°ñíÓ«Œïÿ€ÁH$v>¯ÿŸ6 Ƹ`w '˜€œ`bpâ%îÅ­mwªIEND®B`‚bm3.7.0/doc/html/a00169.map0000644000175000017500000000017211365042644013245 0ustar tlktlk bm3.7.0/doc/html/a00222.map0000644000175000017500000000023111365042647013232 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_0x74.html0000644000175000017500000000761511365042652016715 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- t -

  • test_bit() : bm
  • tmatrix_distance() : bm
  • tmatrix_reduce() : bm
  • tmatrix_restore() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00170.map0000644000175000017500000000017511365042644013240 0ustar tlktlk bm3.7.0/doc/html/functions.html0000644000175000017500000001172711365042644014634 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- _ -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00099.html0000644000175000017500000002310211365042635013434 0ustar tlktlk BitMagic: bmsse_util.h File Reference

bmsse_util.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::sse_empty_guard
 SSE2 reinitialization guard class. More...

Namespaces

namespace  bm

Functions

BMFORCEINLINE void bm::sse2_xor_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 XOR array elements to specified mask dst = *src ^ mask.
BMFORCEINLINE void bm::sse2_andnot_arr_2_mask (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end, bm::word_t mask)
 Inverts array elements and NOT them to specified mask dst = ~*src & mask.
BMFORCEINLINE void bm::sse2_and_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND array elements against another array dst &= *src.
BMFORCEINLINE void bm::sse2_or_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst |= *src.
BMFORCEINLINE void bm::sse2_xor_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 OR array elements against another array dst ^= *src.
BMFORCEINLINE void bm::sse2_sub_arr (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 AND-NOT (SUB) array elements against another array dst &= ~*src.
BMFORCEINLINE void bm::sse2_set_block (__m128i *BMRESTRICT dst, __m128i *BMRESTRICT dst_end, bm::word_t value)
 SSE2 block memset dst = value.
BMFORCEINLINE void bm::sse2_copy_block (__m128i *BMRESTRICT dst, const __m128i *BMRESTRICT src, const __m128i *BMRESTRICT src_end)
 SSE2 block copy dst = *src.
BMFORCEINLINE void bm::sse2_invert_arr (bm::word_t *first, bm::word_t *last)
 Invert array elements dst = ~*dst or dst ^= *dst.
BMFORCEINLINE __m128i bm::sse2_and (__m128i a, __m128i b)
BMFORCEINLINE __m128i bm::sse2_or (__m128i a, __m128i b)
BMFORCEINLINE __m128i bm::sse2_xor (__m128i a, __m128i b)
BMFORCEINLINE __m128i bm::sse2_sub (__m128i a, __m128i b)

Generated on Sun Apr 25 09:37:33 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00192.png0000644000175000017500000000466611365042645013265 0ustar tlktlk‰PNG  IHDR»(¦b‹‡bKGDÿÿÿ ½§“ kIDATxœíkHT[†_ulºàÖJ«1H9ÚM¤‚:48Ž”Qr¤BºPú‘i*°¢à@žnBÄ©„.SCVjÓ&+«)ÃÒnçP¦‘“cYSfcš“á¼çG¸qҙыœõÀþñíµ¾õ­Ë;³¿5{oõ#IýŸ2ÿŸÝàG!Ä.ð„Ø>ƒÂUA^^Þì‡@àU-ZÔ霟« ªŸŸ_ŸwH è+ºµû ªN§Iqˆã—9t:K=‹œ]à3± |!vÏ Ä.ð„Ø>ƒ»ÀgðŠØŸ={†ãÇ{£©ïŽÓÐЀ]»võØïãÇÈÎÎîU¿^¼xÜÜÜ^µñ+PXXˆ;wîüìn|7^{EE:䦾;ŽÍfÑ#Gd{åÊ•¨®®î–ßöíÛ{Õ¯êêjìß¿¿Wmü äå塤¤¤Wmt\—M¿Ic"##ñôéSÙ¾xñ"l6ÛOì‘ +~æºxMì‡kÖ¬$I1bvîÜ ¨¯¯‡V«Å¾}ûް°0=z6l@XXT*ôz½ÜÎîÝ»±|ùr—¶«8oÞ¼Áüùóiii°Z­HKKƒÉdrë÷-×®]C||<”J%&L˜€ÂÂB¹ìòåˈŀ0yòd”••uò'‰õë×#33¤çW¶lÙ‚°°0(•JÌš5 µµµ³ÙŒY³f9ÕMKKCiiiçÔ§NBtt4 T*vïÞ-—éõzDFFbРAøã?œDêÊÏd2aõêÕÈÈÈ€$I5jöíÛ'÷ÿÛuù÷ß¡V«1pà@Œ7'OžX­VÌž='Nœ@HH?~Ü­ñ¸….@NçªØ ƒÁ@???®[·ŽÍÍÍ4™L f^^ëêêèïïÏ­[·Òápðï¿ÿ&fggÓápp×®]ŒŽŽ–Û*,,äþýû»´ÝÅ©®®æ!CH’ T©T,..fkk«[?‹ÅB¥RI’|ýú5ƒ‚‚xìØ1ÚívpðàÁ¬¨¨ ÅbaPPóóóùéÓ'þù矌ˆˆ Ãá`qq1cccép8˜žžÎ3f°©©Éã¼]¼x‘ááᬪªbcc#SRR¸jÕ*’ä“'O8|øp§úñññ,**êñœº¢±±‘J¥’ùùù´Ûí¼~ý:ýýýiµZùàÁ*•Jž={–---ÌÉÉ!æää¸õ3 T(ÌÌÌdss3oÞ¼Éàà`þóÏ?Ö¥©©‰*•Š Ýnç•+W(IoݺE‹ÅÂAƒ155•%%%üüù³Çñ¤N§£ YßõšØ‡ÊÖÖVù\VVSSSYWWGòâWVVR¡PðË—/$É{÷îqäÈ‘½ŽÓQì$9zôhÞ¿ߣ_G±:tˆÆ)æÂ… ¹cÇîÙ³‡óçÏ—Ï·¶¶2;;›ÍÍÍ,..fLL ÓÓÓÚ-¡“dAAÃÃÃùßÿ‘$›ššØÐÐ@ҳؽ1§v»ååå²Ý>UUUܸq#/^ìT?..Ž999ný %IrgVVÓÒÒH:¯‹^¯çäÉ“b¬Y³†™™™´X,À—/_zGG܉ÝkiLTTe{âĉ¨««“í!C†øú4¥R©„B¡moÆé_mm-Æçtnüøñ°X,0›ÍNeØ´i xüø1^½z0 Ý˼yó°páBLŸ>ÈÈÈ@CCC·|ÞÏ©R©Dyy9fÏž¨¨(¤¦¦Âáp^¾|‰ØØX§ú111ýà·ß~Àd{âĉ¨©©éßl6£¢¢‘‘‘ò¡×ëñáÀ¿¿?ÂÃû;ñšØß½{çd[­V 6Ì[Í÷:Nwü$IêT¯¾¾ÁÁÁ ’¡sçÎÉyldd$Μ9ƒ={ö`íÚµêvIìÝ»õõõÈË˃ÝnÇ‚ \ÖonnöØfO(((@VV¶lÙ‚ÊÊJܽ{Wþð:V«Õ©~ûܸóëX¯·oß"((¨S|I’³Ùìtýõ×_˜9s& ¦NŠåË—ËW‡ÀÀ@Øl6¼ÿ^Ž÷ìÙ3mö„ÚÚZÄÄÄ !!¸}û6‰‰‰ÐëõòÕïÑ£G¸qã†G¿öòö}SSrss¡Õj;Å×jµ0™Lxòä àÓ§O˜2e òóó½:NW¹z˜³ÿþûï;v,5 GÅääd¶¶¶Êùe;UUUN¹õýû÷òËŒŒ N›6­KÛ]œosöI“&Q­V³¬¬Ì­_Çœ$·mÛÆ&%%qøðáLOOwêKhh()I8@’òµŠŠ 8%%%nçÍb±p̘1Œ‹‹cbb"ƒƒƒ™››K’lkk£Z­fDDSRR¨V«©V«röîΩ+jjj8bÄj4jµZ&''3**Š)))t8\ºt)CBB8sæLŽ3†ÉÉÉÌÉÉqëg0ÁØØX&$$P¥RqÆŒliié´.$¹wï^J’ÄÄÄDŽ=š‹-b[[- <Žá[ú|ƒÚNKK ¯^½ê´yé ºŠÓÖÖÆwïÞɶÕj¥Ñhäû÷ï{Ü¿êêjF>}ú´SYee%F#kjj¼0’¯›Ä7nðÒ¥K|óæSÙ—/_h2™h2™äͧ·±Ùl,**âÇI~ý\»vM.ô苊Šh³Ùºåg08eÊ~þü™×¯_gii)‡ì×ÕºÔÖÖÒh4ÊõÞàNìn_ËÓétX²dIß\R|€ºº:\¹rÅey\\âããûUü .`ûöí]Þƒøœƒ»Àgbø BìŸAüaSA¿¤GwPOŸ>Ý·½~0.¿Ù‚~†øŸJßAˆ]à3± |†ÿ<¯Éà†ÈDýIEND®B`‚bm3.7.0/doc/html/a00126.html0000644000175000017500000004104411365042644013430 0ustar tlktlk BitMagic: bvector serialization

bvector serialization
[BitMagic C++ Library]

Collaboration diagram for bvector serialization:

Data Structures

class  bm::serializer< BV >
 Bit-vector serialization class. More...
class  bm::deseriaizer_base< DEC >
 Base deserialization class. More...
class  bm::deserializer< BV, DEC >
 Class deserializer. More...
class  bm::serial_stream_iterator< DEC >
 Serialization stream iterator. More...
class  bm::operation_deserializer< BV >
 Class deserializer, can perform logical operation on bit-vector and serialized bit-vector. More...

Enumerations

enum  bm::serialization_flags { bm::BM_NO_BYTE_ORDER = 1, bm::BM_NO_GAP_LENGTH = (1 << 1) }
 

Bit mask flags for serialization algorithm.

More...

Functions

template<class BV >
unsigned bm::serialize (const BV &bv, unsigned char *buf, bm::word_t *temp_block, unsigned serialization_flags=0)
 Saves bitvector into memory.
template<class BV >
unsigned bm::serialize (BV &bv, unsigned char *buf, unsigned serialization_flags=0)
 Saves bitvector into memory. Allocates temporary memory block for bvector.
template<class BV >
unsigned bm::deserialize (BV &bv, const unsigned char *buf, bm::word_t *temp_block=0)
 Bitvector deserialization from memory.

Detailed Description

bvector serialization


Enumeration Type Documentation

Bit mask flags for serialization algorithm.

Enumerator:
BM_NO_BYTE_ORDER 

save no byte-order info (save some space)

BM_NO_GAP_LENGTH 

save no GAP info (save some space)

Definition at line 1037 of file bmserial.h.


Function Documentation

template<class BV >
unsigned bm::deserialize ( BV &  bv,
const unsigned char *  buf,
bm::word_t temp_block = 0 
) [inline]

Bitvector deserialization from memory.

Parameters:
buf - pointer on memory which keeps serialized bvector
temp_block - pointer on temporary block, if NULL bvector allocates own.
Returns:
Number of bytes consumed by deserializer.

Function desrializes bitvector from memory block containig results of previous serialization. Function does not remove bits which are currently set. Effectively it means OR logical operation between current bitset and previously serialized one.

Examples:
sample4.cpp.

Definition at line 1146 of file bmserial.h.

References bm::BigEndian, BM_ASSERT, bm::BM_HM_NO_BO, bm::globals< T >::byte_order(), bm::deserializer< BV, DEC >::deserialize(), bm::decoder_base::get_8(), and bm::LittleEndian.

Referenced by main().

template<class BV >
unsigned bm::serialize ( BV &  bv,
unsigned char *  buf,
unsigned  serialization_flags = 0 
) [inline]
template<class BV >
unsigned bm::serialize ( const BV &  bv,
unsigned char *  buf,
bm::word_t temp_block,
unsigned  serialization_flags = 0 
) [inline]

Saves bitvector into memory.

Function serializes content of the bitvector into memory. Serialization adaptively uses compression(variation of GAP encoding) when it is benefitial.

Parameters:
buf - pointer on target memory area. No range checking in the function. It is responsibility of programmer to allocate sufficient amount of memory using information from calc_stat function.
temp_block - pointer on temporary memory block. Cannot be 0; If you want to save memory across multiple bvectors allocate temporary block using allocate_tempblock and pass it to serialize. (Of course serialize does not deallocate temp_block.)
serialization_flags Flags controlling serilization (bit-mask) (use OR-ed serialization flags)
Returns:
Size of serialization block.
See also:
calc_stat, serialization_flags

Definition at line 1084 of file bmserial.h.

References bm::BM_NO_BYTE_ORDER, bm::BM_NO_GAP_LENGTH, bm::serializer< BV >::byte_order_serialization(), bm::serializer< BV >::gap_length_serialization(), bm::serializer< BV >::serialize(), and bm::serializer< BV >::set_compression_level().


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00065.html0000644000175000017500000001216111365042651013426 0ustar tlktlk BitMagic: bm::gamma_encoder< T, TBitIO > Class Template Reference

bm::gamma_encoder< T, TBitIO > Class Template Reference

Functor for Elias Gamma encoding. More...

#include <encoding.h>

Public Member Functions

 gamma_encoder (TBitIO &bout)
BMFORCEINLINE void operator() (T value)
 Encode word.

Detailed Description

template<typename T, typename TBitIO>
class bm::gamma_encoder< T, TBitIO >

Functor for Elias Gamma encoding.

Definition at line 440 of file encoding.h.


Constructor & Destructor Documentation

template<typename T , typename TBitIO >
bm::gamma_encoder< T, TBitIO >::gamma_encoder ( TBitIO &  bout  )  [inline]

Definition at line 443 of file encoding.h.


Member Function Documentation

template<typename T , typename TBitIO >
BMFORCEINLINE void bm::gamma_encoder< T, TBitIO >::operator() ( value  )  [inline]

Encode word.

Definition at line 450 of file encoding.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00032.html0000644000175000017500000001052711365042652013425 0ustar tlktlk BitMagic: bm::bit_trans_grabber< T, BPC, BPS > Struct Template Reference

bm::bit_trans_grabber< T, BPC, BPS > Struct Template Reference

#include <bmtrans.h>

Static Public Member Functions

static T get (const T tmatrix[BPC][BPS], unsigned i, unsigned j)

Detailed Description

template<typename T, unsigned BPC, unsigned BPS>
struct bm::bit_trans_grabber< T, BPC, BPS >

Bit transpose matrix grabber - template specitialization for various basic types

Definition at line 175 of file bmtrans.h.


Member Function Documentation

template<typename T , unsigned BPC, unsigned BPS>
static T bm::bit_trans_grabber< T, BPC, BPS >::get ( const T  tmatrix[BPC][BPS],
unsigned  i,
unsigned  j 
) [inline, static]

Definition at line 178 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00173.png0000644000175000017500000000543711365042644013260 0ustar tlktlk‰PNG  IHDRÃ(CüNëbKGDÿÿÿ ½§“ ÔIDATxœí}LSçÇ¿¥-|¡j‘Á"qSé¤ ƒb@ Š75ËæÀ¸¸™€îŸ ˘¹é’9çt‹YÜÜd. )Õa` ˜À¢u³tÃmì ØJW‚RJ{~¬ÜXûB 0Ï'áçÜóœsžÛûí½÷ÜÛÀ#"ƒÁÐùÍt Æl‰Á°ÁÄÀ`ØÜmÐëõ¸råÊLÔÂ`Ü3ž~úi›ƒšššðÌ3ÏÜ“‚Œ™ÂYßÈA ÿ:ååå.¿ìÙ=ƒaƒ‰Á°ÁÄÀ`Ø`b`0l0106˜ .[«žòÇ ©© »víòA9SË300¥R‰âââ)ž}û6T*š››Áãñ’’‚;v€Ïçs>&“ jµZ­‹±±±Ø¹s'æÏŸÏùœ8qYYYˆŒŒ´‹ÿñÇ#)) 2™ ‡Ɔ  —Ëí|ÊÊʰjÕ*üüóÏèèèpZçŠ+““ãÑšqùòe<÷ÜsX²d g'¢Ikˆ‹‹Ã©S§Ð××àñxH$Ø´i"""<Ê7UUU0›ÍÈÎÎæl/^Dkk+òóó9Û¯¿þŠªª*ìÛ·Ïnÿß ¦}føí·ßpêÔ)_Ô2å<7oÞDii)7ÎËËsy@ÝÁ`@ll,>ýôS,]º‰¯½ö6oÞÌ=kÑëõÉd8~ü8BBB°dɨÕj<òÈ#¸zõ*ëØ±cøå—_rœ8q:‹@NNFFFì|JKK¡ÓéÐ×׃ÁƒÁ•J•JÅoܸáÑšàÕW_Å믿n·_xT¼÷Þ{hhh€Á`€^¯GEE¤R)ÊËË=®áN~ÿýw¼òÊ+v¶Ã‡£  ÝÝÝœíÌ™3P«Õ÷\º •JENÌ.©®®&¹\î±ÿTñ&σ>H---ùnÙ²…¶oßNV«•³]¿~Äb1UVVÑš5khÛ¶m4>>n7·°°–.]J£££\Þªª*‡ÑÑѤT*Él6ŠŒŒ¤‚‚;ŸôôtR*•v¶ÜÜ\ÊÍÍõhwò×_‘ŸŸSdd¤Ý6OkJ¥TVVf·]­VS``  ¯kºrå  îîn""¡€€Z¹r%•––r~™™™´wï^¯ã{Š›ã»Ù'÷ V«ùùù˜?>/^Œ#GŽnܸÌÌL?~ááá ÁéÓ§QXXˆ„……áÌ™3\œwÞyÏ>û¬Ë±«<ÿý7¶lÙÈÉÉÑhDNNÝÖm0PSSƒ£G‚ÇãqöÐÐP|òÉ'‹ÅøöÛoñý÷ßã£>rø¶zë­·066†ÊÊJ¯ö×ûï¿¥R ­VëÕB¡^¿Ø‰ýû÷#//f³Ù«¹ž R©°sçNH$( ¨ÕjŸÕ˜˜ˆÖÖV{{{; !“ÉœÎãóùHKKãÄðå—_bÆ ÈÊÊÂW_}‹Å‚ÖÖV #==Ýaþùóçñè£â³Ï>ûׄá1ˆÅb¼ýöÛ Bjj*^xáîÚÒjµbß¾}àñxÈÌÌ„@ ÀË/¿Ì‡‡‡¹8[·nÅÞ½{]ŽÝå¹ÓÇÏÏb±B¡ÐmÝÃÃØ7oÞ¤>ÁÁÁn×>44ä6†3&nö;æõ\wüøãhkkãnT³³³qöìYX­VŸÔˆÑÑQÿÜŒ×ÖÖbóæÍxüñÇFãrîºuëìİqãF$$$€ÏçC«ÕB£Ñ@&“aáÂ…sŸ|òIœ(•Jddd@&“y}™ê Ÿœ&ZpF§êžmy’““166†‹/:l;räêëë‘™™‰¶¶6|÷Ýw>ÝÝݸpá{ì1@@@nݺåà722‚ÀÀ@»\.G^^öìÙã“·„‰jµ‡BMM jjjpáÂddd¸ìySÃÐÐêêê P(  !‰ÐÛÛ‹þþ~ŒOZ_ll,Äb1:„µk×B$²²²P[[ FãV X,æÎ;©¿Çxq·í”êêj@ÕÕÕDD444DQQQôÁPOO]¬k׮ќ9s¸qKK …††rcNGµµµNÇîòtttØÅõ¦›T\\L?ü0µµµÙ­‰Ïç“F£!"¢üü|Z¶lµ¶¶r>z½ž’’’è‰'žàl»w例k×ÒÐÐg+++#Òëõ\'§££ƒÛ><ŸÞ}÷]Îf4I ŸÏ§ÁÁA—s(;;›zè!zóÍ7Éh4z¼o&p×Mò‰’““iÅŠ”––F<ðmÚ´‰ÆÆÆ¼CAA]ûôα»>žRRRH§ÓMZ¿Éd¢çŸžüýý)..Ž¢¢¢(((ˆNž<ÉùŒSQQ‰D"ŠŽŽ¦¸¸8ò÷÷§]»vÑ­[·8¿þþ~Z¿~=Í;—’’’hùòå´páB:wî‘Ó‘ˆèüùó`Úbؽ{7mݺÕÁ>88H"‘ˆ¾øâ kJ¥€û[´håææÒÀÀ€ÓÜÝÝÝtðàAŠŽŽv[ã‡~Hè‡~°³'$$PBB‚Ëy”––Fd6›Ýæp‡;1ðˆìÏ?~ /OÛ£££øæ›oŒÕ«WOã\å}«ÕŠ,Z´ÐÛÛ‹––$&&bÁ‚ÅíííÅO?ý>Ÿøøx»'ËܼyW¯^…ÅbALL /^ì4Öµk×ÐÞÞŽyóæaõêÕ˜âjÿ{X,–噯âº9¾u>Ãl¤§§Çí öªU«\¶g#÷ÛzfwbðI7i¶" >˜ ((èV3}î·õÌ6îk1H$deeÍt>ã~[Ïlƒ½ÂÍ`Ø`b`0l0106˜ L † &ÃaÃåso_¯f0þë8ˆ!55ŸþùLÔÂ`Ì(ï&1ÿ§°ÿéÆ`LÀÄÀ`Ø`b`0lü4´Êí=ˆS7IEND®B`‚bm3.7.0/doc/html/a00147.png0000644000175000017500000011651211365042635013256 0ustar tlktlk‰PNG  IHDR›¸u¡bKGDÿÿÿ ½§“ IDATxœìÝwx›õ¹>ð[Ã{ɲd[òÞ+ ÄØ‰IZZH)í¡eÚr˜e¥p …¶ü€–æ”C!-«@ '@3aIììMHb[Þ²lY²ä!oÍ߯ôÚŽ3œX±lçþ\—.MëýÊqœèÖó<_‰Çãñ€ˆˆˆˆˆˆˆˆhâöJ½""""""""š96‘ß0l"""""""""¿‘zDDDgÛ®]» ×뽌ikáÂ…HMM ô2ˆˆˆˆhšp@8Ít+W®Ä›o¾èeL[kÖ¬Áu×]èeÑô°—•MDDtNX¶l~ûÛßzÓNYYY —@DDDDÓ g6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆˆˆˆˆˆˆü†aù Ã&""""""""ò†MDDD#´´´àóÏ?ô2ÆÅl6£««ë¸÷ bÍš5“¼""""""†MDDD£èõz¬_¿>ÐË8%›Í†;î¸Û¶m;îýýýýxõÕW'yUDDDDD ›ˆˆˆ¦¥§žz ÝÝÝ^Ñò@/€ˆˆhªñxüðC@QQÑ)_Ë'Ÿ|‚×_ÝÝÝ(++Ã<‰Dâïo‘ˆ•MDDDǨ®®†L&Ãûï¿Ç{ o½õ¶lÙ§Ó‰ ··ëÖ­Ã7Þˆ?ÿùÏP(øàƒð“ŸüDl]Û³g>ûì3üíoÃG}„ððpüïÿþï)ïÄ<€åË—ã“O>Á}÷݇§Ÿ~GŽ444àwÞÁÿüÛ¯ˆˆˆˆˆÈ?6À§Ÿ‚Û- —H$x÷Ý=^‘0l""" €uëöŠ—Ýn7¶m«EGG_WDDDDDä ›ˆˆˆ&™Ù܃;káv›¸aÃÁ­ˆˆˆˆˆÈ6M² @*•ŒºÍãñ`Ý:¶ÒÑôǰ‰ˆˆh’½ûîÞ1UMn·èa0thUDDDDDþÁ°‰ˆˆh55YqèaLØ2™ë×Àªˆˆˆˆˆü‡aÑ$úðÃýË%ǽÏårãwØJGDDDDÓÃ&""¢I´nÝ8c«šÀãtº6ètm“¼*"""""ÿaØDDD4I*+¨¯opü° ‚‚døðC¶ÒÑôۉˆˆh’|ðÁ¾S>Æápá™gþoVCDDDDtvȽ""¢s…ÓéÂâÅ9ˆoÛ°á Î?? II±€žžA„†ÁdêFBBL –JDDDDtÆ$çĵüDDDtViµÿ‰¿ýíüèGçz)DDDDDþ°—mtDDDDDDDDä7 ›ˆˆˆˆˆˆˆˆÈo6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆˆˆˆˆˆˆü†aù Ã&""""""""ò†MDDDDDDDDä7 ›ˆˆˆˆˆˆˆˆÈo6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆˆˆˆˆˆˆü†aù Ã&""""""""ò†MDDDDDDDDä7 ›ˆˆˆˆˆˆˆˆÈo6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆˆˆˆˆˆˆü†aù Ã&""""""""ò†MDDDDDDDDä7 ›ˆˆˆˆˆˆˆˆÈo6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆˆˆˆˆˆˆü†aù Ã&""""""""ò†MDDDÇñæ›oB"‘œõÓà` ®¹ægý8+W® ô·”ˆˆˆˆÎò@/€ˆˆh*{çw&á(??«ÏΠ‰ˆˆˆˆ&Ã&""¢“øÉO~è%L؇~è%Ñ9„mtDDDDDDDDä7 ›ˆˆˆˆˆˆˆˆÈo6‘ß0l"""""""""¿aØDDDDDDDDD~ð‰ˆˆÈjkkñÏþÓïÏÛ×ׇ'Ÿ|ÒïÏKDDDDt¶0l"""òƒªª*¼ð ~Þžž<úè£~^""""¢³…aù Ã&"""?q»Ý¸çž{øøxüñX­V,_¾O?ý4´Z-Ôj5^}õUÜÿýP«ÕÐh4xûí·OúÜÿøÇ?––†ˆˆÜxãp»Ý“ñ’ˆˆˆˆˆNÃ&"""?Ù»w/‚‚‚ÐÖÖ†÷ßO=õÞ}÷]8lÚ´ ]]]hiiÁc=†›nº jµf³÷Ýwyä‘>¯Ëåž={PSSƒC‡áƒ>À–-[ÎêkéíÂæÍU8p@VCDDDD3Ã&""šÑìv'úûí“r,…B?ýéOÇâÅ‹q×]wáÍ7ß T==øàƒH$X¾|9är9~õ«_‰×{zzNúÜ?þ8‚ƒƒ‘••…¢¢"twwûuí}øâ‹Ãøýï?Äòå«PPð®»îE<Ȱ‰ˆˆˆˆN<Ð "":›l¶AÌ™óâã£ñoÿ6ÅÅYX° 11á~?VVV‚‚‚Äë³fÍÂÆÅë‰D‚ÈårñúÉÈd2¨Õjñú©?mmÝØµ«;wÖ¡¼¼VÈd28.ñq:]Û„EDDDDç†MDD4£¹\Âl#³Ù†ü£Ï?¿ •¥FII.ÌDqqâã£&|,‹Å2êºÙl†R©œðóúÃÀ€ k×îÆŽuغµ­­J©T §sxþÓÈ  ÒÓU“½T""""šæ6ÑŒÖÞ>ÜžæpAŠÇÔÖšÑØhÅ¿þµn·IIJ”–梸8 fžÑ±ññÇcÅŠèééÁ‹/¾ˆ;î¸ã´ŸçÃ?Dvv6fÍšuFëé½÷öbûv††¤Ø¹ó-H¥Rq¸¸ÛSïïwLx DDDDtnaØDDD3ZKKç ïYÅÓÒÒwÞÙµkwÁíöââ~‚7ÞØŽ«®ºaaÁ§¬Zµ :óæÍí·Þ «ÕzZk¾÷Þ{qóÍ7û%lR*#¡PØa2…8u¸t¬·ÞÚŽ!ÄÄ„!&&ÑÑaˆ‰ Ctt á<:: AA² ¯•ˆˆˆˆf†MDD4c 96îÇûZî|äò8ÈåRÈå§RV¬X+V`pp;vì@LL Î?ÿ|@bb"<øØììlôööŠ×ç΋¶¶áÙHâåÄÄD8ÎQÇÚºuë¸_“J‰Ñ#ž$<'xôXn7°qãQô÷ÛÑÕ5›m`Ôkñ ƒ¨˜˜p1:Q8uìmþ˜CEDDDDSÃ&""š¶z{‡ÐÒÒ ½Þ ƒ¡--0:`0çfóÉwx;©46|ƒ+掻r'44eee:®?Ùí.ôöŽ\ûøƒ&hmíBkk‚ƒåÐj(,Ô >>Je¢¢B‚ðð`ÈåR8.Ølèî>µ´t¢»[©l¶ôô ÷8ÑÑ¡c*§Fžÿ6áñ‘‘!ø‘¿I<Çûx’ˆˆh èêêƒ#ƒA•ZZ:ÑÜÜ––.tvö‰‹‹„Z…˜˜p„„ÈàñCC´µÙÐÜÜqÜjœã*RS#°wïj8]gåµM¦ë®[ £1 Fc<úûíc†€ŸÌï%fÏNƒ<£±Fc †N´¶vÁf‚¤¤Xhµ h4 hµ $'Ç")I¸ž”‹  ™H ¦l¶tuõ‹¡Ôðýƒèîîo;CJ.—"66 E8bc#+œ+•ç‘·û+—Kýòý%"""¢Qö2l""¢€ioïñGÃ’ÁÐææ èíH$ÄÇGA«U@¡Gh¨0?ÉnwÂf€ÙlCkk—8<**©©qÐhbÐÒÒ‰ÊJã¸×$C^^"êêLèînÀCÝ‚»îZ†éY üñÇßà‘G^€Ù‚ùó3Q_oCºñü ..þóÕ((Ð %E ™lt@Ó×'T—µ¶v¡¥¥Fc7 †´¶ ¡TKK稀H©ŒDùB¨¤$´ÚX$$DŸ´ŠÌnwާ|T?:;ûÐÑ!œwu çý°Z{ÑÙÙ'þ, ¥2ÒF Q#êásá¶ÐРq~版ˆˆÎY ›ˆˆèì1™lÐë­Þðht‹[ss††„YD2™‰‰1HNŽ…J…ˆˆ`H$8.Ølƒ°Z{ ×wÀbæI$$&Æ ==©©qHK‹Czº ‘‘!hkëÆáÃ-ع³55&H¥’1³˜ÆËíîÃÑ£ÿ¥2ÂoߓɿñxPZz+êê"ÏèëŠptw sšBBäÈÉI@nn"òòÅóÔÔ8H¥'ž¹ÔÑÑ'O¾Š(ázZ[;a2ÙÄ P*•@­ŽFròÈê(å¨j©øø¨Óžñäp¸ÐÑÑ'†PÂyߨۄËÃ÷uvö©ˆ >aå”PY5Zù =ýo<ÑôۉˆˆÎœÍ6(†IMM¹^o^ß½Þ*†IAA2$%ÅŠ•,!–Áét£¯oVkôz+šš,âׄ„È‘–¦BZÚp˜ä –ÒÒâ,‡^oÅÎõر£»vÕ£±Ñ‚  æÌIÁÂ…™(.΂™X´èñQ-w'#—K!‘HpùåIxþùûN£ýnêZ¹r%l69ÚÚ²`2uÃéø¶yóƒHNVB§kƒNg‚N׆êj#t: †Nx<„†‰!T~~"rr—'TB,„òq»=hoÚGVDùB©ÖÖ.˜Í=âŸEP M ’“•b›ÞÈj)…"üŒ¿_>G ŸººÆ†Q}c¬ŽŽ>18ó ’©œR(Ž «ÆVVç{GDDD41l""¢³Û0:GIVïI¸ÜÕÕ`¸Ò(5U)¶¯…†ÁíöÀnwÀbéGSS;,0»ÅÐ@¥Š¥‘aRzzbƬ§¦Æ„;ë°kW=vì¨ƒÑØ…9æÍKâEY(.ÎÂüùéõu·Þú/|üñÁS¾^¹\†””X¼üò8xp3V®\9cÂ&xá…WðÐCïâƒöÀ)_[TT(ª«ÿxÂû{{‡P[kBU•µµfTV¶¢¦F¡¡ Hž‘›+„Q¹¹‰HMUžQe’¯MïØ Ê`è„ÑØ%þ<úŽ=²Mo8ˆŠF#\ >ÉÏ\_ß·Rª÷8Õñ«ªúúƶùùª£ââ"Åsµ:J ¨TªH¨TQâ}ãbODDDt–íž(ˆˆÈ/ÜnL¦n1<$éõ0™ºáv DLL8ÒÒ⚪ÄâÅ9P«ÏGp°.—==B…Sc£[¶T‰»ÀI¥hµ ¤§«‘™K.)DzºJl‹ˆ8ù.bÍͨ¨Ð¡¼¼Û·×ÂbéEDD.¸ 7ܰ‹ecÞ¼TÿŸ3›m»vÕA"9y¨"•Jàv{pÕUà‰'~Œ°°`|ð8î“ Ÿ7/ ï¿¿K–ä!.nl^ddæÎMÅܹ©£nïíòVB §ªª6lß^‹–!„ B ·ã%'Çž0„ ’yvT'\ïÈùQ#ƒ¨––NìÙSƒaôü(…"Z­bTÕ¯ZÊJI€‚ˆˆ$'ÇŽûkìvç˜0ÊjíƒÕÚë­ ê…^oÅþýMâõc+¨¢¢B½aT¤HÅÇ ×ãâ" TFzªH(•‘ÓvM}¬l""šáººú½-jÃÕI¾¶7ƒ¡vûpÛZjjœX”’•*€v»mm]hh° ±Ñ‚¦&‹8?I.—"9Y‰ôt22THK¤Œ µØî6^ÝÝýض­ååÕ(/ס±Ñ‚°°`gbñâ\gaöìäî"60`ÇîÝ ØºµÛ·×àÐ!ÜnrsÐÐл}l°$CPÏ1Œ:^`5² Úú|Á“Z%†RññÑbh¥REA­Ž:eÕ"Íh ›ˆˆ¦›mMM¾ª"+,Ðë…@¨­m¸Õ-..rTä;ˆÅà CǨ0©±Ñ‚ž!Œ –#-M¨Hò…J¾J¥¤¤Ø3ªd9–ÇãAU•ååBkÜÎõ°#=]…ÒÒ\””äbñâÄĸ³Ó鯡CÍØ¶­[·Ö`ïÞF Ø‘’¢ƒ¥’’œãÎ{Ú°á n¿ýux<±åž{¾ƒûî»ô¸¯Í_a“Ãá®]õX¼8ç´¿¶¡¡R©iiqZõ×^o¾QŒ œÆ#''[¶ü—x½¶ÖŒÍ›«°eK¶o¯ÃÀ€”•`éÒ|,\˜é· ˜îî~1€“ ç&“ €Ð66²Êw®ÕN,ü:‡Ã5ª"ÊhìFkk'ZZŽ??***II±HIQŠm{¾Ö½¤¤X$$DC&›øß/ëë‚Ùl«§ÌæoXÕ‡öv›Tµ·÷¢»»Ô׆†A¥ŠDBB´·O¸7ör\\ÄiÏð"""¢)aÑTa6÷ ©Éâ ’¬hhh÷ž[ÐÑ!ì¤&“I‘”‹ôôá¡ÚB@¤BddÌfêę̂¯7£¡Á‚úz!Xò  FzzÒÒT£¥ôt5´ZÅYi2»P^®CE…pjoïRÅ‹sPZš‡’’Ü¶I¹ÝTV¶zÛâj±sgzz‘‹.ÊöV/åŒ+Œ±Ù‘Ÿÿ@­ŽÂ /ü‹eyœÇã^ß—_^‹¿þõ $&ÎGHˆ 99] :ñ|£ãq¹¤8r$*U?´Úñí†7’Ý.Ãjt :Ú~Ú_ï³nÝ:\sÍuˆ‰¹|P 'Çã™g®ÃOzáqïrbçÎ:lÚT‰¯¿®Dm­!X¼8ee(+Ë÷k œOww?ªªFP&ètFqVXtt(rr„ (ß\¨¼¼D$&Ž !Ï–þ~; †qfTk«PÕÜ<¶]O.ªOH%'+Ç ½Ÿj¬Ö^X,½0™lÞË=£*§|·[­½£* e2©Ø¶§VWI -|QP©"¡ÑÄ .N¸Ì]úˆˆˆ¦<†MDD“Åíö µµK¬,]¥d¡¹wîÑp äªææodF}}»xòUR„„È‘‘¡Ff¦Ú{.„IªIy³ív{pà@¾üò6n¬Ä‘#- ‘cÁ‚L”– ­qEEI'|ÃXSc¶mµØ¶M˜:;ûE‹²pñÅ9¸øâläæ&žÑÚ.¿üàv{ðæ›·!66&“ ÕÕFTU ¡Å¡Cͨ«3iš7ÏŒˆÇ žõø„ (‡³fY¡P žÑš·nMY{fÏ‹/ÆwÞ…‡~kÖìWà¤VGaïÞß»R©¹¹›6UaÓ¦JlÝZƒ¾¾!dgÇã’K PVV€â⬳:”º³³O Ÿª«ÛPSÓ†ª*£8_,:: ¹¹‰ÈÏOÕŽw¼J¸³ÍårÃl¶Á`èH ÕQ¾@ÊWuÃÌ}TJŠRÜaÏHÅÇGM«ê _è4ºJªoT%U{{ÌfÛ¨¿R©ÄÛÊå  „–¾„!˜Î…YS Åñ+$‰ˆˆè¬cØDDäoB dAc£¬0ò 莤áPI¨­RE¢©ÉŠººá꤆†vÔÕµÃdfØø†rgfª½§xdfª™Ö*”NÆfÄ–-Uظñ(6n¬„ÕÚ‹ÔÔ8,_^ˆï|§è¤!CS“۷׈ÕK&“ ‘‘!X´([¬^*(ÐNè5 :ðÍ7ÍØ¹³mmÝ8z´••Fôö _P n7àr¬\’@&“à­·n?í¸úúvüô§Gk«0øúÛoÿßqwsË.{6A&“â¿ÿûj\}õ‚3zǃ'žøÏ?ÿ5Nö?™LЇ^_þ²ìŒŽãkf=U¢²Òˆ9Š‹³PVV€K.)@vvü¾ŠÓÓÙÙ‡ÊJã1ÃÉÛ`µ !TLL¸X•Ÿ/Ì…*(Ð@©Œ˜”õˆÍ6àmÍ®òUI57wÀl¶‰¡ap°Ü>)FR¾P*9Y9mwŸëí‚ÉÔ-VMµ·Û`µ ƒÞ}í}f³P55r‡¾à`¹ØÊ§RE!>>ññQÞÛb V ó¥â㣧|åÑ4ð‰ˆèL˜Í=hhhÛÕ-¨«¥¡Ý)**tÄ m5²²ÔHO*¢£ÃÐÒÒ9*Hò]6:ÅÝÁ´Zň ¥áSjj\Àw†jhhÇ—_Å„LLÏ IDATW_Á®]õp»=¸ð ,_^ˆåË OX}d2ucëÖ±z©¹¹¡¡A¸ð oåRÎ;/Å/3¢|z{‡›+Ì ’Ù2þx$ ž{n%~üãù§u¬}ûšpÝu/b`À§Ó…˜˜0TV>yFë€ßüæ}üïÿnƒÃá†D"Á¯ý=Ü{ïwÏøù|þú×/ñç?v™TR©O=u®¾z¡_þ,ŒÆ.oÕS¶m«AWW?RR”Þ!ãX¼8gÒ‡J[­½¨ªjó†O­ÐéL¨¬4Šó‡Ôê(äåiŸ?:ˆŠŠ ÔužˆovTK‹Ð¢'ì¨×%†RC§øû^ÏÈj8R@«õî>9½Y,BûžÅÒ“I¨’jkëJùæNüÙ(_å ª|¡Tbb Tª(¿þn"""š¡6HGG,¨«3£±Ñ2*Xòµ·„‡‹µ}¡p9*U$L&›·Ím¸JéØ*'¥2jdgÇhž/,lê|Úî«TÙ¸ñ(¾üòêëÛ¡P„£¬,ßùN–.Í?nÛJGGŸØ·m[ jkÍ ’aÞ¼4””3—æÏOCpðÙ­ºxãíxè¡wÇÕ>&‘HðÐC—ã®»–Ö1þïÿãÖ[ÿ§Ó ·[ ‹‹³ðþûwÑšàõ×·ã·¿}Oœq#‘HpýõÅxòÉ«&hür¬3a2u£ºº ••Ây¾ Ê×ꚜ뭄҈!TNNBCOûÙÖÑÑ7*|ò]ö|s®a¨·ohùÈ@ÊwJLŒ™’ƒÌÏ„Óé†ÕÚ³¹Gœ%%TMõ ½Ý&C7™l£Ú% ÔêH¨TBŸJ­Vá+¥C)µ:ê¬ÿN#""šÂ6ѹÍáp¡±Ñ‚ÚZa¨vm­pª«3™”‘¡&ùf uuõ‹3”FV(Õ×·‹oN#"BFU(ee©Åç˜ÊsE¬Ö^|ýu%6n<ŠÍ›«`³ "//Ë– ÕK^˜1æÍgOÏ vî¬óV/Õ ²Ò©T‚Ù³“Å™K dNzÛŠÓéÆÒ¥Bc£å¤“T*Ám·-Å#\qZÏÿúëÛñðÃïÂãÞËð³Ÿ]ŒÇûѯ{÷îz\yåsǬQŠeËòñâ‹¿˜pÀñî»{qï½oðÀ›A"‘`Û¶‡!‘Hðüó_cíÚ݈‰ í·.Å 7\ä÷Ê«µ[¶Tãë¯+±eK5¬Ö^h4 oÕS>JJòØj"ǃææTW 󽪪ŒÞ¹P&ØíNÈdR¤¤(QX¨õÎ…‚¨ÌLuÀ«OÆnwŽŸF¶ì WHù‚ñ  ™@%' UQ©©33ŒipгٓÉ6ê¼­­íí=â¹o6˜R) 9OHˆF||4c…„„ñ¶„„è)RMÃ&":7X,½¨©1y!!ª©1Á`è€Óé†T*ARR,23ÕÈÎN@VV<²³…¶·¤$œN7š›;PScB]HÕÔ˜ÐÐÐ.î,GzºJluó…R™™j$$Dø;0~uuf|þù·øüóÃ8p  AA2gá»ß-²e…HM½óÛÀ€»w7`ëÖìØQ‹o¾i†ÛíA~¾_œ’’\,\˜ð°6n¬Ä 7¼tÂûår)V¬˜‹¿ýíúq[öxþõ¯[ÄûÍæ¼ôÒf¼þú6H¥Rüû¿—ছJÎxÕɸÝ:ÔŒM›ªðõו8xP‰˜??¥¥y(+ËÇœ9)SfG2§ÓÆF‹> çhl´Àét#(H†ììxää$zƒ¨äçkš7e^ÃÉx<˜Í6èõhnNÂPóáË' £„óØFù8.X,=hmí†ÅÒ£qø¼½}8œjoïxGG‡ ¢â㇫£|ç‚s¥ˆˆh:aØDD3‡ÝîD}};êê„]Ú|JµµfØl†ç( aR<²²„Sf¦¡¡AèîîGmm;jkMbµ“Ng‚^oçüŒ ¥²³‡«•’’b§í©ÊÊV|òÉ!|úé!TU¡REâ»ß…eË QZš;j–ŽÃá¾}ضMê½23ÕX¼X˜¹tÑEÙg%ˆ˜ǃµkwãé§ÿmm]£¶^„Ö± .HÇÚµ¿w%ŠÃáÂý÷¯Å{ïí=aµÔ† ÿùóÓ'´ö9s…ÅÒ3æö  4š¼óÎcBÀÓUQ¡ÃÕW?x÷Ý;qÑEÙcÓÝÝ×^ÛŠW^©@¿×]WŒÛo_Ф¤Ø ûdººúQ^^-îrg6÷ ..K–äá’K °dIÞ”ûY„Ÿ ®Í;ªÕ»K^ôúx<„…#''ï¹yy‰Ðj^úi9^52:U52šéa”Ëå[ôFžŽ­–²XzFýž Õª­6‰‰BÕTBB c¦í x""šQ6ÑôÓÝÝšt:jk…óº:³8X[&“"9Y„rr™/V*%$ÄÀ媔|ÕM¾j'Î$îNä ”â½¡Òp05>]öx<Ø¿_Ï?ÿŸ|ò -ÐjøÞ÷fãòËÏÂÃíqn·ß~k@E…:ìÝÛˆ;’“cÅÞ%%9Ù>~¼êëÛñë_¯ÅîÝ øÑÎÇ{ïíU…$Czz6løÏqW`õõ ᦛ^Ŷmµâ@÷ãÑéþ„Èȉ ¾¾æšçQ^®;î}r¹ÑÑ¡xë­_böìä gïÞ<õÔ§X·îΓ>n`ÀŽ5kvâ…6¡½½?þñ|Üyç²³¾»œÇãAU•›6Uaóæ*ìÚU—Ë9sRPV–K.)Àܹ©S:°èëBM@ 󠌨ªjwšŒŽEn®0”¼ @ƒü|- 4SºÝödNF57wˆs¤NF¥¦ -{çJåãñxÐÞÞ;ªJªµµ K/Z[;ÑÞî»>:”R*# ­VµZ8OH)Føøh¨Õ‘ã®Þ$"": ›ˆhêêèèCU•µµfètmbÀä{S‚ììää$xƒ µ7XR#8XŽÞÞ!ÔÖ·½ ísB ïÍMBB´$ •’’b§E‹Ëéðx<س§ë×ÄgŸ} £± éé*\~ùy¸üò98ï¼ñÍGc£åå:lݪÃÖ­ÂÎaññQ¸è¢±z)-mb•4“ÁápaõêxöÙ/‘““€U«®Æyç¥à?þãM|øá~8.ÈåR(øâ‹û ÑŒ¯ªDXV£©É §óÄ;ÛÅÇGãàÁ?Løu<þøüã[`·ÿX2™n·o¾y–,ɛбœN÷¸wÛr8\xÿý}X½z#ÚñýïÏÁÝw/Ü9)ZÃxõõ aëÖlÚ$ onî@tt(JJòPZš‹¥Kó‘’¢œ”µLTwwÿ¨ä¾å¾Ùq 1((Р°P+%ÏËKœöC¨OF57w µµk\aTJŠññÑçTåãv{Äj(“©­­BÛ^kkÚÚº½'›¸Ë" |/Õj¡2ÊD%&F#!!Z­HiµlÝ#"¢3ư‰ˆÏd²“ÚP[kFuu›XeŽœœäæ& ;;yy‰ÈÎŽGJŠC§·mÎ4ªu®­M¥‚‚dbÛ›¯Ú);;™™ñSbŽÐÙvð ë×ÀúõÑÚÚ…ü| .»l.¿| ´„ÍÛ¶Õ ¼\¨^jnî@DDŠ‹3QR’‡’’\äç'N«OÂwï®Ç¬ƒÁÐûïÿ>n¾¹T QŒÆ.,\ø8œNÂñaý§µûÙ-·üŸ|ò ¤RÉ Ûç$`éÒ|¬YsÛ„_ËÚµ»ñ«_½}Êôär)öìytÒ«ÌÜn>ýôž{î+|û­K–äáî»—·ïlª­5{[î*±sg=úú†ž®BYY>JKópñÅ9®2›lFcª«Ûpôh«· J¤ìv'är)ÒÓU((Ðz« 4ÓjÔxœ*Œjié[œOF%$Ä̘ïË™tˆáSkkÌæ]0™l0»¼a•M ÷áCFá £b¼ízÑÐhbõ”J5ˆˆÎ ›ˆhò´´tB§3¡ººMl«©1‰Ÿ¶*•ÈÏ× ;;¹¹‰Èɪ–c00`G]]»7H2¡¦Æ,îþ60`ÄÅEŽjwó…J))ÊsîÓîÊJ#Ö¯?€>:€ÆF 23ÕøáçáŠ+æ!//vìÚU­[kP^^£G[!•J0wnJJrPR’‹ùóÓ§ô.Z'b³ àñÇ7`ÍšXº4üãUÇgôû߈—^Ú‚wÞ¹‹çœÖ1ÜnÞ{o/ž|òcX,½Çm£ –á–[–â7¿YqƯÅçСf|ï{O÷¾  Ünn¹¥÷Þû]DG‡Møx±eK5ž}öKìØQ‡ùóÓpÏ=ßÁòå…“T:.ìÞÝ€òòjlÙRÇ J%¸à‚ ±êiöìäiù»Áét£¡¡••F1€ª¬lçAED„ 7W˜å   µP*'6H~*ªzÎ,ŒJMU"-M…ÔÔ8¤¥ÅA¥šz³¿Ájí…Ù܃––N˜Í6BÅ”Édó†T6´·Ï“J%â©„„$'Çz[öbÄöGFÁYRDDç†MDä}8zÔΈÊJáT]mDoï¡uÍ&åæ UJyy‰ˆ‹‹D[[7jkÍÞ“Il}kié‚ÇãAP ))J±uN˜©$´ÀM×™&þR_ߎ>&® Éɱ¸âŠyøáç¡°P‹C‡|s—ª±gO#ìv'rrPR’‹ÒÒ\,Z”í÷-í'Ûúõñè£ïÃãþð‡+qå•çŸð±½½C¨¨Ðáûߟ}ÆÇtàÅ7ã™g¾„ÛíßÔ°gž¹W]uÁ?¿ÏÀ€ÙÙÿ5jΔ\.…ËåÁå—Ÿ‡‡¾ééª ÇŸöíkijÏ~…¯¾:м¼DÜu×2\qż€U@X­½¨¨ÐaË!|jkë†BŽÒÒ\”–æaéÒüi7œûX}}CÐéL8z´UUÂÎxG¶Š;fªÕQ£ª  4ÈÍMDhhP€W~ö¸Ý˜LÝ0:OFED„ˆÁSZZܨË))Êiß²èO‡ËDu¡­Í6¢]¯--0…Ë#«¤TªH1xJNŽ[ö´Z4šhµ± ¤ˆˆf†MDtæÐéÚ¼sF|mÃncc#PX( ¸ÍÏOD^ž0EE…A¯·Š­s#‡}û©˜˜pdg«Å9J™™B¥RZZÜ´¬¶9[::úðÑGûñþûû°o_¢±bÅ\\yå<ÄÆ†£¢¢:lÛV‹înaî’¯-®´4‰‰Sw¨÷é0:ñ›ß¼‡¯¾:Šk¯]ˆGùbb&'|´XzqÑEcÞ¼Tlß^ ‰D"ëýòËûQT”ä—ã\pÁÐÚÚ©Tǃ¢¢$Ôյ㼠?ýé…~9ÆÙPYiÄêÕ_aƃÐjcqÇ—àê«üMeU•åå:lÙR…;ë½^<–,ÉÇÒ¥ù(.ε ãtf2Ù¼Á“üû~g: “I‘š‡¢"-òò„Áä……Z¤¥©Î‰–3—ËÖÖ.45YÑÔdAS“z½Õ{Ý*ÎÌ’J%HLŒ9&„bUÔ©˜Í=hkZô †N´µuÃh)_;ßÈ@J©Œ€F£C¨ÄD_ %캗”;£ÃQ"¢„ašÛíAS“E “|oV-p¹Ü Bnnâ¨OËóò4ˆ‹‹Dc£ÕÕFq“o®Òà ”+V6eg ÕJ¹¹ Sr+ó©Ânwâ‹/ã½÷öaÓ¦J„„Èqùåçaùò"Øí1`jiéDDD.º(%%¹()ÉE^^b —ïWN§¯¾ZU«>ƒFƒU«®ÆÂ…™“º†‡~Ÿ}vÛ·?Œææ<öØz|ýu% ¡a•ßB•+¯|»w7 ))¿ÿýqÙesðàƒëðõוغõá)ÿ¬©ÉŠçŸÿo¿½ En½u)~ö³‹§Ä ¥¡!'vﮫžŽm…\.ÅÂ…™()Z’fTøâr¹ÑØh+O++…*(½Þ ·Ûƒ°°`äæ&x§WC©ÕQ^ú¤²ÙÄàid¥×[Yå'K¯83j8êòR6´¶vbhh8Š@bâèv=­6Zm HJR ,ŒƒÍ‰ˆŒaf6÷ ªªuÔ,΄»ø xa¡oˆð ¸F£@c£:]›8‡©¦Fhs8\J%bë[nn¢÷$ ûž o4§ǃ]»êñÞ{û°aÃôõÙQR’ƒ¢¢d 9°}{-*+É$˜7/ ¥¥B¸tþùé3vpë¡CÍxàu¨¬lÅ=÷,ÇÝw/Ÿô7tõõíXºôOøÓŸ~‚ë®+oß¾½o¼±Ï?ÿ3¿ë…6nº©D¬î3›{pñÅOˆ¯:0™lxùå-xýõmÉd¸ñÆÅ¸é¦’)0›Í=غU‡M›ªPQQ ³¹qq‘()ÉÅ’%yX²$oÆTk`À.¶âùvÄ«¬l…Å"lØ)†O……Zj‘››ðJµ@p:ÝhmíB±*Êÿ¬Ö^±Ê·ËžpY¤ZZ:ű@¡©„!JNV"))IIBÕ@"¢³ŠaѹÊãñ ©ÉŠÃ‡[päˆp:t¨f³0ô3!!yyšQÕJ©©q0:¡Óµ‰UJÕÕmÐë­âvé©©qb•R~¾FÒ=Õ«.¦*½Þеkwcݺ=0:‘€ÔT%zzqð ‡ yy‰båÒ¢EÙ3>Àëï·cÕªÏðÊ+å˜??«V]ììø€¬åæ›_C]_}õë€ šþË_¾ÀK/mÆöí¿™RÍ©tw÷ãµ×¶âÿ(ÇÀ€+WãöÛ˦ÜÜ$ǃÊJ#6o®By¹»vÕahȉ‚Xõ´pa振¤°XzG|Ñ&†QƒƒÈåRdfÆ£ @ƒ¢¢$hQX¨F3µþ,'ÛéVE¥§ûª¢T£ª¢Ø:>>}cÚõZ[;ÑÚ:\)52òí¦—” ­V!†Q¾ÛMÃ&¢sÃáBM ß~kÀ·ßpäH ŽmEOÏ är)²³PT”„¢¢$Ìš¥EzºKª«Û¼ó”„󿿏ÝÂnßnoBµ’P±”•ÏÿûÝîħŸÂ[oí¶m5ˆˆ…Z ³¹½½v$$Ĉ•K%%¹HHˆô’'ÍÆ•xøáwa³ â‘G~€k¯]8黜ùìÝÛ€+®xÿú×ÍøÎwв@ß.¾ø \vÙ<ñÄ¿lgª¿ßŽ7ß܉^Ø„ööüøÇóq×]Ë•˜ñT|;9nÞ\…Š *+ ‘cÁ‚L,Y" /(Ðìçr2¹\n44-ÖGŽ´ ²R£ZZ:Õ%³f%ª„ÊËÓœ“UPÇ:ª(F1¦5Ïwy:ÌSÅÒë  º`0t¢¥E8µ¶vywßë7b ‘#9Y)ÎJNV"9ÙW‹¤$4'": †MD3MOÏ ø_ÕRU•‡ aaÁâ'ϳf%!#C™LІˈj%³øF!44HÜéM¨VŠG~¾iiªÛšH••F¼üò¬_ƒƒË18è@TT(Š‹³Ä€)7wfÍ]³¹>úÖ¯?€þp{ìGãñxðÃ>‡Ö­»3`ëðyë­xðÁuØ´éÁ)ÒœŠÃáÂ{ïíÅêÕÑØhÁe—ÍÁÝw/ÇìÙÉ^ÚI™LÝØ¼¹ååÕ(/×Ájíñ/]š‡’’<ÄÇŸ[sŽº»ûqäH+ªªŒâ¿G¾vl¹\ŠŒ 5 ´˜5+ ùùB5Õ*Úm¼UQ‘‘ÇΊbUÔD8®Qá“Á0|¹µµ ÍͰ‹W«£ÆTG¼~.}DDt †MDÓ™ÙÜ#¶À>lÀ¡C45Yáñx P„cΜÌš•„ôô8¡¿ßî§Ô®Ml™‹Œ Av¶P¡4\­”ˆÔÔ¸5w*jkëÆsÏmĆ a±R©sç¦â’K PZš‹¹sÓÎÙpÏãñ`Íšxüñ ˆ‰ ÓO^…eË ½,|òÉ7¸õÖáÓOÿç—èåÀårã»ßýo¤¥©ðê«ÿèåLˆÛíÁ§Ÿ³Ï~‰Ã‡[°dIî¹ç;X´(+ÐK;%·Ûƒ#GZΧ]»êátºQX¨g=-XyNVCø’9ÒŠÊÊV=*œFVAjQP EQ‘pžŸÏ*¨ãYÕØ86êî[•–¦BF† ééÃç3e·ÅÉÖÙÙ7*Œª£ºÄ0ª½Ý·[x{,÷†OB%´ê)¼ÍHIQrÌÍT ›ˆ¦ ›m‡5ãÀ&|óM3ÐÃhìqÛê´´8DG‡Áãñx·ºvwvö¢£ÃF çöU+%'Çž-SÓéÆ7ßè±ví|ñÅ·ho¦˜˜p,Y’‡«®º‹eñM€ÚZ3î¿-öïoÄÍ7—âþû¿ððÀÏÅq8\(+{ sæ¤àï¿!ÐËmÚT…•+_ÄÜ=é;ò-›6Uaõ꯰cGæÏOÇ=÷,Çòå…Óæ÷U¿;vÔaóæ*lÙR…ÚZ3‚±pa&–.ÍGII. 4^f@ÙlbUYiÄ‘#Â,(ߦ™™êQ³  4HJŠ ô²§´îîþ1UQV46¶£µµK Bâ㣑¡öPêQATTTh€_Åôåp¸`4vjÕó…S¾€ª¯oH|¼Räd%RR”HIÚóRSãÄÛfúF"š±6MECCN>Ü‚o¾ÑãàAáTW×ǃ¤¤X%A£‰Appz{ÐÐ l_íû4366ùù‰b…’¯Zi¦îž4ÕÕÔ˜PQ¡ÃæÍUض­Â€ÒØØp|ï{³q×]ßAFF\€W9uØíN<÷ÜWxöÙ¯PX¨ÅªUWcÖ¬¤@/KôÚk[ñ‡?|„òòÿBjêÔús»úêçÑÛ;ˆ?¾wÚ2ã±o_#ž}ö+|õÕQäç'â®»–ã?˜;í*þZ[»ÄAãååÕèêêGbbŒXõTR’Ë<ª šš¬â|AߎxÍÍ„p¾¨H+¶à%!//‘"ã`·;ÑÔdECC;,hl´ˆç--p¹Ü•*iiqHOW##ct¥P„øULÝÝýbå ¤š›;ÐÜÜ––Nñƒ(@ø?]JŠP%RJ†QD40l" 4—Ë Î$V-<ØŒÊÊV8.ÄÆF ;;qq‘J%°ÙP_/|2 ÑÑ¡ÈËv‹ËÏ× //yy‰|³`fs**ªQQ¡Cy¹mmÝ ‘ÃíöÀíö`Ù²BÜ}÷2ÌŸŸè¥N9;vÔáÞA[[7xàûø÷/ Ø.oÇÓÓ3ˆ‹/~?þñ|üþ÷Wz9c9Ò‚K/ý þþ÷pÅ󽿫¬lÅêÕBÛiRR,~ùËKpÍ5 ¦åæn·‡5‹áÓÞ½ p»=(*JÂÒ¥ù(-Íœ¹3‚Í6€ÊJ#ŽmÁÑ£ÂyUÕpTF† ……Z&‰ÉY5~‡ C‡>Õ×·‹a”ÁÐ!ΉR(ÂG´ä©½—…s¥2"À¯bft@¯·¢¹Y¡ †o0ÕámÕ£bb‘’+Q¾0Ê×¶Í*5" †MD“M¯·ŠÕJ6ãÛo èëBXX’“•ˆ‰ ‡ÇãÅÒƒ––N8nÉ›+Iäçk‘——ˆädþ'z*°cûö:TT‚«ªŒâŽ}CCN45Y ÕÆâç?¿×\³aàqtuõã±ÇÖcíÚÝX¾¼O<ñoSòçû©§>Å?ÿ¹ ;vüfÊ~ºï½obçÎz”—ÿ×´ aÆ£±Ñ‚çŸß„µkw#66·Ü²?ûÙÅÓúþ¾¾!lÝZƒòr6mªDc£ááÁX´( %%yl¹;·ÛƒÆF‹8êèQa0¹^oàÛ/³fiÅ]W³³¦]U\ 9n £*¡|ÕQz½U ¢¢£ÃFQéé*deÅ#3S…ØXQþ22ŒYuª0j¸]O)^gEDg Ã&¢³ÉnwâÀ=öîmÀ®]õØ¿¿ }Ë¥P©¢‚¡!Ìæ^ 9 •Jš'V* §DdfÆó?ÆSˆoð–-ÂT»vÕÃáp¡ @ƒââ, :Q^^£±K—æãç?¿Ë–rØú |øá~<úèɤxì±á?˜è%—ÉÔ‹.z¿úÕ¥¸ãŽK½œ2»°xññë_·ß¾4ÐË9«L&^zi3Þxc;d2n¼q1n¾¹tFTW47wˆ¿c¶n­AWW?âã£PZ*O¥¥yÜéê$l¶ATVgÖ9òó5˜5+Ù»;«0œ³òÎ4Vzv IDATŒËåFKKç1A”F55Ya·;Á_V–™™ñÈÌT##C¬,á|*Ìã›I0†C¨á=¡BÊd²‰‰ Grr,’“cŪ(†QDä ›ˆü©³³{ö4`÷îìØQ‡Ã‡ p8\Axx0úû‡Ðß/l™«VG!?_ƒ‚·bI‹ÜÜDþ‡kŠ2»P^®Ã–-B{œÕÚ µ: %%¹X²$YY øè£ýxë­H$X¹²?ÿùb¤¥M­™>S‰^oÅC½‹-[ªqýõ‹ððÃ+èeÐ}÷½­[u¨¨xxÊï5*°ü©««¯½¶¯¼RŽÁA®»®¿üe4E —æ¾–»Š **tؽ»v»yy‰(-ÍCiiŠ‹3–œ‚ÃáBMI Ÿ|A”Í6©T‚ôtfÍJC¨¢¢$ÄÇGzÙÓšÛí[óêëÛQWgÛóš›;ÄQ™™*dfÆ{«¡ÔÈÊŠGjj[IÏ‚¡!çq‚¨á–½‘aTtt(RS… ÓÒâ¼—ãš*„Qüó!¢`ØD4ìØQ‡¯¾:‚ôÞœ=ËebIyDD°·BI‹üüDäå s$fÂ'ï3ÙÈָ͛«¡Óµ!$DŽ 2Åa¾……ZìÛ׈—_.ǧŸ‚Fƒ[nY‚k®YÈ|NÂét㥗6ã/ù))J¬ZõS\xaF —uRÕÕmX¾|þç®ÅUW]èåœÒTŸ-u¶ô÷Û±fͼðÂfX,=¸êª q÷ÝËž® ôÒüj`ÀŽ;ëQQQ-[„Ö]¹\ŠùóÓQZš‹’’<Ì›2¥æMez½GŽŒ®‚jié ìØæ ž„v¼$¤§«X©ê‡ MMV1€ª¯oGCC;êêÚa2uär)’“•ÈÌT{Oñb(¥Õ*øçp–Œ £ †45YÑÜÜ!îrèÛF&“B£‰ñ†O*¤¦*GR@tNcØD4^v» _}u7ž}Ðë­tŠ÷K¥$%)qÞyɘ=;YØ’¢œQ»BÍT'k+-ÍÃÒ¥ùX° aaÁp¹ÜøôÓCxùårìÝÛ€yóRqûíe¸ì²9|sw êqÿýkQWgÆ=ÿŸ½ûkúêâþe ¢ì½7â¬"гúV_µÖ¶b[m­­ G«¶ÕZ«Õ¶¶ŽªU몭u¼âÆuˆEöÞ{ï‘ä¾¢"hà—„óy„Ää$çòK~'÷žë;óæ —ŠOE?ø`rsËpáÂb©9¹Ù¿ÿV­:…7¾êt3ìêêø8vì¶nýii…7®7æÏ!³=òòÊD³žn܈Avv 45Uááa+š})k·öV\\‰ððt„‡gŠfAÅÇç€Ç@]]ŽŽF¢>P..Â×|IŸñ(M**jDÅ'ጨ<$&æ"11_TèPQQ-Ç{ZŒ¤tt¨ÈÑžJJ*E…§g‹P©©ÈÈ(}àÚµ« ÌÌž %ünn.\ª'«} !¨ØDHóòòÊðøq„3–’“óQQQ†¿55e˜šj£W/“ú.ư²Ò•Š“fòÔË–Æ âÐh Eee- ÁÞ½7‘ž^„Ñ£]ðùçCÑ¿¿dÏÊ‘5øùçóøóÏ ¸¹Yá矧ÀÊJ—ë°Z%((S¦lÇÿþ7žžv\‡Ój<žÞÞ?ÃÙÙ;w~Èu8œàóð÷„­[¯ ::#G:cþüè×ÏœëÐÚU\\nÞnXŠŠ˜šöõzòð°¥Ùµ¯ ¦†‡èè,„‡§×Ï‚ÊDTT&**j ¨(ýgfAÁÅŤS,cíh……HLÌ­/@= •””‡êê:ÂFåÖÖº°±Ñ‡°G”>½Wë<žYYÅ¢âÓ³…¨””U~H«¯ßMT|j\ˆÒ¦%¬„H?*6‘έácddž<ÉÄýû‰HHÈEUUè:ªªÊ05í>}Ì0|¸¼½¨/†”jíÒ¸çg¢•–VãÏ?±gÏMTUÕâ½÷âÓO‡tºÙ"¯êüù0|ûíITW×aåÊñ˜2å ©™íÇØ1› ­­Žƒ?ã:œ6»t)¼gÎ,ùKKcˆÀÖ­WðàA <<ìàë;¶\‡Öîx<>LÖ?N…@Ààâb//;xyÙá7¬hVÎ+jØ /<%$ä">> ¹ÈÈ(‚@À   SÓ°±Ñƒ¬­…_¶¶ú´ä«ƒ”•U7)B5üœ–V(š¥ªªÜ¤GÔÓ‚”³‘|Tl"Gvv ¢¢²Do##3‘˜˜ >_øæC €1@[»+úõ3ÇÈ‘Î5ʺºôÉŠ´jËÒ¸æ”cÏž›øóÏ@ÀÇ{ÉÌNW!=½Ë—Ç•+‘˜<¹?V®/uoæOž|ˆùóÿA@À—pt4â:œWòöÛÛÀã pú´/סH„  XlÙrAAqè×Ͼ¾#1b„“Ô@_Wii5nߎÍ|JHÈ…ªª2 °Íêl®èNÚ&7·ì™&äéÏ@rr>MMÕgŠOÂB”­­>͸iGÕÕuHLÌŸâârD Ë+*jwe³±yv6”°enNMÊ;Š@ÀÍŠJM-DJJ¾¨•Ÿ_.ºnì(3³°°Ð¥¥nýwšQHˆd b‘=Ïî6)šæ^P |êÖMJJ (.®LJ‘‘–hYÁàÁ6Ð×ïÆñ# ¯£­Kãš“]‚;®áàÁÛPSSÆÌ™C0c†5ýn%O€Ý»o`Æ‹04ÔÂÏ?¿ww®Ãj³ÚZ<=„»» 6mzŸëp^Ù£G©øÏ6c÷îé;Ö•ëp$ƃ)ز%W®DÂÁÁ¾¾#ðÖ[½:]ßµŒŒ"Qá)((åÐÑé á1ÓÓÓFF²±«×**j•‰'O2ðä‰pTttêêøPQQ„££\]…}]]Máà`HEŽ™YŒ„á²¼¸¸œúç"3³Œ1(*ÊÃÌL[T„zvy^÷îôáSGª¨¨Ajja£™Q))ùHJÊGzúÓYQÝ»«ÃÊJº°´¤B!¡b‘nåõ³”„3–¢¢2—ƒº:>”•ac£--5TUÕ!5µåÐÖî [ ê[wçúa×ðªKãš“’R€ßÿGÞƒ¶vWÌží ·Î|"M=xŒ¥Ký””‡yó†cþüR{²´sçu¬_·n}CCé>Ùž3ç?NÃõëˤ6í%**[¶\ÁÙ³af¦yó†aòä7:åó$0DFfŠŠOwî$ ¦†=xzÚcÈ; dC…w1zö²'OÒ–†ÈHa(%%…&(GGCjªÜA*+kE³Ÿâãs—+êUUU @XÔ.ÉÓ¯/B ÿmf¦ EÅÎU¸æ'@zz!’“…Å'á÷<$% gF5¢´´Ô`i©#š %ü·ð;Í\'D¬¨ØD¤'@||N}cNaQéÙžzzpr2†££ºvUAvv ÂÂÒñäIä1`€%¼¼„…©ÙMŠ4õºKãš“–Vˆ/áøñû01é¹s‡aÊ”òdóU•–VaíÚ³8xð6¶ÅO?M†¥¥t4oNII% Z‹>pÇ×_ÿ‡ëp^[zz<=×á›oÞ§Ÿá:‰”””‡mÛ®âØ±{ÐÕÕÀìÙÞ˜:µs›kjx¸{7Q4S4""òòrèÓǼ¾ß“=úô1§“j1ãóHHÈ­/> P(/ ìí г§©¨åìlLýk:c Å¢Pññ9ˆ¥²²ŠJJ °¶Öƒììôak+ü²¶Ö£÷àóÈÈ(z®%,F¥¤ ¶V¸»´¦¦j£B”……Žh†ípHH›Q±‰HžªªZDEe‰>å OGttjjxPRR€­­>àädTßhSaai¸z5ÿþ…‚‚rXXè`øp' ê77+jè-åı4®999¥Ø²%ÿüsÆÆÝñÅ£ñßÿö¥§6:yò!V­:Xµj&NìËqD¯oõêÓ8zônß^!3³8Ö®=‹C‡Bü ºu£e/’™YŒ;®áС¨«+ãÓO‡`útZF gߺ‡›7cqóf ÒӋе« ÜÝm1dˆ<=íac£Çu˜2I `HLÌÓ'ÂÒ„¨¥£¬¬ŠŠò°³3¨Ÿý$œåädÔ© ¥\)/¯Ab¢°'Ttt6ââr›´´BðùÑ’<{{ØØè‹ Q66úPS£|qA 6–ONÎkTˆj˜US#,Diht-ÅkÜ#J—vÎ#¤yTl"Ü*.®Dx¸ð“»ðpa#ÍÄÄ<ðùhht““\]ME;¸ØÙ@II‰‰y¸xñ ®]‹Â;‰““ÃÀÖ1 #G:IõŒ "Þ¥qÍ),¬ÀöíW±o_ ºwWÇ¢E£ðÞ{©ÈÔFIIyøê«c¸u+>>ƒ°|ù[ÐÔTå:¬×Ö0 hÅŠqøä/®Ã›²²j¸»¯ÅÛo÷êU¸Gâåç—c÷îØ¿?rr >ùÄSêšÜ·§ÄÄ|ãHm-ññÂYP±±9ˆ‹Ëõ‡ª«ãCNN&&Ýaoo;;ØØèÕׇ¦&º¹ÂCVVI}ñ©i1ªa9¥ººÊs…¨§Kó ¨,é´¨ØD:NFFÂÂÒëwf–22Š—Á=-* wf17×nTLÏÀ… a¸pá ¢£³ §§aÜ0|¸#† q@×®ôJZµÇҸ攕Uc×®صë:”•áë;~8˜–´Q][·^Á¶mÿÂÒR?ÿ<ýû[r–ØÌ›÷>LÁ_ÉÜr‡ýûoaÕªS¸~},,t¸G*”–Vcß¾›Ø»7UUµðñ„Ù³½éâ9|¾¥ŠŠO¦€ÇÀÉÉHT|Çqœ¼Ü³¨†"Tqq%äam­'šÕ³§ \\Lèý‡x<RS “ØØlÄÄd×/ËËEuuÀÀ ›h^C!ÊÞÞ€ ß 3³ø¥…(55eX[ëÁÊJ·¾Á¼ðßÖÖzTü%²ŽŠMDüø|ââržÙò7ááé(.®„œœ,-uàâb Qq©¹é§ÃÇÉ8^X`JI)€¹¹6þóŸ^3¦'úô1§ÞKR¬½–Æ5§ººûöbûö«àñ˜=Û3gzÑ‹ü+ŽÇ²e~ÈÊ*ÆâÅ£1kÖP™šöäI:ƌو;>ĸq½¹Gìx<†_;;ìÞ=ëp¤Jee-¼;®¡  S¦ ÀüùÃaf¦Íuh©¢¢ÁÁñ ŒÅÍ›±¢ªo¼a OO;xxØÁÕÕ¤ÓíþÇ•ÔÔQ¨†Taaäåå`i©[_|zÚŠ–rK `HK+-ËϭÿžƒÒÒjÂæäŽŽ†¢YP Å(}}MŽ£'€pgㆾPOÍç6jVnh¨kk]XYéÂÊJ¶¶ú°²Ò…‰Iw:6Y@Å&òzjkyˆŒÌ¬ï­”Q¿#\ªªj¡¤¤CÑL%ggc89µø†1†‡Sqòäœ;†œœ88bìXWŒë ''£|tDœÚ{i\s†3gB±víYWâã=1wî0™XêÕÑ +ðý÷§qìØ}Œᄵk߆‰‰ìíä8eÊTUÕàÌ™b‹’$ Ó§ïÅ©SóñƲ3#­£ÔÕñqôè]üþûU¤§bÒ¤~ðõ ++Z¾Ý’œœܸ‹ÀÀXÅ"'§ݺ©ÁÝÝžžöðô´…µ5õ{êH 3ΊOOž¤#/¯ rrr°°Ðyf žp½vJ†ìì’úžPY¢åx±±9(*ª ÜmÍÑÑvvpt4‚> ©WŸ„àñHK+¨_V™‹ÄÄ<$& ÿ—'ÜøHYY––:°¶Ö{fV”pÇC--Ê#‘Tl"­WSÃCDDÆ3ŸŒ¥!&&uu|tíªÒh œ³³1 [½%:: §N=Ä©S¡HM-€££&LèƒqãzÓR)“7bpíZBB„[h‹{iÜ‹ÇcÕªSˆŽÎÂäÉo`Ù²±ôiß+ Á?žC—.JX³f"ÆŽuå:¬vqõj¦MÛ…“'çcà@+®ÃiWS¦ì@ee üýe·¨ÖÞx<Nœx€­[¯ 99ãÇ÷Æ‚#aggÀuhR!&&AAÂYO!! (+«†‘‘Vý¬'[xxØÑ1›YYÅvÁ{ò$99¥ ôìi‚^½LÑ«—zõ2¥%x¤  QQYˆÍFtt¢£³›%š ¥¯ß pp0„ƒƒ¡¨?5&—¥¥UHHÈít˜˜˜W_Ê5*ïÑC½¾ð¤'šec£ssm™[úO¤›Hóªªj™%z£–†ØØlðxÂÆÝO×û §\[Zê¶yI[FFŽ€S§":: ææÚ˜0¡/&Lè {{z³.JK«ƒk×¢qíZ4²²Š¡¥¥//{x{;ÀÛÛ±ÝwìHNÎÇš5gpáÂx{;à»ïþK'¯èÁƒ¬XqøøcO,Y2Ff—òùŒõ+ÌÍu°oßÇ\‡ÓîÂÃ3ðæ›ðûïà¿ÿíÃu8RM `8}:[¶ ..ÿùO/,\8ŽŽ4·µx<=JA``‚‚bqÿ~2êêø°·7€‡‡¼¼ìàæfMK»8’“SòÌ ¨t<~œ†œœÈËËÁÆF}ú˜¡W/3ôî-ì½I'¼’%#£11ÂTLL¶¨?Tuuäåå`jÚ™PNN™P66ú”G "0dd‰fA ›Ë —çefƒ1EEy˜šj×÷….˳²Ò…­­>tui·< *6aa)""£ÑT길ðxhjª6ÚɤgOXZê¼ò'áµµ<\ºŽÃ‡ïàæÍèètÅøñ}0aB_ôík.æGFÚ›@À–†k×¢qóf Š FÊì’¹çmØp »v]GpðòN·•ô† ±{÷ ܺÕù{Gø÷ß(lÞ| ¤`èP,X0Ræûu„””Q£ñ  8V@[»+¶…§§-<=íh—@ PWÇGDDBCSñøq*BCS‘ €A_¿›¨ðÔ° OS“–IJªÊÊZÄÆf‹fAEE gBåä”45UáìlGG#89ÁÙÙvvúíÖ—“¼žº:>’’òD3¡šÍÇÇ確º`lܽÑN‡ÂïÔhž´›d'@\\6BCSñè‘ð+:: <ž°°Ô»·Y£YK¦¦=Ú-–¢¢ <‚?ÿ B^^)ÆŒqÅôéps³¢O¥DZZ¡hi\PP,JK«aa¡ƒ¡Cí1dˆ<…„$¢ªªææÚõÍÆ… Ç{ôPç:T ¬¬§‰Þ«††¦"+«rrr°²ÒÍ~êÕË ..ÆPV¦%¾’¬¤¤QQÂâSdd&¢¢2E»R+(ÈÃÒRGT|rt4‚££!Í‚’`CZZaý‡Ùõ_9ˆÏAyy @OOC4 ÊÁÁ66z°·7 ¬Hs¨Ø$­’’òðèQšè“¢ðð TUÕBMM..&èÝÛ}ú˜£W/Ó; ÍÆž=7qüø(++ÂÇÇ 3fxЋŠ¨©á!$$×®EáêÕ(ÄÇçBUUîîÖ6ÌÞÞŽQÌaŒáøñX½ú4ä±jÕ„N±Ì«=ÔÕñ±wo 6n¼--5|ÿýDŒÓ“ë°:Ü—_þׯG#(è›NÛ·àÈ‘;Xºô(®^]›ÎѯŠ+·o'`ãÆ‹¸u+Xaá‘:”zˉS]÷ï'#00±xü8ƒ““<=íàéi‡­hÆ…ÉÉ)Ÿ P¥¥UPRR€³³1z÷6õ€²±Ñoó†4¤c  ÉÉùˆˆÈ¨/@e!22ééE--589‰¾àà`H½%\FFââr-Zj—ƒ’’J@÷îê°³.dz·΂²µÕ§%³›¤ANN =JChhJý§Ai()©„’’ìí з¯°¨Ô»·ìì :¼q_LL66mºŒ³gÁÊJ3gÁäÉýi+U Ÿ‹«W£píZBBPSã£!¼½1t¨ÞxÃR¢^ørñõ×Ç?tÇW_ý‡–̽¢  X¬Xq©©˜3gæÍÞ) -11Ù1âlÚô>&OîÏu8œîÄ·&&Ýñ×_3¹§S¸? 7^ÆõëÑèÛ× ŽÂðáŽ4û·”•UãöíxQ¿§ØØl())à7,ááa OO{ôêeJ}þ$c IIù¢ÂÓ£G©OGM ]»ª W¯§Å§>}Ìad¤ÅuȤJK«ñtöSxx:bcsPUU EEyXZê6šåìlD… )“SŠØØlÑl¨øø\ÄÄd£  €°9¹­­°ec£_ÿ]&&Ýé5OöQ±IÒ”–VÕ¯mO½È6l/ke¥‹Þ½Íê Kæpq1æ´ðl‘ÉÞÞ‹Ƙ1®ô‰“„*-­®ßÙ'×®E#-­ZZjðô´Ã!öðöv€¡¡ä½a«©áaëÖ+غõ ìì °~ýôécÆuXR)#£«WŸ¿ÿ#Œå‚￟ ö^mÒÄÇçäç—ãÂ…Åþ¸‹wßÝ£GçÀÃÖëp:ÐÐTlÞ|W®DÂÅÅ‹ÂèÑ.ô¼å䔊–Üݼ‹ììhjv›› ¼¼„Kîd}÷MiTWÇGttBCSE¾6lp£§§Ñh÷»>}̨¯Œ”àóHJÊGdd&"#ŸÎ„ÊÈx: ÊÅÅŽŽ†¢™Pöö´¼R ”#&FX|j(FÅÄd!7·  ®®Rߘ\_4 ÊÎÎffÚþ=™ iZl –-[¸ HêxxxÀ××÷•ÿ||.nߎÇÝ»Ixø0ÉÉù`ŒÁÈH«QÓDWWS‰iœ˜]‚U«N·©È4eÊ”ŒPvµe¼1Æ‘‰k×¢píZ4îßO‚@Ààêj oo æˆÞ½Í$z Û;w±xñäæ–béÒ1˜1óÅOŸéøõbÕÕ  Õ‡’ÖÖ%èÞ½Z¬·ïëë ±Þf{zZ\™ »¹OIŸÚ“œœ ¸¥]=z´]n÷uò[Q¡ŒÔÔ®((PE÷îÕpv–í´§¶æ7>>W´ä.88¥¥UÐ×ï&j4îéiçf{ IDATƒnÿ÷ÛY<›ßŠŠ„…¥?³ü.E´TËÒR}ûšcð`xxØÁĤå–”_ÉÐßââJQ¨†ÙPÑÑY¨©áAQQ66úpv6¦üJ™£G¢¤¤²~”°TTTâãsEÆ.]”êûAÂÝò+Mšyý½ß¤,œšš ???¼óÎ;•óóóƒ’Rë—ž0Æx„„$"$$yyePSSFß¾˜0¡z÷~*£««ÑŽ‘¿€áᅢñÓOgÑ£GWüñÇG­žÉäçç4®^CkÆ[AA9n܈ÁÕ«Q¸y3ùùåÐÓÓ€··#¦OŒÁƒm¥¢_]ë×_ÀŽW1l˜#Ž›ÓªYWtüz±.]ø°±)†ŽNääÄ;¡ÕÏÏ&Lëm¶'€aõê39ҹà M€äO[Ûb(* ¸£Ý4¼µ—×ɯºz- QQ¡„ÚZÉý@’½j~mlô`c£‡3<Àç ðøq‚‚⃥K¢¦†[[}èé§O_Ä ÞbŽœ´FsùUWWÁ AÖ4ÈZô»üürŅ̃  8|óÍqTW×ÁÌL®®&ppx:CÆÔ´‡h¡¤ŸeÝóùÕÒRƒ»» ÜÝŸn¤Àã ””‡¨¨L„‡g $$çÎ=¦üJgóÛ­›ú÷·Dÿþ–®S^^#ê›;wqö,åW´ôúÛdfÓ¡C‡àããZ]÷r>>>€ƒ¾ð:ÉÉùø÷ßHÅáîÝ$U@C£ ´‚››5´–Š^11ÙXºô(BCSðùçÞX¼xt›z¼ÈÉÉáàÁƒ˜:uj;F)Ûšo<ž÷ï'‰–Æ……¥AAAo¼aY¿4ÎÎÎFRµ$#&&óæýƒää|¬Zõ_øø jõÿ¥ã7¤íïûÿ»‹%Kþ‡+W–tèrŸÜjïçŸòË­öxþ«ªjqï^nތř3wöª«“Åvû¤õ^5¿55<Ü¿ŸŒû÷“™‰ˆˆ ¤¤€Ï@C£ àáa‹êê¬\9¯i åW¶Q~e[ ùm:³‰¼žêê:ܺ/j¼œœœMÍ.4È ŒÄ AÖpr2’è¥KϪ­åá·ß°mÛ¿pv6Æ¥K_ÀÑшë°:µ¬¬b\»k×¢ƒÒÒj˜šö€··, [¨««pf›1ư{÷MüøãY¸¸˜ àK‰ØÈ–ªªZ¬_ï½7ú²BZ¤ªª //{xyÙÃʪ >>)\‡DÚHEEƒÛ`ðà§3dªªj“ˆˆ }̰dÉŒë*‘»zµ'À¶mW°qã% l‹#G>‡±qËÙHûSTdÐӫƺu_ÀÍÍšÓÅéÖ­xÌû7ÔÕ»àôi_ôîM;Í‘ö‘—W†íÛ¯böìaÐÓ“¼¾x„B¸¡£ÓŒÕqi'”_ÙFù•\²q¶Ê†’%|ú©&Nì++]®Czm))˜?ÿ žÿ|(סB!„"Ó¨Øôääúõ+Â_¼Éu(bñ¿ÿÝÅ·ßž€¹¹.]ú‚ú™vSTT áÆ¬^=3fxr‘qqq98t(¿üò.TU•¹‡B!„™öÚMQâãã±ÿ~1„òbeeeøé§ŸÄz›X·nXoSZ•–VaÖ¬ýøâ‹#øðÃÁ8wn!§…¦ŽSmQTT„õë׿ôz-SoO=x‚Q£6 ** 'NÌç´Ð$ic­9§OŸÆÝ»wÛíö;ËØüáØÚàwÞà:©ñ*¯½ÅÅÅHOOo§ˆˆ8µ5¿¥¥¥xøð!åWJ´5¿¹¹¹xðàòòòÚ1*".mÉorr2BBB}UVV¶s„äu´õï—Çã!,, ÉÉÉí›¶æ·¤¤>Dnnn;FÕ>^»Ø;wŠ#–*))ÁªU«Äz›eeeX¹r¥XoSEDd`Ô¨ xð ÿû߬X1ÊÊÜNxëˆ1Õ%%%Ø»wo«®÷¢qJãMèðá¼ýö6ØÛàòå/ЯŸ9§ñHÚXkŽŸŸ‚ƒƒÛíö;ÃØ¼u+X¹r‚·ÞÚ KK\¾üE£m%ÉSˆ‰‰á: ©Æç °råI|ùåQÌ; ÿý)ºwWç:,Ò 0ưfÍx{;ÈL¿3ItîÜ9̘1¿üò ס1ËÉÉÁÂ… áïïÐÐP$%%!,, Û·oç:4"áááØ²e Š{÷îaÆ xòä ס1‰‡ŸŸ²³³E_ÎÎÎ\‡EÄÄÇÇsæÌAll,bccqîÜ9\¼x‘ë°ˆÀ××çÎCdd$?~Œ-[¶àþýû\‡Öjb)6 øúúBSSzzzøñÇŸ #F`ãÆ022‚®®.öíÛ‡/¿üººº044Ä‘#GD·søðaØØØ@QQ†††/|Óêïïkkk¨©©aÆŒX²d Ο?¸~ý:zõê888àôéÓ-ƾgϘ››C]]3fÌ€@ ÇS"ÑjjxX´è0–,9Š9s†áŸfA[»+×a5"®1µbÅ èêêBEEÞÞÞ¦ÿ?yòƒF—.]`gg‡C‡N%=z4þþûohiiáÚµk7nœèÿµvœ6§3Ž·’’JL›¶ †`ÇŽ±dɉš]"ޱöü˜‰ŒŒ|á8i¸ÝƒÂÚÚêêê˜>}:ø|>àÈ‘#°°°€ªª*&L˜€’’Q¬/:¾µõï¢9²:6€ˆˆ ¬X1žëP^IKǰ—±ÖŒ‡ÀÀ@Ì›7 ,€¦¦& °qãÆfcyÑ1³A¯^½àêêúÒÇtåÊ8;;CYY}ûö½ij)–¶Ä)M¤!¿÷ï߇¥¥%† ÐÒÒ›o¾‰ˆˆˆfo‡òû”4ä733>>>07Î4vtt„žž233›½ÊïSÒ_HHH€­­-ÊÊÊDï5^„òû”4ä722IIIX°`@__wîÜA¿~ýš½ÊïSÒßÂÂBðù|¼ñ†°„µµ5ttt••ÕìíHd~Ùs<Èšùõ ùûû3999¶xñbVQQÁY·nݘŸŸËÊÊbòòòìÛo¿e€mß¾`?ýôlýúõÌÆÆ†1ÆXii)SQQa'OždÕÕÕìÆL^^žåææ²´´4¦¢¢Âc,!!uíÚ•9s†UUU±uëÖ1vàÀ–Í444ØŸþɪ««Ù©S§˜šš‹ŽŽnwVVÀfÍšÅjjjX||<ëÖ­»zõj«ûÔ©SÙÔ©S[}}I””ÇFŒø…99-gW®DvØý`lÕuÅ5¦.^¼ÈŒŒŒX\\+--eãÇgŸþ9cŒ±òòrfhhȶmÛÆª««Ù¿ÿþË455Ù­[·XZZSUUe'NdÁÁÁ,&&†©««3ÆZ?NŸ×YÇ[||&ÊïSÒ’_Æ?~<›8q";zô(ûüóÏYŸ>}Xyyy“Ç$¡ù½'–bS÷îÝYmm­èwË—/g'NÄ4%-ù gƒ  nß¾Í455Ù‰'š<&ÊïSÒ’ß­[·25556vìXvòäI¶fͦªªÊBCC›<&ÊïSÒ’_Æ„µCCC6iÒ$fccÃ>ýôSi:>ßË2:kkk())‰~vqqi4½K]]Ø›ENN***PTTýÜ@EE<ÀèÑ£amm‰'6»Œ#99vvv¢Ÿåää`eeHOOotØÛÛ#--­Ù¸ ««Ûè¶dÕŸâƒvaìXWœ>í “î\‡Ô"qŒ©·Þz “'O†»»;ÌÍͱ`ÁŽ£èèhXXXˆ¾Ž9‚ââb€¼¼<ŒŒŒšÄÕÚqÚœÎ4Þ ÁGíÆ›oºàøñ¹ÐÓÓà:¤ÇX™ÖŒCCCÑ¿n+##£I'''­;¾µ6ÖçÉâØ,((Ç–-W0{¶7ôõ5¹ç•´t kÍkíx°²²‚²²²èg¤¦¦6ºÎËŽ™­õük¸’’–-[55µ—ÆÒš8¥‰4å·´´>>>˜>}:¾ùæ?~\tÏßåWHšò _“îܹƒ´´4\¼xûöíkò˜(¿OIK~ŒÜÜÜ0uêTøûû7yL”ß§¤%¿JJJPWWÇÉ“'1a¬X±ãÆÃîÝ»›<&ÊïSÒ’ß³gÏbÇŽˆŒŒÄñãlj°°0üöÛoM“¤æW,ŦüüüF?çææ¢GmºS§NaùòåX±bbccqïÞ=Ñ“ó, 4ú]ÃàÐÔÔlKAAºuëÖ¦Xd 'ÀW_ùaåÊSøúë·°qã{œï6×âSŒ1lذðóóCuu5Þ~ûm±âéé‰äääF_;vìðâ“íÖŽÓΊ1†_½ˆ%KŽbÑ¢ÑØ¼yªÄ7qŒ5 ñ˜yÕqÒ½{÷&Ûš6ÄGÇ·¶Ù¸ñ2TU•ðùçÞ\‡òÊZ:†‰óXôü¸ÊË˃†FãñËŽ™­¥¡¡Ñ¤@uâÄ Qo²–biMœÒDZòËãñ0räHhii!::Ó¦M{á}Q~Ÿ’–üþóÏ?vìÚµ+ „èèè&÷Eù}JZò›Ð¤¿š††cMî‹òû”´ä×Üܺºº (--mr_”ß§¤%¿¡¡¡8p ´´´ HÆ ÃǛܗ¤æW,Ŧäädœ={€pí?þøcÇŽmÓm¤§§ÃÉÉ žžžPPPÀíÛ·›ýC1bN:…¼¼<ÀíÛ· 999Œ9HLL ÜAåøñã1báà ‡*UJJ*1uê8qâöíû³gKÏI—8ÆÔÏ?ÿŒ¡C‡BQQ À‡~(jx9bÄ"** PYY‰~ýúáäÉ“-ÞfkÇ)ÐùÆ[]‹ÁÖ­W°qã{X´h×!µŠ8ÆÚóÚ2Nž5|øp9rD4³*,, 7oÞ€—ßÚBÖÇfbbþù'K—Ž…ºº ×á¼²–Ža¯:Æš“žž.j6_^^Ž]»v5W¯zÌ·‘#GâÌ™3¢¢ê;w0mÚ4(((¼4–ÖÄ)M¤%¿çÎCVV¾üòKäääˆÞ ü¾ˆ´äWYY¿üò ÊÊÊÅÅÅ 5û§ü6OZòŠQ£F‰N&KJJpâÄ Œ=å÷E¤%¿ÈÌÌDHHáûØS§NÁËË å÷E¤%¿½zõ­[·D9«¨¨Àùóç¥ëøÜ†5wÍò÷÷gnnnÌÖÖ–yyy16fÌV[[+Zר ..NÔû†1ÆBCCEëSSS™žžóòòb#FŒ`cÆŒaÖÖÖlüøñMzá|üñÇLWW—1‚ 4ˆõêÕ‹=z”1ÆØÊ•+™––9r$ÓÖÖf³gÏý?sss¶fÍƘ°O‰‚‚B£Ç2xð`™é¡“˜˜Ë^Ë XÍ"#3_þÚÚØ³Ic*--™™™±ž={²ádznݺ±]»v‰®»a橩ɆΌÙ;ï¼Ãø|>KKKk46žíÙÔ–qÚ™Æ[YY5{ÿýÌÖv»v-г8¸:~=?fZ'Ïß.cŒ 2„ùùù1@À|||˜––:t(333ccÆŒa›6mbŒ½øøÖ–XÿØlËßwG˜1c/:ô'Æãñ¹¥‘¶ŽÏ–Žamc-fnnΜ™§§'344dC† aUUUMŽi/:f>«¹žMÏŽ7Æ[°`ÓÑÑaÇgšššlÛ¶m/¥¥ËZKÒzFHK~W¬XÁ4ùš;w.cŒòû"Ò’_ÇÆÏtuu™——ÓÖÖfï½÷ž¨ å·yÒ’_>ŸÏ¦L™ÂzôèÁ¼½½™ŽŽŽ¨2c”ß‘–ü2ÆØ˜††2d300`ï¾û®¨§å·yÒ’_@À>ÿüsÖ½{w6lØ0¦¯¯ÏÆŒÃ*++cR‘ß×oÞ ªªŠ]½zµQC­¶*))aìñãÇŒ1a²¯_¿Þè:¹¹¹,22’=~ü˜]»vÕÔÔ0+++vûömÑu’’’Ø¥K—XLLÌ+ÇÒ’zòÿ~srZÎÆûåå5ÝM„ ¯r2*Ž1U]]ÍnÞ¼É._¾Ìrrrš\žžžÎ.]º$j×>ŸÏòóóE?·fœ¶Io99¥läÈ_XïÞ+Ù“'éœÆÂåñëy¯3NÂÂÂX@@+)iÚØº£Žom!IŦfh¸°CwÛl­WŸ-ÃÄq,ò÷÷gýúõc555ìÆìÎ;L ¼ðú­9f¶Fll,»téKMMmU,m³9’öf—1Ê/åWròÆ.^¼Øª×ʯ4å722’]¼x‘ÅÅŽô~)¿BÒ”ßììlvùòåV»)¿BҔ߄„vñâEiÌï=±5SéÒ¥ ¼½_o™–¦¦f£)[¦¦¦055mtôôt 6 ÇŽƒ““víÚ‡~ýú‰®ÓÐ\«3º|9³gÀˆNغÕGâûå´DcJEEžžž/¼ÜØØÆÆÆ-Þ†¼¼<´µµE?·fœvii…x÷ÝPVV„¿ÿB‰o<ÿ"âkÏ{qÒ³gOôìÙ³ÙË:óñíecX½ú4<=í0|¸#×áˆEKÇ0q‹”••EÓî[ÒšcfkØÚÚÂÖֶͱ´6NiAùmýeÒHšòÛÒëÎó(¿BÒ”_GGG8:¶îu‘ò+$MùÕ××ÇÈ‘#[u”_!iʯ•••hC´—‘´üJ]%¢OŸ>øóÏ?ñã?¢°°666¸páB£Ý¤:«C‡B°l™>úh0V¯žyyéßQŠH®¸¸L™²š8tè3tï®ÎuH¤“;sæ?NÃ¥K_pŠÔÐÔÔ„ ×ah9IŠSšHÒóFù?IzÞ(¿â'IÏåWü$éy£üŠŸ$=o\æWêŠM0aÂL˜0ë0$ʆ —°qã%|óÍ0wîp®Ã!2îñã4Lú ±ÿLtí*½M˜‰l¨­åaݺ³˜<¹?œ_fFgáåå%1ŸT¶‹$Å)M$éy£üŠŸ$=o”_ñ“¤çò+~’ô¼Q~ÅO’ž7.ó+•Å&òŸ/ÀW_ÃÑ£wñÛoS1yr®C"2.88Ó§ïÁ A6صk:TTè0B¸·o_òó˱lÙëí$H!„By}t–(Åêêø˜7ï\½…¿ÿþC†Øs‘qøì³¿0v¬+6mzJJ \‡DŠŠ*°yóeÌš5††Z\‡C!„BH§GÅ&)USÃìYûq÷nŽƒ>}̸‰È¸sçcΜðñqÃ?¼M=ÁˆÄؼ9ÊÊ ˜3gסB!„B@Å&©TUU‹éÓ÷"**ÇŽÍ¡þ$¤Ýùû?¼yÿ`Æ |÷Ý!'G…&"’“ó±Ö¬™ .\‡C!„B›¤NYY5>ø`7RR püø<ØÚês‘qg΄bîÜ0kÖ|ûíx®Ã!¤‘µkÏÂÂBS§ºq !„B!¤›¤Hqq%¦Nýùùe8yr,,t¸‰È¸'`Á‚Cøì³¡X±b×áÒȽ{I8> û÷EEy®Ã!„B!„Ô“ºwç%%•(((ç:ŒW\\‰wÞÙŽ’’*œ<9Ÿ Mí,!!—ë8wìØ},Xpsç£B“ÈÏï|ǽ–0ưzõi¸»[cäHg®Ã!„B!„<ã…3›üüü:2ŽVKN.CHH.Þ{ÏšëPàçç‡wÞy§Ýï§´´ ï¾»••µ8~|. ºµû}¶???())qF«lÚô³g;¡KÉÙm­£Æ ,4-ZtóçÀÒ¥c:ä>ÅIR_¯cçÎHŒo##5®C‘þþšŠ sJ›Éâø”õ¼S~¹Aù•m”_ÙFù•m”_ÙÖÒóþÂbÓ”)SÚ%˜×¥®ÞššCáï¿uuY\‡ÓîJK«ñÞ{;QVV-Õ…&8uêN:Åu/%'§ƒyX¸ð( OrN‡ó÷„E‹cîÜaRYh$÷øõ:tu?@TT1 Ž£¶6ëp8U[ËÃ?žÅ¤Iýг§ ×á´™,ŽOòåW¶Q~eåW¶Q~eåWòÈ1Æ×A´Å¯¿^ÄÆ—àìlŒK—¾éí×KK«áã³yyå8~|.Œ»sR§…aÃÖnÞü66zGÔq"0s柘1ëVMà:òŒ .aÆ‹PTTÀ¶m>?¾×!qf×®øé§s üšŽ‹„B!„HžûR׳)99rrrˆŠÊÄ‘#w¸§Ý”—×àƒv!'§~~s脪¥¦äñÍ7Ç8ަã\¿™3ÿÄÔ©nøî»ÿryNÏžÆO€Ù³`×®GÄââJlÚtŸ~:„Ž‹„B!„H(©+6ÅÆæ€1Æ€5küQZZÅuHbWUU‹>Ø…ôô"øùÍ…©i®CêT󡤤>_€[·âqñâ®CjwÁÁñøä“?1iR?¬[÷6äädwÆ ´rp0¬ÿc «VƪU§ HÕäÔ×¶yóe()ÉcÞ¼á\‡B!„By©+6%'çîDTQQƒõë/r‘xÕÕñ1kÖ~ÄÇçâøñ¹07׿:¤N'%%_ôo99`ùò¨©áqQûzø0~¸£G»à×_ߥB“„25í.]žm°Ï°{÷M|þù_¨­•Ýñù¬ää|ìß ‹¿ .\‡C!„By©*6•–V¡¼¼Zô3ÇÇ_":Z6…óù,\x÷î%áèÑ9°°Ðá:¤N)..uu|€@À›[ŠmÛþå8ªö•Ÿ]ðð°ÃÖ­>PPªCB§"''פc .<Á”);dr–çó~üñÌÌz`Ú´A\‡B!„BiTY&%å7ùœœ¾úÊRÖç¼Y+VœÀÅ‹á8p` _þH»HLÌkô3Ÿ/À–-¢^N²"%¥Ó¦íBÏžÆØ¹óC*4Iž=MtIçÏIDAT¡  Ðèw|¾¦à­·6#+«˜£ÈÚßýûI8{ö1V¬EE«„B!„H2©zÇž””ùç"æñ¸w/ §N…r”˜üøã9:‚]»¦ã7,¹§Óª«ã#7·¤ÙËV®<ÕÁÑ´Ÿ‚‚r¼ÿþNèêj`ÏžŸ[žE$•~“c œå™’R€7ßÜ(33=ŸÅÃêÕþps³Â¨Q.\‡C!„By ©*6¥¤@QQ±™KäðÝw'QQQÓá1‰ÃÎ×±}ûUlÞ<Ç;rN§–šZÐlÃåº:>._Ç1D%^¥¥Õ˜2eààÁYÐÔ¤Þ7ÒÂÑÑP´Äóyuu|Ubܸ-¸};¡ƒ#k_çÎ…áÁƒdÚ%‘B!„)!UŦ¤¤<ðù‚&¿gŒ¡¨¨¿ýÀAT¯çĉX³æ ~øa&NìËu8^rò‹—ÊÉË —l¾èd_TUÕbúô=(.®Ä±cs¡­Ý•ëHØÛ·¼¼–Ç㣢¢o¿½ Uûª«ãcݺ³˜8±/\]M¹‡B!„Ò RUlŠÍi¶Øû–ìÜyIIyÍ^.‰‚‚â°hÑaÌ; }4˜ëp„;Ñ)))4{™@À–Vˆ½{;8*ñàó˜=û¢¢²pðà,iqi#}}Mtíúâ™hJJ PTTÀ§Ÿ»»MFÖ~öïBVV1¾þú?\‡B!„Bi%©*6=»%}ó-:Ü!±¼®¨¨,Ìœ¹ãÆõ¦“( ò|sðç  «WŸFNNiE$>?ýt×®Ea÷îépp ôÒÊÁÁ Éïå!''‡‰û!$d¾ÿ~ÔÕU8ˆN¼JJ*±iÓeÌœ9ÆÆÝ¹‡B!„ÒJRSlª¨¨AQQå /WVV'ÀÝ»Iø÷ߨŒ¬í²²Š1mÚ.¸ºšbÓ¦÷!''ÇuH¤^bbî —É)(È‹vl[³æLG†õÚþúë¶o¿ŠM›Þ‡‡‡-×á×àâb,š}'//‡‘¶¬´´Ӧ킖–*öìùø…K¶7n܈ ,,ÉËË¡®Ž99ÀĤú÷·@¯^fpu5‹‹ Ç‘¶ÞåËáX±â¾þú?˜4©×á×dooX?.å`a¡ƒ5k&áîÝDüóÏm|õÕX™ÙY0%¥þ„ï¾ jbO!„Bˆ4‘šbSC/&GG#¸¹YÃÕÕaai¸x1/.æ8ºÖ©«ãcæÌ}(.®ÂÙ³ h0 Ãç À˜p'ºñã{£W/3hk«cþüƒØ¾ýCôëgÎq„m÷ða fÏ>€iÓaÞ¼á\‡CÄÀÑQ¸ríÚ·1mÚ (*ÊÃÕÕüq‡‡`Æ OŽ#<SÓ˜6ÍëP!„B!m$Çή%\EE TT” ¨øtå_pp<&Oþwﮄ‰‰ä÷óøê+?œ:õ'OúŠN‰ä*+kѵkã^7={~‹9s†aöloŽ"{5ÉÉù7î7ôëg½{gˆ–éVSÃÇoÒ“iùòGpðŠFÇIiôàA Æÿ {÷ÎÀ›oöä:B!„BHÛÜ—š3uu•&'P}ûšCIIwî$pUëíÞ}†`ëÖiTh’PòòrM M0p îÜIä ¢WWPPŽ©Sÿ€¹¹6vìø€ M2DEE±Ùæß³g{#;»§N=ä *ñZ½ú4´¢B!„B!RJªÏ@»tQ‚««©Ä"°zõ|ûíxŒéÌu8¤ °Â½{I’I€¨ªªÅGíÇÇ_Í„ªª2×!‘`bÒ&ôÅï¿ÿ+5cµ9çÎ=ÆýûÉX¹r<סB!„B^‘T›ÀÍÍZ¢‹MQQY˜?ÿLê†Y³†pyZ¡¨¨11Ù\‡òRŒ1,Yrññ9øë¯O¡­Ý•ëHš;w8bcsÁu(¯¤®ŽµkÏb„>èÝÛŒëp!„B!¯Hê‹MX">>……\‡ÒDaa¦OßWWSüðÃ$®Ã!¯ÈÅÅêê*¸{7‰ëP^êÇÏÁßÿöìù˜–kvBöö9Ò[·þËu(¯ä¯¿n!+«_ýסB!„B^ƒL›ä䀻w%kvŸ/Àܹ ''‡]»¦CIIëÈ+RPGÿþßìᅢñûïW±iÓûðð°å:‘ùó‡ãÁƒdܾ-Ùãõy¥¥UØ´é2>ùÄK*6| „B!„¼˜Ô›ºuSƒ½½¡Ä-¥[¿þîÞMž=3 ¥¥Æu8ä5Iz“ðààx|ûí ,^<“&õã:¡~ý,0h5¶l à:”6ùí·Èɾ¾#¹…B!„ò𤾨ZJT!àüù0lÛö/Ö­{..Æ\‡CÄ`À+df#=½ˆëPšHK+ÄgŸý…Q£\°xñ(®Ã!`Ñ¢Q¸q#÷îIþÒO@8†÷î Ä¢E£ ©Ù…ëp!„B!¯I&ŠMnn6xò$eeÕ\‡‚„„\,^|~èŽwßÀu8DLúö5‡²²"nߎç:”Fªªj1}úèéibË–©““ã:$"<<ì0h5Ö¯?Ïu(­²nÝY˜˜tLJæ:B!„BˆÈD±ÉÝÝã|vSEE >ùäOØÚ`õꉜÆBÄ«K%ôïo[·â¸E„1†ùó"7· ý5ªªÊ\‡D$È’%cpëV<‚ƒ%«@ú¼ÐÐTœ9óß|óõ¶#„B!DFÈD±IG§+ììô9uÂÃâÅGPXXŽ]»>¢“&äînƒ[·$çÄ}ãÆKˆÀîÝÓ©¡2iÂÍÍ^^öX¿þס´hõêÓxã KŒëÊu(„B!„1‘‰bÀ}!`×®8> ü1††ZœÅAÚ»» 22Š’RÀu(8wî16n¼Œ~˜77k®Ã!jÉ’1¸{7ׯGsJ³ÎŸÃÝ»Iøî»ÿr !„B!DŒd¦Ø4h ""2PZZÕá÷}ûv~øÁ+VŒÃ Atâ/«úö5G—.Jæv)]TT|}á£ÜñÁîœÆB$[¿~æ>Ü¿þz‘ëPš¨«ãcݺ³?¾7úô1ã:B!„BˆÉL±‰«¾MYYÅøì³ý;Ö³f éÐû&KYYýû[ 88³ Ê1}úôík†ï¿§¾`äå–,ƒÐÐTDpJ#ÿ} ééEøæ›·¸…B!„"f2SlêÑCÚ ·®ŽY³þ‚¶vWlÚô>íÖ ¸»ÛpÖpY8ÞöC^^;wR_0Ò:®®¦5Ê¿ürŒ1®Ã”–VcÓ¦ËøäO˜šöà:B!„Bˆ˜ÉL± ¶EPPÇ-qúùçóˆŽÎž=3 ¦F;uîî6ÈÊ*Frr~‡ß÷wßÄãÇiØ·ïhkwíðû'ÒkéÒ1ˆŒÌÄ… O¸°eK,Éu(„B!„v sŦ¨¨ÿ·w÷QQ•ûÀ¿#£&#/#šbaàJVJ¤¦×Ž©ë,O=Aöb¦G0Qô¬Ì<´ì ©ÜD|I–FÙ•P¡#jæ$EEDæ¹´˜%áÅöfóý¬åûežç»Ç{­ù­=Ï\DEÅMÙçÊÊ*† ß#>~ ú÷w’}>êyD;;[üøcû®Û”šš‹Í›³±ví ¤k×¹Éò ÔááþXµjêë𥴴ÿú×ÿ"&f´Z»ÍBDDDDDòPT³)(È B¹¹geçÚµ›øÇ?’>Ó§Ê:u.66Ö6¬Ži¿µÁNºˆ·Þúüíocîßnó’²,\8gÎ\Fjjn‡æX±btºž˜9st‡æ """""ù(ªÙÔ³§=t‘u‘p!,Ø k¬Z5M¶y¨ó ôBNNû,~ýºýëð÷wÇÛo?Ó.s’2yzöAdä¼ÿ~ †ºÉðÓO°sg/çšcDDDDD ¦¨fzâèQùšM›7g#3óÖ¯_颂‚¼PZZ‹+eGèèdÔÔÜÆ† /A­VÜŸ+µ³˜˜ñ¨¬¼…¤¤C2\Ü. Ö'ò ="""""%Sܧנ þ8~¼55·%û×_/aÙ²tÄÄŒC` —äã“eÐÃÆÆZÖ'è`ýúL|÷ÝÏøì³—àää ë\Ô58;k1gN>ú(UU·ÚuB9rï¼ól»ÎKDDDDDíOqͦÀ@OÔÕÕ#?ÿ‚¤ãÖÖÞÁßÿþ%~Ø 11ã%›,‹-v“õ º¬¬"¬Zµ‹?ÃÆ&IjîÜÇam­ÂGe¶ÛœuuõX¾|žyf(ôí6/u Å5›\]{ÁÍ­—äkêÄÅíÂï¿Wâã_€µµâÞ6j¡  /Ùžl*+«Äܹÿ †`Μ±²ÌA]—ƒC7ÄÄŒGRÒ!Ù¿ Ú`Ë–l””\âEÛe>"""""êXŠìšü±€³t€Nâ‹/²0îîJ6.Y®À@/]Be¥´_Eª««Çœ9›ñàƒÝ‘˜ø¼¤c5ˆŠ ''-Þ?Cö¹nÜ0`Íšý˜5k4ôúÞ²ÏGDDDDDO‘ͦ  /äçŸÇ;Æ6U^^×^ÛŠiÓ†aÒ¤G%HGJè !€Üܳ’Ž›Ž_~)æM³ðÀIÇ&j`k«Æo<…ÔÔ\]’u®?üõõFÄÄŒ“u"""""ê<Ûlºy³'OþÞæ±–.ÝÆññÏIŒ”¢W¯îðñq–ô ºÝ»Â_Bbâóðñq–l\¢{™<9º`ùò=²ÍñûïØ´éÄÄŒGö²ÍCDDDDD‹"›MÞÞÎpp膟~jÛ"áûö"=½«WÿŸ2¡&yÄÿþ·4 ÑŸ?o¼± /½4 C%“¨9VV*¼ûî³8pà$²²Šd™#!áèt=1kÖhYÆ'""""¢ÎI‘Í&++† qkS³©ªê-JÅôé yHÂt¤C‡zàøñR¢MãÔÕÕãå—7Ãݽ7bc'I”Žèþ‚ƒ ,̱±ém®ã?;~¼;vÃÛo‡ÃÆÆZÒ±‰ˆˆˆˆ¨sSd³ üý=püxI«_›•Ê ±±ÏJ˜Š”Äßß7npöì•6³lÙ.üöÛelØF-Q:"ó,]¢¢Kؾý¨¤ãþóŸé臉‡H:.u~ n6¹£¨è?¨©¹Ýâ×~÷ÝÏØ¶í(V¬xŽëŒÐÿËÏÏ66Ömz‚.#£II‡0 ýû;I˜ŽÈ<>>ÎxñÅ‘X¹òܼY+ɘû÷ŸÀ‘#gðÎ;Ï@¥RI2&YÅ6›|}û¢¾Þˆââÿ´èuÕÕµxóÍíxöÙGðÔSƒeJGJ`cc oo'üúkë~Í«´´¯¾ºùK¦L 8‘ù,x55·ñé§ß·y¬;wŒˆßðp æ)A:"""""²4Šm6éõްµU£¨¨eͦ¸¸]¨­½ƒåËùëstêZÕlª««Çܹ›¡Óõ@\Üd’™¯wïðÊ+ãðé§ß£¬¬²McmÙrçÏ_Å¢E%JGDDDDD–ÆìbRSSåÌ! GG ÒÓBˆ³f_TT…-[N!*Ê™™ßÈœ®å‚‚‚àááÑÑ1duáÂääätt ³ÕÕ•#?ÿr‹ÿ>ví:ÂÂKxýõ!س']¦t­7mÚ´ŽŽ (–pÿìÕË{{+Ìû)"#½[5†ÁP+ò1j”rs¿Gn®Ä!eÂz'""""’–JaÖOYâº;ŒFêêÌ[ÀÙÊÊvvqófÌÉZ'993fÌèè²JIIAdddGÇ0›ZÝ ÖÖ=Q[k^C³­­VVÀ`(–)YÛ˜y[ 3YÊýS£ñ€Fܾ]ڪ׫TÖ°³óƒÁP£Ñ q:ù°Þ‰ˆˆˆˆ$•×¢Ÿ¾ê ÍŽÎÊR>¬J…þ:†¥5û, ïŸ눈ˆˆHŠ]³‰ˆˆˆˆˆˆˆˆÚ›MDDDDDDDD$6›ˆˆˆˆˆˆˆˆH2l6‘dØl"""""""""ɰÙDDDDDDDDD’Qd³éÆHHH0ûüÊÊJàÚµk2¦"%ji­5())Á•+WdHDÔ6­©éÊÊJ”––6Ù_]]üü|Þ[‰ˆˆˆˆºE6›ªªªkÖ¹kÖ¬^¯ÇìÙ³¡×ë±nÝ:yÑ¢´¤Ö\½zÇGzzº<¡ˆÚ 55½zõjlذ¡Ñ¾ýû÷ÃÝÝ/¾ø"<<<°qãF SQg¦Èf“¹Ž;†ØØXäää   999x÷ÝwñÛo¿ut4R°Ù³g£¼¼¼£cµÙÞ½{1kÖ,¬^½ºÑþºº:Ìœ9|ðNž<‰ ::eee””ˆˆˆˆˆÚ“lͦ%K– OŸ>Ðh4xüñÇ}Å⫯¾‚··7Ôj5t:éƒÊÕ«W†5kÖ oß¾èÓ§’’’ðú믣OŸ>Ðétغu+àСC˜?>¢££¡Õjáââ‚5kÖÜ3Kaa!F…nݺaÀ€HIIdff"$$=ôÀ××aaaسgÏ=ÇùöÛoáçç[[[<úè£ÈËË»o––ä¤Ö±„ZkðñÇC#F4{M¬µ®Í’jÚßßC† i´ïèÑ£0 ˆŠŠŒ1ƒƾ}ûî9눈ˆˆHa„™ˆääd³ÎÍÈÈ}ûöÅÅÅâúõë"""B¼üòËB!®_¿.4HKKƒAüðÃÂÊÊJ\¾|Y”•• +++±téRa4Å'Ÿ|"ˆ„„a4ŪU«„···BˆÝ»w µZ-bbbÄÍ›7EVV–èÑ£‡Ø»w¯())F!DuuµÐétbýúõÂ`0ˆÌÌL¡ÕjÅ?þ(Ö­['e ¯¼òJ“k*))"--MܺuKÄÇÇ ½^/ŒFc³Yš;Ö-yÿ-Yrr²hAYZL­ !Daa¡ðôôW®\cÇŽŸþù=¯©#k­¥ï?™G‰÷Ï»EFFŠÅ‹›¶“’’DPPP£s¢¢¢Ä[o½ÕäzYïDDDDDŠ“+Ë“MƒP[[ ¤¤¤`ÅŠ[[[dggcÒ¤IÐh4ðòò‚ ªªªF£ .„J¥BXXÔj5^{í5Óö7LóØÛÛcåÊ•°··Ç¨Q£0þ||ùå—²ìÙ³:óæÍƒF£ÁO<™3g"55S¦LÁ©S§°lÙ2>|‹-Bvv6jkk›\Ó¶mÛ‚I“&ÁÎÎo¾ù&æÎ‹šššûf1''µŽ¥ÔZMM f̘Ï>û ŽŽŽÍ^k­k³”šnNuu5ºwïÞh_÷îÝÍ߀õNDDDD¤<²4›ÂÃÃ1uêTŒ9z½ÑÑѨ¨¨h4;v O>ù$ú÷ïÉ“'Ãh46z}Ç•JFµZmÚ¾›——lmmMÛ?ü0.\¸ÐèœsçÎá—_~A¿~ýLÿ¶nÝŠÊÊJ¸¹¹áàÁƒ(((À«¯¾ <ÿüóèÙ³g“k:wî `Ú¶±±ÁÂ… aooß,æä¤Ö±”Z‹Gß¾}agg‡¬¬,TUUáôéÓ(,,lrM¬µ®ÍRjº9vvv¦fQƒššØÙÙ59—õNDDDD¤¼É¹¬w"""""å‘åɦ•+W"$$jµˆŠŠÂÅ‹¥¥¥ðõõEpp0¬­­qøða\¿~½Uó”––š~>¾ºº7nDXXX£sÂÂÂpèÐ!üüóÏ€[·n! iii8þ<ôz=Î;ÈÎÎÆ‰'0aÂÀÎ;qâÄ À¸qã°k×.Ó‡¢œœ¼ð °¶¶¾osrRëXJ­-[¶ yyy¦X²d‰©ÑÄZ£–RÓÍ1bŒF#öïßàFS^^ï­DDDDD]…¹«;¡ Ü–””1xð`*zôè!6nÜ(„âÂ… ÂÉÉIŒ3F„……‰§Ÿ~Zôïß_DDDˆ²²²F‹µ‹îÝ»›¶ „³³³ânõz½ðóóÁÁÁB§Ó‰±cÇŠšššF Ü !Dbb¢Ðjµ"44T¸ººŠiÓ¦‰úúz!„ÑÑÑ¢W¯^b̘1¢gÏžbÛ¶m¦×éõzgÚŽŽŽŽŽŽ"44ThµZ±~ýúûfiîXK´äý·d-]°×’jín^ ¼³ÔL–‡RïŸ þ¼@¸B¤¦¦ŠÞ½{‹ˆˆáìì,MÇXïDDDDDŠ–+Ë×èÜÜÜPTTdúùk899ÜÝÝQ\\Œ£GÂÉÉ C† AII Μ9!Lãx{{£ººÚ´=tèP\ºtÉ´íèèˆììl9rݺuÃc=•J777Ó"»°`ÁLŸ>'Ož„««+üüüLÇÖ®]‹9sæ ¤¤C‡…³³³éXÃOwŸ;oÞ<œ={ƒ ‚»»û}³Üïµ%ÕÚÝ<Øh›µF ,±¦·lÙÒdßÔ©S1zôhbíÚµðôô4c½)›,Í&à…lƒƒƒïyL«Õ6úªƒ»»{£-akk‹1cÆÜ÷>>-ÎbnNj9Kªµ–`­u]J©i¸¸¸˜u.눈ˆˆH9dY³©=hµZx{{wt ÍgéL9©u:Óÿ!k¤`)µÂz'""""²L*q÷÷.š;Q¥Brr2f̘!w&º‡®òþ§¤¤ 22f–%IŒï¿<ºÊ߯¥a½É"ÏbŸl""""""""¢Î‡Í&""""""""’ ›MDDDDDDDD$6›ˆˆˆˆˆˆˆˆH2l6‘dØl"""""""""ɰÙDDDDDDDDD’Q·ääÈÈHDFFÊ•…ÈD¥Rut"IñþIDDDDD]…ÙͦíÛ·Ë™ƒÌÔÑd7zôhÖ)kšˆˆˆˆˆº•Btt""""""""R„<®ÙDDDDDDDDD’a³‰ˆˆˆˆˆˆˆˆ$ÃfIæÿã•ñ¬äúeIEND®B`‚bm3.7.0/doc/html/a00124.html0000644000175000017500000005455711365042643013442 0ustar tlktlk BitMagic: Set algorithms

Set algorithms
[BitMagic C++ Library]

Collaboration diagram for Set algorithms:

Data Structures

class  bm::random_subset< BV >

Modules

 Distance metrics

Functions

template<class BV , class It >
void bm::combine_or (BV &bv, It first, It last)
 OR Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_xor (BV &bv, It first, It last)
 XOR Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_sub (BV &bv, It first, It last)
 SUB Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_and_sorted (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV , class It >
void bm::combine_and (BV &bv, It first, It last)
 AND Combine bitvector and the iterable sequence.
template<class BV >
bm::id_t bm::count_intervals (const BV &bv)
 Compute number of bit intervals (GAPs) in the bitvector.
template<class BV , class It >
void bm::export_array (BV &bv, It first, It last)
 Export bitset from an array of binary data representing the bit vector.

Detailed Description

Set algorithms


Function Documentation

template<class BV , class It >
void bm::combine_and ( BV &  bv,
It  first,
It  last 
) [inline]

AND Combine bitvector and the iterable sequence.

Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence
See also:
combine_and_sorted

Definition at line 1418 of file bmalgo_impl.h.

References bm::combine_or().

template<class BV , class It >
void bm::combine_and_sorted ( BV &  bv,
It  first,
It  last 
) [inline]

AND Combine bitvector and the iterable sequence.

Algorithm combines bvector with sorted sequence of integers (represents another set).

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence

Definition at line 1386 of file bmalgo_impl.h.

References BM_ASSERT.

template<class BV , class It >
void bm::combine_or ( BV &  bv,
It  first,
It  last 
) [inline]

OR Combine bitvector and the iterable sequence.

Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence

Definition at line 1141 of file bmalgo_impl.h.

References bm::block_range_scan(), BM_ASSERT, BMGAP_PTR, bm::gap_limit(), bm::gap_set_value(), bm::id_max, bm::set_block_mask, bm::set_block_shift, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::combine_and().

template<class BV , class It >
void bm::combine_sub ( BV &  bv,
It  first,
It  last 
) [inline]

SUB Combine bitvector and the iterable sequence.

Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence

Definition at line 1304 of file bmalgo_impl.h.

References bm::block_range_scan(), BM_ASSERT, BMGAP_PTR, bm::gap_limit(), bm::gap_set_value(), bm::gap_test(), bm::id_max, bm::set_block_mask, bm::set_block_shift, bm::set_word_mask, and bm::set_word_shift.

template<class BV , class It >
void bm::combine_xor ( BV &  bv,
It  first,
It  last 
) [inline]

XOR Combine bitvector and the iterable sequence.

Algorithm combines bvector with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence

Definition at line 1220 of file bmalgo_impl.h.

References bm::block_range_scan(), BM_ASSERT, BMGAP_PTR, bm::gap_limit(), bm::gap_set_value(), bm::gap_test(), bm::id_max, bm::set_block_mask, bm::set_block_shift, bm::set_word_mask, and bm::set_word_shift.

template<class BV >
bm::id_t bm::count_intervals ( const BV &  bv  )  [inline]

Compute number of bit intervals (GAPs) in the bitvector.

Algorithm traverses bit vector and count number of uninterrupted intervals of 1s and 0s.

    For example: 
      00001111100000 - gives us 3 intervals
      10001111100000 - 4 intervals
      00000000000000 - 1 interval
      11111111111111 - 1 interval
    
Returns:
Number of intervals

Definition at line 1441 of file bmalgo_impl.h.

References bm::for_each_block().

template<class BV , class It >
void bm::export_array ( BV &  bv,
It  first,
It  last 
) [inline]

Export bitset from an array of binary data representing the bit vector.

Input array can be array of ints, chars or other native C types. Method works with iterators, which makes it compatible with STL containers and C arrays

Parameters:
bv - destination bitvector
first - first element of the iterated sequence
last - last element of the iterated sequence

Definition at line 1467 of file bmalgo_impl.h.

References BM_ASSERT, bm::BM_BIT, BMGAP_PTR, bm::set_block_size, and bm::set_total_blocks.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00020.html0000644000175000017500000001000411365042651013407 0ustar tlktlk BitMagic: bm::bit_COUNT_SUB_AB< W > Struct Template Reference

bm::bit_COUNT_SUB_AB< W > Struct Template Reference

Bit COUNT SUB AB functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_SUB_AB< W >

Bit COUNT SUB AB functor.

Definition at line 5143 of file bmfunc.h.


Member Function Documentation

template<typename W>
W bm::bit_COUNT_SUB_AB< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5145 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00150.map0000644000175000017500000000231311365042636013233 0ustar tlktlk bm3.7.0/doc/html/a00236.md50000644000175000017500000000004011365042650013137 0ustar tlktlk59cecde9660a5ff95344178b64226bafbm3.7.0/doc/html/a00102_source.html0000644000175000017500000005031611365042630014777 0ustar tlktlk BitMagic: bmutil.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00019.html0000644000175000017500000000774011365042651013434 0ustar tlktlk BitMagic: bm::bit_COUNT_OR< W > Struct Template Reference

bm::bit_COUNT_OR< W > Struct Template Reference

Bit COUNT OR functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_COUNT_OR< W >

Bit COUNT OR functor.

Definition at line 5131 of file bmfunc.h.


Member Function Documentation

template<typename W>
W bm::bit_COUNT_OR< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5133 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00120.html0000644000175000017500000052071011365042643013423 0ustar tlktlk BitMagic: BIT functions

BIT functions
[BitMagic C++ Library]

Collaboration diagram for BIT functions:

Data Structures

struct  bm::block_set_table< T >
 Structure keeps all-left/right ON bits masks. More...
struct  bm::all_set< T >
 Structure carries pointer on bit block with all bits 1. More...
struct  bm::first_bit_table< T >
 Structure keeps index of first right 1 bit for every byte. More...
struct  bm::bit_count_table< T >
 Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers. More...

Defines

#define BM_INCWORD_BITCOUNT(cnt, w)   cnt += _mm_popcnt_u32(w);

Functions

BMFORCEINLINE bm::id_t bm::word_bitcount (bm::id_t w)
template<typename T >
int bm::wordcmp0 (T w1, T w2)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
template<typename T >
int bm::wordcmp (T a, T b)
 Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.
BMFORCEINLINE void bm::set_bit (unsigned *dest, unsigned bitpos)
 Set 1 bit in a block.
BMFORCEINLINE unsigned bm::test_bit (const unsigned *block, unsigned bitpos)
 Test 1 bit in a block.
void bm::or_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 Sets bits to 1 in the bitblock.
void bm::sub_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 SUB (AND NOT) bit interval to 1 in the bitblock.
void bm::xor_bit_block (unsigned *dest, unsigned bitpos, unsigned bitcount)
 XOR bit interval to 1 in the bitblock.
template<typename T >
bm::id_t bm::gap_bitset_and_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block AND masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_and_any (const unsigned *block, const T *buf)
 Bitcount test of bit block AND masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_sub_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block SUB masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_sub_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block SUB masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_xor_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block XOR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_xor_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block XOR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_or_count (const unsigned *block, const T *buf)
 Compute bitcount of bit block OR masked by GAP block.
template<typename T >
bm::id_t bm::gap_bitset_or_any (const unsigned *block, const T *buf)
 Compute bitcount test of bit block OR masked by GAP block.
void bm::bit_block_set (bm::word_t *BMRESTRICT dst, bm::word_t value)
 Bitblock memset operation.
template<typename T >
int bm::bitcmp (const T *buf1, const T *buf2, unsigned len)
 Lexicographical comparison of BIT buffers.
bm::id_t bm::bit_block_calc_count (const bm::word_t *block, const bm::word_t *block_end)
 Bitcount for bit string.
bm::id_t bm::bit_count_change (bm::word_t w)
bm::id_t bm::bit_block_calc_count_change (const bm::word_t *block, const bm::word_t *block_end, unsigned *bit_count)
bm::id_t bm::bit_block_calc_count_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
bm::id_t bm::bit_block_any_range (const bm::word_t *block, bm::word_t left, bm::word_t right)
template<typename T >
void bm::bit_invert (T *start, T *end)
bool bm::is_bits_one (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 1.
bool bm::bit_is_all_zero (const bm::wordop_t *start, const bm::wordop_t *end)
 Returns "true" if all bits in the block are 0.
void bm::bit_block_copy (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Bitblock copy operation.
void bm::bit_block_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock AND operation. Function does not analyse availability of source and destination blocks.
unsigned bm::bit_block_and_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_and_any (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ANDs two bitblocks and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function XORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function SUBs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
unsigned bm::bit_block_or_count (const bm::word_t *src1, const bm::word_t *src1_end, const bm::word_t *src2)
 Function ORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.
unsigned bm::bit_block_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Function ORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.
bm::word_tbm::bit_operation_and (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock AND operation.
bm::id_t bm::bit_operation_and_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_and_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock AND operation test.
bm::id_t bm::bit_operation_sub_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock SUB operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_sub_count_inv (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs inverted bitblock SUB operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_sub_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock test of SUB operation.
bm::id_t bm::bit_operation_or_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_or_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock OR operation test.
void bm::bit_block_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock OR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_or (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Block OR operation. Makes analysis if block is 0 or FULL.
void bm::bit_block_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock SUB (AND NOT) operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_sub (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock SUB operation.
void bm::bit_block_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 Plain bitblock XOR operation. Function does not analyse availability of source and destination blocks.
bm::word_tbm::bit_operation_xor (bm::word_t *BMRESTRICT dst, const bm::word_t *BMRESTRICT src)
 bitblock XOR operation.
bm::id_t bm::bit_operation_xor_count (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation and calculates bitcount of the result.
bm::id_t bm::bit_operation_xor_any (const bm::word_t *BMRESTRICT src1, const bm::word_t *BMRESTRICT src1_end, const bm::word_t *BMRESTRICT src2)
 Performs bitblock XOR operation test.
template<class T >
unsigned bm::bit_count_nonzero_size (const T *blk, unsigned data_size)
 Inspects block for full zero words.
int bm::bit_find_in_block (const bm::word_t *data, unsigned nbit, bm::id_t *prev)
 Searches for the next 1 bit in the BIT block.
template<typename T , typename F >
void bm::bit_for_each_4 (T w, F &func)
 Templated algorithm to unpacks octet based word into list of ON bit indexes.
template<typename T , typename F >
void bm::bit_for_each (T w, F &func)
 Templated algorithm to unpacks word into list of ON bit indexes.
template<typename T , typename B >
unsigned bm::bit_list_4 (T w, B *bits)
 Unpacks word into list of ON bit indexes (quad-bit based).
template<typename T , typename B >
unsigned bm::bit_list (T w, B *bits)
 Unpacks word into list of ON bit indexes.
bm::set_representation bm::best_representation (unsigned bit_count, unsigned total_possible_bitcount, unsigned gap_count, unsigned block_size)
 Choose best representation for a bit-block.
template<typename T >
bm::bit_convert_to_arr (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len, unsigned mask=0)
 Convert bit block into an array of ints corresponding to 1 bits.
template<typename T , unsigned BPC, unsigned BPS>
void bm::tmatrix_distance (const T tmatrix[BPC][BPS], unsigned distance[BPC][BPC])
 Compute pairwise Row x Row Humming distances on plains(rows) of the transposed bit block.
template<typename T , unsigned BPC, unsigned BPS>
void bm::bit_iblock_make_pcv (const unsigned distance[BPC][BPC], unsigned char *pc_vector)
 !< ibpc limiter

Detailed Description

Bit functions implement different opereations on bit blocks and serve as a minimal building blocks.


Define Documentation


Function Documentation

bm::set_representation bm::best_representation ( unsigned  bit_count,
unsigned  total_possible_bitcount,
unsigned  gap_count,
unsigned  block_size 
) [inline]

Choose best representation for a bit-block.

Definition at line 4713 of file bmfunc.h.

References bm::set_array0, bm::set_array1, bm::set_bitset, and bm::set_gap.

Referenced by bm::compute_tmatrix_rstat().

void bm::bit_block_and ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Plain bitblock AND operation. Function does not analyse availability of source and destination blocks.

Parameters:
dst - destination block.
src - source block.

Definition at line 3446 of file bmfunc.h.

References bm::set_block_size, and VECT_AND_ARR.

Referenced by bm::bit_operation_and(), and bm::serial_stream_iterator< DEC >::get_bit_block_AND().

unsigned bm::bit_block_and_any ( const bm::word_t src1,
const bm::word_t src1_end,
const bm::word_t src2 
) [inline]

Function ANDs two bitblocks and tests for any bit. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block
src1_end - first bit block end
src2 - second bit block

Definition at line 3530 of file bmfunc.h.

Referenced by bm::bit_operation_and_any().

unsigned bm::bit_block_and_count ( const bm::word_t src1,
const bm::word_t src1_end,
const bm::word_t src2 
) [inline]

Function ANDs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block
src1_end - first bit block end
src2 - second bit block

Definition at line 3480 of file bmfunc.h.

References BM_INCWORD_BITCOUNT, and VECT_BITCOUNT_AND.

Referenced by bm::bit_operation_and_count().

bm::id_t bm::bit_block_any_range ( const bm::word_t block,
bm::word_t  left,
bm::word_t  right 
) [inline]

Function calculates if there is any number of 1 bits in the given array of words in the range between left anf right bits (borders included). Make sure the addresses are aligned.

Definition at line 3016 of file bmfunc.h.

References BM_ASSERT, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::gap_bitset_and_any(), bm::gap_bitset_or_any(), bm::gap_bitset_sub_any(), and bm::gap_bitset_xor_any().

bm::id_t bm::bit_block_calc_count ( const bm::word_t block,
const bm::word_t block_end 
) [inline]

Bitcount for bit string.

Function calculates number of 1 bits in the given array of words. Make sure the addresses are aligned.

Definition at line 2726 of file bmfunc.h.

References BM_ASSERT, BM_INCWORD_BITCOUNT, and VECT_BITCOUNT.

Referenced by bm::bit_operation_or_count(), bm::bit_operation_sub_count(), bm::bit_operation_xor_count(), bm::combine_count_operation_with_block(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_A(), and bm::tmatrix_distance().

bm::id_t bm::bit_block_calc_count_change ( const bm::word_t block,
const bm::word_t block_end,
unsigned *  bit_count 
) [inline]

Function calculates number of times when bit value changed (1-0 or 0-1) in the bit block. Also calulates number of bits ON.

Parameters:
bit_count - OUT total number of bits ON
Returns:
number of 1-0, 0-1 transitions

Definition at line 2864 of file bmfunc.h.

References bm::bit_count_change32(), BM_ASSERT, bm::sse2_bit_block_calc_count_change(), and bm::sse4_bit_block_calc_count_change().

Referenced by bm::serializer< BV >::serialize().

bm::id_t bm::bit_block_calc_count_range ( const bm::word_t block,
bm::word_t  left,
bm::word_t  right 
) [inline]

Function calculates number of 1 bits in the given array of words in the range between left anf right bits (borders included) Make sure the addresses are aligned.

Definition at line 2950 of file bmfunc.h.

References BM_ASSERT, BM_INCWORD_BITCOUNT, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::bvector< Alloc >::count_range(), bm::gap_bitset_and_count(), bm::gap_bitset_or_count(), bm::gap_bitset_sub_count(), and bm::gap_bitset_xor_count().

void bm::bit_block_copy ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Bitblock copy operation.

Parameters:
dst - destination block.
src - source block.

Definition at line 3426 of file bmfunc.h.

References bm::set_block_size, and VECT_COPY_BLOCK.

void bm::bit_block_or ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Plain bitblock OR operation. Function does not analyse availability of source and destination blocks.

Parameters:
dst - destination block.
src - source block.

Definition at line 4060 of file bmfunc.h.

References bm::set_block_size, and VECT_OR_ARR.

Referenced by bm::bit_operation_or().

unsigned bm::bit_block_or_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Function ORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.

Definition at line 3770 of file bmfunc.h.

Referenced by bm::bit_operation_or_any().

unsigned bm::bit_block_or_count ( const bm::word_t src1,
const bm::word_t src1_end,
const bm::word_t src2 
) [inline]

Function ORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block
src1_end - first block end
src2 - second bit block.

Definition at line 3721 of file bmfunc.h.

References BM_INCWORD_BITCOUNT, and VECT_BITCOUNT_OR.

Referenced by bm::bit_operation_or_count().

void bm::bit_block_sub ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Plain bitblock SUB (AND NOT) operation. Function does not analyse availability of source and destination blocks.

Parameters:
dst - destination block.
src - source block.

Definition at line 4156 of file bmfunc.h.

References bm::set_block_size, and VECT_SUB_ARR.

Referenced by bm::bit_operation_sub(), and bm::serial_stream_iterator< DEC >::get_bit_block_SUB().

unsigned bm::bit_block_sub_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Function SUBs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.

Definition at line 3691 of file bmfunc.h.

Referenced by bm::bit_operation_sub_any().

unsigned bm::bit_block_sub_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Function SUBs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.

Definition at line 3642 of file bmfunc.h.

References BM_INCWORD_BITCOUNT, and VECT_BITCOUNT_SUB.

Referenced by bm::bit_operation_sub_count().

void bm::bit_block_xor ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Plain bitblock XOR operation. Function does not analyse availability of source and destination blocks.

Parameters:
dst - destination block.
src - source block.

Definition at line 4252 of file bmfunc.h.

References bm::set_block_size, and VECT_XOR_ARR.

Referenced by bm::bit_operation_xor(), bm::iterator_deserializer< BV, SerialIterator >::deserialize(), and bm::serial_stream_iterator< DEC >::get_bit_block_XOR().

unsigned bm::bit_block_xor_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Function XORs two bitblocks and and tests for any bit. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.

Definition at line 3611 of file bmfunc.h.

Referenced by bm::bit_operation_xor_any().

unsigned bm::bit_block_xor_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Function XORs two bitblocks and computes the bitcount. Function does not analyse availability of source blocks.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.

Definition at line 3561 of file bmfunc.h.

References BM_INCWORD_BITCOUNT, and VECT_BITCOUNT_XOR.

Referenced by bm::bit_operation_xor_count().

template<typename T >
T bm::bit_convert_to_arr ( T *BMRESTRICT  dest,
const unsigned *BMRESTRICT  src,
bm::id_t  bits,
unsigned  dest_len,
unsigned  mask = 0 
) [inline]

Convert bit block into an array of ints corresponding to 1 bits.

Definition at line 4748 of file bmfunc.h.

References bm::bit_for_each_4(), and bm::copy_to_array_functor_inc< B >::ptr().

Referenced by bm::serializer< BV >::serialize().

bm::id_t bm::bit_count_change ( bm::word_t  w  )  [inline]

Function calculates number of times when bit value changed (1-0 or 0-1).

For 001 result is 2 010 - 3 011 - 2 111 - 1

Definition at line 2786 of file bmfunc.h.

References BM_INCWORD_BITCOUNT.

template<class T >
unsigned bm::bit_count_nonzero_size ( const T *  blk,
unsigned  data_size 
) [inline]

Inspects block for full zero words.

Parameters:
data - bit block pointer
data_size - data size
Returns:
size of all non-zero words

Definition at line 4384 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::serializer< BV >::serialize().

int bm::bit_find_in_block ( const bm::word_t data,
unsigned  nbit,
bm::id_t prev 
) [inline]

Searches for the next 1 bit in the BIT block.

Parameters:
data - BIT buffer
nbit - bit index to start checking from
prev - returns previously checked value

Definition at line 4445 of file bmfunc.h.

References bm::set_block_size, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::serializer< BV >::serialize().

template<typename T , typename F >
void bm::bit_for_each ( w,
F &  func 
) [inline]

Templated algorithm to unpacks word into list of ON bit indexes.

Parameters:
w - value
func - bit functor

Definition at line 4562 of file bmfunc.h.

Referenced by bm::bit_list().

template<typename T , typename F >
void bm::bit_for_each_4 ( w,
F &  func 
) [inline]

Templated algorithm to unpacks octet based word into list of ON bit indexes.

Parameters:
w - value
func - bit functor

Definition at line 4492 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::bit_convert_to_arr(), and bm::bit_list_4().

template<typename T , unsigned BPC, unsigned BPS>
void bm::bit_iblock_make_pcv ( const unsigned  distance[BPC][BPC],
unsigned char *  pc_vector 
) [inline]

!< ibpc limiter

Make a compression descriptor vector for bit-plains

Parameters:
distance - pairwise distance matrix
pc_vector - OUT compression descriptor vector

        pc_vector[] format:
            each element (pc_vector[i]) describes the plain compression:
                first 3 bits - compression code:
                    0 - plain uncompressed
                    1 - plain is ALL ZERO (000000...)
                    2 - plain is ALL ONE  (111111...)
                    3 - plain is equal to another plain J (5 high bits (max 31))
                    4 - plain is close (but not equal) to plain J
                next 5 bits - number of plain used as a XOR expression
                 ( compression codes: 3,4 )
    

Definition at line 418 of file bmtrans.h.

References BM_ASSERT, bm::ibpc_all_one, bm::ibpc_all_zero, bm::ibpc_close, bm::ibpc_equiv, and bm::ibpc_uncompr.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::compute_distance_matrix().

template<typename T >
void bm::bit_invert ( T *  start,
T *  end 
) [inline]

Function inverts block of bits

Definition at line 3081 of file bmfunc.h.

References VECT_INVERT_ARR.

bool bm::bit_is_all_zero ( const bm::wordop_t start,
const bm::wordop_t end 
) [inline]
template<typename T , typename B >
unsigned bm::bit_list ( w,
B *  bits 
) [inline]

Unpacks word into list of ON bit indexes.

Parameters:
w - value
bits - pointer on the result array
Returns:
number of bits in the list

Definition at line 4700 of file bmfunc.h.

References bm::bit_for_each(), and bm::copy_to_array_functor< B >::ptr().

template<typename T , typename B >
unsigned bm::bit_list_4 ( w,
B *  bits 
) [inline]

Unpacks word into list of ON bit indexes (quad-bit based).

Parameters:
w - value
bits - pointer on the result array
Returns:
number of bits in the list

Definition at line 4685 of file bmfunc.h.

References bm::bit_for_each_4(), and bm::copy_to_array_functor< B >::ptr().

Referenced by bm::bvector< Alloc >::enumerator::go_up().

bm::word_t* bm::bit_operation_and ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

bitblock AND operation.

Parameters:
dst - destination block.
src - source block.
Returns:
pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value.

Definition at line 3802 of file bmfunc.h.

References bm::bit_block_and(), BM_ASSERT, IS_EMPTY_BLOCK, IS_FULL_BLOCK, and IS_VALID_ADDR.

bm::id_t bm::bit_operation_and_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock AND operation test.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.
Returns:
non zero if there is any value

Definition at line 3890 of file bmfunc.h.

References bm::bit_block_and_any(), and IS_EMPTY_BLOCK.

Referenced by bm::combine_any_operation_with_block().

bm::id_t bm::bit_operation_and_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock AND operation and calculates bitcount of the result.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.
Returns:
bitcount value

Definition at line 3867 of file bmfunc.h.

References bm::bit_block_and_count(), and IS_EMPTY_BLOCK.

Referenced by bm::combine_count_and_operation_with_block(), and bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_AND().

bm::word_t* bm::bit_operation_or ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

Block OR operation. Makes analysis if block is 0 or FULL.

Parameters:
dst - destination block.
src - source block.
Returns:
pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value.

Definition at line 4098 of file bmfunc.h.

References bm::bit_block_or(), BM_ASSERT, FULL_BLOCK_ADDR, IS_FULL_BLOCK, IS_VALID_ADDR, and bm::set_block_size.

bm::id_t bm::bit_operation_or_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock OR operation test.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.
Returns:
non zero value if there are any bits

Definition at line 4028 of file bmfunc.h.

References bm::bit_block_or_any(), bm::bit_is_all_zero(), and IS_EMPTY_BLOCK.

Referenced by bm::combine_any_operation_with_block().

bm::id_t bm::bit_operation_or_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock OR operation and calculates bitcount of the result.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block.
Returns:
bitcount value

Definition at line 3996 of file bmfunc.h.

References bm::bit_block_calc_count(), bm::bit_block_or_count(), and IS_EMPTY_BLOCK.

Referenced by bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_OR().

bm::word_t* bm::bit_operation_sub ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

bitblock SUB operation.

Parameters:
dst - destination block.
src - source block.
Returns:
pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value.

Definition at line 4196 of file bmfunc.h.

References bm::bit_block_sub(), BM_ASSERT, IS_FULL_BLOCK, and IS_VALID_ADDR.

bm::id_t bm::bit_operation_sub_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock test of SUB operation.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block
Returns:
non zero value if there are any bits

Definition at line 3966 of file bmfunc.h.

References bm::bit_block_sub_any(), bm::bit_is_all_zero(), and IS_EMPTY_BLOCK.

Referenced by bm::combine_any_operation_with_block().

bm::id_t bm::bit_operation_sub_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock SUB operation and calculates bitcount of the result.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block
Returns:
bitcount value

Definition at line 3915 of file bmfunc.h.

References bm::bit_block_calc_count(), bm::bit_block_sub_count(), and IS_EMPTY_BLOCK.

Referenced by bm::bit_operation_sub_count_inv(), bm::combine_count_operation_with_block(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_SUB_AB(), and bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_SUB_BA().

bm::id_t bm::bit_operation_sub_count_inv ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs inverted bitblock SUB operation and calculates bitcount of the result.

Parameters:
src1 - first bit block.
src1_end - first bit block end
src2 - second bit block
Returns:
bitcount value

Definition at line 3945 of file bmfunc.h.

References bm::bit_operation_sub_count().

bm::word_t* bm::bit_operation_xor ( bm::word_t *BMRESTRICT  dst,
const bm::word_t *BMRESTRICT  src 
) [inline]

bitblock XOR operation.

Parameters:
dst - destination block.
src - source block.
Returns:
pointer on destination block. If returned value equal to src means that block mutation requested. NULL is valid return value.

Definition at line 4292 of file bmfunc.h.

References bm::bit_block_xor(), BM_ASSERT, and IS_VALID_ADDR.

bm::id_t bm::bit_operation_xor_any ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock XOR operation test.

Parameters:
src1 - first bit block.
src2 - second bit block.
Returns:
non zero value if there are bits

Definition at line 4355 of file bmfunc.h.

References bm::bit_block_xor_any(), bm::bit_is_all_zero(), and IS_EMPTY_BLOCK.

Referenced by bm::combine_any_operation_with_block().

bm::id_t bm::bit_operation_xor_count ( const bm::word_t *BMRESTRICT  src1,
const bm::word_t *BMRESTRICT  src1_end,
const bm::word_t *BMRESTRICT  src2 
) [inline]

Performs bitblock XOR operation and calculates bitcount of the result.

Parameters:
src1 - first bit block.
src2 - second bit block.
Returns:
bitcount value

Definition at line 4330 of file bmfunc.h.

References bm::bit_block_calc_count(), bm::bit_block_xor_count(), and IS_EMPTY_BLOCK.

Referenced by bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_XOR().

template<typename T >
int bm::bitcmp ( const T *  buf1,
const T *  buf2,
unsigned  len 
) [inline]

Lexicographical comparison of BIT buffers.

Parameters:
buf1 - First buffer pointer.
buf2 - Second buffer pointer.
len - Buffer length in elements (T).
Returns:
<0 - less, =0 - equal, >0 - greater.

Definition at line 2489 of file bmfunc.h.

References BM_ASSERT.

Referenced by bm::bvector< Alloc >::compare().

template<typename T >
bm::id_t bm::gap_bitset_and_any ( const unsigned *  block,
const T *  buf 
) [inline]

Bitcount test of bit block AND masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1837 of file bmfunc.h.

References bm::bit_block_any_range(), and BM_ASSERT.

Referenced by bm::combine_any_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_and_count ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount of bit block AND masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1806 of file bmfunc.h.

References bm::bit_block_calc_count_range(), and BM_ASSERT.

Referenced by bm::combine_count_and_operation_with_block(), and bm::combine_count_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_or_any ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount test of bit block OR masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 2075 of file bmfunc.h.

References bm::bit_block_any_range(), and BM_ASSERT.

Referenced by bm::combine_any_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_or_count ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount of bit block OR masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 2028 of file bmfunc.h.

References bm::bit_block_calc_count_range(), and BM_ASSERT.

Referenced by bm::combine_count_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_sub_any ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount test of bit block SUB masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1909 of file bmfunc.h.

References bm::bit_block_any_range(), and BM_ASSERT.

Referenced by bm::combine_any_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_sub_count ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount of bit block SUB masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1876 of file bmfunc.h.

References bm::bit_block_calc_count_range(), and BM_ASSERT.

Referenced by bm::combine_count_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_xor_any ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount test of bit block XOR masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1985 of file bmfunc.h.

References bm::bit_block_any_range(), and BM_ASSERT.

Referenced by bm::combine_any_operation_with_block().

template<typename T >
bm::id_t bm::gap_bitset_xor_count ( const unsigned *  block,
const T *  buf 
) [inline]

Compute bitcount of bit block XOR masked by GAP block.

Parameters:
dest - bitblock buffer pointer.
buf - GAP buffer pointer.

Definition at line 1947 of file bmfunc.h.

References bm::bit_block_calc_count_range(), and BM_ASSERT.

Referenced by bm::combine_count_operation_with_block().

bool bm::is_bits_one ( const bm::wordop_t start,
const bm::wordop_t end 
) [inline]

Returns "true" if all bits in the block are 1.

Definition at line 3102 of file bmfunc.h.

References bm::all_bits_mask.

void bm::or_bit_block ( unsigned *  dest,
unsigned  bitpos,
unsigned  bitcount 
) [inline]

Sets bits to 1 in the bitblock.

Parameters:
dest - Bitset buffer.
bitpos - Offset of the start bit.
bitcount - number of bits to set.

Definition at line 1491 of file bmfunc.h.

References bm::set_block_mask, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::gap_add_to_bitset_l().

BMFORCEINLINE void bm::set_bit ( unsigned *  dest,
unsigned  bitpos 
)
void bm::sub_bit_block ( unsigned *  dest,
unsigned  bitpos,
unsigned  bitcount 
) [inline]

SUB (AND NOT) bit interval to 1 in the bitblock.

Parameters:
dest - Bitset buffer.
bitpos - Offset of the start bit.
bitcount - number of bits to set.

Definition at line 1553 of file bmfunc.h.

References bm::set_block_mask, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::gap_and_to_bitset(), and bm::gap_sub_to_bitset().

BMFORCEINLINE unsigned bm::test_bit ( const unsigned *  block,
unsigned  bitpos 
)

Test 1 bit in a block.

Definition at line 1474 of file bmfunc.h.

References bm::set_block_mask, bm::set_word_mask, and bm::set_word_shift.

template<typename T , unsigned BPC, unsigned BPS>
void bm::tmatrix_distance ( const T  tmatrix[BPC][BPS],
unsigned  distance[BPC][BPC] 
) [inline]

Compute pairwise Row x Row Humming distances on plains(rows) of the transposed bit block.

Parameters:
tmatrix - bit-block transposition matrix (bit-plains)
distance - pairwise NxN Humming distance matrix (diagonal is popcnt)

Definition at line 352 of file bmtrans.h.

References bm::bit_block_calc_count(), and BM_INCWORD_BITCOUNT.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::compute_distance_matrix().

template<typename T >
int bm::wordcmp ( a,
b 
) [inline]

Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.

Parameters:
buf1 - First word.
buf2 - Second word.
Returns:
<0 - less, =0 - equal, >0 - greater.

Definition at line 371 of file bmfunc.h.

template<typename T >
int bm::wordcmp0 ( w1,
w2 
) [inline]

Lexicographical comparison of two words as bit strings. Auxiliary implementation for testing and reference purposes.

Parameters:
buf1 - First word.
buf2 - Second word.
Returns:
<0 - less, =0 - equal, >0 - greater.

Definition at line 341 of file bmfunc.h.

void bm::xor_bit_block ( unsigned *  dest,
unsigned  bitpos,
unsigned  bitcount 
) [inline]

XOR bit interval to 1 in the bitblock.

Parameters:
dest - Bitset buffer.
bitpos - Offset of the start bit.
bitcount - number of bits to set.

Definition at line 1615 of file bmfunc.h.

References bm::set_block_mask, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::gap_xor_to_bitset().


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00236.map0000644000175000017500000000043211365042650013234 0ustar tlktlk bm3.7.0/doc/html/a00237.png0000644000175000017500000004357011365042650013256 0ustar tlktlk‰PNG  IHDRU]<àtbKGDÿÿÿ ½§“ IDATxœìÝwX×þ?ð÷Â.‹R5 b%Š Tì½`[0±DM0S4z“kÆ/&¶ø‹Æ¨7–ˆæ&zM@DQIÔKÔX‰%Š%ˆÒ»tØóûƒ°—fv¤èûõ<<3;sÎçf–=;ç(„DDDDDDDDDDDD$˨¦ """""""""""ª 8¨BDDDDDDDDDDDdª@ù¤'úûûWeDDO]Ë–-ѧOŸšƒˆˆˆˆˆˆˆˆˆê(Å“.T¯P(ª:"¢§ÊÓÓ>>>5ÕQOü¤ øøøÀÓÓ³ªb!"zj&Ož\Ó!QÇ5Uˆˆˆˆˆˆˆˆˆˆˆˆ ÀA""""""""""""pP…ˆˆˆˆˆˆˆˆˆˆˆÈT!"""""""""""2Uˆˆˆˆˆˆˆˆˆˆˆˆ ÀA""""""""""""Tˠʽ{÷°k×®g&ŸšŒÏ>û ‘‘‘:û322°fÍš2¿×)))øâ‹/j:Œ'RúÖpáÂ…š@튅ˆˆˆˆˆˆˆˆˆ¨ªTË JXX¼½½Ÿ™|Jzï½÷pÿþýjÍÓËË Ë–-÷ß~«³?-- Ë—//ó{m‘––¦óÓª»§‘nMô­Šò÷÷ÇÙ³gk: µ+"""""""""¢ªÂé¿*éÈ‘#HKK«¶ü>|ˆ3gÎ`á…سgOµå[ìííqûömíöÓª»ên""""""""""z>TÛ ŠF£ÁìÙ³aii‰FáóÏ?$%%ÁÍÍ 6l@Ó¦Makk‹ï¾û .„­­-ìììàçç§Mgݺu˜:uªä¶T>3gÎÄŽ;´Çedd gÏžˆˆˆ\¿~ €©©)Úµk___í±ÇŽƒ““LLLн{w\ºt 0iÒ$ÄÇÇcÒ¤IüöÛopvv†Z­F‡pàÀ@||<†ŽÝ»wÃÚÚ7oÞ,·žrsseëÑ××ýúõÃG}„ððpm,úHÅ%W¾ŠÆÈ·O\\F  üº“jƒòênÏž=ppp€R©„Ö­['™neÛ¤˜Tß ,]º¶¶¶P«Õ:t(¢¢¢´¯Éõ;}}ÝÏÏööö¨W¯ÆŒ£3tèÐ!´iÓõë×ÇÛo¿>ú¿üò‹l¬ÁÁÁøðÃ1gÎXZZ¢I“&ذaƒl‹\åêFª_V´ÝˆˆˆˆˆˆˆˆˆˆªŒxB„AÇ:tH( 1þ|‘™™)‚ƒƒ…•••ð÷÷111ÂÈÈH|òÉ'B£Ñˆ¯¿þZkÖ¬F|ñÅÂÁÁA›ÖĦM›ÊÝ–ËgË–-¢W¯^ÚóvïÞ-ºví*„âñãÇÂÎÎNlÙ²EäääˆãÇ KKKqæÌ),,,ÄþýûEVV–øì³ÏD«V­„F£)))ÂÎÎNœ|(oi%U„Э;¹6(]w999âòåËÚãŠËz÷îÝ2éV´M¤Èõ-¹xEÓ¦MÅ7„E))))zˬϢE‹Äo¼¡³¯sçÎbãÆâ³Ï>ãÆÓî×h4ÂÎÎN|ÿý÷²±:tHXZZê Rxyy‰I“&=q,re”«¹~Y‘v+‰ƒ*DDDDDDDDDTYÊêz"¦M›6P©TÚíN:áøñãÚm333€B¡€Z­†R©ÔnWE>¶¶¶puuE@@¦L™‚àà`üðÀˆˆ„……ÁÞÞ^{^vv6F…‚‚´k×N»_¥RañâÅ忥s,´oß‘‘‘###4mÚ‚3fÀÑÑsçÎ…«««Þ²úøø@^½z(šŽ+::§NÂСC%Ï“‹«xJ&CÊ}úôAŸ>}˜˜ˆo¾ù...pvvƾ}ûdc×G® ݺS«Õ¸|ù2–,Y‚{÷î¡aÆÐh4å¦[‘6ÑGªoÉÅãáá'N ÿþ°¶¶†»»;¼¼¼`mm­·Ìr¢££áä䤳ÏÑÑ@Q]–,³B¡@ëÖ­读֭[ÃÄÄD§Œ'Nœ¨T,ReÔW7Rý299¹BíFDDDDDDDDDTUªmM•ÄÄDíøøx4lذZóñôôÄÞ½{±wï^Œ5J»ßÒÒƒ BDD„Î϶mÛ`aaÔÔT4÷íÛWîBè–––eòOJJ‚••Ý"•JµZ„„$''£  @¶\BìÙ³«V­BPP‚‚‚ð믿ÂÅÅEgŠòÈÅU‘ò•TXX!”J%ÌÍÍe5„\ºu///,]ºwîÜÁÅ‹Q¿~}Ét m}¤ú–\ ÅêÕ«,[¶ ÑÑÑå–ûôéÓˆ‹‹ÃŒ3СCíÏÔ©S€¼¼<É:“‹«"åŠ}Ÿ4iúõë!BBB°{÷níëúÚGŠ\”GGG 4ÆÆÆ8wîÒÓÓ+\öŠ’ê[rñ¬]»...P*•èÝ»7¦NŠGTf¹ºtuu…ŸŸbbb×®]ÃéÓ§µé"!!pîÜ9ܼy …BoÝEEEáÀ€ÇcÇŽzëJ_,Re”«›Šö˺&<<žžžø×¿þ…ääd´k×7nDrr2222ðöÛoãË/¿Dff&~üñG|üñÇHHH@ZZ¶oß###ÄÆÆ" +W®ÔÆÑSö¤ó†¡‚kªôíÛW´mÛV }útñÊ+¯”ÙŸšš*Ôjµ ”\SE..}å+Éßß_ ………OíÛørqI•¯*cÓh4HIIÁ /¼ üº“kƒ’ÒÓÓqáÂ4jÔ]ºtAdd$ÂÃÃ1dÈ*o“’¤ú–\<¹¹¹¸párrràììŒFé¤ih™ËsýúuÄÅÅ¡wïÞ°´´PT¯‰‰‰ÈÏÏGrr2ú÷ïŽ;ÂÇÇ}ûö•Œ5##Ë—/ÇÙ³gñûï¿ÃÔÔ½zõ2xª­òbÑWF}ucH¿4ÔäÉ“­MTÓ¦OŸ|þùçÚ}ÄÌ™3ñæ›oâ›o¾ÁÞ½{µëÞ\½z7oÞDXX>ù䄆†jÏóóóæM›pöìÙš( Ñs¥ZUˆj«˜˜?~\òõÎ;ÃÙÙ¹#zr¡¡¡x饗°wï^8::" ë֭ý{÷ R©$Ï ÂòåËqéÒ%ýÏJÝÔ¦A•ùóçk§W+æää„%K–ÀÜÜ3fÌ@@@ú÷ïcccX[[ãÒ¥K ìY³©=oóæÍ 2hš="""""""""ªeM@T¨T*ØØØH¾^r1÷Ú®[·nعs'>ÿüs$''ÃÁÁ‡–PŠ•wpp(³ÿYª›ÚÂÍÍ Ó¦MÃêÕ«akk+¹î Éuo^}õUíÀÌÔ©Skª(DDDDDDDDDÏ>©BDÏ…'yR%?«qW3¡¶4†­“Y•Æóî»ïâСCpvvFff&²²²àåå…¾}û¢gÏžèСLLL R©pçÎ899aúôéøðÃannކ âÞ½{h×®Ž9SSÓ*ˆˆˆˆˆˆˆˆˆÊâ“*DDËI+@\h&b®dàÑÅ $ßËÐ þ´U•ª$$$`áÂ…˜3gŽÎº7-Z´@‹-p÷î]ÉuolllžxÝ"""""""""ªªÑs+3>±¡{å1¢.¤#=2 ¥šüÿ=ÄWßF~ê´ŠŠŠŠÒY÷fÇŽ(((@=MÅæææ¦=¾x°%((`bb‚Áƒk_VÖ½!""""""""ªí8¨BDÏzyÖ¸s( 1—ãÑÅ <ŽËƒB(ŒÐ ¢"_wVĪTáº7DDDDDDDDDu×T!¢gÞ½_’qtå ˜ä›Œ”ÿD1Ä›¿vA½†ƒ&"¢Š»wïBBB0mÚ4ƒŽ?pàìììлwï§=~JHDÏ<‡Q ñÅwpzäú¹/Tè\…péëG0±0†ÊÌ&õ¡ªo •¹ÔJ4l[ï¹p™8qbM‡@DôÄfÏž>µôÃÂÂàíímð Š¿¿?zöìù\ ªðþAT{üôÓO5B¥mÚ´ !!!5Ñ3kàÀ˜={vM‡Qi|ÿADUÞõïùþ$ˆž™êD\xq¶¹×ˆÇ­} …€¦Pþ‰¥©2å"ï±ùY…ÈÏ,D~¦y™…÷/[Ã~¨µäù7?B­L˜XÃÄìï3#˜˜ÃÄÜ-X¬±I•–µºùûû&L˜PÑUŒ¿¿?ÆŒSÓa<·xÿ ªyŇςóçÏÃßߟ×¢§Àßß_ïtÕuEñuÏÅÅ¥f!¢:á·ß~+÷úÇA"z®˜Û™ ßGÍÑmzüùcnøÄ#?[!DÑ‚*¥X6WcÔ×mËM+/£JS#Ùü,[¨‘“^€¼ŒBd%æ#?3y™…ÈÏ*D^F!ÌíLdUN~øk%eÌ ªo\ôÄŒ¹:Œµesµäùš#¥B6ƪÀé ‰¨.R(žþõ4 fÏž]»vÁÔÔóæÍÃ’%K~~~øøã‡áÇ£°°P{Þõë×1sæL\¾|-[¶Äòå˵×Ú¥K—bûöíHOOGÿþýñý÷ߣyóæ€cÇŽaΜ9¸{÷.:uê„;v gÏžˆÇ”)S0yòdÌž=gÏž…££cµÔÞ?ˆj–¯¯/&Ož\ÓaTOOOøøøÔtDÏœgé:½ruu­é0ˆ¨066.w¥U&OžüÌ]X‰èÙUòCSk%z¼o穘ˆ«»â”_4®RbpÅÜNzÀÂÄ¢ü kIíǼ€öc*6åXI/ºZ£ASäe"ÿ±y?-“Ÿ¼ÌBØ»X˪™}.>†‰¹QÑfõÿœ1+œé>à Z›JžŸ—@g@y‰ˆ¨¬K—.aРAˆÅ•+Wàáá¶mÛ¢mÛ¶˜6m|}}1jÔ(x{{cÞ¼ypuuEff&†///œ8qgΜÁرcaooŒŒ ìܹçÎCãÆñæ›obõêÕØ¶m¢¢¢0nÜ8ìÞ½Çdž ðÚk¯áþýûÈËËCpp0ÌÌÌpøða888ÔtÕÕ9O<¨ò,̹JDÏ—–-[–Ù§¬g„No4‚ã[üu$¡ßÅ"ía „0³­ÙGœí]¤§3D÷›¢Ã˜<ä=.DnFáßS˜i´OË@ÈOvâÿî#öÇÚí’O˨êcȲ²uJDDº¬­­±fͨT* 8~ø!|}}Ѷm[Œ7ãÆÌ;ß}÷ ((vvvøàƒ/½ô¦M›ít¹¹¹°°°€¯¯/òóó?þø#\\\´Óš-Z´J¥ÙÙÙ€ììllÙ²M›6­Î* """""zf<ñ  ç)%¢g‰‘R¶ Ñöå†x’†Ðoc=¦u|úÆÎfÌžøü!+Z!'µù™Êü½¶L^VÑïÊz|z…ˆHŸ6mÚèÌÃÛ©S'?~õëׇ“““αÅÓqEDD ,, öööÚײ³³1jÔ(xxxàĉèß¿?¬­­áîî///X[[#""íÚµÓž£R©°xñb@rr2ŒŒŒ8 BDDDDDT uûÓB"¢ª¦Z²BËAVˆ»ú¸hÇs̲¹Zvz1""Ò/11Qg;>> 6Dƒ _î±–––4hŽ9¢}-;;[û$åúõë±~ýz\¹r›6mÂøñãqåÊXXX”Isß¾}Úyëk"""""¢g•ü ËDDϱÆÎæ?éADDôä"""ÈÈÈÀöíÛ1jÔ(¸ººÂÏÏ111€k×®áôéÓ777ãÖ­[€¬¬,ôèÑû÷ïÇÚµkáââ¥R‰Þ½{cêÔ©xôèÀÝÝÔ¬œ?o¾ù¦ä‹DDDDDDT1T!"¢jsïÞ=ìÚµë™É§¦ã³Ï>Cdd¤ÎþŒŒ ¬Y³¦ÌïµEJJ ¾øâ‹šã‰Ô¶¾%OU´ýƒ°cÇŽJ¥QìÀ¸páB•¤U×ôíÛóçÏÇ!CЮ];´jÕ 3fÌÀ«¯¾ www8::bèС=z4ÜÜÜm۶ŪU«Ð·o_¸¹¹¡]»vèÔ©&Mš„·Þz ‘‘‘èÒ¥ ÜÜÜ0qâD¬Zµ 0tèPxzzÂÉÉ nnn6lÖ­[ss󚬂Jãý£jñþQýž—¾U—ðºRµêêu…HNtt´ÎSÃu=ŸšvíÚ5|ÿý÷ežªÎÊÊ‚¯¯o™ßéÉœ9saaa5Æ3ƒ*DDTmÂÂÂàííýÌäSÒ{gû÷ïWkž^^^X¶l¾ýö[ýiiiX¾|y™ßk‹´´4˜ŸVÝ=tk¢oÉ‘‹§*ÚþþýûØ´iS¥Ò(æïï³gÏVIZu‰‡‡Î;‡k×®aùòåøùçŸñË/¿@¥RA¡Pà‡~ÀéÓ§áåå…ëׯã—_~ÁܹsóçÏÇÍ›7±hÑ"=z?ýôŒŒŒÐ¼ysܹs[·nÅâÅ‹qçÎLŸ>]›ç¿þõ/œ={‹-Â7´‹Ý7oÞ5R•ÅûGÕâýCÞópÿ ^WªZ]½®ÄÁƒŸ™|JZ·nöiéêòí·ßbçÎøå—_tögffjŸKþþ<«LûüöÛo¸qãFGT{ÕD_8¨BDDT%Ž9‚´´´jËïáÇ8sæ .\ˆ={öT[¾UÁÞÞ·oßÖn?­º«î6¡g_òÝl\Üü7?ªð¹¦¦¦:t(ºwï^æµÎ;ÃÍÍ –––e^kÖ¬† VfA{µZAƒÁÝÝ5*s^Û¶m1lØ0´hÑ¢ÜxbbbðÃ?Hþ\½zµÂe¤'Ãû‡áxÿ¨yùù…øõ×?ñÁßãèÑç盺†×•çSmºv%%=Æ®]g0fÌæš…$\¸p™™™Õ–_||<®_¿ŽI“&áøñãÕ–o]UÝíS—ÕT]qP…ˆˆª•F£ÁìÙ³aii‰FáóÏ?$%%ÁÍÍ 6l@Ó¦Makk‹ï¾û .„­­-ìììàçç§Mgݺu˜:uªä¶T>3gÎÔ™Î(##={öDDDàúõë0`LMMÑ®];G;'''˜˜˜ {÷î¸té`Ò¤IˆÇ¤I“  èÛ!ÎÎÎP«ÕèС8 èÍäðáñ{÷nX[[ãæÍ›åÖSnn®l=úúú¢_¿~øè£®E©¸äÊWÑØùö‰‹‹ÃèÑ£”_wRmP^ÝíÙ³P*•°³³Ãºuë$Ó­l›“ê[$〥K—ÂÖÖjµC‡ETT”ö5¹~÷¤}½´Ê¶½ ,Àܹs!„­#ðó󃽽=êÕ«‡1cÆèü“/W^¹z’г¢mXÑyý6?û¯ß»b‘–UeéוJÉŸúõë×tˆeðþÁûï»TFàܹ¿°x±?œœ–â­·¾ÅþýW••WåyU7^Wx]¤ë¹¸øøø M›6033ôiÓPXXˆˆˆ :T'ŸI“&áüùóî?µýÚe¨Çs±wï%¼ñ†7ºv]†ÿû¿½¸p!¼JÒ®IBlÞ¼/¿ü2ÆŽ @zz:,X¼öÚk3f >ŒmÛ¶a̘1?~Âÿû_xxxàÁƒåÖS~~¾l=ÿM¿þú눉‰Ñù’„©¸äÊWÑØýí#——TŒ±±±˜7ožN>+V¬À­[·´ýçØ±cðôôĈ#°fÍh4šrÛG®Oœ8×_ÇÇÒ¥K `JS.6CÊdèß„Tþåõ¹ãÇcòäÉpuuÅøñãµ×Чї ÅA"¢$7Çr]ž7\Î¥K— R©‹}ûöaíڵػw/òóóqòäI¤¦¦"::+W®Ä»ï¾ [[[ÄÇÇcþüùøä“O´é´oß½zõ’ܖʧsçÎø÷¿ÿ­=.00………°··Gff&†OOO¤¥¥ÁÛÛ³fÍÂÙ³g…qãÆaõêÕHKKÃøñãñÚk¯AíÛ·ÃÆÆÛ·oGß¾}‡W^yóæÍCzz:Ö®] OOOܾ}yyyF`` > ú ÇÂ… áìì,[>>>˜2e lll0tèPƒ¾(—\ùJûùçŸÑ³gOüç?ÿ‘üGV®}²³³qòäI(SwrmPºî7nŒ·ß~_~ù%233ñã?âã?FBBB•¶IiR}+##C2ž£GbçÎ8wîaii‰Õ«W€l™õÕ¥\YIù¸áýo†ÁïÕ¸²#iþ××M­••J¿6°±±Áˆ#$Ú¶m[Ó!–Áûï¼TìþQY7nDcåÊèÚuÆß‚={ÎãñãúÖë ^Wx]‘«çüü|ãôéÓ¸uënܸàĉÈÉÉÁõë×uò¹}û6222*ÔêµKN^^޹Ž3þƒN¼0gŽ/‚ƒï °PóÄiÖ6·o߆±±1öíÛ‡•+WbÏž=8uê ŠÇÃßßo¿ý6¾øâ X[[cÿU›zþ IDATþý˜0a¾ûî;m:-[¶Dûöí%·¥òiݺ5~þùgíq!!!Ðh4hÒ¤ rrr°hÑ"¸¹¹áçŸÆüùó±aÃüùçŸHHHÀ§Ÿ~Š÷Þ{AAAÛ·oǼyóððáC´lÙ{öìÁ;ï¼ ‚vý—^z Ó¦Mƒ¿¿?š7oŒ3°hÑ"(•JdggÃÚÚFFF°¶¶†J¥B`` ºuë¦m×W_}£FÂ?þˆwÞyÙÙÙØ²e š6m  èë£GbË–-øë¯¿0}útÙD®]»†;wî`âĉ€‰'bùòåX·nŒŒ¤¿/!—™™™dùJc}ܸqhÖ¬¶nÝŠ¥K—bÊ”)˜5k–Î4CúÚ§d;•¬»}ûöI¶Á‚ tê.77gÏžÕN§Ôºuk¨T*¤¥¥ÁÁÁ¡Rm"Gªo=Z2žœœEߦ´°°€¯¯¯ö ½\¿ëß¿ÿ÷õ¾}ûjyÒ¶þ7 âï˜™™é­#___Œ7ãÆÌ;WûZ®¼...’õôã?ÊÆY‘6,OÞãBDœHÅÝ_’sé1FEßΆ4ÏΈuï¼”n'Þ?äïO"<<û÷_¿ÿE<|˜%òòŠÖb*((|¢4k3^Wx]‘«çÅ‹#//Ë—/‡‰‰ ^|ñEtéÒiii’Ók3´ÿÈå_[®]¥jpîÜ_¸ŒC‡þ@vv.Œµ×h®SÌÍÍ1cÆ (•JtîÜcÇŽÅñãÇѹsg!ðÆo@¡P G066ÆÄ‰µÛ?ýô“6Ò×åÒÛRùÌŸ?[·nE||<5j„'N`äÈ‘€sçΡaÆڿ•nݺaĈøí·ß`kk‹®]»bàÀ€×_ÆÆÆÈË˃¹¹9 ÌÍÍ¡T*Œ10`ÀôíÛ'OžÄÈ‘#‘››‹9sæà…^Pt¸xñ"öïßGÁÃÃ[·n•¬ÃððpDFFjß뻸¸`×®]˜5k–ì—µäâ255•,ŸZ­ÖIgРA°±±A`` ¾ýö[ 6 ¯¼òŠÎºrísòäIɼäb,.¯”‚‚L›6MûäYëÖ­‘™™Y¦}‚ƒƒ%ÛY©TbðàÁ4hàµ×^ÃáÇeóäûÎo¼!›>†þMÈå?qâD>—ŸŸ­[·j¿ôegg¥R‰ÌÌL4kÖ¬R}¹28¨BDTK•7oø‡~XƒU6mÚ@¥Ri·;uê¤ó-•âl Ôj5”J¥v»*ò±µµ…««+0eÊã‡~DDD ,, öööÚó²³³1jÔ( ]»vÚý*• ‹/.7﨨(c¢oÄEFFŒŒŒ´ÿÀ„„„`ÆŒpttÄܹsáêꪷ¬>>>Bh¿a—››‹èèhœ:uªÌ4†ÆU<Ý€!å€>}ú OŸ>HLLÄ7ß|8;;cß¾}²±ë#×€nÝ©Õj\¾|K–,Á½{÷аaCh4å+®"m¢Tß’‹ÇÃÃ'Nœ@ÿþýamm wwwxyyÁÚÚZo™Ÿ4C˯¯íoÞ¼©}{èÐ!¼þúëzcŠŽŽ.³ˆ££#ù6ÖWORq&''W¨ µi©QpÇÿ]ð"CÒ!4€Bˆgï³Ã:÷Þ?äðþQ¶Ì†266Çöí¿aïÞKøóÏh¨TÆÈÏ/º¨<«x]áuÅ¿#;;;íïi{CúO]¸vKOWáÓO÷cß¾ËHNÎÔ¹V<‹ƒ®Åš6mªm;xñÅqåÊí¶©©)€¢vU©T066ÖnWE>ÖÖÖèÞ½;N:…aÆáÚµkðòòP4½ÔÇuÞŸçææ¢oß¾(,,DóæÍµû•J%ÞxãróNHH(3PØ¢E ÄÇÇkËRü!ôõë×±~ýz´jÕ ¯½öºwï®·¬¿þú+€¢)¢é¸ñÇ [·n’çÉÅebbbpù cÇŽèØ±#ÒÒÒ„¹sçÂÁÁ+W®”(ªg©¼ôÕ>%?Ü—ªG¹v.((й~@«V­ôæ+—fEb+!úò/ÙçT*nß¾;v ::–––’ÓQW¤/WUˆˆjXñË»ví‚©©)æÍ›‡%K– ..ï½÷:¤3Gî¿ÿýoí·ê¢ÄÄDíøøx4lذZóñôô„··7êÕ«‡Q£Fi÷[ZZbРA8räˆö¼ììl( ¬\¹²Ì£}ûöÁÕÕVVV:û---qã†îâ­IIIÚãJ¾™P©TP«ÕHHH@rr2 tþé.M={ö`ÕªUxõÕWµûgÍš___Ù^åâ2111¸|%B¥R sssÉã %׉‰‰:u/// ÿþ066†µµµdº†¶‰>R}K.!Ö¯_õë×ãÊ•+Ø´iÆ+W®È–¹2ñ”ô¤m ðîÝ»>>>˜7oFŒ!YÏÅ4hP&Íâ8åÊ+WO²qV¤ r4¸¸ù¶v=‹ÜCÀ”\ÔUÿ×+ïIƽ#É’¯O¿\v1ú’¾éqEöõçåü÷ìWËWï¼ÈáýC·Ì†¸{7Þ޷ѨÑ{X±âkYHªÏ|>øÞ c«G# j؇XÅx]áuE®žSSS J£Ø“,”\®]—ðûï/ ;Û—/ŸÖî7ôZÑ´é<ýU#kë:¾äº€@Ѻ U’Þ|\]]qðàA¨ÕjôéÓG»¿~ýúèÒ¥‹Î´á¹¹¹P(ؽ{7RRRtÒ F÷îÝË»»»vp«Q£F8þ<Þ|óÍr¿âîîŽ+V <<­[·F\\°{÷î2ÇöéÓ¡¡¡ ÁæÍ›ñÑGaÚ´i˜1cF¹s|ž>}qqq˜1c4h Ý?uêT,X°@ö±k¹¸ÔjµÁ劾ܶm.^¼ˆwß}!!!°µµ5¸}¤ÈµAéÁĨ¨(8::j÷Ÿ;wééé.{EIõ-¹xÖ®]‹Ã‡#$$½{÷ÆÔ©Sµ ¤Ê•ù7Þ¨T_7¤üúÚÞÌÌ J¥o½õvíÚ…?þÞÞÞ²uäêêŠ÷ßü1ìììpíÚ5œ>}²å —¬§Šü ê£45Bï9Í0oÍ Ìð@¼ Püý´Š¼&]Íáô†­Þ㤸®­Ü4ŽÏÊùŸÙƒ¡Xbðy¼èâýCïeïú´mÛžž­±xñ·èÑÃaa1P©Š¦ð1dúžwߌ޽kÏ´´›6mªð9¼®èz¯+rõ,7(T<íVrr26lˆóçÏãÞ½{’ÇK© ×®ñã{â?ÿÙŒˆ36HLÌ€RilðÓ)Û·¿Uá<Ÿ¦ñãGèiðñ±±±8wîúõ뇬¬,%KʾOëØ±#¾ùæ\¿~ûöíömÛ0bÄŒ=666eŽ¿ví’““ááá¡35lØ0lÛ¶ sçΕ¬3¹¸T*•ÁåŠ/?pànß¾Q£FaóæÍ:ƒ’rí#W—r1OQ•‘‘ ܺu ÑÑÑ’å•"×ÎÝ»wÇúõëáéé‰^xááá¸víúõë÷ÄiÊ tUG™ºté¢slBBZµj¥ÝÿçŸ"++«Üt+Ò—+‹ƒ*DD5LjŽåž={êSrŽÜº¬oß¾˜?>Ö­[‡;wî [·n˜1c’’’*”Î÷ßßÿ]ûÏQém©|€¢ùj_~ùeœ;wîîîÚ4Û¶m‹U«V¡oß¾èÕ«ÂÂÂпLš4 FFFðôô„““œqñâE¬[·Nû-¸FáÃ?ÄW_}…=z`Á‚èÑ£zõê…+W®`âĉ1b¢¢¢Ê-ÏÀ1pà@ÄÄÄÀÛÛÇ/óí2 hŠ…#Fèüã Í'=kÖ,>|=zô(7®]»JÆ@¶|%íÝ»›7oÆ?ÿùOøøø”ûÍ$}íSR麓jƒGéœ÷ꫯbÕªU2dLLL R©Ðºuk,X°¨t›H‘ê[±±±’ñlݺ;vì@—.]ШQ#\ºt ëÖ­ ßï ©K©xâââª¼í½½½ÑµkW¼õÖ[²oÔ_}õUìÝ»ŽŽŽèÚµ+ÂÃÃáææ¦·¼=’¬§¡C‡JÆYÑo’€±‰ç“cöëob˜Iˆ8™†{¿$!úâc( 4 ÉÇÊÍ›˜ µ[ƒr_3DeÎ}–οŸYö'‡÷Þ?JãýCþþaKKÒÓƒqâÄièÞ½;œ‘””¤ó-|Cé{_TRM]»À¢;§áûï·âüùpìßWðøq.”J#Ù–Út€üüØ ïè舯¿þ~~~ˆŠŠBÛ¶mááá!9 %å¿ÿý/nÞ¼©ýоô¶T>P¯^=ôíÛ7oÞÔùœ yóæx÷Ýwñü:tÀÇÑ©S'¼ôÒKP(puuÅ´iÓЦM„……aæÌ™Ú§34h€¯¾ú ÿüç?Ñ®];Lœ83fÌ@‡pçÎ :½{÷FBBB¹åéܹ3:w¤$Œ7K—.ÕNGehûtëÖM2/¹…èØ±#¦OŸŽ6mÚ ==:u*·¬¥•n©v..ß´iÓààà€GI^wK’ë;¥Ÿ|)ÉÎÎî‰Ëdhþ¥Ÿî0`vïÞ9sæ@¥Ri×yùú믱zõêJ÷å'¥Rÿ-ÑS„+VàâÅ‹Ú}~~~øê«¯°gÏtêÔIûèeóæÍ„®]k×›R…Bxzz|NNNÎ;+++íB‹OÓæ?ÿüÍš5+³.ÄÝ»wqÿþ}tìØQg®Î„„„††¢W¯^Ú,#""pçÎØÛÛK¾Q”RXXXª —Tùª26Fƒ””í\¦åÕ\””žžŽ . Q£FèÒ¥ "##Ž!C†Ty›”$Õ·äâÉÍÍÅ… ““ggg…+RæŠÄSZeÛ¾¢®_¿Ž¸¸8ôîÝ–––:¯I•W_=Ueœå]¿rR ~,wƒ’ÿg&ŒŒŠž^)ùŽÙaDC ]m_©¼‰÷b¼Ž÷ª¿øúúbòäÉe‘oÝz¤]°>..½Ü–­[§`ìØ§÷wXQ“'OPôAEðº¢ß³|])ö$Gøý÷ß œÉMTUù×Ôµ«¼¿¯üüBüö[öí»Œ£Go /¯ ………ºë¼>111pvv®ò¾\ÚgŸ}†Æ—yÁA"¢„þóŸ:s>nÚ´ GÅÖ­[ŸÙA¢Ú*&&¦Ì"ï%uîÜÎÎÎÕQíô¬Ô“¾ë×ãØ<„ÿ7w%!%<F*4ù-ZaøWmª9Úgïô,©«×E©A•bB\ºÀÀ+Ø¿ÿ2RS³¡R!?_óÌ ª‘~úþ¾²²òðßÿÞ@@À%üöÛmñ¿µ+ž…A¢º&)) W®H¯ƒØºuk´iÃÿg !5¨Â鿈ˆjXUÍåLD•§R©Ê ¸XE¾õó,{^êɼ‰ ºLmŒ.S#%<MFè¿c¡4}:ßÂ#¢ºëY½.* ôêõ"zõz+WŽEpðìÛw{÷^ªéЈ¨©_ßcÆtǘ1Ý‘šš…_~¹†¯¾ú‘‘É5ÑsI©TÂÊÊJòuµZ]Ñ<›8¨BDTäæX.½ØWé9r‰¨êÙØØhçò&iÏc=5hmŠž³š¢ç¬¦ÈJ̯épˆ¨–y®‹ÆÆFpqé—øâ‹‰ÈÎΫ鈨²¶®OϾðôì‹ØØ´š‡è¹dee¥]{†žªÕ xxx”;ÇrË–-ñàÁí±GEhh(Z·n]Sá€ú6ªšˆ¨F™šª`jÊk!ÉkÒDú›òDDuUˆˆjSSS :TgŸ‘‘‘v!V°µµÅ°aÃ~øA2­Ú:g7Q]ÇA"¢:æY³›ˆˆˆˆˆˆˆˆ¨¶ã  Qó<ÌÙMDDDDDDDDTÕtDDuUaž·ö&âôÊú&""""""""¢:OòI…BQqÕBÙ×ó2 qso®íŽGnz`ð§­ª#´§BS “V€ÜÔä¤"7­9©ÿû±ëaVC¤´1iVÑÕÙé¿ÆŒOOÏꊅˆ¨Fùúú"00Pòõ¬„|\÷‰ÇÍŸ )Ð ¾›ÔŽAèÜôBd%æ#+1Ù‰ùÈJÊGVB>w1Ç‹nÖ’çÝð‹ÇùÑ:ûL,ŒQ¯j+%¬ZšÊæ›Y˜V%ñÕv²ƒ*&LÀ„ ª+"¢•ŸŸ_î JÚƒ\ýOî%C¡(z²£¤Â<ü¬B¨êWm@ÈN)€B˜6¾\ß9˜„Ï#Q˜§Ñî3R)P¯¡fL`ÑL-›Mk·hädµ•¦ÖÆP[)adlø@QvácøûûC¥R|Þ?ˆj˜¿¿M‡P¥üýý1f̘šƒè™ãïïÿL}>øÛo¿ÁظŠÿ'¢gÒ©S§0qâÄ2û¹P=‘„„?3ú],žJƒÂXQ( 51XVB>ê5ŠfÈË(h #¥ÍLdó¹±'y…È{\ˆÜŒä¦";¥B#ÐÎã Y!=½X£.fäÕõ^P¬‘ õªdaJ3obó&Òñ"00Pö)""¢òðþADU)??¿Ü>ˆˆJ AHHHM‡ADuUˆˆJP@ȳéøã»XĆ>†‘R!Q ¿ÎÊOãnJ¾æ0¢!†®¶—|½0O ?»¦ÖJX6WÃÄÜêƨg­B}[¥Þk{SXÛËOÑõ4é[ƒ†ˆˆ¨<¼QUòññOM‡ADµßQUà  M¡@Á-Klï~ Gþy0ú{¿žÁP(Ç×mÑ¢¿•vÚ, c(€Â¨g#?­I“næhÒͼÒe """"""""¢§‹ƒ*DD?ʃH+ñDˆ¦hÚ.Féó@¡4‚yc´èoùtƒ$""""""""¢ÅA""–-ÔPõMÄ´ÍÃQX ARXbC3ñèR:b.g"?«FÆO¦)ûôJVB~ DMDDDDDDDDDÕɨ*¹wïvíÚUIÕŠ|jZpp0>ûì3DFFêìÏÈÈÀš5kÊü^[¤¤¤à‹/¾¨é0žHmë[rñÈÕ³ÜyUÑg6mÚT©4ŠùûûãìÙ³U’ÖÓ¦0´©lj¶p[ó"¦ë‚INüIK´Ñ›VXÃQÑÓV%ƒ*ϲ#GŽ --­Úò{øð!Μ9ƒ… bÏž=Õ–oU°··ÇíÛ·µÛO«îª»Mj›êªg’gÙBv¯¼€!+[aúåî¹µMM‡DDDDDDDDDDOY• ªh4Ìž=–––hÔ¨>ÿüs@RRÜÜܰaÃ4mÚ¶¶¶øî»ï°páBØÚÚÂÎÎ~~~ÚtÖ­[‡©S§JnKå3sæLi‰222гgODDD®_¿ŽÀÔÔíÚµƒ¯¯¯öØcÇŽÁÉÉ &&&èÞ½;.]º˜4iâãã1iÒ$~ûí78;;C­V£C‡8pà >>ÇÇîÝ»amm›7o–[O¹¹¹²õèëë‹~ýúá£>Bxx¸6}¤â’+_EcäÛ'..£GP~ÝIµAyu·gÏ888@©TÂÎÎëÖ­“L·²mRLªoŒ–.] [[[¨Õj :QQQÚ×äúÝ“öu}õ,WŽ’*Ûg„X°`æÎ !Ê®1RšŸŸìííQ¯^=Œ3Fg H®žäêW*Ί¶}UP[r‰*""""""""¢gž@øøøH½¬ãСCB¡Pˆùóç‹ÌÌL,¬¬¬„¿¿¿ˆ‰‰FFFâ“O>F|ýõ×€X³fÐh4â‹/¾Ú´8 6mÚTî¶\>[¶l½zõÒž·{÷nѵkW!„?vvvbË–-"''G?~\XZZŠ3gΈÈÈHaaa!öïß/²²²ÄgŸ}&Zµj%4HIIvvvâäÉ“"//OÄÆÆ ±sçN‘““#EýúõEXX˜ˆŒŒõêÕcÇŽgÏž¹¹¹:uô×_‰ ˆöíÛËÖe§N„···Bwww1þ|ík‘‘‘B­V—ù]_\Rå+- @ôèÑCìÚµKää䔟\ûÜ¿_˜™™ !D™ºÓ×%ë.11Q¨Õj±ÿ~‘““#N:%ŒŒŒD|||•¶IIr}+==]2ž#GŽˆ¦M›Š»wïŠôôtñÊ+¯ˆ™3gêíwúêR.¹z–;¯*úÌÉ“'…“““Ðh4bÖ¬YbÈ!âñãÇ’õZì?þjµZˆììl±qãF@lܸQ¶žäêW.Ί´}I>>>Bæ²HDDDDDDDDDϹ*TiРÈËËÓîóòòcÇŽ111€öƒ×;wî¥R)òóó…B\¹rE4nܸÒùÄÇÇ •J%>>B W¯^Š¦ãŠŽŽÆ©S§0tèPÉóäâ*žNÉò@Ÿ>}ЧO$&&â›o¾‹‹ œ±oß>ÙØõ‘k@·îÔj5._¾Œ%K–àÞ½{hذ!4M¹éV¤Mô‘ê[rñxxxàĉèß¿?¬­­áîî///X[[ë-ó“ÆSçU¦ÏܼymÛ¶:t¯¿þºÞ˜¢££áä䤳ÏÑÑ€|ßÐW¿Rq&''W¨í‰ˆˆˆˆˆˆˆˆˆ Qekª$&&êlÇÇÇ£aÆU•¼Aùxzzbï޽ػw/F¥Ýoii‰Aƒ!""BçgÛ¶m°°°@jjªNšûöí+wáoKKË2ù'%%ÁÊÊ €î‘J¥‚Z­FBB’““QPP [.!öìÙƒU«V!((AAAøõ×_áâ⢳¾DyäâªHùJ*,,„J¥æææ²ÇB® ݺ „——–.]Š;wîàâÅ‹¨_¿¾dº†¶‰>R}K.!Ö¯_¤¤$øûû#''ãÇ7¨ÌOOUœW™>coo½{÷âË/¿Ä¼yóÊ[ž  >>¾Ü8åêI®~õÅYÑ[""""""""""}ªlP%""AAAЉ߾}»ÁßÈ/éòåË8zô¨ä¶\>cÇŽÅÕ«W±yóf¼óÎ;ÚsÜÜÜŒ[·n²²²Ð£Gìß¿îîî8xð ößóçÏãÍ7ß„±±q™ØÜÝÝñ믿"<<@Ñ‚ápss+slŸ>}ŠÕ«W# X¶l¢££Ë-÷éÓ§‡3f C‡ÚŸ©S§" yyy’u&WEÊ-^>iÒ$ôë×B„„„`÷îÝÚ×õµ¹6(-** ŽŽŽ4hŒqîÜ9¤§§W¸ì%Õ·äâY»v-\\\ T*Ñ»woL:=2¨Ì•éëORCëM_Ÿ133ƒR©Ä[o½…:àã?Ö“««+üüü¸víNŸ>­·žäê·¢}›ˆˆˆˆˆˆˆˆˆ¨Ò¤æC×TéÛ·¯hÛ¶­g½ogæyPý³ÓÓÓ4>>ž2ûÛëõR³ÙL“““imm-U*•Ôh4ÒÎÎNfŸÞëï :eïû™©d)¤”Ò[aK¡Pˆ½½½ØÞÞÎÐt»Ý8<<Œb±KKKÃI}†ø=×××qrr333?Íw8??ËËËXXXˆÙÙÙ—×ïîîâèè(–——cjj*"þzàìì,æææ~šKñž§§§íŸôYu º¾aÖÖëõâþþ>¦§§#âíÞeíA¿‡‡‡h·ÛQ.—cqq1:N\\\ÄêêêÐ÷¤ß ³•UÏããc´Ûíèv»Q«Õ¢\.ÿð™y¯9o=yúœ÷7òOÏ̯:>>ŽÛÛÛXYY‰‰‰‰Öõé½þ³Îýýýh6›1à¶Œ¸¡†*ð_uss“9ä½Z­F­VûÀо–¯Ò_¡ åÛgall,J¥ÒÀõçÁóüýFP…‘P*•bssó³Ëø²ô|vÿB€„*9Urªä TÈA¨C!¥”Þ\(""bkkëC ø,­V+""Ü€÷mЂ05î{@–Oªð73Urªä TÈá; Xè*Ú«ƒ!IEND®B`‚bm3.7.0/doc/html/a00031.html0000644000175000017500000000753111365042651013424 0ustar tlktlk BitMagic: bm::bit_SUB< W > Struct Template Reference

bm::bit_SUB< W > Struct Template Reference

Bit SUB functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_SUB< W >

Bit SUB functor.

Definition at line 5080 of file bmfunc.h.


Member Function Documentation

template<typename W >
W bm::bit_SUB< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5082 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00007.html0000644000175000017500000003157211365042627013434 0ustar tlktlk BitMagic: sample8.cpp

sample8.cpp

Example demonstrates some STL compatability set operations using set iterators.

See also:
bm::bvector<>::enumerator
bm::bvector<>::insert_iterator

For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample8.cpp

    Example demonstrates some STL compatability set operations using
    set iterators.
 
  \sa bm::bvector<>::enumerator 
  \sa bm::bvector<>::insert_iterator

   For more information please visit:  http://bmagic.sourceforge.net

*/

#include <iostream>
#include <algorithm>
#include <vector>
#include <list>

using std::vector;
using std::list;

// This example requires STL compatibility
#ifdef BM_NO_STL
# undef BM_NO_STL
#endif

#include "bm.h"

using namespace std;

void Print(unsigned n)
{
    cout << n << endl;;
}

// Utility template function used to print container
template<class T> void PrintContainer(T first, T last)
{
    if (first == last)
        cout << "<EMPTY SET>";
    else
        for(;first != last; ++first)
            cout << *first << ";";
    cout << endl;
}

int main(void)
{
    bm::bvector<>   bv;    

    bv[10] = true;
    bv[100] = true;
    bv[10000] = true;
    
    cout << "Source set:";
    PrintContainer(bv.first(), bv.end());
    
    // copy all bitset information into STL vector using copy algorithm
    {
        vector<unsigned> vect;
        vect.resize(bv.count());
        std::copy(bv.first(), bv.end(), vect.begin());
        cout << "Vector:";
        PrintContainer(vect.begin(), vect.end());
    }

    // doing the same with the help of back_inserter

    {
        list<unsigned> lst;
        std::copy(bv.first(), bv.end(), std::back_inserter(lst));
        cout << "List:";
        PrintContainer(lst.begin(), lst.end());
    }

    {
        vector<unsigned>   vect;
        vector<unsigned>   res1, res2, res3;
        
        vect.push_back(100);
        vect.push_back(15);
        vect.push_back(150);
        
        cout << "Argument vector for set operations:";
        PrintContainer(vect.begin(), vect.end());
        
        // set should be ordered by < to make set algorithms possible
        std::sort(vect.begin(), vect.end());
        cout << endl;
        
        std::set_union(bv.first(), bv.end(),
                       vect.begin(), vect.end(),
                       std::back_inserter(res1)); //10;15;100;150;10000
        cout << "Set union:" << endl;
        PrintContainer(res1.begin(), res1.end());
        
        std::set_intersection(bv.first(), bv.end(),
                              vect.begin(), vect.end(),
                              std::back_inserter(res2));  // 100
        cout << "Set intersection:" << endl;
        PrintContainer(res2.begin(), res2.end());

        vector<unsigned>::const_iterator it1 = vect.begin();
        vector<unsigned>::const_iterator it2 = vect.end();
        bm::bvector<>::enumerator en = bv.first();
        bm::bvector<>::enumerator en2= bv.end();
        
        std::set_difference(en, en2,
                            it1, it2,
                            std::back_inserter(res3));  // 10;10000

        cout << "Set diff:" << endl;
        PrintContainer(res3.begin(), res3.end());
        
    }

    // Using bvector<>::insert_iterator to set bits
    {
        bm::bvector<> bv1;
        std::vector<unsigned> vect;
        
        vect.push_back(300);
        vect.push_back(200);
        vect.push_back(275);
        vect.push_back(200);
        
        cout << endl << "Source vector:";
        PrintContainer(vect.begin(), vect.end()); // 300;200;275;200;
        
        // The "side effect" of this operation is that we sorted
        // the input sequence and eliminated duplicates
        
        std::copy(vect.begin(), vect.end(), bv1.inserter());
        cout << "Bitset:";
        
        PrintContainer(bv1.first(), bv1.end());  // 200;275;300
    }
    
    
    return 0;
}


Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00184.map0000644000175000017500000000023511365042645013243 0ustar tlktlk bm3.7.0/doc/html/a00194.png0000644000175000017500000000440111365042645013252 0ustar tlktlk‰PNG  IHDRµ(¸«»4bKGDÿÿÿ ½§“¶IDATxœíœ{HS}Ç¿êl’9»¨¥v¼¦•d”•d†JÙ º!h70"!Ô4¨èEv±?®DE°–©””XhY–íÊD+—›ZÖ²ÌdYîûþ §N§î}«½¿Øï²çyγï9{ÎïœÍ†$!X¶¿;ÀÒQ ¬!jÕ!éÜQ[[‹‡þŽX‚>3vìX„††w²r¹œÄ&¶¿b‹‹‹ë,av9SÿB,Šþtâãã»í5µÀê¢XBÔ«CˆZ`uQ ¬!jÕarIÏ\^¾|‰’’¬]»ÖáôÏÏ—/_püøqlݺµßöß¼yƒ‚‚¬_¿~Qþ~þí|€F£F£\.‡\.7´µZ­ÅýõÆ€ÏÔ‚þsóæMlܸÑâsÿk’““ ¯×­[ÿɉΩ©õz=’’’ “Éàææ†´Z-¢¢¢pôèQxxxÀÕÕçÎÃæÍ›áêê wwwdeeì>|«W¯6Ù6å§3wîÜApp0¤R)——g»}û6‚‚‚0hÐ „„„àñãÇ]ÞOiiiHII1ëÎêŽ;àêê ©TŠ9sæ@£ÑÆž>}а°0888ÀÏÏ—.]ÄÆÆ¢±±±±±(..îÑ~ws/_¾ H$¸»»ãðáÃ}Γ©ØLñíÛ·^sa–²cSÏ~˜K~~>mll˜ššÊ¯_¿²¸¸˜ÎÎÎT(lhh ­­-wîÜI½^Ï'NÓÓÓ©×ëyèÐ!úøølåååñرcݶ{ò£V«)•JI’oß¾¥““ÏŸ?ONÇÜÜ\<˜•••T«ÕtrrbNN[[[¹oß>Ž7Žz½žEEE ¢^¯gbb"gϞ͖––^÷ÿæÍ›ôðð`uu5›››¹xñbnذ$ÙÒÒBwwwfffR§Ó±°°2™Œ÷îÝcSSÝÝÝYTTͶ¶}tžÛÜÜL©TÊœœêt:Þ½{—¶¶¶lll4;O=ÅÖ™W¯^1--þþþ½æ#!! =ÎÉÎÎæ”)SxáÂêtº^mš"..®Ûg?,"êaÆ}0Û·oç’%KØÐÐ@qTUUQ"‘ðû÷ï$É'OžpäÈ‘öÓñÃ:uêÃÃÃÞ»|ùrîÝ»—GŽá¢E‹ ýmmmLOOçׯ_YTTÄÀÀ@&&&ÒÅÅÅ,A“dnn.=<<øìÙ3’?ÅÒÔÔD’ÌÊÊbHHˆÑü¤¤$¦¤¤$===©T*ÍòÓq®N§cyy¹aì×þWWW›§ÞbÓëõ¼qã,XÀ€€fddP«Õö§9¢&ÉpÕªU=z4·mÛÆÚÚÚÞ“Ð S¢¶Hùáíí {{{C{„ hhh0´666J¥H$†¶%ý€F£ŸŸŸQŸ¿¿?Ôj5T*•ј½½=¶lÙ‚Áƒ***P__ÈÏÏ7+¦… bùòå˜9s&Ƈääd455T**++áååeز²²ðéÓ§>íwg¤R)ÊËË1wî\x{{cÉ’%Ðëõ†qsòÔSl%%% ÂÙ³g‘’’‚ŠŠ ¤¦¦bøðኻ#¡¡¡¸xñ"”J%œœœ¥K—ZĶEDýáãvcc£EÐ?2™¬Ë<­V ggg899uÔÕ«Wñùóg€——®\¹‚#GŽ`Ó¦Mf‰$222 Õj¡P( Óé°lÙ2C,³fÍ‚J¥2ÚNž<Ùç}ïHnn.¶oߎ;v ªª =2˜€ùy2›½½=¤R)Þ¿?âÇŠ·'ÚÛÛA‰C† ±ˆM‹ˆZ¥Ráúõë~®…ž>}óçÏï³òòr˜l›ã'::·nÝÂëׯïÞ½Cvv6¢¢¢k×®¡±±ððáC¬\¹vvv~~£H$¬Y³f­ç>¾Ï?Ðét(--…³³3BBB,sÄ ÀJ¥BUU¼¼¼ºÔØÕÕÕ¨©©Áøñã1f̘ÇôíÛ7”••A§Ó!88nnnFãuuuxþü9<==dèÿþ=”J%¦NŠaÆõè£óÜææf”••ÁÍÍ “&M‚Z­Æëׯ1{ölæçÉTlÝÑÞÞnøV–²óëGr¹Ü¨ßb¢¶VPXXhr|âĉþã}X#¦D-î(ö‚½½=\\\LŽw¼@û“}üŸ¢îÌ›7ï¯÷ñBû ŽŽŽsÖ3c8Ž´´4NÒm•JE‰DÂ_|‘}}},++£ƒƒ333ÙÖÖF ¾þúëÔétüøã €‡¢N§ãûï¿Oý¹rssyôèÑIÛ¿üò ¥R)³²²¨Õj™˜˜HLLLdoo/år9;ÆQ&“ñÇdKK ííí™Íþþ~-?¯¼ò Ÿ|òIƒ¾µk×211‘\·nÁXLL cccùÁðá‡Ö÷ ñСCìëëcRRƒƒƒ æ=þøã|ë­·fí¯¥¥…ØÚÚ:eLãmXSSc0.•JÙÐРÏåµk×ôãÁÁÁÌÌÌäÁƒùØcéûu:år9SSSMj5…)-¦rcjžJ¥¢L&3(¾¸¸8FFF’$]\\X[[K’3αN§c~~>7mÚD///>|˜Fã3VÌûöíÓǦP(èççÇGyÄàHNNfJJ ½¼¼Læp2~úé'>ýôÓ¼í¶Û¸ÿ~677Ïh¾©bž—5³»»;¬­­õméÛvvvþÛ5”J¥°²²Ò·§Kkk+ …AŸ··7 ©© õõõpuuÕiµZ<øàƒÆš5kôýÖÖÖxõÕWü÷Viìxzz¢¥¥Z­vVþÀÂÂ+W®œV\cm¥R)jjj°ÿ~466bÉ’%Ðétör¹\ÿ÷hþššš âH$pss›–Vc˜Òbê1U nnn°±±Ñ·}||P\\<ÁÿLr\^^Žèèhx{{#66¡¡¡3º¶ÆÒÚÚj㘘˜I×ÌgΜA[[HNðUQQ––DFFN˜€€€tttàÓO?ÅÆáëë‹“'OÎJïX楘Gw÷FÑh4X²dÉ|œZÏâÅ‹'|L0êW&“!((§OŸÖiµZH$¼ýöÛæ//ùùùˆŠŠšÔgii)"##±aÃDyy9RRRLêœ63xO>)*•ŠëׯçwÜÁàà`®X±‚áááÒ¯óFihh ¾][[k°fÞ»w/&mët:nݺ•ŽŽŽÜ¸q#W­ZÅððp&&&’$>L™LÆÐÐPº¸¸pË–-ÑŸÇÉɉ¡¡¡”ÉdúhRŸ™™™ú}ŽÑ}£™ò¿n€¢ÕjY\\l°ùñpá²§§g˜Z­fAA/^¼8aìÒ¥K,((˜tÃáêÕ«,((àï¿ÿ>oþfKOO yþüy’ÿUii©É9†uuu<þœ8qâfhs`Â`à–D<&˜ ¢˜3A³@`&ü /Í­_*7–KIEND®B`‚bm3.7.0/doc/html/a00193.map0000644000175000017500000000023011365042645013236 0ustar tlktlk bm3.7.0/doc/html/a00028.html0000644000175000017500000001201111365042651013417 0ustar tlktlk BitMagic: bm::bit_in< TDecoder > Class Template Reference

bm::bit_in< TDecoder > Class Template Reference

Byte based reader for un-aligned bit streaming. More...

#include <encoding.h>

Public Member Functions

 bit_in (TDecoder &decoder)
unsigned gamma ()

Detailed Description

template<class TDecoder>
class bm::bit_in< TDecoder >

Byte based reader for un-aligned bit streaming.

See also:
encoder

Definition at line 333 of file encoding.h.


Constructor & Destructor Documentation

template<class TDecoder >
bm::bit_in< TDecoder >::bit_in ( TDecoder &  decoder  )  [inline]

Definition at line 336 of file encoding.h.


Member Function Documentation

template<class TDecoder >
unsigned bm::bit_in< TDecoder >::gamma (  )  [inline]

Definition at line 343 of file encoding.h.

References bm::bit_scan_fwd().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00181.map0000644000175000017500000000022511365042645013237 0ustar tlktlk bm3.7.0/doc/html/functions_rela.html0000644000175000017500000000507011365042644015631 0ustar tlktlk BitMagic: Data Fields - Related Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00244.map0000644000175000017500000000030111365042651013227 0ustar tlktlk bm3.7.0/doc/html/a00231.map0000644000175000017500000000021411365042647013233 0ustar tlktlk bm3.7.0/doc/html/a00009.html0000644000175000017500000001653511365042626013437 0ustar tlktlk BitMagic: sample10.cpp

sample10.cpp

Example of how to get random subset of a bit-vector For more information please visit: http://bmagic.sourceforge.net

See also:
bm::random_subset
/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample10.cpp
  Example of how to get random subset of a bit-vector
 
  For more information please visit:  http://bmagic.sourceforge.net

  \sa bm::random_subset  
 */


#include <iostream>
#include "bm.h"
#include "bmrandom.h"

using namespace std;

template<class T> void PrintContainer(T first, T last)
{
    if (first == last)
        cout << "<EMPTY SET>";
    else
        for(;first != last; ++first)
            cout << *first << ";";
    cout << endl;
}


int main(void)
{
    bm::bvector<>   bv;    

    // -----------------------------------------------
    // set some bits
    //
    unsigned i;
    for (i = 0; i < 30000; i+=10)
    {
        bv.set(i);
    }

    for (i = 300000; i < 400000; i+=100)
    {
        bv.set(i);
    }

    bm::bvector<>   bvsubset1;
    bm::bvector<>   bvsubset2;

    // random sampler instance can be shared between calls
    //
    bm::random_subset<bm::bvector<> > rand_sampler;
    rand_sampler.sample(bvsubset1, bv, 20);
    rand_sampler.sample(bvsubset2, bv, 20);
 
    PrintContainer(bvsubset1.first(), bvsubset1.end());
    cout << endl;
    PrintContainer(bvsubset2.first(), bvsubset2.end());

    return 0;
}


Generated on Sun Apr 25 09:37:26 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00137.png0000644000175000017500000000523411365042632013250 0ustar tlktlk‰PNG  IHDRMu lpbKGDÿÿÿ ½§“ QIDATxœí[LSÙÇÿ¥Ý€`kã´Ã=ÜÌ@½±ŽÆa`¤ÌLœ&5bôD&}ѯщ&>øà x!¡5åR†b¼_ÆÑZÐ@ƒƒå( |çCµô®vhë—ôaïowïoýºÖj÷n÷W8D€¯øáÒàÒŒ\a4qãÆ _äâ×hµÚw 4‚¢¢"À#ïãÐÓ†©©©Åý§AUUöíÛg·ŽÏi pi pi pi pi pi x$íÅ‹(//÷V.v\¿~MMM£n×ÑÑââb<{öÌ!f±XPTTäõÜ<’f4QVVæ­\ìÐëõxôèѨÛíß¿OžÍÃÒ-Z„ .ø";¶o¯ÇºuqP«ýãÔÉŽ‘?µòTªSiém_§á>§1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1À¥1à•{£<¥²òwôôô9¬¿sç9$û×U£‰ƒ\â°íxâpž/ÈÏÿtº;£oàÙ³# òíkíÃ3;[ Àý‚­v®Ï…~"íë¯g@* r»ÕJÈÊRSFîñ i‚ Fff"Á±ŠË0ry04š¸qÌÊ5~! ¾ýV «uÀiL$ÈΞëð¦à+ü# Ä@©t^eÁjíGV–çw.{ ¿‘ BNÎ\§C4,L†¹s£Æ?)ø4øæ›D‡!*bhµó|Z‡c$~%mΜ!"â3»uVëÀÿ?’ø~% rsçA†Ó!:Z‰øx•Os‰ßIËÎN‚Õ:TLDÈÍçãŒñ;iC=+ÐßOÈÊr^âË—ø4¶Þ5cƈŒül”­Ç—'rz½~Ó°',̈‰ ñiñññ sXïöìW¡P8}ÒxœÜŒ;3 P„úäø.cn¥)•J(•J¯'4ÌE\Ü>9öhøåœÀo…~,ÍŸáÒàÒàÒàÒø$¤mذÁ«I? iåååõx=ÁkÒ*++1{öl")) ·nݲÅΞ=‹éÓ§C"‘@¥RáÈ‘#¶ØîÝ»¡T*„ÔÔT´¶¶Ž)öðáC¤¤¤ 88qqq(..0T5~ùòå8sæ är9`2™ðÝwß¹¬ûÁ¸ªrRSSCmmmcªˆÒÒÒBR©”t:uwwÓ¾}û(22’©««‹‚‚‚H§Ó‘Åb¡ÚÚZ  “ÉDåååNþù'uuuQff&mÞ¼™ˆÈmìÍ›7¤R©¨°°, UUU‘L&£ëׯSKK M˜0²³³©¾¾žÚÛÛI¥RQMM õõõ¹Ê‹»ö{å›×óçÏcÉ’%ÈÊÊ@"‘ §§¨¯¯·Uq‰‰ 0›Í°X†NÌ{{{!•JQ\\ «Õ nc—/_†J¥B~~>`éÒ¥ÈËËCII vî܉žž"<|èÓpýnwEÑ?¯H3 ˆ‹{÷¤ øùçŸmË·o߯/¿ü‚'Ož`òäɶÿÈÈÈ@uu5.\¹\ŽeË–a×®]ËåncƒMMMvE‚{zz°jÕ*C’†…ýxeN“J¥xýúµÝºÒÒR˜Íf\¼x»víÂîÝ»ÑÜÜŒ›7oÚª%Ž=ŠW¯^¡¤¤‹kÖ¬5&“É Ñh`0ì'OžàJðîðŠ´eË–¡¬¬ &“ pãÆ üøã‹ÅhmmŬY³ Ñh ‹ÑÐÐ`«ë}èÐ!,Y²‰óçÏǺuëðòåËQcéé騫«ÃãÇ ZW«ÕÐétÞhÎèx〈hûöí¤P((--d2‘Ñh¤Ï?ÿœ/^Lééé´råJš6meffRKK EDDPBB¥¥¥Ñ¤I“èÔ©SDDncDDG%™LFiii4eÊÒjµ400@---$‹írKLL¤””ºuëÖ˜Ûã®ý^“FDÔÜÜLd4íÖ›ÍfºvíÝ¿Ÿˆ†Dêõz""²X,ô믿ÒÕ«W©½½ÝîyîbDD­­­TQQA=r›—Éd¢ŠŠ úûï¿ÇÜwíwùû4½^ïòrï§€»ögÞ†Kc€Kc€Kc€Kc€Kc€Kc€Kc€KcÀí¥¡Ç£££c¼rùhp)ÍW¿áð”J¥íÏGâ÷F}lð9..ÿ>¥c‘½ÎIEND®B`‚bm3.7.0/doc/html/a00143.png0000644000175000017500000027627211365042634013263 0ustar tlktlk‰PNG  IHDR«« ûÕbKGDÿÿÿ ½§“ IDATxœìÝwX“g÷ð/²”M’:÷¬{ûj}QD«vXW­»Ú¾­³ÖÕª]nmUëžÕZ­‚“'Nœ!+ v ùý‰òs0Æ÷s]^’äÉsŸQçÜÇH£Ñh@DDDDDDDDDT C@DDDDDDDDD•ŒDDDDDDDDDTjL0Q©™:"""""""2¼¨¨(\¼xÑÐaT ­[·†»»»¡Ã *7L0‚‚‚0|øpC‡Q%lß¾Æ 3tDå† F"""""""Ò9}ú´¡C¨ÔºtébèˆÊ÷`$""""""""¢Rc‚‘ˆˆˆˆˆˆˆˆˆJ F"""""""""*5&‰ˆˆˆˆˆˆˆˆ¨Ô˜`$""""""""¢Rc‚‘ˆˆˆˆˆˆˆˆˆJ F"""""""*‘ØØX?~ÜÐaè(•JìÚµë_ËÊÊÂŽ;^úZNN¶oß®ïЈª&‰ˆˆˆˆˆˆ¨D¢¢¢pøðaC‡¡“™™‰£Gë¸_ýõ¥¯eeeaÓ¦MzŽŒ¨z`‚‘ˆˆˆˆˆˆˆ*µZµjaÛ¶m†ƒ¨Úb‚‘ˆˆˆˆˆˆˆJL£Ñ`åÊ•èÛ·/  k/NOOÇôéÓ±wï^ 4¾¾¾8vìÖ®] ___øùùáÔ©Sºólܸ¾¾¾èÑ£>ýôS$%%é^“Ëå˜8q"zöì‰÷߀ÔÔT|þùç8qâúõë‡k×®aæÌ™º÷bøðáèÖ­üüüŠÕ>]èèÑ£2dz÷î%K–@£Ñ¼é§Š¨Êc‚‘ˆˆˆˆˆˆˆJìþýû066Æ0þ|ìܹgÏžE~~>®]»†ŒŒ ìÝ»}ô–.] [[[ùÇÇW_}…Ÿþ©©©ÿzMjµ÷îÝÃöíÛ±iÓ&œ?ׯ_/»O"QÁ#•˜••ÆŽ 3334jÔ ÐUj4 :FFFhÞ¼9Œ1xð`Ý㬬,@^^@¥RÁÂÂsæÌÁ˜1cÁÁÁ°··‡¯¯/„B!š6mŠÞ½{ãÌ™3€ÜÜ\L™2 6„‰‰‰..¡PˆÕ«W£}ûö …¨]»6LLL™™Y¬ë5jLLLàìì OOÏb¿¨:3ù÷CˆˆˆˆˆˆˆˆŠrvv.’ØóòòBHHˆî±¹¹9ÀÈÈB¡ÆÆÆºÇ…Ú¶m‹L˜0VVVhÑ¢Þ{ï=XYY!>>QQQx÷ÝwuÇçææ¢M›6ºó888¼—P(Äýû÷ñóÏ?#66ÖÖÖÅns°µµÕ=~>V"z5&‰ˆˆˆˆˆˆ¨ÄÒÒÒŠ77FFFHKK{eò/((7nÄ×_ oooôëׯäHDÅÆi"""""""*±øøxÐî{xøða]uaqíܹS§N…±±1êÕ«‡^½zA¡Pš7oŽ›7oâÑ£G´ÉÅ?þçÏŸí9“’’àáᄆ†êZ²ÿ¿   DDD”(f"z+‰ˆˆˆˆˆˆ¨Ä4h€5kÖ`×®]ˆ‰‰Á[o½…~ýú!==½ØçèÕ«Ž9‚Q£FÁÖÖ÷ïßǸqã®®®5jÆzõê!** ÞÞÞèÚµ«. ù2o¿ý6¶nÝŠ)S¦@(ÂÄĵkׯš5k0uêÔ"Ç®Zµ }ûö…——Wé> D0ÒpÞ:Qµ·cÇ >§OŸ.ö{òòò +++¼õÖ[¥ZW¥RáîÝ»ÈË˃L&+²"( DFFÂÑÑžžž/=‡F£R©„µµ5mEåÝ»wagg‰D‚ÄÄDÄÅÅ¡qãÆ¥Š±$ºté‚íÛ·cذae¾QEÁ F""""""¢j.-- e@ ¨Q¢÷™šš¢iÓ¦o´¶P(„Ï+_wtt„££ãkÏadd¤K.€……š7o®{,‹!‹ß(N"z5&‰ˆˆˆˆˆˆª¼¼|DD(ž¹< ryÂÞˆ””L€™™‡£$¢Êˆ F""""""¢*B­ÖàñãTÈå‰O*’LŒ‰IZ­‘‘\\l!‘ˆáíí‚þý›@*ãöí`Lš´ÜЗPé™™yáÛoo!0pêÕ«zõj£Agxz:ÂØ˜³v©jb‚‘ˆˆˆˆˆˆ¨’yò$r¹aa Ë“‘„ðð$Èå‰ÈÍÍØÚZ@*A*£M)$¤R¼¼D07¾pÎÇCpLÛ*(HEóæ011Æ‘#×±bE Ô033A:µÐ 3êÔ©…† Q·nm89YÿûI‰*8&‰ˆˆˆˆˆˆ* ÜÜ|ÈåÏ*åò$„…i?y¢mi655T*‚D"F·nõ1vl'Èdbxy‰`ooià+¨žòóŸ GgÝ—ÜÜ|Z­@`;H$"øø¸aàÀfHÄHDpq±ƒ@`dèË ×033A£F®hÔȵÈóOždâÎ8Ü»÷÷îÅ#$$»v]Dff.#¸»; ^=mÒQû»3¼¼ØfMŒDDDDDDDe,%%S·âóû"ÊåIÈËÓ¶4ÛÛ[ÂËK™LŒöíß‚——#$1¤RLMùí{Ucgg‰·ß–áí·eºç4 =Jƽ{q¸w/wïÆáÈ‘ëX¹2ùùj˜› Ñ 36t·· ||ÜP¯^m˜™ñëƒ ‹_DDDDDDDz“£Ò% §5&SS³ææBxyi÷BìÙ³áÓ¢6‰hkkaà+ C322‚§§#<=Ñ»w#ÝóÏ·Yß¼ÐÐX:¥2&&ÈdNðñqEÆ.hØÐ¹¢fMs^ U7L0SA11Ož«DL|:\% §B£ÑÀØXWW;xy‰Ð´© j ‰D[èâb ##¶4SÉ<ßf=xpKÚjLjnߎÅíÛ1¸u+w‘œœ###xx8ÀÛÛ»¡qcwøø¸ÁÚšIG*L0ý? EÆÓäá³= W© VJµ{!vìXG·/¢——#[š©ÌA"A"¡ÿ&ºçããÓpë–6áxûv,6m B\\ª®:²Im±qc7x{»p˜ éÿÅ#"""""¢j);;ïi%bÒs•ˆÚßÓÓ³5j˜B"Ѷ4÷éÓèi;³‰#llªfKs—.]Jü jÖlìì;ÈË‹}åq&&Ž07÷DFÆ•=§P(†@`ŽÜܨW¬i33)ÔêL¨Õ9P©JwqÃÎîdeÝANÎCš2[ëMÕªeƒZµlУGCÝs é¸y37oFãúõ(¬Z…"ÆÆÈdb4i¢­pôñÑ&¹§#•”‘F£©¸+ˆˆˆˆˆˆˆÞ@~¾Z7¥9,,QW‰(—'âñãT€±±nnöO‰b]BQ"£vm›jÓÒ…‹/–è=üóO<ކ©©Ã†ÉP¯žíKMHÈÆÊ•·áäTãÇ7„±ñë?¯Û·?DRR.¦Nõ~åù/¾77+8:šaĈº%н$”JöïÀõë Ôªež=]Ñ´©#^õ¥Ñºuk¸»»—Y<úû7nDãÆ mÒñæÍ¤¥eA(4†·· š6õ@³fÚ_žžŽ†—*8&‰ˆˆˆˆˆ¨ÒKJR¾09,,%ëZš­ “9éÚJ%d2'xx8@(46ðT>.„cöìxø0cÇvÆÔ©=^Ùn©ÀÀ«àâb‡;ÇÁÊêõm¹j4n<ãÇwÅøñ]_yœÏ´j%ÁéÓ÷póæü2o÷}ø0?ýt¿ÿ~ ‰S¦ô€¯o3 ÊtÝò©ÀõëQ¸zõ®]{„[·b RÀÁÁJ—llÖÌMš¸sˆ Á#U ™™¹ËŸí‡–€ˆäòD¤§ç,,LŸ&ÅOˆb]2ÑÚº†¯ jHHHÇüù¿ãСkèܹ.,‰DôÊãcbžÀ×wD¢šØ½{|±\¸ŽWáܹÉį”ÊìÞýI‰Ö+ ±±O°jU v츑¨&&Lè†áÃÛTÛ–áÔÔ,\¹‰‹å¸|9ׯG!//nnöh×N¦ûåâbgèP©”˜`$"""""¢Ÿ†ðð$]Eba[stt2òóÕ''Èd¢§‰Úd¢T*†››}µ«àªÌNž ÅW_BR’“'wǸq]Šýç—žžƒ¡C×">>N,Vµãÿ×·ï¨_ßß}7¤Xǯ\€Í›ƒ0þ|òÉV\½:bqͯ[ââR±jÕ)ìØ ;;KLœØ Ƶù×öòª.//!!ð÷ßaÃÕ«‘ÈÍ͇‡‡Ú¶Õ&ß~[Æ=U+&‰ˆˆˆˆˆ€69ôlOÄ]"Q.OBff. fMs] ³D"ÖMiöòÁÊÊÌÀW@o"2R¹s" àú÷oйsûÃÙ¹ø ž¬¬< ºQQ)8xp"<=KCBBš5û[¶ŒF÷î ŠõžK—äðõ]‰3g¾Dß¾?bæÌ~øè£ö%^»,ÅǧaÍšSøí·`ØØÔÀøñ]ñÞ{mQ£†©¡C«rsóqõj$‚ƒÃð÷ßa y„¼¼|xz:êªß~[ÆŠç Œ F"""""¢jD¥*@TT2‹쉖ˆ¤$%mK³»»ƒ.yX˜L”JŦ2Œô''G…åËObݺÓððpÄâÅ~h×NV¢sdgçáý÷ÁýûñØ¿êÔ©UªX¶lù ÁíÛ afV¼vâÜÜ|Ô«7K– Æ©Sw‘’’={Æ—jý²–˜¨ÄÚµ§°uë?°´4ÅÇwƈíaiÉäüórrT yôBÂQ&£C‡ºèܹ.Úµ“ñóV0ÁHDDDDDT=~œú\¢6™ž„˜˜]KsíÚ¶O÷D=ÝÑ R©®®ö01ø ¨<=zóæý¥2Ó¦õÆÈ‘Jüg¯RàÃ7àÆhìÛ7õë;—:žaÃÖÃÂÂ6|T¢÷ °R©:ÕÅøñÛpýú×%šZ]ÞŠ ¬_[¶A(4Á˜11rdGX[s°ÑËää¨påJ$Ο€³gïãöí Т…':w®‡êÀÇÇ­X{vRÙ`‚‘ˆˆˆˆˆ¨’JOÏFxø³ Äç÷GÌÊÊX[×ÐU!>«HÔþnaÁöÌê*"" ³fÀÙ³÷1hP ̜ٯD“ž ©T=z3.^ Çž=ãáããVꘔÊ4j4Ë– †¿Ë½wÉ’?qäÈuœ8ñ¼½gcÁ‚>¼m©c)/©©Yذá6n<F‘#;bÌ˜Ž°³³4thZrr‚‚âÌ™{8wîââRagg‰ê S§:èܹ÷o,gL0U`*Un_Dítæg‰ EmK³‡‡d2§çZšµ‰ŽŽ·Š‹Ê_a;ôš5§ “9á›oüЪ•¤Tç*(Pcܸ­8{övî‡æÍ=ß(¶Ã‡¯c„m¸uklm-JôÞ3gîaذõ¸qc>fÌØ‡ÌÌ\ìÜ9îâ)OJe6n<‡_~9‡¼¼||ðA;Œ×"·$(ŽâqæÌ}œ?ÿüŽìì<ÈdbtêTÝ»7@»v2š*cL0˜F£)ÒÒ¬mgNDD„ÑÑ)((PÃÈȵkÛè¦3K$Ú Í‰nnö06fK3½Þ_ÝÆœ9žžéÓ{ã£JÞ]¨ @É“·ãøñÛØ¾},Ú´‘¾q|&lCbb:öîPâ÷¦§ç Aƒ™Ø¸q$23sñé§;qóæ|ØØ”,Qih™™¹Øºõ¬[wJe† kƒ º²¯òòòqéRΞ½³gï!4ô1,,Lѹ³6ÙØ­[þॠ0ÁHDDDDDTNÒÒ²ž¤®R˜LŒˆP ;[ÛÒlcc‰ÄR©v¨Š——H—PäÄY*ÈHæÌ9€S§îaÀ€f˜3§©Ú¡ i4L›¶ ‡…`Ë–ÑèØ±îǨR Q£Ù˜>½7ÆŒéTªstìø úömŒñ㻢Q£9X²ÄC†´zãØ !'G…;.`õêSP(”2¤&NìwwC‡VéÄǧ! àNž EPÐCäæªÐ¤‰;zôhˆîÝ aCC‡X%0ÁHDDDDD¤GyyùˆˆP¼D ODJJ&ÀÔÔ^^ŽÏMg~V‘X‘SPå’“£ÂªUX³æ<<°xñ ´mûf•†3fìÃαiÓ(tëV_/±ž?ÿC†¬Å… ³KD›:uâãÓ±k×8|øáÀ–-£õŸ¡¨TؽûV­ ÄãÇO0p`sLžÜ‰ÈСUJ99*=D@@(Nž¼ƒ¸¸T8;Û¢{÷èÑÃíÛ¿UìéåTŒDDDDDD%¤V¶4'¾P‘“µZ###¸¸Ø>¨R´"ÑÕÕŽ-ÍT¦Nž Åܹ¡Pd`úôÞ=º£^&ƒõÕ!lÞ|ë×@Ÿ>ô©Ö¬YpáB8?/õ96oÂÒ¥ÇpçÎBìÙs_|±·n-@Íš•2s~¾\ÅÊ•ˆŒT ÿ&˜<¹êÖ­eèÐ*µÛ·cqòd(Nž ÅÍ›Ñ03¢K—zèÛ·1zôh++3C‡Xi0ÁHDDDDDô OždB.W ,,r¹vZsá•ÜÜ|€­­¤ÒÂýÅO+EðòÁÜ\hà+ ê&**sæÄÉ“¡èß¿)¾þú¿pr²Ñ˹-úëÖÆêÕï¡ÿ¦z9' ­ŠlÕjn‰Ï?ïSêó\»…¾}DPÐL88XÂÇg.~úi h¦·X M­ÖàÈ‘ëX±â$îßGïÞ0ujOx{³Í÷M%&*ŠcÇnáܹ02:w®‡~ý£gOï*‘¨.KL0Qµ–››¹üY¢\ž„°0íã'Ožµ4kÛ˜ÅðòÒV#ÊdÚjD{{K_‘öëxõê@¬Z77{,Zä‡öíßÒÛù¿ÿþ/üøã_øá‡¡<¸¥ÞÎ ·nÅ W¯ïqüø4øø¸•ú<*Ud²/ðÃïÂϯÞ}w¬­ÍñóÏ#ôl¡ÑhpìØ-üôÓ „†>F·nõ1eJO4oîaèЪ„ôôlœ8Š?þ¸³gïA£:uª‹¾}£wooX[×0tˆŒDDDDDTå©ÕÄĤèªô­ÍIˆ}µZÀ..vº}e2‘®"ÑÅÅ‘¡/ƒè¥Nº‹Ù³ )I‰O?í‰1c:A(4ÖÛùW¯ÄâÅG±t©?†o«·óúî»ãعó"®\™ #£7û{Ö·ïhÞÜóçÀ–-cáÂ# ]SÓª¹¯žF£A`à],_~W¯>B‡u0ujÏ7Þk“žQ*spGŽ\Ç™3÷PP F‡uðÎ;MЫ—7lm+פò²Â#U))™/ì‹XØÖœ—§mi¶··„——2YážˆŽºA+U5 AUSlìÌ™sÇßB¿~1ož/œmõºÆ† ç0wîA,X0£FuÔë¹ uï¾ ­[K°h‘ߟkÖ¬ý¸y3GŽLElì´l9;wŽC§No>麢;þ~ú邃ÃѺµ“&uG×®úÂCZ™™¹ ¼ƒ#GnàÔ©»ÈÏ/@×®õ1p`sôêå]­ÿa‚‘ˆˆˆˆˆ*•œU‘vfm"Q›TLM͘› áå%ÒMgÖ&µIDV›Pe§R`íÚÓX¾ü$j×¶ÁâÅ~èØQÿ ´mÛþÁ—_îÜ9ý1n\g½Ÿ¢£Sкõ½%wト™3÷ãÁƒo`l,@Ïžß¡E O,^}aþüe–¸øý÷k˜8ñ7LœØ _|ñŸ2Y£¿ÿj8:ÖÄÚµèå|…ƒ^–/_ßf¸q#}úü€“'?CÆÕsÒòÇ X±"¿ÿgg;L˜ÐC†´â¿ŸeäîÝ8ìÞ}‡…@¡È@»v2øùµ@¿~aiifèðÊ ŒDDDDDT¦²³óž¶2'é¦5V$¦§gjÔ0}ÚÊ,z¡"ÑÆ†-ÍT}©Tøå—³øñljjbáÂeº¯Þ‘#×1~ü6ŒÝ_}õß2[ÒÓsШÑlüôÓ0 ÐLoçíÑã;têT³g¿Fƒf;ƴçŸöÔÛ•QTT2V¯>…Ý»/ÁÞÞÜï¿ß¦†­J*(PãÌ™ûØ»÷Nœ…±±¾¾Í0bÄÛU2ÙÍ#½±ü|µnJsXX¢n°Š\žˆÇSÆÆ¸¹ÙI"V$:;³¥™èÿ ÇŒû•ŒI“ºc„®eZuöçŸ7ñÉ'[ñÁocþ|ß2ÿ;yø°¶RòæÍzÝõÓOw".. »v|þù„†ÆâÏ??ÕÛ•Y||Ö¯?ƒmÛþ¹¹£GwÄÈ‘`m]ÃСUYéé98xð*¶lù÷îÅ¡uk FŒhÿüǧL¶80&‰ˆˆˆˆ¨Ø’’”ºéÌ…¿ÂÂðèQ2Tª€££d2§"CV¤R1<=«Ì7RDe))I‰ cÿþ«èÖ­>,‡2]óäÉPŒ½C‡¶Æ7ß *—„ÿ„ Û˜˜Ž½{'èõ¼6œÃòå'qëÖ@@À|øá„„|''½®U™¥¤dbÆsØ´é4à£ÚcôèNpt´2thUÚ߇aË– ?~ Vxï½vxï½¶pr #W¶ IDAT²6tho„ F"""""*"33ry’® 1,,ÚýÓÓs¦ºé̉2™XW™È*¢ÒQ«5زåo,Yò'jÖ4ÇüùЧO£2_÷Ô©»øè£ð÷o‰eË—Kr± @Fæ`òäzŸP?¿U ™‡Zµl“£Bƒ³°pá@ ÖF¯kUJe6o† g‘™™‡áÃÛà“Oº vm[C‡V¥ÅÅ¥bÛ¶`lߌÔÔ,üç?>1¢=Z·–:´Ra‚‘ˆˆˆˆ¨ÊÏW#::ááIÏU$j­ÄÅi[šMLpuµ‡T*ÒU$î‹Èo<‰ôëúõ(|ùå>ܽûcÇvÆÔ©=Êe Ä™3÷0bÄF Ð ?üðn¹mUðÏ?a4h5þþ{&¼¼Dz=wzzêן‰_…=FŽÜ„üülÝ:F¯kU%ÙÙyؾýÖ®= …B ÿ–˜8±<= Z•–——?þ¸Í›ÏãêÕGhØÐcÇv‚¯o³JUõÏ#Q–Žðp히…û#ÊåIˆŠzÖÒ,×|:TåY¢L&†»»C¥ú憨2JOÏÆâÅà·ß‚Ѻµß|3uêÔ*—µÏŸ€#6¢o_üøãP Êe]˜?ÿwÜÁ¹s3ÊäümÚ,Äðám0iRwÀŽ0{öܹ³ææÂ2Y³ªP© °wïe¬Zˆ˜˜¼óNLžÜuë–Ï×euvóf46nåºwéÅ‹r ¶Ý»7Àš5ï—{r1,,;~ƒƒ'•Ù~s‹ý3gîáäÉÏtÏuï¾ íÚÉ0þ€2Y³ªÒh4øë¯ÛX±"ׯG¡S§º˜<¹Ú¶•:´*/%%7žÃÆçal,À'ŸtÁGµ/—íJŠ F""""¢ $!! aaIO+ ‡¬$"&&E×Òìäd£›Î,‘h“‰R©nnöli&ªÀ23sñã'ðóÏgàííŠo¿·ráÊ• ¶;ÖÅÚµäߌuëÎ`Å í”ç²JnîÛwŸ¾aaKtk,\x'NÜ.³¶ìêàÌ™{X¹2ÁÁáhÕJ‚É“»£kWV„–µôôl¬[w6œ…¹¹'vÇ´«PíþL0•3¥2çéP•¤§‰‰ºÇ™™¹€š5Í!‘ˆàå¥MÊdbxy9B"ÃʪâU.ÑëýñÇ Ì›w¹˜9³Þ{¯-‚òi‡.tíZ†]‹6mdøå—û„Ÿß*8;ÛaåÊáe¶ÆÍ›ÑèÝû‡"Cd‚‚`ð൸|y.\\ìÊlíêàÒ%9V¬À©Swáíí‚)Sz OŸrÿš®nRR2±fÍ)lÞ{{KÌšÕÿýoÓrÛZáu˜`$""""**U¢¢’ŸÛQ¹<aa‰HJRж4»»;<×Ò,Òíèädmà+ "}ˆŒT`Ö¬ý8sæ>üý[`Μþpp°*÷8n܈Æ!kв¥6me°äbjj5šƒ5kÞÇ;ï4)³u²³óðÖ[_bÆлw#Úi½ ÌÂ×_ûbøð¶e¶vurûv,–/?‰cÇnB*câÄn0 9LLÊ·í¾ºIHHÇ’%bÏžKhÚÔóæ @óæ‰ F""""¢7ðøqª®úP.OÔí‘“‚ü|5 vm[H¥¢ç†¬8A"q„››¿ #ª¢rsó±jU V¯„§§#¾ùfP™í7øonߎ…¿ÿ4mêŽ_SSƒÄ†`êÔ¸uk!¬­Ëv`EÛ¶ 1thLžÜ]÷Üüss!~þyD™®]Ý<|˜€•+pèPœí0~|W¼ûn+ƒ~­U·oÇbÞ¼C‡Ÿ_s|õÕ ò € F""""¢•žžðð$DDh÷C,°"—'!++`mm®«>,:dűBnÆNDeçôé{˜5k?’’”øôÓž;¶³Á~˜p÷îcøû¯··+6o‰5L G¡qã¶àÉ“,ìÞýI™¯õÿ'IÀÆç°lÙq„†.,÷á6ÕATT2Ö¬9…]».ÁÎÎãÆuÆûï·ƒ…Eñ¾îòóÕüÁ[)üùçMÌ{YYy˜=û ÚºÜÛ¦™`$""""‚¶¥9""é¹½ŸU$*´-ÍO+Eº_2™ S1@DG\\*¾úêþøãúõkŒ¯¿öEíÚ¶‹çÞ½8øû¯Aݺµ°mÛƒ'Uª4j4ŸÞ£Fu,óõ/þ§NÝE@Àçºç 'X><-Zx•y ÕUBBÖ­;ƒmÛþ™™cÆtÄÈ‘þuZº¿ÿj|ñÅøgS ™™¹Xºô6o>fÍ<ñÓOCáééXnë3ÁHDDDDÕ†F£)ÒÒ\8`%"Bèè¨add„ÚµmtÓ™ +%ÜÜìYñBD/ÈÏWcÆsøþûã‰jbÑ"?téRÏ 1=|˜?¿UJÅØ±ãcƒ' (è!^ƒþ™U.‰½{/ãÿÛƒðð¥E†´l9ï¾Û Ó§÷.óª»'O2ñË/ç°iÓyh4ŒÑcÆtzéåþù' ƒ­ìÞý :t¨SÞáV ·oÇbÚ´ˆˆP`Þ¼ÿ–Û~£L0Q•“––…ðð¤"Ó™ ‰ÙÙÚ–f H$ŽOÛ™ÅO§5kŠáq"ª.^”cÆŒ}ˆŒT`„®˜0¡ÌÍ…I.O‚Ÿß*¸¹9`ÇŽ+Ìäù9sâï¿âÔ©ÿ•ËzW¯Fâw–ãÒ¥¹pu}65úÿÛƒ»wãÈ‘©åJe~ý5¿ür™™y6¬ ÆïR¤Â÷ÃÁéÓ÷ Vk °~ý‡èÓ§‘£®¼Tª,[v kמF·n ðý÷CÊ|oF&‰ˆˆˆ¨RÊËËGD„âiâ0I—P ODJJ&ÀÔÔ^^ŽºéÌÏW$jt"ª’“3°`ÁaìÝ{;×Å¢E~åÚŽø*‘‘ øù­†³³ ¶oWæƒTJ¢]»Eèׯ1fÎìW.륦f¡AƒYسç´oÿ¬îèÑ7n+nÝZ[[‹r‰…´²³ó°cǬYs …ƒµÄ¤IÝo¿½…)*ŒðÓOÃ0hP Ã\É]º$ǤIÛ¡Ñh°qãH4jäZfk1ÁHDDDD–F£AllêÓ½ŸU"ÊåIˆ}¢kivq±}:`¥hE¢««[š‰H¯Ôj ¶oÆâÅGaaaН¿öE¿~ àÑ£d ¸ bqMìÞ=¾B%<ˆGçÎKÊ}ïà fáË/ûâƒÚéžKOÏFƳ±fÍûxç&å =£R`ß¾ËX¹2ÑÑ)ððp@TT òó Šgdd„E‹ü0bÄÛŠ´òKKË„ ¿áï¿bÙ²!e–°å¼p""""2¸ÔTmKsXX‚nÐJá•ÜÜ|€­­¤Rmõa›6Ò§•ˆ"xy‰ ÞŽHDÕÃÍ›ÑøòË}¸};cÆt´i½*Ì”ø˜˜'ð÷_ KìÚU±*àĉP8:Z¡Y3Ïr]W"!""©ÈsÖÖ5Ь™Î{À£…Æ:´ n…Ý»/áÿÛ µZýÂq³fíGZZ¦Léa€H+? lÝ:K—þ‰)SvàÁƒx̘ÑWïS¦™`$"""¢r‘››ÿt?Ägû"†…i?~òäYKsaÒ°[·ú;¶ÓÓ¶f1ìí- |DT]¥§gcÉ’cز%-[záĉÏP¯^mC‡¥— ÿÕ°¶®]»>MÅkû ¸ƒ®]ë¶R<=!—'½ð|ûöoáàÁr…^dl,@ZZ6^—ëÒh4XºôO(•9˜5«ŸÞcÕ@`„/¿ì‹zõjcÊ”xò$ ß~;H¯]L0‘Þ¨ÕÄĤ "B¹|ý…çÛ¶•áÇO ..µÈ *_*UÖ­;‚‚«Ÿ§ÑëÖ†R™Å‹õ›«N|}›¡fÍ;öW(•ÙX¹ò=…Æz97ŒDDDDTb))™º} ÷D,´’—§mi¶³³„D"‚L&F»v2Ý ‰D33Þ†QŦm#܇‹åxï½¶˜1£o…« LHH‡¿ÿ…ÆØ³g|…^uêÔ]˜˜£S§ºå¾va‹tAºHRªys…ƸpAŽš•{\¤uð`’’”Å:V»ÿ餥å`åÊázKŒU7ݺÕÇÎcèÐõøôÓX¹r¸^~hÂ;;""""z©œ•®úðÙpmR155 `ff¢›ÎÜ£GCŒ+‚Læ©TÄÉœDT)eeåáÇOàçŸÏ ~}güñÇT4iânè°^ Pd`ðà5022ž=ãáèX1“‹жm¥Ù¯ÒÃÃ*UbcŸÀÝÝA÷|¦hÚÔÁÁaL0ÐêÕºMLÐh4ÈÏWãe3‰Õj ¾…B‰íÛ?æ,K©U+ Ö¯ÿ£Fm‚³³­^&»óO‚ˆˆˆ^køðáØ±c‡¡ÃЛíÛ·cذa†£Â((P#&æ‰noÄðpm1"" ±±©Ðh406èZš›4ñÀÀ-tû"º¸ØV¨VA"¢7qüø-Ì™sJeæÍû/>ü°}…ܶ!99þþ«¡RàÀ‰pr²6tH¯”——Ó§ïaöìw ²¾T*ÈåIEŒÐ¦GÞ4DXm²pÓ¦‘HIÉDJJ&’“3”¤Äܹ‹ Ô€@`ccK022…‘ѳŠÅþ ƒ‹Ë0¤¤ü&Ï€WQ1ç~·{÷øñÇ¡˜4i;d2' ÜòÖd‚‘ˆˆˆþ•P(ÄöíÛ Æ>®g‚‘ª-¡ÐË—G·nK±aÃ9|üqçR‡ F"""¢WP© °oßeôïß´Ü7¦W(2–PdÈJXX=J†JUpt´‚Læ//:w®«koöôt¬Ðß$RBB¾ú꾎>}a÷îO Z]Wéé9:t-•Ø¿ { VTwïÆ!6ö ºu3L{t!WW;„†Æ¾ôµ¶me8q"´œ#"ªX$¦Léï¿??¿¥Å#Ñÿ“‘‘‹mÛþÁ‚‡­[K!‘ˆô¾Nff.""ží‡¨ÝQ[˜žž@[]¡mi£_¿&Éĺgkëz‰ˆ¨ªÊÏWcóæóX¶ì¬°uëƒí X¹x⦅ñøq*öïŸOOGC‡TlÇß‚““µÁ§p»¸Øá¯¿n¿ôµ6m¤X½úŠŒ =‰›¨¬}òIWüö[0V¬8‰ùó”øýL0=¥Pd`Ƴذá<òòTŒhðøqj©ŒùùjDG'C.Wè* Ûšãâ´-Í&&¸ºÚC*¡U+/¼ûnk]ÑÙ¹âï¯EDTÑ]¾/¿Ü‡ððDL˜Ð“&u‡¹¹ÐÐaý«¬¬<¼ÿþÏxôHýû'–É»ÊR`àtëÖÀà“¸]\ì†ü|5LLŠî/ת•.\G¿~ !‘á™™™`úô^˜5ë¦Ní {{˽Ÿ F"""ªö"#X·î vî¼Fƒü|µî5ÀIIÊ=GBBº®ú°pÐJxx"¢¢žµ4‹D5ŸV ŠÑ¹s=H¥bÈdb¸»;°¥™ˆ¨ ¤¤dbáÂ#ؽû:t¨ƒ FÀË«r$é²³µÉ۰DìÛ7ᦻ‚B‘ë×£0qb7C‡;äç«‘öB;¼••5ÒîÃÈ#Uwþþ­°té1lÝú7¦NíY¢÷2ÁHDDDz†   Œ1B¯çÍÌÌÄòåË1sæL½óöíX¬X€?ÿ¼cc.ø SS¬]ûú÷obè°Š-;;#FlÄýûñØ»w<êÖ­eèJìÔ©»011F‡u Šn Nlì“—î·Ù¶­gÎÜ+ï°HÊê¾ÓÊâ^·¤LLøð÷ñÛoÁ˜<¹G‰ª™`$"""½ºwïÖ­[§÷=¥R‰¹sçêå¦+(è!V¬8‰  ‡011†Z­ZýbrŒŒ€ Îbýú3HHH ¶çêj™LŒ¶m¥6¬ $1d2œœlÞ8>""*½ÐÐX|ñÅ^ܼ‘#;à³ÏúÀʪ|u½‰ÜÜ|Œµ·nÅ`Ïžñ¨_ßÙÐ!•J`à´m+-÷!i/#ׄPhŒ˜˜'hÕêÅ×Û´‘bݺ3HMÍ‚­­EùH¥¦ÏûÎÑ£GcÖ¬YðòòzóÀJAŸ÷ºobèÐÖøî»ã¸tIŽ6m¤Å~ŒDDDT-¨ÕXX4ĬYW‘›{Y·S~þË‹…òó `n.Ä{﵃TªÒìæfÏ–f"¢ &##Ë–ÃæÍçÑ´©þúkz¥KΩT5jBB"±gÏxx{»:¤RQ© pöì=|þyC‡022‚‹‹bcŸ¼ôõ–-µ ¥GèÚµ~y†FÈñãÇ1qâDC‡apNN6hÓFŠ#G®—(Á(ø÷CˆˆˆˆJF­Vcòäɰ¶¶†X,Æ7ß|HNNF÷îÝñÃ?ÀÙÙ"‘›6mÂgŸ}‘H„Úµkc×®]¯=÷† àááKKK|ôÑGP«Õ¯=жšÍœ¹66=›«~£¦˜×¢ƒƒÆëŒ=B"1¹HDTÁ9r;~ƒ}û®àÛoýqèФJ™\=z3®\‰ÀΟÀÇÇÍÐ!•Ú¥KHOÏA·ngJwíÚ6ˆO{ék¶¶ððpÀõëQåéƒ>î;‡ ‚ÄÄD 2çÏŸGbb"zõê…­[·ÂÖÖwîÜÁÎ;!“É`bb‚ÚµkcÙ²eEÖÙ¾};¤R),--1bÄhˆ={ölˆD"˜™™¡K—.ˆ‰‰yíõ”æ^Wß:uª‹Ó§K¶mŒDDD¤wW®\P(D||<8€%K–`ß¾}P©T8}ú4RSS‹ùóçcÔ¨Q‰DHLLÄ´iÓ0gΜWž·  —/_ÆÃ‡qóæM]÷X©|ýÄæ… ÂÔÔR© 6DZÚË«^N +Œß¿ý6|ƒ€€Ïñõ×¾èÕË[·ï’6áø¬J‘ F"¢ŠE¥*À?ž@×®K—†&âLJÂÞÞÒС•XA&lÃÙ³÷±mÛ4oîièÞX@Àtï^qªÀÉÉII¯¾ÇhÒÄ 7nD—cD¤/ú¸ï´µµ…@ €­­-„B! ;;«V­BÛ¶maee…þù¾¾¾033ƒD"P(Ô݇æååaÞ¼y055…——|||––†œíÀÜÜ\Ô¬Y;vìÐUX¾Ê›ÝëêGÆ. KTÕË=‰ˆˆHï¤R©îæ ¼½½¨{li©ýÐÈÈfff011Ñ=~cccˆD"Ýã7­PŒÐ 34pÆÈ‘áቸxQŽàà0=DBB:4 22r+Õ"¢ª*(èfÌØ¸¸T|öYoŒÓ©Òn]Q˜\ ¼‹íÛÇ¢U+‰¡Czc‘‘ „…%â›oü JV¯M06kæ‰ää DF**Tå%ý»²ºïpvÖnµ`ff†«W¯bÆŒ ƒ½½ý ­Ëµk×Ö}\xî~ýúáÔ©Sh×®lmmÑ£GÌš5 ¶¶¶/]Sß÷º¥%ã­·œ‹wÞiR¬÷0ÁHDDDz§P(ŠO£Ñàûï¿Ç÷߬X±~~~ yãøÊšD"Bd¤âß|Š F""¢j*;;‰‰J$%¥#99ññiP(2 P(‘®û8&Æ:ÿæ"##ñÇ _¿~P*•X¿~=Æ_â:™Looï¿W_œmáç×Â`ëUwjµ[·þƒo¿= kksüúë(ôìi¸ÿôA­Öà³ÏvãÏ?obóæQhßþ-C‡¤7wЩS½ WUêèX™™¹ÈÉQÁÜ\øÂ릦&ðövAHÈ#øú63@„TZúºï|˜˜4hÐ:h;^‚ƒƒ‘žþê„u¡%K–àØ±c B«V­ðÁàƒ>н^îu_ÅÅÅ—/Gûx&‰ˆˆªœ’’”HLLGrrÒ‘”¤,ò±B‘ÄÄtdfæy¯µu ØØÔ€¥¥)jÔ0…Ph ±Ø©©q(éðº6mÚ`Ú´iX¶l„†ÆbìØÎøôÓž°°05tXoD£Ñ&¸Š_Nê:$½ÉÌÌEpp8–.lèP^ ÕÄǧ½²B±iS\»ÆA/•¾î;Åb1&NœˆåË—ÃÉÉ©Èkÿýï±`ÁtêÔ ¦¦¦ …H$˜>}:Ö¯_ÿÊs~øá‡øùçŸáãã±XŒ+W®è¦Oú¿×Õ'+¤§gûx&‰ˆˆ*¸ÜÜ|$'g .. ))Úä`b¢6Q˜”¤ýX›@LCFFѤ¡¥¥)¬­kÀ ffư´4…»»=rrTP*s¡Tf#77ééÙº›ˆ5Láà` ;; h4%Ûÿ¥_¿~èׯrrr 4k¦­¨U«4îX™L†ŒŒ Ýã&Mš >>^÷822R÷q­ZµŸŸ_d­   bÇAMÈåJ¬Ys E:Ôjm,ææB¸»;ÀÕÕ®®vpq±Ó%ÝÝí!×{ú{ IDATYC ¨\I‰ˆ*³ôô,]ú'¶lù-ZxâĉÏP·n-C‡õÆ4 ¾øb/öï¿‚G¢K—z†I¯ÎŸ€üütíZßС¼@,Ö&““3^“`tÇöíÁP© *\&½œ>ï;ÿúë/\»v ‰vvvEî;ÝÜÜððáC\ºt b±>>>ˆŽŽ†\.a8sæŒîãàÒ¥KÈÉÉAãÆ!‹u¯éû^Wß²³UÅ>– F"""P© tU……ՆϷ(kˆÚJÄôôœ"ï57¢fMs˜› !ÃÈÈjµ665`jj¥2*•öæ$33™™y°´4ƒƒƒD"+ØÛ[ÁÞÞVpt¬ {{KØÚZ@©ÌAJJbcŸàþýxÜ»[·bad$Äÿ»g*ssstéÒEŸ.½ÌñøqÖÓ6(Wxz:ÂÉÉ––f4xü8aa‰8{ö>?N…J¥ÝwQ(4~št,š|ts³‡‹‹œmù‘žüþû5Ì›w*U¾ûnni°Aú¤Ñh0{öìÞ} ?ÿ<¢ÂMYÖ‡€€;hÒÄŽŽ¯3ÀÑQ›`LL|õ —¦M=››;w£qc·ò ô@÷"‘={ö|åëÖÖÖèÞ½»î±››þ½óŽk«ÞßøCØ;HBBØIØtW:­Ú¡vhµÞZëý©×ª÷:®Ö­­uÜ«×êÕªuU[oÕZë.«v·v°f !a…0CÖïC`´@|߯W^ &á…pÎsžÏó—ÿ9quu¥W«Ç®®Ã“ ‰ÀH ¢ÓuÓù…”`ØŽ††¶¾µeJ0lj¢Ü‡qss†§§+\]àääÀƒÁƒggGZè¨5h''<=]áçç êà Ë ,% ²ÙýâÀ¬!…¢r¹ r¹ ùùµËU¨¬ÔÀh4ÃÙÙÑÑAHx˜;7R)o¿½ Æ(ŒvHw·›7?¡0…… )›+C{{œœˆˆD||0®½6±±Á`³½ÐÚÚ …¢µïÖ¥²gÎÔ ®®==ÔU]þ´èH9!ýiQR ð¿`Þ@ ú9w®O>ù-*ÃêÕ3ñÔS‹áççië±FŒçŸß‹;â½÷îÀµ×Úß:äÕb±X-Ãw̶õ(ÄÙÙþþž—l’ eƒÉôÀ™35D`$Lz\\œÎ‹TºD`$á2 ¦>¡PG» ­y†VסZM‰ˆz}ÿZƒ££¼¼Üááá '888Àd2ƒÁp€§§ë ?ØÖÀq//7x!0Ðl6õÖ*r8Þ´óÐÅåòÂÛÛ{PZªBvv d²zÈd*Èd*z Z ð‡XÌÅÂ…±ˆ‰áA,æ",Œ''Æ çùàƒa0Ú1NN¾(-mòe!X¹’*n±X,¨©iFA%8*-CssÊFl,ññ,Y’€ØØ`øûS'¼íP*[iR©lEmm323K T¶ rŸxÓ‚£Õ )²hG¤›M¾'`kôz#Þy' 3°0¾ÿþALj_ ÄWËÆßcûöÃx÷Ý5X¼8ÁÖ㌠EEJ¨Õm¸îº8[rQ(ñâÅHL"/¯v §"ì“É|ÞyÁ¥ #@ &-Zm4)Ð*j4í}"%"¶´tzœ»» ¼¼(·¡£# %R¹»»Àd2Ãh¤9“É‚îî^xzº€Íö‹åÀ@p8Þ`³½D‰ˆ\.löÐDà a2™qî\JJê!“ÕC.§„ĺºX,x{»A,æB"á⦛’!‘p!ó†$hQâª+Øì¡_½´gœœü‘­Â?¼Œ°°,Xƒôt)fÎ ‡HÄÆ 7$Ò÷­¯×Ò‚ca¡|*•ÕªËG\\0ââ‚1uªK–œ¨Óõ@©lBÑŠºº(ÔûÇWA©lä¢ðñqŸï?Àé?HŒ´†ÓÂDâàÁR<ñÄ7hlldž ‹ñÿ7wX'´ãÍ›ÀGÄÛoߎ¥K/ÿ€qʯ¿‚Ï÷ƒDµõ(Å××ã¼è™?“œ‚ï¿?;FöKssǰŽ?‰ÀH „ Eo¯MMT!Jss{_Æ!•ghý˜JE‰‰½½ýnCëʱ§§+kh2™áèÈ€‡‡ ººzéûvw÷ÂÍÍþþ®ðA` Øl/Z0 ôA@%$ŽôjW{{OŸ¨Bq±%%JÈå èîî…“¡¡H¸X½z&$.¢£ƒ ²†õ9JKUرã(²²(žÙì‹Y³ZFôë°==•xá…DDFÎBff1²²J°mÛøø¸aþ| ,"-M??OðxLðxL,\Ø¿ÆÖÜÜÑ·Z­DQ‘ß|s ÿùÏo°X,`³½Œ˜>bcƒˇHĆDƒD»È<Z|¤œ”YT¤Ä/¿B­nTD30÷q )øƒÃñ£ãÄ:)'µZ‡çŸß‹}ûÎbÑ¢xlÚ´ <ÓÖc8ÿþ÷/ضíþóŸ[qÓMɶgTÉÊ*±û\I__÷˶â&& ±eË~ètÝðñq£Éû£¡AGg—"0a\ÐÖÖ…†ÊU88ã°¿(E£ÑA«íô8Wx{÷gšÍ888ÀÃÃfs¿ÛÐh4£»Û//7°ÙÞCop8”óÅò—ë{UnÃáP[ÛŒâbÊ•H‰‰õ¨­¥\‰>>îˆåcÊÖ¬™˜>¢£ƒ®h®¦¦dec÷îSÈË«¡Ûâ||Üš*FsnnÆË<ËøÁpÀŒa˜1# Ï<³55ÍÈÊ*Fff yäK˜ÍL™"BF†RˆÅýN Ë óç‹1~ëg{{ (.V¢¸X‰œ¶m;ƒÁOOWH$<ÄÆòháQ,æÒ¡ÙnnΈˆà "‚sÞœå ­¯×ÒkØVduu.‡RÙ:¨ˆ†ÇcÊ}˜Éçû‘"`sL&3>ýô0^{í0™žØ±ãn»¥®”ÿüçW¼õV&ÞxãVÜrË4[3ª¨Õm(*Râ±Ç®·õ(—ÄÛÛí²cR’‹ùùu˜3'jŒ&#즦vùùþD`$‚MÑéºÑÐеZ×wë¿¡¡  õv`¶¡““#|}ÝáííWW'0 8:2ÀdRe&­­]Ðë)‘¬«K“ÉD‹…AA¾ ô—Ëì}àÇL¦‡M¾==”–6 ¨HA;e²zèt=`0 ²ËǪUÓ!•RBŸïwÅŸ¯»»'NTá×_ ™Y•JÊ%'°pÝu1X·n.BB(çãí·ÿ>"_§½ÂÂ_ÿ:ýë\tvêqà€YY%øàƒxùå!ø### Æ`Ö¬ðóD\oo7ÌžÙ³#è &ÈåÔ¿eQ‘…… ìÞ} zºL&&†ß':ò|ÁŸ?ggG„„°è‹?c6[ÐØ¨Cm-å€ìwB¶"/¯uu-èî¦Ü· †| R¢£Õ )øC(ô‡@à?&Â9@˜¼äåÕbÆÝËUøÛßRñðà 'lÖ›oîÇoìÇk¯Ý‚U«¦ÛzœQ';[WW'¤¤DÚz”Kâë뎪ªÆKއŢâkŠ‹ë‰ÀH˜Ôh4:DFùþä(’@ £‚N×3@,l ¶­-¼àììx{»ÃÍÍNN øúºÃÝÝz´µuC§ë†ÑhBss´Ú.°Ù”«Ãñç‹€ðxLp8>àr)1Ñž(Õê6””¨h·[II=ªªa2™áéé ±8R)Ë—ODÂ…Dƒ§§ëU}N“ÉŒÂB,Ão¿¢ @“‰rn:910mš·Ü2 K–$À××6"«½àééŠÅ‹°xqÌf òòjéUêíÛÁÓÓóæE#=]‚ôôp8^qvv¤ó­˜ÍTW7ÑëÕÅÅJ¼ÿ~4*‡‘Ï÷ëù}â#ï²ëíÖöêÀ@_L›váB„ææŽ ØZÚ™“#ƒBÑŠ¶6ÊõëààLJ„„°L½Ïã1‰’@ \:]7^}õ'ìØq3g†#+ë±a´Ž7¶nÍÆk¯ýŠ—_^Õ«gÚzœ1!+«))‘v/{{»£­íÒFˆå£¤D9ö‰ÉdFy¹wÝ5gÈ!#@ †EWW/êëµÐhtP©´hlì€J¥¥C«€huM”ØÂbyÉô€‡‡ \\ûV޽ÐÑ¡‡N×…ææNôöi÷¢ŸŸgŸÓÐ*2ûÄC_ZkñŠu¶¸X ¹\ƒÁggGˆÅ\H¥<¤§K •Rδ‘^ÇÖë8y² ¿ÿ^ŠÜ\d2œœáâÂ@W—AA¾X¶,×]‡)SDDº¸\&î¸c6î¸c6º»{qøp923‹±sçQ¼öÚ/àr™tncJJ$ÜÝ]†ô¼Ž781RSûs;;õÉêQTDý\>nˆ¥žëB47wœ'>ÖÕµàôéjÔÕµÐñÎÎŽôʵUt´¾ìÀ@Ÿ+š@ ŒO*+5xòÉopôhn¿}žzjñ„wÉôÑAlÜø=^xá&üõ¯sm=ΘqìX%:;õã"KÓÇghƘ>¶nÍFo¯‘ć&%upww¹hNø… ¿)0 ÐëP©´P«uP*[¡VSîCJô£DÄÆÆvº,üü<Ááø€Íö„»» "#©" ƒÁ„®®^´µu¡±±M´(‡S@€7ø|&‚‚˜ˆ‹ —K‰†”xH‰ŠãyÍòÏn³‚jjša±XÀdz 66×\{˜>ÂÃ9£öõVW7!7W†œŽ­Dww/üü<èõç  _ÜpC"–,I@B‚àª#»ví‚Á`¸üí„–7øû_Þ¡p¥¸»»ÐÎE‹Å‚¢"%²²J™YŒÿýï\\¨ªŒŒ,X —;¼fTOOWLŠ©SûמF3**Ô~þêñ믅Ðj»ààà€*«3>^@;/¶Â=¬ÈÄDáÿ¿Z­»€²GŽ”£¾^K¿®¸º:A(dÑ®GëêµUˆ´§(påôôðöÛYxçlDEaß¾ 99ÄÖc:Û·ÂóÏïųÏÞ€{î™gëqÆ”¬¬H$ܫʇ+||ÜÐÞ>‘£ÑŒ²2õE/ÀF—Ûo¿{÷îµõ“–¢"%bbøÃÚ##@ Œsš›; Ñè Tö¯-«TmP«ÛP_¯ECƒ­­ôýÁf{ƒÏ÷“éà`?„…±a6[`0˜ÐÙ©Gkk”ÊVTT¨QZj¦èÏ\®/ââøàñüä .×|¾ìwey¸X,œ;78/¯¸Xy^^ÞòåS|ÕÅ+C¡»»GV"'G†Ü\ª«›àéé‚  &<<œÑÝÝ oow,Y’€%K.* —3fŒº¸ØØèÒR?¤¤\}ÞQw·3är˜ÌDEµÂÉÉLÿ¿›o¾BáÈ|_¬888Ðy‹?¼M;²³©ÜÆ_܇'žØØX~ŸØƒ„Á9Hœ‹¹‹¹X±b*ýq¥²u{öóÏ¡¶¶åŽì_¯Fl,DWñ 0Ð>Ì€4™Ìhhh£EǺºfÔÖ¶@.o@ff ÚhAÜËË•CBXô*¶õc>>WæÐ$cGNŽ Ï<³MMíxöÙpç)pršÇ—âóÏá™g¾Ã† ‹pß}©¶gÌÉÎ.Á’% ¶cHx{»Ãh4£³SÉŒë6<<\P\¬$£ ¸ùæ›m=¸f$ŽwO:‡™3Çõ‹Åb¹ªÏJ „Q£¥¥*•õõZ(­´x¨P´Ð+ÇÛ•½¼\Áãù!0Ðl¶¼¼\áèèÐëMÐéºÑÒÒ…†-Š–Aåp¼û܆Lðù~öë[[ö…@à€Ÿ »VûçÆ_kùŠ5·p¨¿£L¦Bn® ‡•áøñJôöšƆ¯¯íF aaÉ’D,]š0¬œ{â»ïÎàþûw¢¾~ˈ<ßéÓ5øÛß>ƒÅbÁÖ­k0cF؈<ïpÑë8v¬‚În¬«k›í…ôtj•zþ|ñU—ø\®uôŠuq±jT™D£–ãâ‚!smâ,6LtûõÀ[MM3ЍÕ:ú¾L¦-: …þ Y‰Ø aÏ÷×Îha¼ÓÐІçžû?þ˜¥K±iÓM ôµõXc—_žÀ£~…G½ß~Žà`?ðx~àñ|ÁãùMš¢k^bAA-(–—«a0˜àî?Û.66R)oL¿7:]*¥ ZT*-˜LÄÇ àäÄ€\Þ€úúVˆDlÚ©8^EÅŒ´À­­xôѯ•UŒ aýú4› Èå*z•úÌ™0˜=; Ä #CzÙÖè«A¯7B.WÑŽÜ¢¢zÈdõèìÔÃÙÙ‘‘çÊøø¸Ú˜HWmWËž=§ñìÂúõixòÉŶÇfÜ|óVp8>غu­G••Ì™ó ²³‡D½ä}?ùäþûßLäåm£éûàÞ{?lÛ¶vX##@ “Þ^#”ÊÖ>¡¯~«RQnÄúz-tºþðhwwzݘËõEp°X,/8:2`2™¡×ÑØH9•Ê(­ƒÖ­îC*‡Ìni¥Dp8Þ6weÙÕÕM(,T °J.%’ŒE^⥰6gg— 'G…¢,–ÒÒ$˜6M„ÖÖ.üúk!Ξ­E` /n¼1Ë–MABÂøw*^ŒÑ­äåÕâoÛ“ÉŒmÛÖÚ]á€ÑhÆñã•ÈÎ.ÁþýÅ8w®>>î˜?_Œôt ÒÒ$c*Œ^Jœg±¼޶ç/…Á`‚BA9««›Q[Û4HŒ´^äqvv„PȢݎÖÕk«9Ô6pa²ÐÖÖ…—^ú»vÇìÙ‘xõÕ• °õXcʾ}gqÿýŸãž{æáÙgo°õ86C§ëA\Ü3xóÍÕX¶,ÙÖã ¥²Ó¦mÂ?üS¦ˆ.yßÇËqË-x3)"#L ââžÁóÏ߈Ûn›9¬Ç‘@ þDGå>¬­m†RIeRâ_+Šh4í°¾tºº: Z3¦ˆ¾ðòrƒ££ôz#Z[»èµ>ê9Z­/ûû{"8Ø|>“nU ö£?Fhc6[pî\cŸX‡¢"% ÐéºáèÈ@dd ââ‚iáÃÖ<þÆçÌÌ;VÞ^HMcöìH(-Ø»÷ .‡§§ ®¿>+VLÁ¬Yv'ÜŒ£-0ÔÊôßÿþ?:TŽoÂڵ׌ÚçºZª«›•U‚ìì;V £‘úyÉȈAzºqqÁc~aÁ/P\¬¤Åü‹Å ÄÄð!‘píZœkll§]VÑÑ*FªÕmôý8oÚí8xõš="-ÝÂxÁb±à›oNaÓ¦}pttÀsÏ݈å˧Øz¬1çÇóqß};p×]s°qãM¶ǦüðC֯߉ÂÂÇ,›újQ«uHJz~H™‘M;ŸÃwß=h³,ga¬ùå—B¬_¿yyáë;¼ßk"0„IGss-ôQ·‹‹~~žàó™´k08˜ÿ||Ü`4ZÐÞÞMçYŸ¯®®Ýݽ¨vYÇgûÐ* Ô[û=·5&“šÎD*7±£ƒÊŒ‹Š B\\0â㈋ †Tj?‚†Á`‰UÈÊ*FNŽ øø¸aΜhddH‘’‰¢"%¾ûî4öï/†ÙlAzºË—OAFF̤ÉÄ´2#@ Ô[¶ìÇ–-¿aùò)ø×¿n¶›Ÿ™‹ÑÙ©ÇáÃåÈÊ¢¯*•Ž7ÒÒ¤HO—`îÜhx{Û¦aùRIŽŽ „‡sl“‚¤«A¯7ÒëÖHêc-èí¥ ²ÜÝ]¸ ?\\&×ï1aâR^®ÆOìÆ‰UX»ölذÈ..Þ5?ÿ\€ûîÛ5kfãÅ—Mú ’‡Ú…êêfìÝû ­G2:]Äâ'±k×½˜?ÿòy¡RéÓØ°a‘]_”$F’uë>†««3ÞÿŽa?–õ„ …ÙlF£C]] -/$þQ‚ŸæÍÓ ‹å‹Å‚ÆÆvZ@¬­mÁ‘#娫kAGµZçèÈ@P/„BÊy˜”$ìsúÑ‚"i6ƒ ååjÔõ Š”XÑÝÝ ggGH¥<ÄÅcùò)ˆ@"áÚÝÉ»Z݆ìlrså8p@ŽÎN=¢¢‚°pa,^yE‚iÓBqút5öì9¿‡N×Y³ÂñÒK˱xq¤–/ŸŠ›nJBP¯­¿ »`¬ŒQ(Zq÷ÝÛqî\Þyç/ÈÈŽÙç)´Ú.ääÈè›VÛ‘ˆÔT ,bÖ¬»qÃj4í2©B™êê&˜Íøø¸Ó™ŽVÇcDDਗ܌íí=p>6÷Ån´Ò£||ÜháQ$b#4” ‘(¡¡lòº@° 23‹ñÌ3{ÐÖօǧ\“!²ãBääȰnÝÇX¹r^ý–I/.@~~®¿Øï IDATþ!•¥Ø<ÞÃØ¶m-–.M¼ì}Ÿxb7ªªH“4arðÁ¿ã½÷rpêÔóWôzOF`w´µuõ”Y?Ê!RS3øäÌÍÍùO«Çþ´‘ËeÂ`0¡¾žÊP´>%"¶ Ê×b2= Z…C?…lúý¶ÝœœWzz ()©§…ÄÂÂ:”–6À`0ÁÓÓ•n¦¥Å`»´Ú.äæÊ‘]‚Ü\9Z[;!ø##CŠ´4)®¹&nnÎhjêÀž=§ñå—' —«²eS°lY2"#mýeضjö©§¾ÅW_Àc]¿ÿ=cÜž8šLfœ=[ƒÌÌäæÊPT¤„»» æÌ‰BZšR»j€¨õo™¬EEõ´ð(—« ×áê걘‹ØØþk‰„OOW[}Åf:ãw yî\ª«›èâww—¢ã`ñ‘Ëõ·?£„ñA}½Ï>»¿üRˆoL /Ü„À@[e3ãÎ;?ƲeÉxã[Éï_[¶ìÇŽGqæÌóãî{"<Šÿþ÷ö!Ó|òÉ!¼õV&òóI“4abc6[’ò2/NÀÓO/¹¢ç #@s ”ÊVZ4("ÖÖ¶ ­Ê@¸^fuZ›>…B\\éFКš&º%´¶¶*•–^}ððp¡Äþ·ÔûÁÁþðñ±MvÙD¤³SOg±YWËËÕ0ÍðñqCl,%"ÆÅQÎݰ0ö}Pj±XP\\O¯¤ž=[C¯¤ÎŸ/ÆÂ…±ôJªÁ`BNŽ _~y992xzºbÙ²)X¾<ÉÉ!ãî|,±•ÀheûöÃxá…½¸öÚXlÙrÛ¸±¬¨TZääÈ•U‚ÇËÑÙ©‡DÂEFF RSŘ6-Ô.ÝHF£ååj*µXëtÝ`0 ±é VÇãX6l&M;ÎkDuuÓ€·”øØÞÞ€Zß ¸ Éã1íþ5•`¿f|øáïxãßÀáøàÕWWbΜ([eSŽ©Àw|ˆÅ‹ã±eËmvùši+–.}ÑÑ\¼þú*[2lÄâ'‡Ü{ð`)n½õ}Èå/“(„æ·ßŠp÷ÝÛqìØ3àóý®è9ˆÀH Fª³åOâ!uS©Ú`2QâŸ;„BÿA¡øV‘Ï÷CSS;-Rbb-LZËXœœàóýèç°æ! ÔûåÄÓÞèèÐÓÅ+Ö–ÊJ Ìf ˜Lz½ÙêL a­³SC‡Ê•E¹ÿ\ª1gNô aº¢BƒÏ??Š={N£¥¥×\‰U«¦cÑ¢x¸¹9Ûð+?ØZ`€cÇ*qÏ=Ÿ‚ÃñÁ'ŸÜ…ûʼz{8v¬ÙÙ%ÈÊ*Auu˜LÌ… c0o^´Ý¿VÖÖ6£¸¸~P¡ŒRÙ  òéH­Z§×œ¡ÐÔÔêêFTU5'@êtÝ'„„°ð'ñ‘ >߈#„‹òÇçèUÐÈÀƒ¦Û]ÎñXsòdn»m,bëÖ5ä÷gZmââžÅûïßÅ‹l=ΰ‘HžÆO ­¸E¡hÅôé›ðÓO#)I8Ó¶aéÒ· úcëÖ5WüD`$W„Á`BMM3Îk¤s kjšQWG‰]]T‘г³c_þ!‹ÿºÝÝ]úÖÄú…C«±®®¿©ÓÓӕƉØ}ïS‚")R}º»{iWb~>u³Š‰l¶× ¼Ä¸¸`þ¶yØTU5ÒYŠÇWÂd2#1QˆôtJTŒ‹ $Vèt=Ø·ï,¾úê$NŸ®†HÄÆÍ7OÃ-·L»â«~“{êDâ®»>†R©Å¶mw %ebºwÎkDf&ÕJ}ìXL&3’’Bž.AFF bbxãBœÓj»PTD•BYUU0™ÌðövC\\¿Ë1..áᜠ)´´tö9QYÙxAñÑÙÙB! aa@hhÂÂ8 eÛÝê$„ 6Û¾5‰Þ^#Š‹ëû„ÄZÔÑkÎ~~žˆFB‚‰‰BÄÇ Æí‰©^oÄñã•ÈÌ,FNŽl£kÁ)æÏŸçè2›-8r¤_}u?ÿ\X´(·ß> 3g† AÆ^± õGù?ý”gŸ½wß}ùñLg§–!;›Úèƒôt)ÒÒ$˜7/z\­Œww÷B&S¡¸X‰‚ŠŠ()©‡Á`‚»» bbøˆ‹ãÓF"#'ôEªâ£õïyU%BêtÔÚµ»» ÂÂF9CCÁAhhüýIÛõDÄb±àë¯ÿÀ‹/³#6n\†n¸|áÅd   ·Üò.¦OÃÇß5¡_®”¿ÿý¨¯×â›oî·õ(WÄ´i›°ví5xàô!ÝþüaéÒ<úèu£<`îºëètÝWý;=¹}ï‹õõÚ¾Žþª*Ê™h-Ta±¼J¹fÎ §OBD"6<<\ Rµ rOääÈQ]Ý„ÚÚf:7ÊÙÙÁÁþ‰XJy¸îº¸Ab¢»»‹-¿“ƒÁ„ÒÒäç×ÒÎD¹\ƒÁ7ÄÇ š*ÁC-D|¼`ܯŒªTZºãàÁ2tw÷B"áaéÒÄKfÒ)•­øúë?°{÷¨®n”)"lÚ´ 7Ü4.¯Ü.»» Þ}w Þ}—M›ö¡¸X‰ýë– [øäééŠë¯Ãõ×ÇÑ™£ÖU꯾:Ù—9ŽŒ )22¤ °õÈ—ÄÝÝÉÉ!HN¡?f}­+*¢b øòË“èîî…‹‹$.írŒ‹ †D›0ÿÞþþžð÷÷Ä”)!çý¿¦¦TUiè¿ûUU”³µªJ½žÚ `2=ÊFXááV’ºyyá™Ð\®ÂO|ƒÓ§«qç)xüñëáíMþ–€LVÛnÛ†¤¤|ôÑ:".^³Ù‚ä¸çžù¶åªN^­HÄÆ¹sM£8 `;òóëðÛoEøâ‹{¯ú¹ˆƒ‘@˜$h4í¨ªÒ ­b¢õ$ÂÇÇÃÂ8Þ€;Úh׃5tžr4öŸˆx{»A$ìB¤nÔ ÖD\M/˜Lf”•©ûN®ë—W‹’’zèõFºÍ9!A€„!âã©–ñîÈ3Í8uêrrdÈÎ.L¦‚§§+RR"éV].÷ÂÌž~þ¹_}uGŽ”Ãßß«VÍÀªUÓéRÂÈaOÆääȰ~ýN„‡àãïBP¯­GSZZ:qà€™™Åøý÷Rhµ]‰ØHO§ÄÆ™3ÃÇ­g2™QQ¡é)§cQ‘íí=prb **hPŽìxo°‹J¥vÛ±²Rƒªª&ÔÕ5Ó%j>}ÎG}¼FÐLöü>{¤««o¼ñ>øàbcƒñ¯ÝŒ¸¸`[e7”•5`ÅŠ­ˆŽÂÎw“ ßáìÙZ,^¼ÙÙC"áÚzœ+bÚ´Mxàô!e0ÀæÍ?àØ± üôÓã<0öÜ~û6ôôðí·\õs‘@˜@hµ]tö’Õ‰`Ía²º=<\úr—ú× ¬YL,–Ôê¶¾yë*µ]]Ý„în*WÑËËõOòÔsˆDd•ÙN0›-¨ªjäL,.V¢««nnΈ‰á#>^€ÄDâ㈈˜8¹dÍÍ}‚¢ ö "R¤§_^),T`×®ãøî»Óèî6 -M‚[o´4 q2Œ"ö*0T>çºuC§ëƇÞ‰©SCm=’M0™Ì8}ºÙÙT3µLVO öÖ¬Ò‹ öã‹Å‚sçšhÑÑZ`¥ÕvÁÑ‘°°€¾\GJtŒåOºVQƒÁ…¢••ÖèêÂeU•*U, ©ò5«Û1"‚ƒˆêÂ%Ç÷¯Æ#û÷áé§÷ ½½O>¹kÖÌ&㨪jÄòåoC$ À®]÷ÂÈ‹cË–ýعó(ΜyÁÖ£\1II/ࡇ Y`üüócؼùÈå/òdÂØròdnºémìÝû ¦O»êç##0Î0™Ì¨«kAE…ee ¨¨Ð ¼\ÊJ ݪìâ⑈=È(Q"`P/4švZx¬¬ÔÐNÄêê&tvêP+sÖöI« i9o[~  ººiPKa¡íí=pvv„TÊës&Rbbt4wÂ…•)‘“#Cff1Ξ­£#³gG 5U‚ ¤ ½ôJgg§ûöÅÎÇ—W ±˜‹[oå˧Ñ|Œ°gÚÛ{ðÀŸã÷ßKñòË+°zõL[dsT*-²²¨ÜFkä@L Ÿv''‡L˜ uu-tÑU*£€FÓ„„°9ccƒ'mnaO¡ÏíØ±Ó*D¶¶v .tRE3œ>á1þo"êŒ< E+ž~ú[dfcÅŠ©xî¹@ŽãR]Ý„+¶‚ËõÅ®]#Ñ'—aÉ’7!sñúë«l=Ê#?‰'Ÿ\2dñðárÜrË»(*Ú!ÁÁþ}¡îý.ÆC‡Êh7¢UDtww¡…ÈÔTqŸ#‘}lùå.BÑÚW¾¢@^õ¶­­‹^éKH→ €TÊ›®»îî^>\ެ,*'N¥Ò‚ÃñFFF Ö¯OÃܹQCZe”Éê±sçQìÙsz½K—&bãÆ›0mÚät¨.Ž··¶oÿ+^ýW<öØ×(.VbãÆeN¬\.kÖÌÆš5³•&ýðCÞ~; L¦RSÅHO—bÞ¼èóJ“Æ?\}ý±††6ÚáXX¨ÀgŸRÙ àóýèëøxââø œøëõnnÎHxHxçý¿ÖÖNTThèc™ªªFìÝ{vPÞ³õ¸&<<‘‘}¹ðùÄõ8\ >øàÞxc?x<&¾þz=RR"m=–Ý¡T¶â–[Þ›íEÄÅ! Õv!/¯÷ß?´r”‰Bh(Õ¬^]ÝDF„᧟òqòd~þyäVÿ‰ƒ‘@°1]]½(+k@iiÊÊ —«PUÕˆºº˜Í8;;B(d!**ˆˆà 2’zßɉÊJ í¨¨PÓ«ÑÖ•hWW':éÏŽÄÉ–%6Q«ÛhWb~>•ØÔÔGG""8ƒÖœcbøpss¶õÈ£F]]Kßjf1Ž)‡Á`B|¼€^}ŽÒ hOûöåaçÎ#8}º¬Y37ß< L¦Ç|%„ aïÆüôS>þñ]˜2E„>X __òsóg**4ÈÉ¡~_Oœ¨‚ÉdF|¼ Ä 5UŒøxÁ„\Ïlnî@Q‘rðXSÓ ‹ÅÇ{ÀzµqqÁö³õÈ6Ç`0õmf¨iá±¢‚:¦ii¡\nnδðÎé©ìGR4s>'NTá‰'v£¦¦ÿ{î¿?}B^l¼ZT*-V¬Ø wwgìÞ}?ކÀwßÁCíBaáæq-Æ×Áh4šöÞyg i['Lôz#æÍ{³f…cË–ÛFìy‰ÀH Œ½½F”•©iÑ*(ÖÖ¶Àb±ÀÍÍQQAˆŒ DTT }ÂBccû€nÊÕXY©R©…Åb“ÁÁþˆŒ ¤¾E"j=šËõ%WýÇ zº|åÌ™œ=[ •J „†²é–„bcù¾lÀd2ãÔ©jdg— *h™?_Œôt ÒÒ¤ÃZׯ¨Ðà³ÏŽ`÷î?ÐÓcÀ¢EñX³f6fÎ #¿#vÀx ¸X‰;îønnÎØ¹ón»oV¶%z>\Þ÷»,ƒJ¥‹å…ùóÅX°@йs£'´¸¯Óu£°Ð*:Ö¡¨H‰ÊJ Ìf üý=•k%$Æ}ŽåHBeKkÿTTPÑ.V×#—ˤ}""8}B$ÁÁ~“îµ½¥¥›6}Ý»O!5UŒ—^Z–­Ç²K4šv¬XñøöÛûǵÃz,yàÏ¡V·a÷îûm=ÊU1\fÌxk×^ƒõëÓFq2alxóÍýxï½\:ôԈƟ‘@aL&3ªª!“©PZªBY™2Y=jjša2™áì숈JD”HxˆŠ „XÌ‹åEg"VVjP^NHWU5¢«‹*WñóóDXX-$†…õ‹äÊôøÂh4C.Wõ ‰5ÈË«EE…&“¾HJÒ·øxḾJ<´Ú.º±67WN´,XC7ÖçgÝd2#3³Û·ÆáÃ剨øË_fá–[¦‘“ ;c¼ Œu‚z×]£²²|°sæDÙz¤qL¦Bn® 992œ‡z-ªªa6[à=(77>^@bKþ„ÑhF]]ó᱓£©©@ÖcDD ¢£ƒÁATTD"ö„;f²X,صë8^zéG¸¹9cÓ¦eX²$ÁÖcÙ-ÍÍX¹r+z{Mسçòû5DÌf ŸÃ½÷Î÷+Òbñ“ظqV­š>äǬ\¹‘‘xå••£80ú44´aΜWððà G\0'#pètÝ(*RB.W¡¸¸%%Ôûz½NN ˆDlˆÅ\DG!*Šº¹¸8¡¦¦‰¾"o]oV©´@¯D[×^'«ã—êê&äåÕ"/¯gÏÖ¢°Pž¼¼\i÷Jrr’’„“ν"—«Me)ž:U Ã3f„!-MŠ ¤ç û9[Z:±k×qìÜyJe+ÒÒ$¸ë®9˜;7zB®eNÆ£ÀP+&<ò~ø!/¾¸|Xn ÓõàСRäæÊ‘-ƒZÝÇ©©¤¥I0ožxÒ\`éèУ°P1¨°«ºº ‹¾ƒDÇ„) ºmm]¨¬l¤‹ð¬oëêZ`2™áäÄ€PÈê© ¾Ô…[Î¸Ü Éê±aÃ7ÈË«Áºusðøã×˯c¬Ðj»°råVtvê±gÏ“î˜ëj8s¦K–¼‰ììÇ!‘pm=ÎU!?‰W^¹Ë–%ù1?üššÚ±sç=£80úÜ{ïg(*R"7÷q¸¸Œl- )y!†€ÉdFMM3Š‹•()©§oÖ0wOH¥|ÌœŽuëæ $„ GGÔÔ4õܪñóÏ…¨ªÒ@¯§ ZX,/ZDœ??š>¸ Y“º4`"ÐÒÒI ‰yyÔªsKK'œœ‹¹HNÁêÕ3‘˜(Ddd़ôz#Ž)§Eźº°X^HO§DÀ«òóëð駇±w︹¹`õê¸ãŽkÈŠaÔpuuÂ;ïüQQAxê©oQVÖ0éË_†ƒ/NÀâÅ °X,(.®Gn® ¹¹rÜÿNÀÔ©¡tYŒTz~yÈDÁË˳f…cÖ¬púc:] êèÛ×_ŸÄk¯ý€*DùózµŸ¹éëëää$'‡ úxo¯‘Îv´–çee•`Û¶tyŸïG;##û2¯9véxïìÔãõ×ÅÇDB‚¿þúè„þý tºÜvÛûÐj»ðÝwqq˜8 Ç÷â"tw†ý>ßyyµ£0 0vìß_„ÌÇ_Ü;ââ"@ŒÂyf”•5ô¹('AII=º»{áäÄ@XR)R)?hnî@i© ”—«¡VëPnݰÚ8p½™”L zz (*RàìY« X‹êê&€HÄFbbÿªsllð„.a¹*•¶¯ ¥‡•¡§Ç€˜22¨ÕçÄDá ­ƒ ûöŧŸÆéÓ5ˆ‰áã®»RpÓMÉpwwᯄ0ZŒWã@¬å/S§†bÛ¶;ÈëüU¢ÕváàAÊݘ›+ƒFÓ.—‰ÔT1RSŘ;7ÞÞ“ÃÝ8¶¶®Å_ äç×B¡ .x þç9}|Üm<±}c2™QWׂ²²”—S£UˆÔé¨Âwb Μ©Aii üý=‘”$Dbb-*Næ•v³Ù‚³gk‘•UŒìì×ÃÍÍsçF!=]ŠôtÉU;ZZ:±cÇ|úéa´¶vaÑ¢x¬[—‚éÓÃFè« Œ%A`€ÂBî¼ócxx¸`ÇŽÿCh() , ÈÉ¡²óòjé8…ùóÅHM•LWÍ•ÒÒÒIg9Zs­Ñ+"›©LÇàI)Ì^ m´èX^®Fe%µr­Ñ´ r#"ŠÅA Y£rüW[ÛŒgžÙƒìlV®œŠçž»Á.Ý•öFww/V¯Þ†ªªFìÙóÀE¯LvZZ:ÿ,>úh®».ÎÖã\íí=ˆŽ~Ÿ~ÒÒ$C~ÜÑ£X¹r+ _$¿w„qÉÓOïÁ¾}gqðࣶñ@F¤Ád2£¬LMj*PRRƒÁOOWÄÄðʆ¯¯;,@«íDy9u»£C€Zk¦òÅ¥×hF²y‰`?¨TÚÎÄäçס£C77gÄÅÓBbb¢\ µztà€99TSlssddH‘‘ƒÙ³#àêzõVüÒÒ|ôÑA|óÍðôtÅ_þ2 ëÖ¥ 0Ðw¾ ‚­˜(#¨Õm¸ë®Opî\>ø`-RRHùËH£ÕvÑbãï¿—¢¹¹ÁÁ~HK“ 5U‚””ÈIŸCרØ>ÀéHÝÔj „† r9ÆÆò'ý÷k8´µuÑ›©b>J€¬«kÙl‹‹Sß±b¢£ƒè,n¡uENCƒÁ„÷ÞËÅ›oî‡PÈ«¯®Ä̙ᗠÝݽX»öcÈdõؽ{=ÄâÉ{!âjøî»3xè¡](*Ú<î/P¨ÕmHJz{÷>8¬‹ÒÕÕM˜=û%üúë#ˆŒâ„ÂÈsâDV¬xÿýïíX¾|ʨ}"0&,jµŽv™9Sƒ‚JòòrEDÞpssAWW/ÚPY©AO•Çq¡ ž¨¨@’m4ioïA~~Ξ­¡EEµº †"#ûÄD*ÓI,æ’|µ>*+5ÈÌ,ANN ޝ„ÅL›ŠŒ )ÒÓ¥ˆŽ‘Ïc±X›+LJþŽƒËÁÁÝwÏÊSÈôa" Œ•5úÐC»ðóÏxñÅå¸ãŽÙ¶iÂb6[PPPG·ÏÔÁÑ‘Y³"–F•ÅDDÇ@XóóëÐÔÔGGÂÃ9}¢#•çÃ'¯¯Ã¤««jÈå (+£n¥¥ P(Za±XàææÜWú8¨P(ô¿èªõ‘#xòÉÝP(ZñÈ#×âÞ{çO¸ìÑÂ`0áÎ;?™3µøæ›õˆ‰áÛz¤qËý÷ï„F£ÃîÝ÷Ûz”«¦²Rƒ9s^AvöcH†ž[ÚÓc@XØãرãnddHGqBadéìÔ##ã5DEá³ÏþoT? ‚ž êpæLÿêªRÙ GG‚‚|ÁdzÀÑ‘­¶ *•ƒ †DF":š;h½ÅË‹\ÅŸÈ &Èdõ8s¦¿„¥²R³Ù.—‰¤$ªÑ91Qˆøxùy€Á`±cÈÊ¢ Zª«›Àdz -M‚Œ )æÏƒÉ¹Ü¹îî^|óÍ)|øá館lÄܹQ¸çžù˜??Ú&¹W„Ñc¢ Œ%Œ¿ùf&^ýW¬[—‚^¸‰\œš›;pà€™™%8x°ZmWŸ›:iiÌžN„³Ô×k‘—WK Ž ´¶RÅd‘‘ˆÐŽ}‰„GÄ­+ ³Sòr5JK©œG™¬ååj:;ÓÃÃ¥ïx4¨ÏõÈE@€7>úè¾ýö 22¤Ø¼y9%ãƒÁ„»ïþÇWàË/ïCb¢ÐÖ#[Ìf žÃ}÷¥býú4[sÕÔáºëÞÀ±cÏ »P,~Ï?#n»mæ(MG Œ<=ö5~ù¥99F}ó’´HÆ%:]7Nž<‡ãÇ+qâDòóka4šáééW&0 ˜Lfh4:xx¸ **©©bDG!"‚jœ¬…“ ¦§OWÓ·üü:ôôàãã†øx!®¿>Ž>y"k¶ç£Ñ´#;»99r8Éû߉ IDAT Gg§ K–$ #CŠ)SD#ž5ÕÔÔíÛáÓO «K•+§áÃט#’@ ððà ˆüc*+5ضm-)ÝeX,/¬X1+VL…ÉdF^^m_ÉT1>ýô0\\1sf8.ŒAjªdÒG\ðxLðxL,ZO¬¶¶yP‰Ì/¿@§ë««bcƒéx¤$!Éžž®HLž'rutèû\Žª>áQ…ÇËQ_Oåg2‰Ø`±¼ðãù‹¹ˆŠ Ÿïg‹/cÜ`2™±~ýN=ZŽ/¾ø¯’¼¼Z47w 5uèy…öLgg/\Q,D@€Tª¶‘‰@5²³eصë8>ø`í˜Äº#a\ Vëpüx%rrd8v¬Je ÀÅÅ F£ &“…¾Ò‰¤?Q$b“«í“ƒÁ„ÂB½ÿÇç T¶‚Áp@TT¦LaÊ”L™"Bx8‡´.^k™BVV ²³KŸ_G¤¤DÒ ÑrQÔÔ4cÛ¶\|õÕðôtÁw¦àÎ;S&uaÎda":RPP‡uë>§§ vì¸{Ò‹Z¶B£iGn® ¹¹28 ‡Nבˆ´4 ,ˆÁÌ™á#’;Ñ0›-¨¬Ô /¯¶¯è¬ÅÅJ &0™´àha³I•PT¤Ä† _£ @oLÄ”)¡¨®n‚\®BY™j5%lx{»!22b1µ#‘p!‘ð@2ÁM&3xàsìß_Œÿýï’U9üç?¿âË/Oâ?ž³õ(#Bff1Ö®ýUUÿ¶Ùä–[ÞEx8¯¼²r”¦#Fަ¦ddüóæ‰G­5úÏ#(‚]"—7à»ïNãðá2TThÐÞÞÀb6Û›nx–JyˆŠ BD‡‰“††6Ú™xêT ŠŠèé1€ÉôÀÔ©"ÜvÛ L›ŠÄDḥMÚÛ{pð`)rräÈÎ.†FÓ.—‰ ¤xøá…HI‰Օ¢"%¶nÍÆ?æ#8ØÏ>{V­šFÖ †øx~þù!¬[÷ -Ú‚?\‡k®‰°õX“Ç«VMǪUÓa4šqêÔ9äæÊ‘]‚O>9wwÌžŽ´4)22¤d%µkqdd n¾y ·×ˆÂB%òó)ÁñûïÏâÍ73a±X ø÷‰Ž!HJ"..äõübttèñïÿŒO?=Œ¤¤ìßÿÏ ¶¢·µu¡´´eejZtÌÌ,Fc#Õjíïï ©”±8ˆ£¢‚&Í÷Þb±àŸÿü ¿ýV„Ï>û?".޹¹rÌŸ/¶õ#FG‡ŽŽŒ+Úd ð†F£…©„‘Åz±ÅÍÍ/¾¸lÌ>/q0lJG‡¥¥ (,¬ÅÁƒå(,T ¡¡ &“àâ∠ &bcyHI‰BB‚‘‘$#q²BÌPîÄS§ªemFG!99S§†"99áá$£ï2TTh•E´œ8Q³Ù‚ÄD!,ˆAzºdLÂÐ.Ã;ïäààÁRÄÆòqÿýéX²$aÄW® öÏDw0Zéé1ࡇ¾À/¿`óæåX³†”¿Ø *•¹¹räæÊqð`)ÚÛ{Á¡‹bfÍŠ 2/ƒN×ÝW”FåçåÕ¢±±½oË$ˆÎ8NJ"22ˆd’øá‡<<÷Ü^ F<ýôÜzëŒa¿´´t¢¤¤r¹ r¹ %%õ(+k@WW/ …,H¥øàwxzº"%%©©¤¦Š‰»ñøø¸cÞ¼èA¯çJe+-:æåQNÇÎN=<<\70Ï1dR}O««›ðÔSßâ÷ßK±jÕt<óÌÒ+Žñ÷÷DJJ$RR"é™ÍÔÖ6÷î=‹êêL˜LfºÑZ"áB,¦DG±˜;.׬- ž}ö;|ýõI|øáD\¼Böï/ÂÆûpÛm3°pa ¢¢‚pèP˜3'ÊÖã½ðö¾²,ä  _h4í#<0²>\†-[öãÅ—©¸#a„±X,¨«kAiià+¨ &891àééŠînz{ð÷÷ÄìÙ‘¸þúXÌ ‹döLVzz (*RàÔ©z幡¡ NN DGs1mšÉÉ"$'‡ ,ŒÊ•ººäæÊ‘•UŒ#G*ÐÓc@L ©©,X ERRȘ F£{öœÆÛog¡ºº ‹ÅãþûÓÆüÁö¨ÕmHJzaH÷>= {÷>8ºÙˆ}ûòðÐC»0sf8Þ-||HŒƒ½¢P´"'‡Ên<|¸zÚݘš*!ÙÃÀd2£¬L¼¼äåÕáÌ™”–ª`4šÁf{!))d@ž£L¦‡­GQ Þ~; 3 ‘ˆW_]‰éÓÃÆìó÷ôPVÖ™ŒeÿÏÞy‡EquqøÇ²i6D‘*ÒlDQ°+VÔ»F¿({KbìÝhLbl±7,X¢b»‚‚ (HG¤JoËîýþXÙH[Ú,[¸ïóøÈîΜ93÷Þ3wΜ{Nx2ÂÃ? –Y·n­ss/ŽÇv07×A§NíÄž²äÅ‹¤¦æ`èP›J¿ýúë:ôý5ÆUþR;îßÀ¤I ÒRéè´€™™6X,9>áþýÆBYYNNfpuµ‚³³…̽‰¦ÔLQoÞ$"c‘šÊÏÉda¡ {{ØÚv€½½!ôõ[‹[]©###ï‹C1÷ï‡#'§††màâb!Ö¼aÅÅ¥8}úöíóEzz.&Lèùó4©%p”ê9yòV®¼ ȹ[òòrxóf½ÌWOIÉÆÔ©‡‘‰ƒ§ÁÁá¿â/……%06æGY<}ºš:®$¯s7>zôNP™ÚɉŸ»ÑÁÁXìÑ_ÒHffþ—<Žq_–XÇãóç|((ÈÃÜ\ç«¥Õ`bÒ¶Ñ]INÎB\\†Ð‚"))9X·î ._ÂÀVذa´T¤úz™uxx2Þ½ãÄÅe€ËåAEEffÚ°´Ô…••.,-uÑ©S;Æ/oÞ$`ðà]““‹%‡ýû§`èPìÚåƒ;}°k׸»wgô˜M‘ððd °­ÚßËðüùtè söÙ³BN8p`Z÷}ý:C†ì–êó§H?¥¥<ôêµIIY`±€1cì±k×lÝz‡?Âõë an®#ݨƒ‘R 66¡¡I Mü¡˜„OŸ²ðóN˜›—M$ÚÃÊJšÈË+ÆÍ›ÁðòzçÏ? U+U Ø®®–ptì$µoš)õ#..±‚ü‰ááÁáp¡¥¥;;A1½zUpkêðxÁÁ ðõ ÇÝ»aN€‚‚ìì  ¥%ú\‚99E03[ ˆßY)‘Ç#8vì1¶n½ elÜ8..–"×KÔqðîÝ'„…%áíÛxû6I°Š‰Å’ƒ&¬¬øÏ ææ:°´ÔA»vÍë}¼iÓÁÏ/, 'Ç‚››-.] ÂÖ­ã0yr/Ϯ雇5n·bÅPxx87‚F¢aĈ½èÒEëÖÕ½²nÙ5ºukMñC—/aÁ‚“àñø®<KñäI$vì‰Å·â…:›0……%OL Þ¾å_ÉÏ/›Í‚±±ÌÍu¾Løo%¿Î‘Èápñðá{\¸ð>>¡€Áƒ;côh{ôë׉&¬o"”””âÍ›DãÅ‹X¼z‡´´\((È£sçöèÒ¥ìí `gg@#×@NN<ˆ€¯o8|}Ñ–– mípvæG)öîÝQìK5òó‹qäÈ#8ðEEL™â€¹s¤2a<¥qøî»ƒ¸?¢J'£œœö완±cíÅ ™x „`çNìÞ}³f9ÂÜ\‹ŸEÙTÅ’ÃÚµn˜5ËQÌšRjKjj.üü•©³²  §× NNfpr’ Û-Í”–ò‘Œ  ~º•7oðþý'ðxúú­Ñµ+ßÙhoo ]F—#s8\¸»ÿ…çÏ?¶m_ÎÑœ€å˽ösæôâE®2ÉJA||æ—gвUOIHLü €ŸÛ±,Ò±,XÁĤmm‘Œ¶ãëGV àñ€ ºc×®‰"=¯¦Djj.ºtù¹ÚßäÑ«—1Μ™[çJç’D¯^ðí·½0þ€:S3³U8{v.iqBJãCAß¾[&p0üy³¾~kF÷îFؼy,:ujÇä)J99… M<‡”—áp¸PRbI³¤+x±°Ðºú¯æÍ;Ž7‚ÁápËÉ-‹d,[.Mi8¹¹EèÔie•¿ÉÉÉ¡eËfðó[!õ/Ž —bË–qõ^Vß¡ÃbìÛ7#FØ2¬…R37o†`æÌTž;³Xr‚åÒâr2R£ŒÁåòVΑøömRSù•áttZÀ‚/{‹¨¯ßºVÎàà<øW¯¾B«Vj˜1£7F¶“Š2”ú›Ž€€¼xƒ€€hDE¥:vl‹îÝ aooˆ=ŒhîÄ/\ºˆ  8lØ0ºÎû–àéÓ¸{÷-|}щ֭Õзo'AºIÊaÊápqúôsüöÛäæbúô>øßÿœ¨c‘Rk J`i¹ÅÅ¥å¾g³å1hU½ò#É……%ptÜ‚OŸrÀå–¨f³åam­‡«W=èRi)'##¼ƒ¯o8Ùlù:9‘‘)èÛwK­¶e³åai©‹ë×Ò¢jM€ððdøù…ãþýøûGƒËåÁÚZNNfèßß]ºt¨s?:t7x<‚Ó§¿§©-ª +«üâ1/^ÄàåËrjÜONN>>‹ae¥[«ã”-I=|¸éFmWÅš5—püøÓ*#¹Ùlyp¹`³Y‚Âb?}G`jª…Å‹að`k±§R¡Œu ¾9Ö¾&!!³Ü2çààDdg€Íf¡cÇv°¶n›gb]n| !55?üpAAñXºt0fÍr›×»©’™™mÛnâĉ§ „`èP<8­Öû”àÕ«xøû@``,^¼ˆA^^144”¿$/7B·n†°µí€fÍEw"M€û÷#ðÃ'—W\©ªáט˜hÁÁÁÎΖøæ©ºî±±éغõ®^}îÝ ±fÍØÙé‹[-ŠŒòìÙŒ³¿kpðú&•÷ùs>nß~‹7ÞàÁƒwàpx——+7±øÚ{÷–5y‡DS&**õKeêp<þ%%\XZêÀɉŸ»ÑÞÞ°Òœîڵט;÷8!‚‡,Z4Îÿ*œœ…w!++¿Òø†•U{¸ºZ ŠÈhh(WÚæùó=zŸà3›Í!Àœ9}±hÑ@™s^Õ–¯ãï¿ï Œ òàñÆëçZ;¼x<‚RDz¹¹E`³Y05m'ˆr´¶æ;«›«­Ys 'N<ÌûäåYhÙRëÖ¹ÁÍMv^Š ´ ÁÁ `³å1|xüñÇdq«Ä(¿þzÑø÷ߪ‹ÙÔOÏÓÈÌÌÇñã³ÔŒB©ž7o0xð.Áç2Gc—.°dÉ 89™IÌêCê`¬%_çX+»Ùy{/¨2ÇZIIŸÎIJB,Ÿ?çC^ž-ØØð—8[[ë ½¡‰š÷ï?ÁÝ}?ÔÕ•pàÀ4˜™Õ/á-¥~ðx'N<ÅæÍ×QXÈL\:th…çϪv¿ÔÔ\DãÅ ~…çÐÐD”–ò «ÛR°Ô¹GCtê¤-ö7²‡ÃÅ–-ÿbÿþû“ƒÐ(6›…_~‰™3QÆ“™™={îàèÑÇ00ÐÄŠCé’-ŠÈáñlmAZZ.fÍrĺu£Ä­’DQPP?¿pܸ Ÿ·((àGä”Ý/:wn7~lòNY ¿ùÓ§ÇØØthh(£OŸN‚œƒÚÚ-°pá)\¾TÎaÆb±`cÓÿ= íÛ·ãYH99E>|7bb2ÊEÓ±Xr`³ùc6[FFš°°ÐE›6j(.æ"##aa“KÆÆZ‚jÕvv06Ö¡C±qãµJ/+åååÑ¢…2~ýuFê*1ŽAY•_€±('|÷æÍs‚®nÃûåש¨BB«Èrr !/ÏBÇŽmQŽ;·‡••.TU•0hÐN'–“Åo‚nÝŒ°yóØz ‘$FþÏŸG¡}û–ðõ]55ÙrrÏ™s,–öïŸZo«V]@XX2¼½kŽR¦P˜`êÔC¸sç-Xàpxpp0Á¢Eáà yõ1*9³³³‘˜˜XÝö2MûöíѼyórßÕ6LJÃÅãÇ‘xö, ÏŸG#66 ééy‚ E™#ÑÆF–Bþ;w IDAT–ºPQ‘ŒH¦ˆˆdŒ÷'LL´püøl¨«W~»ú5?ÆÞ½{I;ÙÂÃý{÷.÷ÝË—1X¶ì<Þ¿O!_F999¼¿ªªJ „ 221‚‚,qq—gÁÌL³fY£eK´n­F“„‹.·/¾ˆˆˆOÕ&ÖýK½z™ÀËë ]Ã)*âàðá‡øý÷{hÖL ºbòä^4’E?~¼¸U¨’°°ÖÈÌT†MÔÕ%wéÑùóç—™˜˜ˆìììš7à›7Éxü8Å";›Ÿ»rüxkÌžÝqÝ$ªæg”Ú›?¿pøú†ãéÓ(,,™Y;|ü˜œœÂJÛ+(ÈCAß~›ˆaÃþ«ÈÛç„ÈáÉrßÉÉ(*ò ¦VUUTTJ¡ªZ eåRÈÉU~éxþüyddä})¨Ç¯X]VPOCCZZÍ“Vå¼¢Ìyekk€-[Æ r:îÝ»?É9KQQ-ñé¿HŽ®n.tuó ¨XûÈÑúлwoŒùí‡c‚ Ò133,– 5—Ye>H€ï%„‡)SzcùòÁÐÐh@rï·ÂxòD„66©PW¯9çhcÂÄý×Åeú÷7ÇÊ•Cë-cÓ¦ë_Š5.i°>”ê‘Æñ# òóÙxõŠŸžªeË"èéåBCCræÉ½{÷†‡‡‡às¥õ·EEEHKKC›6M«*aZZ455ËM`kʱvãF´µ›# ¾¾áÈÏ/†¹¹ÌÌ´1l˜ ¬­ùo¾$uyCNN!fÌ8Mœ>ý}­"(ãããáåå…qãÆ5‚†²ƒ——ÜÜÜŸSRr°~ýU\¾Tm>BÖ­»‚OŸrðâE ²²  ¢¢ˆ®] 0fŒ=ºuã¿WSSÂýû÷”R碈8rä)Μ «Ó><¿4rrŠª\%)BpéR ¶l¹¬¬Ì™Óÿû_‰µ[”†ãåågÇ;tÈAA[b‹e×MäææÖzîÅf³`g§ ;;],Xð ""Rqþ|àâÒ²yVÕüŒR{ 41}zLŸÞÅÅ¥xþü®^}…ˆÿ*·çp¸àry˜3ç(&LèG£Y3Å&9ÿ‹WGóæÅ`³yÐÔ,‚ŠJ)TT8U:+òµ½hÝZ ®®VpuµÀI–„ÀÀXìÞ}»Ú—–e1 ÁÁñ4h'¾ûÎË—¿¿¿Ì¶—ËBv¶Úµ+€A6ØlÑ:~[)((ÀÃÃúú­Ë9Ö“’>#88~~øðáiµ2Ê'N<ÅÅ‹/±víHŒß]bï·ÂÐÔ,€šZ©D9™¼ÿÆÇg48ºªª $s®"KHãøIIhÞ¼FFÙPU•œq üg?¿¦Ú–––"WH’à;h¾þü_޵ê–AFG§bÇŽ[°·7ÄO?ÀÀVhÓF:Šep¹<Ì›wÅÅ¥8rdF—g‹"‚C–)[ÚÂápqøð#lß~„*“÷ü(‚7Báà`ŒtEF°°Ð­6¢ÌÜÜmÛÒâLR\\Šuë®Öè\d±K¾ÜRt.—‡ÒR.<ˆÀðá]D­j½NÀêÕñúu&Lè%K¡mÛ†%¾¦H§N¤I“Ä­F%.^|‰1cìÅ­F•œ>}ß~û­Èä·mÛæææuÞ¯sg`ܸþ€ÜÜ¢W"Hçg”ú£¤ÄFß¾ðäId¹%ö)›÷^¸ðþþpðàtÁotþW;„Ù 6›kk=kaÍšË5Ê*[Æ~úôs\¾míf˜8qNŸ>ŨΒ@JJTU•uY®0»®«Ûºº-‘“SˆÓ§ŸÕXà§´”‹ÜÜB,Yrÿüó ípôèN‰¼ßVÇÁ<¸³D-Ëgêþ›™™ÜÜ¢­QQQ¤ÆFBRç«GŸ!±…–ª—´ŠtêšcmÑ¢R—c ¶n½'O¢pùò©qŠJ;‘‘9prÚŠØØ ðx5¿‘åñúö5ž}²•\YšPRbcãÆÑpqi#£ŽÐÐh‰ììB– ¨ˆƒÜÜ"ü÷w~~1 KŸ_‚¼¼"ddä}U!RrÈÌÌÇÆ×qîœ?ºw7ÂÍ›‹K¯(q"©ÎEiAÖœ‹ÑpãFˆÐee”–r‘‰ÁƒwaèPz`šDÔ%~i)99…ÈÉQGR’2ãd®øš¤¾ä I›ÍBIIÍ㦬ICB’ ©9çÎÅÀÕ5ššj"Ö’† ±· "#&&ÁÈw0JÞüž"{°Xrë\¬ê`üŠøøLLž|Ÿ*åë àÖ­P©s0^»öüá‹]»&ÀÖ¶ƒ¸Õ‘y’’>CKkþþû]öãryxù2FDZQꊒ-Z¨ E q«RoJKy8vì1¶o¿EìÛ7#GÚJÔ[j …B¡ˆŽØØtDG§Özû²è9oïx´m;™™ùhÕJUTê5)* þ+ÃåòÊå}×Ókcc-µÁ;ÿBCƒ-- ÐX<}Yɹ(/Ï‚¼< ¥¥¥(‹PWWF‡­ajÚ††m°víJôìù?(*Ê‹AkJEbcÓ ¬¬mí ’£¢B—HS(ÕAŒ_¸v-gÎ\©Ó>Ò’cíkÂÓáéyÓ§÷†»»l&ƒ—$ Kpñb ¸ÜlÈËk@MM yyü7^UM"+’ðùùÅ4¥Á<}…U«."&& sç:ÁÃÙö+ …BibÜ»'<凼< ÊÊ PSS‚’’TTÑ¢E3¼yììLüóÏcÌŸ?JJô¢¡Å þVVV€ž^+cJ_¿5 ÚÀÐPÚÚÍ˽|ÿž¿L]O¯U£ëÜ)-å!"â“àsË–*00hƒŽµ``  CÃ6_þ×w)céÒÁÐ×W­ô=E<¼{÷ &&ZåRÕ—²—/ ¥…B¡F™Í±VB,8‰ââR<8 4T_\´h¡[ÛU.OÏÍ-B\\bcùŽÇÈÈ俉AKŠ´SZÊáC±cÇMhiiàäÉ9èß¿î$( …";téBSãH NNfâVR TU•ÊU–¦H/‘‘)Œ¬à++ŽÊápé35…R»ß?þŒmÛ¶1¡‹Ø)˱¦¯ßffÚèÒ¥úô1ÅÀV9Ò“'÷Â÷ß÷ƒ§§+V¯†Í›ÇâÀi˜0¡‡¸U¯‘ãÇŸâþýw8p`Z·n¼$ÃQQQ8zô¨H‘››‹-[¶Tú›)òóó±iÓ&FeV‡ºº2¬¬t1l˜ æÏ€={&ÁÅ…ÙŠîLµ‰09L´C\\8Ð @ã¶Ÿ¤œ€¡CwcË–1o^Zh¿ež2!ŠgFYj/I¼ßVgß+"lœJJ—">>¦¦ `,£°Ã˜,JÃhlŸƒ(…¦³¨ÆfƒŒÙÙÙ8|ø°àó¬Y³Ã|a QÉm DG§aýú«ððpnôjsØ¿¿H‘µk×Vú›)rssñóÏ?3*Sœ0Õ&Âä0Ñ111Ø»woƒd²×~ÂÈÏ/ÆÚµÞ6ì7¨©)áÞ½¥X¼x }»J©7aÙ ##={öÄ•+UçR–%;Àd›L™2¯_¿›]ÿ-^^^xúôi¥ïeéšSꆤõѺ@û-ó”ÙˆŠÏŒL Kí%‰÷Ûêì{E„SIi£ÈÈp¹<˜š¶·*ÐØ>QÉgÚF ÓYTc³ÁF¼{÷_uÜ[·n!;;»¡b+!*¹²Ni) œ„©i;xzºŠ[ …""îÜy '§­8wî¶m ~€±±–¸Õ¢P…3f ==]ÜjHñññðôô„™]ªI‘Lh•*>3Rdi§¡¡‰PUUb$ùÅ]IƒeQ(eÈŠl°ƒ1%%Ǹ»»#55îîîxôè $$ß|ó ”••ajjŠÓ§ORSS1pà@?~-Z´@XXΜ9°ÙlhkkcûöíÕʽÿ>lll ¤¤333AÔBUr›2{öÜAxx2öîýVlQL<ÐÐЀ––6oÞ €qâììŒ]»vAGGmÚ´Á‘#G°dÉ´iÓÚÚÚ8{ö¬@NuýCÕõ¸{÷.,--¡¨¨ˆ®]»âåË—Be:túúúPUUÅôéÓÁãIoõ0¦Ú¤:9ih;B°xñbxzz‚þÍ|Íš5hÓ¦ ”””àää„ÄÄD¡ç,Kí÷5©©¹˜;÷8¦N={{C<|¸&ô(Wq’BiLÙ acVØoÕÍ#Êøã?@A¯^½j<Y±L´ÉôéÓ)S¦àƘ8q"¼½½ð—»uéÒ—.]$''ÃÖÖŸ?ÆÙ³ga``€fÍšÁÍÍ­Æ—¿²rÍ)uC}466NNNåŽãîîÜS§NÁØØªªª˜6m¸\.€¦=ç«Î†6äš ›×Ug#¾~f¬éØ×®]ƒ±±1TTT0}út,]º7nܨöe¥½˜7 'Âì{uý¨â8­q·QHH",-u© ]Í“/Y4¶ÏA˜f#«£*Y=z„ùóçcáÂ…ÐÐÐ@»ví°k×®Z_7ÆÇ&©À§OŸˆŸŸ_ů«%&&†¨ªªBùüù3ÑÖÖ&~~~¤¤¤„äååmmm²oß>RTTDîÝ»G444È“'OHBBiÖ¬5jyúô)IOO'JJJäòåˤ¨¨ˆÆ–-[’’’Áw«W¯&£Ftê2§Ñû÷ï ›Í&‡BHPPiÛ¶-!Dxÿ¨ÎÁ(¬Ÿìرƒ >\ð}II Ù²e ÉÏϯtez¦¦¦ ¾spp —/_®õu4#m"LíàççG,,,ȼy󈦦¦@'Bñöö&:::$44”Ÿ@þü¹Êóe¢ý$Í>¤¥å’iÓ]Ýɯ¿z“‚‚Ú½H¡P©û„ {!lÌ ûMØ<¢  €tîܙܾ}›Bjå`lˆ$#mB!ÆÆÆäÙ³g„B|}}‰žž!„9sæùóç}}}B!3gÎ$«V­"Ë–-#'N,§OçÎ…:rÍ ‘<ûÛT©«ƒQ}´&Ç òñãGÁoŽŽŽÄËË«Ñç|„HŽƒQ˜ ­ï56¯f#*>avJ˜FU6²¶ÏäåëV¯^MÜÝÝkå`dÚ~6x‰´0bccÁ¿³gÏ"++ Àb± ££PRRB`` cccŒ5ªÚðÌÄÄD˜šš–û®S§NHHH¨$·©²cÇMdfæã·ß&Š}©¤±±1Ÿ­¬¬œœ,ø¬ªª ““ƒ’’’ Að×z×¥”!¬ŸÄÆÆ–ûMAAË—/‡ŠŠJ•²äååѦMÁgq_Ó†ÂD›ÔFаv ÃÇðÃÐË6lÆŽ èëëcáÂ…øüùsµç+Kíwófú÷ߊððdxyý€Ÿ‰fÍÅ­E†aÂ^³Â~6ذatttЬY3<~üÙÙÙˆŠŠBHHH•ç!Kv€)þ5½{÷Fvv6Þ¿ÀÃù¹¹ˆ…¯¯/†Ф¤$XZZ–ÛÏ¢Z™²tÍ)uC}´6hkk þ.“Õ”ç|5=‹u¿fÂæuuµµ9¶œœŒŒŒª•!KíÕX㦪ë.¬íjÓ„!î6ŠŒLAaa :wnϨ\uuåš7¢4ésf§jòUÕ…ÚŽy###(*þ÷}ú 66¶Ü¿¿þú @ùðööÆêÕ«±fͼÿ/^¼¨öƯ¡¡Q)™{FFš7o^InS$,ì#zˆŸ¶m›‹[Jm•ššŠV­ZÕIF]úGÂú‰ººz¥›â¥K—šL!!&Ú¤¶rÒ¸pávìØüQ°-!;wîDFF¼¼¼PTT„1cÆÔYi"'§žž§1s游XáîÝ¥èÕËXÜjQšLØ acVØoÂæòòòHOO‡§§'<==…³gÏbÏž=Ìœ¸Ô ÿ8;;ãôéÓÈÏÏGÇŽѯ_?;v 999èÙ³'Z¶l‰ÔÔT¡ºP(€húhUäçç׸MSžóÕô,V®™°y6B]]å¾öY–Õ¸©Í8ÖvõíG’«WqPUU‚©i[Fä”|ù«iû$Æô9³S5ùªDAÅ㥥¥A]]]ddžHŒÎÎÎxôèÂÃð³³ÃåË—+m›˜˜ ôéÓòòòxöìrrrª”ëââ‚;wî ::?!æÅ‹áìì,º“‘x<‚eËÎÃÞÞîîÝÅ­¾‡ÿúõëøåÐÿþûo 2¤N2êÒ?ÊÖO\\\põêUÁÔßß“'O†¼<¿Ž··7BCCëzªRmR[9 iUUU°ÙlL:fffX±b`ëÖ­èׯØl6ºwïŽ)S¦"Ùk¿Ç#áì¼ ~~8vlvît‡šš’¸Õ¢4˜°ÂƬ°ß„Í#Ö­[‡—/_ þÙÙÙaÍš58tèÙ³_Ô ¯È!CðÛo¿ÁÑÑпìÞ½ƒ ‹Å€pöìYAD@pp0>|(Ø_–¯9¥nˆ¢*(( ;;™™™øs†¨¨¨÷kÊs¾º<‹}°k&l^W“¨­ÎÞÞÞHKK<{ö aaa‚Yn/&ÆM}lj°¶«k?’´6 ˆ­mÈË3ãú(-•Î"B²Ncú„Ù)qøª…dòòòpàÀ*×c“q£––æÏŸÀÀ@tìØëׯGÏž=áìì SSSXYYÁÝݽÒ~#GŽDxx8úöí ¬_¿FFFX¼xq%¹]ºtÁâÅ‹aggWWWXZZbìØ±4hÓ§#uœ9ó!!‰Ø²e¬ÄDröìÙ‹-Bß¾}ajj }}}Ì™3§N2jêU!¬Ÿ899aÒ¤I°´´„³³3\]]±}ûv¨©©<==Õ4e&Ú¤¶rÒ_³ÿ~;v Ïž=ÃÔ©S‘kkk8;;cüøñX¿~½`[Yi¿¢"~þù2ÜÝÿB—.àç·..–5ïH¡0öBؘö[]æ‘;PLÙðŠ <ÙÙÙåŒÙÙÙ:t(þ½ØÅÅprrÂðáÃËM`eùšSê†(ú¨¡¡!zôè®]»bäÈ‘X¼x1¾ùæ›÷kÊs¾úÚPa×Lؼ®&Q† ‚áÇÃÒÒ...X¼x1lllËÿd¹½˜7õ'ÂÚ®®ýHÒÚèåËXtï^ý2{ŠlИ>avJ¾*}}}¬^½ŽŽŽ055EëÖ­±`Á‚JÛ5ÊØ¬˜¨±®E^¸\.IOO|NMM%>>>$3󿤧‰‰‰ÄÇÇGÀ½:²³³É;wÈ›7o!„ÄÇÇ“û÷ïW+7&&†øøøwïÞÕZßê…$â99…ÄÚú'²~ýU‘£¾Iv ‰¯¯o¹¤©uEXÿ†°~òþý{âããCâããë­Wm€y)ƒ‰6©‹¦Û¡¨¨ˆ<|øÜ¾}›¤¤¤ÔYïº û™Bœœ¶’NV’ ^4ê±)²M}ìöBؘ­i<×v!J$¥ÈKLÙðúLîܹC²³³E~,Y˜ŸÉõéÿ¢è£‡wî¼%ÚÚž„Ëe®*¥2â?µñ9ÔÆNÕÕWU[Y‘k×®;;;R\\L·iÓ®®®å¶ÑÕÕ…®®n²444ʽåÒÓÓƒžž^µrË’ÌRøüþû]ðx.âV¥ÊÊÊprrj aýCÂúIÇŽѱcÇé%­0Ñ&u‘Ãt;())¡OŸ>uÚGZ¸t)Ë—{Á̬îÝ[ ]Ý–âV‰ÒÄaÂ^³5çÚÎ#šLÙðúйsgtîÜY,ǦH¢è£l6½{÷®×¾MyÎW_*ìš ›×Ue#*>3VGbb"ú÷ï .ÀÂÂ@ii)ìììꬿ4ÂĸiÈ8fߥñ^ KvvŒÉ,,äç`d±$cµ å?ËçP;UÑF&''ãÞ½{Õ·sçΰ±±©·ÞŠŠŠ‚(â¤ÁFŠd˜ø>ÀÚµnÐР­(i¤¸¸?ýt §N=ÇìÙŽX½z8äÅ­…B¡P(J£`kk‹þù›7oFff&LLLpóæÍrÕa)”Úòôi:uÒfôù˜æ`¤ÔÇN)((@SS³Úßk*`[011©×¾¢€:e„]»| ¯¯‰o¿í%nU(J=ˆ‰IÜ9ljǧcÐ D¡P( ¥éáææ777q«A‘=Š„££)£2KJJ¡ªJ‹-6uêj§455E’‡ÑÑÑQ""ËiiJ㛎 ^`ñâ`³i“R(ÒÆµk¯1hÐ.°Ù,ܾ½˜:) …B¡P(”––‹ˆˆdôé샱  ªªŠŒÊ¤PdÁ(ìÜéSÓv6¬þkö)JãÃáp±ví=ú³f9bõêaPT¤f™B¡P( …BiG‚Íf¡gOcFåæç—@E…F0R(UAŸd¥œØØt\¾ˆ#Gf@NŽ&š¥P¤…¬¬ÌžýBBé’h …B¡P( …A>|;;¨¨0m˜“SˆfÍh#…RÔÁ(å<ø;¶…‹‹¥¸U¡P(µäÇTL™r<W®,D§NíÄ­…B¡P( …"Bpÿþ;LêÀ¸ì‚‚¨«Ó¢ªJUЄ}RLff>ΜyŽÿý¯?^¤P¤„Çßcذ=hÓFÿþû#u.R( …B¡P( ’ˆ””l8;3„SPP55ºDšB© ê`”bŽ‚æÍUàæÖUܪP(”ZpüøSLšô7 ²ÂùóóЪ•ª¸U¢P( …B¡Pd ŸP¨D IDATèê¶„••.ã² J_vM¡È ÔÁ(¥p¹<œ:õ3gö‚‚¼¸Õ¡P(Bàryøé§ËXµê–/‚Ý»'Òb.Š¢¬lŒ;wÞ‚ÃáŠ[ …"á(+ãÞ½pp¹á¦¥¥5¦”:rï^RSs0aB±ßËËK,ÇeBYY]ž––‹¾34 K0gÎQ<ƒ§cð`ZÌ…"~¼¼¼   Pé{B€ü|ÔÔ*ÿ& q¡¬\¿—r^^^PV6Á´i‡¡¡Ñ C†XcÔ([ôêeyù†ÛÞÔÔThjj6X…"JdeþWn/:bÊ”ƒhÝZnn]1v¬=¬­õÑÍËË nnnŒÈ’FÒ6ñòò¸qã‘Uüªî·”ÚSW»“”ô¡¡IXµj˜Hôùü9††mD"›RžÚŽ.— /ƒæÍEçø--åͦÏÚ_S•ý¬ÖÁøöí[‘+D©?'N<Å!ÖÐÔTËñÇ/–ã~ºº¸ÜlÔ¯¯**jCCà ™™—Àã1¬]㓞žŽôôtq«AùŠœœ"L™rqqðö^KKæ—iP(õÁÛÛÞÞÞ_}#ee¨«÷WˆŒŒ‹ŒS]½9äæ>­ó¾JJúPUµEfæ¤Þ:´n=„” ;Û\nN½d¼}{W®¼Â•+¯pæÌshi©cذ.ps³…A½s"BèÜ‹"ñHÂü¯>ÈÉ)¡U«‘ÈÍ}Š’’ÄZíĽxõê._ÂÅ‹/qèÐC˜˜haÌ{Œk]Ý–õ’ GªÚ‚Ín uõo•u„”6H–¼|shjNB^^òóƒÐ{BcPù~K57o†@EE½z‹D~ffMsÔHÔ4~Ú¢Y3 4kÖ N 23/‹D >PTÔAzº•. 9Bˆd[eJ%RSsag·gÎ|Þ½MÅ­ŽØèÕkÜÝ»ÃÓÓµ^ûþœ—°´ÔÅÑ£3i¡ £dfæcâÄýÈÊ*À¹só``@#“(’GpãF0vïöÁ»wŸ0lXxzºÀÌL›Ñã$%}FïÞ›°rå0̙ӷÎûGE¥ÂÉi+ö완ѣíê­G@@4–.=¤¤ÏX¶lfÌèÓ ·ÑÑÑiðöÂÕ«¯ñþý'´oß#FØbÔ¨®ô……"aLz‘‘)¸{wi­–7DcÙ2/$&fbéÒÁ˜9Ó±Aö"00—.âêÕWÈÌÌGF3ÆÇw†F³zË•¢¢Rá踷o/ipN¼ÒRþüÓ;wÞ‚­­>~ûm"cQÊ1|ø˜˜ha÷î‰"‘of¶ ?ÿ<“&õ‰|ŠpRR²qáÂKœ;€¨¨T˜˜hÁݽ;Üܺ6èÅMU—bÁ‚“ðñ Å®]0fŒ=£òeê`”Bzˆ?þðE`à/`±š¦S¬¨ˆ“åøûï©:Ô¦Þr¢1fÌøé§õzè¥Pª"%%îîÇãáܹyÐÖn!n•(”r4–c±ŒùóO"((¬¨wÞà… OãåËXÂÙy;üü–£S§v ’õûïw±cÇ-\¹â.]:0¤!¥©’ w÷¿ ¦¦„Ó§çŠ-…RíX€×¯ã1tèo8p a/„âã3ЧÏflÞ<–‘¨ÈÈ,]zAA±˜3§–,eå†çÉ"„ ((ÞÞ¯pýúk¤¤äÀÊJnn]1b„-Ú·göí:…B©=çÎ`É’sðö^;;ƒZ¥KÏ!00³g÷Å’%ƒÐ¬YÃs}åäáæÍ`xy½Àóç ¡Ñ #GÚbìX{tíª/S3'§­<ØË– fL&‡ÃÅηð矾ppèˆ]»&@G‡¾ÔmÊìÙs‡?DPЯ"É——’’ [Ûµ¸zÕöö†ŒË§ü!þþÑ8w.ׯ¿AII)ú÷7ǸqÝàìl!Ò‚™ÑÑi˜<ùx<‚“'çÀÄ„¾(®-ÔÁ(eÄÇg W¯ø÷_Ï&í óö‚‡Ç)|ø°­Áozy<‚o¿ý11é¸}{ 44”Ò’ÒÔˆŠJ…»û_ÐÕm‰“'gËü’'Šô Çb£FýBoï –µ|¹üüÂñøñ*F&–„œ8ñ ›6]GË–*غu;5Xn\.Ïž}€·wnÜFvv!ìí àæf‹aú MuÆŽE¡PjÇĉû‘”ôwî,…’Ríí!§N=dž ×Тß^ôíËœ½HJú oï \¸ðïÞ}‚&F¶Ãرö2±xö죀ƒ§1.;((žž§‘ššƒuëFcüønŒƒ" ° ={š`ãÆÑ"‘’ˆwâÉ“U´Ð‹ˆˆM‡—× œ?ÿIIŸam­‡ñã»aÄÛF Üð÷Æôé‡adÔG΢Á"u„–Á‘2îÜy -- ØØ0S…NZ‰ŒL&#ËHX,9ìÝû-ŠŠJ°dÉY´£4E""’1zôï06ÖÂÙ³s©s‘"ðxׯ¿‹ËvÌ{ ;¶ÃÝ»K±ÿ”Fq.Þ¸Œ€€Æ"îüÑii¹8uê#òäää0eŠí7·®¸wonÝZ„3ú4Š£ÏÛ;îîÁÁÁ.ü@‹õ€F0J'nKìØá.nUÄÊ÷߇ÃÅ‘#3“ùøq$&NÜõëGcÚ´o“K‘}bcÓ1jÔï°²ÒÅ¡C3êA¡ˆqF,–ÁápÑ·ïØÚvÀ|ǘÜ_~ñÆÕ«¯ðôéjF–(~O(V®¼‡‹_~‰±cE“Ì»¨ˆƒ;wÞÂÛ;¾¾á è×Ï nn¶puµªU …RNœxŠU«.âêÕ…°µ­ßŠ ;wÞbÅŠ (*â`íZ¾½`zI3—ËãGïqñb nÝ AII)œœÌ1fŒ\\,IëÐX\ºˆ<ƒ¶‰déjÏž}À?žA^^6o‹áûˆìXÉbáÂÓÿˆÛ·—ˆìeý8.n‡ÈŽÑTàry¸ÿΟ€O(X,9 b1cìáèh yùÆ…Û³ç¶m»‰9súâ§ŸF4ÙZ …:¥ˆüübXZ®ÁþýS0hPÓN*Û¿ÿ6¸ºZbÅŠ¡ŒÊݾý&þüÓ×®y2’ôŸ"û$'gaĈ½04Ôĉs¨s‘"V$Á±XÆÁƒ°iÓu>‹ë=ÎòòбeË¿8zô1:bÛ¶q"[ΜŸ_Œ[·Bpñb =zUUE ÚcÇÚ£G#‰.[ZúðáJ‘ç3ËË+ƺuWpêÔsŒÑ›7E‹*"=&E¼¤¤ä {÷uرÃãÆ‰n‰üð÷ß÷ø‹ÈŽ!넇'ãÜ9\ºˆŒŒ|ôèa„ñã»aȱ¤*ãp¸X¾Ü ^^/h P£áçï¾;€°°MzùeII):v\Áh%º2¸\Æÿ©©¹¸ysÔÔ”•O‘-22ò0|ø´n­†óçç1ME¡ÔIr,@vvzõڈɓ{aÕªaŒËß¼ù_œ<ù ÏŸ¯ººh&£/_Æ`Ù2/ÄÅe`É’A˜=»¯H£n~ÅÂk×^ãêÕWð÷†šš2î 7·®èÝ»c£¿Í§Pd™øø °S§~ƒ5k†7HVPP–.=‡˜˜t,Z4sç:‰Ô^¤¤äàÊ•W¸páBC“ «Û£FuÅØ±ö05mXñCQQXXSÓ•øë¯)6¬þ¿ê‚Ÿ_/> B¶ow‡³³E£—ÒølÛvgÎE6(,,Á¸q¢°°—/{Ðâ@± iŽÅ2Ö®õÆÅ‹xútµH€eÌï¾sÀÊ•ÌF² ‡Ãž}÷°wë`×® vm““³põêk\¹ò ¯_Ç£uk5 báû W/cêl¤PàÔ©gX±â._žßàŠ°û÷ûa÷îÛ01ÑÂîÝai)úÕ0ïÞ}Â… /á턤¤Ïèܹ=ÆŒ±‡›[WhiIV!)GÇÍ:ÔË—i´cfg`͚˸xñ%&Oî…ŸIdŒ¢"ìíŬYŽðôté±fÌ8eeüù's©_d•’’Røø„âüùÜ¿ÿªªŠ1ÂcÆØ£{wCÆSJÔ•¨¨TLz%%¥8ztf£Øë¦u0Jnnüo6ˆ¦*–´pî\V®¼€÷ï·ˆìí°¯o8¾ûî vì‰{Šäé…ËåaæÌ’ˆë×B[»…¸U¢41$Õ±ðs’öí»ëÖÂÔ©¢[fràÀlÞ|¯‚®.sK°«"22‹App"<=]1þ‘FHT$66W¯¾Æµk¯ñöm45Õ0t¨ † 낞=¨³‘B©'„L™r>¤áîÝ¥Œä?ŽNÃâÅg‹ùóáééÒ(©x<‚çÏ?àÂ…—¸qã òóKàèhŠ1cì1p TUÅïT›;÷8 KpìØ¬F?öµk¯±r娫+cÏžIèÞݨÑu ˆ†£GŸ`ݺ+xñâg´n-Ú¢®®;ЯŸ™HVgÈ ±8w.W¯¾B~~ úõ넱c»aà@+‰Éûðá;|ÿýq˜˜háðá÷2Fšù?{÷ÐDº`ø¥Vìb»¬« `b€u­ka]W{ÇŠ»kï P@ÄvQlˆ ‹ (’¹?X¹º6PÈ$0ÏŸ»—„™ƒ™L&gÎwŽ”`T©© ªWŸˆ‹Kï,_¬nfÎôâÒ¥‡øû;fë~æÍóaË–3øù9P³¦j.7‘ˆcæL/\]/áé9 CCñ:’ÜC•‹ º»wŸsâÄ„l]"øaˆŒ‰I%¥T›Ëå 6m:ÍÂ…~T­ZŠåË•Sô_¾âС´dãíÛÏ(Uª]ºÔý7ÙXUåû°I$ªæÅ‹8Z·^D·nõpv¶Í’m*Û·Ÿcþ|Ê•+ÊÒ¥½05­”%ÛΈ¤$GÞâÀ+ÜAGG›Îë`cc&j»…Õ«O°mÛY®\§Ý«Wo;v'O†aoßš :K}nÕ\rr*ÏÅʪ3ftËöýýòËT&MêJÿþM²}_êäéÓXÜÜ.ãî~™ÈÈ×–¡GXYÕC_¿°Øá}bÛ¶s̘ᅅ1..½¥þùYLJ0ª‰;w¢iÓf“¨^]_ìpDeg·†ŠK°tiöNÒ–É䨨¬!>þ=‡;Hýõ$¸¹]füxWvïN³fÕÅG’K¨Cbàòåºu[ÉŽC•ÒÇÆÏï:C‡nÃ×w ÆÆ?6 6³""^á踫W1rd[ÆŒé ÔjÆ=xð2=ÙM©R…èÚÕ c4Pý¡‰ª8xð#FìdÏžá´lY3˶õ&¸qæÌ]†mÉ„ •~=“€·÷5<<‚ ~„¾~a¬¬êakk¦ô›$§NÝ¡oßõܾ=OÔ¡+{ö\ÄÉÉ‹ò勱re_i°£Û´é4 ørñâtJ”ÈÞêÅ„„djԘĮ]ÃhÓÆ0[÷¥“ññ ÅÕ5ˆK—R¼xºw7ÅÆÆŒ:uÊ‹ÞgRS̘áÁöíç™0¡3£Fµ}™vN$%Õ„»ûe&OÞOx¸s®_ õË/S7®ƒ7Ïö}=yK‡KèÔ©..½²}Õò˜îÝW3}ºƒeÿñ'‘¨KbÒ–š›/§@¼¸¹ý¡´ýZY­BC<=ÿRÚ> ­[ÏàììKÅŠÅqq饴ç×Ü¿ÿoïkøø„rçN4úúztéb„¥¥1õëW–’ÉwØÛoçòåHNžOáÂY—ü7·ËÌœéE±bX²¤'MšT˲ígFDÄ+öï¿‚§çU"#_S«VllL±¶6¥lÙìo÷òâEõê9áæ6Bô›´Ç0fÌ^‚ƒ#;¶#F´ÉöA^’¬õþ} Í¥gÏJY²ü¡à'»æ¨…Bàܹ{¸ºáçw…B cÇ_±µ5£U«Z¢Ýpýž¸¸w ¾ƒ+W"X±¢]»*gÐTn$%ÕÄœ9Þ\¼ø__±CÕ³go03›Å#iܸªRöyäÈMÞªU}éÞÝT)û”¨ž×¯èØq)-[Ö”’Í’l§N‰Å¼¼®2rä.ŽÇ/¿”UÚ~CBÓµër6nH—.u•¶_Hû‚:vì>.]zˆ½}kÆŽí¤KmîÞ}ΡC¡øø„þœÒ¥ ÿ[Ùh„™™”l”H¾äÍ›w´jµ€æÍk²jUß,ßþ‹qLš´Ÿ£Goѯ_c¦NµÈ–!X!ÁÁ‘8ÌÁƒ×ˆOãÆU±µ­OçÎu³up]:Óùë¯v Ö2Ûö‘Q …Àúõ,Zäǯ¿–gåÊ>T®\Rì°$´víIV¬8Æ¥KÓ•R{üømú÷ßÈýû ³¤_«:¹ÿ%®®Aìß…/â055Àή>––Æ¢V#gDDÄ+ú÷ßÄ»w)lÛö»JVWæ$R‚QMH«Ò;v‹6q玳R§öΘáÉÞ½—ð÷w¤jÕRJÛ¯D5‚À€›ˆ‰IÀËk”ÊÞ“¨?uL,BZ¤æÍçÓ´iu–-ë­ôýÿùçN®]{L`à$¥¿?A`çÎ ÌëM™2Epqé­Ô^kßþŸ åîÝç”)S„®]Ó¦Q›™H˃$’|H lÚ4(ÛnXxy]eútOtuµY´¨‡èK-SRR9uêû÷_áØ±[hjjÐ¡Ã¯ØØ˜fKER¯^ë(]ZåËûdévFxøsþúk¼bútK h"U\LLM›ÎgèÐŒÛI)ûܾý‹ææÍ¹JÙŸØÞ¼y‡§g0®®—¹~=ŠråŠÒ£G}¬­M©VM=¾Ÿ={—aöS¹r ¶l¬rý s")Á¨&Ú¶]L‡µ™8±‹Ø¡ˆjùò£ìÛÄŋӔº_™LŽ¥å RSøøŒQ‰ ‰òl؈‹ËŽG… ÅÄG’©kbñƒ5kN°lÙQΛ"ÊÅÛÓ§±4k6Ÿ)SÌ:Tœª˜'Ob?Þ5½×Úĉ]TfZâwîD§÷l¼ÿ%eÊÁ܉9s¬éÕ«¡Ø¡ˆjРÍäɣņ •¾ïGbèØq ÖÖ¦Y6eP¢únÞ|J×®ËXµê7,-ÅG’è{bÒ¾(7i2aÃZ*­ŠàKæÏ÷a×® œ??U´/ê‚ àê„““Å‹ÂÅ¥ V%–ï û²ñÁƒ—”-[ cÌÍ11©(%%¹VBB2íÛ/¦jÕRìÜ94[ß GŽÜdÒ¤ý‚‚ùóm•Þæá[ž<‰eÿþËxxsÿþKªT)‰Ý»›R©RñÞîÁƒ×øë¯]„‡;«äÅ«W1jÔnbb™7¯»ÔI……EӡÖ-ë­­™ÒöÛ£ÇßgÑ¢JÛ§²\¿…«ëe<=ƒ‰OÓ¦Õ±³«OçÎu(P@Wìð2E&“ãääŶmçpt숣céšF‰¤£xÿ>…ªU'J«cã ÖŠ#Úˆ²oïìí·³nÝ)Ù” Èdr:urÁĤ‹缋 ‰xrBbñƒ©S=ðó åìÙ)¢^„¾}›DÓ¦ó°²2aölkÑâxþ<Žñã]9uêƒ5gòä®*ݯéöígéÉÆ‡_Q¾|QÌÍ077¦^=)Ù(É}‚ƒ#±²ZÅìÙVÙ>Ô->þ=3gzáævss#æÎíNÉ’ÙS9ù£BC£Ø¿ÿ ^%&&33lmͰ°È|ÿµÈÈ×4i2oïQ˜™UΦˆÎû÷)Ì›çÃÖ­g177ÂÙÙ–bÅ ˆ–ä_=z¬åýû¼½G+õó©^½™üùg[† i¡´}f§/âØ¿ÿ ®®AÜ¿ÿ’jÕJÑ£G¬­M(W®¨Øáý˜˜† ÛÆõëOX¶¬7ææÒ0e“ŒjàÑ£7ž‹ŸŸƒèS*ÅýSÓY¢Ož›Ž£ã>RSå,ZÔƒ~;¤\ïðá ²oïÑJíw÷CéìÛgO‹5•¶ß¬–”$ÃÏï:®®Aœ;w=½|X[›Ò½»©Jõþ7n>c¤9TXX4;»°}ûZ¶Tß ‰jÈi‰Å† Ùʃ/9~|Ýw÷ËØÚš1gŽ5… ‹ß/37JHH¦eË´hQCéå‚‚beµŠ«W(]Z½…‚À¥Kqu ÂÇ'”””TÚ´1Äή~¦n ¨2`Æs¥Aƒ*¬[×_%zÚæVR‚Q œ={=Ö*}r²ª™?߇#Gn8IìPˆˆxE§N.ØÚš1ožØáH²Ý*T(Ž‹K/±C‘¨±œšX¸|9‚nÝV²sç0Ú¶Uö·o?£S§¥8;ÛÒ·oc±ÃIwàÀ¦O÷¤H‘ü,]Ú‹Æ«ŠR¦Ü¸ñoï||Bxô(†Š‹ÿ›l4¢n])Ù(É™"#_Ó¾ý hÊ´iJÛï¥K;v¯_¿eútKúôi¤7L¾æùó8<<‚9pà aaÑT¬XÓ¯N›]²Ä`ΟŸ*B´?æØ±[L˜à†††‹õ ]»_Ä)×™6Í/¯«œ>=YéKÖwíºÀܹÞܹã¬ÔýþŒÈÈ׸»_ÆÍí2OŸÆR·nzô¨¥e=J”((vxYB.W0wî!Ö¯ÀÞ¾S§Z¨Ä ïÜLJ0ªãÇoÓ¿ÿÆ\Ÿ`ìÑãoÊ•+¢ô;V_sðà5þøc7¤kW©¿CNâëÊØ±®\¸0•¢E¥ž;’ÌËɉEH»ni¹‚|ùtqsûCìp>3kÖAÜÜ.sæŒò¿„|Ë‹ñL˜àƉ·<8­7£*9øžÐÐ( ÁÇ'”Çc00(¹¹ÆÔ©S^ìð$’,µwïEÆwÃÕuM›*¯ÍAR’Œ%Kü„Û© IDATÙ°!€Fª²dIO*VTý•LaaÑÿ‡¹Ê‹q˜˜TÂÆÆ++“ôkªcÇn1pàfnÝš«V•FoÞ¼cÚ4<<‚éÙ³³fYçêïfÊüˆnÝV°lYoììê+}ÿ3fx…·÷(¥ï;3âã“ðö¾†«kÁÁ‘èëÆÖ6m8“¡aθý 66{û\¾ÁÒ¥½°¶6;$ R‚Q-;v‹6µ4×fä _~™Âĉ]4¨™Øá¤›4É/¯«92.W/_ÏI’“SiÙrC†´È1Mœ%ʓӋx{‡0bÄvTÉ„Rbb2Í›;ÓªU-•¬Bvs»ÌÌ™^+V€eËzÑ jNšÎˆÇøø„rèPQQÿ``P c,-©]»œØáI$Yâ÷ß·pýúNœž^>¥îûڵnj·Gb˜4©+ƒ7GSSu«?P(뇻ûe¾‘¾,ÓÖÖŒzõ*bf6›½{íÕ² ¿ÿ &NtGKK“¥K{Ѻu-±CÊÑ> ],Y²{÷¥š·W¯u”/_”%Kz*}ßß#—+ÇÍ-ˆ#Gn¢©©A—.u±±1£E‹92öŒÁƒ·šª`Ë–Á*y-š[I F5àí} {û<{¶LìPDóàÁKš7wÆ××A¥šÌ''§õcÔÒÒäСÑR?Æ`íÚ“ìÞ}‘€€‰Òë)ɰܒX„´>´-[. Aƒ*¬XÑGìp¾ÊÇ'”á÷ãåõõë«Þ¤Ò'MÒ‚I“º’7o±Ãúa‚ …OÚ4ê'Ob©\¹$FXZÖS‰¡;ÉŠM¤M›E4iR5k”ß7P&“³bÅ1V­:Ž‘QE–-ëEÕªŸ/=VU‰‰É>|w÷Ëéýe29ÖÖ&,ZÔCìð~È?ÿ$2uê¼½CèÕ«!NNÝ(THªfÌË—eåÊãœ<9A´›uêLÇѱ£Jº„…Eãêz `bbiذ =zÔ§K£]Y{èPŽŽû¨[·<6 ¤xñœ±Ü;§ŒjàÃ鈈ÅèêªÖ±ÿÆŽÝÇýû U.éóàÁK:wv¡GÌÛ]ìp$?!!!™† ç¨ìôF‰êÉM‰Å6ldÁ_ΞBÙ²ª9|àƒ¾}×óüy˜šˆÒOk×ÿ›l åéÓXªT)™^Ù(Mv”¨£ÀÀpúôYÏêÕ¿‰¶/,ìûfìØNØÛ·VÙsÛ×¼xÇþýWXµê8ññI”Àή>ÖÖ&¢%~†¯o(“'ïGGG—^j=aX……=£S'¦L1gøðV¢Äðøq ÍÅÏÏccq ]^¿NÀÃ#W×K„…E«ýû'3 … ýX½ú6ÃÉ©›Êå$ åäää$v’o{øðžžWùã6¹6Á¸gÏE ýú5;”Ï+V€ Š1ož††e¨^]_ì$?hݺ""^±`Z,?’ˆG¡ðõ½Îˆ;ؾýWcíÚ~ ØŒ% ‰^¶‰‹{ÇСÛ4¨9]ºÔ;œï255`ùò£ä˧£’UŒ¿þZ3‚‚²páa“iÔ¨ªÚ% >¦¡¡A™2EhÙ²C‡¶ ukCRSåxy]eÍš“xy]#&&bÅ R²dÎ}¿HrƒÄŽcåÊcXZÖe’pÉ’…èÕ«!ººÚ,]êÏ‘#7133P«÷QÁ‚yiР šššÜ¼ù cöî½ÈêÕ'9{ö.©© JªÍwž5JÓ£G¢qvöåÅ‹87®–#&óŠM&“Ó·ï*U*ÁÂ…â]›ÞåèÑ[Ì™Ó]”åÆ))©øù]gî\o&OÞOpp­[2k–53fXÒ¸q5µêeú#âãß3tèV<<®²dIOFj—#—~çR£¸té!ÖÖ«¸ys®J5«W&sóåUPé‰Í&¸áíÂÑ£cÕ¢ ·äS‰‰ÉÔ¯?›yól¤&Á’¯Ê‹›=û îîW8~ªÚ,[ºôëÖâôéI”)£º—‚ °wï%fÍ:ˆ¾¾Ë—÷ÁĤ’Øae)AŽäСP||B‰Ž~Cµj¥°´¬‡¹¹Q®yIÔWrr*]».#_¾|ƒþý›0mš èŠ–Ú yŒ¥å fͲýš£{÷Õ–eÞ¼ìo…õôi,nn—qw¿Ldäk ËУG¬¬ê¡¯_8Û÷¯jöï¿ÂĉîU`ݺ”*¥>ÕÚ¹•”`T/_¾ÅØx^^©õ¤Éuýz:¹8Iå—?|øŠ.]\°²2aÁ;±Ã‘d ´n½ cÆŽí(v8"%ÿï?vpãÆNR¿HgÎÜ¥W¯ulÚ4ˆÎëˆÎw ‚ÀîÝ™=û eËeùòÞ¢÷}ÊN …À•+é•/^ÄQ³fiÌͱ°0¢F )Ù(Q-»v]`òäýìÝk¯UjÇ0nœ.Ügذ–ŒßY-*œZµZHûöµ™:Õü‹?y‹»ûe<<‚yðà%Õª•¢GX[›P®\Q%G›9^^W™2åzzùpqéE“&ÕÄIm$&&Ó±ãRÊ•+ʾ}ö¢Lþ@.WP³ædœm±³«Ÿ-ûHLLÆÇ'W× ô¤z÷î¦ØØ˜åÚéÈ))©ÌœéÅŽç±·oÅäÉæjÝ:&7‘Œj@&“S©Ò86m¤=¯²ÚŽç™;×›;wœÕ¢/އɥ«Võ¥{wS±Ã‘dÀùó÷éÝ{AA3Ð××;‰ ‹Ÿºví1ææËÙ¸q Ú~ëʉ·˜¤6½Šž<‰ÅÑq//>`Ĉ68:vÌñÕñ …ÀåËx{‡àçÊ‹ñÔªUsó´iÔժ徕Õ4tè6®\‰ääÉñ-*~ £mfÏ>H‰…X²¤'U;¬orpØûoÅÖˆï>788«xzÿž&Mªacc†¹¹‘ÊV¾zõ– Ü8zôýû7aòdó=Ý7«Œ³‡ãÇosâÄxÑ«öžѶmÖ¯$T(뇫k~~×Õ¶-@vxú4–¡C·ñàÁK–-ë­¶×¹•”`TÆÆ35ª=ƒ«Ï²´¬’™‹U1s¦»w_ÀÏÏAª¼PcÆì!&&;‡‰ŠDdRbñˬ­Wàéù—È‘ü¸øø$Z·^H“&ÕXµª¯Øád˜ ÿÞh;D… ÅX¾¼·Z,Ì …@PÐC Á×7”—/ßbhXsó´iÔ¹±mŒDuÄŽ£}û%–eÛ¶ßE­²úØóçqLœèÎñã·éÓ§Ó§[ §—Oì°¾hÛ¶s,XàÃíÛó3\D “É9y2 7· NœCKK“Îë`kkFóæ5Trðƒ§çUfÎôD[[‹ léÐáW±CRY^^WùóÏ]lÛö;íÛ×;öî½È¬Y3uŒ~Ëýû/qu bÿþ+¼x‡©©vvõ±´4V››ŸÙ)00œ#v¢¯¯ÇæÍƒ¨\¹¤Ø!I2IJ0ª KË•W`ölk±CQº6mѦ!Ó¦YˆJ†ÉdrllÖ÷??•½³*I+Á¯[w:³gw§GìYú Q}Rbñëüýoðûï[ññ£6½½¾æäÉ0~ûmÛ·Q‰/.™ñøq ŽŽû zÈÈ‘íppè«* ‹àゟßõ“eéÖ­VVõ¤ájQ\ºô[Û5ÌžmÍ AÍÄçÞÞט>ÝMMMæÍë®’U@¡¡QtîìÂéÓ“¨:ùÍ›wsçf¿ÃŒppØË«WoÙµëNj޼y‡§g0®®—¹~=ŠråŠÒ£G}¬­M¥ªü)Ë—ÅÅåVV&,^܃|ùtÄKò¤£šøë¯ÝÄÇ¿gûö!b‡’md29ÁÔ­[êÕõÑÖÖ$11™Zµ¦ð÷ßý177;ÄLyöì ;.¥yó¬]Ûï³ÇSS(Š¿ÜMÕ9r“á÷sýúiÙJ.$%ÿïìÙ»”/_ì“I©© Z·^HíÚåX·®¿ˆÑe‡½„0Â…Õ«Z@¶m;˼y>TªT‚+úðë¯åÄKéär/>ÄÇ'm@LLL&&•èÖ­Æ”.ûáKijtéV¯>ŽŸŸ††eÅçoÞ¼cÖ¬ƒ¸¹]¦cÇ_™?ßF¥Þ2™œêÕ'±hQô›¼ÑÑo¸~ý %25ì)2òuz¿ÆGb04,KÏž èÖÍXôe¶;uê“&¹óömNNVØÙ™©Lõ«˜d29Ý»¯âý{¾¾*3ܬ~ýÙ Üœ?þh©ßûPi»oß%Nž CGGss#llLiÒ¤ºZ´ýR–ØØDFÚÍ™3÷˜9³›Êݬ‘dŽ”`TË—åÀ`Μ™,v(ÙªlYtt´©U« •*ÇÇ'”={†Ó´iuµkîp‡~ý62gNwlšþó§OcéßcÇvTÉ;Ê¹ÉØ±®DG¿aÏžáb‡"Q")±ø¹Aƒ6säÈMìí[1fLôôò±mÛ9œœ¼ œD¥J9£B,.î­Z-¢eË,_ÞGìp~Hdäk÷ɨQí5ª}®ªfüXjª‚3gîrðàUüýoL£FU±´¬‡¹¹ÅЉßO’³Éå lm×ûŽÃ‡T²êæìÙ{L˜àÆ?ÿ$0eŠýú5V‰¤ÖóçqØÚ®¡xñ‚( CHHoÞ¼`÷îá´n]+ÓÛK—rà@0‡]#11…–-kÒ½»)]ºÔU‰á7‰‰É8;û²mÛYš5«Á¢Ev¹¦ {ÇŽóUÀÈèÓVÎξlÚtG•êùš&Mæqôè¸ ßÌ»~= W×Ëxy]%.îM›VÇÖÖŒ.]êJ+Ú¾ 44Šá÷#—+X¿~&&•ÄIò“¤£š8vìƒmæîÝäϯz.Y¥E gîß™þÿut´þ­ôÒ“Žuê”§U«štíªK—ú³råq¼½GcdTãÇoó矻xûö=––Ƭ[7@ìsµÆçÒ·ocFŽl+v(%‹_ײåîÝ{¶¶&yóêðçŸmÙ¼9îÝMqr²;¼,uòdýúmdÆjóYò_ …À–-gpvö¥J•’¬Xч_~Q­ê)eKIIåĉ0¼Æ±c·HM•Ó¬Yu¬¬LèØ±ŽT¥.É6OŸÆÒ®Ý,-Y¸ÐNìp¾()IÆ’%þlØ€‰‰K—öTzÓ;w¢ñòºÊµk¹yó ±±ïÐЀ¢¢þÁѱ#C‡¶üæÍ¢Û·ŸQµj)•©îË,…B |yG€OZ•œ={^½þfÁ;~û­±˜!~bçÎó,XàÇs¾y¬¼xÇþýWps»Ì½{/¨V­vvõéÞÝTå§‹i÷î L›æA£FUY½ú7Š/(vH’, %ÕÄóçq˜˜8áí= 3³Êb‡“m†ߎ¯o( Å·Ë3ºaoßJ9Aý$¹\A¿~¹wï9;ÖaëÖ³hh¤}È(—Û·çæÚʱEEýCÆsðõuPûÞr’o“‹ß&—+¨Zu"))©é?ÓÔÔDO//³fYak›ó–pMž¼oïNžœ ÖÓã#"^áà°k×1zt{FjÿÍjÿW¯Þ抾_‰‰É;v OÏ«†£¡mÚÒ­› :ÔV‰*&IÎâëÊСÛX¿~Æb‡óU7o>eÜ8Wî܉fôèöŒÙö«×¡‘‘¯ ŽÄÆÆ,Köýøq Íýîó´´4ˆˆX’¥+—^¿NÀËë*û÷_IïƒgccŠ­m}QûàÉdrÖ¬9ÁÊ•Ç10(Á‚¶4hPå³çÅÆ&R»ö4 jμyªÑŸ0³Ž¿MÿþÑÐÐ@CæÍ³Á˜¶mS¿¾6 ;ÄOØÛoG.ظqàg%%Éð󻎫kçÏß§P¡¼X[›Ò½» ¦¦JU$%ɘI–™ÌªUÇIMU|õ9eËáÊ•™Y²¿/¹{÷9îîWðô æÙ³7WÄÎÎ KËz¢UQEF¾fÊ”†Ó«WC¦M3§hÑ´‚ ЯßFNž àС1jùyüÛo ¼‹\žö=OCCƒîÝM¹{77·*ÕYêÔ™Îøñ0 iúÏ.]zˆ«k¾¾¡$'§Ò¦!¶¶f´o_[꫟¯6l;OŸÆ²re_ÚµûEì$YLúF­F4¨BPP„Øad«Ê•K —=ç-—+X°ÀN­’‹Ç߯ÆfmúP—åÉ£…¿ÿ ‘"“„…ES½º¾”\T3/> uë…†õ9 …€O(íÛ/ÆÞ~;Õ«—æøññ¬[×_J.~AXX4_ʯ ‚€ À­[O±°XNÿþ›xõê­òÌùòé°jU_λǶmgÅç§hjj0lXKŽ®n:v\ÊÊ•Ÿ_¶ì(2™œÞ½ÿæÖ­§"E«|… ç§W¯†ìÛgÏÕ«NL™bNTÔ? ¸#£ŒëÊÙ³w‘Ë¿žðøé~½ÀÉÉŠŠ‹co¿™ìË7ËU¶¶&öö­8yr%KêÑ­Û ¦Mó !!9ý9iÃR^£¡lâõë„,Ù÷È‘m)V¬ šß¸ôÊîŠÂ5J3uª9AA3puýƒš5K3¾/&&N ´™C‡B>©èWƒìÙ3œ¿ÿîÏÉ“·iÞÜ7·Ë‚Àߟ" àVl1räN’“•ßÏzöì wÒ“‹vÞôð¦bÅ*×»4,,šþI¤Y³êDF¾fñâÃ4l8‡îÝWÍĉ]vbëÖßéÚÕHJ.f€‡G0;.E[[G)¹˜Ci9999‰„$c^¼ˆÇÓóšÚ, þ ÉìÛwé‹ikkѹs]þü³’£ú12™œ¹s1}º'2Y꿸(ÇboßZ­«gÔÕúõTªT‚Nꈊ$ƒNœ£ÿÈå ž?OŸ:ùB!àë{#v°}û97®ÆÚµý8°%Jäüe¡?ÊÇ'”Ë—#¿š`ùжÂÌÌ++ÑûVe•ÓT/ö§kWõR´hzöl@¾|:,]êϱc·¨_¿2%JäÑ£FÚƒB! ¥¥ÉÁƒ×èÚÕˆ"ET§bD Ð¥^½ŠôîÝ^½P¤H~NŸgÍš“ìÞ}'Ob)T(/eËÉðç²L&ÇÎn-¦¦j I~޶¶&MšTcÕªãÄÄ$Ò¦¡Ø!}S‘"ù±µ5£|ùb¬[Àž=©R¥$E‹æ§oßÈd2RRä\ºô[Ûú?}S6O-Ê•+ŠÏõ¯>ÞªU-Ú¶Íþ䃆†•*§S§: Ò‚jÕJqýzÿ}Š-[Îòøq EŠäÏÔùàgÕ¬Yš>}“À¢E‡ñ÷¿§çÕôÏaAHLLæÝ»ZµÊü±lØ@PÐÃ/¶Ázøð5gÎÜ¥sç:*Ó¾bïÞ nÜxBPPóæùððák¬­MX°À‡˜˜TÊÑs²Òû÷)L˜àÆ’%þ Ø”¿ÿî/}Væ`Òi5rãÆ:v\š%MUÕ‡^“_¢££Í¹sSÔ¦Yîܹ‡X»öd†ž«®KÔ©é,† iÁ´;Ix{_ãÏ?w¡P‚€††§NM FÒÒRèŸ4|øv||B¿R…•Ö+i„ΌÝ^é±e7¹\ÍÞ¾}¯¯ƒÊ|¹ùY÷ï¿d̘=ÿö[ëDHÈc޽™^Õ¨­­‰¾~aüý¥ÆêÀǯðòºŠ·wwï>§|ù¢XZÖÃÊÊä»ÓCÏž½K°tiOz÷n¤Œ%*ÌÓó*#GîbóæAjsóõëfÎôÄÓó*+çÙ³7¤¦þ¿ÚLKK“þý›0ožM–ì¯{÷UG"“}¾ºgÚ4 †m™%ûù/^Äqà@0\!,,ƒØØ˜bcc¦Ôï`gÏÞ¥ÿMÈdòÏnjjjàåõ—ZôæOMU`bâÄë×__¡­­EÑ¢ù9tht–LÔ~ñ"Ž  ˆLõC•Ë„ãæ–¶ZCCƒnÝêѽ»)-[Ö”V<ý€°°h†ßFLL"Ë—÷Nì#ɹ¤ F5R²d!vì8GÙ²E³¬Šª)X0/«VøìCTKK‡tèð«H‘e^óæ5(V¬çÎÝKêò%yòh¡§—Oêèd‚ 0oÞ!zõj@ÍšRJÕíÝ{‘1cö"ÿ_Š˜'ïÞ¥ “É¥ŠÅŸäììË›7ï>û¹¦¦šš¸¸ôæ÷ßsfÿ_MM Z´¨ÉߟâéÓØsñ[¬XZ5£®®6+WçöígŸ|)II2NŸÇÆÆ,×÷!,Z´WcàÀftî\  aõêxy]#66‘R¥ô¾Xu±qãinÞ|‚B!pìØ-ÂßӲeMtusF²Z’y††exþ<ŽU«N`ee‚ž^>±Cú®üùuèÚÕˆ¼yuðñ ùìºUBC£(_¾èw“îadT‘;ÎñßûZ …À AÍ”>áúc æ¥~ýÊ ДNêœ,ÃÍ-ˆU«NŽ\® bÅ♾!÷Ž”y†¦@ ‚À”)ˆŒŒùâêMMMΜ¹K¿~MÐÖVíó÷‰·Ù»÷â7Ÿ“V™™Âǯ°²2ù©ŠÑcÇnÑ©“ >>¡ŒÛé»Ï ‹fÍš88ìe÷î‹*”çÏß°zu;P¹rɳrC™vî<Ï![©R¥$nn#02ª vH%ÒðjDSSƒ6m 9qâ¶Ø¡d« >­PÔÔÔ¤ti=FŒP¥Ñhhh0xpsNšˆ±q¥¯~0Édr¼½C”$6ö©© ©D_ lØȸqné•‹Èdr\]/1|¸ÔcñgÈdrž<ù糟kii¢££ÍÎC?[ŠžÓ”-[„+ú°{÷E¼¼®ŠN–ÑÒÒdĈ6T©R-­Ï?ƒd29·oG3lØöŸê?˜ÓüòKY&OîÊ… SññCëֵصë-Z8Ó¾ýÖ¬9ATÔÿß3‡ßHï·'päÈMZµZÀ•+9»o¶äÛf϶¢lÙÂüñ‡j÷cüXJJ*»w_øj¥– ŒïƵkz_µj•aèЖ_LŽ©ÒJ­ÚµËáädEp°;v ¥B…¢Ì˜á‰±ñL†ßΑ#73üúúú^§V­ÉG~÷¹ÿ}ŠÀÀðOªH?&—+xöì Îξ™ùsD±mÛY4¿ÑtSKK“bÅ àâÒ‹;†þp2/%%•iÓ<8psz_éÈÈ×_|îë× lØHÛ¶‹iÛvGÞbÀ€¦œ;7…þý›7¯:©Oa‹*‰ÏðáÛ™2å#F´aÿþ?Ó[ÒHr>)Á¨fÚ·¯ÍéÓwILLþþ“ÕTµjŸN†U(8;ÛeènŸ*20(—×_̜٠í/¨yòäÂß‹]îõÏ?‰R•›Š[²ÄŸY³~u€‚¦¦&¿ýÖXJ,þ„û÷_~6 D[[“Â…óâåõ—ZõxúíÚý‚½}+&Nt'" çú² IDATâ•Øád_ßë\¿þä«[SSåÜaêÔJŽLõihh`bR‰Ù³­ vÂÝýOêÕ«ÈÚµ§hÔh.+X¾ü(ÏžÅ~ò{2™œW¯°¶^ÅŠǤäm.•/ŸëÖ ,,š T? °víI¢¢þùæ1+  Èš_ÑÓÓýäº_CCC¥ŒhiiÒ¶­!kÖô#$d6 Úñúõ[~ÿ} &&NLêAHÈ·¯ ¬¬V²råñ¯®nº|9‚¹s}õñäò´iàAAìR‚§Oc ÿâ1¥­­Ež|»Ò'ˆf™LάY¿9­ÒÞG;w^`õêÊ L ijjдi5-êAHÈ,vìJåÊ%ÿâòr¹\\.°xñallÖðüyœQKÄV½º>Îζ¬[Àñ㪽éáÃW,Ztø» q¹\àÍ›w ´å§+3 ÊËŒVŸü¬dÉ‚*ß²AO//={6àÀ‘\º4!CZpæL8]º,£E gV®<ÎÓ§ŸÞxHJ’qñâ} íßpÑ"?llVñÜ•þßÚÚZ|kµ°¦¦#GîâÝ»”¬ùã²ØÞ½—ÐÖþôÐÖÖDCCƒ.]êrþüT&NìBº?±‹´k·˜‡_r3M.ð÷¿Ipp$&¸Q·î FŒØ ÀÊ•} ™Í¢E=hÔ¨jz’;)IF@À:v”ª3ãôs+«•T­Z’ãÇÇÑ´i5±Ã’ˆ@J0ª™tiß¾6ÞÞ×Ä%ÛTªTü“;vsçv1š¬U¹rIÍôé–äÉ£•¾,D&SHˤ%’Éå ö±eËéo&?xû6‰®(!²œéîÝçéç"mm-j×.ËáÃŽYÒd]ÝäÉ£ÅÚµýyò$–)SÔ¿¢oÛ¶³<}ûÝ*Hûràì싇G°"SoyòhѶ­!+WöE&“u #¤õ“»z5’–-räÈM%F)Qvvõ±³3côè=<{öFìp¾êã÷¾¶¶æ7«ŽRS儆>fÆ ŸÞ¯uë–O_áS¥Šx½D¹rE=º=§OOÆ×׿Ík²~} ÎÁÖv ®®A¼}›ÄÙ³÷HIùòK¡~DË– 9zôÓsÃ!-xöl'NŒg̘öT¯^ølü4Y'—+ˆŽŽgþ|Õ«’MMU°}û¹ôA>iCãj×.‡·÷hÖ­ëÿSÃ;ããß3lØ6Æs%%åós± \¼økëÕG2fL®\™ÁÎð²2ùbÍÀÀpd2yŽéǬ 11 ôï¿‘ |™8± »v “†ÇåbR‚Q Y[›pìØ-Þ¾M;”lQ¹r‰ô»Oöö­¨\¹¤Èe-MM †oʼn¨]»\zåÐ;ÑwëÖ3RRRÑÔÔ¤U«šxxŒ¤hÑÜÛ›´B…b¬]ÛW× öìùvSzU§P˜™P¶l‘ô/¥ššèè|yÙ— Œ½‡Ó§Ã•¦Úzóæ¡¡?Rñ_©© ’HM•“Ä A[˜2Åã³sƒ¡aY;0‘ ¦1uª9&&ÑÐÐ@SS3ý;„\.gëÖ3\¸ð@ikF;v‹˜˜ m‰y©R…X³¦~~˜šVú©m_¹A«V 8räæ¿çà/Ÿˆ '§nœ81{ûVèë» ¿ÿ 7®¦ƒ™TÁ¹s÷iß~ ÷î½ÄÃã/FŒhóSz$êOC¾‘©””TŒŒf2}º}ú4R꾓’’xûöç{®|Ktt<:­àÂ…qäϯóÓÛ,Y2ë“”ñññ$'ÿ\/Ì´eiA,_~ Aèß¿!cǶ͢³Ÿ®®.zzzb‡ñCÂßӺõBΜ™œí“ _½Ê9ýܲSR’ŒæÍ]HIùÿh ÿ/¥Q(ø÷‹Ùç[yóæaß¾!4hP#ËãrwwÏòmª’Ñ£Ïд©>¶¶UTrRbÆ ©X±¢R÷¹jÕq–,ñÇÃc$¦¦JÝ÷øÞçsR’Œ‡_sïÞ+>|MXØsîÝ{•Þ6í}Fz¥É–-¿ajªÜsU’‘Ï77·Ë8:îÍðÍyx ¥jÕœuUeÇõߺs'š®]—3`@fÌè&v8@Æ®O^¿Näúõ§„„DqåJááÏIMU ­­•^1¶iS_ê×ÿ¹„‘““žž! ÖŒ?ÿlñSÛR¦B… ‘7ï×Ûí¼yóoïk,Xp˜7o¿úÞÞ÷X²ä0 ñÝ%ýÚÚZX[×cÅŠ¾ßݶL&§^½™Œ×™›þTœ9\®`Ù²£¬XqŒÎë°dIO))+¤£Úš>Ý“+W"8|ØQ©û}ñâaaaÙºA€¾}2`@:v¬’%ÛlÕªU–lçcaaa¼xñ"K¶õôé[Æ?IÕªE˜3§e–lSôõõ144;ŒòêÕ[ŒŒfpàÀH7®š­û ÈÖíçïÞ¥²dÉEî܉ té‚.¬C±bù(TH—B…t(TH==]ôôÒþ÷ÃÏ>$IJëxÌÉwb54òPºôŸ¼‡7oüÅç«vïÞMŸ>}”ºOA6l;ÁÁ‘øû¥T)Õõ£ŸÏïÞÉˆŠŠçÉ“·DEÅóàÁ<ˆ¥`AæÌi¾~î¬fÍÈùÄÆf5.< Oíz¤ (Âw«Ôòç×fÈz4jT6k–|Qv\ÿý w÷ËŒ³—M›ѹs±Ãù¡ë“ÔTo¸{7–°°×\½úœ¢Eó2o^+Šùñ>z ) v˜Q£ÌhÔ¨ÜoGÙ Ñ×ÿvÕåOèØqéw·¥­­‰¦¦&óæu§o߯ºþÐÐÐ!oÞÊäÏo„ŽNYÞ½ %.îT†ãÏ.ZZz”*5˜ÔÔˆ‰9€BñõäjÆ·Y† xô(!S7v ÎÇÍ›s¿;läèÑ›üþûV®\™‰¾¾zP(ãG1Œµ›ë×£pr²bÀ)+ù?i4’šêׯ1›7Ÿ&44 ##å7áÏî ¶Aƒb˜7Ïæ§·“Ý Ñ¬LhôìÙ• 01i„žžêÉîDsv+V¬ššéK7²[F.@s³øø$š4iB‘"ùè÷³ûx#Á¥ 7o>åÖ­§ôìÙ@ìP¾J¬¯††Ë—÷ÆÜ|9ÆmÃÝ}„Ê€¬û|~õê-oß&Q¥ŠêT€)KFÏ'•+—¤téÂ/^¼yóP¸p>òåÓ!oÞ<*”—üùuÿýo] Hûï‚u‰ŠŠDKKCmoЩeÜÿvvõ¹|9‡=ŽU‰iÉYq}òäI,ïÞ%S£FéŸÚ޳s4¨‚¡a™ŸÚ޲d4A{ìØ-òäÑúîPœ´ &LpãäÉ;hjê²sç– _$'§ræÌ]5ªJÁ‚?žìÍ 'O†Qª”¿þZØþÓÛ;rä&ƒm&""­RÿãV …€B¡øjÒ1.î=ÁÁ‘4hðíÂW× Z¶¬)%¿aß¾K̘áIÅŠÅ9|Ø‘ZµÔã½*Q)Á¨¦jÔ(M£FUÙ¶í,Ë–õ;œ,7}º¥Ø!(¶¶&#F´;Œ\CKK“% òòe¼Ø¡H@-’ê9QíÚeÿ½ø—|IºlÙ2˜Î]˜6̓… íÄIiJ–,DÉ’ª]µ)¶%KzþÐï={–s«¢%ß7gNwBC£:tÞޣȗïç[‰­|ùÔñ±ß~küC-T—×ÕLMÜ8|ø:úú™ñẺڴk÷Ë„˜åڴɺ(ÉÉ©äϯCl¬ƒÿAÆ xûö=ïÞ¥”$ãíÛ$“yÿ>…¸¸÷$$$ñþ½ŒÄÄdSˆÏñã·¿™`Œ‰IàøñÛ¬Zõ[–Å“üóO"ãÇ»räÈMìí[3aBç¯ös–änÒQ¡ÆlÆ_íbÒ¤®9îNË—¦zI$Y­FÒÜ»—5ËÜ%u”“—g•´žXƒéÛw=*cäHõé“+‘HT®®67¤C‡¥Lê‹K/±CRZZšh©~¡x¦¼xÇýû/¿ùœtÑÕÍCÞ¼Úèé¥UB''˸qã.—/¿&"âUŽz™ººÚ4o^ƒ¤¤»4mZŠ>}šdù><=¯R €.:ýšåÛVw'N„1vì^tt´Ù¿ÿO5ÊÞÖRõ&%ÕX—.uqv.ÂæÍ§™2Å\ìp$µS«V®_"v‰DÅ5kV9sº3uêjÔЧCé ˆD"ùq+gÕª¾ ¸™ *Ó«WC±C’d ¶mû|ùtÐÓˇ®®6ùòéP¸p>òæÍóÍ¢ ììvçê䢲¸¹Ñ­[=©*ï#ïß§0kÖAvî¼€)sçÚH+Ž$ß%½ƒÔ˜¶¶&C‡¶dѢÌÕ^ô^‰º14,ƒ›[‚ H•\‰ä›ú÷o“'ÿðÇ;qw‰ÉÏML•H$¹[ûöµ1¢ S§zP§Nyj×–ÚUäDúúzÒM)wûö3nÞ|ÊÂ…=ÄEe„„>Iìp$’\iß¾KÔ¬Yšzõ*ŠŠèRS,[vKËT¨PŒS§&HÉEI¦H F5—?¿üÑšõë‰/v8‰Z©^]Ÿ²e‹púô]±C‘H$j@CCƒ+úP©Rq~ûm±±‰b‡$‘HÔ˜––&ÿ=€÷ïSpp؃ ä¼'‰*KJ’ááŒ]}±C]däk¬­W²jÕqœœ¬Ø³g8úú…ÅK¢f¤c0hP3tt´X·.@ìP$ÙèàÁƒñöí[,X@ll,‹-àþýûlÛ¶-CÛJLLdþüùÙªZiÞ¼§O‡‹†¨>>ŽÄØNN:3ó>TW¿ÎŸþ+'½®Ë—O‡íÛ‡””J¿~y÷.EìTŠt>QÒk¨\¥Jâï¿ûsôè-Ö¯—V$)CN<ÆÄ¸þÈ ×\áÝ»”\ßu×® ´k·˜”9þþŽ Ü\j%ù!R‚1È—O‡¿þjǦM¼|ùVìp$?hÈ!DDD|õqwwwΟ?O\\NNNÄÅűyófîܹúuë2´¯·oß2cÆŒŸŽ9'hß¾6.< !!YìPDóñqô=ß:N3³å¤ã13ïCuòñëþñëüñùè¿rÒëú_Å‹dÿþDGÇ1pà&d2¹Ø!© é|¢þ¤×Pù5ªÊäÉ]™?ÿ.<;œ/'cʺþÈIׂ °qãillÌ(V¬€Øáˆâõë ØÄäÉûùý÷øøŒ¡FÒb‡%QcR‚1‡èß¿ ÅŠdáB?±C‘ü âââ2õ;„‡çî껟ծÝ/èêæÁÏïºØ¡ˆ&3ÇÑ·ŽSéx̹>~Ý¥×9M™2EpwAXX4ÆmC.Wˆ’JÎ'êOz ÅñÇ­éرÇo“z¼JTVNº çÞ½ ÚBìPDáëJ›6 ¹{÷9#™<¹+yòh‰–DÍI ÆBGG›iÓ,ps âöígb‡@LL íÚµc÷îÝT­Z• 0pà@äò´J7nдiSòæÍK5سg½{÷ÆËË €§OŸbllŒ‡‡ÑÑÑÔ«WØØXqþ¨Ÿ4mÚ4J–,‰®®.­[·æÉ“'ôìÙ“—/_Ò³gOΜ9À¾}û000 _¾|XYY}ñþÅ‹XXX¤ÿ…BÁ¨Q£ÐÓÓ£T©R8;;3žM›6Q©R% (À AƒP(rßdm,,ŒØ¿ÿŠØ¡¤ûÚqòá=åââBÙ²e)Y²$[¶laܸq”,Y’2eʰoß¾L?÷ããè[ïÛÿ§/_¾¤cÇŽìØ±ƒ"EŠpêÔ© mçkrÊñøµ÷af^øúqð½Ç¾vný–ÈÈHZ·nýÉÏzöìÉ¥K—>{Ýÿ{Þùžœòº~I•*%Ù³g8.ÜgìØ}jÕ?M:Ÿ¨¯½§¥×0gÑÐÐÀÅ¥E‹`È­*WÙϰ¬8n022BWW—ZµjqðàA€ÏŽ·>}ú°téÒôß{õêfff¼yóõdmN;Ʋâú#7]lØHË–5s]Å^LLöö;6l;:üÊÑ£ã¨_¿²ØaIr A’c( ¡[·•‚­íjA¡PdË>ž?.œ:u*CÏŽŽttt„aÆ ÉÉÉÂÇ…"EŠG„2eÊ«W¯’’’„'Nzzz¹sç„qãÆ AvïÞ-èêê  AvíÚ%eK¼™uûömáöíÛ~¾¿¿¿P¶lYáÞ½{B||¼`ii)ØÛÛ ‚ ±±±B™2e„S§N )))BHHˆ ««+8p@xÿþ½°lÙ2–-[&DEE ººº‚ BDD„P @AáСC‚†††àèè($&& gΜ .,¸»»Ktt´¤¿6÷ïß .,œ]P(ÂÚµk@X°` P(„E‹ ÕªUËôs?>޾õ¾ýïq%äË—O°¶¶Ο?/„‡‡gh;ÿ¥êÇ# ìÞ½;CÏýÖû03¯É·Žƒo=ö­së·„…… Å‹ÿägFFF±cÇ>{Ý?>^>>ýWV¼®‚¹±œ?_¨Re‚0i’{¶}þ~Of?ï¤óÉ×e÷ç[f¶ÿ­÷´ô~]v^ÿe·û÷_5kN÷eû¾2s}’™c(«ŽÛçÏŸ … ¶nÝ*$%% ^^^Bþÿ±wßqMÝëÀ?aÏ0C€°÷PmµV«RmÕªÕVmÕÚuµ÷Þ®ÛÞ^[;lëhëhµŠZ‹?ëÖº"²!Œ„MØ„äüþ R"p€<ï×+¯`ÂsrrÎç<çû51aÒÒÒîYÞbccM½6l`ÆŽûÀ×ÒßOóÿ×llhËö@zº˜qt\Åœ9“Ú)Ï×[üñÇ-¦_¿÷™?Ôº×NºŒ}Lbb>ãäô&³ÿõ.yþÇ 0EEEšÛFŽÉìÛ·Ù³g3`À€6_±b³råJæôéÓŒ³³3Ã0 ³hÑ"fÙ²eŒ««+Ã0 ³páBfÍš5]RïãzÜC‡1ŽŽŽLrr2Ã0ª¯ŠŠ Íý€IHH`†aÞyçæÅ_lóûýúõ{dÀheeÅ455i~gíÚµÌÔ©Sï©EýÞkn6lsðàÁv¿ž¾0*•JfܸuÌÚµ±]òü³ú°åDý¾ÕÔÔ0 Ã0Œžž#—ˆa˜›7o2|>ÿ±û÷É}n¦írZPPÀ`D"Ñc?ÏÝzúòø¸øú>Î{ò°åàa÷=lÝú0Û¡`˜¶ïûãîP<ÉûÊ0½#`d†9}:•qs{‹Y½z£PtÈØ‘€‘Ö'÷דƇ}¦é=|°Þ02 ÃüùçmÆÑqó믗ºôï‡íyO¶<쾇­[ÙЗÞ×G‰ŒôÃŽ¯ààÁ›xóÍݽfLFZŸôlíùLÓ{Ø÷<õTV­µkcŸÇv9m´gê¬å¶°°>>>mþ¾¯¯/ ´]Þ 0eÊìß¿ÙÙÙHNNÆôéÓø:úâ2ÖÛ]¥'ý——×"6ö^}udŸxßåðá[ˆŒü yؽ{1Ö­›ss#¶Ë"}Œ}Ð{ïM„®®.>ýôÛ¥<—Ëň#  Û\6nÜ}}}DEE!&&µµµðööÆèÑ£±cÇÈd2 2„íò;„a|ùå—(++þ}ûÐÐÐðÀ +++·¹­´´ô‘ãï)..†µµuÇ‹Ö"S¦ €¶m;Ïj³œôÚ°aö¸:ãsø°åàa÷=lÝú¸jkÙ Û{£‘#}ñË/¯"..+Vìê5!cOAë“{uægº;Ð{ØyV­#|°hÑv””T³]Îcé¬å–ËåÞóZVV ÷.o3fÌÀþýû±k×.L:U¨i‹®ÚèkÛ7ž™™!¦OÈv)]J*­Â+¯lÃk¯ý‚gž ÆéÓïbäH_¶Ë"}Œ}¹¹>úè9ìÜyçÎõÌ™½¢¢¢pþüy¤¦¦êêꆃ&Nœˆ¯¿þ#Gªfõ3f ¾úê+<ýôÓÐÑé‹í矎ѣGCOOááá˜;w.ŠŠî?!ÏØ±c±gÏÍQǤ¤$üõ×_üB¡qqq€êêjlÞ¼'N:tÉÉÉôjú==,Y2›6Eq1{ò³œôf}yy|Øç°½¶<ì¾G­[D__UUU(//\½zYYYU3зß×ö>Ü »v-Ɖ)Xºô×7QC_Ô——»Ž~¦{›¾üv”®®~øá%êaÑ¢í½j]ÒYËí¸qãpâÄ äääPM@‹¨¨¨>^,cÆ ˜;wn›û´aëŒí¾¾=PRRmÛÎãõ×ÇÂÈHÿѿР1 ƒ]».cԨϑ’"ÂÞ½¯á¿ÿ}ff†l—F´@ïLjÈ#=ûl(ž}6«VíFeeÏ8UúnÞÞÞøøã1dÈDEEÁÇÇAAA˜9s&`„ ¨ªªj0VUUõÚÓ£`Þ¼y(((@pp0¢¢¢0cÆ |üñÇšûíìì°lÙ2ÄÇÇcÊ”)7n‰gŸ}öSw2dÞ|óMŒ5 >>>puuÅ¢E‹+W®ÔÌÎMîoîÜáàñÌñÅGY«áQË Ûî^NŸD_^ö9l¯‡-»ïQëÖqwwÇàÁƒ1`ÀL™2«W¯ÆðáÃ5÷·÷}ïËïëã<Ø11‹qölæÍû 55l—Ô#ÑúäÑ:ú™î.ôv-.×?ÿ¼II…øøãÃl—ÓnµÜ†††bõêÕ Ãøñãˆèèh<ýôÓ÷}¼¾¾>ž{î9a̘1mîÓ†e¬3¶?úúöÀwß‚¹¹1æÏþè÷B99%ˆŽþÿøÇ~Ìž=§O¿ƒˆo¶Ë"Z„Ã0 Ãv¤kTUÕ!2ò÷À¦Msý í •J‘ššŠÑ£GwÊó‰D"¤¤¤@ Ü3æ`gèìzï¦>*ëïïßîßillĵk×ÐÐЀØÙÙiî+))ABB +++ÀíÛ·!•J.—{Ïó)•JTTTÀÆÆFs[CC._¾ 0 £/ï‘:òú{ƒ#GñÚk¿àĉ·áëkß)ÏyöìYøûûƒÏç·ëñ[NºÂý–£¹ßrÚ‘çél]¹ÿýï;ü÷Ú««ÿÿØÚþè«ÛIÆR” IDAT†ýÿú×¼ürD'WÇ®æf%~øá4¾þú8¼¼ìðÅ3ìÌvYD é=ú!¤·²°0Á7ßÌ /lÂøñ˜6-Œí’î! Ø.£ÛbĈ÷½Çãaüøñmnëׯúõë÷ÀçÓÑѹçKÝÈÈ‘‘‘O^¬–š81¡¡®xï½}8p`+ãI=l9é ÷[Žä~ËiGž§¯ëŒÏáÖƒG-#_·ŠÅbœ:uêïׯBBBqÿ î¿¿ïô>·O@€#þøc%æÌÙ‚É“¿Á΋àíÝ5;¢=­OºFwn/Ñ{ØóLžŠ„„<¼ûî>øúÚ£_?'¶Kj—ÎZnÕÅùùeؽû*V­}}]¶Ëé2YþùσxöÙo`ccŠÓ§ßÁ믡p‘°Š:µÀš5“ð×_xã]øí·×i†?BÁßß+VŒÃ§ŸÆaüø@Vþ%Bz0[[ÛŽYEºž…… öìY‚+vá…6bݺ™zš#!¤ïÓÕÕÁ?ÎÄ _áå—ÆÁƒËûLPÒÂÃÃqýúu¶Ë =ÔúõÇàädçŸg»”NqèÐM|øáïËøâ‹™˜1cíã“âm-`d¤ fãÚµ\lÚt–íréV¬ˆ‚‹‹5V­Ú…BÉv9„^ÎÀ@7ÎÅ+¯ŒÂoÄ`íÚØ^5+,!„}&رãdeIñÖ[{Ù.‡^!5µÄcõê§z}w_NN fÎ܈eËv"**.¬ÁÌ™á.’£wÂH»õëç„w߈O?Ã… l—CH§¯¯‹o¾™k×rðí·'Ù.‡Òp8¬]; [¶Ìþ}×1}ú÷HªØ.‹Ò‹x{óñý÷sqà@<6n<Ãv9„ôh Ã`ÍšX„„8ã¹çºnòË®ÖРǺuGù9ÊËkñûï+°nÝ XZÒ7¤g¡€Q‹¼öZ$žy&¯½ö+ ÊÙ.‡/(H€>xë×ÃÅ‹Yl—Cé#žy&ÿ÷o¢²²O?ý%®\Éf»$BH/2v¬?Ö¬™„O?éS©l—CHuèP®_ÏÅ'ŸL‡ŽNïìò;u*cÆü?þxï¿ÿ,Ž}aanl—EÈ}QÀ¨E8¾úêEØÙq±`ÁVÔ×7±]!=ÞüùÃñÌ3ÁXºôÓ ê„Îáåe‡#GVaà@wÌœ¹?üpJ%ÃvY„^âµ×"1mZ–.ý™™R¶Ë!¤Ç©®nÀ‡ÂìÙCâÌv9M(,Åܹ?⥗¶ _?'œ?ÿ¼úê¨^š7éÛhéÔ2ÆÆغuD¢ »…vZ·n&ÌÌŒ°`ÁÏÌB:¹¹~üq>Þ}w">ÿüÿ0mÚwÈË+c»,BH/ñÅ3áåÅǼy?¡ªªŽírH'),¬Àž=WadäÍv)½ÚW_ƒ\®Ä{ïMd»”ÇR[ÛˆO>ù£FýåØ¿)6ož>ß‚íÒy$ µ«« 6nœ‹Ã‡oaóæ³l—CHgnn„;!/¯ ¯½ö+†ºŒ!ƒÃáàõ×ÇàèÑ7Q]Ý€qãÖaçÎË´ž!„<’¾¾.¶n]ˆÆÆf¼úêš”®—aùùeøóÏÛX¿þ-ÚŽ!C>AxøGX³&††.l—Øk¥¥‰ñÓOáÝw'ÂÊÊ”írÚ…aüöÛuDD|Š;/ãçâĉ·1l˜Û¥Ònzl@Ø1j”/Ö¬™„O>ùŽ1‡í’éÑÜÜlñãó1sæF|öÙ¬Y3‰í’!}H@€#Ž]…uëþÄ?þ±ÇŽÝÆ_¼>ŸËvi„ÌÎÎÛ¶-ÀÔ©ßáßÿ>„O>™ÆvIäärâã…¸p!.d"5µÕÕ ÐÕÕ«« xñÅÁ8кÁÈHÀ¶Ëî•þùÏ `Μ¡l—Ò. ùø×¿ !!sçÃ[oM€µuïF ¹ŒZlÉ’ÑHLÌÇk¯ý‚C‡VÀËˮݿ{öìÙ®+¬‘J¥JµwÜ>ŸÏv ÝjÈO|õÕ‹X¾|,-MðúëcÚý»©©©HM¥Ø»RW.³gÏÆìÙ³»ìù =¬]; ãÇâ7b0jÔgxï½I˜3gh»Ç\¢ïçÎÑÕßoÚ¾ý@:Wp°3¾úê,Yò 1kÖvÿ.mŸt²²ÄÇ qýº7o qã†r¹..61ÂÏ??øúÚÃØØà¾ÏÑÑí}}{º ¦æÚ“¾Œ^'6ö.]ÊÆáÃoôø‰]²³‹ñÅâ÷ß0l˜þüs5‚‚l—EH‡q:G«Õ×7aÆŒPTT…ØØ¥ps³}èãP]Ýû&ºàñxþœ2™ þ¼½‰¡¡!¸\íë®Ù¶í<Þÿ Þ|ó)¬^ýÔ#_RRÒ U‘®Z÷íÛ×éÏIÏàÁƒáâ¢]§ŠÕÕ5aýúcøñÇspwçᣞÃÈ‘¾||oý~òû¶ºOWlÿõdëÖÅwßÂo¿½ŽÁƒ=ùxÚ>yræææ022‚B¡Dzº×®å"!!ññBä䔀ÃáÀËËaanwÇ!žÜßRëèöÇ;ض->>–X°Àºº=;d{ÚJeˆŒüS§Àþ3½+{<åX¿þbcoÀ݇·ßž€I“BØ.‹'F#LÖ€Ù³7C(,ÅO?½Ü® B´]L̼ûî>¼ðÂ`|òÉ4RC8!¤ó …¥øøãÃ8zô6&Lè‡þsr»wN !Ú…a¼òÊ6\»–‹£Gß„““Û%õY••u¸qCˆ›7UabBBjjaffˆþý]1h;ÂÂÜæ .׸ÛêÚ»÷Þyç7L›†uëfjÝŒÃóæý„ÌL)Nž|&&÷ï e“DR…o¾9˜˜+¬ðæ›OaÚ´°ßiIH{QÀH r¬X± þyo¾ù–-‹Òº/$B×É“wðÆ1pt´Ä–-óàî®]„îsæL>üðwää#:zÞxc\]mØ.‹ÒÃÔ×7aÒ¤¯qq+xê-i?¥’AF†7oæáÆ !âã…ÈÊ*Ã0ððàaà@7 莰0WøøØCW—}¨ï¿?…O?=‚åËÇâÝw'‚ÃÑ®Ðjÿþxãìß¿C‡z²]Nee5øöÛ“øõ×K°¶6ÅÊ•ã1sf8ôõuÙ.NE#Ñ`Û·_ÀG†¯¯þ÷¿çìÌvY„ôh"Q–,ÙÔT1Þ|ó),Z4šÂyBH—hnVâàÁx|õÕq–#:zV®  !­ +0aÂz„‡»ã§Ÿ^Öº éIÉd šÓœÕ™¬&& uÁ Aî0À¸ÂÆÆŒírÁ0 >øàwüüó_øè£©X°`Û%u;©´ £GÿÑÑññÇSÙ.G£¬¬›6Åöí`jj€åË£ðÒKÃ``@g>‘¾‰Frììb¼ýöo¸~=Ó§‡aõê§áìlÍvY„ôXr¹6œÄwß‚»;ŸÝÙ.‹ÒG57+{ß|s"Q¢£áµ×"k²6BHßvåJ6fÎ܈ŋGcÍšIl—Óc1 ƒìì’–îÄ\ܸ!DF†J%WW ¨ ÃÂ\ èq‘årV®ŒA\\"6l˜É“û³]+zÚ©Ñ%%ÕØ¸ñ4~ùåLL °dI$^~9‚:ŠIŸG#¹/†apèPÖ­; ‘¨sæ ÊQàóµoBBÚK(,Å{ïíÇùó˜81ï¼3ÞÞÚ5Ó6!¤û¨ƒÆï¾;…œœŒã‡E‹FcĶK#„ôÄcÙ²øì³hÌ›7œírz„ÒÒ$&àÖ­|$&æãÆ !*+ë`d¤ç–qU;;s¶Ë}¨ššF,\¸ yغu""´sÝ¿yóY|òɈ]ŠðpvçJ«ðÃgð믗Àåáµ×Æ`îÜa,­A#y¨æf%ö칊¯¾:ŽÊÊ:ÌŸ?óçGPG#!qüx2>ÿüÿ‘!Etô@¬\9žÆJ#„t¥’Áéөزå.\È€¿¿-©SÐiX„h¹O?ÃæÍg±k×bDDx³]N·’É”T€ÄÄ|ܺ¥º.,¬¸¹Ù"$Ĺ¥;Ñ ýú9õªñðJJªñÒK?B"©Ä΋$`»$V\º”…™37âý÷ŸÅâÅ£Y«C,®ÄwßFLÌeXY™béÒ1˜={(ŒŒôY«‰6PÀHÚ¥¡AŽ_~¹„-[ÎB*•aüø@,X0Ç{±]!=’RÉààÁx|ùå1”ã™g‚ñúëch\SBH—ºs§[¶œÅ¡C àr0cF8æÌJ3O¢¥†Áòå»pòd \¶KêõõMHNÝÕX€œœ0 K„„8#4Ô¥åÚ&l—ÜayyexñÅM€Ý»—híAl±¸ãljáý°qã\VÆ Kñç±wï5ðxæXºt,fÏB÷ˆÖ¢€‘<–æf%þüó6¶m;Ë—³áç瀅 Gà¹çÀÔÔíòéqš›•8r$7žARR†÷ÂÂ…#1n\ k³ Bú¾ââjÄÄ\FL̈D•>Ü sæ ÅÓO÷£B´Œ\®ÀìÙ›‘]‚¸¸7àà`ÉvIOD.W %¥5LLJ*Df¦ÍÍJX[›Þ$º 8عO ñ”’"ÂìÙ›aoo‰_}<^Ï>»«Èå L™ò-䈋[Ùíã.&'‹ðÝw§päH"œ­ñúëchVhB@#y))"lÝzÆCWWO=„éÓbäH N¹‹³°eËYœ:uvv\Ìš5/¾8Û¥Bú(¥’Á¹s騹óNž¼.×3f ÂŒáðõµg»^ˆâqèPª«0|¸7¦OÃĉÁ4ä !}XjªÑÑßcÐ wüôÓËÐÓcg[C¡P"3SŠ”RRDHN.BRRd²zèëëÂ×ס¡.š@Ñ××µZÙ¶uëyüë_±páH|ðÁ­µ~ûí:V­ÚO?Þå3£766cÿþëØ²å²³‹1n\ –-‹BX˜k—þ]Bz3 I—¹}»‡ßÂÑ£IÈÉ)@`…§ŸV…ƒ{PxBÈ]*+ëðûï 8p 7naggާŸî‡‰ƒ1t¨—ÖnTBº–\®ÀéÓ©8p 'N¤¢¢0iR¢¢»}\+BH×»y3Ï?ÿ&Lè‡ fwy`U_ß„ÔTqK¨ SSŨ¯o‚¾¾.üü(@¿~» (HCC+–aüïGñí·'±fÍ3Xºt,Û%±êøñd,\¸ o½õ4Þxc\—ýòòZlß~Û·_€LÖ€éÓbñâQðñ¡aEy I·ÈÈàèÑÛ8zô6nß.„•• ¢¢0fŒ?FŽô…¥eïÉΖŸ_†¸¸D=š„›7óaii‚ñã1qb0""¼{Ü)M„¾A&kÀÑ£Iˆ‹»…¿þÊ€®®"#ý0iR(¢¢`nÞ;Æl#„<Ú¹sé˜;÷G¼ür>øà¹N{Þ²²M¨srJ P(ann„€G 쌠 ¼½ùZ}ºïƒ47+ñöÛ{{ëÖÍÄÌ™ál—Ī 21oÞO˜5k>þxj—üììblÞ|ûö]‡©©!æÌŠ FÂÎN;'Ò!¤#(`$ÝN$ªÀŸÞƱcɸz5J%ƒÐPŒãQ£|âLÝ„´‹+qôèm9’ˆk×r¡§§ƒ!C<é‘#}àççÀv‰„>H&«Ç±cɈ‹KĹséàp€Q£ü0qb0ÆŽõ‡Û%BžÐñxã¼ûîD,[öøÝqùùeHI)Brr!nß.Dr²IÀÞÞAAª.AA¸ºÚhõé½íU_ß„%K~ÁÅ‹™Ø¼y>ÆŽõg»$V¥¤ˆ0}úwˆŠ ì’ŽÛ»'atq±ÁâÅ£1cÆ : OHPÀHXU[Ûˆ 2qölÎK‡PX KKŒé‹ÈH?DDxÓ »„´¨¬¬Ã_¥ãÌ™4œ=›©´ –ˆŒôCd¤FŒð—kÌv™„>¦ºº'N¤hÂÆ¦¦f àŠ§ž ¸qðöæ³]"!¤ƒv츈5kbñÙgј;wØ}#—+™)Õt$ª;e²zèêêÀç Õ¡"„è˜ÊÊ:¼ôÒÈÉ)Á¯¿¾Š´{¼¿„„|Ìž½ƒ{`Ë–ùÖíZ_ß„ƒobÛ¶ HIað`,Y‰qãµfâ BºŒ¤G KqæL*NŸNÅ¥KÙ¨¯o‚«« †õÂðá^ˆˆð¦™. i‘š*Æ™3©8{6ížnàÈH?;ÓF!¤SÕ×7áüù ?ž‚“'SP\\ wwžz*QQ÷ 1c ée¾üò¾þú86mš‹#|î/1-M ¹\CC=øù9 (È©%Pt„¿¿#M ÕIŠŠ*1kÖfÔÕ5"&f ¼¼ìØ.‰U—.eaþüŸ0z´¾ÿþ¥N …ÂRìØq{ö\C}}ž{®?æÏ@h¨K'TL¡€‘ôXr¹ y¸x1 /f">^ˆÆÆfxxð0l˜† óÂС^àó¹l—Jëêêšpùr6NŸNÅ™3© KÁå#<܃{ <Ü!!Î00 AÓ !C©dpëV>ŽOƉwšZ.×#Føj:«,Ù.“rê®Ä´41RSÅøý÷›(,¬ÐÜoii‚  '9jNsöòâÓ„.’–&ƬY›aii‚˜˜Å°·×“'ï`Ñ¢í˜2¥?¾øbæ Ÿ¥T28}:۶ǹsé¬ðÒKÃ0kÖX[›vbÕ„ I¯ÑØØŒøx!._ÎÂÅ‹YˆB.WÀÕÕƒ¹#<ܺÁÇÇžº¶ˆÖ KqáB&®^ÍÁÕ«Ù(,¬€¡¡BC]0dˆ' rÇ Aî4i!¤Ó”ãÌ™4œ9“Š 2Q[ÛDFúcôh? ìA“9Ò͆AAA9ÒÓ%HK#%¥éébää”@.W@__>>öðñ±Gf¦ÙÙ%ظq.Æd»t­qíZæÍûغu,,´{òËǰ|ù.¼ôÒ0|üñÔ¹XQQ‹={®aÇŽ‹(((ÇÈ‘>˜??QQ4Þ?!]„FÒkÕ×7!>^ˆk×r/D|¼2Y¸\# äŽUJh¨ LLh^¢ÝÄâJ\¹’ƒë×spåJ22$àp8ðósÐt8ìAÁ„N!—+põjΞUŽ©©b˜šjÎ@>ÜŽt@NTYY‡ÔT1ÒÒŠšªêLÌÈ ººÎÎÖðõµ‡¿¿áëëž&ø—˘?ÿ'$%â·ß^‡¿?M$×ÕNœHÁâÅ;é‡~˜ CCí>ÓdëÖóø÷¿aÙ²±x÷݉zŽÛ· ±mÛ:tº˜1#óçGÀÃ×ÉÕBþŽFÒg(• ÒÒÄšÀñúõ\äç—AOOþþŽ0À¡¡.èßß^^|Ú©!Z­²²ׯçâÚµ\\½šƒÄÄ|MGph¨ BB\âŒ~ýœ`fFc+BžŒX\‰3gTº]¾œ…ÒÒXZš`èPO æ…ˆøøði†YBÚ¡©©YÓ‘˜ž.Á;ª@Q*UÍàlii¢ ýýU__‡v}Ÿ××7aΜ-ÈÌ”âÀåZ?`WÚ»÷Þ~{/fÌÇçŸ?¯Õ]ur¹kׯb÷î«ø×¿&ãÕWG=Öï755#..Û¶G||üý0~¦M £1B éF0’>M"©Âõ빸y3 ù¸}»õõM077Bp°ú÷wm¹¸hýX'D»54ÈqëV~KØX€ÄĈŕÐÑáÀÓÓ!!Î qFh¨ alL]Á„Žaii\º”‰‹³pùr6ªªê`kkÖÒáèáýàéIÁÑnJ%ƒüü2¤¥‰5c%¦¦A(,Es³††zðñ±‡ŸŸ|}í(€ŸŸýOˆX[Ûˆ^Ø‘¨,ƒ››m'½"¢öý÷§ðé§G°bEÞyg‚V\)/¯Å«¯nCJŠß?cÇú·ûwÅâJìØq»w_Eee&Lè‡yó"0t¨gVLy ‰VinV"#C‚„„<ܼ™[·ò‘!…B¡„½½‚ƒ$@¿~N @ °b»dBX#•Ê”T€¤¤ܺ•ÄÄ”–Ö@OOÞÞö-ŽÎVÍ&Ic«B:B©d’"j U—ššFðù>Ü Þ:Ô ®®6l—JH—Ë K‘‘!AVV1ÒÓ%ÈÊ’"+« rèèpàâb??U7¢êÚnn¶]6éŠLÖ€™3@II5\ggë.ù;Ú†a|ðÁïøùç¿ðÑGS±`Á¶KbUZš/¿ü38vìxÞÞüGþŽB¡ÄÉ“w°gÏUœ’’ QUU}}]øù©Ætò÷wD@€jçÇÆÆŒí’ !½Ls³II¸t) /fâúõ\ÔÕ5ÁÉÉ Ã‡{cØ0/„‡{PàHz¦¦fde#+KŠŒ )ÒÓ%ÈÈ@(,…\®€®®œ­áãcoo>¼½ùðñáÃÇÇž•ñÄ++ëý=jkqàÀ2šþ Éå ¬\ƒ¸¸DlØ0“'÷g»$V9’ˆU«v#4Ô[¶Ì‡¥åÃ'·ÉÉ)ÁîÝW±ÿ ””È0|¸7fÍ‚‰ƒé 7!=Œ„ÜGmm#RS‹œ\„”’“ qçNär õàççÐ<ªºýýè”Q¢µ„ÂR$&àöíÂ{Ʋ³3‡ŸŸ#5¾¾ö´!Hi7¹\„„<\¼¨ ãã…hll†9ÂÂÜ0htEp°3 ´{‚Ò3ÔÔ4jBÄÌLÕ%#C‚‚‚r(JèëëÂÍÍ>>öðò²ƒ¯¯=¼¼TbO›ä£¬¬ÑÑߣ©I–ÑdpT[ÛˆW^Ù†øx!¶n]€ˆ¶KbMcc3þýïƒøå—KX°`>øà¹6oÔ×7áðá[Ø»÷®^Í££%fÌ„Y³†Ð™f„ô@0ÒNr¹™™R$'‹’"j EÉê¡«« R]Ô½E´VEE-RRŠšZ¤3*=]‚†9ôôtàéi??‡–ñ¢TŽŽÔAy´¦¦f$%àÆ<\¿žƒøx!Š‹«a` ‡à`g èŠAƒ<æ;;s¶Ë%}XUU]Kx(EV–º#Q ‘¨`` >¼¼ø-!¢||ìáæfÛ«´WcÚ´ ÐÓÓElìRÚ¾}Lå嵘3g D¢ üúë«vf»$ÖdfJ±dɈD•øê«1aB¿û>îæÍ<ìÙs‡' ¡¡O=„Y³†`Äš¨“ŒFBžP~~RRŠ4cRR$U÷–½½‚‚ð÷Wuo©Ou¡ ¢ %„ÂRM—£:|,((Ã0àr4^^všÓÜmhXBÈCåå•áÆ\ÄÇ qíZ.ÒÓ%P(”puµÁÀî sCx¸;|}íµz¦VÒ1EE•ÈÉ)FVV 22ÄÈÊ*FF†ÅÅÕì¹H IDAT33Cxy©¶ñZOm¶‡³³uŸYÞÄâJLŸþ=Œ »ô‘§³• ̚µ ÍØ»÷5­ž0g÷î+xÿýƒ `ãÆ—îé@,/¯Åþý7°wïU¤¦Šáïï€^ŒçŸDË!½Œ„t²²Mà˜œ,BzºjcT=¾Žj n{ÍÌê@…‚G¢ª«ž.FZšDs*Yvv1 +À0 ôõuáéi//;xzªN%óôTýÌÆ˜T„ž¯¦¦ y¸~]:ÆÇ !“5ÀÌÌýû»bÐ Uèæ.׈írIPSÓˆœœbää” ;»YY­?×Õ5,-MàåŇŸŸ½&Dôò²ÓšS5 +0uêØÚšaïÞ×é³óiibÌšµVV¦ˆ‰Y¬µ§——–Öàý÷c—ˆeËÆâ­·&h+• ΞMÃÞ½×pìX2ŒŒô0yrÌž=!!ÚÛéIHoE#!ݤ¹Y‰ÜÜÍ€Þê뜜Èå èé©‚GGx{«7^U®½é4B:K]]rrJ4§åä”hÂG¹\‡''+xxð4â{xðàáÁƒ½=Í"Hi¥T2ÈÈàÆ !nÜÈÅBä䔀ÃáÀÇgÍ%(ȉ^ôQ …å-ß-Åš@13³X3v°¾¾.\]màå¥úNñôäµäâÃÚÚ”åWÀ>¡°Ó§GGKÄÄ,†¹9…Œ÷síZæÍûضm!¸\c¶KbÅÁƒ7ñÏ€±±¾úêÍØ“Ba)öí»Žß~»Ž¢¢J ì_ŒgŸ …‘‘>ËUB:ŠFBX&—+ÚR¤¥‰53 êééÀÝ__Uǣꇧ'D;57+QXXŽŒ IKàX‚Œ ²²¤ÉÆÆps³…»»í]×<¸»ÛÂÁÁßCˆ¶++«A|¼·n )©·n壼¼ºº:ðñá#8ØÁÁÎ uA@€c›|ƒžžv-¦ìàéɃ·7NNÖ4,Ç#dgcúôïàêj‹]»ÃÌÌí’z”ãÇ“±dÉ/ˆŒôÃ?ÌÕÊu‡DR…wß݇“'ï`þüáøÇ?&¡¡AŽÃ‡pð`<âãóÀç[ :z fÏ¢Õ§ŽÒ—PÀHH%—+]¬ ÓÓ%HOWÍͪÕÁ£úôQõF2²B´UII5rrJ –"7W}] ¡°ÕÕªðÑÐPîî¼ûŽŽ–4x8!Z¬  ‰‰-—|$%B&«‡¾¾.|}íêÒÒéè__{:ÐÇ"õÚììää#;[Õåž“S‚ŠŠZªƒMê.DÖ¡6<ùdÊÊjpðàMüõW:Œ 0aB?L†ˆo­ûÿ!¤¯£€‘^F.W +K5N]jª™™Ò{ŽÊóxæ-£ÜÝm5¤‹‹ í ­UZZ¡°99¥÷2Y=ÕŒŸ®®6ps³…«« \\làìl ggk¸¸ØÐ!Z†a…¥š.ÇÄÄܾ]ˆÚÚFê!0P€ÖNG//;ÚaîDMMÍÈË+Cnn‰æ`‘úZ$ª€B¡„Ž•æ «·7¿%PT4¢Žõ®“‘!Atô÷ðð°Ã®]‹`jªÝß‘ß|sÿûßQ¬Z5o½õ4Ûåt»ädþñ}¸u«O===œ8qÍÍ DFúcÚ´?>ˆN&¤£€‘>B=®Pnn)²³‹[.ª£úEE•==8;Û´ÁWmˆ«ŽìÛiíÀÓ„ª™ U;­­;±yye(,,‡T*Ó<ÎÊÊT8ººÚÀÉI>ªHm< Šm£P(‘•UÜrZu’’ò‘’R„†9Œ àïï€À@‚‚ð÷w€¿¿£Ö/ÓØØ|Oǹz}\TT ¥Rµ«booÑf¸ 77[Ͷ ­{Ù£==í°k×b­¿”aüû߇°mÛ|üñ4ÌŸ?œí’ºUyy->ýôìÙs< rÈd wÇ´iaxöÙPšš-A#!Z@=Y†ú¢¬,iË¿K4§š›i&Èðòâ· µqc‘µÆÆf”#/¯ å(,,oóoõ©x€jL/uèèêÚÚý(XA °¢`Bú¨æf%ÒÓÅHJ*@JJRRD¸s§ÕÕ ÐÑáÀÍÍAAàˆ  VMFU[Û¡°õàÍÝtÄâ*0 ‡‡{CDõµ±1m‹ôTééªÑÛ›;Ýw»Q¡P‚aÐçÆ·”ËX¹2qq‰Ø°a6&OîÏvIݦ¹Y‰/¿ü›6As³ …þþ˜:5 S§КÙÕ !­(`$DËI¥2Íè­d1 ÊÐܬ8:Z¶œ2j 77͵››­ÖΊGˆZMM# ÊŸ¯ óóËÚ\×Ô4jËã™ÃÑÑŽŽ–šÐQ °‚ƒƒ%œœ¬`ggN§óÒG0 ƒüürܹ£ ““E¸sG„ €èˆÀ@ðòâ÷Ú¦ººáo]ˆ­ãáWtt8-Û÷ˆîî<:Ó‹¥¥‰ñüó?ÀÛ›]»µ „ %V¯Þƒ°07¼ôÒ0«||2Y=ŽKÆóϺç¾ÚÚF¼òÊ6ÄÇ ±uëÍ É}]aaÖ¯?†ƒãÑØØ ss#¼ðÂ`¼ðB8üýÙ.Â"  !÷%—+PPPŽììbde·éŸ ÏœÅWDy\r¹™™R$'‹šZ„””"$'¢²²€jüA__{øù9h®½½ù>¶£LV¯ Û‰ª1iÕ“É™˜ÀÅŦåb­ ÝÝmáädMßïZ,5µ3fl„¯¯=¶o_ˆµk 6ö”J::|óÍ,LŸ>í2ÛE(,ÅÈ‘ÿEs³z8p` pEAA9^|q %vï^77[¶KíÙÙÅ8r$ qq·œ,‚¾¾.ärúõsÂgŸEcÀW¶K$„ô00B:DR¥évTÏþ¨!Õ;Kzz:pt´º§ëÑÍMµsÂå±ü*é9ª«Z:+PTT¡ $¥RÄâJˆÅUmBH}}]ØÛ[ÀÞÞàóU$ŸÏ…ƒƒ¥æ>:‘žM$ª@zºiib¤§Kž.AF† rp8¸¸XÃÇǾ¾öð÷w„ÞÞüv Êå ˆDwˆåmÂDõw´Ž–š±d]]Ua¢úšb‡¹s§Ï?ÿôõuPZZ£éÒçp8puµÁ… kzEÇÛ‚[qòd š›•ÐÑѹ¹!~üq>–/ß[[sìÚµvv}볞.Á‘#‰8r$©©bXY™ÀÌÌ……0Àk×NÂ!žl—Ié¡(`$„t+™¬¹¹ªðQB …%ÈË+Ó ô&pv¶ÒL’¡š©×FsMÏÒV}}Äâ*H$U‹+!‘TA"Qê@²´´Z3¶* NÕi 38:ZÂÖÖ öö–àñÌÀç[ÀÎŽKA$!=ˆRÉ ?¿ ©©bddH4×ÙÙÅËÐÕÕƒƒê³kbb†š •VC,®Ô qÂåÃÅÅ®®¶÷‰ÎÎÔ…H:N¡Pbá­8qâþ¾«Éá[¶ÌÇ3Ï„°T]û\¾œéÓ¿ks›žž,éµk'Áܼo OM-¨BÅÌL)ø| ôïï ±¸‰‰ùèßß+WŽÇ¸ql—Jéá(`$„ôMMÍš‰2Ú^T]ee5šÇÚØ˜µ Õ3÷:;[ÁÅÅFFú,¾Bz&¥’AI‰ bqŠ‹ïBII5$ÕõÝŸ5@øóù\ØÙq[®ÍÁç[€Ç3‡½½êšÏçö™-Bz*†aP\,k™Ñ¾å‰*Z¾++PPP¦¦DG‡]]47+Á0 tuU]‰^^|„„8#(Hoo>ÜÝy&’N£sQ}ZôßéèèÀLJS§Þš)• ÆÿééM ¯¦§§‹ݰwïk½ösÃ0 nß.D\\"ââ!–B °ÂĉÁ°·çâÈ‘$ܼ™‡ˆo,_…#´còBÈ“£€‘ÒkÔÕ5ifç-,,¿k‡JõsEE­æ±|>÷®ÐÑúoa¤ 2OÈCÈå ”–V£¨¨ eeÕ‹«PZZ ‰D†âbÕE*•ÝÓill  "íìÌagÇmé’4g®é˜´µ5k3Ã(!DE¡PB*•¡°°ùùå(,l$V ©I ª'…¬4ÚœœZ;ÿ,¡§§ƒ†923¥šS­32$ÈÌ”¢  J%==¸¸ØÀ×מžvðòâÃLJ//>M*E‹*\ÜØØøû†‹j¿üò*ÆŽõïÆêÚoïÞkX½zÏ_ƒžž&M Å÷ßÏé±!éß566ãâÅL?žŒ'î@,®„‹‹ &M ÁرþÈÊ*ƶmž.Á¸qX¾< aa4Æ"!äñPÀHé3d²†»‚GU©þ¹°°2YÕ†­ÎÎÖ,[fçµÔìœ9:Zöˆ; éé†Aii JK«5]Rik©î†”J«PSÓØæwMM Áãµ|¾*x´¶6ƒ½½llLak« ))ä }…\®€DRÕ¦Qý½%U ¨¨R3‘Š^ËlòV-ßWV-Ĩ~¶··€®nÇgãmh#+«99ÅÈÈ"3SЬ,)²³K4!¦½½¼½ùš‹§§||ìûܸs¤s|þùÿá›oNàxð.¦®®‚ƒpäȪn«­½jk1dÈ'(/¯½çôî¿{ùåøÏ¦uSe¯¤¤'O¦àĉ;8w. rôëç„qã1~| ¬­M±mÛÄÄ\A}}¦MˆW_ ??¶K'„ôR0B´FUUf@ûÂBU'ˆHÔz)/oí€433ÔìØ VptT…ÎÎÖptTíØééu|ÇŽmÓØØŒÒRUYVVƒ²²H$U(+«Eii5Š‹e(+«EIIu›nd@5#½ìí¹°¶6ƒlmÍ`kkkkSX[›¶ù7 ‘@Ø"“Õk: ‹Š*!U@,®Òt"J$UšS.Œô5ááÝ݇êk;;.+ÝQ …åÈÈ +«YYÅšŸÕ“IYX˜ÀÓ“{xyÙiÂG»Q»Éå ìßë×GQQ%8<´“qÿþ¥6Ì«+|´uëŽbÆ“mºóæÐ¡å÷èâªÚïÎ"œ8‘‚ãÇ“‘˜X=Œáƒqã>Ÿ‹K—²±}ûüùçmØÙqñò˘5k¬­MÙ.ŸÒËQÀH!-ämºHÔ;‰êòîÎ]]ðù\M© [;!+š ›’Ë(+«Aii&¼;„,+«Aq± ååµ(/¯Õt[©™šjBH3MÉãq5?ÛØ˜ÇS’4ii¦¦æ–ï‚*µ†ˆbq¥æ»¢¶¶µS×ÒҤ啥æ`Õ݈½q&æââjMبîxÌÌ”B"© :mÛÉÉ^^vððàÁÃww<=ypp°d¹zÒ] %¾…/¿ü99¥ÐÑá@©üûX†:4ȱ±KYªò^EE•6ì?÷|§¨éêêB¡P‚Ç3üyÃ1kÖØÛ[tøï”ÃÙٺÿ¨ÖK—.eáøñdœªBGU磇>3}ÄÙ³iøòËcˆBOOÍÍ èéé`äH_ìܹˆíòI“¾ÖŒ»¨««¥R këÖnEGÇ'ï½|9K–ì@I‰ê€EZÚg<㥶¶W®äàìÙ4œ;—†¬¬b`Ø0OŒ§ ï®-5UŒØØ8xð&$’* ì9s†â™gBèóDéR0BH7+/¯m U‰¤ªågÕX]EEmCH 88¨ÂF>ߢågkØÛsáà`I!$!Ý ¦¦±%l¬mB–—×Ý7,/¯ÑL,u7ccM0©>]ÛÊÊô® ²õ¾ÖÛMzÍL¥ÝM=iŠXܪ׫ªõiŠ‹emÆSãñÌÁçs[º -áèh Í»|>—Æìê±ssK‘­šl&;[Õ)U‚ap8ðù\¸»ÛÂÍ×rm«¹65¥  z›«Ws°~ý1œ?Ÿ¡¹íäÉ·àÈZM à 4ô””È ¯¯‹æf%FòÁüù;6à‰ºÕš›•X¿þ¾ýöÕ‡ƒM›æâÙgCÛW¯æ ¹Y‰€GŒå‹Ñ£}1hG›°P,®ÄÁƒ7{©©b8;[cúô˜>= žžvO\?!„´Œ„Ò•—×B*­ÒtBJ¥2M'¤X¬êº¹;„är[Nϳ€ŽŽ–àñ¸pt´€­­9-akkNãìôu®ž¼£P(QQqoø¨¾íïa¥úöÆÆ{Çÿº»Cò串…1¸\ÕÅÒÒ\®1,,T—Þ|𡾾 "Q¥&@T­ «4·I¥UmN[ÖÓÓ­­yK—¡ª \5)—jho¯ºÍÀ€:xzºÆÆfää#7·yye K‘›[ ¡°EE•š‰ClmÍàæÆƒ‡‡:xäÁÍÍnn6tÚu7x’ï3}}>ÌÌÃÈÈMM"”•íëÄʱ±,-'jj®¡®. …¬Cϵk×.Ìš5«Ím……X¼x; ÛŒE©««ƒiÓà›ofC*­ÂÙ³é8w.çÏg ¬¬vvæ9Ò£Gû!"ÂçžÙÛ¥Ò*9’„¸¸D\»–.ד'‡bÚ´0 äNÛ„nG#!„ôRµHª43“ª;wŠ‹e‹« •ÊÚÌÆ«£ÃiéܱhéÞiF:8X€Ç3ï•ô&Ï=÷Ü=; äñÄÄÄàСC=:`쨺º¦{º!Û•mI™¬UUõ÷œÆ ¨ÆSêðñîRu1i¹¿õ>ÕµI—”Ë-ë)ÕÁ‰Dª×cªÛ*Ût€êµËV½Sw ªƒ(ÑiDz¶¦¦fM訾¨ÂÇR–kºU--MîêxTu?º¸ØÀÅÅ|~Ç'æ ­:ãûL,®ÃÉ“"L˜à [ÛîŸO¡`› ??KZAW·ã¡ÜŒ3î ãâ±rånÈåÍ÷]G«[ -MCC= 쉑#}0z´üýî %’*9’ˆ¸¸D\¿ž ŒˆÉ“û#2Ò BXE#!„ôaÍ-;ï²»vÜUתI d(*ªD]]“æwôõuagÇÕŒ ©êúá‚ÏW]ÛÙqaooI³dw‡Ã¹o‡y<111˜={vŸ ;ª®®I6VUÕ¡ªª2™êRYYßæ>õÏ2Y*+Uÿ¾SSÃ6áck8irW©º˜ša”hhhF]]#*+ëQR¢:à¡Q5QJYYæù9x<3ÍAÕºÇBs D=4„µµiwý7’^L.W °°BaÙ]ác rsK‘Ÿß:棡¡œ­áêj8;«‚GUiCßoíÔ™ßgJ%ÞÝqw÷ÿG}}Ö®=€={®¶Ì¢ýàïª^ŒÉ“C1x°Ç=]ç à )©§NÝÁÉ“w”TSSCŒˆI“BéOã*Bz ZBHfh¨WW¸ºÚ<ôq55‹+QRRݦ«H*•!)©Ç«~njj=uÓØØ M¤¹&”T‡öö02Òïê—Ij–^ØÛw¬;«5”l e²z”–ª†lHd¨¨¨Aaa9ªªPW׈ºº&47+Ûœöw7]]èÂÈÈff†pp°@` 66¦àó¹àñ¸°´4†™™,-M`jjss#˜›i~&¤½ôõu[ºy÷ܧT2‹+‘Ÿ_Žüü2¨®““ÿ¿½{Žª¼÷?þ™{’IÈ•ˆÂMnÒH HÊAQP¡ƒø«ºÚBë…³¼êòäwd!Vm]ŠGÅjMáÇ©R«¥§HUT..EÅ#H 7ÈL2™™Üæ÷Çd6I „IàýZ‹5û6{?3$Ù™O¾Ïó”ê/Ù«òr·ñ‹øø˜–ð1±%€ >^ye’23{S%Özz¸ØÚW_Õ=÷¬UqñIIê0\ í«I“~`lóxüzÿý¯µuë~mÙ²Oåå5JOOД)ƒõÀS5qâÕ| è–øÉPl¬CÙÙiÊÎNë𸪪Z£+c¨ú14;ëwßUèØ1—*+kÔÔt*lˆQŸ>Á°14±BjjœúöíÝ2>dpœÈž8©Â[oíÖu× ¤»zœÆÆfUUÕ¨¼<ø¯²²FeenUVÖ¨¢"¸\UU«²2÷iÕqqQêÓ'^ýû'LHI‰S\\”bbì²Û­²Ù,òzëO«œ >zuøp¥öî-QM_Oµµþ3¶5>>FqqŽ–Ð1ÊXv:£¥ØØ¨–G‡bc£ßz{p“Àl63ÿð‡NÛï÷7ª¸ø„¾ÿ>>VêÈ‘úàƒ¯uäÈ ãûÀd2©OŸøV§*Cݯ/¥° óá‡ezôѧÚL.u&ÍúË_öª°p¼Q¥¸}û·jjjÖ5×ôÓÂ…”ŸŸ£œœ¾Œ© Û#`œ³¤¤X%%Åjðàô3ÓÔÔ¬ÊÊ?î6ƃlFîÝ[rÆn’¡®ÙÉÉqêÓÇ©ääX¥¥Å+99Ö?2&¦ûLZ±xñ$»7-Zt=35öee®K6ª¬¬Uee­ÊËݪ¨¨Qee­ÊÊ\ÿ´-¸½µèh»†¾Ç“’b—“’‚ß‹))q]Ò/´TLúT[ kj‚Ën·On··Í¶ÚZ¿¾ÿ¾ÊØ^[ëSM¯Íp­™L¦–.ÞÁà16Öa„Ng0¬l½-6Öat USöêåPl,Aå¥Êá°jàÀT ØþÏq—«ÎO…UÚ³ç{Ÿ0*üív«23{ëÊ+OU>¶"ºçä3—òÏÆ‹áÄ ÒÒîÑÆG:ýÜï¾+Wnî 9Qš4éZµjަL¬¤¤Ø.h)tFÀe±˜[ªš:þ R_ߨj‚wËî–YbOê³Ï¾o7‰‰±AGjjœRSƒAdzzBKâTjjœ’’º~Ö옻êêêõßÿ½KëתiÓ†ê¿È×5×ôëÒë¢óÞ{ï€|p¢£íúè£_Eº9R]]§òr·ªª‚;…ª ËËÝ-¢Ûø^i]=l·[•œ«>}â•”«~ý’4fLV· îM&S˸Žç¾47TS¬’<<ž ]®ºvƒJ—Ë'óÂëIDAT«šŸ<žàñ^oûA¥$9QŠŽv(&ÆÞÒÛ¡˜‡¢£í-fp=&Æ.§3Z½z9Œîë¡™½cbì-f4Õn=D||Œ†ÑðáWœ¶/èøq—>†ºaóM™þþ÷¯TVæ2ºÉ:QF·ëP™™ 32zG,Äž5ëyy½õzúé¹mºëâìüþF­]û¡O(>>^#FôÓ‰u:zôdKu¶IRÇãßu×ýû¿ßÚå¿·@W"`D„ÝdÿŠ+;<®¡¡©¥k¶Û¨|éæšššuâ„Çø «ªjuüx(, VWUÕ¶ûÔj5+))N))±FÅaNN†ñõ ÜÓÒœr:£#ø*#Ãl¾0Aecc³<Ÿª«½F8éñÔ«®Î/—Ë«ººà²ÇS¯ššÐz½¾ÿ¾Jµµ>cÝ톖u•ŒŠ²aell”F¶N†‚˘»bŒå˜GË~;c³E€ÉdRzz‚ÒÓ4n\ÿÓö××7ª¤ä¤Ž©j3äöíÿ«ââ:yÒc£ŒŒefu™ÙÛxLI‰ë’×pèP…$©°p®¾ºî¿ªfÌÁÌìçÀá°jÉ’iú·»AÏ=÷¦FŽœ¤{îY+Ÿ/ô³ûÌá¢ÅbÖôéÃuûíc ôxüèÖl6KËLÖgïºUWW¯²2WKuש ¯cǪUUU«޵„”5m>ð‡*½ÒÓã•”gTA¶"ÿ¹{hY™û´ë‡Î¹k×aãCÚ}÷hÆŒ‘a}pøöÛoõá‡jáÂ…~nwæñxôì³ÏêW¿êšJB¿¿QëÖ}¢ßþv‹Žs©õ°UV«Y@à‚Žeå÷7êĉZ8áQEEM›ð0×kí­µÃSR‚_{ýû§_{§‚Ã8%%õb®‹Àj5_ 2¤¾¾Quuõ-á¤ß ««ëŒå¶áe½<žàä[¡õPÅe]]}‡–V«Y½z+)ív«16¦Ãa•Ó­èh››œÎhEEY\v8lŠŽ-[ÐÓn·U™=q¬ÜîÀn·ªÿõïúä3Rp¢µÒÒ`YZZ­ÒÒ“*)9¡Ï?/Ö¦MŸ·™€Æá°*3óôà1Föéßéÿ§½{Kd±˜ÔÔ¼ÆÁƒeúùÏßÐòåïè¿È×ܹמ÷Ð]y?ûóŸÿ¬ôôt7®ÃãJKKõÆohÆŒ:th›}ê¾ÔÙ1›ššµoßQIÏ=Ÿ)º[p™h=V]h|ºPdh[EE°B²ºº®ÍsÎh¥¥9åpØôå—%^'¥§Çkñâ|Í;NÑÑv½ùæ›*,,_£<¿<¿êëåvûäõÖËïo”Ëå•Ï\îˆÅb6ª,CeT”M‡U 1r8N–QQÁÀ2.îT`%‡#XöêåÕjQBB´, ã[v ¡¡I¥¥'UZZ­’’*) Á ò¤Ž­6*-³RS-]¯{ŸDff&ž6$Âë¯o×#l8íº&“I&S°[÷Oz½.¼®Me´Édê÷³ùóçk̘1ºÿþû;6Öa„±±Q-©Ñ²Z-=rFq›Í¢¬¬ä3P@@åå5mBÇÐã–-ûTZzRn·Ï8>1±W›àñðáÊ3ž7ª«½Zµê¯zöÙÿÑÂ…tï½{ä„0GŽÑŠ+N ÏW{c0VW{ïÚZ¿|¾†ïMï¾û•~ò“]ÐvÀÅFÀ@ìv«úöMPß¾ m¶¯]»M}tP Mg=G ™ÍRSS@ÑÑCôÊ+õ£•);;í¬ÏmnnÖ/ùK½öÚkŠŠŠÒ< G}TUUUš3gަOŸ®§žzJ Z¹r¥¾úê+ýþ÷¿—ÕjÕo~óÍ;W’´eËÝwß}:x𠆪—^zIcÆŒ‘$½÷Þ{ºï¾ûtàÀ]uÕUZ¹r¥fΜi\ã®»îÒc=¦ãÇëöÛo×+¯¼"‹Å¢eË–iÍš5r»ÝÊÍÍÕo¼¡ÌÌLÍ™3Gåååš3gŽ^~ùeåååµûÚ^~ùe-_¾\•••ºãŽ;ôÊ+¯Èl>÷®äVko=øà:mذS&“É ól^~ùõéoƒ½5räFÕa¨²0(FEÙιM@OסeˆÛ}*°¬­ ŽMév{U_ßdtohh’ÛíUcc³jj|ª¯†“_Í*.>¡¦¦f#´ 8¡ç‹èh{K÷ñ`¥Ó-»=VÚåàcp=*ʦ¨(«›Qµz m“Ífm9G0½¡¦ÉdRZšSiiNÕî1n·×‹‹O‘{ö|¯¯¿>vÖk455ËëmÖý×zé¥÷[Æ ìÝ©v^¨ûÙºuëôÈ#¨¬¬LÓ¦MSSÓ©Ÿý{÷îÕOúSíÞ½[ýúõÓã?®ÂÂBÝu×]:räˆ,X gžyFÓ§Oo·áÜ—þy Æ3Ut¿nƒã¹ú| ư>_ƒë|€î„€€0”•¹Ï8žÉd’ÍfQ}}£,“rr24a ]{mÝpÃh=õÔ«ç.JÒ®]»”——§ãÇkÏž=š1c†²³³5aÂýãÿPnn®JKKõâ‹/ê'?ù‰ž|òI•——ë©§žÒ¯ýkÍ;W%%%š5k–^ýuM›6MO?ý´n»í6:tHåååºùæ›õÜsÏéÇ?þ±6oÞ¬ÂÂBíÙ³GñññÚ¶m›  ýû÷«´´T£FÒ¼yóÔÜܬµk×jÇŽJKKÓüùóµbÅ ½ð Z³f¶mÛ¦5kÖhüøñí¾®¦¦&íܹSTqq±F­ hòäÉg}O,Ók¯TJÊZ·î“szC,³–/¿Usç^Û©ç8Ng”¤®­ð NÀå—×Û ¿?XeÙØØdT`z½õm‚̆†¦ÓÂʦ¦fUVÖçjhhny NîU_¬ðüçjçŽ„ÆÆ´ZÍŠuÈl6+..J‹I±±Q2›Mr:£e2™ätFµ<»#'$Cáoð8)>>x|\\Ûç·>oh’§3ZNg´î{ZÛzèÿéØqN¯#ô‡œuë>QJÊzíµƒ;öÜþ`v!îgŸþ¹.\¨¢¢"MŸ>]/¾ø¢xàM™2EGÓ¦MÓÒ¥KµuëV}ôÑGºõÖ[•••¥gžyFï¿ÿ¾~ûÛßjÒ¤Ií¶ï|îKçÂb¹°c»@wCÀ@ÊÊÜFõ¢Éd’ÕjVCC“ìv‹FŒè§¼¼` 8ztV›ñ®š›ýg:e»ôä“OÊf³i„ Z¼x±ŠŠŠ4aÂ577ëᇖÉdR~~¾¬V«–,Yb¬¯^½Z’´~ýzMš4I·Ür‹$顇’Õj•×ëÕÆuÍ5×ïÏœ9SÓ§O×úõëuï½÷ª¾¾^?þ¸ìv»®ºê* >\.—K6[°ªÏï÷+..NEEEjhh0Úl6›•`מ'žxBv»] PNNŽ\.×9½'ÙÙiš>ý íØñ-X°XÛ·k¾‹¹ÃJF‹Å¬£G«Ïé:z›ÍÒâ\œë…‚IŸ¯A>_£±ì÷7¡0ÒëmPCC£pz<õjll2ª3=¿õý÷UjnnVMߨzkn´Œ-8çJÍØX‡,‹zõ²·t9w]Ïm6‹¾ùæxد¿OŸ^ç\}w!îgEEEš5k–fÍš%IºÿþûõꫯJ Žó˜žž®E‹I’®¿þz-\¸P6lPnn®Ìf³âããåpœ¹¢4Üû€€€°|þy±€bbì;ö*åæÔøñ4rd¿ :Óê€Ú„tC‡Õ»ï¾k¬÷êü`g2™äp8dµZõÇkРAƺÍfÓÃ?,I*))i³O’®¾újëéé§Æ© wƌںu«rss• ‚‚-]ºT m»’Ÿ‰ÅbQJÊ©U;;3rjj”jk?ÕóÏÿ«$©´ô¤>þøõñÇßiÛ¶¯uäȉ6ÁoH PEEM§®gì:m»hfHë ±º:øèr'%s»½ $—Ë«@  šš`@| v=oj Èã vSÿúësM&Él>5ãt\ܹœ¼÷³ÒÒRåää´9ï!C$ïuPVV–±Ïëõž±;ô?;ßû\îÃLUVV²† éktAë ••mß///Wbbb§Î§òòò6ÛÞzë-M™2EN§S_~ùe›}UUUŠ?˧å@  Õ«WkõêÕÚ³gž{î9Íž=[{öìéTÛ.”ŒŒÞš={ŒfÏŽ+YYY«O> ŽßèÛoËÔÜì>ùÅÅg9to¡‰~¤Öãf&…u®?\qÖc¬V‹›4p`šæÌ§™3¯Qff¢®»îM%%ÅžÓu.Äý¬wïÞ§ÝÏBçu:ÊËËÓæÍ›}^¯— .’®ûDÀ%즛FjذÌ. ¥`EƦM›$I555Z³fÍ9Wc„èwÞ1>”}òÉ'š?¾,‹ ô÷¿ÿ]ß}÷$©¬¬LúÓŸ”ŸŸßá9W®\©I“&ÉjµjܸqZ°`Ž=zÆã7nÜxZÙ•’“cõ/ÿ2B˗ߪ÷Þ{X_}õõúëwëg?›¬áï¸hí€î®_¿öC¾P5~FFo-^á–ß~ýúEº1¦@ ˆt#èŒE‹Þ$=ÿü¿F¸%Æ`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa#`6Fa3@¤À™¼üòzì±·ÏéØÿø[u÷Ý?êâZ£‚ЭÝ|ó5]r,à `tk©©qÊÍÍ–Ùl:ã1f³I¹¹ÙJM»ˆ-HŒ€àöÛÇ\c# Û»ñÆa2›ÏüÖl6ëÆ‡]ÄBÝžÓ­)SËb9ýc¬ÅbÖ”)ƒåtFG eF@0{ö57NÛÞÜÐìÙt€H!`ô9ŠŽ¶¶=:Ú¦‚‚œ´ 0z‡Ãªo&«Õbl³Z-ºñÆar8¬l\Þ=ƬYcÔØØl¬766kÖ,ºG@$0zŒ¼¼AJHˆ2Ö¢”—7(‚-0z «Õ¬[o#›Í"›Í¢[o#«•¶Iüô(3gŽTCC“š4sæÈH7.{Œ‚ è´’’¹\®ˆ\;&&Ðj¹Nûöí‹H;âãã•™™‘k@wBÀè´ššUTT(%%å¢_Ûd2iîÜÆr$TTTÈl¦S HŒ€0¥¥¥iðàÁ¹ö=÷$J’NÈõ÷ïß‘ë@wDÀèq",NG=7€°0#€°0#€°0.{wß}·:éf@DÀ¸ìmÞ¼Y.—+ÒÍ€‰€pQlÙ²E999²Ûí5j”víÚeìûãÿ¨Êjµ*==]«V­2ö-[¶L)))r8šI’ßïW\\œŠŠŠÔÐÐ IîÛ´i“ÒÓÓµhÑ"IÒõ×_¯… jÆ Z²d‰¼^¯~÷»ß©oß¾’$³Ù¬„„Ùl¶‹÷¦À%‚€Ðå>¬Aƒë6›M?ü°±¾{÷n=úè£úöÛo•˜˜¨ææfIÒŒ3´uëVåææ*!!AZºt©:Üwøða8p@YYYÆ5¼^¯¦OŸ.)(†ÂEÀù¡‹4 ËÅÅÅ©ºººÍ¶·ÞzK.—K7nÔÒ¥KµlÙ2}óÍ7Ú¹s§bbb$I@@«W¯VUU•6lØ ŸÏ§Ù³gŸuŸÓéT^^ž>Üæß /¼ I2™LñÕÀ¥€Ðå ôÎ;屮¼\’ôÉ'Ÿhþüù²X,*))Ñ!C”——'‹Å¢;vÈívK’V®\©I“&ÉjµjܸqZ°`Ž=zÖ}ùùùÚ¶m›öïß/Iª««ÓèÑ£õöÛoGàÕÀ¥.Ò€.7yòd*''G#FŒÐÎ;µjÕ*ÅÆÆjæÌ™Z¾|¹&Nœ(»Ý.›Í¦þýûkÉ’%zþùçõÒK/iøðáJMMÕ®]»Œ¦ï¼óÎ3îËÎÎÖòåË5~üx;VPnn®æÌ™c„­¥¦¦jñâÅzöÙg5zôè‹úÞ@Og H7г„*Ü©çýôS¥¦¦jøðá*..Öwß}§‰'Êï÷ëÓO?•ÏçÓˆ#”ššj<¯£}’TZZª}ûö)##C999glWEE…>ûì3;V½{÷î²×—"F@§]îÛåþú 5Æ`6Fa#`6Fa#`6Fa#`6Fa#`6k¤è™ÊËË•œœéfDDyy¹RSS#Ý èa Ú·o_¤›ˆ0S Dºz&Æ`6Fa#`6«¤Ï#Ý=ÓÿØät‰¿ÔPIEND®B`‚bm3.7.0/doc/html/a00191.md50000644000175000017500000000004011365042645013143 0ustar tlktlk3b48a248ce23cf8c581bf1e41e47e171bm3.7.0/doc/html/a00148.map0000644000175000017500000000257411365042635013252 0ustar tlktlk bm3.7.0/doc/html/a00080.html0000644000175000017500000004276211365042651013435 0ustar tlktlk BitMagic: bm::bvector< Alloc >::reference Class Reference

bm::bvector< Alloc >::reference Class Reference
[The Main bvector<> Group]

Class reference implements an object for bit assignment. More...

#include <bm.h>

Public Member Functions

 reference (bvector< Alloc > &bv, bm::id_t position)
 reference (const reference &ref)
 operator bool () const
const referenceoperator= (const reference &ref) const
const referenceoperator= (bool value) const
bool operator== (const reference &ref) const
const referenceoperator&= (bool value) const
const referenceoperator|= (bool value) const
const referenceoperator^= (bool value) const
bool operator! () const
bool operator~ () const
referenceflip ()

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >::reference

Class reference implements an object for bit assignment.

Since C++ does not provide with build-in bit type supporting l-value operations we have to emulate it.

Definition at line 140 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::reference::reference ( bvector< Alloc > &  bv,
bm::id_t  position 
) [inline]

Definition at line 143 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::reference::reference ( const reference ref  )  [inline]

Definition at line 148 of file bm.h.


Member Function Documentation

template<class Alloc>
reference& bm::bvector< Alloc >::reference::flip (  )  [inline]

Negates the bit value

Definition at line 214 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::reference::operator bool (  )  const [inline]

Definition at line 155 of file bm.h.

template<class Alloc>
bool bm::bvector< Alloc >::reference::operator! (  )  const [inline]

Logical Not operator

Definition at line 202 of file bm.h.

template<class Alloc>
const reference& bm::bvector< Alloc >::reference::operator&= ( bool  value  )  const [inline]

Bitwise AND. Performs operation: bit = bit AND value

Definition at line 178 of file bm.h.

template<class Alloc>
const reference& bm::bvector< Alloc >::reference::operator= ( bool  value  )  const [inline]

Definition at line 166 of file bm.h.

template<class Alloc>
const reference& bm::bvector< Alloc >::reference::operator= ( const reference ref  )  const [inline]

Definition at line 160 of file bm.h.

template<class Alloc>
bool bm::bvector< Alloc >::reference::operator== ( const reference ref  )  const [inline]

Definition at line 172 of file bm.h.

template<class Alloc>
const reference& bm::bvector< Alloc >::reference::operator^= ( bool  value  )  const [inline]

Bitwise exclusive-OR (XOR). Performs operation: bit = bit XOR value

Definition at line 195 of file bm.h.

template<class Alloc>
const reference& bm::bvector< Alloc >::reference::operator|= ( bool  value  )  const [inline]

Bitwise OR. Performs operation: bit = bit OR value

Definition at line 185 of file bm.h.

template<class Alloc>
bool bm::bvector< Alloc >::reference::operator~ (  )  const [inline]

Bit Not operator

Definition at line 208 of file bm.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x66.html0000644000175000017500000001033011365042652016702 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- f -

  • find_effective_columns() : bm
  • for_each_block() : bm
  • for_each_dgap() : bm
  • for_each_gap_dbit() : bm
  • for_each_nzblock() : bm
  • for_each_nzblock2() : bm
  • for_each_nzblock_if() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00177.md50000644000175000017500000000004011365042644013146 0ustar tlktlk49117157cb5211fb60ea3a929e0ea193bm3.7.0/doc/html/a00161.png0000644000175000017500000022321711365042641013250 0ustar tlktlk‰PNG  IHDR «6(0bKGDÿÿÿ ½§“ IDATxœìÝ{|Óõ½?ðWnM¯é-½$½¥7Ò›-PJ)à QÔá}\çôÈñ‚þŠÛŽó67=›ó²Í :˜ "rq°‰;q¥-wÛ¦¥z!½_ÓkšÛï4ß6´@Û”öõ|<úHòIòÍçÚ”¾òÎû#²Ùl62±«'@DDDDDDDDDD“h""""""""""  ‰ˆˆˆˆˆˆˆˆˆhLH]=‰bÛ¶m®žÂ”—™™‰ÈÈHWOƒˆˆˆˆˆˆˆˆˆF‰ˆ›Ú‰D"WOaÊËÎÎÆŠ+\= """""""""%¬€âÙgŸÅu×]çêiLI×^{­«§@DDDDDDDDD£Œ= ‰ˆˆˆˆˆˆˆˆˆhL0€&"""""""""¢1ÁšˆˆˆˆˆˆˆˆˆˆÆh""""""""""  ‰ˆˆˆˆˆˆˆˆˆhL0€&"""""""""¢1Áú2ÔÓӃ͛7øö‹¨¯¯ÃY9“ºztẻ»ñÞ{ïaÅŠß{Ûªª*<ýôÓH$hmmÅUW]…Ÿÿüçã0K"""""""""šêX=ɽôÒK¸ýöÛñá‡bÓ¦M8|ø0òòò\=-"""""""""šX}‘6l؀ݻw£»»)))øÅ/~   À_|7¢¾¾~~~X²d –/_ƒÁ€_|sæÌÁÖ­[a6›ñÐC¡²²Ÿþ9$ }ôQ,X°§N—_~ ±XŒ½{÷B.—ãî»ïÆ’%K†Í¥¢¢o¼ñNŸ>Üwß}¸îºëPUU…ºº:Üu×]¼õÖ[ððð8皎=Š?ýéOÐëõˆŽŽÆÚµk¡Õj¿s.2O"""""""""šZX}òóóñÙgŸaݺuøôÓOáéé‰M›6°÷g~å•WðÈ#`ïÞ½xá…ðÎ;ï ½½f³ÇGWW¶mÛ†ûï¿¿ûÝïàçç‡;wbÉ’%ظq#{›Ý»wC,cÇŽøÕ¯~…÷ß¹¹¹NséëëÃÏ~ö3,\¸ÿøÇ?ðä“Oâ7Þ@aa!ÊÊÊ…}ûöá™gžÁË/¿Œöövøùù [SSSžþy¬Zµ {öìÁUW]…^x6›í;ç2ÒyÑÔÃú"ô÷÷L&<==ñÜsÏá¿ÿû¿2™ ëÖ­Ãüùó!“É R© •JÑÝÝ °Ùl¸ûî»!‰žž‰D‚¥K— —{zz„Ç‘Ëåx衇 —Ë‘’’‚;þ¹Ó\rrr€Ûo¿2™ 3fÌÀ7Þˆýû÷Ã`0 ¼¼_|ñnºé&DFFâ‰'ž@YYÙ°5}ùå—˜>}:æÏŸ¹\ŽåË—ã¶ÛnÖú]sÉ<‰ˆˆˆˆˆˆˆˆhêa Ž‹••…cÇŽáÑG…··7fÍš…{î¹ÞÞÞÉd())Á;ï¼½^…B›Íætwww€H$‚L&ƒD".¥V«!•þEGGãøñãN·©¯¯Guu5–/_.ŒFÌ™3R©x饗 •J1þ|TTT`Ïž=X³fͰㄇ‡ —¥R)î¾ûîÍe$ó$""""""""¢©‡ôE°ÙlX½z5V¯^ÒÒRlß¾]hµqàÀlذ/¾ø"RRR ‹±xñâ‹zœŽŽ§ËíííÃú7{zz"55¿ûÝï„1£Ñ‘H„'NÀ×××) EKK˰ÇòôôD[[›ÓØ×_™3g~ï\F2O"""""""""šzØ‚ã"lÙ²kÖ¬D"ABB-Z„ææfö^ÊQQQHMM…X,Faa¡S[ ÑÔÔ„ƒz{{±gϤ§§;Ý&==§NBUU{øüÐCá믿ÆW\––°÷§>pàRSSÀ™3g„ã:tíííN‡—_~b±ø{ç2’yÑÔà 苰hÑ"ìÞ½<ðüüüPRR‚‡~0oÞ<|ðÁøÉO~™L©T •J…·Þz k×®½ Ç Á_ÿúW|üñÇÐëõÇwÞéTqŽx«W¯FBBª««‘’’‚ @$áñÇÇOúSÄÇÇ£¦¦iii¸ùæ›þóŸñƒüÑÑј1c®»î:Üwß}ˆEqq1~øa¡’ù|s9zôèy¯#""""""""¢©Mdûvƒâ)J$áÙgŸÅu×]7¢Û›L&èt:ô÷÷#..~~~Âu===Ðétð÷÷GLL QWW‡´´´Ï'''ï½÷Ö­[‡¢¢"¸¹¹A«ÕëíÐÜÜŒÊÊJ(•Jh4§ëÚÚÚP^^~Îë¾íìÙ³¨¯¯Gdd$‚ƒƒ¿w.:Ïó¹öÚk‘+V\ÐýˆˆˆˆˆˆˆˆˆhâbôE’ÉdB+‹oóôôtjA,„¹J*•ž÷q†R*•P*•ç¼Îßß³fÍÑã…‡‡;mF8Ò¹ŒtžDDDDDDDDD4u°ôååå…°°0WOÀwÏe"Í“ˆˆˆˆˆˆˆˆˆ&V@OP©©©¦¢ø»æ2‘æIDDDDDDDDD hš¤R%þùϳðö>¤$5¢£•HX ODDDDDDDDt9cM‚Dâ…¢¢v<ö؇0›­ððpƒVŠää0$%©…/wWO•ˆˆˆˆˆˆˆˆˆFˆ4MFcžz*wݵ%%u(*ªEaa-tºZìÞ}C/ 22ÉÉŽ@ÚNGF@$¹xDDDDDDDDDôm  iB‘Ë¥HM@jj„Ó¸^߆ÂB=ŠŠjQTT‹íÛâ÷¿ÿ¬V||Ü‘˜¨FR’ ÉÉaHLT#1Q7­‚ˆˆˆˆˆˆˆˆˆÐt™ óGX˜?n¸!Eëî6¢¸Ø^-]P GAA-¶m;‚în#$14%’“ÕB(œ¬†JåçÂUM-  é²åå%GzºééaÌjµ¡ººƒÕÒ~xg϶üü<‘’ŽÄD•Ð_Z« …L&qÑ*ˆˆˆˆˆˆˆˆˆ&/Ð4©ˆÅ"h4Jh4J,^œ&Œ ½((У¸¸zäæVàƒÂh4C&“ ..DØèÐQ5èí•]þD6›ÍæêIL®ÞÄN$’ÂÇ' y°ÙŒ|w÷x˜Lõ°X:Ç`vã#;;+V¬·Ç3›­(/o„Ngoá¡ÓÕ¢°PÆFûs¢6;tl| ©TLJ ƒRéí•ÑTÇzœ¼òÊ?ñ·¿Àºu?ÂÍ7§ºz:t ðÂüùÓ0þ4aÌd² ´´:]í@Å´_}UŒÆÆN@p°«¥Õˆaµ4 Ðãàí·¿Ä›oþo¼±Ü©¢•èRÉdaãÂ¡š›»„¾Ò:]-¾úªÄ©Z:>>d ZZ…””0$$°·4>Ðc,;;/½´¿üåmX¶l¶«§CS„Ré«®Ò⪫´Â˜ÉdAYY#Š‹ëPX¨‡NW‹wßýì½¥½‘”¤Fr² öP[« eµ4]4Ðcèï?ŽÿùŸOðä“7à¿ÿûjWO‡¦8™L2ІC…;î˜)Œ;zK;ª¥,ÃÆÐßo†L&All°°Ù¡£¿tHˆ¯ WBDDDDDDDD— Ðcä‹/tøÿ/÷ß?k×Þèêé×¹zK›ÍV”—7B§«EQ‘ýkƯQW×.Ü')ÉÞWÚÑdÚ´PÈå|I!"""""""¢AL‹ÆÀáÃåxðÁ÷pçéxñÅÛ]=¢ &•СՆB« Åí·VK··÷ °°V¦óò*ðÁa4š!•Š3¼ZZ¥òsáJˆˆˆˆˆˆˆˆÈ•@²S§jpß}ŵ×&àµ×–A$¹zJD£ÆÏÏóæÅaÞ¼8aÌb±¢¢¢ :Ý`oé÷ß?½¾M¸Or²ZØô0)) Zm(ÜÝe®ZУ¨´´+W¾ƒéÓ£ðöÛ÷B"»zJDcN"#>>ññ!¸õÖéÂxGGÐWZ§«Ã‘#•ÈÎ>ŒÞÞ~H$bDG+Úw ¶ò ówáJˆˆˆˆˆˆˆˆh´1€%55­X¾ü/Ðh”øÛßþ 2™ÄÕS"r)__OdeÅ"++V³X¬¨ªjAa¡EEö`:;;55­…ÂéZ:9Ù^-íááæªeÑ%`= ZZº°lÙÛðóóDvöC ˈÎC"#&&11A¸å–Ájiƒ¡:]Ý@(]‹'ª±ukº»‹EÐh”Âf‡IIj$$¨è•ÑH0€¾DC–.}ðñÇ@¡pwñŒˆ.? …23c™#ŒY­6TW·  @âb{8ýÑGy¨©i…ÍfƒBáîÔW:)I ­6^^r®„ˆˆˆˆˆˆˆˆ†b} L& V­Úˆöölßþ(½]=%¢IÃQù¬Ñ(±xqš0ÞÙÙ'ÒEEµøæ=>ù人ìÕÒ‘‘HI CB‚ ‰‰öŠéÈÈnJDDDDDDDä  /’ÅbÅÿS§j°sçãÐh”®žÑ”àã㎌ŒhddD c6› UU-Nm<>ù䪪Z`³Ùàãã­V…¤${_éÄDÔðöfµ4ÑXb}‘ž}vöï/Áûï¯Bb¢ÊÕÓ!šÒD¢Ájé›nºBïî6:UKÕbçÎcèììƒH$BTTà@ õjé@ˆÅ¬–&"""""""  /Âk¯íŦM9ذá~ÌŸïêéÑyxyÉ‘ž®AzºF³Ùl¨©i¨”®ƒNW‹;Ž¡ªê_°Zmðò’#!!IIa¡´½•‡û»](Ðèý÷â÷¿ÿ~ó›â†R\="º@"‘½Otdd n¼q°Zº§§ÅÅö@ÚQ-ýé§Ça0ô"#«¥““ÕˆŠR²Zšˆˆˆˆˆˆˆè;0€¾»wŸÀ³ÏîÀÓOÿ÷Þ;×ÕÓ!¢Qäé醙3£0sf”ÓxMM+tºZ¡¿ôßÿ~o¾ùoX,VxzºA«µWK;*¥“’ÔP(<\´ """""""¢‰…ô8PŠÇÛ„{îÉÂc]çêéÑ8‰ˆ@DD€Ó'z{ûqút õ(*ªEqqöì9‰ŽŽ@x¸?ÕÓaHJR#:Z ‰Dìªe¹è((ÐcÕª¸å–éxùå»\="r17¤¥E --Âi\¯oƒNW‡ââ:èñÙgßà­·öÁl¶ÂÝ]­6T¨’v´ñðóótÑ*ˆˆˆˆˆˆˆˆÆèïQYÙŒ»ïþ RS#ðûßßÍ~¯Dt^aaþ óÇÂ…I˜ÑhFIIÐÂC§«Ã矠­­ Rù ½¥Átll0¤RVKÑåôwhjêĊ눀L&qõ”ˆè2#—K‘šÔTçjéúúètöM õø÷¿‹°~ý~˜L¸¹Iª¥UB¥tb¢Þ.ZÑÅa}C–/ðþû«àí-wñŒˆh2 õEh¨/®½6A3™,()©Øô°EEuØ·O‡ææ.@Hˆ *$'‡ UÓqq!|sŒˆˆˆˆˆˆˆ&,Ðç`2Y°jÕF´·÷bÇŽÇXuHDãB&“ %% ))aNã(.®Ea¡=˜Þ¿¿ï¾ûL& d2 âãC„MSR Fp°‹VADDDDDDD4ˆô·X,V<øà{8uª;w>ލ¨@WO‰ˆ¦¸à`kqÕUZaÌd² ¬¬Aè-]TT‹wßý €Ré-´ïHH°÷—ÖjCY-MDDDDDDDãŠô·<ûìüç?§±iÓƒHLT¹z:DDç$“IªžÕ¸óÎta¼¥¥Khß¡ÓÕâàÁ2lÜxýýfÈdÄÆÙôÐÞÊ#4Ô×…+!""""""¢ÉlÊÐF£rù¹—ýÊ+ÿĦM9ذá~deÅŽó̈ˆ.]` 7æÏŸ†ùó§ cf³åå(.®Ca¡:]-6n<€ººv€¿¿—ÐWÚNkµªó¾VÔ”Kî¿V®œƒü Íiüý÷âÍ7ÿW^Y‚nHqÑ숈FŸT*†V ­6·Ý6CooïAaa-Š‹íÓyyøðÃCèë3A*#::Hhãáè1æï•ÑåfJÐÇWcÿþâ ¼îBè¿ÿý8ž}vž~ú¸çž,Ï’ˆh|øùybÞ¼8Ì›'ŒY,Vœ9ÓŒ¢¢ÚVµøðÃC8{¶ àëë9ÐWÚ^-œ­6n®ZM`"›Ífsõ$ÆË=÷¼ƒÿüç4¬V D"1þò—{áë뉕+×ãž{²ðòËw¹zŠM­~ëÖýwÜ1ÓÕS!¢IÈ`è¥ë„pº¸¸==ýHÄˆŠ Úx$%ÙêÈHnâJDDDDDD4ÕM™Z§«ÅÂ…¯Á±\±DË¥¸é¦TüéO+!‰\:ÇKÁšˆÆ›ÕjCUUó@{0]TT‹ššVØl6(îBëŽÄDû¦‡ ¡ðò’»zêDDDDDDD4N¦L Ž?üáÿ ‘ˆa6[V+ ÛÐ×gÆ 7$_Öá3‘+ˆÅ"DG!::‹öÕïììCqqt:û¦‡µøä“#èê2B,!2Ò^-`¯–NLT!**¯ÃDDDDDDD“Д +*š°gÏI|»ØÛB?úè&H$âaÑ…óñqGFF422¢…1›Í†ªªètuÐéì­<¶o?‚ßÿ¾V« ÞÞr$$¨…Ž6>>î.\ ]ª)@ÿñÎÕÏCÙCh+~ø¼ýö½NU|DD4:D"4%4%nºé a¼»Ûˆââú õÐéêðé§Ç`0ôA$!""@¨’NLT#9Y¨(%ÄbVK]&}è³gÛ•õ,ëˆnÿ<3"ÇxV£= ‰h2©®nÚxÕ¢°PªªX,Vxzº!!ÁHn|Èji""""""¢‰gÒW@¯[÷ÄbÀ2¼ø •Ša±ØpÕUÓ°ví¢Ë2|&"šl"#ˆnHÆz{ûQRR/lv¨ÓÕb÷î0z…jéädµS0ÍÞÒDDDDDDD®5©è†6o> “ixõ³L&ÙlÅÂ…ÉxòÉEHI sÁ ‰ˆh¤<<Ü0}z$¦Ow~£ðìÙ6é…`zçÎcøÃþ«Õwhµ*$'ÛûJ''‡A« …——ÜE« """"""šZ&uýÎ;û‡ÉdX­V,^<kÖ\øøñŸšðp„‡û;UK;zK;‚éÂÂZìØq}‹EˆŠR"9yh 0„‡û»pDDDDDDD“Ó¤  ÛÚºñ·¿€Édï½!•J`³Ù°tél<öØuˆŠ tñ ‰ˆh¬xyÉ‘ž…ôô(aÌf³¡ªªÅ©…Ç–-¹¨®n(CZx¨‘”†„äòIû«’ˆˆˆˆˆˆhÌMÚ¿ªÿð‡ÿC_Ÿ b±R©?þñ<<üð5P©ü\=5""r‘HF F‰›oNÆ;;ûé:êqâD5¶lÉEoo?$1bb‚„öIIöV¡¡¾.\ ÑåcXÝÐÐN犹Œšž3Þ}÷+À-·Ä⦛â P¸¡¤äJJFç1®¹æšÑ9¹”;23c™#ŒY,VTUµ  @®……z¼ÿþAèõm€€/$%… ÓIIjhµ¡É$®ZƨZ¹r%6oÞìêiŒšììl¬X±ÂÕÓ """""š’Î[œœ<žóUŸ|r>z–/O‡Bá1ªÇnhh@ss󨓈ˆ&GåsLLn½uº0ÞÞÞ3ÐSZ®‡•á½÷Àh4C&“ ..IIj$&ª’†¤¤0(•Þ.\ÉÅ“ÉdÈÎÎvõ4.ÙÒ¥K]="""""¢)í¼tPPÐxÎcT=üðõ‰Dcrl«ÕÊšˆhŠòóóÄܹq˜;7N3›­(/o„NW+TL¿ûîWhh0‚ƒ}úJ‡ ›ÆÅ…@*»j#²dÉ,Y²ÄÕÓ """""¢Ëܤì=Vá3Ñ·I¥bhµ¡ÐjCqûí3…ñ––.êQTT‡¢"=öï/Æ»ï~“É™L‚„•ÐS:1Q””0øùyŽÉ_zi7,Ht ΉˆˆˆˆˆˆÆÃ¤  ‰ˆˆ\-0ÐW]¥ÅUWi…1“É‚ÒÒ†µ(,¬Å¿ÿ]„––.€Jå'ô•vlz­„DriÕÒo½µo½µ·Þ:¿üåmÜD‘ˆˆˆˆˆˆÆ h""¢q"“I„ªç¡:„JéÂÂZ|þyÞ~{Ìf+<<Ü Õ†Ò*$%ÙÛxŒtƒººváügŸÂ¿þU€'Ÿ\„‡ºfÒlšHDDDDDDh""" ñEHˆ/®½6A3Í()©Øô°:]-öì9‰ŽŽ@dd UHNCB‚}Óè¨Àam¨N: ‘°ÙìØ&“¿ýí?ñþûñ»ß-uzL""""""¢ÑÆšˆˆh’Ë¥HM@jj„Ó¸^߆¢¢Zák×®c¨¬l†Õjƒ——‰‰j$&Úé¤$5Ž­„L&E¿Y8†ÕjE}}V®\… “ð«_ÝF9ÞK$"""""¢)à’è¶¶6¼ûî»øÙÏ~6ó!""¢ïæ°0\}²0ÖÛÛ®n ”¶o|¸k×1tvö!0Ð &“yØq,+૯JpõÕ¿ÅêÕ ð“Ÿ\wwÙÏ©¬¬ À}÷ÝwÑë:—îînüñÄ/~ñ‹Q=.ŸKÛÕ@GG6lØpÉYµjΜ9sÉÇ!""šj<<Ü0sfî¹' ÿû¿?Ä®]ÿÅÅÿ‹œœga2Y`³ÿ¾Ž¶ëÖ}¬¬—°gÏÉ ~üââbüå/¹„œ[gg'žþùQ?.ŸK 5 JJJ.y"{÷îEGGÇ%‡ˆˆˆ‘H¹\ ƒ¡oD·7›­hlìă¾‡ýûƒÑÝÍ ‰ˆˆˆˆˆèÒ]rÝÐЀ[n¹E¸¼ÿ~¤¥¥A.—#!!Ÿ~ú©pݳÏ>‹   Èår\{íµ8{ö,`Ù²ehllIJeËðõ×_£±±‹-Â|???á›o¾Á¼yóàîîŽiÓ¦aóæÍÂq·lÙ‚¸¸8H¥R¨T*¼úê«€––,\¸o¼ñÔj5‚‚‚°qãF<õÔS ‚J¥ÂG}t©OÑ„tòd ¾µ'á9I$b¸¹ vå²Ù€ãÇý±k×±?–ÕjÅã?…Bàà`üæ7¿0:¿‹ÿú׿"** ^^^¸ÿþûaµZG †^fôõ™ÐÔ$GPñ‚+66VxRRRðÅ_—/öw±D"APPpùBw‹Å^(*jÇ×_Ÿ†Bá77)<=Ýàãã¹\ //ùˆˆˆˆˆˆ.̨Ð …Nc---ðõõ…ÍfÃ믿Ž×_ÇŽÛo¾‰»îº ÇŽ»¿¤óG„¸òÊ+±wï^a¬··"‘»víÂ3Ï<ƒíÛ·cîܹH$ç µ‰ˆˆ.'CúûÍèî6¢§Ç£ÑŒÎÎ>ôõ9‡Æ½½ýèì´ß¶«Ëˆžž~ô÷›ÑÑ1*;nÛÓÓîî>˜ÍßUåì‹k¯m¼ ¹677;]nllD@@ÀE¬ztÉåáØ¸±7–ž÷6^^rÈåRøø¸ÃÃà r¹ …ÜÝepw—A¡ð€\.…‡‡ w¸¹Ùƒkoo9ÜÜì÷óôtƒ\.ƒûÀý¤ðõõÇ•ML£@_ýõxñÅQQQ˜˜444`ûöíøàƒðÊ+¯à³Ï>Ã0{ölÜ{ク÷Þ{GtÜ… â©§ž‚N§Cbb"zzz0kÖ,<÷ÜshiiARR®¼òJ@NN Ãh.‹ˆˆhD,+ººúÐÑÑ‹în{ÐÛÕeDgg †^tuâác]]}èî6¢½½ýýöPùû C==CTGp(§>>öÛz{Ëáéé77)|}íÁêÐÕÓÓ <ò௽²²{öìÁâÅ‹ÑÙÙ‰õë×cõêÕ|œ]»v!..)))|ßséí-ÁÛo?‹Ûo¿íí½0‡†÷ôôØŸû¾>3zzŒèîî‡ÑhBggz{M0M¨®nA_Ÿ F£C/úúLèí5¡³³V«í;ßþüºÁ××C­í_îðõõ€ûÀ¸;¼½åðñq‡Bá!ÜÆq{†ÙDDDDDt¹ÕzúôéX»v-ÒÓÓ‘‘‘cÇŽaéÒ¥¸ñÆ‘’’‚wÞy©©©Æ‘#Gðꫯ ÷ Æc=†?þñ q:n||<~ýë_cΜ9ÈÈÈ@qq1æÎ‹eË–A¯×ã׿þ5®¾új¸¹¹A&“!&&k×®ÅúõëGsyDD4Éõõ™ÐÑÑ ƒÁþÕÞn?uŒutôç× ½èÈßö`Ñ4ù *J oo9 wøø ÁÞÞî¶rxxØCc??{ ·1{D¢ïUÏeΜ9xòÉ'ñꫯâôéÓ˜1c|ðA´´´\ÐqÖ¬YƒU«VZ 2™¾¾žcâšLŽÛˆþ~{…zOO¿SXm4šÑÑÑ#¼áø~©ªjAggººúÐÙiÞ°8oo9¼¼Üáãcªíkòø<¯PxÀÏÏÓé¼B᱘­Çˆˆˆˆˆhü‰l6›Ó_™ Ðét¸æškFt«Õж¶6 c•••8}ú44SOh£Ñˆ¼¼<ôõõ!-- ÁÁÁÂuMMM8~ü8222àïïÎÇÒëõ(,,DXX’““…qƒÁ€¼¼<#55555¨¨¨ÀÕW_=¢5\ˆ }~Æ‹ZýÖ­ûî¸c¦«§BDäR&“­­ÝhkëF[[ÏÀi÷¹÷[ç{„óF£yØñ$±ä+ÜóñqBe//9|}=œ*W½¼äP(<\ðL\¼•+W²³³/è~}}}ÈÉɯ¯¯°9°«I$žøõ¯U«V 8ØÇÕÓGX=´:Þ`è«uŸðýëøžv|/ }ç<®Bá>ð}<<¬¶ŸÚ/ûû{! À Þð÷÷‚·7ûdÑÅ»äzª™¨Ïh"šŒº»hkëAkk—S˜ÜÚ:xÞ~}·p›îîá¤öjÑá!²Báá¼ Þf0`žŠáÛÅБ§g"üünxx¸!**Ðé+2R9p7·Qý`˜ËX­¶*ýÁ7W†žÿvpýíÛšL§ãÉdx Á´¿¿í§ö/Oxœz! À …»‹VODDDDDÍäøK‹ˆˆ. íí=hjêDKK;ÑÜl?oÿê0÷÷;W$K$bøû{:_¡¡¾HLT _Ρ˜ã¼T*vÑŠ/‹:]òò*›[ÜÜÌžÝêêiŠÞÞ¼öÚÏ1}ú|TW· ªÊþ•ŸŸ|r­­Ý±X„ÐPß0ÚNk4Já|` ·‹W2rb±~~žð󻸖#}oê8~?QÐÚÚòòÆÛœûgU*;ÖŽŸÇà`½ Tú 8X¥ÒAA>=W"""""šø@ÑE³Zmhn¶ÈÍÍhl4 ¥¥MMhj2A³#tZY)‰ Tz#0ÐöªÉøø!¬òó 압܈mtôõ™püx5rsË‘ŸùùgÐÕe„BáÙ³£¡RaµNŽ~ÁR©?ŽiƬYbÜu×,Èd§ë;;û„`º²²Y8Ÿ›[½¾Møžõö–#*J9¤rz°Š:<<`Øq/g>>öåQQßãC?­04¼Z×Ô´âøñª×‹.§ e2 ”Jù 8ØÞV (È~>$DÀ@oá5ƒˆˆˆˆˆ.  ‰ˆh˜ŽŽÔÕu ®®†pÙ"ÛÃåÁÊåo‡HŽÈQݨժä¥Ò[¨zt„Î +“ÇC{{òò*—wyygpòd5L& T*?dfÆà¿¸™™1ÐjC!‹°rå~WOyÔH$¾8t¨{÷þ îî2Ìš¥Aff,æÎÃÌ™QðñqGrr’“ÆÝ×b±B¯osªœ®®nÁÁƒeؼ9=!†Zí'ÓC+§£¢§Du¯——½ßyxø¹÷ñø¶¡o^55ÐÔÔ‰ææ®×ûé©SgÑÚj¿Ùlîko â  Á`:(H!¼Î¨Õ~ õEh¨/ÜÝecµd"""""!ÐDDSˆÉdAc£uuí¨«ë@Cƒý|CƒµµíÂå¾>“pww™P•àˆˆ¤§ke{ðã8ïïïåÂÕ‘ÃÙ³mÈÍ-œ+pút`Ú´Ìžƒÿx.23cG^ÎŒÆ3xþùé˜;÷>\ŽC‡ÊðÑG¹xýõ½Ë¥˜1# sçÆaΜX¤§GÁÃÃM¸¯D"Fd¤=Tž?ø±;:z*§[œBêJQ[Û&„¦ …ǰ–Ž/µÚJ¶ˆ‹E¶¿®$&ª¾ó¶6› --ÝhnîÞ knîrú¤EQQ-ššºÐÚêüI /„„(æ‡_¨T¾P©ìçíAµ‚¯[DDDDDcŒ4Ñ$ÑÞÞƒúúŽ`¹µµíasêêìç;…Û‹Å"ù $Ä^)˜Š+¯œ†°0„„(jj¸™ØÄfµÚPRRÜÜ ¡‡s]];d2 ÒÒ"qÝuIxúé`öì˜ï­ÄÕëÛðñÇù8vÌÓ§·Ó Æ–\wÞ)Oî¼3Ë—gjjZ‘“SŽœœ2lß~o¼ñ9d2 ¦ODVV,²²â‘ OO·óÛ×ש©žHMvÉd^ßæT9]YÙŒýû‹Q]Ý‚ÎÎ>öjÞ°0ÿaÁtT”=¬æÏß`»¥ÒÀ÷‡ÕMM]¨¯oG}}jkí¯‡uuí¨©iE~þÔÕµ£«kp³R¹\ •Ê^5=´zZ¥òÆ‚‚Sò""""¢ÑÀšˆè2ÐßoÆÙ³m8{¶g϶¡¦¦U¸ÜÐ`@}}‡SÕ²‡‡ÂÂü¬€Jå‡iÓBª¨üS@­öƒRé3©úÖNýýfœ8Q-T7çåÁÐ oo922¢ñ£e!333fDލý@w·Ÿ}ö ¶mËÇÁƒ¥ð‚yÒô€¶ZMHDX½úCøû{âÎ;Ó±reâãC€¥K3µµí8t¨ ‡—c÷î“xóÍC*#--sæÄbΜXdfÆÀÛ[>¢Ç•É$Ðh”Ðh”ç¼¾µµ{ œnBêòòFìÛ§C]]»ÐÚÆßß sÏéÈH%4š@¨T~‹'Ç¿Óh‰+«ÏõÆ€CW—uuí›vöO‚t@¯oGYY#êëÛÑÔÔ›ÍþïàxÃÎT‡‡Ûß4ˆˆ@DDÂÃøfÑyˆlŽÿYhhh€N§Ã5×\ã¢)MlõùQ«ŸÀºu?ÂwÌtõTˆè"8æššÖpy0h®®nEc£AB¼½åBà1ø±r{°l¯ØcÕòdb0ô!/¯ùùöÀùøñjô÷›¢ÀìÙ1ÈÌŒÁìÙ1HLT¸§¶ÍfCnn¶nÍÞ='ÑßoÆ‚‰X¾< $â¾ûîdggåÒÆ…H$Bvv6,ø¶lÉÅÇ硪ªééÜsO/Nƒ—×ðP¹¡¡c BÚ^%]VÖ‰DŒ+®GVÖ` ­PxŒúœûûͨ©iV=íhóÑÓÓÀrGD8UMÝ$ñ\뢑s´,ª­µÕö°ÚÞ¾hè€~~žCBiáuÚ1ö]ÕôDDDDD“è 4QŸÐD›Ñhv •ƒfû塳;ÂÃý‚ {áðpö+äêë;pøp9òóÏàðá ””ÔÁjµ!..ŽÀ9ú¼•µß¥²²Û¶åcçÎc¨¬lFjj–-ËÀ-·Ìho`·råJ“+€^±b{Ë’ƒK‘}{÷~™L‚;eË2‘žuÞã45u"'§¹¹ö>Ò§O7@,!1Q…¬¬8̇ÌÌïos2šš:…PÚP;ÂêúúávJ¥÷°PZ£±_ Q@$bõô¥2ͨ®nAuõà›‡C_ã[Zº„Ûz ¯çŽpÚVGE)!—óƒ‰DDDD49ñºDD£Àf³¡¾¾••-¨¬lBee‹S5óÐ*9…Â]ÒÒ"°xqÚP¾¾c`ÑÄ`³ÙPZÚ€¼¼3BçššVH¥öJÛ+¯ŒÇSO݈ٳ£èýý<‡în#öì9‰­[ó›[À@/Üyg:–-ËüÞÍß&#±X„+¯œ†+¯œ†öölÛ–>ÊŦM9HLTaùòL,Y’1,H òÁ­·NÇ­·N`o¡‘“S†Ã‡+pà@)6lø@«U ljƒ9sb/úßí»ù (Èééša×f¡­‡=¤¶Ÿþã§PUÕ £Ñ ÀÞ÷ØÑÖch0íIû²?ññ!ˆ9çõ==ýŸdiN·áÀRÔÔ´¢­­[¸mHˆbH(&M¢£• õ¯%ºóV@¹jNZSS°šh ²Zm¨­mGeeΜiFeeóÓ&!Øñò’#*j°r922P¨hfÀ<µ™Lœ:U#ÎùùgÐÖÖ OO7¤§kZjDcæLÍ%}\ßQå»uk>ûìX,V,Z”‚¥Kgãšk´ßÛªcåʕؼy3–,Y"ŒuvºÁÃà ©ÔzÑó&“==2øúÚ7™Û¶m›Sôù=Z…­[s±sç1˜LÜxãX¹ræÍ‹QŸåööäæV '§ ‡•A§³W®O›2в#YY± ò•u^¬†ûeß®œ®ªjFSÓà&¥!!¾ßªœì?ìÚ5L&CŸSÕtuõà›—UU-èî¶{yÉ¡Ñ(­r„ØØ`þ{Ñ„7,€îèèÀÙ³g]5ŸËFrr²«§à„4ÑèikëFYY#ÊÊP^Þ„òòFTT4¡ªªýýöY¡ð ÕƒÑÑA HÐÕeD~þ9bœ«B_Ÿ J¥722¢1gN,22¢‘’©tdý›¿Kyy#vì8Š?·^߆ôô(Üyg:î¸#ý‚ZC¼ùæ›8pàÀfjj¨©ñFTT'ÂÃ;¿çÞ#ÓÔ䉒ÌŸ¯•ã9œ=ëª*_¨T]Ðh ‹mxüñÇ1þüÝßQ1¾iSŽ­DTT –.»ïμ *Tƒ¡¹¹8|ØÞGº à,Ìf+ââ‚‘•‡9sb1wn,BB&NekOOÿ·‚éÁ kjZ…×?·sÓöÓ¸¹ñv£¥±±8sføŸß§cb‚‚¸¸`ÄÅ… 66ì;MDDDD®7,€¦Ëh¢ c6[QSÓ‚²²F”–6 ¢¢ ¥¥ (+k>íå%Gll0bb‚$TœEG+À>Ì4\CƒyyB; ®‹ÑÑAÈÈÐsllð¨=¦ÁЇ¿ÿý8¶nÍÃÑ£• ñÅ8 Ë–ÍF\Ü¥=Ž^߆GÝ„“'«ñüó·á¾ûæZßà;áÑG?DmíïGåxC}üq>ž~‚ƒøÃV`æÌó÷vþ.¥¥ ÈÎÎÁöíGÑÞÞƒk®ÑbåÊ,\w]d2É««Ë(Ò‡—ãäÉj˜Íöï Ǧ†sçÆA­ö»¨¹Ž5«ÕÑf¨yXåtUU Z[í¯›b±¡¡¾Ní<†ö¡‹–$SU}}Ç@m§¿Ç*+›a2Y ‰îØØ`ÄLJ 66qqöó®®Ä'"""¢©…ô$ÁšèÜL& ΜiBII=JJêqú´ýÔñ:„…ù#&&hàóPÄÆÚ?Ö>‰‰*hµ¡ÐjU£öúBDDDDSèI‚4M%--](*ªEaa- õ(.®CiiúûÍHĈˆ@b¢ Ó¦Ùÿ€¶÷Ä ¹èêGššº»8v¬Jh§qìXzzúèôôÁv©©ácú½ÕÞÞƒ;bÛ¶#8q¢aaþXº4K–dŒzùÍ7g±zõ‡hmíÆo,Ç¢E)£zü¡Æ#€v¨¬lÆš5[püxÖ®½«W/¸äžÛV« û÷cëÖ<ìÝû <6› ë×…ßþö˜=;o¾¹ò‚6Ü»ã@öדõë÷ãw¿û'TøãW`Ú´ÐQ9vss¶o?‚ì씕5"%% wßyÁ›?~“É‚ãÇ«“cï!Ÿ==ýöÁœ9ƒ›ÆÇ‡Œù÷çx²Zm¨«kL;kGå.„„ ­žpª žH›=^NjkÛQRR®%%õ(,Ô£´´&“^^r$&ª‘’¢FrrRR‘ âï`""""†ô$Áš.w&“%%õ8q¢ß|sEEz×£»Û™L‚¸¸`$%… ü‘«FRR7¤KRQÑä8WT4A"C« Åœ9±Bà<ÖAìP:]¶nÍÅŽGÑÒÒÌÌ,[6‹§ÁËklÚz46vbÍšÍ8x°O=u#}ôºq©jïÚáôéz¬Y³:]-~ö³›ñÐC׌êz9ƒììÃØ³ç$L& -JÁÒ¥³qÍ5£Ó›ÛÁd²àÔ©!ÎË«@W—J¥723[vhµ¡“ºJµ»ÛèLWW·¢ººY8ßßoÈåRDE)‡ÓŽólÅ4R&“ÅÅu(,Ô oÕ¢³³R©qq!¿«Ã0cF$RRÂÙꊈˆˆhŠc=I0€¦Ë‰ÅbEiiNž¬Á©S58y²……zf(îHI Gb¢ÉÉöªª„ÛgÐ%1›­(*Ò ›æçW ±±îî2¤¥Eí4fÍŠ÷^§ÍÍ]صë>ùäNªF£Ä]wÍÂ]w¥y¿ß}ûtX³f3¼½Ý±nÝ0cFä˜>ÞP®  û÷Ã[oíÃë¯ïÅŒQøÃîõ纻ۈ={NbëÖ<>\•ÊË—Ï“Ö)€}MgqèPrs+›[ƒ¡þþ^ÈÌŒÚv$%©'u =”ÍfC}}Ç`zhPÝŒÆÆNá¶AA>ç ¦##ê;ež³‹e³ÙPUÕ"Ò……z|ó HĘ6-ii‘˜>=Ó§G 1QÍßëDDDDSèI‚4MT6› MBØ|âD ΢§§žžnHI GZZ„ð4©>>N®ÑÓÓãÇ«…Í«DW—~~žÈȈFf¦½¥FZZ¤KB“É‚}ûtøè£\ìÛ§ƒ››‹§aÙ²ÙÈÌŒóŸþ~3^zi76løwÝ•Ž—_¾ >>ã¼»2€v(*ªÅãg£²²¿üåí¸çž¬1yœ¡›G66Æ¥²Ýb±¢¨¨99åÈɱ‡Òíí=P(<™ƒ¬¬8deÅ"%%lT+³/'½½ýç¦OûúL77)""œÂé¡õXm::ÔÕµãäÉœ8Q'ì§C/ÜܤHI ¥í¿ÿãâBôMR  ' Ð4QôôôãĉjäçŸÁÑ£•8r¤íí=Ë¥HJRcúôH¤¦F 55Ó¦…LÙàƒFWKKòóÏ /Ï^áüÍ7ga2Yæ/T7Ïž ­6Ô¥opœ:Uƒ­[ó±{÷q´¶vcÞ¼x,[6‹¥ŒYùm¥¥ xä‘PSÓŠßü懸óÎôqyÜo›4`3àÕW?ÃÛo‰ ñúëË¡TzÉcY,Vìß_âÔÛ{¼Þx°Zm(.®CNN™Ð¶£µµ>>î˜=;YYqÈÌŒEZZÄ%oÐ8Y44ÎN74àø/t` ÷`:`à¼QQP©|ù{n›Í¾·Ã‰58~¼ 'OÖ  @ÞÞ~øùybÖ, ÒÓ5ÈȈÆôé‘lÝADDD4I0€ž$@“«èõmÈÏ?ƒ#GìasQÑàÆm³fE#=]ƒY³4ÐjCùq[5UU-Bïí$e– IDATæüü3(-m€X,‚VŠÌÌddÄ 33jµŸ«§Š¦¦NìÜy [·æB§«Ctt~øÃYXº4aaþã:—M›r𠻘¨Âºu?BTTà¸>þP%€vÈÍ­Àãg£¯Ï„×^[†ë¯OÓÇkoïÁÎG±uk¾ÐzeùòL,[–1.æÙl6œ>Ý€C‡Êðÿٻ﨨®µ àeéE@@ŠT¥7 ÆnTŒ jŠi_[bîMîMrÓL¢©ÆM5M#¢ˆ%Fcb§ ¨X@šô^‡60eŒŒÔe` ïo­, 3sfÏ)û ÏÙç݉‰â@ºªªzzÚðõu”ì˜w (º¶6A—@ºóÏ5hiip8;Ö´S0ÝQæc4ìì̆½ä"DÈÎ.GrrÇw‰Û((¨¦¦:&M _ßqðõ‡ÒÃY“ŸB!„ÈÐ*‚h2:FÐuii(/o€––&<=máëk??Gøø8ÀÂÂ@ÞÍ%*B(!3³L8'%ÝFE…x¿›<ÙN2Y ¿ÿ8Ž’wsˆK\œy04Ô¿¿ãrŽ˜2ÅNáö»ÔÔÄĤJ‚ÄéÓÝðÐC>X°À::¹´)!!ë×ÿÆ€/¾xÁÁÎriGwŠ@w8zô ^y%¦¦zøòËG0yòðLÎØýÂ…–.õAd¤<=m‡¥ ååUIÂèøø”•ÕCG‡oo{9!0Ð>>örÛ·•U{»ÅÅu]&Dì\棩©  ©©“ÁtÇÏÆÆºrþ$ÇÇããêÕ"¤¤ÜFr²ø¿††XZ!4Ô!!Î r–ë]„B!¤o@«  ‰,tœ““o£®®ææ r¾sK¶#\]ÇÈ»©D…p¹¼;#›Åÿ]½Z>_++ã;å4Æ!0ÐnnV 9AUEEHATT2rr*áìlÈH,_î;,¥ú"ˆðÉ''ðå—ÿ`Î|üq$LLôäÖžî9€€òòlܸ 9x饹X·nÖ°ŽFí¾_¹»[!22Ë—ûÂÔT>Û±  ‰‰¹’»`ŠŠj%w"„„ˆKvøø8PÝÞAª­mî2bº  EEâKKë!І†£zÑÞ^~ÿ= ‡_Ÿ/Äܹá3Üä:Á]qq]—I óó«ÁáhÀËËAANv†Ÿß8 ¤eˆÏ¢¤¤®ËˆéÎA5—Û ÐÐP‡µµ1ììL%"v.ó!¯‹CE !=½HrýÒ¥ÛhiiǸqæ˜1c^H'$ä /¯ Ž&O¶Ch¨ ‚‚œáëë@%;†P}}K¯Átaa JJê ˆGOëëkw1ÝRÛÙ™ÂÖÖTaú³ûÅç qùr.^ÌÆ™3™¸r¥ššê tBX˜;fÎtWˆc†B!d¤ ZEPM¤ÉÉ©ÄÙ³™8w.ññ¹hkãÃÓÓÓ¦¹bÆŒñðõ7b':"²—]Ñe„sII$„pOh` #ï¦HIIöï¿„èèKÈϯ–”Bxè!Œ­8¡yss^{í ¢£Sðä“Sñúë‹ ­­¸!’2Ѐ¸nï‡þ‰]»Î`î܉øè£H¹Ž"ÍϯFtô%ìß %%uðñq@d¤?/žCCÅ8¶**—ƒ¸¸ÄÇg£  ZZšðö¶—ÔìõñqPèýT•"””ÔIÊyt ±uuÍuu5ŒcÔeÄtçÍÍ•o’áúúœ?ëÎ_¨¬l„­­)ÂÂÆ#,Ì¡¡.ÐÓÓ–w3 !„BTÐ*‚hÒ™@ BRRNž¼†“'¯£¨¨ uÅÌ™î˜>ÝM)F›Å'Š‘QÖe„suutuµàã G9cÊ;¥õØ1Ò4&&qqÙ05ÕÃâÅS!ŸÉàúsõjžþWp¹­øì³U˜5k‚¼›Ô/e  ;ÄÅå`Ó¦½„øôÓU /×öˆD qqÙˆŠJÆñãé€Å‹'cåÊ8BMMqꦗ”Ô!>>Gò_QQ-´µ5áã〠 g„„8ÃÛÛ^éGß*+.—w'®îNׂÏtuµzÔîü¯¢_P`ŒáÆRœ9“3g2‘’rjjj t‚ž˜7o¢\ë÷B!„¨"  UФµµgÏÞ‰×ð÷ß7Q_ß‚I“ÆbþüIxà ðð°V¨ ‚('>_ˆ«W ‘˜(›/]º .—##]øû“Œpöò²UºQõAÞÁƒ)øãt´· 0s¦;V® ÀÌ™î 9¡c ;wžÁ¶mÇäŒ;†……rŒNTÖ¸ÜVüç?{?‚ÿýo‰B„n -ˆ‰IETÔ%¤§ÁÁa4V¬ðCD„ll¯¦zQQm—@º¤¤::øúŽCHˆxâÛÉ“íòØi„BÊÊîÒÕ(,¬íR×Ô4ÔÔÔ`iiØ#˜îøÙÒÒPΟ¤'.—‡ náĉëøûï›hllÅ”)ö˜?,ð”KÝwB!„UC´Š zdª­mÆ_]lj×qþü-…":aÞ¼I˜;w"ÍþN­¥¥iiù’À95µ<––†p¼SÃÙnnc ®®œ8rr*qàÀ%<˜Š’’:xyÙ""ÂK—úÀØXWÞÍëSee#6n܃øø¼úêB<÷Ü ¥ºÈ¤Ìt‡ØØ4¼új4llLðõ×ÁÍMqêmgd”!** 11©¨­mFHˆ "#ý±`§ÂÞPPPƒ„q}áB6** ««?¿qÒ^^vJwqk$hjjë4bºký颢Z´· ÚÚš°·Ýk8mgg*÷Iù|!rpüx:Nž¼ŽŠ .ÜÝ­0¾'æÏŸ¹¶B!DYQ­"(€9êêšqôèU>œ†ääÛÐÑá`æLwÌ;<à##Š̈âkhhAròmI9ôôbðùBØÙ™!0ðî„ãÆ™Ë»©ƒR_ß‚C‡Ò“ŠÔÔ|Œc„eËg2·þœ;w 6ìžž6¾þúQLžl'ï&Ý3U ñ(Þ^ø ׯãÍ7—`Íšy7© >_ˆÓ§3°o_NŸÎÀ¨Q,^<‘‘þðñqwó¤ÊË«’ŒŽNHÈAEzzÚð÷ÒAAÎðôT¾»-F‘ˆ¡¢¢¡GÝ鎟«ª%ϵ°0Lˆhoo[[SÉÏ––FÃz¡S$bHKËlj×qüx:òó«aoo†E‹&cÙ2_…ºàD!„¢è(€V@«¶ÖÖvœ_ˆmÛŽcçÎ3Ÿ‚­[W(ÍdŽÝ©J ˆëîúéI|ñÅߘ=ÛŸ| ùMPØ—êê¦;%:’‘Qgg DFúcùr_¥¨y›“SÙ%®ªj„¾¾6âŠà`'xxØ@CƒieÒÚÚÞ#˜.*ª½ós5ÚÚÄ£§µ´4%´©$¨ÿl6ä}aFF)޽ШØ4äçWÃÃÃË—û"<|ŠR?„B!òD´Š ZõðùBœ?Ÿ…C‡RqòäuðùB„…ÇÒ¥>˜3ÇCao¡&Š­¶¶ 9HLÌC||6nÝ*Œo%QàSSÅ ÏîWzzHAlljk›áïïˆÈH<ø ôô´åݼ+(¨ÁÚµ¿ ;»[¶<„ÈHy7iPT)€î‹õëcÀ_<Œà`gy7©OééEˆŠº„C‡RÑØÈÃŒnˆˆðÇܹ•fÀ¬¬rÄÇç"!!qqÙ¨­m†¡á¨;´ ‚ƒ1a‚µR\\"}«¨hÔœî^⣢‚‹Ž?eLMõºMŒh*)ïamm"³‘òŒ1¤¥ààÁ>|\n+‚ƒ±l™/,ð„¾¾òœW!„B† Ð*‚hÕqíZ1~ÿ=G^E]]3ðÐC>X°ÀS¡ëÑÅTUÕˆÄÄ\$&æ">>YYPWWƒ»ûÝÀ90ÐQåJ·TT4ààÁT<˜‚ŒŒ2…ŸŒ­?±±ixå•hØÙ™a×®Çà䤸eBú£Š4 .ï²yó>œ9o¼±HiF§öGUè¿ü·ß>Œ ¬ñÕWÀÎÎLÞMêWEEHÁž=‰Èϯ†»»"#ðÐC>=Z_ÞÍ»'"Cffâãsî”ÊCCC LLôèˆÐP»ÀÕÕ’BBVSÓ„ÂÂÚ^'H,+«‡@ êÀÖÖ¬Síé»?k2 ~—ËåáÏ?Ó•Œ¤¤<88ŒÆ£cåJ@@!„hA´rºy³¿þC‡RÑÞ.ÄâÅ“ñÈ#Aðõ'ï¦%QQÑ€¸¸œ;¡s.rs+¡©©OO[:!(Èþþã”¶NpcHJÊCtt þøã Z[ù˜6ÍUéJ ôæÆ¬]û jjš±}û*Ìží!ï&É”ªЀ¸DÄÚµ¿¢¸¸Û¶­@x¸rœ£;Ž«¨¨d;vííÌ™3+W`Æ 7¥¬±,1ܼY* ¤“’rÁåò0z´>‚‚Äwƒ;ÁÕ•&–)ø|!JJêî„Òµ=êúú€ººÆŒ1ê4jÚ¬Kj ƒËÎήÀ/¿Ä#::ííB,Z4kÖ„ÀÛÛ~¸?&!„BˆB ZEP­>ˆŒôÇâÅS`h¨ÜwY"¤§!!!ññ9HN¾ææ6XZ"(È!!Î qƒÃhy7•(‘ˆ¡¬¬¾[0]-)÷QUÕ(y®……ììFÃÀ@••\deU@KK+W`ãÆÙJÑ”B!d (€V@+®ÂÂ|óÍ9ìÛ—]]-<ñD(žx"ô¾'¼!ª-?¿IIy’QyÅÅuÐÒÒ„··=‚ƒè{Œ¥ú3 ¥xöì-<˜‚'®fÏö@D„¿Ò–èKBB.^xáWhh¨ã«¯¿¿j_œi4 ®Ñ¾~ý$%åâÕWâ¹çf(eýa‘ˆ!..QQÉ8~<°`'"#ý⢓ü "\½Zˆøø»tkk;¬¬Œâ,™ÄÕÞ^ñk{“á×ÒÒÞ¥œGç:Ô5hkãKžkd4 Öpu;»Ñ’‰mmÍ”þÂ!„BH  UЊçÆ|ýõi=zÖÖ&xöÙéX¹2`ćd`ŠŠj%5IãârPVV||ì茠 'øø8@[[ykߌŒ2DG'ãС˨¬äÂÇÇ~*1Ò²;‘ˆáóÏOáÓOObÎ|úéÊQŽg$Ѐx{ïÜy~ø'‚ƒñå—ÀÌLyG@vÜ™•ŒÔÔ|ØØ˜ "Â+Vø©Ôha>_ˆË— '¾8˜’’I¹Žà`gØÚšÊ»©D TTp‘]ލ¨Køë¯ëhnn»Ó¨¡ººž™˜èuª=mÚ¥µ 45Uç",!„BTÐ*‚hÅ‘””‡Ï??…sçnaÂk<ÿüL,Z4™þH îNxñb6rPPPmmMøú: 8ØÁÁΘ2ÅN©'Ï»_ÕÕMˆ‰IELL*ÒÓ‹`kkŠåË}U.Èꬦ¦ ëÖý†„„\¼ùæb<ñÄTy7i،ԺCZZžþW´· °sçc*QŽ)'§QQÉ8p ••\8"2Ò>è¥rõnÛÛHK»H§¦æ£­M{{3„„¸ 4Ô!!.07ï9A!ñùBÄĤ⫯þA^^æÍ›„+üÀáhÜ)ñqwätaa ššÚššê°±1­íÝI;× ¦;í!„¢H(€V@Ë_VV9Þ{ïNºà`g¼ð˜1ÃM)o¯&²S]Ý„„„»#œss+%5œ;jŠŽÄÎÚÛ8yò:LÅ™3ÐÑáHnåpTéã'../¼ð tt´ðÍ7k”²&ð`ŒôOr¶iÓïøûïxå•xþù™*±Ïw”ÎÙ¿?'O^‡£ôRé㺭M€ÔÔ|\¼˜¸¸l\¾\@7·1 u•”í04%ï¦%1üùg:¾øâ\¿^Œˆ¼òÊXZvy^mms¯Átaa-JKë ˆ:ÝFN–Õ¶¶¦#òB7!„Bä‡hA´ü”•Õã£N :úÜÝ­ðßÿ>ˆ3ÆË»YDNZ‹¸¸ÄÇg#3³êêjðò²•Ldåïï8"& ”&55¤àðáËhlä!$Ä~X°À::y7oHu.¹1wîD|úéÊJQ-ÆÃwßÇ{ïÅ´i®Ø¾}µR—ä设¾‡¥"*êÒÓ‹àà0+Vø!"Â66&ònÞinnCbbââ²pñb6nÞ,…šš&N´‘ÒŽT–‹ôÀÃá×ñÞ{ÇPSÓ„gŸuëÐ]|¾¥¥õ]êMwÕ……µ¨«k¨««ÁÒÒööf=J|ØÚšõ½ !„B‹hAôðãr[ñå—ÿàûïÏcôh}¼úêB„‡{«ÄäKdàššÚ˜˜‹øølÄÇçâúõbÀ„ Öp t‚jÕ-¾%%uˆŽ¾„˜˜TääTÂÕu V¬ðÅòå¾°´4’wó†ÅH.¹ÑÐ]¥¦à¹ç~†P(R™’Ýed”!** 11©¨­mFHˆ V® ÀÂ…ž*?³®®YRïÿâÅlääˆï†ñö¶Gh¨+BC]àímGCÞM% ¢½]€¼ˆíÛÿ¨QlÚ4?4¨’n\.ïN8]-™±#¬.*ªŸ/èèpºÔ›îªmmÅ!5]8!„BȽ¢ZEP=|vï¾€Ï??X¿~ž|r*ýÑ8B´¶¶#%E|›u||6®^-’Üf,®ûèHµïhnnñcWqð`*âã³al¬‹%K¼éOÏ‘Ur"))k×þ--ÍWr£¢¢S¦¼5 çúû;"6výÐ6HAÕ׷ॗö©\IŽîø|!NŸÎÀï¿'áŸnÂÀ@K—úŒ¨~¡¢¢.dKé’’:èêjÁßßQR?zâDhhÐü#]mm3¶oÿ ?ÿ‡qãÌñÎ;á˜6ÍMæï#1”•Õ÷¦;J|TU5Jžkaa ©=Ý=¨3ƈcB!¤  UÐÃ#5µ¯¾ìì <ûì ¼ðÂÌyëüHÒÞ.@jjâãÅ!AZZø|!ÍìŒÐP9ÓDSˆD qqÙ8p ǧƒÏ",lcÍšah‘bê\’cút7|þùê^/hñùBlÛv¯½ö R‡Ô 8p QQÉÈÉ©„»»V® ÀŠ~06Ö•wó†M~~5.^Ì–\ܬ®n‚‘‘.‚‚œ$´›[Ïþ…ŒùùÕxç#8qâ–/÷Å›o.Ör=­­í’‘Ò]kO‹æñøGC2Rºs0Ýñ³¡!ÝF!„ŒD@«  ‡VSSÞ{ï(~ý5ÁÁ.غu9ÍåÝ,2®\)@\\ââr’r<¶¶¦’’!!ΰ²2–wSNNN¥¤ÄFII&O¶ÃоXºÔG¥ƒ¤üüj¿ÈÍÝÖåÖ人flܸçÎÝÂk¯-Âÿýß4¥ ã·ßðŸÿ€P(êó9j¸zõ]˜šÒ%9àË/éQ’ãí·ã›oÎbË–‡ð䓪QÊ%55¿ÿž„Ç/ƒÏbî܉ˆˆðÇŒn#j$0c ™™åˆ‹ËÆ… YHJÊ—˃……BB\$´™¼›JäàÔ©øÏ µ•·ßÇòå¾òn ¢‚ÛebÄÎAuEED"ñŸœ&&z&FìP[[«äEjB!„P­2(€: ¹xñÅßÑÒÒ†7ß\‚eËã‹>‘ ¡P„ë×K—øø$%塹¹ ––F ¹;ÂÙÞ^µÿÐç󅨮n¼ç`½c‚±˜˜4¤¦æÃÊÊ=äƒÈH8;[ Qk‡HÄþÒÒnCMM K—ú`ÇŽ‡ˆKn¬[÷`×®5ðñ±—gS宾¾“&½Ñg­®®ŽÐPgìÛ·v˜[¦¸:.`œ=›Ù¥$Ç©S7ðøã?€1mmMœ9ó FË»¹2ÓQº'**IIy°°0Dd¤V® P©Ï9PB¡W¯!>>.d!%%­­í°³3ëH[XÐ8#ESS¶ný?ýt xbëÖ }ᮽ] ¤Å%>ª;ý\ƒÆF@SSÖÖ&]&Eì˜ÑÞÞL¡?#!„B¤£ZEP-{íí¼ÿþ1|ÿýyÌ›7 [·®ÀèÑÃw«#:yyU8> .ÜB\\¸ÜVŒ­  »#œœT?<íÀåò°pág˜<Ù_|ñp¿Ïï¨ß} ÿ}ššê˜7o"#ýâ2¢j?~ÿýy¼õV¬dd—šš>ýt%ª«±mÛq̘1¾Ï #Ñ£~‡³g3{ ¡ÕÔÔðùç«f4Ÿ¢`ŒáÛoÏáý÷aút7¼úê,]úš›y‰455àåe‹Ã‡7¨ä±—Ÿ_ßOÂþý—PYÉE@€#"#ýñàƒ^ÐÓÓ–wó䢽]€””|I }åJ!ø|!\]Ç 4TH»P©Âü¹ IDATƒàâÅl¼øâï„ؾ}5¦O—}mèáP[ÛÜ¥œGaa­¤ÄGiiñ9ÃÀ@GRÞ£s0Ý1A¢ªOfJ!„(3  UвuûvžyægÕâ½÷¢QÏJ®ªª/fãüù[¸p! ¥¥õÐ××FP3¦NuEHˆ Æ3"K#”–ÖcÕªÈήܺõ z-ÒÓ‹°ÿ%9rµµÍ tŠ~#6º}» aa¢½] ùššÔÕÕ ¦¼þúâ]r£7±±iX·î7I`ß™––&®_ß}ý‘·/ Djjž}ö'ÔÕµ@ ‚ÏJSWWÃ[o…ã駧ɱ…CK(áìÙ[Ø¿?'O^‡£%K¦`Õªøø8È»yrÕÜ܆¤¤<É„†7n”@MM “'Û"4ÔS§ºÂÏo•6PQ\.ÿýïÄÆ¦aãÆÙؼyžJ]ŒD()©ëPß ©ëꚈϿcÆÝ)çaÚ£¼‡¥¥¡œ? !„2²Q­"(€–£G¯àå—£àèhŽo¾YC5•Pssópá‚8pÎÌ,‡¦¦:¦L±ÇÔ©®˜6ÍS¦ØCSsäÔíÍÍ›¥X¹r'êë[!¡¡¡Ž-[ê2\Ça11©ÈÈ(ƒ££9–-óED„llLäØzù‰/Þôô"Â.ihhÀÒÒ.¼Ú¥4ZZÚááñÚÚ]~¯©©yó&âÛo—OÔÄë¯ÄO?ÅC$ê9‚\KKgμ‚qãT~‚úúDG_¾}IÈÈ(ƒ³³"#ý±|¹/,-äÝ<¹«­m–Ô¾p! 55J Ž’s »»µJ…”س'¯¿ƒÀ@'|õÕ£#¦\—ËëV{úîÏÅÅu’‹Ä::œn"v­C­«KçkB!d(Q­"(€<Æ>þø¶o?…'ŸœŠ7ÞXD·ò)‰Ž‰Åe5²–V>_ˆñã­0uªxôWPÓˆ¥Û—³g3ñÔS?‚ÏJnmUS\]ÇàÏ?_Âñãé8x0çÏgÁÀ@>è…ÈHÿ?Ò°Ã7ߜŻïéu$/ TÃçHêA“»Ö®ýü‘Þ%¸WS¾ÿþIÌŸ?IŽ-Slë>÷FSSžž¶8|xýˆš°/=½QQ—pèP*yxà Xµ*3gºßÓˆßÝ»/àÑGCTòÂdaa$ŒŽ‹ËAMMÌÌôâ‚©S]0uª+]lWׯ—àé§wC]] {ö<3".HI#1”—7t5]Ó¥uee£ä¹ææ‚éÑ’²ööf°²2¦ 6„BÈ Q­"(€ ö௿nàÃ#á'ï&©$.—ÆD02Òô²²²ÊqáBΟÏBbb.y°²2Æ´iâÀ94Ô•&dêÃï¿'âßÿÞÆÐk€ºqãl|ýõiLŸî†+ü0wîDºÓI^^¶u)Ð555lß¾ +VPÒÙßßÄc}àî¾§««›7·Ð~Ö‡’’:Ìœù‘¤îs_ÔÕÕðÆ‹ñì³3†¯q ¢½]€?þHǾ}Iˆ‹Ë†©©Þ Qàîn%õµ99•˜6í8;[à÷ߟSé»;D"†›7K%tRRZ[Ûáà0¡¡.wΟ.2©[_TT [[S´šÜ‹ÚÚf<ñÄÈήÀ?<‰  'y7Iaµ¶¶K&Bì©;ÿËãñŽÆŽ5íRoZüóhØÙ™ÂÐp”œ? !„¢ø(€V@ß?.·<ònß®Â?<Gy7I%¥¦æcÑ¢ÏññÇ‘X½:ðž__QÑ€óç³îÔrÎBEE uì"¹¥x$Mx?cøðÃ?ñùç§ú|‡£ðpo¼ñÆbšt³B¡>ø9nÜ(éQz£/çν Ë!n™òàó…ððxMM<â}nÙ2?|úi¤œ[¦˜ø|!.ÜŽë׋ô|G§Oÿ{D÷‡%%uØ¿ÿ¢£/!?¿>>ˆŒôÇâÅSz˜ïË/ÿÁû¦´´4ñùç«°p¡—Z>ü:&4줯^-c 6’s«Ÿß¸û*'´pág‰öî}–&bfmmlܸþ™Žï¾{sæL”w“”Ree# «»LŠØñoyyƒä‚ ±±n—rëPÛØ˜PýuB!@«  ïOuuV¯Þ…ººìÛ÷܈þƒ}¨ˆD _~ù>úè8„B†iÓܰoßsý¾®±‘‡„„\¸ ®c™•UG~~ã$#œ'O¶Q·šŸ/ÄÆ{qäÈe©#(qÄ«Wßés2‘lçÎ3زåhŸe44ÔÀ˜¸¤„··–,™‚… ½hò£nþõ¯ýØ¿?Y2Š|ÿþçê"çV)&>_ˆS§nàèÑ+øûï 47óÀáhô9_SS68vlãˆïE"†¸¸lDE%ãøñtÀ‚žX¹Ò!!.’ B.ÜŽ+W $Ç.cÀªUزe鈫ãÎå¶">>Gr‡Qnn%´µ5áç7N2¡¡§çØ~÷-.—‡ñãÿ@\Ú`×®54w˜1Æðê«°o_¾úêQ<øàȸ¨2\ÚÛ(.®“Ô›îTÕ€Ë_dÕÔT‡••q/µ8¤63£‹ý„BF  UÐ÷®¦¦ K—~¡!*j-ÆŽUÝ[n奼¼k×þ‚K—nKBO-- df~N—çòùB¤¥Hþè½r¥B!Ä Ö˜6M8:ޏ0@Z°fÍHKË—Ô{–FCCï½· =< ­S99•xà{ššê 8uLŸî† ¼0gŽø“"!!Ë–} 01ÑEzú»#>,>_ˆÄÄ\?žŽ£G¯¢¶¶©×0Z]] ÿýïƒxþù™rj©âáry8rä2öíKBZZFcÅ ?Ì›7³gÜ㜦¦:ììÌðÝwÃÝÝZN­–¿²²zÉÝG.ÜBee#ŒŒtì„©SÝ0mš+{Ö>zô ž{î0Æ$µs7l˜—^š«’u¶c o¼q?ÿ‡~x‚FB£ººæNµ§k»Ô¡.)©“|Ó××î%˜¾;ŠšJSBQ@«  ï —ËCdä×hhhÅ¡Cë`ii$ï&©œ¿þºŽõë÷¢µµ½[©5üòËÓxàwdf–ß¹í÷óÐÜÜ[[S„†ºÞ ]hdÈ ÕbÕª](,¬pÉ555ëâÆ-CÜ:å!а`Ág¸vM\¡#ôÓÕկܹX°ÀaaîÐÕ¥ $!1L™ò&ªªñôÓÓðÎ;KåÝ$¥#1\¾\ˆ'®áðáË(.®‡£>¿cRQ5œ=û •éEFF¢¢’“ 33dg—÷zgˆ††:ÔÕÕðÖ[áxüñɈé‘,3³ìN…øø47·ÁÚÚøN¹7„„¸ÀÂÂ7îÁ¡Ci].zª««ÃËk,¾ùæqºè?ÌþóñHè_}†î6Q%%u(*º;)bçuuÍÄý¸¥¥a§ÚÓf’ŸíìLéïB!J…hAôÀ "¬^½ ÙÙ8th=F÷ûš7n CË”—‡‡‡äç¶6Þ~û~þù"ô(UÀáh $Ä7n” ªªÆÆº u‘„ÎÛcÇŽ¸xñâð}ÔÔ¤…+WÄ#ÓÔÔÄ£"544Àc€P(„´3Àñã/bòd»~ß'""BVMVX·o¢¤D<©%‡#ÂèÑ­03ãÁÐõûÌ·aĆ†Ê´ (.X`EðÆ!1±_|±ãÇ÷A©¨:÷w²tñâEìØ±ã¾_ßܬ‰ÚÚQ¨®ÖEsóÝs!!%‰¹ihh(6lØ õ9|¾O=õ#ΜɄPØ÷Ý!êêj sÇŽ«ab¢‡ââb444ȺÉJ¡óþ/ˆpùrΟ×¾|¹nn–(-m—ÛÚãõŽ8Mlß¾ªKIˆÁîÿ#Ù@Î'B¡Ï<óââ²qôè&º0¥àyÝFNWK‚ꢢZ´· ÚÚš°·ÝebÄÎ#¨é¢xW#áûêPÚ¿¿¼›@QrtOq>úèO¤¦àر Ÿ ªª `n®tt„00hG~~ÜÝ]°zõ hkkBOOúúÚÐÖæ@__ººÚÐÑÑ„¾¾tuµ ­Íéu²®ÞDGG€Ên«–êêt`fÆÃرÐ×oT ððpÙ5ð‡ªª*¥é§{Ì……õJ>wïïd­°°pP}žžžzz°µmD[›&JKõÀåj¡¤DcÇ6ɸµŠ-::§ÿ'ˆÏ‘>âÑæçÎÝÂôé[±s瘚ò•êX“…ÞöMMuøùƒŸß8lÞ<ÍÍmHHÈÅ\Effr¯Ëáó…’0tåʼ÷ÞC5JkÐûÿH5Ð󉆆:víZƒ%Kv`Ó¦½8r„jÄ+2xxØÀÃæÇc"CEEC§ÚÓâ`:=½üq\ÉsÍÍ $“!v.ñaoo†1cŒFÜ> êßW‡JÇz#„Á¢šŒ(çÎÝ—_þƒ?Ž¸çšŽîîî°´¤#UTT ##°gO^{-"‘¨ß:Ãõõ-˜1c<&M+õy«W¯Æž={dÖÞ‘ìá‡Є f Éò÷ìÙƒÕ«Wɲ孱‘'Ó ‡ú6þ¡¡+k€P¨§4ííÜß %Y0âry¾˜¤*Äý]ÿsÑÒÒ> ç BÔÖ¶ "âk¬^=kÖøÂÃcÂ`š©T²ÿëéicÖ¬ HNΓ:QfG¹“R””‹ï¾{Bò°»7÷r>áp4°cÇØ=û#|ýõi¬_?4ßÈÐRWWƒ••1¬¬ŒØsbOߥÞtGP}òäuÔ µUÜçq8;Övv¦]‚éŽ G ÷Gªü}u¨ìÝ»wÀçUB‘†h2bTV6bÆ=X²d V­ ”wsTFK O=µ'N¤K-çЇ£S§nô@¢d>“®–-ó•wTÞH ŸïÅá×¥>ÞQZò‰Opíí"ìÙs—/—b÷î1°µ5†–*—ãǯõ>w&QTT‹ùó?ÅÂ…=GzÙsv¶À+¯,ÄÖ­`ölŒo%ï&ÓÑáÀÍm ÜÜÆôúxee£¤ötGP]¿ÿ¾‰òòÉ"##ÝNõ¦ÍºÕ66&àp4†ócõ“ŠgªƒM!J„h2"ˆD ë×ÿ==mlÛF·]ÉÊ•+Åxúéã÷ü:>_ˆØØ4¼ôÒÜ!h!„Ò¿¿ÿè55Õ‡ŽŽ& GAWW £FiÁÔTººZÐÑá@__zzZÐÑÑ‚¾¾6ÊËË`d4 55M@w“Ÿ_¼¼Ê?¿ãŽ©ØØBXZþjk›ajª7TÍ#þïÿ¦á?®â_ÿŠÂ‘#irÍÆÂÂðñqèñŸ/¾(Ô}õ¹s™(,¬—Ë ¾8gmmÜebÄŽRööfÃ2øºu¿V® À /Ì„““Å¿'!„Á¡šŒ?þx‰‰¹8rd#f”‘Û·«päÈ5˜šŽÂ˜1&ÐÖæ µµ\n+x<ÚÚøhnnëóõ99•¨¨h ‘ „BäâÊ•·îëu¥(ÜÝûŸ¤u¤ù矛R×ÐP¿ê‹ç ÐÕÕ‚±ñ(\½Zˆ††ZìÞ}ëÖ=mmúe¨hh¨cÛ¶˜3çcœ8qóçO’w“ˆ‚àp4àèhGÇÞëÛ×Õ5wšñn@ŸÒÒzÉúúÚ]‚iñ¿w'K”Åñ­««…––v8‚¨¨dÌ;ë×Ï”)Ô/Bˆ¢¢owDåUV6â£þÄúõ³àåe+ïæ¨ŒqãÌñ¿ÿÍGF†f̘Ñçóx<>x<>ZÑÚÚŽ¶6¸ÜÖ;5èhÔ !„¢*||ðÛoÏHBf}}èèp §§}}>'=×ý›7æL&XcÉ’)øè£?1wîÄ^'ƒ&¤;=˜˜èõú÷”@ BiidRÄŽ—.ÝÆ)¨­m ®[niiØ£ætGP=)|¾PR¿_ ‡Þÿ}'N\C@€#6nœ3ÆËð“B‘  ‰Ê{ÿý£01Ñ£ÉVäDG‡ŒuåÝB!„ ¡É“iô¡²ø×¿æcúô­ˆ‰IÅòåTŸ ަ¦úZÑf½>ÞØÈ“”÷((¨‘Ô¡NK+@QQ-ÚÛmmÍ.átןM¡§§Š nåw”óIIÉÇêÕßÀÍm 6nœœ MÍÞ/|B^Ô•–šZ€èè¼õÖ’a»3''?ýô“L–URR‚­[·âúõë÷½ŒÃ‡#99¹Çï›››ñþûï¦y¤“Žõ\WW‡?üP¦ËV¥m¥hÇǽP¥íÈn[H[Ncc#¶nÝ:¨åàÛo¿Ô2Ú~á¯óMwÒŽ]UÛN†ä¼0Ò Çþß¹ÿ’E_Ö¼÷u‡ÑX½:|b@“F2:˜0ÁóçOÂsÏÍÀ{ï-Ão¿=ƒ þƒÛ·?Djꛈ‰Y‡mÛ"°hÑdéâÚµbìÜyO<ñxàC¸¸¼ OÏ7ðè£ßõù>B¡8ˆÎʪÀ /ü†ÀÀwñÓOqàñø÷Ô^E<Çö¥¨¨UUU½>&ï~†B:£š¨,¡P„×^;ˆiÓ\1oÞðÕ·ËÌÌÄ®]»d²¬Ç{ W®\¦æý‡çÑÑшïñûÆÆFüïÿLóH'빡¡?üðƒL—­JÛJÑŽ{¡JÛݶ¶œ††¼õÖ[ƒZþíÛ·±cÇŽA- í7ú:ßt'íØUµí Çyáé§ŸÆíÛ·eþ>Cµ\E4ûçþK}Ywа¯oÚ4••\=zE®í #›šš¬¬Œ脈?¼üò<|ñÅÃ8|x._~yyâìÙWðóÏOcãÆÙ°µ5éw™Œ10ÆPVV×_?gçW`l<­­‚µIϱ½©©©A`` >ÜëãŠÐÏBH  ‰Êúãtdd”âÝw’wSî[aa!6mÚ„ñ㩎™²pppÀ­[·äÝŒŽB”ÓH;v»ŸNœ8††™¿ÏP-—¨.KKC,Y2»w_wS铎®®c0{¶žzjÂÂÆƒÃÑÐkÔÔ‘ˆaÔ¨ øá‡ldgW q‹‡Ï“O>‰êêjy7ƒB„h¢²¾þú4Âýáìl1ìï-‰°aÃÂÂÂ|ðñUêY³fáÓO?…µµ5ÌÍÍñã?âå—_†¹¹9¬¬¬°oß>ÀO<ÂÂB<öØc8~ü8V­Z…ØØXâÛ—'OžŒ˜˜@YY¦L™‚ºº:ìÛ·5jÂÃÃûýcôûᅦ½½=ôôôðÄO@$ áš:×®]CHHtttàêꊽ{÷¸»Î÷ìÙ'''èééáñLJPØ1iÉßððð€––¼½½‘’’"YæÙ³gáååmmmŒ?¾Ë肾ÖsEE-Z4 ÷>zô(œœœ ««‹'žxÿú׿püøñ>?£ªl«¡8>òóóÖå}"##‘””4¨} 7ª²Ùl iËéNÚ15íÀÃæÍ›±iÓ&0Ư¿þ:ÌÍÍ¡­­°°0KýÌ´ýºn¿Á;ÒÎ7}õÉÝݾ¨Òvê|^ˆŒŒDee%"##qá‚8ôëk]UVVbîܹøå—_`llŒ›7oâ÷߇³³3455aee…>ú¨Ïåöu¼õ¶\e$«þ«¯u*Í`û²Î佯?õÔ4¤¦àòåÂa}_BîWEjj½Oœ©¦¦--ñÝ5jðô‹gŸ ÃÏ??ŠŠX·Î..–zYõ1Ò¾§H{¬¯sC‡¯¾ú Œ1õûYäÝÏB€•`eµ‰ÅĤʻ ãâÅlfmý"»u«L&Ë;sæ +//Ðs=ÊÔÔÔØK/½Äš››Ù… ˜‘‘‹ŽŽfeeeL]]½ñÆL$±¯¿þš`[·ne"‘ˆ}øá‡ÌÙÙ™1ÆX}}=7n;qâãñxìå—_f?þ8cŒ±={ö0mmm¶fÍÆc¿ýöóòòbW®\aÚÚÚìàÁƒ¬µµ•}öÙg ûì³Ïz´³¬¬Œ`Ï<ó kkkc999ÌÈȈ>}zÀ를¼œ9sfÀÏ¿«W¯f«W¯Ðs›šš˜••ûòË/Çcÿüó344dqqq¬¬¬ŒiiiI>g^^366fýõ+**bìСC¬¥¥…mÙ²…ÙÛÛ3‘HÄÊË˙۽{7ãñx,66–éêê²ÌÌL©ëùöíÛLOO1Ƥ¾wnn.Ó××gGŽa­­­ìý÷ßgì×_íñùd±­îe}Þ+lÏž=zîPÌÌ̬Ë{yyy±S§NÝ÷>Ð,¶Ã½®¯{q¯Ç£¬¶…´å1mmmIûú:¦¤m‡3gÎ0&‰ØÚµkÙôéÓYSScŒ±'N0kkk–͸\.[¼x1{î¹çzý¼ƒÝ~CÙß1&î×ïåk™¬¶ßý;ÒúAi}r÷c·;EïïcìæÍ›ìæÍ›~~çóB]]³²²bgΜaíííR×UQQ5j[ºt)‹gÕÕÕL[[›:tˆñx×içþK}Yw²Ø×eu>Y²dÛ°Aöç%B†Â¦M{™µõ‹ÌÊj³¶~‘ÙÙmfVV›˜½ýf¶xñçì£þdçÏßbÍÍ]û6y|_•ö=EÚcÒÎ Œ1víÚ56nÜ8VUUŦOŸÎ¾ûî»^?‡,ú™{íŸ !¤/Ô“¨  »Zµj{ôÑoe¶¼{  MLLX{{»äw¯½ö[ºt©äK@Gx’••Å455ŸÏgŒ1–––Æ,--%¯srrb Œ1ÆNŸ>ÍlmmcŒ=óÌ3lݺuÌÞÞž1ÆØSO=Åþûßÿ²ÿûßlÕªU]Ú3iÒ$©tee¥äwÁÁÁìСCúœŒ)N½oß>æííÝåw6l`›6m’|ÎÒÒRÉcÓ¦McÑÑÑìã?f‹-’ü¾½½mݺ•577³]»v±iÓ¦uYæòåËÙÛo¿-u=w ûzï-[¶°‡zHò{‘HĬ¬¬¤ЃÙVŠ@ÅñÑ_ˆv?û@w²ØŒ)V-‹m!m9CiÇ”´ípæÌ6a¶víZ6zôhI›c,66–Y[[³ëׯ3ÆÄ°ÕÕÕõúy»ý1€“Åö»ßcGZ?(­Of¬ë±Û¢÷wŒ .€fŒ1vùòeƘôóWQQÀJJJcŒñx<–šz÷»^Çñ•Ýc¹ÒŽ·îËUÝÿ¥­Ó¾èûí˺“ž.«óÉá×™ÝfVQÁô²jaaÛ˜•Õ&æäôo¶råN¶cÇ)–œœÇÚÛR_'ï«Ò¾§H{LÚ¹¡¥¥…Mš4‰ýõ×_Œ16 z0ý ЄY¡DåܼYŠsçnaíÚ™rkƒ““8Žäÿ'Nœˆ²²2Éÿëééß&¦­­-™ˆ©¯ÛÉ 44 ÈÊʹsç°aÃ466"??§OŸÆÂ… QRR.¯›0aBŸËÔÐЀ¹¹¹äÿ¥½¿"ËÏÏGff&$ÿíÛ·õõõ’çXYYI~îøœùùùpuu•üžÃáà•W^®®.Š‹‹»<nnn(**ºçõ<÷VSSƒ££cŸËP•m Íñ1÷ºôF•¶ »mÑßrH=¦úÛ7oÞDii)qéš>ø –/_Žàà`ØÛÛcãÆ¨««ëóóÒö»¿c©·cGZ?8>YUÛNÒô·®ÔÕÕamm ÐÖÖFjj*æÎ ''',]º´ÏÛ¨¥oÝ—«¬d±ÿßË:í0˜¾¬;EÙ×,ð„™™>bbRåòþ„Ü‹_œƒ“'7ãÖ­ðûïÏaýúYðó7àºÐ%‹>FÚ÷iI;7lÙ²ÖÖÖ5j.^¼ˆ††äääàÚµk½~Eég!„h¢röïO†——-‚‚œäÖ†î“ATVVÂÔÔtPËäp8˜5köîÝ‹ææf¸¸¸`ÆŒøùçŸÁårTVVJm‹*244ÄÔ©S‘ŸŸßå¿;wJ}A@$&& 044ì±îjjj`dd$“õl``€ššš.¿“œ©’¡8>zÓÜÜÜïs¤í#¬¶Å@–#í˜êo;888àÀøøãñâ‹/JžËÃ'Ÿ|‚ššDGGƒÇãaÙ²e÷Ü~e5TÇÒ@ŽiýàýöÉ#QëªsP‹×^{ ¯¿þ:²²²péÒ¥>ƒMiÇ[÷å*+Yìÿ÷²N; ¦/STššêxè!ÄÆ¦É»)„ôkѢɘ4i,44†6ÊE#í{Š´Ç¤444P]]M›6aÓ¦MÈÉÉÁ¾}ûrè- IDATðùçŸËæƒBÈ¡š¨ÆŽ½Šðpo¹¶#??ÇŽ466â›o¾Á‚ ½Ü `ûöí˜6m`æÌ™øì³Ï0oÞ<¨««ãÀ¾}û$WçÓÓÓqþüyÉëcccqýúõA·CÑÌš5 .\@FF ¥¥>>>8tèÔ×Íž=GŽ‘„(IIIxä‘G ¡¡Ù³gãÔ©SÈËË žDêàÁƒ˜5kV¿ëy mŽEUU !!7oÞ”„ªº­€¡9>8P[[ @¼-srrú}´}PííÈn[ d9ÒŽ©þ¶ƒžž455±fÍŒ?¯¾ú*`Û¶m˜1c455áïïÇ{L2R í7÷{ìHëïµOVõí$ͽ¬«ââbL˜0S§N…††Àår{]®´ãMUÈbÿ¿—uÚa0}™"ïëááÞHO/B~¾ê\ d dÑÇHûž"í1iç†wÞy)))’ÿ|||ðúë¯ãûï¿ Øý !dd£š¨”””|”—7`Ñ"/¹¶#00/½ô¦OŸWWWØÛÛã™gžôrçÏŸ†††.tCC.\X²d fÏž & ,, ‹-êòÇæ¦M›;èv(¼ûî» ĬY³àêꊉ'"22Rêë°zõjxxx`Ö¬Y˜3g>úè#èëëcòäÉØ¼y3|||0gÎxxx`ùòå˜7o^¿ëy ,X€E‹ÁÃógÏÆæÍ›áåå---ª»­€¡9>Ƈ€€x{{cÉ’%ؼy3BBBú}´}PííÈn[ d9ÒŽ©þ¶Cg»víÂÏ?ÿŒ„„¬Y³EEEðôôĬY³wß}Wò\Ú~ý»ßcGZ?x¯}²ªo§î,,,°nÝ:¤¦¦ÞÓºZ²d 2220}útÌž=ï¾û.±yóæË•v¼© Yìÿý­ÓÞ ¦/Sä}}âD89YàÐ!M ›>FÚ÷iÝïß6€b÷3„‘M1ÆäÝ2xÖÖ/⫯ÅÒ¥òù+oÿûß!\½Z„Ç7Èt¹gÏž…»»;,--ü‡„„ÁÛ{x·Ëµk×PQQÙûTTT ##3fÌù²~øaÀž={üš’’ܸq666=j“J“Û·oÃÝݶ¶¶]ËÏÏGVVzÔ|ìm=‹D"ÔÕÕÁÌÌLê{VUU¡ºº|>µµµ†»»;öìÙƒÀÀÀ·} îg}”ššöìÙƒÕ«Wø5Cq|$&&ÿÑÐQ‹o ¤í²v?ëk î÷x”Õ¶èr¤S÷³ÚÚÚœœ ///XXXÜ÷gf(û;Ø»w/~øaÜë×2Yl¿Á;ÒÎ7÷Û'ÖPöw$#ÒÜÝÝôüîç…ªª*\¾|~~~0110ðuÅår‘œœ xzz¢¨¨yyy˜>}z¯Ë•v¼Ý UÞÿ¥­SidÝ—ÝYŸO>ùäŽ½Š³g_‘ÉòQ$òú¾*í{Jßaäuíì~ûgBénàa¢àD"†cÇ®âùçå7ù`g::: “Ë{Oš4 “&M’Ë{Ë“ lllîùu...pqqéõ±Ž‰?zÓÛzVWWï7|Ä·ýΜ9À„ ðí·ßB ÀÇÇçžÛ¯Œ†âøÐÔÔDhhè}½VÚ> êdµ-ºiÇÔýlmmmL:õž^£Jd±ýsìH;ßÜoŸ¬jºŸÌÍÍ1gΜ.Ïèº244ìrÇ­­­$àìm¹ÒŽ7U ‹ý_Ú:•FÖ}™"÷Æ'ŸœDFF)ÜÝ•{’JBdA}Œ´ï)ý}‡¡ó(!D•PMTFffÊË6^ÞM!¤_S¦LÁîÝ»ñÁ ¶¶ÎÎÎøóÏ?»Ì¶M!„2\œœ,àîn…cÇ®RM!„™¢š¨ŒÔÔ|ëÂÑÑ\ÞM!d@ÂÃÃ.ïfB!„¦OwÃÙ³™ø×¿æË»)„BQ!4 !Qiiðõu€ššš¼›B!„BˆÒ™6Í ééŨ¯o‘wS!„¢B(€&*ãÒ¥Ûðõ'ïfB!„¢”Àáhàüù,y7…B!*„h¢jjš—Woo{y7…B!„¥¤£ÃA@€#Ο¿%ï¦B!D…PMTBNN%ÀÅÅRÎ-!„B!DyM›æ†sç(€&„BˆìPMTBYY=8 ˜›È»)„B!„(­3ÜPRR‡ÜÜJy7…B!*‚h¢JJê`ee uuš€B!„ûåæf}}m¤¤äË»)„`h†Gýß}w·n•Ë»9„%E4Q ¥¥ °²2’w3!„BQjêêj˜<Ù—/È»)„Àç—BGG Ÿ}ö¶aÊ”·°iÓ^ÄĤ¢ªªQÞÍ#„( My7€Y(-­ƒÉ¾GUUÔÕéšMgUUUCºüèèh„‡‡é{(’¶6!´µ5†dÙÑÑÑX±bÅ,»cùç¾_?”ŸýÿÙ»ó°˜Þ÷àïiß´RHdË–½¬!ZlÙ÷=I”]Ù)|½ì[Y"D‘ì KÖi“Ö™óû£¯~–¶©™93Óýº.×¥fæyî™Îœç9÷y–ò`ŽtÌ ö÷²ªÕç(’z¤™°Ïwœœ mmm¡Ö!N$ýøçrÈÊJÇ9^TZµª‹7þc; Bª"ýÕÜ\.d!%ÝÄ"<äç3PV.½ÿˆììçØ³g<¸\>|ÈÈ爌|WWð`l¬só&èÞ½ :v¬ee½ Bˆ$¡4‘ ©©?P«–pG@ýú_¿~jäwùùù:t(Ûa”HAAªªmšz¡ÒeÉÉi¢FaÈȈBvvœ¢­   UèµÊÊÍ ®Þ ))ÇQPV©88YhjöÃ÷ï·Ÿ_¾ï«šš)deU‘ž^©ºÅÅÓ§OÙT‚8ŸóÈÿc†¾kB ŒãŸÃ‘ƒ––=òòÞáû÷»|¿^E¥ddTñý{ŒÀcgmÚ`Ïžäæ@Q‘.‰tà·¿ª¤Ôêê–Èʺ‡¬¬û®WNN êê=–ï_¯•‘Q„––-22¢Ÿ/¸uÙUTZ¢Zµ®ÈÊŠEVÖ0L^™¯‘••AÛ¶õжm=ÌžÝYY¹¸uë"#Ÿ#,,>>× ¨(‡Àܼ1ºwo‚æÍkÓ2™„‡a†í Håéë»bÇŽ18°-Û¡°bÀ€m06Öƒ——Û¡*äÌ™{˜1ã>}ò®tY<¬[w;w†ÃÁ¡=<=CUUQQН¬¬\,^| 'OÞ…“S,XÐrr•›eðþý7˜š®Âùó³Ñ¶m½r½&8øãðá)èÙÓ¸RõBùù\L˜°wï&àäÉhÑ¢6ße,_„ÿ}ƒ \…¡øúô) íÛ¯@pðl´kW¾ö”i‘˜˜Ó y ‡öXº´?´µÕ*\ÞܹÇqûö+DF.â;Ë0 ìí·BQQ'OΨp ÊÈÈÆž=س'²²²pr²Äøñ]+uýñùs:""ž#*ꢢ^àË—LÔ¨¡†.]%¤…=k™"¾h=Brr2pw·Å¡C“¾}7áÙ³D¶ÃšgÏÑ·ï&„‡ÇãСÉpw·­tò’’Ò€¯vv­1p`[Ì™ãÔÔ¬JÇ@!„}ùù\L™rwï¾A@€c…’Ï §§‰¤¤ Á'ôõ5¡£SÖ&U Ç`ß¾H˜›¯E||"ŽŸŽ­[GU*ùœ””ÀÀ1}ºe…Fs8,_Þ·n½Bhè“ Çñ'uueÌ™cÛ·—`ìØÎؼù ÌÌVÃ×÷:²³Ë ]œZµ40lXGlß>¬ÀÕ«óàäÔéé?àî~:¬D÷î^X¾<×®=«p=„ÉD h"5TTh­)"ù¬¬šáÊ•¹¨QC 66›áçw‹íÎÏïll6£F 5\¹2VVÍVöçÏ‘á fÍj|½nÍšA““Å‚´þ.!„H:.—‡3ŽàæÍÿàç7­[T¸,u|ù’‰ª8iÔÄÄ`; BDâÉ“°±ñÆÊ•ç0iRw„‡ÏG·n+]îž=¨^]C‡v¬píÚÂÎΫV#?Ÿ[é˜~¥©©‚ ú!&f †7ņ !èÔi5öîDNN~…Ëåp8hÖLÓ§[Âßßññž8~|:z÷n¨¨5jš5sLj¾Ø½;ññÒ;ð†RˆÐD*p¹\ÈÊÒáL¤C­Z œ)SºcáÂ@¸¸•ŠYY¹pvöÃÂ…˜2¥;g|íöÄÄ4Ô¨¡yyþ64ÔÐP·÷\¸ð'Oò¿F(!„ñÀåòàì쇰°x92íÛׯTy5kVC~>))Uo†L£Fºxù2‰í0ª¬¬\,_„~ý6AQQW®ÌÅ‚ý ¤Tñ͵ÊÈȆŸ_4¦L1ç»oú§Å‹mñþý7øùEW:®âT¯® ww[ܾ½¶ƒ§çytî¼D $é­¨(‡nÝÃÃÃaaóqïÞr¬];*ؼ9={®G»v+0wîq?@ZkeBÄí(A¤‚²²ÒÓ³Ùƒ‘““ÁÂ…6055‚³³ìì¶`Ïžñ¨_¿&Û¡UÈÓ§1mÚ!¤§gãèÑi07o"”z’’2 §§Y¡×vëÖ'vƒ‡ÇitîÜúú+‡B;x<sæ 4ô)œ33£J—ù³-HNΨÔ4|Idh¨-•3±ùéÊ•§pw?…ÌÌ\xy9`äH3p8‚Û0ïÈ‘hŒݹÒeÔÀ¤Iݰqãe ÜêêÊ•°ÚÚjX¶¬?¦OïmÛ®båÊsر#³fõÂðᦕN¤ÿôs¹ŽaÃ:‚ËåáÑ£¸~ýÂÃãqüø@ëÖ°´l só&hÝÚ€œ"áèL¤BõêªHIùÎv„œ¥eS\ºäyyYôíë-еßDÅÏïlm7COOW¯ÎZò(ÜüDWW½Â¯ww·…®®:fÏ>V%§[Bˆ¤bóçŸÀ™3÷°wïL —à Û—ªÆÈHÙÔÇ&R'))S¦ĸq{ѱcDF.ĨQš|ÎÍ-ÀÞ½‘3¦3ÔÕ•Ræ¬Y½[·^Hy¥ÑÑ©†U«âÖ-ôîݧѵ«'üýo£ €'кdeeЦ\]{#8xž|ÃŒ=^¶¼¼,<<ìü±± /¿,5àí=‘‘‹Ð¶m=Ìšu =z¬Ç¹s„žˆ 嘛7Áòå¹11K°d‰=`Õªs05]…îݽ°|yŽ&DÌPšHCÃHMÍ¢ÝrI•ТEm„„¸Âа&ú÷ߊ³gﳀµî\]ý1wî 8:Z" `:tt?¥±4ÙÐШü¦,rr2غuþû/ ÞÞ¡ˆŒBˆ íÛ‰M›.ÃÓs0ú÷o#´zTTðãGÕL@ÕÄÛ·_Ùƒ ‰Ž~‰ž=ÿÁ¡C7±rå œ93M›ê µÎü|.6n¼„¡C;ÂÐP[(uôéÓ:aÅŠs¬íYbh¨­[GáúõhÖLNN‡Ñ«×?¸xñ‘Hcª[·:ÆŽíŒ&!.n NœpB¯^ÍO££ 3”€&R¡iS} éò¤ÊÐÒRűcÓ0zt'89Áš5çY]:!á+lm7#$ä1šŒ ú‰|§êü|.~üÈØ®à Ô„‡‡-¶o¿*–#Í !¤*;qâ_,]ww[ŒÓY¨uUåt­Zøô©êmÀH$[FF6æÎ=Ž!Cv¢Q#]\¿¾ãÇwŒŒà6,‰¿ ÓáæÖG¨õ,]j{÷üP¨õ”ÅÈH;wŽAXØ|4l¨‹©S¢wï¸rå©È“ãòò²èÚµ–,±/sttTŽ&DÔ(M¤‚ŽN5hjª >>‘íP99¬X1ÞÞ#°woÆÛ‹ŒŒl‘ÇúÖÖ›Àá¡¡s`eÕLä1…›XÆïŠöíëÃÕÕŸ:©„"&BBcΜ8;÷„““৸ÿIYY•öU®-¾{Nò§‹ÁÜ|-®\y Ÿ18xpôô4ERwNN>6oŘ1¡¯/Ü:[µª‹ÁƒÛÃËë<òò „ZWy4iR »vÕ+sa`PãÇïC¿~Þ ‹g-¦ÒFGF££ 5J@©al¬G# I•4thœ>=qqŸÐ¯Ÿ7þû/I$õr¹|OdReéêªãäI'ØÙµÆ„ û°ys¨PÖ^»sç5úôÙˆÓpþül ÖQàuT„0F@ÿ4yrw´jUnnþ¬®µM!UU||"FòE·n±yóHp8Â_Ëõ'dg独>qR£† 5•6ú&âçõë/ppØE‹NbÔ(3„‡ÏG·nY‰eïÞäå`Æ á/ ô+'§PR’ÃÆ—EZoyµnm?¿©žEE9 º;óšíЊüíáaG££ "J@©Ñµk#üø‘‡û÷ß² !¬QPÆ ðjÕ x{‡bÚ´CÈÊÊXù»wG`È01©‹K—Üмym•]Y ²²2ðöøøDìÚu]àåB)YBÂW º­ZÕÅ®]ã ''ÚKEEyde刴Nq¡­]˜€þú5“åHùAA3nða>¸{÷ Ë‘ýFG"”€&RCWWFF:ˆŽ~Év(„°n„®˜Ž[·^ÁÞ~+Þ¾M©Ty™™9˜6íV­:‡ùóûbÿþ‰BIôVFff6ÔÔ…¶ÃyÆ:psëƒþ ÁË—ÉB©ƒBÈïÓàà°õêÕÀþý“XYî©Z5%‘×).´´T€6"$bãáÃ÷°¶ÞoïP¸¹õAHˆLLê²ÓÎ× //‡É“ÍY©øpSé`õê`VêçGÇŽ pòä Î@nnìí·bÔ¨]xðàÛ¡‹ŸÑÑ‘‘Ïit4!¥ 4‘*]º4Ä͛Ɱ!lëÔÉ—.¹ANNýúyãÆ*çÙ³DØØx#&æ¦cÆŒž"ú\^éé9BOŠ;9õ@“&zpu¥¥8!DØRR¾cèPhh(ãðá)PSSd-–ŒŒª9ºzõŸ hñZ_–T=ÙÙyX¹ò,ìì6CSSW¯Îƒ³sO‘ψøÓ—/™Ø·/ÎÎ=Y;GÉÊÊ`É{\ºôX¬–¶(M—. 4ŽÈÈÈA¿~Þ7n/?þÀvh¥*mtôðá¾4:šRPšH•ÎáîÝäæ° !b¡vm-œ=ë ‹&9r¸Á×냂îÁÎn jÔPÃ¥KsÐ¥KC!EZy™™ÙBO@ËÉ.ÅñèÑ{ìß/>;ŽBˆ´ÉÎÎøq{QPÀ…ŸßÔ¢D(a—+ø=%)¯7^ Gõ8v,k×A` 4¨ÉvX€õëC ¥¥Šq㺰‡¥eStëÖ+WžÊ0ÂÒ½{Ï‘#S‘œœkëM˜8q?âã?±Z™ht4!ü¡4‘*MÁ0@DÄ3¶C!Dl()Écûöј;·/<K–œ“ÓŒi†'œP«–†ˆ"®˜ŒŒ‘L“66ÖìY½°nÝE$$|z}„RÕäçs1qâ~¼}›Gèéi²œœ,«õ³M^¾j¿žÌÌÌ›wÆù¢Y3}DD,ÀÈ‘fb3/>þbàáa%%y¶ÃÁÒ¥öxøð=‚ƒ° ßzö4ÆÅ‹®8xpÞ¿ÿ+« ˜6íž=Kd;´r+itôµkÏ~íçw ‰‰il‡KˆÈQšHuu%˜›7ApðC¶C!D¬p8¸¸XaïÞ  ü£FíBzzñ;ÚþœŽÁƒw ¾¾c±bʼn¸ø,-šu:gδB½z50gN€D2!„qÇ0 \]ý›€C‡&ÃÐP›í ¬,_æ[i¦¬,¯ê¾ÂŽððxXX¬ÃåËáã3ûöM„®®x †X¶,­[ÀÞ¾5Û¡š7¯ ‡öðô¼€¼<É›ÌápЫWs„†ÎÁž=ãñòe¬¬þ“Ó‰Ûå×ÑÑ ‹FG3LáqÓ®Ý ôìù¼¼.àöíW´´©(M¤Ž½}k„†>‘ÈF—aëÛ·%ΞuÁ˗ɰ±Ùü×nÙÑÑ/ѧÏF¤¥eáÂ…Ù°·oÃR¤ü+-šååeáí=ÿþû‡G‹¤NB© –/?‹ààØ¿Ú¶­Çv8E²³sÙUß¿Wí÷OD'-ífÍ:†Ñ£wÃÔ´®][ 6 Þ_]¾ü7o¾ÄŠÄfD6ÌŸß_¾dbÿ~þ–Ý'ýúµÂ•+ó°sçXÄÅ}‚¥å:¸¸Å›7_Ê.@ ý}ð`áèhG˜™!8ø ÚŽ–-—ÀÑñ0Nº‹”Úô•H'J@©Ó»w äæàÚ5Z†ƒâ4o^!!nÐÔTÍfDE½Ã0ðñ¹†áÃ}`jÚ/º¡qãZl‡ÊQŽ€€V­êbêT xy]@rr¦Èê%„iµ}{öí‹„·÷tíÚˆíp!"òkùLÂÎcP£†Ûaý%?Ÿ‹•+ÏaàÀ¶bu£ ôõ51uª9¶l¹‚´´âg;J ìí[#<|>¶n…û÷ßÁÜ|-\]ýñî] ÛáU˜¢¢ÌÍ›`ÍšAˆŽvGTÔ"̞ݩ©Yps €‰ÉRØÚn†·w(>|O³-‰Ô 4‘:Õª)ÁÒ²©D®}Eˆ¨èèTéSΰ´lŠQ£v¡wïðò:Å‹í°k×8Övñ® QŽ€þÉÍ­ÔÕ•°bEHë%„isüøxy]Àš5ƒ1hP}­Mq IDAT;¶Ãù8¬íÊ&ºd$Âõõëw8:ƤIûaiiŒë×ç£OŸl‡U¢={"ðùs:-²a;”b99õ€¼¼ 6oe;‘á`àÀ¶¸~}6nŽ˜˜×èÖÍ óæÀ‡©l‡WiFF:˜:ÕÇOG\ÜìÝ;M›êÁÏïúöÝ„6m–ÁÕÕ.ÁܹÇ1cFŒ×…ípþ¢  ‡œœª»´›ªªäÝ”&’#(è,-×!66GNƒ·÷hh¨°V‰>N‡·w(fÏî…ÚµµØ§XÕª)ÁÍÍÞÄÛ·’;RøO²²22¤"#aݺ!ˆŠz.]Ö`áÂ@©ÙÔOUUÖÖ-±aÃ0ÄÆ.Chè\LšÔ¯^}£ãa´háŽ!Cv`çÎp<þ™íp á % ‰T²²j--œ8ñ/Û¡"¶‚‚îÁÎn 6ÔÅ?ÿ ÅõëÏ1fÌî7'w))ßY™¦Ù«WsX[·ÄÂ…'iíyBáÓ¿ÿ¾ÁôéG0zt'±M JŸß³³óØH¡¤¤tL˜°3føÁƦÂÃçÃÒ²)Ûa•iÙ² èêªcÚ4 ¶C)ÕèÑP·nuxy]`;“““ÁðᦈŠZ„5k#<<:­‡Çi$%¥³ž@µhQ3gZáÜ9<~¼ [·Ž‚®®||®ÁÒrLMWaÑ¢“ ‹§s5{”€&RINN#GšáÈ‘hZ3‰?äçs±dÉ89ÁÈ‘f t¨QpæÌL¼x‘[Û-·ÁG^^23s ¥¥ÊJý«WBRR¶m c¥~B‘Dññ‰3f7ºukŒÕ«Iì i—™™ƒjÕD;ÈH·ãÇïÀÂb=ž=KD` Ö®"ÇXTÔ ?Àš5ƒ¡  Çv8¥’““»»-‚ƒàþýwl‡#òò²=ºnÞtÇòåò:­Á²eAøòEúögÑÔTÁ€m±}ûh~LŨQ»0gN† iððùèܹ!Ûa•K~>îî§`kksó&l‡S.ÖÖ-ajÚË—K÷^%òò²?¾ ¢£Ýáîn‹sçîÃÌl5V¯FJÊw¶Ã YY´kgˆyóú"4t.îß_OÏÁPRRÀÚµaf¶Ý»{aåʳ¸qã?äçsÙ™J@饫«kë–8|ø&Û¡"¢£_¢OŸHMÍÂ… ³aoßæ¯çèêjàÔ)g˜›7Á¨Q»qøp4 ‘òïë×ÂQlî”>yrwÔ¯_Ë–Iw'ŸB*+%å;† Ù MMeìÝ;±Êoò'Î23 7¼¢4© †apøp4zôXwï¾!(h&V®ee¶C+7ŸkHLLDzeýÙ…/K—ÚãîÝ\¼øˆíP„NQQ“&uÇ­[X° Nœ¸3³Õðô<ÔÔ,¶Ã*j1 {öŒÇ“'«qâ„zõjŽ«Wã0tèN4oîŽ)SâØ±ÛHN–¾ÑáD2PšHµiÓ,òˆ¦ *aøø\Ãðá>05m€‹Ýиq­Ÿ¯¤$;Ç`öìÞX´è$<!„~yxœApðìÝ;­[°N¥åçsñå‹ô¯£ù3Y¥¦F hR¶‚v샕Õ?ÈÍÍÇ¥Kn˜;׺hÃkI“””ŽÕ«ÏÁÉ©ŒõÙ§RfÍê.—‡íÛÃþzìÚµgUâ|V­šÜÜúàÎ%˜8±vî ‡©é*ìØVåÑ?5j¤ '§8q Ož¬¯ïX4l¨ƒ}û"Ñ»÷´o¿sçGHÈã*ûÁá0tKC*èë»bÇŽ18°-Û¡ˆ¥+WžÂÉénÝò€¶¶xŒ’$’%))‹BNN~Ñ( SqïÞ[ØÙµ.z^jjZ´¨¥KÙÙ $?Ÿ‹•+Ïaß¾HLžÜK–Ø ¬ÓŸ““Ù³ýòkÖ ÆèÑR.¿ÎŸˆÃ‡oBKKµèw½Gvv>LMý.55 cÇv­­‰ÈcÌÎÎC—.žèÑÃ6 yý„"jIIàñxÐÓÓüë±íÛðnÝElß>ýûÿ½®8ÉÏç"99Ÿ?§#99Ÿ?§!*ê?\ºôÝ»7ÆÇ©øòå;22²Ñ»w <8‰í…êàÁ›Ø°!Ož¬f;"æâã1gNâã?ÁÍ­¦Oï99Éï6qâ~¼|™„«WçAAA²–)ÎîÝðò:7£vm-<VVÍØQ¤ÒÒ~ÀÇçö²<œœzbüø.´1. g-=~üaañÃýûï ++SS#XY5CÆhØP‡í0‰„¡´” t醵õ&´kWžžl‡C$”¾¾k¹žçìÜ‹Û ¼þÜܼz•ŒfÍŠñùs:¦M;„¸¸Oظqìí‘Ï0 6m ŦM—1qb7,_Þ¿ØéˆÙÙyHHH±±žÀcxôè=¬­7•ë¹—.¹¡U+v¦|ž> —£¸režP>B'ó矀Ÿß-ÄÆ.û- }ôè-ÌŸOÏÁ7® ‹–Ï—/™01YZô³¼¼,dd8((à‚Ëýý²ÉÝÝ3fôuˆ"åéyÏqùò¶C!b*?Ÿ‹mÛ®bË–+hÕª6mFtÙ«ÒNº‹Ù³ýqú´3:t¬MK’—W ‹uhÞ\ªªJ ü²²ð°x±-œ¥û|V’oß²°sg8¼55E8;[a̘η^¹0¥¤|GDÄs„†>Edäs¤¥ý€¡¡6,-Ñ«W3têÔ>/R&ɾ%IH9q8,Yb‡£Goãõë/l‡C$ÔìÙ½Ë5šxàÀvB©åÊs°²ú©©Y=ýÖÖ‘šš… f %ù ~—æÌ韱8zôÆŒÙSì&S§úßôËÇЪU]Ô(óy5XK>ÀÀmÑ¢Exyg-B…””ïð󻰷ߊÄÄ4@hè,\x..V‘|€š5«aðàöø¹eB~>¹¹%Ÿ S§†"ŽNô>~LEíÚZl‡AX””^æú¯€µõ&ìØŽÅ‹mqöì,©H>'&¦ÁÃã ¦M³šä3Px>kÛ¶._~Š3gbÁ0 x••A||"ÛᱦzuUxxØáöí%0 -<=Ï£S§Õ8pàm*þ?5j¨aРvðõ‹ÇWáÌ™™°³k˜˜W9rš5sǸq{qøp4>|He;\"¦(MªŒ®]£k×Fðô¤d©˜Ú”Ñ á AƒšBíûnj7sæÑ¢ †aàãs Çû cǸpÁ×xý²·o3gf">>vv¿oNxâÄ¿ ‹Ã0øçŸ¡Ô?thÈË—Ü„ÉËË`èÐB©»¼8ÜÝmqõjnÝzÅj,„"L»wG@N®ðmRRìí·âüù‡˜>ýFî„ ú±!æÌé™Ò7íUR’gõ&§¨|ü˜}ý¿—U!Ò-%å;,-ÿÁ… Š}·nyÀÆÆ+WžE§N«qäHt¹Ñ ÃàùóÏ"ˆ”]…Kq4À¢E6¸zubc—aåÊ‘á`ÕªsèØq%zö\Õ«ƒqûö+ðØ™ˆ J@“*ÅÃ×/?ÁÝ»oØ…H Æk¡qãZE£¢þ$/ÏÁ!‚OzææÀÙùHÑRׯ?ƒÏ5dfæ`êÔCðò:Å‹í°k×8‘îRobR—.¹BYY66›qëÖ+¼xñóçŸç’¯ï5ÄÆ&¼îþýÛ ?¿äÎL~>O,ÖíÖ­1ºwo‚5k‚iiBˆTÊÈÈÆ¾}‘(((¼8/(à"))Ó§FÇŽõ±zõ –#䟡¡6úö5)Jªÿ‰Ãá ];C‰_ß¶<^¿N†‘QM¶Ã "”‡Q£v!-- óçŸø+ñû½zmÀQX¹rNžœCCm–¢¼ƒoàÖ­—ضm´T¬ûós°pa RR²Àåß~óæ+% ÿGWW«V Dt´;z÷nÓèÚÕþþ·KýŒ""žÃÒrnß®ZOôô41jT'80 qqkàïïˆnÝ#$ä1 ÚŽ-ÜáèxÇß©›]’’I¯‰_ëÁÁ¡=V¬8KÉ R!C‡v(vÍc((`0`€à×a_»ö>~L-ê0òx ¼¼. Gõø÷ß×8~Ü ŽŽEI_QÒÕÕ@PÐLtíÚÇïÄ!>àñ˜¢ï‡Ã³³rròZ¯‘‘Îÿv#/î=s`l¬##ñØÃÝÝ÷ï¿CHÈc¶C!„Û¿?ê¯å– ¸àp8xù2ÉÉ,EV9..VEIõ?ÉÉÉ Ké_~#=ý¾~ýކ %IR>\.S§B\\ár Ù8pà€ÂÄôŠgÑ¿ÿèëk",l>ÆïÂJÿSX^¿þ‚Õ«ÏcÎë÷\‘4ÕËõ¼‚.Þ¾ýZö«==Mxz:àæMw˜›7ÁÂ…'Ñ­›'ÿ-6½cG8`øp_„…Å‹:\± // só&X¾|nÞ\ŒèhwÌÛééÙX¸0mÚ,C¿~ÞØ°áw÷S¸~ýYQ_ŽÇc°aÃ%\½ú={þÿlØ0 ÇŽMCݺåKlJŠü|.fÎôC³fú˜1£Ûጞž&ž=ó„©iƒRgmp8œ*½tiêÔÑÂúõCµ:5Äœ9°°X‹Ó§c‹¨/^|FtôK…ÇÒøñ{qîÜ}6à ††Ú˜<¹;üýñôéìÛ7­ZÕ¿ úõó†‰ÉR¸ºúãܹûÈÈÈ®p=/^|FdäsFN„ФʩUK®®½áéyß¾ý½™!¥©SG mÚüµÆŒ íZWNN>fÌð+vd —ËC~>+Wž‹ÑüwŸXB‚‡={"ðï¿‚]úfÀ€6ÅÞ5çñ Àþò¿š?¿/Þ¾MA@@ Û¡BˆÀøùÝBVV^‰ÿLB·k·B"“Ð..½Š½q(''‹¶m뱑h½zõjjŠ´t±}{޹õW_.''óçŸ@£Fº¸~}†7•ªQÏ?yyÇ«W_°sç˜g;J*uue?>ÖÖ­JüÛÉËËâùsJ@—ÆÀ 6mŽÈÈEh×γfƒ¥å:œ;w¾¾×‹ü ÀÇcàätþþ4èí'ôéÓk×Alì2„…ÍÇ´ixû6ÎÎ~hуmÇŽa|ß 9sæ†÷ÅêÕÁ´q¤“®3+!å4eŠ9tuÕ±zu0Û¡ 4dH‡¿:o<;;Á&=½¼.àÓ§´×j+(à""â9||® ´^~ý\÷¹43fv)]] tè`øÛÍ:t0„®®†ÀêCCmŒaŠíÛÃh4!D*äæ`ûö«eNŸý9’òܹ¢K ºtiˆ–-kCFæ÷K¦V­ê@QQò׆-ËãÇмym¶Ã "pút,¼¼.;¨¡ €‹¯_³°rå@Ôª%^ý+A¹z5»vEÀÛ{„ÔìþIAA»vÅ”)Ý‹MBpit9jcË–‘¸~}Z´¨éÓàøñ˜ßŸ?“ÐsçžÀîÝ,F+¾ŒõàìܧO;ãñãUؾ}4êÖ­_ßëèÙs=Ú·_… qùòdg—|³BCŸvíº›ÍHH ådÄ% I•$// //œ8qGà£2‰ô³³kýÛÏ22˜™5„ŽN5ÕqçÎkìÝYbòù'ÁêÕÁ¬ÇÙÙy°°X‡¼¼‚RGbs¹<$&¦ÃÓó¼@ëwpøýf‡Ãƒƒø,¿ñ«3z"11 §NÝe;B©´€€¤¦þ(ñÜ/''eey̘ѭ´i¢ P@fÍê †ùÿ¶X^^]»6b1"ÑyøðZµªËvDÈnÜxY³Ž•9£nÍ鸓˜˜†Y³Žaüø.èÛ·%Ûá‡ÃÁòå°lYp8œß6Vçñ<~ü½à$‘‘vìƒ1c:ýu£ò'†a°bÅYlØpIÄÑI ØÛ·Á–-#ñðáJ\¼èŠaÃ:âÑ£˜4i?š5sLj¾Ø¿?ê¯ärRR:ž=+¼yÂåòðìY"¬¬þ¡k.1D hRe™š6À!°pa MÓ |©^]]º4ü­£1dˆà–ßøñ#ÎÎ~-óñ+§p ðO¾Xýüˆ‹û„:u GŠÈÈpJì|—Ëž}Qˆ‰y-°úmmMÊõ;qP·nu Ü[·^¥QЄ‰VPÀÖ-WP\¾JNNjjJ˜=»7bc—ÃÝÝÚÚj¢R@¬­[¢NêE7;óó¹03“þõŸ xˆ‹K„‰ % ¥Ù½{o1fÌÞ2“Ï\\¸ð±±oE™hp¹<89AíÚšX¶¬?ÛáˆÌÔ©æðñ YYÙßúî?¦"/¯ ”W’?åää#(è~©ƒ††·w(–. ‹¥ÅŒ ­[`Þ¼¾¸xÑ÷î­ÀÚµC ®®Œõë/¢sç5èÚÕË—!2ò9BCŸþvÝ\PÀEvv>\\ŽÁÙÙß¿ç²ønȯ(Mª4;$%e`Ó¦Ël‡B$ŒƒC‡¢„ŒŒ úõk%°²==/ 11㯎 ‡Ã)J:7jT ³g÷BXØ<|úäÉ“» ¬~~´kgˆ;w–àñãUX¿~(ÌÍCNNö±þÝÄÈÈp0s¦~ü(}UyijªÀ¢)dee ++ ‹¦ÐÔTHÙÂàâb…÷ïShSBˆD;uê.’“3~¹.¼©¥¥‚… mpïÞr¸¹õëóqyÉÈp0kV¯ß~nß¾>‹‰Æ‹Ÿ‘G h)–ð£Fí—Ë-s) 0‰6aBÙÉjI²aÃ%<}ú¾¾ã   ýËêüÊÞ¾5¡¤$_Ôgçñ˜¢ÍGIùœ:u™™9e>aìß W×€2g¸’ßéèTða±k×8«Â¥82°fà–â<¸¸\¸\n'°r…ÁÐPööm°ysh¹.ö!DÜðx 6mº †aþ7…›jXµjbc—ÃÉ©ÔÔÙS † é€êÕ “éM›êIÝû+ÎíÛ¯P³f5é° ‚””ï2d'¾Ï-a£M™ßfÚ©«+£iS=ØÛ·‘šMÜCBcÛ¶«Ø°a84¨Év8¬èܹ!ΟŸ--Õ¢$ôÏ¥ HÙ†Á¼y'Ê}S†ÇcpêÔ]L›vˆf`Wœœ :u2‚‡‡ÂÂæ#2r^¾LWòžI‰‰i°µÝ ŸkRuMU­Û|„Ãή5ΟWW\¾<§ÊÝýg999ÈÌÌd;Œ5o^ ÷ï@¯^ñåË—J—÷ãGÞ‘)YÝ¡ƒ!¬¬š G&E¿¯újÖN§úÝ»wˆ‰‰)ññ^½T`iÙ/^dàáÃ+ë¿ÿ’0{ö18:ZÂÞ^t}±˜˜¼{'~ƒžœ›`çΧHJÊÆ¾}—ÀãIïI055HYqqŸ ¬¬PÂy…³Aed Õ<0Lá`œ‹¡Q£ˆŠrƒ’’¼@b‘Få9Ÿ$$|E~~é#ÊŽ8_³&×®Åcûö1àpʵN*ïÏþ eÚàåå ‹µX¿>vl‡Cþ'==ñññl‡Q"33Ü¿ÿ5kæãéÓ§•.ïàÁG€&Mª£wïhÝZÊÊ…§éÄÄ7H¬à€ ‹JÇVœ7n`Ô¨Q|¼‚}()AUµ-|}ïâË—C`˜üJÇ¢­=0zôðJ—UYeÝYoØPVVͱgO$%  !eúøñ#’’ÄcJ4Ã08|8àìÜffú‘áàÅ‹g¿=OWWW( hA´µÕ¼yáE°«q =ÁÇ0 nß~77k¡Ö#*âÞŸ¥Â wJJrhß¾ 4P§Ž:êÔ©mmå?^‘ÅWTÇgeedä`„}h×΋و´î­[·âرc"­³¼dd¡«;wî<@HȶÚ‘#GâèÑ£)«yóÚxõj€Â$gL̼~ý¹ÈÈÈCFF.23óþ÷/ß¾e#==Ÿ?G^ãÆíÇܹfPQ¡´\qÊs>¹rå)äåeÊ5¢œÇcó––k1uª LLh†°ýÙ¤#n*·nÝPLz}ú´@‡Ò¿¶Ÿ$Vµ²:w.@AA5ôêÕ£ÒeNÔÁ®]¡¨(˜SsRR’H.¸*:•éÉ“•] cc½JÇpõjÀÊÊ¿ÒeUÔ±cÇÊ;¶3ƌك·oSP¯^ !GF‘tººº066f; ¼yó«Wk£OŸE›òýIØíޱ±1tuu…ZGIfÍÊÃÔ©æÐÒRe¥þëׯ‹¤žgÏ>ãë×ïèÚµ‘Hêq¯ìI IDATíOŠRjj¶nmzõj@VV°«qŠêø¬ ³óðx ||Æü3(A&@-/¯ëÖ]Ä’%'ÙE(ø8ÃYYhi)£]»†ån¯ÓÒ~@FFêêâ}Ó† å9Ÿ0 ƒ#G¢K}ÎϽ‰~vY¸\RS`ݺ[;¶#V­Z´T$¬âúƒ”€&äúöm‰ÚbÆŒ#¸re.44$ã"\ rX° Ÿ@ÊRSS„•U3”%)Z´¨-°²ÌÍ›¬,QèÞ½ ´µÕpêÔ]¸¹õa;B)—úõk¢~ýª¹V*Ìœiõ¿½ ¤[XX µÑ°!“6ZZª¬Ý@7^ÂÍ›/qþülºÖ+†‚‚–,±g;Œ*C6êeÓ“'‹þ¯««%%y(++@SS** PUU„††2””䡨(MÍÂÿ+)ÉãåËÿмy=$'g vm-ßEÕB hB~áåå€Þ½7`îÜسg<Ûá P.D%¤Ý¹–““Aÿþmpò$%  !DRT•6?4ô)zö¬Z7ʼnô;}:[¶\ÏX̾#„°«eË:øôÉ»B¯½~=ÆÆFÐÕ¥ä³(‰~Î !bLMM>>cú¤hCB‡öHHøŠØØ·l‡B!„¾~ýŽ{÷`mÝ’íP˜7þƒ««?.´¡ý7!„%”€&ä&&u±`A?¬XqÏŸf;Bˆ”jÕª.5ÒÅéÓwÙ…B„†>¦¦ :v¤ýPˆtˆOÄäÉû1r¤œ{²!„TY”€&¤Ó§[ÂÔ´áÇ<¶Ã!„H©ÁƒÛãìÙûåÚ¹™B¶S§îÂήµÄ-mEHqÓ0zôn˜™5ÄêՃ؇Bª4J@R ‡ƒ­[G!==nnþl‡C‘RƒµCjê\»ö÷.Á„Bˆ(}ú”†˜˜×8°-Û¡RiYY¹˜4éôô4àã3²²”ú „6ÑY˜hk«a÷îq yŒÝ»#؇T1YYYðôôd; yùò%<(Ò:SSS±~ýz@ff&Ö®][ìóØü¬ëÔÑ‚™Yœ>}•ú !„ïìÙ³¸sçÎoíǯí ?횤´éAA÷ ¯¯‰hù Qúõ¸b£I9>ù‘‡ñã÷"-íš eeÉÜ@”þ³¨IB]ÒÐ9EòIëßЄ”¢}ûúX¾|V¯>‡Û·_±©B233±téR¶Ã˜gÏžÁ××WèõLž<oÞ¼¤§§cß¾}Eÿ_¾|y±¯aû³¶·oƒ«WŸÒr?„"B¿¶Å Dttôoíǯí ?íÛíLy0 ?¿[:´#8ÛáT)¿We)í¸å§œ_IÂñÉü|.¦L9ˆ×¯¿âرi¨QCí*LTýgQ“Äþº$¡sŠä“Ö¿!%  )Ä ]1p`;8:BRR:ÛáBJqéÒ%¤§~O ñüùs–#*›­­ òò põjÛ¡BH•ñk{Q^’Ò®TDDÄs|øð £Gwb;”*‡Ÿãª´ãVšÏòârypt<„‡ß# À††Úl‡DŠ!‰ýuIBçÉ'­CJ@Rk×: fMuLštÙÙ4JQ\¥¤¤ÀÊÊ ›6m‚¾¾>jÖ¬‰ýû÷cîܹ¨Y³&ôôôPôüÇ£K—.PRRBãÆqìØ± •sýúu˜˜˜@QQM›6ÅÙ³gÉÉÉèÓ§> MMMŒ97n,zÝ—/_о}{¤¥¥•øžöîÝ‹zõêAUU&LÇôÇ&2<...PWW‡ŽŽ¼¼¼ð÷y'$$ÀÒÒò·r‡ †˜˜ 6 ÉÉÉ6l¢¢¢””;;»rÇÇÖg]£†:wn„sç>Bˆôúy>=zô(ŒŒŒ ªªŠñãǃË-Üè´¤voĈ |üø­[·ÆéÓ§‰‰‰hÓ¦ RSSÙyS•àááš5kBQQ–––øðáüÕ^@@@ ¡¬¬Œ{1÷g»RR»VqnÓº‰>}Z¢V- ¶Ca]IÇ ?ý~žûëqUÚwøÏãöÏ~æµk×ÊUNIÄùø,.——£ˆŽ~…'¦£Q#]¶CAôŸ’ë²+©Ý(4ö×…Î)’Cyú`ˆTÐӛ͜>ËvR-!á+Ó¢…3cƆÇã±N•ðùógæÚµkå~~bb"###Ã,Y²„áñxÌÎ;ÌÚµkǬ_¿žiذ!Ã0 óýûwFOOÙ¾};“““Ä……1êêêÌÍ›7ù*çóçÏLµjÕ˜0999LPP£¢¢Â<{öŒyÿþ=£¬¬Ì 8‰ŽŽfN:Å4nܸ(ÞmÛ¶1={ö,ñ½`¦NÊäææ2/_¾d444˜ððp¡}~ü:zô(SÞf$88˜áp8Œ››“••ÅDEE1L`` _Ÿw||Ë’—WÀ̘q„iÐ`>sûö+‘×ÏŠ$ Ñ.í¸.í±ÒÚÒˆk]ÐtN)ž8% •7¨jÃâ¾´!|05m€õë‡býú\¸ðípH TUUŠŠŠ““+úù§„„<{ö †††Eÿ~[£<å|øð7þ­þ&Mšàýû÷èëëпœ>ðãÇ´k×gΜ᫜^½záÊ•+xýú5€Â N:++«ŸŸ˜˜ˆmÛ¶aìØ±¿=„'OžTàÝH†„„œ?™™‰]»v¡_¿~|•!//ôôt|ûö ƒ—/_ò‹8~ÖÖÖ-Áápò˜íP!R¨¬v¯_¿~ؼy3þ½ûkê|ß~‡$lÂTÀŠ{Öº÷¬³°8«V±UÛÚ¥U«µÚªÕêÏU­›¶RG«­~ÛZ­{áVÜ({É!ÉïH” Nà„p®+$çääI8á$wÞ}Jü ùqO;®ãq濾úêwT¯îŠ›]ŠÑxÖ~#´ç}ó,aÿ,Itôôï¿YYyصk2ªWwº¤2U¯ŸŸ¶_?mÙ˾_2å×릆ÿSž­´rƒ²R‘þ†"N§+Ó[ rѼù y¡¡„.¥Ryð }ú,ƒ··#¶m©T,tI&%)) ‘‘‘hß¾}™ÝF\\®^½ //¯'ú?¾ˆ{÷îáæÍ›ðññy¢'ô5 îîîX°`ÁKßÞó(ëÇ/,, ÁÁÁx‘ÃH^^Nœ8{{{4nÜø¥n·  'Ož Q^Ø7 RRRpþüy4kÖ öööHOO‡³³óKÝ΋z™Çã¿~úé>ýt._ž ‹R¬Žˆ*ªÂ7¥²½Ò:´ë}Ü¡C‡ww÷çZ_¥RáôéÓÈËËCƒ àæö(¨züxáèè¸|ù2’’’мysÈd²'¶§ÕjŸ8®”Æqíy½èýšóç£Ñ»÷RlÝ::ø—BuÆëE_=m¿) ÅíW%)n¿}™í”…ÒÜ?Krúô]ŒýªUsƦMoÃÅŶÌn«,¶mÛöB×+ÿ3OÛ¯ŸµÏ¿ÌqÃ_¯¿ìãÿ¼Êòø÷"LáJYÿ?y™í—õë§Ç™Âß°¸çƒ¤¤•©b±³³D^žZè2*gg[„…GŸ>Ë0uêX¾<ب{îГ¼¼¼àåõê_Û+œàiRRRpìØ1„‡‡ãܹs¯|›‘¥¥%:tèðJÛH$hݺu±Ë\]]ѵkWÃy¡Þ„½¬.]êâ÷ãàÁëèÝ›ý8‰¨ô•Öq¯"°°°@›6mŠ]ößãÔ«WõêÕ+q{fffOWJã¸VÞt:fÍÚ6mj™|øü2ž¶ß”…âö«’·ß¾Ìv*¢Ÿ~:…> Gõ±té0XZJŸ}%Qÿgž¶_?kŸÿïq#!!(qýzõê¡Aƒ&ûzÝØñJÙ(Ï×O¦ú7d an.a øø¸`Ó¦±Ø·ï2æÌùUèrȈEEEáË/¿Ä’%Kž9Jš*'gg[4oî‹ýûÙ†ƒˆˆÊÆæÍÇqñb4æÌé't)DϤÑh1wîoxÿýŸñÞ{]°jÕ[•*|6FR©...%ž¬­­….‘ˆŒG@› )²²Ø‡X(WêUoa̘ pt´Á{ïuº$2BÍ›7Ç™3g„.ƒŒ\÷îõ°xñ~¨Õ¶õ!"¢R•””‰¯¾Ú‹wÞé€Úµ=„.‡è©Š\„†nűc·±zuúôi(tIÀÅÅ¥ÄùnˆˆJÂÐ&ÂÁÁš´Àºv Ä×_¿‰¯¿Þ‡M›Ž ]UPݻ׃B‘‡ãÇ_|¶p""¢§™1c\\ì0uj7¡K!zª3g¢Ð¹ó7¸r%»v…2|&"ªà8ÚDxzÚãÆD¡Ë¨ô† k‰ôô|úéØÙYbÀÎ*ND/¦J'zaß¾Kh×®¶Ð呉ؾý þøãÂÃ'‚oÉ8i4Z,_þ7–,ù:v¬ƒ%K†ÂÉÉF貈ˆèq´‰ðòrDBB¦Ðe€‰;bÒ¤Ž˜:õGüõ×U¡Ë!¢ ¨Gúøßÿ®B«Õ ] ™€¨¨|öÙ¼óN´jUCèrˆŠ•ÁƒWbÙ²¿0{v?lØ0šá3‘‰`m"ärÄÅ¥C§cXa >ù¤‚‚Zb„Í8vŒ_£'¢Ó£G=$%eâüùh¡K!"¢ N­Öàw¶ F 7|ôQO¡Ë!*Öž=йó"¤¦fã?¦bôè6‰DB—EDD¥„´‰Ë Vkšš-t)@$aÞ¼èÑ£BB¾Ç©Sw….‰ˆ*9||\°oß%¡K!"¢ næÌ¸{7«V…pr[2:11i1b&LØŒ^½êcÿþiðº,""*e  M„\nˆÏ¸*$›aÙ² tî\!!ß#"â¾Ð%QÒ£G=ìÛwYè2ˆˆ¨Û¸ñ¶l9eË‚áãã"t9DZ¬\ùÚ·_ˆ¨¨„‡OÄ×_†••¹Ð¥Q`m"¼¼!‰ÀÚ˜ˆÅfX±b8Z·®‰ààÕ¸t)Fè’ˆ¨‚èÑ£¢¢R8Á,½”£GoaÖ¬]øàƒîèÑ£žÐåœ9…nÝaÑ¢ý 턦³79‘‰ãôÇ&B*ÃËËQQ©B—Bÿ!•бzõŒ½C‡®FxøDÔ­ë%tYÊ¡C‡„.ž¢¸þ|b±ìì^GNÎäçÇ PÕÓ‰D°³kެ¬Ðé „.§XûÀÍÍûö]BíÚB—CDJJJBRR’Ðe<7ww÷2Ûvdd$"##Ëlû¦âÊ•8L˜° Ý»×Ô)]„.Ç(ðõ¤ðââÒ±`Áص+­[×Âúõ£+ÝÈü°°0„…… ]F¥T¦Û¯hÇëÊŒ¯'ÊÞ_ŠtœµÎdŒµ66X±b¸Ð¥P1TªŒ¹/Æ ,l<6¬*tIF///YYYB—QṺº–Év£££qêÔ©"—åæ௿âpøpìíÍ1dHuÔªe_&·ÿ*r°lÙøøØâí· —Þ$7o¾ùf©mkúôí¸t)û÷O+µmQÅ¢P( R©„.ã…XXX@&“•úvSRRJ}›,--ŸºÎ‰w0f̨_¿ 6l]é[ðõdù)iÿT(r±téŸØ¸ñ<<ìññǽðÆ ¨PX§NBt4'˜RÕªUÑ¢E‹2ÙvE<^³ç9Þ½,¾ž(ÿ}=ÈÚ„,^¼{ö\Ä¡C ] •@¥*Àر?àÌ™(lÙ2Íšù ]Q©P«5ظñ(–-û ðî»]0jTk£žìèÂ…h º -[ÖÀ÷ß4ÊZºŽààµ8}z&¼¼….‡ˆˆŒXAkÖÄ×_ïCÏžõ±ti,,ø…WŽR©ÂÆG±råAˆDÀ´iÝðÖ[­Œò5•-Ð&dÿþËxûí¸uk,-¥B—C%P«5xçÍø÷ßظq,^ýΨâÒétسç",ø‰‰™=º Þ}·3d2+¡K{.÷0lØj´kçÕ«C ×ÔjµõêÍÀ‡öÀ˜1m….‡ˆˆŒÔùóÑøðßqçN2>ú¨ÆoWl‹,¢ò Tª°iÓ1¬Zu*•cÆ´Å;ït¨0¯‰ˆ¨ô1€6!11ihÑb.~ÿ}*5b{cVP ÅäÉ[ñçŸW±~ý(´oï/tID/ìÔ©»˜7ï7œ?~ýã“OzUÈQº'OÞApðZtéRÿ÷Ã.„ž8q RRŸ$t)DDdd23sðõ×û±iÓQ´jU  ‚Ÿ_Ù´Þ"z–¬¬}`É’a033žQc»vÔ)a¸|yd²²éƒFDDKZšk׆ Gan.Á¬Y}1p`Žz&AÄÇg`ýúÃØºõ`äÈÖ ž‰ˆ¨631^¸r%Nè2è9ˆÅfX²d(ÌÍ%xûíX±b8úô©|“qPÅ‘šš%KöcëÖðósömãÑ¡ƒiŒÞoݺÖ­…‘#×A,cÑ¢ÁFó&¾Chµ:üûïuþ "ªäRR²°zõAlÞ|––R„†v¨Qm`kk!tiT EFÆcõêCؽû\\ì0eJW þììø9ÅÚÄ4kæ‹ÿýïŠÐeÐs‰DX°`,-¥˜8q òó 0p`S¡Ë"*"/O5kaÅŠ°µµÀ×_ÆàÁÍj”pièÐÁëÖÂØ±`i)Á¼yŒ"„vp°F“&>8pàh"¢J*"â>¶n=ŽÝ»ÏÁÁÁ|Ðo½Õ ÖÖæB—F•ŒZ­Á¾}—±aÜ:ur|óÍôïߘ“ Q‰@›˜¶mkã»ïþFrrÜÜì„.‡žƒH$œ9ý`a!Á”)?B¥*@PPK¡Ë"‚V«Ãöí§±páÈÎV!4´Æk++Ó}³Û¥K]¬\ùÞyg3$1æÌé'tI€Îë`íÚCÐju&üQñŠ<ìÜ­[ãÚµxÔ«çyó`Рf°°àÛ8*_II™Ø¶í$¶l9Ž²Ñµk ÂÃ'qBu""z.|åbbš4©KK)޽‰š]½€O?í KK)>üp;rsó1fL[¡K¢JìøñÛ˜9snÝJÄðá¯aêÔnpu­jõêÕ+V ǤI[akk?ì!tIèÔ©æÏß‹ ¢Ñ¸q5¡Ë!"¢2¢Ñhqòä]ìØq{ö\ôíÛ‹EƒU®Ž*›üüüïW°}ûi:tNN66¬FŒxr¹ƒÐåQÂÚĘ›Kв¥Ža]M›Ö ––R|þùn¤¦fcúôFÑ€*{÷R1wîoØ·ï2:v ÀêÕ!¨YÓ]è²ÊÝo4‚R©Âl‡Lf…ñãÛ ZO@€^^Ž8pàh""£Óéq¿þz{÷^@rr5ªŠ3ú`À€&ì§Kå."âvîŒÀ®]ç TªÐ±cV­ A×®uanΈˆ^&èõ×k⇎]½¤‰;ÂÙÙ~ø33ñÍ7C ‘˜ ]™8…"K—þ‰õëÀ××Õ¤&|YƵDff¾øâ7ØÛ[aèЂÖÓ¹süý÷5£‘MDD¯F«ÕáâÅüþûEüöÛyÄÆ¦£NOŒÓo¼ÑU«: ]"U2II™øå—³øùçÓ¸};rL™Ò4‹‹­ÐåQÇÚµkWóæíÁÝ»)ðósºz C†4‡‹‹Æßˆ´4%V¯1é¾»$­V‡­[Oàë¯ÿÌ™ÓÇ¿Æ=š0¡=Š\|øávØÚZ¢wï‚ÕÒ©SlÞ|II™pw·¬""z9¹¹ù8rä&þüó*þþû*’“³P£†† i޾}£F 7¡K¤J&/O?þ¸„;Îâðá›pt´Æ€M°re½„.ˆˆLhà 77;üûïuÐX§Nؾ}"Þzë{ ¼ ›7…££Ðe‘ 9~ü6fÏÞë×0vl[L™Ò2™•ÐeéÓ{ 33“&m­­Ú·fdxëÖ5aa!Á‘œ¨”ˆ¨‚HLÌÄß_Ã_]Å‘#7¡VkФ‰Æk.]êVÊ6W$¬œœ|8p ¿ÿ~ ÿüs *U:¡—Á IDATv Àºu£Ð±c¤R±Ð%‘ ét:ÐEPéû쳸v-»vMºzEwî$#(h ,,$ ›ooG¡K¢ îñ>Ï:øcÖ¬¾¨UËC貌šN§Ã»ï†á?.áçŸ' iS_Aê ù‰?ü0ZÛ'"¢§ËÉÉljwpäÈ >|ׯ'ÀÎÎíÛû£K—ºèÔ)€ ¨Ü)¹øë¯«øý÷K8tè:4-Ú´©…ž=ë£GzÜ'‰ˆ¨Ì1€6Q§OßÅ€+pöì,xxð«Ú]R’AAkž®Ä¶mã º$ª€þÛçyÖ¬¾•¾Ïó‹Ðh´3fNž¼;'£NÏr¯aÓ¦c˜7o®^ÇI€ˆˆŒ€F£Åå˱8|ø&¾3g¢ ÑhQ§Ž'Ú¶­öík£E‹êUJå.55þyüq GŽÜ„Xl†öíýÑ«W}téR—ßz#"¢rÅÚDiµ:4oþÆkqãÚ ]•…"£Gÿ€+Wâ°aüöZu¡K¢ B«ÕaûöÓ˜?/´Z>ø û<¿$µZƒàà5ˆŒLÀo¿½ _ßòms—Žf;À?N@»vµËõ¶‰ˆH8_»'îàĉÛ8uê.22ràé逶mk£]»Úhݺ&œ9i•¿øø ìß¿ÿ~§OGÁÚÚ; gÏúèÔ©¬­9§  ƒ´ ›3çWœ>}¿ÿ>UèR¨”äç 4t+þúë*V® Aõ„.‰ŒÜã}žßz«>ú¨'G¼¼¢œœ| ¼ ™Ø»÷=Èååzû:}V­jbîÜþåz»DD•QA—.ÅàäÉ;8yòNŸ¾ …"..¶hÑ¢:ZµªŽ6mjsA„Z­Á©SwqèÐu<‰ÈÈ8:Ú k׺èÕ«Ú¶­ÅoL‘Q`mÂ.\ˆF¯^Kqüøg¨VÍYèr¨”h4ZÌœ¹[¶œÀÌ™op„;‹}žËVFF\¼¼üöÛ»å:Òmþü½Ø»÷"Žÿ¬Ün“ˆ¨²ÈÎVáüùû8s& gÏÞÙ3QP*Upw—¡E‹êxí5ý©fMwˆD"¡Ë¥J(&& êç£Go!''uëz¢C‡tèà¦M}ù-7""2:  M\«V_"(¨%BC; ] •²•+ÿÁüù{1|øk˜7o _h@©TaÉ’ÿaݺÃìó\Æ’’èß9œœl>VVåóµÖÓ§ï¢_¿å8|øޏ#"zEwï¦àìÙ{8{V8ߺ•F‹j՜Ѵ©/^{­:Z¶¬?¿òm¹DTH¥*ÀÉ“wpð`$þù'·o'ÃÙÙíÚÕFÇŽhÛ¶6\\Øò…ˆˆŒh·bÅ„…ÄÑ£ŸÂÌŒ£4L;}—1yòV4kæ‹5kFB&³º$ˆN§CxøY|õÕ^äæªññǽØç¹Ü»—Š>}–!0Ð ›7¿].“Li4ZÔ«7ï¾Û&´/óÛ#"2 E..\ˆÆùóшˆ¸‡sçî#-M KK)4¨‚¦M}Ѹq54iâ77;¡Ë¥JJ£ÑâêÕ8?~ÇŽÝÄñãwŸ_€† «¢cGý(çúõ«ð½U(  M\ZšM›ÎÁúõ£9 ÒD]ºƒ#ÖÃÁÁ ›6EÕªl·RÙ\¸™3wâüùh„„´Âô€““ÐeUçÎÝÇ!«Ð­[ –/.—¯dOš´))Yؾ}b™ßQE”—§Æ•+±¸p!.DãÂ…hDE¥B§ÓÁÛÛÑ67n\ õêy—ˈDÅy|K—¡oßFB—De¤ @‹õëãÛoÿ„­­fÌ胾}q2$íÜÉ“·á“Oz•yßýÔÔl4lø9Ö­…îÝë•ém…"W®ÄáêUýéÊ•8ܺ•µZ Ô«ç† õAsÆUùÍ0ÜóÎì3NDD¦Žt%ѧÏR4o3ߺ*Csçþ†ï¿?Œ>èŽ)Sº0”41ÿþ{³fíFtôŒß¡¡8Öˆ¬]û/æÌùË—cÀ€&ez[½{/E` ,x³Lo‡ˆH(qqé†Y8Ç#:úÀÙÙuëz!0Pª[× ~~®‹9÷ +##gÏÞCD„þtáB4²³Upw—áµ×pfàLDD•‰Dè¨|„„¼Ž™3wáÃ{ÀÒR*t9TFÄb3ÌžÝ~~n˜1cîÞMÁâÅC`nΧzEwÿþ|ñůطï2zô¨‡Çð FhܸvHMÍÂÔ©?ÂÑѦL{ï·kWÛ·Ÿ)³í•—‚-nßNzlTs<®\‰EFFD"ªUsF` † ka=<ì….›Z­7o&âìÙ{8{6 ÷q÷n D" V-4mꃛ¢Y3_ÎDDT©qt%¡VkЪ՗xç=ºÐåP9ø÷ß?~#jÖtǺu£àîÎ7jQNN>–/ÿkÖBժΘ5«/'5r:“'oþ}—>W+“Û9wî>z÷^Šþ™y™ÜQiËÊÊà ¸r%þaØ‹ë× R@*Ãß_n™ëÖõB:ž°³³ºl"ú0÷qgÎDáÂ…hdeåA&³D“&>†S£FÕ “q¿%""*ĺÙ²å8–,ù'N|ÆQЕÄ;É9r=²³UX·nš4)› ŒÊÆîÝçðå—{‘••‡)Sºb̘6JÅB—EÏA­Öàí·7""âöìy¯LF«kµ:Ô«7“'wÆ„ íK}ûDD¯B©TáÖ­$\¿ž`øyófââÒÖ ôF` 'êÖõB@€'jÖtçqŽŒ†R©ÂÕ«q¸x1—.ÅââÅhܹ“¨Qà Mšø ys_4n\ 5j¸ÃÌŒmˆJºá(èÊI¡ÈChè>|  ÂС-„.‰žáêÕ8Ìšµ'OÞÁàÁÍññǽàæf'tYô‚rsóñæ›+‘’’…Ý»'C.w(õÛ˜4i ’“ŸTêÛ&"z¹¹ùæDܼ©?ݸ‘ˆØØtèt:XZJQ³¦;j×ö@íÚ¨UËuêxÂËËQèÒ‰ rrò ›õó;ÉÐh´pw—¡~ý*¨_ßû I“jɬ„.™ˆˆ¨Ba]Éptå¤Õê°páX±âFŽ|³g÷ã##”–¦Ä¢Eû°uë 4hPsæô/³ö T><ÈFß¾ßÁÂB‚]»Þ-õ¯ãîÜiÓ~ÂÕ«ó8%•©¼<5nßNÆ ¸q#7o&áÆÄĤA«ÕÁÜ\‚š5ÝQ«–;üýå¨UK8W­êÌ‘¡dTrsóqåJœ!h¾t)·oëÃfWW;4hPÅ8ׯ_…ýƉˆˆJèJF­Öàõ×¿Äøñí1fL[¡Ë¡röÛo0mÚhР Ö® gg[¡K"è'_Úºõ-Ú©TŒ?î…Áƒ›A$âvSÞ½—¡zuWlÝ:®T'MMÍFÆŸcݺQèÞ½^©m—ˆ*¯üüܾŒ›7 í3"#õA³F£…T*Fî¨YÓrÔ¬©œ«Us†Xl&tùDE$%eâÚµDFÆãÚ5ýéÖ­$h4Z¸¸Ø>6ëç²ø¶1€®”8 ºr»v-£F­‡N§Ã?ŒA` —Ð%UjÇ߯ìÙ»qãF"ÆŒiƒ©S»q²%™€þý¿CË–5°~ý¨R iz÷^Šºu½°pᛥ¶M"2}II ܹ“l8ݾ­ÿ›nšýü\ #™ úúºB"aÐLÆE¥*À ¸v-‘‘ ˆŒLÀÕ«qHOW¼½ ï7^8²ÙÓ“a3Qya] ©Õtêô5nŽÐÐNB—CHKSbüø8w.K– Eß¾„.©Ò‰‹KÇ—_îÅîÝçСƒ?æÌé5Ü„.‹ÊЉw0|øZ Ü _}5¨Ô¶»hÑ~üüóiœ9óy©m“ˆLC~~ÁÀ9¥HÐ|÷n2Š<€%ªWwCõên¨Qà ~~®¨YÓÕ«»±]¥ØØtDFêƒæk×âpíZ<¢¢R¡Ñhaccx" Àuêx" @ΞÍDDDc]I|}û6¬Yoð›•ܲeaÑ¢ýX¿~T‘ðGŽÜÄ!«ðå—0jT›b¯[P Å­[I¸t)—.Å""â®]‹GAff"H$fÈÏ×þþûCÔ©ãY.÷‰ˆ^R©Â½{©ˆŠJ}ìg ¢¢R‘˜˜ ‹ÍP¥ŠÓF3»¢F w¸¹Ù |ˆŠ§Vký7nèCæ7ô£šoßNF^ž"‘ÞÞŽ¨Qà µk{ F wÔ®­ŸäR&ãÜDDDèJnÞ¼=8vì~ÿ}*¿®VÉefæ`òämø÷ߘ=»o±áW\\:‚‚Öà×_ß…ƒƒµUV, E.–.ýëÖ†¿¿óæ @óæ~B—EFâ“O~Áöíg°iÓX´n]Û·ŸÁûïÿF‹jÕœqâÄŒb¯wà@$Þzk-ÀÜ\l›‹sëÖŽ#22 E.îßðXÈœbø™œœ03ÁÓÓ>>®ðõu |}]àë«?ÏÑÌdŒt:âã3•‚;wR #ôïÞMAll ´†PjÕòxlT³>p¶¶6ú.Qa]Éeeå¡M›ù˜>½'‚‚Z ] L«ÕaéÒ?±dÉÿЯ_c|óÍ`XYéß ¨Õ¼ñÆ2\¼ƒ¾}aÕª«†N§ÃÔ©?bÒ¤N¨YÓ½Øu´Z¶o?ùó÷B«Õaúôž>ü5~ÈCEh4Z¼ýöF\¾‹7ßl†eËþ ßÇà×_ßE³f¾Å^·_¿ïpîÜ}hKܾ££5®^ý²Ôë&¢gËÈÈ)0?>’9-M HÌàííd—}|\P­š3|}]Q­š3Cf2ZiiJDE¥àöídDEÍ)ˆŠJA^žàà`êÕ]áç§ŸàÒ××Å0Ñ%÷m""¢Ê‡4á—_ÎbÆŒ8xð#ÈåB—CFààÁë Ý wwÖ¯__WÌ›·kÖ‚F£¼Ö¯=ê \iù›?/V¬8€-ü°k×ä'–GDÜÇÌ™;qåJ,Þz«>ú¨'g^§åääcâÄÍøûïkÐjŽ%1úõk„ï¾ .özQQ)h×n! JýܰaUüñÇÔR¯™ˆô’’2qÿþÃéÑHæTddä¤R1¼½ ³ŸŸ«!pöövâ<d´RS³îÛúRî߀»w“qçNŠaÿ¶²2‡¯¯~¿öós…¯¯ëÃÞã.pt´ø‘1aM€áÃõ_çÞºuœÀ•±ˆMÇÛooÀÝ»)5ª5–/?`™)éG¶9ò)œœ*ÏŒM›ŽáÓOw‡ððIxýõ€¤$,øÛ·ŸÁk¯UǼyàï/²\2rÙÙ*Œµ'OÞ1|°ó8©TŒK—¾€½}ñínæÏß‹U«{]±Ø 6á$³D¯ ''÷ï?@tôÃÏÇW© ææT©âdh‘ñøˆfoo'H$fߢ'h›†èè¸wO4?ú@%Õ0`áþ]­š3jÔpƒ¯¯+ªWׇ͞ž‰øí."""z6ÐHHÈ@‡ 1gN Ò\èrÈH¨T˜2% {÷^„N§{b„f÷îõ°ví+,?þy£Gÿ`x Äb3ÔªåŽ?þ˜† Žbñâýpp°Æ¬Y}Ñ»w«%c—˜˜‰!CVáÞ½T¨ÕÅb‹Í0kV_ŒÛ¶ØåJ¥ ¯½6(ñßC¹¹¹S§vÅ{ïu)õÚ‰L…V«CBBÆcárîßO5„Ì©©Ù†uÝÜìPµª¾EFÕªN¨ZÕÕªéOö áÈ()¹ˆM7Œ`ÖfÖïï…=™ÀÞÞ>>…û´ ||œQµªþ§\îÀbDDDôÊ@“Á?žÄ_ìÁ¡CÓáîn/t9dÔj úöýW®ÄûU‘H„5kF˜|àzîÜ} °š"!¼H$‚ŸŸ+ââÒ1qbG„†v‚¥¥TÀJ©"ˆŽ~€–-ç=s=‘H__=úi‰ëìÚu¡¡[ðß#¹™°bÅ[èׯñ«–KT¡)yåTDG§Âåû÷õ\á@––Ò‡á²s‘p¹ðwþo'c”–¦DllbbÒ—˜ý>—ŽØØ4(yô“ZÊå†`¹Z5燳þwN,MDDDe4èt:­¹¹›6º2ÿíûü_"‘öö–8|øS¸¸Ø–suåãÞ½Tôè±YY*hµEýý·ÂÞ½Sàçç*P…TÑèt:üúëy|üñ/P*U%>¿ íÚ5-Zø•¸­þý—;!á¾}ÓРA•R«›Èeg«“fh%—Ž˜˜tÄÄèC¹ôtý„"‘ö†`¹°¥€þwg¸»Ë¾'DOJIÉz¸ëåØX}Ðý11iÈÉÉ ˜]]e¨ZÕ Uª8ÁÛÛÞÞ~¯Rʼnÿ‘ @SqqéèÐa!fÌx!!­„.‡ô×_W1bĺg®'‘ˆÑµk]¬[7ªª*_d£{÷%HJR”8Ù›Xl†?ìwßí\ÎÕQE——§Æš5‡°lÙ_((лI¥bôêÕ+W¾Uâv®_O@—.ß@£Ñýçòùœ“*¼ÿÌú îÉ€œmQ¥JÑîѨfpd\Š\ÄÇg 66 HHÈD\\:âãÓŸ‰øøtCŸq‰Ä îîöEöïÇ÷s//GNhIDDDF4=!<ü ¦Oߎ½{§ n]/¡Ë!äää£U«yHN΂T*.±Gm!‘H„U«ÞÂo4*§ ËžB‘‡7ß\ÈÈÄÃçBÖÖæ8yr¦Éާ²•”¤ÀW_ýŽðð3‹EOŒd–JŸpaKžðsÆŒ]ؼù˜a_µµµÄÍ›_•iÝD¥áÕf}øVµª~D³µµ¹€÷„è‘ÜÜü"Árll:âã3øø ÄÅ¥C©T֗ɬàééooGÈåËíáå¥ß¿ /ãd–DDDT‘1€¦bM™†ˆˆûØ¿ll,„.‡ RàðáøãËØ·ï"Š««Õ–.µZƒaÃVáôé{Ï Ÿ ½ñF#¬^RÆ•‘)»r%3fìÄ™3Q`˜XP"1ÃŒo`ܸv%^W¡ÈE‹ó PäB§Ó!0Ðþù~¹ÔMô4iiJÄÅ¥?ìI›nh!𬀹J'xy90`&£¢Õê’’…¤¤L$%)‰ädâã3’¢@\\3‘‘‘c¸Ž••y‘`ÙÛÛžžËàéé//G¾Ö&"""“ÇšŠ•““=– ^=o¬X1\èrH`§NÝž}—±gÏ$'+ž-•ŠÑ±c6l#`¥¯N§ÓaÒ¤­øí· Oô|~œD¢ÿªka@mi)ÅéÓŸs4½²}û.ãóÏw!!!Z­"Pµª3Žÿ "‘¨Äë……ÄôéÛ¡Óýû7æÿn*sZ$&f>컜fšõ'}Èœ››oXßÕÕ^^ŽÌúQÌ ˜É(yHLÌ@R’‰‰™HL, ™3œœ…¸¸t¤¦fù–н½5<ÍÌ þˆˆˆˆ@ÓS\¿ž€^½–bÞ¼þ6¬¥Ðå‘Ðét¸|9üq ¿ýv÷î¥B"13¼![²d(†m!p•/oÆŒøá‡#†ób±ÌÌÌ #¿­­-P»¶êÕóBíÚrøûËáïïñÔöD/J­Ö`ýú#X´h?rrô_Óþå—IhÕªF‰×ÑjuèÖm1®^ôiÝðÁÝË«\2QJ¥ÊÐãñp¹p$sR’Â0‰¦T*†——£aDgáf//GC+ ö`¦ò¥Ñh‘ššÔÔ,$&*šš…„„ ¤¦f#9Yää,¤¤d!11³È‡%’‡¡²½!\öòr„››är¸»ëCgKK©€÷Žˆˆˆ¨â`MOµmÛ |þùnìÝû<….‡ÊÈÓFU>‹DâK˰´¬©Ô”ô=´Zå3®i|¬­ëÃÞ¾#@§Ó@£É€Zµú RQPðMö3·Ã«Œ°°°WÞŽ™™ììZÂÚºòóãñàÁö§®/•Êáâ2 Å!(•^ùöKSPP¶mÛ&tôPAÉÉ ÄÅ¥#!!ÓЗöñ‘Ì·ɬ #–õ“žéGx^ææ&{¥c Ñ‹P(òšš…ÔÔ,$'ë[bè[c(Š„Í))YÐj“­¬ÌááaWW;¸¹ÙÁÍM[Èåps“A.ׇÍüP™ˆˆˆ¨tq( =Upðk8yò.BBÖaÿþipvf{SÕ¯_?½Ò622T¸|9Zí|´k'/¥ÊÊGV–'O&ÁÍÍ ^^6pv¶Ä‹f)aaaؽ{wÙHŽT*-µÀ511{ö8!(¨llž~èþé§;hÙr2||Œ§{pp°Ð%T*:ÉÉYOLz¦ÿ=±±iHIÉ2Œ^‹Íàêjgh‹Ñ¾½ÿшËìì,¾Wdʲ³UHIQàÁƒl¤¥)ñàA6’“³–¦|ì¼Âðûã-ÀD"\]máìl¹Ü..¶ð„›› nn2¸»ëCf{öZ&"""G@Ó3åææcРÿƒD"Æ/¿L‚T*º$*e"‘Û¶m{庲 Cpp0G@“!p-í¿jµæ™ÿƒ<ȆDb{{ãé;ZVGe•šš„}¸›Žøø C/æ„„L$$d è ÛÈå†6…'}[$3R…””¬"rñçõ¿ççàØÖÖ..vpv¶…““ œmáêª?ïìl''[¸¹ÙÁÅE};¾ýv˜Ð%UJÏó ¿©R±efæ !!±±éCf}°ŸŽøøLÄǧC¥zÖ99Ù@.ׇÉuêx¢S§:Ëíáíí¹\ß¿ÖÜœ/÷èÕäää?li‘´4}ˆ¬o‘m• {-?x]d ¸¸ØÂÅÅöax,C:^d}ÈìêjgXÎ~áDDDD¦…¯îè¹Èåøþû‘xóÍ•ð÷—cüøöB—DDDT¡(•ª‡aò£Öú 9Ó0šùñ‰Ðd2+xzê{-ûúºâµ×jÀÛÛ žžö†ÑÌœ^„R©BFF22rž^øSùÄeEÏ+Ÿ”­­Í £’ ÃcùÃQËúÊ..–s?%"""ªÜ@Óskܸ-‚÷ÞÛ†êÕÝйs¡K"""¥Vk‘‘WWãéeý4yyê'ú,'%)Š´ÉP(r ë[Y™ÃÛÛñak {4kæOOÃhf//Gö«¥eg« Š•HKË)rþÉ YÙã­Y ÉdVpr²ƒƒµá /rÞÑQßÃÍM([Y™ p¯‰ˆˆˆ¨¢bM/¤ÿƸq#ãÇoBxøD4n\Mè’ˆˆÈ„äääãÇObæÌ]˜9ó ¼óN¡K2Œ\NLÌDb¢â±ß3 ¿§¥) ë[XH†ÿ,b IDATàééOO{xz:"0Ðrù£QËr¹=Œ§G7 #77 E.Š<(yÈÊÊ…B‘[$<. Ž“32Š’…Å‚cOOÇ"ç ÃäÇ/33{Áw‰ˆˆˆˆ^hza}Ô±±é1bvêÕÝ„.‰ˆˆ*¸´4%6l8Šï¿?¥R߆"!!£Ìo7=]ù0HÎx"T.l‘••gXßÒR ¹Ü2xy9¢vmxxØ?6šÙ..ìÃmêÔj ²²òȹ† ùÑe–é/+ºnVV^±!²H$*6H®RÅé‰àø¿ëˆD ’‰ˆˆˆÈ81€¦&‰ðí·Ã0vì ¼ {÷¾¹ÜA貨œÜ¾}GÅÈ‘#….¥T)•J,[¶ Ÿ~ú©Ð¥P%S–Ï©_ýr¹Í›7êzqqqزe z÷îÀÀÀ"ËÊú¹›Ž5kaëÖãÐh´((ÐÌÌDHIÉzéíêt:$'g=*?ú]ß#/Om¸Ž¥¡%†‡‡=š4ñ‡‡þw//xxØÃÑÑæ•ï3 K£Ñ";[ þ,)(~,©œ““_ì¶­­Íagg™Ì2™åÃß­àãã {{ëÇ.³„%d2«"ëÉd–åüh•=ÐôR¤R1V¯Á›o®Äðák±cG(¿N\I\¿~«W¯®ôرcñÙgŸÁ××÷‰eYYYøüóÏ@S¹+ËçTxx8š6múÌ:$$®®®èׯßËÊê¹qýzV¬8€_=‘H„‚‚¢£AµZîÝK-öºjµ))Y{.g")©h¨ŸädE‘¦Îζpw×Z®Qí[ׂ——#<û ÿüóŽ;†þýûÃÇÇK—.Å¿ÿþ‹åË—£}ûöÅÖ÷*Ï={.àôi'(•ÑðD»§ùçŸ`kkú­1Ôj rrT†P87Wþ*•ù((ÐOx§Ñh‘™™ ­V‡¬¬\h‘­‚Z]€œœü‡!±>ÎÏ×@©T¡ @ …" EòòòKlAQÈÌL;;+XZJai)½½5ÌÍ%°²’Âb77;ØÚZÀÜ\;;ýÈbss d²Âëé×57—<ì‹l ssI¥ø[QQ  ©Tøúºâ—_&bàÀÿÈë±iÓ†Ð&ÌÁÁ ,€T*EëÖ­а°0´nÝZ­}ôD":wî ‰D‚÷ßßp~ñâÅ€ŸþíÛ·7ôœ>}:$ rss±{÷n4jÔÈзoß¾èÙ³'~þùgŒ7ùùù˜={6ÌÍÍáëë‹úõë#33R© R©`gg‡°°0¨ÕjCÍfffppp0¬WœyóæÁÜÜÕ«WGݺu‘™™Y†$‘^i<§ÂÂÂ0`À 00eÊüðÀ½{÷B.—cÒ¤I€Ž;bäÈ‘G«V­`ff{{{XX”¾ìs£{÷zX³& II–¨^½!NºóÌôqÉÉ ØÚº>÷ú/«0ÖjuP(ô£x³²ò Õj‘““µZ•J?òWë×Q(r¡Óé Tê×))¬ß^>t:23sÙÙyÐht†ëddäB«Õ>רáB2™%D"388XA$A&³‚Tjkkýh`++s89ÙÂÂB H$ú¾Æb±ööÖ°°Âa ‰a²……>¶¶¶€T*.ý˜ˆˆˆˆˆ*-ÐTjô!ô$ ÄÚÔU¯^½HˆˆÎÛØØD",,, ‘H ç Ý»wµjÕ2œ—J¥øè£±±±E–@íÚµc8/—Ë ¿n·wïÞøçŸЪU+888 K—.øì³Ïàààð\÷K,ÃÕõQÐõx½De©4žSqqq¨[·n‘íÖ©S€þùvýúuøøø–åææ–Ønã¿^å¹!•Šaf¦ƒJe†k×â¡R@,~zïçÇýôÓ)T­ê ÈÎVA£Ñ ‰óóõ¡ð£åÚ"¡¯~¹úáò¼‡ËaX^8ÒøE¿`gg±Ø VVúÀ…#…Åb3ØÙYB$¡jUgˆD0¶¶HÌ “YÁÌL¿­Âõ¥R1¬­Íaa¡Elee 1ƒa"""""ª°@S©òóÓ‡ÐþFú6Œfm‚RSS‹œONN†““Ó mÃÎÎÉÉÉE.Û¹s':uê™L†+W®YöàÁØÛÛ?u›:‹/ÆâÅ‹qîÜ9|÷Ýw8p Î;÷Bµ•·ÒxN9::>ñœ*Ü®L&C›6m°ÿ~òÜÜÜrùeÇŽ³¸zÕ¹¹bYðÜá3¬Zu¶¶–ð°Íƒ>„•Éô#€ Gÿ>Z.)úê]ýr++©¡gpáõ GÃ`o¯—mm-!›ZQH$bØØ°…Ñ‹`M¥ÎÏÏ;vèCèaÃÖ`󿱆‘bdîÝ»‡½{÷¢wïÞÈÊÊš5k0qâÄÚF—.] º¹¹áÔ©S>|8’““Ñ¥KÌ™3wïÞ…ŸŸ’’’°cÇlÞ¼ù©Û\¸p!öíÛ‡£G¢yóæ AHHH‰ëïÞ½5jÔ@``à ÕNTÚJã9Õ©S'Œ?ü1är9.]º„Ç£wïÞèܹ3>øàDFF" 999hÚ´)fΜ‰aÆ=±­Ò|n Ø;w~ …BŠFúbçΤ¥)!•ŠŸkÂå˃ѯ_ãW®ƒˆˆˆˆˆˆ„Áiã©Løù¹b×®P$%ebÀ€HNκ$*E-[¶Ä´iÓЮ];ÔªU ÕªUøqã^h:t@PPêÖ­‹Î;£k×®øæ›o`kk‹† âý÷ßG“&MеkWÔ­[ƒ B÷îÝŸºÍ#F &&õë×GçÎ1xð`Ì;×°ÜÍÍ ¡¡¡ˆˆˆ ï‘»{÷îˆJYi<§úöí‹.]º N:èСúôéƒÎ;jÖ¬‰¹sç¢eË–èܹ3jÕª…ÀÀ@ 2¤Øm•ÅsC&Sã‹/úãâÅ/°}ûD ÐÖÖ‰‰¤äÖ Ÿ‰ˆˆˆˆˆ*6‘N§Ó ]™®¤$‚‚V#7WŸ~š`èãIÆE$aÛ¶m zîëäååáĉ°··GãÆ/ݺu QQQ@•*UŠ,»wïnÞ¼ Ÿ'zB—D¥RáôéÓÈËËCƒ àææfX–’’‚óçÏ£Y³fptt|éšK†àà`ðß*¶mÛöÜ×)­çÔåË—‘””„æÍ›C&“Y‡«W¯ÂËËë‰~Ñe©¤Ç#?¿ÿü‰;ÏáÏ?/C­ÖB$´ÚGÏ¡øøoË­N""""""*}  ©Ìefæ`øðœù³¯Dåêehzh*ô2´){žÇ#;[…ýû/cÇŽ³8zô–¡O4h"""""¢Š-8¨ÌÙÛ[cûöwP§Ž'ú÷_Ó§ï ][[ Ô?þ8.ÌÁüùƒÐ¼¹ŸÐeÑ+bMåÂÊÊ7ŽEûöµ1dÈ*üúëy¡K"""#åìl‹‘#_ÇîÝ“….…ˆˆˆˆˆˆ^h*7R©+W¾…qãÚcâÄ-øöÛ?Ùª€ˆˆˆˆˆˆˆˆÈ„I„.€*‘H„O>é??WLŸ¾QQ)X¼x(¤R±Ð¥Q)ãhÄ!ͱmÛxüõ×5 º 9B—DDDDDDDDDD¥Œ4 ¦uëšØ³ç=$$d¢gÏoqãF¢Ð%Q)bM‚ªQà {÷N§§z÷^Š={.]•Ð$8''üôÓ; j‰ 6ãË/÷B£Ñ ]½"Ðd$3Ì™Ó˗㇎`øðµHOW ]Ñ ÉÈÈÁÚµÿâüyèt"¡Ë!""""""œH§Óé„.‚èqW¯Æaôè ‰°nÝ(z ]’ɉôAÙ›o¾)p%[xx8€ÿV+Ÿsçîcóæcøí· ‹Íààsç6aàÀ>B—fÂÃÄmÛ¶ ] •3Ðd”ÒÓ•˜8q Nœ¸ƒY³ÞÀ¨Qm„.ɤ óû£]ÛEWKøry>Ιs˜ù|¿Ãë;Ì/>¼¿oËÝÝU«Wߥ°°Ÿ @'ÓÐФ-[Šõ·¿íUAÁI ௻îŠRBB¸zôð4:m4Ú…¯¾ªÑ#¤i÷î#Z¼xªî¿쥹ÅÐRŽ/—Å’«µk tñb~ùË¡š;7J£Gâ;€«@vÃápè•WvëÙg³q“V®LRß¾¾FÇÐÁÔÕ5êwÊbÉS^Þgêׯ‡Ìæ%%™Ô»ww£ãЮP@£Ý9xð ýö·©ª¨¸¨åËgkúôÛŒŽ (-=#‹%Oëת¦¦^'†ÈlŽÔر7ËÙ™ÝÎüÐh—jkô‡?déÍ7÷húôÛôì³qêÞ½›Ñ±´3µµ Ú²¥X©©¹**²*0ÐOÉÉš3g”¼Ž@»Gvm÷î#zä‘t¹¸8iåÊ$=ØèHÚÇOÉbÉÕ† Eª«kÒí·•ÙÉlg®3 h´{UU_káÂuÊÊ:¨¹s£ôØcSåííat,mLMM½6mÚ/‹%OÅş릛”œ¡øøpùùy€‰ÆæÍ´téyx¸é¹çâlt$m@Q‘UKž¶n-Vcc³¦N&³9RAìv …Q@£C9wî¢|£6mÚ¯9sÂõä“3äëËlh ³©¬¼¨ Šd±äêØ±³ î«ääÅÅä;€VDéý÷iáÂL9v=óÌlMžjt$-Ìnwh×®R­]›¯mÛ>Q×®nš6í6%'GhøðŸ€N‰–ÍV«'ŸÜ¬ŒŒ|M˜0DË–ÅéÆ{ ÀuVVv^ééyZ»¶@§N—ɤÄD“î¼s¸ºus7:4:¼={ŽiñâL9S¥G¤ûî‹‘««³Ñ±ü MÚ¶í,–\}ôÑ1õìé©„“FiàÀ£ã€¡€F§ÐØØ¬_Ü¡U«vjÀ?-_¯ððFÇpJJÎ(==O™™…ºp¡N117+%%J±±Árss1:ø ht*Vk¥-ÊTNÎQ%'Ghñâ)êÙÓÓèX®Àf«Ó–-”žž§>W` ŸæÌ WR’I½{w7:¸ htJ›7ГOnRmm£-𢔔HÆrmL~þ ¥§ïSVÖA57Û5yr¨G):zœœœŒŽ®4:­ššzýéOïëÕWw+(È_Ë–Å)*j Ñ±€N­²ò¢Ö®Í×ßÿ¾OÇ—+$¤Ÿ’“Mš93L¾¾ÝŒŽ®4:=«µRO<±Q;v|ªÉ“CõÔS3Ô¯_£cFs³]~xDK®vîüT]»ºiæÌ0%%™Úßèxà' €þe×®R=þø>]¥ûïÑüùãåéÙÅèX@‡eµVjݺ¥¥íSy¹M&SÌæM™2LnFÇ×4ð›õÚk9Z¹ò}¹¹¹hÁ‚Û™ \GõõMzçƒÊÈÈמ=Çà£Ù³GÊlŽP` ŸÑñÀuF ü€óçkôâ‹;ôÚk90À_ NÖwÜjt, Ý:tè”ÒÓ÷iãÆ"]¸P§ †(1Ѥñã‡ð:0 hà ¬ÖJ-_þ®¶n-VdäMZ²äNÝvÛÏŒŽ´ 6[Ö¯/PFF>þø à¯äd“fϩ޽»´ hà*ýSO=µY……'5qbˆ.œ¬!Cn0:Ðæ8íÝû™ÒÓóôî»K’¦M®ÄD“L¦ 999œ´& hàdg—hÅŠ÷ôñÇeš2%T Ü®›oîct,ÀpgÏV+-mŸÖ­+ÕZ©aÃúËlŽÔ´i·ÉÇÇÃèxÀ ÐÀ5r8Ú¾ýV¬Ø¦#GÎhæÌ0ýîw¿TP¿ÑÑ€VÕØØ¬>8¬ôô<}øáy{{(>>\‰‰&÷5:h( Énw(+ë žþ=Y­•Š‹©G¤þý{ hQÇ—ËbÉÕúõ…úê«=Xfs„&M*wwW£ã€6„ø‰š›íÚ¸q¿þøÇí:uê¼Mz䑉êÛ××èhÀuSSS¯­[‹e±ä©¨Èª~ýz(1ѤÄÄQêׯ‡Ññ@E \'MMv­]›¯•+ßWEÅÝuW”æÏŸ €o££?ZQ‘U©©¹ÊÊ:¨ÆÆfMš4T))‘ŠŽ$ggn(®Œ¸Î›•šš«¿üe‡l¶Z%%™ôÀãtãìEûPYyQ™™…JKËÕñãå î«ääÅÅ”¯o7£ã€v„h!uuJOÏÓK/íÒ—_VkúôúÍob¹9Ú¤æf»>üðˆÒÒrµcǧêÚÕMӦݦ””H…†ö7:h§( ÖÔd׿Íûõ׿f«´ôKÅÆÞ¢‡¯ˆˆ›ŒŽÈj­ÔÚµJOß§òr›L¦ %%™tçÃåááft<ÐÎQ@­Äáp(;»T«WïT^Þg Ôüùã5qb³tѪêêõî»+==O{÷~¦€Íž=Rfs„ýŒŽ: hÀEEV­ZµS|pXöÖƒŽÓ¬Yarss1::°’’3JMÍÕúõª­mTll°’’L?~ˆ\\œŽ: hÀ@G~©—^Ú¥ Šäçç­ûî+³9R^^]ŒŽ†¢¦¦^[·ËbÉUQÑ?è'³9Bs挒¿¿·Ññ@G ´gÎTi͚ݲXråä䤄„Qš7o´ ð7:Ú©C‡N)5u¯6mÚ¯ºº&Ý~û­JI‰Ttô@991ò´ h  ±Ùje±äé­·>RYÙWЉ¹E¿þõÅÄÜœhüW55õÚ¸q¿,–\<ø… Prr¤âãGªW//£ã€Nˆhƒìv‡vì8¬×_ߣœœ£ ôÓ=÷ŒQ||¸¼½=ŒŽ‡6¦¸øsY,yÚ´i¿›5uê0¥¤DÊd b·304ÐÆ=ú¥Þxc23 åä$ÅLJkÞ¼180Àèh0ÍV§‹d±äêСS<¸ÌæÅLJË×·›Ññ$Q@í†ÍV§ŒŒ}zóÍdµV꿬{îù…bcƒÏÑ55Ùåêê|ÍçY•šš«­[‹e·;4mÚp™Í‘ Ð)~ h ±ÛÊÎ.Ñë¯çh÷î#êß¿§F)9Ù¤Þ½»WÁf«Õܹÿ«•+“èwUǯ__¨ÔÔ\•”œQpp_¥¤D*.n¤||º¶Bb€‡hÇNœ¨ÐÛo¤õë‹TUõµbcƒ•œ¡ñã‡ü¨Ýµhy••5gÎj•–~©yóFkÙ²¸Ë›ŸBKž¶n-–‹‹³î¼ó›ÝÎaa?oÅÄ?4Ð444iûöCJMÍÕG“¿¿æÌ WR’éªvØ¢uœ>]¥¸¸U:}ºJÍòðpSqñSßÚÅ\UõµÖ®-Å’«cÇÎjèÐ~JI‰ÒŒ#äãà (@ûB t0Ÿ~NùJKÛ§òr›¢£)9٤ɓCåîîzÍïçp8ääÄŒéŸêäÉ ÅÅ­Ò¹s5jll–$¹¸8ë±Ç¦êb”—wBK®²²ÊÍÍE3gŽÙ©aÃúœàÇ£€:¨æf»ví*•Å’«ììyzvQ||¸G)8ø†«~Ÿ¥K7hĈŸkÖ¬°LÛ±•”œQ|ü*]¸P§ÆFû·Ö<=»¨OŸîúì³r þ3™Íš1c„<=»”àú¡€:³g«µn]¡ÒÒòdµV*8¸¯ââF*..ìŠ7.ln¶«ÿ’¤¸¸‘Z¾|6Åè5Ú¿ÿŸJL|Yuu jj²oÝÉIŠŽ¤'ž˜®¡Cû åP@ˆÃáPa¡U™™…ÚºµX6[­¢£).n¤¦L ý^¹œŸB3f¼(IruuQŸ>Ýõê«w3â*íÙsLs羪††fÙíß/Ÿ%ÉÙÙIƒ÷VvöÂVNÐò( Nª¡¡I;w–hݺeg—ÈÅÅYwÜq«fÍ ÓØ±7ËÅÅYÏ<“¥W^ùð[3‹%]š[üÝÙÐÕÕÕ*++kõkikBBBôÁ‡uï½o¨©É®«ùšÍÌ|HQQ[!@ë¡€ ªª¯µeK±23 UTd•¿¿—fÌ¡÷ß?,«µò{Ç;;;):zV­J‘¿¿÷¥×Ïž=«’’ùûû·fü6£¢¢B’tþ¼~Ø"»ÝqU峋‹³L¦›”™ù›–ŽЪ( |‹ÕZ© ŠôÞ{ëðáÓ—=ÎÍÍE^^]´zõ]Љ¹EÒÿÐ111­”¶m9{ö¬V®|Go½õÉeqrúfœ‰³³“ìv‡šššõïoá½{—(0Я•Ò´>]Õ£G7õêå¥>}ºËÏÏK½zy©gOOõìé%??oõìé)??ï˼3@ûD àmÛvHvû•eú}ÊØIDATÿAâßëkÖìÖ?þqDÏ<3µ5¢µI§OW©[7w=üp¸Æ‹øW¹üÍ㻳²: Fpø›­NC‡.USSó5Ÿ›”4D/¼ð?-ªíëì#H¾ËÙèڞݻKÕÔÔ,g¹»»^z|3»øÊ禧ª%K6¨¾¾©u Íb€ï©©©×Ô©ÃÔ«——¼¼<äéé®®]ÝåéÙEÞÞòðpS·nî—~îÚÕ]Ý»w•Ív^'Nc0$Q@ø‰‰&%&š®ù¼úú -í#8à2î½÷^ø öîÝ«††åäähÓ¦Mzï½÷´sçNùùùé•W^QDD„‘@»ÅM&##C111š1c†$é÷¿ÿ½\]]U[[+wwwíÝ»W#FŒ$ÉÍÍMÕÕÕª««“$Õ××ËÛÛ[iiijll”¤+®eee©oß¾z衇$I±±±ºûnÝ:-X°@µµµZµj•n¸áI’³³³|}}åææÖz @B À0V«Uƒ¾ôÜÍÍM .¼ô¼¨¨H‹/ÖñãÇÕ³gOÙívIÒÔ©S•­¨¨(ùúújâĉZ²d‰|}}¯¸fµZUZZªÀÀÀK¿£¶¶V“'O–ôMáüïò?#8ÆÛÛ[UUUßzmÆ ª®®Ö¦M›´dÉ-]ºTGUAAºuë&Ir8zá…tîÜ9­[·NuuuŠ‹‹û¯k>>>3fŒ¬Vë·/½ô’$ÉÉÉ©¯ ã£€`˜‰'jË–-*//—$íÛ·O)))rqqQYY™† ¢1cÆÈÅÅE¹¹¹²Ùl’¤çž{N111ruuÕ¨Q£4wî\>}ú¿®M˜0A999*))‘$}ýõ× ÓÆ ¸z€Ž 3nÜ8%''+$$DÆ SAAV¬X!///MŸ>]O?ý´ÆŽ+www¹¹¹)((H ,ÐêÕ«µfÍ…††* @………Z±b…$éW¿úÕe× ¤§Ÿ~Z Wii©¢¢¢”p©¤þOš?¾þüç?+,,¬U?€ŽÀÉáp8Œ c8{ö¬JJJsMç;vL'OžTpp°ú÷ïéu›Í¦üü|(44T_|ñ…Nœ8¡±cǪ¾¾^ùùùª««Ó°aÃpé¼+­IÒ©S§tøðaõë×O!!!—ÍUQQ¡(<<\=zôh±ëè¨( \7½€íì×ð]Ì€´ h@‹ €´ h@‹ €´ h@‹ €´ h@‹ €´W£èx***ŒŽ`ˆÎzÝ—C àº;|ø°ÑÐ89‡Ñ!3 -‚Ð"( -ÂUÒA£C:žÿ0/†­;ãþIEND®B`‚bm3.7.0/doc/html/namespacemembers_func_0x6d.html0000644000175000017500000000677111365042652020011 0ustar tlktlk BitMagic: Data Fields
 

- m -

  • min_value() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00177.map0000644000175000017500000000017511365042644013247 0ustar tlktlk bm3.7.0/doc/html/a00249.map0000644000175000017500000000022411365042651013240 0ustar tlktlk bm3.7.0/doc/html/a00238.png0000644000175000017500000002161711365042650013255 0ustar tlktlk‰PNG  IHDRÃYÔbKGDÿÿÿ ½§“ IDATxœíÝ{P”õþð÷Â.+ \HÄ[yG‰D “D=¨‰™éI1ql<'ór:G=^jJÓh2McjŒŽ—±@Fµ/(„š%Jj*¢¢± ¸€ÜäÎîç÷‡?ŸÃÂ>Ï.ɳ öyÍ8Ãóì³Ï÷ó½ìÛ}XP1Æd`cícÏ.Ƙl8`c²QZª¡˜˜K5Å3aæÌ™iGa©›¼ …ÂÍ0ÆÌ`©ïíXì DFF"44Ô’M2Æ‰ŠŠÂœ9s,Ö߃aŒÉ††1&Ƙl8`c²á€aŒÉ††1&›60·o߯þýûŸ™v¬--- áááÐh4û+**°aÆf_·%%%ظq£µËøCþ,kË”60™™™ˆˆˆxfÚilþüù¸{÷®EÛ ÃÚµk±gσýeeeøä“Oš}ÝV”••Ô,רÉq^k¬­¶¨M̳,)) eeek/''gÏžÅÊ•+qðàA‹µÛz÷î›7o Ûr¥çäϤÍŒ^¯Ç’%Kàää|þùç€ââbŒ?[¶lA·nÝàî{÷båÊ•pww‡§§'¢££…ólÚ´ ï¼óŽè¶X;‹-®]»„ã***0|øpÜ»wpõêU C‡èß¿?¢¢¢„cOž<‰ÁƒÃÎÎ~~~HOOÌš5 Z­³fÍBZZ %%¾¾¾P«Õ8p > Ðjµxíµ×pàÀ¸¸¸àúõëFÇ©¶¶Vr£¢¢ðÊ+¯`ÕªUÈÎÎj1E¬.©þµ´6@z~úîîîP«Õ7nrss…ǤÖ]›D€"##Í:öèÑ£¤P(hùòåTYYIiiiäììL111”ŸŸO666ôñÇ“^¯§;wÚ°aéõzÚ¸q#õíÛW8×áÇiÛ¶mF·¥ÚÙ¾};1BxÞ襗^""¢G‘§§'mß¾jjj(99™œœœèìÙ³¤Ñh¨S§NOUUUN½zõ"½^O%%%äééI§OŸ¦ºº:*(( N:Ѿ}û¨¦¦†ÈÁÁ233I£Ñ½½=MŸ>Î;GµµµctçÎZ±b 0@r,‡ BDD4aÂZ¾|¹ð˜F£!µZÝìkSu‰õ¯©ØØX6líß¿ŸjjjŒÖ'5?wïÞ%GGG"¢fcgj]QQ©ÕjЧššJMM%Òjµ­:'I­­òòrÑz’’’¨[·ntëÖ-*//§©S§Ò¢E‹L®;sEFF’_öÔfÆÕÕ•êêê„}aaa4}útÊÏÏ'ôèÑ#""ÊÊÊ"¥RIõõõDDtéÒ%zî¹çžº­VK*•Š~ÿýw"" ~tt4ùùùœkÉ’%´lÙ2úòË/é7Þö×ÕÕц ¨²²’ˆˆ¼¼¼(##ƒˆˆ"""(00Ðà<3fÌ uëÖ‘F£!”——'<¦×ë)11‘^ýu8p mÞ¼™Š‹‹Eûwùòe²³³£‡ÑîÝ»ÉËË‹t:‰ŒT]¦ú×ÔùóçiîܹԽ{wZ½z5åääˆÖÛTã€!2;©9h:v555tñâEá¸'}½uëV³ó¶tNÄH­-©z¨[·nôÛo¿ÑãP)))1ÙgsY:`,úaÇ–èÓ§T*•°=dÈ$'' ÛŽŽŽJ[­VC©T Û­ÑŽ»»;‚‚‚‹¹sç"-- ß~û-àÞ½{ÈÌÌDïÞ½…çUWWcòäÉhhh@ÿþý…ý*• ~ø¡Ñ¶sss Ž€ßí±±±A·nÝgΜÁ‚ àííeË–!((Èd_###AD1b€Ç—,yyyHMMŸqãDŸ'Uד·ææôüýýáï"ìÞ½cÇŽ…¯¯/âââ$k7EjñS«Õ¸xñ"V¯^Û·o£sçÎÐëõFÏÛ’91ElmIÕ3eÊœ:u £F‚‹‹ &L˜€°°0¸¸¸˜ìs[Ôf¦¨¨È`[«Õ¢sçÎm'44°··ÇäÉ“…ýNNN=z4’’’„çUWWC¡P`ýúõÐjµ猋‹CPPœ ö;99á·ß~3ØW\\,×8@T*Ôj5 ñðáC444,Þ¦ˆħŸ~Š7ß|SØ¿xñbDEEIŒT]vvvf÷¯1N"‚R©DÇŽE3—ÔŒ]BB‹Q£FÁÖÖ...¢ç5wNL[[Rõ6oތ͛7ãÒ¥KضmÞzë-\ºtI²Ïm–¥Þ*¡…—HèèÑ£DDT^^NÞÞÞ´}ûváé‰[·n¼ÎÈÈ0¸DJOO§¤¤$£ÛRíUTT££#y{{œ#++‹èúõëDDTYYIƒ ¢¨¨(:uê¹»»Óƒˆèñ%‚½½=UTT‘áÛñŒŒ rtt¤;wîÑã{îî˜H†lmm›MZZ…„„PÏž=iÍš5”››kt SRR .žØ»w/¹ººRmm­è%’T]¦ú×ÔéÓ§)$$„žþy '­Vkð¸ÔüH]"IÍAÓ±ûꫯh̘1Âö¹sçH¡P½Dú#sbŒÔÚ’ª'<<œ„ÇŽ;&¬g©>›‹ïÁÐãÉ9r$õëשk×®Luuu-˜¥K—’¿¿¿Ñm©vž ¡=z÷-žØ¼y3999QPPyyyÑÌ™3…c–.]JnnnDNNNB` :”(==ˆˆÖ¬YC...4aÂêÒ¥ -^¼˜ˆÈäb¾ÿ>­Y³†lôñ÷Þ{¦NÚlii)©ÕjJHH ©ºLõ¯±˜˜ ¤˜˜áYSRóÓ4`šŽØ4»œœòðð ÀÀ@?~<SŸ>}„ñi­9iLjmIÕ£Ñh¨gÏžäããCAAAäììL»víÎ+µîÌÁÓHuu5:uÊà†˜þh;¹¹¹tìØ1á†\cYYYtìØ±f75µZ-;vÌàÅÝ»w騱ctóæÍ×ÞÐÐÐâç˜Kª.±þµfm:ŽŠŠŠ„mcc'5•••щ'èòåËDô8tRRRDÏû4sÒ˜ØÚ’ª§¦¦†~üñG:~ü¸ðN±1sûlŒ¥Æ¢¿2“£{Väçç|Ó¡)øúúZ°"ó<ùvzÙ·Ý›¼Œµe*• nnn¢;88X°š¶‹†±?ÀÍÍ “&M²vm^›ý¨c¬ýã€aŒÉ††1&Ƙl8`c²á€af«¯×¡¾^gí2X;ÂÃÌ–šz©©7MÈØÿ³èOò²öÍÍím@QQ´‰#Y[÷Ìý$ï¡C‡,Õ“A]«V|ûm4ììøÍ/3Íb3sæLK5Ådp Àã€qtì‡iÓü¬[kø¿!f–ØØ‹°µµ­­ bc/Z»ÖNpÀ0“JK«’’ NN””L”–VY»,ÖpÀ0“¾ûî²YûkІ™ôßÿ^0ø®á¿ÿ½`ÅŠX{ÁÃ$=xP† îA¯ÿ_Àèõ„ îáÁþkˆL “”›æ?Ãdc£@BB†*bí  “tèÐètÍ(K§#:Ä—IL •]ˆ7î0öSŸ„7î#;»ÐÒe±v„†‰JH¸•J|‰¨T6ÿÿxŒÇÃD:tõõÆÿÄ*Ô×ëù2‰Iâ€aF]¹¢ANN±ÉãrrŠqåŠÆ±öˆÿª3*'ç!^}µ\]…}—.ýðóë%ì+)©DNÎC¼øb‹×ÈÚ>‹ýºÖþ½ÿþ7€;æZ¹Ö^ð%cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓYQhh(àí䟣ãKäèø’Õëàæÿ µæKœ”°2¥R‰°°0k—ÁZäMkÀÌðÙgŸY»X=`ÆŒƒ±cÇZ» Æž9gΜ±v |†1&Ƙl8`c²á€aŒÉ††1&›v0yyyHJJzfÚ±¶+W®à›o¾V«5Ø_UU…¨¨¨f_3ÖRí*`rrrpäÈ‘g¦Æ6mÚ„üü|‹¶¹gÏìÛ·?üðƒÁþÊÊJìß¿¿Ù׬õYcÞ-©]̳ì—_~Aee¥ÅÚÓjµ¸zõ*fÍš…ääd‹µË YzÞ-­Ý ᫯¾Â믿ŽéÓ§#22P^^Ž+V &&3fÌÀ´iÓ˜˜ˆ¯¿þÓ¦MÃ[o½…S§N ç‰ŽŽÆçŸ.º-ÖΖ-[ðÝwß ÇUUUaáÂ…(((dggãŸÿü'&Nœˆ¹sç¼x/^¼ˆyóæa„ X°`nÞ¼ X·nJKK±nÝ:\¹rð믿âÝwßÅ„ ðÎ;ïàìÙ³€ÒÒR¬Zµ ÇÇ”)Sðûï¿§úúzÉqÀøñãñý÷ßcùò娲e ®]»†ÂÂB¬Y³óçÏÇwß}‡ÀÀ@¬]»D„+VÀÙÙ+V¬€··7JJJ†™3gâ‡~ÀÂ… ñé§ŸB£Ñ ¾¾W¯^Å™3gðÅ_ÀËËË`|òóóñõ×_ãÝwߕǓ'ObâĉpvvÆÐ¡CÍz#U—Tÿš:þ<.\ˆcÇŽ‰†ÔüHsCC®\¹‚Ë—/ãÀØ·oΞ=‹K—.¡®®ÙÙÙíh4TUUµhýHµßt~\]]ñÅ_`ñâÅHJJÂÚµk±k×.”––¶ê¼·UVÿ¨@KuìØ ,€R©„¦OŸŽäädøøø€ˆ0{öl( 6 ¶¶¶ ¶:$œgÔ¨Qçmº-ÖÎòå˱cÇhµZxxxàÔ©SüôÓOèܹ3¦M›:t(&Mš„””¸»»ã¥—^«¯¾ xûí·akk‹ºº:tìØ …;v„R©Ä™3gзo_Lš4 €‘#GâôéÓFmm-–.]Š.]ºxünëÂ… ˆÇýû÷1eÊìØ±Ct ³³³¡Ñh„hŒ;û÷ïÇâÅ‹¡P(DŸ'UW‡Dû§V« Î3zôh¸¹¹!!!{öìÁĉ1uêTxxx˜5?Rã<{öl444`Þ¼yP*•ðôôÄ /¼`Öeˆ¹ëGªýƒù©¯¯ÇŽ;Я_?€§§'”J%*++áååõTóÞ´»€éÖ­”Êÿ•ýüóÏãÒ¥KÂv‡ …*• ¶¶¶Âvk´ãââ???¤¦¦bâĉ¸råŠðaÍ‚‚äääàí·ßžW[[‹‘#GB§Ó¡{÷îÂ~¥R‰Ù³gm»°°=zô0Ø×£Gá»= …BXdW¯^ÅæÍ›Ñ«W/̘1~~~&ûzâÄ À¢E‹<¾d)**¯¿þŠ¡C‡Š>Oª.;;;³ûƒ  AƒPVV†ï¾ûË–-Cß¾}±~ýzÉÚéq~¢ñ‹°%soÎú1Õ~ãùQ©T¸yó&víÚ…¼¼<899}W´lÞÛ‹v0eeeÛ¥¥¥èÔ©“EÛ Â‘#G V«áïï/ìwppÀ‹/¾ˆ7 Ï«­­…B¡ÀPRRbpδ´4øùùÁÑÑÑ`¿ƒƒîÞ½k°¯¼¼\8®ñbW*•P©T(--EEEt:A06ED8uêþþ÷¿# @Ø¿uëV$''KŒT]*•Êìþ5¦×ë¶¶¶°··=®ibãüèÑ#³ÎñDMMM‹Ž7Õ~YY™Áüœ9s{öìÁºuë0dÈØØØ`Ê”)¢ç5wÞÛ‹vw¦  ?ýô€Ç7X9bð?—¹²²²páÂÑm©vF;wî ..“'Ož3lØ0\¹rE¸W[[‹… "-- Æ ùsçPZZ ¸qã>ûì3ØØ4Ÿ‚áÇ#==]øöeII ~üñG 6¬Ù±ƒ ÂîÝ»1þ|¤¦¦bΜ9Ø·oŠŠŠŒöûÊ•+xøð!¦L™‚ž={ ÿ&Nœˆü ¢c&UWKú<¾™¹nÝ:¼ÿþû õÕ«W KÍÔ8KyriRQQ!Ô˜——'ùcZÒ~aa!zõê…_|666¸víªªªŒž·%óÞ^´»w0ÞÞÞØ¹s'¢££‘››‹~ýúaÊ”)(//oÑyŽ?ŽëׯcĈF·ÅÚ{{{Œ9ׯ_ÇðáÃ…svïÞï¾û.þñ`àÀÈÉÉÁ!Cð—¿ü …AAA˜7oúôéƒÌÌL,Z´Hø_ÛÕÕÿùÏð¯ý ýû÷GHH,X€"++ ãÆÃË/¿ŒÂÂB£ýñññŠ‹‹qäȬZµ ûöíkvÜÉ“'ñòË/7{׈­[·âçŸFÿþý¶Ñ·o_ѺHö¯±ÔÔTÄÅÅá¯ý+>úè#á2ÄÜù‘ç¦ï¢óôôÄ AƒðÞ{ï¡OŸ>(//Ç!CD#Õ~Ó`À°téR¨T*á¾ÐÎ;ñÙgŸ=õ¼·u » ´€9sæàÁƒøè£Zô¼ºº:\»v ;vnžÉá¶STT„{÷îÁÍÍ ½{÷6x,77èÙ³§ÁMÍÒÒRܾ} ^üÈÍÍE×®] îo˜C¯×‹¾{xZRu‰õOŽÚ¤ÆYŒN§Ãõë×<þOÄX¸µvûUUU¸qã\]]ñ /@«Õ"??¾¾¾­>ï…‡‡ã¹çž~ÄÂÚeÀ0ÆLk ÓîîÁ0ÆÚƘl8`c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††™-'§99-ûHûs³úg‘’““¡Óé¬]3Ca¡'ÀÝýÙý²Ï’””„††Zµ«Œ¿¿¿Y¿>‘µ 7o>ðöÿÄ5k;fΜ «Ö`ÕÏ"±öã—_²1mÚW€„„áå—_°rE¬=à{0Ì,‡ÿ •Ê*•-þÕÚå°v‚†™ÔРG||:êëu¨¯×!>> zk—ÅÚfRZZJKÿ÷«%KKk––eÅŠX{ÁÃLŠ‹K‡Rù¿¥¢TÚ ..ÝŠ±ö‚†Iª­m@bâU44üïG tHL¼ŠÚZþn“ÆÃ$8q ÕÕÍ” ºº'N\³BE¬=á€a’bcÓacÓüÏeØØ(Ë—IL U^^ääÐéšÇH§Ó#9ùÊË«­Pk/8`˜¨ÄÄ«ÂF3F¯×#1ñª+bí  cúÈœcØŸ 3J«­À¹s· ×‹’D¯'œ;w Zm…+cí  3êÈ‘ YŽe.üaGf¶÷ßÿ°cÇ\+WÂÚ ~Ó  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0ÆdÃÓ  cL60Œ1ÙpÀ0Æd£ "j¼ãÌ™3ضm›µêamØÍ›®€J¬\ k‹–,Y‚W_}Õ`_³w0999ˆ‰‰±XQ¬ý0 „Ã…ƒœœœfû•bO8tè¬1Æž …Âè~¾Ã“  cL60Œ1ÙpÀ0ÆdÃÓÍSÌíÛ·±ÿþV(¥m´cmiii‡F£1Ø_QQ 64ûšý1‡Æ/¿übí2žyO0™™™ˆˆˆhZÚD;ÍŸ?wïÞµh›aaaX»v-öìÙc°¿¬¬ Ÿ|òI³¯ÿÌžf~bbbpîܹV®¨í²ÆZøIRRRÊÊÊ,Ö^NNΞ=‹•+WâàÁƒk·½²ôü´gÖ«V ½^%K–ÀÉÉ øüóÏÅÅÅ?~<¶lÙ‚nݺÁÝÝ{÷îÅÊ•+áîîOOODGG çÙ´iÞyçÑm±v-Z„]»v ÇUTT`øðá¸wïàêÕ«@‡пDEE Çž| ÕjñÚk¯áÀpqqÁõë׎Smm­ä8FEEá•W^ÁªU«-ÔbŠX]Rýkim€éù‘jK¬Æ{÷îaܸqíÌš5 ?ÿü³°~"##ѧO8::bÞ¼yÐétFçGjž£££Ñ»woØÛÛcÚ´if¿ØÄÎ)U›9}2÷5!Ö¾±5wðàAôíÛJ¥žžžØ´i“Ðvk¯e³Q‘‘‘dd·¨£G’B¡ åË—See%¥¥¥‘³³3ÅÄÄP~~>ÙØØÐÇLz½žvîÜIhÆ ¤×ëiãÆÔ·o_á\‡¦mÛ¶Ý–jgûöí4bÄáy —^z‰ˆˆ=zDžžž´}ûvª©©¡äädrrr¢³gÏ’F£¡N:Q||}šêêꨠ €:uêDûöí£ššJHH ÊÌÌ$FCööö4}út:wîÕÖÖŒÑ;whÅŠ4`Àɱ2dEDDÑ„ hùòåÂc†Ôju³¯MÕ%Ö¿¦bcciذa´ÿ~ª©©1ZŸÔüHµ%Uã7¨K—.íøúúÒ‰'(??ŸìììhÁ‚T[[KÙÙÙäââBÇo6?Róü믿’Z­¦ØØXª®®¦­[·Úºu«ä|HSª6S}2÷5ají6^sEEE¤V«)>>žjjj(55•lllH«Õ¶êZ€"##›ïoºãŒ««+ÕÕÕ ûÂÂÂhúô锟ŸOèÑ£GDD”••EJ¥’êë뉈èÒ¥KôÜsÏ=u;Z­–T*ýþûïDD,,üèèhòóó38×’%KhÙ²eôå—_Òo¼!쯫«£ 6Pee%yyyQFFEDDP`` Áyf̘AëÖ­#FC(//OxL¯×Sbb"½þúë4pà@Ú¼y3‹öïòåËdggG>$"¢Ý»w“——ét:"©ºLõ¯©óçÏÓܹs©{÷î´zõjÊÉÉ­·)©¶¤j4õb@÷ïß ¤˜˜"2œ©yþàƒhöìÙùøø˜ ©sJÕfNŸÌyMHµßtÍÕÔÔÐÅ‹…㞬‘[·n5«–®esˆŒèg‘Z¢OŸ>P©TÂö!Cœœ,l;::xüyµZ ¥R)l·F;îîî Bll,æÎ‹´´4|ûí·¿ÏÌÌDïÞ½…çUWWcòäÉhhh@ÿþý…ý*• ~ø¡Ñ¶sss Ž€ßí±±±A·nÝ<þDú‚ àííeË–!((Èd_###AD1b€Ç—,yyyHMMmövÛܺž¼­6§àïïa÷îÝ;v,|}}'Y;ðxœÅÚ25v¦xzz _‹£Ô<×××cðàÁÇ{{{›lWêœ-©Ís^¦Úo¼æÔj5.^¼ˆÕ«WãöíÛèܹ3ôz½Ñ¶[²–ŸV«LQQ‘Á¶V«EçÎ[ãÔf·ŠˆˆØÛÛcòäÉÂ~'''Œ=IIIÂ󪫫¡P(°~ýzhµZƒsÆÅÅ!((ÎÎÎûœœðÛo¿ì+..Žk¼0T*Ôj5 ñðáC444cSD„ƒâÓO?Å›o¾)ì_¼x1¢¢¢$Fª.;;;³ûטN§A©T¢cÇŽ¢Ç5Ö©S'ѶL]S•••fµÙ˜Ô<¯ZµªYmM×RKÏYZZÚ¢úZ»OEEEk.!!aaaˆÅ¨Q£`kk Ñóš»–ŸZÓ·4ä =z”ˆˆÊËËÉÛÛ›¶oß.¼|âÖ­[äèè(lgdd\"¥§§SRR’Ñm©vˆˆ***ÈÑÑ‘¼½½ Α••Etýúu""ª¬¬¤AƒQTT:uŠÜÝÝéÁƒDôøÁÞÞž***ˆÈðmeFF9::Ò;wˆèñ½www—ŠÏ_8IDATJLL$FC¶¶¶ÍÆ&--BBB¨gÏž´fÍÊÍÍ5:†)))—GOìÝ»—\]]©¶¶VôIª.SýkêôéÓBÏ?ÿ<…‡‡“V«5x\j~¤Ú’ªñöíÛ¤T*…ËÇóçÏƒË‰ÆÆŒcôIjžãããÉÃÃC¸œ¹|ù2©T*“—HR甪­%}’zMHµßtÍ}õÕW4fÌaûܹs¤P(Œ^"ý‘µl ä¼3räHêׯR×®])88˜êêêZ0K—.%£ÛRí<B=zôî[<±yófrrr¢   òòò¢™3g Ç,]º”ÜÜÜ(((ˆœœœ„À"":t(Pzz:­Y³†\\\h„ Ô¥KZ¼x1‘ÉI¹ÿ>­Y³†lôñ÷Þ{¦NÚlii)©ÕjJHH ©ºLõ¯±˜˜á“ûMIÍ©¶ÄjÔét@½zõ¢©S§R@@˜0MçGlžõz=Í™3‡\\\hìØ±Ô³gO 60R甪­%}2õšk¿éšËÉÉ! ¤ñãÇSpp0õéÓGXW­µ–ňL³ßh…9sæ Én“jjjðÓO?ÁÙÙ~~~Oõ®JŽvòòòpíÚ5xyy5»¿uëîÞ½‹Aƒ¡GÂþÂÂBddd`Ĉpu}üÛÜîÝ»‡¬¬,ôîÝ»Ùu¬):¶¶¶-z޹¤ê럵Iµ%VcCCΟ?9r¤p?Âcó#5ÏW¯^ŃðòË/ÃÉÉÉì>ISÌíÓÓ´_^^Ž_~ùxñÅ¡Ñh1cÆ´úZnJ¡P 22¡¡¡†û[+`koòóó ¾Ñ”|}}-XQû%0­r“—±öH¥RÁÍÍMôq Vólâ€aZnnn˜4i’µËx¦ñg‘c²á€aŒÉ††1&Ƙl8`c²á€aŒÉ††1&ÑŸƒá¿OÍ{Z¢bÉ:cÏ fŸEbŒ±ÖÂ÷`c²á€aŒÉ††1&%€ËÖ.‚1ölú?йøne?ºIEND®B`‚bm3.7.0/doc/html/a00090.html0000644000175000017500000001161711365042632013430 0ustar tlktlk BitMagic: bmalloc.h File Reference

bmalloc.h File Reference

#include <stdlib.h>
#include <new>
Include dependency graph for bmalloc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  bm::block_allocator
 Default malloc based bitblock allocator class. More...
class  bm::ptr_allocator
 Default malloc based bitblock allocator class. More...
class  bm::mem_alloc< BA, PA >
 BM style allocator adapter. More...

Namespaces

namespace  bm

Typedefs

typedef mem_alloc
< block_allocator,
ptr_allocator > 
bm::standard_allocator

Generated on Sun Apr 25 09:37:30 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00225.map0000644000175000017500000000031611365042647013241 0ustar tlktlk bm3.7.0/doc/html/a00140.png0000644000175000017500000015424411365042633013251 0ustar tlktlk‰PNG  IHDR›¸u¡bKGDÿÿÿ ½§“ IDATxœìÝy\Ôþ?ð×\€0 ÷¡ˆrx¢03hŠ™fYje‚’Zm§?w·¶s;ܾ»Õ¶em×V{ص‰­(Z™G‡Yy„3#Š ‚ƒ Ã=0sþþ˜¤¼†ãõ|Ï?ÿ¼[޵råJA$uËñ.¦¥¥ï¿ÿ~¯<Qۉˆˆú-½^´´4Œ1ÂÕ¥Q†MDDÔëìv;Þzë-Ì;·ß~»s4Í`0à‰'ž@ff&ÒÒÒ0þ|ìØ±ï¾û.æÏŸÔÔTìÞ½°fÍTUUaÕªUÈÎΆN§Ãc=Öåy^xáäçç;ûÍ7ß`É’%¸é¦›°zõjØl6€F£Á=÷܃n¸Ë–-CAAÁëÿòË/‘žžŽ›nº kÖ¬ÝnïW‰ˆˆˆˆ¨bØDDD½®  "‘YYYxñűaÃ|ÿý÷°X,ÈÉÉAss3233qï½÷âå—_†¯¯/¶lÙ‚… :ÇØzè!áø’’’`2™P\\ÜåyÊÊÊÐÒÒ‹Å‚ÜÜ\9rü1>øàìÛ·‡Buu5þüç?ãÀ¶mÛpíµ×â/ùËy$›Í†'N`ýúõxÿý÷ñã?âðáÃ=þšõ ›ˆˆ¨×I¥R,[¶ îîî?~Q"qì˜2›­¿ú<‹Å ¡P¹<²7Ë%""""ºlBW@DD4˜$&†@"1êë[pöy:Ìfë9ƒ¦N6› ãÇs¯õm ›ˆˆˆz‘X,D` ×\Sƒyó&:ï»nnbÄÅ…ôdyDDDDDWctDDä´cÇQH¥î2D7x{{ÀÓÓ x{{¸º¼ÅÃÆýë7Ø¿*žzj#JJjºt9‹··;ÒÓß…R…" Jed2þ!"""¢¾…a9­\¹ §NéÏûqww1ÜÜÄJÝáé饤RdgA&sCvv&MÖ‹÷S¦Ä`ÏžgðÁ?bÍš0›-ç¥ssaâÄxá‹/ã7¾†P(@\\(ŠHLš …" .ø*ˆˆˆˆˆ~ư‰ˆˆœÒÓ“±zõ—°ÙÎÝaÓÞnA{»MMm¿øˆîî­HNÚóE@b±>8óç'áoÛ†ÌLD",›ó1‹ óæM@zz2 ¶¶jµÙÙ§ V—bãFL& ‚ƒ½¡PDaÒ¤hÈå‘?~¸sñ8Qo`ØDDDN7Þ8+Wn»äÇ‹ÅB„„ø 4ôZ[k .øøöv+ªªŒ÷¾ècûª3gš  êÕíÇ òÆë¯/Æ]wMÁ3Ïd"?¿v»v;`³Ù‘î|l@€³gÃìÙã&“‡Ÿ†JU•J‹7ßüµµÍðð 1q’“á“B __Ïn¯ˆˆˆˆ¨“À~±DD4¨(/¢¢¢þ‚é Šn¿= «V¥aùòû‘‘‘qÖÇE‰ü ‘@,„Xh@CÃN´¶žè¹/ ‡ … ¼"‘­­'ÐÞ~&S¬Ö¦Ë:Î’%K°~ýúó~Üf³ãÓO³ñ⋟Ã`hœ>ýê%/·Ûí(*ÒC£ÑâàÁ¨Õ%(*ÒC  >Þ1z§PD!99 ‘‘—U;Ѩ6ÀjµaÏž|üñ>|ÿý ˜L¿Þb±‰kÖ,Âí·'¡¬¬Ÿ}ö=Ž-EEE Ê˨­m‡Íf‡@ €HX,Žo5“&cÉ’˜Þü²zĉ x÷Ý<ŽàÍn·Ã×× £Fù">Þ#GÊàããvÁcŒ1“&Mºès ­xî¹-8q¢_}õäUÕ][Û F •J‹ììbäæ–9GïäòH(•ÑP*£ÀÑ;""""ºb ›ˆˆ»¼¼ lÜxŸ}–½¾ S§Æ`ïÞ“ç|¬H$Äðáþ1Â:¥¥50™¬‰D ‹ÅzÎ}O"‘K—NÆêÕ {úËé5ï¾ûþö·/º|½‰V« 6›‘‘A˜1#S¦Ä`Ê”øù]ÝØ]ss;¤R÷«-» “É‚ÜÜ2gø¤Ñh£w&„C©ŒBrr4Gˆˆèr0l""Œªª±y³›7«‘Ÿ_‰ÈÈ@,X GZšaa~=zZZLÎÇ …ØíÀòå×aɒɘ6mÕ%?—X,ÂôéñøðÃû!]ÚX`·Ûq÷ÝÿÁ÷ßÀb9w˜D"r.ùŽ Á¤IÑHKS@©ŒêÍR/Kqq5TªgøTTä8;aLLp—ð)::ÈÅ•Qۉˆh°0Û±k×1lܨ¾}'!•zà–[&`áB%ŠÈ. »|ðCìÚu‹ ‰ÞÞîøÇ?îÆôéñ€çŸßŠ÷ßß{Þ¥“X,˜1C±eËÃ2äÂceýQcc fÌXƒêêfX­¶‹€ –;_Çþ ¡¡C¥ÒB­.Á‘#ehk3# @Šää((•ÑP("77žw„ˆˆˆˆ6 h6›ûöÄæÍj|ùe.L& fÎ ä˜={ÜyÃÌLyıðûÚkãðÖ[w"(ÈÛùñÆÆ(•EssÛyŸ»óLu;w>Ž€i÷~a}È¡C¥¸í¶7/6‰ÅB¤¥)ñÚkwôRe=£sôN­.…JU •ª55ÍpwcâÄP(¢ TFB©ŒºêÑA""""ê—6 D'NT:ÇätºFLœ8 *pë­‰—ü44´`̘?áÙgç⡇®ïÒõÔéÍ7¿ÅË/yÎMb±^^رã±Aq¦³ÿüçüå/[q¾o©B¡ÞØ»wE·ï]ê Š‹«¡Vk¡R•ààÁâ.£wry$’“ãw½#"""6 55ÍÈÊÒ +KƒÜÜ2„…ù!-MÔTbb‚/ûx§O×bĈ€_Ýo6[ñÁ{ñæ›_Ãf³Ã`hí8 …xxH°qãï”qU_Sa·Ûqß}ïãÛoóÏ9Z(‘ñÿúÕøÜÕhhhé>=z÷søÅÑ;"""¢‰aQÖÖfÆW_Cf¦ ß_OO7Ü|s-JƤIÑ Ý‘t¥l6;²²4xùåí¨©iÆ}÷MC||(yd€Ÿ¿•ˆDBlذ))±ÝöÜýÁІ™3× ªÊÐe¤N,bÁŒÆv<üðõHHwa•®a6[qôèV®Ü†ÂBÒÒ”xòÉ›0l˜/ìv;æÎ}ÇŽÅbƒ@ À[o-Å‚òn¯¡?ÈÍ-Ãܹ¯;æÎñ¹¬¬‡ñ䓟âàÁbÜsO žzjd2WëZZm ,Z]µZ‹ÂBl6;FŽì<ë#|Љ >ç'õY ›ˆˆú‹¢"=¶lÑ`ãFÊËë1n\ÒÒ”¸ýö¤.Ë»»“FSŠU«¶aÿþ"Ìž=Ï>;qq¡¿zÌ-·¼X±bzèú©¥¿øàƒ½xî¹,Øíö.ãsv»™™j¼øâgHDxá…Ûqë­]]nŸÑ9z§Ñ8Æï*E[›¾¾žP("!—;–Ž'%EôH JDDDD݆aQ_V_oÄÖ­‡•¥FSФ¦Ê‘šªÀèÑC{ìyOÒcõêíØ¾=Jež{nЍó>þî»ÿ /¼þú’«©?yðÁñå—G°dÉd¬]›Þåc -øÛß¶!#ã'L›‡Õ«ÓÅõËÕ9z§ÑhûŸtºFH$"Œ?ry$ Gêãêr‰ˆˆˆèg ›ˆˆúšöv ¾úê²²4ؽ;nnbÜ|óx,\¨Ä”)1‰„=öÜUU¼öÚ.lØð¢£ƒ±bÅ\Üx㸋~^MM3üü<{´¶þ¤©© ÷ßÿ>Þÿþóž}N¥*Á3Ïd¢¤¤=t=~x$Q/WÚ¿”—×C¥rŒÝ©ÕZ?^«Õ†°0?(•QP(Ô˜1a‹ùg‘ˆˆˆÈE6õ6›#3S/¿< £Ñ„””X¤¦:ö0yy;°è.C+Þyg7þýïàïï…'ž˜E‹’»uÁø`c³Ù/úúY,6üûßßãµ×vaØ0_¼újú;Ȩ«æævää”B¥*FãÁ3Ú •º#11J¥cï“\9èwdõ"†MDD®TX¨ÃæÍdeiP^^±cðp¡·Ý6!!=?d2YðÁ{ñÖ[ßÀf³ãá‡gáÞ{S¸§—••Õá™g2ñý÷øÍo¦âÙgç·#ŠÎÏf³£°P×Ñùäè€*.®†P(@\\hGç“£*::ÈÕå T ›ˆˆz[U•Ÿ}–ƒÍ›Õ8zô ÂÂü0~RSå5ªçö0Íf³cÓ&5^yejk›qÿý×âᇯ‡L6¤WžŸÎmóf5þò—­ðð`õê…˜5kŒ«Kê÷jjš¡R•@¥*†Z]ŠÜÜ2˜LJ¡TFA©Œ†B„„p¸¹‰]].Ñ@À°‰ˆ¨7íØµë6oV㇠áå军oNÀÂ…JLž<²WÇÕ¾ù&«VmÃÉ“UX¸0üãM\°Ü‡ÔÖ6ãÏÞ‚-[aþü$¼øâí ”ºº¬Ãd² 7· ju)Tªbh4ZèõMps#!! E”ÊhÈå‘< p ›ˆˆzŠÕjÃ?bóf vî< “ɂ뮅ÔTn¼ql¯ªi4¥X¹ò 8p 7ß<O?=qq¡½Z]ºÝ»óñôÓ™hi1áùçoÃÂ…JW—4`•–Ö";»Ø9zWX¨ƒÍfGDD’“£ËÇãâB¹ÇŒˆˆˆèâ6u·cÇʱi“ Ÿ}–ƒª*äòH,X„ÛnK‚¿¿W¯×sòdV¯þ;wCrrž{îVÈå½^]>£±«V}‰?܋뮅µkÓÙ…Ö †6çÂq•ª99¥hnn‡Læá\8®TF!11‚»µˆˆˆˆ~aQw(/¯Ç–-‡°y³:DFbÁ9RS刊rÍ"⪪F¬]» ÿû_6bbBðì³sqà c]R ]µº>º55Mxþùù¸ãŽI®.iP±Zm((Ð!;ûT*GU^^‘HˆøøPLšݱÿ) aa~®.—ˆˆˆÈÕ6])ƒ¡ Û·Af¦ ÙÙÅɆ`þüD¤¦*”À5ã6C+þñÝø÷¿¿G@€O>y.Trü§Ÿkk3ãå—·ã_ÿúÓ§ÇcíÚt êëê²-®*•cìN£ÑâèÑ30›­ õqŽÝÉå‘?~8$‘«Ë%"""êM ›ˆˆ.‡ÙlÅwßåcóf ¾þú8l6;n¼q,RS˜9s´KßT¶µ™ñá‡ûðÖ[ß~xî½7îî<ÃÖ@¢ÑhñØc ×ð—¿Ü†;î˜ä²`“~ÖÖfÆ‘#eP«K:ö?iÑÐÐ &L‡B…ädG÷“¯¯§«Ë%"""êI ›ˆˆ.…F£EV–[·æ ±±ÉÉÑHKS`Þ¼‰É<\Z›ÍfGf¦ k×îDmm3|p:~ÿû™É†¸´.ê9mmf¼òÊüë_ßcÚ´8¬]›ŽaÃØåÔ—Øívé¡Ñhqð` 4-ŠŠô€˜˜`Èå‘HNŽ‚\‰˜˜`†DDD40l"":­¶›7k°y³Zm bcCšª@jª¼ÏìeùúëãX¹rNÒ#=}ž|ò&„„È\]õ¦=–ª*þüç[±dÉd†}XCC‹sì.;»‡ŸF[›¾¾žÎ±»ääh$&Žèõ³Uu#†MDDgkhhÁÖ­9ؼY F‹à`oÌŸŸ„ äHHwuyN/½ô,ÁM7óÏÎCLL°«Ë"ho·à•WvàŸÿ܃””X¼òJ:†ïa(]˜ÙlÅÑ£g Ñh¡V;ëtHD?~8äòH(Ž3ßñ,„DDDÔ0l""2™,øúëãØ´IÝ»ó!‹póÍã±`Ó§ÇC$ººD§ÂBÖ¬ÙŽ;ŽâškFbÅŠ[ —G¸º,ê*ÅãŠÊÊ<÷Ü-¸óÎkØåÔ•—×;«T%ÈË«€ÕjCX˜Ÿsñ¸B‰±cÃúÔ¿MDDDDgaØDDƒ“ÝnÇÁƒ%ؼY/¾8‚¦¦VL‹ÔTæÎM€——»«KìB§kÄ+¯ìDfæAÄÆ†`ÅŠ[pýõ£]]õ1íí¼úêN¼÷Þw¸æš¬]›ŽðpW—EW¡¹¹99¥P©{Ÿ4- †6H¥îHLŒ€RéØû$—Gº|Q†MD4¸œ:¥GV–›7kpút-FŠ´4%,HBHHßS1ZñÖ[ßbݺ ÅSOÝŒÔT„Bv¬ÐùåäœÆão@yy=ž{îVÜu»œ ›ÍŽÂBÔj-ÔjGTqq5„BââB;¨H.'"""WbØDD_MM3¾ø"›6©‘“s!!>X° iiJŒ=ÔÕåS[›|°o¾ù D"~xî½7nnbW—Fý„ÉdÁ«¯î»ïîÆäÉ#±vm:FŒpuYÔjk›¡Ñh¡R9¨#GÊ~µx\©ŒÂĉ#àééæêr‰ˆˆhàcØDDS[›_}u›7«±gÏ ¸¹‰1gNÒÒ˜2%¦Ïî:±ÙìØ¸ñ ^}uêêŒX¶l:~ûÛɆ¸º4ê§Ž)ÃcmÀ™3uìr$ηx\,b̘0çÞ'¥2ªÏœY“ˆˆˆ†MD4pØlvdg#3S…íÛÀh4áÚk㚪ÀM7ïó¿Ñÿê«cX¹òKë±xñd<þøl„„È\] gw9]sM ^}õž±n9{ñ¸Z­E^^9,BC}œ‹ÇåòHŒ?‰ÈÕåQÿư‰ˆú¿“'«°i“YY”—×cüøáHMUà¶ÛûEX£V—à¯ýjµsæ$à™gæ`äÈ`W—EPNÎi<öØTV6àÿþïV,]:™]NƒTK‹ ¹¹eÎñ;F‹ÚÚfxxH0aB8’’" P8–{»º\"""ê_6QÿT]Ý„-[!+KƒÜÜ2„…ùaþü$¤¥)êêò.Ia¡«V}‰]»ŽaÊ”¬X1II®.‹¸öv Ö®uœ±.%%¯¾z† óuuYÔWwY<^X¨ƒÍfGDD€3xJNŽB||hŸE&""¢>aõmmflßž‹-[4س§^^n¸ù椥)qÍ5#ûÍÚ**°víNlÚ¤B\\(V¬˜‡™3G»º,d*Å£f@¯7à/¹ ‹OvuIÔÇ mÐh´ÝO%ÈÉ)Ess;¤R÷޳Þ9(¹<2™‡«Ë%""¢¾ƒaõm6›ûöDV–Û¶ÉdÁµ×Æ!-M‰Ù³ÇÁÃCâê/Ycc Þzë[¼ÿþ ”â©§æ`Áy¿ Éhàio·àå—·ã_ÿú×^‡W_½¡¡>®.‹ú(«Õ†‚,éX>^‚ÒÒZ…ÄÅ…v,w슎ru¹DDDä: ›ˆ¨oÊÏ¯ÄæÍŽ=L:]#&NÔT9n»- RW—wYZ[MX·îG¼ýö·‹…xä‘pÏ=)\ÂK}†F£Å£n@uµ/¼p;ÒÓ“]]õz}ÒB£)…Z]‚#GÊÐÖfF@€´£ë)ry$&NÑçOÒ@DDD݆aõ55ÍÈÊÒ`óf5Ž=ƒáÃý–¦Ä‚rÄÄô¿…Ùf³6dãïß…ææv,[6Ë—Ï€·7ÇM¨ïik3cÍšíø÷¿¿ÇÌ™£ñòË‹ØåD—Íl¶âèÑ3OŽñ;®b±cÆ„ut?EB©ŒBXψHDD4@1l""×2™,صë6mRcÏž2D‚›oN@zz2&MŠî—gʲÙìøâ‹ÃX³f;ÊËëq×]Sðè£7ö»Ž,œTª<úèÔÕñâ‹ó±p¡ÒÕ%Q?W^^•ª¤cù¸yyå°Xl õR黓Ë#1~üpv| ›ˆÈ54-23UøüóÃhjjCJJ,.TbΜ„~µ‡é—vïÎÇêÕ_"/¯ ÈñÇ?ÞŒðpW—EtYZ[MX½z;Ö­û×_?/¿¼!!2W—EDK‹ ‡Ÿ†JUâì€jhh‡‡&„C¡ˆ‚Ré ÒõC ›ˆ¨÷”—×cãF¶lÑ ¨HøøP¤¥)–¦@HHÿ×Ñh´X¹r8…n‹gŸ‹Q£†ºº,¢«’]ŒÇÛ€úú¼ðÂ|,ZÄ.'ê~v»EEzh4Z:T µZ‹ÂBl6;¢£ƒœOry$âãC! ]]2]Ã&"êYFc;¶m;‚Í›ÕØ¿¿~~^¸õÖD¤§+‘îêò®Za¡«V}‰]»ŽaÒ¤hüéOó PD¹º,¢nsv—ÓôéñxùåEܵC=Î`hƒF£…FãØû”“SŠæævH¥îHLŒ€Rå  d2îÁ#""êc6Q÷³ÙìØ·ï$23Uرã(Ìf+fÎôôdÌœ9z@ìä(/¯Ç+¯ìÀ¦MjŒ5Ï>;×_?ÚÕeõµº?þ)ªª X±bî¾{J¿Ü©Fý“ÕjCAvŽÞ• ´´B¡qq¡‹ÇûŸ¢£ƒ\].Ñ`ǰ‰ˆºOQ‘7Ä–-‡P^^ÄÄHKSàöÛåðõõtuyÝ¢®Îˆ×_ÿ }´aa~øãoÆm·%B(ä›nøÚÛ-xíµ]x÷ÝÝHNŽÆÚµéˆŒ tuY4HéõMOÅP«K‘›[“É‚€)äòH(•Žj„ð~½ ˆˆ¨bØDDW§¡¡[¶h•¥FSŠaÃ|qûír¤§'#&&ØÕåu£±ï½÷Þ{o¤Rw<òÈXºtò€èÒ"º\GžÁ£n€V[ƒ§ŸžƒûïŸÆ=:är&“¹¹eP«K‘“S •ª:]#$Æî»“Ë#8 JDDÔ³6Ñå3›­Ø½;™™*|óM$fχôôdL; º|Ìf+>üp/ÞxãkX,6üîw3qÿýÓàååîêÒˆ\Êl¶â­·¾Áo|±cðvm:ÆŒæê²ˆº(/¯‡JUµÚqÖ»¼¼rX,6„†ú@©Œr.?~8¨ºt[ IDATy@DDÔ}6Ñ¥ËÍ-ÃÆ*|þyêꌘ= *1{ö8¸¹‰]]^9v¬+WnÞ='píµñxöÙ¹˜0!ÜÕeõKîîQðñ™ £Q £ñˆ«Kº*ü1‰¬V tÎÎ'µº¥¥µ ˆ‹ íÒýäêr‰ˆˆú†MDƒ]}½™™jüïÙÈϯDLL0î¼s ,øŽ­¶«WoÇ_ÆÄ‰áxöÙ¹HI‰suYDýš@ Àüùó‘šš±X‘¨Žedd`ëÖ­ ›èœôú&h4Z¨TÅP«K‘›[“É‚€iGç“#€š0!W—KDDÔÛ6 F6›?üP€ ²±k×1H$"Üv["/ž4 Çä:UUðÚk»°aÃOˆŠ ÂSOÝŒ9s ôÏ7ÅD}‰@ Àúõë±dÉW—rU222°téR†MtIL& rsË V—B¥*†F£…^߉D„ñã‡C.„Bá¿ õqu¹DDD=M=pçbˆèWΜ©Ç† ?aãFÊËë¡PDaÍš…òlrçb0´â­·¾Åºu? @Š5kbáÂdˆÅBW—FDDý˜››¸c”. Ë—_(-­…Zí½;p |ð#,ÂÂü TFuŒßEb̘0~""¢‡aÑg2Y°}{.6lÈÆ¾}'áïï…E‹’qÇ“38–_·µ™ñŸÿü€·ßþb±O?=¿ùÍTŽ6Q‰ˆ@DDRS€–> •Ê@­]» -ðð`„p(QP* Èö; | ›ˆ¨¼¼ ¬_ÿ¶lÑ ©© 3fŒÂºu÷aæÌÑHD®.¯WX,6ddü„¿ÿ}š›Û±lÙtü¿ÿ7ƒg""¢^çéé†)Sb0eJ Çòù¢"=4-,ÁW_Ã;ïì†ÝnGttP—Åãqq¡ 9êMDDýÃ&¢Ä`hCV–Ÿ~šÜÜ2DFâw¿›‰…  <;"ìv;>ÿü0Ö¬ÙŽòòzÜu×<òÈ  òvuiDDDûÍbcC‚;î˜hhhZ­íX>^‚mÛŽ ¥Å™ÌrydÇòñ($&F@*øãïDDÔ1l"êçìv;8…ŒŒŸ°}{.`Þ¼ xþùÛ0iRô [z½gÏ ¬\¹ yyX°@ŽO?]Ž#\]ÑEùúzbÖ¬1˜5k G‡n^^9Ôj-Ôj-þ÷¿ƒX»v'D"!âãC‘œÕ±|< ü^GDD}Ã&¢~ªªª6dcãF´Ú$$„ãÅoÇ­·&Ê11¦«VmÃþýE¸á†±xã¥=z¨«Ë"¢ (**ÂÞ½{qÏ=÷tëqF#Þxã ¬X±¢[KÔÛÄb!‘Žûî›Ðë›::ŸŠ¡V—"##&“R$%EB©t„O&„s7!¹ŒÀÎsúõf³_}6ü„={ àíí´4/ž|8,Ë###K—.L¢¾Îd² 7· ju)Tªbh4ZèõMHD?~xGç“cü.4tðŒÔ‘K©ÙÙDÔhµ5ÈÈø ÿûßAÔÖ6cêÔX¼óÎ]˜={ÜÜç_ãòòz¬]»™™*ÄÇÅÇ?è; "",ÜÜċģ°|ùu€ÒÒZ¨Õ޳ÞíÛwï¿ÿ#¬VÂÂü TFu,Ę1a‹…®ýˆˆh@œïR‰ú³ÙŠ;â“O`ïÞ“–áÎ;¯ÁâÅ“1|¸Ÿ«Ës™º:#Þxãk|øá^ æ‹7ß\Šùó“x–¢~Êf³áø>üðCxxxà±ÇóÏ>‹ÚÚZ¤§§cΜ9X»v-Ìf3Ö¬Yƒ¼¼<|ôÑG‹ÅøûßÿŽ;î¸ã¼ÇþÏþƒ¿þõ¯¨©©Á¢E‹°nÝ:…=óÆÚl¶bÏžغõn½5³gë‘ç!ºˆˆ@jªÐÜÜŽœœR¨TŽêå—·Ã`hƒ§§&N¥2ÊÙåëëéâꉈh `ØDÔÇhµ5øä“ظñ êë[0cÆ(¼ÿþ}˜5k D¢ÁûÛG£±ï½·ï½÷¼¼Üðüóóqç×@"¹º4¢é‹/#22cÆ ëÑ{Ôj5¦M›N‡C‡aÞ¼yˆEJJ ¾ûî;L™2åååxï½÷pÿý÷cõêÕÐëõX»v-þïÿþï¼a“Õj…J¥ÂÉ“'QVV¹\Ž»ï¾3fÌè¶Úm6;²³‹±uë!lÙrÍÍíì˜5kl·=QwJÝ1mZ¦M‹à8¹HQ‘–`ûö\¼ùæ7€‘#ƒ”ÑÑ-‰¸¸PþB‡ˆˆ.Ã&¢>Àd²8»˜öí+Bh¨î¾{*/ž„°°ÁÛÅ8º>úh^ý+X,6<ôÐõxàkáåÅS>õ¤µkwáäI<=Ý TFaÊ”Lž<'ŽèÖ××׫W¯†D"AJJ zè!ddd %%6› O?ý4fÍš±XŒ'žxÂyûÕW_½à±_zé%¸¹¹aäÈ‘;v,»¥æcÇÊ‘•¥Æ¦MÔÔ4A,Áb±:?ÞÒbê–ç!ê)±±!ˆ ÁwL44´@­Öv,/Á¶mGÐÒb‚Læ¹<r¹cïSbb¤R~&"¢ cØDäBÅÅÕX¿þ23U¨¯oÁÌ™£ñá‡÷cæÌуº‹ pt lÚ¤Æ+¯ì@mm3î½7=t=üü¼\]Ñ P[ÛÀœüðC!öí+‚Åb…››&ŒÀ´iq˜<9II‘ðôt»âç9r$$’ŸÏ˜5nÜ8|ûí·ÎÛ^^Ž¿óîîî‹ÅÎÛ"‰ä¼}±Ç_Lqq5¶l9„ÌLNŸ®…››&“cùÙA¼ýö7XºtòU=QoóõõĬYcœû-òòÊ¡Vk¡Vk±aC6Ö®Ý ‘HˆøøP$'wŽÞE!""ÀÅÕQ_ð‰¨—™Llßž‹õë`ÿþS6Ì¿ùM –,™„¡C}]]^Ÿ°k×1¬Zõ%Š‹õX´(O<1›¯ Q/óöö@]€cä¦3P1™¬P«µ8|ø4^{Í ‘H€±cÃ’‡I“¢!^^ÇCMMM—Ûz½þþþÝóE\%‘HŠþs6mRãøñrH$"˜Í¯ÃùÏtÇÎKÄb!‘Žûî›Ðé¡R•8; Ö¯ÿ f³ÁÁÞOÑP(">hO`BDDü.@ÔKŠŠôÈÈ8€UhllÅõ×ÁG=€3F ú.¦NœÂÊ•_àСӘ;7ëÖÝ‹‘#ƒ]]Ñ c4¶ÃÃCrÞÛívgèbµÚ‘›{ÇŽ•ãwv#$ä·xûí|(•Uˆ ¹èsiµZlÛ¶ óæÍCSSþùÏâw¿ûÝe×¼uëVÄÄÄ`ܸ«_Ì}òdÞ{¯ÁÁà…>sÞßù5_L~~%F^__O âww1d²!2Ä g_—@&óp^÷ööèr¿§§{Çç:®sG¹Zh¨n¹e"n¹e" ½Ý‚£GË V—B¥*Æ{ïí†^ß771‘˜8 …cü.4ÔÇÅÕQobØDÔƒL& ¶m;‚õëà§ŸŠ1l˜/î¿ÿZ,Y2 !!ü¡«Ó±cåXµj¾ûî¦M‹Ãöía„pW—E4hTW7¡¦¦ ¨©i™3õ((Ð]Ö1l6»ózLŒ÷%#“'OÆã?ŽW^y………HLLIJeËP[[{YÏÿè£âè–°I"!<Ü EE†+ú|»ÝŽ?þqZ[Ûa4šÐÞnFSSŒÆv´·[PZZ‹––v´¶ša4¶ÃhlG[›¹cÁøù …x{§çÏ–§çÏAUçu©Ô£Ëý^^ŽÐÊñwxxˆ!•:îw<žXteÜÝŋģ°|ùu€ÒÒZ¨Õ޳ÞíÛwï¿ÿ#¬VÂÂü T:–Ž+‘3& b1ÙFD4P ìv»ýâ#¢ËQT¤Ç'ŸìÇÆ*47·aÖ¬±Xºô̘1Šgt9‹V[ƒ5k¶ãóÏc„p¬X1))q®.‹hÀ¨«3B¯7 ²²ÕÕM¨¬l€^ßÎqYYÙ€êê¦.;JQYÙ«ÕvEÏ;{v^}õ·ð÷¿´kmmm8pà|||””tEÏÙêêŒxâ‰w±kWù}¾Tꎭ[ÿ/øû{]Ö8ÑÙÁÓÙTss;ÚÛ÷Ÿ}ÝhlCk«--&47·¡­Í £ñ××/öÿR&ó€——¼¼Ü •zÀÛÛÃTI¥îðôt‡¯ïçc¼¼Üáíí™lH—ÇÈdWôšÑÀÕÜÜŽœœR¨TŽJ£ÑÂ`hƒ‡‡&„C¡ˆ‚R‰¤¤HJ]].u5Ã&¢nÒÞnÁ¶m‡ñÉ']Œðp,^< ‹³‹é—ªª øûßw!#ã'DFâé§ç`Μ„«^àK4Xí(/¯‡N׈ª*tºÆŽÉq»ªÊqyö^!771|}=£Yb±Ð9ç7ÚÐÐÐŠîø±@© ĺuôÛ7Ž55͸ÿþ7 RÕ\üÁ—@*uG` 7¼àï/u†PÞÎëþþR8îë‰N#³ÙŠ––v459‚*£±ëõÆÆÖŽðª½ãqm0Z;:¯US“ã¿ææö î¬ê ©:ÿóñ©Ô½# ™ÌÃTùø L6ÄyÛqé'¤Én·£¨HF‹ƒKpèP)ŠŠª`³Ù…¢sñx$FÊî'"¢þ‰aÑÕ:uJÿþ×ÑÅd4¶ã†]Lӧdz‹é †V¼õÖ·X·îøû{á‰'fcáÂdþ It‹Å½Þ€òòzœ9SÊÊçõÎÛ -ÎÇ‹ÅBx{‡‡b±ctÍjµ¡¥Å£±ýW{†d2Éà7BBd]‚Ž  oH±y³o¾ùÍ%Õ,8Îö6vì0|÷Ý«øðÃW±dÉ’î{Q\ ##÷ÜófÌxÇWÀn·ãRb’Ë#ñÜs·@( ®ÎˆººfTW7£®®¹ã¶ã¿šš&ÔÕÑÒbêòùnnâ.Ô/Cª  ®!•¿¿W¯¿é ¯Z£€Ž®«ÎÊPµ´˜`0´Â`hCKK; †645µv¹<‰Dä  ~þÏã¬û<Î\I¥ŽÀŠ ªûƒ¡ÍÙõä8A) †6xzºaâÄP*£”¤¤ôÏ›ˆhQó»0Ñ0›­Ø±ã(þûß}Ø¿ÿ†÷Ãòå3žžŒ™«ËësZ[MX·îG¼ýö·‹…xúé9øÍo¦^p1Ñ@e6[Q^^ÒÒZ”•ÕáôéZœ>] ­¶ ¨¯7Âju¤B¡ £ I@³Ù‚¶6s—ã …Bçè[gPà…à`x! Àq` Ò ¾·Zm(.®F~~**/éë‹EðôtÃóÏ߆E‹’!ýñŠ_›¾¢¤¤™™Zøù̓ÅbGx¸?ÊÊê\Zà¤Ñhqôè(‘HI‰½èÙéÚŲ́«3¢¶¶55]C©ššfÔÖ6ãèÑ3]îÿ¥_†ORJ»Üä  )üý¥W½l\"ÁÇÇ>>žWuhlléŸAUçeç}MMmÎÇèõé»<Öh<÷®+ww1||†8ëôóótÞöõí¼|}=áë{öÇ<áîΑ{“Læ3FaÆŒQ;à uγÞmßž‹7ßüv»ÑÑAP(cw E$âãCy¢"¢>ˆMD—áÌ™z|òÉ~|úi6jk˜9s4îºk fÎÍ.¦s0›­ÈÈø ¯¿þš›Û±lÙt,_>ÞÞÜéA—ÍfGUU#NŸ®Ãñãå(,¬‚V[òòTWÐÔÔæ ,D"ìö®ËµÇR` 7‚ƒ½,ëÒÝ";+D’]ñŽœÆÆ?^üü ç剕ho·@$^tÇP(€ÝnǸqá˜={ ||<áá!Áƒ>€Çÿ=~ûÛÅ ó»¢Úú‚•+ÿ…·ßο¢ÏusC pŒW  ˜`Œ5±±!ˆ‹ EllÈÿ[hµÚºtH](¤êì¬úe‡›#”tRŽ?SŽ0*8øìëÞ ¼ôeï®bµÚ:©Ö³B*Ç¥ÁÐŠÆÆ448.[ÑÐЂ††çýç ôð8C)Gõë€Êqéõ«ûûúëÕ_54´8çC‡J‘“SŠæævH¥îHLŒ€Bé¼ôõ½ú”ˆˆ® Çèˆ.Æf³ãÛoóðÉ'ðí·y ”bñâÉXºô ÞßHõ$›ÍŽÏ>ËÁ+¯ì@yy=î¾{*yä†~»¿…èlííTTÔãÈ‘2œ8Q‰“'õ¨¨¨‡^o@cc+Z[Mçì~‰g p¼¹Œ @X˜?BCeÁ’ ¡¡²né:9›ÕjƒV[ƒãÇ+—W޼¼ äçW¢¼¼àëë‰qã†côè¡3fÆŒ†¸¸DE=uÁã ˆDBgÐnµÚœÕôé!øøã?öë7ݸë®ûpÏ=ïbçÎÜK¡€'Ÿ¼ ùd?ÊË0uj îºk nºi|¿~ÕÓ¾ù&«W‰'*‘–¦À“OÞÌPŽú…††TUP]mèXºm@AA%Μq,⮯oÑØ‹¥ë›K¡Pà<Ý|P7BCeˆŒ Btt âã‡"(È!!² ~É`hE^^…3P:~¼:´¶š  „1c†aìØ0Œ= cÇChè¹O`ðÔS±~ýO—¼0\"A*uÇ©Sxÿý¿ ˆMK—.…ÝnÇúõð§?eÁf³Áb¹øúvízãÇ?çÇl6;ÊÊêpòd *qòd•3ˆê õqv@ÅÇ;º âãC{­[£¥Å„êê&TWP[kìø{Ñ„ººfTUºSÍÍ]Gؼ½=Î ¤:;¥¼,sŽs:Æù¼ÄðÎåê-¨¯ïP548:Ìê먯oA]±ãºñWŽÜÝÅa”×Y;º~¦~ù1??Ï‹ŽgFµµÍÐh´ÈÉ9 •ª‡ŸFK‹ 2™’’"”\É3'õ,†MDg³ÛíØ¿ÿþûß}رã(¼¼Ü‘žžŒ;ï¼#G»º¼>íàÁb¬\ù%,ÆìÙãðÌ3sêê²h3›­¨©i‚Ng@MMSÇ™Ú ÷5¢ºº gÎÔ£®Îø« °ÀÓÓ±)4Ô‘‘92& Çĉ#z%Dú%›Í­¶yy8~¼ùù•ÈϯèØ+äèVêìR3fF†Q£†^V×É7ßäáî»ÿÇkpaB¡S¦Äàí·ïBHˆ ëׯPaœúh/œ³ëK©ŒÂéÓµ¨ª2@&‚É“GbÚ´X¤¤Ä!..äŠÞÌ–—;B(ÇØ¦£ª°Pç o¤ˆíŸ†9ÿ y_Ý ÑÍL& jjš¡×wvJ¡Ó5:÷KUU5¢¶Öˆêê&Ô×w]‚>dˆ›³K08Xæ¼ õAp°7BC}œ¡Õ@e0´¡®®µµ?SŽŽ©®g9ìüXm­±Ëî5‘HØeß›ãõòêè8óvîðê ¨úãHä¥Ðë›pøp)T*GøtäHÚÚÌðññDRÒÈå‘P*£˜©t`…œDD½ˆa n‡•âã÷áóÏC$"5UŽ»îš‚±cÃ\]ZŸ§ÕÖ`íÚØºõÆŽ Êó0}z¼«Ë¢Àjµ¡¦¦ áQ=ªª ¨¬ì –QQÑÐe¯Œ‡‡C‡úÀ×× ^^n°Û³Ù‚ÆÆVèõÔ×·8„˜˜ÄÄ#66#GcäÈ —ô˜ÍVèpâD%Nœ¨tŽÂUU9Î ×Ù­4jÔPg¸Ò­uWU°}û|ñÅ; –HDv„OŽåüRŽÝk>ÎÝS—: Ùßuîê:;œ:{©|ç¯ÎÀêl¯çÙQ!!2ç¿Ù¯mHˆ nn}¿cJ¯o‚F£…JU µºÇŽA[›¾¾žP(";Ga„pþìHDtn ›hðÈϯÀÇïGV–&“·Ü2wß= E”«Kë †Vüã»±nÝðññÄã߈ôôI‹Çátqz½c?Kee*+Ý•TYÙØeg‹››!!2 êë|Ò( êƒÐPH$"œ:UÂÂÎŽ +a08vØ 拸¸PŒ3¬£S)11A}æ·ìC+òóîTêìZêÜÁîQ£¡ÒرÃ?]XHY IDAT#G÷øß+½¾ Û·çbÛ¶Ãøé§SðôtìYŽ€iæÌÑÎñ™ªªF$%½àìÞ‹EpsaÍš…HMUœóØB¡;ÜÜB1jÔMhkC&kGd¤¡[ë×jeÐmǵÛ8~<V«aaFøùµ"+k# +Kƒ?üaý9»˜ÎE$bÒ¤‘Ø´éwç}ŒÙlÅ¡C¥Ø»·?þx99¥0›­ˆEJJ¦NÁ”)1ݾ¬¶¶:çrò¢"= t¨®nÈdˆ‰ é83^¨s4/<Ü¿[ëp£±••¨©iBeå¯Ã¨ÎËοŸ€ãÿg` ·38陞žÁ1‚’'SÐÚ*œž;:ZáAh¨áá{61#â/µZ+ºGŠ‹ýJM44t`k;çN¥ðpæÍ›¼iHJ¥ 0íß/8˜f϶L«V…çïôš5ÏS\¬ÀÜÜŒˆO^{m‹èØ!R{î\ çÎÕ™YNee £wII d²ñÝjdf Qçää†qûšýý–œ?/ ‚ÉôØÛ«pqäãÿɹs5lß¾FwQ‚Óþó ‰‰Á—ðØCœ>]EffYYÔ#“Ɉ‰ñcw õìèè{  bTYY³á´±™5,BQ!!nøú:NKWëÀÀMM‚Cj´SJˆíÄøººúÅÿG&“áâ"LàÙù|$ÊgJ"Êd`Ô Pt ßwÐÚÚ‹BÑ) ~--=ßpK⎆çÍÓÓ~ŒÈçéi““ўϦ¦.²³«9{V˜~——'ghHƒ““ͰóIŸ,ðeîÜ©?yQBBBâ‘Ä&‰é‰\ÞΛož`ïÞSôô ²vm4[¶$’”2-7ÆF£cïÞS¼øâ!z{UÜsÏ î¿¥É\ÜKŒCC:P(ºP(:†?º‘:ÅIR,,„Sþ’=‚+ÉÓÓaøÞþ{ÅȆ† ((h °°ÂBuum€pQæNX˜‡((…‡{˜TѱBÑ9ìVR »•š¨¨hF­Öbii>\Î<"*Wa÷å`˜“ 0]uU¤è`ºÑø¹çÒùÇ?¾àVó‹_\MQ‘‚³g«9}ºšìì*ºº03“ann& Žff2møê«ÇÆýßîÌ™*n¸á%öíû9‹ŽÛ×~ùåÃ<ýô~@p´¶H þDFzñî»§Q«µètß>ÎÌ BCÝ9|øñ+ZGgg?'NTˆâSyy3VV,Zä7,>…²`ï„_dwuõê„j{¡ŠNæÎµ"8ØÅ¢||L#®:ѨTšQñ½‘ß×*C|Ñ€³³èˆÝ/epúxy9ÌXQÊàŽU*{‡E(¡—kä9îSoù "ÔHi¼ð¹··öØÛO¼ÛuhHC^žœ³gk9^p@55uaaaFd¤‹ùçK||À÷µIHHHL$±Ibú Óé9v¬”7ÞÈ䫯Špq±eóæelÞ¼tJ”¡š :žýûsxî¹t:ؼ9‘_þòj“ºØ—¸8´ZJeõõí(‚©¾^”„X›pšl`Ö, <=ðô´ÃÓÓá"’¡Ûäb/"µZUUJQXÊË«§  žÎÎ~d2~~NDG{å% 3¦×éî3®´´‰¢"…ôô´“„ p»ý±µµW˜Nž¬dÖ,‹áˆÜ|Ö¬‰¼dWâ_òÎ;'©ªRR]ÝŠV«ÃÒÒ ­Vÿ­Åá Äí>ýô!.ôoi O=õ1o¿}€Í›ùóŸo·¯­ÕêHMý;EE czÃd2ææ24=fÃI©oûÞe2X¹2œçžû1ÞÞã'067w‘‘Q.v>54t`m=‹%KIN%99„ÈHÏIxº»©¨¢x£Å(ƒ“ï»D¨éê„ú!††4c¢z£Å”ÑŽŸÑq333Ùðô=»aG¨nnvßøgb_J¥ùšÕ%:ÎF S£gÖÖ³ðòrÀÓÓ//áýÍÇÇOO¼¼ìñô´Ÿ.©††²³«¹p¡ŽsçjÈϯG­Öâê:oX|ò»Ÿ$Ǹ„„Ä4C›$¦>ýìÝ{š·Þ:AMM+IIÁlْ̺uÑF¿è›j>\̳ϦQ\¬àÆñè£ëñõ•NßL•öö>;Q(ÆŠH (c¢mææf¸¸ÌÃÛÛQÜX6ÝÂÇ8;_þÈð!Š‹Ç8–Š‹ÂÒÒ|¸“ÈkŒ¸4™²ïãë8C¯R}½páµµõâà`=Üõ$Äî‚‚\ÇýqˆÞ^ÕpO¡JJ'Ô×E¨ðp!†æ1­ãx—ŠZ­E©ì_¿»ÆLà4|š›»ihèD©îwÏH¯ÞwÅŸ]]çáé逻»73TvÖ fÊ´¶öŠ5†÷[ƒ8U_/<¿£••Åð{«ÝðÁ؃oo¬­/ÝiV[ÛÆ… µœ=+Dï ÎJww;.ô%!!øx?bc}¦Ä$? ‰a$±Ibj¡RiØ·ï|ôÑÏ&ìyüùÏßæÓOsÐh´âc^ý^zió¸>ŽV«ãškþAaaƒøXß…™™ NÏìÙ–ääüqL¯]vv5¯¿~ŒòquµeÛ¶dn¿}Ù„öÇh4:rsåî§r²³«Q©4º”BrrII!8:H†!ŽWRÒHEÅʼnPaaîx{;H"Ô0z°ƒp?v:¨Á%5ÚÁgo?W<¤0P‚ "ˆSù^cª¨ÕÚ1b…¢óâÔèé…¶¶sðò²]ÄÞÞŽøù9áë넯¯ãE9bûû‡ÈϯçìÙj²³…á mm½XZšã-–'$àî.ÕDHHH˜,’Ø$15¨­mã­·N°wïiz{Ù°!–»îJbéÒ c/mJRWׯóÏä“OÎéÉO¤²zu„±—5­ho¾††NêëÛ‘ËÛEa©¡¡sLÁ©½ý\Ñäã㈷·£ø¹··NN—o»ôz=55­\¸PGNN¹¹ròóëTcc3‹ØX,ðoãÙIs¹¨ÕZqŠ . 7Cñè)pQ)<Ü[[Óˆð] }bDîĉr,,ÌÇDä&kÊQuµ’åËŸE«ýæ¶ÁÜÜ GGk¾úê×WÇü>T* QQOÑß?4æ¿ÏkEa៙5k|Oü««•¬\ùÜwÆé ß³½ýÊË[غ5™?ÿù¦oý»õõìÚuœwß=…Z­ã–[â¹çž“uS©4dgW‰±»Ü\9Z­žˆRRBIJ aéÒ “êþéîë„*)iüF1¹Áý$‰PW†RÙ# P Eç×5st´ÆÝÝNtõ@„{¡ïo¼MžžAñ°htd¯¾¾ƒºº6ššºDw”­í|}ñósÆÇÇ__g|}ñõuÂÇÇñ;Ÿ»ÑS?Ïœ©¦¬¬It?%$ïÏ¢EþDG{Iî' SA›$LNÏáÃÅìÙ“É‘#%¸¹Ù±yó2n¿}®®RYõåÐÒÒÃ?þño¿}//žxb#×^»@Úœ_":ž––î¯ H §\.|n¸ –Éd¸ºÚŽ 'ž¾¾Nxy¯àµ©©‹œœºá›œœœ:º»°²² *Ê“ |™?ß— |v3jç‡^¯G.o§¸x$WRÒHUU KKsBBÜFu* …ãÆŒ] }8Ïþý9de Óš5‘\{í|®º*jÒÇh×Ô´òë_HVV ûF¼ÌÒR(_°`ü Á |þy.÷Ý·ç-“ÉxõÕ-\sÍüqÌ×^;ÆŸþôé·–›››ññÇ?#,Ì;ïÜÁßÿ~ë:ûz{U¼ÿþivîÌ ¶¶Õ«Ã¹çž¤¤„NÚëpOÏ §NUб»’’FÌÍe,XàGr²0é.>Þß$]~£E(¡J(&olD(këY¢*$ĈOÂÂܧì뀩ÐÖÖ+Fôêë;hjêî¢Ý E'CC#‚”³³ nnv¢ ××3sOT·©¢Vk‘Ë…C§ÚÚ6êêÚËÛ©«k£®®]<|2ì1JpC8ãïïB@€ó7bÿ99udgWsî\ çÏ×ÒÞÞ‡••±±>ÄÇû‘ÈÂ…¾’ûIBBÂXHb“„éÑÞÞÇ{ïæÍ7O —·“”Ì]w%³vmô¸–ÀÎ$º»xùåÃìÜ™Íl~õ«µÜzëRéùü”ÊêêÚ‘ËÛÆlårAX2¸,-ÍÇt#ùú:Ž•LeS­Ñè(*jàìYáTôÌ™*ššº077#8ØUt+ÍŸïCT”—Q/4;;û),TPV6v\o¯ ™L†£Ø§åIX˜.&yq|)ttôqð`>û÷ç’•U޹¹«WDäŒÖht¼öÚQþö·ƒ8óÌ37óðÃ{‘ËÛÑj…8ÝD‚fëÖ|ùe‘ø¸ÌÍ͸êªHvï¾{ÜS§ÓsÝuÿ¼<ù˜8™™ ½žzêx`5î’^Ou:=_|QÈë¯ãĉ ÂÃ=ؾ}97Ý?é®ÖÖ^Nœ\O™™åÔÔ´2gŽÕð¤;A|ŠŠò2é‚iA„2ˆOÂ}iiMM]ØÚÎ&4ÔƒðpÁ&¸'Ê…7imí§œD¨ÆÆ.êëۇũ®oRÂd=C·Ø98Þ=ƒ¦Nw÷ õõ#{ á¾ÚZáfxÞlmçàŒŸŸþþθˆ÷®®ó¨ªR÷>Usþ|-¥¥Mhµ:¼¼D÷Ó‚¾ÄÄxOù÷K ‰)$6I˜.ÔñÆ™|öÙfͲà–[³eKÁÁ“?Qgº08¨f×® þõ¯Ãèõz~ö³5lÛ–2ã:¾®®~äòjk[‘Ë;†%á”±®®M,ß¶´4§Òº„…È›««-ææ¦·!îîe¹¯âüùZúû‡pr²aÑ"ü‰‹ó'6ÖÛh}g*•FŒÀ•”4»•šhn.ííçGà<Å p¡¡î&3Ån>Žcz 7OO{““¾NmmgÏ vúÓ§«(-mB§ÓâÆ¢Eþ,^À¢Eþ„„¸MúÚt:=uumc:•Š‹TW·¢Õê°²² 4t$ò)Dফõ¿¡¡ƒôô<ÒÓóÈήfölKÖ¬‰$55–Õ«#Þ300ÄóÏ`ÇŽã$$ðüó› +.<üð{¼ÿþiâãý'´ÜÀûïŸá‘GÞûÖ8¿Ç/¼0qîª;Žó‡?ìC§7·y>ük¬yã,žzê#~õ«u<òȺ+zŒ––öìÉäÍ7OÐÝ=À 7ÄqÏ=+ˆŽö§ïâÒ=é.#£Œ“'+éëSáåå@JJ¨Øù4Õ.T•ÊJKE!Jè„jß<<ì‡_“< ó Ê';¾:Ó0DÔ Ý††2îÑSâF÷ÚØÌÄ‚å F÷ =RÓÝÁÓÔÔ5,>}SŒêëS‚#*(È…  Wìíç¢Vkimí¥¢¢…òra¯àççD|| úïOd¤×Œq–IHHL’Ø$aêêÚØ³'‹½{OÓ×§"5u>wÝ•ÄâÅÆ^Ú”F¯×³.Ï=—N}};›7/㡇®ÆÍÍÖØKwÔj-õõ‚xd°žv'ûììlƒ¯¯ÞÞ‚€dp'J¦s»Ôj-ùùõœ;W#Æâš›»°²²Þ( ”…NV¹¸öö>ŠŠ()iE¥ÒÒ&úû‡Édøù9î!Þ"#=ñ÷wžö›ÚššVÒÒrIKË#7Wμy³¹úê(RScY¹2Üd܆Ǘòë_Hgg?¿ûݵÜvÛÒoíêèècÓ¦WØ»÷þIù»ùæ—9uªâ{Ŧ¥KƒùϘÇ×éô$&þ™ºº6>ýô!Ä?{ûí“<þø‡üâWóë_o¸âÇR©4|üñYvì8Nqq#Ë–qÏ=+X»6ÚèQ6FÇ… µdd”‘‘QÆùóµ¨ÕZÂÃ=ÄÈÝÒ¥ASÖ}X_ß!º-…{!–78¨F&“áëëHh¨»øúêFHˆÛ”{™Ê I7”BÑ9üy‡(Pbgff2\\l‡ŽFJÍ…Ï…Ma*ãDÑÜÜEE…’ªª*+[¨¨h¡ªJ)Æ ÍÌdxxØãädƒ¹¹}}*Úéëbî\+,ð%.ÎO,Ÿìý„„„Ä”G›$&½^OFF»veòå—…¸¹Ùqç‰ÜvÛR\\¦Ö©¨)rôh Ï>›Faa?úÑ"}t=~~NÆ^ÖÑÝ=Hmmëpop_S#8•:ÄîÃtƒ€dp'î§úi´Z­åÂ…Z²²*8y²bL$nñâ‰÷#6ÖgÒ.z†(+kþZ®¥²â)‘‘žÃÝ(îDFzê6£‹%%¤§ç‘––Gq±GGkÖ¯aãÆXRRBMêĽ££?üáS>ü0›ÔÔù<ýô?(R_jOÑåÒÒÒÂÿsQ7'çO沩©iåÈ‘b¶nMùÆŸ½÷Þi{ì~úÓUüæ7׌Ëãéõz23Ëyíµ£9R‚¯¯wߦMKŒî~3Ðß?ÄéÓUdd”’‘QNq±3³‘²ñääLêgýR183ª™¢"ååMTT´ Vk±°0Ãßß™ððTDÄÌÑM½^OKKèŠJÍÛÅ:hm9Œš3ÇJtB&ÂúM9*%¨ÕZª«•¢ød¢*+[èìì`Ö, ¬­g£ÑhéîÀ×ב„„- `ñâÂÂܧÝs#!!1®Hb“ÄÄÓÛ«âóٽ;ƒŠŠ–- bëÖÖ¯‘6bãÀ¹s5<óÌçœü0 sn¿})wß½Ü䦬µ·÷ O¹›ºeã‹Z­¥ªJ)öA„(Ãk£aB¦áõÑPLîãã8-¾ÿ©ŒJ¥Ÿ7ÔÈTÙajôC4ÏÛÛQtHzÝÝí¦´˜úuÚÛû¨¬l¡¼¼ù[Ëö ïaBÞœ  W–. båÊp°·Ÿ^û1 ‰+B›$&Žª*%»veðá‡Ùh4:n¼qÛ¶%O!ÄÔ)-mâ/IãС–, ä7¿¹fL´ÃTÒPW×NMM+uum¢°døÜPº;gŽ•8ê×ßßI•üýññqœV›¹¯£ÕêÈϯçĉ ²²Ê9s¦ZìEIL &11˜¤¤¼½&tJeÏ—’á$``33¾¾NDEy é 8??'“P& ½^Ïùóµ|þy.ééyÈåíøø8²qc,©©±ÄÅù›ì…¥\ÞΓOþ‡£GK¸ãŽDž|òlm§FüéÁßà_ÿºÃÈ+ËÇŸã¿x—­[“ùãoøÖâ•ÐÙÙÏ[o`×®LÚÛ{¹öÚÜ{ï bc}ÆõqÆ ¹¼ÌÌ222ÊÉÊ*G©ìËÆ““CII™:eã‹J¥¡¼¼yT'”PL^_ß^¯gî\+BCÝʼnšÂðOÉámBètz”ÊîáŽGA|’ËÛEQJ.o÷.ææf¸»Û‰â“Aˆ2ˆR¦2‘öJ&> ?×ååMœ;WKEňÊÀ¼y³ teñbÖ¯aÉ’ “}”˜p$±Ib|Ñéô>\Ì®];VŠ#[¶$qÛmK¦ûÄXÈåíüíoù裳„‡{ðä“×°fM„Q×ÔÙÙ?Ædˆ½ÕÔ´ÒÔÔ%ö¬8;Û »‘„i)£…¥™ä„Ñéô6ˆ±¸S§*ééÄÍÍŽ¤¤`’’‚IL ™°äà zx*“‚ââFŠ‹)*jdÎÎ6DDxЧñ†Üœ9S;Ž8^hµ:Μ©&--—òilì$(ÈU˜LõÂ߀V«c×® þú×xzÚóüó?žr}y¦*6|öÙ~ö³·¹ë®dþô§MÈc¨ÕZ>ùä<¯¾z”âbIIÁÜwß*V¯Ž0Ù »ï+ONaùò°)Y6~±ôöª(/o¦¸XAYY“80alôXóJ˜0ÕcàÓ¥²gŒepF’ô÷ Sâd2®®¶øú:Š1½Ñb”··ƒÉtö]==‚•“#Dý‹Š46v‰½Y2™ ;»¹»ȺuQ,\è7­%$$D$±Ib|èî`ïÞÓìÙ“Emm))¡lÛ–ÌUWE™ìÆwªÑÚÚËßÿþ_Þzë^^<öØ®¿~á¤=¿ÝÝâ„“ª*%UUJjj”TUµŠÓa,,Ìðövü†;É 0™Jψ1(.n$+K8Ý?uªŠ®®~\\æ‘”"º—Æ;§×ë‘ËÛ‡%ۨ¤ ¦F˜7gŽ¡¡n⎅óÄÙY*ý:jµ–'*HKËåàÁ|Z[{ ÷`ãÆX®¹f>ááÆ^âEQ\¬à‘GÞ§°°‡ºŠ‡vVï) IDATºzJnúMYløì³|ð-~ùË«yä‘õúXe¼òÊŽ+%0Ð…ûî[É-·$0k–i»)¾«l<,Ì]œt7•ËÆ/–¯U(*ĨþþG©!¦l¡œg´£t*ÐÑÑ7JŒê‡˜„)ÃäC—ybW” @9;½Aj*:£ÚÚz9x°€£GK(,lSÜ.P³ r%>>€åËC‰ŒôšQ‡Ž3Il’¸2JJÙ½;“>:‹™™Œ[nI`ëÖ‚ƒ]½´iCw÷ ¯¾z„×^;†Í,~x·ÞºdB.{{UTW+G‰J-TU #u …š––æx{;àLP+þþÎN%ooG©‡k˜ÎÎ~Ž/åÈ‘Ž+¥©© gg–- fÙ²`ƒ u·ÇëdDP*.n¤´´‘žžAqŠ’Á­á)Eà.•Jñc%¤§çqèP!]]ýÄÆúšËƱM×9µZË?þñ/½ô%óçûòüó?&,lü~þ&S›Þ}÷=ö¿ÿýõÜ{ïŠ ¼ÒÒ&^{í}t–yóf³eKwÝ•Êÿþïg¼ðÂ&~ò“%“ò˜--=¼ñF&o¾™E_ŸŠ›oNàž{–«¸=üPÙxrrÑÑÞSþgùRP©4b¯´t¤_¯¹¹k"#ÊàT s—^ÿ§ Ý݃b$¯¶V¸¯«k¥®®}Lߥ¥¥9^^bç¥à†î}}pt´6òwòÝh4:ŠŠÈÌ,ãØ±2 …8¿°M’¡×ë±±™ET”K–ëCLŒ÷”|–˜¡Hb“ÄÅÓÞÞÇ»ïžbÏž,;Y½:‚mÛRX±"lÜKPg2Ž>8à /¢³³Ÿ»ïNág?[ƒ­íœ‹þ*•F‘jjZ©®\JÕÕ­c&Šxy9ˆÎ¤À@\º”¦b´f²iiéáÈ‘bŽ)áøñR:;ûññqdÕªpV­Š 99këËßä+•=+(*j]K¥¥M i°°0#0Еðp¢¢<ÅxÅD—ˆOGº»øâ‹BÒÒò8z´µZ˲eAlØËÆ1SÖ-08¨æùçðúëÇXº4ˆ¿ým¾¾Ó6ÙL± à¯=ÀK/}ÉÎ[Y»vò&ý ñÁÙ¼þú1ª«[Y³&‚{ï]IrrȤ­a<ù¾²ñ¤¤–/veãKGGEE‚%@ÓCûúT¢³ut /<ÜÀ@Wéàh ÓÜÜý-b”p¯PtŠŽ!›Ycħ‘{ácSëbliéáܹNª$+«œòòfÔj-ææfèt:ôz°±™Íüù>,\èKl¬p/9 $$LIl’øaòòäìÞɾ}ç™5Ë’[o]–-Iøû;{iÓ ½^ÏçŸçò׿ ®®Ûn[Ê/¹ö;3ì:žúúv*+•TT4SYÙ"v)56v¡×ë‘ÉdxyÙãï/ˆH. ÷~~N3"Ž0ž¨ÕZNŸ®âøñÒá³g[’˜ÄêÕ,_vYÑ*Ãiµá”ZˆÁ)Ä袋˼a—’pRm(î–þý.Ÿöö>Ì'==ŒŒ2RRBÙ¸1–õëcLú4øb8}ºŠGyÖÖ~÷»ë¸í¶¥ÓêP`*‰MO>ù>ø ›?|€¸8¿I}lNÏ—_òÊ+G8}ºŠ¨(/î¿%×]·pÊ*Œ.ÏÌ,çĉŠ1eãBì.tÚ–_ z½žººv1†W\,PUU-h4:,-ÍʼnxááÃ.Xw<<ì½t‰+D­ÖŠôêêÚD7”ásÃÞ„ýÅ×ÝP†Ï½¼Œ.HªÕZòóë9¾–ììjNªD©ìA&++KÔj :ggˆ‹ó#.Οùó}¤r} ã#‰MߎZ­åóÏsÙµë8çÎÕîÁÖ­ÉÜtS¼ôâ=?^Ê3ϤQPPÏõ×/ä±Ç6ˆb^OÏ ••-TV¶PQ!JÂ熲EggBBÜ t]J†œ©—Äš:ry;GŽ”päH1™™åôõ© ugåÊ0V­Š`éÒ KzŽåòöáÿH ®ºZ‰F3ÒÃ!ôo›ÿˆ©°{¼hiéž —ÇÉ“•XZš³re8©©±\}uÔ%¹M•¾>Ï<ó9{öd±zuÏ=wË´¼xœjb“V«ãî»wsî\ û÷ÿÂh‡5yyr^yåii¹8;Ïãî»S¸ãŽÄ)ÿ³?ºl<3³œsçjIJñääP–/ŸeãÃІ²²æ1]P¥¥M46v`g7wø`cD„ u—ž»iDÿÐñ©¶V¤ärᾯOŒDôüý…a/_¿7–+ª©©‹sçj8w®†3gjÈÏ—£Vk™5Ë™LÆà ss!!î,YÈÂ…~ÄÅùä2­]$$¦’Ø$1–æænÞzëo¿}‚¶¶>Ö­‹fëÖ’’‚½´iINNÏ<“Fff‰‰Á\{톆4£Ä%%ÍÍBìÍÒÒœÀ@‚‚\Å[p°+AA.ØÙÍ5òw2}Ðëõäç×sèPæS\܈­ílRR†ãqáuñÞ×§3Îm0L ññqŽ4xéED„.F?EœnÈåí¤§ç‘––Çùó5ÌkÅêÕ‘¤¦Æ²fMä´Ï+å׿þ€Þ^úÓ ÜtS¼±—4aL5± „XÛ-·¼L{{û÷ÿ''ã‰ÈõõìÚuœwÞ9…^¯gÓ¦%lß¾?¿é³4”gf–qüxÙ¨²q’“…Iw3¥lübéììÿF!yYY“8dÂÏÏI|¿ŠŒô$*ÊGéâ}ÒÖÖK]];µµB·gmm55­ÔÔ´‰{R77;üý¿.B9ãïÃ乃‡†4¢ûéìÙNŸ®¤¥¥™LÆÜ¹V¨Tj4óæÍ!>^žâãˆ÷¿¢ª ‰D›$Ξ­fçÎ ÒÓó˜7o6·Ý¶”-[’¤ ô8cp)ÿýo! E'¾¾N¬[ͺuÑ,^ø½"ajPaaƒx_[Û†^¯gÞ¼ÙbY«àT¢p¶¶Ò)ñDQ^ÞLZZ.ééy4`g7—uë¢Ø¸1–+§ۯ»{€?üáSÞÿ ©©±üùÏ7áâ2½ãCSQlá"îÚkÿ££5ü3£‹==ƒ¼ýöIvïΠ±±‹c¹÷Þ,ZäoÔu7íí}de ‘»ŒŒ2±l%%M5PXØ ±èíUaf&Ãßß™¨(A|2ܤÃËéF££¡¡C jkQªºº•ºº61žgeeŸŸ“è†ò÷¤||'D„Ò—'çìÙZ²³«8{¶¥²33³fY28¨ (È…””0–, `É’ ïìM•¸($±i&ÒÐÐÁž=Y¼ûî)zzÙ¸1–»ïN!>>ÀØK›R¨ÕZjjZ)+k¢¢¢…ÒÒ&ñã¯w)ùø8R_ßIvv5NNÖ<öØ6mZ<-7ñ¦Lss‡rð`>YYå,]ÄúõѬ]=f3ÜÔÔEQ‘‚¢"á$·¸XAU•­VÇܹVÃSàFD¥ðp©ÓbÑéôdgW“ž.L øø8²qc,6Ä0­¿ÚÚzùÝï>aß¾óÜrKüã 3êDv*‹MGŽ”pç¯óûß_Ïöí˽œ1œ>]Å+¯áË/ ñõuâ¾ûV²iÓbf϶4öÒ&½^Oii“èz:y²‚Þ^žžö$'‡ˆ±;é¢óûÑëõÔÖ¶‰‡0†÷Ϻº6@肊Šò#@……yH‡›3ˆ––êê„ É_wFµµ ¥åff2<=퇅(Q&&;«k®¡¡ƒììjΞ­!;»†¢¢´Z¡<_£Ñ¡×ëñð°'%%”¤¤`RRBqwŸšÓi%$Œ„$6Í$²²*ؽ;ƒC‡ pv¶aóæelÞœ(m ~µZKee eeM”•5S^.Ü*+[P«µ˜™Éðñq$4ÔÐPwBBÜD—’••;vçŸÿü 3zèjîº+Éèщ™Dii‡pèP>99r¬­­X½:‚õëcX½:‚9s¬(/o¦  ’ ŠŠhoïÀËËaÌæ8*Ê çi-d˜*jµ–'*HKËåàÁ|Z[{ q#5u>ë×Gëcì%N Ÿ~zßýîc,--xþù³zu„±—4éLu± àå—󗿤±wïOM²±²²…W_=ʇf3oÞlîº+™»îJžò“FGNN­8é.;»µZKh¨û°øBbbˆ…¾Hº»).VˆâSaa¥¥M aaaFP«xhcˆâIûÒ™GOÏ (@ÕÕµ¤”(ètÂ媇‡=Îøû»ˆT@€p¥{ëÁA5¹¹rΞ­&;»š3gªéììG&“!“ ‡\îîv,_Jjê|ƒ¥Î' ‰ïG›¦;ýýC|ôÑYvïΤ¤¤‘øøî¾;…c§m¬ärTSQÑBE…0¥¥¼¼™ÒÒ&êêÚÐhtXX˜áëëDX˜;ÁÁnDDx,K_?ñÕhtìÝ{Š_>ŽÆ^Ò·¢Tö°sçqÞ|ó*•†Ÿüd1÷Þ»rÚ”‰ÿ†²qA|*(¨G&3” âSBB äй´Z55­*†P‚¥PñœœlÄrƒâ&í[g(CCjkÛ¨¬l¡ºº•êjåð­Uü™18¢ S™1*0ÐÇËþÙ‘ËÛ9wNp>ee•QY)8Üe2Édxy9˜ÂM7ųlY Ô­*!1Ilš®ÔÔ´²gO{÷žF¥Rsà qlÛ–BLŒ·±—ftúû‡¾áR*-mD.oG§ÓciiNP+!!n„„¸êFHˆ;ÁÁ®?øf¥×ëÙ¿?—çžK§¾¾Í›ùå/¯žöe½¦@NNû÷çðùç¹Èåíøø8鉭íZ[{(*j§¨¸ºÎ>IõÅ¥à`7iœ‰ÐÝ=ÈW_‘žžÇáÃŨTj†#r±x{Ϭî½^Ïdó‡?|нý^xá'$&šžf2™bBÆu×ý?¬¬ÌÙ·ï!“¾˜îïâ½÷NóïËÄï¿ ú{i“JGGYYde ±»ª*%³g[—‡’”Bl¬·tÑytvö‹±uƒª¤¤µZ‹¥¥9!!ncâë‘‘žFê(a|†¨©i¥²RIMM+UUJQŒjiéÀ ooG]ð÷w&(hDòöv¸¤ßU•JC~¾œÌÌr.¦¨HAÿfffx{;°dI7ÝGJJ¨ÔÙ)1ӑĦé„^¯çرRvíÊàðáb<<ìÙ²%‰Ûn[:ímïßFw÷ ‚dp)UT´P_ß^¯ÇÊÊ‚à`AT ÷ 8Ø•ÐPwüý/kÃüx)Ï<“FAA=7ÜÇcm˜1'¿Æ"7WÎGåÓO/ Tö0oÞlæÎµ¢££¡!­(¥èha“*‰¦G[[/‡žžGFF‰‰Á¤¦Îgݺèûo&—·óøãrüx)Û·/çñÇ7J“ž˜>b@uµ’uë^`Ë–džzêc/çùz™xRR0÷Ý·Š5k"fä…UCC‡èzÊÌ,£¹¹;»¹$&‘œJrrÈŒr`Ž7ŽŠŠfq(‡Á eÜÜìÄix*0ÐU:<’ §gšÁ %ˆP­TU î(CU‚¥¥9¾¾N¢ JpD 1=//û‹zMklìäÀašq~~=Â×67ħÄÄ`®½v>qqRüVb¦!‰MÓžžA>ü0›]»2¨ªR’”ÌÖ­)¬[=#NÖ††4”• Ñ·’¡”²´´‰ÆFÁZ;w®ÁÁ#.¥°0¡[ÉÇÇq\žŸœœ:žy&ÌÌ2Ö¬‰àÉ'¯ùÖIfW†¡|Ô H4000$þù¼y³™?ßgx ³p ÷0i§ÀLG¡èäàÁ|ÒÒr9s¦KKsV® '55–«®ŠÄÎnæFu:={ödñ쳟ãáaÏ‹/ÞÊ¢E~Æ^–É0Ä&€?>ÇÏþï¾{+V„{9Mff/¿|„cÇJ qã§?]Å7.šÑ¯»BÙxåœ:UAw÷ îîv¤¤“T2<>´¶öRTÔ0ì„ö~B,~Ö, "#=‰Žö&:Ú‹èho"#=¥¨£„Hgg¿É«ªRŽrDµÒÝ=S£ q8ƒN§ç¦›âÙº5™ðpc/mBÐëõÔÕµ‹¢Rq±‚’’&ªªZÐh„éaa{î!–uûúNÌèùÊÊž{.´´<ââüxê©kXº4hÜg&¢Vk)/o&?¿žüüz.\¨¥¨HJ%Lù³°0' À™””PV® '2ÒOO{#¯Zâb¨®V’žžGZZ¹¹rllfqÕU‘lÜ˪UÌ+¹vªª”<úèûœ=[̓®áá‡×JC¾Æt›~ñ‹w9z´„/¿|lÊ9ùŠ‹ù÷¿°oßymؾ=…;îHÄÖvޱ—fT´Z99r23ËÈÌ,ãìÙT* ÁÁ®ÃâS(‰‰A3ZXOÔj-¥¥M)ÈË“SX(t3öô baaFp°ÑÑ^ÄÄx%ˆP’ÓDâë´¶öRS£¤²R  1½êj¥™³·Ÿ+Vn¹ˆûú:}Cl¯«kããÏóùç9”–6¡×ë‘Édhµ:æÍ›E\œ?‹ùçG\œŸÔ*1Ħ©†^¯'#£Œ;3øê«"¼¼غ5…Ûn[2­6uý*(+k¤¨¨‘’Á­ÔÛ«B&¦¿EDxæNd¤ááî“f›njêâ…ñþû§ tåÉ'SY·.zÂwºÒÓ3(N¨)(,ò†Ž 3fͲ¤¯O…µµ«VE°eK"‰‰!32®1U)*RžžGzz%%8:Z³~} 7Æ’œ" )Ãh4:^ýÏ?€  Wþþ÷[‰Šò2ö²L’é(6õõ©X¿þEœyóÍ{Œ½œËB¡èdçÎã¼ýöIôz=wÜ‘ÈÝw/—†TsæLBä®  €˜oÑõ”ð¡#—^¯§ºº•‚‚ êÉË«§°°¶¶^d2~~N¢ûÉ B¹ºN-±Wbòhhè ªJ)ª¬TRYÙ‚Bщ^/ô¾úø8‹P®âtê  W¬éîäèÑbÈ端ŠéëS‰âRGG2™Œ  ââüX´H¡ÂÂÜgDREbZ"‰MS…!>úè;w§´´‰e˂ؾ}k×FMé •JCYYÓ˜\II“Xälo?—ÈHOÂÂ<ˆˆð "“°0wll&ÔhWW?/½ô»veàädã®ç–[$ûë%ÐÒÒ#v.6}µµmèõúák/¬­-il좤¤KK Ö¯æG?ZÄŠa3:š1•Ðéô\¸PÇy¤¥åR[Û†‡‡=6Ó’%ÒÄ–¯S\ÜÈ£¾Ga¡‚‡^˃®‘:G¾‡é(6ÐCwÍ5çï¿•›nŠ7ör.›žžAÞ|3‹;2hoïåºëòÀ«ˆˆ"æ£éêê'+«BŒÝUV¶0k– bßÓüù>ÒëåÐÔÔE^ž\<äÊË«§¡¡77ÛQî'Á åë+upJ|7ýýCTU ÂSEE3åå-TUµPY©+­Å)ÖBG”+½½ƒœ?_Kzz.Je/AA.xy9Ð߯¢¸¸‘Þ^66³ˆõ!!!€… }Y´È_*Æ—˜*Hb“©£Pt²{w&ï¼s’þþ!~ô£8¶o_>åN» };#8!WSÓŠF£ÃÊÊ‚ÐP7QLŠŒô$"Â77ã÷ ªÙ±ã8ÿüçWXX˜ñÐCWs×]I’ã{ÐëõÔÔ´’Ÿ/ˆJÉPèéåå n⢢¼ÉàðáböïÏ¥·w•+ÃøÑ±n]4ÖÖ“/,J\:ŽS§*9p ôô|š›»ð÷w&5u>7Ʋ`äFûÔj-/½ô%ÿøÇÄÆzóâ‹·JeÂÁt›ž~z?ï½wš£GŸÀÙyj_P¨ÕZ>ùä<¯¼r˜²²fV¬ã§?]EJJ¨±—f’45uqüx™(>57wak;›eË‚ÅΧÐPwc/sÚ"Là"TU•0êÞÖvÑÑ^ÄÆz‹“lCBÜ$!Pâ{Ñëõ44tRYÙ" Q‚(eè–µ´4ÇÏÏ GGkz{UÔÔ´28¨&>ÞŸ¤¤ììæPT¤àÂ…:**ZÐëõøû;‹Ñ»E‹üˆŒô’¨$LIl2U²³«Ù±ã8äáädÖ-IlÞœ8%6ž£cQBiceeÍôõ 8__G""<Ån¥ÈHOüýMîER£Ñ±wï)^|ñ½½*î½w÷ß¿Šyó¤|ÿhÔj-%%cbp†Žss3‚‚\G …öösQ(:ùä“s¼ÿþ**Zˆˆð`Ó¦%\ýBÜÜlýmI\*•†ŒŒ2ÒÒrùï éèè#"“ÔÔX6lˆ%"bzöǹ¹r~õ«÷¨©iåñÇ7²}ûrÉ)y‘Lg±ipPÍš5ÏãÍ¿ÿ}§±—3.èõz¾úª˜W_=BVVÑÑ^<øàRSç›Ü{¿)Q^Þ, O'NTÐÝ=€››-ÉÉ¡¢ø$E'–¾>ÅÅ äç×SPP/Fýç̱""ƒ¨(A„ŠŽö&<ÜC*"—¸(z{U¢û©¼¼y” ÕÂÐÐQ*“L&ÃÃÃŽ„„@V­ G«ÕQW×Î… µ\¸PKw÷ sæXë-Fï-ò—â ¦€$6™jµ–O?½ÀÎÇÉÍ•³`/Û·/çÚk˜l|¨©©K bÃèXTT”'ááž„‡»‹®%SwªèõzöïÏå¹çÒ©¯ogóæD~ùË«§\aëD0ZH4ØÏËË›¿±é28–""<ÆŒiT“žžÇûïŸ!+«{û¹\}›6%ëcÄïLâbéëSqøp1iiy>\D_ßqq¾lØËƱøû;{‰&Ïà š^8Ä«¯añâ@^xá'øùIKa:‹M§NUrÓMÿb÷îm¬];½:sså¼üòaÒÓóðð°ãÞ{WrÛmK¥á?€V«#/¯^Ÿ²³«P©4ºœBR’pst´6öR§=jµ–²²¦añiä ­¯O………!!îÄÄû Ãa›tP)q±ètzêëÛ©¬TRR¢àøq¡ß­½½ÃU»a(RPÎÎ6èt:”Ê^ÊË›)/oB§Óãåå0&zãm²×“ÓIl2”ÊÞzëo¾™EGG?6ÄpÏ=+X´ÈߨKÑé„X”¡`dô IDATñÛbQ11†³Â¬——ƒ‘W}é?^Ê3ϤQPPÏ 7ÄñØcfìEà ‰ÂHaObb|ˆŽö"0Ðå;íäÅżýöI>þøýý*V¯Žà'?YÂêÕÒß ££/¾("==cÇJÐht,[4,0ŘDÜuªpæL<ò>--Ýüö·×²yó2)^xLw± à‰'>äøñ2Ž}|ZƶkkÛxýõcìÝ{š9s,Ùº5…mÛ’qpÄ’‹A¥Ò]Eff9™™åäåÉÑéô„‡{’Jbb0Ë–¥ãr&2²OÃ]D3RBã=%Ò ¦Cw÷ ï¼s‚·Þ:EMggœçÑ×§¢¾¾C,(pÅÉÉ™L8$®©i¥§g++ bc}X´H˜z䌔˜P$±É˜äç׳kWŸ|rkëYÜ~ûR¶nM6ú/¾J¥¡¤¤Q• +Ä›à`71¯>:5•ÉÉ©ã™gÒÈÌ,cÍšž|ò"#gF‘é· ‰ (•‚èëëDT”çÇÒʼn}}*>ýôï¾{Šóçk tá¶Û–òã/–6XS€ææ.*$--—“'+033cùòPRSç³vm”tAx‰ôöªxöÙÏÙ³'‹•+Ãyþùýµ~*3Ä¦ŽŽ>–-û3?¼–ûî[iìåLmm½ìÚ•ÁîÝ™ i¸ýöeÜwßJ)v‰ôô rêT¥(>•”4bn.cÁ?’’‚IN%>Þ_ŠxM2 6Ÿß@~¾°Ç2‘»»Û‰äóçû0¾tx#qQœ?_Ë;ïœâ³Ï. ×ëÙ°!–ää`,,Ì))i¢¼¼™²²&äòv´Zæ8;Û0{¶0á¹­­N»»ññþÄÅùïGt´·4 Sb<‘ĦÉF«Õqð`>;wfpêT%ááÜ}w 7Ýo”_nCbABt°TT4£Ñè°¶žED„'ÑÑ¡aúeÑ++[xî¹tÒÒòˆ‹óã©§®aéÒ c/kÂÐéôTU)ÉË““—'-à==ƒã&$ææÊyç“|òÉy4-©©ó¹ýöe,](98LœÚÚ6Ì'--óçk˜=Û’5k"IMeõêHé„ü2ùï xòÉP©Ôüñ7Lé)c¦ÂL›^}õ(ÿ÷ÿåäɧ¦½ÀÛ×§âí·OòÚkÇhmíáÆñÀ«¥Âüˤµµ—'„IwYYTW+‡'Ýб»ùó}¤Î,#ÐÑÑ7&‚——'§ºº½^›› ø+ˆO øJÑH‰ï¤§g}ûÎóÎ;§ÈË“áÁw&ñã'0gŽƒƒj**„bò’’FÊË›)-m¢®® F‡™™Œ9s¬P«µ iÄè’%,^H\œŸ4‰QâJĦɢ»{€·ß>Éod¢Pt²fM$÷ܳœ¤¤I»7œ®ŒD£ÔÕµàäd3*'Üûû;OÛ²Úææ.^xáï½wšÀ@Wž|2•uë¦W/†N§§²²eXXª‹-{{UXZšîAl¬11ÞÄÆzáyÙBbÿûög÷îL ÷à¶Û–róÍñSÞõ6Ý)-mž —GAAvvsY·.ŠcY±"|Z‰Ë“Mss7¿ýíǤ¥åróÍñüþ÷×KãŠÇ‰™"6 iX¹ò9V¯Žàé§o4ör&µZËGåå—SU¥díÚh|p ‹ù{iSš††23ËÉÊ*'ÝÍ›7›¥KƒHN!99„ðpéPÈHtwй¹rrrêËÛðñqOóçû냭­Ô%1–¼<9o¿}’>:ÇܹVlݚ̶m)ߺW«µ”—7SQÑLY™ @6ˆN(™L†A"˜;׊  W/àê«£ˆ:ö$.Ilšh**ZرãÿùÏYÌÍÍØ´i1Û¶¥Lx‰n}}¹¹uääoZõtvö‹¹qCÊrwŸ¶Ýîî^zé+vî<Ž““ >ºž[nI˜ò¢šV«£²²…ü|¡+ÀPÞÝ×7VXŠõ&6Ö‡ÈHÏqéJªªR²gOᅥÁA5×_¿;ïL4©¾1‰±èõzòòêIO¦ÊÊ\]ç±~} ©©óY¶,X:é¾Bôz=ï¼sЧŸÞ½ý\ž{îV¬3ö²¦3ElHKËåÞâĉ§¦dâå¢Óé9t¨€þóK.\¨#11˜\êUáÆ^Ú´ ²²…Œ A|:q¢‚ŽŽ>œœlHJ &)IŸ\Œ½ÌM{{¹¹rrsë†(9ÍÍ]Èd2œEñiÁ¢£½%@¢É»wg²kWCCn½u)÷Ý·oï~ÿP«µTU))+k¢¸XAvv ååÍ(•=¢ø$“ÍlüüœX¸Ð•+ÃX³&rZv J\1’Ø4èõzŽ)aÇŽã;VŠŸŸÛ¶¥°iÓâ ™FÑÜÜM^žp b8 ioïÃÜÜŒà`W,ð ##=gäDŒÁA5;w祗¾ÂÂÂŒŸÿü*¶nMž’/ŒaÉ *ååÕ‹SP,-͉ˆðE%ƒci>ŽÜyg"?ùÉÉêm¢hµ:²³«9p Ÿôô<:ðñqdãÆXRSc‰‹óŸò‚«©PQÑÂc½Ï¹s5ÜsÏ }týÿgïÎãbÎÿ8€¿¦S¥)RI(:•DÑá̹n–]YäXvY¬û·¬]ËbYì:×}Ÿ¹Ö-Wé&¥(¤¢C¤ÒÝÌç÷GšJeê;3½ŸGM}¿ï™÷§™ù¾çóy*ìÈHÄ£!› oßupp0Âòåø…~~qزå||b`e¥3zaà@ÛJ7¥ 5#2DE=Ûï)ÁÁ‘—W}ý&¢~O..¦ æƒIIöþ{þððd¼|ù¦Â{þò%xVVú4;¹ËÏ/Æ‘#AرÃiiÙ2¤¾ÿ¾,,jÞ“¶´TˆÄÄLÆ# ¦àùól(+@©ª*¡e˦°±i…nÝÌЩS´jÕTÜw‹H*6‰S^^Nœ¸‹={|‘—¶˜2¥+zõ²Û…Üë×ù¢—òšÔÔ×àñx04l†öíéSŽw•– qìX0Ö­»Š7o 1eJ7L›ÖCj¦ BÄÇÿ·.""‘‘ÏŸ_ EEyXZ¶¨0cÉÜ\¯Îvw{õ*‡âС<þݺ™a±Žo">%%øûÇáÒ¥\¹ò™™o`jª‹/¾°Å€6°¶Öç:D™RR"À¦M×±qãu˜›ëáÏ?GÓc\‡Z±éܹû˜;÷îÜùYæ{7UåÁƒlÙr/F U«¦˜6­Fv  j1+-",ì©hÙ]HH"Š‹Kal¬WWS89™ÂÙÙ¤AEIòþj†ˆˆdää@QQffÍѾ}kÑ,(3³æ´ pSR"À¹saغõ¢£SÑ£‡9æÏï[ÛVŸ}ìüübxy=„O îßOFrò+äç‰nWT”‡žž&¬­õÑ¥‹ ¬¬ZÀÒ²ø|•Ï>7‘ Tl‡¤¤—Ø·ÏGŽ£¸¸#FtĤI®07×û¬ã¾yS„RÞùô" OŸ–õXÒ×o"Z¿]þ"B¸ÿaŒáÂ…püñÇ%$'¿Âر]0kVèè¨sZ¥!ââÒ+ÌXŠŠ*+,)))¼-,µ|Ûc©n KïŠMî]·áéy)áë¯0nœs/%5WPP oï\ºk×"‘›[ˆvíZâ‹/l0`€ Œu¸Q&ݽûóçŸ@JÊ+̛ד'w¥¥ˆu¬¡›!\]WaÔ¨N˜=»×áp.11[·Þĉw¡©©‚É“»aÜ8g©ù IÚ#$$¾¾±ˆGxx2c°°hWWS8;·EçÎFPS£M$$ce» —Ÿ’D};óòŠ ¬¬kk}ØØ´†MK´oß&&:4K°(_y³aÃU„†&á‹/l°`Á˜˜ˆ÷½aVV|}ãàíÐЧHL|âbA…ŸiÒD-`gg =XXèÁÄD— ¡²‡ŠMŸ#00»vùÀË+::|xx¸`̘εZJTXX‚ÈÈgo§Æ–}2Ÿ¡A[[]4-¶¼°D[ÇWÎ×7+W^Àƒ)2Äóç÷—¸ÂHiiya)YÔg)2ò Š¡¬\VX*/*ÙØ´ª÷O¢c¸};Û·{ÃÇ'FFÚ˜<¹«hw "9rr pýz._~€›7¡¸¸;bÀ€²SCêñRßrr ±jÕ<€nÝ̰jÕHÚµ¥ž4´bìßïµk/#$äÚšú­ôôìÜ郃ãÆ9cÊ”nýÁ’,ÈÉ)DPPüÛewqˆ‰Iƒ¼<vv¢~O;Je«YU>S¾|uDDD>|†¢¢R¨©)ÃÚZ¿B(CÃfÔ,^†yy=ÄêÕ—ŸŽ‘#;aáÂÐÕå×ɹcˆÏ@XXüübqçN"RR^B(d——cB… r06Ö¹¹¬¬ôafÖ-ªÕkŠH,*6ÕTqq)Μ ÅÎ>ˆŠz{{CL™ÒýûÛT»PR"@LLîßOÍZЉIEi©ªïì8QV\jÑB³Žï•lOÆÊ•à닞=-ð¿ÿ}++î—±”–ÒÞÎX*›µõ\TX²²ÒígcÓ mÛr7ʍ¨§N…`çNÄĤÁÅ¥-¾ý¶zö´ ¥r$3ó ®^}€Ë—À×7àäd‚/¾°E¿~í¨]._~€Ÿ~:@€_ŠáÃí¹©AiˆÅ¦Â´oÿ V¬Ž‘#;rŽDÉÉ)Äþý~صë6rr 0j”¾û®‡Ä}Ð$«23ßÀß?N´ì.11)¢S§6pq1…³³)lm[Ñì S~=RÞêþý$ÄĤ¡¤D>_66-EÅ'[ÛÖtÑ/c„B†Ó§ïá?.!7·³g÷Á¤I®õr ’Ÿ_ŒRpï^"BBq÷n"^¾Ìǃšš+kO|~#˜™é½Õz07×£=ÒáÃb“ŸŸ6nÜÈU@­¸Xaaº(-å¡Y³´hñýû;bæÌ™Uþc ááɸp!ÁÁ >Ih×®e…¥pï¾1Ú¸q#üüüêúnÉ„´45ÄÇk‚Ï/†A44Š>ýKU8qâD­÷Ù³,ܽû!!‰OBdäs–ˆ Kÿ5ï.+,IÂr›×¯ó±{·/öíóCnn!† ë€o¿íVeAŸÜˆ‹k‚Œ Uðx ÆÆj˜9sz÷¶û‹.å·rÏŸ7ÆãÇÐÕÍG›6ÙPPÖÉy\\\>ùúR[Ҟߘ˜²‹3³,Ž#©½ÚäwîÜãHM}#G¦ÖQT’gÔ¨QÕþY¡‡ôtU<{ÖEE 05Í‚ŽN~F×0Ìœ9...Õþù””,QñÉÏ/éé9àóÁÑÑ®®máìl sóæàñx5Ê/©ïæ·¨¨QQÏqÿ~""ÊfAÅÅ¥C ¢iS5´oß;ÃÙÙ66-?Y@¤ürïS¿Åظñ:¶o÷F‹šX»v4ºt1®Çˤ¦¾FhèSÜ»—ˆ°°$„‡§ °°)¢IUðxrxý:ùùeMÉõõ›ÀÂBíÛ·F§Nm`gg€Æk·”—êâóÞxû°Øtäȸ»»ãË/¿¬ÿè¤@jª´´ ¡¤$€§§'ÆŒƒÃ‡ðsÅHÀÍ›àåõÏžeÁÀ@ ..mѱ£aµÖH»»»ãÈ‘#”‹j(.–Gn®"´´ ?ë8žžž€êNø+)¼W™‚´´l((ÈÁÒRíÛ·‚llZÂÔT2 Kïzñ"Û·{ãÀ((ÈcâDWŒç\­%4>¹ñò¥ cðö>Н¿õÑçq üV®¤Dùù Ÿ]Ô®JU¯/â@ùåVmóë燯¿þ÷îýÚ`–Š•/å©ÉXe ÈÌTŸ_ eeÁ§TÊÓÓ‡Ƙ1cj}Œ¸¸tѬ§€€x¼~fÍÃÙÙû÷ÿŽ‚‚Xz.âHuò›Ÿ_Œ‡Spÿ~2‚ƒpï^"22rßÎ~j+«fœ¼;3¦6¿D|jò÷›’’…Ÿ~:‰›7aêÔîX°`§›/”– ŠDÜ¿ÿ¡¡O‘ðŒ•µ˜ÑÑáƒÇ+›Y™–– yy9˜™5‡ƒCØÛÂÞÞ°Ú³[©þ!o!•Ž Ï™ÙÑP¸»»C ž?—/ßàÉ“ˆˆHAxxÒÛ;°²j/¿ìTëÝŸêòbƒ|¨üÉæccxúô¥h'Àò%……%ÐÔTEÇŽ†?Þ:µAûö­%z'À””,lÛvGŽACC?þØß|ãTãOh|rÇݽî/ (¿Ü©ìyHœ(¿Ü©m~œL «Ëǹsa˜<¹«˜£’\Ÿ[ì µ'޾=¦¦º05Õ…‡‡ „B†‡Sàï?¿X(*êc×®_(¿©N~UU•àà`#|ûm7@LL╊;wãÀCAA&&ºèÔ© \]ÛBN®ÜMùåHMþ~[¶l‚¦àر`üòËYܼù›6ålg]9X[ë¿=¿3 ;;¡¡I ++>…†>Åë×ùPTT@«VM!/ÏÃíÛq8|8%%hi5†½½!:t0x»,´U•»hRýãó|l¼Qç¾Ïtû¶:v\¢-FmlZaäÈNèÑâÁ|ò(‹Ê·’-o¦^¶•¬‚‚ÌÌô`g×_Ý;¢Méh¤˜Í›oàôé{hÞ\K—Á˜1iÛhB‘rr< b‡Ó§ï5¨b‘rrS³fŰ·7à: "F%%˜9³7lm[ÁÚZjjµk6' RS_cýz/? ##lÛ6_|aK;ËBˆ”êØ± x<îÜy‚Þ½­¸‡B>ŠÏo ‡ë0H-ÉÉñ0ujwtëf†É“÷¢_¿õعs<:v”ì¢LùN˜:ýgzzލðö÷ï'!?¿ªªJhÝZ ……¹F,Û¨ØDÈ{ ¢EkÒ¥Õ«WyزåöîõC³fñçŸ_aäÈŽTd"„)׸±2¬­õü˜ŠM„Bꔹ¹._žƒ~8Œ#¶à·ß†aüxg®Ãª]]>ú÷o‡þýÛ!bbÒD¨[·"8ŽPvQ±‰’—W„;|°}û-())`ñâ7Ι–ËBˆ qt4Bpp×aBiÔÕaïÞ‰øë¯kX¼øÂÓ±jÕH©íù*//K˰´l±c»àÈ!ÜÝŸp–LúìN_ñññØ·oŸB©\nn.V¯^-ÖcæååaåÊ•b=&×ê#ŸëßÿÅ;wêìø²˜×ê(-b÷îÛèÒe¶o¿…©S{ 0p &MêJ…¦·jú—§§'êìø²˜×O¹u+nnkñûï0bDG,Á?ö‘ê^Su¡&Ï#QQQ033ÃÈ‘#akk º Ž|¶šäwÛ¶mhÙ²%ÆŽ ###,\¸°nƒ#Ÿ­6ïÖ®]+ñ¯‰µel¬ƒ’RR^q yGMÆéÖ­[¡¯¯I“&¡]»v5jŠ‹‹ë6@òYj’ß ÀÔÔ“'OF›6m°hÑ¢º Ž|¶šæ·_¿~:t¨èëÉ“†13¦W/ \¹2YYù2d#ž>}ÉuHõJÒ®·³³³±{÷îjý\eã».¯Ÿ¹ßÃR+±±ipwßw÷í06ÖÆÍ› ðË/Cд©סI=www|ÿý÷ˆEll,.^¼ˆ+W®pƒ—/_bæÌ™¸xñ"¢¢¢Ž7"$$„ëЈ˜\¼xX»v-סԙ֭µ‰‰™GBj#==³gÏÆùóç†'Ož ""[·nå:4">ÄÆ°°0ܽ{ë֭øˆI||<<==‘––&ú²²j8=ô ›áܹ™àóU0dÈßxð€fgrÅÐÐ111\‡Q)±›„B!fΜ >Ÿ¬Zµ @Ù›z777¬_¿-Z´€¶¶6öìÙƒyóæA[[zzz8vì˜è8G…‰‰  §§WéÅóçÏÃØØªªªðððÀüùóqéÒ%€··7lmm¡¬¬ sssüûï¿Uƾk×.@MM  ¥{Jº8r‘‘‘¾}ûâÀÐÔÔDTTT¥¹)?îáÇall 555L˜0pìØ1BEEC‡Evv¶(ÖÊrUÓqó1²–×wåäà§ŸNÂÍm-^¼ÈÅɓӱ{÷D6ã:´OZ²d ´µµ¡¬¬Œ=zTX:ð©1Vñàëë‹3f`Ö¬YàóùhÞ¼9Ö¯_ÿÑXªï•¿÷¯Óoݺ…Aƒ‰~¯ºõ”©“ëgöžÃ‡³|»RçÏŸg<Í™3‡ååå1___¦¡¡Á<==Yjj*“““c?ÿü3 …lëÖ­ [½z5 …lÍš5ÌÄÄ„1ÆXNNSVVfgΜa………ÌÇLJÉÉɱŒŒ –œœÌ”••cŒ%$$°Æ³sçα‚‚¶råJ&//Ï<ÈÒÒÒ˜ºº:Û»w/+,,dgÏžeªªª,::úƒ¸SSSöí·ß²¢¢"Ï444ØÍ›7«}ßÇŒÃÆŒSퟯ©š_\¹HNNf***lذa, €effVš›ÔÔT¦¤¤$z?~Ì455™——»ÿ>SVVf§NblÆ Û°aC•¹ªI¬ïûܼÖtü×§’Û»×YY-f¶¶?³£Gƒ˜@ ä,žšŽÏ+W®°-Z°¸¸8–““Ã̦M›Æ«úï¿&ãáüùóLAAÍž=›ååå1???¦¡¡Á.^¼XáyäÍ›7LOOmÞ¼™²7n0>ŸÏüýýÙáÇYçÎÙÁƒÙàÁƒ™»»; úè}JNNfêêêìÌ™3,??Ÿ­X±‚0¡PXe,UÝVWMÉj~clðàÁlذaìĉlÚ´iÌÎÎŽ½yóæƒûDùý4å·œ»»;[¼xq¥÷IÚóۡïìŸn}Ö1¤vøðájý¬4ŽSÆËËËclûöíÜÆå8­éã_²œß¢¢"vûöm¶lÙ2Ö¦M–››ûÁ}¢üþGZò›žžÎ0;;;¦¢¢ÂÔÕÕÙï¿ÿþÑû$ëùe¬ìúdöì#¬uë¹ìôé{uz®ºR“ë?q]oW5Þ«ï_§ÇÄÄ0555ÆXõë)ïG]„±Ž·»b)65iÒ„‹¾·xñb6lØ0Qàåoâccc™‚‚+))aŒ1ÊtuucŒ²{÷þ åH\\\…gÅŠløðᢟ …LOO×!Õx|ž={–µhÑ‚=|ø1VöDš••ūޫÎx8þ<ãóù¬¨¨Ht¬Å‹³Ñ£GWx9vìëСC…øfΜÉfÏžÍ6mÚÄTUUـؙ3gØòåË™ŠŠ ûà>ýùçŸlРA¢ÿ³Õ«W³¼¼¼*c©ê¶ê’´çiÉ/ce¯#zzzløðáÌÄÄ„M™2…•––~pŸ(¿ÿ‘¦ü–ûT±IÚóÛ±ã2¶iÓõÏ:†4¨ÉÅ’4ŽÓ›7o2 6|øpÑùÞÅå8eL²ŠÒ–ßçÏŸ3¦©©ÉfΜ)q¯3ŒQ~«y~>|Ⱥté"ú 200ñù|vúôé緜P(d+W^`-[Îa'OÞ­óó‰[M‹Mâ¸Þ®j¼W5þÞ¿Nò䉨ØTÝzÊûÄQaìãÅ&±,£366†¢¢¢èÿÖÖÖ–$¨©•õáñxPVV†‚‚‚èÿ唕•qïÞ=ôíÛÆÆÆ6lØG§n%&&¢mÛ¶¢ÿóx<RRR*ÜfffHNNþhÜòòòÐÖÖ®p,i'Ž\€œœZ´h z¹ÑÓÓý»üXÏž=û`ý²¥¥%€ê媺±¾O–òúêUfÏ>‚#¶ uë¦ðñY„¥K‡€ÏWá:´8p FŽ '''`Ö¬YÈÊÊP½1VÝñ`dd%%%Ñÿ­­­‘””Tág CCCÑ×±cÇðúõk(**BMM gΜÁСC±dÉ 4;wîüà>½ÿ|¤¨¨ˆ… BUUõ“±T'Ni"-ù½pá¶mÛ†¨¨(œ:u QQQˆˆˆÀßÿýÁ}¢üþGZò[Òž_ÚâCÒ4NsrràîîŽ &à§Ÿ~©S§Dç{ÿ8Ò¦®®ŸÅRlÊ̬ؠ2##M›6­Ñ1Ξ=‹Å‹cÉ’%ˆÅÝ»wEˆïRWWÇË—»Þ—'†ÏçËË—/¡¡¡Q£X¤™8rT`ÕÍÍûš4iòÁ¶âåñQ®ªÆÃÑ£Apu]…Û·c±}ûx80E*ú2U†1†uëÖáåË—ðôôDaa!FŒ öcìcÞW/^¼€ººz…ïñù|¸ºº"11±Â×¶mÛ```mmí /ð†††ÈÉÉùà\êêê\àž>}ZÔ›¬ªXª§4‘–ü†……ÁÑÑšššÊÞøõìÙ¡¡¡œ‹òûiÉoMH{~óó‹ /Oû¼¼KZÆiii)z÷î MMMDGGcìØ±•žKÚÇ©8IK~:Ta·ªÆ£K—.ˆŽŽþà\”ßÿHK~>详®®Ž²‰øàû )¿sæôÅìÙe§Ó§ïqNÇõvUãýSïs*+‰óïD\Äò.%11.\P¶uÞöíÛ1`À€#%%–––puu…¼¼<?zqçææ†³gÏâÅ‹€ÀÀ@DEEÇã¡wïÞ¸ví?~  l·S§NÁÍÍ @Y>|ø9wUâ‰#ï«nnÞ׫W/;vLT鈈ÀíÛ·à“¹ª YËktt*† ÛŒ… =1b„=nßþ´å:¬ÏöÇ {÷îPPP€ƒƒÆ'j–YÛ1ö1)))¢fóoÞ¼ÁŽ;>WnnnðõõÅ£Gùùù°··Ç™3gàââ‚çÏŸ#((@ÙßÑÙ³gѵkWÇ[ïÞ½qîÜ9QQ588cÇŽ…¼¼ü'c©NœÒDZòkkk QÎòòòpéÒ%Q3iÊïÇIK~?E–ò›] é›åZ—¤eœ^¼x©©©˜7oÒÓÓE¯^½ [ãTœ¤%¿JJJX»v-rsËø¿~ý¾¾¾ô:ó Ò’ß°°0ôéÓGTpÈÎÎÆéÓ§Ñ·o_”ß¹sË N³fÁ™3~' Äq½]Õx¯íûœšüÔÛõóûkíjÓ³©sçÎÌÔÔ”uíÚ•5oÞœõïߟ‹Öÿ•‹‹‹­)dŒ±°°0ѺŤ¤$¦££ÃºvíÊÜÜÜXÿþý™±±1xY·nãóù¬W¯^L__Ÿ}ùå—L 0Æ;xð SWWgݺucÍ›7g£GõZxw¼1ÆØ¬Y³X³fÍX¯^½ŸÏg›7oþd,UÝVWMÉj~…B!›6mkÒ¤ ëÙ³'ÓÕÕeýû÷gùùe}Ð(¿'-ù}×Çz6ÉJ~ K˜žÞlvõêƒZCZ =G¤eœ.Y²„øàkúôéŒ1ɧ5}ükCó[ZZÊÌ´µµY×®]™––ûꫯD}[(¿'-ùlÔ¨Q¬iÓ¦¬G¬Y³f¢ÆÎŒ5¬üVåÏ?/³–-ç°³gC99MÔ´g“¸®·+ïŒU>þÞ¿N·gSMê)⮋0VG Â˰›7oVhJUSÙÙÙìÚµk,<<œ1Vö€y{{Wø™ŒŒ ÅÂÃÃÙ­[·XQQ322b¢Ÿyòä »zõ*‹‰‰©u,Õ!iåÄ‘‹÷U'7•‰ˆˆ`×®]cÙÙÙÜV_¹ª.®ŠM·oÇ0GÇåÌÌìlß>?Nw™«®ÚŒÏÂÂBvûömæååÅÒÓÓ+Üö9c¬Üùó白½=+**b>>>,88˜ …•?–)))ìêÕ«¢æ|ïJKKc^^^½í}±±±ìêÕ«,))©Z±Ô4ΑÄçiÊoBB»rå å·¤)¿5!ùŽNezz³Yttj­!-jz±DãT|ã”1É*F0&]ùˆˆ`W®\©Ö{\ÊoiÊoTT»rå ‹‹‹ûäye5¿Ÿ²víeÖºõ\æëËY ÕQ›ë?q\oW5Þ«Þë‡@ `™™™¢ÿ‹ã虜>Vlú°a-5jÔ=zôø¬cðùü Ó[µj…V­ZUø™””ôìÙ'Ož„¥¥%vìØÒÒRØÛÛ‹~¦¼‘VC%Ž\¼¯:¹©L»víЮ]»ÞÖÐs•“Sˆß~ûGcÀüþûèèHözìÏ¡¬¬ WW×Þö9cì}JJJ¢eoUÑ×ׇ¾¾þGoÓÕÕEïÞ½«u>SSS˜ššÖ8–êÆ)-¤)¿FFF¢Í%>…ò[Fšò[Ҙ߄„ ((ÈIu¿ºBã´ú·I#iÊoUïßGù-#Mùµ°°€……EµÎ×Pó;o^?¼|ù“'ïÁ™33aa¡÷é_’â¸Þ®j¼Õ{ý““ƒ–––èÿâü;±›ê‹öîÝ‹U«VáÕ«W011ÁåË—+t„'D\¿… N@ bûöñ2Ñ—‰k|>&&&\‡ êX$)Ni"IåWü$éq“ôü††>…¥¥>”•¥îmœÔ“„ü—“ôq*$éq£üŠŸ$=n %¿+V Gjj6FÚŠóçgч$ ŒT¾K:t(†Êu„ÔJVV–.=‹S§B0bDGüöÛP4i¢ÆuX2¡k×®ó PU±HRœÒD’7ʯøIÒã&éù½w/öö†œÆÐPIBþËIú8•F’ô¸Q~ÅO’·†’_yy9lÛö ¾ùf'ƌَóçgAK«1×a‘zB{æR.\G÷îÀß?LÁ¦MîTh"„Rm¯_ç#4ô)zö¬Þò B!„K**JسgTT1~ü.s©'Tl"¤¼~©S÷cêÔýèÝÛ ÞÞ‹àæfÉuX„B¤Œ—W$””àêúñþ„Bˆ¤áóáСo‘šš9sŽ¡¬Ÿ4‘uTl"DL!áß÷öŽFàÞ½D=:þ9|~#"$„"íŽ Bß¾ÖPR’ÊN„B(==MìÝ;^^‘øûïk\‡Cê½S!¤JJHN~…ÄÄL$&fâñãHHÈ€O 6v57VcùòsØ¿?C‡ÚaåÊÐÐPå2|B!R,66 wî<Æ¢E3¸…B©1›Vذá+|ÿýA˜›ë¡_¿êíØH¤›y§€èèT$&fâéÓ—HLÌD\\?Î@FF„²iŸŠŠòàñ€âbèwË M¡¡O1sæa¼z•‡mÛÆaðàöœÜB!²cÓ¦07׃££סB!µ2x°bbÒ0}ú!\¸0z\‡Dê›y+!!7F¡yóèÙs €²‚P6£é}ï~O^^ƒ·Gi©ÿí…¿ÿ¾ggSœ:5ººõs!„Ȭ'O^àßC±iÓXðx<®Ã!„BjmÞ¼~ˆŽNÅøñ;qùòÚ¡NFQÏ&BÞ26ÖÁÔ©f(*JPV@*)|´Ðô>99ZµjŠÁƒÿÆÖ­·°lÙ092• M„BÄbùòó02ÒÁ A4S–Bˆtãñxؼy,TU•ñÇE+GªœœBäær†ØU:³ÉÓÓ³>ã¨EE\¼˜SS ˜™i@IIþ³Žçéé‰/¿üRLÑU~Ž¡C‡Öé9ÈÎ;W¯Î"..‹Ÿ‚Ÿ_x<|ò °¤D€;¼af¦/¯¹06Ö©§ˆ¹Eã“;ôü#Û(¿²­¦ùõöŽÆ•+pâÄ÷“kx³š<==¡¨¨Èu¤ŽP~eå—TFEE »vy ÿõøë//̙ӗÓx¸ª ðÏ?0i’ÔÔdëo¥ÒbÓ¨Q£ê3Žz£¢bMÍ~€ÂÂÆ£¨è1„Â"Ž#û¸’’™Í…$31ÑÁñãßáòåX¼ø^¼ÈýèNsï*,,Å‹o°yó 8;›ÂÕÕTæg6Ñø”m”_ÙFù•¯_çcþü<¸=\\L¹‡gÏžÅÙ³g¹ƒÔʯl£ü’ª˜˜è`ÍšQ˜9ó0ÚÀÅ¥-g±pñžˆÇ“GóæÓÈÁÃýÞÏ_×xŒ±7gí‹/6 ,, òòr ääxpt4 AíѯŸµÌHÍ–`Ë–›Ø¸ñJK?\V§­­Ž;'À×7þþq¸w/%%ëÀÕÕÎΦpr2A“&jÜB!Òˆ1†‰÷ ""ׯϣ×B!2iáBO\¹ò^^ó «Ëç:œz!1uê~\ºxþ|lj]Hƒ,6edäÂÅe%òó‹DË£ääxàñx llô1p`{ `ƒ6m´9Ž–HŠ””,,Yr ^^‘àñx(ÿÓ)o¾eË7¢Ÿ-((FpðcøûÇÃÏ/>c ––-àâb —¶pt4‚šš2Ww‡Bˆ„[¹ò¶o÷†§ç÷pp è!„Ȧ¢¢R ôÔÕáĉï!//Û­¥cøñÇ£8uê!Œµáëû×a‰[Ã,6À¿ÿ†áû»¯  ÒÒ²™)ƒµGÿþíЮ]ËzŽ’Hš/r1nÜNDD$(+8ÉËóðóÏCðí·Ý*ý½œœÄÃϯlæSLLä`gg—²™O;BI‰6ˆ$„ìßïŸ~:…M›Ü1|¸=×áB!u*11}úü‰©S»cîÜ~\‡S§~ùå,vï¾-šøâèh„3g~à8*±k¸Å&˜8q®_DiiÕ½xääÊf<ç„Õ«ë¶a+‘\ÁÁ1mÚ¨¨(bãFw„„$â·ßþœ>=;WûX¹ˆ-»KJz %tìhW×¶pr2­m+™¯êBùбcÁ˜7ï8~úi ¾ÿ¾'×áB!õâøñ;˜?ÿ8Ξ‰ ¸§N¬[wë×{‰&½ðx< h‹íÛÇs™Ø5ìbSf游¬Dnna¥3œ€²eR<þõKh€cغõ&þøãÜܬð×_cÀç7¤§çà÷ßÏcÕª‘Ÿµ$.)é%üýãD3Ÿ22rÁç7BçÎ&o—Ý™Â̬9x¼†· !„4$å3šþ÷¿/0cF/®Ã!„BêÕ”)ûù ׮͓¹–#;vø`Ù²+ÔåñÍ7NX±b8‡‘Õ‰†]l€óçïcÚ´Ÿ,6>=:µ©ÇȈ$ÈÊÊìYGàãƒÅ‹aÊ”®õRð‰‰IŸfÍÃÙÙT´ìÎаYÇA!¤~0ÆðÇ—°iÓ üòKÕK³ !„Y•••‡ž=×ÀÍÍ k×Êή¹GaÞ¼Ô””äñý1wn_Ž"«3Tl€É“÷âÚµH””|¸Ë˜œ¦±7PaaIøöÛ}€þ{{n¦r B<|ø ~~±ð÷Gpðc£eË&¢â“‹KÛ³s!„ÈšÜÜBÌ›wW¯>ÄßÁ!v\‡D!„pÆÇ'cÆlÇÞ½ѧ5×á|¶sçîãûïˆz4½KQQ¿þ:.DV§¨Ø¯^åÁÅåwdgW\N§  99`÷î‰èÕË’ÃI}Û»×Ë–ƒ³³ 6o+QË'KJ } ?¿XøúÆ!,ì)JJ05ÕÍzrr2¦¦*סBù„ÈÈgøöÛýÈË+Ä?ÿŒ¯Qÿ?B!DV-Yrÿþoï…ÐÒjÌu8µvãÆ#L˜° ðaé…Ç+›Ø0hPûú®nQ±©ÜÅ‹áøöÛý¶³×Òj ggœ;w?ÿ<˜¦´7yyE˜;÷8.^ Çœ9}1kVoÈÉIvŸ¤üüb?-»{ø0`mÝÎÎ&pqi ‡62·æ™B¤Ý¡CøùçÓèØÑ[¶ŒƒŽŽ:×!B!¡  ½z­…­m+lÛ6Žëpj%00_ýJJU¶íñôœgg“zŒ¬^P±é]S§îÇåËPZ*¨Ð§iëÖ›X¹òÜÝ»`ÅŠáPT”ç:TRž>1ؼù   ÷ÑÑ@Ù®÷ÚÚ27»™ŠMï»|ùŽ Âþý“?Øu,2òÆÛ…Fqèдi£ÍQ”D\„B†uë®à¯¿®á«¯±rå(++pVzúô¥¨Ù¸¿^¼ÈŸ¯‚.]ŒEÍÆe°²N!œÊÊÊÃÒ¥gqêT† ±Ão¿ “Å7–„BˆXåä¢{÷ÕèÕËRjw§{ô(;vxãĉ»“ãA ŠnãñxxúôO((ÈÜÿTlú˜¢¢ÒJ ¹ððØ…'O2±cÇ©]jE€×¯ó1cÆ!øùÅá÷߇Ãݽ ×!Õ;ÆbcÓEÍÆƒ‚“SmmuÑNwÎΦ00Ðâ:TB‘Zg΄â—_Î@AA«W”‰u!„úríZ$&LØãÇ¿“ÚëïãÇï`Þ¼ã?Þ§N… 7·P´;Ýóç8Ž®NP±©6 K0{öQ\¾•+G4È"…´{ôè9&N܃âbvíò€]k®C’)ˆƒ¯oîÞ}‚‚‚b´n­''¸º¶…““ tuù\‡J!/11K—žÁ0nœ~úi ÔÕ¥g !„")¦Nݨ¨ç¸qc>””¤k%Jqq)\\V¢{ws¬Y3 EE¥8yò.æÏ?UU%ÄÇÿÁuˆuŠMµÅúuW±aƒ¦L銟L=o¤Ä¥K˜5ëllZbÇŽ R½•f]+..Ž{OE=ŸÂž¢¤D€¶m›‹f=99S3ByÇ«WyX¿þ* @›6Úøã/áèhÄuX„BˆÔJKˆ«ë*Ìœé†~pã:œÙµë6V®¼€€€ÅhÞ\Cô}Æ=J…¥e £«3Tlú\ÿþ†Ù³ÀÅÅÛ¶GãÆ´½¼¤bŒaýú«X¿Þ ãÆ9á·ß†ÑŽl5”—W„ààÇ¢âSdä3ðxm%„B¤Mpðc ¾û÷O†››%×áT©°°ŽŽË1z´~úi ×áÔ7*6‰S^^¾ÿþ ||b°nÝhŒÑ‘ë¼€€x|ûí>4o®}û&KÍtKY‘˜˜ ?¿8øû—}ef¾††*œœŒE»ÝµmÛœë0 !¤ÆÞ-2¹¹YbÞ¼~h×®%×aB!2oæÌà I„·÷B‰n¾s§þøã‚ƒnˆ}‚©Ø$nB!ÃÊ•°mÛ-Ìœé† úƒÇãqVƒtüø,Xp}úXãï¿ÇP!Ž1Æÿ8øúÆ"8899…ÐÑQ‡³³©h§»Ö­µ¸•B*uóæ#¬_aaIps³Äܹ}acÓŠë°!„#--ÎÎ+1~L›Öëp>ª¨¨;¯ÀСvøå—!\‡Ã*6Õ•£Gƒ°hÑIôí[VèPQ¡BG}aŒaõêKØ´é:~øÁ ‹  ‚Ÿ„O5¿{÷ K`` ''S¸º–-»ÓÖVç:TBH'2\¿‰¯#4ô)z÷¶Âœ9}akKE&B!„ ëÖ]ÅÎ>XŒ¦MÕ¸çûöùã·ßþE`àèêò¹‡ TlªK ˜Kaa fÎ<Œ«WbÍšQ=ÚëH5—"$$Q´ì.,ì)JK…03k—¶pv6““ ø|®C%„4EE¥ðô¼‹íÛ½ñäÉ ôîm…Y³z£}ûÖ\‡F!„4hÅpv^‰þýmðûïù§¡ÁÅe%ºu3êU#¹‡+Tlªk‰‰™7n'òòбwïDšj_‡22ráá± Oždb÷î‰èÒ…K³¼¼"=†¿,|}ãðèÑsðx<´k×RÔïÉÁ¡ Í$„ˆÝ«WyØ·Ïûöù!7·_~Ù S§v‡±±סB!ä­'îbÞ¼c¸qcLMu¹Gäüùûøî»ðóû ††Í¸‡+TlªÙÙù˜6íîÞ}‚Ý1`€ ×!Éœ˜˜4|óÍ((ÈãСoad¤ÍuHD̲²òà8øúÆ!!!ŠŠòèØÑP´ìÎÎΊŠò\‡J‘R‰‰™Ø¾Ý'NÜ…²²&NtÅ„ .hÖ¬Á5õ$„B$žPÈ0`Àèêò±ÿd®Ã4è/4o®‰;'p —¨ØT_JK…øùçÓ8p ‹ À?¸q’Ìðñ‰ÁÔ©û`nÞ{öL”È5»DüÒÒ²áç?¿XøûÇãÙ³,¨ª*ÁÁÁèí’;SØØ´„¼¼סB$˜PÈpóæ#ìÛçoïh´jÕS¦tÃW_9ÒÆ„Bˆ„óó‹Ã¨Q[qöìpp0â:&`ĈÍ8~6ìí ¸‡KTlªo{÷úbéÒ³:´Ö­-Ñ[5Jƒ°dÉ) BgC÷äÉ øûÇÃß?ñxñ"êêй³±hÙ¹¹ää¨Yý nÝŠÆ_}¡C;p‘pB!CTÔsѬ§  äæBGGNN¦pv6³³iCnàGˆLËÉ)Ĺsa8r$÷ï'Á¢&Lpƈi©!„"&MÚƒääW¸zu.g“æÏ?;wãÖ­…4KšŠMÜzõ*'îATÔ3lÛ6žÓ*¬´HOÏÆøñ»‘’ò {öL”ˆu¹Dú”– ‘Œ€€²ewwî¯Þz7íÙã‹U«."$d)MŠø›$Í£G©˜0aäåå°wï¤ß8|ï^_,]zãÆ9á·ß†A^^ŽëANNà燀€8DG§ANŽ›–¢†ãFÔx˜:˜˜‰“'Cpúô=$&fÂÂB#GvÂðá ««Áux„BáPtt*ÜÜÖb×.ôë×®ÎÏWZ*„“Ó ôéc+†×ùù¤›$QfæLš´11©ØºuzölxÃcX½ú6o¾… `æL7®C"¤R™™oXÖlÜß? PT”‡¨Ù¸½½!Í´ ¤–22rqñâ}œ>ŠÐЧÐÑácèP;ŒÕ ´LŽB!ÿ™2e’’^âêÕ¹u~®sçîcÆŒƒðóû ­[kÕùù¤›$Uqq),8S§îaéÒÁ˜2¥×!Õ›’æÍ;޳gC±fÍ(ŒíÀuH„ÔHzz6üüÊ OñHJz‰Fѱ£!œËŠOvvPP ™z„Tæõë|\º³gÃEôíÛÇۣk×¶4Ó•B!õðá3ôéó'ކnÝÌêô\ýú­‡¡¡þùg|žG Q±IÒmÝz+W^À×_wÆÊ•#d¾qx^^¦LÙ‡»wŸ`ûöñ rV‘=Éɯà€xøúÆ!==jjÊpphóv·;SX[ëÓÅ3iðrs qõêCœ;ŸÈËË¡W/K b77K4j¤Èuˆ„B‘£GoƒœGN«³sÄcäÈ-¸xñGØÙµ®³óH)*6I/¯‡˜>ýlm[a×.hjÊfÓ±/r1nÜN<{–…¦ }{úƒ%²éñã¢~OñÈÌ|>_;‹–ÝYXèÕ[SCB¸ôæM®]‹ÄÅ‹á¸yó!ºw7ÇàÁíÑ·o;4n¬Ìuˆ„B‘2ÞÞÑ3f;¼¼æÁÚZ¿NÎ1~ü.äåáäÉéur|)GÅ&iñèÑsŒ· ŠŠò8p` LLt¸I¬31fÌvÀ‘#Sah،㈩Œ1ÄĤ‰ú=& ;;M›ª¡K89ÃÉÉmÛêRñ‰ÈŒœœ\¹ò—.EÀÇ'B!ƒ““ nþýmdöCB!„ÔÆúö]]lÝúØ›†=Ö`ïÞ‰èÓÇZìÇ—Tl’&™™oàá±qqiؼù¸¹Yr’X„‡'ã›ov e˦ؿ2´µÕ¹‰Î… ‘‘Ïޞ─ÜÜB4kÖ]º˜ˆ PmÛ6ì*‰ôÉÊÊÕ+pñb|}cݺ™á‹/lѧš4Qã8BB!„È’“'C0gÎQ.¾~±{Þ¼ã IÄ­[ èá£b“´)..ÅÂ…ž8y2‹ À÷ß÷”êÁíï]°·7Ä®]PS£å„¼K âÁƒ”Ÿ‚ƒãÍ›"èè¨ÃÉ©lÉ““ ŒŒ´¹•$%½Äµk‘¸z5AAñ——C÷îæ8н{[ÏWá:DB!„Ȩ’:uZ†1cº`Á‚þb;nZZ6—cÕª‘3¦³ØŽ+c¨Ø$­vîôÁo¿ÃàÁí±nÝWRÙ4õêÕ‡˜6m?úöµÆ¦Mce¾ù9!âPZ*DDD2ãá燻wŸ ?¿ººpv6Ÿh)*ác ÷ï'ÃËë!¼¼"ñèÑsðùн» h‡ž=-©!„BêÍêÕqüøܹ³Tl×›?ÿ|—.E (h ]ÃVŽŠMÒìöíL›v­[kaïÞ‰ÐÓÓä:¤j;qâ.æÎ=†1cÊvÙ£]¸©’îßOB@@<â’ˆ‚‚bèéiÂÙÙÎÎe³ŸZµjÊu¨DF•âöí\»‰k×"‘žžƒ–-› OkôíkÎé!„B8ñìY—cÛ¶q4¨ýg/##;/ÇÏ?‚‡‡«"”YTl’v‰‰™˜0a7²²ò°{·:vlÃuHŸ´c‡–-û3fô¢E¤z !’¦¤D€°°§ð÷G@@BBQTTŠV­šŠf=99™ˆ}Ý:iX23ßàúõ²â’·w K`cÓ}ûZ£OkXZ¶à:DB!„e»Æãĉï?ûX+VœÇ©S! \"•«‹ê›dÁ›7E˜>ý ||b°zõH|õ•#×!UjÍšËøûïkX²d¾û®×á"óŠŠJqï^"ãáïÐЧ(..…ºt1³³ \\L¡««Áu¨DÂÅÆ¦‰ú/…†&BQQ..¦èÓÇ}úXÑ"„BˆDºqãÆÛ ŸEŸµ«û‹¹èÒeæÏï©S»‹/@ÙDÅ&Y!2¬Ys ›6ÝÀĉ®øå—!PPœ¥iB!ÃâŧpèP Ö®%Ñ1BdYaa BBþ+>……=EI‰FFÚ¢YO]º˜@W—Ïu¨„c%%?ÆÍ›Q¸rå!3¡¥Õnn–èÝÛ Ý»›CUU‰ë0 !„Bª$2té²ýúµÃ²eCk}œÅ‹Oãòåøûÿzô Tl’5çÎÝÇ?…½½!vìMMU®CBI‰³fÁ¥Kغõ `ÃuH„·òó‹q÷îQϧðð$”– ab¢óβ;S4kÖ˜ëPI=HN~…[·¢qëÖ#øùÅ!/¯&&:¢ÙKöö†ÔcB!Rgóæزå&ÂÂ~­Õò·¤¤—pu]…ß±c»ÔA„2‡ŠMõÅÓÓ³ÞΕ’’‡]»¢!/ÏÃwßY¢Y³Fõvî÷  »v=BBB.&O6CÛ¶Ü51wttDëÖ­9;?!Ò /¯w㑠€¡m[]89™ÂÉÉ]º˜ iS5ÑïÔçó©¹/¿ü²ÒÛ ŠŸhx{G#>>jjÊpq1EèÑÜšËB!ä“$ýý`nn ~ù%£GÃѱæKéˆERRþ÷¿ö——ÌžÃv½KŦúRßM°åäT¡®î„œo0VZ¯ç~_ãÆPT”Œ’’4Nã8|ø0ÆŒÃi „H›7oŠXVx H@dä3… ææÍߟL0p „ÂB®C%•xÿe>>>7o>­[”€¢¢RXXè¡G tïnGG#Ú=ŽB!5" ›>5jÔ%%irjü»JJ-ÁãñPT”\‘‰‡„]ï†(pAC"aÉoP¤áÉIÔ¸±2z÷¶BïÞV€œœ?†¿â±w¯/45ûbÓ¦Qôü&aŽ9wwwäåÁÏ/·n=­[ÑHN~>¿\]Íðûï#У‡9ôô¸›uJ!„Ù@׻ܑÄë]*6B©6>_¥Bñ);;ÍšéÅm`ä£44zÂÒr1!llZaøp{tëf†ŽÛHÔ&„B!D¶P±‰BH­ih¨¢´ô5×aJ¥`Æ5èÖÍ ZZÔäB!„Ô*6B!2ª°0ÇÛs!„ÿ·w·1U×oÇ?GnŽÀ8ÚâþÆ“Š® o–K)NµZcV¶3´š.ìfYÓ–3Wšƒ´Y+j>hAš+¬t9Ëͦa´Z˜‘‡ELA\ë\ÿÍ“Çã° Ã÷kãÁ÷÷ýr~×ï ®sý®ýø£ ÏÐ`ÐÐlÀ ¡Ù€AC³ AΞ=«uëÖ xý™3gÔØØ¨ß~ûm£€ïJó›ôWŽkmm :ÞÝÝ­††r@ù'õ $y½^µ··AD#Í&éììÔêÕ«´¶¢¢Bn·[K–,‘ÛíÖ¦M›†68ø®$¿]°aýùæ›ÇöìÙ£ÌÌL=ôÐCš0a‚*++1J •Rž:uJsçÎÕÇ<4A@4›ð>|X«W¯V]]UWW§^xA?þøc¨C€m×®]zøá‡µaÆ€ãüñ‡/^¬W_}UGÕ矮²²2µµµ…(R ¥%K–¨££#Ôa„šMÃÔªU«”˜˜(§Ó©›o¾9àO8Þÿ}eee)22R©©©þ¡S§NÉãñ¨¢¢BiiiJLLÔ–-[ôôÓO+11Q©©©Úºu«$iÿþýZ¶l™ÊÊÊär¹”’’¢ŠŠŠËÆÒÔÔ¤yóæiìØ±š:uªª««%I{÷îUaa¡®½öZIRvv¶<vîÜyÙ×ùâ‹/”““£èèhÝpà ª¯¯ï7–+‰@x‡üvÁŒ34}úô€c‡Roo¯JKK%I¹¹¹š6mš>ûì³ËžƒÜ(œêÁ×_]f¦ÜÜÜ>¯‰šï†ÿ„$«ªªÐÚÝ»w[ZZš577[WW—Û£>jff]]]æt:­¦¦Æz{{íË/¿´1cÆØÉ“'­­­ÍÆŒcÏ?ÿ¼ù|>{ã7L’­[·Î|>Ÿ½òÊ+–••effŸ~ú©EFFÚòåËí÷ß·ظqãl×®]æõzÍétš™Yww·¥¦¦ÚæÍ›­··×öîÝk.—˾úê+Û´i“Íž=; öÂÂB{üñǃ®ÉëõZ||¼ÕÔÔØ¹sçlíÚµæv»ÍçóõK_sCõþ¸2#1¿]lÑ¢E¶råJÿxË–-6gΜ€5¥¥¥öì³Ï]o(s_UU•ñ1þ #µljj²‰'Z{{»ÍŸ?ßÞ~ûíË^÷»A¾áɦa¨··W’tþüyÅÇÇ«ººZ/¿ü²$)::ZµµµZ°`œN§&M𤍍(uvvJ’|>ŸV¬X!‡Ã!Ç£ÈÈH=õÔSþñÙ³gýç‰Õúõë«yóæiÙ²ez÷ÝwbÙ¹s§RSSµtéR9NÝrË-Z¼x±¶oß®{î¹Gß~û­Ö¬Y£ƒê¹çžSmm­ÎŸ?tMÛ¶mSaa¡,X ˜˜=óÌ3zì±ÇÔÓÓÓo,‰@x—üÖ—îînÅÅÅ‹‹‹ 8ÿä>€@áRöôô¨¤¤Do½õ–ú¼&j¾`4›†¡»îºK .T^^žÜn·ÊÊÊtúôiI’ÓéÔáÇuûí·kòäɺûî»åóù¾ÿÂMÃáÓéTdd¤|±I“&)::Ú?¾þúëuâĉ€5---úþûïuÍ5×ø¿¶nݪ3gÎ(##CûöíScc£žxâ EEEéÐøñヮ©¥¥ES§Nõ£¢¢´bÅ ÅÆÆöË@âÂ%¿õ%&&Æ_8\ÐÓÓ£˜˜˜ µä>€@áR®]»ViiiЉ‰ÑÔÙÙ©cÇŽ©©©)蚨ù‚E†:33•——«¼¼\ zíµ×tï½÷ª¡¡A;vìÐÊ•+õá‡*//O—mî Ä¥œµ··+>>>à˜ËåR~~¾vïÞí?ÖÓÓ#‡Ã¡ÞÞ^edd¨¦¦Æ?———§Ûn»-è\ñññ:yòdÀ±>úHEEEýÆ28„‡pÉo}ÉÊÊ úGÇ×ܹsƒÖ’û…K=øÒK/©££CË—/—$;vL§OŸVGG‡Þyç€×¡æ Æ“MÃÐúõëUXX¨ÈÈHÍž=[¥¥¥úå—_$I­­­ÊÎÎV~~¾"""tðàAuuuý£ó´¶¶úÿucww·*++åñxÖx<íß¿_ß}÷$éܹsš5k–jjjôóÏ?Ëív«¥¥E’T[[«#GŽèÎ;ï”$íØ±CGŽ‘$Ýzë­úä“Oü¿€uuuzðÁÑo,‰@x—üÖ—ÜÜ\ù|>íÙ³GÒ_¦úúzrÀ„K=¸fÍÕ××û¿fÍš¥U«VùMÔ|ýñ¦Q£†®`Ã.¯×k&L°iÓ¦YQQ‘7Î*++ÍÌìĉ–””dæñxìŽ;î°É“'[qq±µµµlÛÜÜlqqqþqcc£%''›Ù_¦¹ÝnËÉɱüü|KMMµùóç[OOOÀ†iffåååær¹¬¨¨ÈÒÓÓí¾ûî³?ÿüÓÌÌÊÊÊ쪫®²‚‚?~¼mÛ¶Íÿ}n·Û^|ñEÿ¸¬¬Ì¬¨¨È\.—mÞ¼¹ßXúšª÷À•©ùí‚K773Û¾}»]}õÕV\\lÉÉÉV^^îŸ.¹ ÂÀe¤×ƒf´Aøp©ù̆åýî7üÝ0”‘‘¡~øÁÿïµg̘¡¤¤$IRff¦š››uèÐ!%%%iúôéòz½:~ü¸RRRdfþ×ÉÊÊRww· BitMagic: bm::serializer< BV > Class Template Reference

bm::serializer< BV > Class Template Reference
[bvector serialization]

Bit-vector serialization class. More...

#include <bmserial.h>

Public Types

typedef BV::allocator_type allocator_type
typedef BV::blocks_manager_type blocks_manager_type

Public Member Functions

 serializer (const allocator_type &alloc=allocator_type())
 ~serializer ()
void set_compression_level (unsigned clevel)
 Set compression level.
unsigned get_compression_level () const
 Get compression level.
unsigned serialize (const BV &bv, unsigned char *buf, unsigned buf_size)
 Bitvector serilization into memory block.
void gap_length_serialization (bool value)
 Set GAP length serialization (serializes GAP levels of the original vector).
void byte_order_serialization (bool value)
 Set byte-order serialization (for cross platform compatibility).

Protected Member Functions

void encode_header (const BV &bv, bm::encoder &enc)
 Encode serialization header information.
void encode_gap_block (bm::gap_word_t *gap_block, bm::encoder &enc)
 Encode GAP block.
void gamma_gap_block (bm::gap_word_t *gap_block, bm::encoder &enc)
 Encode GAP block with Elias Gamma coder.
void gamma_gap_array (const bm::gap_word_t *gap_block, unsigned arr_len, bm::encoder &enc, bool inverted=false)
 Encode GAP block as delta-array with Elias Gamma coder.
void encode_bit_interval (const bm::word_t *blk, bm::encoder &enc, unsigned size_control)
 Encode BIT block with repeatable runs of zeroes.

Detailed Description

template<class BV>
class bm::serializer< BV >

Bit-vector serialization class.

Class designed to convert sparse bit-vector into a block of memory ready for file or database storage or network transfer.

Examples:

sample4.cpp.

Definition at line 146 of file bmserial.h.


Member Typedef Documentation

template<class BV>
typedef BV::allocator_type bm::serializer< BV >::allocator_type

Definition at line 149 of file bmserial.h.

template<class BV>
typedef BV::blocks_manager_type bm::serializer< BV >::blocks_manager_type

Definition at line 150 of file bmserial.h.


Constructor & Destructor Documentation

template<class BV >
bm::serializer< BV >::serializer ( const allocator_type alloc = allocator_type()  )  [inline]

Definition at line 544 of file bmserial.h.

template<class BV >
bm::serializer< BV >::~serializer (  )  [inline]

Definition at line 567 of file bmserial.h.


Member Function Documentation

template<class BV >
void bm::serializer< BV >::byte_order_serialization ( bool  value  )  [inline]

Set byte-order serialization (for cross platform compatibility).

Parameters:
value - TRUE serialization format includes byte-order marker

Definition at line 580 of file bmserial.h.

Referenced by main(), and bm::serialize().

template<class BV >
void bm::serializer< BV >::encode_bit_interval ( const bm::word_t blk,
bm::encoder enc,
unsigned  size_control 
) [inline, protected]

Encode BIT block with repeatable runs of zeroes.

Definition at line 762 of file bmserial.h.

References BM_ASSERT, bm::encoder::put_16(), bm::encoder::put_32(), bm::encoder::put_8(), bm::set_block_bit_0runs, and bm::set_block_size.

Referenced by bm::serializer< BV >::serialize().

template<class BV >
void bm::serializer< BV >::encode_header ( const BV &  bv,
bm::encoder enc 
) [inline, protected]
template<class BV >
void bm::serializer< BV >::gamma_gap_array ( const bm::gap_word_t gap_block,
unsigned  arr_len,
bm::encoder enc,
bool  inverted = false 
) [inline, protected]
template<class BV >
void bm::serializer< BV >::gamma_gap_block ( bm::gap_word_t gap_block,
bm::encoder enc 
) [inline, protected]
template<class BV >
void bm::serializer< BV >::gap_length_serialization ( bool  value  )  [inline]

Set GAP length serialization (serializes GAP levels of the original vector).

Parameters:
value - when TRUE serialized vector includes GAP levels parameters

Definition at line 574 of file bmserial.h.

Referenced by main(), and bm::serialize().

template<class BV >
unsigned bm::serializer< BV >::get_compression_level (  )  const [inline]

Get compression level.

Definition at line 561 of file bmserial.h.

template<class BV >
unsigned bm::serializer< BV >::serialize ( const BV &  bv,
unsigned char *  buf,
unsigned  buf_size 
) [inline]
template<class BV >
void bm::serializer< BV >::set_compression_level ( unsigned  clevel  )  [inline]

Set compression level.

Higher compression takes more time to process.

Parameters:
clevel - compression level (0-4)

Definition at line 555 of file bmserial.h.

Referenced by main(), and bm::serialize().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00182.md50000644000175000017500000000004011365042645013143 0ustar tlktlk3491c46d263f9425ee5ad17fb2d9baf1bm3.7.0/doc/html/a00124.png0000644000175000017500000001330611365042643013245 0ustar tlktlk‰PNG  IHDRÝ(» pbKGDÿÿÿ ½§“{IDATxœíÝyT“Wþøñw„ ƒŠQYD­ ¢U¤ø£‚{kݪ¶xŠ+6.™Ñº¶ŠU;b-Š£àR[Çq™v Џ`±u”9‚RÄŠ§¨(µŠAYe ßž/a ÔÞ×9ù#ynîý<7O>÷ɽO™Z­V#‚ Âs×¢¹A„? 1è ‚ Bƒ® ‚ 4ýÊ$$$Ù±¯iÓ¦5w ÐÜ!uеkW ÔÜaÔKdd$ ͆ðU{|ª+ñõõUâ&n º½ìš»ÿÄ­n7¥RÙ܇J½)•Êfï?qkúã³Ê'ÝrjqQ³P~~~Ìœ9³¹ÃhîîîŒ=º¹ÃjàééÙÜ!4˜R©Ä××·¹Ãžƒšò XÓA„&"]AAh"bÐA„&"]AAh"bÐA„&"]AAh"5~eH[¶l¡¸¸™L†B¡à½÷Þ£Gdddð¯ý‹U«VUynII ›7o¦GÕ^b½{÷nJJJX¶lY½ãÓÖ~]äççãëëKTT2™ŒaÆ¡T*ÑÓÓ«wLÚx{{ãììL·nÝ4¯¸÷îÝ#<<œ¹sç>—Ý]½z•ÈÈHòóó騱#ãÇÇÌÌì¹¶™——G`` J¥²ÑêÌÉÉ!88˜3fTÙVPPÀ‰'^™¯…½löíÛÇ“'O€²\kbb„ èÚµ+Ðð\÷ª{ú§Q>é~ùå—\»vÄÄD>|È‘#G°¶¶æÚµkdeeqðàA©ü_ÿúW|˜îÝ»cbb‚»»;ŽŽŽÏí»Ì6lú§¢ŠûqçÎöíÛ÷\ÚojEEÅœ;ÃÍ›IÍJ½8p€Í›7cllŒµµ5ÉÉÉÌ›7û÷ï×éù[·n%99Yçvsssù÷¿ÿ­óój«388Xº_1¶¼¼<:Ô¨í5¥ÔÔ¼ÔÜaÔÛÎ; %11‘„„xýõ×ñóótËuóð«DÛ~5d,h,òI`åÊ• >\º?qâDöìÙáC‡èÞ½;wïÞ•¶;wŽ%K–h<ß‚³gÏ2eÊé±ãÇceeE^^^ƒb«Ü¾.-Z„½½=~~~Èd2–.]JŸ>} dÒ¤I ŠM ÙMII)÷8qâ:gÎÜ /¯Ý»gccÓ¹¹CÓ™J¥ÂßߟíÛ·ckk €££#-[¶äرc¬Y³¦Ö:®^½Ú¤Ç’6;vä?ÿùtÿEŠ­>²³  ù•cÇ¢ˆˆ¸€«ëÛÍUý¹¸¸0kÖ,éþÑ£G™7o#FŒÐ)GT—‡_ÚöëEÈ¡ÏmM×ÄÄ„–-[ðøñc&Nœ€³³3©©©8;;&•Ÿ>}:þþþu;vŒéÓ§kûŒ³gÏj´ðßÿþ—~ýúa``À›o¾)}"¯,11‘   ¼¼¼¤ÀÜÜœ P(4ÊÿñÇZOjÛ^›ÊûQZZʲeË066ÆÌ̌͛7ššÊ¸qãøî»ïP(ܾ}»Æ~«\V©T²}ûv©´´4ìííÉÌ̬wÜ]¿þ/¾8Eÿþ_0}ú^Nž¼F^^a£ÔÝ\JJJ(..&77Wãñ3fh¼^÷ïßgÉ’%¼ûî»Ìž=› .àááAff&üúë¯Õ¶qáÂfΜÉèÑ£™2e G­¶Ü•+WP*•Œ?///öíÛ'ý–ú7puueìØ±Ì™3‡Ë—/™™ÉgŸ}ÆO?ý„££#ÑÑÑüýï×[pp0ÎÎÎR;jµšììlÜÜÜ`êÔ©899ÂÞ½{qrrbÊ”)\¼xQªãàÁƒ8991vìX–/_NZZš®]_£‚gÎÜÀÅå 66%2ò÷F«ÿE2cÆ lllð÷÷¯’#ÜÝÝ155¥eË–Œ9’ÄÄD ú<\SŽxúô)cÆŒÁ××—ž={ÒªU+æÎKII  =ŸÆÄÄ0lØ0 éÝ»·ô‰¼²ò6vìØA§N055åСC¬\¹SSS,,,4Žùšê­¼_•ó[hhhÇ‚šú®¡mÐ âÀøøø°|ùrÂÃÃqssÊÖDCCCØ¿?&&&ìß¿ŸÁƒKÏŸJ¥’;w’žžNïÞ½ùꫯHOO×h?11‘É“'³iÓ&²²²˜2e S§N­vªøÚµktêÔIZ/©hÊ”)±¬X±‚«W¯ÖØGµm¯MÅý(O.—“’’ÂÉ“'ñòòâøñãF`` !!!˜››×Øo•ËN:©  E• ]ÄÅ¥à킃Ãwòí·—IO/{Uª’z×û¢044äý÷ßç‹/¾`ýúõ“œœLÇŽéׯP¶ºjÕ*ÆŒCpp0+V¬`ÇŽܺu 777Ú¶m‹››ÖÖÖUêÏËËÃËË‹… rîÜ9Ö¯_O•¡ääd<==Y²d ?üð]ºt! €ììl222X»v-Ó¦MãìÙ³,X°€7òèÑ#T*111„‡‡ãåå…©©)ÑÑÑÕÆVZZÊ;wðõõåСC„……qãÆ Š‹‹‰ŽŽæÙ³gàââ‚··7 …‚S§N1mÚ4ij:**ŠvïÞÍéÓ§122âûï¿oÐëP\\Jhè–-ó¥_?w>þø;.\¸Mqq ¥¥jJK_ÝŸ¶uppàæÍ›9âÇäðáÃDDDðäɌٴiP5kË­*•а°0.]ºDll,7oÞäôéÓ\¼xQk>ÍÍÍeܸq(•J²²²Ø·o .äÊ•+UâW©T„††’™™IRR6lÀÕÕSSSRSSY±bëÖ­ÐZoåýªœß:wî\§±@[ß5T£M/GFFrï^ÙÔMNNùùùÄÆÆbee¥QN¡PТE  r¹\:[jß¾=C‡%((ggg˜4i’ÆÅJ\¹r…7ß|KKKär9YYYøûûóî»ïJg1kÖ¬a×®]Uâô÷÷çwÞÁÉÉ €U«V¡¯¯O~~>FFFesrrhÓ¦M#õPãS(lÙ²¹\ÎðáÃY²d ~~~ <˜üü|þùÏÒ©S' kì7CCC²EEE¸ººÃo¼¯¯/ .Ô9¶¤¤ NŸŽÆßÿ*¿ýö}}=Š‹Ë^ëWa ­ÌÍÍÑ£GÁÉ“'Ù¾};½zõbõêÕXZZAûöí¥ãÎÎÎŽñãÇó¿ÿýÅ‹#“Éhݺ5úúUß’r¹œÝ»wÓ«W/ l)F__ŸÜÜ\ ¤r.\ÀÞÞž¡C‡e¿ë{êÔ)ÂÃñ²²büøñ 6ŒÁƒÊ„ (,,ä“O>¡C‡¤¤¤Hu¶nÝºÚØ\]]Ñ××§S§NtïÞ]:YV«Õ|øá‡Èd2 €žžÓ§O—î;v €¢¢" ,Ù±nÝ:ébL]EE= 0ð:§NýBffr¹ •ª€ââWw ­è/ù PXXH›6mðóóC¥RUópiii9¢uëÖñå—_b``@=°µµ•ònMù4(( /^ À¨Q£˜;w.Ò1ZQii)«W¯F&“1fÌôõõqss“î—ÏÀi«÷«¯¾ÒØ/@#¿ÅÇÇKíi‹][ß5T£ º7nÔXÓõóóã£>’®´«‹ò)fgggŽ;Æ–-[4¶·lÙ’_~ù…Ï?ÿœ{÷îѾ}{JKËÞ\ñññôîÝ[*+“ɰ´´¬ÒFårr¹œÕ«WW¹¹9ÉÉɨÕjée(›Æ{ôè¶¶¶œ>}€ØØXüüüøùçŸ144äÓO?%66Vëö†èÙ³§t`ØØØHS–-Z´ S§N€ö~«\ÖÀÀ€>ø€ãÇcddÄÍ›75ÖÙµyúô—/§bañ)ÐÓ“IŸ.Ê\m ãܹ˜ºíüsÖªÕÿ«sYµZZ­ÆÎÎ;;; l)`çά]»???RRRHHHи"¸°°Pc¶§&r¹œ»wïâããCRRÆÆÆÕÎ̤¤¤ðÚk¯I÷e2@Ù2AÅm¯½ö©©©RÙ:ÔiË“ZÅv*244”—ËåÒ‰sÅrC† áúõë,^¼˜Ö­[cooϬY³hݺubxô(›ÔԎܾmJhè7ÈåzÒÉœJUû@»`Á·ujçyºu«-ýúe5J]IIIÒk]ÎÑÑ‘‹/2tèP cÇŽeíÚµÕÎZÕ–#úË_Kmù4>>ž;wîн{wi{~~>ï½÷^ûѪU+©þ–-[J'z]ë­˜ß*Ò».}§«ç¶¦kooOFFÙÙÙu~Ž““/^$&&†„„FŒ¡±=00µk×âîîN\\QQQÒ§Ó6mÚðôéSò•ÏüÊËUž–;yò$YYUþò鉊ëPå6oÞÌ… ÐÓÓÃÐÐCCCôôô000ÀÐÐPZÏ®m{CT>¡IMM¥}ûö€æAª­ß*—…²“ŸãÇãëëˤI“¤7‚P½ððpæÍ›§ñ˜¹¹9ûÛßHII‘fQlmm9zô¨ÆmùòåuªÿàÁƒÌž=›ï¿ÿž}ûöU{üUy¿åääHÛ*ãÙÙÙI®)©Õj-ZÄ?ü€‡‡EEE¬_¿¾IcxUdggóã?VYîR«Õlß¾§OŸ@AAA'е刚hË§ÆÆÆ¼õÖ[ÄÇÇkÜöîÝ[ÿë­éØÖ».}§«Fû¤ûìÙ3iž={†§§'666(Š:_„£P(xûí·™7o“'O¦E Ís‚ÄÄD¬­­yë­·ˆˆˆ’̘1c˜;w.›6mÂÔÔ”ˆˆnß¾]¥ÃÇŽ+-¶›™™ɬY³¤3þŠŒYºt)óçÏçܹsÒô^PP!!!„……Ñ»woéléçŸfêÔ©¼óÎ;Rµm¯IÅþªô”©áèèHNNû÷ïgÑ¢EUÊië·êŒ;–äädvíÚÅ‘#Gjµ\‡­6ÌŒ={–“˜˜^ãôrM\]ßbÒ¤7ëÜÞóäã3p¬SY[[[?~̹sç¤é[µZÍùóç±´´ÄÈȈ°wï^>|H·nÝ(,,dÁ‚Ìž=»Ö¿LKK£[·nÒ•Ñ·nݪö‚¼°eË\]]Q(ܺu‹‡"“ɰ··çÛo¿%99 222¸téŸþ¹NýÒXŽ9Bdd$»ví¢OŸ>Œ7Žüãu~þk¯cf–Âo¨ùôSϧ—k²ÿG Ý…›9ó§z=///ÌÌLÔj5¿ÿþ;+W®ÄÚÚš÷ߟ„„©œ——!!!„‡‡3pà@æÌ™Ãœ9sª­S×QN[>3f +W®$66–¾}û’——‡½½=ëÖ­ãÃ?¬×¾V¯¶Øué;]5Ú ;a„ÿ«T_ŸAƒPmY333–,YÂ×_-]hRÎÙÙ™Y³f±mÛ¶*Ïûàƒظq##FŒÀÀÀ¹\Ž¥¥%nnnœ>}š‰'Ò¯_?ú÷ïOnn.ýû÷×Xó9r$J¥R*ÅÖ­[kœÖÚ¸q#YYYØØØ`mmMQQñññ|óÍ7 2D×nª³ŠWØtèСÊUÖƒfÅŠlݺ•¸¸8ììì˜?>?Ö(§­ßvïÞ]¥m¹\Ž““çÏŸgÔ¨QõŠ¿sçv,Z4ŠE‹F—B``4Q$%ehL¾ Ú¶m‹»»;ÞÞÞ>|˜:ššJ«V­ððð K—.¸ºº²hÑ"úôéCBB666Rÿ¶k׎¯¿þš¥K—jLyAÙúëwß}Ç'Ÿ|‚\.—®.ݳgÆÅ Aƒ2d...ôìÙ“‚‚zö쉾¾>VVVLŸ>ùóçÓ§Oâââ9r$¬õªáб™˜˜4JŸ7Ž3gÎH'wïÞåã?®W]=ppè‡Ç$ÂÂâ8uꂃ¥ @…žžŒâbíðËfÁ‚,X°(Ë NNNlÛ¶­Ê‰ùG}„¶¶¶˜™™qíÚ5o{TÌÃÚrÄþýûkŒE[>íÕ«7ndðàÁ888pçΆг³sƒö¿¶z+î—¹¹y½b¯­ïB¦®´8Tþ'äùÃ¥¥¥dddHkFiiiDGGãàà@»vítª+;;›«W¯bff†­­-=âþýûX[[óäÉT*ééé :”¾}ûâëëËÀ5Úøí·ßxðà}ûö­²ÖU´´4bbbÐÓÓÃÎÎccãjË´iÓFZÓÒu{m*÷#”],AÛ¶m¥‹ ªSS¿UžÂ/çâ₹¹y•uõÚÔvü\¿þÀÀëœ<ù éé¹ðîݳ_˜Oº2™Lç?±W©TÄÅÅ‘››‹‰‰ =zô¨2ÓòäÉâãã111ÑX“ÊÌÌäÞ½{¼þúëÕ^¼———Gll,íÚµÃÒÒ’ÔÔT’““éß¿¿FYYY””” sæÌÁÝÝ]ºò8%%…ÄÄD:vìH—.]ªÝµZMNNŽtŒ×[}©T*bcc)**ÂÊÊJçõ2OOOÌÍÍ«ýø‚çÏßâäÉ_¸p!VZŸ,¿Æà?¾jø4Pù¯z5æŸØWÎ………\½z•‚‚ú÷ï¯ñ i•ó°®9¢"mù4))‰[·nѹsç*²¢¦zµ/ÕåКb×ÖwuQÓëÛ$ƒnSˆŽŽfÔ¨Q?~kkkNœ8ÁÖ­[¹wïžÆÅF‚viii\¾|™Y³fqýúõ*ŸºjS×㧦Çx™ÝæöÛo¿±bÅ <<<èÖ­—.]âèÑ£øúúV{UôËNÛ [Qu?ŽñªºÂ‹£¦×÷•y'ÚÙÙqøða6oÞLzz:VVV„„„ˆWG<`Ó¦MìØ±CçWzz->¼7Ç÷ÆËk*/ÆÒ¥KûçÖÞŸAùW”|}}ÉÉÉ¡sçÎx{{¿’®.Œ qvˆ³ó@RSs8s&º¹CþÄ^©w£“““ô+¡~HTTT“¶i` Ïøño4i›¯ªáÇk|uOÐdfÖæ¥þ Háå'þÚOAšˆtA¡‰ˆAWAšˆtA¡‰ˆAWAšˆtA¡‰ˆAWAšHßÓmê„§§'žžžÍ† …R©lîÄÏÏ??¿æCxNª;>« ºÃ‡—þhZþ¬Ä{àåеk׿¡Þ–-[&~ÌçWÝñYå·—AAx>Äš® ‚ 41è ‚ Bƒ® ‚ 4‘ÿÕò NŽ#ºTIEND®B`‚bm3.7.0/doc/html/a00189.png0000644000175000017500000000425011365042645013260 0ustar tlktlk‰PNG  IHDR(ßs bKGDÿÿÿ ½§“]IDATxœíœ[HT]Çÿ¦ÓTÚXæTfE ‘byÀd²tÁÒŠ # Cí¢þLDDþþþ´k×.1ŠKLL¤+VÐׯ_‰ˆÈ××—®\¹b4ghhˆÄb1)ŠIõò#ÏŸ?'ÔÙÙIDDƒƒƒ4kÖ,rww§¬¬,n^pp0ÅÅÅM9ÿTàÓƒÅö@£££ˆ‡H$ÂÂ… qöìY@__‚ƒƒ‘––†%K–@,#;;‰‰‰‹ÅprrB^^—çÂ… سg¯ÍWçýû÷ؾ};@.—£§§r¹Ož<ùiïžžžHNNFLL Ôj5N:…Û·oÃÖÖÕÕÕ¨««CFFƸ¿ð3gÎ`xx*•Š7÷¬Y³ààà€ÑÑQÞ9ß¾}3é÷õõ…½½=ž>} ¨¨¨€»»;ÂÃÃQ\\ÌÝššM:¯%±˜€jkk!ÐÝÝ •J…sçΡ  z½åååèïïGGGNž<‰¨¨(ˆÅbôôôàСC8~ü8—gÕªUðóóãµùê ¡¼¼ P(àèè…BuëÖMªÿ#GŽ`áÂ… DBBüýý555ðññ££ã¸@™L†çÏŸs>N­V ­V‹ÆÆF\¹rƒƒƒØ¹sç¸øwïÞ!11^^^&{²¶¶†T*åôèÑ#lÚ´ ¡¡¡())Á`@CC°qãÆqñ÷ïßÇÚµkqëÖ­ÿŸ˜¦ºd™¢¨¨ˆæÏŸOÃÃÃœïØ±cF]]]€{455‘ éõz""ª««£E‹™]§¹¹™lmm9ÿTacDFFÊËËã|§OŸ¦Þ˜ýû÷ÓÞ½{‰èû#ÌÖÖ–,X@ , {{{@W¯^åæŽŽÒƒhÛ¶mäææF—.]¢¾¾>Þü—/_&???""rww§’’%±XLUUU”‘‘AÞÞÞ¼ñÕÕÕAK—.¥£GRkkë¤ïÇðéÁb+‹‹ g¯^½]]]œmkk àû—rB¡666œmÉ:Ó¥¨¨*• çÏŸGll,º»»NNNhmmåkkkÃâÅ‹9;55::ýýý(//G||<ÚÚÚPYY dffâàÁƒxõê:ÞüAAAÐh4hjjBKK `ee…Í›7£¸¸Ïž=3ùøC"‘ ''sçÎ…L&3¹N‹ H§ÓÙ===ޘߩNoo/bbbpñâE$%%aýúõˆŽŽ£©© jµz\\gg'?~Œ­[·òæ–Éd‰DÐjµ …èííŇ022òÓÞ<==1oÞ<œ:u  …€ÐÐP<|øUUU h ƒÁ"‚ ììì~:²XL@---¸wï``` …b¡Z­æ6ˆ¦lKÕù‘}ûöaÍš5ˆ‰‰ddd ²²ׯ_ÇòåËqàÀÈår¼|ù’‹ikkCXXBCC0aþÙ³gC¯×C"‘@£Ñ %%wïÞ…««+Nœ8ŽŽÞX+++Èd2(•JlÞ¼™ó‡„„@­V£¹¹R©”7¾¢¢r¹þþþ "TVV"''g²·æçLõ™gŠ¢¢"Z·n­\¹’¤R)-^¼˜¶lÙBÃÃÃÜhŒ·oßíU4Ñ(!!ÁèUýG{¢:ÝùøøÐ† ¨¶¶vÂÞoÞ¼IvvvÔÜÜläÏÌÌ$;;;Òjµ422BIII$ ÉÃü½½iæÌ™I_¾|ábL½Æ}?ˆŠŠçïìì¤äädòðð˜°Çôôt@õõõF~___òõõåËÏÏ'©TJùùùÜžsºðéÁ"chhˆÊÊÊH­VO½C3ë ÒétœÝÓÓCÅÅÅôáËÕíïï§ŠŠ *--¥÷ïß[,ï_Ï—~Ǽ|z°úïE“KçŸð‹Ä®®.”––ò^_³f ïk4ãðéÁ"ß…ýΓg8cÌ™3çvóçñÇ ÈÑÑ¡¡¡w,ìç ³`b˜Ã,˜€fÁÄ0 & †Y01Ìc¢£k6ØøqLéŸ+ܹs‡ïã_ŠD"çãý.ŒÁ˜ lÄ0 & †Y01Ìâ?º‚x…TC$IEND®B`‚bm3.7.0/doc/html/a00121.html0000644000175000017500000000574411365042643013431 0ustar tlktlk BitMagic: Small sets functionality

Small sets functionality
[BitMagic C++ Library]

Collaboration diagram for Small sets functionality:

Data Structures

class  bm::miniset< A, N >
 Template class implements memory saving set functionality. More...
class  bm::bvmini< N >
 Mini bitvector used in bvector template to keep block type flags. More...

Detailed Description

Templates in this group are used to keep block types in BM library. Classes of this group can tune bvector template (MS parameter) for best performance or minimal memory usage.


Generated on Sun Apr 25 09:37:39 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00129.md50000644000175000017500000000004011365042631013137 0ustar tlktlk70d34836a233eb9b35067b368e3fcc0fbm3.7.0/doc/html/a00149.md50000644000175000017500000000004011365042635013145 0ustar tlktlkf0676944d265d7c3c5e81d17885ff3e3bm3.7.0/doc/html/a00190.map0000644000175000017500000000031011365042645013232 0ustar tlktlk bm3.7.0/doc/html/a00104_source.html0000644000175000017500000025604011365042630015003 0ustar tlktlk BitMagic: encoding.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00094.html0000644000175000017500000000440311365042633013430 0ustar tlktlk BitMagic: bmgamma.h File Reference

bmgamma.h File Reference

Go to the source code of this file.

Data Structures

class  bm::gamma_decoder< T, TBitIO >
 Elias Gamma decoder. More...

Namespaces

namespace  bm

Generated on Sun Apr 25 09:37:31 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00178.map0000644000175000017500000000030111365042644013237 0ustar tlktlk bm3.7.0/doc/html/a00142.map0000644000175000017500000000017011365042634013231 0ustar tlktlk bm3.7.0/doc/html/a00191.png0000644000175000017500000000463311365042645013256 0ustar tlktlk‰PNG  IHDR½(«|ûÀbKGDÿÿÿ ½§“ PIDATxœíœkHTÏÆuu»àÑJ«5PI» ITPQ¸«”‘‘THõ¦ ‘v¡+ ‚ìb‚D”Ð…ÀZ(SÛ7++Ë0Ò®”e¤¹–µY¦išÑ>ÿá¡ÕÝãænùÿ¹óóbfÎwæùÏ™9;»$ ÀðìoÁ¿F˜^àvÓ ÜU÷Šºº:”——÷‡Àåcƌ֕ìFnn.ˆCâHJJênqö¸Ów!^êþë$''Û¬szÛ!L/p;„én‡0½Àí¦¸Âô·ÃiÓ¿zõ §Nr”¾ÓÔÔ„ýû÷ÿqÜׯ_‘‘‘á”®7oÞ ''Ç©>þ‹âÞ½{ý-£O8múªª*=zÔZúú+Ç1½ Å‹/ärQQš››ûQ‘ó „z£¿rt‰é- Ö¯_I’0räHìÝ»ðéÓ'ÄÄÄàСC B`` Nœ8Í›7#00z½^îçÀXµj•ݲ½q>|ø€øøx@bb"Ìf3QZZª×7n`òäÉP«Õ˜8q" å¶«W¯"22>>>˜:u*îß¿ß#ž$6mÚ„´´4‡>ÑÞ¾};¡V«1oÞ<Ô××ÛÍÁž6³ÙŒùóçãôéÓð÷÷dzgÏðäÉÌž=ƒ ÂøñãqæÌ™^µÀÙ³g•JFƒÈmz½¡¡¡>^®ïììdFFÛÚÚXRRˆˆ¦¤¤0 À!ÓdAAƒ‚‚øôéS’dkk+›ššlæ ¤Íd2ß¾}K’Ôëõœ:uªÕ¹ëׯgZZš¢žŽŽVTTÈå®kS]]Í-[¶pÅŠVçGEE1++K1Î`0P’$+“¦§§311±GŽJº»çè(öLï’éMXX¼½½åò¤I“ÐÐÐ —‡ ððð€Z­†J¥’ˮǙ¸úúzŒ?Þªn„ 0™L¨­­µjóööÆÖ­[1dÈÀ³gÏðîÝ;€Á`p(—E‹aÙ²e˜5kBBBššŠ¦¦&›ç*iOOOjkkQUU…ÐÐPùÐëõøòå‹¢µZŠŠ ÌŸ?aaaHHH€Åb¼}û‘‘‘VçGDDôcÇŽ…\ž4iêêêzŒß›îßst»»,ÿ„ÆÆF«²ÙlÆðáÃ]ѵKÆq$N’$<}úÔªîÓ§OðóóƒÌf³UÛ…  ÓéüZHŸ?¹¹¹Ø°a,XEM$‘™™‰ÌÌLTVV";;K—.Eeees•´Ö7I’¢¢"¹®½½½×LAAÒÓÓ‘——‡Y³fÁËËKÎaذa=òﺦJq¿Ÿ×ÅÇáëëk3G{ºÿø©„Kîôµµµ¸té€_ï¾;†… þq?0vË}Ç‘¸ØØXãõë×~-ŽóòòƒØØX\¼xQþ×——cåÊ•ðòòðëI¦R©°zõjLœ8Û¶mëUÓ¾}û0wî\¨T*LŸ>«V­’ŸÝQÒÖ˜˜”––âùóç€oß¾aÚ´iÈÏÏWÔS__ˆˆDGGÃËË wïÞEKK @§ÓA¯×ËOÇÇãÖ­[½Æuµw-º[[[‘““ãRÝ}¢û|§/sú™3grܸqÔjµ=z4ãââØÙÙ)Ï黨®®¶š{?xðÀjNŸššÊ3fØ,+Ó}N?eÊΞ=›÷ïßWŒû}NO’;w¿?ccc9bĦ¤¤Xi  N§£$I<|ø0IÊ Ù.ªªª8hÐ –••)^7“ÉÄàà`FEEQ§ÓÑÏÏ9996sPÒf2™èååeÕwff&%I¢N§ã˜1c¸|ùrþüùSQO]]GŽI­V˘˜ÆÅÅ1,,Œ‹/¦Åbarr2ýýý9wî\3..ŽYYYŠqƒ!!!ŒŒŒdtt45 çÌ™Ãööv›9ÚÓm+GGøk Ù.ÚÛÛyýúu«EÍßÀÖ8?þdcc£\6›Í4üüùóë«©©¡Ñhä‹/z´½|ù’F£‘uuu.Èä×âñÖ­[¼rå ?|ø`Õf+%mÝ©¯¯§Ñh”ÊŽÐÜÜÌââb>zôˆä¯„7nÈí?fqq1›››Š3 œ6m¿ÿΛ7o²¼¼œ‹E1Ǿ趇=Ó{Ö/”Ïœ9ƒäädñÍ)'ihhÀµk×ì¶GEEaòäÉZÏ¥K—°k×.›Ÿiü º¾9•››kUï’…¬ 'ÞÞÞ°ÛÞõæç_Ñz$IBxx¸Ëûuaú¿D@@,XÐß2dúCV«…V«ý§c:€Ø{#ü Âô·C˜^àvÓ ÜazÛ!L/p;„én‡Ý÷ô®ÜÕ&ôIII=êzlC?Õ-HØú©î¦:bN/p;„én‡0½ÀíøŽÌÍJ'‡DIEND®B`‚bm3.7.0/doc/html/functions_vars.html0000644000175000017500000003160611365042644015665 0ustar tlktlk BitMagic: Data Fields - Variables
 

- _ -

- b -

- c -

- d -

- e -

- g -

- i -

- l -

- m -

- n -

- p -

- r -

- s -

- t -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00149.png0000644000175000017500000001162211365042635013254 0ustar tlktlk‰PNG  IHDRkÃ…ðïbKGDÿÿÿ ½§“GIDATxœí{PWÿ‡?!È-€6Zâ(^€¶ ¶§ã¥Hp°õRE§µ7ë;Ž­­P±Óé€U«Ó"Vß׊—Úª_E^£¡¾" Š‚Ö"PEËõ­(¤\ƒ@¾¿?÷g DâIÏ3“?NÎîÙÏîg7'›="""pXàŠµpú—Å\CHŒ]¡¢¢—/_¶D–¿áááF¯c´¬¬¬,,Z´Èè qô1åºÎhY8{ö¬©«þ­IOOdž LZ—Ÿ³‚Ëb.‹!¸,†à²‚Ëb‹Ëº}û6RSS-½™~A£ÑààÁƒVÛ¾ÅeUTT 99Ù,mmÚ´ ÕÕÕfiËZ[[±wï^«mŸ©nð—_~Z­¶v «Ñ/²ˆÛ¶mÃÌ™3&t%MMMˆŠŠ‚R©Äüùó1wî\œýôS¤¥¥aÖ¬Y¸uëÒÓÓ±hÑ"cÞ¼yHLLÔÛΙ3gðæ›obÆŒˆ…N§ìÙ³sçÎÅôéÓñÉ'Ÿ ¶¶Öàþœ8q .ÄŒ3°qãF“†ŽL¡_dC,ãØ±cøòË/qèÐ!dff¢££ùùùhiiR©ÄâÅ‹www¨T*„‡‡ ÝNTTÜÜÜ…1cÆ@«Õ¢  YYYظq#<<<°qãF|ðÁHMMÅš5k°{÷n444 ££×®]ÃÕ«W±ÿ~ìÛ·ÙÙÙÈËËCNNNž<‰íÛ·ãøñãprrÂzÝN‡¢¢",´!‰àâ≤+v[["""0hÐ hµZlß¾>>>OOOH$¨Õj8::¢££ï½÷$ <==1jÔ(¨Õj¡-­V '''¬^½÷gÉ’%H$P(1bD¿uÍý"K¡PFމ¼¼<¡<`À€H$‚½½=Äb±P6„H$ Aƒööö(..ÆîÝ»qûömÈd²nÝÓƒen{Ò¤IÈËËÃòåËáââ‚ &à­·Þ‚‹‹KÛ´³³ƒ»»{·vúƒ~éõÊ puu}ìv>PYYYسgÞ~ûm8p»ví‚T*}dD„?üÉÉÉX·nÚÛÛ±fÍšÇÎf úEÖüK—.èºüMNNÆÄ‰ͺÚÚZxyyaܸq°³³Ã7ÐÚÚúÈõ:„ÈÈHˆÅb<ûì³ Ž{÷„ú¬¬,ܼyÓ¬YM¥_ºÁ1cÆ`ÇŽHLLDUU|||0kÖ,455ÕŽ‡‡¶nÝŠ?þzuS¦LÁþýû{{{áÜ´cÇDEEõÚfhh(RRR°dɸ»»£¸¸Ë–-êããã1sæLŒ9Ò¸¶"coEKHHÀ¢E‹Œþò±½½7nÜ€‹‹‹p`, (++Ã3Ï<Óc7ÚÚÚŠÂÂBxxx`Ô¨Q¨©©Auu5žþyƒíjµZ¢½½ÞÞÞzç$sóàËG.÷¯ôË888àÅ_|¬6ÜÝÝ1a„^뜜 ”ŒÁƒ?²]{{{Œ7î±²õL`üÝᲂËb.‹!¸,†à²‚Ëb›”ÕÖÖiíÁædutèpøp¡µcX“G0¦M›fÎfÃÑñ9¸»‡bß¾O@dø{)Ö0ZÖË/¿,|!ø$²uk~ÿ½Ÿ¾ /¼0èÑ+0„ѹO2--mðó‹A{{BCý°oßkG2'¶õ›âÔÔhµ]éé…hnÖX9‘y±)YGŽäßët:ü÷¿×¬œÈ¼ØŒ¬?ÿT#;»L¸½ ”Ê+VLd~lFVJŠþí`:áçŸËPSÓl¥DæÇfd)•9ݾ}µ³!%%ßJ‰ÌMȪªªG~~t:}Y:áÈÛé mBVrr>Äâî÷ïét„kתpëVR™›uøp:;u=ÖI$"$%åõXÇÌË*)ù%% ·öZ-A©ÌéßP‚yYIIù°·X‚ðûïµ(,´ÞïºÌó²þõ¯4aÔÂ*Un?¤±,ývß %¸{·3føC£ÑÂÕµëÇ ·o×#/ïfÏ~AX®¾^Žö¿ã²©\P©ò°|ù¿qçÎ?­ÅÜØÖ@®­Ãe1—Å\CpY Áe1—Å\CpY Áe1—Å\CpY Áe1—Å\CpY Áe1—Å\CpY Áe1—Å\CpY Áe1—Å\CpY Áe1—Å\K‘UWWZºt)µµµQYY¹¹¹QFF†QÇ&Œ Z\–‡‡µ·· ïEGGSXX˜°Ó---DDTRRB‰„´Z-åååÑ!Cˆˆ())‰ ]¿~ˆºÕ××Qbb"?^o»+V¬ ÈÈHª¬¬$tûöm""ºyó¦ K£ÑPnn®°ÎA¥¥¥}’USS#¼7yòdR©T}:&0E–ÅŸ78zôhØÛÛ e???¤§§ eggg€H$‚T*…D"ʘ5k2220yòd¸»»cúôéˆŽŽ†»»;ÊËËQTT„#FËß¿¯½öÀÎÎ …¢[.©TŠÜÜ\|þùç(++ÃÀûÜ•‰ÅbÈår¡üpVKbñsÖÃóÔ]ç‘ÕaóæÍ¨««ƒR©„F£Á¼yó2™ (//×{íܹ@ï2)) ÑÑш‰‰AII rrràäädÂö—U^^ŽŸ~ú @×eïwß}'üÕ÷•7â•W^D"ÁK/½„wÞywîÜ„„„àÂ… (,ìšà¬µµP©TÛ¬ªªÂ˜1c±XŒK—.¡©©©Çe“’’pýúu£2[‹Ëš8q"V®\‰   øúúÂËË K—.5ªwß}•••7nBBB°`Á¬_¿àããƒõë×câĉ ¯¯/üüü°páBƒm¾þúë(,,DPP¦OŸŽõë×cÔ¨QˆŠŠê¶ldd$’’’ŒÊlŒ:+’q¸ÿ>eddèÐE£ÑÐùóç)--îÞ½Û­¾ªªŠN:%\„ôDgg'Ý»wO(766ÒéÓ§éêÕ«DDTQQAçÎ39£1àI»äôŽ)²þV#¬Ãe1—Å\CpY Áe1—Å\Cؤ¬£GmgžÇ‡1ù+SîÕîZZìQT4ÿùÏ£oŒa £ÿ³†þDßç^Q!ƒF#As³ƒµ£$<<Ç7j›š?K§#¼øâÔÖ6ãÿ˜Š/¿ ³v$sb[óg]¾ü;jk»fü>zôJ¯3¬²ŠMÉ:v,W˜¬³¾¾—.ýÏʉ̋ÍÈÒj;qüx¾0Y§½½ÇŽÙÆüİY™™ÅhiiÊZm'’“óÑÞÞaÅTæÅfd=z‰þîܿ߆ôôB+%2?6!«µµ©©ݦ·‹Å61?ñlBVZÚõ'–îèèDZÚ ½î‘elBÖÑ£¹½Þ¨Õv"5µ ŸYæe54´âܹ¢^?S‰D"9’ÓÏ©,ó²~úéªÁzN‡ììRüù§ºŸYæeÅǧ?r¤¢³“’òk?%²L˺{·u}ZV¥bÿ²M ä]R–/ÿ7îÜù§µ£˜Ûȵu¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚Ëb.‹!¸,†à²‚ËbˆnÏÌÊÊ·ß~k,f¡¶Ö €Çû<ľrøðánïu“UQQ¥RùD?SÐry+äòVkÇ0¥RÙk]¯OòìÉ,Çò$$$`Ñ¢E=ÖñsCpY Áe1—Å\C0/«¹¹±±±F¯WYY‰ÚÚZ $²ÌËjllÄÚµkZ§®®'NÄñãÇ-ÊB0/ËÞÿýnó'³€YdÅÄÄ@.—C*•bÚ´i¨ªªê:oooH$xzzbÓ¦MºþºCBB°eË( ÈårìÝ»«V­‚\.‡§§'.\ÀG}„ˆˆÈd2<ýôÓØ²eKY 0eÊ 0¾¾¾HHHЫ߾};ˆ“&M2¸OgΜÁرcáàà€ñãÇãÊ•+ÌbLN“øë”ÆÎ–šššJ …‚JKK©©©‰æÌ™CË–-#"¢¦¦&’J¥¤R©H£ÑPff&ÙÙÙQMM UWW“­^½št:íØ±ƒPll,ét:Š‹‹#ooo""JII!‰DB‘‘‘¤V«)++‹ÜÜÜèĉTYYIR©”ˆˆZZZÈÓÓ“âããI£ÑPzz:Éd2ÊÎÎ&"¢‚‚9r$ÕÖÖRPP}ÿý÷=îSee%¹ºº’J¥¢ÖÖVÚ°ayyy‘N§3˜ÅP]_1pü»O}k¬¬¤¤$R(ÂüÀ---T__OD]s ?<7ñƒ[ZZJÕÕÕ€ZZZˆˆ¨¤¤„$ iµZ""ÊËË£!C†Q—,™LFmmmB[ÑÑÑ´páB=Y‰‰‰4~üx½|+V¬ ÈÈHjmm%JKK#"2(ë›o¾¡Ù³g åöövŠ%µZm0‹¡º¾bHÖcwƒ³fÍÂüùó1yòdxyy!""õõõ©TŠÜÜ\„††bôèÑ ƒN§ÿ Gggg]G•J¥H$BùaF‡ÿŸ ÆÏÏzË”——£¨¨#FŒ^‰‰‰hhhÀ†  P(àè般¬,466¢¬¬ ÝŸŸ[^^___¡looÏ>û NNNÌÒ—œ¦òزˆ›7oF]]”J%4 æÍ› kNúèèhÄÄÄ ¤¤999ÂË_/jkkáêêª÷žL&C`` ÊËËõ^;wî„X,ƽ{÷‰ÈÈH”••!11[·ní¶-WWW444è½wìØ1466>2K_ršŒÿ†=²aÚ2eŠP>uê”Ð}mÛ¶‚‚‚„º‹/’H$ÒëPZZJÎÎÎB9??_¯@IIIDDÔÜÜL~~~§× –””““ýöÛoDD¤V«é¹çž£„„„n¹ÿÚ ªT**(( "¢ŒŒ ’Ëå´ð?ÿü39::Rss³Á,†êúŠEÏY•••4|øpò÷÷§àà`rss£Ý»wQ×\õƒ¦©S§RHH½úê«4zôhš3gŽÑ²¼¼¼hìØ±HžžžD÷ïßדED´yóf’ÉdLC‡¥ððpêììì–û¯²¼¼¼hýúõB9""‚žzê) &™LFñññÌb¨®¯XTQ×…Äùóç)--Møk|@cc#>}š®^½JD]Ï;gTû)))@mmm”™™I—/_&N×ëòUUUtêÔ)á¢ÇTJJJèÔ©STQQѧ,Ææì C²LžFða¤R){¬“Éd ÊÆ ðaÃLÚŽƒƒ¦NúÈ冊¡C‡š´‡ñññÑYúšÓX˜ÁÉdðöö¶v †³X<§ÿ†œ~À¢Ÿ³8ý—Å\CpY Áe1—Å\Cô:‚aèžkŽå0é^wÖ…a‹ØÜüY6 Ÿ?‹%¸,†à²BÀðܱœ'…Œÿ¨U}¢‹áêIEND®B`‚bm3.7.0/doc/html/a00241.md50000644000175000017500000000004011365042650013133 0ustar tlktlkfe9fbb8f19da2684d4ef29bbb4820637bm3.7.0/doc/html/a00103_source.html0000644000175000017500000014452011365042630015001 0ustar tlktlk BitMagic: bmvmin.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x6f.html0000644000175000017500000002444411365042644016512 0ustar tlktlk BitMagic: Data Fields - Functions
 

- o -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00198.md50000644000175000017500000000004011365042645013152 0ustar tlktlk395650628ca2fc2f7da55c708a8e130fbm3.7.0/doc/html/a00239.png0000644000175000017500000004102411365042650013250 0ustar tlktlk‰PNG  IHDR];KÕbKGDÿÿÿ ½§“ IDATxœíÝy\UÕþ?þ×s8¨Œ(â@Ѝ8Ï8…åZ8dƒ¦·®s–?,5ó›fê½¥vK?H!ŠJ©7‡‡r"5•Ðd™á¬ßľ`ïÃÑ#8¼ž‡{\ïõ^˳a½×V !ˆˆˆˆˆˆˆˆˆˆjȬ® """"""""¢Ç ‰ˆˆˆˆˆˆˆˆÈ(T$"""""""""£¨ï÷ÀSÆADôÐ5oÞ½zõªë0ˆˆˆˆˆˆˆ{ªû}Q‹J¥2u,DD•¿¿?ë: """"""¢ÇÞ}ß©ð÷÷7U,DDÍĉë:""""""¢'çT$"""""""""£pP‘ˆˆˆˆˆˆˆˆˆŒÂAE"""""""""2 ‰ˆˆˆˆˆˆˆˆÈ(T$"""""""""£pP‘ˆˆˆˆˆˆˆˆˆŒR+ƒŠ7oÞÄöíÛŸ˜rêZDD>þøcÄÅÅé­ÏÉÉÁÊ•+«üûQ‘™™‰O?ý´®Ã¸/CßÚ»w/Ξ=[×ax´b!"""""""Ó«•AŨ¨(lÞ¼ù‰)§¢7ß|·nݪÕ2°dÉ|õÕWzë³²²°téÒ*ÿ~TdeeéÅü°r÷0Î[}ËX!!!8}út]‡àÑŠ…ˆˆˆˆˆˆˆL?? ƒ"++«ÖÊ»}û6N:… `çεV®)¸ººâ?þ–Vîj»Mˆˆˆˆˆˆˆˆž6µ6¨¨Óé0kÖ,ØØØÀÉÉ Ÿ|ò ==>>>X»v-š4iGGG|ýõ×X°`áììŒàà`é<«W¯Æ”)Sd—åÊ™1c¶nÝ*í—““ƒîÝ»#66påÊôë×–––hÓ¦ ‚‚‚¤}> XXX k×®8þ<`„ HIIÁ„ øùçŸáéé ­V‹víÚaïÞ½€”” :;v쀮]»Vmž ó„>}úàÝwßELLŒ‹!rq)ÕÏØØåöINNÆÈ‘#TŸ;¹6¨.w;wî„››Ôj5œ±zõjÙó>h›”“ë[dã€Å‹ÃÑÑZ­ƒF||¼´M©ßêëÁÁÁpuuE½zõ0jÔ(½Ôýû÷£U«V¨_¿>^{í5¼ûî»øñÇcˆˆÀ;#ٳgÃÆÆ7ÆÚµksR“X”ꨔ¹~il»ÑC îX£}÷ïß/T*•˜7ožÈÍÍÂÖÖV„„„ˆÄÄDaff&>øà¡ÓéÄçŸ.ˆ•+W N'>ýôSáææ&kïÞ½býúõÕ.+•³qãFÑ£Gé¸;vˆÎ; !„¸wïžpvv7nâÈ‘#ÂÆÆFœ:uJÄÅÅ kkk±gÏ‘——'>þøcÑ¢E ¡ÓéDff¦pvvÇŽEEE"))IX[[‹mÛ¶‰‚‚&êׯ/¢¢¢D\\œ¨W¯ž=z´8}ú´(,,ÔËÑŸþ)æÏŸ/Ú¶m«˜Ë:ˆÍ›7 !„ðõõóæÍ“¶ÅÅÅ ­V[å߆⒫_e¡¡¡¢[·nbûöí¢   Úø”ÚçÖ­[¢AƒBQ%w†Ú bîÒÒÒ„V«{öìâøñãÂÌÌL¤¤¤˜´M*Rê[ÙÙÙ²ñ‘ŸŸ/þßÿûÂÜÜ\|óÍ7бîß¿_¨Õj1gΑ››+Nž<)lmmÅ?ü Ô%cQª£Rn”ú¥1íV‘¿¿¿ð÷÷¯Ñ¾DDDDDDD¤¬ÖíííEQQ‘´. @Œ=Z$&& âÞ½{B!¢££…Z­ÅÅÅB!.^¼(5jôÀ夤¤F#þúë/!„Ç—h‚ƒƒE×®]õÎ5kÖ,1gÎñÙgŸ‰‘#GJ닊ŠÄÊ•+Enn®B)„bóæÍbàÀzçy饗IJeËD\\œ ¤m:N8p@<ÿüó¢]»vbÍš5"==]¶~—.]"##C!Ä—_~)\\\Dii©B~PQ).Cõ«ì—_~“'OM›6‹-·oß–·²ŠƒŠBèçN© *ç®  @\¸pAÚ¯¼®7nܨr^cÛDŽRßRŠ',,L4iÒDüþûïBˆ²ÄÌÌLƒu6dáÂ…â•W^Ñ[×±cG±nÝ:ññÇ‹1cÆHëu:pvvß|ób¬û÷ï666zƒtb„ ÷‹R•r£Ô/i·Š8¨HDDDDDDd:êÚº#²U«VÐh4Òr‡päÈi¹Aƒ•J­V µZ--›¢GGGx{{#44“'OFDD¾ýö[@ll,¢¢¢àêê*—ŸŸ#F ¤¤mÚ´‘Ök4¼÷Þ{Õ–¯·/´mÛVzK³™™š4i8yò$¦OŸwwwÌ™3ÞÞÞë!zôè ìqä„„?~ƒ–=N)®òGRkR?èÕ«zõê…´´4|ùå—ðòò‚§§'vïÞ­»!JmèçN«ÕâÂ… X´hnÞ¼‰† B§ÓU{^cÚĹ¾¥ŸŸŽ=о}ûÂÎξ¾¾€Á:+IHH€‡‡‡Þ:wwwe¹¬Xg•J…–-[0œ»–-[ÂÂÂB¯ŽG} Xäêh(7rý2##èv#"""""""Ó«µ9ÓÒÒô–SRRаaÃZ-Çßß»ví®]»0bÄi½  €ØØX½Ÿ/¾øÖÖÖ¸{÷®Þ9wïÞ]í‹@lllª”Ÿžž[[[ú¤Z­©©©ÈÈÈ@II‰b½„عs'–/_Žððp„‡‡ã§Ÿ~‚———ÞuÕQŠË˜úUTZZ !Ôj5¬¬¬÷­ ¥6ôs†€€,^¼ÑÑÑ8wîêׯ/{Þš¶‰!r}K)!Ö¬Yƒôôt„„„   cÇŽ­Q•ØÛÛ#%%¥Úø¬­­‘žž®·-33€áÜU®cjj*¬­­ï;¥:*åÆP¿4öˆGQmÏ{IDDDDDDdJµ6¨‹ððpe/IÙ²eKîȪìÂ… 8tèì²R9£GÆ¥K—°aüþúëÒ1>>>ˆˆˆÀõë×yyyèÖ­öìÙ___ìÛ·O4ùõ×_1iÒ$˜››W‰Í××?ýôbbb”½˜$44>>>UöíÕ«"##±bÅ „††ÂÍÍ K–,ABBBµõ>qâ’““1}út´k×Nú™2e BCCQTT$›3¥¸Œ©PöÒ“ & OŸ>Bàäɓرc‡´ÝPûÈQjƒÊâããáîîŽÀÜÜgΜAvv¶Ñu7–\ßRŠgÕªUðòò‚Z­FÏž=1eÊܹs§FuVÊ¥··7‚ƒƒ‘˜˜¸|ù2Nœ8!7,, ©©©€3gÎàÚµkP©Ts/½ÈæÞ½{غu«Á\ŠE®ŽJ¹1¶_>nbbbàïïýë_ÈÈÈ@›6m°nÝ:ddd ''¯½ö>ûì3äææâ»ï¾Ãûï¿ÔÔTdeeaË–-033CRRBCCñÑGIƒ‘DDDDDDDµæ~Ÿ›†‘s*öîÝ[´nÝZ 8P4nÜX >\Is*–»qã†Þ¼{‘‘‘zs*Ξ=[ôêÕ«Úe¥rÊ?^4kÖLš‡°Üš5k„ðöö...bܸqÒ>³gÏÂÛÛ[ØØØˆ7JÇuéÒEôë×Oœ?^!ć~(ìì섯¯¯xæ™gÄÌ™3…es×™››ËæèÎ;âÃ?ÕnŸ6mšxá…ª¬¿{÷®Ðjµ",,LvNE¥¸ Õ¯¢1pà@"ÍyY™RûTžS±rîäÚ rînß¾-œœœÄÀ…>|¸hÕª•”SµIEJ}K)ž¸¸8ѼysѱcGáíí-lmmÅÖ­[¥óêwr¹ÔétbâĉÂÎÎNxyy‰æÍ›‹áÇ‹uëÖ !„xýõ×…£££ðññ}úôžžžâûï¿WŒuÿþý¢E‹ÂÃÃC 0@8;;‹Aƒ‰üü|ÅÜŠE©]•r#×/i·Š¥9k{ÞK"""""""SS !Äý FªT*Âßß¿ÆÇàÌ™3°µµE×®]ï§Ø‡ZNBB®^½ —*sÄݸq·nÝBûöíѬY3i}jj*"##Ñ£GØÛÛ(»£-::®®®Uæó3¤´´ô¡Ý¥—\ýL›N§Cff&žyæÕçN© *ÊÎÎÆÙ³gáää„N:!..1114hÉÛ¤"¹¾¥Oaa!Ξ=‹‚‚xzzÂÉÉIïœ5­su®\¹‚äädôìÙ666Êòš––†ââbddd oß¾hß¾=Ñ»woÙXsrr°téRœ>}¿üò ,--Ñ£G?j\],†êh(75é—55qâDes“ÖµiÓ¦ÁÁÁŸ|ò‰´®ÿþ˜1c&Mš„/¿ü»ví’æ½¼té®]»†¨¨(|ðÁˆŒŒ”Ž Æúõëqúô麨 =¥juP‘èQ•˜˜¨÷â Ê:vìOOÏZŒèþEFFâ¹çžÃ®]»àîîŽÐÐP¬^½7oÞÔ{ÑLeáááXºt)Ο?¯·þIÉÍ£4¨8oÞ<éñòrX´h¬¬¬0}út„††¢oß¾077‡Ο?¨¨(Ìœ9SzÑlذááá5šf€ˆˆˆˆˆˆÈTjííÏD2FÙír/‚yuéÒÛ¶mÃ'Ÿ|‚ŒŒ ¸¹¹áÀŠŠ@ÙKUÜÜܪ¬’ró¨ðññÁÔ©S±bÅ 8::ÊÎ{ @vÞË_|Q˜œ2eJ]U…ˆˆˆˆˆˆžR¼S‘ˆž ÷s§bq^)’/åBkcG&ç7ÞÀþýûáéé‰ÜÜ\äåå! ½{÷F÷îÝÑ®];XXX@£Ñ ::˜6mÞyçXYY¡aƸyó&Ú´iƒƒÂÒÒÒ¤ñ)áŠDD+È*Ard./æàιdÜ,€Ð ü°…ISSS±`ÁÌž=[oÞËfÍš¡Y³f¸qã†ì¼—÷=ï%‘©pP‘ˆžZ¹)ÅH쇤‹÷6Ùq…PP©UÐÿï&îúÊŽ+>>^oÞË­[·¢¤¤ݺuPö(º´ù`cxx8À”¶?)ó^ÑッŠDôÔ¨Wd‡èýéH<wÎåà^rT*@e®‚®¤lQÅú³B˜zP‘ó^ÑãŽs*Ñïæ8ôÑï°(¶˜©ÿ7ˆX“~ê„z ù ïæÍ›8yò$¦NZ£ý÷îÝ gggôìÙóáFDDDô€øW2=ñÜF4ħ_‡ÂãŽê>cÔ±*3àüçw`amM3XÔ7‡¦¾94VfÐZ«Ñ°u½§~ÀqüøñuÑ}›5kú÷ïÿÐÎ…Í›7×xP1$$Ý»w*yý zt|ÿý÷uÂ[¿~=Nž|³gÏÆ7СClݺÝ»wGJJ &OžŒ‰'bÖ¬Y8}ú4ÜÝÝk%rxý ª[AAA˜8qb]‡a2ÞÞÞX¼xq]‡AôÄ177¯vý *Nœ8ñ‰ú"¢'[Å?Z,íÔèö–3<§4BTX.mOF~zqÙ¸b…ÁE+gù; ëê?X+j;ê´eÜ#×=ëmûV–(Ê)Eñ=Šþ¾[2/¥E¹¥põ²ST<8ë& +³²G¸ëÿ=8Ù lp²ëtgØ·´”=>7¹€(;®õ%"¢ªÎŸ? )) /^„ŸŸZ·nÖ­[cêÔ© ˆ#°yófÌ;ÞÞÞÈÍÍÅСC€£GâÔ©S=z4\]]‘““ƒmÛ¶áÌ™3hÔ¨&Mš„+Và‹/¾@||<ÆŒƒ;v`èСX»v-^zé%ܺu EEEˆˆˆ@ƒ pàÀj_þEDDDTS÷=¨ø$̹@DO—æÍ›WY§®g†¯8Á}œ#þ<˜‰È¯“u»*• B4p4훟åê%ÿhuMt{« Ú*BѽRæ”þý·Nº[ÞÕuôÿ»…¤ßîIËï–ÔÔ7Ç %UsJDDúììì°råJh4ôïßï¼ó‚‚‚кukŒ3cƌ̙3_ý5 <<ÎÎÎxûí·Ï=÷¦Nª÷h_aa!¬­­„ââbÀwß}///é±î… B­V#??ŸŸ7¢I“&µ™"""zÝ÷ "ç>!¢'‰™Z…Ö~ Ñúù†¸}2 ‘_%!åJ.,ó—°4òl Á}?hY Ü-Aqî߃’Ï-Y”Wöou=Þ½HDdH«V­ôæ!êСŽ9‚úõëÃÃÃCoßòÇ‘cccWWWi[~~>FŒ???=z}ûö…|}};;;ÄÆÆ¢M›6Ò1ï½÷ ##fffP$"""“x¼ÿZ&"25Ð|€-š°Eò¥{e+žb6MµŠW‘aiiizË)))hذ!ìíí‘’’Rí¾6660`<(mËÏÏ—î¤_³f Ö¬Yƒ‹/býúõ;v,.^¼kkë*çܽ{7¼½½ÔÞ<’DDDôäS~ÃÑS¬‘§ÕßwúÝ¿ØØX„‡‡rrr°eËŒ1ÞÞÞFbb"àòåË8qâÀÇǸ~ý: //ݺuÞ={°jÕ*xyyA­V£gÏž˜2e îܹðõõž}û¤Å_ý“&M’`ˆˆˆè~qP‘ˆˆjÍÍ›7±}ûö'¦œº?þqqqzësrr°råÊ*ÿ~TdffâÓO?­ë0îË£Ö·”â1EÛÿõ×_غuë£ÜÞ½{qöìY“œëqÓ»woÌ›7ƒ B›6mТE LŸ>/¾ø"|}}áîîŽÁƒcäÈ‘ðññ´nÝË—/GïÞ½áããƒ6mÚ C‡˜0a^}õUÄÅÅ¡S§NðññÁøñã±|ùrÀàÁƒáïïøøø`È!X½z5¬¬¬ê2Œ×Óâõ£ö=-}ëq’ w7øã^N]»|ù2¾ùæ›*wËçåå!((¨Ê¿éÉÀAE""ª5QQQؼyóSNEo¾ù&nݺU«e`É’%øê«¯ôÖgeeaéÒ¥Uþý¨ÈÊÊÒ‹ùaåîaœ·.ú–¥xLÑö·nÝÂúõëèåBBBpúôi“œëqâçç‡3gÎàòåËXºt)~øáüøãÐh4P©TøöÛoqâÄ àÊ•+øñÇ1gÎÀ¼yópíÚ5,\¸‡Â÷ß3334mÚÑÑÑØ´iÞ{ï=DGGcÚ´iR™ÿú׿púôi,\¸¿ÿþ»ô²—¦M›¢¤¤¤Nòð xý0-^?”= ×nß¾}ûö=1åT´zõjé.øÚòÕW_aÛ¶møñÇõÖçææJêÿM¦WíÎAE"""8xð ²²²j­¼Û·oãÔ©SX°`vîÜYkåš‚««+þøãiùaå®¶Û„ž|7òqnÜÛpÇèc---1xð`tíڵʶŽ;ÂÇÇ666U¶¹¸¸`È!U^è¢Õj1`ÀøúúÂÉÉ©Êq­[·Æ!CЬY³jãILLÄ·ß~+ûséÒ%£ëH÷‡×šãõ£î—â§Ÿ®âí·¿Á¡C¿×u8$ãìÙ³ÈÍÍ­µòRRRpåÊL˜0GŽ©µrI_m·;ÀAE""ªe:³fÍ‚ œœœðÉ'ŸÒÓÓáãヵk×¢I“&pttÄ×_ ÀÑÑÎÎΖγzõjL™2EvY®œ3fè=Ι““ƒîÝ»#66påÊôë×–––hÓ¦Þ#‡†‡‡,,,еkWœ?0a¤¤¤`„ ˆˆˆüüóÏðôô„V«E»ví°wï^e¿t :;v쀮]»Vmž ó„>}úàÝwßELLŒ‹!rq)ÕÏØØåöINNÆÈ‘#TŸ;¹6¨.w;wî„››Ôj5œ±zõjÙó>h›”“ë[dã€Å‹ÃÑÑZ­ƒF||¼´M©ßÝo_¯ìAÛ^ùóçcΜ9B(悃ƒáêêŠzõêaÔ¨Qz +ÕW)OrqÛ†ÆÈI(BäWIø~ÌU„¾|¿mOBZTžÉÎ_W4 dêׯ_×!VÁ민~wý0NàÌ™?ñÞ{!ððXŒW_ý {ö\D^^‘É˪mBlذÏ?ÿ|þþþ6lV®\ N‡¤¤$Ì;W¯œeË–áúõëF÷¹ò«kŸ#GŽ`âĉðööÆØ±c¥ëÛÃh÷šà "QRš_çqž7HÉùóç¡Ñh””„Ý»wcÕªUصkŠ‹‹qìØ1ܽ{ øè£ðÆoÀÑÑ)))˜7o>øàéŒ!C†ÀÖÖ]ºt©ÑÝŠJq)Õ¯²_~ùo½õ:$;À¨Ô>Jy.))ÁåË—qéÒ%ìØ±Û¶méS§pñâE!&&F¯œ¸¸8äååÕ”ʯÜ>öööXµjfΜ‰ƒbÉ’%غu+îÞ½kÒv7ÆãÿÑc¬|~©S§VÙV>oÐÂ… ”Íï€gŸ}¶–£4-;;;¬\¹ýû÷Ç;#   ôïß:ï½÷T*||| V«1þ|iyÍš5Òy^xá½óV^–+gË–-˜;w.nß¾æÍ›cçÎxýõ×ááápvv–?¸FÔ IDATæ{î¹ç0uêT„„„ iÓ¦ðòò¨Q£ .„Z­F~~>ììì`ff;;;h4„……¡K—.R»¾øâ‹1b¾ûî;¼þúëÈÏÏÇÆѤIe6‡ÂÆñçŸbÚ´iŠ\¾|ÑÑÑ?~<`üøñXºt)V¯^ 33ùï •âjРlý*ß±4f̸¸¸`Ó¦MX¼x1&OžŒ™3gê=fi¨}*¶SÅÜíÞ½[¶ æÏŸ¯—»ÂÂBœ>}Zzœ´eË–Ðh4ÈÊÊ‚››Ûµ‰¹¾5räHÙx ”Ý¥cmm   é_¥~×·oßûîë½{÷–ö¹ß¶þ7 ‚ØØX4hÐÀ`Ž‚‚‚0fÌŒ30gÎé—g¥úzyyÉæé»ï¾SŒÓ˜6¬NѽRĽ‹?f ñü=¨ÌÊîÎt%OÎÐ3^?xý¨ÜN¼~(_?îGLL*ö칈s¸};j•ÍÅZRRz_ç|”YYYaúôéP«ÕèØ±#F#GŽ cÇŽBà•W^J¥B·nÝ`nnŽñãÇKËßÿ½tžÊù®¼,Wμyó°iÓ&¤¤¤ÀÉÉ GÅðáÃgΜAÆ ¥ÿ[]ºtÁ°aÃðóÏ?ÃÑÑ;wFÿþý/¿ü2ÌÍÍQTT+++¨T*XYYA­VãäÉ“pssðaÃýúõCïÞ½qìØ1 >………˜={6žyæeŸ+çÎÞ={pçÎøùùaÓ¦M²9Œ‰‰A\\œt ÷òòÂöíÛ1sæLÅ/!•â²´´”­ŸV«Õ;Ï€ààà€°°0|õÕW2d^xὩA”ÚG)ϯ¼ò JJJ0uêTé.â–-[Öèãšö¥òǯ×>ÅÅÅØ´i“ôÅŸ³³3Ôj5rssáââò@í~¿8¨HDôˆªnÞ wÞy§#2V­ZA£ÑHË:tÐû6³|ÀB¥RA«ÕB­VK˦(ÇÑÑÞÞÞ ÅäÉ“o¿ý‹¨¨(¸ººJÇåççcĈ())A›6m¤õï½÷^µeÇÇÇëí ”ÝiQþ–M333é“'ObúôépwwÇœ9sàíím°®BHwn"!!ÇÇàÁƒeSŠ«ü±©šÔzõê…^½z!-- _~ù%¼¼¼àéé‰Ý»w+ÆnˆRú¹Ójµ¸pá-Z„›7o¢aÆÐét՞ט61D®o)Åãç燣G¢oß¾°³³ƒ¯¯/`ggg°Î÷OMëo¨í¯]»&ýòºÿ~¼üòËcJHH¨2 »»;å66”'¹8322ŒjCéfZ”D[ã¿óÿDÜÉl ‚âÉûÛù±Çë¯Jxý¨Zçš27·Â–-?c×®ó¸z59Š‹Ë>ËŸTMš4‘>+àÙgŸÅÅ‹¥eKKKeŸ#æææÒ²)ʱ³³C×®]qüøq 2—/_F@@ )) ·oßÖ»î¢wïÞ(--EÓ¦M¥õjµ¯¼òJµe§¦¦V™_·Y³fÒ[šU*•4°tåʬY³-Z´ÀK/½„®]»¬ëO?ý lŠ ìqä´´4üöÛoèÒ¥‹ìqJqYXXÔ¸~о}{´oßYYYÇœ9sàææ†>úH1v@9Ïå*¼Óö5é?†Ê¯Ø>üñ¶nÝŠ„„ØØØÈNIcL»?*Õ±òùu¶oßKKKÌ;‹-Brr2Þ|óMìß¿_o~Ÿÿüç?0`@]‡}ßÒÒÒô–SRRаaÃZ-Çßß›7oF½zõ0bÄi½  €ƒJÇåççC¥Rá£>’.ÂåvïÞ oooØÚÚê­·±±Áï¿ëO^žžž.íWñ F­V‹ÔÔTddd ¤¤DïŽÊ„عs'–/_Ž_|QZ?sæL)þQ¨—……EëWQii)„P«Õ°²²’ݯ¦”Ú --M/waaa@hh(úöí sssØÙÙÉž·¦mbˆ\ßRŠG5kÖ`Íš5¸xñ"Ö¯_±cÇââÅ‹Šu~x*ºß¶Ê¾àصk1wî\ 6L6Ïåìíí«œ³ç÷yœõîÝóæÍÃêÕ«.]º`úôéHOO7ê<ß|ó ~ùå :´Úe¹r€²ymžþyœ9s¾¾¾Ò9[·nåË—£wïÞèÑ£¢¢¢Ð·o_L˜0fffð÷÷‡‡‡<==qîÜ9¬^½Zº»ÂÉÉ ï¼óþýï£[·n˜?>ºuë†=zàâÅ‹?~<† ¦÷ÆÆŠú÷ïþýû#11›7oÆÐ¡C«Ü”=º6lØ0ØÛÛë­3f fΜ‰Èþ²Ð¹sgÙ¸(Ö¯¢]»vaÆ øç?ÿ‰ÀÀÀj¿Á6Ô>UÎ\”ÿUîÅ_ÄòåË1hÐ XXX@£Ñ eË–˜?>öîÝûÀm"G®o%%%ÉÆ³iÓ&lݺ:u‚““Ο?/½ÙS©ßÕ$—rñ$'ÿïn SµýæÍ›Ñ¹sg¼úê«èÓ§lŽ^|ñEìÚµ îîîèܹ3bbb¤?À•ê{çÎÙ< ÿüs#>>­[·†ŸŸŸì ³œÿþ÷¿¸víš4µ@åe¹r ^½zèÝ»7®]»¦÷ûÓ¦MñÆoàÿøÚµk‡Û·o£C‡xî¹ç R©àíí©S§¢U«VˆŠŠÂŒ3¤»óìííñïÿÿüç?ѦMŒ?^úB!::ƒFÏž=‘ššZm}:v숎;"==ûöíûヒmÛ¶UÙïðáÃèÙ³g•»;ˆuëÖá×_­2}@9777Ù¸(Ö¯¢ãÇc÷îÝ3f /^\íJí£”çÊwKVäììŒöíÛcÚ´ihÕª²³³Ñ¡CÙýå(•_y0·_¿~رcfÏž F#ÍóøùçŸcÅŠÜî÷C%ä~[""¢‡.<<Ë–-Óûæ,88ÿþ÷¿±sçNtèÐAºí¾iÓ¦GçÎÎ/o@Ù­óð÷÷¯ñ18sæ lmm¥IɆû-'!!W¯^…‹‹K•yánܸ[·n¡}ûöz󔤦¦"22=zôþ`‹Ett4\]]e¡’SZZz_w`Õ„R\rõ3el:™™™Ò<.ÕåN© *ÊÎÎÆÙ³gáää„N:!..1114hÉÛ¤"¹¾¥Oaa!Ξ=‹‚‚xzzêM nL‰§²m{c]¹rÉÉÉèÙ³'lllô¶ÉÕ×PžLguŸ_™%ˆ9œ‰áH¹š 33„N âoÌnÃbð ×*›xý(ÇëGÍñúaúëGPP&NœXåK”ë×ïH/lINήv€qÓ¦É=úáý?4Öĉ‘œœŒÅ‹u\QQ®^½ +++iá‡á~ËIKKCll,ôæÏÊîºMJJBóæÍõúÅÝ»wqóæM´mÛVðKJJB||<7n¬7_aMèt:Å—9=¥¸äê÷0bSʳœÒÒR\»v @ÙÀñƒ|¾Õ´ü¼¼<\¿~öööhÙ²%RRR˜˜OOO“·{Eü15j„ÀÀ@½õT$"ªCáááøç?ÿ©7ßÅúõëqèÐ!lÚ´é‰T$zT%&&VyÉIE;v„§§g-FôhzRòdèóë^Rbþ›‰èýéÈŒ)€™F]±@óþ¶úïVµ퓇×z’<®Ÿ‹rƒŠå„8>aa±gÏܽ›Æ Åź'fP‘ˆ “TäãÏDDu¬|~???i~üãuÑSI£ÑÀÁÁAv{ýúõk1šG×Ó’'«Æè4¥:Mi„̘üy(‘ÿI‚Ú’Ó’‘¾'õsQ¥R¡Ggѣdzøè£ÑˆˆˆÆîݰk×ùºˆT$"ªcróëTžè·òü>DdzÒa$ïiÌ“}KKtŸÙÝg6A^Zq]‡CD˜§ásÑÜÜ ^^íàåÕŸ~:ùùò/÷!¢§‰ˆêŸŸüüüª_§yóæÒ[ÀàСCˆŒŒDË–-ë*\""Pßáñ~aу²´ÔÀÒ’Ÿ…DO;*=,--1xð`½ufffÒDäàèèˆ!C† 11ß~û­ì¹Õ9{ˆˆˆˆˆˆèÉÁAE"¢ÇÌ“:g=>8¨HDô˜yæì!"""""¢G_]GDtŸJ‹t¸¾+ '>úËðÎDDDDDDDOÙ;U*UmÆADôÈB(n/Ê)ŵ]©¸¼#…Ù%€¶¨Ð ]‰@AV ï– àn) ³JPp÷?ÎݬÑb­ìñ.µ-= 5jüýýk+"¢:„°°0Ùíy©Å¸˜‚kß§BW" +-|4·x4¾„)Ì.E^Z1òÒŠ‘ŸVŒ¼ôb䥣Q'+<ëc'{ÜïÁ)øu]‚Þ: ksÔ³WCk«†msKÅrsK³L?=>LJqãÆÕV,DDuª¸¸¸ÚAŬ¿ péÿ’ž•ªìξŠJ‹ŠóJ¡©onÚ€ŸY• °´—ÿ¸ŽÞ—Ž“ŸÄ¡´H'­3Ó¨P¯¡ œ,`í¢U,¦¥=œ<@k«†¥9´¶j˜™×| 4¿ôBBB Ñhj| ^?ˆêXHHH]‡`RÇGÿþýë: ¢'ÎñãÇ1~üø*ëù¢""©WsùunÏ‚Ê\Q* ÷`t^j1ê5Êžœ(Ê)èJ3µ Ö.Šåü¾3E9¥(ºWŠÂœÞ-E~f „N ß3´Lþñj§N 0  9ê=£F' ê5Ô(BVfÕØVå㫉°°0Å»<‰ˆˆªÃë™RII –-[V×a=58¨HDT *ÄÎÆo_'!)òÌÔ*ˆåy¿sMv›Û°†¼ÂUv{i‘@q~),íÔ°iª……•9´öæ¨g§A}GµÁ?;WKع*?¢ü0šƒ’ˆˆ¨:¼~‘)"00°®Ã zªpP‘ˆ€®T äº ¶t=ƒÿ¼ ˜ý½ÞÀ`"¨T€ûËŽhÖ×VzlØÂÚ* 2ê9(?ÖÕ¸‹w±zà:Õ*¸w§"«Âº²Ç–u:èä•Ú V,Ь¯Íà ’ˆˆˆˆˆˆèÁAE""6Í´ÐôNÃÔ CQZ¢CzT’"sqç|6/ä¢8¯fæ? ­«z÷b^jqDMDDDDDDT7ÌLq’›7obûöí¦8Õ#QN]‹ˆˆÀÇŒ¸¸8½õ999X¹re•?*233ñé§ŸÖu÷åQë[Jñ(åYé8Sô™¿þú [·n} s”Û»w/Ξ=k’s™š™¹ Ž Ðq’†þË ¯÷ÄKß·GŸMáêm'½Ee¦‚Ê\]±™1u5Qí1É bTT6oÞlŠS=åTôæ›oâÖ­[µZf@@–,Y‚¯¾úJo}VV–.]Zåߊ¬¬,½˜VîÆyë¢o)QŠG)φŽ{Ð>sëÖ-¬_¿þÎQ.$$§OŸ6ɹ6•`ߪÜÇ;Âg峘|¸&„y`àÍÑzXC@aViGIDDDDDDT{L2¨ø$;xð ²²²j­¼Û·oãÔ©SX°`vîÜYkåš‚««+þøãiùaå®¶ÛäQS[y&e6Í´hóÂ3ôQ L»ÐÃ7µªëˆˆˆˆˆˆˆjÉu:fÍš899á“O>¤§§ÃÇÇk×®E“&Màè舯¿þ ,€££#œ,gõêÕ˜2eŠì²\93fÌÐ{,3''Ý»wGll,àÊ•+èׯ,--ѦMIû>|°°°@×®]qþüyÀ„ ’’‚ & ""ðóÏ?ÃÓÓZ­íÚµÃÞ½{))):t(vìØ;;;\»v­Ú<*æ1((}úôÁ»ï¾‹˜˜)CäâRªŸ±±Ê퓜œŒ‘#G¨>wrmP]îvîÜ 777¨Õj8;;cõêÕ²ç}Ð6)'×·ÈÆ‹/†££#´Z-Œøøxi›R¿»ß¾n(ÏJõ¨èAûŒóçÏÇœ9s „á7$ÃÕÕõêÕèQ£ôB•ò¤”_¹8m{SÐÚpŠZ""""""zŠD`` Üf=û÷ï*•JÌ›7OäææŠˆˆakk+BBBDbb¢033|ðÐétâóÏ?ÄÊ•+…N§Ÿ~ú©pss“εwï^±~ýúj—•ÊÙ¸q£èÑ£‡tÜŽ;DçÎ…BÜ»wO8;;‹7Š‚‚qäÈacc#N:%ââℵµµØ³gÈËËü±hÑ¢…Ðét"33S8;;‹cÇŽ‰¢¢"‘””$¬­­Å¶mÛDAA õë×QQQ"..NÔ«WOŒ=Zœ>}ZêåèÏ?ÿóçÏmÛ¶UÌe‡ÄæÍ›…BøúúŠyóæIÛâââ„V«­òoCqÉÕ¯²ÐÐPÑ­[7±}ûvQPPPm|JísëÖ-Ñ A!„¨’;CmP1wiiiB«ÕŠ={öˆ‚‚qüøqaff&RRRLÚ&)õ­ììlÙx<(š4i"nܸ!²³³Å /¼ f̘a°ßÊ¥RsìØ1áîî.fΜ)j4 („ .¯¼òŠÞºŽ;ŠuëÖ)æI)¿JqÓöqP‘ˆˆˆˆˆˆ¨fLö¼^«V­ Ñh¤å:àÈ‘#Òrƒ *• Z­jµZZ6E9ŽŽŽðööFhh(&OžŒˆˆ|ûí·€ØØXDEEÁÕÕU:.??#FŒ@II Ú´i#­×h4xï½÷ª-;>>^o_hÛ¶­ô–f3334iÒpòäILŸ>îîî˜3g¼½½ Ö500BôèÑ@ÙãÈ 8~ü8,{œR\å“Ö¤~ЫW/ôêÕ iiiøòË/áååOOOìÞ½[1vC”ÚÐÏV«Å… °hÑ"ܼy 6„N§«ö¼Æ´‰!r}K)???=z}ûö…|}};;;ƒu¾ßxLq܃ô™k×®¡uëÖ€ýû÷ãå—_6SBB<<<ôÖ¹»»Pî†ò+gFF†QmODDDDDDDÆ1ÙœŠiiizË)))hذ¡©N_£rüýý±k×.ìÚµ #FŒÖÛØØ`À€ˆÕûùâ‹/`mm»wïês÷îÝÕ¾øÂÆÆ¦Jùééé°µµ ?@ªÑh Õj‘ššŠŒŒ ”””(ÖK;wbùòåGxx8~úé'xyyéÍ/W¥¸Œ©_E¥¥¥B@­VÃÊÊJqßšPj@?waaaÀâÅ‹sçΡ~ýú²ç­i›"×·”âB`Íš5HOOGHH 0vìØÕù~ã1ÅqÒg\]]±k×.|öÙg˜;wn•}«coo”””jãTÊ“R~ ÅiìDDDDDDDTs&TŒExx8€²—¤lÙ²¥ÆwdUtáÂ:tHvY©œÑ£GãÒ¥Kذa^ýuéDDDàúõ뀼¼}:Úµk'ýL™2¡¡¡(**’Í™R\ÆÔ({yÇ„ ЧO!pòäIìØ±CÚn¨}ä(µAeñññpwwÇ€`nnŽ3gÎ ;;ÛèºK®o)ųjÕ*xyyA­V£gÏž˜2e îܹS£:?H_¿ŸzÔ4o†úLƒ  V«ñꫯ¢]»vxÿý÷ Æäííàà`$&&._¾Œ'NÌ“R~íÛDDDDDDDdBrÏEÃÈ9{÷î-Z·n-(7n,†.ŠŠŠ¤9ËݸqCo>¸ÈÈH½9gÏž-zõêUí²R9åÆ/š5k&ÍCXnÍš5ÂÆÆFx{{ 1nÜ8iŸÙ³g áíí-lllÄÆ¥ãºté"úõë'Ο?/„âÃ?vvvÂ××W<óÌ3bæÌ™Bˆ²yöÌÍÍestçÎñᇠj·O›6M¼ð UÖß½{WhµZ&;§¢R\†êWQHHˆ8p  ‘漬L©}*ÏõW9wrmP9w·oßNNNbàÀÂÇÇG >\´jÕJʩڤ"¥¾¥O\\œhÞ¼¹èر£ðöö¶¶¶bëÖ­Òy õ»ûéëJyV:Î}¦üE-墢¢„¥¥¥8}ú´b~u:˜8q¢°³³^^^¢yóæbøðábݺuŠy2”_¹8iûŠ8§"Qͨ„¢ºÁF•J…ÀÀ@øûû×x€²  gΜ­­-ºvíjšQO–“€«W¯ÂÅÅ¥Êün7nÜÀ­[·Ð¾}{4kÖLZŸššŠÈÈHôèÑöööÊî‹ŽŽ†««k•yé )--}hwR)Å%W?SƦÓéB’Þö±IDAT™™‰gžy@õ¹SjƒŠ²³³qöìY899¡S§Nˆ‹‹CLL  dò6©H®o)ÅSXXˆ³gÏ¢  žžžprrÒ;gMë\Óxj’çšþyÐ>c¬+W® 99={ö„Þ6¹<ʯ)ã Âĉ!ó±HDDDDDDD3é "Ñ£*11Qñ%';v„§§g-FôdyRòËAE""""""¢š1ÙÛŸ‰e²Ûå^C5Ãü=]8¨HO 6¬®Ãxb1¿DDDDDDDO“½ý™ˆˆˆˆˆˆˆˆˆžT$"""""""""£pP‘ˆˆˆˆˆˆˆˆˆŒÂAE"""""""""2 ‰ˆˆˆˆˆˆˆˆÈ(T$"""""""""£pP‘ˆˆˆˆˆˆˆˆˆŒ¢Bˆj7¨T€qãÆÕj@DDu%$$ ó±HDDDDDDDSËmà`"=mø¹GDDDDDDT3²w*U‡s*‘Q8¨HDDDDDDDDDFá "åÿ5ïªl'øuIEND®B`‚bm3.7.0/doc/html/a00030.html0000644000175000017500000002735611365042651013432 0ustar tlktlk BitMagic: bm::bit_out< TEncoder > Class Template Reference

bm::bit_out< TEncoder > Class Template Reference

Byte based writer for un-aligned bit streaming. More...

#include <encoding.h>

Public Member Functions

 bit_out (TEncoder &dest)
 ~bit_out ()
void put_bit (unsigned value)
void put_bits (unsigned value, unsigned count)
void put_zero_bit ()
void put_zero_bits (register unsigned count)
void gamma (unsigned value)
void flush ()

Detailed Description

template<class TEncoder>
class bm::bit_out< TEncoder >

Byte based writer for un-aligned bit streaming.

See also:
encoder

Definition at line 141 of file encoding.h.


Constructor & Destructor Documentation

template<class TEncoder >
bm::bit_out< TEncoder >::bit_out ( TEncoder &  dest  )  [inline]

Definition at line 144 of file encoding.h.

template<class TEncoder >
bm::bit_out< TEncoder >::~bit_out (  )  [inline]

Definition at line 148 of file encoding.h.


Member Function Documentation

template<class TEncoder >
void bm::bit_out< TEncoder >::flush (  )  [inline]

Definition at line 304 of file encoding.h.

template<class TEncoder >
void bm::bit_out< TEncoder >::gamma ( unsigned  value  )  [inline]

Definition at line 229 of file encoding.h.

References BM_ASSERT, and bm::ilog2_LUT().

Referenced by bm::serializer< BV >::gamma_gap_array().

template<class TEncoder >
void bm::bit_out< TEncoder >::put_bit ( unsigned  value  )  [inline]

Definition at line 154 of file encoding.h.

References BM_ASSERT.

template<class TEncoder >
void bm::bit_out< TEncoder >::put_bits ( unsigned  value,
unsigned  count 
) [inline]

Definition at line 162 of file encoding.h.

template<class TEncoder >
void bm::bit_out< TEncoder >::put_zero_bit (  )  [inline]

Definition at line 195 of file encoding.h.

template<class TEncoder >
void bm::bit_out< TEncoder >::put_zero_bits ( register unsigned  count  )  [inline]

Definition at line 201 of file encoding.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00162.md50000644000175000017500000000004011365042641013135 0ustar tlktlk553edcdd9f96409f98e3c03f15985bb0bm3.7.0/doc/html/a00142.png0000644000175000017500000000703111365042634013243 0ustar tlktlk‰PNG  IHDRpu–-eøbKGDÿÿÿ ½§“ ÎIDATxœí{LSgÇ¿½Q[1ÞZ±˜M¼ 6Á!L³¹£™%l³Df0é7\‚ËæÜ2Ñà’©l!KxSDØ„yÙ/ù:$ NÆ[PDJ…Rú{ÿॳri+T|úžOrþx.ç9¿§Ÿžçœ>=8˜…?ÕpL N ãpGh­‚V«Å¥K—žF, Ÿñ+‘4 à–)X45=duæ÷ß·µ*Ç$aS=îÈ8œ@Æá2'q8ŒÃ dœIxûömLv³“JYYêêêÖ¾Ñh„F£qXû2éµZ-Ž?>ÙÍN*EEE¸~ýºÃÚ7 ÈÈÈpXû ¡ŒcóLŒ=<ˆ‚‚¸¸¸`óæÍˆ…^¯ÇîÝ»‚£Gb`` hllÄéÓ§!˜˜ˆ5kÖ@§Ó᫯¾ÂÚµkñí·ßâðáÃøë¯¿‘‘ÖÖVxxx@¥Ráí·ß6·»nÝ:dddàþýûX½z5’’’Àçóqþüy¤§§£³³/¿ü2L&“9Ö«W¯âàÁƒÐjµËåHHH@hh¨]±ŽÅ©S§™™‰®®.DDD )) <oR?k‡ì7nÜ€@ À±cÇðÅ_àÈ‘#(..ÆÀÀ®\¹‚îînäææbË–-Ø·o<<<——•JezúûûQ]]ÒÒR¤¤¤`æÌ™HIIÁ¶mÛPPP€Ï>û éééÐét@UU®]»†ÌÌLüøã(++Cee%nݺ…½{÷"11'NœÀòåËqñâE@gg'’““¡R©ð믿"!!{öìASS“]±Ž†ÉdB]]4 222PRR‚«W¯NúgíÓ§OÇÖ­[!‹±dÉlÚ´ çÎ0´w¾óÎ;àñx ‚@ @tt´9m0ÌíôõõA­V# ®®®8|ø0V­Z‘H¹\¡PˆžžÀÀÀâãã! !—Ëáç燞žœ={ááá 3~~~€ÒÒR(•J¼þúë‰D EHHˆyÞמXGãý÷߇P(„§§'|}}ͱN&B===!þÓôüùóQYYiNO›6 Àãñ ‰ ÌéGáñx˜5k@$áÆHOOÇíÛ·!•JñøÕ ÃumëÞ½{ðõõµ¨§P(íííðöö¶(óööF[[›Ý±>ŸÏ‡‡‡Çˆx&‡ìêê²Hët:H$»Ûy´Ó¥¥¥øá‡°{÷n,^¼|>ëׯ·Ú†D"Aggç¨ñ¹¹¹áï¿ÿ¶(Óëõpww·;Ö©Â!Chkk«ù8c0püøq„„„L¨Íööv( ,]º|>555V‡0 ÄùóçÑÑÑhhh@UUॗ^BEEZZZ /\¸€   »ã+--ñex8d\´hÒÒÒææføûûcýúõÐëõOÜfhh(233¡V«!‰ÌǺ´´4ìØ±cÜõŠ‹‹¥R‰;wî˜)•JDGGcëÖ­xþùçQ__ˆˆ¬X±÷ïß·+¾C‡áÍ7ßÄüùóŸ¸OÏÚe…YYYˆµû݇¢¦¦Ó§O‡¿¿ÿ„‚Æ`0 ¶¶3g΄ŸŸÚÚÚÐÒÒ‚eË–Y]·¡¡xá…àææfQÖÚÚŠææfÈd2<÷Üs“ëD‰ˆˆ€F£ALL̸õ²€‹‹ ^|ñÅImÓÍÍÍbx›;w.æÎkÓºÃgž£!“É “É&ßTÀÍÄ0'q8ŒÃ dN ãp‡È8N-p`À„“õŠ ãÔ««ÛQ]Ý>Õa8›gbl½VÿYböì·÷îeOq$ŽÃê\(«·—=|hÂÇÿ°\\Øll¹½ÌêèããcýµgüüJCÝÝý±qcàÔä ØûZÚÈÏ?_†@À‡@ÀÇÏ?_žêp†S Ôé (*ªÃà  ƒƒ&ÕA§³þç/‹8¥À“'¯Ù”ç 8¥ÀŸ~*·¸à‰ˆðÓOåS‘ãp:wïv¡¼¼&Ó?M&Byy#îÞígM6q:ùùWÀ缄Ïç!?ÿÊDäXœN`NN9Gþ´$ää8ß0êTÚQ[{COéxBmí448×ÔšS Ìϯ„H4v—D"þÿ~à;N%0'§ýýcÿûÐßorºaÔiVU5A«í°ZO«í@UUÓSˆèéà°ëBŸ6Zí}¬Zå™3ÿ¹¯¡²ò?€À@…9¯³³Zí},]ê=¢ ±úoË$&þ pøð{S‰ãpš!ôÿN ãp‡È8œ@Æá2'q8ŒÃ dN ãp‡È8œ@Æá2'q8ŒÃ dN ãp‡È8œ@Æá2'q8ŒÃ dN ãp‡È8œ@Æá2'q8¬C¡ÑhCy`~qw_Nîî˧<ŽÉ\bbb,|y‹uNNÎXESDll숼1ªT*‡Ãa?ùùù#ò¸c ãp‡È8œ@Æá2Ó>>HOOŸÄ( ÓíáÔ©Sزe öïßo‘ßßßøøx|óÍ7¨©©Á™3g V«Í¯&Ö™°À]»vaΜ9‹Åˆˆˆ°žŽ9¥Ri~eøð‡×ÑѨ¨(8pžžž˜3g222ðÑGaΜ9ËåÈÎz]NII ¶oßµZ ©T ™L†ŒKuu5BCC1mÚ4,\¸YYYåË–-ÃÒ¥K-òþüóOFÄÅÅV®\‰%K–à·ß~ugÏžE@@\\\ˆŠŠ «qÚÓ»k.Ô ÈÓÓ“nÞ¼Iz½ž6lØ@|ðéõz‹Å”——GF£‘Š‹‹‰ÏçS[[µ´´ŸÏ§O?ý”L&¥¥¥Ú»w/™L&Ú·o)•J"":qâ …Búðé§§‡JKKiÆŒtêÔ)jjj"±XLDDÝÝÝ$—ËéСCd4éܹs$•J©¬¬Ì"æØØXJNN6§322(88Ø¢N\\}òÉ'#úÛÔÔD‰„òòòÈ`0З_~I …‚L&Ó¸qŽWf111#æB'´F@__$ ²²²ðõ×_z ùü7B,ÃÏÏ"‘]]COŽ7™Lعs'x<¢¢¢  ±cÇsúÁƒæí¸¹¹!%%nnn ÅöíÛ‘™™iËÉ“'!—Ë‘˜˜±XŒ5kÖ >>¹¹¹ãö¡»»îîîyîîîÛæèÑ£X½z56nÜWWW$%%aÛ¶mèííµ§-}x&$pýúõؼy3^yå( ¨ÕjtvvÄb1._¾Œ×^{ ,À¦M›`2Y>Mwøƒãñx‹Å …æô£øùùÁÅÅÅœ^¼x1´Z­EÆÆFÔÕÕÁ×××¼dggC§ÓÛWWW³€az{{áêê:¢ncc#.\hN‹D"ìܹnnnVã´¥O„RSSÑÑÑÜÜ\F¼õÖ[†&^“““±k×.Ô××£¼¼ÜÜQ{¹wïžEº½½‰Ä"O*•",, Ëwß}7nÛJ¥·nݲÈkhh€R©QW"‘ŒøB;vÌ<ªŒ§-}x&$0%%«W¯†P(ÄŠ+‡;wîš››±hÑ"„……A àâÅ‹ÐëõO´ææfüòË/††¼ôôtDEEYÔ‰ŠŠBII jkkƒAAAÈËË·í•+WÂd2¡°°À¼ŠŠ ¼ñƆ¾ˆ×¯_¬]»ÇG[[àÒ¥Kx÷Ýw!¬ÆiKžˆÇ”öœÄ455‘-Y²„"##iÆŒ”žžNDDZ­–æÎKáááEëÖ­£ І ¨¥¥Åb7oÞ$wwwsúÊ•+4oÞ<":‰Q(@aaa$—ËéÕW_¥ÞÞ^‹“"¢ÔÔT’J¥I^^^¤R©hppÐ"æÇObˆˆrssiÖ¬Y´aÚ7o¥¦¦šË íٳǜV«Õ4{ölŠŒŒ$©TJ‡²çxeö0ÚIÌ„FºpáÒÝ»w-ʺººèÌ™3tíÚ5"’ZTTdWÐ'Nœ    êëë£ââbºté™L¦1ë777ÓéÓ§éúõëvm§¥¥… ©¡¡ÁjÝúúz:}ú4iµZ›â´·c1šÀ ?ô\,#,,lÔ2©Tj1Lx{{ÃÛûÉ6îââ‚ððp«õ¼¼¼àååewû2™ 2™Ì¦ºþþþð÷÷µl¼8míƒ=<ó31R©tÔŠgñâtdF<µ>++ ±±± ç}˜=³ _£ÑhÌyÏüÈ1>œ@Æá2'q8ŒÃ dN ãŒ9ý4ãà°ÜÜ\ÄÄÄXäØ}||¸û"žQT*‚ƒƒ-òœúýÿpÇ@Æá2'qþ ¤·¡;ÜG´»IEND®B`‚bm3.7.0/doc/html/a00109.html0000644000175000017500000002611211365042641013425 0ustar tlktlk BitMagic: sample4.cpp File Reference

sample4.cpp File Reference

#include <stdlib.h>
#include <iostream>
#include "bm.h"
#include "bmserial.h"
Include dependency graph for sample4.cpp:

Go to the source code of this file.

Functions

void fill_bvector (bm::bvector<> *bv)
void print_statistics (const bm::bvector<> &bv)
unsigned char * serialize_bvector (bm::serializer< bm::bvector<> > &bvs, bm::bvector<> &bv)
int main (void)

Variables

const unsigned MAX_VALUE = 1000000

Function Documentation

void fill_bvector ( bm::bvector<> *  bv  ) 

Definition at line 52 of file sample4.cpp.

References MAX_VALUE, and bm::bvector< Alloc >::set_bit().


Variable Documentation

const unsigned MAX_VALUE = 1000000

Definition at line 46 of file sample4.cpp.


Generated on Sun Apr 25 09:37:37 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00209.md50000644000175000017500000000004011365042646013144 0ustar tlktlkaab17fb3353dc91573baec89bd005772bm3.7.0/doc/html/a00151.png0000644000175000017500000001500611365042636013246 0ustar tlktlk‰PNG  IHDR¸Ã1ÖÛÅbKGDÿÿÿ ½§“»IDATxœíÝyXTõþð÷lŒ²ã0•PTM±4ý©p¯+€$™Ë­HŸLMnX×å‰4ɼ).ù”ÙÒ« bâ‚Z¨$×5•‹È"8Hì0,3Ÿßä±ÇÌœáÌ÷õ<àéÇþ«»wïB$áÈ‘#øðÃqèÐ!üðÃhllÄõë×QUU™L†%K–`Û¶m°´´D\\ÕSˆúúzdgg7ë7//555 ………BCCáì쌺º:\¿~½Sµ©T*dff"::@JJ ÒÓÓ5>|Äþ+SSS„„„@*•ÂÕÕ~~~HNNдwŸ?>ÜÜÜ ‰0oÞ<õrMMM§ú055…XÜõK€^{í5ˆÅbØÙÙaðàÁê©Ó>ð_ÙÙÙ5 žƒƒJJJÔ˽zõÐt•¢D"H$R/k›P(„¥¥¥z™])Ùy,à¿*//o¶\VV33³n÷«P(ºÝóç±€ÿª¨¨©©©šNÍ%$$`„ ]êC,£ºº•••€ŒŒ t¹– .àÁƒ]~Ó¯¯ï gggìÙ³±±±ÈÏÏÇСC1{ölTTTtº[[[Œ1o¼ñQQQ‘#GªÛ­¬¬ðé§Ÿâí·ß†¹¹y›ýDEEaÖ¬YpppèÖ61<ÿFOW¿ðP__Û·oÃÔÔC‡ýSëU*•¸s瀦4Oçê@Ó´'++ Æ ƒ©©)*++Û º&yxx°oô:###Œ3¦[}ˆD"¸ºº¶Úfii‰qãÆ©—unCÆæà ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯ñú£zm Mл·ª«;÷……Ž˜˜ŒAmí=¨TÚ½ÆÛ?ªçmÀµuûd"ÂþýËX³f4ŒŒD¿¨õõ*DD¤ÃƦBBFhõ¦!Þ>™·×¢j¥ßèèTܽ{qqË1nœf®ösrzsçF¡¡á¼òÊ‹é“iÂæà]ðða >øà(–-óÐX¸àùçðæ›îøàƒ£xø°¤ã0ÆÛ)Ц)•*ìFE…II«!‘tojòGõõ˜1㘛÷ÆþóD"¶ïÑ6ŠôÙgçqíÚCDE½¢ñp€‘‘»v-Àµk±ÿïßP±€wBFF!¶m;wß#ì´¶gg;„†NGDÄ÷ÈÌ,ÔÚz ›¢t ¡A‰3>±±qq˵>uP*Uðõ݉ººF?þŽVþoaHؼ;wžFNÎìܬ“y±H$Äί ;»;wžÑúúøŽ¼wïaçÎ3xï½Y<¸¯ÎÖëà`°°™Øµë î߬³õò›¢´A¥"øúî‚J¥ÂÑ£+t~VC©TaöìÁÈHŒ¸¸·!²›ýülÞ†¯¾ºˆ7r9“Sv"‘Û·¿Œôô\|óÍ%¯Ÿ/XÀ[QXX†-[±l™‡VÏštÄÙÙo¾éŽÍ›QTTÞñ ˜Ø¥‹¬¬ÇHNƒTÊíÕ uuððˆÀ°aýñå—¯qZKOÄöàpìX:NŸ¾mÛæqnJňŒ ©S·‘˜xƒërzðß)/¯Á† q˜?<&NÂu9j“& ÁË/ÇúõGPQQËu9= øïlÜx D„õëçp]J 6ÌJEظñ×¥ô(,à¿JMýºŒç˜ërZ°°0ÆÆsóÒÒ²;~€dU˜6íc `…¯¿~ƒërÚõê«ûQTT¤¤ÕìŠÃN`#૯. ;»áá¾\—Ò¡?ôÃýûñõ×ìÜxg|ÀKJª™„©pp°æºœ98X#$d*""¾GII×åè=ƒø–-Çall„•+½¹.¥ÓV®ô†±±¶l9Îu)zÏ ~ãFbc/cýz˜˜H¹.§ÓLL¤X¿Þ±±—qãF×åè5ƒ=È$"øø| ±X„#G–÷¸_.#"Ì…ÆF%Vö¸úuÅ`÷à2Ùܸ‘‡>òï‘áØ´i.ÒÓó “]ẽe¯¨P`óæcX´èÿàìÌÝÅTÝåâb ^ÄæÍÇPYÉ~®°5ðÈÈP* ï¾;ëRº-,lTرã$×¥è%ƒ ø½{Eøê« xÿýY07ïÍu9Ýfee‚5kfâ‹/R•%纽cp™‹}ŽGÊpòd(o¾%£R¼½?Æ3ÏôÁÁƒì’Úß3¨=øÅ‹Y8}ú66lðáM¸@(`Ü:õ3RSÿÇu9zÅ`öàD„3và/1Atô›\—£óçïCyy-Ž_Õ#Ï iƒÁìÁãâ®áöí¬[çÃu)Z³~½nÞÌCBB:×¥è ƒx}}#¶n=ŽÀÀç1b„-×åh³³ÆaëÖãhhPr]Ž^0ˆ€ûm*Š‹+6ƒëR´.,l& Ëñí·©\—¢xð7ò°{w2~XQ[[;OcÑ¢Ièßß‚ÃêtÃÎί¾:;wž†BÑ ~œˆ°{w²Á]»Â«€ÇÇ_ÃG%bÁ‚ý(-mú9/¿¼€ªª:,_îÅquº³b…*+8p PZZ öã£ãêt‹W?qâàÂ…ûððØ†””ûؽû,^{m úö5å¸:ݱ¶6Ãßÿ>{öœÅ… YððØ† îømŒ oNÞ»Ww÷õ²H$ÁÈH„k×>€¥¥ ‡Õé^ii5ÜÜ>@}½J¥JÝvþü89õç°:ÝáÍüĉ[H~Û¥R•ŠP_¯Ä[o}«ž²‚ÒÒj,_þ-êë•P©¨Y¸%¡AíÅyðcÇÒÑØØòF*©§,W¯>ä 2ݺzõ¡zJ¢RµÆF±c†sžœ/((EFF!Úšm54(!—WbΜá‹/~ÔquºóÅ?bΜA.¯ló<8!#£¥:®Ž¼xRÒ-ˆDí4-ô§§³ŽªÒ=OOg ÐÂÞU‘H€¤$ئð"àÇŽ¥C©l}ï- ad$Fx¸/~úiNod¯kƒ÷ÅO?­Cx¸/ŒŒÄ‹[{•JÙ¦ôø³(¿üRQ£Ö·:ß xî¹AˆŠz…×ÁnMNÎ,_ôô‡mŽÍÍ›ѧ¿Ï.õø=øéÓ·[<& !‘ˆ°aÃKHHXapášöæ +°aÃKHD­îÍ[;¾éñOLLovi¨@ €‹Ëœ;·!!SyuÝwW …„„LŹskàâ2 Å8%&òšÒ£§(ÕÕupv^‹†%Äb!Þ{oÞ|ÓÝ ƒÝ•ŠðÙgç±uëqUHD¸sç£uO˜®êÑ{ð3gî¨O‡9;Û#99 Ë–y°p·B(`Ù2$'‡ÁÙÙ@ÓéÓ3gîp\™–ÑDGG€ñ×·ïËdk»ŠLMÇ Ð꺴!88˜£±©é8²µ]E}û¾Ìùû¨©¿èèècÜæotüûßÿn«I/(•„}ûîÀßßýûOÔÚzbbb¯µþ% ¢££µÖ{ŠŠjpøð,]ú]‡Ÿ#è»yóæµúx› ÔZ1šPW׈€€€6ÏõjJCCƒVÈéX/[¦‚R©Ò‹ß#Ò†»U|}CtM,j}'Á%þnÀœá9p†×XÀ^ëVÀ³²²pðàA •ÒÜÑ£G‘––Öáó °uëVüüóÏ-Úª««±yófm”Ç mŽ7—´ù>u+à™™™Ø·oŸ¦jiF&“áÒ¥ŽIláÂ…HOO‡XÜò¬Jee%6lØ ò8¡ÍñÖ¶×_|8×¥0íHJJByy¹Î×Û퀫T*¬X±æææ°±±Á–-[%%%ðòòÂ'Ÿ|;;;X[[ãÀøÇ?þkkkØÚÚ"66VÝOll,ŒÞ½{Ã××·Ù`ܺu “&MB¯^½àä䄘˜À’%K››‹… âûï¿o³ÆÏ?ÿƒ ‚‰‰ –,Y•JÕæsõ¦ÆûÌ™3pqq‘‘ÆŽ‹+W~û”óçÏcôèÑJ¥>|8Ž=ÚlÑÑÑptt„‰‰ /^ ¥²éz uëÖÁÚÚR©ÈÏÏA.—#(()))mn›VÞ§¶®EéŒcÇŽ‘@  Õ«WSuu5¥¤¤……Éd2*,,$¡PHëׯ'•JE{öì!´uëVR©T´mÛ62d¥§§“T*¥Ã‡Smm-íØ±ƒÐŽ;¨ªªŠlmm)**Š %''“¹¹9]¼x‘ÊÊÊÈÁÁ’’’H¡P´¨¯°°PHHÕÕÕQVVYXXÐÙ³g;}½HWÆ£«‚ƒƒ)88¸ÓÏ×Ôxçåå‘™™ÅÅÅQMM mÚ´‰ D*•ŠŠŠŠÈÌÌŒ¾üòKR(OÆÆÆ”™™I………ddd¤Ïììl²´´¤S§NQRRÙÙÙÑýû÷©¢¢‚|||héÒ¥DDTZZJ¶¶¶tîÜ9ª¯¯o±]šxŸÐƵ(ݸ••U³¢×®]K~~~ꢫªªˆˆèÞ½{$‹©¡¡ˆˆ®]»Fýúõ#"¢°°0š?~³¾]]]iÇŽKcÇŽmÖ¶bÅ Zµj9::Rjjj«õ=­A.—«›8q"ÅÅÅujûˆô/àšï?þ˜æÌ™£î£¾¾ž¶nÝJÕÕÕ´oß>š2eJ³õPxx¸z=R·M™2…d2ÅÇÇ“ýüóÏDDTUUE¥¥¥êçÙÛÛÓõë×[Ý.M¼Om¼ÛSGGGH$õòÈ‘#QXX¨^61iúJ”@ €T*U þþâû‚‚¸¸¸4ë×Ù¹éËÁ999ÈÌÌÄàÁƒÕ±±±(++ëT}"‘ÖÖ¿ý‚qO¿o¶&Æ;''NNNêe‰D‚5kÖÀØØùùùÍÚ`ذaÈËû힆¶¶¿Ý¡÷i¿³gÏF@@&NœˆAƒaåÊ•(-íü7÷µõ>u;àOžÃÌ™3»Ô‡§§'bccÕ{¢›7oâÇ›î_âåå…””dddjjjàææ†¸¸¸VûŠoõœ8_hb¼½½½‘ Þ©\¾| ,€H$‚··7NŸ>ììlÀãÇqøðaxyµóÒˆˆ¸»»C,ã…^ÀÂ… ñèÑ£6Ÿ¯«÷©ÛŸ0aV¯^©S§ÂÉÉ ƒ BHHH—úx饗àíí gggxxx`Μ9ê:t(6n܈ &ÀËË NNN9r$‚‚‚ZíkÕªUZ½¼•kšoÃÅÅ^^^˜6m"##ajjŠçž{¡¡¡pssôiÓàââ‚€€LŸÞþO..Z´yyy5j¼¼¼0oÞýqRþgªjkkéìÙ³tõêÕ.½înÞ¼I§OŸ¦òòòmùùùtòäIõAŒ®èÓAæSšï{÷îÑÉ“')77·EÛƒèäÉ“t÷îÝN÷§P(èǤS§NÑãÇ›µÉår:yò$ýòË/ݪ¹-èê7zº¢W¯^ðððèv?®®®puumµÍÞÞöööÝ^hj¼‡Š¡C‡¶Úöô€¾+¤R)&OžÜj›µµ5¦M›ÖÕ»­Ç’É0íagxœá5p†×XÀ^cgxœá5p†×XÀ^kó“̶îõfhd2™Vû‰‰ACCCÇOdþ”8p ^Ü—ðÂ{ V këNëÐæXŒ?ž…[C1pàÀëí ðíìÞÁîݯÂÏo,×¥0=›ƒ3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯±€3¼ÆÎð 8Ãk,à ¯éÅ ð}}w!--»SϽ~ýôëg¡åŠ¾Ð‹=xgÅaàÀ¿°p3]¢Ÿ3ç9ˆD‚vŸ# ±|¹§Ž*bøB/Þ§ &M ¡°ýrfÏ­£Š¾Ð‹€@@Àóhëp@$ÂÝ}8,-u\ÓÓéMÀ§Ow…D"jµˆàïï¦ãŠ>Л€›šJ1mš Äâ–!—HD˜6m$U1=ÞüüÜ T*›=&‹0}º+Œ8ªŠéÉô*àžž#л·´Ùc*øûã¨"¦§Ó«€‰áã3¦Ù\ÜÔTŠ©S‡qXÓ“éUÀ`îܱhhhš¦H$"¼ôÒ˜6>¦#zð_t„•UÓéÀ†%æÎegO˜?Oï. Õsnkk3Œÿ,Ç1=™¸­†Û·o벎fF¶8:Z!#ãgu 0ìÚ—ž¬Í=xqq1Š‹‹uY‹ÚðáÖ°³3ÇÂ…»KŠ‹‹¡P(8[?£mîÁ`ĈèׯŸ®jiæý÷çÀ×—»ÓƒçÏŸçlÝŒæèÝü)vî›Ñ½ 8Ãh 8Ãk,à ¯±€3¼ÆÎðšAüõ×_ǃ¸.ƒá€A<)) ååå\—Áp@c?sæ \\\`dd„±cÇâÊ•+ê¶C‡aÈ!‹Å°µµEdd¤ºmݺu°¶¶†T*…‡‡òóó;ÕvëÖ-Lš4 ½zõ‚““bbbr¹ûÛßðõ×_ÃÒÒ®®®Ëå BJJЦ6—é)¨ çΣ¢¢¢¶š›ÉËË#333Š‹‹£ššÚ´i 4ˆT*UTTT*¥¸¸8R(ôÃ?P($¹\NIIIdggG÷ïß§ŠŠ òññ¡¥K—µÛVUUE¶¶¶E …‚’““ÉÜÜœ.^¼HyyyÔ»woòóó£K—.ÑãÇÉÖÖ–Î;GõõõÚž®n?£¿Úý¨¾³¾ûî;¸»»Ã××±XŒÚÚZáÒ¥K;¶éº’gŸ}‰åååêk=êêê`ff†˜˜444@»m‰‰‰°µµÅ[o½øë_ÿŠÅ‹C&“!44µµµˆŠŠ‚@(ÂÒÒ‰D›Ëô  xNNœœœÔˉkÖ¬Q/_½zï¿ÿ>²²²Ð§O¨T*ÀìÙ³qöìYLœ8–––ðööÆÚµkaiiÙn[NN2331xð`õ:jkk1sæLM~nưidnff†²²²f9råååˆÇÚµk±nÝ:Ü»wÿýïalÜô…"ÂöíÛQRR™L…BÿÛÌÍÍ1yòdäää4ûÛ»w/@ hÿ.YŒáÐHÀ½½½‘¹\¸|ù2,X‘H„üü|8;;còäɉDHMMEEE ""îîî‹Åxá…°páBikrÞÕƒ¬•+WRß¾}ÉÓÓ“ÌÍÍ)**ŠˆˆrssÉÆÆ†¦L™B^^^4cÆ rtt$ÊËË£’««+yzz’……íß¿Ÿˆ¨Ý6"¢íÛ·“¹¹9yzz’½½=’R©¤¼¼<‰DÍj3f Mš4‰®\¹Òéía™üÐæí“ÏŸ?ßåëÁïß¿`Ĉxæ™gÔWTT -- 6665jòòò©S§¢®®iiiP(=z4lllÔ¯k¯ pûömØÛÛÃÅÅ¥ÍºŠ‹‹qýúu<ÿüó°²²êÔ¶ü™ígôFÎ'†¾ý|aŸd2†‹œá5p†×XÀ^cgxœá5p†×XÀ^cgx­ÝËe‹‹‹;üi?†ÑgíüÉ“'xò䉮jaӋߪgmaó†×XÀ^cgxM à×E0Œ¶ü?þ·_.„hâöIEND®B`‚bm3.7.0/doc/html/a00135.png0000644000175000017500000011655011365042632013252 0ustar tlktlk‰PNG  IHDR›¸u¡bKGDÿÿÿ ½§“ IDATxœìÝyx”õ¹>ð{–ìÛd™ÉÌdßA‚B{ÚJ­íq§¶õ¸·jý©µG­¶õ¨­å´Çªuk]j(âVP«G#„UD`’ÉžL2Kf²LöY¼3o ÀIÂý¹®¹fÍ¼ß !0÷<Ïó•x½^/ˆˆˆˆˆˆˆˆˆÎÜ>i°W@DDDDDDDD³Ã&"""""""" †MDDDDDDDD0ò`/€ˆˆèlÛ³gZZZ‚½ŒéŠ+®öˆˆˆˆh†‘p@8Ívë֭Æ ‚½Œ‰ÿM """¢S´•MDDtNX½z5~õ«_{3Fyy9}ôÑ`/ƒˆˆˆˆf Îl""""""""¢€aØDDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆŽÑÖÖ†?þø¬c``6lw9P†††ðúë¯ô9‰ˆˆˆˆ&ƒaÑ1ZZZ°yóæ³zŒþþ~¼úê«ã.ÊÀÀ^~ùå€>'Ñd0l""""""""¢€‘{DDDÓ‘×ëÅÓO??þ¡¡¡¸üò˱nÝ:Øívüö·¿EII 6nÜ—Ë…[n¹MMMøä“O “Éð³Ÿý _|1 ¼¼/¿ü2L& ®¸â \}õÕ'<öÁƒñôÓO£¥¥·Ür –-[Ø¿?ž~úi´µµ!++ ÷Üs Žû\~ø!^{í5ôôô`ÕªU¸ï¾û ‘H÷""""":+›ˆˆˆ&PSS™L†wß}<òÞxã lß¾.— @__6mڄ믿øÃ P(ðÞ{ïáŠ+®Û×ðÄOà¶ÛnÃÇŒ_ÿú×xñÅÑÝÝ}ÜãvuuáÁÄW\>ú·Ür þë¿þ ­­­èèèÀÃ?Œo¼|ðÊÊÊðë_ÿ^¯wÂçòx<¨®®Æë¯¿Ž—_~•••8xðàYù~ù±²‰ˆˆhÑÑѸùæ›!—Ë1oÞ<|ÿûßGyy9æÍ›¯×‹k®¹‰‹-‚L&ÕW^)^ë­·!!!øË_þ‚¼¼<€F£\.G?BCC'GDDDDSmtDDDèéés½»»111§ôUUUx饗pÝu×áÿ÷ñüóÏ·É/22rܱív;¢¢¢‰¾¾¾1÷UVV²Z‰ˆˆˆˆ¦†MDDD0™LصkaöÒæÍ›QRRrJÏÑÑÑŒŒ ÌŸ?R©GŽÁÀÀÀ ¿æ‚ .À¾}û`43œ***°hÑ",Z´;wîg>ét:<öØcJ…ΫªªÐØØxª/•ˆˆˆˆ( ØFGDD4ââb<ûì³xóÍ7a0——‡µk×Ân·Oú9–-[†×^{ ?ÿùϹ\FƒgŸ}wÝuׄ_“››‹+¯¼7ß|3 ¡×ë±jÕ*,^¼°zõjüä'?ANNª««që­·"""ðÌ3Ïà’K.AVVÖ™ˆˆˆˆˆN“Ä{²áDDD3ܺuë`6›ñ«_ýꔾÎápàÈ‘#ˆŽŽ‡|Ÿªèt:ÄÇÇ#;;‹F£çwÞ ¿Îd2Á`0@­V™Óƒ&“ éééP©T§µ®“)//Ç£>zÒSDDDDDÇØÇÊ&""¢ã ÅÂ… Ïè9"##±hÑ"ñºJ¥šT@¤V«¡V«'¼/55u\EDDDD4]pf Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆˆˆˆˆˆ(`6QÀ0l""""""""¢€aØDDDDDDDDDð‰ˆˆ(ˆ†‡ÝÁ^Q@1l""" ¢·ÞÒÁåò{DDDDD#öˆˆˆ¦Byy9ÊË˃½Œ1$9ÔêÛñÆÏbpPìå„Äëõzƒ½""¢³iÏž=hii ö2Æ9xІW^©Avv ~þóyÁ^΄®¸âŠ`/ˆˆˆˆf–} ›ˆˆˆ‚äúë_Â'ŸFh¨‡?Šèè°`/‰ˆˆˆˆèLíãÌ&""¢ èíBy¹Ð:çtºññÇ_yEDDDDDÁ°‰ˆˆ(>úè<a0¸D"ÁÛoäÃ&""¢ Ø´iŸxÙãñ`ÇŽ:tvöqEDDDDDÁ°‰ˆˆhŠY,½Ø½»Ïر‰[¶ ÒŠˆˆˆˆˆ‡aÑÛ²å¤Rɘۼ^/6mb+Í| ›ˆˆˆ¦ØÛoïWÕäñxqà@ †® ­Šˆˆˆˆ(06M¡æf2Œ ›@&“`óæAXQà0l"""šBï¿ÿ%ärÉ„÷¹Ý¼õ[鈈ˆˆhfcØDDD4…6múNçøª&ðz½Þ½Þ4Å«""""" †MDDDSD§3¢¡¡ÀÄa„„Èðþûl¥#"""¢™‹aÑyï½ý'}ŒÓ鯓Oþ߬†ˆˆˆˆèì{DDDç —ËåËó%Þ¶eËAœ~RRâ½½CÙ܃ää¸`-•ˆˆˆˆè´I¼^ïñkù‰ˆˆè¬Òjÿþò—ëðýïŸì¥Â>¶ÑQÀ0l""""""""¢€aØDDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆˆˆˆˆˆ(`6QÀ0l""""""""¢€aØDDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆˆˆˆˆˆ(`6QÀ0l""""""""¢€aØDDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆˆˆˆˆˆ(`6QÀ0l""""""""¢€aØDDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆˆˆˆˆˆ(`6M`Æ H$gý44T‹«¯þîY?κuë‚ý-%"""¢s„<Ø ""šÎÞzë­)8ÊÏê³3h""""¢©Ä°‰ˆˆè®¸âŠ`/ጽÿþûÁ^CØFGDDDDDDDDð‰ˆˆˆˆˆˆˆˆ†a Ã&"""""""" †MDDDDDDDD0 ›ˆˆˆ ®®¯¾újÀŸ·¿¿?þxÀŸ—ˆˆˆˆèlaØDDDÕÕÕxþùçþ¼½½½xøá‡þ¼DDDDDg Ã&"""""""" †MDDDâñxpçw"66*• ¿ûÝï6› kÖ¬ÁŸþô'hµZ(•J¼üò˸÷Þ{¡T*¡Ñhðæ›ožð¹ÿö·¿!##QQQ¸þúëáñx¦â%2†MDDD²oß>„„„Àd2áÝwßÅO<·ß~N§[·nEww7ÚÚÚðÈ#à†n€R©„ÅbÁÝw߇zè¸Ïëv»ñÅ_ ¶¶‡Â{gíÛ·ŸÕ×Ò×7ŒmÛªqà@ËY=Í> ›ˆˆhVs8\pLɱ ~ÿûß#22Ë—/Çí·ßŽ 6ªž~ùË_B"‘`Íš5Ëå¸çž{Äë½½½'|îG}¡¡¡ÈÉÉÁœ9sÐÓÓеwuõã“Oã7¿ykÖ¬GQÑý¸öÚpð Ã&"""":5ò`/€ˆˆèl²Û‡0þCP©bñïÿ¾%%9X¼8 qq‘?VNNBBBÄësçÎEyy¹x=** ‘H¹\.^?™L¥R)^?Ùã'ÃdêÁž= ؽ»5hj²ðB&“Áår‹ÓëMg|,"""":·0l""¢YÍífY,vüíoxî¹mH€œ%JK °dI6JJr RÅœñ±¬Vë˜ë‹ gü¼08(ÃÆ{±kW=ªªjÑÞÞ©J¥p¹Fæ?š 33iª—JDDDD3Ã&""šÕ::FÚÓœN!Hñzº: ššløûß«àñx‘’’€²²|””dcÉ’ìÓ:VSS>øà¬]»½½½xá…ðÓŸþô”Ÿçý÷ßGnn.æÎ{ZëíwöaçÎ$ K±{÷J¥âpq'4>0à<ã5ѹ…aÍjmm]ǽotO[['Þzk/6nÜÇ HL¼ÿøÇN\~ùˆˆ=é±JJJp÷ÝwcýúõÐëõX¸p!n¾ùfØl¶SZó]wÝ…o¼1 aSBB4 Ìæp'—ŽõÆ;188Œ¸¸ÄÅE"66qqˆ€B!œÇÆF $DvÆk%"""¢ÙaÍZÃÃ.ÄÅELúñþ–;?¹<r¹rùɃ”µk×bíÚµ®]»‡óÏ? V«áõzÅÇæææ¢¯¯O¼¾`Á˜L#³‘šššÄËjµ.—ḵªªª&ýš’’¢1vÄ“€÷8ÏãÊËb`ÀîîAØíƒc^‹_dd¨DÅÅEŠÔñ©co Ä*""""š6ÑŒÕ×7Œ¶¶.´´Ø`0t¡­­ C' áÜb9ño'#•†cË–¯°ví‚IW‡cÕªUgtÜ@r8Üèë½öÉMÐÞÞöön„†Ê¡Õ*P\¬J‹„„(ÄÄ„#22 ‘‘¡Ë¥p:ݰÛÑÓ3rjkëBORÙíƒèíšð8±±áã*§FŸO|›ðøèè°3øQ I¼}†MDD4½¾àh$@2:ÑÚÚ ƒ¡}}ÉD•*Z­ E$ÂÃ…ùI‡ vû ,;ÚÛ»Åà11áHOO„F‡¶¶.ètÆI¯)$D†‚5êëÍèéiÄý÷ß„Ûo_°°™Y üÁ_ᡇž‡Å†E‹²ÑÐ`CºÉü 11 øÃU(*Ò --2ÙØ€¦¿_¨.koïF[[ŒÆ hoB©¶¶®1QBBÔ˜ ÊB¥¤( ÕÆ#99ö„Ud‡kT8å¤ÐÕÕÎNá¼»[8ïê€ÍÖ‡®®~ñgi´ØØp$$Dû¨‘ jtX5r.Ü2Éï<Ñ9‹a=f³--6_x4¶Å­µµÃÃÂ,"™L µ:©©ñHJŠATT($ \.7ìö!Øl½hié„Õ*Ì9’H$P«ã™™ˆôôDdd$"33 ÑÑa0™zpøpvïn@m­R©dÜ,¦Éòxúqôèÿ !!*`ß“©æõzQVv3êë£OëëŠHôôsšÂÂäÈËKF~¾jñ<==Réñg.uvö‹Á“¿"J¸Þöö.˜Ív1(”J%P*c‘š:º:*aLµ”JsÊ3žœN7:;ûÅJ8ïs›pyä¾®®qq¡Ç­œ*«FB+ÿ}11á§þ'"""š¹6Ñé³Û‡Ä0©¹Y8oi±¢¥¥--61L ‘!%%^¬d‰Š Ch¨ .—ýýðÙúÑÒbCs³Uüš°0922’‘1&ùƒ¥ŒŒD„†ÊÑÒbÃîÝ Øµ«{ö4 ©ÉŠæÏOÃ’%Ù()ÉÁâÅÙXºôÑ1-w'"—K!‘HpÉ%)xî¹»O¡ýnúZ·nìv9L¦˜Í=p¹&¾mÛöK¤¦&@¯7A¯7C¯7¡¦Æ½Þ ƒ¡ ^¯áá!bUX¨F^^2 „J¨…P~B»ãèŠ((ÕÞÞ ‹¥Wü³ ‘A£Q@£‰Cjj‚ئ7ºZJ¡ˆ<íï—Ÿ×ëçîîñaTggÿ¸«³³_ ÎüBBdã*§Šcêñ•U“ùÞMC ›ˆˆèø †®QA’Íw.ww©4JOOÛ×ÂÃCàñxáp8aµ ¹¹V=bh”-J£Ã¤ÌÌD$'Ç[Om­»w×cÏžìÚU£±aar,\˜¥KsPR’ƒE‹2:æën¾ùïøàƒƒ'}½r¹ iiñøë_¯ÇÁƒÛ°nݺY6ÀóÏ¿„ûïï½÷%œôµÅÄ„£¦æwǽ¿¯ouufTWQWgN׎ÚZ!„„* !xR#?_£òóÕHOO8­Ê$›Þ±A”ÁУ±[üyô{t›ÞHF¸z‚#ž¾þþa_¥TßÕÄUUýýãÛüüÕQ‰‰Ñâ¹R#TIIÑHJŠï›ì{"""¢³lßÌ@ADDáñxa6÷ˆáÑè ©¥¥fs<!ˆ‹‹DFF"ÒÓ°|y”Êó*‡ÛíAo¯PáÔÔdÅöíÕâ.pR©Z­™™Jdg«pñÅÅÈÌLÛߢ¢N¼‹Xkk'*+õ¨¨¨ÁÎu°Zû† .ÈÄu×-ÅÒ¥¹X¸0¡¡ÿsf·aÏžzH$'U¤R </.¿ü<öØŠƒ'Ϧfœ˜˜p<ó̱re!~ùË·àtzN8,|á ¼ûî~¬XQ€ÄÄñmxÑÑaX°  ¤¹½¯oØW %œª«Mع³mmB9:„iÇKM?n"óýì$w½£çG¢ÚÚºðÅ 0ÆÎR("¡Õ*ÆTÝù«¥ü¡Ôé8QQaˆŠ Cjjü¤¿Æáp £l¶~Øl}¾ ª>´´Øðå—Íâõc+¨bbÂ}aT´H©TÂõÄÄ($$Dûªh$$DÏØ9dDDD4ý±²‰ˆh–ëîðµ¨T'ùÛÞ †.8#mkéé‰buRZZ"’’¢Hàp¸`2u£±ÑЦ&+š›­âü$¹\ŠÔÔdf&!++ B˜”•¥ÛÝ&«§g;vÔ¡¢¢z45YŠ’’l,_ž’’Ì›—zÜ]ÄØ»·UUµØ¹³‡àñx‘ŸŸŒÆÆ8フBBäxòÉk°víyâí6l˜•M;vÔᡇ~¹Ü‹ßÿþ×HJŠFbb4::zqÓM¯¢ºÚxÜ™VßüælÝZ ·ÛƒùóÓ°jU!ÊÊ °hQæiíäf·¡¶ÖŒš#jk…Š(½Þ £QØñ/**L ¡òò’QX¨A^^2ÒÒÎä[0†~ÔèŠ(ÿPó¶¶±ó£üƒéG‚(Å1—P*cƒÖîf·Âjí)›­½b{Ÿÿºÿ~ÿßu¿¨¨0(•1bå¯JJnKLŒ†J+þ̰rŠˆˆˆ&‰mtDD3ÃáBs³¿"É*I--hmµÁn02„;##ii b° ¯× »}V46v ©ÉŠÆF«Ø–"Cjj²²„Ê’ìl¥.¥¦&œö›P§Ó/¾hDEE *+õ8tȘ??¥¥ù(++À…f÷ùöïoÆÎµ¨¬¬ÅÍp:ÝÈÉQaùò<\tQ.–-ËCBB~ò“¿áóÏucæI¥Rœw^*^xá'ãªPfKØÔ×7ŒÅ‹ïAw÷Ø]ÔBBdˆ‰‰àFgç ïVï˜ûß|ó6ÄÄ„Á`è¶mÕØºµ­­ˆ GiiV­*ĪU…Ðhg´F»}z½<ÕÔ˜PS#TD™L=„ *ÿ¨‘áäÉHI™|åÐdùçG ݾ j$”òWMh~Ôè6½ÔÔx¤¤Ä#66"àë<}}ðZ{GUKõ‹aÔDÕè*0@hëóOJeŒJ©T±bh•”¥2æ¤U‹DDD4«1l""š ìö!47û«Šlhl´¢¥E„L¦‘V·ÄÄè1A’ÿ<**CCN c¤¦&+z{…0*4TŽŒ ¡"É*ù+•RRâO«’åX^¯ÕÕFTT­q»w7`pÐÌÌ$”•壴4Ë—ç!.nâáÎ.—‡µbÇŽZTUÕbß¾& :–– K¥¥yÎ{Ú²å n½õ5x½^±åÎ;¿»ïþ· _[ Â&§Ó={°|yÞ)mcc¤R)22Ïh ×\óC|õ•b\à4yyÉØ¾ý?ÅëuulÛVíÛ«±sg=(*Ò`Õª"¬\Yˆ%K²VÓÓ3 PÂ`ráÜl¶ÚÆFW@ùϵÚ3 ¿NÆét©ˆ2{ÐÞÞ…¶¶‰çGÅÄ„#%%ii bÛž¿u/%%ÉɱÉÎüïW õ÷Ãb±‹ÕSK¯/¬êGG‡] ª::úÐÓ30ækÃÃC”ääX_Ÿp91qüåÄĨSžáEDDDÓÃ&"¢éÂbéEs³Õ$ÙÐØØá;·¢³SØIM&“"%%™™#Cµ…€( ÑѰX쨯· ¡Á‚ÆF+„`É?|8""™™‰ÈÈH(ef*¡Õ*ÎJ;ÑØŠ =*+…SGG/¢°|yÊÊ PZšÜ6)Ç ®Ý×W‡Ý»ëÑÛ;„ääX\tQ®¯z)oRaŒÝ>„ÂÂûJe žþÇXº4gÜã¼^/ZZ:ñ׿nÄŸÿü¨Õ‹æF^^7BBŽ?ßh"n·GŽ$")iZíävÃÍááÀ%ŠŠ:ë8å¯÷Û´i®¾úZÄÅý>øà NNÆ“O^‹+¯¼pÂû†‡]ؽ»[·êðùç:ÔÕY†åËó°jUV­* h œ_OϪ«GPfèõFqVXll8òò„ (ÿ\¨‚5Ôêñ!äÙ20à€ÁÐ)ÎŒjo*£Z[Ç·ëÉåBÕáñ©ÔÔ„qCï§§Ó ›­VkÌf»ïrï˜Ê)ÿí6[ߘ C™L*¶í)•#URB _ ’’¢¡ÑÄ!1Q¸Ì]úˆˆˆ¦=†MDDSÅãñ¢½½[¬,[¥d¡°0¹oîÑH äª…ÖÖN_dACC‡xòWR„…É‘•¥Dv¶Òw.„IYYISòfÛãñâÀf|úé”—ëpäHÂÂäX¼8eeBkÜœ9)Ç}ÃX[kÆŽuرC˜ººú…¥Ks°lY–-ËE~¾ú´ÖvÉ%ÿÇ‹ nA||Ìf;jjŒ¨®B‹C‡ZQ_o×>´p¡QQÎã<ëÄ„ H§SйsmP(†NkÍUU)€9slˆ?½ç€åË—ãg?»<ð6^}÷¤'¥2ûöýzÒ•J­­Øºµ[·êPUU‹þþaäæªpñÅEXµª%%9gu(uWW¿>ÕÔ˜P[kBuµQœ/ü|5 ÕcÚñ&ª„;ÛÜn,; †®Q”På¤üU‡€0ÌÜ@¥¥%ˆ;ìù)•*fFUùC§±URýc*©::za±ØÇü}”J%¾V¾_%´ô%' Á”p.ÌšR(&®$""¢³ŽaQ  ’MMB4ºÂÈ? 766B FB%a vRR4š›m¨¯©Njlì@}}Ìfa†(wv¶ÒwR!;; ÙÙª³V¡t"vû¶o¯FyùQ”—ë`³õ!==kÖãߘs¡¹Ù†;kÅê%³ÙŽèè0,]š+V/iÏè5 9ñÕW­Ø½»&SŽmƒNgD_Ÿð…„Èàñn÷èÊ% d2 ÞxãÖSnkhèÀ•W>‹övaðõ×_ÿׄ»¹MÆw¾ó$l†L&Åÿ÷U¸êªÅ§õ<~^¯=öž{îsœè2™<°·Ý¶ê´Žãof=é Ó&GIIV­*ÂÅ!7Wuš¯âÔtuõC§33œÜ›M¡ââ"Å*¨ÂBa.TQ‘ QS²¾ã±Û}­y#Rþ*©ÖÖNX,v14 •ûÂ'Ř@ÊJ¥¦&ÌØÝçúú†a6÷ˆUSvØl w{ŸÅ"TMÞ¡/4T.¶ò%%Å@¥Š…Jã»-J¥0_J¥Šö•cDDD3 Ã&"¢Óa±ô¢±±ClWkj²¢¾^”…v§˜˜ðQƒ´•ÈÉQ"3S¨4Š@[[‘( IDATט ÉÙ`èwÓj£*”FNéé‰Aߪ±±Ÿ~zŸ}v{ö4Àãñâ ³°fM1Ö¬)>nõ‘Ù܃ªªZ±z©µµáá!¸ðÂ,_åRÎ;/- 3¢üúú†‘Ÿ/Ì ‘Û2~"‰O?½?øÁ¢S:Öþý͸öÚ08è€ËåF\\tºÇOkÝðàƒïâÿwœN$ ~ñ‹oá®»¾yÚÏç÷ç?Š?üá_ÇI%•JñÄ—㪫–äÏÂhìöU=UcÇŽZtw --Á7d¼Ë—çMùPi›­ÕÕ&_øÔ½Þ Î(ÎR*cPP AaáØ *&&|J×y<þÙQmmB‹ž°£^·J ]âï#@x=£¨‘@J­6Þ·ûäÌfµ í{Vk/Ìf¡JÊdêJùçNþÙŒ (åªü¡”Z‡¤¤˜€þn"""š¥6Ogg?­¨¯· ©É:&Xò··DF†Šµý¡pY…¤¤h˜Ív_›ÛH•Ò±UN QÈÊR"7W5ªýMx¾ˆˆéói»¿R¥¼ü(>ýô: PDbÕªB|ãs°reá„m+ýbKÜŽµ¨«³ $D†… 3PZ*Ì\Z´(¡¡g·êâÿ؉ûï{Ríc‰÷ß n¿}õ)ãÿþï0n¾ùïp¹<ðx„À°¤$ï¾{ûi­^{m'~õ«wÄ7‰?üa üò3*ýê«;ðàƒïŒ œär22ÐÜlƒV]…k®Y°Ê·Ûƒƒ[ðùç:lÝZC‡Z!“I±dI6V®§¢"M@Žu:ÌæÔÔ˜ Ó ;äùƒ(«kjj¼¯J#†PyyÉ?õìg[ggÿ˜ðÉÙòϹ„¡Þþ¡å£)ÿI­Ž›–ƒÌO‡ËåÍÖ ‹¥Wœ%%TMõ¢£Ã.C7›ícÚ% ”Êh$% m|II1Ðj¾¹R 1”R*cÎúï4""¢iŒaÛœN7šš¬¨«†j×Õ §úz˸HYYIcÂ$ÿ ¤îîq†Òè ¥††ñÍiTTؘ ¥œ¥øÓy®ˆÍÖ‡Ï?ס¼ü(¶m«†Ý>„‚5V¯ª—.¼0kÜ›ÏÞÞ!ìÞ]ï«^ª…Ng„T*Á¼y©ḁ̂ŋ³§¼mÅåò`åÊߣ©ÉzÂÀI*•à–[V⡇.=¥çíµxà·áõB oBCeøÑ–á‘G¾ÚëÞ»·—]öô1k”bõêB¼ðÂOÎ8àxûí}¸ë® ¼ðåcH$رãH$<÷ÜçØ¸q/ââ"póÍ+qÝu¼²ÇfëÃöí5øüs¶o¯ÍÖFá«z*Diibcƒ[MäõzÑÚÚ‰ša¾WuµÑ7Ê ‡Ã™LŠ´´k}s¡„ *;[ô*Äq8\£Â§Ñ-{#Rþ`<$D&P©©BUTzúì £FrÂb±Ãl¶97™zÐÑÑ+žûgƒù%$CΓ“c¡RÅB­ŽƒJƒää8ñ¶ääØiR!†MDtn°ZûP[köBB(T[k†ÁÐ —Ë©T‚””xdg+‘››Œœrs…¶·”\.Z[;Q[kF}½HÕÖšÑØØ!î*Gff’Øê楲³•HNŽ òw`òêë-øøã¯ññLJqà@3BBd()ÉÁ7¿9«W#=}ìÎoƒƒìÝÛˆªªZìÚU‡¯¾j…ÇãEa¡˖墴4K–ä=,€òr®»îÅãÞ/—K±víüå/?œô°e¯×‹õë?ÆŸÿüéBR<þøåøá—žöšGï¢7šL&Åܹ)â°ó3ñ¯}[nù;<áïªU…øûßoï·Xzñâ‹ÛðÚk; •JñÿQŠn(=í9T'âñxqèP+¶n­ÆçŸëpð` $`Ñ¢L”•`ÕªBÌŸŸ6mv$s¹þðZ{ÇÝ"ƒF‡·Þúé¸ðTUVêqÕUÏÞ~ûg¸è¢ÜqééÀ+¯Tᥗ*10àÀµ×–àÖ[W"%%þŒŽ}"Ýݨ¨¨w¹³Xz‘˜+ pñÅEX±¢`Úý¬Âφ^oòÍj÷í’gBKK'¼^/""B‘——Œ¢"ï\‹‚5´ZE°—~J& £FR' £FR³=Œòs»=b‹ÞèÓ±ÕRVkï˜ßS‘‘¡cZõTªhµñP«…ª©ää8¨Õq3v<Í* ›ˆhæéé@m­z½uuÂy}½E¬-“I‘š*ByyÉÈÎV‰•JÉÉqp»…*%u“¿ÚI¯7‹»S…‡‡ø%•/T ¦fçË^¯_~Ù‚?þ~øšš¬ÐjøÖ·æá’KÎÃâÅ#íq_m@e¥••zìÛׄÁARSãÅÞ¥¥yAÙ>~²:ð‹_lÄÞ½øþ÷ÏÇ;ïìS…"Cff"¶lù“®ÀêïÆ 7¼Œ;êÄîÑëèè3|}õÕÏ¡¢B?á}r¹±±áxãÛ0o^êgß¾F<ñÄGØ´ég'|Üà ¯¿¾Ï?¿½øÁág?[}Öw—óz½¨®6bëÖjlÛV={àv{0~V­*ÄÅaÁ‚ôiXô÷£¶V „yPFTW›Ä&ccÑŸ/ %/*Ò °P‹¢"Í´n·=‘ã…Q­­â©“…QééBËÞ¹Fùy½^ttô©’joï†ÕÚ‡öö.ttø¯ ¥¢œ ­V¥R8ON)F•*Jeô¤«7‰ˆˆNÃ&"š¾:;ûQ]mD]z½I ˜üoÊ¢£Ã››Œ¼¼d_¤ôKJ„†ÊÑ×7Œºº‘¶7¡}Nh¡ó¿¹INŽƒ¤Ñ¡RJJüŒhq9^¯_|ш͛â_ÿúFc723“pÉ%çá’Kæã¼óÒÄ7MMVTTèQU¥GU•°s˜Jƒ‹.Ê«—22ά’f*8n<óL9žzêSäå%cýú«pÞyiøùÏ7àý÷¿„Óé†\.…B…O>¹ÍäªJ„€å47Ûàrg;•*þöŒ_Ç£nÁßþ¶ÇÄǒɤðx¼Ø°á¬XQpFÇr¹<“ÞmËétãÝw÷ã™gÊÑØØo{>î¸c5æÏO;£5LVÿ0ªªj±u«0h¼µµ±±á(--@YY>V®,DZZ”¬åLõô ŒHîPœ‡¢" Š‹µâPò‚õŒB}¢0ªµµííÝ“ £ÒÒ RÅžSa”ŸÇã«¡Ìæ´· m{ííÝ0™z|'»¸Ë" |/•J¡2ÊD©Õ±HNŽƒV+RZ-[÷ˆˆè´1l"¢à3›í£Â$êê,¨©1‰UFqq‘ÈËKF~~2rs“QP Fn® ii ðz½0º|msæ1­s&“J…„ÈĶ7µSn® ÙÙªi1Gèl;x°›7ÀæÍÑÞÞÂB ¾óù¸ä’ù(*Ò4ïØQ‹Š ¡z©µµQQa()ÉFiiJKóQX¨žQŸ„ïÝÛ€ûîÛƒ¡÷ÞûmÜxc™¢ÝX²äQ¸\nDF†bË–»Ni÷³›nz~ø¤RÉqÛç$`åÊB¼þú-güZ6nÜ‹{îyó¤;éÉåR|ñÅÃS^eæñxñÑG‡ðôÓŸáë¯ X±¢wܱfÂV¼³©®Îâk¹Óa÷îô÷#33 «V¢¬¬Ë–åq•ÙT3»QScÂÑ£í¾*(!r8\Ë¥ÈÌLBQ‘ÖW¥™Qó &ãdaT[[—Øâ|²0*99nÖ|_NÇÐS ŸÚÛ»a±ôÂhì†Ùl‡ÑØí «ìb¸êh4 _çk׋…F£«§’’b&PÑ9ƒaM¶¶.èõfÔÔ˜Äö·ÚZ³øikBB 5ÈÍU!?_¼<¡jI­ŽÃà õõ¾ ÉŒÚZ‹¸ûÛà ˜=¦ÝÍ*¥¥%œsŸvëtFlÞ|ÿüç45Y‘­Ä÷¾·—^ºj :°gOªªjQQQƒ£GÛ!•J°`AJKóPZšE‹2§õ.ZÇc·âÑG·àõ×wcåÊüîw—O8Ïè7¿y/¾¸o½õS,_žwJÇðx¼xç}xüñ`µöMØF*ÃM7­Äƒ®=í×âwèP+¾õ­?Mx_Hˆ 7ÝT†»îú&bc#Îøxgbûö<õԧص«‹eàÎ;¿5kЧ<¨t:ÝØ»·5ؾ½‡ •JpÁYbÕÓ¼y©3òwƒËåAcct:£@étíâ<¨¨¨0äç s üTq± g6H~:ªzN/ŒJOO@FFÒÓ‘‘‘ˆ¤¤é7û+l¶>X,½hkë‚Åb‡Ñ(TL™Ív_HeGGÇÈ 9©T"ΑJNŽCjj¼¯e/NlÔhœ%EDtnaØDD×ÕÕ£GÐëÐé„SM}}ÄÖ5˜”Ÿ/T)¨‘˜ “©uußÉ,¶¾µµuÃëõ"$D†´´±uN˜©$´ÀÍÔ™&ÒÐÐþS˜ôzRSãqé¥ ñ½ï-Dq±‡ùç.Õà‹/šàp¸——ŒÒÒ|”•åcéÒÜ€oi?Õ6o>ˆ‡~^/ðÛß^†Ë.;ÿ¸íëFe¥ßþö¼Ó>ÞÐ/¼° O>ù)<ø¦Þ€=ù䵸üò NûùýÈÍýÏ1s¦är)Ün/.¹ä<<ðÀ%ÈÌL:ããÒþýMxê©ÏðÙgGQP Æí·¯Æ¥—. Z„ÍÖ‡ÊJ=¶oÂ'“© E$ÊÊòQVV€•+ gÜpîcõ÷C¯7ãèÑ6TW ;ã=Ú.TÆŒ©‚**Ò ?_ðð ¯üìñx¼0›{`0t4ŒŠŠ ƒ§ŒŒÄ1—ÓÒf|Ëb 9n_Õ “É>ª]¯mm]0…Ë£«¤’’¢Åà)55^lÙÓjÐhâ ÕÆ3""š=6ÑérB¯7ùæŒøÛ-/(Ð 11MMVÔÔÅ9Lþ¹JCCN@JJ¼XÙ”›+T+åç'O˭̧ ‡Ã…O>9ŒwÞÙ­[u “ã’KÎÚ5sàp8Å€©­­ QQa¸è¢\”–棴4ê`/? \.^~¹ë×ÿ MÖ¯¿ K–dOéxàmüë_‡±sçhmíÄ#lÆçŸëëª\vÙSØ»·))ñøÍo¾‡ï|g>~ùËMøüsªª˜öoÀš›mxî¹Ïñæ›{¡PDàæ›WâG?Z6-f( »°woƒXõtôh;är)–,ÉFi©Ðr7gNʬ _Ünšš¬bå©N'TAµ´ØàñxŠüüdßïô‘j(¥2&ØKŸRvû <¡ZZl¬Š «µOœ5Huû);ÚÛ»0<<HÅÇGA­Û®§ÕÆC«ƒZ­@JŠlNDd ›ˆh,‹¥ÕÕícfèõf :ÄOÀ‹‹ýs@„OÀ5šš¬ÐëMâ¦ÚZ¡ÎétC*•ˆ­oùùjßIö=ÞhÎ^¯{ö4àwöcË–èïw ´4sæ¤bx؉;ë Ó!“I°paÊÊ„péüó3gíàÖC‡Zqß}› ÓµãÎ;×àŽ;ÖLùº††¬\ù{üþ÷WàÚkKÄÛwî¬Ã?þ±Ï=÷£€ëùç·n¸¡T¬î³Xz±lÙcâëŸ Ìf;þú×íxíµÉd¸þúå¸á†Òi0[,½¨ªÒcëÖjTVÖÀbéEbb4JKó±bEV¬(˜5UÇtˆ­xþñtºvX­Â† ‰‰ÑbøT\¬Eq±ùùê WªƒËåA{{׸ŠUQg³õ‰•Pþ]ö„ËB ÕÖÖ%~ˆ E¤H%' TjjRRâ‘’"TM1$":«6«¼^/š›m8|¸ GާC‡Za±C?““cQP S­”žžƒ¡ z½I¬Rª©1¡¥Å&n—žžž(V)jÄ!ÝÓ½êbºji±aãÆ½Ø´é  ]ÈÍMFzzz{‡pð` œN7 ÔbåÒÒ¥¹³>Àp`ýúᥗ*°hQ&Ö¯¿ ¹¹ª ¬åÆ_A}½Ÿ}ö‹  šþã?Á‹/nÃÎN«ÀædzzðÊ+UøÛß*08èĺu%¸õÖUÓnn’×ë…NgĶmÕ¨¨ÐcÏžz »PT¤«ž–,Éžõ•Vkߨ"Lb54ä„\.Ev¶ EEÌ™“‚¢"-Š‹5Ðh¦×ŸåT;Õª¨ÌLUTÒ˜ª(¶ŽONWWÿ¸v½öö.´·TJ¤ü»é¥¤ÄC«Uˆa”ÿ6†€DDg„aѹÀét£¶ÖŒ¯¿6àë¯ 8r¤ G¶£·wr¹¹¹É˜3'sæ¤`î\-23•°Z{QScòÍSÎ[[;áñCºý»½ ÕJBÅRNŽŠÿ)‡Ã…>:„7ÞØƒ;j¥2KúúHNŽ+—JKó‘œì%O™òrxàmØíCxè¡ïâšk–Lù.g~ûö5âÒKŸÂßÿ~#¾ñ9AY „oË–=†ï|g>{ì߃¶ŽÓ50àÀ† »ñüó[ÑÑÑ‹ü`n¿}5rr‚ žŒ'ÇmÛªQY©‡NgDX˜‹gcÅ aÐxQ‘&h?—SÉíö ±Qh±>r¤ :FµµuªKæÎMS UP 9'« Žu*UQb\kžÿòL ˜§«µÏ@uÃ`èB[›pjoïöí¾×+nÄ&Gjj‚8?*55©©þʨx¤¤p 9Ñ 0l"šmz{‡Äÿøû«–ª«p:݈ˆ?yž;7YYIɤhl´ŽªV²ˆoÂÃCÄÞ„j% 5ÈÈHšµ­YÁ¤Óñ׿nÇæÍ04äDh¨CCNÄÄ„£¤$G ˜òóg×ܥɰXzñðÃïaóæøÞ÷â‘G¾ÔÙ1^¯ßûÞÓ “aÓ¦Ÿm~o¼±¿üå&lÝúËiÒœŒÓéÆ;ïìÃ3Ï”£©ÉŠï|g>î¸c æÍK öÒNÈlîÁ¶m5¨¨¨AE…6[Ÿ8ˆåÊ”–@¥:·æõô àÈ‘vTWÅüíØr¹YYJi1wn …jºU´Ûd«¢¢£Ū¨3átºÇ„OÃÈåöön´¶vbpÐ!>^©ŒW5úú¹ôaÑ16ÍdK¯Øwø°‡ÐÜlƒ×ë…B‰ùóÓ0wn 23‚‡ož’ z½Il™‹ŽCn®P¡4R­¤Fzz⬈;™L=xúérlÙrV«ðç!•J°`A:.¾¸eeùX° 㜠÷¼^/^}7}t ââ"ðøã—cõê¢`/ ~øn¾ùïøè£ÿ‡óÎK öràv{ðÍoþ722’ðòËÿìåœÇ‹>:„§žú‡·aÅŠÜyç7°tiN°—vRGŽ´‰UO{ö4Àåò ¸X+ÎzZ¼8ûœ¬†ð$?r¤:];ŽN£« Š‹µ(*ÒbÎá¼°UP]ÕÔ4>êé_•‘‘„¬¬$dfŽœÏ–Ý§ZWWÿ˜0J¨ŽêèŽ;<áíUh¨Ü> ”Ъ§ð 4W --cˆh¶bØD4SØíC8t¨4㫯Zqà@ ŒÆn·­ÎÈHDll¼^¯o«ka`wWW? 66bÌpnµRjjü9Ñò1¸\|õU 6nüŸ|ò5::„€)..+VàòË/ÀÒ¥9| ®Î‚{ï݈/¿lÂ7–áÞ{¿ÈÈàÏÅq:ÝXµê ÌŸŸ†gŸ½.ØËmÝZuë^À{ïÝ1å;ò-[·Vã™g>î]õX´(wÞ¹kÖϘßWìÚUmÛª±}{5êê,ˆˆÅ’%ÙX¹²¥¥ù(*Ò{™Ae·Š”NgÄ‘#Â,(ÿ¦ÙÙÊ1³ ŠŠ4HI‰ö²§µžžqUQMM645u ½½[ BTªde)}”rLäW1s9nÝcZõüá”? êÔÔ¤¥% -MhÏKOOo›ís‰hÖbØD4 »pøp¾úª §úúx½^¤¤ÄcΜh4q A_ß …í«ýŸfÆÇG¡°P-V(ù«•fëîIÓ]m­••zlÛV;j18( (Ä·¾5·ßþ de%y•Ó‡ÃáÂÓO†§žú ÅÅZ¬_æÎM ö²D¯¼R…ßþöŸ¨¨øO¤§O¯?·«®z}}Cøàƒ»fL 3û÷7á©§>ÃgŸEa¡·ß¾ßýî‚Wñ×ÞÞ-¯¨¨Aw÷Ôê8±ê©´4Ÿ3x TA57ÛÄù‚þñZ[;áüœ9Z±oΜ¨Y!2 ‡ ÍÍ646v ±ÑЦ&«xÞÖÖ·ÛHJŠFFF"23•ÈÊF)‘A~3_OÏ€Fù©ÖÖN´¶v¢­­Kü þO—–&TD TÃ("š 6›Ûí^o«–l…N×§Óøø(äæª˜ ©T»} Â'“Ž‚a·¸ÂB Ô((PóÍJY,½¨¬¬Ae¥z˜L= “ÃãñÂãñbõêbÜqÇj,Z”ì¥N;»vÕã¾ûÞ‚ÉÔƒûîû6þã?Jƒ¶ËÛDz{‡°lÙcøÁá7¿¹,ØËçÈ‘6üÛ¿ýÏ>{.½ta°—p:];žyFh;MI‰Çm·]Œ«¯^<#·0÷x¼8t¨U Ÿöík„ÇãÅœ9)X¹²eeX¼8‹3wF±Û¡ÓqôhŽΫ«Gª ²²’P\¬EqqŠ8œUP“çtºa0tŠáSCC‡F âœ(…"rTKžÒwY8OHˆ ò«˜††œhi±¡µU¡ †N_0ÕékÕ £ââ"‘–/Qþ0Êß¶Ë*5" †MDS­¥Å&V+<ØŠ¯¿6 ¿!HMM@\\$¼^/¬Ö^´µuÁåò $D†ü|!H**Ò °P‹‚5RSùŸèé`pÐ;ëQY) ®®6Š;ö »ÐÜl…Vÿø"\}õ†èîÀ#lÆÆ{±fM1{ìß§åÏ÷O|„W_Ý]»œ¶Ÿîßu×ìÞÝ€ŠŠÿœ‘!Ìd45YñÜs[±qã^ÄÇG⦛VàG?Z6£?áïïFUU-**ôغU‡¦&+"#C±tiJK ØrwMMVqÔÑ£Â`ò–ÿŽx©˜;W+››<ãªâ‚ÍåòÀ`èS 寎ji±‰ATllĘ *33 99*dg'!>žAT Œ£FWE,Œi×K¯3Œ"¢³„aÑÙäp¸pà@ öíkÄž= øòËftvöC.—"))ÑÑavÂbéÃð°R©éé‰b¥’pR#;[ÅÿO#þ!ÀÛ· ;PíÙÓ§Ó¢" JJr04äBEE5ŒÆ¬\YˆÿxV¯.æ°õãxÿý/ñðÃïA&“â‘G¾ï~wA°—4!³¹]ô8î¹çßðÓŸ^ìå—ÑØåˇ_üâÛ¸õÖ•Á^ÎYe6Ûñâ‹Ûðì„L&Ãõ×/Ç7–ÍŠêŠÖÖNñwLUU-º» RÅ ¬LžÊÊ ¸ç¿y IDATÓÕ ØíCÐé&Þ™5,LŽÂB æÎMõíÎ* $笼Óãv{ÐÖÖuL%„QÍÍ68.Bð—“£Dv¶ ÙÙJde)‘“#œO‡y|³ÉÐÃH5Ò¢'TH™Ívñ±qq‘HMGjj¼XÅ0Šˆ€aQ uuõã‹/±wo#víªÇáÃ8nDF†!22öÌU*cPX¨AQ‘ÆW±¤E~¾šÿᚦŒÆnTTè±}»Ðg³õA©ŒAii>V¬(@NN2þùÏ/ñÆ»!‘H°n] ~üãåÈȘ^3}¦“–î¿ÿmlß^ƒþp)x`-bc#‚½¬ãºûî7QU¥GeåÓ~‡¬™PHÝÝxå•*¼ôR††œ¸öÚÜvÛ*h4Š`/- ü-w••zTVê±wo# Ô(++@YYJJ²–œ„ÓéFm­Y ŸüA”Ý>©T‚ÌÌ$Ì›"†Psæ¤@¥Š ö²g4Ç+¶æ54t ¾Þ"¶çµ¶vŠ3¢4²³“­òUC)‘“£Bzz"[IÏ‚áa×AÔHËÞè0*66ééÂŽ†‰¾Ë‰HOÂ(þùÑq0l":MMVìÚUÏ>;‚Z|ÿ8{!—ËÄ’ò¨¨P_…’……js$fÃ'ï³ÙèÖ¸mÛj ×›&ÇâÅÙâ0ßâb-öïoÂ_ÿZ>:&7Ý´W_½„;ùœ€ËåÁ‹/nÃÿø ÒÒ°~ý•¸ð¬`/ë„jjLX³f=þç®Áå—_ìåœÔtŸ-u¶ 8ðúë»ðüóÛ`µöâòË/Äw¬FffR°—PƒƒìÞÝ€ÊÊlß.´îÊåR,Z”‰²²|”–`Á‚´i5ïl:ki±áÈ‘±UPmm]„ÛüÁ“ÐŽ—‚ÌÌ$Vª€ÓéFs³M  :ÐØØúú˜Í=¹\ŠÔÔdg+}'•Jiµ þ9œ%£Ã(ƒ¡ÍÍ6´¶vŠ»ú7¤‘ɤÐhâ|áSÒÓÆR@tNcØD4Y‡Ÿ}vååG±ZZlr‰÷K¥¤¤$à¼óR1o^ª8°;--aVí 5[¨5®¬¬+Wbñâ,DD„Âíöà£áÿ³wßqQ×À_lA”½÷Fœ)" 8ÓÒŸšY‰•–Y.¥V𙦕åHMMÍ,s$nܘ Dœ(²÷Þ{»ûüþ88EA¾wÇûùxð@¸óî}÷þð½û¾ïóyvï¾{÷’Ч>ûÌcǺÒÉÝ <|˜Š/¾ø ¹ðõ‰yó†Kŧ¢ï¿¿ ¹¹e8~±ÔœÜìÛw«VÄõë_vºvuu|=z[·þ‡´´BŒ×óçÙžGyye¢YO×¯Ç ;»ššªðð°;”µ‚[{+.®Dxx:ÂÃ3E³ âãsÀã  ®®GG#Q(ák¾¤Ïx”&5¢â“pFTs‘˜˜/*t¨¨(Š–ã=)F R::TähO%%•¢ÂÓÓE¨ÔÔdd‰>píÚUffOφ~77.Õ“Õ¾‚„Tl"¤yyyexô( ÂKÉÉù¨¨¨FÃ_‹šš2LMµÑ«—Iý cXYéJÅI3yâEKㆠqh´„¢²²†à?n =½£G»à³Ï†¢Éž•# **jðÓOçðçŸAps³ÂO?M••.×aµJPP¦LÙŽÿ OO;®Ãi5OoïŸàìlŒ;?à:Nðùøû?ÄÖ­—‘#1þôëgÎuhí*..7n7,ŽGEE LM{ˆz=yxØÒìÚ—PSÃCttÂÃÓëgAe"**5PT”‡þS³ ŒàâbÒ)–±v´Â $&æÖ žÌ†JJÊCuua£rkk]ØØèÃÆFØ#ÊÆFŸÞ«uO€¬¬bQñééBTJJŠŠ*?¤Õ×ï&*>5.DiÓVB¤›HçÖðÆ122gâÞ½D$$䢪ªNtUUe˜šö@Ÿ>f>Ü ÞÞÔCJµviܳ3ÑJK«ñçŸØ³çªªjñî»ñÉ'C:Ýl‘—uî\¾ù檫ë°råxL™òšÔÌöcŒa̘MÐÖVÇŸrN›]¼Ž>Ú‹Ó§È|¥%Œ1D`ëÖ˸?vðõ[®Ckw<ž$‹ ë¥B `pq1——¼¼ìðÚkV4+ç%5솞!*BEDd 7W¸˜±q÷úâ“q}!ÊffôÚÑcÈÌ,ŸrŸ‹„„\ddA `PP‡©iØØèÁÆFÖÖÂ/[[}ZòÕAÊʪ›¡~NK+ÍŠRUUnÒ#êIAJ‡ŽY„H>*6‘Î#;»QQY¢7‚‘‘™HLÌŸ/|ó!À ­Ýýú™cäHgŒå]]údEZµei\s ʱgÏ üùg ࣼdf§«Žž^„åËáòåHLžÜ+WŽ—º7ó'N<Àüùÿ à 8:qÎKyë­màñ8uÊ—ëP$BPP,¶l¹Œ  8ôëg_ß‘1ÂIj  ¯ª´´·nÅ‹f>%$äBUUXŠfu6Wt'm“›[öTòt„‡g 99ƒ¦¦êSÅ'a!ÊÖVŸfÜ´£êê:$&扊Oqq9¢†å5„»²ÙØ<=JX„27§&åE `fE¥¦"%%_TŒÊÏ/]·aV”™YXXèÀÒR·þ»Í($D2P±‰Èž§w›‰ŽÎMs/(¾@uë¦ %%WÇãÃÈHK´¬`ð`èëwãøWÑÖ¥qÍÉÎ.ÁŽWqàÀ-¨©)cæÌ!˜1Ú~·'ÀîÝ×±aÃjá§ŸÞ†»» ×aµYm-žž?ÀÝÝ›6½Çu8/íáÃT¼ñÆfìÞ=cǺrŽÄ¸?[¶àòåH88Â×wÞ|³W§ë»–‘Q$*<Å¡  ::]áá!|êH5HM-l43*%%IIùHO2+ª{wuXYéÀÂB––Tˆ"„#Tl"Ò­  ¼~–’pÆRTT&âârPWLJ²²"llô ¥¥†ªª:¤¦   ÚÚ]ááa‹¡Càáa cãî\? ò ^vi\sRR ðÛoÿáÈ‘»ÐÖîŠÙ³½áããöÜ™O¤©û÷“±t©’’ò0oÞpÌŸ?BjO–võëÏáæÍ¯ah(Ý'ÛsæìÇ£Gi¸vm™Ô棽DEebË–Ë8sæÌÌ´1oÞ0LžüZ§|ž†ÈÈLQñéöíÔÔð`c£OO{ b‡Aƒl¨ð.FO@öøq:ÂÂÒ)쥤¤Ð¤åèhHM•;Hee­höS||âârE½¢ªªj‹Â%yúõE(á¿ÍÌ´¡¨Ø¹ ×\ãñHO/Dr²°ø$üž‡¤$ą́†B”––,-uD³¡„ÿ~§™ë„ˆ›ˆtàñˆÏ©oÌ),*=ÝAOONNÆpt4B×®*ÈÎ.AXX:?Nƒ‚‚< °„——°ðàâb"5»I‘¦^ui\sÒÒ ±qãE;v&&=0wî0L™2 Sžl¾¬ÒÒ*¬]{ÜÂàÁ¶øñÇɰ´”ŽàÍ))©Ä Akñþûîøê«7¸ç•¥§ÁÓs¾þúM|òɮÑHIIyØ¶í Ž½ ]] Ìží©S;w±¹¦†‡;wE3E#"2 //‡>}Ìëû=Ù£Os:©3>_€„„Üúâ“°‘òraÊÞÞ={šŠŠPÎÎÆÔ¿¦1Æ‘Q,šŸƒøxaQ*+« ¤¤kk=ØÙÀÎN¶¶Â/kk=zoÁ>_€ŒŒ¢g QÂbTJJjk…»Kkjª6*DYXèˆfHч„´›ˆä©ªªETT–èS¾ððtDGg¡¦†%%ØÚêÃÑÑNNFõ6u–†+W"ñßQ(((‡……†wÂСps³¢†ÞRNKãš““SŠ-[ðÏ?·`lÜŸ>ÿû__:qj£'`Õª“€U«&`âľGôêV¯>…#GîâÖ­23‹cíÚ38x0ÁÁ_£[7ZFð<™™Åرã* ºº2>ùd¦O§e´€p6ñÍ›q¸q#7nÄ =½]»ªÀÝÝC†ØÁÓÓ66z\‡)“†ÄÄ<<~,ü MøZ:Êʪ¡¨(;;ƒúÙOÂPNNFºPÊ•òò$& {BEGg#..±±ÙHK+Ÿ/-ɳ·7€¾¨ec£55Êacùää¼F…¨†™Q55ÂB”†FÑR¼Æ=¢tiçäää`bÒöö°³3€^ýw}hjR¡›+Œ1de•ÔŸš£–Sª««_€¸¸œ§¶üÍDxx:Š‹+!''KK¸¸ÃÅÅDT\jnú©@ÀðàA2ΘRR `n®7Þè…1cz¢Osê½$ÅÚki\sª«ë°wo ¶o¿O€Ù³½1s¦½È¿„ààx,[懬¬b,^<³f •©a§c̘رãŒ×›ëpÄŽÇ`øðõ°³3ÀîÝÓ¹GªTVÖâÀ[رã* Ê1eÊÌŸ?ffÚ\‡&‘**jÀÀXܸ+š¡úÚk–ðô´ƒ‡‡\]M:Ýî\IM-õ€j(@V@^^––ºõŧ'} hÙ(·†´´BÑ2¼øøÜúï9(-­ lNîèh(šÕPŒÒ××ä8zw6nè õ¤Ñ|n£f円Z°¶Ö…••.¬¬ô`k«++]˜˜t§c#‘Tl"¯¦¶–‡ÈÈÌúÞJõ;Âe¡ªªJJ pp0ÍTrv6†““Q‹o`cxð 'NÜÇÙ³aÈÉ)ƒƒ!ÆŽuÅØ±®pr2êÀGGÄ©½—Æ5G `8}:kמAqq%>úÈs瓉¥^­°°ß}w GÞÈNX»ö-˜˜ÈÞNŽS¦ì@UU NŸ^ Ö±(I"0}ú8yr>^{Mvf¤u”º:>޹ƒß~»‚ôôBLšÔ¾¾#aeEË·[’“S‚ë×c‹  Xä䔢[75¸»[ÃÓÓžž¶°¶¦~O©aÆyCñéñãtäå•ANN:O-Á.ã×NÉ]Rß*K´/66EE„»­9:ÂÎÎŽŽF°³Ó‡££!õê“<žiiõË*s‘˜˜‡ÄDá¿óò„)++ÂÒRÖÖzOÍŠîx¨¥Ey$RƒŠM¤õjjxˆˆÈxꓱ4ÄÄd£®Ž®]U-sv6†ƒƒa«— DGgáäÉ8y2©©pt4„ }0n\oZê!Åbb²qýz ®^BHˆp mq/{žààx¬ZuÑÑY˜<ù5,[6–>í{ ÃÁƒ!øá‡³èÒE kÖLÄØ±®\‡Õ.®\‰Â´i»pâÄ| hÅu8íjÊ”¨¬¬¿¿ìÕÚ'Àñã÷±uëe$'çcüøÞX°`$ìì ¸M*ÄÄd#(H8ë)$$eeÕ02ÒªŸõd ;:fs +«¸Ñ.x§#'§`a¡ƒž=MЫ—)zõ2C¯^¦´O‚”#** ±±ÙˆŽÎBtt6bc³D3¡ôõ»ÁÁÁ†pp0õ‡¢Æä’£´´ y¢óê R¹¢Få=z¨×žôD³¢llôan®-sKÿ‰Ô£bi^UU-"#³Do4ÂÂÒ› OظûÉzá”kKKÝ6/iËÈ(±c÷qòäDGgÁÜ\&ôÅ„ }aoOoÖ¥Qii5cpõj4®^FVV1´´Ôàåeoox{;¶ûŽÉÉùX³æ4Ο oo|ûíÿèäï%Ý¿Ÿ‚+Ž!""}ä‰%KÆÈìÒC>_€Q£~¹¹öîýˆëpÚ]xx^}~ûí}üï}¸Gª  §N…bË–ÄÅåà7zaá‘pt¤™¸­Åã ðða ã‹{÷’QWLJ½½<<ìàåe77kZÚÅ‘œœ’§f@¥ãÑ£4ää”@^^66úèÓÇ ½z™¡woaïM:á•,Eˆ‰ bb²Eý¡ª«ë //SÓpp΄rr΄²±Ñ§LÃÇ© MAXXJK«¡¬¬côêe†>}Ìл·¬­ui¥„áó…É£¢ P™PIIy¨«ãCII––ºpp0€½½p”££!ÌÌ´©—„©ªªõ„JHÈC||N}Q*eeÂYmšš]Ÿ”[Yé¢K%Ž‘aTlêl**jžY —ޏ¸ðùtë¦Öhm¾««I“á^VLL6 Á±c÷Q\\‰#œðî»1l˜#½Y”2yye ŒÅ•+Q¸~=åÐÓÓ€··#¼½àåeß¡ëÉy<þùç~ùå<à‹/Æ`Ú´A2Õ´º£ðxìß?ýtêê*X¹r|§˜õRYY‹Áƒ×b̘žX·n2×át˜ìì ¼Ÿ>sæ ã:™ÁÃ¥KØ´é?NÇðáŽX°`úõ£T^VAA9nÞŒC``c‘šZ55e h%ê÷$m†ÄÄ<„†¦Ô¡R‘‰ÚZ45»ÀÕUX|j(@ÑnŽ’©®Žøxa¨ÈÈLÑ’¼´´B ]º(ÁÖV_´ ¯á»±±ìõp”99%ˆΆ.ÉΈJK+Ÿ/Íl{z§C;;áòJZ"KÄ€ŠM²¬ººxø0¥!,, ¹àóÐÒR”f-™›‹wGº:>ΟÞ=¸w/ :ðñqÃäÉý¡¯Oo2¤'À½{IõK㢑 EEy h…¡C…Kã 8y“ï^–-;Šøø|ü±'.E L_ÒíÛ‰X¾üâârðé§C±`ÁH™]2÷¬ .b×®k^Þé¶’Þ°ávホ›7;ßcïÿý…Í›/âþý ê€ FÊ|?°Ž’R j4‡Â hkwÅàÁ¶ðô´…§§í(êêøˆˆÈ@hh*=JEhh*r!0èëwž–áijÒ2IIUYY‹ØØlÑ,¨¨(áL¨œœ€¦¦*œàèh''#8;ÃÎN¿Ýúr’WSWÇGRRžh&TC³ùøø\TW׌»7ÚéÐÁAøÍ“6 b“¬àñˆ‹ËFhh*>~EGgÇ–z÷6k4kÉÔ´G»ÅRTTBðçŸAÈË+Ř1®˜>ÝnnVô©£”HK+- ŠEii5,,t0t¨=† q€‡‡-§…ˆ’’J¬]{†ÀÃÃ?þ8™É¿¤œœR¬Ys'N<ÀСöX³fR§ÚU+'§ëàë;óçà:œWQQu;Ök×¾Åu82ëÆlÚt ·o'bð`,\8ƒÛp–L"#3EŧDTUÕÂÜ\»¾Ù¸°áxê\‡J”•UãÑ£4Ñ{ÕÐÐTdeCNNVVº¢ÙO½z™ÁÅÅÊÊ´ÄW’•”T"*JX|ŠŒÌDTT¦hWjyXZꈊOŽŽFpt4¤YPL `HK+¬ßá0»þ+ññ9(/¯èéiˆfA98ÁÆFööôi›¤URR>L}RžªªZ¨©)ÃÅŽ{›¢OsôêeÚa'á±±ÙØ³çŽ»eeEøø¸aÆ zQ‘55<„„$àêÕ(\¹…øø\¨ª*ÃÝÝÆ9ÂÛÛQ"Š9Œ1;v«WŸ‚‚‚þø#7^€––¾ûn"ÆŒéÉuXî‹/þŵkÑ úºÓö-8|ø6–.=‚+W–ÁƦsô«âÊ­[ ظñnތǀVX¸p$†¥ÞrâTWÇǽ{É ŒE``,=J…@ÀàädOO;xzÚaà@+šq!ArrJEŧ†Tii””àìlŒÞ½ME= llôÛ¼! éXCrr>""2ê PYˆŒÌ@zz@KK NNF¢/GG#88Rï@ —‘Q„¸¸DGg‹–ZÆÅå ¤¤н»:ìì„Ëñìí…³ lmõiÉlçFÅ&i“S‚‡ÓšRÿiPJJ*¡¤¤{{ôí+,*õîm;;ƒoÜ“M›.áÌ™‡°²ÒÅÌ™C0yrÚJUÂÅÇçâÊ•(\½…ÔÔðàèhooG ê€×^³”¨þ„„\|õÕQÇãƒÜñå—oÐ’¹—‹+N 5µsæ üyÃ;e¡%&&#FüŒM›ÞÃäÉý¹‡3Âø6ÀĤ;þúk&×át ÷î%aãÆK¸v-}ûšcáÂQ>Ü‘fÿ¶ƒ²²jܺ/ê÷› %%¼öš%<*6IšÒÒªúµíi¢Ù†íe­¬tÑ»·Y}aÉ..Æœž.2ÙÛ`ñâÑ3Æ•>q’P¥¥Õõ;ûÄâêÕh¤¥BKK žžv2ÄÞÞ04”¼7l55}̸K*edaõêÓð÷ˆQ£\ðÝwÄÞ«MšøøüŽüürœ?¿¸Ó·cñÎ;;päÈxxØrN§šŠÍ›/áòåH¸¸cÑ¢Q=Ú…Þ€·£œœRÑ’»7b‘]MÍ.ps³——pɬï¾)êêøˆŽÎBhhªèÃ׆ nôô4í~×§õ•‘|¾IIùˆŒÌDdä“™POfA¹¸˜ÀÑÑP4ÊÞÞ€–WJ‚‚rÄÄ‹O Ũ˜˜,äæ–ÔÕUê“ë‹fAÙÙÀÌL»Ó¿'“!M‹MAAAزe WIøúú¾ôÿÏÅ­[ñ¸s' ¤ 99Œ1i5jšèêj*1³³K°jÕ©6™¦L™ÒÊ®¶Œ7Æ""2qõj®^ƽ{I\]Máíí€aÃÑ»·™Doa{ûv"/>ŒÜÜR,]:3fx¶øé3¿ž¯ºZ¡¡úPRâÃںݻW‹õö}}}ááá!ÖÛlOOŠ+³ááa×!÷)éã3"Brr€“Sס´«#GŽ´Ëí¾J~+*”‘šÚªèÞ½Îi€Ä IDATβƒöÔÖüÆÇ犖ÜÇ£´´ úúÝDÆ==í``ÐMâÿ~;‹§ó[QQƒ°°ô§–ߥˆ–jYZê¢o_s l;˜˜´ÜÒò+ò[\\)êÕ0*:: 55<(*ÊÃÆFÎÎÆ”_)säÈ””TÖÏ‚ö‚ŠŠÊB||®¨ÀØ¥‹R}?(C¸»S~¥I3¯¿÷š”…SSSáç燷ß~»c¢’b~~~PRjýÒÆ¢£³D„„$ /¯ jjÊèÛ×&ôAïÞÂOetu5Ú1ò—#0üýw0~üñ zôèŠßÿ°Õ3™üüü€ÆÕ+hÍx+((Çõë1¸r% 7nÄ ?¿zzðövÄôéƒ1x°­T4ð««ãcýúóر㠆 sÄÑ£sZ5늎_Ï×¥ 66ÅÐÑ©‚œœx'´úùùa„ b½Íö$0¬^}#G:wX¡ üñik[ EE×a´›†×¡öò*ùUW¯…£c!**”P[+¹H²—ͯllô0c†ø|=JCPPc°téÔÔð`k«==àÔ©«˜0Á[Ì‘“Öh.¿êê*4ȃY‹~—Ÿ_.šù‡¯¿>†êê:˜™iÃÕÕOfȘšöÍ"”ô㳬{6¿ZZjpw·»û“x<’’ò•‰ðð „„$âìÙG”_)ðt~»uSCÿþ–èßß²ÑuÊËkD½ bc³qûv"Μ¡üJƒ–^›Ìl:xð |||@«ë^ÌÇÇpàÀç^'99ÿý‰  8ܹ“„¢¢ hhtÁÀVps³ÆÀÖRÑ+ &&K—Ahh >ûÌ‹nS9998pS§NmÇ(e[sãÇàÞ½$ÑÒ¸°°4((Èãµ×,ë—Æ9ÂÙÙHª–dÄÄdcÞ¼œœU«þŸA­þ¿tü↴ý}ÿûï,Yò/._^Ò¡Ëeh|r«½ŸÊ/·Úãù¯ªªÅÝ»I¸q#§OßFXØ?¨®NÛí“Ö{ÙüÖÔðpï^2îÝKBdd&""2’R>_ .pt4‚‡‡-ª«S°rå\¼vz¤%”_ÙFù•m-ä·éÌ&òjª«ëpóf¼¨ñrrr>45»`Ð ,X0ƒYÃÉÉH¢—.=­¶–‡_ À¶mÿÁÙÙ/~GG#®ÃêÔ²²Šqõj4®^F`` JK«ajÚÞÞX°`$<ò¤†mâñäðàAôë÷TU•áîn¥KÇÂËË^ê·+ÏÎ.¯ïAܾ€E‹FaÞ¼Rù7C$ß®]×QVV…/¾Ãu(„B8 ªª,j[Ñ0{zË–½X¸ð7Ž##â@ù•m”_éBŦWÀãÉ#9Y ýû¯FNN úô1Ã’%c0v¬«DîêÕZ<žÛ¶]ÆÆ1x°-þ ÆÆ-7f#íOQ‘AO¯ëÖ}77kNw"§›7ã1wîßPWï‚S§|Ñ»7í4GÚG^^¶o¿‚Ù³‡AOOòúâBᆎN0VÇu¤P~eåWrÉÆÙ*GJJ”ðÉ'n˜8±¬¬t¹é•¥¤`þüxü8 «VMÀŒRÕïGÖYXT`È{®Ã Æ6oÀÆ1v¬+~ùåhhHÆŽ‹D6mØpjj*øì³¡\‡B!„BˆL£bÓ+“cèׯŸþ:סˆÅ¿ÿÞÁ7߇¹¹.^üœú™vSTT âúõ¬^=3fxr‘qqq98x0?ÿüTU•¹‡B!„™öÊMQâãã±oß>1„ò|eeeøñÇÅz›X·nXoSZ•–VaÖ¬}øüóÃøàƒÁ8{v!§…¦ŽSmQTT„õë׿ðz-SoOÜ¿Ÿ‚Q£6 ** ÇÏç´Ð$ic­9§NÂ;wÚíö;ËØüþ{ØÚàí·_ã:©ñ2¯½ÅÅÅHOOo§ˆˆ8µ5¿¥¥¥xðàåWJ´5¿¹¹¹¸ÿ>òòòÚ1*".mÉorr2BBB}UVV¶s„äU´õï—Çã!,, ÉÉÉí›¶æ·¤¤<@nnn;FÕ>^¹Ø;wŠ#–ç*))ÁªU«Äz›eeeX¹r¥XoSEDd`Ô¨ ¸?ÿþ;+VŒƒ²2·Þ:bLµEII þøãV]ïyã”Æ›Ð¡C!xë­m°·7À¥KŸ£_?sNã‘´±Ö???·Ûíw†±yóf<"°råxÚä  ^æµ÷矖ø¿)"Ô–ünß¾ÆÆÆøøãѳgOL™2µµµí y%mÉïÒ¥Kakk‹™3gÂÒÒ_~ùeûG^Y[óûúë¯c„ ¢¯¤¤¤ö ¼’¶ä722ööö˜A#FŒÀÆadd]]]ìÝ»_|ñtuuahhˆÃ‡‹nçСC°±±¢¢" Ÿû¦ÕßßÖÖÖPSSÃŒ3°dÉœ;wpíÚ5ôêÕ ***pppÀ©S§ZŒ}Ïž=077‡ºº:f̘@ ާD¢ÕÔð°hÑ!,Yrsæ Ã?ÿÌ‚¶vW®ÃjD\cjÅŠÐÕÕ…ŠŠ ¼½½Mÿüø1Œ.]ºÀÎÎ œJ>zôhüý÷ßÐÒÒÂÕ«W1nÜ8Ñÿkí8mNgo%%•˜6mÁŽ`É’15»DcíÙ1ùÜqÒp»€µµ5ÔÕÕ1}útðù|ÀáÇaaaUUUL˜0%%%¢XŸw|këßEsdul;vX±b<ס¼”–Ža/c­˜7o,XMMM`ãÆÍÆò¼cfƒ^½zÁÕÕõ…éòåËpvv†²²2úöí+zÓÔR,m‰SšHC~ïÝ»KKK : ¥¥…×_ÍÞå÷ iÈoff&|||`n.œiìèè===dff6{;”ß'¤!¿[[[”••‰Þk<å÷ iÈodd$’’’°`Á€¾¾>nß¾~ýú5{;”ß'¤!¿………àóùxí5a kkkèèè ++«ÙÛ‘Èü²g8p€5óëçò÷÷grrrlñâŬ¢¢‚²nݺ1???–••ÅäååÙ7ß|ÃÛ¾};À~üñG&Øúõë™ cŒ±ÒÒR¦¢¢ÂNœ8Áª««Ùõë×™¼¼<ËÍÍeiiiLEE…1ÆXBBëÚµ+;}ú4«ªªbëÖ­c lÿþý,;;›ihh°?ÿü“UWW³“'O2555Ý$,€Íš5‹ÕÔÔ°øøxÖ­[7våÊ•V?ö©S§²©S§¶úú’ ))ñ3srZÎ._Žì°ûÀ8ЪëŠkL]¸p±¸¸8VZZÊÆÏ>ûì3ÆcåååÌÐÐmÛ¶UWW³ÿþûijj²›7o²´´4¦ªªÊ&NœÈ‚ƒƒYLL SWWgŒµ~œ>«³Ž·øø6xðZÖ·ï*–Öî÷ÇÕñëÙ1“ŸŸÿÜq’••Å”••Ec!11‘iii±K—.±‡2vìØ1VUUÅ6mÚİM›6µx|kK¬ÏÇØlËßwGª®®cýûÇ-:Äu(Œ±¶Ï–Ža-‹Ú2üýý™¢¢"[¸p!«¨¨`AAA¬[·nììÙ³Ži-3ŸæããÖ/_þÜÇ”––Æ444؉'Xee%ûþû¹9-ÆÒÒeíõü·UgÈ/cŒUTT0GGGöûï¿7¹Œòû„´å·¦¦†Ý¸qƒ}÷ÝwÌÒÒ’•••5yL”ß'¤%¿999 ëÓ§SUUelíÚµÍ>&ÊïÒ’ß0777¶ÿ~6~üxæããÃBBBš}L”ß'¤%¿Œ16~üx6qâDväÈöÙgŸ±>}ú°òòò&IBó{W,ŦîÝ»³ÚÚZÑï–/_Î&Nœ(:‰ixBbcc™¢¢"«««cŒ1öàÁ¦¯¯Ïc¬ººšÝ¿_t Iˆ‹‹k”ï¿ÿžMš4It=@À ÙþýûÙÎ;™——W£ø&OžÌ¾ûî»&q7Ä–››+ú»»;;qâD«»´ü_»Íìí¿b¯¿¾¥¥vè}·µØ$Ž1uòäIfddÄÂÃÃcÂ?梢"Æc‡f}ûömt¿¾¾¾láÂ…,--`Œ1Æ’’’DŦ֎ÓguÆñvåJ³·ÿнùæf–“SÚ!÷ÉÕñëÙ1ÓÒ8i¸ÝÌÌLÑå^^^ÌÏÏ-]º”½÷Þ{bìÙ³'Û´iS‹Ç·¶Äú,qŒMI-6mÛv™Y[/eÙÙ%\‡ÂkûøléÖš1ÖšñàïïÏ455YMMè¶–/_ÎÞyçFÇ´–Ž™O{Q±é—_~aãÆý\[[Ë~üñGVQQÑb,-]ÖZ’öfWó{åÊæèèÈ&Mš$º¿§Q~Ÿ¶üfff²0---æëëËx<^“ÇDù}BZòÎ $*@ܺu‹ijj²ãÇ7yL”ß'¤%¿[·nejjjlìØ±ìĉlÍš5LUU•…††6yL”ß'¤%¿Œ k†††lÒ¤IÌÆÆ†}òÉ'Òt|¾+–etÖÖÖPRRýìââÒhz—ºº°7‹œœTTT ¨¨(ú¹ŠŠ î߿ѣGÃÚÚ'NlvGrr2ìììD?ËÉÉÁÊÊ žžÞè2°··GZZZ³q+((@WW·Ñmɪ?ÿ ÄûïïÂØ±®8uÊ&&ݹ©EâSo¾ù&&Ož www˜››cÁ‚(** GÑÑѰ°°}>|ÅÅÅyyy5‰«µã´9i¼<‚?Ü×_wÁ±cs¡§§ÁuHÏ%ޱ43­'†††¢7ÜVFFF“> NNNZw|km¬Ï’űYPPŽ-[.cöloèëkrÎKiéÖš1ÖÚñ`eeeeeÑÏ...HMMmt3[ëÙ×p%%%,[¶ jjj/Œ¥5qJiÊoii)|||0}út|ýõ×8vì˜èþž½ʯ4å¾&ݾ}iii¸páöîÝÛä1Q~Ÿ–ü:;;#88¸¹¹aêÔ©ð÷÷oò˜(¿OHK~•”” ®®Ž'N`„ X±bƇݻw7yL”ß'¤%¿gΜÁŽ;‰cÇŽ!22aaaøõ×_›<&IͯXŠMùùù~ÎÍÍE=Út'OžÄòå˱bÅ ÄÆÆâîÝ»¢'çi(((hô»†Á¡©©Ù$–‚‚tëÖ­M±ÈO€/¿ôÃÊ•'ñÕWobãÆw9ßm®5Ä1¦cذa àçç‡êêj¼õÖ[„cÅÓÓÉÉɾvìØàù'Û­§c ¿ürK–Á¢E£±yóT‰oâk@ã1ó²ã¤{÷îM¶5mˆŽom³qã%¨ª*á³Ï¼¹奵t ç±èÙq•—— Æâ3[KCC£Iêøñã¢Þd-ÅÒš8¥‰´ä—ÇãaäÈ‘ÐÒÒBtt4¦M›öÜû¢ü>!-ùýçŸí ÙµkW 4ÑÑÑMî‹òû„´ä7!!¡I5 0ÆšÜå÷ iɯ¹¹9tuu ,,,PZZÚä¾(¿OHK~CCC1pà@hii† †4¹/IͯXŠMÉÉÉ8sæ á6Ú¿ÿþ;ÆŽÛ¦ÛHOO‡““<==¡  €[·n5û‡2bÄœø@ÔðrĈ DTT ²²ýúõÉ'Z¼ÍÖŽS ó·º:>/>Œ­[/cãÆw±hÑ(®CjqŒµgµeœœ³·ß~›ñù|–––Öhl<ݳ©-ã´3·²²jöÞ{;™­í2võjgqpuüzvÌ´4Nž½]Æ2dóóóc€ùøø0---6tèPfffÆÆŒÃ6mÚÄ{þñ­-±2&þ±Ù–¿ïŽ0cÆlèÐÇç:”FÚ:>[:†µeŒµ4üýý™¹¹9svvfžžžÌÐÐ 2„UUU59¦=ï˜ù´æz6==ÞclÁ‚LGG‡ >œijj²mÛ¶½0––.k-Ië!-ù]±bÐäkîܹŒ1ÊïóHK~y<?~<ÓÕÕe^^^L[[›½û$”ßæIK~ù|>›2e ëÑ£óööf:::¢FÈŒQ~ŸGZòËcû÷ïglÈ!ÌÀÀ€½óÎ;¢ž>”ßæIK~ûì³ÏX÷îÝÙ°aؾ¾>3f «¬¬dŒIE~_½Axƒªª*våÊ•F µÚª¤¤„°G1ƄɾvíZ£ëäææ²ÈÈHöèÑ#võêUVSS쬬ح[·D×IJJb/^d111/KkHêÉÿ½{IÌÉi97îW–—×t7.¼Ìɨ8ÆTuu5»qã»téËÉÉiryzz:»xñ¢¨A\sø|>ËÏÏýÜšqÚ$u¼å䔲‘#f½{¯d§s —ǯg½Ê8 c¬¤¤icëŽ:¾µ…$›BB˜¡áÂÝm³µ^f|¶t DZÈßߟõë×ÕÔÔ°ëׯ³Û·o3@ðÜë·æ˜Ù±±±ìâÅ‹,55µU±´5ÎæHÚ›]Æ(¿”_ÉÉoXX»páB«^[(¿BÒ”ßÈÈHváÂ÷Âû¥ü IS~³³³Ù¥K—Zuì¦ü IS~Ø… ¤1¿wÅÖL¥K—.ðö~µeZššš¦l™ššÂÔÔ´ÑuÒÓÓ1lØ0=zNNNصkx<úõë'ºNCs­ÎèÒ¥pÌž½#F8aëV‰ï—ÓqŒ)xzz>÷rccc·xòòòÐÖÖýÜšqÚY¤¥âwv@YYþþ %¾ñüóˆc¬=ëUÆIÏž=ѳgÏf/ëÌÇ·aŒaõêSðô´ÃðáŽ\‡#-ÃÄy,RVVM»oIkŽ™­akk [[Û6ÇÒÚ8¥å·õ—I#iÊoK¯;Ï¢ü IS~áèØº×Eʯ4åW__#GŽlÕýQ~…¤)¿VVV¢ Ñ^DÒò+u•ˆ>}úàÏ?ÿÄ?ü€ÂÂBØØØàüùóv“ê¬ Á²e~øðÃÁX½z"äå¥G)"¹ââr0eÊhâàÁOѽ»:×!‘Nîôé‡xô( /~Îu(RCSS666\‡ åX$)Ni"IÏåWü$éy£üŠŸ$=o”_ñ“¤çò+~’ô¼q™_©+6À„ 0a®Ã(6\ÄÆñõ×o`îÜá\‡CdÜ£Gi˜:õw8:bß¾™èÚUz›0ÙP[Ëúug0yr8;¿úÌŒÎÂËËKb>©l)IŠSšHÒóFù?IzÞ(¿â'IÏåWü$éy£üŠŸ$=o\æW*‹Mä >_€/¿<Š#Gîà×_§bòäþ\‡Dd\pp<¦O߃Aƒl°k×t¨¨Ða„poïÞ äç—cÙ²WÛIB!„òêè,QŠÕÕñ1oÞ?¸r% ÿý † ±ç:$"ã"ðé§aìXWlÚô””¸‰U`óæK˜5k µ¸‡B!„NŠMRª¦†‡Y³öáÎ$92}ú˜q‘qgÏ>œ9ûáãã†ï¿‹z‚‰±ys”•0gÎ0®C!„B!„€ŠMR©ªªÓ§ÿ¨¨L=:‡ú“vçïÿóæýƒ3<ðí·ÿƒœšˆdHNÎǾ}AX³f44ºp!„B!Tl’:eeÕxÿýÝHI)À±có`k«ÏuHDÆ>йsÿÁ¬YCðÍ7㹇FÖ®= LêÆu(„B!„zTl’"ÅÅ•˜:õwäç—áĉy°°Ðá:$"㎿ âÓO‡bÅŠq\‡CH#wï&áܹ0ìÛ÷1幇B!„ROêÞ—”T¢  œë0:\qq%Þ~{;JJªpâÄ|*4µ³„„\®CàÜÑ£÷°`ÁAÌ;Œ M ?¿ó÷ZÂÃêÕ§àîn‘#¹‡B!„ò”çÎlòóóëÈ8Z-9¹ !!¹x÷]k®CŸŸÞ~ûív¿ŸÒÒ*¼óÎTVÖâØ±¹00èÖî÷Ùüüü ¤¤Äu­²iÓcÌží„.]$g·µŽo€°Ð´hÑ!ÌŸ?K—Žéû'I=~½Š;#1~¼ŒŒÔ¸E"øû?Bhh*Ο_Ìu(m&‹ãStÔóNùååW¶Q~eåW¶Q~e[KÏûs‹MS¦Li—`^•ºzohj…¿ÿÔÕeqN»+-­Æ»ïîDYYµTšàäÉ“8yò$×a¼œœ" æaáÂ#(,<Áu8Îßÿ!-:„¹s‡Ie¡ Üã׫ÐÕ}QQÅ((8†ÚÚ4®ÃáTm-?üp“&õCÏž&\‡Óf²8>É”_ÙFù•m”_ÙFù•m”_É#Çc\Ñ¿ür7^„³³1.^ü\¦·_/-­†ÏNäå•ãØ±¹06îÎuHBtt† [¸qã+ØØèqQÇ ˆÀÌ™bÆ ¬Z5ëpÈS6l¸ˆ .@QQÛ¶ù`üø>\‡Ä™]»®ãÇÏ"0ð+:.B!„"yîI]Ϧää|ÈÉÉ!**‡ßæ:œvS^^ƒ÷ßß…œœRøùÍ¡ª”šZPPÇ×_å8šŽsíZ4fÎüS§ºáÛoÿÇu8ä={x<fÏÞ]»®s7Š‹+±iÓ%|òÉ:.B!„"¡¤®Ø›ÆÖ¬ñGii×!‰]UU-ÞÒÓ‹àç7¦¦=¸©SIL̇’’ø|nތDž ¹©ÝÇããÿĤIý°nÝ[““݃ÒÊÁÁ°þ_ Œ1¬Zu «V„@ U“S_ÙæÍ— ¤$yó†s !„B!ä9¤®Ø”œœ@¸QEE Ö¯¿ÀqDâUWÇǬYûŸ‹cÇæÂÜ\›ë:””|Ñ¿åä€åË£¦†ÇaDíëÁƒ|ðÁnŒí‚_~y‡ MÊÔ´ºtyºÁ>ÃîÝ7ðÙg¡¶VvÇçÓ’“ó±oßM,^ü:44ºp!„B!ä9¤ªØTZZ…òòjÑÏ<ýˆèhÙhÎç °páAܽ›„#GæÀÂB‡ë:¥¸¸\ÔÕñCnn)¶mûã¨ÚGTT||vÁÃÃ[·ú@AAª Šœœ\“þaŒ1œ?ÿS¦ìÉYžÏúᇳ03ëiÓq !„B!¤Ruf™””ßäwrrrøòK?HYŸóf­Xq.„cÿþYpt4|ñ í"11¯ÑÏ|L..íIDAT¾[¶ˆz9ÉŠ””L›¶ ={cçΨÐ$zö4…‚‚B£ßñùzfy‘TvvúMŽ€p–gJJ^}£ÌÌô|c «WûÃÍÍ £F¹p!„B!䤪ؔ’REEÅf.‘÷ߞ@EEM‡Ç$;w^ÃöíW°yóT îÈu8ZjjA³ —ëêø¸t)ׯÇp•x•–VcÊ”€fAS“zßH GGCÑÏgÕÕñQTT‰qã¶àÖ­„ެ}=†û÷“i—DB!„B¤„T›’’òÀç šüž1†¢¢JüúkQ½šãÇïcÍšÓøþûI˜8±/×átzÉÉÏ_*'//\²ù¼“}iPUU‹éÓ÷ ¸¸GÎ…¶vW®C"m`oßòòZŠŠj¼õÖ6DtPTí«®ŽuëÎ`âľpu5å:B!„BH+HU±)66§Ùb ì[²sç5$%å5{¹$ ŠÃ¢E‡0wî0|øá`®Ã!îD§¤¤ÐìeCZZ!þø#°ƒ£>_€Ù³÷#** Ì‚‘‘×!‘6Ò××D׮ϟ‰¦¤¤EE|òɸ»Ût`dígß¾ de㫯Þà:B!„BH+IU±éé-é›Ç°hÑ¡‰åUEEeaæÌ½7®7DIg›ƒ?K `X½úrrJ;("ñùñÇs¸z5 »wO‡ƒ5 —VM~§¨(999LœØ!!+ðÝw ®®ÂAtâURR‰M›.aæÌ!06îÎu8„B!„V’šbSEE ŠŠ*Ÿ{¹²²x<îÜIÂÿEu`dm—•UŒiÓvÁÕÕ›6½999®C"õsŸ»LNAA^´cÛš5§;2¬Wö×_7±}ûlÚô<…­¨ÐD!„Bˆ”’ê3Ð.]”àêj*ñ…€€€¬^}ß|3#G:si£¬p÷n¤d ªªjñá‡{Àãññ×_3¡ªªÌuH¤˜˜tÇ„ }ñÛoÿIÍXmÎÙ³pï^2V®Ïu(„B!„—$ÕÅ&ps³–èbSTTæÏÿS§ºaÖ¬!\‡C^ÂÀV(*ª@LL6ס¼c K–A||þúëhkwå:$ÒæÎŽØØDpÊK©«ãcíÚ3˜0¡z÷6ã:B!„BÈK’úbÓ€–ˆÏEaaס4QXXéÓ÷ÀÕÕß?‰ëpÈKrq1†ºº îÜIâ:”úᇳð÷ˆ={>¢åš½½FŽtÆÖ­ÿqÊKù믛ÈÊ*ÆW_½Éu(„B!„W Å&99àÎÉšÝÄç 0wî~ÈÉÉa×®éPRRà:$ò’äÑ¿¿…Ä÷ûûï`üöÛlÚô<þøOØÚ`õꉜÆBÄ«K%ôïo›7ã¸E„1†ùó 7· ý5ªªÊ\‡D$È’%cpóf<‚ƒ%«@ú¬ÐÐTœ>ý_ý&õ¶#„B!DFÈD±IG§+ììô9uÂÃâŇQXXŽ]»>¤“&äînƒ›7%çÄ}ãÆ‹ˆÀîÝÓ©¡2iÂÍÍ^^öX¿þ<ס´hõêSxí5KŒëÊu(„B!„1‘‰bÀ}!`×®ë8w. ¿ÿ>††ZœÅAÚ»» 22Š’RÀu(8{ö6n¼„￟77k®Ã!jÉ’1¸s'×®EsJ³Î Ã;IøöÛÿq !„B!DŒd¦Ø4h ""2PZZÕá÷}ëV¾ÿÞ+VŒÃ Atâ/«úö5G—.Jæv)]TT|}âÃÝñþûîœÆB$[¿~æ>Ü¿ürëPš¨«ãcݺ3?¾7úô1ã:B!„BˆÉL±‰«¾MYYÅøôÓ};Ö³f éÐû&KYYýû[ 88³ Ê1}úôík†ï¾£¾`äÅ–,ƒÐÐTDpJ#ÿ}ééEøúë7¹…B!„"f2SlêÑCÚ ·®ŽY³þ‚¶vWlÚôíÖ ¸»ÛpÖpY8ÞöA^^;wR_0Ò:®®¦5Ê?ÿ|Œ1®Ã”–VcÓ¦KøøcO˜šöà:B!„Bˆ˜ÉL± ¶EPPÇ-qúé§sˆŽÎž=3 ¦F;uîî6ÈÊ*Frr~‡ß÷·ßžÀ£GiØ»÷chkwíðû'ÒkéÒ1ˆŒÌÄùóÿoïÞ£¢*÷>€F0FMä"—MH±0ð†R •©ékGŠÔu–'ž »˜©ÅQLÔ05+3-{…TÞD¼$K£ì•P¡#^ Ì$EEDæyÿh1KÂØ›a6ßÏZþ±/ó<ß=þØkÍoíy¦ÐÜQëÖ€@LÌsG!"""""(®Ùtúô%TTÜ’}®¬¬"lØðâã'¡o_'Ù磎á±Çt°³³ÅO?µïºM©©¹Ø¼9kÖLÀ®í:7Y¾z#""+WîC}½Á¬YJK+ð¯ý/bcÇ@«µ3k"""""’‡¢šMÁÁÞÈÍ='ë<ׯßÂ?þ‘ŒˆˆÁ˜:5HÖ¹¨c±±±Æ!}päHû­ vêÔ%¼óÎÿàoˆˆ€v›—”eþüq8{ö RSsÍšcùò=puíŽéÓGš5ÉGQͦîÝíÑ¿¿‹¬‹„ !0oÞVØØXcåÊ)²ÍCWP7rrÚg‘ð7ôøë_¿D@€Þ}÷¹v™“”ÉË«¢¢†áÃ3 ××™%ÃÏ?_ÄÎX¸0‚kŽ)˜¢šMä…£Gåk6mÞœÌÌSX¿þ%~¤“ öFii.]ª”u!bb’QSs6¼µZq®ÔÎbcÇ¢²ò6’’™eþ¥KwaÈ>?žOè)™â>½÷Åñ㥨©¹#ùØ¿þzK–¤#6v ‚‚¼%Ÿ,C` 66Ö²>Aë×gâûïOãóÏ_““ƒ¬sQçàì¬Å¬Y¡øøãLTUÝn×¹32 qäÈY¼÷Þóí:/µ?Å5›‚‚¼PWWüü‹’Ž[[{ÿûWxôQwÄÆŽ•tl²,vv¶8Ð]Ö'è²²Š°rå>,\ø›$©Ù³Ÿ„µµ œÙnsÖÕÕcÙ²=xî¹Á ÔµÛ¼DDDDDdŠk6¹¹õ€»{É×ÔYºt~ÿ½Ÿ|ò¬­÷¶Q {ËödSYY%fÏþoŒ7³f–e꼺 6v,’’ÉþUÐ[¶d£¤ä:,ß.ó‘y)²kòÇÎÒ58‰/¿ÌBBÂdxx<,Ù¸d¹‚‚¼QTt••Ò~©®®³fmÆÃwEbâ‹’ŽMÔ :z8œœ´øðà ÙçºySÕ«÷cÆŒ‘ÐézÊ>™Ÿ"›MÁÁÞÈÏ¿€»w m«¼¼o¼±S¦ Á„ KŽ” (È B¹¹ç$7..¿üR†M›fࡇ4’ŽMÔÀÖV·Þz©©¹(*º,ë\ëÖ}‡úzbcÇÈ:uŠm6ݺU‹“'oóX‹ï€Fcƒøø$HFJÑ£GWøú:KúÝîÝ?ãË/!1ñEøú:K6.ÑýLœˆþý]°lÙÙæøý÷ lÚô#bcÇ¢[7{Ùæ!""""¢ŽE‘Í&g88tÁÏ?·m‘ð}û ‘ž^€U«þ‹O™P=æ‰ÿ[š…è/\¸†·ÞÚ†W^ÈÈÁ’ŒIÔ++Þÿy8pYYE²Ì‘ð-\]»cÆŒ‘²ŒODDDDD“"›MVV* äÞ¦fSUÕm,XŠ©Sƒúˆ„éH)öÄñã¥0D›Æ©««Ç«¯n†‡GOÄÅM(у…„ôCx¸ââÒÛ\Çvüx vì8†w߀µ¤cQǦÈfxâøñ’V¿>..*•ââž—0)I@€nÞÔãܹ«mgÉ’]øí·+ذ!Z¢tD¦Y¼8EE—±}ûQIÇýç?ÓØãÇ’t\"""""êøÜlò@QÑPSs§Å¯ýþûÓØ¶í(–/ëŒÐÿËßß 66Ömz‚.#£II‡0}û:I˜ŽÈ4¾¾ÎxùåáX±â[ܺU+ɘû÷ŸÀ‘#gñÞ{ÏA¥RI2&YÅ6›üüz£¾Þ€ââÿ´èuÕÕµxûííxþùÇðÌ3eJGJ`cc 'üúkë~Í«´´¯¿¾ùK0&M ”8‘éæÍ{55wðÙg?´y¬»w ˆßˆˆ â%A:"""""²4Šm6étްµU£¨¨eͦ¥Kw¡¶ö.–-ã¯ÏуõïïÚªfS]]=fÏÞ W×nXºt¢ ɈL׳çCxíµ1øì³PVVÙ¦±¶l9Œ ®aÁ‚ñ¥#"""""Kcò1©©©ræ…££éé!Ä9“Î/*ªÂ–-§í‹ÌÌoeN×rÁÁÁðôô4w Y]¼x999æŽa²ººräç_iñßÇ®]PXxo¾9{ö¤Ë”®õ¦L™bîŠb ÷Ï= °··ÂìÙŸ!*ʧUcèõõX¾<#F8!7÷äæJR&¬w"""""i©„&ý‘%®»¡ÑxÀ`У®Î´œ­¬ìag×·nÈœ¬u’““1mÚ4sÇUJJ ¢¢¢ÌÃdjuX[wGm­i Ͷ¶®°²zz}±LÉÚÆÄÛ™ÈRîŸ'„0àÎÒV½^¥²†?ôú" z‰ÓɇõNDDDD$©¼ýôUghvtT–òaU*üðg–Öì³$¼v<¬w"""""y(vÍ&""""""""jl6‘dØl"""""""""ɰÙDDDDDDDDD’a³‰ˆˆˆˆˆˆˆˆ$ÃfIF‘ͦ›7o"!!Áäó+++QPP€ë×¯Ë˜Š”¨¥µÖ ¤¤W¯^•!QÛ´¦¦+++QZZÚduu5òóóyo%""""êdÙlªªªB\\œIç®^½:3g΄N§ÃÚµkå GŠÒ’ZkpíÚ5 :éééò„"jƒÖÔôªU«°aÆFûöïß¼üòËðôôÄÆ%LIDDDDD™"›M¦:vìâââ““ƒ‚‚äääàý÷ßÇo¿ýfîh¤`3gÎDyy¹¹cµÙÞ½{1cÆ ¬ZµªÑþºº:LŸ>}ôNž<‰ &&eeefJJDDDDDíI¶fÓ¢E‹Ð«W/h4<ù䓾bñõ×_ÃÇÇjµ®®®Æ*×®]Cxx8V¯^Þ½{£W¯^HJJ›o¾‰^½zÁÕÕ[·n:tsçÎELL ´Z-\\\°zõêûf),,Ĉ#Ð¥Kôë×)))€ÌÌL„††â‘Gøùù!<<{öì¹ï8ß}÷üýýakk‹ÇyyyÌÒ’œÔ:–Pk >ùä!0lذf¯‰µÖ¹YRM`РAö=zz½ÑÑÑ€aÆaàÀØ·oß}ç`½)Œ0‘œœlÒ¹¢wïÞ¢¸¸XܸqCDFFŠW_}U!Ä7„F£iiiB¯×‹üQXYY‰+W®ˆ²²2aee%/^, ƒøôÓO‘ ƒX¹r¥ðññB±{÷n¡V«Ell¬¸uë–ÈÊÊݺu{÷î%%%B£Ñ!„¨®®®®®býúõB¯×‹ÌÌL¡ÕjÅO?ý$Ö®]+‚‚‚e ¯½öZ“k*))"--Mܾ}[ÄÇÇ N' C³Yš;Ö-yÿ-Yrr²hAYZL­ !Daa¡ðòòW¯^£G_|ñÅ}¯ÉœµÖÒ÷ŸL£Äûç½¢¢¢ÄÂ… ÛIII"88¸Ñ9ÑÑÑâwÞir½¬w"""""ÅÉ•åÉ&½^¨­­…ƒƒRRR°|ùr€­­-²³³1aÂh4x{{ÃÆÆUUUƒÁ€ùóçC¥R!<<jµo¼ñ†qûæÍ›Æyìíí±bÅ ØÛÛcĈ˜;w.¾úê«FYöìÙWWWÌ™3O=õ¦OŸŽÔÔTLš4 §NÂ’%Kpøða,X°ÙÙÙ¨­­mrMÛ¶mChh(&L˜;;;¼ýöÛ˜={6jjj˜Å”œÔ:–Rk555˜6m>ÿüs8::6{M¬µÎÍRjº9ÕÕÕèÚµk£}]»vm4Ö;‘òÈÒlŠˆˆÀäÉ“1|øpèt:ÄÄÄ ¢¢ ÑhpìØ1<ýôÓèÛ·/&NœƒÁÐèõ RT*4 Ôjµqû^ÞÞÞ°µµ5n?ú裸xñb£sΟ?_~ù}úô1þÛºu+*++áî¢  ¯¿þ:lllðâ‹/¢{÷îM®éüùóèׯŸqÛÆÆóçχ½½ý³˜’“ZÇRj->>½{÷†²²²PUU…3gΠ°°°É5±Ö:7K©éæØÙÙ›E jjj`gg×ä\Ö;‘ò¨åTÄÄD$&&"??ëÖ­Ã /¼€üü|ìܹ .Ä7ß|ƒáÇÃÚÚú¾ÍSüy‘å«W¯ÂÁÁ¡Ñ>­V‹ddd÷ÕÔÔ@¥RA¯×ÃÝÝiiiÆcÇÇØ±c›Ìåàà€+W®4Ú·cÇ„……=0‹)9©u,¥Ö>øà”——#66pæÌTTT ¼¼›6mj4k­s³”šnŽO“Z8{ö,†Úä\Ö;‘òÈòdÓŠ+ µZ   DGGãÒ¥K€ÒÒRøùù!$$ÖÖÖ8|ø0nܸѪyJKK?_]]7"<<¼Ñ9ááá8tèNŸ> ¸}û6‘––† .@§Óáüùó€ììlœ8qãÆìܹ'NœŒ3»ví2~(ÊÉÉÁK/½kkëf1%'µŽ¥ÔÚ’%K——güˆE‹M¬5j`)5ÝœaÆÁ`0`ÿþýþh4åååñÞJDDDDÔY˜ººZ°ÀmII‰ðôôaaa¢[·nbãÆB!.^¼(œœœÄ¨Q£Dxx¸xöÙgEß¾}Edd¤(++k´Xkqq±èÚµ«q»  @8;; !þXàV§Ó "\]]ÅèÑ£EMMM£n…"11QhµZ&ÜÜÜÄ”)SD}}½Bˆ˜˜Ñ£G1jÔ(ѽ{w±mÛ6ãët:Xºt©q;&&F8::а°0¡ÕjÅúõ똥¹c-Ñ’÷ß’µtÁ^Kªµ{ýyðŽRk\0YJ½6øóáB‘šš*zöì)"##…³³³HLL4c½)Z®,_£swwGQQ‘ñç¯àääððð@qq1Ž= ''' 4%%%8{ö,\\\ „0ŽãããƒêêjãöàÁƒqùòeã¶££#²³³qäÈtéÒO<ñT*ÜÝÝ‹ìÀ¼yó0uêTœ\´„­­-FõÀóÜÜÜàæævßc~~~ðóó3i>___øúú¶8‹©9©å,©ÖZ‚µÖy)¥¦]\\àââbÒ¹¬w"""""åeͦö ÕjáããcîšÏÒ‘rRët¤ÿCÖIÁRj…õNDDDDd™TâÞï]4w¢J…äädL›6MîLtåýOIIATTL,K’ßyt–¿_KÃz'""""’EžÅ>ÙDDDDDDDDD›MDDDDDDDD$6›ˆˆˆˆˆˆˆˆH2l6‘dØl"""""""""ɰÙDDDDDDDDD’a³‰ˆˆˆˆˆˆˆˆ$£nÉÉQQQˆŠŠ’+ ‘‘J¥2w"IñþIDDDDD…ÉͦíÛ·Ë™ƒLlî²9r$k‡5MDDDDD‰J!Ì‚ˆˆˆˆˆˆˆˆ!k6‘dØl"""""""""ɰÙDDDDDDDDD’ù?øã·ûv_.IEND®B`‚bm3.7.0/doc/html/doxygen.css0000644000175000017500000001473311365042626014125 0ustar tlktlk/* The standard CSS for doxygen */ body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; font-size: 12px; } /* @group Heading Levels */ h1 { text-align: center; font-size: 150%; } h2 { font-size: 120%; } h3 { font-size: 100%; } dt { font-weight: bold; } div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; } p.startli, p.startdd { margin-top: 2px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } div.qindex, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #153788; font-weight: normal; text-decoration: none; } .contents a:visited { color: #1b77c5; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } .contents a.qindexHL:visited { color: #ffffff; } a.el { font-weight: bold; } a.elRef { } a.code { } a.codeRef { } /* @end */ dl.el { margin-left: -1cm; } .fragment { font-family: monospace, fixed; font-size: 105%; } pre.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 4px 6px; margin: 4px 8px 4px 2px; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } div.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background: white; color: black; margin-right: 20px; margin-left: 20px; } td.indexkey { background-color: #e8eef2; font-weight: bold; border: 1px solid #CCCCCC; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { background-color: #e8eef2; border: 1px solid #CCCCCC; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #f0f0f0; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } img.footer { border: 0px; vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } /* @end */ .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } th.dirtab { background: #e8eef2; font-weight: bold; } hr { height: 0; border: none; border-top: 1px solid #666; } /* @group Member Descriptions */ .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #FAFAFA; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-top: 1px solid #ccc; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memTemplParams { color: #606060; white-space: nowrap; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 0; margin-bottom: 10px; } .memname { white-space: nowrap; font-weight: bold; } .memproto, .memdoc { border: 1px solid #84b0c7; } .memproto { padding: 0; background-color: #d5e1e8; font-weight: bold; -webkit-border-top-left-radius: 8px; -webkit-border-top-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-topleft: 8px; -moz-border-radius-topright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .memdoc { padding: 2px 5px; background-color: #eef3f5; border-top-width: 0; -webkit-border-bottom-left-radius: 8px; -webkit-border-bottom-right-radius: 8px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -moz-border-radius-bottomleft: 8px; -moz-border-radius-bottomright: 8px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } /* @end */ /* @group Directory (tree) */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin: 0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title with an image of your choice. Simply uncomment the next two styles, specify the name of your image and be sure to set 'height' to the proper pixel height of your image. */ /* .directory h3.swap { height: 61px; background-repeat: no-repeat; background-image: url("yourimage.gif"); } .directory h3.swap span { display: none; } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } /* @end */ address { font-style: normal; color: #333; } bm3.7.0/doc/html/a00005.html0000644000175000017500000001502311365042627013423 0ustar tlktlk BitMagic: sample5.cpp

sample5.cpp

Example demonstrates using enumerators - the fastest way to retrieve indexes of 1 bits from the bitvector. This approach works faster than get_first/get_next functions.

See also:
bm::bvector<>::enumerator

For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample5.cpp
 Example demonstrates using enumerators - the fastest way to retrieve 
 indexes of 1 bits from the bitvector. This approach works faster than
 get_first/get_next functions.
 
  \sa bm::bvector<>::enumerator 

For more information please visit:  http://bmagic.sourceforge.net

*/

#include <iostream>
#include <algorithm>
#include "bm.h"

using namespace std;

void Print(unsigned n)
{
    cout << n << endl;;
}

int main(void)
{
    bm::bvector<>   bv;    

    bv[10] = true;
    bv[100] = true;
    bv[10000] = true;

    bm::bvector<>::enumerator en = bv.first();
    bm::bvector<>::enumerator en_end = bv.end();

    while (en < en_end)
    {
        cout << *en << endl;
        ++en;  // Fastest way to increment enumerator
    }

    en = bv.first();

    // This is not the fastest way to do the job, because for_each 
    // often will try to calculate difference between iterators,
    // which is expensive for enumerators.
    // But it can be useful for some STL loyal applications. 

    std::for_each(en, en_end, Print);

    return 0;
}

Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x77.html0000644000175000017500000000730111365042652017723 0ustar tlktlk BitMagic: Data Fields
 

- w -

  • word_bitcount() : bm
  • wordcmp() : bm
  • wordcmp0() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00057.html0000644000175000017500000003460511365042652013437 0ustar tlktlk BitMagic: bm::deseriaizer_base< DEC > Class Template Reference

bm::deseriaizer_base< DEC > Class Template Reference
[bvector serialization]

Base deserialization class. More...

#include <bmserial.h>

Inheritance diagram for bm::deseriaizer_base< DEC >:

Public Types

typedef DEC decoder_type

Protected Member Functions

 deseriaizer_base ()
unsigned read_gap_block (decoder_type &decoder, unsigned block_type, bm::gap_word_t *dst_block, bm::gap_word_t &gap_head)
 Read GAP block from the stream.
unsigned read_id_list (decoder_type &decoder, unsigned block_type, bm::gap_word_t *dst_arr)
 Read list of bit ids.

Protected Attributes

bm::gap_word_t id_array_ [bm::gap_equiv_len *2]

Detailed Description

template<class DEC>
class bm::deseriaizer_base< DEC >

Base deserialization class.

Definition at line 251 of file bmserial.h.


Member Typedef Documentation

template<class DEC>
typedef DEC bm::deseriaizer_base< DEC >::decoder_type

Reimplemented in bm::deserializer< BV, DEC >, and bm::serial_stream_iterator< DEC >.

Definition at line 254 of file bmserial.h.


Constructor & Destructor Documentation

template<class DEC>
bm::deseriaizer_base< DEC >::deseriaizer_base (  )  [inline, protected]

Definition at line 256 of file bmserial.h.


Member Function Documentation

template<class DEC >
unsigned bm::deseriaizer_base< DEC >::read_id_list ( decoder_type decoder,
unsigned  block_type,
bm::gap_word_t dst_arr 
) [inline, protected]

Field Documentation


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x66.html0000644000175000017500000001017511365042652017724 0ustar tlktlk BitMagic: Data Fields
 

- f -

  • find_effective_columns() : bm
  • for_each_block() : bm
  • for_each_dgap() : bm
  • for_each_gap_dbit() : bm
  • for_each_nzblock() : bm
  • for_each_nzblock2() : bm
  • for_each_nzblock_if() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00194.md50000644000175000017500000000004011365042645013146 0ustar tlktlk7db7340bc3cdc3760d3615919ce45a57bm3.7.0/doc/html/a00068.html0000644000175000017500000006521511365042652013442 0ustar tlktlk BitMagic: bm::gap_transpose_engine< GT, BT, BLOCK_SIZE > Class Template Reference

bm::gap_transpose_engine< GT, BT, BLOCK_SIZE > Class Template Reference

Bit-plain splicing of a GAP block. More...

#include <bmtrans.h>

Collaboration diagram for bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >:

Public Types

typedef tmatrix< GT, sizeof(GT)*8,(((BLOCK_SIZE
*sizeof(unsigned))/(sizeof(GT)))/(sizeof(GT)*8)) 
tmatrix_type )
 cryptic calculation of equivalent size for the transpose matrix based on BLOCK_SIZE and sizeof(GT)(16)

Public Member Functions

 gap_transpose_engine ()
void transpose (const GT *BMRESTRICT gap_buf)
 Transpose GAP block through a temp.
void transpose (const GT *BMRESTRICT garr, unsigned garr_size)
 Transpose array of shorts.
void compute_distance_matrix ()
void reduce ()
void restore ()
void trestore (GT gap_head, GT *BMRESTRICT gap_buf)
 Restore GAP block from the transposed matrix.

Data Fields

tmatrix_type tmatrix_
unsigned eff_cols_
unsigned distance_ [tmatrix_type::n_rows][tmatrix_type::n_rows]
unsigned char pc_vector_ [tmatrix_type::n_rows]
unsigned pc_vector_stat_ [bm::ibpc_end]
tmatrix_type::rstat rstat_vector_ [tmatrix_type::n_rows]
GT BM_ALIGN16 tmp_gap_block_[BLOCK_SIZE *2] BM_ALIGN16ATTR

Detailed Description

template<typename GT, typename BT, unsigned BLOCK_SIZE>
class bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >

Bit-plain splicing of a GAP block.

GT - gap word type BT - block word type BLOCK_SIZE - bit block size in words (works as a transposition basis)

Definition at line 774 of file bmtrans.h.


Member Typedef Documentation

template<typename GT , typename BT , unsigned BLOCK_SIZE>
typedef tmatrix<GT, sizeof(GT)*8, (((BLOCK_SIZE * sizeof(unsigned)) / (sizeof(GT))) / (sizeof(GT) * 8)) bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::tmatrix_type)

cryptic calculation of equivalent size for the transpose matrix based on BLOCK_SIZE and sizeof(GT)(16)

matrix[size_of_gap*8][(Size_block_in_bytes / size_of_gap) / number_of_planes)]

Definition at line 784 of file bmtrans.h.


Constructor & Destructor Documentation

template<typename GT , typename BT , unsigned BLOCK_SIZE>
bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::gap_transpose_engine (  )  [inline]

Definition at line 786 of file bmtrans.h.


Member Function Documentation

template<typename GT , typename BT , unsigned BLOCK_SIZE>
void bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::restore (  )  [inline]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
void bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::transpose ( const GT *BMRESTRICT  garr,
unsigned  garr_size 
) [inline]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
void bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::transpose ( const GT *BMRESTRICT  gap_buf  )  [inline]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
void bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::trestore ( GT  gap_head,
GT *BMRESTRICT  gap_buf 
) [inline]

Restore GAP block from the transposed matrix.

Definition at line 860 of file bmtrans.h.

References BM_ASSERT, and bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::tmatrix_.


Field Documentation

template<typename GT , typename BT , unsigned BLOCK_SIZE>
GT BM_ALIGN16 tmp_gap_block_ [BLOCK_SIZE*2] bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::BM_ALIGN16ATTR

Definition at line 885 of file bmtrans.h.

template<typename GT , typename BT , unsigned BLOCK_SIZE>
unsigned bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::distance_[tmatrix_type::n_rows][tmatrix_type::n_rows]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
unsigned bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::eff_cols_
template<typename GT , typename BT , unsigned BLOCK_SIZE>
unsigned char bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::pc_vector_[tmatrix_type::n_rows]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
unsigned bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::pc_vector_stat_[bm::ibpc_end]
template<typename GT , typename BT , unsigned BLOCK_SIZE>
tmatrix_type::rstat bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::rstat_vector_[tmatrix_type::n_rows]

Definition at line 883 of file bmtrans.h.

Referenced by bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::reduce().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00093_source.html0000644000175000017500000167556611365042627015043 0ustar tlktlk BitMagic: bmfunc.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00075.html0000644000175000017500000001540711365042652013436 0ustar tlktlk BitMagic: bm::operation_deserializer< BV > Class Template Reference

bm::operation_deserializer< BV > Class Template Reference
[bvector serialization]

Class deserializer, can perform logical operation on bit-vector and serialized bit-vector. More...

#include <bmserial.h>

Public Types

typedef BV bvector_type

Static Public Member Functions

static unsigned deserialize (bvector_type &bv, const unsigned char *buf, bm::word_t *temp_block, set_operation op=bm::set_OR)

Detailed Description

template<class BV>
class bm::operation_deserializer< BV >

Class deserializer, can perform logical operation on bit-vector and serialized bit-vector.

Definition at line 506 of file bmserial.h.


Member Typedef Documentation

template<class BV >
typedef BV bm::operation_deserializer< BV >::bvector_type

Definition at line 509 of file bmserial.h.


Member Function Documentation

template<class BV >
unsigned bm::operation_deserializer< BV >::deserialize ( bvector_type bv,
const unsigned char *  buf,
bm::word_t temp_block,
set_operation  op = bm::set_OR 
) [inline, static]

The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00090_source.html0000644000175000017500000006514611365042627015022 0ustar tlktlk BitMagic: bmalloc.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x65.html0000644000175000017500000000713011365042652016705 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- e -

  • export_array() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00238.md50000644000175000017500000000004011365042650013141 0ustar tlktlk0036178bda10eeca940ce16b442601f9bm3.7.0/doc/html/a00258.md50000644000175000017500000000004011365042652013145 0ustar tlktlkfd7009427ca5aa63e7a1715b0970796bbm3.7.0/doc/html/a00215.png0000644000175000017500000000573111365042646013254 0ustar tlktlk‰PNG  IHDRè(ôA¶ÌbKGDÿÿÿ ½§“ ŽIDATxœíPTÕûÇßË‚«(+˜+…$¨ ?"¥ $'–È ³4gú1”è8¤V’R¤Lc:LÚÈ,P´òÃ&eˆ¤ ÑDÉCÙErå§! ûþþá×;­°Èê~ê¼fî ç<÷9ÏóÜÝ÷½{νËÊHÀ&±»ß Ë 6Œ¨@`ÃØßÞQ__“'OÞ\‚ÿ4AAApww7ïämh4›ØÄv7Fs»Ùï z ±¸+Ü;d2Ù€ýb*Ø0B  #*Ø0B  #*Ø0B  cñ6ËP©­­EII V®\9 éü7ÉÍÍ…J¥ÂO<ñ¯‰§ÑhPWW7 mæÌ™ˆŽŽ±RRz{{ܼMáììŒ%K–à‘G´¶¶"556lpœ¯¿þS§NÅÓO?-õuww###¿þú+úúúðè£bÅŠP*•w¬ùn0â+huu5öîÝ;¹ügÉÊÊÂñãÇÿUñššš ×ë¡×ë¡Ñh Ñh¤vssó¨ø¿ÿþû(++ƒ^¯ÇåË—‘‘‘”••ÚÛÛñå—_Jc®Y³ÆLôiii(((ÚõõõÀ®]»àêꊇ~ðööÆéÓ§GëÐXň¯ Á@ÄÆÆJ¯Y³¬:‘Õýúõxê©§¤vDDöìÙƒýû÷ÃÃÃçÏŸ—lGÅÛo¿m1æK/½dffB.—Þ{ï=ÄÇÇ#** ÕÕÕP(C®a4•9¨Édºuë T*1eÊìØ±ÐÜÜ µZ]»vaÚ´ipuuÅþýû±~ýz¸ººB¥R!33S'99¯¾úªÅöáÇáéé GGG¬Zµ ñññøþûïðòò‚½½=T*’““­ÎÁÚ|-ż™™™ðððÀ¸qã‰öövÉöÛo¿!88cǎŬY³žž.Ù~øáøúúb̘1˜;w®t¥€¢¢"@¡PÀÛÛ¹¹¹#Šg0°hÑ"|˜2™Œï¼óoܸÁââbNœ8‘YYYlll¤7oÞL“ÉÄ={ö“’’h2™øÉ'ŸÐËËK+77—Ÿþù€í‹/r„ ÌËË£ÑhäöíÛ)—Ë™––ÆëׯS¡P0;;›]]]üé§ŸhggGƒÁ`UÖì;XÌÁ8}ú4 µZ-F#SRR€)))ìèè J¥âîÝ»ÙÕÕÅÂÂB*•JþòË/Ôéttrrbvv6;;;™˜˜ÈéÓ§Ód2ñÏ?ÿ¤““8À®®.æääÐÑÑ‘ÕÕÕ#Š7nÜ8FEEñøñãìîî6«ãâÅ‹|÷Ýw9{öì;¾GV¯^ÍÕ«Wí e…¿B¡àÆ™ššÊ}ûö1..Ž^^^¬©©!IÖÕÕqüøñ$ÉÖÖVªT*;vŒ===$É¥K—2!!$ùÙgŸqÞ¼ysˆ‰‰alll¿~­VËÀÀ@~õÕWìêêv°ð,î¨tÒ¤IRÑ$™À¨¨(666;::H’.\ ½½=ÿþûo’ä©S§øàƒ)Nbb"Ÿþy©m2™¨R©˜––Æ®®.–——K6NG…BÁšš«r°fßÁbƆ øòË/›õùûû3%%…™™™œ;w®™mݺuŒ‹‹ã§Ÿ~ʈˆ©¿§§‡III¼qã÷îÝË3¿^x|ðÁ°ãét:`CCƒÙ1?rä—.]Joooîܹ“ÍÍ̓ÖKÞ].\¸Ë–-ã²eËøì³ÏÒÍÍyyy$ÍJ’nnn¬¨¨Úÿhbb"-Zd1‡7ß|“«V­ÐvâÄ ®X±‚=ô7mÚÄúúz«k´$ÐQ™ƒzzzÂÁÁAjûùù¡°°Pj?ÀÍ•6…B{{{©=T.]º„Y³fIm™L†3f ÊË˱iÓ&ÔÖÖbòäÉ0™LfþÖä0”}‡s àëëkÖçãã#ÕX]] Éf4±dÉôööšÕïàà€7ôz½™ fÏž N£Ñ8¬x`gg‡iÓ¦JJJ°víZøøø ..¡¡¡V½~w‹mÛ¶™ÍAÓÓÓñÚk¯¡©©ÉªqT*êëë-Úu:üüü´!((MMMHMMÅÂ… 0àGbkÞ~0 &Ož<CK899õ[ýkmmäää !!Z­O>ù$är9œG5þí 7æ¤I“`0Ìún?¥R‰ àèÑ£’Íh4B&“áÃ?ìçwèÐ!„††B©TâìÙ³f¶ææfLœ8cÇŽV¼¦¦&3:88@¡PàÚµkhiiAoo¯ÙIÙVxüñÇÑÚÚŠëׯ[å§V«±víZ”——#00ÐÌvåÊX¼]s‹¾¾>„½½=&L˜`uî1*‹D—.]Âwß}øë¯¿°oß>é,l åååÈÏϰ­V«‘““ƒk×®JKKQUU™L½^,X°r¹¥¥¥V¿@Ö2ܘ¡¡¡ÈÌÌDcc# ²²?ÿü3€›5ãܹs€ÎÎN";;aaaÈËË“ÄvòäI¼òÊ+Ëå CAAþøã7G´Z-Ôjõ°ãÝNPP***ðÑGA«ÕÂËË [·nECCðaNN*++‡íhkkC[[ôz=áççgõ ÚÝÝo½õ¢££ñûï¿Ký:QQQX¼x±Ù•úŸ!::óçÏI”””ààÁƒ#ªKâöϼكΛ73gÎdHH§NÊððpöôôHsº[ÔÔÔ˜Í ***Ìæ ±±± ²Ø~ýõ×éêêJµZÍùóç3 €ß|ó ëëë9eʆ„„P­V3<<œžžž|î¹ç¬ÊÁš}‹9&“‰Ë—/§³³3.\Hwww†‡‡3%%…$¹sçN*•J†††ÒÍÍ/¾ø"ûúú¤ãáââÂÐÐP*•JîÞ½[wË–-tvvfXXxà¾ñÆ#ЧÓé(—Ë-ÖqåÊnÙ²…¾¾¾ƒÖKZžCNŸ>[·n¶¿B¡0û³½½=ƒƒƒyîÜ9’ýç sæÌapp0ËÊÊHšÏAI²··—ñññT(ôõõåc=Æ1cÆpåÊ•ììì0·¬¬,†„„0++KZ«¸[‹D·0üñÇÍNFƒÁÀªª*ž9s†ÇŽcww7g̘ÁÒÒR’d{{; xæÌ’7TTTtWr¹ÅHbVVV²  €íííýlz½žùùù<{öl?Û… ˜ŸŸ?àBD]]óóóyþüùQ‹w'z{{­ö¹ÅåË—ùñÇÛÿNôõõ±©©Ij æçç³¥¥eP¿¶¶6±°°W¯^tß‘ÔÿO, TöÿF‰ôôt,_¾Üæþ£BEEžyæ|ûí·ðññV«Err2jkkmj.ÔØØh¶@v;þþþ¸‡Ù.Û¶mCLL <==ïw*÷™LFƒ˜˜³þÿ™'‰æÌ™ƒ`ÇŽhii——Ž9bSân.¦¸¸¸X´;::ÞÃll›Í›7ßïlžÿ@dd$"##ïwƒâââ‚Å‹ßï4ÿÄ×ÍFT °a„@FT °a„@FT °a„@Æâ}P[ø*‘@ð_§ß£~âç‚ûÃ@??ØO ÀvsPÀ†l!PÀ†ù?!<ßpAtIEND®B`‚bm3.7.0/doc/html/a00086.html0000644000175000017500000002712011365042652013433 0ustar tlktlk BitMagic: bm::tmatrix< T, ROWS, COLS > Struct Template Reference

bm::tmatrix< T, ROWS, COLS > Struct Template Reference

Mini-matrix for bit transposition purposes. More...

#include <bmtrans.h>

Collaboration diagram for bm::tmatrix< T, ROWS, COLS >:

Data Structures

struct  rstat
 Row characteristics for transposed matrix. More...

Public Types

enum  params { n_rows = ROWS, n_columns = COLS }
typedef T value_type

Public Member Functions

const T * row (unsigned row_idx) const
T * row (unsigned row_idx)

Static Public Member Functions

static unsigned rows ()
static unsigned cols ()

Data Fields

T BM_ALIGN16 value[ROWS][COLS] BM_ALIGN16ATTR

Detailed Description

template<typename T, unsigned ROWS, unsigned COLS>
struct bm::tmatrix< T, ROWS, COLS >

Mini-matrix for bit transposition purposes.

Definition at line 42 of file bmtrans.h.


Member Typedef Documentation

template<typename T , unsigned ROWS, unsigned COLS>
typedef T bm::tmatrix< T, ROWS, COLS >::value_type

Definition at line 44 of file bmtrans.h.


Member Enumeration Documentation

template<typename T , unsigned ROWS, unsigned COLS>
enum bm::tmatrix::params
Enumerator:
n_rows 
n_columns 

Definition at line 48 of file bmtrans.h.


Member Function Documentation

template<typename T , unsigned ROWS, unsigned COLS>
static unsigned bm::tmatrix< T, ROWS, COLS >::cols (  )  [inline, static]

Definition at line 64 of file bmtrans.h.

template<typename T , unsigned ROWS, unsigned COLS>
T* bm::tmatrix< T, ROWS, COLS >::row ( unsigned  row_idx  )  [inline]

Definition at line 67 of file bmtrans.h.

template<typename T , unsigned ROWS, unsigned COLS>
const T* bm::tmatrix< T, ROWS, COLS >::row ( unsigned  row_idx  )  const [inline]

Definition at line 66 of file bmtrans.h.

template<typename T , unsigned ROWS, unsigned COLS>
static unsigned bm::tmatrix< T, ROWS, COLS >::rows (  )  [inline, static]

Definition at line 63 of file bmtrans.h.


Field Documentation

template<typename T , unsigned ROWS, unsigned COLS>
T BM_ALIGN16 value [ROWS][COLS] bm::tmatrix< T, ROWS, COLS >::BM_ALIGN16ATTR

Definition at line 46 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00059.html0000644000175000017500000001243211365042651013432 0ustar tlktlk BitMagic: bm::bvector< Alloc >::iterator_base::dgap_descr Struct Reference

bm::bvector< Alloc >::iterator_base::dgap_descr Struct Reference

Information about current DGAP block. More...

#include <bm.h>

Data Fields

const gap_word_tptr
 Word pointer.
gap_word_t gap_len
 Current dgap length.

Detailed Description

template<class Alloc>
struct bm::bvector< Alloc >::iterator_base::dgap_descr

Information about current DGAP block.

Definition at line 299 of file bm.h.


Field Documentation

Current dgap length.

Definition at line 302 of file bm.h.

template<class Alloc>
const gap_word_t* bm::bvector< Alloc >::iterator_base::dgap_descr::ptr

Word pointer.

Definition at line 301 of file bm.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00173.map0000644000175000017500000000020011365042644013230 0ustar tlktlk bm3.7.0/doc/html/a00176.md50000644000175000017500000000004011365042644013145 0ustar tlktlk67c358c126db0c75eec73e61561750a0bm3.7.0/doc/html/a00230.md50000644000175000017500000000004011365042647013137 0ustar tlktlk4c41442a98455f80481f2e826a89a0fbbm3.7.0/doc/html/namespacemembers_0x6c.html0000644000175000017500000000716611365042652016774 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- l -

  • LittleEndian : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00148.png0000644000175000017500000012713511365042635013262 0ustar tlktlk‰PNG  IHDR›]¤~lbKGDÿÿÿ ½§“ IDATxœìÝyxTõÙÿñÏd&I&û¾Y ldUP¨ Öå§ k]Zm]©hµ­ÚâV»X­¶jõy(Š+ŠZ+ ² ¢ ŠY !!ûž=™ùý1™Â˜d’ð~]W®É™3sÎ=™h’÷÷>&»Ýnpò¶y¸» „MpÂ&¸ŒÅÝ)??_[¶lqw§¼9s渻€° €~`Æ š?¾»Ë8åqÝ€“GØ@?²víZw—pJZ½zµ}ôQw—0(0³ .CØ—!l€Ë6Àe›à2„MpÂ& ÂÂB}üñÇî.£WÕ××kùòå’¤ÆÆF-[¶ì°knnÖÒ¥Kû²4aP~~¾V®\éî2\î©§žRqq±$©¡¡A«V­2>õÕWûœÆÆF½òÊ+}U"ް ô[·nUCCƒ$)**Jÿû¿ÿëæŠÐS„M Pv»]Ï>û¬fÏž­+®¸ÂXJVWW§… jÅŠºêª«tùå—ë£>Òßÿþw]~ùåºòÊ+µfÍã8/¿ü².¿ürÍš5K¿úÕ¯T^^~\ûrssuûí·ë‡?ü¡~ò“ŸhõêÕǬ¹¤¤D¿úÕ¯ºÝ·hÑ"¥§§kÑ¢Eª©©Ñ¢E‹´sçNUWWë·¿ýíq=V­Z¥«¯¾Z^x¡/^,»Ý~ÜÏ€ë60@effÊl6ëí·ßÖÃ?¬ÿûßZ·nÚÛÛµ}ûvíß¿_+V¬Ð 7Ü %K–(((Hï¼óŽæÌ™c,;ûòË/õÑGé¹çžÓ{ï½§!C†èÿþïÿ޹¯¹¹Y¿þõ¯5sæL­ZµJwß}·žyæíÚµë¨5·¶¶*77·Û}jllÔÂ… ¨… jÔ¨QjiiÑöíÛëka³Ù”‘‘¡¥K—ê•W^ÑúõëµcÇŽž~IàwNŒ¿¿¿n¾ùfY,;VW\q…V¯^­±cÇÊn·ëÇ?þ±L&“Î8ã ™ÍfÍ;ר~ã7$9ÂIjkkÓ!Côàƒª½½ý˜û6oÞ¬]~ùå’¤ñãÇë /ÔgŸ}¦Ñ£GŸðë1™Lò÷÷—ÅÒó_Qnºé&Y,ÅÄÄhèСÆr<ô-Â&¨˜˜˜n¡Ì°aÃôõ×_Û>>>’$“É$OOO™ÍfcÛiÒ¤Iúúë¯uÛm·Éßß_gžy¦®½öZùûûu_II‰òóóuÍ5×ÇjiiÑĉ{ûe–‡‡‡‚‚‚Œí_#úaTmmm·íššôèv»]·Þz«n½õVeggë­·ÞÒïÿ{ýãÿ8ê¾!C†hܸqZ²d‰q¬––– yš››{üô_Ìl`€*))ÑæÍ›%IZ¹re;‹þýïkÁ‚2›Í9r¤.¸àUTTsßgœ¡;wjïÞ½’AÓ-·Ü¢õë×õ|‹E ª¯¯—$¥§§«°°°G5KÒ† ´gÏž?½Î&¨Q£FéùçŸ×òå˵oß>¥¤¤è’K.Q]]Ýqã‚ .Ðû￯›nºIAAAÊÌÌÔ/~ñ‹cî‹‹‹ÓM7ݤ[o½U#GŽT~~¾ÆŒ£óÎ;ï¨ç‹ŽŽVZZš~þóŸ+))Iuuu3fŒ±?88XùË_tÇwÈjµñ8ûÛß4{öl 6ì¸_+ú†ÉÎup»eË–iþüùZ»vmž×ÚÚª]»vÉßß_)))'tî¶¶6¥§§«µµUÉÉÉÝfmŸ$UTT(//Oaaa:tèq¯££Cßÿ½$G`æœ%%9–æäähĈò÷÷W}}ýQC'WY½zµ}ôQñkÀIÛFg˜———ÆRÇðôôÔ¸qãz¼O’ÂÂÂflWVVvR~°áÇ+))IcÇŽ=ìþ   yæ™Æv_Mp-Â&à2‹EGÜïíí݇ÕÀ›€Ëj„ î.nÄÕèà2„MpÂ&¸ a\†° .CØ—!lGÕÑa×ûïg«±±ý¤Ž³sg™¾ÿ¾ÂEU ¿²¸»ÐeÆŒî.¡‹%Dááש­­DÏ<³ü¤Žåáá§ÈÈŸ«µµXUUoËnosQ•èOLv»Ýîî"8ÕåççkË–-î.Ã`³Ùµvm‘Þ¯ìviÆŒ]~ùГ>î]wm’${ëÚkS”œl=écºÒœ9sÜ]À@·° t““S¦;îXªo¿-Íæø5aëÖ‡|ÒÇ~á…ÏôðÃïÉÃÃCv»]7Þ8M¿ýílùúzô±Ð/lcfäèfzñÅÏtþùK´kW¡4í’ I’.¼pLç¹l²ÛízõÕ:÷ÜÅÚº5×%Ç€û6íÙS®ýè/zä‘•jkëP{{‡$ÉÓÓC—^ú—gèÐ0¥¤DÊdrlwtt¨¸¸ZW\ñ7-Zôžš›™ã0Ð6p ³Ùìúç?×iÆŒ%Ý–Í9µµÙtÑEã\zÎK/ýÌf³±ÝÑa—Ýn×Ë/®éÓ뫯ò\z>ô-Â&NQyyºüògµhÑ{jmmW{»íÇÄÅ…hĈ(—ž÷ ÇSjo·©°°Z—]öW=úèûjiiwéyÐ7›8ÅØív½òÊz͘±X;vì=¤›ÉÉÓÓìÒ%tN£GÇ*&&è°û::l²ÙìúÇ?>ÓŒ‹õõ×{]~~ô.Â&N1=öxàmµ´¾›É©­­ÃåKèœ~ô£ÈÓÓ|Äýíí6ååUè’Kþ¬íÛó{¥ôÂ&N1÷Ýw±n¹eºL&“<š4)¹WÏ}ñÅãÔÖæ˜åéi–ŸŸn¼qª¾ývŸ23KzõÜè=„Mœ¢²³Kõüóktß}ëÉ'çËê$éüóGu€·+L™’,Éq%¼Q£b´fͽzä‘+tÆCuß}o¨£ãÈÃËÐ6p ²Ûíºÿþ1"J7Ü0U’cYÝš5÷*--F—^:¾×kðò²è’KNÓ-·L7–Í™L&-^Z¼xŽÞzk›>ýô{w—€N„M k֤뭷¶iÉ’9 âîrúĬY£uå•gê¾ûV¨®®ÙÝå@„M uuͺ÷Þ7tå•gjÖ¬Ñî.§O=òÈjkk×¢Eï¹»ˆ° €AaÑ¢÷:—ËÝ]JŸ ¢Ç¿JË—oѺu™î.à”GØÀ·n]¦–/ߢÇ¿J!!~î.Ç-.¹ä4Íž=N÷Üóºöïoqw9§4Â&°††Ý{ïëš={œ.¹ä4w—ãV?~•ššZõĸ»€SaØã ÆÆV=þøUî.ÅíÂÂüõØcWêÕW7jóæÝî.à”EØÀµyón½úêF=òÈÿSX˜¿»Ëé.»l¼fÎ¥… —«±±ÕÝ園›€[µpárÍœ9JW\qº»ËéW–,™£êêF=ùä*w—pJ"l`úã?RUUƒ–,™ãîRúÈÈ@ýá—é_ÿÚ ¯¾ÚëîrN9„M 0ß|S þós=øàèîrú¥¹sÏÒ”))º÷Þ×ÕÖÖáîrN)„M mmZ¸p¹&N®yó&º»œ~Ëd2iñâ9ÊϯÔ_ÿú©»Ë8¥60€¼ðÂZåæ–ë©§®–Édrw9ýZbb¨î½÷"=ûì§ÊÊ*qw9§ Â&ˆÜÜr=óÌ´pá:4ÌÝå ?ûÙ95*F÷Üó†l6»»Ë8%60ØívÝsÏëJI‰Ô-·Ìpw9†Ùì¡§Ÿ¾Zß|“¯×^ÛàîrN „M K—~¡mÛöè駯‘ÅÂïžHK‹Ñ­·ž§'žX¥ÂÂjw—0èñÛ*ý\ii­}t¥n¾yºÆŽsw9Ò‚?Tdd î¿…»Kô›ƒÞüùóe2™ìGBÂUTìÑCý?·œÙ²e.O–-[Ö§¯ÁÇÇS[·þM}ô©Ìf·¿§'û1þ|—¿'®bqwôOOO-]ºÔÝeœ¤+ûüŒsçÎíÕã¿ñƽzüÛã†sºAèï›§„9sæhΜ2 F¼'=÷î»ïº»€£b\†° .CØ—!l€Ë6Àe›8@NNŽ^}õUw—q\ T^^~Ø} züñÇû¸¢Þ1Þ“ºº:}ýõ×Ú·oß3˜Þ€£!làzá…Ü]Æ1UVVjâĉzï½÷»¿¾¾^=ôPWÕ;úû{òüóÏ+66V7Ýt“ÆŽ«¹s窵µõÇ ¦÷àh›€n¼ñFUTT¸»ŒS^ii©,X ÷ß_Û·oמ={´sçN=ÿüóî. Àm›8ˆÍfÓwÞ)«Õªˆˆ=ñÄ’ÝD3gÎÔ3Ï<£˜˜…‡‡ë•W^Ñ=÷Ü£ððpEGGkùòåÆqxà…‡‡ËÛÛ[3fÌè¶Äêhû¾ýö[M™2E>>>JMMÕ²e˺Õ÷ÜsÏÉn·kÒ¤IÇ|-/½ô’åçç§n¸A6›íd¿}º$)((H^x¡víÚuÄ×2XÞ€#!là Û¶m“§§§JJJôöÛokñâÅzóÍ7ÕÖÖ¦µkת¦¦F………zøá‡uÓM7)<<\eeeºûî»õàƒJ’þóŸÿè_ÿú—6oÞ¬ŠŠ Y­V=öØcÇÜ×ÐР .¸@óæÍSmm­^xáýò—¿Ô¦M›$Iß}÷ž~úi½òÊ+Ç|úòË/•­;wêwÞѺuëzé«Ö»úë{2{öleffu666ê“O>ÑYguØ×1˜Þ€#±¸»ú›   =ùä“òôôÔÔ©Suûí·kÙ²eš:uªl6›î»ï>™L&Íœ9S‹E .4¶Ÿ~úiIRss³$©¥¥EZ¶l™ÚÚÚŽ¹ïƒ>Ptt´n»í6IÒyç§ë¯¿^+V¬Ðøñã5oÞ<½øâ‹ ;®×òè£ÊËËKIII=z´jkk]úµê+ýõ=™ª˜˜ùúújÆ ª­­UNN޾ýöÛþ³Ù¬ððpcûÀúšþúžHŽ+ÑÍŸ?_×_½~ûÛßê­·Þ2ΰÁôž a9xðvYY™BBBzt »Ý®§Ÿ~Z•••Z±b…š››uå•WsŸÕjÕ´iÓ”——×íãïÿ»Ìf³***´`Á-X°@999Z¾|¹þò—¿¸æ…÷cýõ=ioo׬Y³¤ŒŒ ]{íµ®yÁaÉËËÓ| Éq¹ú_|Q_|qޱxñbMŸ>]‹E&LÐu×]§¢¢¢cî›9s¦Ö¯_¯ôôtIŽ@gœq†Þyç=üðÃÚ¶m›ñqÆgèÐK/½$Iz÷ÝwõÝwß¹êËЯô×÷dÕªU*..Ö=÷Ü£ÒÒR#ˆªªª’4¸ß€#!là 'NÔÝwß­sÏ=W©©©JLLÔÍ7ßÜ£cüô§?UAAƧ™3gjîܹzä‘G޹/%%E<òˆ&Nœ¨™3g*55UcÆŒÑÕW_}Ìs.X°@ï¾ûnÏ_ðÐ_ß“mÛ¶©  @Ç×°aÃŒ‡zHÒà~OŽÄd·Ûíî.€Þ4þ|IÒÒ¥Kû9ÍÍÍÚ¼y³uúé§ŸÐy[ZZ´uëV577ë´ÓNSDDÄq퓤ÂÂBíÚµK±±±=zô ßL&“–.]ªyóæ¹ô¸Ë–-ÓüùóÕ“_CxONäû mãjt†f̘qRÇðööÖ´iÓz¼O’bcc{RçlxO–ÑÀe›à2„MpÂ&¸ a\†° .CØ—!l€Ë6àFo½µÍÝ%.eqwô…eË–©­­ÍÝebÛ¶H½üòŸäïßÿjë sçÎuw Ί+4oÞÖÚÚ®•+»‡Kû÷·hݺL7V¸a}lõêt55µt»Ïbñ0f8a}ìw¾’Ùlîv_{{‡>þø[56¶º©*À5›èCû÷·è“Ov©½ýÐùLmmúä“ïÜPà:„Mô¡?þöˆƒÀM&“Þz‹«Ò``#l ½ùæ—2™L‡Ý×ÑaÓgŸe¨¦¦±«\‡° €>RUÕ ³e³ÙŽú¸>ø¦*\° €>òþû;ÔÑa?êc::lúÛßV÷QE€ë6ÐGÞyçëãz\~~¥JKk{¹ w˜ìvûÑÿ‰ôš˜˜_é¹ç~¢+®8ÝÝ¥®°Î&¸ a\†° .CØ—!l€Ë6Àe›à2„MpÂ&¸ a\†° .CØ—!l€Ë6Àe›à2„MpÂ&¸ a\†° .CØ—!l€Ë6Àe›à2„MpÂ&¸ a\†° .CØ—!l€Ë6Àe›à2„Mp“Ýn·»»ú› 6è¯ýkœ'V#FT+<¼±WÏ3uêTÝyç½z@Ò6:›8Œüü|­X±¢×Ï3uja¯M+V¬Ð–-[zõ€“ÅÝП½ñÆî.á¤ÍŸ?ßÝ%àBg\†° .CØ—!l€Ë6Àe›pœœ½úê«.?nCCƒüq—è-„M¸@FF†^xá—·¾¾^=ôË ôÂ&¸ a.b³ÙtçwÊjµ*""BO<ñ„$©²²R3gÎÔ3Ï<£˜˜…‡‡ë•W^Ñ=÷Ü£ððpEGGkùòåG=öK/½¤ÄÄDùùùé†nÍfë‹—ôa.²mÛ6yzzª¤¤Do¿ý¶/^¬7ß|SmmmZ»v­jjjTXX¨‡~X7Ýt“ÂÃÃUVV¦»ï¾[>øàÛÑÑ¡/¿üRÙÙÙÚ¹s§Þyç­[·®×_ÍfW]]s¯Ÿƒ a.¤'Ÿ|RC† ÑÔ©Suûí·kÙ²e’]O÷ÝwŸL&“fΜ)‹Å¢… ÛõõõG=ö£>*///%%%iôèѪ­­uyýmmúê«<=ÿüÍŸÿ¢ââîÖ[omsùy0¸YÜ]½©¬¬^÷Þûº&L¦É“S4vlœ,–Þù·–¤¤$yzzÛcÆŒÑêÕ«m???I’Éd’···,‹±}4f³YáááÆö±¼š›ÛôÕW{õÅ»µqc¶¶oß«––vY,êèp,ÓÛ»·Â%çÀ©ƒ° 0¨yxHÿýï.ý÷¿»$I>>ž:㌡š<9Y“&%iüøDy{»æÇaEE÷`¦¬¬L!!!.9¶+ÔÕ5ëË/÷hË–ÝZ¿>[»víS{»Mžžfµ·Ûd·Û%Iíí]ó ¬Ö!î*a`P3›Íݶ››Û´iS¶¶lÙ­§ž²Éb1kܸ8M𢉓tæ™Ãäïï}BçÊËËÓ| K.¹DõõõzñÅuë­·öø8ï¾û®’““5f̘ªã@k×f(;Û_ûö ÑÈ‘¿‘$yzšÕÖÖa<æÀÏ–˜zÒ5àÔBØÔ>ùä»Cî³Û»ºwÚÛ;ôõ×ùúöÛ}úë_?•‡‡I#GFËϯU¾¾©ª®nPp°ßqkâĉºûî»õÔSO)++KãÇ×Í7߬ÊÊÊÕ¼`Áýìg?sIØ4jTŒ::º/jmmWmm“jk›:è®[g0u𾺺¦Ã.÷óö¶¶c*8ØO!!Ž[ÇÇ…„ø)$Ä_AAtTô¡m„M·ko·©¤¤VûöURW—R•ŠŠjÔÚÚ.É1Ü:::È2¼¼Ì²ÙìjhhUuuƒŠ‹kU[ëCÌf â¥úúæÕsÚi JH°ëþçE}òÉûš0a¸Ë®X××vìÈׯýµµ™tÖYêÝw¿VccËq‡o¡¡Ú±ã2›»º£ššZ੨¨F……ÕÛµ*.v„RMM­Æãƒ‚†(::È¢¢£ƒÓ}ÛÓÓ|ȹZN>°ª®nTuuCçGã!A•§§Y!!]A”#œò;à>çýÝ+æSôa ÷µ¶¶«¨¨¦[€ä ”öí«RII­1°ÛÛÛ¢ØXGaµ:–MÙívµ´´«¦¦Ñ3œa‚ŸŸ·B5th¨C¤––v•”Ô*=½HÛ¶í5‚ªcñð0Éb1w{ü¿þu“.¸àäu»KAA•fÍzHuuŽåg^^futØÔÑa—d’tì_¼¼,JMTrr¤ÒÒ¢•’©‘#£Ò-„:Ðï•3˜*.vŠÎPÊùšL&EDt ¢œß11ÁŠ‹ Rx¸µGfõõͪªjPUUƒBÕÔt…RÎ}]û»dκŸáT×}‡ °œœB›'Ïf³«¤¤Vùù•ÊϯRAA¥öîu|žŸ_©ÒÒ:9Ü â¥øøÅLJ($ÄO¾¾^2™¤ææÕÕ5©¬¬N{÷V¨¼¼Þ8~TT C;?ºÝúøxjË–\mÙ²[_|‘«o¾ÉW[[‡B5qâp}v’î¿ÿMµµ_à$9B§ÄDmÙò'µ·×û ýܼy×jÏž!ÊÏ÷—Éd’Íf;îç>ñÄUòõõRVV‰²²J”™Y¢}ûªe·Ûåãã©ää­ÔÔH¥ÔÔ(%$„3r,¬WQQŠŠª»-Ós„T5*/¯3:°<=ÍŠŒ´*&&X±±]¡T||ˆR…„ßU¤¹¹Ížª«UUµ¿[u`ç”#¨Ú¯ººC»æüý½ì§ÐPQPÐáT×çÎýÁÁ~2äøf‚ „M€ãS]Ý ½{·ƒ·Ò¾}UF—ЧB•¢ØØY­>F·ÐþýÍ*.v„RyyÆœ%oo‹a’£K)¬[¸tà¶êêmݺG›7çhË–\}÷]¡::lJI‰ÔĉI:ûìáš4)IÑÑAÆs.¿ü¯ÚºuÏ1_££KÇ®{î¹H¡¡eúÉO®Õ`ø19þ|IÒ­·.Ò/ùšjjšÔÞ~è<¤ƒ™ÍÊÍ]rH§NCC‹²³K•™Y¢ììRed+;»ÔÆîãã©ÔÔ¨Î(G•𥸸u'µµu¨´´NEEŽ.¸—é9B©ªªãñ>>žŠ î ¢ÒÙÕÕ-åççÚÙM¶C‚¨#uN9:«ÛÎN>'ooK·©à`?……ùKýBBüî¯ÐP…„øÓAú3Â&€Css›òó+»JÎΤ‚‚*cî‘Ù졘˜ %$„(>>T±±AÆðåææv•—×+/¯B{öTt ¡‚‚†hذ°Î éÀ0)TQQGœSSÓ¨ ²µysŽ6oÞ­ÌÌ™L҈њ4)I“&%é쳓æØç··Ûôøãïë…>;êë÷ô4+4ÔOÿøÇõ:óÌaZ¶l™æÏŸ?¨Â¦¥K—ªººAwÞ¹LkצsnÓYg Ó²e·w@³‹rrºÂ§ŒŒbee•ª°°Z’£«-9Ù@¥¤DQññ!'<©¹¹M……ÕR݃(ç<©††ãñV«¯1/ªk¨yHgH¨˜˜ yyõþ|®ººæ:§ «ª«UYYoV••û ¨¬V_…‡TXX€P9B)?…‡Ÿ÷Åëaœ:ÚÛm*.®ÑÞ½•Ú·ÏٕԵ쭬¬k¹XX˜¿B¢„„PÅÆËËˬöv›êêšTPP¥¼¼ ãXÎ?‚ÃÂü5th¸†SBB¨† ×Сa6,LAACŽ«Î––v}ùå­_Ÿ¥õë³´sgL&“Æ‹ÓĉIš81I& S`àá×ÑaÓ®]…Ú¸1G7fkË–\55µÉn·!82Éd²köìÓôÇ?^-«ÕW’MØTY¹_·Ýv‹ÌfGØ$9–°½úêFýáïÊf³«£ãðËêÒÒb”“Sª³Ï®éÓGêœsFhôè˜CõõÍPŽ*=Ýq[TT#ÉB9ºŸ"•še„PqqÁ.Ð]WפÂÂíÛWuHU\\Ûm½$EDtQ]³£·Ž`*<<àˆ³ªzSMM£**ö!UEÅ~UTtRÎíÊJÇ¿ƒ‡¤ûû{+<Üj„S¡¡þ óWXØU×¶gŸ¿F0(6À`R^^o„Gή$çvaaµ 9†j;:“RLLL&©µµCEE5FwR^^¹ŠŠjŒ.˜ˆˆ€B¤®0ièÐ0øô¸f»Ý®ï¿/ÒçŸ;Â%G8ÔªáÃÃuÎ9©š6m„¦LI‘ÕzøcÛívee•jÆ,mÜèè~ª­mTh¨¿&ONÖ”))š:5E?ûÙ«ÊÈ(êö\‹Å,“žxâJýøÇ»í,aÓW_íÕWüIíí&ùûû(>>D É$­^®ššÆÃv9mØð[íØ‘¯5kÒµn]¦*+÷+""@3f¤iÆ Gøt¼!âáÔÕu…PÎyP™™%*)©•äGPÑJNŽPZZŒRR!”«9æGuuH9‚¨9†š——סœÅ⡈ëCÌaTW·TÐ;íúR}}³ÊËëpª²r¿ÊËa•3*/ï §ZZºÏ5ó÷÷VD„U¡¡Žå{ Ph¨Ÿ""¬Ÿ;–÷)ü§$Â&HÚÚ:TXX­¼¼ ååUjïÞ £Ã(?¿RŽ«iyz𬸸%&†·¡¡2™ìªªjì&íÙSaüo2™Ø …A’sŽ’+fÞVkýú,#`ª¬Ü¯ÐPMšbLG òò*´aC¶6nÌÖ¦M9*/¯—ÕꫳÏ®iÓR5eJ²FŽŒîÖóòËŸkÑ¢÷ŒÀÍbñÐðááz饕œqÈ9\6•—×+<< ÇÏ«ªjP` ïIwÑ\zéOµm[H·ûÌf™ÍޝO[›í×i2™d·Û5iR’V¬¸M’´sgÖ­ËÔºu™Ú¶mìvé?HÐyç9§qãâ{4“éHêꚌð)+«k9^iiWåì€rÎ…JI‰Tl¬ëC(§öv›JKkUXX­Â®î¨‡šWTì7ïím1–ç9C©øxç¶#œêo3—Zº…O••ûUZZ§ÊJÇçeeuª¨Øß¹ÝÐí{Ʊ Õ_Vc¶TXX€±Œ/,Ì_‘‘V…„8öY,}ßú aô7MM­IŽÛ={*”Ÿß}ÉšsRbbWäèZ±ª©©Eyy•Ú³§B{ö”wKåÆR9çÜ¥ÄÄ®®¤®Ûðn¹]¡®®Y›6eÓîÝeòõõÒ„ Ã4mZªÎ9g„FŠ9bPQTT£³;?rTXX­!C¼4aÂpM™âè^;6L^^…&O~LŽüɤn˜¦‡úÑçØ,]ºL×_›î»ï ••5iâÄHô|Yц %jjj׬Yq=~nYY“Þ}7O×_Ÿ*/¯&æÏŸ¯K.¹FyyÃTYÙpÈòª£¹õÖóôÀ?:äþººf­_Ÿ©µk3´vm†Š‹kê¯sÏ¡óÎKÓ¹çŽPh¨k»{jkÊq[¢ÌÌbãûÚjõ1fA9B(Çr¼‡Å÷¦––öÎùQÕËöª;é®g÷ÉdRDD€ââ‚@ÊÙåüüdºÆz[G‡M••Žn©ŠŠz••Õ©²²AååõKùö«¢¢+¬:p™¢$£[ª{—”ósÿÎŽ©EDXYÎÀÀCØîPSÓhH{ö”kïÞJ£[ÉÙ½a2™¨¡CC@É*ÅÅ«¦¦Q¹¹åÚ½»\{ö”+7·L¹¹*.vÌÁ1›=rH4l˜cžRowUìÚU¨O?ý^Ÿ~ú½vìÈ—Ýnר±qáRªÎ:køC­ŠŠýÚ´)»³{)G{ö”ËËË¢3ÎHÔäÉ)š6-EãÇ'öø5ÄÄüJ’ôÚk?Ó¬Y£û‹‹k”™Y¢ôtÇr®o¾)PNN©ìÕÖ®QcãÎ ¬Ösåç7^ÕÕ«ÔÜœÝãçK&EGß%I*-}Q6[Ó ÃaÞ¼yZ²äoºêªçTXXs\W£óôôÐÖ­¿Wd¤õ˜MO/ÖÚµéúì³ mÙ’«Ž›Æ‹×Œ#uÞyiúÁzmÎQMMãáS×myyW•š­#s¡·QŠŠ ì•zŽÆ¹\ÏÙ!µo_•1Ô¼°°Z••]ÝQ~~Þ‡P±±AFÇTTTà€éª«kVyyÑå¡êèžr.ó«S]]s·çø!Td¤UááV…†ú)::H¡¡ÎûTý­[ €Saô–ÚÚFåæ:–¹íÞ]¦={ËÕrsËUWç <=ÍŠ‹ ÑС¡ÆUÚœŸÇLJª²r¿"9nË•›[Þ­Ã)**PLJkذp îøHJŠPbbïJjjjÕ† ÙZ½ú{ý÷¿ß«¸¸F‘‘Vþ({îMš¢à`¿Ã>·®®I›7ï6–Æef–Èl6é´Óâ5eJЦLIÑ™g•¯¯×IÕ¸|ùY­¾*-­Sff±¾ý¶P™™%jlt\­ÌÓÓ"›ÍÖm`ö7NÓ£þ¿§­­C .×›on“$mÚô; vB5'%ýZMMmJHÑë¯ßªÄÄÐ:ŽSyy½®¾úyåä”5pòô4몫ÎÒÓO_Ýãs44´hÆl­]›®µk3TPP%«ÕGӦЌ#5cÆÈ>é6ª®nPFFÉ!ÃÉN`à#|êúˆ>¡%®ÒÜܦ‚‚*ã {……ÕÚ·¯Ún^TTct¦™ÍŠŒ´v†OAÝ:¤âãCtBsÔÜ­¥¥ÝX¶çì”*)q,á+/¯SYY½ÊËÝT^iP’1àÜÙ毨¨@c攳‹ª?ÌÔ`#l€“Q_ßl,QËÍu†IeÚ³§BUU ’´'&†jøð îè.JLtJ11Ž¥Ý»ËŒPÉy¬ÜÜrcéIPÐ%%(EtLa.™¡t¢ŠŠj:»—viãÆ57·é´Óâ5sæ(Íœ9JcÇÆöjb -Úºu6ntt/íÚU(»Ý®´´Mš¢É““5iR²üý]óÚ**ök„‡ÕÜÜ&É1\ÒQÃ]zéôÜs×öèŠh -ºñÆW´iSŽ::lòò²(7wÉ Ï2ºóÎ¥zûí¯äáá!«Õ[Ë–ýBãÆÅŸÐ±œêêštÍ5/è»ïö¡å¡LZ¹òyæ°“:—$åä”iÍš®®§¦¦V¥¥EkÆŒ4MŸ>RgŸ=¼OƒÑªªed0œÜ1ÊùßlHˆŸÒÒ¢•š¥‘#Q#GFW*t'›Í®òòºÎ@ªæ©ÂÂj#Ì–$«Õ×èŽêJ9fH…‡[]2gË]ššZUZê ¥ö«¤¤Öè–*+«SUÕ~ת¢¢ûR>‹ÅC¡¡ŠˆPd¤µ[‡Tx¸Õ†inFØÇÒÔÔjt$ååUt†JŽ0ȹLÇÙ¡4lXX·.£a솆ÖB¤²–¾•«¾Þ±ddȯnÏ>9C¨ììR57·ÉÃäøøÎaäQAT¤’“#ûíü öv›JJjUTT}P‡Tµ±lïÀåiááŠQ\\HçmpççÁJH4a”“Ífï¼ê^½Ñ5UVVgtK•”ÔÛMM]ÿ?ñô4+,,@11 Ptt×mxxW80 »É8„MN-µµÚ½»\99eK×Ê•“Sª={*Œ%‘‘V%'GhøðˆÎ0ȱômèÐ0™Í*,¬6žï<Æž=å**ª‘Íf—‡‡©3”r<×¹ämøðpÅÅ… ˆ¾yyúä“]úôÓ]Ú²%W6›]g5ÌX—šÕíñ6›]»vv†KYúâ‹\54´(22PS§¦WŒsWÇŠÓ_ÿú©žzê£C:yœ,³"#­úøã»{t%µ¯¾Ú«yó^TSSk·¥yžžfÝÿlýò—3N¸æÂÂjuÖÃÝk’É$Ý{ï…Z°à‡'|lÉ´Þu×2½óÎײÛß¿C‡†iýúßÈd2©µµ]+V|©çž[£‚‚*Íž}šî¸ã|{Rç=œ¶¶mÙ’«Ï>s„OééÅòõõÒ¤II:çÇUî’“#\~Þá ¨¿ÿ¾¨[•›[®¶¶Y,><¢Û<¨´´%&†öÚ tWª©i4‚§‚‚*åçWRÕª­m4{pÕH Î0ê@õõÍ*)©Uyy½q[\\ÓÙ)UcÜ¿Wxg6{(,,@QQ]R‡ë– ?/8 Â&ƒO{»M•ÊÉ)SNNYçÛÊ”“Sjty{[””ä\¦®””Hc°v@€[0);»´óùŽc9çþ„…ùw>¿k“3T:¸Óg ÈÈ(Ö‡îÔªU;•ž^¤  !š1c¤fÍ­éÓGrö¬¬cYÜæÍ»USÓ¨?M™’¢I“’5ujJ¿ œöî­ÔE=£ÚÚ&üãÏÃÃCÞú裻{Ô½óÉ'ßéæ›_S{»M6Û¡!ÖÒ¥·hÆŒ“[ò–œ|ßa;²L&“®½v¢üª“ 0ìv»~÷»·ôê«%IO=5WóçOêö˜Ž›>øà=ûì§JO/ÖyçÔwÌÔ„ ÃOø¼ÇR\\ÓÙõ”¡õë3UW׬øøÎ!ãiš:5Å­3˧­­C99eÊÎ.é ¢ó òó+e³ÙåímQJJ¤FŒˆÖÈ‘Žä#FD¹=ˆí©ººfíÛW¥‚‚ªna”³SêXaT|¼c~Ô`£œššZURR«²²z•–:nÛÝ;¦üº™L&…‡ûwë’Š‰ RX˜¿bb‚îÜ&”ô;„M®ººfåä”*+«D»w;–«eg—jïÞJãjMÑÑA¡R¸’“#Œ€)66X&Õt†JåÊÎ.1¥ÂÂjI]ýaT„’“#”’©¤¤p9ZyýžÝn×7ß裾ՇîÔîÝeŠŒ ÔÅÕEÓ¤IIÝŒ½{+µaC–6nÌѦMÙ*+«W@€&NLêì^JQZZt†i÷›Í®×^Û 'ŸüP¡¡þÚ»·²[Øäáa’ÅbÖÛoß®ÓOO<îãþïÿnÒo~ó¦ìv^9}ýõNzÞÑ…>£; »ÏÃÃCçŸ?R/¾xýIÿÑþÐCï襗>Wnî’#Ën·kÍš =ûì§Úº5W& ×wÌÔyçìÕ÷Þ¹4Ó>íÜY ³ÙCgŸ=\Ó§;§´´è^;ÿÉjjjUvv©22J”•U¢ôô"ef–¨¨È±L×ßßûä#Gº÷Êx'ãhaÔ¾}݇˜)ŒrvH a”SKK»JKkª+ˆêÞ=åü‡Éñÿ/g7Tdd bbËöbb‚iUtt¢¢¬þg`@!lÐÿUW7(+«´óÊQŽ?Ô²³KURR+IòõõRRR¸9–À9º”üü¼ÕÒÒnt)íÞ]¦¬¬R£ÛÉ9—$8ØOII]ÏOJr„J ¡ƒê_Œm6»¾ür>üp§>üp§ «•˜ªÙ³OÓEÓé§'AUUƒ6lÈÖúõYZ¿>Kùù•òõõÒYg 3f.vZ|¿_”ž^¬{ï}]ß~»O¿øÅ Ýu×,ýèGVVV©±œÎÃäW^¹Q?üá˜ã:¦Ýn×ÿø±þüçÿ1d’CßsrŸôkøõ¯ßÐòå[Žxå8³ÙCcÆÄiÙ²›OzÈzFF±FŽ<¾Ðæ‹/vëo[­µk34jTŒî¸ã|Íž}ZŸ|OTVî׺u™Z³&]ëÖeª²r¿¢£ƒtÎ9©š1c¤¦LIéÑRHw©«kVV–c(¹s yzz±*+aBh¨¿ÒÒb4r¤#€r'ïoCÉ{êèaT•êêšÇ-ŒŠqûL/whkëPYYŠ‹kT\ì§JJ·ÅÅ5*)©Uqqm·™R>>ž”U±±ÁŠˆPt´#ŠŠ 4>ˆ¹€~‡° @ÿQVV¯¬,GwQff±.9ÿè²Z}”œ©ÔÔ(¥¦:f $'G(..X&“IeeõÊÉéZòæø¼\ûöUÉf³ËlöP||ˆRR"»u9%'G ˆ?JO”Ýn×öíùzï½ízÿý*)©Ujj”.¾xœ.¾xœÆŒqÌÞinnÓÖ­¹úüsG¸´kW¡L&“~ðƒxM›6BÓ¦¥êÌ3‡öÛ¡ÇknnÓŸþô‰^xa­Æ‹×’%sΗs4gÎs’KUüJýô§SŽûØ÷Üóº–-ûâ˜?>Q«V-8±p€—_þ\?¼ÒèØ;’­^}oŸ^—¤]» õ쳫õÁ;”ªÛo?_sæœÕgß+6›];whíÚ }þy¦¾ú*O6›]cÇÆéœsFhúô‘ê{Wr ´ÏÈ(Rzº#ˆJOw̆jll•‡‡I ¡JK‹6: ÒÒb4lXX¿W]]“1/êXaTDD@ç•ô£VW׬’’šÎªVÅÅ5*+«WQQµÊËëUXX£ŠŠúnsìBCýÐHYí蘊ŒttKEDXlÇ Ï6è{ÎÛÎ¥Œ Ç­sVEp°ŸRS#;çš8‚¥””HEEª­­C{ö”wÐ휩äüãÃjõÑðáF¨4|x¸’“3™Ò›'k×®B½÷Þv­\¹Cùù•JNŽÐe—®Ë.¯ääutØôí·û:;—²õå—¹jiiWrrDg¸”¢É“SztE¶þbýú,Ýwß UVî×o~s‰®»nò!WºâŠgµeK®n¿ý|ýö·—ôèøYY%úÍoÞÔæÍ»e6{vว§YóæMÔO\uR¯E’6lÈÖܹÏq¿‡‡‡‚ƒ}õä“stñÅãܶ”qÏžr=÷Ü­Xñ¥BCýuË-Óuíµ“ú|®R}}³6mÊѺuúì³LååUÈÏÏ[“''kúôš6mD¿›'v> W®dáÒ¥ WÁÂbBCyˆŽöCT”¯VÄ©.!(*ªbß̱¼yyÈåJ°¥x÷÷„rrÒ]ÇcOQ(”‰j:‰Pª×ª›!úúí®¨vŠº¢º#Hu¡ÄâZˆDÕlo)©´]²¶6‡cÅŠPª&ç#H9;¬©… …¢P±‰B¡tHTÃ^Œ¨ÊಲJ!“)`ddOO;øú2=A|}áïÏ££%òó+Ø^LYYe¬S©µU===¸¸0¥o~~LÙSFç “}ú…B‰„„lž„¦¦V¶Ïµ QŒSVÕ¼ÝÅÜÜps³Ñê÷%O㊺‚Þƒ.KÊ£‘Ë•mލjW±.)•%U³Ó ¦\OåˆruµfQ*1ÊÞÞ‚®i …B¡b…¢ûBPXX‰””¤¥•°“DRps³A` áîncc#ÔÔ4±=˜²³ËPZZ €™üÆã9´õRbÊÞüý9puµî×e"𦴴[·žÃñãɨªj„ž@Àã9 :Ú> ã ¨‹Öû‰jðÑGqþ</¼0ÿüç, j¦Ñ˜²³Ë0iÒWظq,«ÑX¦”$,lþñ(¼ÿþTM‡óT¤¥ ±}ûyœpp°Ðt˜E©$øùçx|ùåiØÛ[àË/_À„ š›[ÁãÙ#:ÚQQ~ õÒ!­7))©Ÿ/dûA¥§ QXX …B 33vã„b\Pýq: º©©iB~~ *Ÿ_Þöº……•¨¨`nDèÃÙy(ÜÝmY1ÊÃÃvàrmhŸ¨§¤±QÊŠQ RBa5ÄâÖ5hQ›øÄˆPª‡ªT¸¡@¡Pú=Tl¢P´…ºº¤¤³¢RrrD¢èëë±'{––ƒAPQQÌÌ2”•1åo÷¤öõå°n%{{zgLS46Jqýzâã3Ÿ úm##CLˆ÷ߟ ÏA³jÍÍ­ì„·.¾úê­j~NÁÌ™[`jj‚ýûßÔt88xð6Þ}÷7œ?ÿ¡VýÞÔAuu#~üñ ~þ9r¹‹‡âõ×£urò¢T*ǹl£q@ CC}Œç‰ÈH_DGû! À‰ºxÚhnnEff);-UÕü~Ôƒ ÉÝÝ© ª»Ô×·´‰Píb”êYU’¯¯¯''+¸»Ûu¢˜g;­¹ ËÈåJˆÅLi^qqU›+ªŠýú~1ÊÄ݃åêjÝÁEÅ( …¢P±‰BÑ­­r¤¦ ‘’Rĺ–òòÊ¡TØÛ›ÃÅÅffÆJ(+«CI 3ýÍÄÄ>>Žðóã°ww}}t)†¶ P(‘œ\„Ë—qéîÝBÈåJ8:Z@&S¢¢¢AA.X²dæÎ…AƒŒ4²ÖqéRV¯>ˆšš&|üñ ,^ªu‹'N$ãÍ7Á¼‡aÃ\4N'”J‚iÓ¾­íìÝûº¦Ã館³'߇êê&ÌŸ?o¿=îî¶š퉑HꟉ¸¸ $$dA"©‡ÍDFú 2Ò‘‘>ô8ßBa5Û„œÏ"=é¥P(;LX b¦¬úûs4ÞÌ_×hl”> D1ލüü ¶ß£žž8Ë6ñ©³EçêA%F …L#󢢪bTii-Û·ë~1J%BÝb…B鍨D¡ô¸y3II…HJ*‚@ ‚L¦À!ƒàà`ccC45µB$ª…L&‡>ÜÝmÛÜJŒ°äïÏLÓ–þ0 °°—/gâÊ•L$$d¡®®ŽFŽä¢¹YŠÛ· !•Ê0kV^z)!!nšY+©¨hÀ§ŸÅáÃw0sæüûßsµòDX&S *jFŽäbûöÅšç¡\½šƒùó¿Åï¿¿‰ˆM‡Ók´¶Êñûï7±sgŠ‹«0sæ¼óÎ$/G%„€ÏáòåL\¾œ‰›7ó •ÊÁãÙ³ÂSX˜7† ˜Gss+²²Êž.dËðT½ ôáéiÇ P*ŠNo{2š›[*D‰ÅµP]bp8Vðô´…§§=<<ìàåeOO;¸¹ÙÐQjD¡`¦ê©Ä'•¥§D¢šbÔƒ"Ôýe{öö´‡'…ByZ¨ØD¡¨¹\‰´´ܺ•[·òqãF.ÊË`dd€¡CÍ ¯¯‡ººf45µ`NÂîw)ùùqàããH-éZH]] ®^ÍÆå˸r% 033Ah¨¢¢|ac3'OÞÙ3©pq±Æßþ†_kkÍNNÓV!øý÷›ø÷¿ÃÌÌë×?‡É“5ÖCùé§+X·îâã?†‹‹v÷=ûûß„HTƒ³gß×:w˜ºQ(”8~<Û·_@F†“&ùcéÒXŒã¡éÐÔÂý%wW®d‚ÏA__!!\¶Ùøˆ\:a쨦¶¦¥ Ù‰­iiBÖ™ãèhÉ O*!ŠËµ¡ÛOT*gËñòò*/O‚¼¼r”•Õ õáâb OO;xyÙÃÓ“¡<<ìàìlEÿjæA1ª¤¤ºí¹ª“ellØ¡_”›› ;áÐÍÍZãa)ŠN@Å& åiihâöí|ܸ‘‡Ë—™ ÖV9ŒŒ a` ‡–ÀÜ|0üý9ðós„¿¿ëV²´Ô­&· UiÜ¥KŒÃ 9¹J%Ap°+""|å‹.ΟOÇwßÅ!)©£G{àµ×¢0mÚ0êB{¹¹¬\¹7oæcÉ’p¬Z5ffÚëÔ¨«kAXØ:,X0Ÿ|2KÓá<–¬¬RÄÆnÄ×_¿ˆ^£épúBΟçcûö ¸u+¡¡^Xº4ÑÑÚÓÄ]TV6 !!›Ÿ„Âj˜›BX‘‘>ˆˆðg¯é0u‚ÊÊVxR QyyåP(”07„€§ex~~êÄQ Räç—#/yäæJŸ_ŽÜÜr¶—‰‰!<=íÛÄ'Ûbu¢õ*1J(¬FQQÕ}¢ã’‰ªÙžQƒÚÄ'Û6Š¡¸\¸¸Ð©† ›(”ž#Vãôé\¾œ‰ÔT!**êqÿÇÈбé»ÂÏÃ>œœh¿ ]   ‚½ˆS•Æ99Y!*ÊQQ>÷µµêë[ðÛo7ðã—!×búô`¼öZFr×ô.h52™Û·_À–-çàãã€`øpWM‡õXþóŸSؽû×èŒ@¼rå~\¼(@BÂÇ®GXbb.¶m;K—2ìŠåË'ã™g‚ú¥Ë+/¯œ-çMLÌaYª’»ˆzqÞš›[!ˆYJÕ”¼¹¹FFðövè䂲°¬é°û •• ˆPm_K •ʃáåe×V’×ÑEËK{™LÑ&DU¢°°EEUìëÂÂJv²>8Kp¹6pueÜP*AŠËµ¡Ç# eà@Å& åQˆÅ5¸pA€¸¸ ðù¢6‹1s²£§Çœððxö3Æ!!\øû3ph9ƒîð¸Ò¸¨(¿.’’jìÚu{÷^!ùËx¼òJÜÜl4¸ºÁÍ›yX¹òJJªðÁÓðê«‘:ñY‰j¾«VMÇë¯Gk:œn#‘Ôc„/°ti,–-‹Õt8!%¥[¶œÃÙ³iàñ°té$Ìž=R'ÖÝ“ —+qï^û ‚;w  P8!*Ê>7ÎsÀ‰O‹B¡D^^y'Teef^``G”³³v—Úê„…5QLY^Š‹+Yǃƒ+©„¨âb湪ª3ÙÐÑѲ !Ênn¶°·7×ðžP(”@Å&ÊÀ‚‚¢¢*ðù"ðùÌ„š{÷Š Õ ÐÓazðx?Þ3gŽÀèÑôd\‡y\i\D„ÏC›]¦¥ ±mÛyœ:u^^öxçI˜;w½`è„:tÿþ÷1èãÓOç`öìM‡Õ#&OþÛ·/Æœ9#5NinnEXØzL›„õëŸ×t8§¨¨;v\ľ}71t¨Þx#‹‡ju¿0uRZZ˺ž² ‘ÔÃÚÚ ááÞˆŒdœOº$k#õõ-ì<••‘!†L¦€‰‰!üü8 risA9ÁßßiÀ¬?MÐÐ En®¹¹dg—!/¡rs%hmeœê¶¶CÚ„'{xz¶‹P®®Ö´÷bQ_ßÒ¥ż®boþlÜ©G—k [:ÝBÑ>¨ØDé¿45µ"#CÌ Kéé"ddˆQ_ß==ÀÔÔr¹R©¦¦&=š‹ØØ@L˜ÀƒŸ‡NAÑaUí‡ÈÈÇ7н};[·žÇ… :aùòɘ6-˜ŠŽÝ$/¯«WĵkÙøë_ÃðÑGÏêd_“E‹¾Gee#þøã]=&ìÛw+WîG\Ü*xyÑÆÑPVV‹ï¾»„={allˆW_ÄË/‡(‡!b\¾œ…øøL\¿ž‡ææVxxØ!2Ò‘‘¾˜0§“Ÿ[mC&S ;»¬“ ª®®úúzpw·Å°a.6ÌÁÁ.v¥¿÷^F©$(.®B^^9²³ËXA*'§ I=f"›jRž——x<¦$ÏÓÓžºšû¥’@,®a…'F„ª`ũР¦œÕÀ@ÎÎCáîΈOªg;p¹6ýÞÉJ¡h!Tl¢ô„Âê6QIÄÞQ,(¨€RI`ff '§¡02ÒGee#ÊÊê0x°1¼0a‚¼hŽsiÜ¥K¸w¯¨[¥q]Ÿ…-[ÎáÚµŒãåË'câDÿ>Ø‹þAk«۶ǶmÀãÙcãÆ qÓtXOD||,؉ÞÆ„ ø`*^yE7€w…RI0uê&88X`÷î×4ÎSséR.ü¾°0ÝÎz‹†)þ÷¿üðÃeÔ×·à/‡·Þš8 ›<×Ô4!!!›Ÿ +Y‡hDã|òõuÔt˜ý޲²Z¤¤” 5µ))%HI)f/˜ÝÜl:8 † s¡“½ú…B‰ââ*ääHØRùø8ÀÛÛ>>Žðô´£ç ¹¹õ¡B”X\ BôôôÀáX¶‰OÅ(ÚŸ•Byb¨ØDÑ^jjš–Æœl¥¥1ý•òò$Ë•<ؾ¾Ž tF@^^ö¨©iƵkÙ¸pA¡°–ˆŽöeÇ?Ó2Ýæa¥qaaeâÖ­|Èd øûsÁO¡¡^05¥Ž€Þ¢²²u?1ÏÅ(.®p8VJð,4ñÀD*•#;» 99eÈÌ,ENŽYY¥((¨€L¦€¾¾\]­Y#Dqàíí€!C¨¡)¢îwE‰D5P*™Ëg{{sxxØÁÓÓž QJg¨ØDé[är%rrÊîk)BZZ jjš §§[9³“Z;Ü)DøãTœ>>_KKSDEùbòäDGûQ÷’ŽÓUiœ³óÐ6çRÏKãºB 㫯NãÏ?Ó1Ï^RÝ IDATj”;V¯žNËŠž@ŒÕ« )©¯¼‰>˜ÚoN¬v츈M›ÎâÚµáà`©épÔÊÊ•ûqñ¢ññÑÒ€n Tœ>ŽðöV•ä9<õyåéhm•£°°’uAÝ/H …ÕP(”Ú…(wwÛ¶I‡vàñìááAK*)*6QzææVân¥ôt!¤R9ŒŒ àçÇiýÛîX27ï8݃‚»w‹pæL*Nº‡‚‚ ¸ºZcúô`L™„1c‘‘¾šM+‘HêÏO—/g¡¬¬––¦÷ns>yÃÃÃNÓaêêšYJ%BT€;;óåwÁÁ.ºO™6 ê ••UŠìì²¶r<ÆÕÐ ØØ i+Ãc„(øøph« “)PTTÉ–åT /¯yyå «¡TèÃÕÕšŸ<=UMæíúÝ .Ê€‡ŠMõ ê¯”–&Bjj1ÒÒ„ÈË+‡B¡„¹ù 8±ÂÒ°a.ðñq|¨ª¯Tܺ•ãÇ“qæL*Äâx{;àÙg‡cêÔ »öñÞQÔ…\®Drr!._Îì•Ò¸®¨¬lÀ¦Mg°gO"ÜÝmñá‡Ó0cÆpc¯IΟçcÍšC¨­mÆêÕÏâo ëw½>ýô(¾ƒ«W×t¿û [¶œÃ·ß^@BÂzqò$&æbË–s¸r%#Gr±bÅLšäO) 3³”-¹KLÌEc£..CîƒÈHL˜àMû õ!uu-lOLÕ¼üür(•66C:•๺Zk:d ˜É˪2<••™YŠšfHŽ¥¥)||àçÇŸŸ#||8àP'”– •ÊÙ¦òyyåìëÜÜrÔÕ5† 1§g» J%FyzÚѲdŠ.BÅ&JÏyTŸ{{ó6Q‰9I r—kÓ­“ð´4!޹ƒcÇ’ Õ (È3gŽÀ´iÁjs·Pú±¸qqˆ‹Ë@||f§Ò¸ÈHß^çÜÒ"Ã÷ß_Âöí`n>+WNÃóÏ¡N¸'@,®Á¿þu'OÞÃìÙ!øôÓ9ý²ÿGQQ%"#7à_ÿš%KÂ5N¯ÑÜÜŠˆˆÿ &Æ7¾ épt–¤¤"üßÿý‰óçù rÆ»ïNÁ3ÏQÑé1ÈåJܽ[€øølÄÇg!)©r¹~~DDx#<Ü¡¡^ý¦,WW¨¯oAzº°Ã<ÕMC++ÓN%x\®¦C¦´!‘Ô³åx"de•A ³“šíìÌáçǯ¯cÛ3óšö„ÒÊËë‘“#A^#D©¦UB.gÊòœœ¬àéÉ8 ¼¼ìÙÒ<ë~wãÒo båÑTT4°w½T6ì‡M@ réñ]òüür9rGÞENŽžžv˜;w$æÌI§ÿè(R©ׯç".N€‹ÈÉ‘`ð`c„…yaâDDD¨¯4®+!8v, _|q55MxçIxýõh:íå Éøá‡Kø¿ÿ;;;s¬_ÿ¢£ý4V¯ñÖ[»‘’RŒ¸¸Uý¾Ÿ‚jÚÞ¹sÀÏ£éptš´4!6o>‹3gÒàççˆ+¦àÙg‡Ó“ÿnÒØ(Ebb.²:ô{ á²%w#GºÓ ±QÚA€JM-Avv %¬­Í0b„BBÜ0|¸FŒpƒ­-훩M”•Õ"#£™™bdf–"+«MM­WWkøú:Â×—qBùúràããccC GNQ¡*ËS‰O*GTNŽ•• ccCxyÙµ•ãµ Q^^v°´TÿÍ\ ¥P±‰ÒŽDRßAXJM-HT€ùƒô`]ÿ“6ãnl”âØ±$üöÛ Ü¹SÇ ³gÀœ9#i‰œŽ’“#Á¥K¸|9׮墹¹~~DFú &ÆãÇ{ÁĤ÷O^îÜ)ħŸARR^xa,V­šÞ/8}A\\>ùä0D¢,[‹7Þˆéׂ]RRfÌø?ü÷¿/aúô`M‡Óë(•Ó§o†µµ~ýõuM‡Ó/ÄØ²åNžL†——=V¬˜‚Y³FЦØ=¤¼¼ Œë)>> Ba5ÌÌLê…ˆ„‡ûÀÏÏ‘:È4Dss+ÒÒ„HJ*Br2ó((¨Àœ+†„¸aÄ.FŒpEp°+-ýÑ2”J‚ââ*ddˆ‘•U >_Äö„’É00Ї»»í}¥xŽð÷w‚»»-|µŒÚÚ&äæv,ÇËËcž[[å˜þ^<^» Šé e77›~S¢P±i RVVÛ¡YdJJ1JKknn6¬MZ%,©£ÞûÎìÝ{'N$C¡Pbúô`,\8ãÇ{Ñ;À:Fc£ Ùˆ‹ ..ÅÅU°°„ˆ_ÄÄø!&ÆŽUŸÅ#Vã‹/NâØ±$„†záÓOç (ˆŽ(Š‹«ðé§GñÇ©˜>=Ÿ}6g@4Œ;w”J‚cÇ–i:”>#11Ï=·¿þúz¿v¬õ5ÙÙeغõ<޽ 77,_>óæ¢jOH~~9®\ÉBBB6®^ÍFMMììÌïk6î3 ŽQÚLuu#’“‹Yñ)9¹ååõ00Ї+>…„páçÇ¡Ÿ-D&S ?¿¥¬ J £¨¨ …ÆÆ†ðöv¸¯Ï¾¾Žpuµ¦Â¯–¡T””TupA©„(•‰ÀÐPnn6ðò²o›rÈ4šçñhy%EP±i PVV‡{÷Š:KeeuwwÛ¥pÁÁ.jµ\ÖÕ5ã÷ßobÏžDdg—!8Ø ŒÁsÏ…Eÿl¾Û!„ =]ÄŠKwî@¡P"8Ø11~ˆŠòÕH™CK‹ Û·_ÀŽáèh‰O>™…iÓ†õi ý…–v츈íÛ/ÀÅe(>ÿ|¢¢Ƥ­3gRñÊ+?ãäÉ qÓt8}Ê’%?¡°°çÎ}@8j&?¿[·žÇ¡C·áä4Ë–Åbþü1ônòS T¤¦–´M1Í­[ùhi‘ÁÃÑ‘ŒðÆë•>€”žQRRÍ OII…HM-ACƒƒ!(È…ŸFŒp¥“ µ˜–²³Ë‘ÁPªgUK!CLàí퀀gpà ,,k8rJW45µ¶MÇ“ ;[Ò&F•!'G‚–¦MŠ··üüÁã9ÀÇÇÞÞ´$ò$P±©¿QW׌{÷ŠY{ó½{Å‹k §§wwÛ̓ƒ]zíA^^9~úé öï¿}}=<ÿüh¼øâ8 æÒ+ïGQ?•• mc«3'€DR{{s„‡û`âDDEù>q)¥:ˆÏÂêÕ!‘Ôáý÷§â•W"èEÜröl>ýô(**ðî»SðD ˜ß¥L¦@LÌ— rÁwßýMÓáô9yy刉ùë×?‡E‹B5N¿¤¨¨Û·_Àï¿ß„½½Þ~{.Gû¢¨©TŽ[·òŸ„„,¤¤”‚‚œY×ÓØ±ž}RÆMy4 …99’û¨""Èd XZš¶•ßµ÷€¢“2µ›ººde‰;ô„JK²SÕÜÜlàçÇA@€SÛDj'p¹¶´’AKQ* ŠŠ*;L:ÌÊ*ëÐãËÁÁ>>ެŠÇ³‡¯¯£F¯(Z›t™–ÒÒJ:X—óó+@““FŒpÃðáÌ£à`×^wBÿþ÷2.^ÀÍÍ/¿ ÆöÛâý …B‰ää"\¼È¸—RRŠ¡¯¯‡Ñ£=ÚJãüè¤q»´DRÏ>;Š#Gîbúô`|þùÜ>-ÙëOT`íÚÈ‹ËÀìÙ!ø×¿f¸W?ÿÏ>;ŽË—WØéJkׯɓɸzu Ö‹…ÕØ±ã"~ýõ:†5Ã[oMÄâÅ¡ýºZ_S[Û„k×rŸ‰øøläæJ`bbˆ1c<éƒðpo æB]|Z‚T*GZšÉÉ…ì¹l^^9{ÂeŧáÃ]iy VƒÏÏA !-MˆÂB¦ÏÌ̾¾Žmã„ò÷w¢×Z !%%ÕÈÉ‘ 3³99eÈÌ#;» uu-˜¾P¾¾Œø¤£|}9T0¦TlÒär%23Å\K™™bÈåJ jÖ&*1w…‚ƒ]ûô‚Q©$øã|óÍŸD÷Æ+¯Dbòä@zCË‹k—¸¸ ¶†««u[iœ&LðÖšrG¥’`÷îkøÏNÁÒr0Ö­›‡É“5–NÒØ(Ŷmç±sgx<{|þù<„…ñ4VŸS_ß‚°°/ðüó£ñ¯ÍÖt8£ªªaa_àå—#°rå4M‡Óï)-­ÅÎqس'C†˜à7bð÷¿O ”{‘¨ññYm Ç3!‘ÔÃÒÒ&ðîƒÈHxzÒ.m¢®®¹íj1’’ª¬¬úúzàñî›~çŠÀ@çãÂÕeš›[‘™YŠôt!ø|1ø|!1êêš¡§§WWkÖåïÏA` 3¸\ßܤ<šÒÒZÖ¥št˜•U†êêF€¥¥i› ŠéåïÏgO{ì ,¨Ø¤BPPPÑ¡.5µ--2˜šcØ0ŒáÆ:—ÜÝm5g»Èt™™¥˜1c–/…¿¿“Fâ¡<©TŽ›7óØÒ8@ŒÁƒ1v¬bbü1q¢?x<{M‡Ù‰ôt!V®ÜÔÔ¼þz Þ{o ¦fOÂñãÉøüó㨯oÁ‡NÅßÿ>`›µ®_{ö$"1qÍ€ïE°sg¾þú >¢NÁ>¢¼¼ß}‡_~¹†AƒŒðDáå—#¨{£ÉÌ,e§Ü%&æ ¡A ''+¶ä.<܇Þ×BÄâšûÄ'漸¾¾ÆÆ† rÆðánì W//;*RèÅÅUD¬*=]„ (•ff&l^` ã‚òós¢ÇG ²²™™¥m"”99de•B"©ÀôùRõ‚b“3n(WWkjRèt›ŠŠŠpãÆ M¤s¸¹¹aܸqOµêêFܼ™ÏÞÁIN.B]]3ŒŒ àïïÄ6Q v…ƒVØ¿OŸNÁ¦MgX‘éÝw§À××ñ¡?àÀ>Œ®ÿò$ë­  qq\¼(Àµk¹hnng‰ýãñã½´¶ŸESS+¾üò4~þ9!!\lØ0þþœ‡þ<=~=œÚÚVìÙ“ìì:Œk‡™3¹07W_ùθqãàæ¦;͵…Âj„‡¯ÇGÍÀk¯EõÉ{jóú”Ë•X¿>^^X´¨»ÜæÏŸß+Û}Òü66Ê'D||)ôõõëŒI“è4Í'¥»ù•Ë•HN.d'ÝݹS™L??;é.4”Ç^Üjóçw 1þ|(•¹¹’ÓïÒ҄ɰ°ÄŠO#Gr1~¼W·ú“ÒüjÏ>;â6ŠqB "Ô×·@OO\® üý™FäÆ9ÓüêÍÍrøûg…¨¬¬RääHØf󃱥xª©‡ãÆyÒüê]üýí,6ýúë¯X´hQßE¥ã,\¸{÷îíÑÿ)/¯Gbb.nÜÈCbb23KAgÏNævðaÎZ×@´¸¸ }tqq˜9óñ"“ z—I=tg½56J‘¸8®\ÉBAA,,!"ÂQQÌÃÕÕº"~rîÜ)ÄÒ¥{P]Ý„µkg`áÂñ]Gôøõpôô ae5 w “‰Õ¾ý½{÷báÂ…jßno±lÙ^ܾ]€K—VõÙqVÛ×§‰‰Q¢µµDÓ¡ô*½eè~Úüêë›ÀÌl$}Ô×_U_`Œ'ÍoSS+®_Ïe'Ý bè!$„‹ˆH¥Eøä“·@ˆBÍSzÂÃò+“)Úú?µ PÙÙe00ÐÇðá® åaØ08ÁÃöÓ[m?>–ߢ¢ÊûzA‰‘ž.DAAͯŽÑU~¤m%x¥¬ *;» ……•4¿:Fù½ýÐ3lZ]÷xº»¨KKkqíZ®_ÏÅõë¹ÈÉ‘ÀÀ@AAΈŠòÅêÕÓ1nœ§V—qÈåJìÚ¯¾: k9òÆŽõìÑ6tíbTÛxØz#„@ ãÒ¥ \º”7ò —+è„™3G &Æ£G{èL©”\®Ä–-bË–s˜0ÁG޼Ëmƒ¿ú]“SRŠqøðìÜù7út}j†¾:¥ùÕ O›_SScLœÈ”“L)Óë) ÞFQQ% òESSººB¦ô€Çå×ÈÈ!!Œ£IEuu#®^ÍÁÕ«Ù¸xQ€~¸™LAƒŒàëëfJZX˜7û¹¥Ÿ_Íð¸üº¹ÙÀÍÍS§c¿Gó«;<*¿C†˜`äH.FŽävø>ͯîð¨üj—m¦Ÿ —+qûv>ââ2pñ¢ééB`øp7L: ãÇ{aìXO©;NKâÇ@ ÆÒ¥±X¶,–6dÔ055M¸r%³­¹·I=ll† *Ê›7ÿQQ¾:9Š4/¯K—î@ ÆgŸÍÁK/…ëœAÑ~>ÿü8BBÜ0cÆpM‡B¡P´›!˜=;³g‡¶nÝ…+vj8*JO:Ô 3f gõ2™ÙÙeàóEÈÈ`Ü1gΤâ“OŽÀƒõïâþÍoÿ†æ·@Å&5!—+qùr&޹ƒóçÓQW×ww[ÄÄøcõêgê¥s“f¤R96nü?üp £F¹ãüùµ²yô@A¡ÐCQ‘)fÎÜ‚ää"èé£G{ॗÂí‡à`Wm¬GÁî݉øì³cðövÀÙ³ïÃÛÛAÓaQú!çÎ¥ãÚµ\;¶” ™ ¥ÛØÚ!RM‡Ay ŒŒ Ø©g*”J‚ÔÔlß¾99匎ò´Ðüöoh~u*6=%µµFX»ö0ŽOBee#ÆŒñÀLCll€Æ¦Ä©>_„·ßÞ ±¸ë×?E‹ß/‡Ò»èë”—BX˜#Þx#¾°°¤é°žšúú¼÷Þ>œ9“ŠwÞ™„÷Þ{†:ç(½‚\®Äºu'0}z0FöÐt8 …BÑ0úúz>Ü11üøc­¦Ã¡¨šßþ ͯöCŦ§@&ÓGR’êë³ðÊ+‘˜7o”N4^~J%Á÷ß_—_žÆ¨Q\ìÙóœ‡j:, ==`ìØJ|ýõM‡¢6ÒÓ…xíµÿ¡±±¿ÿþ&¨–Ò{üúëuTàÿ{UÓ¡P( …B¡P(ý*6=FFJŒW…ÇÿOÓ¡¨‘¨Ë—ïÅÍ›ùX¹rÞ|s¢Î–eQ´Ÿß¿‰Õ«`ôhw|ûíRØÛ›k:$J?¦¡AŠM›ÎॗÂuÚuJ¡P( …B¡èTlzJî#pOªUáà`“'W`Ø0M‡Dé§47·âãaÿþ[xë­‰XµjºÎLÊ£è.ß~{R©+VLÖt( …B¡P(J¿ç©¯ðrrrðÿþßÿSC(§¾¾6lPë6±~ýzµnS‘JåX¹r?Þ|s7æÍ‰3gÞÓ¸ÐÔkª'TWW㫯¾zìÏ=jÒõÆPTT‰Y³¶âìÙ4üï¯bÍšš´m­uűcÇpóæÍ^Ûþ@X›bq ~øá2–-‹ÅСfšGgx’¿½555())饈(ꤧù­««ÃÝ»wi~u„žæW"‘àÎ;(/§Mvužä·  ×¯_ïðhjjêå)OCO?¿r¹)))(((è½ (j£§ù­­­ÅÝ»w!‘Hz1ªÞᩯò222ðÝwß©#–‡R[[‹O?ýT­Û¬¯¯Ç?ÿùOµnS×(*ªÄœ9[qüx2víz_|ñ 2ÒtX}²¦zBmm-~úé§nýÜÃÖ)]o@bb.¦Oß ==àÌ™÷ é´n­uÅpíÚµ^Ûþ@X›_}õlm‡àÕW#5ŠNñ${7nܨõŸ) COò»cÇ8;;ã•W^Á°aÃð / µµµw¤<=ÉïÊ•+áííW_}X½zuïGyjzšß©S§bΜ9ì#??¿w¤<=É/ŸÏ‡¯¯/žþy >K–,éÝà(OMOò»sçN¸¸¸`ñâÅðôôĪU«z785CkW(çÏó1uê7Ë•8{ö}<óL¦CÒZÜÝÝ‘™™©é0tšÝ»¯áÅw"<ÜG.ƒ››¦C¢ ÒÓ…8pà>úèYÓÊñÞâÔ©SX²d 6nܨéP(j¦¬¬ +V¬À‰'””„üü|¤¤¤`ÇŽš¢ÒÒÒ°uëV¤¤¤ )) ·nݦM›ššªéÐ(j"''@ii)û ÔtX5±hÑ"¼õÖ[ÈÊÊBVVN:…3gÎh:,Ѝ¬¬Ä²eËpêÔ)ðù|Ü»w[·nÅíÛ·5Z·Q‹Ø¤T*±lÙ2XXXÀÞÞÿùÏ0¿ ØØX|óÍ7prr‚víÚ…>øvvvàp8Ø·o»ß~û <†††àp8=i=qâ¼¼¼`jjŠ%K–àÃ?ÄéÓ§—.]ÂðáÃabb???;v쑱ÿøãàr¹033Ã’%K T*Õñ+ÑZ %¾úêüýï?bêÔa8yr¸\í»ðWךZ»v-ììì`bb‚˜˜˜öÿÔÔTL˜0ƒ ‚~ýõWŒ•ü™gžÁ/¿ü+++ÄÅÅaæÌ™ìÿëî:튶Þär%>þø V¯>ˆ+¦`çοÁÔÔXÓau@kíÁ5ÃçóºNTÛÝ»w/¼¼¼`ff†—^z Óÿmß¾}pwwÇàÁƒ1gÎÔÖ¶r}Øñ­§Ÿ‹®è¯kóßÿ>Žà`WÌž¢éPžˆG÷ƺ³âããñÎ;ï`ùòå°°°€££#¾ùæ›.cyØ1SÅðáÃüØ}:þ<allŒ‘#G²'MŠ¥'qêºßÛ·oÃÃÃÑÑÑ+++L:ééé]n‡æ·]ȯH$¢E‹Àårþþþ°··‡H$êr;4¿íèB~ 77ÞÞÞ¨¯¯gÏ5Ío;º_>Ÿüü|,_¾ààà€7n`Ô¨Q]n‡æ·]ÈoUU ÆŒðòò‚­­-Äbq—ÛÑÊü’Ø»w/éâÛåĉDOO¼÷Þ{¤±±‘ÄÇÇKKKràÀ"‹‰¾¾>ùä“OˆR©$;vì Ȇ ˆR©$_}õáñx„Bêêꈉ‰ 9räiii!—/_&úúúD"‘ââbbbbB!$77— 2„?~œ477“õëײ{÷nRZZJÌÍÍÉÏ?ÿLZZZÈÑ£G‰©©)ÉÈÈè·X,&Èk¯½F¤R)ÉÉÉ!–––äâÅ‹ÝÞ÷… ’… vûç5Muu#™?qwÿ€ìÛw£OßÙ»wo·~V]kêÌ™3ÄÉɉdgg“ºº:2kÖ,òÆoBihh ‡lß¾´´´ . rõêUR\\LLæÎK®]»F233‰™™!¤ûëôAîzû–ðx«È©S÷úä=5uüzpÍTTTu ëÎëÎz„ÇÍ! IDAT8qâ±°° R©”ÝÖš5kÈ‚ :Óu̼ŸÇ‰M_ý5™9s&ûukk+Ù°aill|d,ú·î¢m'»º˜ß‹/2oÞ<öýî‡æ·]˯H$"cÇŽ%VVVdÙ²eD.—wÚ'šßvt%¿iii$44” ‰……9|øp§}¢ùmGWò»mÛ6bjjJ¦OŸNŽ9B>ÿüs2xð`’””ÔiŸh~ÛÑ•üÂh‡Ì›7ðx<òüC—ŽÏ·ÔRFçåå#£öÆÒAAAì]ffÌô===˜˜˜ÀÐÐýZ…‰‰ îܹƒgžy^^^˜;wn—eðñña¿ÖÓÓƒ§§' ¤¤¤Ã¿€¯¯/Š‹‹»ŒÛÀÀvvv¶Õ¹|93gn½½NŸ~Κ鱨cM͘1Ï?ÿ<ÂÂÂÀår±|ùrTWW`ÖQFFÜÝÝÙǾ}ûPSSÐ×ׇ““S§¸º»N»b ¬·¤¤"ÌšµC‡šâôé÷Ðù÷¨M¨c­×LwÖ ‡Ãa_«¶% ;õQ`©wçøÖÝX¤?®Íß¿‰œœ2¬Y3CÓ¡<1:†uguw=xzzÂØ¸½¼5((EEE~æqÇÌîòàßp###¬Zµ ¦¦¦¥;q꺔ߺº:,Z´/½ô>þøc:tˆ}¿·CóË Kù˜¿I7nÜ@qq1Μ9ƒ]»vuÚ'šßvt%¿¸víÆ?~<.\ˆ'NtÚ'šßvt%¿FFF033Ñ#G0gά]»3gÎÄÿûßNûDóÛŽ®ä÷äɓعs'ø|>:>Ÿ””lÙ²¥Ó>ik~Õ"6UTTtøZ"‘ÀÚÚºGÛ8zô(Ö¬Yƒµk×"++ ·nÝb9÷cnnŽÊÊÊßS- ‹N±TVVÂÒÒ²G±ô'~þ9ýë˜:5¼kkÝû­Ž5EÁ¦M›PYY‰ ¥¥Ï=÷f­DDD    ÃcçÎ~±ÝÝu:P9w.óç‹.x¶¶C4ÒcQÇZ:®™']'C‡í4ÖT=¾uŸ¦¦VlÜøþú× ðò²×t8OÌ£Žaê<=¸®ÊËËannÞá{;fvssóNÕáÇÙÞdŠ¥;q꺒_¹\ŽÉ“'ÃÊÊ X¼xñCß‹æ·]Éïž={:L2dBCC‘‘‘Ñé½h~ÛÑ•üææævê¯fnnBH§÷¢ùmGWòËåragg×A(pwwG]]]§÷¢ùmGWò›””„qãÆÁÊÊ # Mœ8wïÞíô^Úš_µˆM8yò$fŒö÷ßéÓ§÷h%%%@DD ˜˜Øå%66GEyy9 11|>zzz˜:ˆO>9ŒÕ«ŸÅæÍ‘‘¦Ãê6êXS_~ù%¢££ahhˆ±cÇâoûÛð266ñññ€¦¦&Œ5 GŽyä6»»NµÞà—_®áå—wáùçGc×®—µ®øÃPÇZ{ž¬“û™4iöíÛÇ:«RRRpåÊxìñ­'ô÷µ¹sçE45µâ½÷¦h:”§âQǰ']c]QRRÂ6›ohhÀ?üÐi]=é1è¸Þ&OžŒãdz¢ê7°xñb<6–îÄ©KèJ~O:±XŒ>øeeeì‰pUUšß‡¡+ù566ÆÆQ__¨©©A||<ÛìŸæ·kt%¿III˜2e {1Y[[‹Ã‡ã™gž@óû0t%¿ááá‰D¸~ý:æ<öèÑ£ˆŒŒ@óû0t%¿Ã‡ÇÕ«WÙœ566âôéÓºu|îAÍ]—œ8q‚Œ?žx{{“ÈÈHâèèH¦M›FZ[[ÙºFÙÙÙlïBIJJbë‹ŠŠˆ½½=‰ŒŒ$±±±dÚ´iÄËˋ̚5«S/œ—_~™ØÙÙ‘ØØXJ†NöïßO!äŸÿü'±²²"“'O&666äÍ7ßdÿ—Ë%Ÿþ9!„éSb``Ða_&L˜Ð/zèÔ×·_ÜIx¼UäÏ?Ó4!¤ç=›Ô±¦Š‹‹‰››6l™4i±´´$?üðû³›6m"dÒ¤IÄÙ̟ٙ?Ÿ( R\\ÜamÜß³©'ët ¬7¥RIþóŸ“ÄÉé]²uë9Æ¢©ã׃kæQëäÁíBHTT9pàQ*•dÑ¢EÄÊÊŠDGG7772mÚ4²yófBÈÃo=‰•õ¯Íž|¾{›ÒÒZâåµRãk±+zº>u ëÉ{Ôz8qâár¹$00DDD‡C¢¢¢Hsss§cÚÃŽ™÷ÓUϦû×!„,_¾œØÚÚ’I“& ²}ûöÇÆò¨ë.ÚÖ3BWò»víZ Óãí·ß&„Ðü> ]ɯ\.'³fÍ"vvv$22’ØØØ_|‘íABóÛ5º’_…BA^xábmmMbbbˆ­­-Û™šß‡¡+ù%„Ý»wsssEÉ‚ Øž>4¿]£+ùU*•ä7Þ C‡%'N$dÚ´i¤©©‰¢ù}úá*š››ÉÅ‹;4Ôê)µµµäܹsäÞ=frUQQ¹téR‡Ÿ‘H$„Ïç“{÷¸8"•J‰§§'ILLd&??Ÿœ={–dff>q,ÿ¿½û‹âÚßþ.,MâE¤ (‚Š5Q{‰&ñ5Xb»Fì%‰)zE%–$н`‹5"5–`»ÑHP¬ˆ±\± " *Eé{~ø“Áv™åý<ìÎì9ïî9ì—™3êÐÅ/ÿÉÉé¢W¯%¢eË9âÆ¯A%)Ï—QMÌ©ììlñË/¿ˆcÇŽ‰äääbÛÅÑ£G ˆ+IAAHII)|¬Î<Õ]œoùùbÚ´ï…“Ó zAê8’¿þª"ó$&&F?~\¤¥¥ÛVYÇ·²Ð¥bÓŒ»EëÖsEvvñÅ‹¥VžùYÚ1LÇ¢ƒŠV­Z‰œœqúôi%T*Õßî¯Î1S·oßGñññje)kÎ’èÚ/»Bp|9¾º3¾111"<<\­Ÿ-ß—ä4¾7nÜááá"66öµýr|_’Óø>|øP;vL­c7Ç÷%9ïÝ»wExx¸Ç÷BñÕËÉÔÔ]ºt©PENÙrtt„££c‘}ѵkWìÝ»7Fpp0òóóѪU«Â}^-®UÕÜ¿ÿ~~ëabb„C‡¦ÂÞÞRêH¢‰9ebbooï¿Ýîàà‡ÒL700€••UácuæiU—W€ñã·ãçŸobÛ¶¡S§†RG*7M̵¿ªÈûl/¦Ní‰3zI‡ô\RÒ3øú®û÷O‚¼×#ýz±±±ví0©£Xl’­M›~Áœ9ûñå—ïÁß_³ ýÕƒÏ0`ÀjT«fŒXY½!u$"@VV./>?¿¶hÐÀVê8DDDDD›diÕª“X¸ð0,è?l/uÒs‰‰O1`Àj˜››"$ÄÿøGu©#Z·î23³1cÆÛRG!""""¢ÿÇb“Ì|ýõOX¹ò‚‚>ÀÀoI‡ô\B °––ÕâKKÞåtÇ£GX»ö?˜0¡¬­Í¥ŽCDDDDDÿOvŦ¼¼(`hXõÖ6Ÿ7ï6m:ƒÕ«‡¢oß–RÇÑkÙÙyU~±õßOÅ€«aeõBBÆ¡F šH·|ûíO077ÃØ±¤ŽBDDDDD"»ŠÍ;°cÇY©cTºÀÀƒØ´é ‚ƒG°ÐT æÏÿQê’Š‹KAÿþ«P»¶9öìÏB“˜?ÿGäææKCgܾý»wGáÓO{ÃÌÌXê8DDDDDô'{f“B¡¨Ìj35uCÍšï`Ô¨îP©²¥Ž???­÷±páalØpk×G¯^MµÞŸ¶ 2C† ‘:†°³›‚åËñüy´ÔaЍŒùöàÁ3 ¸66øþ{XX˜j½OMÓÕãWEXYõÇÚµ?#9y-Tª©ãHnþüѰ¡|}åw9±>ÎOúޝ~ãøê7ޝ~ãøê7ޝî)VlêСöìÙ#Eµ9’€£Gàã3ƒ×—:œœœ´Úþ·ß†cÍšÿ`íÚáèÓÇC«}i“.Ï©¿zò$sç^‚…Eg¬[7&&†RG*¤íùöða X 3ìÚõ‘ì Mº~üªˆ-[þ‹èèTxxLÇøñM`i©[góxzzVZ_·qòäMìÙãùüb¡Ïó“8¾úŽã«ß8¾úã«ß8¾ºK!„R‡(‹™3C±}{$ Ž™†æÍ¥Ž¤5K–ŲeǸFS%‹ˆ¸×&Nì†/¾xWâD•#55ýú­‚{÷N€•ÕRG¢?ùᇋ˜4i'”JÔ¬Y!!þhÔÈNêX•N¥xûí%°±±Àöíc¥ŽCDDDDDÅ]”ÝšM±±ÉCC>û,2«•©mÅŠX¶ì–/÷c¡©’Ý¿Ÿ¥òåuëNáþýÇ'Ò¾§OŸcàÀµÈÏWa÷nštЫÂR~¾ OŸ>Ç»ï.Gdä‰SU¾½{/âÖ­$ÌšÕWê(DDDDDô7dWlºw_¸bbzQâDš·eK/>‚o¿„~ýZI§Êùý÷Ô"—æÌš&aíKOφŸßz<žƒ½{ÇÃÆÆBêHT77›Ây™Ÿ¯Bvv^‡Ô­uÅ´)++‹ÁàÁžhØÐVê8DDDDDô7dUlÊË+ÀãÇ™Ež›7o?22¤_(\SÂÂ.aÖ¬0ÌŸÿ> j#uœ*éîÝGÈËSòó ðóÏ·pâÄ ‰SiGVV.FŽÜˆG2°g?ìì,¥ŽDÃØX ‡š…U* àï¿ ÁÁ§%LVy‚ƒO#== Ü[ê(DDDDDT Y›ââRŠ\6'„@zz‚‚ŽJ˜JsŽû Ó¦}éÓ{bÔ(o©ãTYwî$™gøüóPääè×mç Tð÷ߎ۷“±sçX89YI‰^£Y³:EκâåqpîÜد·—ÀãÇX³æ??¾+j×6—:•BvŦ¿ÊÏ/À† §qëV’‰4'2òüý·cèÐv˜1ãm©ãTi O‹ƒU«†¢C7©ãP¸»Û•z©\~¾ QQ÷ШÑHJzV‰É´+0ð ÜÜláëû–ÔQˆˆˆˆˆH ²*6½\¸¹ä¿ê+³gïCVVn%§*¿ÔÔLøù­‡³³Ö®VâY[T¹ââR`hXò‹üü>|¿þ*ßÛÍoÝú+-:ŒÀÀ~xï½RÇ¡2rv®Uâet%‰¢å4•ã×_ïàøñëøg‘õªˆˆˆˆˆHwɪØtçΣ¿Ý¦ROždbÕª“•˜¨ü²²rñá‡[·Žá¥!:âþýþýZCC|öY(òóU•˜J3""b1{v&Nì†?l/u*¥ÒõêÕ*q›¡¡¬¬ªcÑ"_ÄÇ/§§K%§Ó<•J`Þ¼èÒ¥¼½H‡ˆˆˆˆˆÔ$›bS~¾ ÉÉi¯Ý'(èâãS+)Uù¼º Øï¿§b×®`eõ†Ô‘èÿÅÅ¥”ZH*(PáîÝGظñ—JLUq7o&a̘ÍèÛ·%>ÿü©ãP4mZ§ÈÙwFF†P* ñþû­pîÜl î¥R6‡öR……]Â0{v_©£Q(¥ ®ÄÄ'((øßZ% `d¤D^^>„jÖ¬†¦Më eK'¼x¡Û—ÒÍš†3gn#4t<êÖ-ù,’ÆÍ› Rýož"?_•JÀØX‰FìЬY8:Ö”0eÙ$%=ÃСÁððpäº`zÀÝÝûö]‚Ri€‚÷ßo…”” ÄÆ>Dõê&RÇÓ˜ìì<,Ztƒµá݉ˆˆˆˆdF6Ŧû÷ÿ·p³¥e5´háˆ/r‘œœ†}û&ÃÖ¶†„éÔ·jÕIìØq›6ä]ÀtЫK5_–êÖ­…ƒ£±}ûXtêÔPvgŒ¤§gcèÐ`XZšaãÆQ\L¼*¼¼ù¦3û£iSDGÇ£OŸ œ9s[o.7Û°á4ÒÒ²ðÉ'½¥ŽBDDDDDe$›b“½½%¶l :°³³:tþþÛdó×ü#Gb°páa,XÐ={6•:ýE^^‚‚>€‡‡#ÜÜl T 77G^CJJ†ì Myy3f3ž=Ë¡CS`aa*u$Ò€æÍ±sçGèÒ¥Qás-Z8¡C‡X¹ò¤^›RR^®¿7n\ØØXH‡ˆˆˆˆˆÊH6ßž6´E¯^M Màéé‚‚.^Œ“.˜š¢£ã1iÒNŒíÍÅ™u”‘‘! jww»ÂÂ’±±-Z8!*êžÄéÊFiÓ¾GLLvì[äÿ É›µµy‘BÓ+“&uCDÄmDGÇKJ³–. GµjÆð÷ï"u"""""*Ù›JbmmkDEÝ•:J©’’žaôè-hßÞsæüSê8TFžž.8^^Ŧ… ãÀ+ظq$ÜݹÞMUàíÝÍ›;ÊæŽœçÎGرã,fÎìƒjÕx—N"""""9’u± Ú´qÑé³N²²r1räfXZšaÕªaEî"EòàéY÷î=ÆãÇRGQKXØ%¬ZuýСƒü/©"õMœØ áá× ×“£ÀÀƒps³¯ï[RG!""""¢r’}åÃÓÓÑÑñÈÍÍ—:J1BLœ¸üñ[¶Œæš92Õºu]ètQ󕈈XL›ö=&NìÆË5« Þ½=P¯ž5V¯–çÙMgÏÞűc¿aöì¾,Ìɘì›÷ôtANN¾N®S²|ùqœ8q[¶Œ‚““•Ôq¨œÌÍMáîn§óŦ›7“0fÌf¼÷^ |þù;RÇ! (0aBW„…]ƒϤŽS&BÌ{:5DçÎÅפ""""""ù}±©nÝZ°±©¡s…€S§naÉ’£ðAëÖõ¤ŽCäéY_§×KMÍÄÈ‘›Ð´i}…B!u$’Hÿþ­Q«–9Ö¯?%u”2 »„ë×ÿÀ¿ÿÍu툈ˆˆˆäNöÅ&ðô¬§S 8'$<Á„ ;Я_+ŒÙAê8¤žž.¸y3 ÙRG)&/¯}´°~ý‡022”8IÉÈÈãÇwÁöí‘HNN—:ŽZrrò±hÑøú¾Å퉈ˆˆˆô€ž›êãüùû((PIÙÙy3f ìí-±hÑ©ã†xzº@¥¸pá¾ÔQŠ™=; W®Äc˖Ѱ²zCê8¤†õ‚¥e5¬\yBê(jÙ¸ñ4ž>}Ž™3{K…ˆˆˆˆˆ4@/ŠM^^®ÈÈÈFLL¢ÔQðùç{ÿ7Ž„™oÛ­/¬­ÍÑ  "#ïH¥ˆmÛ"±}ûY¬\9„g„P!%¦Lé;Î")I·×nJMÍÄŠ'àïß665¤ŽCDDDDD Ŧ lP«Ö8{VÚBÀöí‘ ½€Õ«‡ÂÙ™ ‚ë//WDDÄJ£ÐÙ³w1{v¦Oï…>}<¤ŽC:ÆÏ¯-ll,°lÙq©£”jéÒc033¸q]¤ŽBDDDDD¢Å&…B//WIÏ:¹|ùwÌš†iÓz¡kWwÉrö´kçŠë×ÿ@zz–ÔQðcÇ~‡ž=›búôžRÇ!dddˆ)Sz`÷î(ÄǧJ§Dwï>ÂŽ‘øôÓ>¨^ÝDê8DDDDD¤!zQl^Ο¿‡üüÊ_·)55ÿú×wèÔ©!¿øë1//W¨TBò;feåbĈ¨]Û+VøñÎsô·l‡š:{vÓW_‚‹‹5 j#u"""""Ò ½)6yy¹"33W¯&Tj¿*Œ·&&J¬Z5Œ_üõØ?þQÙJz“&íÄ£Gغu ×£R)•˜6­'öî½€¸¸©ãqîÜ]„‡_ÿÿýOêÍ""""""‚›ÜÜlP»¶y¥¯ÛôÕWqùr<6m ÓJí›*_»v®øõWéÖmZºô(Ž¿Žàà¨S§¦d9H>úõkgçZX²ä¨ÔQ !0oÞðön€.]I‡ˆˆˆˆˆ4LoŠMÀËB@ežurüøu¬_ß~;îîö•Ö/I§}{7ܸñii/*½ï#Gb°té1öC»võ+½’'CC|üñÛØ¿ÿ2bc“¥Ž8pà bbðO©£‘èU±©}{7œ?yyZï+99Ó¦}ßÂûï¿©õþH7´më8w®r×mºsç¦NÝ…¡CÛaØ0¯Jí›äï½÷ZÀÍÍß~.uäääcÁ‚Cðõ}‹Ez"""""=¥gÅ&W¼x‘‹«WãµÚ“'ï„¥e5öÓj_¤[j֬ކ í*õrÍçÏs0fÌ4h`ËùFåb` À§ŸöÆ¡CW­ÝããëlÚô RSŸcæÌ>’æ """""íÑ«bS½zÖ°¶6×úÝÂÖ®ýçÎÝÅêÕÃx»î*¨mÛú•zGº3Bšš‰àà022¬´~I¿¼ýv3´jU ’,Ó'ϱbÅqŒ×¶¶5$ËADDDDDÚ¥WÅ&ðôtÁùó÷µÖ~LL/>‚™3û ysG­õCºËÓ³®_ÿÏŸçh½¯ Nãðá«X½z(ìí-µÞé·Y³ÞEDD,Nº%IÿAAÇ`jjÿ®’ôODDDDD•Co‹M*•ÐxÛ/^äbüøíðô¬qãºh¼}’OOäç«péRœVû¹pá>âãßFÇŽ µÚU mÚ¸ gϦøê«CZ9F–æÞ½ÇضíW|üqo¼ñÏ%""""ÒgzWljÓÆii/ðßÿ>ÔxÛ³f…áéÓX¹r oŸäÁƦœ­´z)ÝãÇ;v+:wn„É“»k­ªz¾øâܺ•„ýû/Wj¿ B½zÖ<سRû%""""¢Ê§wŦÆíannªñBÀÁƒÑ 9  Á°±±ÐhÛ$?žž.Z+6¨0nÜV˜™aåÊ!P(XØ$ÍiÐÀ´Æ×_ÿ„ÜÜüJéóüù{8r$³g÷…R©w?vˆˆˆˆˆè/ôî·~CC´jUçÏk®˜øŸ~ŠáýгgSµKòÕ¦ ®\‰G^^ÆÛ^¸ð0¢£°aÃXX˜i¼}¢O>éää4lÛ©õ¾„˜;÷:th€nÝܵÞIOïŠM€fÏ:Q©&OÞ [[ Ì™óO´Iò×¶m}deå"&&A£í>|k×þŒ ú£I¶Môн½%FîˆåË###[«}<«W0gN_­öCDDDDDºC/‹MmÚ¸ )éâãS+ÜÖæÍgpéRÖ¬SS# ¤#}àâbZµÞÐè¥tqq)˜1c7† i‹AƒÚh¬]¢’LšÔ ùù*¬]û³ÖúÈÍÍÇW_€­Y<%""""ªBô²ØÔ¢…#”JDGÇW¨¸¸,Zt“'w‡»»½†Ò‘¾£æ8a ÖIDAThݺ®\©Ø{%/¯}´NNV˜?¿ŸFÚ$*MÕ0yrw¬_ <ÓJ›6AJJ&fÎ죕ö‰ˆˆˆˆH7ée±ÉÌÌ ÚU¨ „À'Ÿ„ÀÙÙ “'÷Ð`:ÒÍ›;V¸ ùÊܹpÿþc¬[÷!LL”i“èuFöFíÚæX´è°ÆÛ~úô9–/?ޱc;ÁÎÎRãí‘îÒËbxx8Vh=;Î"*ê‚‚>€‘‘¡“‘¾hÑ üñ))™jç§Ÿ®aË–|ýõ@¸¸Xk(Ñë+ñå—ïá‡.áêUÍ®?¶lÙq˜˜(1~|W¶KDDDDDºOo‹M-[:!&&ª2¿ö?žbþü1vlgxx8j!é:P¡³›ž`úôÝðók Ÿ75Hmï¼ãÖ­ëbîÜk3..ß}3Þ†¹¹©ÆÚ%"""""yÐÛbS“&xþ< OÊüÚ™3Cak[Ÿ|Ò[ ÉH_Ô¬Y5qëVR¹^Ÿ—Wÿm°·¯yó|4œŽH= …>ˆŠº‡#Gb4ÒæW_Bݺµàç×V#푼èm±©A( ü÷¿Ëôºó8uê–.̵sèµ5²ÅÍ›ÊõÚ… áÖ­$¬[÷!ÌÌŒ5œŒH}-[:Áǧ%"/¯ Bm]¸pGŽÄ`Ö¬÷ Têí"""""*…Þ~¨^ÝuêÔ,S±)990j”7Z·®§Åt¤/6´ÃíÛÉe~Ýñã×±~ýi,\8nn6ZHFT6_|ñ.’’žá»ï"Ê݆óæ@ûö®èÑ£‰Ó‘œ(„B­ mgÑ8ss/¤áÅ‹ëjíolìsóxò$ Bäi9]Ùíܹ~~~RÇЪ]»vaÈ!RÇP›‰I=˜šº"-íx™^÷Æm TZâÙ³cZJV1jHMr9~š›· @FFd¹^o``Šš5ßEzú/ÈË{¤ÙpZÄùNDDDD¤QËt˜Þ;^ê/u€b(u„JµgÏ©#”Ñ¿Êü !Š1ZÈR~»víÂþýû¥Ž¡—äuüœZÁ×ËãxÅùNDDDD¤e*6ùúúÂ××W[Yˆ qžI#//_¾µ„ÇOÝÃùNDDDD¤z»fU>›ˆˆˆˆˆˆˆˆHcXl"""""""""a±‰ˆˆˆˆˆˆˆˆ4†Å&""""""""Ò½,6edd`Ñ¢EjïÿìÙ3\¹rOž<Ñb*ÒGek¯$$$àñãÇZHDT1å™ÓÏž=Cbbb±ç333qùòe[‰ˆˆˆˆª½,6¥¥¥! @­}—.] gggŒ5 ÎÎÎX¾|¹vÑ^)Ë\{%55mÛ¶Å´ЍÊ3§¿ùæ¬[·®ÈsÇŽƒ££#† '''k0%é2½,6©ëÒ¥K@TT®\¹‚¨¨(Ì™3wïÞ•:é±Q£F!%%EêDvøðaŒ9ß|óM‘çóòò0bÄáúõë8~ü8¦L™‚¤¤$‰’QeÒZ±iÖ¬Y°¶¶†‰‰ ºtéRä‹ï¿ÿ®®®P*•°³³+ü¢’ššŠîÝ»céÒ¥°··‡µµ56oÞŒ?þÖÖÖ°³³ÃîÝ»gΜÁĉ1eÊXXXÀÖÖK—.-1˵k×о}{˜šš¢AƒصkàäÉ“èܹ35jhܸ1ºwïŽC‡•ØÎ‰'ФIãÍ7ßÄÅ‹_›¥,9©|ä0×^Y½z5„h×®]©ï‰s­j“ÓœnÞ¼9<<<Š|X$$$!„™™™ÂÎÎN¬ZµJdgg‹“'O ñ믿ŠåË—‹6mÚÉÞ¹sg1yòäbï)!!A˜››‹}ûö‰/^ˆÀÀ@áìì,T*U©YJÛVeùüålç΢ ÓR6sM!®]»&êÕ«'?~,:uê$6lØPâ{’r®•õó'õèãñóφ "¾üòËÂÇ›7ožžžEö>|¸øì³Ïн_Îw"""""½sA+g6eggrrr`nnŽ]»vaáÂ…cccDFFÂÇÇ&&&pqq‘‘ÒÒÒ*• 3g΄B¡@÷îÝ¡T*1cÆŒÂÇ…ýT«V ‹/FµjÕо}{Lœ8Û¶m+’åСC°³³Ã„ `bb‚®]»bĈ E¿~ýpãÆ Ì›7gÏžÅ矎ÈÈHäää{O!!!èܹ3|||`ff†O?ýþþþÈÊÊzmurRùÈe®eeeÁÏÏëׯG­ZµJ}OœkU›\æti233Q½zõ"ÏU¯^½Hÿ¯p¾é­›Þ}÷] 0^^^pvvÆ”)SðôéS€‰‰ .]º„^½z¡~ýúxÿý÷¡R©Š¼þÕ—…B(•ÊÂÇæââccãÂÇM›6E|||‘}âââpëÖ-Ô­[·ðßîÝ»ñìÙ3Ô©S§N•+W0mÚ4aðàÁ°´´,öžâââРAƒÂÇFFF˜9s&ªU«öÚ,êä¤ò‘Ë\ „½½=ÌÌÌ´´4ܹs×®]+öž8ת6¹ÌéÒ˜™™‹^ÉÊÊ‚™™Y±}9߉ˆˆˆˆôR !°dÉ,Y²—/_ÆŠ+п\¾|û÷ïÇ—_~‰~ø^^^044,±¸£Ž¿.²üøñc˜››yÎÂÂÞÞÞ/|.++ …ÙÙÙ¨S§öíÛW¸ÍËË ={ö,Ö—¹¹9=zTä¹°°0tëÖíµYÔÉIå#—¹¶`Á¤¤¤`êÔ©€;wîàéÓ§HIIÁÆ‹´Ã¹VµÉeN—ÆÕÕµØîÝ»‡¶mÛۗ󈈈ˆHÿhå̦ŋ£sçÎP*•hÓ¦ †ŽѸqcx{{ÃÐÐgÏžEzzz¹úILL,¼}|ff&‚ƒƒÑ½{÷"ûtïÞgΜÁÍ›7/^¼@«V­°oß>üþûïpvvF\\ 22¿ýöúôéØ¿?~ûí7@=ðã?~)ŠŠŠÂСCahhøÚ,êä¤ò‘Ë\›7o.^¼Xø¯U«V˜5kVa¡‰s^‘Ëœ.M»ví R©pìØ1/ M/^䱕ˆˆˆˆ¨ªPwu'”aÛ„„áää$š5k&ºuë&jÔ¨!‚ƒƒ…BÄÇNjڵk‹Ž;ŠîÝ»‹Þ½{‹úõ닾}ûФ¤¤"‹µÆÆÆŠêÕ«>¾r劰±±B¼\àÖÙÙY4iÒDx{{ ;;;Ñ©S'‘••Ud[!„X²d‰°°°ݺuÂ××W!„˜2eЍY³¦èر£°´´!!!…¯svvóçÏ/|,|\«V-DFFâܹs055Å[o½…B:uê.² Ó§OÇ Aƒpýúu888 I“&…Û–-[†±cÇ"!!-Z´€Má¶Wg<ýyß &àþýûpww‡££ãk³¼nUŒœæÚŸ:uªÈcÎ5zEŽszÇŽÅž0`:tè€k×®aÙ²e¨W¯^á6Îw"""""ý¦•bðr![ooï·YXX¹ÔÁÑѱȗ‹²066FÇŽ_»ŸƒƒJÜÖ¸qc4nÜX­þÜÜÜàææVæ,êæ¤²“Ó\+ εªK_æ´­­-lmmÕڗ󈈈ˆHheͦÊ`aaWWW©c(=‹.å¤òÑ¥1ä\#MË\á|'""""’'…øóu¥í¨P`çÎðóóÓv&*AUùüwíÚ…!C†@ÍiIÆÏ_;ªÊÿ_¹á|'""""ÒŠ‹²=³‰ˆˆˆˆˆˆˆˆt‹MDDDDDDDD¤1,6‘ưØDDDDDDDDDÃbi ‹MDDDDDDDD¤1,6‘Æ(˲ó!C°ÿ~me!*4pà@©#TI¡¡¡RGÐ[<~êÎw"""""íP»Øäëë«Íô¾¾¾prr’:†Ö999q®IˆŸ½vðsÕM"""""íP!„Ô!ˆˆˆˆˆˆˆˆH/\äšMDDDDDDDD¤1,6‘ưØDDDDDDDDDóëŽòaÖ>ÿIEND®B`‚bm3.7.0/doc/html/a00140.map0000644000175000017500000000231311365042633013227 0ustar tlktlk bm3.7.0/doc/html/a00128.png0000644000175000017500000016742411365042631013261 0ustar tlktlk‰PNG  IHDR3]ñ&6bKGDÿÿÿ ½§“ IDATxœìÝy\ÛõýðWPîBÂ}…p”rµ€…¶Öimí¡öTU§››º¹é6uºÍkêOÝon:§SK[§-mÕj­¶U …R B \áHB @W Ç÷÷Ǿ-ÓÖÖIàý|<ú€Zš|¨-äûú¾Ã0 !„B!„BìÃkŸ€B!„B!äJP˜A!„B!„»Ba!„B!„B슣µ@!dnhkkCii©µ1eÂÃÑ••eícB!„ÌIfB™EEEضm›µ1e¶nÝŠüü|kƒB!dN¢0ƒBÈŒ:~ü¸µpÕžyækB!dN£™„B!„B±+fB!„B!Ä®P˜A!„B!„»Ba!„B!„Bì …„B!„B±+fB!„B!Ä®P˜A!Ä&)•J|þùçSþ¸ƒùùùSþ¸„B!dæP˜A!Ä&µµµáСCSþ¸ÃÃÃxûí·§üq !„BÈÌ¡0ƒB!„B!vÅÑÚ „B.†a¼öÚkøüóÏáììŒ[n¹Û¶mƒ^¯ÇÿøGdggãƒ>€ÉdÂ}÷Ý…B#GŽ€Ïçãg?û®½öÚ‹>ö§Ÿ~Š÷Þ{ýýýX¾|9}ôQðx¼üì!„BÈE•„BlV}}=ø|>öïß?ýéOسg¾þúk˜L&TVVbpp~ø!vìØ_|>>>(((À­·ÞzÉV‹Å‚ºº:äççãí·ßFaa!Ξ=;ƒŸ!„B¹fB±Y¸÷Þ{1oÞ<ÌŸ?ëׯÇW_}€­Úزe x<222ÀçóqÛm·q?¾äcß}÷Ýptt„H$Bdd$†††fâS"„B!S€Â B!6K$ÁÑñ|GdTTzzz¸Ÿ»¸¸x<œœœÀçó¹Ÿ_Šƒƒ|||¸ŸS{ !„Bˆ}¡0ƒBˆÍêïïŸôsNOOO+†B!„Ø 3!„جÎÎNœ:u »RõСCÈÎξâÇ)**BKKËTB!„X m3!„2¥††F¡PhÑÒ¢Ek« EŠnH¥mpq‰¾¢ÇJLLÄÎ;±wï^ttt ..7Ýtôzý=Îßþö7¬^½QQQWôû.¥°0yyÏ#0Ð"‘=!ú (ÈÁÁÞ ò‚Pè WWç){NB!„Ââ1 ÃXû„Bì‹^?‚–íxhÑÖÖîý®®€ƒAA^ð„»»3º»»Q^žÏ>û×=רؤR)<<<7ŸÎ{úégÑÕ%Fjj*0:j†N7µº==0™,ÜÇzzº 8ØöíDØ|þ¿¹¸8Yñ3"„B±+g¨2ƒBÈwêí,º¹à¢µ•­¸èíe78::@ ð†¿¿ÜÜœˆà`oôõ £³³Ÿûáãã//,ãŸÃÙÙiiiSýé]†áÁlæáÌúûÙ­)H„¸ñÆ„„øÂÏÏ ®®Î0@£é‡F£‡F£‡\Þ‰®.=º»`±œ¿Ÿàíí6)Ü`O. f«>œé[7!„B½""„9¬¯oMM]hjêFKK÷x`у–-ôú€“B¡üüÜáêê±8ÃÃcèí„ZÝ¥²JeüüÜ€¸¸`DE **‘‘ˆŠ €vïÞmÛÚ­üO  ÒÒúŸÿ7h4ý¨¯ïD]]'äòNœ;׆?<ÁÁQ€Pè±X€„!22R ±8ÎÎŽÐjÐÙÙ®.=Ôê~tw@¥Ò¡»[©T‰îîtwLzny"$Ä7‚ƒ½âÀ"‘„Boxy¹Zã…B!dÆP˜A!³œÙlA{{/»ÐР/ºÐØØ…žžAÀ¼yމ|áãã77g$$122­vM?ÚÚzÐÖÖƒ  ODE"!AˆˆÿIÅ\º€f ¬Ì¿þõX¾\‚¼¼x,Y?écÚÛ{!—kP_¯F}}'Nžl¿ÿ] ƒÁ‡ðp?ˆÅÁˆ†D"DFF$ÄbÁ·*/ŒF3´Ú‰cjµ ~´¶jQZÚ¥R‡‘‘1î÷¸º:#$ÄÁÁÞ Ù·ÁÁ^“  OZIK!„»Ea!„Ì.¤hlÔ ©©› .ŒF3 0ÐAA^pwwF\\D"_hµztvêÑÒÒ öFTT’’BÀ…‘‘pwŸgÍOÑf0Œ ¨­UaïÞR88ð™…åË%X¾<II"„…ù!,Ì+V$p¿ÏbaÐÖÖƒº:5är d2¾úJ†7Þ8£Ñ >ßþHHA, >^ˆøø`DGB(ô¹ä™ôú¨ÕýP©tÐhú¡T²o;;ûQS£„FÓϵlÅMPWÍ!x#$ÄÁÁ^ } ú@ ð‚“Úþ !„B~(J!v„attô¡¹¹46²aECC4š~€““#D"ox{»ÁÙ™£Ñ n*U?ŒF¶U!::11Aˆ‰ DTT XL×ö×_÷ßÿc;öÅ´<þLzæ™g ŸŸžžAÊñõ×õ8~\†®®ybùò,_.Á’%ñðñq»äã™L´´t‡lËJ]­­Z˜L89ñ±8 Û¦’ Dx¸?øüËß²>:j‚Z­Cg'Û4Qá¡R±ï+•:hµ0›Ù¦<fƒÿng™@ÜÜhc !„BfÔ 3!Ä F46v¡¹™ *4hnfg[L´x{»!(ÈnnóÀ0 ††FÑÕ5€vÖ…««3¢£¹11Aãoáí}é‹ë©244ŠÃ‡«PPPo¾©G_ßøôÓ¿ÍÈsO§ ÃŒ 1 ©T…ãÇe8~¼gδ€a€ÔÔp\{-n¤¤„ÁÁáòÚ;ÆÆLhhÐ@.× ®ŽmW©¯W£½½ ƒyóÇVpL„ññÁ óûÁ-$&“ZíÀa‡juÿ :ŒŽš¸ßãåå2©š#$ÄB!tˆD> ñ¥ªB!„L% 3!Äšúú† “©¹y47w£££ ÀÏw@` '||ÜÆW€š Ó C«ä~=,ÌoR`1Qi!ùXe&‚ÑhƉuØ¿¿GŽÔÀl¶`ùò#xé¥_âØ±£3~¦©öôÓÏB­ãÁoŦM áëëþ§×PXXãÇëpüxÔjüý=°ti<®½6K–Ä# À㊟xx lÀÑÐÀ¶«Èå(•}w÷yˆ‹@"rUb±à{[U®DOÏàx5G:;û'½?1vhh”ûx7…> õEh¨/„BˆDìÏE"_ji!„BÈ• 0ƒBf‚N7<~WýÑÐÀ¶hµìNww¸ÃÕÕ ƒÁÁQtuéa2±³.<+@T[Y1\DFØÄ Ã0(/W`ÿþr:t}}ÃX¸0 6d`íÚÔ ¶™lÃñãÇ­}Ü«öÇ?>ÁÁ( øÂ`0aõêlß~ ²³£/ Édj?.Éu(-m†ÉdAR’K–ÄcéÒx,Zyó~ø8+½ÞÀýÝ:ÿ÷M®.v#Š——+âãÏeÛV„?(P¹¼óŒ@©ìCGGT*”Ê>¨Õýèèè…JŶ»LÌs™îBCýÆ«9|¸ª¶ÒÃgÚÎI!„»Ca!„L¥þþáñ ì…¤\>ùbÒÍÍ ¾¾˜7ÏF£½½CÜÝk7· ÛB‚Ä…¶º)¤±± û÷—cÿþr´µõ@,Ɔ X¿>aa~“>v6…m&o¾ù6ªÄûïŸÂÙ³mˆ ¶m9Ø´iÑ÷ÎÉÅÉ“8q¢……õhlì‚««3-ŠÂ²e쬄ᔜ·¯oˆ[{á\޾>v ¨¿¿„ˆ‹cgr°a‡^^.Sòüc±0èîÖ£££J¥jµnüý>¨Õlø1øìÖÐP?…lØÁVuø@$òåª<¦kæ !„Bl …„òCŒŒŒ¡¾¾µµªIÁEg';„ÓÅÅ>>îprrÄ訽½ƒ0™Ø¡Š"‘bb‚'@l¬±±ì, ‘hêZ¦“FÓƒÏbß¾3¨®î€@àõëÓ°qc&’’B.úûfc˜qáÌŒš%ví:‰‚‚ ŒŽšpÓM °}{²³c.ë1•Ê>|ýu=¾ùFŽÂB9úú†䉥K%Xº4¹¹byNéçÑÕ5À­Ž­¯ïo[é„^o„†úrÁFb¢I0bc3Z 4:j‚JÅ*[Õ1|¨T:ttôbxøüZZ__÷ñ€ƒ 7&ª:ØðÃAA^pt¼ü¡©„B±IfBÈ¥0 ƒÖÖÈdjÈd*ÔÕ©!•ªÐÚª…ÅÂÀÙ™oo788ð02bÄÀ€ ÃÀɉ¨¨@ÄÅ È11Aðð°¿AˆngqqÜÝqà )ظ1×\{Y-' àñáé™ ƒ¡ccê|.—xŒŽ6Ábýþßp…<<alL±±öoýÚÖ­[¿5`+.¬ÄûïŸÄ¹s툋`ûöÜzëÂï­Ö˜`±0¨ªjGa¡'NÔáÌL& „X¶L‚¼<1²³c®ª%åR::ú “±Aû÷¾f89ñ‰D8p¯zèèÕÒ醹ªŽŽŽóUJ¥*;Çc"LäóäÅUuL )˜Ý!ùÀÏï»g B!ÄfP˜A!ôúÔÖª¸àbâý‘‘1ðx€‡‡ ø|ŒŒŒq›¼¼\;Qe„ØXââ÷·û»¿F£Ç˰9¾øB ‹…Áòålܘ‰ë®Kºâ é¶¶6”––B¡À®]4bÛ¶XÌŸï÷ý¿ù"ôøÛßjðä“éð÷ŸÚ–†Þ}WŽªª¬_…¼¼àI¿ެ¬¬K>Fuuví:…‚‚rfÜtS*n¿=‹E_ÑY††FqêT¾þº_]‡ÆÆ.Ì›çˆììä剱l™ Âi ŒF3» —³IuujÔÕ±›UÀÓÓ…6š „D"BB‚ð²œéd6[ÐÝ=ÀUu¨Tç«:T*¶ÊãÂv'„†ú",ÌoÒ_„†úA ð²âgC!„P˜A™‹Ìf š›»Q[«‚TªDMµµ*tuéNN|89ña0a±°_"E"Ÿñ*‹ ˆÅÁˆŽ„X<åeÿÖÆ0 ÊÊZ¸Ažýý#ÈʊƆ ¸é¦Wua:6fÂK/}Ž×_?Ž%KÄxùåÍö¾ªó>÷Ü'øôÓ*?vUs1 Ãà¯ý/½ô¶nÍÆ³ÏnüA-CC£((¨À®]§PUÕ±8Û·çà–[2П©Z­Ã×_×ãĉz7 §gAAžÈÍWnÄA ¸º?ÛË50`øVÀ!“©¡Ó oH$ÁHJ ™4xtºªJ~(ƒÁxÁ¬6èhoïEGGÚÛ{¡Vë¸êŽyó¿t°a‡BC})ì „B¦…„Ùmdd 2™R©ee-8w® EŒFxàó&mSˆŠ @|¼±±lhˆØXÜÜf÷PA¹¼“äÙÑщDÈ ò ñ½êǯ©QâÁóÑÑÑ‹'Ÿ¼Û¶eOIÁªUÿ‹… £ð쳯ú±.åÈ‘<ðÀ.$&†à­·v\ÕVªªv¼ÿþ)8P³Ù‚5kR±}{.ŒúAg±0¨©éÀ×_×£°PŽÒÒffˆÅÁÈÍC^ž99±Ó>Ìó¿©ÕºIse&ÖÇŽ™¸k çÛTE÷¿¬–%k0™,P«uhoŸ9zÑÖÖ ¥òòÃŽÐP¶ºƒÂB!äªQ˜A™=tºaÔÔtàäÉ&œ9£€\®Fw÷ †ÇÃÄ—;77gDF 99b±€ .BCýì¾5äJtvöãÀJìÛwR©B¡Ö¯OÇÆHHMÉs˜Lüõ¯Gñÿw™™‘xõÕ-÷Ÿ’ÇÖj±`Á“ø÷¿ïÆu×%MÉc^J]wÝõ6ŒF3Þyçn$'_|ØéåEAA9ví:…êêÄÇs³5®f{ÍÈÈJK›QXÈ­­UÇã!55 ¹¹bä剑™ g癯Œ0™,P(´ÉØ®‰J޶¶X, ÜÜœÇ[UØa£í*ö°’uªÂvHéìªø"„B¦…„û¤Tö¡°PŽ“'QUÕ¥²[q:ÁÍÍááþHJ Aff$ââØys÷BA¯7à³Ïª°oßœ<Ù¬^½7f ;;fJïŠËåxè¡Ý¨¯ïÄï~·wß½dJÿþrüò—{P[û,ÜÝgf¨ªN7Œ{ï} ¼òʬ]›:%{ölví:…ƒ+a6[°v-[­‘™ùê5.ÔÛ;„ââÊQTÔ…B WWgdeEs•II!V­ˆ»`بuuìû==ì‹À@O$$ˆ”$âŠÅÁ3ºUåj],ìèèè冖^NØæ7§¿†B!ã(Ì „ؾ3g8~\†ÒÒ45uA«€Ùlá~ÝÅÅÁÁ>‹ƒ±pa23#! àëK vVűcì Ï£G¥``ÅŠlܘ‰•+§ü½ÅÂà7NàÅ#))ùËVÄÆMésÀƒæC©ìþ}?ŸòǾ“É‚?üáÞy§>¸Üè鄯¯;rsã¸p#22`Jžëjuwp„êêØjŽúúNŒ™àäÄGLLØp#11 «žÃb- ;ÚÛ{¹YvB! 3!¶C©ìÃéÓ-(,”£¦¦mm½ÜªSptt€ŸŸ¢£‘šŽ%Kâ±`A(…ßÁbapút3öï/Ç'Ÿœƒ^?‚ììnçÕ´1\ŠB¡Å/~±••­øÕ¯~„ûï¿vZZw†AZÚS¸ûî%xà•Sþø—c÷î<öØ>,_.Ák¯mŸò•»••lµÆ¡C•0™ÌX½z¶nÍFNNÌ”m-a2™škI)-mÆÐÐ(ÂÂüÆ[Râ›+¶©6“É‚¦¦®ñCɵ¬¨T:€’’DHHìàQ'+Ÿüê\*ìèèè´~–ÂB!s…„™§TöA.×àìÙ6”•µ@.W£«k€{!®®Î‰|”‚ììh\}2„B+žÚ>ÔÕ©±9 * Tö!!A„3°n]:D¢éûócï½wO?}‘‘øë_·!1qjæn|—ÚZV®| Ÿþ0RR¦íy¾OYY î¹çøû{àí·ïš–Š†‰M({ö” ²² ‘‘ض-·Ý¶hÊ/JF3**Z¹p£²²f3‰Dˆ%KÄÈÍ#;;zÆÚz®„N7ÌmT©­UqƒGGFÆÀç; 22`RÈ‘ BXØ_ lk.v´·÷B£9v¸¸8!"ÂááþˆˆðŸô~x¸¿Ý?„Bæ 3!Ó§££ î⢪ª­­Ý3Oú8OODE±ÕË—K¬²yÁž©T:8P}ûÊ!“©â‹uëÒ±aC„Óþüýxøá½(,”ãg?»¿úÕ¦}–ÁÎÇðǹs²úö •J‡;þ…öö^üë_w!''fÚžK&Sc×®SØ¿¿ÃãX¹2[·æ`Ù²xðùS_388ŠS§¹¶”úúN8:: ==¹¹b,Y"FZZ„ÍÎ5›-hmíá‰*޶¶€——ˤp#11I°M†5Wë¿ÃŽÖÖ´¶jÑÖÖƒÖÖhµƒÜÇ ^ßtDDøÏØÊ_B!ä{P˜A¹zíí½hlì‚L¦Bc#[þ-—«1##cxè¡Ý8r¤/¾x6mZ4­Ïg0qøpví:…ÒÒfˆD>Ø´i¶lÉš’UºÓÕ5€ââ|óM=ŠŠ TöÁÝ}rrb—ÇVnH$ÁSÖ3] “*8ØYj ÀãñáÄÄ CÛ^;††F¹`£­­wü­–ûùؘ ÛÂraÇ®®³{5!„›Aa!äòõöqeÜuujÈd*44h08Ènñðp£#ÃÃŒ™áââ„””PdeÅ ==©©atWï*Œ™ð嗵ؿ¿_~Y X¹2 7fàÚkftÕf_ß~ûÛðÉ'çð?ÿ³O<±fÆ.bFFÆð8^|ñ6ÜvÛÂyÎËÁ0 þüçÃxíµ/ñÀ+ñ›ßÜ8#¿ÍÍÝØ³§|PŠÞÞ!,[&Á–-YXµ*yÚ+dš›»¹–”“'¡Ó #0Г$š—'žÖpe*1 ƒ¶¶^Èd*îëœTªBk« w÷yãëbE\À‘ œ¶ù3¶„atvöWsôL =ÚÚ´èêà>6(Èáá÷ûVàìmóA!„»Aa!äÛ #äòNÈd¡\tw³/X½½]è tºatw‚aDG"33©©X´( bq°Í–ŸÛ ‹…AII7ÈspЀk®‰Å† ¸ñÆViÇùòËZ<òÈpppÀ«¯nÆ’%ñ3úü_}%ÃwüOÙd8öÁ§ñ›ß|ˆ+ðÚkÛáæ63!ÑhÆ_Ô`ÏžRœ8Q??wÜv[­3õÛdþ›Å ººEEr|óee-0ŒˆŠ 䉿æÆMÙV–™2±6¶¶V‰ÚZ5êêTJUÐëG¡¡¾HL áæq$'‡ "ÂN]´ŒŒM 9&Þg+<´=_ÕˆðpDE 22þˆŒ @h¨}¿ „r%(Ì d.³X´¶jÇïBv¢¾ž½ÙÖÖ³Ù'DGÂߟÝdÐÛ;…B‹¡¡1xxÌCZZ22"‘žŒŒÚ*2…d2öí+ÇP©tHJ Á† X¿>Ýj«'Gñ§?D~~ 6lÈÀ3Ϭ‡·÷Ì_˜>ùdŠ‹ðÕWÎøs_®Ó§›q×]o#4Ôï¾{÷Œ‡.Jeöî-ÅÞ½§¡Ré•mÛ²±zõ‚î8:jBYY3 PT$GUU†ArrèxÕF-жÛa“JeôJ¥JÔÔ(¡P°Užž.ˆ"9Y„¤¤n.Ç\mÁÐhú¡Pô@¡`ÛVZZº¹÷uºa€“!!¾ˆŒ ˜tDE""ÂF+Ï!„Ø 3™+º»&UY°s-4ƒƒHLA$òÙlV;ˆÚZ%»ÀãñÄ™™‘ˆ‹LËÀÁ¹L©ìCAA Ê!“©ê;`d >>تg;}º=´<ÿü-X³&ÕjgYºôÏX¹2¿ÿýZ«ár(ZÜqÇ?144†wß½ÉÉ!3~‹…Áñãuس§GJáæ66d`ûöl$$Lß¶™ï¢× ¸¸‘«Ühjê¼yŽÈÌŒD^^´ñrI¥J<ð@>::zñ‡?¬ÃÖ­ÙÖ>vï.ÁOì‡LöœÝü5™,xâ‰}صë{ì&ÜÿµV=Ã0î ; IDAT()iF~þ)>\>ßkצaëÖ¬ÛFó]äòÎña¢ 8uª{#7÷ü¼ ‘ÈÇjç›j:Ý0jj”\›ŠTª‚\Þ £Ñ ''>$!rLÌâ Pù¼±1ÚÚzÇCŽn(ìªÙ–-::za4²+À½¼\€èè@DE"&&‘‘ˆ‰ ¤?OB±ofb4=·F°¾žm‘Ë;1:jŸï€ÈH¶ED"">>˜[#h6[PUÕŽÒÒf””4áôéèõ#ðñqâEÑÈɉAVV4’“Cé.à4³Xœ<ÙˆýûËqøð9 qƒ„M›áùço±‰ÐJ§ÆþýåÈÏ?™L„!¶lÉÆ-·dZuP§ÉdÁ¹sm(*bçmœ9£Àè¨ ÑÑX¼8¹¹qX¼8nÖÝu7ÍhhÐ@*eCŽšjj:¸¹aa~\°‘˜ÈVr̵a£—Ãl¶@©ìãª9 -š›»ÑÜܶ¶.èðós8}>䈌 €»;µ®Bˆ£0ƒ[288ŠúúNÔÕ±-"õõjÔÖªÑ×7¼ ‘‘˜(B|<Û*"sw¨'¶ ²=é A ðFVVôxåE âãƒéÅï 9{¶ TààÁ³Ðhú1~(6lÈÀºui6Ù+ßÒÒÜšš<úè¸ï¾e3²^ôr˜ÍÌŸÿ{üâ«pï½K­}œäèQ)~ö³÷1~(þõ¯»lj³GEE+öì)Å0ÍX½:[¶dañâ8«½0Œ(+kAQQŠ‹pî\;†D"D^ž‹Ç!''fÖ^€vvösm*lÈ1yØèĚؤ¤$'‡B,ÌÙa£ßÇd² ££— 8ššº¹¤íí½0›-ÀÑшŽBTT¢¢¹ FJ!6 B¬a´¶öp½ÓR©uuj´µõ‚axxÌC||0$öj|¼‰‰ÂïÜ¢PhÇK³å(*j€N7 ÀK–ˆqÍ5±ÈÊŠFdd€>˹«¹¹å((¨@ss7"#°~}:֯ϰÙ Ãàßÿ.Æ3Ï|Œ˜˜@¼öÚv«ýoåå­X³æ/8~ü76w¶+!“©qÇÿ„³³#òóïµ¹ŸCC£8x°{ö” ¼¼‘‘ؼ9 ›6-´™N¯7 ¤¤q¼r£õõàóyHK‹à*723#gõEçÐ~OlR™h9¼pØ(;dT4Þ®‚  ëÍ»±F£mm=hjêBs3Û¾ÒÒ¢EssÔê~0 D"ŸI!Gt4[ÝêgW„2GP˜AÈt›˜na_t]88ð0^22`îwÑ;¡½½C(*jàŒ¶¶xxÌCNN,–,a‡æ‰Åö{¡g¯4š~yï¾[„'žX‹Ÿüd™µô½ ->ü° »w—¢«KœœlÝšoL‹‹“µ÷êë;QT$Gqq#Nžl„^?‚À@O,^‡¼f³……rTàóÏ«1\…{ïý7jjž±©¡™Så7Nàé§áÎ;ãOZoóU=ûïâøñ:äçŸÂ±c2¸»ÏÃúõؾ= "kï¢Ø-O8y²…… (+kÁÈÈ""üqÍ5çÃÀÀ¹7_Âd² ±Q3ÞÉÎ⨪ê€^?rA[d(RRB¹jkÛ.f´·÷¢±QƒÆF¶]e"ìè鸸8qÕlÈÁ¾Ž„§§ý|ß!„iBa!R©t¨©9—J*U¡­­äɵ‡L±±‚ÜÞ¡Ñè¹ð¢°PŽÑQ#RSñjU2V®LDb¢í^ Ì ࢢ å8t¨Zí ÒÒ±~}Ö¬IµËpI¥Òá‘G>À7ßÈqï½Kñè£7ÚM%Éo~ó!jj:ðé§¿´öQ¦ÍáÃUøùÏw!/OŒü㸹ÙÏ6Š®®|øáiìÞ]Š––n¤¤„aûö¬]›fóaߨ˜ gÎ(¸¶”ÊÊV˜Í ÄbrsÅÈË‹Cvv¬ÍÓ©­­g¼E¥ƒ«äèììÀV°38B¸y¡¡¾V>±}Óé†ÑÔÔÆF ššºÆ°-,Õ7WÉqa5GX˜UsBæ 3ÈÜd6[ÐÜÜÍÝyš/zzÁãñáϽ0KI ›’)ð à¦F‰/¾âË/¥¨ªê€››3–.Çu×%aÅŠDÐ.k“Ë;QPP*ÐÚÚƒØØ ¬[—Ž 2lr6ÀåúàƒÓxê©zá/Ùb³'/&+ëilܘ‰G½ÁÚG™Våå­Ø±ã-ˆD¾xï½ÛÝö †aPZÚŒ]»Náðá*88ð°fM*¶nÍÆÂ…QÖ>ÞeÅ©SM\å†L¦ÇCJJèx[Š FÙlKÍLéé䂉›ëb}|ÜÆŒŠ0~’“ChG¶lb­lCƒMMÝã[WºÐРVËVs8;;rCG££'@\œ±±» H !ä2P˜Af¿ÑQÓ9•¨©QA&SahhNN|ÄÅ ¸¡góç‡"1Q4eå›##c(*jÀ—_ÖâèQ):;û懕+±jU2rrblzNÁ\¡TöáàÁJìß_ŽÚZ„BÜ|s*6lÈDrrˆµwU:;ûñÈ#àøñ:ÜsÏüö·«íî"¬¹¹¹¹ÏáÀ°hQ´µ3í -¶occ&¼ÿþ½v;¨R¯7`ß¾2ìÙSŠš%bcƒ°ukn¹%Ó®‚ÛÞÞ!7p•ÍÍÝpvvDff$rsÙ5°©©4„`aNlQ©©Q¢ººry'ŒF3\]‘ äª8’“C!‘í¦:ÌÖéõ#“fr47wsUF£<¡¡¾ˆ B||0bc‹Ù ÃÛ{öµîBæ 3Èì¢×\Ð"¢œ4ßÂÝ}ÞøPN·–N"NùÄöþþa|þy ®BQQFGHK‹ÀªUIX¹2Ѧ{Éç’¾¾!|üñ9”£¬¬^^®X½zÖ¯OGvv̬(ÓýÏÊðÔSàççŽW_Ýl·AÀ;ïâ…£ºú™9³aA§ÆŽÿ‚L¦Æ[oí@nnœµtUªªÚ±{w ¨ÀȈ?úÑ|lÚ´Ë–IìîßšJ¥Cqq·"»³³óÃUn$$i ç8£ÑŒº:5¤R6ܨ®Vr7ŒùóÙJȉ6š1uL& ÚÚzP_߉ÆF är 4hlÔ`xx ÛF+oYpÕÁÁÞV>=!„\…Ä~õõ ¡ººUU¨ªjçJ\Àß߃›m‘’–¸FFLÛ‹æ¾¾!|öY5>ýôŠŠàèÈÇòå\w`Ѐ4Û0<<†#Gjpà@Nœ¨Ÿï€U«’±aC:–-“Ìš*FGý¾úª;väá±ÇVï `[vçoÏwÀÛoßeí£Ì¨±1zh7®ÂK/mÂm·-´ö‘®šÁ`Ä¡Cg±wo)JJšâ‹Í›aóæ,„„Øçœ…¦¦.5 ¸¸ÅÅè낟Ÿ;/Žã*7¢¢­}L›b±0P(´Ü÷î™hõ$“1 ¥R‡¦¦.Èåhh`C¹\Ãmfóòr¯à`ƒ±8qqšËA±fû ÕŽíÜÛŽŽ>€H䃔”0ÌŸÊ•¯ÎÄÝ„žžA|öY5>þø,Nj„³³#V®LÂêÕ)X¹2Ñ®/g£ÑŒ¯¿®GAA9¾øBŠÑQ#–,‰Çºué¸á†ù³nÕà¾}gðûßÀÇÇ /¿¼991Ö>ÒU1ÍHL|O<±wÞ¹ØÚÇ™q Ãàùç?Åßÿ~ ?|=~xÕ¬¹ãßØØ…½{KñŸÿœFoï–.ÇæÍYøÑæÛmŽÅÂ@*U¢¸¸EEr”–6chh"‘Ïx°ÁèŽ÷wQ*û¸ªJ©”ݤ¢T²ßëo¤¤„"%%lüm(ý9N“žžÁñJŽÉAÇÄÐW'®ŠƒmY â‘Úë¿]Bˆ]¢0ƒØž®®TUµsÁEuuT* ,ÌoRp‘’:£UCC£8r¤åøæ9æÍsÄu×%ᦛR±|¹ÄîfÌV ƒ²²8PC‡ÎB§Fff$Ö­KÇÚµ©³²R¦³³=¶GŽÔàþ'?~Ó¬övòd#n¹åï8uê DDø[û8V³k×)<öØG¸õÖExá…[gÕ|£ÑŒ£G¥Ø³§'NÔÃ×× 7fbÛ¶ÄÆYûxWÅh4£²²•«Ü8sF£ÑŒØØ .Ü¸æšØY¹nxªètè©9_…YUÕÖÖ0 Àküµ@tPkÄôÑë hlœhSé¯äèD{{/Ìf î?i&G|¼qqšB™fëêìì¿ Ú‚ý¡Ñ°ÉddXL¼X±Æ ¾ ïì9R“É‚+°aCV®L¢oÐ6¤ªªVâàÁJ¨T:H$B¬_ŸŽuëÒægíãM †aŸ_‚gž9??¼ôÒ&,^kícM™çžûŸ|r'O>ní£XÝÑ£Rüô§ïañâ8»[Ýz¹”Ê>üç?eس§}X¸0 [·f㦛ÌŠ*ª‘‘1œ>Ý‚¢¢ÉQS£Ã0HJ ᬬèYùÿv*éõ#“Âêê(Z0 ƒÀ@O.ؘxí ùXûÈ³ÚØ˜ ]“fr°WØá£|>r$&Џ€#>>ÑÑTÉA¹f™£RépîÜDµû¤»{<QQT[°wX¼¼\­zÞªªv|ðA¬€N7ŒœœlØÕ«Xýl伯Æ.@YY ~üã¥xä‘f]uÐõ׿ŒŒŒ<÷Ü-Ö>ŠM¨¨hÅwü‘‘xï½ÃÏÏÝÚGš ƒ¢"9òóKpäH \\±vm¶mËÁ‚aÖ>Þ”éïÆ©SMãáFäòN89ñ‘–¼<6ÜHO  ¾Ë ×¸jΉêΖ6àð˜n¤¤„ÚíŒ{b2Y Ph!“© —w¢¾¾uuj(Z˜L89ñ„¸¸`$$!³oÃÂüh/!ärP˜A¦‡V;ˆsçÚqölªªØ·ÝÝppà!::pR«ˆ-M.×é†QPP޽{O£ººbq06oκuiTºjC&V©T@*UB ðš5©X·.ééÖ>Þ´3™,xããxùå#ˆ‰ Âÿþï¦Yu7A«Djê“xûí»°jU²µc3š›»±mÛàó°{÷}ŸÝí7½½Cøè£3ؽ»ry'„ؾ=ë×g̺ö FÏmJ)*’£££®®ÎÈʊ憉&'‡ÒðÅË40`@MrRëjss7,þþ\õçÄk’ÙZÁgkŒF34\¸Q_߉úz5ÚÛ{a±0pqqB\œ [Á/„X, ÿ?„ÿFa¹zzý\œ;׎sçÚ¹]‘‘X° ©©áX°€}±`k¥Â ƒââìÚujÒÀM›!##ÒÚÇ#ã´ÚA|üñY8P3gðövÅ7¦`ýú dgGÏ™»8ÕÕxøá½hlÔà—¿¼÷ßí¬šŸp¡‚‚ üâ»!•> Ûúºam]]¸ýö7¡Ñôãý÷ïÅüù¡Ö>ÒŒ(/W`×®Søä“s0™ÌX½z¶lÉÆ5×ÄÌšÁ¨R(´\¸Q\Ü­vÞÞn¸æšä抑›‡¸8µiWGQSÓ1iZSS,¾¾î“Z[SRBg}XhK†‡ÇÐРA]ry'd2öíÄÜ4y‹ƒ¹C"a«9/+Ÿœb%f+3<<†ššœ=ÛŽsçÚpöl;×§*úL .RSÃàím»wÍôúìÝ{ï¾[ …B‹¬¬hlÚ´7ßœ6ëJõí•^oÀgŸUáÀ 5ÀÅÅ «V%aÝ:v•êl)½6Œßûwnxx ¯¼ro¾y™™QøßÿÝ„èèÙ½îñ¡‡v£½½û÷ÿÜÚG±Iƒƒ£¸çžwPQ¡À[oíÀ’%ñßùq££¦Y7ÛghhØ»·­ˆŒ À–-Y¸í¶…³vÃÃ0¨«ëDqq å()iÂÀ€l俯QûÄ044ÊmO™¨àhlì‚ÙlÛ¤pcþüPDFXûÈsŠ^o€\®F]]'tÔÕ©¡Õ||ܾpH$Áðõmx„…äâŒF3¤Rå¤v¹\³Ù??÷ B‹p¤¤„ÙM2^W§Æ;ïaß¾3àópë­ ±cG.bbì{jþla0ñÅ58x°_}%,_.ÁºuéXµ*iÖ­¼Õé†qóÍÅîÝ÷]ô"äèQ)|ôz{ì&Ü~{ά¼ }!†ažþìØ‘‡\iíãØ,£ÑŒ‡Þ‹C‡*ñÊ+›±qcæ¤_gwÞù¶lÉÆ 7Ì·Ò)§—L¦ÆîÝ%Ø·ï  X¹2›7gaåÊÄY]±e2YPUÕÎÍÛ(+kÆè¨ ‘‘“6¥̾íM3axxl<à8?¤¼¡} äåå:iƒJJJ(""ügý×e[ÓÛ;ÄUoœoWéDÿ0@ ðB|¼ÉÉ!H„HL!.N0kn„B(Ì ã,ryç¤v©T £Ñ OO¤¤„bÁ‚óá…½õ-2 ƒ/¿¬Åë¯Ç©SM‹ƒqç‹që­ ©|Ýfœ8Q‡C‡ÎâóÏ«a0±xqÖ­KÃ7¦Ìê«?ýé{8x° „áС‡&½ÈR*ûðøãûñÅ5ظ1¿ÿýZyZñ´3G&SaÅŠ—ðÙgÏÊy S‰a<ûì'øÇ?ŽãñÇoÂý÷_ËýÚÎÇðÌ3¤Ògfõʱ1®Âž=¥(*j@Pn»m!¶lÉšwÒGGM(+koK‘ãܹv˜Í $!Wµ‘“Kßó®ÂÈp\Ø¢ÒРÉ4pLnQ‰Œ  €Ã :;û¹y2™ 2™uujæñ¡£$$°áFb¢ "»¹!G™„ÂŒ¹J£ÑãìÙ6TT´¢¢BsçÚ188 '$%…LªºˆŽ´ÛacF£عó4X¹2?þñ,^G/0¦ÐGÁõ×'_Ñ W‹…AII¨À'ŸœCÿ22"±n]Ö¬IE`àì¿hÿì³jÜ}÷Û>ß÷Ý· O<±&“ÿüç×xå•#¼ðç?ß‚Ü\±•O;³vî<†;¡ªêi»ýú3Óþõ¯oðÔS°cGþøÇu(/W`Æ¿Ál¶ÀÑ‘n˜7Þ¸ÓÚÇœ …v|Åk)ººôX¼8›7gaõê—Ýr30`À‘#5¸å–Ìïÿ`40`@IÉùM)uujðù<,X6Þ–"Fffä¬kAšiƒR©ê‚ ŽvÈå0™,ߺ”–ÐPj²“É‚¦¦.Èd*ÔÖªÆßª¡V³ó8üüÜ‘˜‚ÄD!Dãkdƒéß!¶ÂŒ¹`dd UU¨¬lCee+**Z¡TöÁÁ‡ØXÒÒ‘žôôÄÇ gÅ0ÁÁÁQìÞ]‚7ß<îî¬_ŸŽûï¿bq°µ6«0 ƒW^9‚—_>‚gŸÝˆ;r¿÷÷TV¶áÀ :tM?EX¿>7ßœ>§^äõö!/ï9ètØø*Ìãñðøã7aß¾r47wáç?_‰Xgç¹÷bjÓ¦Àßß;wÞní£Ø•?>‹ÈÇòåTV¶¡§gf³û÷ëÍ7ïÄêÕ ¬|Ê™c6[pì˜ »w—àØ1ÜÝçaýú lßžƒ„„K¯n~ç"<þø>üêW×ãᇯ·û\«ÄÉ“(*’£¨¨ …óæ9báÂó›RRRÂfÅkk5qÿݦà1~³(‚»qD­@Ö£Ó C*U¡®Ž 7jk•¨¯ï„Á`„££¢£ƒ ‘LnU‰|¬}lB‹ÂŒÙÆbaÐØ¨™\ÔÕ©a2Yä‰ÔÔ¤¥…### „ÛÌJÔ©b0ñöۅعóÆÆLغ5÷Þ»Œ¾ñL£ÑŒ_ýj/öï/‡Å .N€¯¿þíw~l}}'¨ÀÁƒ•P(´ˆŠ ÄúõéX»6uÎL÷Þû.>ÿ¼&“™ûo<ðxÈÈÇ«¯nATÔìðy1ƒÉcxá…[±iÓ"kÇî7àöÛÿ “É2éïǃ·· ŠŠ‡Ÿßìm7¹¦}tùù%P(´HM ÇÖ­ÙX»6 ^^ßþ^¸téŸÑРƒ6dàå—7Ϫ^ûŽŽ¾Ik`5=<=]ƒ¼<1/ŽƒDl÷!Ž­ã‰v^…B  õEZZ,ãª8¨ÈzÌf  -¤RWÉQWÇ®Žoo7$%‰¸p#1Q„øøàY7Ó‹;@a†½ëî@ee+*+Ù–‘sçÚ ×àââ„ùóC‘ž´4¶êb6ßõ6ÍØ³§¯¾ú ¸ë®<üô§Ëáãc»ÛTì™^oÀŽÿÂéÓÍÜ]_8|ø—HM ´µõàÀJùäî»ï]|×—_GG>’“Cpðàƒ³êÂéJ;&Ãöío¢²ò³v3ÅtÚ¹óž{îX,ßþûåäÄÇu×%á­·vXád¶a””4#?ÿ®Ÿï€›nZ€mÛ²‘™8{¶ 7Þø*÷{ø|,ZwÞ¹û;ƒÙ@.ïDq1[¹qòdúû‡àŋ㸢´¦t*õõ q³Ê*+Ù FÏUÎNl†KM@R’hNVéÙ½~2™2[ÁQ[«B}}'††FÁç; "ÂII!Ü<‰DH«} ™^f؃Áˆêê.¸¨¬lE{{/x<bcƒ–ŽÔÔddD !A4'JE†ÁÁƒ•xá…ÃP©t¸ãŽÅxðÁ•sbÞ‚µ(•}زåu(=“îú::òqË- ‘™={JPQÑ__7¬YÃYYÑ4ûl©÷’%Ï¡¿ßða0y~Æ\ôÔSPT$ÇW_=jí£Ø²²nNÆÅðx<¼þúX³&uOf›úû‡±9vï.…TªDllî¹g)ΞmÇG•}ëk\d¤?öìùɬ_j6[ •*¹y¥¥ÍCh¨/rsÅÈËc7¥ÐÐÄ©§Vëpölû¤ ½~NN|$$ˆÆ_ë±[äÄbÁ¬ÞØc,mm=J•ãA;p´µµ ÃÀËËóç‡`þüP$%… 99±±Aôÿ©Aa†-ëììGYY ΜQ ¼\êêfx -maßFÌÚ;E—RS£Äcí™%á IDATCE…·Ý¶¿úÕõ³þ¦µÕÔ(±eËëÐëG`4š¿õë..NؼyG±n]:òòÄs¶ºàbî¹ç|ñ…tÒEÒżûî=¸îº¤8•mY¶ì\{­O>y³µbWúú†°`Á“`|o˜áéé‚¢¢Ç¨WÿUUíÈÏ/³3ùù%0Œßú''>¼¼\±gÏOœb…SZ‡ÑhFEE+ŠŠä(,l@ee+ŒF3Äâà 6¥ÄÀÛûêª!?þø,-ТЬ 0 ƒææn®‚ãìÙvÔÔtÀ`0ÂÍÍ))aÜÀöÔÔð)­žÅï~÷| WWhppuu*ÔÔ¨PSÓêên£Š««3„HJ AJJ(’“C!‘§|Ø(ýÿ#s…?T{{ï”®'5™,¨­UâÌΜQ ¬¬Je ‘‘™‰ŒŒHdfFÍù2Ïþþa¼ðÂa¼ÿþ)¤¦†ãùço™S/*­åØ1î¹çæ‹^(ñùxæ™ ¸óÎÅ3|:ûpèP%~úÓ÷/Z‘1Áɉ£ÑŒ  Oœ<ùÜÜæN®J¥Cfæ±gÏO°ti¼µcW~ûÛñÞ{'áàÀûΓ 9::`åÊ$¼ýö]3t:ûñî»Åxâ‰ý—ü:çäÄÇ[oíÀµ×&ÌðélÃÐÐ(NŸnᆉJ¥Jðx<$'‡ŒWnÄaá¨+ž! ýÀÜ r/—ÉdA}½çε··£¾žæëë>¾9å|ǽ-)i† <ùä͸ûî<ºAqŒF34¨®fà ©T ©T‰ÁÁQ8:: ..óç‡pÉÉ!W5ÛŽþÿ‘9€ÂŒ+Õ×7„­[߀ƒŸ~úËü8==ƒ(/W ¬L3gZpî\; #||ܸàbáÂ(¤¦†Ï© ™ïSPPßÿ~?œœøøÝïn­·fÒp²Ÿ ¿ýí‡`\ò"‰Çââ‚qâÄofðtö¡»{yyÏc`à»ÛKœœa4šàåå‚nX€oœ%KâçÜZ¸={JðøãûQ[û,\\œ¬}»S]ÝÏ>«ÆÇŸESSù­âñxعóvÜ|sÚ ŸÒ¶-[ö:q©WGì°^àϾ۶åÌÜálT_ßNjâ*7ššºàäÄGff$/ŽC^ž©©á—¼R(´¸æšgÁ~KçaÇŽ<<ùäšq™ #jj:&µ¨´´hÁ0 „B¤¥…s „_VEï›o~§Ÿ>³™ƒƒÂÃýðüÿ³wßqM]ïÀ?a…¢‚ ²A”ª¨`]­£ŽV­ÖѪÅjÕV¿ýµuW[[µu¯¶Ž–Ö-ââDÙAö†03 ç÷G$…°nçýzñ2Î}’{ï¹7OÎ}ÎŽ4Ñ,EB!AZZ!¢£³‰ÈHQ’£¨¨, ¦¦Ýп/8:šÀÞ^”è00hÞ¥ÔtýQMf´Äƒ)X¾ü4 Êññ;šu0 s_º]6òâE””X°°0€³³† é gg3XZÐç àpª°aÃ?¸z5 ŽÀ† ^ÐÕÕ`:¬‚]»|±ÿÝ&G¼îõB ”È¢EÇáïWïòœÿF`èbòd'xz:`èPóN}-íòå§QVÆÅٳ˘EᥦÀ×7×®…#22 JJ,BÄ I%%45Ù ùºÙ'ÇÝ›…?›Âb±°jÕXlØàEݯÉËã 88IûׯG´ø¹^^pìØB饠Ο„/¾8@t‚^S#„™YwL™â//G88ô¦„ ªóààð?|þù8,[6Šép:”¼<üü¢qõj8=z¡@I‰…ÚZ!ìÓ¦‘†É’%§àëÛò>oÒ¤øõ×ùtA#RS ÄÅDïßOBqq%ºvÕˆ–âÙR6nü¡¡Éõç**ÊPRbaÇŽ÷1gŽ ƒ¯ ãÈË+CDDºxGDDJJ*¡¢¢#ñå)˜`ñâHO/~« e°XÀêÕãðÙgcè(ºvRZZõªþF–ø2•/ P[+„®®Æ«½Å#8.¿|~Ävmm»aíÚ!ÐÒ¢—†¾éõó+¡ >>ÁÁ‰¸? ¤ ºZ«±Âµ,°X“& Àž=³Å£2éñ¾õΜ9ƒ¹sçŠÿOK+|­Àh:¢¢2QUÅ‹‰—[)++¡GlÛö><=÷îÝ“qôÔëûSu511YˆŽÎFLL"#3Ä…F[³þè+ÒEÇ ÈÜÓF¿B°·ï\…—bbbÞºíÚµx{Ÿƒ@PS/‘ˆFkܺƒ÷ÞÛÈÈLðx5:Ô|0ýúaà@SZ%¾ x¼x{Ÿ…¯o$vì˜Ñâ‚’ÿý·Œ"ë’’8àpø Å“'Á¸?l¶*ttÔ¡¡¡uuU©Œ*RUUíÐÎ 00JJ,88tE—.ìV·ÓNÚг§Md4ôiÓê}i->¿ññ$'aÒ¤>`³;nq¸³gÏâÒ¥KÞ¯¤ÄÂáÃIl£¬Œ .W€êj>Ê˹àñ¨ªâ#"",–>ìíM¥ºB{óüJI‰;;cØÙcÙ²Q¨©âر@lÙrµ‘nÞŒÆÓ§©8rd!Þy§¯ø^z¼o™Y³f½u›™Yw˜™u×Ï©­âŸžbÍšsÛª­"?¿ K–œ„««¶m{н{÷·¾¤¤ãÍýICC ï¼Ó·Þ>!ÔâߟŠG„6¦±õ'­ãKgÖÔñ†’žF“=zôhÏ8äJu5›6]Àùó$V…çpª¡¯¯;f`ìX;èëkµs¤Saa-:Žää|œ9³®®Ö-ncæÌ™2ˆ¬ó9{¶ BBÎÀÙÙL&íÏœ9³Ã¯+i½¼ÎpP L —‘5SgØw¤M ´y?ÒÕUo0‘Û½»¨N¿~sv“¶PQQB\\6”••$NY-Ô¢  Ó§ïǺužèÖMtnF÷éSVV‡S-®ë$IÝ9rhh2ÜÜv`ÀüöÛüNý9‚iªªÊ(+ã¶jýéëOÔ)ïÑýª¤q¼¡š‡^óð†ØØlxxìÆ?ÿ< yæUUe˜›÷ÀÌ™ƒi"CJrñî»?£¨¨W¯~ÞªDEQЧ¬Œ‹gÏÒ0j”-Ó¡PÕŽjkE#]%%2^lm-ÁîÝ7pð`”•éXY‰ˆHorŠg@t.¬ªª,¾D(""Ë–CJJ¾¬C¤$híúc³Ípøp]” •ª^!„àüù0üô“?!âjÚ’µðõÂ×_¿Ûv| X¶ìlmqâÄÇ4ADQÈýûI ÜÜh“¢:“°°4p8ÕÞ¯¤Ä‚’’R½L|~ RSËa`°7oFc„þíj§rñâ3ñßjjÊ âoù•”X00Ð…¹¹¬¬ `fÖ¦¦Ý`fÖqpt´‡¡!†I­]vv}°gÏiXXÐõG)šÌP\\‰O?½ ‡×âç¾x‘´´B˜™u—AdÇÉ“!ø¿ÿ»ˆéÓ±{÷,Zž¢:™ÀÀx8:š kWšÄ¤¨ÎäÎX€®®´´Ô ¥Å†††*´µÕ¡§§ Ñmu…¦55Õ ££GãĉƒÐÔ\¯l6=o–ŠŠÿ·ÝÝm`aasóâÚ&&úPUm¸¾NnnB{…I5¢-ëÉ…Ž)JÞtúžŸÇ«ÁÉ“!èÝ[B! ööÆ(-­FU<žL‡§p**xøðã¸};gÎ,í´‰ŒË—/ãñãÇ2Ù*++±}ûv©¶É”äädœ:uJ*meeeaçÎˆŽŽ–J{MéHëAVîÝK€ŽŽ: ¢SZJ›4÷YËÈÈ@AAAƒ÷u¤ýHÞú³ºãЛ:Ò{´Ï¾P^^Ž;w¾õ·´ÐuÒòv¤±^¾|‰#GŽ´© €®¿öÐXö&I}gG[O]›“Çÿ¿dɤ¦¦¶µÙ·Èª]ªý”cÆŒ_Ÿ‹WuêK|||úÖ~$ åååøæ›o¤Ú&SâããqèÐ!©´õÑG!<<**í30­#­Y¹w/#FX5z /ÕzÒÜwd©¨¨...¸|ùrƒ÷w¤ýHÞú³ºãЛ:Ò{´Ï¾Àápðí·ß¾õ·´ÐuÒòv¤±RSS±oß¾6µÐõ×ëÏÞ$©ïìhë©£ks2ÃÌÌ ÿûñóó‡Ãik³o‘U»TûJK+ÄÔ©ûP^ÎÅåËŸÃÞ¾Ó!É…7÷#JvÒÓÓáíí [[zIƒ<jš ww¦C¡ôñÇ£°°é0íÏ(Š¢ZŽöG›“yyy˜t颉+WVÃÔ´Ó!5º}ÁÃÃgΜ……´´´°páBÔÖŠ¦µºsçìíí¡¦¦†AƒáéÓ§â6Û6àüùó033ƒ††¦M›&Nн¾5µì«W¯ÂšššX´h¾üòKøúú6ú;SSShiiaÑ¢E ›žvX …B¬^½ººº000ÀŽ;ü÷~ýôÓO066F=pâÄ ¬[·=zô€‘‘Ο?X´hÒÓÓñÑGÁ××iii=zt½åÌž==jÓ6ÐŽ²¤íÉ“TTVòh½ ’ƾ›7oF=Àf³1zôhdff6ë¾ÆúÙ:¿þú+!6lX“¯¥£ìG²èÏæÌ™ƒK—. ¡vrrÂ… 9998p JJJ=5¦£¼ç€ôö…ÆÎW%‘tnЙ'ÒZ'µó¦¶®BÖ®] oooBHîÿB×_ýõ×–s1IýYcÇž7ûÎÆt¤õÔ¡‘7äææ’€€€7onTjj*ÑÒÒ"„RRRBŒŒŒH@@áóù¤¢¢‚‘.—KîÞ½KtuuÉýû÷IFFÑÐÐ Ó§O'¡¡¡¤°°°ÙlrñâEÂårI`` QRR"ùùùoµ›››KtttÈÉ“' —Ë%—.]"ššš$>>þ­vy<^³^G@@ÉÍÍmöë¦ZæáÃbeµÌ{ˆTTpe¶œ3gÎ6ëIÚ>srrˆššYºt)áñxäÅ‹¤K—.äÖ­[$##ƒèèè‹/’ªª*²uëVbjjJ„B¡Äm3<<œ°Ùlòï¿ÿ’êêj²wï^€ìÝ»·Þ~$iÙ)))D[[›\¹r…TWW“íÛ·eeeòǼõúrrrq;ÉÉÉDOOøûûËäýl©¹sç’¹sç6ë±W¯^%,‹|ñŤ²²’===âããCrrrˆ’’ùßÿþG„B!ùí·ß²sçN" É?ü@,-- !„”––’¾}û???ÂårI\\éÖ­[½e 0€Ü¾}»ÕÛÀ›¤±Zú~)’mÛ®’aö2†B@Μ9Ó¬ÇJkßñóó#ÆÆÆ$))‰”••‘)S¦åË—7yŸ¤~–B¢¢¢Hß¾}IAAqww'GmðuÈ{Kbcc›õXYõgëÖ­# .¿V6›M,X@!äÏ?ÿ$ xz“´ú.Y_µt}Jë}/++kô|5##ƒ°ÙlB©÷wSç­íy¿F¦ËjIç!iû¬ëȲ³³Å÷¹¹¹²gÏ2yòdñí|>Ÿìܹ“TVVJÜ6ׯ_OæÌ™Sï>‡“-{ëÖ­ä½÷Þß. ‰‘‘‘ÄdF~~¾ø¶áÇ“‹/6ëý!D¾’]»v%|>_|Û¦M›ÈôéÓů³îÄ"11‘¨¨¨@@!äÙ³gÄÐÐPü< òàÁBHÓÐÖlo’Æz ¤ã&3ÆßC¾úʇé0JKO6¥±ï\ºt‰“èèhBˆ(IQRRÒä}’úÙªª*âàà@nݺE!ÍJfÈkÖÒd†,ú3bbbB!déÒ¥dåÊ•ÄÔÔ”BÈâÅ‹É×_-ñ8ô&iõ]ò”ÌÆû.é|µ±d†¤sƒö>žÈ[2CëDR;ÒXÄÎÎŽ¬X±‚tïÞ]!’û¿7IcýÉ[2C믵çb’ú3IÇBê÷o’÷ã UÏ™ÎÝ“––†øøx˜™™‰Ο?ÒÒR€’’Œl6aaa˜0a,,,0}úôF‡ódffÂÚº~ÑHddd¼Õ.Ŭ»wãðá‡Gáååˆ_ýP® ü5µ}€‘‘‘øo‹%~ÞëÛŸªª*6lØMMM‰ÛfVVìííëÝggg×h|ÍY6‹Å‚¹¹y£m(++£Goµ£ˆ,,, ªª*þ¿ÿþÈÉÉÿ¯¥%š"™ÅbÍf‹‹:µõ5·thHGZÒTXX˜˜,z‰‰ŒIcßy÷Ýw1cÆ >¦¦¦øüóÏQRRÒä}’úÙ­[·ÂØØ ‡ÃArr2¢¢¢|i?’Eæêê ‡ƒÄÄDbõêÕ(//GZZüýý1iÒ¤‡:Ò{Hç}oÉùjIçýx"­}¡©v€¶­‡ØØXdgg]î[GRÿ׺þZwnÖй˜¤þ¬9çø’t´õÔ‘É4™¡««‹‘#G"--­ÞÏÁƒÔß0.]º„M›6aóæÍHLLÄ“'OíÈuuuß*VTT==½·Ú¥˜ãç…?>Ž÷Þ{?ÿúè#ñ·”’î“ÔÏ~ÿý÷xúô©øÇÙÙ›7oƱcÇtìýHýxyyá矆››`̘1Ø»w/&Nœ%%¥&Cù=¤ó¾·ä|µŽ¤sƒÎ~<‘־МvÚ²´´´ ¢¢‚ ÀÖÖ7n ¹ÿèúkŽÖž‹IêÏZzŽßÑ×SG&õO˜X¹r%ÂÂÂ`ee…-[¶ÀÅ۶¶Fÿþý1{öì·ž7uêTÄÅÅÁÝÝãÆÃ–-[`nn޵k×¾Õ®““Ö®] gggŒ?ööö˜1c&Nœ(í—Cµ‚Ï|öÙX¼x$¶n}OnGÊ´dû|ÝèÑ£1wî\ØÛÛÃÃÃãÇÇîÝ»¡­­-qÛœ:u*Æ;;;Œ=“'OnqÎËË “'O†½½=Ƈµk×bÀ€PSSx{{‹«Ùw4...øâ‹/àîîkkk˜ššbéÒ¥mj³oß¾:t( „©S§bíÚµ1bD“Ï“´ {=H !AA ô“v }gÁ‚ÈÈÈ€££#<<<0kÖ,lÙ²¥ÉûZÛÏ{?’Ežžžàp8õ’“&M€&Cù=¤ó¾7u¾ÚIçýx"­}¡9í´e=¼îСC8}ú4‹åËG㫯&1N³5wû|“••¬¬¾Ö_Ò¶éàà‡z·½¹5&33cÆŒÁ?ÿü;;;9r555pvvnqüŠH]]ý­¹ÈÛJEE®®®­z®¤m€’, úúZppèÍt(‚4ö6›‘#G¶ø> õýlG&‹þ¬¹:uÒxß%¯J"éÜ 3O¤µ/4·i¯‡¦ú¿ŽNë¯-çb’ú3zìéøÚœÌ ( IÂòå¿cî\|ýµâ$2ÍÀqòäIìØ±ÅÅŰ´´Ä7êU’¦(E˜77()ÉçehEQEQ”|£É ªÍž={‰?>//GlÛö¾ÜÖÈè(¦M›†iÓ¦1Eµ—+À£G/°k×L¦C¡(Š¢(Š¢”üM1A)”¸¸ÌŸÇ[á—_æÒoY)ŠjRhh2øüŒeÃt(EQEQ”‚¢É ªÕÒÒ ñÁÑ¿/=ºP.§_¥(Jþ& _?#ê1 EQEQ¥ è§OªUŠŠ*0wîa˜˜èãôé%PUUf:$Š¢D``ÜÝé¨ Š¢(Š¢(ªõh2ƒj1 K—žœ>½jÌDQ”ÂÈÎ.Ebb.ÜÝm™…¢(Š¢(ŠR`4™AµØÚµç“…3g–¢[7m¦Ã¡(JÆC]]C‡š3 Õ ©©¡¤¤’é0(Š1JJšHK+g: Š¢(© ³™P-ràÀ]\¾ügÎ,Cß¾=˜‡¢(˜ ¨«Óé„©ö×µëØÛo†.ÜÝm0}º3œM¡££ÎthÕ.tuGàÀx1˜¿ IDAT=ú%ììzaâÄþ1 66=¡¥Åf:<Š¢¨¡É ªÙ|}#±cÇuìØ1®®VL‡CQ”‚©­"((Ÿ>ŽéP¨Nª¸ø_,_þ3üýãàãó>>OÀbFF]1x°FŒ°‚»» LLô™•¢d‚à Č–&DTT&ž? `±cã®prê[[# ÒC†˜ƒÍ¦(Š’_öP111í%çž?OǪUg°l™;>úh8Óá4iÖ¬YŒ-›@ P†šZ­TÚãr•ÁfׂÅÀ¬·>>>2mÿìÙ³Þ_\¬mm¾TÞK.Wêê­k‡jkÒæ8ZËÇÇsçÎelùÒ‘ÒÒ*ZüS æÍ›‡K—.É|9„°Àã)C]½FêmWW«@CCºí«ƒÍ®…–ÖÛýJ]¶oß<@FF1Μyˆ+Wž#=½—/?Ç•+á „@KK ffÝááa3Þ……A“ËÎË˃P(”ê롚Æäñ^ÂÇèÑF˜;w.‚Z„„$áï¿Ãß?YY%(/çâþýdüø£Øl lŽ#,1l˜4mVÁ÷¸¸8¶Ã«¡d¡½Ž/™¬ÏŸ©ÿ°!õÎÎ9233™Š‡Q½{÷†ž*ðM¥¥U?~ììzáøñEr=kHHöíÛÇh ùùZHIÑÅàÁyPQiÛ‰mm­?6„‰I9z÷®R„-÷÷ßK½Í}ûö!$$¤ÁûÊËU‘–¦‡ ‹RµíwOÏžÂʪÝ»WµøùÏŸ÷€¾>¦¦emŠ£­\]]±zõjFch‹½{oá?BñìÙ·L‡¢ÐÚóÃ[zº.²³µ0xp.”•¥—Ì+.VG\œ> (€¶vã Í–Ší†âbuèësÑ»w9tuùo=¦¡þ¬¼œ‹§OÓ“¨¨tDGg#'§\®(ÙÂf«ÀÒÒcÇÚÂÍͽë]š’™™ ‡#µ×ÑÑÈâüJŽ÷ŠjõêÕpuu­w[m­¤àÆHøúF!/CC]èéi¢¸¸……åPWWÅ;ï˜aèP n‰AƒLß¹A¿ •=Y~^¡ÉAé’Åù3UÏÓ·’õ:B>þørqóæZz]qªªø1b;&Nì;fH¥Í}ûîàçŸoáîÝ/;|’ŒŒbìØq—/?Ç A}ðí·ÓáìlÚæv—-;èè,¬‡šZˇÌþïqÿ~üý×·9–ÎlÚ´ýèÛ·;öîÃt(T3„…¥aÚ´ýøþûiX´h¤TÛ fÏþ yye¸ys­ÔfÅ"„Àß?ûöÝÆ“'©pq±ÀªU=ºu³ç$'çãÏ? /^¢¶¶.AÍ‚‘‘œÍàädGÇÞpt4®®†T^E1I($xò$¾¾‘ðõDVV Œ»ÀÖÖ, ‰‰¹ÈÈ(†šš  2Űa6ÌÎÎft†;Š¢ÚMfP’<Œo¿½Œ+W>Ç€&L‡#÷~üÑGŽ"4t“ÔfzjáåµZZl\¼¸,&®7‘±²²jüüó-?Œ^½ºâÿ›OO©´}ÿ~2fÎü¿ÿþ <<ìZÕFHHfÍú ¡¡›`fÖ]*qu6ee\ôï¿ û÷ÏÇÔ©™‡jBEãÆí†¥¥~ÿý™ô;ÙÙ¥;v7¦M(µäïë>LÁþýwþý{aõêqðòr„’Rë^ WƒÐÐd\¹Ž€€8äç—AEEÊÊJàñD£KzöÔƒMOX[÷„µµ!llzÂÊÊzzšÒ|iÕn!ˆˆÈÀõ둸v-/_¡W¯®ps³A:ÈË+ãG)HK+„ªª2œœúÀÅE”Ü<¸/-*JQ”,ÑdÕ¸¨¨LLžü 6mzŸ|âÎt8r/7—ƒ#¶cíÚ øôÓ1Rm;&& ^^{ñí·Ó°h‘kÓOPA-ŽÆ/¿Ü†²2 ëÖybÞ<—f]“Û55BŒ¿½{wÅï¿Ò¦8¿·÷8,[6J*±u67nDá“ON"*j ºvÕb:ª «WŸA``îÜù=zèÈl9W®<ÇŠàÔ©Å7Î^&ˈŽÎ¾}·á뉾}{`åʱxï=ç6÷3/^àÎXÄáÁƒµ02ÒC×®Zàók“SŠŠ Q’ÃÊÊð­DMrPŠ&:: ¾¾‘¸~=IIy00ÐÁĉ>Ü |~ ?~‡Sœœ%8:šÀÅÅ..xç3téB·yŠ¢¤†&3¨†UTð0a°´4À©S‹;ähi[³æBC“ô•LªïÚå‹cÇ‚àï¿^á+íBpùòsìÜé‹üü2,]êŽO?#õ!ÚÇaË–«XßæKt>ûìäærðï¿+¥]ç²q£"#3á뻆éP¨&´G‚áukÖœƒ¿nßþ²Kœ¤¤äãÀ»¸p! ºX¾|æÎu‘ʰøÊJBB’‡»wã•U‚nÝ´1xp_XZ@CƒŒŒ"$&æ"))åå\€ÌÍ Ð§>LLº¡O}˜švƒ‰‰>zöÔ£Ç^J®%%åáÚµ\»¸¸lèëkaâDxy9ÂÆÆaa©xø0¤ 11`iigg3 ÒÎÎf°´4 Û9EQ­E“TÃV®ü¤àÎuô[ÔfˆŠÊ„§çOøí·1eŠl†Ðóù5˜0áGô쩇³g—)ìÁ?44Û·_Cxx:fÎŒuë&¢W¯®R_NQQFŒØŽ>ޝ¿~·Íí]½ŽO?ý‘‘ßÓ}¢\\¶búôAذÁ‹éP( d}éGCê.i±°0ÀÈæ’–×ee•àС{8{ö!´´Ô°x±- ]]éÕ„Š‹ËA@@üýãðøñ 89õ‡‡ÆŽµC—.HI)@||ÒÓ‹‘ž^ˆŒŒ¼|YOTtTMM&&úèÓG}út{õw·W‰}ÚQr%-­ׯGàúõHDDd@GG&ôǤIŽpw·Eu5OŸ¦!,, Ož¤"<<UU|t颉wÞ1ƒ³³î '§>ÐÔ¤u7(ŠjšÌ Þvùòs¬\ù'þý÷3 bÎt8 aÆŒ_ÁãÕàÊ•Õ2= {‰iÓöá‡fbΙ-Gs±k—/n܈‚›› 6ožŒþý{ÉlyëÖýÿ8%•kvË˹ppø~øafÍ,…;ÔÔŒ±/®ÂС´O‘WµµBÌž}……¸qcM»ò“e±ÑÆVàøñ œ< B€ F`éÒQèÞ]:õŽê”•qœ€»wãàï‹üürtï® 77ŒÓîî6õj,åå•!=½ÅxùRô;=½ééEÈÉላª««ÂÐP††zèÙSºèÙSïµß:èÙ³‹T“4Õ™™%âÄÆ³giÐÔTØ1v˜4ÉcÇÚASS 55BÄÆfáéÓ4<}*Jpde•@EE ýúÃÙÙÎÎfxç¾05íÆôK¢(J>ÑdU_qq%ÜÝwbÞ<lÜ8‰épÂÍ›Ñøøã¸re5œÍd¾¼ï¾»Œsç!0p å*áüürüüóMüùçXYbóæ)­žY ¹ÂÂ^bÊ”_pèÐG˜<ÙIjíÎ{ššj8vl‘ÔÚì Nž ÁÎ×½UjõP(é;pà.vï¾_ß5°·—]¢±1{öøá·ßüáç÷¬­{¶ÛrË˹8}ú>޹‡Š æÌŠ+Æ woé#„ &&qNÄ£G/PS#„½½1Fî‡Ñ£mñÎ;}¡¢ÒðèA-²²J™Y‚Ü\òóË^û]&þŸËýoº[uuÕzIŽnÝ´¡¯¯‰®]µ^ýhB__ úúÚèÚU“l¤¤*/_ß(ܸ‰R ªªŒ±cíàåå»z³äåærðäIªxGTT&‚ZèÀÙY4zcÀ€>ptìMg×£(  É êM+VüŽØØlܾ½®USXv655Bxxì†MO>¼ ]–Éå 0f̰´4ÀéÓKäör“êj>Ž Äw¡­ÍƆ ^˜5kH«gh®ÚZ!&Mú::løø|&Õ¶OŸ¾­[¯":z«Lê¢tT ƒ’ 'O.f:ª‘‘˜<ùlØà%õÆÍU[+Ä´iûÁå pýºw»ƒ¸\Î{„ƒý‘—W†éÓá³ÏÆÂÊÊPfˬ«µ”€€€x¤¥BK‹ WW+ŒÝ£FÙ OŸ–+ÍáT!/¯ìµòòÊŸ_Ž¢¢rW¡¤¤%%•âËZꨩ© kW­z nÝ´ §§ ]]uèèh@GGÚÚìW¿Õ¡££== hk«7šˆ¡¨Â øùEáúõ„†&ƒÅbÁÍÍ“& Àøñöo]:Åå ‘°0QrãÙ³täåq ¤Ä‚¹y89õÁ€&prê{û^PWWeè•QŚ̠þs÷n.<†K—VµËƒŽàܹ‡Ø¸ñÜ»·¡Í&[âñãxÿý_±uë{X°`D»-·9jj„øë¯GسÇ<¬\9Ë–j·“ŒÓ§ïã›o.âÎ/¥þ!$7—gçïpúô’VOóÚÙµ°³Û„Í›'ËݶJ‰TWó1aÂ04ÔÅ_}*ó„£$/_aܸݘ7oþïÿ¦2ƒ@P‹‹Ÿá×_ï"%%':`Õ*v™ž<-­q JDHH*+y03ëŽÑ£ûa̘~6ÌBêõªªø¯U(*ª'9^Ox””ˆþ./碲’‡òr.ªªø ¶§¡¡mmöI6TU•¡««55hh¨AKK jj*ÐÕÕ€ªª245Õ ©É†šš2ôôêncC]]êê*`±XR/M1‡Ã©ÂÍ›1¸~=  …pq±„§§&Nì#£. >//ƒðð DDd <<()©„ŠŠllŒÄÉ '§>°±éIGRTÇF“”Ÿ_ƒÑ£À¨Q6ضí}¦ÃQ\®#FlÇøñöíV(ïu»vùâèÑ@ܺµææí—Hi !~~ÑØ¹ó:ÒÒ 1ož Ö¬™ ÓißTWôsþüaؼy²L–áéùìí{aÏžÙ2i¿£yð ï¿¡¡›`fÖép¨lØàƒ«WÃáï¿={2éÚ_=Æ_œÇ_-‡««5cq…~~QØ¿ÿ""2àînƒU«<0|¸e»,_ ¨Å£G/”€{÷â“ % jŽQ£l1z´-lmW[+DE¥¥ÕâGy9\TTðÀáT½º.W€Š .¸\¸\*+yàókP^ÎWƒêjªªxj›µlMM5¨ªª@Y™%¾Ü@K‹ eqbtu5ê%çTT”ÞºŒF]]lvýd»¶6û­&ººõÞkee´µë_êÀf«H¬5#Jä4دKä4EYY ::?NKK1FÊTTðàï _ßHøûÇ¡²’''xy9bâDXXH|~zz""2^ý¤#22åå\¨©©ÀÞÞNN}ààÐöö½`kkDÕqÐd%²oß=ˆû÷¿¦ß|4Ó¯¿ÞÅÞ½·ðàÁævýÀ^G ¨ÅäÉ¿@I‰…Ë—W3zp~ø0Û¶]ųgé˜<Ù 7z1òÁÕÛû,BB’¸Qf×}ïÝ{ ¿ÿ~aaß2ú ¶¢Ø±ã:®^ Ghè&¦C¡pëV4.<Ž#GâÝw0ŽØÒ¥§ðôiüý×£KM¦ÃA``öᅢÐÐd8;›aõjxxصk"!?¿÷îÅ#(( (*ª€Ž¸Ö†««5ôõ{†BÊʪÁç×¢ªŠª*>‚ðx5àr „€Ã©TW Àç׈“*€èCqM55µ¨¬ä‰Û­¨à‰ §Ö)-­ª÷¿¨^½ÛøüTW×RUÅŸ_?éR^^ ¡PqN§ë?oÒÔTƒšÚÛ·kh¨5xÙ›­"u)A£úêñªâÇ×%ž€ÿ’DJJJÐÑQ'žêž«©É! ¹¯F'% ¤¤ ÖÖ=_%6úÃѱéRB!Á‹â‘ááéˆÍFu5ªªÊ°²2Dÿþ½`o/úéß¿=÷¥(ÅD“”¨rúðáÛ°uët…›!ƒ)¥¥U6l/‰uë&2Grr>&Lø˗—_z¶ûòr±}û5ܾWW+lÚ4¹]†b7äñã˜>ý^ Óeqq9;ö\»æAƒLe¶œŽbâÄŸ0p`FF/Q’åç—cìØàáa‡½{ç0N=¥¥UððØMqôèB¦Ã Kþ}wpçN,lm°råXL™âeåöýö[($ˆŒÌ@PP"îÝ‹ÇÓ§© M0r¤5ÜÜl0x°­}Å  UU¼&W[KP^Îmòqu‰ž¦”—ó  ߺ]”èy{ä‹(aÔØí5oÝ.]óßíB¡PMPœDjëý]wY'Ðárkš="‡Åb%t颅ž=uadÔåµú-ÐÕý­¥¥]]uèëk½ªÿ¢== ¤¦"&& ÑÑYˆ‰ÉB\\6òó˽{w…]¯×’Æ­ªWCQT»¢É X¿þoDFfâÆ5r[LRÞlÙr>>Opÿþ&Æ+jŸ<‚o¾¹Ø®µN²²J°g||žÀÎÎ_}õ®Ìg(‘¤¦Fˆ‰D:8wn¹Ì—çâ²S¦8áë¯ß•ù²YQQ øÇŒ ú3õBæÏ?‚ÔÔBܺµÚÚò7ƒÅýûɘ=û7ìÞ=KîíqqÙ8pà.®\ ‡‰‰>>ýt fÍÌXò ¬Œ‹û÷“Ä£6ÒÒ ¡¡¡s¸¹ÙÀÍͶ¶=é1ž’[åå\…B”–V‹$uI.W€ª*>ââ²–†¸¸W‚ÍMO¬££55eTVòÅ—9½™øa±X¯fíù/Áѵ«45ÕÀå P^^¢¢J¤§!+«B!®®ìíakk#ØÚö„MOèé1?ZŒ¢(4™A¥¤äcôè]8sfFŽdîÚdE’]Š#¶aóæÉX¼Øép@Á‡EJJ>îÜùR¦Óêq8UØ·ïNž .6lðÂÔ©¿ÜâèÑ@lÛv ëÛ¥ë7ß\D``7Ê|YŠìÒ¥gøü󳈎ÞÊxÒªïØ± |ÿýe\º´Z®GmÝz§OßÇíÛë䲿JZZ!~ûÍÿý]»jaùòQ˜?ãÓ›fd#((ÁÁ‰NBII% tàê*µáîn­S{STcRRòqãF|}#‘--5Œ#šòu̘~ÐÔTCqq%Š‹+PRR…ââJU ¨¨ÅÅuEnE¿ Ê‘Ÿ_>ÿ¿'uÓ³X,ðùµ(-­'šòØÀ@ýúÁÎÎÖÖ=akk++C©ç¥(ªI4™ÑÙ-_þ;JK«pþ¼ì¿Íî(Ö¬9‡‡Sô•Ü‘ÊÏ/ǘ1»0a‚~üQú…)¹\Nœƾ}w ¢¢oïñX°`„\¼þ¼¼2¸¹íÀâÅnX¿¾}.µ¹?3gþJ‹Z6aÍšsHM-Ä¥K«˜…zM||<=ªUøâ‹ L‡#‘@P /¯½`³UpéÒj¹-f˜—ÇÁ¡C÷ð矠ªªŒÅ‹Ý°xñH¹¨÷!DEeŠ“Ož¤‚Ç«µuO¸¹‰’ÆY0ž€¡¨ÖÊÉ)…Ÿ_n܈ÂÇ)PVVÂÈ‘ÖðôtÀ„ Í®%SXXœœRää”"3³¹¹ääp™YüêïRq½UUQ±YOT·…ÅbÁȨ ìíѯŸlm`iiKK:e,EÉMftf))ùpwß _ß5Í*¨D‰>Œ·ûöÍÃô郘§ž7¢°xñ œ8ñ1&NtJ›µµBøø<Áž=~àpª±d‰>ýtŒ\}ËþÙg ,ì%ÖK¬"/M55B8:þ«WÃòå£Úe™ŠhРoñÑGÃáí=žéP¨Wøüxzî…¦¦.]ZÕîµZ#))'þ„+F3Z£¨9JK«püxކ@P‹?†eËFÉÕ(ˆêj¾x–”ÀÀDÄÇç@EE ÎÎfâzNN& ±mPÔ›JJ*qëV n܈B``Óá4Û©S÷ñÍ7pùòç8°Óá4©²’‡?þx€Ã‡ï¡¤¤³gÁŠ£år$WAAù«ËQ˜€Ü\tu5àêj…‘#­áîn#—qSTSªªø¸{7~~Q¸{7ee\8:Ц|õôt€••¡Ô–Åç×àÅ‹¤¤ä#%¥ññ9xöì%22ŠA––hV—êj>x<Ñå,ݺi¿JpÀÚZôÛÜܽzu‘ËsLŠ’C4™ÑYee•`øðmøûïO1t¨9Óá(„èè,L˜ð#NžüãÇËg1Ê Æß}œ;·¼Uµ,ž>MÅÖ­×ðäI*¼¼ñÕW“`n.û:-US#Äøñ{лwWüþû'í¾ü«WÃñé§ <ü;të¦ÝîË—wGŽâçŸo!*j ý†WN„…¥aÚ´ýعsæÍÆt8-BÁBn.·n­›­³tðù5øë¯Ç8x0™™Å˜<Ù +Wz _?#¦CkTbb.‚ƒ”ˆÐÐdTVò`b¢ÿª¨5\]­Ðµ«bOKu>A-BB’pãF$nÞŒFAA9,, àéé//G `"“BYY5ž?Odzg/žŽçÏ_¢°°ÊÊJ04Ô_Š–›[†ââ ¢©p-,zÀÜÜ––¢ Ñ­ËAQõÐdFgµeË<~üW¯z3ŠÂX°à Êqýº·\gÌ#"20eÊ/X·n"V­òhöós±s§/üü¢0|¸%¾úê]¹þFýС{صë:60ò­ae%öö›ñó0kÖàv_¾¼›?ÿ45ÕpäÈB¦C¡ ª{ãᱦ¦ÝðçŸKåºkLVV ÆŒùóæ¹à›o¦2N‹ÔÔqõj8¸ƒøø\xxØaõêqrÝÇ¢€Ïž½DPP‚‚žBzÃÍÍ#GZcðྠ“\¢(@TGæÉ“Tqôô"uÁĉðôt€‹‹…Lëó¤§áùót„…¥áþý$ÄÅå€ÍVÁÀ}àà`##=WŠGy¤¦ˆ§¯56îò*±ÑVV†07%9èhª“¢ÉŒÎˆËÀÉéÿ°eËtÌœI?„5Çóçé˜4i/þüs)ÆŒéÇt8M:tè¶o¿Š‹W7y²œ“SŠ={nÂÇç1¬¬ ñõד1v¬|¿Æ¼<ÜÜvbÉ7|ùeûýlÈüùG ¦¦‚'>f,yÄç×ÀÖöklÙ2]áFtTß|s>>Oáïÿ%ŒŒº0N«;÷ë×ûàÂ…•<¸/Óá´!wîÄbß¾Û {‰áÃ-±j•ÜÝm˜­Yꦀ ÕÛHM-€†††5Ï’bkkD?TQ %::ëUb#qq9èÚU ãÇÛÃÓÓîî¶2OÖå啽š!-wïÆ¡¼œ‹L0i’#¦MCC=df#))))u—²ä#99……ÿæ07ï ‹ú£9ÌÍ{Ðâ¾TGF“Ñ™3°s§/ž=ûV.f£PsçFEW®¬f:”f©›®5))·o¯ƒ®®Æ[)+«ÆþýwqüxºuÓÆúõžxÿýwŸfµ9êŠ~Þ»·Ñ*áüŠï¾»Œèè­´ZùkBB1kÖA<~ü z÷n[±5ªíùD4ÍjC£6äÓE?2iÒ^ôëgŒ={f3ŠÜ7n† 1ǶmŠÿASÑmÜ胫W#°Aæ'Þíéߟbõê³øûïO1b„%ÓáHEjj~ýÕ>>O ¯¯eËFaþüaÐÖVÌÿÕÕ|<~œúj ØÄŽ9¬5œœúÐÁ”Bàpªpû¶hf”€€xðx d†‰ûÃËËQæµ» +ðûï÷qêTÊ˹˜={¼½Ç·jäSI‰¨GbbÝô²yHJÊCff jk…PUUFŸ>Ý`mmKKCØØô„µuOX[*Ì_T§A“ÍÎ×q÷nnß^Çt( !443füŠ VÂÅÅ‚épZe×._<è#£®ÈÊ*Æ ÅÚµånšÕæ`ºègC~ùå6ŽBxø÷ 5<\V Êáäôt´Š JÀœ9‡qðà‡˜2e ÓáHÝâÅ'“;w¾TØü ÉÍåàðá{8sæTT”±h‘+/vƒ¾¾bÏ RPPŽ$q1ÑœœRèêªcøp+qrÀé0)ªI\®÷îÅÃÏ/ ·oÇ¢¤¤ýúaâDLœè‡Þ2[6WŸ'øå—Û(*ªÀÒ¥îRûbŠÏ¯y5’#ÉÉ¢dGÝß|~ ”••`jÚ ýúÃÚÚ66F°±é sót$ÅšÌèl†Ý‚ FàÓOÇ0ŠB˜6m?ÔÕUqþür¦Ci•°°4|ÿýLŸ_üü¢] }qbcȾ2}$Ôâøñ`ìßÊÊ,lß>ï¾;@êËD¯ñåËBÄÇç !!WüSW—CUUùÕ¥*=akÛ66F°³3FŸ>ú´0%k4™Ñ™ÄÆfÃÃc7‚‚¾‚¥%ýö£)AA øàƒC¸zÕ[î§Ï{ÓëÓ¬f%KFá‹/ÎaòäøáÅ<é_µê žÄ¤IŽØ±cºu“\OCZ‚Z$'ç#))qq¢DG||ÒÓ‹ èè¨ÃÎÎöö½Ð¯Ÿú÷ï [[#:•3%M4™Ñ™ìÝ{ /†!(ˆåkŽY³~‹ÅÂ_­`:”fËÍå`÷n¿§Y½q# ‹ŸÀ¡C)Üó°°—˜2å=º^^ŽL‡ó–o¿½ÿ¸N¿oB0hзX´h$V¯ö`:œN+$$³g±c‹àééÀt82·|ùi<žÿõúî@P‹ ÂðÛoþHIÉÇøñý±råX ¤XÉö樬äááÃN@pp"âãs¡¢¢„AƒLÅ#74…Š ­·Aɯ””üWS¾Fáùóthjªa̘~¯fFé'ÕšeÁÁ‰X·î/BpâÄbôïÏÜ(Üêj>ââr“…ØØlÄÄd#..••<¨¨(ÁÜÜvvÆèß¿ú÷ï[[c: ‹j-šÌèLÞ}÷g Òß|3•éPä^xx:¼¼ö*Ì &ÍfuÓ¦áãó7n|¡0×&B0yò/ÐÐP…ÏgL‡Ó ºÚ*ÁÁ_)Ìû* qq9;öøú®“S¦Ãé”x¼Œ½ ýúáøñ™§]”ÃÍm'>ø`þïÿ:þñM($¸u+Üųg/1b„%V®ôè°#S€úõ6‚ƒ‘] mm6† ³„››è’›Ž3R…êxòò8¸q#7nü73ʈVðôtÀøñý¥RnjéŠàÑ£8p`¾\%³…B‚—/ “˜˜,ÄÄd!..YY%88ô†“S8:šÀÉ©zô  ªI4™ÑY”—sag· §N-SO5nÉ’“ÈÎ.…¯ï¦C‘¨¥Ó¬ µ˜:ux<®]󆆆Z;GÜr>>OðÅçqóæZØÙ3Nƒjk…ppøV­òÀŠ£™‡1àÀ»ˆŠÚB‹¡2dçÎë8y2å^Q9ó7þ_ß52-¾'oBB’pàÀ]%ÀÁ¡7V­ò€——c‡ßÿRRòœ„ààÜ¿ŸŒ²²jêŠGm¸¹YÃаólÿ”bápªpçN,üü¢áïO€MáééÐæ™Qjk…ضí*Ž Âáà är4ëëJK«‰èèlDEe <<ii… „Àظ œœú`ÀñoEšj4™ÑYÄ㣎"&ftuÕ™G®%'çcÔ¨8rD>/iDîÖN³š‘QŒ ~Äøñöøùç¹ímëUVò0räxxØÉ}­oï³HK+Â¥K«˜…1s悞ž&úˆéP:¥øøL˜ð#¾ýv-re:œvEÁ{ï@U¾¾k:ÝtŸQQ™Ø¿ÿ|}#ajÚŸ}63gî3 ÔÖ ‘QrãÉ“4ðù5°²2'6† ³„Ž=÷¡ä—+@``üü¢pëV JJ*ak+šÅÓ³õ3£ìÙã‡ýûïàÔ©%=ÚVÊQËVYY5""2ž.þ] ‹3³îpr2Á€}àäd‚þý{CSSþ¿˜£d†&3:‹;®# ·nÑ)Y›²fÍ9„…¥áÞ½rùíV@@<¶m»ŠÄÄ\Ìž=ëÖµ|šÕ;wb±`Á1ìÙ3 sæ¸È(Ò¶Û½ûŽÆýû_·[A«Öº~]Tˆ0<ü{tï.߱ʗ+€Ý&lßþ>>ø`(Óát:B!Á´iûAˆ—/.—}—¬%%åaܸ=øê«IX¶lÓá0âÅ‹üö›?||ž Ûÿ³wßaM]oÀ¿ISAd)‚l¥(ŠŠ"*ÈpÔªµZG]Z­µþܵ­¶îU¬Zwµ` .ì%¢€l²!¹¿?¨ÔÈH¸!y?ÏÃóhrsî›{ï¹9ys†F|ú©3¦Nu”ª¥k?¤´´wî$áúõêÉD££_€ËåÀÎÎNNÕËÀÚÛÊD¢‡´.¡¡Õ+£\º‰´´<èé©×¬ŒÒ»·q£µk֜ǟÞÁ?ÿ| =½Ö½ Rvö+úö]‹M›&`âD¶ÃyKddÖ¬9ë×ãáæfƒåˇ5k6ûõë/ÀÇ'ýµX"—kMM̓“Óz,]: sçd;œ*..‡µõ lÜè%“_惃ã0iÒnÜ¿ÿtuÛ±ŽÌñõ½‰•+Ï àKXZJæp¬–ðóÏس'K[}ã½922 °gOŽ —Ë…··#fÍr–ÉIörs‹póf¿ÃRâñüy.TTл·qMÏ.]:Ò’D¢0 ƒˆˆTøûWO ŸÑè•Q†ÁäÉ{P\\Ó§HÝ„¹©©yxøðîßOFXX2""RQY)@‡jèÕË={ÂÞÞ¶¶z”¼”^”ÌÖÖ+°d‰'¦MëÇv(cÞ¼C˜:ÕŽŽ¦5ýðÃY\¼ø¡¡+$æÆ—––‡ÿÆ™3aèÞ½3–-þVÌM%1aÂN¤§ à«÷†ÅÇg@MMY$“RÕ'..{öáë¯=Þú¶„§g×zWFÉÉ)Â!?añb7LŸ.ÝßÊÊ*ñøq îߊ{÷ª¹¹EPTä£[7}ôìi„^½ª’ÞÛ—4%3dAFFzôX…¿þZ {{C¶Ã‘ååU02ú0x°%V® MͶèÝ{ ¾ùƳg;³au#ô×_ÿÁÁƒ7Ñ¡ƒ¾ýv(FŒ°é¯GYY¯àæözõ2ÆÞ½ÓjÊ>~ü.¾øâO¬];Ÿ|â$²ýÕæÌ™˜?ÿÈÉñ0þ`,Xà‚ÈÈ4Œ³ ¾¾³0dˆµX÷/JGŽ„âûïÏ :zùl‡Ó¢\\~B¿~¦X½z Û¡H­ÌÌBtïþÜÝm°sçÔš |gÏ>ˆÈÈ4\»¶Dæ®»Ú„†>—×ìÚå‘#íT'M úúúíqçÎ÷,GØòÊË«àçw»vâÙ³xxØbÞ¼Á2•Ø©PÈ 22ׯÇ#$$wï&¡¼¼ ÆÆZ0ÀNNpt4šš2Û¡R#3³‘ð÷@hh"ÀÑÑžž]áînýÞä·ÇŽÝÁ† ºBææ—HJÊÆýûɸÿ)îßOF||„BÆÆZèÕË}ûš¢o_èë·g;TÒ4”ÌW¯Æ`êÔ½ˆß(Sãf땆!C~ÈÉqÁ0 Œ“Ž{÷VBE…½ãTY)Àþý×±uëep¹|ñ…¼½û‰­w­[‰˜8q¾ÿ~$¦Ní‹o¿=‰“'ïƒaôêe„sç‰e¿¯­_{ö¡²R‹ví” ­­-­¶8vl®X÷-j™™°·ÿöïÿîî6l‡Ób23 Ñ£Ç*øú΂««ÛáH­?þ¸…¥KýÀårad¤‰}û¦#%å%¦MóÁ±cs1`€ô.ÍÙX_}u×®E#8ø[øûG`éR?TTTÂÃ×Èä¼6@õ—÷€€ìØq>GïÞÆ˜?ß..–4ÌÕIŸ{÷’RÝs#""]»êýÛkÃF­¦· ‘~……¥¸|9 ‘ ŒAYÙû+£B ô#¼¼zaÑ"W¶CfUaa)îÞ}а°dܽ›„ž¡¼¼ úúíáèhZóG½³Z JfÈ_ߛشÉQQkÙEbœ\½ÿîDp8€¾~{lØàÕêfá>üW˜›wÀæÍ±J‹9yò>¾þú8¢£×Éܯ>-iâÄ]¸y3B!99.¸\.”•åáâb…mÛ¦°žDÉÏ/“Óz´k§‚¤¤lÕ÷X.—‹Ÿ~/Ñ·”ÐÐ'صë®^¹¹æÍŒ1czÐõ7äç—ü;ßFuÏää(+Ë£o_89YÔÌ·Aˆ$(+«DHHüýÿ[ÅÒRC‡ÚâÕ«2\º‰[·¾£ÄåÊË«–ŒÐÐ' MDXX2ÊË«`` ¾}«ýú™¢cGš LBÝç­ZµjÛQñºpá1 JññÇ}ÙEbœ9ó=ƒ@ð_2C(d qûöüùçmhh´¥¥n³oú7n$`êÔ½(/¯ÄÀµ1¿u+³f€¯ïMxzvž}ÕËÂ*(´L—ñ§O³ñÏ?Q(..GU•°æq‡mØØˆo‚Ð5k. ¨¨ì½Ç_½*éS÷qýzllô ­-Þ¹;D%7·'OÞÜ9ƒd¦Á°sç5¨©)aʺLjKaa–-;Y“€}}¿*+«‚™™6\\¬èKè’“spîÜ#¤¥å½•´æp8(/¯Ä¸q=YŒN2èë·Ç˜1ö:´+RR^bÛ¶+øóÏ;XZêB^¾þÉ`ïÞ`˜›wøàD„­•¢"ææàêj™3`üø^02ÒBZZ>üüîaÏž >|±±/PRRMͶ¬öì$²MNŽmxxØbΜèÛ×ee•8}ú‚ƒãPXXŠääè訢C5™i£ÔGNŽ[Ó+cÂÌ›7NNæPUUDDD*|}ob×®@œ:†èèt¼zUuueZêYr¼ ž2`î\_ öí›Îv(cÊ”= ŠE]W?—ËPÈ`ذnÍ:n11é1âW””T@Nއ;wV¼•Ý‹ËÀêÕç‹Aƒº`ÅŠ-ºAiiÅ[ÃJÞÅãq1xpøú~ZË«›¯¸¸ææËjÝ÷»vïöÆÈ‘ÝŇ(ÅÇg`àÀqîÜ"ôêeÄv8bÇ0 ìì~À§Ÿ:cÁ¶Ã‘Z§NÝÇâÅo÷&{MNއÎÛÃÇgýJŒê9–.õƒP(|+9ûšœÑÑëhØå;^¼ÈÇÞ½A8zôvƒV@IKËC¯^«¡®®‚7–A]]¥…#f—@ Dxx*BB⇰°dTU aiÙÎÎ0À½{Ó<6„u ÃàÁƒç˜>ÝUUB”@GG 6:´+úö5•º•ND¥¬¬÷ï'#447o&âáÃg¨¬ÀÐPýú™Õ¬ˆ$Î̤^4ÌDxy퀅E¬[7ŽíP$†ÝÈÊ*¬óy99 4púôhi5m)»ôô|¸»oF~~1ªª„àóy=º~ûm222 °i“?Nœ¸ ++]¬\9ò½ Ä-66ƒoÇy«‡Ê»ø|bbÖ‹eøÀÇÏ1lØ–nçííˆ ¼ZͯŽŽë0thW¬X1‚íPÄîõü3—.}[[=¶Ã‘Z3gÀ?ÿDB xÿË9PýëRU•[¶L’¸e¥[JiiæÎ=„Ë—£ÀápêL’r8ìÚ5µU$GÙPPP_ß[Ø¿?u¯€²fÍyìÚƒö8ujþ{Ê’ââr„†>AppBBâ 988×$7¬­›ßÛ“¦Z¼ø(òòбlÙpøû‡ãï¿ÃýíÚ)ÃÍÍžž]áìlA ¸z”–V ,ìBCÇŸƒa€®]õ0p`89™£gO#JµJfÈWן0dˆ5–.Êv(¡¨¨ææßÖù<ÇE¿~¦Ø¿ÿ“&w-,,È[œœ‹ÊJAÍãS§öʼn÷ ¡ÑË—ǨQÝÁå¶|ãæèÑÛøúëãõ6ú€ÃöîŽaú‰<†?ÿ¼%Küjý‚VÝÞã`ÕªQøôSöW—iŒÕ«Ïáòåh\¿¾ŒíPÄnçÎkص+¯få:–ee•°²úee•unóºÕ[¶L’ÉÆhLL:ÜÜ~®3áóšœ]±wï´Ьuªo”âârtëöJJÊT'½µ´ÚâôéèÜYƒåÈ%Czz>BBâ‡ë×ã‘›[ 6pr2ÿ7¹aNãðI‹Úµ+>>! û¡æ±gÏrñ÷ßáð÷ÀƒÉPTäÃÅÅ ¶puµ¢áPXX†7⇠ 8<ž‹¶máèh gç.8І†šl‡)Í(™! zõZ™3`îÜl‡"ÂÂ’1bÄoµ>Çår0n\OüüóÄ&?¯¬`âÄ]¸?¹f"Í×ää¸ÐÑi‡™30cFÖÇ''ç`Ñ¢£xð ¹Öîë@u/•‘#í°}ûÇ"ßÿªUgqðàÍšU^ãr¹àr9ؾý㚥[“Û·Ÿ`ìØí YSSí¿ ›0a´´Ú`ÇŽ©l‡"µ.]ŠÄ'Ÿì¯sXœœmÛ*àçŸ?‚§§mË'aÊË«ðÓOþؽ;§Îò²<¢£×5h^YWÛ (ææð矷߯#'ǃššNŸ^33#–< à *êEÍ”×KÀZZvÄÀ]0`€úô1iV›àÀë˜:µý"LêtêÔ}|óÍ $%mªõùÌÌ\º…‹ãöí'''s Únn62» Tc$'ç ((ÁÁ±¸y3EEå00ШéÕ¿õ|Dd(™! ºtY†eˆcÚ´~l‡"Åòå'ßKÍáp°xñ|óG“»2 ƒùóãÂ…GµŽÕ~í?fÃÅŲIû5¡Áï¿_ÇÚµA(dÞKÀÕ ÿ˜˜õ"Ÿ`ÐËk'nÝJxë199äååpèÐ,8:šŠt-E ¢[·•˜7oæÏ—Þy$ÊÊ*Ñ¥Ërüøãx™ÚÐ>ÿü(NŸ~ð^Ý|}Ÿ>¼6lðBûö²5gA}ÂÂ’±`Áa¤¥åÕq/æà?>•˜ûpkú;w^ÃÕ«Ñàpð^‚MNŽ%%yœ81ݺé³d+PVV‰;w’ƒk×b˜˜%%y8:š`ð`K8;w±±VƒËKLÌ€`jª?ÿœKËJ’Z?ÿsç‹Þ[PP‚K—¢  XTV àà`ê%_›z”€ÃáÊÄúª*!îߊë×ãûïRÏ€´€³³ìì:ƒÇ£d3ܧ£GdN||Æ[Ýá9¸\6lðÂ’%žÍϺví_8þa½‰ .—ƒ~8Sï6-‰Ëå`Ö¬ \‚®]õk*PRR[·E¾ïØØoýŸÏçA]].,nµ‰  z¨’««.]Šb;± }‚ŠŠ*8;[°ŠÔªªâï¿#jéåŃšš"ö왆={¦Q"ãöö† \ŠY³€Ãá¼×Xäó¹øûïp–¢k½úö5ÁÇ÷­5‘UU”””cܸí5¿ì’÷)*òáìlU«F#$dîÞ]‰5kÆ@QQ?þø7ú÷_Þ½×àÛoýpéR$Š‹Ëë-/ œœ gçqñâã–x¤•QRªžûìÍáÏuQSSÆ„ ½ðûïŸ 2r-vïöF‡jøå—88¬‡ÇflÛv ™ŠáâÅpté² aaÉMy ­Šœ}ú˜à›o<ñ÷ß_ "b ¶oŸ ss=z#Fü[Ûï1wî!œ:uyyÅl‡Ü*QÏ Ð¥Ë2lØ0cÆô`;‰0vì,.— 99.öî77›f•»}ûUlØp±A+s¼NžLêØ¬}ŠšPÈ`ß¾`¬_ ƒš/P|>}Ô?þ8^dûÊÏ/•Õw5ÿ—“ãÁÐPÇÏ“ŠqĘ5ë=Z-µ]3W­:‹x\»¶„íP¤Ö ˜0agÍÿ_'[‡íŠ ¼¤öÚ¥{÷žbÁ‚Ãxñ"ÿ­a'íÚ)!"b-ý*ÖH#FüЇŸ×94¨þŒ““ãaÿþO¨÷K#½þ57$$AA±OÇEÏž†8°  ²|o"ÑaÃ~Å£GÏÀ0¨I4MšÔk׎©ùKÈŸÞÆ?œE|üÆ&—QY)Àõëñˆ@@@rrŠ`f¦OÏê]»Öß#ë£v#$$<ß|3 ¸Èì|[‰‰Y¸v­ºwVhh"„B=z`Èk¸¸XÁÒ²ñ«“]¹K—"±zõhY©û4ÌDP2ãm––ËQPPZÓöèÑ9°·7hV™§O‡aáÂ# Jdðù¼š¬x|üF‰\ðÉ“,,Xpáá)5ï©}{„‡¯Ù‡Nh茷@uO{{C:4 ªªJ")ŸmÅÅå°µýk׎ÅäÉ}ØG,Þ„̱jÕh¶C‘Zß}w‡ßBe¥rr\(++`Ó¦ ­r.6•–V`Æ¿±¸ÜÿæÒ8}zúô1a9ºÖ#,ìFŒøµAÛ¾îõ¸cÇÇ´rL3äæ!88×®ÅàÆxde½‚¶v[ d ''sØÙuÆ€ÞK.ÉÉqѹ³öí›Þ¢K¾ɵyó%œ>†7–‹¤<@ˆ{÷žÂß?þþáHMÍC§Nê:´+<=mÑ«—Ñ[Éâê¡©ËPQQÝær9èÕË»vU÷úeEEåŽÅ•+Ѹz599EÐ×oWW+ b¾}M4§Î_ü‰ãÇïÂØXKVê>%3dA—.Ëðý÷#1eJ_¶Ca]nnlm¿èê¶Ã‰Ÿ5j\jmnÜHÀ¤I»ß›hŽÇãËý¯;_›6 °´ì+«N°´Ô……Etë¦/±«BìÝŒ/Ö¼‡¿þZ {{C‘”ðàM,_~\.C‡vÅöíKÝd|Ó¦ù±îé0 IDAT|}g±‰èed GU8rd êÂv8R‰a˜›/Cqq98Üܬ±iÓ„&/Mª'ç]´èÒÓ !0{¶3%ãÁÛÛW®Ô¿ôí›88à§Ÿ&`Ò$éL궤×‰Æ 00÷ï?…‰‰2jí)ÃãUO¦½jÕhLŸÞ–…•qK–œÀ³g¹8~|žXÊO©Y%!!ššmàîn OO[89™#88ÞÞ>þ»V_ÿ°¸mÛäf÷–B!ƒGžãÊ•h\¹…ÈÈ4(+ËcÀ ¸ºZÁÅÅ ::ªï½ŽaØÚ®ÄË—E²T÷)™! ìíÿ‡9sböìæ/oYPP€ÔÔTDÅŽ°°4|û­?ÔÕ•±{÷´oß¼^OŸæaöìSo=¦  ==5˜™iÂÐPFFê00P‡††rÍ6ÖÖÖÍÚo]nܸ­[·Š´Ì’9ÄÇ·GQíÛ—ÁÊ*W$å>z¤¢">tu‹`dTqÞgOœ8!¾Âëqôèm¬XqQQk¥®»ßñãw±t©bc×KLB®µßŸÞ›… Ï–/„AƒZ¶ššôôôÄRvjj* ÄRö‡”•UÁÇç.΋\¾,}ÉÆ7‰êóF(d°sç5¼x‘‡ŒŒ—ÈÌ,@nn ÊPTTñ^BŸËå€Çã ²²úñO?uÀ„ ]E‹,©ïü½zU†¹s!$$®Þ%‰¹\ ²ÄÖ­“¡®®‚­[·âÆâ—4Pÿþý±hÑ¢Ýç!?ÃÅÅß~;LìûJLÌ‚¿8.^ GDD*Ú¶U€BCß›³ãõíiÓúã‡F¾Õ!*Jºçk>_wî¤àÊ•hܸ‘€²²JtíªWW+¸ºZ£kW=p8DD¤ÂÝý—·^ûnÝWk<¾zzzPS«éÉs_º~%µRQ‘¯Y ¾¹ÊÊÊ -­æõf`KJJ>ll:`Ý:w(+7ï X~~öï¿  8:ÀÜ\êèСMÐìììfíóCž????Œ/º¹-”•«Ð­[6’“Û"/Ot³Os¹BB_ÿ•ÈÊ|—ŸŸŸØÊnˆ!C¬±dÉ ÇÁÃCº–Ì ŽCïÞÆ“ÈZÿýé]·n=ƒ­m|ÿ½ ÔÕ[vøUvv6¸\ñÍ%ñêÕ+ÖΕ¢¢,pDÏžzغõ&sajªÑâqˆ›¨?o¸\,¨^)&&™™™o¿’’Jäç—"?¿ ……e((¨þËÏ/Å͛Ϟ}}5ôíÛ¼a²¢!çOQ‘;wžÔ›ÈªQÁÁqpvÞˆ]»¦áÎ;"o+†óóóŸß²ŸÅÅåˆMÇ’%ž-²?SSm,\芅 ]‘––‡¿ÿÇ–-—k|ôõïê‡ßÄÍ›ñðñ™Q³¼óëz -Ÿë• KKMLꈩSQVV‰7påJþüó~ùå´µÛÂÕÕ|>ï­¡ìÀûu¿_?Ó÷ÊZÏñÍÎΆ¦¦æ›É P2C(++ ¨H4ÉŒ×ÄÕ³@Üòòä±dÉ8‘-1Ú¯Ÿ}£¶ÏÌÌDLLŒHö]qõDˆÏ@ÇŽíжmó“Õ7Wñ®‚qôèQL™2E¬û¨–V[tïÞ—.EJU2C(dpýz<æÍÄv(µj­÷§wMž¬"²a]Õ÷)XZ²79¤µµ5>úh0ž?Ï•ÊqÅâþ¼aûüI»†œ¿Û·Ÿ ¤¤¢AåUU ðòe &L؉ÎU0iÒ=zX¡’Fb£]– †aЫ—Q‹ï»S'uôéc‚üü³õnWU%ÄÓ§Ù2äg¬[7¶fx¼¥¥%tttZ"T‰ôÖÿùÿöȰDE¥Õ GÉÎ~UëJ‰oÖýE‹\ñÕW“ûïÇŠÖt|ß=@SxËUde²†DèßßLd‰ YdnÞA$‰ 2³œ§»»-®\‰þà/g­Idd*rs‹0p Í•!Nl%2d‰ŠŠ‚T&2ˆl8wîa½Ïóx\ðù<ÈËËA^ž9¹ê¹Nž=SÁƒí’ò²…"%l ˆ@ïÞÆh×NùËÁåËQ jWU QQQ…%KN`æÌ()©lèZ/këNX¼x||f %%¯Î¹Œ„B!†ÁöíW1bÄoRU÷©g† èØQ IIâÞ@©‡‡-Ö¯¿€°°d88³ŽH„„ÄCK«m“– #„"W®T÷Ühß¾ å ªªeey()É£}{(+ËCQ‘6m¡¢"EEy´i£€ýû}Àç3ÈÍ­^1H7@ˆ‹ÃñÅî¬ÅpöìƒZ‡˜Ô…aÿpøû‡ãÀöpwo=ØrõjÌ¿+uÕ?¦@ Dtt* Ú„Í›'BõýyD[JfÈ5ܸ‘Àv„È$SSmk! Bj’ÁÁ±pr2—æÙ± !Dâ=z´ªI¯ó÷¯^Ýή³£!’*44/_cØ0v&àÍÌ,@bbV½Û¨¨(@A_“”SR’Gyy%22òpþ|ÌÍ;ÃȨuÌëÀÿp4tIÊJ!*+Ë1wî!èé©âÄ Ó¿H‚Q2Cèé©ãÅ‹|0 C_>a››5.]ŠÂÊ•£Ø¥ÙJJ*pï^2~þy"Û¡B!ä…³³‹ËzspðàL()ÉCUU rPR’‡ššùõN$ôȨKYY%®^­î¥%/Ïûwéìêù͆©w˜sjj!fÎ<ŸOZm²ˆ’2ÀÔTee•HKˇžž:Ûá"s<<¸Ýê“E4¨ x½¼Q||Ë‘´nÅÅÅX¿~=ÛaˆLbb"<Ø¢ûÌËËæM›T/͸qãÆZ·“¶cmooMÍ6ˆ`;”f ‰C—.¡£#-ÅäÍëœr¤­þ°ÎaëFçO´Øh/´4imŸìÞccm™™t½9Î;‡»wï¾uþß¼.SZò:17ï€Ý»½ñÛo“±bÅ|ýµæÏwÁÔ©Ž?¾FŒ°ƒ““9zõ2‚­­ 4 ­Ýªª¢™ÐŸm”ÌmÚ(@W·2Ù¥U{õêV®\Év"‹Ý»w‹}?³fÍÂÓ§OؿͿW­ZUëk¤íXóx\¸¸XáÒ¥ÖŸÌŽÃÀÔ(ªÏ›×ù‡¼Y?šSΛ¤­þ°ÎaëFçO´Zª½ÐÒ¤½}’“S„ãÇïâÓOÐ0sÔ_×ÀÏÏ·nÝzëü¿y]4¦´¦ë¤µ£d†Œ°´ìˆØØt¶Ã 2( CCCÄÅű;ÜÝmððásdg¿b;”&{ñ" ™ô Ï4æ:³~4§"Zt[7:¤!¤½}òë¯ÿ }{Œß‹íP$B}u½.Òx]HJfȈîÝ pÿ~r‹ï777®®®Ø¼y3tuu¡¥¥…ßÿ_ý5´´´Ð±cG;v¬fûˆˆôë×ŠŠŠ077ÇÑ£G›TNPPºuëtéÒçÎdeeÁÝ݇B»ví0yòdüòË/5¯ËÎÎFÏž=‘ŸŸ_ç{òññTTT0cÆ …uO¬#é„B!-ZUUUhkkcÆ w¼“““1hР·Ê8q"îܹƒ‰'"++ 'NÄõëב™™‰#F48>i:ÖÎΗ—ÃåËQl‡ÒdÁÁ±PTäKͪ,¹Î³í›×ùë×9r&&&PQQÁôéÓ!Þ«ïÞŸTN]¤©þˆâ³Î!{V¬X---(((`РAHMM@ç¯5E{¨ûZøÐsuÝê#Ëí“gÏrñÇ·ðÍ7ž——)뺆Þ=ßpìØ1BII £G®5ÑñîuQW=¨‹¤_'ñ¡{`]utÒ¤I8{ö, -- vvv8}ú4 ==Ý»wG^^^ÓcˆL Œa:uú‚)((mV9L```ƒ·OOOg¸\.óý÷ß3B¡Ù¹s'€Ù¸q## ™M›61¦¦¦ Ã0LQQÓ±cGfûöíLYYsõêUFUU•¹yóf£ÊÉÈÈ`Ú¶mË8p€)++cΞ=Ë(++3±±±LJJ £¤¤ÄŒ3†¹uësêÔ)ÆÜܼ&ÞmÛ¶1...u¾ÌìÙ³™òòr&11‘QSSc®]»&¶ã×XGŽaZ­ÿúë/†Ãá0_~ù%S\\Ì\¿~QSScüüüu¼cbb ·ÊîÖ­sùòe&//騱#ÈTTT0OŸ>eTTT†a˜””FAA¡ÖØDq¬{ÆÛ{Ûa4Ùœ9¾Ì¤I»Ù£Nâ¼?5fÛ7¯óôôtF^^¾æZNJJbÚµkÇüóÏ?ïÕwïOqqq *§¶÷ÕÜúÍDGG7xûÆjLù¢úlµs(ÎϛƜ¿€€FWW—IHH` ™‘#G2sçÎe†ê`}Äyþ&OžÌLž<¹ÁÛ‹ª½PßµPßsõÝê#©í“Æÿ¦øì³CŒ‹Ë&F Šu?âÈddd4hÛú®¡wÏ÷£GæÔ©SLii)³e˳eË–·Îÿ›×E}õà]¢jÇ6æý7EcʯïX_ýú믙éÓ§3 SÝ.WPP`¦M›Æ0 Ã>|˜éÖ­[sâ½'9­|"VyyÅŒ®îLppl³ÊiÊ—LQQÃ0 ÏÈÉÉ1••• Ã0̃†aæØ±cL=Þzý¢E‹˜Ï?ÿ¼QåìÞ½›0`À[åxyy1ÿûßÿ˜””“––Æ0 Ô——3íÚµcÂÃÆa˜>}ú0¾¾¾õ¾—¬¬¬šÇ™3gÎ4øxHZ2C]]©¨¨¨yì»ï¾cƌӨã]_ca¦S§NÌdžaÝXhαfÉKf9Ê}׳J£ BÆÊê;fçÎÆ}·$qÞŸ³í»_¤0/^¼¨Ùï€j?oÖwïO)§¶÷Õœú#IÉ Q}6ÈÚ9””dÆÙ³g]]]&22’a˜ê/¦yyy ÃP¬¤%3DÑ^¨ïZ¨ï¹úîõ‘Ôö‰¸“¡¡‰Œ®îÌի⻇·”Æ|Ù®ïb˜·Ï÷’%K˜I“&½õz[[Û&3êªïU;VÒ’uÝë«£×®]côõõ†a˜Ù³g3 ,` †a˜™3g2Ë—/oN¼÷h˜‰Œh×Nff:¸u+‘•ý«¨¨8 ''Wóÿ×’““ CCÚ¿cÇŽ½5ä£!夦¦ÂÜüíe#-,,’’àr¹ÐÕÕÈËËcÔ¨Q8yò$ž|8¼¼¼àèè,^¼ø½.Åtþ$Ÿ(Ú õ] õ=×{@K’äs[QQ…¥KýàæfÁƒ-Ù§E5ä^óZZZ¬­­ßzÌÊÊêƒûøP=x“$_'ÍQÛ=°¾:Ú¿ >>ÁÁÁX´h^½z…ääd\»v Æ kV<”Ì!ýú™!$$ží0ꤪª '''$''¿õ·k×®F—“““óÖc¹¹¹PSSðþÍd„ 8yò$Ž9‚1cÆÔ| Ë‚wSVVÚ·oßìr‹‹‹›]†4ÒÔlƒîÝ Zå­!!ñÐÑQE—.ØEªIKcG”DõÙÐRè¾aüòË/ÈÍÍ…ŸŸÊÊÊêýÑ€mtþj'ŠöB}×B}ωò íí“íÛ¯"==ë×Kn—ÆÜkÔÕÕ‘••õÖcï^ãµW»¹µ«¯Žòù|¸ººâèÑ£(..†™™___¢OŸ>ÍÚ7%3dˆ³³9""RQPPÂv(µruuÅõë×())½½=Μ9Ó¨r† ‚Ë—/#)) @õä=§N‚««kÛ§§§cÛ¶mðöö~ë¹³gÏ"22² ï¦uHNNÆ… T/#µgÏ :´Qeðù|àåË—€;wî 1±ñ=€¤ýX¿æáaƒ«Wc ´®I ‚‚b1`€5ô%”4×Q}6H:i=‡?þø#999888ÀÛÛ/^¼`;,‘“Öó÷š(Ú õ] õ=×Ô{€¬µO’’²±uë,]:;¶c;œט{‹‹ Ž;VÓ«"<<!!!ÜG}õ µ\'âð¡::tèPüúë¯0``ðàÁزe <<<Àå6/AÉ Ò·¯)8àæMv†š|ˆ™™Ö¬Yƒ>}úÀÕÕæææ°±±ÁĉU޾úê+ØÛÛÃÍÍ ÖÖÖðòò‚‡‡G­Ûóù|Œ=ŠŠŠ}úàË/¿„³³3ÌÍÍa``€Ù³g7ª ###ôîÝ=zôÀ¨Q£ðÕW_¡_¿~5ÏkkkcÁ‚ «·i?Ö¯¹»Û"7·ˆ•Õ…šª¸¸aaÉ´$«4´~|ˆ4×Q}6ˆ ÃúM›6 )))èÚµ+\]]1a¬Y³†í°jÐùkQ´ê»ê{®©÷YjŸTU ±hÑXYébúôþl‡ÃŠÝkÞ<ߣFÂ!C`ee…AƒaĈuþèù¦úêAk¸NÄåCuÔÓÓo%3 š=Ä8 Ã0Í.…´cÇn‡¾~{üöÛä&½>331118p h{CZZ¢¢¢Ð©S§÷Ƴ5Frr2âããahhøÞïš1cttt°qãÆ&ï¯!Ä}üŽ=Š)S¦ 1Õº¬¬ ¡¡¡PSSC=š´ßªª*ܾ}@õþõXY z¹Û‡¢W¯^PSSC^^444š´ŸÆjÊñh ýû¯‡››5V®Åv( rùr¦OßÇWCS³ ÛáÔ©%îO ! |¿Y?ÔÕÕ›\ލ½þuÅÒRBΡ8ëCcÏ_yy9îÞ½‹²²2tëÖ ÚÚÚ"éMtþê7eÊÀ‘#Gõ:Q´ê»>t4å ‰í“¦ÿúüüsví Ä¥K_ÁÔT¼õ«%ÁÒÒ::: Ú¾¾k¨¶ºÌÌL888@UUõ½òj»ˆ¢4Tcß?Ûå‹ûsº–xïËÎÂÃàéi‹Í›ÿAe¥|>ípjÕ©S'têÔ©Ù弞€¦>ÙÙÙ¸yó&üüüðàÁƒfï³5RTT|oöÆ’““Cÿþµÿ ¥¥77·šÿ³Ñ(”4îî6ˆl5ÉŒ  8XYéJt"C’p¹Ü_çïÖ¦–# DõÙÐtEKAANNN-¶?:â!ŠöB}ׇ®“wïééé¸zõjÛÛÚÚ¢[·nRß> KÆo¿]ÆÚµc¥*‘Ñõ]CµÕu[[[ØÚÚÖY^m÷QÔiÕ’ŸÓ¯Ñ0ãéÙ……¥ •Ì¡&-íéÓ§X·n6oÞüÁÞ„ˆŠ»» ž>ÍFBB&Û¡4Hpp¬T®bB!¤õâóùÐÔÔ¬óOYY™íÅ®¸¸ ÁàÁ–ðövd;BZõÌ1zzê°µÕÃÅ‹á0€Æ¿;88àÞ½{l‡AdŒ½½!45ÛàÒ¥H˜™‰§ë ¨¤¦æ!))ÎΔì#„"9455ëœMV|õÕq•áçŸ'ÒÝD&QÏ 4bD7\¸ð••¶C!D&ñx\¸¸XáÒ%É_¢588ŠŠ|88³ !„Bþµo_0.^|Œ;¦BK«-Ûá JfÈ ±cíQPP‚«W£Ù…™åînƒ‡Ÿ#+ëÛ¡Ô+88ŽŽ¦—§Ž|„Bˆ$¸{7 k×þ…%K<áäD='‰ì¢d† êØ±úõ3É4¼‚¶8;[@^^W®D±J!nÜH !i„Bˆ„ÈÊz…9sað`K,XàÂv8„°Š’2jüø^¸z5/_³ !2IIIXàÒ¥H¶C©Ó£G)ÈÏ/³3%3!„¶UV 0w®/”•åñÛoShž "ó(™!£†í %%>Ž¿Ëv(„È,77k\¿ââr¶C©UHH:tPƒ…E¶C!„BdÞ—_Ctt||f@UU‘ípa%3d”²²<¼¼zá?nA(d؇™äæfƒŠŠ*\¿Ïv(µ Ž£^„Bˆؾý*Ξ}€;½aiÙ‘íp‘”ÌaÓ¦õóg¹ Še;Bd’¦ftïn€€É[Õ¤°° >£d!„²‹cÆ‹X»v,¶d;B$MO/ÃÌÌtЯŸ¼Ñècvv¶˜¢’n-uÜüüüš]†@À€Çc,fe¥|~Óò®¢8âæáaƒ]»!ÁãIN~944°UNþI÷§æËÊÊ‚¶¶¶Ø÷¡©©)Ö}È2q×:â%îóççç‡Ñ£G‹u¤v~~~?~|ƒ·ðà-: ooGL›ÖOŒ‘I¦ììlp¹’Ó>’6­ýøR2CÆMŸÞ³gDrr Þ(‰Š’Ü0a„f½žÏׂºúpäå]@e%»_ 54&¢ª* Á„¬Æ"îî¶X·îîßOFïÞÆl‡S#8866zhß^…íPîO­Ã0t®Z1:­[eee³Û DübbÒ1mšM°víX¶ÃaENNrrrØCjµöãËa†&LaB!ƒþý×ÃÙÙ6x±‘11/0aÂ.téÒ‡} %%yVã¹pá1¾øâOtíª‡½{§CC£ «ñˆCÿþëáæf•+G±J GÇu1ÂË– c;B!DæDD¤bòä=Ó#DÝo½}JˆHp¹Ìš5ÇߥeZ bcÓ1aÂ.˜›ëHÌçðáÝpþü"¼x‘OÏ͈ŒLc;$‘sw·A@€ä,Ñúüy.’“sh¾ B!„gÎ<À¨Q[ag§/1í1B$%3&Nt€¢">>!l‡BXŸñãwÂÔT‡Ï–¨NKK]üý÷04Ô¨Q[qîÜC¶C)ww$'ç !!“íPAAqPQQ@Ïž†l‡B!„ÈŒ‚‚|þùQ,Xp3gÀÁƒ³$ª=Fˆ¤¡dŠŠæÍŸ`ê!£21~üN˜˜H^"ã5uu=:ÜŸ}öÖ®ý tÌ¡aooMÍ6¸tI2zg„„Ä¡o_ÈËÓ´J„BHKøûïp ´ ÁÁq8pà|÷Ýp‰šœID5„fÎEE>vî¼Æv(¤…%&faüø04ÔÄáó¡¢¢ÀvHu’“ãâÿ-[&aÿþLº%l‡Õl<..V±D«@ Äñ4Ä„Bi‘‘iðòÚO?=''s.…›› ÛaÒ*P2ƒ”•å±p¡+öïAjjÛáòäIu"£sçêDF›6’›ÈxÓ„ ½pæÌBÄÅeÀÓs âã3Ø©ÙÜÝmðèÑsde½b5އŸ¡°°¬U.ÉJ!„´ ™˜?ÿxxü‚òòJœ?¿¿ý6íÚ)³!­%3HéÓûC_¿=Ö¬9Ïv(¤$%eÃËk'ôôÚãðáÙhÛV‘íÅή3¾„–V[ þ«Ä Ñh*gg ÈËËáòevßGpp:uR‡™™«qB!Ò(22 sç A?"&&;wzãüùŰ·7`;4BZJf|>?ü0ýõ·o?a;"FÉÉ9?~':vTÑ#s ªÚº¯iiµÅÉ“ó1zt|òÉïØ¼ùZëjÓJJò8° üýÙjO½2!„ DÀËkÜÜ~Æ“'Yؽ{®\ù#GÚÃá°"!­%3È[\\,1dˆ5–-;‰ÊJÛá1HNÎÁ¸q; ­ÝÇŽÍkµ‰Œ×ø|6mš€ ¼ðÛo—1kÖ—³V“xxØâƼzUÆÊþ Kñðá3š/ƒBgÏr±eË?è×ofÍ:œ8ñ._þÇw—KI Bšƒ’ä=ë×Cjj¶m»Âv(DÄž=Ë…—×hiµÅñã­?‘ñ&ooGœ8ñîÝ{Š#~CrrÛ!5Ú!V„ Œaeÿ7n$€a `ÎÊþ !„Ö®¸¸ÇßÅØ±Ûá踇ÝÂðáv¸~}|}g¡3¶C$DjP2ƒ¼§S'u,[6 [·^‘ЉIµçÏ«mpüø\¨ª*±’ÈõîmŒ€€¯Àçó0tèDZR£¨«« OcÖ†š„„Ä¡kW}š|ŒBi†apûö|ñÅŸ°³ûK—úAK«-ú÷ï¯Äwß ‡‘‘Ûa"u8Lk`NÄJ büø(**Ã… ŸC^^ŽíH3¤¦æaìØmPSS†ŸßgRÿeÛ\z" IDATµ¬¬_}u çÏ?²eÃðÙgƒÙ©ÁöïÁO?ù#<|M‹×»>}Öb̘Xºth‹î—Bimªª„¸s' ¸t)©©y°·7Äĉ>¼›Ô·µ‘÷)™Aê”––‡!C~†—WO¬^=†ípH¥¥åaܸhÓ¦zœfûö*l‡Ôbv .bäH;üòËGPTä³Ò¥¦æÁÁa5Ž™ƒAƒº´Ø~““sà踧O/@Ÿ>&-¶_B!¤µ(-­@PP.]ŠÀåËÑÈÏ/­­<=m1|x7˜˜h³"!²ä>ýÜNêÔ©“:~ùå#ÌšuXÀÕÕŠíH#½x‘/¯PQQÀñãód*‘Ÿ}6660wî!ŒµÌ„®n;¶Ãª—žž:lmõѢɌ  8´i£{{ÃÛ'!„"érs‹påJ4"ÊÊ*ôíkН¿v‡»»­Ä·+‘fÔ3ƒ|зßúá…Ǹzu ttTÙ‡4Pzz>ÆÛEE>üü>ƒ†F¶CbMrr>ùäwää¼Â¾}3л·1Û!ÕkË–pèÐM„…­j±™ÎgÌØ¡¯ï¬Ù!„"‰ÊË«pï^‚ƒã‡¨¨4(*ò1x°%ÜÝmàêj55BBˆ a&äÃÊÊ*1tèhj¶Á±cóh©Vàu"CAA'OΗéDÆkÅÅåX´è®\‰Æš5cáííÈvHuЉI‡‹Ë&üõ×âé)QY)€Í |ûí0̘Ñ_ìû#„B$Ã0ˆŽ~àà8\¿;w’P^^++]8;[ÀÉÉ}ú˜@A:´"ah˜ ù0EE>víòÆÐ¡[ðóÏX²Ä“íH=23 àåµ|>~~”ÈxMEE>>3°eË?X¶ì$"#S±nÝ8ðù<¶C{¥eGjÂß?¢E’>ëWepv¶û¾!„¶%%eãîÝ$„„ÄãúõxäæAW·œœÌ±yóGpr2§ö!­%3HƒXXtÀæÍaþü?`jª±cíÙ‰Ô"'§^^;Áãqàç7ššôAü&‡ƒ/¿t‡µu',\xqqðñ™-­¶l‡öD`ÅŠbßWPPôõÛÃØ˜–#„"]ªª„ˆŠJÃÝ»I¸s' ÷î=Evö+´i£GG3|ù¥œœ,`jJ“wÒÚÐ0Ò(¿þú¶lùgÎ,Dl‡CÞðòe1ÆßÒÒJœ9³::jl‡$Ñâã30}ú~TTTÁ×w¬­;±Ò[îÝ{ŠQ£¶"(h)ÌÍ;ˆu_#Fü KK]lÚ4A¬û!„BÄ­¤¤$ãΧ¸{7 aaÉ()©€ŽŽ*Œáà`cXYé‚Çã².!¤éhÎ Ò8 Ã`áÂ#ŽÃ… ŸÃÀ@ƒí€ÂÂ2L˜°/_áìÙE4³våç—`öìƒxøð9¶m›[¶Cª!2°³[‰™3`ñâ!bÛOõ²rßc×.o ÞMlû!„BDa$%eãáÃçxôè9¬©²R€+NãÈ‘P,[6 óç»°R¯¿>ލ¨4øû)¶}\¸ðóæBdäšBˆDËÈ(À£GÏk’?Gaa””äacÓ ööpp0F¯^F4ç!Ò&%Ççóàë; ÇÿŠY³~Ç‘#s$rEYPZZiÓ|œœƒ3gR"£ ø|~üq<ÌÌtð¿ÿCBB&6mšyyöožž]ñçŸwžžŽÅÓÛ&88vvú”È „"Q KñøqJMââáÃçÈÌ,€œffн{gŒi;»Î°°è992Bˆ¬¡ž¤ÉbbÒ1~üØÛÂÇg%4ZXe¥Ó§ûàÑ£œ<9––Ù©Õ»v-Ÿ}v]ºèbÿþ¬ÿªSQQkëX¾|fÌpË>VcÂ|ýµ‡XÊ'„B>$55ÑÑiˆŒLCTT¢¢^àùó\€¡¡&ºuÓG÷î°³Ó‡­­””äYŽ˜"h˜ ižððL˜°vÁŽSi"¥RY)Àœ9¾¸u+ǎ̓]g¶C’qq˜>Ý øú΂……x'ßü9s|‘—W‚'扼ì'O²àä´gÏ.„ƒƒ±ÈË'„BÞTY)@BBæI‹êFaa)x<.Œµ`mÝ ÖÖº°²ê;;}¨««°6!D2Q2ƒ4_XX2&NÜ…áûaË–Iàp8l‡$Õ!æÏ?ŒË—£pìØ\ôêeÄvHRçåËb|òÉNÃîÝÓ0x°%k±œ=û‹Exøj‘9pà:~üñoDF®£î¹„BD*3³qqˆ‰IG\\¢¢Ò›ŽÊJ””äaiÙÖÖ`cÓ ÖÖ`iÙ‘z\Bƒ’D4nÞL„·÷>xyõÄÆ^”Іaðå—Çpþü#øúÎBÿþfl‡$µ*+X²äNž¼ï¿‰Ù³Y‰£°° ¶¶+ðË/ÁË«§HËž6Í<¿ÿþ‰HË%„";òòŠ›¸¸ ÄÆ¾@||&bbÒQPPèÐA­&qamÝ VVº06Ö¢Þ¼„æ¢ @‰hôëg Ÿ˜>Ý<k׎—K QbË–ÄéÓa8p`&%2ÄŒÏçaË–I03ÓÁêÕÕƒ®_?®Åç†QUU„££)"DšÌ¨¬àÖ­D¬X1BdeB‘^……eHHÈD\\ú¿‰‹tÄÅ¥#+ë@]]––aiÙ£G÷@—.`aÑ&˜&„ˆ %3ˆÈ ÔûöMÇœ9¾(((ů¿N¦IAEhݺ 8zô6öì™Îê°YóÙgƒajªùóãéÓløøÌ@»v-Û0óôìŠÕ«Ï¡¬¬ŠŠ|‘”–Œââr8;[ˆ¤èÓÇ{öL£ñ"°}ûUlØpÛ¶MÁرöl‡#“bb^ÀÛÛ|>GŽÌ†‘‘V‹í;3³ööÿÃï¿77‘”¹qãEœ;÷¡¡+DR!„Ö£¬¬IIÙHLÌDbbÖ¿Õ‰‹’’ €¶v[˜šêÀÔT&&Ú05Õ™™ôôÔYŽžBМD\?NÁ”){`f¦_ßYPUUb;¤Vë?náÛoObݺq˜>½ÛáÈ´ììW˜>ÝÏžåâàÁ™èÙ³å&_>üW˜™é`Ë–I")oèÐ-èÚU7ŽIy„B$KU•))¹xú4OŸf#))OŸæ ))©©/!2àóy00Ѐ™™Œµajª 3³êµÝ!Ž’D|³ðÑG» ®®‚£GçP÷Ã&¸xñ1æÎ=„Ï?‚¯¾ò`; ´´Ÿ}ö‚ƒã°}ûÇ:´k‹ìwÇŽ«Øµ+¯nö¤iyy۵ýûöÍ€§§­ˆ"$„ÒÒ!RSóðôiö{I‹ÔÔ—¨¬¨îead¤ccmkÂÄDææ ¯ßž†BZ+JfñJMÍäI»QVV _ßY°²Òe;¤VãÆL™²S¦ôÁúõ^l‡CÞ ñý÷§ñÇ¡øá‡Q˜5k€Ø÷ùäIœœ6àÔ©èÛפYe?ÿóçFTÔ:¨ª*Š(BB!âPQQ…””—xö,Ïžåâùó\$%U'-ž?Ï­IXhj¶¡¡Œ5al¬ CCMiÂÈH mÚ(°ü.!Däh5"^zzêøë¯Å˜=û FÚŠ­[§Ð/Á ðàÁ3LŸîƒ#ì°nÝ8¶Ã!ïàñ¸X¿Þ zzíñÃg‘šú+WŽë >&&Õ]"j’¯^•!88ÅÅå˜8Ñ¡Ö×?~** pv¶@Û¶Õ‰‹  8ôèa@‰ B‘99E5‰ŠgÏrÞøw.22 Vÿö¨¡Ñ††04Ô˜1=`bò_Ò‚†…Bd %3ˆØµk§Œ#Gæ`åÊ3˜5ë–,ñÄ¢E®àpd{éÖ‡Ÿ£{÷Îï=—iÓ|àèhŠ-[&Éüq’dŸ}6:©cñâ£xñ"Û¶} ñÝV=þx/ø8|x6 4Þz~êÔ}¸v-II›”¤c+VœÁ×TÿZ÷z\ô›äåå0{¶3–/^k9ë×_ÀÞ½Á¨¨¨zï¹7Ëœ1à k׎¡ž@„R‹üü¤§ç#55))/‘šZÝËâõ¿_¾,®ÙVC£ ôõÛ×üuêÔzzíѹ³ôõÛCY™~¨ „ 93HËëßßþþ_bî\_¸»ÿ‚ÇcìØê.ï Ã`áÂ#€®cìX{ØÛ°®ÈED¤"88À0BÌ{[¶L‚Oàèѹ”Èh…ÌÍ;àÂ…/0uê^Œù|}gÁήzщ÷põj4à§Ÿü±bň–Çáp`ooP“̨-‘Q½êm++Ë£®üÄ›eÚÛP"ƒ"“^½*ËùHKËCzz>ÒÓ šú/^ 3³©©y(-­¨Ù^K«-ôõÛCO¯=ú÷7ƒžÞëÄ…:ôõÛS¯JBi!Ô3ƒ°¦¢¢ k×þ…ýû¯câD¬[7ÜÀúõ 2àñ¸ÐÓSGPзR5ÜdæÌ¸|9 UUÕ_$¹\€a8PUU„¿ÿ—04Ôd9BÒÅÅå˜=û îÜI®]Þ00Ѐ›Û/¨¬€ap¹œ;·öö† *oáÂ#8w„µ>///‡åˇcölçZŸß»7ë×_¨µgÈÉq1jTlÛ6¥AñBÈÿÛ»÷è¨Ê{ãÏdfrŸÌä2‰ ¹”(„KMi„h¤r,(©ué’Uªœ%(h­H hÑ–% VÅc Ò*¥´¥§±©rÇ"<‚„\Èer›„™óGȘ&™ìðý¬5kfïwÏÞ¿=¼@æÉ»ßm$n÷efÖ)Š”]¬œœbeg×>JK+}ÛGD„(>Þ®.]"ïP|¼]]»F)!Á®øx‡ºt‰löY@»bdü'0Т^˜¤ÔÔoéÉ'7j×®/”™Yä›±»¦Æ£¬¬"-[ö'ýä'ü\më8y2WÛ·Qý Ñ㑼*-­ÔÑ£Y„¤·Þú¡.ܬÿüÏß(**L×÷gn2™4wîÿèôèâe˦jÏž/uî\±jj55…„4¿Ÿk“ï“jïÊrÓM-[Æ­OUÕEeg);Û¥ìì"ee)'Çå -Î+Vqq…oûÐÐÀ!EròÍJHp(>Þ¡„„Ú ",Œ 6À(3àwßýîuï¥ñã_jÔvñ¢G¯¾ú‘î¹g îé‡êZ×êÕ“ÅÐè’º@ãÑG7øæÐ€qY,Z¹rº>«cÇÎ5êBºåËÿÜ¢.,,H¯¾:[ãǯn²Ýëõ*<¼ùË’ÂÃu¥x¯¾:›Þt8eeUÊÉq)?¿TÙÙE:wÎ¥œW½QÅ:þò¤šAA%$D*!Á®„„H%%uQ||íhŠ®]#•ààÖ¥ÐÉfÀï¼^¯–.ݦ‹=MþÙd2éñÇÿG}´ÐÐC;¿úª@[·TMMÓ_,k ~øÃ7õꫳ 4 îÝw÷éèÑì&ƒ„ºnܸ2äê!Ý AÝôÌ3ãµté}#—êx<Þ+Þª/<<¨Ñ{$) À¤gž¯Aƒºµàl u”–V*'Ç¥¼¼Råä+?¿LçÎ+?¿ôÒúåä¸TQqyŽ «ÕÜà’ÄÄ[„ññEE…ùñ¬þ@˜¿{å•õÑGÿnò —Tû›ìììbýüçÒO:±«k=kÖìP@@€jjšžÈQªöïñxôÎ;»•––Ô©æ ¹‘œ8‘£§žz÷ŠÛÔ…tÿøGËBºG¥;k÷îÿk4²çj—™|ÕjÖ°a½õ裣®z\h‰’w½âr(‘—WªÜ\—rsK”›[Ò`"ÍÀ@‹œN›nºÉ®ØX›úöMÐÈ‘·è¦›ìr:mŠwÈé´)&&Üg記~µoß)M˜ðr‹¶5™Lzÿý¹:´WWÕúrr\2ä…fç.°X̪©ñèÎ;ûê‰'îVrr纃ËÄí¾ Þ½´h[³Ù¬9sîÐ /LjÑöùù¥5j™\.wƒðïüq³wý9pà+}ï{—/Q 0ÉnÑÎ åtÚZt\7.—«B99%õ‰_0‘›{y}eeµï=AAÅÆF(.ή¸¸ÅÅE(66ÂZÔ…ÑÑ„€ëÆ ð¯C‡Îú^×~¡¯QsñZ@@íĉ;w.4Ü=Ú_yåÃ&o{iµšuñ¢Gÿñ4oÞõë—à‡êК>ÿ<[]»F)3³P&I&yÞ¡~ýj/ç¨ ,jŸkGÿ»€+òz½*)q«¸Ø-—«B.—[Åŵϵëk_×µ}½ýë—p˜Í¾ÀÁḹQ!!úøãgü]N‡SVV¥ÒR·JJ*ë=Wª¤Äí &ê–kŸk·« %ÊË«íÓlh2tèÕË)»=ôRÛåv»=T!¾×þB˜Cùâ‹/ôÏþS³gÏöw)­ª¼¼\/½ô’žy†/p7жìËøÃ¯¡C‡^q»¬¬,½ýöÛ?~¼ú÷ïß ­½údMGÛ¶ÒêÕÿ«ÿ;§MåOUUë… µÏÅÅ B‡úáCÃíÜ*-u7š?Bª #""B|)h–ͬèèpõ裈ˆÙlÁr8jƒ‰Ú "ÔPtÔ[[\ a åøñãZ»v­!ÃŒ‡~X‹-RÏž=µ•––ê¹çž#̸´e_Þ¼y³|Õ0cÖ¬Yr:š8±ñ­[ÛºOVU]ÔÆ{ô«_} sç\2™.·Y,òz½2Õ_éuóD”–V©¬¬RååU*+«RI‰[ee•*+«]./¯º4:¢Råå—×—•UúFDTW×4yŒº Âf«}® âãí¾u—CŠ_XQ·sH€aÐN¶oß®¹sçú» ÀçÌ™3Zºt©n½õÖv;fI‰[o¾ù±Ö®Ý¡’’Jy½µ¡·Þ ƒ‹=*((WLLø5¼JTQqA%%n¹Ýµ¯KKkȺåâb·**.‡eeUr¹Ü B‹¦.˨¬°°`…‡]zËnQLŒM=z8è ÂÃk·³Ùj·©\àúfÀp<~ô£éÍ7ßTpp°žxâ =ýôÓ*((ÐôéÓ5nÜ8­\¹RÕÕÕZ¾|¹>ÿüs½õÖ[²X,úå/©ûï¿_’ôÁhÞ¼y:yò¤ú÷ï¯õë×kðàÁ’¤;wjÞ¼y:~ü¸zöì©åË—k„ ¾cÌ™3GÏ=÷œrrrtß}÷éõ×_—ÙlÖâÅ‹µnÝ:•””(55Uo¿ý¶ºvíªéÓ§+//OÓ§O×k¯½¦#F4yn¯½öš–,Y¢óçÏkÚ´izýõ×ÐnŸ-ÚWkõå7jáÂ…ÊÍÍÕØ±cUSsyÀ‘#Gôè£êÀêÞ½»žþy͘1CsæÌÑ™3g4kÖ,­^½ZãÆk²ÆÖꓹ¹.­_ÿ‘Þ|óŸºp¡¦ÑÝ-¾nÆ®òòÚË0Üî r»«URâö…åå— ·û‚JJ*¯¸O›-X!!V…„ú.± « #bbl¾ÑuëÂd·_#j×3y%@@˜ÃÙ¿¿FŒ¡œœ}4|øp}øá‡JMMUVV–Ö®]«üàZ¶l™òòò´råJ=û쳺ÿþû•™™©É“'kÆ ;v¬~ñ‹_hêÔ©:uê”òòòtï½÷êå—_Ö÷¿ÿ}mß¾]3fÌÐÁƒe·Û•‘‘¡Þ½{ëØ±cÊÊÊRrr²fΜ)Ç£7ÞxC»víR\\œxà-]ºT¯¼òŠÖ­[§ŒŒ ­[·NÆ kò¼jjj´oß>¹Q›7ï“ÉdÒÅ‹M_nñu¿þõß}¡‚ͬÐÐ …„X"§Ó¦ÐÐ …†ÊnQHˆU¡¡—B‡`߲ݪ@…„Xe³@t&„0‡Ã¡eË–Éjµjøðáš;w®ÒÓÓ5|øpy<-X°@&“Iiii²X,š?¾oyÕªU’¤M›6iÔ¨Q¾¹žzê)Y,¹ÝnmÙ²E·Ýv›o.ƒ &hܸqÚ´i“yä]¸pAÏ?ÿ¼Õ³gO 8P.—KV«U’TUU%›Í¦ôôtUWWûjÃáðm×”_|QêÝ»·’’’är¹Úð“„¿µF_NOO×äÉ“5yòdIÒücýæ7¿‘$mÛ¶MñññzüñÇ%IwÞy§fÏž­Í›7+55U²Ûí j~Þ…ëí“'OæêÍ7OÊé|H7ÏÅlÐÏ~6E÷ßû5½7ƯÃpz÷îÝ èß¿¿Î;ç[ “$™L&Éb±ø–ëœ>}Z‰‰‰¾e«Õª (44T™™™ Ú$é–[nÑÙ³g}Ëñññ¾×uû?~¼¦NªÔÔTÝ|óÍš7ožŠŠŠZ|^f³YN§³Ñ~ÑyµF_ÎÊÊRRRRƒýöë×ORm??~ü¸zôèá{lܸQÅÅÅ-ªï›ôÉ>}â4n\7•–~¢I“’áÛ‡Åb¾Êq”ݲpcbd çüùó –óòòuMû°ÙlÊËËk°î½÷ÞÓ]wÝ¥ˆˆ}öÙg Ú d·Û¯¸O¯×«U«ViÕªU:xð ^~ùeM™2E¼¦Úpãh¾Ù¨/×í7""B#FŒÐöíÛ}mn·»Ý‚²ØØ`••íÕš5J’²²Š´{÷ÿi÷î/•‘ño9Sx)Ühp·¯×«üüÒv©ÆÄÈ ÎéÓ§µmÛ6Iµ·\·n]³“6g̘1Úºu«ïKàž={ôÀÈl6k̘1úÛßþ¦/¿üR’”››«ßÿþ÷JKK»â>—/_®Q£FÉb±hèСš5k–²³³›Ý~Ë–-BÜXZ£/ßu×]Ú¸q£oDÇáÇõüC’”––¦ŒŒ ;vL’TQQ¡””½ÿþûMî«­ûd—.‘š2e°V¬˜¦Ý»ŸÕáÃK´~ýCš5ë%&Þ¤€“$“ª«ktøðÙ«î7. ΰaÃôä“OjäÈ‘JLLÔÍ7߬Gyäšö1zôh͘1CIIIJKKÓÝwß­+V(<<\ßþö·5þ|¥¤¤èî»ïVRR’¦Nªï~÷»WÜçC=¤³gÏjàÀJKKÓ´iÓ´dÉ_{ll¬æÎ«HªÛ`Ë–-×þ Óh¾ÐQp™ 0 `(„ÀP3€¡fC!̆B˜ …0 a0‹¿ $Éd2ù»„NaÆŒþ.òî£êêÕÔ”úµ ­fÀ¯†®wß}×ßetÝ»w÷w 7´ŽÒŸçÍûD³f%*%%Æß¥mÂäõz½þ.ÐzžÐš5jÒ¤d—´…ýÌ™ …0 a0 `(„ÀP3€¡fC!̆B˜ …0 a0 `(„ÀP3€¡fC!̆B˜ …0 a0 `(„ÀP3€¡fC!̆B˜ …0 a0 `(„ÀP3€¡fC±ø»ÀõûàƒÏåv_h´þàÁ¯d±4Ì«GŒH”ÃÚ^¥mÆäõz½þ.p}üm½ÿþÁm{êÔ ‘aÀðös™ ؤI)’LWÜÆj Ð}÷ &È@§A˜6rä-²Ù‚®¸MuµW'¦´SE@Û#̳Zͺ÷ÞÛdµš›ÝÆáÖˆ‰íXж3Àà&ONQuuM“mV«E“& n4(`düt wûí½ätÚšl«®¾¨‰ok犀¶E˜`ÒÔ©ƒ›¼Ô$..Bƒ÷hÿ¢€6D˜À„ ·5ºÔÄj5ë¾û†ÈdºòÝN£!Ì€N`àÀnêÞ=ºÁºêêšK·n: è$¦M"«µîŸu“zötªoßx¿Ö´ è$&MJVuµG’dµš4mÚ?W´  è$jGb$H’.^ôjâÄd?W´  èDêFcÜrËMºùæè«l “Åß@g³sçN¿;.®R’Ô«W¨_ëèÛ·¯âââüv|tn„Ðbbbüöe~ذš?¼bbÂürü£Gú常qf@p:r:~9ö²eÓ”˜x“_Ž ´æÌ€N† a0 `(„ÀP3€¡fC!Ì4ëá‡Ö©S§ü]Ða YÛ·o—Ëåòw@„àg|ð’’’¨äädíß¿ß×öÛßþVßúÖ·d±X¯+VøÚ/^,§Ó©   =Z™™™-j;räˆî¸ã+11Qééé’¤¼¼<;V6lÃáЀ”——§éÓ§+##£>  e3À2335yòd-]ºT.—KS¦LÑÔ©SåõzUZZª9sæhåÊ•*//צM›´páBåççë¯ý«Þxã íÚµKçÏŸWDD„–.]*IWl+//ר±c5cÆ ¹\.­]»V=ö˜>ùä]¸pAÚ²e‹þò—¿èïÿ»bbb´nÝ: 6ÌŸЀÅßÀlÓ¦M5j”&Nœ(Izê©§d±Xäv»¨O>ùDÉÉÉ’¤^½zÉjµÊår©²²R’TUU%›Í¦ôôtUWWKÒÛ¶mÛ¦øøx=þøã’¤;ï¼S³gÏÖæÍ›5þ|¹Ýnýú׿VBB‚$) @‡CV«µý>à*3ÀNŸ>­ÄÄDß²ÕjÕ‚ |ËÐÓO?­/¾øBQQQòx<’¤ñãÇkÇŽJMM•ÃáИ1c´hÑ"9Ž+¶>}ZÇW=|Çp»Ý7nœ¤Úð¢.È:*.3?²Ùl*..n°î½÷Þ“ËåÒ–-[´hÑ"-^¼X'NœÐ¾}û*Iòz½Zµj• ´yófUVVjÊ”)Wm‹ˆˆÐˆ#túôéW^yE’d2™Úñì€ëC˜~4fÌmݺUyyy’¤={öèÙlVff¦úõë§#FÈl6k×®]*))‘$-_¾\£F’ÅbÑСC5kÖ,egg_µ---M:vì˜$©¢¢B)))zÿý÷ýpöÀõá2ð£Ñ£GkÆŒJJJÒ Aƒ´oß>­X±Báááš0a‚–,Y¢‘#G*00PV«U½zõÒüùóµfÍ­_¿^Tll¬öïßï»ÓÉC=Ôl[Ÿ>}´dÉ 6LC† ÑñãÇ•ššªéÓ§ûúbcc5wî\½ôÒKJIIi×ÏhŽÉëõzý]t&;wîTß¾}×â÷œòô2ˆˆˆˆˆˆº¹§@D=Ï™3g°víZ 22?ü0Æ­V‹åË—cÒ¤Ixÿý÷QWW‡[o½óçχT*Å¡C‡ðÖ[o¡¬¬ ½zõÂÿøGôíÛ·Þz ÅÅÅˆŽŽÆœ9s0jÔ(À?ü€¿ýío¨¯¯Ç 7ܛͨ¯¯Çš5k°råÊ˾öÞ½{±~ýzÔÕÕa̘1 ÂàÁƒqÓM7µù³²²ðÏþcÆŒÁüùó!‘H:æ LDDDDDäA¬l"¢e41þ|Œ?YYYxúé§±víZäååÁb± 77999øç?ÿ‰>ø?ÿü3>Œêêj,]º=ö¶mÛ†[n¹Ï?ÿ<ìv;êëë±hÑ"Ü{ï½Ø¾};æÌ™ƒ+V ¤¤§OŸÆªU«ðûßÿ[·nÅ Aƒ°oß>€Éd‘#Gà’¯]QQ_|óæÍÖ-[‡/¾øZ­¶Í÷h³ÙŸŸ 6àý÷ßÇîÝ»‘Ýa_c""""""ObØDDjß¾} ÁôéÓ¡P(0xð`Lœ8?þø#!ôyøá‡!—ËäädèõzìÚµ ƒ ÂèÑ£áííûî»Ó¦MCss3öìÙƒÔÔTLœ8 …£FÂðáñk×.|ÿý÷¸å–[póÍ7ÃËË ÷Üs’““Û\ÛÅ^{çÎ6lFŽ ///Ìš5 ÁÁÁ—|Ÿ>ú(är9bbb””½^ïî/%Q§Ä6:"êPjµÅÅŸï¾ûÄëL&†.^ ­gjµqqqâõr¹÷ß? ººñññ.¯ªª*˜L&$%%¹Ü–˜˜xÑõ]쵟_"‘ ::ú¢Ï!•J¡R©.x"""""¢ž€au(???ddd`õêÕâu&“ ‰—|\}}½Ëu»wïÆ!Càç燳gϺܦÕjáïï//¯ §Ñh®zÍç·Ìétº«z"""""¢ž‚mtDÔ¡†ŠÜÜ\‚¦9sæ`÷îÝ—}ÜÞ½{ÑÐÐ8qâ^zé%H¥R 6 DEEað÷O?ý„¡C‡bÈ!øá‡P[[ @Nž››{ÕkÞ³gøÚyyy(**+–öìÙsAØEDDDDDÔS±²‰ˆ:T\\}ôQÌ;iii(..Fzz:ÆŽ{A’³Áƒcܸqxøá‡‘’’‚üü|üïÿþ/|}}‘ššŠ™3gâñÇGZZ 0fÌÜxã°ÛíøÏþƒ‡~©©©(//ÇСC¯jÍ7ÝtFŒGy)))0HII\.ü ]¿~=¦L™‚^½z]×׆ˆˆˆˆˆ¨;Øív»§AD]›D"ÁâÅ‹1nܸ+~LMM Î;‡°°° f*]Jii)Ôj5ár›Z­Fii)¢¢¢\æ;BES}}=úõë???€Ýn‡N§C``à%_³¡¡V«Z­éééx衇°xñbôïßÿŠ×~¥ÆŒƒ 6`Ö¬Ynn"""""¢vv•MDäaaa »êÇÅÅÅ]$9DEE!**ªÍÛÚÚN"‘\6h„äO?ý4–/_ŽÄÄDlݺV«}úô¹ºÅõ ›ˆˆ.£wïÞX°`6lØN‡ØØX¬^½Zl£#"""""¢Vü¤DDtFÑ£G{zDDDDDDw£#""""""""·aØDDDDDDDDDnð‰ˆˆˆˆˆˆˆˆÜ†a¹ Ã&""""""""r†MDDDDDDDDä6 ›ˆÈãl6;Ôj=›=½”+¦×7£  ‹ÍÓK!"""""êT$v»ÝîéEQ×&‘H®ø¾2Y äòP(¡ËCáã“ ‰D£ñ êë·è:¿’TªÛáëÛK=ššò`2•Àl®‚;ÞÆ 0kÖ¬ë_$QÇ:Ȱ‰ˆ®Û_|qÁu:¨ÕTTPR¢Ge¥ÍÍB%L&Í8~­Ys¼¼dºîëÕÜlÅŸþô @*•Àf³ÃËK†ÔÔ@¤¥©Ð»w¢£}¯*Œs¸é¦›àî%µ7†MDäµµxýõcïÞB”—7@«mÈå2ö6ÛÍd2)¢¢‚ðÍ7O#4TÙÁ+vS§*1a«hn¶ÀñÛT*•@*•Àb±!(È£G÷ÁÍ7÷Á¨Q©HI‰ð삉ˆˆˆˆˆÚÃ&"r»ÝŽÌÌ¥¨©i¼¢ûËåRøû{cÇŽ§‘”ÖΫk__|qO=õ/\ìשL&…DX,6„„(1bD2Æ€{ï½RéÕW=ub9 œˆÜB"‘àƒ»¢–1©T™L† ætù  î½÷üú×7B&k» Ðjµ‰•]uuÈÊÊÅg4Q·Ä°‰ˆÜfèÐDL™’ÑÒ:wq‰}ô† Iì •µ¿—^ºÉÉa—}ïR©X¶lz­Œˆˆˆˆˆ¨c1l""·z¸Ônl‰ëÖÍÂèÑ}:nQÀ×× ï¿ÿ[(ÒKVwÙíÀºu³ Tzwàꈈˆˆˆˆ:Ã&"r›cÇÊðÔSÿBDD@›>‰ NÁÝwõÀêÚ_JJ^{í¾‹Þ.—Kñë_߈_ýªo®Šˆˆˆˆˆ¨c1l"¢ëVY©ÅÓOЉ_ƒÕjÅúõÂÇGár™LŠyóÆyh•cúô!˜={8är×_¯R©!!JDFáûï{huDDDDDDía]3£ÑŒuë¾ÃèÑ+±{wÖ¯[¶<‰áÃSðÌ3ÅØr¹ ·Þš†—^šááwŒ+îFjj„Ku—£}®²Rƒßüæ]¼ôÒ6qh8Qw"±_l¯n"¢Kرã(–/ߌÚÚFÌ›7sæÜêRÍd6[‘™¹ ddÄáë¯ÿ¾¾^\qÇ:w®ãǯAS“2™÷ÜsÖ®Zì>ûl?ž{n#ÒÓcñöÛ"66ØÃ«%"""""r›ƒ ›ˆèª;V†eË6aß¾Ó˜>}0–.†ÈÈÀ6ï»m[æÏÿ»w?‹ÐPe¯Ôó¶mËÁã((Xå2xûí1hP‚§—DDDDDDäÀ°‰¨;sÌeÚµ+“& ÄÒ¥Ó˜êée‘TUéðİo_!æÏŸ„ßýn,«Ôˆˆˆˆˆ¨3`ØDÔi4¼òÊvq.Ó²eÓ1rdª§—Enf·Ûñ—¿ìÂ+¯lÇðá)xóÍÙˆŒ ôô²ˆˆˆˆˆ¨gcØDÔX,6|üñ>¼úê(2Îeê!rrJ0wîGÐj›°ví}¸í¶ž^õ\ ›ˆº Ç\¦³g«ñè£7ã©§nG` ‡G÷z½ Ï=·_~y¿ýíÍX¼øx{Ë=½,"""""êy6uugÎTcÉ’¯Ä¹LK–܉¤¤0O/‹‚Q£Rñâ‹ws.uyV« ýë.¬Yó ŒÃ›oÎB¯^áž^u> ›ˆÜÅy.STT–,¹“& ôô²ˆÜ*?¿O<±§OWcÑ¢©xä‘ÑH$ž^u ›ˆ®—ÝnÇæÍG°|ù455s.u{f³ëÖ}‡7ßüǧ`íÚûìéeQçÀ°‰èz:T„e˾Ƒ#ŸÿþáX¸p ç2Q‘“S‚'Ÿü X¶l§—DDDDDDžÇ°‰èZ8Ïe1"Ë–MGzz¬§—EÔáL& V¯ÞŽwÞùcÇöÚ5¿Fdd §—EDDDDDžÃ°‰èjf¼óÎX·î;Îe¢ï“O>ÁìÙ³^^1P©n‡^Ÿ ½þˆ‡WvmfÍš… 6xzDDDDD]ÝA¹§W@Ô8æ2½ôÒ644ðÇ?ÞŽÇ¿•s™ˆ|þùç€æfŠIèŠó¡]?†MD—á<—iæÌ±`Ád¶ 9¹÷Þ{=½„ë¶iÓ&O/ˆˆˆˆ¨Û`ØDt••Z¬Z•…Ï??€#RðÍ7ä\&""""""¢Ë`ØDtÇ\¦õëwB¥òÃ;ïüS§fzzYDDDDDDD]Ã&¢çÏeš7oæÌ¹>> O/ˆˆˆˆˆˆ¨Ë`ØDàØ±2<ÿü×øå—3œËDDDDDDDt6QVY©Å+¯lÇçŸïÇàÁ ÈÊú23ã=½,""""""¢.Kêéy‚Ñhƺußaôè•Ø½»ë×?€-[ždÐDÔŽ ñᇺýyõz=V®\éöç%""""¢kð‰zœ;ŽbìØÕX¿~'æÍ‡Ý»búô!H$ž^Q·–ŸŸ¿þõ¯n^N‡¥K—ºýy¯„Z­ñÈëufl££ãر2,[¶ ûöÆ´iƒ±t鈊 òô²ˆ¨‹ih0`ûö\¬[÷JJêP^þº§—DDDDDÔ©°²‰º½ª*ž~úSLœøL&3¶lyo¿ý ƒ&"°Ùlxâ‰'ˆˆˆ¼üòË€ÚÚZŒ?k×®ELL ÂÃÃñþûïã™gžAxx8¢££ñé§Ÿ^ò¹ß}÷]$&&Âßß<òl6›ÛÖm04cÓ¦ÃxðÁ¿aàÀ%˜?ÿ ””Ô¹íù‰ˆˆˆˆºV6Q·e6[ñÞ{»ñÆÿF@€Ö¯Ó¦ f»‘Œ©S§¢wïÞ=z4víÚ…‘#G¢¬¬ ýë_ñè£bÕªU¨ªªÂ«¯¾Š%K–à¾ûîkóy­V+8€S§N¡¤¤C‡ÅC=„1cÆ\óZÍf+~ü1_}uß~{ ÍÍH$X­®!Ö‘#Å<8áš_‡ˆˆˆˆ¨»aØDÝÒŽG±bŨÕÌ™s+žxb<|}½<½,¢O¥RaÕªUP(=z4æÍ›‡O>ù£G†Íf ‘H0~üxÈårüñ/¿öÚk—|î_|^^^HIIÁ€ Ñ\ý<%›ÍŽ_~9ƒ¯¿>ŒM›£±Ñ¹\ ‹ÅÚrûÉÎfØDDDDDäŒau+Ç—céүŹL‹MEll°§—ED-RRR P(ÄËéé騹s§xÙßß ‘Hàíí ¹\.^¾™L†ððpñòÕV0êtrœ;çAƒžGMr¹L ˜Zƒ¦¶íÚ•´´høû{A©ô··J¥7üü¼¡PÈ®jDDDDDÝÃ&êêêôxõÕøøã}È̌ǖ-ObèÐDO/‹ˆÎSSSãr¹ªª !!!Z`ãÆƒÈË BS“ €Àå&gߟ‡ï¿Ïkó6™L ¥Ò~~^ðö–#0о¾ x{+ä ¼½å òƒ>> øÂÛ[??/øÀÛ[Á ‹ˆˆˆˆº†MÔ¥9ÏeòõU`õê™øõ¯oä\&¢«°cG.NªÄ!I6¬||ÚsçÎaÛ¶m˜:u*t:ÞyçÌ;÷ªŸgÓ¦MHMMEzzº[Öe³]ûïŒwÞy7Ý”Œ¦¦fètF˜Lf Žc ôzM0™Ìhl4Á`0Áh´ ±ÑˆººF˜LVhµ¥0Í0™Ìhhh‚Éd†Ñh¾äë^Kè oo|}…c/øùyÃßßAA¾ðóó‚—ÿ×€ˆˆˆˆ®ÿ’º¬ÿû–-Û,Îeš7oüý½=½,¢.''§o¾ùxY&“" ÀÑÑAHL Cÿþ14(Ç'C©ô¹®×>|8ž~úi¬Y³¼ QQAmÞf2Y.¡ATIIª«uâ}ƒƒýÅ ÊJÅÅ… !!ññ!hjjFmm#jj[*¤Q[«‡Z­Amm#êê¡V ן?\<$ÄaaBe”c¶Txx€ØâÑzÜ•‚©K1Íb¥Õ6‰Á•ãX«5: Á•F#;Îm¶ är©K8ua@åT]x}PŸ¾DDDDŠauN޹L»våcÒ¤X¾ü.ÄÅq.ÑÕ²Xl(.®Evv1öí+ıce(.®ƒFc?HK$(247_|î Ìkúõ¯oÄš53!•JñÉ'Ÿt‹°);»óç/ƒÙ,Á 7LĦM‡a0˜Ú Ú€ÜÜ®éµF3Š‹kQRRïB9Nµµâ}CC•Na”DÅLJ 1Q£œgéõ&TUiQS#„Sjµuu¨®ÖµTKéQ]­EU•MMÍ.k öo©ˆòGddغçR ,, ÛSÓØhr ¤Z*ãy×7µT[µV]i4Me娨 òƒJ%œù!8ØO ¤T*_¨T~-·9Ž};Uû$ÑE0l¢Î…s™ˆ®Ms³……U(,¬Ä¡CEÈÉ)Æ™35¨­mt ƒ ""ѧO$†MÂØ±ýpâD96m:‚Ý» .úüÉÉáxþùiˆ¯¯°ÙæÍ_áá‡ìòaSIIn»m)´Zaç8//¬V¬V;®tXxdd 22â‘‘Aƒ‘‡ðð€ë^›ÁÐŒ’’:×:QõbU_/´>J$DD"!¡5|rTD%&†"**袻 ͨªÒ¢ºZ‡ÚZGu”55BŸXéPU¥…ÁàL©T~â,)G _X˜0ü<$D­!•—W×éu­š›-m†PÎT h4444A£1@£iB}½p][\*ß–€Ê5r„TΗ;z=õh ›¨sà\&¢+£ÕQXX‰‚5 *‘]ŒÂÂ*ÔÕ5Âf³C"ijä‡ää0ddÄcäÈ޸ᆤ6Û½¶nÍÆœ9ÿ¸æ5=òÈÍXºôÎ.½[جYàìY?+!‘H`³Ù.ÿ K—NƒÝnGNN rsKpî\ &F…Aƒ™é¡âÝÞB¥ÓÅ0ª¸¸®¥JJ8/*ªÛéä~‹ IDAT bcƒ‘Š„„ñ<>^8 U^Ñë9‚©š×0ª¶V'¶ðUW·Lù!""Àezh¨Ë®|­ÕSaa=3˜j‹Fch žš\)! jÏ[ïgíóÉdÒ6«¦Î¯¬R©œÏýì¹¼í ’ˆˆˆè"6‘ç}ÿýq,]ú5Ôj ç2µ¨®ÖáäI5NŸ®Â©S•Èϯ@~¾uuB[•T*̲ۅ㸸` ‹áÃS‘þýc®¸’A«5"=}1,–¶*_ŠN·:Ý«~\g3{ölÀܹËñ»ßý MWôõðö–£ `•K;™Fc@vv‰>eg£¼¼”$„™™BÔÀqP*Ûï÷]U•%%­ATqqx¹¼¼^:îïïí>%&†Š•Q ¡ðóóºê×njjFU•ÕÕBÛ^e¥P=%Ì–Òˆ-~UUÚ æ…úŠ­z­ç-aT¢£ƒÄ**þQâBV«í²”ëí­AÖù!!ø $Ä¿%|j ¡T*?„„ø9û‹·µçÏ5uz ›Èsœç2M›6‹ߨXÎe¢žE£1 ?_“'Õ8y²j?^Žúz¡…F¡A&“Š*¾¾^èÓ' C†$"##Æ¡wïÈëžsï½ocïÞSW´ûšL&Eß¾‘6Ìo¾ù6þö·w1{öð.=KÆ6mذõõz<ñÄ'صëÄeç6•Š?žsÙª®êjrr\¨êj¤R ’“Ã]* ÒÓcáë{õáÎÕ²Xl(/¯w©ˆ**j­Œr^¦t ŸZ«£B£ºîŸ¿¦¦fTWëP]­(G[Ÿ#¤rÌ›rž1%“I&Ì‘rTHEG«ÄV¾ððñ6Åu­±§0™,hhУ®Î€úz= ¨«Ó£¾Þq2´œôâíõõX­®Õ€ …ì‚`ÊV…„ø#$Äõ:•J8ïîsÀˆˆˆz†MÔñ8—‰z¢ÆFSK…R9 Z+•*+5//9|}hn¶Š¦ÃÑ™‡b1`@,ÒÓc‘˜Ú.¡Î{ïý„eË6µÌ)j›c—6¥Ò­•({÷.BRR˜Û×Ô‘œÃ&°Ûíøðß±lÙ&Ølö >H;ôí²²:L˜Ž;î„[oM»âvŠŠääÁSnn)rrJP_¯‡\.EïÞQÈÌŒOÄvø‡p£ÑŒ¢¢Ú ZóÇŽŸ™LŠ˜Õs¢„ó0DD\ÿì*gz½ ÔÔèÄ ª²R+T••1´rà#VF9‚¨ÈÈ@qW>ÇmaaWÖRH®´Ú&ÔÕéQWç „`Êq츾¶¶Q¼¾­0| Rù!4T)¶ô9WT ;+*ªl ­ºÏŠDDDÝÃ&ê8œËD=ÉdÁ©S•8yR“ ÔÈϯ@ii=ìv;¼¼ä ô…Db‡Vk„ÉdL&Err¸(¥§ áÒ•Îѹ¥¥õøâ‹ر#ÇŽ•_öþŽÀÉ¡¶ö3˜L®S«5mΆºV7ÄŒÃÜö|`³Ù]~÷œ69œ8QŽÿùŸQ\\+¶œ9ûϞŞ=ز%œ…¿¿7n»mî¼Sž®vöPQQ­Xý”“#„P: … ýúÅ`Ð G•€>}¢<:K§¾^ï>9*£Š‹…]õÌf¡ Ñ×× ‰‰¡N§0ñ8!!´Ý‚³Ù*VFUU 'a'¾F”—7´Ìœ‚)ç]ã YK…TؾÕR9WMq¶Ôõin¶\P-å¤Z+ª NᕾÍ*ª€„… $Ä_ ¡Î¤ëCBü¯©-”ˆˆˆ® Ã&ê;vÅŠ[8—‰º ³ÙŠ3gªÚß*qüx9Š‹kaµÚ —Koo9š›-¨©ÑÁb±ÁÛ[Ž´´h¤§ KÆ¢ÿ˜i›rhl4!++Ÿ}¶¿ürJ¥w›…/E*•àá‡SñÒK¿Ç½÷Þ ›M‚²2%ª«}ÛˆÈȶwÒºF"-­J¥ÙmÏiµJqâD0,)""š°ÿ6ÜsÏ|òÉÇÜ·©©‹ýë¿âv‰4(YYO‰÷«¬Ô ++[¶dãàA!xš0!wÞ9¿úUßk &l6;Ξ­+ rrJ—Wƒ¡>> ëR•šÙ)|›ÍµZ#VF;Wƒ¢¢Z çuuÂ.zR©ÑÑ*$%…"!A¡„ãP$%…A¥rï@õ‹ih0´TFµP޹RÎaUCƒëϵJ凈ˆ@DD 2Ò5ˆŠŒ Bx¸0 ½£ÞGOᨠª«kDm­55BËeëõú–ù`Â}œÃD@@/ ¤„P*<\‰%BC…ËaaJúzèuY ›¨}¨ñüó›ðÓO˜6m0-šÊ¹LÔ¥X­6””ÔáÄ až’ãüôé*˜ÍVÈåR„‡"0Ðv»õõ»]ø šž‡ôô±.55Ò#Õ(V« {÷â³Ïöcûö\ØlvL˜03f ÃÈ‘©èÛwá?—D"ÁÊ•3’bÇË/ÿ••þ¨¬ô…Õ*¼¯Q£Êà®N?Î 99á 1¢ÿZ÷ûl?¾üò *+5:4 wß=wÝ5Ä%Hùâ‹xê©árÿ$H¥<þø¯–ƒ>؃œœb(2ñƒõ—_þÞ­3Ø–.ýï¾ûÂÃpäÈr·WídeåàþçCñ²DÈåÂû‘H$HHÁˆ©¸ñÆ^:4 ¾¾ Ìšõ «ðÓO ‘šqÙר¨h@VV.¶nÍÆ¡Cç TúàöÛÓ1ujæuOf³ùù.Pj˜ÍVúŠáSFF23çùŸÍ‹±Xl(-må8;WƒââZ± O¡!66IIabå8NL õxõ¬°ÛžNlßsÌ–j­š.Ÿ_Uèj„ðð@ÄĨÄËbPÅ0£ý˜L1”rTH9*§”£jÊV9“H$ õg€…‡ˆÇB¨(Ì @h¨’í˜DDÔ1l"÷â\&ê , …!ÝÇŽ•áĉräå•¡ªJØ}+<\‰¸¸øÀb±¡¾Þ€¢¢Z &ÈåR¤¦F: íŽÁÀq ê#;»çÎÕÀn·#22ƒÅ‹!Tff|‡ ©w§æf Š‹ëÄ0ʹ"êܹqv··Ü%|r´é9.wÆJ“ÉÒDiĶ=G0UY)œWT4¸ì)—K VGÅĨ\. ¡T@—û>wuC³ØvYS#R §Î¯|óóó©ÐPÿ–P±õX¸^­}<ô‰ˆˆ6‘äçW`ñ⯰oßiÎe"±Zm(*ªu©T:q¢eeõ€à`¤¤D 8Ø€Z­P­¤VkNÕJqHOERRX§®Ê³ÛíØ¿ÿ,¾úê¶n͆VÛ„‘#{cÆŒ¡˜:5óŠÃÞ~85kv 7·}ûF¡°°ò‚׃±Û"—Kñ裷àùç§]ï[rñôÓŸaãÆb¸¥Tú /ïÅv a´Z#n»m **ÚÜuÎA"‘À×× {÷.BDD€Û^¿¼ÜQñt‡#0Ð' 3žn¾¹}‚'­Öè²û]vv1JJêqqÁbøä8ïÊî++58w®¶ÍÁå55„ª¡˜’’ÂÑ«W’’œÎÃ;eØìÌÑâ[U¥wÝ+/¯GU•N¼¾¢BãR]ãå%çÈH¡U/*J8ÅÄ8®SÁÇGáÁwÖ3™LqWEÇŒ)µZ#ΘªªÒºÌ›ræå%[÷;ñµ†SŽ**¥x‘1l¢kç<—)##Ë—ß…¡C=½,êt:#Ž/+•NœŽ›šš!“IÑ«W8bcUP*}`6 }Oª„Ng„L&Err¸8[)==ýûÇ",¬ëüeÿäI5¾úê¾úêÊÊêѯ_4f̆iÓ_UÐûßÿžÆªUÛ±ÿÜvÛ,X0 … cǾ«õÊþiH$ðÁþýKܺcSs³ýû/†Áà<¨W‚þó1Œßßm¯ã¬ @É“_GS“ù¢-uR©/¿||pd»¬ÊÊê[‚§l9"O“& Äw Âèѽ;d€t}½99%ÈÍ-ENŽÐ†W^ÞHL Ã'Ç©;TPèõ&×âìÙœ;WÓr^³gkPQ!´ç9f· áÓ…aTWjqÒéŒm¶ì RTT4 ªJëRɨRù‰TDD bcUb+_ll°^gX,6ÔÖ ƒÐTm­••­áTe¥¶e¿F—`Ý8:vSŒŽV¹ ³wÌ Svê?ÂQ§Á°‰®ç2QG±Ûí(*ªu •òòÊQRR»ÝŽÀ@_ôí%X5L(+k@aa%Ìf+|}½Ð¯_´ËÐî~ý¢»ÔBµZƒM›Ž`ãÆƒÈË+CLŒ Ó§ÁŒÃЯ_ôU=ב#Åxå•íøé§“=º,˜ì?ûì—øä“}°ZíW40|ÅŠ»ñÈ#£¯é}]ÌŽGñØcï»TSÉå2L™’¿üå!·¾Ö…¯ûA›ï[*z÷ŽÆÎê°ßw¥¥Bð´m›<ùbâĸóÎA5ªc‚'‡ššF±ýÎDUVj ‘H”&¶ÞefÆ#==Je÷i£6™,8{¶Ú)„j £ÊË`³ ?/QQ¢ºb[¹ÝnGuu#ÔêTVjQVÖ€êj-ÊÊêÅPJ­n€VÛÚêåå%«¢¢£… *&&QQ-שZZ—;w…Xwg·ÛQ[«Ûõ*+[[3«ªt¨¬Ôˆ3Ä †Ö*8¹\ŠÐÐDEµî¤ˆðp×ó°°î¬HDÔ³1l¢«Ã¹LÔ^ššš]B¥cÇÊqòdt:#¤R B‘œŽÀ@_ØívÔÕéqæLµØ&ªt©V0 ÉÉá]zÇ&­Öˆ;r±qãAìÝ[¥ÒS¦dbÆŒ¡><媂5V®ÌÂwßåaèÐ$ÌŸ? £G÷¾à~55ÈÈX6¬²³‹Ûœe$•J˜Šÿüg!är÷~üC|óͱ ^×Û[޼¼—àç×~áš5;ðÆ —H$J%˜;w,þð‡ ÞRTRR'OÙÙ%P©ü0qâ@ÜqG&FîãöïÁ•¨¬Ô´T?µ†P55J%HI‰pi¿0 ¶]¿ožÒÜlAQQ-Ξ­>/ˆªAYY=¬V¡z$""½z…‹íxÎAT@@×® 3šQ^ÞÐ2̼õT^.TG••5 ¦F'~-´ìÆ&ì¶å¥Tâ ó˜•[«%éÚéõ&TT;(:ÎC)G‹¦VÛäò8Çpóèh•KÕTd¤R9ÛwöÖT""º& ›èÊ;V†eË6q.¹Ec£ yye8z´ÇŽ•"7·Tœ¤Tz£oßhÄÄÁ×× F£•• 8q¢Zm$!àpJŽ€©3í.u=Ìf+~øá¾úê¾û.6›ãÆõÃŒÃ0~|ÿkª¨¬ÔbÍšøüóýèÛ7 L¾l+ÚŸÿ¼½{Gâæ›û`úô·pâDE›ÓÇ?ޱcû]õš.¥±Ñ„ôôÅhn¶\p›T*Áúõ`úô!n}Mg6›>ø7ìÞ}J|Ïr¹sæÜŠ˜˜`¬Z•…ðð¬^=#G¦¶Û:.¥¤¤[·fcÛ¶dg#8Ø_lµ92Õ£åå bøä¢êëõɤèÝ;Ò¥/==¶[Ð4›­bkÞù•Q¥¥ubSX˜IIáHN» Œê.‹ÕjCuµN  œÃ©ŠŠÖÊ)çYR~~^ˆ Ft´ ÑÑA-ÇAˆŒ B\œpÜ™víéŒF³K•”sµTMM#**„bÕÕ:—ÇùµP‹­Á”ó9ÿ¸IDÔ¥0l¢K««ÓcÍšøè£½<8Ë–q.]­¶ ¹¹%8zT—rs…ݯl6;‚ƒýѯ_ŒØR¡×QTTƒü|5Ìf+¼½åHK‹FzzœØ׿L—¯8_[ƒ¾o¼1Yô}­¦ŒF3ÞyçG¬_¿*•,˜Œ»ïzÅQV« +VlÁ/¿œg}8‡/#F¤â³Ï~wMk»”/¿<ˆ'Ÿü¤ÍV6™LŠ[oMÃGýÛ_×™VkÄ„ kÄ©¨¨ ìÞ½¾¾^¨¨hÀÂ…ñÝwy¸ï¾›°téýÀëž¶nÍFNN ‚‚üpûí0yr~õ«´Næ””Ô!;»5|ÊÍ-VÛ¹\о}£† ÿ­÷„ö³ÙŠÒÒ:1|:s¦5Œ*-­g%…„ø»´æ9Q]yXûÅhµFTT4ˆ§òr¡BªõrƒËm¾¾^ˆ‹ ÛöââBÄæŽë»ãש+3›­.UR­ÕR­!•c ºs5œŸŸ¢¢‚\*⢣­™Aˆ*¨ºrE3Q7°‰Úvþ\¦Å‹ïÀÝw…D¹Ltq558z´Ô¥b©¸¸€ÐBÒ§OBC •J Õ6áôé*ÕÂn·C¥òkÙ.F¬XJMôHkPG9v¬ ›6ÆæÍGÄAßwß=Ó§¹®ÊA›ÍŽÏ?ßÕ«w@§3bÞ¼q˜3çÖ«jûÒëM˜;÷#üôÓI¼ñÆ,dfÆcÒ¤µÐéL°ÙlÉ$øþûùèÛ7êš×y1÷Ý÷ìÙS›­í]ád2)Ž]Ñî OªÄ¯~µ °aÃŒ“ærûÖ­ÙX²ä+À‹/ÎÀÔ©™íºž+QRR‡íÛs‘••‹Ã‡ÏÁÏÏ ·Ý&OcÇöë4óÊóØÁSvv1Ž+ƒNg„B!C¿~1âü§ŒŒxôíÕ#(‹Å†ÒÒºófD mzÅŵb¥Rù¹ì”çJuçÝÅM(/¯Gy¹PUZê8Ö ¬¬®s¤|}½«BT” 11Aˆ‰ CŠØX¢£U ¤:!›ÍÞR ¥u ¦„¹a -í…6>™LŠððqx½£*.*J¨Œs‘!„'"êæ6Ñ…8—‰®„c·ªììÖaÁÂnU±±ÁHJ ƒJå ›MBZP FCƒŠb\w÷”¶Ì3gªñõׇ±iÓaœ>]…øøLŸ>Ó§F¿~1×ýü{÷bÙ²MÈϯÀŒÀSOÝŽˆˆ€«zŽŠŠ<ôл¨¬ÔàƒÅСI€ƒÏâÎ;ß<ôÐ(¬ZuÏu¯÷|uuzdf.¹änx2™/¿|x`„Û_ÿ|ß|s[¶dãí·lóvÆ€^ØŠO?ý·Ý6/¿<ÑѪv_ו¨¬Ô`ûö£ÈÊÊÁ/¿œ——cÇöÃäÉ?¾§«´Ùì8s¦¹¹%-mx%ÈË+ƒ^o‚··ýûÇ`Р±¯wïîF_ŒÕjCYYýÃÊÏž­FQQ­Ø~䇔”p¤¤D %%½z…!%%ÉÉá>oÌôzÊÊê[Úô4(-­[öÊË…“óŒ!…ئ'„P­ÕRññ!ˆ‰ î».vGf³UüÞ Cë5b›fE…ååõ¨®Ö¹ì¬ªwQtÌ sþžGG«:ÝïH"¢.†aµâ\&º˜ÆFŽ-ƒ¥œœb K±±*$&†! À‹jµ……•0™,P(dèÝ;ò‚ùJÝeÉ•*/oÀæÍG°iÓa=ZŠˆˆÜqÇ`LŸ>C†$º¥bðܹ,Yòvî<1cÒðüóÓЧÏÕWåå•áþ•ÊÿøÇcHHu¹ýË/â‰'6àèÑ uÿçÿøÇÏX¸ðËËÞ/!!ÿýïb·¿~[Ìfëe«jöî-ÄŸþô9jjtX¸p*zhd§Ú¡³¦¦ß|#O{÷B"‘à–[ú`Ê”LL˜0ÁÁ³ Æjµ¡°°ª¥úI¨‚ÊË+ƒÑh†¯¯ ˆÛï23㑚Ù©¾îÍf³£¼¼çÎUãôéjœ9SÓ§«pæL5JJê`µÚ ‘H«B¯^á.aTrr8bcƒ{T ’ÁÐ,VBUT8ª¢„jGµ”s àƒ˜UKø¤BLL°Ë娨 UוØlvTWëœæƒÕ» ²wœfñ1þþÞ.íz11Áâ {Ç®ŠááW÷Ç"¢„a BV®Ü†Ï?ßϹL“É‚cÇÊ›[Œìl¡º °°6›¡¡J$&†ÂßßÍÍÂ_KJja³Ùè‹ôôXôïƒþý…ª¥´´èû?ÞµµØº5›7Ægà‹É“30}ú`Œ™ê¶tC3Þzë{¼ýöHI‰À /ÜÕæsWâçŸ ñÛß¾‡Ì̼ûî#ý+þÙ³ÕèÕ+üz–}QÓ§¿…ýûÏ\Ñ}Y†ÈÈÎ3Þh4ãõ×ÿ¿üå œˆ5kf^Sà×Þ4¾ý6Û·çâ?ÿɇÕjÈ©˜2%'¼êJ¸Žf±Øpê”Z¬~¨r47[àïïãZ§ddÄ!99œ-àBÓ³g…J¡„ êôé*ÔÖ6¼¼ä.PÎçݹ-ïRRee (/ÎËÊêQZZ'TŽŠ©T‚ðð@1|ŠU9…QB0ÕS¿Ž]ECƒjµeeB[¦cnXe¥cv˜A¼¿——QQB›žL"&&¸å:¡Z*<<°GVaQǰ©'sžËàƒE‹¦bÚ´ÁüŸòÄjµáäI5²³‹ÅÓÉ“Âpn¥ÒqqÁð÷÷†Édw“„69ç¸b.¨€é‰´Z#¾ýö(6m:ŒÝ»  PÈ1aÂÜu×ÜzkÚ5í$w)[·fã…¶@§3â™g&âá‡G_óÿÐîØqsçþ·ß>o½5»S…„11ÀŸÿü ýv s§ãÇËñÇ?~ŠãÇËñÄ·á‰'Æwª¯§³ÆF~øá8²²r±sçqfÜpC/LžœÉ“3ºLu«ÙlE~~…>åä” ?¿f³>ÈȈsB¤¤0O/¹Sf赆OŽ@êÌ™jqw8•ªµ-/9ÙB…#99¢GÏ¿±Ûí¨ªÒ¡´T¨‚©z—ËŽ;ÖæŽÊ¨ØXââZÃ©ØØ`·ÿ[AîÕÔÔÜR ¥׫ÕBµTe¥P-UU¥7¹p„qqÁˆ n9¾ïŽëzZÅ7õ ›zªóç2ýßÿ‡Ÿ_çKí§²R‹Ã‡‹pøpŽ)Bvv1 †føø(­‚¯¯MMfTT¥är¹©©‘N-p1HOã U'F£;wÇ×_ÆÎÇa³Ùqë­i¸ë®!˜0!½]þ»*(PcѢػ÷4fμÏ=7õºJù?þx.ü¿ùÍ(¼ðÂ]® ©«…M€ä¾÷Þn¬^½qq!xõÕ™6¬—§—uIF£?þ˜¬¬\|÷]t:#23ã1eJ¦LÉìrMs³Ç—‹P99%8uJ ‹Å†  ?±õÎ@ÅLJxzÉŽÝ.´åµVCµ†Q¥¥õ°ZmJ%ˆ‰Q!99))áHM@¯^áHNG\\H§û}â &“¥¥ªee (-u­Œ*+¢&U IDAT«wiߊˆ+¡á„ãX¨”éÜÕ‡$àUUZ±J­Ö ´´¥¥õâ÷¼®N/Þß¹EÓñ}v|ïãâ‚Ø£Z\‰¨[`ØÔÓp.SÏa4šqìX).ÆáÃçpèPÊÊê!•J/fTW7Âb±Âßßýúň»Á¥§Ç!--ºGÿÅúbÌf+vï.À¦M‡ñí·Ç`04cĈÜu×Lš”ÑnaœVkÄ믋÷Þû ýúÅ`åÊ{®»åõ­·¾ÇË/gáOš„?üa‚›Vê^]1lr(.®Å³Ï~‰Ÿ~:‰ßüf.œ ¥²óo¸àøß¾=ß|suuzôëƒ)S„Ч´´hO/ñšfä啹 !/,¬‚ÕjCHˆKø”€ÌÌx ß©Ú4;›æf Ϋi™ U%VF9SíÒ–ç¨~r´ç¥¦ UQuN˜§ÔÔ4Š;ì9*£„Aæõ(-m@U•V¬”ññQ !!±±B8ᨎ…`‚UêŸÑhFII> Adk ¥VkÄM…B&¶êH9~:Ën£DD-6õ••Z¼òÊvÎeêÆÎ«Á¡CçpäH1.B^^Ìf+üü¼è‹æf  °ÙìP©üž.Ì5q´Â¥¤Dð/З`³ÙñË/g°eËlÝšúz† IÀ´iCpǃخ¯ÿÕW‡°bŘÍV,X0³g¸îï×Úµßâµ×¾ÅÊ•3ð›ßŒrÓJݯ+‡M7IJe›áã£ÀêÕ31fLš§—tŬVöí;;r±}ûQTVj’É“30eJ22â=½Äë¢×›—Wæ2êÌ™jØlvDFaРx—Š3w.O£1¸´å=[#QŽ žà`$'‡!55ÉÉá-'!ˆâ9.d6[Q^ÞZUZZ‡’!˜()©s &¼¼äb{–#€Š‹ ABBâãCX%ÓEX­6TWëÎ ¤„PÊqNgïâAU”óåÎ>ˆº†MÝÙlÅ»ïþ„µk¿…JåǹLÝ„ÁЌÇ‹pàÀY9R„ƒÏ¡¡Á™L ¥Ò‹z½ „ã0p` ˆÅÀqˆ‹c5Û•ÊÉ)ÁæÍ‡±ys6**Я_4¦M‚éÓwÈœ*çʘٳGàÙg'»¥"`Õª,üùÏ?`õê{qÿýÃݰÒöÓÂ&@¨\X²ä+lÞ|3gÞ€å˧#(¨kµ¤Úlv>|YY¹Ø¾=%%uˆÁÔ©™˜<9C†$t‹_t:#rsK‘“#ìÀ™]Œ’’:@|| J¨ŒŒ8n‘~…ìv;ÊÊpæLΜ©qiË++kmË‹ Ã'G%”c·<þQ¤mV«­eÓŽÖÊH8ΫdbbTb"†Rññ!ÜU¯ Ñj›ÄJ8ç=G U]­…Í&|Ôóö–ŸW,³w´jr^¹æîÌy.Ó¼yã0wîXøø(<½,ºUU:üòËi8p{öàÔ)5¬V;¼½°Ùì0›-H„íà33ãñÿìwxUÛÆïM…ô^7½÷¤Hè%AH@E,XPQ_Ä‚bE^ôA$ %„ð JM²¤÷dÓ³é½m9ß“$”M¶äü®k¯M²›™gç9svÎ=Oñña„%??ÛaiO¯êäæ ÃñcI(,¬—k‚ÈÈ DFÁÝ}dº‹‰DìÙs_~.ן}öBBdSógëÖؽûolßþ{,D&ÛNTEl’—Š þ!Ÿ~úæÍó•·I÷MJJ NJÁ©SÉ((¨†••ÂÂ|1¾?ÆwT©è‰ººVܼÙ#>¥¤”@ h‚šNNf¬`ooú};HººD}" z?KkÛŒ£ s8;›ÃÕÕ..pqa)ºHî¦yŠ‹ëØè¨ÞbTII:;Euu5XZ²âSïè(©8A·r ˆ“ŠP%%u}~/-í©Æáp`n®ß'"ª'*Îöö4UB¡ *6©"´.“rCANŽW¯æãܹL$%¡¶¶Y ®Î,n¹l´’·· ½»>JKë“„èhÒÓË`aaˆ… ˆ  ‘M9MN.Á[oýÜ\Ö¬™Õ«gÊì.óæÍ1øé§‹Øµk9""e²ÍáFÕÄ&€I3Ú´)üq `ëÖG`jªÜÂpff9ñ”•USS=Ì›ÇO“&¹¨d¤DEE+>1Ï%hllƒ††ÜÝ­Xñ) Àîî–*y F‚†&-//O€¼¼*äæ —'@qq-D" ÔÕÕ`kkÜ-@™ÃÅÅ‚ý™Ö†8Ò”­Þ©zee (.®EIIÚژ΄Œ(aÀ¦åI…æÙVV†*%4«:55-}Òôz R¥¥õl 603Ógë„q¹&¬ioÏüÎq ¥TlR%h]&夫K„«W™z(×®¢  ]]"öu 58:š!8Øöðó³£…»eDuu3Nž¼‰èhø04‹ùóý„‰G<]£µµ_|qûö]BHˆ#¾øâq89™ÉlûÛ·ŸÁŽñøî»§°`A€Ì¶;ܨ¢Ø$å￳ðöÛ‡ÑÚÚ…­[«ÌgÌϯBll NJAJJ u0w®7ÂÃý0uª‡JÏ_|~ [€üæÍb¤¦–¢¥¥ÚÚðñ±ŸŸ=˜x..ætQ>„B1 «»Å§*VˆÊϯbSÉMLôàâÂDB9;›ÃÍÍÎδSÞýPW×Ú+"ŠIÓ*.®í~Ô¡½£45ÕaccÌŠPŒ(Ñó3•‹––În²ŽõµT€,-­CSS7JM CV|ârMØh8*BR(£*6©BìÞý7víú‹ÖeR**•€‹³‘•U‰úúV¶ÃŒ¦¦:lm`©S=àçg  hhÐ/gYÑÔÔŽÓ§S„þÉŘ1š˜3Ç‘‘A˜6ÍCnwåþú+6D¡¹¹~¸?>^¦çðž=°iS ¾úêq<ñă2ÛîH ÊbÀ\ÈoÛv¿üò/fÍòÂgŸ=KKÕé‚VRRÇ OII|èèhaÆ /„‡ûbÆ /¥èÎ7$‚¼<ù”’RŒ´´2tvŠ «« __[6Êßߦò6Y%(+«G~>#@åäT¢  99•¨ªjГ’çäd7·žˆ(š’wÿTW7÷#ŠŠjQRÂü^^Þ±XÐ×;;FŒ R=b”©J‹ÑªH}}+›ŠY\\‡’’ÚîßëQ\\˦éIk…1ÑPŒ¿Laoo.ׄ6_ PT*6)3„ÄÄððñÇ'ÑÐІիgâå—§Ñ: DCC®_/ÄéÓ)HL,BII-[ACC ææðñ±ÁÔ©˜>Ý\®  ‡¶¶.œ=›Žèè$œ?Ÿ˜1Ñ‘˜3ÇG®çLcc>ø QQ7„Í›#af&ÛŽ1‡]ÛoþÍ›#ñ ¡2ÝöH êb“”«WóñƇPWׂ?ŒÀO<¨ró@ÐˆØØTœ>Š«Wó ®®†©S=æ‹9s¼GMăP(Fvv%nÞ,fSð²³+ I`h¨ÃvÀ“ PVVFò6Yehjê@^ž W4ó³4%OM;»qpuµ€››%\]-àîn  •F‡¡P̦hÕÞ!Ó;UË€MÉëžgo?VVF4"Mɚ؈¸Þ>/.®EYY=D¢’Ë5—kÚýl ’66Æ4EBQ>¨Ø¤¬$&aÓ¦càñбdÉx¼óNø°·^§ôO}}+RRJ‘˜ÈÇÅ‹9Èʪ@SS;ûº®î¸ºšaòdW,^ OOk9Z«útu‰pþ|¢£“pöl::;E˜2Å  ó…ÁXy›ˆsç2±~ý „àóÏ—`ölo™ïãÌ™4¼ðÂÏxýõ9xã¹2ßþH0ZÄ&€‰TýüóXìÙs“&¹à‹/–ŒH×CyP_ߊøøtÄÆ¦àâÅlˆÅLœè‚°0?„…ùÀÂBu¢»BG‡éée}ŠTC"!°°0D@€¹ ´‡¿¿= h>YÒ;%/?¿ÙÙ¬ %̰±1†‹‹9<<¬ºÅ(¦6”²u•TD˜T-F€’ŠQ½…©ÞÑ1LÁêžÈ(i””ݸQ#X« "‘eeLŸ_Ãú»¨¨EE5lŠž††¬­ûˆP½E)E¸¦£P(·AÅ&e£¬¬|11ŒgŸ}H¥ïæ·´tâܹ ÄÆ¦àܹL´µu!(Èaa¾÷—«š‚Û½hnî@JJ)’“‹ÁãƒÇ+Byy8i“ûîè'{øúÚÐô¯a@"!()©CNN%rr*‘›+@NS ¼¥…© eaaÀFA¹¹Y²‚M ’AÓ]ŨÊÊF6EÏÀ`,Láà`Òýl .×ŽŽ¦*•žýô±a;ùü,Xð xÀûö=§ÔéX£Ql˜H‹¯¿ŽÇ®]! ÀÛ·?ggsy›5ìtvŠpáBNŸNE||:êë[áãcƒyóáÉÃÃJÞ&Ê•ªªæ>â“´ž¦¦:¼¼¬ÙîwöpuµPi‘RÞ””Ô!/¯ ÙÙ•ÈË ;»¹¹•l4†‰‰^w S˜\ú07§×²Dš¢'ˆáókºÌÏÒÂåÚÚpt4ë 1ÊÑ‘(lmÇÑú˜J†P(fG>¿¦WDT_¿«Åúºç™¢¬¬ •úúˆBQp¨Ø¤èˆDú(\Å‚þøä“G‡í®wCCÂÃw`Ü8]DE­ÂرZòŸ‘b´ŠMR22Êñúë¿#7W€7ßœ‹—_ž>jE"‘W®ä!66qqiáìlŽyó|1¾üýíFýB>¿<Sÿ‰Ç+Fzz::„ÐÓÓ†¿¿üýíhÀ@.¬­K€WE*+‘›ËÔ‚Êή쎊 ¾¾`h¨ÃÖ‚rsc¢¡ÜÝ-iÆ0!4±TQQ- «ÙŸÚô¤çq¹&¬(Áül.ׄF *!••(,¬Ÿ_ÝýÜ3š›A¸·éèÈDÁI£âllŒi÷< ehP±I‘9> ›7Ç °°Ï>ûÖ®MC²eˆ@ÐÄ JRq©²²`k;ææú‹™\òššé`òdWL›æŽÐPwØÙ“ó'}dgW"&†‡èè$ðù5pp0EDD "":Úáßóðæ›‡ÐÒÒmÛÅ‚ö/¡PŒeËv£´´'N¬U˜ÔÁ¡0ÚÅ&€]¾ÿþ¶o?+lßþĨ«û&‘$%ñ›‚Ó§SQTT c6âiüxGº0èFZ€<)©¨»T1rr‹%07×gŧ€æ™Öjk[ºÅ'rr*ØNyÒy††:pw·„‡‡%ÜÝ­àæf OOšŽ7œ44´¡°°EE5·DDU³~áp8°²2ì%F˜öJÑ3¾>­Ÿ¦lÔÔ´€Ï¯FAãs©YXXÃÖ[ÕÔT‡½=#>ö¤œœÌ¨E¡ *6)"99•ؼ9çÏg!,Ìï¿¿P!#5”‰ÊÊÆ>ip))%š¦ðö¶Á¸q:hmíBn®åàp€  LʈKvô‹EÕ"&†‡˜˜$dfVÀÒÒX¸0öò6¯_„B1¾ü2ÿýï_˜7ÏŸ~úLM‡WüÙ°áO;–ˆØØ7àäd6¬û)¨ØÔC^^Þxã’“‹ñÚk³°víìQéš–VÖñ”Ь¬ ˜šêaî\_„…ùbÊ·Q{\îFkk'RRJÙx<^JK™”pGG³>â“·· íl;‚Ô×·"+‹‰€Êʪ@v6ó,º15Õƒ‡#>yxXÁÃÃnnV´Hü0ÓÚÚ‰ââZ6*†‰Šb"e**zêD™šê±"#HõÔ ¢B¡òQW×Ú'"ª·%='µ´4XáÉÉÉNN¦pv6‡““ù°_çQ(J›‰ººV|ùåiüöÛxxXaÓ¦HLšä"o³” 7o–ô©³TUÕ ‡.×~~vðó³…‚f\¹’‡ÿÍEKK'Lê†iÓ<0i’+½“••8~ü&bb’ÀãcÜ8],X€… ñàƒNJQƒ„ϯÁªUû‘“S‰-[áÉ'' û>ÿü3ëÖį¿¾ˆ3<‡}#›ú"‘ìÛw Ÿ~z \® ¾üò …^‡›üü*6â)9¹úúc0k–ÂÂ|1c†§Ò§’55-àñŠØîw<^1êë[¡©©wwKqÙännô†Ë#4õ ²³+“#`S€¬­Øè'©åêj:Þ‡¡PÌ QÅŵ((¨îŽŽbŠ— …b€¾þ89™ÁÑÑ ÎÎRa NNf4"J ihhCAA5òó«PPPÝç!­e`0ÎÎŒÏ]\ÌYAÊÑѺºÚrþʈBÅ&E@(cïÞKøúëxŒ«‰wÞ Ç’%ã•bA-oêë[Ù‹dæ¹A#8MáëkÛ-.ÙÁÇÇEEµ8{6ññéHK+ƒžž6zÈS§z 4ÔFÉ‘ººVœ8qÇópíZôô´1ož/""‚0eŠ›RÕ¨9|øÞ{Ìñßÿ.‘¢ÎåX°à¬Z5o¾9oØ÷7’P±éÎ×býú?põj>^|q*Þz+ŒF£€éÚ*xº~½ZZ˜>Ýaa¾˜=Û›¶È¾|~M¯è§b¤¥•¡½½ ººÚðõµek?ÑúOò‚éŽ'@v¶T„b¢¢::„PSãÀÎnÜÝ­ºSò¬àæfWW Zwh„‹%(/o@QQ “ŸÏ½…(33}8;›÷¢˜‡ƒƒ)õ•’AAEE# ªŸ_ÂÂjäå1‚TiiD"& ÎÊÊNN¦}DGsØÙ™(Õu.…2@¨Ø$oNŸNÅ–-ÇQYÙˆ—_ž†Õ«gRÕû.´´t"5µ”–’“‹QTT °µ5†¿¿=˜B¨~~v00ƒÎNþý7gΤáìÙtTV6ÂÖÖ³gû`î\oLœèBS-äHSSââR“„K—r ©©Ù³½ˆ™3=•îb«©©ï¼sÇßÄÊ•ÓðŸÿÌ‘ñÕÔÔ°°ípp0Á¯¿¾¨rÑTlº;„¾üòqL˜à,o³†ššÄÅ¥âôéüóO.ࡇ\æ‡yó|iºÃ‰$Èή`Å'¯99•‹%°°0DP=‚‚¸ äÂßߎ^ÃÈ ‰„ ¸¸™™ÈÉ©Dffrs+‘—W¡P 588˜v§áYÁÓÓžžVàrMF}‘ý‘D$’ ´´ùùLtŒTˆ*,¬Fyy!PWWƒ1+F0éYLZž­í8z3ZÉ Å(*ªE~~U·ÏkºE©*¶.˜¦¦:ììÆÁÅÅ..æpq1‡««%\\ÌhM=Š2CÅ&y‘œ\‚-[ŽãÊ•|DDbãÆ‡acc,o³†®.ÒÓËÙ¦7o– /O‰„ÀÌLŒ Ä„÷ÛõY0ÔÖ¶àìÙtœ=›Ž ²ÑÞ.D@€æÌñÁìÙÞðò]Euöö.œ=›Ž˜þú+0uª;- ÂìÙÞJ»PIH(Ä«¯þ†®.¾ùf)BCÝGlß/½ô nÞ,Æ™3oÂØXõêCP±éÞTV6âí·ãܹL<óÌdlØð0ôô”ó\.ššÚqöl:ââÒpî\&ººD?Þ‘-0N¿ƒNkk'’“KÀã!)©IIÅ¡®®77&ý.8˜IÁss³¤‹c9"ŠQXXÍÖÊήDFF9Š‹k!‘èêjÃÝÝžžÖðò²‚‡#BÑîHÓÞÞÕ-D0QP½£c¤ µ´4XÊÑÑŒ’qv¦µ‚”‘ææÖ×ùùUÈÍ­bE©Ž!¦&˜››ew¥èâbc:·R*64eeõøøã“ˆ‰á!8Ø~à`®¼Í’+"‘¹¹•}Rá23Ë!Ša`0~~v}:çÜ)l¿°°§N¥ >>II|hkk⡇\1gŽ7fÍò†……>EJW—.dãØ±$œ=›ŽŽ!&OvEdd ÂÂ|•ú®X,Á×_ŸÅ7ßÄcútOlßþĈv€;r$¯¿þ;Ž_‹€Õ¬ÛCŦsôh"Þÿôô´ñÙgaÚ4y›¤´·wáܹLÄÅ1Q¯ÍÍðó³Ex¸ÂÃýF$õUÕ(/oèžøàñŠ‘’RŠöö.èéi# €‰~bj@qan®/osG=mm]ÝÂS23+]ôôr¶²••<=­ºE(kxxXÂÅÅ‚FƒË‰††¶îT¼þkI# œÍ{ED™Ñ›J†DBظÜ\òò((¨FNN%jjZcÆh²~vu5‡««œœ˜¨(šROQ¨Ø4R´¶vb×®¿°{÷ß°´4Äûï/DX˜¯¼Íq!((¨îSgIZbìX-øøØÀß¿'bÉÉÉì®áÝåå léä䘛ëcÖ,oÌ™ã)SÜhAX9#KpåJŽMÂéÓ©hjjGHˆ#""ñðÃþ03SþÅFmm ^ye?nÜ(À,ijÏ>4¢é ˜1ã ¼ð•«ÓÔ*6 ŽššlÜx'O&cÉ’lÚ¡Ô‚îp#ŠqéRââR—Ššš¸»[",Œž||läm¢R"I•UÄD>x¼"ðxÅÈË«!¶¶Æ rè ìáãcKG Bee#23+™YÎ>çæ Š¡©© xzZu PVðô´‚•­Ý%OÊËúDC1‘1L­ i}( ƒ^ÓÌàêÊDÈØÙÑ´û,ííB¬[7Ï??eÔÜ*/oè±Ä¤Ä55u@SSžžÖÝ5–qÉÕÕòžÅñjjZpòd2¢£“P##¥ëR¦êðxÅ8v,'NÜ„@Ð__[DF!""P¥ŠÉ&&òñâ‹¿@KK{ö< __ÛÝ?!O>¹õõ­8yrJÏ)Tlº?NŸNņ QàpÔ°mÛ#˜7oôÝà,b±ׯâôi¦³]YY=¸\Ì›ç‹ùóýä@¿g†@SS›z' jk[ ©©//k¶öSPŽŽ¦´–‚ Š‘—W…¬,©ÅQåå ##xyYÃÝÝ ^^L4”»»¥Ò¦Å« B¡%%u}:§ISó*+0iyRQÂÍÍ¢@¡lu3G;B¡|~ rsÝ)yäå1)yÒ–&&zpw·„››ÜܬàâbOO«ȧŒ*¨Ø4œ\¾œ‡M›¢‘•UåË'býú0•V”kjZXQ)%…y®®n†š..Ý¢“çãc3à/±¦¦vÄÆ¦ &†‡þÉ…®®–Òv)SUrsˆŽN±cIàókàèh†Å‹ƒ¤’é({ö\ÀÖ­'0mš¾ýv™\º[ýò˿ؼ9qqoÂÝÝrÄ÷?’P±éþillÇFãðለĖ-‹i]BArr bcá)?¿ †˜;×óçûcâDúý#ŠŠjûP©©eèêÁÈHö}(ZGH±hllCFFE*+«­­PSãÀÞÞ>>6ðòbRñ¼½mhm4¡©©ƒ$¤ÞÑ1êêjÝ«ÍáæfÙ]°š¡h¤¬òQYÙÈv­d:YV"7W€ÆF&mÖØX–puµ€››%û )Ï”!BŦá€Ï¯Á–-Çqút*¦O÷À‡FÀÍMµƒMMHI)a‹w''£´´ÀåšÀßßžXòõµt®xkk'ΞMGt4ÿuu5¥îR¦Š”—7 &†‡£G‘ž^ CDD 22Hekµ´tâÍ7!66o¿†Õ«gÊåÎ{mm &OþëÖÍÁÊ•ÓF|ÿ# ›†ÎùóYxûíÃèèbÓ¦<òÈò6µÙb± IDATIéÈʪÀéÓLg»´´2ëböl/„‡ûaêThkÓï%Y ŠÙγL ¨"ðù5''³náÉ\x{Û¨tT§2BAqq23Ë‘‘QŽôt¦&TQQ-!02Ò-¼¼¬àåe¸ºÒZPŠ‚P(F~~“]‰¼<òó{jC™›ëÃÕÕÎÎŒ%ýY•¢×G A#rr±1+«¹¹Œ%­Ýfd¤wwÆÇLDeaa(gË)J›dISS;¾þ:{÷^‚££>ü0Ó§+qV±X‚œœJ$&öÜyÌÍe:ÃYXöI…ó÷·R7¬ÄD>ºŽèè$…b•èR¦J44´±u²®]+€¾þX„‡ûañâ`Lœè¬Òé%YYxé¥_ÐÐІï¿“'»ÈÍ–õëÿ@RRΞ]uuÕ¬ b“lhiéÄ'ŸœÀ¯¿^Fh¨;>ýôQØÛ›ÈÛ,¥¤¨¨–xJJâCGG Ó§{bþ|?̘áE‹ñʘººV$%õ ššÚ¡­­__;ÚãâKKºRDš›;Xñ)=½eÈʪ@g§ššêðð°êåãc#—¨aÊ!„ ´´yyUÈÉ©d£¢rrl§<==í>ÝÒ\\ÂÞÞ„F*UUÍÈÉ©Dnn%••UÉúÚÐP‡ <<,»Sh­U:ƒ‡r_P±I…bìÝ{ ß~û?p8ÀúõaX¾|¢ÒN¬UUÍàñŠ˜ÈGRRRRJÐÒÒ -øûÛ±E=ìdR²¦¦G&â·ß.#/¯ ~~vxüñ,ZLC怶¶.œ9“†èè$6ÊlÎ,Z„éÓ=FE”ÙÑ£‰xç(x{Ûà‡ž–ëb&9¹óçïÀ¬’«à5’P±I¶Ü¸Qˆ·ß>Œââ:¼õV^x!Ti¿¯ §O§áôé\¹’uu5„†º#<Üsæxé åÎBŸ_Ý-@áúõBdgWB,–ÀÆÆÁÁ\; 8ؾ¾¶4jFA‰$È˰ÑOiieHO/Cm-ÓmËÞÞVðñ±·· ¼½­©@®€ÔÕµöIÅ“Ö *-­!ššêpp0eÓñzRò, £C›ù(µµ-Èʪì+“#@ff+B™™é³ÜÝ-áéi 77KêçÑ ›†Êéөزå8*+ñòËÓðÊ+3``0FÞf ˜ÎNRSKÀãwG.ñQZZ55œÍÙVÅÁÁpw·”iEBB!öî½„ØØèêjcÑ¢`<ù䃴ó Šñ÷ßY8v, ññièê!4Ô‘‘A ó5Qfb±[·žÀ?^À‹/†bãÆr]´B°pá7°¶6ÆîÝÏÈÍŽ‘†ŠM²G(c×®¿ðÍ7gáîn‰/¾X??;y›¥ôÔ×·">>§O§âÂ…,ˆÅL˜à‚°0_„‡ûÒÔƒa¤­­ 7oãÆB$&ò‘ÀGCCƌф¿?ýâ„à`Z‡DÁ©¬lDZZ23™H¨´´2ðù5H ÆÀÓ³'úÉÛÛVTPT@ÚÚºº;ãIÓñªØß…B18llŒØ‡nn–ðð°‚››í(­dMÈή@f&SÃ-+‹¢ÚÛ»ØúmV½–pr2§7ºT*6Ý/iieØ´)W®ä#""7>¬Eùü6Ç+BZZ„B1ÆÓíŽV²Gp°¹Ã"šuvŠ„}û.!5µöxî¹)X° `TDÈ(:‰‰E8z4ÇóPW׊pÀ¢EÁX°ÀÔuªhjêÀªU¿âßs±cÇ“ˆŒ”¿ÐÃÃoÂÅ‹ÿQŠùFVP±iøÈϯÂ[oFBB!^x!ëׇÑ;2¢¥¥çÎe"66çÎe ­­ \„…ùbþ|p¹4Bc8!„ °° |$$"!œœJH$\® ‚ƒ™(íp€—— ]ô(8­­l¿b±ššêps³ìŽ€²‚‡ÓÅÒÖvô\ߎ¨Ø4X‚&|öY,¾ŽÀ@{lÚ´ÁÁ\y›uGšš:pófQ/q©§Å°·· [d“i1l6¬¶Ô×·bß¾KøùçÐÒÒ‰… °bŪf!ie‚ϯÁÑ£‰8r$……Õpq1ÇâÅÁX¼8xÔ†«óù5X±b/Ú°oßó 1N !˜5ë Ì™ãƒwÞ —·9# ›†B~ÿý>úè8ŒŒt°mÛ£*QoP‘èìáâÅlÄÆ¦ >>õõ­ðò²Fx¸ÂÃýàáa%oGÒ뢄>™GSStt´Ø›mÒ¼ÑvƒE‹%((¨FffRSK‘šZŠ””44´±ú¾¾¶ðñ±…Ÿó¬LÙ£ ±˜¡a¢YYÌsAAD"Fœpr2ƒ»;#’±·7Qéš¡ªFg§99=þÍÈ(Gvv%**càînook6ŠÑÓÓŠF»)'Tl(BìÞý7víú FF:ظñaDDÊ¥Õ‹%Èήd…¥¤¤"äå1E¼¥õ ¹æÂÇÇcÆhŽˆ]åå øá‡ó8xð*ÆŒÑÄŠSð쳓éEœœihhCt4GŽ$ )©&&ºˆŒ Â#<ÿÑJsåJ>^|ñgØØã—_ž—I]2YŸ†W_ý ×®½?ê 0R±id¨ªjÆÅñã7±xq06mŠ„©)«eH$Á•+yˆ‹KEll*‚F8:š!<ÜóçûÁßßNa®-T‰„ '§7oãúu&ý./¯ „89™á˜HïG™—  ¥¥õ¬ð$¡ª«›ÁápÀåšÀÏÏ~~vl­ªØ…bäå1]Ò¤BTvvŠ‹ë@ÁرZpueRñ\]™H(77KÚOÉhllcýËt³¬@ff9Z[;¡¦Æƒƒ)||làåeÓÝHÀZa®Ñ)w…ŠM÷‚‚˜>þø$Ú°zõL¼üò´kîFUU3’’ø¬°”œ\‚ÖÖNöîœTX äÂÂÂ`Äí++«ÇŽñˆŠºss¼üò4,]:¦gÈ‘ÎNâãÓpôh"ÎË„††:ÂÂ|±hQ0¦Ms§Ñ¼Š þÄܹ>øúë¥ 5^çÏßñãðá‡ò6eÄ¡bÓÈröl:6løííB|ðÁB,YBÅaB"!HJâ#.. §N%£¨¨ÖÖF˜7Iµ?Þ‘ÎÍ#LCC™R7n‚Ç+BKK'ôô´Yá) €é~GE 塲²±[€ê‰€ª¬lØÙc…'©E…vŧ­­«O„ S+¨ãWƒ±ÝÝÒ˜H(77¦põh»a§ÌBPTTÛ«†SÇ­¬¬`d¤[xyYÁË‹©ãæêjAÓ-*6õÇÕ«ùøøãàñбdÉx¼óN¸\„iï¤$¦åob"ee}‹xKkÈûÎ[]]+¾ýöøå—`aaˆ×_ŸƒÅ‹ƒéI/'$‚«WóqäH"Nº‰ÖÖ.LžìŠG Fx¸­gÐX,ÁGÇO?]ÄÚµ³ñÖ[ójq}éRž~z®^}_.s¼¡bÓÈÓÚÚ‰O?ÅÏ?_¤I®øüóÇàà`*o³Tž´´²îˆ§deUÀÄDsçú <ÜS¦¸ÑïR9 OHà#)‰)<^PP ‡s; $„‰€rs³¤é>6˜6Íaa¾JÁ£þwX_Þ.6¸†Û¿„pPS3ffíò}eg$ü«®® ±qüF˜øW$’ #£ |\¹’7 PUÕ ƒ±ðó³c Ý2—¬ú܈£ó³|ˆ›š:–ÆO7n 1‘Oý«$ÜË¿„×±éx‰‰E¸y³ˆúWIÈù[UÕŒŒ & JÌÑÒÒ‰  {Ì™ãƒéÓ=áím}ÇŒêßÑÏú2ᮽæiäÃи[ ŽX,ANŽII|$&áÚµVCCC ¾¾¶˜9Ó ï¾û0|Ð cGØêÁ!I°k×ÿ°cG<üüì¿®®ƒÚÆÒ¥KqàÀa²r+R1™äæ °|ùÐÔTÇñãk¶óÞ±cyä£þæç»ÑÐЀÒÒÒa²ˆ"Këߦ¦&$%%Qÿ* ƒõoUUQ]]=ŒVQdÅ`üËçóqõêÕ>¶¶¶a¶2{þŠD"¤¤¤€ÏçŸQ™1Xÿ666")) UU4•l ŒÄ:õ~®‘ïÅp¯-‡$6eeeá‡~•-C¦±±{÷îÐû6mÚtÇך››ñÁÈØ2åãÌ™4„‡ï€ŽŽ&Ξ]… äm’·;…Ë—/Ûöéø8"‘kÖÀï¿_Ã?>‹G}@Þ& ŠŒŒrhiiÀÉitàïo~¾_|ñ…ÂÏ †Áø÷»ï¾ƒ žþyøúúbÉ’%èêê^)Cb0þ}ûí·áêêŠ^xŽŽŽøÏþ3¼ÆQ†Ì`ý;oÞ¼½½åmEF,[¶ «V­BNNrrrpêÔ)ÄÅÅÉÛ,Š ¨­­Åš5kpêÔ)ddd 99;wîDBB‚¼M£(!C^ÅH$¬Y³077ǶmÛ0uÖ¬Yؾ};¬­­aff†}ûöaýúõ033ƒ••:Änç½÷Þƒ™™´µµ1}úô>!ó©©©˜Èb¼Ý:n222î:V¤Û=pàœ¡««‹gŸ}b±pèÐ!888`ìØ±ˆŒŒDcc#këßÿ hkkÃÃÃ111ƒ¶õnŒÆñ9P¡i?ΟÏÂ/+mí²²zØÚËeßýÍÇ÷:W2®/]º„Õ«WcíÚµ000€¥¥%¶oß~G[î6ÿKñ÷÷‡ŸŸß=?Óÿþ÷?x{{CKK AAAìES¶ ÆNeBü›GGGL›6 `dd„yóæ!==ýŽÛ¡þíAü[^^ŽeË–Ëå<==annŽòòò;n‡ú·eð/äççÃÕÕÍÍÍì5ÓÝ þíAü›‘‘ÂÂB¬]»`aak×®!88øŽÛ¡þíAü[WW±XŒ€³³3LMMQQQqÇíPÿö +]d Ɖ'àìì ¬X±o½õbccÜ}z7†mmInáÀä¾#'Nœ ‡¼ñƤµµ•\ºt‰’¨¨(RQQAÔÔÔÈûï¿O$ ùî»ïòé§Ÿ‰DB>ÿüsâââB!$..ŽX[[“ÜÜ\ÒÔÔD.\HV®\I!¤¥¥…XYY‘]»v‘ŽŽò×_òï¿ÿ’’’2vìX²hÑ"rùòe’Mtuu !„455mmmrìØ1ÒÑÑA.\¸@ÔÔÔHUU)))!ÚÚÚwüLy饗Hgg'ÉËË#†††äܹs:&R êäIFF™8q+ ÞDx¼¢ÙçÒ¥KÉÒ¥Kü~Y·[ÇMMMÍ]ÇJEEÑÒÒbÇCAA122"ñññäæÍ›D[[›9r„´··“;vdÇŽ¤²²’èë듟þ™tttèèh¢££C²²²eë­ u|æüVFººDdÅŠ½ÄÕõríZ¾¼Í«VýJž~zL¶5˜ù¨¿ù¸¿yu0ãúĉDCCƒ¬[·Ž´¶¶’þù‡’S§Nõ™Ÿû›ÿ{³lÙ2²qãÆ»~¦’’¢¯¯OŽ;FÚÚÚÈÖ­[ —Ë%‰¤_[ú{m¸Žÿý êþ%„ÖÖVâééIvïÞ}ÛkÔ¿=(›;;;ÉÅ‹ÉæÍ›‰££#inn¾í3Qÿö ,þ $cÇŽ%úúúäã?¾ãg¢þíAYü{àÀ2a²ÿ~²páB²lÙ2rõêÕ;~&êߔſ„²páB²hÑ"røða²råJHZZZnûLÔ¿=Èj:P #??Ÿèéé‘ãÇ“öövòÉ'Ÿuuu²ÿþ~ס·" í£Ÿõå!‹MÆÆÆ¤««‹ýÛÆÉ¢E‹XÃ¥3''‡hhh¡PH!$))‰XXXB‰ŽŽ&ÖÖÖ$--œõõõ„B:D‚‚‚úìwÍš5dݺu¤¤¤„ eee„B Y±©££ƒ$&&²ÿ#uNnnî€Ä¦ªª*öo“&M"ÇŽÐ1‘¢LbS\\*qv~›<òÈ.RSsû…Þpq?b“,ÆÛ­ã¦¿±"Ýnyy9ûzhh(‰ŠŠ"o¿ý6yòÉ'ûØèëëKvìØA~øáÚçµG}”lÞ¼yP¶ÞÊPǧ*‹M]]"òôÓ{ˆ»ûÈõëò6gȬX±—¬Zõ«L¶5˜ù¨¿ùx çÊ@Æõ‰'ˆéììd·µqãFòøã÷™Ÿû›ÿ{s/±éË/¿$ ,`ïêê"Ÿ~ú)immí×–þ^ Št1¤Œþ=wîñôô$‹/f÷×êߔͿååådüøñÄÈȈ¬Y³†ˆD¢Û>õoÊâß´´42qâDV€¸rå 100 G½í3Qÿö ,þýöÛo‰ŽŽ 'ÇŽ#[¶l!cÇŽ%<ï¶ÏDýÛƒ²ø—B¶nÝJ¬¬¬ÈâÅ‹‰‹‹ yñÅéü|dµN¨†±uëV²xñbö}‰„XYY‘ýû÷÷»½Yhý‰MCN£svv†¦¦&û»OŸ0;]]]‡Ã¶¶6444Øß¥<üðÃxôÑG1iÒ$p¹\¬]»õõõ˜nYYYppp`‡BCC@MM ÖÖÖ·Ù¥­­ÄÄDÌ;ÎÎÎX´hÑ€ÃÁÔÕÕafÖS”··­ªÆ?^À /üŒÇ‡½=y›Ô/²o@ßq3±beeÅþ,ÝVYYÙmõ¼¼¼¥¥¥ps뛾åî’’AÛz+£i|¡PŒçŸß‡k×òqàÀJ„„8ÊÛ¤!£©©‘häÓ#û›r® t\;99AK«§»¥Š‹‹û¼ç^óÿ@áóù}ÎGMMM¼óÎ;ÐÑѹ§-±S™P&ÿ655aÙ²exöÙgñî»ïâÈ‘#ìþnÝõ/ƒ2ù`¾[¯]»†’’ÄÅÅaß¾}·}&êߔſÞÞÞ¸|ù2|ðAÀ„ °téRœ8qâ¶ÏDýÛƒ²øWSSººº8vì"##ñÞ{ïaÁ‚سgÏmŸ‰ú·eñïÉ“'ñý÷ß###GŽAFFRRRðÍ7ßÜö™¨û"‹uê@5Œ[=‡Ã““€­C{3œkË!‹M555}~¯ªªÂ¸qƒ+(MÁW_}…ÚÚZDEE¡££<òÀÀÀS¦LŸÏïóøþûïÜý`DGGcãÆxï½÷““ƒ7n°ŸˆÅ¼ûîŸØ²å8>ø`!>þx144¿±,ÆÐwÜÜïX166¾­¨Ô>ƒÛl­­­…¡¡á m¥ôP(ÆË/ÿ®_/Àï¿¿‚à`®¼M’ ::ZhoùÎ[ýÍDzœWo=?ª««¡¯¯ßço÷šÿо¾þmÕÑ£GÙkýÙ2;• eñ¯H$ÂìÙ³add„¬¬,,_¾ü®û¢þíAYüûÛo¿õéÚ£§§‡‰'"++ë¶}Qÿö ,þÍÏÏ¿­¾š¾¾>!·í‹ú·eñ/—Ë…™™Y¡ÀÁÁMMM·í‹ú·eñ/ÇÃ>###Œ€4cÆ $%%ݶ/êß¾Èb:б ¯¯ÚÚÚ>“Š—Š´²ºÀçóqòäILë¼Ý»w#<<|PÛøì³Ï0mÚ4hhh`üøñxúé§Ù"‘³fÍÂ¥K—™™ hkkCpp0Ž;Öï6KKKáåå…)S¦@]]W®\¹ã$0NMKK”ÍÊLKK'žyæ'DE%`ß¾çðâ‹SåmÒ€‘Åx»•ÁŒ•ÞÌœ9‡bë””\¼x0{ölœ={˜ÎJGŽÁ¬Y³mßhŸƒA,–àµ×àÒ¥8ð2íåm’Ì01у@pïq(kúƒm$  IDAT›ï÷\¹¥¥¥l±Â––üøã·÷;ÿ}ϛٳgãøñã¬8|íÚ5,_¾êêê÷´e v*ÊâßS§N¡¢¢ëׯ‡@ `/„ëêêPÿÞ eñ¯––¾øâ 477péÒ%¶Ø?õïQÿòx<Ì™3‡]ì466âèÑ£˜;w.êß»¡,þ}衇P^^Ž«W¯`®Ç£££ €ú÷n(‹ýýýñï¿ÿ²>kmmEll,Ÿ€,Ö© ³fÍBtt4ª««W®\AFF8Î=ס#º¶DÎÝmœ8q‚L˜0¸ºº’ÐÐPbiiIÂÂÂHWW›ÿ'%77—­§D!<¯O {{{âëëKfΜI É?þȾ÷«¯¾"dæÌ™ÄÆÆ†<öØcD,“’’¢®®Î¾¯wͦââbbnnNBCCɬY³HXXqvv& .¼­f—Ë%[¶l!„0y‹½·I!“'OV™šMååõdÆŒÏI@À‡$9¹X®¶ÜOÍ&Y·Þ>îo¬Üº]B™:u*‰ŠŠ"‰„,[¶Œ‘iÓ¦{{{FvìØA!äƒ> FFFdöìÙÄÄÄ„¼òÊ+„2([ ‘íøT¥šM‰„¬[w89½Mþý7WÞæÈœýû/w÷ 2ÙÖ`æ£þæãÁœ+ýë'N.—K¼½½É”)Sˆ••™:u*ioo¿m~¾Ûüß›;Õlê}ÞBÈÚµk‰©©)™9s&100 »víº§-ý½6†ûû@ýûÞ{ï·=^}õUBõïÝPÿŠD"²páBbffFBCC‰‰‰ yâ‰'ØúÔ¿wFYü+‹É’%KȸqãÈôéÓ‰©©)[™êß»¡,þ%„ýû÷}}}2uêTbiiIüq¶¦õïQÿJ$²råJbllLf̘A,,,HXXikk#„PÿÞ Y­S£a<÷ÜsÄÌ̌̚5‹Lœ8‘øûû“ÇBî¾%DöÚǰ—ÒÞÞNÎ;×§˜Õ`éèè /^$ñññD Üözii)9sæ [TíNˆÅbRSSÃþÞØØHΞ=K’““ !Œóþþûïû¶q0(¢Ø”]A‚‚6‘3>'ååõò6gÐb“YŒ·[ÊXIII!gÏž%·½VXXHΜ9C²³³efëPP±I"‘ ¢ˆ½ý›äܹLy›3,\¿^@¬¬Ö‘ÊÊÛÇÕ`ì|Ôß|,‹yõĉ$88˜tvv’ .k×®‰Dr×÷dþ999äÌ™3¤¸¸GhïÏ–ÁÚy7ébˆê_ê_ÅñoJJ ‰‹‹Ðw$õ/ƒ2ù7##ƒÄÅÅ‘ÜÜ{ߢþeP&ÿVVV’øøøÍÝÔ¿ Êäßüü|Gý;ÈíËb:±PUUE222Hrr29þ<éìì$NNNäÊ•+ì{FjÚŸØt{¥Íû`̘1˜>}ú¶¡­­)S¦ÜõuØØØô» 555˜˜˜°¿ô dz³³ƒÝìTVùxê©=ðñ±Á¾}ÏCOO[Þ&Ý7²o·2”±âëë __ß;¾&-ºG‘-[¶ÇW±{÷3˜>ÝCÞæ ~~vÐÖÖÀõëX° `D÷Ýß|,ËyUKK‹ »ïÌÿÁÕÕ®®®ƒ¶e v* Ô¿MQ&ÿö÷ýy+Ô¿ Êä_OOOxzzhÔ¿ Êä_ Ìž={@û£þeP&ÿ:99±§ïõo²X§d,”––bÆŒøóÏ?áåå…ü"‘ÁÁÁì{a*±‰¢Øœ;—‰—^ú3fxb×®åÐÒ¢n§(/»vý…={.b×®å˜7o`‹eD[[<à€ÿÍq±i¸100€‹‹‹¼Íп-Šd§2¡HÇúWö(Òq£þ•=Štܨe"7ê_Ù£HÇúwx ÄÏ?ÿŒmÛ¶¡®®...8}útŸnxŠUTœ£Gñúë¿ã‰'Ä'Ÿ<uuÅï8G¡Ü£G±mÛ)|òÉ#ˆˆ”·9ÃÎÃ૯âðñǪu†*̬þlQ$;• E:nÔ¿²G‘Žõ¯ìQ¤ãFý+{é¸QÿÊE:nÔ¿ÃOdd$"##åmF¿¨Îê…r{ö\Àk¯Àk¯ÍÂgŸ=¦R‹UÊè#>> ¯¿þ;^}užyf²¼ÍæÏ÷Gcc;þ÷¿ y›B¡P( …B¡P(†ª*Êöíg°ys ¶lY„õëçÉÛ eH$%á•WöcéÒ Ø°a¾¼Í1LMõ„={.ÈÛ …B¡P( …B0TlRA¶m;…;â±cÇ“xî¹»]§P”>¿Ï<ó¦LqÃÖ­‹ÁápämÒˆòâ‹SqåJ>þù'GÞ¦P( …B¡P(JƒX,X,‘·£Z³IÅøè£üôS>6X°À|øøõÐÐ}Ç€B¡P( …B,ííB¸¹ý0uª;œÍáädS88˜ÂÎn45Õål¥êBÅ&‚÷ß?†ýû/㇞Ax¸Ÿ¼M¢P†DSS–/ÿººZØ¿ÿEŒ«%o“äÆûï/Ä”)ÛðÝwç°fͬ{ÿ…B¡P( …2ÊÑÓÓf¾p!W®ä@(ÔÔ8077€““9\]Íáà` .צàp¨T2TèT!øÏþÄ¡C×°gϳ˜3ÇGÞ&Q(CB(ã…ö¡¡¡'O®…±±®¼M’+66Æx÷݇±eËq„†º! À^Þ&Q( …B¡P( Ï¢EA8~ü&Äb ººÄ}^“H*+QYÙˆ7 ôQ––«±sg|° ÎÎæ#n·* ôùm¨­m‘·rƒ‚7ßüQQ7ðË//P¡I¨«k¥¹ÁC@,–àµ×~CJJ ~ûí%XYÉÛ$…àùç§ 4Ô Ï?ÿ3ª«›åm…B¡P( …¢ðøûÛCMíÞ5_…B1„B1[¶£³“—_v§BÓ¸kdSTTÔHÚqßðù͸zµ O<á,oSFB6løG&â—_žÇ´iò6iÐDEE!22RÞfÈ”ªªvDGóñì³nÐÒR¬`e8¯ß{ï(ΞÍÀ/ÁÓÓJÞæ( ;w.Ãüù_cÅŠ½ˆŠZ5¨Ô¨¨(hjj£…yBý«ÚPÿª6Ô¿ª õ¯jCý«ØB0nœ.­ÔjjLšä‚?~®®8~ÐÓ3–*/ý­/ï*6-Y²dXŒ‘5ºº00˜†'vB(¬·9#ʇFã÷߯aïÞç”Rh¡P¨4cmàp`eµo½u ÁnH$íò6Hiصë/üöÛìÝ»&Œ>ù^ëâàÁ—¶¯¼²{÷®pÑôèèhDGG³…yAý«ÚPÿª6Ô¿ª õ¯jCý«X´·wÇ+Æ…HLä#!††6p8!wÿ?uu5˜™éããAX˜/ûwêß¡Á!¤¿Ã®ø|ùe¶o?ooœ9óæ€BäT>ŠÁÞ½—ðÃÏô9!(гóÛhoÂÞ~þøc¸\y›¤ðÄǧáùçÆæÍ‘xî¹)ò6G¡IJ*Âc}‡iÓÜñßÿ>…1cè5 …B¡P(Êè‚©µTˆ„>ùHM-…P(†¥¥!BBâˆñãñÒK¿ ¸¸î¶ÿ×ÐP‡¬Y3¯¾:ƒ^SË–¥/Îç×€Ãá 3³‡]ÃÒ¥ämÒ°óÙg±Ø³ç"¾ûî)*4)(óçûãèÑD”—7bþüí8xp%üüìäm–Â’™YU«öcùò‰ThAA\DE­Â3Ïü„ ¾Á·ß.ƒ‡M9¤P( …B¡¨&b±YY¸v­ |ܸQˆ²²zhh¨ÁËË<à€^EHˆ#llŒûüop°ÊÊغºjjH$3fx`ëÖG`kk|§]R†ˆÒG6Í™óÒÒJÁáp``0×®½ƒ±ò6kØØ¾ý vìˆÇÎ˰hQ¼Í¡Ü…ï¾;‡Ï>‹e‹Ìijªcß>åMwNjk[0wîWpr2Ã/CSS±ê\)2EEµX½ú7¤¦–â­·æaåÊÿoïÎâ¬×7€ßÃ* ›¬Ã;‚;î+zÔ(­LýÁ9¥ie.eZZi§R³Ô$íX“-çÔ‘,s)-—´òd&nˆ¬² 00ìû2μ¿?&É]—îÏuq!3üÏx½úÂ=Ï÷ù޽íeuDDDDD]Uuu#µK¿ÿž³gsQ[Û›0Àø`ð`?ôïï KË›Ï1ýðÃcX³æ¨ÕŒŒŒàåÕ o¾9£GvÒ«é– £³ Ðÿª«k† ±víƒ"WÕ1þóŸ_±iÓ!¼ýö M]\@€«nZ­ øÛß¶áí·gbæÌÁ"W×u¨TjÌžýÌÌLðᇳ4Ý!ooìÝ»ÿüçOظñ ¼ˆ7Þxˆ]tDDDD¤W²²JpútNŸÖ.‹KO/‚F#ÀÏÏ úàþû§bà@¸Þñèœðp¨ÕÚ›U«îÇܹ#ù{G'ÐëΦêê½Üæ6cc ~øáƒ[R²{w"/ÞŽ•+£±`Á8±Ë¡[((¨À A«ÿt« ð “°dÉDQêêj-ú/ŽIÆ÷ß/…ŸŸ“ØåèµÔT^xáKœ9“‡èè¼ðÂdÈdܪ•ˆˆˆˆº–ÚÚ&œ=›‹3gr‘˜˜ƒ3grQ^^33„‡{bà@o ä‡}àäd}ÏÇ««kÂK/}•+‹M;¼º §õ:l:^ŽÉ“ãÚÜfbb„þý½±gÏbH$†1,ü‡’1oÞ§xê©1xùåh±Ë¡Û$“­@}}ó5·K$üõ¯C°nÝôn½äiëÖ£X¿þ{ÄÇ?…‘#Ä.Ç`:të×ÌÌb<òÈ`,Y2žž½Ä.‹ˆˆˆˆº!A™©ÔK‰‰9HO/†Z­»»}Ë’8o àƒ°0w˜™éýâ+ÒÒï°iïÞ3X´èsh4mo—H€­[ÿfKÍ~ÿ=³fýÓ§Ä[oM7˜­;˜4).ȯ{Ÿ‘‘Æ¿þ5»[îzpøðEÌ™ó ÞxãaÌž=\ìr ŽF#`÷îD¼ýöAV`Ò¤>˜7oö»4""""2`ÕÕ8s&窮¥}<0wî(L›ÖïÑ=Ñh¤§áìÙ\üþ»6`ÊÌ,†F#ÀÛÛýû{ë†y‡„¸qNR÷¢ßaÓ’%ñص+Q·…áÕŒðôÓcõvÙ™BQ‰èè-èÝ›;té«?þV¯þV7(üFzõꉣG_èë‡KKµ;Ïõîí„øøù01a€ÚYΟ—cÛ¶cØ·ïlm-ðÐC0sæ`»‰]饲çÏçáìÙ<$&æàüùƒ={QSÓˆ1c1mZL˜Ê0ˆˆˆ¨›P©ÔHMUàÌ™\œ;—‡sçò™©„Z­‹‹-úöõD¿~Þè×Ï ^l† Û¡¿aS]]üý_¼áýffÆhnÖ._úüó'1~|pg•v×Ôj æÎý‰‰9سg1·-7ÁÁ/£ªª`jj F€«« ¶m›ƒ¾}½D®®ó|ñÅoxþù¯ðé§câÄ0±Ë¡?in¾‚#G.a×®Óøé§T¨ÕŒ€)SÂ1iRôêÕ}fŠ2A“SÚÒ­¤ –.^ÌGSÓX[÷@D„'úöõjYçÅæº[ú6]ºTˆ¨¨´ÁÒ•+h4LLŒâ†|îðpOøû»èE[ßK/}¯¾ú;w.@ÿþÞb—Cí`ìØõHK+‚D"AttV¬˜‚ÇûúàwþOìò:ÅùórLú.,‡åË'‹]ÝB}}3޽„ï¾»€¼„††íÉ“û **žž½Ä.‘ˆˆˆˆnÓÕs–Z—ÄUUÕÃÔÔ¡¡îºn¥¾}=!“¹ÀÈȰG{P§Ñß°é»ïÎã‰'þà`7 Òáá¸pAŽƒ/"1ñU±Ë»c|ðÖ­Û?žÃβrånìÝ›ˆÏ>{hÄ;°bÅNœ<¹ nn†ýNAYY-&MŠƒ¿¿ >ÿü gšš®àرT8„Ç“QQQL˜Š1c‚é×m–uuµµMHJÊÇÙ³¹ºp©  ¢Íœ¥Ö®¥°0wîNLI溺&˜››¶éX:q"Ó§¿‡S§þ{«»3‡_ÄܹŸbåÊû1þ±Ë¡vTVV‹^½¬Ú ÿV©Ô2d-¢£#ðúëÓD¬®c©ÕÄÆ~ˆìì<¸öö\Š¥Ï®\Ñàôélüøc ޽„”zö4ÇèÑA;VûÁ6k"""¢ÎÑ:g©uxwÛ9K6ºÝáúöõDß¾Þœ³DMæëilT!0ð%ÄÅÍÂûœÛréR!î¿ fÌ„7ßœ.v9ÔI¶m;†  !Ⴧ³nÝ~|ôÑÿðÍ7Ï O±Ë¡v¦PTâÇSpäÈ%?žºº&¸bÄŒáaÃd2NDDDÔN²³KÚ,…»zÎRx¸GK°Ä9KÔeVØ÷ß¿ÁÁRlØ0CìRnI¡¨Dtôôîí„íÛŸâr”n¤®® ‘‘k0gÎ,[6IìrÚÝ÷ß_ÀOüqq³0sæ`±Ë¡¦R©‘…ÿý/ ¿þš òžºðiÐ ?˜›³U›ˆˆˆèVJJjt¡Òõæ,µv+qÎua†6½ñÆ~>|ÇŽÝx§º® ¡¡>¸*|ûí³lkì†6m:„O>ù§N½++s±Ëi7—/+qß}ï`êÔþX¿þ±Ë!TW7àĉL?žãÇ3ž^ss èƒÈÈÞˆŒôÀ>°´4»T""""QUTÔ!)).äãüyù ç,EDx¡OÎY"½axaÓ?$cöì‘”´¦Ë.Oóæ}ŠS§²±oß³ðñq»$AEE^ƒ^˜Œ'Ÿ-v9í¢®® ÷Ý·={šcÏžÅìÖ#@qq5ŽOǯ¿f"!! ÙÙ%011Bx¸'öÅ!½1h/çz‘A++«Å… ù-á’IIùËËnnvèÓÇãª9K^I@úÌ𦪪z„†®ÂGÍÁ¤I}Ä.çºââaË–ðÕW é'v9$¢×^Û‹}ûÎã·ßVé}0#æÏÿ 'Ndâðáe\+N7¤TÖ !á2²ðÛo—‘šª€ ®º®§þý½áçç$v©DDDDw¥¤¤¦%X’릂‚ €‡‡=úôñ@x¸'ÂÃ=ѧ{Š\1Q»2¼° ÆßˆQ£ðê«SÅ.å­Wk×>„9sFˆ]‰L¡¨Ä!k±nÝÈ*v9÷äÓOÁßÿ¾;v<áÃeb—Cz¤ºº§NeáÔ©,üö[.^ÌGc£ =Ñ¿¿7ú÷÷Æ A¾èÛ׋Kˆ¨Ë).®ºªcIÛµTTTðòr@x¸‡.T ÷`77u†6½üò×8wNŽï¿NìRÚhe3eJââf‰]u+VìÄÏ?§âøñ—õ¶»)))ÑÑ›ñÜs±dÉD±Ë!=§R©‘””ÄÄœ=›‡ßÏFAAŒèŠÁƒ}ѯŸ7ÂÃ=!“9ÃØØHì’‰ˆˆ¨›P(*Û„JIIù(.®†D"·÷µÁ’­­¥Ø%‰Á0æo¿=‡… ?Ç¥KoÀÚºk Þ®®nÄ}÷½;; ìÞÍY6ô…¢C‡¾×_Ÿ†Ç.v9w¬¦¦“&ÅÁÝÝ_|1Ÿ¿øS‡(*ªÂ™3¹8}:§Oç")Iަ¦+°²2Gh¨»î»ðpîÊBDDDí¢  âšK%%5H$ðõuÔ-…k –8c‰HÇ0æÒÒZDDüÿùψüãvíZˆ}Å.‡º ââj º+WFcîÜQb—sÛ¶o?‰åËw">þ)Œ(v9ÔÍ©Tj¤¥µPÚ*9¹*•={š#,Ìãª(OPDDDÝTNNi›PéÂ9*+ëall„Þ½î¡ —ÂÂÜaee.vÉDúÆpæ•+w!11.µŽ’0oާذá½Mkõêo°{w"Nž\ ‹®?9-­S¦¼ƒyóFᥗëR©ÔHMUè§óçåHI)„J¥†µu«: ´]P¾¾  ˆˆˆ …Z­ANN)’“ Z:¡µÁRuuLLŒ “¹´™±êÎÍHˆÚ‡á†Mû÷ŸÇÓO†ääµ¢­MK+Âý÷oƃÀúõˆRéÒÒZ ²Ë–MÂÓO»œ›jhhÆäÉïÀÖÖ»v-‚‰ ç4‘þP©ÔHI)ÔýÀyþ¼©© ¨TjXX˜!0Ð!!n–"(È ¡¡n°³ãpO""¢®¬¡¡)) $'àâÅ$' %E††f˜˜! ÀU×­î7½xƒ—HOnØT^^‡>}^Á¿ÿ=&„vúñ««1iÒ&89Yãë¯r 8Ý–uëöã‹/ðÛo«ºt»î²e_âÀ øá‡çáîn/v9D÷L¥RãÒ¥B\º¤ýÁ45UääBTTÔ¤R;Kì†7I!“9óÿv"""(•5HN.h –ò‘’¢@VV Ôj ¬­{ $Ä ¡¡î sGHˆ¥z7•HÏnØãÇoÀ¨QxõÕ©z\FÀ£nCJŠ,åÐdºm••õˆŒ\ƒ… Çã™g¢Ä.çºvïNÄâÅÛñé§câÄ0±Ë!êPÅÅUHIQàÒ¥B¤¤(’RˆŒŒb¨Tj˜šÃßßÁÁÚ.¨Ön(nADDÔÔj ²²J’R¨ëVJN.€RYpw·Gh¨;‚ƒ¥ºpÉÛÛ —ĉì´AǻÇûãøñŒN?î?þq¿ü’ŽÝ»3h¢;bgg‰yóFáŸÿü ³g€M×Úå";»/¾¸sçŽdÐDÝ‚‹‹-\\l1fLî6•JÌL%RS[C¨B|üñ/P(*ööV Õv?iC(w¸°UŸˆˆè&nµ N&sAh¨;æÏ‡°07„…yp™;QfÐM‡]ÄܹŸ )i ìí­:å˜'O^ÆŒïãÕW§bÞ<ýÙUŒºŽêêDF®Åœ9#°|ùd±ËÑQ©Ô˜:õ]h4öí{–ˇˆþ¤²²—."5UÑÒ U€´´"Ô×7ÃØØžž½à øû» À2™ zöìºKf‰ˆˆ:Ÿ—Á]¼X€Üܲë.ƒ uGP”?{éÃ^FWYYÐÐU¶Ü§¤¤'¾þý½ñÑGsؾIwíý÷D\Ü!œ8±ªËtÇ­_ÿ=>üðZ™ÌYìrˆô‚F# /¯ ÉÉÈÌT"-­ÅÈÈ(FsóÚ%2™s› *0ЕïÖ‘Þk]§ –´³¯· .,L(q‘Á0ì° ÆÛ€±cƒðÊ+tèqÔj bc?DNN)^&ÚxdU1b&LÅ›oN»$$daúô÷°nÝÃøÛ߆‰]‘ÞS«5ËË‘žþGø”ž^ŒÌÌbÔÖ6œ­àÚDIuTW  ‰ˆˆ®V_ßܲÁƵËàLM!“9#$Ľ%\â28"gøaÓ‹/îDrröí[Ò¡ÇyçÃØ¼ù0öí{áážz,êvìHÀòå_áØ±áëë$ZÕÕ ˆŠÚˆwüûßsE«ƒ¨»((¨@f¦²M•š£BöIDATZ„ªªz€­­e›exÚ@ÊÓ³—È•Qw rsËtËÆ[¦œœRh4—ÁЦ={Î`É’x¤¦®ë°á¬¿þš‰Y³>Àë¯OÃãìcP÷£Vk0~üF¸àÃg‹VÇÂ…Ÿã×_3pôèr88ô­¢îN©¬AzzQK¥ÐR­K,-Íàëë„Þ½àçç ??'ôîí ??GØÚòc""ºs••õHN.DZšB·+kZZêêš`d$——‚ƒ¥vCHˆöƒËàˆÝ!l*(¨À A«±sçB .k÷ç/)©Á„ 1h¶m›ÝîÏOÝÛ¡CñøãŸ`ÿþ%è×ϫӿgÏ,Zô_|þù7.¸ÓOD·VUU¯ë€º|¹ÙÙ%¸|¹99¥º¹P=¯ ŸœÚ|˜™ôÆ´DDtT*5ÒÒŠšª¸j·UŠ‹«hwL uC` T.ºÂÊŠ›\Ñu~؃¯Æ¬Y‘Xºô/íú¼jµÿ÷ÿ‚\^†C‡žïrÛÔ“a˜:õ]˜››à«¯têqóó+µ?<o¼ñP§›ˆîZ­A~~EKø¤DV–6„ÊÊR¢°°## <ÊÊêpðàRôèaÚ)Ç%¢ÎÑÔtYYÚªõ#3S‰ìì”—×ÌÌL®é‚òós‚‡”éêêÝL¥ÖN¥´4jj^^ tEp°6T ’ÂÏÏ&&F"WND {„MŸ~«W‹””uíöŸg뜦իÄœ9#Úå9‰ndΜ!——ãðáç;¥Ó`ë֣ظñ¾ÿþ9„†ºwøñˆ¨ë¨¬¬×u@]¾¬Dvv©îsCC3ÀÊÊÞÞðñq„#¼½àëë'H¥¶06æ/*DDE¥R#3SÙ2°»))…HM-BAAÀÆÆ¢%LrEp°¶S)0P kk®Ê ¢Ó=¦ôô"Œ³,EDĽïWUUñã7""Âüx;THtsééE?~#ââfá‘Guè±.]*ÄäÉqX±b ,סÇ""ý!Š*dg—"7·99ÚÜÜ2ää”êÞ)755†——6|òòr€ŸŸS›¯¹ÑÝ+(¨@jjRS [–À!3³*•¦¦ÆÉ\äÚ.iƒ%77;±Ë&¢î§{„M€àà—ñòËÑxì±á÷ü|ó熄„ËøñÇå°··j‡ ‰nmùò¯pôh Ž©ÃvVT©Ô˜4)ÖÖ=°k×Bv'Ñm+-­m žJ“SÖF• 7· ¥¥µcc#H¥¶ðñq‚ÏQ­ÝQ4KD¤UTT…´´"¤¥!=½ii dd£ºZ컹Ù!8XŠ  7]×’LæÂ@ŸˆºŠÓÝb ## ÂÃ=pî\Þ=‡M_}ûöC|üS š¨S½ðÂd|óÍY|ðÁOí>ì¾U\Ü!äæ–âÈ‘4Ñqtì GÇž0ÀûšûjjÛtAåä”";»?þ˜…¢ ­ï{9;[ÃÛ[>yyõ‚——<={ÁÛÛ..¶XND§¸¸ ééÅHMÕ†I©©Úp©ººàädÀ@WDDxaÆŒÁÐÎX²±±¹r"¢›ëaDDxá§ŸRîé9äòr¬\¹ sçŽÄèÑíTÑíqr²ÆÂ…ãñAlìP¸¸Ø´ëóŸ=›‡­[bÍš‡àããØ®ÏMDÝ›µuôéãqÝÍ4𛝠7· ÙÙ%º0*7· gÏæB./GSÓÚåyžžÚêê ªõk¾DD]™RYƒôt….XJO/FZZªªê=䊰07LŸ>þþÚåpü¿ˆôU·XFûöŸ#=ýÍ»Z‚¤VkððÃº,…¹y·Éé¨ ijº‚#ÖaäÈÄÅÍj×ç8ñm¸ºÚbÇŽùHØ=@DâJe5rsË—W޼¼2ÈåÚÏyyå(*ª‚Z­  ´Z» Z?{xh?{y9pWM"êeeµHIÑv)¥¥ý*UThwú´··BPkK˜ä¦ •zŠ\9Q»êËè $Ä jµÅ¿ó!á[·Źsy8pà9M$ss¼ür4/þ/æÍ…·vyÞ·ÞúÅÅUˆŠAu‰..¶pq±ÅàÁ~×ܯR©QPPÜ\mÕúùÔ©lìÚ•ˆ²²ZÝc­áéépMåáaww{Î9!¢;RQQwM¨”šª@y¹6T²µµDP+\€WºÂÉÉZäʉˆ:G·élºrE™lÞ~{&¦OxGß{î\¦N}/¿§žÓ1Ý&A½VV=ðÕWOßóó%$dáᇷbÓ¦Y˜9sp;THDÔ5ÔÖ6]Õ õGwTk‡T}}3ílG''xyiçÖªõ³§g/vFuSeeµÈÈ(Öu(ed!5U¡ÛøÀÖÖ. Ô†IÚPI gg†JDÔ­ÝÛnt ÈËËkÏ‚:Ôúõçl‡¸vxé47«±aÃyØÛ÷À‚Á]®ëÃËË ‘‘‘b—a0òòò v·”]ƒ-[.â‰'‚j×ÏÓÔ¤=¿]]-ñÄAíXaÇàùNDí©´´ùùå((¨€\^‚‚ äå•!?¿åº]Ÿíô?B(måéÙ ½àîn›"¾’îkçÎb—ÐíEFFÂËËKì2î‰F#@./Gf¦ÅÈÌ,nù¬Ô-³±éW]¨Ô,¹ºÚŠ\=Q—toaSll,âããÛ³ enî ¦*UÉ|—VVhlÌ„Z]{ë‡w²˜˜lß¾]ì2 F||¦¡¡ùùP(*¡PT!?¿……•P(*q«kÒ=ÞÚºÜÜìt¡”Tª ¥\]m •j»¤,,Ì:ãåuŠÆF²²Jpù²R&ef#+«D7äßѱ'\áïï‚É“Ã[º”œáæf×e»¯ˆˆ Ã&""""‘XX˜Áß_;æFª«¡PT¢ àêPª¹¹eøí·Ë((¨@c£J÷x;;K]ðtõr=m@e 77;˜™ñG@ê:®\Ñ ?¿\*i?— ;»……•ÆÆFðôì™Ì£FâñÇGêæ*ÙÚZŠýˆˆèOø“QfcÓ66Úݯn¤¼¼N·DïêN©ÔTŽKCaa%š›¯èïìl ©Ô®®mgH¹»ÛÁÍÍ..6\fDí®¸¸J"µJ—/+‘—W•J @Û¥$“¹À×× cÆÂ×× ½{;ÁÇÇ‘!)‘áÿØDDDDz®W/+ôêe…ÐP÷>F©¬i ¡´]R……Úp*))&A©¬Æ•+€‘‘NN6pw·ƒ““5ÜÜìu•‹‹îƒCÍéϪ«•U‚ììRÝr7í×%¨­Õ. íÙÓ~~ÎðõuÄÔ©ýл·3üüœàëëÄÝDD‚aQ7àìl ggkDDx^÷~µZƒ’’äç—£°° EEU(,¬€RYƒK— ðÓOÕ(*ªj³dÏÜÜ®®¶pq±mù¬åìl 77;8;ÛÀÕÕ––œ#eˆLLìñÓO $&~‰¬,íL¥ÒRípnSScx{; wogŒáG??m¨äâb#råDDÔѺUØTSSƒ÷Þ{/¾øâ}Ÿ\.G=àääÔA•ݹ»9Ÿ+++Q[[ 6·×ÖÖ"==>>>èÕ«W{—JDDzÀØØ®®ÚÐèfªªêQT¤ žŠ‹«¡PTB©¬AQQ%ΜÉEaáy”–Öè–EÚN–Ö®¨?Â)›?T†½tïN¯Û•••ÈÎΆ··w—½6›˜ØãÄ %ÂÂ,$Å}÷EÀÏÏ ~~Nððè#±K$""‘t«°©ªª ¯½öÚýr^VV†!C†àõ×_Ǽyó:°:¢;s7çóÆ!‘H°víZÝm‡ÆÌ™3áææ†ÜÜ\ÄÅÅáÉ'Ÿìˆ’‰ˆÈØÚZÂÖÖò¦3¤A@II-”JmU\\ââ*(UP*«‘šª€RY’’Z‚ û>''k8:ö„››œœltÝQR©mËÒ=[89YÃÈHÿv»“ëv\\^ýuøùù!33k׮ųÏ>Û UÞ™ÆÆ,¬\˜˜±K!"¢.¦[…MwãñÇGii©ØeÝ“ï¾û_ý5¶oߎåË—ënW©T˜={6ÞyçÌž='OžÄ¸qãpÿý÷C*•ŠX1é3‰D¢[¶vã9R*•¥¥5(,¬ÔÍ”*.ÖvMTàÌ™\U¡ººA÷=&&FptÔ.ÓëÙ3²3^N§JLLÄk¯½†S§N!((—.]°aÃÞ½{‹]ÑméôÞÖU«VÁÉÉ æææ;v,òóóu÷}ñÅÉd011T*ÅÆh»‹¢¢¢777899á“O>ÁóÏ?'''H¥RìØ±ðË/¿`Ñ¢ExöÙgaccWWWÄÅÅ]·–¤¤$ >=zô@@@âããÛÜÿÞ{ïA :ô¦¯éÈ‘# …™™ú÷ïÓ§Oß²–;©“º.}:Ÿ#""Þæ¶S§N¡±±>ú(`èСèÓ§8pÝcð\'"¢ödjj ©Ôø`òä>xüñ‘xé¥û°eK ¾üòiüüó ¤¦®CVÖœ8±{ö,Æ»ïÆbþü±8ÐMýO®ÛGŘ1c ATTöïßÝçáµ™ˆˆº$áÄÄÄ111·ýøƒ nnnBFF†P]]-<ðÀÂüùóA„êêjÁÜÜ\سgÐØØ(;vL022”J¥ P(###á•W^4ðþûï „·ÞzKÐh4† ™L&‚ ìÛ·O011–,Y"ÔÕÕ Çlmm…ï¾ûNË傹¹¹ ‚P[[+H¥RaëÖ­Bcc£pôèQÁÆÆFøõ×_A„¤¤$Á××W())F-lÛ¶íº¯I.— ÖÖÖž={„úúzaíÚµ‚··· ÑhnZËÍî먿ºµíÛ· ·ûÏBŸÎçV±±±ÂÊ•+u_òÉ'Bddd›Ç<úè£Â‹/¾xÍëó\žïDDt-ÂöíÛoë±úrÝÞ²e‹0xðà6µ3Fxæ™g®yMb_›ïäˆº•ß;µ³©±±ÐÔÔkkkÄÇÇãÍ7ߘ™™áĉ˜6mÌÍÍáççSSSTUU4 V¬X‰D‚¨¨(˜˜˜`Ù²eº¯kjjtDZ´´Äúõëaii‰áÇcÑ¢Eøì³ÏÚÔ²ÿ~H¥R,\¸æææ7nfÏž;w¢¡¡111ø×¿þGGÇ›¾¦/¿ücÆŒÁ´iÓ`aaåË—ãé§ŸFCCÃ-k¹:©ëÒ—óùfjkkaeÕvÛj++«6ÇoÅsˆˆô™¾\·zè!\ºt «W¯ÆÉ“'ñÒK/áĉhjjºæ5ñÚLDD]U§†MÑÑј>}:† ooo<û쳨¨¨˜››#11ùË_лwo<øàƒÐh4m¾¿õ—b‰Dsss˜˜˜è¾¾šŸŸÌÌþØb7,, yyym“““ƒÔÔTøøøè>vìØÊÊJ¬]»nnn°°°ÀñãÇQUU…ÌÌL$%%]óšrrr ûÚÔÔ+V¬€¥¥å-k¹:©ëÒ—óùf,,,t?¶jhh€……Å5å¹NDDúL_®ÛøùçŸqöìY<÷Üs055ŬY³`ggwÍkâµ™ˆˆºªN.6mÚ„M›6áÌ™3x÷ÝwñðÃãÌ™3Ø»w/V®\‰]»vaذa066¾îEõvüy wII ¬­­ÛÜfccƒ‘#GâàÁƒºÛ ‘H°nÝ:”––bÉ’%€ÌÌLTTT ´´}ôQ›ç±¶¶†R©lsÛîÝ»1~üø[Ör;uR×¥/çóÍÈd2\¾|¹ÍmYYY2dÈ5å¹NDDúL_®ÛðððÀž={t÷ 6 'N¼æX¼6QWÕ©Mëׯǘ1c`bb‚ÁƒãÑGEaa! ??!!!9r$ŒqòäITWWßÕqòóóñÍ7ßÐ.úðÃÕæ1QQQøå—_’’¨¯¯Ç€°gϬ^½§OŸÖ} 0«V­ÒM{÷îÅÅ‹&LÀ·ß~«»Ð'$$à¯ý+ŒoYËíÔI]—¾œÏ73tèPh4>|€6h:}ú4¦L™€ç:}¹nçææÂÛÛ999€'NàâÅ‹¼6‘^éÔ°é±Çƒ\.Gxx8¢¢¢0cÆ ¬Y³0uêT¤¤¤`ôèј0aÖ¬Y???,[¶ìŽãíí•+WbÔ¨Q€ƒƒ/^Üæ1þþþX³f † ‚¨¨( ,, 3gμåó/Y²{÷îŒ;111 ETT&Nœˆ7¢gÏž·¬åv꤮ËÎgsss|ðÁˆ‰‰ÁÔ©S1lØ0¬Y³žžžx®‘áЗëv`` æÏŸþýûcôèѸï¾ûðÑGÁÞÞ¯ÍDD¤:u‡‡ÒÓÓuÛ­GDDÀÙÙàé鉌Œ œ:u Îη\.GVV\]]!‚îyd2jkku_÷íÛEEEº¯qâÄ üöÛoèÑ£ ‰DÝpHXºt)fΜ‰ääd¸»»#44ôºuÿüóÏm¾n}§©ÕæÍ›±páBdgg#88X÷‹úÍj¹Õ}Ôõéãùüßÿþ÷šÛ¦OŸŽ#F )) ›7o†¯¯¯î>žëDDd(ô麽yóf<ùä“ËåèÛ·/\\\t÷ñÚLDDú SÃ&@ÛI1räÈëÞgccÓ¦}×ÓÓ³ÍóN˜™™aÔ¨Q·|œ»»;ÜÝÝïêWó÷÷‡¿¿ÿ×r»uR×d(糫«+\]]oë±<׉ˆH_éÓu;$$!!!·u<^›‰ˆ¨«éÔetÁÆÆ2™Lì2ܼ–®T'u]úržð\'""êZ×<^›‰ˆHLáê¾à; ؾ}{»D·ÿí/>>±±±¸‡ÔAx¾ÑŸI$lß¾111b—Ò-ñˆnà´Áu6‘x6Q»aØDDDDDDDDDí†aµ†MDDDDDDDDÔn6Q»aØDDDDDDDDDíÆä^Ÿ >>ñññíQ Ý…˜˜±K0H‰Dìè:x¾ÑŸÅÆÆ"66Vì2ˆˆˆè*A„»ýæ„„äååµg=t‡¼¼¼)v#// b—A7À󈈮¶sçN±Kèö"##áåå%vDDÔµœ¾§°‰ˆˆˆˆˆˆˆˆè*§9³‰ˆˆˆˆˆˆˆˆÚ Ã&""""""""j7 ›ˆˆˆˆˆˆˆˆ¨Ýü?2¡B)@IEND®B`‚bm3.7.0/doc/html/a00053.html0000644000175000017500000002747111365042651013435 0ustar tlktlk BitMagic: bm::decoder Class Reference

bm::decoder Class Reference

Class for decoding data from memory buffer. More...

#include <encoding.h>

Inheritance diagram for bm::decoder:
Collaboration diagram for bm::decoder:

Public Member Functions

 decoder (const unsigned char *buf)
 Construction.
bm::short_t get_16 ()
 Reads 16bit word from the decoding buffer.
bm::word_t get_32 ()
 Reads 32 bit word from the decoding buffer.
void get_32 (bm::word_t *w, unsigned count)
 Reads block of 32-bit words from the decoding buffer.
void get_16 (bm::short_t *s, unsigned count)
 Reads block of 32-bit words from the decoding buffer.

Detailed Description

Class for decoding data from memory buffer.

Properly handles aligment issues with integer data types.

Definition at line 97 of file encoding.h.


Constructor & Destructor Documentation

bm::decoder::decoder ( const unsigned char *  buf  )  [inline]

Construction.

Parameters:
buf - pointer to the decoding memory.

Definition at line 687 of file encoding.h.


Member Function Documentation

void bm::decoder::get_16 ( bm::short_t s,
unsigned  count 
) [inline]

Reads block of 32-bit words from the decoding buffer.

Parameters:
s - pointer on memory block to read into.
count - size of memory block in words.

Definition at line 761 of file encoding.h.

References bm::decoder_base::buf_, and bm::decoder_base::seek().

BMFORCEINLINE bm::short_t bm::decoder::get_16 (  ) 

Reads 16bit word from the decoding buffer.

Definition at line 696 of file encoding.h.

References bm::decoder_base::buf_.

void bm::decoder::get_32 ( bm::word_t w,
unsigned  count 
) [inline]

Reads block of 32-bit words from the decoding buffer.

Parameters:
w - pointer on memory block to read into.
count - size of memory block in words.

Definition at line 730 of file encoding.h.

References bm::decoder_base::buf_, and bm::decoder_base::seek().

BMFORCEINLINE bm::word_t bm::decoder::get_32 (  ) 

Reads 32 bit word from the decoding buffer.

Definition at line 711 of file encoding.h.

References bm::decoder_base::buf_.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00251.map0000644000175000017500000000022511365042651013232 0ustar tlktlk bm3.7.0/doc/html/a00220.png0000644000175000017500000000342711365042647013251 0ustar tlktlk‰PNG  IHDRƒ(ÝFIKbKGDÿÿÿ ½§“ÌIDATxœíœmH“]Çÿ>m 4§³&aà¦ITfÔ0š„¢fF’Ù—¾´C³³‚,"ÉX/.c±J–‘#+JEI)Ûœ©ÛÌ—h¾äõ|nZ›ÛÔ•Oç÷i×Ù¹¯ûÎþ÷¹¯³›-ˆˆ ðþŸÅVÀøïÀÌÀà`f`pð~m0™LxûöíbhaüA8àÖæf½^ƒþAŒÅÃÓ¾ÁÍ Þ:3þ~îÝ»7ëÅÎj3ƒƒ™ÁÁÌÀà`f`p0308fÝZú˧OŸ ×ëqøðáÈ™£££¸~ý:ŠŠŠ¼ö›¯VóÏ¥R‰îînïÅÄÄ ;;; çóÅ‚W†?¢ºº:ZæÍðð0Î;ç³ß|µú›®Øl6X,X,(•J(•J.¶Ûí?Ÿ/¼20æB¡à^=zõ HÍ0==ãÇC("""ååå»Ý¹\ŽË—/#22"‘·oßFaa!D"Äb1ŸÏŸ?ãñãǨ¨¨À£G099‰¦¦&|ùò½½½¸páòóó!‰000€‚‚œ9s†Ë³víZlÞ¼Ùcl4‘““ƒ«W¯Âáp 66W®\ÃápÑÒßß´´4œ@cccDDÔÙÙI<&''‰ˆ¨¥¥…V®\é×y.^¼H™™™\<==Mb±˜îÞ½Kf³™UWW“L&s96++‹ÎŸ?ïU«Ó餿æf®ýGή®.—üjµš"##éÇDD466FCCC.ºhïÞ½GUUUd·Û}Ž/??Ÿòóó}ö{óæ :tˆV¯^M§OŸ&“Éäó˜Ÿñòù¾ ÈÊ ‘HÀçó¹xýúõèëëãâ@PPx<ûKOObcc¹8((ÑÑÑný,‹K?`f…1›Í^µ 477c÷îÝH$ÈÈÈÀôô´[þ}ûö!++ Û¶mÚ5k P(044`æ‰o||µšL&Šˆˆ ™LFr¹œRSSI"‘PZZšK~³ÙLQQQ´aÃÚµk………ÑÍ›7=ÎÕj¥ÒÒRŠ÷9þÔ *•Šd2©T*®îš+Þj†›áß¾}£W¯^¹ad``€ÚÛÛ©­­šššh||œ¢££É`0xìßÝÝMZ­–:::üÖ:< BitMagic: Distance metrics

Distance metrics
[Set algorithms]

Collaboration diagram for Distance metrics:

Enumerations

enum  bm::distance_metric {
  bm::COUNT_AND = set_COUNT_AND, bm::COUNT_XOR = set_COUNT_XOR, bm::COUNT_OR = set_COUNT_OR, bm::COUNT_SUB_AB = set_COUNT_SUB_AB,
  bm::COUNT_SUB_BA = set_COUNT_SUB_BA, bm::COUNT_A = set_COUNT_A, bm::COUNT_B = set_COUNT_B
}
 

Distance metrics codes defined for vectors A and B.

More...

Functions

distance_metric bm::operation2metric (set_operation op)
 Convert set operation into compatible distance metric.
template<class BV >
void bm::distance_operation (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance computing template function.
template<class BV >
unsigned bm::distance_and_operation (const BV &bv1, const BV &bv2)
 Distance AND computing template function.
template<class BV >
void bm::distance_operation_any (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance screening template function.
template<class BV >
bm::id_t bm::count_and (const BV &bv1, const BV &bv2)
 Computes bitcount of AND operation of two bitsets.
template<class BV >
bm::id_t bm::any_and (const BV &bv1, const BV &bv2)
 Computes if there is any bit in AND operation of two bitsets.
template<class BV >
bm::id_t bm::count_xor (const BV &bv1, const BV &bv2)
 Computes bitcount of XOR operation of two bitsets.
template<class BV >
bm::id_t bm::any_xor (const BV &bv1, const BV &bv2)
 Computes if there is any bit in XOR operation of two bitsets.
template<class BV >
bm::id_t bm::count_sub (const BV &bv1, const BV &bv2)
 Computes bitcount of SUB operation of two bitsets.
template<class BV >
bm::id_t bm::any_sub (const BV &bv1, const BV &bv2)
 Computes if there is any bit in SUB operation of two bitsets.
template<class BV >
bm::id_t bm::count_or (const BV &bv1, const BV &bv2)
 Computes bitcount of OR operation of two bitsets.
template<class BV >
bm::id_t bm::any_or (const BV &bv1, const BV &bv2)
 Computes if there is any bit in OR operation of two bitsets.

Detailed Description

Algorithms to compute binary distance metrics


Enumeration Type Documentation

Distance metrics codes defined for vectors A and B.

Enumerator:
COUNT_AND 

(A & B).count()

COUNT_XOR 

(A ^ B).count()

COUNT_OR 

(A | B).count()

COUNT_SUB_AB 

(A - B).count()

COUNT_SUB_BA 

(B - A).count()

COUNT_A 

A.count().

COUNT_B 

B.count().

Definition at line 55 of file bmalgo_impl.h.


Function Documentation

template<class BV >
bm::id_t bm::any_and ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes if there is any bit in AND operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
non zero value if there is any bit

Definition at line 995 of file bmalgo_impl.h.

References bm::COUNT_AND, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::any_or ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes if there is any bit in OR operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
non zero value if there is any bit

Definition at line 1097 of file bmalgo_impl.h.

References bm::COUNT_OR, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::any_sub ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes if there is any bit in SUB operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
non zero value if there is any bit

Definition at line 1064 of file bmalgo_impl.h.

References bm::COUNT_SUB_AB, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::any_xor ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes if there is any bit in XOR operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
non zero value if there is any bit

Definition at line 1029 of file bmalgo_impl.h.

References bm::COUNT_XOR, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::count_and ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes bitcount of AND operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
bitcount of the result
Examples:
sample9.cpp.

Definition at line 982 of file bmalgo_impl.h.

References bm::distance_and_operation().

Referenced by main().

template<class BV >
bm::id_t bm::count_or ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes bitcount of OR operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
bitcount of the result

Definition at line 1081 of file bmalgo_impl.h.

References bm::COUNT_OR, bm::distance_operation(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::count_sub ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes bitcount of SUB operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
bitcount of the result

Definition at line 1047 of file bmalgo_impl.h.

References bm::COUNT_SUB_AB, bm::distance_operation(), and bm::distance_metric_descriptor::result.

template<class BV >
bm::id_t bm::count_xor ( const BV &  bv1,
const BV &  bv2 
) [inline]

Computes bitcount of XOR operation of two bitsets.

Parameters:
bv1 - Argument bit-vector.
bv2 - Argument bit-vector.
Returns:
bitcount of the result
Examples:
sample9.cpp.

Definition at line 1013 of file bmalgo_impl.h.

References bm::COUNT_XOR, bm::distance_operation(), and bm::distance_metric_descriptor::result.

Referenced by main().

template<class BV >
unsigned bm::distance_and_operation ( const BV &  bv1,
const BV &  bv2 
) [inline]

Distance AND computing template function.

Parameters:
bv1 - argument bitvector 1 (A)
bv2 - argument bitvector 2 (B)

Definition at line 783 of file bmalgo_impl.h.

References BM_SET_MMX_GUARD, bm::combine_count_and_operation_with_block(), bm::min_value(), and bm::set_array_size.

Referenced by bm::count_and().

template<class BV >
void bm::distance_operation ( const BV &  bv1,
const BV &  bv2,
distance_metric_descriptor *  dmit,
distance_metric_descriptor *  dmit_end 
) [inline]

Distance computing template function.

Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes all metrics saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline.

Parameters:
bv1 - argument bitvector 1 (A)
bv2 - argument bitvector 2 (B)
dmit - pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field
dmit_end - pointer to (last+1) element of metric descriptors array
Examples:
sample9.cpp.

Definition at line 693 of file bmalgo_impl.h.

References BM_SET_MMX_GUARD, bm::combine_count_operation_with_block(), bm::distance_stage(), and bm::set_array_size.

Referenced by bm::count_or(), bm::count_sub(), bm::count_xor(), and main().

template<class BV >
void bm::distance_operation_any ( const BV &  bv1,
const BV &  bv2,
distance_metric_descriptor *  dmit,
distance_metric_descriptor *  dmit_end 
) [inline]

Distance screening template function.

Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes possybility of a metric(any bit) saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline.

Parameters:
bv1 - argument bitvector 1 (A)
bv2 - argument bitvector 2 (B)
dmit - pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field
dmit_end - pointer to (last+1) element of metric descriptors array

Definition at line 853 of file bmalgo_impl.h.

References BM_IS_GAP, BM_SET_MMX_GUARD, bm::combine_any_operation_with_block(), bm::distance_stage(), bm::distance_metric_descriptor::result, and bm::set_array_size.

Referenced by bm::any_and(), bm::any_or(), bm::any_sub(), and bm::any_xor().

distance_metric bm::operation2metric ( set_operation  op  )  [inline]

Convert set operation into compatible distance metric.

Definition at line 71 of file bmalgo_impl.h.

References BM_ASSERT, bm::is_const_set_operation(), bm::set_COUNT, and bm::set_COUNT_B.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize().


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00192.map0000644000175000017500000000025011365042645013237 0ustar tlktlk bm3.7.0/doc/html/a00192.md50000644000175000017500000000004011365042645013144 0ustar tlktlk6094cfd804a6538854807ab80137df74bm3.7.0/doc/html/a00219.map0000644000175000017500000000022011365042646013235 0ustar tlktlk bm3.7.0/doc/html/functions_0x7e.html0000644000175000017500000001106311365042644015470 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- ~ -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x62.html0000644000175000017500000002632711365042652016713 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- b -

  • best_representation() : bm
  • BigEndian : bm
  • bit_array_compute_gaps() : bm
  • bit_block_and() : bm
  • bit_block_and_any() : bm
  • bit_block_and_count() : bm
  • bit_block_any_range() : bm
  • bit_block_calc_count() : bm
  • bit_block_calc_count_change() : bm
  • bit_block_calc_count_range() : bm
  • bit_block_copy() : bm
  • bit_block_or() : bm
  • bit_block_or_any() : bm
  • bit_block_or_count() : bm
  • bit_block_set() : bm
  • bit_block_sub() : bm
  • bit_block_sub_any() : bm
  • bit_block_sub_count() : bm
  • bit_block_xor() : bm
  • bit_block_xor_any() : bm
  • bit_block_xor_count() : bm
  • bit_convert_to_arr() : bm
  • bit_convert_to_gap() : bm
  • bit_count_change() : bm
  • bit_count_change32() : bm
  • bit_count_nonzero_size() : bm
  • bit_find_in_block() : bm
  • bit_for_each() : bm
  • bit_for_each_4() : bm
  • bit_iblock_make_pcv() : bm
  • bit_iblock_pcv_stat() : bm
  • bit_iblock_reduce() : bm
  • bit_invert() : bm
  • bit_is_all_zero() : bm
  • bit_list() : bm
  • bit_list_4() : bm
  • bit_operation_and() : bm
  • bit_operation_and_any() : bm
  • bit_operation_and_count() : bm
  • bit_operation_count_func_type : bm
  • bit_operation_or() : bm
  • bit_operation_or_any() : bm
  • bit_operation_or_count() : bm
  • bit_operation_sub() : bm
  • bit_operation_sub_any() : bm
  • bit_operation_sub_count() : bm
  • bit_operation_sub_count_inv() : bm
  • bit_operation_xor() : bm
  • bit_operation_xor_any() : bm
  • bit_operation_xor_count() : bm
  • bit_recomb() : bm
  • bit_scan_fwd() : bm
  • bitcmp() : bm
  • bits_in_array : bm
  • bits_in_block : bm
  • block_range_scan() : bm
  • BM_AND : bm
  • BM_BIT : bm
  • BM_GAP : bm
  • BM_HM_DEFAULT : bm
  • BM_HM_ID_LIST : bm
  • BM_HM_NO_BO : bm
  • BM_HM_NO_GAPL : bm
  • BM_HM_RESIZE : bm
  • BM_NO_BYTE_ORDER : bm
  • BM_NO_GAP_LENGTH : bm
  • BM_OR : bm
  • BM_SUB : bm
  • BM_XOR : bm
  • bmfor_each() : bm
  • ByteOrder : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00107_source.html0000644000175000017500000002733611365042630015012 0ustar tlktlk BitMagic: sample2.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00029.html0000644000175000017500000000751711365042651013437 0ustar tlktlk BitMagic: bm::bit_OR< W > Struct Template Reference

bm::bit_OR< W > Struct Template Reference

Bit OR functor. More...

#include <bmfunc.h>

Public Member Functions

operator() (W w1, W w2)

Detailed Description

template<typename W>
struct bm::bit_OR< W >

Bit OR functor.

Definition at line 5074 of file bmfunc.h.


Member Function Documentation

template<typename W>
W bm::bit_OR< W >::operator() ( w1,
w2 
) [inline]

Definition at line 5076 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00226.md50000644000175000017500000000004011365042647013144 0ustar tlktlkfbe190dac8069605f457caec3e933e4ebm3.7.0/doc/html/namespacemembers_0x6f.html0000644000175000017500000001105011365042652016762 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- o -

  • op_and() : bm
  • op_or() : bm
  • op_xor() : bm
  • operation : bm
  • operation2metric() : bm
  • operator&() : bm
  • operator-() : bm
  • operator^() : bm
  • operator|() : bm
  • or_bit_block() : bm
  • or_op() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00219.md50000644000175000017500000000004011365042646013145 0ustar tlktlka79803a25297107b331862e7c2b5b031bm3.7.0/doc/html/a00132.md50000644000175000017500000000004011365042631013131 0ustar tlktlk732f86b49e555033cfc9810a5308a891bm3.7.0/doc/html/a00234.map0000644000175000017500000000017511365042647013244 0ustar tlktlk bm3.7.0/doc/html/a00127.html0000644000175000017500000000765611365042644013444 0ustar tlktlk BitMagic: Memory Allocation

Memory Allocation
[BitMagic C++ Library]

Collaboration diagram for Memory Allocation:

Data Structures

class  bm::block_allocator
 Default malloc based bitblock allocator class. More...
class  bm::ptr_allocator
 Default malloc based bitblock allocator class. More...
class  bm::mem_alloc< BA, PA >
 BM style allocator adapter. More...

Typedefs

typedef mem_alloc
< block_allocator,
ptr_allocator > 
bm::standard_allocator

Detailed Description

Memory allocation related units


Typedef Documentation

typedef mem_alloc<block_allocator, ptr_allocator> bm::standard_allocator

Definition at line 234 of file bmalloc.h.


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00152.md50000644000175000017500000000004011365042636013140 0ustar tlktlke3ef7bb8ccfa52b3a9b49905427c3939bm3.7.0/doc/html/a00169.md50000644000175000017500000000004011365042644013147 0ustar tlktlk6d84eb4cf6791ed97bfb90b2ee075a9cbm3.7.0/doc/html/a00147.md50000644000175000017500000000004011365042635013143 0ustar tlktlk18c36fa887b66d6c31ace6ad6c8095c8bm3.7.0/doc/html/a00215.map0000644000175000017500000000017611365042646013243 0ustar tlktlk bm3.7.0/doc/html/a00070.html0000644000175000017500000004236311365042650013430 0ustar tlktlk BitMagic: bm::bvector< Alloc >::insert_iterator Class Reference

bm::bvector< Alloc >::insert_iterator Class Reference
[The Main bvector<> Group]

Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces). More...

#include <bm.h>

Public Types

typedef std::output_iterator_tag iterator_category
typedef unsigned value_type
typedef void difference_type
typedef void pointer
typedef void reference

Public Member Functions

 insert_iterator (bvector< Alloc > &bvect)
insert_iteratoroperator= (bm::id_t n)
insert_iteratoroperator* ()
insert_iteratoroperator++ ()
insert_iteratoroperator++ (int)

Protected Attributes

bm::bvector< Alloc > & bvect_
bm::id_t max_bit_

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >::insert_iterator

Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces).

STL container can be converted to bvector using this iterator Insert iterator guarantees the vector will be dynamically resized (set_bit does not do that).

Note:
If you have many bits to set it is a good idea to use output iterator instead of explicitly calling set, because iterator may implement some performance specific tricks to make sure bulk insert is fast.

Definition at line 335 of file bm.h.


Member Typedef Documentation

template<class Alloc>
typedef void bm::bvector< Alloc >::insert_iterator::difference_type

Definition at line 342 of file bm.h.

template<class Alloc>
typedef std::output_iterator_tag bm::bvector< Alloc >::insert_iterator::iterator_category

Definition at line 339 of file bm.h.

template<class Alloc>
typedef void bm::bvector< Alloc >::insert_iterator::pointer

Definition at line 343 of file bm.h.

template<class Alloc>
typedef void bm::bvector< Alloc >::insert_iterator::reference

Definition at line 344 of file bm.h.

template<class Alloc>
typedef unsigned bm::bvector< Alloc >::insert_iterator::value_type

Definition at line 341 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::insert_iterator::insert_iterator ( bvector< Alloc > &  bvect  )  [inline]

Definition at line 346 of file bm.h.


Member Function Documentation

template<class Alloc>
insert_iterator& bm::bvector< Alloc >::insert_iterator::operator* (  )  [inline]

Returns *this without doing anything (no-op)

Definition at line 370 of file bm.h.

template<class Alloc>
insert_iterator& bm::bvector< Alloc >::insert_iterator::operator++ ( int   )  [inline]

Returns *this. This iterator does not move (no-op)

Definition at line 374 of file bm.h.

template<class Alloc>
insert_iterator& bm::bvector< Alloc >::insert_iterator::operator++ (  )  [inline]

Returns *this. This iterator does not move (no-op)

Definition at line 372 of file bm.h.

template<class Alloc>
insert_iterator& bm::bvector< Alloc >::insert_iterator::operator= ( bm::id_t  n  )  [inline]

Field Documentation

template<class Alloc>
bm::bvector<Alloc>& bm::bvector< Alloc >::insert_iterator::bvect_ [protected]

Definition at line 377 of file bm.h.

Referenced by bm::bvector< Alloc >::insert_iterator::operator=().

template<class Alloc>
bm::id_t bm::bvector< Alloc >::insert_iterator::max_bit_ [protected]

Definition at line 378 of file bm.h.

Referenced by bm::bvector< Alloc >::insert_iterator::operator=().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00055.html0000644000175000017500000002440211365042651013426 0ustar tlktlk BitMagic: bm::decoder_little_endian Class Reference

bm::decoder_little_endian Class Reference

Class for decoding data from memory buffer. More...

#include <encoding.h>

Inheritance diagram for bm::decoder_little_endian:
Collaboration diagram for bm::decoder_little_endian:

Public Member Functions

 decoder_little_endian (const unsigned char *buf)
bm::short_t get_16 ()
bm::word_t get_32 ()
void get_32 (bm::word_t *w, unsigned count)
void get_16 (bm::short_t *s, unsigned count)

Detailed Description

Class for decoding data from memory buffer.

Properly handles aligment issues with integer data types. Converts data to little endian architecture (presumed it was encoded as big endian)

Definition at line 124 of file encoding.h.


Constructor & Destructor Documentation

bm::decoder_little_endian::decoder_little_endian ( const unsigned char *  buf  )  [inline]

Definition at line 792 of file encoding.h.


Member Function Documentation

void bm::decoder_little_endian::get_16 ( bm::short_t s,
unsigned  count 
) [inline]

Definition at line 832 of file encoding.h.

References bm::decoder_base::buf_, and bm::decoder_base::seek().

BMFORCEINLINE bm::short_t bm::decoder_little_endian::get_16 (  ) 

Definition at line 797 of file encoding.h.

References bm::decoder_base::buf_.

void bm::decoder_little_endian::get_32 ( bm::word_t w,
unsigned  count 
) [inline]

Definition at line 812 of file encoding.h.

References bm::decoder_base::buf_, and bm::decoder_base::seek().

BMFORCEINLINE bm::word_t bm::decoder_little_endian::get_32 (  ) 

Definition at line 804 of file encoding.h.

References bm::decoder_base::buf_.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00050.html0000644000175000017500000002160711365042644013427 0ustar tlktlk BitMagic: dbg_block_allocator Class Reference

dbg_block_allocator Class Reference

Static Public Member Functions

static bm::word_tallocate (size_t n, const void *)
static void deallocate (bm::word_t *p, size_t n)
static int balance ()

Static Public Attributes

static unsigned na_ = 0
static unsigned nf_ = 0

Detailed Description

Examples:

sample6.cpp.

Definition at line 44 of file sample6.cpp.


Member Function Documentation

static bm::word_t* dbg_block_allocator::allocate ( size_t  n,
const void *   
) [inline, static]
Examples:
sample6.cpp.

Definition at line 50 of file sample6.cpp.

References na_.

static int dbg_block_allocator::balance (  )  [inline, static]
Examples:
sample6.cpp.

Definition at line 68 of file sample6.cpp.

References na_, and nf_.

Referenced by main().

static void dbg_block_allocator::deallocate ( bm::word_t p,
size_t  n 
) [inline, static]
Examples:
sample6.cpp.

Definition at line 60 of file sample6.cpp.

References nf_.


Field Documentation

unsigned dbg_block_allocator::na_ = 0 [static]
Examples:
sample6.cpp.

Definition at line 47 of file sample6.cpp.

Referenced by allocate(), balance(), and main().

unsigned dbg_block_allocator::nf_ = 0 [static]
Examples:
sample6.cpp.

Definition at line 48 of file sample6.cpp.

Referenced by balance(), and deallocate().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00196.png0000644000175000017500000000372211365042645013261 0ustar tlktlk‰PNG  IHDR›(é?ˆWbKGDÿÿÿ ½§“‡IDATxœí›oHSoÇ/׿ÒåÔj•Ú_*5,K,Ìa, ! {E½Q1#"2"!©ìEHI‚‰ä”ü“2AGù'–Q<+‰BÌÒÌiÖR³¦©K÷}^„‡æ¶£ë§§ßÓs`°û:÷¹¯ëº÷ݹî³sψÁ˜ô¢?ãÿ&6†`0±1C<ÝÐÝÝMOŸ>ý±0þ"ll6b{ôè:tH€/öî;mįיÁ˜ µZíðbÅÖl Á`bcC0˜Ø‚ÁÄÆ &6†`üc±½}û– ç ”‡Ÿ?N§£¬¬,2 Vv“ÉDÙÙÙ6ïÿ§À4Š‹‹aÇìFƒˆˆˆY÷ÿ]„òó+GŽAgg§ >£¢¢ ‰pþüy+»Á`€T*µyÿoƒG?ÿae”‡ºº:úúõ«`þº»»©¹¹™222¨¤¤D0¿B1'b³X,”’’Br¹œ–-[F—.]""¢Ú½{7]»v|}}I¡PPAAeddB¡ *--对rå >|ØaÛ‘ŸãÇÓ­[·¸~&“‰¶mÛF]]]DDôòåKŠŒŒ¤… ’¿¿?©Õj®ïƒ(88˜\]]),,Œôz=%%%‘Ñh¤¤¤$ÒétDDÔÔÔD¡¡¡$•J)00ª««‰ˆÈh4Òž={¨¨¨ˆ¼¼¼¨µµÕî<óΣZ­¦;vЩS§¨³³“‹e&ÅÅ—Ÿ³±Í N\í¢Ñhàââ‚ôôtŒŒŒ@§ÓÁÓÓeeeèëëƒH$¹sç`±XpãÆ ²³³a±Xpùòelذ«ººׯ_·Ûæó“››‹ððpî¼¢¢"lÞ¼0<< äææbll õõõËåhnn†Á`€‡‡îÝ»‡ïß¿#++ kÖ¬ÅbÁ—/_àããƒÆÆF˜Íf|üø¸}û6ÆÆÆPUUwww´µµÁ`0ÀÍÍ ñññxüø1ÆÇǭ樣£'OžD@@ï\†„„ //ƒôôt2:S\Žò›NEE¶nÝŠÂÂBŒÍüÁ;€¯ŒÎ‰Ø¼½½a6›9ÛÙ³g¾¾>†‡‡ííí‹ÅøñãàùóçX¾|ù?öc4!‘Hðþý{@ll,'ÒÒÒR„……Y•’’‚´´4\½zûöíãìf³ÙÙÙøùù¡¥¥——¥Ri5Îpá z{{¹c‹µµµØ»w/‘““ƒ‡ù½xñ®®®äççÃÏÏ“““‹/®™ò›Î“'OœœŒ•+WâÌ™3èîîv¯#øÄæðA¼3¬_¿ž$ × ¡úúz®-“ɈˆÈÅÅ…¤R)‰Åb®=~ ©T*ª¨¨ äädÒéttçÎ""êêꢶ¶6Z»v-wÞèè(ÅÅÅÑÄÄùûûsv‰DB§OŸ¶ë»§§Çª/Q@@w×(‰È××—ˆ~îœ9vìQZZ©Tªs-..&ND?ËZoo/=|øvíÚåð<¾¸¦– ³Éˆ(""‚"""¨¿¿Ÿòóó)::šBCC©²²’7öÙ2'k¶þþ~«¶Ñh¤Å‹ÏÅгösðàA*//§òòrŠ‹‹ãìr¹œ¢¢¢¨««ËêuóæMòðð ¡¡!«1+++íÞÈårÿäééIDÖ_‰DBR©”>þLƒƒƒ411Á›*))¡‹/RMM ÕÔÔÐýû÷)::Új}i¾¸œÉïW&'' ‰ÅbZ´ho_§pâ2hF"‚F£|ûö AAAÈÍÍåÊèoÞ¼L&ãÚ---VeT¯×£®®În›Ï˜L&Èd2YÑÞÞwww´¶¶FFF°iÓ&¨Õj444@¡PàÓ§O~–777˜L&Öe´¥¥2™ ~®• jkka0°`Á›¹ÑétHLLÄêÕ«‘™™‰žž»sØÔÔdUB§(((€··7ÆÇÇ–Q¾¸fÊo:HLLĺuë••£Ñh·ó¾fÛ¾};6nÜ¥R‰+V 66f³Ùi±¥¦¦Zý–ök›Ïω‰‰Xµj·Î™"''r¹*• ~~~HHHàú¤¦¦béÒ¥P©TËåœx`Ë–-ˆŒŒ„^¯dffÂËË 111X²d Nœ8Å6Ň™™‰àà`»Ç=Šýû÷ÛØ‡†† •JQUUÅû;›£¸fÊïWÊÊÊ T*QVVÆ­©‡yÛ£££hhhÀ³gÏ~#Äù÷ÓÓÓ­V‹W¯^Ùkoo‡V«µYFhµZ«+λwï Õjñúõk§cŸ˜˜púœÙ—£üæ#6>±¹Ö[r§vZ‚íÔeü<úaÿeC0˜Ø‚ÁÄÆ &6†`0±1ƒ‰!Ll Á`bc†Ã-FÎnÿa0fÂFl;wwïþ‰X96ÏFŒy‚=eC0˜Ø‚ñ_VC°< SXüIEND®B`‚bm3.7.0/doc/html/a00178.md50000644000175000017500000000004011365042644013147 0ustar tlktlk3756126ad96cdb2ec9e3dfedf56b2a25bm3.7.0/doc/html/a00152.png0000644000175000017500000021416111365042636013252 0ustar tlktlk‰PNG  IHDR›]¤~lbKGDÿÿÿ ½§“ IDATxœìÝw\ÕÕð熂€ DEÙŠ((š#EÑr£âîYnËÑ/Ë4G–¹Í•†¢¸·ššÔ\L‘Dd)ã²¹ë÷y‹¾ŒçýzùÒ˽ßs>÷^°îã9Ÿ#R«Õj½¿±ÐQÅÁ°‰ˆˆˆˆˆˆˆˆŠ Ã&""""""""*6R¡ """"""*m7nÜÀÓ§O….£LiРZ·n-tTˆØ œˆˆˆˆˆˆ*///ìÙ³Gè2ÊOOOøøø]•\ÙDDDDDDD•R—.]°páB¡Ë(–,Y"t T°g†MDDDDDDDDTl6Q±aØDDDDDDDDDņa†MDDDDDDDDTl6½Ett4Μ9Sªs¦¦¦Â×ב‘={ö¼ñqYYYðññ)ÍÒˆ ݉ˆˆˆˆˆˆè-ž>}ŠcÇŽ•ø<+W®DLL =='OžÔüyçÎo¼&##Û·o/ñÚˆŠ‚aQpóæM¤§§êÔ©ƒÝ»w \Ñ»aØDDDDDDDTµZµk×¢gÏžèׯŸfëšL&ìY³àç縻»ãôéÓØ¸q#ÜÝÝ1`Àœ?‹3fäwñâÅ ÂâÅ‹‘œœŒÅ‹ãÞ½{HJJÂüùó ]ßÉ“'1xð`|üñÇX¾|9Ôjuñ=y¢"bØDDDDDDDT€H$:t_}õöîÝ‹‹/B¡PàÎ;HKKƒŸŸ¼½½±bÅ áðáÃ8p f›[NN"""òŒ…ŒŒ Ìš5 †††˜5kìíí‘;wîª6•J…àà`øøø`ûöí¸|ù2îÞ½[ì¯Qa1l"""""""*€¾¾>Æ888 _¿~ð÷÷»êièС‰Dpvv†D"Á Aƒ4·322 5¾H$‚¾¾>¤Ri‘ë3f ¤R)êÖ­ sssÍv<"!0l"""""""*@ݺuó„@5ÂË—/5·uuu"‘ZZZH$šÛ%M,ÃÈÈHs»4æ$z†MDDDDDDDHIIÉs;99ÕªU{ïq³²²Þ{ ¢²†aQbccqíÚ5@FFŽ;†6mÚi ©TŠôôt¤¦¦‚‚‚]äZþøãû̯È=˜¾þºŸæ¹\ øë¯—øúëcptüS§þ‚›7#Š4&Ñ»`ØDDDDDDDŽH$ÂŽc!‰ |¬X,‚D"Ϙ›×zç9ž`Ĉ­P«ÿ9UÎĤðÛØ""â … ÷î=ƒŸ_@‘æ·µ5…§g›¿WoåR«sWqÉåJ?~îîkѾýRlÛv)OGTœ6Q…äìÜ={6˾¼‰H$ÂîÝcáäÔðçzø0C‡n‚R©ÒMR©µjn•”\®DBBZž¯}õÕ¤¦­Ñ÷¼y=òí5õjµÓ“'/ðå—Gak;Ÿ|⃬,y‘æ *Ã&""""""ª°æÏï…·('‰°f'Ú··~ç9?އ‡Çde)¡Tþ³EO,:lŠŒ|‘gÛœZ­†L–ï¿?[¤ZjÖÔÇÌ™A"Éÿã¾Z­ÖÔiii]]­"ÍAT†MDDDDDDT!]½ŽiÓ~±qµ7®n‰Døüóžèßßù爎NB¿~ë‘‘¥R™ç>µ¨Q£ðaÓ)JüôÓEÇ©¦±c?„‰‰Äâü·J$b¸»;aÚ´.E›¨06Q…‹Q£¶ÁÃc=ªVÕÁºuÃ_[½#‘ˆ1|ø˜:õÝÖ„„T¸»¯Erräò×›Ž+•JT¯^¸à"#_@Këõ@L,aþüEªK[[ŠÅ‹Ý¡z½$¹ÛûZµj„5k< ÕÓŠ¨¨6Q…'Ü9ûáæ¶ÑÑIðñ™€}û&¡M›Æ˜=ûcÍJ©T‚NlñÍ7Þy®”” xx¬C\œ …òQ©Ô06.\ƒð7­l¹\…7žàøñ»Eª¯gOG8;7|mE—–– ÔÀgŸõzc¸ET6Q¹–žž+N£}û¥øý÷`¬\9gÏ΂««­æ1ÞÞía`P`ooŠ-[F¾µ¯QAóµm»aañùM¯veÓãÇñšÞÿ%©±hÑadfæ©Î%Kúçé!%•ŠahX:ÙÀËk.^ )ÒxD…ۉˆˆˆˆˆˆÊ%…B…;¯ mÛo°}ûeLŸÞ—/ŽÁƒ]^ëW¤¥%ÁŠƒ`d¤Ÿ ¨REûçMLLGûöVPàIw5k®gSxx|¾÷©T@bbÖ­ó/|‘Í0`€3´´$‹EÐÖ–bß¾IøßÿÜѽ»FŒø iL¢Â©ÿÝˆˆˆˆˆ¨8}ú>–,9ŽgÏáíÝŸ|Ò5jè½õµZøxLL ‹¥†øøTìÚuÛ¶]‚L–@ÿ~ÂŽˆXQàio … ͆RYðÇóë×¢Aƒš…®166NN_ö ÉÔj5–.=‰ Îcþüž˜2…©ØH…®€ˆˆˆˆˆˆ¨°#ñå—GpûöSôíÛ>>ãan^«P׊D¢b šÀظfÏþ;ÚÂÝ} Œ /ƒX,‚R©‚¶¶´À  ž=KÌ4‰D€––r¹juîV¼¦Më£E‹ÈÈ(ÚVº:u 1gNw4lXS4åÎ!‚½`jjˆ/¾8Œ˜˜|õU¿·ž`GTX ›ˆˆˆˆˆˆ¨Ì‹ˆHÀ7ßÇéÓ÷Ѷ­%NžœŽæÍ]à»ïÎÀÉÉGNÃÅ‹¡X¿þ<®^ CNŽ¢P×?yòOsp#£ªhÞÜ ™™rÄÅ¥àСi¨Sçý²éÓ»æ{êÜèÑ`ll€©SA|¼ ëÖ ƒ¶6£z?ü""""""¢2+!!ß¿ür ÆØµkÜÜì….Kã?ÂpéRœ ±X WW[¸ºÚ"((¿ÿ\¨1êÖ5ÂŽcЬY}˜šŽ¿‹É“wCOOç½kÌ/hz¥W/GÔ¬©oïm:tvì£i¦Nô.س‰ˆˆˆˆˆˆÊœôôlüôÓE¬_úú:˜7¯<¶±q5˜›×ÂÍ›OŠ}ìüØÙ™âøñO¡R©Ñ«× -µ¹©b)[?©DDDDDDT)©Õjœ<ù':uú‹Bޏ~}>ý´+ªTѺ¼7úá‡sèÚµ š6­W"ã·nm7—ÈØù©W¯:Ž™†úõk oßµ¸y3¢Tç§Ša êêÕpôî½ãÇÿŒfÍÌpñâgøæ›þ¨QCOèÒòuñbnßþ 3ft+±9Z·¶À;O!—+KlŽ712ª _߉hÛ¶1ÞˆÓ§ï—êüTþ1l"""""""A=ǰa[àá±úúº8{v6lsóZB—V ï¿?WW[8:š•Ø..ÈÊ’ãÞ½¨›#?ººZزe† iñãwbß¾›¥^•_<ŽˆˆˆˆˆˆJUtt–/?…C‡ѤI=ìÛ7 :X ]V¡]¹Ž›7#pôè'%:…EmÔ®] 7nDÀÙÙ¼Dçz‰DŒeË<`dT3gú"==£Gw(õ:¨üaØDDDDDDD¥"11?þø+vìøõêUÇúõÃѧOsˆD"¡K+’õëýѶ­%ZµjTâs¹¸XàÆLžÜ¹ÄçÊϼy=P­š.-:ŒÔÔ,|úiWÁj¡òa•¨ÌÌlÙr7^€¶¶_~éŽaÃ>€––DèÒŠ,((/†ÀÇg|©Ìײ¥9Ö­ó/•¹ÞfòäÎÐ××Åüù’’E‹ú”»JÃ&""""""* … {÷^ÇêÕg‘––‰]1qb'èéé]Ú;۴鬭Mб£M©ÌçìÜ/_¦!2ò…ཬFŒh‹jÕt1}ú¤¥ecÙ2H$lM¯cØDDDDDDDÅJ­VãôéûX¶ì$ž>}‰aÃÚbÆŒn¨UK_èÒÞKLL2޹U«—ÚªžfÍÌ £#Å‚‡MЯŸôõu0~üN¤¥eãǽ •2p¢¼øADDDDDDÅæêÕpôé³ãÆí„ƒC}\¼ø¾ù¦¹š`ëÖK¨QCîîN¥6§¶¶f¸}û¯R›³ ]»6ÁîÝãqîÜLš´ r¹Rè’¨ŒaØDDDDDDDï-(è9†ßõÐÓÓÅ™33±aÃð2±§8Èd™ðñ¹Žñã;–z¯)gç† Œ,Õ9 Ò¾½ö와‹ƒ1nÜNN”Ã&""""""zgÑÑIøôÓ=èÚuââdðõ_߉pp¨/tiÅÊÇç:5¼¼Ú”úÜÎÎæ ‰EjjV©Ïý6..Ø»w"®_‡·÷6dg+„.‰Ê†MDDDDDDTd‰‰éøê«£h×n)nÝz‚uë†áìÙYøðÃÒiœ]šär%~úé"¼¼>€A•RŸßÅÅJ¥ wî”­t¯8;›cß¾É ü #GnEffŽÐ%QÀ°‰ˆˆˆˆˆˆ -+K޵kCÛ¶ßÀÏ/ÿû_\¼øÜÝJ­ivi;rä6^¾LØ1 2¿±q5˜™Õ@@@¤ óÄÑÑ ~~“ñàÁ3Œñ228Uv ›ˆˆˆˆˆˆ¨@ … {ö\Ç|ƒü cÇ~ˆë×ÂÛ»C©÷0*Mjµ7^€»»êÖ5¬'§†eªIø5mZ~~“ OÏÍHK˺$Ã&""""""z«Ó§ïÃÍm%>ÿüºwoŠ+W`öì¡§§#ti%îâÅ„„Äb„N‚ÖѪU#DB¥R ZÇÛØÙÕÅÁƒS™€aöp…S%ư‰ˆˆˆˆˆˆÞèæÍôî½cÇm\¼ø–.õ€±q5¡K+57^@ÇŽ6°·¯+h-[šC&ËDXXœ uÄÊÊ~~Saö°‡S%ۉˆˆˆˆˆˆò ÅÈ‘[áºRœ<9›6„¹y-¡K+UDãòåPÁW5€½}=T©¢Û·#….¥@¯§°°8Œñ§Jˆa¢£“0s¦/:w^çÏ“áã3~~Sмy¡KÄæÍ¿£iÓzèØQøö¤R1ÍPvû6ý›Mìß? ÁÁ±ðöÞÎÀ©’aØDDDDDDTÉÉd™X²ä8:tX†?þÅš5ž8{v\]m….M0ÑÑI8zô6Æë(t)­Z5­[B—Qhvvuáë;÷ï?Ø1;­º$*% ›ˆˆˆˆˆˆ*©¬,96l8—¯áë{ŸÞW®,À€-!‹„.OPÛ·_†‰‰!ÜÝ„.E£eKs<~œ€ää ¡K)´&MêÁ×w"îÜyŠ1c¶C.W ]•†MDDDDDD•ŒJ¥†¯ï tè° «WŸ…·w{\½ºãÆu„––Dèò'“eb÷î«=ºC™z=œœB­Vãöíò±•î‡úðõˆ€€'7n'§J€aQ%ráB0>þø;Ì»;ÛáÊ•˜7¯ t….­Ìðñ¹±X /¯„.%š5õan^ ‘B—RdŽŽfسg"®^ Ã'Ÿø@©T ]• †MDDDDDD•À£GÏáåµ^^›ajj„ß~›ƒåËÂÄÄ@èÒʹ\‰Ÿ~º/¯6e2€sqi„›7ËOߦsrjˆ;Æâܹ‡˜7ÏjµZè’¨„0l""""""ªÀbcS0s¦/ºu[…/ÒpàÀüüóXX[׺´2iïÞHLL/SÁÿÍÅÅ·o?-·[ÑÚµ³ÄæÍ#áçw _~yTèr¨„H….€ˆˆˆˆˆˆŠ_zz6Ö­óÇæÍ¿£fM}¬[7 }û¶€HT¹¿B¡Âúõþ:´5êÔ1ºœ7rq±@ffîÝ{gç†B—óNÜÜì±nÝ0Lž¼úú:˜3§»Ð%Q1cØDDDDDDT(*üòË5|÷ÝÈåJÌÛÞÞí¡£Ã9x0±±)˜2¥‹Ð¥äËÒÒµjéãæÍˆr6@ïÞÍ‘‘‘ƒ™3}¡¯¯‹I“\….‰Šÿ¶!"""""ª NŸ¾eËN௿^bôè˜6Í 5jè ]V¹ P¨°fͯ0 %êׯ.t9oåâb7"Ê}@3x° ÒÓ³±hÑaèéé`Ĉ¶B—DÅ„aQ9ø–.=Žë×#лwsìÚ5ææµ„.«\ñõ½èè$|úiW¡K)PëÖøþûsP«Õå~[äèÑ––ùó@__ýû; ]†MDDDDDDåÔ_½Äòå§pôè´jÕÇŽ}Z®·V %+KŽÕ«Ïbذ¶hذ¦ÐåÈÅÅÉÉ ‰…­­©Ðå¼·O>qCjjfÌØ cc´oo%tIôž6•3))X³æWlÛvõë×ÀÖ­ÞèÞÝAè²Ê­íÛ/C&ËÄôéeU4mZzz:¸yóI…›`þüžˆ‰IÆèÑÛàë; NN MË3‘Z­V ]QQ”÷­Cï«jUGT«Ö©©×‘‘q€ªÀk|||àééY¬uìÙ³^^^Å:¦ªUkµZ‰´´ëB—(ÌÇôAƒ6ÀÄÄk×–ÿ×ÿ¹\‰qãv"00ÇÊ­ åWW6Q¹äîî^ìáIy¡Tª‘“£B•*…;5mРA%ZÏþýûKtüÊbÏž=8räH¡Û²e#œ8q·„+*]ZZlÜ8nÀ!›pøðT˜š ]½†MDDDDDT. 8º ø>¹\^è°©iÓzøñÇ_‘žž ==®¬ôT©¢]»ÆaàÀõ6l þºB—EE$º"""""""*‡úP©Ôxø0ZèRŠ]zøå—ñHN΄·÷Vdfæ]Ã&""""""¢rÆÌ¬ªW×ý{Ï„.¥D˜šaÏž  äI»¡TÜ—ŒÊ†MDDDDDDDåPÓ¦õpÿ~Å ›ÀƦ~þy,._Å×_º*†MDDDDDDDåƒC}Ü»%t%ÊÉ©!Ö¬ñÄO?]ÂÏ?_º*$†MDDDDDDDåP³ff¯ð=zõrÄçŸ÷ÄÂ…‡pîܡˡB`ØDDDDDDZxx8vîÜY,cEGGãÛo¿Åƒ¥ó7==K—.-•¹*ƒ£GâæÍ›HJJŠ+Šul!Þ«fÍêC©TáÑ£˜RWS§vÁ°a`Ҥݸ}û/¡Ë¡0l"""""¢ -88›6m*–±FŒ»wïB*•ËxIMMÅ_|Q*sU~~~¸zõ*RRR°mÛ¶b[ˆ÷ªaÚ00¨Rá·Ò½²dItè`‘#·"2ò…ÐåÐ[0l""""""*¤§OŸbúôé°µµºzæææ ºŒ÷&‰ààP±›„ÿ›D"ÆÆÃѰaMŒ½2Y–Ð%Q>6Q…§R©ðÉ'ŸÀÀÀÆÆÆX¶làåË—pssÃêÕ«Q·n]Ô®]Û·oÇìÙ³Q»vm˜ššÂ××àíí§OŸbĈ8uê"##áêêšgžÁƒãÆšq}||иqcèééaÔ¨QP*•€ß~û Mš4¶¶6œœœðÖú·nÝŠ† BOOÞÞÞP©Êç1ð÷ïßG»ví «« kkkìÙ³Þëõúý÷ßáèèØÚÚâèÑ£šû|}}annŽ*UªÀÝÝ)))€¸¸8ôîÝ»Ps?~7FÕªUáíí9sæàÔ©Sù>ÇÒ~¯êãÁƒÊ6@•*ÚØ¶Í))™;v;är¥Ð%Ñ0l"""""¢ / ZZZˆÅ¡C‡°|ùr8pr¹.\@rr2¢££ñÕW_a̘1¨]»6âãã1sæL,Z´ðÃ? ^½zX»v-ºt邬¬,Ü¿?ÏŒ‹/–økVÜÒÓÓñÑGÁÓÓ)))Ø´i&Mš„«W¯¾óë‡>}ú`ÆŒÉdX¾|9<==‚?ÿü£FÂêÕ«‘””„N:áĉ€ÌÌL\¸pÞ:wDD<==ñÃ? 11ÖÖÖøþû˜øÆç(Ä{åà`†Xää(Jtž²ÄÄÄ¿ü2÷îEaþüƒB—CoÀ°‰ˆˆˆˆˆ*<###|ûí·¨Zµ*Ú·o©S§jVÕ¨T*Ì›7"‘nnnJ¥˜5k–ævjj*ÀÐÐb±†††ÐÑÑ)pΜœ|ùå—ÐÖÖF£FЬY3¤¤¤`ß¾}èÔ©ÜÝÝQ¥JÌ;“&MBfff¾c-Y²ÚÚÚhܸ1š4i¢Y¡Sžœ8q¦¦¦˜2e tttйsgŒ5 ~~~Þíõ:räZ´hQ£FAGG}ûöE=°oß>ìÙ³ýû÷Gÿþý¡««‹éÓ§ÃÁÁáµå7÷Þ½{Ñ­[7ôîݺººøì³Ï`llüÖçYÚC}ÈåJUü&áÿfggŠõëGÀ×÷¶n½$t9ô¥ÓÕŽˆˆˆˆˆH@7†–––ævÓ¦Máïﯹ­§§ ·ŽŽŽŽ¦¸H$z¯yMMM5~5Vdd$¬­­5_×ÒÒ¼yóòC"‘ víÚ¯SÞDFF"88æææš¯eff¢GšÛE}½ž={–ç>°±±ATT233ѤI“<÷ÙÛÛç[_aæ‰D°°°Èw !Þ+ ‹ÚÐÓÓÁýûÏàèhVâó•%]ºØaáÂÞX¼ø(¬¬Lб£Ð%Ñ߸²‰ˆˆˆˆˆ*¼/òž\5jû<ééé>¦ZµjHNNÎóµC‡•ËÕJEa``€: 222ϯ7¾õº·½^¯½·/_¾„¡¡!ªW¯Žøøø<÷ý÷±©V­^¾|™çkIIIE£¤‰Å"4iRþY9N¤û¯ :Áã%&L؉Çã ¾€JÃ&"""""ªð"##5ýzRSS±yóæ<+jÞ…––RRR4ý{nܸððð¯ëÚµ+Ž;¦ BnܸaÆA"‘Ž9‚¼Wme‘››._¾Œ   @FFœqøðá·^÷¶×«k×®øõך'Ö IDAT_ ·ñ÷Áƒáææ†.]ºÀ××11¹ÛËîÝ»‡K—жÝÊÍÍ GŽABBàÚµkxôè‘fÅRYy¯*[“ðÿZ±blmëbøðŸ “å¿•JÃ&"""""ªðÚ´iƒ™3g¢cÇŽ°¶¶FÆ 1~üø÷³Q£Fhݺ5œœœÐ·o_Ìš5 íÚµ+ð:WWWxzz¢I“&pssC·nݰråJèëë¦OŸŽ#G޼Wme‘••¾þúk´iÓnnn°¶¶FÓ¦M1xðà·^÷¶×«yóæ˜5kœÑ­[74iÒøøãÑ·o_tíÚöööpuuEïÞ½áææV¤š{ôèÞ½{£I“&èÚµ+fÍšGGGhkk(;C}ÅTÚ“Ù´´$ضÍJ¥ cÇî€RY>Ok¬HDêüŽ< """""*£D"|||àééYèk²²²píÚ5ÂÉÉ©XêP(¸~ý:€Ü@ëU¯§Â Ó'O`gg3³’íµó.¯WaìÙ³^^^ùž¤÷&ÑÑÑxøð!êÕ«÷ZO¥·yÛë‰ÐÐP˜››¿ÖÃéþýûˆ‹‹ƒ‹‹ ä6…OJJBÍš5ß:gBB^¼x¹\ŽÄÄD´mÛvvvðññA›6m ]{a½Ëë !!±pu]Žsçf£iÓzÅ^Wyƒ>}Ö`àÀ–XºÔCèr*³6'"""""AÈd™˜;×õëW‡•• ÌÍk¡Q£Ú06®V"óéêêÂÕÕµXÇ”J¥hß¾ý;]kee++«b­§<¨W¯êÕ+z ò¶×ËÜÜlÚ4Rè’*<~÷UrjµOŸ&jz(…‡Çÿý{d²,€¡aUMÔ±£ ,-am]õë×xïUGÍš™!''·IxÓ¦õðí·áèhöÞÏ«°är%´´$%6~BB*¢¢áäÔð÷ÇÆ¦¼¶Ú‹*/•*Û¶yÃÇç,8•JUà sr¹]»6¾¾ <ˆ†³ó›¿ß*«Zµô±qãpxx¬Ç®]W1bD[¡KªÐ6U¯ú)…„äI¡¡q7ìŽCFF NCXY™ yó4È––ư±©ƒš5õK¬.GG3ˆÅ",_>žžm ‰ u——Ž9Räù d2<®…BŒÆSP­ZN‘Ç),•J„7êÀÁáôõå¯ÝWÑÑú¨];õê¥A,.är–šš…¬,922r––…¬,22²‘––ìl9ÒÒ²‘žžìlRS³p÷îST¯ÞŸ Zµ˜›§@G‡ÍÛß•ŸŸŸæÏ^^ÀÅÅcÇîÀ“' o œŒŒôðða4úömCêøóϧ ›ÞÀÅÅsætÇÿþw-[šÃÞ¾®Ð%UX"µº° 󈈈ˆˆ¨<Ë•šÓÞrW+å®Xzü8r¹"‘õëW×I––&°±©+«:‚õ2‘ɲŠ4÷ Aƒ ýX¥R„ÔT$'ë 9YééÚšíIff©hØPVÔr‹ì?rOkÙ2ººŠ<÷©ÕÀ•+¹÷K$*˜˜dÂÄ$zz¯Sïã“O>Aûöíó½ÿîݧèÑãû|D‘š@P¡PB¥Ê}1›7O€¾~É…v•Éþýû5ÎÎV`ñâcøùç?ä®Dü7-- Z·¶ÀÍ›OP¥Š6ôõuààPÛ·.ÕšË µZ OÏ͈ŽNÂéÓ3¡§W¸í¾T$ ›ˆˆˆˆˆÊ©¬,ùß=”âƒðð8„„ÄâéÓ—P(THÄ03«kë:°²2­mîï––&¨ZU[èòKLNŽ‘¸v-.ãÏ?£ Tª ­-Õl׉DpuµÅîÝã ½’ê}ØØÌGjj&LL pêÔ ˜šå¹ÿêÕpxx¬ÈåJ8:6€·w{ôéÓººZ%^#4i²Éɯù‘J%hРöî3³%\]åvîÜL›¶™™9P(þ½zL„]»Æ¢E‹ðõ½uëü‘’’…vícøð¶èÞ½Y‰n-^¼HC×®+Ñ¡ƒ5~üÑKèr*"†MDDDDDe]zz6ÂÂâ£é§‡¨¨D¨TjhiI`n^ ¶¶¦°²2µun dii míŠß9C¡PáÏ?Ÿâ?ÂpéR(Ÿ 'G mm rrTò~ä‘HD¨]»ΟŸ#£ª¥Rc—.+-- LM qòäŒ×¶&޵.kNó‹ÅP«Õ¨ZUC†¸`øðJüØö]»®bÁ‚ƒP*ßÞ#¤R1œœÌñóÏc`hX:¯ce›‚I“váÖ­'šeÚÚ/Ó’§NÝøq;ѹ³~ÿ=5kêaÈÖ6¬-êׯ.`õeË•+á2d#V­ŒÁƒ]„.§¢aØDDDDDTVdeÉ5Mºƒƒc‹XDE%B­VCWW ––Æšmo¯št››×ªÔ+Ö­óÇÒ¥'ä®X*è#ŽD"ÆÑ£ŸäÛ°»$ ¼—/‡È] daQ ÇŽMϳu02ò:tXöÆ çÕj''§†ðön^½š—Èic©©YptüYYoßÂ'‹Ð§O ¬YãY©¿÷„ R©±n?V®<¥R?´¯ïDÍý11Épv^ ?¿)°°¨Ÿëðñ¹Ž„ºt±ÇÈ‘íЩ“-Äâ’_ÑWÖ}÷ÝlØpgÎÌ„••‰ÐåT$ ›ˆˆˆˆˆJ›\®Dxxn?¥  „†Æ"((QQ‰P*UÐÒ’ÀÒ2w…’­­)¬­ëÀÎÎff5 ‘¼ßÉo‘\®DûöK“òŸíE¯‰DøßÿúbüøŽ¥T]®éÓ÷ààÁ@M$•JФI=:4Uªü³¥qñâ£Ø¶íR¾Í _U«êÀÃãGKKãb«3!!K–Ç‘#·5+¬ÞäÓO»bîÜ‘Þ,00½{¯ÁªUƒáéÙ&Ï}Í›ñã;aòäÎrF~ýõ!~þù þø# Õ˜10p  ôõ+oÏ"¥R…Áƒ7"11'ONÏó³Hï…aQIQ(Txò$ÁÁ1š&ÝÁÁ1𓥤R15ª­ ”^…KÕ†TÊP©(‚‚bЭ۪·nÿ’J%puµÅÎcJ=$Y¼ø(v츌œœ©T‚V­Á×w¢fuL– —¯‘ššU¨¾Ióç÷ÂÔ©]Þ«¶ôôlœ=ûàÒ¥PLÚkÖüúÚãÄbD"`ÅŠA:´ÍF¢Ò&“eA­V½¶qäÈ­ÐÕÕÂæÍ#_»&,,Û¶]ÂHÄ2¤5¼½ÛÃܼVi•]¦ÄÅÉàæ¶={6÷ߺœŠ‚aÑûR*UˆŠJDPPÌß«•ž#44ááqË•šFÝvv¹¡Rn¸”ÛW‰[ŠÏêÕg±zõ9¨T¯N‰ÆÆ¸pa. ª”zmëÖùã»ïÎ ;;ïItR©®®vؾ}´fÕÚŽ`Ñ¢CšžD­Z?|IOφ›ÛJØÛ×Ŷm£….§¼cØDDDDD•[||*BBb4'¿åž™, `l\ 66¦šÕJ¶¶u`mmšç1N`à_˜8ñgÀ¦M#áìÜ0Ïv:©TŒnÝšbëVoÁëìÝû‡7n\G,^ì ÷»k×Â5ÍÂ¥R LL P«–>z÷n®iþü&ÉÉ8~ü. ÄÍ›OP£†úôiþýáì\¸Sø¦MóÁÝ»Oqòä ~¿—CmÚ,Á A­0sæGE¾611»w_Ŷm—––¡C[c„NhРf TZvú3g~„©S»]Ny -ø1DDDDDÂÉÊ’#44öïàb5§À={–µZ ]]-ÍÉoíÛ[iú+Õ¯_½Òß]‘½mÛ\~ÊRÐ@4I¥ ÐC‡¶Á°a›ñøq|¾ß«5kêãÊ•ùhÔ¨6ââRpôè]8p D£^½êèÒÅ.¡CkL˜Ð‘ßó¤áèh±X„»w£Š-l‰DèÜÙ;Û!00ëÖùcÌ˜í°´4ÁÌ™¡W/Ç :YY™`áÂÞX¼ø(\]mѤ‰ð«#Ë®l""""¢2A¡P!""ÁÁ±xô(¡¡¹½•ž>Í=þ]KK++“¿{)å®R²µ5Eƒ5+ćÊŸL–‰éÓ÷â·ßæ»m®<8pZ´h€qã:j¶m.[v>>×póæ¨ZõõÓåÒÓ³qêÔ=<ˆ+W §§ž=›cÀg´iÓb±GÞÁÔ©¿`Ĉ¶X²¤¹|m¨d¸º.G—.öX¸°w‰Í‹µkýqøp llLñÙg=еk“›¯´¨Õjxx¬GzzNœ˜©”Û銀Û興ˆˆ¨ôÅÄ$#88AAσààÜÕJr¹R©ææµ`gW÷_'À™Âܼÿg¿ ü S¦ìFNŽ7Žxë¶¹²N­V¿%&¦£uë¯1kÖǘ8±€ÜàõâÅ:€Ó§ïC©T¡sg; Ð]»6ÉÓÓé•'þÄ”)»1dHk|û­'̜鋨¨—ðó›Râs…„ÄbåÊÓ8}ú>š77üy=ðá‡6%>oIŠŒ|ÎW`öìßzú#½†a•œÔÔ,„†ÆâÑ£B¥Gb’’011„)ìísƒ%;»º°¶6¶6»=TvÿÞ6×®Ö®õBÍšúB—U"–,9ŽnaË–Q8vì.Ž»ƒ—/ÓѲ¥9ú÷wFß¾-`dTµÀqΞ}€ñãw¢g¬Z5˜ »w_ÅW_CpðÒRû~¸w/ +Wž†¿>ø 1æÍë—òoØp«V¿ÿ4jT[èrÊ †MDDDDôþär%""þ“þ –¢¢ä6ë¶±1…]î/›Ü€©0 ©ò©(Ûæ #:: »v]źu¿A­,-ѯŸ3ú÷w~§žSþþA;v;ºwo†5k<¡¥%)ª©¼xð ݺ­ÂùósakkZªsߺõ+VœÂ•+ápuµÅܹ=àèhVª5¥R…ž=@ÕªÚ8xpJ…ý»¨˜1l""""¢¢yþ<AA1~Ž  Å <þx5¾þº?FŒh+t9åÃ&""""z3™, ÁÁÏóôV ŠL– 055‚)lmM5¿[[×áJ z'*•k×þ†ï¾;WW;|ÿýPÔ¨ñöÓæÊ¥R…Ë—Cqà@Nº•J 77{ Ø ;ÛáåË4´i³_~éŽQ£Ú½÷|wî<Űa[`mm‚Ÿ ƒ*Åð,¨¸yó .ì1c:T˜•pAA1ðó»‰Ã‡ï ..ÎÎæððhùÆ>L‹Ɖwqõê‚bY‹!C6¡vm}øøLМ€G•ËâÅGqùr(~ûmŽÐ¥@­VãèÑ;øæ›HNÎÀÔ©]0aB'èêj ]ZrrèÚu6¬‰]»Æ ]NYǰ‰ˆˆˆ¨2yö, AAÏ’Û´;$$ááñË•ÐÒ’ÀÒÒÖÖuФI=ØØü³ލ¤øûaúô=04¬‚GÀÁ¡¾Ð%½·øøT9rû÷ßÄ£GÏafV-ááÑò­ †_¼HCÛ¶K0mš¦Ms+–Z¢¢1xðFˆÅ"øúNBýúÕ‹e\*?Ž¿‹É“w#4tY™ÙR™•%ÇæÍ¿cÝ:UÅ‚½Ð·o‹22F¢oß±ví0ôëç$t9eÃ&"""¢ŠH&Ëü;Lúç$¸ÈdY€úõ«ÿ&ÕÕôV²´4á8*599 ,]z?ýt -±téèéé]Ö;ËÊ’ãÌ™û8x0¿ÿ==môêÕ-ѺµE¡?D÷ÝüôÓE\¿¾¨ØèÇǧbèÐMHNÎÀ¾}“`ii\,ãRù•ˆÖ­¿Æ¡CSѦMc¡ËÉ#.N†åËOaÿþ›pr2ÇÒ¥дi=¡Ëz« áäÉ»¸ti> t….§¬bØDDDDTžÉåJ„†Æ"$$öïfݹÁÒóçɃ*o«{ûzš†ÝìßBBzò$“&íFDD<–-óÀ€-….é¨ÕjܸýûoáÔ©?‘žžƒNl0p`+tëÖô¶¥¥e£mÛ%8°-êSlµ¦¤d`øð­ˆˆˆ‡Ï„ry*½;GÇ/0iRgLœØIèRÞèÁƒhÌŸwïþ…#ÚaîÜîeö¿S2Y&Úµ[ ww'|ýu?¡Ë)«6•jµQQ‰ ‰Epp >ÌÝ‘ð¯-p&‡Juak›»Z©^=n™¡²åÀÌŸcÆáoÝVVV=~C‡±ÿ-DG'¡iÓzððh…þýQ«–þ{¿uë%|óÍq\¹²uë_#⌌Œ»O°sçX´mkYlcSÙ6räVèèH±eË(¡KÉ—Z­Æþý·°dÉqˆÅ",\Ø-ËäÖº}ûnbΜ}8wn6lmË×Éz¥„aQY“œœ  MÃî  „†Æ"55w œ™Y MÃn{ûº°¶®KKcn£2-==óçÄ?¾#>ÿ¼'´µ¥B—UhÉÉ8|ø6 D``$LL 1`€3 hYìǸçä(ðá‡ß¢];+|÷Ýàb[.WbÚ´_pöìlÞ<ݺ5-Öñ©lZ³æWüòË5ܺõ…Ð¥H&ËķߞĮ]WáâbU«âl…Òjµ}ú¬T*Á¡CSËd &0†MDDDDBÉÉQ 44NsúÛ«K11¹[à «ÂÎÎôïÓßêj¦jÕØ#‚Ê—û÷ŸaâÄ]É2ñÞèÒÅNè’ %'G ‚±oßMœ?©TŒ?vÀ A­Ð®$q‰Í}à@fÎÜ‹ß~›kë:Å:¶R©ÂgŸ€¯ï ,[æaÃ>(Öñ©ì¹t)C†lÂÝ»_Áظ|œJxï^fÍÚ‡Çã1kÖG˜0ÁRiÉýÌÕýûÏУÇ÷øñG/6 Ã&"""¢’¦V«ñôi¢f¥Rn¸‹ˆˆx(*hiI`mÛK)7\ÊýÝÔ´ø¶Ï A­Vÿ½%ì\\aíÚa011º¬FâСÛ8|82Y&Ú¶µÂ€ÎèÕ˱Ԛ˜«Tjtíº ææ5±mÛè™ã»ïÎbõê³øôÓ®˜3çc®Î¨Àd²,ØÙÍÇöí£ñÑGåg5›B¡ÂÆçñý÷ç`ee‚U«—©+?ÿüΜ¹K—>ç?åۉˆˆˆ¨8%'ghú)ån…{ŽààX¤§gC$ýk Ü«ÞJ¦°°0.SÿZKT^¾LÃþÖ¢‡ IDATŒ{ñûïÁ˜=»;¦Ní±¸ì†ÑÑIØ¿ÿDxx<,-1h úõs¬÷Ù… ÁðòÚ ?¿)h×®dú+ùúÞÀܹûÑ¿¿3V®Ìí¸X‡Ëгg3|öYO¡K)²ˆˆÌž½O0iRgÌžýq™ø^MJJG‡Ë0hP+|ñE_¡Ë)K6½ ¥R…ˆˆ=ǃÑš¦Ý¯¶ÀU…½}]ØØä®R²û?{÷Wu½ÇqüÅF¦²—Ê’ \©¸2÷ž7ÍYj™©©¥–¦92ˆYŽ®™šš¸WÙÕr›[ A@Ù›Ã^çÜ?Á Èá~ŸÇyÎï÷=Ô9rÞçóù|Ý­quµÆÀ îní.uîÜfÌØ¶¶&ëÖÅ××^ÕKz¢ÌÌ<~ÿ=ÿ+\¹މ‰>´dÔ¨6øøÔŽÝÚÆû/ÑÑi?>Wi¡ô©S!L™²__{6mš(ž§ê©Y³v›ÁîÝï¨z)U"“ÉØ¶ío–/?‚ƒƒk×¾«kõ¶˜VÅΗX°`/ÇÏ­ë©%DØ$‚ ‚ð<éé9ܾKpp,AA±ŠV¸üü"45Õqr²ÀÝÝ<=mqw·ÆÊÊXÕË„WXX̪U¿³aÃ) hÁªU#12ª]­%R©Œ îâï…ß@*•Ñ«—C‡úÒ½»{­¨–(+""‰nݾ`É’ÁL˜ÐQiç¹u+š±cÄÜ܈íÛ§Ô‰vG¡r~þù<«VýÆíÛŸÕê*Ã牌Lfƌܺõ€ ú3yrg•¶€J¥2ú÷ÿÝ:ä)›AAJK‰ˆHæöíX‚‚b;ÁÅĤòj%//;ÜÝå»ÀÉ+—¬êÔŽZ‚ ,IL›ö aa‰,_>”Q£ÚªzIå„…%âï…ƒo“†¯¯=Ç·fР–4l¨§êå=ÓgŸeÇŽKœ?¿€Fô•vžR=z#ùù…lß>¥Ú“ ªð€Þ½¿æÌ™ù4kf©êå¼âb)ßÿ_ý?ÚµsäÛoGcc£º9‡W¯F0hÐwìÜ9•®]ÝT¶ŽZD„M‚ ‚ ¼œ22䳕Jw Š!44ž¼¼B45Õqt´ÀÝÝOO[E°$ª•áÉüý¯°pá~œœ,X·nl­Ù¦<==‡#Gþa÷î«\¿‰µuC†õeÔ¨¶8;[¨zy–™™‡ŸßgôéãÃʕÕz®ôôÆßÄ; üüó$Ú·wRêù„šSXXŒ‹Ë|>ÿ|D­ ƒ«êÖ­hÞ{oII™¬Y3š=üo¿Ý•ùóû©¼ ­¸XÊéÓ¡ìÞ}…ÿý/uu5úöõaÔ¨¶tìØ¬Î¾ܽû*sæìâøñ9¸»Û(õ\ùùELŸ¾'‚X»v ´Pêù„š3`À¼¼l•ZÖ¤ÜÜ>úh»w_eÚ´îÌ›×W%›nܽ›À«¯~ÁêÕÿaäÈ65~þZF„M‚ ‚ ÔI®b¦RppÑܹ“@nnššê88˜ãînƒ——-nnÖxzÚ`m­º²{A¨Ë®]‹àÝw·“Ÿ_Èwß¡sgW•®'88ÿË:t“ÄÄLÚµsdÔ¨¶ôéãSëæFU…L&càÀ5èêj±gÏ»J?_q±”%KñóÏçX´h S§vUú9åûä“\¹ÁÌVõRªÝþý×™7o^^¶¬_?N%ÕÈ~¸›S§B8þ£—ýM+6 ‚ ‚P÷K¹?…  nߎU ~X­TÚúæáaƒ»» nn¢ZIªCq±”ï¾û“o¾ù]»ºñÍ7¯cjj ’µ$'gqèÐ öì¹F@Àš65eèP_FŒhƒ½½™JÖ¤L7oFÑ¿ÿ·lØ0®Æª6l8Íòå‡3æ–/ªòÊ5áÅ `Ò$¿ßª°°˜“'ƒÙµë2'O£­­IÿþÍ5ª-íÚ9ªtWªš0kÖNΟ¿Ë™3óÑ×ש‘sþñÇ-Þ{o-[6áÇ'ÔúêÂÓEF&Ó¡Ã žAëÖª^ŽRäæ0oÞ¸ÁâŃxë­Î5zþ/¿<ÆæÍç¹técŒ_ÚÇŠ›AA¨¤R‘‘ew‚‹#88–R06–ÏV*móð°ÅÕÕª^¾3+µÑo¿ýËܹ»±´4býú±JŸô¨€€øû_åàÁddäбc3FjK¯^^5ºÔ))Ytéò9C†ø²lÙ;ïíÛ±Œ¿ mmM¶n}«N XÊóö^Ä{ïõ`Ê”.ª^ŠRmØpš+Ž0bD>ÿ|xí›™™GÇŽ+1¢ ‹ ¬‘sÖB"lA¡æI$yÇ–k ŽST+ÙÛ›=6´ÛÖ¶‘ª—-/¥ÜÜ/>Èöí7®‹¢Aí9wBBû÷ß`ïÞ«ÇáìlÁ!¾ŒÙæ¥~Nسç*³gïâС´jÕ´ÆÎ›””ɤI›¹{7ÇÓ¥‹jçt UóÆ?bh¨ËúõãT½¥;u*„wÞÙŠ««5?ý4 3³šiùݼùË–æüù^Öç*6 ‚ ‚ þ¸?Ó¦uWÚyòó‹hß~C†´â“O)í<µ›Aáe“™™Ghh·oÇ$Ÿ­§¨VjÚ´t'8ùÅÍÍš&MLU½lA”äÞ½D¦Mû…ˆˆ$V¬ƈmªíØ‘‘ÉŠ6¹û÷Sðñï­4¨Uí õ2X¶ì0;w^æÌ™ùXXªd ùùEÌ™³‹C‡n2~_¦Më®’J+¡b6m:Ë×_ÿ  å/í§Ÿ>ÇÂ…”8ýøã¾øâw®\ù}¥§–a“ ‚ ÔgQQ)ËC¥Òª¥û÷SÉdê–ÌV²ÆÃÃV,éé‰j%AxYüúë%-:€‹‹ëÖÅÞÞì…)‘äqìXþþW¸|9ssnŨQípwWþ.P/£ÜÜ^}õKš5³dëÖ·Tº–M›Î²lÙa^{Í“o¾y½Z+ä„êsófýú}ùs ^êÖÇ͛ϱhÑ-ÈÛowUÊ9rs hÛv£G·gÁ‚~J9G-$Â&AA¨ ‹Kf+Å(Â¥ÀÀ$’\ÔÔÔ;Á¹¹Y+æ+‰j%AxyI$¹|ðÁn~ûí_Þy§;~Øç…ZÙ¤R.ÜÅßÿ ¿ÿ€T*£W//FŽlK×®®J0.Îo¼¢Òµ\¾ÎÛooÅÀ@—Ÿ~šˆ‹‹•J×#<.?¿—ù|ýõ6¬µª—£R›6eñâƒ,^<ˆ)Sº(åßÿk×þÉÕ«Ÿ`dÔ@)ç¨eDØ$‚ uMzzÑÊvß¾ËÝ» £££‰››5^^vxzÚâá!Ú-ÞYåøî»ï8þ¼ª—QiÿücAA®®©ç+®Ÿ1c:uªðqÂÂñ÷¿Â׉MÇ×מ#Ú0p` ±3™ ¬^ý6œâĉ¹*Ù®¬„ S§n%((†¯¾ÅÀ-Uºe¨«ÿRÿþkŽ‘Q>U/EévïÞýÌïÿ÷¿gX¼ø K– VJà”••O›6K™<¹3³g÷ªöã×B"lA„Úªthw``L¹6¸˜˜4ÌÌ ðð°ÅËK~ñô´ÅÁÁMMQA 5e̘1ìܹ“#F¨z)•’™©®nZZRÅu{öìaÇŽŒ=ú™·MOÏáðáسç*ׯGbkÛ¨¤M®-ÎÎ/o;NmPT$eðàï8xp†Êÿ=(,,fÙ²ÃlÚt–©S»òñÇT¾¦êTWÿ¥¤R5ÔÕëw°gÏ@þ7Õó|ÿý_¬\ùëÖeРêGW®ü={®råÊ'õêqð"lA„Ú 7·€ÐÐxE¨Kpp,ÙÙùhh¨ãèhŽ»ûÊ%OO[• á¡1cưcǯäÅ©©©=5l*.–rút(»w_áÿ D]]¾}}5ª-;6C]ýå0\…‡'ѳçjÞy§sæÔŽmí¼ÁìÆÛÛŽ Æ×›¿êÓ㿾ڹs'cÆŒ©Pذ`Á^vï¾Êž=ÓhÕªiµ®%**…V°yó$zöôªÖc×B×4U½AAxÙ$&f*ÚßJ«–ÂÓ(.–¢¯¯ƒ»» žž6ŒÑZ1_©A1´[„š‡¿ÿe¸ArríÚ9²jÕúôñÁÈH´çÖFŽŽæ,Y2˜>ÚK·nîÕþ‚¹*n…››5o¾ù3½{ÅÆãiÓÆAÕË„Ç,_>”¸¸ ÆßÄ‘#3«eÓ„RMš˜Ò±c3vì¸ô2„Mˆ°IA”¤¸XJxxRIµ’|¾RPP ‰‰™XYãåeKß¾>¸»Ûàåe‹½½™¨A¥’“³8xð{÷^# àööf¼ñÆ+ŒѦZ_x Ê3fL{Nœbúôíüùçµb—Q77kŽ›ÍÌ™;>ü/ĤI~ª^– ”£¡¡Îúõc1b£GoäÈ‘™˜šTÛñÇŒy…éÓ!>>++ãj;nm$Â&AA¨ÙÙùÇKPP ·oÇOnnššê8;[âéiËÛowÇËËww›jýãEáEiiYòóÏwY°` ÚÚšôïßœ%KÑ®#jj"¯KÔÔÔX½z¯¾úK–ä‹/FªzIé²yó$Ö®ý‹Å‹rãÆ}V­¾¾Žª—& h³uë[ôë÷-Ó§ogûö)Õ¶£fŸ>Þëáï…™3_«–cÖV"lA„JŠ‹K'((¶Ì|¥¢¢RJe5ÀÝÝš–-›2vl<=mqs³~¡-ÅAj‚ºº6R¾ùæuúôñí»uœ¹¹!«Wb„ŸèÖÍ>}¼U½$@„͘у–-›0mÚ/ôîý5ëÖÅÛÛNÕKSS~üq<~Ç7ßgîÜꙦ¥¥Á!­8pà†›AáeUT$%,,¡ÜÐîÀÀhÒÓsyg‡ C‡ú– í¶¡IS¯Z¡jòó0uª+C‡úªz)B5éÙÓ‹‰ýxÿý¸ºÎÆÑÑ\ÕKRðósáÏ??à½÷v0`À>ú¨?“'wUtB­áãÓ˜eˆ°`Á^|}íéÖÍ­ZŽ;hPK6m:Kpp,îî6ÕrÌÚ¨Þï·'‚ ‘›[À÷Ù²å|°›>}¾¦Y³ytïþ³gïâÂ…0ìì1{v/öî}—ϸti!›7ObîÜÞôéã-‚&Až+,,Œ-[¶Tûq³³³ùì³Ïªý¸BÝ·dÉ \\¬™<ùgrs T½œr,-صëmæÎíÍŠG;ö¿$'g©zYJ¡¬Ç~Y™™™|þùçJ;~ZZ_|ñEµóYk® ÏkcÇv`èP_Þ{o;11iÕrÌV­šÒ¸± ܨ–ãÕVj²Šî(‚ õDJJ–¢ýíÑÝà uñð°ÁÓÓ//[Ñ'Â3Uvëó£G²|ùr.]ºT­ëˆÇÎÎŽ¢¢¢*CMM;v0zôèj\™PÄÅ¥Ó³çWtíêÆÚµcT½œ'ºqã>ï¾û ¹¹|÷Ý:wvUõ’ž«2e=öËŠŽŽÆÙÙ™¼¼<¥?22’^½zZmÇ|Öš«ãymçÎŒ3†‰=rs èÛ÷ŒŒ°ÿôj™ßôÙgG9räþþûãúZÍwM´Ñ ‚ õ–L&ãþýE T0ÅÇgåwƒ+ —š65­¯ÿè ‚ /)k놬_?Ž×_߀¯¯=&tTõ’ÓªUSŽŸË¼y{=z#o¿ÝyóúŠ7{j{{ûj šêŠ ´Ù°a<½{ÅÆ§™6­û sР–|ÿý_üóÏZ¶lR «¬}D ‚P/sëV4»v]fáÂý ²7·èÐaï¼³ßÀÀ@—·ÞêÌ®]osëÖ2nÜX¶m“™7¯/ýû7ÇÞÞLM‚ðûé§³$&f*ýø€ßÿ€Ó§OÓ¼ystttpssãСCÏ]BB ¨ôšÏ;ÇôéÓ™9s&FFFXYYñõ×_Wø÷Vž×\]­øðþ|ñÅ1BBâ^øxžž¶ØÛ›qìX@5¬®va“ ‚Pçdfæqùr8›7Ÿcöì]ôêõÎÎóèÕë+,ØËõë‘8;[òÑGý9ztwî¬äÌ™ù¬[7–iÓºÓ¹³+¦¦ª¾‚ Ô2‹ E‹O6ìüý¯ ‘(§åÚµkhiiÏþýûYµj{÷°S§N‘žžNLL K—.åÍ7ßÄÜÜœÄÄDfϞ͢E‹žzÜââb®^½ÊÝ»w àÀœ9sF)÷A¨›¦O•îÝÝ™:u ))µw6ÒÈ‘m8~|R©Œ^½¾bïÞkª^Rµ¨ŽÇ~ff&'NdõêÕdggãïïÏüùóIJJ*w®ððpFÍ·ß~Kjj*...|óÍ7¤¦¦’ÀÀyÿý÷‘H$¬ZµŠÑ£G?·j)77—S§NTjÍlܸuuuâããÙ·oK—.U_ÏR›ž×¦LéB‹M˜9s'……Å/|¼Þ½½øóÏÛÕ°²ÚI„M‚ B­ŸÁŸÞfÍšL™²…VàæöC†¬eõê?ˆŽN£cGg¾þú?œ<ù!wï®âرÙ|ùåHÆïH«VMÅöÝ‚ TÊåË÷˜3g^^ ™8ñ'Žù‡¼¼Âj;~Æ ùüóÏÑÓÓ£S§NLŸ>;wòʇy󿡦¦F=ÐÔÔdΜ9Н33Ÿ]yµ|ùr´µµqrrÂÓÓ“ŒŒŒj[·P÷©©©±fÍ´µ5y÷Ýí×ÞÊ7sŽ™É˜1í™9s'3fì 3S9pM©ŽÇ¾¶¶6ÿý7ƒFGGGGG´´´{¬ÿúë¯ôìÙ“ ««Ëüùó±°°ààÁƒ´lÙ’ & ££Ã AƒèÛ·/þþþ•º?•y¾ÒÓÓcÕªUèééѱcG¦OŸÎ¶mÛ*tžÚò¼¦¡¡Î·ß¾NxxkÖœxáã½úª'!!qõªz¯,1³IA¨Š‹¥„‡'=6¸»ô×&MLñô´aøðÖŠÁݶ¶T¼jAê‹… ÷)>—Je%‹ùë¯Û?„®®ýúù0dˆ/~~.hjVý=['''´´´_{yyñ×_)¾Ö××äÁ€ŽŽšššŠ¯ŸECCsó‡[Û‹¶`áIŒŒtÙ´i"¬aÕªßùè£þª^ÒSiiiðÉ'ƒèÜÙ•™3wÒ«×W|ûíë´më¨ê¥UIu<öutt¸~ý: , ,, “'¶•EFFâââ¢øZMM GGùï-::ºÜ÷\]]yðàA¥ïSEŸ¯ÑÖ~øæŸ——'Ož|îñkÛóš½½ à“O0p` \\¬ª|¬öíiØP?ÿ¼Í[ou®ÆUÖ"lAj\~~!!qFC@@4ÁÁqäæ ©©Ž³³%ÞÞv¼úª»bp·‘QU/[„zL&{ò ˜¢"ù‹¸ÜܺÁÞ½×iØP—!C|<¸U•Εœ\þ]ìÄÄDLLLªt,A¨ ¾øb3fìÄÍÍš¡C}U½¤gêÚÕ?ÿü€9sv1tè÷LÚ•?싎NÝz9[ýƒòñdzoß>:t耆† 6|ìç III)w]ZZFFF–û^JJ ÆÆÆ•ZKe¥R3U‹ˆHâý÷wqóæ}Þ}÷UfÍz­ÆÖ_•°©¦Ü¼y“îÝ»³wï^<<<Ø·o_~ù%aaa冔—Wn`ù£¼½½iÞ¼y¥×R6]»v­Ò·}QÊ ›þ‡wßý…?ÿüWת _¾ü§N…ð×_TóêTêZÝyA”./¯Û·c¡Ò­[Ñ„„Ä‘Ÿ_„ŽŽ&nnÖxyÙ1hPK¼½ípw·®wýå‚P_ddä” „rÈÈ(É?Ïyâuùù·„iii`lÜ#£7ÀØX#£8:š•»Nþ±Ác•Ezz/þ\‘O||ÉÉYO‘²HKË)¹.‹ÄÄ,²²r;†šššâE‡¦¦ü>ÙÚ6B"É#..½RëÉÍ-$"B„–/?ÂÂ…^ø>ª‚®®+WgíÚuJ£W¬µÐÍÍJMuœµuC¶oŸÂ!ß1eÊV~úibùoêà`ÎþýÓÙºõŸ}v”ß~û—¯¾UëgP)[Ë–-ùùçŸY¹r%©©©8;;sìØ±§MZZZ˜™=½•ROO¯Jk122ÂÙÙ¹J·­ílÁO?eùòÃüòË”*£S§f¬_ŠÄÄL,,êæÐô'•M‚ /)‰$—ÀÀÅŒ¥²ƒ» uñð°ÁËËNÑ׬™e˜‡ õEnnA™Ê¡\EXT=ïº'14ÔUA ê• ‰ž]u„EeI¥2ÒÒ²Ÿ•½.))S =‚éèhah¨‹®®&ššIÉË+ 33Oñ³::ZØÙ5ÂÉÉ+Íqp0ÇÑÑsó‡Ôÿö[“'ÿ\¥ûbbRÀ¥K_a`P7Ú%‘ä±}ûßÌŸ¿”W^y•ü|mîÞÔ*\ àãÓ˜?þ˜­Ü… Jwýz$#G®gäÈ6/Ô¤*¤2oÞΞ e„N,XÐ}}¥¯6W6 rÊ®l¸v-‚AƒÖâïÿ6:=¿ñQyy…¸º.`íÚ78°…V¨¢²Iáe˜˜I`àÃùJ1DFÊ2ššàåõpp···|pwMôÑ B}—••OzzNÉ%[Ñfö0$*߆V60*S–¶¶f™¨´ÊHggËr!Ñ£F¥‘²ò‘œœEb¢DÅÇg’’¥¸>99K(=úÇÆz˜š`b¢‰‰>VVƸ¸X"“AAA!™™ù¤¥e“˜(!::ŒŒòó ÑÖÖ¤iSSÜܬqp0ÃÁÁ¼äb†Íã[‚?Ék¯yTúþZ[7ÄÚ:cã¢:4é"‘äa`Ð’[·RË|§â/Îàã³77k\]­quµÂÝÝšfͬêÌ |}íY¿~,o¾ù3––FÌšÕSÕKª”ÆMعs*»w_eÉ’ƒœ8ÄŠÃèÑ£òoA¨¨Ö­èÛׇåËrìØû•þZWW ŸÆ\½QŸÂ&± B}•B@€Œ»wãQSã¹ó‰Jײpá&Ol¨ëæÏïËâÅ“°µ}ƒ¼¼Çÿ¿}ž;¦pï^!!qܼyÿËdeå`g׫’ Jþ±Y3KtuŸÞÎ#¨NÏžòaÇóæíAOO‡)Sº<ÿFµÌÈ‘mèÖÍO>9À¸qÿ¥o_–.RáðY*ëãûÓ¥Ëç8pƒ¡C}+}ûví9wîŽV¦:"lA¨£Š‹åƒ»†JÑÆ ‘䢮®†““žž¶L™Ò;¼¼ìhذj½ö‚P_<9Ê~,(zôëââò³k44ÔiØPOqiÔHþ±iSÓ2_ë?ö}cãµ¢j0++¿¤Ê(“”yõQjª¼ú(!ABJJII™$&JÈÉ)(w[##],,Œ055ÀÜÜ[ÌÌäŸ[X*®777,Žåç‘Dxx‘‘Éœ;w‡ððD""’‰Ïä¿W[ÛF88˜áímËÀ-JÚÞÌhÜØMͪÏIOÏáÔ©Pþø#€þ‰"..ƒ¢"y¨¢­­IãÆÈÍ-¢°ðñв²z÷öfݺqèêÖŸ?£‹‹¥¬\ù††°°Ðt‰ŠªøVìM›šÐ­›;ݺ=ܶ[&“FHHwîÄÇÙ³¡lÚt–‚‚"44ÔiÒÄwwyåêj››æ¢e»xãWÈÍ-`É’C4h ÅرT½¤J377dýúq¼þz;,ØG—.Ÿ3gNoÞz«ó =—“ØÛ›1n\G¾üò¶¬ôÿcmÚ8°qãi²²ò10P^ëgMª?ÿJ ‚ ÔcùùE„„Ä)ZácŽ#7·-- Üܬñô´¥ÿxyÙàîn£Ô‚ jE%ó~rHKË&--›””lÅçii¯OM}=Ú¶¥¥¥Q.4jØP}ÍK¾ÖWEeC¤ÚØ”‘‘CbâÃ*£ää¬GZÚäARrryy…ånkjú°ÒȈæÍcjj€••1&&ú%A’ffÏÜå©°°˜¨¨BCã9vìVI¸”Ldd11éÈd2ÔÔÔ°¶6ÆÑÑggKzôðÄÉIÞöfooV-ACAA·nÅpâD çÏßåîÝ23åUWjjj5À×מ.]\:Ô—&MäÛx¿ùæÏ;ðÄcÚÛ›±yó$Üܬ_x}µ††:³g÷â‡N• d£©©^2$üùÔÕÕ9~<ˆž==ש©©Ñ¸± ›ðÚk¯/*’rÿ~2ÁÁq„†ÆÇ‘#ÿ°víŸIÑÒÒÀÙÙK<>ƒÄD ÅÇÇ[Ú2˵쩫«affPRe$ocsp0+ Œ 133ÀÒÒ¨¤Í RÏ!EER¢£S˵»EDÈ«•qq$'g—ARR&ññé$%eŸNbb& åf •HææFŠ ÈḬ̀¤¥M¿¤uÍHQ¡ô"¿©TFllz¹¶·{÷ä-oQQ)Š`ËÄDsEeÒÃ@É\iÕ•YYùܼyŸ Â8s&„¸r»Ôéêjáêj…ŸŸ+½{{áímWá0-/¯GÇPSƒnÝÜyãö¤§ç*›?l1ÌäÁƒT²²òÐÔ”qàÀûøú6UÊ}®)jjjüòËv.]’qàÀ ïÞÔ¨‘>ööfüûoR©ü6VVÆôìéAçÎntêäRåjÀ¬¬|îÞM 88¶L§˜Ehl¬‡»»5..–¸»Ë+¡ÜÝ­EÛx5[¾ü7žfõêQ•®Ø¨þ‡eË“žžÃûï÷dòä.UzãNìFWûÕÄnte%%eÒ¾ýrV¬Êþóô7)ždÖ¬¤¦f³mÛd%­®F‰ÝèAjJzz¸u+º¤j)šû÷SÉd˜™àímGß¾>Š`©´­CTE&“•«4ªÊÖôÚÚš%ÁÐÃðÈÑÑ__ûrAQéϘ˜ècl\w_$¦§ç”«@JL””T&ÉãÒeç iii`jj€µµ1ææF89Yо½3VVFXXȃ%y¸dˆ†FõÎ‰Ï <\^™‘¬–ÂÓ»á5PÌM<¸%ŽŽØÛ›áädŽ‘Qƒj]ϓܿŸÂµkœ;w‡¿ÿ+׎'“É055Àϯ ={zҮ͚YVúR©Œ#~àâÅ{Šëd28y2˜“'ƒÑÐP/ùÝË(.–=6ëE‹´ š’“³03«Þª¨ÒßQe©««±víhŒŒtÙºõïç¾@SSScΜ^Lšä‡D’Ç×Ù´é,÷î%âï_~¹ˆºº-Z4¥KWºtq¥e˦~ÇßÀ@‡–-›Ð²e“r×§¥e—kÅ“{ÿ‡ŒŒ,-s ä•P6¸¸XŠó*Z¸pZZÌž½‹‚‚¢:9é¬[г§'ëןbõê?ؾý"‹ ¤OoU/M¥RS³ù BÕÈ«›:°fÍ †oS©ê&ŸÆ¬YsB‰««Y¢²IA 3Kf+E+¦èè4@þn¯Oc¼½å¡’Oc±#œP# Š ²UFåC£‡×—V)”ztkzÌÍå­X¥×•ÎÿiÔH¯Þ¼°+Ý}-..½¤ )Cñña$)¶ikkbaaˆ•UCÌÍ ­­bffˆ±¢¥M™³hÒÒ² /­LJ*×úVzéëë(*’ìíå­nŽŽò5ù¢£  ˆ€€\»vŸS§‚ù÷ß($’3pÒÑÑ"0pÙcõàà8Åì’¬¬|¬­ÉÍ-$%% ##]^yÅ™®]ÝèÒÅõ©-wU—Î; ܾË;òJ¨»wÈÉ)PÌ‘’$·ÂÝÝWW+š5³íè´fÍ ¾øâK—æÍ7;«z9Õ"&&+ŽrèÐMºvueÑ¢žÍ6fÌöìÙSo*›ÎŸ S'«>Vdd&·n¥Ò¼¹)ë«læÚÎ;9xð`U6üo†ví–±råðJUÞ¸qŸþý¿åêÕO°µm¤ÄÖˆk"lAxAqqéŠJ¥Òª¥Ò•76ÁÛÛ®ÜÅܼz^ BVVþC£ääò¡QJŠüºGçiii”kM333|,4*Ýš¾ôúú´ƒOq±T1@»lx”””Y®ÅíÑyH hci)¯:*[}ô° É C5ª¹&;;¿¤B)™ððDÂÓ—ôty¥‡¶¶¦"Prp0/÷QU3K3¹~=’K—îqîœ|wqq1êêjH¥²’ ¬èÖ̓œhÕÊ^is¶$´mû)……ÏŸU¤©©­mCöî}—?œÎÎ;«tNmíÆ˜š£¨(…¤¤_ªtŒ§QSÓÁÊê²²®ýRiÎsoW6lX·î$+V}ê 5 5ºw÷`øðÖôêåõØù‚‚"~ÿ=€_½Ì… w111ÀÇÇŽ¢¢b®_¿Ovv>Mš˜Ò¥‹+;»Ð©S³j¯n”JeŠÁõ¡¡ñ˃¨°°D ‹ÑÔTÇÁÁ\1ª4ˆjÚÔ´Ú« ëƒ~ø‹+޲`A?Þ{¯‡ª—Sm._gÑ¢ý„„Ä1n\G>ü°Ïs«7ÇŒSåÇmdm= €¸¸o«åx¦¦#ÐÖ¶E*- 77˜¼¼0 b€ŠÏ„«.5{|üñ>.\ãÔ©+´åçáâ2ŸuëÆÒ¯_óçß va“ BeDE¥”›¯MJJjjjØÛË·ê–W-Ƀ%13B¨Œ¢"iI‹š|ðsiT::%åáîb))·¬ééi+v+•ä×›™ÔH ”*— ŠÎD*[$ß•­l;”VVƘ›–TÉ«ÌÍ ×[Ych¨šè Џ?…{÷ –’IHÜššêØÙ™” ’œœäÕJvv&*k%•Ê ãòå.] çÒ¥0%¨©©¡¦&ÿ¾.¾¾MéÚÕ6mðñi\£çœ9þìÝ{µ\¸ø(MM œÍñ÷ŸöBo>|“éÓwPTTÌœ9½™3§W•õ4‹ä¿ÿ=ƒºº:ššêŒß‘·ßuÃJgÛ¶¿ù製Èd2ʾrPSƒ¥K‡püx.ÜÅȨC†ø2|xëÇÚÞ@Þ¹sç%~ýõ¹ôèáIûö¤¦æpöl(Ñ´hјÎ]éÜÙ__{¥ý?PXXLxx’¢ /44Žàà8¢¢RJeèèhÒ¬™¥"„rw·ÁÍÍ›Êýþê£-[.ðñÇû˜>ýU,è§êåT©TÆîÝWX¾üsçöaìØW^ŠÐ1::¶m—påÊ'ØÙ½xeMbb&-Z|Èßà*,,ÆÐP—>}¼éÓLJ.]\ÑÕÕzáóÔF‘‘Étêô[·NæÕWÝ+|»^½¾¢kW·úð¸a“ “Èd2""’ËÍWºu+šŒŒ44Ôqt4Çǧ±b¾’··Ê^€ µ[VV¾"*Ý=¬4DJIÉ,ÙU,[ñý²´µ5Kv3ÄܼtkzCÌÍ ­leƒ¤ ´Ut/kNZZ6 bbÒIJ’LHÈ !ABll:‰‰òÚÊjÔH C,-ËU •V&•†Hµá÷W\,åÁƒTÅܤҡÜááIÄĤ)Â1›†ŠÝä¡’NN4ibZkÚŠŠ¤<àòåpΜ áÚµHrr ÐÐPG*•!“ɰ´4¦cG':ur¡ukœ-TºæË—Ã2ä{àÉkjªãåeÇ®]o¿PXûãgøôÓC%ÁŒ-[Þ¤gO¯*ïiÒÒ²ñõýT1„_SS™LÆþÓŽéÓ_¥iÓŠÏñEž––EERzõòböì^xyÙ>÷x.„1bÄ4j¤GPЊgþlAAÿû_ »w_áÌ™Pôô´8°%Ƶ¦m[‡r÷9;;Ÿ}û®³mÛnߎ¥yóÆŒסC[£££IQ‘”7"KªžîðÏ?Qx{Û)v¹óõµWÉs샩ŠàIFÅžDaa1ZZ¸¸Èç@•Põ­ïĉ &OÞÂk¯y²ví˜zÙuòd0 î'>>ƒ)Sº0mZ÷zU…sçN<]»®*wÝéÓópqyñAá ßq³S§ÏÈÌÌ{æì¤Òy}»w¿C§N.Õr~Uz™LFR’|‡¶¸¸tbcÓARLL òÁÛ¥-< ¯F* Ê^J«’llä;µÕ•AäEÜ»—¤˜£tï^¢âóç ævr²¨Sïܦ§çpõjgÏÞáôé""’JeŠâ tiݺ)]»ºÓºµ}Ï[ª(©TÆÜbÆÓ\»AëÖ¼ývWz÷öF]]~_üüV™¬¸C†´bÍšÑU®ÚHr7nׯG–›àåeËñãs«ã®=Õ‚{Ù¹óâS‡ŸkjªS\,£sgæÌéEëÖÏ<ÞÍ›QdfæÒ¹³k…לœÅþý×ñ÷¿LppööfŒц‘#ÛZT³Éƒ¤ÄÄLââ†GqqòÖ¶˜˜tE›[Ùj‰ÒÙGÖÖ ±µmˆ……Q«FzšØØô’ ©| ŠT*C]]M1˜ÛÉÉ¢V 殪ÄÄL.]ºÇ©SÁœ?‡ÔÌ*R IDATØØtd2á’……íÛ;*†y;9©vÞÒóäæ°{÷U6n”Q£ÚÖÀ •F„M‚ Ô=¥ÁRi¨T,I14ÔUJòÞv8:š×Éz/“ÜÜä­Te[Ø$ŠÙGò`)‹‚‚‡3{´´4-l¥•HòI^uT"YXÕÙw‹•¡4H’ÏB’I+’ÒSÙ?-, ±²’GvvJB%cììLIµq6Redeå+B¤°°îÝK*ÙííaÛ›±±NNò@I~‘·½99™×ùûŸœœÅ¹swøý÷._'9ùak£ººM›šáç'ßš¾6Í[zžää,¶l9Ï–-çÉÎÎgĈ6LÚõ™áX^^!ŽŽòÖ[YºtH•ÏǨQëIOÏyjÛGõgêÔ®U>GEÍœ¹“n<x•RW55uÖ¯Gÿþ5³åvaa1'Oãï…“'ƒÑÒÒ ÿæ êKÇŽÍÿvçç±ÿ5þûß³„„Äáçç”)]éÞÝí‰/ð‹Š¤üóÏ}Μ åôéPþý7 ©T†Ocż§6mjU€SÙV<¬¬ŒŸà–˜˜É„ ›ˆŠJaëÖÉOœéU_ÄĤ±zõìÙs//;-HÇŽuoˆøÍ›Qôë÷Í¿WÝÁsJJ~~Ÿ‘‘ñx;ššZZ?>§ÚÚ÷j‹o¿=ÎÖ­¸rå“ =ïôë÷ íÛ;±hÑÀXÒˆ°I„ÚíYÁ’‘Qi°ÔŸÆx{Ûáà`V§ßYªoJgõ”^J·œ—_Jƒ¥ Å ùRff¥íkòÂÌ̆H¯“_/”W6H*ÛÞ—QÒæ&oo{4H’·±Éƒ$yK›‰"TªëAJ©ÒÝÞîÝ“Jááò@),,‰„„ @4ibг³…¢J©ôsSÓúóÿ\VV>§O‡pèÐME¸¤¦2èèhâæf]RâJ‹Mª<[U"#“Ù¸ñ4þþWÐÓÓf„NL˜Ð©ÂÏ!!q¸¹=^ASQ/ÞcܸMäç>5àصëíJµ£UUxx~~+ŸØÂR4mØ0Ž~ýj&hzTzz\Çßÿ*°µmÄÈ‘m1¢¢BF&“qöì6n<Í™3¡89™3eJW† ó}f„D’Ç… w9s&„³g¾¾íÛ;Ò¥‹;»ÔÊ·……ÅܹOhh¼"€ Ž#.Nފר‘>žž¶¸»ËÃ'\\¬T^›“SÀ;ïlãìÙPV¯Űa­Uºe Žeùò#œ:B·nnÌŸßoo;U/«Â>ùä[·^x,×ÒÒ`üøŽ/¸?ÉÑ£ÿ2uêÖ'<©akÛC‡fÔ«™fðpvÞÚµo0p`‹çþüûïÿJRR&Û·O©Õ)›A¨=*,ùøØao/‚%UIOÏ) 2Ê„H™Š0©tøsÙ*$]]-E;•¥¥ææFå*’ä[ÑËg#Õ¦w›k›¬¬|bbÒ—¸8yeRttªâóÒ?ÕÔÔ077ÀÚº!ÖÖ ±±i¨hk³µm„µµ¼å­>þ¾SS³ín¥J¥Ã¹K?ææ†8;[”T&É«“œ-hÜØ´^¶ÙqâÄm¸Îõë÷IL”(þØ70ÐÅËË–Þ½½éÔ©®®VuvW©' ý9²M¶dœ8Äøñ›*ô³7o~Z¡9ÕaêÔ­;v«\ø¥®2™ë×eàÀ–5²Žç ‰cß¾ëìÝ{„„ |}í5ª-¶TÌÉ»s'ž<þ}×Ð××aܸŽL˜Ð©Bw÷ï§pæL(çÎÝáܹ;H$¹XY+v¸óósÁܼöVîed䫨‚ Š!44ž¼¼B45Õqr²ÀÝÝF@©¢ ª¸XÊÊ•¿±nÝI¦NíÊÿÙ;ïð&ëýý¿ºØZJ÷Þ›BPFeŠ2”%â@ÄÅ9®sŽã÷=Šëxô¨(d‰ÈÜ @™m)Жî´éHº÷Êúýñ4- ¬¶IJ^ו+¡ù„´OòÜŸû¾ßÿú×Lƒ=¦\+'NäðúëHI‘rç!üýïwÜ”`ݨTjBC_¢ººéŠß·²@jê¿»ü¹»ôXdnnÆí·’Ÿ_Aee7®¸jwœ¡ñØc_#“Õ²wïW½í† Gظ1¶ËcŒ=ŒQl2bĈn0 KúImmÓe.$™¬®“€$—×v?¯‘lm-±··l¿ÒáZˆ_ÝÊEÚ׊B¡B&HEEUbávII R©ðy]]³x{KËþ8:ÅÙÙª]<º’œ­{µ¤¥­MI~~E§rîœáãêêF@øýìØ£äãc'N|ëí¿“*•šLaÿþd (/¯ ¯‡@X˜ wÞ”)88ö.ò¥¥ß£F¹±zõd±ô»§illåí·櫯ŽcbŸö“ Ô¬¬7zl]%LúQd450¡o_sî¼3”?\¬W¯µ*•š#G2ùî»~ýõ<³gdáÂ(ÆŒñ„˜ä×_Ÿ`óæÔÖ63o^O>97·a×|ÉÉRbcñ)1Q‚R©& ࢳ/*ÊCïûcT*5ùù¤§—ž^LzºÐ¥íáÑ• jß¾³üío;‰Œôà“O–êEoVw¢Ñh8x0·ßþ™ J™={$ûÛxz×õÒ®ÈñãY,XðÉ_Þ¦;¦ÂUU52qâ:ª«›133{šT* kÖlåÈ‘ ¼õÖ|Cï,êD\\sæ|ÈÑ£/àãc÷—·=|ø‹Jfæ†\a›Œ1Òý´´(HK+!5U*N…3 K=K]] 2YÍeâ‘ös­C©ãÔ°¾}Í/1ÉÎî¢;ÉÎÎRïdzëByèJ*)©i¿®E*­ÅìëZ'’““•( 9:Z‰Q7~r]”–Ö´»“´‘7AP’J«P©Ô˜˜Ö{­CIˆ¼ ‚’“ÓÐ[æxÒҢয়R9p ™¤¤ÊËÐh4˜˜€Í`FrcæÌ0¦M 6Ø¢öK¹Ré÷cMbôhO]/ Šåß~ûgvíJÀÌÌ¥²sAwD„;û÷?Õ£kZ²ä3bc³P«UbtnÈ,^ü)K–Œåõ×çõèz®•ººvï>ÃÎñ¤¦Jñö¶eÑ¢Ñ,X…Í ÚÚ”ìÞ}†?ü¢¢*æÎ ç‰'¦^wq}cc+'Oæ›Ell&ÙÙrúö5'2Ò“˜_&Nô#(ÈÉ`º õÁuþ|1>¸33S¾üòA»ôçë#†~Há?ÿù…üüræÍ‹à™g¦áêzm"hO±víNvïNøSAÜÂÂŒyó"ùï»~ˆÁÏ?ŸcåÊ/8räy1ʪVkxóÍY¿þ}4†þ³w¸â4 ãÇ¿Áw_µ‹©¸¸šÈÈÿãÀ§wï™v=F±Éˆ#]KGaI¸‘­–úâd–º–…Xì\ZZsÅ~¤KGÏ÷ík~™û¨£xdg7{{£ˆt½´µ))*ªîq>¯¦ŽÏƒ­í`­DAÉÙÙº“¸dk;ø–úÛhkSŠ=J99edgËE·Rcc+––ý: JKýúYèøô<•• <˜Î?$‘’RLUU½8-ÎÖÖ’ðp7fÍ cÆŒ½.XUÕȦMÇùòËc×\ú­K|+ yUcjj‚Z­ÁÂŒŋǰnݽ=º–ŽeÀŸþ€ØÑ´?¾•矟Áš5SztM×Kjª”;ãÙ½û ÍÍ ¦N äþûÇrÛm~h4ðý÷gùàƒCäæ–1sfO?= ?¿ëd*-­…§cDz¨¨h`ذAŒï#:Ÿ ­_F.¨ÊÊydÉÉRÖ­›×«+…Z­aÏžDþûß_).®fѢѬY3k]/¶6%ÿ¢©©õ/o7`@_ÒÓ_ë–îÆÕ«·pÛmþ,XyÙ÷öí;ËÚµß0fŒ6,ÃÒ²—ßOóᇇøâ‹XΜyåªÎsOÏçxë­ùÌŸùÿ`›Œ1rã\MXÒN„Ó^»¹ »¥Nžo–ÚÚ&±ÔY.¯¥¤D+(ÕŠ£çkj.fìûô1#k—ŠG?ïíö© ©´ ©´J•¤Ò*±/©¬¬^Œ¦ ÐG´ÝHÎÎÖ89Yáè(ô%õ–Âí륶¶I“´×ÙÙrÑ¥dffŠ‹‹5ÞÞ¶"oÞÞ¶zÝ¡Òää”›É/¿œ#5UJ]0*ÝÔÔ;;KÂÃݹçžQL›ÜëÄ%-ÚÒïo¿M ‹ë.ýÖ ùÌ™ó!ï½w66ƒyé¥=äçW Ñhxã{Y¾|\¯éþû?eñâ1—•oÞ|‚üc7o½5Ÿ%KÆöøº®—–?üÂöí§‰‹ËÃÞ~‹E±hÑhœœ¬øá‡dþ÷¿ƒdfʸ㎞~zÁÁN7|†ôô±ïéôé\Z[•x{Û2a‚11¾DGû¬s°»]PJ¥š·Þú‰O>ùƒùó#yýõy7xàFQ*ÕìÚÏûïD&«ãžÚò{]ÐÑYt56n|;ï éò5´´(þr³(%EÊŠ8°/›7?¤·qÄkE&«%2òÿøâ‹LŸü—·‰y“Ù³G²víôZ]—c›Œ1rm…¥®C;-Lè@ e²:qr˜LVGII ÍÍ'´ ÔGGaܼ½½%NNVØÙ iU SÄôùd˨©iê$" ¢RÅÅB_’¶„]_m7’³³®®ÃÚ£nÂÅ(è ðœœ2rrä„¥òòz@èRòö¶ÅÛÛN–´ßnU!®#mmJRS¥ÄÅåsð`çωSMLÀÎÎ’ˆæÍ‹ &Ư×;»ô¡ôûFhkS2uê;8;[³}û£€pÒ¹uë)þñïØ·ï ¢¢z>ò×ÚªüS—ÊÛoÿ̇bãÆL›ö×'CúD^^9;vıkW< ŒçÃâÅc™>=ˆÃ‡/ðÞ{¿qþ|1·ßÄSOÝÞ%ãÜ[[•ÄÅåŠÎ§´´ÌÌL5ʉ}‰‰ñcÄWƒ¯æ‚:tÁÁÎ\PþþéÚ8z4“5k¶be5€Ï>{@ïK´»…BÅž=‰|ðÁ!¤ÒJfÏÅ“ON½j‡Owž^BnnY§¯mÜ ÀÊ•;}ÝËË–À@ÝÄåòZV®üŠÜÜr6lXFLL÷OïìN–-û6o~è/o·dÉg >˜÷Þ»¯‡VÖåÅ&#FŒ\ŽQXºq rygᨸ¸¹¼Vt)••u;oc3;;A4rp‚à|±·"nŽŽV»KªOÈåub´M‘„µ¢RCÃE¹e{é¶u»€d“ÓPQT2> …ŠüürQLºèX’‹ÂȰaƒD1ÉËË__{¼½mqr²2˜Î“ž ¦¦‰3g$ÄÅåqòd6çÏ£P¨05µZ8¡3ƋٳG2i’¯ˆ\KK¿GŽteÕªI̘j0ýo¾ù#7ãÈ‘çqr²êô½ÆÆVÌÍÍt>¦þJ¼øâw|ûm[¶øà ÙÙrîºkO=u»Î-?¾€õë—êt—ÒÚªäoû†ï¿Oâ•WfóÐC¯þô”~Haõê¯9{öÿýåFñ‹/~GNŽœ]»ïÁÕu)F±Éˆ‘[íT¸”©(.egËÂÒhnnãk‚˜TÛ)Ò&“Õˆ…¼ææ¦ØØ nކˆÓÁi¨ø5£‹ãæQ«5ÈåBÉvaaÕ%7A\ÒNÐ333ÅÞ~ÎÎV¸¸X‹î¤‹¢’•^žüé’ºº–N]JZ·Raa%J¥SS\\¬ÛÅ$;¼½íÄ.¯+#‘TŸÏ™3ùÄÅå‘“S†F}ú˜Ñ֦Ĝˆ7fÌ%&Æooýì"êZ[•|ûm<Ÿ|rX/K¿¯•´´bfÌxW_½‡+Æëz9×…J¥æá‡7qòd6{÷>I@€a:OäòZ¶oc×®$’ ÂÃݹï¾ÑØØ â“O—Çøñ¾¼ð Frëòû×F_ÍääÉq±f¡h|Ÿ^uŒT©Ôäå•“–VÌùóÂ%-­˜ÊÊ\]‡ä(ŠO¾¾ìØqšõëgÚ´`ÞygÆÝZ.m­¨þþû¿‘–VÂí·±fÍd""ºN½ôUlÒòñÇðÆ?2~$o¾y¯A¾‡nkSúÏ??ƒ+&üéí>úèw¶m;Å©SÿêÁÕu)F±Éˆ‘[ …BEf¦ŒääBRS¥$'’™)C¡PaiÙ¯Sq÷­&,µ¶*))Êœ;Ž™—É„ÏKKk;œïÛ×\Ž„H›¥8)ÌÎÎ'§¡ØØ 6˜ÝwC ²²‚‚JŠŠA©°°R—ŠŠªD·XŸ>æbá¶VDê(*98 5èHCw"“Õv“q© ¹¼þo;Fß´ÂÒ­ZÐ}­(•jRS¥$&JˆÏ'!!²²zÌÌL8°/­¨Tj|}í˜:5ˆÛnó#2Òó–=µ¥ß›6§¾¾EïK¿ÿ ¥RÍ]w½Gÿþ}سgAºø ‹Jnn9»w?®Ón™›E­ÖpâD6;vÄñÓO©XX˜1kÖHBCÙ»÷, ùLŸÌ /Ì'bu5J¥šÄD ±±‚ë)9¹FCHˆs»ðäKT”‡Až<_ ™¬Vž´BTAA%KËþ¸ºZ#‘Tbb/¼p7K–Œ¹jyroC£Ñðûï|ðÁ!ΜÉ'*ʓի'1ujP?ô]l8t(Çß‚¿¿7>h5Ï<³ƒœœ2øói¤ßŸÄ“On#/ïmC=Ÿ0ŠMFŒôVT*5YYrÑ­”œ\Hzz ­­JìKHˆ3¡¡ÎŒáJX˜K¯Ÿ WVVOqqµ8LÛÍSRRCII5eeõâmûõ³ÀÅÅ!Ö¦u& Â’ÐdmÝ{v"õ…ºº–v!©’ªv!©R•´±,ssS†âêj‹Ë0\\¬qs®]]­±µµìÕ¿Ë7‹B¡¢  R•:º•´QB+«\JÚœ‹‹µAž4÷4uu-$&JHHÈ'>>ääBššÚ4¨ÖÖ©¯o¦ºº‰¡C0q¢“&ù3iR¶¶·fº!–~_>úwßý…C‡ž5H±LK]] sæ|@s³‚žê®“šš&vï>Ãöí§ÉÈ(ÅÏÏžðpóÉΖsï½<ûì—Å»šººNœÈOIýû÷aÌO&N¦ÜùûÛ÷Ú׳úú.\(%-­¤Ýa/¼OU«5˜ššàHHˆ³Å tdðà~º^vŸÇÇæàÁ4||ìXµê6æÍ‹èÎÄ&€¬,<°‘¶6%_}µ’g]/麈Íä¾û>åäÉâæ6슷IL,`æÌ÷IHx¹ÛGÝ„Ql2b¤7 VkÈÏ/'%EÚîZ*Ëdûõ³ (È‘ÐPAT uÁÛÛÖPò+ÒÒ¢H%%ÕœIÅÅ‚¸ÔÖ&D¨LMM>\ÛÇsqÌ|ÇÉaF!©{hmUv7RAA¥XÆÝ±€ÛÎÎWW­€4 WWÁ™äêj££•Ñ™t 44´^&&åä”!‘T P¨011ÁÙÙJt*]ìT²ë'”=Iqq5qqy푸|23KQ«5¸ºcøðA´¶*ÈÉ)§¥EAP“'0eJááî½êX|½t,ývq±æá‡cX´h´ÁO§ÊË+gÊ”·Y»v:O<1U×˹i*+˜9óX[dûöUXZöžþ¤¤Bvì8;}gikSìDII5••,_>ާŸžÖcï ¤Ò*ÑõtìX55MØÚf¿ö²qÿ^/H+•j¾øâ(ÿùÏ/XX˜áêjƒTZIMM&&&¸¹ ëÔ䈃ÃP]/»ÛÈÊ’±aÃvï>ƒµõ ~x"K—Fw«èf(bÂñªU_ŸÇ;ï,`Þ¼]/éšQ©Ô„‡¿ÊŠxê©Û¯x¹¼Ž‘#_aïÞ' .FÞŽQl2bÄ)(¨$%E•´×õõ-XX˜à(ŠJ#F¸àçç`Ð'æjµ†òòºv'RèF**ÒŠIÕTU])ìÛ.$Y]6rÞÉi(Co9kvO¡Tª))©¾¢TXX‰\^'ÞÖÊj ..Ö¢+I+$i¦[->t3ÔÕµ•UJf¦Œ¬,9™™2²³å”–Ö`aa†——m'1I}3ô“z] R©IO/!!!Ÿ„¡oI&«ÅÂÂŒà`g\]­P(Ôdg QÄû2~¼S§2yr@¯>1ºÔj ¿ývž?>l°¥ß…F£aΜhjjå§ŸÖôëoG$’ fÎülÛöh¯{mllå‡Rغõ‰‰† Šòk×NgåÊ =ú˜Õj ©©RަÜÅÇç£P¨pûžÆŽõÒûiŒ7Š\^ËsÏíâ÷ßÓY¾|<0žüüòQ¼ +‹Óð‚ƒEÊÛÛ®×üíðÿñùç±lÙr€%KƲbÅœ»ÞíbHb¯ÉëÖýÀ'ŸæÑGoãŸÿœi0ÏýË/ï娱,~þŠß×h4xx<Ç»ï.4(!­F±Éˆ}§¤¤†”)))…í×Rjjš077ÅÇÇž#\ÄKP“Á½lll#mZ!Iûqq±0ÑMÛÅcffÚÞ‡$ôð8:Zµwóh?Ê!tüˆz7uuÍH$H$B¼M"© °°’‚‚JJKkP*Õ Чƒ+©sÔÍÙÙºWíŒ÷uu-dgËÉÌ,%+K&ŠKZQiàÀ¾øøØáçg¶SÉë^q¯+ZIJ* >^ˆÄ%%ÐÐЊ¥e?¢¢< vÂÔÔ”ìl9±±YÔÖ6áînôiALš@t´·Á—»ƒÖV%»v%ðé§GÈÏ/7ØÒï«ñÕWÇy啽üüóZ‚‚œt½œ.%=½„¹s?dÊ”@>ø`q¯=®ää”±uëIvï>Cuu&&`m=ˆ×^›ÇÌ™#t²¦ææ6NÊO.”baaFT”‡Ø÷êÒëbÎ{ö$òÒK{4¨/ï¼³€‰/޼¯«k&#£Tì€JK+æÂ…R }ûšãïï@p°s{¹#Ž hØ“dëë[زå$_~yŒ²²:î¼3”G‰!<ܽËîÃÐÄ&-ûöåoÛIx¸;Ÿ~ºÌ Š÷ò™=ûŽ{ñOãÖ&¼Á¼yá<ýô´^]—`›ŒÑ'ÊÊêÛJRQX*/¯ÇÔÔOÏá„…¹v– aG«¼¼^-¯¶ ÓÁA©cé¶¥eœœ†Šcæ­DG’³³ÐÅc(»†ŠF£¡´´–‚‚J *H*Ú?„¥šš&@þ‡âæfƒ›Û0ÜÜ.FÝÜ܆cX7A}ýEQ);[NFF)99eW‚§•|}…‹ŸŸ=ÎÎV½¶Û£'‘Éj‰ÏkŸ'!-­•J›Û0""<ˆŒôÀÅÅŠÜÜ2~û-¸¸\4 cÆx1mZ0S§t‘rWÓ›J¿¯Fqq5“&½ÅŠxñÅ»t½œnáøñl/þ”ûïÃoÜ«ëåt+ …Š_~9ÇW_'..''+Þxã^¦L ÔéÚäòº‘»LÊÊê:t@»ëIp>¹¸Xët]Eyy=ÿüçn~ü1•E‹FóòË3ÿtcQ¡P‘-¿¬Œ¼®®SSÜÝmv"4Ô…gBBœ:Ôð6)•J5?ý”ÂgŸåìÙFŽtå‘GncƌЛÞÜ0T± àüùbV®ü€¯¾ZI` £ŽWôרÕÂÂ^fÕªI¬^=ùŠ·Y¸ð\]‡ñÎ; zxu]‚Ql2bDWTW7Š‚’ö¢u(¸»Û0b„… s%$Ä™Aƒôs7¦ººQŒJI¥Õíוⴰ–p±ÔÙÑq(..û‘­ÄØ›¾>ÆÞFk«Rt%iE$­;©  Rì·êß¿îîÃ:J6íŸ ±7£[ãæhhhí$*]¸PJV–\•ú÷ï(*ى’««µQTê"T*5™™²vaIˆÄWcnnJ` QQ‚¸îŽLVËo¿çàÁ422J±´ìϤIþLŸÌäÉXZö×õÃÑ+:–~÷íkΙ.Ö IDAT²eÑ<ôPŒA—~_%K>£°°’ƒŸíÕQàŸ~JåÑG7óÜswöŠNªkA*­âÝweïÞD ŽŽCyñÅ»¸çžQ:wxi4.\µ‹O™œ>Gssîî6ÄÄEããÆù¼£øÇSø×¿ö R©yùåÙÌ›~ͯ………•bù¹sEœ;W„L&LYuu&‘kE(C:N%&Jøüó£üôS*¶¶–¬X1žÅ‹ÇÞ°ˆfÈb>º‰³g ùï1{öH]/é/ùûßw’™YÊO_ñûkÖl¥©©/¿|°‡WÖ%Å&#Fz‚ººq*œVXÒfÍ­Ä~¥°0WBCõ* V[ÛÔADºØ¿£u*i§W™šš`g7Dœ¦Ni/Æqó=Kuuc§¨›VP’H*‘ÉjÑú‡Œ«ë0ÜÝ/:”„mz}iOÑØ¨•d¢¨”-G*­„é‡>>‚˜äïÑ­dœüÖõ45µ‘”TH\\.‰‰%ÔÕµ0xp?""Ü w'*Ê“Q£Ü01\¿ý–ÆÁƒç)+«ÇÕu·ßÄôéAŒíe\¯@b¢„O>9ÜëJ¿¯Æwßáé§·³gÏ¢¢zW4ðJlÞ|‚_üŽ7Þ¸—åËÇéz9=F[›’×^;À×_Ÿ¤­M‰¥ezh"÷ß?GGýèckkSŸ/ö=;W„‰‰ aa®¢ë)<ÜÝ ß“ÕÕ5óÖ[?±yó ¢£½Y·î^¼½oÌ%Y^^/ O©©RÎ+¢¨HØìqp*NmÖ: ìí‡tåCérŠ‹«ùê«ãlÝzж6%÷Ü3ŠeË¢ s½®Ÿcèbίÿ{?_|ËcMâÅïÒ¹(üg<˜ÆŠIL|;;Ë˾ÿÊ+û8{Vò§b”žc›ŒéjK+&9Y*–wçå•£Ñh°³³ÝJZI×»' ­bÌM;b¾£S©¶VˆM™˜˜`kkÙ>nþò‹““•ñÄ«Q©Ô””ÔPP u'Uvr+iã‰f89Y‰"’VXrwº” ½¿@ŸhjjE%¡SIp*U£Ñhè×ÏBìQòó³cp®®ÃŒ¢R7!—׊q¸¸¸<ÒÓ‹Q*Õ89Yµ»–<‰ŠòÀÏÏ33Sêêš9x0Ÿ~JåÈ‘LZ[„…¹2mZ0·ßD@€ƒ®’^¢Ñh8x0O>9L\\^¯+ý¾ Lœøsæ„óúësu½œã¿ÿý•÷ÞûW0mZ°®—Ó£Ô×·ðòË{Ùµ+SSÔj˜2%€¥K£™4É_¯~ï««9v,›ØØLŽËB*­bàÀ¾DG{‹Î§ltErr!Ï?¿‹ Jyüñ)<ùäTúõ³¸éŸ[SÓ$ O‚UDAA%[ÛÁí(gÑÕÝ7Kcc+{ö$òõ×'IK+&4Ô…åË£¹çžQ×T¿ÑÄ&-ß}w†gŸÝÉØ±Þ|üñR½ŒL¶µ) ú¯¼2›%KÆ^öý?<ÄŽqœ<ùO¬î¦1ŠMFŒÜ mmJÎ+&5U•’“ ÉÉ)C¥Rcm=°“¨æ‚]Ï´(ÄQóRiå%q·Îãæ‡,8kE$­KÉÙÙŠ>}zo,@Q«5””Ô—WF~¾àNÊϯ /¯Œ‚‚J±8}Р¾bÔ­£CÉÍÍ''+ƒÜ½ÔgššÚÈÉ‘w˜þ&ˆJRi†>}ÌñõµÃÇÇñÚXÔݽ¨Õ²²„H\B‚‹+(¨ÄÌÌ”À@G"#=ˆˆpg̯N;Ôååõüúëy~ü1…“'s˜0Á—;îaÚ´`£Ãï/P(T|÷]Ÿ~z”ìl9S¦ðøãSz]é÷ÕXµj3gÏpøð󷜀ÿâ‹ß±cG[·>Âøñ>º^N“‘QÊ?þ±›„„\ìì† “Õáè8”ûïÃý÷ÖÉû¾«‘Ÿ_ÎÑ£‚ëéäÉlêêZppÊĉ¾ÄÄeã†Ð»¨TªÙ´é8o¿ýC† àÿþowÞÒå÷SW×Âùó‚ðtîœ Dåå•£Vk°²(: Ê7·azuOL”°yó öïO¦_? ,ˆdùòqÙ™×›Ä&€ÔT)>ø%}ú˜³qãƒz¹iôÈ#›hlleÛ¶G/ûÞŽ§yå•}de½©ƒ•Ý4F±Éˆ‘kE¥R“•%'5UJrr!II…dd” P¨°´ìßIT ué±bÆÖVå%n¤ªN…Üååõâm‡ ÔÉtQT²ÂÕuX—ì ¹>´‚’DRN~~ùùåäå ×û“,-ûãé9<<„kw÷ḻ˸»‹–YYZAIÖþ± ©´ µZ•´N¥‹¢’àT2ŠJÝOs³‰Ó K ùÔÕµ0hP_FŽt#*Jp-évYœTZÅ/¿œã§ŸRIHȧo_ &OàÎ;C˜:5ÐØ¿têêZزå_|qŒªªæÎ ç±Ç&áëk¯ë¥õ8¿ürŽü’íÛå¶Ûüu½œG¥R³zõ޽ÀÞ½Oêå‰\w£Ñhؽ;‘ÿ{? DD¸ŸO]]3·ßÄ’%ÑÄÄøé¥ƒU©T“’RÈÑ£BÙøÙ³T* AAŽLœèÇĉ¾Œí¥×dry¯¿~€Ý»‰Žöâõ×çuû±H›bèè€ÊÉ‘£Tª±´ìOHˆS{üNp@yz×éó_UÕÈ7ßıeËI «7ΛeËÆ1}zðe©„Þ&6à>}ä‘Mœ;WÄ{ïÝÇÝwëfªäŸ±gO"k×~ùsÿfðàÎÝj¿ývžØH~þ;zýwø'Å&#FþŒÂÂJ’“ Û/ÂNFcc+ýúYìLX˜‡9Òww›nÝŨªj‹œµÂ$aZ˜\^'Þnȸ¸Xu”W’ð±±€[7h'¼åå•“Ÿ_.:”$’ òòÊ; J‚ˆ$J^^Ãqw„%kkýáj¨´µ)E‡’Ö­”•%£°°µZƒ……>>vx{ÛpÑ©äæf•z’²²z±Ä;1Q¹sE(*†2z´'BßR@€ÃŸ—ìl9?ÿ,L©©R,-ûsûíA̘Êm·ùÄtO]#“ÕòùçGÙºõK–Œå‘GbôÒ½ÑÔÖ6qÛmoãËûï߯ëåè …BÅâÅŸ’•%cß¾'oÙiŒ55M¼úê>ví:ÃŒ¡ŒïË÷ߟåôé\\]‡±xñ.­×nɆ†VNžÌæèQaÊ]NN}ûš3z´—Ø÷ä¨7ÎŽ$&ð|GFF Ë—çÙgïèу–éé%í(Á•™)C¡P1p`_‚ƒ:Äðœñö¶ëqç¹Z­!66“Í›OpèP:66ƒ¸ÿþ1,Y2¡s¬7ŠM §^}u›6à‰'¦ðÜs3ôF®«k&$ä%>üp1³fu.4OJ*ä®»Þ#>þe½Œm^£ØdÄ1ŠääBRS¥$% SUU#ææ¦øúÚæ* K~~]þâ #òó+(,¬h¿®$?ÿòþggkÜݵ½;6b·³³µÁO1d:>‡]JÚëÖVAP<¸îî6í.¥áí â’ѡԽh4 *¹p¡T¼¤§— ‘T Tª±°0ÃÛÛ{qœ *Ù£ˆ=ŒF£!+K.º–âãó‘H*033ÅÏÏž¨(¢¢<‰ŒôÀÉéÏß|efÊ8p ™’ÉΖcc3ˆ;îá®»Fímì™»F23e|òÉìÝ{këA<üðD–.¾löVãoÛÉï¿§qäÈ zÙÒ“ÔÕµ0þzêë[Ø¿ÿ)÷Qê’ØØLž{nµµÍ¼úêlFŽteÛ¶ÓìÚ•@cc+Ó§³ti4ãÇûè¥hÓ‘’’bc39z4“ãdz©¬l`ذAL˜àÛÞ÷ä+Šú€Z­açÎ8^ýÖ¬™ÊÊ•tv¬W(Tdd”ˆî§sçŠÈÈ(¡µUIÿþ} t ÈCB\ðó³ï±µ–”Ô°eËIvì8Mee#Ó¦±lÙ8¾ý6è}b“–;ãyþù]DG{³~ý¬¬ôc3wÑ¢ XY à“O–uúºDRAtôëüüóZFŒpÑÑên£ØdäÖ£¡¡µ}"œ…KI)§O¸»Û0r¤+#FÂRp°S—ív+*q¼|Ç‘óÚµî–ûŠÝ;Úþíµ““•ÑI¡cd²Z±7©c’DRAsspQPº’KéV~Þ“TU5’ž^"ŠJ%deÉillÅÄÄWWküýð÷w À{<=m¢’ŽhiQ’"%>>¯]`’PSÓÄ€}5ʨ(ÂÃ݉Œô¸ªC3'§Œï¿O⇒ÉÌ”ao?„»ïÁ]w 2ÒCov2 Ó§sùøã?øý÷ ||ìXµê6æÍ‹0ŠtÀ±cY,Z´O?]®w‘ ]QYÙÀÌ™ÿ£ öî}ò–Þkjjã­·~bãÆXÆ÷å¿ÿ]„µõ@HfëÖS$$äãînÃ’%cY° Ê Þ¨ÕÒÓKDñ)>>ÖV%ÞÞ¶LœèGLŒÑÑÞzÑ[VW×ÌúõðùçG6l/¼0ƒ9sÂõâø¯P¨ÈΖw ÒÒŠinnÃÂÂŒÀ@GFŒ¸8¥ÚÇǾ[ß›(*~þ9•-[Nròd.ôÁÃÆíÛWÄïå’"塇¾ÂÄ>ÿ|…^ˆ8_}uœ·Þú‘sç^ëôÛÜ܆—×ólÙòS¦èp…7„Ql2Ò»ikS’–V"ÆáRR¤ääÈQ«…Épaa®ŒáÂÈ‘n„…¹0dÈÍíL64´Š1·‹bR%I9¥¥µ¨Tj@èNrw œµB’‡‡ ®®Æqóú@SSyyåäæ–‘“SFn®pÉË+§±±DÁ‹%Ñ¥äá1Üøö ÍÍmdeÉ;ˆJ‚°¤í*³²HP#~~øûÛàˆŸŸ½^¼¾•©¬lh/òÎ#!ABjª…B…½ý"#=Ú'ÅyètMo²óòÊ9p ™ýû“ÈÈ(ÅÎÎ’3F0{vFézP«5üüs*üII…ŒíÉêÕ“™:5Pï]=Ek«’I“ÞÂßß/¿|P×ËÑ+Š‹«™5놰k×ê[>žš˜XÀßþö 2Y-ëÖÍcîÜp.\(eË–SìÞ@K‹’;ï aéÒhÆŽõ2˜¿³–qqy;–ÅÑ£™¤§—`ffBx¸»Ø÷æªÓMR™¬–·ßþ™ï¾KÀßß_¼›I“ô¯[M¥R“›[& P))RΟ/¢©©þýûì$ŠOaa®xxtO}Gv¶œÜHaa%`ÂäÉ,Z4šÉ“zÝ&Cuu#«Woáôé\^}÷ß?F§ë),¬dÌ˜×Ø»÷‰Ë†lxy=ϺuóX¸0JG«»aŒb“‘ÞƒZ­!;[Þ.* =KiiÅíÞý ÜJÂÚå†m¿ z“´b’Ð¥TQÑ€©© ŽŽCÛ]IÃ/s*ÝêÑ}@­ÖP\\ÝAT’“›[N^^9ÅÅ‚ÓÍÜÜW×axyÙâím‹——-žžÃñô´5 J=ŒJ¥¦°°²ƒ[IFzz ……•¨Tjúõ³À×מ€­[É??ìì,u½ô[FCNN‰‰NŸÎåÌ yy嘚šàëkϘ1ž¢kÉÕuØ5ÿ\‰¤¢]`J&-­˜áÃs×]¡Ü}wcÆx¦ë¤µUɷ߯óÉ'‡),¬äŽ;Bxì±É„‡»ézizÇ[oýÄ—_ãèÑ:M64"›[Æ=÷|H@€#Û¶=ÒëNR¯—–ëÖýÀÆÇ˜9so¾9_Œ]67·ñý÷IlÝzгg ðò²eÉ’±,\epÑÌŠŠŽ¦ÜÅÆfQZZƒ¥e?ÆóOºêóÊÊ’±nÝüöÛyÆ÷套f⬓µ\+WL¤Ÿ´×ŽŽ]g|üñ-¨Tj¦M fçÎxNœÈÆÚz s熳páè^5@¥Róò¿ÿdѢѬ[7O§%ÜcƼƼyá<ûì¾þÿxôÑÛxä‘­ì†1ŠMF ©´ªCw!çÎÑÐÐJß¾æíÞ®b‰·§çðkÞP©Ô””Ô´ J#o44Ζ>}Ìqq±ÆÃÃ77›vg’àPrq±¦Oƒ›Ð+©«k!/Op%egËEq)/¯œ–ÖÖñö¶ÃËË/¯á¢¸äê:ì–“¬ jjšHK+!#£„ôtá’•%£¥E©© nn6 Ñ7??eÝzD[›’ädaJ\B‚„„„|ª«0 aa®íÎ%A`ºÞ˜Mqq5ߟÄþýɤ¦J±¶È]w`æÌ0ÆŽõ2þÜ55MlÚtœ/¿ÿüãß&Bôò™gv Rixÿýûˆ‰ñëôý´´b¶l9ÉÞ½gimU2sfK–Œ½Ìå`(dgËEáéäÉq±]O&øö¸ —Çk¯íçìÙBfÏÉsÏÝiP…öZ*'§ •JÍðáƒ;‰Oaa®74\æÒ‚ðââj¾ý6]»H*5ÊE‹F3kÖÈ^•=x0'žØ†»» Ÿþ@M¿”çžû– dìßÿd§¯ÇļÉìÙ#Y»vºNÖuÅ&#†AeeÉÉÒva©€”) ˜™],ð1Â…Q£Ü®¹\O.¯E‡¼¼2ÑÕRXX‰B¡.vïtìMÒ:•‡wÎõ•JTZEnn999¥ÜÜ2qZŸ……™Ø$ˆJÝJ†¶{Ø[P©ÔäçWž^BZZ±(.•”Ô‚èD` ¶WÉ__»[>–¡oTV6˜(!>^(òNM•ÒÖ¦ÄÖv°XâîNh¨Ë õNÔÖ6ñÃ)ìÙ“H\\––ý™1#”Y³Â7ÎÇx{ƒUóÙgGؾý4}ú˜³lY4+WNdøp£kóÏÐh4Ì›·ž¦¦6~üñiãïÞUˆÏã¾û>åî»Gðþû÷L<¬;©­mâÅwóý÷I<øà^ziæe›“­ìÛw–-[N‘š*Å×מ¥KÇ2~”ÁžÜ+*%¢ó)9YŠF£!4ÔEœréÑ#|†_~9Ϻu?PXXɲeãxê©Û ¶Ÿ¨±±•sçŠÄ󤔔B *pq±Ï‘FŒp%4ÔùªéŠ?›F§Ñhˆ‹ËcçÎx¾ÿ> €3BY¸0Šqã| þœH"©à¡‡¾¢´´–>Z¢“¸åþýI¬Y³•´´×;=O3f¼Gt´7ÿú×Ì_ÓMb›Œè ÚƒæE×’TZÞZÅ^(ðvfÀ€??ñlhh%?_‘´Ý;Úñóõõ-€ (i'ƒyyÙvr*ÇÍë55M¢ ¤}.srÊÈÏ/B;;K1î&Jvxy ÇÅÅÚxb CêêšE·RFF)çÏ‘•%§¹¹ ssS<=m t$0Б  'Œñ=%/¯œøø<âãóIL”-#qî¢sÉÍíÚ#q—ÒÚªäС4vïNä?2055aÚ´ æÌ ï•Ý=IZZ1ü$co?„‡Žá¾ûÆ\µx݈0ÅèïßÉ?>Mh¨î e Ç/ðÀ_°ti4¯½6W×ËÑöí;ËóÏïÂÓs8Ÿ~ºüO#Ä))R¶l9É÷ß'¡Ñh¸çžQ¬X1ž  §^q×RW×ÌñãÙ¢óI"©`À€>ŒëÅ„ ‚óÉß¿{ãZJ¥šíÛOóÞ{¿R_ß²eÑ<öØä^!¸WW7’’"ûj““¥È嵘ššàé9\ìª †!uŒŽý™ØÔ‘ººöïObçÎx%89Y±`A$óçG”SìRš›Ûxþù]ìÙ“ÈÚµÓyúéi=*¢UW7ò_}µ’Ûo¿¾`ÁÇxzçÍ7ç÷ØZº£ØdD·(*ÒÒŠÅbG;¨­í`FŒp­ aa.WO©Tª‘J+ÛŤòvq©ŒœœräòZ@pµ¸¸X‹n–Žâ’±ÓEÿ(.®&'§Œ¬,ÙÙr²³åää”QY)tbõík.º“<=‡wèS²5Ø]¿Þ‚Z­A"éèV*%=½Xœø8tè‚‚ ¥  '|}íuš‘7òç´µ)IM•ræL§Oç’˜(¡²²~ý,1Â…1c¼w'"Âý¦‚jµ†“'sس'‘Ÿ~J¡±±èhoæÎ çÎ;CÛ7ɱcY¬_ÿ±±™:òØc“˜5k¤Q¸»Fªª™0á æÎ çßÿž£ëå$³zõž|rêe]$·2ùùå<òÈf¤Ò*Þÿ>î¸#äOo[W×Âwß%°yó ²³å„‡»³|ù8fÍ ëµ ……•ÄÆ Eã'NdSSÓ„e‡È_·ue¶´(øúë“|üñïÔ×·²téXV¯žÒëº9e²ÚN“’“¥ÔÖ6aaa†ŸŸ½x¾õÓO)XZöçã—]ÓÏÍÉ)cçÎx¾ûî eeuŒíÉÂ…QÜ}÷ƒƲiÓ ^}u'úòÑGK°´ìßc÷=}ú»DEyvzY±b#ôùKPO1ŠMFz–¼¼r’’ HJvçÏÓÖ¦dðà~¢ÅS[â}iÑ\^'FÞ´Ž–KcovvCðò.–8{y B„³³µñ µž¡Vk(,¬ì$(eeÉÉÉ‘‹½XÆ Âßß;Ñ¥äé9''+ƒ·ëöêë[HO/%mywSSff¦xxØtp* ®¥®*°4Ò=ÔÔ4‘ ÄáΜÉ'9¹ÖV!'”x{åAHˆs—SÓÒŠÙ½û ûö%!“Õâ̼yÌž†ÑÝv3¨Õ~ü1…>úsçŠ?Þ—Õ«'ãgŒ4]'Ï<³ƒ£G39zôã`ÇŽÓüýïßòÒK³Xµê6]/GohmUòÒK{ضí4?<‘þsæ_[5 'Oæ²yóq~ýõ<––ýY´h4K—޽® úŒJ¥&5µ¨Ýõ”É™3”J5þþöíâ“cÆxvy¤¾¥EÁÖ­§X¿þjk›Xº4šÕ«'÷êMi‰¤¢“*5UÚþ΄Q£Ü;•_­ÿV¥RsäH&ß~ϯ¿žÇÌÌ”iÓ‚˜;7œÛnó7¸ó°ÄÄ~ø+úö5ç‹/Vô˜›ðµ×ðûïé>ü¼øµ5k¶R_ßÂæÍõȺ£Ød¤û¨ªjäìÙ‚ö ‚ÀTS#(èÁÁN„… Α#ÝðôŽ©© ­í‚Ry§qóyycoƒõÅÓóbLª£¸dŒè … ‰¤‚¬,99edfÊÈÉœJÚ‚n''+¼½mñõ„%;|}í®èd3¢d²ZΟ/&-M¸œ?_LAA%KËþ9Š‚RP~~öôëg¡ëe¹ •ÄÅåqæŒ 0egËðö¶ãpî]^]QÑÀž=‰ìÜGFF)nnØ3'œ¹sÃñö¶íÒûºikS²kW|˜‚‚ fÌeÍš)Æè× rêT.÷Þ»žÏ>[Î]wÐõr –O?=Âÿýß~ÞygÎÇŒë{ö$òüó»ð÷·gÆå89Y]õßÈåµlÝzšmÛNQVVÇäÉ,_>žI“ü{Õ†\cc+§Oç‰âSf¦Œ>}̉Šò`¡ï)$ĹËsk«’mÛNñÑG¿SSÓÄâÅcyüñÉ·D´_¥RóÀ_P]ÝDHˆ3))—NöviOço¶XSÓÄÉìÝ{–øx¡kqÖ¬0î¹gQQžóûYYÙÀªU›IL,àÍ7ç³`Ad·ßçÑ£™Üwß’’þŸ(t¾øâwdgËùî»Ç»ýþ»£Ød¤khmUrþ|II…¢À$‘TBÏÒÈ‘®ŒåFX˜ÈåµäåUˆe΂[©‚ÒR¡ØÂ ggëöxÔðâÒpãN·žÒÚªl»ÉÛ%!'‘T P¨055ÁÅÅ__{QTòõµÃÛÛÎ(êÚÜùóÅœ?_DZZ1çÎQQ!D]]‡$JÁÁN:áì|õ7ÅFtR©&=½¸]\’—KYY=}ú˜3b„ QQ‚k)2Ò£[Jó ü‘Á7ßÄñÇôïoÁ¬Y#Y° ’ðpw£Ó¦ hhheË–“|öÙQª«¹÷Þ|2ÆÉr7J[›’ÛoÿnnÃøúë‡u½ƒçw~惱~ýfÍ©ëåè99e<òÈ&**êùâ‹DE]Û:¥Rͯ¿žcóæœ8‘ƒ‹‹5Ë–E³hÑè^Ù=*—×rô¨P4~üxeeõX[düx_bb|‰‰ñïu[›Vtúƒªªî¿,kÖLÆÁ¡w;´/ílú«Ê;»!Œ%œãéÆˆ.—Eç´Sd÷ìI$=½''+fÏɼyá8öøã»^T*5o¼ñ#Ÿ|r˜… £xýõ¹Ý:¨¦¥E¿ÿ?x÷Ý…Ì›Àë¯ÿÀ±cYüòËÚn»ßnÂ(6¹~4 yyå\K…¢ême5‘#…(œôE.¯%?¿‚ÜÜ2rrÊ.‰½],söð¸Ø½ãâbŒ½é+ ­ää‘·‹ñ7Ri*• 3ÜÝmðõµÇÛÛ??{¼½íðö¶5:]ô …BEFF çε»•„ïÆÆVÌÍMñö¶#(ÈI–BC{4·näæhhh%)©€¸¸<„2簾6†ÐîZ„S_¶ IDAT¥°0×níüÈÈ(eçÎ8öìI¤ªª‘qã|X¸0Š3BÇ„.¢¢¢cÙ´é*•Š¥K£yä‘ãæLðÑG¿óÞ{¿qäÈó:‡ÝÛxõÕ}lÜxŒ –b—ÐØØÊOlã÷ßÓyã{¯Û–›[ƦM'ص+ž–%³f…±|ù8ÂÃÝ»gÁ:F£ÑpáB)GŽ®§¸¸}Ì vÂÇÇžáÃannJUU£•Ò–9ÔኜµŸ{ô—ººf.\(E%m ®¸X(zîÓÇoo¡G) ÀAŒÁ¹»Û…B=¤®®ù²\v¶…BEÿþ}Ú%­cÉci·!“ÕŸO|¼ .¥§— R©qsFT”'‘‘‚¸äëk×í.¢šš&öîMdçÎRS¥¸»Û0~$ D^S<Äȵ!•V±aÃa¾ù&žûðàƒX±b……•˜››è$º–¢¢<{¬ÜôÒrP 3î¾{ F1z´§1&×…dd”²~ýïìߟ„ƒÃPV­ºE‹Fw«µÿVä±Ç¾&%EÊáÃÏÅ÷.F£Ñðì³ß²kW›6=ĤIþº^’Þ±2Ï<³ƒÈH>ýtÙ ‹È‰‰6o>ÁþýÉôëg΂Q,_>®×:s:RVVÏñãYíåþ(+«gèÐLœè+–_o€Z­á·ßÎóñLJ9s&ŸˆÖ¬™ÌÔ©AÓEôWܨØt)J¥šÌÌRΜ‘ˆf…œœ24 ..ÖŒ寍Qn„„8SSÓÌ?¦ðË/çhkS2q¢/³fdúô`½sÔ+*^ýŸË‚‘¬[7¯Ë_{ýõ<+W~Izú:,-ûñé§Gøâ‹X£ØdİP«5äæ–u–.\(E¡P1xp?†Œ……MMmÈdµ(*LLLprŠ——±ÌÙÐP©ÔV¶O “‘™YJFF)I*•š>}ÌñõµÃÏÏ{üýñó³7öñè9ry-©©E¤¦JÅk¹¼¸Ø¯âLp°3ÁÁN·DÁeo¤¥EAJŠTt-%$H¨­mbР¾ŒéÆèÑ‚siÔ(·5,—ײ}{Û·Ÿ¦¤¤¦WŒ=ÖWâãóX¿þJÇÏϞǟÌìÙ£®Ûõ`äêœ8‘Ãüùëùú뇙:5P×Ë镨ÕÖ®ÝÁ)lÚ´’ |u½$½ãܹ"x`#ýû[°cǪ›ŠUV6ðÍ7qlÙr ©´Šqã¼yàñL›|ËC22J‰ÍäèQ!r×Ü܆——6rç˸q>×õºŸÇÇæÐ¡4<<†³zõ$æÍ‹èÖhzwÓUbÓ•¨«kÏ9µTeefíïU077%;»Œ¸¸<4 11~Üu×î¸#X¯\»¦ñôÓ;º%VWYÙ@HÈK|óÍ*&Nôcóæü÷¿¿’’ò]v=„Qlº•(+«'9YøÃ>sFBJJ! ­˜™™2xp?Ôj -¨ÕÌÍMqu&öíh]-ÞÞv½Ú~Û[Ëk¹pAFzz YY222JÉÊ’ÑÒ¢ÀÔÔW×a b’¿¿ޏ»ÛÜ2o6 ™¬¶“¨”š*¥¬¬Ü܆êBh¨³x­o»AF®ªªFqB\||>©©RÚÚ”ØÛ!2҃ѣ…)qAAN:q¥©Õbc3Ù²å$¦aiÙŸ "Y²$ºË'×Ýêh4Jgýú?ˆÏ#2Òƒ5k¦0uj Ñ-ÖM(•j¦MûÎÎVÆRðnF¥R³fÍV~û-mÛaÌ/]/Iï(+«gñâO©¨¨gÛ¶G ¼¹ReµZÃáÃØ´é‡_ÀÖ֒ŋDzdÉØsÂê­­Jòľ§´´‹‘»‰…¢ñÐPçkzÍΖ³aÃvï>ÃСýyøá–.6È÷aÝ)6] ‰¤‚¤¤B%œ9#!=½¥R%ŽŽV46¶‘Ÿ_À„ ¾Ìœ¦7ÂSÇXÝk¯Íeá¨.ûÙÑѯsャ];Í›OðÆ?páÂ]öó{£ØÔ[inn#5µˆ3g$œ8‘EjjUU€ ¦¨TjQTòòJœýüðõµÃËKèU2öîè?uu-dfvŽ¿ed”RSÓì~~8àï/\|}íŒQ  ´´†ÔT!w©°äînÓATr!$ÄKKcÿ™!“Ÿ_NB‚¤}R\>99e˜˜€¯¯=îíâ’nnÃtºÎòòz¾ù&ŽmÛNSXXÉèÑž,[6Ž»î 5è\}D©T³ë×ÿÎ… 2¦L `Íš)×<¡Êȳqc,ÿþ÷~Î8ɯP©Ô¬Zõ5G^`ûöG{]NWP_߃n$5µˆ/¿\ɸqÞ]òs +Ù²å;vœ¦¾¾…;îaÙ²qDG{ÝrbvEE±±™;–Å‘#™Èåµ :€ñã}ˆ‰"wWs–Éåµ|ñÅ1¶l9‰R©âÞ{#X¹r">>v=ô(nžž›.Eëä>sFpq'&J¨¬lÀÜÜŒAƒúR_ß ˜0z´'÷ÞÁôéÁ:M×(*Þ|óG6l8Ò¥±º'žØFuu#[·>ÂÖ­§xíµýF±ÉˆnP«…I ‡¥sòd%TV6 Vk01LMM°·"Fiüü„ñóžžÃ¢’ P¨ÈÊ’‘™)¸”.\(!3SFQ‘PÖ=xp?|}í „%__ŒÑF¡¤¤¦“¨”šZDy¹ ,yxØt•ŒÂ’á£Tª9w®ˆ3gòEq©¬¬ž¾}Í s»–""Ü:T÷;w†'²Ù²å¿ürŽú2~K—FÔhC¡¹¹o¾‰gÆÔ–Ö0kÖH|²AŒˆî TV60nÜ:–-‹æÿ¸[×˹eP(T<üð&NŸÎá›o#,ÌU×KÒ;ÚÚ”¢ 죖p÷Ý]7ɯ­MÉþýÉlÞ|‚ÄD >>v<ðÀ8æÍ‹¼eßs\¸PJll±±™œ:•KssÃÅ¢ñqã|4èÊ‘»††V¾ý6ž!‘T0q¢/=äIþzßë¤k±éJH$$& ÂÓéÓydeÉÚÏs…ÿK/¯áÜyg(+WNÀÖV7î¼C‡Òyê©íØÙY²aÃ2|}íoêç}õÕqÞzëGÒÓ×ñý÷I<ûìNrrÞê¢Õö—‹M………ÄÅÅéjA·4£GÆÕõê/®ÅÅÕlÛvŠÓ§óÈÉ‘SUÕˆZ-<&&& ÜOOÂÂ\=Ú ;RS €u̵>¿uuÍÄÅå‘–VÜîV’‘—W†R©ÆÂ oo;üýí ¸ƒ;}ú÷xFþŠë}~“’ Eq©¢¢SS<<†r1âÌàÁýصkW<#ŵ>¿W¢¡¡•„„üö7I¹$'ÒÔÔ†µõ@""<ˆŠ.¡¡.z媩ibÇŽ8¶n=E~~9,Y2–Y³Âè×Ïâ²Ûß?Ü<üQÂÓÒ¢bÌ[&Mrdذë;Ñ›?~·¬íVy~¿ù&—ôôjþùÏ‘ôí«›q½ùùU©4|þyIO=ŒƒƒîÅöžæjϯZ­áå—÷²yó ^{m.Ë—ëò5œ?_̦MÇÙ·ï,&&&Ì™3Ї޹¥7„È]¾X4žž^‚©©I{äNp=……¹\v®¥,~ñÅQbc³pw·á¡‡&0~ƒõÕË÷w_À²eúס¦ýûhhh%%EÊÉ“Ù<˜Ff¦ …BÀ!ý scîܑ̚5Ꚇ;tÕñ¯ºº•M›2))iæþû½9Òæ†–TÚÀþ“Ê /„ñÿÙ»ó¸šòÿà¯Û*)YBÌ(%IeKû†,•²gÉ2ÖÆ2_ËÌŒ±Žu,cßa¤]¤P ‰­Dh$¡}¿Ÿßý4iáÖ¹÷ö~>ýQ·{ÏëÞ÷½§sÞó>/^àĉ‡Ø¹sÐWglhm/Úl:}ú4œ?››&NœXåg%%e¸qãBB’ý’“3Ÿ_qõ7iiI(++@C£=ìssÍÏ^®¼© +Œª«oy9OŸ¾ARÒ ÄÇ?Gxx bcÓP^·šZ[hjª GŠ#–zôPùì‘hT_îÕ·¾Ýºµ«r*\¯^  PýN%Õ—{ÕÕ÷s^¾ÌÆíÛYÑ\JN~Yù™®h,U óVWo'”µMIÉÄáápw„´´ 0yò Z¬¡í‡¯§ ` €üü{àó ¾è1ê€õ¦R_™oÀãI¡¸8•ë(Õ÷úòxRPP0Dnî0VÌuœFW×úîØˆ­[°n#¦M3n,99E8w´´·04ì†éÓM0dH¯&ÿ쬬<„…U\åîúõ‡ÈÈx–-+N¹35íssÍON¹{ô莹Žóç#!))ñã`ýz”—gsô,ª'-]qDNiéKŽ“|êsŸÆâãŸãôéÛ IÆóçoÁç3HJò ©©‚I“aüøŸm< vý'C?AIIÆW=Žœ\?' ié(*z$ Œ ç£íåÈ϶úèìºÆÅãñÀçóáïoï($%eàÕ«l”üÿ퀌Œ4ÔÔÚÀÜ\S¦ ª÷úì,Áâñx`Œáþý ܺõ‰‰/pÿ~Å©pEE¥•G,õïßsæXÀÈH½Þ§ÀQ}¹Cõo55„ø|†ää—ˆˆxRyäRzú;HII W¯o`d¤Å‹£_¿®h×N¡S×ß±‚ƒ@Uµ V­Qùß×ú ín4V³€êË ª¯x«o}/ V­ò„¼¼,ÆŽí'ðLŠŠÍ0s¦)fÌ0AXØC>|³fG§N­0uªœ Åf.´iÓúppÐ<|ø!!É KƯ¿ú °ÐjjmanÞffš04T‡†F{lÚ4?ý4nn·qüø ´liÝ»iû®µ}>x<^å?oŠ#Ñ|}cpâÄMÄÆ>ÇŠç±r¥44Úcܸþpq1®ömZÿ}ê¶—…çxý&NAÁ?þ>? <JJrèÑC½zu‚‰IwXZjÑUàDX³fêX»699‘PRj]Ýoad¤3LѳgGhh´§ÙY"ŒêÛt•âÞ½g•³–îÞ}Šœœ"´h!‹¾}»`„0 ôô:‹Ä:›1†«WïcçÎ@DEýcc ;6ÖÖÚB?W‚Bš²… mPPP‚ÿýï,š7—è §ÿâñx•§Š¥¦¾Á±c7°sg¶m» ''LŸnMM•Y¶¨èÞ½bî¬Yf(--GDÄ“Ê#ŸNœ¸ ôôTafÖff=0k–fÍ2ƒŒŒ"G®ã‹YY)ŒÓcÆôCy9 8vì:¢¢þÁo¿ùbÝ:?¨©µ…“S_ÌšeÎu\±FÍ&!Q\üÝ»[bÞ¼ppЧKЋ™ÒÒ×01iW×±ÐÑù†vâÄ ÕW¼IIµŸß3œ9³qqi(--G‡-1`@W,[6 t…¦¦ŠHVÀÃ¥Kñøã@$&¾€6üýCO†òBˆ¨X±b8òó‹1þI4k& këž º<5µ¶X³ÆK—ÚÂÝý.޹ŽS§ÂalÜÓ§cðà^M~HZZÆÆ06ÖÀŠÑ••‡›7+F¢¸¹ÝÆÖ­PTl“•ý†ë¸bORRÇ÷Æðá½!!É8|8·o?Á–-—°uë%´j%99MŽ“Š'j6 ‰’’ç˜9³;FîËuÒÊ˳aa¡]Ýo¹ŽBÕW¼IJ* 99C‡ªÃÅÅvC§N­¸ŽõÅÂÂbãFÄÅ¥aØ°Þøã‰èÙ“®tF!¢híÚQÈÏ/ÆìÙÁÝ}ôõU|™-ZÈbÚ4c¸¸!$$GŽ\ÇÌ™ÇðÍ7­áâbŒ‰@QQ®Ásˆ‚6mZÀÎNvvz*f7}4.-M{›¹y˜›÷DF¦bïÞk I‚¤d Ž“‰'j6B!5(.NÅ’%½0qâh®£|•„„tüö›/nÜx++-\¾ü?hkwâ:!„¯Àãñ°uë8¼{W€©SÃÏo!ÔÔ¾ü*Xõ]¶……&,,4ñôék9†;.cëÖK=º/¦O7ùêKÀ‹ öÐÐh™3MÁãÍ0“ëHMVß¾j8ztúÿÏ„ÚÆu±$:ÇüB!¤ÞÞ¾ÍÇ’%cèÐm(,,†—×÷8yr5š!DLHJJ`ß¾ÉPUmƒ‰ ++¯Ñ3t颌uëù ~úiÂÂÁÂb3Æß  Dðù4|™¦†šM„BˆâóŽ àAëqõjöì™_ß…0 +×Ñ!„˜œœ þú«â(™©S£°°„“ Í0}º ÂÂVàäÉï !Áƒ‹ËoÀÁƒ¡ÈÉ)â$!¤ñ}u³)%%Ç@”†ãããƒ;wî4ØãçççcÆ öøMMnn.6mÚT§ßMMMÅíÛ·«|4pBò5êS_(++C\\RSS.˜úÖ7;;ÑÑÑÈÌÌlÀTMÏ£G¯àà°kÖøÀÅÅ7nüýj/KÛTÕ÷½ ïß¿ÇóçÏ(¤úÖ7''ÑÑÑT_Qßúfff"** ¯_¿nÀTÜkӦޙޔ”WXºô§—r—àÁÒR §OÏÆõë?ÂÂB[·^‚Á¯X¹Ò))ôw¿>cŸûKþ.ÖFÜö“…­÷ñîÝ;lÞ¼¹Öß«©¶ Y£¯n6=xðû÷ïD–ãîîŽ[·n5ØãçææâçŸn°Çoj²³³ñ믿Öéw—-[†¡C‡ÂÁÁ¡òëéÓ§ |•úÔ7)) =zôÀèÑ£¡««‹iÓ¦5l8òÕêSß}ûöá›o¾Á¤I“еkW,_¾¼aÃ5¥¥åøã@ØØlEyy9þ‡yyY®£ ú¼W?زe‹Ðoó õ©ïÞ½{Ñ©S'̘1:::;v,JJ¸9*„ÔM}·5440sæLtéÒ?þøcÆ㘖– ž?¿{ر#ë8€nÝÚaýz'DFþŠeËlüff›0qâ\»vŸÓ¦˜¨hŒ}î/ù»XqÛO¶ÞGvv6Ž9R§ßû\m²Fti)))pwwÇË—/+¿´µµ¹ŽEÄÙÙóæÍÃÇñðáCøûû# €ëXD²²²°`Áøûû#)) ±±±Øµk"##¹Ž&²bbžaèÐíØ½û*V¬_ß…ÐÒRá:–Xð÷÷Ç´iÓ°eË®£{õê-Z???ÄÄÄàéÓ§ˆ‹‹ÃÞ½{¹ŽF !!»víB\\bbbp÷î]lÛ¶ ñññ\GkPÆÆX»ÖÛ¶]Æ•+I\Ç©¤¨Ø ß}g†7~Âñã3Àç3Lž|ææ¿ãÔ©p•r‘‘¢¦¦†ääd®c|–@šM|> ,€¢¢"Úµk‡7¨Ø™°¶¶ÆöíÛѱcG(++ãèÑ£X²d ”••¡¢¢‚³gϨ8¼uÈ!8qâ”””””„3gÎ@]]RRRPQQ©ÜÈûð¸nnnèÖ­äååáââ‚òòrÀÙ³g¡¦¦999888 ;;»2kHHtuu!++ MMMøøøÔ;ëç>|ªªª——Ç´iÓÀçóñòrbÕªUPVV†¬¬,,,,ªV^[]êò†……ÁÕÕ .„¢¢":tè€íÛ·W›%>>FFFhÖ¬ºwïŽÓ§OWÞöøñchhh 77·²þŸsåÊhkkCFFúúú•;µ5e©ONQ" õMJJÂÓ§O±páB@ûöíƒj‡êû/Q¨ïÛ·oQ^^Ž~ýúºu놶mÛ"##£ÚÇ¡ú~^ii96l¸;»hÓF×®-ÃìÙæ”þÿ'‰Â{õ]]]ôîÝ»ÖçDïÕ‰B}###Ñ¥K˜››”””0tèP$&&Vû8T߉B}_¼xggg¨ªª´´´Ð®];¼xñ¢ÚǧúN™2ãÇ€«ëIŸ_c–šnk¨×ÿKˆc}ÝÜÜØÀÙÉ“'™svvf·oß®ö9Q}ÿ%*õeŒ1;;;6jÔ(vîÜ96gΦ§§Çòòò>yNâ^߯ñøq&:tSW_ÎNºÅø|>gYê»ý JïÕœÙÊ•+?ûœ¸|¯Ö÷õ¯¯¦P_ÆËÏÏgZZZìÀŸÜFõý—¨Õ·¸¸˜]¿~­Y³†uéÒ…åææ~òœÄ±¾%%eløðÌÌlËÉ)øã Òë×¹lëÖKLGgSU]Â.tc‰‰é\ÇjPõÙ¾Ô>wMŸÏÿ~®?~ÌZ´hÁ|}}Yaa!Û°a“””d'Ož¬qŸúc‚ØO¦õŸ êPÓ:´¦uÚÇ=“ääd&//Ï«{m?&ˆ1Víûù®@šM­Zµb%%%•?[¹r%5jTeð;>dRRR¬´´”1ÆXtt4kß¾=c¬b€¥§W¬TŠŠŠXTTTåc~x=zTù¸/^¼¨¼ÝÔÔ”¹»»³eË–± &Tɨ££ÃvìØÁöïßÏLMM«Ü6zôh¶fÍšzeý؇ûfffVþlРAÌË˫ί£0í¬z{{³Ž;²„„ÆXÅþÝ»wŒ±ºÕ¥.¯¡ŸŸSTTdÅÅÅ•µråJ6nܸ*†³gÏ2}}ý*ù,XÀ-ZĘ¡¡ae"<<œ)**2OOÏOžÓÖ­[ÙÈ‘#+¿/))a›6mbùùù5f©é¶ú úÖ¿¾»wïfÍ›7gÆ c^^^líÚµLNNŽÅÄÄ|òœ¨¾ÿ•ú2ÆØºuë˜ŠŠ sttdêêêì»ï¾ceeeŸ<'q¯ï—:}:œuë¶ŒÙÚnggÖ~‡VßíQz¯~P[³‰Ë÷ª0mŒ3&šõ½víÓÒÒbŽŽŽ•Ëû/ªï¿D­¾/^¼`ýû÷gJJJlÁ‚B÷·¦!ëûâÅ;Ö»÷j6cÆQNÿ!QWEE¥ìôépfañ;SQYÄÆŒÙË‚‚Yy¹ðg¯¯ú6›±Ï]Óçó¿Ÿ«uëÖ1GGÇÊßãóùLEE…}ZÙlªkm?&ˆ1V}³I ÇØwëÖ ÒÒÒ•ß÷êÕ«Ê©òòòYYYHIIU~ÿ_èØ±#@VVQQQ2dºuë†Q£F}r(—ŠÊ¿³(>O?<]»vP·}êÿ§ýd@0u¨iZÛ:í¿=“ÿªkm«ÓP5H³éÍ›7U¾ÏÌÌDëÖ­ëý8ÿ}RÞÞÞX¹r%V­Z…‡âîÝ»•+ûš´jÕê“Khȧ¨¨øIÖ¬¬,´lÙ²ÞYÅc Û¶mCVVÜÝÝQTT'''_^—ê|\‹×¯_CAA¡ÊÏabb‚ÔÔÔ*_ûöíÃãÇ?™©   Pí->Ùiðôô¬œçUS–ºä%¢R_UUU(++WÙxSSSCNNÎ'Ë¢úþKTêƒ@II @ÅF½¥¥%¢££?YÕ÷_7n<‚µõVÜ»÷ îîó±bÅpHKKr니Ê{µ>è½ú/Q©oYYlll ¤¤„`Ò¤IŸ]Õ÷_¢RßS§NU¹rT‹-`hhˆ|²,q®oÿþ]±l™-Ö®õE\\õ aÃãñ`fÖ§OÏFpð2 Ø ¿üâ…¾}ÃÆþxõ*»ö3‚Øç®ëçSAAYYYU~ö¡ÒÔ÷©Q‡šÖ¡µm“|®$Èu¯ ¤Ù”ššŠ .¨¸tÞ0lذ¯zÌçÏŸ£gÏž011¤¤$ÂÃëÝÉü˜••Ξ=[Ù]Œ‹‹Ãõë×666 “'OT\ÄÃÃÖÖÖõÎçíí„„„zßOüþûï077‡””ú÷ï)S¦TRüÒºTçùóç•ÃäòòòpðàÁOjamm°°0Ü¿PPPxyy!&&ƒ®üÀgggÃÓÓC† PµF666ðõõ­lDFDD`Ò¤I””¬5K]rŠQ©¯±±1^¼xÛ·o¨X·x{{ÃÔÔÕ÷sD¥¾ººº¸yófeÍòóóqñâÅÊÌTߪJK˱~ýŒ¿}ûªáêÕ¥04ìÆu¬¯"*ïÕÚÐ{µz¢R_ddd`É’%xõêUåFýÛ·oP}?GTê+##ƒ-[¶ 7·bàôû÷ïÖ$ÿÖÌ›g‰AƒÔ1gÎ äæq§^ºwï€-[Æ"2ò̘a‚¿ÿŽ@ÿþkñý÷nˆ^ûˆ Aìs×õóimm ooo¼~]1\><<IIIàñxµîS‹ó~2 ˜:Ô´ýÒm’ú¬{­FŸk÷%3›È444˜©©)ëС³µµe%%%•çÿ}ðèÑ£Ês c,&&¦ÊÌ&IIÉÊÛž={ÆÚµkÇLMM™µµ5³µµeݺucvvvŸ<.cŒ™™™1wwwÆçó™³³3SRRbæææ¬sçÎÌÖÖ–íØ±ƒ1ÆØÏ?ÿÌ”””˜ kÓ¦ ›;w.cŒÕ++cŒ©ªª²µk×VÞ÷¿ÙcÌÈÈHdg6¥¥¥±Î;3feeÅZ¶lÉ<È«_]jz ýüü˜ªª*ÓÖÖf&&&LEE…™™™±ÂÂÂOÎ)ݶmSTTdVVV¬S§Nl̘1¬¼¼œ•——³±cDz֭[3 Ö¶mÛÊÁjŒU­cŒ-\¸µmÛ–YYY1EEE¶gÏžZ³Ôt[C½þ_BëËc'Ožd ÌÌÌŒuèÐ7®rÎÕ·z¢R_>ŸÏæÌ™ÃZµjÅ,--Yûöí™­­-+((`Œ5­úÖæ¿CÀÏœ©~H¾0¨ïöƒ¨¼Wÿ«º™MÂò^¦™Œ‰N}W­ZÅ|ò5þ|ÆÕ÷sD¥¾eeeÌÎÎŽ)++3SSSÖ¦M6~üøÊ*M¥¾dfæ°>}~fsçžhðe5¤ââRvöl³´¬˜ëää´‡]¾/rsê³}!¨}îš>Ÿ®¦OŸÎ”••™µµ5344dºººìܹsŒ±ÏïS3&øýdaZÿ ²÷ñ¹u(cŸ_§}Ü3ùï̦úÔVÐ5b¬„PXXÈ®]»Ve(Õ×ÊÎÎfAAA,66–1Vñ†„„Ôé¾qqq,((ˆeggrÛÓ§OÙåË—Yrr²À²~-aÚYe¬bÀØõë×Y`` {õêU•Û¾¦.øùù1V\\ÌBCCYDDDC Ÿ?Î._¾\9Dí¿’’’X@@{ôèQ­Ë}øð!»|ù2{öìY²Ô7ççP}¿¼¾/_¾dÕÞö1ªoQªïãÇY@@@“®ïçðù|vòä-¦®¾œÙÚngOžp?¼&_²ý JïÕúàâ½*LãP}©¾ÂR߸¸8P§mq¬ï……=dß|óss o”å5´ëד٤IXÇŽ‹™¡á:vôhËÏ/®ýŽBàK¶/±Ï]—Ïgff&KJJb±±±,88˜³®]»²ððß7µO-Œë?AÔ¡¦u(cuû›U^^ÎÞ¼ySù½ Ö½_ªºfÓ§Ó¿P³fÍ`aa!¨‡Pq¾âAýöÛoñí·ßÖé¾:::ÐÑÑ©ö¶ƒ¶ÈçÉÊÊÂÄĤÚÛ¾¦.“‘‘©<-ª&:uB§Nª½MKK ZZZuZž††444ꥮ9E…(Õ·}ûö°±±©Óò¨¾D©¾]»v­8Y›¦Tßgϲ°té9„‡§`Î ,]j+²³™j"JïÕúhJïÕšP}ë~›(¥úÖ´_ð1q¯¯±±\]­ðË/Þ4Hjjm¹ŽôULLºÃĤ;RR2qð`Ö­óÃæÍ—0i’!¦O7†ŠŠ×JûÜuù|>þ–––8þgçèÚU!!?bÆÑhÝZžëh„Bš NZaåʑؽû îßÏà:N£øæ›VX³Æ‘‘¿`ÁkxzFÃІ‰"hÔl"„BXTÔ?˜2å† Ù†¬¬|œ??GŽLG×®Ê\G#„ÒÄMšdˆ¾}Õ°téßbsuººPT”ÃüùV¸sg5¶l‡¤¤tØØlŸqûòŒ1®#"Ò¨ÙD!„4>Ÿ!((cÇîÅÈ‘àýûBœ8ñ.]ZŒAƒDë2Ù„BÄÇÃ֭㘘Ž#G¸ŽÓè>&'€µõœ;w—†‰“F%Nï7)®4eEE¥(**Evv!¤¤Ú --aaQPP‚¢¢Räæ!?¿……%ÈÏ/A^^²²ò`i©…ñãpŸBH5òòŠáî~‡‡!5õ ÌÌzÀÝ}>ŒŒ¨ÁD!D8u颌%K†bóæ‹2¤TUÛp©Ñ}&nn®‰ÄÄtìß‚¥KÿÆÆþ˜9Ó“'‚¢¢×1«•™™‹¤¤t˜›kr…|…œœ"ìÚ„U«FrE >Ûlâñx™£Éàñ¤  `yyÝ*?WVžŒ;“°sg@B„„Ä¿u(/磼œ‘#û|Ѳáììüåá‰P£úŠ7ª¯ð{ö, ÇŽÝÀ™3·QZÊÇèÑ}qüø hh´ç:Z£¢íñFõoTߦmöl øúÞÊç+ðiª´µ;a÷ng¬X1GŽ\Ç®]W°sg&Lˆï¾3Ã7ß´Èr¾fûNR²%š5S‡¢¢ +ë{ö \åi2®^M‡¯ï?õ¾Ÿ””$ÖAQ±Y½îçîî^ïeÁ0`:wîÜ MõåÕW¼ÕTß[·RpäÈu&¢}{ELj„É“AI©y#§äm?‡1cÆ4ÈãR}…ÕW¼5T}ë#&æFŽüû÷Oňºµß¡‰ÈÍ-©Sá8rä:23s0bDÌŸo míN_ü˜_²}—žžøø·ˆŽ~ƒW¯ +®¦¦ˆÅ‹{}qQ îë¿sçžàæÍ—hß^?ý¤Çuœ/òÑörä'Í&Òxž>}Y³ŽãÁƒ—uÆ'!Áƒ¡¡:ÜÝç5B:B!ŸS\\oïh:Ф¤èׯ fÎ4…­moHIÑ8DB!¢kùrw\¹’„ëׄ¼¼,×q„Jii9|}c°o_0’’^À̬æÏ·„±q÷YŸÏù—.ÅÃÏï^¼xiiÉʹ>’’èС%BCDóæ2 ’4¼={®bãF0Æ0uª6nÍu$A f×JK˱i“?öïW±Bù)) üò‹=fÌ0mÄ„„B>xõ*ýu'OÞBNN!ìíõ0c†)tu¿å:!„"ïÞåÃÔtÆë/6³c1†dìÝ{7o¦ wïo1¾%† ë Iɯû§Sii9ÂÂ" .Äâýû‚* ¦ÿâñxðð˜»}Õ2 w<=£ðý÷n`ŒAFF 3gšŠË玚MÂ"$äæÏ?‰¼¼â'ÐkkwÄС:prê 5µ¶˜Bš®Û·ãøñ›¸t)JJÍ1yò L™b„ví¸ŽF!„ÜÙ³X¾ÜKУG®ãµ˜˜gØ·ï.^ŒCçÎm0{¶9ÆYÙú]‹«  ‹Ÿ…Ÿ_ |¶Áô¤¤$\\Œ°ví¨¯ÊO¸sãÆ#L˜°¿ò,'YY)¸ºZáÿÊq2 f“0yý:®®§póæ£jpRSk‹ÁƒµáãƒW¯r`` GG}ØÙé¡M›$&„ñ•Ÿ_ (üõ× Ü¿Ÿ=½Îpq1†½½ddèb®„BÄc öö»!##‰óççsG$¤¦¾ÁÞ½×àî~ Í0}º \\Œë5Ãñ—_¼qèPh­¿'))%„†.‡œ>'ŠîßÏÀÈ‘ ¨¨´rß_FF Ë–ÙbÞBi))™8~üΟ¿‹’’rØÛëÁÅŘN•#„Ò¤$$¤cèÐmØ·oÊ_ »)zý:GŽ\Çñã7Q^ÎÇĉ1{¶9:vTªõ¾¥¥å°·ß…ÄÄôj’àÁÓÓýûwdtÒH23sac³oßæU™Ý,%%µk1uª‡é†šMÂ*66 ß}w/_f£¬¬bEãíýý'+”‚‚ÄÃÓ3 ¡¡É——­mo89`Ð HHp} GB~ee|&àøñ›¸yóTUÛ`òäA?¾?Zµ’ç:!„‰%KþFXØC\¿¾¢Þ§…5uyyÅ8u*‡‡âõë\ØÛëaî\Khi©Ôx¿ôôw°´Ü‚üü¢jÏv‘’’ÀŒ¦øåû†ŠNPaa FÚ¤¤ŒÊýü$$xøã‰=º/G銚MÂ,?¿?þx‘€´´m5œ{ý:ÞÞÑðôŒBll:th GG89@K«ccÅ&„‘‘šúgÏFàï¿ïâõëXZjÁÅÅææšÔ¬'„Òä½~ cã ˜3Ç‹æ:ŽH*--‡—W4öG^ÁÊJ óæYÖ8Ô{×®+Ø´é"€ª»ê’’èÔ©BB–ÓÙ,"¨¼œ—# Mþ¤ÑôÁÁƒ.1B·‘“5j6‰OÏ(DGÿƒuëë|Ÿ””LxzFÁÃ#iio¡¥¥'§¾5J**µÂI!⪤¤ ñps»›7AYY& Àøñýѹs®ãB!Beß¾`lß~aa+СCK®ãˆ,Æ®\IÂÞ½×ñúúª˜7ÏC‡êTù×_ÝÄÏ?{AUµ ž>}Så4+ ||ÀÀ@ƒg@¾Ö?ºÃÍív•š~ìäÉY°²ÒjÄT †šM¢‚1¯þÿegŒáΧðôŒ‚Ÿß=ääbÐ u89õ…­mo(*6k€´„"|RR2qêÔ-œ?‰ììBXYõ„³ó@XZj}õeŠ !„qURR ‹Í00PÅ®]Î\Ç ‘‘OñçŸ×”ˆ.]”1gŽ9ô±nNœ¸…%K†bþ|K88쮜ß$))ٳͱjÕH®ã“/°uk¶o¿\ëïU7:GDQ³©))))õk÷qþ|$®\I‚„ƒkÃÉ©/ÌÍ5!--ÉuDB¨¢¢RøúÞÃéÓ·qçÎtîÜãÇ÷Ç„ о=ýw–B©‹K—âñÝwǸ={ÒxAIIÉľ}Á8þ.*Ž+àaÛ¶ prÒP1¿ÉÂb3òòŠÐ¥K[\»¶œfg‰ ÔÔ74h=€Š£Óª›ÅõA`àôêÕ©±¢5$j65U99…ðó»(DDŸ Lj„ï¾3ƒ²²‚‚1uêaøû/†ž^g®ã’/ôaŒÃñã7ñRRÕ^q0,lºukÇAB£f©è˜{xDÁÓ3 ¾„šZ[89ÀÉ©/ÔÔÚrBê$7·>>18u*qqiPWo‡‰ 1zt_´mÛ‚ëx„BˆH  '§=ððp…¡áç‡[“º L€«ë)hkwÂáÃÓ ##…¿þº‰C‡B‘“Sˆ `Î ¼y“}}U®ãyúô5Ž ƒ§g$rrŠðÀçWÌqŠŒü;ŠÅŒej6‘ªâãŸÃÃ#>>1xõ*ªpt4€Ú´¡5Bˆð‰ŠJ…›ÛmøùÝCy9#FèbâÄ5^å…B!õçì|99Eðó[Èu‘ÆÞ=Wñûï1qâ@¬_ïTe¤IqqΜ‰ÀþýÁxñâììôàêjMMSAIHHÇðá;pùòÿœüÇß@DÄÀƒÅe®25›HõÊËù {OÏ(\º’’2˜›kÂÑÑC†ô¢KmB8õêU6¼¼bàî~÷ïg@K«#&M'§¾PT”ã:!„"–Ò1dÈ6;6ƒ÷â:ŽH***Å?œÅ… ÷°f¦M3ùìï–•ñáëƒ={®"9ù%¬­{bÁk{"â¶n ÀÙ³¸{÷çÊ‹€=yònnáX±b¤¤ÄâÂ5Ôl"µ+((A@@<<=£šŒæÍe0lXo89`Ð šBiEE¥¸x1çÏG",ì!šUÅÔ§Í0 „BÃܹ'pÿ~®^]JWs­§—/³1mÚüóO˜ “îuºc W®$a×®+ˆŠJ…¡a7¸ºZÃÂB³“†`añ;ŒŒ4°n#×Q5›Hý¼~ ŸxxD"66 :´Ä¨Qú=º/´´èÊ„ÁâóÂÃãüù»¸p!%%e°´Ôª<ÊRF†®ÈB!„4¦ÔÔ703Û„Í›Çbܸþ\ÇQQÿ`æÌ£hÙ²9ŽŸñųqÃÃcÏž+~€^½:ÁÕÕ#FèÒ"âéÓ×02Úw÷ù02Rç:NC¢fùr))™ðô¬,þìY´´TàäÔ£FéCEE,†šB8’’’‰óçïÂÃ# ééï «û-ÆŽíGóã!„!°bÅy\½š„7~¢üÔÁ¹sw±|ù9˜˜tÇŸN†‚Â×ÏäIHHÇž=WpáB,TUÛbÞ< ŒÓê!äö½{¯!6ö7q?2šMäë1Æp÷îSxxDÁÏïrr ahØ £G÷ƒ­moqpFi`oßæÃÇ'îwï:uj…Q£ô1vl¨«‹Å%` !„±ðêU Z+†cæLS®ã­²2>Ö®õÅáÃ×1ož%~üq˜À OŸ¾ÆŸ^ƒ»û]´nݳg›cÒ$C´h!+ÐåÁ1âtïÞÛ·ç:JC£f¬’’2\»vQ J„„ƒkÃÉ©/ÌÍ5«\eBJJÊ”ˆóç#qíÚ}ÈÈHaÄ]š G!„¹ .àôéÛ_%#uÄÍÛ·ù˜=û8bbžaÛ¶ñ°·×kÐå½|™BpêT8¤¥%1mš1fÌ0EëÖò º\Rw/_fÃÀ` ŽŸm®ã44j6‘†““S?¿{ððˆBDÄ()5‡ƒƒ è „4qQQ©pw¿ _ß{ÈÍ-‚±±ƌ釡Cuм¹ ×ñ!„R‹œœ" °³g›aÑ¢Á\Ç* é˜>ýx<Ž›ž=o¶íû÷8r$ G†¡¸¸'Äœ9èØ‘ÆœpíØ±ذá×5…Ó©ÙDGzú;xzFÁÃ# ¾„šZ[89ÀÑÑ]º(sÒ’“_Â×7^^ÑHM}S9çÍÉÉíÛ·ä:!„BêiÛ¶=zw¼<¶^^ÑX²äo¨áÀ)hÕŠ›#‹ JpêT8Á›7¹pt4ÀüùV4š€CcÇîCëÖͱÿT®£4j6‘Æÿ‘ðñ‰Á«W900P…££ þ%D ¥¦¾¯ï=øøDãþý ¨¨(ÁÞ¾û¢W¯N\Ç#„BÈWÈÎ.@¿~¿aÑ¢Á˜7Ï’ë8œ*/çcÆ Ø·/³g›cåÊ‘’â~tii9<<"±gÏU¤¦¾­mo¸ºZAW÷[®£5)ïß wïÕØ³gììö”J!AÍ&Âòr>nÜxH\º’’2˜™õ€“S_ Ò ÍšIs‘ò22ÞÃ×÷|}có mÛ¶Àˆº°·×G¿~]h!„"F6l¸€sçîàöíÕMvûýÝ»|Ì{wî<ÁÖ­ãàèhÀu¤Oðù /Æa÷î+ˆSÓpuµ‚±±×Ñš„¿ÿ¾ƒåËÝ¿¶©Ì8£f%ˆ‡—WBB’Ѽ¹ † ëMC‚ YYyðó‹…O4îÞ} 9ØÚêÀÞ^ÆÆâ~iWB!¤Ézó&¬ÅÊ•#0}º ×qÝýû/0}úQ”•ñqôètèè|Ãu¤Z…†&c÷î+¸u+úúªpuµÂàÁ½hŸ«¹¸ŸÏljßq¥±P³‰Ÿ7oòàí HÄÆ¦¡}û–ptÔ‡“SßF®G©YNN!.^ŒƒO nÜx„fͤac£Q£ôafÖ£) >$„B€_~ñÆ… ±¸}{U“ºú´¯ï=üðÃèê~‹ƒ]Dn$HTÔ?سç ¡¡Ñóç[ÂÁA¿IÕ°1äçCGg5Ö¯wÄ„ ¹ŽÓX¨ÙD„[JJ&¼¼*‹?{–…=:`Ô(Œ¥o¿mÍu>1 JDYY9LLºÃÞ^C†è@Q±IœwN!„¬Xq!!ö“H7^j“]€ùóOáæÍGøý÷±;¶ב&-í-öïÆ™3hÑB3f˜bÚ4c(*ÊqM¤ÍŸ/_fÃÃÕë(‰šMDô”––#44^^QH@YY9ÌÍ5áèh@ƒÅ ¼¼b\»–ÿ8\½š„¢¢RvƒFŒÐ¥/!„BªHK{ cã Ø¶m\ƒkÓL„B©³'O^ÃÔt#ž†¡Cu¸Ž#¥¥åøõWo?~³g›á§ŸFŠõi‚Õ)..Ù3Ø¿?/^¼ÃÈ‘}àêj --®£ ½¥KÏ!!á9.]úë(šMD<¥¦¾§g¼¼¢ñøq&ºtQ†££>F2@×®Ê\Ç#„Sééïpñb.^ŒÃÝ»O!++ KK- ÖÖÖ=¡ @3˜!„òe¦M;‚7oráç·ˆë(_íåËl|÷Ý1$'¿Äöí0b„.ב8UVƇ¯o ö칊ää—°±ÑÆÂ…6b{:á×âóôô~ÁŒ¦X°Àšë8šMDüÅÆ¦ýÿ`ñ¼z•=½Î5ÊvvztZi2RSßÀß?þþqˆMƒ‚B3ØØhcøðÞ03ëAW!„Bˆ@ܺ•‚Ñ£ÿ„Ÿß"ˆîÙ7o¦`Μ¿Ðºµ<Ž™uõv\GŒ1&b×® ÄÄ<ƒ‰Iw,Z4††Ý¸Ž&T¢£ÿÁˆàêÕeMñ(0j6‘¦£¼œ›7ÁË+/Æ¡  ÆÆpt4€­mo´h!ËuDBêþý \ºÿ8Ü¿ÿ­[ËcèP Ö&&Ý!--ÉuDB!„ˆ¡áÃwàÛo[cÿþ©\G©7Æöí ÆÆþ>¼7¶myyÚOøœ°°‡øã@„‡?Fß¾]°h‘ ,,4Áã‰×Ì®/±eË%œ;wwïþÌu.P³‰4MEE¥ L„—W‚ƒ@B‚‡Áƒ{ÁÉÉææš´NDRY·o§ 00‰xö, í۷İa:°µí CÃn44ŸB! Î×÷\]O"<|•H EÎÍ-ÂâÅg˜€U«ì0k–בDFdäSüñG‚ƒ@[»#.´­mo±_C†lƒ¾¾*6nÍu.P³‰÷ï àçw^^Ѹsç å`g×£F ÿ.Ô•'B-'§!!ààÈÎ.@0dH/ Ü }útnÒä !„ÒøÊÊø04\;»>X½ÚŽë8u’œü3gCnn!pÁ€]¹Ž$’Ò±sg.]ŠC·níðý÷ÖppÐorCÕ_½Ê†¾þüõ×LX[÷ä:¨ÙDÈ¥§¿ƒ—W4¼¼¢pÿ~¾ù¦F2À¨QúÐÔlrçÙ!•žþ ¸|9áá)`ŒaÀ€®°±é…!CzÑåh !„¹}û‚±sg îÜùŠŠr\Ç©‘O –,ùÚÚpàÀ´oß’ëH"ïÑ£Wؽû ¼½£Ñ±c+Ì›g‰ñãûCFFŠëhâôéÛXµÊIIëѬ™4×q¸@Í&B>çþý xzFÁÛ;ééï ¥¥;;=ØÛëAM­-×ñHÂC|üs%" ‰‰éPPhssM Ò ––ZPRjÎuLB!„J99…00Xƒ~‚¹s-¸ŽS­ÒÒr¬]ë‹Ã‡¯cæLS¬^mGã4ìÙ³,üùç5üý÷´n-Ù³Í1yò 4o.Þ§™>ý(ÊÊÊqâÄw\Gá 5›© ŸÏp÷îSx{GãÂ…Xdeå¡OŸÎ°³Óƒ]tì¨ÄuD"†JJÊpëV ._N@``"22Þ£cG% ¬Áƒ{ÁÈHƒ6†!„"ÔV¯öB@@<ÂÃW ÝiTï1wîI$&¦cëÖq°·×ã:’X{ù2„àäÉ[““ÁŒ&˜>ÝŠŠÍ¸Ž&p%%eÐÖ^…U«FbêT#®ãp…šM„ÔGy9aaáë{/Æ!/¯}ûv½½FŒÐ…²²×‰{ù2×®ÝGpð„†>@^^1tt¾©l0éè|ÃuDB!„:KO‡×aïÞÉ9²×q*]¹’„… O£My:4 =ztà:R“‘••‡#GÂpôèu€‹‹1¾ûÎ mÚ´à8™à„†&c„ý¸{÷g‘/`Ôl"äK•””!44^^Ñ JDQQ) R‡ƒƒlm{ÓiM¤Våå|ÄÄüƒ  $ßGbâ 4k&AƒºÁÊJ66=›ò(B!„ˆiÓŽ 7·çÏÏç: ÊÊøøý÷‹Ø»÷ÆŽí‡õëÄþt.a•“S„ãÇoàСP–ÀÙÙsçZ CÑŸ—µzµnÝz„«W—q…KÔl"DŠŠJ”Ÿ\»våå|˜›kÂή† ÑA‹²\G$B"++¡¡É JDhh2Þ¿/@çÎm`eÕ––Z02RoªC !„"†BBÀÙù ‚ƒ—¡{wîŽ JOW×Sˆ‹{Ž œ0n\β”ÀÍ-ûö#++ãÆõÇüùV"}Á›AƒÖÃÞ^Ë—ã: —¨ÙDˆ åæáòåøúÆ 44’’°²ê {{=X[÷¤FBÃCll‚ƒàêÕ$Ü»÷ ’’0 +¬¬zÂʪ'ÔÕÛq“B!¤A0Æ`d´ZX¿Þ‘“ ÿ=mîàAºÊ´*))ùswñçŸW‘žþööúøþ{+N”_âá×07ÿ.,‚¾¾*×q¸DÍ&BÒû÷¸x1ÞÞ1Oœœ4î{{=˜›kÒ€g1•“S„ÐÐÿ?é>23s¡¢¢ MXYõ„©iwÈËÓÑn„BiÁöí—ýk£n}|Ú܆ N“£Óæ„YY>>ÑØ½û*RR^aèP,\h#2³K÷칊ƒCpïÞoàq‡KÔl"¤±dfæÂßÿ¼½c™ EE9 Ööö}`d¤IIáºB©»òr>bcÓšŒÐÐdDG§‚1 o_5XZjÁÂB ½zuâ:&!„B'²³  §÷+Ö¬qÀäɃe™ééï0oÞI$$¤Óis"ˆÏgˆÇÎAˆKK-,X`þý»r­F»¡¦Öü1‘ë(\£f!\xñâ=||bàëƒØØ4(++`øðÞppÐGß¾]šz\$¤§¿«l.……=Äû÷PQQ‚©iwXXhÂÔ´ ‰'„Bù‹ŸA\Üs\½º´Á—õá´9eeìß?…N›q×®ÝÇ®]WpçÎvÃ÷ß[ÃÜ\“ëXŸxÿ¾::«…îê‹¡f!\{úô5|}ïÁÛ;ÉÉ/¡¢¢{û>9Rzz¹ŽGþ_AA ÂÃ#$äBC %%rr28°+ÌÌ4afÖƒ.›K!„ò±±i°µÝoïïìè:mN¼…‡?Æ®]A MFŸ>±`5† éO8þQïåE‹N#>~›q‡kÔl"„+ÎÎÎ8}út•ŸIIµœ\4kÖRRŠxõêøüBŽ6m§N‚®®9BBàúõdDD2qâl˜™µÇÂ…ã¡­ÝQhÍ%„BùÚ¦äFii)5›¾í ‰7j6BÈGÊÊÞÁÂB…® G!„B!_€®µN!„B!„B†šM„B!„B!D`¨ÙD!„B!„B†šM„B!„B!D`¨ÙD©Unn.6mÚT¯û¼ÿÏŸ?ÿäçyyyˆŽŽÆÛ·oB!„ˆˆúnW¾ÿ111´íH8ó%ûB––†×¯_7@"Ñ@Í&BH­²³³ñ믿Öë>[¶lÁþýû«ü,00ß~û-&OžŒÎ;ãàÁƒLI!„B„]}¶+·oßUUULŸ>ªªªØ¹sgÆ#¤_²/”••…ÂÇǧaB‰j6BÊßßÓ¦MÖ-[ªü¼´´...رc„… "##ƒ£¤„B!DXEEEá×_EDDbbb_~ù?æ:!µš>}:Þ¼yÃu NQ³‰±jÕ*(++CVVUNQ;sæ ÔÕÕ!%%•ÊFOVV¬­­±}ûvtìØÊÊÊ8zô(–,Yeee¨¨¨àìÙ³€°°0¸ººbáÂ…PTTD‡°}ûöj³ÄÇÇÃÈÈÍš5C÷îÝqúôé*·ëêê¢wïÞU~vçÎaÊ”)CCCèèèàÒ¥KÕ.ãÊ•+ÐÖÖ†ŒŒ ôõõYkÎú<B!„¦J¶+¯^½ ssshjjzöì kkk\¸p¡ÚÇ¡mGñ& ïÙþüóO0Æ`hhXãsû÷,#„pbâĉlâĉuúÝ€€Ö±cGöèÑ#–““ÃìììØœ9scŒåää0YYYæååÅŠŠŠXhh(“`™™™,##ƒIHH°Õ«W3>ŸÏöîÝ˰M›61>ŸÏ6oÞÌÔÕÕcŒùùù1)))¶hÑ"–ŸŸÏnܸÁZ¶lÉüýýYZZ“••eŒ1–——ÇTTTØž={XQQ»zõ*STTd7oÞ¬’ÙÙÙ™­\¹²òû£G²Tù)S¦°üñ“ç›––Ƙ——+((`ëÖ­cªªªŒÏçט³¦Ûêsss«×}!„B¸àææÆê³['*Û•;wîdýû÷¯’ÝÜÜœ-X°à“çÄå¶c}_R¡>ÛÛ¢òžeŒ±øøxÖ¥KöúõkfffÆ:Tísjû;wéÈ&BD@QQ ¸¸ 8}ú46nÜ‘‘Á­[·àààYYYtíÚÒÒÒÈÎÎðù|,_¾<ÖÖÖ’’Âÿþ÷¿Êïsss+—Ó¼ysüþûïhÞ¼9ŒŒŒàêêŠ'NTÉrᨨ¨`þüù••…¥¥%\\\àîî^ãsÈË˃¼¼|•ŸÉËËWYþÿý7ÌÍÍáàà999,[¶ sçÎEaaa­9ëò!„Bš*QÙ®tttDRR~ûí7„‡‡cÅŠ¸u늋‹?yN´íøíÝ_HSÇñϘºŒ”"±Ñ6W¦‹¦˜$•¦EÓ ‰ü[Ô]Y]taW-‚Aº‰ÂË” ªÑUt%Vbv¡a”˜5‰(Á iB ¿‹h´Îb¿Öñ¼_°‹sÎ×sžïááøìÙÙÙÂf”œÅb ƒºråŠ æœ“r–f`{öìQcc£|>ŸÜn·Ž?®ÉÉII’ÍfÓ“'O´sçN­Y³F{÷îÕÌÌLÂßoòX,Ùl6eeeÅ—T\\¬œœœøryy¹Þ¼y“0fllLÏŸ?תU«â¯ëׯëãÇsÎ!777~ñü.‹)777iìØØ˜<O|9;;[§OŸÖâÅ‹SÆ9Ÿ9˜•QêJ§Ó©žž=}úT'NœPvv¶öï߯¥K—&͉Úqa3JΞ;wN+W®Tnn®iddDƒƒƒIs2CÎfe:©ÍÎΪ½½]íííÐ¥K—´oß> (‰¨­­M7oÞ”Ïç“Õjýå?áùøù!v>|P^^^ºüü|ùý~ݽ{7¾.‹%]¬VRR’ô@ÇÑÑQUWW'ÍËËÓû÷ïÖݺuK;vìHç|æ`VF©+§§§åt:uûöíø6ŸÏ§úúú¤cQ;.lFÉÙóçÏkbbB­­­’¤‘‘MNNjbbB û1CÎrg`.\жmÛ”••¥M›6éàÁƒzûö­$i||\^¯W~¿_V«U>ÔçÏŸÿè8ãããñŸçœššÒÕ«WÆÝ¿_ÃÃÃ’¤/_¾¨ªª*¡ø•-[¶hffF÷îÝ“ô­ÑÔß߯]»vI’"‘ˆ†††$IuuuºsçNüüøñc8p@V«5eœó™€Y¥®|ýúµÜn·ÆÆÆ$I½½½¢v4!£äìÙ³gÕßßUUUéÌ™3ñF“Ùr–f`‡R4UEE…€š››‡%I Vmm­êêê‡U\\¬S§NýöqÜn·ÚÚÚTSS#Ç£åË—ëØ±c cJKK‡U]]­@ Ç£òòrµ´´Ì¹o›Í¦Ë—/+ ª¡¡A>ŸOápX.—K’ÔÚÚªH$"IÚ¾}»‚Á ÊÊÊT__¯‹/jÉ’%)ãœÏÌÊ(uåÚµkuäÈmذAµµµÚ½{·:;;µlÙ2IÔŽfb”œMÅl9Ë×èp:zñâ…úúú4==­õë׫°°P’är¹ôòåKõõõ©°°PŠF£•Ýn×·ø¦¤¤DSSSñåÊÊJ½{÷.¾\PP ÞÞ^=zôH‹-ÒÆe±Xät:ã擤“'Oª¥¥EÏž=“ÃáPYYYRÌ×®]KZ×ØØ¨­[·jppPZ½zu|Û÷O­¾ëèèÐÑ£GõêÕ+­[·.Þ”š+ÎTÛÌÎHueGG‡>¬h4ªÊÊJ­X±"¾ÚÑ<Œ”³?êééIX6[ÎÒl Âf³Éï÷ÿr[~~~­“.—+ábõ;rrrTSS“rœÃáÃáøíýÛívÙíöy---Uiié/·Íç|ç`FFª+½^¯¼^.Gí¸p)gÇBÎY¾F@Ò·‹tIII¦ÃHi®82€…ì_ªÉ¨1ÿR.,”œµÌþx_€¿& I’ººº2 ~f±XÔÕÕ¥`0˜éPæÔÝÝ­P($ÞÖeçÿÏPogÖ_8ÿýÜÙ€´¡Ù€´¡Ù€´¡Ù€´¡Ù€´¡Ù€´¡Ù€´ÉÊt€™uwwëëׯ™×ÜÜœéL鯙Á°B¡"‘H¦ÃÀÿ„f!›7o¦ÑôjjjRQQQ¦ÃH©¨¨HMMM™ô8÷†ó–YãýŽevvvö=Ì¢Ÿg6 mh6 mh6 mþb0f&¬ÿJIEND®B`‚bm3.7.0/doc/html/a00113.html0000644000175000017500000001540411365042642013423 0ustar tlktlk BitMagic: sample8.cpp File Reference

sample8.cpp File Reference

#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include "bm.h"
Include dependency graph for sample8.cpp:

Go to the source code of this file.

Functions

void Print (unsigned n)
template<class T >
void PrintContainer (T first, T last)
int main (void)

Function Documentation

void Print ( unsigned  n  ) 

Definition at line 53 of file sample8.cpp.

template<class T >
void PrintContainer ( first,
last 
) [inline]
Examples:
sample10.cpp, and sample8.cpp.

Definition at line 59 of file sample8.cpp.

Referenced by main().


Generated on Sun Apr 25 09:37:38 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/doxygen.png0000644000175000017500000000240111365042626014106 0ustar tlktlk‰PNG  IHDRd-ok>ÂgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<]PLTEǾÏ"&©ÈÎï¶»ÖÓÚú“¢Þ ¬à¶Âõ‡§ÕÙêÉÊÎáâæ{ŽÔ¡ëˆ™× ²ø§¬¹ÀÀ±ÝÝÎùùéõõçëëåED9×ÖËhg]_X<@:#mhUÿÿÿÝÀ1tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍvÿIDATxÚbC£: d#„„………h` @¡X",***LKˆ.–], ºX@t± €èb @ÑÅ€BµD„6–š%""´° € ˜% ˆ™B:H¢ˆ²Áf@• ˆRPy"K`\PbC(!II!h©…ëƒ(ñ„Ä!ꈬC„Ä…àl!0[X\J\$TMˆ(’>a$S„ Ù@ Ш@R.$‚¬LJBR¢‰AÌG1 ¬ Â(FȃÔPhhÁTÀ¢„%!`€&q°%u P ¹¢ ¬ € ¹CT$B¢à|‚ºW„¤Àl £!B`R$( …Ĉ‘’ž@AÅ%ĤÄ%@,(—ʂڱ%$ÁââRPmB U`1IˆYB  99€\1 yCCCÿf"[N 'Ü=TGÈ’øl8˜^Kû5<êSæRɤ”%î@@ à›Ê b1 qÅAXHˆ¸&ØB’R y n˜P„Ìã–4A €€j¹€€>Ü ˜ t!˜+(.ÈÅWQ±A2ÜÜMUÜ‚’’‚‚â `1 %`19€F< 3cZÄ`óe!\ˆ DÈ+. 83‹³Àä¸!lYYA -6‚EJŠ¢V €@©žXXX 4„å Ê@86Ð`RdB´€4I "Ý "–@xrÊŒ‚H€AÊ`—f ÉȰCŒ"XV0ɲ³C b@2…¬H ¬È“ p)!(ì‚ 0Ž4ˆ)(%RÁÎ ¶$€TÊ€¥Àþb‡b,säÐ@7À üѰ‚Òî?f¥Ö—\PIx!I´¦"”Ȉ’3¨ QY˜ÿt^^ÛØgv- }>WJOAV`$&#”¦8ùøø8€\FF ›SFJ$ÂÆ€ÐƊС䈉ÀÀ 4ª…Èäå -Á§‡ €H²…—ŸŸŸf ?ðâ5„ €k1Âd‰,ŒÃ ³ƒ“€.€"­F™ËË€àñ‚½ÁIÈ€"±Ù4ÉH gx|‚f©m)))9´. aMDƒ& ºX@t± €èb @ÑÅ€¢‹%DKˆ.–], ºX@t± €èb @€d`‚ɽSµOIEND®B`‚bm3.7.0/doc/html/a00084.html0000644000175000017500000001122411365042651013426 0ustar tlktlk BitMagic: bm::sse_empty_guard Class Reference

bm::sse_empty_guard Class Reference
[Processor specific optimizations for SSE2 instructions]

SSE2 reinitialization guard class. More...

#include <bmsse_util.h>

Public Member Functions

BMFORCEINLINE sse_empty_guard ()
BMFORCEINLINE ~sse_empty_guard ()

Detailed Description

SSE2 reinitialization guard class.

SSE2 requires to call _mm_empty() if we are intermixing MMX integer commands with floating point arithmetics. This class guards critical code fragments where SSE2 integer is used.

Definition at line 49 of file bmsse_util.h.


Constructor & Destructor Documentation

BMFORCEINLINE bm::sse_empty_guard::sse_empty_guard (  )  [inline]

Definition at line 52 of file bmsse_util.h.

BMFORCEINLINE bm::sse_empty_guard::~sse_empty_guard (  )  [inline]

Definition at line 57 of file bmsse_util.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00230.png0000644000175000017500000000423311365042647013246 0ustar tlktlk‰PNG  IHDR˜(3TbKGDÿÿÿ ½§“PIDATxœíškHT_ÆŸ'eØ(YyAŠÌŠ¢¢)M1´‹] ‘(£ }(íKIEQvR2C?D eE©d“•AZifv#TºÐm*ű"ÓÌr²œçÿ¡·Có:3Íü™ÓûûûÃÞ{­uÖìóœsÖìsT$ @!Ôÿë7B`E(ŠÆÞDqqñŸÌCð Óéb=H;M4—Ú©S§zéÈî N:…%K–82*•Êæ¸¨ÁŠ"&P!0¢ EL (B`Eq‹À^¼xãÇ»#Ô¡­­ ÙÙÙ¿µûôé²²²\òQš¬¬,ddd ##™™™8xð UUU8qâD/’ÈÊÊ‚Á`øÓéÂáF«­3[”––R§Ó9eûÿ@CCÃÂÂ~kg4)I’K>J#I,XÀ””®ZµŠ‘‘‘ôòòâ½{÷XQQA///~üøÑʧ¦¦†žžžüðáƒbyÙÓ‹ÃÖ¿•¡C‡âÙ³gŠû(ÅÆ1mÚ4¹?þ|äååáÈ‘#8p JJJ°bÅ y^¯×cÖ¬Yðõõý㹺­³X,X»v-|||0hÐ ìÙ³ÐÚÚŠ¸¸8äææ"00þþþ8vì6nÜ ¨¨H޳oß>,_¾ÜnÛ¶mð÷÷‡$I˜>}:š››å¹‡"22^^^ CAA ¥¥³fÍÂÉ“'¡ÕjqíÚ5ÌŸ?_ö+,,Dhh(4 °oß¾^¿ïÝ»w²ÏÕ«W1~üx«¶råJ—óxüø±Íµüúõ«ó `àÀ$ jµÉÉÉ(,,´š×ëõHNNv˱\ÆÕ[ž-JKK©R©¸~ýz~þü™7nÜà€X\\Ì·oßR­Vsûöí´X,ÌËË#feeÑb±0;;›¡¡¡r¬óçÏsÿþý6ûeee ¤Á``GG˜ššJ’ìììd@@8@³ÙÌŠŠ úøøðæÍ›4ìÛ·/yëÖ->{öŒÞÞÞ$ÉŽŽJ’Ä’’šÍf^¿~jµš---½‘?}:;;i0h0øàÁ6Œ{öìq9¯_¿Z­ãË—/¹aÃŽ9ÒîZK’ÄÍ›73??Ÿ‡bZZCCCi0H’÷ïß§F£áû÷ïI’wïÞe¿~ýØÙÙi3ž^¯çĉyüøqšÍf§Î·-ìéÅmóõõeww·<–žžÎÄÄD¾}û–äøüùsj4~ûö$YWWÇÁƒ;uœsçÎ100="ùãd¶µµ‘$‹ŠŠ8aÂ+ûµk×2--F£‘øúõk’Öb1›Í¬­­•}~ŠÊ`0Øد,Z´ˆÉÉÉrß•}úÈý1cÆ ¢¢Bî{{{øñRT’$h4¹ï,óæÍCee%""" Õj1cÆ ¤§§C«Õ¢±±OŸ>ÅСCeû®®.Ì™3 V«Ø+¦$I¨­­Å–-[ðâÅ øùùÁb±8•Ï®]»ðêÕ+TWWËc®äQSSƒÕ«W#<<iiiˆuj=vïÞmUƒ`ÅŠ0™LP«ÕXºt) ±fÍèõzäææ:Œ§Óé Óé`2™ŸŸ˜˜Œ7gÏžujá6™L&«~KK üüüÜÀ¿Û999ÈÉÉA]]öïߤ¤$ÔÕÕÁÇÇQQQ(++“í»ºº R©`2™ìž¸sçÎ!==z½ððð€V«ým.gΜA~~>îÞ½ ///yÜ•<úôéI’ðþý{|øðß¿·ºHeÒ¤IhkkCGG´Z-–,Y‚­[·¢´´­­­˜={¶Sqzzz@ýû÷w9[¸­ÈollÄÅ‹üØ?:tè|ÕºBmm-ÊËËmö÷îÝ‹˜˜h4Lž<Ë—/Ç›7oqqq¸qãžSmQZZÊ)S¦pĈŒŽŽæ!CÏîîn¹û‰Á`°ªeêëë­j°uëÖYí©ýÚ7 áØ±cËððáòmNN}||Ë   .\¸===4ôððí~­§ššš8hÐ FGG3..Žñññ>|8ìÖ`©©©ôðð ···Ü‚‚‚\Îã¿yóæ wìØÁÑ£GÛµ‘$Éê#?FÃÈÈH>yòÄÊîèÑ£À+W®ØE’ÅÅÅŒŽŽfqq±\ÿìéÅ-ûIWW+++­Šfwc6›Y]]ÍË—/óÝ»w½æ›››Y^^.ÿ°EOOM&“Üÿøñ#¯\¹Âû÷ï“ü!ºªª*‡>¿Ã™<ìñýûw—}þ-î:–=½¨þ3Ù •J%¾h8=½ˆ—ÝE(Š˜@Q„ÀŠ"&P!0¢ EL (B`eq´õ/šh®4—¾;}ú´½)À&:®×˜Ýw‘;5˜@Q„ÀŠ"&P”õA5TÙÏ^IEND®B`‚bm3.7.0/doc/html/a00035.html0000644000175000017500000001210711365042651013423 0ustar tlktlk BitMagic: bm::bitblock_get_adapter Class Reference

bm::bitblock_get_adapter Class Reference

Bit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal. More...

#include <bmfunc.h>

Public Member Functions

 bitblock_get_adapter (const bm::word_t *bit_block)
BMFORCEINLINE bm::word_t get_32 ()

Detailed Description

Bit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal.

Definition at line 4973 of file bmfunc.h.


Constructor & Destructor Documentation

bm::bitblock_get_adapter::bitblock_get_adapter ( const bm::word_t bit_block  )  [inline]

Definition at line 4976 of file bmfunc.h.


Member Function Documentation

BMFORCEINLINE bm::word_t bm::bitblock_get_adapter::get_32 (  )  [inline]

Definition at line 4979 of file bmfunc.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00061.html0000644000175000017500000005471311365042651013433 0ustar tlktlk BitMagic: bm::encoder Class Reference

bm::encoder Class Reference

Memory encoding. More...

#include <encoding.h>

Public Types

typedef unsigned char * position_type

Public Member Functions

 encoder (unsigned char *buf, unsigned size)
 Construction.
void put_8 (unsigned char c)
 Puts one character into the encoding buffer.
void put_16 (bm::short_t s)
 Puts short word (16 bits) into the encoding buffer.
void put_16 (const bm::short_t *s, unsigned count)
 Method puts array of short words (16 bits) into the encoding buffer.
void put_32 (bm::word_t w)
 Puts 32 bits word into encoding buffer.
void put_32 (const bm::word_t *w, unsigned count)
 Encodes array of 32-bit words.
void put_prefixed_array_32 (unsigned char c, const bm::word_t *w, unsigned count)
void put_prefixed_array_16 (unsigned char c, const bm::short_t *s, unsigned count, bool encode_count)
unsigned size () const
 Returns size of the current encoding stream.
unsigned char * get_pos () const
 Get current memory stream position.
void set_pos (unsigned char *buf_pos)
 Set current memory stream position.

Detailed Description

Memory encoding.

Class for encoding data into memory. Properly handles aligment issues with integer data types.

Definition at line 45 of file encoding.h.


Member Typedef Documentation

typedef unsigned char* bm::encoder::position_type

Definition at line 48 of file encoding.h.


Constructor & Destructor Documentation

bm::encoder::encoder ( unsigned char *  buf,
unsigned  size 
) [inline]

Construction.

Parameters:
buf - memory buffer pointer.
size - size of the buffer

Definition at line 509 of file encoding.h.


Member Function Documentation

encoder::position_type bm::encoder::get_pos (  )  const [inline]

Get current memory stream position.

Definition at line 611 of file encoding.h.

Referenced by bm::serializer< BV >::gamma_gap_array(), and bm::serializer< BV >::gamma_gap_block().

void bm::encoder::put_16 ( const bm::short_t s,
unsigned  count 
) [inline]

Method puts array of short words (16 bits) into the encoding buffer.

Definition at line 569 of file encoding.h.

BMFORCEINLINE void bm::encoder::put_16 ( bm::short_t  s  ) 
void bm::encoder::put_32 ( const bm::word_t w,
unsigned  count 
) [inline]

Encodes array of 32-bit words.

Definition at line 647 of file encoding.h.

BMFORCEINLINE void bm::encoder::put_32 ( bm::word_t  w  ) 

Puts 32 bits word into encoding buffer.

Parameters:
w - word to encode.

Definition at line 630 of file encoding.h.

Referenced by bm::serializer< BV >::encode_bit_interval(), bm::serializer< BV >::encode_header(), and put_prefixed_array_32().

BMFORCEINLINE void bm::encoder::put_8 ( unsigned char  c  ) 
void bm::encoder::put_prefixed_array_16 ( unsigned char  c,
const bm::short_t s,
unsigned  count,
bool  encode_count 
) [inline]

Encode 8-bit prefix + an array

Definition at line 527 of file encoding.h.

References put_16(), and put_8().

Referenced by bm::serializer< BV >::gamma_gap_array().

void bm::encoder::put_prefixed_array_32 ( unsigned char  c,
const bm::word_t w,
unsigned  count 
) [inline]

Encode 8-bit prefix + an array

Definition at line 516 of file encoding.h.

References put_32(), and put_8().

Referenced by bm::serializer< BV >::serialize().

void bm::encoder::set_pos ( unsigned char *  buf_pos  )  [inline]

Set current memory stream position.

Definition at line 619 of file encoding.h.

Referenced by bm::serializer< BV >::gamma_gap_array(), and bm::serializer< BV >::gamma_gap_block().

unsigned bm::encoder::size (  )  const [inline]

Returns size of the current encoding stream.

Definition at line 603 of file encoding.h.

Referenced by bm::serializer< BV >::serialize().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00008.html0000644000175000017500000002062511365042627013432 0ustar tlktlk BitMagic: sample9.cpp

sample9.cpp

Example demonstrates binary distance metrics.

See also:
bm::count_and
bm::count_xor
bm::count_sub
bm::count_or
bm::distance_operation

For more information please visit: http://bmagic.sourceforge.net

/*
Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)

Permission is hereby granted, free of charge, to any person 
obtaining a copy of this software and associated documentation 
files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, 
publish, distribute, sublicense, and/or sell copies of the Software, 
and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included 
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
*/

/** \example sample9.cpp

    Example demonstrates binary distance metrics.
 
  \sa bm::count_and 
  \sa bm::count_xor
  \sa bm::count_sub
  \sa bm::count_or
  \sa bm::distance_operation

   For more information please visit:  http://bmagic.sourceforge.net

*/

#include <iostream>

#include "bm.h"
#include "bmalgo.h"


using namespace std;


int main(void)
{
    bm::bvector<>   bv1;    
    bm::bvector<>   bv2;    

    bv1[10] = true;
    bv1[100] = true;
    bv1[10000] = true;
    
    bv2[10] = true;
    bv2[100] = true;
    bv2[20000] = true;
    bv2[30000] = true;
    
    // Hamming distance: 
    
    unsigned hamming = bm::count_xor(bv1, bv2);
    
    cout << "Hamming distance = " << hamming << endl;

    // Dice distance using basic distance functions
    
    double dice = 
        double(2 * bm::count_and(bv1, bv2))/double(bv1.count() + bv2.count());
    
    cout << "Dice distance = " << dice << endl;
    
    
    // Dice distance, can be computed using "metric pipeline"
    
    bm::distance_metric_descriptor dmd[3];
    dmd[0].metric = bm::COUNT_AND;
    dmd[1].metric = bm::COUNT_A;
    dmd[2].metric = bm::COUNT_B;
            
    bm::distance_operation(bv1, bv2, dmd, dmd+3);
    
    double dice_p = 
        double(2 *  dmd[0].result) / double(dmd[1].result + dmd[2].result);  
    
    cout << "Dice distance (pipeline) = " << dice_p << endl;
    
    return 0;
}


Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00167.map0000644000175000017500000000024111365042644013240 0ustar tlktlk bm3.7.0/doc/html/a00136.md50000644000175000017500000000004011365042632013136 0ustar tlktlk40d0d61697e1d28cd83c7f4c2514afb8bm3.7.0/doc/html/namespacemembers_func.html0000644000175000017500000000757111365042652017147 0ustar tlktlk BitMagic: Data Fields
 

- a -

  • and_op() : bm
  • any_and() : bm
  • any_or() : bm
  • any_sub() : bm
  • any_xor() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00133.map0000644000175000017500000000060711365042632013234 0ustar tlktlk bm3.7.0/doc/html/a00243.png0000644000175000017500000001123011365042651013240 0ustar tlktlk‰PNG  IHDRÕuÙ\¤mbKGDÿÿÿ ½§“MIDATxœíÝ}TLùð÷43"QQm…²ÊC%´,Ë¦ÈÆÑz.‹CØÝ<¬Ý³ëd9yÞß.aí Ñ‘­Tˆ-Ií¶’ÍCŠ%ÓNÙ™5i¾¿?œ½¿¦šiFWSú¼Î™sÜ™ïý~>÷Ž·¹÷ºSÆ!„7ún€· …ŠžQ¨á™Hß ¼®ˆˆ}·@Z€­­-F¥ï6t"h«*¾[ -À××aaaúnC'mö“ ÂÂÂàëë«ï6Èâçç§ï^ SÂ3 !<£PÂ3 !<£PÂ3 !|È30ÆXFF†Ê9U@@5jT£ËšêüköìÙ¬W¯^¬¶¶V«Þóóó™­­-srrbîîîÌÄÄ„:tˆ{ÝÙÙ™3†Ý¼y“ååå1KKK6nÜ86qâDæååÅìííÙ´iÓŒ­ÁAÛu×ûwûÍÍÍ™»»;ëÚµ+Û·oŸVsj£­žSµéoþêú%Ūª*¤¥¥ÁÄÄ...o¬7¾ëTWWãúõ먪ªÂСCaiiɽVTT„ŒŒ Œ1fff(--Åõë×aii‰!C† ???Æ| 2ÖÄÄ2™ Ý»wשFýõàáÇxòä Ñ«W/­úÖÆ¿çœm훿í*T­‘D"Abb¢Úלœ0tèÐì¨õh«¡jÓ_§ˆÅb˜››«}]› ¤u¡P陹¹9&Ož¬ï6ÚÍÕ?BZ …ŠžQ¨á…ŠžQ¨á…ª¨¬T転% U±}ûy(/õÝÑB›¾£¢½D°²úrùEü÷¿Yún§EÑ/(hA§OŸÖw -æöí8r$..3à¤ïvZ”­­­¾[ÐY›ý¤jO>ù$/ÞE‡"ܽ»ÆÆ†ún‰h@çT­\YY_òÕÔÔ">þŽž;"M¡PµrçÏgr_‰8s憞;"M¡Pµrÿÿ‘_J¥¿ýöÿüS¡ÇŽHS(T­˜TZ†?þx¥Rõ´76ö¶ž:"Ú Pµb±±00Pý¯Æ""è°5£PµbgÎÜlð)¥T2ddä¡  }ü¸¯¶ˆBÕJ=}ú™™ BB¡11zèŠhƒBÕJEGß‚HÔø]#µµJœ>M‡€­…ª•Šˆ¸ššÆÿ_ž1 '§99…-ÜÑ…ªÊÊ’àñã"êov‹…ˆŽ¦CÀÖˆBÕ EE¥79¦¦¦ÿùÏ¥è†èªÍÞPû6{ù²ï¿ßff¹çbcoÃÅÅ=z˜xuûRÇŽbüýw ÞyÇD_­’FÐ µm„Í„„,€Ï›ûɺ„tøGÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðŒBEÏ(T„ðÕÆðê—ÍÒ£=ÌÌ>b:Øè½z4þ¨Kí¯'Ý´i“º—ˆÞ¸ê»RObb"RSSUžSªñãÇ¿é~iójkk„ŠÎ©á…ŠžQ¨á…ŠžQ¨áY³BõìÙ3ÄÇÇóÕ‹Þëè[ff&Ž?©Tªò|ee%Nž<ÙàÏo»²²2„‡‡·Øz|iV¨òòòÃW/z¯S×Î;!‘HZ´fhh(Ž9‚óçÏ«<_QQ£G6øs[¡Ë¾¬;¶¢¢çÎ{£ë½ tø§Æõë×QQQÑbõ¤R)îܹƒ9sæ 11±Åê¶]öeݱVVV8~üø]ïMhv¨cØ»w/>úè#øøø ,, PZZŠuëÖ!""3gÎÄôéÓqáÂ8pÓ§OÇŒ3pùòenžððp«]VWgÏž=ˆ‹‹ãÆUVVbùòå(,,<~üŸ~ú)<==±`Á•¿°éééX´h<<<°lÙ2dgg‚‚‚ —Ë„ÌÌLÀíÛ·±dÉxxx`áÂ…øí·ßr¹ëׯǥK—àíí§OŸ6ºŸjjj4îÇ„„ 4sçÎ…D"áziŠº¾4mŸ®½M¿?¡¡¡˜>}:<<<°fÍh|_&&&ÂÏÏîîî˜1cw¨V¬L&Ã7ß|£súëiÚêælŽf‡*;;B¡‘‘‘ؼy3N:…ääd¼|ù(//GDD>ùäìØ±¦¦¦ˆŠŠÂ¬Y³pøðan[[[ôïß_í²º:}úôQù¨OMM…R©„••ªªªðå—_bâĉ8wîÖ®]‹={öàÞ½{(**·ß~‹¥K—"..ãÆÃ¦M›Àúuë`bb‚uëÖaàÀÉd ĬY³pþüy,_¾ß}÷òóóQSSƒ;wî 55Û·oG=TöD"Á°dÉû1!!žžž011³³³VŸVšúÒ´}õýñÇX¾|9.^¼¨6`šÞŸ7nàÂ…  ÁÙ³gadd„'N@ƒ}YYY‰íÛ·cÅŠˆÇ¦M›pèÐ!Èåòc«««‘‘‘¡sºëiÚšælµ·)iËØØË–-ƒH$‚““|||˜˜'''0Æ0oÞ< >B¡³gÏæ–OŸ>ÍÍ3zôh•yë/««³víZ„„„@*•ÂÒÒ—/_†—— -- ݺuÃôéÓÎÎΘ`îܹ …P(066†@ €±±1D"RSSáàà€É“'ÆŒ777$%%ÁËË ÕÕÕ@÷îÝ€{⢢ðüùsx{{#$$Dí>|üø1òóó¹[ÃÆ£GbÅŠj×ÓÔWÇŽÕnŸ¡¡¡Êptt„££#JJJ‡Õ«WÃÁÁ›7oÖØ;¼÷Þ{¸uëV­Zccc¸ººbþüù066n0V,#;;‡³gÏеk×F?=›S£®ÂÂBµûáuçlJ³ÿJJJT–år9ºtéÒÜiuªãîîŽääd$''cÔ¨QÜóFFF2dÂÃÃUkÖ¬‘‘ÊËËUæLIIiô„ÚÈȨAýÒÒRtîÜ€ê?"‘b±r¹eee¨­­Õ¸]Œ1\¾|‹/Fpp0‚ƒƒ±k×. 6¬ÉC@M}é²}u)•J€P(D§N4Ž­» +W®DLL ‚‚‚ P(Ô~Ë!55¡¡¡X°`Nœ8ƒ6øälnº4í‡×³)ÍUaa!ÒÒÒ¼ºH777çÉÉÉÁ7Ô.kª3vìXüõ×_ˆŒŒÄ”)S¸u†ŽÌÌLîâAuu5–/_Ž”” >¿ÿþ;är9 ++ [·n…AÃ]âêꊛ7or—le2®^½ŠáÇ7ëè舟þK—.Err2üüüpäÈ7ºÝ™™™øçŸàíí [[[îáé鉫W¯j<ÑÔ—.Û¼ºà„U«Vq…¾þúkîuMïÏ©S§°zõj…B 0“&MR»½EEE°³³Ã!C```€{÷²Rí6þK—uiÚ¯;gSš}ø7pà@ìß¿ááá(((@ß¾}áííÒÒRæ¹téîß¿#F4º¬®têÔ nnn¸ÿ>\]ÿÿ£ž={bÉ’%X¹r% €¼¼< <~ø!ÜÝݱhÑ"ØÛÛãÁƒð÷÷çþu633Ã?ü€Ï>û ýúõÃìÙ³±lÙ2 0999˜0aFŽ©öj‘““œœœðâÅ ÄÄÄ`ýúõ8räHƒq 9rdƒO÷qãÆáûï¿Çµk×Я_¿Fk888¨í €Æí«+99‘‘‘øøã±aÃî]Û÷gÒ¤IˆÅ’%K`jjŠììlîP¶þ¾3f Ž;†€€ˆÅbˆD"X[[cÿþýغu«ÊØ®]»rsèR£îzÎÎÎj÷CSs¾.«w@{òäIøùù!))IëI îÝ»cccîôMxÝ:ÅÅÅÈÍÍ…¹¹9z÷î­òZAA akk«rb.—ËñèÑ#ôïߟû _XXˆ‚‚XYY©§kC©Tªý”h.M}©Û>¾{«©©AVV `jjʽV_VVV"++ fffèÓ§¤R)$ †ª2ÖØØeee\H´­Q=MûAÓœÚHLLÄ–-[TÎ y !íUc¡¢;*á…ŠžQ¨á…ŠžQ¨á…ŠžQ¨á…ŠžQ¨á™Ú{ÿ‚‚‚Z²BÚ¤+W®4x®A¨lmm1kÖ¬–è‡6¯±¬4¸÷ÒZDuGIEND®B`‚bm3.7.0/doc/html/a00158.md50000644000175000017500000000004011365042640013141 0ustar tlktlk2ebdd75842997874796c31f51c14922fbm3.7.0/doc/html/index.html0000644000175000017500000000237311365042626013730 0ustar tlktlk BitMagic: Main Page

BitMagic Documentation


Generated on Sun Apr 25 09:37:26 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00162.png0000644000175000017500000002065411365042641013251 0ustar tlktlk‰PNG  IHDRMuÊ®³°bKGDÿÿÿ ½§“ IDATxœíÝ}\Íçÿð׹ɡ¨˜Š¹+K3´™ˆ¡[wº‘{³‘ò%Õ—ˆ¦YÌM1ù2C“VÔ&5%fÉ:*+©Õ9¤;Ý×¹~ôs&Ý8§Î}×óñØã±ó9ç\×ûó>>ï®s}>çú0!EQ”H˜ò€¢(J™Ð¢IQ%Z4)Š¢ÄÀ–w”üܾ}¹¹¹ò£S0`>þøcy‡A‰AOu^ .Ä™3gäF§¶`Áœ>}ZÞaPb #ÍNÎÂÂ[¶l‘wÒ×_-ï¨v sšEQb E“¢(J ´hRE‰MŠ¢(1ТIQ%Z4)Š¢Ä@/9¢”Fee%"##±`Á‚6_WRR‚þù§Ùv 8PZáQ-š”Ò¨¨¨À‰'ÞZ4ÿýw7ÙVSS###J3Dª E“R9ÖÖÖ°¶¶>®¯¯Çš5k°lÙ2ùE© Z4)±„„„ ** 011ÁæÍ›¡££¸rå Ž?ŽÂÂBhkkÃÁÁóçÏGYYüüü0nÜ8üôÓO¨¯¯ÇªU«““ƒË—/ƒÅbÁÍÍ S§NEZZÀd2‡ggg8884‹åï¿ÿF`` 222 §§‡eË–Á¢ÙëΞ= Œ9²Å}JIIÁwß}‡üü| 4žžž022j3qâ¤T =D‰ìÎ;¸té‚‚‚pᨫ«ãÇÐ8߸k×.¬^½111øòË/qôèQ””” ¾¾©©©xùò%°|ùrìÞ½ÚÚÚˆˆˆ€ƒƒŽ? ñ+xTT˜L&~þùg|õÕW8yò$nß¾Ý$–êêjlذ–––øå—_àááÀÀ@û¬Å}zöì|}}ñùçŸ#::“&M—_~ BH›±ˆ'¥zhѤDV[[ ¨««ƒºº:¶nÝŠ/¾ø ¦¦†   ˜››CMM }ûö›ÍFEE€ggg0 ˜šš‚ÅbÁÑÑQø¸²²R؇ÃÁªU«Àáp`bb‚9sæàòåËMb¹yó&zõê…O?ýjjj=z4lmmqõêÕ&¯;~ü8æÍ›uuõ÷)!!£F‚¹¹98æÏŸÙ³g ÷µ­XD‰“R=ôë9%2333ܽ{nnnèÞ½;>üðC,Z´Ý»w‡šš=z„£G"??šššxs­®]» ÔÔÔÀb±„_§¯¯6ûßšƒ Bjjj“×"77óçÏn«©©Á¸qã„ù|>’““áîîÞê>¢ÿþÂÇl6ÎÎÎ"Å"Jœ”ê¡E“!®®®puuEff&ÂÃÃ…_ï_¿ŽøùùÁÄÄL&3gÎlW?¥¥¥M—”” [·nM¶©««cäȑؽ{·p[MMM“33³VG™¯Ú)..n²-)) cÆŒyk,¢ÄI©úõœÙÙ³gáîî‹…áÃ‡ÃÆÆÏŸ?Ð878pà@Œ9L&¹¹¹011ÁÔ©S4Žú²²²`bbÒ¬ýƒbÆŒ4hF ,[¶ C† —Ë…‹‹‹pÄØZ,)))­>G©6ºr{'¶páBðx<±!®««Czz:jkk1tèPhkk Ÿ«¬¬Dzz:zöì‰ÁƒƒÏ磠 |ðÈíß¼y'Nœ@PP>|ˆ.]ºÀÈȨټç+ÏŸ?GNNz÷î ‘ûyS^^ 1`Àèêê¾5qãlÉ×_ ===ºr»’¡#MJ,jjj­^郞®Þäë©®®®°‰‹Íf·ÚÏëz÷îÞ½{·«×õïᨐ !Qc5NJuÐ9MJ¡hhh _¿~ò@Û±(Rœ”lÑ‘&¥PFŽ©0#·¶bQ¤8)Ù¢#MŠ¢(1ТIQ%Z4)Š¢Ä@‹&EQ”hѤ(Š-šEQb E“¢(J ô:ÍNîÊ•+¸råŠÄÚc0XPW&“ƒòòäµ¥®>ÕÕ!T´ëýL¦ºv‚ÊÊ´v½ŸÁ`C[Û/_þº:~»Úx›·ÝïˆR<ô·çØíÛ·‘››+‘¶!HM-BTÔ”—×ÁÒ²lmßmw{ÙÙåØ¿ÿ>¾øb8FŒèÙ®6<(Æ÷ßs±n  ê!öûKJjpòd&ž<)Çĉ}0}úp8¬vÅÒšàã?–h›”tÑ¢IuXrr¾úê"îßσ£ãXxyÙB__ûíol!³f퇺:çέîPlŽŽ‡QYYƒ¨¨ub-¦ñz,gÏÞÆöíQèуÿy°²Ñ¡˜(åFç4©vËÈ(ÄÒ¥Ç`o„wÞÑ@l¬çw¨`ÀÅ‹÷pï^.|}í:£¯¯îÝËÅÅ‹÷Úõ~ƒ ÆáÚ5oŒ;K—Ã_œWúÖ÷Rª‰Ž4)±ñxeˆAhèm Þ›7ÏÄäÉÃ%ÒvMM=&MÚ‰ñã‡bß>ç·¿AëןErr®]Û§cÓø‰‰°iÓy½„·÷t,]j&Sü,¥¼hѤDVQQƒàà_…¶¶:¼¼láàð‘D‹Æ¡Cñ¸Œ76£O-‰´YXXŠ vÀÓÓ®®S;Ü^uuöí‹EppLLúaÏ'ëK RJТI½U}½¡¡·ƒªª:¸ºNÅÊ•Ÿ kW5‰öSTô&øã‹/>§§­DÛˆÁ÷ß'âÆ ¼óNw‰´Éå`ãÆ0¤¦>ÁÊ•“ááauõ.i›R\´hRmŠ‹{ÿhdg?âEfðô´E¯^RéËÇ'¿þš†7|$^|**j`n¾Ó§„¿ÿ<‰µ+œ>}þþÑÐÒê†;ìaañžÄÚ§=DµèÏ?ŸÂÞ>Ë–…`èP]$&zÃßžÔ ff&§N%cãÆéR­ihp°qãtœ:•Œ¬,É]sÉd2°xñx\»¶ £GÄâÅG±jÕIðxeëƒR,t¤I5‘Ÿ_ ÿh\¸Š1c`Û¶905(õ~—.=†¼¼bÄÅyIíÄJCƒÖÖèß¿'Nžü\*}$$p±iÓy””TÂÇg&-2k×¥N”â¢E“Ðxrãðá|÷ÝoèÓG [·ÚaÚ´÷eÒ÷õëpt<ŒŸ~Z‰ ¥ÚWRRœœãÜ9W˜›“JUUµØ»·qõÃaï^' ¬#•¾(Ù£E³“#„àÂ…TøûG£¤¤îîVX¹r2ÔÔ$ûË—Ö¶¶ÐÓÓÄ©S+eÒç¢EGÁç—!&ÆSª— ýõW<)é£E³âñJáêz vvûÁá¨!&Æó¡§§)Ó8ªªj±kׯX°` ûȬ_CÃ>pv‡Ý»/¡ªªVª}±ÙL¸¹Y >~zöTÇÌ™ßÂÏï*+¥Û/%=´hv"ÕÕuØ¿?ææ;‘šúÇŽ-Çùón01‘Ï­hJ@EE ¼¼¦É¼o//[¼|YÇdÒŸAo„…¹b÷nœ={S§îƵkdÒ7%Y´hv„DFÞÅĉ;qðà¬Yc„„2;ÑÓ¯ ÁÁ X³Æ½{Kæbsqèèô€››NŸ_.“> œÇáÚµM01é‡ùóƒáî~ÅÅí[úŽ’z"HÅ¥¤<Á¶mHMÍ…£ãXlÜ8]æ_Ã[âáФ¤ \¿¾¹Ã¿o¯êê:Lœ¸“&! ÀIæýÇÄü…M›ÂÑÐЀíÛçböìÑ2iª(¯ ëן•û¼eKÒÓÿAXØlÚ4CnºvUƒ·÷tœ;÷;ÒÓ dÞ¿­íûHLô†­íûpu=…%K¾GAA‰Ìã ÄCGš*¦ººGŽ\ÅÁƒW ­­__;Ìš5JÞa5áìŒÒÒ*üò‹»Ü/ü&„`Ú´}xç œ>½Jnqܺõ^^?Ï/æM3±téºz’‚¢ESE¼y½åš5Xµj²ÄÕè¨ÄÄGpvFxø˜™ ‘w8€7²àà„³g]ðÉ'Fr‹£¦¦ûö]Æ¡Cñ5j œ0l˜žÜâ¡ZF‹¦ ¸?Û¶EâÖ­Ç 5où&€ÀÊj/Þ}·NœX!ïpšX¶,OŸ¾êÏ8E•žþ<>3åJ3>>3‘™Y(õ ÞEñÞ{úˆŠrdž Ó°fÌØ‡‡ÿ‘wXÔÿ£#M%T_/À?ÞÄž=—Ð¥ ÞÞ3àèø‘ÜçÛRUU só°²2Æ7ß8È;œy{‡!.î!®_ß„nÝc]ÌÇùððŽ{¹X³ÆîîÖô§˜rFGšJ&99 Ó¦âË/#àäô’’6ÃÉi¬BL¾Šòò*‰/.,Ižž¶(/¯ÂÑ£‰òEhÈ]DDü¾¾v8rä*llš*™;ˆRíC‹¦’ÈÏ/ÆêÕ?ÀÞ>ºº=°¾¾³Ñ½;GÞ¡½Õ³gå8|8nnÐÑÿVº²¢£Ó«WOÅ¡Cñxþü¥¼Ãb2X±bâã7 wïî˜={?¾þ: ÕÕuò­S¢_ÏÜ«Kˆø zzšðóûTén!«ˆ_{[SUU‹ñãwÀÆf„BN#Bpúô-lß~::=8cÇ–wX i*°K—þÂäÉ»pðà¬[g…ÄDo¥+˜™™<œ9s 6LSø‚ ݺu·÷tœ9s ™™|}픦`sˆ¾¾vˆ½›7Ë;œ698|„ÄDoëÃÉé06l8‡òòjy‡¥ÒèHSçÎýÿhBàí= ŒSªBó&BfÌøZZÝpö¬‹¼ÃiEú¹§(.^LÅ–-?CM={1u*½+¦4Б¦œ¥¤<ÁŒû°aÃ9ØÙFr²-2Sê‚ wñ×_yðõ•ÝŠì’æëk‡´´§¸p!UÞ¡ˆÄÎn46âãcÑ¢£X·î JJ*å–Ê¡#M9áñʰcG4ΟÿffCàï?FF²[½\šjjê1q☛"0p¾¼ÃéõëÏâÆL$%Éo »ö¸|ù>¼½ÏƒvîtëÚ©ª†Ž4e¬®®‡'ÀÜ|’“³pôèRœ?ï¦2BB®¡¨¨7Ê~EvIóöžŽ¢¢ „„\“w(b±±1ÁÕ«0eÊ{X±â8\\N*Ôµ§ÊŒMJHàbòä]سç\\&#)ifÌø@Þaµ[Kaqqø ..“¡§§%‡¨$KOO ..“qàÀo-®°®È…HKKûö9ãÌ™UHIy‚)Sv!2ò®¼ÃRz´hÊ@NÎs,Yò=.<cc}$%m‚§§­Â-Û&®>òƒ«ë)¼xño1ùöÛ8p8l¬^=UŽ‘IÖêÕSÁá°ñí·qÂm/^TÀÕõ>úÈOŽ‘‰fòäáˆß€3FÂÍíG,_¯TÞa)-:§)E5Ø¿?GŽ\Å A:رcÆ*ï°$¢¤¤ÆÆ>W@_·Î ¶¶ïÃÚz/¶oŸ‹%KÆË9BÉúá‡dlÝú3bc½óöïþŒñáChk«Ë9BÑ$'gÁÓ3%%Uضm6œœÆÊ;$¥C‹¦BqÛ·_DUU6l˜†%K&¨Ôšˆ7o>Ƽy…Y,&45»AG§bc½Ð¥‹j­ÄS[Ûkë½xö¬eeUhhŸS¤•EQUU‹o¾ù!!×0i’öìqD¿~=å–ÒP£Xbcï#(èJ›¯¹?vv°víiXY@r²>ûl¢JLàrÿ›ýoalh ¤¤YY<ØÚîErr–£“¬ää,ØÚîEV%%•M &›Í—«\k]vëÖ~~Ÿ"2ò?ÈË{)SváäÉhmü$¸¸œDQ‘âÎßÊ’jÉRt÷î,[ÿè'ÿ_¼¨Àÿ{¶¶`0ˆ‰ñÄîÝŽèÕKCÑJ_Fo^ïM@@™É‡½}æÍ;ˆŒŒBù(…˜7ï ì탙ɇ@@š£1ÊèÃ!.î¿X¶Ì[·þ ‡Cxò¤¨ÙëÂÃÿÀÅ‹÷0wîATUÑ߸Ӣ)‚œœçX¸ð˜LØl&öî>W_/@HÈ5Œïß~{€ƒáÂ…ÿÀĤŸ#–¾´´<ÔÕ5´øÜ«‘ØÍ›jmJq=š(üåë£Ë×ÕÕ5 --O–aI‡ÃÆæÍ3íŽââ LºßŸ ñCuu¾þ: ÙÙϱ|yH«Ÿ{gAç4ߢ¨è%lmÁã•¡¾¾ñ ‹Å@|üFðùåðñ Gvö3¸¸LÁÚµ–ÐÐPüõ-%aèÐm®¬Ã`0àîn//[¥ø bK!Ø»7ß~×êWWPW¬]2ŒL:êêpà@ø |0óñË/bïÞá ‹‰Y³F!(h‘Ò~®E‹f*+k1wîwxø°@X0€Ífbð`ddð`e5~~ŸÂÀ ·#•­ÂÂRŒ³­Åç  `çN{,^¬gÐOJƦMçAZ-žwïnCŸ>Ê]*Ðxc·õëCÁå€Éd4[ì˜Á`ÀÍm*6oV¼{=ÉýzÞŠºº,Yr´YÁ¿’gdð°yóLœ<ùy§*˜ž^Ðâv&“ 55ŽÿLe &,^<Ç55˜Ì–™Ör¢ŒÞ{OÑÑî03‚úúæÓ„ÅãäÉrˆNþhÑl!ëÖÁíÛÙÍ æ+,)¹ŸÎ„Ë-hvs/6› ÂÃ×ÀÚÚDN‘Iµµ ÂÃ×@CƒÓäªPScËU¢ ÙÙÏpýzF«ÿþ !ðñ Glì}G&´h¶`çÎ_pñbj«“ÿ@ã‰.·ááÈ02Å‘QØä›Í‚®n\º´¦¦å™t™šÄ¥Kë¡«Û£IáˆR_%Ð?¿ "ÍY®\ywï>‘ADŠƒÍ7œ}Søÿ ]º°›]“ûŠ@ @EE-uš‹ßéÙóÿ÷ÇÙ°³; |üêšÌúz‹ ƒÞ1B#Fôƒ‘QõÅ€½:Õ¥99Ï1~¼?ÀÞþCÌo6¿ÙYÔÕ5ÀÓ3çÏ7NÑ$'û¨ÌIÁÚÚzddðÀåàÑ£BÆÆÆ(.®—ËCvösTUuÇÇH¬Oyj)­VÕŸÔeõjk‘_+drP+jþW¬˜ éÍ_*k~ÝÜlðìY¹TsÓÒΧ®®.ttt £ªÞ•-垢ĢhEA‘ÐÜt´hRE‰MŠ¢(1ТIQ%Z4)Š¢ÄÐá¢Y\\ŒÝ»wK"J.\¸€ßÿåååøæ›o4ýL³²²pâÄ ‘Úª¨¨ÀŽ;¤ªÒy•Ûö#ªœOYÔ iå¯ÃE³´´!!!äóÏ?Gvvv‡Û¡šz[^ÜœŒÒÒRlÛ¶ @ÓÏ”Ëå"88X¤¾ÊËËáëëÛᘕ…8¹mÏ1¢jù|=_’ªm‘Vþ:\4 ðèÑ£ƒÒRz/fIkO^%õ™ª:QsKóÙèõ|)sN:\4y<fÍš%||õêU|ðÁàp8>|8.\¸ |nË–-ÐÑчÃÁ”)S—׸2Œ““ø|>œœœ””>ŸüðÃÐÖÖÆÃ‡ñ×_a„ èÚµ+ qæÌa»gÏžÅСCÁf³Ñ·o_ìÙ³PTTKKKB__:::8~ü8¼¼¼ ££ƒ¾}û"44´£);Qó ¡¡¡000@·nÝðé§Ÿ¶xпù™ ¬]»šššÐÕÕÅÎ;ÛŒçØ±c8p 444°|ùrm¯–£È$‘[qŽ‘–¨B>ßÌ×ë9÷8m«´Dâù#o(,,$ onnUvv6ÑÐо·Gäÿû©®®&‘‘‘D]]p¹\CôõõIff&)++#vvvÄÅÅ…BHqq1éÛ·/IHH µµµäéÓ§¤[·ndΜ9$99™¼xñ‚ôíÛ—$>éµoæëõœˆsœ¾|ù²ÕZð&iåO¢E388˜Lš4©ÉóöööÄÏÏDFF}}}rÿþ}BHãÎ _ׯ_?’ššJ!äéÓ§ÉÏÏ'„JÆŒӤݵk×wwwR]]MRRR„Û_ü™™™Â¤½|ù’BHFFa³Ù¤®®ŽBÈÝ»w‰žžžÈûJˆbÔ„±òºaÃâììÜäýï¿ÿþ[‹fÏž=Imm­ð=>>>dΜ9Íby•o>Ÿ/Ü6~üx!òþ(R~%•[Q‘7)z>Å)š„4Í×›ESÔã´­Zð&iåO¢—åååÁÐаÉ6###<}ú3g΄½½=Æbݺu(..nµ-&“ }}}@NN¸\. „ÿ…††¢¤¤)))°±±Á!C0gΜfÃo Æ{3 p8°Ùláce'N^óóó›-(allüÖ>† 555ác´|{‹ÕäwÝÊœciä¶­c¤%ª”Ï·å8m«´Dù“hÑÔÔÔlöãö¢¢"hii‚€€!,, ÕÕÕ˜7o^«m½¾sššš˜8q"rrršüwøðaDFFÂÇÇ[¶lAFFîܹuuuIî–B'¯={öŸÏo²M”ÅÞ| ŸÏG¯^½Ú´’FnÛ:F¨·k«ÈŠD‹¦••âââð÷ßhœ‡¥¥%víÚ…É“'ƒÍfcìØ±X²d þùç‘Úµ´´DRR’pÄÊÊJ˜šš"""yyy066ÆÄ‰Áb±póæM”••Ir·š8yµ°°@hh¨p”˜––†k×®½µœœDGGh¼ŒãÈ‘#˜>}: 22÷ï«æÍµ¤‘Û¶Ž@µó) mÕ@6ù“hÑ5j<==ajj kkkŒ1ööö°µµÅÒ¥KñôéSŒ9–––pttÄöíÛ…ïÕÕÕÅš5k’’Ò¬ÝaÆaûöí7n,--ahh899aöìÙHOOÇ'Ÿ|+++lß¾ƒ†§§§$wMa‰“×Ù³gÃÊÊ ÆÆÆ˜2e fÍš%¡¡!ˆ•+WÜÝÝ)µý“'iä¶­cPí|¶uŒ‹ª­ZÈ(¢L|¶¥¡¡<þ¼É¶g73™UIDATììlrùòeòèÑ£&Û«««Éµk×Hll,áñxMžãóùäòåËäÅ‹­ö•——G._¾,œ˜¥´´”ÄÅÅ‘?ÿü“BHnn.¹zõªÈû E:QñЏyMKK#qqq¤´´´ÅöZúL«ªªH|||““nÒ hù•DnÅ9F$M‘N½ž¯–r"ŽÖj¤µ”¿Vow!­Û (;iç§³çŸæW²¤¹¿¯¾"¿÷Þ{o[Q´”?º`EQ”hѤ(Š-šEQb E“¢(J ´hRE‰MŠ¢(1ТIQ%Z4)Š¢Ä@‹&EQ”Ø­=ñàÁYÆ¡4ž={&“~:kþi~%KÚùäñxJ¹’¼¨ZÊ_³¢Ùµk×&ëÏQMI;7=ÿ4¿’%Í}íÑ£‡JL åü5ûí9EQÕ::§IQ%Z4)Š¢Ä@‹&EQ”þÂDÒdZÍIEND®B`‚bm3.7.0/doc/html/a00160.md50000644000175000017500000000004011365042641013133 0ustar tlktlk517ca728ad26f81dc00d95171c1aa291bm3.7.0/doc/html/a00122.png0000644000175000017500000001346411365042643013250 0ustar tlktlk‰PNG  IHDR(ZHHÐbKGDÿÿÿ ½§“éIDATxœíÝ{\ÍyþÀñWê$R„ä–&ÂagÆ%ÌÊc’È„]·Á4.C;Æ Ãæ2©†eM ËXL™Š°Bk»+“DÍjFƒ.É”2]è2Ýôû£ÇùþúžÓ¹t7öó|<úã|?Ÿóù¾?ç|Îçó9‡Qeee%‚ ‚ ¬Es ‚ Âÿ1éA¡IˆI‡ ‚ MÂDýBZZñññÍ‹ð™:ujs‡P'bü ‚ 4 ;;;† &»¦1éˆeÆŒM”ðbú­žOã_¡aøøø*»¦1éPù­¾iÍ+,,ì…xÓ¾páBs‡ ‚ð›µqãÆ¯‹3‚ ‚ 4 1éA¡IˆI‡ ‚ MBL:AAhbÒ!‚ B““AAš„Ö¯ÌÖÆæÍ›)//ÀÈÈ¥RÉïÿ{zôè@nn.ûÛßX¹r¥Æs+** G5~Õ2$$„ŠŠ –.]ZçøtÝßÅÅÅ„††’€‘‘#FŒÀÇÇccã:ǤKPPÞÞÞtëÖMv½z=RSS‰eöìÙƒ`¸S§N‘““#=nÙ²%ÎÎÎôíÛ·£zñ<}ú”S§N1}út?~ÌÙ³g>|8VVV²´æŽ­±Ÿ×ÔeêS½/T¯ûõqåÊâãã)..¦S§NL˜0kkëZ剎Ž&77W£l[[[ÆŽ+=.**âáÇ(•J:vìXc<ÍѦuõ¼ÇÚ +þóŸ¹zõ*éééÜ¿ŸÃ‡ãèèÈÕ«WÈÏÏgß¾}Rþùóçs÷î]ÊÊÊøä“OX´hÅÅŲrÓÒÒX²d AAAõŠOýþµ‘žžŽ³³3û÷ï§{÷îXYY±fÍÜÝÝí·LÖ¯_/µOuÕëñÓO?ñÅ_4Êý›Zii911ÉüðÃÃæ¥NŽ;Ƶk×ÈÎÎ&;;›ï¿ÿž÷Þ{cÇŽ5wh/”ÂÂBN:%=þôÓOIMMÅØØX#­)“‘‘Qcl†j¨¸"–ú¨Þõµwï^hÓ¦ ŽŽŽddd0wî\îܹS«}Zv€o¿ý–þýûcjjÊ Aƒ¤uéééDGG(M8lllØ»w/J¥R–ÿçŸÖ9AÒ—®z=ž={ÆÒ¥KiÓ¦ ÖÖÖU/ãÇçàÁƒ(•Jnܸ¡µÝÔóúøø°eËéÙÙÙ 2„¼¼¼:Ç]]bâ}Ö®=Æ€k™6mQQW)**i²Ÿ'vvvÒ'ª¼¼<>øàΞ=‹»»;÷ïßçûï¿gÞ¼y¸¹¹ñ‡?üK—.IϽví³gÏÆÍÍ È&šwîÜañâÅŒ7ŽY³fqîÜ9)mß¾}xxxàææÆòåËÉÎÎ6(M[,5Å­N[¹×¯_gûöíìØ±ƒ‰'âééIdd¤AõÐVÿÜÜ\>þøcyôèÄÇÇËÒôµ¡:mõ×Uòòòð÷÷çúõë²û?yò???"##ñòòÂÃÃ3gΰk×.<<<˜2e çϟרӵkט?¾ì/00PŠóܹs̘1ƒ1cÆ0eʾþúk½±èªŸ*Îo¿ý&L˜ÀæÍ›yöì™Þ1Sz_躧¾1UQQAyy9………²ëÓ§O—^û Écˆ›7oÒ©S'€¥¥%C‡åÞ½{ykêßÚ¶›z?©·E||<Ë—/—Ý×ßߟ””@û˜nîþ¯­›tDGG³wï^öìÙÃòåˉÅÏϨ:¡úYéÝ»wceeÅîÝ»quu•žïééÉÙ³g¥”––ƽ{÷5j””çéÓ§Ì™3‡Ï>ûŒÂÂBÂÃÃYµjÙÙÙܹs¶mÛFNN½{÷æ/ù 999²û§§§ãééɦM›ÈÏÏgÊ”)xyyÕ¸UrõêU:wî\ãì}Ê”)²ØV¬XÁ•+W´¶‘¾t}ª×CŸB¡ 33“¨¨(9r䥥¥\¼x‘ãÇsæÌlll´¶›z^///öìÙ#Ý#<<¥R©1Áª[·2 :Ã+¯¬ÇÝ}\"'§ªŸËÊ*ê\î󤸸˜üü|òóó¹sç‡ÂÉÉ ¨úô–œœLll,´jÕŠÕ«W3uêTNŸ>ÍÂ… Ù°a< ;;›µk×2þ|¢££yíµ×X·n•••üú믬\¹’±cÇrêÔ)V¬XÁÖ­[ùñÇIHHàÌ™3„„„pâÄ ÌÍÍùꫯt¦åææjE=î.]ä«PºÊ-,,ääÉ“´hÑ‚¨¨(Ö¯_ψ×Y]õ/))!)) €Å‹Ó±cG–.]Ê AƒdiºÊP§«þºêàççGÛ¶mñóóÃÑÑQvÿòòr’’’((( 22’9sæ„R©äرcL:•/¿ü@ö¼þýûãïï¿¿?ü1EEE¼ôÒK@Õ¹ƒÀÀ@Þ}÷]bbbX·n{öì!//Og,ºêW^^Îõë×ùïÿËÁƒÙ¿?—.]"11QgߪSï‹úŒ)333&NœÈÚµkY·n§N"##ƒN:Ñ¿ƒó¨$''#ûS½Y»ººÊVJJJ¸zõjg±Ôû·.í¦ÞOêmѱcGÙöÀƒ(**Ò9¦›»ÿk«Á¶WâããIMMª&ÅÅŤ¤¤ààà ˧T*iÑ¢J¥…BAEEÕ›NûöíyõÕW‰ŽŽÆÛÛ›ÈÈH&Ož,Û#455å»ï¾cРAØÛÛ£P(ÈÏÏ'<<œqãÆI3ÝU«V±cÇ8ÃÃÃyã7ððð`åÊ•˜˜˜P\\Œ¹¹¹,ïÓ§OiݺuµPÃS*•lÞ¼…BÁÈ‘#Y¼x1aaa¸ººR\\ÌçŸNçÎ)))ÑÚnfff²¼¥¥¥Ì›7ääd^~ùeBCCy÷ÝwkÛǹœ8‘Dxønß~„‰‰1ååU}ý¢L4ªÛ¹s'»víÀØØ˜þýûóá‡Jé%%%,[¶Œ:pòäI¤eß#FàêêÊ… 033càÀÒVåôéÓ166¦´´”¸¸8Ú·o/]&L˜À¿þõ/éÓZYYæææ|òÉ'ÒÞtii©Ö´ØØX­±¼ù曲¸Õé*ªÔ.\¸œœœ˜>>( BBBèÕ«PµmbbBaa!]ºtÑ‹®ú¹»»S^^ÎìÙ³¥P{{{ ¥r´õ­®¾¨Ï˜‚ª7ç1cÆGTT[¶l¡W¯^|øá‡ØÛÛœàöíÛ²3*}úô‘=NJJbûöíØÙÙñæ›oÖWuui7KKK~ªÞiiiZï§kL×T®JSôm5ؤcÆ ²3aaaüñäñãÇ—¡Úbñöö&""‚Í›7ËÒ[¶lɵk×øè£HMM¥}ûöÒRн{÷èÝ»·”×ÈÈH6øTÔó) Ù›Cu666dddPYY)Û^øî»ïxðàÎÎΜ8q€””¸|ù2fff¼ÿþû¤¤¤èL¯ž={Ê^pœœ¤eê-Zйsg@w»©ç555å­·ÞâÈ‘#˜››óÃ?ÈÎÙèòË/\º”…­íû¼òÊzŒxö¬êÓ¥j¡˾}‰‰I6¬ò$-- SÓε~žŸŸŸìL‡:###éE6;;[ú«òÒK/‘••…©©)]»v•®›˜˜ðöÛo™™IZZšìTzII ®®® >œÄÄDÞ{ï=,--2d3gÎÄÒÒRgš®XÔãV§«\€Î;Ë^{ôèARR’ÎzTTTh­¿¡233 .CWý{õꥵ†033ªÚP¡PH Ô_KÔ|Xo¬*:X2b„5;w.'==GëöŠ6óæýŽÉ“|¿ÆFLÌÏz!C†pàÀ222°µµ%77—ÿüç?|ôÑG( Ö¯_O^^J¥’””6mÚıcÇ>ž;vзo_ÆϧŸ~ T¾Ö–¦+}t• UŸ².]ºÄˆ#(..&::šqãÆé¬ÇàÁƒµÖßPµ)CWý+**´Ö¡1ܾ}›­[·¤ñé7;;›nݺIßÖøñÇ :”^×þÕ×·qOggg=zDLLŒ´BQYYÉ7ß|ƒ½½½4aÕ—G¥¤¤DãÍZµtùòerrrðöö–}@µ°°¨ó¶z}ÚMµ]¦ÚÖOIIáá꟨뿋æè½õlR@¶fbb°aÃd§Õ«³¶¶fñâÅlß¾]ãà··73gÎä³Ï>ÓxÞ[o½Å† xýõ×155E¡P`ooŸŸ'Nœ`Ò¤IôïߟPXXÈ€dŸF…”/!!àà`­ËF6l ??''')--åÞ½{üõ¯eøðáµm&ƒ©ŸÂîСƒÆ·l\]]Y±bÁÁÁܺu ,XÀ£Gdùtµ[HHˆÆ½ |óÍ7Œ=ºNñwéÒ_ßÑøúŽæÖ­LŽO"22‡sQ(Œ_Ès†rpp`Ú´i,X°€¾}ûrëÖ-FÅСC3f ³gϦgÏžüôÓO,Z´ˆV­ZѵkWæÍ›‡¯¯/}ûö%-- '''FÍãÇ9yò$óæÍC©TróæM-ZT}mP[š®XôV×U.üÿ·¼"""xøð!]»vÅÓÓSSS­õ022ÒZÿšV#kââ⢵ŒÚôE\\œÖ:´k׎íÛ·³dÉÚ´icPlºDGGSPP Ûvµ´´$22’#FpðàA–-[†B¡öàwîÜɦM›´Æ¢«~ÕÐN¾¾Õ¥>cªmÛ¶¬Y³†   öïßO‡ÈÊʃó¨lÛ¶mÛ¶É®) Ξ=ËÍ›7ÉÊÊ’Îͨxxx°lÙ2ƒêªN_»Uï§víÚÉžkkkK¿~ýxçwèÙ³'Ož<‘£ëÓÏSÿëcT©¶1ÆŒ3ô‡¯ž={Fnn®lO;))‰W^yE£áõyòä W®\ÁÚÚggg BitMagic: sample2.cpp File Reference

sample2.cpp File Reference

#include <iostream>
#include "bm.h"
Include dependency graph for sample2.cpp:

Go to the source code of this file.

Functions

void print_bvector (const bm::bvector<> &bv)
int main (void)

Function Documentation

int main ( void   ) 

Definition at line 55 of file sample2.cpp.

References print_bvector(), and bm::bvector< Alloc >::set().

void print_bvector ( const bm::bvector<> &  bv  ) 
Examples:
sample2.cpp.

Definition at line 36 of file sample2.cpp.

References bm::bvector< Alloc >::get_first(), and bm::bvector< Alloc >::get_next().

Referenced by main().


Generated on Sun Apr 25 09:37:36 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00250.map0000644000175000017500000000022411365042651013230 0ustar tlktlk bm3.7.0/doc/html/a00064.html0000644000175000017500000003035311365042651013430 0ustar tlktlk BitMagic: bm::gamma_decoder< T, TBitIO > Class Template Reference

bm::gamma_decoder< T, TBitIO > Class Template Reference

Elias Gamma decoder. More...

#include <encoding.h>

Public Member Functions

 gamma_decoder (TBitIO &bin)
void start ()
 Start encoding sequence.
void stop ()
 Stop decoding sequence.
operator() (void)
 Decode word.
 gamma_decoder (TBitIO &bin)
void start ()
 Start encoding sequence.
void stop ()
 Stop decoding sequence.
operator() (void)
 Decode word.

Detailed Description

template<typename T, typename TBitIO>
class bm::gamma_decoder< T, TBitIO >

Elias Gamma decoder.

Definition at line 466 of file encoding.h.


Constructor & Destructor Documentation

template<typename T , typename TBitIO >
bm::gamma_decoder< T, TBitIO >::gamma_decoder ( TBitIO &  bin  )  [inline]

Definition at line 469 of file encoding.h.

template<typename T , typename TBitIO >
bm::gamma_decoder< T, TBitIO >::gamma_decoder ( TBitIO &  bin  )  [inline]

Definition at line 42 of file bmgamma.h.


Member Function Documentation

template<typename T , typename TBitIO >
T bm::gamma_decoder< T, TBitIO >::operator() ( void   )  [inline]

Decode word.

Definition at line 60 of file bmgamma.h.

template<typename T , typename TBitIO >
T bm::gamma_decoder< T, TBitIO >::operator() ( void   )  [inline]

Decode word.

Definition at line 487 of file encoding.h.

template<typename T , typename TBitIO >
void bm::gamma_decoder< T, TBitIO >::start (  )  [inline]

Start encoding sequence.

Definition at line 48 of file bmgamma.h.

template<typename T , typename TBitIO >
void bm::gamma_decoder< T, TBitIO >::start (  )  [inline]

Start encoding sequence.

Definition at line 475 of file encoding.h.

template<typename T , typename TBitIO >
void bm::gamma_decoder< T, TBitIO >::stop (  )  [inline]

Stop decoding sequence.

Definition at line 54 of file bmgamma.h.

template<typename T , typename TBitIO >
void bm::gamma_decoder< T, TBitIO >::stop (  )  [inline]

Stop decoding sequence.

Definition at line 481 of file encoding.h.


The documentation for this class was generated from the following files:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00172.png0000644000175000017500000000513411365042644013251 0ustar tlktlk‰PNG  IHDR°(^‚ppbKGDÿÿÿ ½§“ IDATxœíœiLSiÇÿ¥-E\¨ZD1eF@*2RŒŠT‘à£&. ¨_F0`tFM\Ç%~ÐÁ­¢1¦T£1ÁQDƒÖ±VQ‡qAc© !¨¥”ó~ðåÆÚÅ:JÍóKúá9÷<ç<çöß»œ{S Åëk/€Áè LÀ † ˜áÑ>5èt:ܼyók¬…ÁpˆL&CPP¥‘>A©TöaŸn÷Q*•ŸÊ•¬ŽÀ°æ£;ÁãñlÚÙ50ãafx4LÀ † ˜áÑ03<&`†Gc·æ,OŸ>ŵk×°téR7,§sy^¿~ …BìììNÅ~÷î”J%nݺ‡ & %%|>Ÿó1P©TÐh40›ÍˆˆˆÀ¢E‹Ð§OÎgïÞ½HLLDHHˆEüÇ#::R©[·nÅ´iÓ “É,|Nœ8Ñ£GãŸþAUU•ÍuŽ9ÉÉÉNÕTZZŠ«W¯bÉ’%2dˆ³»ÂŠ‚‚˜L&$%%q¶Ë—/£¼¼éééœíáÇ(((Àš5k,öÛM—À=ÂÁƒݱ–Nçyóæ rss¹qZZš]|Š^¯GDDŽ;†¡C‡B"‘à·ß~ìY³¸^¸N§ƒT*Åž={àïï!C†@¥Ráûï¿ÇÝ»w¹X;wîă¬rìÝ»Z­f³ëׯGrr2ZZZ,|rss¡ÕjQ__½^½^¥R ¥RÉ_½zåTMð믿bãÆû¥3<~ük×®µ°mݺ¨©©ál'Ož„J¥ú¢â»Oâœåܹs$“Éœöï,®ä>>4jÔ(ÊÍÍåüâããiåÊ•]ÊåØyç–kàööv¤§§£OŸ>0`¶oßxõêâãã±gÏÂßßGEff&üýý1hÐ œär94 "##!‘H¬|„B!âââ\~ù)$$ëÖ­CZZL&“KsA©TbÑ¢EH$ËåP©Tv}+++‘™™ ©Tjs;ŸÏGll,'à?ÿüÓ¦MCbb".]º³ÙŒòòr477còäÉVóÏŸ?~øÇÿOÄì‹ÅbüþûïðõõÅĉñóÏ?#//À‡_çš5kÀãñ@€_~ù…777sqæÌ™ƒ•+WÚ;Êó±——Äb1„B¡Ãu777£wïÞŸõñóósX{SS“öè¸áܹs§Ësqÿþ}TTTp7]III8uêÚÛÛ9"BQQfÍš…™3g"00jµÚnÌ)S¦X8!!QQQàóùÐh4P«ÕJ¥èׯŸÕÜyóæ!''ÅÅÅ1bÖ­[‡êêj·ÕÛå.[ˆ%<<ÅÅÅܸgÏž>¼!‰ ¸±;ó¸J@@jkkADVkQ«Õ¨®®Æ Aƒ ÓéìÆ¨®®Fxx¸Ë¹…B! ¦L™‚üÑåùöP*• "îÌe4ñüùs\½zr¹×®]ÃòåËŠU«VaêÔ©Ÿýär9²²²PQQÿý'NÇCBB.\¸€ªª*›—Èd2Èd2Ô××C¡P ..R©ÔåK/[¸å\__o16 6Ý-OLL Z[[qùòe«mÛ·oGqq1âããQQQÛ·o[ùÔÔÔàâÅ‹˜1cÀÇÇoß¾µòkiiA=¬ì2™ iiiX¾|¹[Þþ#"¨T*lÞ¼………(,,Äŋǩ„B!D"êêêÐÐЀ¶¶¶Ïƈˆ€X,ÆæÍ›1iÒ$ˆD"@bb"ŠŠŠ V« ¸³Ù "‚@ @¯^½ºVlŸÞÕu¦ €Î;GDDMMMJüñÕÖÖZÄzòä õìÙ“—••Q@@7ÖjµTTTdsì(OUU•E\WºÙÙÙ4|øpª¨¨°¨‰Ïç“Z­&"¢ôôt ¦òòrÎG§ÓQtt4Í;—³-[¶Œ&MšDMMMœíĉäííM:ŽëBTUUqÛ›››)((ˆ„Ba—»W®\!ooojhh°°=z”úöíKF£‘³•––RRRц H¯×;Œ½`Áâóù´{÷nÎf0H ŸÏ§ÆÆF»sKJJ())‰† F[¶l!ƒÁàtMÀNÂ-މ‰¡‘#GRll, 8¦OŸN­­­. 8##âUöñØQžOI&L ­VûÙõFZ±by{{Ó˜1c(44”|}})''‡óikk£¬¬,‰DFcÆŒ!oooZºt)½}û–ókhh ©S§R¯^½(::šFŒAýúõ£3gÎÙ0Ñùóç @—¼lÙ2š3gŽ•½±±‘D"={Öj[MM mذÂÂÂÆÞ¿? {÷îYØ£¢¢(**Êî¼Ó§OSll,>}šL&““•XcOÀ¼ÿoäÈËËÃO?ýäò)íýû÷¸qãüüü0vìØ.Ÿ\ÉÓÞގׯ_£ÿþ€ºº:”••aܸqèÛ·¯Sqëêêð÷߃Ïç#22Òâ [oÞ¼ÁÝ»wa6›ŽØŒõäÉTVV¢wïÞ;v,|||:Yí—Ãl6ÿ'!Ü—ÇãA©T"%%ÅÒî.wGjkkÞä=Únû¨;ò­Õã öì–.DwE(ÚìßvàëëûWÓu¾µzÜÁ7-`‰D‚ÄÄį½ ·ñ­ÕãØë” † ˜áÑ03<&`†GÃÌðh˜€ 0ã±ÛvõUGãk`õ(™ý½*£»bëïU­Ì`xì˜áÑ03<&`†Gó?¸!’îˆy/IEND®B`‚bm3.7.0/doc/html/functions_func_0x73.html0000644000175000017500000001575311365042644016433 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x74.html0000644000175000017500000000746211365042652017730 0ustar tlktlk BitMagic: Data Fields
 

- t -

  • test_bit() : bm
  • tmatrix_distance() : bm
  • tmatrix_reduce() : bm
  • tmatrix_restore() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00194.map0000644000175000017500000000023311365042645013242 0ustar tlktlk bm3.7.0/doc/html/a00166.md50000644000175000017500000000004011365042644013144 0ustar tlktlk630d5c85a92a267311f6ca1a7a85462ebm3.7.0/doc/html/a00044.html0000644000175000017500000006073111365042651013431 0ustar tlktlk BitMagic: bm::bvector_mini< A > Class Template Reference

bm::bvector_mini< A > Class Template Reference

Bitvector class with very limited functionality. More...

#include <bmvmin.h>

Public Member Functions

 bvector_mini (unsigned size)
 bvector_mini (const bvector_mini &bvect)
 ~bvector_mini ()
int is_bit_true (unsigned pos) const
 Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.
void set_bit (unsigned pos)
 Sets bit number pos to 1.
void clear_bit (unsigned pos)
 Sets bit number pos to 0.
unsigned bit_count () const
 Counts number of bits ON.
int compare (const bvector_mini &bvect)
 Comparison.
unsigned get_first () const
 Returns index of the first ON bit.
unsigned get_next (unsigned idx) const
 Returns index of next bit, which is ON.
void combine_and (const bvector_mini &bvect)
void combine_xor (const bvector_mini &bvect)
void combine_or (const bvector_mini &bvect)
void combine_sub (const bvector_mini &bvect)
const unsigned * get_buf () const
unsigned mem_used () const
void swap (bvector_mini &bvm)

Detailed Description

template<class A>
class bm::bvector_mini< A >

Bitvector class with very limited functionality.

Class implements simple bitset and used for internal and testing purposes.

Definition at line 278 of file bmvmin.h.


Constructor & Destructor Documentation

template<class A >
bm::bvector_mini< A >::bvector_mini ( unsigned  size  )  [inline]

Definition at line 281 of file bmvmin.h.

template<class A >
bm::bvector_mini< A >::bvector_mini ( const bvector_mini< A > &  bvect  )  [inline]

Definition at line 289 of file bmvmin.h.

template<class A >
bm::bvector_mini< A >::~bvector_mini (  )  [inline]

Definition at line 297 of file bmvmin.h.


Member Function Documentation

template<class A >
unsigned bm::bvector_mini< A >::bit_count (  )  const [inline]

Counts number of bits ON.

Definition at line 330 of file bmvmin.h.

Referenced by bm::bvector_mini< A >::compare().

template<class A >
void bm::bvector_mini< A >::clear_bit ( unsigned  pos  )  [inline]

Sets bit number pos to 0.

Definition at line 321 of file bmvmin.h.

template<class A >
void bm::bvector_mini< A >::combine_and ( const bvector_mini< A > &  bvect  )  [inline]

Definition at line 433 of file bmvmin.h.

References bm::bvector_mini< A >::get_buf().

template<class A >
void bm::bvector_mini< A >::combine_or ( const bvector_mini< A > &  bvect  )  [inline]

Definition at line 458 of file bmvmin.h.

References bm::bvector_mini< A >::get_buf().

template<class A >
void bm::bvector_mini< A >::combine_sub ( const bvector_mini< A > &  bvect  )  [inline]

Definition at line 470 of file bmvmin.h.

References bm::bvector_mini< A >::get_buf().

template<class A >
void bm::bvector_mini< A >::combine_xor ( const bvector_mini< A > &  bvect  )  [inline]

Definition at line 445 of file bmvmin.h.

References bm::bvector_mini< A >::get_buf().

template<class A >
int bm::bvector_mini< A >::compare ( const bvector_mini< A > &  bvect  )  [inline]
template<class A >
const unsigned* bm::bvector_mini< A >::get_buf (  )  const [inline]
template<class A >
unsigned bm::bvector_mini< A >::get_first (  )  const [inline]

Returns index of the first ON bit.

Definition at line 382 of file bmvmin.h.

Referenced by bm::bvector_mini< A >::compare().

template<class A >
unsigned bm::bvector_mini< A >::get_next ( unsigned  idx  )  const [inline]

Returns index of next bit, which is ON.

Definition at line 408 of file bmvmin.h.

Referenced by bm::bvector_mini< A >::compare().

template<class A >
int bm::bvector_mini< A >::is_bit_true ( unsigned  pos  )  const [inline]

Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.

Definition at line 303 of file bmvmin.h.

template<class A >
unsigned bm::bvector_mini< A >::mem_used (  )  const [inline]

Definition at line 483 of file bmvmin.h.

template<class A >
void bm::bvector_mini< A >::set_bit ( unsigned  pos  )  [inline]

Sets bit number pos to 1.

Definition at line 312 of file bmvmin.h.

template<class A >
void bm::bvector_mini< A >::swap ( bvector_mini< A > &  bvm  )  [inline]

Definition at line 488 of file bmvmin.h.

References BM_ASSERT.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00247.md50000644000175000017500000000004011365042651013142 0ustar tlktlk3c002bf8ba6f35b0b9d3cdab0932ae6ebm3.7.0/doc/html/a00139.md50000644000175000017500000000004011365042633013142 0ustar tlktlk14fd572dd23cfd9c41e6d38cff48ba8dbm3.7.0/doc/html/a00166.map0000644000175000017500000000017511365042644013245 0ustar tlktlk bm3.7.0/doc/html/a00207.map0000644000175000017500000000020011365042646013230 0ustar tlktlk bm3.7.0/doc/html/graph_legend.png0000644000175000017500000005364711365042652015071 0ustar tlktlk‰PNG  IHDR˜èKŒ”!bKGDÿÿÿ ½§“ IDATxœìÝy\õúðÏYàˆÈ¦,‚Šn àŽŠ ¸¥V—®ØÍ~™·RÓÔ4SÓRo¦¡]Ss)+ ÔÜÓdsAA×TTdQÙ÷ýœóüþ ÏÃâ9 Ëó~½zÅ™å;ÏÌw¾33ß™1ÆcŒ1  cŒ1ÆkZ8ÁdŒ1ÆcÅ &cŒ1ÆÓ(iµSÄÇQQõJääX[ cŒ±& >>Q|>Öº×_]èš„ê̈À×·Bi‚üý)S„Ž‚1ÆX_>k?û¬Õ'˜Ïð¯‘HècŒ5AœiG@@'ðÄ}0cŒ1ƘFq‚ÉcŒ1Æ4ŠLÆcŒ1¦Qœ`2ÆcŒ1â“1ÆcŒi'˜Œ1ÆcL£jþš¢ð÷÷ÇÇ+×­[7øøøhrqõêÈ‘#°´´Ä Aƒ„…1Æ«–ÐçäÜÜ\lÞ¼Ÿ|òI­ç:vöò4š`¦¥¥!11pæÌ€««+ uëÖš\TLŸ>K–,AçÎk=ï¾}û0`ÀN0cŒ5 BŸ“³³³±bÅŠ:%˜BÇÎ^žFÌ9sæ¨þž>}:`ëÖ­š\ÄK ¬Y³„ƒ1ÆÓº†~NV§1ÇÎÊÔ[Ì””xzzb×®]066ÆñãÇ1bĈrÓøøø ** éééððð€¿¿?ºví }}}L›6 …pâÄ ØÙÙAWWýúõÃ¥K—TeìÞ½666J¥°´´ÄºuëTe§¤¤ÀÇÇááá€7nÀÙÙ-Z´@÷îÝ *gÏž=èÔ©ôôô0qâDdggk{1Æcõ¦ªsà³sðúõëaee333ìܹ ,€™™,--±gÏ@xx8fÍš…9sæÀÐÐmÛ¶ÅúõëkCqq±FÖESå0Í©·³¤¤ááá8|ø0Ѿ}{ܸq£Ü4wîÜAnn.JKK޳gÏ"&&ÑÑÑ8räN:…ÄÄDLž<«W¯Fvv6^}õU¼öÚk "äææâí·ßÆ×_üü|ìÝ»Ÿ|ò RSS±mÛ6˜ššbÛ¶mÅðÅ_àøñãj—ÿàÁ,X°ŽŽŽYŸ?þø ÀÏ?ÿÌÉfQ¯O‘bÓ¦M2dtuuÕN[RR‚+V@WW;w†ƒƒ²³³±wï^¸¹¹aâĉÐÓÓÃÂ… ñþû°ºººˆŒŒÄĉ!“ÉÐ¥Kèèè ;;ÆÆÆ‹Å066†ŽŽŽ;KKKÌœ92™ #GŽÄ´iÓ°oß>`òäɘ%K–àÀ:t($ Œ+-ÇÐÐÇGPPjXaa!D">þøã ËHKK«66Æc¬1PwÌÊʪUY/žSSSa``Pn˜ŽŽd2RSS‘‘‘¹\º¯€ …D©TŠV­Zie¬z‚½hý٭댌 @TTbcc«oÔ¨Qøý÷ßU `TT¦N ‰D‚ÄÄDØÚÚbøðáH$øóÏ?‘““Si9GLL    ýû÷Ç¡C‡àîîŽ={öàÉ“'€ëׯãìÙ³šXmÆcLpêε•˜˜ˆ#GŽòòò°}ûvxxx”›ÆÉÉ W¯^ÅêÕ«qàÀØØØ`ùòåHJJzù•ù[XX|||0dÈ"""*½UÏêG½^Á|^çÎáää„~ýúÁÑÑééépvv®v¾#F`Ê”)°³³ƒ££#.^¼ˆuëÖ¡U«Vxå•W°råJ¸ººBWW:::èÒ¥ æÏŸ#GŽÀÜܳfÍÂÿû_ôïß+W®ÄàÁƒ1pà@ܾ}C‡…D"öïß[[[ôéÓ<¨ÐXcŒ±Æª[·nUž_¼ƒWŽ;bÉ’%ðóóCll,ºwïŽÙ³gWzçoذa6lžû÷ïÇ·ß~‹Ù³gÃßß_u;Ÿ GDD¤vŠ€Àרf²ºËå8þ<`ðàÁµÚ!îÝ»‡‡¢W¯^èСƒjxNN.\¸sss888 !!<€««+RSSqõêU 8&&&€¤¤$ܼyíÚµ«ÐïòÆHNNÆ Aƒ`hhX»•‰`Ê”ÚÍÇcŒU" ¾¾¾¨î´]êÎ5qìØ1¬X±‘‘‘8þ (ÿ~ HT–p²f¥Q&˜û÷_ÄóÏ&öï¿(`DŒ1ÆÄï+ÿ›@Ê è©0ñ0A4º399/ÆA©ü_‚©T.^ŒCrr¶€‘1Æc ~ðâ jÄÀ£ß„ˆ† ¤Ñ%˜‡_…X\ñ`b±‡_ "ÆcŒòéR¾0B<üE˜0]‚ùÛo¡PT|u§BAøí7¾MÎcŒ &þ7@$©8œȸ ä=¨ÿ˜˜ U‚ùàA*bb£â¥w ÄÄ<ƃ©õcŒ1Æ€²Û㤨|œX <Ú]¿ñ0Á4ªóðá+ÐÑ©:d1¾R1Æc } Ⱦ‰Ê/¡ì½˜~®×˜pU‚ùÛoQZúb¿Žÿ)-UòmrÆcLvb]õÓäÞ²nÔO>ê=FÆc¬Y*| ´Ÿ( òaùñ@z`ýúÿ¦+N¨T˜Y½Ñóo,odfÎ,{åÁæÍo  cŒ1ÆÊ‰ "})6Í`/¡ÑÜ"gŒ1Æc'˜Œ1ÆcL£8ÁdŒ1ÆcÅ &cŒ1ÆÓ(N0cŒ1ƘFq‚ÉcŒ1Æ4ŠLÆcŒi^§)üŠ¢fŒLÆcŒ1¦Qœ`2ÆcŒ1â“1ÆcŒi'˜Œ1ÆcL£8ÁdŒ1ÆXƒ™™‰µk× ÓN0cŒ1Ö dggã‡~¨Ñ´Ó§OÇǵ«+N0cŒ1Ö têÔ wîܩѴAAAÈÎÎÖrD¬®8ÁdŒ1ƘæÅ¢JGW:<99ãǤ§§ÃÃÃþþþèÚµ+ôõõ1mÚ4( øøø %%>>>¯qù¬þp‚ÉcŒ±zñàÁ,X°ŽŽŽ•Ž/,,ÄéÓ§¥¥¥ÇÙ³gƒèèh9r§N¶mÛ`jjŠmÛ¶aðàÁÊùã?0`ÀüüóÏœl „LÆcŒi !((ãÆÃرcaee…ÈÈÈÍ[RR‚+V@WW;w†ƒƒ²³³all ±X cccèèèT˜oòäÉØ¼y3Nž< |úé§HHHÐôª15¤BÀcŒ±¦)â0Ãζ¶¶˜;w.ÜÝÝ!U~Û¼*–––ª¿k3¯““œœœ––†;vÀÍÍ ŽŽŽ8xð`­–Ïꆯ`2ÆcL+t$€L&Cjj*222 —Ëë=…B"‚T*E«V­ê}ùÍ'˜Œ1ÆÓ 'àêÕ«X½z58,_¾IIIZ_vXX|||0dÈ"""°k×.­/—•á“1ÆcZ5lØ0ìÝ»çÏŸxzz¾t™æææ˜5k._¾\aÜþýû±|ùr¼þúë¸{÷.–,Y33³—^&«9‘ÐAÔÕÌ™¿6o~SàHcŒ1VN\é L©˜f( H$’ ÕJ%233ѦM›j‹OMMÅÕ«W1pà@˜˜˜Ô¨|Vø!ÆcŒi^§)eÿU¢ªäO,×(¹333Œ=ºVå³ú÷ÈcŒ1ƘFq‚ÉcŒ1Æ4ŠLÆcŒ1¦Qœ`2ÆcŒ1â“1ÆcŒi'˜Œ1ÆcL£8ÁdŒ1ÆcÅ &cŒ1Æ4/. '˜Œ1ÆcL£8ÁdŒ1ÆcÅ &cŒ1ÆÓ(N0cŒ1ƘFq‚ÉcŒ1Æ4ŠLÆcŒ1¦Qœ`2ÆcŒ1â“1Æcš×i 0…„Ž‚ „LÆcŒ1¦Qœ`2ÆcŒ1â“1ÆcŒi'˜Œ1ÆcL£8ÁdŒ1ÆcÅ &cŒ1ÆÓ(N0cŒ1ƘFq‚ÉcŒ1Í‹ DBGÁ &cŒ1ÆÓ(N0cŒ1ƘFq‚ÉcŒ1Æ4Júâ€øøxDEE K­ÅÇÇöíÛ'p$5ãääkkk­”ÝX¶+óúë¯k¥ÜÆÔ~›kkk899i¥ìœœk¥l¦yhÑ¢…VÊn¬ÇwkeœÐˆã×bûŽŠŠRå0MAeùˆˆÊ}‰> ¾¾¾õX]éè´”–>8’šñ÷÷Ç”)S´R¶HÄ©“šÆ4¦öÛL™2þþþZ);&&ÉÉÉZ)›i^¯^½`aa¡•²ëñݺ àdìk¤ÿæÕfûöõõE@@€VÊBeùM…+˜ÏhëØ\ÕÇB› ,ÓŒúJ¹ýj_}Ô£……zõê¥õå°—¦õeðñ½~ÕGûÖf[ŸªÊo¸&cŒ1ÆÓ(N0cŒ1ƘFq‚ÉcŒ1Æ4ŠLÆcŒ1¦Qœ`2ÆcŒ1â“1ÆcŒiT•¯)ª©ï¿ÿOŸþï=”zzzpqqÁÀÕ΋ˆˆL›6­Â¸ÜÜ\lÞ¼Ÿ|ò 233±cÇ,\¸°ÚXÖ¬Y¹\ ì±ycccŒ3;w®ÝJ5u­·†ìÈ‘#°´´Ä Aƒx_¨¡ÚîµišÂuY37n„——ºwï^nøöíÛ1hÐ ôéÓ§Vå=ßžš£Æºþþþþxøða¥ãºuë­.ÿùówm q|i,4ݾÕÑÔ¾ÿÒW07mÚ„'N 11‰‰‰ Ã!C°iÓ&µóݾ}[·n­t\vv6V¬X¡úû‡~¨Q,+V¬À¥K—˜˜ˆGa÷îݰµµÅ¥K—jµNÍA]ë­*Ó§O¯ò V_åìÛ·‘‘‘x_¨©ÚîµiêÔ¦ž¹.kfíÚµ¸uëV…á7n¬Ó¶z¾=5Vš:ž4&iiiªöìïïÕïôôt­/ÿùów]æ­éñESçœÆBÓí[Míû/}¦NŠéÓ§«~oܸ«V­Â¬Y³^ºìN:áÎ;5ž~Á‚6l˜ê÷øñã±eËìܹó¥cij4YoAAA©oM•ð¾PSµÙjÛ«RÛzæºdu¡ÉãIc1gÎÕßÏÚuUsšÚ_šcÝ66ZéƒÙ³gO¤¥¥!..#FŒ(7ÎÇÇGõ­d¥R‰?ü†††077Ç—_~Y¡¬äädŒ?^õûĉ°³³ƒ®®.úõëWmænjj ™L¦ú½{÷nØØØ@*•ÂÒÒëÖ­S[ºt)ÌÌÌ “É0bÄ$&&ªÆÝ¸qÎÎÎhÑ¢ºwïÞ¤>ñô̳z€””xzzb×®]066Æ­[·GGGÈd2ôìÙGŽPV§)))ðññAxx8õÛ«ª:¬m9{öìA§N §§‡‰'";;[íúñ¾P3êöƒÓ§O«Úã{gíÛ·«æËÍÍÅ€ êí[Ûz® ×eí¥§§ÃÃÃþþþèÚµ+ôõõ1mÚ4( êÛSUm¨º=«;þ?‹eýúõ°²²‚™™vî܉ ÀÌÌ –––سgj¾ªêIÝ:iûxÒXU·-kR'ááá˜5kæÌ™CCC´mÛëׯ¯q ÅÅÅ•þ|_Ûº­IùM]]uZÛ÷éþþþTÉà*9::Ò† (55•RSSéÚµkäââBǧ˜˜jÓ¦M…éCCCéèÑ£$‰hÞ¼y”ŸŸOááádddDûöí£„„’ÉdDDôðáCÒ××'"¢„„200 C‡QAA­ZµŠ:vìHJ¥’ˆˆd2-Z´ˆvìØAÛ¶m£¹sç’ Ý»wˆˆrrrH&“Ñ¡C‡¨¨¨ˆÎœ9Cb±˜RRR(((ˆ¬¬¬èÞ½{”““C&L ÷Þ{ˆˆòòòÈÒÒ’6mÚDEEEtòäI244¤sçÎÕx; ÿO_[µ-_]½•mk===š4iEFFR||<Ð?þHEEEtøðajÙ²%ݾ}›233ÉÒÒ’NŸ>M%%%j·—º:¬M9ýõÉd2:pàÒ† mذˆî¾PÛöU[šl¿D÷ƒ;wî¨Úã¦M›hàÀª²víÚE}úô!"õÛ·6õLÔpërÊ”)4eÊ”oëÚºuëݺu«ÆÓ·k׎:Ta¸íرƒž­²í«kÏêŽÿOžQÕû§FL±XL‰„$ Éd2rss£‡V›`š˜˜”Û9–,YB“&Mª2Áüúë¯iüøñªéKJJhÍš5”ŸŸOD¤Zö«¯¾J¯¾ú*=šÚµkG¿ÿþ;ÑåË—Uó?[ν{÷èðáÃdeeEÑÑÑDTV!™™™DD´gÏêׯ_¹õøðÃiîܹ5ÞN 1Á¬ªÞˆÊ¶ JJJ""¢­[·’‹‹K¹2^{í5úüóω¨lç¿zõ*©ß^ÕÕaMËY¸p!ýóŸÿ,7ÎÞÞ¾\‚Ù÷…†˜`Öf?x¾=¦¤¤ŽŽ=zôˆˆˆ¼½½iãÆD¤~ûÕ¼ž‰n]6Æ=~üX5ÎÅÅ…öíÛ§¶=©kûêÚsu &ÊËË#"¢»wï’T*¥ÒÒR""ºrå YXX‘úzR·N϶‰&Ž'Õi, fM¶eMêäèÑ£dhhHÅÅŪr–,YB>>>L¥RI4vìXêÙ³'ùùùQzzz¥ñ¾˜`Ö´n+sþüyzóÍ7©}ûö´xñbН~ƒ=§±%˜u=Ö½ì¾OTõþ©‘>˜Û¶m+ׇë™Û·o«¯k×®ÐÑÑQýîÝ»7Nž|¸Êíû¢ºlS®ËŠZ´h‚‚‚ Ãóóó¡§§§v^“*Û“º¶¯««[e{®ÌóÇÿšRWOYYY)§.Ç“ÆHSÛ¨¸}RSSa``Pn˜ŽŽd2RSS‘‘‘¹\^î¢R}P( "H¥R´jÕª^—­IÕµïºë´¹ïkõEë:::ÈÎÎFFF ** ±±±ªñqqq8v쀲¶mÛ¦öêÁ¨Q£ðûï¿«6FTT¦N ‰D¢š&//YYYÈÊÊBbb"V­Z…Þ½{ÃØØ‰‰‰°µµÅðáÃ!‘HðçŸ"''ðÕW_ÁÍÍ R©ƒ ¿þõ/<~üàááððpÄÄÄ Ð¿:tHƒ[«a5jBCCñàÁe±8 ÓªÛ^5©Ãš”ãîîŽ={öàÉ“'€ëׯãìÙ³åæç}Aû&Mš„k×®áÛo¿Åÿýßÿ©†«Û¾/ªÉ6庬ÞÈ‘#±uëVäææª†ýúë¯xüø1\\\ÔΫ®=©kûêÚsuÇÿšÒT=½ìñ¤)Ðä>Ÿ˜˜¨zØ+//Û·o¯p>prrÂÕ«W±zõj8p666X¾|9’’’^~eª 2D„ˆˆìÚµKëËÕ–êÚw]uZÝ÷_¼g^—>\;vì¨tœB¡ gggêØ±#M˜0œÉÙÙYÕsðàÁÔ­[7rqq¡¶mÛ’··7•””TÙ“ˆhΜ9djjJîîîdhhH›6mR“Éd@õŸT*%gggЉ‰!"¢øøx277'òðð oooêÚµ+M˜0ÈÚÚšìííÉÝÝŒŒŒhûöíª²ýüüÈÐÐÜÝÝ©]»vôú믓B¡¨ñvBìƒYU½•õc“H$å†}öÙgdllL£F¢6mÚÐû￯×·o_rvv¦K—.‘úí¥®kZŽR©$___266&777²¶¶&ooïr}0â¾Ðû`Öf?x±=ýãÿ :”Ûê¶/Qíö—†Z— ­fFF¹»»S«V­hРAdccC­[·¦ýû÷Ñÿú´=ÏÕÕ•öíÛWm{R×ö«jÏêŽÿ/ÆrïÞ½rûÕÕ«WUýýˆª®'uëD¤¹ãIuKL¢šoKuurôèQêØ±#ÙÙÙÑðáÃÉÒÒ’\]]©°°PíC>?¦Ï>ûŒììì*_YÌç©«ÛçíÛ·OÕ_óYÒÚjh}0«kßu=Ö½ì¾O¤Å‡|ªSZZJááá^iEÒ©S§ÊuÒžB¡ ´´´rÃîÞ½KÁÁÁµî´KD”M¡¡¡tíÚ5"*;9………QÙÃgÏž¥JNN®0obb"«:ÑÖFCK0ëêáÇLwîÜ)7<%%…‚ƒƒ)##C5LÝöªªk[Îõë×)44”²³³k½.Bì -Á¬­ËÊ8< IDATÊÚcUÔmßÚÖóË,K[uÙÐÌgîÞ½KAAAtîÜ9*,,¬Õ¼êÚSUmÿÙ2+kÏÕÿk£.õT_Ç“†š`VåeÚQY‚Ù¿*..¦3gÎPTT”êm.5!—Ë+^›ãKeu[]ùµÑÐÌgÔµï—9ֽ̹´ªýSô÷H•€€øúúâ…Áì%‰D"øûûcÊ”)²|¦Ún_Ü~믯/€²OóióÛY½zõÒJùLsÂÂÂЫW/XXXh¥ü†v|?vì˜ê [M•¶Û·¶Ë¯OUíŸZíƒÉcŒ±¦ÅÐÐ666B‡Á¸zŠœ1Æc—‹‹KµŽ1ÆW0cŒ1ƘFq‚ÉcŒ1Æ4Šo‘3ÆcŒÕAøÊxÈ‹”ha"…T&†®ÒbHZˆ ÛJ=1$21tõ%ÐiYö·NK DƒPù×Íš N0cŒ1Æê ;¾O®äB¢#D‘ yÕoópÅG‹‹ñ 4]F™Ô_Àõˆo‘3ÆcŒÕA÷WZC$¥E AYª„²”Ô&—Ï\鸻É&—_ÁÔºâb9.\x€-ºãܹÈå‘ÈÍ-DAA ŠŠJ‘›[„üüb– ;»yyE(,,E~~1òóK“SˆY³Üñé§ã„^ÆcŒ=§£‹ð÷UËêˆÄ`ûš¶^_¥H¡ýÄ ¦–ÉdR”ÀÄd z„C‡AW÷›]©$(•J(•Uõj³v7ù.ŒôŒ`a¨%³—£(-Å…M›à4{6ÄR>l5Dr¹7†bölèèH„‡U¡  qqièÕË"‘Hèp=™¡fv-‘¯6ÅKEÊÄpû¢:ºa‹oÓN.5 &ïxš%‘´‚“ÓGxô(%%òÏgd¤‡þý;ÕhZ___Õ×X-x€ @êßÿeÈúûÿ%Â…VM±ýÎ45ʝ¿Æêädd)ÆÁYÛ_VINNFrr²V—¡ éé…˜=;Ý»·F¿~2¡Ãi’j{|‰$HL £ÓR©)¤Ò6hÑ¢ ++……·µj“¡®}“’ðøbb3 ÒDRQ•·ÅEbÀ¬·>Ü¿ì }sÕð€€h<B‚9lØ0üöÛoBÄÒä 0¿ÿ~_@…BýdR©£GÛA"©¾«,×ÙˋɌÁò‹Ë3@j.  ²DÆHfk}kt6ìŒö­Úú•5Úé·ƒLÒ°N¦M¹ý¦ÿöò"#±¬cG˜þë_гþʾµµµÖÊn×®LMMµV¾¦œ=‹Å‹ƒagg'pDÂ000ÐZÙêÚ´RIÈÈ(FRR>ž>-ÀãÇHJÊGzz1”J‚H$‚DÈÿN~œœÌ1eÊZ‹µ)©¬}§ß)À½ã¸œ‰‚ÔR˜Ùµ„µ‹’¯æW˜V$.û‡~ÿ÷,Ñçm ÕoøðÃ1qâDí_Ïœœœ* «ð-r¦}—.=ÄŒ?!==¥¥U_‰‰DX¾ü¼û®K“¼"Õ…Ü ÁØoÇB®”WìR#t%º+åP*•‰DhoÒL:àÕþ¯bÞ¨y‚ÄÜ\<¹rþãÇ·…A|€a ò-sÈåJ|õÕqlÙr @D8zt.ú÷ï(pdM_DÄ=üðÃY"¤,KlH©„¢´1€ t<"qó>¨k‹B¡„Ÿ_>þø7””ÈËõ!—H$˜:u è$\€ÍLß¾ÖøñǵJ¥bXXáСÙ04Ô«ÇèR/æ"ïI ¬êÞ§¾•….ž^Ƀ÷&´l¨Á/¾EÞ@””ÈñÅGñãáxö€ÈÈ%èÔ©òNþÙÙ8y2ÁÁÑ8}:ùù%pph//{ŒÝ½zYÖï 4A ¥¯lz!·BPª(­0^*‘¾=./½Ì}dëIÊÍ›Ø5zt¥ãÄb1¬Äø­[¡on^Ï‘5m))¹x⦅páÂÃ*¯˜…†.€]»zެyÛ¸ñ$Ö®ý£Ò:‘JÅÐ×oÀÀª<4g/>¬Ós’)†/}ɇöŸ T8Ál`BCoâ­·¾<~¼¡Fó””ÈqAA7zÉÉ9èØ± <={ÃËËvæ~7uTPR€á_ Ǥ“L “È0©ï$,Ÿ°=Ûö&Èf„”Jl²µEqnn¥ãÅR)d††¿m¬‡­ç蚦sçbñïÿˆœœbÈå•?”h`Ð11ÿXÌg×ú—WŒ;Î`ûö3‰Êúô?ŸdŠÅ"´h¡ƒß~ûýúñCWÏä>.Áý  Äf óAåë0Íá³JNÎÆ… 1~|ŸZÏ«Tþú+AA7{÷’Ѻµ>F²ÃèѽáæÖzz•÷!a•KÍMÅÀÕ‘”™Töt9‰Æ;ŽÇßÀçG?GÌ“øöÅÒ±KÑÝ¢»À7mG¦OGlp°ê6ù‹Db1H©Ä¹s1tþ|¾e^GJ%ÁÏ/6„@,CYÅö‹Eðô´Ç?¼]Ï6?ùùÅØ¹3[·†A¡PàÝw]amÝsæìÆóŠJ$bìÞý† ë&\° Œ¼H‰_F^‡TOŒ.£M`ãÝöú|ÅQ‹8Álâ,lºwçWEiZQQ)víŠÄæÍ'QPP‚iÓ†áƒFÀĤükr._~„ñã¿|úé8Ìšå.D¸‚"%A^DÐiÉw, N0›©‚‚„…ÝFpp4Nœ¸…ÌÌ|ôèÑöï÷mÚ£OŸüàJ%NÝ>ïÿzã©ßS˜´4©t¹RŽ_þü+­DRVþÏùÿðé˜OÑ¡u‡z޶éÚÜ»7 33Ë ‰ÅhÓ½;ÆnÚ³^½ЬiЉyŒ™3ÅÝ»Én•›˜´ÄÍ›«Ьi*.–ã×_#±iÓ)ääâ­·†bæLwµwœþõ¯hÝZß|£ÝÏ—64©7 ”¡™èêi‚Áñ‹†‚L¹\‰¨¨¾›ˆO‡……¼¼øåî•IÎI†…¡EµÓ•*Jñã¹ñŸãÿÁÓì§x×å],ö^ +c«zˆ²i;6s&î;’ËUW-¼÷Z¶iƒÿþ·Ðá5IÛ¶…!--[·žÆ³«™R©ãÆ9bË– ^“PZª€¿ÿy|ûí dfæcêÔ!˜=ÛffÕ†2--&&-›ÅÙŠ˜‰ûÁÈŽ/†‘µ ]½ZÃÆ«5Œ:6¬Ï÷6gœ`² nÝzŒÀÀ ‰Æ‰00h#zÂËË#GÚÂП¶«y ¾ø_ÿéyé˜á2‹Ç,®Q’Ê*wÝß! "L{ôÀØM›P–†}o¼I?ý„®£F b“iÓ~ÀÞ½ïÃÔ´fÎüwî<aݺÀ×wˆÐ!6j¥¥ ìÝ{7†"%%÷ïÄÒFB‡Ö fÈ4;i· ÐÒL]F™ÀÆ«5ÌìZ «'˜L­¤¤L„„D#((þ«úÂPÙû6í`ee,tˆF±¼ÛÎlÃWA_!« Œø =ÂÌÀLèÐìG°cèP þðC ?_Õ×òÙ³‘xþ<þ/, :úÍóû¿š–Ÿ_ W×5<¸+6mš  ì®‡Ÿ_þûßPüùçRtìØFà('¹\‰ýû/â›oBñäIþùO'Ì™3 ––|\­QÿMBgCXö7€¨é_¬mÔ8Ád5VÙËÝííÛÃÛ›_î^…¥…ض_}…üâ|Ì9 F/@›V|’®ô{÷Ц[ù×°¤¥a§‹ zûøÀmùr"kZ>ÿüöî½€³gÃÔ´|À{÷’Ñ­_‰¯-¹\‰C‡.cÆ$%eâÿ„9sF¡}ûÊûu3Öq‚Éê„_îþòò‹ó±%l Ö­E±¼s=æâ£QUùð«™ë¿þŠK–`êÀ¼wo¡ÃiÔ¢£“àí½kּƷÁ5@©$>|ë×#>>¯¾:}4ÖÖÍû—J!é|.îg “›1:ä+¸M'˜ì¥ñËÝ_N^q¾=ù-¾ù eÙ+æzÌ…‘÷¿ª"ìž4 ÊÒRLùýwˆ$ü€Z](JŒ÷ d2:4‹ß*ñ”J±cÁÏ/¤bòäþøè£ÑÍûÕp$_ÏClP&„f¢(KóÞúèûN[Xçc_SÀ &Ó8u/w=º7Z·æ¾q•É)ÌÁ7'¾Á† ‚óGÏLJî EõO²òÒîÜÁ®Ñ£1bÅ ô}›¿0S;w†ãóÏ 4t¿ã²ŽˆÇ_‡Ÿ_0îÞ}ŠW^é‹yó<ѵ«¹Ð¡ ¦0CŽè€ÜÎ@îã˜tm®ž­aãeƒvüxS &ÓªÊ^î>hPgx{;ÀËËžûU"« K•hêJt±ÀsfŽ˜‰V2þêRm„¯Yƒ«?ý„ÿ C«¶œ ÕÆÓ§Ùpu]ƒ·ß†O>+t8!$ä&Ö® Ä;O0nœ#æÍóäDe æ‘iwÐÅÃ]½Z£Mw=¡CbZ &«7%8u*×qòd rr áàÐ^^eý6{ö䇄ž—‘Ÿ¿?l<¹-u[b¡×B|0âèéð¹&äEEøqäHXôî Û· N£2}ú¸uë1NŸ^™Œ¿†T¡¡7áçŒ71fŒæÍóä Y³Ä &Di©‘‘±8~ü:BB¢‘œœƒÎÍàímooôík ±˜û|@Z^Ö¯ÃæÓ›aЋ½ã=×÷ +å~­Õ‰ Ã~__LÞµ ]Ü›ßçóê"4ô&Þzë{ìÙó\\zN£qöì|õÕqüõWF²ÃÇ{ÁήÐaÕ«’|ÎFÛ¾­`ÐŽOÍ'˜LpJ%áÊ•8Eãøñ눋Kƒ……<=í0fŒ† ±á/ HÉMÁ—ǿĶ3Û`f`†¥ã–âmç·!ó&uŽ}ðž\¹‚i§NA§%¿Yüüb¸¹}…Aƒ:cóæ7…§QøóÏûX»ö8¢¢ÀÃÃóç{Áѱù|V^¬DüÙlÜÉDBD‚ËgaãÝZèИÀ8Ád NLÌÝ@`àuDG'ÁȨ%<‡]FmññÇÞðôìݤ“ðÔ[hÓMb¦»ŽLû8ÁdÞ³ÏVÞ@p𠤥åÁÆÆÞÞðö¶‡£c‡&}2xÑ…‡°ôðR„Þ …{/w|ñÊÚu¨Ða5á_~‰«?ÿŒ·OŸ†%¿:?΂›Û¼óŽ -#t8 Fbb&6lÁ¾}б£),ðÂøñ}šìÛ-2ïá~pî‡d"'¡^ßÚ ÃPC¡ÃªGŽ¥¥% (,,„¿¿?.^¼‘HgggL™2‰¹¹¹Ø¼y3>ùä£nø8ÁdMŠB¡Ä¥Kq?$tññé°´4†——=¼½{cð`H¥Íãöhø½p|zðSDÄF`¬ÃX¬|e%úZ÷:,AÉ‹Šð“»;L{ôÀÄ;…§Axë­ïqÿ~ Nž\È<œOà×_ÿ„••1>úÈ“'÷o’Çœ„bÜÉÄýà dÞ/‚¾….ºŽ2AO˜Ù6Ÿ7.L: Àܹs‘˜˜ˆ#FÀÜÜãÆC~~>~ùåØÚÚâøñãHJJ‚ ŠŠŠ„»Áã“5i7o&!0°,ÙŒ‰y }Œe //{¸¹õD‹M¿QðÍ`,;¼ —]«ý^ÅŠ +`ge'tX‚‰ˆÀoo¼W¶oG·1ÍûŠÝï¿ÿ…÷ßß…}û>ÀСÍëA•¥¥åaÓ¦ص+­[ëcîÜÑðñÔd_‘vçp:ή|½Ö:èìaŒ®ž&°ph…æø2ŠçÌ &@__ª;_ÉÉÉèÙ³'vî܉r‚YSÄX3—F[¶œ¢ñãÿKíÚ}D]º,¤éÓ¤ýû/RVV¾Ðái•R©¤ÃW“ýr{¿+¦7x“bSb…K0sçÒw}ûRQNŽÐ¡&;»€úôùŒæÍÛ#t(‚ÊÌ̧ի’Í"rt\F߆ЋK…KëòSK(ñ|6)J—––FîîîäççG–––djjJ?üðÍŸ?ŸLMM©mÛ¶´{÷îjËyøð!¹¹¹•öüƒÎŸ?ODDK–,!SSSÒÕÕ%777JHHPMwýúu:t(Éd2êÖ­ùûû«ÆíÞ½›:vìH-Z´ W^y…ÆG6l „„‰DôèÑ£ ±ìß¿ŸN:E $“ÉTèk×®$‘H¨mÛ¶´víZÕ8uñ©×Tp‚Éš¥ääúå—Húç?·’µõ|²¶žO>>ßÑO?EÐÓ§YB‡§5 ¥‚v_ØM=–ö é )½ûó»ô(½âÁ´©+ÈȠͲh‘СfÁ‚½äà°Œ23›ö?®ª’“SH_D=z|BvvKhóæ“TPP,tXS’¯lÙOžuãšN0Y³ghØ“&õäIýP\,ÇÙ³wxß}w«WCÏž–ðò²‡—Wo884OÀIÅR¼íü6||ñ}Ä÷XýÇj|þ=fœ……ž ѦU¡CÔº^“&áÖùøcü+$Ýæñ…¨’9>þx/FŽì‰W^i>}ËñË/‘øöÛ(((Á;ï ÇûQãN°åÅJ$ž+ûªN|x6” B;'C _j ™°ýGõõË>„!‰ “É •JU¿_Ö¸qãpêÔ) :ÆÆÆ5j–,YcccÄÅÅáöíÛèÔ©“júÂÂBŒ3¥¥¥°³+ßÝöï/XXXàÉ“' ¢ 1FFF"!!ÎÎΪa2™ —/_ÆâÅ‹‹Ö­[C©TVŸºqMŠÐ—Pk¨är;w–.=H|N––siàÀÏiÙ²ƒKr¹p· 4­ ¤€üBüÈì#32œmHË,§¬‚¦ÛUà™¬øxúÆÆ†Îùù J½Y·.llQBB†Ð¡Ô‹’9íÚuŽúõ[A;L+V¦´´\¡ÃÒˆèÝ)ôÓð¿hÇ€+tlÆ]Š9˜J…YÂ÷}òä =Ÿ^Ü»wôõõU¿¯^½JÕ–SÙ-r ¥ÒÒRÕQQQäëëK}ûö%"¢-[¶§§g¹ù ¨°°fÍšE~øa¹qîîî´aÃÊÎÎ&===:qâD…XÆGï¾ûn¹[ä‡"333:{ö,Éår""222¢{÷î©Oݸ¦„LÆjèÚµxZ³ærs[C––sÉÎn }ôÑn ‰¦¢"áêš[”K+­$ã©ÍÜ6´&p åå –V]ܺ•ÖwêDiwï ŠÖݹó„:v\@Û¶… ŠÖ•–*hïÞ ää´’¬­çÓ§Ÿhrý«_Ê¡»“)?­DèPÊÑT‚KR©”ÒÓÓ‰ˆèüùó€BCCiÕªUäì쬚688XUæÝ»w©eË–tëÖ-""ÊÏϧ^½zQ@@:tˆÌÍÍéñãÇDDtíÚ5ÒÑÑ¡ 6ÑÂ… ©K—.t÷¹ãÁÑ£GI"‘Pddd¹óÛo¿%WWWÕt‘‘‘$‰èÞ½{jãS7®)ᓱ:¸?…6m:AãÆm +«ÈÆf͘ñ:t™rr …ï¥eægÒÒCK©ÕÌVd1Ï‚¾9ñ • –V(årÚåéI»'M"Rjþ‰Ú†B©TÒ„ ÿ%//¿&uõýE …’¼LÆý‡:t˜G ì¥ÄÄæqµ¶¡ÐT‚©P(ÈÙÙ™:vìH&L gggrvv¦ÐÐPJHH kkk²··'www222¢íÛ·«æõóó#CCCrww§víÚÑ믿N …‚”J%ùúú’±±1¹¹¹‘µµ5y{{«Ìââbú÷¿ÿMºººÔ§O²µµ¥–-[ÒæÍ›‰¨üC>ñññdnnN...äááAÞÞÞÔµkWš0a‚Úøª‹½©à÷`2ö’’“³ãǯãüùû€áûÿÝoÓ¦¦­ްîRsS±&p ¾ û¦¦X6nÞv~RqÓê¾_ÇŽ…ûêÕpœ:Uèp´âçŸÏaÙ²ƒ œ;»vB‡£qD„ÀÀøúë ܽû“'÷ǼyžèÔÉTèÐj-ý¦£DIDATN!îg ùZ>ÆíèÞ,ßMùŒ\.ÇùóçƒVõãÊ’¹pኊŠàèèsóòŸNJJÂÍ›7Ñ®]» ý.oܸääd 4††¿X”ššŠ7n@"‘ oß¾•N999¸páÌÍÍáàà€„„"â.Ö® Â¥K1j”-[[+¡Ãª•Û‡Òpë·T¤ß-„¾¹:»› «— Ìíô¦ùÙs•´´4\ºt©Êñ]»vE·nÝê1"¦Iœ`2VJK8þ>Ž¿Ž  h$'g£S'SŒãoo{ôíÛbqã9›Üz| Ÿù ¯Ä Nƒ°zÒj¸÷r:¬—wæ öO™‚‰;wÂÆÓSèp4"88o¿ýöìy..=„G#.^|ˆµkãܹX¸¸ôÀ¢Ecз¯µÐaÕɵŸ’‘÷¤]F£m_ƒf};œ5-œ`2VÏ”JÂÕ«ñ ¼Žãǯ#.. Fðô´Ã˜12ĦÑ|ÿøò£ËXzx)‚¢ƒ0²çH¬š¸ Cº:¬—rüщ·OŸ†n-^ºÜåæÁÕu † ë†}…ç¥]»–€uëqêT œœºà“OÆÂÉ©‹Ða1Æ*Á &c»}û o 0ð:¢£“`dÔ¶ðö¶Çˆ=Å-Íð{áøôৈˆÀxÇñX5qÚ;Vfd`§«+zŒ/¿:œ—²xñ~;v gÎ|‚Ö­õ…§Îbbž`ݺ@G£OŸX´hLƒ¿[^Ї'²PVŠ3×m{Æ4LÆ„„ U²yéRtu¥puíoo{Œm×à¿:rüÆq|vä3\¿ Ÿ>X1aº[t:¬Z‹9xÇçÌÁ6ÚÏH^¸ð“&mÂÿ·wçQU×ëÇßÌŠ€ 8#rUÐÐôâÀ¸qJ:y2çty,ÓÓA’ZìbaáÖÉU»ÉuÎ[çjnfPÒ“`8 æ¢lF6{ß?8ÒõæÌ†½Ñçõ—Âï÷]‹Ïúý~ßçÙ°a&ÁÁƒõ]ÎSÉÍ-bݺ8öí;MÿþÝY¶,ÿþB=¹s»ŽKÉ*òUÜ8UŽiœ}mÑKߥ Ñâ$` a Š‹+ˆÏD©ÌäС‹h4^|Ñ•  O‚‚ÜéÒ¥½¾K¼/­VË?Nþƒ÷xŸ‹…™;j.+&®À±CëzGîû3(¿zµUŽ‘¬­Uãï¿;¶o_¨ïržX~þ-¢£ãÙ½û½{w&4TÁ„ ž:1ØÎï¹EŽò6×OV`baD¯Ñíqñ³Ãa” ¦òR¥x>IÀ¢(/¯&%%›ýû3HMͦ²²–ÁƒQ(<?ÞgçNú.ñwê5õlûi{#¸^z7ƼÁò ËélÝ:ú½•^¹Âùú2láBF††ê»œ'²v­’šú.vú.ç±]»¦âÓOصë8Xº4€àà!.!43c\üìèé-¡R€)D«SS£æàÁó(•™$$dqûv%ýúukìµéáá ïïQ«®åëô¯Y»Šòêr–ø.!,0 [K[}—öH'¾þšƒ«V1;!Ž}ZÇ£þóço°ŽððI,X0Fßå<–¢¢r>ÿ<‰­[й³5!!Lê…©©5!Z+ ˜B´bõõŽËC©Ì$..“«WKèÙ³CcØ6ÌÃø%}§îŸ'Κø5Ôkê c‰ï¬, wÒ‘¶¾ží“'cljÊk»wcdl?ËÑh´¼ôÒßÐh4ìÝû¶ÁüÛ?ÈíÛ•|ñE 11‡°±iËŸÿìÇÌ™/L…š25—SJ1ic„«¢ƒ¾Ë¢U‘€)Ä3B«Õ’™ù+û÷g Tfrñb!ööV¸䉷÷¿an®ÿ¥wJ‰NŒ&:!švíX>~9 Ç,ÄÂÔBߥÝ×Íìl¶*Œ‹ˆà…×_×w9“NDÄÄÅ-ÅÍÍpO.—•ÝaãÆlܘ†……‹û2gÎ(Ú´1ÓwiÔ”Õ“Ÿ¦"/±„«ÇË126¢ÿíbXO„0t0…xFåæ¡Tf²gÎ\ÁÊÊ‚qãÜ?Þ7¬¬ôèŠ+ЉRFñEêt²îÄŠ‰+˜;j®AÎ9OŠâTL ¯§¥aÝÍ0'0]»¦bìØ(æÍóæ½÷&軜ûª¬¬á›oÒùòËTÞ|sóç{Ó®~ÿ/jê´äÄß&/AÅÕãeÃH\üìè5¦=f–†qGUˆÖD¦Ïë×UÄÅ5œHÿé§\LLŒñöîCPzí‘xUu•üM‡6álïÌ/}ÀÔ¡S jιº¦†Í~~tpq!xóf}—s_sæü'¹¹E$'‡aaaX!½ººŽÍ›³aC2µµj,ßþ4›¶ú. ­FËΉYtìkÙ*ǶǼ„J!šB¦Ï™’’J΢TfrðàyêêêñòrþWû#zôÐÏ©ãÜ›¹Dì`DZx8xðáK2ià$½Ôr?WŽe×Ô©LúòKúN2œºöî=Å›onåûïßâÅ{뻜FuuõlÛv”¿ý-‰òò;¼þº7‹ÃÎÎðš¾kêµ›öiu!Z ˜B<ǪªjIIÉF©Ì 99›²²;xzö$(¨áPŸ>][¼¦³×βbÏ öœÞ×DN‰Ä§ŸO‹×q? aaä$$0/-6¶†q ^¥ªb̘(ÜY»öú.µZî]Çøì³DnÞ,gÖ¬‘,YâG§N-?z³®ªžü¥Øô´ ³»á[!žU0…@ÃݦÇ/² Y•Ó»wçÆ^›ƒõlÑF×ÿ¼üOþºû¯$þ’ˆŸ›«‚WáåìÕbûßOui)1cÇâšÈÈ?0{öÈÛW«Õ’”ô kÖ(ÉξƄ Yº4¾}›÷0˜ºZÕÃetØK{ý7cB<šL!„NTVÖšzޏ¸L’“³)-­bÀ€(î( ÐCç{ÖªkùûÁ¿óÑþ¨¨® Ä?„¥þK[fιVËΗ_F]]ÍÌÄȤeîœÕ×k?~=mÛš³{÷â;x•œœÍºuJ22~E¡pçwÍ:-H}GCÁ¡R.%©(8\J}ŸUN¸è§–âÉHÀBè\]]=?ý”‹R™A|üY®_W5ÎH tgøpÎÉ®¬©äó”ÏY·###Âa,·˜vÍÛ–æÖÅ‹l àßß}—ao¼Ñ¬{Ýõå—©¬^½Ÿ¤¤e¸º6ÿ#éγn’'òñ÷À;ï(ððhžWj+ë)Ho•¿i8¨Óm¨Î>v8ùØÒ¶ƒ¼S)Dk!SѬ´Z-¿¢Tf—Å… 7èСþþP(<3¦¯ÎfP«ªTD'F³>q=Vm¬æœ^ˆ¹ióB:úé§ß°¹ÉÉ´ïÕ«Ùö†÷_}|Ö°x±/!!ͺסCY·.ŽãÇóðñqãw 䨬{^JV‘²ü=¼¬qòµÅi¬-ml%T ÑIÀB´¨K—nþëP'O^ÆÂÂŒ±cû¢Pxàç×_'S^n–ßä£ýñÕ¯èbÓ…ˆÉÌ1³Yæœ××Õ±U¡ ]çÎLݱšé‘µV«åµ×þNQQññ¡˜™5Ï#ùcÇòX»VÉ‘#9x{÷!,,ˆ!Cœše¯ÿ¯¾V‹ºZƒ…Ô¢µ“€)„Л¢¢r²ˆ‹ËäС‹h4FŒèM``Ã{›M[yåö>üñCbÇàÚÙ••/­dê©:oñÚ‰ìœ2Åúõ xå®}×wßý“üðß›%ðýüó%Ö®#=ý#Gº„——‹ÎÖ¿s[MÁÁRúLB4 ˜BƒPQQÓ8¶255›²²j<<P(œ 6èdÍ»-ÚÊñãy¤¥½‡••…NÖÌȸÂ'ŸÄ“˜x–!CœX¶LÁèÑ}›¼nea—’K¸”¢¢ðL¦mLpô¶ÁÙ׎ž£l0m#·/…xHÀB4FËéÓ(•™ÄÇg’“S„½½þþî(îŒÝ ‹'{·òØ¥c„ï'); ÿþþ¬ ^Å0§aM®5/9™ÿ™=›—·nÅÅǧÉëAC{ Y³6²eËüüú7y½ììk¬Y£$!á,ö$4T¯¯›*mðó×8ûß7qôn‹¯#­11—P)ÄóF¦¢UÉÉ)".®a’ЩS´mk† …¾¾n´ooy߯;vì÷|,ëvßæ|ËÅÒ‹ ë4ŒýÐÞ¼iSqŠ7o¦æòeº¿÷FM»ÛXSSÏÇŸÆÙÙš9sú4i­òò:¾ÿ>3gnÓ£‡%ãÇ;Ò¿¿í=ï£:::2|øð&íS[Q‰¹1&æ-ÓŸSa˜$` !Z­ÂÂRâãÏ¢TfpäH#Fônì·Ù½ûo ×g̘ÁŽ;î¿#à$õM«ÉÊØ˜mÛr´²MÓ–Œh×n wî\@£©jÚJF&ØÙM¢ª*‹êêœû^3}út¶oßþÀ5T—«)ήÂ5¨C“jB<û$` !ž eeÕ¤¤üB\\&))ÙTVÖâéé@P'î|ðA(………„‡‡ë»TƒI—.]~0Krï—¤âR²Š’Ü;´ëbδ½06•;”Bˆ“¶Bˆg‚M¦LÌ”)ƒ©­U“ž~‘øøL¾ùæ QQ±´mÛGÇb}—Ù*ܺp‡KÉ%ä%ª(ͯ¦]g3œ|lõnOº¾`%m†„$SñÌ177Å×× __7¢¢¦ròäeBB>ÆÄ¤‰Ï¿ŸÇ?»Šêr5ξ¶8ÿG/:{´“P)„x"0…Ï4cc#†uÆÑ±’ÂB}WÓ:ø|ì„…µ)ÈSp!ÄS’€)„â6ò«AÑ4òÐC!„Bè”L!„B¡S0…âRSS9sæÌ#¯«®®~hÿÈÇU^^ηß~Ûäu>̹sçt²–B<) ˜Bñ üüóϼ®ªªŠM›65y¿ÊÊJbccÿ¾víZ®_¿þTk¥¥¥‘••Õäš„âiHÀBѵkW¶nÝÚø÷ãÇSYY©ÇŠ„âéHÀBˆÇPVVFhh(IIILŸ>…BATTÍo!cccyõÕWQ(¬^½š»ƒÒòòòX¼x1Ìš5‹äädT*Ë–-#!!‰'rêÔ)–/_ÀÊ•+Q©T¬\¹’ŒŒŒ‡®’’´iÓ $<<\‚©B¯$` !ÄcP«ÕdddpæÌ¶lÙBLL ‡æäÉ“h4Î;ÇöíÛÙ´iéééœ>}šêêjÂÂÂðóó#66–¥K—ÍÙ³g©««#33“C‡±zõj:uêÄ©S§ ¥}ûö„††Ò¿ÿ‡®“››KTTo½õûöícРA=zTŸ?.!ÄsN¦B<&µZÍܹs155¥[·n¸¸¸Üs§pþüù˜ššÒ½{wœœœ¨¬¬äèÑ£tèÐ)S¦`ffÆ /¼€B¡ -- €ššÞ~ûm €©éoý'­¬¬022ÂÊÊ SSÓ‡®“””ÄèÑ£ñööÆÜÜœW^y—–þñ!D#é¦+„O cÇŽ62úmÔ±±1¶¶¶¿ûÜ7(((`Ú´iŸ«©©aĈ×ýß5äaë¨Õjœœœî¹¾W¯^Oö !„IÀBˆfdii‰§§'kÖ¬iüXMM FFF”––ÞRŸv¯¾úŠ’’’{®/--ÕÍ7 „OA‘ !D32däçç ¡páÂ…¤§§ëlÁƒ“’’­[·€†Ã@w !„>ÈL!„hFÌŸ?ŸE‹ѯ_? pwwÇÇLJâââ‡~­Ÿ}öK–,¡OŸ>\àÀÌ;WWW®]»Æ!CZâÛBˆû2ÒÞí£!„ϰ3fPXXHxx¸^ö/..æòåËØÛÛÿî}É»´Z-åååØØØ mŒrrrèÛ·/ÖÖÖ\'//’’ÜÜܰ´´|¢ú"##éÒ¥‹N& !„ÜÁBˆ`oo½½ýC¯122j —¶¶¶ :ô±×‘“ãBC!ï` !„B’€)„B!tJ¦B!„Ð) ˜B!„B§$` !„B’€)„B!tJ¦B!„Ð) ˜B!„B§$` !„B’I>BˆçFrr2ÉÉÉú.Ã`MŸ>]ß%!ž2‹\ñ\8vìú.à9::2|øp}—!„xHÀB!„:%ï` !„B’€)„B!tJ¦B!„ЩÿÃM3›1I€IEND®B`‚bm3.7.0/doc/html/a00211.png0000644000175000017500000002274611365042646013255 0ustar tlktlk‰PNG  IHDRà]}÷µŠbKGDÿÿÿ ½§“ IDATxœíÝ{Pgº?ðï0#£ Ãp0, T¼­x‰ˆ< QIX×Ñhˆ§”õ¬ÄŠVv]LÌÉe ±Ð-•<(Ù 7œU“ F Ȫ‰—Qt™Ñ@„džßüèe€ä¢Éó©ê’î~/O¿\»ßîcŒ16¨ì†:Æcì׈0cŒ1683ÆcC@2Ô0Æeeeøá‡†: ÆÕ²eˤ]NÀŒ±^+((ÀŠ+†: ÆÕ@Ý«Ì ˜1f3~x‚ýbcc±råJa=33¯¼ò æÏŸOOOÀêÕ«-^-Y¿~=f̘ƒB$6lØäää **Ê–C~dð0clÀ˜L&ÄÇÇC&“A¡P 11P]]ððpìØ±pwwÇ'Ÿ|‚Í›7ÃÝÝJ¥™™™B;Û·oǪU«,®gffÂÛÛ#FŒÀóÏ?ÚÚZaßÅ‹1wî\ >&L0;óÚºu+ÜÝÝ!•J±`ÁhµÚëéõz<ýôÓHOO‡\.G~~>–,Y"Ô;tè|}}!‘H T*±}ûö.ãrçΡηß~‹)S¦˜-±±±6ÇñóÏ?wû=hjj²ö-êÂÍÍ R©vvvX¾|9:d¶?++ Ë—/·©ÍÎ^|ñELœ8ŸþyeµZ-rss‘””$$_=z4>þøcÈåò.ul=æ!CŒ1ÖKÔÛ?_}õ‰D"zíµ×èþýûtêÔ)rrr"•JE:Žìììè7Þ “ÉD»wï&ôþûï“Éd¢>ø€|}}…¶>L)))Ý®ÿøã$•J)++‹iç΀vîÜIõõõ¤T*é£>"£ÑHyyy$“Éèûï¿§£G’‡‡©Õjª««£ÈÈHŠ‹‹#"²ZO£ÑЈ#(**Š éêÕ«äèèHDDuuu$•J);;›ŒF#}÷ÝwdggGz½ž4 I¥R""ºyó¦P§¾¾žÔj5©Õjºpá7ŽmŽ£©©ÉlüoܸA›6m"???‹ß#©TJúÓŸ(55•öîÝK7n$___R«ÕDDôÏþ“$ UVVÑ?ü@T__ß«Ÿ""???:pà@—íëׯ§ØØX"" ¤5kÖPZZšÙrîÜ9ÊÎÎ&OOÏ^÷GD”••EÓ§O§O?ý”ŒF£Mu;²åç½/83ÆzÍÖìììLÍÍͶ„„ŠŠŠ"NG„?ä×®]#‰DB---DDT\\L£GîU?¯¿þ:-_¾ÜlÛ¤I“hçΔ™™IÓ¦M3ÛO7n¤œœòðð K—.Q[²3 DDVëi4@åååDdžLF# uÚ“®Z­¶˜€;ŠŽŽ6;[â "2™LtäÈZ´hùûûSrr2UWW[;©TJ¡¡¡´téRZºt)ýçþ'yzzÒßÿþw³±Ü½{·0Ö/¾ø¢Åöºc)oÚ´I8ÖÀÀ@š:u*=÷ÜsfKZZ¥§§“¿¿¿M}9s†^zé%;v,mÙ²…ÊÊÊlnc 0Ï3ÆŒ† &¬Oœ8yyyº££#€¶»c¥R)$‰°Þ[ååå 4Û¸uë®\¹oooa_cc#ž}öY,^¼ÇÇœ9s —˱páB$$$@.—[­vvvðððè‹T*EQQ¶lÙ‚ëׯÃÅÅ&“©WÇñöÛo£´´'Ož¶ÙGAAÖ®]‹€€lܸaaa½ÇwÞyÇløàÁƒX½z5ªªª`gg‡•+WâСCøÃþ€¬¬,ìØ±£WÇÓ“òòr(•Ja=>>¾Û9௿þ:DÔåx ¡ÑhÝ¥^pp0‚ƒƒQUU…ÔÔT„††"((_~ùe¿Äß83ÆLû]¬íôz=\\\úµggç.°´÷+“É0oÞ<=zTØ×ØØ‘H"Brr2’““Q\\Œ””,]ºÅÅÅVëUUUYLl999HHH@VVæÌ™±XÜíeg_|ñRSSñÃ?`øðáÂv[â6l¤R)*++q÷î]ë±ì¬Y³ÐÜÜŒãÇ#,,Ìl_bb"”Je· ¸]kk+ˆ‰#GŽ|èØûß„Å0·nÝBnn.€¶ç`÷îÝ+œ½Ù¢¨¨ÇŽëv=,, ™™™Ðét€ .g‘ááá8uê._¾ hhhÀôéÓ‘¤¤$„††B"‘`æÌ™Xµj***z¬gV«E@@æÍ›±XŒÓ§OwyŒ§³’’ÄÅÅ!;;»ËYµ-q£¤¤ï½÷²²²àëë‹mÛ¶¡¼¼Üjÿõõõ¨©©AMM ´Z-Þ}÷]Lœ8QøÃرc‚uëÖaéÒ¥°··7«Ÿ““ƒ .Xí£¡¡5550 8þ<"##€E‹u)Óq©­­…L&Æ °víZ¨Õj¡|nn.Ž9bvÃZG'Nœ@tt4fÏž "BAAÒÓÓ­Æ9èìâ6cìÇÖ9àY³fÑøñã)$$„ÆŒCÔÜÜ,Ì·S«Õfs¢%%%fsÀ¯¾ú*w»n2™hÅŠ$—Ë)44”¼¼¼(""‚vîÜIDDÉÉÉ$“É(,,Œ<==iÙ²eÔÚÚJ†¼¼¼hÒ¤IFNNN´oß>¡kõÄb±P®ã|nYY) ¡ððpŠˆˆ ŠŒŒ´8Gb±˜…¥ãMG½£³ŠŠ zóÍ7)00Ðb©TJ„E"‘ÐܹséòåËfåöïßOè›o¾éÒÆo~óÚ¶m›Å>üüüÌúpuu¥5kÖóíDmsÀË´/íãÕÔÔDëÖ­#{{{š2e ƒƒíÚµ«Û>U*…„„J¥î+苞=ÆO13ÆUû”ÛògÃh4âôéÓprr´iÓ,¶‹/âÎ;˜9s&d2™Ù¾òòrüôÓOðôô4›/njjÂÙ³ga4…BÑ«z™L& ¸ººh»¼zöìY( Lž<¥¥¥˜?¾Å:=éM–´¶¶èÛ¢ÊÊÊ™™9(oõª¬¬ÄÅ‹!‹1uêÔ.ßçvýuÌ}ùy·'`ÆX¯ ô$öøyçwŸ¡¥ß ôÏ;ß„Åc¬ÏÞxã¡á±Å7a1ÆcC€0cŒ1683Æzåvím\«½ŒêHûeà9`Æ@þ•|$MBúšt(F)z®ðhimÁ­ê[(­,Åʸ¡¿ÒªRáßûM÷Û zmœŒýRpf¬Ÿ˜È„œ’¼û¬PQSñÈ$àÚÆZh Z”ÊQQ[²ê2h Z!Éj ´šZÎÎðQøàI·'±8h1|ÜÛ¾¾túâ÷Çñ‘0öË`1¿ð ƒc¼øøx³wæ¶k~ÐŒgà¯ÿø+nVÞ„Ý¿gvtµ:LybÊ€Æel1¢ò^%*j+ «ÑAcР¢¦å5åдÐÕèPv· Í BÃFà —'0Öy,ƹC˜˜p}>pvèþ³^uź¶W$0ƚŬR©Ë–-´`{T©T*<ÿüófÛîïaïw{ñÁ±P}¿ €@ÂY¤ØN ]Îæ¾ZM­¨¼W‰ªú*èïéq»ö6ªê«Py¯·ën£ò^¥°Ü®»{Æ{fõ£PÊ•xÂù ŒWŒGè„PŒu ¹Æ:…§³§ÅËfÌãÜÆaœÛ8¬š½ @ÛÛ¡NªOâ”ú¾ùé\Ó_`/¶GóƒfèïéADõegÆØÀè—|ýúuàå—_îælrøða(•JÌœ9sÀû2 HMMíñs/{[®¿ åø÷Öž={PUU í777DDD˜]ÎÜ·oôz}—ºãÆÃŠ+ÈÈÈÀ¹sç ‰0wî\ÄÄÄ èçZ3Æi ^˜ñ^˜Ñöܼ¡Á€uNªOâOÿoÛcCõ•ÌË8cŽ~¹}åÊìÙ³§?š²™J¥Baaá ôU[[‹ýû÷÷[¹þ2”ãß[~ø!òóó¡ÕjQVV•J???>2™ …‰‰‰€êêj„‡‡cÇŽððð€»»;>ùälÞ¼îîîP*•ÈÌÌÚÙ¾};V­Zeq=33ÞÞÞ1bžþyÔÖÖ û.^¼ˆ¹sçbøðá˜0a‚ÙÙÕÖ­[áîî©TŠ @«ÕöXO¯×ãé§ŸFzz:är9òóó±dɡޡC‡àëë ‰D¥R‰íÛ·îܹ#”ûöÛo1eʳ%66Öæ¾þùç>¿µ8û:.–455YÝßÙ‹/¾ˆ‰'âóÏ?ﱬV«Enn.’’’ÌæSG?þr¹ü¡ãaŒ±AE ŒŒ K»Í|õÕW$‰èµ×^£û÷ïÓ©S§ÈÉɉT*ét:²³³£7ÞxƒL&íÞ½›Ðûï¿O&“‰>øàòõõÚ:|ø0¥¤¤t»þã?’T*¥¬¬,jll¤;wÚ¹s'Õ×דR©¤>úˆŒF#ååå‘L&£ï¿ÿžŽ=J¤V«©®®Ž"##)..ŽˆÈj=FC#FŒ ¨¨(*,,¤«W¯’££#ÕÕÕ‘T*¥ììl2ôÝwß‘éõzºyó¦P®¾¾žÔj5©Õjºpá7Žm©©Oão-ξŽKg7nÜ M›6‘ŸŸŸÅýüüèÀ]¶¯_¿žbcc‰ˆ(00Ö¬YCiiif˹sç(;;›<==-¶ß¬¬,š>}:}úé§d4mªÛ™-¿Œ1Öý–€©¹¹YØ–@QQQ¤ÓéÕ××ѵk×H"‘PKK ÓèÑ£{ÕÏ믿NË—/7Û6iÒ$Ú¹s'effÒ´iÓÌöÅÇÇÓÆ)''‡<<<èÒ¥KDÔ–\ ‘Õz†Pyy9‘Yb5TTT$ÔÑh4$•JI­V›•ë(::Ú,~[ú¶ÆÚø[‹³¯ãBDd2™èÈ‘#´hÑ"ò÷÷§äädª®®¶£¥¼iÓ&aLiêÔ©ôÜsÏ™-iii”žžNþþþ=ŽEggΜ¡—^z‰ÆŽK[¶l¡²²2›Û âÌëý6ìããƒaÆ ë'ND^^ž°îèØ6&‰ •J!‘H„õÞ*//G`` Ù¶€€À­[·påÊx{{ ûñì³ÏbñâÅ8~ü8æÌ™¹\Ž… "!!r¹Üj=°³³ƒ‡‡G—X¤R)ŠŠŠ°eË\¿~...0™Lcûí·QZZŠ“'O ÛúÚww,¿µ8û:.X»v-°qãF„……õù1›òòr(•Ja=>>¾Û9௿þ:®ÛGz ¡ÑhÝ¥^pp0‚ƒƒQUU…ÔÔT„††"((_~ùeŸâeŒ±þÒo ¸ýNÕvz½...ýÕ<ÀÙÙ¹Ëc*íýÊd2Ì›7Gö566B$ˆœœŒääd#%%K—.Eqq±ÕzUUUKNN••…9sæ@,w; _|ñRSSñÃ?`øðáÂö¾öÝKão-ξŽË?ÿùOH¥RTVVâîÝ»xðàYòï­ºº:;v Ÿ}öYegÍš…ææf?~aaafû¡T*»MÀíZ[[ADH$9r¤Í±2ÆXë·›°nݺ…ÜÜ\À½{÷°wï^áLÎEEE8vìX·ëaaaÈÌÌ„N×öo.\Î(ÃÃÃqêÔ)\¾|ÐÐЀéÓ§#;;III …D"ÁÌ™3±jÕ*TTTôXÏ­V‹€€Ì›7b±§OŸF]]]—r%%%ˆ‹‹Cvvv—³Ù¾öÝKão-ξŽKpp0JJJðÞ{ï!++ ¾¾¾Ø¶mÊËË­ÆØÐЀšš œ?‘‘‘À¢E‹º”é¸ÔÖÖB&“aÆ X»v-ÔjµP>77GŽ1»±­£'N ::³gÏ¡  ééé6/cŒõ;Kצaãð¬Y³hüøñBcÆŒ¡ˆˆjnnæ€Û©Õj³ùÑ’’³9àW_}•‚ƒƒ»]7™L´bÅ ’ËåJ^^^A;wî$"¢ääd’ÉdFžžž´lÙ2jmm%FC^^^4iÒ$ #'''Ú·oŸÐ‡µzb±X(×qn·¬¬Œ …„„Pxx8EDDEFFš•‹‹‹#±XLŽŽŽÂÒñf¢ÞöÝ×ñ·g_Ç¥³ŠŠ zóÍ7)00ÐbŒ~~~„¶í#äêêJkÖ¬æœ‰Úæ€;–i_¤R)555ѺuëÈÞÞž¦L™Bäàà@»víê¶O•JE!!!¤R©„{úÊ–ßÆë Q÷o0‰D6°ÑhÄéÓ§áää„iÓ¦=Üÿ ¬¸xñ"îܹƒ™3gB&“™í+//ÇO?ýOOO³ù⦦&œ={F£AAAP(½ª×‘Éd‚Á`€««+€¶K¨gÏž…B¡ÀäÉ“¡ÑhPZZŠy󿙕ëIoúî Kão)Îùóç÷˸´kmm”7RUVVââÅ‹‹Å˜:uj—Ÿˆ§/¿Œ1fM¿&`60t:Ù mMš4 AAAƒѯÿ>0Æú¿ ë10lØ0¸¹¹YÜïàà0ˆÑ0Æëœ€nnnxæ™g†: Æcýˆ?˜±~öÀôgožEÒÑ$D~‰Ûµ·‡:$ÆØ#ˆÏ€{HÆ#ÎÞ<‹ï®}‡ü«ù8sã […ý.qýû<PÃÉcœÆÀ}”;ÜG¹Cé¤lûz¤;Æ8‹£ œF8Aî ‡³ƒó€Ê+züLgÆØÀè.Ÿò0c½Ñ,öZŒO7Šgà¯ÿø+nVÞ„È­ÔÚm± bŽÏèïéQy¯eÕe8wó*ë+Qy¯­¦®uF8 ‹ÜAn¶îäÐö¯³ƒ³ùöNpqtû(wˆí,¿ýkذaÈÈÈè·aaŒõì…^èv»Õ¬R©úô)7ŒýRÙKì±æ©5ˆ‹œ’¼û¬±Z˜•5‘ ÏL|ÿ½à¿»m‹ˆPY_‰š†Ô4Ô ¶±¶íëÆÔ6Ô¶­7¶m¯m¨…Ö mûºC¹Îgáv";áL[1J!œm+F)P*)ÅÒeK±lÙ²ÆXïYMÀ999ÈÉɬX{l؉ìð»i¿Ãï¦ýùWòñÞ?ÞCÞå< CKk  ¥µJ'¥Å6D"£PŒRX,Ó“ºÆ:!Qß½·koCO}·ënC_§GiU)t5:TØWàÉOö¹/ÆXÿ²˜€{šßbŒµYà¿ üàGÍHüG"¾(ú&2<ä=Ô~8²2ÈFÈðžè±ìŠ+4ƘmøMXŒõ“)OLÁçë>‡ú=5VÎ^ `à0cìñÅ ˜±~ö¤û“8ðÊÜÙqÇê%hÆØ¯ßÍØy˜¹]ÆØ/'`ÆXׯ_GAA^~ùå¡¥W RSSñúë¯[-wïÞ=ìÚµ þóŸ)²Á×Û±xœìÙ³UUUÚn^tssCDD¼¼¼„2ûöíƒ^¯ïRwܸqÂýÈÈÈÀ¹sç ‰0wî\ÄÄÄ@,¶üèÞ@âKÐŒ±.®\¹‚={ö u½V[[‹ýû÷÷ªÜ[o½õÐýý×ýnÞ¼ùÐí „Îc1P±æ|øá‡ÈÏχV«EYYT*üüüÌ^,“’’‚¼¼fŒuËd2!>>2™ …‰‰‰€êêj„‡‡cÇŽððð€»»;>ùälÞ¼îîîP*•ÈÌÌÚÙ¾};V­Zeq}ëÖ­pww‡T*Å‚  Õj…}/^Äܹs1|øpL˜0A8ãÑëõxúé§‘žž¹\Žüü|,Y²D¨wèÐ!øúúB"‘@©Tbûöí6¿¥¸¢££¡×ëS§Nu‰å矶·µØlWKîܹ#ŒEçXmÓŸþÙb¬Ýµ{âÄ A*•Âß߇¶Ønwšššlúþ¼øâ‹˜8q">ÿüóËjµZäææ"))IH¾0zôh|üñÇËåOŸcìW!&&†bbbzUö«¯¾"‘HD¯½öÝ¿ŸN:ENNN¤R©H§Ó‘½ñÆd2™h÷îÝ€Þÿ}2™LôÁ¯¯¯ÐÖáÇ)%%¥Ûõ£G’‡‡©Õjª««£ÈÈHŠ‹‹#"¢úúzR*•ôÑG‘Ñh¤¼¼<’Édôý÷ß“F£¡#FPTTÒÕ«WÉÑÑ‘ˆˆêêêH*•Rvv6Fúî»ïÈÎÎŽôz=i4’J¥=¿µ¸ )•JÊÏÏ§æææ.±Ü½{×bÜÖb³u\-¹yó¦0cµeL«ªª,ÆÚ¹ÝÛ·oÓ¨Q£(--ŒF#åä䃃]¹r¥K»MMMfñÞ¸qƒ6mÚD~~~ÉÏÏ8Ðeûúõë)66–ˆˆiÍš5”––f¶œ;w޲³³ÉÓӳDZë(++‹¦OŸNŸ~ú)F›êv€222ºn¨Vc [°³³3577 Û(**Št: úúz""ºvíI$jii!"¢ââb=zt¯úÉÉÉ!ºtéµ%]ƒÁ@DD™™™4mÚ4³òñññ´qãFÒh4€ÊËˉÈ<éF***ê´']µZÝël-.""OOO*))Ú¸­ÅÖ_ãÚq,:Çj˘Z‹µs»{ö졳vÿûßÓÿüÏÿti—ˆÈd2Ñ‘#GhÑ¢EäïïOÉÉÉT]]mñ˜,%àM›6Ñòåˉ¨-O:•>†µ%IDATž{î9³%--ÒÓÓÉß߿DZëìÌ™3ôÒK/ÑØ±ciË–-TVVfsD–0Ï3ƺåããcö.ø‰'"//OXwttÐvWªT*…D"Ö{kñâÅ8~ü8æÌ™¹\Ž… "!!r¹·nÝ•+Wàíí-”ollijÏ> mŸ4åÑõE'R©EEEزe ®_¿˜L&›ŽÝZ\Ý鋵¸{[Œ«%¶Œ©-ã¨Õj1a³m~~~Ðh4]Ú-((ÀÚµk€7",,¬ÏÇV^^¥òßÏÚÇÇÇw;üõ×_C§ÓˆºôUXXFƒèèè.õ‚ƒƒŒªª*¤¦¦"44AAAøòË/ûogœ€cÝj¿{´^¯‡‹‹K¿öADHNNFrr2Š‹‹‘’’‚¥K—¢¸¸2™ óæÍÃÑ£G…ò‰D¨ªª²øG;'' ÈÊÊœ9s ‹-&ξÄÕŽ±X‹»?b{¶Œ©-±Êd2\ºtÉl[uu5œœœ˜Ï°aà •JQYY‰»wïâÁƒ}úПºº:;v Ÿ}öYegÍš…ææf?~aaafû¡T*»MÀíZ[[ADH$9r¤Í±ZÂ7a1ƺuëÖ-äææh{~vï޽™’-ŠŠŠpìØ±nד’’ ‰D‚™3gbÕªU¨¨¨„‡‡ãÔ©S¸|ù2 ¡¡Ó§OGvv¶Õþ´Z-0oÞ<ˆÅbœ>}uuu6Ål-®žX‹»?b{¶Œ©-±.\¸ß|ó JKK´Ý–••…ððð.eƒƒƒQRR‚÷Þ{YYYðõõŶmÛP^^n5ö††ÔÔÔÀ`0àüù󈌌D@@-ZÔ¥LÇ¥¶¶2™ 6lÀÚµk¡V«…ò¹¹¹8räbcc»íóĉˆŽŽÆìÙ³AD(((@zzºÕ8mÒ§ ÚŒ±ÇŽ­sÀ³fÍ¢ñãÇSHH3†"""¨¹¹Y˜«l§V«ÍæKJJÌæ*_}õU îv]£Ñ——Mš4‰ÂÂÂÈÉɉöíÛ'”MNN&™LFaaaäééIË–-£ÖÖVÒh4$‹…rç=ËÊÊH¡PPHH…‡‡SDDùøøPddd¯ç€{ŠkêÔ©4wî\:þ|—X¬Åm-6[ÇÕ’ÎsÀcµeL­ÅÚ]»o¾ù&ÉårZ¸p!¹ººÒþða,;OGôæ›oR`` Å2~~~@X\]]iÍš5fóòfeÚ—öïwSS­[·ŽìííiÊ”)@´k×®nûT©TB*•J˜‡ï+X˜ýÿŒ±_¸ö·eddôºŽÑhÄéÓ§áää„iÓ¦ H\MMM8{ö,ŒF#‚‚‚ P˜¿Â³¼¼?ýô<==Øm&“ ƒ®®®Ú.Ož={ …“'O†F£Aii)æÏŸß/qUVV¢¤¤¿ýíoáììÜm}Kq÷GlÖt‹îbí͘ökwíÞºu ×®]ƒ··w—9áž´¶¶Ê©*++qñâEˆÅbL:2™lÀã‰DÈÈÈ@LLŒùvNÀŒý:ô%ÿRét:³Ê:›4i‚‚‚1¢Þ{œcÿµ²”€ù&,ÆØ¯Î°aÃàææfq¿ƒƒÃ Fc›Ç9vfŽ0cìWÇÍÍ Ï<óÌP‡Ñ'sìÌßÍcŒ NÀŒ1ÆØàÌcŒ NÀŒ1ÆØàÌcŒ NÀŒ1ÆØàÌcŒ ~˜±_‘ƒ¢¥¥e¨Ã`Œ0c¿ÁÁÁœ|Ë–-ƒ——W—íü.hÆclð0cŒ1683ÆcC€0cŒ16þ¬’ü+BáIEND®B`‚bm3.7.0/doc/html/a00157.md50000644000175000017500000000004011365042637013146 0ustar tlktlk38a6759ff0b5a8f3e84cdc6e78013c74bm3.7.0/doc/html/tab_r.gif0000644000175000017500000000503111365042626013503 0ustar tlktlkGIF89a,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ,,ÿ@’pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬v •h<¬pkL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~ÏwVa+‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ “*)^,*ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂö)'ÆÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæÚ¥(" ðñòóôõö÷øùúûüýþÿ H° ÁƒòK"ƒRHœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\éÅu&@€ Á²¦Í›8sêÜɳ§Oÿ–(±€DУH“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯S84± ‰hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€Ó} âDÌf(^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹m¹ðCÄHœXͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N÷ÃJ” Á®¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾úñ€ dÇ@€‚‚L¤"ÉÈF:ò‘Œ¤$9† (8…&ÉÉNzò“  ¥(G©FB^²!˨)WÉÊVºò•°l¤)1™ wÄò–¸Ì¥.wÊYºäƒà¥0‡IÌbó¾|ÉHpÌf:ó™Ðìe pJ±ˆ€}Ȧ6·ÉÍnzó›à §8û0Â%"¸æ8×ÉÎvºóðŒ§<ÉPÎQ`ò%×$€>÷ÉÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡¨D'ZPKF Ö¼&16ÊÑŽzô£ ©HGJRb ÷Lç5ÏÁÒ–ºô¥ÿ0©LgJÓšš#(e>¯‰Óžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕª&5;%U·ÊÕ®zõ«` «XÇJV«ÂC§‹ÑjY×ÊÖ¶ºõ­p«\ŠU´À¦xÍ«^÷Ê×¾úõ¯ÐÀi)$‚”ô°ˆM¬bËØÆ:vˆ, ಘͬf7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­*$ÛSPô¶¸Í­nwËÛÞúö·ÀÅm +„â¸ÈM®r—ËÜæ:÷¹ÐE®?±9ÏêZ÷ºØÍ®v¿9€î"‚ºÛ ¯xÇKÞòb—™ÑLÿ¯z×Ë^A¢·½ð¯|ç†÷Ò÷¾øÍ¯0í«ßþú÷¿¡ä/€Là»×ÀN°‚ï(à;øÁ n0„'LaýJ¸ÂÎ0{/¬á{ؘþ°ˆG|Ë“øÄ(¥‰SÌâCrÅ.ޱŒ ãÛøÆv¬1ŽwÌc6ê¸Ç@ÞñƒLd¹ÈHNñ‘“Ìd/¹ÉPÎð“£LeO¹ÊXŽp–·|â+sùËýõ2˜ÇL_1“ùÌí53š×M5³ùÍÇt3œç¼_:ÛÙÂwÎs™õÌgøÊ¹Ï€p ýÌ?úÐ/F´¢ë¼èFãÒÐŽŽt!-éJã‘Ò–Îô1­éN»‘ÓžuÿA-êP“ºÔ>5ª3­êUWºÕ®Ž4¬cÝèYÓZѶ¾õ¡s­ëAóº×€þ5°ù,ìaç¹ØÆ¶3²“=çe3ûÍÎ~öš£-í3S»Úc¾6¶¿¬ímo¹ÛÞÆ2¸ÃMåq“Êæ>7“Ó­n$³»ÝD~7¼,ïyó¸ÞöÆ1¾ómã}óÛÈÿvµ¿Þâ\É/µÁNâ…3ÜÉ÷´Ã#Þá‰S\ÊguÆ-mñO¸ã0ÈC¾à‘“\Ë'_´ÉS^à•³|À.ùc.ó0לÐ4¿9~s®ó=÷¼Ï<ÿy|ƒ.ô4]ÏD?ºz“®ô67]ÙO§3Ó£ÞÌ©SÄW‡vÖÙl>õ­3Úëdî:Øu)ö±?ÚìÙF;˜Ë®öW²½í­|;ÜW)÷¹²îvtÞ˽w¾÷Ý|à×=xÂÞÝA;bm3.7.0/doc/html/a00045.html0000644000175000017500000002612311365042651013427 0ustar tlktlk BitMagic: bm::bvmini< N > Class Template Reference

bm::bvmini< N > Class Template Reference
[Small sets functionality]

Mini bitvector used in bvector template to keep block type flags. More...

#include <bmvmin.h>

Public Member Functions

 bvmini (int start_strategy=0)
 bvmini (const bvmini &mset)
unsigned test (bm::id_t n) const
 Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.
void set (bm::id_t n, bool val=true)
unsigned mem_used () const
void swap (bvmini &mset)

Detailed Description

template<size_t N>
class bm::bvmini< N >

Mini bitvector used in bvector template to keep block type flags.

Template is used as a default template parameter MS for bvector Offers maximum performance comparing to miniset.

See also:
miniset

Definition at line 221 of file bmvmin.h.


Constructor & Destructor Documentation

template<size_t N>
bm::bvmini< N >::bvmini ( int  start_strategy = 0  )  [inline]

Definition at line 225 of file bmvmin.h.

template<size_t N>
bm::bvmini< N >::bvmini ( const bvmini< N > &  mset  )  [inline]

Definition at line 230 of file bmvmin.h.


Member Function Documentation

template<size_t N>
unsigned bm::bvmini< N >::mem_used (  )  const [inline]

Definition at line 250 of file bmvmin.h.

template<size_t N>
void bm::bvmini< N >::set ( bm::id_t  n,
bool  val = true 
) [inline]

Definition at line 242 of file bmvmin.h.

References bm::set_word_mask, and bm::set_word_shift.

template<size_t N>
void bm::bvmini< N >::swap ( bvmini< N > &  mset  )  [inline]

Definition at line 255 of file bmvmin.h.

References BM_MINISET_ARRSIZE.

template<size_t N>
unsigned bm::bvmini< N >::test ( bm::id_t  n  )  const [inline]

Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise.

Definition at line 237 of file bmvmin.h.

References bm::set_word_mask, and bm::set_word_shift.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00140.md50000644000175000017500000000004011365042633013132 0ustar tlktlk6c9db023685caf1510d3254e8c539be3bm3.7.0/doc/html/namespacemembers_func_0x63.html0000644000175000017500000001155311365042652017722 0ustar tlktlk BitMagic: Data Fields
 

- c -

  • combine_and() : bm
  • combine_and_sorted() : bm
  • combine_any_operation_with_block() : bm
  • combine_count_and_operation_with_block() : bm
  • combine_count_operation_with_block() : bm
  • combine_or() : bm
  • combine_sub() : bm
  • combine_xor() : bm
  • compute_tmatrix_rstat() : bm
  • count_and() : bm
  • count_intervals() : bm
  • count_or() : bm
  • count_sub() : bm
  • count_xor() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00180.map0000644000175000017500000000021311365042645013233 0ustar tlktlk bm3.7.0/doc/html/a00170.md50000644000175000017500000000004011365042644013137 0ustar tlktlkef4a6b96e450983ec4b1242ce04342a7bm3.7.0/doc/html/a00210.md50000644000175000017500000000004011365042646013134 0ustar tlktlk00e22e04a696b51d0046adfef1424a4bbm3.7.0/doc/html/a00063.html0000644000175000017500000001112611365042651013424 0ustar tlktlk BitMagic: bm::first_bit_table< T > Struct Template Reference

bm::first_bit_table< T > Struct Template Reference
[BIT functions]

Structure keeps index of first right 1 bit for every byte. More...

#include <bmconst.h>

Static Public Attributes

static const char _idx [256]

Detailed Description

template<bool T>
struct bm::first_bit_table< T >

Structure keeps index of first right 1 bit for every byte.

Definition at line 148 of file bmconst.h.


Field Documentation

template<bool T>
const char bm::first_bit_table< T >::_idx [inline, static]
Initial value:
 {
  -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
}

Definition at line 150 of file bmconst.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00204.md50000644000175000017500000000004011365042646013137 0ustar tlktlkaa2f73316af60081b7b6f5a33967e0c5bm3.7.0/doc/html/functions_type.html0000644000175000017500000001646311365042644015677 0ustar tlktlk BitMagic: Data Fields - Typedefs
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00052.html0000644000175000017500000000733611365042651013432 0ustar tlktlk BitMagic: bm::DeBruijn_bit_position< T > Struct Template Reference

bm::DeBruijn_bit_position< T > Struct Template Reference

#include <bmconst.h>

Static Public Attributes

static const unsigned _multiply [32]

Detailed Description

template<bool T>
struct bm::DeBruijn_bit_position< T >

Definition at line 134 of file bmconst.h.


Field Documentation

template<bool T>
const unsigned bm::DeBruijn_bit_position< T >::_multiply [inline, static]
Initial value:
 { 
  0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 
  31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
}

Definition at line 136 of file bmconst.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_func_0x64.html0000644000175000017500000001350211365042644016421 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00100.html0000644000175000017500000003205411365042635013421 0ustar tlktlk BitMagic: bmtrans.h File Reference

bmtrans.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  bm::tmatrix< T, ROWS, COLS >
 Mini-matrix for bit transposition purposes. More...
struct  bm::tmatrix< T, ROWS, COLS >::rstat
 Row characteristics for transposed matrix. More...
struct  bm::bit_grabber< T, BPC >
struct  bm::bit_grabber< unsigned, 32 >
struct  bm::bit_grabber< unsigned short, 16 >
struct  bm::bit_grabber< unsigned char, 8 >
struct  bm::bit_trans_grabber< T, BPC, BPS >
class  bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >
 Bit-plain splicing of a GAP block. More...

Namespaces

namespace  bm

Functions

template<typename T , unsigned BPC, unsigned BPS>
void bm::vect_bit_transpose (const T *arr, unsigned arr_size, T tmatrix[BPC][BPS])
 Generic bit-array transposition function T - array type (any int) BPC - bit plain count BPS - bit plain size.
template<typename T , unsigned BPC, unsigned BPS>
void bm::vect_bit_trestore (const T tmatrix[BPC][BPS], T *arr)
 Restore bit array from the transposition matrix T - array type (any int) BPC - bit plain count BPS - bit plain size.
template<typename T , unsigned BPC, unsigned BPS>
void bm::tmatrix_distance (const T tmatrix[BPC][BPS], unsigned distance[BPC][BPC])
 Compute pairwise Row x Row Humming distances on plains(rows) of the transposed bit block.
template<typename T , unsigned BPC, unsigned BPS>
void bm::bit_iblock_make_pcv (const unsigned distance[BPC][BPC], unsigned char *pc_vector)
 !< ibpc limiter
void bm::bit_iblock_pcv_stat (const unsigned char *BMRESTRICT pc_vector, const unsigned char *BMRESTRICT pc_vector_end, unsigned *BMRESTRICT pc_vector_stat)
 Compute number of ibpc codes in pc_vector.
void bm::bit_iblock_reduce (const unsigned tmatrix[bm::set_block_plain_cnt][bm::set_block_plain_size], const unsigned char *BMRESTRICT pc_vector, const unsigned char *BMRESTRICT pc_vector_end, unsigned tmatrix_out[bm::set_block_plain_cnt][bm::set_block_plain_size])
 Matrix reduction based on transformation pc vector.
template<class TMatrix >
void bm::tmatrix_reduce (TMatrix &tmatrix, const unsigned char *pc_vector, const unsigned effective_cols)
 Transposed Matrix reduction based on transformation pc vector.
template<class TMatrix >
void bm::tmatrix_restore (TMatrix &tmatrix, const unsigned char *pc_vector, const unsigned effective_cols)
 Transposed Matrix restore based on transformation pc vector.
template<typename GT >
void bm::gap_2_bitblock (const GT *BMRESTRICT gap_buf, GT *BMRESTRICT block, unsigned block_size)
 Copy GAP block body to bit block with DGap transformation.
template<class TMatrix >
void bm::compute_tmatrix_rstat (const TMatrix &tmatrix, const unsigned char *pc_vector, typename TMatrix::rstat *rstat, unsigned effective_cols)
 Compute t-matrix rows statistics used for compression.
template<typename TM >
unsigned bm::find_effective_columns (const TM &tmatrix)
 Compute effective right column border of the t-matrix.

Variables

const unsigned char bm::ibpc_uncompr = 0
const unsigned char bm::ibpc_all_zero = 1
 !< plain uncompressed
const unsigned char bm::ibpc_all_one = 2
 !< plain ALL ZERO
const unsigned char bm::ibpc_equiv = 3
 !< plain ALL ONE
const unsigned char bm::ibpc_close = 4
 !< plain is equal to plain M
const unsigned char bm::ibpc_end = 8
 !< plain is close to plain M

Generated on Sun Apr 25 09:37:33 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00253.map0000644000175000017500000000003511365042652013234 0ustar tlktlk bm3.7.0/doc/html/a00117.png0000644000175000017500000013625011365042643013253 0ustar tlktlk‰PNG  IHDR(Ó °ãÂbKGDÿÿÿ ½§“ IDATxœìÝy\TUÿðëˆÈ’ : "J¸ ¸f( Y>й’hî¦)¥Õ#™¥™+fšî>¨‰ j*‰¢†*R¢‰@€,²‰ÀÈ2 Ì÷÷‡ócXf;À÷ýzÍë÷Ü{Î÷Üsa¾sï¹w4ˆˆÀcŒ1¦F4…€1Æc¬­­ÆkY|…±z°yófœ?ÉÉÉHNNÆ¥K—ðÖ[oaóæÍB‡Ö¤äææb×®]òß§L™‚?ÿüÚÚÚʬY³_ilÕUWq×E,¯¢ìX¼ª%K–`êÔ©hݺ5ˆ¸¸8ØÚÚ"22²Fëüüóϸpá‚üïòåëÉ“'òu¶lÙsssÌœ9¶¶¶˜0aŠ‹‹+ÄTãT—„ÿ:AŒ1•ŸŸ_µ×ïÝ»7ùúú*,Û¸q#µk×®®CceXYYÑõë×kßÜÜœ"""k¿,¡c©«±J¥¤««K—/_VX>gΚ:ujµ×!"²±±¡={öTÙVZZéèèÐÅ‹‰ˆ(;;›ºuëF6lxå~T¥¾ÆIèñ¯ŒŸŸÕ$íà3(Œ5îÝ»Ë?©edd`ذaØ¿?Œñ÷ßãÒ¥KèÝ»7D"ºwïŽ'NÈ·=þ‰‰‰˜2e Μ9£P¦j–WUÿ•õÁÝÝpwwGhh¨BûYYYpqqÌÌÌ`bb‚Ý»wcÑ¢E011X,ÆáÇ+ôéüùóèÓ§Âkúôéò8:+++hkkC,cíÚµ*cQÖ¿—qúùù¡k×®Ð××Ç´iÓPZZªò˜)«üX(kSÕ1URR‚ââbH$…å‹/ÆìÙ³«½Nuܾ}–––2dÀØØï½÷îß¿_aÝÊÆ·¦û­ü8•ßgΜ³³³B»îîî Põ1-ôø×™zL–k2P‹3(6l ÌÌLÊÌ̤¿þú‹œœœÈÑÑ‘ˆˆ’’’HOOFM×®]£ÄÄD200 ={öT*¥ÀÀ@jÙ²%EEEQRRP@@Њ+È‚d2ååå‘X,¦Í›7“T*¥ .¡¡!]½z•‚‚‚ÈÌÌŒbbbH"‘››yzz)-KKKSKÙ¸‹ŠŠú­¬ÞS§N‘¶¶6yyyQ~~>]¹r…ŒŒŒèôéÓJû¡¬ÿñññ¤¯¯ODD999diiIAAA$•JÊ”ÕQž²þ+ëCvv6‰Åbºxñ"+´ŸššJšššôÍ7ßL&£-[¶ZµjÉd2Z³f YYY)l———G111CwïÞ%KKKúñljˆH"‘H$¢€€’J¥tùòeÒÔÔ¤ŒŒ ¥±(ë_jj*éêêÒìÙ³©¨¨ˆâââÈØØ˜Î;§tlË+?¯rLÍš5‹ttthìØ±äëëKqqqµZÇÆÆ†fΜI{öìQxݺu«Ò~äççS=hûöíÊÊomö[ùq*¿/þúë/jÓ¦B»½{÷¦àà`¥Ç´Ðã_•šžAá…±j¨M‚¢©©IZZZ¤¥¥E"‘ˆ† BñññDôâ ¥¤¤ѶmÛÈÉÉI¡ŽqãÆÑwß}GëÖ­£‘#GÊ—ÓªU«(??Ÿ>LýúõSØnþüùäååEdffF÷îÝ#¢ovÙÙÙDDJË”ÅR>îò”Õ{êÔ)244TxZ²d ¹»»+퇲þ—ýÇKDÔµkWùe…²eÊê(OYÿ•õHñ´zù70”——GDDÑÑѤ­­MÏŸ?'"¢;wîÈ/ÿ•ïÓKîîî4qâDùïR©”ÂÃÃå¿'%%‘H$¢˜˜¥±(ëßË8?~,/srr"¥c[™²cñ*Ç‘L&£úüóÏÉÖÖ–444ÈÞÞžîÞ½[£ulll¨oß¾4jÔ(…We—}BBB¨G4fÌù8•UÙøÖf¿•§òûâÁƒU&(ªŽi¡Ç¿25MPø.ÆêÉöíÛ1kÖ¬*Ë555affHNN†µµµBy·nÝ””$¿äñ’ŽŽ¾üòK@BB¢¢¢Ð¹sgyyaa!†Ž#F $$ƒ ‚±±1\]]±dÉ+-SKù¸ËSV/téÒºººòõ{õê…¥ý())©²ÿÕ•Pí:”õ¿_¿~Uö¡:ôõõ¼øvl‘H$Ÿ@ªêÛ²¿ÿþ{ÄÅÅá?þ/‰DÇ×_ØØX´nÝ2™Le ªÆÄb±üç—±©ÛWiSÙ1EDÉdpvv–_îxôèæÎ 777ÄÅÅ€Êu^öcþüù˜6mZ•±J$Ì™3W®\Á?ü€É“'«ìßKu±ß”틲jrL—%Äø×ÏAaL eß” î$^\622‚rrrÊŽ?ŽÜÜ\ÂÑÑ ¯­[·‚ˆ°~ýzdeeÁßßR©cÇŽ¥eÊb)wyÊêP¡ÞÌÌL(퇲þWWMêPÕÿªúP_Ž= ___¢E‹òåX²d ¼½½[·n¡eË–*ëSÕ¿ª¨ÛWiSÙ1;;;…eX¹r%——W­uª£¤¤®®®066FTTT’“ªÔt¿©JVóóóÔì˜.Kˆñ¯-NPS®®®–LOODZcÇàââWWWœ}Z­~VæUö›ŽŽrsså퇅…!66@͎鲄ÿZ«Ñ$Æš)ÔÁmÆe%%%‘–––²¥K—’±±1¹ººR›6mhΜ9ò² PÛ¶mièСdhhH›7o–—­_¿ž ièСdnnNãǧÒÒRJJJ¢N:‘­­- :”ŒŒŒhÇŽòö«*SKeq—ïWUõž:uŠ,,,ÈÆÆ†I,ÓàÁƒ©°°Pi?”õ¿ºsPTíÃòªê¿ª>ôíÛ—èöíÛ•ÎQx)&&F!¶ˆˆˆJç xzz’––éëëË_æææDD”˜˜H¦¦¦äääD...ôþûïS×®]ÉÍÍMi,ÊúW>N"¢Áƒ“¿¿¿Êc¦¼²c¡¬MUÇÑ‹¹MmÚ´¡N:Ñ›o¾Ib±˜ºwï.ŸQÝulll@…—H$"""ooïJËçÎ[!&eã[“ýVvœÊï‹ÒÒRrpp rss#rpp àà`"R~L =þ•©é "¢úMkü444àççzm'!!ÑÑÑèܹs…ëÄ111ˆG=*ñë¯sàèh-tXŒ1Ö$q‚˜ ™™Ïðã§qôè-XYµÃîÝ3ðî»6|Æ„1Æê'(ŒUˆpèP–/?…V­Dذa"F¶‡¦&'&Œ1Vß8Aa¬ii¹˜7￸y33g:aÑ¢÷ ¯Ïwå0ÆXCá…±rΟÿŸ~¯½Ö¿ýæ;»ŽB‡ÄcÍ'(ŒýOQQ ~øávîüãÇ÷ÇÊ•cù¬ cŒ „ƃš­ôt ¼¼âêÕ|ñÅ0|ö™ ´´8ggŒ1uÀ k–®\‰Áœ9ûa`Ð'N,@ß¾„‰1ÆXüq‘5+2aÆs˜8q^Gpð"NNcL ñÖldgçcþ|?„†Æàûï?ÀôéŽB‡Äc¬ œ °f!""³gï?>ýúYcŒ1¥økòÃèћЭ[{œ;·“Ækø k²JKeX¾ü$|}ÿÀüù.ø÷¿ßçïÑaŒ±F‚Ö$åæÀÓs?nÞŒÇÖ­SàæÖGècŒÕ'(¬ÉùçŸ Lº……Ïølm;cŒ±â…5)W®Ä`֬ݰ¶cçÎé055¨ÑöĤI“ê):Æc•ñó󃇇‡Â2NPX“qìØm|ñÅaŒÙ>>BW·ö‡÷‘#Gê02ÆcU™0aB¥Ë9AaM¦Mç±jÕÌ›7_}5¯6vüøñucŒ±Úà…5j¥¥2,Yr ~~7ðãã0eÊ ¡CbŒ1V8AaVaa1<=÷ãêÕìÞ=®®6B‡Äc¬Žp‚Â%‰DŠ)S|ñÏ?ð÷ŸËß§ÃcM '(¬Ñyò$Û]€ÀÀÏе«©Ð!1Æ«cœ °F%%%'nøÌÍ_:$Æcõ€ÖhüóO&NÜcã–ðóû&&5{ÆI}Ù¹s'ÒÒÒä¿ëééÁÉÉ ýû÷0ª¦';;¾¾¾X¼x1 %%Àˆ#`nn®P&tlõ½]CשJÙ±èÕ«×+ׄ³gÏâÙ³g°´´Ä´iÓбcÇ­³cÇdddT¨ÛÒÒ²Òg%%%¡E‹011©2.‰D‚ØØX˜šš¢C‡Ê)Äþ¯-u•¿,5 ¦a̘Í‹qôè\µIN`óæÍ8þ<’““‘œœŒK—.á­·ÞÂæÍ›…­IÉÍÍÅ®]»ä¿O™2þù'´µµ+”5„Y³f!>>¾Òت«®â®‹X^EÙ±xUK–,ÁÔ©SѺuk 8qqq°µµEdddÖùùçŸqáÂùßåËד'O*´™••…âĉUƵe˘››cæÌ™°µµÅ„ P\\\a½úÓº$ô±R#ĘšûûïÇÔ«—7¹»o¥‚‚¢zmËÏÏjúgÑ»woòõõUX¶qãFj×®]]†ÆÊ±²²¢ëׯ Ö¾¹¹9EDDÖ~YBÇRWc!•JIWW—._¾¬°|Μ94uêÔj¯CDdccC{öì©V»nnn¤««[áïø¥´´4ÒÑÑ¡‹/Qvv6uëÖ6lØP­úk£¾ÆTèc¥2ÈÏϯÂr>ƒÂÔÚƒ1aÂôêe޽{gBOOW誥{÷îòOj6löïßcccüý÷߸téz÷î ‘H„îÝ»+|r;þ‰‰‰˜2e Μ9£P¦j–WUÿ•õÁÝÝpwwGhh¨BûYYYpqqÌÌÌ`bb‚Ý»wcÑ¢E011X,ÆáÇ+ôéüùóèÓ§Âkúôéò8:+++hkkC,cíÚµ*cQÖ¿—qúùù¡k×®Ð××Ç´iÓPZZªò˜)«üX(kSÕ1URR‚ââbH$…å‹/ÆìÙ³«½NMüòË/ "¼õÖ[U®sûömXZZbÈ!ccc¼÷Þ{¸ÿ~…u+;jºËiùývæÌ8;;+´ëî°0UÿB+5Öð¹cÕsÿ~ õêåM'n£ÂÂâi³¶gP6lØ@™™™”™™Iýõ999‘££#%%%‘žž=š®]»F‰‰‰d``@{öì!©TJÔ²eKŠŠŠ¢¤¤$200 €€*(( +V……Éd2ÊËË#±XL›7o&©TJ.\ CCCºzõ*‘™™ÅÄÄD"!777òôô$"RZ–––¦4–²q)ž½RVï©S§H[[›¼¼¼(??Ÿ®\¹BFFFtúôi¥ýPÖÿøøxÒ××'"¢œœ²´´¤   ’J¥ eÊê(OYÿ•õ!;;›Äb1]¼x‘Š‹‹ÚOMM%MMMúæ›oH&“Ñ–-[­ZµŠd2­Y³†¬¬¬ˆˆ¶ËËË£˜˜Љ‰¡»wï’¥¥%ýøãDD$‘HH$Q@@I¥Rº|ù2ijjRFF†ÒX”õ/55•tuuiöìÙTTTDqqqdllLçÎS:¶å•‹W9¦ˆˆfÍšE:::4vìXòõõ¥¸¸¸Z­cccC3gΤ={ö(¼nݺ%_'22’,--)33“\å”òòóó©G´}ûö eå…ÚìãòcZ~¿ýõ×_Ô¦M…v{÷îMÁÁÁJ¡•ª Š3(œ 0µtï^2ÙØ,!m$•>o°vk› hjj’––iii‘H$¢!C†P||<½xÃ@)))DD´mÛ6rrrR¨cܸqôÝwßѺuëhäÈ‘òåÅÅÅ´jÕ*ÊÏϧÇS¿~ý¶›?>yyyQ`` ™™™Ñ½{÷ˆèÅ›]vv6‘Ò2e±”»dkkKçÎ#"ªv‚B=zô 1cÆÈÇ´¬ÊŽ…Úìã²cZ~¿=xð ÊEÕñ/ô±R™ª¾‹‡©‡Óðá‡ÛлwGìÞ="‘ú¦Û·oǬY³ª,×ÔÔ„™™ 99ÖÖÖ åݺu“ßEP¶LGG_~ù% !!QQQèܹ³¼¼°°ÇLj#‚AƒÁØØ®®®X²d Œ•–)‹¥|Üå)«ºté]Ýÿ¿$׫W/„„„(íGIII•ý¯®„„„jס¬ÿýúõ«²Õ¡¯¯ÐÐЀH$’O Uõ=Qßÿ=âââðÇÈ—‰D"„‡‡ã믿Fll,Z·n ™L¦2Uã b±XþóËØTí«´©ì˜""Èd28;;Ë/aŒ7VX·¤¤®®®066FTTT’“ªÔt«JlóóóÔìø/KˆcENP˜ÚHMÍÁ„ [`aÑ{÷΄®nÓHNÊsuuEpp°üÓ`zz:Ž;¸ººâäÉ“òç7„……aòäÉÐÒÒ‚‹‹ BCCñàÁ@AAìíí€Õ«WcÈ!ÐÖÖÆ€0eÊ<~ü”–)‹Eeõ/>‘½œd———‡;vÀÅÅEi?”õ¿&û·ºu¨êU}¨ðôôD@@@…OÊÉÉÉèÙ³'¡¥¥…ëׯW˜$Z™Úޝª±­6ÀÑÑ=ÂÞ½{åˈ~~~°³³ƒAµÖy©  999 ¯—oÔßÿ=nß¾-ÙÛÛÃÛÛ;wîð"YºwïàôéÓHMMÅ¢E‹žž.OªŸ>}Z­}R™WÙÇ:::ÈÍÍ•·†ØØX5;þËâXQ©FŠ«'™™ÏhРè½÷ÖSnn¡`qÔÕmÆe%%%‘–––²¥K—’±±1¹ººR›6mhΜ9ò² PÛ¶mièСdhhH›7o–—­_¿ž ièСdnnNãǧÒÒRJJJ¢N:‘­­- :”ŒŒŒhÇŽòö«*SKeq—ïWUõž:uŠ,,,ÈÆÆ†I,ÓàÁƒ©°°Pi?”õ¿ºsPTíÃòªê¿ª>ôíÛ—èöíÛ•Î;x)&&F!¶ˆˆˆJç xzz’––éëëË_æææDD”˜˜H¦¦¦äääD...ôþûïS×®]ÉÍÍMi,ÊúW>N¢ó0üýýU3å• emª:¦ˆ^ÌmjÓ¦ uêÔ‰Þ|óM‹ÅÔ½{wù‡ê®cccC*¼D"Q¥í–ŸƒbaaAË—/'""ooïJëš;wn…z” /Û©Î>.;¦å÷[ii)988……¹¹¹‘ƒƒ988Ppp0)?þ…>V*ƒ*æ hü¯1Áää`ìØ5;räS´iÓJ°X<ˆI“&¡!þ,Î;W¸öƒøøxôèÑ£Â4SRRpÿþ}˜››ÃÆæÿ¿Á¹¨¨7oÞ„T*EïÞ½ajjZ­2U±(SU½¿ýö–-[†k×®áÆhÑ¢ú÷ï¯pšºª~TÕ™L†ììl´iÓ¦B••)Û‡åUÖU}ÈÌÌDDDú÷ï##£*cSFYŸÊ“H$¸yó&LMMagg‡¤¤$ÄÅÅaðàÁ*c©Íøª:fT©í1õ²íððpH$˜™™ÁÖÖ¶Â%Žê¬#„šŒ©²}\vL_{­âWz”””àÆ€VxH^UÇ¿:+ðó󃇇‡ârNP˜ ‹1~ü<}š€€ÏЮ¡ ñ4d‚Ò”½|sWöüu×úÀXcPU‚Ò4/ò³F¡´T†9s 55Â''¬îÂÊÊJè0^ISèc'(LD„¯¾:Š7b0;¶:$V‡œœœàää$t¯¤)ô±ÆŒ&ˆ<#GnÂÏïôè!V½cŒ±f…Öàöí»Š­[/bóæÉxûí×…‡1Ƙâç °uîÜ=x{ÇŠc0jT_¡ÃaŒ1¦¦8Aa æÞ½Ì™ssæ8cêT¡ÃaŒ1¦Æ8Aa "55S§î„££5¾úê_B‡ÃcLÍq‚ÂêD"ÅäÉ; aëÖ ©)üÔcŒ©7ž$ËêUi© óçû!'§GŽ| ==]Õühà IDAT1Ækö8Aaõê»ïNÈŸu"ä#ìkj„ Òýâ[k[·–6H›Œ1Öp‚Âêͯ¿ÞÄž=WpàÀÇæY':uÂøñãë½¼<dd´Df¦ž?ׂ‰I'(Œ±fiüøñèÔ©S…åü]<¬^„‡?˜1›ðõ×#àé9DèpÔBJJ6ŽÇÑ£·“ŽÎÛbܸ70fŒ=:wn+txŒ1¦V8Aau.55ï¿ï'§nøùçIB‡#(‰DŠÓ§ÿ„¿ÿmܼ#£–øàƒ~3¦ìí; cŒ©-NPX*,,ÆØ±¿@SSǎ̓HÔü®">^ŠK—¢pôèm߇LF6¬ÆŒ±Ç;ïô€ŽŽ–Ð!2ƘÚk~ï¬^}õÕQ¤¦æâ̯f—œ„‡?Âñãá8y2OŸæãÍ7»`ÅŠ11¢ [cŒ5*Íë„Õ«ýû¯!0ðŽ› ±ØXèpD~~Ž ÇþýWñ÷ßaeeŠY³œ0nÜ07Mèðc¬ÑâK<¬NDF&cäÈøÏF`öìÁB‡Sï>Lþ}WpìX8ž?/…›[|ô‘ìí-„1ÆšNPØ+“H 1lØzØØ˜Ã×w44šæ“bŸ?/ÅéÓaïÞ«¸y3––&øè£AøðÃ06n)txŒ1Ö¤ð%öJˆ^^‡ ¡¡Ÿ‰M29‘JŸãСغõ"ÒÒrñpè'œœ¬›dcLp‚Â^ɶm—pñâœ:åÕä&‚J¥Ï±{w(¶m»ˆüüb|øá›øôSgž[Âc €Vk7oÆaÕªÓX¹r,zõ2:œ:SR"ÃÑ£·°fÍY<{&ÅŒŽøøãÁhÛ¶ñ<ªŸ1Æ;žƒÂj%++®®ëðöÛ¯7©‡±]º…eËN ..“'¿/¯a055:,Ækvø «±ÒRæÎý/ õ°zuýoMCHIÉÆÒ¥8{6ÆõÂÞ½3ùñóŒ1& NPXýôS0ÂÃpöìÐÓÓ:œWR\\‚­[/bãÆ`˜™ãÐ!O ÜMè°c¬Ùã…ÕÈ<ÄO?æM“`ee*t8¯$$ä¼½#3ó¾øb>ùd?†ž1ÆÔ'(¬Ú22žaÞ¼ÿbòä·ðÁý„§Ö’’žbéÒüþû=ŒÙK—ºñ9Œ1¦f8AaÕBDX´è0Z·n…o¿%t8µRR"Ã/¿\ÀÆÁèØ±5~ýu­…‹1ÆX%8AaÕràÀu\¾ü¿ýæ…-t„§Æ¢£Ó°`ÁA<|˜†E‹ÞÃÇæË9Œ1¦Æ8Aa*ÅÅeâûïO`Ñ¢÷`kÛAèpjD&#lß~ kÖœ9Î[ÔèçÎ0ÆXsÀÏAaJ•”È0jÔFèèhãØ±¹ÐÒÒ:¤jKHx/¯Cˆˆx„… ß矾míÆ?cŒ5g|…)õÓO瓎 7šä„ˆ°ÿ5,_~––&8{ö ôìi&tXŒ1Æj€V¥;waãÆ`¬[玎[ Nµ$'gcÑ¢_qíZ æÏwÅ‚®<ׄ1Æ!¾ÄÃ*•Ÿ_W×uèÙÓ ;wN:œj Š„—×!´oo„=лwG¡CbŒ1VK|…Uê»ïN °°k×N:•ž?/Å?œ‚¯ï˜6ím,]ꑈíÆèÊ•+øù矅ƒ5CóçÏÇÛo¿-t¬ŒÆ1©€5¨ààûðó»õë?Äk¯é ŽR‰‰YpsÛˆC‡Â°mÛüðÃNN±ÄÄDøûû kfüýý‘˜˜(t¬þOÎdf>âE¿bÚ´·ñÎ;=„G©——t:vl  /`ii"tH¬Ž9rDèX3¢¡¡!t¬œ 0_}åCC=x{:”*•½¤3iÒ@,_ÎgMc¬©áÿêLî·ßþÂï¿ßC@Àgjû-Å))Ùðô܇¨¨4lÚ4 cÆØ cŒ±zÀ äæÀÛû¦Nu@ÿþ–B‡S©k×bññÇ{affŒ  /е+?–1Æš*ž$ËË–€¶¶¾þZ=/í8p 'nÃ!ÝðÛo^œœ0ÆXÇgPBC£qäÈ-ìßÿ1Zµ Ž‚’¾ý6ûö]ÅW_ý sç¾ÃÚc¬à3(Í\AA1/>‚>è‹¡CÕ뮜œLš´GŽÜÂîÝ30oÞPNNX¥‚‚‚°`Á̘1Ë—/GRRR·ñìÙ3¬ZµªÂÏê"%%«V­Â½{÷¤½ììl¬Y³¦Þê/»ë»-¦ž8AiæÖ¬9ƒgϤX¾|ŒÐ¡(ˆÍÀðáðèQNž\€wßí%tHLM-Y²S§NEëÖ­1pà@ÄÅÅÁÖÖ‘‘‘uÚNnn.–-[Váçº4kÖ,ÄÇÇ×jÛ)S¦àÏ?ÿ„¶vý/_nn.víÚUom•ßßeÛz•ýÄNPš±ˆˆDìÚŠåËÇ ukõy ÛÅ‹Q1bÚµ3Ä™3Ÿ£G±Ð!15UTT„uëÖÁßßß~û-fÏž={öÀÃÃëׯ:¼ Bnnn­¶MLL„——ºwï^ÇQý¿²ñuîÜ>¬·¶Ê*ßÖ«ì'Öxp‚ÒL=^ŠE‹cÈn=ºŸÐáÈíÜù¦LñÅÈ‘}qäȧj•81õSRR‚ââbH$…å‹/ÆìÙ³YYYpqqÌÌÌ`bb‚Ý»wcÑ¢E011X,ÆáÇåÛ:tVVVÐÖÖ†X,ÆÚµkk—··7LLL ‰àììŒäädyYdd$ТE X[[ãàÁƒwwwdddÀÝÝ¡¡¡*ë)kúôéHLLÄ”)SpæÌ$$$ÀÙÙYawww„……É÷‡ŸŸºví }}}L›6 ¥¥¥€óçÏÃÆÆºººèׯnß¾]i|ééé9r¤¼þK—.¡wïÞ‰DèÞ½;Nœ8¡°ÿ«j¯:û»l[åãX±b…B2𙙉7Þx99951¦–ˆ5K>>¿Óë¯I))ÙB‡BDD2™Œ¾ÿþuèðùú^:&???ªé¿¥Y³f‘ŽŽ;–|}})..N¡<55•455é›o¾!™LF[¶l!´jÕ*’Éd´fͲ²²"""‰DB"‘ˆH*•ÒåË—ISS“222())‰D"‘ÂÏå‘™™ÅÄÄD"!777òôô$"¢¼¼<‹Å´yóf’J¥táÂ244¤«W¯Rvv6‰Åbºxñ"+­§¼œœ²´´¤   ’J¥ôàÁjÓ¦Â:½{÷¦àà`JMM%]]]š={6Q\\Ó¹sç())‰ ( € hÅŠdaaA2™¬B|ñññ¤¯¯ODDiiid``@{öì!©TJÔ²eKŠŠŠRÚ^u÷wÙ¶ÊÇqêÔ)²¶¶–÷sÓ¦M4tèÐCÈÏϯFÛ°úÇ J3F‹h÷îP¡C!"¢ââš;÷uNŸþKèp˜€j“ Èd2 ¡Ï?ÿœlmmICCƒìííéîÝ»Dô"A@yyyDDMÚÚÚôüùs""ºsçµk׎ˆˆ¤R)…‡‡Ëë~ù&Sí%00ÌÌÌèÞ½{Dô")ÉÎ~ñAàðáÃÔ¯_?…õçÏŸO^^^DDdnnN*ë©L×®]éúõëDD*ôøñcy™““ùûûÓºuëhäÈ‘òåÅÅÅ´jÕ*ÊÏϯ_Ù¤aÛ¶määä¤ÐÞ¸qãè»ï¾SÚ^u÷wÙ¶ÊÇQTTDÆÆÆòñ8p íÛ·¯ÊýTNPÔßfÜÌ/>‚Þ½;bêT¡ÃA^^fÌØÈÈd><o¾ÙEèX#BDÉdpvv–_ÒxôèæÎ 777ÄÅÅÉ×Õ×q¹PCC"‘H>™´ìa"‘áááøú믋֭[C&“Õ(¦#F $$ƒ ‚±±1\]]±dÉ#!!QQQèܹ³|ýÂÂB >¼FõÔ±øÿçv½Ü °¶¶–/×ÑÑÁ—_~©²®ääd…í [·n wSUÖ^]ìo]]]Œ5 GEË–-qïÞ=Œ;¶Fu0õÄsPšÿÛOÀªUã ©)ì-»Ï0zô&ÄÅeàĉÏ89a5;;;…eX¹r%——Wãú–,YoooDGGãÖ­[hÙ²eê "¬_¿YYYð÷÷‡T*•¿aÂÑÑ ¯­[·Ö¨žÚÈÏÏW¹ŽA…¹ÇW9!ÕÐÐOž}°páBØÛÛãÝwß… Ƈ÷Þ{Oi{µÝßåãÐÑÑÁ|€-ZàwÞQÙOÖ8h «÷ï§àý÷}àã3ãÆ½!X/FaÖ¬=pqé‰M›&AW—§A±ÿwðàALš4 5ý·TTT„ððpH$˜™™ÁÖÖ¶ÖO–H$¸yó&LMMagg‡¤¤$ÄÅÅaðàÁ5ŠçæÍ›J¥èÝ»7LM¿;*%%÷ï߇¹¹9llläË333þýûãµ×^SY2%%%¸qã`àÀ5z€[LL âããÑ£GtìØ±ÒøŒŒŒ6mÚÈËÎ;W˜“R•êìo™L¦ÐVùý¼¸Õº]»vµz¯††üüüàááQãmYýᥠ"Œ³püø<Á‰O>Ùøá‡±‚Ïaê§¶ k¾233qõêULž<wîÜ©vbT'(ê‰?¾6/'ÆþþûBÁ’“'"0¾fÌpÄÒ¥nü: YYyÈÈx†ÔÔdf>ÃãÇ9¸víttø›ªYõÅÇÇã‡~€O­’¦¾8AiâÔabì‘#·°páaÌ›7_~YñvJÖôääàÑ£,ûLùŒ~Öx<^Šää§HL|ŠG²˜˜õ¿„ä ŸB")hiiÂÌÌíÛ¡}{#ôéÓï½× ¦¦†hßÞíÚ¢];#¶ðòOŠ]cŒ© NPš°û÷S°oßlØ0-¼ýíÛ/aùò“øöÛQ˜=»ú ™úH¤ˆMGttbbÒ•ŠØØ <~œƒÒÒÔ22j‰NZâ œœºÁ¢ :uj ‹607 ::ÊoQeŒ±Êp‚ÒD¼½ÃÞ¾3ÆŒ±oðö7n Æš5g±jÕ8|ôÑ oŸÕLvv>¢£ÓåIHLÌ‹ŸÓÒ^< «eK]XYµÃ믷ÃäÉ]ѹs[XX¼HBŒŒjþ`-ÆS…”&êØ±ðÿMŒ]ÔàR׬9‹M›Îã§Ÿ&büøþ Ú6S-)é)"#“™Œ»w“pï^ 23Ÿ [Àʪ¬­ÛcðànèÑà VV¦èÐá5žØÌkPœ 4ARés¬^}'DbÕÔ!Ÿß±iÓylÚ4 |ЯAÛf%$<ÁÝ»É INN´´4aee [Û˜7o(ºwãõ×ÛñCócjƒ”&hûöKH ñï7ìÄØÍ›/ÀÇçw¬_ÿ!''ÈÈx†ððܾÿ¿d$I!´µ5ñúëíagׯÙÀÖ¶llÌ¡§§+tÈŒ1V%NPš˜ÌÌgز%óæ EÛ¶­¬Ý;.ãÇOcݺ pwÐ`í6WD„ØØ ܾ°°8ܾ€¸¸Lhkk¢{w1ìì:â_ÿê-OFD"þSgŒ5.ü_«‰Y»ö, õ0{öks÷îP|ÿý üðÃXLœ8°ÁÚmNŠ‹Kp÷nÂÂâpëVnÝŠGvv>Zµ¡o_ Œm,Ñ·¯Zµ î+ó÷÷:ƘÀ8AiB>LáCaظѣÁ>1ÿ÷¿×ñÍ7X¶l¦MSýed¬zž?/ÅíÛ ¸|9 7nÄáÏ?Q\\‚öí0`@,\8 ýû[¢gO3hi5½ïüœ0a‚Ð!0ÆÆßÅÓ„Lš´ÙÙ8}Ú«Aî¸øõ×›øâ‹Ãðö‰9sœë½½¦.66—/Gáò凸~ýäçÁÒÒNNÖxãÎxóÍ®èÐá5¡ÃdŒ±ÁgPšˆË—ââÅ(|Ö ÉI@À,Zô+þýï÷89©¥¬¬<\½ƒK—âòå‡HMͱqK¼ýöëX¶lœœº¡cÇÖB‡Éc‚à3(M@i© ï¾»––&عsz½·wîÜ=|üñ^̙㌯¾úW½·×T”–Êpóf<.]zq–äÞ½dhiiÂÞ¾3œœ¬1xpwØÙuh’—lc¬¦ø Jðë¯7›]»fÔ{[7oÆaΜððÈÉI5•à?âìÙHœ;wOŸæÃÊÊŽŽÝ°pá0 d}ýÆ?©•1Æê'(\~~Ö¬9ƒiÓÞFçÎmëµ­R1eŠ/\]m°bŘzm«1“H qþüß ŠDHÈH¥ÏÑ·o'|úé;xÿ}[XZš"cŒ©=NP¹­[/¢¸¸Ÿþn½¶“ð'nEïÞ°iÓ$¾ QNzz.~ÿý>Μ¹‹ë×cƒYaéÒQ6ÌíÚñZc¬&8AiÄž>ÍÇŽ—0¾+Œëï ÛÒÓ%ððØŽZcïÞ™üí´ÿ“žž‹€€œ>ý'""¡§§‹wÞéŸ~òÀС=`h¨'tˆŒ1Öhq‚ÒˆmÚtúú"ÌœéXomH$Rxxlƒžžöí›Õì^PPŒ  H=z¡¡ÑÐ×aøp;ÌŸï '§nüÄVÆ«#üß´‘JKËÅÞ½W°t©[½% ……ذa½ «ËFŒ1V×ø?k#åãó;Úµ3ÂäɃê¥þÒRæÌ9€øøLœ:µb±q½´£Î>LÃÑ£·qüx8RSsЧO'üç?ÿ‚›[ßf›¬1ÆXCá¥JHx‚Çðn݇õ6ÄÛû8BC£áïÿi½ß¤Nž>Í—'%wï&ÁÜü5L˜ÐcǾ++S¡ÃcŒ±fƒ”FhíÚ³èÒÅcÇÚ×Ký›7_Àÿ{»vMG¿~õÒ†º ‹ÃþýWqúô]´h¡÷߷÷ߎ›ov¦fý?™—1Ƙ"NP™¿ÿ~Œ'"°cÇ´z¹Õ÷øñpüøãi¬\9ï¾Û«ÎëW'I!üýoáÀ눎NCß¾°jÕ8¸¹õEË–Í{20cŒ ußÈL›¶ éé¹8sæó:ÿÎ+Wb0iÒv|òÉüç?#ê´nuòàA*|}/#0ð´´41fŒ=>úhzõ2:4ÆcÿÃgP‘ððœ;w‡yÖyròàA*fÍÚ‘#ûà믛Þ#쉗/?Ķm— këvX¶ìŒcV­øQóŒ1¦nø J#2~ü/ÉÇŽÍ«ÓzSSs0bÄFtíj?¿OšÔƒØŠŠJpüømlß~11épt´†§ç Ü­A¾õ™1ÆXíð”FâêÕX\½‹'æ×i½……Ř5kŒõ°sçŒ&“œ<{&Åž=W°sçeH$RŒc­[§ G±Ð¡1Æ«NP‰Ÿ~úŽŽÖèßß²Îê$"|ö™Ÿâ·ß¼`hØ¢ÎêJvv>|}ÿÀž=W@$Ãô鎘>ݦ¦B‡Æc¬8AinÞŒÃÕ«±ø¬Në]½ú ‚ƒïÃßÿSXX´©ÓºZfæ3lÛvû÷_ƒ®®6>ùd0fÌpjIcŒ5Gœ 4ë×ÿŽ·ÞêŠ7ßìRgu?ŽM›.`Ɖ0 îêmhϰiÓyøù]‡‘‘-z}4ˆofŒ±FŽ5ž€ÐÐh9òiÕyçÎ#|ñÅaÌû&Lè_gõ6¤ìì|lÙr»w‡ÂÈHß|ãüe}Œ1ÖDð]Ãï¿/l4s4d2ÂñãáX½ú rr 0c†#>ýÔFF-…5r?ÿü3<(t¬øDóÄ Ššºw/çÏÿ}ûfÕI}ë×áâÅø b±qÔYß®\‰Á÷ߟ@TT*ƀŋßG»v†B‡Åšøùù «ÂÁƒ1iÒ$¡Ã`áEMýôÓ9ØÙu€‹KÏW®ëÌ™»øé§`¬_ïÞ(¾8:: ß}w/FÁÙ¹;6ož këöB‡Åc¬q‚¢†mÛ¶ª£èêΣGYøþû8{6ï¿o‹½{g¢sç¶B‡ÅcLMp‚¢Fž>ÍÇ¡C7ðõ×ÿ‚¶víŸQrêÔŸøå—lØ0}útªÃ_Ýóç¥Ø¾ý||~G§Nmàç÷ œ» cŒ15ÓxžÔÕ ìÙs-Zè¼ÒdÖèè4|þù!Ìœé¨v±¿};ï½·>>¿ãóÏßEpð"NNX£„ `ÆŒX¾|9’’’ê½ÍgÏžaÕªUuZgvv6Ö¬YSiY~~>V®\Y§í1Vœ ¨‰ÂÂbìÙŠiÓÞ®õŒgϤ˜5kzõê€o¾q«ãkO")ÄW_ùãƒ6ÁÔÔ!!‹ñÙg.j;/†±Ê,Y²S§NEëÖ­1pà@ÄÅÅÁÖÖ‘‘‘ÕÚ~Ö¬Yˆ¯q»¹¹¹X¶lY·SUç®]»ä¿—íÙ³gXºti¶ÇXmð%5qèP Š1c†c­¶'",\x¹¹…ð÷ÿTmÞüOžŒÀÒ¥ ~þyÆŒyµ¹5Œ ¡¨¨ëÖ­Cpp0œœœ³gφžžÖ¯_½{÷ª¬#((óæÍ«çH«§sçÎxøð¡üwuб—ø Š()‘aÛ¶‹ððˆÖ­õkU‡¯ï8{6Û¶ME»vFuaÍ%&faòä˜3ç\]{á?¾âä„5Z%%%(..†D"QX¾xñbÌž=[þ{dd$ТE X[[Ë¥ïîŒ ¸»»#44´Ò6:+++hkkC,cíÚµ•®wêÔ)tíÚ-[¶ÄôéÓñïÿgΜ\ºt ½{÷†H$B÷îÝqâÄ @FF† †ýû÷ÃØØ/^ÄÈ‘#•ƶsçNXXX@__Ó§O‡L&CVV\\\àãã333˜˜˜`÷îÝX´hLLL ‹qøðayÞÞÞ011H$‚³³3’““kºëYsFLpGÞ¢Ž¿ ¤¤§µÚ>,ìêÔi!ýòË…:ެæž?/¥_~¹@]º,¦ÁƒWQXØ?B‡ÄX¥<<<ÈÃãÚëÏš5‹ttthìØ±äëëKqqq åyyy$‹ióæÍ$•JéÂ… dhhHW¯^¥ììl‹ÅtñâE*..®P·D"!‘HD$•Jéòåˤ©©I”””D"‘ˆˆˆþùçjÕª|˜úõë§°ÍüùóÉËË‹ˆˆÌÍÍ)""¢Òº¥R)…‡‡Ë™”ÄÄÄ($(+V¬ 1cÆ(Ä$‹éÀ´mÛ6rrrR¨wܸqôÝwßQRR ””""Š—'(åc{™ dddÈË Dò²¼¼<""ŠŽŽ&mmmzþü9ݹs‡ÚµkGDDdffF÷îÝ#¢ \vv¶ê]'(ÍÏAصk±¸w/>>k¼mi© žžû ¯/† ¯ô`·WQPPŒ~8…}û®ÂÁáuìÜ9 ––&‚ÄÂX} "Èd28;;ÃÙÙðèÑ#Ì;nnnˆ‹‹CBB¢¢¢Ð¹sgùv………>|¸ÊúE"ÂÃÃñõ×_#66­[·†L&«°^BB¬­­å¿khh K—.€ääd…2èÖ­›üN#MMM˜™™U«¿ZZZ01ùÿ¿áòÿ[ôõõåËE"´µµ+¬7bÄ„„„`РA066†««+–,YcãÆñe¥Lx<E`¾¾—1hzõ2¯ñ¶«VÁ_%Á×w: [ÔCtªÝ¼—µ¸ƒŸ~òÀ¯¿Îáä„59°³³SXfaa•+W"!!yyy044„££#^[·n­VýK–,··7¢££qëÖ-´lÙ²ÂzÈÊÊRX– 044Ä“'Oʲ²²`dôbNZC€!"¬_¿YYYð÷÷‡T*ÅØ±c4Ö¸q‚" „„'¾?\ãm/^ŒÂ–-!X¹r,zô×CtÊI¥Ï±lY ƌ٠këö¸té+Œ÷FƒÇÁXCpttÄ£GîÖ!"øùùÁÎÎpqqAhh(Ö½ï{ÖÇÝÝ///222ðòòB__Ÿ 0aÂ7nLÓ¦M¹|ù2ýû÷§K—.O]=óhl66%ïÍ-Ê AƒX¹r%žžžXZZrñâÅbW& BQd’$IåÄë(55‹Æ§3yò;%ÚûD­Öàã³ŒØØT_¦7ÖS©ÔüôÓ!–.=JË–Îüüó{Ô¬)Æ“…—“¯¯/~~~Ï|LNN—.]"55•š5kR¿~ýBC'ÑÑÑ`ccƒ»û_>âãã¹rå M›6¥J•*…êNMMåüùóXZZâééIdd$¡¡¡´k×®@ ¨T*ùd#]ºÔgðàV¥ÝnߎaÜ8nߎaÊ”î Ö¹\ôšByêÕ«½zõ*ï0¡Ô‰¥üúëq:wvÇÁ¡Ú3•—$‰qãüÑ×WðÓO>¥]~{+Wž`ΜýÔ¯_‹#G¾K‡…—šZ­!&&…èè$îÞ}@dä‚‚LpqI+ïÐA(†HPÊØµk‘\ºÁöíŸ<ó1K—åäÉ víú SÓÊ¥Äǧ1nœ?§NóÅ]øøãŽ(b5ºP±ååi¸?™ÈÈÚ$$*êöñ½{ɨTj”J66UÈÌT I¢GP**‘ ”±uëNáæfMË–NÏTþÒ¥æÍ;ÈW_½CÆv¥Ûñã·7ΟʕõÙ¹óS5²/Õö¡$²²r O ""‘°°""O$""èè$òòòw^50ÐÃÆ¦ ¶¶U©S§:mÚ¸`k[[ÛªØÙU¥zuSär™v “HPÊPRR»w_aúôg?NIÉdôèßh×ΕQ£Ú—Z\*•š~ØÏòåÇéÕ«!?üГòÙ™Vx½=xADD"áá ÿ&#ùIHxxþxÙÙ¹,\èK»v®:­_xõ¨Tj"#pçÎÉÇÃD$>>^ˆR©ÀÞÞ'§Ô©SGÇê8:Zâèh‰……q9ŸAÑ|}}ñ÷÷/ï0„g >¦^OâëKˆˆHäèÑ@V®üÔ²Ó¦í"11mÛ>Öir"IË—gΜ}´mëÊ‚¨V­b~på#))ƒ  XBBbµ="wîÄù@»D·F 3œœò{CÞ|Ó'§8:V)‡d>ûì3±á™ T`"A)6œÁÊÊŒ7ßôxb¹?ÿ¼ÉÆgY¹r0VVf:k?55‹qã6ñ×_|õÕ;ŒÝAÜGç5“Bpp,ÁÁ±ÅÇíÛ1$&¦`ddðï0Luz÷n„££¥vXÆØ¸ìîÿTÚš5kF³fÍÊ; AŠ!”R¦R©Ù¼ùC‡¶yâ7̸¸4&LØ‚Ïtëæ¥³ö¢ùè£udg«Ø¶íš5«£³º…ŠK£‘ˆŒ|P ÉÿKjj6UªáâRgç¼õ–..V89Ybc£»»Ù ‚ "A)Eáá œ>̺uÊ-ÃŒ{;¶3;¼p›aañŒñ÷î%óÛoÃñö®÷Âu e'55›‚Ã2ÁÁ±DF>@£‘P*88TÃÅÅŠ®]=quÍOBœœ,Åæe‚ ¼RD‚RŠüýÿÆÊʌ܊|]¥RóÉ'©W¯&ãÆ½ùÂí8pÏ?ßD:Õ9xðsìì,^¸N¡t$&¦è y8i5&&€J•”89YâäTƒ÷Þk†““%..V88T{Ö‚ðZ J)Q©ÔlÙrž?lYì䨹sžÀáÃ_¼ÐM•JͬY{ùõ×ÿñá‡-øþûÞb¬ "::©PKRR¦¦•prª‹‹íÚ¹ââb…³s lm«"—‹•V‚ ¼¾Ä§˜Çbk[µ@ûáÃ$&¦óÖ[H’ThYïéÓ!,_~ŒùóûãàPí¹ÛNLLgĈu\¿Å¢E¾ÏtŸA·Ôj ‘‘ %!!!±¤§ç`aaŒ««®®VtïÞgçüÕ3º\N.‚ð*;ÉêÀÈ‘¿±wïU:vtãí·ëãí]ñã7#“ɰ·¯Æ®]—X¿~Ûùw)îÔi>^^¶¬^=ô¹Û½q#ŠaÃÖ PÈY³f(nn5uuJBT*5wîÄJBBBâÈÍÍÀƦŠv8æaââRƒ*UJç~J‚ ¯*‘ èÀøñ›Ù¼ùr¹ ™L†F#agW•V­\8}:ˆˆˆDd2ݺy1yò;üðÃλÃÑ£‹ýàÊÎV=qÒãΗ™0a3M›ÖfùòâP‡23s )˜„ܾÃÝ»‰äåiP(äØÚV-”„89Õx¥62A(ObˆGÌÍ+£¯¯÷ï·èü|ïîÝDîÝ;¯Ý"\’$¸Îש^ݘٳû›T$'gÒ³ç/øû,´i–Z­aöì},[vŒ‘#Û3eJw±„ødeåróf4×®Eþûs—ððòò4(• -qv®A¯^´Iˆ““¥˜ã#‚PÊÄ»¬ðøÎñ’„69yH­Öθq›ˆˆxÀ°am ­Ê˜ŒóçC¹t)œþ¹‡J¥ÆÔ´õë×ÂËË//[<=m±·K²A*у¢FF/å&]‡б£›NçÊdg«¸v-’óçC¹p!Œ‹ÃINÎÄØØ€† íéß¿)M›Ö¦qc õuÖ® ‚P6D‚¢††úÚù%Éx8iöqr¹œŽë²bÅ`*UR²oß5öï¿Æã#n„žžœ  XÝ^ÊÂÃøôS?.] çÈ‘‰¸¹Y?w]‰‰é\ºþïMׯG’››‡••M›Öæ‹/ºÐ¤‰îî6bÒ° Â+@$(:P¹ráoèr¹I’Šú‘Édøú6cöìwQ(ä$$¤3qâ–bëÏËSsãFsç`Ê”îº ½Tddä°páa–-;¦J¹~=²D JXX<.„sî\(/†‡L..V4mZ›AƒZÒ´im±¿ Â+J$(:`dTÔ‚T¨7dÈdðå—] Ü{端¶‘žž[Dùÿ¨Õ–.=J³fuèÜÙ]7—‚]».óÝw»HJÊÐö*)• n܈ÂÇç"IHH×.ñ}ø;..J•”xyÙòÖ[|ûmš4qÀÜܰ,OGA('"AÑ“‚·³W(ätíêÉÞ½WµÏ=ÜÄíÇ} |PïÙs…ƒo<19üy•JÍ—_náÌ™)n^E`à}&OÞÎ… ¡€¬Àù¨Tj.^ òïÖ{ýz~rõjþ﨨$ìí-ðò²cÔ¨Ž4ib§§­ØoDá5%ÞýuàÑ!¥RN½zµ¨_¿‡Ý@¥R£PÈQ*¬Y3”öíëjËÆÇ§1qâ¶bëU*õP©ò05­ÄÛo{ѵk}Ú¶uÅÀ âü³¥¦f1wîAÖ¯?…L&ÿwH«p²xŸ–-g‘ˆ$IÔ¨aFƒ¶ М ò—ûŠÝpA„‡*Î'ÝKì¿E†R©dåÊAÌŸµZƒžžSSüýGáéi[ฉ·’•UphçaO‰¥¥)Ý»7àí·ëÓ¬Y 7ñS£‘غõ<Ó¦í&33µZŠßF¥RÓ¦ Ó§×ÃÓÓ–5LË.XAá¥#øo¸EâçŸ}°µ­Êþý×Ðh$jÕ2cË– m¶yó9þøã&zzròò488T£GtíêIýúµ*ì^—/G0yò6î;øqr¹ŒFì+ôüA¡â(´“¬¿¿?¾¾¾åÏKËÚz*U ÖÖcˆ]F“U ¬\nD RÅ“DvvyyIev‰È冘˜´ÂаäI†¾¾‚>hÉÌ™}J!2Ax1õËÀëÌÏÏ”wB9*¶eêÔ©eÇKï÷ßÓéÑÃ=½©¤¤h8{6 ooCôô&*{óf.288èadd8•}ÀÏ!7W")IC||99’¢&9YCjª†ÜÜü+ˆþýû—wBPl‚Ò¾}û2 ãåW·n:VVù[Ч¥åÒ½»¹¼èoe¯â¥ÍÌT“Á‘#çØ³ç(Æ%88Žððx’’2¸u+†¼<¸ŸP!õë×~ýú•w‚ üKÌAÑ‘‡É €‰IÅZ\ •Ô©cNX˜ééçY°à¿o¢9„‡'–@NŽ ==ƒrŒTAxˆE(uFF¸»ÛàînSÞ¡‚ / Ñ×.‚ B…#AA*‘ ‚ ‚PáèdŠ¿¿?juþ.¢2™ cccš5k†µuþÝkÓÒÒØ¿?ï½÷^¡c5 ~~~X[[ãíí]èõ]»v¡ÑhèÓçù÷ÏxRûÏ"''‡¿þú‹[·n!“ÉðððÀÛÛ¹¼tò»Í›7Ó¡CjÔ¨QàùGÏ#::š7nÐ¥K—R‰A„âýðÃäååùïyææætíÚ•ÚµkkËlÙ²+++Úµk‡ŸŸaaaEÖåììŒO¡ç£££Ù°aݺuÃÃãtNäIIIüúë¯LœXxkA(:ù„]·n·oß&>>žØØXŽ9ÂàÁƒ¹}û6ìß¿_[~þüùÜ¿€¼¼<Ö¬YÃÏ?ÿLNNNzãââøå—_Ø´iÓ Å÷xû%ϰaÃ8xð VVV˜™™±zõj&OžüÔü=¯ß~ûM{}õèyܽ{—={ö”Jûå!;[ERRFy‡!ÏdÚ´i\¼x‘¨¨("""Ø´iõêÕãâÅ‹Ú26làðáÃ$$$ETT~~~øùùi'&&ÙÆÀ¹zõ*zz¥·–aøðáÚÄ)%%…Õ«W—Z[‚PR:û/ßÇLJúõëkýõ×ìÞ½›‰'beeņ ´¯?žÞ½{8Þ‚sçÎѶm[ís'NœÀÆÆ†ìììŠíñöKbÁ‚¸ºº2eÊín“}úôaàÀœ:uŠ6mÚ¼Pl%ñ"çQ©ÕNž â÷ß/±}ûE–,ùÞ½•wX‚ðL¾øâ Z·n­}ܽ{w–.]Êš5k •;v¬öïáǰ|ùò'Ö÷î]fÍšEݺuŸXîE:tˆ1cÆààà ýR)A©ÍA133C©Tù]‡_ý5Ó§O'99™éÓ§sýúumùöíÛsìØ±u;v¬Ð†qGŽÁ××—N:Ñ·o_6oÞ¬}íÌ™3 0€.]º0wî\–/_ιsç ´péÒ%LçÎ1bD±ÿSÆÇÇsöìYFŽY`+ì*Uªðå—_bll\ |bbb¡^ ’¼þ4Ÿ‡$I,Z´ˆwÞy‡Þ½{ãçç@rr2_~ù%þù'ݺu#""¢ØëöxÙ™3g²uëVmÉÉÉŒ9’ôôôçŽûQ’$qáBß|³ƒúõ§0`À vᆲ“º¡>>ÄÅÅáããÃÉ“'‰¥{÷îÚú?Ž——Ô­[—Ý»w<µ½)S¦P½zu èСQQQ:¹&ÂëGg ÊÙ³gÙ¿?ûöícÉ’%ܸqC»]qNNW®\`„ ˜™™1aÂêÕ«§=¾mÛ¶\¸pAÛ[GLL 6Ô–ÉÌÌdîܹŒ=šC‡1uêTV®\Irr2÷ïßgæÌ™Œ3†={öP«V-¶mÛFjjjöãããùî»ï>|8ûöí£mÛ¶L:µÈášÛ·ocaa¥¥e¡×Ú¶m[ 6€%K–Xì5zÚëOóèy<ŒO¡Pðûï¿óý÷ß³iÓ&Nœ8J¥âÆœ:uйsçR¥J•b¯ÛãeÛµkÇÞ½{µm;v ccãBÉXIÞcöì}4j4ž=aãÆ³$'çߣH¥Ò<åhA¨xöíÛǪU«X¹r%Ÿþ9§Nb„ :©{Á‚ØØØ°hÑ":uêDvv67nÜ(PæöíÛ¤¥¥¡R©8yò$ÿûßÿ äæÍ›ìÞ½›£GEŸ>}˜5k)))ôíÛ—wß}I’X±bÕªUcÅŠ4oÞœ¬¬,í—ÄØØXzôèÁçŸNjj*sçÎeÀ€ܾ}û‰íýñǬ]»–³gÏ’€©©)³fÍÒÉ5^?:â $::ÈO$rrrˆˆˆÀƦàæ\ÆÆÆÚ‰´zzzäææ`bb‚‡‡gÏž¥C‡?~œ6mÚ˜ˆªT*Y²d ÎÎÎX[[£§§GFFÇŽ£I“&´lÙ€°sçÎBq;vŒ h»fß{ï= ¹¹¹…¾ýdffbhh¨£+¤{ÆÆÆŒ1===êׯOïÞ½9räõêÕ#''‡±cÇbaaJ¥*öºéëë(›——Ǽyó ¥N:üõ×_ôìÙó¹â‹ˆHd×®ËlÛvÐÐx”J*Uþ·¬‡¿áeuîÜ9BBB€ü ìYYYâäôâ÷Ö233C.—cfföL½2¹¹¹L›6 }}}j×®§§')))lÙ²…öíÛÓ«W/&NœˆžžYYY˜››#—Ë177×öv?´k×.6lÈàÁƒèÙ³']»veË–-Œ1¢ØöÖ“““ƒ‰‰ þþþ¨Tª¾ÂëIg ÊСC ÌA9rä?üðƒ¶[ðY<æéСÇŽcĈ^W*•ܾ}›•+W©©©¶ç#&&[[[mY™L¦]Eô¨˜˜jÕª¥}¬§§Çûï¿_dñÈŸcöÓO?ñÓO?qùòe~ùåúöí«ýâ$%¡³%++K;‘2++‹ 6P»vmŒŸy‚¥±±1^^^Ì›76mÚúàŒÇÞÞOOO ¿#33ÿN¹7æ‡~`ذa˜››@DDD¡:7nÌ÷ßOrr2æææ2kÖ¬"‡ƒ éÝ»7?þø#óæÍÓö¼œ={–sçÎñË/¿P«V-mOÈ?ÿüC»víhÐà¿7»§½þ,×(òYLL gÏž¥E‹dff²gÏmWî³^·¢4nܘðûï¿óí·ß>5Ö‡llLxûíJÌ™³€%Kö²}ûE¢ í<‰XÅ#”—ü÷‰KtLzz:ÉÉÉÚ¿gΜ‰‡‡G©$'J¥’””䱯ÄÄ`ggWä*Ç%''†\.ÇÙÙ¹ÈɳÉÉÉj‡tJúúÓ<~!r\@@ÆÆÆÚI°E)îºyyyYþáêŸÇç=Í‘#G˜9sf‘«¢nÞŒæ÷ß/²}û%ÒÐÓûo~ ˆ¡üÈd2üüü0`@y‡R¬¼¼<þþûoš7o^¢ Ü‚ƒƒ ÃÍÍ­À\½øøx®\¹BÓ¦M133#))©@¢NPP…æ¤'''‡óçÏ“——×3½¿>îeø÷J_émQø™LVàCÕÜÜœ&Mšä½<:YöiÌÍÍ -+.ªÌ‹¼þ4E‡¾¾þSã‚â¯Ûã’““¹yó&Çç×_}¡xçáaƒ‡‡ S¦ôàܹPvíºÌΗIOÏJgW^AxU<ìÙ|ÎÎÎE~©^½:o¾ù¦öñ£É äoÞöx/÷Ӕ閫«L”²àìì̤I“ðóó#-- æÍ›WªÛD¿Šbbbظq#Ÿ|òI‰¸’Ëe´háH‹ŽÌœÙ‡ãÇo±k×e Ÿ¯gIAxõ¼RŸÞ­[·~îoB¾ºuë>u n]R*tîìNçÎ¥7ŸGAxùˆM'AA¨pD‚"‚ B…#AA*‘ ‚ ‚PáˆEA„ ç•ZÅ#”¿Ü\ ¥Ò’}û®ž@pp,ݺy‰U:‚ B‰ˆEGΜ‰¢eËZ&R·nÕB÷zTff††/ï¥ÏÈP“All±±éÄÆf•Nll:*ªUÀÈ‘¿’ï¿ß¬¼CA^2Å~JNŸ>½,ãxé{²oßFÒÓÍÉÈ0ÁÆ& …¢èä=x`Izº9•+g`nR™[ÆÑ>;FFR’%™™&df#—«Ñhäç`ù;ÀJRÁ„ìáV÷2™ŒúõKgÃ7AÐ%___víÚUÞa‚ð¯B Šýúõ+X^j·oË wÃÝ=€cBBêãé©iáä£Z5‰Ó§ ÉÊ2äÁƒêåQ­Z&U«fadTñn¤gn.ãÆü›)>LNòsâ{Šlm«`ddPŠÑ ‹ïyK¿~ý°³³+ï0„rVèfBÉI’„Íxºt©Ï¡C7P(ä|ûm>ú¨m¡!ŸààXÚ·Ÿ«íiP*å¨TjÕªJÏž éÒ¥> Ú!—?9(K'O1yòvÂÃÑh4O-¯PÈéÙ³!‹PÑ ‚ ¯‘ è@jj6uëNò‡4êÔ©NXX<„\.£S§z,Zä‹©iåÇ-]z”Ù³÷¡Ñü'P*¨TjªV5¦{w/ºvõ¤ysG”JåM¥R³zõIæÏ?€J¥)p7âÇ)• Œ+Ñ -õë×ÒþØÙY{Œ ‚ €HPtâÑòo†'—ËÈËËïeÐÓSP½º kÖ ÅËë¿[«Õºu[H@@t±ô“#£Jx{»Ñ½{:wv/÷d%66•3ö°sçeärjuÑ=*ƒ·&55‹7¢¸s'FÂÜÜP›¬xzÚR¿¾ Õž8±XAx½ˆEŠJPïQ(äÈd2¦OïÉ!ÿÝŠüÎ8:vœ‡JU|OÄ£ÜÝm8pàórOPºx1Œ‰·‹$I<ú_“L&#(hŽvJFFÿüs7¢¸~=’7¢Ž%/Oƒ‰I%<=kÑ =ÙÓ°¡VVfåtV‚ By Ф¤dâæöÍ3••ÉdtéRŸÿû¿÷´C>+VgÆŒ=…’šGÉå2ŒŒ*qôè—ØØTÑIܺ¢ÑHlØp†9sö‘•¥Ò&[vvUùûïoŸxlv¶J›´\»É•+Ç¢ÑHX[›Ó°¡Ý¿ ‹=^^¶ê—Å) ‚ åL$(:DÓ¦ß?sy==9––¦¬^?ä£VkèÙsׯG;Ô#“ÉX·nX…ÞðìÁƒ æÍ;Ȇ g$‰wÞñâ×_—¸žôô®^½Ë•+\¾ÁÕ«w‰ME¡ãâbE£Fö4jdGÆö8;×@¡" ‚ ¼jD‚¢%MP ?Iÿ†|ÂÂâéÐa.¹¹…¹\Î!­˜1£Ž".]7oF3|ø† kËGµÓIÑÑI\¹r—˗ùrå.7nD‘™™‹±±žž¶Ú^–Fì¨QC ‚ ¼ìD‚¢Ï“  Y³%:FOO‚™3ûâãó?—£gÏ_¸v-¨çἓ­[Góí·; ºÏâÅâí]¯4N㥗––͵k‘\¾Á•+ù?qqiÚ¡!Oχ+‡jáînCåÊ"iA¨¨D‚¢÷éÔiÞ3•Í_J+Ѧ  (´R%<<æ’““W`ÞInn“&mcÛ¶ LšÔ•1c:‰e¹Ï ::‰Ë—#¸v-’ë×óW¥¦f¡PÈqr²,°ÜÙÝÝcc±ë­ BE (I‚R¹²’ñãßbÔ¨ÅNî\³æ$S¦üÎÈ‘í™:µg¡×¦MÛE×®žüüóûbèâ9DD$Xê|ãFd —ço²çáQ <Âȑ밲2cíÚaØÚVÕéù¼Ž¢¢’´IK@@47oF“€¥¥ îî6¸¹ÕÄÃÃwwêÔ©.V ‚ ”"‘ è@@@4;ÿ¨}ìâbEÍšæ\¾Njj6?ÿüï½× Èßâ~Þ¼ƒ:4žºu­Ÿ«ÍÈÈ ²š˜˜V¬L«VN/~"B‰‰éDóÏ?÷ ˆ& šüå*URâêj…‡Gþ|–zõ¬qs«‰‰I¥ò[á• 8>”Ñ£7àëۜ޽Q»vubcSiÚt:>>o0~ü[X[›kË«ÕzõZ„J¥fß¾qÿ.9.¹ÌÌ\ÆßÄ×™6­C‡¶yúA Q©Ôܺõ0a¹G`à=nÞŒ&55 ™L†½½Å¿½-ÖÚÞ–Š¶±ž ÂË@$(: IR‘V ZENN›7*ôZhh<ÞÞó3¦ãÇ¿õBm/^|„¹sЧOcæÎí'V§”ƒ»w ü¯§% à‘‘$ SÓÊxxäÕ­k…›[M\]­Jm ¶ «@$(¥èС ¾–³g§9OdåÊÌšµ—>ÇÝÝæ…Ú:vìcÆlÄÚÚŒU«†ààPí…ê^\ZZ6ÿüs€€hmòCff.2™ ;»ªÿ&-ÖÔ­k››5µkWî5A„W‰HPJ‘J¥¦I“é Ø’ ºz]£‘èÛw1iiÙ<8þ…où€>ZGxx‹ùVèmñ_W¤ím¹u+ÿ'0ðaa ¨Õôõõpq©¡MZêÕËïmytˆPáu ”R6cÆöî½Êß‹\^x(<<oïùŒÙž/¿|û…ÛËÉÉcòäílÙrž±c;3aÂ[bµÉK ''  mÒòÏ?÷¸u+†ØØü•Dææ†¸¹YH\\\¬Ä¤\A^Y"A)eÁÁ±´k÷›7¢m[×"ˬ]{’©Sw±oß8<=muÒ®¿ÿß|óÍš7wdéÒ©RÅH'õ e+99“€€{Ý'00¿·åöíÒÓs°µ­Š««..V89Yâêj³s ±áœ /=‘ ”ž=ÁÊÊŒ+ùº$Iøø,#>>?þ˜€¾¾žNÚ½v-’>Z‹$ÁªUCðòÒMò#”/I’ˆŒ|ðooK~¯KHH,!!qdg«°±©‚““%uëæ',..5pv®™™a9G/‚ðlD‚R¶n½À—_náâÅ©T¯^ô®¤wï&âí=ŸAƒZóÍ7ÝtÖvRRŸ|²‘3gB˜=»/4×YÝBÅòp~KPP ÁÁ±ÇrëV !!±dfæP£†™6Yqq±ÂÅ¥®®V¢‡M„ G$(e ;[E£FÓ=ºŸ~ê]l¹Ï2yòvvïþŒFìuÖ¾Z­á§Ÿþ`áÂÃøø¼Á¬Y}ÄRä׈$IDE%ý›°Ü'$$Ž  üÄåáF‚ÆÿÕÀÅÅ''Kœ-©QÃì)µ ‚ ”‘ ”‘©SwqèРΞRädYÈÿ 0`ÑÑIüùçTª¤Ôi ‡ðÙgþX[›±|ù@\\¬tZ¿ðò‰ŽNÒ&,AA±Ü¾ßû’’’ €±±uêXR§Nu-qrÊÿ»Nê%ÞÇå—_~áÔ©S¥q‚P¦¶nÝZÞ!¼D‚RFBBâh×î6løˆŽÝŠ-wï^2;Σÿ¦|ÿ}oÇĨQëùçŸ{ÌšÕG»ý¾ <*..XBCã ãÎxBB∌L$/O€µµ9ŽŽÕÿMXþK^lm«¹rÌ××úõëWÖ§#:±mÛ6 ÿˤPúD‚R†úõ[‚‘Q%Ö­öÄr;w^f̘øû¤]»¢Wþ¼ˆ¼< sç`Ù²£ôêÕˆ9sÞËU…g¢R©¹{7‘8î܉#44ž°°üä%>> ¥RAíÚÕqt¬®ýíèhÉ?NE©ÔàççWÎg!ÏÇßß___‘ ”‘ ”¡Ý»¯ðé§ùûïo©YóÉo}òÉΜ áèщ¥6ñĉÛ|úéFLL*³|ù@êׯU*í¯‡ÔÔlBCó“–8mÏKhhîE >¼Øä¯¬Ý¿ŸF1cÆ ªV­Š““{÷î¥nݺ\ºt©¼ÃÊ™èA)2™ŒAƒZ2cÆ^&O~‡ªUŸ¾Œøý÷›sòd0Ÿ~º‘Ç¿,öž>ºäæfÍŸ3þ!&MÚÆÜäÇ}ʤmáõ6vìXíßÇ(ðA£Óö¬­­9pà}ûöÕ>·}ûvœœœÈÌ|ú¤qnß¾­Ó˜JË¡C‡3fLy‡äÿÛÚÙÙ±k×.”Êü³'OžÌ˜1c>|8W®\)ç…ò$zPÊIÿþo ¯¯Ç–-çŸù˜¹sûahhÀgŸù•Ù27}}=¾ù¦;v|Bpp,:ÌåÀëeÒ¶ <ͪU«°··ÇÈȈ!C† Ñ䯎»qã­Zµ¢R¥J¸¸¸àïïÿÄzú÷ïÏ–-[ <·uëVú÷ï_à¹M›6áä䄞žÖÖÖÌŸ?€ØØXºwï@bb"ÞÞÞøùùáè舑‘ƒF­.z™F£á³Ï>ÃÔÔKKKæÌ™À¨Q£X¹r¥¶\ZZMš4!<<ü©çø×_áî¾>5ââÅ‹øøø‡'Oæ÷à?~/// ¨[·.»wï ..Ž·Þz‹õë×cnnÎ?ÿüSdü999~?«:IJeË´ÉÉCÓ¦Mc̘1äååGq1‡‡‡Ó¡C‡uùøøpîÜ9Nž<ɘ1c;v,¦¦¦XYYñóÏ?—(f¡ŒIB¹ùî»R“&Ó%•JýÌÇ\½zW²³› -^üW)FV´´´léË/·HÖÖã¤Ï>ó“RR²Ê<áå5`ÀiÀ€%>nذaÒ°aà é·lÙBûöíéÕ«•+WfâĉŒ=š¬¬,ÌÍÍ‘Ë嘛›£T*Ùµk 6dðàÁгgOºvíªíMÊÊÊbñâÅ´hÑ}}}$IâСCtëÖwÞy‡š5kræÌúôéÃ’%K8räNNN|ýõ×DFF{Í32201)8\ìííL&Óþüý÷ß…â8pàÀc~CCCæÎ‹¡¡!­Zµb̘1¬_¿þ©Ç åC$(åÈÁ¡ÞÞîÏ¼äø¡Q£ÚÓ¦ ¼žÔÔ¬§ cÞÞõ8zt^^v¼÷Þ2¦NÝENN^™Ç!¼Þ E•w@çÖ­[888h6oÞLrròë{t˜§¨á.]ºÄ[o½…££#½{÷Ö)ÅÚú¿zOÚÙÑѱÀ‡‡‡÷ïß§zõêtêÔ‰;vÀÉ“'µ+žtŽááḸ¸hëS*•Lš4 CCÃBmGEE( àêêªM,är95kÖàÔ©S¸»»³jÕ*ÆÇ?ÿüÃøñã©ZµªöØfÍš±~ýz®\¹‚‰‰ íÛ·§OŸ>Ež·••aaa®áîÝ»IJJ")) íóÆñ´˜Ÿ¤N:èëëk{xxh@¡â J9<¸g΄xÉd,X0€Ü\5Ÿ¾©\¶]®ZÕˆ_Ì‚زåo½õW¯ŠÿÑ…ògjjJ›6m/ð³lÙ²'׫W/Ž=Ê7¸{÷.íÚµ+ðú®]»øæ›o˜2e AAA\¸p¡Èý’JH(¸ c\\œöCÀ€lß¾íÛ·ÓµkWíóO:G“BÉØï¿ÿ^dŽ©©i¡ö133 &VJ¥âããyðàyyÅ)Q«ÕH’„žžÆÆÆE–iÓ¦ ™™™ìß¿_ûœ‘‘ææædffH8ãi1?.##Cû÷ãÇÅÇÇêÅ*‘ ”³‡KŽW®PâcuéÝw›pôè$,-MéÑc!3fì!;[li.”oooNžñ8sssÚ¶mËСCéÓ§ryÁ·Ç¨¨(êÕ«G›6mP(œ={–ÔÔÔŽ7<<\;´”––ÆŠ+èÚµ+½{÷æÚµk,Z´H;¼ó´sìܹ3{öì!..€sçÎñÁ®z¨sçÎ>|˜ÐÐP ²ïŽ;ðöö.T¶Y³f\¹r…Y³f±cÇœœœ˜:u*ÑÑÑÚ2ÇÇÇLJ-Z I§N*v¥jÕª|ñÅ|üñÇ–ÇÅÅñþûïïÓb~8äöàÁí¹‡„„hŠŠÒN¨MOOgåÊ•Ež«PA”ïA’$iãÆ3’Ý)&&¥ÄÇ.YrD²³› ?Z ‘=;F#ùûŸ•\]'K-ZÌ”NŸ.×x„ŠGדd EçZµj%íܹS’$Iúé§Ÿ$SSS©S§N’Ô¯_?I­.<ýá$Ù°°0I’$iãÆ ?~\’$I:vì˜v’ìÝ»w%KKK©mÛ¶’···ôöÛoKŽŽŽR= M’}ü­µ]»vÒ¶mÛ µ¿wï^©yóæ’³³³Ô¶m[ÉÊÊJzûí·¥ÜÜ\m™þýûK¶¶¶…âÒ9Ž;VªV­šÔ©S'ÉÔÔTZ¼x±ö¸† J­Zµ’.^¼(I’$}÷Ýw’¹¹¹Ô¹sgÉÂÂB=z´$Iù“S¿ÆºwïžôÝwßIîîî’$IÒ¶mÛ¤¶mÛJÛ¶m“T*U±Ç=J­VK'N””J¥äêê*5nÜX²¶¶–~ûí7©OŸ>ÒÙ³g‹Œ£¸˜ÕjµÔªU+ÉÞÞ^êÑ£‡ÔªU+©U«VÚI²ööö’»»»Ô¦MÉÚÚZj×®”•õì“ýÅ$Ù²%îf\äææÑ¬Ù ú÷ƒÉ“ß)ѱ’$1dÈn܈âÏ?'`aQtwjY‰MaòäüñÇM|}›3eJLM+•kLBÅðpþDYÝÍ8::š€€lllpww×I©©©œ?KKK<==‰ŒŒ$44”6mÚ””„…Åóí¸œÍÙ³g133£Q£FÏ|Ü“Î188˜°°0ÜÜܰµµÕ>Ï•+WhÚ´)UªTò{q‚‚‚ppp(4¿ãiÔj5 …BûûyÌÂ…‡K!º’ëÙ³!'N|EëÖÎ ¶–AƒV•TÞa ‚ðš255ÅÉÉ©¼ÃJ@$(„¹¹!>>o°|ùqòòŠ_ºXOO[¾ÿ¾7ÿ÷ò¿ÿUŒ-·«T1â—_|Ù²e4aañ´oÿK—}®óAxmÛ¶eóæÍå†P"A©@>ú¨±±)Ͻ•ü A­èÞ½Ÿ|²‘{÷ž¼çCYjÝÚ™#G&2fL'~üño¾ù#çχ–wX‚ B&” ÄÞÞ‚®]=Y¼ø¯ç®ã§Ÿ|°´4aذ5jó4¥RÁ¸qorôèD¬¬ÌèÝ{1Ÿ¾‰ØØ_¦)‚ ¼zD‚RÁŒÙ›7£9s&äé…‹P¹²>«W%,,¯¾*~kïòâàP ÿ‘,[6S§‚i×nË—G¥*úFj‚ ÂëI$(LÆv´léÄÒ¥GŸ»‡j,]ú!Û·_díÚ“:ŒNwzôhÀÉ““:´-óæ C‡¹;v«¼ÃA*‘ T@#G¶çر[Þî::vtã‹/º0mÚî ;ߣR%%'¾ÍÉ““©[×_ß|ðÁJÂÞ~° ‚ðJ Jäí]ºu­Y´èùç¢|ö™7;»3bÄ:bbо“jE`cS…U«†°}û'Ü»—L»v?ðÍ7;xð ãé ‚ ¯$‘ T@2™ŒÏ>ófïÞ«„…Å¿P=ÿ÷ïcffÈG­«ðóý µjUy¡º`èÐ5L›Ö“aÃÚê(ÂÒ—Æ‚°qãYœœj0iRWÞ|Ó½D÷Ï*___üýýË; Axaâc³lˆ¥ËËÓЪÕ,:urcöìw_¸¾¥K2gÎ~6løˆöíëê ²ǼyØ¿ÿ:6|ñE:wÖÍ àA„ŠGÌA©Àôôä|üqG6o>¯“ Í>þ¸#}û6fԨߎÕA„eÇÉÉ’•+ó×__P³¦9ƒ¯¦k×ÿK“A^Q¢¥‚ËÉÉ£yóôéÓ˜o¿íñÂõ©TjÞ}w ññiìß?Ž*UŒteÙ»~=’Ÿ~úƒÃ‡hÒ¤6Ÿþ&:¼\½B‚ BñDJg` Ç¨QX¿þŒN–Ý*• Ö¬ŠZ­aäÈß*üÊžâxzÚòÛoÃÙ¿ÿsLM+á뻂Îd÷î+¨Õâf„‚ /;‘ ¼>ü°%z¬Zõ?Ôgaa̺uùv-’o¿ý]'u–—† íØ¸q‡““%cÆl¤uëÙüöÛé u/"A¡dÓ¦M›VÞAO¦T*ÈËÓ°rå l…Þ ×Y½º ®®VÌœ¹ssC6´×A¤åÇÒÒ”nݼèÛ· é,^|„ß~;J¥ÁÉÉCCýòQA(‘ ¼$ÜܬYµê$r¹Œ-uR§££%•*)™1c/68:Zê¤Þòdnnˆ·w=>ø %*•šU«N²dÉQ°²2ÃÚÚ¬¼CAž˜$ûY¸ð0Ë–åܹo133ÔY½“'ogëÖ lÛö1½Ü=)ËÎV±sç%Ö¬9E@@4 Ú1hPkzõjˆ¾þ‹÷D ‚ ¥C$(/‘ôôZ´˜‰¯os¾úêÕ«Vk6l-—.…³wïXªé¬îŠäâÅ0V¯>É×15­Lß¾ññi†››uy‡&‚ }—J/‹ÔÔlöì¹Â–-ç¹|9 #ºwo@¯^hÒäÿÛ»ó¸šòÿà¯ö½n«n mZDQQ “5ŠbdËL¶aÆÌ4|›Á0¶±Ä0 ci!”eFÖìÊ®D¥Eû®º­ŸßýÜJŒ:-ïçãÑcêÜ{ÎçuÝלåsõÚÍ©0Bi.TPZ±Ã‡oaÁ‚ \¼øôõÕ›dŒ_~9íÛ/`×®ipt4k’1Z›ää\„…Å ,,±±éÐÑQÆÈ‘V=Ú ]ºhqBÚ*(­XM àA«Ñµ«6üý'6ÉŒ1üðÃa¢£“!--~ý 1hœœÌ›ä.,Bií¨ ´Ó§ïFbb6NŸ^Ô¤§ Jáææ EE™&«-ÊÊ*FDÄcœ?ÿ/Æ¢¨H## 8:v£côéc@3ØB¨ ´ Ù8ðW¬^íÞM:VzzÆŒñ‡²²‚ƒgÓäe©ªª·n%âìÙGˆˆxŒÇÓ!''…¾} akÛvvÆ05åÓ-Ì„v‰ Jâë{áá÷qùò÷‘‘lÒ±RSóáææ Ì¢’ò ¼xQ€ bùQQñÈÉy 55yØÚvÆ€Æèß¿3:vTå:f›qýúu$''sƒ4¸q㸎@8@¥ ÉÍ}‰~ýVàË/aÞ¼ÁM>^rr.ÆŒñ‡¶¶2gBNNªÉÇl/cˆMÇ¥KµeåêÕg())GÇŽª°±1€!úô1h²ùoÚ///rƒ4½MµOTPژ͛ÏÂßÿ¢¢|¡¦&ßäã%%åÀÍm :uRE@ÀŒ&?rÓ^UVV#&æ9¢¢žâÆܺ•„’’rhh(ÀÆÆ½{ o_C˜˜ð!*J§„ÃËË ÀqRŸÀÀ@xyyQAi§¨ ´1A%ú÷ÿÎÎæMòA‚ï’ 7·-04TǾ}_PIiUU5xð ׯ'àÚµg¸q#ùù%PT”†¥e'ôê¥KËŽèÕK<ž,×q[$*(-”ö JtðàM,ZŒˆˆÅ04Ôh–1Ÿ>Í‚››?ÌÌ´ð×_ÓhžfÆÓ'™¸y3·o'!:ú9ž>Íc ê°²ê++=XYu„™™Ý)*(­”ö JTSÃàⲺº*صkj³—±c·ÀÂB»wOƒ¤¤x³MÞVTT†Û·Ÿ#&æ9nßNBLL2 J!!!SS>,,taa¡ƒnÝtÐ¥‹V»û÷¢‚ÒòQAißÚ×_¤vBTTK—Ž€‡Çz [[£f×ÄD~ w÷­ðöþþ9…N÷pHQQš 'ïcŒ!11÷ï§â޽ܻ—‚ãÇï ¨¨ b06ÖD×®Ú01áÃÌŒMhjÒd|„nД6lêÔ]HJÊÁéÓ‹ .Þ|Ÿ—ñㇾ¾:ö왺¹¥bŒáùó\Ü»W[Z*(íâiÃ:vT…#Ö¬9‰áÃ{@CC¡ÙÆÖÓSCh茿 nnþ šÝ¬ã“ÿFII66†°±1¬³<+«qqéˆMG\\¢£Ÿ#8ø:^¾,hj*AOO :©B__ýµïÕÚÄÇ"TVVâСCˆŠŠBYYÌÍÍ1iÒ$¨«×&22/^ÄäÉ“¡««[ç±;w"##Cø³ŒŒ ììì`mm]ï¸iiiØ·o\]]ѵk×Oû¢Þ!??;vìÀ·ß~ÛäcR:‚ÒÆ•—WÁÞ~ll °aƒg³Ÿ•UŒ ~GEE5‚ƒgA[[¹Ù3¦—’’‡¸¸ <{–…¤¤<ž‹¤¤¤¦æ¡ªª ¢"W§¼¼*.zzêÍ2gÏ›>ôJzz:œQ]]±cÇBFF§OŸÆ½{÷púôiôìÙSø\;;;DEEaÉ’%ðóó«³KKKðx<˜šÖ^”––†“'ObÆ ðññyçØŽŽŽPWW‡ŸŸŸp½Omúôéðõõ…¾¾>’’’àâ₸¸¸&«±èJûF¥¿iÓvãØ±yèÙ³S³_PP OÏíÈÉ)ÆÁƒ_BOO­Ù3nTVV#--II9HLÌÁóç9HJÊEbb6ž?ÏEEE@^^ ººªÐÑQŸ¯MM%hk×~Ïçó ­­üÉo]ÿЂòÙgŸ !ñoDEE!&&œœ }}},Z´aaao½É[ZZÂÇÇÓ§O.Û´i~ùå—:GV^×¹sgìÛ·666HGG'Nœ€¥¥e“ñ¡¨ ´sŒ´ ãÇÿΆ YǪ«k8¿¨¨Œ½™YZ.e±±éœd -KMM KKËg—/dzýû¯°•+O°9sö³±cýY¿~+˜žÞ"ÆçÏ~™™ýÀ ZÍ&Múƒ}ûíAöÛo§Ø7Xdd‹‹Kg99Å4¾§§'óôôlÔsãã㙨¨({þüù[egg³;w²ÊÊJÆc+W®d¶¶¶,;;›‰‹‹³›7oÖy~÷îÝÙŽ;ê,;uê{çØÞÞÞLRR’uîÜ™ýý÷ß,11‘988ÔyŽ»»;»víËÉÉaŽŽŽlÿþýÌÀÀ€ÉÊʲɓ'³ªª*ÆcgΜa]ºta¬GÂlîîîLBB‚³K—.±ŒŒ æêê*Ü~DD³°°`’’’ÌÄÄ„………1ÆØ{ÇóõõejjjLRR’988°”””FíïW½Mµ_t J;±lÙ8:®Fpðuxz6Ýÿ…ÕGAA30mÚnŒ½»wOCŸ>Ížƒ´"""ÐÒâAK‹Wï­ðyy%HO/À‹µ_ééHO/DBB¢¢âñâE‚JáóÅÅE¡ª*9¨©)@]]ªªòPU•‡††Âÿ?Vû}uµÄÄ÷æ×®]ƒ‘‘:vìøÖcjjj˜6mšð瀀øøø@MM DPPzõêUg—/_"''ðâÅ ¬X±ýúõ{çØ6lÀÅ‹±yóf888 11÷ï߯󜸸8£²²‘‘‘044ÄãÇ‘––+++xyyÁÌÌ cÆŒÁÞ½{áââ‚õë×cìØ±HLLÄöíÛ‰íÛ·ÃÆÆiiiˆˆˆdffbĈØ´i&L˜€ððpxzz"::JJJõŽWSSƒÝ»wãêÕ«èС&Nœˆ+Và÷ßoÔ>'„ J;ad¤™3°råß:´'·‰ÊÈHbÏžé˜??ãÇÿŽM›¼0|xË9œLZ9¨¨ÈÁÜ\»Þçäå• +«99/‘“SŒÜÜ—ÈÍýwYrrrrŠ‘]Œ’’ò×ÖT‡ƒCv£r”””@A¡îEÞNNN8wîœðç«W¯BVVOž<»»;ÀÝÝ~~~X³f DEÿ½ÕáÂ…X´h@\\}ûöÅîÝ»ß9¶’’DEE¡¤¤)©÷ gEEüüü )) }}}XXX °°€ƒƒFøöÛo!..޲²2ðx<ˆŠŠ‚ÇãÕ9}ÔžÒêÑ£¼½½#GŽÄ°aÃpàÀ̘1£Þñ^m§¼¼  Dee%i,*(íȼyƒqèÐ-¬^}+W6Ïçô¼IBB þþñË/cöì½HO/ÄŒöœd!mëÓA%rs_"+«?üð?ˆˆ4îЦ¦&QSS#,G¾áöèÑ@íÑƘðŽœòòr¤¥¥áâÅ‹8p p{Û·o¯s ʧÆçó…ß‹ˆÔ~xdRRŒ…Ë%$$°xñâ÷n+55µÎz`bb‚”””ÇsuuÅùóçѯ_?ðx< <¾¾¾àñx÷¢H»Ó|³wÎÉÉIaÉ’Ø¿ÿ*>Lã,‡ˆˆ|}]±|¹–-;†¥KCQSCÁ‘¦'--mmeôèÑ**^oÀ€(--Åßÿ-\&''‡ÒÒR¤¤¤€1†   ,[¶ 'NœÀ‰'pæÌ888 00°)^ŽPIIÉ{Ÿ£  €‚‚‚:ËŽ9‚ÂÂÂ×STTžŽz%77JJ Ï2Ìúuë››‹¸¹¹½7'!¯PAigFê^½ôðÇ9/Þ޶عs ®aæÌ=(/¯â4!õQQQÁ¢E‹ðå—_âöíÛÂåYYY˜0aÄÄÄpéÒ%dffbÆŒ055~}þùç8|ø0**_ˆ"!!ÂÂBäåå®_¿Ž§OŸ¾w½ÁƒãرcÈÊÊ®7qâDˆ‰5üÁ‘ƒÆ™3g öš”ÇÃÉÉ©Áõ~ýõW888@\\½{÷ÆçŸŽ/^4æ%€ J»#""‚Õ«Ýq÷n öî½Âu¸¸tEHÈ—¸víÜÝ·¢  ”ëH„¼ÓO?ýOOOôíÛ¦¦¦èÕ«,--1mÚ4¸ºº" C† ²rݹ~ÆŒƒÒÒRœ}`ee…‘#GbáÂ…°µµ}ïz„§§'ÌÍÍáääggg¬Y³òòµsÐhhhÀÇǧNjo‹^¸p!zöì ggg˜››cìØ±2dHƒãMž<)))°°°€““ÜÝݱlÙ²á¤Ý¡yPÚ©ß~;mÛ"páÂbðùÜŸNJʧçvˆ‰‰bß¾/h®Òä>vªû¼¼<ܹsRRRèÕ«¤¤¤PQQqqñ:Â6¥ªª*\»v `ccqñÆ_NÄÄD˜™™Õ™å6;;111°¶¶†’’òó󡪪*|<)) Ož<žžÞ[פԧ¼¼7nÜ€@ @÷îÝ¡¡¡ÑèœÍƒÒÞQAi§*+«áì¼:©á¯¿¦½…f›ûÞÞ;ñìY6¶mûvv&\G"m}OËG¥}£S<프„Ö®õÀÙ³qìØ®ãTUåqèœÍáåõ¶o¿Àu$B!¡‚ÒŽõ쩇ɓûcéÒ#(,l×~HI‰cÃO,]:+VÇœ9tñ,!„´CTPÚ¹ï¿ÿ ââbøùçã\G©ã‹/ì8çÏ?ƨQ›ž^ðþ•!„´TPÚ9yy)¬\9ÁÁ×õþ[›SÿþÆøçŸ¨¨¨Æ!ëqóf"ב!„4*(ƒ›cøpK|óÍw:¥S'U;6}ú`ìØ-Ø¿ÿ*ב!„4*(°lÙh”bݺp®£¼ENN Û·OÆ‚Îøî»Ì›øÆgªBik¨ €ººþ÷¿‘ض-‚Óiðë#""‚ùó±oß œ?ÿC†¬o‘9 !„|TPˆ»»5úö5ÂÂ…PYYÍuœw8ÐgÏ~>_ Ÿ}¶»vEÒ „ÒQA!B"""X»Ö‰‰Ùظñ ×qêÕ¡ƒ"‚ƒgcÁgøù…aêÔ]ÈÏÿ‡¥Bi=h&Yò–ƒobáÂ`=:VV¸ŽÓ ›7ñå—ûþþѧljHkáååÕäŸ2L> z›jŸ¨ wš>}7?NÇ™3‹ ++Éuœ”â믃qöìC,Xà‚¹s &FIî_¿Žääd®cF7nר wÊË+Á A¿bÈnXµªuüqؽû2~þù(Ì͵±nÝx˜˜hr‰BÈG¢ÿÍ$濫"‡µkÇcÿþ«8þ1×qeÊ”þ_pqY‡ N·Ø‹} !„4ŒŽ -^‚S§î#"b1”•帎Ó(ÕÕ5عó~ýõjà·ß& kWm®cBùTPHƒJK+àä´ææÚرÛë8$))_Œ[·ñÕWŽX°À’’â\Ç"„ÒTPÈ{ݾý£FmÂúõã1nœ5×q>c ý…•+O€Ïçaýú èÙ³eß™D!„®A!гg'Ì™ã„%KŽ 55Ÿë8DDDS¦ôÇùó‹¡­­Œ‘#7âÇ ¨¨Œëh„B@GPH£TVVcĈ““ÂÁƒ_BTT„ëHŒ1†[X¶ìÀ××îî½[åk!„¶Ž i´øøL¸¸¬Ã¢ECðå—ƒ¸ŽóÑŠŠÊ°zõIìÝ…îÝuáç7šNûBH C§xH£uîÜ?ÿ<¿þúnß~Îuœ¦¨(ƒåËÇàÔ©…’’Àˆñå—û’’Çu4B!ÿŽ 6kÖ^ÄÄ<Ç™3‹ ¨(ÃuœÿìäÉûX¶ìÒÒò1mÚÌ›7JJ²\Ç"„v ù`ÅŸ¸¬ƒ™þ9•ë8ŸDUU öᅧµkO¢ºšaÖ,LŸn99)®£BH»D…|”û÷Sáêº~~#1eÊ®ã|2ÅÅlÛ;/ABB _}åoo[ÈÈ´ìÏ#"„¶† ùhþy Ë–ljóÛÜL­¥Øºõã:R‹§¨(#,1b„%ª«kpëVΜTöhÆ!IDATyˆóçaëÖó––@ïÞú0Àöö&èÒE‹Š!¤M¡‚Bš…•U'øûOÄ_솱±&ÆŒéÉu¤VCLL}ú Oüøãpde#22‘‘O°cÇ%,_~ªªòèÛ×66µ_¦¦|šrŸÒªQA!ÍfèÐnøî»Ï°`A44Ñ¿g®#µJ psë7·^j?¬12ò ®\yŠõëO!/¯ŠŠ2ÂRÓ§ºuÓ¡[™ !­ ýÅ"ÍÊÇÇiiù˜>}‚ƒgÃÒ²#בZ=M˜˜hbút;0ÆðäI&®_OÀõëϰsgíIIqtíª KËŽèÑ£#¬¬:Ñ'0BZ4Q®ögùò1èׯ3&MÚ¤¤®ã´)"""01ÑÄçŸ÷Ö-“퇫WĆ `eÕ wï¦`Ñ¢°µý]ºøÂËk;V®ü'NÜERRN›½˜ðéÓ§øë¯¿¸ŽÁ©üü|¬^½ú½Ï+..ƪU«>h¦ÈAÝÅC8QYY /¯íHMÍDZcó ¦Fs¤4—ÊÊj<|˜†˜˜dÄÄ<ǃixú4UU5PPF—.Z07׆¹¹LLø02êEEi®c¿åCîâ9qâ–/_Žk×®5u,¡éÓ§Ã××úúúÍ6fC’’’àâ₸¸¸Ÿ—šš ###‚F¯ó>¯ï‹OµÍÆ »xZ7:ÅC8!!!†;§bôèMððØŠÐй-òM°-’ƒ¥eGXZvÄ”)ýååUˆMǃ©xø0 wïø:JK+Ô^÷bl¬ ## tîÜFFйshj*qùRZ´ððpøøøpCHOOïƒKÁǬó.¯ï‹OµMÒöÑ)ÂEEiÎDYY%¦LÙ‰²² ®#µ[RRâèÞ]^^}ñË/cqüø|ÄǯÂõëK0³g‚žž?NÇÚµ§àáñ;¬¬ü`bò=† û óçbË–s8yò>ž<É€@PÉõKzKMM æÎ EEEhhh`åÊ•€Y³fá?þ>¯¸¸½zõBRRàþýû°µµ…´´4ŒëL¯öìY˜››CRRVVV¸uëÀÃÃYYYððð@dd$àÂ… èÞ½;¤¤¤`jjŠ£G²²²àâ₽{÷‚ÇãáÑ£GoeÿñÇ¡®®))) 8©©©ÂÇêË÷æv#""0|øpázAAA022‚¸¸8ø|>Ö¬YóÖ¸™™™ÂuΞ= KKË:_S¦LyïöÞܯo³¡ý’›› '''ÀÐÐrrrðööFuuuÃÿФí`„p,11›YZ.e&lcU\Ç!—÷’]»öŒíÛw…ýôSóôÜÆz÷þ™ii-`|þ|ÆçÏg]»þȆ YǦOßÍþ÷¿P¶sçEvêÔ}öða+((ùÏ<==™§§g£ž{üøq&""¾þúkVRRÂ"##™’’ aþþþÌÚÚZøÜ½{÷2KKKÆc/_¾d|>Ÿùûû3@ÀÎ;ÇYTTKIIa ,44”•––²åË—³N:±šš–ŸŸÏø|>‹ˆˆ`,##ƒ)((°Ý»w3@À˜¬¬,‹e)))LFF†=š]¹r…•——×Éδ´´X||<+**b#FŒ`³fÍjT¾×·ÇäääcŒ1)))Ê»xñ"eYYY,%%…III1ÆKLL®óòåKÏâããÙ½{÷˜¾¾>[¹rå{·÷æ¾x}› í—ôôt&))Éf̘ÁÊËËYBBãñxìôéÓþ `ô6×zÑ)Â9==5͸q[1cÆ_øãoš¿…SV–ÞÂü: ‰‰9HMÍûÿ¯|¤¦æãÖ­$„†F#;»Xø\ièè(CGG::*ÐÐP€¦¦TUå¡®® ¨©)|²ß‡U«VABBýû÷‡±}ûv,X°ÉÉÉèØ±#‚‚‚0uêTµ×®ðù||õÕW€AƒÁÛÛ!!!ÐÑуƒFøöÛo!..޲²2ðx<ˆŠŠ‚ÇãABBaaaèÑ£¼½½#GŽÄ°aÃpàÀL:eeeð÷÷‡––Ö[¹ ¼¼  Deeå{ó-\¸°Îv_III\¹rVVVHHH °°ÒÒï>Õ*''###Àøñãaccƒï¾ûî½Û322ª³/^×Ð~™1c***àççIIIèëëÃÂÂ………ü'­Ò"˜šò8ãÆmÁܹð÷Ÿ11:ÙÚHKKÀÌŒ33þ;//¯BJJÒÒò똇ÓQ„¬¬"áu/¯ðx²ÐÐP„ªª:tP‚šš<ÔÔž. MÍòFg344¬óÙµkWœ;wêêêpttÄáÇ1iÒ$DFFbÿþýj/,…žžžp½²²2 6 UUU066.—ÀâÅ‹ß9vjjj瀉‰ RRR¢¢¢ï,'àêêŠóçÏ£_¿~àñx¯¡ßsÆÖ­[‡uëÖ!::›6m‚››¢££Ì—““SïvÃÂÂàëë‹Ã‡£_¿~Ç«7Ã+‡ÂŽ;pýúõ:GZ>v{ïÛ/¤ãú!oº|9ž|Ë-:Àjjj¸ŽCZ¨½;~ü8c¬öš‰.]º0ÆcÅÅÅLNNŽuéÒ……‡‡ ×{òä “••e=bŒ1VRRÂÌÌÌX`` ;þgÞ¼yLMM9::2EEEaáaŒ±=z0[[[vëÖ-ÆcK—.e< <˜©ªª²Ù³g3ÆØ{ JJJ ëØ±#ëÖ­sttdJJJì?þxo¾† Jrr2ÓÐÐ`vvvÌÉɉ :”²#FÔ[PfÍšÅÄÄĘœœœðK[[û½Û{s_¼¾Í†ö Bµ‘ëòåxLž¼®®Ý±~ýxº&…Ôñ!µ½"põêU()) /èlŒ´´4<|øÚÚÚ077¯óX||<aff]]]áòììlÄÄÄÀÚÚÊÊÊj¯iyòä ôôôÞºö¢!ååå¸qãºwï º§ÈÊ÷JMM òó󡪪 (**Â7 ¡¡ ¤¤¤ !!öööõ®Ó†¶÷ú¾PRRzk›»_Þ‡&jkݨ íêÕg˜4é Ò 7zRI!BSPHûB¥u£¿ö¤EëÛ×3qúô|õÕ~TVÒ$M„ÒPA!-^Ÿ>˜‰ cÚ´]4ã,!„´TPH«`m­¯pçN2<=·£¨¨ŒëH„BšÒjt릃°°¹HKˇ›Ûde¿%B!­Òª¨ãèѹ¨¨¨Â¨Q›’’Çu$B!M€ iuø|ÂÂæ€Ç“ňñðaב!„|bTPH«¤¬,‡/af¦…Q£6ãüùÇ\G"„ò QA!­–œœöîý£FYaò䨻÷ ב!„|"ôa¤UÅš5îèÔIßÉɹøáWˆŠÒ‡ BHkF…´ >>ŽèØQóæ"997zBFF’ëX¤‰¢²²’뤅 á:ù¨ 6cĈÐÔT´i»1|øFìÞ= ºº*\Ç"M¤OŸ>TNHƒÆÇuòÐgñ6'55S§þ‰/ °}»7lm¸ŽD!äÑE²¤ÍÑÑQÆÑ£s1`€1&Lø;v\ä:!„DGPH›¶uëy¬\ù7ÜÜzâ×_Ý!%Eg5 !¤5 ‚BÚ¼ b1{ö>hi)aûvoip‰BÈ{Ð)Òæ98˜âìÙE••ÄСëqäÈm®#By:‚BÚÊÊj¬Xq;v\‚»»5~ùÅnE&„Š iwΞ}„yóÑ¡ƒ"¶mûÆÆš\G"„ò:ÅCÚ'§.8}z!äå¥áâ²Û·_@M õtBiIè i·ªªj°uëy¬[kk}lØà e®cBBðàAæÎ @ZZ>~þy4<LÃÊ•ãüùÇèÙ³æÎ '§.tD…Bþ#*(„|·o?ÇæÍgqæÌC˜šò1gŽ#†·„˜]£B!ƒ !ŸÐãÇéð÷?‹cÇî@WWsæ8bìXkšìB>Bš@RR¶l9ƒo@YY'öäIýСƒ"×Ñ!¤U ‚BHÊÌ,¾}W°ÿäç—bØ0 L›6½zés­ÍÙ´i._¾Ìu Ò|#ììVbÆÓHKËç:"!„pŽ !áñd1eÊ„‡sç¾Å Afص+}ú,ƒ‡Çï8pà K¹ŽI!œ ‚BH `fƇŸß(ܾí‡?ÿœ O¾¾‡aa±'þààë(( ²Bi?Ĺ@ù—„„\\ºÂÅ¥+ÊÊ*pîÜcœ8q?þx‹‡ÀÖ¶3\]»ÃÙ¹+ÔÔ乎K!M† !-”ŒŒ$\]»ÃÕµ;‚Jœ;÷Çß…Ÿ_¾ýö ,,táèhGÇ.°°Ð…¨(M¯Oi;è!­€´´>û¬;¶mû®@PÐ,ôî­ÐÐh ö,-—bÁ‚ ;ƒÜÜ—\Çmñª««±|ùòzïøÙ²e 6mÚÔÌ©þ»ÈÈH,_¾)))u–cÕªUo}ßòóó±zõêf´t›1!­\RRÎ{„³gáÚµg¨¨¨†©©&úõë [[#ôík%%Y®c6¹¹ÍX @FFòòòÈÊÊ‚ŒŒŒð±äädèééAKK ©©©M–·)ØÙÙ!** K–,ŸŸŸpyjj*ŒŒŒ ê|ßT¦OŸ___èëë#)) ...ˆ‹‹k²ñ^¡ÛŒÛ:‚BH+§§§†iÓì4 ­@pð,89™ãÎd̘ñÌÍ„³óZüôÓQüóÏ=ddr¹ÅàóùøçŸê,;t茌Œ8Jôñ’““…E‹!((ˆÓ,ááá(,¬ý=ÓÓÓk–rBÚ*(„´!22’0ÀßÿŽŸ‡ÇÁž=_ÀÎÎׯ'`Ö¬=°²òƒµõϘ9sþøã"nÝJDEE×Ñ9áîîŽÔYvðàA¸»»×Yvÿþ}ØÚÚBZZÆÆÆ äææÂÉÉ ëׯ‡––ÔÕÕ±k×.,Z´êêêàóùnçÂ… èÞ½;¤¤¤`jjŠ£G²²²àâ₽{÷‚ÇãÁÓÓëÖ­®—^½z¡   Þ׈¾}ûâ›o¾ABBnݺը}P_&8{ö,ÌÍÍ!)) ++«:Û ‚‘‘ÄÅÅÁçó±fÍ€‡‡²²²àááÈÈHdffbøðáïïÕ¾ €¡¡!äääàííêêêF½Ò1BH»QZZή]{ƶl9ǦNý“YZ.e|þ|Ö±ãBæì¼–-XÄþüó»ví+**ã:îñôôdžžžznYYÀn߾͔””ØË—/cŒ=þœuèÐ={–ikk3Æ{ùò%ãóùÌßߟ vîÜ9¦¨¨È¢¢¢Xzz:eK–,a555lëÖ­ [µj«©©a«W¯fFFFŒ1Æ222˜‚‚Û½{7,,,ŒÉÊÊ²ØØX–’’ÂdddØèÑ£Ù•+WØáÇ™±±±0ïæÍ›™££cƒ¯©k×®lÛ¶mŒ1Æ̾þúkác)))LJJê­ïß—IAA…††²ÒÒR¶|ùrÖ©S'VSSÃŠŠŠ˜”” e€]¼x‘‰ŠŠ²¬¬,–ŸŸÏø|>‹ˆˆ`,11‘ÉÉɽw¼ôôt&))Éf̘ÁÊËËYBBãñxìôéÓú7eŒ±€€FokmýKÒÎ¥¦æ±°°h¶lÙ1æáñ;ëÚõGÆçÏgZZ Xß¾ËÙ_ìfëÖ…³cÇbØÃ‡i¬¼¼’ëÈïô1%11‘ :”3Æ[»v-›5k‹ˆˆ”àà`feeUgý¹sç²ùóç³ôôt@XpžŠŽŽf:t`Œ1¶mÛ6fggWg;cÇŽe?ýôKIIaXZZcŒ±òòrÆãñؽ{÷cŒÙØØ°={öÔûzîÞ½Ë$%%Y^^cŒ±;v0mmmV]]Í«¿ 4”iíÚµløðáÂålÕªU¬¤¤„ vûömác¯¶ÏcL[[›ÅÄÄ0ÆX‚ÒÐx¯öå‹/„ÙÙÙ±z_÷›¨ ´-t›1!휶¶2´µ•1rd᲌ŒB|ýúõƒ˜˜x<ÞÞ„¼®eý¥ „´Xb06Ö„±±æ[åä¼Äóç9xþ<÷ÿ¿rðèÑ œ:õYYE¨ªú÷ÿ®ÕÕ„eEEEŠPS“‡ªª<ÔÕ ¦¦9((HCVV²É_ǃ¦NŠ1cÆ@T´î½NNNX´h?~ 333”––¢W¯^X²dIƒoþoÐDm„#/¯¹¹µe¥¸X€’’r PTT†¢"^¾ ¸¸ö«öûr–¢¸X€üü—ppÈnÔDm#-- >„¶¶6ÌÍÍ?z;IIIxòä ôôôÞºãMS¦LA‡š|æ×†2ÅÇÇ#11fffÐÕÕ./**Â7 ¡¡ ¤¤¤ !!öööÈÎÎFLL ¬­­¡¤¤„üüü:EåCöÁ‡ ‰ÚÚ*(„6áCf’mé²³³…‰'"::ú“¾‰·eTPÚš¨BZ˜ÄÄD¬X±ëׯ§rBÚ-º…BZ˜Þ½{ãæÍ›\Ç „St…B!-B!„´8TP!„ÒâPA!„BH‹C…B!-B!„´8TP!„ÒâÐ<(„6#$$£Fâ:áHHH×È'D…ÒfTVVÂÝÝë„O€>‹‡B!-]ƒB!„‡ !„BZ*(„BiqÄÜå:!„BÈëþiÉ·ù×6¦pIEND®B`‚bm3.7.0/doc/html/a00034.html0000644000175000017500000002126711365042650013430 0ustar tlktlk BitMagic: bm::bvector< Alloc >::iterator_base::bitblock_descr Struct Reference

bm::bvector< Alloc >::iterator_base::bitblock_descr Struct Reference

Information about current bitblock. More...

#include <bm.h>

Data Fields

const bm::word_tptr
 Word pointer.
unsigned bits [32]
 Unpacked list of ON bits.
unsigned idx
 Current position in the bit list.
unsigned cnt
 Number of ON bits.
bm::id_t pos
 Last bit position before.

Detailed Description

template<class Alloc>
struct bm::bvector< Alloc >::iterator_base::bitblock_descr

Information about current bitblock.

Definition at line 289 of file bm.h.


Field Documentation

template<class Alloc>
unsigned bm::bvector< Alloc >::iterator_base::bitblock_descr::bits[32]

Unpacked list of ON bits.

Definition at line 292 of file bm.h.

template<class Alloc>
unsigned bm::bvector< Alloc >::iterator_base::bitblock_descr::cnt

Number of ON bits.

Definition at line 294 of file bm.h.

template<class Alloc>
unsigned bm::bvector< Alloc >::iterator_base::bitblock_descr::idx

Current position in the bit list.

Definition at line 293 of file bm.h.

template<class Alloc>
bm::id_t bm::bvector< Alloc >::iterator_base::bitblock_descr::pos

Last bit position before.

Definition at line 295 of file bm.h.

template<class Alloc>
const bm::word_t* bm::bvector< Alloc >::iterator_base::bitblock_descr::ptr

Word pointer.

Definition at line 291 of file bm.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_0x64.html0000644000175000017500000001047511365042652016712 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- d -

  • decoder_big_endian : bm
  • deserialize() : bm
  • dgap_2_gap() : bm
  • distance_and_operation() : bm
  • distance_metric : bm
  • distance_operation() : bm
  • distance_operation_any() : bm
  • distance_stage() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/functions_0x63.html0000644000175000017500000001530711365042644015412 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- c -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/annotated.html0000644000175000017500000003615411365042644014602 0ustar tlktlk BitMagic: Data Structures

Data Structures

Here are the data structures with brief descriptions:
bm::_copyright< T >Internal structure
bm::all_set< T >Structure carries pointer on bit block with all bits 1
bm::all_set< T >::all_set_block
bm::bit_AND< W >Bit AND functor
bm::bit_ASSIGN< W >Bit ASSIGN functor
bm::bit_COUNT< W >Bit COUNT functor
bm::bit_COUNT_A< W >Bit COUNT A functor
bm::bit_COUNT_AND< W >Bit COUNT AND functor
bm::bit_COUNT_B< W >Bit COUNT B functor
bm::bit_COUNT_OR< W >Bit COUNT OR functor
bm::bit_COUNT_SUB_AB< W >Bit COUNT SUB AB functor
bm::bit_COUNT_SUB_BA< W >Bit SUB BA functor
bm::bit_count_table< T >Structure to aid in counting bits table contains count of bits in 0-255 diapason of numbers
bm::bit_COUNT_XOR< W >Bit COUNT XOR functor
bm::bit_grabber< T, BPC >
bm::bit_grabber< unsigned char, 8 >
bm::bit_grabber< unsigned short, 16 >
bm::bit_grabber< unsigned, 32 >
bm::bit_in< TDecoder >Byte based reader for un-aligned bit streaming
bm::bit_OR< W >Bit OR functor
bm::bit_out< TEncoder >Byte based writer for un-aligned bit streaming
bm::bit_SUB< W >Bit SUB functor
bm::bit_trans_grabber< T, BPC, BPS >
bm::bit_XOR< W >Bit XOR functor
bm::bvector< Alloc >::iterator_base::bitblock_descrInformation about current bitblock
bm::bitblock_get_adapterBit-block get adapter, takes bitblock and represents it as a get_32() accessor function /internal
bm::bitblock_store_adapterBit-block store adapter, takes bitblock and saves results into it /internal
bm::bitblock_sum_adapterBit-block sum adapter, takes values and sums it /internal
bm::block_allocatorDefault malloc based bitblock allocator class
bm::bvector< Alloc >::iterator_base::block_descr
bm::block_set_table< T >Structure keeps all-left/right ON bits masks
bm::globals< T >::bo
bm::bv_statisticsStructure with statistical information about bitset's memory allocation details
bm::bvector< Alloc >Bitvector with runtime compression of bits
bm::bvector_mini< A >Bitvector class with very limited functionality
bm::bvmini< N >Mini bitvector used in bvector template to keep block type flags
bm::copy_to_array_functor< B >Adaptor to copy 1 bits to array
bm::copy_to_array_functor_inc< B >Adaptor to copy 1 bits to array with base increment
bm::bvector< Alloc >::counted_enumeratorConstant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit
bm::d_copy_func< T >D-Gap copy functor
dbg_block_allocator
dbg_ptr_allocator
bm::DeBruijn_bit_position< T >
bm::decoderClass for decoding data from memory buffer
bm::decoder_baseBase class for all decoding functionality
bm::decoder_little_endianClass for decoding data from memory buffer
bm::decoder_range_adapter< DEC >Adapter to get words from a range stream (see range serialized bit-block)
bm::deseriaizer_base< DEC >Base deserialization class
bm::deserializer< BV, DEC >Class deserializer
bm::bvector< Alloc >::iterator_base::dgap_descrInformation about current DGAP block
bm::distance_metric_descriptorDistance metric descriptor, holds metric code and result
bm::encoderMemory encoding
bm::bvector< Alloc >::enumeratorConstant input iterator designed to enumerate "ON" bits
bm::first_bit_table< T >Structure keeps index of first right 1 bit for every byte
bm::gamma_decoder< T, TBitIO >Elias Gamma decoder
bm::gamma_encoder< T, TBitIO >Functor for Elias Gamma encoding
bm::gap_len_table< T >Default GAP lengths table
bm::gap_len_table_min< T >Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets
bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >Bit-plain splicing of a GAP block
bm::globals< T >Internal structure
bm::bvector< Alloc >::insert_iteratorOutput iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces)
bm::bvector< Alloc >::iterator_baseBase class for all iterators
bm::iterator_deserializer< BV, SerialIterator >Iterator to walk forward the serialized stream
bm::mem_alloc< BA, PA >BM style allocator adapter
bm::miniset< A, N >Template class implements memory saving set functionality
bm::operation_deserializer< BV >Class deserializer, can perform logical operation on bit-vector and serialized bit-vector
bm::operation_functions< T >
bm::ptr_allocatorDefault malloc based bitblock allocator class
bm::ptr_guard< T >Mini auto-pointer for internal memory management
bm::random_subset< BV >
bm::bvector< Alloc >::referenceClass reference implements an object for bit assignment
bm::tmatrix< T, ROWS, COLS >::rstatRow characteristics for transposed matrix
bm::serial_stream_iterator< DEC >Serialization stream iterator
bm::serializer< BV >Bit-vector serialization class
bm::sse_empty_guardSSE2 reinitialization guard class
bm::bvector< Alloc >::statisticsStatistical information about bitset's memory allocation details
bm::tmatrix< T, ROWS, COLS >Mini-matrix for bit transposition purposes

Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00132.png0000644000175000017500000002464311365042632013250 0ustar tlktlk‰PNG  IHDR¸ ¾ðbKGDÿÿÿ ½§“ IDATxœíyX×þ‡?Ù‹A*(‚ ‹ *TÜP°­»U¤¢×jkÕ^ý©Å>zûh{¯Ö¶Ö.ö¶îµÞê-ˆÒ ué+®(Y,®¨•ÈR4ˆ@Ø"$9¿?(©‘E–I&™œ÷yxgÎäœïL^OÎÌY†G! P8 Ÿí(}B§p*8…Ó™Î0//—.]b:[Š DÏž=ÙC¿†‰ŽŽ&èŸ üEGG3ýõŒ×à œ>}Z_YS $$„í mƒS8 œÂi¨àNC§p*8…ÓPÁ)œ†UÁ ‘˜˜¨×2ª««£·ü+**Ëhž-ŬT*Íhy\†UÁóòòpäȽ–QUU…ï¾ûN¯ù?~œñ<›‹¹ºº{÷îe´<.C›(¤[·nøïÿËv”fÐ[Ofk!„à믿Fbb",,,0sæLÌ™3 …ëׯGPP<•J…Å‹C&“!)) K—.ÅØ±cÉÉÉØ»w/ú¨M1gggãôéÓàóùHLL„X,ÆìÙ³Þªëvüøqìß¿ååå ÁêÕ«ÁãñÚþpÖkðœœ>|6lÀpöìY¨T*dee¡²²qqqX°`6oÞ {{{ÄÇÇ#<<\ûS]]]O>ùo½õñÏþ»wïFYY™NYEEEظq#–-[†#GŽ {÷‹ƒB¡@ii)Ö®]‹ððpüüóÏX¼x1>øàäçç·ÿ“'O••mйªª GŸÏמû¾}ûZ5PM£ÑàÖ­[ˆŽŽÆÞ½{qþüy\¹r¥=—Ÿó°.x§N°hÑ"ˆÅbøúúbúôéHNNP_»Ïž=<˜5k–v»ºº ‰°mÛ6Œ1"‘R©B¡UUU:e%''cÈ!>|8,,, @JJ úô郗^z "‘ÁÁÁ jó˜šÖÆ b±‹/†X,†¦OŸŽ¤¤¤V•óÆo@(ÂÅÅîîîΕRëM……Ñ«W/dffj·---<"‘@»Ý€H$BNNvïÞÂÂBH$&fâ=xð=zôÐnóx>>àóù˜4iR£ã¬­­¡P(töUTThÓrssuÒ lllÚK[hêÜ­¬¬ôVž9ÂzåÁƒHMMPß–>rä‚‚‚Ú”Gqq1ÜÜÜàçç>Ÿëׯë4@JJжm~ýúuÜ¿<C† Azz:ŠŠŠÔß<ž;w<Öã¾pá ¦¦ÇŽk²¼”””Fÿù(­ƒõ|À€ؾ};bccQPPOOOLš4©QMÛÁÁÁØ¿?V¬X‘H¡P©TŠíÛ·cåÊ•Úãñ /`Á‚ððð€R©„‡‡„B!úôéƒY³faÑ¢Eèׯnß¾ 6L§ èÚµ+öìÙƒC‡¡°°Ý»wÇ+¯¼Ò¨fߺu+&Nœˆ^½zé-®Â#M5V;@LL æÌ™Ó¦›³ÚÚZ\¿~:u‚§§g»Ê­®®ÆÍ›7áàà€Þ½{C.—£¨¨ÔSVV†òòr¨Õj( øøø`Þ¼yX·n  þ¥  ÝºuC÷îÝŸ[.!H$mŠ755ß}÷¶mÛ†7nÀÂÂ}ûö5X{:$$ÑÑшŒŒ4HylÁz û,ÿøÇ H¥ÖÍwõêc|ûm¢¢|ѳg'FÈ æ°|2ã‚sýû/⣎âÆÀç·<øiòäÃÊʇ½e è(m¶Á› +ë>üüz‹Db…¹s_ÀÞ½çQW§f :J{¡‚ÿIFÆ}8:v‚»{Fò{ýõ‘xø° ͯŠEÑ?Tð?ÉÊÊc¤önÀÕÕÓ§`÷î³M®UN1 Tð?Éʺ{<ÿÀ6ðæ›£qýz!„Å"TpryòócÈwFóõñqŘ1ý°sçFó¥´*8ê;xø| b®‰ÒÀ¢E£qîí¾g *8€ß~˃‡‡3$KÆó3¦||\±sgÛ^fEa*8Ú?‚°µ,^<GŽdÑî{0{ÁÕj ãOPžeêTtíjGa±€Ù ž“óUUO:ÜEßB!Ÿvß³„Ù ž‘!ƒ}ûv{þÁ`îÜ ð±oß½–CÑÅìÏ̼Áƒ{B Ð殺±ãoN»ï ŒÙ Þ–%":ÊÂ…£PZZØXÓ^ùË”0kÁ–ˆ2Ä0ïŸìÚU‚Ù³±mÛ)¨Tƒ”ià—/׿=˜éÌ–XºtŠŠÊðãé+Óœ1kÁ32dèÝÛ ööÍ/°É4Ý»;`ÆŒ!øê«“´7f-xfæ}ƒÖÞ ,_ŠüüüôJ«oÌVpCtð4‡»{LŸ€Ï?O¢OTôŒÙ nˆž–XµêE–"&¦ñ´6™ìªªš_xŸÒzÌVðôt$K½wð4GÏžŽ˜;w8¾üòjjj©©¿cæÌm>üCäå=f%.®av¯ònàòå\ ä¦÷ž–X¹2 ‡¥!**wî<Äh×$/)©d-..a¶‚gdÈðÊ+¬•_^^C‡Ò@Á‘#YêÅÖhx<?®b-6.a–‚—”TB&{ÄÊ ¦Lö»wŸÁ— VkžzTø×¼M¡G* 1KÁ33ïƒÇã\pµZƒ•+ -í^‹Çñx<”–Òœ Ìò&“øØ¿ÿMôíÛ B¡ Ùã!xôˆ¶Á™À,OO—aذެ”-‘X⇖ÂÕÕ"QÓ’«Tj*8C˜à*U}Ï!†o7àèØ ‡/ƒ££M“59!@q±‚…ȸ‡Ù ~ãF!jjjáïïÎjR©=þ?ØÚZB(lü5Èåô&“ ÌNðŒŒûH,áéÙ•íPàîÞ?ü°b±ø|ݯ‚Þd2ƒÙ ž™yƒ¹µê%¯† )\ x¼¿bª¨PÒ%ßÀìÏȱ2‚°%üýݰÿ› ùZÉ5‚ÒÒj–#3}ÌJðââ Èd0l˜afð´…#<ñÍ7óu~YhofÇ1+ÁÓÓõ·DŒïƒÿ;R»M{3;ŽY ž‘!ƒ§g×v/Ñ6gÎðx<½þ͘1 ÅÀرõ^^GÿæÌ™Ãà7Ä ç¯©©Åµk¬ °Òh4X¾|9$ œññÇJJJŠ/¾ø...prrÂÞ½{ñÎ;ïÀÉÉ R©±±±™L†|#""péÒ%DDD@.—#""çÏŸÇÇ1yòäVÇ·gϸ¹¹ÁÆÆ ,€FýÅ@9/xVVT* +CdÓÓÓ!‰ðàÁ>|Ÿ|ò ~øáÔÕÕáôéÓ(++Caa!6lØ€7ÞxNNNË刊ŠÂ{ï½P*•¸zõªN¾999¨¨¨À®]»Ð¥KìÚµ AAA¨©©ÁéÓ­{]¡Z­ÆåË—qçÎdgg#>>gÏrï%Yœ<=]©Ô®®/ÛÞÞ›6m‚µµ5FŒeË–!&&@}í¾fÍðx<„††B(bÕªUÚ튊ç$´··ŸÏ‡½½=D"Q›ãÛ¸q#,,,àááooomS‡K˜à¹:Ô•²=<>ï¼sÿ÷ã°jÕ‹Œæíäd‹°0oDG§2š¯©Ã)Á³²îC£!FÙEôè,_… Gáÿ˜¨—2fϯ¿Þý{ÅzÉßá”à—/çÂݽ œmÙE‡ÿýï*–-ûóçÀ?ÿ9Uoå„„ôƒTj‡.é­ Sƒs‚[û;9ù&–,Ù‡W_ Ć ÓôZŸÏÃìÙ8t( uuj½–e*pFp•JƒÌÌûFÕþ>{6o¼±3f Á¦M3 ²4CDD JJ*‘œ|Cïe™œüúõBTU=1šÌ_ý¯¿¾“'§ŸÎ2غ#Ý»; (È ™)ÏØáŒàii÷`oo //ö_Q’ùó÷ $¤¾ür6Ã^æiÓüñË/7PYùÄ å#¼~ü Û+4ݽ+Çœ9»1hvì˜gp¹`Â?¨TjüòËuƒ—mlpHð{ d·ý]PPŠˆˆpwwÄþó:D"+qtîlƒQ£¼h3<7·ÅŬ¾ƒ¾¸¸³fm‡½½¢£—ÀÊÊ‚µX`êTœ9s eeÕ¬ÆÁ6œ<--b±î%O£P(ñê«;‡ý½Ý¯ g’—^òŸÏ3û®{Î>x°+M‚ššZDFîDYY ââþGÇN¡):u#,ÌÛì›)ü+Í“º:5^{í[Ü¿_‚C‡Þbe ò–˜2e0RS‡\þüµÆ¹ŠÉ ÎÖ VjµK–ìCvvbbÃÃÃÙ å·†°0oXY‰püø¶Ca “<--|>Ï k€B°jU,ΜÉÁ¾}oÂ×·»ÁÊn b±¡¡Þ8vì7¶Ca ~ýúI zc÷ñÇÇŸ‰o¾™Ïú£Éç1q¢ÒÒrQ\lžÍNnHÉví:ƒmÛNaË–Ù;¶¿ÁÊm/cÇö‡X,Äÿþwõùs“¼¦¦W¯¬ý}øp6l8‚w߈W^ 0H™ÅÊÊ!!ýqü¸y6SLZðŒŒûP©4y‚’’ro¿}K—Žetª™!˜xª£Œï‡ÄDój¦˜¬àii¹NpèÆxÞuuj,\¸ee58p`‰ÑŒ/é‰%Fò2»ÁW&,ø= Ú |>³mbµZƒe˾Gvv>¾ÿ~ÜܸóÖ²‰âÌ™[¨¨P²ŠÁ0YÁ/_ÎÕKódݺÃHL¼Š={^GÿþRÆóg“_ô!Ĭ&$›¤à2Ù#<|¨`üsëÖd|ÿ}*vïž#<ÍÛ°··Æðá}ÌjlŠI þ׿VÝ¿ÿ">þø86n|/¾èÃX¾ÆÆÄ‰qêÔMTW3³l³±c¢‚ßàA=aaÁÌêÏ'N\ÃÚµ?bÅŠ0¼öZðó?`¼ü²/êêÔfÓL1YÁ™jž¤§çâ­·þ‹¹s_ÀêÕ/3’§1ãèØ /¼àãÇ?MÑh ·x¾¡0jÁëêÔ˜7ï|øá1$%]CQQÙŸŠ[-¸FCP[«j2íæÍ"Ì»#GzaãÆW˜ ݨ™0a ’“o@©¬_Ì_.¯À_$aàÀ÷µû¸‚Q¿áA$àäÉ8yòx<€@"±BçÎÖHM½ •J ?¿î-ŽE9}ú¶lIÂ÷ß/ÒyëqQQæÎÝ ooWìØñ7VÖ/a‹—_öEbâU?þ~þù*Nœ¸µZ ~„¦¥¥ˆå™ƒG1êߥI“¾Dfæ}}<  QW§BCôo½‚÷Þ›Òèó³fí@JÊm¸¹9âàÁ·Ð³§#JJ*¾<¿Ü(fÁЇ8x0 ûö]@QQ9„BT*6ýòå÷nniG0ê¼¼ºá·ßòµ5 P_“?Ûì ónôÙ¢¢2¤¦Þ–áå—¿À¾}oâ_ÿJ@yy Ž[ark4çÎå`ß¾ þò RÕ¯>«RéÖo\ë2zÁ{õꀯ#øÓˆDL˜à‡  Fi11—Àçó V¨Tj(J„‡oÃôéøê«9zfk,»v̓··+„¿¦áñxŸBèspVpsë¦þñÞ† Ó›\PPŠ3gr VkÀãÞÞ®8rdvîœÇ©îg&qwï‚èèÅ ù¨­Uq® Þh,JJJ ¾úê+¶âi•Š_•‚Ç‚ƒ ›=.'ÇÅÅÖ‰4èÝ» NNÌ-‘pèÐ!Æòj૯¾BJJ ãù¶‡’Kܼé‘HÀÀl‡Ó.–/_Ž#FèìkTƒçåå!..Î`Aµ¡P‘HƒAƒ6{ !úè#}„Ç ú¼Þl¢Ïï©C‚ߺu ;wîd*âââpñâÅç7oÞ<\¹rBaãBxÿý÷õ+èózë›… "77·É4}~O&ßDÉËËÃÊ•+ѯ_?¶C¡´@bb"ÊËË ^n‡×h4X¾|9$ œññÇJJJŠ/¾ø...prrÂÞ½{ñÎ;ïÀÉÉ R©±±±Ú|bccáîî+++L›6Mçb\½zÁÁÁ°´´„——bbb ,@^^æÍ›‡Ÿþ¹Ù÷ìÙ777ØØØ`Á‚ÐhšŸaì0u½Ož< oooXXXÀßßéééÚ´3gÎ`àÀ‹Åèׯ~úé'2¢££áááÌŸ?juýÐäuëÖÁÉÉ b±!!!(((DDD@.—#""çÏŸoöÜôò=‘gˆŽŽ&Mìn’£GG¢¢¢HUU9þ<±³³#qqq¤¨¨ˆðù|òÞ{ïFC¶oßNM›6FC6oÞLúôéC!äÊ•+D,“ü‘ÔÔÔ-[¶dË–-¤²²’H¥R²uëV¢T*Irr2‘H$äÂ… ¤¬¬ŒôêÕ‹$&&¥RÙ(¾¢¢"€,Z´ˆûŒLž|åååH$Ê())]ËóV !øüóÏQRR‚¸¸8(•J̘1£Mqéƒ .“ÉpìØ1õ{víÚ… &´)qãÆ!66V[eggãܹs€ÐÐPœ?7oÞTWW# ñññMæ•Ðä3q®ÀÄõ Ñ#G´•Ê¥K—0wî\„……á—_~Á½{÷>Ä?þˆÐÐÐóüä“O0fÌ…B 6 óæÍÃüÑìñ†úž:,xPP¢¢¢0zôhxyyÁÍÍ ‹-jSS§NEXX €LžýôStêÔ ƒ ªU«€ñãÇÃÛÛ3gÎÄK/½Ôbž¯½öòóóáçç‡ÐÐPÌš5 |ð6ÝÙÙË–-CFF~OÏ6ÊÛsSUSSCN:E222Úô¹gÉÎÎ&¿üò )//o”VPP@’’’´71†Â˜n2`êzß¾}›$%%‘¼¼¼Fi¹¹¹$))‰äää´:?¥RIÎ;GNœ8A>|¨“&—ËIRRyüøq‡bn4s“ÉÈxpKKK„„„t8___øúú6™æêê WW×—Á˜ºÞžžžðôlúe[ 7ômA,cäÈ‘M¦999aüøñm ±Ã˜|O&…ÒTp §¡‚S8 œÂi¨àNC§p*8…ÓPÁ)œ† Ná4ÍödËšyl£ïë‡iÓ¦éµ s¦YÁgÍšeÈ8áà0UUY¨­m~D¨««cýZs£}•·‹ËÛØ¶ío˜>ÝŸíP(& mƒS8 œÂi¨àNC§p*8…ÓPÁ)œ† Ná4Tp §¡‚S8 œÂi¨àNC§p*8…ÓPÁ)œ† Ná4Tp §¡‚S8 œÂi¨àNC§p*8…ÓPÁ)œ† Ná4Tp §¡‚S8 œÂi¨àNC§p*8…ÓPÁ)œ† Ná4Tp §1Šð7lø ×®ÂÁÁF»ïèÑ+ð÷wƒ«« ¢B KK>þxºvµc+TЉÑì+L ‰P(@JÊFû33ï#3ó¾Î¾½{_7TX`M”éÓž{ŒH$À楋  …K…àýûKÑ»·^³ÇÔÕ©1mÚ`ÃEáF!8„‡…HÔ´à<àåÕ ^^Ý ÅÔ1Á§Mó‡JÕôý®@ÀǬYC … ànnŽðóë>¿q-®VL™B›'”¶c4‚ÀÌ™C Îçó0xpOtïîÀRTSƨŸjñÉ“±ÅÔ1*Á <|ˆöß|>ÁÁ}й³M Ÿ PšÇèŸ0Á|~}X„ÌœI›'”öct‚ÛÚZbܸþê{/_zÉ—åˆ(¦L³cQŠ‹‹ ‡aa^HJºoïn¨©Q ¦†8lmmaiiÉNáFhVðëׯ2œœ4€  gVãèß¿?ÜÄiq4aÿþýѵkWCŢÛo*°fÍ$XX°3àñÌ™3¬”Ka£kƒ7°fÍÖä¦p£ÜÚÚ‚í(Àh§P˜€ Ná4Tp §¡‚S8 œÂiÌBð… "77—í0(,`‚'&&¢¼¼œí0(,À˜à'Ož„··7,,,àïïôôtmÚЧO…BH¥R|úé§Ú´uëÖÁÉÉ b±!!!(((hUÚÕ«W KKKxyy!&& —Ëñâ‹/bÿþý°··‡¯¯/är9"""pþüy¦N—b*f8}ú4yðàAsÉ:äçç[[[Oª««ÉƉ››Ñh4D¡P±XLâãã‰R©$gÏž%|>ŸÈår’˜˜H\\\È;wˆB¡ S¦L!K–,!„Ó*++‰T*%[·n%J¥’$''‰DB.\¸@òó󉕕™>}:¹xñ"yøð!‘J¥äôéÓ¤¶¶¶UçÓÖó§/Œô…|8ìí통k×ÂÞÞ¾Å4™L†[·nÁÝÝ][FMM &L˜ ^è¹)æ #mp[[[”••éì;|ø0ÊËË‘€µk×bݺu¸}û6._¾ kkkõ3v>ÿüs””” ..J¥3fÌxnšD"ÁÈ‘#!“ÉtþvìØ ~¢2…0$xXXŽ9¹\¸téæÎ @€‚‚ 0#GŽ„@ @jj* à“O>Á˜1c  1lØ0Ì›7üñÇsÓBCCqþüyܼyP]]€€ÄÇÇ3q:.Ñ\ã¼­7Y+V¬ ]ºt!ãÆ#‰„lݺ•BH^^qvv&£F"¡¡¡äå—_&dÊ”)$??ŸôìÙ“øúú’qãÆ;;;²{÷nBi1B>ÿüs"‘Hȸq㈫«+ 'jµšäçç@ ÛàÁƒIpp0IOOoõùЛLnÐìúàgΜió„‡;wî 77ýû÷G=´û ÒÒÒàìì ???äççãÞ½{=z4ž BitMagic: bm::bit_grabber< T, BPC > Struct Template Reference

bm::bit_grabber< T, BPC > Struct Template Reference

#include <bmtrans.h>

Static Public Member Functions

static unsigned get (const T *, unsigned)

Detailed Description

template<typename T, unsigned BPC>
struct bm::bit_grabber< T, BPC >

Bit array grabber - template specitialization for various basic types

Definition at line 76 of file bmtrans.h.


Member Function Documentation

template<typename T , unsigned BPC>
static unsigned bm::bit_grabber< T, BPC >::get ( const T *  ,
unsigned   
) [inline, static]

Definition at line 79 of file bmtrans.h.

References BM_ASSERT.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00203.md50000644000175000017500000000004011365042646013136 0ustar tlktlk74076fed5ad83ed55ed544df9a3959e7bm3.7.0/doc/html/a00066.html0000644000175000017500000001007211365042651013426 0ustar tlktlk BitMagic: bm::gap_len_table< T > Struct Template Reference

bm::gap_len_table< T > Struct Template Reference
[GAP functions]

Default GAP lengths table. More...

#include <bmfunc.h>

Static Public Attributes

static const gap_word_t _len [bm::gap_levels]

Detailed Description

template<bool T>
struct bm::gap_len_table< T >

Default GAP lengths table.

Definition at line 102 of file bmfunc.h.


Field Documentation

template<bool T>
const gap_word_t bm::gap_len_table< T >::_len [inline, static]
Initial value:
 
                { 128, 256, 512, bm::gap_max_buff_len }

Definition at line 104 of file bmfunc.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00199.png0000644000175000017500000000615211365042645013264 0ustar tlktlk‰PNG  IHDRK(w ØÞbKGDÿÿÿ ½§“ IDATxœíLÔeÇ?ç ÄqGE4vÈ(ËQ±‡¬°t¹KgõCþQR«9Œj±ÅTºÍX1]æ\üXÃMˆì’µÄÈj A9¼øáÄApïþp|w÷}î{r"éçµ±Ý÷Çó<ïçýùÜgßç¹ÝáÄ0 Èhô½Ý †aþp±d†QK†aøÉ]0³©ƒafΰqãÆiç|ä>àñññ¹å‚†aæ".Êb£ì“%QAAmÞ¼ùÖ)b†™CÒ–-[\^ã=K†ap±d†QK†ap±d†QK†ap±d†Q€WŠåÅ‹éèÑ£ÞèjNŒs»1™L”Mf³ÙéüÐÐåääL{=W }ûöÝn7Å\Ë-‘‘Ï¢vÞș˗/Ó¡C‡fÔÇ$ôóÏ?{¥¯ÙÀ+Ų¥¥…òóó½Ñ՜Ǒ7ÞxƒÚÛÛguÌÌÌLúðÃ髯¾r:oµZé£>šöz®`µZ4ß*ïnE¿·#·Dˆôˆ|v×n¦9ÓÞÞNœQ“FjhhðJ_³/ÃÝPUUEV«uÖÆëìì¤3gÎÐîÝ»©¨¨hÖÆõÑÑÑtáÂéøVy7Û1™kÌ–ÏŒ3^+–v»¶oßN†ÂÂÂèÓO?%"¢¾¾>Z³f }öÙgA:ŽŽ9B»wï&NGáááT\\,õ³ÿ~zýõ×eåÆÙ¶m›Óò`hhˆž|òIêèè "¢ßÿhþüù´dÉ*,,”îýþûï)&&†æÍ›G+V¬ ÆÆF""Ú´iY,Ú´i™L&""ª¯¯§¸¸8R«Õ´lÙ2ª¨¨ ""‹ÅBÏ=÷;vŒ´Z-577»ôittTècaa!=ýôÓôî»ïÒŸþ)iq‡œ.Ñü<ÕF$ŽÏÕ«WiݺuDäÚ;¹¸ò®¨¨ˆ-ZD~~~Nû÷ï—íw¦1™D.·ˆHVÑÞ½{I§Ó‘Z­¦Õ«WSWW—tM”w7›ëî|ÍÑ™æ Úµkedd¸úzà4Š‹‹)::šüýý饗^r*ð"ŸDþÊéô4öŠ€ D„‚‚¹ËNTVVÂÇÇ;wîÄðð0L&‚ƒƒa4ÑÓÓ___|ðÁ°Ûíøâ‹/@DÈÉÉÝnǾ}û°hÑ"©¯ŠŠ þøc˜Ífº»»¥kv»'OžÄ /¼€eË–!77}}}²ó;þ<æÍ›‡þþ~Àálj‰‰ òÅR¤ËÝü¦òÓO?aëÖ­xðÁ±gÏtvvÊêŠã›pöNƒ©ÞÙl6œ;wNºor®mmmÓúõ4&rˆrK¤§¼¼øã?Ü(nç<="ŸEí¼‘3uuuÐëõHOOGhh¨¢B ï½÷^{í5§s±±±0 BŸDþŠtz{GDÅRøCž°páBR©TÒñòåËéÔ©SÒq`` Ýø5#µZM~~~Ò±7ÆÑét”œœL¥¥¥´uëV2™LôÍ7ßQGGµ´´Ptt´Ôndd„Ö®]Kããã´dÉé¼J¥¢÷ßßåØ]]]N÷-]ºTúÔÚ××—"""ˆˆèǤ·Þz‹ôz=eddPrr²Û¹Z¹r%ÝXwwwÓéÓ§iõêÕ²íDº&—5JæGDOñññÔÛÛK‡¦¤¤$Š‹‹£ãÇ µ»C"gïÔj5;wŽöìÙC/^¤ ÝnwÙ¯'1q‡\n‰ô¼øâ‹T[[KÏ<ó iµZJII¡ÌÌLÒjµnç|³z¼Ñn&9ÓÜÜL‹/&"¢ÊÊJzõÕWÝjêî˜§sz½žˆÄ¹áÎ_9ýýýÅ^ ^Û³ìííu:¶X,´`Áou¯hœÍ›7SII •””ÐÚµk¥ó†ž}öYêèèpúûòË/)((ˆ®]»æÔçñãÇ]n˜k4šiã÷õõQpp09~•JEjµšþþûoêïï§ññqá¼PQQ}òÉ'tâÄ :qâÕÔÔPRR’Óþ+Dº<™Ÿ#€üüüèÞ{ïÞ«Q ˆœ½+//§ÌÌLÚ»w/µ¶¶ÒÙ³g) @¶_¥1q‡\n‰ô ÜÜ\êëë#£ÑH6›^~ùeEs¾Y=Þh7“œ‰ŽŽ¦’’:pà½óÎ;ÓîuEHHY,—:E>‰üu§Óë?3)÷8J.É•••€ÁÁAèõzäååIËðIÚÚÚœ–MMMNËðÆÆFTUU¹<CCC „^¯wꣵµhnn ãÑGEaa!jkk¡ÓépõêU7–¡þþþà¼ÄijjB`` .]ºàƾN§ÃÉ“'a6›qÏ=÷LóÆd2!-- QQQÈÊÊBWW—Këëë–à“9r!!!•]†‹t¹›ßTêêê––†GyÙÙÙ°X,N×Eñ-E1˜êÝ矎U«VIÇ ðññq¹ ¿™˜¸B”["=ÙÙÙHHH®UWWKù,š³;/EzÜ-ÃåÚy#g&÷,'IJJÂÛo¿íÖß²²2„……áÊ•+nl9©T* ¡O"E:=‰½#³²gùÔSOañâÅHLLÄ<€ÔÔTŒy\,wìØøøx—Ç¢q&IKKÃC=$íóM’›› FƒäädDFFbãÆÒ=;vì@hh(’““¡Ñh¤â ?þ8ÐØØÈÊÊ‚V«EJJ î»ï>¤§§€Ûà\¹rYYYN‰æÈ›o¾‰õë×O;íÚ5¨Õj”——ËK‘.wósÄh4"11F£QÚSžŠ(>SßÄS½“‹ÁTï:;;†ÄÄD¬Y³©©©X¸p¡ä·bâˆ(·DzÌf3¢¢¢‹äädãСCR¿îòîfr]䳨7rfj±liiÁüùóÑÐÐ ô×n·cË–-ÐjµHJJBTTRSSa0„>¹óWNçœ-–“ŒŒŒ ¶¶Öi3üVp³ãtuu¡ººZÚ,v¤µµÕÕÕÓ>аX,¨®®vzâkooGuu5.\¸à±öññqÛ(E¤Kn~ÞÔ611ÞÞ^騕w¢8bµZQSSƒóçϸQ@ëëëeûIL‘Ë-‘›Í†~øß}÷ô”ãˆÒ9+Õ£Äg¥ï‘™æŒ§üöÛo¨©©ÕjvMÎ'wþzS§¨X ÿ­ÿR:s§ÐÓÓ#üp$66–âââfQÑÅâïä/¥»(‹â+Á0w *•ŠBCCe¯Ë}€Ä(ãnð—‹%sWJÏ?ÿüí–qÇr7øËß g†QK†ap±d†QK†ap±d†QK†ap±d†Q€ð< Ã0w#}ƒçÛo¿½µj†aþGÈ>Y2 Ã0¼gÉ0 £.– Ã0 àbÉ0 £€ÿå¿T(ö.ãIEND®B`‚bm3.7.0/doc/html/a00184.png0000644000175000017500000000431411365042645013254 0ustar tlktlk‰PNG  IHDR«(Ì obKGDÿÿÿ ½§“IDATxœíHSïÇßþ˜K͵jý˜† ý04‘²ˆT˜RFAa¥E¥EhdEQTf„„!ý2®¬†–Ôú¥¤Eñµ “2+7]­Íe©Ss;ß?ÂKKïl¶¬}x^paçžçœûð¾çÙÝÔˆ Æ¿O•ûß®€ÁøU˜X.+Ãeðr¨Tª‘¬ƒÁ°aÕªUι m°ÜÜÜþxA †ƒÈÒþ‹ã8;Ø1bÇq‚zd=+Ãe`be¸ L¬ —‰•á20±2\&V†Ë øPÀÞ½{‡ÊÊJlذÁà +ÉdBAA²²²s¸qCÁqõ͘1IIIÈÏχÁ`ðýsm™L†„„:µ–¡(--…\.ÇܹsG4¯£8ee­««C~~¾3†vžöövœ={–·ÓÒÒÅb/ÎY hµZhµZpŽãxÛh4Nž<‰²²2hµZ477C¥R!88EEEN¯Ç*• ?ÑœÃÁ)+ë¿@PPÞ¼yÃÛ·o߯¶mÛŽsüë´´4ôFÛ¸q#RRRx[©TbÓ¦Mˆ‰‰A@@€ÓëreœÖ³Z­V¤§§C"‘`âĉ8|ø0Àh4"..'Nœ€¿¿?&L˜€sçÎaçΘ0aär9”J%?αcǰ~ýzA[(ÏÇ‘˜˜HJJ‚^¯GRR***ìÖýc\­ÇaÚ´iðõõņ `±Xã{zzœ)û¬^½³gÏÆåË—/_¾Ä‚ 0jÔ(Ìœ9ÓfÕ½wïBCCáåå…ˆˆTUUñ¾òòr„‡‡C,cÖ¬Y(--å}J¥AAAðööÆòåËÑÞÞÎû„òéõz,Z´………J¥xõêÕ‡A!ÇqBnnܸAnnn´cÇêìì¤ŠŠ 3f ©T*ÒétäîîN{÷î%«ÕJ§OŸ&täȲZ­tôèQš>}:?Vii):ujPÛ^žÆÆFòõõ%""“ÉDr¹œÊÊʨ··×ní?Æét:òòò¢Í›7SOO544T*¥;wî ˆ{ÿþ=effRppðó“ššJ©©©ÎÓ¥K—œßºu+mܸ‘:::H.—S^^uwwÓýû÷I"‘УGH£ÑŸŸ]½z•ºººèàÁƒ4uêT²Z­ôáÃòóó£óçÏSww7]»v|||¨®®Ž^¼xAb±˜Š‹‹Él6Snn. ÜÜÜ!óy{{ÓŠ+èñãÇÔÓÓcSsqq1EFFÒ… ¨»»{È9‚ã8åÿœ&Ö±cÇÚcÏž=´bÅ Òét€:::ˆˆ¨¾¾ž<==éÛ·oDDôüùsš4iÒoçùQtDDT]]=ä˜?‹µ¶¶òþèèhR©TDDdµZéÖ­[´téRš5kåääÑh2‡£bÍÌ̤5kÖR©¤ˆˆ_zz:mß¾Ž?N‰‰‰üùÞÞ^:räuvvR~~>EGGÛÄ­\¹’öïßOYYY´fÍ_XXåææÚͧÑhµ´´^ç“'Ohݺu4eÊÚ½{7577 OŠöÄê´žuÚ´i‰D¼={ölÜ¿Ÿ·}}}|ßõŠÅbxzzò¶3ó8¹\ο²²›7oFHH¶oß…BñǾ™ÖÒÒ¹\ަ¦&ÔÕÕ!((ˆ÷™Íf,Y²}}}˜9s&^$a×®]­Vkã€àà`h4˜Íf„††ÚøBBBÀn>pww‡¿¿¿`ÝQQQˆŠŠ‚Á`@AAbccŽ’’’aÍÃÏ8M¬ýÁô£×ë1nÜ8g ?ây~F$A,ãÓ§OhkkC__ŸÍMã,¾|ùµZ‹/B«ÕbáÂ…¸}û6ï7›Ípssà×ëmbKJJ P( ‘HP[[kã33f F5 ®N%‰`>ƒÁðË7§ÅbÁÓÓ£Gvèúíá´ VSSnÞ¼ øúõ+Μ9Ãß‘ŽðìÙ3¨ÕjAÛYy%** ÕÕÕ8t芋‹1}útìÛ·---¿5nWW>þ “É„ªª*,[¶ !!!Xºt)âââPQQׯ_óÄÕ«WëׯóÂ{úô)RRRàááøøxܽ{ ¾o"‹‹‹…B¥R N¨©©ÁÇÀn¾_¡¼¼III˜?>ˆ•••(,,ü­ù±A¨w€ƒ=ë¼yóhÆŒM“'O¦„„êííåûÀ~Þ¾}kÓ[VWWÛô¬5¨m/ÏÏ=ëœ9shÁ‚TUUe·öÁzÖ‰‰‰á{Öimm¥ììl r~ìõ¬øcüøñ”ššJ&“‰ONNI$R(@«V­"‹ÅÂÏL&#…BA‰„òòòø¸ììl’J¥Oãǧ-[¶Ñ÷¾;99™¤R)ÅÆÆR`` %$$Pnn®Ý|†<<<¯Q¥Rñý}ÿ~d8üñ V?f³™>>#X ãwøÏ‹U&“añâÅ» †`_d¸ L¬ —‰•á20±2\&V†ËÀÄÊp˜X.ûÃlŒ‡ž`]¹råÏVÃ`8ˆàÊÊ`üc°ÿ)Àp˜X.+Ãeø?s>Ôó?‡TIEND®B`‚bm3.7.0/doc/html/namespacemembers_0x69.html0000644000175000017500000001171411365042652016714 0ustar tlktlk BitMagic: Data Fields
Here is a list of all namespace members with links to the namespace documentation for each member:

- i -

  • ibpc_all_one : bm
  • ibpc_all_zero : bm
  • ibpc_close : bm
  • ibpc_end : bm
  • ibpc_equiv : bm
  • ibpc_uncompr : bm
  • id64_t : bm
  • id_max : bm
  • id_t : bm
  • ilog2() : bm
  • ilog2_LUT() : bm
  • ilog2_LUT< bm::gap_word_t >() : bm
  • improve_gap_levels() : bm
  • is_bits_one() : bm
  • is_const_set_operation() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00106_source.html0000644000175000017500000002300011365042630014771 0ustar tlktlk BitMagic: sample10.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00156.png0000644000175000017500000027431311365042637013264 0ustar tlktlk‰PNG  IHDRGøi \IbKGDÿÿÿ ½§“ IDATxœìÝyXÍéã>ðûÔi‰Â(2ˆ$JH¶ì¤´#C}Æ2cÆXfFvãkß³LI%"Ù‰²TÆ’ì²$•­MËéœóûÃoú0 Å©wuî×uÍuétÎóܧéíÒÝó~‘\.—ƒˆˆˆˆˆˆˆˆˆH¹Äª€ˆˆˆˆˆˆˆˆˆH,G‰ˆˆˆˆˆˆˆˆH)±%"""""""""¥$:‘¢ >ÂÝÝ]èDDDd"""""¢ÊF$ >‚?†Q9Ë•£DDDDDT)Íœ9ݺu:½åرcðõõ:Qî9JDDDDDDDDDJ‰å()%–£DDDDDDDDD¤”XŽ‘Rb9JDDDDDDDDDJ‰å()%–£DDDDDDzýú5víÚU¢×dgg#==ý½Çsssqûömdee)*Q¥Ær”ˆˆˆˆˆH@999ضm[‰^€}ûö½óXll,<<<0oÞ~ýúuÑ<=z4444`nngggDFF¾“%&&5kÖÄ€ ¦¦†V­Z¡wïÞ8yòäGßCnn.455ßyLKKëùÿqâÄ XZZÂÎÎ8p œœœŠ¾ËYœ÷@DDT‘ð¶z"""""RjíÛ·G||<ƪU«ÂÚÚC† AÕªU¡¦¦†›7obãÆHNN†ŽŽärù;¯ÿ§”‰DPSSƒªªjÑÇo«S§ÄâÿýÖ A\ºtéç<}ú>|g?Ñüü|´k×î£ïACC£¨Ü|ûuÕ«Wï¹OŸ>E½zõŠ>‹Å4hP±rç=U$,G‰ˆˆˆˆH©ÉårŒ7ãÆÃíÛ·\tûü™3gàçç‡ß~û æææPQQƒƒÃgÍ“‘‘ñÎǯ^½‚––Ö;U©RX¼xqÑcùùùï­ÿV·n]$''¿óØ“'OЬY³÷ž[¥J¼|ùòÇ¢¢¢ÐºuëOæ,Î{ ""ªHx[=)µ¿þú ßÿ=TUUÑ´iSôêÕ Ïž=ðfNcccXXX@EE ¼U½8ÒÓÓqöìYonƒ‡••Õ;ϱ²²Â•+WðàÁoŠÑÑ£G#**ê£c7oÞr¹±±±€””ܼymÛ¶œ9s÷ïß/š#::¯^½$&&bÞ¼yPQQùdÎâ¼""¢Š„+G‰ˆˆˆˆH©õêÕ û÷ïÇðáá««‹›7ob̘1€:`ÇŽ˜4iÔÔÔ ‹add„µk×bêÔ©%š§V­Zؼy3vïÞäädÔ«W...ï¬Æ¬W¯†ŽqãÆ¡iÓ¦xøð!ÌÍÍaooÿѱÕÔÔ0yòdÌ;æææHLLÄðáÃahhX½z5úõë‡  U«VèÖ­¼½½ajjŠ7n`̘1E+@ÿ+g\\Ü~Žˆˆ¨¢Éÿ½aQ'‰0sæLtëÖ­XÏ—H$HLLDAA5j]]ݢϽ~ý‰‰‰¨Q£6lˆ´´4¤¤¤ eË–Å΃mÛ¶aÍš5¸~ý:ÔÕÕѤI“ÿ¼]þÙ³gHJJ‚¾¾>LLLŠ=Ï‹/pïÞ=Ô­[FFF}îãÇñôéSÔ¯_¿¨DýXÎ’¾‡9vì|}}ßÛ·•ˆˆH ±\9JDDDDDJOMM ü\•*UÞ¹uÜÐа¨L,)±XüŸó¼M__úúú%¿fÍš¨Y³f±ž[¯^½wfzÛÇr÷=UÜs”ˆˆˆˆˆ¨”ikk£nݺBÇø¤å¬(¨$¸r”ˆˆˆˆˆ¨”YXXTˆÕ–ËYQÞQIpå()%–£DDDDDDDDD¤”XŽ‘Rb9JDDDDDDDDDJ‰å()%–£DDDDDDDDD¤”XŽ‘RÉår¹Ð!ˆˆˆˆˆˆI$ ¡ˆX¬ cääÄó*ÐÒj‚üü{ÉòK5Û‡T«f ™,¯_ÿ ¹\Z*sðÇP""*'bÅB' """""R´Ý»w ðôék¬Z•€Úµµ0nÜPUýtiûèQ6–.½‚Ÿ~²„‘Q•2Hù®ˆˆG8v,ÆÆÝáèhŒV­ôÊUÙLDD¤H\9JDDDDDT îßO‡‹ËjÔ¯¯‡¿þƒ*UÔ‹õºíÛÏbþüp$&Î‡ŠŠ0¥dJÊ+,Yr»w_@³fuðë¯`kÛH,DDD¥(–{Ž)XRÒ3¸¹­E:ºøóÏQÅ.Fàï¿¢e˯+FÀÈHË– Ä‘#?ÀÀ ÜÜÖÀËknÝz*X&""¢ÒÀr”ˆˆˆˆˆH?~ µÐ×¯Š¿þ ͽ>66 ­[—Rº’133‚¿ÿhìÞ=ééY°·_Œ)Sšš)t4"""…`9JDDDDD¤ ))¯àá±Õªi! `L‰‹ÑŒŒ×¸w/VV&¥ð3ÙÙ5Æ¡CS±bÅ`DEÝBûö¾X´è rrÊþÀ("""Eb9JDDDDD¤©©™ps[ 1vï‹5´K<ÆåË —ËaiY¿~\]­õ3~ø¡¶n=ƒ¶mçbÛ¶³(,” ˆˆè³°%"""""úBÏŸgÃÃc-TTD =½ªŸ5Nll¾úª& ª)8¡âhjªaìØ®ˆŽþm0gN(:w^ˆˆˆ«BG#""*1–£DDDDDD_àŸbT"‘b÷î±04üüb3>þA¹ÙoôSjÖÔÆìÙN8}úg´lùFŒØŠþýW .îÐшˆˆŠå(ÑgÊÌÌÃ7ßlBvv>öì##Ý/ïï¿–»ýF?ÅØXk×~ƒ¾‡††ŽŽ+0|ø$%=:Ñ'±%"""""ú ¹¹øö[?¤¤¼B`àXÔ©óeÅhRÒ3¼x‘K˯”°lYZÖÇž=ã±mÛpܽ›ŽN`úô žlODDåËQ"""""¢’H¤3f®_‚]»ÆÀÄDÿ‹ÇŒ‹K‚šš*Z´¨˜åè?zôhŽ£GÀ¢Eî8~<íÛûbÞ¼pdd¼:Ñ{XŽ•€T*äI»};wŽ‚™™‘BÆsóºÐÐ+d†ÜÜ¡ãa9JDDDDDTLr¹3fãÀËØºu¸BOúûïhÕªbÆT\ššj=º bbfbøðŽX±âlmçaÇŽhH$R¡ã±%"""""*®yó±k×9lÚä ;»¯6n~~!®]KF«Võ6fyR­š&~ø¡bbf¢_¿–˜5+;/ÄÞ½ñÉäBÇ#""%Ær”ˆˆˆˆˆ¨V­:ŠuëN`ùòAèÙÓ\¡c_½ú‰´ÂT_RúúUáëë‚3gf M›˜0a'zõúÇŽ% ˆˆ”ËQ"""""¢Oؾý,,8__¸ºZ+|üK—BO¯ªBvª¾úª&V¬Œ£G@ݺ5ðÍ7áâ²±±÷…ŽFDDJ†å(ÑG„„ÄaÆŒ`LŸÞ>>v¥2Gll’B÷/­(š65¶mñÿ$€£ãJx{ûáÆ“‘²`9JDDDDDô¾†É“ÿ˜1]0iRR›çÂ…ûhÓ¦A©_ÞYY™ $dvî…ää—èÞ} &NôÇ£G/„ŽFDD•ËQ"""""¢ˆ‹KÂØ±ÂÃÃ3gö/µy>|ŽÔÔ ¥.Gÿaoo†ÈÈ©X³æÄÆ&ÁÎn>fÎ Azz–Ðшˆ¨’b9JDDDDDô/‰‰)ðòÚ€ŽcáB7ˆD¢R›ëâÅûPSS…¥eå<©¾¤TTDprj…S§~Âܹ.8pà2lmçaÉ’dfæ ˆˆ*‘\.— ‚ˆˆˆˆˆ¨¼HIy‡hØP;vŒ„––z©Î7}zS°oßÄR§¢ÊÍ-€Ÿ_V¯>Æ·‡OGT©Rºÿ_ˆˆH)Ärå(Ñÿ÷üy6\]×@WW ~~ÃK½Þ¬µ±á-õÿEKK&tÃ… ³àím‡åË }{_øùFAA¡Ðñˆˆ¨‚c9JDDDDD„7+‡ Û Ø¹stt4K}ÎŒŒ×¸uë)¬­MJ}®ŠNGG ?þØçÎÍ„‹‹æÍ ‡­í<ì܃ÂB™Ðñˆˆ¨‚b9JDDDDDJO"‘ÂÛÛ<Ç®]£ad¤[&óÆÆ>€L&çaL% §Wsæ8!:úôèÑ¿üŒN`ÏžXÈdÜ5ŽˆˆJ†å()5¹\ŽÉ“ÿÂå˱}û˜˜è—ÙÜ/Þƒ©©!ôôª–Ùœ•EíÚÕ±`¢¢~†ML™òºu[ŒððËàÑDDT\,G‰ˆˆˆˆH©Íž½û÷ÿÍ›¿EëÖÆe:÷ùó÷¸jô Õ¯¯‡åËãøñéhÒ¤6ƌَ>}þG^:U,G‰ˆˆˆˆHi­^} Û¶Áòåƒag÷u™Î—'Á¥KѾ½i™Î[Y5jdˆõë‡áðái¨UKC‡n‚“ÓJœ={GèhDDTޱ%"""""¥ô×_ç°`ÁøúºÀÙ¹u™Ï›„‚‚BØÚ6*ó¹+³fÍê`ûö8p`245Õàžë÷@èhDDT±%"""""¥søð5üøcƷǰaÉ}ÆÆz¨[·† óWv­ZÕG`àXO@^žýû/ǰa›qýú¡£Q9Âr”ˆˆˆˆˆ”Ê… ÷0vìŸ2¤=fÌp,GtôØÚ–í­üʨ}{S„…MÄΣšš‰=–bôèí¸s'MèhDDT°%"""""¥‘˜˜‚¡C7¡cÇÆðõu,Gnn.]z[[î7ZVìíÍ1›6yãÖ­§èÚu&MÚ…ž ˆˆÄr”ˆˆˆˆˆ”ÂãÇ/1dÈFXX|… †AUU¸‡.^¼‰DÊýF˘H$Bß¾8vìG,_>±±IèØq>¦N Ä£G/„ŽGDD`9JDDDDD•ÞóçÙððX ]]-lÞü-44Ă扉¹ }é šCY©¨ˆàêjS§~Â’%žˆŽ¾ ;»ùøñÇÝHN~)t<""*C,G‰ˆˆˆˆ¨R(((üàã¹¹6l3`×®ÑÐÑÑ,ËXs:p¿Q¡‰Å*ðô´ÁéÓ?cÁ7œ:u¶¶ó0cƤ¤¼:•–£DDDDDTᥦf¢gÏ?Þ+´$)† ÛŒžc׮ѨU«º@ ÿçûò–úòBMMƒ·Ã™33àëë‚Ç`k;³f…"55CèxDDTŠXŽQ…·~ý ܺõNN+‹ R¹\ŽÉ“ÿ•+°sç(˜˜è œòÿí7ÊØÊ55U|ó-bbfböl'8píÛÏÜ9{‘žž%t<""*,G‰ˆˆˆˆ¨B{ñ"Û·Ÿ<}š GÇ7éÌ™!Ø¿ÿolÞü-Z¶üJà”ÿsòä 4n\»\¬b¥SSS…bbfâ—_°oß%´kç‹ßÃóçÙ}­L&ǘ1Û?ù<""*XŽQ…¶yóiJ……R¤¦fÂÞ~1vì8‹•+½`gW¾öö½/‚ƒãЮ/æÍ Ç‹9|Mpp,öíû..«‘›[PƉ‰ˆ¨¤XŽQ…•™™‡O¡°PVôXa¡ÙÙùÐÑÑ‚MÓ½ïÉ“WHLLA—.,G+MM5ŒÕçÎÍÄäÉ=pmÛÎÅ¢EñêÕë¢çååIàë»"‘÷ï?ƒ$©€É‰ˆèSXŽQ…µ}ûHÞ{\*•!++¿èûòâäÉÐÔTC»vÜo´"ÒÒRǸqö8wn&¾ÿ¾vìˆFÛ¶s±té!dfæbÆ“xñ"r¹……Rœ={“&í‚\.::ý‘œKQ”›[€Ö­EFFî>G,VEíÚ: ›##Ý2L÷a£FmCnnþüs”ÐQH²³óáçw6œ„T*‡DRˆ¼¼wËz‘H„ñãí1c†ƒ@)‰ˆè#b¹r”ˆˆˆˆˆ*¤;cÿÑçJñøñK ´ùù…e”ìäRNŸ¾É[ê+‘ªU50iRœ;7 ußÙÞár¹kÖ/:4ŒˆˆÊ–£DDDDDTáH$R¬ZuRéß'«BCCŒÑ£» 0p,44Äe˜ð}qqIÈÌÌc9Z ¥¦fàܹ»Eƒý›\.Ç/¿ãðákeœŒˆˆ>EØ}†€€óxþ<Àûå¨X¬uõ7èŒÙ 5jh—}À8yò&Œõ`jj(tR°ß~ ƒH$‡¾ß6jÔv„„L@ëÖÆeŒˆˆ>‰å(U(……2¬Xqä_Š ª*BÕª;Ö>>v¨VMS|ÿåĉD®­„Μ¹ãÇ?ù<™LŽÂB¼¼6 "b LLôË } o«'""""¢ %,,OŸf@.—C$TTDÐ×ׯìÙŽˆÿ'v/wÅè³gÙ¸zõ1ºve9ZÙøûÇýY$A]] ‘èÃÏ•ÉdÈÉ)€»ûZ<ž]F ‰ˆècxZ=U2™õêMð¦­U«:&Oî 6PW/¿7Æ]Ä?ìFB‚/´µ5„ŽC VPPˆ[·RqãF nÞ|Š„„ÇHLLAjj&@UUªª"üoOÒZµªãÔ©Ÿ £S¾Š|""%[~ÿõ@DDDDD •˜˜ˆÔÔT¡c|‘ žýyôèV°µ­UÕ|DGŸQÈøµjÕ‚™™™BÆz[DÄUtêÔ˜Åh%!ú¯¥¡ï=Ojjz‹õ ëC]Ýb±D"M¤¦f aCo¼x±rù‡r¢w <þþþBÇ ¢J†å(‘‰DhÖ¬™Ð1>‹\.GPÐüñ‡ ìí›@E¥xUq]¿~]¡ãýãõëœ(55ýû÷/úøäÉ“hÙ²%444дiS„……}næÌ™000€††ºvíŠÇ<==‘––OOODEE!-- ½zõÂŽ; ««‹ëׯãêÕ«èС455ѸqcìÚµ«hÜ¿þú 5‚X,†‘‘–,Yxþü9ºwïŽeË–¡N:000À–-[0mÚ4ÀÈÈeô•z_TÔ-¤¥eÂÍÍZ° T~Èd2Lœ8:::044Ä‚ ”ìûøC×Χ®˜ššB[[ÞÞÞJ¥€€€˜˜˜@KK  xç—ÿu+âšÛ¼y3Œ¡­­ Èd2…­‰ˆJŠå(}Pnn.Nœ8àMQêèèˆÉ“'#33‹-ÂàÁƒqóæMDFFbëÖ­ˆ‰‰Á³gÏ ££ƒyóæ6lØ}}}lذíÚµCAA¢¢¢°wï^DDDÀÈȽzõÂàÁƒ‘‘‘õë×cìØ±ˆŽŽFVV|||°téRäää 00?ýôÒÓÓ!‘HpâÄ ¼zõ ÉÉÉøý÷ß1|øp -- S¦LÁ¬Y³ûÚíÙ ++˜˜è –ÊØØX¨©©áéÓ§ Á¢E‹°gÏž}ÿûÚ©U«ÖG¯¨¨(œ>}‰‰‰¸víÂÂÂpüøq\¾|ÞÞÞX¶l^¾|‰.]º <<Àǯó/½æ¤R).^¼ˆÛ·oãÊ•+ Å©S§ÊäëODô1,G‰ˆˆˆˆè“öîÝ‹V­ZÁÛÛprrBß¾}ˆ¼¼<@~~>ªU«†]»v­ŒÓÕÕ…ŠŠ tuu¡¦¦àMéºzõj´o߇†‘‘Æ ØÛÛÃÛÛAAAPWWGtt4  4lØjjjE«Üd2¦OŸ‘H„îÝ»C,cêÔ©Egee òµÊÎÎGDĸ»sÕ(½¡««‹… ¢J•*°³³Ã„ ŠVH—äûøík§jÕª½> ð믿B]] 4€……222°k×.¸¸¸ÀÅÅšššøþûïѢśCÃ>v—4ë‡øúúB]]¦¦¦hÞ¼¹Òm·ADåËQ"""""ú¤Ç£qãÆï<Ö¤INKKCÍš5K<ÎÛ×Îç^5jÔ@ZZÚó}ì:'"ª¬¸r”ˆˆˆˆˆ>©G8räîÝ»àÍÞ„ÁÁÁèÞ½;-Z„.]º@,ÃÆÆC‡Å“'OŠ5n÷îÝ…ÄÄDÀëׯaee…ÐÐP<~üÍš5CÇŽ¡ªªŠ˜˜dff–Ú{T„ää—ˆ‰¹Ëƒ˜èIIIEûzfeeaÆ èÛ·ïù¹×G·nÝP´rõÊ•+8}ú4€_ç%µwïÞ÷ŠV"¢òˆå(}’¥¥%¦N +++ôìÙÍ›7‡››z÷îaÆáÑ£G°°°@÷îÝááá¹sç½ÖÐÐ&L@\\Ü{ã~ýõט;w.Úµk‡îÝ»£qãÆ077‡§§'œœœ˜˜ˆÎ;£G˜;w.6lˆ©S§–å[/‘àà8Ô¬©.]š …Ê‘víÚaÊ”)èܹ37n cccŒ5ê‹ÆüÜëÃÉÉ =zô@³fÍеkWôïß¿¨üüØu^Rßÿ=öîÝûY,‰är¹\èDDDDDTúþYiffV¬çËd2¼|ùzzzE%%%áÖ­[011ygoÂüü|\¸pyyÃ;5 IDATyhÙ²% ‹>—žžŽK—.¡M›6¨Q£ÆçJNNFBBêÖ­ûÎ~ˆ™™™¸pá aaaGáÞ½{èܹs‰Þ{q”ôëó!:-@çÎM1w®³¢bQ9$‰àïïÁƒû5yyyˆ‰‰AõêÕѺuk…äø’ëãêÕ«HMM… tttÞùÜ]çBòòòøûû œ„ˆ*™X–£DDDDDJBå_eö¥_ŸøøppXŽÈÈ©hÑ¢ž"£Q9ó9å(}–£DTJby[=‘ìÚuM›±%""ª@XŽ}¡ÌÌ\„†ÆcèÐBG!""¢`9JDDDDDô…vï¾O©'""ª`XŽ}¹\ŽíÛÏÂÍÍU«j‡ˆˆˆJ€å(Ñ8{ö6îÞMã-õDDDËQ"""""¢/°yslmÁÌÌHè(D•ÚÇUpãFŠÐ1ˆ¨’a9JDDDDDô™nÝzŠ#G0rdg¡£Uj‰ÉÉU`o¿Ý»/Áºu'ðôi†Ð±ˆ¨`9JDDDDDô™6m: cc=ôèÑ\è(D•šššíÚ=CHÈ´jeŒ•+ÂÚú7xx¬E`àdfæ ‘ˆ*(–£DDDDDDŸáÅ‹Çbüx{¨¨ˆ„ŽCT©Éd@\\MDF^ƒ››5âãç`Ó&èèhaúô XZÎÆèÑÛy ‰Tè¸DTˆär¹\èDDDDDTú‘šš ¡£”Kééé¨U«ÌÌÌŠõüÅ‹#°cÇYÄÆÎ¦¦Z)§£òD$zS†»»»=VX¨‚ôt-Ô¨‘MͲ)çòòÄPS“BUõó¬—JEÅ~}f¦:tt >{®/±gOÚ¶õ†šš îÜIƒ¾~UôêÕ}ú´€…E=>œ€ààXœ?::Zps³Æ!íѸqmAòQ…Ër”ˆˆˆˆHI<~üÜ£ïcªW¯Žzõê}òy99ùhÛv.¼½í0mZï2HF則‡@.áÅ M¤¥UÁ‹‰€Æ_B_?·Ô3H$*¸tÉzzy05}õYcdg«áòeCXY=ýd¡›•¥ŽË— `jš#£ìÏšïKÙÙÙaâĉ¸s' Wq—/?BÕª°·7CŸ>hÚÔ‡_î]ç”ô 66 1dH{88´ä/1ˆèCXŽ•ÔæÍ§±pá\¸05kj ‡Ê\.ÇÅ‹÷±gO,ÂÃ/#33:| WWkôëgmmRÏ›[w÷µxñ"û÷O‚ž^ÕÏ'?¿ÿ„eËÂÕÕú“Ï_µê(.<ˆ%K<0xp»ÏšSўܸ1ÿ³öT•Je˜8ч]î]£Ñ¶mÃRHYv²²òpèÐUlØp‰‰)Ëå055ÀäÉ=áäÔZÐ}g‰HáXŽ}J@Àyüøãnœ:õ4à ²Š@*•áìÙÛŽÃÁƒWPPPˆ.]šÂÍÍ=z4‡¦¦šÐ?i„8z4¡¡affTjó$&>A·nKpäÈ44o^÷³ÆJe9r¢£ocÏž 07ÿ¼qÊ›§O3ðûïa8pà*$’Bhk«ÃÍ­ <=m`iY_èxDôåXŽ}Lnn:t˜Þ½Í1¾›ÐqèŸ (è"BC/!55VVÆpq±‚£c+èéU:^±­^} ‹Ķm#Э[éîå)“ÉѬ٠LŸÞ>>vŸ=ŽD"…—×F$&>ÁÞ½ßUªí'$)–.=„Í›O¡ @ ©T†† áêúfZ}¡#Ñça9JDDDDDô1+VÁÚµÇqöì/Ðׯ8åš2IIy…ÐÐ7ûˆ&&¦ÀØXïÿï#j]!÷Š »„qãþÄüù®6¬C™Ì9xðÔ¨QkÖ|óEãäæÀÝ}-RR2°oßDÔ­[¹4ÊÌÌÅÊ•G±yóihjŠˆ••‡Ö­ß”ðNN­P³¦¶Ð1‰¨øXŽý—gϲѡÃ<ŒgI“z‡Þ’™™‡ˆˆ+سç"bbîBGG ŽŽ–puµ†µµ‰ÂOt/+ññàî¾Ú`Þ<×2›wÙ²H^Àùó³¾x¬ÌÌ<8;¯Dn®ûöMª”¿THN~‰Å‹#‹Æk£^½šˆ‰¹ƒ‚‚BtîÜ..VèÝ»E…ؾHɱ%"""""ú/3fìAddΜù¹TN §’‘H¤8yò‚ƒcqøpd29zôh77ktíÚêêb¡#~‘Ç_¢OŸe°²2ŸŸO™üsæÌ-xx¬C|ü¯¨]»ú÷ìY6W@KK ¡¡¡££©€”åÏåËðË/Á¸rå¼¼Ú£E‹zˆˆ¸‚Ó§oAKK ®®màéÙ_ •ˆ>Œå(чܽ›†®]añb ØVè8J-.. !!qØ»÷22^ÃÆ¦!ÜܬáàÐ::ZBÇSˆV[¤LÌÉÉGÓ¦3°nÝP88´TȘÉÉ/áè¸FFÕ4®Òþ‚A&“c÷î ðõÝUU̘á{{3„„ÄÁß?wî¤ÁÌÌžžmáâbU)WÒU`,G‰ˆˆˆˆˆ>äÛo·àÁƒg8|xZ™®à£7îßOGppBBâ”ô MšÔ†‹‹\\¬*Ý>–R© ^^qóæS<ø=ŒŒtÉÑ«×hÛ¶!~ÿÝYacÞ½›†VÁ̬üýGAMMUac—7™™¹X´è þü366 ±t©'LLô—„ÀÀ Ø·ïrs%°·7ÃàÁí`ooÆ¿[ˆ„Çr”ˆˆˆˆˆèßΟ¿gçUð÷®]› Gi<ž}û.!$$qqP«Vu89YÂÍ­ ÌÍë ¯ÔüüóìÞ}AAãкµ±`9fÎ ÁÅ‹÷9U¡ã^»– 7·Õ°µý›6yWúBðÊ•G˜2%÷î¥ã‡ú`Ô¨ÎPUUA^ž^A`àœ={:ps³†§§ 52:6‘²b9JDDDDDô6¹\GǨREc…ŽSéååIy ÁÁ±8uê&ÔÕÅèÛ×..V°³ûºÒi›6¯¿†aË–oÑ«—¹ Y""®bäÈ­HHðEõêU:öùó÷0xðôïßÿ÷ƒ*ìYÅ%‘H±fÍ1,_~Í›×ÁÒ¥affTôù‡Ÿ#0ðvネää—°²2§§ [UÚýY‰Ê)–£DDDDDDo ÇwßíDdäT4o^yW+ I&“ãìÙÛ ‰ÃÁƒW›[€Î›ÀÙÙ }ú´¨´{SþÛáÃ×0|øVLŸÞ&t:^¾ÌA‹³àçW:Eíñã‰ðññÈ0k–£ÂÇ/nßNÅÔ©¸|ù!¦Mëñã»AEåÅð?×B`àÁž=± ‰Gjj,-ëÃÕÕ NN­•îšÄÄ88,‡³sërõ½Ö³çR´mkйs·ïèÛBBâðÝwþøùç~å¢. 2™7žÂÂ…`eeŒU«† N÷÷•ÍÌÌþ}—àïƒË—áë¯kaèP[¸»·©4•C,G‰ˆˆˆˆˆþñÛoaؽû"Μù5jh §RxòäBC߬”˜˜cc=¸¸XÁÙÙJi÷YLIy‡055€¿ÿèruHÑo¿…áôé›8vìÇR›cË–(ÌšŠ+ÃÍÍºÔæ)oŸ`ìØ?‘šš‰E‹ÜáèhùŸÏ½~ý vì8‹8H¥r89µÂС¶°´¬_†‰‰”ËQ""""""¸q#={.Åüùn2¤½Ðq*´ÌÌ<ÎέËdΔ”Wpv^ }ýª --õ2™·<¹zõ1||üP½ºvîõY«h¥RŽO„Ÿ_¢¢n¡Q#CŒÙ®®VJù5%*–£DDDDD¤œär9WB$!,ì» QZ••¸¸ ‰Chh23sѾ½)ÜÜÚ _¿–¨Z•'d×óçÙèßjÖÔFHÈ„ µ¤£ãJ4iRK–x”ÙœIIÏпÿ ˜›×ÅŽ#•ò¯ÔÔ ² ÏŸgcçÎQhÖ¬ÎguãF üü¢°gÏEhkkÀË«=¾ýÖµjUW`b¢ å()§mÛÎböìDDLámá?~‰  ‹ ‰ÃÝ»ihÔÈ6ÜGô3I$R8;¯Â‹9Ø¿R…»U|Ñ¢ƒ »„èè_ÊtÞøø8pzö4¯0+m-;;£GoÃÅ‹÷±q£7ºtiúEã½x‘ƒ;Îbûö³xñ"-1jT>GôËQ"""""R>Ož¼B—. áím‡3„Ž#˜ÌÌ<„‡ÿ={bqþü=èéiÃÉ©5ÜÝ­aaÁâäsÉår|÷?ŽMÀ޽ѴiÅ;…ýÌ™ÛððX‹ØØ9¨S§lIúgÖaÃ:à÷ßËtîò¢°P†ŸÞƒÀÀóX¶lÜܬ¿xL‰Dа°KØ´é®^} ›†1¢úôiÁ-2H™±%"""""åóÍ7qÿþ3;ö#44*έΊ ‘HqêÔMìÙs‡'zôh77ktéÒT)oeV´%K"°zõ1øû†Ý×BÇù,yy4m:K–xÀݽM™Ï‡‰ýñÓOý0aB·2Ÿ¿¼X¾ü0–.=„E‹ÜáåÕ^aãž;w›6Bdä5Ô­[ß~ÛƒµƒŽNÉ‚"ªb•ë_DDDDD¤ôBCãqüø „„LPªbôÊ•G ŠEXX<ž?ÏAÛ¶ áëëK" ‡åË`þ|× [Œ€¦¦Z·6FtôAÊQ+deåaÆŒ`TSÚÓ¾ÿ¾'45Õ1}z ¤ðñ±SȸíÚ™¢];SþlmaüønèÒ¥‰RŽEJ·ÕQåpÇŽ]‡½½.tG½z5pôèu„†ÆcÇŽ‘•®•Je8uê&BBâpðàÈdrtïÞ ~~ßÂÞÞŒûˆ–²ÌÌ<|óÍ&Ô­[ëÖ}S)ŠQhÝÚššjˆŽ¾-X9*‰àëë‚”” |óÍF„†N„™Ù»\¥¤¼Âþý—1jTgA2–/¯ö‹U1eJtt´Jeu²ªª úöµ@ß¾ˆŽ¾ƒ5kŽaÈh֬Ʒ‡ƒƒ%ÄâÊñýMô®%""""¢JÇÚú7>ñÓO}+Ô­õyyDF^Þ=qòäMT«¦ ‡–ððh++ÁK+eµzõ1,Zt~~>•ö° „„dô豇Oƒ¹y]¡ã 55ÎΫQ­šž?ÏAZZ ¥--5ÄÇÿŠêÕ+ÿªi¹\ŽiÓvcïÞx+Óƒ“ÒÓ³°~ý ìØ MM5ŒÙ>>v¨VM³Ì2)ËQ"""""ª\|}÷cóæÓ(((üàçÅbÊàç÷-úôiQÆéJ&.. °oß%ää K—&ðð°A¯^æPWçB:|ø||¶`ΧJ½×¥\.‡¥åŒÙ&t:àâÅ{pqY‘HTTŒ€ªª*¾ÿ¾¦Ní%`º²#•Ê0|øVÄÅ%!"b êÕ«Q¦ó¿|™ƒM›NÃÏï4TUU0bD' ÞQ)ÊiªTXŽQåâà°ññ>ùG¿~Ëag÷5Ö­*XŽìì|lÝ… NB"‘bÔ¨Î9² ttx»=•k,G‰ˆˆˆˆ¨ò¸té!úõû¿~N,VE•*êØ¼Ùvv_—q²{û¶ùÜ\ ºti 77kÞ6_NeeåaÀ€•€ÐЉJSú¤§gÁÒr¶oîÝ› ’áíSé?¥fÍ*ˆýU©NS?sæ Ú€30vlWA³äääcóæÓX¿þ$`̘.1¢“Ò¬æ¥ 'Võ×_ýUèDDDDDDŠþ7Ξ½ ™ìÝ5 b± 52DhèDÁ•IN~‰­[ÏàÇwcÍšãH¤9² –/ /¯vhÒ¤¶R¬F¬h¤RÆŒÙ;wÒ4††Õ„ŽTf´µ5pèÐUJaoo&H†×¯ó‘““+WC,V}ï[~¾ÕЪUý2L(¬úõõP­š&|}÷ÃÊÊ&&ú‚eQW£];S Ú€ëןĖ-Qsóºån+RzO¸r”ˆˆˆˆˆ*#¶âСkÉdE‰D"8:ZbÙ²‚ìÇ…ˆŒüìÝwx“åúðoÒ4ÝišÙ¦ƒÒ–*Kö,䈢@ ŠœˆÇ£Âq‚ã òEPÙCTEDh²÷liénÚf5«IÚÌßoÞ· CVÛ¤íó¹®\IÓäÍkCóÍ}?÷|ÿýQìÛw<^i›oeÞ|óg|ÿýÑŸ î+>øà7ìÜyüÇ«ëÐhjñÍ7ûðí·ûQ_o‡Ãá¼æ6, ópüø‚vÄÍ™³99ùسç5…¡Þ^@§3㫯öbÕª„„pñüóÃ1uêÀv÷³!|i«'‚ ‚ ¢íèÚuÔj#€†ýEßzë!<óÌл>¶ÅbÅ‚Û0rä=·ÜZœ›[…͛⇎Ãh¬ÃС)xì±¾1â ´"kÖÄolÁ—_NÁر÷z{9^‘“S€ ¾Â±c Z|*úõ ¬\yË–eÃl®‡ÓéBãxƒÅbañâ‰xì±¾^\eË3ë0|ø'HK“aõê§¼½M-¾øâ/¬]{R)¯½6?Ül6ËÛK#Ú7ŽA*5À× IDATAÑ6ÈåZôîý.ª>((ß}7ƒ%ßõ±ss+1kÖj©0qb|öÙã7¼­ÁP‡_= ãìÙrÄÇ‹0aBo<þx_2m¾Ú»7Ó¦}‹ÿ{4æÌæíåxÕjGçÎoâí·ÇbÊ”þÞ^ÃdªÇúõ‡±té_ÐjÍp¹\p¹¨p4::‡¿Ùî¶©8|¸&|…>I“úy{9×˵øßÿvâÇ£sgþóŸ‘™™êíeí G ‚ ‚ ‚h~ùå4ž}v-Øl:u’bíÚYˆÜÕ1].V¯>ˆ·ßާӇà çÏ¿ ‹åq»£G‹°iÓQlß~0ztWLžÜýú%xÜ–h=rs«ðÈ#ÿ‡áÃÓñÅ“ÛýÏqêÔoÀáøaåÊ'½½”kÔ×Û±iÓQüßÿí†Ri€ËEý^~ùåxä‘öWí»páoXµ*»w¿êÕýGÿN~~5.üþyƒuÂo<ˆîÝÛÏ>±„Ï á(AAA·o„ Þ^Â5ΟA¯€HdAr²lö­¿Õùᇮ¹N«5á…6"++÷šá/»vÍE—.1P(ôøñÇظñJJÔèÚ5“&õÃØ±÷¶›Iæm•Z]‹‘#£cG6mšM¶Aµ½ÀûïoÇÅ‹ïƒËå4Ùq/^¼ØdÇ²ÛØ³ç 6l8ª*j‹?ÿ|ªMÛééé7½ÍæÀèÑŸ!0ƒ_~yѧ[×+Âûïÿ†“'KðàƒÝ°`ÁCˆŽöþÖ D»AÂQ‚ ‚ ‚ n4Œ?ÞË+ipö¬õˆ‹3Üò}~üñGÀÕo‹¼‚gŸ]λÝáñ=?<öX_TVj‘}aa7®&Mꇴ´¨»"„×Y,VŒÿjjLؾýEŸlãmôÖ›6ÍFFFJ“7;; ‹›ì˜N§ ¿þz Û·çâÉ'{càÀÖ?DK¥R†zK·¿t©£F-Ƈúf{ýÕvíº€wßý …/¾x?fÏÎ$J-„£AAAÜ>‹… 6`Ò¤IÞ^ *9|¸&ÝÖý6n܈ɓ'3á¨ÝîÄâÅ;ñÿ÷X,–ÇÔ{‹ÅBllâãŘ<¹F޼§I«èïr¹\xæ™5ÈÉ)À¼ì³-ÉÞ2lØÇ0 Þ{ï‘&;fvv6ÒÒÒ •J›ì˜4—Ë…ÒRM›ø9* äææÞr8 óçoŶm§pðà›­¢šÝfs`Ù²,,Y²QQáøàƒqMÄÄuœh_»AAÑ&±Ù¬ÛF¯V^^ƒ1c–`éÒ=p¹\× F*l)/×bÉ’Ç1fLwŒ¶1‹ýŽ]».`ÅŠém"PkjÆuÆž=—¼½Œ[Æb±ÚõÏqÞ¼Q€Ï?ßåå•Ü?¼ðÂpìßÿ:RS£ðøã_cÖ¬Õ˵Þ^ц‘p” ‚ ‚ ˆvï×_O#3óc\ºT‡ãú¡hcl6 {öä¶Àʈ–ôÃDZté|òÉD ÔÉÛËñIÇwFI‰W®(½½âðxAxõÕQøî»­êgo¿ žÁÅ‹r úV¬ØwK¯Ïq»H8JAAD»eµ:!?Ù³×Âl®‡Ívko¼].`ÇŽsͼ:¢%åä`޼͘3g&Lèííåø¬ž=ãÁç#+‹|8ÐZL™ÒÉÉ‘xûímÞ^ÊmËÌLž}¯cöìL|ðÁv<øàç¸xQîíem G ‚ ‚ ‚h—Š‹Uøê«Åûïo'¯¿D“!›ãAAÑ.uì(ÆK/uÆäÉ“¡×[PWgƒÅb…Á@]®«³A§33—  ,ê²JeD}½ee$'Gzû©wA£©Å¤IË‘ Æ’%“Àb±¼½$Ÿ7|x:^~yL¦z„„x{9Ä-èß?cÆtÇÿ» )­r |§NRlÝ:ëÖÆÂ…ÛñûïgññÇ0xp²·—F´r$%‚ ‚ ¢Y]¹r999˜>}z“×d2aÉ’%xã7îúX<^`«˜äL4-›ÍgŸ]‹úz;V¯ž‰  ®·—Ô*df¦ÂnwàÀ|ŒÕÅÛËaF|ùå—xýõ×›ì˜Z­ß|ó ^{íµk¾×”¯A-aÁ‚‡0dȇøî»˜={¨·—sGX,¦N€‘#Óñæ›?ã±Ç¾Æ¤Iý°`ÁC #¯áÄ!mõAAA4«¼¼<|ýõ×M~\£Ñˆ 4ùq‰öcÞ¼Í8w®ë×? ‘(ÔÛËi5øü`tï‡Ý»}«E[¯×ãí·ßnòc~÷ÝwÌ×3gÎDqq1€Ö÷Ù³‡â³ÏvA©4z{9wE* Ç·ßÎÀòåÓ°k×y ö1öï¿ìíe­ G ‚ ‚ ‚ ˆvgéÒ=زå$¾øb ÒÒ¢¼½œVgÔ¨.ؽûœN—·—Ò¬âããqùrCè¶sçNèõz/®èîÌ™3 <^>üðwo/¥I<ø`7deý÷ÞÛ?¾¯½öŒÆ:o/‹heH8JAAD³s:xá…Àãñ ‘H°hÑ"€F£ÁðáÃñé§ŸB&“A,cåÊ•xõÕW!‹…ï¿ÿþoýí·ß¢C‡ ÁŒ3àtÞÚÄy¢ýÚ±ã<-úï¼3÷ߟîíå´J£FuZ]‹ãÇ‹[ü±7mÚ„¤¤$p8DEEá“O>¹îí¶oߎÄÄDcÆŒ˜7oþøã@vv6ºu놀€¤¦¦â—_~(•JŒ9k×®ŸÏGVVÆŒ˜8q"”J%&Nœˆ0s½× ¦xmkAA\ÌŸ??üp gÏ–·øã7¡0_= Ë—OÃÎ¤Š”¸}$%‚ ‚ ¢Ù8qþþþ¨®®ÆÏ?ÿŒ>ú?ýôl6²²² Óé —Ëñî»ïâ©§ž‚X,†R©Ä+¯¼‚ùóçßð¸‡ÇGAAÎ;‡­[·bß¾}-øÌˆÖæÔ©RÌ™³S§À“OöörZ­¤$ ’’$صë|‹>®ÑhÄŒ3ð¿ÿý&“ ›7oÆë¯¿•Jåq»¢¢"Lš4 Ÿþ9jjjœœŒÏ>û 555P(x衇ðòË/Ã`0à£>¤I“pùòeX­V8pÛ¶mÃŽ;¬¬,ÀòåË!‰°|ùrôë×À_ƒîöµ­9Ó½{wÄ[oý —«íTþ>ø`7ìÝûoôèAU‘¾õÖÏd¢=qKH8JAAD³ãóùøðÃŒAƒaΜ9ظq#ªªôßÿþ7X,†‡ƒ¹sç2_¿7Þûï¿.—‹ÄÄD¤§§·ê–W¢yUUé0kÖjôê÷ßÔÛËiõFŽì‚;/´ècr¹\:tcÇŽE@@àïïÍïý¦M›0bÄŒ3xýõ×!‘HÛ¶mC=0}útàá‡ÆèÑ£±yóf€ÅbÁÒ¥KÑ¿p¹ Cºø|>Øl6ø|>üýý™ëoôt·¯mÍ…Åbáý÷Å™3eøå—Ó^YCs‰B±|ù4|ùålÙr£F}Šóç+¼½,ÂÇ‘p” ‚ ‚ ˆf—˜˜è&ÜsÏ=¨ªªb¾ @½i‡Ãa¾þ;~~~‹ÅÌ×7»=Ñ~Y,VL™ò øü |óÍ øù‘·ÃwkÔ¨.()Q#/¯êæ7n"8yò$FމÄÄD<òÈ#×ÝJ£¤¤ÉÉÉÌ×, €ŠŠ ï@JJ ÊË©6s6› ™LvKë¹Ùkо¶5·ôôhL˜Ð þ«ÕîÕµ4‡±cïÅž=ó ‘„áÁ?Ç_ü‡ƒl¹B\ù×€ ‚ ‚ ˆf§V«=¾V*•^Z ÑÞ8N<ûì:(•|÷Ý“àñ½½¤6¡G8H¥áر£åZë·mÛ†7ß|o½õòóóqüøq_s»°°0h4ë´Z-€Çã]óš¤ÑhÀûÁeK™7o4V­ÊñöRš…LÆÇ÷ß?‹7ÞxŸ~º >º¥¥š›ß‘hwH8JAA\.ôz3 UÈÉ)À† ‡ñá‡;ðâ‹›0yòrŒý^ˆ{ï};¿±xÒm¿¤¤¿ýöjÏÀåË—côèÑ·½ÎmÛ¶áÂ…–mã%Z¿… CVV.V¯ž‰øx‘·—Óf°Ù,Œ‘Ž]»Zîw²¢¢;wÆàÁƒáçç‡Ã‡Ã`0\s»áÇcÛ¶mÌ^¤‡Æ¥K—Àb±pÿý÷c÷îÝ(**( lÙ²Ço±çá "#Ã1sæ,Y²CÛœðÎf³ðÌ3C±cÇ+0™ê1bÄÿðë¯g¼½,ÂÇp¼½‚ ‚ ‚ îœÅbEmm=L¦z ¨TµP©ŒÐhŒÐhLP* P©ŒÐéÌ0ë`6×£®Î«Õ»Ý§Ó— ·4”ƒÅ¢*ªX,Øì ÛZg¿~ýðÊ+¯à“O>A~~>zôè§Ÿ~úšÊ®›y饗0sæLÜsÏ=·u¿¿Ãáqî\9bbBšì¸„oX»ö¾þ:_|1={vðörÚœQ£º`ýúè¬ÔA&ã7ûã=üðÃxï½÷‘‘.— $$$`îܹøòË/™Û=cÆŒAzz:ºuë“É„nݺËå¢{÷î˜;w.zöì‰Þ½{ãÔ©S˜0aF…ŠŠ¿ßŸR"‘`Μ9X²d ¢££›ûé6»ýk6l8Œ¥KÿÂo<èíå4›ÔÔ(üñÇËxï½íxöÙµÈÉÉÇ{ï=Š€‹ËÕ–F“AAD+b0X ×[`0X`0ÔÁ`°@©4B¥2@­¦MŽºÑhAmm=,¬V;¬VœNçMf³Yðóóƒ¿?\®¸\øûsè‡6X,œN ®Î £±Z­ 6›ƒ9F]Ý,]ú8&Mºõ Òºº:>|ááá¸÷Þ{o{ÝÍaãÆ˜3g3©½ƒƒ¹ˆ‰ 66ÑÑÔ)&F€˜˜ÄÆ ‘ðÀf·–Û¶ '§“'/Çœ9Ã0oÞÞ^N›dµÚÑ¥Ë|¼þúh̘1øŽŽ‘´´4H¥Ò[º½Á`À±cÇ ‘HеkW”——£¨¨ÌmT*Ôj5l6jjj0`À¤¥¥aÆ ̤ù’’äçç#>>þš=HiN§Z­B¡9îéÓ§Ñ»woDDDÜÑó½S …¹¹¹:th“wÅŠ}øðÃßqðàˆŠjþ€ÛÛvî¸\ò6Ë*1sæJ<ø`7¼úê(o/§Íâr9ÈÌLÃŽî8½]<Ï£>66±±±·©¨¨À}÷݇Ÿ~ú ;wÆŠ+`·ÛѳgOæ6ñññˆÿÛÇb³ÙL0 b±#FŒhš'â#¦Oˆï¾ÛO>Ù‰O?}ÌÛËiv£FuA—.1˜={-FZŒ>‡‰ûx{Y„‘µ ‚ ‚ ˆvËnwB¯7C¯·@§£Îõz3ªªôjM§Î:¦-½¾ÞîQEy3T:uùF-ìðxAàóƒÁç‡@$ X̃L±˜‡  °Xl°ÙÐëÍP«MP(ôP©ŒP* ÈϯB]9¦¿¿„ÂPˆD¡‹©39YÊ\ C!„@*åA( E` ÿ5뺱¶3õ×b)Àȑϣ @¼¼j”—×ÀápÂÏØX†MEt4<^üát:¡TQQQƒ3gÊQ^^‹Å €úYK$<ÄÄD0*žÆÅ ÐÐ/?ã¶O£©ÅO|ƒ¤$)þ÷¿‰ífÀŽ·ŒÝsæ¬GMÉg¶¦èÑ£V­Z…E‹¡¦¦IIIرcüýoçu®}àr9xíµðòË›ð¯݇ÄĶ_I­[ŸÇGýW^ù`Ñ¢"$„¼>·G¤­ž ‚ ‚hÕœNpjµfèõfÔÔ˜PU¥wWHQScrï¹iÑXï®Þ´ÝVÀÉá°Áf³áçÇÛtÚíN8ØíÎkn bq(D"„Âô‰ &CCàp8aµ: ÕšP]­‡Z]‹ª*4šZTUé¡VSUžGÃcs!•†C" ƒTʃX̃TʃDƒX†ÈÈpˆDT(Ú¡ÉTðp Ö®]v[mõ¾hãÆ˜]†íÛÏ@¡h˜¶Íã2{ÆÅ ™à”T#"|£2ÏW½òÊ÷¸xQŽ­[_ Áh æbذ4üúë™; G ïc³Y˜7ï<ýôj¼ðÂp¤¥Én~§6"##ý5sæ¬Ãƒ~Ž·ß‹iÓz{YD "á(AAÑä  jjLLÕœBa€R©‡JUë®î´Àh4Ãd²Âl¶ÁjµÁfs‚*o„ÍfƒËå (ÈÁÁ\!à€Ãñ‡ÃÀ‚Óé„Õj‡Éduï Jí§érV«.àf^¯ª³áºPøûû1k°Zí¨ªÒC¡Ð£²R‡êj.^”£ºZêj*+µP©Œ¡­P ©”‡èè$$HпSéIŸB¡çãx›NgÆþý—‘••‡¬¬\(•FH$a2$S¦ôÇøñƒŒ÷ö2[”Ÿññ"ÄÇ‹0bÄ=ߓ˵¸rE‰¼¼*äæVâÀ||ûí~Øløûû¡S'):w–!-M†ôtþñn‰‚»úz;är-ÊËk ݺÅÞüÎD«Fö%‚ ‚h,+t:3JKk —× ªŠ®æ4¢¦¦–8d6[a±Ø`µÚor²XT§¿¿Ÿ»Š“‹ÐP.¡0Ø=( ¡¡ð÷ç€Å¢Â½Þ¦*õØt»¼^oöxŒ€Ž{2: =E¢0ærãÐóêÊÎÑëÍËuË©Öf…Bª*=S*—ka6[™ÛqÝ'QQ|DEñ™êO©”ºN,›Ýz½(•F¦U~ÿþËÐé̈`È š‚ÁƒSÀã^÷¾, 6lh{Ž>ñÄÓ°Z îmšŸFS‹‹å¸t© —.ÉqéR% L•irr$ÒÓeîà”ª6½Y iµÚQY©ó¨:¥Ôòò(zf»ˆà`.bcîð´!4¥O­1<=uªãÇ… zcÑ¢z{9íÖìÙk ÑÔâÇÿu[÷#{ŽÞšæÜs´±1c–€Ç Ć Ï4ëãø2¦Ï?¿‡_Á¢EÿÄcõõö’ˆæCö%‚ ‚hMôzj?NŽ ú¨jΆ¡=Z­Ù½'g,+êë°Ûí¸ÑÇál6 þ â‚Ç BLŒA à ‡"**2Y¸{âv'4šZfxZm„Ba€FS …B *™!HÑC„èÉéTà ¢÷ð”Hx·=ÍÛápB©40{:Êå §òòÈåZfOHî íሎæ#>^ˆ¾}͇T΢mq(ŽÍæÀÑ£EÈÎÎCVVòòªÀåú¡_¿D¼ôÒÜw_’’Úþ”â«EDŒBŸ>ïaÚ´˜4©_³· …¡2$C†xV™(›[‰ÜÜ*\¸ GVVT*ªÊT* G×®1îS,ºt‰Add8s.—ôü_Íæðø} CÓ‹+±sçð4(ˆËT›R{ž G…©qqŸk3­ªÒá©§V¢oß¼ÿþ£Þ^N»6fLwÌž½–Ù†ƒhþýï0aÂ2œë G ‚ ‚ îÑX½Þâž°n‚NgVkb®£++kj¨Ôh´Àl¾þtu ן\.µ'gXX x¼ …!L)“ñ™,ÁB¯ $ìv'4ªª“j¡7 ºššüNW›Òç×ÄåR-íT¸Æ«tUgã‰ê·[áy#*•±Qè©ó˜æ-—k=ªPOòŽŽæ{Ÿ±±H$¼VÝê~·,+*ÄÞ½¹Ø·/EE*„„`РNÈÌLCff*bcwý8m)ÀRi¸G¥)¢RçQQáM¶}ÃáÄSO­ÂÉ“%øý÷—'l’ãwç¹çÖA¡ÐcË–9·|ŽÞš– G³²ò0eÊ ìÜù ºt‰iöÇóu <ùäJÔÖÖaÅŠéèÝ»£·—D4ŽAѾÙíNèõfwÀiö¨è¤.›ÝÕ&÷"Ó¶îp\ûgý¦ßét]³_'t†‡ž t IDATA  ª,©=|H$a‹yLk¹@âž¾~-«Õ•ʈêjªÊ´ªJµºÖ#ð¤+=é6Y Ddd8Äâ°ž‹Åaàó›¶œn祫>é¶ÞÊJzÿÏÔ×ÛPÕ¯b1±±žÁgLLÓÖO*îuåŠ{÷æ"++GŽÂju =]æÞ;4}û&4y+ ‹ÅÂØ±c}>µÙœð÷¿q·qãFlÛ¶íšß×'бjU~ûí,BCñøã}1uêŸ à †:&,¥Ï‹‹©À46V€=: G8ô臮]c›¼zÚ`¨CEE JK©à´´TÃ|]V¦A] UÙ-“ñ™À”®6¥¿¾ ÷í··aÍšƒØ²eî½×ûU¾eçÎó˜9sNž|R)ï–î“ ‘HDÂÑ›P(P«Õ-ŽÀ|Š˜¾ùfz‹<ž¯3ëðüó••‹wÞy䶪£ ŸFÂQ‚ ‚ Ú³Ùê1öäô¼LUuÒá'ÝÊ^[[wͱüüXð÷ç€ÍfpÁápÂjux„',‹ :éŠJ™,Ü=!Dï£I_w³j)³Ù …B¥ÒÈœÓ(UýI]wõ¤vºu=22I¤Rê\"áA*åA"¡BØæl%W©ŒLYi©š©.+-Õ ºZ‡Ã €jçÛÜe²DGóÝA(}Ÿìçu †:8pYYyÈÎÎCe¥|~0† IAff*23Óš}¿?zj}S ‡C³ùb“Ïß_„ˆˆ±Ðéþ€ÕZù··½ÑÛ"•ʈ cíÚCP* 6¬3fÌ„ŒŒ”fùoДôz3NŸ.ÃéÓe8s¦ §N•B£©‡ÃFjjî½·š&%I›µâZ©4¢¼\sMå)ýa‰ÝN½F4u½ÊSºZ}Íšƒxã-øâ‹ÉxôўͶnâöÕ×Û‘žþ&Þ|s fÌtK÷ÉÎÎnÞEµ1-ŽÒA÷ž=¯!%%²EÓ×¹\.|þùn,^¼ãÇ÷ƇŽ÷©ÎâŽp” ‚ ßRWgƒNg†Vk‚VK×Ô˜Ü!'}]ãJO*ð´Zí×+8˜‹À@p8lp8ÐA§Íæ„Åb…Åbõ¸}` ?Ó.NMG§'¢‡2$]Õ)Ü<ì¤9N¨ÕFÈå:¨TFTVj¡PPU¥Guµ …••žƒüü؉B™`“®î‰ÂEËdÔyK„‰uu6¦Œ=é ±²2 3åÝßß11ÄÅQatÀA Í=覭r¹\¸x±’™,âD1\. {÷8ddPh÷îq-6m½¹ôíû&Oî^Þ$Ç«¯·ã¹çÖ"++Ë—OÃý÷§ßñ±ìv'vî<5krpðà$$ˆ1mÚ@LœØ·UU3—•iÜi)NŸ.Ãù󨫳!,,ݺŢgÏxôì^½â›¼ŠüFìv'ªªtÕ¦«O sÛˆêõ·¸X…ž=;bܸžLõil¬€|¸â#fÏ^­ÖŒÍ›ŸõöRˆ»àr¹0|ø'HM—_>áíåø”={rñ¯­C|¼ß}7ÑÑÞ^qçH8JADóp8œîÓ3Ô¤ª7‡žžçÕ%ðxAàñ‚ÂE@l¶Ÿ{Nª¢³®Î³Ù ½Þ ‹ÅæqßÐЀkÂNºªS"¡ÂNº<$äö÷Ï4êP]­ƒBa@uµ••:(•ž¨Zmd*'0¡§LƇDÂCTQQáA¨XÖ¢ûf:.TWë¯ @©*/5”J#s[±8Œ©èêÐAÄTvuè DddÓí'ØÞi4µØ·ï2öîÍÅþý—¡V×B" cö 2$¥Å«–P[[””ÿ`åÊ'1rä=Mv\‡Ã‰×^û?þx ‹?†ñã{ßõ1/_®ÆêÕ9øé§p¹\7®¦Oˆ´4Y¬¸eÙläåUáÔ©Rœ>]Š'JPT¤‹ÅBR’½zuDß¾ èÕ+ b¯¬±®Îæ®2Õâĉ"|ýu„Â0Á(+«Á@u°Ù,H¥áLXÚ¡õº/B\œ°Iö^%nÍ/¿œÆ /lÀ¹sï"<¼í¼NµGÛ¶Â /lÀþýÿA|¼ÈÛËñ)%%j<õÔJ(•F,[6ƒuòö’ˆ;CÂQ‚ ‚ n®¶¶Þbš˜áBW‡štèYScböå¼ZPÁàóƒÁç!0 ;éÖT»Ý‰úz*è4›ë¡ÕRÇ£÷ª£ …¡LØ)‘ð®©ò¤† Qè¶:Ùl¨ÕFTVêP]­wŸ¨Öv*5 ²RÇTLTåidd8¤R*ø”J©à“>§¿GOˆoiƒ…i{o\™E·¶ÒC™ý=ª>é€nk ¾ó©óÄÙíNœ9Sêž,Ÿ‡sçÊáçÇFß¾ <8™™iHO—ù|+÷:}º ÿøÇg8tèÍ&îr¹ðá‡`éÒ=˜?ÿ!Ìž=´IŽk0Ôá§ŸŽcÕª*Ñ¿"¦M„èÒª+5šZœ5LªÓ™Pÿ½£¢ø¦I Ýa¨qq¢fß«’hP^^ƒ¬¬<8.Ã`¨Cl¬€Ù7tРNwTÑÜ­[wï¾û+._^ÔlUÓß|³o¿ý ^|ñ~¼öÚMv\—Ë…ò±zõAìÞ}"Qžx¢?&OîËi|™ÍæÀùó8y²'N”àøñbTWëáïï‡.]bЫW<ú÷OBŸ>Òlk?þ+TWëñûï/A(¼µ-:œN*+uî°T’5ÊÊ4()Ñ ¤DÍ|Çá°DÌB«NÃÂZÏÖ ¾bòäå Ã|Ú€•+`Ñ¢ßqìØüfûoÍ\.–-Ë¢E¿câÄ>X´èŸäÖօ„£AÑZÕ×Û™P“:ÕB£1yìÕ©Õš ÑPßÓjÍ$Ç DDDˆûìzÒ_sát:a·Smìƒju-*+uÐhj¡P T¡Ñ™¡U)*•ò˜6q©4bq(¢¢øLàIµ¶‡Ýp2ûíª«³¡²R‡ª*=*+µËµ¨®¦‚ÏŠ *¥CB€ª’ŒŽŽ¸ªÊ3¼QhÄâ–Ù×óVX­v”–jP\¬Bq1õFŸ>—˵Lû>Ä´½7n1¥÷ÿô•çÓÞ˜Lõ8x°ûöå#;;ÅÅ*„„ ÿDdf¦bðà$%I¼½L¯˜;w3JJTزeN³>ÎæÍÇðê«›1sæ,XðP“Wâ–—×`ݺCظñŒÆ:ŒÝ3f BŸ> Mú8Þ&—kqäH!Nž,Á±cÅÈË«‚ˤ¤D¢ÿDô훈~ý›ä×˅çŸß€¿þºˆ­[_@ZZT<ŠNgFI‰š©4¥.«™arN'õvY( E|¼°Qµ©Èž !•†7ÙzÚúóçßkÑ c¢é™LõèÓç=Ìš5/½4ÂÛËñY»w_ÄsÏ­CqX±bº×?4'n G ‚ ÂÔÕÙ˜PS£©eÏ«÷夿§Õš<Ú¹ªTÑ8ØB˜!BÃO>?v;µ/(=]©4@©40ÓÑÕjjZzãAA,Ë=œ(”ÙS"¡&¢S(ÔÔoõõvTVjQ]m€\®u‡ :TVê˜Ë55 “Ü8É" “…#*Š™ŒÏœGGG 22ïU@4@ UP*+uÌ›õÈÈptì(B|¼;6T;ÅÅ Éä>ÂétáÂ… ìÛwÙÙy8q¢v»éé2df¦aðàdôí›@ÂjÇ‚!C’±`ÁÃÍþXô~ˆ?Þ‹ý³Y¶*°ZíØ¶í4Ö¬ÉÁéÓeèÜY†©Sbܸžm²Ø`°àèÑ"9Rˆ#G qþ|ìv'%èÛ7ýú%¢ÿÄ;ZòÅáãw`ݺY:4µV}V«ee5ªMÕL€ZV¦A}=500П©0¥S:<‹¶Ûßo…€ž=ßÆÊ•ObĈ¦ÛG˜ðŽ?ÞM›Žàرíöÿé[qéR%¦Mû\.ë×ÏBÇŽÞÙ«™¸-$%‚ ˆ¦f±X=¦¬k4µîËžCˆ¨ë©=5¯BäçÇf‚ÌÆ'tFD{„ô÷*Œ¡ÂM=3H©l ¤P P®©ò ôwWrò˜*O*åA,æ5K•gcV«Ý£â³ªJª*SíY]­‡Z]ËÜžËå¸ÃÎpDGG0{zÆÄD¸÷û ÷éÉèõõv«<*?o€&$ˆÑ±£Ø„Š˜ó  ²÷§/R( ÈÎÎþ}—qà@>4jÒСÔ¥ŒŒ”[n n/,+RRþƒ¥K§à¡‡z´ÈcîÚuO?½cÇÞ‹O?}¬Y‰9S†5kâ—_NƒËõøq½1mÚ$'G6Ûcz›ÉT'Jpøð9R„3gÊ`µÚ+@¿~‰è×/ýû'ÝtÙ_=gŸ]‡… ÇaÚ´-´ú›s¹¨!v%%à”®:¥?¨c³YÉøî¯Dö:¥*Py¼ /?“æ5fÌ$%IðÙg{{)Ä]R( èÓç],\8“'÷÷ör|šRiÄŒߢ¸X+¦aРdo/‰ø{$%‚ ˆ¿c±X™½8BN“GØÙ¸šS«½vÚ:½?çõª9‚Í`ôFUZ­É#ð¬¬Ô¹ÛÛµP©Œî¯=CO>?R)5>éŠOºÊS*å5û~j Uí)—kQQÑp^U¥c*Wi\.‡ÙÛ3&FÀ´¹ÇÄD¸'»ó}:ø¤9.ÈåZ©PT¤Ä•+J÷eär-œNX,¢¢<+@IÚºÔ×ÛqäH!öí£ÑÜÜ*pзo"† IFff*RS£Úì ¥¦pøp!Æ[Š£Gç#6VÐb›‡§žZ…ûïïŒ/¾˜ÒìÕP:›6źu‡PZªÁ€‰˜:u FjÝœnE] §O—¹ÃÒBœø`œWû †:&(¥ö:Õ0—++uÌ(|~°G`Ú8DŒ o¶ýw[ÊW_íÅW_íÅÙ³ï6ëD˘7ï?^Œìì{{)>¯¾ÞŽ—^Úˆ?þ8‡E‹þ‰I“úy{IÄ‘p” ‚h?\.W£ý9©“Zmô¨à¬©©…Z]ËžWOI§ƒÎÆ­ëA(„ÂT …@@žáá7oo6›­¨ªÒ1§Rit‡†TWë¡PPÓÒé>€ÚÏ“ $“ñ!‘„1{fRûeRâNk¿6›••:&ð,/¯a‚Pú:«•Z»ŸR)11DG_ÛæÅout:3 U¸rEâb*ü,,¤Qúg&„ 1Qâ>‰‘ AÇŽ"tì(n‘ŸÑ´rs«pà@>²²rqôhêêlHNŽÄС)ÈÈHE¿~ $ؾ Ÿþ'Ö¯?Œ'þÛâ}øp!¦NýC‡¦â«¯žh‘ÒétaÿþËXµ*{÷æB$ Ô)ý0yrDF¶ý+m6Μ)Ãù8x°'N”Àfs 99ƒuBzº þ†îÝã°zõÌ6¬ÙlTTÔ0C¡èÁytˆJÈÊår'hž6|xÖZÚõ‹‹U8p!~úé_0 ÉÛË!îRnn† û˜üÚÓ¦ Dzz´WÖÓ’æÏߊàǟý÷v`®¯®ÖãÀ|ääàÀ|TWë!†"##÷Ý—F¡qpJmïRR¢FQõ5ýoœ&$ˆ/ò8‰4Ëß)gÏ–ã>ÅŸ¾Š{îiûÿ·u6›}ú¼‹I“úaÞ¼¼½œVE.×bêÔo V×bÕª§<^ã¯"á(Aqkl6Ó¾®T™`S¥26j_¯…FC…¡ÛÄêñÆ›W·®_}@Ú,oJ©IîÈåTÅ'5ž®c*Am6sz€QTÑÑüF—#I¡ÞnóS«kQV¦AEE JK5(/o8—˵Ìó àx´¸ÓmïtîS­xwËfs0(~Ò­ðtå±Dæ?%HNŽDb"U J>Ñoû †:ýt.\xß'ªOž,ÅäÉ_£OŸ|÷Ý“^}M4êðÓODZfÍA(ЫWGLŸ>>Ø \nÛûfÍšƒxã-Xºt yäÞ¿½mnn²²r±>Ž-„Õê@zº ™™iÈÌLE¯^[å.ÍÅ`°xT›©P\¬Bq±šÙÆßß11tì(r·ë7´ìßMpêr¹Ð»÷»xì±¾xõÕQMù´/Y¼x'Ö¯?ŒcÇ´©¿[‚ÉTgŸ]‹C‡®`Ù²©¸ÿþto/‰ á(ADûåtº<öêT* öꬅJÕ85À`¨ó¸?—ËaÚÔÅâ0&Ôôl]oC[b¿E»Ý µšj¯ªj¨ú¤ÛÞår-”J3ÉÅb1CŒ"#Ã!“Qƒ"#à  ÷‰7 µµõ(+ó =ËÊ4ÌutÐçïØXââ„Ìy\ÕþÞx p[b±XQP ÀåËÕÈϧ*Aóó«Q^^‡Ã ??6bcHNŽDR~RA¨ø–fmƒÃáÄÙ³åØ·ï2öí»ŒS§JàtºÐµk,†MÅ!É$Pñ‚Y³VÃjµcÍš™Þ^ ãôé2<þø2ôêÕ+W>éõ\.*ÄêÕ9øóÏ àñ‚0iR?L™Ò±±¯®­©8I“–cîÜ‘x饷u_‹ÅŠC‡ ±wo.²²rQR¢ˆÁƒS™™ŠÌÌT²'ðß ƒÓÆiI‰ EEjhµ Ái\œ$HW›vì(BttÄM‡Ì¼õÖÏ8|¸{öÌk‰§D43…€޽ßÁÒ¥Oࡇº{{9­ŽÝîÄë¯ÿˆÍ›aÑ¢bÊ”þÞ^R{GÂQ‚ ˆ¶D¯73{tj4TàI Tè©R 02¡ñ?~~l…!î6v*𤧰‹Åa‰Â˜öv‰„×â‰ÛlfxQe¥îªàS¹œšôN·æûù±!…!&†©”>#Ež2Y¤RžÏ|ÚmµÚÝg |6 5Ì›JÃ'@l¬:=‚ÐÖ:ìèVÕ×Û™à3/¯ ùù \¾\…òò8.pЩ“IIR¤¤D"!AÌT…úÊÏšhYUU:¦U~ÿþ|ètfDEñ‘‘A R2$… Ëò²nÝà™g†â¹çîóöR<œ=[މ—¡gÏX¹ò)ŸÙNC¡ÐcýúÃX¿þT*† ëŒéÓ!##Å'*oïDnnyäÿ0|x:¾øbò]¢¢¶ÈÈEvöe:t&S=’’$¸ï¾4 Öýú%’n‘Ngf*N‹ŠT(*R2{žêtÔ~äƒÓÆû›ÆÇ7§99˜0á+<ø:v{ùYMáÉ'W¢¾Þ† žñöRZ­Å‹wañâxùåxõÕQíjŸ!á(A„/3›­î¶u:ð¬mô5Õ¾NUxR-í[Ájp]Å)…A,¦ÛÖ*>éjOoîÓE·º——× ²’ :©s- ½{È‘‘™†Îá°!ó™,Ri8bb"Ü!(|J$<Ÿ é}?éªÏÆÁgi©J¥ «ÃÙгC!bbˆ‹k@}å zs²Zí¸rEÉ„  äæV1• \.‡©þLMB§NR¤¥E!6VpÓê¢m£+Èöᅩ¬¬\\¹¢DPýú% #ƒj•OI‰ôö2 ·ÂB%^„íÛ_DÏžñÞ^Î5Î+Çĉ_£G8¬\ù¤×·PiÌfs`×® X³&‡¢C!žxb{¬""B¼½¼[¦ÑÔb̘% CñóÏsš<´´Ù8z´ÙÙyÈÊÊEnnx¼@ šŠ#îÁ}÷¥‘HîNgö¨6-.¦ö9-,TÁ`° ::t">^„ƒ 0hP2fÎŒøx1bØÊíÞ}3f|‡cÇ@&#•Ùwêûïâµ×~À¸q½ðñÇÈ7ÞAÂQ‚ ˆ–d·;¡ÑPá¦BaðØ·“nqo¼§g]Íãþ!!L ;}’HZÚ© ÏPwÅg¨Ï„ƒuu6fïK:ô¬¨Ð¢¢‚ C++uL°Ëá°!•Rmí«<£¢ÂÉGL 5ØÈ0“©%%TuEi©ÅÅj¦´ñ¾ŸþèÐAˆ¸8*øl¨þ 6VØ®¦Ûl\¹¢DAA5òòªÝ!h%ÊÊ4°Ûð÷÷cöMMt‡ 2ÄÅ }æÿo»\..]ªÄ¾}—‘‡ãÇ‹aµ:š‰ÌÌ4 ’Œ¾}ÛŇ ­Ñºu‡ðÎ;¿ 7w¡Ï¾!<¾'.C·n±X¹òIùÞPº‚V¯>ˆ-[Ž£¾ÞޱcïÅÔ©Ñ£Gœ·—ö·l6}ô h4&lßþb‹|P+—k±{÷%üùç:tN§}ú$`øðtŒ™Nª›HM‰iÏ/,¤Ôƒ PSc†ÓIuùÐÁ)5ìPܨâTŒèh>©¢óqv»½{¿ƒiÓÞöV„§={r1{öôéÓ+VLGHHËvè$%‚¸kô ¢Æ§Je`N¥ÒÀ„Ÿju­Ç}8L {ãaDI¸Çþt ê«oî•J£;øÔ2SÐ+*‚PzB*@M §÷ĤÉd|ÄÄD0{búbðI£ÛËÊÊ4L…Dq±¥¥j(•F›Í‚LÆG|¼˜©ø¤ƒÏ¸8Äâ0/? 﨨Ð"/¯ yyU¸xQÎ G²Ùð÷÷CÇŽb¤¤D"99ÉÉR¤¦F!>^ä³ á=J¥99ùÈÊÊסTy{ IDAT™©ÕC†¤`èÐTH$íó÷¬µyöÙµÐë-ظѷÛ2/\câÄe¸çžh¬^ý”O¤õ!ÝÏ?ŸÄš5qéR%zôˆÃ´iƒððÃ=|îo—Ë…çŸß€¿þºˆ­[_@ZZT‹¯ÁdªGVVvネ={.¡¦Æ„ÄD F޼÷ߟŽ^½â}úo’ÖæÈ‘B<úèRüúë‹\(*jEWžÔ÷þHH#1QrÕ9Ù+Ü—,\ø~ýõ ~“„ÙwéÌ™2L›ö-¢¢øX»vù;¦e‘p” âzèÀS©¼~È©P V×2SÚ âB"¡ö艨ý9épS*åA$ …H©”×*>´ZíË©ÐóêŠOêz-êëí¨PP,湃O¾;üä{LGçñ‚¼üŒnN©4¢¤D…’ óG{i)u¹ñþZôD×øx:t2S]cc^ÞáMFc._®Bnn.]ªD^u™n±‹‹"55 ©©‘èÜ9ÉÉdOPâïY,V;VŒýû/#;û2òòªÀá°Ñ§OG ’‚ÌÌ4tî,#í™­P÷î 0sfæÌæí¥ÜÔÅ‹T@Ú¹³ kÖÌôÙ€”vôhV¯ÎÁœCXX ¼¦Nà3œ>ÿüO,^¼ 7>ƒÁƒ“½½8NœPmyEE* ¼›7?‹Aƒ:y{9­^i©“&-‡ÃáÄÆÏ !T²·ŽÑ~X­v&ØT©¨P³ºZÏ„œÔð"ªÅ½ñðæB"á1'r …aˆŒä1ÕŸ ÁÁ¾ýféj55¦F­îTÅgãöw…ÂÀÜ60Ðÿ†ŸÑÑ|DEñ[Å¥N§ ••:wû»š4@·Ã›Lõ¨Ê^z"k|¼:4 É"Ú}[·ÝîDq±Ê‚Ê‘—GíZV¦ðxAHK‹Bjj:w–!-- ))QäÍ%qSN'Õ*O‡¡Ç¡¾ÞŽääH¦:´_¿„Vñqc dd|ˆíÛ_BÏž¼½œ[réR%&N\†””H¬[7ËçR€úÀoýúCX¿þ0”J†OÇôé‘‘‘âµJ¯­[OaΜõX¸p¦Mè•5ÜLI‰»v]À_]ÄÑ£E`±XÈÈHÁ?þÑ #GÞCö)½Cÿýï6deåbÿþÿÜÖý'**´(*¢ƒÓ†ð´ªJ—Ë??6bcHH#)I‚„„†jÓ¨(²'fs;ö tì(ÂgŸ=îí¥´ 55&Lú Š‹ÕX»v¦OîÇÝ‘p” ˆÖ­¾ž <««õî¶u£»µ 9éiíJ¥z½Ùã¾!!îÀ“j]Œ ‡@@…œR)Ï=¥ªúlm'T^^ÃT|RÃŽ¨JÐòòX,VæöI|Ò'ºâ3::Aëð`³9PQQÃT6>•–j˜êƒ°°@f+zÒj|v츂Ï??Ž{÷ÖtéÈ)UR]]‹E‹þÄ¥KÉØ¼yÆŒ дIºG)Šv¢¨Èž—WŠÂBFüT„µ?<%ì„GAÏž†àóM›xrZXô`CÛù;­¬Œ;…·Ç“ IØ¢?« +*¿+Šè5=›z|2^ fZ—ìqÔ×Ë‘]ŒÔÔ¢&âgvv1ê뙄ÿææ=XÑ“ gn»¸XtHñ‡Î!™™Eˆ‹ËiCs—ƒüü2€iOP[xyÙt aŠvQYYƒèhAƒ š@ CC=»³b¨ŸŸÝ Ða-ÚŠŠìÚµPÓ¦´™¤¤|LúÜÝ­±k×ÂNçÅœ””íÛ/ãÀBÑsç†ÀÏO5bUkää”`ìØ¯Ñ¿¿ ~ÿ}n§ÌçYUU‹³gãqâÄ]œ9ššz âŽñã¡”æ T!ƒ¯ADD|ðÁµŸ¯°°¨A,e¼N1²²ŠØ9²••1<<¬òšZ³é~Íiº–' ¸¸}û~ŒÍ›gcܸޚ6GgÉäxÿýØ·ï:¾ùf¦L i“t*ŽR(”ŽC‘Ç3/¯ ……å ‚'#v2áíåÈËc<@“€ÉáÉç›ÀÚÚÖÖÆ°²2iÈåiÜËÓ˜ s72Ò×à'TEEM„ÏÆâ§PXÌæûÔ×çÁÞÞ¬¡ê¹¢sQ:ꬴ4±MM#3óáÄ–Ï7››œ-ÂàoPgg‹N‘çTÔÕÉØâH 14>>ååRèéqááÁ‡¿¿=üýí`‡€FHyjd29îÞââÅ$\¼˜ŒØØ Ô×Ëáçg×*O«Êw%! ú‹Äë¯Ò´9OErr>¦Ný®®Vصk!zöì\)Àäˆ>pà&¶m» @ŒAƒÜ0wnÆTù¦—D"EDÄ÷€Ã‡—ÂĤó{ëI¥u8>ÇŽÝÁ™3ñ¨¬¬ÁÀ®˜4©ÆëMC¹[aíÚc8yò¢£Wĭúz9„Â"¤¥²sLF8±6 ôXÑÔÃÞžü†}~§ñï(^~ùWaóæÙš6E§ „`ýúøùçÿ°fMæÍ Õ´Iº G)Jû‘Jë I KØkÅí‚‚rÖû³°°»SÓî ¢§1ø|SöÚÊÊ66¯;ãb£-H$Rdg?=³²˜kÅcLþK S¶ú¹ƒƒ9+€:9YÀÆÆ´Sïn7‰z˜ˆŸÉ'¥(äÓ£‡!õp‡Ÿ ‘ÒõßI{‘Hª›yƒ¦¤ˆPW'C†ðõµC@€]ƒê[*RQÚMff+†^¹’‚ÒÒ*ØØ˜²yCCC½`iI½·»"IIù9ò œ8ñèÛ×IÓæ<5))"Lúœ-±k×ÂNžKÁ•+)ؾý NŸŽƒ…E¼üò¼úêP•¤³Éä˜3g+îÞâôé:)ÖÖÖãÂ…$œ8q§O?€DR~ýœ1q"ãQª-…°´{÷„;ökœ:µAAŽš6§I51RRD !úÌíÆ›òööf¬hêáÁo¸¶î²é_ö￉>8€{÷>ëtžôŸ~:‹õëO`ÅŠg±|ù³š6G¡â(…Bi‰D ‘ˆñî‰ÊPPÀx{6¾‰Êš„¶s¹¶»­­iÃu/XYõdPkkðù¦]Fx‘Jë<=K•UØàñY¡°™™EMr¡òù&pr²`=>áÓŽŽ°³ëÅŽ”!—dg·L¿¹¹¥ „@O ó&ù \]i2ý¶›[Џ¸ìFbh.[$ÉÚÚ¸‘7¨ìáâbÙ©…uŠö ‘Hqùr2+ˆfd¢GC»aøp„…yÁËËFÓfR´€mÛ.cƈ_×)C«#ˆ1uêOpt´À®] ;½Gdnn)þüó öÒÒ*<ûlfÏÁ°aO}ÌU«"2ò¢¢^G¿~£øV{¨«“áÒ¥dœúè9M›òÄÔÕÉ #99Ÿ ÏOI!5µ€Ï5ó4õôäÃÕÕªÓÏã•Q^.E`à‡øú눈è§ist’;£±råAÌ‚O?}ž¦R-T¥Pº„Ö‹3/¯´Aàlêí©¸–JëØ÷éëó`ii ;;SXX0§¢pînÒPµÝ¸SUPuu2ää” 3³è‘ðwÆ ´  œ}­¹yÄχ÷uE0.)©DZZFUˆ¡éé…l!$KËžln'ww+6LÉÙÙB§'ª&/¯÷îeãÞ=aÃ%åàr9pq±D@#‚*Qš ¢JêëåˆÍ`ÅÐ;w²½{; ,Ì Ã‡û`ÀúŸ¦4cÑ¢¨¬¬ÁÎ/ßhK¤¦Šñâ‹?ÁÁÁ »w/êô)ÀxB?~Û¶]Fll¼½m0gN¦LЦh;®`åʃøå—W1yr_5Z¬Ô×ËqéR2ŽÅ©S÷Q[[#|ÑcÇöÖÉ”PO† 'pð`,nÜøP'Dž‚‚ò¡”MÆë4'§r9³ùïèhOO~Cô#šº»[ëŒX>þàñ¸øí·9š6Eg9zô6–.݈ˆ~Ø´é¥N¿¹¨EPq”BÑ%*+k›[ ‘¨ yyÌE$’ 7·"‘„­èþh>χ!ì&°²2ŸÏ\aí––Æ]>ìQ,.GVV!ÒÓ ÙÐw…*•A.gºR#88˜7Éû©wt4שÐïÚÚz¶*hzz!;LK+@II%ÀÈHnnVlø»»»uÃÅŠæ} òóËXôîݬ&B¨»»5äˆÀ@F ¥aMu ˆqéR.\HFtt **jàèhް0o îOš›–òXúöýóç‡aÉ’g4mŠÊ`ÒŸáàÐKgR÷ïgcûö+8|8úú<¼øâ@Ì™3 žž|¥ï;>¯¾ºï¾;o¾ÞAÖj/ÕÕµ8}:‡ßÂùó‰00Ðøq½Ñaa^]JèHHÈÃ3Ï|‰¿þZŠ\5mŽÚJëØh©”F4UDNUW×,,zÂÛÛÖðò²§'žžüN¢¿ÿM¬Zu¬¥UëÕÈÿ%àµ×¶cøpolÞ<‹~×ªŠ£Jg@.'l(»HT†œœRˆÅäå•6@¹)ÀÐP¶¶½Àç›ÀÞÞ ÖÖÆ°±é+«‡áî]!Ÿç“"“É‘“S‚¬¬"¤§3ÕÎW>¯¬d¾[=8;+DOËχEtQ¨¨¨AJŠIIyÄHNÎGJŠBa1är.—ófâ§««ìí{é„7€&‰ÊXлw¯P±˜BÝܬä„À@:" € ¡õQ\\‰Ë—“qá.Ÿ“S# ê‰áÃAÔÅÅRÓfR:…:tŽyƒ¹iÚ•’–V€_ü ¶¶¦Ø»w‘Îm–•UaÏžëØ¹3™™E6Ìsæ óÏ4öòñ=ÂÃýñÃ/ÓùÀ#””TâèÑ;8|811°°èÉ“ûâ…úw‰Ô0|ø îÏ>‹Ð´)!ÙÙ%HK+`çÖ))"$'‹X'#xxðáåÕT8ut4×ÊtH%%• ü;v,À¨Q¾š6G§¹q# ³fmE` ¶m›O×퇊£Ц‘Jë—W ‘H‚œÆÃ3/¯¬Ae+,,oâíiaÑÖÖ&°·ï>ß66¦°³3…µµ)ììzÁÆÆDgÂ3TImm}3ÑSq[(,f¿c#8;3•Μ,®™û¶¶¦:;¹/+«jAó‘œ,Brr>0^ Š‰™·· [ÉÝÝŠîX¶‘HÒ$,þÞ=!D" +„:6\à@75(j¥¶¶7n¤³¡òqqÙàr9èÛ×aaÞ1ÂAAN].… EuìÛwï¿…¤¤ÏurüHO/ÀÔ©?â'"#éäœL.'8>Û¶]¹s‰àóM1{ö0̘1VVÆ(*ªÀ„ ßÂÆÆQQ¯ÓÔA(,Æá÷pøp,’’òáâb‰^興~pw·Ö´yjcÓ¦ÓØµ+±±Ÿh¥Ø§)ŠŠ*””ßÄ)!%E„üü2çäü&§..–ÿ¯½ðÂðôäã‹/¦jÔŽ®Àƒ9˜9ó׆t.ÿÓI'„Š£Š:),¬€XüPôÌÏ/Cn.ãõ™›[Šüü2”–>,Æ£¯ÏŸo[Û^°µ5ŸÏˆŠÇll!TWòRªƒòriñ“ ƒgÂáóó†¿[[ÃÉÉnn ÔŠBÍÍuoӘƮ¤¤¼†]ê|ˆÅLnÔž= v©™jmߥîlTTÔàî]!nßÎÄ­[™¸}; "Q¸\\]­XoP…Ghg­|Lé\$$ä5ˆ¡I¸v- ÕÕµps³b«ÊêA‹•±|y$ÒÓ pøð›š6EmdeaêÔŸÑ£‡!"#ët¾çÌÌ"¶€SUU-&Mêƒr •ÖáØ±·`aѵS3µ•rpèP,޹¼¼Rôïï‚3ã¹çúêœw˜@ FXØç8pà úô¿º ‰ÁC†G£¹ôõypq±d=Má”ÉqÚQ¹m7o>_=[·>ÖY‡m"-­/½ô zö4¾}‹ae¥»cš¡â(…ò4ÔÖÖ7xx2g~þüž ¯Ïüü2¶ð ˜˜tƒ­­é#¡î&ìcLQ#Ú™= åÈÌ,dÃßÓÓ Øpøâb& …ÇãÂÞÞŒ<-àâòÐT×&—-‘Ÿ_Ö(D‡ñMJÊgCuLM»ÃÓ“A=<øðõµ…‡‡5ìíÍ4l¹î “É‘””Û·3›‰;w²’"‚L&‡½½úõsFŸ>N rDïÞT|¢tbqyCÞPF‹ËafÖ¡¡ž cQÚPÔðaë1yr¼÷ÞxM›¢VrsK1}ú/€ýûÃÖ¶—†-R/RiŠÁš5ÇPVV€{¼ùf8Æ ¤žæO\NpåJ öí»“'ïÇãbâÄ ¼òÊôïï¢ióTÆèÑѧ¾újš¦Mé´H¥ul¨Æ§…¨«“ËåÀÑѼaÞÿÐÓÔïòÜÈŠ´)'OþúôqRé±)-““S‚iÓ~ÇATÔëàó;W®Z-Š£Ê£B K]‚œœRää” 7·Ba1rrJ KšT×ÓãÂÒÒööŒÀiggØØ<Bíìz¡[7 ~ªÎE[óº¸X6\,Øpxs‡•tBaqƒh~Ãn²ÉÉyH¤ZNòîímKÅx5—WÊzƒÞº•‰{÷„¨ªª…±±‚‚œÐ¯ŸúöuFß¾Îôû§t(ÕÕµ¸~=Có¡§ÇÅ A® óFh¨©w8Eí”#(è#ìÞý?Œé£isÔŽX\ŽéÓFuuöï_ '' M›¤V6m:ï¾û+WNÂiø÷ßàóM0wnfÎ ÖÉAYYŠEdä Ü¿Ÿ k¼üòL™2 ÓMݼù<¾ýöÜ»÷™N¦ÙÐ$uu2dd²ž¦Šµ‚@ †TZ°·7ƒ—>>¶lê,//tïþôk×aÃÖcúôAXº”aë(D¢2Lú3är‚ýû_‡noÆ©*ŽRºÕÕµ Âg +|>z_‘{’Çã‚Ï7ƒƒ9ìí{ÁÞÞ ¶¶¦°³3kB™ÂF]©²¤ª¨«“A(,FZZÒÓ hþÏÇ —…Ål¼"a»@ b qñù&¬øÙ8œ††³©‡ŠŠÜ»'lC3q믧Dž··-ú÷wnBàáÁ§¢¥C‘Ë <ÈaÅЛ7ÓQSS[„…y!4ÔC‡ºÓ;ŠZ¹s' ±±=ÚŸ¿‹Å‹ÿD|üº.ã-_\\‰—^úÅŕطoq§Î!Y[[.—Û¢'è¡C±xóÍÝX¿~ fÏ€I/°mÛeìÝ{uu2¼ðBÌŸ ÛŽ6]g¸wOˆ}ûnâàÁTW×bôh̘Œ#¼;åšD$’`À€OñË/³0qb¦Íé(ÖLdY>óÙ5FMM=8ÆÓT!”úøØÀÛÛö‰Ãóß? ©©bDE½ÑŸ†¢   Ó¦1›qQQ¯ÃÑÑ\Ó&u&¨8JÑ-¯ÏrVìÌÍe»D¨«“ÇãÂÑѾ¾¶ ¢©-›ž«qÄÞ‰wñÆ»˜¸¾ÃrRŠŠ*ðÒK›QVV…¨¨7àìÜr´‚¶5€Š£”Î…TZ¡°˜=áî¹¹Cà{}Z[›ÀÁ;íìñ“¹Ïx‚š˜tÓð'Ò $iƒøY@„´´ö¢711‚««Üܬàîn wwë†jçV]"ÿgKÔÔÔ#)) yHLÌC||.rQXX€ñõñ±…¿¿}Ca$fòA+•«ŸªªZܹ“…›7Ó›˜˜ ”–V¡gOCôéãÔH ¥áñÍQ\\‰Ë—SXA43³Ý»`ð`7„†z#,Ì ¾¾¶]ÆÃž¢}\¿ž†ˆˆØûúú<ÔÕÉ`bÒ cÆøcôhŒáÓeÍ`oß ŽŽæ y?©×§*Qä¬IM7?SSÅlV}}œ-àáÁg…O…ÚÕ+çee!1‘B¯Ð\¤§B&“ÃÈHÞÞ6ðõµƒ¯¯-|}máçgß%½f5E~~nÞLGLLbc3pÿ~6êêdpr²ÀÀ®èß߃¹ÂÛÛ†N"(£ºº7n¤ãÒ%F }ð \.AAN õBh¨ pé aJ×àþýl<û즟ÓÓãB&# „ 0Ð[¶Ìé!€uu2,Y² ÿü‡_1cØçÞ? þ~ýœqüø2 ZÙ2uu2øù­Fe¥\.„óæ…âÊ•dp8üõ×[mÚðNMã÷ß/"**0mÚ ÌŸ WW«Ç¿™Ò"2™çÏ'a×®hœ9KËžxõÕ¡xå•¡Z½™[YYƒ  ðᇓٔ í§®N@Œ””|ÖÛ411YYEÉäàñ¸ n6ðõµ…§'SÖÉɂΧՌDR™3ENN öïžžü†Ç¥ YÂÂrlÜ83gkØR­Š£”ŽE$*CVV1„ÂbdfA(,Fvv1²³ATQÝÇãÂÊÊŽŽæÍÂÝb(õúT=„äæ–6>·…ÂbÈdrp8ØÙõ‚««ÜÝŠŸnnVpt4ïò]y¹”AããsX¯Ðòr)›¿‡@íDP;¸¸Xvùï­#QT¿qƒñ ½y3YYEÐ×ç¡woôïï‚\0p +llh2EsÈdrܽ+ÄåË)¸t) 7of ¶¶žž|„†z!,Ì ÁÁ*¯4K¡¨ @Œ°°Ïûº  Gœ:µ¼,Òd29V®<ˆ½{¯aãÆ—0mÚ@üøãY|þù BÀáp°}û|Œí¯iS›pñb^zis“Ǹ\. ¸8xp úöu~ªãJ$ÕØ»÷:¶m»ŒììbŒå‹ ÂêõĞyZëm«)rrJ°cÇìÝ{I5&N ¼yaèßÿéÚIÝ,Y² YYÅøë¯¥š6…ÒNjjêñþûQˆŽNÅsÏõAR“Û4+«„êÁÛ›qññ±e×F]Ý™FÕH$R¼úêoHO/À¾}¯ÃÃÃÓ§ÿ‚˜˜ Èd2˜™uÇÕ«R¯}*ŽRTKii²²ŠXñ3;»YYÅìc55Œø©¯Ïƒƒƒ9œœÌáèhüø IDATsØÙõbÅP>ß„z¾¨‘ÒÒ*VüLMeÂá×ÕÕµSÓîpw·jþ®¸Ð|ŠÃK"hb"^’•U01éÆzúúÚÁÏÏ^^6tðÑ5¸};“õ ‰IGEE zõêŽ\п?#„öíëDÛ“š*ÆÅ‹É¸|9W® ‘TƒÏ7Eh¨'+ˆÒ¼¡”ÎBnn) ø´Õç¹\ÌÍ{ââÅ÷»\(-!_|q?üp+V<‹M›NC±,ãñ¸pp0ÃÅ‹hÕ|xåÊؽû›ÂJ¾>FFl˜ýÓ"“Éñï¿°uëEDG àéÉÇ‚a˜2e€ÒÊÙRiÜÜÞÅ‚aøì³ˆ§>¿®R[[#GncÛ¶K¸{Wˆ  GÌ™‚çŸïCCí©î\"^yå7DG¯j5O"¥óðï¿0oÞHL\Ïz”WUÕ"%E„Äć)ÅóØ(D ‹ž¬‰ üüìáåŧóóvPYYƒY³¶ /¯N8yò.êë嘎ŋGáƒ&hØJ­€Š£”¶QSSŒŒBVì|T•H¤˜É®)œœ,àèh'' Vuv¶ŸoJ«™ÚÚz¤¦2•à ¡La$Ez½fáïŠkÒý 6^1''磦¦zz\¸¹Y7äµkØý´ƒƒƒÙãLQ ……¸~=W¯¦âúõ4$&æA&“ÃÍÍ ¸`ÀW è //>ÍÅHÑ8bq9›3ôÒ¥däæ–ÂØØC†x°‚¨——¦Í¤Pž ‰D ŸZ}žËå *êf¹7»»v]ÅêÕ‡P_/ƒ\þpYÆårðé§Ïcþü0 Z÷¹œ 0ð#W´ø¼"Ì~áÂáX¹rb»EÝ„„\lÝz ‡ÅÀÈÈ/¿Œ9sBZœ_íÞ}ï¼³0gÎ0¬[7…Žï­›‰?þ¸ˆãÇïÂØØ3gcöìaMŠkiŠúz9 ø³f ÃòåÏjÚJ;)*ª@ïÞbÿþ×â©ôµ……HLT£eR%'‹P]] .—ggKøù1ë,øûÛÃÉÉ‚ê OHuu-V®<ˆ¨¨›MÆ€Ùܺ|ye—Hkó¨8JiŽDRŒŒBdd!#£™™EÈÈ(@zz!D" »«maÑÎά¨Buv¶€½½™Vítë2bq9’“óò½ˆ–Æ„Âçä”°UèìíÍXÔÃÃnnÖpuµ„ƒƒ9TQW'CJŠqq9ìËîfZY7xÚÂLJÙÕôö¶öìºwEÄâr\»&ÀÕ«Œ š’"Çäa8кaÐ WXXôÔ´© *+k-h•OFbbôõyèßߥ!o¨'úôq¦9³):A}½NN+Z|ŽËåbéÒp¼ûJ{ÈÈ(ĸq_£¼¼r¹ü‘g9066ÄÂÔTó^µ±±™˜4éÛ'zíë¯ÂêÕ“TrÞââJìÚuÛ·_FAA9ÆŽíùóCÌê„„†~ŽŒŒBÈåLJ‚ˆˆ~øî»™4e‘ÄârìÞ};wF£  Ï>€¹sC1l˜‡Fíúøã#8s&W®¬Ô¨Õ0tè:¼ôÒ`,]Þæ÷ÊdrdeáÁƒ\¶€m||.²²Š —tëfФfƒÂÓ”:ø4gÇŽ+X¹ò Z’þôôx;¶7~ûm¶,Ó*¨8ÚU‹Ë‘•Uˆ´4Æ 4=½ A-d½ õô¸°·7ƒ³³%\]-áädWWK¸¸0·•…·PT‹L&‡PXÌŠ ¸á¶ˆõÖ55íkxx0•à]]-áæf ww+*Þµ@ee r—‹¸¸lÜ¿ŸÄÄ<ÔÕÉšäÁQˆ¡¾¾vT\ÓòóË-Àµk©¸v-úú<ôíëŒ!CÜìŽ]iEÑ êêd¸};—.%ãâÅdܾ ™ŒÀ××–-¢ìN¯ÅÑqd²¦ÂŸ¾>þþ8vli—°ŠŠ*0vì׉$¨¯—µø}}æÌ Á§Ÿ>ßÁÖ5gíÚcزåB³zzz\ðx\|øádÌ¢rÏͺ:Nž¼‡­[/ 66ö˜?? =0{öïMý<Ï<ã‹-[æRgÇPW'éS÷±mÛ%\¿ž//,\8/¾8@#ë‡{÷„;ök?¾ ýúignTÊ“³lÙ””TaÇŽ*;fUU-’’ò‘‹„„<$%åáÁƒ\””0†µµ1||ìàïoǮ缼l´*…DGòÏ?q˜7ïf£áp88zôM àÚ–iTU75èÙóÉ«6ª’ ¤¥‰Ùpê‡^ …¨¬¬À„U;;[ÀÕÕ ÎÎpq±l¸0¡]uBAAUUm›*nª©´®Aü!%EÔÈ´€-VeooÆ  ^^6ð𰆧'Ÿ&°VBqq%ââ²—ÓpÉFZZär“n°G` üýíáïo>õÚÒ"rrJX¯Ð«WÈÈ(„¡¡úöuÆÐ¡vÇ€.02Ò×´©”NŠ¢ŠªŽ•˜˜Ï†Ê_½šŠÊÊ88˜!4Ôaa^6Ì––t³…Ò5ðô|ŸwLøµ‘‘Ο¯Ë¦ ©®®EPÐG¨¨¨yìky<..\xnnš­à>hÐdg·ø—ËA¿~.øþû™pq±T»-wîdaË– 8~ü.¦ßUäÐSÀãq1x°þüó5ºùô„ÿü??[Ïá~ëV&&N|¼Ç?ǃŸŸ þþ{EWNIBÅQu!‘TcõêÃHLÌÅ?ÿ¼­¶óTUÕ"=½€Í%ÙøZ"©tïn77+Ve¼@oP[[Ó®üh‘¸¸,XðæÏÃk¯ WË9JJ*‘œ,‚@ BjªIIŒG¨"^_ŸKxzòDP><<˜ÛšÛ; 99%¸ÿ¡úàArrJ66¦°G@€z÷v€¿¿œœhÂwm#3³×®1BèÕ«© ‹ad¤\쎡C=з¯s—ݦ¨@ŒwßÝ}û?õ†`nniƒgh®\IX\Ž^½º#$Ä!!L¥Ž (m$(è#6=‚_I“úhÈ"ÍsïžóçoCNN ôõy­zcŒ÷hX˜7vî|­-lJRR>FŽü¢Ùãzz\p¹\¬Z5óç‡uxª¦«W˜2åg-/gõô¸p@dä"˜˜tëPÛ:3"Q¶l¹ˆ;£Ááp0{ö0,XÖaŽß[¶\À­[ŸtYG]Aá |íÚj¬¹ÐUÔˆÏe׆=áïo€ÆAÆ××V§œd¶o¿‚•+`P™¬õ±†ÃáàûïgbÊ”ež¶AÅQU#—DF^ÇgŸýÅŠ“YY›Úõ«¯—#;»©©LQENÉ´´äæ–`óFÕÅV·³ë¥’ϦëWâË/OaçÎhB0aB¶l™Ó®cU ))))"$%å5TçËGQ“̾gOCVôT žž|8;[èÔd ¾^Ž;¯`îÜP•W(,ƽ{Bܽ+Ľ{Ù¸wOˆÒÒ*p¹¸¸X²Bh@€=z÷v añZJ^^).^LÆ•+)ˆŽ 7·Ý»`à@W»cÈwôíë¬Sÿ Šv°wï5¬X±°ÿb„„x=ÑûÊʪŠK—’pñb2ÒÒ `h¨‡AƒÜæ…/ôîí@s:S(† Y‡ÌÌBÌ|uÚ´Aظqº†­ÒRRDع3‘‘7PUU€ÓBîQ†¶ôQªæÛoÿÁ7ßœF]ÝCÛ¸\&·÷?¾ WWÍxµ®X±ÜT*.ëéñàáa…}û^§QVmD"©ÆŽW°uëEH$Õ˜>}-©ö;ìì ¼Û·ÏÇèÑþj=E½H¥uðô|¿ý6ãÆõÖ´9,¥¥Uˆ‹Ëƃ¹ iÖr’"bÓ«ùøØ" À~~¶ð󳇟ŸJ=¨++kðÁ°jÕ$ðù&*;nKÈdrœ;—ˆíÛ/ãüùDp¹œfžö#ŽZZöĵk«Ñ­[—ô¶§â¨*‰ÍÄûïG!!!„(¾Ù³gß…¯¯ícß_W'k£ÎGr2V’Âx*}++ã&uÜÝ™“NNº%¦u$r9ipù?Žêê:ö»vr2ǵk>Ñ1ŠŠ*@ÌŠ IIEPSÓîðôäÃÇÇžž|x{ÛÀÝÝZ+*Cª›œœ̘±/~ë§:NvvI#!”CKJ*Áãqááa  G:²¡ñÔÃV{‘H¤ˆŽNa«s btïn€ÁƒÝØ0ù  'Ùµ¥hI5Þ~{Nœ¸ BϬY³†aÍšˆ__SS›7ÓÙPù{÷²ö em"ض†žöö½pàÀ]bî­jjjêy›7ŸCvv &LÂ’%Ï À^mçœ2åGXY™`óæYj;¥c ýý°|ù³š6E)uu26,?>>0QˆI58œ-XïR…§éÓö'×®¥â…~|ôÑs˜??´C´œ¼¼RìÙs ;vD£¨¨<·‰Pª§ÇŲec´¾­ÔGUAAA9Ö­;ލ¨›àñš*ñ\.›6½„éÓ±5Î+™˜øPHËÊ*B}½zz\89YÀÛÛ^^ÌEáÚÑ9_t˜˜t¼ûî~$'‹šÚ³{’œüy“¼£åMëM*•ÖBáMÊårðå—Ó0sfp‡Ú“]‚Aƒ>À¬kz÷vÄ?¼üԛݪbíÚcøùçÿžøõúú| \.§YU „¡¶¶ÉÉŒ€­A{õêΊŸÞÞ6°¶6‚»»,-{tØçÑÿS]]‹Õ«cïÞkàpBèÓÇ'N,kòZ¡°·og"11ŸC‹Š*ÀåràînÀ@GV õ÷·ïð"Y”¶#—$$äââEF ½~= ÕÕµðò²AHˆ'¼0dˆÝìy YYY¸~ýº¦Íè´899aðàÁì}™LŽ<‹Oh¹ßÿä“盉˗SPRR KËžlÎЯ.[<†¢=DEEiÚ„6óÞ{×!•Êðâ‹® }|$UG3xð`899©ô˜ªè¿ëêä¸u«—.åC(¬`ÿâ‹Á02ê¸ÍÄ#G2pî\.8`Ò$gŒi§6oÑ©S§>Ñëär‚©SÂÕ«©àñ¸ÍúsÛ°–b 5=Z¥ùí·áèHS-=eíqþ|"~úé,®\ O',Yò ÆŽí­²ßFy¹}ú|ŒO>y¯¾:T%Ǥh†ï¾ûQQ7qùòJM›¢2ÊË¥M¼Kããs‘””‡ššzèëóàéÉg½KÝÝ­1`€K“¼Ço¼±ýu‡í»¸\är‚1cü±ví”ç›êÿKJjpõª—/‹PYY°¶î†U«úªå|ÚB ý[sqT$!!!¡ã¬êdðù|øúú":Z€wßÝôôB<ÎùÖܼllLY!Íé2îêjņž?¾¬ïÚøúúÂÜÜ¿ÿ~ _}uuuò&!K¢¯ÏC·nð󳃗Ÿõâõò²µuÓœE]µýÿ‡Æ$$äâµ×¶³žÐár9ˆ‰ù99¥8}:§NÝGjªîîV tl¸0“¨ÚyÈÊ*jð MÁ•+)(*ªŸoŠÐPO6ì¸ î@¶‹={öàå—_Ö´–™3gb÷îÝ€üü2,Zô'bbÒ›-’èëóä#ö7ëãcK‹R´ŠÎø{47€¾¾D¢ß4mJ‹ìÞ½3gÎTé1UÝëë[¢GèÖÍ7Q^~EeÇ~––/A_ߢ¾¾åjõªâi%’jV ¸¸ÅÅ•(.®DaaŠŠ*pôèßÈÌÇë.×\®>äòA]]žŠ?nñ$íqûv~úé,þþû><=ùXºt4&Oî£GŸ7ßÜŒŒ;¶ìñ/¦h-ÿü‡yóþ@JÊN©R_/‡@ ƒ9 Â)#žU@O‹à`Œ€áÃ}0sæfde5ïOiK–.7Þ##}ö9õÿ\¹ÂÌl" ÷ ®N¬æsjŽú·˜V“c1B­ÆtF Wà›ovàøñ;ÐÓã>Ñ QQQƒÓ§WδˆEkË9X¹ò vì`<¬'Rܽ›…ÒÒ*šK”BQ!o½5tÉ¡ ºw7@DD¿;Ÿ‰‰^}T‡¯£èÖÍ@§=Ø4§'?üð2V¬x?üpï¾»_}¯¿> 3f ~ª>`èP8:šcÿþøðÃÉj°šÒ89Y€Ãá +K·ÅÑÖ°°è‰qãzcܸި¯—#*ê&V¬ˆTú™L±X‚ ¶!$ÄëÖMQúzUãèhGGó=§6@g*OÈ™3ñ‰˜|?ffÝQZZÍ.´;b-å˜ “÷ïgSqTTW×âàÁXXYuƒX\‰ž= QQQ€ ñÖÓãA&“·êå(– ²²††w+áÊ/ÞÒÒj¥Â( œ3Àç7ÏSJÑ>*+kpùr þý÷ÎKD^^)lm{aäHüï#âIÿ­¤²’‡7,páÂå6¿÷Ÿ`Ú´j°ŠBéšPa”Bé:¸¸XbÓ¦éX¾| ~úé,>þø¾ûî_,^<¯¼2¤M¢4—ËÁÔ©±sg4>ø`"Ý€ï¤éƒÏ7Aff‘¦MÑ8zz\”—K¡¯ÏkU;R XWGG ö9ÌÍŸGMò÷PÚ­N04d \ùúújØÊãË bbÒqútNºŒŒBXXôÄðáÞøî»™ ó¦h( …B¡P(j¥gOC,Z4óç‡âСXüòË9Œõ%ÂÃýðúë£0x°[³÷L˜„U«âðá[X° LVSÚ‹…E–kÚ Ó­›>„ÂMàñhþ\m¤]­"°}ûv•’““ƒ 6 ..î©qôèQܸq£Ùã•••X¿~}{ÌÓ*Tõ½+;Nyy96lØÐ®ãgffâ·ß~k×1Ýk¿’’|ùå—š6ƒ¢ãÔÔÔãÌ™x¼óÎ~ôéóžþ\¸„)SúãäÉÿÃÝ»ŸáÇ_ÁäÉ}©0ª¨r§ký=…ÒÕQÌÍÕ1÷Ñ•þBÛÖSmAWÚ 11ž6^g©bÍõ(¡]ôõy˜>}Î{Û¶ÍCii""~ÀäÉßãøñ»MÒsuïn€çžë‡ÈÈë´˜Ò¬¬LP\\©4íZW€Çãvˆ0ªë‚Ö´ºGQ6Ž©»okWË$&&bóæÍ*1dÖ¬Y¸sçôôžÞ™5** ÑÑÑÍ///ÇG}Ôó´ U}ïÊŽSVV†O>ù¤]ÇOOOÇ÷ßß®cº×~eeeøý÷ßÙû ,@zzºÊÏ£®ãR´‰¤‡ßÂÿþ·½{¯ÆÜ¹¿#5UŒ%KÂqõêjœ9óV¬‹>}œ ÑPtUŽÇꤨ¨ÁÁÁ8zôh‹ÏëZO¡tusóGç>ª@Wú m[Oµ]iƒÆtÄxÚx¥Š5×£t¦váp83&G.ÅÑ£KaeÕ‹í@HÈzlÝz‘ Cž>} âãs—£a‹)Oƒ…EOÈåÅÅ•š6¥K ë‚Ö´ºGQ6Ž©»oÓš°ú¬¬,¬[·>>>š6…BQ+...HJJbïÿý÷ßX²d‰ÊÏ£®ãR´‹üü26\þêUx<.BC½ðÙg=ÚŸæf¢hóæÍCa!MÈO¡t5ûPÔ]OQ:3ºbà@WddbË– ذá6nü¯¼2óæ…ÂÝÝ‘‘×±ví š6•ÒF¬­……å°²2Ö°5mF“ãX»}zår9–.] X[[ãóÏ?Àx‡„‡‡ã믿†¬¬¬ðÇàí·ß†••lmm ˜;w.²²²0kÖ,œb±Ó§OÇ¥K—÷ïßǰaÃ`dd///ìÙ³ ‹ñì³ÏâÏ?ÿD¯^½½{÷ÂÃÃzzz°µµÅW_}Õêq[kÖŽKÑnRRDøñdz˜0áôïÿ)6l8 kkcüü󫈋[‹;ॗSa´‹¡ªqAY߬ì¹Öú.?ýô!2dÈc?‹®ô÷Цií©èvïÞ wwwôèÑsæÌLÆTÌU6·S6'lmnÞxîó¸s;v îîîèÞ½;æÎ‹wÞy'Ožlõ3êB¡ŽõTFFFŽÙä<Ó§OÇõë×ÛÕþ-¡ mÐU§­ÍÓ•ÑÞ5Wc:k»¸¸Xbݺ)ˆ‰ùo¼1 Æbȵ02ÒÇ1leoJçÁ̬ °°BÖtTѵgQ¦Õµ67ytk µõmäòóóɹsç}¸EŽ;F8Y¾|9©¬¬$—.]"¦¦¦$**Šäåå.—K>üðC"—ËÉÏ?ÿL 6¹\N¾üòKâááA!¤´´”¸ºº’¿ÿþ›H¥RòöÛo“9sæBÙ½{7144$³gÏ&„²k×.DîܹC ÉÁƒIuu5ùæ›oòÍ7ß4³3// .$555D SSSòßÿ=ÑçTOâããÛôž'åܹs$??ÿ‰^«ªï]Ùq„B!144$„0¿ ccc²mÛ6"•JÉ‘#GH÷îÝIbb" …ÄØØ˜>|˜TUU‘µk×ggg"—Ëɹs爿¿?‘ËådñâÅdøðᤢ¢‚BÈßÿMìììHJJ ‘H$dòäÉdÑ¢E-~^U´_[¾ß§¡-ÇOOO'=zô „RRRBlmmɹsçHmm-©¨¨ ¶¶¶äÇ$R©”œ={–˜˜˜+W®¡PHºuëF"""Htt4),,$†††äðáÃD*•’ ..—KÄbq³ã>® ·¦¦æ‰>‡:ÿ”¦Èdr“AÖ®=FBBÖ[Ûe¤ÿOÈÊ•ÉÅ‹I¤®N¦i)j`÷îݤ…aºET5.(뛕=§¬ï"„û÷ïWWWRPP@†N¶lÙÒâçPÕx=sæL2sæÌ6½‡Bé »wï~¢×*û_æååö¿–––FzõêEþùç¥s;eó esóÆseçNMM%={ö$ýõ©®®&ëׯ'<ìܹ³ÙçSEÑ–ï³-h¢ÿ~t=•@,,,šœ+((ˆüûï¿OÝþ¢ª>»-ßW[iëx ªöH$­ÎÓ¯³T±æz”ö¶‹:Ûãi¨­­'û÷ß #Fl ¶¶ËȈÈéÓ÷‰LÖü³S´“ÚÚzbk»Œœ>}_Ó¦tZÚ2^©ª{ÚqDÙ|@ÙÜäÑqìQT1æ(éßn¶[533#µµµìc«V­"¬á 1,99™èé鑺º:B!·nÝ"|>Ÿ}Ÿ»»;¹zõ*!„ÿþû8::BY¸p!Y²d qvv&„2þ|²råJòî»ï’3f4±§wïÞJÅQ±XÌ>6tèPrøðá'úœ ´IUÅ÷®ì8êÍ›7“°°°&6¼øâ‹äÓO?%7n$“&Mb¯­­%6l •••äܹsÄÏÏ,^¼˜XZZ²6BÈ‘#Gˆ‰‹‹#„0ø’’’?¯*ÚO[ÅQB±··'·oß&„Iúõë×äõK—.%Ë–-#B¡ 999„B¤R)‰e_§h³”””fÇUÖ†÷I¡â¨ú‰Í |˜ôíû1;ܰá¹s'«ÅÉ0E·hëâZゲ¾YÙsÊú®ªª*Ò»woòÏ?ÿBȉ£í¯©8JÑUÚ²8Rö¿Tü×rssÙçÂÂÂHTT”Ò¹²ù„²¹ù£âhkç^»v-yá…ØÇår9±µµU*޶§¿ÐqTë©Ç-jŸ¦ýEU}¶¶‰£ªheóôÖÄѧ]s=J{ÛEÛÄÑÆŒÿ5éÝ{5±³û?2lØ:²}ûeRUõdŽÍâà°œ:ûøRZ¤­â¨*ú±§G”Í”ÍMi:Ž=Š*Æeâh»ÃêÝÝÝ¡¯¯ÏÞ@^^{¿GÆ…šÃáÀÐÐM¬Êá´^ $$$eeeHNNÆ… °téR”——###ÿý÷&L˜€œœøûû7yŸŸŸ_«Çäñx°²²bï+;g@UßûãŽÙÙÙðòòjò˜··7„B!222š<§¯¯÷Þ{Ý»3Õ¯ããã‘›› € “R0qâD¼øâ‹:t(œñÖ[o¡¤¤¤ÕÏ«kí×HLL„‹‹ {‰ŒŒDii)€ËåÂÎÎ`hhˆØØX<ûì³pwwGDDD«.åÊÚðÑãR4K||.6l8à൘8ñ[\¸„Ù³‡áòå•8wî=¼÷Þx9êì€òô¨b\PÖ7+{NYßµvíZØÙÙ¡[·n¸|ù2ÊÊÊ pÿþý?GWéï)uó¸9ØÚÚ²·ÿ5es;eó‰¶ÎÍŸäÜnnn­CWú u¬§ž„¶¶KèJ4FíÑ–yº‚ö¬¹EÛ^}Š‹+±ÿë:ÔŸ|r~† N@,.×´y%ôèa€ÊÊM›Ñeè¨q¥¥qDÙ|àIæ&ÊPgßÖnqôÑ b±æææí:¦¾¾>ÂÃñgÏTVVÂÓÓ#FŒÀŽ; ‘H 333ˆÅb¥¶è2ªúÞŸä8&&&Í^WTTSSS7û!:tˆÍ)áââ‚`ãÆø¿ÿû?öµ„lÚ´ EEEˆŠŠ‚T*Å”)SÚl¿®abb‚ÐÐPddd4¹üòË/šþù9‚U«VaõêÕHNNÆÍ›7[ )kÃGKéxÒÒ °iÓiŒñÂÿ±cwÑçν‡sçÞÃ[o†››ÕãDéÒ¨b\PÖ7+{NYßÅãñPXXˆeË–aÙ²eˆŒŒÄwß}§šN¡PZäqsŠÖP6·S6ŸPÅÜÜØØEEEMS¶y®+¨c=Õ••¯ý¸¹}W@íÑ–yº‚ö¬¹º cÆÀܼ®]àË/§áæÍ1o^(ö칆Aƒ>òe{÷øQ:œîÝ !•ÖiÚŒ.ƒºÆ•'G”ÍžvnÒ´[ÍÈÈÀñãÇåååøõ×_1~üøv6~üx|ûí· Œ5 ß|ó ÆŽ .—‹gžy‘‘‘¬ú}ïÞ=\¼x‘}ÿ‘#G×n;´U}ïOrœÑ£GãßÿEZZ&©þÁƒŽÑ£G㯿þbüׯ_Ç+¯¼€Ù‘ÐÓÓÃìÙ³áããƒ÷ßðÅ_`ĈÐÓÓàAƒ0kÖ,ÖÃÐýökððp\ºt €ªª*ôï߇nöÚììløùù!44<W¯^…D"iñ¸ÊÚ¢„Âbüüó=z#BBÖcïÞkxæ_œ:µW®¬Ä{·¦Í¤t"T1.(뛕=§¬ïúì³ÏÃ^ú÷ïÕ«WcëÖ­ºnO¡¨›¶Ì)£ln§l>ñ¸¹ù“Ú|äÈ®^½ŠøøxvWWû u¬§ôõõQVV†ââbL; ‚Ǿïqs{]mƒÆ¨¢=Ú2OWО5WWhÐ×çaÚ´AØ»÷:ärKËžX¾üYܼù1>ÿ| îÜ"<ü+Ìœù+.]JÖ´¹”FéSq´QE?ö´ãˆ²ù@[ç&Ù·µ[ ÆòåË1|øpxyyÁÙÙ .l·aãÆCYYYq´¬¬ &L<÷Üs=z4üüü0räHLš4©‰Ð³lÙ2¶â½.¢ªïýIŽÓ§O¬X±ýû÷ǘ1càïï_|cÇŽÅÈ‘#1sæLøûû#<<cÆŒÁW_}…ž=›WÉÞ¼y3vìØ«W¯böìÙ … Dxx8¦M›†5kÖ°¯ÕõökŒµµ5–,Y‚ØØXxzzbÍš5Fxx8¼¼¼€éÓ§7{ßsÏ=‡„„ >£GÆš5kàææ†+V4;®²6¤t"‘[·^ĤIß!8x-~ûí< rÃÑ£KqóæGøðÃÉ rÔ´™”NŠ*Æe}³²çÚÒw=JWêï)”Žäiÿ—ÊævÊæ››? ãÇǤI“àïïÑ£GcÅŠ ‚Ýí/Ô±žruuÅàÁƒÑ¯_?<÷ÜsX±bÅÿ³w×QeÇßC‡âÚ®íšìª+b`w+( (&ŠØþìNìTDPQQììÄZc D,Jrfž?\}ÖufîçõŸ2s·æÎ½ß{‚:uê|óyß:·ÏªïÁ¿©âýøÖyzZ~æš+;¼/uíjEDD4GÞþô††z88Xqôèh¼¼ú’’’ŠÝ*š5[ÀŽb‡{m`l¬ÿí *£ŠãØ~|í|à{ÏM4yl“)•Jå¿ÿ#22’ððp6l˜áF9{ö,¹rå¢jÕªªÎøUׯ_'22’5j`ff¦Ö¾>V·ÍÍÍUÞö±cÇ077§`Á‚~Žª^÷Œ¶óèÑ#îÞ½KÉ’%¿XçÞ½{<|øsssŠËXq'))‰°°0ùóÏ?)P Àÿßò#¯¯ºÚW(¼}û–¼yóÅåË—©^½:¹sç>¬ÓqóæMŠ)òÅzÿCXX  råÊ>>tíÚ5ÃÏùÑÏå×Îí¾v>‘Ö¹ùÏ}ÒÅ«W¯HIIáÍ›7Ô®]sss|||°²²ÊpöŒú‘×3#¤:~ÿWjj*çÎ>\(\S.#~äÜþGýÈë•Q?ú} Š÷ãkçé_£êk®ï¥Î÷CU:v\Nîܦ¬_ß+ÝÇ\»ö„U«Ž²wïU 0£OŸú8:Ö"gN# &>jÒd:XââÒDê(™Ò|_©â8ö3ß#_«ÕIuÍð•ãÛ…Œÿf_addD£FTÑÔw«T©•*U’¤o©©êuÏh;ÌMKÙ²e)[¶ìwõkhhH½zõ¾ë9YŽŽÎgùóç§yóæŸ=¦H‘")Rä›m™™™}6*£X±bŸN”Òj÷kï¡ :ÉÉ©8pÿ ;v##}Z´¨ˆ§g_4(¾¾®Ô…,Jß _;6ë¸Ñc— šó£ŸË¯Û}í|"­sóÿžû¤çéÓ§4nÜ~ÿýwÖ®]Kjj*–––ß?³QÇõ”žžuëÖý¡çþȹ}V¢Š÷ãkçé_£êk®¬¨[·Z¸¹m!**–üùs¦ù˜Ê•‹±jUž={‹‡ÇI/aÉ’ƒôêU—>}ê“/ß—3õ‰‹›1iš*Žc?ó=òµZ6^3¨¤8*‚Ý)•J.]z̶maìÞ}…„„d6¬ÀòåŽ4köFFb*‰ ‚ |……7ndöìÙ¼yó†2eÊüÙŽ»‚ ­[WfüøüüÂ<øë#‹ÉÍĉָº6ÃÃã$6œdíÚãØÛ×dРF)’[C©³7…B{G" ˆâ¨ ÂOùûï×ìØq‘íÛÏóèÑ+*W.ƈ-èÐÁRÜ‘A„ïÔ¾}{Ú·o/u A´˜‘‘>¶¶–lÙÊ A?mÚö5ffÆ Öœþýâë{ŽÕ«áí}[[K jLÙ²êY~M„ÌAGA¾Sbb {÷^ÅÇç¡¡(PÀŒŽ-騱ææ¿JOAA²4GG+6n<É™3Q§N™ ?ÏØØ€>}êÓ£G.²rå5š‹µµ#F´ tiõ탑݉½m&Š£‚ tíÚ¶m cÇŽ $&¦Ò¢EE||œ©W¯œø²AA 17/Œ…Eq|}Ï~Wqô#}}]ììjйsuö칊»û~6œ‹­­%Ç· D‰o¯“,d\ll‚Ø KÐj¢8*‚ð11‰ìØqž­[ø~ý)*üÊðá-éܹ¹s›JOAA²¥nÝj1~üÞ½{Ï/¿˜üP::2¬­«Ð¶íŸ^dÑ¢êÕ›E—.56¬9E‹Š5IU!66IG­&†: ‚ ¤áüù‡ âC•*“˜5k/•+#(È•#GFãìÜ@FAAAB66èéé²cÇ…ŸnKGGFÇŽÕ8vl,óçÛqêÔ=êÔ™Éøñ¼y¯‚´ÙW\\J¥RG­&FŽ ‚ ü#..‰;.°iÓÂßcaQœY³:Ò®]LM ¥Ž'd#ïÞ½çìÙ—èêæ’:Š ‚ ‚V255ÄÆÆ_ßsôéS_%mêéé`gW[[K¶m ÃÝ}?;v\`ذæôéS}}]•ô“ÄÅ%ˆâ¨ ÕDqT„lïÖ­çlÚtš€€‹(JÚ·¯Ê¢EöT®\LêhB6’’"çÈ‘p¶o?Ï¡C·P(ˆ ¾AAÒÓµ«¾¾ç¸té1U«–PY»úúº8:Ö¢C‡ª,_~˜yóö±iÓi&N´¦U«J*ë';ˆÅQAû‰â¨ ÙRJŠœ  +xzžæÂ…‡”+Wˆ±cÛЩSuÌÌÄ· 9/>" à"—ˆ‰I lÙ‚”)“ŸÛ·_ “‰Ñ ‚ ‚ é©Zµææ…Ù¼ùŒJ‹£™š2fLkk1sæúöÝH­Z¥™2¥=+QyYÑ«WqäË—Sâ$‚¾t‹£ÇŽÓ`ŒÌ£`Á‚jk;<<œððpµµ/¨Wv|ÿÔùyP—W¯âؼù ^^§xûö=­[WfÜ8jÕ*-u4!yþüÛ¶…á(Z4%JäåÞ½H<ˆ¢~ýrT­j‚wÉdÉddT…"–ää•¶k`P™Ì¤¤‡*kS&Ó%wnkÂIH¸ (¾xL×®]UÖŸ h“nݺѭ[7©c¤K_??2™ÉÉO~º-ƒ_14üØØ³¤õ9×v?{üÖÕÍIΜµ‰Ž>ŒR™úÓyŒ+”ô…"ởkjjIRÒcRS_ýtMóõõÅ××Wê&“éallNBÂm”Ê”ï~n®\͈‹ %5õšjŸ=j3uê.¦Nm™™±Zú(R$7+Wv§OŸúL™HëÖ éׯ£FµÂÈH_-}f/^D£¯¯KÞ¼bφŸ¡íßÿ™ÝÅÑ\¹rñÇH‘%S04TϺƒâ5W¿œ9Õw§*»¾êú<¨ÃÏØ°á—È‘ÃîÝkÓ³g k: š‘’"çС[øúžåر;äÌiDñâyÉ›7OŸ¾!_¾Œ×›ªäË—ƒ¿ÿþ›êÕ5s"22 ®R¯Þ¯X[«vÔ…¿ÿ.]zŸqäÌ©š‹‡øøTvìxÀ•+%É»=Mš¡fÍèêþ!¢xñâ*éK´‰ŸŸŸÔ¾iûöDF&àâòóçF—/¿Â×÷/*VlDÏžåÉ[õç5kÖTy›uëÖýé÷êæÍ·øøÜÇÌLggGòäù¹ß=66… ÎãâR‘²e;ë¹r¹’+nòòe®®•ÈŸ?ó̰:t(íÛ·—:Æw‰OeÒ¤ótêäL­Zßwðî]26Ü&"œ¶m‹Ó Aa4tUR¶¶–̘ÄöíçU¶öhz,-K°{·+>>ç˜1#ˆààëÌ›×…ºu˪µßÌ,"â šiì†V”¾ÿ3;™R©TJBAär!!7Y¿þ8gÏþ…¹yaúö­‡­m5 Ū"‚f<|…¯o(~~a¼~K©RHJJáéÓ·-š›NªckkI™2$É—LÛ¶‹111 `ˆÊ7ˆO¢aùT­Z‚5kœTÚö£G¯X¹ò~~çɓǔáèX •ö#BÆ-^‚¿ÿNúŸJÚ»w/’þý½ˆŒŒaÉ’®4mú»JÚÕV))ræÌÙËêÕÇèÒ¥:³fuÄØøçi7o>£Y³œ:õ?~û-ÿw??66‡ÕDDDèBñây:“¾!C|¸{÷Œøî禦*Xºô K–¤Zµ’,Zä-ޯѣý {ȱcc4Ögdd4ãÆíàÀØÛ×dÒ¤väÊe¢±þ3‹É“wrùòßìÞ=Tê(‚ž :R'APµ„„d¼¼NS¯ÞlúõÛˆ™™1~~ƒ8|xV¢0*¨]bb éØq9uëÎÆ×÷,&&Èd:DEÅРA\ ÈèÑ­$+ŒÂ‡ÖçÏ£Y¹²‡Zv`555dÁ;öì¹Jpðu•¶]²d>æÍë¹s°±±`Þ¼}Ô¨1Å‹CˆŽ~¯Ò¾AȘB…rñâE´ÊÚ+[¶ {÷£yó?prZÏ´i»HI‘«¬}mòìÙ[lm—±iÓ-r`Ñ"•F"#c(PàûF~”3§¾¾È“Ç;»UDD¼SI.!mNNµ¹~ý)—/ÿýÝÏÕÓÓaøðìÝëÆÛ·ïiÚt>ÞÞgÉêc¢ºw¯ÍÝ»/8wî/õY°`.<©£ ÙÄß¿ÆËë4>>¡¼ŸHþüf¼~‡R©¤qcslm-iÑ¢"ÚQ ß¹óƒ{³~}/µï¼êæ¶…£GÃ9vl,¿ü¢žQo߯³~ý <ÝV ÈøG›6‹°²*ÍĉÖRG„ôˆ‘£‚ d~¿füøT¯> “ôìY—°°‰ÌžÝIFµS*•;v›îÝ×Q«ÖL¼¼N“œœ‚\®¤xñN³oݺ2}úldÆŒ är…Fúþ^ï>›F?o^ŒŒô5ÒwBB2&&ªÝ >Ú-r`ÅŠ#xyVyûÙ¹ù¯XZ–Ä×WµÓÄsæ4ÂÝÝŽM›úú€ÆçI^LT•òå Q³æolÚtFê(4hPžƒG¢§§KÛ¶‹¹ví‰Ô‘4êþýHÜ„Ÿ%Š£‚ h­›7ŸÑ£Ç:¬­—’ÌÖ­ FÓ¦¿KMÈÂÞ¿Ofûöó4i2ŸŠ'âåuSSCÆŽmͽ{sؾ}›£§—¹¾BSRä àE‘"¿0mZI³X[[`m]7·-¼}«ùM76gçÎ!¸`l¬O·nkhÙr!ûö]C¡ÓCág˜˜ht ©±± رx±'±·_Åë×ÚµžâéÓ÷iÞÜØØ$L£ÿ¯˜˜DŒÕSˆµµµdܸ6L˜@HÈ µô‘uëfÅÞ½êÙd¨iÓß9rd45j”ÂÞ~5“&’””ªò~4­{÷Ú„„Ü 2R=k¯B…ràBåÊ۵]ž­>'7o>£bÅ"RÇ„oÊ\Wv‚ d ÷ï¿dÀ/š7wçÕ«8¶n@`àê×//u4!‹JNN%8ø:}úxP¡Âÿ6Ì—;w^P»vBBFpéÒ†m¦±>ê0{öîÜyÁš5=µâ÷˜3§ºº:Œå'i+«ÒøøôçÀ+–ggO5šËöíçIMÕÎÑg‚ íLL ˆ‹Óü.æ;W'(È•§OßÒ¬Ù.^|¬ñ ÿ¥T*Y¹òöö«¨S§ŒÚv£ÿ–÷ï“É‘ÃHmí»¸4Áѱn&<`áBM«VbMQAµ %§Oßg̘íT©2Gǵœ8q‡¤$9yòä`âDk®_ŸÎĉíÈ“ÇTê¸*ñüù;† ÛB§NÕèܹºÔq>S§Nœ0qbÿýZê8”-[Å‹»rêÔÿhÚôw¦NÝIÍšÓX¹òqqÙs§YAø^&&’GÌÌŒñòê˰aÍ™0aC‡úhl ÔîÜyAëÖ‹¸xñÛ·ÆÙ¹Fûÿ7…BIbb &&jíG__—Õ«Ð××¥W/RRäjí/;éÖ­÷îEª}Á¢Es³c‡ #G¶dîÜ}té²2Ón"äèX‹ˆˆw:tSê(_èÓ§>½Ùº5”‘#·eÚ"ô·\½úccÊ–Õþ KAGALJŠœÕ«Q³æ üüÎ3ujŽK§NÕÐÑEQA5”J%/>bâÄ@,-§Ð¹ó BCP¾|!ŒŒôQ(”ŒÛ†°°‰8;7ÀØX½š$—+4h3ùòå`öìNRÇIÓ¸qm(V,C‡újÕè‰bÅò0sfGBC'Ñ©Su/¡Fi¸»ïÏR»ú ‚:K[Éd¸¹5gófg§]»%6¬€‡Ç)©£¤©Y³?ðñéÏž=W9rJeÖ+^½ú„ß/œéÖé²'ñW*‚$‚ƒ¯Ó ÁæÍÛG¯^u HÏžuÐ×ו:šEܼùŒ3‚°²šA»vK8~ü6;V£k×Z<{ö–û÷#5ªçÎM`À€†Yª(úѼyÁ\¿þ”Õ«Ô>bèGè±|¹#W®üÍò凥Žó…r2aB;ÂÂ&Ñ·o}<³ƒnÝjt…˜˜ôW©RQöïN§NÕqqñfàÀMDGg®›ƒ½zÕãôé{ܽûBê(iªYó7¼½Ù½û2#Gúe¹é¥K¨V­¤Ô1!Ct§L™2Eê‚ d7nX[[àèXKê8Ò¯_jÔ(…‹‹7‰‰)RÇI—©©!ýû7$4tÓ§wàØ±;Ô­;‹!C|¸sG;G¦‚¦™˜ PhÏ2††z¸»Û±`AV¯>Š£ãZÞ¾WIÛ¡¡hÑbQQ±ìÙ3  •´«*ÿ¿©œf .ýû7ÄÆÆ‚Áƒ½‰ˆx§Ñ¾³¢œ9°¶¶`óæ3ï»Aƒò92 ‹ØÛ¯bÚ´]$'kÿf…::2zô¨ƒŸ_ññÚ1š=-VV¥ñöv& à"cÇúg‰¤aaP*‘|YAÈ(QA­”J%Û¶…Q»öL‚ƒ¯±xqWvïvÅÒ²„ÔÑ„L,"âk×§M›EXYÍ`íÚcT¯^ ÿÁ\¸0™iÓ:@³f ˜4)víªpæÌx jœ¥‹¢ðaQ—ÍäÈaÄܹ¥Ž“a::2–,éFTTÓ¦í’:Î7èѽ{mNú‹9pãÆSš4™GïÞ\½úDêx‚ )==]´ó&‡ƒƒ»v 寿^Ò¼¹ûO^×­;NçÎ+°´,IpðpÊ—×ÞGræ4ÒxŸóæu!oÞôï¿IlФݺÕ"<ü9—.=Öxß¹s›²n]OÜÝíññ9G«V ÐxŽïÕµkMRSøù—:ÊWÕªUšM›úáï ¥ŽóÓΜ¹ÏÁÌÌXê(‚!¢8*‚Úܸñ ›eŒµöí«râÄ8:uª–%¦Šš÷úužž§±µ]NõêÓX¸p?åÊÂ×·?W®LcöìNÔ®]†[·žco¿šnÝÖPºt~ŽË´i²Ìîóß²xqçÏ?bõê’\ÿŒÂ…aîÜNxzžfÿþëRÇÉ==:v¬ÆáãY¿¾/^DÓªÕBVsöì_RÇÉhs!¬råb80‚²e bc³”mÛ¾»„„dÜÄ´i»;¶ ë×÷ÒÚcîÇ5G¥8ý211`ýú^ܾýœéÓwk>@ciYsóÂx{Ÿ•,ƒ] BBF’#‡­Z-dÆZ=ÒÑÌ̘Ž«áåuZ«sÔ©SOÏ>x{ŸÑÊuØ¿ÇÙ³÷©S§ŒÔ1!ÃDqT•‹‹Kb„Z·^@pðpf̰w…ï“ÀÖ­¡tíº†*U&3cÆn 4cÆÞ\»6E‹hذzz:DFÆ0|øVZ¶t'>>‘€6lèMÉ’Ùg³S§î²xñA¦LiO¥JE¥ŽóC¬­-pp°bøð­<{öVê8¦£#£eËJìÛçÆÖ­HI‘Ó±ãr¬­—rèÐ-­¿ „ì&wnS¼½0 !Çoeüø.è>yò†ví–pâÄ]¶léÏ AµúƯB!íñ§L™¸»Û³~ý ‚‚®Hš%+èÞ½6»w_&&&Q² %Jä% ÀW×fLº '§õ¼~'YžoqrªÃÝ»/8sFûoZÖ«WŽE‹˜3g/¥ŽóCbb¹ví)µk—•:Š d˜(Ž ‚ RǎݦI“y^bþ|;ví‘:–‰ÄÅ%p'§õT®<‰±cý16ÖgùrG®_ŸÎªU=hÑ¢â§M¼ärëן nÝYœ}_ê8ßíøñÛèë늑£B¦"Š£‚ ¨Dtô{ÜܶЭÛZ,,ŠsüøXììjhõH A{$$$³{÷úöÝHåÊqsÛ‚B¡`þü.\»6 zccc±ñçë…^»ö„6m3}únú÷oÈÉ“ãhß¾j¶û»û°Î¨7ÆÆÌŸo'uœŸfllÀêÕN\»ö„ öKç‡YZ–ÄË«/ޤL™‚ ´™zõf³m[˜VO9Uˆ•nTÛ÷jÛöO‚‚\yñ"š–-Ó_‡tíÚãtíº†úõËäJ±by4œôÇ|¼)cbb(iŽI“¬©P¡0ÎΞÿÚ$Jø^ffFX[W‘dc¦´T«VŠƒGbeU‡Õ̘¤•ßq½{×#$äF¦™•ââÒ  ðâñã×RÇù.û÷_§AƒòéKE2LGAøiû÷_§aÃy=Ά ½X½Ú‰|ùrHKÐrÉÉ©_gàÀMTª4‘Áƒ7—ÄÌ™¶\½:Í›éܹ:ff_Ž@ŠObÊ”´m»cc}ÍÈ‘-³íIØ’% ý‹µk{¦ùzeFææ¿2eJ{–/?Ì©S÷¤ŽóS~ÿ½0«W÷àäÉqÔ¬ù£GûQ»öL<‹…0eŠM¦]g4==zÔ¦U«J â­Õk™eT©RùY¸Ðž³g'вe%fÎÜCÍšÓY¶ìP¦e'ߢ§—9/1rå2aóæ~ôéSŸaö0iR ¿ÆÆf)‡ßÂÛÛYë×ÕvEŠäfîÜNlØp’ãÇïH'Óú¸1“t3¥ÅÞ¾&û÷G¡PÒ¼ù‚Ïn2HM__—®]­Ø¼ùŒVŽlM‹6ôæÝ»\]}2ÅúåçÏ?$::&MÌ¥Ž"ß%sž¹‚ ¹ÐÐ4m:³gïããÓŸE‹È•+ý‚–}Éå Nœ¸ÃˆÛøóÏIô豎¢9².L& À…ž=ë?ί¶óâE4ýúyâä´+«Òœ81«l}‘‹‹ËfZ¶¬D¯^õ¤Ž£óçwA__7·-™â¢ # þ…éÓ;:‘®]­X±â0Õ«OeîÜ}Y¢,&&†Èå™ó󪫫Ä íX¹²;ÞÞg¨_6II©ìÛçFƒ奎÷S õ¤Ž|Øx¯cGK\]}Ä1ï'hÃÆLi)]ºAA®8:Öbذ- ¼YknöèQ›èè÷ìÚuYê(V° ëÖõäС[lØ ýk¦†„ÜÀ¢8 æ’:Š |QỤ¦*˜;w:­ bÅ¢><šF*HKÐ2 …’3gî3nœ?UªLÆÞ~5·n=cȦ„†N$(È•¾}ëS¨PÆNœvï¾BãÆó¸yóÛ¶ dùrÇl¿tÃÇuF õqw·—:ŽÚäÊeÂÊ•Ý9vì6k×—:ŽJåË—ƒ±cÛ6™ãí}–5¦3iR 癩'?%>>sLMÏë×q¤¦*Ð××#>>1ÓLiým)ŽÌœÙccFŒØ&u”LËÖÖ~c¦´è1i’ ÞÞΜ:uæÍpé’ôK,˜‹Ö­+ãåuJê(ߥjՌӚéÓwsýúS©ã¤K©T²oßuš7¯(uAøn¢8*B†=zô ›%¬]{œY³:âáÑ›}75kN§]»%;vGG+ŽÃáãqumFÉ’ù¾»ÝÐÐ4n<3gîããã̬Y2Õêtúô}ÜÝ0y² •+“:ŽF Ü+«Ò à¥uSUÅØØ€¾}ësîÜæÌéÄÙ³Q¯Þl ÚLxøs©ã B–ñŽ–±ÿ 6mêÇ!MÉ“'[¶ôÇÉ©ƒofÚ´]Èå ©£f ––%qumÆ”);yø0Jê8™RŸ>õ¹{÷gÎÜ—:Jºòçω··3ÿû_;ÜÝ`o¿Š/¢%ËS»v*Tø•µ·¨œ™LÆâÅ]yÿ>‰±c·K'M—°°(N‰y¥Ž"ßMGAøªÔTÓ§ïÆÙÙ ;»š¹RºtöÝüFøàÖ­çÌ™³—ÚµgÒªÕB‚ƒ¯ckkÉ¡C£8qb#F´¤\¹B?Ô¶R©dÅŠÃtʕ‹qäÈh6K7|àA›hÕª½zÕ•:ŽÆèèÈX¶Ì‘ÄÄÜÜ|³Ìú£iÑ××ÅÁÁŠ'Ʋ|¹#wï¾ iÓ89­×š‰!« {@Ë– yÿ>™à`77þÿÍDtuu˜<Ù†+ºãéyš®]×ðîÝ{ Ó~ŸääT©#¤kذæ”+W7·­Yú¸®.+¡ZµRlØpBê(_%“É0 !AA®DDDÓ¤É|BBnH–§wïzìÚu™7oâ%Ëð#òåËÁ²eŽìÚu™mÛ¤Žó¹\ÁÞ½Whß¾ªÔQᇈ⨠ézõ*‡UxyfùrG¦O¾®Ô±‰Ü¿ÿw÷4h0‡¦Mçãï–-+²oŸgÎŒgìØ6üþ{áŸêãíÛxœœÖ3o^0&X³aC/rçK7|$—+0À‹œ9X°À>ÛmFU @NV­êAHÈMÖ¬ÉZë¦EWW ‰§gÞ¼‰£]»Åt“'ïJO² Ÿ³tî¼’jÕJ²gÏ0J•ÊŸæã:t¨ÊîÝ®<|EëÖ‹¸sç…†“þ˜¤$í-ŽêééàînÏåËñò:#uœL©oßú9}ú¯_Çcm-¦Ô ™“(Ž ‚¦‹Ó¼ùž?&(h:ˆ»€ÙÑ£G¯XºôM›Î§~ýÙÿìÜ[ž]»†rþü$&M²¡J•â*é+<ü9­Z-"<<‚€€!8;7ÈvÅ¿o™={/×®=eíÚžY~ÑôXY•f̘ÖÌž½‡óçJG#d2ÍšýAPÐ0¶oŒŽŽvv«hÓfÜ£­á¥¦*˜81Ñ£·ãâÒ„õë{‘#‡áWŸS±böíNf´k·˜ƒoj(mÖenþ+..M˜5+ˆçÏÅftß«U«JäÍ›/¯ÓRGÉSSC.´gÙ²nøøœÃÖv™Æ »¦¦†téR/¯Ó’¯ú#FŽlIÅŠE0ÀK’ârZüý/P«V È)uAø!¢8*ÂvíºLÇŽË©\¹ÁÁÃ17ÿUêH‚=þŽU«ŽÒªÕBjמɺuÇ©^½þþƒ¹xq Ó§w zõR*-\îÛw k륔(‘—XZ–PYÛYEHÈ V­:ʬYz„nf7xpc6¬@ÿþ^¼~'uªS§ Û¶ dï^7 ÌEïÞ4i2ŸÀÀK¤¦Šu!£¢£ßãè¸_ßs¬ZÕƒQ£Zeø{-_¾lß>ˆví,èÕk+VVsÚ¬ÏÕµ… çfÌ?©£d:úúºôèQ_ßs$&¦H'Ãlm- N||2Í›»³ÿuöß«W]ž>}Ë¡C™ï‡®®K—våÑ£W,_.ýñ':ú={ö\ÅήºÔQᇉ⨠ŸYºôƒmfÀ€†lÜØ;ÛŽNËn^¿ŽÃÓó4íÛ/£Fi,]zsóÂlÝ:€+W¦2{v'j×.ƒŽŽêGr.\x€~ý ÿýš¡C}±³«] ©ãHN&“±tiWôõuqqñΖ›£XXÇã7GŽŒæ÷ß ãêêóÏèî³Z½¾  hƒû÷_ÒºõbîÝ‹dçÎ!X[Wùî6ôõuqw·cÊ”öÌ™³o­ž¾®í ôpw·ãèÑÛ\”:N¦Óµ«±±‰ìÚuù³ÿW*•ܺ¥½ú•)S€½{‡Ñ¼ùôé³Q£ÓìK•ÊOƒåñôürÄí£G¯ˆ×Îá?*^æòåÇôí[_¢tšõøñkV¬8ŒŸßyòä1¥ÿ†tï^ñ÷"hŽR©äÕ«8¶m cÖ¬=,\hÏóçïxõ*–K—ciY’™3;JšñèÑÛ èE¹r¿²~}/•L=~ül¢téülØÐ‹‚s© 鉎~½ýjòæÍAéÒøõ×_xüø^^§9qb… åúæÒRš81ÀÀ‹?>–¼ysH'SqqñæîÝ„„Œ$))ÿóŒ凉‰÷ïÏ•:Þ7\d̘íT¨PˆÕ«(R$·Úû ¹A¯^œ:5ŽR¥òsöì_¸»ïçÌ™û>.’-GÕ¸ñ<êÖ-Ë´i$é_Tà‚(Ž ‚@Lslôë IDATL"ÎΞ\¹ò˜µk{R¿~y©# j’˜˜Âá÷ ¼Ä‘#á(J6¬@ûö4o^Qc…”ÄÄ ØÄéÓ÷X¿¾ ˆ¿¹ëןҢ…;zz:ÁÒ²$cÆlg×®KOw“ìÌÓó4'àííLƒåQ*•¬\y„™3÷ðüù"‰jÖ‹ѬYsŒÍ›Ï`h¨O¿~õéÕ«.¹r™HMÈ¢""ÞѹóJ<ˆBOOç³åtuuÐÕ•¡T~¸ ;p`#&N´V[–ÄÄŒŒôÓýùêÕǘ93ˆNª1wng ôTÖ÷ÇQ89­'..‰ûðçŸÅ~8çÏ*\Ø ]”Jr¹ü³u õHJJÅÞ¾& Ú«-LjO¢qãyXY•fÉ’®RÇÉT.^|L»v‹qp¨É¾}׈Müô¾g–ïÂû÷_âììIdd K–t¥iÓßÕÚŸB¡ÄÊj:eÊäåËnÝzŽŽŽ …B‰Ÿß êÖ-«ÖþUáÖ­ç´jµéÓméÑ£¶Æû¿pá!ÖÖK9rd4*hw1Y¾â‚˜V/ÙÜ›7ñt¿þzÉÎCEa4 JMUpôèm\]}ùóÏI °‰˜˜fδåêÕ©xzö¡}ûª+Œ¾ŸL·nk¸|ù1;v …ÑìßJ¥’öí—²bÅaüýÏãí}ww{QMGÏžuhÛöO\\¼¹}û9ŽŽk™={ï§Ÿ‡‡kïtBu(T(“'Ûpþü$zö¬Ãš5Ç©Qc:3gî!**VêxBô믿ðþ}2ÀëÞÊå ’“åÿL“•Q«Vµåx÷î=-Z¸§¹±Krr*Æù2sfãÇ·cÑ"•FáÃÝ={Ü07ÿ•öí—x)ÍÇùùgøð­*íû¿:w®Žžžî?¯}êÎ|œþ¯ª UÉÔÔ)SÚãï‹K'ÓÀÇç,2™ ?¿óDG'|zße2Y¦Y“úßÓìœÖ3uꮯN³OkJ|FEG¿gÕª#¼}ûžãÇo|(˜Êd2Þ¼‰ÿá¶5é÷ß Ó¿CfÍ âÅ‹h÷ïãsŽêÕK‰Â¨é‰‘£‚EEÅbg·ŠÄĶo¤‘é+‚f(JΟÈΗ ºÂÛ·ï©Zµ866Ui×®  šI’+!!™nÝÖò÷߯ñ÷LÉ’ù$É¡êÖŃQŸþ­£#COO‡šÌžÝYÂdÚ/>>‰Fæñúu,©©ŠORzzº¸º6cĈ'”N\\›6fÍšcÄÆ&âàP“S´hÆŽ÷©© ôôĽtá뎻M×®k¾ú·nÍÄÌÌX-ÜÄ®]—ùóÏbìÞíúii˜—/céÓǃ{÷^°j•UPKÿÉå fÎ bÍšã ܘ±cÛ|Z¯ûîÝ4løazó† ½iÕª’Z2lÝÊÈ‘~(éÄòä1áÂ…)jÁú3:w^A\\ûö¹I6UXÛ)•JŽ¿Ãòå‡9{ö/ôôtÒ-$^½:üù3×.âÛ¶…ñ¿ÿíà÷ßMsšý¶ma¸¹maæÌŽôêU7Ãí>zôеk±eK(r¹"ͱ¾¾.“'Ûлw½Ÿþ=4!))•ÆçQ®\A6n죱~ß¼‰§Zµ©ÌÛ™ÎÅfLB¦&FŽ BvMÇŽËIM•è" £ZägîYݸñŒéÓwS£Æ4:tXFhèœröìx‚‚†Ñ·o}QÕBF}V…n…‚ƒoˆÑ3_¡T*ñô}K§N+04ÔgûöA( M±Lø\JŠœéÓwóêUüQ$ÃÏû믗lÜx’Ñ£ýXºôQQ±tìXÙ³;1bDKjÖüMòõårÎÎ^ܽÉŽ¢0ú_[¶„ræÌ__L}T(”$&¦°uk(††zT¯^JŒ ù—·oãéÛw#ÞÞgQ(”iÞXxý:ŽÎ«KþšžžÅéÙ³.E‹æa×®Ë,ZÂíÛ”*•?Íï”9¶¶Ë9sæ>qqI4hP^üý éúåSöî½–æÏôõui×΂ÆÍUÞï›7ñ88¬"))øpÃäÂ…G$$$3v¬?•*eëÖþ.ü‹ÊûþšŠ‹P·nYÖ¬9Æ®]—9{ö>—/ÿMjê‡VJŠ‚Ç_Ó®]•÷ýË/&lÜxš„„ä4nd¤ÇêÕ=04ÔÞâh¾|9‰ŠŠÅÃã$ݺÕÂÐPµË dùòå¤ví²ìÜyé‹ó‡ÿjÛ¶ Å‹çÑP2Õɓǔ.]ªóèÑ+fÎÜCbb µk—aÀ/>|ýÏx¾‰½½Õ7ÿNttd´ný'Þülé´Wºtµ¯yªJÅŠå!"â6œÀѱ¶Ê—ù¯”9..Þ89Õ¡Ní_›U¾á¹9*ÙLTT,]º¬$gN#üýeº)6YUdd4¶¶ËY»ö8›6ùæãŸ?ǪUGiÞ|õêÍÆÛû,›³gÏ0ΞÀ˜1­µjíŸ ¸xñ‘(Œ¦#(è2ryÚ£ärÅ?Ó4÷нû:S4œN;ݺõœ?þ˜ÀÑ£·¿zQ¨««Cpðu &ÓnúúºØÙÕàØ±±¬^íÄ£G¯hÑÂGǵ„…=øì±;w^ú4pݺ㌱-Ý¿SAhÓæO þ%Ízjª+«ßÔÒïØ±þÄÆ&ñï{#2¬Ys kk ¼½%»9R­Z)‚ƒ‡—DpðO…Q€ÔT9{ö\eÏõŒòªS§ ºº_^êéëëÒ³g]µâU¥Q£Z‘’¢`éÒCRGÑZµj•fÆÞÿ«Ó¾y%“Á›7qš ¦BÆÆ,ZäÀÂ…öøúžcÍš£œ8q÷ÓçI.—óòe,Æùf¨=33#üýS¤È/Ÿ–ßø¯ÔT9¯^e¾×lüø¶$&¦²bÅaµ÷p‘èèzô¨£ö¾ADqT²‘˜˜DìíW!“ÉðõíOîܦRG€3gîÓ¤É<®^}ÀÕ«Oˆ‰Iüâq¯_Çáéyšöí—Q½ú4–-;DåÊÅðóÄ… “™6­U«–ÐtüoZ±â0[·†âåÕWFÓ͵kϾºœ‚žÞ‡“wGÇZZ= R“J—.ði-°´ )JöìÉÞSëÓ¢£#£mÛ? ÉæÍýˆO¢}ûeØÚ.çèÑÛ¬ZuäÓã?ìÜ{ž7uê¦}éééàâÒ$Í©õJ¥’š5K«¼Ï={®²wïÕÏŠŽðÿªÜ¹ñSKÕ¨B\\"/_ÆÞ ëÑ£·ñúµê‹0µj•I³O…B‰³sC•÷§¹s›2rd Ö­;ΣG¯¤Ž£µš41gÅŠîè¤óU¨§§›) }ÿegWƒ]»†²xqÈ?KI‘sàÀ <AÓ´ójZ•’Ë °‰ëןáíí̯¿jvÝ-áK±±‰ôêåÁ¬Y{Ë•Ÿmœ £#cÆôí»‘Ê•'2j”úúz,[æÈµkÓY¹²;Íšý‘îT mÍàÁ›0 ¶¶–RÇÑZAAWÒ<É×ÓÓ!W.#Ö®ubÍ'1Ò;––%8zt ýú5@&“¡«›Ö…¡Œ¤Ë\jÖü ooç6ÀHJóµ”Ëœ:u{ûÕÄÆ~9Â]ÈÞŒŒôqvnøÙ ;==]êÕ+§ò¾ÆŽÝN\\òWG†Êå V®<ÂÁƒ7UÞF ¸™G^}1²õßRRä_g÷nÕŽp/_¾9r|^¨–˸¸4Vi?ꦧ§Ãðá-صër†6‘Ëά˜<Ùæ‹©RI¦Ú\(=[·†~6>=}úxý>Cm–,™ÿÁ óŸ¡·™õ530Ðcüø¶ìØqñÓ¬4U[²ä M›þN¹r…ÔÒ¾ HAG!˜6m7'OÞÅÇÇssíY‡2»  iÓù=žæZ‰r¹‚ëןòæM<³fuäêÕ©xzöÁÆÆ ?¥RÉ A›)[¶ cÆ´–:ŽÖŠŽ~OX؃Ïþtt>ŒmÑ¢'Oþ6mþ”0aæ`d¤ÏĉÖìÚ5„Â…ÓEªTÛº~YQΜFDEÅ"—§]tJM•såÊߨÚ.Ë´‚úôêU÷³›wr¹‚ZµT;¥~÷îË_ÿf‘äcŽQ£¶ñþ½fG;Ÿ:u—(ÊtgüÛèÑ~*ú¬£#Ãʪô§¾õõuiÞüJ—. ²>4¥]»*”-[E‹HEë9;7`øðæŸHSS™~öDDÄ;†ß |}™ ¹\ATTC†ødxI só_Ù¶mºŸ½n±±‰’/Ëñ£Ú´ù“êÕK1uê.•·}öì_„…=ÀÕµ™ÊÛ)‰â¨ dq—X·î8 ŠiÍÚÀßÿ­Z-äùów_]·OGG†½}M¬2å.Û›6áîÝHV®ì¡µSþµÁÁƒ·>+Œêéé#‡«W÷`ݺžbù‹ïT­Z)ŽK¯^õþEúáoO¡Prúôý4×ò¾´~ý‰t—)ø(%EÎÝ»‘´k·„ÈÈh %233ãÏ ¤ÖUÝfLQQ±Œþ4t}}½rak[ /¯¾„†NÒøÍźuËqåÊ4æÎíLíÚ6GÒÑ‘¥ù¨T*IHHfÔ¨ô— øû…ŸÙ!Cšª´}MÑÑ‘áæÖœ]».sï^¤Ôq´Þˆ-éÛ·þ§Â¸R©äåËÌ·~æ¿9|«««óÕsËÔT9‡‡³víñ ·_µj 6mꇞžÎ§©B¡äíÛŒ@ÕFS¦Øú€}û®©´ÝE‹BhР¼¸®²qÅ*YXxøsFŽÜF¿~ °±±:N¶–œœÊ˜1~¸ºú’’’úÍŸe2»w_ÖP:ÕŠŒŒföì=L›Ö!S­k&…½{¯"“É>ý?öî;,Šsíð"½,E¥W,€TÅÞhÔÄÅ’ãgLLrrÒÏ11¦'''Å5öÞbCé XèMŠôÞaaÙïÕDEÊ.³,Ï}]\®ìÌ;;3ïÌ>ó–À@GDG¿Ù³G³Ú€¥ªª„ÿ{NŸÞcc-((4aaé,G'ýZ±woT·&]âñø(,¬ÁÌ™?àáÃê~ˆŽ k×ú‰üp8š05Õ[Ùï¾{­­»Ó?NÄjbùr/œ<ù¤¦~Žï¿“';BEEQlÛï CC ¼úªŽ©©Ÿá¿ÿ]†)Sœ ¢¢99tš†ÇããÚµTœ={GlÛ÷ð 999Œ7r@'3fͶýî;j=ÚŸ~: Ž%«ªvËÑeË%R»ãôéDlÜxðÑëððï° ý©¸¸ÞÞÛðþû³ì×çò–-Ûööœ8ñ1DGˆTI ä(!2jýúýˆ‹{€ë×ßíÖ ±ééé(/§®Jâ–”TíÛoŠþ¯  ßé‹›p6ò§×c<?ü°‹íPÅâÞ½‡˜;÷¿ÿ'FŒ0èUá‹­8¨ªZAGgx¼rÔÔœƒ@ =]·:„¥K—J¤ìððp‰”Û•ôôjlÝ 8p`¶L=,ò÷÷ky(-­CNNÒÒrÐØØŽ††6Ô×ÿõÓÐÐŽ¦¦6´µ=Ýå³Ïü0r$Mú×öööàpÄ›T>|ø0–-[&Ö2{JQQ+ÐØ‹¦¦Û}.O^^N0€Ç«—›.7µÝ.C_{úzÿÄç3ÈȨF||)"#‚Ëí€>þØ[,ñ-]*sðС9R{}åp8°··árƒÉ“¿†¥¥!vî\)ùÀ¤Lo®Ÿ|>ƒU«.¢£C€Ã‡çŠ?¨DýV^^Žôô§{‚0 Ÿ_‡ÔÔ*¤¤T )©`g§‡>šÐ£ãÿêÕ\ìߟŒÿû¿1ðô4[ìâÔÝëÿ¶mñÇ7‘˜øIŸ†ILÌÇìÙ?âĉ`«^—Cˆ”J`§ !D¢ââàüù{Ø¿M·£ÉÉÉÁÁÁA‚‘ .íí|”–*૯棽½ÍÍM¨¬¬…Í_³ö66r;ÍTßÞÎMÁç󡦦Ôïq÷Å7ß\Á‚î½NŒ>6oÞ<‰%ç¤Å™3ù03Sǘ1^泎ȢE‹$¾ }}}±Yꊣ#0s¦'¾ÿþêëÕàë;ðoêËËËQUU%ör 5`h¨##eèéµÁÑÑñ¹Ëòx|ÔÕµ ¶¶ee hjjLJ=5ÜM©©’Eýøñã-ÿEöìÉÀìÙÿ€¡áÛ}.+"¢òòrpvÖ¶¶JÖ=|ø0Ξ=Ûçž§¯÷O..À¢EÂämjj)nÜÈŸ¯ —¾'eþñZ˜™éÀÉéùç2›ÒÒÒº½¬¼¼6ož‚  +«lPΔݛëgLŒ-6l8ŠaÃFBK«ÿz#Iº~{ÖõÉÉ ˜5Køº£C€ääb$$ý´ÿ»ÎÁmß¾hØcøp=¶Cd!A7ÑçNHÿ¡1hÙgii(µ‰ÑÞ——ÃoLÆùó÷ðàAÛá ššª2•í/ÆÆÒ•í­å˽pÿ~!îß/ìñºƒ/¾¸ˆéÓô¤n„¼ˆì\) !àñøøòËËxõÕ ƒ²«aOc#—.%áå—dz !„BdØœ9®°°ÐÇ?†° !¸q#akk„b{¼î¹sw‘•U†÷Þ›)È‘”%D†œ={55MØ´)íPÈ sáÂ=¨ª*!0Ƭ%„BˆäÈËËáÍ7§àìÙ;ÈÏ—üð"„È‚å˽pþü]46r»½ÇÇ×__FPÐ8XYõl BJŽ"CvíŠÀ¼ynàp4Ù… 2™ðñ±†’’Û¡B!DÆÍ™ã 33=j=JH7Í›ç.—‡˜˜ìn¯³woJKë°eËT FFˆt ä(!2"66))Åöc;2È0 ƒ›7s0~¼%Û¡B!dPT”ÇoLÆ©S xø°šíp‘z::êpw·ÀõëiÝZ¾ºº ß ¯¿>&&²1ö*!]¡ä(!2âøñÛðô´„““)Û¡HDmm-¾úê+ÖÊinnƶmÛú¼}Y”“Sªª&xxŒdaÛ9Ø·o_¿o·?=yÌ666bûöíÏ\ŽŽÑî£údà£}(>lÔ£T¯É¶÷Ï‚î05ÕÁάÅ@dß¹sçpûöíNuÕ“uXOêP¶Ï™À@ܸ‘Þ­e¿üò† QÆÆ“$!Ò’£„È€Ahh:æÌqe;‰©¯¯Çž={ºµìš5k——×çržÔØØˆ?þ¸Çë Çû²°Ðï÷mgddà·ß~ë÷íJÚ“Çð“Çl}}=>ýôÓg®CÇh÷Q}2ðÑ>ŸþªG©^“=lïEEy¬ZåƒcÇn£©©µ8ÈÀÖÕ5Nœ8ØØØNuÕ“uXOêP¶Ï??[”—×#=½´ËåRS‹qäÈ-|ôѨ©)÷St„°‹’£„È€{÷¢ªªI¦'ñ°°@fff·–½rå êëëû\éžÒÒzhk¡›'1zò¦cVü¨>øh:ýnñâŸuëÖSÇð“Ç~wÈÒ1JõÉÀñ¼ó€öáÀ Žz”êµîééµI焇‡cÔ¨QPQQÎ;OK—.Å·ß~+Z¯²²cÆŒA]]Ýsÿ&6÷¦¦,pÇï¿Gƒa˜~Û®´{Q}ö¼ãjÉ’%8{ö, ¸¸£GÆéÓ§¥¥¥puuEmm-;T<ï>îïu=zPSSüyóž™8ý{ö¼:ôyØ:gäääàåe‰„„üç.sáÂ=ܼù[·.€œœ\¿ÄEˆT`!Þœ9?2}tºOe¤¥¥1iiiÝZöÊ•+Œ‰‰ “Í4440sæÌaÖ¯_Ï0 Ô––2òòòÌG}Äæ—_~a0Û·ogóÕW_1VVV=^6//QWW­§¬¬Ì¬]»–ikkcrssmmmæÚµkLmm-cllÌ„……1íííLaa!£¦¦ÆÌŸ?Ÿ‰e233»UÎß•––2DËæää0ZZZLhhh·?ã²²2&,,¬ÛËß|s™™8ñK±•€9tèP·–½pá#''ǼõÖ[Lss3Åhii1'NœèÑñÕÕ1ÝÕ{MMMŒ±±1ó¿ÿýár¹Ì7MMM&&&¦Ë¸ÓÓÓ==½N¿5jòÔ1üä±_XXȨ¨¨<³Lq£ ӳϿ7˜²²²n-KõÉóIº>éIù]´»Ö“ó¡':Ät÷6_\õ¨4×k=ù•#ízzý|^}ÖÕqõöÛo3+W®dFxÞ¨¨¨0+V¬`†a<ÈŒï”o/ IDAT5J"ñöDO¯]ÝÇý½nºw¢Âœ:uŠimme¾ÿþ{óý÷ßwª«ž¬ÃºªCÿN®ÿ¿þÆŒóïg¾×ÔÄeÜÜ>e6o>Üëò  â)9Jˆ °µ}9|øfŸÊèÉÍéÙ³g&%%…aáÍ{mm-Ã0]ô›šš†a˜¬¬,FQQ‘áñx Ã0Ì;w‡ÓãeÿþESRR"ŠÉ××WtbjjÊܽ{—aá—.LqqqËyÒãe+**D¿óòòbΜ9Ó­ÏŒad79úÓO×™qãþ#¶òzšÕÑÑaÚÛÛE¿ûàƒ˜ùóç÷èøêê˜îê½£G2nnnbÚ´i³yóæ.ãî*‰À0áž&úrŒ2Œô%G©>y6iJŽvuÐ>ìš´$GÅQJs½&mÉÑî~¦â:·~ûí7Æ××·S9 .dþýï?uN´µµ1ÚÚÚLRRÃ0 ãááÁìß¿¿Ë¿¥/ûGÉQ†a˜—^ú³|ù®>—#Ízsý|V}ÖÕqʘ™™1 Ã0k×®e6nÜȘ››3 Ã0«W¯fÞÿ}‰ÄÛ=½þuuÇ0ë¦wß}—Y²dI§õ_˜}^úwÒpýˆÈ`Œ73uuÍO½÷É'g‡˜ªªÆ^—OÈOÝê àjk›ÑÐÀŰaºý¶ÍY³faáÂ…ðòò‚¹¹9Þx㧺ب««vßPQQ¢¢¢èÿדeŸdll,zÝÕ²òòò011és9 000èÖ²ƒ‰²²"ÚÛŸßíTÒ,--¡¤¤$ú¿““JKÿh¾;ÇWWÇtWïåçç###¢Ÿ£GvÙýP’dõ¥úDºuç< }(ÝÄQJŠ,}ÎOêÎg*®s«¨¨666¶okk‹ÂÂBÏ eeeÌ;'OžÄƒ’’‚—^z鹇´ìŸÕ«}qãFšh’H"ô¬ú¬«ãÊÛÛõõõÈÊÊBDD6mÚ„ÆÆFäçç#443gÎdëOéµî|oy¬¸¸ŽŽŽ~çàðâ9^T‡>‰ísæñªùùÕ~ŸšZŒ½{£ðÁ³ §7´_c"DPr”®®® ££ÞoÛdß~û-ª««qâÄ p¹Ü.oœÙ&+_¤¤•µ5 ¬Í[UÕù‹PEEtu{ö° «cº«÷455áããƒüüüN?¿þúkÿŽæææ¯CúÕ'OçyÐh>Mõè³P½Ö7â:·455ŸÚÇÕÕÕÐÒÒðô9±hÑ"œ¬¨hĶmì{{ã¬Iˆì’c†a;BHï55µÁÆæ=:´v½.çñÓc{{ûn-ßÖÖ†Û·oƒËåbÔ¨Q044ìõ¶»C  ¶¶zzz/\¶²²wïÞÅØ±c¡££ÓërÄ­¼¼éééð÷÷ï÷mKÚoFmm3îsYrrr8tè–.]Úíu¸\.nÞ¼ ---¸¹¹õj»]Ó/:Þ‹‹‹‘šš SSӧƪzžŽŽÄÅÅÞT?'è| kiiõë1ۛϿ'ÂÃÃaoo‡#‘ò»ƒêɔߛó ·da’;>ŒeË–¡'·ùâ¨G¥µ^ëÍçÑ]=½ê q[ùùùÈÊÊ‚……ÅScþݪU«Àáp°}ûö^o¯;Äýù-[¶JJŠØ·oµXÊ“&â®/$]gKª~ëÍõ©«û¸g]#’““Q^^ŽqãÆASSó©òžuíGÚâ¸þÏžý<=­ðþû³°zõ^¤¦– 4ô] ¢,¾@ X_¼ !Dš ª]]õNãÆôøøøôÛöäåå»ý%ÊÀÀS¦Lés9¤ûfÎtÁÚµûÑØÈ…††j¿o_UU}*£«cúEÇ»©©)LMMEÿ/--Å7ž»¼³³3Fooïg¾ÿ÷c˜ŽYñ¢úD2þ~HíCñG=ª¨¨HõšˆëÜz<ùNW*++ƒ'NàÎ;}Þf ‹7Þ8Œêê&šTæú³Îf[W÷qϺF8;;ÃÙÙù¹å=ëÚ!Ž:´¿(({^¸pW®¤àرõ”%ƒu«'DŒ=÷ï?d; 2ˆùùÙAYY—.%±ŠTPRR‚¾¾þs† Âvˆ„BÈSòòòðùçŸã»ï¾{aëRi4uªTU•pîÜ]¶C!Djñù|p¹<|ðÁ)¼òŠ'¼½Þ¹Nˆ¸QËQBd€——öïa; 2ˆ©¨("(h~û- AAc!/?¸s×××îXn„Bˆ´7nâããÙ£×ÔÔ”1kÖhœ8×^ë¿N„ $µµ-ˆŽÎ†’’">üp6Ûá"¨å(!2`Æ Ö )©íPÈ ¶aC<¨ÀÕ«4!„BØ4÷ï"+«ŒíP‘J••ÈÈ(Å×_/be8,B¤%G ‘úpw·ÀÜd;2ˆ ¦ƒ ÜñÝwWÑÑ!`;B!„ BãÇÄðáz8q"íP‘:åå hllƒ5&N”ÜDr„ 4”%DFûáÔ©”–Ö± Ä6ož‚œœrìÚÁv(„B„äääðÒKî8}: ð!ReË–#¼ýöt¶C!DªPr”1c† LL´ñÕW—Ù… búزe¾ýö >¬f;B!„ B󿹡´´wî° !RãôéD„…eBII..fl‡CˆT¡ä(!2BQQï¿? 'NÄãÖ­\¶Ã!ƒØºuþ07×Ç;ïŸOÝë !¤?0 ƒ’’:¤¤#+« l‡Dk¬­9°±1Â¥KIl‡BˆT()©Ãœ†½½1\]Í¡¢Bssò$:#‘!3f¸ 0Ðo¾yׯ¿ƒ!C”Ù‰ BJJ øá‡%˜3çG|ùå%¼ÿþ,¶C"„™ÓÚÚŽØØˆÍFRR!’’ŠÐØÈ½¯¬lÊbt„°oÆ œ9“ˆ>šÃv(„°ŠalÞ|C!'Œ7‚í‘:Ôr”óÕW‹ÐØÈÅ[o¡q–kœ‡aûö üüs(.^¼Ïv8„"**± –,ù `ùò]Ï„……>úh.\x±±`ëV7´¶f°.!¬š1ÃÕHM-f;BXµ{w$nÝz€íÛƒ‘Q†ñã-Ù‰©C-G ‘1††øå—W±téüüs(6nœÔíuËËË!P7hI©¬¬d;„~µxñ8$%áÍ7ÀÂBNNÝoÅ´lÙ2œ={V‚Ñ6¥§§£ªªŠí0´þªORSSûe;äùòó«põj ®\IF||TU•0i’¶oB@€= Ÿî>¯¦¦X´hQ‡+•þü3òòC$V>Ý?õ^ee%8ŽDÊvr2Åðáz¸|9ŽŽ²Ñ’š®Ÿ¬×§ž^ÿÓÒJ°mÛElÞ<MM\((ÈcìXj9JÈßQr”äãcƒýk&>ÿü"LL´±`û ×ÑÐР{ 300`;„~÷é§s‘›[  _päÈ:Œ=ü…ëõCdäy‚‚‚0|ø‹÷So Æó@$ý9ªªªÒ¾êPUUíô;>_€ÄÄ|\»–ŠTdg—C[{&N´ÇÚµþ°ƒªªR—å>œêÒGÚÛ ¯ïŽŽlÙr ëÖùÁÆÆHlåÓýSß@CCrããNŸîŒ?ÿ¼·ßž&±mô—V'?«~‡Á~}êÉß^]Ý„5k~‡««96m Ć 0mš45Å¿_èäêwKˆÌú׿Nâðá8:´ÞÞÖl‡C©¶¶¬Y³ññyøßÿ^E` Û!BˆTijjCxxBBRqãFjjš1b„¦NuD` #Æ EE «·Z[ÛqêT"vìGnn%üül±aC||lØHXBBæÌù/¢£ßÇÈ‘ƒ7¡F.—‡¥Kw ´´/n¸¹}Šýû×Àßߎåè‘: ”%D†  6m:„ë×SqòäÆuk&Dœx<>Þ{ï$޽…M›ñöÛÓ  @_ô !ƒWQQ-BBRqíZ bcs 03Æ“';bêT'XZ²¢Ìܸ‘†;Ó{{¬[çùóÝ ¤¤ÀvxDîîŸbõjß 5EÈ@Æãñ±rånÜ¿_ˆ'þ{{cìÞ‰_ C|üÇ——c;DB¤ %G ‘u/މ‰Ø·o5<Û¡1¹|9k×îCJÊVhiQò›È®ºº¬\¹TààÁµ5Ê pþü]üóŸ'÷„<%G ,ø|>üð4º‰­[`ÅŠ l‡D1€Á±Ø¾ýO¨©)á7¦à•W¼Nô€§£C€‰¿Ä¢Eãhh Bž’£„ 6ÿýïu|ýõe¼ô’;¶ozጷ„HRMM3~ü1ûöEÃÔTo½5sçºRK*BÈ€Á0 RSKDÝå“’Š ªª??[Lžì€À@GHn6n"^|¾—.%aÇŽpܹSW×áX·.3f¸Ð¼lÞ¼Ÿ`eeˆo¾YÌv(„ˆ]HH*þïÿÁÚšƒß_ }ý¡¢÷މÃöí—÷!ÔÔ”YŒ’©FÉQB£ˆˆL¼þú01ÑÆîÝ«`n®ÇvHd+,¬Á·ß^Á™3wÀáhbÝ:,]êA7q„©TWׂÈÈL„…e ,,àp´0y²¦Lq‚ TTÙ“ôQBB~û-W®$ÃÄDÁÁ~xùåñÐÐPe;4ÒC?üp ‡Å!>þc¶C!Dlx<>¾ùæ ~þù–-óÄÖ­ó¡¬ü×µ§®®þþÛ±yóT¬\I½ é%G ¬ŠŠjü;òò*ñŸÿ,À¢EcÙ‰ÕbÇŽp9%,Y2¯¾êE |B«· KGXXòcÆŒ@@€ìáèh99šXTc×®=z òxåO¬^í m¶C#ÝtïÞC̘ñ=ÂÃÿ #¶Ã!¤ÏÒÒJ°iÓ!<|X­[`ñâqO-³~ý~×âìÙMPP –ï„t’£„ fmmøòË?±sg&N´Ç×_/‡£ÉvX„ ¦¦ÞÄÁƒ±()©C@€V¬ðF@€ÝÜBúEC Mµ54Ô@@€=ìàëkK3›2õõ-8xð&vïŽBuu#fÎ… àâbÆvhäÎÎaóæÉöc;Bz­£C€_~ Å·ß^««9~üqé3œ?o¾y!!ocäH"%d@¡ä(!¸};›7A]] >ÿü%ÌŸïÆvH„ŽývýzöïAdd& 40w®+/{{c¶Ã#„Ègµe<šLÉ‘Z‡sçîbÇŽp¤¦ÃÃÃë×û#0Ðòòt|H«×_ÿõõ-8thÛ¡Ò+99ؼù0RS‹ñî»3°nÿ3ëœÒÒ:Lšô5¶l™ŠÕ«}Yˆ”‡’£„¡––v|þùEìÛ OOKlÛöu;"R¥¸¸ÇÇãÌ™DääTÀÉÉóæ¹aöìÑ03Óe;‚ƒý°hÑX3[ ;vÿú×Idf~A?’…ËåaÇŽpüøclmðãKŸû=­µµ/½ô3†UÁ±cè!ÝCÉQBHg‰‰øðÃSHM-Æk¯ùà­·¦BSSí°é$11§N%àÏ?“PUÕ„Ñ£Í0{¶+fÍ…aÃtØ"ÅRRŠŸÙ:tâD{:ÀÉÉ”¾L’ËÊ*ÃîÝ‘8q"êê*xõU/¬ZåCC ¶C#TÃÓó3œ;· cÇŽ`;Bºåòåd|üñÔÕµ`Ó¦@lØ0ŠŠÏbŠaïCjj1.^Ü =½¡Ï\ŽòJŽBž&08r$_|ñ'å±eË4,YâñÜ 1!láóˆ‹ËÅ… wñçŸI¨®n‚ƒƒ &Mr@` ÜÜÌiŒRB¹'[‡†…e ´´úúC1i’µ%bWUÕ„ýû£± ¸X°ÀÁÁ~4Œ”psû¯½æƒ'± !]JM-Æ'ŸœÅÍ›ðÒKîøàƒÙ/œbÛ¶‹8p gÎl¢:‡ž¡ä(!äùêë[ðõ×WðDZ05ÕÁ?ÿ9³g¦ñ´ˆTâóˆÏÃõëi KGzz)´µ‡ À“&9`âD{J€2ðùÜ»÷™ÏĽ{Z‡ØÁÅÅŒ®eD¢ÚÚ:pâD_øû Ç ?~$Í@M„òòzìÞ…?þˆÇÇ¢Ec±n?,,ôÙMæ  ?Ä;ïLÃk¯ù°Äš›Û°o_4~ý5 <k×ú!8دGáîÙ‰O>9‹mÛbùrj1JHPr”Ò{ÙÙåøßÿnàÌ™Dk#8Ø‹ƒ††*Û¡Òm à #£ ±±Ùˆ‹ËÅÍ›9¨©i†®®:<=­àåe OO+ØØQ+iBúQiiÂÃ3‘…¨¨,ÔÖ6ƒÃÑ%C}}mh&^2 57·áØ±ÛØµ+……5 tĆ ?~$Û¡É´+vCMM ¿ý¶‚íPÈ ÔÒÒŽbñóÏ7ÐÖÆÃêÕ¾X·Î¿GC¿ðùlÝz»vEâË/ƒðÊ+žŒ˜A’£„¾+,¬ÁŽá8~ü6`ñâñxí5oŒaÀrd„ôÜ󒥚šª5j8ÜÝ-àê:nn攘!DŒZ[Ûû‘‘™ KGNNTU•0~üHQB”fß%²ˆÏàÊ•dìØ„„<Œe†õë0sæ(ê•#¿üŠ]»"p÷î¿Ù… "Ø»7[Œ¯\é  «Û³a5š›Ûðúë &&?þ¸3gŽ’PÄ„ *”%„ˆOCGÞ¾}Ñxø°'Úcõj_øøØP‹;2`1 ƒÌÌ2$$äãÎܽ[€ììr ,,ôáê*L˜Ž=ÎÎè[/!Ý$0HM-Fd¤°«ü­[¹èèÀÎÎvðñ±‡‡%TThÒ2x$&æcçÎ\º”##-¼öš–-óèQW[Òµ˜˜ýŒ»w?‡£Åv8DÆee•aÇŽœ:•MMU¬\é•+½{œ„=*–/ߪª&ìß¿..fˆ˜A‰’£„ñ\¿žŠÝ»£“ 33],Y2/¿<ŽnB‰Lhhàâþý‡¸s§@ôS]ÝeeE8;ƒ››9\]‡cÔ(3XXèÓØ¥„>6ðó³…ŸŸ 5Ø“ÖTcÏžH=z °hÑ8¬YãKã’ŠAc#vvïcïÞ×0uªÛáuëV.~ý5 ׯ§bĬ[ç  ±½~àžM›ÃÑÂk`l¬-æˆ Ô(9J‘¬*päÈ-?~µµ- tÀÒ¥˜8Ñ ÔUŒÈŽ‚‚jQ¢ôîÝ$'ÇãCCC&pt4…‹‹œœLamÍ¡¦dP¨©iFtt6¢£… Ñ‚‚j ¢ KøøØÀ××vvÆôçhläâðá8ìÝ…ââZLžìˆà`?xyY±Ú€æí½ óæ¹áí·§± ‘!íí¸t)éѰ 1~üHlØ€À@Ç^÷¢ãñøøòËKøõ×0¼ô’;¾øba·g²'„t%G !ýƒÇããÊ•d>‡¨¨,hbÁ7,\8–Æ#2©½½éé¥HI)Bjj1’“‹–VŠÖÖv())ÀÞÞÎÎÃàèh ''aòTMM™í° é.—‡Û·s)L†¦¦C^^£F ‡ ||l0fŒ= ¤‡ø|._NÆ®]ˆÏƒ““)‚ƒý0ožO½ðúë ©‰‹‚Ù…È€ÂÂ>ÂqC !ìhiiÇñãñؽ;yyUðó³ÅÚµ~ðó³¥ñ|Ÿ£±‘ {û÷±gMÊD^L `žcÇnãêÕ¨©)cñâ±X¾|‚ØZtvt°cG¾ýö*¬¬ ñí·/ÃÙy˜XÊ&„¼%G !Ò‡Ëå!44çÏßÃõë©àñøðñ±Á´iΘ:Õ ÔbŽ ^µµÍHK+EV–0Y*Lš–¡¾¾ÀáhÂÚšƒ‘# `eÅ••!,- ajªÓëÉÈàÒÜ܆›7 &&QQYHO/…‚‚\]Íáë+7ÔÍÍŠŠ4©!ÒD `pãFvíŠDttllŒ°f/.UU%¶Ã“:&lÂnز…&e"Ï–Ÿ_…'âqüx[@ßma%G !G[[¢¢²põj ®^MFUUlm0eŠì0fÌzÊJÈß44´"'§99xð@ø““S¼¼Jðx|€±±6,- ae%LžŽa€#ô1l˜.Í‚,ƒø|’’Š“èèlÄÇ硵µææzðö¶··5&L°†¾þP¶C%„ôQee#öïÁ1¨¯oÅܹ®X»ÖNN¦l‡Æº/¾ø!!© }—íPË·nåŠæAàñø˜:Õ ‹ƒ¿¿­XÆ}RCC+~øáöì‰Âˆøä“¹°ë6!=BÉQBÈÀ$0HLÌÇ•+É IENN45Uáãc‹€;ØÁØX›í0 ‘ZÕ ;»ü©Äiuu@QQÆéÂÜ\ú°°ÐLjú1Âææz4AÀ’™Y&J†ÆÆæ ¡¡††˜0AØ2ÔËË Ã‡ë±&!DBÚÚ:pútvïŽDzz)¼¼¬ì‡É“í+§O'âÍ7àÁƒ¯èáú •–V"Jˆ–”ÔÁÅÅ ‹Åüùî™ï ¥¥¿ÿ…_~ ƒœðöÛÓñÊ+žtüÂ>JŽBdCaa ÂÂ2–Žèèl47·ÁÆÆþþ¶°‡‡‡%TT(‘CHw44pQPP…¼¼*äçW!/¯ùùU((¨FYY=@NNÆÆZ1BþÕ%RÕÕ© 6› kDc†ÆÄd£¢¢ššjðò²Â„ Vðö¶­-ÍhMÈ`Ã0 ¢£³±sg8BC3`n®‡5k|±hѸA7tFJJ1¦Lù‘‘ÿ‚••!Ûá~òða5Μ¹ƒ³gï 3³ ææz˜7Ï óç»ÁÆF2×E.—‡?þˆÅO?]Gk+ÁÁ~X¿ÞššjÙ!¤Ç(9J‘=<·nå"<\˜,MO/…šš2¼¼,1q¢=ìÅ>f!ƒEkkû£„i•(a*|]‰’’:ÂÛ  ˜™ébøp½GÿþõÚÔT‡ºë‹YUU“¨ehtt ª¡¦¦Œ1c,àãcƒ ¬áâ2Lì] !׃ص+'N$@IIË–y`Õ* ¦Ãvhý¢µµÖÖïaçΕ˜1Ã…ípˆUW7áüù{8sæó¡§§ŽÙ³]±`ÜÜÌ!''™ÖÓ­­í8zô6~úé:êë[±j•7^}"tuÕ%²=BH¯Qr”"ûJKë–ÈÈ,DFf¢®®úð÷·…‡‡%<=­`` Áv˜„ xíí((¨F~~>¬FAA5 kPXXƒ‡«ÑÔÔPP‡‘‘ÌÌ„]ö‡ &OÍÍ…ÉSGkÐvóì®ÆF.ââˆZ†fd”AAA£G›ÃÛÛÞÞÖ3Æ‚†> „¼P]] ¼‰={¢P]݈éÓ]°v­ÜÝ-ØMâ<=?ÃË/ÇêÕ¾HM-Æýû…¸s§/¿<þþ4ä@V]Ý„K—’pñâ}ÄÆæ@UU Ó¦9cþ|7øúÚJ´+{mm3~ÿ=ûöE£©© Ë–yâÿþ/††ô}ƒ)EÉQBÈàÂç pïÞC„†¦#22 ÷ï?DG‡ÖÖxzZÂËË VtóBˆÔÖ6ãáCa¢ôqÂô¯äi ÚÛ;JJ 03Ó…™™.† Ó…©©6LMuD¯µ]ËÓ¶¶ÄÇçŠf”¿¿|>{{cQËPOOK΀Òk<.ÜÃÎHJ*„››9Ö®õÇŒ.25&bSSRRŠ”T„#GâPYÙˆÚÚ<ùµøÜ¹M;v‹Q’Þxœ½pá>nÞ̲²"0sæ(L™âUU%‰n¿°°;v„ãèÑ[PQQªUÞX¹Ò›&8$DúQr”2¸57·!>>7o>@ll’’ Áãñaeeø(Q*lYÊáh²*!2aTT4àáÚN-N‹ŠjP\\‡ââZQòT^^šºè §¦¦Ú’§Â×ZZâŸH¡?utpÿ~á3Ê碭­#FˆZ†zyYAO¾pBÄïÖ­\ìÚ«WS`d¤…U«¼ñÊ+žzŒÄˆˆL,Yò›èÿJJ ðù‚§–½wï?ô |€¨ªjÂåËO'DgÍ…À@¨©)Ktû à 6ööí‹ÆÕ«É06ÖÆºuþxùåñ2D²Û&„ˆ %G !äI--íˆÏCllââàÞ½‡àñø°´4µ,õô´‡£Åv¨„ :åå ()&Jÿ ÿ-)©Cuu“hYuu ¦ƒaÃt`b¢SSkÁÄDFFš01Ñ–ø¦ž`™™eˆŽN¢÷\p8Zðñ±Æ„ „¨©éà " ª±wo޽€Á¢Eãì; Çn>`z€€çVUUBnîWýé¹¢¢Z\½šŒ+W’—Ûï Q@8¼ÍÉ“ñØ·/ÙÙåðð°ÄÊ•Þ2×ÒšA‚’£„Ò•––v$$üÕ²ôq²ÔÜ\nnæpw·€»»L]7_B¤ —ËCaaM§ê“ÉÓ’’:QëSÐÖ##- ¦Gë‰×Â䩱±644T%oAA5¢£³D]嫪š ­=žž–ðö¶··5¬­9Û>!„tWc#GŽÜÂÞ½Q(*ªA` #‚ƒý0a‚U·Öß¹3K–Œ—hÚW®$cõêßÑÕW`++CDFþ«£"Ý‘ž^‚+WRpåJ2’“‹ ©©Š‰0c† &M²ï·žII…8räNžL¼ô’;V¬ð†½½q¿lŸ"”%„žhmmGbb>nßÎCbb>îÞ}ˆºº¨ª*aÔ(3Q²ÔÝÝ‚ºc"…ªªšP^^/J––• _—– _סµµ]´¼ºº LMu`d¤cc-ÑkG††š02Ò„žžF·Z‰TT4"&&[4‰Raa ÔÔ”1~üHQWy'§a4!Djñù\¹’Œ;#ŸGGSûaÞ<×çNW\\‹±cÿuDGÿ ::ìÎÔ½hÑ/ˆ‹ËEGÿ©÷äåå0}º3víZÅBdäI|¾ ù¸z5—/'£  Ž¦NuÄ´iΘ0Áºß&TU5áôéD;v é饰·7ƲežX¸p,45ÙMøBÄ‚’£„Ò à '§wî 11 ùÈÎ.Ÿ/€©©ÆŽwws¸ºšÃÙyµ.%d¨¯oAi©0QZ^^ÒÒ: “§¥¥ÂDjCW´¼œœ †B__ÆÆZÐ××€‰‰6†UE}} òòªšZŒÜÜJ())ÀÕÕ>>Öðö¶››9Õ „éÞ½‡Ø¹3þy::C°r¥7–/Ÿ]ÝÎÉÏ­[Ïã×_à  ss]œ:õV‡'ÊÉ©@@À—ÏkTYYÁÁþøàƒY,DFš›Û™…ë×Ó’‚ªª&XZbÚ4gLŸîŒÑ£‡÷ÛDÐÐt=z ¡¡éPWWÁüùîX¼x,\\Ìú%BH¿¡ä(!„ˆ[SSîÞ&KïÜ)@BB¾¨u©“Ó0¸¹ ‡‹‹\\Ì0r¤µ#djmmGyy**Dÿ–”Ô!-­yy•¨¬l—ËÃßï²´µ‡€Ãч#l}j` ##-j€Ãþkd¤%Uã¡BHWJKë°wo4º‰ÖÖv,\8kÖøÂÖÖÍÍm5ê´´´N‚d` Ó§7bøp=ÖbþÏÎa÷Z*(Ècûö…X¶Ì“¥ÈŸ¢¢Z„„¤"$$7oæ€ÇãÃÕu8¦NuÆ´iΰ²2ì·X7o>À™3‰¸t) \xyYañâq˜1ÃEâ³ÝBXCÉQB‘4†a—W…„„|ܹ#슟‘Q uu89™>J–ƒ‹‹,- )aJÈÀç ’RŒèè,DEeãöí\p¹_€ªªF”— [¢VV6Ч¥¥õ¨ªúë_ﯖNªªJ¢ñO·HÕ× GººêÐÓv÷×× uuq~„òLƒÐÐtìÜèè,ÈÉá©VôŠŠ PSSÆñã0j;]”Ïœ¹ƒÿx*¶„„O`b¢ÍJL²ªºº ™ˆˆÈDhh:ª«›0|¸0eŠ#<=­úuˆ™Žâârpùr2®\IAiiììŒ1ožæÍseµU3!„”%„iÁãñ‘‘Q*J–&%"-í¯„©££0aêèh{{ØÚQ÷B$¬¼¼^” ŒÌBYY=†U§§•¨u¨­­ääú¯µwUUS§äiYY}§îý[¢67·uZOUU zzCah¨=½¡¢ƒ¿þÿä{4*!¤/®^MÁk¯íy*ùø˜‚‚\Ó§;÷ºŒ»w DÝýîÝ{†aàä4L” ?~ä ˜ ©¡‹ÊÊÔÔ4£ºº ¨ªjDMMó£Öª½W]Ýyœ>yQ¢ôÉÖ¨ººê04Ô„¾¾ðµ¾¾ 4¨>"DÆ%&`ö캵¬œœäååðóϯ`ÎW Gö´÷Þ;‰#G„ã¢NšäˆÖô{ Qkk;nÝÊExxBCÓ‘“S55exyYbâD{øùÙaäHƒ~©¥¥·oç"""7n¤!'§ÚÚC`‡I“0q¢=´µ‡ôkL„’£„"+¸ÈÈ(AZZ)ÒÓKDIÓææ6ÈËËaøp=ØÛÃÆÆ¶¶F°²âÀÚšE¶C'¤Ç¢£³ñÞ{'›[‰eË<ñõ׋º½n^^%""²‘›7sD­[||làëk kèè¨K0úψ¥»ù×Ô“¦ ¢jU•0ÁÚÔÔ¹‹¿²²"ttÔ¡«;ººêÐÕ&OutÔ¡£3äÑ¿Â×ß×ÔTeé¯%„ôÔòå»qýz*äääžšðèYäää '|ýõ",YâÑþ¥¶¶Ÿ£±±ë×ûããçöëö’ììr„…e ,,qqÐÖÖ{{cØÃÏÏãÆì×ûJÄÄ|ÄÄ{|ܹS€Žìí1i’pr'77s·Ÿò"”%„YÆ0 ªE-L33K‘™Y†üü*ðx|((ÈÃÌL66F°±áÀÖÖÖÖXYq0dˆì·”—ÿþ÷¿ˆŽŽf; ™±iÓ&x{{?ó½ââZ|úé9üùç}ÈËËC ÀÅÅ W®¼õÜòêêZˆˆLDFf¢°°C‡ª`ÂkøúÚ°Òºe°ikëuévãoBmm jk›Q[ÛŒêêfÑëšáïÿÞÍ_QQ^”4&R…IT=½¡©O®RwBú—@Àà—_BQRR‹†.**Q^^ššfÔ×·¢£ƒßiyy((È¡½]øûÿoïΣ£¬ýfÍd›„@1,!$A {€¦4ˆ—bAhƒ‡ê¹Ünr].¿ Z¬Ç[ʹrкÔ{KÕÂÕ¦*¢=¥­â…"KTD!$@Y!ûL2™ÉïIbB2à¼_çÌažçûÌó|ŸðÍ|æ» Z£¸¸Ú^­ó©S¡ÊÏÔ!54¨w¯}!S¦Lѽ÷ÞÛíãëê{løzuµ·ýô¢¹:uªJ‘‘!ºñÆáÊÈ®›n®ØØÞ[¼Êíöhÿþ"_úùçr8šßO“'{G{¤§'*::¼×êà;p‘ËåVAA¹*Q^^©.ÕáÃ%ÊÏ/“Ëå–Á`ÐàÁQJJê¯ädo`:|ø%$ÄÐ{«K–,ÑæÍ›µpáBWåš—••¥M›6)33³ÝþÆÆfmØð¡ž|òïòxZÚ}¸¶ZÍÊÏ_çëÒÖ“¤- ýê«"IÒØ±ƒ[ÃÐá?>þš˜74ÕÕ5¶§íƒÔ¶ç§OŸ}´íw8šÚÃ`0œš~»7jh‡ýmÏù·\9uuª¨¨Uee½NŸ®;§z­^yåUU׸qvEE9{­N--Ò—_F+>¾F‘‘~A/ÉÊÊRff¦6mÚtÁckjzøá·•›{Rÿûÿ»¤ë54x‡Ê·…_]$ƒÁ ±c+#c¸22®×رƒ{­'fKK‹*ÑgŸå);;Oÿüg¾jjêß?BS§&iòdïcà@æpYö0–Åbjí-Ú~¥ÐæfޝTnî)åå•êС}òÉ!½ðÂ'¾^\ÑÑáJLŒQBBŒ¢•˜£aÃb4hPT@¯nÝÝ/èZg½üþñúÕ¯ÞTIIµÜnO‡ò¦¦f½ÿþAŸÖÇÒŽGT_ߨøø~ºñÆdýò—7kêÔdÙíÁ½q è!aaA º¨Eæަ.ÃÓ3g¼Ãþ*ñ-JU_ß1±ÛmŠŠ SDD°""B¢ÈÈŽÏ#"BÔ§Oˆï¸Þ^l¸µýlÇÇ÷ëPvèП$…jÓ¦W{½^{÷SLLøUµ°å’%K.xŒÇÓ¢×_ߥßüf«jj’¼¿ÏuçKž¦¦fíÝ{̆æä“ËåVròMžœ¨{ï¡ôôÄ^›§³¦Æ©}û µoß1íÝ[¨œœãªªjPŸ>¡JOOÔƒþ@S¦$)11¦Wê pŽ|Ìf£¢; 1v»=:qâ´òóËuäH©Ž-×Ñ£ezÿýoTZZí{í A}[ÃÒh_x:lXŒú÷·ûãvp+,¬ÐCýY|¨ËyëŒFƒ–-{I¡¡VM™’¬_ÿú‡ºñÆäN?xã»-8تà`«®»®ûÃ<›ššÛ çoæ_]Ý ªªUU9T]Ý #GÊTUÕ êjïö·çQ•¼_< TƒÒiˆznY[Ðj³Yzò­p‘RS‡ø» mïÞczðÁ, u5 ÉdÔœ9côÌ3KXtÍj5«ÿõïqÿ¹\n_PznˆZ]Ý 3gΆ¨gÎ4¨¨èLëqUUÕ«±±¹Ãùl6ËyƒÓo÷\m+³Ûƒ,«•_é@R^^«µkßSVÖn™Lyü0W;vä©¢¢N!úþ÷‡iåÊÙš<9IÇ8Ï._Ûb _]¬¼¯¿.VIIµ ƒ¢•š:D?øÁmš0!^Ç ýàw„£€+¦­7ÖäɉÊJJªUPP¡ãÇ+UPP®ÂÂ íØ‘¯Í›wùæÌ²XL80JC†ôÕÀ}4hP”ï1p`”bbÂ{|%êS§ª$I>úŽÖ¯ÿ«þíß2t÷ÝSÚ£×A{N§Kÿõ_ïÈnÏðí3›2­»~}nî)¹Ý>`áš`³Yd³]|oUÉÛ[¿­·juµCµµÎÖ?ßÚvêØ±JUW;TSsöÑY¸j4ìëznÀnó¯majÛ1Þ)¼ûøÙ®¬;ŽhåÊ?©  ¢ËÑMMníÞ] ‰‡êç?Ÿ¦)S’”’wE~F].·rsOùЊõÍ7'U[ë”Éäª)%%N˖ݨ‘#ã4zô ^›¿.«Õ®:§O×· N¯TQÑ8qZ§NUù>Ü[­æv¡éÀQ¾íÁƒ£c¿èðô¿xUï¾û…oˆšÙl”ÉdÔw¦ëg?ËètEÔ¶Xéò F=ûìK3&]¾Çyy¥:qâ´oa0“ÉœºÝnßßÕ¬ìtŽ5g544µ KkjœíÖª*G‡ò³Ç9ÔÐÐÔéyÂÚõ\ ·),ÌæÛö.Âãí¥ä U½û‚jcA+О~Ë’%KätÕ·ï ½÷Þ2›~Áñm&“Q……ë{,m[°óС9RªÃ‡KuðàIåå•Êår+8ت#b•’§‘#ã”’§#bÌè×V«\}¢¢BÚéâÍÍ:U¥âboXzüøiÖÑ£åÊÎ>¬“'«äryÇb[­fÅÅõé¤×©w»ÿˆüŸi7wWs³GÍͽòÊgúÃ>Õܹã´|ùt]ý¥‡pGŽѧŸ~ª»îºë’Ïq5ª¯¯×ÓO?­_ýêW—q–õéã]Xi‹Ni´üIDATÊ”ä¥m=Žk NËuð ÷ÃZÛkÎ/$Īë%Ï÷ìr¹U[ëô…§ÞiÚz®zÔ¶ µ®®Ñ×{µ®ÎÙúh}BTUåð §7›r»=çrÆ`öï/ê4mnö¨¨è´ +TXX©cÇ*tôh¹o„†Ûí‘ÅbR||?%'ЬY#5|ø%&öWbbŒl6Ë%Ý\ÍGß)&“Qqq}×ç¼áiYY¯×i[€Z\|Fÿüg¾Îœ©ïòümÜ'ŸÖöí5nÜ`¹ÝAêÛ÷üÒ¿K¶mÛ¦åË—û»²XLþ®€n0™Œ­ó•^^XÖÒÒâòߘ¶…ª55Žvájm­7L-*:£úúF54x{°VU9ÔÐÐØå—+maêÙðÔê PÛ¦  Rp°µ]¤ðpïk‚ƒÏ²äĉÓZ¹2K«Ve)#c¸,˜ [nùYìðøñãZ»v­®¿þú?÷ìÙ£µiS†¯Ñ¦M›T_ߨ—_þT/½ô‰JJjd4Î;÷hK‹´}û7ŠŒ >gš"¢¢Ó¾¨‘‘!¾E0/ž¤ÄÄ%'P||?ÚT…pPL&£bc#Ù¡×g]]£’“ìÖyÚz’æä—¡ÐÐf½ûîºí¶±Ýz½Çãѽ÷Þ«?üá²ÙlzàôÐC©²²R‹/ÖìÙ³õøãËåriݺuúæ›oôÊ+¯Èl6ëÉ'ŸÔ~ô#IÒû￯ûî»Oyyy9r¤žþyM˜0A’ôÑGé¾ûîSnn®†ªuëÖiîܹ¾kÜ}÷Ýzä‘GTRR¢… êÅ_”ÉdÒÃ?¬7ª¦¦Fééézíµ×4pà@-^¼XeeeZ¼x±^xáM:µÓ{{á…´fÍUTThÑ¢EzñÅe42Ü@Ï2 =²JÞ/¾êëU]íð…§õõÞùYëë[÷5µ±Nßv[Ö††&Õ×7ª®®Q55Ž.̱Ûm Rp°Ev{pë]ED+8Øû<<üìs»=X!!V™}Ïm6‹ÂÂ¼Ó ™¯ê©<o÷ÑG‡ôᇹ²ZÍš5k¤æÏOUFÆõ—ÂõT[úúë¯ëÁTii©fÍš%·ûlX¾ÿ~ýüç?×Þ½{5xð`=úè£ÊÌÌÔÝwß­ãÇkéÒ¥zê©§4{öìNëx¹m¢ÛmÐ /|¢gŸý@µçÜûùÿmÝú…¶nýBýûÛï @'Mª¡C£[·ûÒ3ZŽЪ¬¬æ‚ÇF57»lѤI :rä õïïÔ­·ŽêöµöìÙ£©S§ª¤¤DûöíÓœ9s”””¤)S¦èÃ?TzzºŠ‹‹µaÃýë¿þ«{ì1•••éñÇׯýkýèG?RQQ‘æÏŸ¯W_}U³fÍÒï~÷;ÝqÇ*((PYY™~øÃê™gžÑücmÛ¶M™™™Ú·oŸ"""”­aÆéàÁƒ*..ÖøñãµdÉy<½üòËÚ¹s§ú÷ï¯;ï¼Sk×®ÕsÏ=§7*;;[7nTZZZ§÷åv»µ{÷nåååéĉJMMÕÒ¥K5mÚ´n¿7ÐÛ,“"#Czlè·ÃѤúzo`z6`mRCƒ7€mhh’Óéò«N§KuuNUTÔ©±ÑÕ:Í@cë~o244¨54 RHˆ7|më­dib H6›wÊ€°0›l6‹BB¬ ?ßóàss_*·Û[§Ó¥¿üå+½óÎ Ò¼yãuûíãõ½ï]ü45=Ñ–~ù嗺뮻´yófÍž=[6lÐ< éÓ§«¾¾^³fÍÒêÕ«µ}ûv}öÙgºýöÛ¯§žzJü±~ÿûß+##ã<÷|ém¢wqÊP†ê“OÞ–dÔ½µ”=žýío+”˜âHÐ „£´:y²ªÃ>“É(ƒÁ;G—ÝnSZZ¢&ONÔ÷¾— ””8™LFßêºÓû%22R=ö˜,‹¦L™¢åË—kóæÍš2eŠ<V­Z%ƒÁ 3fÈl6kÅŠ¾í'žxB’ôÆo(##Ã7×ÙÊ•+e6›åp8´eË7Î7Ûܹs5{öl½ñÆúéOª¦¦&=ú裲Z­:t¨F­êêjY,޹Į͛7Ëårùêl4é;®3¿ýíoeµZ5lØ0¥¤¤¨ºººÛï |[lU¿~a=vÎæfêë½Ó8._OÕ³Ïr:]jhhRmíÙç55N9Mª¬¬óíw8¼ûÛžwÅb1)$$Hv»74m›>Àf3Ÿóülï×¶ç]ß‹·gf]S¯¿¾Küãõë.)Bññ]Oos®žhK7oÞ¬ùóçkþüù’¤ûï¿_/½ô’$é½÷ÞSll¬î¹çIÒÍ7߬»îºKYYYJOO—ÑhTDD„‚‚Î?]Â¥¶‰_~yBÍÍçÓ-²ZÍjjjîÖ룢B F ›GhU^î®f4äñ´¨oß0M𤴴D¥¥%()©¿ †žéA3lذvãÈ‘#õÁø¶CC½‹ Él6û¶Û*9ùìŠî‹E«V­’$µ+“¤áÇëĉ¾íØØ³ 5´wΜ9Ú¾}»ÒÓÓ©™3gjõêÕŠŒŒìÖ}™L&EGGw8/àò˜Í=3Wkgjjr8\r:]ª©qÈéô>¯ªjPcc³œN—ª«ZÃÔöÇ?^)‡Ã¥ÆFWëy¼=a»«-(õR}½Yo¾¹G L¸àk{¢--..VJJJ»óÞpà ’¼ílnn®âãã}e‡ã¼Cè¿írÚÄiÓ®WRR’’êôÜs/j÷îíÚ•¯ìì<8P¤æf¬V“\.O§Ó8””Ô(.®O·¯Œp€Vƒ´hÑD¥§')--Aƒ÷½bת¨¨h·]VV¦¨¨¨‹:Gxx¸ÊÊÊÚí{ë­·4}útÙív}ýõ×íÊ*++Ñå9[ZZôÄOè‰'žÐ¾}ûôÌ3ÏhÁ‚Ú·oßEÕ pí°Ûƒe·÷è9¯»î c±˜är¹ªùóS•“óŽìvW·‚Q©gÚÒ>}úthKÛÎk·Û5uêTmÛ¶ÍWæp8zý‹?»Ý¦éÓGhúô’¼SìÝ{Lÿüg¾>û,O99ÇÔØØ,‹Å¤æfoXZZʨ è.VG Õ¼yãõÔS™Z´hâ F%oo”÷Þ{O’T[[«7v»'J›™3gjëÖ­¾u»víÒwÞ)“ɤ™3gêÿø‡Ž=*I*--Õ›o¾©3ftyÎuëÖ)##Cf³Y“&MÒÒ¥KuòäÉó¿eË–!,çc6›d0H!!Aš?‚þô§_êË/£ßüævÙíÝïq*õL[:}út½þúë:uê”$髯¾Ò'Ÿ|"Iš1c†²³³uðàAIRCCƒRSSõöÛowz®Þjm6‹&ONÔŠ³ôÖ[Ëuøðcz÷Ýû´jÕled —$•–^xu€=Gðƒ´´4ýÇü‡Ö¯_¯Ã‡kܸqúéOªÊÊÊnŸcÚ´iÊÌÌTJJŠÆŒ£Ý»wkýúõ ÓØ±cµbÅ ¥¦¦jâĉڷoŸ-Z¤[o½U%%%ç=çO~ò=ÿüó=z´bbb´gÏ­_¿ÞW£åË—ëé§ŸVjjªî¿ÿ~-[¶L#G޼¬÷ðÝe4ÔÒ"Y,FÝrË(ÍŸ?^7ß}z~.3ƒÁ M›6)33³ÇÏ è=mÃêM&£¦LIÒ‚të­£vþÅ‹.¥=í©¶tÿþý*--Õ¤I“d·ÛÛ•ëÀŠ‹‹ë0?é•t©¿_.ÊzŽà'6›MÓ¦M»ìó$%%)))©Ó²øøøv ItGPP¦NÚiYtt´n¹å–‹­" ÀLš” yóÆë¶Ûƨoß°+vžjKG¥Q£FuZ§¸¸¸Ë¾àêD8 èQ[¶ü»¿«@·° €€D8 ŽH„£á(€€D8 ŽH„£’Ùßà» ++KóæÍów5¸¦Ñžž•••¥… ú»ðG8 @p¹\Z´h‘¿«À5Íßí©ÕzBCÇéÌ™¿ø­€Þehiiiñw%ð··ßÞ§{îyM'O>éïªzÇæG$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@"G$ÂQ‰p@@2û»ô¶ÒÒj=ôЛr:] ·I’Š‹ÏH’~ö³W|Ç9S¯‘#ãôÈ#sýROÀ•E8 8ýûGhÛ¶ý–½ûîí¶ÇŽÜUøÃêéþûo‘Åbºàq·ßžÚ µøá( Í›7N.—»‹# JHˆÖˆ±½V'@ï"¤ääJN ƒ¡ór‹Å … 'ön¥½Šp°-š(“©óÆÍÍ-š7o|/×ЛGë‡?'·»¥Ã~£Ñ Ñ£jȾ~¨ ·ŽÖÀ}4nÜ`íÇÖÝqÇ?Õ Ð[Gmá‰2|kâQ§E·Ý6ÎO5ôÂQ@@»í¶±í¶FƒÒÒî§z á(  EE…jòäDg?"/\Èz„£€€wÇÕÒâ]˜Éh4jöìÑ~® 7ŽÞ­·Ž’Åb’$MŸ>Báá6?×ÐÌþ®’ät:U[[ë·ë§¤ PNN‘fÎLVyy¹ßêí·k@ !\ª««uðàA¿]?--F99EŠŽvéÀ~«GFF†ß® †ppUñW8˜žÞ¬ææpÍœy³_®_ZZê×psŽ Éj5kÕªÙþ® ŽÐ*$Äêï*zá(€€D8 ŽH„£á(€€D8 À°lÙ2ø»€.ŽplÛ¶MÕÕÕþ®  „£€kÖû￯””Y­V?^{öìñ•ýßÿýŸe6›«õë×ûÊ~øaEGG+((HÓ¦MSQQQ·Êöï߯ɓ'Ëf³)99Y›7o–$•••iÖ¬YzõÕW©Q£F©¬¬L‹/Vvvv/¼€KA8 ¸&iþüùZ»v­ª««µ`ÁÝqÇjiiQmm­î¾ûn=þøãª¯¯×o¼¡|PåååúÛßþ¦—_~Y;wîTEE…ìv»Ö®]+I]–Õ××kÖ¬YÊÌÌTuuµ6lØ _üâÚ±c‡ššš”­-[¶è¯ý«>øàõë×O7nTZZš?ß&@Ìþ®—â7ÞPFF†æÍ›'IZ¹r¥Ìf³‡¬V«vìØ¡ñãÇK’d±XT]]-§Ó)IjllTxx¸6oÞ,—Ë%I]–½÷Þ{ŠÕ=÷Ü#Iºùæ›u×]w)++K+V¬ÃáгÏ>«ë®»N’d4)‹ÅÒ{o ࢎ®I………JNNöm[,­ZµÊ·½wï^=ôÐC:r䈢¢¢äñx$IsæÌÑöíÛ•žž®ÈÈHÍœ9S«W¯Vddd—e………ÊÍÍU||¼ï‡C³gÏ–ä CÛ‚QÀµaõ€kRxx¸ªªªÚí{ë­·T]]­-[¶hõêÕzøá‡uøðaíÞ½[!!!’¤––=ñά¬TVV–œN§,XpÁ2»Ý®©S§ª°°°Ýã¹çž“$ †^¼{@O \“fΜ©­[·ª¬¬L’´k×.Ýyç2™L***Ò 7Ü ©S§Êd2içΪ©©‘$­[·N2›Íš4i’–.]ª“'O^°lÆŒÊÎÎÖÁƒ%I JMMÕÛo¿í‡»ô†Õ®IÓ¦MSff¦RRR4fÌíÞ½[ëׯWXX˜æÎ«5kÖ覛n’Õj•ÅbQBB‚V¬X¡ÿùŸÿÑóÏ?¯Ñ£G+&&F{öìñ­dÿ“Ÿüä¼eIIIZ³fÒÒÒ4qâDåææ*==]‹/ö¨çЉ‰ÑòåËõôÓO+55µWß@÷ZZZZü] JKKuðàAedd\ÔëòòòTPP #FhРA¾ý555úüóϣѣGëĉ:zô¨nºé&566êóÏ?—ÓéÔ˜1cã{]We’T\\¬(..N)))ç­Wyy¹rrr4qâDõéÓçŠÝ?à’í!\= ôû?ØÃœ£á(€€D8 ŽH„£á(€€D8 ŽH„£’Ùßà\}ô‘¿«„£€«BDD„RRRü] @!\l6›l6›¿« Ì9 ŽH„£Òÿl%hÙ¹¡IEND®B`‚bm3.7.0/doc/html/a00235.png0000644000175000017500000000345211365042647013255 0ustar tlktlk‰PNG  IHDRƒ(ÝFIKbKGDÿÿÿ ½§“ßIDATxœíœ_HSmÇ¿sêp´9ËÄd8ûƒ&bÝôO‹œˆA‘QHØMÑMAu!D¤`äMÖQT¢-ÿ¬b¥6QìUL ±¿Ú¦X3•Y6çžïEx^æÜq{Í|ó}>WgÏsžß÷|÷|·óœÃ$ h Zè#üwaHˆ0$‚§7X­V´¶¶.ı~#ôjó CSSrrr~Ë Ž™®¼Â ·³àÏçÎ;>?ìbÍ aHˆ0$D"  ļ„¡ºº/_¾Äû÷ïqãÆùø­|ûö ………^Û‹y CEEš››ÑÓÓƒ’’’ùðɱcÇÐÛÛûKk:\¸pÁk{¾˜þ°èNOž<ÃáXèØ åá—„¡¬¬ «W¯FXXöíÛçaÄívãäÉ“ÐjµˆŠŠBAAÔg6›a0 V«qäÈœ9s=’Õ²X,8qârss¡Õj+W®²³³a·Û‘ ‹Å»ÝŽŒŒ ܼy:ÝÝݲµïÞ½‹¸¸8C¯×£¨¨hVï HJJ‚J¥ÂúõëQ]]-õ=}ú  ÅÆÑÖÖ6«Ötrú›NãöíÛœ¡Ù'¯^½¢J¥¢Éd¢Óédqq1°¸¸˜f³™ …‚§OŸæøø8- ÃÃÃYQQÁ>pÉ’%¬©©¡Óéä¥K—¨T*yëÖ-Y=³ÙÌàà`ž:uŠãããljjbxx8>|ÈÑÑQêõzÖ××srr’6›aaaÌÊÊbss3].—ϺcccT©T¬¬¬äÄÄD»ÝN›ÍF•JE’ÛŸ?¦F£aii)'&&XUUEµZÍžžÚl6j4VVVòÇÌÏÏgLL Ýn·¬Öt³iøëÏùýkÎa8{ö,:äÑ–˜˜(…!""‚“““R_^^³²²˜ŸŸÏýû÷Kín·›z½Þ¯0hµZãyyyÌÎÎ&I®\¹’$N Ìêcbb‚íííÒë©I÷îÏ0”””055Õ£ÎxñâE^¾|™{öì‘Ú'''YXXÈññqY­éä4ñ7…\æ|š@BB‚G[||¼´m0"½Þ°aÑ×ׇµk×Jí …±±±~iÆÆÆ"44Ô£¦Õjqß   ¬X±bÖš*• íííÈÈÈ€Á`@VVÜn·ì˜þþ~°nÝ:Øl6/!!!8wîÔju@ZrøóŸw-ý%""v»Ý£íëׯ3n?ÏsK—.…F£Áðð°Gßèè¨_šÓk A£Ñ̸¯B¡ð«fUUòòò`2™°uëV(•Jèt:Ù1Z­¯_¿öhFxx8BCC½Þ—û÷ï#-- õõõ~kÉiâÏæüÍ––†²²2 ºººðâÅ ©¿¯¯<ðóýÚµkؽ{7ŒF#ªªª044hiiAww·_æúûû¥EÔ÷ïßqýúuÆ9ùèïïG||þÜcÑd·ÛÙÝÝÍÎÎNÖ××Óår166–---²:f³™›6m¢Ëåbcc#[[[év»=êÖÖÖrdd$`‡ƒuuuììì$ùsÒf×ÛÛËÚÚZ¾yóÆ«ïíÛ·¬­­¥Õjõ[k&r éùHÓÔ“0œç':::°k×.Ü»wñññ0™L(**‚Åbñ8ÍLçÓ§O¨¬¬ô¸f÷‡ÁÁA<{öÌgbb"’’’ªù'"3¿ms^@þ[’““QZZŠ‚‚ŒŒŒ ..?†Z­Fdd¤Ïq.— qqqë…„„ÈÖU«Õ×\tð5"XÌëï ‚Åƒƒ@B„A ! aHˆ0$D>tú•wÃ^aؾ};ÊËËâX Œ×½ ÁÿñŸN‚aHˆ0$þ‹ÍL™Ó\³\IEND®B`‚bm3.7.0/doc/html/a00232.md50000644000175000017500000000004011365042647013141 0ustar tlktlk0a9025bc9b72002c25f5a421e57cbce8bm3.7.0/doc/html/a00197.map0000644000175000017500000000030111365042645013241 0ustar tlktlk bm3.7.0/doc/html/a00243.md50000644000175000017500000000004011365042651013136 0ustar tlktlk20a1a535bd33ecbaf009c66bb11618a2bm3.7.0/doc/html/a00120.png0000644000175000017500000000764111365042643013246 0ustar tlktlk‰PNG  IHDR0(y ¦±bKGDÿÿÿ ½§“VIDATxœíœ{PUÕ÷À?x¹Hz%15RAÔ0TRÑHkpÄñ-|DFऔùVDÅfôKÓ, ” Å1™Q,iD‰ñÅ5×x äåõûƒ÷Çåò—Hßý™93ܽ×ÞkuöYgïµG«¶¶¶@ èôên ½ˆ&z,"€ ‚‹vã‚{÷î‘’’Ò¶þE,^¼¸»MèÇïn°µµeذaê…µ ­Ä!Ž=îöŸ84ÐÐPë¤1«§VlN ÚAXXo¾ùfw›Ñ)lÚ´‰Y³fu·ÀÁÁ¡Ér‘=ÀAE0@ÐcL ôXD=ÀA¥Ù×(ÚBPPUUUhii!“Éxýõ×1b………|óÍ7¬]»V£muu5Œ1¢Éí÷ª««YµjU»íkIÿãPQQAhh(©©©hii1uêTÜÜÜH$í¶©%vïÞ««+Ï?ÿ¼ZyÃóÈÊÊâüùóxxxt‰ ‚¶Fuu5Pwèëëckk‹‰‰‰J&!!CCCÆO\\999Mö5dÈ&_xðàgÏžeòäɪ{«+)--åÔ©S,Y²¤Ëuµ—N™mÛ¶Ë—/#—˹{÷.áááXZZrùòeŠ‹‹9tèJ~ÅŠܾ}€ÊÊJ6oÞÌÊ•+©¨¨Pë÷Þ½{øøø°{÷îÙ×X[ËåŒ7ŽÃ‡3|øp À¦M›prrê²wå¶oß®òOCžÇ7øú믻Dÿ“F©¬âÌ™tþøã~w›Òn¾ûî;nÞ¼‰B¡ //øøx<<<¸yó¦JæìÙ³j÷„B¡@¡PG\\œêwIII“:vîÜIVVV—=8‚ƒƒUµ¬¬ŒS§Nu™®Î Sf`~ø!öööªßsçÎ嫯¾âÛo¿eøðájòÌ™3x{{«µ711áôéÓ,\¸PU‰¹¹9ååå²­±þ¶àåå… aaahiiàããÃèÑ£‰ŠŠbþüù²­-tä<ž6ª«kHNÎâÇÓ8yò7ÊËò¬¬žënÓÚ««+cÇŽUýÞ°aÑÑÑMÎüŽóàà`Ö¬YÓbÿùùù¬X±Bóßi:‘K—.©Æô Aƒ8zôh—éê º,6`Àz÷î @^^sçÎê.r~~>®®®$&&ªä]\\ˆˆˆPëãØ±c¸¸¸¨•…‡‡cnn޶¶6&&&ª‹pòäIÌÌÌÐÓÓcéÒ¥|ôÑGœ>}ZM?@\\cÆŒAGG‡ &¨žŠ‘ËåÄÄİk×.Uð066æàÁƒÈd25ù¿þú«Å`ÛZ}k4>ššV­ZEß¾}122"00¨è³gÏæÈ‘#Èd2®_¿Þ¬ß˺¹¹ñÉ'Ÿ¨t( lll(**j·Ý IK»Ë–-?1~ü\\þ‡'.S^þ¨Sú~ÚèׯR©´SúÚµkyyy’’’Bnn.«W¯V“ñóó###ƒ’’|}}‰‹‹ÃÍÍ9sæDMM W®\ÁÃÃGGG<==UE???ŠŠŠðóóãÚµk²aÃUÿ¿ýöË—/ÇÑÑ‘·Þz‹¤¤$€Võ:tgggY½z5 …¢S|Àbbb8xð `õêÕœ?___ .‡”Àþýû0`û÷ïÇÎÎNÕ~Á‚œ={–²²2 nùxçε\@ii)K—.eÏž=”••ÁºuëP(ܺu 777>ÿüs 9r$Ÿ}öjúår9 , €ââb.\È¢E‹š\^¾|™Áƒ7ùÄ[¸p¡FžbÍš5\ºt©YµVß Ï£Þ>©TJnn.'Nœ`×®]DFF¢T*ILL$**ŠØØXŒ›õ[cÙE‹qàÀ•Žˆˆd2™F°n ™™¹ìÞËĉÛqrúœï¿O¢  î:WVV·»ß§äädN:ELL !!!¤§§k<€Û‹··7dÕªUL˜0¥RÉ­[·Ôd²³³)//§ªªŠk×®ñûï¿säÈ>LRRiii( ¶lÙŠ+ˆ‰‰aÚ´ilݺ•ÚÚZ|}}éׯ¾¾¾XZZòèÑ#®^½ Ôå_7nÜÈâÅ‹9}ú4ï¾û.þþþdgg·¨/55•ØØXBBBˆŽŽFOO~ø¡S|¸„LII!++ ¨ 4ddd`nn®&'“ÉèÕ«2™ ©TªJ|2eÊbbbpuuåøñãÌŸ?_m½¯££Ã… ˜0a¦¦¦H¥RŠ‹‹‰ˆˆàÕW_UÍPÖ­[Ǿ}û4쌈ˆ`ÆŒ8;;°víZ´µµ©¨¨@OOOM¶´´ƒNòPç#“É B*•boo··7aaaØÙÙQQQÁ—_~ÉàÁƒyôèQ³~ÓÕÕU“U*•,_¾œôôtÆŽKhh(ï½÷^›m»¿èè«DD\âÏ?óÐÖ–PUUw­ÿMA«!Ü¿_—Ç+//çÑ£Gܽ{—çžëø²¸OŸ>hiiѧOŸÇšÕUUUááᡚq›ššRVVFBB/¾ø¢*ݳdÉ$ J¥}}}Õ„¶¶zh8þ<æææÌ™3€©S§bggGBBNNNÍê«ï§²²===6oÞ¬Úðë :-€ùûû«åÀÂÂÂxûí·yðàÁc÷Q¿Œtuu娱c©Õ÷îÝ›+W®°~ýz²²²044TMSïܹÃÈ‘#U²ZZZ˜ššjèh,'•Jùøã›´ÇØØ˜œœjkkÕ–.\ ;;›qãÆ Ô à°°0.^¼ˆ®®.|ð-Öw333µÁleeE||<½zõbðàÁ@Ë~k,«££Ã¼y󈌌DOO?þøC-_Óÿý¤¤|LL>`âÄíH$ZÔÔÔÍlëƒWK:”È™3éwò]LŸ>/¶¹Í²eËÔr`ñññ­1~žÏ>û¬êïzý¹¹¹ 2DU®­­Ío¼Ñj_ …‚¡C‡ª• :”üüüõMž<™´´4Þÿ}ôõõ±±±ÁÝÝ}}ýöT#º,fccCaaa³;*Máìì̹sçHOOçÞ½{LŸ>]­>**Š7²iÓ&233IMMUÍš øûï¿Õä 5thäsNœ8Aqq±†¬J¥’sçÎiÔD"AWW]]]$ :::èêêªò­Õw„Ƈüü| Ôn˜–üÖXê$‘‘‘„††2þ|úôéÓa[ÿ5j¥¥¥ª´HWóÏ?ÿ´*£§§ÇÇÕÊ[µQOOOã)))iulÔÖÖâååÅÏ?ÿŒŸŸJ¥’­[·¶jçãÒi3°‡ªÃÇÙ±cVVVÈd²ÇNËd2¦M›Æ²eËX°`½z©ÇW¹\Ž¥¥%/¿ü2P—s¨¯¼ò 0pà@’““¹~ýºÆÍéèè¨ÚH022"%%wwwµ'I=}ûöÅÇÇOOOΜ9à /¼ÔåûbccILLdäÈ‘ªÝÅ‹Y´h3fÌPõÑZ}s4ô' á ¨›MÆÄÄàääDii)û÷ïÇËËKC®%¿5…££#999ìÛ·ðððVm­çÙgõ™:Õˆ¯¾Z\^Ðì²9–/™ùó'<¶¾®äÀÀ©Mm***TÁ¡¢¢‚£G2bĈN›m4D[[›²²2Uš£áòµ%^zé%¶oßNQQ2™ŒŒŒ øé§ŸZlgccÃ÷ßONN&&&ò믿²~ýúÛ…‡‡“’’¾}û=z4³gÏfçÎm:×–è´öÚk¯ý§ÚÚØÚÚ6ûUK###¼½½Ù»w/cÆŒQ«suuÅÝÝ={öh´›7oþþþLŸ>¤R)¦¦¦øúúÍܹs3f ãǧ¬¬ŒñãÇ££££Ö‡ƒƒnnn*¹ÔÔT‚ƒƒ›dþþþcee…¥¥%J¥’;wîðÅ_0yò䶺é±i¸ÛuÓ󯻥vvv¬Y³†àà`233±¶¶ÆÓÓ“¼¼<5¹–ü¢¡[*•âììÌ/¿üÂÌ™3ÛeÿsÏõÇËk&^^3ÉÌÌ%*ê*ǧrÿ~!R©ä_™k˜ŠH$XXX°mÛ¶.Ñebb‚……ï¼ófff”””`eeÕj;kkkfÍš…‡‡fffܸqƒ•+WòÌ3ÏпöîÝ‹}ûöUµ377ÇÅÅOOOFMff&Lš4‰‚‚‚fõÍž=›“'O²|ùrd27oÞdåÊ•wÀÿ¡UÛhû­þƒtù’fMM ………ª5²B¡àêÕ«Lœ8‘þýû·©¯’’.]º„‘‘ãÆ#;;›[·naiiɃ¨¬¬¤  €)S¦`aaAhh(“&MRÓðçŸrûöm,,,4ÖöM¡P(HOOG"‘`mm­vqÊ ««Ûl-Õ·Fc?Bݲ!99™~ýú©’ôMÑœß/ÓëYºt)ÆÆÆyÈÖhmü¤¥Ý%**'®PPP¦ÌBBþóÔÌÀ´´´žúVWWsýúu,--Ûô‚«\.'77—aÆadd¤*/**"++‹Q£F¡¯¯Oii©ÚXÏÍÍE.—3hÐ µ\ZKTVV’‘‘R©ÄÜܼ];Ú„††âææ¦VþDØ“àêÕ«Ìœ9“ÈÈH,--ùñÇ &++«ÓÞÅùo@¡P””„»»;iiijÃ㎟æ^dLÐͰN[Bv7ÖÖÖ>|˜ÀÀ@ 077'66V¯6rûömøôÓOÛ¼Ú‚DÒ {û‘ØÛd×®Eœ;—Á!†]¦Oðïä_À n³þý.Aû˜4i©©©OT§ŽŽ6sæŒm]P h„øœŽ@ 豈&z,"€ ‚‹` Ç"˜@ 豈&z,"€ ‚K³ïuÇç?‚§‰;v°cÇŽî6CÐÌÞÞžcÇŽu‡-ÁSƒ¸ž>lmm5Ê4þR z "&z,"€ ‚‹` Çò¿È÷o5|?BSIEND®B`‚bm3.7.0/doc/html/a00110_source.html0000644000175000017500000002043611365042630014776 0ustar tlktlk BitMagic: sample5.cpp Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00118.png0000644000175000017500000001230011365042643013241 0ustar tlktlk‰PNG  IHDR}(M*¡bKGDÿÿÿ ½§“uIDATxœí}TUUúÇ?pïEEÀ+"š/H*ˆDŠ *" 98 š4¨ eR£S£S#ÂR¤,3tÔÔѾ*¾Ôø¢bX¢ ÆBEå5@Þ°8?.—WAmdÖº‹u÷ÞgïïÞ÷œçìçÙû4êëëëA@óI ÁãC}@ èA£/=yó„ÌÌL.\¸ð$´ž"^~ùå'-¡Kìß¿ÿIKºÌСC™8q¢jb}3"""êñŸ.}þ×yÒã'>âÓ///µs[m¦ßH½ØÔ#x"##Y°`Á“–Ñ-¬Zµ ''§'-C x(‚ƒƒ[L1}@ èA£/=aô !Œ¾@ ô „Ñ‚„0ú@ЃhuËfgX·n555hhh T*™5k#FŒ °°íÛ·³bÅ µckkkY»v-#FŒhq«_xx8µµµ¼ýöÛ­¯­ö;BEE$%%¡¡¡Á”)SðòòB&“=´¦¶X¿~=žžž 6L%½i?ÒÓÓIHHÀÛÛû‘htœ“'O’““ÓbÞ!C˜4iìòVÖºº:"""066fæÌ™jù111ÔÕÕáááÑf=¥¥¥=z”W^y¥Síggg“’’‚««k§Ž{š¨©©!..Ž«W¯RYYɈ#pvvF©T>ii¦[fúÿú׿¸téYYYܹs‡½{÷baaÁ¥K—(..fÇŽRù×^{[·nP]]Í?ÿùOÞxã ***TêÍÌÌÄßߟõë×wI_óö;CVVVVVìÚµ‹áÇc``ÀªU«pss{dÏ2IãÓ”¦ý¸~ý:ÿþ÷¿Iû›ªªNœHáêÕì'-å¡(..&??Ÿüü|Nž<ÉÉ“'¥ï%%%”——³sçÎ.·SSSÃÎ;Ù°a•••*yyyy|öÙgìÝ»·ÝzÊÊÊ8zôh§ÛÏÌÌäðáÃ>®+„……µzC}ÜÜ¿___¾üòKôôôÀßþö7ìíí¥ï³gÏfóæÍìܹ“áÇsãÆ )ïĉ,]ºTåxcccŽ;ÆÜ¹s¥´`ffFyyy—´5o¿3,Y²[[["##ÑÐÐÀßߟ1cƃ»»{—´u†®ôã÷Fmm‰‰é<˜Ì‘#?R^^Ixø",-?ii¦é9@@@€”VPPЭí 0€ .0uêT)-..ŽÁƒóàÁƒv4h_~ùe·jzT\¼xñ±^cm†¡¡!ÁÁÁÈå ¦sÁ‚lܸ‘°°0¶oßþ„vŒGÓ700 W¯^üúë¯Ìž=OOOòòòðôô$>>^*?þ|¢¢¢TêØ·oóçÏWIÛ»w/fffÈårŒ¥‹ àÈ‘#Œ9mmm/^ÌòåË9vì˜JûÐàŽ;---lll$¤9YYYÄÆÆ*|###¾øâ 5—î—_~ióÕ^~{4ïG]]o¿ý6zzz²víZ aÖ÷‡?ü={ö T*IMMmuÜš—õòòâã?–ÚÈÏÏÇÖÖ–¢¢¢‡ÖÝ”ää;|ðÁ׌ÿóço!:úåå•íøpôèQ<==quu%44Tò322Xºt)...,Z´ˆS§NµYÏôéÓ9sæŒJÚ™3g˜>}ºJÚ©S§X°`NNNÌ;—¯¾ú hþãÿ ¤¤„ÀÀ@Nž<‰——®®®¬[·ŽºººÛ®¯¯gÓ¦MüñÄÝ݈ˆ6lØ@ll¬T®¼¼???rssÛíã?ü€··7ÎÎÎøúúJ›Õ«WSTTÄêÕ«¹rå ?þø#>>>8;;óꫯröìYŠŠŠX¾|9ß~û-nnnܹs§EýÕÕÕ*;Jvv6/^$ @2øx{{ãîîNmmm‹:ZÓœ››Ë»ï¾«R×êÕ«IKKãÊ•+lܸQkn{T·ýØØX¾øâ ¶mÛÆ»ï¾KBB@CL¼ñ$ݺu+lݺ;;;éx¾ýö[ÊÊÊ€WòöíÛ8::JeJKKY¼x1}ôeeeDEEñÞ{ŸOFF^^^|úé§0jÔ(>ùä TÚÏÊÊÂÃÊ‹‹™;w.óæÍk1TséÒ%LLL:t¨ZÞܹsU´AÃìîâÅ‹­ŽQ{ùíÑ´ú ¹¹¹DGGʨªª">>ž˜˜Ž?Ž‘‘Q«ãÖ¼ì¼yóضm›ÔFTTJ¥²K1Ë›7sY¿þ8/¼„›Û§ìÞ}–‚‚†ß¹ººö¡ëý_¢®®ŽëׯÁÎ;‰çÇäÁƒ¬X±‚™3grôèQذa×®]kµ®©S§’””$ÍêóòòÈÍÍÅÚÚZ*S^^Nhh(o¾ù&'NœàÃ?dÛ¶mQYYÉåË—†Ñ•+Wøé§ŸØ³g»víâìÙ³$''·Øö7ÉdDGGÄÞ½{‰‹‹ÃÔÔT%d”@]]ƒ j³ùùù|ðÁ¼öÚkÄÆÆ2uêT>üðCêëë ¤_¿~baaAaa!+W®äå—_æØ±cøùù±fÍîÞ½Kuu5)))$$$ÊàÁªcNN[¶lÁÇÇ€óçÏãççÇ7ß|Ó¡@jj*ƒÆÐÐP-¯_¿~Ìš5 ™L¦¦£OŸ>­j®ªª"##C¥®»wïR^^NYYGŽASSSëÝ»wwËË0»-¼sáÂÒÓÓã\QQAZZfff*å”J%ššš(•J µµ ½¾¾>“'O&66OOOöïß»»»Êb©––çÎÃÆÆSSS ÅÅÅDEEáââ"Í„ß{ï=6mÚ¤¦3**ŠéÓ§3gÎV¬X\.§¢¢mmm•²¥¥¥èêêvÓu?J¥’uëÖ¡P(°··géÒ¥DFFbggGEEŸþ9&&&TVV¶:n½{÷V)[UU…)))Œ7ŽˆˆÞ|óÍNkËÎ.äСËDE]äçŸE.—QSÓð[÷Cßär9&&& >œ²²2Ñ××—ÎGkkk\]]ùî»ï;vl‹õèêêbiiIbb"ŽŽŽ|÷Ýw888 ©ùÿs8…BAxx8Ï>û,Ð>•Ë唕•©m@¨©©ÁÛÛ[òMMM¥ÉWstttðõõE.—3nÜ8ÜÝÝ9uꄇ‡“——‡¡¡!§OŸæÅ_h³ä¹çž“Bï¼ò 2™Œªª*tttÐÐÐ@GG¹\NBBfffÒBò”)S°³³ãÌ™3¼øâ‹TVVòÎ;ï0`À Á+IJJâ믿æ—_~ÁÍÍððp000 &&†;vàââŸþô§:ÀƒÔìC`` ÊÍ1<<œªè8räH«š›{fÍéÕ«~~~Èår,--qwwç›o¾Qkf'é6£¿fÍ•˜~dd$ùË_¸wï^‡ëh ñxzz²oß>Ö­[§’ß«W/~øáÞÿ}ÒÓÓÑ××—ÜÐÛ·o3jÔ(©¬††¦¦¦jm4/§P(øûßÿÞ¢###rrr¨¯¯W ïœ;wŽ»wïbeeÅ¡C‡HKK#22’óçÏÓ»wo–-[FZZZ›ù]aäÈ‘( 黥¥¥ä6kjjbbb´=nÍËjiiñÒK/qàÀ´µµ¹zõªJ̺-îßÿ³gó06^Æ /!“iPW×àA5ü¶Ø±#ž'R:ÖùGLß¾Ïuk}FϧÜÜ\233UvÒTVVªxÁ-ÑâqttäÌ™3øúúªä+ nܸÁ¶mÛÈÎÎFOO¯Í†²©¶–011Q oŒ1‚ääd”J%666ÄÅÅáââ•+WX¹re»}¬­­eÈ!Rº\.çÏþs‹mçççóÌ3Ϩ¤=óÌ3äååIºû‘’’ÂÇ̰aØ7o666jý277ÇÜÜœââbbccY¶lfff©µ­¯¯¯f BBB¤]‹¯¿þºÊø5êhOs[´4ÖZWè6£ß[[[ )))éð1sæÌaÙ²e¤¤¤™™É´iÓøþûï¥ü˜˜V®\ÉÁƒ™­ö¶Åµk×bllŒµµ5½{÷@&“¡¥¥EïÞ½¥õ ™LÖf~Wh~CÍËËC__P½pÛ·æe¡áæ»|ùrd2îîîôíÛ·ËZ-£­­•••ʵÊÊÊ6 /€½½=Ÿþ9äååñÜsÏñÓO?Iù ìØ±ƒÕ«Wcii‰¦¦&nnn]Ö[\\¬ò½¨¨Hò†œœ8|ø0½zõbâĉRz[}ܳgÚuÚy§­­­¶«­¤¤D*×tÌär9 …‚¢¢"JKK©­­U‹Å7Ò8’ÉdôéÓ§Å2VVVTVV’˜˜ÈäÉ“¤ëúþýû*6¥©Žö47§éB|KcÝš¾ÎÐmFÿ·ß~“û~ûí7‚ƒƒ±´´D©TvxP©T2uêTþú׿âáá¡â®BC<Þ Áml¼©Ìœ9oooBBB8p ‰‰‰¤¦¦ª]<ÎÎÎÒb²¡¡!.\`áÂ…-Þyõôôð÷÷Ç××—'NH®rll,Ç'>>žQ£FIžÃùóç™7ožŠÛÖ^~k4O@m, Ák‰ÅÍÍÒÒR¶nÝÊ’%KÔʵ5n-áììLNN›6mêÐÀF ÐaÊC6o~—¬¬‚VÃ;­áã〻»M‡Û{”lÛæ tÝH¶ÇóÏ?Ï–-[¸sçÆ £²²???-ZÔækutt?~<ëׯÇÁÁAí<ÏÏÏgذaXYYpíÚµ.†Y{bb"“&M¢¼¼œÃ‡Ka>ù䢣£yë­·:ÔÇ矞   ŠŠŠP*•¤¥¥Â×_­Ö¶­­-»wï&''ccc ùþûïyÿý÷ÕÊš››³}ûvRRRˆŽŽfË–-¸ºº2{öl €†EáC‡qãÆ f͚ŦM›Z]»ÒÕÕÅÓÓ“O?ýéš.**"((¨Åë³=Íá¶Æ0rZZÙÙÿ¿m9??Ÿ³gÏ2eÊ***ˆÅÅÅ¥ƒ¿Tët›ÑoŒßAÃ]vâĉ­®6²téR6nܨ·ôôôdáÂ…|ôÑGjǽôÒK¬Y³†iÓ¦¡¥¥…B¡ÀÔÔ”ÀÀ@:ÄìÙ³;v,ãǧ¬¬ŒñãÇ£¥¥¥R‡££#^^^R¹¤¤$ÂÂÂÐÑÑiQëš5k(..ÆÒÒ ªªª¸}û6Ÿ}ö“&Mêì0u˜¦»t Áýn¾ËÈÎÎŽ€€Â¸yó&ÖÖÖøúúò믿ª”kkÜcœMQ(Ì™3‡ÿþ÷¿Ì˜1ã¡ôÜŸ%Kf°dÉ nÞÌ%&æ2û÷'‘]ˆB!ë±qýæ 2–,Y˜1cÈÌÌÄÒÒ²CãîèèHHHH‹k.S¦LaÏž=¼óÎ;( )^¿yófüýýZ¯……›7o櫯¾"++‹gŸ}Vò úô郩©©ØÚÚv¨899áííÍÈ‘#¹~ý:o¼ñ†4£íß¿?7nÄßߟQ£F1þ||}}3f 7oÞÄÑÑ‘ &ŸŸß¢ÞqãÆ1nÜ8îß¿ÏáÇY¾|9»ví"..Žèèh<<ÀÏ?ÿÌ­[·077W‹¹µD~~>)))Èd2¬­­ÑÓÓk±Œ®®®äöu6¿=š#4¸ƒ‰‰‰ôë×OZ¨m‰ÖÆmÚ´i-–_¼x1FFFjë*íÑÞù“œ|‡˜˜d¢£   Lå¾èw3Ó×ÐÐx¬ÿDåÞ½{ܾ}†Þ-u–——“––Fÿþý155%//œœ¬¬¬(--mñîUUU\»v Éûímõ1++‹ÜÜ\†ª²˜ZTTDzz:£G–ÂE¹¹¹dee1hÐ •õ€ŽPWW‡¦¦¦ô÷a(--%==…BÁèÑ£Q(ÔÔÔ “ÉZ ˵¦¹¶¶–ÔÔT á†ÚxóILLä?ÿùááᤦ¦¢¥¥ÅèÑ£Û û5%88###i[m#Åè?._¾ÌŒ38pàÆ!ú¬=à‰¾}ûª=kÐ]<5Fvÿ4.* Ž &””ôXÛÔÒ’ãê:î±¶)üž±²²’á»ñje@ èA£/=aô !Œ¾@ ô „Ñ‚„0ú@ЃF_ z­îÓïÌã¾ÁÓHpp0ÁÁÁOZ†@ðÐxyy©¥©}{{{öíÛ÷X ¿WÄ5 xhé¿þ©½{G O/"¦/=aô !Œ¾@ ô þ“ô$Á‘FIEND®B`‚bm3.7.0/doc/html/a00210.map0000644000175000017500000000027011365042646013231 0ustar tlktlk bm3.7.0/doc/html/functions_0x6e.html0000644000175000017500000001121611365042644015467 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- n -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00200.map0000644000175000017500000000024211365042646013227 0ustar tlktlk bm3.7.0/doc/html/a00232.map0000644000175000017500000000023111365042647013233 0ustar tlktlk bm3.7.0/doc/html/a00092.html0000644000175000017500000010201211365042633013421 0ustar tlktlk BitMagic: bmdef.h File Reference

bmdef.h File Reference

#include <cassert>
Include dependency graph for bmdef.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define BM_x86
#define BM_ASSERT   assert
#define FULL_BLOCK_ADDR   bm::all_set<true>::_block._p
#define IS_VALID_ADDR(addr)   (addr && (addr != FULL_BLOCK_ADDR))
#define IS_FULL_BLOCK(addr)   (addr == FULL_BLOCK_ADDR)
#define IS_EMPTY_BLOCK(addr)   (addr == 0)
#define BMPTR_SETBIT0(ptr)   ( ((bm::id64_t)ptr) | 1 )
#define BMPTR_CLEARBIT0(ptr)   ( ((bm::id64_t)ptr) & ~(bm::id64_t)1 )
#define BMPTR_TESTBIT0(ptr)   ( ((bm::id64_t)ptr) & 1 )
#define BMGAP_PTR(ptr)   ((bm::gap_word_t*)BMPTR_CLEARBIT0(ptr))
#define BMSET_PTRGAP(ptr)   ptr = (bm::word_t*)BMPTR_SETBIT0(ptr)
#define BM_IS_GAP(ptr)   ( BMPTR_TESTBIT0(ptr)!=0 )
#define BMFORCEINLINE   inline
#define BM_SET_MMX_GUARD   sse_empty_guard bm_mmx_guard_;
#define BM_ALIGN16ATTR   __attribute__((aligned(16)))
#define BM_INCWORD_BITCOUNT(cnt, w)   cnt += _mm_popcnt_u32(w);

Define Documentation

#define BM_ALIGN16ATTR   __attribute__((aligned(16)))
#define BM_ASSERT   assert

Definition at line 50 of file bmdef.h.

Referenced by bm::mem_alloc< BA, PA >::alloc_gap_block(), bm::bit_block_any_range(), bm::bit_block_calc_count(), bm::bit_block_calc_count_change(), bm::bit_block_calc_count_range(), bm::bit_convert_to_gap(), bm::bit_count_change32(), bm::bit_count_nonzero_size(), bm::bit_for_each_4(), bm::bit_iblock_make_pcv(), bm::bit_iblock_pcv_stat(), bm::bit_iblock_reduce(), bm::bit_operation_and(), bm::bit_operation_or(), bm::bit_operation_sub(), bm::bit_operation_xor(), bm::bitcmp(), bm::block_range_scan(), bm::globals< T >::bo::bo(), bm::combine_and_sorted(), bm::combine_count_operation_with_block(), bm::bvector< Alloc >::combine_operation(), bm::combine_or(), bm::combine_sub(), bm::combine_xor(), bm::compute_tmatrix_rstat(), bm::bvector< Alloc >::count_range(), bm::iterator_deserializer< BV, SerialIterator >::deserialize(), bm::operation_deserializer< BV >::deserialize(), bm::deserializer< BV, DEC >::deserialize(), bm::deserialize(), bm::deserializer< BV, DEC >::deserialize_gap(), bm::serializer< BV >::encode_bit_interval(), bm::serializer< BV >::encode_gap_block(), bm::export_array(), bm::mem_alloc< BA, PA >::free_gap_block(), bm::bit_out< TEncoder >::gamma(), bm::gap_add_to_bitset_l(), bm::gap_add_value(), bm::gap_and_to_bitset(), bm::gap_bfind(), bm::gap_bit_count_range(), bm::gap_bitset_and_any(), bm::gap_bitset_and_count(), bm::gap_bitset_or_any(), bm::gap_bitset_or_count(), bm::gap_bitset_sub_any(), bm::gap_bitset_sub_count(), bm::gap_bitset_xor_any(), bm::gap_bitset_xor_count(), bm::gap_calc_level(), bm::gap_control_sum(), bm::gap_find_in_block(), bm::gap_init_range_block(), bm::gap_overhead(), bm::gap_set_all(), bm::gap_set_value(), bm::gap_sub_to_bitset(), bm::gap_test(), bm::gap_xor_to_bitset(), bm::bit_grabber< T, BPC >::get(), bm::serial_stream_iterator< DEC >::get_arr_bit(), bm::serial_stream_iterator< DEC >::get_bit(), bm::bvector< Alloc >::get_bit(), bm::serial_stream_iterator< DEC >::get_bit_block(), bm::serial_stream_iterator< DEC >::get_bit_block_AND(), bm::serial_stream_iterator< DEC >::get_bit_block_ASSIGN(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_A(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_AND(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_OR(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_SUB_AB(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_SUB_BA(), bm::serial_stream_iterator< DEC >::get_bit_block_COUNT_XOR(), bm::serial_stream_iterator< DEC >::get_bit_block_OR(), bm::serial_stream_iterator< DEC >::get_bit_block_SUB(), bm::serial_stream_iterator< DEC >::get_bit_block_XOR(), bm::serial_stream_iterator< DEC >::get_gap_block(), bm::bvector< Alloc >::enumerator::go_first(), bm::bvector< Alloc >::enumerator::go_up(), bm::improve_gap_levels(), bm::serial_stream_iterator< DEC >::next(), bm::operation2metric(), bm::bvector< Alloc >::insert_iterator::operator=(), bm::bvector< Alloc >::operator[](), bm::bit_out< TEncoder >::put_bit(), bm::deseriaizer_base< DEC >::read_gap_block(), bm::deseriaizer_base< DEC >::read_id_list(), bm::serializer< BV >::serialize(), bm::bvector< Alloc >::set_bit(), bm::bvector< Alloc >::set_bit_and(), bm::bvector< Alloc >::set_bit_conditional(), bm::set_gap_level(), bm::bvector< Alloc >::set_range(), bm::setop2op(), bm::serial_stream_iterator< DEC >::skip_mono_blocks(), bm::bvector_mini< A >::swap(), bm::tmatrix_reduce(), bm::tmatrix_restore(), bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::transpose(), bm::gap_transpose_engine< GT, BT, BLOCK_SIZE >::trestore(), bm::vect_bit_transpose(), and bm::xor_swap().

#define BM_x86

Definition at line 21 of file bmdef.h.

#define BMFORCEINLINE   inline

Definition at line 110 of file bmdef.h.

#define BMPTR_CLEARBIT0 ( ptr   )     ( ((bm::id64_t)ptr) & ~(bm::id64_t)1 )

Definition at line 75 of file bmdef.h.

#define BMPTR_SETBIT0 ( ptr   )     ( ((bm::id64_t)ptr) | 1 )

Definition at line 74 of file bmdef.h.

#define BMPTR_TESTBIT0 ( ptr   )     ( ((bm::id64_t)ptr) & 1 )

Definition at line 76 of file bmdef.h.

#define BMSET_PTRGAP ( ptr   )     ptr = (bm::word_t*)BMPTR_SETBIT0(ptr)
#define FULL_BLOCK_ADDR   bm::all_set<true>::_block._p
#define IS_FULL_BLOCK ( addr   )     (addr == FULL_BLOCK_ADDR)

Generated on Sun Apr 25 09:37:31 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00108.html0000644000175000017500000002171711365042640013431 0ustar tlktlk BitMagic: sample3.cpp File Reference

sample3.cpp File Reference

#include <stdlib.h>
#include <iostream>
#include "bm.h"
Include dependency graph for sample3.cpp:

Go to the source code of this file.

Functions

void fill_bvector (bm::bvector<> *bv1, bm::bvector<> *bv2)
void print_statistics (const bm::bvector<> &bv)
int main (void)

Variables

const unsigned MAX_VALUE = 1000000

Function Documentation

void fill_bvector ( bm::bvector<> *  bv1,
bm::bvector<> *  bv2 
)
Examples:
sample3.cpp, and sample4.cpp.

Definition at line 49 of file sample3.cpp.

References MAX_VALUE, and bm::bvector< Alloc >::set_bit().

Referenced by main().


Variable Documentation

const unsigned MAX_VALUE = 1000000
Examples:
sample3.cpp, and sample4.cpp.

Definition at line 43 of file sample3.cpp.

Referenced by fill_bvector().


Generated on Sun Apr 25 09:37:36 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00180.md50000644000175000017500000000004011365042644013140 0ustar tlktlk9976b64329179f4524f21561307fa21bbm3.7.0/doc/html/a00202.md50000644000175000017500000000004011365042646013135 0ustar tlktlk928ac4bfbf68fc6351e400df6a7b89d3bm3.7.0/doc/html/a00254.md50000644000175000017500000000004011365042652013141 0ustar tlktlk2f20862f10e006806870c46d7e3dfb8abm3.7.0/doc/html/a00131.map0000644000175000017500000000016711365042631013232 0ustar tlktlk bm3.7.0/doc/html/functions_0x65.html0000644000175000017500000001410311365042644015405 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- e -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00026.html0000644000175000017500000000773411365042652013436 0ustar tlktlk BitMagic: bm::bit_grabber< unsigned short, 16 > Struct Template Reference

bm::bit_grabber< unsigned short, 16 > Struct Template Reference

#include <bmtrans.h>

Static Public Member Functions

static unsigned get (const unsigned short *arr, unsigned j)

Detailed Description

template<>
struct bm::bit_grabber< unsigned short, 16 >

Definition at line 127 of file bmtrans.h.


Member Function Documentation

static unsigned bm::bit_grabber< unsigned short, 16 >::get ( const unsigned short *  arr,
unsigned  j 
) [inline, static]

Definition at line 130 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00246.png0000644000175000017500000001237711365042651013260 0ustar tlktlk‰PNG  IHDRÓˆ}NÞíbKGDÿÿÿ ½§“´IDATxœíÝ{T“÷ýð7Ç]±hTPD&tÅÖy­:B熶Ý~økëeаÙöh/xôˆ¢ž3W/¥µ:W”¹ˆö(§u€lZ•[%B4ÈEF„|~ð33„›á‘$ðy“sòÍ÷É7ŸþøcëÏÊòåËQQQ¡×}ëêê —Ë!—Ë‘””„¤¤$M»¾¾^àJ{g¬ó­·eJˆ:+**°{÷îÑ“¿´eÝ;}ú4V¯^­×}×®]«¹¾|ùr0ø›Ñ`È|3ÞfR«ÕX³f ìììàè舭[·êëë„]»vaìØ±=z4¾øâ üñÄèÑ£áää„äädÍ8 xã7zl=zîîî‰DprrBBB€êÞ¸q#F ‰D‚9sæ@.—kú®^½ŠéÓ§cĈðððÀ‘#GK–,AMM –,Y‚ .ô8öÇTÛÓŒ3”æÛc=-S]åææÂ×׉^^^8~ü¸¦/;;ÞÞÞ°´´„ŸŸ tîODˆEtt´0Güôtl^œ8q‚ÌÌÌ(&&†ZZZèÂ… dooO)))¤P(ÈÜÜœ>øàR«Õ´wï^@ñññ¤V«iûöíäîî®ëøñã´{÷înÛMMM$‘H(==T*?žÌÍÍ©¦¦†ªªªH"‘i]ïÍéÓ§iìØ±TVVFMMM´hÑ"zçwˆˆ¨¹¹™œœœè“O>!•JE999dggGß~û-544““;wŽÚÚÚtÆýá‡(66–<==û¬!**Š¢¢¢z&55•üýýéСC¤R©ºf(Ì·'õ¶L=Yguu5ÙÚÚÒÁƒI¥RQFFYYYQqq1UUU‘­­-¥§§Skk+mÞ¼™\\\H­VÓ¹sçÈÛÛ›Ôj5­X±‚fÍšEÍÍÍ}>÷®ÐͱyÓÈ‘#µfІ (,,Œ ÐZZZJ"‘ˆ=zDDD—/_¦1cÆôëqT*jÚgjYY™^ EFF;–¾ÿþ{"ê\ˆˆ(99™üüü´¦_³f EGGѸq㨨¨HÓ§V«éÔ©S´`Áòòò¢;wR}}}Ÿ5ô'LDDß}÷½þúëôüóÏÓûï¿O•••}Þç1cžo=ém™z²Îýû÷ÓÌ™3µîAqqq´cÇúå/©¹½­­âãã©¥¥…Î;G“&M¢+VT*Õ+HD݇iÀ«ynnn‹ÅšöäÉ“¡P(4mkkkJ$ˆD"M»¿$ 1wî\¸¹¹!,, jµZïš.\ˆˆˆ¼òÊ+pqqÁÚµkÑÐÐÉd(..†«««æ’œœŒÆÆFq.^¼ooo|þùçˆŽŽÆõë׃Q£Fé][W8|ø0ŠŠŠ`kk‹Ù³gcñâÅýº¯±Î·¾ôµL€\.‡‡‡‡Ömžžž¨ªª‚L&Óê‹Åx÷Ýwaee¸~ý:îܹ8qâÄS×ד‡©®®N«]SS#èÂذa6n܈ÒÒRäççkfŒ>ˆ;wîD}}=RRR R©°³³ÃŒ3 “É´.ûöíÓG,C"‘ ¶¶÷îÝC{{»Þ5õ¥££D‘H›~ÝÇXç[_ú³LÙÙÙéLW__{{{ØÚÚê„8-- J¥àêêŠcÇŽaÇŽX·n^ï΀Ã$“ÉpòäIß|ú駘?þSSXXˆ¬¬¬nÛr¹“&MÂŒ3`aa¼¼<455é]ó¶mÛ0{ölˆD"¼ôÒKxã74ïTAAA¸pánܸhmm…¿¿?ÒÓÓuÆ @QQ¶lÙ‚ÔÔT¸»»ã£>ÂíÛ·õ®­«ÜÜ\,Y²/¿ü2ˆ/^ÄáÇ5ý¦8ßúÒŸe*88gΜÁÍ›7wïÞEjj*‚‚‚ŒÌÌLÔÔÔ.]º„eË–ÁÂÂ@çÚ’H$›o¾ ///¼÷Þ{úÍ®º® >í6Ó´iÓh„ 4sæLzî¹çèÕW_¥¶¶6Í6Óceeedmm­iim3­]»–ºmWVV’££#Íœ9“‚‚‚èÕW_%777Z´h‘^ëþUUUäììL>>>Hööö”˜˜¨éß¹s'ÙÙÙQ`` 7Ž^{í5êèè "¢©S§ÒôéÓ©  @gÜ;wîЇ~HÞÞÞ}ÖПm¦””š9s&¥¤¤h¶5» óíI½-S]ëüðÃÉÁÁ‚ƒƒéÇ?þ1­X±Bk>H¥R $;;;úä“Oˆˆ4; +..¦#FÐ?ÿùÏ>Ÿÿ“ ôˆÇŒÌPzòž!Kb}à0©›Ù èü·ÇN¤&T6£µþ‘áŠb½â0©²÷µö×fæÀÍ3 ªˆõ…Ãd„šm¨¹Ö¢s¶3© å_󪞱â0¡›g`n®û¥9P{£÷o óóËLX&#Tz²ju÷_ÿ™[˜¡ü4¯ê#“‘i¸©Bê'÷=hQwÊNîßϰþá0™²îÁ\ÔËq‘(+â^ùƒÁ+Šõ ‡ÉÈ}^ u{ßGxýpŠWõŒÍüu"SÕZû®³ÐþP KëΟòm®nCÍ÷-4R3JÙÞ¯À±Áź¹òÓ÷pnƒ ÿ[ègèRXïø@WÆ„ÂabL &ÆÂabL &ÆÂabL ¼kœ1að®qÆ„ÂabL &ÆÂabL &W^^ŽC‡uÛwÿþ}ÄÇÇhü[·n!11q@c &W\\Œýû÷wÛ§T*ññÇhüŠŠ ìÞ½{@c &ÆÂa2rå§ïá3ÿ˽N£V«±fÍØÙÙÁÑÑ[·nívºÜÜ\øúúB"‘ÀËË Ç×ôeggÃÛÛ–––ðóóCAAÎý‰±±±ˆŽŽÖùå$Æa ‹Q]]´´4lÛ¶ ÇŽÓšæîÝ»X´hÖ­[‡¦¦&lÛ¶ ‘‘‘())\.ÇâÅ‹±eË(•J„‡‡#""B+0D„U«V¡°°[¶lá¿êŸi;888 >>b±?ÿùϱzõj9rÓ¦MÓL“‘‘©S§âw¿ûàW¿úæÏŸ¯¾ú ÖÖÖ˜={6BCCëׯ‡H$ƒ¿3ñ8H)))Éd°¶¶ôçh ø“ipssƒX,Ö´'Ož …B¡5\.‡‡‡‡Ömžžž¨ªª‚L&Óê‹Åx÷Ýwaee¸~ý:îÜéü÷Â'N<«§aò8LC@]]V»¦¦£FÒºÍÎÎNgºúúzØÛÛÃÖÖÚÿ°‘––¥R puuűcǰcǬ[·NgZÖ‰Ã4Èd2œ™*++‘™™iÐZZZpèÐ!ëÏJBBBè‹R©Dmm-jkk‘ììlM»©©IàJ‡ŽañÉ4ýë_ÿBXX˜^÷ ×\OHHÄÄÄR×P6,>™€ˆð—¿ü ,@XX˜æ•¦¦&ÄÆÆ"%% Å©S§°oß>„††"<<gÏžÕŒ“œœŒ­[·öØÎÉÉÁÒ¥Kˆððp$''¨î 44ÁÁÁX·njkk5}7oÞÄêÕ«‚×_999€¸¸8466"..W®\éqìG ¨6¡Ç1uÃ&L%%%°°°@ZZ6mÚ„£GâüùóhooGQQš››‘’’‚ßÿþ÷ؾ};žžŽ×^{ _|ñ…fgggxzzvÛnmmŶmÛ°bÅ œ>}}ôÑØØ¨WÍùùù8uêöìÙƒãÇÃÊÊ _~ù%@¥Raýúõ Â×_˜˜ìÚµ ×®]Cll,ìíí‹I“&錫P(°oß>DEEéUWWß}÷Þ~ûmdee ë` ›Õ<¼õÖ[‰DðññAXXrrràãã"Âoû[˜™™Áßßøõ¯­iÿýï׌óÊ+¯hûd[,cÏž=˜0aÀÉÉ "‘---°´´|êšÛÚÚt¾ó[YYáƒ>@{{; //£FBhh(`êÔ©˜7orss±jÕ*˜™™ÁÆÆ"QçKLDÈÏÏGzz:îܹƒ… bÏž=O]Swf̘©TŠŒŒ 8p!!!X´hßT ›0;V³`À /¼€Ë—ÿ{:øˆ#t.‹aaa¡i÷—X,FII qûömØÙÙa å¿üò˸|ù2V­Z¼øâ‹X¶llllP]]ÊÊJüæ7¿ÑLÿðáCL›6Mgœ«W¯bçÎpqqADDüüü?ê~âĉ˜8q"”J%Nž<‰èèh¸»»cÓ¦M‚>Ž16aR*•ZíÆÆFØÚÚ ú/^ćɓ'ÃÜÜ .Ô{<"ÂÊ•+±råJ”••!55U³êhee…)S¦`ûöíšé>|ØmHD"Äb1qÿþ}ttth½±I­V,,,ð£ýè™<†±6ÛLÕÕÕÈËËйm“™™Ùí»x_JKK‘ŸŸßm»¶¶...˜2e ÌÍÍqíÚ5´¶¶ê]óÑ£G xyyaîܹ¨««øûûãÊ•+¸uë€Î ½ýöÛ¸pá‚Î8'NÄgŸ}†åË—ãüùóXºt)<¨Kÿþ÷¿‡U«Vivö¼ÿþû‚o †Í'Ó¤I“°wï^$''C.—c„ X¸páSoòÍ7ßàúõëøÙÏ~¦Óž>}:>Œµk×B,C$ÁÉÉ {÷îEttôS× bm3.7.0/doc/html/a00247.png0000644000175000017500000001074111365042651013252 0ustar tlktlk‰PNG  IHDR˜ˆ"ºbKGDÿÿÿ ½§“–IDATxœíÝ{PTåÿð7ì® ` ‚á’ ’‚rQQ5Ëq¼ Ö’N„#™M餉†_Í.c˜YJ™›RLÄ µaBEÁùš«!Ár‘…–˹=¿?ü¹µî…]v‹öyÍ0ã³{xösÞžóìÙ³çX0Æሥ¹ O6 áŒpŠÿèeee¸té’9j!O¡PˆÀÀÀ¿`‹Å ýÐO¯~D"‘JžÔ¶`Ñ›Kb¨ÈÈHµÇhF8E#œ¢€NQÀ§(`„S0Â)­‡)ôqçÎäååáõ×_7Q9†kjjBJJ Ö­[§s¹ÞÖªoÿ†‹Å¸{÷®Æç<==±téR“¾ž¹þVFmÁþøãìÙ³ÇTµôJcc#>üð×ëm­úöo¨ÚÚZH¥RH¥RˆÅbˆÅbe»®®Îä¯g®¿•Q[0Ò{±±±Ê¯X±ÌþŸ• FÏÁº»»ñÎ;ïÀÎÎNNNضm ®®áááøä“O0lØ08::bÿþýX³f áââ‚Ç+ûÙ±c–/_®µ™™ wwwX[[#** k×®ÅéÓ§Õê9þ<üüü`ee///œŸutt0Æ+,,dC‡Õëu’’’ØÂ… •íîînæââ¾ÿþ{V^^ά¬¬cŒíÙ³‡…††ªünDDKLLÔYk[[»zõªòñ‡}Þ¾}[¥ÿôôt6lØ0öûï¿3Æknnfõõõ*ueee±—_~™yyy±;w²ººº×/::šEGG÷¸Üŋٲe˘««+[¿~=+++ëñwÒµþºÆÍ"‘HíÃn£·`îîîʶªªª”m€……¬¬¬Àçó•m}•––bÔ¨Qʶ……FŽ©¶œT*UYx𿸼¼\g­VVV¸zõ*fÏž www,X°ÝÝÝjýÏ; ››bccQ__ÈËËÃØ±cñÍ7ß ..7oÞD||<ž~úi½×³'8pàŠŠŠ0hÐ LŸ> .Ôû÷µ­Oãf £V[[«Ò®©©1é À AƒÔÞY=üÃþ“Z=uuu°··×Ykzz:6lØ€„„H$ÀÚÚZ­Ævî܉ºº:¤¥¥¡­­ ‹-XYYA&“A.—£³³Ó¨uÖ¥«« Œ1ðù|ØÚÚêý{ÚÖ¿§q3†Ñ+--Å©S§<8fôÕW_ᥗ^2¸Ÿ«W¯";;[c;<<éééÊ9Q~~>nÞ¼©¶œ9s&~þùg”””x0';vìÂÃÃuÖ*•J1fÌL:<ùùùP(j5&''cúôéàóù˜4i–/_ŽÊÊJ¶.EEEغu+Ž;lÞ¼…6çÏŸÇÒ¥K ÆòòòpàÀc¦©­mý{7£<º5tÄ<==Yhh(svvfsæÌaíííÊ9ØC·oßf666ÊvQQ‘Ê,66–jm¿ñÆÌÑÑ‘…‡‡³àà`æççÇŽ=ª2GbŒ±M›616sæLöÌ3ϰU«VõXkYYsrrb¡¡¡,<<œÍ™3‡¹»»³yóæ©ô_^^΄B!óõõe3fÌ`ööölïÞ½Ǧ²²’mÚ´‰;¶ÇqÔg–––ÆBCCYZZšrû(]c¨kýu›!4ÍÁ,S=³ð‡~@dd¤A'¶µµ!??ööö˜0a‚ñ©„L&Cmm-::: —ËoooˆÅb©-_ZZ ‰D‚çž{Nmn¡­V…BË—/ÃÉÉ ãÆCyy9JJJ0mÚ4•ß¿ÿ>._¾Œ¶¶6øùùÁÉÉIgí]]]àñxF¬½iûÑõ·Ò5núxx¡X,þûÁGShȬ¯2–““Ã*++Ù®]»˜P(TyGDÌOÓì±8’?~üx¤¦¦bÛ¶mËåððð@VV–Ê;"Ò?=€ùóçcþüùæ.ƒˆN×!œ¢€NQÀ§(`„S0Â) ˜º;º;é€@zQéEõÏ(‰vZƒr:Ϳţ¿ü§x™™+é¿D"‘J[í³Hº|“–hØ9àðÞ]@ ~¾Q¿|“ÚL(B(öiQƒ?ÏÔã<øšÙ„§_€û‹ƒÍ\Ñãæ`zºs¦–< Xò,pçŒé¿Vö¤¢€éá¾¢å¿5¡»‹¡»‹¡ü·&ÜWpwÆê“„¦‡»9 ®ß÷ûÿÇH(`zœ’ãÑ„=xŒô„ÖƒVYjþÛ ö7¬¨ùo3Zeæ+ì1AëÁŸÙõ€¥†c‚–ž#:QÀz 9UÖ­þñëfœ¢w“=¡€éÐø×}ÈoÿOuúõä·ÿ‡Æ¿Lsí‰'L‡?ÏÊaÉ×þ‘™%ßž¥É¾.0$™rgOtw2H2)`ºPÀ´¨½ÕŠ¦ŠžwM÷Q{«µ*z<=6ß*êkMí6qÚÿ=D5¿·œ|l”µ5v¢©¢C¼Õ¯eA4œMA´;·¡¶õ9³Öñ8¡]$áŒpŠF8E#œ¢€NQÀ§è0ámÁ§(`„S0Â) áÌ„îܹƒo¿ýÖÜeô+0ê÷Ïìo(`„S0œÛPªäâ†ÔO¨Ò_\.`Ä ÏK$dee!;;„P(Dss3~ùåtvv¢¶¶Ÿþ9ø|>¼¼¼píÚ5Èd2µÛÕïëë ??¿>¬¨ÿ£/Þ@ `È!ZŸ×t#ù;Ú‚NÑ$ŸpŠF8E#œ¢€NQÀ§(`Ðç|0¢ŠF8E#œ¢€NQÀ§(`„S0Â) áMA8E[0Â) áŒpŠF8E#œ¢€NQÀ§(` óÁ G#œ¢€NQÀ§Œú,òÒ¥K(++3e=ýZkÆP€õ¼{f®¤ï…Bö¾f‘HÄük~FØø°6>f¯£/D"‘1aF_üdÆŒHHH0¶Ò%%%ÝÍÁ§(`„S0Â) áŒpŠF8Õ§×h­¨¨Àõë×ÍzéîÖÖV¤§§C$é\®·µêÛ¿¡rrrPUU¥ñ9WWW„……™ôõL¥O·`eeeÈÈÈèË—TÓÒÒ¢×MC{[«¾ýª±±2™ 2™ 999ÈÉÉQ¶ …É_ÏTè*Ó‰E‹)ÿ½cÇ@||¼¹ÊÑ[ŸŒ1†]»váÌ™30`""" …BÄÄDáÈ‘#èììDLL JKK‘ ‡Õ«Wã…^>|wïÞÅúõë5¶ûí7|ñÅËå ƒ½½=Æ‘#GªÔsíÚ5ìÚµ eeepqqALL &Ož¬³VÈÍÍÅþýûQ]] ,^¼¯¼òŠÚúîÛ·™™™hii>øà8::jŸŽŽ•›iõ–©ú1VŸOò‹‹‹ÁãñpüøqlÙ²‡Â… ÐÙÙ‰¢¢"477#-- QQQؾ};pâÄ ,^¼û÷ïWö# 1zôhíªª*$%%áí·ßFFF\]]‘––¦¶+©¯¯Ç† °xñbœ>}111øè£”w@ÓVkkk+’““±jÕ*œ9s›7oÆÞ½{ÑÐРÒAA²²²’’‚“'OÂÚÚÔ8.UUUøòË/m’q¾xñ"bbbŽŽ“ôÙ}¾³µµÅÊ•+Áçóáëë‹  77¾¾¾`ŒáÕW_………üýýÁãñ°dÉeûèÑ£Ê~BBBTúýg;77ÊÇD"Nœ8¡VK^^<<<”ùÉ“'#((ç΃§§§ÖZCBB’’OOO€‹‹ ø|>ZZZ0`ÀeÿííílM¬­­±qãFtvv*ŸgŒ¡  'Nœ@ee%æÎ‹””c‡0uêT 2éé騷ofÍš…yóæÁÉÉÉ$ýë«Ï6lØ0ðù¿ìˆ#PXX¨l8`aa@§l뫺ºÇW¶-,,àâ⢶œL&SY†Žššxzzj­U  ¸¸{÷îEEEììì é¬§àà`bõêÕ°µµE@@^{í5ØÚÚâúõëØ¹s'ÜÜÜ &´Žúðöö†··7qêÔ)ÄÅÅÁÃÃ[¶l1éëèÒç»ÈÆÆF•vCC dÒ×°¶¶VÛ655i\îÑz llltÖš——‡}ûöaÙ²e8xð öìÙ+++µþcxë­·‘‘ÄÄD´··cóæÍ>Ÿ@€††455¡««Ë¨uÖ¥»»ÀãñðÔSOqö:šôyÀª««‘ŸŸàÁ1£ŒŒ ÜD"AAAƶ¿¿?òòò”s¢7n௿þRÛBàÊ•+ÊãKõõõøõ×_áïﯳV™L777Œ7–––¸qãZ[[Õj BitMagic: Data Fields
 

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00160.png0000644000175000017500000020456111365042641013250 0ustar tlktlk‰PNG  IHDR3«Ý:Ü2bKGDÿÿÿ ½§“ IDATxœìÝwxTeÚð{&™LzqN „‘ª²H‘&PA¬ èŠe],« ‚~²®”µŠéEP@—"¡w!=!}2ɤ÷>çûc’PRf’Ü¿ëÊ5ÉÉäœçœƒ1sÏû>¯HDDDDDDDDÝÃy±¦+ """""""j †DDDDDDDÔ­0Ì """"""¢nEWÓÝ3gÎ 33SÓeôj®®®2dˆ¦Ë """¢^HÄ DÔÍž=QQQš.£W‹ŒŒÄ¦M›4]õ>ç92ƒˆº­Ñ£GãwÞÑt½Ò²eË4]õbì™ADDDDDDDÝ Ã """""""êVfQ·Â0ƒˆˆˆˆˆˆˆº†DDDDDDDÔ­0Ì """"""¢n…K³uªª*ìÞ½‘‘‘÷|nnn.ŠŠŠZlóòò‚T*í¬òˆˆˆˆˆº†DD] ²²?üðC«ÂŒ¯¿þç΃žžžzÛÊ•+áîîÞ‰u 3ˆˆ´ŒL&ÿþõ/ 8PÓ¥i%†DÔk¬[·{÷îEee%‚‚‚ðÏþ666€C‡aýúõÈÍÍ…¹¹9¦OŸŽ™3g¢¬¬ |ð°eË444àùçŸGzz:<,\¸£F•+WpäȈÅb8pR©³fÍÂôéÓo©%55+W®DRRììì0wî\Œ=€*ÌpvvFUUôõõ!ß¹½Ñ… °jÕ*Èd2xxx`ñâÅðõõ½k-m©“ˆˆˆˆH±(õ çÎÃþýû±fÍìÙ³†††Ø¸q#U?‹+VàÅ_Äðþûïã›o¾AII péÒ%TTT`Û¶m˜7o>ýôS˜››c×®]˜>}:Ö¯_@5•dïÞ½‹Åعs'>üðCüøã8sæL‹Zjjjðæ›ob̘1øõ×_ñÚk¯aåÊ•ˆEII ªªªðÞ{ïaÊ”)˜0a6mÚtÛsÊÏÏÇ{ggžyûöíÃ>ˆ÷ß‚ ܵ–ÖÖIDDDD¤­fQ¯PWW¨¯¯‡¡¡!Þ}÷]<û쳉D‚5kÖ`ذaH$ppp€®®.*++‚ `Ö¬Y‰D …ŽŽüqõ×UUUêãH¥R<ÿüóJ¥ ÂäÉ“qðàÁµœ:u –––xì±Ç ‘H‚±cÇâèÑ£())A`` þþ÷¿ãÀøì³Ï…èèè[ÎéÈ‘#èß¿?† ©TŠ™3gbÒ¤Iês½[-­©“ˆˆˆˆH[qš õ <ð.^¼ˆ… ÂØØÄœ9s`ll ‰D‚ÄÄD|óÍ7Éd055… -~^__ ‰ ‘H £££þúFŽŽŽÐÕ½þ«ÕÃ×.]jñœÜÜ\dffbæÌ™êmµµµ ƒ»»;V¯^­Þ€1cÆàÔ©Sˆˆˆ¸e?ÎÎÎê¯uuu1kÖ¬VÕÒš:‰ˆˆˆˆ´à "êAÀ‚ °`Á$''cÇŽêé$ÇǺuëðÁ ((b±ãÇ¿¯ã”––¶øº¤¤-¶"88Ÿ~ú©z[mm-D"rrrPWW×båCCC”””Ür,CCC·Øܳ–ÖÔIDDDD¤­8Í„ˆz…Ÿþ¯¾ú*tttàçç‡GyT½'ÜÜÜ ±XŒØØØSGÚ"??'NœTWWcß¾} mñœÐÐP\¹rTAÆóÏ?èèh$''ãõ×_W‡ •••8vì 8~ü8ÒÒÒÔû9yò¤:èˆÇG}¤nz·ZZS'‘¶âÈ "êyäìÝ»óçχ¹¹9ñ /†Š 6à•W^D"®®.°víZ,^¼¸MDZ³³Ãwß}‡­[·ªW%™2eJ‹‘ÎÎΘ?>,X???dff"((£F=zO<ñ¼½½‘ššŠáÇ«¿·zõj<úè£ððð@HHF¹sçÂËË xá…Ô#,îTË… îø=""""¢î@$Ü<1œˆ¨˜={6òòòðÎ;ï´úgêë뺺:x{{ÃÜÜ\ý½ªª*ÄÇÇÞžžP(Ëåèׯ_«÷êÔ)üðÃX³f âââ §§__ß[új4+((@zz:¬­­[L+€ŒŒ ( 8::ÂÉÉé®ÇÍÎÎFnn.\]]akk{ÏZÚZçí,[¶ vvvw\i…ˆˆˆˆ¨çÈ "ê5$ ‚ƒƒoû=CCÃÓ,lmmÕÁ@[éêêÞñ87²¶¶†µµõm¿çææ77·VÏÙÙ¹E#ÐÖÖÒÚ:‰ˆˆˆˆ´ {fu##£{Ž¢è*w«E›ê$""""º™ADÔA‚ƒƒµf¤ÃÝjѦ:‰ˆˆˆˆîGfQ·Â0ƒˆˆˆˆˆˆˆº†DDDDDDDÔ­0Ì """"""¢n…au+ 3ˆˆˆˆˆˆˆ¨[a˜ADDDDDDDÝŠ®¦ "º_‡¡C‡ºèhb˜˜„£¶öêêäíÞ›Db¨¯Ïm×~Œ£¶6³Ýû¹‘‘‘]~L""""" ‚ hº"¢¶:sæ 233»äXÅŵøá‡DääT!2Ò!!ÖíÞç† I€'Ÿô¹ï}46 X·.))e˜?ß¾¾æí®«-\]]1dÈ.=&€ó 3ˆˆîâÀ«øûß7ÃÁÁ ß|3ÞÞ¶²ß… ¬YóD»öS_߈×^ÛŒ_~¹„U«fcâÄŽ(ˆˆˆˆH›ç4"¢Û¨«kÀGíÃwßCdd>üð1èiº¬[H$:øòËHXZaáÂ(*ªÂܹC5]Q§b˜ADt“ììb<ûì÷¸vMU«fcÊ”PM—tW"‘|ð,-°dÉUàµ×ÑtYDDDDD†aÑ ŽMÀÂ…aoo†ƒÃÃÃFÓ%µÚ+¯<++c¼ýövVbéÒÉ‹Eš.‹ˆˆˆˆ¨Ã1Ì " T øâ‹ß±råAL™Š+¦kå´’{™3çXXbáÂ(.®Äþ ‰DGÓeu(†DÔë•”TaÑ¢M8v, Ë–Míö='}´ÌÌ ñôÓëðÔSßá»ïæÁаû3DDDDDw"ÖtDDš#ÃØ±+—ƒ;^êöAF³aÃú`ûö…¸z5?¾%%Uš.‰ˆˆˆˆ¨Ã0Ì ¢^kÇŽó˜0á ¸ºZáàÁÅ uÓtI*8Ø{ö,‚BQ†É“W!/¯LÓ%u†DÔë46*ñÁ{ðòË›0þƒøùççaee¬é²:…§§ öìY„ÆF%&O^…ììbM—DDDDDÔn 3ˆ¨W))©ÂìÙßàÇO`Íš'ðÎ; £Ó³:8˜cçΗad$ÅäÉ«píšBÓ%µKÏþ žˆè rŒ÷o¤¤äaÏžE˜Æÿ—/gbÇŽ…˜3çM—¤U$¬Y3“&…`Þ¼uØ·ï/M—DDDDDÔjºš.€ˆ¨£> ~‚—— 6o~ööfš.I+é舱råLIñâ‹PU5?>HÓeÝà "ê1AÀÚµ‡±|ùo˜:5+V<©”¿æîF$aÙ²)06–âïÿUUu˜;w¨¦Ë"""""º+þ•OD=Bmm^{ígìÝ{ï½7Ï>;\Ó%u+ÿøÇ£06ÖÇ?ÿ¹5xé¥Ñš.‰ˆˆˆˆèŽfQ·§P”cþüuHIÉǦMÏ#"ÂGÓ%uK/½4ÆÆúX²d*+kñÖ[ã4]Ñm1Ì ¢n-6V†§žúR©¿þú*<=m4]R·6wîPHðúë[P^^ƒ¥K'C$iº,""""¢fQ·µÿU,Z´ !!nøöÛ§`ff¨é’z„3ÃÈHŠ… Buu=>ýt:tt¸øi†DÔí‚€Õ«aÅŠß0gÎX¶l*tuùb»#ßúú<÷ܨ¬¬ÅªU³!‘èhº,"""""ÿú'¢n¥¶¶‹Eá³ÏöcéÒÉX¾|:ƒŒN2fL6n|‡Åá™g¾Gmmƒ¦K"""""À0ƒˆº‘üürL›¶ü‹Ÿ~zóæEhº¤/<Ü›7¿ˆ³gÓðÄß ªªNÓ%1Ì ¢î!..ãÆý……Ø·ïU î«é’zÐP7ìØ± rÌœùÊʪ5]õr 3ˆHë<ƒI“¾„‡‡5~ûíïðö¶ÕtI½N@€#vî|2Y1¦M[ƒÂ M—DDDDD½à "ÒjkÖÂüùë1eJ(6mzææ\±DS¼½m±{÷Ë(+«Á”)«‘—Wªé’ˆˆˆˆ¨—b˜ADZ©®®¯¼…åËÃ<†+¦s5 -àâb‰={^Lš´ é鮈ˆˆˆˆz#†D¤u *0}úZ†xé¥()©Ä¼yš.‹ˆˆˆˆz0†DÔ©jk •ÞþWMaaæÏÿ 9øñÇg0j”W×522 ñüó?Þö{g϶ì5±nÝÓÝ.Ì‘H„wßKK#¼óÎ.Ubñâ±·<¯¾¾7žÂ¼yÃ4P%õ 3ˆ¨Óìß?ÿ|?þø D"Q‹ï%$È1wî:ˆÅ"ìÙó |}í5Teç=Ú††RTUÕÞõy††RŒݽ… GÃÂÂo½µ EEUXºt2Äâë÷þÙg¿Çï¿Ç¢W„„¸j°R""""êÎØ3ƒˆ:Eqq%æÏ_ÿý/ÿýï‘ßûßÿâ0qâàèhŽ}û^íÑA ê+1qb$;>G"ÑÁĉ!ÐÓëþsdd¾úêIlÚt /¿¼õõ€Õ«á?TMB—,ÙA4Y&uc 3ˆ¨SüãÛ¡««zñþÉ'¿ª—îüï`Þ¼u˜0![¶¼KËÞÑèsÊ”õ‹úÛ©¯oÄ”)!]XQçzôÑ~ظñYüþ{,ž~z¶m;O>ùU`üõWæ-ýBˆˆˆˆˆZK$ð­1"ê`¿þúž{îGõ W1¬¬Œ1lXìÙs K–LÀ /ŒÐl‘]¬±Q‰ààwQ\\uÛï[XâÊ•¥ÐÑéYóå˙ذá¶m;‹ÆF¥z»X ØÚšâÔ©wïØS…ˆˆˆˆèÎ÷¬¿š‰H㊊*ñÆlklT¢¨¨ûö]ÆúõO÷º P:S§¼íT‰DS§ìqAH¥üòËÅ[¦”(•@~~¾þú¨f #"""¢n­çýåLDõæ›[QYYwˋ׆†F44(‘œœ§¡Ê4oòäÐÛN5©¯oÄäÉ¡¨¨sÉå%˜1㿨«k€Ryë ÀÆF%¾üò(娎ˆˆˆˆº3†DÔaöýû¯Þ±7„R)´èŸÑÛ„„¸ÂÉÉâ–íNN=ne²²üíoÿFii”w|^]]#V¬øµ +#"""¢ž€auˆ‚‚ ¼ñÆÖV=wêÔÕ(.®ì䊴Ӵi-§šH$:˜6m +êŸ}¶ EY‹>·ÓÐЈ-[Î"..§‹*#"""¢ž€auˆ7ßÜŠªªÚ{.·)”X±â·.ªL»Lž< ÅÈÕ“¬¨s,]:¿ü²S§†B"ÑŽŽ"ÑíŸ+‹ñî»;»¶@""""êÖ¸š µÛž=—°`ÁOw 2tuuÐÐÐ//[L˜Ðû[_ôíëÜÅUj#V 99Ч=Ž}KÃu®ÒÒ*lß~ë×GZZ>$[¦"‰D"|ÿýÓxøá UIDDDDÝÈy†DÔ. E9† ûUUµê&b±"‘J¥€à`'ŒßãÆÃÃÃFÃÕj‡µkã“OT}"Þ~ûQ,X0JÃu³gSñã'±oße‚€ÆF%AõoÆÙÙÑÑÿ¼íŠ/DDDDD7`˜ADíóè£ÿÆ¥K™ÐÑC© ‹0dˆ'&Lè±cƒ`gg¦éµNvv1þpöì{pv¾µ)hOWRR…­[Ïáû‘Q±X~½õÖ8¼òÊCš.ˆˆˆˆ´à ¢®pôèQM—Ð)ŽÏÂÚµ¡¡ö<ØØÁÈH¯Íûò÷÷‡]G—@;¯dä@TÔ$ Wr«#FtÊ~£¢¢0{öì[¶ëé9ÃÐ0>€¼¼¯ TÖtJ )22›6mÒtDDDD½Ñy]MW@Ô[X[[wÚ‹uM¨ªªÃ¯¿æàßÿž†ðpèëKî{_±±±XÙíiÛõ_²¤¨áJ®ËËËCAAA§gëÖÛ¯zSYÙ€3gH>ED„}§×Ñ· eˆˆˆˆ¨ë0Ì ê"666°±éY=#>û,RÓ%´š¶]ÿY³†,-4\ÉuJ¥²KÂŒéÓ§ßñ{sçvúá;ÄîÝ»5]Q¯Æ0ƒˆH´)Ä """"ênÄš.€ˆˆˆˆˆˆˆ¨-fQ·Â0ƒˆˆˆˆˆˆˆº†DDDDDDDÔ­0Ì Ò2ÅÅÅøôÓO5]ÝFyy9–/_Þ¡û¼Ûý®¬¬ÄÇÜ¡ÇëNRRRðÃ?tø~{ûu%"""ê fi™ÒÒR¬[·®Ýûyæ™g––ÖQ³ÒÒRüë_ÿêð}Þx¿o¼oåååxï½÷:ôxÝIBB¾úê«ßoo¿®DDDD=à "-ãîîŽÄÄÄvïçÀ(--퀊¨3Ý|¿y߈ˆˆˆˆîa‘–ÉËËÄ Ô_=zýúõƒT*…ŸŸöìÙ£þÞ;ï¼H¥RŒ9ÙÙÙ€3f@¡P`ÆŒˆŽŽ†B¡À#<‚ 6ÀÜÜqqq¸zõ*† }}}øøø **J½ßŸþÞÞÞÐÕÕ…ƒƒ>ûì3@aa!ÆŒƒ•+WÂÑÑ666X¿~=^ýuØØØÀÁÁ›7oî¢+Õyîtþ7Û»w/¼¼¼`hhˆyóæá7ÞÀo¿ýàÎ÷íæ{qäÈõý¾ù¾5ûî»ïàææ###Ì›7J¥²×Ü ¥R‰E‹ÁÔÔ¶¶¶øä“OtÌ¿ÅÛ]W""""ê&"êtGŽrss[õÜ´´4ÁÈÈHAÈÍÍLLL„ï¿ÿ^¨©©vïÞ- ÂGGG!99Y(++&Nœ(¼ð ‚ Bqq±ààà 9rD¨««²²²aòäÉÂÉ“'…¢¢"ÁÁÁAX½zµPSS#:tH055Nœ8!”•• R©Tصk—PSS#üù矂X, … —˱X,¼ûR©Ö®]+–/_.(•JáÓO?¼½½;õúܶìÿn矕•%H¥RAáÚµk‚±±±ðË/¿ÕÕÕÂÇ,èèè?ýôÓ]ïÛÍ÷"11Q}¿o¾or¹\ <÷ÜsBmm­’’"˜™™ ‡î”{‘››+9r¤M?Ó›6mÚò¿½{÷ "‘Hxíµ×„ÊÊJ!::Z033¶mÛÖ®ó¿Ûum­ÈÈH!22²ÕÏ'"""¢uŽ#3ˆ´ØîÝ»‚¹sçB*•bÒ¤I7n¶lÙ‚šš@mm-LLL¥~×ÚÜÜb±æææH$€êêj¬^½<ð~ÿýw888`áÂ…J¥5jæÎ‹mÛ¶AOO'OžÄc=©T OOOH$õÔ¥R‰·Þz "‘cÆŒ®®./^¬þº¼¼\3«ƒÜëü›ýüóÏxøá‡1aÂèëëãÿølmmÜý¾-ï…žžžzŸ·»o°lÙ2èééÁËË ½æ^ªk²|ùrbذax饗ԣˆÚ{þwº®DDDD¤ýfi±ììløøø´Øæë달¬,Œ?Ó¦MCxx8ÜÜÜðÊ+¯ ¸¸øŽû‹Åptt¤§§#!!îîîêÍ›7£¤¤R©.\À#<///Lž<ù–á÷FFF‘H©T ]]]õ×Ý]kÎP]ÃïH$‚§§'€»ß7 å½¸ØØØ´8Îzò½//¯ÁNPPär¹úëû=ÿ{]W""""Ònºš.€ˆîÌÔÔ111-¶ÂÌÌ ‚ àóÏ?Ç矎‹/âË/¿ÄÔ©SqñâÅÛîëÆk¦¦¦ˆˆˆÀÔÛª««!‰°{÷n,Y²;vì@xx8ttt`nnÞ9'¨…Z{þ&&&(,,l±­9LºÛ}øÂ¹- Z|­P(`ii©¡jˆˆˆˆH[pd‘{衇ðÇ 55€ª9èŽ;0f̬X±#FŒ€®®.Œ'Ÿ|999­Úï˜1cøøx@UUBCC±k×.dgg# ÐÑÑÁ©S§PVVÖiç¨mZ{þcÆŒÁîÝ»‘ŸŸ8uêâââ ‰îzߨmÒÓÓ±oß>ª%U¿þúkŒ7®ÍûÙ½{÷-u_™A¤Åú÷ïÅ‹#44ƒ ÂÅ‹ñøãcìØ± Â7ß|ƒàà`ØÚÚâüùó-VݰµµÅK/½„ÿüç?°³³k±ß>}ú`éÒ¥ àAƒ€ððp̘12™ K—.Åðáá§§‰DOOO,^¼_ýuW_‚.7iÒ¤;žÿš5kÔÏ7n&L˜€ÀÀ@ôëו••èׯôôôîzßšWœ¹““SgŸ®Ö Ãk¯½†Ï>û III ÁsÏ=w˨˜{yõÕWñÌ3Ï ((¨ÃjKL4ÁŠ¿ÁÖÖŽŽ°¶6†££9¬­M ‘ètØqˆˆˆˆèV"AMAÔÓ=zþþþ·„ ·£T*Q\\ +++õ¶ôôt$%%ÁÝݽE/†ÚÚZœ={555èׯŸº%äççãÒ¥K4h,,,n{,™L†ØØX899!00P½½¬¬ gÏž…­­-‚ƒƒ‘••…ÔÔT >ü~NÿžÚr}ºbÿ­9ÿüü| ¾¾EEE‡¿¿?6mÚ„°°0w¾o7ºù~·æ¾u–¼¼<ÄÇÇcĈ²ÿ¨¨(Ìž=mýßNMM N:333 0 Sjk«ÈÈ9¸xÑvvÎ(*ªDaaE‹ïÛØ˜ÀÆÆDn8:šÃÆÆf°µ5…ƒƒ¬¬L «Ë’DDDD÷áùäÁÛÛû÷ïo±òõ\::Âà ±hÑ;HLÌEbb.ä8x0eeªe“íìÌàëkLš??¸ºZ¡²²yy¥ÈÍ-…BQŽÜÜRäå•!=½gΤB./AEE­úXººbX[›¨ÃæÑNN°·W…ŽŽ06–jêru9†DD÷é±ÇÃc=¦é2HCd2}(•žx"R©î Û‹‘””‡øø$'çáÌ™TlÜx UUuKøøØÁÏϾ¾ö2Ä}úØA_ÿzV]]¹¼ E™:ôÈÉ)FAAsqìXäòÔÔÔ«ÆØX sØÛ›ÁÁApØÙ™ÂÑÑæ°³Sò """ê fµQCƒ …³f}=„µÌLå IDAT‡{aÔ(Œéwwk89Y`äH?õó•JYYEHL”«Gq=š€o¿ýuu ÐÑÃÅÅþþðñQæèÓÇ¡¡îwm&Z\\‰ÜÜ2ää” /¯ry rrJ‘—WŠ+W²!——¶˜Ú¢§§ {{³¦Ñæ°·7…££EÓ6Õç66l`JDDDÚaQéê*1dH–/_…èè$9’€+~Ã’%;áîn‘#ý1j”?Âý`` ±X77+¸¹Yáᇯ¯¨ÒРDFFäHHÈERR.~ûí Ö¬9„†%$xxØÀ××^ýáçç77kèêŠaaa #øû;ܱÖêê:ää” 7· ry ärÕç2Y1Nº†ÜÜRäç—C©T5fmîåÑ<šC5åÆDõxãH"""¢®Æ0ƒˆˆè>¹¸X"22 ‘‘ahhPâüù49’€#GâñÃÇ¡§§ƒ°0/u¸áímÛâçuuÅðò²…——-}´Ÿz{}}#RRòÔÓU’’ò°}ûydfB© §§‹>}욦«84puµ„HÔ²Y¨žúwR_߈ü|ÕT¹\ÕÏC€”"&F†?þˆEnn)êëÕ?cnn{{389™ÃÎÎ æpp0ƒj›££9LM :èJµÄ0ƒˆˆ:ÝŸ&àßÿŽ…¾¾¯¦Ké02™²²Šàâb @L„…y!,Ì o¿ý(Šr9#GðÅ¿ã_ÿÚ KŒ金#ýî ýÛî["Ñ¿¿#üý1iRˆz{MM=’’rÕMG娏ñ²²Š††zðñQàhž®âãcGG󻞋D¢GGó{>O¡(W7/•É®OmÉÊ*¹siÈÉ)Aeåõæ¥&&úpt4‡““œœ,àà`'' 8;[6õõ0‡žÿ!""¢¶ã_DDÔ)þü3}´ññr46*}4\UǨ«ÓAF†x`†÷Åœ9áxè¡@èêŠÕϱµ5ÁŒƒ1cÆ`46*qùr&V…7ž‚X,ÂÀ9Ò>v¹ç¬úú» 8¸åRÁµHJRõâP=æâèÑDäå•LMõáãã??û¦¬8´¹!¨­­ lmMз¯óŸS^^¹¼ÙÙÅM=^Ž„¹ze•榣þþŽM‡üüam}÷M(åêp£¹Qióç2™j:K3©T·)è¸Þ¤ÔÙYõèâb GGŽî ""Ò" 3ˆˆèVyyeؼù öï¿‚øxy‹%9ML 0n\0Þ{o",,ÚÖ[áâÅ ¼újŠ2|øá<þø vÕùí·båÊß³´SF*äå•bþüï‘’¢Àÿû$FŽôkó>êëqðàõÑvv¦˜=; ³f…ÝsõÛIHãØ±$;–ˆS§®¡ººžž6>Ü>胡CûÀظíSRÚªªªN=Š#!AŽ„„\$$ä  @NY[ÃÏÏþþªÆ£þþŽðñ±‡¡¡^§×ÖZuu M#:J“SÜ4²ãzïŽÌÌBÔÔ¨B21ìíÍà⢠7œ-švià ""JK«°k×EìÛw11YêÞ ªU$èaêÔ˜;wüýÚ¼ÿúúF|þù¬]{áá}°råÌûz!³9s¾¡¡¾ùfn»÷u'µµ xã-صë"þùÏñxñÅ‘÷½¯ôôlÚt[¶œAqqFòÇœ9`Ô(ÿû cjkpî\šºßF\\ÄbBBÜ჈ àÖ¥/²óóËÕ#8s'CRRª«ë ‹àêj…€Õ(??8ÂÝݺSÂ¨ŽŸ_ެ¬"ÈdÅÈÊ*Bvv²²Š•u÷°£9ð`ØADDÔ)fõF¥¥Uرã"ø W¯æ ´´ €ª·€‘‘µµ hhP⡇0sæŒåß/Äââr°hÑ&¤§àÝw'âÉ'Ã;d©ÍººøùýK—NÆìÙ´{÷òÕWGñÑG{1yò|öÙŒv5ì¯oÄþýW±qã)œ8‘ 3Ìš†ÈÈ!pp¸ÿ§°°Ç'ãØ±$?ž„¬¬"I1dˆ'† S­”âïïÐåK*•23 —Ór¨ÂŽôô46*!•êÂÇÇ^ÝlTÕ—Ãvv3õ¬#5‡ÙÙÅÈÎn}Øáêj©žÎ°ƒˆˆ¨Ífõ99ÅØ¶í<ŽG||.Êʪb±ê–­­ ŠŠ*™Yoo[̘1Ó¦ l׋Ɇ%Ö®=ŒÏ??€7|ñÅ,¸»[wÔ)!:: 3füçν×!˘¶ÆÑ£ xá… ðò²ÁúõOwÈ‹íôôlÜx [·žíÑ7ï;:: Ç'ãøñdWÂÊÊÆõAD„† ëWW«vŸÃýª­mP7NYÉË+ Z¥¹á¨¿¿àëk홪r/×ÃŽëGkÃŽæ¥hvÝ‚aQOS_߈sçÒðË/—qöì5¤§_Á$‘èÀÉɃyÀÃ×/gâÈ‘xH0qbfÌŒÐP÷v×’¢À«¯F!6V†7߇çŸÑá+^,[¶¿ÿƒcÇÞîÐýÞKjj>žzê;TTÔbݺy0À­Cö«­q¥i´F Í1kÖÌšÕ¾ÑÍ”J±±2u¸qæL*ª«ëàîn­7†íKK£8›ö).®D\œIIrÄÅɯZ]¥²²b±H½ªŠ¿¿ª'G@€#\\,»|ÄIG`ØADDt_fug%%Uˆ‹ËÁéÓ×pòd ’’rQXX A Rôéc‹ˆˆ>˜:ujkë±sçìÜyEE•xà/̘1ãÇ÷ƒ¾¾¤Ýõ(•Ö­;†O>ù¾¾öøÏ"áãcßgz«Ñ£?Cx¸7–.Ü)û¿›²²,\¸Ç'ã³Ïf`Ú´ºÿ´´|lÚtZ=ZcÄ_̙ޮé>7««kÀùóéMáF._΂ pT÷Û2ÄSkFA4OU‰•!>^pÄÇË‘‘QA`b¢__8 À ðõu€‰‰¾¦Ko—ÃŽ{w´6ìh^•…aõ0 3ˆˆºƒòò¤¦æ#55qq98> ¹(-­V?G$ÁÖÖŽxøá ŒßVVÆP(ʱ{÷ElÙrññr¸»[cúôAxüñA:=#3³ÿûÏ8>¯¼ò-zººÓÔ1/¯ ü ?þø ÆŒ è”cÜKc£Ÿ|ò+Ö®=Œ^%K&tx˺ºõJ('N$ÃÆÆÓ§DddX‡NÙTÍéÓ)Mý6’‘”” ‰Dƒy4ÜðE¿~.vOïWEE-刋ËQ÷äˆÏAyy D"\\,›Fq8Àßߎps³îð‘BšrsØq}tÇÃWWK¸ºZÁÍÍ ®®ª;;S Ÿ Q›0Ì "Òåå5ÈÎ.µkùHO/Àµk ¤§ %%……•ÐôL¥RÕ4ÑßßC‡ú`äH? à¦]Ñü"xëÖ³8z4FFz:äf›6Âì³³%¾ür6‚‚œ:ü7Ú¶íÞxc+ââ>ÒøRŸ;w^ÀâÅ›ñÀÞøê«§`jÚ9#23 ±eËYDEBQ†¡C½1kV}4zz÷ߌôNòòJŒèè$DG'!7·&&úxàoDD¨¦¥tÖ¨›Ž™Yˆ„¹:àˆ•!#£JèÁÏÏNê# Àffm[j¸;¸9ìhþÈÈ(DVV‘zÙe}}‰:Üps³ºésëv5¼%""ê 3ˆˆºBee-òóË¡P”!;»99%ÈÉ)†LV‚ìì"Èd%ꦜ::bXXBOOÕÕõ()©‚ °³3ÅàÁ^2ÄC†xÂÏÏá–‘.¤cË–³Ø»÷/TTÔ`Ä_LŸ>?Ô!ÓHn–—W†7ÞØ‚Çãñâ‹£ðÆc;å…õÍ.ü ùùåØºuA§«5þú+ s箃¹¹~üñ™NmªÙبÄáÃñˆŠ:C‡â`l¬éÓaÖ¬!ðókû²¹­•œœ‡ãÇ“Œ“'SPVV ;;Ó¦F¢ª•Rìíµ{õ‘êê:$%å!.N†¸89r›ƒ’Õj>NNð÷W­¨¨ :<=mµn4JGQ*Èå%ê`##£ÈÌ,DFF! *Ôϵ³3½CÐaÕ-V!"¢‡aQ[•–V¡¤¤eeÕ(-­FiiUÓç5(-­‚BQŽ‚‚rU@¡(G~~¹z¨7 zÔÉÉNN°±1 UUµÈÍ-AJеÐ×— o_g„†ºaà@ àvÇŠ2Y1¶m;‡;/ %EL:S§†vꋌ½{/ãí··ÃÔÔ_|1 ƒ{vÚ±n¤T èßÿ=<ÿü,\8ºKŽÙry ž|ò;äå•âûïçwʘ›åå•bË–sؼù ÒÓ êŽÙ³Ã0aBI;í¸JüõWŽOFtt"ΟOGmm¼¼lñàƒªpcèPo˜štZ I./A|üõ©* r¤¤ä¡¡A ==]øúÚ«WU T5µ²2ÖtÙ®²²Vldd"3³™™êÏëêR©.ÜܬáæfË[mé»BDD= à "j©´´ ¥¥Õ(+«Aii5ªªjÕ/Ä›û3ÔÔÔ£¶¶‚p}[uuêê T (/¯¹ë1 õÚÔˆÎÀ@¯Ãßí¯«k@uuêëQUU‡††FTTÔB©T¢¼¼‚ ¨GJ””¨ËË«¡TÞú+S"ѹ¹!LM `nnKKcXYÃÎÎVVư¶6†­­) ôŸ_†´´\¾œ‰¿þÊR7/tuµÂ€n8Ð!!n rºë5*/¯Áo¿]ÁÎpâD2,,Œš¦‘ Bp°K‡^«›•–Vaɒصë"fÏÃ{ïM‚±qç½p¾ÙÕ«Ùxä‘Ïñǯ#0°s§³´Uee-,ø ÇŽ%âÿþo¦NíØÆ w"ŽOFTÔiìßzz:x챈Œ Cÿþ®~üêê:œ;—¦î·“ ‘H„à`gõÈAƒ<ºÕT…úúF$&6/›ƒ¸89ââdêÑ ¶¶&M=8œÔËÆz{ÛõØQ7¹¹¥7×C¬¬B(åêçÚÚšÀÕUvxxXÃÃϵaõ""ê–fõÅÅ•ÈÊ*BNN rsËPXX…¢yye(,¬€BQÖ4ºàö!„©©>D"1¤Rõ;l¦¦‰DÐÓÓ…jú‚™™j›Tª‹ººFtÔ¯—æ!àÍÄD::bI¡«+n YTç#•êB*•@__¢>G‰DFFRèëKÔÁ…©©Ámßu¬©©Gl¬ W®dáòå,üõWRRò T °¶6F¿~.è×ÏUýhkkrÏzëëñ矉رã<ŒR)`ôh<þøà]åânŽKÄ«¯þ Aðÿ7£Gûwú1o¶zõ!|ûퟸ|ù­\г¹1èÿ{¯¾ú^}l—ÖYRR…­[Ï!*ê4’’ràˆÙ³Ã0uêÀ.)QRR…ãÇ“ÕÓRÒÒò¡¯/ÁàÁžˆˆèƒaÃ|з¯s·l™Ÿ_ŽøxÕô”æžII¹¨¯o„D¢£ž¢Ò<‚#(ȩیPéHÕÕu·„ééHO/hÑ«ÃÔÔîîÖpw·jz´†››5<<¬µ~Úià ¢žB¡(Gb¢jhtjªjÎssÃ·ŠŠZ€®®VV&°±Q°¶6Q?ZZÁÔÔffª覦ú055èÔ¡ê=EYY5bbdˆ•5Ùê!ꦦè×Ïýû«‚‹à`8;·m‘‹3°cÇìÝ{ ……•<ØS§Äøñý`nÞ5 ««ëðᇿ`Æ“˜0¡–/ŸÞeǾٴikàà`ŽU«fkäø­uo¿½ãÆã‹/"52*áÂ…tlÜx ûöý…ÆF%}´fÏÃ!ž]°dgãøñ$;–„'’‘Ÿ_ssC ÚÆõÁƒúÀÃæËêéhõõHNÎCLŒ 9ˆ‰ÉALL¶:ˆuuµ‚ŸŸ‚‚œàˆ€G¸¹YieוɊ‘ž^ 9ÒÒ ‘Q€ôôBTW×PMÉk8<<¬Õ£9ÜÝ­áädÑá«Q·Â0ƒ¨»©©©ÇÕ«Ù¸z5‰‰¹HJÊmZ¢SõG³­­ <=mÕËﹸX5=ZÂÞÞŒüµSnn©úú«Â‹df¬¬Œè„  'ôíëŒ~ý\î{ùÌôôìÜy;w^@jj>¼½m1eJ(¦NËŽ<¥{ºp!‹E¡¨¨Ë—OäI!]züUVÖ" ` V®œÙeS8Úãøñ$<ûìðö¶Áºuó[5§3”•Õà—_.aãÆS¸r% ^^¶˜5k|0¬­»¶÷ƒ HHÈmµ‘„S§®¡²²NNˆˆðAD„†í£±kÕ‘rsKÕAg||bbdHO/€R)ÀÄD_½d¬ê÷†3|}í;¥Qow“›[ª:ÒÒò‘ž®jLš–V žþ'‘èÀÙÙRn¨¦°ØÀÝÝ®®–]Òˆ˜ˆˆ4Ša‘6klT"99—/gâòåL\¼˜„9”°²2†¿¿úô±‡¯ïõM½[ÞÓä痫⤤\$&ª>n|§50Ð}û:#(ÈAANí]RR…Ý»/aÇŽó¸x1ÖÖÆx챘:5´Óû`ÜN}}#>ÿüÖ®=Œˆ|þùLûþãXÌ»—/›îñb÷Ú5ž|ò;ÔÕ5`Ægáïßy+Ž´Fl¬ QQ§±cÇyTW×ã‘G‚0kV†÷ÕÈ´†%.^LW/{éR”ðõµÇ°aª%`ü`bÒ9KÞvµÊÊZ$$ä".N†˜™ºáhee-ttÄðô´A` j‡jºŠSv:JQQå £9ò›¤§ç«û™ˆÅ"8:šÃÝÝFݧÃÓÓžžª°ƒAQÀ0ƒH›‚€ÄÄܦ¹æÉ8}:ee504ÔC߾ΠqEÿþn0À­ÍSèö +‹ää<$$ä4=梸¸`nnØ",òõuèÐ9ðµµ øý÷ìÜy‡ÇC"ÑÁر}1eJ(†÷ÕØHš„9^~yÒÒòñî»ñä“áZ1$~É’8{6üñº¦Ki“’’*ÌŸ¿W¯f㫯žÂ¨Q]ßkäf55õØ»÷2~þù NŸ¾'' Ìš53f †““æ~¿TVÖâÔ©k8qBnÄÇË¡£#B¿~.êi)ƒyv«f¢÷¢T HO/@l¬*Ühõ%——¬­àÔbšJoj6ÚZµê×§°ä#-­ry)A€X,‚““<ýŽˆ¨—b˜AÔ”JgΤâàÁ«8x0…°³3ÃÃbìØ¾:Ô›sx[©¤¤ê†!Ä-B …¢ÀõùÒnnVpw·AŸ>vêi"]ýGg^^)vトíÛÏ#6V''‹¦Fž¡ðñ±ïÒZîDlØpË–í…««V­š€GM—u‹Ÿ~:‰>؃¸¸ºý/û÷_ÅK/mDx¸¾úê)­\5H&+FTÔilÝz99%2Ä‘‘a?¾ŸV5©LNÎS‡'O¦ ¤¤ ÖÖÆï£7´itQg‘ÉŠ/W¯ª›ƒŒŒ–ÍF›:ÁÏÏAã£nºƒ¢¢J¤¥¨ÃæÇ´´|õJa††zê`£9äðò²‡‡ ¬¬º¶Á.Q/Â0ƒ¨3¥¤(°uëYìÚ¥z'ÞÇÇcÇá‘Gú¢¾SvJäç—«GW´ü(T¯ÚÒ<ØÝÝJ½t_󇛛•F_ìVVÖâ×_¯`ÇŽó8y2FFRL˜ÐS§†vù’˜÷’•U„Å‹7ãôékX°`^{í­ žyæ{uÍžàÒ¥L<õÔ·°·7ÃO?=Û%£ƒîGc£G&bóæ3øý÷H0uê@̘1X#iïF©“­7ΜIEUUœ-Ô#߆ óÑŠ‘P]¡²²ññ9ˆ—ß°ªŠÕÕuHtЧ‚ƒ]ÔG@€ci´ÚŠò¦é*ùêé+iiª‘µµ TS½¼làím //[xzÚÀÛÛlDJDÔN 3ˆ:ZAAö-[ÎáÊ•,89Y`Ú´˜2%}úØiº<+*ª„LV ¹¼ÙÙÅÈÉ)Q.“C¡(CCƒ •ꪗÚS²°†‡‡5Üܬáäd¡Us䔸óÏDìÜyû÷_…R)`äH?L›6=¨u´ ‚€M›NãÃ÷ÀÑÑ_|1 ýû»jº¬;jlT"0p Þxão˜?_{zM´Wff!æÌùÕÕõZ±ÒɽT`ëֳؼù RRvÁÌ™C0eJ(LMµïEp}}#.^Ìhjªœ„‹3P_ß{ êaÃ|î3³ÞyY}Þ IDAT³ Tc£©©ùˆ•áÊ•,ÄÄ䨧©ˆD"xxX#(HµTl` j™é®^¾·»2Y‰:äHIQàÚ5Õ‡LV ¥R€ŽŽ..–ðôTôô´——*ðè-aQ;1Ì ê‚ :: ?üp‡ÅA__‚qã‚1}ú „…yõšþeeÕÈÍ-U99%ÈÊ*BNN)äòÈdŨ©©W?ßÚÚŽŽpt4‡““ê±ùÃÕÕRkß©¾Ñ¥K™Ø±ã<~ùå +1h¦L Åĉýµv™\™¬‹oÁ‰Éxá…‘xýõ±Z¿2Ĺsi˜4éK;ö6¼½µ£wCGi^é$6V†o¿‡ˆM—Ô*§O_Ö-g±gÏ%À„ ý1kÖ­}t£ªª:œ9“ªn&“ ‘H„À@'õ””!C’“óššk×(/¯˜šêÃÓSlx{7æ°…§§­Öÿ®&"êB 3ˆÚ£¼¼Û¶ÃúõÑHK+ÀСޘ9sÆ þöÎ;¼©ªãßî½Ý…î½-´ìX@68PDQ^†,QTT^ðp "Š (`±Œ2DFKR: {šî4énÆyÿHè¤#išô|ž'OÓŒs¹çÞsÎýÞßT1åýÃáɬAqq5X¬”–²QVVƒòò””T£¼¼¥¥Õ`2k„nµ ¥¥*)LMuajªKKýñBffzR»(ËÊ*ChhΟCn.vvƘ?_c0/ð !ŽÂ®]`b¢o¾YkI›Õ#öᅥӧ":úcI›"𛹨´éO\¾/¿\Œ%KFKÚ¤Ãf7"44§N=@B¶¶ÆXºt4–,3èïèWUÕãþý§•R23K¡¤¤__ŒgÀ@{x{[ÙÜ,V­PÜHJ*Dbbrs™àó ´µÕàæ&ðÜh:h¹ØþQZÊFVVrrbG«GGAA%x<>äååZª­< [<Œ`jª+ió) e ¡b…Ò22Jpôè]œ9X¸p$V­ 4 ŸG]]ÊËkQ^^‹ŠŠZTTÔŪ“YÓ"N°Ád²ÁdÖK—¶¢««ccmiÂÄD††‚¿ÆÆZ01ц‘‘6LMud®<`qqBCáüùX$%ÂÄDóæy#(È{P‡g´R\\…-[N#<<o½5Û¶Í–*1iîÜoàäd†}ûKÚ±AÁ—_^Å·ßþ‹M›¦cË–™ƒÖá+’’ ñçŸQ8{6 ͘:ÕË—ûcâDÇAUµ¥+JK«‘)7 +¡¡¡‚Ñ£‡# Àöpu52ÞvÑš‡#)© $'"-­XX.VP*Ö¢MY÷%Es3W轑“ó4l%+« lv@SS#F ÃVlmŸ†­ÐýO¡Pd*fP(½áÞ½,<ø/îÞÍÄðá†xýõ@,Z4Jâ ÓØìF°X5BQ¢¢¢Lfð9‹%.X,ÁãY ÐÐP‘‘ 4`` %Œµ……LMÂÅ`Ëý Nªªêqñâc\¸‡¨¨hk«aölÌŸï é :}ú!>ùä< µðí·Ëáëk#i“zEUU=ÜÝ?Â?¾‚^ð”´9b'88 Û·‡ (È,•J¯€ÆF®\IÀ‰‘ˆŠÊÁ°a:Xºt4–.KK}I›×crs™Âd¢÷îeŪ…žžüýmà€À@ûAS²V’´–‹ML,@b¢ T%%¥55PT”‡IK™X'‡»»¹Ì Þ’¢¼¼¶%T¥5/‡ t¥  \®À›ÃÒRöö&pp;;ã–¿&ƒ2Ï …B¡ô*fP(σ‚›7Sqðà ÄÄä" ÀëÖMF` ƒXîš65qÛxK°Xu¨¨¨Eee=**ÿ·Š••u¨¨¨‡ÃkÓ†––*ŒŒ´ ¯¯ }} èëkÀØXð¿ôõ5…â…¾¾¦TÝ¡7uuM¸~=¡¡q Kƒ‚‚˜8ÑIªÄœ’’jlÛönÝJÅoŒÇŽs¤òÝ¥KñÎ; )éó!“¨1<<kÖƒ»»~ýu•TÿîÜ\&NŠÂ™3Ñ`2k0nœ=V®ôÇŒnRu>BšZ,7"#³P[ÛÚ =7Į̀»? Ø_¹¹å-!*#1±ååµ++¸ºšµ„©<9ºt¶,Ãáð—WŽŒŒde•!=½YY¥ÈÊ*æ®6Löö&°·7‰Pè06Ö’°õ …Ò#¨˜A¡tŸOpíZ"¾ùæ:’“‹0eŠ36l˜_ßžçàóIÑá©@QÛáõòrgE}}s›6””ZD uèë <'"„à¡§§CCM¡pa` )•wr% ‡ÃCXXΟÃõëIàpx˜0ÁAAÞ˜9Ó*’6±×„„DããC¡§§Žo¾Y†Ñ£GHÚ¤>³eËi¤§—àÒ¥ ’6e@IM-ÆÊ•?CKK¿ÿ¾zPçcé ·n¥âäÉHܾmm5,Z4Ë–ùÁÑQ:Bôž…Ëåãñã'¸w/ wïf &&MM\Œa$,;nœ=ôõ5$mê ¢¤¤Z˜`41±II…ÈÏg 4…98ZC©ñ‚“ø|£99L¡À‘‘QŠÌÌRaésõOÈáè(ð谰ГºÐ7 …"ÓP1ƒBiŸOpáÂ#|óÍudg—aÎOlØ0 ..f Ù`2kPVƆo´æŸhõ ˆõhŠéé=":#Z_„|hJ<„EVáó <ÈFhh._Ž›Ý€Q£†cÞ<Ìë%µ ¥¥llß‚7’±jU >ø`ŽÔWf5ê3,]:›7Ï”´)Nii5V®<&“cÇVKE~–žPZZS§¢ð×_ñä ¾¾6X±ÂsçzI¥xBk¢£s…ù6âã „ÀÉÉ7Îþþ¶RûûÄ ›Ý L0Ú*tde•‚ËåCSSEžâáa ww ØÙKEi£¬¬FèÉ‘‘QÜò·ee5uueØÙ™´:ìíM`mm@o¢P(I@Å *+9&nÜHÁ±cwQTT n„æf.ÊÊjPVVƒŠŠÚ6!JJ 04Ôj áÐ zzê00ЄA[B__ƒ.À$LB¡¡q¸pá1Š‹«àêjŽùó}ä ss=I›×/΋ÅÎç ££†¯¾Z[I›Ôo23K1a¸xq=FŽ.is$BmmÞ~û8<ÈÆ?¾‚iÓ\%m’Èàó îÝËÄ©Spõj"””0¾–,Ó+/¸Á›Ýˆ²p÷®@ÜHO/‚‚¼¼¬…e`GŽ´‘ªP›¤©‰‹””"$% Ž„RRŠÀáð ®®ÜFàðð°€½½ _ÅDuu=2399Ldd” 3³ Fø|%%ØØ sr<9a+ÒÚH¡P¤*fPd›æf.JJªQRRÂÂ*””T£¸¸ EEU(-¼Æbµ(äää`` SSÝ–ä—š-Õ;´„•; 9'tu¥7Ž}(‘“ÃÄùóq Cvvll 1ožæÏ÷½½‰¤Íë7……•ؾ=aaixõÕqøðùPW—noŒV~ùåöᅥääÝCúB…Ëåcûö„„<Äÿþ·Ë–ùIÚ$‘SUUhG!5µÎΦX¶Ì Ž”‰±–ɬ&½{7Ož° ¦¦Œ‘#m„žCú8éé%HH` !ÄĤ¤¡©‰ 55e¸¸˜ Å À1Œ–Š#de•!+«´%dEàÉ‘—W‡yy9XYÀÉÉ&pv6ztPO …"¨˜A‘^9(,¬DI »ƒ@Q\,xÞê ¼(Œµaf¦ SS] ¦ 55eÜ»—…ØØ<8;›bÛ¶Ù˜>]vîzeJJªqáÂ#„†Æ!>žmÌë…yó|àã#Ýw|[áó Ž¿‹½{ÿ†‰‰X"Õ¹1:ãå—†ªª2ŽyMÒ¦HBø_}›7ÏÀ{ïÍ´Ib#66ÁÁ‡‡Ù³=°lÙŒg/3ùòóY¸? ¸w/ee5ÐÖVƒŸŸ­0¡¨4æh822J˜XÐ"r’65q¡ªª$L2*9,áà@qólòÑŒŒR¤§#=½99Lp8<())`øp#8:>œœLaccHÅ< …Ò¨˜A¼45qñäI9òó+À`°ðä ùùÈÏg¡¨¨ UUõÂϪ¨(¶:07×ða:05Õ™™nËs]k W±Ù øê«pôè]XYàƒ^ÀÌ™n4±•”SUU+Wpþ|,"#³¡©©ŠÙ³=°`üýídj‘”™YŠÍ›O#>>ï¼37N—¹ª4ÍÍ\8;ˆO?‡•+ý%mΠáĉHìØqË–ÁÞ½ eê¸nO]].^|„S§¢›C,^< Ë–‰‰lU¾HO/æÛ¸? lvŒŒ´0nœ=ÉD¥= ì@ÁåòÛ  ¤¤£¡¡**ŠÏ„¨Xê) ~8²²Ê™Y‚ÔÔbddþ2àñøPVV„ƒƒ „¬““)‡ÁÁa¬¬ôéúŒB¡t3(’ƒÇ㣤¤Ož°À`DŠVÁ‚Á`¡´”-ü¬&¬¬ôaiikk˜›ëÁÔT \´†‚ôBΜ‰Áÿ{ <ÁÖ­³°|¹½K#Å444ãúõdœ?‡Û·S¡  iÓ\1¾&Ov–¹xt‡‡ï¾»o¿ý..føê«¥pv6“´YbáîÝ ,^ü#>üÒÏDÔ\¿ž„·ßþãÇ;âðáW†D\zZZ1‚ƒ£6»“';cùr?Lžì,s¢< ¸?™ˆŽÎECC3¬¬ ÚˆFF´„fOárùÈÌ,†§´zp444CYY±%DÅBèÅáäd*sÇÕ`¥±‘ƒŒŒ¤§·>Š‘‘!ÈÉ*°·7i WggAØŠ©)-ƒL¡ q¨˜A/õõÍÈÉa"'‡ÙÁ»¢°°R˜«BMMVVú°²2hy´}.Šìï©©Åøàƒ3ˆŽÎÅË/ÅŽs ­­Öïv)Os3ááéÂRªÍÍ\:`Þ<ÌšåMMÙ¬÷[·žF^ Û¶ÍÂoŒ—i!n÷îKøçŸ$DDì´)ƒ’ØØ<¼üòØÚã?Þ”‰¼=¡¹™‹k×’pòd$îÝË„‘‘.…+ü`cc(ióÄBs311y°”Gž€Ç#pp0A@€íáçgmmZýª7ðx£UÜhM2ZW×%%¸¸˜µI2êìlFޤ¶¶I(n¤§— -MàÍÑz³K[[MèÁáä4 öö¡£§7¸(ŠÔCÅ Šh()©nI%H•-x^TTBåajªÛÆ»âYÑBœw—jk›°ÿUüö[ÜÝ-°wïBxxXŠm{ñÀãñqÿ~BCáÊ•ÔÔ<-¥ú žR»x!„à¿ÿ½ŒíÛgw¹Hf³°gÏeœ8‰±cí±oßbX[˾»ùÔ©ûàçg‹Ý»HÚ”AKVVV¬ø **Š8uêíN=XŽÀ¤IÎ2y¡ŸŸÏÂéÓü%%Õðó+ü1{¶‡L{«ÔÕ5áÁƒÜ»—ˆˆL¤¦ANN-ž5j¸LïqÁãñ‘]†„„a˜JRR¡Pàpr2Šîîpq1“9ÀÁNUU½0L¥UàHK+AeeÀÐP³Eä0…“Ó0¸¸˜ÃÉi˜Ô—)§P( b¥ç47s‘“à YYe-ÏKQ[ÛÐÑQ‡­­ìí%¹FŒ0†ƒƒ ¬¬$SƒüÂ…Gص+;vÌÁ²e~2“ûì"àã_ÄK/h%BYY ¼½?Áñã«1uª‹¤ÍÔ”–²±bÅO`±jqòä[pqyv‹  ƒ°²2ÀýûÊìøÇãñ–Ž“'#qóf ÔÔ”ñÒK#±|ù¸ºšKÚ<±SQQ‡û÷³pï^&""2“IJ²"FŽ´–õò²–iO.qÂç“ãiˆJRRjk‡£ã0xxX ½8\\Ìd.‡‘4PVVƒôôb¤¥ =:ÒÒJPW×yy9ØØÂÅÅ ÎÎf-MaiIóqP(R 3(a±jÛ­ÂEk‚&yy9XZêÃÖÖöö&°µ5>74wÇKJª±uëiܾ†eËü°cÇèëkHÚ,JIN.Dhè#\¸‡‚‚J88 CP7æÍóÆðáF’6Odäå•cÒ¤ÿ¡©‰ 999;ö¦MTÓÉÉaâý÷ÏàþýL¬Xá?|aH…E9ƒ-[N#9y·HÂÌdššF¼ñÆoˆgà×__G@€=*+ë0yò—(-­¼<°k×<¬^=^Ò¦Š&³ý%ðÖÈÎ.ƒ‡‡%V¬ðCPO¯Â0ø|‚ââ*˜›K_¾–¢¢*a2шˆ ””TCCCþþ¶BÏ ggSz×ø|‚Ü\¦0<%1QàÉQSÓ%%ØÛ›ÀÃÞž‚‡««9 Q‘„v?'‡‰óçãpñâ#df–ÂÒRóæù (È»ÍfYÏ' :ˆøx¸\äåå ¡¡Šk×6áܹX|÷ÝMØÙãÿ[ __Ù(%ÛÖ­;ÒÒj„„¼+iS¤‡‡õëOâÊ•|ûír„„D#""\® 7‘ŠŠ"nßÞ.“á&AATTNz€Ë—ãAAÞXºt ÆŒy~ ã°°4,_þþþ{¼½­Äm®XÉÎ.ÃÝ»™¸w/÷îe¡²²úú7Î^è¹!KB±¤ „ 7·üÁ_6[ p¸ºšÃÛÛ –ðò²‚±LW#ÌÔÕ5!-­X(r¤¤#5µ55““ƒµµœMáì,8\]Íaee ³ÞmŠ”BÅŒ¡‡ÃCNS8h·ºß1 „@CC&pv6&R²µ5†™™t¹ð—”TcË–Ó KÛoNÀöí³i¼ð›‡¹s¿ÅþýK°|¹_¾STT… !44‰‰01ÑÆ /xaÞ<øøXÉô]Ã_~¹ƒ]»BÁç?‚•” ¢¢>Ÿ`Û¶YxýõÀ!éN§çÇX³f"Ö­›"is¤ B>ýô޹99´9¾àáa‰‹×¹9›Ýˆ³gcpúôC$$0`ggŒeËü°hѨ.= _}õüûo2TTqøð«˜1Ãm€­|>AJJîÞÍÄÝ»ˆŠÊA]]ÌÌt[„ ABQY+}+)ø|‚œ&?ÎG|<?ARR!šš¸ÐÔT»»¼¼¬àéioo+XZêKÚä!M~>ë‘£ÉÉ…xò„ 8:kñâ0o;L‡”×$…2È b†¬QSÓˆ””"$'")©ÉÉ…HK+‡Ãƒ¢¢}?®_ß77ÙÏw j¢£s±`Á÷àñøÞ“——ÃÇaÍš °lpÀ@pp΋ECÓ§»aéÒ1˜4ÉI(ò”•ÕÀ×÷ðxrrr“>ûl>^=PÂÖ‹‡‡Gž=7bbòÀáð`kkŒÀ@¸áïo ==ª)*8ÒÓKðèÑ<~ÌÀãÇùÈÌ,—ˇ¾¾¼¼¬Úxpм’¥¡¡éé%HI)ÞLN.Buu=ÀÒR_ªâìlWW3ØØ‰õ …"a¨˜!ÍV ÖVñ¢5PWWnnps3ƒ««¹°6·¬ÅkWaË–ÓOÇš5°mõÆHJJª±víÎÞVVV@ZÚÞ6ýÀf7âêÕ\¸ðPUUÂô鮘7Ï':ÉÜqÙ<AAß!!!tÿoOûüCï¿¿‰ŸC|ügR/´4­y2ÊËk;3PXØö!VÐØÈÁ¥KñçŸQˆŠÊ™™.–,eËÆàܹXìÛw\îÓ}(''‡5k&à£^”iÏ–††f<|˜+ôÜHJ*!®®æBÏ1cF@]V†% ÍHL,ÀãÇ ÄÇçãÑ£|äå•ÌÍõàåe//KxzZÁÓÓZZ´ ¯¤)*ªŠII‚›‡99eàrùPUU‚£ã0¸¹YÀÕÕ¼¥´¯)­¨B¡ˆ*fH •ˆÏ&šŠg ªJ [YÀÕU Z¸¹™ÃÕÕ\*–õ–«W±ys°07†¯¯¤MR\¿ž„ÿüçšÛ]”Ëá÷ßWcÜ8;üûo2BCáÖ­TÀäÉΘ7ÏÓ§» YÑé§ŸÂðùçÛ¸ÿ·§5Æ­[[‡Ä¹ÜžE‹~€‰‰¾ÿ~¥¤M‘*!X¹òç6y2:CQQ»ùòzç°…ìì2?ÄéÓQpr2CvvŠ‹«:|N^^3f¸ã‡V™1¬ºº‘‘Ù-âF&22J ¤¤ook¡ç†µHDi£‚†Yåë ´ÿ(C*fôBˆØîU!>ž!-¨¨¨ƒ¼¼ììL„µÍ[Å‹¡«×ÔÄÅ®]¡8~üV¬ðÇgŸÍ£J÷ÒÔÄŧŸ^ÄñãwÎ…gQRR€ŸŸ-ââž ±‘ƒÀ@ycÖ,^UE²³Ë0yò—àpº¾Ð|77 üý÷Æ!å¹RW×Wר¿ .ehEÅ¡C·°{÷¥}VNN}ô"Þ~{¢x’28._ŽÇ»ïžÐùòHQQ®®8yrͬ’UZÊÆýûYˆˆÈÀÝ»((¨„šš2ÆŒ!L&êêjÞ'¡lΜ¯Áçœ:õ ké‚ÒÒj^xá[$'vy×\IIª˜:ÕsçzaÚ4×!%fܸ‘‚W_ý} cc'Þâã ÃÕ«‰ÈÏgAII\.é 8¶¢¤¤€›7·ÁÎÎx€-ܬZõ+nÞLíÖ»EIIÆÆÚøë¯µC>\'/¯\XöÞ½L”—×BGGcÇÚ" Àö°·7yn;lv#œœvŒŒ´pøð«ð÷··ùR!yyåmÂS’’ ÑÐÐ uue¸¹YÀËËRèÅÑ› ÚÓ§bÓ¦?¡¨¨BÖ®„ ¦ ùµ¨¨(+« íÃÅ 4ááÑzãÒ°¶6èÕTÚ”!3zC]]Þÿ Ξ0z¥x76r”T€¸¸|wéÒc¼ýöï „s’¬_? ï½7cHVuê\.™™%xü8_èÅ‘ž^‡uxyYÂۻՃòËÊ5;wžÃÜz*(ÈCOOŸ}6óæù äO2°Ù BŽÄÄ$%"+«\.ZZªpqiëÁaooÒåzöe@ÅŒžÏÀ›oCIIµðnMhè0ztçµê[kÇÅ= ))E--ðñ±†——||¬áím%¶x9Y€ÍnÀæÍ§qõj»*±ï IDATþóŸ©Ø¼y&]Ø lv6m Ƶk èéh¡¤¤€ ‹PŠÀ£eâÄÿ /$•”äÁáðaa¡  oÌœéoo+™N*ØS÷bÆ 7ìÜ9WÒ¦È ……•¸v-—/?FttA˜IëûÎsñÎ;“%háàáÀk8pàŸ^^^ røá‡—©§`'p¹|$$0„ù6¢£sÐÔÄ…¡0™èرv04ÔĆ 'qþ|\±\^^žžøé§×è Œ~ÒØÈArr¡0<åÑ£|ää0AÁ°a:Ïäß°„··´µÕ0sæ$$´iGà@0jÔìÝ»ÎΦ’ùACˆ¦&.RS‹„âFr²àÑÔÄ…’’‚Pàpu5‡»»\\‰FiÿQ†ÅŒêêjtõ™ÆÂÂ::mÕiBÞ=—@¸øSRRÀ[oMļ@g{÷n&"#³™¬¬2TW×CYYnnæBáÂÇǚƬõ‚¸¸'xë­ãàñøøî»•7ήÛÏß½{ ëd6[ }s¡¶³3Æ;;º|ÿàÁƒ¸{÷n_M“îÝ{Z^TCƒ CÃzèë7@CƒÛ«¶°~ýzQ›8h((¨Äèџ᯿Ö" ÀAÒæ Z/^Üçïr8ò¨¬T“©Šª*"Ð||Ê ®Î•‰ƒš¿þú«Ó×ù|OÏÁbÕvù]EEù–R­‚ýFÞõ\³f -r½Á2@ëúª©‰‹˜˜<ܽ+È·ÏGàè8 EEU`³:|WIIJJŠøæ›em#:ß÷õë×# lv#žM0š¢¢*ÈÉÉÁÚÚ•]†[ Bøxå•lß>K˜¿-99y ÊÄÂÂZÈÊ*mãÁñl¢Ñáà ‘—Çêuÿõg~¡t¤«ù†"2:Š¥¥¥HMM…‘ÑЊe2™pvv†‰‰É3¯Õ`ݺ¸w/³ÓÊ#Fã7ðða.nÝJE]]œÍàäd*táss3‡²²h³KZÃíñí·+z”híÔ©SX±b-Z4Ê6Џs‡ ¸»;@EE Í`³ÐØÈESuuMݶñèÑ®.ÝWW¬XS§NÉ|_h‚ÅRƒ¶v3ÌÌê ¢Ò;£•,_¾'Ož±…ƒ‡'"ñÉ'¡HMý/7»¡õBº¿ç'‡ÊJ5j@AÀÕ•99ÙuÖ Ð1iñ³46rÐÔÄAUUšš8hlä€Ín@CÃÓçMMÜ–±°MMÔ×7ãâÅGppÐÜ9®° _$t¶¾j¥¦¦dãêÕ?ì² yy9ðùK—ŽÁÿ»jjÊt¾ï#!!!8yò$–/_ÞéûLf ?ÎÇ)øãûÏm¯5Üj×® ,^<wî„À»Ž(º;Ÿ ?Ÿ…„„„‡§ãäÉÈç¶×¾ÿZCéyÕ?z2ßPDBL—«EWסUÆ',,¬Ýÿix÷Ý?P[ÛÔe Åœœ2ìß #GÇG½ˆ3Ü`dDÖõ—æf.vì8‹àà(lÚ4ï½7£×î÷T  ­‹Å7º_ü76rP]Ý€††f45q[ÿͺï7Y¿8IíDQÅeÅŠ"°fpžŽqãì¨Ñº»é <_¦Ë¶ŽgÝ¡ªªUU¥^‡~®Z%ðÈpvvî³}²JûõÕ³hi©bÚ4WDGç óuFë:ìÌ™DEeãÈ‘UÂ÷è|ß;ž—@ÒÈH Ó¦¹¢¢¢'OFv[F¸\jj°eËi=E‹l1wîØ./¶)ý£»ó TF±²2@]]þüóA¯ûOIiŽ; Òùe(Ò“ù†"花_|ñ7ƒœºåñÞ{3ðÆãÐBÙ¦¸¸ «WEvvŽ{ƒÖÆ–Zÿºº4ïKg õr´=…Çã#""[·Î’´)C+ÿÐL:K‘ÿ|­f&AúÚ††Kqút.¦O¯¥ýG‘ ¨˜ñ ùùX¹òw¤¥•€òÜd‡|>ÁµkITÌ÷ïgáí·C__W®¼‡#¨‹"…2Tˆ‹{6»&8IÚ …2€äå•#'§¬ÇŸoMš“7QQQ×£0TJï¸?³Ã…°‚‚<äÁårÁoÉÓª¥¥ ++88˜`øp#°XE˜<Ù ÊÊT•$}í¿]»vÀÏïÚ©Š-\º”‰?ÿ¼Ð«ïðùQQ9"s#Êüüs8vネY³<ðÕWKi l eˆžss=ØÙKÚ …2€Ü¼™Òíû òPUU‚¦¦ TT” ®® ]]5ÄÇ磺ºGÞźuS ¢B—´¢‚Ëå#-­Dø¿žž:llŒ`oo C nÔò×P˜8²•°°08;›ux2pô§ÿ¶nkk Ú©aÈüMM\|öÙEüùg÷“©¼< /¯Ð&wÇ—ËCxxæÎõ·©2Is3›7ŸFhhv옃µk'=7ž“B¡Èáái˜8‘zeP(C __œ8±F(XhjªBUU ÊÐÔT&$l &}?6o>3ÀË>MMüüók>Ü66†ô“”Aû2”òb†ŠŠ"þûߘ6M#FØC[[O˜È°±‘ƒššFÔ×?}^Wׄ††fÔÕ5£¶¶,Vís+:P:§²²«Vý†´´"œ8±&8JÚ$ …"ªªêñø1o½5IÒ¦P(”ÆËËJÒ&PÚ¡¡¡Ò¦ .Eº ýGJt.w÷‚ÊÊJ|ùå—¢°E⨨(BWWÖÖ-åU­è€3Üä•+ýñÖ[±qãt|øá Ø»w!~þù5,]:FÒ¦K¹¹L¼ð·()©Æ… †¬qáÂ<|øP,çQ]]öìÙ#Ò6%EVVŽ;&’¶ ñÅ_ ))I$í=Yêq‘ ´—°%²‡(ÏqÃ`0Àd2;}O–ΣÁ6žµÎCí‘¥} ̹PSSƒ/¾ø¢ÃsQAû¤÷툢ž,’¶^yå<~üŠŠã˜&Ký .ÂÃÓáåeÕër˜”ç#ÊsGœ°X,øùùáÂ…ÎsWÉÒy4ØÆ³Öy¨=²´Ï9ª««±k×®ÏEí“Þ·#Š~ÈÍÍÅÁƒûÕ@ûo èj6nÜ''šŸa°žŽ‰‡¦wEÀ믿ŽòòrI›!uÐñŒB¡Pz;e‡~‹¥¥¥˜;w.`É’%(++Ã’%KHLLĸqã ªª œ:u PVV†3fà÷߇®®.RRRðçŸÂÎÎŠŠŠ055ž}ûºl7,, žžžPQQ“““ðnNgíR$!ûö]ŦMâí·'á§Ÿ^…ªª’¤Íêòød±X˜:u*Nž< [[[hhhàµ×^'(suãÆ ¸ººBYY>>>ˆ‰‰¶ÙÕ± ÁÁÁ°±±ššæÍ›'èž=ž·íK—.ÁÖÖêêêXµj¶nÝŠ+W®tùùåX[[CCC«V­¿µ—”Áçó±~ýzhkkÃØØ{÷îðt}õÕW033ƒ‘‘~ûí7lÙ²FFF055Epp0`ÕªUÈÏÏÇ+¯¼‚+W® //“&µÍÓ°dÉDEEõëè YéQ“™YŠÂÂÊ!j6ˆâÜ€;wÂÈÈ***˜4i zô^Wãl+?üð!ð÷÷îo‘•óHãÙ²eË @àBíåå…sçΊ‹‹áííÊÊÊ.ç¡®•}ˆî\èj½ÚÝ­ †ò|"ª>éªöô·!ؼy36nÜB€îǿΠý×¶ÿú³ën<ëjîi?vv…,õ“LCÚQRRBnß¾Ýþå.ÉÍÍ%„B*++‰©©)¹}û6inn&µµµÄÔÔ”|ÿý÷¤±±‘ܼy“hkk“{÷îƒAÔÔÔÈüùóÉýû÷Iyy9QQQ!çÏŸ'$<<œÈËË“²²²í–””---rôèQÒØØHBCC‰ºº:IKKëÐnSSS~ÇíÛ·IIII7¥çp¹<²aÃIbeµ™G‰u['Ož$ÖÒÝñY\\L”••Éš5kHSSÉÉÉ!ºººäúõë„Á`---rþüyR__OvïÞM¬­­ ŸÏïöØ|üø1QQQ!gÏž% ä믿&È×_Ýæ<ênÛÙÙÙDSS“\¼x‘444={öòÇtø}ÅÅÅ€°¬¬,¢££Cnݺ%–ýÙ[–/_N–/_Þ£Ï^ºt‰ÈÉÉ‘÷Þ{ÔÕÕ‘ˆˆ¢££CBBBHqq1‘——'}ôáóùäСCùâ‹/ŸÏ'_~ù%±³³#„RUUE†N®]»FIjj*100h³-OOOòï¿ÿöùh(ú¡·ûKš8r$œ8:î \.OÒ¦H ÈÉ“'{ôYQ;×®]#fff$33“°Ùlòâ‹/’·ß~û¹ïu7ÎBHbb">|8a2™d„ äÈ‘#þŽÁ>ž¥¤¤”””}V\ãÙ–-[Èk¯½&ü­***äÕW_%„râÄ âééÙí<ÔQ]âZ_õ¶?EµßÙlv—ëUƒATTT!¤Íóç­[r>éÍøÑzÓߢê“îÚE?ܾ}›¸ºº>ŸOÖ®]K&L˜@jkk !ÝíEÿ‰ûzEóK_×bÝgÝÍ=íÇÎö öù†Ò†h‘Š„bnnN=zD!$88˜øøø´ùüúõëÉÆ ƒÁ Haa!!„ÆÆF+ü\ëà“™™Ù¡ÝÇ“ñãÇ·iwáÂ…äÓO?íÐnO¡b†xhjâU«~%¶¶ÛHXXšØ·×›Á£»ã³u +**¾7~üxBöïßOæÎ+|½¹¹™|ñŤ®®®ÛcsÛ¶mdÙ²emÞswwïTÌèjÛ»wï& ,¾Îç󉩩i·bFYY™ðµ±cÇ’óçÏ÷hÿ2¸Ä ===ÒÜÜ,|íÃ?$óçÏþÎÖ…EFFQTT$‡BH\\111~ÏÖÖ–DFFBž?öåh(úÙ3V®ü‰¬^}TÒfH½]lŠâÜ %fff$))‰")*++Ÿû^wãl}}=qww'ׯ_'„‰ƒu<ë­˜!ŽñìÖ­[ÄÒÒ’BÈš5kȺu눵µ5!„7Þxƒ|ðÁÝÎCíÕØ5˜Ä Qì÷îÖ«]‰Ý­ z>lb†(ú¤»vDÑ·oß&...díÚµÄÐÐPh!ÝíEÿ 61Cý××µXwãYws!mÇÎö öù†Ò†è~‡™tG^^ÒÒÒ`cc#|£ªª //333€ŠŠ bcc1cÆ ØÚÚbþüù]ºóÀÁÁ¡ÍkŽŽŽ`0Ú¥HŽºº&¬\y‘‘Ù8}zí s#Þñ ¦¦¦ÂçrrrÂï={ü)))aûöíPWWïöØ,,,„««k›÷\\\º´¯'Û–““È#ºlCAAFFFÚ‘Flmm¡¤ô44ÉÍÍ ÅÅÅÂÿ544~£ŠŠŠ0©SsoÎ¥~%ÍÍ\Ü¿Ÿ=èÆYCçÎ /¼€… bìØ±°¶¶Æ† PYYùÜ÷ºgwïÞ 333¨©©áîÝ»¨®®FVV;ý²t‰c< @uu5222Žõë×£¦¦yyy¸uëæÌ™ÓëyH–ö9 šýÞ›õj+Ý­ †ú|"ªsáyíý뇔”„û¶ÒÝø×´ÿú¶6ël-ÖÝxÖ“5~wÈZ?É2b3´µµˆ¼¼¼6ü@Û#44~ø!vî܉ŒŒ DGGw9kkkwHÆb± ££Ó¡]Šd¨ªªÇâŇ‘QŒsçÞ…¯¯¤MêÀóŽÏ®ÐÒÒê0ž;wÕÕÕÝ›zzz(++kó^oÞiiiÅbµy­»IS–h¿¯ÊÊÊ ¯¯/òíÔÕÕ=÷3Ý”žóðaš1q"MÀ%NDqîBpàÀ°X,„„„ ±±/½ôÒsßënœUPP@yy96n܈7"++ ÁÁÁøöÛoEóÃ1âÏ”””0uêTœ:u uuu°··Çĉqüøq°Ùløùù‰d’fD±ß{³^m¥»µÁPŸODu.ô¤þôƒ Μ9ƒýû÷cÓ¦MÂÏv7þ ĵ6ëÉZ¬»ñ¬¯k|Šô!V1cêÔ©ˆˆˆ@jj* ¾¾¾¾¾8þ|‡ÏÀÅÅPPP@dd$Ølv§íN›6 ÿþû/rrr’'ž={S§Nß¡ô˜ÒR6æÏÿååµ ]gçÁé%Ó›ãóY¦M›†‹/ Ш¨(¬\¹ Ý›S¦LApp°P±NHHÀ;wzmshh(˜L& 22)))B/44´ÓšÙ²@^^._¾ @P6ë§Ÿ~ÂìÙ³ûÕ¦’’ª««QQQ@ЗYYYÏý^wÇ Ûý JÂÂÒakk =I›"ÓˆâÜùßÿþ‡‰'BQQ£GÆ+¯¼"¼KÙÝ{ݳŸ}öbbb„___ìܹ¿üò Ù>Ä1žÀìÙ³ñÍ7ß`üøñ€É“'ã믿ÆÌ™3!//ÿÜyH–÷9 šýÞ›õj+Ý­ †ú|"ªs¡'íô§444 ¨¨ˆW_}NNNxÿý÷t?þ´ÿzB_×bÝg½]ãËz?É2"3Œ±nÝ:ÄÆÆÂÞÞŸþ9üüü0uêT888ÀÍÍ K–,éð½   ¤¦¦b„ ˜6m>ÿüsŒ1›7oîЮ——6oÞ ___LŸ>®®®X¸p!fΜ)êŸCé%Ož°t„/®‡¡¤Mê’ÞŸÏ2iÒ$,_¾®®®˜:u*¦OŸŽ}ûöASS³Ûc3((Ó¦Mƒ‹‹ &Mš„¹sçöZ€›={6æÎ WWWL›6 ›7o†§§'”••7nf³—5üüüðÞ{ïa„ ppp€µµ5Ö¬YÓ¯6‡Ž1cÆÀÇÇAAAؼy3Æ÷Üïuw ²Ý¢$,,†˜ ¢8w^}õU0 xxx`êÔ©X¼x1>ÿüóç¾××qíóHãÌš5 ÕÕÕmÄŒêêjÌ™3ž;Éò>D³ßŸ·^íŒîÖC}>չГvúÓÏrøða?~‘‘‘ÝŽí¿žÐ×µXwãYoçYï'YFŽ–ºB-”––"55'NìQ|>•••0000™L|cccxxx€Á` ''&Lè´Ý¼¼}z›Ï˜››ÃÜÜü¹mikk·¹C`ii)H:k·5¡ EòWañâC00ÐÄéÓï@[[UÒ&õ˜žŸí±··‡½½}§ïuwlº»»ÃÝݽÍkíÏ£®(((ÀäÉ“qæÌ¸¸¸à矗˅¯¯o¯í—FTUU;Ô"ï/ŠŠŠèÓw»;(ÝsçN:””àïo+iS†¢8wTTTØë÷€¾³²Œ8ƳžÒÙ<4TÅ~ïn½ÚÝ­ †ò|"ªs¡§íˆºž7þÉ:¢è¿þ¬ÅºÏèÜ#ûô[Ì PX¬Z,Yò#ÔÔ”pêÔ[R%dHÞÞÞ8zô(öîÝ‹ŠŠ ØÙÙáêÕ«m2IS(Ò@XXF²††Š¤M¡P( …B¡H!TÌ ô‹ÊÊ:,^|„§O¿}ý-jÌ›7óæÍ“´JŸ!„àÎt¬Y3QÒ¦P( …B¡P¤*fPú ›ÝˆeË~BCgϾ CÃŽI’( ¥=ÉÉE(/¯¥%Y) …B¡P(}†Š”>ÑÐÐŒ+~Byy BC×ÃÔTWÒ&Q()!,, ††špuœe›) …B¡P(ƒ*fPz ÇÇÚµ   çϯƒ……ž¤M¢P(RDxxÆw„œœœ¤M¡P( …B¡H)ò’6€"}ìÙsøõ×U°±1”´9 EЍ«kBtt 1¡P( …B¡ô ê™AéÇßÃÏ?‡ã×_WÁÇÇZÒæP()#22ãÇ;JÚ …B¡P(ŠC=3(=&"";wžÃŽs0}º›¤Í¡P(RHXXœMal¬%iS(CCÃ9òSìØq%’6‡Bp45GâÃã°hÑ!œ=ƒêêzI›D¡P(}†zfPzDjj1Þ|ó(V®ôÇ;ïL–´9 EJ OÇŒT ¥H§õõÖ8~ü.Ž¿ eeE¸¸˜bÒ$gøøØÀÛÛŠ–§È4<^ ´µ•™{÷2::jps3‡··5ÜÜÌáäd ;;ÈËÓ¼F epÓ¥˜Ád2ÒÊ †ÅªÅË/ÿ KìÞ½@ÒæôˆI› ˆ{?†„„`Þ¼y]¾ßÐÀƒ²²<è‚*$$‹-’´ý¢  ÙÙe˜8‘†˜ô—()) ȶ!R“¬µ¦†MM%tfnHHª«o¢ªêòòÊñË/¸v-3Ï!r“#05Õ…››&OvÂÂ…£ ®®Ü£m—••ÁÐæ‘hè|ß;Ò±}»;.\ŒK—âqöl4¢¢rqï^bcŸ ¹™ >Ÿ@OOö°Ç¸qö1¨ÇÛ`2™—§ÎßÒÊ@Î/² —Ž.ÅŒäää´ƒ2H!„`ÆSÐÔTÅ/¿¼阜/^,±m+)C[;••—Áç7õ«-yyè齈ššH47ˆÈÂÁ‡Ã颯䡮î--?ÔÔ<@}}|¿¶#'§}ý¨©y€æfF¯¿¯­=NRûeÇP',, jjÊ=z„¤M‘zBCC*öí¨¨XCSs **΃ŽÈÚUV6ƒ¶öDTTœí÷8ù,/A^^µµ1hhHÀïôs66†Ø½{>vïž'OXˆŠÊÁ;éˆg ´´ׯ'áúõ$¼ÿþèêªÃËË ³f¹cüxGX[tÚ&!„®$€$ç{iFYY/½ä‹—^ò—ËGddþþ;W®$¢¼¼JJ HJ*À?ÿ$¢¹™møùÙÂßß~~#àà0¬Ë¶ËËËQ^^>€¿†"Jj~¡PD!„HÚÊàåС[8pà\¹² ŽŽ]O\”§¼ôÒ÷àpø¸pá?"¹›ùê«¿ +« 7on…ªªì+åW¯&âóÏ/¢°°o¼ˆ ¦AGG½_m~ÿýM|ýõuܹó>ÌÍ{_JxÍšc¨©iÄŸ¾Ý/;†:o¾y Íøã5’6…Ò*+ë0yò—3Ƈ¿"Ò¶Y¬ZL™ò%ƳÇ?¼,²v³²ÊðÃ7qî\,LL´±ví$,[æ×§±3,,!!•ââj´®–ÔÕ•áêj?¿ðð°„»»¬¬:8(iƒÇããáÃ\üýw<®^MDqqLMu`cc.—‡ÔÔ"ÔÖ6ÁÐP³Eܰ…ŸŸœœ†I…B‘b¨˜Aé’ØØ'X°à;ìÙóV¬ð—´9RÁÕ«‰X½ú(.]Ú ²j/¥¥Õ˜0á ,[æ‡O> I›ƒ‘ØØ'øì³ ˆ‰ÉCP7¶oŸÝåÐÞPRRÀÀ½xçÉØ´izŸÚ8s&›7#1q7´µUûmÓP„ÇãÃÕu'¶l™‰Õ«ÇKÚJxãßP€7¶ô[PìŒ[·RñòËGðý÷+1¾HÛ.,¬Ä¡C· e¼ùæ¼öZ´´úvþ²Ù¸u+çÏÇ!22 µµMPT”Ç!€ŽŽ:<<,àäd GÇapp0ƒÃ0hk«‰ôwQ( !ô% IDAT!qqù¸r%—/ǃÁ¨€……F]] 0xø0lvôô40fÌŒk??[¸¸˜Ñœ EÜP1ƒÒ9lv¦MÛ__:$º»f² ‡ÃÃĉÿƒ‡‡~üQ´w1ÿüó¶m ÁÅ‹àím%Ò¶%M^^9öîý—/ÇÃßß|ð‚HËþ¾ûîˆ}‚ðð÷¡¢Ò·œÇUUõððøß¿/¾è-2Û†11¹xñŃöö&’6‡òNœˆÄŽgð×_ïÀßßVlÛùðÃs8{67nl……EヲžGyy-Ž Çñãw¯½€Õ«'ÀÐP³Ïm ÂIŠpëV*þù' ññ ††ZPT”Gee=šÆéÀÞÞ¤EàˆŽŽÃÄ"Q(â&!¿ÿNÀ•+ ÈÎ.ƒ‰‰fÍò€››9jkñàA6¢¢rPYYmm5Œ3B–âîn!5¡Ê Ej b¥sÖ¬9†¤¤BüóÏæ>ßÉj9Ž={.#"â‘/Ê !X¶ì'”–VãŸ6CYYú UTÔáÛoÿűcw1|¸¶oŸY³ÜEº¨¨,Xð=~ýufÎì_Û‹ý##m*îõ‘®!8ø!¢£?–´)”ç“ÃÄôéûñúëøàƒĺ­ÆFfÏþººê yGl;lv#Ž¿‹#GÂQW׌eËÆ`íÚI} ;kOUU=ÂÃÓñï¿ÉO‹U m¸¹YÀÐP <99Ldf–¢¦¦`l¬GGSØÛ›ÀÖÖú°¶6€••Á'¤H?iiŸ|9W®$ -­††š˜9Ó³g{ÀÀ@ 119ˆŒÌƃÙ(/¯…¦¦ ¼½­1jÔpøúÚÀ×׆z:R(”þBÅ JGþøã>vî<‡‹7ÀÓÓRÒæHUUõ;ö¿X¹Ò_l‹ÿü|¦LÙ‡7ßœ€mÛf‰eAc#¿ýƒo@EE›6ÍÀÊ•þPTíE ÇÇÌ™_ÁÐPS$¹.Ž Çט¸JJ "°ph1wî·pt†ýû—HÚJ7p8<ŸOpéÒ†9ÖSS‹0kÖר´i:6l˜&Öm544#88 ‡ÝFY øâÝw§ÀÎÎX$íóùññ ܸ‘ŒÛ·ÓÀ€¢¢üým1i’3ÜÜÌÁáðšZŒ¬¬R¤§— ?Ÿ&³F؆±±,- `mmKKÈÑ*v˜šêŠ|¬¤PúKvv®\IÀß' !uÌœé†9s<1~¼òòÊñða.bbr“‡œ&äååàà0 #GÚ`äÈá9Ò¦WS( TÌ ´‡Á¨ÀäÉ_bË–™xë­‰’6Gjøä“Pœ?‹{÷>«'ËÑ£صë®\ÙWWs±mGðù.<ž=—QQQ‡5k&`ݺ)ÐÐPËöŽ¿‡?>›7·‰äBåÉüýw#8ømŒOK‹ö†êêz¸¹}„C‡^ÆÜ¹^’6‡Ò _|ñ7~ùå®]Û,² üžðÓOaسç2.\X//ñ‡Òq8<œ;‹~¸‰œ&fÏöÀþ3îî"ÝNyy-nÞLÁíÛi¸s'UUõ°±1Ä„ Ž˜8Ñ öÐÐPACC3òó+ŸÏjyTÿ2,ÔÖ *¾())ÀÌL––ú05Õ…±±6† Ónù«m˜˜èô9¤ŽBé/ùù,\¾«W—MMLê‚Ù³=0eŠ TU•ÀbÕ"66ÑÑyˆ‰ÉE|<hÂ××£F OOKê©D¡PºƒŠ”§B°|ùOhhààܹu4qSÉË+Ç„ _`÷îxùå±bÝŸO°`Á÷¨¯o•+ïIͺû÷³°kW(RRаxñhlß>&&ÚbÛ^eeöbÙ²1عs®ÈÚ2åKøûÛa÷î"ks(pùr<Ö®ý‰‰ŸCW—æ ¬DFfcñâCØ»w!V®ؤτ,YrEE•¸~} ÔÕ•d»|>ÁÕ« 8xð 0i’Ö­›*–lØ0Mì.Ùý%#£Ÿ~z·o§aÒ$'|ôÑ‹pr2ûv·l9[·R±C¤žûö]Å_EÓ¼½dëÖ¿–V„K—6JÚJ°Ù ˜:u\\ÌqìØ±¡¤¤S¦ìÜ9øòËžý°°4|÷Ý DFfcÔ¨áøÏ¦bÊg±•›d±jžÞ2Ve€É¬±±ÆxmL˜àƒž%*åó ˜Ì”•±QRRÝò—-ü¿´”ÒR6ÊËkÀãñÛ|WKKúúÐ××h#r´>××W‡¾¾&ttÔ ­­mmUhjªR„Ò+ÊÊjpíZ"þþ;‘‘YPPÇ„ N˜3Ç3f¸u¨üSXX‰èhAXJLLRR Áåò¡¯¯//+xzZÂËË –b½9B¡P5TÌ `³0nܼõÖD¬[7EÒæH ÿgï¼£¢¸Ú0þÀ.Uš ìô&D©"Ån¢KìíÃ[4–ÄÞK¬Ñ¨Q£1ö¢tEÁJ¯"Ò‹t]¶Ì÷ÇʤÃ.³e~çxÀÙÙ{fæÎÜyï[Þ¾MØ1‡pîÜ\¸ºš·[¿'ObçÎû¸wïôë'zyMrsK°g®] ‡±±66n;;Ãvéûõë7î0ŽÿãÇ ¶òÈ»wi5ê =Z)pwtIfðà-ðô‚U«ÜÉ–BÑK–\ijgIðó[Óìhaàí…yóÎâìÙ¹mNÚÛZ^½ú€#GüðäI,LL´±l™ ÆŒ±j%†ê )qˆÇëשàp¸èׯìì áäd +«>m6˜¢¢ •ùWÂÂrþ¶‚‚Ïüí5÷a±8uÚRP CU•gØà9” ¢¢ÀߦªÊû]MM ªªŠ ÓiPWW‚œ ÊÊòèÐAt: J ÓiB 9¤=ŠŠÊáëƒ{÷Þ!$$0l˜FêWWshjªÖùNee¢£3‘ŽwïÒ‘Ž””|mm ¾qƒ÷³U1ˆ‚B: Œ<6n¼…  xøù­¡V[ZÀäÉÇÀbqqûö²ví—Ë%àéyyyexôh¥ÈÄ”––VâØ1œ>„ÎU°zµ&M²j·%‡ ÐÐPÆÕ«^oŸ  øf̰ÁʕԋysHN΃½ýNܹ³ƒ÷![E=ܺõK—þK—ÂÑјl9X¹ò_øøDÁß ©+®±±Y8zÔ÷î½C°téLž<¸]ž‘ååL<}š„€€8%àãǨ©)bØ088ÃÉɸ]ÝíËÊ(**Gy9ee ”•1ñù3ee ”–V~ÙÆ¨ñ9%%•_¶1À`°PZÊh²eeyÈÉÑ¡®®:]**ŠPP óŸqÕajJJr—§ƒFãí:ÈCNŽVË0¢ªªXëùC£ÉÖÉk%/O‡’Ríg¨²²Bó¬¦V»-Yª‡(-­ÄãÇ1ðñ‰†¿˜L ê ~ðð°@¯^ù.‘‘鈈Hûw¼ŸE€Þ½»Ô2pXXt§ f’eÌ à•×ru݇‹ÂÁJlØ\üýã0cÆ)ܽ»VVíÿ’–•U gç=øö[+lßNn‡ª*6Ξ}Š£GŸ€ €eË\0gÎðvOBwîÜSüúëm%ý¬uë®ãÍ›xôh¥PÚ—4Μ ÆÞ½Þˆ‰Ù.Ô•mŠÖ‘ž^—½ðô‚-[&’-ïE~äÈ}èÕ«3._^$´0æ’šú ÇŽùãêÕptŋ0cÆÐvËëQ­! þþqxñ"ååLèëkòsmØÚêAI©ýô´–ª*6*+«ðù3,¥¥•`±8¨¨¨By9o[II%X,6**ªPQQ…ª*ÿ{PRR €·RÏd²AßPR^Λ͛Íå'M€Š f½Þ%‚†çuÒð 3Ï@Óô µŒŒL°‹†PSSBCCDYY¾ÞRîÕÆ ¯QT”ƒ‚BÝÅEEz½‹&}*“É‚ššôõ5aa¡ ##m~HS‡ PSã…4uè …Zƽ¬¬bDGg ::11™ˆ‰ÉBZZ sg¾aÃÜ\&&:ÐÓÓ›ëReÌvÂÃS0iÒ1ýŒ>}¨úÞÍåúõWøñÇàç·††ÝHÕâåuÏŸ'Ãß :vìÐnýúûÇaûöûHJÊÁäÉC°zµ;©+?üp¡¡É \+TWÒª*6,,6bíÚQ˜;×NhýHUUl˜šþ‚Í›Ç ½ÒEË9|ø1ô…·÷ÍZñlo~ŒC‡|ñðáO01~âàæRTTŽ3gBpölØlfΆ H ‰ÉË+C@@ãñôi >£sgØÙñ öö†ÐÖÖ E…ôÂfsQ^Î3l°X\”—óŒBÕÆ&“ ƒõÅû†ÏŸàp”–V‚Ãᢴ”6›ƒòr&˜L23K–V€¼¼RTU±A£É@VV¶A99:vä%¯­NpÛ¥‹Ê—¤¶ ¤$ââ ”#3³))yHHÈ‹Å‚ÆÆÚ07ï33]uƒ‰‰6U‹‚Bô ŒÒ΄ G`h¨EJæxq¥ªŠáÃwÀÎÎû÷{’-%%1b/,-{àÌá{‰¼yó;vÜGhh2ÜÝ-ðóÏ£H7è„…¥à›oŽâôéÙ5ªŸÐû[´è<Š‹+ðï¿ÿz_âÌÓ§I˜2å8ÂÂ6RåôDŒ·oÓ0aÂïØ°a,,p [N½ˆ²çÀ[¿x1§N¢¸¸žžCàå匞=Žñ6\.ØØ,' 88aaïÁd²¡¯¯ ;;#88ÂÖÖ Y¡¢J||6¼½£àí‰èèL¨ª*bøpCØØô…™™.ØlßPQTTŽÂÂÿþ}úTö%ñíç:ž']»ªBCC r Ÿ?3Ÿ_†Š ž'Ц¦ŒµalÜ FFÝ`l¬CC-*yPÆ i&00sæœÁó稘ÁpêTvíz€gÏÖ‹Ìj׳gÉðô<Žýû¿ƒ§ç¡ô‘’’]»àÁƒHXYõÆÆcIÉò5l6nnûЭ›:.]ZÔ.}Þ¼ù?þø¢¢¶Q àaÇŽûxð Ïž­'[ E D-'EcˆbN¯©ªbãÊ•pœ8áÌÌ"Œ7Ë–¹ÀȈ\#/0™l„…½Gpp"‚ƒ›YY Ð öö<ãFÿþ½(—z ±%=½oØxõ*òòt88ÁÃî®fV5)/g¢¨¨ùùeøô© EÈÎ.Fvv 23‹“S‚¬¬âZaEŠŠò ÑdÀd²Áfs ##mmu˜šêÀØX&&<‡V½yI((( eÌf&M:CC-ìØ1‰l)bCi)¶¶Û0uª ~ùExyZÃo¿ÝÁ¥KÏñøñêF³·”ÜÜR<ø—/¿@ß¾šX·n4ÜÜÚ¯ mSœ:„;î# `M»…J•”T _¿M8th&NØ.}Š#®®û0xplßþ-ÙR(j *ÕBšËõë¯ð×qùò"‘NRÍfsq÷î[=ꇄ„¸ºšaÙ2 Ø‹li| >ãéÓ$% 88YYÅPSSÄСú°·7„½½ôô„“<™‚BØ|úôEÁÛ; !!‰ C‡ê©Œb-­Ö-Üåå•!7·ÙÙÅÈÈ(BJJ>Þ¿ÏEBB.rsKAdee@§ÓÀbqøÿïÖM¦¦¼0}}MhA__‹Z¡ ”1CZ©N®¼½{w![ŽØ°oŸΜ Á‹¿ˆ\ óª*6<<BEE7o.ms刲2Ž÷ÇŸCMM «W»cÒ¤Á"µ‚—›[{û]˜?ß«W{´kßS¦G§N*8yrf»ö+.|†¥å&œ=;®®¢cü’v=ŠÆœ9gpæÌ\xxX-§ÙüïðâE Öˆ|Ü:AðõÁÑ£OðúõG n€åË]0|¸!ÙÒêðþ}?$%44ee èêv„½=/ׯðáèÜY…l™-¦¬Œ?¿Xx{GÁß?U8°'ÜÝ-0z´¥Àæ¾U_ŒyHJÊEbb.âã³ññã'°X<Ï EE:X,^•èÖMZüzzš04ìMMUh¢ "(c†´2oÞYÈÉÑ©±P\\kë­X²d–/w![N½ÄÅeÃÃã–/wÁO?¹µª ‹ƒóçŸáÐ!_°Ù\,[6óæÙ×[–l–,¹ˆ×¯?"0pm»ë«.9µ rr´ví[¸uë V¬¸ŒèèmPU¥V¡D¢¢r89톓“ œJ¶œQRRGÇ=6LGÎ [N³yú4 GŽ9.RRò™Ž¨¨ DE¥#""UPT”G§NÊ••AI ee¼rÃÕÕZôõ5¡§§‰¾}»B__ }ûv¥æõC3¤‘ÌÌ"X[oÅíÛËD"縰sç\¾üÏŸoéäiçÎ…`Ó¦Û¸vÍ 66zÍþ—Kàηؽû!òòJ1gÎp,_î"r(Õ„†&còäã8{v.)a/éé…°¶ÞŠþY,Ò®ïdñãÿ 5õnÝZF¶Š/,^|/_¦" `­Xº9ûùÅáûïO‰W ¼{—†ß_ßhhaÉ’˜0a Hyº}MY¡¡ÉNDHH’“ó  @ç—€µ·7‚™U–B¼àp¸xñ"ÞÞ‘ðñ‰BVV1zôèÄ7lXYõn³gkc}ÇÆfáåËÿ€°°äæ–@]] &&:ÐÑQ‡²²²²Šñþ}22ŠÀápA£É¢GNÐÓë -ôíË3vèëk¢kWÊ›ƒBª¡ŒÒÈîÝáë?¿ÕdK>}ú ›­øé'7xy9“-§Q‚Àܹg™?¿ÕÍrÉ ŒÇŽ÷›…É“cÕ*wèêvlµ­ƒÍæÂÕuºwïˆ ¦ÃÅe/† éC婇~ŬY¶X±Â•l)îÝ{‡Å‹/ˆ|Þ‰¦X¹ò_<~€€µbþ˜˜ƒ£GýpûöèètÄâÅN˜:ÕZ,¼²²Šù!)!!‰ü°Ã‡|)kÑHŠMAÑ‚@DD:?hrrºtQ››<<,`gg(tˆ¤¤\% ((/^¤ðÃa<<úÁÕÕl6ïßçáý{^(Krr.Þ¿ÏCi)¯ìmµ7Gµqƒòæ 2(c†´Ábq0dȬXáŠY³†‘-GlزånÞ|çÏ7@IIžl9MRTT—}èׯ;ΞÛàÊYDD:¶o¿‡§O“0r¤Ö¯#ø›âäÉ@ìÞýkIÍù²w¯7þý7/_n¢V'kŸ gç=xðàG Гl9RO^^œwcÔ¨~b_†»¬Œgç=0 'NšM¶œV“ž^ˆ'üñÏ?aPSSÂüùö˜5k¸Øx̘˜ÿJÀ†‡§€Á`AOO“ŸoÃÖVŸ 1£+’’ráã…‡#™Œa  8;›½kUÁÁ‰xð ¾¾1(**ÇàÁ}0mš ÆŒ±¬Õ^^’“skåëHIÉGzzaƒÞ}ûò~§¼9($ʘ!møúFcáÂóˆŒÜ*6“&²ÉÍ-ÅСÛðË/c0ož=ÙršÍ‹ï1yòqlÙ2sæØÕú,5õvíz€{÷"0p`OlØ0ÖÖ}IRÚ2ÈLúù5QQpsÛGV¢;©ZD‰?þÄáõUhîºÍgîܳˆÍ‚Ÿßj¡OÆÛƒD|÷ÝI?þ=Æ@¶œ6‘Ÿ_†Ó§ƒpþü3À¬Yð`ƒØ½l0™l„‡§ð«¤Ô.Ë I0€*K!>dfáÑ£h<|‰°°Ðé²°·¯.ùjŽN:µ6›‹gÏ’píÚK<| McÇöÇ‚01Ñnð{UUl¾#%%ÉÉu½9ÔÕ•¿TVÑäWY10ÐB¨g6…¸A3¤ /¯‹`2Y8sf.ÙRĆ nâáÃH<¾A,\kràÀ#üþûÜ¿¿ææºÈÍ-Åáþ¸téúô銵kG‰]ì9™I?¿† XYmÁwß !ݰ"JLŸþTUqòä,²¥H=ÕeM¯]ó‚­­>Ùrƺu×qçÎ[þ,ÊÊ8þNŸBii%<=‡àÿsh™íö¤ à3ž=KBP/™hffTUakË+kgg}}ª,…xPXX_ßhx{G!88l6ÖÖ}áînww tï.ܰÜÒRîÜyƒ3gB”” #xy9cøpƒµ“Ÿ_†¤¤\$'ç}ùÉû=3³ /O‡ž/L¥f)Y}}MÒç[ @3¤‰ŠŠ*ôë·LŸqýÉ–#dgcèÐíøí· b–ÃápáéyÙÙ%=ÚçÎ=ƒªª"V­rÇ”)CÄn•Œì¤Ÿõ±~ýu„‡À“'T€·Bkb²Û¶}ƒiÓlÈ–#Õää”ÀÉi&O¶Â–-É–#PÊË™9r ´pþü|²å &“+WÂpòd23‹0vl,]:&&:dKk¼°<ÃÆóçÉ(-e@GG£F XCté"~9P(¤òr&üýãàã?¿8”–V¢;<áÉ“UyÏñâ=&M:†ýû¿ƒ§ç²å6›‹{÷ÞáèQ¿/9hŒ±l™ † pÀÆ`³¹x÷î#‚‚x‰Dß¼I‡CÀÄDvv†°³3„”•%,X,ž=K‚·w|}£‘›[ŠÞ½»`Ô¨~pw7ÇÀ½…V†ùÅ‹÷ؾýÞ¾MÄ ñÛož™Íæ"-­qqYHLÌEBB6røF99úöí #£n02Ò†¡¡LLtЫWg*\…¢½ ŒÒÄŠ—QXX.R/‚¢LZZììvbçÎIb·Âüu™U''cøøDãÈ‘éøæ›AdËk¢’ôókX,,,6`õj±Ê©",¶m»_ßh¯#[ŠTsùò ¬]{ ·n-•èÜ›7߯¿ÿ†# ` ´µ%¯’FõJìÑ£~OÁ!}±d‰3\\L%&épy9¡¡É IÄÓ§IˆÏ†œ VV½1|¸!ìí aiÙSì< )¤ .—À›7©ðñáåÙHMý--5¸ºšÃÃÃÆ|QŒ <|‰_½&“…mÛ¾mÏk‹Wa%11ññ9HLÌA\\6ÒÒ Àáp¡ @‡±±6ÌÌtajªÃÿI%¦”1CZ lƲe.Ô W3Y¿þ:üüâðìÙ/b5‰j¨Ìê¦M·påJ=Z‰>}º’-³E|ưaÛ1oùI?ëcñâó(Pì— IDAT,,ÇÕ«^dK!—½°±Ñömß-EjÉÉ)ƒÃ.|ÿ½-6lK¶¡Â`°0rä>ôéÓEâ õáá)8rä üýãal¬¥KG`ìØþbõ|jyye I@HH"‚ƒ‘“S55EØØTçÛ0„Ù2)(%>>>>QðöŽBTTÔÔ1b„)ÜÝ_¥¬ŒmÛîá￟còd+ìÞ=…”oL&II¹ˆ‹ËB\\¢£³ââ @ÏžaföŸqÃÔT={Šg^ ‘2fH ÑÑ™pu݇ÐÐ_DjU[TÉÏ/ƒµõVlÜ8sæ '[N³hªÌ*‹ÅÁ˜1‡@îÞýA¬BMÖ¬¹Š'Ob²N$«1ܺõ+V\Fd䨫+“-‡4òóËпÿfüõ×<ŒiF¶©eÞ¼³ˆ‹ËF@ÀZ±KZÜÂÂRðÍ7GqâÄL©È—…£GýpïÞ;èêvÄ¢EN˜:ÕZbÏurrBBx%`«ómtë¦ÎI±³3„––Ù2)($#£>>Qðñ‰ªUÅÝÝnn«Œ%K.¢oß®8sf´´ÔÒn[ÉÎ.FLLbb2Ëû™šú \.55%˜™éÀÄD––=`iÙúúZB Ï¡8(c†´ðçŸÁ8zô Þ½ÛB¶±`×®¸|ùÂÃ7‰üKKʬ~üX7·}3¦?öíólg¥­#&&îîpðàTLšdE¶œz)-eÀÂbš†‰’-‡4nÜx…Ÿ~º‚ØØí"it’=Яܹgñï¿‹1|¸!ÙrÚÕ«¯âÉ“ý 55%²å´ ?àäÉ\¹55%,Xà€Y³†I´+7‡ÃÅ»wé|ÏW¯RÁbq`dÔ’2t¨>TT¨û…hR_e”!Cúð+£ôèÑ©Mí§¦~œ9gÀ`°póæR‘ ¿+/g~ñàÈFtt&bbxÿ˜L6TT`aÑýû÷übàè)¶•(„eÌ/>.—À©S³É–"ò”•10xðxy9cùr²å4HkˬúøDaÞ¼s8th*&OÜJÛÆäÉÇPYɽ{?ˆtŒ¸§ç hh(ã?¤·éòå—™Y„7–’-E*ùü™ ‡]>܇O#[N»RRR{û]pw·ÀîݓɖӮäç—áôé œ?ÿ 0kÖ0,Xà€®]Å¿dmSTVVáÅ‹¾çF\\6h4 Ћ_%eàÀ^b™À›Bò©¨¨‚¿¼½#kUF©6l˜˜´®2JYS§žDQQnÞ\*6žK, 9x÷. ïÞ¥!"" Ù`³¹èر,-{ð ýû÷Ï R¡ŒÒ A¿aáB,ZäH¶‘çøq>ü/_nɾòr&N ÂñãþPQQÄêÕ-/³ºuë]üõ×3À‡ù˜>Ý«Vy´ù\æä”ÀÕulm pòäÌ:Ÿ³Ù\p¹\¡{äç—!::NNµ GúáÐ!_<}º^lF®®û0hPoìÜ9‰l)íÎñãþ8~Ü‘‘[©Ä]B¤¢¢ ÊÊòµ¶±Ù\¸»ïG§N*ø÷ßÅR½êœž^'§ÝXºtV¬p­óyee””äëù¦äÁfsñàAŽõCLL&ìì áåå #²¥‘‡ÃEtt&¿JÊË—)`2ÙÐÓÓ䇤 ¦/’™ÒMBB¼½#áãÈÈt¨©)ÂÙÙpr2itAêùó÷ðô<Ž7–J´ÇZff^¾ü€W¯RñêU*bc3Áfs¡«Ûƒ÷ùâ½Ñ¦¦ºWJÊ¡ŒÒÀ¹s!8tè1""¨äŸÕp¹ºwÿ pèÐ4Lšd.—€½ýNØÙŠLÌõë×±sç}<þ£FõÃ/¿Œh5šààLŸ~ [¶LÀœ9vüí™™E˜9óO¬\é†Q£ú ¬¿úxò$3gžÆ!}°mÛ·07×E^^† Û//güøcÝQeÿ~üý÷ ¼y³Yê^(¿ûî$:vTƉu c‚ÉdcðàßpàÀT¸¸˜ò·?î½{½áç·}ûŠWÙeapâDöìyXëx°XìØq™™ER™;*88ÇŽù#$$ffºX²ÄcÆH^Y×–À`°ðòå¾çFttddd`iÙƒïµaeÕ[*Ã)D—ÌÌ"~É×êÊ(vv†ð𰀫«9:wV©óM›náÝ»tܽ»œÅäPQQ…wïÒðòå¼~Šðð(-­„²²<ú÷ï = ÄóÞEïdŠfC3¤Ÿ¾†ää<\¿¾„l)"CZZll¶¬,`h¨~øý÷' YGzùZ^…’‡¸wïîƒÇ -gÄpøðcܹ³ýû÷Ä“'±X²äo”•Ubܸþ8yR¸ -õÃŽ÷A§Ë‚Ã!0yò`TVVáÍ› Y'VñQQpsÛ/u¡  &&ë±k×dxz![ŽÄòøq fÍúàå匵kG!+«ÎÎ{°lYýžÒ›ÍŨQ ªªˆë×— +«óçŸCDD: 5u¯Ô¾ FEeàøqÜ¿ ,Zäˆï¾³®ãí#•ãÙ³d„„ðŒ©©Ÿ ¤$kë¾°³ãUJ15Õ‘:C5…èRXXŽÇcø•QX,æUFñðø¯2Jaa9†݆ߟ77s’U“—K 11ç‹çσ#%%tº,úõë¡Cõak«O7Äʘ! Ìœy:uÀ¡Cҕݾ1|}£1{öY¼ËŸF“‡Ã…‰‰Nœø††ÝÚ_nn 45Õšœ–ãÐ!_œ?ÿ ½zuƺucšU¡¤-p¹fÌ8…¤¤¸¹Yàܹ§‘ámïÐA±±Û„{¾dÉ߸{÷-8.@NŽ‚ÆŽµÄž=SÄ®ÄçàÁ[0eÊ`¬^íA¶”v#00Ó¦ýׯ7‹l8IàǯàæÍ—`±¸ Ñdan® eey”KuŽˆúˆˆHǘ1‡0{ö0\½ú FX,\º´°NX›´ññcN •+aPR’ÃìÙÃ1w®ŠZƒ´´~2ÑgÏ’PPð;«ÀÎÎF°·7¤îw"CueŸ(}ÆóçÉxþ<¡¡ï‘˜˜SǸ1dH±›‡J”1C9r\\L±ví(²¥ˆ ¿ÿþ»re1ìí…cíà° II¹u¶Óh²ÐÐPÂêÕ£0mšØ¸CÿòËM¼x‘ ?¿5dKi7¶l¹ÿx®%[ŠÄÂápafö JKümrr4p¹Ö¯ƒÿýωDu¢‹ÅÁ¸q‡‘YYžqà³)S†`ïÞ)$+ Ëqî\Î{ŠÊJ¾ûn.tlv”øøl‘®ˆ%(¸\±±YN@PPÂÃyù6 ´`oo# ªG½ôPˆÕ•Q<ˆ€¯o4òòÊ «ÛYYEøë¯ùpq1¥<Œê!?¿ì‹a#/^¤ð––=akûŸçåÉ&RPÆ iÀÜ|Ö¬…™3mÉ–"2xy]À½{ïÀáÔùÓé²`³¹X¿~ –.Ñê~*+«0qâDFf@CC[j­žr¹®^ ÇþýP\\… àååÜ®¢ê°’ÿV.ÿCNކéÓm°c‡pZ²Ù\ôí»l6§É}oÝZkë¾BÑ!H‚ƒðÝw'ñüù©)‰8bÄ nˆß~›@¶‰%44“&«³]VVüïNX»vå^LùüùçÉ÷øª‰††2¢£·Q‰jkPYY…þ éSAÍ®€Â`°Ð·ïÌŸo-[&¶£Zòa0X Ká7ââ²A§ËbРÞ_¼6ŒÐ¯_wÐhâa„§\¸\¯^}€·wþü3/)¦›ÏcÃÚº/u6@MãFhh2’“ó 'GCÿþ<ãÆÐ¡z°¶Öƒ‚‚t†-Š”1CÒ!ºº?áÔ©Ù zH#vv;ðþ}~ƒŸW‡üõ×<¸º¶.¾Ãáböì3 J›Í¬¬ 6m… ñؾýsðÝwÖX¹Ò½]+¨T'Ä;u*ˆVR:© 2r‹P&þïßçÁÎng³ö—‹ ‹ XµÊóçÛ“-Gèäæ–`àÀßpáÂŒaB¶‰eãÆ[¸p!,»ÞÏi4Y˜šêàìÙ¹ÐÕíØÎêD‡Çc°dÉß`2YuŒ³5¹}{† }ãh{S_”%Kœëõλté9V¯¾ ˜={¶oÿVjW{óó˾TII@PP"rsK ¡¡Œaà ø!)={J‡q›Bt™=û Øl.úõëŸ(ÄÇg£S§pw·€»»ìí ¥6ŸPsÈÍ-­eÜHIɇ‚66zpp0†ƒƒLL$ßSMÄ Œ’Ni)ÆÆëpùò"8:JwŒp5béÒ¿‘‘QØà= tt4ðêÕævT&¾Ô¬€¢«Û :@W·#æÎ=[ëG£ÉbÄœ>=‡ wª‹ÅAxø' $$‘‘é‘‘Aÿþ=áìl#XZöh³(-­€òþ h”ÿ ǦM·P×#6;»ÞÞQðñ‰ÂóçïA§ËÂÁÁøKÉW3tìH%n .—@dd:BBW¯RÁfsaf¦GGcØÛÁÚº/uo<”1CÒIHÈ“Ónøù­¡\Ÿ¾p÷î[xy]¬VA§Ó`h¨…Ë—CSSµÕíß¼ùË–]jÔÛ 8˜üò¯Õ¤¦~Âòå—ñæMjƒ¡&Ý»wBxøF÷=þ9øøDÕéWFF Øcóæñbé¶\ZÊ€…Åìßÿ&M²"[ŽÐ ––›°h‘#–,i}nŠÆÙ½û!Ž÷¯7l‚N§AUU{÷zbÔ¨~$¨=˜L6öîõÆÉ“‘‘©7o<~¼ ffºí¬N|áU@ Ä•+á`³9 ¢ŽÁˆF“…µu_\¸°€J’×EEå IBppâ‘] eØÛÁÉÉNN&-žƒWÀÔô¬[7K—ŽËç&…ð¹uë –,¹ˆ¬¬Æ=Ø Ëáë‡#’‡ =xxôƒ‡‡ºuSo'ÅâKy9¡¡É L@pp޿σ’’Ξۦä›OŸ&bêÔ?œ<¼—wwsœ:5»Õý.—À™3Áؾý>¸Üú½4ÖÂÈH°á0ÖÖ[‘ž^Èÿ?oþ%ƒÍ›ÿË-"®LzjjJøãYdKÑÑ™puÝ_ßU07§^ ……­ív¤¦~ªµ­úeeôhKìÚ5‰*©Y¯_§bÉ’¿‘•UTçžF§ÓðÃ.X¹Ò$uâËË—0~üT—6ÿ:]ææÝqåÊb± $‹¸¸l' 00/^¼GUÆÆÚprâ½ð4g5÷Úµ—øá‡Ë{{C92]»¶~Q†B2yü8³fý‰÷5ÛCàóg&üýcñðaüýcQ^^…{ÂÝÝ£G[¶xaîÉ“XâûïÿlÐ#£6›ƒ"ñúõÇV÷%hdee°`ÖÀ¢GdŸrr²ðöŽhŸUUldfÕÐ †'fн!\]ÍáïWo¤.]T`f¦C¶‰åýû¼:† 99ÔÕñdzpêÔ,ÊуõF`àZÌ›gÐhÿÝ×8îÞ}G¢:ñåÊ•pÈÉ5<}d³¹ˆŽÎÄ„ ¿#?¿¬•‰'&&ÚX´Èÿü³±±ÛqáÂØØèÁ×7S¦‡©é/˜=û Î ©s/¨Æ×7†_¾üùó÷prÚ…  „öü3(Ä€²2ääh- uPQQÀ¸qpòäLDEmÃ_̓¾¾Nœ€­ív8;ïÁ¾}>ˆ‰ÉlV{DàÒ¥ç9rââ²Zû§ˆ=ztÂôéCqúôlDEmŽ{?`úô¡HHÈÁâÅ`jú ¦N=‰3g‚ññcA«ûILÌAp°t}Ê3C¡<3êbeõ²²ŠðV7øa$V¯vo“[fjê'xx@y9³Ñ8íšt颂ˆˆ-"çÊå8}:;vÜA€oø16Ö†¿ÿõ“‰‘#÷à­äÉËËáÂ…ù¤æ$™™E2d+.^\ggɬò1eÊ tíª‚cǾ'[ŠÄrô¨öìñ›Íáß+<<,°k×dtéB%k.áá)Xºô²³KÀáügÌ ýEdBþÄÜÜR òX¬¦Ÿst: ºº¸~}‰TWØi éé…ˆG@@ž>MBy9½{w““ `k«yy:LLÖ£¢¢Šÿ½ê’Í‹;âçŸGSqú€'pöl^¾ÜÔæ¶8.ž?Ïϳ‘]Œ^½:ÃÃãFõÃÀ½ë,Œ ‹M(,ü M²²2øõ× ˜={˜ÈÍ…Û“ÂÂrøûÇáÉ“XÆ¡´”-ŒiSXYõá+›b÷î‡8|ø1¼¼œ¥¥\;f"餥ÀÆf>üýû÷$[é0,ôíË{!—••ÁŽ“0s¦m›Ú,(ø w÷ÈÉ)©7¼„w’áÔÔ” ££[[}üø£«Èf:NNÎòe—•ÎÏi¾ Ý» fRzãÆ+,[v tº,:vì€ÿýŒ%Ëàææ¶ýû÷Äîݓɖ"p*+«`bò ö왂)S“-Gbqu݇èèLÈÉÑ ¤$={&cܸdËK*+«°cÇœ=p¹\lÚ4‹;’-MlhI,€çEÔ¹sܸ±}ú´>©6ÏãåÕ«|ãFLLÖ—$Fxò$¶ÞïÐh²06ÖÆéÓ³)£~ýõ6^¿NŽ{+Ú.Ax÷.FÂÛ;))ùÐÒRƒ››9FꇡCõ!'GCTTÜÜö×ú®¬¬ œœLðûïÓ¨$£àó/ÞÃß?¾¾1HIɇ††21r¤œœŒMò=bÄ^ÄÅeF“…‰‰Nš%écŸ2fH:ÕI¡®^ý†7ls{ eeâë6•…3þ><ŽŽmjÁ`ÁÚz/Þ ™F“å'éSR’CŸ>]`jÚ zz] §×šèÔI]» gR—––†°°0µÇåȽ{A€““&Lè-¶ÏKÀ»wÐÒR‚——44„;9y29Æ„áâÅçxóf³Ä­:øûÇaÆŒSxûöWhi‰F20q¿?}Mnn)\]œœ ±q£:wn¿Éž‚‚ÔÔÔ„Òvii)˜L¦PÚnŠW¯Ò°aÃ=dg—""Ö“¢£½Ôó†Ë%0yò1<þ4šlã=&Ëåápˆ:ŸÿóϘšJ–Áº=hèüåå•!88·n½Á³g‰¨ªª› àyÈÈÉÉb÷î)ü„ÔaaaHKKšfЦéÙ³'¬­­ÛµOOÏèÕ«3öì™"Ô~âã³áíoïHDGgB]]#GšBYYÿüó¢N2k: %œ81 ÆÕöÎÍÏϪVQ'=½/^¤#00aa)àr Ü..¦pq1…¡á¹ìrsK0pàoüpw:yyvo¿­?½8_UUU(*òK[SÆ I‡Ãá¢G•øóÏ9ÉtŸ››‹¸¸8(#‡  4üñÇ[üú« ;µ©-.—Àáxó&ŠŠtXYuCÏžêèÞ] Ý»«¢K—†Ÿ9::¶©ï†¸|ù2¦OŸ.ðvéôNèÚu&X¬|útE mvîü-äå{ 7÷¸\á¾Ôu›«¥yðàG  YžQ›7߯ӧ‰ðó\èQ[÷ûÓ×øú¦à¯¿¢°hÑ88´ÿõ£¥¥á„HÅÅÅ!77W(m7&“ƒ;B‘”TˆãÇÝ¡¡!¹‰×„ñ¼‰‹‹Ã‡(-­BYeeU(+«BI ¥¥LþïÅÅ äåU‚Á`¡Cy¬Yc*ä¤%4uþ¬¬¶ +«¨Ñ}ªé'ÄΓ°xñ<\¾|YP)ZÁ´iÓpéÒ¥vëÃáÂØx=¶mûžžCÚ­ß´´‚/†(ää#=½¨Þ9™¬¬,‚Àòå¼ÄÌÕaí¦UT111––JK ŠÇ“'±ð÷CAÁgôêÕ#F˜bäH3¤¥`ýúµ É5Çþ®]“¡¢RûY'ŽÇ·úx|áL1‡F“E‡ (+c´]a½Œ ›ŸáéSôíÛö•ª¢¢rüþ»9zõêÜìúðíõ²%Œ—w6›‹S§1cÆ9¨©)6ý…&غõ.Ö®yùÆK„µawš‹™™.ºwï_ßh‰3f'ÀÑјlõ"®÷§¯IN–Å»w“ÛT*ºµ´Ç}J˜Æ’æàæ6¡¡É¨ªb‹ìµÜ„ý¼éÓ§{‹Î_ee**ªD6´RÔhÎùKLÌiÒü7'¸{÷-ÂÂRЭ½Ý_¦)þƒŒyI||6ÊË™2¤O»öÛ³gg,Zäˆ Ôòø.—÷~ô¨pêÔ,ôèÁ[tüêåUª¨ilPSSÄØ±ý1vlp¹Þ¾ý_ßøùÅâìÙ˜˜hãëÃûߨ‡ðð8}z6,-{ÔÚGœŽo}ƪš‰е«*òòJÉ–!Ìœi+CtìØ}ûvm¶!CÜ¡Óeáåå,ClÜ8òò’oOus³À£GÑdË(ÙÙÅHHȃƒÙR$šùóíI1dH¶¶úiÈE””ä)C†€ñõ©“d±1Øl.23‹ðúu'¤¥)“æµHÑþÄ£W¯Î¤å®ñó‹kÖµÊáp›'§=¸{÷m;(Odee0hPo¬[7Ož¬ÆÓ§ë‘œœÇ7 } ›ÍAvv1ÆŒ9„'$jìKÇ[˜”£««Q«¦4#iy (D773ÄÇg7XRO Ntkó IDAT„‚66zdK¡   Zþý7œŸ »>èPUU„¶¶:ôô4an® =ÈÈøü™Ž[rBt¹wïÆŽíOZÿÞÞ‘u¼‚Å⢢‚‰Å‹/`ÍšTV²„+NHIÉo²Ê‡Ã‡ÃÅöí÷àéyyy’‘cLò—E) «Û‘2fPP„µµÔÔ”ðèQ4-r$[Ž@ Œ‡µµåÈ–BAAA!µ¬_?** PR’ƒ¢¢t:ψTí ÎápQTTÝ»Ÿ#;›ƒ­[§@NŽÖjeÌôô4ñþ}>Øl.?;0Eûáîn/¯‹(.®h´>¸8ÂÂr*Ï…ˆÃ`°pñb(~úÉ4 ††ÝpòäLÒú—t¢£3ù¿ki©}1ÉCCCÊÊòèÐAêê<Ñ‚‚44þ3"%''Á̬òòJ¡«+ž•¦(c†`lÜ UUl|üø zzšdË¡ :ŒA£ÉÂ×7S¦ &[N› J€¦¦*LL´É–BAAAAAAÑׯ¿›Ím×r¬í‹…Ewdeµ®2`` &&zÐÒOC@%• ôô4A§Ë"!!‡l)bMyy9vìØA¶ ‘œœŒ¿þú«]û,**ž={eeeصkW½ûIÚ±VSSÄСzxü8†l)m&((vvFT2ÝF¨y“ÑŽ¤2 Î¡xC?ÁBÆ|¡½‘Äù ›ÍÅñãþ˜>Ý:(-Gä¹sçÂÃÃkÿš×EKÆ8]'âeÌäåéèÝ» ââ²É–"Ö”••aÓ¦MdËñññ8yò¤Ðû™?>>|ø())Á™3gø¿ÿúë¯õ~GÒŽ5À+Ѫ*6ÙRZMy9/_~€£#U’µ1j^çMQs|´¥šHâøio¨s(ÞPçO°´×|¡½‘ôùÉÕ«áÈÎ.ÆüùödK ëpíÚ5„††Ö:ÿ5¯‹–ŒqºNÄʘ!% Ôoß~$[…âãヒ’@ïÞ½‘@²"rps3CEE‚ƒÉ–Òjž?6› ;;ʘÑ-¹Îk޶´C!X¨s(ÞPç¢9Hòü„Á`aß>Ìkmm ²åˆõ†´ëB¡ŒRÂÀ½ðæÍGÍ-ò, àââ‚@GG]»vÅÙ³g±jÕ*tíÚÚÚÚ¸rå ÿ¨¨( 6 ŠŠŠ044ÄåË—[ÕN`` ,--¡  cccܹs——777\¸p˜6möïßÏÿ^~~>¬¬¬P\\Üàßô矢W¯^èСæÌ™.·ñºÎ¢ —ËÅòåË¡¦¦MMMìܹ@ËŽwjj*œœœjµëé鉰°0xzz"//žžž Ann.ÆŽÛl}’t¬µµ5`n® _ßh²¥´šÀÀx˜˜hCSS•l)¡%×yKö­yWïÒ¥KÐÓÓC‡0{ölp8œ:ããëûS@@@³ÚiI?‚x6Pç<6lØ€®]»BAANNNÈÈàUX£ÎŸø ˆùÐðµÐÔg ÝCšç'gΣ¢¢ Ë–¹-¥]ièúú|À•+Wлwo())a„ õ:¾¾. !ê×IKhêØÐ:u*nß¾ ÈÌÌDÿþýqóæM@vv6 €¢¢¢Ö #(¤‚˜˜LB[{‘œœÛ¦vrrrˆ€€€fïŸMÈÊÊ7n$¸\.qüøq±k×.‚Ëå{öì!ôõõ ‚ ˆÏŸ?ÚÚÚÄÑ£G ƒAøùùjjjijgÏZÔNNN¡ªªJœ;wŽ`0ÄíÛ· eee">>žHOO'”””ˆ‰'¡¡¡Ä7CCC¾Þ#GŽ#FŒhðo@,\¸`2™Drr2¡®®Nøûû íøµ”K—.ÍÖ÷îÝ#dddˆŸ~ú‰(//'BBBuuuâÚµk-:ÞqqqDçÎkµmiiI<~ü˜(**"´µµ‰€€¢ªªŠøðáÑ¡C‚ "==PPP¨W› ŽuKG{pàÀ#¢ÿ͇Ã%[J«°³ÛAlÝz—l "ÌûSKö­ygggòòòük9%%…ÐÐÐ |}}댯ïO Íj§¾¿«­ã'66–ˆmöþ-¥%í êÙ mçP˜Ï›–œ?BGG‡HJJ"JKK‰qãÆ‹/&‚ƒ!Ìó7mÚ4bÚ´iÍÞ_Pó…Æ®…Æ>kìТ:?iéño)yy¥„‘Ñ:âÈ‘'B룽 rrršµoc×Ð×çûÝ»w„‚‚qãÆ ¢²²’8xð €8xð`­ó_óºhl| æ±-ùû[CKÚoìØØ]µj1{öl‚ xórbÖ¬YAÄßÿMXZZ¶EïKÑ™åS6›CþL\¼Ú¦vZó²€øüù3A‘˜˜HÐét‚ÅbAoÞ¼!´´´‚ ˆ+W®¬õýåË—+V¬hQ;'Ož$ìííkµ3iÒ$â·ß~#ÒÓÓ Dff&AÁd2 "22’ ‚°±±!Ο?ßèß’——ÇßfkkKܺu«ÙÇCÔŒ;v$ªªªøÛ~ùåbâĉ-:ÞM‚ tuu‰·oßA´x²Ð–cM¢g̨6*¾~J¶”“‘QHhk¯ ‚ƒÈ–Ò Â¼?µd߯_¤YYYü~íííù“ŸšããëûSKÚ©ïïjËø%c† ž ÒvEŘqûömBGG‡ˆŽŽ&‚÷bZTTD5CÔŒ‚˜/4v-4öYc÷€ÆÕù‰°‹Ÿ'†ÝFTVV5½³ˆÓ’—íÆ®!‚¨}¾×¬YCL:µÖ÷-,,š4f44¾FPóXQ3f4tllŒúûû=zô ‚ .\H,]º”èÕ«A1oÞ·þþq¸sç-víšEE¹¦¿ A4ç^SMff&ÌÌÌjm355m²¦ÆAMDù:i õݣÇGII „åË—£¬¬ ©©©ð÷÷ÇèÑ£Û¤‡2fHŽŽFxú4 ŽhÆk©©©ÁÎΩ©©µþ8q¢Åí|úô©Ö¶‚‚¨««¨{3™2e ®_¿ŽK—.aâĉü²4ðõqÊËËC§NÚÜnyyy›ÛTÜÜ,àë+~%Zƒ‚`c£:ÙR$I™ìA=Ú êÖ† ìß¿¸ví F£‹dC¿úÄ|¡±k¡±ÏyäùIeeÖ¯¿o¾{{éKÔÝ’{MÇŽ‘——WkÛ××x}kÞ,î46Fåääàââ‚Ë—/£¼¼pttÄùóçQZZ ›6õM3¤{{#W 22£éIÀÅÅ!!!ˆ‹‹TTT`РA¸uëV‹Ú9r$?~Œ””¼ä=7nÜ€‹KýIFމììl9r3gάõÙíÛ·-~«èÍ%55÷ïßÀ+#õÇ`Ô¨Q-jCNN%%%(,,„……!99¹ÅZ$ýXWãæfŽøøl¤¦6ýи\ÁÁ‰pp¾É‘¸ ÉãGPÏQGRÏáîÝ»áèè:Ž!C†`æÌ™ÈÊÊ"[–À‘ÔóW æ ] }ÖÚ{€´ÍOvî|€ÒÒJüúë²¥BKî5#FŒÀ•+Wø^‘‘‘n²ÆÆ¸\' ©1:jÔ(:töö¼2ÁÎÎÎ8xð ÜÝÝ!+Û6seÌ"ôô4ѽ{GøùÅ’-¥^ °uëVØØØÀÅņ††077‡§§g‹Úéß¿?V®\‰AƒÁÕÕfff˜4iÜÝÝëÝ_NN&L€¢¢"œk}¶bÅ ~^IÄÆÆ?ýô`hhˆ^½zaáÂ…-j£OŸ>°¶¶ÆÀ1~üx¬\¹Æ 㮩©‰¥K—âõë×¶#éǺkë¾PSS£GâóÀ‹ˆHGqq…T®ô›æŽ¦äñ#¨gƒ° ÎaãÌš5 éééèׯ\\\0eÊlݺ•lY|¨ó×<1_hìZhì³ÖÞ¤i~”€3gB°}û·èÒE…l9¤ÐÔ½¦æù?~péÒ¥}Oó…Æ®…¦®“ÖÜDq~ÒÚãßEEåpvÞ[[};ö½@Úü{÷ÖÔÙ¿üÎd†-"Š‚(ΊŠκg‹VqÔjµ¶ÖVmµ¾ýÕú¶Vm«ÖY÷ *­Zm•ª8_·u‚X¡"S›ä÷G$JEDM8îÏuå"É99Ï7á0rç•űcÇàíí ggçrí_Ö9TÚÏúµk×””X[[?u¼Ò~èãç ¼^ôù }|Cÿ.¥Þ ü\Íôê凌ÀÝ»)¨_ßñù€««+\]]_ù8ÅД%%%§NBXX.]ºôÊm#33³§ÖaQR©íÛ·/u›££#ºwï®»-Ä?…•MÏž~x÷Ý-ÈÈÈ…\n.t9ÏuìX$Ëé1±X\îóüß?/{œê@_ʃßCý255E‡*¬=~ÿ Cÿ/”u.<ï<ù÷ï€ÄÄDüùçŸÏÜßÏÏM›6­òÿŸÌœ™L‚¯¾"t)‚+ë*ígÝÏÏ~~~Ï<^i¿ôñsPUUäßébfRÍøûׇ££öï¿*t)•BLL æÏŸo¿ýö¹½7ˆô%0°$±QLš]€K—þA``#¡K!""Ò‘ÉdpppxæÅܼòXðª¶m;ƒýû¯â»ï‚am]Cèrˆ*{fT3b±={úaÏžK˜2¥«ÐåÎßßçÏŸº ªf¬­Íж­¾aÃZ ]N™NŸÖ®€Ô¡Ã>""ª<ž9ZupõjfÏÞ…©S»¡];O¡Ë!{fTCC†¼†›7ïãæÍª7›8‘±èÙÓÇŽE¢°°HèRÊ…ÆkUÛ Åˆˆˆ*›‡s0~ü´mëéÓ{]‘`fTC¯½æwwìÜyNèRˆª­îÝ}›[ˆãÇo ]J™""¢8Ä„ˆˆ¨’P©Ô˜llÌqèÐu¼óN'¡ËÑÑ.Éj\½2øûI¿LMËp¿(WWW88TžðŽ^ ¿ÆmêÔ©0`€ÐeTkuêÔyî>E7n=nܸ;'ÁÅE^•U.ü›XYYìØÆøúþûõi4šÊ9>U˜9sváСë8sf¤Rv]«Î вW®Ä!,ì]øúº ]4 V®<Н¾úýú5ÃâÅoÀÌL&tYz5yò½bcS±k×E¡K¡ ¦ 2ÖáÂ…lß> M›V¾ £˜»»öîŠví<ñæ›+ñãB—¤VVfhÛÖ£Ò,ÑÅ%Y‰ˆˆ*@Q‘7žB@À|=z 7ŽÃÒ¥#^hb~¢êŠaêÕsÄ!­°hÑA ]U¥R…ñã7àüù„†ND³fÏŸJh¦X¹rfÌè/¾Ø‹©S·¡ ÀøÏÙž=ý%øÏß?ÿ¤!66:5´""¢ªL£ÑàСë Zˆÿüg7† k…ãÇ?A÷î¾B—Fd4fÎŒ½žžƒ5kªÆ§ÝT6¥R… 6âÿûÛ¶½ƒ-ê ]R¹‰D"L™Ò›6ÇáÃ7Ñ¿ÿRÜ¿Ÿ!tY¯¤{wäæ"""JÐ:Ž‹„……)^{Í]Ð:ˆˆˆª"µZƒýû¯¢[·E;v=¼¼œ1 sçö‡µu ¡Ë#2* 3H§fMLžÜK–Frr–Ðå)•*Lš´§NEcëÖ hÙÒ]è’^J—.Þ8p` ‹Ð³çbœ9ó·Ð%½49š6uáCÂ59~< žÉ$‚ÖADDT•äæbãÆS ü&l„‡‡ÂÃ?Æš5!pwçRÇD/ƒa•0iRØÛ[â‹/~º2¥R…wßÝ‚ˆˆ(lÝ:­ZÕº¤Wâîî€}ûÞGëÖxã•Ø°á¤Ð%½´ž=ýðÇסV ³bvQ‘§NE#0óeéÃ;ÉøòË}hÙòÿ0oÞ^xâØ±YX½z4¼½]„.Ȩ1Ì LM¥øê«!صë"Ž‹ºÒ³¢"5&OÞ‚£GoaëÖ ð÷¯/tIzaaaŠ5kFcÚ´îøì³]˜1c'”J•Ðe½°ž=}‘ššóçciÿòå Pä3Ì ""z¹Ø¸ñúö]‚Ž¿ÂþýW1yr\¼ø,X0žžNB—HT%H….€*ŸÎaàÀ˜93 G΄¹¹‰Ð%‘¨TÚ ãÏ?oaÛ¶ hݺjÅD">ø ;¼½ká½÷¶"*êÖ®GG+¡K+7/¯š¨_߇]äûsüx\]mááÁ²ˆˆˆ^„J¥Æ±cQعóº™L‚>}šböì>hݺ>D"‘Ð%U9"F#LfªÔÒҲѩÓ¼þz|ýõP¡Ë¡WTd>|[·N@Û¶B—dP·o?@HÈ:aÆqðó«-tIåöå—û°ÿUœ>=»ÂÛîÛw 5rÁÂ…Ã*¼m"""c£Vkpñb,¸ŠÝ»/#9YÖ­ëcøpôéӔ˫Ö3¡RÙÛ[â»ïÞÄ–-gpàÀ5¡Ë¡W R©1uê6>|›6«òA íá°ÿ4xz:£ÿ¥Ø½û’Ð%•[¯^M›Š[·îWh» E®\¹‡¼*´]"""cRPP„?ÿ¼…?Þ‰fÍæ¢ÿ¥ˆˆ¸Q£pîÜgصk †÷gAT8Ì„ž)(¨1Æë€?ÜŽ&MjÃÕÕVè’è©Tj|ðÁO8xð:6l‹öí«ÏU¹ÜÛ¶MÀ¼y{1eÊVܼy³fõ†DR¹3ÜæÍëÀÙÙ\ƒ·w­ k÷ĉۀŽ«Ï9BDDT Eþü󼆣Go!/O‰V­êaòä®èÙÓuëÚ ]"QµÄa&T&¥R…×_ÿ¦øùçÉ•þ =¦R©ñá‡Û±oßlØ0®ZOê¸sçyÌœ¹íÚ5ÀŠ£`mm&tIeš93 W®ÜáCÓ+´Íë×ãñûïÓ*¬M""¢ÊH­ÖàÆ?…ˆˆ(œ={‰:x¡W/?tëæ{{K¡Ë$ªî.0Ì çúûïdô豓&uÆôé=….‡ÊA¥Rã£v`ÏžKذa:uj$tI‚»t錷––¦Ø¸q\¥žäòرH¯Æ¹ssQ»vÅôˆjÝz~ 3fôªöˆˆˆ*“øø‡8~< Ç߯ɓ·‘žžƒÚµmѱcCtéâNqR|¢Ê…a•ÏŽçðÑG;ðÓOïT«¡ ÆH­Ö`úôíØ½[dtîÌ £XRR&Æß€èè$,_> ]»z ]R© ‹Ð¤Égøè£^?¾£ÁÛ‹‰IA»vÿÅîÝïU¹UnˆˆˆJ£PäãôéèG½/n#&&ÖÖfh€Ž"0Ð õê9 ]&=à *¿iÓ~BxøMìÛ÷>ÜÝ„.‡J¡ÑhðÑG;ñóÏç±~ý¸Jûf]H……E˜1c'~ùå"fÍêwßíR)—K›4i3RS³6ÙàmmØp_ý;®_ÿ2™ÄàíU´2qîÜ]œ;ƒÿýïoDE=€H´l鎎¢cG/4mZR)‡T †T~J¥ #F¬FBBø°ÒÏ;PÍ™³ [¶œÆÚµcЭ›ÐåTj?þyóö¢_¿æX¼ø ˜šV®ù÷ɓ·àêÕ/`kkaжBBÖ6ngÐvˆˆˆ*‚F£Á;É8{ö.λ‹óçcðÏ?i01‘¢iS7øû×GëÖõѶ­W!2^ 3èŤ¥e£oß%¨]ÛÛ¶½ÃOq+‘yóöbÍš¬\9 }ú4º£…‰7ÃÓÓ ë×…££•Ð%édgÀ×w,ŠáÃý ÖŽR©‚Ïl|úi_„„´3X;DDD†’›[ˆë×ãqñâ?8{ö..\ˆAzz¬­Íàï_­ZÕƒ¿}4o^&&•ëà "zi 3èÅÅĤ W¯oÑ¿ ,X0TèrÀâÅñý÷‡ñÝwobÈׄ.Ǩܹ“ŒQ£~„R©ÂæÍã+t9Ôç9r d2 6l0\‰³gïbàÀe8uêSŽ &"¢J¯¨H¨¨D\¹r—/k/ÑÑPT¤F­Zrøû××õ¼hذ&ÄâÊ7””ˆôâ£Izaõê9bíÚ±1b5ÜÜì0eJW¡KªÖV¬8‚o¿ý cñ<=°ÿ4Œ¿ýú-ÅŠoUš!:½zùá³Ïv#/¯5jfõˆˆ(¸¹Ù1È "¢J)66—/ßÕ+Ú˵kñÈÏWÂÚÚ M›ÖA·nññÇ=Ѽy8;Û].U öÌ —¶eËiÌšõ3¾ùf(èe8ˆ IDATFŒh+t9ÕÒºuÇñÙg»1oÞ@ŒgøU/ª2¥R…O>ùÛ·ŸÅ§ŸöÁ»ïvº$¤¤d¡yóÿàÇÇ W/?ƒ´ñúëßÁ×·6{Y‘ T*5îÞMÁ ¸~]{¹z5¹05•Â××ÍšÕEÓ¦nhÞ¼ê×w¬”xQ…aÏ zyo½€ììÌšõ3LMeìPÁ~úé˜;wæÌéË Cd2 -/¯š˜7o/¢£“ðÍ7ÃÆÑÑ -[ºãàÁk 322rqõj|¥nˆˆ¨úÈÉ)@dd"nÞ¼ë×pãFnÝJD^^!d2 5r+zõòCóæuàí]‹ó´ÑSfÐ+™4©3rs 0mÚO03“qâÉ ²k×E̘†?ìÎ7¢z6aB <<œ0iÒ&ÄÆ¦bݺ±°³3ìj"eéÙÓË–…C©Téý¹ãÇo:tðÒëq‰ˆˆŠ%&f 2òÁ£ñ¸~=±±©P«5ËÍáë[þþõ0fL{x{×BƒÎ .ˆ¨\8Ì„ôbÞ¼½X»ö8Ö­‹  ÆB—S¥ýþû_˜8q3Þ~»#æÎí/t9UVdd"BBÖA,aÆqhذ¦ uÄÆ¦" `>vî|íÛ7Ðë±?úh¢¢`ß¾÷õz\""ª~ÒÓspóæ}DG?@däDE=@dd"Š<@:öðñ©WøúºÂÇÇ®®¶WMDFŒ«™~h4Ì™³¡¡g°qãx6º¤*)<ü&Æ[‘#ðå—9VÔÀRS³1~üDFÞÇÊ•£Ñ¹s#AêèÒåxâË/éõ¸­Z}7ÞðÇôé=õz\""ªºŠ|ܾˆÈHmXqû¶ökjj6ÀÞÞÞÞ.ðòª‰F\аaM4lèkk3+'¢*†aéF£ÁGíÄÏ?ŸÇŠoáõ×9äDŸNžŒÆ[o­ÁÀ-±xñp¤°°¼»v]ÄçŸ÷d~’o¾9€;Ïáüù¹zû¾ß¹“ŒŽ¿Â¯¿NE«VõôrL""ª:’’ˆŽNÂÝ»)ˆŽNÂ;IˆŽNÂýûk낊šðövAƒÚ¯öö–WNDÕ'%ý‰DX´h¬¬L1qâf|ýõ®r¢'—.ýƒµèÕ« .Æ £™˜H±dI04pÆþ³ÑÑIøòËÁJÅVCÏž¾øþû?píZ<š4qÓË1‚µµZ´¨«—ã‘ñQ*UˆMEttþþ;wî$? 0’¡Pälm-àáá„ œÑ±cCx{k{[¸¸È®žˆª;†¤W"‘Ÿ>r¹9fÌCFF.&Oî*tYF-*êF^‹€O,Y ‰¤âÞDÓcS¦t…‡‡Þ{o+ââÒ±fM,,L+¤m?¿ÚpuµÅÁƒ×õfDDD¡]»<Ÿˆˆª¤¤Lܽ›ŠØØüýw îÜIÆ;I¸w/ EEjH$b¸¹ÙÁÓÓ mÚÔÇÈ‘máááOO'ö´ ¢J‹ÃLÈ`6m:…Ù³Áĉ1{vö&x ÷ïg oß%puµÅŽQ£†‰Ð%U{W®ÜÃèÑkQ³¦ 6o~ÎÎÖÒîgŸíÆÉ“·qôèÌW>–R©BãÆ³1gN_ŒÝNÕ‘ÐRS³q÷n2bbR“‚˜˜Tܽ›‚ØØTä䬬ÌP¯ž#<<áåUõë;ÂÓÓŽ01ágœDdT8Ì„ gôèv°±©÷ßEJJ.Æ?”/ --C†,‡\^[·N`QI4kVûö½#Ö oßï±uëxy~¥“=|±nÝqÄĤ ^=ÇW:Ö… ±ÈÉ)@§NÂLhJDD/'55ÿü“V"´(,²²´ÃBÌÍMP¯ž#êÕs@çÎàááwwÔ¯ïGG+Ÿ‘þ°g\DDÞyg#4¨‰õëÇòi9(ù6lŠ<ìÞý^…}úOå—‘‘‹Ñ£×âöí$¬_?mÛz´½¢"5š4ù dI“:ëîÏÏW".. 8—ú¸èè$¸¹ÙÁÌL¦»ï«¯~Ǿ}WpúôlƒÖLDD/¦°°qqéøçŸ4üóOîÝK+q½¸‡…©©õë;¢^=G]PQ`Ô¬i#ð³ "ª\Í„*Æ;É=z- ”Ø´i<||\….Ip……E¥öT)((Â[o­Attvï~îîTGåQPP„©S·áСëX²$ýû77h{|Š»wSñã£~\Ñ#·Ð·o3¬^=ºÔǼóÎ&ìÛw]ºx£W/?5FHÈ:4kV_}5Ä õÑÓŠ{WhƒŠÔ¡Åƒ™P«µÿšÛÛ[¢n]ûGÔ­k:u´·]\l8|—ˆª;3¡Šáéé„ßÿï¼³ ýû/Å’%Áe.ÝZPPSÓª{z&%)0|øJüôÓ;%fW©ÔxçM¸z5»wOeQÉ™šJ±rå(|ñůx÷Ý-HHxˆwßíòÌýóó•%zH”—F£Áõë 01‘!%E-þb±ÅYtY‘o;v,QP«5ps³ƒF\»__WþCLD¤G))Yˆ‹KGBÂCÄÅ¥#>>ýÑWííÜÜB€L&››êÖµGÆ5Ñ­›¯.¼¨SÇ––3É4‘±ªºï©Ò‘ËͱmÛ;˜;w&LØ„>è†?ìñÔj o¿½o¾Ù½zù T­a­Zu·o?@ÿþKñë¯Sáâ"‡F£ÁôéÛqâÄmìÜ9 ÞÞ.B—Iå kWðqs³ÃçŸÿŠøøtÌ›7è©ózçÎó8v,+V¼U®ãj4„‡ßÄþýW~iiÙÉ$(*RA£T*mab"…\^ã™Ç‘ËkÀÄDŠÂÂ"ÚÇÄť᧟þ‡Í›OÁÞÞAAÑ»w5f°ADôII $$<Ô…ƒ‹‡¸w/ ùùJ€T*†‹‹µkÛ¢vm;4kVµkÛé 9ÄbþÎ%"zY 3¨BI¥bü÷¿Cи±+>ûlλ‹eËF–ß¹råQ„‡ßDxøMܸñ%lm-¬XÿÒÓs°iÓ)Àƒ ôë·{÷NÅڵDZ{÷%¬[7-[º [$½°qã:ÂÅEŽ)S¶"11Ë—¿ssí¤­·o?À„úömV®N$áðáرãœî>¥RUÊ~€¹ù³?½377Å¿ó æñ±ÒÒ²±cÇ9Èdtëæóܺˆˆª2…"÷ïg >þ!3˜˜‰„„‡HLÌDbbâãÓQPP@Û³¢V-9\]máæf‡fÍê¢N;Ô®m‡Úµmáâ"‡TÊ寉ˆ …sf`nÜHÀ„ › PäaÙ²èÔ©ΟÁ A?@¥RC*• W/¿gÎ`¬¾ùæ~ø!EEj€T*…… Š|,[6ƒµ¸Bz/Æbô赨[×›6½ të¶÷î¥C¥RÃÖ¶ŽÿvvÏéòò ѵëBÄÇ?DQÑÓA˜˜H0cFïgoY±â¾ùf? K¼T*AíÚ¶øóϹbUi99HHxˆû÷3˜˜û÷32]¨›`llÌáâb£ &\\ltÁ…››jÖ´yªUNJÂÊÉ)ÀÌ™aؽûÆŽí€}û® --*•ö¾H$š5£Ëœ_Ø(ùhÑâsäæ”¸_"ÃÚÚ áá—˜CƒŒSLL FŒXhÔ¨&ÂÃoéˆ énݺž=¿-µW ýdð‹/bôèv¥nß´éæÎÝ]æãüÞÞµÊUQe”Ÿ¯|Ôƒ"÷ïg">>IIŠG½)´†B‘§Ûß®®¶¨UK9jÕ’? -ltCCðUjœ”„eaaŠ~‰ví<1kÖÏæP—Øçãw m[Ïr}’]ÙmÚt……ʧîW©ÔÈÊ*Ð 9a aÜêÕsÄÞ½ï£oß%8xðŠçª€¢"~ûí/üöÛ_èÓçù!·w-|þùÌ™³ ¥eÏjµæ¹€ÏŒÿo"‘v¾DT™=êM¡òñàAf‰"11éé9ºýÍÌdpuµ}RØ I7]HQ|¿µµ™€ÏˆˆˆôaU æB¥R?õ¦K£Ñ '§3fìÄÚµcªN?òò ±bÅÝð’+*R!)IQbRP2^ééÙHLÌ€H¤£âßfÌØ¶m=`ooùÜc…„´Ã‘#·püxÔS=,T*µnnŽÒ˜››<Ú;6DHHé=:ˆˆ ­°°ÉÉYxð ))Úß™))Yº¯d"99 iiٺǘ˜Hõ¦Ðùðöv)ѳÂÙÙ¦J|øADDÏÇ0ƒwþ| ¾úê÷g~z¬TªpàÀ5ìÛw}û6«àêôgëÖ3ÈÎ.(sŸ¢"âãâÍ7WãСéUzyÚª,/¯cÇ®‡Z­)µ7EqH7sfX¹B:‘H„¥Kƒø5ÒÓs¡V— 'Êê ]Ú6±X ›Xº4˜«—‘Þ!))II $'+t¡Dñ}Å÷?Ù›B$ÁÑÑVpq±³³ š5«+¸ºÊQ³¦ jÖ”ÃÉÉJÀgFDD• ß)‘ >ÌÁàÁ?”kß?Þ‰¶m=áàðüO²+¥R…eËÂuËi–F*•@"!$¤=&NìÌ ÃˆMš´±±©Ï è€Ç!ÝÞ½WЯßóC:[[ ¬\9ǯxj›…ųÌҷi°råè*·RV~¾òQñdP¡ýúäý¹ºÇˆÅ"88XÂÉÉ5kÚ V-[´léGGmháà`…Zµä°··„L&ðÙ‘±á»%Ô‚ûQT¤~î:ë¹¹˜1c'Ö¯[AÕéÏöíg‘––ƒ'çN(&•Šab"Ä xûíŽ|ƒiäNž¼?þ¸@ûO|Y̘±å éÚµóÄ”)]±|ù‘CG¬¬ž=öûßÛ$1&Oî‚ví<ŸÛU©©ÙHKËFjj6’“HKË~Ô›âqXñàAf‰ 4%q‰ÂÍÍ­Z¹ën‡ööV\ž”ˆˆ ‚«™à®]‹× #ùûïdH¥’g.C)‰°bÅ[èß¿yWùòŠŠÔhÓf3Ÿr ‚D"‚¥¥)&Mê‚1cÚ—ù†”ŒKrrÒžÓgÎü F‘Hô̹+ºtñƆ ãÊuì¢"5úö]‚›7ã¡Tjwúôl¸»;”ºll*æ?jKŒÆkcß¾÷ù您 +*R#-- ii9HJR 5µøz&ÒÒ²… ¤§k¯?9—“L&%jÖ´ÖNNÖpv.yqp°â²¤DD$$.ÍJ•KLL öᅧß~»‚«W ‹ ÑhtŸn‹Å"˜››âäÉOfÜì/¿\Àûï‡B­Ö@$Ò2vvxï½ ŒÙ–K¿Uq EÂÃoâ÷߯âÈ‘›(,,‚DR2°‰DX¾|$ hQ®cÆÅ¥£sço›[@ƒË—ÿÎÎ֥¤@óæÿ ‚¹¹ Ž77;=<3"ªHEºÅDR’⩎,ždf&ƒ½½%œ­aoo {{KÔ¬i{{‹G÷?¾^žI‰‰ˆˆ*†Ty%%eâàÁëØ·ï Ξ½ µZ±XûévóæuðûïÓ„.ñ¹Ôj j×þ€6ˆqv¶Á´iÝ1lX+˜˜p”Wu“Ÿ¯DDD¸Š®!++2™D·BÉ•+_”;¤Û»÷2&NÜ ˆŠúê™={²²òѰá'€U«F¡_?ãéÕDTÕ)yºð¡8œHMÍFzúãëÚû3Ÿš@ÚÂÂTN88<TX=ºn+89YÃÒòÙË7)†$¬ÐÐPŒ1â¹û‰Å¦05­33O˜™y22"//ÒÐ%¾33OØÚöddB^^€Ò—fÕ‡àà`lÛ¶Í`ǧ²•÷|ÖÃÄÄffž¨QÃb± –VîöFB&s@bâ÷eîçâò”ÊT¤¦n-÷±õ‰f¨:P*UHOÏFzzŽ®‡ÄÇ9HOÏ)qŸöv6>Ì}j©e;;maoo''kÝum/ KÝð{{K˜™Éz¦DDD•Â~4L•ÂÎ;˽oa¡ ‘‘™¸sǯ¿^¦¦•sösFƒíÛï¢qc9š4±‡H`ÐöÊÿ&š íEÎg@{®ÄÅå௿\áç×îîåëQX¨ÆÒ¥×±dIÙí-ZtS§¶‰I¿ªëU…††bÏž=Ú&‘¾deå#55KF_JÞ—´4mP‘••_âñR©¶¶°³Ó^ìí-áåå ;;KØÙYÀÖÖB×{ÂÞÞvv\̓ˆˆèE0Ì JaèСB— wC‡jçC¨|ÓXyTäùÐõê9–¹Ïk¯uzî>† T*y^R¥›[ˆŒŒ\<|˜ƒ‡su!Ä“¡„6¤ÈÕÝþw¯ SØÚšÃÑÑêQ@a‰úõõ¦°Ô…ÅÁ…\n.г%""ªfHE…T½•'¤"È 2„ÂÂ"<|˜« &ž (´—œ'îÏ}´o ŠJG,é‰âÂÓÓY×c¢ø¾'ƒ SSþËDDDT™ð/3U(µZóTQ@” (rJlÏÉ)xêXVVfËÍagg¹Ü¶¶hÔȶ¶Å·Í!—[<ÚÇ\·7†DDDôRŠ}úÀ×׷ĶŠ<'Š·µk×bÞ¼yHMMŰaðnÝ:ˆÅâ {m©béë\Þ¾};fÍš…¤¤$ôèÑ*ÕãpàÚµk˜8q".^¼ˆ:uêàóÏ?Gpp0ÆŒƒ{÷îaÔ¨QøþûïÑ»wïRkÔç9yùò=,[ŽC‡®C"C¥RC¥*}ßþI…‹‹üQo‡|äå"/O‰ŒŒ\äæ> %´½Šo+yÈÍ-@nn!rr ¡Pä!/O‰¼Ão¼øøx 4›7oF=ðí·ßbÈ!ˆ‰‰Arr2úõ뇥K—âÍ7ßÄÁƒŒK—.ÁÆÆ'Nœ€‡‡nݺ…„„´hÑ#FŒ€Z­Æ† pæÌ8;;cäÈ‘˜?>V®\‰Õ«WãĉX½z5Ú´iSêóR©T8þ<¢££‡–-[bÔ¨Qèܹs¿ÂTQôq.ÿõ×_ Ahh(z÷îU«VaÚ´ièÚµ+rrrУGÌž=GŽÁ©S§0pà@¸»»ãûï¿GDD–-[†N:•ZŸ¾ÎÉ£G#±téaœ={2™EEÏH1éÖmÑ3·™››ÀÜܦ°²Òöd077µu 88XÁÜÜææ&°±©5dzK˜ÁÒÒLwÛÆÆüQpaÊU4ˆˆˆˆŒà 2:r¹_ý5d2Ú·o)S¦ 44íÛ·‡Z­ÆÌ™3!‰©TŠéÓ§ën/^¼°cÇtêÔI7WÀŒ3 •J‘——‡={ö yóæº¹ ú÷ïÞ½{cÇŽ˜0a ñùçŸÃÄÄõêÕC“&M™™ ™Lû†¨  VVV …R©ÔÕ,‹!—Ëuû•æË/¿„‰‰ <<<àããƒÌÌL¾’$4}œË¡¡¡4h øàƒ°~ýzÀo¿ýLž<Ð¥K„„„ ,, ‹Å°±±©é³‡s¼ì9YT¤ÆåËipqù#F¬†H¤í±ðï!%¥‹E˜8±3ºtñ†¥¥6°077y4©erµODDDDUà 2:%___üù矺Û‘HSSSH¥RÝíb±±±ðòòÒÝ–Éd˜9s& >>¾Ä6hذ!ââât·]\\t׋ۧO9rËåèÖ­fÏž ¹\^®ç%‘HàèèøÔq©êÒǹœŸÇmܸ1íy wwwݶ¼¼¼g)ù·W9'ããÓ‘–öx¥ F™L•J µúéI/K¶+†½½%<ËÝU/ŒOF'55µÄíäädØÙÙ½Ð1¬¬¬‘‘Qâ¾]»v!33ÖÖÖOµ‘––›2©Ñh°xñb¤¥¥!,, ùùùÎe[[[$''—z\kkktèб±±%.+W®|µÂËÁÝÝAAµ˜ø=îÝ[ŒßŸ†O?íó¨·…véO©T ‰äé€D$Ò®tBDDDDô, 3ÈèÄÆÆâ·ß~ ]>rõêÕåþ¤¹X·nݰwï^Ý›À³gÏbäÈ‘H$èÖ­>Œ»wï’’’ðË/¿ ((¨Ìc.X°:u‚T*…¿¿?F…û÷ï?sÿ={öàúõë/T7U-ú8—»víŠíÛ·#11põêU?~„'NàÖ­[€ÜÜ\´lÙ»wï.õX†:'¥R1š7¯ƒwÞé„Í›ßFdäqäÈ üßÿ DïÞMagg @;¼D*• °P…Û·“ô^U 3Èè´iÓ~ø!áåå…ºuëb„ /tŒÎ;#88>>> B÷îݱpáBXZZ¢Y³f˜>}:Z¶l‰îÝ»ÃÇÇC† AÏž=Ë<æèÑ£‡&Mš ((Æ üyótÛœœ0eÊ\¼x€vnƒ={ö¼ø @U†>Îåþýû£[·nhܸ1:w}ûê‚· `Þ¼yhÓ¦ ‚‚‚àåå___ >¼ÔcUÔ9)‹Ð¨‘ ÆŒiÕ«Gãúõy8}z6/~¶ddä¼""""2^"FSöàe" ň#ð¢§a~~>Μ9´hÑâ¥ÛŽŽFLL ¼½½áææVb[ll,nß¾ ww÷§æÐx–‚‚œ;wùùùhÚ´)œœœtÛRRRpùòe´jÕ ¶¶¶/]ó³Œ1°mÛ6½›ÊçeÎg}Ë×®]CRRüýýamm]b[BBnܸWW×§æ×0¤—ýù€ŒŒ\Èåæ¨Šˆˆˆˆª€ œ”Œ’™™™^–,mР4hPê6ww÷'–‡©©):tèPê6GGGtïÞýEK¤*N_粟ŸüüüJÝæêê WW×Wn£"1È """¢²p˜ †DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a©ÐÀ°aÄ.Áè………!88Xè2<Ÿ‹……… ]UQ 3HPuêÔÁСC….£J:t(Z·n-tÕZe9ŸOžtEÆáè ähPÆIDAT˜+h•áµ """¢ªI¤Ñh4BADDúS«Ö4,_þl!t)DDDDD†psf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTDF#tDDôr X†sçî–kßË—?‡³³+"""""2¸ ì™ADdÄlQ®ýêÔ±gADDDDUà ""#Ö·o3H$¢2÷‘HĘ2¥kUDDDDDdx 3ˆˆŒ˜Úµk±¸ì_ç}ú4­ Šˆˆˆˆˆ a‘‘2¤ž5ý‘D"F§N —›WpUDDDDD†Ã0ƒˆÈÈõìé™LRê6FƒÁƒ[VpEDDDDD†Å0ƒˆÈÈYZš¢{wH¥O2™Ý»û P‘á0Ì "ªl •JUâ>©T‚ž=ý`nn"PUDDDDD†Á0ƒˆ¨ èÚÕ5j˜–¸¯¨HÁƒ_¨""""""Ãa˜ADT˜˜Hѯ_ósgXZš"0°¡€Uà "¢*bРP*µCMd2 ú÷oþ̉A‰ˆˆˆˆŒà "¢*¢m[ØÚj—`U*U4ˆ«˜QÕÄ0ƒˆ¨ŠHĺ92­Ðºu}+"""""2 ©ÐU57nܬí¦Mm¶¸uë¦`uÔ®]666‚µODDDDU{féYJJ RRRi»Q#GÔªeQ£ZÒ> }þùùù‚µODDDDU{f€··7œiû“OúbÀá–d=vì˜`mQõÀžDDULñ¼DDDDDUà """""""2* 3ˆˆˆˆˆˆˆÈ¨0Ì """""""£Â0ƒˆˆˆˆˆˆˆŒ à """""""2* 3ˆˆè™Æ˜˜¡Ë """"*a=ÓÁƒ‘™™)tDDDDD%0Ì "Xxx8|||`bb‚-ZàÂ… ºm?ýô<==!•Jáââ‚… ê¶Í™3ŽŽŽ055EçÎ_®m×®]C»ví`ff///„††’““Ñ£GlÞ¼r¹~~~HNNÆðáÃqâĉ x%ˆˆˆˆˆÊ‡a‘€âãã1hÐ ÌŸ?™™™}-Z´Ô¯_2™ ™™™ÈÏÏÀÊÊ ¡¡¡P*•Pæ¶ß~û ...˜}päÈ@.—£[·n˜={6äry™Ûbcc www]yyyèÝ»7mxQdUVfBD$ +++ddd”¸o×®]ÈÌÌÄž={0{ölÌ™3·o߯ùóçannÐh4X¼x1ÒÒÒ†üü| <ø¹Û¬­­Ñ¡CÄÆÆ–¸¬\¹ ‰*ðÙ½†DDêÖ­öîÝ‹äädÀÙ³g1räHH$ÄÇÇ£qãÆèС$ Μ9…BX°`:uê©T Œ5 ÷ïßî¶   œ8q·nÝäææ¢e˖ؽ{·Ïžˆˆˆˆèåp˜ ‘€:wîŒàà`øøø iÓ¦8þ<.\KKKôïßóæÍC`` LLL “ÉP¿~}LŸ>Ë—/Çš5kФI899áÂ… º•NFýÌm 4À¼yóЦM´jÕ ‘‘‘ÀðáÃuÇ“œœœ0eÊ,Y²-[¶¬Ð׆ˆˆˆˆèYDF#tDDUɱcÇàíí ggçr?&::111ðöö†›››î~…BsçÎÁÉÉ Mš4A\\îÞ½‹ÀÀ@àܹsÈÏÏGÓ¦Máää¤{\YÛ !!7nÜ€««+|||žYWJJ ._¾ŒV­ZÁÖÖÖ`ÏŸˆˆˆˆè\`˜AD¤gÕýÍ|uþDDDDdp8g†DDDDDDDdTf‘Qa˜ADDDDDDDF…a†DDDDDDDdTf‘Qa˜ADDDDDDDF…a©ÐUE)))‹™à ""HMMEjjªÐeUI"F£º"""""""¢rºÀ>ÐDDDDDDDdTf‘Qa˜ADDDDDDDFE à/¡‹ """""""*§#ÿ}ŸdÀ¥IEND®B`‚bm3.7.0/doc/html/a00133.md50000644000175000017500000000004011365042632013133 0ustar tlktlkadf7f097b382870b4d268e7fd95e3769bm3.7.0/doc/html/functions_0x6c.html0000644000175000017500000000752011365042644015470 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- l -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00154.md50000644000175000017500000000004011365042636013142 0ustar tlktlkeb882bb4e0ab3795814699af93b4e5e9bm3.7.0/doc/html/a00202.png0000644000175000017500000000452011365042646013243 0ustar tlktlk‰PNG  IHDRØ(œ²4ôbKGDÿÿÿ ½§“ IDATxœíkHTÝÆMlrÔj*3M±ÌKPYbY1EXT¥`$%õ¥¤ŒˆÈnBÒíCHHÑ…h¦@´"H‰ìÂTH]Ͳ™ÌšÔ4³FËyþü{pÆ9gœrêí}÷œ}9k­½Îy<{{/’„@ ðÞ:àߌ˜@àA„ÀâãXa2™ððáÃ?‹@ðW“””„ððpûJ: ×ë @⇛‡^¯w”û¼Áz. ýÇËËËi½Xƒ DL ð B`<ˆ˜@àA„ÀòË{ùò%Ξ=;¡ü3üüiŒF#rssa6›íêÛÚÚ——×çüo¥¾¾yyyxöìÙŸÅ£ü²ÀªªªPPP0±ü#üôfݺuxýúõoõ¹sçNìÞ½§N²«ommÅž={úœÿ­dddàñãÇðñ‘ýWì¿1ET ´´­­­¿ÍŸÉd½{÷ .ü6¿“É„¬¬,ÄÄÄüéP<Ê€Ìf³aÓ¦MÐh49r$8hjjÂüùóqôèQŒ3Z­§OŸFvv6´Z-BBBpñâEÉΡC‡‘‘![–ó³aÜ8qBê×ÖÖ†éÓ§£®®ðôéSÌš5 ƒFtt4 ƒÔ÷ƈ‡ŸŸPQQHKKƒÅbAZZŒF#àöíÛ˜|87nÜH²ïÃåÈ»w“Ãøøx§íëׯçÒ¥KûÔ·´´P¥Rñòå˲SŠËÕøzSXX(­WzÖÈŽ(Ýg9PÊ{o)õuÇ®’À\åB)Öþ '0¯ÿ7J ¬ZµÊí/\Z­V”——#00 ¿þj`?õõõxþü9BCCo×VSSƒ×¯_#66aaaRýÇQYY‰ÄÄD螯WWW#""¢ÏÚÇ]]]4h[×ô¥¸äÆ÷;bSÊûïêÛ¥\ü¬M {z¬×둞žn_?PþËÈ Lìä<ˆ˜@àA„À"&x!0Àƒ DL ð B`<ˆìnúÙI,üÇé³UJü|‘@ðs8ûù¢>‡Xƒ DL ð B`ùÑý zÄIEND®B`‚bm3.7.0/doc/html/a00215.md50000644000175000017500000000004011365042646013141 0ustar tlktlkab8344fe5ca9ee5cee68474055b0ced2bm3.7.0/doc/html/a00172.map0000644000175000017500000000017611365042644013243 0ustar tlktlk bm3.7.0/doc/html/namespacemembers_type.html0000644000175000017500000000611011365042652017161 0ustar tlktlk BitMagic: Data Fields
 
  • bit_operation_count_func_type : bm
  • decoder_big_endian : bm
  • gap_operation_func_type : bm
  • gap_operation_to_bitset_func_type : bm
  • gap_word_t : bm
  • id64_t : bm
  • id_t : bm
  • short_t : bm
  • standard_allocator : bm
  • word_t : bm
  • wordop_t : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00211.map0000644000175000017500000000052611365042646013236 0ustar tlktlk bm3.7.0/doc/html/a00047.html0000644000175000017500000002631711365042651013436 0ustar tlktlk BitMagic: bm::copy_to_array_functor_inc< B > Class Template Reference

bm::copy_to_array_functor_inc< B > Class Template Reference

Adaptor to copy 1 bits to array with base increment. More...

#include <bmfunc.h>

Public Member Functions

 copy_to_array_functor_inc (B *bits, unsigned base_idx)
B * ptr ()
void operator() (unsigned bit_idx)
void operator() (unsigned bit_idx0, unsigned bit_idx1)
void operator() (unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2)
void operator() (unsigned bit_idx0, unsigned bit_idx1, unsigned bit_idx2, unsigned bit_idx3)

Detailed Description

template<typename B>
class bm::copy_to_array_functor_inc< B >

Adaptor to copy 1 bits to array with base increment.

Definition at line 4627 of file bmfunc.h.


Constructor & Destructor Documentation

template<typename B>
bm::copy_to_array_functor_inc< B >::copy_to_array_functor_inc ( B *  bits,
unsigned  base_idx 
) [inline]

Definition at line 4630 of file bmfunc.h.


Member Function Documentation

template<typename B>
void bm::copy_to_array_functor_inc< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1,
unsigned  bit_idx2,
unsigned  bit_idx3 
) [inline]

Definition at line 4658 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor_inc< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1,
unsigned  bit_idx2 
) [inline]

Definition at line 4649 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor_inc< B >::operator() ( unsigned  bit_idx0,
unsigned  bit_idx1 
) [inline]

Definition at line 4642 of file bmfunc.h.

template<typename B>
void bm::copy_to_array_functor_inc< B >::operator() ( unsigned  bit_idx  )  [inline]

Definition at line 4636 of file bmfunc.h.

template<typename B>
B* bm::copy_to_array_functor_inc< B >::ptr (  )  [inline]

Definition at line 4634 of file bmfunc.h.

Referenced by bm::bit_convert_to_arr().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00248.map0000644000175000017500000000042211365042651013237 0ustar tlktlk bm3.7.0/doc/html/functions_0x66.html0000644000175000017500000001143311365042644015411 0ustar tlktlk BitMagic: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- f -


Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00152.map0000644000175000017500000000274211365042636013243 0ustar tlktlk bm3.7.0/doc/html/a00135.md50000644000175000017500000000004011365042632013135 0ustar tlktlkcbc05b3e6de6a92dc07f12a1c81b8844bm3.7.0/doc/html/a00193.md50000644000175000017500000000004011365042645013145 0ustar tlktlkb8b63974427b6f1fdfb028b86cf4b732bm3.7.0/doc/html/a00212.map0000644000175000017500000000024311365042646013233 0ustar tlktlk bm3.7.0/doc/html/a00136.png0000644000175000017500000022740111365042632013251 0ustar tlktlk‰PNG  IHDR›«gµ–bKGDÿÿÿ ½§“ IDATxœìÝwxÍçãÆñûŒH"$Vb[íY+Fì"ö¨Pµ7UZªUÕ¡FÔ(ÕšÕ&öÞ¥Ô(Ej·fIƒÚ"‰çüþðm¾õ5I>ï×u¹.g=Ï}NОûzžçc²Ûív//Àlt¤”MH0”MH0V£Höï߯   £c¤UªTQ¾|ùŒŽqfâ€p ¡S§Nò÷÷7:Fªáçç'___£c@\°² @‚©W¯žFetŒÏÛÛÛèoœÙ€CÙ€CÙ€CÙ€CÙ€CÙ€CÙÀ—/_ÖæÍ›Ž‘à"""äççgt 0 eCiíÚµFLj—/¾øBW®\yâc÷îÝÓ¼yó’8$”MGPxx¸Ñ1 Y¢l`»Ý®éÓ§«iÓ¦jÕªUìö³ÐÐP 6LË–-SÛ¶mÕ²eKmÚ´I_ýµZ¶l©6mÚhûöí±ãüöÛoêÚµ«4h Þ½{ëôéÓ±9rD=zôPƒ Ô¥KýòË/̱mÛ6ùúúªqãÆ?~¼l6›$iîܹjÙ²¥4h ·ß~[7nÜ$}üñǺsçŽ>þøc;vì©ïmÆ êСƒ7n¬ &Èn·'øçÉeÜ>}Z‹E+W®Ô'Ÿ|¢E‹içÎŠŽŽÖáÇu÷î]-[¶LݺuÓĉ•)S&­ZµJíÚµ‹ÝªvãÆ =Z={öÔúõëU«V-}ôÑG²Ûí Ö| víÚiãÆêÓ§>ýôS]¼xQÑÑÑ:v옎=ª… jþüùúå—_tèÐ!½>üðCõêÕ+6³ÉdR† dµZŸúÞzôè!«Õª\¹rÉÓÓ“mwÒŒ§ÿˉ,W®\6 СC‡bo;99I’L&“d±XboÿãêÕ«Ê“'Oìm«ÕªŽ;Jz¸ê)o޼̙7o^]¿~=övÖ¬YcÿϸժUÓ¡C‡4`ÀeÈA•*URçΕ!C†z_f³Y™2ezl\H XÙÀ0!!!ܾsçŽ2f̧1Ò§O¯»wï>rßîÝ»®ôéÓ?6Ghh¨\\\ž9¦ÝnWÿþýµvíZ}üñÇŠŒŒÔG}§\VQ60ÌÕ«Wµoß>IÒ½{÷´víZU­Z5NcT¬XQ{÷îÕ;w$I'OžÔرce6›U©R%èÊ•+’¤àà`íÚµK+V|昋-Ò!Cd±XT¼xq5jÔH7oÞ|êó÷ìÙ£ .Ä)7¤Vl£`˜%JhæÌ™Z¼x±.]º¤"EЍY³f }á1Ê—/¯zõê©k×®*T¨N:¥¾}ûÊÙÙY… VûöíÕ»wo/^\gΜ‘···^}õUݾ}û©c6jÔHëÖ­S=”)S&>}Z}ûö}ÿ|½fÎÜ®Aƒêë½÷šÈô¤¶ R¶Ê&)ÎС‹uàÀyíÜùžví:£3¶kïÞ³’¤¿ÿþÒÐl6›]fóÓK¤%Khøð¥jÔ¨”¦Oï,GGk¦€DGÙ e¹|9XÕ«Õĉíաë±÷Ÿ,<9;sæªÞxc¶,úá‡Þm»€*€Â¤ׯ‡iÑ¢ýêׯnŠ.š$©hÑZ·nˆ2dpRóæSuøpÑ‘ AP6H1fÏÞ)WW'uìXÅè( ÂÃ#£V¬ ²eóªmÛÚ²å„Ñ‘à¥Q6HBBîé»ïö¨wï:rrr0:N‚qqqÔ‚=Õ¦MEõì9_ß¿×èHðR¸ì€aΜݲX,zóÍFGIp‹Y'¶WîÜ™õÞ{ËuíZ¨Þy§±Ñ± ^(›${áá4oÞnõìYS..ŽFÇI4o½Õ@5|ø2]¿ªqãÚÊbaC €”…² @²·pá^EFF«GZFGIt;VUÖ¬Ô·ïBݺuW3gv‘£#_ݤTä’µˆˆ(}ûíÏzóÍÊ”)½Ñq’DÆ¥´xq_íÝû§|}g)4ô¾Ñ‘à…Q6HÖ/> ûêÕ«¶ÑQ’Ô«¯ÔªUõ×_·ÔªÕWºz5ÄèHðB(›$[ÑÑ6}ýõv½þú«ÊžÝÕè8I®xñœZ»ö-ÅÄØÔ¼ùT;wÝèHð\”M’­+tõjˆú÷¯gtÃäÊ•I«WRöìnjÑbšúËèHðL”M’%›Í®¯¾úI­[WTž<™Žc¨L™ÒkéÒ~ªTÉSíÛÏÔöí'ŽOEÙ YÚ¸ñ˜.\¸¡ÓsvN§¹s»Ëǧœºu›«åËŒŽOÄõ3$;v»]S§nU³feU¨‡Ñq’ «Õ¬É“_WŽnzë-]»¢(ã$/”M’Ÿ~:©?þø[S§ú%Ù1™L1¢‰ÜÝ3jôèUº~=LcÆ´Éd2:H¢l M›¶Mõê½¢%r%ÙêÞ½¦²eË Aƒütóf˜¦Lñ•ƒƒÅèXÀ™M’—½{Ï) à‚®ot”d¯yóòòóë£mÛþP§NßêîÝFG™ìv»Ýèð¾–Ýn×Ò¥ýŽ’büþûeuêôräȤï¿ï%w÷ŒFGv°² @²qøpvï>£AƒXÕ%KæÖš5o)4ô¾Z´˜¦ÀÀ›FG†Q6H6¦MÛªòåó©fÍ¢FGIqòçϪuëÞR¦LéÕ¢Å4;vÑèHÒ(Ê&É©SWôã¿kȆFGI±²fÍ eËú«D‰\jÛv†öì9ct$ie€d᫯~Rñâ9T¿~ ££¤h..ŽZ¸°—5*­N¾ÕªU‡ŒŽ ±þúë–Ö®=¬)S|e2™ŒŽ“â98X4mš¯ÜÝ3hàÀtóf˜zõªmt,ieÃÍšµC¹sgVóæåŽ’j˜L&ÝBn3f®^ ÑøÈl¦Ì¸(›êÚµP-Yr@cÆ´”ÕÊI ­oß:ÊžÝUo¿½H/ÞÖôéåèÈWA‰‡ÉjöìrssVûö•Ž’jµjUA‹õÕîÝgÕ¶í ݾnt$©eĆÞ×Â…¿¨W¯Úrrr0:NªV­Z!­[÷–nÜS³fStá £#H¥(›fþü=2›ÍêÒ¥†ÑQÒ„Â…=´~ýeΜ^ÍšMÕÁƒŒŽ ¢l`ˆû÷#5{öNuëæ¥ Ž“fdË–AË—PÕªÕ®ÝL-[vÐèHRÊ&†ð÷ÿU÷ïG©W¯ÚFGIsœÓiöìnêÕ«¶ÞzË_Ÿ}¶N116£cH%¸€$£Y³~–¯oUeÉâbtœ4Él6郚©X±z÷Ý%:sæªfÎìÂ*3/•M’ÜÊ•¿éúõPõí[Çè(i^Û¶•´|ù@;vQ>>SxÓèHR8V6HR6›]3fü¤Ö­+*wîÌFÇIUüýýÕ©S§x½ÖbÉ Ì™›«T©F ?”ÀÉŒe·Ûޤ)”M’Ô¦MÇtþü Í›×Ãè(©ÖÒ¥Kãõº¨(›¬Ö2™L œÈþþþZ½zµÑ1€4‡² @’š1c»^{­Œ ö0:JªÕ®];£#$ QQQ”M€8³ @’Ù»÷œŽ R¿~ÞFG$Ê&IfÆŒŸT½zaU¨ßè(€DBÙ Iœ<ù·~þù´ú÷¯kt@"¢l$fÍúYÅŠå·wq££e€Dwùr°V­úMýúy§š+žŒ² @¢ûöÛÊžÝM-[V0: þãܹsZ°`A’ά‰'J’ÂÂÂ4~üø'>/<<\ŸþyRF€(›$ªÐÐûò÷ÿU={Ö’ƒƒÅè8øS§NiÖ¬Y‰>OÏž=uáÂIRHHˆæÎûû1cÆ<ñ5aaa=zt¢g8(›$ªyóvËb1«sçjFG6oÞ¬I’§§§NŸ>mp"‰² @¢‰ˆˆÒ‚{Ôµk ¹¸8ÿÃf³iðàÁruu•‡‡‡Æ'Iºuë–êׯ¯É“'+W®\rww×¼yóôÎ;ïÈÝÝ]9sæÔâÅ‹%Iòöö~dÜ:hÿþýêСƒ®_¿®:h÷îݺvíš|||^8ßœ9s”?~¹¸¸¨[·n²Ùl ÷æ$Ê&‰fùò…†F¨[·šFGÁÈÁÁAW¯^ÕÊ•+5aÂ-_¾\QQQÚ±c‡îܹ£Ë—/ë“O>Q=äîî®ëׯkèСúðÃ%I:~üø#ãž>}Zaaaúæ›o”-[6}óÍ7ªZµªîß¿¯;v¼P¶˜˜ûì3¥K—N… RÉ’%c·ãHÞ(›$ŠM›Ž)(è–ú÷÷~þ“aˆB… =R•*UJW®\‰½íââ"I2™Lrtt”Õj½Ø,‹ÜÝÝco'Åœe€Dñõ×;Ô¨Q)(àþü'Ã7oÞ|äöõëו%K–—7<<ü¥ÇrQ6Hp{÷žÓ¡C©ÿzFGÁ3jýúõ’{ÆR“&Mâ4†ƒƒƒBBBtûömIÒþýûuîܹ8gY½zµNœ8ç×H~(›$¸Ù³wªZµBªX1¿ÑQð U«VÕСCU»vm-ZTùóçWïÞ½ã4FT¥JU¨PA-Z´Ð°aÃT£FØÇ=<<4pà@ýöÛoÏgÈ!Z½zu¼Þ€äÅd·ÛíF‡zÞ”—×çš;·»5*etœ4Åßß_:uR\¾æEDDhß¾}rssS… â5ott´~ýõWI ¬Îv’¤7nèðáê\¹²ÜÜܬ¬Y³Ækž¸ŠÏçà¥XŸÿxqsæìR¾|YÕ AI££à899ÉÛûåq·Z­òòòzâcîîîjذaìí¤*š‡mtLhè}-Yr@={Ö’ÙÌÕà -¢l`.Ü+‹Å¬^5: À ”MDTTŒæÎÝ¥NªÊÅÅÑè8ƒP6H«WÒ­[wÕ½{M££ DÙ AÌž½SMš”QîÜ™Ž0e€—¶wï98qY½zÕ1: À`”M^ÚìÙ;Uµj!U¬˜ßè(ƒQ6x)7µuëïêÓ§ŽÑQ€XD+*Êft M²@Ê6gÎ.åË—U ”4: ^BTTŒbblrrrxé±V¬P›6•âõÚÀÀ›ÊŸ?«L&ÓKe ‹Ð×_ŸRΜC”+×ÛÊ”)½œ”!ƒ“œ­rqq’››³œœÒ)CG¹¸8ÊÉÉA28*}zG99YU»vqåÊ•é¥rie€x ½¯%KhäȦ2›_®@Âiß¾ý =/&Ƥà`g]¾ì"‹Å®’%oÉd²¿ôüÙ5wî—Ê!*ί½uËYý媜9Õ#Ç]½LçtàÀ*yxôÙì¬;wîéÎI yä9&“I‹Yf³$=œ,22Z’täÈ'ñŸHÃ(›ÄÛÂ…{e±˜Õ¡Ã«FG¤|ùò©]»vÏ|NT”YÁÁκqÃIwî8ÊnX°T¨p=AЦ°°tŠˆ°*(ÈU%JÜŠóë³f½¯“'³èÏ?Ýtù²‹ò廫lÙÂÿSÅMÛ¶­d·ßV±b5oÞnI¿?»Ý®èè˜Gî³Z-jР¤<<2Æ}R”Mâ'**FsçîR§NUåââhtHòòò’——×c÷_¾¬Í›kýú#:x0PÒÃ=vûÃ3FòQÿþu$ÃèÑ«tôè.Y,îZ¼xf¼V¼­ZuH|¯tî\f…†æ×àÁ Ô±c9:ÆïklÞ¼™õÉ'ke2Ùe{ÎQNÑÑ6uéR=^óLv»ýå«kiÎÚµG4pà÷Ú·o”rçÎltü3g®jóæZ³æ°Nº"‹Å¤˜»þýÐj5«D‰ÜÚ°aˆ,–—¿~TLŒMeÊ|¨àà{’¤+ªZµBñ§Zµ±º|9Xv»]&ÓÃr,sæô8°¾:w®¯‚sÆ£êßÿ{ÙlvÅÄ<½qÊ™3“ÍÖP ~¸€x™?·ê×/IÑ”Œ=zQ¼FU«~¦:u&hÒ¤M:uêʶŠÙô¿k L&“¾úªs‚M’´oߟ±E“ƒƒE+Wþ¯q,³†m{Ûn—l6»nß¾§Ï>[§ >Ö”)?*4ô~œÆmÚ´¬V®(GY­O~ÏV«E­[WÔúõGe³±6ˆÊ&qöûï—µÿyuï^Óè(ø—_~9«o¾ùYAAÏJŠŠz¼`ú‡ÉdÒÈ‘ÍT¸°G‚Í¿rå!98Xþ3wŒÖ¬9¬¨¨˜ç¼êÉÚ´©$w÷Œn·?\‘v_“&mQ… c4~üݺu÷…Ç­XÑS›7UΜ™b³þ›Ýn—»{Fõï¿PuëNÔªU‡(€8¢lg ü¢¢Es¨FÂFGÁ¿ôëç-oïâ²Z/QþÍjµ¨L™¼êÕ«V‚Í­µk-—îÞ} ;OÇk<‹Þz«L¦'m‰±éÞ½HÍœ¹C¥K¨á×êÚµ'>÷yzfÓ¦MCU²dY,ÿý¬¬V‹ê×/¡Þ½kkûöá*Y2— úAµk×ò劎~ÎaO$Q6ˆ£ÐÐûZ¹ò7½ùf ™^æºôHpÿl‹ËšÕå™[ãL&iæÌ„Û>'I?ýtR÷ï?xä>«Õ¬+â=fÇŽU”)“Ó3ŸóÏ•ä~øa_œV eÉâ¢U«ªQ£’±Ž££mzóÍ’¤¢EshÆŒ7´sç{*_>Ÿ†]¤ZµÆiÉ’”NÀsP6ˆÿý²ZÍjß¾²ÑQð™3»èÛo»Jzrñb6›ôÁ>*PÀ=Aç]µê·GV I‹ Í›ëÞ½Èxéää þýë=³³Z-Ê;³~ûí#åÌ™)Nã;:Zõí·]Õ§OíÿÜcW­ZÅyN¡Bš6­“ví©*U êÝw—ÈËësùûÿï-‚@jGÙà…Ùlv-\ø‹Úµ«¯«!ñEDDé»ï~‘ݮǮ¦fµZT®\~õì™pÛ礇Ûå~üñ÷ØUFÿ£<ï±ß|³†œÓ=ñ1«Õ¢ìÙ]µvíà8Mÿ0›M=º…ÆŽm£Q£|žz:OÏlúòËŽÚ³ç}yyÑÈ‘ËU³&+€'¡lðÂvì8¥¿þº»ÕÉËßßQ‹Ó´}ûIùùõVíÚÅ9¿Éb1髯:=µP‰¯Í›?u•ÉdÒŠñ»*$¹¸8ªOŸ:­š²Z-²Ûíš9³s¼‹¦ëÖÍK}ûz?÷yùòeÕÿý_íÙó¾jÔ(¢wß]{¦‰Q6xaóçïVÍšEU¤Hv££àìß^ORTTŒ6n|[µk=¿I2ÅnŸóôÌ–às/_~ð©çwÅÄØôóϧtçνxß³gM¥K÷߯¯V«EU°`6 ²X¡¡ñûßâRÂåÍ›E“&uÐîÝï«R%O ºHuêŒ×š5‡)æQ6x!7õóϧԭ›—ÑQð?.Ü«öígªråZ·î­ØBéßç7åÉ“EÝ»×Lð¹oß×/¿œ•Íöì­dë×÷nnéÕ½{-I¦Ø­sëÖ½¥Å‹û)""J={Î3ìü¤üù³jêT_íØ1B¥Kçр߫~ý/´aÃQÙí”NH›(›¼ï¾ûE9sfRƒ%Ž‚ÿˆŠŠÑðáK5rär½õVÍ™Óí±³´*W. ±c[kñâ¾ ¾}N’Ö­;¢˜˜g—*116}õÕO/5OïÞµ%Ù{FSΜ™ôýuìØE½ýö"CËB…<4cÆúé§á*R$»z÷þN NÒÖ­¿– 0ŠÉNÕ à9îÝ‹T… c4xp}õï_×è8tãF˜zöœ¯“'ÿÖôéÕ¨Q)Cr´l9]œ¡ç>OŽŽV-XÐCE‹æ0:Ò#råz[3f3ãØ IDAT¼¡V­*$Ùœ+Wþ¦Aƒüôùçm’Õö‡iܸ Ú³çŒêÖ}Eï½×T¥Jå6:˜ØFà¹æÍÛ£æÍËQ4%+V¨eËi*V,‡6mz;ÙMFiݺ¢FŽlªQ£VêÇO'Vùòù´ti?-YÒO·o‡«Q£IêÛw¡o H4”Mžé×_ÿÔÉ“'ÊáÒxq116}üñ ä§=jéûï{ÉÍ-½Ñ±’•ë©sçjê×ï{:ô—ÑqQ³fQmØ0Dß|ó¦þøã²jÕ§#–éÚµ££ ޲ À3-\¸W*äW™2yŽ’f‡«S§oõÝw¿hÆŒ74j”,¾Î=ÉgŸµVÍšEõæ›s’Ýê!“ɤfÍÊjûöš0¡¶o?©jÕÆê³ÏÖéÎ{FÇ ÿ:xªààpmÜxL;W3:JšuìØE½öÚ—úóÏëZ³fp’žƒ”Y,f}ýõÊ—/‹Þxc¶BC#ŒŽô«Õ¬Ž«jÏž÷5bD-^¼_U«~¦Y³~VTTŒÑñ€—FÙà©–/Pºtùø”3:Jš´hѯjÑbš<=³ióæ¡*]:Ñ‘Rgçtš3§›îÝ‹T¯^óc3:Ò9:ZÕ§OíÛ7JݺyiâÄòòú\«W×òBJFÙà©-Ú¯–-+ÈÅÅÑè(iʃÑ:t±Þyg©úõ«+?¿ÞÊš5ƒÑ±R”œ93iþüî Ô¨Q+ŽóL3:iĈ&Ú½{¤ªW/¬PóæSµoߟFGâ…² Àýö[ Nº"_ߪFGIS‚‚nÉÇgŠ6n<¦ zhøð×8Ÿ)žÊ”É«iÓ|µpá^}÷Ý/FÇy®Ü¹3ëË/;jóæarvvT›6_©Gyºpá†ÑÑ€8á_,Oäç÷«^y%—Ê•Ëgt”4cÛ¶?Ô¸ñdÙíÒ–-ÃÔ AI£#¥xM›–ÕˆM4jÔJíÙsÆè8/¤T©ÜZº´ŸüüúèÏ?o¨víñzÿýåº};ÜèhÀ ¡lð˜»whݺ#êÜ™UMIÁf³ë‹/6©k×9jÔ¨”Ö¯¢üù³+Õ4¨žš5+«¾}êâÅÛFÇyaÞÞŵmÛ»š0¡6m:®êÕÇjÚ´mŠˆˆ2:ðL”M³zõ!ÅÄØÔºuE££¤zÁÁáêÜù[͘±]ãÇ·Ó—_v”££ÕèX©ŠÉdÒäɯ+{v7õì9_÷ïGé…ýûÊu={ÖÒôéÛT·îDmÚtÜèhÀSQ6xŒ¿ÿ¯jÒ¤ŒÜÜÒ%U;zô¢6œ¤sç®iÍšÁêܹšÑ‘R-gçtš;·›‚‚nkäÈåFlj3G½óNcíÞ=RåÊåSÏžóÕ¶í 9sÕèhÀc(›<âäÉ¿uäH:u¢øHLß¿W-ZLS‘"ÙµeË0•-›×èH©ž§g6Íœù†V¬øMóæí6:N¼äÈᦙ3ßÐÚµo),,Bõë¡÷ß_®à`ÎsBòAÙà?üð« tWÕªŽ’*EDDéí·iäÈå8°ž~ø¡·2gv1:Všáí]\C‡6ÒǯÑo¿ýetœx«X1¿6mª‰ÛkÓ¦ãªYsœ,øEÑÑ6££”Mþ+""J+Wþ¦Ž«Èd2'Õ¹pá†||¦jË–úî»^zçÆ2›ùœ“Ú! T«VQ ð½BC#ŒŽof³I¯¿^E;wŽTûö•õÑG«Ô ÁÚ»÷œÑÑÆQ6ˆµqã1Ý»÷@íÛ¿jt”Tgݺ#jÜx²¬V³6oªzõ^1:Rše2™ôå—¾zð JÇ/5:ÎKsuuÒèÑ-´sç{Ê“'³Ú¶¡=æ)(è–ÑÑFQ6ˆåç·O –’»{F££¤‘‘Ñúàƒ•êÓç;µm[YkÖ V¾|YŽ•æeË–AÓ§wÖ† Gåç·Ïè8 ÂÓ3›¾ÿ¾·üüúèÏ?o¨N š:u«¢¢bŒŽ†4†² €$éÏ?¯ë×_ÏË×·ªÑQR  [jÑbš–/?¨o¾yScǶVºtV£cá?¼¼Š¨ÿº=zµÎž½ftœãí]\[·¾£¡CiÚ´mªWo¢öì9kt,¤!”M$I‹íWîÜ™T»v1££¤ ›7WÆ“mÓæÍCåãSÎèHx‚wß}M%KæÖ A~©êpm‹¬§;ßSÁ‚jß~¦üA×®… ieÙlv­Xñ›Ú¶­ÌÕ/éŸms=zÌWóæå´~ý(ànt,<…ÕjÖ´i¾:wîšfÎÜntœ—'Of-XÐC ôÐçU»öxÍŸ¿[6›ÝèhHÅ(›h÷î3ºv-DíÚU2:JŠöïmsÓ§wÒĉíåèȶ¹äÎÓ3›Þ{¯©&OÞ¢Ó§¯'Q4lXJ;w¾§.]ªk̘5jÒäK9dt,¤R”M´|y€*VÌÏ œ—ð¿ÛæZ·®ht$ÄA÷î5U®\> ºH11©g;Ý¿9;§Óûï7Ó¶mïÊÅ%š5›¢‘#—+4ô¾ÑÑÊP6i\xømÚtLmÚT6:JŠ£1cV³m.…3›MúòË×uòä}óÍÏFÇITEŠd×òå4eН6n<¦š5ÇiÍšÃFÇB*BÙ¤q7STTŒZ´à븺|9X­[O—Ÿß¯l›K p×ðáMôÅ›tËè8‰Êd2©mÛJÚ½{¤^{­´ú÷ÿ^]»ÎÕÕ«!FGC*@Ù¤qË–¨^½ÊœÙÅè()ÊÖ­¿«aÃI Ô¦Ml›K-zö¬¥Ü5fÌ££$ WWgßN+V йs×T§ÎxýðÃ>Ùí Žø£lÒ°+WîhïÞ³j׎-t/*22Z}´Z]»ÎUÆ%µaÃ.ìat,$«Õ¬1cZhóæãÚµë´Ñq’LÕª…´mÛ»zãzÿýåj×n¦o )e†­ZuH®®Îª_¿„ÑQR„ n¨E‹iZ¼x¿¦Oï¤/¿ì(gçtFÇB«U«˜7.­1cÖ(::uþ$NNúàƒfÚ°ám…„ÜWݺõõ×;ÒÔg€„AÙ¤akÖV“&eäà`1:J²·jÕ!5n$ŒªV­°ÑQ’­S§®¨qãÉÚ²å„æÏï®O>i¥té¸Ú\ZÑ¿=IÒìÙ» NbœB…<´rå@ÓRsæìTÆ“tôèE£c!™£lÒ¨µk¨iÓr²XøZð$ß¿W¯½6YY²¸hëÖwÔ°a)£#!‰¹º:©wïÚš={gš\Ýô³Ù¤nݼ´cÇeÏî*Ÿ)š4i g9á©ø¯ ßiäÈåêß¿®–- \¹2 éÑ£–L&“æÌI»«›þ‘;wf-^ÜWcÆ´ÔÌ™ÛÕ¼ùT;wÝèXH†(›€4hÍšCÊ;³*W.`t”dåС¿Ô°á$8p^K–ô×»ï¾&«•¯MiÙ?«›¾ýv§BC#ŒŽc8“ɤîÝkjË–a2™¤† ÿOóæí–Ýn7:’“?@šS½úX½öZi}øaóz~ûöí9‘ñîßwÐáÃrs‹PÑ¢Árpx¹-Bƒ–——W¥{hÏž=š6mZ‚Ž™öìÉ­bÅ‚åî~Ïè(/déÒ¥Ï|<44BUª|ªž=kiذFI”*ù‹Ž¶iÚ´­š:u«ªT)¤)S:² ’@E¤1G^T`àM5oþâW¡[¶l™–-[–ˆ©Œçì¥âÅo©dÉ[/]4-[¶LAAA ”ì¿‚‚‚RÄÏÁËërŠ(š^ôϵ««“ºuóÒüù»•ÉR«Õ¬¡CiíÚ·týz¨êÖ +ŒŽ…d€Ë(i̺uGäé™MeËæÓëüüüäëë›H©R“É”¨ã?o%^Œ¿¿¿:uêôBÏ}óÍš5k‡V¬P§NÕ9YÊR¶l^mÞþx¢¢bŒŽ…$FÙ¤!ëÖVî*U*·ÑQ€§hѪ]»˜¾þz‡ÑQ’5WW'M›ÖIÓ§w’Ÿß>5o>UAA·ŒŽ…$DÙ¤·ÐUóæåŒŽ¤XÝ»×Ôž=gxÓè(É^ëÖµeË0Ùlv5hðZ»öˆÑ‘D(›€4âС¿tùr0e𼽋+gN7ùûÿjt”¡@w­[÷–Ú·Uýú-ÔðáKuÿ~¤Ñ±È(›€4bíÚ#*TÈC¯¼’+Qç9wîœ,X c]¾|YãÇ׉'d¼ç ×矞$s¥k֬Ѭ‰'&èØFý¬,³:v¬¢%KpÑ J—ΪO?m¥yóºkÆcjÚtŠNŸ¾jt,$"Ê& °ÙìZ¿þ¨Z´HüƒÁO:¥Y³f%ÈX]ºtÑ‘#GdµZd¼ç ÓèÑ£“d®´`Ù²eÚ»w¯BBB4wîÜÛÈŸUÇŽUuëÖ]mÝú»!ó§T•Ò?“››³š4ù’Õa©e\Е+wÔ¬YY££ÄIPP† ¢âÅ‹/ÁÓÓS§O§ž+¸åÊ•IÞÞÅ)Kâ!wîÌZ¶l€z÷®­áת_¿… ‹0:elÜxLEŠdWñâ9“d>›Í¦ÁƒËÕÕU7nœ$éÖ­[ª_¿¾&Ož¬\¹rÉÝÝ]óæÍÓ;ï¼#wwwåÌ™S‹/–$uëÖMAAAêÒ¥‹6nܨÀÀ@y{{?2O‡´ÿþØqýüüT¨P!¹¸¸¨k׮Љy¸ÍiÛ¶m*Y²¤Ò¥K§ *( à™ùçÌ™£üùóËÅÅEݺu“ÍfK„O)ñ?~\5jÔ“““Š-*Iz©ÏëçŸVÙ²eåèè¨âÅ‹kÍš5±-^¼XžžžrvvVË–-"Iºvíš|||^hîuëÖ©P¡BJŸ>½ºuë¦wß}W7n|ê{4êgÕ¡CíÚuZ7oÞM’ùR«Õ¬#šhñâ¾Ú·ïœ5š¤?þøÛèXH@”M@°yó ½öZé$›/ @ºzõªV®\© &hùò劊ŠÒŽ;tçÎ]¾|YŸ|ò‰zôè!www]¿~]C‡Õ‡~(Iš2eŠrçέéÓ§«^½zŠˆˆÐñãÇ™çôéÓ STT”vïÞ­]»véäÉ“:qâ„Ö¬Y£íÛ·ëÒ¥KjݺµÆŽ«µiÓFmÛ¶•Ýnbö˜˜rûúõëÊ’%K‚ÏþÜçd̘ñ‘‚E’V®\™"W+Å…«««jÖ¬©ÀÀÀG~}ýõ×Ï|ݳ>/WW×Ç~¶·nÝ’›››2gάëׯ?òØÿ>÷y2f̨[·-n‚ƒƒã4FRªQ£ˆÜÝ3hͶÒ%ŸrZ¿~ˆ®^ U£F“tøpÑ‘O”M@*véR°Ž¿¤Æ“n ôp…Ê?çõ„……é›o¾Q“&M^jL…„„Äžß³ÿ~;wkР֮][„ìß¿_;w–Åb‘$­^½Z'Nœx©lÉQýúõµ{÷nNÙ”4(©‡ª{÷yjÜx’æÎí®Š=Ž…ç lR©­[—Ùl–·wqIRLÌÃˉ[,ÝŠä©|ùòš?¾Æ§Û·o«páÂÚ´iÓ#W6L(çÏßкu•#G,8\ÑÑ6EGÇH’¬V³Ìf³¢£cb‹¥Ølv™LRíÚÅbïkܸ´zõZ [·î*kÖ ž5­+XÐ]6 Ñ!‹Ô¶í M™â«-Ê Ï@Ù¤R›7——WeÌè$Iº?JE‹¾'éáåB…úhÖ­;"³Ù»íôɯ‘F^¥+T¢D.•(‘K*xjþüݲÙì2›MIøÒ_ߪʓ'³z÷^ K—‚5gNW¹º: ÿÂfm úé§?ôÊ+9•;wæGî/[6ß }ŽŠŠQTTLìùNªOŸbMHµ²gwÓ¬Y]´|ù*ä.“ééO\]Ô¡Ã«Š‰±iéÒƒêÖmž&MÚ¬Û·ÃõÚk“5zô*­ZuH.܈ӕñâjÕ*¦5kÞR`à µh1MAA·ŒŽ„ae ýüó)5nüèÁbblrss~¡mBf³Iv»T½zaÛFEŠd—£c»ÄŠ $ÕªÒ¶mÃõý÷{5vìzEEE?òwÆd’*Tȯ¡CÅÞ¡S§®¨k×y2›M:xð‚¾ûîEEÅÈÍ-½Ê•Ë«råòýçW^eÏîfÄ[KuŠË¡õëßV·nsäã3U ôTùòùŒŽQ6©N`àM;w]%KæÒªU‡tôh޹¨'.éÞ½H™L·=Åb–»{FÛF¯½VúéOÄ3EEÙtçÎ=…„Ü×ýû‘ŠˆˆRXX„îÝûïïÃÃèþýH…‡GêîÝݺuWuë¾¢×_¯btü4Íj5«[7/µhQ^Ÿ}¶NK–ˆÝZ÷¿‡ƒKRÆŒNª\¹€||ÊèÔ©«Z½z"#£uâÄåØ¿6ÕôéÛd³Ù•'OfU©RH•*yªJ•‚*Z4[ïâÉÃ#£–- Aƒ~P›6_髯:«I“2FÇJó(›€Tàï¿ïèÈ‘ =zQ7•ÉdR¿~ßËÁÁ¢bÅr¨\¹|êС²Ê•˧nÝæ*(èöccX­™LÒàÁ 4`@]99%üåæS»¢õÉ'k•3çù›FŽüí‰Ï3›%³ÙòHÁcSLŒM>>å’*.ž#KMžüºÞ|³†Þ{o™Ž½¨ÈÈGÿ·êÕ‹hÑ¢ýº?RÎÎéT¡B~U¨ðßb*,,BG^Ô稱c×éîÝrsK¯Ê•=U¹rU©RPåËççÐë8HŸ>fÏî¦O?]«Þ½èý÷›©ÿºFÇJÓ(›€æöíðØbéÈ‘ 9¤7Âd6›T¸pvݽ©Ò¥skìØ¶*U*·ýßþŠ=uùòØÍf“l6»êÖ-®Ï>k£·T©<¬|z³Ù¤>j¡ÜõÁ+ôÿìÝwXÓWÆño˜ ˆ¢€€ QTÀQ÷ª­{ïª8ª€V먣­v¨ujk«Ö ÷ÖªÕº÷ª‚â@E!"{…$ï(•·n|>×Å…`rÎ$‘ßÍsÎ aòäNòuÓ ›„B!„ÈÅâãSðó Á×÷ßp)88£+©T©¢¸¹9ðÅM¨ZÕ; ¨\ùÆkC¥^8¦››»v]@OOK¦Oïú‹ãçmÞ¼CCív;%'§süx… Q¯^ ­Žý*QQ)ìÛLÓ¦%±±1Ñúø ™:u0»w?ææÍðWžlöŒžž‚ÚµËbfV൷ݼysæŸU* ‰‰JÒyò$•”ééjjÖ´’ í×xþëø: …w÷º´kWí¥ÿF––¦T¬hÍ©S·_û|‚Œ%«•+—¤rå’ Ð€sêÔmNœ¸ÍâÅG™2e7&Ô«çHýúåiØÐ GGÙ¨ÿeúö­G–’Î IDATGÉ’'ÕEG'ðÛoîÒ%¦ l/„B!D®’¢Äß?4K×R`à#Ôj %J˜Sµª=nn »¹ÙS¤ˆéÆØ¿ÿ*žžÞ\¹2‰bÅ ½pž³gïÒ¹ó|Æï€‡GÃ×^Œi»ëHOÏSÓª*T €ðð?ÐhRµ:Çë-Ú #£’¤¤’p¥2B«ãûøøÐ­Ûg̘ñ'‹E¡Èè¨z=&L耇G#"#ã ‹!**è袣yü8sç|9qâúú¦èéDO¯ Å{¢¢ÖkýñägÚ¼,þá‡møú>`÷2Þ­[áœ<À‰·9{öqq)ØÛ[Ò´i%>ù¤õê•£`A#­Ì•Ÿ\ºDŸ>Kqs³gùò˜˜È×(]”°I!„BHOÏX>ólœ¯o0·n…‘ž®Î<½êY°TµªÖÖovzÕ˜1¹y3Œ={^~¡›˜˜Ê¸q[øþûv”(a¦­‡ôFÂÂbX´è(«V"=]Z­ÆË«1?ýÔ1Gë¸~ý!M›ÎÎü¸aC'FjAíÚeµ>×Ñ£7ùòË5$$¤¾ò4ÀgÝjiiéìßÈèxÒ×ÏØOëÙ¾N/¢P€¡¡>~Mùò9×%&²Ú»×/¾XÅÓ055ÖêØ*•š+Wpøð ޹‰Ÿ_0††úÔ¯_žO?u¦IgJ—.¦Õ9ó²›7ÃèÕk1¶¶¬Yãõ€^d ›„B!„Ènjµ†ÀÀGY:–üýCIIQbjjŒ‹‹]–Ž¥÷¹X¬^}"}úÔcäÈæZ|ïïþýÇÌŸˆ ΡP(HOÏ\ 0äÒ¥ :»ìÝ{ Çß"=]ééjjÔ(ÍèÑ-øøcíîôèQ™ÅŸޤZ5­Œù¾nߎà×_²k×?èééeéê14ÔÇÓ³?þØ^gõ]¾ü€6m~Éò9}}=T*5•*Ù2fLKZ´¨¢µ vFâEG™6m@f—’¡¡>ƒ}ÌwßµÍüüСkÙ³Ç÷µû=êcooÉÖ­_R¢„\HçµkO¦OŸz úiŽÍ™ž®æâÅ{:tƒ}ûü |„-[ºÐª• uë–ÓÚkM^•€»ûbbc“Ù¼yöö–º.)¿“°I!„Bˆ÷‡Ÿ_p–®¥èèDôõõpr*AÕª¥žv-Ùãìl›­Õ.^|”yóríÚo }íZ(sçþÅ_]ÃÀ@ï…KÇ õ9~|Ž/åû]º,àÂ…@ÒÓ³†:zzz¨ÕÊ–-ÆèÑ-iß¾ªÖ.Ö}}ƒñòZIxxlf—׎èUëß%|AAQÔ¯?íµû ,hH÷î5©_ß WW;élÊ ZEzºŠåË謆›7ÃØ¿ÿ*{÷úqíZ(EŠ˜Ò¼yeÚ´q£Q#'ŒŒ>¬óÂââRèÓg ¡¡OØ´ieËZ麤üLÂ&!„B!ÞT\\2¾¾Á\¾üï>Kaa1( J—.ötŸ%ªVµ§J»ß¶W¯Å˜™dÑ¢¾9:ïó.^¼Çœ9qüxúúŠÿ8ÏêÑ«W]¦OïšÃþ×éÓwèÚuÁKÿ^OOF¶¶ŒÕœ®]kj%4LLLeìØ-lÝz€àà9™a–F£áĉ† ó!::•ê¿—múúú”.]”ºuùçŸ nÝÊ8õ®HS\]3–fººfìýU²d‘÷®W¼¹Å‹òLJ¹re’®K2N¸Û·ï*ûö]åâÅ{˜™¤ukW:w®A:åtNç”ÄÄT>ÿ|·oG°iÓœœ¬u]R~%a“B!„/’ÊÕ«!™]K~~!E¡Ñh°µµÈÜ_éÙ{3³‚:­7%EI¥Jß3mZzô¨­“^´$íeôõõ8sæììrGÒ¦Í/øù…¼fÉšÐ0bD3¾ý¶µÖæÞ¶íÿüsŸ)S:“””ÆÖ­Y¾üáTªdËõëÿs}}=6,Ïòå2O"KNNÃß?_ß`üüBðõ æîÝHT*5E‹Ê>¹ºÚacc¡µÇ ²ºxñíÛÿÆ… ãs]ÐÏ®]—Ù¾ý—/?ÀÚÚœŽ«Ñ©S \\ìt]^¶KNNÃÓÓ_ß`6lL•*%u]R~$a“B!„IIÏ_¤g„KP«5XYÆÍÍ>óB½jU¬¬ ëºäÿ8vì={.âÒ¥ : öìñeðàÕh4jÔ/Ém ôéÔ©:óæõÊÙâ^áСôí»ô•KÖôôtéRƒ¹s{j}jÕ)||Î’šª¤sçððhH¥J¶|òÉL"27×ÓÓ£ukW,èýÚ«ÄÄÔÌïígßßÿÿ½íìl‹³³ NNÖ8:ÿà–We‡”%NNcY¸°/mۺ麜— ŠbÛ¶KìØñwîDâèXœŽ«Ó¹s|}ªR©bàÀ•œ9s—ãæf¯ë’ò ›„B!ć%55k×Bñó Î| ˆÈ\~ô¬ëãÙ&Þ¶¶y£ûcòä]OCÿV×¥ð矾|ñÅË'…BÁ‰ãrÕž)†O?ý4ÔùoÑAÓGÌÛC«AÓ©SwX±â8øS¼¸Ÿ^w÷ºXZþ{:ßæÍ9r=jµ==Ý»×böìîï\G||JæsÀ×7˜[·Â¸s'¥R…Eqv¶¥|ùT¬h““5åÊÏÖýÆò£–-çR·n9&Lè ëRÞȵk¡lÛv‘;¯KƒåéÑ£6mÚ¸æËR©Tñå—k8~<€M›ãê*“IØ$„B!ò/¥RÅ3»:|}ƒ G©TafV0Ë’¢ªUòô EŸ~:‹ œøé§Žº.€]».3xð M–ÀÉÀ@ŸV­\X¼¸ŸîŠ{‰?ÿôeàÀ•üÿ’B¡à“OœY¹ÒC+ASJŠ’mÛ.±|ù nÜxHÍšeððhDëÖ®üw|¥RE©Rc4ècÆo¯õãì•JAAQܼF@@áܺν{P*UêSºt1*V´ÁÉ©ŽŽ%(]ºeÊÓùÒÜêûï·rýúC¶o¦ëRÞŠJ¥æèÑ[lØpŽ®ajjL§N5èÝ».ÎÎ6º.O«”JC†¬áäÉÛlÚ4øƒXF˜C$lB!„ùCzºš[·Â2»5üüBð÷E©TQ¨1..v™Ëà\]í(]º˜Ö/Øu%""–êÕbÍ/>ùÄY×å Ñh6̇}ûüHMMþ œ ÿ=gg[Öø"jµ† ¦qÿþãÌåtzz J”0#..oï4hàôÎã?|ÃÊ•'ññ9Kbb*;VcÀ€†oÔQ±páaRR”ŒÕâçJ¥Š»w#3瀀nÝ ãþýÇ™' ZZšR¦L1J—¶¢T©¢™.S¦X–­ͦM7n ·nMaˆ˜DE%°eËEÖ­;Ã;‘¸¹Ùãî^—öí«afV@×åi…R©bðàÕœ9s—M›S¹²ìá¤6 !„Bˆ¼G¥RsçNäsûÐ<Àßÿ!))JLLŒ¨\¹d–=–Ê–µÊ×§-mÚto¾ÙÄÍ›Ó(PÀP×åðÝw[ðñ9‹Ï bc“2—ÔéééÓ¨‘k×Ôu‰/µuëEFŒX—¹d­K—˜9³£Fm`ï^?.ìCëÖ®o5æ¹s,_~œýû¯R´h!úö­OïÞußjï¯ôtu® ,T*5¡¡O ŠâÞ½¨Ì÷÷î=âþýǤ¥¥`fV2eŠQªT1ììŠP²¤vv–Oÿl™o‹¹{7’† §³ÿ¨|±DëÂ…{¬[w–={|Q( [·šôïßGÇâº.í½)•*¼¼Vrñâ=6mB¥J¹/ Ïc$lB!„¹›Z­!0ðQfÇ’¯o0×®…””†±±A–`ÉÕÕ'§Zß¼9·:t-ųqã`]—Âüù‡˜9s/ ô¡}ûª@Æò4/¯•Oÿ<’jÕtWàk¤§«)SækT*5ݺÕÌÜ£I­Öðý÷[Y»ö ³fu£gÏ:¯'--íÛÿaÅŠ\½Bõê¥ððhDÛ¶nù~ï#µZÃÇ1Eqÿ~FMHH4¡¡OˆŒŒÏ¼­™YJ–,ò\U;»"ØØXP²d¬¬ çÙ¯—F£¡B…qL˜Ðw÷ºº.GkâãSؼùË—Ÿ ((І ðôlÄ'Ÿ8çéP_©Tá᱂˗°mÛPÊ—/¡ë’ò2 ›„B!Dî•%Xºz5„øø õqv¶Í<ÎÍÍ''ë<{!ªMU«ŽÇÓ³1C‡~ªÓ:Ö¬9ÍØ±[˜6­ ýúÕÏòwþé‹ÏYÖ­¤£êÞÜš5§¹t)ˆ9sþ»øìÙûøõ׃|ÿ}[† ùä?÷ˆˆeÕªÓ¬Ysš¸¸dÚ¶uÃãÕ«—Ê©òs½ÔÔtBCŸúäiCpptæç>ŒÉ\¢§§§ÀÊÊ [[s¬­Í±µ-‚966ØÚZ`c“ñùܺu»vó¨VÍI“:麭S«5=z“+NpôèMŠòùç èÑ£vžíXS*U¸»/æîÝGlß>‡¢º.)¯’°I!„BèNppt–`É×7˜¸¸d ôpr²ÆÍÍ!sïÊ•KJ°ô·oGиñ vïþŠ5th8p o†oÊ×_·zámRSÓ16ΡÀóÒÓÕ(¼´CnÙ²ãL˜°ƒ!C>á»ïÚ P(¸té>Ë–cï^?,,LèÝ».}ûÖ§D ³®>ïÓh4DFÆCxx,Æðða q„„DÇÇ1™KõŠ/L‰æO;¢,°¶ÎHÙÚÑÉ÷Þ7ßl"((ŠM›†äøÜ9)0ð+Vœ`óæ ¨Õºw¯Å_|œ']HJJ£{÷…DG'²}ûPJ”0×uIy‘„MB!„"g„…Åàçò4Tz€¯o0ÑщèëëáèX<³[ÉÕÕÊ•msÅÞCyÁªU§˜6mþþSu¶§ÏÉ“·é×oÝ»×dúô®:©!§mÞ|Ñ£7P»v9Rñõ}€««= éСZ®í´ÉO¢¢%,,†ÐÐÂÃ3B©°°ÂÂ2Bª”eæí--M±³³ÄÞÞ’’%-°··ÄÁ¡hæ2¾ìèÆY¶ì8¿ýv?¿ÉZ;7JHHeãÆs,]zœ‡ŸÐ±cu¾üòS*T°Öuio%..™N~`Ë–/)RäÃÝèþIØ$„B!´/22_ßøù…<í\z@ddŽŽÅññ”ï—9^¿þ¥K±}û?*dŒ»{]\\ì=znn¬X1€B…Œu]¦x iié„„<ÉB=xð˜{÷¢ |D\\2¦¦Æ™T¹rV”+Wœ²e­(_¾¦¦/ÿ7ü8—Ù´i ”Ï©‡•kh4ðgþü¿¹té>õê92lXS7® ëÒÞHhèÚ·ÿrå¬>ˆ×8-’°I!„B¼¹¸¸d|}ƒŸ†K£°··Ì,¹¹ÙcfVPÇço7n„ñé§³øë¯Ñ¸¸ØåèÜ'ЮÝþ¸b6U,òŠU«N1iÒNFŒhÆùó÷¸páññ)XX˜P³fêÔ)G­Zequµû ÷:~ü3fìÅ×7˜¶mÝøúëVoîêÂҥǘ4iË—÷§yó*º.'7“°I!„"?‹OyºÄãߎ¥{÷¡Vk°²*ü\·RFÀdm-ÁR^qõj-ZÌáСor,ô7n ëÖÅÇgP¾Øì8=]ÍÞ½~,]z”K—îãæf—WcÚµ«ú^ýJ¥ŠÑ£7°sçeæÌéA×®i±j‘×\¸p~ãâÅ ØÚZ R©¹q#Œ³gïrî\ çÏòèQ<&&FÔ¨QšÆ+Ф‰s¾ s_çÙFâ3gîåöíºu«É¸qm°²Ê}]´“'ïbåÊSlÞ<„êÕóÎéz9LÂ&!„Bˆü"!!•kײv,fKÅŠÊ*¹ºÚacc¡ë’Å{øã#,Xpˆ«W'çȆµ¿þz€9sþbÙ²þ´h‘·£—ÌÚµgðö>Ixx,-[ºàåÕˆZµÊjmFÃÔ©{øã#|ÿ}[† ùDkc‹¼%**W×Ù²åKêÕs|ámîÞäܹ@NŸ¾Ã‘#7yò${{Kš4©H“&Î4jäDÁ‚F9\yÎS«5lß~‰3öŸÂW_5Çãa®êøR©Ôxxxsõj{öŒÿK_LÂ&!„Bˆ¼(11õ¹Ž¥|}dKE‹Ê*¹ºÚck+? ç7}û.¥@C–,ù<ÛçZµêãÆmaúô®yz¯’{÷±lÙ 6m:žž‚ž=k3`@CŠfÛœK—câÄxz6bâÄr’ÕÊÉi,'v¤W¯:¯½­J¥æÊ•>|ƒ#Gnâ猱±!W eKš7¯Œ……IT­;IIiüþûß,^|kks&MêDÓ¦•t]V¦„„T:t˜‡žž»v ÿ ‚À·$a“B!Dn—˜˜Š¿hfÇ’¯o0wïF¢Vk°´4}.XÊ—J–,¢ë’E6KOWS¹ò÷|÷]Ûlöᅧ—×JÆŒiɈͲu®ìròäm–.=Æ¡C×±··dÀ€†ôèQ›Â… äÈü;w^føpZ·veÞ¼^äȼ"÷hÖìgš4©øN'™EE%pàÀ5öíóãĉۨÕjêÔq¤m[7Úµs{ë}Åò’ÐÐ'Lž¼›]».Ó¤IE&L耓“µ®Ë ,,†-æP½zi¼½Hœ•„MB!„¹IRRþþ¡øúþ»ÇÒÝ»‘¨Tj,-M³t+¹ºÚcg'ÁÒ‡èÒ¥û´k÷+ÇŽ¥|ùÙ6ϳã¾{õªÃôé]³mžì––Îöíÿ°té1®_HíÚeñòjL‹UÐ××ËñzNž ÀÓÓ›J•Jâí=sóüÝ™"²òòZ‰¾¾‚E‹ú½×8 ©>|ƒ½{ý8xПôtW C‡j´lé‚©©±v ÎeNŸ¾Ãĉ;¸y3Œ2ztË ‹_åŸîÓ­ÛB<<¾S˜IØ$„B¡+ÉÉiY–ÂùùsçNF°T¤ˆés¡’nn,‰LóçbÙ²c\¹2)Ûæ¸qã!:ýN“&ÎÌŸß['Í»ˆŠJ`õêS¬^}Š'O’h×®*6ÆÕÕ^×¥qãF}ú,ÁÔÔ˜5k¼²uùžÈ]¦NÝñc79p`ŒÖÆLLLåÀvìø‡£Go¢¯¯GëÖ®|öY-ê×/ž^þê´Q«5¬_–éÓÿÄØØéÓ»äŠá¶m»ÄСkY´¨íÛWÕu9¹…„MB!„9!99-ËR8?¿nߎ@¥Rcaaò\¨”ѱdoo©ë’E.Ö³ç",-MY° O¶ŒE»vópv¶ÁÇgP®Úœ÷enÜcÙ²ãlÛvSScÜÝë2`@J”È]',†‡ÇÒ»÷¢¢âY¹Ò“ªUt]’ÈkמaÊ”]ܼ9=[ƉIbÏ_6o¾À… ÷°³+BÏžuèÞ½f¾[ZýäI"&ì`Ë–‹´o_•É“;ëüÔºŸ~ÚÉêÕ§Ù³ç«êÁW°I!„BÛ’“Ó¸~ýa–Ž¥Û·#HOWcnn’Ù±”,ÙIwƒx+J¥ŠŠ¿cÒ¤Ž¸»×Õúø‘‘ñtìøEŠ˜°~ý`ÌÌt¿Tåe4 ‡ßdÉ’£œÂÓ³+æÝe+¿þz€Ù³÷óÅóÃí>ô Ô|K¥RS¶ì7üòKO:w®‘ãóG³jÕ)6l8GBB*mۺѿCjÔ(•ãµd‡+W0zôFîÝ{ÄØ±mðòj¤“çÒ•+èØñw† û”Ñ£[æøü¹ˆ„MB!„/’ššž¹îÙÉpÏKvYÂ¥R¥ŠÊE¢È=z,Âʪ0¿ÿ1•Jîq#Œ]»†S¦Œ•ÖÆÖ†«WCX²ä»v]¦Húö­Oß¾õ)V,wv^½­-[.2zôZµraÞÂË«1åÊ×i]9-""Ž–sï^Ë— nÝrº.IhÉ”)»9uê6ûöÒu)/ÏŠÇñö>‰¾¾žžðôl„™YA]—öÎöìñåë¯7Q¢„ öÉÑÎÍk×BiÛöWFŽlΈÍrlÞ\BÂ&!„BäJ¥Š7>×±ÂQ*U*dL•*Knn¸ºÚQ¦ŒUžßŸB|x¾ür Ñщ¬_ÿÅ{5cÆŸ,Xp˜E‹úÒ¦›ª{7—/?`ñâ£ìÝëKÑ¢…0 }úÔû —‘¥¤(>܇¿þºÆôé]éÕ«Ž®KZ°|ùq~ûío|}'麔WŠMbùò,]zFÍ€8°qž}N>|ðak¹té>?þØF96··÷ ÆßÁÖ­_R«VÙ›7°I!„yR©âæÍ°ÌPÉ×783X255βÎÕÕž²e%XùCíÚ“ùì³ZŒÕâ½ÆY¸ð0S§îaîÜ|öY--U÷æT*5{÷ú±téq.^¼‡««=^^hß¾††ú9^On¤Ñh˜5k¿ýö7ƒ7á»ïÚÊëX·w¯^^+ š'¾ÏããSðö>ÉâÅGQ*ÓñòjÌ AM03Ë{ËëÔj óçböì}tìXÙ³»çز:øúsøð7yºKì-IØ$„BˆÜM©TqëVxæþJ¾¾Á\¿þo°ôïR¸Œp©\¹ârA&ò¥ððXªWŸÈƃßkÿ¢µkÏðí·›ùé§ŽxzæÜoø!ãâuݺ³¬Xq‚ÐÐ'4o^…S§Ž,{™­[/2zôF>þ¸" ôÆÔÔX×%‰wtùòÚ´ù…sç~ÄÞÞR×å¼±ÄÄTV®<Éüù‡Ñ×Wðå—ŸÒ¿ƒÝI[Ž¿ÅàÁk°³+Âòå°³+’ísÆÄ$ѤÉL4pÒê)¢¹œ„MB!„È=”Jᙡ’Ÿ_ׯ?$--SSc*W.ù\Ç’åÊÿ7ݨ={|܇¯¾jÎèÑï×õ6îßÌŠ'ذá†îÝkáéÙˆÒ¥‹åX yÙùóxzzS¢„9«W{bcc¡ë’Ä;xïÜ9œš5u¿ÿÛŠ‹KfÁ‚Ã,_~ssFŽlNµ10È[ÿß¿ÿDDıhQ?ê×wÌö9¾AŸ>KY²¤ŸN—-ç ›„B¡ééjÂñõ}¹ÏÒõëIMMÇÄÄèi°ôoÇ’££KâÃ6~üvΞ½ËcÞéþÏÂ*OÏFL˜ÐAËÕ½Øùó,]zœýû¯bmm΀ qw¯ó!-%ÑšÓ¯ß2bb’X±ÂƒjÕt]’xK*•š2e¾fþü>´o_U×å¼³ˆˆ8~ûí kמÁÎÎ’~hG«V.º.ë­$%¥1zôþüÓ—l—WãlŸóÛo7³g/GŽ|Kñâ…³}>“°I!„Ù/=]ÍíÛáO»•2:–üýCIMM§`A£,Knn, ñ"mÚüBÕªLÚå­ïû×_×8p%}ûÖgÒ¤ŽÙzê¢R©bÏ_–.=Æ•+¨^½~LëÖ®y®"·‰‹KaðàUœ9s—ß~s§mÛ¢C"_qsÏðáMst“êìrÿþcfÎÜËΗ©[·'v¤J•’º.ëi4þøãÓ§ÿI§NÕ™=û3Œ ²m¾ÄÄTš5ûGÇâ¬^í•móä6 !„B»žKÿž Œ¿ÿCRR”,hD¥J¶™Knnö”/_B‚%!^#99 ÆñÛoîtìXý­î{øð ú÷_N÷5«[¶MÑщ¬Ysš•+Oñøq<­Z¹2p`cjÔ(-ó}¨T*5ãÇï`åÊ“|ýuKFŒh–­á¡Ð®O?EË–.|ýu+]—¢5—.ÝgâÄí\¾ü€ªñÝwm)Y2û÷BÒ–cÇn1xðjÊ–µbÍ/Š1Ͷ¹.^¼G§Nó™5«={æëS&%lB!Ļ˖"2»•2‚¥PRR”(`Håʶ¸º:dv-•/_B:„xgÎÜ¥K—ùo½±ð‰ôë·Œª1wnl %nÜcùòãlÝz‘Œpw¯Cÿþ òÔÅf^äí}’ ¶Ó®]UæÌé‘'7kþuïþeÊcæÌnº.E«4 ûö]eʔ݄‡Ç2hÐÇ úižÙÐ>0ð={.ÂØØ€uë¾ÈÖçLÙÍÚµg8vì[J”0϶ytLÂ&!„B¼•êY°’åT¸ää4Œ ž;.£k©|yk –„Ð’ß~û›U«NqéÒ„7¾ÏÙ³wqw_B‹Uøýww­vªÕºÎÒ¥Ç9y2GÇâxz6¦k×011ÒÚ<âÕŽ¿Å_¬ÆÞÞoolmeãðÜî‹/V‘ž®fÙ²þº.%[(•*–/?Á¯¿ÀÔÔ˜ :ä™ý©""âèÕk1Ož$âã3ggÛl™'99O?MåÊ%Yºôól™#°I!„ÿ¥R©¹s'2³cÉ×7£céY°”õT8{œœ$X";õí»”‚X¼¸ßÝþâÅ{ô치&M*òÇ}µ4%$¤²yóy–-;APP\OÏÆ|üqYÊ¥#AAQ °‚¨¨x–.íOíÚeu]’x…Üεk!lß>L×¥d«Ç˜:u7ž§~ýòL™Ò ''k]—õZññ) °œ«WCñöö nÝrÙ2ωô豈+ТE•l™CÇ$lB!>t*•š»w#3C¥gKá’’2‚¥ç÷Xz,êëºl!>†Ê•`Ô¨xz¾~Sá+WУÇÔ©ãÈÒ¥ŸkåùúàÁc¼½O²~ýYÒÓÕtíúžžqt,þÞc‹÷—˜˜Êðá>üý÷u&OîLß¾õt]’x‰¹sÿbûö8qbœ®KÉ—.ÝgܸÍܺŽ—WcFŽlžë—Ö¥¥¥3tèZôgþüÞ´i“=ñõÕ:Žàèѱ˜™È–9tHÂ&!„âC¢Vk¸{7ò?§Â%&¦bdô,Xú·c©B –„xÞ¹sçxðàAŽÎ‘Ì´i—=Ú‡B¯¼mXXóæ]£téBxy9£¯ÿên£ÚµkãààðÒ¿?sæ.Ë–ãÀ¬­Íéß¿îîu077y§Ç"²F£á—_0gÎ_¸»×aêÔ.ùâõûÁƒœ;wN×ehÍ©Sáüùg0Ó¦ÕÔu)Z÷²×µZÃêÕ§™9s/ òÓOsýÒ:µZÃøñÛYµêS¦t¦_¿úZŸãÉ“D7žA›6nLŸÞUëã똄MB!D~õ,Xz~óîk×2‚%CCýÌŽ%77 –„xSîîî¬[·.GçÔÓ3ÆØ¸,ÉÉ·õ+o«PS¸p-âãϠѤ¿vlzõê•åsiiélßþË—çÚµPjÖ,ƒ§g#Zµr•å²yÀ¾}W>܇J•lY¶¬?VV…u]Ò{Y·nîîîº.Ckôõ chhMJÊm]—¢u/z=y^tt"S§îaýú³´kW•3ºfëÉoÚðË/˜={óç÷¦sçZË–‹|õÕ:ú† rÿ2÷pÑ@×!„âý©Õ= –2Â¥k×BHHÈ–œ3:–ºvýWW{*V´‘`IˆwÔ«W/|||t]Æ{ûÿ=–"#ãY³æ«WŸ&&&‰¶mݘ5«;U«¾¼óIä>­Z¹°{÷ XA«VsñööÀÅÅN×e½7é‘ÈÝÞdÏ6KKSæÌùŒŽ«1räz>ùdsçö¤I“Š9Pá»9²9ÉÉiŒ¹žâÅÍhР¼VÇïÒ¥üq„_~ù‹E‹ÞlO¾¼BÂ&!„"Q«5Ü»÷(³[ÉÏ/˜«Wÿ –*V´ÁÍÍžÎkàêj‡³³­KBˆ—ºz5„eËŽ³sçe 2¦OŸz|þyýü|$w¾W±¢ {÷Žä‹/VÓ¡Ão̙ӃNªëº,!hØÐ‰C‡¾æ»ï¶Ò»÷úö­Çøñí)X0wžd9n\BCŸà鹂íÛ‡ãìl£µ± cÆ´ÄËË›7´:¶®IØ$„BäbÏKW¯ãë›±.>>CC}*T°ÆÍÍŽ«ãêjO¥J, !ÞŒ‘‘ Þ$0ðÎÎ6L›Ö….]>ÂØX.ò ||2eÊn¾ür þþ¡Œ×Fk' ñ>ÌÍMX° -ZTaìØ-œ8Àüù½se'¥B¡àçŸ?£[·…ôë·”}ûFQ´è«÷Ï{-[VÁÙÙ–¹sÿbéÒϵ6®®Éÿ$B!D.ñ¢¥pþþYƒ%WW{:t¨Ž««•*Ùbd$ÿ• !Þ•> è³iÓ`4pÒu1"èëë1aBªT)ɘ1¹v-” zkõBYˆ÷Ѿ}5jÕ*ËÈ‘ëéØñw&NìÈçŸk3î÷U° «VyÒ®Ý<<<¼ÙºõK­·Ïº› XÁõë©TÉV+ãêšü„*„Bè€J¥~.XúïæÝ+ÚàêjO§NKÎÎ6, !´*--„ÊKÐôèÒå#Ê—/ÁÀ«hÑb‹N¥t]–X[›ãã3ˆyóòÃ[¹t)ˆY³ºåºeuE‹ÂÛÛƒÖ­aæÌ½|÷][­Ý¼yeœœJ°bÅ ~þù3­«KòS«B‘ÍT*5wîDfî­ô¬céùSá\\ìèÒå#ÙcI!D¶puµgß¾‘Œ±ŽÎgâÄôïßP×e €žž‚‘#›S½z)† YCÛ¶¿²lYÊ”±ÒuiYT¨`ÍÔ©=z#uë:jmss…BÁçŸ7`Ò¤]Œß3³‚ZW—$lB!´H¥RsûvDf·ÒÕ«ÁRRRFF™ÁR·nr*œBˆœU¤ˆ)+Wz2oÞAÆßÁÅ‹AÌšÕSSc]—&WàÀÑxy­¤e˹̛׋–-]t]V=zÔæÔ©; îÃßÑÚa ]»~ÄÔ©»Ù¸ñ<^^µ2¦.ÉîpB!Ä;JOWsãF7žçûï·Ñ¾ýo89ã“Ofñí·›¸|ù>•*Ù2iR'ÃíÛ3Ø»w$3gvÃݽ...v4 ‘Ïݹs‡•+Wj}ÜÄÄD¦M›¦õqEþ÷¬ƒÄÇg Çжí¯Ü¹©ë²´"»žoÏ‹gÆŒÙ6þ“'O˜5k–VÇ|U͹ñµ¤dÉ"ìØ1ŒNªãááÍ/¿@£Ñ躬,fÌèJ‘"& ²µZ;µ™šÓ­[-V­:•ëï»°I!„xééj®_ø4XÚJ»v¿âä4–O?ÅØ±›ñõ}@•*¶LÚ™¿ÿþš€€üùçH¦OïJ¯^u¨R¥¤KB|€n޼ɢE‹´>n||<ãÇ×ú¸âÃѨQþúk4… Óºõ\vï¾¢ë’Þ[v=ßžËĉ³uüåË—k}Ì—Õœ[_KŒŒ ˜1£³gwç×_0|ø:ÒÒÒu]V&SSc-êÇÅ‹A¬ZuJkãöëW{÷¢8uêŽÖÆÔYF'„Bü¥RE@@øÓý•þ=.55‚¨T)cóîÞ½ëáêjGùòÖÈïo„Bä-¶¶lÛ6Œ‰w2hÐ*.] âûïÛÉ/Gt¨téÒܺuK×eä½zÕÁÁÁ/¯Utïþ+V ÀÒÒT×eP©’-Ç7cÚ´=4kV;»"ï=¦““5Õ«;°cÇ?4hP^ UêŽüd,„⃦Tª¸v-”uëÎ2vìfÚ´ù'§±4kö3ß¿k×Rµª3ftãСo¸uk:»wÅÔ©]øì³Z8;ÛJÐ$„x%µZÍðáÃ133£xñâLŸ>€ÇÓ´iSæÎ‹­­-VVV¬X±‚1cÆ`ee… 6lxåØË–-£T©R˜ššÒ¿ÔjuN<$‘ê3ujg,èƒÏYºu[Hxx¬®ËzgÚz¾­_¿GGG °±±aöìÙ/œo÷îÝ”+Wú÷ïÏ×_ÍÞ½{8zô(nnnS±bEvîÜùÚú#""h×®Ý[×|âÄ †ʈ#033ÃÚÚš¹sç¾ñ×-7¿–4hàÄîÝ#ˆŒŒËuË>‡oŠƒƒ%_½QkKß:t¨ÎÞ½~(•*­Œ§+òÓ±Bˆ†R©âêÕ||Îðí·›iÕj.åË¥yóŸ?~;7n„Q½zifÎìÎáÃß0]»†3eJç§Á’KBä?ü°•zõ¦0fÌ&ΞÍÞå /^ÄÐÐððp¶mÛÆÌ™3Ù²e J¥’#GŽChh(“&MÂÃÃ+++"##5j?þøãKÇU©T\¸pÛ·oãççÇöíÛ9vìX¶>‘uêT={¾"::-æäÙe<Úx¾ÅÇÇÓ¿~þùgÙ¸q#cÇŽåÑ£GYæ ¤W¯^üúë¯DGGãääÄ/¿üBtt4´oßž‘#GÇÌ™3éÕ«×k»–’““9räÀ[ÕËâÅ‹ÑÓÓ#<<œ­[·2iÒ¤ÌàëUòÂk‰£cqöìùŠâÅÍh×n§OçŽïOCC}æÌéÁÉ“·Ù´é‚VÆl×θ¸dŽÐÊxº"?1 !„È—”J¾¾Á¬]{†o¾ÙDË–sqtü–-æ0qâNnÝ §fÍ2üüóg9ò-·nMgçÎáLžÜ‰îÝkR±¢ úúòߤùUddAAY·î ;/ dÉQÔ¬ùC†¬åÀkZý­¾……3fÌÀÄÄ„ 0tèPÖ­[dta|ûí·( š6mŠ£GÎü8>>þ•cO™2###Ê•+GåÊ•‰Í»)B÷*T°fïÞQÔ©SŽ=þàçŸ÷£Råž—7¡ç›‘‘§OŸ¦cÇŽS¶lY ÿóüZ¿~=Í›7§]»v(P€±cÇR¼xqvìØAµjÕøüóÏ166¦C‡´nÝš7¾Õãy›×fΜ‰‰‰ õë×gèС¬^½úæÉ ¯%––¦lÚ4˜?®€»ûb¸¦ë’¨ZÕAƒ>æ§ŸvòäIâ{W¢„9µk—e×®ËZ¨NwdÏ&!„y^ZZ:ׯ?|ºÇRÆ>K7o†¡Tª(TȘʕKR»vY¼¼áêjO¹rÅÑÓSèºl!„ýÿk€F£!44†ÐÐKìØq …Š3£FR´iãJ»vU12z·Ë•+‡¡¡aæÇUªTáСC™›šfì?¢P(066ÆÀÀ óãWÑ××ÇÊÊ*óã×Ý^ˆ7Q¨1‹÷cÕªSLœ¸ƒS§n3~oJ–|ÿýhr‚6žoÆÆÆ\ºt‰qãÆqçÎ,--_@áää”ù±B¡ lÙ²„„„dù;€ *üÖéM_#Ê–-‹‘‘Q–Ç~øðá׎Ÿ—^KŒŒ X¸°ãÇïÀÓÓ›9szЭ[M]—ÅèÑ-عó2?ÿ¼Ÿ©S»¼÷xíÛWcÚ´=(•ª<»‡š„MB!ò”ÔÔŒ`ÉÏ/8sï[·ÂQ*U.\€*UJR·n9 úWW{Ê–µ’`IñÎÎ6¯ü­±FűÿUöï¿Êðá>XX˜’–V;»$’’Ò011zéýŸ•åãÈÈH,--ß«~!²[¿~õ©]»,ƒ¯¦Y³Ÿ™3§­Z¹èº¬×ÒÆómÇŽ|ÿý÷lݺ•zõꡯ¯……ÅnW¸pa?~œåsOž<ÀÌÌŒkײvÞ<~üssó·ªåmüÿcôè… ζùtE¡P0yr',,Løê«õÄÆ&ãéÙH§5,hÄ?´cذµôéSŠmÞk¼–-«ðÝw[¹páõê9j©Êœ%ë„BäZ©©éüóÏ}V®<ŨQhÚt6NNciÓæ¦MÛCPP ”gÞ¼^œ81Ž7¦±uëP&NìHçÎ5pt”&!Ä‹D¼Õí5xò$‘ÄD}nß.ĬY¯ßå™   öìÙdì³xñbZ·nýVóCÆðÿ_¼æ„øø®] eÏ_æÏ?Ĉë8xÐ?Çë9¯bEöîI›6nxx¬`ܸ-¤¦æžãç_DÏ·*UªDÆ Ñ××çÌ™3ÄÅÅýçvM›6eÇŽ™{99s†ëׯ£P(hÖ¬$00ÈØø{ëÖ­4mÚô=á«ë~¶ yBBK–,yá|ºz-Ѷѣ[0eJ'&LØÁìÙût]íÛW¥ZµRüôÓë7‚%Ìqv¶áèÑ›Z¨L7¤³I!D®œœÆõëaøù?} áöípÒÓÕ˜™ÀÅÅŽÆ+0lXS\\ì(S¦X®nóBd¿øøâãS ‹!<<†ˆˆx¢¢xü8èèbb’ˆO%!!…ÄÄ4RS•¤¦*Q*Õﵡ¡»7¾}:u5j³gÏ& €jÕª1pàÀÿtD¼ÎW_}…§§'UªTyÛ’_+&&‰{÷¢ ŠâþýŒ÷·nEôˆØØdàÙÒ  ôìY[ë5ˆÜ©`A#fÏîNãÆ3f#çβhQ_œœ¬u]Ú iãùÖ¡C&OžLãÆ122ÂÐвeË2zôh,Xy»Ö­[Ó®];*W®Œ››‰‰‰¸¹¹addDÕªU=z45jÔ fÍšüóÏ?tïÞ–-[fÇàT©R|ÿý÷Ì™3‡;wîàääİaÃþÓñ”¯%9­ÿ†˜››0räzbb’˜2¥³Î~>T(LšÔ‰6m~áàAš5«ü^ã5iâÌÑ£7ùî»¶Zª0g)4Ú:ŸO!„xCÉÉiøû‡âç’¹îö툧ÁRA\]íquµ{úfO©RE%X"Ÿ‰Í‚â㓉‹K&<<Žˆˆ8¢¢xò$¨¨ââRˆO">>ääTRRÒIMM'=]õÚ°HOO††úbh¨¡¡zè—Ddä«7ß~+«T¦Oÿ‚Ö­]ßø>)))œ9ssssªW¯þNójKrrK—gÒ¤EÙS¨1 ©À³¯›>*ÕË9…BA@ÀtLMs²l‘ „„í|Êø8,,†Ë—ï—œ9—¾~FˆT¢„%J˜Q®\qêÖuÄÆÆœâÅͰ¶ÎxoeU…BÁèѸqãá=}}=T*5-ZT!6ö ªÞùdºÜÀØØ#ôôÞ= fÓ—ß~ÛšúõË3l˜M›ÎfáÂ>|ôQ]—–ãªU«†··7Ó§O'::GGGöíÛ—å4¼ÿghhH±b/ÿÅš‰‰É;Õbff†£cÞÜHZ[š4©ÈŠºœll,èÝ».¿ür€ªc`ðnÝMFFÔ¨Qš3gîæÉ°I–Ñ !„x' ©™KÏÂ¥»w#Q«5)bš¹ÎÕÕ;$X";ÄÄ$½°Ë(<<#0ÊX––D\\ññ)$&¦’’¢$-íͺ‹ôôeF… S¨PÌÍM°´,H‘"…°²*ŒµµVVf˜››`aQssÌÌ bfV ËXJ¥ŠGâ ‹!22ãýó? —ž<ù·I¡P`e•H= Žll̳|lm(Š IDATmF±b…_º\A¥RóàÁcnÞ çöínÞ ãàÁk$&¦½Ó×ÜÀ@Íüùýiß¾ê;Ý_×RSÓ™4iÞÞ'ÞyŒòå‹S¿~y*V´ÅÉ©+Ú`añnÉ"ïzü8Q£6päÈ ¾úª9Ç7{ç ë—y—et"çézÝó޹ɀËéÑCwKê""b©[w*3gv£[·šï<ÎÏ?ïçÏ?}9rä[-V—#.JØ$„ⵞDôl%?¿`¡Vk(Z´..vÏ…KöØÙÑuÉBä)qq)ÄÆ>ë.Jz%Hxx,QQ DG'“D\\2 ©$%¥¾Õ©Púúz(`ˆ©©1… g,EË‹žFæ”(a†……)EŠ˜`a‘*ôfûò$%¥ú„ˆˆXÂÂ2Þ""b y"ş傱hÑB/^[[ ŠËúÞÊ*ã}Ñ¢…04Ô£T*5÷ï?æÖ­pÂ3ßß¹IZZ: …{{KœœJ VÃáÃ×ßøë÷¼Zµ³cÇêwºonR¸pM nðÖ÷S( [·Z>" Œ¸¸J”0ÃÉÉggœœ¬©X1ãý›~‰¼I£ù{çÞTÝGñ“ѽҙÕ=ÓAA(²DAåADDôA_q àVŠ(N† "ÈR”Ñ–”®t¦mš4mVÓ¦möûÇMn[6%m“r?ÏÓ§’Ü_Jrsï¹çœ¯ßï½·ññl¬Zõ¨]ËÃ)±É9p$± hœ¦MŠeËzGpzãßð÷ß…ÈÉYÜeöС"<þø×(,|ÿ² 8ÕÙDAAAAÑ™¦¦6²[É…«¬$„¥  o¤¦†á¾ûú“®%>Ÿ–((BèP©‘H¥ÒZ¿ˆˆšBÑ„† š­‘5›ËH¶6ÃO¢h4àJçV.. xx¸"0о¾`±<èc£ù€Ëõ‹å‹Œl‘»ûÕc×£¡¡‰Œ¯µ‹H*ëß5B*U£©©¼½›Ž8?ðx,Œ .—eý;_p¹,„„øÞ°ˆt)F£Í©$%J¥¥²N¢RxxââØÈÊJÄìÙ™HHà .Ž OOW„#,9ùµ:µ¤Ìœ9••¿Nï'½ÍÍÿ`Ù²g°{7ñ»4™nìy……⣦ÿ‰%%u(*’¢¤¤§NU`ãÆhiÑ[o`u?ñÀ!ÿ/nå5Iá8Ðh4Ìš5™™<÷ÜfŒ÷1^yå^Ì™“ :Ê[Rô¶HÝO|OO7¼öÚÄ_Ãüù£±iÓIüöÛÙ.»›Œœ?_…ôô{.¯Û¡Ä& ŠÛ¦­“[‰–ä°X,öAjj(î¿€Õ¹ÕÛK¦ è´ZU(ÒB©lŽˆÎ &(D<­±±ÅÚg¤ƒNg¸ìq:ŽŠ¿¢7Ç ÁÁÞðóó„¿¿)±Ù¾ð÷ow_ÄŸ»*Ð\ ƒÁ„úz $’«‹H2™¦Sa´¯¯¸\BDârY4(²“°Äfû"0ÐÛ.볉JEE”•Õ£¨Hв²vQ‰N·9•8¤¨$pÛ.*] Ëáᨪ’_óvL&nøüóG1n\ ¦Oßa—çæ(¹cß¾…X±b/Ö®=‚«½^;RS£Dbâ …aÃb1lX FŒˆCf¦€¼ÙlAMB¡BaŠ‹¥8|¸ë×Á`ƒA””'&r‘À…@ÀA|<11!v}SôQQÁعsÖ®=Œ>؇ýû/bÕªiˆŠ îí¥Qܦde ðÕWcΜàçç F_ÿNv$$ÄÓ¦ Åš5‡0yò]rW±Xžˆ‹cãÌ%6QPPPP8&Mk‡~%B`ªªRÀb± $Ä©©axðÁdÇ—K KÎÁ`²º´\GI{¬K©l&ãiZ­--z˜Í϶¯æ2@vñx~`±<à…  ¢G(0Ð~~FíŽ#{÷š\ŠV«ƒDBDØêê!‘¨ÉX›L¦A] ͤ³‡N§‘=Hl¶/RRø=: ŽŸÕ•ä k‹8]Áh4£ªJÞÁ©T‡²2JKe0L—‰JsæN¥•.E$’ãðá"9"DP÷5Å&:†#±víãàpünõi:,.. ¼þúý92Ï>û4šÖkºœø|BhliÑcÆ\¬X±žž®<8 ÇÇbøðXôˆ@DDbìØò¾F£"ñ-ÖA(”bÏžóX½Z£Ñ ¢£ƒ­(.ˆX^xxà-§è :ž}vFJÂsÏmÂèÑ+±téÌš•Ö«£è)n_î½7+WNÅÂ…?Ã××3gŽèÑíÿ÷¿éøñÇcÈÎväo†ÔÔ0\¸Pmç•u?”ØDAAAÑillA^ž¸ƒkI ‘ˆ8¡b³ýšЇDFáØì¾{EÑw°X,V—Q ”J"Ž&—7A,VC*UC.×@¡Ð’ÝGZ­þŠ#ܯ$Ñh°NLsCp°uZ1)Í&¢_í#ÏNŽ£Þ8ÒhZ!‘¨!«H'’D¢B]Æ*,©:³wsc‚Ë%\G|¾?ââØV©Ý‘ìÛí˜Mh ¥()‘A(¬³Æß:‹J \de%bîÜ,ÄdzÇî²ÈÕÔÔ†ãÇËpøp²³…¨ªRÀ××#FÄá¾ûRqö¬è²û0tX,LŸ> w߈ìl!ŠfÈåM8y2žžF8ßIDé df päÈ«˜?#Ž+½Lt//7L›vrsKpö¬ƒ ÑÑ!àóYÐéŒØ°!Ë—ï…——›ÕùCŠOL&L&±±!ˆ Á„ íãÝ JKeâxÛ¶FMf³nnLÄű;¹ .BCý)øػ÷¬ZõÞzk'þøã">ùdÕéHÑ+L:MMmX²äWøø¸ã?ÿÔcÛŽŒ ½÷¦bíÚ#]›’’xøæ›;¯¬û¡ Â)(((œµº…”lâRU•Àáø!55¬S7›íÛË+¦  hnÖA¡h†BA”_××kHáD&Ó@¡ ¥æfB8Òé ×÷€«+Ñiäëë??x!0ˆ¦ñx~ òé$xÁ×·ë#àíM[›µµ*H¥jH$‹•HÔäWm­ Zm»äëëèAâóYÖ²o?ðù,°Ù~ðêÑç`4šQYÙС¤[†ÒR¢¨Û&*…‡">žèîˆïññœ[îñ1›-ÈË«Ann .Æ?ÿTÂl¶ 55 ™™¤§ÇcàÀH¬_‰ [·žAkëµ§Ò1t04r‚_LL3rs¿¾¥uÞmm†ní5ºZ¡¯ÅbÁÚµGðþû{`6[:õZ=òÈP|òÉ#÷Ü©SÈÍ-ANN Š‹¥`2éHLäÍö…Ng€PX™L//7 B8ŸÒӜ̿¡>Ÿ–}§^®¢" „Â:H$j€··›õ5Ô>O àPQˆ jðüó›!•ªñÖ[`Ú´»nêþ·[A¸ÉdvJŸ£„_‰?þ«VÀ7ßÌêÑ‹gÏVaâÄÏpàÀKHIáßôýsr„x䑵(.^îL%áÔ4: gB¥Ò’8›¸T]MK\.‹”lK!!>½¼bŠÛ½Þ¥RKŠGµµ„(RW׈††&(ÍP«µhjÒA«Õ¡µõʥءÁÝ OOWx{ÂQP‚‚|H!%8؇ì6ò÷÷B@€—C÷½fÔ×k +Q[«¶ J„CÉö³BÑLÞÞÝÝ|¾?¸\xúhê _üºÝĦ­[O#!ƒÂoéq**àããŽààž9t± Þ|s'6n<_~™G–o÷“&}ðð@¬Zuó¿Ÿúú& ðÆ5÷¿%6QPPP8* Es§©pyy5‹UEFàlâROLPÜ &Òq$+QS£‚D¢‚TÚÞs¤Ñ´¢¹Y‡ÖV= Ó5F£ÁÃÃÅ*¹“Ž¢p8,²XÚ&Ù$g‹ÇÔ×7Y'¶b[m­ÊêH"J MäI;“IGHˆ/BCÈ…ÐPòg{mß*6QÉæ.± K6QÉVöϱ JDÜ)66¤[œ9ƒ §NUàÈ‘b9RŒ¢")\]<8™™ ÈÊJDb"÷ša»Ò|#Ðh4Ðé4|ùåcغu%6oÞÜéßétwx{ß/¯hj:ææS]~n\îshlü --vx<4øûO„»{4,ƒñ㇓ýH—Æœ´Z^}u;~ýõ@MÍÇ7캨¨h@NN rs…8~¼-`³}‘šww444áܹ*ètFÄű‘‘‘€Œ † ‹¹é..J¥–Œáµ—“ס±±ìC>ׄŽ5’Çu&·€Ssútþ÷¿-P©ZðÅÓ1ztÒuïc›n<<ÀbGCÃO0]~&“…ÀÀG@§»C¯¯ƒÑ(ƒÁ ‡Ñ¨€Ñ¨€Ù¬»þƒÜ$Î 6Y,,X° ÙÙBìÞý<"#ƒzd»¿ÿ~ lĹsowIôî×ïu,\8³fì†Õu ”ØDAAAáÈåÍä48›k©¶––BCýI§’M`r”P çÁ`0A©lF}}*+å‹HÔ¨¯oF}}#T*bªšV«C[›F£ùªE§ÓàêÊ$…£€Oz“åÒ|¾?x<¼HáÈÛ»÷Ü7ö¢©© µµ*Ò…$•6ZÅ$jk WRÇŽ¨p¹„ˆÄçû“¿›C)8ØÇᢃ •• d—’íû¥¢’Í¡dûÞ]¢RGÊÊê‘›+Ä¡CE8~¼­­zÄÆ† 3S€Œ †¹é^§‰?ÿÿV_Ó1A§ÓÀd2°aÓ5*§NBu5QÔÚØ¨Çáõ8zTƒxϬX1·^‹*5ãÓOóàæFLJÞ\ìèzèõ&¼ü2!ˆÑé40tR0öôtEl,©©¡¤+H à"'Gˆÿ­Â{ïý§KÛ4™ÌÈË[]OBœ9#‚^oDl,11! Óòr9JKëÀdÒ1dHÒÓžž€~ýBoÙÝ%“5¢¸˜˜ŠWR"Cq±¥¥2²ÛŒÇcYËÈyÖXññ]ï £¸:Z­K–üŠíÛÿÁ¼ywcÑ¢{¯ÙW]]S§ì!à:……j¬[W&“ŽÅ‹ (¨ëBhy¹Ÿž`2i°X@–ÿûø¸€ËõDX˜7Ølðxž`³=àêÚuwðСC~kެžÀ`0aúôu‹Uؽûù9®6L4è-Ì›…yóî¾éûOžü%bcC°bÅÃݰºn›((((zš††&Ò­d—lÝaa—u,Q–Š+ajjT¨¬¬GMM»ëH¡h‚JEDÖZZtÐ錤›æJ0™ ¸»3áååoo7ë45p8¾àrYŸïOvõE€Ng„D¢‚DB”k×Ô(!•6’%‰D¦¦6òö>>îàóýIR»Èæ>Ÿp%¹º:î“ÉŒêjé).®ë³‰J—<ñŽ‹#ŠºÝÜzæyi4mÈÍ’ÝK55JøúºcäÈdf"DXXÀ-mãÏ?óñä“®ÚÆ`ÐáæÆÄÆ³q×]1äß×Ô(ñÕW‡±iÓ #ƒÏ>; ‹ßwKk²±fÍ!¼÷ÞnÀ¶mó–g—ǵ¡P4ãž{>A]]ã÷ÄÉ? F#!BÙºÁ†Å /Œ½å“³ÖV=NŸ®´ö= QX(NCR<žÚÚ (,” ¾¾ ^HK‹GFF<22àñì3-Õb±@,VY¨:k$pïétF2š”ijº á-**¸ÛËôo¶n=%K~Er2_}5|>Uùùµ;v%h4€ÇóÇï¿?wK‚³³…xì±õW=pueÂh4Ál¶€F£Ë%†FÜw_Ì™“Ùåí::M&Mú®øå—y=",/[¶ûöåáèÑÅ7íÜ~ùåm‹•زen7­ÎîPbEwR_ßDFàlKR)!,…‡^Ò± JXºiiÑ¡¬¬åå2ˆÅ„ƒF"QC©ÔB­nFÓŠÖV=ÚÚŒ0›¯|ÐH£Ñ¬Ù.ðöv‡¯¯½­=G¾ õGxxÂÂüÉŽ£Ûá¤I­nXLˆHD,PINr#&Ùµ÷$¹¹1ÁãùƒÇóç°°p¹~¤C‰ÇcÁÇÇ97‹Å‚êj%YÔm;©îx2m›þf‹Ùú•zZ,³{>\Œœ!ΞÁbRSC‘™)ÀÝw'’ÍìÁ‰åX³æ,¼â„B&“(šß¶íôï(/¯ÇçŸÿ;΂N§uŠºº2qöì›v»BþØcëqäH1èt† ‹ÅÖ­ÏØåq;"É1~ü'Ðju×t3v$(È.¼c÷ˆ«R©íÔ÷T]­€§§+RRBáçç •ªÒÑ6ztFJÆÐ¡Ñv߇ÙÄØÂB )@I!Éa2™áâ }‰‰\¼+F)®Oq±³g…B‹U«½¡X]_G&kÄw¼€ØEFâ·ßÜÒ¾eÇŽ³X°`ÓMõ^½ýöƒxúéŒ.oÓJÕ˜0aúõ ņ ³ºÝm,É‘–ö>~þy.ÒÒâo꾫WĦM'pâÄkÝ´:»C‰MöB&k´:–Ú£p2Y# ""ð²Ž%˳—WLшD TTÔC$’[K¡!—7A©Ô¢±±Z­:ƒùŠ ®®Lxx¸ÂÇÇ,–)ÙÆØGE!<<^·mäC¡h&¤Ž¢’MX²EeXE·k´­½hÛVÄäœ1ÕÚZJJˆi]¶\IIZZˆIk¡¡þ䏸Žn¥®vãØ™¬GŽqøp1rsK RiÁ岞¬,ÒÓ캯4›-øã‹øò˃8w®C‡F#>žƒ-[Nv[˜Lüü<°cÇ|ÄűQX(ÁªUaÏž `2é—u”1™ Ìš•†·ß~ÐnëLHX­¶ÝM×Õ)F×ãß«ðÐC_Â`0Âl¾öiFÃï¿?Aƒº¿TW$’“âÓÑ£¥P©´ òFBnnLë~U__wdf&bôè$de º5£Ó­(¢ ª°˜Œg»ˆäëëNÆm_‰‰\êóþ:Ül¬®¯c0˜ñùg¸Ø¾ýÙ[r¯^}Ë—ï½®àD§ÓÀå²püøR‡¸a/ŠŠ¤˜4ésLš4Ë—Oîöí=òÈZ°XX»væMÝï÷ßÏcþüŸPQñ‘³¼?(±‰‚‚‚¢+ÔÕ5vˆÁâ’L¦F³ K¡Ä%G«Nqk(•Í(/—C$’£¦†2êë5Öik-hnnEk«z½ìE舭ÿÅÝÝÞÞndQ6›í ÇaaˆŽFtt8–]§P932™m‚›Šü½?«P]­@[›ñûe³ýJ8’ÂÂQ©ãÏ=ë.d2M§^¢W© !L°Ù~¤K©}Û!ÜX:'O–[£qE(*’Â͉»îбN%K¸n±wWÐëØ¶í Ö®= ‘HŽqãR0oÞ( ­V‡þýßDK !Hº¸0ìƒ;æC.oƧŸÀ¡CE`0èd¤ìR :ΜyŽŸ]Ö[PP‹1cV’f2¸çž~X¿þæNNn”£GK0mÚºëÆmï¹'ë×?Ñ-k¸f³ùù¶¾§Rœ>]¶6é:Ôju()‘Ál¶`À€pŒ›ŒQ£’”Äë‘õ56¶X#©„Ø+Ö¡¨HJ–’³Ù~8HJâ‘Sñâã9ÝÞsælØbu©©¡øòËv‹K:#±±‹È ñþ80[¶Ì½¥‹J¯¾ú 6m:yÍ÷:@Ãúõ31aBÿ.oÇÙ8p O=õÞyçÁn/à¶…_¸ðÎM Ñ/Š1nÜÇ8qâ5DDvã í%6QPPP\©T}YÇR}}h4"#ƒšÚ¡À;”–œŒÆÆÈåͨ¨h@uµUUDq¶\Þl¸Ö†–ÚÚŒ0™LWèv¡É¤ÁÍ OO7øúzÀßßÁÁ> ñEXX "#Œ¸¸‡îñé-Ìf d²FÒ‘ÔîPj•t:¢x›É¤ƒÃ! ¶mRh¨?BC‰ï|¾Ÿ¹{éT-¢ÔX µš8 ô¶NÒâ18€??ÇrQ”•ÕãС"r"Yk«qqlde ™)ÀСÑÝæÈÓhZñÃǰaCÔêVLž|'žy& 11!n÷㫯ƒÁ` ""[¶ÌÁ¢EÛqäH1\\èdù÷•pqa`êÔ¡øðCû•¶~ûm.Þ|sg§Bƒ†ÜÜ%Ý69éz1&“ÜÜÅq’£ÓqæLrr×ÓÅ‹b@xx<<\!‘¨¡V·€Ï÷ǨQ‰3&#FÄö¸¸#•ª;9 l1V΃NöA Ä{81‘‹ÈÈ ‡ГP±:‚;ï|›ìó´Ád2–‹~xºËŸs&“O<±ÙÙÂ+ŠçL&‰‰<üñÇB§›{«|õÕa¼ÿþlÜ8 ݶΈÔÔ×±dÉÌœ9â†ï×ØØ‚ÄÄ¥øùç¹HOï¾õÙJl¢   èˆD¢&#p6q©¡–¢¢‚ȉpýúS_,JvvL&3 -Š&ÔÔ(QQÑ`íæQ¢¾¾*U3Ôj¢ûH¯7]ñÄŠF£ÁÅ…AN[#¢kÄ´5>Ÿ…ðð DD &†Ÿ^x–Î…ÑhF]]#)UW+­SÝÚ{“l±$x<éB @xx»+‰Ëe9‹}ü†ill±FÞdŠŠ¥d”ŸŸg§1íqq„3ÂQ§Rj4­d©wNŽb± ,–'ÒÒâ™)@V–à–Êno©T¯¿ÎÆÆ'@§Ó1cÆp<ýtÆU߯µµ* üüý½pôèbøû{aïÞ xúéïA§W©H@ˆ@G.µ«óôÓßã?.v›\\xä‘¡øàƒî›Dtµ˜ “É@p°7.–/ŸŒððÞœ:¢V·àرRÒùTYÙ77&8ôz#êêáîî‚´´8Œ•„1c’ºý5x5L&3D"9ŠŠ¤ ¥(.&ĨêjL&3Üܘdܵc)ùíäòÑjuX´èüöÛ¿˜=;‹ßwÛ]¨¹çž‘—'¾ìï™L:î¹§¾úêñ.‹’­­zLšôŠŠ¤—E‚i4ÜÝ™˜4i^~y<Ølß.mÃYY¸ðgìÛw»wÿqqìnÛ΋/nEi© ¿ÿþÜMÝ/6v–-{S§馕ÙJl¢  ¸}‹U¤SÉ&0)Í ÓiˆŠ îÔ¯Ô¯_¨CDPnW ŠfÔ×k “5A$j Ý/ MË›¡Ñ´Z'¯™\ù£è>rŸŸˆÒlb ½?"#‰èçOõkÜ$ƒ ‰šìIª­U¡ººÝ•$•ªÉ>WW&q³ÅÛ:FÞØl¿>lk3EÝWê{ñöv#O2‰ï„ÀÄfÛ'šÕ]˜Lfœ?_ìl¢{éüùjÀ€áÈÌL@f¦„÷ˆ[£¤¤kÖÂo¿ý‹€oÌžÇvCûïõë³1mÚÐN·Ý»÷æÎý‹ùŠ‚“‹ & À—_>fϧ¤¤¥¤ƒíÒíýóÏ›î>‘ûJ1oow¬[7o¿½55J¼øâ8Ìžé°Â¯X¬Bn®t>)Íðòrƒ;”J-ôz#RRø5* ãÆ¥ ÿ°^wqØö67£­œÜÖýèëë¤$¹HLä!1‘pDyy¹õ꺻“mÛÎàõ×w 4Ô«WÏè–ˆ­£2sæ7øë¯‚+þƒAÇÃÆÇOíòëÖ6R&k$?Ÿ™L:ÆŽMÁ˜1ÉX¹ò¨Õ-˜;7 sçföé×YG yä+H¥Ø½ûùn»¨süx~x Ž»9·êˆïcÊ”Áxþù1ݲ.;C‰M·55ÊË:–”J-ètbbB:ÅàRRBáí}{|¨ö&mm(ͨ«Ó@©l†X¬De¥Ri#êê¡P4£±±Z­z½ñªÃ`Ðáéé __°X ñ‡ã‡ððDF#22l¶/½ûL¼ª§Ñë—”n«H±¯¦F ™¬‘,vwwAxx 5Úv©¨p[\%½žsÁÕ•‰øxv§áøxçšd%É‘“CŒ¬?z´Mx<23‰h\ZZ\ж§NIb@Ê IDATU`ÍšCøûïBÄűñÌ3YøÏÙå=¿wïÌ™óËe‚FÑ#‹ìz¼¢¢iiï_ñߘLæÍË«¯Þg·í]Ê¥1:†7Þx³ggÀ`0aõêƒøüó¿ËÆÊ•SÉI}ŽŠÅbAQ‘99%ÈÍâäÉ ´¶êáãã‹Å‚æfø|L˜Ð÷Ý—Š#JðV«‰>¨âb)ŠŠ$(*"D(­VGöDÚ(€‹äd""‚ê9Ü UU ,X° /Ö`É’ øïÓ{]ì .ü¿üræªÝJt: ÿýo:Þz«ëC D"9î½÷S47·Áh4wŠÊ¶µ°nÝ|õÕ!xx¸bÑ¢{1yò`‡˜í‰BÑŒ‰W!4Ô›6Íé–cG³Ù‚¡CßÅ´iC±pḾßC­†@ÀŲeÙ}MÝ%6QPPô=ª«—t,‰¡RiÁ`Ð;K„¸”’¿m®Öô--zÔ×kÐÐÐ…¢2™55JH$jˆÅJ(•Z¨T-hnn»ÌºÝxy¹# À ÁÁÞàr‰žžÈÈ`„‡ (ÈŽõÿgL&3¤ÒFTW+¬_J²¿J,VB&Ó·õöv#û’l=I6Q)44Ài'¹u•ku²Ðé4²“ŇILä!22ÈéØmѸÜÜää”@$’ÃËË Ã‡Ç"##éé ˆ ¹þٳق?ÿÌÇš5‡pö¬C†DcÞ¼,Œ“lדÑÿ­Â”)kÐÚjÖ.81™ Œ“Œ fÙm[°iÓ ¼úêö«ždzzºáüù·»õ¢ˆ-f“—'‹å‰ ÞétÂUQÑ€E‹¶áäÉ Ìš•†E‹îuš}±Á`Â?ÿˆ¬¯g!Ο¯Ùl«+:þþ^˜8±?&L€aÃb²?Éb± ªJ¢"©U|’¢ @‚ª*9Ìf <<\‘À!PÉÉ<§uíf¬^ý7>ùäOŒ‡Ï>{´Ï_¸X¶l¾þ:ûšÛàÅïÁ‹/Þ¸Xq)µ¸çža2Y0{vÆeâ•R©ÅÊ•û±qã DG‡àÍ7@V– ËÛsŠ‹¥¸ÿþU˜:u(Þ}wR·lãý÷÷`ïÞ<;¶ä†ïóÌ3?Â`0á›oìû¹ÓMPb…sSU¥¸¬cI­nƒAGlléVê×/ÉÉ”°Ô, äòfÈåMJ!—7£®®‘œ fs!©Õ-Whèic2ðñqC@€7‚ƒ½â‹ðð@DFƒÃñ—ë‡À@y÷™«²Ž‚J¥EuµUU ÔÔB’MTêØ™äîˆ@„‡_¶xáPbÁßß«—ŸIï Ñ´¢¸˜p)ÝÈ´)­Äî¶âëîÆh4ãßEÈÎ&¢H¶h\jj(22HOÇ A‘½âÔëøõ×°fÍaTV6`̘d<ûìݸóÎ(»oëÔ© ̘±ÆÅbÒ¤Öm"RG£ÑðÇ ѯ_¨]·¹`Á&ìÜy&ÓÕ'ß-Y2Ï<“e×í^ŠBÑŒ‘#WàþâT*‹Å‚mÛÎàí·wÁÓÓË—OƘ1Éݺ¦î@£iÃñã¥ÈÍ-ÅÁƒ¨®V‚F£Áb!D›ôôxLŸ>  ïŽmmÕ“â7ᆒ  @BF29?Ò•œÌ‡@ÀEllˆÃ?/çÎUãÙg‚FÓŠ?œ‚{ïMíí%uëÖÁûïï…Áp¹ØD£Ñ@£‚ûÒ¥0wnÖ-‰¢G–búôuÈË{çª&**°lÙnìßiiqxã’Âïò6½{/`öìðé§Ó0eÊ`»?þ… 5?þ<øÊ GDßzk'þùG„={þg÷õt”ØDAAáØ®âÙD%Ûw¦ qqlÒ­”šФ$><=ó$¯§ÐéŒhhh‚LÖˆ†BHR(šÉž™¬r¹MM­dD è|cƒÉdÀÏÏ>àr}Áçû#""<žØl?°Ù¾àpü¨Þ«nD§3¢¦Fi‘: J55 h4mˆU.דÂȈˆ@„…Þö…çz½‘,êîøe› äë뎄n§\b"×i©¬lÀ‘#BääqüxššÚ€ôôdd$ôx4îR4š6üôÓ1|óM”J-&OŒ¹s3»­Ä5'GˆY³¾Å¨Q‰øòËpqaN&“™™ ؼy®Ý·{Çovr^±‰>êv‘@&kDHˆï5bry3Þzk'vì8‹ûîë÷ÞûS»N¤R5rrJðçŸù8z´ÍÍ:Äç\¿~¡˜2e0¦NÒã“ín…ººFÒe¢ÊÊd0Lpqa .Žmíâ’n(GíŠÓjuxãØ²å$¦M» ï¼ó`Ÿ¼¸mÛ,\¸¥Ó±ƒA‡ÉdFRÏ<“…ûï¿Ãnû€††¦ê‚;y²Ë–íÆ¹sÕxè¡;ñÊ+ãÁç;OüfY¾|/¾ù&;w.°û…‹Å‚»îzS¦ ¹awÚêÕ±yóI?¾Ô®ké&(±‰‚‚Âñ°X,‰äÈËw(ðC£i“IG\Ç*,âRRÏiÝÝFÓ ™Lƒúú&«`Ô ©Tº: Äbê뉈[K‹¾Óý ,\v`Ãby"(ÈŽ""Áç³Àá½H!!¾àp|nÔz_Äl¶@&kì$ Ù~®ªR ¾^CNò÷÷Bxx) N%BTâóýæ*vwb6[P]­è+*’@$’Ãh4ÃÅ…øx¢ ÛCIHp®^¥ë¡V·àèÑR«{Iˆš%||Ü1|x,ÒÓ™™€¨¨àÞ^&d²F¬_OL–`,—Þ­'ÃÙÙBÌœù &N€Ï>›ÖÉ5°gÏÌžý=vízƒÛ×Me›Š×ÛtL‹0™Lä>úã§bÚ´»ìºý[!;[ˆW_ý*U –,™€ÇÖ'ªÅÅRìÙs{ö\@yy=L& h4ÂÂ0fLž~:áώ̛Æ`0¡¬L†¢"©U€"D¨º:¢Üßß ÉÉüp?êê1{væÍ»¾¾½¶¦îÂd2cÆŒ¯QV&Ãþý í^þÖ[;­®Ê—oèö7žÀûïïAaá2»®£› Ä& ŠÞÅb± ²RNN„»x‘˜4š60™tÄÇsȉp©©aHNæ9ÕÕD{a2™!—Û¦±i:EÚ$¤ÒFÈd(•M0Ú{>h4€Á`Àb1Ãdê,"ùùy 8˜ˆ®EDÃñ%$.×ÁÁ>;Z½¯¢×Q]­„H$Guµ••rTUÉQUEK¶î77&ÂÂȸ[GA),,¾¾”ƒ¬#2Y#YÒ]RbëU’¡µUOö*ut* DG‡8]¯Òõ0L8{–ˆÆeg qñ"1V{À€pddî¥;îˆp˜ç-Éñå—‡ðË/gàïŸÎÀŒûÝ!yüxfÌø&ôÇ'ŸöÓŽæèhk3`åÊ?°~ýÜqG>øàa}g‚˜ÑhÆÁƒ…Ø´éNŸ®„FÓ ðñqÇàÁQ˜6í.de œÚY­V·  @‚âb )D …uhmÕƒÁ #""Ðê~jŸŒÐ+¥Ý2™ÿûßf;VŠgž¹/¾8®®Ì_Gw`‹XÀO¤aöì @FÆ ¬X1Ù!„fƒÁ„ r±jÕ_`0hxé¥ñ˜>ý®>wAK­nÁøñŸ <<›7ϱkÛéÓxðÁ/pìØ’º¸³{÷yÌû#Äâ¡(Ÿ›(((z³Ù‚ÊʆNýJ/ŠÑÔÔFºÚ…%¢cÉÍ­o4\ ¦•œÀVW׉Dúz $5¤ÒFH¥*¨T-—9Ž˜LÌfs§ž$:ËÁÁ>àrý€à`ðx,RX öéÖ±Ù×F£i…H$‡H¤ ¥êjâÏR©šü òFDD ""‚dý™øº^¬åv¥­Í`íR’Xdž¥¹*•ìC^¥'KD¿’3Ÿ^²²zääâÒñãeÐjuˆŒ Bzz<ÒÓ–ïpâdAA-¾øâ öî½€°°<óL¦NÒ#'‘gÎTbÚ´µ=:_~ùX—C76¶€Á`t*ÿ~ç]8q¢û÷/ìÑµÜ ……¼ôÒVÔbÞ¼»ñüócúä…¢ÚZÖ­;‚òQS£‚ÅbNCll&L謬$ æ%ã7ƒÙlAU•í¨¢" ª«•°X,ðñq''á%'ó‘”ć@Àé”ÅbÁO?À{ïýŽÐÐ|úé4‡Ÿx#Èdlß~=6¬“{|ñâíøë¯;¶ÔaŽ‘5šV|öÙlØ >߯¿~?Æï×Û˲+……Lœ¸ O=5K–L°ÛãšÍ ø&fÏÎļyw_÷ö99B<òÈZ-s†T%6QPPtf³ååõbpùùb47ëàâÂ@BÇÚ¯Dt,%&òæCÓ^ &ÈåMHÔ¤ds I¥jÔÖªPW§Ng ïÃ`0àêÊFÜ¿£äâ›í …°°@°Ù„xÄãù“ìãôµ}º:"î&É;|'%›ðÁ`ÐÁ㱬bR )(EF!<<ê·º55ÊN'=……TVÊa2™áááŠøx6’’øHJâ"!è! èûåæJ¥G– ;»ÙÙÅHÔðõuGZ!.¥§Ç#22¨·—yENªÀ_üÇ‹‘˜ÈÅüù£0qâ€Û§;WiÓ¾BZZ<Ö®é0¯µkà›o²ñÏ?oööRn ³Ù‚ï¾ËÅìCHˆ/>ø` FŒˆííeuM¶m;-[NA(”Âb!„OOWŒ‡ÌÌŒÙóS»“æf„BÂý”Ÿ_KîµZ :¢£ƒ‘˜ÈEJJ¨U„ê¾.¨êj^zi+Nž,dzώÂÂ…ãúœÃ D¨á×á•WÆcΜÌÞ^N'ª«X±bví:‡;ïŒÄo<€AƒúN¼qëÖÓX¸ðgüøãÓ5*ÑnûÒK[QVV;\÷¶6ÇÛ‰¯!""Ðnkè&(±‰‚‚âÖ1™Ì„%B\Êϯ…VKK—•lKÎ~ Ñ´¡®Î&"â‘LÖ‰Ä&*©¡P4“.77 Ìf ôzc§±Ö^^îàñ|6ÛìE²ýÌfûÝ'Ê΂Á`‚X¬„HÔYH"œJ ÐéÚãn„ˆDJ„ „ÐЧôZ­ÅÅ;EŠŠ$dá¹-g+µMNæ#""ð¶] Nª@nn ²³…ÈσN§aàÀHddâÒ€áûû°X,8t¨_|ñ7NŸ®À!ÑX°`4î¾[У²zLšôî¸#6<éPïÍmÛÎ`Ñ¢m¨¬ü¨·—Ò%¤R5–,ù`Ê”ÁxãûûüTK…¢»w_À–-§Ÿ/“Éf^o‡ã‡ôôxŒ‘#úÜP†Ž.¨‚‚Z"Tm­ èäd>’“yHJ"œP±±l»ˆ»‹?üpï½÷;""±jÕô>91mÙ²=غõNzÝa:´:röl–/߃'Ê1qâ¼úê½{‘ãfyá…-8p ¼h·bô?þ¸ˆ§Ÿþ/¾{Ý!"‘Ç/Ãß¿Œ¤$ž]¶ßPbÅÍa2™QVVOº•.^£  ]XJJâuŠÂ%&:—°d4š!—7¡¶–ˆ²I¥j«©ÑZ²MÄÜZ[;º‘èpwg‚F#¦„èt†"ä.× |¾?8_p¹í%Û|>Ë!nw s«¬l€H$Gy9ñ½¶VEŠ…,–'¢¢7RddP'‡‡ã˜Ó|[awAAmqIŠª*, ¼½Ý ´OKJJ"ŠkoG˜PX‡ìl!rs…8~¼­­zDE#33éé ><Öá/&“»wŸÇêÕQT$ÅÝw °`Áh Ýãk‘JÕ˜0ax<¶m{ÆáöǶ¢`¡p¹Ãÿ¿^‹}ûò°té&¼ùæ˜<ùÎÞ^RP[«Â®]ç°cÇ¿(,¬…··;|}ÝQ_ߣр‹´´8ŒáÃc®‡Ë^¨Õ-ÈÏ£¨HŠ‚‚Zäç×¢´´}"Ãã“û÷”~— §««xá…-8s¦Ï=7Ï??Æ©ŽE¯‡BÑŒ¡CßÅ+¯ÜKv99"û÷_Äòå{PU¥ÀSOÄüù£þÂik«&¬‚§§+vì˜o—×Us³ÉÉKñÅÓqÿýw\ó¶R©ƒ½;ôÊçåMB‰MWÇd2£´TFº•òòÄ(,¬EK‹®®L«°J–w \‡þ07™Ì¨¯×@,V¡¶V‰DÚZ"ÎFt$5B.×tr#¹»3ÁdS€ŒF#ÚÚŒäã1™ °Ù>àó¬b’x<Â…DÄÛX ñuèßÉíŽÍ¡TY)GEE*+PY)‡H$‡X¬„ÑHJAAÞˆ‰ Add¢¢‚­¢!(õÅé+ÝFÓJŠI6Ç’PX­V:†ˆˆ r ’­ˆ¶· h…¢99%d÷R]]#X,O¤¥ÅYÝK  sŽiXz½[·žÆW_FM'Àüù£zí ­FÓ†I“>üöÛs×_yy5¸çžOn¸@Ö‘ÑhÚ°bÅüøãq¤¥Åãƒv†(ˆÝ(+«Ç®]ÿâ×_ÏB$’#""<ž?Šf”–ÊÀ`®DÂõ‡#&ÎÙ &”–ÊŸ_‹âb òó%ÈÏC­n„†ú#)‰”~'çê|˜Í|ÿýQ,[¶QQAøüóéÎà¹aÞyg~ûí_œ8ñšC÷¡flÜx+Wî‡ÑhÆÿþ7O=5Ò©ËËë1~ü'xä‘¡xçIvẏþ|¾?>ûìÑkÞN£iƒ@°[¶ÌEFF‚]¶ÝPbÑhFiiUX"Ä¥ÂB Z[õpsc’Ž%B\ CBÇá>(ššÚP[«ê$&I$jÔÔ(!‘¨PW×HŠ žž®pu%„$΀–9:žÉ¤#4”‘ø|ðùþ—ÅÛúšõ½¯b4šQS£ E¤Ž¢Ò¥‚Rdd0¢£ƒm–§’3» z£ÑŒÊÊòJ¶Í±d‹Søùy")‰KN5JJâ#!¡ovß:§OW ;[ˆœ! $`2é4(ééñÈÈ 55Ôa£qW¢¹Y‡<†¯¿Î†JÕ‚©S‡à™g²z5Z¡Ó1mÚZTU)°gÏóàrY½¶–k!‘¨qçoc÷îç1hPdo/Ç.œ=+Â+¯lCe¥/¾8sædõiQåR, Μ©Äöíÿà÷ßÏA«ÕcøðXÄdz¡Ñ´áøñ2ÔÖªàåå†áÃc1rd<ÒÒâúÔd¿kQW׈ü|[胉ä0›o¾Œ\$’ã…¶àß«°`Áè>ãrª¯oÂ]w½‹7ÞxO<1¢·—s]´ZV¯>ˆuëŽ (ÈK–LÀÜá´‘ví:‡yó~·ß>‰qãRnùñÖ®=‚5kâüùw@§_ýwb0˜ñ¾ûî)»l·›¡Ä& ŠÛ£ÑŒ’’:r"\^^ $hk3ÀÝÝ…t,Ù ¼ãã9½~h4š­6BL"\I*RLª­U¡©©¼½»» ÜÝ]@£Ñ`2™¡ÕêÈØFCH1¡ÇóÇBh¨§?‡„ø8íàíˆÑh¶v(‘7[ÜÍ&(ÙŠÖ¼‚èè Ò¥E|§¥[C©Ô¢°°……í…Ý%%uÐéŒ`2鈎!¯LÛ&ÂÙ«ïÀÙ±X,(.&¢qÙÙÅ8}º­­zÄÆ† == N¯Q(š±aC.¾ûî(L&|ž~:l¶o¯®Ëb±`Á‚M8t¨¿þ:‰‰Ž{¯×ù26lx²OMx2Løê«Ãøì³ˆŠ ÆGMÁÀ}§LøFÑëøóÏ|lßþŽ)†‡‡ î½·?FŽŒCcc+Ž-űcehllAHˆFŽLÀÈ‘ñHO¿­¢ÚZ­BaÁ»r9¿»´ŒÜl¶àÛos±bÅ^ðùþX¹r*Žêågtë¼þúoØ¿?'N¼æ4šD¢ÆÊ•`Û¶Óèß? K—NÄðáÎ98ॗ¶bÿþ‹8tè•[þL+*’bÔ¨ñ×_/!9ùÚ=caa/âóϧcÒ¤·´Í€›((ú:ƒéa‰èXÒéŒððp½DX E\\ïK-HÔ‹U—ÄÜT¨©Q¡¡ACŠEt: ^^n`2é0›‰qç'ºy{»ƒÏg!,,\. <‹t'ÙœJÎò¡LщDŠŠz”—7¥òò†Ë%‘ŒèhâËæR¢"o·ŽÑhFY™Œ,}µ9–d2 ¢üµc§RR œ[ïLÔ×7!7WHº—êë›à…´´xddî%Ï167Bm­ k×ÁæÍ'áé銧ž‰Y³ÒfTóêÕñÑGû±iÓ¤¥Åõör®KBÂb¼ùæxôÑ»z{)v§²²‹mÇñ㥘93 ‹ßooçVí\ÞŒ]»þÅ/¿üƒ¼¼DFáá‡cêÔÁÉšpôh rsKpæL%t:#bcC0r$1`ذX‡Œv'f³"‘……×/#ONæ#8ØkÖBnn fÎÅ‹'8õk­®®C‡¾‹•+§âá‡÷örnŠüüZ,[¶ÙÙBŒß‹Ý‹øxNo/ë¦hiÑcìØ•àóýñóÏsoé"µÅbAJÊëxá…±øïÓ¯y[`1^{í~<öذ.o¯‡ Ä& о„Á`‚PXgíW":–ŠŠ$¤°”œÌ'…¥~ýBgŸé×Ãh4C*U_q«­UYÅ$%ZZôäí=<\àêÊFƒ^oBk«¶=•‹ Ý*µ H< \.!.ñx,Ê¡âä45µ¡¢‚“ÊÊdVa© äëÄ××11ÁˆŽ!I‘‘Aˆ‰ ¦%;¢Õꬉõj²ÅÅRètF¸¸0Ç&E¥”>/½ Z­'OV 7WˆœœKáâÂÀ!QHO'z—úõ ½¦}Þ(-•aÍšCرã,BB|1wn&}ô.‡*Ý>p ³f}‹÷ß3g:~ü†_†iÓ†bÁ‚ѽ½”nÁb±`ûöðöÛ»àææ‚÷ßÈ""ÝŠPX‡-[NbÇŽ³P©Z™™€©S‡bܸ&œ9S‰œB|*(¨NCÿþa¤óéÎ;#oÛ k×*#÷ðp‡ã‰DwwW,\8O<‘æ´¿«çŸßŒ jpøð+NéÈ?|¸ï¾û;ÊÊdxì±aX¸ðy÷ö²n˜¼¼Lœ¸ ‹OÀܹ™·ôXO=õ-`Æ'¯y;`1/žà Ÿ_”ØDAᬠ&KIQÉÖ±d0˜àéi–ÂÈï¸8v·õ{X,Ô×kP]­DMUU ÔÔ(QS£@uµR©ºSW’‡‡+˜Lbr[k«žü7†à`ðùãm6a‰Š·õ jj”(/¯GYY½U\"~nhh¸¸0ˆØX6¢£ƒŒ˜˜DG‡8Õˆ³P_ßD^ÎÏwêÈðõõèMhw-9ëÁyO`2™qþ| ).=+‚Ñh†@À%ÇžãP"Ì­pþ|5¾øâoüùg>bbB0oÞÝøÏ9Ük¤¨HŠûï_…É“ïÄòå“{{97̸q#==K—Nèí¥t+J¥o¿½ ¿ürãÇ÷òeÝVQ±+a0˜ð÷߅ؼùŽÂßßÿùÏ <òÈP²ÃI©ÔâèÑRÒùTU¥€§§+†&O‰‰ÜÛúø©ãqsAA-ΫB~¾&“4 ýû‡£_?>úõ#¦);Ct¹¸XŠQ£>ÂÆ³‘•%èíåt ³Ù‚mÛNãƒö¡¹Y‡ùóGaΜL‡.>ïˆÍ)»oß ×À]‹o¾ÉÁ§Ÿ@~þ»×|¯Rb…]1L(,”tŠÂÂ’——RRøäD¸ÔÔPÄÄ„Ø]XR©´„$±˜ø™˜Ð뉓­x›Á Ãh4¡µU“‰ØÍ¸¸0æ°°„†€ÏgY¿Sñ¶¾ŠL¦Ayy=*+mN¥z”—×£¦¦=öÆå²ÈRîèè`ÄÆ²ŒÐЀ^ï 님LfTT4W{óókQXX ¹¼Àçû#9™OŠKÉÉ<„‡ß>Ó¢n…ÊÊdg— 7WˆcÇJ¡Ñ´Ëe‘âRZZ|Ÿs~=Z‚Ï??ˆ£GK0`@8,qãRÒ¡¥Ñ´áž{>Fh¨?6ožëTû—‡þ11!X±âáÞ^J›[‚E‹~BÑŒW_½3g¦9äkª§‘ɱmÛlÙr "‘ƒEbêÔ!xðÁâ`UU äæÂÓ±c¥P*µ òFZÑõ”–ÐPª3Ïd2cË–SX±b/´ZÂÃ!“i Ñ´‚N§!&&ÉÉÄ1v¿~|¤¤„‚ÅrŒ(pG}tôz#¶o¶·—rœf… IDATK´´èñõ×ÙX½ú ||ÜñÊ+ã1eʇï›ÍLºõõMøã…]¾ˆTX(ÁèÑáàÁW®Ù#H‰M]F¯7Z…%1YÞ]\,…Á`‚··RRB­Â!.ÅÄ„Øe'l2™!‘¨QUE”*WU)Ȳåª*_¢Óipww“É€ÉdFK‹žœàææÆDxx BC A),Œ’lâRoÂRt--zÒ™T^NDßl18[i»··)&ÅÄ„ 66„ìSr†+‡ÎJk«¾SŒÀÖgÑÚª“IGl,Û*(ñ‘’ÂsØiGE¡hƱc¥¤À$«àíí†áÃãH).ŽÝÛË´;‹à‹/þÆ¿ÿV!--Ï=7 iiñ½½´k2{ö÷øçþúë%:—;òÉ'¿…»» Ö¬™ÑÛKé1ÚÚ øôÓX»ö0RSCñá‡SºÈ½'±X,8uª›7ŸÄž=ÀdÒñÐCwbÆŒáHJâuº­ÙlAAA-rsK“S‚Ó§+ÐÖf@TT0¹Ÿ1"ÖaúÔz­V‡+öá»ïr­û³ÑP*µ((¨ÅÅ‹bäç‹Q_O¸®ÃÑœÌC¿~¡Öcr>YDÞ[?^†É“¿Ä,DjjX¯®ÅÈd|öÙlÚt \,Y2Áá][‰£G„¸£Ë®Y³Ù‚ää×ðòË÷àÉ'G^õv”ØDAAqCètFÒ±DˆK5 ë`0˜àã㎔>Ù¯”š†èèà[–ôz#ª«‰‰]¶/›( ‘¨È8›‹ ®®L˜Íf´µȾ$ww„‡‚RhhgA)8¸o]±§èL}}ÊÊd(+«GII³q2™t„…v’¢£CÜëb· Es'·RAA-**`2™áã㎤$éT"FEsáæF•vß mmœ>]œœääQX(NÃwDX{—âqÇN嘹ŒF3vï>/¾øBaÆŽMÆ‚£b‚Ø·ßæâ­·vbûög1dHto/ç¦ùßÿ6C¡hÆO?Íîí¥ô8EER¼òÊ6äåÕ`îÜ,¼ðÂX§‰×ôM+~ùå ~üñ8JKe¸óÎ(<þøpLœ8àŠûxΈ3g*IçÓÅ‹b@¿~¡9’ŸŽº-?Ξ­ÂË/o…H$Ç‚£1þ(Òq/“ipñ"1dÇ6ŹºZ ñ!ë+lÎàÈÈ ]ûر+Œµkgöèv»“’’:,[¶ýU€¬,–.x™˜êHìÙssæü€ï¾{cÇv­snÖ¬ pqa`ýú'®zJl¢  ¸Œ¶6éX²x—”ÔÁh$N;º•RSÃÔ%aI¯7B$’£¼œ˜ÔERTW+¡PhI’íÃÓh4‘b’‡‡+ÂÂüDº‘l±7>ßßé®SÜ<&“55J”–ÊPZJK¶ï-__wÄÆ²ÏAL {‹ Axx ƒìlÓwQ‰8ð-,”Óà8¿8â 7""ð¶îêè*f³ùùbäæ– ;»gÎT@§3".ŽMŽ><Ω§Ýz½Û¶Áš5‡ +1qâ,X0šì‹qtΫƃ~ŽE‹îżyw÷örºÄë¯ÿ†¼¼ìÚõ\o/¥W0›-øá‡cX±b/½ñÁcäHÇvÒõÇ—á§ŸŽcß¾ýô¸\–/Ÿ|Õ‰•M+òòjŸ/ÁÅ‹5ÈÏo¿Ècë:$PD/6Öþ56~ÿý<æÏÿ G.ésÑ÷ãÇËðöÛ»PPP‹)S†`Ñ¢{6-ñâ‹[qà@>þþûå.­qݺ#X½ú òòÞ¹êq%6QPÜæ´¶ê/–Ä(-%„%__ôëÇ'E¥ÔÔPDFÝÔ‰ ÙlAm­ •• ()‘áâE1„Â:ˆÅJ¨Õ-0›- Ñ:(á¶áéé.ב‘ÁˆŠê((¢Òíl¡¾Ýhk3ýI…¥òòzèõFD—RllââØ¤ Ïés3ŽŒNgDq±”•òó%(*’@«ÕÁ #::˜”l% ßÕÕí]'¹¹¥P©´ ñAZZ<)0q¹¬Þ^fÐÒ¢ÇO?ǺuG Tj1eÊ`Ì›ww_±¿ZZô=ú#ÄÇsðÝwO:­èúÑGû±ÿE:ôJo/¥W©«kÄk¯íÀ¾}y˜4i Þ|óAê3é 444áçŸOaãÆ‹U92?>cǦ\×y)«›+Dn.Q8.—7# À iiqä~0"¢o‰WB,VaéÒ_ñ÷ß…xè¡Axãnh8IK‹……Äçµ­ŒÜV‡áááŠÄD.RSCÉ.¨ÄDž].ÔfŒ± cÆ$ã½÷þsËçhX,ìÚuË–íZÝ‚ÿþ7óçr¸*­V‡±c?Fxx6ožsÓŸ9/Š1nÜÇ8|x8W¼ %6QPÜF´¶ê­–Z1Yà]Z*#…%› ds-ÝŒÃ@¥Ò¢¼¼yyb\¸Pc,)¡P4“¥ÛñðpEHˆÂÂÀEdd ÂÃÁç‘7__w{?} G¥Ò¢¤D†²2ÊËë!Ö¡¼¼b±f³.. „‡">¾]P²‰K}Ý­áht¼Bj› WVFìK¼¼Ü˜ÈCJ …KLä!1‘Ûg&™õ&-8z´”¼ª/ÉáááŠaÃbHqI ¸½¦856¶àÛoâ›or Ó0cÆpÌ™“é”SÁ–,ÙŽ}ûòpèÐ"xõörºÌºuG°~}6Ξ}³·—âüõW–.ýM–.€éÓ‡Ý6Λ›Ál¶àðábüøã1:TÇO<1>züý¯ÿ~°X,(*’"'‡è¥;uª--zDD’‘»#âœú½u=þøã"^{m´Z=–,¹¯K¯5Û$<[/?_‚ÿ³wßaM^oÀ¿! 2dï-K@Ep[qP´Ž:Zg«ÖÙ¡ö­£Ö­uýÔÖQ«Ö«*Š«n÷`ÊÞ{ïqÞ?"Q0!ƒó¹.®V²îä><ÉsçœûDEe¢ªªrrLXYéÀÉÉpv6B·númz?t(7^ÁÓ§+¥6'55,<ø{ö܆¢¢–.õÁ¸q½Äjùzhh>ÿ|V¬…o¾éתÛr8\ØÛ¯Àÿý߈“ÜÜ~ÃÂ…ƒi±‰¢¤MUUÿ¢¾w||.8.ÔÔ”ø¥ú%q-ýö73³' $$ 11YHO/B^^9†I=TT¡«« ssmtëf]˜˜hÂÄDªªŠÂxÚ”˜#„ #£¸A/¥úÙJEE•x ºy¹u`m­ ^QÉÔT‹.}’’ª»KFDd %¥ÀÛÞ¼K†üÞôDJ0X,ž?Oƃ± ŠCx8¯_‰““!¼½møýJ:âßE~~9öᅦ£G‚ÉdbÆ OÌšåÝ¢“Rq‡/¿Ü‡C‡fà³ÏÚÖ?C\œ<ù¿þ€¸¸M¢ElTUÕaûöÿpàÀ=8;cË–q°³ß~.¢–ž^„#G‚qâİXŒ㆙3½Zµ–ÅâàÅ‹”73?cšBìí øÅù^½Ì¥®§Vee-¶m»ŽƒÀÙÙ›7ÿäÞAïî ûv)^JK« ++++]8;ñºuÓ‡¼|ó}´*+kѳç|ûm?,^<ô“âwEE•غõŽ só®øõ×ÏŪ‰øÎ7°k×-ܾ½¤Ùe¬M™4i?45;c÷îÉM^Þ³çÌŸ?ˆ›(J’UVÖ"22“¿#\xxóÀáp¡®®ôÎŒ%^qécSŠ‹‹+ñâE ^¾LATTRR ‘›[†ÊÊZp¹o—ºÉÊÊ@MM zzê°°à-‘qv6âÏP§Ê=Õþ22ŠŸ‹èè,ÄÇç"66ññ¹¨¬¬À+TXYñŠIÖÖº°´ì ‹®00 [‹JQQe£ÂR}SQ]]µj''CÚL]À!ˆ‰Éæ7õ~ò$ ÕÕu05Õ‚··5¼½m:üNLééEØ·ï.üýŸ@UU³g÷Ç×_÷•èÙee54h úöµÄΓDÎ'»|9 ß~{Ûiáù=ÑÑYXºô,ÂÂÒðÍ7ýðãà¤Dg}~HUUþý÷þþûâãsáéi…3¼0t¨C«ÇVYY ?NàÏ|JHȃ‚‚,zö4ãÏ|rt4ZŸ¢ö…eËþEhh*fÌðÂ’%>_Æ•’R€ððt„…ñ~""2P^^99&ììô ¬­u}1²eË5øû?Æ“'+¥®è×”ää|¬[ˆk×"ЯŸ –/Q‡6›‹‘#w¢S'9œ??¿U[›7_ÅÕ«á¸ÿç&/wpX%K|h±‰¢$EEE-"#3ø'ƒááéHLÌ—K ¡¡Ìß ÎÉÉŽŽ†M6Þc±8ÈÌ,Fjj!bb²š†„„µv–‡¸ár üýŸ`ÆËPPŪUŸÃÏÏEhK­¹\‚¤¤|„‡§#44 áሌÌ@UUdù;W;9¡{wc¨¨t‚‡Çz¬_?“'÷JLâèÑ£¬_ˆ°°t±i"aöaåJ_ÌšåÝâÛ]½ŽÙ³ÿAlìÆ& ç¶¶ÿ‡_ý'öd¸Â@‹MTÇS^^ƒÈÈÌ'„IIùàr 45;ó JõnC÷3BŠ‹+‘šZˆ´´B¤¦"9¹qq9HK+l°Ó[=Yhk×”ôàæf‚>},i_Š/7·”_TŠ‹ãÍTŠ‹ËFYY ÞL%½F…%ZT½¼¼rþÎ’õ…êì쀡a—…%''Cúw/Dååo¿]ðàí·ë½z™ówSrp0¤3BÞˆŒÌÄ®]7qõj8,,ºbÞ¼A=ÚUj–†…¥cĈ8rdî&êp",,>>ÛñøñŠÑœ¹­òó˱zu.\x…áðvíèÓÐÿS$'çãðá`œ>ý „LœØß|Ó¯Ágඈ‰ÉFPP‚ƒãñèQ*+kahØ^^6ðòâ5oIÓmqTTT‰¯àäÉ'pw7Ǻu_Àή}vèäp¸ˆ‹Ëå ã5"¯­eCIIÊÊÀfs°fºw7†™™v‡xÿ{·‰xaafÏî/ò&âÛ·ÿ‡?ÿ¼ƒ[·–´¸½JzzÜÝ×âÒ¥…èÑìÑå?`Ïž)=ÚUÐá -6QÒ­¼¼¦Ál¥ððt¤¤€Ë%ÐÒêÜèdÐÀ  òòÊ‘œœ¤¤<$' %…÷“šZˆòr^€ÁäädÁfsÀå0™2ÐÓSƒµµ\]Ñ£‡)lmõ鬊//¯qqÙ K¥¥UMÍΰ³Óƒ••Λâ’llt%¶WŠ´ÉÉ)mPT Ï@nn)ÀØX³Q¿6š7áb³¹xõ*…ßÔ;$$\.A·núðö¶‘Ú¾!ŸêéÓ$ìÞ} wîDÃÑÑ †“T„p¹£Fí„¶¶*Ž™)êp&%¥ëñß?ÂÑÑPÔሽ  8,[vùùåX¶l8¦Mó¤mZ ¢¢'O>Áþý÷—W†Ï?wÅœ9ýaoÿéË’š:ns8vvzo¾°»»¹Ä- MÃ/¿œCdd¦O÷Â?~&’Ù”,±±9OÇýû1 ‡¬,l6**àädggcþ¥¹h]SÃÂáÃÁøßÿnBQQ?þ8 _~é.’c‹ÅÁðá; ªÚ ÿþ;¯Å3àìíWàÇ?ÃŒ^ ~Ïápadô#šaÃ…² Ñb%=Êʪ‘É/*…‡óîB ­­Â?tr2‚AÔÔÔ!)©IIyHI)@rr’“óùË”d¡¡¡ &S••u()©!ššÊüƽvvzèÖM––:Ró0õi +ý¦ŸÒÛ¢Rq1¯Qw—.ÊŠJ¶¶zR»kˆ$ÊÊ*i0ó1""yyå`001i\X¢³ÌÚG||.‚‚âpÿ~,?N@EïòúâRß¾VtöØܹÝ»oáéÓ$ôîm ‹U#UAò÷‚åËÏáþýŸ›\ò.©ŠŠ*áà°gÎ|OO+Q‡#jjXسç6vï¾[[=lÙ2ÎÎF¢K"°X\º‚½{ï"** ýûÛbîÜðò²ØcTVÖâÑ£þrçØØÈÉ1Ñ£‡é›~O6èÞÝH"ú=q¹'O>ÁÆW 'ÇÄ/¿ŒÄر=Dº‹éÔ©Q^^ƒ•+}ßY‚—Îß1[MM Ý»óz?Õ/ÁÓ×—®Y€õMÄOœx33m‘5ý:ÇïÀêÕ~˜>ݳE·™0a/ôõÕ±cÇÄ¿/+«­íÿáèÑo$aæ.-6Q’©~‹ðúááéHM-!]»ªÀɉ×4OSS r(,¬@RR>¿¨TVV €WP23Ó†††2de™¨®®C^^923‹Àfs¡¥ÕùM>cþÁXÔë)ñP[ËFll6¢£³“¨¨,DGg¡   ®®Ä_öfc£ ++]ØÚêIìtqi•‘QܨÇRaa ÌÌ´ôWrr2”ŠÞ/’"7·ð–_µÒzÞ“’R€µk/áÚµxzZcÕ*ßvo"¾uëuìß·o/iÑ!ëÖâîÝhܾ½´Áï +àè¸.,€»»Ø¿ŸÓb%þJK«ø¥ú%,o·W…©©´µ;C^^55uÈÉ)CrrJJxË“äåeab¢ ssm˜›kC[[ÕÕuÈÎ.EttÂÃ3Àbq ¦¦Ô`‡gg#ºƒBÒÓ‹èè,~a)9¹:ÉÁÆFvvú°³Óƒ­­llôèJ1”–VØèXR\\ Ì͵,«up0 '#í¬~W£úo¹ããs!//‹ž=MáéÉë»äì,ßr‹‹ÅÁùó/ñÇ·‘””#œ±`Á`±ØGضn½Ž3gž!(è©hrþ>KËeX·n ¾üÒ]Ô¡HBΞ}5k.BNNkÖøaÔ¨î¢K¢„‡§cïÞ»¸r% ººj˜;w&Nì-´åÊõ³Yƒ‚âðøqÊÊj §§//+þÌ'qý¬‘_~ùaaé˜2¥~úÉG$3Ø}|¶ÃÄDûöMmözµˆˆÈxS|JCXØÛ/ñuuÕøçEõ3 $u6þãljذ!!!i?¾–,Ön=ÝX,† ÛMMœ>=磳Þ.] ÅüùÇ·©ÁßXff1zö\ƒÀÀEps3rÔŸŒ›(ñRRRõÎŒ%Þ aj*o‹puu%hi©@A‰š +ù%99&Œ5af¦ ‹®05Õ‚™™ÌÌ´QWÇÆË—©xò$/^$#!!²²2èÖͽz™ÁÍÍÎÎF-nÚFI¯²²ê7E%^a)** qq9(/¯ƒÁ€±±¿¨Tÿ_SS-zò+†rrJš†ÐPÞ‡¦ÐÐt”–VÉ”…E×88ˆ´ydGUWÇÆ‹)ošÇÆ!44„ØÛð·ÌîÕË ŠŠ’Õ¿CTjjX8yò)öÜÜ2Œã†ùóÁÂB¼gJIIÜÝ×bõj‰Ø¡§M\]Wcöìþ˜=»¿¨C‘XÅÅ•X»6§O?C¿~6X»vt‡ù”´´B8pþþO ªÚ sçÄW_yµ×›ÍEXXÚ›Ù®qxñ",¶¶zðò²†§§<<,Å꽜‚Ó§Ÿa󿫍®fáûï‡bæLïvíT_° ú¥Õ=šÊʪ–þf ¯•‘ÁÛ]×а \]Mн» \\Œáèh(1½¶DÙD<<<#GîÄúõ_૯<š½n}Ÿ¾÷g¦%$äÁÛ{#nß^Ún é?-6Q¢STTÉ_ºòêUÂÂÒ“Ãk¸«¨(YÔÕ±QUU€WP24Ôà‘Ì͵af¦SS-iðOøòpï^ ž>MÂóçIÈË+‡’’<\]MÑ«—ÜÝÍáâb‚ÎÅç ‰j_l6‰‰yˆ‰ÉÆë×™ˆ‰á-…«USSzSPª/*éÃÖVW¬>ÄPo•–V!$¤aa)7·”?c©{÷·ÓÁíí $æ‘´ár ^¿ÎäïLôôiª«ë`jªÅ?Yðô´¢ÍÕ[©¼¼G>Ä÷Q^^ƒ‰{ã»ït¸™¹›6]ÁÅ‹! úEjA°Ç;aÉQ‡"ñž=KÂòåç—ƒo¾é‡ï¿Jßã[)?¿ûöÝÅѣЩ“¾ù¦fÌðj—Ï×UUuxò$‘¿ä.&&L&®®¼~OÞÞÖpq1‹cAee-öì¹?ÿ¼Óî}ƒØl.<<ÖaȬ_?æ“ﯨ¨òÏZi IEAAdee`c£WW^ñ©{wcXYéˆõ—±uul:Œ;o@QQ‹ Å”)}„>f6n¼‚#G‚qÿþÏÐÕUûàõ!°³ûË—jP˜ŠŽÎÆ A[ü ÌÍž•-6Qí£°°!!éxø÷mDBB.JKy}“˜Lp8\€Œ °°à’x%Þÿj4Ù„»~éÅݻѸ{7ééEÐÒêŒ^½ÌáînŽž=Íàà`(o8TûËÍ-ELL¿¨¸¸°XÈÉ1aiÙ¶¶o‹JvvzR× QšTUÕ!22¡¡é IEXX:Y­Atïnü¦á%¯ÀD—‰VJJ‚ƒã‡‡ãQTT -­ÎèÛ× ÞÞÖðô´†‘‘†¨Ã”HEE•8xð—ËÅÔ©}ñí·ý;d_¸Â ôé³ë×qãzŠ:¡7wÅæÍãDŠT`³¹8vì6o¾ %%y¬Zå ??±ßJ\ìWbÿþ{8|8L¦ fÍòÆÌ™^íºyFAA‚ƒy…§  8dfCYY–ü™²66ºíOSÞí4`€-~ýõsX[ ?¦#GbÍš‹xòd¥P–¦§!$$¯^¥"$$ ¨©a¡sg89ÁÅÅ„_„j®¸"*EE•ؾý?;öffÚXµÊÚ íñjkÙ0`3ìí ð×_Óš½îÈ‘;áêj‚5kFó÷ìYüüv#$d5ttÄïõ|-6Q‚—šZ„›7#ñôi"bb²‘•UŠêêº×QUU„±±&ìíõak«Çï§dl¬ùÑ]Ý!xý:‹_\zñ"У‡ °Å€v°·×éTûc±8ˆÏEdd&^¿ÎDtt^¿Îâï§««Ö`ù›>¬¬è.‚âŒÅâ ::ëÍôít„†¦"..ÊüoÏê{hk‹g¤°°‚_\ ŽGZZ!”•àînÎÿÀog§GÏŸ '§ûöÝÅñ㡨(™3½0c†W‡n^¿uëu¼Â½{?KõKóçGyy þùg–¨C‘*EE•X¿þ2NŸ~ŠÞ½-°nÝØÚŠýò±SZZ…¿ÿÂÁƒÀáp1c†¾ý¶ŸHf«&%åóû==|˜€ÒÒ*èè¨òûÿy{[‹¬ðñèQV¯@LL6fÍòÆâÅC…zü®©a¡OŸu=Ú«V}.´Ç©Çfs“ý¦ø”ŠÐÐ4ÄÇç‚Ëåõrq1†‹‹ \\Làìl$6+MÞ-zxXbõj?¡õ:¼?'îñcßbР¶-òGAA9Nœ˜ÍÿÝÍ›¯1uêA$&n–„6´ØDµ]VV ^½JApp""Ò‘–Vˆ’’*p8¼!Å`0йs'ªÃÆF}úXÂÙÙ––:­^ÆÂápñøq"®^ õkÈÍ-ƒ‘‘ °E¿~¶èÛ× ªªtCGQYY‹èè,DFfáõëLDDd :: , ²°µÕƒƒƒ!lmuak«{{}¨«ÓíéÅ!ÉÉüoÆÂÃÓ‘‰º:6:wV€££á›YK¼:F<Ô/e¨ÿF9:š·”ÁÅÅ„_\ru5¡E]HI)ÀÜÁ™3Ï|Õ[³ IDAT ¥¥‚9súcòä>~Y(‹ÅA¯^k°xñPLÚWÔáÕºuŽÇõë?ˆ:©’†+Î!""Ó¦yâ§Ÿ†uè"n[•—×àðá`üõ×}ÔÔ°0c†æÍ(²×’Ãá"<<ãMñ)/^¤ ¶– ++þûTŸ>–ízÁå=ú[·^üô“P—p8p[¶\ųg«DÒÜ»¼¼aa¼é!!i ICnn)˜LXYé {wc¸ºšÀÍÍÖÖ¢]~÷ìYÖ®½„4Œ×?ý4L(ËÒçÎ=ŠW¯RqïÞ²vï¾…ãÇãéÓ•üß?ÿß©©[“ÐbÕ<‹ƒ¤¤|$$ä¾Y¶’†ÄÄ\Tð—¾€‚‚ttT`i©‹=L0`€- ?ù`ñòe ΜyŽ+WÂP\\gg#Œ錡CÄ~ûSJ0 +ðúu&ÂÃ3™ÈÈL¤¤€Ë%PUU„““! `oÏû±´Ô‘êo¶¥EIIÿ[¯úSIIää˜pp0xÓg‰·$ÎÒR22t&Œ8`³¹ M}Ó¤5/_¾mÒêéiÅÿÐ..ßTJƒèèlìÙs —.…ÂÈHóç¸q=iïK—B°dɼzµZê{îüõ×}ìÙsaakDŠÔâr NzŠ .ƒÉ”Á/¿ŒÄøñ=élÌ6¨ªªÃ‘#ÁøóÏ;`³¹˜7o fÌðùßiuuž=K~Óï)QQY‘aÀÙÙ˜¿¼»GÓv9Æ–•UcçÎøûï ˜™icýú/з¯¥À§ººîîk1qboüßÿøý·Evv BBÒøŸÃÂÒQUU‡ÎøKïÜÜLáæfÒî³ãꛈoÚtyyeBi"ž›[†~ý6᫯<°|ùÈ&¯síZ¾ùæ06ów¤;rä!¶m»Žˆˆµ‹Eˆh±‰â))©BBB.òÇïo“Ÿ_.—`à 55E˜šjÁÙÙÞÞ6ðð°謑üürøû?Á¹s/''#|ñ…†wêp O;BRS ùËà^¿ÎDdd&¿i¼AØÛ¼SXÒ‡±qëvÖ DƒÅâ 22“ÿÖ«W©HNΘšjÁÅŘ¿«‰££äå¥oËrI›Ó`û銊Zèë«ó¿öô´Ûí§%ÙË—©Ø½ûnÞ| [[],X0£Fu놫¢0zônØÛ`ݺOo~+î._Ü9ÿ 9ùwZl²²²jlÚtÇ?†³³6n'´%5Ò®¼¼ÜÃþý÷ ¨( ãë¯=Äæ½¾¨¨’¿ü;((ii…PR’GïÞü%w¶¶Â]þ’R€•+Ïãöíhøø8båJ_ï’½wï]lÝz-‡ŽŽª@ï[Øl.âârðìY2BBRñòe ’’xŸÍ͵áæf ôêekkÝvùb™Åâàᅢ°sç ÈË3ñÃÃ:íÈ‘‡øõ× ¸qã§&{ŠÅÆæ`À€Í¸}{ ììô»vÝ©SOñèÑrÄ d´ØÔ‘p¹EHLÌG\\óÞìÈ•ÃïkÃdÊ@F†‹ƒ-­Î°·×GŸ>–pqáõFÖ4ØÈÈLÍ»ý•ÂÃÓù³æÞí¯äädÄŸ±dg§' ï¨7ÊÊjÆ+*Õ¨ß×ÖVÿM”‹‹1,-»Òf1TZZ…G‹  x$&æAAA={š¿YR`GÇO_M}!7n¼ÆîÝ·ðêU*<=­±pá`xzZ‰:4±¶n] =JÀÕ«ß‹:”v‘ž^w÷µ¸|y1\]MDN‡AÁ¹s/±~} X,–-ŽÉ“ûÐåÝm”›[Š;nàäɧ02ÒÀÒ¥>9²»X¾ž\.Add}¿§x<{–„šÌ͵ùKîúöµèÎ{l6Ç?Æ–-W¡  ‹eˆcüø^y}NzŠ¥KÏàþýŸaf&y_q8\ÄÅåâåË~*!!„˜˜h¢G3¸ºòŠPݺ¼)Œ&â¯_gÂÇg;6m‡I“z7º¼oß øâ 7üðÃg€eËÎ"9¹gÎÌý¤Çm'‹Mþþþ˜Ü©M·—““Z±CøÚ6FÄE{¥…™ßêj6û å¾¥AKókb¢‰]»&cÞ¼AX³æ"ÆŽý¾¾.X¹r”ØöhUP…§'oFÀ+t<|È[rwéR(víºEEyôêeö¦ß“ ºuÓovV’ŸŸ_³“ ªªØPRôx› àû®æÞßÔÕ•0`€- °Àûü—ƒû÷cqýzfÍ: %%y bÿÑÂSk>¿BPUņ²rËÎá[F²gé6UÏø`±iÜ8ÉXË)ÍxÛD¦áÕ+Þ•ÐÐTäå•CVV&&ZÐÑQ…££!rsK‘–V„èèlXZv…››)¦Nõ„££¡Ø-Izú4 Ë—ŸC||.¾ý¶?/Ò¦Îþt|Š‹ÅÂÿÅ`öìøëØå䘰²Ò>¦O÷„ƒƒììô¡­Ýö†Á4¿¢Aó+Ýxù]ƒÇÂÓÓJhæi~EƒÅbu¨bÓµká°²ÒióÎ´ãÆ£cUDÚcœÒüŠNkókc£‹'fãöíh¬\y^^…²û—0¨«+aÄgŒá ÈÈ(FPP,<ˆÃÞ½w±n] 44”ù»µzyY7Ú܆ŽÕkÍû›Œ ¶¶z°µÕÃìÙý‘›[Š+WÂúÑÂ̓àѦ8bCYYU8zôQ£åpzzj05Õ‚½½ŒkÏkì]‚îÝáçç 77Sôèa*¶M”‹Š*±jÕ\¸ð ýûÛàÀi´Á¬„’“ÓEUU-¿Ÿˆµµ.ÝGŠÐüJ·êêXL˜ÐKÔaPÔ'»u+J Z)ŠƒÙÁÛûgþî_§N=ÅÏ?Àøñ=%¦ß£¡aLœØ'ö!QQY âm¶±jUª«ë`jªÅ/>ÉȈn¥IG¡££†3¼0c†× Ojje`0hYDè«*&m°}ûk(+ÇÃÂBzzjèÚU¹¹eHJÊGvv) º gO3øù¹¢Gá4>†û÷c±x±?de™8xp:||Eõ ÊÊîáØ±»¢ƒš_Š¢Ä]M ‘‘X° u½š(ŠorrLÌ™ÓãÇ÷ÄÖ­×°dÉi?þ6Œ…££¡¨ÃkƒÁïQ:gN°X<žüf—»8œ<ùêêÃDf‡ò¡ÂS@@mDžT¢Å&1AH45PRÂBxx&ÔÕ•àèhˆ!Cìáìl„ž=Í ««&ê0[¥¶–uëqèPüü\°qã¸voBNQEQ”t‰ŒÌ›ÍE÷îF¢…¢(!ÐÐPƆ c1iR¬Xq#FìÀ´ižXºt8:wï¥u"'Ç„‡‡%<<,±lÙp”•Õ@CC]º% ïžöí;‚ï¾ûCÔ!I%Zllv)\\41qâ088´ª™²8ŠŠÊ¼yÇ]Š={¦`ôhWQ‡DQEQ” M‡ŽŽ*ôôÔE EQBäà`€ æãÔ©§X·î2._Ú5£1r¤³¨CûdªªÀᔊ: €ªª<a‰: ©$þk°:6»Ã†ÀÇÇQâ MýuÇ†2nß^B MEQE LHH*\\LDEQí€Á``âÄÞ ú?x{[cöìðõ×!-­PÔ¡QõŸ\lJHHÀ‘#GŠð\¼xÏž=ÚýWVVbÆ B»IQ[ËÆ‚'°ví%üôÓ0œ=;Ol·.m/åå娴iS‹®›’’‚'Ož4ø©ªªr„Ô§hM~€Íf#<<))) Š˜Öæ·´´¯^½B^^ž£¢¥µù€’’ddd)"ª¥’“ `jªùñ+J‰ÖŽÕ²²2¼zõŠŽU ÑÚüæååáåË—ÈÏÏbTâGCC;wN¹sóšZˆþý7cÏžÛ`³¹¢­]´Ç9w[Þ?FÚΓŭöQ\\Œ-[¶|ôzÍåV˜9úäbSLL öíÛ'ˆX„æìÙ³xôè‘Ð¼«V­ÚýK‚œœRŒ³wîDÃß6æÏÉØ9B˜JKK±zõê]wéÒ¥6lüüüø?ÉÉÉ ú$­ÉoTTlll0vìX8;;cúôé Žúd­ÉïÞ½{ahhˆ)S¦ÀÜÜË–-npÔ'kM~ëýþûïbÿ™§#ÈÏ/G×®’ÕÇòS´f¬þùçŸ000ÀÌ™3áèèˆñãÇ£®®N¸RŸ¤µŸ­¬¬0kÖ,˜™™áçŸnpb¨wo ܺµ‹Åöíÿaøð툊ÊuXB×çÜmy_üi;O·ÚGii)þþûï]ïC¹fŽè2:ꓽx‘ Ÿí¨®fáêÕïáéi-ê$RBBΞ=‹œœþ½=ÝÖYZLž<ß}÷âââ‡+W®àúõ뢋€ÂÂB,\¸W®\ATT°k×.¼xñBÔ¡QråÊLŸ>¿ÿþ»¨C¡À+6iiuub'77‹/F`` BBBœœŒððpüù矢€ÈÈHìÚµ ááá ÁóçϱmÛ6DDDˆ:´v''ÇÄÂ…ƒqëÖ(++ÀÇg;~ÿýX,ލC£¨vejjŠØØXQ‡ñA)6q¹\,\¸ªªªèÚµ+6nÜ€÷|ðàÁؾ};ôõõ¡­­C‡á§Ÿ~‚¶¶6ôôôpêÔ)¼)¡Ÿ}öŽ= uuuDEEáäÉ“°´´„¬¬,ôôôøòêï÷ĉ°°°€²²2¦M›‡w€9uêLMM¡¨¨???”–¾m¾vïÞ=8;;CAA¶¶¶¸xñb«cýƒÂÄÄÊÊʘ>}:¸\éŸÖyêÔSŒû'\]M¸&&â7­}ÅŠÐÖÖ†‚‚ Ð`ZùÇÆXKÆCPPæÏŸE‹AUUºººØ¾}{“±DDD oß¾èÔ©¬­­áïïÏ¿,11VVV(//çå¹uëìíí!//WWWþIms±´&NI" ùŠŠBrr2-ZÐÑÑÁÓ§OáææÖäýÐü¾% ù-**‡ÃAÏž=ÐÒÒBvvv“÷Cóû–$ä·ž³³3œœœ>úœh~…«¤¤ uulè訶ëãJÂX}ñâÌÌÌп€ºº:† †×¯_7y?t¬¾% ùÍÊÊÂäÉ“abÂëWfgg‡®]»"+«éY=!¿ææÚ8wn>~ýõsì߯mChhš¨ÃAœsÓï „……”””0}út,Y²W¯^ðásꑦódA塹ã·Žï×LîÞ½‹Q£Fño×ÒÜ6E(9"ï9qâiâ×H ùá‡Hee% "jjjäìÙ³$;;›ÈÈÈ•+W.—KþüóO€lÚ´‰p¹\²eËbiiI!$==(**’Ñ£G“G‘‚‚¢  @.\¸@jjjÈýû÷‰ŒŒ ÉËË#ÙÙÙD^^ž|ûí·¤¶¶–$%%uuurãÆ JȹsçHuu5Ù±c@vìØArrrˆŠŠ 9|ø0©©©!DII‰ÄÄÄ´*Ö÷eggüxˆšš¹sçN‹_Gäĉ-¾¾8ؾý?¢¯ÿ=Ù¶í:ár¹íò˜­Ÿ×¯_'úúú$>>ž”••___2gÎB!eeeÍŽ±–އÀÀ@"++K/^L*++Ipp0QSS#W®\!éééDAABHEEÑÓÓ#{öì!555äöíÛDUU•<|øäææÄÅÅ…(**²~ýú&ŸSzz:QQQ!.\ UUUdݺuÄÄÄ„p¹Üfciî2a½þ­%­ù=qâéÝ»79vìñõõ%“'O&OžvkÇg@@Ñ××'‘‘‘„Þoqq1!¤ec¬%ã!00¨ªª’ÚÚZþ}-_¾œL˜0¡Áö©S§ˆ««kƒø.\H/^L"##IŸ>}øˆÇUUUrþüùFÏiëÖ­dÔ¨Qü×ÕÕ‘M›6‘ÊÊÊfciî²–§ƒ=!’“ßÝ»w%%%2|øprá²víZ¢¨¨HBBB='šß·$%¿„²nÝ:¢§§GÆŒC,--É7ß|CØlv£çDóû–$å·ÞÇŠMÒœ_q‘‘QDôô“çÏ“Ú|­=–ızçÎbggGƌüw‰r¬Š[±IÒò›••EzõêEÔÕÕÉÂ… Åî½FTÅ&Bxç(G>$ÖÖ?/¯ äåË‘ÄÑR­-6 ✻¹1ýîX\·n3f ÿz\.—èéé‘cÇŽ5{Ný>Aœ'‹ÓçA塹ãNsÇ÷k&ÉÉÉübSKsû>A䈦‹MYFgaa999þ¿,PVVÀÛºRAA²²²ü¿KFFúúú¼|ùŸ}ö,,,0zôèFS¹ôôôøÿ__™™™úÜtëÖ ‘‘kë†ý„lllžžÞêXßÇd2¡­­Ý(iÃfs±h‘?ŽŒ¿ÿž/¾è!êš5räHŒ;011Á¢E‹P\\  ec¬¥ãÁÜÜòòòü;88 -­á4Þ””ÄÄÄÀÔÔ”ÿsêÔ)”””ÀÞÞ=‚»»; wïÞ˜4i=§”””ãXNNË–-ƒ’’ÒGciIœ’DRò+''eee\¸p~~~X±bF…¿þú«Ñs¢ù}KRò{ùòeìÝ»QQQ8w¢ŽÿýïžÍï[’’ßÖ ù>EEÞkÔž;PIÒX-++ÃäÉ“1mÚ4üòË/8wîÿñÞ¿:Vy$)¿ïüçéÓ§HOOÇõë×qèСFÏ©£æ—Á`૯¼™šš¢¬¬¬ÑcÑü¾%)ù »»;ÔÕÕð>Ô8¯^½jôX4¿oIJ~[ƒæWøde™€ŠŠÚv{LI«l6C† ºº:bbb0eÊ”>«oIJ~?Þ`¬Î;£OŸ>ˆ‰‰iôX=¿úúêð÷Ÿß~?ÿ¼ _ßÿ!11ïã7s‚8çné˜VQQAaaaƒßÕC:ú9µ òÐÜqçcŸI>TäñJPRlJIIÁåË—ð¶ÎÛ¿?†þI÷™‘‘nݺÁËË L&?nòÄì}ƒ ©S§øÕÅððp}úS¦L“Éüh,-‰S’HJ~===‘••…'Ožà'àíí €æ÷C$%¿ÎÎÎxøð!?g•••¸zõ*¿™4ÍoÓ$%¿CóÛ¾:wV°Ùí·ë”¤ŒÕ+W® ;;?ýôrssù'(EEEèXýIɯ¼¼<~ÿýw”——JJJDßk>€Á``útOܸñ#`èÐm8|8¸É/r%… ι[:¦Œ€€äçç?~Œ¨¨(0ŒžSKûy² òÐÜq§­ŸIZs¼j·½¿Ö®-=›z÷îM¬¬¬ˆ··7ÑÕÕ%>>>¤®®Ž¿þ¯^||<M!!„„„„4èÙÄd2ù—¥¥¥‘®]»ooo2xð`âããC,,,ˆ¯¯o£û%„~ýú‘³gÏ.—K&OžLÔÕÕIÿþý‰±±1ñññ!;vì „²jÕ*¢®®N† B455Éܹs !¤U±Bˆ‰‰ Y»v-ÿ¶ïÆN!}ûö•šžMUUµä‹/ö=~#IIy¿µv|¦§§cccâèèH DÔÔÔÈ!­c͇ÀÀ@bbbBìí퉗—ÑÓÓ#ýúõ#ÕÕÕÖÇnÛ¶¨ªª’Aƒ2nÜ8Âáp‡Ã!ãÇ'dÀ€DKK‹ß$ކãB-ZD´´´È Aƒˆªª*Ù³gÏGciî2a½þ­%­ù%„cÇŽÒ¯_?¢««K&L˜Àï³@óÛ4IÉ/—Ë%sæÌ!]ºt!$:::ÄÇLJTUUBh~?DRòû®¦z6u”üŠ“nÝ–“#G‚Û|ûÖö”‘”±œCK“ IDATºbÅ  Ñϼyó!â3VÅ­g“¤ä—Íf___¢­­M¼½½‰¦¦&ùòË/ùý`:J~Û‚Åâ­[¯#£ÈĉûHNN‰¨C"„´¾g“ ι›ÓïÅ3fmmm2xð`Ò§OâììLΜ9Cùð95!‚?O§Ï/‚¬}|è¸Cȇï×LÞíÙÔšÜ :G„©Ax½êêjrçÎM©>Uii)¹yó& #„ð^À{÷îµè¶áááäæÍ›¤´´´ÑeÉÉÉä¿ÿþ#±±±‹õS‰k±©¶–E¾ür/qu]M’“óEN›ÆgMM yðà¹qãÉÍÍmpÙ§Œ±zÄÍÍÔÖÖ’û÷ï“§OŸ6»;_FFùï¿ÿø áÞE®_¿Nâãã?ú¸qqqä¿ÿþ#iii-Š¥µq6Eœöõ$)¿999äÆM^ö>š_IÊobb"¹~ý:Ío+HR~[Có+NFŒØAÖ¬¹ØæÛ·åd˜ŽUÁUq+6"Yù 'ׯ_oÑyŒ4æ÷S¼|™Búö]Oìì~!W®„‰:œ6ÿ ✻%c://DEE‘°°0r÷î]R[[KÌÍÍÉãÇù×i¯sjqüü"ˆ<4wÜ!¤eÇy‡C øÿÄñª­š*65îØF:u€uwxëß¶idd##£ÝÖÑÑŽŽŽM^Vßh‹j‹ÅÁ¬Y‡•…óççÃÔTKÔ!µ‰‚‚¼¼¼š¼ìSÆØûäååùË¢šc``ƒ&/³³³ƒ]‹ÏÊÊ VVV­Ž¥¥qJ IÊ¯ŽŽ† Ңǣù呤üš››ó›g~ Í/$å·5h~…ËÊJ11Ù¿¢Ñ±ÚòË$‘$å·¹sœ÷Ñü6äêj‚›7ÂêÕ1kÖa|ýµV¯öC§Nr¿±˜Ä9wKÆtFFˆÿýݺuÃÀf³áææÆ¿NG>§Dš;î-;ÎËÈÈ@SS“ÿoA¯A =›(éÃfs1wîQ„„¤áôé¹°°è*êÄ–ªª*,--E€æc§8%‰8½n4¿‚'N¯ͯà‰ÓëFó+8..& mz×#I%Nc€ŽUÁ§×­£çWQQ›7ÃÁƒÓqñb(†ßÑîÅkIàââ‚ÇcãÆ1bF`3›(éAÁâÅþxø0ÿþûlmõD’Xóöö›oš‹Eœâ”$âôºÑü ž8½n4¿‚'N¯ͯàôèaŠââJÄÇçÂÊJGÔá„8:VOœ^7š_žáÃàìl„yóŽcøðX½Ú_í!ê°ÄŠŸŸüüüD%ÁèÌ&ª‘¯àÚµœ8ñ-ìí?}Š6EQEQ” ØÙéAGG ÷ïÇŠ:Š¢$˜Aüûï<|÷Ý@,_~³fFii•¨Ã¢(©A‹MTÿüó{÷ÞÅÞ½_ÁÕÕDÔáPEQE5À`0п¿ ®] u(EI8YYüôÓ0œ9óBBÒ0xðV<{–$ê°(J*ÐbÅwãF$V¬8uëÆ`èPQ‡CQEQÕ$__ŒyóIÔÖåE‰/ƒï¾77SÌ{C‡nÃþýSáìÜôöñøì³mUtê$EEy¨«+AIIÊÊ PSSD§NrPPƒº:ïÿy×놨¨dfÃÀ K{>MŠj´ØÔÁ•—×`Ú´¿aaÑ;vLƒÁuHEQEQ5k–7öí»‹Ó§ŸÑYÙE ”»»9nÞü óçÇçŸï¯¿úbút¯F×spx»™RnnY“÷%+˃Á@ýi‡Ã‡Ã…ºúP$&–¡kWU¡<еµŒŽîZÒ!‹û£¼¼ý5 rrLQ‡DQEQÕ"ʘ4©7vª:Q‡CQ””ÑÔìŒ'fcÑ¢!Xµ*³gÿƒŠŠÚ×a0˜2¥O³çQl6,uu¼ºtQBQQF2¦ç`RŽÅâ   BÔaˆÄg6?¾=ãhááZèÒ¥FFå¢E,ìØqwîDãÂ…ÐÖVu8­"ãSœ={¶]‡æW4h~¥ͯtk¯üЛŋ‡âìÙçØ¿ÿ¾ÿ~h‹oçïï‹%ÄȨ9{ö,&Mš$ÔÇ ùöÈo{’‘aàûW/sÌûFŽÜ‰C‡fÀÜ\›¡Cpüø“ߟ»»9öìù ::0yòd+|© ©Ÿ_jke‘’¢‚Š y8:@^ž#Ðû—ÌÕ«W¯~÷¥¥¥¨¨ÎÊ[vvgäç+Í–ºz-ÄiŘ½½=† ccãvy¼›7_cÙ²³øý÷ <¸[»<¦ Hóø”ööö°··Ç¸qã„rÿ4¿¢Eó+Ýh~¥›°ó+®””äÁfsñçŸw0aBOtîÜ飷ÉÌÌ„ŠŠd}É&Mìííáááwww¡Ü?ͯh ;¿¢bl¬??W\»={nÃÖV_p’“c⟂Áå~x÷:&S22 ,_> ›7CçÎ ˆŠŠ‚½½}{=‰%IŸ_Š‹‘˜¨Ž¤$5TUÉ¡k×jhiI£ù&êY Òöt=zzê"Œ¬ý|ÿýIܾ…›7—@G‡î|@QEQ”ä#„`̘=àr ÐÝu)Š‹ƒ{÷bð 7n¼FM ^^Öðós…–– ¾ÿÞ]º(cË–q=zêO­ee™—gbóæqøâ‹"~” åä”âĉ'8zô!òó+Àd2Àá4œÑ&++ƒnÝôqíÚùýèE‡*6€ƒÃ Uòÿ-'Ç„ººNŸž [[=F&|çϿĂ'pìØ78ÐNÔáPEQE LDDFŒØõë¿ÀW_yˆ:Š¢$—KðäI"^áòå0”–V£GSøù¹bÔ¨îÐÒêÌ¿nvv fÍ:ŒÄÄ|¨©)"=½L¦ ììôqàÀT˜šj‰ð™P‚ÂåܽƒîááÃx0™ °X—LÖc0¸ti!ÜÜLÛ/HñÓñŠMcÇþ‰GâüŽWy–ÅÑ£³àáa)¢È„+))ÆmÃÔ©žX¾|¤¨Ã¡(Š¢(ЏuëqôèCܽ» ]DEQ$44 /†àâÅä䔢[7}ŒíŠÏ?w…¡á‡'õ}œÎœyBæÎ€Ÿ99f;FO ‹ÅÁøñâéÓ¤^WV– Gìß?µ"k¯Ø´zuŽyˆº:vƒßËÈðvسg |}»‹(:ᨫccäÈPPÅùó è¢(Š¢(©T[ËÆ!¿ÃÐPþþ³EEQb.66—.… ÉÉù05Õ‚ŸŸ+üü\`m­ÛªûÚ¼ù*þøã6† ±Çÿþ7;+)jJ +0lØväæ–‚Íþð¬&99&=ZN¿ð^t¸­Øllt­©.— B€¹s"7·ß|ÓOÑ Çš5—ž^Œ7~¤…&Š¢(Š¢¤–‚‚,vì˜?¿Ý8}ú&Lè%ê(Š3IIù¸x1—.… 66zzê5ÊŸî ãßÁ,[6ýûÛâÛo`äÈ8thÌ͵9%JššqöìwðñÙŽòòÚ&wd2eðÝwi¡é7³)$$ #Fìøèõ¾þÚ7Ž•ø†^ÄbâÄýØ»÷k©›±EQEQÕ”úåtׯÿHOö(ŠBZZ!.] ÅÅ‹!xý:]»ª`ĈîøüóîèÑà 22‚;ç{·Óž=S0xp7Ý7%zOŸ&a„½`³9àrß–R  K%'öa„b¥ã›ÀÕõ7ää”4ú½Œ \.A¯^æX·n  DàÌ›w 'âîÝ¥PSSu8EQEQí&#£C†lÅçŸwǦMãDEQí 7· —/‡âÒ¥P¼x‘•Nðñq„¯¯ <=­Ú½¥È¡CAøõ׌Û[¶Œ§-M$Xxx:¦Ný** 8zôÜ¿‹_~9B˜LXZvÅíÛK:KNÂu¼žMàà Üܼ-³1À`FFšØ°á `+Êð"00!8yr6-4QEQÕávÁÿþ7Ó§BŸ>–øüsÉ­NQÔ‡Vàòå0†âÉ“D()ÉcèPÌŸ?ýúÙ@^^t§¼3fxÁÔT sæüƒ””üý÷ hh(‹,ªm®\ âEþèÙÓ û÷Oƒªj'˜šj!3³{ö܇ÃÅÚµch¡é=rfÓ† —±ÿ=°X0™2PWWD—.Êpt4ÂLuxŸ,7· lÆèÑ®X¿þ Q‡CQEQ%2ë×_Æ¡CA8wnºwo{ó_Š¢ÄGQQ%®_À¥K¡xø0òò²2¤|}]0p :u’uˆ DGgãë¯ÿ‚œG~KË®¢‰j¡Ý»oaÓ¦«˜:ÕkÖü{wWSþ¸üI·R”Š&K…òe˜¤ˆn–ºe0ÜHdß—ÌdfLe?„a’Ý”­i,•±¤ˆA’iÊšÒ"-ª{~˜i¦a(n{oÏûõòÇÝÎyN:œóÜÏùœ~Hþ¾üRxz®Åóç/ðË/EL©’*çet»v]À„ ?A"ÑÆ„ Ý0q¢3ˆÇ´iÛpú´ÌÌj‹ñ½ ¾7o>Æ‘#ŸC__Wì8DDDD¢)*RÀÛ{#âãï!"b LLjЉˆÞÁӧϱÿe„‡Ç!:ú$mtëfw÷6pqi Õ>ïIIyoï ¸};k׃ƒCs±#ÑaÆŒíØµë|}û`øpÇÿ|_ZZ6ŒkTpB•W9˦7aÍšãøüóž05}yÀQX¨@§Nó •Z«õh ððK;v ~þy:vl&v""""Ñåä¼€»{tt$صk"¿Œ#ROŸ>Ǿ}—~ ÑÑ·¡££ ggkÈd¶J­Q­šzÝõ+?¿S§nž}—±`AÈåœLZeeåaäÈ ¸t) k×G—.ŠIUβé¿lÜ?¿½ˆýuëV;N™edä K—…èÑ£¾ÿ~ ØqˆˆˆˆTÆÃ‡èÕk)Ú´1ÇúõÃËõNTDôîÒÒ²±oßeDDÄ!:ú6tu%Ž`²…Tªú#˜ÞFüßÿ@@ÀaŒ×_}%ã\?*äÁƒ „ôô„„Œ†µµ©Ø‘Ô˦ÊË+@‡¾Ëí0{¶›ØqÊlÚ´m8~üNœ˜ #£ªbÇ!"""R)ññ÷0`À*ôêeƒ¥KAK‹'xDª 5õï‚)&æeÁäìl™¬ ¤Rkµ/˜^',ì†s羡¡ú6§NÝÄ AX¿~8zöl-v""""•tæÌxxaèÐŽ˜;·Øqˆ*­¿ ¦Kˆ‰¹]] ¤Ò——È9;kfÁôo±±w1bĘ˜ÔÄ–-#9§œˆNž¼Q£6ÁƦÖ¯##}±#©;–Mÿ–••‹öí}1eŠ Æï&vœRÉË+@×®‹`cc†5k†‰‡ˆˆˆH¥9rÞÞ0ujwL›Ö]ì8D•Æ“'ÏŠ ¦3gîBOORb¦Ê8ŸZbb*¼¼Ö#33›7{ÃÆÆLìH•ÎÏ?ŸÇŒÛáîÞË– †ŽŽ¶Ø‘4˦×ñ÷GXØyœ9ó5ôô$bÇy«ï¿ßõëOâäÉÙhЀ³à½Íž=1qb0¦MëŽéÓ{ˆ‡Hc¥¤ü]0=û²`z9‚© œ­*eÁôoYYy3fÎû+WA¯^¼R¥¢ÀwßíÁøñÝðÕWn¼¼ZyX6½ÎãÇY°³óƒ¯o_ j/vœ7úý÷'èÚõ{̙㎑#;‹‡ˆˆˆHmìÙs“&cܸnøòKõ›¯“HU¥¤Á˜1NbGÒ4çUØŽ40ÂÀ°jÕ1 ô±J£ûê«0XZ6€——ƒØQˆˆˆˆÔJïÞÿƒŽŽ6ÆÛ‚¼¼ÌÛ›ßj½£Ç³JŒ`Ò××…TjÀ@OL¥ ‘TÁÂ…`fVß|³÷ï§ãë¯?á¿Iå ¨H™3C‹åËåèßÿ#±#i$Žlú÷ï§ÃÞ~üýû©ìè¦ððK;v ö완>j"v""""µtäÈUŒµ}ú´ÅâÅŸA"©"v$"µð²`ŠCxxbcïÂÀ@RiKÈd¶èÖÍŠÓ; ;éÓ·ÃÕÕË—Ë¡«Ë1"Ê’Ÿ_ˆñã·àøñ ô„‹KK±#i*^F÷&>>a8xð ¢£}Tnþ<ŽŽ àäÔK—;‘Z‹Šº oïøè£Æ òâmȉþÃãÇ™ˆŒ¼ŒððK8wî÷â‚Éݽ ºvmÁ‚II¢¢nÁÛ{Z·n„ xw4exö,ǯGBÂlÞ욊I“±lz“G2ao?_íŽáÃÅŽS‚‘ؼù4NŸþ uêT;‘Ú»ví<<‚P¯ž!~úi4ê×7;‘Jxø0û÷Ç—(˜\\þ*˜¬Ôâ¦Jê诓jÖ4@pðh˜šÖ;’Úzòä<<ÖàÉ“gغu,¬¬LÄŽ¤éX6½Í·ßîÆÞ½—ã£2-}RRºtYN NDDD¤Ld`È <žM›¼aee*v$"QÜ¿ŸŽˆˆ8DF^Æ… ‰¨VM¯¸`rrjÁ‚©‚}¬Bpðhtëf%j""""MUX¨€¿ÿ^¬]{“&9cæLWT©Â»B‘æILLExø%DF^ÆåËɨU«ºw9‚Éѱ9¿ÜV/^bòäì߀9úöm+v$•{Æ­G«V¦Ø°Á††UÅŽT™°l*§OŸÃÎÎS¦¸`ÂgÑr)гçRá§ŸF‹–ƒˆˆˆ¨² ;Ï?ßK¬XáZµª‰‰è½Ýºõ‘‘qˆˆˆÃÕ«P»v5¸ºÚÀÍÍöö,˜T” ðõÝ‹  ðñ‘aüønbGRY‡'`̘ÍèÚµV¯öäeŸeSi-Z´[¶DãÌ™9¢5¢Û·ŸÅÌ™;qìØ,XXÔ%Qe—Œ‘#7V¯Šö훈œˆ¨ì®_øç%r—qýúCÔ¯oˆž=[C&kƒŽ›A[»ŠØ©”Ö­;‰¹swcØ0øúöáßÝ¿ìÚuS§nÅ€í±hÑþ|ÄÁ²©´23sðñÇ~3¦+¦Më^áëÏË+€ƒÃ|¸¸´Ä‚ý+|ýDDDD•YFF¦Oߎ#G0k–+ÆëÆËêHå%$ÜGdäe„‡_Â;)hРÜÜ^Ž`úøã¦üVcq˜4)..-ñÃC8ŸÖŸ6o> Ÿ0Œã„9sÜ¡¥Åßq‘°l*‹€€CøñÇ_3µkWìêU«ŽbÙ²CˆŽžÃÛð‰@¬_ þþá°³k†€€Á06®!v,¢._NFDÄËKäSѰa-¸ºÚ@&³E»vY0i˜˜;>|ll̰aƒ7ªW×;’¨V®<‚ "1{¶&O–Ч²cÙT99/б£?z÷þ|}ûVØz32rбã<Œá€/¾èUaë%"""¢WÅÅ%câÄ`¤¦fcÞ¼~èׯؑ¨/&aß¾—#˜’“ŸÂ̬6d2[¸ºÚ¢mÛ8ºCƒ%$܇‡Ç×DpðhÔ­[]ìHNÌ›ÀÀ_áïÿ)¼¼:‰‰X6•ÝæÍ§ñí·»qòäl|ðA Y§Ÿß^ìÜyÑÑ>œAŸˆˆˆHäæ¾À¼yظ1 2™-,è_á#ß©òR(\¸ˆðð8ìÛw÷ï§£qãºps³…»»-llÌÄŽH(11ƒB[» ¶m 3³ÚbGª0EE |ùåÏØ¾ý,ä,ÿU˦²*((‚“Ó"´mkŽ•+=Ê}}d S§yðñqÇÈ‘Ë}}DDDDTzQQ·0mÚ6¼xQˆï¾ëƒ>}x;r* …€ØØ»ˆˆxY0=z”‰fÍêC&³…››-Zµj(vDQJÊ3ÈåHKËÆ¶mcÑ¢…‰Ø‘Ê]AA&M ÁÁƒñ ò‚‹KK±#ÑßX6½‹ððK7n úÖ֦庮iÓ¶áÌ™;8yòKÞ‚”ˆˆˆHeeåÁß/BBΠ[·˜?¿¥Y@姨H˜˜;ˆŒŒÃþý—‘’ò ~h 77[Èd¶•¢P ÒËÊÊÅðáëqõêClÙ2R£ïœ™›û£GoÂÙ³w±iÓHØÛ[ˆ‰JbÙô.A€›[jÕ2@HȘr[Ïõë!•.ÆÊ•Cз/¿%#"""Re±±wñÅ;qÿ~:¾ø¢¼½;C"á-·©l 8}úÖŸS<ÒÒ²aee w÷—#˜,-ˆ‘TX~~!ƌٌS§n"0ÐS#Gûdeåaذµ¸yó1BBF£M›ÄŽD¯bÙô®¢¢naàÀÕØ¹s<,ËežžkñèQ&œÁIýˆˆˆˆÔ@AAV¬8‚•+ qãºðóë GÇæbÇ"WPP„S§n"""^Azús´nÝ2ÙËLMšÔ;"©‘¢"¾øb'~þù–.Œþý?;’Ò¤¦fÃÃc RRžaÇŽ±hÞÜXìHôz,›Þ‡\¾™™9ˆˆ˜ªô2èÌ™;è×ïlß>;¨ÔeQùJLL…¯ï^8^½ZãÛo{WØÍeH=¼xQˆ'n 22& ++¶¶fÅs0™›ó÷…Þ ˜??«WÃ7ß|‚1cœÄŽôÞîßOÇàÁ(,T`ûö±ü7Uµ±lz ÷ѣǃLf«Ôe÷鳺ºìÜ9N©Ë%"""¢Šóë¯×ñÝw{””†#1y²FFúbÇ"‘äåàøñ눈ˆÃáà ÈÎÎG»váæf77[4jTK숤aÃÏo/&NtÆìÙ®j{ÅÌ­[1xp jÔÐÇÖ­cÑ ‘Ø‘èÍX6½¯I“BðÛo‰8~|tu%JYæ‰70xp Âç ]»ÆJY&‰£  ›6EaùòÃP(Lžì/¯N¨ZUGìhTrs_àèÑkˆˆˆÃÑ£W‘›ûíÛ7Lf WW˜˜Ô;"i¸ÐÐs˜>};är;ÌŸÿ)´µÕk.¹ þÀСkѬY}üôÓHÔ¨a v$z;–Mïëþýt8:.À¬Y®Jšèî€5 ¨U«Ú{-ëØ±k2$‘‘Óð¿ÿqV}""""Móøq–,9€Ø SFJIDAT;bajZS§vǧŸ~ÄÒIÍ={–‡Ã‡‡ãǯ£°°;Z@&³E¯^6¨[·ºØ©’‹Šº…áÃ×Ãή)‚‚¼T¾¸Ù»÷"&M AïÞÿÃ’%ƒÔ¦ #,›”#;;ó “µ¿¿w^Ž pu]†úõ°yóH%&$""""U“œüË—Fhè94lX “'Kѯ_;¥MÍ@å/33& 22'NÜ€ pp°„››-zõjýÞ_D)ÛÅ‹IððXƒ?4ÆæÍ£`dTUìH¯µiÓiÌ™oïΘ;··ÚÎ5U‰±lR–|õUŽ›‰fÍê¿Ó2N€—×z80­[7RrB""""REIIi8Œ°°ó¨UË^^ðôì„ÚµYT¨¢ôôç8p ‘‘—qêÔMhii¡sçæÉÚ G–œO†TÞ0hP êÕ«Ž1¨WOµ.ë\²ä–.=„Y³\1y²Tì8ônX6)KQ‘Ý»ÿÌÌê`Ó&ï2^ôè±ÕƆ #Ê!!©²Ç3±nÝ)„„Ä ?¿|„Q£º¼ó™¤¬Ž-ÒP³f~…¯Ÿç³Jw^mf  0@ä$ofi™‰DQæÏY[?Ea¡úÝ䯿""""R®*U´ž7¶¢gO9 x'¦ŠR§N>êÔÉǯ¿nEçÎáîÞFìH¤¡’’’*Úy®D¢@Ë–©ÈÍ•ˆV4@Æ٨[7ÕªTèzy>[~Ô¦l€Èår±cÐ?lݺbÇ """ÒXr¹!!!bǨ”<< ÅŽ@•GÖˆƒç³åGý†Ò‘ÊbÙDDDDDDDDDJò‰ˆˆˆˆˆˆˆˆ”†e) Ë&""""""""R–MåàÙ³gX¸pa™>“‘‘{÷î½ò|vv6.\¸€§OŸ*+Q¹(ëqpFF.^¼Èc]"5ñ.纜œŒ'Ož”C"RU,›ÊAff&æÎ[¦Ï,^¼%ž;tèÌÌÌ0tèP|ðÁ RbJ"""""å*ËqðÒ¥KannŽ#FÀÜÜË—//ßpDôÞÞå\7-- vvvسgOù„"•IJId‘‘‘>|8/^\âù‚‚xyyaÙ²eHHHÀáÇ1eÊ<|øP¤¤DDDDDÊñÛo¿aîܹ8{ö,.^¼ˆ³gÏâÛo¿Å;wÄŽFDJ6bĤ¦¦Šƒ*˜Æ–MsæÌA½zõ §§‡®]»–¸DmÛ¶m°°°€D"‰‰IqÑ“––©TŠ¥K—ÂÔÔõêÕÆ ðù矣^½z011ÁöíÛ§NÂĉ1eÊÁØØK—.}m–øøxtêÔ U«VEóæÍ±uëÖ¯ÛÚÚÂÆÆ¦Äs±±±ÈË˃§§' cÇŽhݺ5öïßÿÚu9r-[¶„®®.Ú¶m‹óçÏ¿5gY¶ˆˆˆˆÔƒ:=zNNNhÑ¢ÀÚÚR©¯]u‰þ¦ûø_V­ZAбcÇ7n÷q $¨ BHHH©Þ{àÀÁÔÔT¸uë–••%|òÉ'ÂØ±cA„¬¬,AOOOصk———'œ8qB¨R¥Š’’"<|øP¨R¥Šðõ×_ …BX½zµ@X¸p¡ P(„ï¿ÿ^°°°AÂÃÉD"L:Uxþü¹%Ô¨QCˆŒŒ’““===A!;;[011~øá!//O8zô¨`dd$œ>}ºDfÁÇǧøñ† „?þ¸Ä{<==…Ù³g¿²½ÉÉÉ‚¡¡¡°k×.!''Gð÷÷ÌÍÍ…BñÆœoz­´BBB5ú5""""R+r¹\Ëå¥~¿º/_¾\èСC‰ìNNNÂäÉ“_Ù&1uËúó'*«²žO©Ë>.‚/4iÒDxòä‰Ð¥KaíÚµ¯Ý&žÏj¤s9²)//ŸŸCCClݺ ,èêê"::}úôžžš6m dff fÍš---H¥RH$̘1£øñ³gÏŠ×c``€E‹ÁÀÀ:uÂĉ±eË–Y"""`bb‚ &@OOݺuƒ——BCC߸ ÙÙÙ¨V­Z‰çªU«VbýÙ±cœœœÐ§OèëëcæÌ™7nrssßš³4Û@DDDDêA]Žƒûõ뇫W¯Â××111øòË/üüüW¶‰ÇºDS—}<77r¹kÖ¬Aݺu߸MÜÇ5“F–M2™ ýû÷‡½½=ÌÍÍ1eʤ§§ôôôðÛo¿¡GhÖ¬úöí …BQâó•>> ƒ½½=´µµ_ûŸZiü{’³'OžÀÐаÄsFFFpttÄŠŸËÍÍ}egþ7 ‹W&H¼{÷.ììì^y¯¡¡!RRRJ<÷Ë/¿ÀÙÙù­9K³ DDDD¤Ôå88//5®]»Š_³··G÷îÝ_Yu‰þ¦.ûøüùó‘ššŠ©S§nß¾ôôt¤¦¦bݺu%–Ã}\3iäȦE‹ÁÉÉ ‰:t€§§'lllœœŒ»wïÂØØ‚ /ÇÂÂÙÙÙÅÛ´iƒG?®[·.¢££qæÌT­ZíÛ·‡––5jTŸ}öаaC´lÙò•ÌÁÁÁ¯<׿888 >>hÒ¤Iñk} ô—€€L˜0¿ÿþ;¬¬¬ŠK©7å|ÛkDDDD¤^Ôé88 £GFrr2Ú´iƒ ¿Æc]¢×S§}üŸŽ?^â1÷qͧ‘eðrd££ãk_322*1´ÎÌ̬Ä/sYèêê¢sçÎo}_Æ ѰaÃ2/ߨØÆÆÆ¥z¯¥¥%,--_ûÚ›r–vˆˆˆˆHõ©Óq°µµ5¬­­Kµ>뽤NûxYp×,y]E022‚………Ø1ÞêM9ÕeˆˆˆˆHu¨Ò1$u‰”O•öîãêKKøçX:¦¥¥…Èår±£Ð?lݺP“_#""""µâáá 9IåÄŸ?•7žO‰‹?ÿrsž#›ˆˆˆˆˆˆˆˆHiX6‘Ò°l"""""""""¥aÙDDDDDDDDDJò‰ˆˆˆˆˆˆˆˆ”†e) Ë&""""""""R‰ØÊ"44:::bÇ  ;‘F EŸ>}ÄŽQ)…††bÀ€bÇ J€çUâàϽü¨UÙ´{÷nìÞ½[ìDDDDD¦  ;•#îã¤i´AÄADDDDDDDDá<çl"""""""""¥aÙDDDDDDDDDJò‰ˆˆˆˆˆˆˆˆ”F NìDDDDDDDD¤Žý?t*^34(ÌÁIEND®B`‚bm3.7.0/doc/html/a00195.png0000644000175000017500000000603311365042645013256 0ustar tlktlk‰PNG  IHDRƒ(È–‹bKGDÿÿÿ ½§“ ÐIDATxœíÝPTåð/Ȳ ±€²Diþ £ˆŠBd Kgfpl¦é—ý‘™Úm ¥š˜‰ÑèηÍë˜øg¤1@/©‰·[*í‚ä*" µ€ì÷þÁ°ÃÂîYVWåùÌ0³gÏ{Þ÷9gŸ—‡s»ëF’B1–Uº»:!„®'Å@!„!„€‡­#‡p‘°°0ÄÆÆº:Œ[¦ÓépêÔ)W‡!Ä]eéÒ¥Cžs³uÙÍÍíŽ$\/55¹¹¹®ã–åååaÙ²e®Cˆ»Š•_û•6Ï 77©©©w."áR÷Ò/Qù§8!ìSúãIî!„b „BŠBH1B)B! Å@!œT .\¸€;v8£«Q1Ž3´¶¶bãÆ#¶°OòÔ¹ÊËË‘‘‘½^oñ|GG233‡<¾×ÝísÞ)Å ºº999ÎèjTŒ3Ðo¼úúz‡Û¶µµaÛ¶mwt;W0:°mÛ\Æ-‘>ñÄܱcF£Õø”^Ÿ±<çæËi§vww›ŸKKKãâÅ‹ÙÜÜL¼qãI²¦¦†ìéé!Iþüóϼÿþûo{ƒÁ@•JÅ?þøƒ$™””d‘ ¶288˜¿ýöɾ ÙÚÚj^ªª*’¤Ñhä™3gÌëú½¶¶vHÛ/°#c Üî‹/¾àÂ… Ííº»»™™™ÉÎÎN»}G1¨¨¸È>ÚË3Ö1(è}†…Y/÷B1Íyº{÷nFGG[ôµråJ®ZµJ1HËÊÉÉa||¼E?¯¼ò ?ýôSêõz`SS“yÉdâáÇùÒK/qúôéÌÊÊbKK‹Íýûå—_èééÉk×®‘$·nÝÊööö’´] ”â²·ƒýôÓO\¾|9|ðA®[·Ž:Îf¼ƒå9¯T ?¨Î“'O†J¥2/Ïœ9%%%æeooo}Ÿ†ªV«áááa^vÆ8Z­ Ø·o–/_ŽòòrìÚµËn/¿ü2JKKñì³ÏÂÏω‰‰HKKƒŸŸß¶jµgΜÁºuëpáÂLœ8&“É©c ÔÐЀ©S§š—U*>üðÃÛê³ßùó—PWç Îee›¡RCOO/ §Çþ‡¾½ýö¿‡5ΦÓéàé<ìö£9OP]]ððpóvÿý7,X€›7oÚÌ…Á-ÚÀ´iÓÌÿõãîîŽàà¾cöã?â­·ÞBDDV­Z…„„»ûš›› ’ˆ‰‰ÐwÙ¦©© ÇŽüyóln§Wÿe±áìÄÆÆ"66W¯^ÅÖ­[1wî\DEEaÿþýбcwÎÛã´{W¯^µX6 ˜8q¢³ºÖ8©©©Ø»w/öîÝ‹  k|’ÈÊÊBKK `4±dÉ«m ‘––†õë×£¦¦§OŸ†———SÇÈÇÇׯ_·xnÿþýhkk»å>Ǻќ§Ï?ÿ<,~¾ùæÅ\L£Ñ ¿¥¥¾¾¾, ›J¥‚Z­Æ•+WpíÚ5ܼySq¿H"??Ÿ}ö:„C‡áÈ‘#˜;w®Åý k”ârdÿêííIxxxà¾ûîSl;pdÎ[Ú*8x™‹ŠŠH’íí팈ˆ`vv¶ùô»_mm­ù”ˆ$«ªª,N¿+++Y\\luYi’ìèè ··7#"",úP’‘‘Á¸¸8óò÷ßoÏÀÓ¹¯¾úŠsæÌ1¯;qâÝÜÜìž2:2ÆÀíJKK©Õjyùòe’}§Æ&L`GG‡Ý>‡c,^&ÍyZSSC///ž;wŽ$ÙÙÙÉ3f0//O1H˪ªª¢··7ëêêHö]«×jµ<|ø0õz=Ç7䨔——399™aaaLOOgcc£ÕcxôèQ‹KDý¶oßNvuuÙ¼L¤—½ý¬¬¬ŒÉÉÉ|øá‡™‘‘AƒÁ`±^éõËs~Dî<ýôÓ|ôÑGÏx€IIIìîîvx’½÷Þ{Œµº¬4N¿ääd†††š¯_Ú£×ëÆY³f1!!¾¾¾Ü²e‹yýã?θ¸8VVVR§Ó100ñññœ?>“’’8yòd.Z´hHÛÁ7…†;ÆÀíú÷? € Ôh4æ_(öúޱxy´çiVV5 Â¥K—šÛØÊÒ2‡H2==~~~LLLä¤I“øÎ;ï¤ÍbÐïÒ¥KLOOgdd¤Õõo¾ù¦9ߺ~ý:Õj5 m¥¸ìíß@ŒgAAùžÎ`J¯ÏXžóJÅ@ñ›Îýr£Ñˆ“'OÂ××ÑÑÑ·q¾2²ãtuu¡¢¢F£QQQ 4¯»rå ªªª´··£¢¢xì±Ç ×ëqñâEÌ™3Ç¢­¯¯/Z[[1iÒ$‡Æ¼ÔÖÖ¢¾¾3fÌ@hhè°âŽþ/¹°öMgFcŽ9‹ýûÏ ¤ä¼ù:©ÉÔ—.—.ýÓ¡±î”þ/ë°‘ÆVöäZ½=½½½7nœCÛ —R\¶öÏÙ±Õ9¯0_*Z F£ææf‹„ƒÍš5 QQQ#Ñè¡T jo7âðáÿaÏžÓ8yò€»»1V)§ý7Ñh¥R©`sýpnuÍx¤¤<…””§`0t ¨¨ÊÕ! !œìž/xñÅ]Æ=#0Я¿ïê0„N&ŸM$„BŠB)B! Å@!¤!„€!„b „vÞg°lÙ2ó»TŽén‡y?G?bZaÉf1سgÏHÆ!\$,,ÌÕ!Ü–çž{NrU'°ùÙDB!ÆŒJ¹g „Bn !„b „ÀÿäÕ½ïïIEND®B`‚bm3.7.0/doc/html/a00130.png0000644000175000017500000024452711365042631013252 0ustar tlktlk‰PNG  IHDR´«ÙãÎJbKGDÿÿÿ ½§“ IDATxœìÝw\S÷þ?ðW€°GXaoE@0mõÚÚZG«]ˆ³µ×«u×zÕŽû»~ÛÛÛ{mo‡·C­ÖÖ¶*.ôZ«U;¼·V C܈ì6„MHòû#¥­Ö8 ¼žGp2Îy“k/ðâýyD:N"""""""""3a!tDDDDDDDDD7ƒ™ZDDDDDDDDdV¬„.€ˆˆˆˆˆˆÈÜœ8q………B—a6†ŽÀÀ@¡Ë >DÄ¡ðDDDDDDD7gÖ¬Yرc‡Ðe˜äädÌœ9Sè2¨a‡Ñ-¸÷Þ{±zõj¡Ë0ycÆŒºêƒ8C‹ˆˆˆˆˆˆˆˆÌ -""""""""2+ ´ˆˆˆˆˆˆˆˆÈ¬0Ð"""""""""³Â@‹ˆˆˆˆˆˆˆˆÌ -""""""""2+ ´ˆˆˆˆˆˆˆzXII Ž=Ú£×hnnÆŽ;ŒzÎÖÖV$''õœDÆÀ@‹ˆˆˆˆˆˆ¨‡â³Ï>ëÑk455áã?6ê9›››±eË£ž“Èh‘Y±º""""""¢þ@§ÓáÝwßÅÑ£Gamm)S¦`Ö¬YP©Tx饗0bÄìÞ½X°`òóóñÅ_ÀÒÒK–,Á=÷Ü8vì¶lÙ¥R ‰D‚¤¤$LŸ>ýW×ûé§Ÿ°nÝ:ÔÔÔ`̘1pqqA\\†ŽÌÌL¼ûî»(,,„,X€‘#G^³öÏ?ÿ[·nE}}=ÆŒƒgŸ}"‘¨ÇÞ+¢ßÃ-""""""¢^pñâEXZZâ?ÿùþþ÷¿cçÎøî»ïÐÑÑŒŒ 466"%%sæÌÁk¯½‰D‚ýû÷#))ɰ쯹¹ÿú׿°hÑ"=z/¾ø"Þÿ}ÔÕÕu»VYYþñ`éÒ¥øì³Ïàïï””¨T*ÔÖÖâ¯ý+’’’pøða,X°/¿ü2ŠŠŠ~³n­V‹ . 99[¶lÁ?ü€ÌÌÌ¿ˆ®‡Q/pttÄüùóaccƒèèh<òÈ#8vì}÷ÖŒ3 ‰ “É`ii‰©S§Ž›››b±ëׯǨQ£ ‹áãã+++455u»Ö±cÇ —ËqçwÂÚÚ3g΄««+àÇDxx8&L˜±XŒ‘#GbĈøæ›o®Yûܹsaee___ÿêzD½K‰ˆˆˆˆˆˆz¯¯/¬¬®ü‚ôôtñ­­-@$A,ÃÒÒÒpÜE,ãâÅ‹xÿý÷QRRgggètº_]K©T" Àp,‰àã㨬¬ìö ¢¢â7ë¶°°€D"év."¡1Ð"""""""êõõõÝŽëêêàäätSçøñÇñá‡⥗^BTT,,,0iÒ¤_=ÏÞÞ*•ªÛ} †Çòòòº=¦R©àààpSµ ‰K‰ˆˆˆˆˆˆzR©ÄñãÇèga}öÙg1bÄM£²²AAAˆ‰‰……Ξ=kXŽx5™L†üÑ0[ëìÙ³(((€H$‚\.‡B¡@YY ¶¶ßÿ=d2}höËÀ‹ÈÔ°C‹ˆˆˆˆˆˆ¨DFFbÆ صkŠ‹‹1`ÀLš4éWT×3räHlݺO?ý4Äb1¬¬¬àãム6`ùòå†ç >wÜqæÌ™ƒ°°0´¶¶",, VVVÇÔ©S1þ| 4ÙÙÙ3f ëÖ­Ã<€£¿DÆ"ÒýÖb["""""""º¦Y³f¡¼¼«W¯¾©×µ··ãìÙ³pttÄ€néÚÍÍÍ8þ<\]]ŠŠŠ ”••aèС†çÔÕÕ¡¾¾*• QQQ˜={6V¯^ÈÈHúޱââbx{{Ãßßÿ–j¹cÆŒArr2fΜÙc× þ‡ZDDDDDDD½ÄÚÚqqq·u{{{Ãò@J¥J¥ÝžSYY‰+Vॗ^BPP<Fƒžãíí ooïÛª…H( ´ˆˆˆˆˆˆˆú˜à¹çžCrr2àçç‡×^{­Û.‹DæŒÿ’‰ˆˆˆˆˆˆú Q£FaÔ¨QB—AÔ#hÝ ââZ(yÈÍu„ƒC¹Ðåõ[ ´ˆˆˆˆˆˆˆ~C[[NŸ.‚BQ€ÔÔ\¤¥å£¢¢VV°³³†…Ð%õ[ ´ˆˆˆˆˆˆˆ”•ÕA¡È‡B‘´´|œ>] µZwwGÈdÁxòÉ» —‡`èÐÌûG”—k….™¨ßb EDDDDDDýŽZ­ÁéÓÅHKÓX©©yP*ëaiiˆo$$„`ΜQËCä.t¹Dô ´ˆˆˆˆˆˆ¨Ï+/¯Gzz!RSs¡P +«ííHì!—ã‰'F">>±±°··º\"ú ´ˆˆˆˆˆˆ¨OQ«58w®´[÷UII-,,D8Ðry0{ìÈåÁ õºÜ>O$²BSS‡ÐePÃ@‹ˆˆˆˆˆˆÌZee22 šš…"§N¡µU gg;ÈdA˜1c8âãCGG¡Ëíwììáå—OáÔ©í˜=ûN$$„ ]õ"N§º""""""¢ÑÑ¡ÅÅ‹eHMÍïìÀÊCAA5,,D “B& FBBd²`„‡K!‰z¤ŽY³faÇŽF?¯Xì kë@45¥Ýôk-- {£µõÒï>×ÂÂöö1hl^^ÉdÁ½Žœ8q………F=gii3Ö­;__{,Z4––7Æ¥¥UaëÖl¼ýö¿ûÜüü¼óÎ<ð@ î½×ïVK¾aÇG`` 23 ±uëO8p "<üð0<ñÄHDEõ| Ô·0Ð"""""""“ Ñh‘­DZZŠ<(ùÈÍ­„H$BHˆäò`Èå!˃1p 7,,z¦ûJçΕbÚ´÷0h7¶n}vv7?˜~ÿþt,Y² ¥¥ÿ¾¡ç¿÷Þ7xå•CØ»wI¯/T©Z’’Š­[Â¥K刋 ÄìÙ#ñÐCq°µ÷j-džh‘ êêš‘‘Qhè¾ÊÈ(@ccm`辒˃!‘Ø ]n9¾S§¾‡ˆolÛvkapó–N§Ãœ9[pút1¾újÜÜn麷맟r°mÛO8|8 öö6HJ’ã‰'F",L*H=dhQÓju¸t©8y2iiùÈÉ©€N§Cp°‡aÙ`BB""¼aii!tɽ¢+Ì8Ð Û·Ï¿å0 ¸ù@ ЇŠãƽô×ï©™c7¢ªª;wþŒääŸQTTƒ»ïŽÀ¼ywáî»#­‹L-""""""2:•ª™™P(ôÃÛÓÒò¡RµÂÞÞÑÑþËC¯±ÜÝ….WçÏ—aêÔ F ³€[ ´ =½<ò.V®œ€eËÆÞV Æ ÕêpìØ9lÞü=~ü1ááRÌ›w¦L‘ÃÞþöÞ#ê;hÑmÑétÈÉ©@FF¡aöUv¶Z­n†eƒry0"#ý`eÕ?º¯®çÂ…2$%mÀ€^HN¾ý0 ¸õ@ >øà{¼ôÒìÙ³wÜvÛµËùóeøðÃï±oŸ¶¶Ö˜5kæÌ??W¡K#1Ð""""""¢›ÒÜÜŽÌÌB¤¦ê—*ù¨«k†­­QQþ˃ ™,R©“Ðåšœ«Ã¬íÛç­ëèv-N‡¹s?BFF!¾új<>„˾nÒÅ‹J$%­GX˜ñÃ,àö-ÈÊ*ÂäÉoãé§ïÊãXñ¥¥åcóæïpøpÜÝñÄ#1{öHÁvk¤ÞÅ@‹ˆˆˆˆˆ¨«®nDZZ>RSó¡PäáÔ©"´¶ª!‘Ø:¯âãCÈÜ·!;[ß™&Åöíóáà`côk#Ѐ>ú/¼°»v-ÂÈ‘áFª®ç”–Öá£~Dròq´µu`ÆŒáX¸p üý¸öe ´ˆˆˆˆˆˆú ­V‡ìleçÒAýÂÜÜJˆD"„‡K!“#!!2Y0ÂÃ¥‰DB—Ü't…Y¡¡R$'÷L˜/Ѐùó?ÆÉ“¹øòËgÌfZss;vìø›6}‹òòz<ôÐ0,^|öº4ê ´ˆˆˆˆˆˆú¨ÆÆ6dd†·§¥åC¥j…½½5bcbØP"±ºÜ>);[‰¤¤  ñìÑ0 0n ¥Rµb„7áç'Á®]‹LržÖµ¨Õ|úi:6lø/²³Ëqc±dɽ>p 7,,8¼Ú\¾\)SôaÖöíóáìÜû>=h@ròq<ûl ¶oŸ1cõÈ5„¢Rµ`óæï°yów°´´ÄÂ…wãOúCîJI·‡QjnnGff!RS»–森®¶¶b ¹<ññú.,wwG¡Ë¥[Ðfùû»!9y aÐó<õT2¾ùæ<¾ür|}%=v¡Ô×7ãý÷¿Ã|±Ø‹Áÿ8ŠÁ– b EDDDDDdD%%µHM̓B¡¯Î+AG‡ÞÞ.ˆ×w^ÉdÁˆŽöçk}€>ÌÚWAÃ, w­æævLœ¸‰=öí[ ++óŸ§õ[êêš±iÓ·øðÃïac#6[o:hÝ"µZƒÓ§‹ W©©yP*ëaeeÈH¿ÎåƒúùW~~®B—KF–›[‰ÄÄõðó“`ÇŽ…‚†Y@ïZ€~§Àx sæŒÂêÕ“{ôZB«­mÂÆßbË–`g'ÆâÅ÷â‰'-¡1Ð""""""ºAÕÕHKËGjª~çÁS§ŠÐÚª†Dbo輊All ;9ú8S ³€Þ ´`÷î“X±b>þx.î»oH_OhÕÕxï½oðñÇ?ÂÁÁK–܋ٳ­XèÒú-ZDDDDDD¿A«Õ!;[Ù¹tP¿„07·"‘ááRÈdÁHHLŒðp)D"oï/òòôa– vî\daлüùÏ;ñÅgðå—«àïß?:«ª±aÃ1|òÉOpv¶ÃÒ¥÷`öì‘\>,ZDDDDDDÛ‘Q`Þž––•ªööÖˆ D|¼>¼’˃!‘Ø ]. ¤+ÌòövÁ®]¦f½hµ´´ãþûÿ GG[üç?KûU¨SYÙ€õëaëÖŸàîîˆgŸˆÄD9w%íE ´ˆˆˆˆˆ¨_ÊÍ­DzzÒÓóqòd.^TB£ÑÂÏÏÕ0¼].Fd¤_Ÿ|M7'/¯S¦l€——³É…Y@ïZpéR9&N\‹Ç¿/¾øP¯]×T(•õxã£Ø³ç$ ðÂóÏ?Ð/–`šZDDDDDÔçµ¶ªqêTŠ<¤¦ê»¯ª«amm…˜˜ÈåAËC0lX¼½]„.—LP~~×C*uÂîÝ‹M.Ì„ ´`ß>–-Û?œƒ ¢{õÚ¦âÒ¥r¼úêç8zô B°zõdÈdÁB—Õ§1Ð"""""¢>G©¬Gjª~îUZZ>NŸ.†Z­TêÔ9¸=rybb`mm%t¹dâÌ!Ì„ ´à™göààÁL|õÕ*¸õúõMEZZ^yå~ú)&DãùçïÇÀÞB—Õ'1Ð""""""³¦Vkpút123 ¡Pä#55%%µ°´´@D„·ap»\‚  w¡Ë%3Ó=ÌZgg;¡Kº&!­––vLšô6ll¬pàÀ²~5Oë·ü÷¿ç±fÍ!dg+ñØcw`Õª‰pssº¬>…™•êêF¤¥å#5U¿ûà©SEhmUC"±‡\ ™L‹ „££Ðå’ë ³<=°gi‡Y€°\¾\‰×bêÔüã Rƒ)Ñjuسç$þõ¯ÃhiQcùòq˜;÷ý>ì3ZDDDDDd²´Z²³•P(ôá•B‘ÜÜJˆD"„‡K!“:°ÂÃ¥‰¸ÃG~~¦LY'ìÞ½..¦¿³¥Ð8E‹¶bóæ?↠V‡)ijjúuǰiÓ·ðövÁ³ÏNÄCÅñÿ¯n-"""""2*U+ÒÒò‘‘Q€´4ýü+•ªööÖˆ D||×òÁ`H$¦0y*(¨Fbâ:¸»;bÏžEff¦hÀóϧàÓOÓñÅ«¸Ì÷*%%µxã£HIIE\\ þö·G “ ]–Ùb EDDDDD‚ÉÍ­ìÖ}•­„V«CP;äò+áÕ A>°²²º\ê ª1eÊz¸¹9˜U˜˜N ÕÖÖɓ߂H$ÂÁƒOsã…_8s¦ûÛ§øùç˘:5Ï?ÿ¤R'¡Ë2; ´ˆˆˆˆˆ¨W´¶ªqêTŠ<¤¦ê»¯ª«amm…˜˜ÈåAˆ…LÌ_îH……ÕHLÔ‡Y»w/2».@S ´ý’Í ÞÄ#ÈðÊ+S„.Ç$}öY^~ù Z±|ù8Ì›7šÁýM` EDDDDD=¢¤¤©©yÈÈ(DZZ>NŸ.†Z­Tê™,ññ¡ËƒÀ\W˜åêj={›]˜˜V fbÁ‚O°qãl<ø`œÐ嘤––v¼óÎר´é[ºãï£GG]–Yàw """""ºmjµ§O#-- E>RSó TÖÃÊÊ‘‘~˃1oÞhÈdÁpº\¢n õË Í9Ì2E“'ÇâçŸ/ã™gö *Ê¡¡žB—drìì¬ñÜs÷cÚ´¼üòg˜>}#&NŒÆ‹/>„À@λvhÑM«®nDZZ>RSõó¯N*Bk«‰=äòàÎ¬ÄÆÂÞÞZèr‰®©¨¨‰‰ë ‘Øc÷îEpuuº¤[fjZ€>ìž<ùmh4Z<ø4lmÅB—dÒ¾ùæþö·OQTTƒ+ÆcÁ‚»![ ]–Ib EDDDDD×¥Ñhqñ¢'Oæ!3³ E>rs+!‰.…LŒ„ý÷ðp)·¢'³Ñf¹¸ØcÏó³Ó ´}ܸqoâÁcñÚkS….Çä©ÕlÚô-Ö®ýAAîxõÕ$ *tY&‡K‰ˆˆˆˆ¨•ªiiùXyÈÈ(@ccm„‡™,ÆšÕpDW+.®Å”)ëáâbþY¦.0Ðÿþ÷ Ì›÷î¸#<2Lè’LšXl‰¥KïŃÆâ¯݇G]‡©Sãñÿ÷ ÜÜøï´ ;´ˆˆˆˆˆú¹ÜÜJ(ú¥ƒ E>²³•Ðju r‡\bèÀŠˆð†¥%wà"óW\\‹ÄÄupr²Åž=‹ûLH`ªZ]^xa?vî<#GV <\*t9fãàÁL¼ð§P«;ð !)IÎNX0Ð"""""êWš›Û‘™Y…"ééHKËGuu#¬­­¹<ññ¡É‚!•: ].‘Ñuuf9:Úô©0 0ý@K­Öà‘GÞEss;>ÿ|9ìì8_ïF54´âµ×ŽàãDBBÞ|s:‚ƒ=„.KP ´ˆˆˆˆˆú°üü*¤¥u…W8w®Zx{» >>Ä0À=:ÚŸƒ‡©Ï+)©Eb¢>ÌÚ½{ÜÝ….ɨL=Ðôâ}÷½‰£±vít¡Ë1;YYEX¹r7._®À³ÏÞ'ŸÝo;g9C‹ˆˆˆˆ¨¸V÷•Xl‰èhÄLJ`á»??W¡Ë%êU]a–ƒCß ³Ì…¿¿+Þ~{æÌÙ‚;îCRR¼Ð%™•˜˜9²ëÖ}W_ýf`íÚˆˆðº´^Ç-"""""3Õ5û*3³'OæáâE%4}÷•L¦ï¼’˃å[[±Ðå ¦¤D¿ÌÐÞÞ{öôÝ0Ë:´º¼üògøøãÿáÈ‘?càÀþÆCv¶+WîBVV1–/‡¥KïíW¶ ´ˆˆˆˆˆÌ@cc22 Wii¨­m2Ì¾Š‹ „\ŒaÂØ}Et•ÒÒ:$&®ƒ½½5öìYÜgÃ,À¼-µZƒ)SÖ£®®G®à<­[¤Õê°yówxíµ#öÀ[oÍ@t´¿Ðeõ ZDDDDD&F§Ó!'§âªð*ÙÙåÐh´ðós…L™,Æ#:ÚÖÖœ$Bô[ºÂ,;;k¤¤ôí0 0¯@ ÐwÎ÷&ÆŽÄÛoϺ³–Ÿ_…U«v#55þó8,]:VV}{¶¿ó L¥jEzú•¹Wéé…¨¯o†­­ÑÑþ¸ë®¬\9ÆÁÛÛEèr‰ÌBYY¦LY[[q¿³Ì‘ŸŸ+ÞygfÏÞŒ#B1cÆ¡K2[ÁÁHIYŒ?ükÖ±cçðÎ;³â)ti=†ZDDDDD½H«Õ!;[‰ÌÌBœ<™‡ŒŒ\ºT­V‡€·Î¹WÁˆ ä΃D·¨¬¬‰‰ëacc…½{—ô›0ËÜ:´º¬Ys~øzƒû ]ŽÙËÎVbÙ²ÈÉ)Ç /<„Ç¿"‘H貌ŽQ?Õ×~¸5Õkëêš‘‘QhX:˜‘Q•ªvvÖˆ‰ñ‡\‚aÃôK¥R'¡Ë%2{W‡Y))KàáÑ?Â,À|-F‹ÄÄõ¨©iÄ‘#+àà`#tIfO­Ö`íÚ/°~ý1ÜuWÞxc:¼¼œ….˨hõS"‘?ü0fÎ4ï¹%;vìÀ§Ÿ~zS–JÕ gg[£×¢Ñh‘]n¯ÒÓ “SN‡  ÷Îð*2Y0"#ýúü|¢ÞÖfY[ë;³úS˜˜o Je=î»ï Œ=ë×?.t9}FZZ>žz**U Þxc&Lˆº$£á -"""¢~,)) IIIB—q[Ôj5>ýôÓz®N§ÃŽ?ã¹çR P¼xÛó¨jk›–V`¯22 ÐØØ{{kÄÆb„hÃ÷þ²ä‰H(ú™Yúm˜eî¼½]ððØcïcĈ0<þøB—Ô'ÈdÁøúëgð⋟bîÜðÇ?ŽÂ‹/>Ø'61ÿ¯€ˆˆˆˆèœ:U„çŸOÁ©SE†ã› ´4-.^TâäɼðÂ~ „!Cü„.©O°··Æë¯OÅèÑñÌ3»‘šš‹M›ž0ûñ ´ˆˆˆˆ¨O«©iÂ?þq»wŸ„……~n˜µµ²²Š0~|Ô5_W]Ýhè¼R(ò‘™Yˆææv8:Ú ..“'ÇB& †LWW‡Þúrˆè”Êz$&®‡••RRÃÓ“³èÌÙÊ•ãqâÄe,Xð ŽY''ã/ï¯&OŽÅСX¸p+Ư¾š„G• ]Ö-c EDDDD}RG‡Û¶ý„þóÔêèt:h4ú9[ju22 º=÷ܹ’Ϋ E Y¾ IDAT ª!‰.ŰaAxøáaÉ‚1p ,-Ù}Ed ôY]aÖ†Y}€¥¥6l˜qãÞÀ3ÏìÆÆO]RŸèŽ–aÍšCxê©düðC6Ö¬I„µÐ¥Ý4ZDDDDÔç?~ùK .]ªøÍañ:ž^€þóŠøAAApppÀœ9s Õ^¹`—ÐPOLž¥rrs_C~þë8yò¤¤,Á+¯LÁ¼y£1n\¤°±¹2>V?_ øöÛ‹·þ†Q¯©®nÄÔ©ÐÖÖ}û–ÀÇG"tIÔ‹†ÅsÏÝ5k!--_èrú´˜˜=ºþþn˜<ùm>œ%tI×Ä¡ðDDDDtC þð‡?@©T"==“&M€0jÔ(|óÍ7¸óÎ;QRR‚7bîܹxõÕWQQQ7Þxÿ÷ÿ‡éÓ§ÿæy5 RSSqéÒ%A&“aöìÙ3fÌM×ha!‚¿¿+üý]1rdø¯¯¨h@^^%òó«péR9Š‹k¡RµÀÙÙED½£¶¶ Ó¦½‡¦¦v†YýØ’%÷àĉËX¸p+¾ür%\]„.©ÏrssÀÎ ð÷¿†ùó?Æÿû“°xñ=B—õ+ìÐ""""¢"‘HðꫯÂÞÞ£FÂÒ¥K±cÇúî­çž{"‘cÇŽ…••V®\i8nhh¸î¹ÿñÀÚÚaaa2dêëë{äkJ0|x(¦MKÀêÕ“±qãl†YD&¬®®Ó¦½•ª{÷.ŸŸ«Ð%‘@D"Þygà©§’9O«‡YZZॗÆš5Sð꫟cÕªÝ7<£²·0Ð""""¢±Xl8ŽŠŠBYY™áØÁAÿ×r‘HXYYޝÇÒÒžžž†ãß{>õ*U ¦O߈šš&ìÝ»þþ ³ú;WWlÜ8?üwß=&t9ýÂìÙwbÛ¶ù8t(³f½oRÃâhÑ ©ªªêv\QQ777ª!¢¾L¥jÅ´i²{÷.A` »Ð%‘‰É‚±zõd¼þú?~Yèrú…»îŠÀO#/¯?ü. «…. gh™=F‹ººæÎ[KçǦ_wÝwåX"™pS×ÉÏÏÇ¡C‡0iÒ$444`Ó¦MX¼xñM×ûé§Ÿ"<<QQQ7ýÚk‘H&`ذ¿ÁÇÇNðòr†——3<<œàããww§ÎÇam͉L™JÕŠ™37¢¼\…ÿüg)‚ƒ=„.‰L̼y£qâD./ÞŠ/¿\OO'¡Kêó""¼ñùçÆœ9`Ò¤·°mÛ|  hMünNDDDd"Z[Õ¨«kFmm3êë› ÁÓ/ëêZP[«¬ê뛡Rµþê\ÖÖVHìàädØØˆamm;;1ìì\ •º   å¦ê1bV¬X×_ÙÙÙˆ‹‹ÃüùóQ]}s©]¾|9æÍ›gÔ@«¹ù,.|eeu¨ªjD~~NžÌCE… uuÝ—G¸¹9ÀÓÓ R©>ôòôt‚··>óöv1;:Ú­>"º1 ­xì±÷QRR‹}ûfÑo‰DX»vÆK–lÇÎ `iÉh=M*u¾}K±dÉ6$%­ÇGÍûÍ Xz‹HÇIjDDDDFÕÞÞÚÚ&ÔÔ4£¶¶ µµM¨®n2tI骖_V­­ê_ËÁÁ‰=${¸ºÚÃÎκ3œ²„……Z­íí´µ©¡Rµ ¡¡µóúMèèÐv;ŸDbww88ØâøñÏðÞ{ó1sæÌþÚZ[[qüøq¸¸¸`ذa·ý^ÃŽ;0kÖ¬knkë@eeÊËëQYÙ€²²zTW7B©ÔWT¨ TªP]ÝÐíýrr²…ŸŸ~ÇD ||\àçç ??WøúJàë+a·‘55µaæÌM((¨ÂÞ½K.º$³³:–,Ù†ÒÒ ]J¯8}º“'¿¥KïŪU7×uL·N£Ñâ™gö`ÿþ4lÜøÆ7Þ¨n¿]GSSjk›QSÓˆš}UW×=¬Ò?Þ„ššFÔÖ6£©©íWçqq±‡››\]íáâb‰Ä>>¾°µµ‚¥¥,,DÐé€öv ÚÛÕhiQ£©© ÕÕúëVVªpáB4šî•««ÜÝàææww ì G¸¹9ÀÝÝööbÔÕµ¢¼\…ÂÂj\¸P† ÊÐÔT KK—›~?lmm1f̘[~?…`cc×ß(­ÓéPUÕˆªª”–Ö£¬¬¥¥u()©Enn~üñJJjÑÞÞaxTê ÜèÞyÓà±Ø²§¿<¢>¡¹¹=ö>òò*±wï†YtC¢£ýñÒKcõêÿ !!£GG]R¿`ii7ßœ;Ì›÷֮ޤ¤ø^¯ƒõ]áSW÷RWwÔÕ]T]ŸwVW‡`eeWW‡Î›=\]àã#Á!~pss€››¬ Smm46¶¢¦¦ eeu†Î sçJQUÕø«€ª+ˆê:×€^Ýîóðp‚»»£áØÊJ¿Ä¢£C‹ÜÜ \¸P†³gKñý÷Ù8¾ÅŵôZd¤bb0}zö…\>À´^yï{š‹Ë=xè¡wˆØXýíf—*‰D"xz:ÁÓÓ ƒû^óy (+«CY™>ì*)©EQQ-~ø!……5† ,,DðövA` ;‚‚Ü ¡WP>ôòòºù@‘¨/jiiÇ㿜œ ìÝ»z ]™‘'ž‰Ÿ¾Œ%K¶ã«¯VÁÛ›ÿßÚD"^|ñ!¸º:`ùò¨¯oÁ¼y£{µZDDDdvÔj!ˆÒ‡RM†ªëvuPÕõ¹VÛ}Iš­­ØLé$G èÕ-°’H®<®Ó‰ÐÖÖnXª¦_ƦBE… yy•¨ªÒ74\™i%‰àááGxyéç3 ä©ÔŽðôt6tX]P]Ouu#Ξ-Á¹se¸p¡çÏ—áâE%ÚÛ;`ee°0)öÅìÙ#1x°/ö¯¯äWçÑé~½ÄÑ\µµbð`üôS>úèG¨Õ¸º: 66ÀpÅÆep°Tê©ÔéšÃpëë›QXXƒÂÂjT£¨HÿyjjŠ‹¯tx98Ø $Ä¡¡ž •"4Ô!!ž ó„DbÛu™ƒ––v<ñÄÈÎ.Çž=‹Á0‹nÞë¯OÃý÷¯ÅÂ…[±wï’ú^JƱlÙXH$öøë_÷¡¾¾+WŽïµk3Ð""""Á54´¢ªª¡[ U]Ýø›÷ÕÔ4u Œº89Ùºšº©À@7¸º:@"±7À0T¼k฻»ã-/;Óét((¨Æ™3%8{V;s¦Je=}°2h/F€yóFcð`_DDx÷Ëen­­9xõÕ$ú™YgÎ#3³…8p o½õt:üý] áV\\¢£ý>üÝÅÅÑÑöˆŽöÿÕc:Je=òó«‘Ÿ_‰Ë—+‘—W‰#G²—We»\]ê°0)BC¥ö@X˜'¤°µµ^"¡´´´cΜ-8{¶{ö,ºng$Ñõ8:Úàý÷ÿˆx ¯¾ú9V¯ž,tIýÊìÙwÂÅÅË–%@¯…Z ´ˆˆˆÈ¨4íoS†T55M¨ªj4„S55݃"@ß¹âîîh˜åææ€ðpiç¼(ÇnËýº>ÿeˆSW×ŒŠ }÷Ty¹ Je=23 ¯ÞxÝð<=õTx¸^^.†+©Ô ^^Îpv¶3êûÖÖÖ ÊpæLqgxUŠ ÊÐÐÐ KK „†zbÈ?Ì›7QQ~2ÄîîŽF­¡¯°±±‚L ™,ØpŸJÕ‚ŒŒBdfêo›7‡òr,,D0À«[Wd¤o…‚"‘¨sÀ¼wÜÖí1­V‡ââäçWáòåJäæV"7·'O桨¨"º#"Âz>àþhO棭­sç~„S§Š’²C†ø ]™¹Aƒ|°fM"V¬Ø…áÃCqß}C„.©_yè¡8XXˆ°xñ6ˆÅ–X¶ll_“ßõˆˆˆèº4-ª«õÁSUU#*+ aTWU×ã]Õ/]éŽÒTAAî˃»uMyz:žs½_Ì[ZÚQVVŠ Μ)6„U]ËÊêPQÑÐmö•Xl 'øø¸ÀÃà ¡¡RŒOOgx{;Ãݽë1Ç^Ùµ®®®gÎãÌ™RCçUNN9::´pp°ÁàÁ¾ˆŠòÅÔ©ñ†%ƒvvÖF¹¶N§Ã‰¹HIQÀÙùF9§9pv¶Ã]wEà®»® .+«ër>œ…††VX[[!:ÚC‡vur"4Ô"‘¨Gkì «Ý5ØX­Ö†úçäTàüù2|ýõ9lÜø Ôj ,--à†Áƒ}î…Áƒ}0`€ ðâNŒdrÔj þô§‘ž^€={!*ŠaÇ´i øùçËxúéøòËU¿»×äɱÐh´xê©dˆÅ–X´¨g7‘áw7""¢~¨±± *ÔÔ4¢ººÉ0ªºZß9uõçÕÕMÐé®Ìž²²²èHîh袊Šò3„QŽÝ†š»¹9ÀÒò÷gYh4ZTU5àìÙTV6 ´´Ö0|[©Ô‡UJeTª+Ë ÅbKH¥Îðñ‘ÀËË11?>ʰÜO*u6eB)*ª1,ìúXR¢Ô.•:aÈ?Œ‰åËÇ!*ÊÁÁ°°0~p’Ÿ_…}ûÒ°oŸùùUˆŒôEGGѯ#[ÛPüðC6FŽpÃï_W§Ôý÷ÇÐwH]¾\a¸22 °mÛOP«5pv¶ÅС†¡óqq½:Ô],¶DX˜aaÝw~ëèÐ"?¿ /êç¨eg—㫯Îv º‚‚Üé‹!Cô}QQ~šL‚é ³ÒÒò±k×"ÄÄüö,:¢[µfM"N*ÂÂ…Ÿ`ÿþ§úå2|!=üð0´·k°rå.XZZ`þü»zìZ"ÝÕ?¡‘YR«5†ª¢¢{0¥ï ÒS*TW7¢­­ûÎ}ÎÎvðôìÚ=ÏÁ0û©kW½®Ç<<ôËýnVss;JJj;;¨ô]Tååõ(-ÕwZuÍ­ºzÇ?wwGH¥Nðõ•ÀËË>>.ðòr—ו˾©  YYE8}ºYYÅÈÊ*B]]3,,Dö@T”¢¢ü Á‚TÚ³õ«T­øüóL¤¤(pâD.ÜÝðè£2L›6ƒû@$!993gÎìÑ:zÚŽ;°dÉ6ØÙ B` ;¦MKÀÔ©ñðó»ý¿Ì«Õœ9Sb¹23 qùr´Z¼½] áV\\ bbáìlk„¯èö©ÕäçWáÂ…2dg—ãÜ9ý2ÖÂÂjúÿ¾ºÂ­®%¬¡¡ž7>Ý*µZƒ'Ÿü?ÿœƒää…É‚„.©ÏÙ¿?K–lCié¿….EP99˜8q-¦OŽ—_~Dèrú¥]»N`ÕªÝx饇1wnÏì~È-"""ÕÞÞêêF(•*TU5vÐëZö×NUV6¢¾¾û(+¸¹9v΂ÒwLEDøº•ôa‘³¡›êvþzÙØØ†ÒÒZ”–Ö¡¼\…ââZÃÒ¿ÒRýM¥j1<ßÖVl¤|}% 5ûøHàí­­Ly™T×°ö¬¬¢ÎàJ^©T-°²²@x¸bbü1nÜDGû#2ÒÆ<~-?ü½{8|8 Z­ãÇGaëÖ'q÷Ý}6°¨«;ŠãÇ·`×®زå¬]ûî¾;S§&`„è[þ7.[«. ­8uªÈp}òÉÿðÊ+ŸC$!,ÌÓr ˆ¨(?Aþ-‹Å–†%‡WS©Zºm2ðí·°yówP«5°³³ÆàÁ>† kÈ?£.w¥þM­Ö`áÂOpüx’“ç3Ì¢.Åë¯OÅâÅÛ0|x(&M*tIýÎôéáÕêðì³{àêªÿƒš±±C‹ˆˆ¨uuRé“ë)}HÕ€ªªFÃN{•• ¿Vîà`ooCç’§§>òðp¼ª»JTk×6•ªeeõ()©í쨪CII”JýçeeuÝv´³³†¿¿+¼½õU~~]ŸKàç§«n¥ÃKH:yyUWu^áôéCx5`€7bbü;oˆŒô$ÈÎV"%E½{(/¯‡LŒiÓ0yòP¸¸ØÿækúR‡Ö¬Y³ KcÛÛ;ðÅg°{÷I|ûí¸¹éž1c""¼{¤†òrN*Dff22 ™Y„úúfˆÅ–2ı±†™\xõȲÒ[¥VkpáBY·e±çΕ¢¡¡VV4ÈÆ!..qq7­úÉôuth±hÑV|ûí$'ÏGBB¨Ð%õYìÐêî/Ù‹ýûÓpôèJ{]N¿´nÝ1¼þú$'/À¨QŒznZDDD·I?ûI¿‹_YY½!°ª¨ÐwSUT¨:—þé—^ÍÞÞÚ0çÉÝÝ>>.†Î*//gCX%•:ÃÖVlÔº››ÛQ\\ÓRÕ¢¬¬ÅÅ5P*U†îª¦¦6Ãómàëë x{»‚+oo}Xåë+1úνM«Õ!7·²[xuæL Z![bà@oÄÄ :Z` â'èÎruuÍØ¿? »w§"+«~~®˜:5‰‰r„†zþî뻆œ'%%î«©±…›[ëµ^"¨Ž ´´XÁÉ©½Ûý)))€ßú±¶¤¤{ö¤bçΟQ\\ ™,Ó§'àᇇõhלN§C~~•aè|FF!Ξ-Ak«ŽŽ6ˆ‰ 0trÅÆey¤1uu!ž>]ŒŒŒddâôéb47·ÃÙÙ116,Æ!66¨Ç—Ï’ùÒh´X¼x¾þúvìX€áÃfõ$Zݵ·w`òä·¡Óépðàrî+®`qÿþe<ØÇhçe EDDt ­­j(•úOååªn+* ÝTÕÕÐj¯|;µµÃÃÃ^^únª®YOîîŽðövéRÙÛ÷L'OG‡*””Ô¢¸¸eeu†ÏKJô˯îsr²…¯¯~~®ðòr¯¯¾¾.†¡Ù¾¾89™Æl cé ¯N*4,<{¶m‹-1hO·ð*2Ò×$–AªÕü÷¿ç±k× ü÷¿çamm…I“†"1QŽ;ï ¿©Î™©S§^u^ dg»¢¾Þqq°³S¥Þ‹õAMDDímŸ«¨È ……N RÁß¿ñWïٳ皯Õjuøßÿ.aÇŽŸqäÈiˆÅ–˜4i(f͹<ä¶k»jµ/*‘ž^€ÌÌBœ:Uˆììrh4Zxz:]5Kß ejqG‡/–!=½Àð5\ºT­V??WÈdúpkذ@DGûs©"A£ÑbÉ’íøê«³Ø¾}>î¸#Lè’ú<Z¿VPPñãßÀC ÿþ•ôû/ £Óh´˜;÷#œ>]ŒC‡ž†Ä(çe EDDýNcc”ÊzTVêwЫªjDYY]ç2ÀzCXuõnz¢Î Ê>>.ððpúU8åá¡_î×ÁO]]³¡³ª+¤*+«3|^Q¡BG‡~ÀºXl //gøù¹Âßß­3¬ÒßÜúDgÕP*ë 2…ÈÊ*„J¥ï¼ŠŒôí^ ìkr»"eea÷îT|úi:êë›1rä$&ÊñÀ1·ÝiôÓO9Xºt;ÄbKlØ0Û¨³m–,ÙX¿þñÛ>—N§Ã¦Mßá•Wá®»"ðöÛ3oi kWgÛöíÇqþ|ÂÃ¥˜1c’’âáááxÛuÞŒ¦¦¶Î.(}À•ž^€ââZˆD"„„x­ØXáæq]Occ›aGÈ®«¼\++ DFú!!!#F„aøðP¸»÷î{KÂÒh´X¶,GžÁ'ŸÌŨQ….©_` õÛΓO~ŒuëÃ# ºœ~©¥¥IIÐÒÒŽýû—eZDDÔgÔÖ6¨_vT)•úeJe=ZZ®,W‹- Ký<=áíílø(•:ÃË˹sÇ?'XYõÎ0mµZƒÒR}8UZZ‹¢¢Ã+ýý5hn¾ò5¸»;ª®ÀÊÏϾ¾.pƒ§§s¿›w£Rµ"+«ééW–{•—×ÃÂB„ðp/C@ˆÈHÓ ¯º”—×cï^ý\¬‹•—âÑGeHJ2Î~o½õÞzëKŒ…µk§=Ü4f Õ%-­ ~ÒyÞÇnkOVV’“ÆéhiQãÞ{#1kÖ‚Я¬l0 œï `»æqEEù!66±±ˆ‹ BX˜§a騩()©EFF!ÒÒòqâD.Μ)†F£Cx¸Ôn__ãü…žLF£ÅŠ»pð`&>þx.FŽº¤~ƒÖµ½ðÂ~ìÜy‡ÿùWfP郞nÄäÉoÃßß;w.¼íï³ ´ˆˆÈäÕÔ4¡¼\…ÒÒ:TU5t~¼ÒUÕÕmÕÞÞax¼¼\ •:C*ÕwSyz^ùèã#1tWõ¶¶¶× ¸XV•”è?v——×–0ÚÚŠ;é®ÀJßeÕ5pÝÏÏÕè³µÌM{{Μ)Á©S…†yE—/WB§ÓÁ×Wbèp:4C‡m`~OimUãðá,ìÛ§À÷ßgÃÉÉ“'ÇbêÔxÈdÁF»Nyy=–.Ý…"/¼ð æÌùƒÑÎ}µž´}€½|ùN|óÍy<÷ÜýX¼øžÛ vZ[Õ8tèvìø'NäB*uÆŒÃ1uj¼àƒ„»6&èše•™Yˆ3gJÐÞÞgg[ÄÆvb4ÅyVmP(òpòdŽÏAFF!ÚÛ;à†#Â0bD(B&ºT2­V‡•+wáÓOÓñÑGsq÷݃„.©_a umjµ>ú.ÚpäÈŸ¹,Z Õ˜<ù-$&Êñâ‹ÝÖ¹h‘`ÚÛ;PVVòòz(•õP*U(-­EE…>´êº¿­íJPeoo ‰ahzW•TÚ½«êZ»ºõ†æævÕBª®ðª¸¸¦s·@•á¹Î憥€n] ÷õöò'S§Õê“SŽÌÌ"C€uöl Ôj \\ì ]+±±&ù‹ýµèt:œ8‘‹½{8t(--jÜuW’’â1~|”Ñ—™}óÍ,[– ;lÚô† ñ3êù¯ÖS ß6oþÿüçÁÛZ‚øKùùUHNþ{÷*PQ¡Âw†aÆŒ¸ÿþ“ Õj Ξ-¹jè|Áo¹qqAˆ‰ñïÑø7«­­™™…8~<'Nä"--mJ0bDBqÇa4ÈÇäºÏèút:V®Ü}ûøè£¹¸çžÁB—Ôï0к¾’’ZŒ÷&ÆŽÄÛo›÷¿æìøñ˘6mÖ­{>{Ëça EDD=¢kw¿«ƒ©²²zàòŠŠ†n;þYZZÀÓÓ ¾¾ú°J?œÜÞÞ.ðñq——~@¹)tרT-†nªâ⫃+ý}µµM†çºº:tvU¹^X¹î2x3eeu†%W™™ÈÊ*FCC+ll¬åoX:ˆà`³ûå7'§û÷§!%%ÅŵˆŒôÅÔ© xôQY„™jµ¯½v6ü<¢ŽÛÓAGOZ]º– j4Z¼÷Þl£í¢¦ÑhqìØ9ìÜ©Àog'Fbb<¦M‹GLL€Q®aL*U+23 \Æ IDAT™Y„ŒŒ+ó¬,--0p W·N®ˆŸ^[Fý{::´8s¦'NäâøñËHMÍCmm¤R'Œ5wß=£GG˜M@Ý_ét:<ûl öì9‰?üÆŽº¤~‰Öï;vìß}w'N䢵UAƒ|0fÌ üá1bDllLk@~¦Óéð—¿ìÅÎ'°yó1n\”Ð%õ[ ´nÌš5‡ðá‡?àС§1x°¯ÐåôK: nÅÙ³%8|xÅ- ‰g EDD ­†óÊÊêPVVoè°Ò/ Tuë>‹-áá¡ïªÒ‡Ux{;ÃË˾¾H¥Îðõ•ÀÞÞ´f¨Õ””Ô¢ àJ`uu€uu瘗—3üýÝä~Uhue‰ ¡ºuÕP(þ?{çÞTÙþñOºØ…–î½-…N6ˆL™¥Á‚ *ÜâByݾŠþ¼à¡ìÊÙ³»´tÓ¦{ïݬßi#ÈÑ6is>וë¤Izr'9ã9ß羿wÑÑbbbrHJÊG*•caÑŸ€‡ÖÌ+Í+—ºZZ¤:”È®]Ñ=šŒ÷Ý7˜yó9Ò¥ÃÅ܃xî¹-XY `ýúGpqé<¯¢Î´àêÄ1cÜøòËÚ½³^[yhXXûöÅ!—+˜6͇ ‚5ÊUã³e29ééÅ*Ãù˜˜lRS ‘J嘘ôU5Kh5A¬kn–‘ɉ©œ8‘JRR=zè1l˜cǺsÏ=xxXhüwß]Q(¬^½›M›Îòí·1mšºCÒjAëÖÉäÜÿÿQVVÇ/hD€6R_ßÌôé_àädÊÆKnû8.ZZBcc yy UÊzUV©–µµgõë×+«XXôÇ¢k) !ÖÖZ;ÿ)ÍÕ5±{žB¡ ¸¸†œœrrr”‚U^ÞßÂUaa•ÊtÝа'vv±µUŠV¶¶ÆØÙ™`kk„Ý@ñËéê44´GTT‘‘bbc³)-­ÅÀ@ooküýpÀßß¡Ût>k>víŠfïÞXêë[=ÚUå‹Õ"]K‹”wßÝË?žbñâ¬Y3§Ó·éδڈŽÎfÅŠ_Hd¬_ÿ0Žò>55MìÝË–-ç‰ÍÁÁÁ„yóY¸pý;ä=;‚ÆFåþù·W99å8:š^UÚëím£v!¿¤¤–Ó§Ó8~<…“'S))©Å̬ãÆy0nœ;cƸ©¥á‡6¢P(xûí=üôÓi¾ýö!¦O¢î´AкuŠ‹«™4éSFŽtå»ïRw8ZKff)Ó¦}ÎK/ÝÇc½­ÿ-n@s³”‚‚J ª)(¨$?¿RåYÕ&bUU5¨^ß«—66FXZPuËk+lë¨×¯ßí§ýv&UU *Áª-³ªíïÜÜ UÉ£vvÆ*Áª-ÛªíoÁêcÈÎ.oͼÊ&*J|Uö•¿¿C«€em»ž«›ÌÌRvîŒbçÎhrrÊñô´dÞ¼ æÌñÅܼóDެ¬RügrrÊùä“л2]½Ô!hÒëî™g6süx ï¼3»Ãº8¶‘œ\HXضm‹¤¶¶‰{îqgÁ‚aLžìÝ%ËcËËë®2œÍ¡ªª}}] ²RuTôõµÃÙÙLm“må‰ÇŽ¥pêTçÏ_¦¥E† S§fòdï-åÕvÞyg7žâ›odæLõc®F´n“'SY´h=kÖÌaÉ’ÑêGkÙ»7–çžÛ‘#/áädzËÿ'ZŽD"»"«ª‚âb¥ÑúßÙVU”•ý]"×£‡ÞUB••Õ,-`e5@%biB É¿!•Ê)(P–ŠÅeW-ssËU>Vºº:XXôÇÎÎX•ieg7;;¥`eff(”¡t0MMâãs[˳‰‰SRR‹¾¾.ƒÛàïŸ=X[©;Ü¡ªªÝ»£Ùµ+†èh1ææý™3Ç—yó‚Ôr1½kW4¯¾ºgg3¾ûîaìívz m¨KХرnÝ>ýô ³gûòÉ'ó;¼M{[yéo¿çÔ©4Œû0wn‹èÔRÏŽ@,.SyqÅÆæ˜˜Gs³”~ýz^åqçëkשâí•45I¸p!“#G’8t(¼¼Jìí2eŠ7“'{3l˜“Æø5vuÖ®ÝÏwßãë¯3{¶¯ºÃhE´nŸÏ??Ä—_þɾ}ÏjdÃmáÉ'!/¯‚ðð•·|œ-5¢P(()©!7·‚‚‚j •þUW––”ÔÒv¨Ö××ÅÜÜ++#¬­¯ª,-tHg´Ž¢¹YJVV)99åde•©–m%‚‰ CÃ^88˜àà0°U¬¨°¬­ºdöCW&7·‚èh1QQÊ[rr‰ sóþøùÙèD@€=ÞÞ6ݺd³¥EÊá×ع3Jå‹5uê`î¿?€Ñ£]ÕrÑÜØØÂë¯ïdÛ¶H–-Ëë¯ÏP{œ:­6NœHeÅŠ_±°0dÆ%8:ÞúìïÝŸ_ÉÖ­lÝzüüJüýX´h83gíò¾p œpIJ* .îïRÅŒŒbär––TâÖСö b«šK—ò9x0‘ÇIHÈÃȨ'bÊoî¹ÇCã<» Ÿ~z/¿ü“Ï?_À¼yêGà Aëö‘Éä,Z´±¸ŒÃ‡WahØKÝ!i%UU Œÿ?<Šçž›|Kÿ#ZˆD"SeSååU¨–ùù•­ó*U¢®®¦¦ÊŽyVVW—ÿµ WšêYu3ªª®«J¯Ê´**ªV½Î¢?ööqp0¹b©±ŒŒú¨ñh7--RâârˆŽÎV¸_™}åëk¿¿=ŽÝ6ûêJ ‘‘YìØž}ñÔÕ51r¤ óærß}ƒÕ*R¤¤òä“¿PZZË_,dÒ$/µÅr%š hR\ZºôG²²ÊX·îNíÂ&—+8s&M›ÎqèP"úúºÌšåË Ãßß¡Óâè jk›ˆÏ½¢³bÅÅÕèèˆpu5WÎûùÙãáa‰ž^ç ¿ùù•>œÈÁƒ‰œ?cǺ3y²“'{ ¾[·È—_þÉÇàÓOç³pápu‡#ðAëÎ(+«cÒ¤Oñõµ»#srö᯿’yôÑ8ðƒý{÷IAи ZÈË« 7·²U¤ªP U99”–Ö¨ÌÇ{öÔ¿ªKžµµòfggŒµµææý;u`ß^( «[Eª2ÄârÕR,.£¦¦Pf—µùW98 l«þ¯ºs&OW¢¶¶‰ÈÈ,""2¹p!“¸¸š›¥˜™õkõ½rÄÏO™m¡M¿™X\Æöí‘ìÞƒX\†§§%sç0w®¿ÚJ«®dÓ¦s¼ýö||løúëÅ%.jŠ Jöõ×w²eËžyf/½t_§gÒUU5°}{$[·^ 9¹3/IHˆ—ʰ½ŠŠª¯(UÌ&>>—ººfzöÔÇÛÛæŠL.;L:%¦ššFŽMæàÁŽK¡¾¾__{¦NõfÊ”Á]¾<´£øþûã¬Y³—÷ßü†4Aкs.\ÈäþûÿÕ«gòÄ÷¨;­åÅÃˆÍæàÁUÿZ…!Z7¡²²¾5«ªM¤*WeWååURYY¯zmÿþ½±¶€Ò€¼M´j[vå™_™LNnnbqYY¥ª²À¶L«6ö>}z`g7GG“k²­¬¬Œº¤`×Ý))©åÂ…Ë\¸ °RR ‘É丸˜äİaN9©ÕƒI]TU5°gO,;wF©|±fÏÊüùA·4kØÔÖ6ñòËÛØ·/Žgž™ÈªUS5n?Ó$A«­[/ðÚk; râÛoÂØX=Y qq9üöÛyöQÂäÉÞ,X0Œ{îqïÖ>Or¹‚ôôbU©bLL6))…H$2ŒûàçgÏСvøû;àëk¡aÇ6)‘Hdœ9“ΡC‰:”HQQ5žž–ÌšåËÌ™CoË ¸;³qãIÞ|s7ï¾̲eãÔŽÀ ­»ãë¯ÿâ“O°sçSÖ!WàæÔÕ53qâ'<òÈhž|òž›¾V´´¹\Aii 99WˆTÊû¹¹Êû -ª×››¶ŠSW‹UmWšÞðßP(äçW!—’™©®23•·œœrUi¤±qMpp0U‰UmW]Y´Ó²²J‰ˆÈâüùËDDd‘•UŠžž^^Ö91|¸3AAŽ Ø=3Eþ–)GŽ$±}{$G&£¯¯«òÅ3ÆM£D†øø\–/ÿ…††fÖ­[ÄØ±îêéºh¢ Dze?!“ÉùßÿaèP;µÅÒÔ$!<<–°°.\ÈÄ¢? 1o^`§e,©›¦& ‰‰yª2Åèh1¹¹ˆD"\\Ìðó³Ç×WÙ\ÂÍ͢Ä[…BAll{÷Ʋo_<……UxyY3{¶/³f ÅÎNûÄ}€Í›ÏñòËÛyýõé<õÔu‡#pAëîP(<ôÐÿHN.äðáÕ6á¡í9’ÄSOýÊ©S¯cfvãë AÐè¶( Š‹kÈÉ)';»œœœŠÖ’@eY`AA•J¤Ñ××Å¢¿J º2êM¸R·±r{QTTMVÖß‚•X\Fff)YY¥47+3­ {áìlŠƒƒ NN¦89™áà`‚³³©`”Ù…Éä$'ª2°""2))©¥gO}üüìUâ•¿¿C·0¨¾S ÑÑb¶obß¾8jj5Ê•¹s˜>ÝGã¾…BÁƧxÿý} î̺u‹n:ØS7š*h2 ÷é§7qæLï½7‡©î¸|¹„­[#ر#Š’’Fv%44ˆéӇУG÷8Ý*¥¥µÄÆf“Mt´XUªØ»·ª«¢²‹jÇtU”ËDEe±wo¿ÿOqq ¾¾vÌšåKp°¯F”waa¼ðÂV^xa «VMQw8ÿ‚ hÝ=UU Lžü)®®ælÚô¸à§¥&.üKË|þù‚¾F´º455Mäæþ-Xå䔵.•·•Âèakk¬ò«²±1ÆÚz@«peŒ¹¹¡Fe^Ü-eeuˆÅ¥\¾\ª*l¯êë›ey ““)ŽŽ&8:šâèhг³r)ÌFuMš›•îÊì«L"#³¨«kfÀ€Þ:2l˜²„ÐÇÇVè ‰R8ص+ú*_¬æÎ ÀÂB3/T++ëyá…­üõW«VMå™g&j|£M´@)Z|þù!¾øâ0óæòá‡ó4B8’Hd=šÌÖ­8r$‰~ýz2gŽ?¡¡ZÛV^&““ž^LLL6QQbâârHK+B.W`mm¤Êâò÷·gðàöí²*—+8þ2ûöÅKmm£F¹rÿýjoÑ‘ìÞÃÊ•›yúé ¼òÊ4u‡#p ‚Vû“Íœ9_±jÕTV®œ¨îp´’ŒŒ&Nü„ðð• rýóž h h4‰ŒüüÊVÁªü ±Jy¿ÍÃJ$annˆÝ@ìíbggŒÝÀÖ›1ý»ÝìJ[÷À+KÛÄ«6#ö=ôpr2S‰VNNÊRAgg3Îè¸5jjšˆˆÈT¸ÇÇçÒÒ"ÅÊj€ÊûjØ0'ÜÝ-ºÝö§”–ÖË®]ÑÄÅå`nÞŸà`_æÎ ÀÛÛZÝáÝ”èèlž|òg¾þz1Æ9©9¢[CÓ­6ŽIâ™g6ckkÄÆbkk¬îTW³cG¿ýv¬¬R||l dÎ è­îðÔJ]]3qqÙDG+»*ÆÄˆ)+«C__OO+üýíUBW{yaµ‰»vEsèP"zz:L:˜¹s;V³J“ï†ýûãY¾ü–.ËÛoÏVw8·ˆ hµ6œäÝwÃÙ¶m#F8«;­äÝwÃ[3eŸ½îXV´ÔNqq ¹¹JªM¸ÊÍUÞ/*ªF&“`hØó*‘ÊÎÎä áʸ۔^‰D"#'§œôôb._.áòåRÒÓ‹ÉÊ*¥¢B)æéëëâà`¢Ê°j»ïädŠ¥e÷ò´™ââêVóv¥Vjj! ¸¸˜©²¯† sÆÆFs:ÜiõõÍ<˜À®]Ñœ<™FïÞL›æCHˆ?#GºhüŧB¡àÿ;ÉÚµû7Î/¿|#£®“EÙU-€ììr{슊ªù=ÚMÝ!]…B¡àÂ…LÂÂ"Ø¿?‰DÆ”)ÞÌŸÄøñŸ­×Ydg—«Jcb²IĻ¥EÊ€½ñ÷WŠ[~~ÊÛÝ–Ñ×Ô4±;vD‘‰‰I_‚ƒýX¼xd—î”xèP"?þ=4Š5k‚…±DB´Ú…BÁ²e?-æðá¯X5 ´øï¾LHˆÿ5Ï ‚–€€@‡SW×|CÁ*'§œ¦&  f¬­°·o˲ˆ­­±ê~wž…®¬¬çòå22”·Ë—KHO/&7·‰D†H$ÂÊjÎÎf8;›áâb¦*´¶6Òø r;£¬¬Žsç28s&³g3ÈÈ(AOO[>Ü™À@G¡Dô:H$2NžLc×®(JD"‘qÏ=ÌëÏäÉÞíZŠÔ‘ÔÔ4òÜs[8r䯼2+îír–]IÐhhhaÕª­üþ{<«WÏâñÇ5³›[}}3û÷dziÓ9¢£ÅX[1~ VÉß*--Rò¯¹rrÊU†ó¾¾v*ÃywwË;6œÏϯdÛ¶H¶oD,.ÃßßÐÐ fÏöíRcŽMfÉ’ÌŸÄÇÏërÇmG´Ú—šš&¦Lù[ÛlÙò„0æV7žäûïsæÌ×Xf‚–€€À]£P((,T‹Å¥*áªMÄ*/¯S½ÖÜÜ[[eFÕ?E+ ‹þÝú$!•ÊÉÍ-'#C)Vef–¶ XŪl«^½ pvVš°»ºšáâb޳³R¼êÝÛ@ÍŸ@ £©®nàìÙËœ=«±RS‹ÐÕ1dˆ#Gº0z´+þþ¶p¢£³Ùµ+š}ûb)/¯ÇßßfÏÚ¥²š@ÙÅð‰'~¦¥EÊ·ß>ÔeJ ÿIW´@y^ûöÛc|ðÁïûñÉ'ó5ZÍÈ(!,ìo#ùaÜ bÖ¬¡ôê%/®GYY11bUGŸ¸•á¼-~~JÃy__»ÛöÔkˤ۲åûöÅ¡««ÃŒC bØ0'ˆNJãá‡70{¶/Ÿ¾@£c¸>‚ Õþ$$ä1sæ—¬Xq//¿|ŸºÃÑ:šš$®aõꙄ†]õœ h Ü2™œüüJÄâ²VáJyËÎ.¿ª;^Ÿ>=T%€×˲Òä ‚ö¢ººAU¨,Tf]‰Åeª®Š––Z3­LU¢•³³ÖÖ„Á£Q[ÛÄùó—9w.ƒÓ§ÓIJ*@$áåeͨQ.ŒéʰaNôíÛ=͆ۋ¬¬RvíŠfçÎhÄâ2\\Ì ñgÎìíª;¼;âçŸÏðöÛ{1™¯¿^ÌÀ}ÕÒÓ­6ŽOaÅŠ_±µ5æ‡ÅÚZ³Ëye29ǧ²iÓYŽM¦W/}fÍò%44u‡§ÑÈå ÒÒŠˆUúqÅÄd“ž^ŒL&ÇÒr@«—²£¢í-gjjšØ»7–°°¢£Å8:šòàƒ#Y° Hã2ÏÏ»ÌâÅë™2Å›¯¾ZÔ­'»3‚ Õ1üúëY^{m›6=Î=÷x¨;­cݺ#lßɉ¯^U^/Z*¤R9yyW‰Vm&ã99å*1ÆÐ°ŽŽ&*¯&œœL°·7ÑšÚr™LNnn…J¸ÊÌü»L°¬L™‘Ö£‡žJ¨rv6ÃÕÕ\•}%ÚICC ‘‘Yœ>ιs\¼˜‹L¦ÀÃÃ’Q£\5Ê•#œïÚÓE(+«cï^¥¹{LL6ææ†ÌžíKHˆ—îW_ßÌ+¯lgÏžž}v«VMíò¾H]YЋËxì±()©eýúGºŒ1pYY»vEvääB\\Ì bþü ­9Wß-JÃùU™bll6¥¥µèéé0h5~~v­"—=ŽŽ&ÿ:!•œ\Èo¿gûöZZdÌœ9”‡…ŸŸ}'}¢•ÅÂ…ß3~¼ß~û fuaA«ãxê©_9y2?ÿ|Qc»!wWjj \ÃgŸ-`ÆŒ!ªÇAK@@Ëh3ÏÎ.G,.#3³T%`ååU¨D«z_%Z)ï+—Úä×#‘ÈÈÊ*%5µˆôôbÒÒŠU™W--ʬ4ssC\\Ì®ð·R W66Æ]þBTàîhn–%æìÙtÎœÉ 66‰D†››#G:3r¤+#GºhÕ>u744´pð`»wGsâD*=zè«ÌÝGvíò`))…<þøOTV6ðõ׋7Î]Ý!µ ]]Ð¥Ðøüó[8x0wÞ æÑGǨ;¤Û">>—͛ϱwo,î½×“ †qï½ž×ø‘ÜœœœòVqKÙQ1!áoÃù¶nŠJÃy;ú÷¿~VCC áá1üüóY.^ÌÅÛÛšGMp°ŸZJÊãârX°à[†wáÿ{DØ&º8‚ ÕqÔ×7sß}ŸclÜ—;žºc¿=;cíÚýœ<™Ê¡C«T ‚–€@7¤¥Eª*ü;ÓJ¹ÌϯTu 41鋃ƒ©*»ÊÁ¡MÀ2Ѹ4øŽ¦¥Eªò³JM-"-­˜´´"U™ ®®¶¶Æ¸»[àæf««y«1»††]ÇèU c‘HdÄÆfsæŒÒ+:ZLs³FreÔ(FŒpÁÜÜPÝ¡vd2y«¹{4&ÐÒ"eÜ8wBBü™:up·)c ‹àõ×wâãc÷ß>Ô­f~»ƒ J_¤¯¿þ‹>úƒûïà£æÓ£G×ê®ÛÔ$á?.Á™3é÷!$Ä¿ËwäS'‰Œ„„AÐè,¤R9¹¹å­>M VééÅ”—+»â´uÅ3½Â`\ði¥jZZÉɤ¦‘œ¬Ì¸**ª wo\\ÌqsS W®®ÊÌ+[[ã.o-йÔ×7söl†JÄJO/¦gO}† sbÌ7ÆsgÐ +!ká.hj’pèP"»vEsüx zL™âMHˆ?ãÆ¹wë}¶¥EÊ»ïîåÇO±dÉÞ~{V·/g(³6¿øâO>ûì ç?ÿ™Ûm.j’“ »À®]ÑTTÔ3j”+‹`êTïn¿Íª‹ÜÜ U©bLL6 y´´H14ì…±qoŠ‹kË!44ˆ•+'beuûå®99åÌ™ó5ææ†lݺ\ëÇ—ÝAÐê<._.á¾û>gþü Þ?DÝáh ßœ Nñ¦ h ´7••õ*¡êòee¶UFF1ÙÙåªl+sóþ¸ºšáädªêŠçädŠ­­ÐO&“#—‘œ\¨¯’’ ÈÉ)G.WЫ—îîxxXââb†››îîØØ ƒÀ!“ɉÏåÄ eVt´™LΠAVŒëθqî9iu&d{ ‘È8u*={b8x0ÆF‰ÊÜ}Êo­ÈÈÉ)ç‰'~&3³”O? eæÌ¡ê©Sè΂V‡'òôÓ›ðò²fÆ%ÝÊçM"‘qð`Û¶Epüx*ýúõdÎBCññ±UwxÝš6Ãye©¢˜˜¥á<ˆ‰ÀÞÞ˜9s˜>Ýww‹ ((¨"$äkúõëÉŽ+nØ…Q k#ZKxx,Ë—ÿÂúõ0cÆu‡£T¸†ððgAK@àNHdä䔫2­._.%#£˜Ë—K¨¨¨ gO}œœLUV®®æ*«oßîáv+×’RHRRiiEªes³]]Lðô´ÄÃCy4HY*¨í¢ŸÀÝ#—qòd§N¥qút:ÕÕ XY P X£G»v« Ru¡P(ˆˆÈbÏžöí‹£²²??{æÌQš»›˜hÏw|øp"+Wþ†­­1ë×?Œ££©ºCê4´AÐeç«%K6"—+øé§Çðô´RwHíNqq5;vDAFF žž–,Z4‚­ëެ.ÊË눈È",,‚Ó§Óhhh W/} pÀ×WÙUñÊߤ¨¨š¯éÕKŸmÛVç¸nŒ hu>¯½¶ƒÝ»£9xpU·ôüÔDfÍZÇС¶‚ % p3**êÉÈ(&#CY¨,T‹·e[YY ÀÉÉ S\\”¦âNN¦BÆÐÔ×7“’RDJJÉÉ…¤¦’”THe¥Rü377ÄÝÝ//+ÜÜ,ðô´ÄÝÝRȈh7[8{ö2G&sìX2bq}ûö`äHWÆscÌwÁ«¹t)ŸÝ»c%?¿K‚ƒýöíÖ^Q×C*•óÑGðÍ7G âƒî׺c›¶Z 7<þøOÄÇçòÕW‹˜:u°ºCê .dÁþýñH$2¦Lñfþü î¹§{— k …‚ƒù쳃$%`nnˆ®®UˆD"\\Ìð÷wÀÝÝ‚~8EzìÚõŒVM&h#‚ Õù´´H™9óK ûö=§uçyuðÝwÇÙ¸ñ¤ h ( rs+HK+&-­ˆôôbUæUUU ôgrr2mÍ´2Sù[99™jE™Ì­"•ÊÉÌ,!%Eéu•’RHJJ!99( úô采Vªå A–wmn* p=22JTÖùó—ii‘áåeÅøñžŒïA@€£Ð iëP¸gO ééÅØÚ3gŽÁÁ~xxXª;<µPTTÍòå¿pñbÿùÏ\BCƒÔ’ZÐ&A ”YÜo½µ›_~9ËK/MåÙg'uë ®úúföï',,‚óç/cnÞŸ… ‡1~ ©Ð‰œ=›Á§ŸäüùË îÌ„ žÔÕ)=!££ÅÈå úõëA@€#~~öøù);+ ZÝAÐRÙÙåL™ò)3gúòÉ'ó¯yþôé4FvSCdÝ“ÔÔ"ÆÿH´´‡ WiiE¤¦*¬¶tm ‹þ¸¹Y¨Ìؕ傦XY èÖƒÑ;¡°°êá*5µ‰D†žžNNf­¢•%žžVxxXbgg,|F}}3§O§sìX2ÇŽ¥›[±qFvcüxÆ÷Ä̬ŸºÃìVW³wo{öÄ›ƒ©i?fÎJp°/þþZ½¿Ÿ8‘ÊÓOoÂȨ7ë×?¢5¢Þ† 'yë­Ý·ôÚ5kæ°téØŽH}üüóÞzk7÷Ý7˜ÿþw!½z¨;¤'#£„°°v숢¤¤†aÜ bÆŒ!Â`²~ý f΂¥å€«„­#œ)*ªF*Uðá‡sÉή :ZLTTÙÙåèèˆps³ÀÏOY¢èï‹™V»»ÅÅÕøú¾sK¯ rbÏžg:6 -çÀ–.ý‘uë`îÜ@Y%°bů:”Hl컘›ª9ÊîC`àAÐè~( rr*HO/&5µ°uy­påîn¡2ws3ÇÍÍR˜¥ºR©œŒŒb.]ÊçÒ¥| HLÌSe¯YZÀÝÝ‚Aƒ¬T^WnnæB$G¡PpéRÇŽ%süx QQÊè¡Cí¸÷^e–­à¹ÖÎTW7ðÇÙµ+šsç.Ó·oî»Ï‡à`?FvÕŠR£ß~;O@€nn×<'“ÉùüóC|ùåŸûñÑGó´êB¾¤¤–¡Cߺ¥×ÆÅ­éö"ó™3<þøOØØñÓOaiymWº´´"¢¢Ä<ðÀp5DØ1ÈdrŽOeÛ¶LÀÀ@à`?,ÂßßAÝáu+JKk2D¹ÏEG¿­ÚÆŽIbÅŠ_©«k"0Б·Þš¿¿½êÿJJj‰‹Ë&2R)pÅÇçÒÔ$aÀ€ÞøûÛãëkO` #¾¾ö‚÷«†3|øûää”ÿëë>øà~~xT'D¤Ý¼ûn8¿þz–^@&“³lÙOde•!—Ëùè£y<øàHu‡ØmXµ*L´º.×®RRŠÈÈø[¸²´€››ùUâ•««… \Ý€úúf’“ HL,h¯òHI)¤¹Yо¾.–xyYãím§§²\Pè#ЙÔ×7sâD*G&säÈ%JJj13ë§*#;Ö]0&î[8|ø»wÇpüx ::"&LÄœ9~L˜0H«¼"Äâ2FŽ\ ÀåË]•uS^^Çòå¿™É{ï…°xñu…©Vî¿ÿΟÏ@.¿þSGGÄðá.ìØ±¢“#SbqK–l¤²²ž½JÐillÁÙùΞ}£[–è••Õ±kW4aaHN.ÄÅÅŒÐÐ î¿?sóþê¯Ë³ví~þïÿŽ¢§§ƒ¹¹!{÷®¤_¿^<ðÀ÷äåU°zõL~ýõ,YLêÍ«¯NÇÕÕüšõH$2.]Ê'&&›¨(1‘‘YäçW¢««ƒ»{[—ÒtÞÉI{šZt6m:Çk¯í@&“ßð5ºº"âãßÃØX°ùèh$!!_“—WIee=r¹©TŽŽŽˆQ£\ [®î» aa‚ % ùÈåm¥‚E*« WVVpu„«Û¡¨¨šÄÄü+2¯òÉÉ)G.W`hØ ook¼¼¬U–««9úúºê[@ ‹ËøóÏKüõW2çÎ)/’ýý˜0Á“ñã=ñò²Ê#þ…ï¿?ÎâÅ#n+SH"‘qâD*{öÄpèP"MMÆŒqcÎ?¦NL¿~Úw|•ËELL"‘ˆ9süY·n.d²|ù/è±~ýÃøøØª9ZõÁªU[o*h}öÙ­ò««kæ©§~åĉT>ùd>óæ°råfvïŽF¡PàççÈž=Ïtë¬Ò‹s ‹dçÎHêë[˜0a ãÞ{=oyŒQ_ß̦Mçxâ‰{:6Ø.@uu~~ïÐØ(@OO3³~XXô''§œ]»žQ5<9r$‰>ØOzz1óçñâ‹S±°¸¹ X\\MLL‘‘™DEesñb.--R싯¯þþ:2t¨½{wÿ’ZM¥ªªÁƒß¼¡ ¥££ÃèÑ.lÝ*)Acc +Wnæ÷߀«Ïƒºº:\º´V¸Fm'23KAK@sø§p•–¦,¼žpåáaÙ*`)—ÂAáÆÈdr23KU¢U›ˆU^^€ƒY_!`Yi]2ÍB"‘qáB&GŽ\âÈ‘$23K0 7ãÇ{0q¢ãÇ{YX·ˆB¡`íÚý|óÍÑ[ò+’Ë•ËÂÃcØ·/žªªöcæÌ¡ZßkÆ“¼óΕP#‰øüó”•ÕòÑG0q¢_|±CÃ^jŽT½ÔÔ4âíý&R©ìºÏëéé’˜øžÖ}Or¹‚>øo¾9Ê“OÞƒ«««Vm¥m(®£#âw‚»µ¯XMMþøã"aaœ9“ޱqBBü †§çÍýæÚ|ÚV¬¸—7Þ˜¡ÕŸ}vˆ/¾ø™ìï}MOO…BÁo¿=Á˜1WPËå vîŒâãP^^Çcå™g&Üò¾(‘ÈHHÈkõáRfqU£§§ƒ‡‡¥Ê‡+ À{{a,Ù™<øàÿ8~<庢–H$âË/àþûÔ™v‘’RÈÒ¥?’“SqÝs ŽŽò·hó׸{AK Óù§p•šª¯®®¬­pq1„«Û¤±±…ääB•xuéR>ÉÉ…46¶ ¯¯‹««ù5™WÚvA! ™””ÔrìX2GŽ$qòd*µµMxzZ2q¢&xâïï ÞLí‰L&çõ×w°yóyärÖÖF\¸ðæu³?óÙ½;š={b),¬ÂÓÓŠà`_æÌñÇÆÆH ÑkYY¥Œÿ1--RÕc"‘"¬^=‹eËÆjõÅõ•,Y²‘#G’®¹¸ÒÕÕaâÄAüøãcjŠLýìÞÃóÏÿ†L¦@.WpåPÜÀ@cÇ^ÆÑQ{Jºòó+Ù¶-’ß~;O~~%~~ö,X0ŒY³|¯÷Éå † {üüJttD,Z4œÿüç~­Û‰D|ñÅB•Ù·<óÌ&ÂÃãTƒz==]fÏÊW_-VsdêcûöHž{nËMgïôõu9vìáHN.$,ìaa‘TW__ÀÑÕÕ%0Ð_~Y¦eU?þxš7ßÜ\~ã®vzzºH¥2/ÁªUSn©£äÙ³¼óÎRR yøáѼôÒÔ±¦¨ªj *JLDD&‘‘YÄÇçÒÔ$aàÀ¾­FóJ.__; ´C¤lŽI⡇6p¥yïÞ=HJz_ø;‘ŠŠz^{mû÷Ç\s¼×ÓÓ%$Ä/¾x@áu;A«›pà@=öÿm—uÖÔ4¶ VùªŒ«””"ê뛉DØÙãᡬ<<,4È GGáâè6¨¯o&!!¯5û*—¸¸\Äâ2 ææý2ÄVuóñ±ÕzCf®A~~%‡_âСDÎË`ĦNÌäÉ^XYÝx–XàΩªj 4ô[RR HnT‚¢ônذAðn¸d293f|É¥Kù7œiý''N¼Š««yGÖ58v,…E‹Öó÷Å•ˆÍ›¿ë’¦®Jzz1ãÆ}xK¯ÕÓÓÅËËšýûŸÆU­,[ö#‡%ÞЛF__+–wëR6‰DF`àJKk¸ÞUœ®®=zè±téX–-wÛŸr¹‚mÛ"xÿý}¼öÚtx`x‡fþ_i6áB&QQY””Ôb` ‡-ö:àÐî“äuuÍÝF•Hdxy­Vùªéëë2wn ŸªæÈ´“ýûãyùå0êêZ®CôíÛ“¤¤µèé Ç÷»E´º8%¼ñÆNNŸNo=©)HOÿð¶Z³ää”séRII$%åséR*+¨ÿÞ d©¯<=­pw·è6ÿÑØØÂ[oíaÊo&Nt×ëkj’péR¾*ë*>>—ŒŒbär&&}U¢ÕÐ¡Ê ¬[™IÐ.]ÊçàÁDN$!!CÞŒïÉÔ©ƒ?ÞS(/î`JJj™7ïkÄⲊYmèêŠ8þMÁ£ìøöÛc¼ÿþ¾fÓèêŠP(”å~~ÌžíËôéC077ìäH5©TŽÏjªª0 /¾¯µøââ~ÿ=žððXbbĪmG&»þö%‰X½z&Ë—ïäH5üüJ†ï†ßUúú:88˜°}ûÓ˜™uÏꀭ[/°jUØUÇ¥¶½{÷`ùò{xôÑ1wYUSÓÈgŸâÇOáëkχÎû×”íIvv9QQJ³ù 2IK+B.WàädJ@€2ƒ+ À77‹»ò››<ùS<<¬xÿý9Ý¢QÒK/mcÛ¶UVñ¶m+=ÚUÍQi/eeu¼öÚ•/à•û­ðÛ´‚ ÕE©¯oæóϱ~ý D"®š­Úµëi†w¾îÿµ´HIM-R™‰''péR55ˆD"ìíâímÍ AV*Sqm¼èIN.`Ù²ŸÈÌ,%44ˆÿþwámý¿D"S‰Wm¾WééEH¥rú÷ïÍСJñª-ûJ¿c®\® 22‹?þ¸ÈÉË«ÄÚڈɓ½™:Õ›áõΠW]äæV0wîÿQTT}KYDúúº,]:–7ßœÕ Ñu]22J˜0áãkJ õôtÉèë+}{¦MÂäÉ^õQS¤šÍoìbÓ¦³,^<’µkCÔ‘fPYYÏá×øãxNœHE"‘£«+º&ûH__—¿þz35Eª¼÷Þ^6l8ù¯¥¿ Ìn³°èÏÎOakkÜ Ñu2™œ#Ö’Ÿ_‰B¡@$RŠYFF½yúé‰,^<â¶'µÿK—òyùåm$$äñøã÷ð SèÝ»ó`ÔÔ4­4™ˆÈ"&FLCC ýû÷&0СµTÑ‘¡Cín9>©TŽÝ* {ñÖ[³X°`X—nÈpîÜeæÎý#£Þ\¼øžå©ìÝÇË/o£¡¡©T޾¾®pNl'A«‹¡P(ؽ;†·ßÞMUUÓ5)úúº¼ñÆL|œª ^[æÕ¥Kùdd#•ÊéÕËww‹+ŒÄ•žWýúiw…B¡à§ŸÎðÎ;{ËÈdrŒû’°æ†©Ö‰Œ´´¢«2¯’“ Hdôëוxåãc‹ƒƒI'*öA*•sî\¿ÿÏÁƒ ””ÔâéiÅ´iƒ™<Ù›ÁƒmÔ¢Ö‘‘QÂܹ_SYYÃ2œ+‰P•¨ÜI6¯¶ “É™6í¿$$äÊs«D"£wïL™âÅ´i>Œï©–‹º®FDD&ÁÁ_°gÏ39©9"Í£¡¡…cÇ’ùã‹:t‰††fÕ60x° üñ¼Ö^”Ö×7ãêú*põ1ìfèéé`dÔ‡;ŸîVbàîÝ1<õÔ¯ˆD"D"033dåÊI,\8¬C ñår¿þz–>øCÞ¬];—I“¼:ìýn©TNRR>QQbUWaazz: l£Êà tÄÂâúUÉÉ…L˜ð1€Jôô´âÃçuÙF)r¹_ß·)-­eéÒ±¬Y3GÝ! ´RZZËË/oãðáK( úôéAZÚB#¯»¤Ó­ùóçwÆÛt;FÍÊ•+HLÌçÕWw+®ßTWWgg3jj)*ªÀ̬^^Ö d——2ëÊÉɔª««;ñÓh^^מ„++ëY¹ò7ŽK¾¦“Õ¡C«Tëååu9’Ä™3éde•’˜˜Os³”Þ½ ðö¶¹Ê÷ÊÑÑ´KÏò´´H9y2ßçðáKTU50dˆ-Ó§û0}úÛh«««ÉËËëÀhµ‹ŒŒr–/ß (KßD¢k³;D"††=12êÃÀ}133ÄØ¸ææ†Ìë£ã­NŸ>}šuëÖµëgÐT²² ÉÏW–+éëË11idàÀ& ›Ð¹CMáÊóy{ÒÆW§O[0zt¾š#¹5V®\ÉèÑ£Ûu·zü“JåÄÇrút§N‰©®VzáÌŸïòeAí“&Ñ¿ll®?)’•UÊÎÑ×PQQOII ååuTVÖSSÓtÍxX__…B¡:úú–Ò§OËõVÝåhÛ—zö”bgW‡‰Iý“nÄͶÿ’’ZÞ}w»wÇ0mšk׆h”EF~~%‘‘Y*‘+))©TŽ>>¶øùÙ3~¼§ªt2,,‚U«¶^5îoËÂ7/7Þ˜qg׺uë8}út§~®Û%)i =2¤”~ý4{Ûïˆãmšz~,-íEjª2{´+üFÍÝŽ:­ÝÁöíÛ˜7o^g½e—gûöíèëëSUÕÀGýÁ¯¿žEGG¤òʺ2™œòòZ–/¿ook<<¬nè!P[[Kii)¦¦ÚÓA§´´ôºŸ9“Áòå?SUÕx˜¥¯¯ËÎQüõW'O¦™EÏžú­Wv,^<’¡Cípq1ÓÚÙSîEcc G*³ŽI¢¾¾ž{nÓ¦ùÜq‰lSS“Ös:Š’’:~û-›þxy™cnÞ]]ô`̘ Œû`lÜcã>í&ªçää°}ûönohЧ²²'6acSKß¾-ÜíäiÛù¼#è ã+›Zu‡pËlß¾àààv_ï­ÿôôtð÷·ÆßßšgžEJJ Û¶%‘ˤI®88t?‹‚ÒÒRtn¢Ê8:šòâ‹S¯ûœ\® ¢¢žŠŠºÖe=%%µTTÔ‘—WɦM9w®š1cúңǭ5vÐTÊË{Ñ»·KËz,,êîú¸t=þmû73ëÇÿý߃„†ñê«;7îC^}&>8B#²L¬­°¶6"8ØP¾ÇÆf«:)þðÃ)Þ&LžìEnn%zz:´´ü½m´ ¡»wG³<¯¼rK–ŒQyÿ]¸pAãÏ…vv544èi¼PÒQÇÛ+ךw~45m¤ÿBRRŒ)/ï©ñ¿SGÒã£Níß¹yófx@hOy«<ðÀ" z1|øû46¶ —+®[®GEE?<ê–JIÌÍÍñôÉ$à IDATôlp»ÅÅÅ$''«þ–Jå|öÙAÖ­;‚H$ºnûc©TÎï¿Çc` ÏÈ‘.¬Xq/cƸuhj·€@gS[ÛÄ‘#IüñÇEŽM¦¥Eʈμúêt¦MÜ®3°×˸=¼¼`üøaW=Öv|»‘‡b{±mÛ¶]¿º©­mj÷òûE‹µëúþ‰¦¯’“ :ÕPúNéè‹òÛ=þ  óæÝ t̶© \9.»]ttD˜˜ô½aèÿþw¡Æï·ŠX\†½ýÀÝFouÝcǺsôèË|úéAV¯ÞÉ®]Ñ|öY(ÎΚUÞÙ·oÆŒqcÌ7Õc‰‰ù:”ÀÑ£Édg—_%f]‰D"C"‘ñÎ;áüüó>þx>#GºðÀ°yóæNù wÊÎQÌ î0nJgˆ š¾ÿGG‹ñ÷wPwj£=ÆG¹†MT”uuú@ãmÍÂ( ò:ü¢¦«“›[ÁãÿLbb …â†]¬ ÕÄļ­QiÕwK}}3þy‰ððXŽKA¡P0fŒï½7‡©Scl,˜\ hÝQ0P7]AÈê Û¦v£i¬={ê³zõL‚ƒýxñÅ0&Lø„gŸÄÓOOÐè¦0ÞÞÖx{[óÜs“qv~å__¯P(ÈÉ)çþûÿ3†ÒÔ¤CÏžÿîY©n4]ÌP¢ÍbV{!ZŠ™Y?\\ê©©ÑgÒ¤édf–rùr ¹¹*“P]]tuuJe×dn]¼(Z7cïÞX^x! ‰D‚Löï'%ý•Ì ï„è:ަ& G&³wo,þ™„T*ãž{<øì³P&Mòê-«:ooköïŽ NòÉ'Ø·/ŽO> ÕxSõ´´bZZ¤·ôÚ¶2Äýû㜜êii‘b` \J ¨a/ÔPlm12jÁȨ…·ßž­z\¡PPXXMVVbq)ÙÙåde•’–VLnnMMbb²ÕºFÓØ(áå—‘—Ws[ÿ§PÀAK K"‘È8~<…}ûâ8t(‘††ÆŒqcíÚî»o0ýû÷Vwˆ]==ž|òî»o0¯¼²ààu<ùäx^ziªÆŠ> yèèè\×nPe™µ%ˆD" èEeeMMº9’Ä´i>¯€€ÀõÑÌ#ŒÀ ‰DXY ÀÊj£F¹\ó|II-bq)õõÚk.w#²²JYºtó¿ŠYºº:ˆD"ttD­í¡´´Èøë¯dšš$ôìÙ1ƾí‰L&çÌ™tÂÃã8pà"55 îÌë¯Ï`ÆŒ! x}¿;ÁÞ~ [¶<ÁæÍçY³&œ¿þJbݺEx{[«;´kˆŽ#—ËÑÓÓE*m«~anÞ''3œMqp0ÁÑÑGGSìíb` §òüÄ,Í@´ºffýnØÕPÛqt4å·ß!99?¿á45Ihll¡¦¦‘¦& MMªªT÷kjilTÞ/-­¥¹YJNN9nnêþ(×E.W‘ÉÞ½±üþûEÊÊêðó³ã…¦0cÆ,,8ŽC$±xñÆŽuãùç·0}úyþùÉ<ýôDU§@MÀظK–ŒÆÙÙL%\ÙØk´ÿ—€€ÀµhÎQå 222øé§Ÿ:ô=jkkùðï¹ß^Ô××óŸÿü§]שn*++ùøãÕF»`hØ3³~ØÛdð`3Æ™3‡2o^ >8’§žšÀ‹/Neõê™|ùå|÷ÝC‚˜% ‘$'²ví~‚‚Öò5QQbžxâΟ_;}ϱtéØ.)fµ×¹àfëiãvv6ëׯ¿«u@÷:otÆy¼½ÈÍÍ¥´´ôºÏu§ßDS'""¢CÆÝå÷jÏý'??Ÿ?üÄÄÄ;^GÛoöOºË÷݆¦}ï·ƒ&þvvÙ¾ý)V¯žÉºuG^GFF‰ºÃRñÊ+ÓX»v.>:†{ïõÄÑÑ´CÄ,M<ÞhŸþ'7ÛŽ5q›»:[è:â¼z³˜5eÐHA+%%…ï¾û®CߣººšwÞyçšûíEmm-o½õV»®SÝTWW³qãFÕßK—.%++«Ýß§£Ö+ Ð(.®æûï3iÒ§L˜ð1¿ÿÏÂ…Ã9}úu~‘+îÅÖÖXÝaÞíu.¸ÙzÚãøŸ••źuëîjнÎqoÊËË>|8ááá×}¾;ý&šÂöíÛ9{öì5cŠö »ü^í¹ÿ<ôÐCÄÅÅ¡§wçEm¿Ù?é.ßwšö½ßšú[èèˆX¶l‡¿ˆL&gòäOٴ霺ÃêT4ñ|x£}úŸÜl;ÖÔmîNélý¡£ÖßÞç՛Ŭ)Û€F Zš‰ƒƒ©©©ª¿~üˆ3fÀÛÛ“'O†››€ò¡D¸{÷. ==DNNN•û¬*Ò°½¿ÆvONN†¡¡áë™8q""##ëtÞUFœ÷EÆ °fnÞ\Œ'OÞÁÔô@½™•]ÇU]Ž#~çtUmÂÏÇqUÄù˜«)QçøµmüÚÕªTÖ®V'æÐÐP,]º+V¬€¢¢":vìˆC‡U{»1~ @œ«õ·DFF†¬ZµŠÐÐPÒ¢E âââBÒÓÓIƒ ȦM›Ç#§N"Èž={Ç#ûöí#½{÷&„Âf³‰¼¼"yy…L‡Vk5=ÿÕð[Ž ®ÿÁÁÁDUU•ðx<²hÑ"¢¯¯Oòóó !„øúú’Î;“·oß6›M¬­­ÉÂ… +ý¾um7„}}svv&Õ½mÔ¾ã·ýøýŽ_›D!/_¾$=zô _¾|!úúúäìÙ³•~A´å„·=¯Éý¿í’žžN5jTñ]ß½{GZ¶lIüüüøÿüΛèèh"//OîܹCŠŠŠÈáÇ røðáî)ø­ûŸþ!Íš5#îî¨ˆìÚµ‹ÈÊÊ’+W®üçû bÕd{ÖDMÎOA?¹¹¹¤GÄ××—“Õ«W“Y³fBÊÏgyyy2sæLB!W¯^%êêê|÷ÙÏu~Ôô~´&˜xþøy»'&&’6mÚü°.uuuâïï_ëóîg‚ÚÂ:þ–•õL™r†üþ»=9y2°Òï$®jz=ÔqUÛãˆß9ͯMøù8þ™8_ok³|QçøµmüÚU~~nWkrŸÜ°aCbggG HXXiÑ¢ñòòú!柉K¾ClZ­Zµ"¥¥¥?Û°a3fLņûþ°ðæÍÒ°aCÂáp!„<þœtèÐBHqq1‰ŠŠªXÆ÷òöíÛ*ZgΜ!zzz?ÄckkK¶nÝJ8@¬¬¬*~^ZZJöìÙC þó¾Ç™™™Yñ3mmmâêêZ­m@ˆx'´!¤K—.äÅ‹„BnܸA ôÃß/_¾œØÙÙ‘””€¤¥¥Bøï—Ÿ—Ëoü¼Üê  -Jœ}ùò88< FF{I§NvDWw9rĤ¤d3š@Ô&¡%ˆ¶€ßrqý&***dÑ¢E¤mÛ¶1Bˆ››éܹ3‰‹‹#„”'rrr*ý¾um7Ä-¡%ˆ}Çoûñû¿6©°° 0€øùùBHµZuiË Ÿ„¿íòý»~úô©âwzzzÄÅÅ…ïñÏï¼Y³f ™}PÞ…ü;KKKØÚÚB[[ݺuÊ+““Så÷•¦vCûŽßöã÷;~mÒŽ;йsg4iÒaaaÈËËCRR^¾|Yé÷¦}ò«¶:uêTñßß¿+¿ãŸßy“––UUÕ~§¢¢Re|ÕY·ŒŒ zöìYå2¤e êÚ÷¿ttt——‡7oÞ $$Ë—/Ç·oßœœŒ   XXXÔxŸIËöþNÛ½:jzÞUFÒö…ŒŒ -2ÄÝ»Ëðòe*,,ãíÛ ¦Ã QW•GüÎéê´ üHÚ1÷+¢Ì?ðkÛ~õü[Õ=¶zöì‰FýðÝ?~üøËå3} ¼~.¾5´~.Òš™™‰Ö­k6c—››6lØ€7âÍ›7xúôi•ÀwŠŠŠÿY÷ׯ_Ñ¢E 4oÞü?'øÝ»wis”o7]]]$''ÿðïôéÓ~<¸k²_øíŸ—KQ’$99 û÷û`Èm˜9ó,rs qøðd¼x±;wŽ…ºzW¦C ‚h ª»œº\ÿ»wïŽÛ·oãÀX¹reÅßBpðàA|ýú...(..Ƹqãj¿$ľã·ýøýŽ_›$++‹¬¬,ØÙÙÁÎÎIII¸qãŽ=*˜/.Æ~ÕVW…ßñÏï¼iÕª233ø]M‹ð7oÞ_¿~ýágü’ÂÒBP×¾ÿ%''\»v èÓ§ pùòe°Ùl >\ ûL’ c»W¦  à—S_ž;45»Á××­[+ÀÒòüýã™Ià„u\Uç8âwN×¶MV¢Ì?ðkÛ~õü+ ?¯ïË—/hÞ¼¹ÐÖ'(‘‘ïÅ7¡•œœ OOOåSB:88ÀÜܼFËHMM…ŠŠ tuu!++‹ˆˆ°Ùl¾Ÿa±Xð÷÷Ç»wï”W»sçLLLÀb±àîî^qQˆŒŒÄ´iÓ ++  üŽ‹‹«éW• &&& Ebb" °°šššpuuýÏßÖd¿ðÛ%iŠ‹9¸{7 ãǟĈ»pëÖSLž< aaëqóæ"Œ«‰Æå~½ zDmAu—S—ë¿‚‚6lˆ™3g¢_¿~øë¯¿{÷î…6lˆ¡C‡bÆŒ=¹én7±ïøm?~¿ã×&mÛ¶ Ïž=«ø§©©‰7âܹs¤{ŸÔ¤­þ_üŽ~ç±±1nܸQñ†;66>¬qÌnnnøòå "" /´¤u êÚ÷3sss9rzzz###>|£FBƒ ~¹Ï¤u{'Œí.''‡¼¼q;"#ÿß„ÖðáñjÕ*èëëCII ݺuÃüùók´ŒÑ£G#11úúú`±Xؾ};zöì {{û*?£¡¡{{{hjjÂÔÔªªª°µµÅ¨Q£`hhˆ)S¦@UU&&&055ÅþýûѬY3€]Åì1õAûöí±téRDEE¡OŸ>ؾ};†())¡ÿþ˜8qâ>÷«ýò¿Ëå·?(JRÄÆ¦`Æ;ÐÐø«VÝ@ëÖÍàä4‘‘›ðçŸfèÞ½-Ó!Š-A´Õ]N]®ÿÿëÌ™3¸|ù2"""0sæL¤¤¤@MM &&&˜0a¶oß^ñ·ÒÜnbßñÛ~ü~W“6égÒ¼Oj»]øÿüΛѣGƒÅbAEE†††°²²ªñ ¹¹¹9¬¬¬ ªª ‹{{{¨««W Öý%¨kßÏÌÌÌ——÷CB+//ðË}&­Ûû;al÷=z`ذa4hF {{{Œ1â—Ÿ«oÏrr²Ø»w<öî£Gý±`Áe”””1–@⸪íqÄi› mÇÜÏD™à×¶1ñüÛ­[7lذzzzPRRB›6m°lÙ²ÿü8\.!!¯!CD”þ–‘‘³³3¦L™RíÏ#""-Z´À Aƒjµ^6›'Ož }ûöPSSCJJ Þ½{}}}¾ŸKNNÆ›7oн{÷ÿŒa}ûö-Þ¿eeetí*¼aAS§N8;; eùß³ñÊÊÊÕú{‡œœ´iÓ@yWÄ/^`È!hÕª¼ÆOZZâããÑ¥K—ÿŒ×þ_üöKeËå·?j"##‰‰‰000¨õ2(ª:¾}+Æ;Q¸rå?AY¹&N[ÛÁhÝZéðQÛóOmAM–#èëII ž>>?ÌDEQ”ôéÙ³ÜÝW`ÆŒ³°²:‚«WçCU•&](éP›¶MNNmÛV]¦äW“ßUEQQ½{÷®Õg™B—W ¬­Ò„EQTm}üøW®DàÆH°ÙE03SÃíÛK ­-YEQ”8³±± ÓaP%bíÛ7Ç;K0þ%ŒSÞSkèОL‡EQQÓ¶­mÛ¶B©£¥§§'Q=³ **>|…Í šÐ¢(Šª  00NNá~…Ž[`î\=Lž<íÛ‹ÿô¶EQEQ’BAA—/σÝ5L™â€«Wçcøð^L‡EQƒî܉‚²r'(+w¢ -Š¢¨êÈÎ.ÀõëqåJRS³¡§×çÏÿÈʊ턱EQEQ­aÃ8zt ìío`êTG\¾<::õ«®EQ劋9pwÆ’%F@ZEQü¼}›³gCàâòMš4ÂäÉÃ0}º6ºw¯z ;EQEQ%8²² pèÐdÈÊÊbæÌs¸páèë÷e:,Š¢DÌÍí9òó‹ak;MhQEU*4ô  (èzöl‡mÛÆÀÖv0š4iÄthEQEQõNƒ28p`dee0{öy89Í£=µ(ªž¹p!ÖÖ+J½Ð„EQÔ¿JKËàêúŽŽ!HLü>¸|y.ŒŒ”Ñ  ÓáQEQEÕk222Ø»w<`îÜ pu]eåN GEQ”(<{öqqiؽ{|ÅÏhB‹¢¨z/;»NNá¸t) 99…3fŽ›B§‡¦( Ÿ€ë×!/ÿ;ÓáPEQõœŒŒ vï¶Efæ7L˜p +h)ŠªŽ €¦fwhjv«øMhQUoýóO&àÎ(4n,‡éÓµ0{¶.:tPd:4ŠbLII=J‚¿ššƒv횣G&àñŠ™¢(Š¢ +ÛgÏÎÂÔ©˜2Å+ЦM3¦Ã¢(JHâãÓ˜ˆK—æüðs‘&´\\\ '''ÊUJ4Œ?þ×X™™™hÛ¶þ¼Ñøòå Ó!PbàÙ³÷8~< èÙ³þþÛ& ¡õ±D„ž‡ÂQ—íúåË7Ä# ¾AAA TU»ÀÖvX,U¨«wÅ×qï^&\\\~¹¼ü|š5“œöžË%•̰âÒR.8þÿû »=§÷WÿË%àpxhÜX¶VŸ—‘i6»TÀQý?zýû¯ÌÌL´oß^hËÅùA #f• Š‹¹µ>$…œœ,ÎûcÆÃĉ§qïÞr((È }½...°±±úz¨º«êü/+#øö­­Z ÿxù™8^/˜R“û£#Gü¡¢Ò&&*?ü\¤ -777¸¹¹‰r•hÖl8dddñí[x­>ß –ˆÑkŽxˆOƒ¿<üýã“99YŒÑ7ZÅREçÎ-+ýÜ„ ª\¦¬l 4o>÷Á—/—Áå~X¼umÏ«¢ 0÷ANŽx¼’:/¯iÓþPT4@qñÄ€ÃÉ@”ü1q%®š6UGóæÃñíÛc¾À«áçU±}{ ¼½ÁÂB êøí·V‹^ÿDOçGË–¦(+ËE~þ“:/K^¾+†";û.Rëå´i3<^1Øì p¹ùuŽK\)*6†³óXXÁòåÎ8wn6d„œ-àp8|ÛBJ|üïù/#ÓòòÝѸq4nÜ¥¥éÈÎvqD2hÕÊ N:òóŸŠxÝ’+!á¼½cáè8ó?ç· !¤öWJ1—‘Áƈ;±jÕH,^lT«eB`n~mÚ4ÃÕ«ó!EQÂFA@@ŽóGTÔèê*ÁÎÎZZ½˜¢Dª¤¤ ááo+’XŸ>å¢}ûæ01Q…‰‰ ôõûÖº—bFFöÃõë‘øí·ÖøóÏQ°¶(°dñ—/ß ¥µ£NíyU’’21iÒi(*6Áõë СC‹:-¯  wïFáÒ¥p$&~ÂÀ¿cæLØØ D£F´Òƒ°ååâèQœ?Š.]ZaÓ&k˜™ ¨öçKJÊò ÞÞ±¸?lvÔÕ»V$·hêg·o?Ê×pé±K˜Ù IDATÒ°Xªu^Þû÷_ ¯¿û÷OÄĉCk½œˆˆ`oÙÙزe4&N*ôD“¢£?bìØX²Äöö#™‡……¥ L€§g PRR†áÃ{ÂÜ\ê3å‰Êºu·qíÚc¸º.àAÝ~ý 0uª²³ àí½²~%´Ö­» ÿx„…­GãÆµïjö&œÆ;KéC0EIÀÓ3ÇŽù#11,–*V¬`aà@ZÔšª?23ÿ(aHÈk•¢ÿ.`±T+†Öå';»§NáÂ…P´n­€•+M1qâ04lØ@€ßX¿þ6|}ãðèц:µçUùô)“'ŸAq1ׯ/DÏží²ÜÈÈw¸x1 >>±hÞ¼1&OŽ3´Ñµkk,ŸªÚÇ_±g7îÝ{AƒºaË›ŠÈV‡ÃÅ£GIðôŒO,²³  ¬Ü––ê°´TGŸ>„=%)’’21jÔALŸ®Í›G l¹k׺ 00áá /_ûDxQQ)öíóÁÙ³!ÐÕU¾}¤úúó=¹xîÜì%²)é’Ÿ_‚€€xxyÅ"00ÚÚ½ai©335´mËL­µK—±aÃ?>cÇj2ƒ$ OÂøñ'qëÖbèèôùÏï¥6¡õýíÆ¾}0iÒ°:/oÒ¤3(((†‡‡¢£(JX8.îÞ‰xÿþ ¬¬4°|¹ ”•;3E‰D\ÜC 5’…®®LLTÁb© S§Ê‡ÖD~~ ÀÑñ5jˆåËM0cƈ:=xU%99 úú{°{·-¦L.ðå—“S€éÓÏ"%%W®ÌƒšZW-;#ƒ gç\½ÌL6ŒU0{¶ôôúÒ!ÏBý;vx "☛«aÃËZõ²âryˆˆø>>±ðö~‰ŒŒ<ôéÓê07WCÿþtVÜú¦¸˜ ‹#hܸ!ÜÜ–CNNpõª22ØÐÖÞ‰5k̰`A—õ«V]Gzz.Ö­³Ä¬Y#¤¶·Ö¶m÷påJ<R’aíZÜ»÷þþ«…ÒëiçNOܺõ‘‘›Ò3µ´´ ‡ÝÇ©SA<¸š$•Ch¹\¦Lq@zz.îß·§þH16»¾¾qðòŠAHÈkB ««++ ŒÙ-[6e:DÀóç0~ü)L˜0»wÛ2ŽDñôŒÁ‚—qÿ¾}•/ޤ2¡õáÃWèêîÂáÓ1nÜ`-wútG°ÙŸwo¹À–IQTÝ”•ñpëÖ:t_¿æcÊ”áX´ÈH E|)JÜdd°+X¡¡oP\ÌAÿþ]`jª U¨©ý&Ðj‡‹7"qø°òòŠðǺX²ÄHè7‹qqi9ò gÂÂB]¨ëúŽÃábÑ"'¿Â¥Ks ««$”õ¼~ý—.…áöíg‘Æйsui^ˆÊÊx¸ví1¾¢"–.5ÆÜ¹zuJB“/¯XxyÅ 99 ]º´‚¹¹,,Ô0xpÚ O ¹»¿ÀÂ…N8wn6ÌÍÕ„²Ž¬¬| ¶ýeŽyóô¶Ü—/S±råu|üøÿ=S§—ºlF,Ö~˜šöÇ™‡ œœøùÅÃÃ#¡¡o ##}ý¾°°PǨQý¡¨Ø„霜+«£4¨.\øC mꋲ2 ÷BMí7œ<9½Ê¿“ʄ֚5·ö®èÛܨ¨dXY…‹ËŒÑ[`Ë¥(ªæ)¯‘µoŸ>~üŠÉ“‡aåJÓ:t¦(qDA\\üüâØØT4n,>01Q‹¥ŠŽìóx®®Q8xð>ÒÒr0mš6–/7A‡Š_We¦Lq›]"}àâryX±â¼¼bàè8K …ž«ÂfãúõǸx1 ©©Ù04ì‡yóô¡««$u™â¢  §NÁÑ1-[6Åš5f7n°@Oqqiðö.On½}›ZÀÜ|ÌÌÔ ¥Õ‹>ÌHää,Œy¶¶ƒ±sç8¡®kË7¸»GãñãT¢´´ û÷ûâÌ™`èë÷ÅÁƒ“Dv]•€€Ìœy§OÏ€µµÓáPu]_ß—ððˆÆ£GIhÐ@††Ê°°Pƒ©i±íáÌfÃÊê6lW×åPTÏ8ÅÕùó±}»}Ê…–ÖìÙc‹É“_kc„ÓnÝZ,ðeSU=!!¯±{·ââRac3«W’ÊnóTýVTTа°·H€¿<>ÎCÇŽ-*X::}„6”‚?¿xìÝë·o30nœ&ìíG‰´˜pXØ[L˜pªÊ" ÂÆåòð×_·qëÖœ81 VVÂ} âryð÷ǹsñèQ””:bÎ]ØÚ¦Cf„$#ƒ}û|àâòýúu¦MÖí‘÷öm¼¼bàáƒÄÄOhÝZ£F €••´µ{ ´æ%––Gþ}©f'ô™K32Ø>|;¶l±ÁÌ™#¾ü¨¨d,[æŒÜÜBìÞm‹Ñ£ |LÚ¼Ù 7o>Ú°PJx²²ò+^áܹ‡puB“&0eÊpÌž­ƒ.]èPjaxóæ3¶msGPP" ûaóæÑPRê(Ðu$'gÁË+^^±ˆ‰I¢bŒ© ss5èë÷Ê„ ”àmÜx·n=Áýûö"¼~ým}¦MýÄÄ„¢¶k—'ÀÙy#=Ì%]LL ,,ãøñi3æ××Z©Jh:„cǵY¨3.¹»GcéÒ+xøpæDQB”––ƒ½{½q÷n”•;㯿,`l¬ÌtXU'߇–×ÃJ@FF:ujùÃPBQÞÀ%&~ž=Þð÷ÇС=±n† c6a"ŽÃû÷íóÁ±cþ8p`"&M&Òus8\xzÆàüù‡xþüü ÂÜ\Öd0àÖ­'Ø»×EEØÙ™bÎ]¡ ÌÈȃ·÷KøøÄ""â4jÔFFÊ07W‹¥*öÃjê‹ÔÔ°X`i©Žýû'ˆ|ý \ƧO9ðð°êzòò ±nÝÜ»÷sçêaÃK¡«…ï³;­Áï¿·a:œzïÓ§ÜŠáØÏŸ'CAA¦¦ýaa¡CCe‰î±zóæ¬\y{÷ŽÇôéÚL‡#q!°¶>І eq÷îÒjJš„‡ÃÅСÛ0v¬&6m²êºÊÊxÐÑÙìØ1V¨ë¢¨ú¨¸˜ƒ“'qòd:vlµkÍae¥A»ŠS+==÷‡¡„%%ePWï ˜šö‡ªjg‘ÿþ öï÷…»û ¨ªvÁš5æb‘0~úô=F>&–°ìÛ烣Gý±ÿL™"ø:ÕñìÙ{œ9ó¾¾/ѵkkÌ›§I“†IÌP IQPP‚'áàð;¶À¦MÖ03 ÔufeåÃ×÷eE͘ d ¯ßææj9R-ZHÇ00IÃáp1vìq”ÂËËŽ‘tQQ`eu·o/¶¶ð¯‹·o?Æ wЭ[œ:5½{·ú:…‰ÃábÔ¨ChÓ¦nÞ\H'Ü`ÀçÏyðôŒ‡G4ž=KFóæ1jTXX¨C_¿¯T$NÃÂÞbêT,X`ð˺OTån܈ğÞ‚¯ï*¨ªv©Ög¤&¡åâò«WßDdä&¡Ìôô³ B±{·ž<Ù„V­ß¢ê+hlÛæŽÜÜBØÛê›qŠBbbR?¿8ÄÇBãÆrÐÓS‹¥ ccÆf”úô)‡ûáæÍHtïÞþiKKu±¹ÁŸ:Õ¥ps[Æt(•:pÀ‡û1šÔʇ!98<À­[O!/ß3fhã?ôо}sÆb’Fii9عÓ÷î½€ŽNlß>Fàõµ*“—Wˆû÷ãáåƒ× „@[»7,-Õaf¦&”¡TåvìðÀÅ‹aðõ]ÅH=ÁïÆŒ9Ž–-›ââÅ9"Y_rr–,¹‚W¯>cûö1Œ^ï!66––G°sç8ÚsFDÊkbEÃݽ|8a³fò9r,-Õa`ÐOªîïÓ1fÌ1˜˜¨âøñ©bsO%I²²ò¡§·ãÇÁÖ­6ÕþœT$´!06Þ~ÃÑ£SD²Î‚‚ ¼ èÃÎÎT$ë¤(i–˜˜ŽM›î""âL˜0ýe!uSHSÒ­¨¨¾¿<‘ÁFçÎ߇ö‡ŽNF»ÑýšcÇàäŽvíšÃÞ~Æ,”"õ“3³C¸~}!ôõû2N•ºƒïcïÞñ˜6M‹ÑX²³ péRœœÂ‘›[„±c51ož>-B+`OŸ¾Ç† w„^_«2ß¾# ÞÞ± JDii´´zÁÌL ææDVg¯> HÀÌ™çpèÐ$‘ÖÏ«Ìýûq˜3ç‚‚Öˆ$© ”÷l:pÀ'OÂÌL N„¢b‘¬[vîôÄ•+¾mÚ4c:©ôåË·ŠšXÿy°Xª=z ÔôÄúYzz.,-¢W¯vpv^ U‰:QZ¸Ð /^|@PК•’Š„Öƒ¯0uª#üýWCEEt3žíÛçƒë×ãñãM=Ö—¢˜”›[ˆ}û¼qõjÔÔºbëÖ1ÐÔ¤3ˆR’áÓ§ïC ãöjj]ÿ-變þý«×]Z˜Øì"88<€£caùr¦O×Ë®Y³Î#3“ oï•L‡òKGŽøaÿ~_ìÞm‹3˜Û_ZZ†;wžÁÁ!oßf@_¿/-2„®®Ó¡I Q×תLQQ)á郠 –BS³;,-Õan®Fg ôô\°X`d¤ŒcǦ2x<ƒ=6¬—Èëx……½Å²eÎhذNžœ&±S–B_FŒè#GDÓ ¢>ÈÎ.¨¨‰‘„ÆåÀb©ÂÊJFF’]ëWŠŠJaiyEEøø¬¤CÃkÉß?3gžÃµk j||V u²©špvŽÀ¦M®ˆˆØ(ò^ìÙÙXµê°jÕH¬XÁ’È{6h,\èw÷ôjääÀÇç%ÜÝ£þ5‹¥++ ‰°¦¸\æÌ¹ˆ¨¨dxx¬ ×ÜZÊÏ/©H4׿åÄ'´ââÒ`jz VÙlÛ63gŠGïZqÅfáþý8¸»¿ÀÇoР ŒŒ”ÿMb©ŠMïEQ;q"{÷zãüùÙ05¥9€Ú OÂĉ§pâÄ4ØØ ªÕ2$:¡•––-­8th2lm3ǬYçÁfáîÝ¥ŒÅ@QâÎÇç%Ö¯¿.—‹mÛÆÔú¢EQÂÀãDG„¿<Ÿyèë÷…‰‰ ŒUЮx %ü!^^±Ø¿ßïßÁ„ C±r¥©DÕÒ±·¿‰ÈÈððá:‰Â§OcÇlÙ2óæé3N¥Øì"\¹òçÎ…";;ÖÖ±p¡Aµ§Æ¦ª&õµªŠëéÓ÷ðöŽ…·w,ÒÒrн{[XX¨ÃÂB êê]%ªG¤°ef~‹µZZ½qæÌ ¦Ã©Tvv†݆õë-ñÇÌõ ÍÉ)ÀŠ×ò[¶Œ»ª¿²c‡n܈ģGľ³¨}ûV ?¿8¸»G#$ä5ÀÀ ¬­Ë“Xõ½—¯›Ûs,Yr›7ÆüùâÙÞK6»&&û ¡ñ;gÕz9ÐڲŠ^^±ˆˆØÈè,M%ÁÖö$<<ì$î E [FëÖÝÆýûq˜0a6o–-iÁDŠy% y€€&àË—oøí·V½°´´Äk(ae‚ƒ_aï^oÄÅ¥ÂÒRkÖ˜¡gÏvL‡U#ÒTÒÁá¶n½‡Í›GcÁ¦Ã©‡Ã…«ës8:>@BÂ'èê*aÞ<}+ÓäFýo}­ß~k…­[ÇÀÐPô%1*CAtt ¼¼bà僾¢K—V°´,On Ô]bÊ‚Àåò0iÒi¤¥åâþ}{±~h߸ñ.¶žÑg BŽõÇÁƒ÷an®†ƒ'¡Y3Éè±ÃfC[{&M†­˜‡q%ð÷‡»{4‚ƒÿ„ ,-Õ1räZä_ÏŸÀøñ§0aÂìÞmËt8ÍÎî>/Áb©bëV±+—oïXxyÅàíÛ tèÐææ`f¦-­^õ®¶ÐÁƒ¾8~<+0`ÀoL‡ÃWrrôôvãĉ鰶Ö`:„‡'añb'´hÑŽŽ³Ð¯_'¦Cª–óçbÇ„†®Ço¿IN¯fA),,E@@y+((\.::}`m=£Fõ§3öý$99 VVG¡©ÙçÏÏ®w×HAòöŽÅ¼y—àä4ÆÆÊuZ–Ä&´NœĉˆŠÚ,cwÝÝ£±x±ÂÂÖ‹Ý E‰ZvvÖ­» OÏ̘¡M›¬Åvf5Jºq¹ƒmÛÆ`öl¦Ã©–… /#9ù+|}W1 àóç<,Z䄨ØT>< ÖÖ™é—8. ÷BM­+NšÎt8"Q\ÌA@@<<¢§ #FôµµÌÌÔè(Š*|ýš+«£hÝZ..‹ë]|AÊÌü#£½°°PÇÞ½ãë¼<‰Lhq8\ º ¶¶C°aƒ%Óá(¯Q £³ }±kí~HÕ_þþñX½ú&äädqèÐ$èéõe:$ªža³‹ò   JÄׯùèÚµ5LLTajª*‘g Ÿ°w¯7üýã1xp¬Y3 ::JL‡Ug'Oâøñ4i"‡¿ÿ ›b;¼399 ^^1ððˆAll Z´hŠ‘#Uaa¡}ý¾R×{/3óLM÷cذ^pp˜Ét8Õ“3³C¸}{ ´µ{3€òc}çN8:†`Ù2c¬Yc.öÃX¿÷ñò²ƒ†ÆïL‡#ÅÅ¿‚»û øûÇ£¤¤ ZZ½am­ss5F'±EE¥?þ23ÙðñY%Q/BÅ !3gžCRR&üýW äD&´®_Œ¿þº'Oþ«¬‹ð}»;ž=ÛL/ T½SRR†mÛÜqéRÆŒmÛÆÒñö”È$'gýÛ +‘‘ïÀãhjv‹¥UôíÛ‘ékåõëÏ8tè><=c ¦öV¯6«s×lqñýåÔ¸qƒ¥¶~É¥KáØ°áÖ®5Çòå&L‡S#ùù%pr ‡£ãäæaâÄ¡X´ÈöB¯ƒìììÞí…ë×càÀnؽÛýû‹wAþ””슞[ÏŸ'CAA&&*°²Ò€¡¡²Ø×ü.—‡É“’ò÷ﯖ¸û[Û“—ogçL‡òƒ[·žbÍš[00è‡'¦‰}]­Ñ£A^^·n-b:)--Cpð+xxDÃÏ/EE ÖVV°°P—ˆÅ!Ë–9# ®®Ë¡¬,ÃiÅÕéÓÁØ³Ç nnË1p `È—Ð"„ÀÐp ê†C‡&1Ί‹9|ø GÇ™b=T~„S(+ãáîÝ¥L‡R#¾§g4||^"?¿ššÝam­KKutèЂé%ÖåËáX¿þŽŸŠ±c5™G¢åå‚Å:•.¸xñ¾ •¸„ÖØ±'мyc\¾<—éP*•]€Áƒ·âï¿GcÖ¬L‡CQBSTTеk]àêúvv,¬Xa*17â”äxõ* H@TT24Á°a½Àb©€ÅRë7¾5‘‘‘‡cÇpõj:uj‰U«FbìXM©=§¼½c1þ%> ~~«>‚B¢Z‘‘ï0fÌq¸º.ðaâûFpýúÛH@xø‰+ÀÊêˆXÍÌ%J7o>ÁêÕ7±d‰þúË‚ép">> ÇÂË+]»¶Æ’%F?~H½8ž-8ø6n¼‹ôô\,^l„¥K%bø^e²³ àí hDD$AN®!ŒŒ”+†% bv«Ú8xð>Žó‡»û ¨«K^ݬÊ\¼ŠíÛ=¹ íÚ‰o¤€€,^ì„Áƒ{àìÙYŒUyñâ#,-ÀÉižXLÀÂåòðøñ;¸»¿€·w,¾~͇ºz×{bi k×ÖL‡(u’“³`euššÝqþülú‚¦Ž?þ'žÆúõ–X°À@(똄VTT2¬¬ŽâÖ­Eb=þú»5kn!,ì->\'µCF¨úçÔ© ìÚ剩Sµ°}ûú°BÕ !/_¦V %Œ‰IA£F²ÐÑéU˜˜¨Hm¢ôÛ·b8:†àìÙhØP‹aöl±’#, ^Fjj<=Åï ¸¨Üºõöö7°`6l°”š¡zÉÉY8y2..OѪ•,0À´iZb?Ù¸áp¸8>ú¢e˦ؼy4,-Õ™«N²³ àãSÞs+<ü-6”…‘‘2,-Õab¢*²c$$ä5¦MsĶmc0{¶ŽHÖ) ÅÅhiíˆYcãâÒ0}º#Ú·WÄ•+óÅ®PùÌ™ç™É†·÷JF®Í<ÁãÇÿÀÓ3^^±øòåú÷ïkë°²Ò@·nmDS}ñõk>¬¬Ž¢uk¸¸,®W÷fžž SÓƒÐÕU©SÓ…¶‰IhMŸî6»÷î-g:”jùøñ+ttváСɰµÌt8U'k׺àöí§Ø¾},fΤõᨚ)**Eh蛇& ##;¶€±± X,èê*IõCaa).^ Å©SÁàry˜?_óçÔ»ýïmã‰Óëýl¨®®Ï±b…3¦MÓÂÎã¤&©”ׄspx€«W#а¡,fÏÖÁœ9z1“Ÿ8ÉÈ`c÷nO¸¸<ƒ–V/ìÜ9}ûŠß„H5•“S_ß—ðð(OnÉÊ6€A?XYiÀÄDÍ› gà÷‡+>8}z†PÖÁ¤3gààA_DFnûs-%%Ó¦9¢¸˜ƒk× W/ñ©¥—†‘#âÂ…?0rd‘¬“Ç#xöì=îÝ‹†·w 22ØPQé ++ X[k Gv"‰£>+**Åøñ§]hÓ¦Ó!I´’’2ŒsîîË…z/ ­èè07? gç04ìÇt8Õfgw QQ¼–öÒ¢$Vnn!æÌ)/äçà0 úú´^U=ii9H€¿<ÂÃß‚ÃáBM­kÅPÂþý»HÕC|eŠ‹9prz„“'QXXŠ9st±h‘!Z´lALI±qã]Ü¿‡ˆˆ´]àãó ^Ƹqƒ±ÿ©Ú›[ˆ Bqþ|(JJ8˜2e8.4Dçδ`qMDE}À¦Mw—ŠéÓµ±v­9›0–@äæÂ×÷%<=cú ÈÀÀ ,-ÕajÚ_`É-‡ [Û“ÈÉ)€Ï*±ê&……¥6l;&M† ,™ç—rs 1sæ9¼}›'§¹<¸Ó!U˜;÷"’“³àï¿Zh÷)„DE%ÃÝ=žž1øü9ýúuªNX_&L\.sæ\DTT2<X²ÄúúJ°¶>†-šÀÙyÃÑÕNFÚÚ;±f¦NÕÂÍ›‘8}:Ÿ>åbþ|}lÙbÃtˆõÑÑ1}úYôë×.ÌZ= J2•Ou€€xDF¾G ©Ù,– LLT¥¢ÆKMq8\\¿‰cÇüñõk>¦MÓÆÒ¥FèСÓ¡‰GðÛo«GŽL­í`p¹ºËîÂ}ÎÉ9‘Ý}wïÌwî}ïéû89Õã×_;æØþ&6ö^^w8tè¾¾H’„M5êÒ¶m- ÊGbb ÌdÑ¢žØÙ™¥½öÉ“W´k·'' æÍëªÂO‘}þùç"“&íÆ×wkÖø²iÓYŽ«¶ ä•+O1k–'£G·fâÄvª‡‡ÃiÑbK—ºâìl‘å×ß¾ýœRGb={IÅŠÆ8:šÓ±c=ÌÌJ)!b!«öî½Æ?º3{vQXBqv^J§NÌ›}ý­Z%´*T˜@RR ::ÚÈåÅ‹áCc°°(§êð¾Ù”){عóZZZ$&¦ —ËÑÒÒ¢k×,^ÜSÕá ÂG®] ¢W¯ÕiESsÓèáËRRä\ºô˜“'ïpüø]= ÇÐ0/¶¶5°·¯IË–¦åΚPÉÉ2<<®ð×_^„…ÅâêjŨQ­)Q"g^XfƳg‘XYýh¡­ Õª™`gW“U«¼¹paZŽ]ÁRnß~NïÞk([¶[·¦páÿv ÆÒr&½{7fþün*ŒR±|}Y¶ìçÏ?¤Q£JŒcŸ-SrŠ#GnóÛoˆˆˆcäÈVŒÑ2ÇŽðƒÔ•b½¼ü9tè&¾¾÷Ë%¬­«Q©’1ëÖ`Ĉ–üüs{RRdtì¸mm-k~Ϥ¤ÈiÜød29aa±èêj“œ,PûzÄ;w^füø j««5޹;wB2=JëÖ­`¾Å¡C7 Š \¹¢tì˜Z«ví2Ù±YïG jË”)ê_sNݽ_!²L™Â¸»ÍÖóÚ$´’©TiâGK­Á§…¡¡ÚзoSª¿âç÷ŒU«¼ù÷ß›H’r¹ü£Ç[µ2cëÖÁ*ŠN>wýúSzõZ…­m V¬è“ã  ™Ï©S?~Ÿ{ÄÆ¾£råâÿ%°ÌhÔ¨RެõóêÕ›LMLI‘³gÏU/ö"44š=1ztkQìðòò§ÿ @êÏ md29¦¦¥øûï>¢FÈW<~üŠ=þ&_>}vìF‰… ¦cÇ¥„„Dpûöï9®Û¥KY²ä8>>÷°´,Ϙ1mhÙÒTÕai„„„dV¯öaÙ²/nÈŒN_:#Iáá±=ªëÍ›Nœ¸Ë¡C78~ܹ\B’@[[ 3³RTªdŒO ^^ã”^”X¤®&æÇß{s÷î‹´¾÷=mm--êI·n Tå×íÛwQ£Ü0Àš3œTºxÌýû/iÙr>«W÷£CóÏ—$‰›7ƒñô¼ÉáÃ7yú4’råŠâàZK]GÃåvïGÙÙÕdÙ2׿@‘²%$$ãⲂ·o“Ø¿T¶—•P›„VHH ü–î㺺:¤¤Èpt¬Ë´iŽ”-[$£Ë_ß@~øa+¯_Ç£§§“vWäSµk—áØ±qÙ |ÙÏèÑãoš7¯ÁÊ•"™•¥ÖЏËñãw¹v-mm-5ªŒöö5süª/ïïÖݺõ[º«¦¤ÈÙ·ï‹{E×® =ºµZŸ“²ÛÒ¥'X´èII)ý]WWI’èÝ» &´SûeåUéåËzôXÅÛ·‰,[æÊȑŒ’"CWW‡áÃ[0yrU‡©×®=eÉ/Nœ¸‹¹yYÆŒ±§uëšâ‚#BB¢˜5Ë“ýû¯Ó¢E ~û͙ʕ¿\xßÓó&'zpæÌ$OŽÊdrÌ̦òæMÂgµkW›%K\)P ç­jøžL&gÕ*ofÍòD[[ IJM´|JOO—)S:0t¨mö™Ežž7ùᇭôêeÅìÙ]Tzü¼é¿R ãÐÒÒB’$®_ÆáÃ78|øÁÁ¯©P¡:˜ãèhN:"‰¥ÎBC£qpXBåÊÆÙ>’('’$‰tÇ×7Pe+DªMBëÖ­`Ú¶]ôÕç.œŸË—§«õr»×¯?ÅÁá/´´ £o·T)#®^ý5û„t¼¿SacS•+ûæÈ‘7ÂçS¸xñQZ=¬àà×-Z€V­LiÕÊŒæÍkäšâÝwî„жíBd2é‹õ år‰ýû¯³hÑ1ž=‹¤K—úŒcŸ+îúgÕˆ[8tè2Ù—O€ººÚ¤¤È™2Å‘#[estš#:ú-Ý»¯$ Ð"%åÿ7ÇòåËÃõë3¾kÕ7uwëV0‹{áåuSÓ’ŒÛ†¶mkç¨Uý”åüù‡üúë~îßÉÀÖŒÓæ£Z˜ÉÉ2ÌÍ!:ú-uê”a߾ɛ÷óbêšâüù‡¸¸¬øìïï‡ëêjcgW'§z´n]ó‹…ã5ÝÂ…ÇX¸ðh†ÏÉ“G—Áƒ›3uªfL¯òòògðàM¸¸4`þü®*»ÑzçNöö ™6Í—/c9|8uuÂJ•Œqp0ÇÁ¡.µj•VIlBÖÄÆ&àì¼€}û²$QN4{¶'ëןQé ‘j3™<*êm†ëêêP±bQ­ÖÉ, ‹òìÚ5W×Õ¤¤È¿x—R§ô‚ª…†FÓ»÷êÔ)ËŠ}D2+‡ ÃÉ“w8qâ.§Oß'>>3³Rtêd½}MêÕ+Ÿë.ƒ‚"èÚuåw€%6l8‹››5åËE.—8xÐE‹ŽñäI;[²mÛ?Zí{ܾý<ÝdüÿFOµj&Ù‘fz÷.‰ÈÈx>MfAj2zÆ3üô“½j‚Ëuê”eãÆÜ½û‚¿þòbÈMT«V‚Ñ£[ãèX7×õSYѤIŽ˶mX°àûö]gÒ¤tëÖ---6n¸»¥Y³ªªGã>HŸ>k™0¡Zœ3Ô&¡5wîaV­òù¨ˆ¬ŽŽ èãé9Z£ïŠoÝzžI“vqêá±cãÄ2®‚JLº‡={®âé9F\¬«‰¨¨xzõZ¶¶‡ÉÒkCB¢8qâ.Çßáܹ$%É07/‹­[פV­Ò¢¨òd29ýû¯Ç×7ð‹I]]mjÔ(űccÅ÷–ú1bÄÖÏnâèêêP­š Û·Ó¨ÕŠUaõjfÎ<ðÕçiiiQ¤H>®^¾¾f,ùAA,]z‚={®R²¤#G¶¢{÷†›ˆÈOŸFbm=;Ý”ZZZ,[æJçΖÙÙ·›7ï_V®<õŘtuu(XPŸ?ÿìNûöuÒÝFXX žž79xðW¯ah˜—víjÓ±c]š5«öÍ£%IRÉù#9YF¿~k9{öágç7M®ß{öìúôY“VSëýw{íZŽŽKX° ;½zYej[))rÎ{6ëõëxjÕ*ƒC]Ì¿xÓåÒ¥Ç8;/cß¾iÔ¨’B?› <›7ŸcÊ”=×·©«ëןҵëJºukÀœ9.ªP£„Öøñ;ÙµëJZÇ«££.û÷¢fMÍ/´·rå)fÍòü,©µcÇ0llª«(*!·Ú¹ó2cÇî`íÚþþȲυ 6l3¯^½àÞ½9N•Ë%üüžþWÐý./ÈŸ_›jØÙ™ÑªUM‘8ÈÀ¤I¸»_LwZF*-֬釃ÃçKu _öçŸGX±âÔ'7§´iÒ¤ 6 È5Óã¾WDD«Wû°aÃi’“eé& ´µµ˜5« ýú5ÍæÕGpðk–/?ÉŽ—06.È?´¢W/«\™äûš!C6qô¨ÿWGþýóÏPš5ÓŒiUMšÌ"((⣿½Ottè`Îܹ.YZQõÅ‹h¼§ç üüžad”öíëàäT—Æ«d©†Ó´i{±°(¯’‹èwï’èÙsׯ?ûlA‰‡¿<ŠV¼/?`€5Ó§wdùò“üùç¿Èd66ÕÙ±cXº¯MN–qöì<=orôèm¢¢â©S§,ŽŽætè`ž©Ú˜ÎÎËÐ××Ëð}õñ¾üϸqmrtÍÉìŠ‹Ë š7¯þÅ‘’ª¢6 ­þý×ãåå¤þ@ÓÕÕa÷îÔ¯_QÅ‘)μyÿ²t鉴¤–¶¶Ë–õÆÙÙBÅ‘ ¹‰¿NNK4È&Ç.û®IRRä,ZtŒ¥K©‰*---V­ê‹£cÝž›€¯ï=Nœ¸Ë©SDFÆQ¶lììjbo_+«Êâ".–/?Éœ9‡Ó]°ã=mm-J–4âüù©bÔG&¹¹­çøñ;i#´´µµèÜÙ’… {ˆïðDG¿eÆ3¬ZåCBBÒg‰----LL ¹|ù—\_K*44šåËO±}û ÎÏðá-èÝ»±˜^ýŸkמұã’Lõ{zzºìÙóƒJ‹üfÆ£GáX[Ïùèozz:äÏŸ‡ùó»÷͈àà×:tƒü¸}û9ÆÆéСu±²ªœáÂ2™œ²eS§öuéRŸ¹s]²=¡›€‹Ë ?žVÿôéî÷ï¿Î?ºSª”!!Qiç› çÀ?<=oø’’%pt4§cÇzÔ«W--­´"ÔïÏïïo N™âÀ°a¶Ùšä¿jê‹QHxy§V-Í+ç’˜˜Â̙ټù,Àg7¦ôôthܸ ~~O‰O¤~ýŠÿ¨3§dI#…Åqüøú÷_Ïñãã13+¥°í Ї£ãòæÕcß¾Qb÷ïôâE4:-¥|ù¢lÙ2X-G=–ÐJHHàÍ›7é=_iÌÍgðÇŽ8:f=™el¬ø“bccILLTøve29cÆìÁ×÷uê”bëÖþ EÑ××ÇÐÐPÕa pñâ#\\V°hQOºukðÕç+kÿÏ­ ,ˆïÞ%1uê^v츄¶¶Vº+ ôéÓ˜Ž-hÔ¨R†Ó‰^½z¥Œs”kמ1`À6 uõ\I"í"®H‘üT­jŒ©i *U*FÕªÆTªTì£i  ¼þ0§´ßíÛ/èÝ{K–tÅÖV½VRVûyxx(|›_#“I\¹αc!¼~@—.±±É#65jD¹r_žþÏêÕ>lÜxm ²aРæ¹î"çÃß÷¯_¿åÁƒp=zÅ£Gܽû’'O"x÷.uÄ‹žž2™<íütéÒ„ÏúCU ‹ÅÞ~9-ZTcúôv-ªü›=Ÿ^o¾äàA?ðãñãW”-[GǺ9r‹'O">{½¶¶M›VeùòÞÿ¿Îå³gϸté’Ò⎈H`Μ¤¤È:Ô 33Å%x”©k×®=ÇÙ³í¾¸Ü¹ª)»ý2“PQ&I’8vÌŸêÕP±¢ú}ÿʔلb¡Bù?¾-C†4gÙ²“Ì›÷/ëÖfüø¶tíÚ@­’5Ê”Õßœ2™œ§O#)\8ŸZMwøP›7ºfÛj¾™¹Þ¨Y³45k–ÆØ¸ 3gH÷\Ÿœ,#&æ®®k6Ì–I“þ¿@²+ÁܸñŒÀÀžj_soûöíôé3€7rôè-2ûµèéépüø¥'´Ú·7§dÉClÚt–3:)õ½„Ì™6m/ÞÞ¸»ɬïü—/^w÷ajÌP‹ŠÐEŠäÿ¦d–¦Ë›7XeNPº”9 ¥K—úT©R\Õáä:¯_Ç3bÄ1æÍ;Nr²,Sɬ÷?ÿl9r!ë*U2þ®d–9}û6QËdVn ¥¥EÛ¶µs]2ë[æeêT.\˜Š­m &LØI«VóÓVÚ>¦££M¥JÆj•Ì4È&Û’YYuô¨†å uä¼$I¬YãKûö‹ˆˆHÈ–ØêÖ-‡‹Kýly¯ï‡‰ÉpŽÉ|2 R“…ûö]W^`ÿÑÕÕÆÍ­;v\&>^”çPµåËO²eËy/îI³fêUî@Ó<}I—.Ë)Q¢Û·«2 Ô$¡•›—š«Ì ʶcÇ%BB¢3Æ^Õ¡ä:‰‰)lÜx–2e R° VV•¨Q£$åÊÅÄÄüùõ¿Úœ}ÖP¯^9Ö­s#o^ÍIfHh B޶aÃZ·®I™2…UŠ ‚ ¨½–-M9uj"+VœdÞ¼Ãxx\fÎ6¬¤êÐ УG#zôh”å×é鉤©¢tîlɽ{¡L˜°“Ê•±´¬ ´÷23+E“&UØ´éœHhe£ÐÐhz÷^C•*&üýwµŸF«ÎΜ¹Ï€hÕÊŒeË\ÑÓÓQuHY&Z_r¨û÷_rþüCÜÜš©:AAÐzŒ×oïŸ)Q¢ÎÎË3æ"#ãTš ™0iRZ´0eÀ€ „…Å(õ½ °æÄ‰;bŸlòî]nnÐ××eóæA7šH9r›>}ÖâìlÁн52™"¡¥V8ÀåË—yóæ sçÎ **ŠùóçððáC6mÚ”©mÅÇÇ3{öle…*h€mÛ.Pµª ÖÖÕTÊwùðPÅvıôýDj6Ñ~Š“•ó¸¦ú°?ü=ó)Mh× Šáî>”Õ«ûqúô}¬­ç°¿òWPKöµ¬PE?¢iǵ¶¶Ë—÷¦P¡¼ º…äd™ÒÞË޾ŋŠâðÙ@&“3|øVBB¢Ø¾}(E‹PuHëŸ.2dÈ& ²aÞ¼®=ÊMs#×@ƒ âÉ“'é>îááÁùó牉‰aÆŒÄÄİ~ýzîݻǪU«2õ^oÞ¼á—_~ùî˜ÍuâÄ]:u²Ðø"•_“Ñ1–•í|HKßO´¡fí§8Y9k’ÛýÃvþð÷̧4©]Ì9}zÎΖüðÃ6 ÚHD„­¥)4i_ËŒìêG4ý¸.P@ŸuëÜð÷άY‡”ö>ººÚtîlÉž=W‘¤Ì­n)|›iÓöræÌ}6oD… ÅTŽÆZ´è&ìbÒ¤öL›æ¨ñ׊"¡•Ž=JLLÖ†½V¨PÀÀ@%E$äT†™ªCùnY92:ÆÄ±¤:¢ 5›h?ák>l÷œÚÎùóë3kVgvîÎíÛÏiÙr‡ÝPuX‚ 49ḮV­ tgíÚÓxzÞTÚû¸¸Ô'8ø5—.=VÚ{ävË—ŸdÛ¶ üýw,,Ê«:$“É™0aK–gñâžüðCÎX4ì»Z‘‘‘ØÙÙáîîNåʕɟ??ýû÷G&KÖyûömš6mŠÕªUcûöíôìÙ“ýû÷BݺuÙ»w/¡¡¡Ô«W¨¨¨ï Me¦M›†±±1úúú´hÑ‚çÏŸн{wÂÃÃéÞ½;gΜ`ÇŽT¨P¼yóÒ©S§/^„……áèè˜öo¹\ΨQ£044¤xñâÌ™3'ÃxÖ­[GùòåÉŸ??nnnÈ3Z/XÈ1Nœ¸‹‰I!jÕ*mïù¾?X´h¥J•ÂØØ˜ 60~üxŒ)Y²$;vìÈòs?<2ês>=ÆÂÃÃiÓ¦ [¶lÁÈÈooïLm'=9éXJ¯om¨Ò;ψöÓ édzÒ&þ~ðµÇÒ;þ3D‹->ú[÷îݹtéÒgíþéѴvmÖ¬*'ON¤mÛÚ ¶…á÷ýVÕa)\V÷GEœW|||077G__Ÿ5jpàÀ€Ïú“^½z±pá´׽zõŠúõëîgÒ´}-#ŠèGrËqÝ©“ýû7cܸJ«sU£FIjÕ*ÍîÝW•²ýÜnïÞkÌ™s˜?þ茽}-U‡£‘Þ¾MbÀ€ 8p-[Óµ«rWÍVÒ'^¾|)y{{úç/ •òäÉ# 2DJLL”?~,I^^^R\\œT²dIiùòåRBB‚tòäIÉÐÐP:wîœ4~üx©ÿþ’$I’»»»¤¯¯/õë×O’$IÚ¶m›dnnž©÷Ïj¼Yu÷î]éîÝ»™~þÑ£G¥R¥JI‹%44TÒÚæáÇR¡B…¤S§N)íó ê£gÏUÒO?mÿ®mdµýCCC%mmmiúôé’\.—V®\)Òܹs%¹\.ÍŸ?_ªR¥J–Ÿûá1QŸóé1,åÍ›Wrvv–Ο?/fj;_ú\ß{,y{{K/_¾Ìôó³*+ÛϨom˜>eö‡Yi¿ŒÎ3¢ýÒ§Ìö$ww÷L=7£óxVÚ$£ý £Ç2:þ3 -Zô£¿™››KÇÿ¬Ý?Ü_>ü=ó)E´«$eíûW4oïÉÒr†T·î/’Ï=•ÄYYý½œ•ýQQç•—/_J ”6nÜ(%$$Hû÷ï—òåË'Ý»wï³þdÏž=RµjÕÒâ]¶l™ÔªU«t?Ë÷îkʼޤÔë¡/\–}‘¢úu>®³ò}dFRRŠdo¿@jß~‘”””¢°í~hõj©zõIRBB²R¶Ÿ[9s_*Wnœ4kÖ!U‡¢±""ÞH:,–ÌͧK·o?Wu8 ÷Ý -@zñâEÚßlll$iÇŽ’……ÅGÏ5j”ôÓO?I§N’Ê–-+I’$ 2D9r¤T¾|yI’$iàÀÒ”)S2ýÔ)¡µÿ~©T©R’¿¿¿$I©'ø¨¨¨´ÇK—.-ùùùI’$I'N”zöìùÑëk×®ýÕ„VáÂ…¥¤¤¤´×L:Urvvþ,–÷mžö·&MšHûöíËôç -Íen>]Z»Ö÷»¶ñ- -@Š‹‹“$I’îß¿/éêêJÉÉ©'öëׯK&&&Y~î§Óéõ9’ôñ1,RHHH–·ó¥Ïõ=Ç’:%´2ê›E¦O]ZgDû¥OZédzÒ&í=–ÑñŸ‘Œ.|%éãvÏê…ï÷´«$©6¡%I’óV1b‹TªÔiêÔ=j{1û- ­ÌîŠ:¯¬ZµJ²±±ùh;...ÒÌ™3?ëO%###éÖ­[’$I’•••´yóæ ?Ë÷ìkê–ÐRD?¢Îǵ¢Z’$I‡KUªü,ýñ‡r#áá±RÙ²c¥®+eû¹ÑÝ»/¤êÕ'I?ü°U’ËåªG#Ý»*5jô»Ô¬ÙléÙ³HU‡£ ©¡U²dÉ´ÿ_T,((ˆ{÷îQ¡B…´ÿvìØAtt4Íš5#&&†û÷ïãëë˨Q£xóæ AAAœ:uŠ:("¬lçàà€‹‹ Mš4¡|ùòŒ=:Ý©“!!!Ô¬Y󣿙™}½ÞQåÊ•ÑÓÓKûw­Zµ ýâsutt066Nû·¦|2'..‘ðð7Tªdüõ'+AþüùÔýM__]]Ý´Ïs?ô¥>çK´µµ)UªÔwo''KõÍï‰6T_™9ψöSo_;g¦M2Ú2z,3ÇvÊ íjh˜—+ú°bEovï¾J›6 ¹s'DÕa)LföGEWž?Nµj¯Ì\½zu‚ƒƒû“'<<œ"EræÎ)|›ˆˆ7b)[ÔçG”:ɨoVG¢ ?–•óŒ:í÷9EœÇ3Ú2zL‘Ç|||–_““uêdÁÉ“06.@‡±bÅId2Í­Ñ”ŠÚ¯ ?;>"##)T¨ðyÒ­[7vïÞ»»;ÎÎÎiIœÜ@Y×9ý¸îÚµÎΌ宔Úw.. ðñ¹'VAýN±± ôî½#£¼¬[7==U‡¤q6n}ú«ï„§§'º4îêÕ«iß¾=û÷ïÇßß_AŸFÐTïÞ%'®Š#Ñ\9ùXúZßœSäÔ6ÌÊyF“åÔöƒŒÏ㙕Ñ~ÑcßzüëééÃëׯ¸té>ÌR̳Û téÂìÜ9‚‰ÛñçŸGéÔiOž¼RuXJ§¨óJëÖ­9~ü8§®Æž={°³³K÷ù¡¡¡,[¶Œ¾}û~ôXNß×ÑäÖãzölttt˜>]ñ¿{Ú´©…¾¾GŽÜRø¶s‹ädƒm :úÛ¶ ÁÐÐ@Õ!i™LÎÔ©{ùå—ýL™âÀ‚Ýs|BPi™£ªU«òûï¿cee…ÕªU£V­ZtïÞ€víÚóQB+&&Fc§ôë×àà`êÔ©ƒݺuã÷ßO{¼xñâŒ9’k×®áääDëÖ­133£E‹8::¦{Âþ••cÇŽ¥yóæT«VòåË3dÈ~úé§´Õ#…ÜKGçýLI¥q¨Â‡ÇØ÷ÈÉÇÒ×úfUm˜±¯gTM´ß×etϬŒöƒŒûÖã¿bÅŠ4jÔ œœœ7nM›6M{<³íž“Ûõ=mm-FŒhÉÑ£cIJJÁÎn6œA’rî9YQ畺uë2nÜ8,--±··§fÍš¸¸¸Ð¶mÛ/>_OON:a``@Ë–-?z,§ïkŠèGrëqmhhÀ¢E=Ø»÷ÇŽ)6g` G‹58rä¶B·›[H’Ę1ÿpëV0Û¶ ¡dI#U‡¤Q¢£ßâ꺆]».³aÆoñõåZÒ'gذ°0°µµUÈ„„„pçÎJ—.ýYÍ(EPt¼z§ÉÔÔ4Ó¯ILLäòåË$$$`nnNñâÅÓ{õê~~~4hЀ… ©Ë‡……ѰaC ?Ûž\.'**Š¢E‹¦ý-!! .P¨P!,,,¾õã}Õ·|~Aõbc¨Qc2Û·ÅÖ¶Æ7oG]ÚÿKÇ@z¾tŒ}ËvÍÇÇSSSLLLÔfûÊî›?”ÚP™ÇCVÛ/£óŒ2ˆö˘––îîîôêÕ+Ó¯QÄy<£ýàkûÈ·ÿ)))\¼xH½˜~_“>n÷B… ek;Ë÷Ÿ]RRä,]zœ%KŽÓ¨Q%.졲&Êü½üž¢Î+AAAÜ¿Ÿ *|VSëSnnn˜˜˜0wîÜo~¿ÌPö÷·}ûv\]]³”øTD?¢®Çõ·|Y5nÜNNž¼ƒÏ$…NÇÚ»÷cÇîàÖ­ßÅè¢,š=Û“¿ÿöfóæA´l)®?³" ”7 “ÉÙ¸q ffé×/Íi”>'©téÒ”.]ZÙo£6ôõõ±¶¶þâcÆÆÆØÛÛô·ÚµkS»vít·§­­ýÙÉÃÀÀ€-rGÆUÈ:CCŠÉÏÓ§‘ªE!¾t ¤çKÇØ·l'7ÈξY´¡betžQÑ~ЧˆóxFûÁ×ö‘OÿÐÐPNž<™îók×®¹¹9Íš5ûâ㟶»hçTººÚŒÛ{ûZŒ厭í<ÆŒ±gèPÛ9DQç•÷…å3òêÕ+Î;‡‡‡ׯ_ÿî÷ÔDŠèGtuusíqýë¯NøúÞcúô},[檰íÚÙÕD’$¼½prª§°íæt›7Ÿcùò“Ì™ã"’YYäéy“1cþ¡^½ò¬ZÕ—"ErO=APâ”CATÇ¢<7nPØ6s¢ÐÐhúõ[‡¥ey/–¸ Ÿ×®=ÅÞ~!÷ÿ¨\̑ЄÉĤÍ›WgýúÓªEA„O´n]oïŸ>¼%kÖø`eõ;+WžâÝ»$U‡&¹JÁ‚,XÐ}û®sô¨b¦š˜¢^½rbµÃ ÄÆ&л÷ŒŒò²nÝ€YWPÑ$IbÍ_:w^FíÚeðò‡¹yYU‡¥r"¡%9Ôˆ­ðòºÃÍ›ÁªEA„Oè1fŒ=/NÇÕµ1‹{Ñ‘} IDAT¸ñ¬[wšÄÄU‡'¹FóæÕéÚµ>Ó§ï#>^1£%Û¶­Í‰w•ºR£¦JN–1hТ£ß±mÛ±d&ÄÆ¾càÀÌšuˆ©SY¿Þ CüªK-ˆ„– äPM›V¡iÓ*üòË>q2A5ed”É“;pñâ4œ-™=Û“&Mf±yó9‘Ø„l2}zGââùë¯ã Ù^‹5 ‹áÞ½P…l/§$‰1cþáÖ­`¶mBÉ’FªIíݼŒ½ýBnß~ÎÞ½?2dHs1=ó"¡%9ØÌ™ÎܸñŒ Ψ:AA2P´h~ýÕ‰ ¦Ò¶m-~ýu?––3X°à(qªOP ×¯ãñö¾ÇêÕ>Ì™s òä)¥ê°rµ¢E 0iR{Ö¬ñááÃðïÞž™Y)Š+€O ¢Ë9æÌ9Ì¡C7X·n¦¦%UŽÚÛ¸ñ NNK©VÍ/¯qXZ–WuHjG,» 9˜©iIFjͬYž4kVêÕK¨:$AA2`bRˆY³º0fL6m:˦MgY¾ü$ÎÎôë×”ºuË©:D!‹¢£ßrút ÞÞ÷8wîÏŸGP²¤E‹æ')I,  z÷nÌŽ—˜<Ù¾k[ZZZX[Wãôé@†o¡ 5ÛæÍçX±âË–¹Ò¬YUU‡£ÖÞ¼I`üø9r‹Ÿnψ-Ũ¬tˆ„– äp£G·æôé@ÜÜÖsôè81O]A4@±b?¾-#G¶b÷î«lÜx†öíS§NYúömB§NäË—GÕa éÃáÃ79rä.>>Ù†ú #,,LÕa¨Œ‰‰‰ªC¾“®®6k׺ѮÝ" Ú€»ûÐL¯$’Û÷M@@@€ªÃÈєيöS>e¶Ÿ««+®®®JÛ¾»èÑ»wcz÷nÌ•+Oزå|+½{7fäÈVªGmÉå«Wû0þ¿XYUfùòÞ-Z@Õa©=-é“jÑ ¼yóFUñ|3ccc…o366–ÄÄÜ=X__CCCU‡!(€¿..Ëiܸ ëÖ¹¡£“q =±ÿ+VÁ‚10PÎè¸W¯^)e»ÂǔՊöËÊj?…oSÈšFQ®\÷úu<»w_åŸ.øSÓ’¸º6¦sgË´Q?ÒÔß÷êæÓëÈÈ8|}9u*_ß@"#ã(YÒˆV­L±³3ÃÆ¦z¦Fæ<{öŒK—.)+ìl'I[¶<àÆH:v,O‹ßV¬k×® Ž,s¢£ßbm=gg ~ûÍù»¶ÕªÕ|lmk0}zGE§Y‚‚"pt\‚¥eÖ¯ÿúõGnõüy£G»sõj&´cĈ–hk眷2}–Ð!çºzõ Ý»¯¢]»Ú,]ê*:JAAÐp×®±sçeöí»Nr²Œ¶mkãêjEÓ¦UÅy^Áär‰[·‚9y2€“'ïrëV0::Ú4jT [Û´ha* ]ÿG’$þþÛ›9sÓ±c].ì¡QÓîvì¸Äĉ»8ztffß^°æÌœ>}Ÿ“''(0:͇£ãŠɇÇòæS¤¿dçÎËüòË>J—.̲e®Ô¬YZÕ!i‘Є\æÌ™ûô^½¬˜=»KŽÞ.‚ ¹U||"žž7Ù¾ý"W®<¡téÂôêeE·n (]º°ªÃÓXéÂjÑ¢-[šÒ¼yuòç×Wu˜jË×7á÷P¦La6lH™2š±/J’DÇŽKÑÓÓaïÞ‘ß¼oï{ôî½?¿™/^Pª·wï’èÚu%áá±92VLû‚ÈÈ8&NÜűcþ jËĉíÑ×%γJ$´!:vÌŸÁƒ7Ò¥K}æÏï–éšZ‚ ‚ ¨¿‡ÃÙ±ã»v]æõëxllªÓ³g#Ú´©Ež<â‚)#))rüüžâãsŸÔZXbÖ÷ Š`àÀ„‡Ç²jU?š6­¢ê2ÅÏï±vmÚ·¯óMÛxû6‰5&³|y:v¬«àÕ“L&gàÀ\¼ø}ûF‰ãå Ž¿Ãøñ;Ñ××eÉW7®¬ê4–Hh B.åëÈ!›07/ÇÚµý(Tèóš‚ ‚ h®äd§Nàî~oï{,h€“S=\\êciYAÕá©§O#ñõ Ä×÷çÎ= 66²e‹`cS[ÛêX[W«D§øøDÆÛÁ¿ÿÞbúôŽ Ü\Õ!eʈ[¹u+oùpûö‹±°(ÏtVptêiòäÝlß~w÷¡4kVUÕᨕ¸¸DfÌØÏöíéÞ½!¿ýæü] "¡%¹Z@@(}û®%~}¶lD¹rEU’ ‚ JÞ=ר³ç*¡T¨PŒ®]àìlA… ÅT^¶Š‹KäܹøúÞÃÇ'  òç×§I“*ØÚVÇÆ¦:•+Wu˜9Ž$I¬XqŠyóþÅÙÙ‚?ÿì®öS¬ž?ÂÚz6Ó¦92p Í7mcÆŒýœ;÷ãÇÇ+8:õ³bÅIfÏ>̲e®tîl©êpÔÊåË=z;qq‰ÌŸßvíj«:¤A$´!— C¿~k ‰bíZ75ª¤êAAP¢;wBðð¸Â~„‡¿¡AƒŠ¸¸ÔÇÑÑA.—¨U« Í›W§yóê4hPQ”`È&§NðÃÛ(_¾(6  T)#U‡”¡?þ8Ä?ÿ\âÂ…©æÍòë¹Í!›¸sgVŽéçååÏÀùùçöŒÙJÕᨄ„d,8ÊêÕ>´liÊ‚Ý16Î=õÔ”M$´AàíÛ$FÞÎÑ£·5ÊŽ1cÚ «+–ÕA„œL&“ããȾ}×ø÷ß[ÈåmÚÔ¢sgKZ¶4ÕèOPPgÏ>àìÙûœ9󀨨xLL ±µ­Mullª‰BÕ*Á€ˆˆxÃêÕýÕº†PllM›Î¢[·LŸÞ1˯ŒŒ£ví鸻¥E‹JˆPõ®_J×®+éÖ­s渨:µqöì&NÜÅë×qüò‹½zY©:¤G$´AH³eËyfÎ<@Íš¥Y¾ÜULAA„\"..‘Ço²gÏUΟˆ‘Q>œœ,èÜÙ ‹rj¿*rXX gÎ<àܹœ=û€(òåËC£F•°¶N…%ŠS«—øøD~úé¼¼ü™1£nnÍTRº6n<ÃÌ™9}zÒ7ý>¶±™Cûöu˜4©ƒ¢S­  —`iYõëÝÐÑ7ÅcbÞ2sæAvî¼L›6µ˜=» %JRuX9’Hh ‚ð‘û÷_2bÄV‚ƒ_3wnWœ-T’ ‚ Ù($$Š}û®ãáq…Â([¶NNõprªGÍš¥UQQñœ?ÿsçpæÌ= GOOKË 4mZkëªÔ«W^£G™å’$±dÉq,8J¯^VÌšÕE-Û,%EN‹ó¨Y³4«VõÍòëÇßÉãǯػw¤¢SÈÈ8—P¤H~< çĉ ™Þ¹ÍàÁ œCþüúJŽPñBéÔi)­[×dÙ2×,NË îßÉôéû8{ö..õ™2ÅCU‡•뉄– ß,>>‘U«¼YµÊ‡ô5ª5½zY¡¯Ÿ3VoA!sär‰ÀÀ—\¼øK—sñâ#ÂÃß7o,,ÊQ²¤±±ï¸~ý)q˜š–¢C‡:tè`NõêbT–¾°° Úȃa¬XÑ—V­LU„Ѳå|–,é•éiw¡¡ÑXZÎd÷î4®hxhh4K¨\Ùw÷¡èéé¨:¤lŸÈÂ…GY¿þ Õ«—`öì.Ô¯/ê « ‘Ðá»EFÆñ×_ÇÙ¶í<††y4Ȇ~ýš©ÍÐpAA+%EÎíÛϹxñ/>âòå'ÄļÅÐЀ† +aeU™F*Q§NÙ.~e29—/?áðá›>|‹°°ªV5¡}û:´m[›:uÊ云Â×%%¥0qâ.öì¹Æ¤Ií1¢¥Ê÷“Ÿ~ÚÎåËO8}zr¦W¯[÷†mÁðá-”âÄÆ&àì¼€}ûFåšß÷’$±wï5þøãII2&NlGŸ>MĈR5#Z‚ (Ì«WoX·î4›7ŸE’ oߦ ÜœâÅÅŠD‚ ‚ ÉSðó{Ê… ¸|ù1W¯ŸH±bhÔ(5yeeUSÓ’™®'#—K\¿Äá÷8rä6ÏžER¢D!Ú´©E›6µhÚ´j® "|ÝÚµ¾üþûA:v¬ÇÂ…=T:+àÙ³H¬­ç0kVz÷nœ©×ôï¿]V­ê§äèC&“Ó³ç*îÝ åØ±qé.òÓøû‡0mÚ^®^}‚«kc~þ¹=EŠˆšÁêH$´AP¸7oغõõ^Liùò“Ì›÷/ë×»ao_KÕá(UBB2›6㯿¼È›WI“:Э[•Ok¾N$´AP:¹\âôé@6n<ËÉ“w)Q¢}û6¥gÏF*½«&‚ ¹UXX,ÿkï¾Ã¢:Ó6€ßÓé UŠô"¨hâ§±kb7fMsS7É“]7ÑMÜÄôIJº&º!1šDM²cÇØh¤÷Ò§}ŒLbD†ûw]\2s†sž™K83÷yßç=þººûµk%OO„‡»aÄgŒáÚ'Vñª«kÆñã©8tè ŽOE]]3üüì1y²*ÜòñžPMM#{l.]ÊÇgŸ-Ft´FêX½z/޽Š_]s×QZ99ˆˆX~x!!}wÄÓwß%àÏþÿüçìNuÚJ©Tbÿþ$¬_ÿ#ªª°rå8¬Z5A+W¡¨hQ¯ÊϯÂÎgðÕWçP_ß‚ÿû?,^#\øf”ˆˆ¨‡de•#>>G`eg—C,Â××#F¸`äHW„…¹ÀÔT_Ó¥vH*•ãìÙL:t‡§ ¨¨66&?ÞÑÑ>=ÚF©TŽÕ«÷âë¯ÏãÕW§â©§Æ÷z EE59r]§zi)•Jxz®Æßþ6½Ó}·z[||6fÏþ‹G`ݺYš.§Çœ9“‰µk÷áêÕ"Ì›†W^™Ò'|êZD¤­­2ìÛ—„]»Î !!ŽŽƒ1{væÎ …““…¦Ë#""ÒZ­­2\¾œøø\œ?ññ9¨¬¬‡ŽŽAAŽ9Ò #F¸`øp'­”J%RRŠpôèU9rII¹HDwŤI>?~†¬é2©lݪj?gÎpüë_óz}1W^Ùƒ“'¯áôéWïºâá´iÂßßë×÷½°('§Ó¦}ˆ'lß¾¼_¶IO/Áºu?àÈ‘«ˆŠòÂë¯?//[M—E÷ˆi\ffvï¾€½{ãQVV‡#\0~¦N Ðê7ÚDDD½¡¬ìr—…øø\\¾œÖV¬¬Œâ„ÐP >þþÐÑÑܪp=­²²ÇŽ¥âèÑTœ8¡ššèæf…I“|1~¼7ÂÂ\î6ö:z4O>ù||ì°}û£½º*]~~Fþ'6l˜‹‡Ñác_~ù\¿^†o¿]ÕKÕuN]]xà=˜›`Ïž§0hPßîñÕU¥¥uظñ¾þú<¼¼lñÚkÓ0v¬§¦Ë¢ûÄ@‹ˆú ¹\Ó§3°gOþ÷¿Ë‰„xðA?L›ˆÈH/.ÝMDDžB¡Dzz âãsŸ¸¸dg—C(ÀÃÃÇ;!,Ì¡¡Îzt’L¦À… Y8v,‡'#3³ ÆÆzˆŒôFT”¢¢¼aeÅ>žýMZZ1–-Û¡P€;VÀÓӦ׎ý—¿ìÆ™3™8uju‡Á鎧±aÃÿ–öÏ^«ín¤R9.Ü‚ë×ËñãÏÂÖÖTÓ%u›úúlÝz›6‡©©>þò—0wn(„B¶:éhQŸTW׌’°"ÎË‚¡¡xÀ=„Ñ£ÝnÑ€ÐØØzsôU6rƒººfê"(h(BCâ„'ëiºÜ>+7·G^Å/¿¤àܹëhm•ÃÇg¢¢TWHˆß[ôõxì±HK+¦MKåÕ+ÇÍͭĘ1ÿÄ»ï>ŒyóBïø¸ ²0cÆÇˆ‹û[ŸY­ó…¾Æ?\ÄÏÂÛ»L¿kllÅ矟ÆgŸƒL¦ÀSOÇʕ㠧'ÑtiÔhQŸWVv?ýt?üp .dÁØx|ÐÓ§""ÂÓˆˆ¨ß(,¬F\\öÍX9¸zµ2™vvf uVÀòö¶í—ýmzCSS+Μ¹ŽcÇRqüx*rr*`` ‹Ñ£ÝÕ—ƒƒ¹¦Ë¤ûÐÚ*ÃK/}ƒï¾KÀÚµÓ±bÅØ^9îóÏ…¸¸lœ<ù×;þ~ÖÖ6ÂÛ{ ¾üòñ^ Û:òÉ'G±aÃÿ°}ûrLšä«érî[K‹ »vÁÇAcc+V¬ƒ'ŸŒ‚‰Iß^ð‚î -"Ò*%%µøé§K8pà"âãs`b2'äI¾ˆŒô‚¡!{n‘vɸzµçÏg!>^5 «¤¤‰~~ö qÂðáN u†‰¦Ëí·òó«püxŽOÅéÓhhh››¢¢¼1v¬'""\û]?¡â“OŽâí·¢E#±nÝ쿚]Ž1cÞÂgŸ-ÆCÝñqþþ¯ã™g¢ñØc½´ÝÉÁƒWðØc;ðÆ3z-ôë)R©11çðᇿ ¦¦Ë—ÆSOÇàÁ†š.z-"ÒZÅÅ5øùç>œŒ_Í€@ À¨Qn˜4É“'ûòÍ?õ)õHLÌARRââ²qñbjªáÃn6pwF` #ôõ h‚T*ÇùóY8q" §N]CJJttT+'Ž뉱c=0lØì¿£-¼‚?ÿù¿1Â[·.ëñ‡žxb'®_/ÃáÃ/ÞñÿÉÌ™ÃÓÓo¿=·GkéHbb.æÎý óæ…â­·æh¬Žû%“)°woÞÿ0JKë°xqV­škkcM—F½€õ 7n4ãĉ4üüs2ŽKEmmüüì1i’¢¢¼áïoÏ©DDÔkZ[e¸r¥‰‰¹HJÊCbb.òò*!àæf…'„…©ú_¹¹Y1 é£ÊÊnàøñTœ8‘†Ó§3PYY CŒíqã<1fŒ† é? ´û«‹ó°té6ØØ˜`çÎ?õhØ‘œ\ˆÉ“7bçÎ?aÂïvóòËß +«{÷>Ýcut¤¸¸S¦|//ü÷¿+µò=²B¡Ä÷ß'à½÷£   óç‡á¹ç&ñ÷q€a EDýŽL¦ÀùóY8|8GŽ\Evv9LMõ1v¬'¢¢¼éÅ«6DDÔ­²³ËÕáURR.’“ !•Êaff€à`G Ep°êËØx¦Ë¥{ T*‘’R„S§®!66çÏg¡¹Y WW+õè­‘#ÝØœ¿ÊË«ÄÂ…[ÑÒ"Åÿ»=·â¢E[Q_ß‚}ûþÜîö-[N`óæãHJúGÕp'uu͘9ó#À÷ß?£uÿ_¥R9¾ÿ>|¹¹˜5+/¼0ŽŽwU׌õ{íõÆðö¶ET”7"#½ê ]]±¦Ë$""-Q[ÛˆÄDUp•””‹ÄÄ 3g~Œ}ûþŒ°0õýJ¥©©Å(.®ÅâÅ[‘–öÖ-R}} ôõu ö̈M¹\+v !!¾{û¾±Êbg´´ÈðÕWç±iÓ1””ÔbÖ¬¬Z5®®Vš.4ˆ (2™ññÙꀫ­7ÆðáNˆˆpǨQn|óIDDjR©©©Eê+11YYåP*•ptŒààßÂ+??{èèðÉ@U]Ý€ØØ ÄÆ¦ãÔ©kÈϯ‚¾¾BBœᆈ7:ò=††µ´ÈðÌ3_â矓ñᇠ0}ú›·ß3>†‘‘.víZ‰–öîÃK/}}}=ú2FŽ\‡·ßž‹æf).]ÊÃ÷ß'òó7Þ×Àºº&ÖÀÛÛö¶mkÖ|‡¯¿>={žBpðÐ{>FojhhÁÎg°uë ÔÔ4bÁ‚p<ùäx­ ã¨ç0Ð"¢­¢¢¿þšqó+ÙÙåÐ××AX˜ FrCD„;ûo ……ÕHHÈU‡WW® ¹Y cc=8ª§  ……WÏ¢;ËÉ©À™3™8s&¿þš‰ÒÒZèëë 4Ô#GºaäHW\¢P(ñÆûñïŸÂš5SñÔSãïøØæf)ôô$]>Æ‘#W±té6,Z4û÷'áÆ]ûÚ IDATf´}ôvt4G~~”J@"A¡PB.W@  °ð½{~^°cG,Ö¬ù»w?‰1c<Ô÷ñůxõÕoñé§‹0cFð}£7ÔÖ6bûöXlß ©T†Å‹#ðÄQ°´4ÒtiÔ‡0Ð""úââüúk¦:ä*(¨†‘‘žzÙô°0½§76DDÔ·Ô×·àòå|$$äÜì•‹²²‹…ðð°AHˆ“z–››uM¢¡£€«mW@€#Äb^Dë-Û·ŸÂÚµû±xñH¼ùæ¬Û.`~óMNœHÃgŸ-îÒ~SS‹±uëI|óÍ…ÈåŠNý\d¤'bbžèÒ±þhäÈuÈÍ­„H$ÄÆcÞ¼P;–Š¥K·á•W¦`Õª ÷µÿžVQQ-[Nà‹/NC,aÅŠ1X±b,LMõ5]õA ´ˆˆ:›[‰³g3qîÜuÄÅå ;»‰~~ö S\¡¡Î<˜W鉈ú²–’“ qùr.^ÌÇ¥KùÈÌ,…B¡„‰zäUpðPøû;@__GÓ%S?—•U޳g3qöìu\ô¿ÿ]ƪUÿŸqžøôÓÅêßýôôDFnlßþ(|ЯÃý(•Jœ>vð÷w€¯¯C."¢.ÊϯR‡W—.åáòåÜ¸Ñ ‰D;õÈ+xxXsQê723ËÔSp…†:cÄU „À@Ç>9 G[TTÔcÚ´‘›[ àÖÉ[¶,ÅÔ©îãèÑT,[¶ r¹ò¶}ÜMlìj¸ºZu±j•mÛNáÿØÇ~]‰NNؽûÉn{ÿyíZ <<¬;=±®® »vÁ¶m±¨ªªÇ´iX¹rüýº¥xhõ°æf)®\)@BB..^ÌCrrrr* P(1x°!|}íàçg__{øúÚÁÉÉ‚W§ˆˆ”–Öáòåü[F_UU5@$ÂÃÃþþªð* À>>v\-Ž”ÌÌ2œ9ÓÖç3……Õ‹…ðñ±CX˜‹zA^<ë¼ôôLš´±ÝV&&zˆ}õ®½S¸ˆ§žÚ …âöÚª÷x(ŠÛîÏÎ~çžÿŽýOdgWtjdعs¯ÁÑqð=ç·}\ǬYŸ &æqDFzuøØÌÌ2ìØ‹Ý»/@,aÑ¢‘xôÑ12Äô¾j b ED¤ -HI)Dr²ê+%¥iiÅJå04Ô…||ìÔa—‡‡ ?¨Q¿VYY+W pùr:À*.®@ €““…zÚ`` |}í9 …芋kpþ|âãsŸƒ«W !“)àà`ް0„„8!,Ìžž6¹ØŽ¦¦Vu߬ß÷ ú=‰D„èhlÛ¶ü®ûûê«søË_¾¹-`’HDË•·Z66¦HLüû=Õ~þ|fÎü¸ÃLjDBèâí·ç`úô ûjôh*V¬øZ[e5Ê{öãâ²Q_ßcc=„„8!$D5‚+$ĉ1€e˶ãÈ‘”vGUýž@ À¦MKðÐCwÝçÖ­'ñì¿%Ô’HDðõµÇåËù·LŒˆpÇÞ½·CñÔS»ðÓO—ÚíŸ%‹  ñì³ÑxüñÈûn¶~à@ž~ú¿P(”P*•8~üexxØP]œˆ‰9‡;Ï ¸¸‘‘^X¾| ¢¢¼8º-"¢>L¡P"'§ÉɪQ m£¹*+ë! àà`wwkxxØÜü²†››5¯|QŸQ\\£yÕöoii-ÀÑq0üýíoõª¯»Må!¢{#—+píZ‰z!›s箫§)f‡áÃ0|¸ÂÃ]Ü4ÅÓ§Ó1oÞ&ª©…ZFFz8}úUXXÜýïÕÆ‡ðÞ{‡Õ¡–@ Àƒú!))¥¥µP(”HDX° o½5§ËµWW7 0ðï·…Yb±r¹sç†bõêÿƒµµq—÷ýG_}u/½ô ”J¨ŸD"ÂìÙñxq>ÿü4öïO A:xä‘0,Y2Š qPb ED¤…Š‹kœ\ˆôô¤¥• #£™™¥hll áàáa OO¸¹YÃÃCzq”õ¤üü*õˆ«¶Xõ:t0üýàïo¯±LLô5]2Ñ€VRR‹¸¸lÄÅeãÂ…lõ4E;;3„†:«®0M±¬ì~þù ~øá"Ξ½®}Ô^“u‰D„ñã½±cÇŠNíûï߇íÛO©ƒ²#\ðøã‘X±b”JU µzõT<ñDd—ëÞºõ$Ö­;™LUgÛTÂÐPg¬[7 ¾¾v]ÞçŽóÇÑfm@©||ìð裣1cF0 â¨?êy ´ˆˆú ¥R‰‚‚j\»V‚ôôdf–!=]õ}}} ÀÆÆîîÖpwW…]m£ºÌÌ 4\=i¥R‰ÜÜJõ¨«¶«¦¦B¡..–7G\©,__{ëiºl"º‹ÆÆV\¼˜w³—j$W]]3ôõuàï G8"8x(ìíÍ4]n©«k‘#WñÓO—qìØU´¶Ê ‰né­%ðé§‹0cFð]÷§T*ñüó_áÛo —+àêj‰ØØW1oÞg8{ö:är>ÿ|&MòíRJ¥ë‘—W ¥ …°µ5ÁoÌăúuùyßÉ»ïÂûï¾cÃy‘HˆÙ³‡ãƒé¶cu-"¢ °°Zp©¯Rdd”¢¶¶0x°!<=màìl gg 89Y¨ÿå6¢¾¯´´ë×ÿ€·ÞšÓí½õär²²Ê‘’Rø»¾W…¨«k‚H$„»»õ-S}}íØß¨ŸP(”HO/Abb.s‘””‡ŒŒÈd XX"(h(äˆÀ@G˜šö¿Q—ÍÍRœJ Z[娼9+VxÂÀ@‚æf9>û,/¼àߥã74È“‰iÓacÓ}#ãbbb°ÿxôÑã矓Ûí!Ö‘ÂÂ÷xq‹zMߎˉˆH#ttÄê^[$•Ê‘—W‰ìì dg—«Ã®³g3QPP¥nJjee‡Ápp0‡ìíÍ`ooÕ¿\"¼ÿš;w.æÎ«é2´šT*ž}ûÚÝVPP×^û‡§üa5..]Êk÷g «‘’RˆääBõÈ«ÂÂjªßU;Lœ8 Ï=7 ¾¾vpr²àòêDÔi†ˆŽöAt´ú¾œœ $%婮ݻ/ ¹Y CC]8 0p(‚‚áçgón«%&æ¶o?…mÛíRCôÞܹן§¶06Öƒ¾>#ÒüßJDD}†ŽŽ..–pq±lw»B¡DyyŠ‹kQVV‡ÂÂj”–ªnçæVâüù,× ¾¾Eý3zzØØ˜ÀÚÚX|µð²±1¥¥¬¬ŒÙÓ‹ú”–9ÌÍg`ìØ·  ¡T*Ñ™‹å‰H½¤<‘6ÒÑ# Àh[|P&S 3³Éɪ‘\))…8p 7n4C$ÂÍÍ ¾¾ö06Ö»md‘R©jàž‘Q†éÓ?ÆÌ™Áxýõ‡`mm¬gGD݉i ¡PkkX[›tø¸††Õ ´´Åŵ()©EIIŠŠªqîÜuÕ¢¢âÖ©[ƒéÀÊÊ––Æ<ØÖÖÆ°´4‚¹¹!llL`a¡êaee<`Vp|á…¯èˆùóÃúü²ëýÉõëeزåtu¨zcµTR©¼ÃŸU(”wl OD¤­Äb!¼¼láåe‹9s†P…T¹¹•ꩊÉÉ…8zô*$Q»+ÛÎù\ÄÁƒ—ñÒKS°bŘ^}DÔ½ØC‹ˆˆ$™LÊÊ(/¯Gii*+ëQ^^‡²²¨¬¬GYYÊËUßWTÔßò³ƒ騧;¶…\VVF077€™Ùo SÛ¾×Ó“hèYÞŸ!Cž˜™éã‰'¢°té(êðgºÒC+33§OŸÆ²e˺£Ü>£¡¡~ø!^}õÕ{ÞGLL -ZŠ«WóÔ ,ääT #£ YYe(+«SO?”HDTKÁ·)*zÿ¾Ÿ‘¶Yµê¿Ø¿?©Ã^ƒm„B!œœ#:Úk×>Ù©žQ=yÞÚ¿?lmmÖáã ±k×.L:¾¾¾·lë®ó{Š‘¶` EDDtmáWE…*üª¨h?üª®n@UUÃ-}¾U¦ »ôaaa33}uØeff€Áƒ `nnˆÁƒU·ÍÌ úĈ(gç—ÐÒ" º:.‘ˆ°lÙh¬\9äºhýøãX·nÎ;×­u÷†Ç{ kÖ¬³óí½XJJJ`oo™LvÏû¿Û ©TŽüü*ää¨VÍÊ*Çõëe8yò =ýmŒ‘„DDm~ß¾+äò:$&¾ ;;³דç­E‹aøðáxî¹ç:|Ü„ `ii‰µk×ÂËËë–m½qþ!êK4ÿn™ˆˆ¨‹…꩎>>vw}|]]*+ëQUÕˆªªzTW7ªÃ®ŠŠzTW7 ¨¨UU ¨®n@uuãmW“õô$01ч©é ‚©©>LLîü½êKõ}wL‰¬¯oQ‡Y€*Ô“Éضí¶n=‰¹sCñôÓãïi©ñþàСCXµj•ÆŽ/‘ˆîØo®3#ˆˆú›?6„ÿ#‘H‘H™L®ájh¨‹úúÈåµøöÛüéOcÕ æûª¼¼<¬_¿þ¶0‹h b EDDÔÍŒUaS;ƒwî¨-ðj ¸jjQ[Ûtóë·ïóó«n¹¿±±õ¶}‰ÅB˜˜èÃÈHÆÆƒ`d¤ =éÁÐP††zêà«í¶¡¡.LLÁÐPº¨¨¸Ñnm}IöîÇîÝ0y²/þüç‰ r¼§×J¡Pà™gžÁçŸ===<ÿüóX½z5*++1þ|L™2ï¾û.¤R)6lØ€«W¯â‹/¾€X,Æûᅦ~päÈ<ûì³ÈÈÈ€¯¯/¶nÝŠáÃU}VNœ8gŸ}iiipvvƆ 0}útõ1–/_Ž¿ýío())Áܹs±}ûvˆD"¼öÚkزe êêê]»vÁÞÞóçÏGYYæÏŸmÛ¶a̘ö{°lÛ¶ o¾ù&***0oÞˆŽöéñãtÇy+&&³fͬY³Ï=÷þóŸÿPõé²µµÅÓO? ?~<–-[†={ö ""B¡&&&ÐÕ½s{žh ` EDD4À‰D›ý·ôÕ÷%$äB$B¡¸}éóß ‰„·,‘^YÙ‚‚‚*89YÜõØ®®®·„B¾¾¾8zô¨ú¶jÔš@ €®®.Äb±úv›œœxxx¨oK$¼òÊ+€‚‚‚[¶€§§'òóóÕ·mmmÕß·íwêÔ©8vì"""`jjŠèèh¬Y³¦¦¦w}N ‰`iù[«ß×KDDÚ«;Î[………ðñ¹5|6lÕ9--- NNNêmMMMwœ^øG<ÿÐ@Â@‹ˆˆˆnSZZ‹öÞ‹DÈd ê!<Ü£F¹#,Ì~~öHD˜8ñËN…YPQQqËí²²2˜››w©V###”••Ýrßwß}‡ &ÀØØÉÉÉ·l«¬¬„‰Iû«4¶Q*•ظq#6n܈ÄÄD|ôÑG˜={6»Tõ/ÝqÞ233»í¼Õ¶_cccŒ3‡Rokjjb0EÔv†#""¢Û¤§—¢µU±X¡Põ&ÚÜÜS¦àÿ˜‰cÇ^FZÚ?±sçŸðøã‘ rìÔÃ?ÊÉÉÁ?þ¸qã¶lÙÒé«Ðm¢££qàÀõ‡ƒóçÏcÑ¢E‰DˆŽŽÆ/¿ü‚¬¬,@ii)¾ýö[Lœ8±Ã}nذ‘‘‘‹Å Ã’%KPTTtÇÇïÛ·ï¶àŒˆˆúŸî8oM˜0_ý5Š‹‹—/_Æ©S§'NDll,RSS Á÷ßßî¾xþ¡Œ#´ˆˆˆè655 €™3ƒá†#\:=êª+ÂÃÃñ /àwÞAzz:‚‚‚°råJTVVvzQQQX°`|||€¸¸8¼óÎ;044D`` ^|ñE„„„ 44‰‰‰˜7oxà”””ÜqŸK—.ÅÖ­[áïï+++ÄÇÇãwÞQo·²²ÂªU«ðá‡"$$Ï=÷{ì1øúúÞ×ëADD}[wœ·¦OŸŽ½{÷bذa DVV–úB‹»»;Þ|óM„‡‡#44iiiˆˆˆÀüùóÛÝÏ?4 ”më™ÝTSÓSSý»?ð¾üòK,X° Ó?ÓÜÜŒ³gÏÂÄÄÁÁÁ]>f›ŒŒ dggÃÛÛ·lËÉÉAzz:œœœnë©u'---¸páš››+++õ¶òòr$%%!44fff÷\ó¨–‘_¾M#"êY÷ò÷¶»Î[W®\Aii)ÂÂÂ`ll|˶ÂÂB¤¤¤ÀÎÎî¶~[=‰çÒ&¡EDDD·¹—0ë^éééuËrâîîîpwwow›““Ó- v;CWWcÆŒiw›¥¥%&MšÔÕ‰ˆ¨è®ó–ŸŸüüüÚÝfgg;;»û>QÆZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤UÄš.€ˆˆˆú—… bß¾}š.C«íÙ³GÓ% (óæÍÓt }Ï?¤MhQ·™;w®¦Kèø:õGGÇ>ñ7÷ôi;xzVÃÒ²Q£uô…ׂ¨³J¥R©é"ˆˆˆˆˆˆˆª!CžÇ§Ÿ.ÆÌ™Áš.…Hk°‡iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤UhŠu±´”IDAT‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZE T*•š.‚ˆˆˆˆˆˆh ˜1ãc\¸Õ©Ç&%­…µµIWD¤8B‹ˆˆˆˆˆˆ¨—̜ܩÇ9:f˜EÔZDDDDDDD½dÚ´@ˆD‚# ±jÕ„^ªˆH;1Ð"""""""ê%ææ5ÊBaÇǧN 襊ˆ´-""""""¢^4gN(îÔÎZ$"2Ò ¦¦ú½\‘va EDDDDDDÔ‹xÀ‰¨ÝmJ¥³g‡ôrEDÚ‡Q/24ÔŤI>‹oµ$&MòÕ@UDÚ…Q/›93r¹ü–ûÄbxÀúú:ªŠH{0Ð"""""""êe&xcÐ Ý[î“ɘ={¸†*"Ò. ´ˆˆˆˆˆˆˆz™ŽŽ=tK/-CC]Œç©Áªˆ´-""""""" ˜5+R©jÚ¡D"ÂôéAwlOD·b EDDDDDD¤#GºÂÌL •Ê1kW7$ê,ZDDDDDDD  Õ=³,-0b„‹†+"ÒbM@DDDDDD¤I)));v@€ÀÕÕ ©©W5V‡½½=LLL4v|¢®â-""""""ÐÊËËQ^^®‘c{yYbÈc,Y¬‘ãªçßÜܬ±ãÝ ŽÐ""""""¢ÏÛÛÖÖÖ9öêÕÓ0cÆpNœ8¡±cÝ+ŽÐ"""""""Ò ¶>ZDÔy ´ˆˆˆˆˆˆˆˆH«0Ð"""""""""­Â@‹ˆˆˆˆˆˆˆˆ´ -""""""""Ò* ´ˆˆˆˆˆˆˆˆH«0Ð"""""""ê'{ì1dggkº ¢Ç@‹ˆˆˆˆˆˆ¨Ÿ8tèjkk5]Qc EDDDDDDÔGŽtttŒøøxõ¶¯¾ú nnn‹Å°µµÅ;ï¼£ÞöÚk¯ÁÒÒºººˆŠŠBAAA§¶]¹r£F‚žž<<<(++ÃäÉ“±sçN˜ššÂÏÏeee˜?>bcc{á• ÒZDDDDDDDTPP€Y³faýúõ¨­­ÅìÙ³1gÎ(•JܸqË—/ǻヒ††ìÞ½ýë_Q^^ŽŸþ;vìÀÙ³gQQQccc¬_¿:ÜÖÐЀɓ'cÁ‚¨­­ÅæÍ›ñä“OâÌ™3hmmEll,öíÛ‡ƒâèÑ£°°°À–-[®É—‰¨Ç‰5]‘¶Ø½{7"##1cÆ ÀË/¿ ±XŒ¦¦&èèèàÌ™3¸¸¸@"‘ ¶¶ÍÍÍ€––!&&R©:Üöã?ÂÖÖO?ý4`üøñX¶löìÙƒ_|MMMøä“O0dÈ€P(„©©)$Iï½(DÀ@‹ˆˆˆˆˆˆ¨“rrràá᡾-‘HðÊ+¯¨o'$$`õêÕÈÌÌ„¹¹9 `êÔ©8vì"""`jjŠèèh¬Y³¦¦¦nËÉÉAZZœœœÔÇhjj”)S¨¬¶0‹h á”C""""""¢N222BMMÍ-÷}÷Ýw¨­­Å¾}û°fͼöÚkHOOG\\ôõõJ¥7nDee%öìÙƒææfÌž=û®ÛŒ1fÌäääÜòµiÓ&€@ èÅgOÔw0Ð"""""""ê¤èèh8peee€óçÏcÑ¢E‰D(((À°aÃ0f̈D"œ={uuu€ 6 22b±aaaX²d ŠŠŠîºmâĉˆEjj* ±±!!!øþûï5ðì‰úN9$""""""ꤨ¨(,X°>>>@\\ÞyçbúôéxóÍ71nÜ8èèè@"‘ÀÅÅ/¾ø">ýôSlݺþþþ°²²B||¼zÄ¥K—Þq›»»;Þ|óM„‡‡#44iiiˆˆˆÀüùóÕ¡×ïYYYaÕªUøðÃÒ«¯ Qo(•J¥¦‹ """"""Ò”'NÀÛÛÖÖÖþ™ŒŒ dggÃÛÛêûëêêpáÂXYYÁßßùùùÈÊʸqãÐÒÒ‚ . ¹¹°²²Rÿ\GÛ °°)))°³³ƒÏë*//GRRBCCaffÖcÏŸHÓhÑ€6ÐþüI;±‡iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…iZDDDDDDDD¤Uh‘Va EDDDDDDDDZ…i±¦ """"""Ò´òòr…óA¤-hÑ€WQQŠŠ M—AD$P*•JMADDDDDDDDÔYOIDDDDDDDDZ…iZDDDDDDDD¤UÄ.iº""""""""¢ÎúàKAy/CîŸIEND®B`‚bm3.7.0/doc/html/a00079.html0000644000175000017500000001650111365042652013436 0ustar tlktlk BitMagic: bm::random_subset< BV > Class Template Reference

bm::random_subset< BV > Class Template Reference
[Set algorithms]

#include <bmrandom.h>

Public Member Functions

 random_subset ()
 ~random_subset ()
void sample (BV &bv_out, const BV &bv_in, unsigned count)
 Get random subset of input vector.

Detailed Description

template<class BV>
class bm::random_subset< BV >

Class implements algorithm for random subset generation.

Implemented method tries to be fair, but doesn't guarantee true randomeness.

Performace note: Class holds temporary buffers and variables, so it is recommended to re-use instances over multiple calls.

Examples:

sample10.cpp.

Definition at line 53 of file bmrandom.h.


Constructor & Destructor Documentation

template<class BV >
bm::random_subset< BV >::random_subset (  )  [inline]

Definition at line 115 of file bmrandom.h.

template<class BV >
bm::random_subset< BV >::~random_subset (  )  [inline]

Definition at line 125 of file bmrandom.h.


Member Function Documentation

template<class BV >
void bm::random_subset< BV >::sample ( BV &  bv_out,
const BV &  bv_in,
unsigned  count 
) [inline]

Get random subset of input vector.

Parameters:
bv_out - destination vector
bv_in - input vector
count - number of bits to pick

Definition at line 134 of file bmrandom.h.

Referenced by main().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00205.map0000644000175000017500000000021211365042646013231 0ustar tlktlk bm3.7.0/doc/html/a00054.html0000644000175000017500000002600211365042651013423 0ustar tlktlk BitMagic: bm::decoder_base Class Reference

bm::decoder_base Class Reference

Base class for all decoding functionality. More...

#include <encoding.h>

Inheritance diagram for bm::decoder_base:

Public Member Functions

 decoder_base (const unsigned char *buf)
BMFORCEINLINE unsigned char get_8 ()
 Reads character from the decoding buffer.
BMFORCEINLINE unsigned size () const
 Returns size of the current decoding stream.
BMFORCEINLINE void seek (int delta)
 change current position

Protected Attributes

const unsigned char * buf_
const unsigned char * start_

Detailed Description

Base class for all decoding functionality.

Definition at line 74 of file encoding.h.


Constructor & Destructor Documentation

bm::decoder_base::decoder_base ( const unsigned char *  buf  )  [inline]

Definition at line 77 of file encoding.h.

References buf_, and start_.


Member Function Documentation

BMFORCEINLINE unsigned char bm::decoder_base::get_8 (  )  [inline]

Reads character from the decoding buffer.

Definition at line 79 of file encoding.h.

References buf_.

Referenced by bm::operation_deserializer< BV >::deserialize(), and bm::deserialize().

BMFORCEINLINE void bm::decoder_base::seek ( int  delta  )  [inline]

change current position

Definition at line 85 of file encoding.h.

References buf_.

Referenced by bm::decoder_little_endian::get_16(), bm::decoder::get_16(), bm::decoder_little_endian::get_32(), and bm::decoder::get_32().

BMFORCEINLINE unsigned bm::decoder_base::size (  )  const [inline]

Returns size of the current decoding stream.

Definition at line 82 of file encoding.h.

References buf_, and start_.


Field Documentation

const unsigned char* bm::decoder_base::start_ [protected]

Definition at line 88 of file encoding.h.

Referenced by decoder_base(), and size().


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00249.png0000644000175000017500000000733711365042651013263 0ustar tlktlk‰PNG  IHDR‹u~–bKGDÿÿÿ ½§“”IDATxœíÝ}LSgûðoi¡‚UAqà˦ÂT"JÐBÄEf–è\ Ëq3ÑÅ-.çâ[æË”çgœèâ/*“!ÎCA}œ¼8|ÃêÛ"ˆøT¡ìõûÃy+/ µU¯Ï÷¹á¾.N¿´·í‘#!"c/Wè`ëØëƒÃÂDã°0Ñd/Ðh4¸pá‚-zavD¥Rµ9Ö&,X´hÑ+iˆÙ¯öþÝÓ&,}1{ó:t¨Ã' Þ³0Ñ8,L4 ÃÂDã°0Ñ8,L´‡åÖ­[øùçŸ-ÐJ×;v þùçk[Ï–ç®;z–²²2ìٳǽtYrr2Î;÷ÚÖ³å¹ë~b¢Y$,&“ Ë—/‡»»; €ï¿ÿðàÁDFFbÇŽðññ§§'öíÛ‡¯¿þžžžðööFRR’°Î¶mÛ°xñâÇIIIðó󃳳3æÎ‹ºº:aîòåË C¯^½0bÄ:tH˜;uêÆŒ'''£°°P˜ËËËÃØ±c!—Ë1jÔ(;v¬Gõjjj0cÆ 8p …×®]ëÖ¹€Ã‡# 2™ ÞÞÞØ¶m›0·fÍxzzB.—cÚ´iÐét¢ÎEÐ ”œœLUUUäàà@ß~û-™L&Ú½{7 Í›7“Éd¢­[·R@@€°Ö±cÇhçÎíŽ/]ºDr¹œRRR¨©©‰%$$PCCy{{Ó®]»È`0PNN¹»»ÓÙ³gI«Õ’››¥¦¦Rcc#mܸ‘†J&“‰ª««ÉÍÍöïßOƒÒÒÒÈÅÅ…ÊÊÊzTÏÙÙ™æÍ›GçÎ£æææn»úúz’Ë唚šJƒNŸ>MTSSC™™™äããC7oÞ¤úúzš3g-]º”ˆ¨ÓÞÄèäñ¿h‘°ôíÛ—ŒF£p,>>žæÍ›GUUU€ˆˆH­V“L&£––""*..¦Šª³jÕ*Z¸p¡Ù±   JHH ¤¤$ 6›[¾|9}ùå—ôÃ?ÐìÙ³…ãF£‘6oÞL?¦={öPxx¸Ù÷ÍŸ?ŸÖ­[×ízZ­–PeeåK¦ÎÎÁ` ¢¢"á¸V«%¹\N7oÞ¤´´4òññ¡+W®ÑÓ€èõz"¢N{£³°tøAbWøûûÃÑÑQ"''G»ºº$ är9d2™0«²²cÆŒ1;6zôh@EEÊÊÊàçç'Ì555áƒ>@kk+FŒ!wttÄ7ß|Ðétfs0räHhµZ455u«888ÀÇÇGÔÏÕѹ“Ëå(**ÂêÕ«qëÖ-ôë×&“ 0kÖ,äææbòäÉP(ˆŠŠB||< ÅK{ë ‹„¥¶¶Öl\SSƒ~ýúYbiAß¾}QSSÓn]wwwL:™™™Â\SS$ Ö¯_ßæûŽ= ¥R www\¹rÅlîÁƒèÓ§zõêÕ­zµµµ]ú%èèÜ¥¥¥!>>)))˜ÓÔÔD¹¹¹f›2k(--¥ììlª««k3§Óé(++KØø=O­VSVVi4š6s·oߦ¬¬,ºqã†ÅêuEGç®®®Ž²³³é¯¿þ"""FCyyyDDd0èÌ™3tòäIºwïžÅzë,,"óKâž])E|¥\UUU™mô_„±cǾŽ^®“Ç¿Ð"\Ö>GGGxxxt8ïââò »é9‹yxx ::ÚÖmX 6ÄDã°0Ñ8,L4 ÃÂDã°´£±Ñhëì‡åFc+¶l9aë6ìR‡ï³XâSÊב³ó»P(f`ÈZmÝŽ]i–)S¦àÈ‘#¶èÅ.üûß—Q^þ«W'bܸþ¶nÇ®´ùlèmÖÐÐŒÀÀ50[1cF öïÿÔÖ-Ùþ›rÏË̼Œ––'€œœëxôÈ`ãŽì ‡å9¿þzQØ«™L&œ8QjãŽì ‡åÿýïcœ={K¸Î’“ ;ùŽ·‡å—ÌÆ&á?ÿ¹…ššG6êÈþpXþ‘œ|±Í?dd”ب#ûÃa ÓéQR¢Éd“‰ðë¯üRô ‡@zz ¤Ò¶oBšL„ÒRîÜy`ƒ®ì‡À‘#ñ䉩Ý9™L‚´´âWÜ‘}zëâVWC­®FGoM¶´’“/¾Ú¦ìÔ[–´´8:J;ù Byù}\¿^õÊz²Wo}Xþõ¯“»¶IM-zÝØ··úêþ{÷ꃡnn½••zßÁìÙㄯÓ룵õåzÓñ‰/HM-Ʋeÿ‡»wlÝŠ½á™x&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰Æaa¢Yí/?½®÷+rrò«ëø×¶ÿ>ú´ÊÚVý3aS¦LR©´f +zßÖ tÙ¦M›¬º¾UȈk–`Ï)((°êú¼ga¢qX˜h&‡…‰Æaa¢ÙEX*++‘™™i“ÚgÏžEYYÙ[Ï’ì",ééé6©——‡+W®¼±õ,É.ÂÂ^vs£"Bbb"233áää„ùóçcÑ¢E¨¯¯ÇºuëŠ_~ù­­­ˆ‹‹CEE²²² •J±lÙ2LŸ>””„Û·ocõêÕíŽsss±wï^èõzL˜0Áìn«åå娱cÔj5ˆØØXá袢"$&&¢²²Æ ÃW_}…‘#G.]º„ÄÄDh4x{{#..aaaÝ®÷ðáClÚ´ QQQعs'~üñG :ÔúÂKØÍ3Ë7 •JqôèQ¬_¿‡ÆéÓ§ÑÚÚŠ’’444 99Ÿ|ò ¶nÝ …BÔÔT¨T*ìÛ·OXÇ××Wx_ÿý÷ߨ¼y3–-[†ŒŒ Œ7çÏŸ ¬Zµ ‘‘‘øí·ß°råJìØ±W¯^Åýû÷±víZ|öÙg8~ü8ÂÃÃñÝw߈ ×ë•J…'N ..6l€V«ív½––\¾|زe  ô ‰ŽÙÍ3KïÞ½±dÉÈd2aÞ¼yÈÉÉAPPˆ .„D"AHH¤R)bbb„ñ‘#G„u&Ožl¶îóãS§N!<<S§NÌŸ?¿ÿþ;àüùóèׯæÎ ?~<¢££‘——OOOŒ7S¦L,X°R©F£@tt4 ,, ¡¡¡øã?ÐÔÔÔ­z111hnnÆŠ+п‹Ÿëî²›°øøø@&û_;Æ CqñÿîMØ«×ÓûI$8::B*• c±jkkáççgvìÙÓ{uu54 ,X Ì577#44Ož<ÁàÁƒ…ã2™ .Ü¿C† 1[sÈ!¨©©Asss·ê=û¹ì)(€…¥®®ÎlüðáC¸¹¹Y´†››ôz}»u]\\ðÞ{ïaëÖ­Â\ss3$ 8Ðæûòóó ܾ}Ûl®¾¾®®®prrêV½ºº:»¼DÂnö,ÕÕÕÂëycc#ÒÓÓ…ß²®P«Õ¸xñb»ãàà`äææâÁƒ§·Þ-//Gii) $$¥¥¥¸s瀧\\\òóó‚sçÎááÇ€ëׯcÓ¦MpppÀûï¿ÂÂBTU=½‡¢^¯Ç™3gÒízöÊnžYFÝ»w#)) :ÇǬY³P__ߥuNž<‰k×®a„ mÆaaa8}ú4bcc€»wï"$$0xð`|úé§øâ‹/0jÔ(h4búôéH$P*•ˆ…¿¿?ÊÊʰtéR8;;# 111X²d FµZiÓ¦aâĉ ¢nÕ«­­µìɵ«ÝöN"‘`Íš5]ºøÉh4âêÕ«èÝ»7†n¶<ý ×ëõx÷Ýwáââb6W[[‹ŠŠ xxx´Ùoèt:TWWÃ×× 0›«®®†N§ƒ———Ùþ¦'õºjãÆ8p µ®”+´›gprrÂøñã­^çwÞépÎÃÃíÎ <¸Mžñòò‚———Eëٻٳ0ûÇaa¢qX˜h&‡…‰Æaa¢qX˜h&‡…‰fÕ·ûð_}…òòò¬ùã­÷v¿J¥²ÖÒ¬*• “&M²ÚúV{faoœBÞ³0Ñ8,L4 íÿ?mãn†íIIEND®B`‚bm3.7.0/doc/html/a00213.md50000644000175000017500000000004011365042646013137 0ustar tlktlkb233de2fd8844dfee1f145ffb2b82b57bm3.7.0/doc/html/a00202.map0000644000175000017500000000024211365042646013231 0ustar tlktlk bm3.7.0/doc/html/a00095_source.html0000644000175000017500000012032211365042627015013 0ustar tlktlk BitMagic: bmrandom.h Source File
Generated on Sun Apr 25 09:37:27 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00043.html0000644000175000017500000043242011365042650013425 0ustar tlktlk BitMagic: bm::bvector< Alloc > Class Template Reference

bm::bvector< Alloc > Class Template Reference
[The Main bvector<> Group]

bitvector with runtime compression of bits. More...

#include <bm.h>

Data Structures

class  counted_enumerator
 Constant input iterator designed to enumerate "ON" bits counted_enumerator keeps bitcount, ie number of ON bits starting from the position 0 in the bit string up to the currently enumerated bit. More...
class  enumerator
 Constant input iterator designed to enumerate "ON" bits. More...
class  insert_iterator
 Output iterator iterator designed to set "ON" bits based on input sequence of integers (bit indeces). More...
class  iterator_base
 Base class for all iterators. More...
class  reference
 Class reference implements an object for bit assignment. More...
struct  statistics
 Statistical information about bitset's memory allocation details. More...

Public Types

enum  optmode { opt_free_0 = 1, opt_free_01 = 2, opt_compress = 3 }
 

Optimization mode Every next level means additional checks (better compression vs time).

More...
typedef Alloc allocator_type
typedef blocks_manager< Alloc > blocks_manager_type
typedef bm::id_t size_type
 Type used to count bits in the bit vector.
typedef bool const_reference

Public Member Functions

 bvector (strategy strat=BM_BIT, const gap_word_t *glevel_len=bm::gap_len_table< true >::_len, size_type bv_size=bm::id_max, const Alloc &alloc=Alloc())
 Constructs bvector class.
 bvector (size_type bv_size, strategy strat=BM_BIT, const gap_word_t *glevel_len=bm::gap_len_table< true >::_len, const Alloc &alloc=Alloc())
 Constructs bvector class.
 bvector (const bvector< Alloc > &bvect)
bvectoroperator= (const bvector< Alloc > &bvect)
reference operator[] (bm::id_t n)
bool operator[] (bm::id_t n) const
void operator&= (const bvector< Alloc > &bvect)
void operator^= (const bvector< Alloc > &bvect)
void operator|= (const bvector< Alloc > &bvect)
void operator-= (const bvector< Alloc > &bvect)
bool operator< (const bvector< Alloc > &bvect) const
bool operator<= (const bvector< Alloc > &bvect) const
bool operator> (const bvector< Alloc > &bvect) const
bool operator>= (const bvector< Alloc > &bvect) const
bool operator== (const bvector< Alloc > &bvect) const
bool operator!= (const bvector< Alloc > &bvect) const
bvector< Alloc > operator~ () const
Alloc get_allocator () const
bool set_bit (bm::id_t n, bool val=true)
 Sets bit n.
bool set_bit_and (bm::id_t n, bool val=true)
 Sets bit n using bit AND with the provided value.
bool set_bit_conditional (bm::id_t n, bool val, bool condition)
 Sets bit n only if current value is equal to the condition.
bvector< Alloc > & set (bm::id_t n, bool val=true)
 Sets bit n if val is true, clears bit n if val is false.
bvector< Alloc > & set ()
 Sets every bit in this bitset to 1.
bvector< Alloc > & set_range (bm::id_t left, bm::id_t right, bool value=true)
 Sets all bits in the specified closed interval [left,right] Interval must be inside the bvector's size. This method DOES NOT resize vector.
insert_iterator inserter ()
void clear_bit (bm::id_t n)
 Clears bit n.
void clear (bool free_mem=false)
 Clears every bit in the bitvector.
bvector< Alloc > & reset ()
 Clears every bit in the bitvector.
bm::id_t count () const
 Returns count of bits which are 1.
size_type capacity () const
 Returns bvector's capacity (number of bits it can store).
size_type size () const
 return current size of the vector (bits)
void resize (size_type new_size)
 Change size of the bvector.
unsigned count_blocks (unsigned *arr) const
 Computes bitcount values for all bvector blocks.
bm::id_t count_range (bm::id_t left, bm::id_t right, unsigned *block_count_arr=0) const
 Returns count of 1 bits in the given diapason.
bm::id_t recalc_count ()
void forget_count ()
bvector< Alloc > & invert ()
 Inverts all bits.
bool get_bit (bm::id_t n) const
 returns true if bit n is set and false is bit n is 0.
bool test (bm::id_t n) const
 returns true if bit n is set and false is bit n is 0.
bool any () const
 Returns true if any bits in this bitset are set, and otherwise returns false.
bool none () const
 Returns true if no bits are set, otherwise returns false.
bvector< Alloc > & flip (bm::id_t n)
 Flips bit n.
bvector< Alloc > & flip ()
 Flips all bits.
void swap (bvector< Alloc > &bv)
 Exchanges content of bv and this bitvector.
bm::id_t get_first () const
 Gets number of first bit which is ON.
bm::id_t get_next (bm::id_t prev) const
 Finds the number of the next bit ON.
bm::id_t extract_next (bm::id_t prev)
 Finds the number of the next bit ON and sets it to 0.
void calc_stat (struct bm::bvector< Alloc >::statistics *st) const
 Calculates bitvector statistics.
bm::bvector< Alloc > & bit_or (const bm::bvector< Alloc > &vect)
 Logical OR operation.
bm::bvector< Alloc > & bit_and (const bm::bvector< Alloc > &vect)
 Logical AND operation.
bm::bvector< Alloc > & bit_xor (const bm::bvector< Alloc > &vect)
 Logical XOR operation.
bm::bvector< Alloc > & bit_sub (const bm::bvector< Alloc > &vect)
 Logical SUB operation.
void set_new_blocks_strat (strategy strat)
 Sets new blocks allocation strategy.
strategy get_new_blocks_strat () const
 Returns blocks allocation strategy.
void optimize (bm::word_t *temp_block=0, optmode opt_mode=opt_compress, statistics *stat=0)
 Optimize memory bitvector's memory allocation.
void optimize_gap_size ()
 Optimize sizes of GAP blocks.
void set_gap_levels (const gap_word_t *glevel_len)
 Sets new GAP lengths table. All GAP blocks will be reallocated to match the new scheme.
int compare (const bvector< Alloc > &bvect) const
 Lexicographical comparison with a bitvector.
bm::word_tallocate_tempblock () const
 Allocates temporary block of memory.
void free_tempblock (bm::word_t *block) const
 Frees temporary block of memory.
enumerator first () const
 Returns enumerator pointing on the first non-zero bit.
enumerator end () const
 Returns enumerator pointing on the next bit after the last.
const bm::word_tget_block (unsigned nb) const
void combine_operation (const bm::bvector< Alloc > &bvect, bm::operation opcode)
void combine_operation_with_block (unsigned nb, const bm::word_t *arg_blk, int arg_gap, bm::operation opcode)
const blocks_manager_typeget_blocks_manager () const
blocks_manager_typeget_blocks_manager ()

Friends

class iterator_base
class enumerator

Detailed Description

template<class Alloc>
class bm::bvector< Alloc >

bitvector with runtime compression of bits.

Examples:

sample1.cpp, sample10.cpp, sample2.cpp, sample3.cpp, sample4.cpp, sample5.cpp, sample6.cpp, sample8.cpp, and sample9.cpp.

Definition at line 120 of file bm.h.


Member Typedef Documentation

template<class Alloc>
typedef Alloc bm::bvector< Alloc >::allocator_type

Definition at line 124 of file bm.h.

template<class Alloc>
typedef blocks_manager<Alloc> bm::bvector< Alloc >::blocks_manager_type

Definition at line 125 of file bm.h.

template<class Alloc>
typedef bool bm::bvector< Alloc >::const_reference

Definition at line 225 of file bm.h.

template<class Alloc>
typedef bm::id_t bm::bvector< Alloc >::size_type

Type used to count bits in the bit vector.

Definition at line 127 of file bm.h.


Member Enumeration Documentation

template<class Alloc>
enum bm::bvector::optmode

Optimization mode Every next level means additional checks (better compression vs time).

See also:
optimize
Enumerator:
opt_free_0 

Free unused 0 blocks.

opt_free_01 

Free unused 0 and 1 blocks.

opt_compress 

compress blocks when possible

Definition at line 1350 of file bm.h.


Constructor & Destructor Documentation

template<class Alloc>
bm::bvector< Alloc >::bvector ( strategy  strat = BM_BIT,
const gap_word_t glevel_len = bm::gap_len_table<true>::_len,
size_type  bv_size = bm::id_max,
const Alloc &  alloc = Alloc() 
) [inline]

Constructs bvector class.

Parameters:
strat - operation mode strategy, BM_BIT - default strategy, bvector use plain bitset blocks, (performance oriented strategy). BM_GAP - memory effitent strategy, bvector allocates blocks as array of intervals(gaps) and convert blocks into plain bitsets only when enthropy grows.
glevel_len 
bv_size 
  • bvector size (number of bits addressable by bvector), bm::id_max means "no limits" (recommended). bit vector allocates this space dynamically on demand.
See also:
bm::gap_len_table bm::gap_len_table_min set_new_blocks_strat

Definition at line 839 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::bvector ( size_type  bv_size,
strategy  strat = BM_BIT,
const gap_word_t glevel_len = bm::gap_len_table<true>::_len,
const Alloc &  alloc = Alloc() 
) [inline]

Constructs bvector class.

Definition at line 851 of file bm.h.

template<class Alloc>
bm::bvector< Alloc >::bvector ( const bvector< Alloc > &  bvect  )  [inline]

Definition at line 861 of file bm.h.


Member Function Documentation

template<class Alloc>
bm::word_t* bm::bvector< Alloc >::allocate_tempblock (  )  const [inline]

Allocates temporary block of memory.

Temp block can be passed to bvector functions requiring some temp memory for their operation. (like serialize)

Note:
method is marked const, but it's not quite true, since it can in some cases modify the state of the block allocator (if it has a state). (Can be important in MT programs).
See also:
free_tempblock

Definition at line 1411 of file bm.h.

template<class Alloc>
bool bm::bvector< Alloc >::any (  )  const [inline]

Returns true if any bits in this bitset are set, and otherwise returns false.

Returns:
true if any bit is set

Definition at line 1174 of file bm.h.

References bm::for_each_nzblock_if().

Referenced by bm::bvector< Alloc >::none().

template<class Alloc>
bm::bvector<Alloc>& bm::bvector< Alloc >::bit_and ( const bm::bvector< Alloc > &  vect  )  [inline]

Logical AND operation.

Parameters:
vect - Argument vector.

Definition at line 1293 of file bm.h.

References bm::BM_AND, BMCOUNT_VALID, and bm::bvector< Alloc >::combine_operation().

Referenced by bm::operator&(), and bm::bvector< Alloc >::operator&=().

template<class Alloc>
bm::bvector<Alloc>& bm::bvector< Alloc >::bit_or ( const bm::bvector< Alloc > &  vect  )  [inline]

Logical OR operation.

Parameters:
vect - Argument vector.

Definition at line 1282 of file bm.h.

References bm::BM_OR, BMCOUNT_VALID, and bm::bvector< Alloc >::combine_operation().

Referenced by bm::bvector< Alloc >::operator=(), bm::operator|(), and bm::bvector< Alloc >::operator|=().

template<class Alloc>
bm::bvector<Alloc>& bm::bvector< Alloc >::bit_sub ( const bm::bvector< Alloc > &  vect  )  [inline]

Logical SUB operation.

Parameters:
vect - Argument vector.

Definition at line 1315 of file bm.h.

References bm::BM_SUB, BMCOUNT_VALID, and bm::bvector< Alloc >::combine_operation().

Referenced by bm::operator-(), and bm::bvector< Alloc >::operator-=().

template<class Alloc>
bm::bvector<Alloc>& bm::bvector< Alloc >::bit_xor ( const bm::bvector< Alloc > &  vect  )  [inline]

Logical XOR operation.

Parameters:
vect - Argument vector.

Definition at line 1304 of file bm.h.

References bm::BM_XOR, BMCOUNT_VALID, and bm::bvector< Alloc >::combine_operation().

Referenced by bm::operator^(), and bm::bvector< Alloc >::operator^=().

template<typename Alloc >
void bm::bvector< Alloc >::calc_stat ( struct bm::bvector< Alloc >::statistics st  )  const [inline]

Calculates bitvector statistics.

Parameters:
st - pointer on statistics structure to be filled in.

Function fills statistics structure containing information about how this vector uses memory and estimation of max. amount of memory bvector needs to serialize itself.

See also:
statistics

Definition at line 2044 of file bm.h.

References bm::bv_statistics::bit_blocks, BM_IS_GAP, BMGAP_PTR, bm::bv_statistics::gap_blocks, bm::gap_capacity(), bm::gap_length(), bm::bv_statistics::gap_length, bm::gap_levels, bm::bv_statistics::gap_levels, IS_VALID_ADDR, bm::bv_statistics::max_serialize_mem, bm::bv_statistics::memory_used, and bm::set_array_size.

Referenced by bm::bvector< Alloc >::optimize_gap_size(), print_statistics(), and serialize_bvector().

template<class Alloc>
size_type bm::bvector< Alloc >::capacity (  )  const [inline]

Returns bvector's capacity (number of bits it can store).

Definition at line 1081 of file bm.h.

template<class Alloc>
void bm::bvector< Alloc >::clear ( bool  free_mem = false  )  [inline]

Clears every bit in the bitvector.

Parameters:
free_mem if "true" (default) bvector frees the memory, otherwise sets blocks to 0.

Definition at line 1055 of file bm.h.

References BMCOUNT_SET.

Referenced by main(), bm::bvector< Alloc >::operator=(), and bm::bvector< Alloc >::reset().

template<class Alloc>
void bm::bvector< Alloc >::clear_bit ( bm::id_t  n  )  [inline]

Clears bit n.

Parameters:
n - bit's index to be cleaned.

Definition at line 1043 of file bm.h.

template<class Alloc >
void bm::bvector< Alloc >::combine_operation ( const bm::bvector< Alloc > &  bvect,
bm::operation  opcode 
) [inline]
template<class Alloc>
void bm::bvector< Alloc >::combine_operation_with_block ( unsigned  nb,
const bm::word_t arg_blk,
int  arg_gap,
bm::operation  opcode 
) [inline]

Definition at line 1490 of file bm.h.

References BM_IS_GAP, and bm::bvector< Alloc >::get_block().

template<typename Alloc >
int bm::bvector< Alloc >::compare ( const bvector< Alloc > &  bvect  )  const [inline]

Lexicographical comparison with a bitvector.

Function compares current bitvector with the provided argument bit by bit and returns -1 if our bitvector less than the argument, 1 - greater, 0 - equal.

Definition at line 1914 of file bm.h.

References bm::bit_is_all_zero(), bm::bitcmp(), BM_IS_GAP, BMGAP_PTR, bm::gap_convert_to_bitset(), bm::gap_is_all_zero(), bm::gap_max_bits, bm::gapcmp(), bm::set_array_size, and bm::set_block_size_op.

Referenced by bm::bvector< Alloc >::operator!=(), bm::bvector< Alloc >::operator<(), bm::bvector< Alloc >::operator<=(), bm::bvector< Alloc >::operator==(), bm::bvector< Alloc >::operator>(), and bm::bvector< Alloc >::operator>=().

template<typename Alloc >
bm::id_t bm::bvector< Alloc >::count (  )  const [inline]

Returns count of bits which are 1.

Returns:
Total number of bits ON.

Definition at line 1647 of file bm.h.

References BMCOUNT_SET, and bm::for_each_nzblock2().

Referenced by bm::bvector< Alloc >::count_range(), main(), print_statistics(), bm::bvector< Alloc >::recalc_count(), and serialize_bvector().

template<class Alloc>
unsigned bm::bvector< Alloc >::count_blocks ( unsigned *  arr  )  const [inline]

Computes bitcount values for all bvector blocks.

Parameters:
arr - pointer on array of block bit counts
Returns:
Index of the last block counted. This number +1 gives you number of arr elements initialized during the function call.

Definition at line 1106 of file bm.h.

References bm::for_each_nzblock().

template<typename Alloc >
bm::id_t bm::bvector< Alloc >::count_range ( bm::id_t  left,
bm::id_t  right,
unsigned *  block_count_arr = 0 
) const [inline]

Returns count of 1 bits in the given diapason.

Parameters:
left - index of first bit start counting from
right - index of last bit
block_count_arr - optional parameter (bitcount by bvector blocks) calculated by count_blocks method. Used to improve performance of wide range searches
Returns:
Total number of bits ON.

Definition at line 1687 of file bm.h.

References bm::bit_block_calc_count_range(), bm::bits_in_block, BM_ASSERT, BM_IS_GAP, BMGAP_PTR, bm::bvector< Alloc >::count(), bm::gap_bit_count_range(), bm::set_block_mask, and bm::set_block_shift.

template<class Alloc>
bvector::enumerator bm::bvector< Alloc >::end (  )  const [inline]

Returns enumerator pointing on the next bit after the last.

Definition at line 1446 of file bm.h.

Referenced by main().

template<class Alloc>
bm::id_t bm::bvector< Alloc >::extract_next ( bm::id_t  prev  )  [inline]

Finds the number of the next bit ON and sets it to 0.

Parameters:
prev - Index of the previously found bit.
Returns:
Index of the next bit which is ON or 0 if not found.
See also:
get_first, get_next,

Definition at line 1259 of file bm.h.

References bm::id_max.

template<class Alloc>
enumerator bm::bvector< Alloc >::first (  )  const [inline]

Returns enumerator pointing on the first non-zero bit.

Definition at line 1436 of file bm.h.

Referenced by main().

template<class Alloc>
bvector<Alloc>& bm::bvector< Alloc >::flip (  )  [inline]

Flips all bits.

Returns:
*this

Definition at line 1211 of file bm.h.

References bm::bvector< Alloc >::invert().

template<class Alloc>
bvector<Alloc>& bm::bvector< Alloc >::flip ( bm::id_t  n  )  [inline]

Flips bit n.

Returns:
*this

Definition at line 1201 of file bm.h.

References bm::bvector< Alloc >::get_bit().

template<class Alloc>
void bm::bvector< Alloc >::forget_count (  )  [inline]

Disables count cache. Next call to count() or recalc_count() restores count caching.

Note:
Works only if BMCOUNTOPT enabled(defined). Othewise does nothing.

Definition at line 1142 of file bm.h.

References BMCOUNT_VALID.

template<class Alloc>
void bm::bvector< Alloc >::free_tempblock ( bm::word_t block  )  const [inline]

Frees temporary block of memory.

Note:
method is marked const, but it's not quite true, since it can in some cases modify the state of the block allocator (if it has a state). (Can be important in MT programs).
See also:
allocate_tempblock

Definition at line 1426 of file bm.h.

template<class Alloc>
Alloc bm::bvector< Alloc >::get_allocator (  )  const [inline]

Definition at line 945 of file bm.h.

template<typename Alloc >
bool bm::bvector< Alloc >::get_bit ( bm::id_t  n  )  const [inline]

returns true if bit n is set and false is bit n is 0.

Parameters:
n - Index of the bit to check.
Returns:
Bit value (1 or 0)

Definition at line 1804 of file bm.h.

References BM_ASSERT, BM_IS_GAP, BMGAP_PTR, bm::gap_test(), bm::set_block_mask, bm::set_block_shift, bm::set_word_mask, and bm::set_word_shift.

Referenced by bm::bvector< Alloc >::flip(), bm::bvector< Alloc >::operator[](), and bm::bvector< Alloc >::test().

template<class Alloc>
const bm::word_t* bm::bvector< Alloc >::get_block ( unsigned  nb  )  const [inline]

Definition at line 1453 of file bm.h.

Referenced by bm::bvector< Alloc >::combine_operation_with_block().

template<class Alloc>
blocks_manager_type& bm::bvector< Alloc >::get_blocks_manager (  )  [inline]

Definition at line 1534 of file bm.h.

template<class Alloc>
const blocks_manager_type& bm::bvector< Alloc >::get_blocks_manager (  )  const [inline]

Definition at line 1529 of file bm.h.

template<class Alloc>
bm::id_t bm::bvector< Alloc >::get_first (  )  const [inline]

Gets number of first bit which is ON.

Returns:
Index of the first 1 bit.
See also:
get_next, extract_next

Definition at line 1238 of file bm.h.

Referenced by main(), and print_bvector().

template<class Alloc>
strategy bm::bvector< Alloc >::get_new_blocks_strat (  )  const [inline]

Returns blocks allocation strategy.

Returns:
- Strategy code 0 - bitblocks allocation only. 1 - Blocks mutation mode (adaptive algorithm)
See also:
set_new_blocks_strat

Definition at line 1339 of file bm.h.

template<class Alloc>
bm::id_t bm::bvector< Alloc >::get_next ( bm::id_t  prev  )  const [inline]

Finds the number of the next bit ON.

Parameters:
prev - Index of the previously found bit.
Returns:
Index of the next bit which is ON or 0 if not found.
See also:
get_first, extract_next

Definition at line 1247 of file bm.h.

References bm::id_max.

Referenced by main(), and print_bvector().

template<class Alloc>
insert_iterator bm::bvector< Alloc >::inserter (  )  [inline]

Function erturns insert iterator for this bitvector

Definition at line 1033 of file bm.h.

Referenced by main().

template<typename Alloc >
bvector< Alloc > & bm::bvector< Alloc >::invert (  )  [inline]

Inverts all bits.

Definition at line 1781 of file bm.h.

References BM_SET_MMX_GUARD, BMCOUNT_VALID, bm::for_each_block(), and bm::id_max.

Referenced by bm::bvector< Alloc >::flip().

template<class Alloc>
bool bm::bvector< Alloc >::none (  )  const [inline]

Returns true if no bits are set, otherwise returns false.

Definition at line 1192 of file bm.h.

References bm::bvector< Alloc >::any().

template<class Alloc>
bool bm::bvector< Alloc >::operator!= ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 935 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
void bm::bvector< Alloc >::operator&= ( const bvector< Alloc > &  bvect  )  [inline]

Definition at line 890 of file bm.h.

References bm::bvector< Alloc >::bit_and().

template<class Alloc>
void bm::bvector< Alloc >::operator-= ( const bvector< Alloc > &  bvect  )  [inline]

Definition at line 905 of file bm.h.

References bm::bvector< Alloc >::bit_sub().

template<class Alloc>
bool bm::bvector< Alloc >::operator< ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 910 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
bool bm::bvector< Alloc >::operator<= ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 915 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
bvector& bm::bvector< Alloc >::operator= ( const bvector< Alloc > &  bvect  )  [inline]
template<class Alloc>
bool bm::bvector< Alloc >::operator== ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 930 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
bool bm::bvector< Alloc >::operator> ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 920 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
bool bm::bvector< Alloc >::operator>= ( const bvector< Alloc > &  bvect  )  const [inline]

Definition at line 925 of file bm.h.

References bm::bvector< Alloc >::compare().

template<class Alloc>
bool bm::bvector< Alloc >::operator[] ( bm::id_t  n  )  const [inline]

Definition at line 884 of file bm.h.

References BM_ASSERT, and bm::bvector< Alloc >::get_bit().

template<class Alloc>
reference bm::bvector< Alloc >::operator[] ( bm::id_t  n  )  [inline]

Definition at line 877 of file bm.h.

References BM_ASSERT.

template<class Alloc>
void bm::bvector< Alloc >::operator^= ( const bvector< Alloc > &  bvect  )  [inline]

Definition at line 895 of file bm.h.

References bm::bvector< Alloc >::bit_xor().

template<class Alloc>
void bm::bvector< Alloc >::operator|= ( const bvector< Alloc > &  bvect  )  [inline]

Definition at line 900 of file bm.h.

References bm::bvector< Alloc >::bit_or().

template<class Alloc>
bvector<Alloc> bm::bvector< Alloc >::operator~ (  )  const [inline]

Definition at line 940 of file bm.h.

template<typename Alloc >
void bm::bvector< Alloc >::optimize ( bm::word_t temp_block = 0,
optmode  opt_mode = opt_compress,
statistics stat = 0 
) [inline]

Optimize memory bitvector's memory allocation.

Function analyze all blocks in the bitvector, compresses blocks with a regular structure, frees some memory. This function is recommended after a bulk modification of the bitvector using set_bit, clear_bit or logical operations.

Optionally function can calculate vector post optimization statistics

See also:
optmode, optimize_gap_size

Definition at line 1838 of file bm.h.

References bm::bv_statistics::bit_blocks, bm::for_each_nzblock(), bm::bv_statistics::gap_blocks, bm::gap_levels, bm::bv_statistics::gap_levels, bm::bv_statistics::max_serialize_mem, and bm::bv_statistics::memory_used.

Referenced by main(), and serialize_bvector().

template<typename Alloc >
void bm::bvector< Alloc >::optimize_gap_size (  )  [inline]

Optimize sizes of GAP blocks.

This method runs an analysis to find optimal GAP levels for the specific vector. Current GAP compression algorithm uses several fixed GAP sizes. By default bvector uses some reasonable preset.

Definition at line 1880 of file bm.h.

References bm::bvector< Alloc >::calc_stat(), bm::gap_levels, bm::improve_gap_levels(), and bm::bvector< Alloc >::set_gap_levels().

template<class Alloc>
bm::id_t bm::bvector< Alloc >::recalc_count (  )  [inline]

Definition at line 1129 of file bm.h.

References BMCOUNT_VALID, and bm::bvector< Alloc >::count().

Referenced by bm::bvector< Alloc >::swap().

template<class Alloc>
bvector<Alloc>& bm::bvector< Alloc >::reset (  )  [inline]

Clears every bit in the bitvector.

Returns:
*this;

Definition at line 1065 of file bm.h.

References bm::bvector< Alloc >::clear().

template<typename Alloc >
void bm::bvector< Alloc >::resize ( size_type  new_size  )  [inline]

Change size of the bvector.

Parameters:
new_size - new size in bits

Definition at line 1669 of file bm.h.

References bm::bvector< Alloc >::set_range().

Referenced by bm::bvector< Alloc >::operator=().

template<class Alloc>
bvector<Alloc>& bm::bvector< Alloc >::set (  )  [inline]

Sets every bit in this bitset to 1.

Returns:
*this

Definition at line 1008 of file bm.h.

References BMCOUNT_VALID, and bm::bvector< Alloc >::set_range().

template<class Alloc>
bvector<Alloc>& bm::bvector< Alloc >::set ( bm::id_t  n,
bool  val = true 
) [inline]

Sets bit n if val is true, clears bit n if val is false.

Parameters:
n - index of the bit to be set
val - new bit value
Returns:
*this

Definition at line 996 of file bm.h.

References bm::bvector< Alloc >::set_bit().

Referenced by main().

template<class Alloc>
bool bm::bvector< Alloc >::set_bit ( bm::id_t  n,
bool  val = true 
) [inline]

Sets bit n.

Parameters:
n - index of the bit to be set.
val - new bit value
Returns:
TRUE if bit was changed

Definition at line 957 of file bm.h.

References BM_ASSERT.

Referenced by fill_bvector(), and bm::bvector< Alloc >::set().

template<class Alloc>
bool bm::bvector< Alloc >::set_bit_and ( bm::id_t  n,
bool  val = true 
) [inline]

Sets bit n using bit AND with the provided value.

Parameters:
n - index of the bit to be set.
val - new bit value
Returns:
TRUE if bit was changed

Definition at line 969 of file bm.h.

References BM_ASSERT.

template<class Alloc>
bool bm::bvector< Alloc >::set_bit_conditional ( bm::id_t  n,
bool  val,
bool  condition 
) [inline]

Sets bit n only if current value is equal to the condition.

Parameters:
n - index of the bit to be set.
val - new bit value
condition - expected current value
Returns:
TRUE if bit was changed

Definition at line 982 of file bm.h.

References BM_ASSERT.

template<typename Alloc >
void bm::bvector< Alloc >::set_gap_levels ( const gap_word_t glevel_len  )  [inline]

Sets new GAP lengths table. All GAP blocks will be reallocated to match the new scheme.

Parameters:
glevel_len - pointer on C-style array keeping GAP block sizes.

Definition at line 1901 of file bm.h.

References bm::for_each_nzblock().

Referenced by bm::bvector< Alloc >::optimize_gap_size().

template<class Alloc>
void bm::bvector< Alloc >::set_new_blocks_strat ( strategy  strat  )  [inline]

Sets new blocks allocation strategy.

Parameters:
strat - Strategy code 0 - bitblocks allocation only. 1 - Blocks mutation mode (adaptive algorithm)

Definition at line 1328 of file bm.h.

Referenced by main().

template<typename Alloc >
bvector< Alloc > & bm::bvector< Alloc >::set_range ( bm::id_t  left,
bm::id_t  right,
bool  value = true 
) [inline]

Sets all bits in the specified closed interval [left,right] Interval must be inside the bvector's size. This method DOES NOT resize vector.

Parameters:
left - interval start
right - interval end (closed interval)
value - value to set interval in
Returns:
*this

Definition at line 1624 of file bm.h.

References BM_ASSERT, BM_SET_MMX_GUARD, and BMCOUNT_VALID.

Referenced by bm::bvector< Alloc >::combine_operation(), bm::bvector< Alloc >::resize(), and bm::bvector< Alloc >::set().

template<class Alloc>
size_type bm::bvector< Alloc >::size (  )  const [inline]

return current size of the vector (bits)

Definition at line 1089 of file bm.h.

Referenced by bm::bvector< Alloc >::operator=().

template<class Alloc>
void bm::bvector< Alloc >::swap ( bvector< Alloc > &  bv  )  [inline]

Exchanges content of bv and this bitvector.

Definition at line 1218 of file bm.h.

References BMCOUNT_VALID, bm::bvector< Alloc >::recalc_count(), and bm::xor_swap().

template<class Alloc>
bool bm::bvector< Alloc >::test ( bm::id_t  n  )  const [inline]

returns true if bit n is set and false is bit n is 0.

Parameters:
n - Index of the bit to check.
Returns:
Bit value (1 or 0)

Definition at line 1165 of file bm.h.

References bm::bvector< Alloc >::get_bit().


Friends And Related Function Documentation

template<class Alloc>
friend class enumerator [friend]

Definition at line 784 of file bm.h.

template<class Alloc>
friend class iterator_base [friend]

Definition at line 783 of file bm.h.


The documentation for this class was generated from the following file:

Generated on Sun Apr 25 09:37:44 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/namespacemembers_func_0x65.html0000644000175000017500000000677511365042652017736 0ustar tlktlk BitMagic: Data Fields
 

- e -

  • export_array() : bm

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00111.html0000644000175000017500000001526411365042641013424 0ustar tlktlk BitMagic: sample6.cpp File Reference

sample6.cpp File Reference

#include <iostream>
#include <cassert>
#include "bm.h"
Include dependency graph for sample6.cpp:

Go to the source code of this file.

Data Structures

class  dbg_block_allocator
class  dbg_ptr_allocator

Typedefs

typedef bm::mem_alloc
< dbg_block_allocator,
dbg_ptr_allocator
dbg_alloc
typedef bm::bvector< dbg_allocbvect

Functions

int main (void)

Typedef Documentation

Definition at line 115 of file sample6.cpp.


Function Documentation


Generated on Sun Apr 25 09:37:37 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00136.map0000644000175000017500000000307211365042632013236 0ustar tlktlk bm3.7.0/doc/html/a00205.png0000644000175000017500000000520611365042646013250 0ustar tlktlk‰PNG  IHDRÝ(z›ÿ°bKGDÿÿÿ ½§“ ;IDATxœí}LÔuÇßÇü&Äq)š§Nf\ÊÇR·³.ÑÔ´²1Zl¤„[skkÉÊÆËjáb™ü‘Í¡n=ØÐÖ…Og%Q†»+c©æ|…8ðêxòáÞýáø;ïwz=|_Ûoãó}ú<|ïóûÝ÷Ë÷*’„@ ˆ1Óm€@ðC$@eDÒ QF£Ta6›£i‡@ðŸdáÂ…0Þ…T€¸Ä%®»¼ŠŠŠnË-Å'ÔÔÔ ¨¨(P@ ÀsÏ=ç·\¬é‚(#’N ˆ2"é‚(#’N ˆ2"é‚(#’N ˆ2e*mmm°Ùl())‰Äp‚i¦»»Ÿ~ú)ž|òIdffN·9wMee%ÆÆÆ*• :ë֭âE‹¦Åžˆ<é.^¼ˆêêêH õ¯â…^@{{ût›qŠ‹‹ñóÏ?C£‰È=Ù/ьݛo¾‰¦¦&tuuá·ß~áC‡žžŽ¦¦¦¨è÷E|½¼ Nž<‰ÁÁÁé6#âtvv¢´´iiiS¦#Ú±Ûºu+ª««±oß>Øl6äææbÏž=QÓ?™ˆ%ÇãÁË/¿ ­V‹9sæàwÞôõõ!77UUU˜7ofÏž?ü[·nÅìÙ³¡×ëñÙgŸÉãìܹÅÅÅŠò·ß~‹ŒŒ ÄÅÅaÙ²e^w«††deeA’$¤¥¥áرc«ÕŠ—^z [¶lV«ÅܹsQUU¨¨¨À®]»ä1zzz°bÅ ô·°°N§………°Z­õãСC0 Ðh4Ðëõعs'ÀétâñÇÇ ÓéÐÐÐà%Ÿ?^±ïúµiÓ&tvv¢¸¸_}õ:::ðè£Þæ{cc£<·555HMMEBBJJJ0>>@y®Â‰o Ο?ï×n·ÛR¬'HNN†$I+l½¬©©QªöÂb±P¥Rñ•W^áÈÈ­V+“’’h6›ép8Ã×_‡{öì!VVVÒãñðÝwߥÁ`Ç:vìßÿ}¿²Ýngbb"9¿þú‹LII¡Çãáï¿ÿÎÄÄD~ôÑGt¹\͘˜:NÚívΘ1ƒùùùüñÇyåÊ/¹··W±ïú500ÀE‹ñäÉ“t¹\¼págÍšåÕ&++‹õõõt8Œ‹‹ãæÍ›év»yõêUêt:~óÍ7ç*œØùÆÀív{Ùråʾúê«\²d‰¢O’$±¬¬Œû÷ïçÞ½{YZZJƒÁÀÖÖV¿íkkk¹|ùr~üñÇt¹\Ac¦DQQ‘ß³—Kº{ï½—£££rYyy9óóóép8€ÃÃÃ$ÉË—/S£ÑðæÍ›$ɳgÏò¾ûî IÏ{ï½Ç§žzJ–GGGYYYÉ‘‘VWW3;;Û«ý3Ï<÷Þz‹‹…Z­ÖkÂÊËËYXXH·ÛMNÇ_ý•$¹råJ~òÉ'!Ù3þ|¶´´d@ýp¹\lnn–e»ÝNI’ØÚÚJ»ÝNìîî–ë&ËúÞ_©©©|999Ðjµ8wîœW]__’’’üÚ×ÓÓƒÄÄDÀ³Ï>‹×^{ jµùùùò "‚éWâèÑ£(//Gmm-~øa¨Õjèt:¹Þ÷5YÖ7~ùcdd$h›@så“`±›ìsll,$IBOOúûû166æu³•+VàúõëòŠ™/ããã Fƒ{î¹'l=þˆØFJGGNœ8øóÏ?±wï^¬[·.ìqš››QWWçWÎËËÃñãÇåÉlllĆ  V«‘——‡úúz\½zðÇ ¶¶¹¹¹nÝM'çÃÃÃØ·oŸ\———‡ÃÝ»w{mÚ„C0ýJtuu!==«V­‚Z­Æ™3g044’Î`}#áWll,ÑßßàVÌÛÚÚ‚ö 4WþÚ†;£Ñˆ––ìØ±µµµ0 xã7ÐÝÝОááa ```]]]¨¨¨@ff¦bÂ544 °°=ôHÂf³áÀAý ¥ï£sM·råJ>ðÀÌÎÎæÜ¹s¹víZŽŽŽÊßû'hmmeBB‚,·´´x­é¶lÙB£ÑPNNNfNNµZ-?øà¹nûöíÔétÌËËã¬Y³øâ‹/Êö¥¤¤0##ƒ«V­¢^¯çêÕ«yãÆ ¹ï¦M›¸`Áއä3I>øàƒ4™Lljj ¨?œ3g³³³™››Ëµk×255•ëׯ§Ýn§Z­–ÛúÊúÞ_“×tããã4™LLIIáúõëi2™h2™¼Öt“Y½z5Íf3ÉÀsjì|}öåÚµkܾ};322ÛH’äõb©F£¡Édâ… ü¶7›ÍòÚtbïáN˜Ò” nܸÁS§Ny-î§‚Ë—/³®®Îïâ¶½½uuu¼té’\f±X¸|ùrºÝnž>}šôx<^ýJJJXVV–N§“uuuìïï¨?ƒƒƒ¬¯¯ç/¿üBòV2544D¤ïøåËÍ›7iµZiµZÃþ*ÍU¤b7ÁØØXØ}¦z,¥¤S‘þÿî¥J¥úϼ9~âÄ ùT‚/===øá‡°aÜ={V^Ð;¯ _–.]Ь¬¬ º#5N¸Lµ_‚àL¼9^SSãU>uç|þAhµZ ¿uíííØ±cªªªnÛmKNNV3>>>$Ý‘'\¦Ú/Áó¿xÒ ÓÒ“Nœ½¢ŒH: ʈ¤¢ŒH: ʈ¤¢ŒH: ʈ¤¢Òüþù‚¸Äõo¿ÂzŸîóÏ?Wª!²páÂÛÊO¤‚©A¬é‚(#’N ˆ2"é‚(ó7<÷üvBnýöIEND®B`‚bm3.7.0/doc/html/a00197.png0000644000175000017500000000526611365042645013267 0ustar tlktlk‰PNG  IHDRó(+ÌÓbKGDÿÿÿ ½§“ kIDATxœí_L“ׯŸbK…j©Žª…͹à_”°9 ›d8SɆ›.fË.6£7jœËbØðɈŽ]8²Íœ1¶˜5(Æ ©›ˆvš%CˆÑGQFWdˆHaÐçwaxméûÒºÚœÏUÏŸ÷|Ÿs¾çiÏû†IB <ïTÇŒµ@„™‚(A˜Y ˆÔr 6›m4u‚0X³fÍ:•Ü0•J5â‚ÁÓĶղŸÌ`±X°nݺ‘S$ÂÂjµbýúõAÛÄ=³@%3 Q‚0³@%3 Q‚0³@%3 QBDÌ|ëÖ-=z4C=qƇ‚8N¿ú®®.yý¬ÐÑÑýû÷µŒ <ËÚ"EDÌ\__’’’H õLÄñåÓO?ESSÓ¨ÆÌËËî]»ðã?úÕwvvb÷îÝC^?+tvvÑ<Ò„šŸ@m#•×±Ø/ƒˆcö0TTT ³³sÔâ577ãòåËØ±cJKKG-n$˜1cnÞ¼9ª1CÍO ¶‘Êëhï_"ff¯×‹-[¶@¯×cÊ”)øæ›oíííX¾|9¾ûî;$%%Áh4âÈ‘#رcŒF#L&Nœ8!sàÀ|üñDze¹8›6m¡C‡¤~]]]X´hîÞ½ ¸~ý:2331~üxÌž=V«Uêû믿bþüùˆÅÂ… Q]] X»v-\.Ö®] ‡Ã¨ªªBzz:´Z-æÎ‹Ó§O\.Þyç;v ƒuuuAש··Wq­V+Þ|óM|ñŸs玤e8ät)Í/\m€r~ÚÚÚ°råJÿÏ»ÅbAJJ t:>ùä ¾úê+FhµZ,[¶ ---Ò˜r¹ \ã´´´!ù‘ÃW[°¼†³®®¥¥¥˜9s&Ôj5L&8 ;îÝ/aAÐb±È5ûqæÌªT*nß¾ÝÝÝt8LHH Ífckk+cbbøõ×_Óëõò‡~ Òëõrÿþýœ9s¦4ÖéÓ§yðàÁ e¥8ÅÅÅ\¼x±tݱcÇøê«¯’$=zD“ÉÄââbz<ž?žz½ž—/_¦ÓéäĉyêÔ)>~ü˜|ùå—éõzÙÑÑA“ÉÄ .°¯¯ýõ'NœÈŸ~ú‰‡åååŒg}}=N'ãââ¸zõj^¹r…½½½~ktûöm~þùçœ3gŽâZ.X°€%%%$Éììlnß¾]js:ÔjµC^§Kn~”••ñõ×_çÑ£Géñx‚êSÊOSSu:I²µµ•±±±Ü¸q#{{{yçÎ ž;wŽLJJbcc#>|ÈU«VqÓ¦M!åÊwÛÚÚüò£„¯¶À¼†ÓívS«ÕòÔ©Sôx<¼xñ"cbbèr¹"º_ä°X,”±í3ó¤I“ü4//«W¯fkk+ðÑ£G$Ɇ†ªÕjþûï¿$ÉššN:õ?Çq¹\Ôh4üóÏ?I’999Ò&;qâ.\è7Ö–-[¸mÛ6~ûí·\¹r¥Tß××ÇÂÂBvww“$“““Y[[K’,))aVV–ß8}ô÷ìÙC§ÓI¼wïžÔæõzyöìY¾÷Þ{œ;w.‹ŠŠØÞÞ.;¿k×®166–< I>|˜ÉÉÉ )of%]ÃÍ/ßÿ6là‹/¾È;w²¹¹YVo fÀû÷ïKíYYY´Ùl,//gRRoܸAò‰;::H*ç*Øûæ'Tm×…ÓãñðêÕ«R¿Á<4667Üý JfVü¢E8¤¤¤@£ÑHå àüùóRY§Óxòm,­V µZ-•#Çh4Âl6£¬¬ 6l€ÃáÀñãÇwïÞE}}=f̘!]×ÓÓƒ+V ¿¿³gÏ–ê5 ¾üòË ±[ZZüúÀœ9s¤§Î111HJJüöÛoظq#RSS±mÛ6˜Íæaçj±X@‹/ðäØ{ïÞ=\¼xË–-“½NI×à±1”ù@FF222àv»qøða¼ýöÛHOOÇÉ“'µËa2™¤×ƒóÿý÷QYY‰%K–À`0 ;;yyy0 йü×8R„S«Õâêիعs'nݺ…É“'Ãëõ7œý "ff·ÛíWv¹\˜ê7oÞ «Õªhf%]±±±!ÏÏ—„Z­Æ„ dû= $QTT„¢¢"ÔÔÔààÁƒøðÃQSS£˜+·Û="_Í 'fyy9òòòPVV†%K–`ܸq0 ²ã†º_"‚ÜÇ9Âdjj*‹‹‹¥ãÖ ~ÇÚÚZ¿cvuu5+**‚–•âdWWu:SSSýÆhhh`||<ëêêH’ÝÝÝœ7o­V++++i4ÙÖÖFòÉ13..Ž]]]$ýMµµµÔét¼}û6É'÷ªF£‘gÏž¥Óéä¸qㆬÃá`nn.§OŸÎüü|¶´´]êª*¿#ö GŽá¤I“ØÛÛ+{ÌVÒ5Üü¹pásssùÊ+¯°  €.—˯])?ÁŽÙ¾,]º”6›ÌÌÌ”êív»´”rl#qÌ'æ÷ßÏ¥K—Jå+W®P¥R=f?Í~ŽQ¹g~ã78kÖ,feeqÚ´iÌÉÉa___ØfÞºu+322‚–•â ’››Ë—^zIºÏ¤¨¨ˆz½žf³™ÉÉÉ\³fÔgëÖ­LLL¤Ùl¦^¯—ÞHòµ×^cff&«««I’ùùù4 ÌÎÎæ /¼ÀÍ›7“ä°É¹ÿ>óóó9þü íŸ}öW­Z5¤þŸþ¡V«eyy¹¬™•t 7?_l6›t_;øL#¥ü„jf§ÓÉéÓ§3--f³™ BitMagic: Data Fields
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00245.png0000644000175000017500000001105611365042651013250 0ustar tlktlk‰PNG  IHDRÕuÙ\¤mbKGDÿÿÿ ½§“ãIDATxœíÝ{LSçÿðw¡µÊ7PÀá‡:u¨L¦©Ìà-§Î}]Ün¿©—Å¡6ÌœNóݼ£3NX/(î+è@ê–ya:Áã2°€ 7¡@?¿?Œ'-´¥Õ#åòy%M8ç<çy>ç©o{N{ ""0ÆDceéël8TŒ‰ŒCŘȤ–.ày)•JK—ÀÚ€§§'üüü,]†Y$õ ‰DbéXX¸p!:dé2ÌÒa_©`ݺuP(–.ƒ½$ÑÑÑ–.á¹ð5c"ãP1&2c"ãP1&2c"ãP1&².ªÂÂB$%%ušqÄPUU…øøø6Û¯+é¡ÊËËÃÉ“';Í8Ú6oÞŒ¢¢"³ÛÖÔÔà—_~y©ûuU]"TÙŸþ‰šš³ÛöîÝ?ÿüóKݯ«ê2¡""lÛ¶ Ó§OGpp°pëKee% T*1wî\Ìž=§OŸÆ®]»0{ölÌ™3©©©B?ñññøöÛo .gëÖ­8uê”Ю¶¶ü1Š‹‹[­}ïÞ½˜={6ñù矣¤¤…ŠŠ DEEáÆ€””,Z´ …sæÌNÕš·-//ÇW_}eöÍ÷»zõ*–,Y‚ÀÀ@,[¶ ÙÙÙ­öÙÙu™PeggÃÚÚÇŽÃ×_¸¸8¤¥¥¡±±¨®®†R©Ä|€M›6ÁÉÉ ÇǼyó°oß>¡OOOx{{\64΀tN›.\¸FƒÞ½{­ûòåË8}ú4vìØ'NÀÆÆ„……ÁÑÑaaaðññAmm-¾ûî;,_¾IIIˆŒŒDLL ***Z´­¯¯GFF†ÙchïWRR‚ˆˆ|øá‡8uê "2Úggסïý3‡–-[©TŠáÇ#88)))>|8ˆ ,€D"ÁèÑ£ammaùðáÃB?&LÐé·ù²¡qV¯^;v@¥RÁÕÕ©©© jµnµZ hhh€ Ö¯_ÆÆFa,‰D;;;H¥RvìØAƒÜÜÜ •JQSS¶Ï;†¶sçÎaäÈ‘xë­·ï¾û.¬­­¡V«öÙÙu™P¹»»ëü£èß¿?®]»&,wïÞÀÓ»ße2¬­­…e1Æqrr‚¯¯/ÒÒÒðÎ;ïàÆoµ¿ñãÇãÚµkøôÓOagg‡1cÆà½÷Þƒ]‹¶2™ ÙÙÙˆ‰‰Aaa!`Ê—ÌC[qq1úôé#,K¥R,X°à…úì ºÌéßãÇu–+**`ooߦã( ¤¥¥!-- ~~~&ODøä“OpòäIDEEA­V#22RoÛ .`ïÞ½X¼x1<ˆÝ»wC.—‹:†6TWWë¬KOOGMMÍs÷Ùt™Pã÷ßðôM‚“'Obܸqf÷“““ƒË—/\66ÎĉqïÞ=;v Ó¦M3i¼¸¸8¬Zµ ÖÖÖ2d¦NŠÒÒR½mKJJзo_¼ñư²²Â­[·P[[+êÚFK—.¡¢¢••… 6ÀÊÊê¹ûì ºÌéŸvî܉øøx`РA˜1c*++ÍêçÌ™3ÈÌÌÄØ±cõ.zôèqãÆ!33cÆŒ1i¼©S§"11K—.…““²³³*lwvvÆ?ü€Ï>û þþþ8pàV®\ ™L©T 777ìܹ6lÐiëààð\chï7jÔ(( ,Y²^^^¸}û6BCCÑ£GVûìÌ:ô7Íý’¢Z­Æ­[·`gg'\Ì¿ bÓÐЀ¬¬,¨Õj 8NNNÂ¶ŠŠ ܽ{ÞÞÞ°··Gmm-²²²àììŒ@¥R¡¨¨#FŒÐikgg‡ªª*!$¦ŽÑ|?(((@qq1<==áêêjRݦˆŽŽF¯^½:Ü7»T¨Ú£²²27Lš0`¼¼¼Ú°¢ö££†ªËœþµWR©ŽŽŽ·›òFk_8Tæèèˆ7ß|ÓÒe0u™wÿk+*ÆDÆ¡bLd*ÆDÆ¡bLdª¢¾¾ÉÒ%0q¨:ˆÃ‡³Ðب±tÌúŽŠ®B"‘¢wïÿCEE2ž<ɲt9mŠÿ@AÒþâ`g÷×_eøé§løúÎÅÊ•Ã-]N›òôô´t fë°¯T]ÉìEròMtë&Å͛Ѱ³ã[—Ú3¾¦j窪ê’òô”¯¡¡ II[¸"ÖU;÷¿ÿÝ€Fóô ‰D‚#G.·²³4U;§T^~Öh4¸xñ.=2í÷ü1ËàPµc*Uþøã.4ÝËÞÄÄ¿,T3‡ªKLÌ€••îGD¥’OÛ3U;väÈ•¯R !##媊µ†CÕNýóOnÜ(h*°¶–àäÉ TÅLÁ¡j§®A*Õ×HS“‡ó)`{Å¡j§”ÊËhhÐÿ¹<“SŒœœÖÿ¸k{ªv(+«÷ï—0|³‹Lf„>l8TíÐñãW[mÓÐЄÿþ÷LTÃÌÕao¨íÌ›ðÖ[ƒàìl+¬KLü ¾¾}ááá àéíKÝ»ËððácôêeøWœ±¶Ç7ÔvîîŸcÇŽÅöµt)¬|úǘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰š9tèáé›åG;z8;O§nÝÜ-^?ô?´üó¤‡6´‰YÌ,]k&66 :ë †jÞ¼y/½ Æ:º†††¡âk*ÆDÆ¡bLd*ÆDÆ¡bLd*ÆDöB¡º{÷.öïß/R)–ÇÒÒÓÓüü|õUUUظqc‹Ÿ;»òòrlÚ´©Íö¡M‘˜˜H~~~&µ}m5޶¥K—Òýû÷Ût̉'’••EFFê¬ÏÏÏ'¹\ÞâçŽÂœ¹ÔnûàÁcÏORR¹»»Ó;w¨²²’fÍšE¡¡¡DD-æ²²²’är9?~œêêê(--¬¬¬H¥RµhûàÁ²µµ5{ íýŒÍƒ±>M¥///*gggR«Õºððp ¦¢¢"@ÕÕÕDD”““CR©”ˆˆèÚµkÔ«W¯G¥R‘L&£þù‡ˆˆ‚‚‚„';>>ž|}}uúZ±b­ZµŠ¾ÿþ{š9s¦°^­VÓÆ©¦¦†ˆˆ<<<(##ƒˆˆvïÞM:ýÌ;—¢¢¢(??ŸPaa¡°M£ÑÐéÓ§iúôé4dÈÚ²e •••<¾ëׯS·nÝèÑ£GDD´gÏòð𠦦&"2*cuµv|ÍýñÇ´xñbêÓ§­]»–òòò ÖÛ\BB¹»»ÓÍ›7‰èéfåååÂví¹¬««£«W¯ ÛžÏ;wZ´Õ‡9chïglZëÓúòbðÞ?SyyyA&“ ËÆ CJJаlkk H$ËåJ¥Â²㸸¸@¡PàèÑ£X¼x1ÒÓÓqðàA@nn.nß¾~ýú û=yòÓ¦MCcc#,¬—ÉdøòË/õŽ]PP Ó¼½½…w鬬¬àîî¸pá–-[¬Zµ …¢Õc=tèˆcÇŽðôt¬°°iii˜rrrÈÆÆ†233‰ˆ¨¦¦†^ýuŠ¥ÔÔTrqq¡‡ÑÓÓŸ=zPUUéžNddd­­-Ý»wˆž^˸¸¸ÐéÓ§)??Ÿ¬­­[ÌMzz:…„„§§'EDDPAAÞ9<þ¼Î©ß3ûöí#gggª¯¯7xúg¬®Öޝ¹sçÎQHHõïߟ¢££I¥Rél7öüDGG“¿¿¿°-99Yç¹ÕžËmÛ¶ÑÛo¿-l»téI$’VOÿÌC{?cóÐZŸ¦x)×TãÆ£AƒQ@@õîÝ›‚‚‚H­V›ª•+Wê|¥½llœgBBBèµ×^®CžÙ²e 988B¡ š7ožÐfåÊ•ôꫯ’B¡ !¤DD£F"ºrå EDD““Ò+¯¼BË—/'"2ªgþý÷_Šˆˆ ¡C‡êÝþÑGѬY³Z¬¯¨¨ ¹\N F?§2TWkǧM©TR@@)•Jáš·9cÏO~~>yzzÒðáÃI¡P££#ÅÄÄmµç2//\]]) €¦L™BAAAäåå%ÌvÛæo8˜:†ö~Ææ¡µ>M!z¨žyòä ¥¦¦ê\€¾ Ï;NAA%'' ¤Úrrr(99¹Å…¹J¥¢äädWPrr2egg›]{cc£Ùû˜ÊX]†ŽOìÚêêêè·ß~£3gί Ï4ŸËÇÓÙ³géúõëDD”——GçÏŸoѶ©©‰JKKÍ£ù~D†çÁXŸ¦Ð— ‘öé`ll,-Z„f«czèË ßQÁ˜È8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCŘÈ8TŒ‰ŒCÅ˜È ~õ#$$¤-ë`¬CR*•-Öµ•§§'ÿuÆL¤/+-îýcŒ½¾¦bLd*ÆDÆ¡bLdÿ& j‰Æ›IEND®B`‚bm3.7.0/doc/html/a00081.html0000644000175000017500000001334611365042652013433 0ustar tlktlk BitMagic: bm::tmatrix< T, ROWS, COLS >::rstat Struct Reference

bm::tmatrix< T, ROWS, COLS >::rstat Struct Reference

Row characteristics for transposed matrix. More...

#include <bmtrans.h>

Data Fields

unsigned bit_count
unsigned gap_count
bm::set_representation best_rep

Detailed Description

template<typename T, unsigned ROWS, unsigned COLS>
struct bm::tmatrix< T, ROWS, COLS >::rstat

Row characteristics for transposed matrix.

Definition at line 56 of file bmtrans.h.


Field Documentation

template<typename T , unsigned ROWS, unsigned COLS>
bm::set_representation bm::tmatrix< T, ROWS, COLS >::rstat::best_rep

Definition at line 60 of file bmtrans.h.

template<typename T , unsigned ROWS, unsigned COLS>
unsigned bm::tmatrix< T, ROWS, COLS >::rstat::bit_count

Definition at line 58 of file bmtrans.h.

template<typename T , unsigned ROWS, unsigned COLS>
unsigned bm::tmatrix< T, ROWS, COLS >::rstat::gap_count

Definition at line 59 of file bmtrans.h.


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:46 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00221.md50000644000175000017500000000004011365042647013137 0ustar tlktlkd32edbe104c19f7b8970f48bd14ede51bm3.7.0/doc/html/a00188.map0000644000175000017500000000022611365042645013247 0ustar tlktlk bm3.7.0/doc/html/functions_func_0x76.html0000644000175000017500000000751111365042644016427 0ustar tlktlk BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00096_source.html0000644000175000017500000150265111365042630015020 0ustar tlktlk BitMagic: bmserial.h Source File
Generated on Sun Apr 25 09:37:28 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00174.png0000644000175000017500000000512611365042644013254 0ustar tlktlk‰PNG  IHDR°(^‚ppbKGDÿÿÿ ½§“ IDATxœíœ[LSYÇÿ•Ö"*t´ˆbÆhf¤"j10ˆXMœQk0ÞÁE¼à˜1ã8‡ñ–øà+/¥$*<ˆ¼ &b•ZDãcjQ@AJY߃'–^¤X•šýKÎÃ^gíµö:ý÷ôœuNÊ#"ƒá¢ôúÚ `0>&`†KÃÌpiø •••())ùka0ì"•J1lØ0s#uB©T¶±­ÇmJ¥²³\Éâ ÜkN0z<Ϫ]3\&`†KÃÌpi˜€. 0Ã¥af¸46Ûh]åáÇ(..Æ’%Kœ°œî婯¯‡B¡À¯¿þÚ­ØÍÍÍP*•¸víx<"""˜˜777Χ¥¥*• &“ !!!X¸p!<==9Ÿ]»vA&“! À,þ¾}û0aÂH$ddd`Ê”)J¥f>GŽÁèÑ£qçÎèt:«ëô÷÷‡\.·[ËÖ­[ÑÖÖà}ëI$aúôé1b„CǤƒüü|FÌ›7³?·oßÆÊ•+9[yy9òóó±~ýz³ãö¹ùä3ð½{÷°wï^g¬¥Ûy^½z…ììlnœœœlSÑëõ ÁÁƒ1|øpˆÅbüþûïHHHàzá•••H$عs'¼½½ñý÷ßC¥RáÇÄ7¸XÛ·oÇÝ»w-rìÚµ Z­&“ 7n„\.GSS“™Ovv6´Z-êêê ×ë¡×ë¡T*¡T*¹ñ‹/>ZÏŸþ ­V ½^'Ož@¥R!00Z­¶KÇ£3÷ïßÇo¿ýffËÈÈ@ZZ gËÍÍ…J¥ú¢â›OâºÊÉ“'I*•vÙ¿»8’gèСTVVÖ%ß™3gÒüùó©½½³={öŒD"åååÑĉiΜ9ÔÖÖf67==†NïÞ½ãòæçç[ä "…BAF£‘P@@¥¥¥™ùLš4‰ …™-))‰’’’ºTGB¡.]ºdfKHH ¥K—:§ƒ’’@ƒˆˆšššÈÝÝFEÙÙÙœ_\\¥¦¦v+GW€'qN¹nooÇÊ•+áéé‰AƒaË–-€/^ ..;w¯/¼½½qàÀ¤§§ÃÛÛC† Ann.gÇŽX´h‘ͱ­<ÏŸ?ÇÌ™3r¹555Ëå¸té’Ýuëõz`Û¶mfOz|||°ÿ~ˆD"\½zׯ_Çž={,Î.ÿüóZ[[‘——çÐñú÷ß¡P( Ñhš×]Äb1„B¡]Ÿ––«ö°°0xyyáòåË€‹/bÔ¨QHLLÄéÓ§¼ÿ\4 bbbº×Y8EÀZ­Ïž=C^^¶mÛ†ãÇÃh4âÂ… hhhÀÓ§Oñ×_!)) ÞÞÞ¨©©Áš5k°qãF.Î?ü€ñãÇÛÛÊÓÜÜŒ .²²² ‹‘••…ððð®Û×××ò¿üò bbb Ñh ±Xlá#íðËOذa’““a4šÛ °ÿ~ìÛ·«W¯Fqq1Ö®]kÕ÷Ñ£GHOO‡D"±ºßÍÍ QQQœ€Ïœ9ƒ)S¦@&“áܹs0™L¸}û61iÒ$‹ù§N¸qãpèСÏ"f§X$aëÖ­ððð@dd$V¬Xœœï¿ëׯÇC\\ø|>Ö®]˹8³fÍBjjªÍ±½<úôêÕ "‘ÀîºÑ¿ÿúxyyÙ­ýõë×vcX£ã†sûöíÏý%%%(,,Ä™3gp÷î]477£¼¼œÛOD(,,DBBf̘___¨Õj›ñbccͰ°0¸¹¹A£Ñ@­VC"‘`À€sþùgdff¢¨¨~~~ذaªªªœVë'w!`äÈ‘fb FQQ7îÛ·/€÷wÅB¡|>Ÿ;3£øøø ººDd±µZªª* 2•••6cTUU!88ØáÜ …±±±˜;w®Ãóí±yófDFFr㜜,^¼uuuP«ÕHIIA`` V­Z…É“'ôsˆ‰‰ÁºuëðàÁ<~ü‘‘‘àñxˆÇéÓ§¡Óé¬^>t •J!•JQWW…BèèhH$‡/½¬á”3p]]Ù¸¦¦Æê·±§å Gkk+Ο?o±oË–-(**B\\uêT”––B§ÓÙ¬xã'—Ë1qâDŠ‹‹qøðaçÛ¹-Ñ6Zxx8ùûûSTT <˜¦M›F­­­T]]m«¢¢‚úöíËËÊÊÈÇLJ§¥¥™µÊ>ÛË£ÓéÌↆ†RDDiµÚ®¿¥¥…–-[F½{÷¦1cÆP`` yxxPff&çÓÖÖFëÖ­#¡PHAAA4fÌêÝ»7-Y²„Þ¾}Ëù½|ù’&OžLýúõ£ &ŸŸ 0€Ž?NDĵÑt:ÙN:EœÖFÃ/óù|Šˆˆ òòr«þƒþøã ²w÷îÝ€nÞ¼if £°°0›óŽ;FQQQtìØ12Õò!°ÑFãý'GNN,XàðOÚ»wïpåÊxyyaìØ±Îønu9O{{;êëë1pà@@mm-ÊÊÊ0~üx|÷Ýw]Š[[[‹[·nÁÍÍ ¡¡¡fOØ:xõênܸ“É„àà` 4Èj¬ŠŠ BitMagic: Data Fields - Functions
Generated on Sun Apr 25 09:37:40 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/doc/html/a00060.html0000644000175000017500000002260511365042651013425 0ustar tlktlk BitMagic: bm::distance_metric_descriptor Struct Reference

bm::distance_metric_descriptor Struct Reference

Distance metric descriptor, holds metric code and result. More...

#include <bmalgo_impl.h>

Public Member Functions

 distance_metric_descriptor (distance_metric m)
 distance_metric_descriptor ()
void reset ()
 Sets metric result to 0.

Data Fields

distance_metric metric
bm::id_t result

Detailed Description

Distance metric descriptor, holds metric code and result.

See also:
distance_operation
Examples:

sample9.cpp.

Definition at line 85 of file bmalgo_impl.h.


Constructor & Destructor Documentation

bm::distance_metric_descriptor::distance_metric_descriptor ( distance_metric  m  )  [inline]

Definition at line 90 of file bmalgo_impl.h.

bm::distance_metric_descriptor::distance_metric_descriptor (  )  [inline]

Definition at line 94 of file bmalgo_impl.h.


Member Function Documentation

void bm::distance_metric_descriptor::reset (  )  [inline]

Sets metric result to 0.

Definition at line 102 of file bmalgo_impl.h.

References result.


Field Documentation


The documentation for this struct was generated from the following file:

Generated on Sun Apr 25 09:37:45 2010 for BitMagic by  doxygen 1.6.1
bm3.7.0/license.txt0000644000175000017500000000235511365120467012405 0ustar tlktlkBitMagic Library. BitMagic library is open source software and distributed under the MIT license. The only restriction is to mention the author in any work derived from this. Copyright (c) 2002-2009 Anatoliy Kuznetsov. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. bm3.7.0/canon-system0000755000175000017500000000155311311223516012555 0ustar tlktlk#!/bin/sh if [ x$1 != x ]; then TARGET=$1 else TARGET=`./config.guess` fi case "${TARGET}" in alpha*-dec-osf4.0*) echo alpha-osf4 exit 0;; alpha*-dec-osf5.1) echo alpha-osf51 exit 0;; sparc-sun-solaris2.*) echo sparc-solaris2 exit 0;; i[34567]86-*-solaris2.*) echo intel-solaris2 exit 0;; powerpc-ibm-aix4.3.*) echo rs6000 exit 0;; mips-sgi-irix6.5) echo mips-irix6.5 exit 0;; i[34567]86-sco-sysv5*) echo intel-unixware7 exit 0;; i[34567]86-*-linux-gnu*) echo intel-linux-gnu exit 0;; i386-apple-darwin*) echo intel-macosx-gnu exit 0;; i[34567]86-*-cygwin*) echo cygwin exit 0;; i[34567]86-*-cygwin*) echo cygwin exit 0;; x86_64-*-linux-gnu*) echo amd64-linux-gnu exit 0;; *) echo Sorry! This platform \(${TARGET}\) is unsupported. 1>&2 exit 1;; esac; bm3.7.0/makefile.in0000644000175000017500000001760111313254252012320 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002,2003 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ # To use native compiler please comment the next line. # If you choose Intel C++ please use "ICC" here #COMPILER=ICC COMPILER = GNU_CC SHELL=/bin/sh DEPTOOL = gcc -MM RM = rm -f ifeq ($(origin PROJECT_NAME), undefined) PROJECT_NAME=bm endif ifndef PROJECT_DIR PROJECT_DIR=$(HOME)/$(PROJECT_NAME) endif DEBUGDIR=Debug/ RELDIR=Release/ ifeq ($(DEBUG), YES) BUILDDIR=$(DEBUGDIR) else BUILDDIR=$(RELDIR) endif # -------------------------------------- target platform definition ifndef OSNAME TARGETNAME = $(shell $(PROJECT_DIR)/config.guess) OSNAME = $(shell $(PROJECT_DIR)/canon-system $(TARGETNAME)) endif PLATFORM-MK = $(PROJECT_DIR)/platforms/$(OSNAME).mk include $(PLATFORM-MK) ifndef LDD LDD=ldd endif # ------------------------------------------------------- # -------------- File access mode ----------------- ifeq ($(FACCMODE), ) FACCMODE=750 endif # ------------------------------------------------------- DESTDIR = $(PROJECT_DIR) # ------------------------------------------------- ifdef DESTINATIONDIR ifeq ($(DEBUG), YES) OUTDIR:=$(PROJECT_DIR)/$(DESTINATIONDIR)/$(DEBUGDIR) BASICLIBDIR:=$(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(DEBUGDIR), $(ADDLIBDIR))) $(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(DEBUGDIR), $(BASICLIBS))) ifeq ($(COMPILER) ,GNU_CC) DBGFLAGS:=-ggdb -D_DEBUG else DBGFLAGS:=-g -D_DEBUG endif else OUTDIR:=$(PROJECT_DIR)/$(DESTINATIONDIR)/$(RELDIR) BASICLIBDIR:=$(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(RELDIR), $(ADDLIBDIR))) $(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(RELDIR), $(BASICLIBS))) DBGFLAGS:=$(OPT_FLAGS) endif else ifeq ($(DEBUG), YES) OUTDIR:=$(PROJECT_DIR)/$(DEBUGDIR) ifeq ($(COMPILER) ,GNU_CC) DBGFLAGS:=-ggdb -D_DEBUG -DDBG_NEW else DBGFLAGS:=-g -D_DEBUG endif else OUTDIR:=$(PROJECT_DIR)/$(RELDIR) DBGFLAGS:=$(OPT_FLAGS) endif endif BASICINCDIR:=$(addprefix -I$(PROJECT_DIR)/, $(ADDLIBDIR)) $(addprefix -I$(PROJECT_DIR)/, $(BASICINCS)) #BASICINCDIR:=$(addprefix -I$(PROJECT_DIR)/, $(ADDLIBDIR)) $(addprefix -I$(PROJECT_DIR)/, $(BASICLIBS)) #BASICLIBS:=$(addprefix -l, $(ADDLIBS)) $(addprefix -l, $(BASICLIBS)) BASICLIBS:=-L$(PROJECT_DIR)/src/$(BUILDDIR) # -------------------------------------------------- ifeq ($(DEBUG), YES) DEPFILE=depend.dDebug else DEPFILE=depend.dRelease endif SOURCES = $(CXXSOURCES) $(CSOURCES) # file extention replacement CXXOBJECTS1:=$(CXXSOURCES:.cpp=.o) CXXOBJECTS:=$(CXXOBJECTS1:.cc=.o) COBJECTS:=$(CSOURCES:.c=.o) # adding directory prefix CXXOBJECTS:=$(addprefix $(OUTDIR), $(CXXOBJECTS)) COBJECTS:=$(addprefix $(OUTDIR), $(COBJECTS)) .PHONY : clean init check-platform rebuild .SILENT : clean init dep $(OUTDIR)%.o: %.cpp @echo \< $*.cpp \> $(CXX) -c $(CXXFLAGS) $*.cpp -o $@ $(DBGFLAGS) $(OUTDIR)%.o : %.c $(CC) -c $(CFLAGS) $< -o $@ $(DBGFLAGS) LDFLAGS = $(COMMON_LDFLAGS) CXXFLAGS = $(COMMON_CXXFLAGS) $(DB_INCL) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCUDE_FLAGS) CFLAGS = $(COMMON_CFLAGS) ifdef DEPCOMMAND DEPCOMMAND:=$(DEPCOMMAND)$(DB_INCL) $(PLATFORM_CXXFLAGS) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCUDE_FLAGS) $(EXTERNINCDIR) $(SOURCES) else DEPCOMMAND:=$(DEPTOOL) $(DB_INCL) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCUDE_FLAGS) $(EXTERNINCDIR) $(SOURCES) > depend.d~ endif CATCOMMAND=cat depend.d~ | awk '{if ( index($$0,".o:" ) !=0 ) print "$(OUTDIR)"$$0; else print $$0}' > $(DEPFILE) ifeq ($(DESTTYPE), LIB) DESTDEP=$(CXXOBJECTS) $(COBJECTS) DESTINATION:=$(OUTDIR)lib$(DESTINATION).a DESTCOMMAND=$(AR) $(ARFLAGS) $(DESTINATION) $(CXXOBJECTS) $(COBJECTS) CXX_TEMPL_MERGE = @if [ x$(CXX_REPOSITORY) != x ]; then \ if [ -d $(CXX_REPOSITORY) ]; then \ $(AR) r $(DESTINATION) $(CXX_REPOSITORY)/*; \ fi; \ fi else ifeq ($(DESTTYPE), ) DESTDEP=$(CXXOBJECTS) $(COBJECTS) $(BASICOBJS) ifdef CXX_REPOSITORY TEMPL_LIST=$(wildcard $(CXX_REPOSITORY)/*) endif DESTCOMMAND=$(LD) -o $(DESTINATION) $(LDFLAGS) $(CXXOBJECTS) $(COBJECTS) $(TEMPL_LIST) $(BASICOBJS) \ $(BASICLIBDIR) $(BASICLIBS) $(EXTERNLIBS) \ $(SYS_LIBS) else DEPCOMMAND= CATCOMMAND= ifeq ($(DESTTYPE), COPYONLY) DESTDEP= DESTCOMMAND=echo File(s) $(DESTINATION) do(es) not require to be build else # ifeq ($(DESTTYPE), SCRIPT) DESTCOMMAND= MERGE_SCR=merge_scr.sh DESTDEP:=$(DESTDEP) $(addsuffix .src, $(DESTINATION)) # endif endif endif endif #LD_LIBRARY_PATH:=$(LD_LIBRARY_PATH) ifndef INSTALL_LIST INSTALL_LIST=$(DESTINATION) endif all: init banner $(DESTINATION) $(OUTDIR) check-platform: $(PLATFORM-MK) @echo Platform : $(PLATFORM-MK) banner: @echo ======= Building : $(PROJECTNAME) $(OSNAME) $(COMPILER) debug: $(MAKE) DEBUG=YES release: $(MAKE) COMMON_DFLAGS="$(OPT_FLAGS)" LINKER_DFLAGS= all $(DESTINATION): $(DESTDEP) @echo ======== Linking : $(PROJECTNAME) $(OSNAME) $(COMPILER) $(DESTTYPE) $(DESTCOMMAND) @echo ======== $(DESTINATION) @if [ x$(MERGE_SCR) != x ] ; then \ for fnm in $(DESTINATION); do \ $(MERGE_SCR) $$fnm.src >$$fnm; done \ fi $(DESTCOMMAND) $(CXX_TEMPL_MERGE) rebuild: $(MAKE) --no-print-directory clean $(MAKE) --no-print-directory dep $(MAKE) --no-print-directory all relink: $(RM) $(DESTINATION) $(MAKE) all clean: @echo ====== Clean Up directories $(RM) core *.a *.o *~ depend.d* $(DESTINATION) $(DESTINATION).exe $(RM) $(DEBUGDIR)*.o $(DEBUGDIR)*.a core *.stackdump $(RM) $(RELDIR)*.o $(RELDIR)*.a $(RM) -Rf $(DEBUGDIR)/$(CXX_CACHE) $(RM) -Rf $(RELDIR)/$(CXX_CACHE) $(RM) -Rf $(CXX_CACHE) $(RM) -Rf *__Win32_Debug *__Win32_Release *.bak *.plg $(RM) -Rf warn.log cvsenv.sh relprep: clean @echo ====== Release preparation $(RM) -r CVS *.plg *.opt opt.txt $(PROJECT_DIR)/*.opt *.ncb *.opt *.dsp *vcproj.* dos2unix $(SOURCES) $(wildcard *.h*) $(wildcard *.hpp) dos2unix $(SOURCES) $(wildcard *.sh) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) chmod -x $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj) chmod a+rw $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj) chmod a-x $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj) init: [ x$(DESTTYPE) = xCOPYONLY ] && exit 0;\ if [ ! -d $(DEBUGDIR) ]; then \ mkdir $(DEBUGDIR) 2>/dev/null; \ fi;\ if [ ! -d $(RELDIR) ]; then \ mkdir $(RELDIR) 2>/dev/null; \ fi;\ exit 0;\ dep: @echo ====== Dependencies regeneration $(RM) depend.d* echo $(DEPCOMMAND) $(DEPCOMMAND) $(CATCOMMAND) $(RM) depend.d~ -include $(DEPFILE) bm3.7.0/bm.sln0000644000175000017500000001354511224764314011340 0ustar tlktlk Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bm", "SRC\bm.vcproj", "{5E94F432-D428-4374-A03F-4B1FE97469AC}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "perf", "TESTS\perf\perf.vcproj", "{2588C4C0-401D-46A0-9E66-E1B61A561D58}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample1", "SAMPLES\sample1\sample1.vcproj", "{7CE76898-E1CC-491C-93EB-C58CCC6F5440}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample2", "SAMPLES\sample2\sample2.vcproj", "{6E386D5E-4F53-44A4-B04E-16C8E0557CA4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample3", "SAMPLES\sample3\sample3.vcproj", "{5C8D4514-138C-4D87-B3C3-053C0E5236C0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample4", "SAMPLES\sample4\sample4.vcproj", "{E5592CE9-7753-489A-A427-F33F54678BF3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample5", "SAMPLES\sample5\sample5.vcproj", "{3C4BE532-6BAA-4E8C-B2EC-728C9775DEC9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample6", "samples\sample6\sample6.vcproj", "{0E1D1470-0017-4C0F-852F-81779248BD5F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample7", "samples\sample7\sample7.vcproj", "{5AE71E2B-FF34-45CB-ABD6-32815701A3F0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample8", "samples\sample8\sample8.vcproj", "{2EEA1C41-1BDA-4936-A42D-7F420A73D02C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "TESTS\STRESS\test.vcproj", "{92DD85AA-D799-43CA-B9E0-70DC8ADC0E66}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample9", "samples\sample9\sample9.vcproj", "{D71B864A-13F4-49AE-B4B2-2CA5AF9E0E64}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5E94F432-D428-4374-A03F-4B1FE97469AC}.Debug|Win32.ActiveCfg = Debug|Win32 {5E94F432-D428-4374-A03F-4B1FE97469AC}.Debug|Win32.Build.0 = Debug|Win32 {5E94F432-D428-4374-A03F-4B1FE97469AC}.Release|Win32.ActiveCfg = Release|Win32 {5E94F432-D428-4374-A03F-4B1FE97469AC}.Release|Win32.Build.0 = Release|Win32 {2588C4C0-401D-46A0-9E66-E1B61A561D58}.Debug|Win32.ActiveCfg = Debug|Win32 {2588C4C0-401D-46A0-9E66-E1B61A561D58}.Debug|Win32.Build.0 = Debug|Win32 {2588C4C0-401D-46A0-9E66-E1B61A561D58}.Release|Win32.ActiveCfg = Release|Win32 {2588C4C0-401D-46A0-9E66-E1B61A561D58}.Release|Win32.Build.0 = Release|Win32 {7CE76898-E1CC-491C-93EB-C58CCC6F5440}.Debug|Win32.ActiveCfg = Debug|Win32 {7CE76898-E1CC-491C-93EB-C58CCC6F5440}.Debug|Win32.Build.0 = Debug|Win32 {7CE76898-E1CC-491C-93EB-C58CCC6F5440}.Release|Win32.ActiveCfg = Release|Win32 {7CE76898-E1CC-491C-93EB-C58CCC6F5440}.Release|Win32.Build.0 = Release|Win32 {6E386D5E-4F53-44A4-B04E-16C8E0557CA4}.Debug|Win32.ActiveCfg = Debug|Win32 {6E386D5E-4F53-44A4-B04E-16C8E0557CA4}.Debug|Win32.Build.0 = Debug|Win32 {6E386D5E-4F53-44A4-B04E-16C8E0557CA4}.Release|Win32.ActiveCfg = Release|Win32 {6E386D5E-4F53-44A4-B04E-16C8E0557CA4}.Release|Win32.Build.0 = Release|Win32 {5C8D4514-138C-4D87-B3C3-053C0E5236C0}.Debug|Win32.ActiveCfg = Debug|Win32 {5C8D4514-138C-4D87-B3C3-053C0E5236C0}.Debug|Win32.Build.0 = Debug|Win32 {5C8D4514-138C-4D87-B3C3-053C0E5236C0}.Release|Win32.ActiveCfg = Release|Win32 {5C8D4514-138C-4D87-B3C3-053C0E5236C0}.Release|Win32.Build.0 = Release|Win32 {E5592CE9-7753-489A-A427-F33F54678BF3}.Debug|Win32.ActiveCfg = Debug|Win32 {E5592CE9-7753-489A-A427-F33F54678BF3}.Debug|Win32.Build.0 = Debug|Win32 {E5592CE9-7753-489A-A427-F33F54678BF3}.Release|Win32.ActiveCfg = Release|Win32 {E5592CE9-7753-489A-A427-F33F54678BF3}.Release|Win32.Build.0 = Release|Win32 {3C4BE532-6BAA-4E8C-B2EC-728C9775DEC9}.Debug|Win32.ActiveCfg = Debug|Win32 {3C4BE532-6BAA-4E8C-B2EC-728C9775DEC9}.Debug|Win32.Build.0 = Debug|Win32 {3C4BE532-6BAA-4E8C-B2EC-728C9775DEC9}.Release|Win32.ActiveCfg = Release|Win32 {3C4BE532-6BAA-4E8C-B2EC-728C9775DEC9}.Release|Win32.Build.0 = Release|Win32 {0E1D1470-0017-4C0F-852F-81779248BD5F}.Debug|Win32.ActiveCfg = Debug|Win32 {0E1D1470-0017-4C0F-852F-81779248BD5F}.Debug|Win32.Build.0 = Debug|Win32 {0E1D1470-0017-4C0F-852F-81779248BD5F}.Release|Win32.ActiveCfg = Release|Win32 {0E1D1470-0017-4C0F-852F-81779248BD5F}.Release|Win32.Build.0 = Release|Win32 {5AE71E2B-FF34-45CB-ABD6-32815701A3F0}.Debug|Win32.ActiveCfg = Debug|Win32 {5AE71E2B-FF34-45CB-ABD6-32815701A3F0}.Debug|Win32.Build.0 = Debug|Win32 {5AE71E2B-FF34-45CB-ABD6-32815701A3F0}.Release|Win32.ActiveCfg = Release|Win32 {5AE71E2B-FF34-45CB-ABD6-32815701A3F0}.Release|Win32.Build.0 = Release|Win32 {2EEA1C41-1BDA-4936-A42D-7F420A73D02C}.Debug|Win32.ActiveCfg = Debug|Win32 {2EEA1C41-1BDA-4936-A42D-7F420A73D02C}.Debug|Win32.Build.0 = Debug|Win32 {2EEA1C41-1BDA-4936-A42D-7F420A73D02C}.Release|Win32.ActiveCfg = Release|Win32 {2EEA1C41-1BDA-4936-A42D-7F420A73D02C}.Release|Win32.Build.0 = Release|Win32 {92DD85AA-D799-43CA-B9E0-70DC8ADC0E66}.Debug|Win32.ActiveCfg = Debug|Win32 {92DD85AA-D799-43CA-B9E0-70DC8ADC0E66}.Debug|Win32.Build.0 = Debug|Win32 {92DD85AA-D799-43CA-B9E0-70DC8ADC0E66}.Release|Win32.ActiveCfg = Release|Win32 {92DD85AA-D799-43CA-B9E0-70DC8ADC0E66}.Release|Win32.Build.0 = Release|Win32 {D71B864A-13F4-49AE-B4B2-2CA5AF9E0E64}.Debug|Win32.ActiveCfg = Debug|Win32 {D71B864A-13F4-49AE-B4B2-2CA5AF9E0E64}.Debug|Win32.Build.0 = Debug|Win32 {D71B864A-13F4-49AE-B4B2-2CA5AF9E0E64}.Release|Win32.ActiveCfg = Release|Win32 {D71B864A-13F4-49AE-B4B2-2CA5AF9E0E64}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal bm3.7.0/tests/0000700000175000017500000000000011365042156011343 5ustar tlktlkbm3.7.0/tests/stress/0000700000175000017500000000000011365120467012670 5ustar tlktlkbm3.7.0/tests/stress/test.vcproj0000666000175000017500000001270511206705076015116 0ustar tlktlk bm3.7.0/tests/stress/t.cpp0000666000175000017500000062574611365120467013701 0ustar tlktlk/* Copyright (c) 2002-2009 Anatoliy Kuznetsov. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ //#define BM_SET_MMX_GUARD //#define BMSSE2OPT //#define BMSSE42OPT //#define BM64OPT //#define BMCOUNTOPT #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace bm; using namespace std; #include "rlebtv.h" #include #include #include #include #define POOL_SIZE 5000 //#define MEM_POOL template T* pool_allocate(T** pool, int& i, size_t n) { return i ? pool[i--] : (T*) ::malloc(n * sizeof(T)); } inline void* pool_allocate2(void** pool, int& i, size_t n) { return i ? pool[i--] : malloc(n * sizeof(void*)); } template void pool_free(T** pool, int& i, T* p) { i < POOL_SIZE ? (free(p),(void*)0) : pool[++i]=p; } class pool_block_allocator { public: static bm::word_t* allocate(size_t n, const void *) { int *idx = 0; bm::word_t** pool = 0; switch (n) { case bm::set_block_size: idx = &bit_blocks_idx_; pool = free_bit_blocks_; break; case 64: idx = &gap_blocks_idx0_; pool = gap_bit_blocks0_; break; case 128: idx = &gap_blocks_idx1_; pool = gap_bit_blocks1_; break; case 256: idx = &gap_blocks_idx2_; pool = gap_bit_blocks2_; break; case 512: idx = &gap_blocks_idx3_; pool = gap_bit_blocks3_; break; default: assert(0); } return pool_allocate(pool, *idx, n); } static void deallocate(bm::word_t* p, size_t n) { int *idx = 0; bm::word_t** pool = 0; switch (n) { case bm::set_block_size: idx = &bit_blocks_idx_; pool = free_bit_blocks_; break; case 64: idx = &gap_blocks_idx0_; pool = gap_bit_blocks0_; break; case 128: idx = &gap_blocks_idx1_; pool = gap_bit_blocks1_; break; case 256: idx = &gap_blocks_idx2_; pool = gap_bit_blocks2_; break; case 512: idx = &gap_blocks_idx3_; pool = gap_bit_blocks3_; break; default: assert(0); } pool_free(pool, *idx, p); } private: static bm::word_t* free_bit_blocks_[]; static int bit_blocks_idx_; static bm::word_t* gap_bit_blocks0_[]; static int gap_blocks_idx0_; static bm::word_t* gap_bit_blocks1_[]; static int gap_blocks_idx1_; static bm::word_t* gap_bit_blocks2_[]; static int gap_blocks_idx2_; static bm::word_t* gap_bit_blocks3_[]; static int gap_blocks_idx3_; }; bm::word_t* pool_block_allocator::free_bit_blocks_[POOL_SIZE]; int pool_block_allocator::bit_blocks_idx_ = 0; bm::word_t* pool_block_allocator::gap_bit_blocks0_[POOL_SIZE]; int pool_block_allocator::gap_blocks_idx0_ = 0; bm::word_t* pool_block_allocator::gap_bit_blocks1_[POOL_SIZE]; int pool_block_allocator::gap_blocks_idx1_ = 0; bm::word_t* pool_block_allocator::gap_bit_blocks2_[POOL_SIZE]; int pool_block_allocator::gap_blocks_idx2_ = 0; bm::word_t* pool_block_allocator::gap_bit_blocks3_[POOL_SIZE]; int pool_block_allocator::gap_blocks_idx3_ = 0; class pool_ptr_allocator { public: static void* allocate(size_t n, const void *) { return pool_allocate2(free_ptr_blocks_, ptr_blocks_idx_, n); } static void deallocate(void* p, size_t) { pool_free(free_ptr_blocks_, ptr_blocks_idx_, p); } private: static void* free_ptr_blocks_[]; static int ptr_blocks_idx_; }; void* pool_ptr_allocator::free_ptr_blocks_[POOL_SIZE]; int pool_ptr_allocator::ptr_blocks_idx_ = 0; #if defined(BMSSE2OPT) || defined(BMSSE42OPT) #else # define MEM_DEBUG #endif #ifdef MEM_DEBUG class dbg_block_allocator { public: static unsigned na_; static unsigned nf_; static bm::word_t* allocate(size_t n, const void *) { ++na_; assert(n); bm::word_t* p = (bm::word_t*) ::malloc((n+1) * sizeof(bm::word_t)); if (!p) { std::cerr << "Failed allocation!" << endl; exit(1); } *p = n; return ++p; } static void deallocate(bm::word_t* p, size_t n) { ++nf_; --p; if(*p != n) { printf("Block memory deallocation error!\n"); exit(1); } ::free(p); } static int balance() { return nf_ - na_; } }; unsigned dbg_block_allocator::na_ = 0; unsigned dbg_block_allocator::nf_ = 0; class dbg_ptr_allocator { public: static unsigned na_; static unsigned nf_; static void* allocate(size_t n, const void *) { ++na_; assert(sizeof(size_t) == sizeof(void*)); void* p = ::malloc((n+1) * sizeof(void*)); if (!p) { std::cerr << "Failed allocation!" << endl; exit(1); } size_t* s = (size_t*) p; *s = n; return (void*)++s; } static void deallocate(void* p, size_t n) { ++nf_; size_t* s = (size_t*) p; --s; if(*s != n) { printf("Ptr memory deallocation error!\n"); exit(1); } ::free(s); } static int balance() { return nf_ - na_; } }; unsigned dbg_ptr_allocator::na_ = 0; unsigned dbg_ptr_allocator::nf_ = 0; typedef mem_alloc dbg_alloc; typedef bm::bvector bvect; typedef bm::bvector_mini bvect_mini; #else #ifdef MEM_POOL typedef mem_alloc pool_alloc; typedef bm::bvector bvect; typedef bm::bvector_mini bvect_mini; #else typedef bm::bvector<> bvect; typedef bm::bvector_mini bvect_mini; #endif #endif //const unsigned BITVECT_SIZE = 100000000 * 8; // This this setting program will consume around 150M of RAM const unsigned BITVECT_SIZE = 100000000 * 2; const unsigned ITERATIONS = 100000; const unsigned PROGRESS_PRINT = 2000000; void CheckVectors(bvect_mini &bvect_min, bvect &bvect_full, unsigned size, bool detailed = false); unsigned random_minmax(unsigned min, unsigned max) { unsigned r = (rand() << 16) | rand(); return r % (max-min) + min; } void FillSets(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max, unsigned fill_factor) { unsigned i; unsigned id; //Random filling if(fill_factor == 0) { unsigned n_id = (max - min) / 100; printf("random filling : %i\n", n_id); for (i = 0; i < n_id; i++) { id = random_minmax(min, max); bvect_min->set_bit(id); bvect_full->set_bit(id); if (PROGRESS_PRINT) { if ( (i % PROGRESS_PRINT) == 0) { cout << "+" << flush; } } } cout << endl; } else { printf("fill_factor random filling : factor = %i\n", fill_factor); for(i = 0; i < fill_factor; i++) { int k = rand() % 10; if (k == 0) k+=2; //Calculate start unsigned start = min + (max - min) / (fill_factor * k); //Randomize start start += random_minmax(1, (max - min) / (fill_factor * 10)); if (start > max) { start = min; } //Calculate end unsigned end = start + (max - start) / (fill_factor *2); //Randomize end end -= random_minmax(1, (max - start) / (fill_factor * 10)); if (end > max ) { end = max; } if (fill_factor > 1) { for(; start < end;) { int r = rand() % 8; if (r > 7) { int inc = rand() % 3; ++inc; unsigned end2 = start + rand() % 1000; if (end2 > end) end2 = end; while (start < end2) { bvect_min->set_bit(start); bvect_full->set_bit(start); start += inc; } if (PROGRESS_PRINT) { if ( ( ((i+1)*(end-start)) % PROGRESS_PRINT) == 0) { cout << "+" << flush; } } continue; } if (r) { bvect_min->set_bit(start); bvect_full->set_bit(start); ++start; } else { start+=r; bvect_min->set_bit(start); bvect_full->set_bit(start); } if (PROGRESS_PRINT) { if ( ( ((i+1)*(end-start)) % PROGRESS_PRINT) == 0) { cout << "+" << flush; } } } } else { int c = rand() % 15; if (c == 0) ++c; for(; start < end; ++start) { bvect_min->set_bit(start); bvect_full->set_bit(start); if (start % c) { start += c; } if (PROGRESS_PRINT) { if ( ( ((i+1)*(end-start)) % PROGRESS_PRINT) == 0) { cout << "+" << flush; } } } } cout << endl; } } } // // Interval filling. // 111........111111........111111..........11111111.......1111111... // void FillSetsIntervals(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max, unsigned fill_factor, bool set_flag=true) { while(fill_factor==0) { fill_factor=rand()%10; } cout << "Intervals filling. Factor=" << fill_factor << endl << endl; unsigned i, j; unsigned factor = 70 * fill_factor; for (i = min; i < max; ++i) { unsigned len, end; do { len = rand() % factor; end = i+len; } while (end >= max); /* if (set_flag == false) { cout << "Cleaning: " << i << "-" << end << endl; } else { cout << "Add: " << i << "-" << end << endl; } */ if (i < end) { bvect_full->set_range(i, end-1, set_flag); } for (j = i; j < end; ++j) { if (set_flag) { bvect_min->set_bit(j); //bvect_full->set_bit(j); } else { bvect_min->clear_bit(j); //bvect_full->clear_bit(j); /* if (g_cnt_check) { bool b = bvect_full->count_check(); if(!b) { cout << "Count check failed (clear)!" << endl; cout << "bit=" << j << endl; exit(1); } } */ } } // j //cout << "Checking range filling " << from << "-" << to << endl; //CheckVectors(*bvect_min, *bvect_full, 100000000); i = end; len = rand() % (factor* 10 * bm::gap_max_bits); if (len % 2) { len *= rand() % (factor * 10); } i+=len; if ( (len % 6) == 0) { /* if (set_flag == false) { cout << "Additional Cleaning: " << i << "-" << end << endl; } */ for(unsigned k=0; k < 1000 && i < max; k+=3,i+=3) { if (set_flag) { bvect_min->set_bit(i); bvect_full->set_bit(i); } else { bvect_min->clear_bit(j); bvect_full->clear_bit(j); } } } } // for i } void FillSetClearIntervals(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max, unsigned fill_factor) { FillSetsIntervals(bvect_min, bvect_full, min, max, fill_factor, true); FillSetsIntervals(bvect_min, bvect_full, min, max, fill_factor, false); } void FillSetsRandomOne(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max) { unsigned range = max - min; unsigned bit_idx = rand() % range; bvect_min->set_bit(bit_idx); bvect_full->set_bit(bit_idx); cout << "Bit_idx=" << bit_idx << endl; } void FillSetsRandom(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max, unsigned fill_factor) { unsigned diap = max - min; unsigned count; switch (fill_factor) { case 0: count = diap / 1000; break; case 1: count = diap / 100; break; default: count = diap / 10; break; } for (unsigned i = 0; i < count; ++i) { unsigned bn = rand() % count; bn += min; if (bn > max) { bn = max; } bvect_min->set_bit(bn); bvect_full->set_bit(bn); if ( (i % PROGRESS_PRINT) == 0) { cout << "+" << flush; } } cout << "Ok" << endl; } // // Quasi random filling with choosing randomizing method. // // void FillSetsRandomMethod(bvect_mini* bvect_min, bvect* bvect_full, unsigned min, unsigned max, int optimize = 0, int method = -1) { if (method == -1) { method = rand() % 6; } unsigned factor; //method = 0; switch (method) { case 0: cout << "Random filling: method - FillSets - factor(0)" << endl; FillSets(bvect_min, bvect_full, min, max, 0); break; case 1: cout << "Random filling: method - FillSets - factor(random)" << endl; factor = rand()%3; FillSets(bvect_min, bvect_full, min, max, factor?factor:1); break; case 2: cout << "Random filling: method - Set-Clear Intervals - factor(random)" << endl; factor = rand()%10; FillSetClearIntervals(bvect_min, bvect_full, min, max, factor); break; case 3: cout << "Random filling: method - FillRandom - factor(random)" << endl; factor = rand()%3; FillSetsRandom(bvect_min, bvect_full, min, max, factor?factor:1); break; case 4: cout << "Random set one bit" << endl; FillSetsRandomOne(bvect_min, bvect_full, min, max); break; default: cout << "Random filling: method - Set Intervals - factor(random)" << endl; factor = rand()%10; FillSetsIntervals(bvect_min, bvect_full, min, max, factor); break; } // switch if (optimize && (method <= 1)) { cout << "Vector optimization..." << flush; bvect_full->optimize(); cout << "OK" << endl; } } // do logical operation through serialization unsigned SerializationOperation(bvect* bv_target, /*const*/ bvect& bv1, /*const*/ bvect& bv2, set_operation op, bool check_reverse=false) { bvect bv_tmp; if (!bv_target) { bv_target = &bv_tmp; } if (op == set_COUNT_SUB_AB || op == set_COUNT_SUB_BA) { check_reverse = false; } // serialize input vectors bvect::statistics *st1_op, *st2_op; st1_op = new bvect::statistics; st2_op = new bvect::statistics; bv1.optimize(0, bvect::opt_compress, st1_op); bv2.optimize(0, bvect::opt_compress, st2_op); struct bvect::statistics st1, st2; bv1.calc_stat(&st1); bv2.calc_stat(&st2); if (st1.max_serialize_mem > st1_op->max_serialize_mem) { cout << "Optimize failed to compute max_serialize_mem" << endl; cout << "calc_stat=" << st1.max_serialize_mem << endl; cout << "optimize=" << st1_op->max_serialize_mem << endl; exit(1); } if (st2.max_serialize_mem > st2_op->max_serialize_mem) { cout << "Optimize failed to compute max_serialize_mem" << endl; cout << "calc_stat=" << st2.max_serialize_mem << endl; cout << "optimize=" << st2_op->max_serialize_mem << endl; exit(1); } delete st1_op; delete st2_op; unsigned char* smem1 = new unsigned char[st1.max_serialize_mem]; unsigned char* smem2 = new unsigned char[st2.max_serialize_mem]; unsigned slen1 = bm::serialize(bv1, smem1); unsigned slen2 = bm::serialize(bv2, smem2); if (slen1 > st1.max_serialize_mem || slen2 > st2.max_serialize_mem) { cout << "Serialization override detected!" << endl; exit(1); } unsigned count = operation_deserializer::deserialize(*bv_target, smem1, 0, set_ASSIGN); cout << slen1 << " " << slen2 << endl; int res = bv1.compare(*bv_target); if (res != 0) { cout << "---------------------------------- " << endl; cout << "bv1.count()=" << bv1.count() << endl; print_stat(bv1); cout << "---------------------------------- " << endl; cout << "bv_target.count()=" << bv_target->count() << endl; print_stat(*bv_target); bv_target->bit_xor(bv1); cout << "First diff=" << bv_target->get_first() << endl; cout << "set_ASSIGN 1 failed!" << endl; exit (1); } cout << "Deserialization ASSIGN into bv1 OK" << endl; { bvect* bv_tmp2 = new bvect(); bm::deserialize(*bv_tmp2, smem1); if (*bv_tmp2 != bv1) { cout << "Deserialize NOT equal to Operation deserialize!" << endl; exit(1); } delete bv_tmp2; } cout << "Operation deserialization... " << op << endl; count= operation_deserializer::deserialize(*bv_target, smem2, 0, op); cout << "OK" << endl; // check if operation was ok { bvect bvt(bv1); switch(op) { case bm::set_OR: bvt |= bv2; break; case bm::set_XOR: bvt ^= bv2; break; case bm::set_AND: bvt &= bv2; break; case bm::set_SUB: bvt -= bv2; break; default: goto no_compare; } if (bvt.compare(*bv_target) != 0) { cout << "Direct Serial operation comparison failed!" << endl; exit(1); } no_compare: ; } /* if (op == bm::set_AND || op == bm::set_OR || op == bm::set_XOR || op == bm::set_SUB) { cout << "3 way operation check... " << op << endl; operation_deserializer::deserialize(*bv_target, bv1, smem2, 0, op); cout << "OK" << endl; bvect bvt(bv1); switch(op) { case bm::set_OR: bvt |= bv2; break; case bm::set_XOR: bvt ^= bv2; break; case bm::set_AND: bvt &= bv2; break; case bm::set_SUB: bvt -= bv2; break; default: goto no_compare2; } if (bvt.compare(*bv_target) != 0) { cout << "3-way Serial operation comparison failed!" << endl; exit(1); } no_compare2: ; } */ if (check_reverse) { cout << "Reverse check... " << endl; bvect bv_tmp2(BM_GAP); operation_deserializer::deserialize(bv_tmp2, smem2, 0, set_ASSIGN); int res = bv_tmp2.compare(bv2); if (res != 0) { cout << "set_ASSIGN failed 2! " << endl; exit(1); } cout << "Deserialization assign to bv_tmp2 OK" << endl; unsigned count_rev = operation_deserializer::deserialize(bv_tmp2, smem1, 0, op); if (count != count_rev) { // print_stat(bv1); /* unsigned c = count_or(bv1, bv2); cout << "Correct count=" << c << endl; c = count_or(bv2, bv1); cout << "Correct count=" << c << endl; bv1 |= bv2; cout << "Count3 = " << bv1.count() << endl;; */ //SaveBVector("err1.bv", bv1); //SaveBVector("err2.bv", bv2); cout << "Operation=" << op << endl; cout << "Serialization operation reverse check failed" << " count = " << count << " count rev= " << count_rev << endl; cout << "See bvector dumps: err1.bv, err2.bv" << endl; exit(1); } } delete [] smem1; delete [] smem2; return count; } void SerializationOperation2Test(bvect* bv_target, bvect& bv1, bvect& bv2, unsigned predicted_count, set_operation op_count, set_operation op_combine) { bv_target->clear(true); cout << "Serialization operation count..." << endl; unsigned scount1 = SerializationOperation(0, bv1, bv2, op_count, true //reverse check ); cout << "Serialization operation count OK." << endl; cout << "Serialization operation. " << endl; unsigned scount2 = SerializationOperation(bv_target, bv1, bv2, op_combine); scount2 = bv_target->count(); if (predicted_count != scount2 || scount1 != scount2) { cout << "Serialization count != predicted" << endl << " predicted=" << predicted_count << " scount1=" << scount1 << " scount2=" << scount2 << endl; cout << endl << "target:" << endl; print_stat(*bv_target); cout << endl << endl << "Reference" << endl; if (op_combine == set_OR) { bv1 |= bv2; if (bv1 != *bv_target) { cout << "Comparison OR error!" << endl; } cout << "OR operation count=" << bv1.count() << endl; print_stat(bv1); } else if (op_combine == set_AND) { bv1 &= bv2; print_stat(bv1); } exit(1); } cout << "OK" << endl; } void print_mv(const bvect_mini &bvect_min, unsigned size) { unsigned i; for (i = 0; i < size; ++i) { bool bflag = bvect_min.is_bit_true(i) != 0; if (bflag) printf("1"); else printf("0"); if ((i % 31) == 0 && (i != 0)) printf("."); } printf("\n"); } void print_gap(const gap_vector& gap_vect, unsigned size) { const gap_word_t *buf = gap_vect.get_buf(); unsigned len = gap_length(buf); printf("[%i:]", *buf++ & 1); for (unsigned i = 1; i < len; ++i) { printf("%i,", *buf++); } printf("\n"); } void CheckGAPMin(const gap_vector& gapv, const bvect_mini& bvect_min, unsigned len) { for (unsigned i = 0; i < len; ++i) { int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); if(bit1 != bit2) { cout << "Bit comparison failed. " << "Bit N=" << i << endl; assert(0); exit(1); } } } void CheckIntervals(const bvect& bv, unsigned max_bit) { unsigned cnt0 = count_intervals(bv); unsigned cnt1 = 1; bool bit_prev = bv.test(0); for (unsigned i = 1; i < max_bit; ++i) { bool bit = bv.test(i); cnt1 += bit_prev ^ bit; bit_prev = bit; } if (cnt0 != cnt1) { cout << "CheckIntervals error. " << "bm count=" << cnt0 << " Control = " << cnt1 << endl; exit(1); } } template void CheckCountRange(const T& vect, unsigned left, unsigned right, unsigned* block_count_arr=0) { unsigned cnt1 = vect.count_range(left, right, block_count_arr); unsigned cnt2 = 0; //cout << endl; for (unsigned i = left; i <= right; ++i) { if (vect.test(i)) { // cout << i << " " << flush; ++cnt2; } } //cout << endl; if (cnt1 != cnt2) { cout << "Bitcount range failed!" << "left=" << left << " right=" << right << endl << "count_range()=" << cnt1 << " check=" << cnt2; exit(1); } } unsigned BitCountChange(unsigned word) { unsigned count = 1; unsigned bit_prev = word & 1; word >>= 1; for (unsigned i = 1; i < 32; ++i) { unsigned bit = word & 1; count += bit ^ bit_prev; bit_prev = bit; word >>= 1; } return count; } void DetailedCheckVectors(const bvect_mini &bvect_min, const bvect &bvect_full, unsigned size) { cout << "Detailed check" << endl; //bvect_full.stat(); // detailed bit by bit comparison. Paranoia check. unsigned i; for (i = 0; i < size; ++i) { bool bv_m_flag = bvect_min.is_bit_true(i) != 0; bool bv_f_flag = bvect_full.get_bit(i) != 0; if (bv_m_flag != bv_f_flag) { printf("Bit %u is non conformant. vect_min=%i vect_full=%i\n", i, (int)bv_m_flag, (int)bv_f_flag); cout << "Non-conformant block number is: " << unsigned(i >> bm::set_block_shift) << endl; // throw 110; exit(1); } if (PROGRESS_PRINT) { if ( (i % PROGRESS_PRINT) == 0) { printf("."); } } } printf("\n detailed check ok.\n"); } // vectors comparison check void CheckVectors(bvect_mini &bvect_min, bvect &bvect_full, unsigned size, bool detailed) { cout << "\nVectors checking...bits to compare = " << size << endl; cout << "Bitcount summary : " << endl; unsigned min_count = bvect_min.bit_count(); cout << "minvector count = " << min_count << endl; unsigned count = bvect_full.count(); unsigned full_count = bvect_full.recalc_count(); cout << "fullvector re-count = " << full_count << endl; if (min_count != full_count) { cout << "fullvector count = " << count << endl; cout << "Count comparison failed !!!!" << endl; print_stat(bvect_full); DetailedCheckVectors(bvect_min, bvect_full, size); exit(1); } if (full_count) { bool any = bvect_full.any(); if (!any) { cout << "Anycheck failed!" << endl; exit(1); } } // get_next comparison cout << "Positive bits comparison..." << flush; unsigned nb_min = bvect_min.get_first(); unsigned nb_ful = bvect_full.get_first(); bvect::counted_enumerator en = bvect_full.first(); unsigned nb_en = *en; if (nb_min != nb_ful) { cout << "!!!! First bit comparison failed. Full id = " << nb_ful << " Min id = " << nb_min << endl; bool bit_f = bvect_full.get_bit(nb_ful); cout << "Full vector'd bit #" << nb_ful << "is:" << bit_f << endl; bool bit_m = (bvect_min.is_bit_true(nb_min) == 1); cout << "Min vector'd bit #" << nb_min << "is:" << bit_m << endl; print_stat(bvect_full); DetailedCheckVectors(bvect_min, bvect_full, size); exit(1); } if (full_count) { unsigned bit_count = 1; unsigned en_prev = nb_en; do { nb_min = bvect_min.get_next(nb_min); if (nb_min == 0) { break; } en_prev = nb_en; ++en; nb_en = *en; // nb_en = bvect_full.get_next(nb_en); ++bit_count; if (nb_en != nb_min) { nb_ful = bvect_full.get_next(en_prev); cout << "!!!!! next bit comparison failed. Full id = " << nb_ful << " Min id = " << nb_min << " Enumerator = " << nb_en << endl; // bvect_full.stat(); // DetailedCheckVectors(bvect_min, bvect_full, size); exit(1); } if ( (bit_count % PROGRESS_PRINT) == 0) { cout << "." << flush; } } while (en.valid()); if (bit_count != min_count) { cout << " Bit count failed." << " min = " << min_count << " bit = " << bit_count << endl; exit(1); } } cout << "OK" << endl; return; } void ClearAllTest() { bvect bvect_full; for (int i = 0; i < 100000; ++i) { bvect_full.set_bit(i); } bvect_full.optimize(); bvect_full.clear(); print_stat(bvect_full); int count = bvect_full.count(); assert(count == 0); print_stat(bvect_full); } void WordCmpTest() { cout << "---------------------------- WordCmp test" << endl; for (int i = 0; i < 10000000; ++i) { unsigned w1 = rand(); unsigned w2 = rand(); int res = wordcmp0(w1, w2); int res2 = wordcmp(w1, w2); if (res != res2) { printf("WordCmp failed !\n"); exit(1); } res = wordcmp0((unsigned)0U, (unsigned)w2); res2 = wordcmp((unsigned)0U, (unsigned)w2); if (res != res2) { printf("WordCmp 0 test failed !\n"); exit(1); } res = wordcmp0((unsigned)~0U, (unsigned)w2); res2 = wordcmp((unsigned)~0U, (unsigned)w2); if (res != res2) { printf("WordCmp ~0 test failed !\n"); exit(1); } res = wordcmp0((unsigned)w2, (unsigned)0); res2 = wordcmp((unsigned)w2, (unsigned)0); if (res != res2) { printf("WordCmp 0-2 test failed !\n"); exit(1); } } cout << "Ok." << endl; } void BasicFunctionalityTest() { cout << "---------------------------- Basic functinality test" << endl; assert(ITERATIONS < BITVECT_SIZE); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; bvect bvect_full1; printf("\nBasic functionality test.\n"); // filling vectors with regular values unsigned i; for (i = 0; i < ITERATIONS; ++i) { bvect_min.set_bit(i); bvect_full.set_bit(i); } bvect_full1.set_range(0, ITERATIONS-1); CheckCountRange(bvect_full, 0, ITERATIONS); CheckCountRange(bvect_full, 10, ITERATIONS+10); if (bvect_full1 != bvect_full) { cout << "set_range failed!" << endl; print_stat(bvect_full1); exit(1); } print_stat(bvect_full); print_stat(bvect_full1); // checking the results unsigned count_min = 0; for (i = 0; i < ITERATIONS; ++i) { if (bvect_min.is_bit_true(i)) ++count_min; } unsigned count_full = bvect_full.count(); if (count_min == count_full) { printf("simple count test ok.\n"); } else { printf("simple count test failed count_min = %i count_full = %i\n", count_min, count_full); exit(1); } // detailed vectors verification CheckVectors(bvect_min, bvect_full, ITERATIONS); // now clearning for (i = 0; i < ITERATIONS; i+=2) { bvect_min.clear_bit(i); bvect_full.clear_bit(i); bvect_full1.set_range(i, i, false); } CheckVectors(bvect_min, bvect_full, ITERATIONS); CheckVectors(bvect_min, bvect_full1, ITERATIONS); for (i = 0; i < ITERATIONS; ++i) { bvect_min.clear_bit(i); } bvect_full.clear(); CheckVectors(bvect_min, bvect_full, ITERATIONS); cout << "Random step filling" << endl; for (i = rand()%10; i < ITERATIONS; i+=rand()%10) { bvect_min.clear_bit(i); bvect_full.clear_bit(i); } CheckVectors(bvect_min, bvect_full, ITERATIONS); bvect bv1; bvect bv2; bv1[10] = true; bv1[1000] = true; bv2[200] = bv2[700] = bv2[500] = true; bv1.swap(bv2); if (bv1.count() != 3) { cout << "Swap test failed!" << endl; exit(1); } if (bv2.count() != 2) { cout << "Swap test failed!" << endl; exit(1); } } void TestRandomSubset(const bvect& bv, bm::random_subset& rsub) { bvect bv_subset; unsigned bcnt = bv.count(); unsigned samples[] = { 0, 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, bcnt / 5, bcnt / 4, bcnt / 3, bcnt / 2, (bcnt * 2)/3, bcnt }; unsigned samples_size = sizeof(samples)/sizeof(*samples); printf("Taking random sub-sets: "); for (unsigned i = 0; i < samples_size; ++i) { unsigned sample_count = samples[i]; printf(" %u, ", sample_count); rsub.sample(bv_subset, bv, sample_count); if (sample_count > bcnt) sample_count = bcnt; if (sample_count != bv_subset.count()) { printf("\nRandom subset failed! sample_count = %u result_count=%u\n", sample_count, bv_subset.count()); exit(1); } bv_subset -= bv; if (bv_subset.count() != 0) { printf("\nRandom subset failed! Extra bits set! \n"); exit(1); } } printf("\n"); } void SimpleRandomFillTest() { assert(ITERATIONS < BITVECT_SIZE); bm::random_subset rsub; cout << "-------------------------- SimpleRandomFillTest" << endl; printf("Test for Random inverted subset."); { bvect bv; bv.invert(); TestRandomSubset(bv, rsub); } { printf("Simple random fill test 1."); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; bvect_full.set_new_blocks_strat(bm::BM_BIT); unsigned iter = ITERATIONS / 5; printf("\nSimple Random fill test ITERATIONS = %i\n", iter); bvect_min.set_bit(0); bvect_full.set_bit(0); unsigned i; for (i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.set_bit(num); bvect_full.set_bit(num); if ((i % 1000) == 0) cout << "." << flush; CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); } CheckVectors(bvect_min, bvect_full, iter); CheckCountRange(bvect_full, 0, iter); TestRandomSubset(bvect_full, rsub); printf("Simple random fill test 2."); for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.clear_bit(num); bvect_full.clear_bit(num); } CheckVectors(bvect_min, bvect_full, iter); } { printf("\nSimple random fill test 3.\n"); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full(bm::BM_GAP); unsigned iter = ITERATIONS; printf("\nSimple Random fill test ITERATIONS = %i\n", iter); unsigned i; for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.set_bit(num); bvect_full.set_bit(num); CheckCountRange(bvect_full, 0, 65535); CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); if ((i % 1000) == 0) cout << "." << flush; } CheckVectors(bvect_min, bvect_full, iter); TestRandomSubset(bvect_full, rsub); printf("Simple random fill test 4."); for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.clear_bit(num); bvect_full.clear_bit(num); CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); if ((i % 1000) == 0) cout << "." << flush; } CheckVectors(bvect_min, bvect_full, iter); CheckCountRange(bvect_full, 0, iter); TestRandomSubset(bvect_full, rsub); } } void RangeRandomFillTest() { assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- RangeRandomFillTest" << endl; { bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; printf("Range Random fill test\n"); unsigned min = BITVECT_SIZE / 2; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; FillSets(&bvect_min, &bvect_full, min, max, 0); CheckVectors(bvect_min, bvect_full, BITVECT_SIZE); CheckCountRange(bvect_full, min, max); } { bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; printf("Range Random fill test\n"); unsigned min = BITVECT_SIZE / 2; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; FillSetsIntervals(&bvect_min, &bvect_full, min, max, 4); CheckVectors(bvect_min, bvect_full, BITVECT_SIZE); CheckCountRange(bvect_full, min, max); } } void AndOperationsTest() { assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- AndOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("AND test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_and(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_and(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_and(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_AND, set_AND); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckVectors(bvect_min1, bv_target_s, 256); CheckCountRange(bvect_full1, 0, 256); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; printf("AND test stage 1.\n"); for (int i = 0; i < 112; ++i) { bvect_min1.set_bit(i); bvect_full1.set_bit(i); bvect_min2.set_bit(i); bvect_full2.set_bit(i); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); // FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); // FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_and(bvect_min2); bm::id_t predicted_count = bm::count_and(bvect_full1,bvect_full2); bm::id_t predicted_any = bm::any_and(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_AND, set_AND); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("AND test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bm::id_t predicted_count = bm::count_and(bvect_full1,bvect_full2); bm::id_t predicted_any = bm::any_and(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_AND, set_AND); bvect_min1.combine_and(bvect_min2); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; print_stat(bvect_full1); exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("AND test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bvect_min1.combine_and(bvect_min2); bm::id_t predicted_count = bm::count_and(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_and(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_AND, set_AND); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); CheckCountRange(bvect_full1, BITVECT_SIZE/2, BITVECT_SIZE); } cout << "------------------------------" << endl; printf("AND test stage 4. combine_and_sorted\n"); { unsigned ids[] = {0, 1, 2, 3, 10, 65535, 65536, 65535*2, 65535*3}; unsigned to_add = sizeof(ids)/sizeof(unsigned); bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); for (unsigned i = 2; i < to_add; ++i) { bvect_full1.set(ids[i]); bvect_min1.set_bit(ids[i]); bvect_full2.set(ids[i]); bvect_min2.set_bit(ids[i]); } unsigned* first = ids; unsigned* last = ids + to_add; bvect_min1.combine_and(bvect_min2); bm::combine_and_sorted(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); } } void OrOperationsTest() { assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- OrOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("OR test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_or(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_or(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_OR, set_OR); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << predicted_count << " " << count << endl; print_stat(bvect_full1); exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckVectors(bvect_min1, bv_target_s, 256); CheckCountRange(bvect_full1, 0, 256); CheckCountRange(bvect_full1, 128, 256); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("OR test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_or(bvect_min2); bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_or(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_OR, set_OR); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("OR test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bvect_min1.combine_or(bvect_min2); unsigned mcnt = bvect_min1.bit_count(); cout << mcnt << endl; bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); cout << predicted_count << endl; bm::id_t predicted_any = bm::any_or(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_OR, set_OR); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); } cout << "Testing combine_or" << endl; { bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned ids[10000]; unsigned to_add = 10000; unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); } { unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); } } void SubOperationsTest() { assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- SubOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("SUB test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_sub(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_sub(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_sub(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_SUB_AB, set_SUB); bvect_full1.bit_sub(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckVectors(bvect_min1, bv_target_s, 256); CheckCountRange(bvect_full1, 0, 256); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("SUB test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_sub(bvect_min2); bm::id_t predicted_count = bm::count_sub(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_sub(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_SUB_AB, set_SUB); bvect_full1.bit_sub(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << predicted_count << " " << count << endl; print_stat(bvect_full1); exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("SUB test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bvect_min1.combine_sub(bvect_min2); bm::id_t predicted_count = bm::count_sub(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_sub(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_SUB_AB, set_SUB); bvect_full1.bit_sub(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); } } void XorOperationsTest() { assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- XorOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("XOR test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_xor(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_xor(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_xor(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_XOR, set_XOR); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "1.Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckVectors(bvect_min1, bv_target_s, 256); CheckCountRange(bvect_full1, 0, 256); CheckCountRange(bvect_full1, 128, 256); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect2.set_bit(i); bvect_min2.set_bit(i); } bvect2.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bm::id_t predicted_any = bm::any_xor(bvect1, bvect2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect1, bvect2, predicted_count, set_COUNT_XOR, set_XOR); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "2.Predicted count error!" << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE, true); CheckCountRange(bvect1, 0, BITVECT_SIZE); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect1.set_bit(i); bvect_min1.set_bit(i); } bvect1.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bm::id_t predicted_any = bm::any_xor(bvect1, bvect2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect1, bvect2, predicted_count, set_COUNT_XOR, set_XOR); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "3.Predicted count error!" << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE, true); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect1.set_bit(i); bvect_min1.set_bit(i); bvect2.set_bit(i); bvect_min2.set_bit(i); } bvect1.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bm::id_t predicted_any = bm::any_xor(bvect1, bvect2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect1, bvect2, predicted_count, set_COUNT_XOR, set_XOR); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "4.Predicted count error!" << endl; cout << count << " " << predicted_count << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("XOR test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_xor(bvect_min2); bm::id_t predicted_count = bm::count_xor(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_xor(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_XOR, set_XOR); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "5.Predicted count error!" << endl; cout << count << " " << predicted_count << endl; print_stat(bvect_full1); exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("XOR test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bm::id_t predicted_count = bm::count_xor(bvect_full1, bvect_full2); bm::id_t predicted_any = bm::any_xor(bvect_full1, bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, bvect_full1, bvect_full2, predicted_count, set_COUNT_XOR, set_XOR); bvect_min1.combine_xor(bvect_min2); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "6.Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckVectors(bvect_min1, bv_target_s, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); } cout << "Testing combine_xor" << endl; { bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned ids[10000]; unsigned to_add = 10000; unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned ids[10000]={0,}; unsigned to_add = 10000; for (unsigned i = 0; i < to_add; i+=100) { ids[i] = i; bvect_full2.set(i); bvect_min1.set_bit(i); } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } } void ComparisonTest() { cout << "-------------------------------------- ComparisonTest" << endl; bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; int res1, res2; bvect_full1.set_bit(31); bvect_full2.set_bit(63); res1 = bvect_full1.compare(bvect_full2); if (res1 != 1) { printf("Comparison test failed 1\n"); exit(1); } bvect_full1.clear(); bvect_full2.clear(); bvect_min1.set_bit(10); bvect_min2.set_bit(10); bvect_full1.set_bit(10); bvect_full2.set_bit(10); res1 = bvect_min1.compare(bvect_min2); res2 = bvect_full1.compare(bvect_full2); if (res1 != res2) { printf("Comparison test failed 1\n"); exit(1); } printf("Comparison 2.\n"); bvect_min1.set_bit(11); bvect_full1.set_bit(11); res1 = bvect_min1.compare(bvect_min2); res2 = bvect_full1.compare(bvect_full2); if (res1 != res2 && res1 != 1) { printf("Comparison test failed 2\n"); exit(1); } res1 = bvect_min2.compare(bvect_min1); res2 = bvect_full2.compare(bvect_full1); if (res1 != res2 && res1 != -1) { printf("Comparison test failed 2.1\n"); exit(1); } printf("Comparison 3.\n"); bvect_full1.optimize(); res1 = bvect_min1.compare(bvect_min2); res2 = bvect_full1.compare(bvect_full2); if (res1 != res2 && res1 != 1) { printf("Comparison test failed 3\n"); exit(1); } res1 = bvect_min2.compare(bvect_min1); res2 = bvect_full2.compare(bvect_full1); if (res1 != res2 && res1 != -1) { printf("Comparison test failed 3.1\n"); exit(1); } printf("Comparison 4.\n"); bvect_full2.optimize(); res1 = bvect_min1.compare(bvect_min2); res2 = bvect_full1.compare(bvect_full2); if (res1 != res2 && res1 != 1) { printf("Comparison test failed 4\n"); exit(1); } res1 = bvect_min2.compare(bvect_min1); res2 = bvect_full2.compare(bvect_full1); if (res1 != res2 && res1 != -1) { printf("Comparison test failed 4.1\n"); exit(1); } printf("Comparison 5.\n"); unsigned i; for (i = 0; i < 65536; ++i) { bvect_full1.set_bit(i); } res1 = bvect_min1.compare(bvect_min2); res2 = bvect_full1.compare(bvect_full2); if (res1 != res2 && res1 != 1) { printf("Comparison test failed 5\n"); exit(1); } bvect_full1.optimize(); res1 = bvect_min2.compare(bvect_min1); res2 = bvect_full2.compare(bvect_full1); if (res1 != res2 && res1 != -1) { printf("Comparison test failed 5.1\n"); exit(1); } } void DesrializationTest2() { bvect bvtotal; unsigned size = BITVECT_SIZE - 10; bvect bv1; bvect bv2; int i; for (i = 10; i < 165536; i+=2) { bv1.set_bit(i); } bv1.optimize(); print_stat(bv1); struct bvect::statistics st1; bv1.calc_stat(&st1); unsigned char* sermem = new unsigned char[st1.max_serialize_mem]; unsigned slen2 = bm::serialize(bv1, sermem); assert(slen2); slen2 = 0; bm::deserialize(bvtotal, sermem); bvect bv_target_s; operation_deserializer::deserialize(bv_target_s, sermem, 0, set_OR); bvtotal.optimize(); int res = bvtotal.compare(bv_target_s); if (res != 0) { cout << "Operation deserialization error 1" << endl; exit(1); } for (i = 55000; i < 165536; ++i) { bv2.set_bit(i); } bv2.optimize(); print_stat(bv2); struct bvect::statistics st2; bv2.calc_stat(&st2); unsigned char* sermem2 = new unsigned char[st2.max_serialize_mem]; unsigned slen = bm::serialize(bv2, sermem2); assert(slen); slen = 0; bm::deserialize(bvtotal, sermem2); print_stat(bvtotal); operation_deserializer::deserialize(bv_target_s, sermem2, 0, set_OR); res = bvtotal.compare(bv_target_s); if (res != 0) { cout << "Operation deserialization error 2" << endl; exit(1); } // bvtotal.optimize(); // bvtotal.stat(); bm::deserialize(bvtotal, sermem2); bm::deserialize(bvtotal, sermem); operation_deserializer::deserialize(bv_target_s, sermem2, 0, set_OR); operation_deserializer::deserialize(bv_target_s, sermem, 0, set_OR); res = bvtotal.compare(bv_target_s); if (res != 0) { cout << "Deserialization test failed! 3" << endl; exit(1); } delete [] sermem; delete [] sermem2; bvtotal.clear(); bv_target_s.clear(false); int clcnt = 0; int repetitions = 25; for (i = 0; i < repetitions; ++i) { cout << endl << endl << "Deserialization STEP " << i << endl; bvect_mini* bvect_min1= new bvect_mini(size); bvect* bvect_full1= new bvect(); FillSetsRandomMethod(bvect_min1, bvect_full1, 1, size, 1); struct bvect::statistics st; bvect_full1->calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(*bvect_full1, sermem); unsigned char* smem = new unsigned char[slen]; ::memcpy(smem, sermem, slen); // cout << "Serialized vector" << endl; // bvect_full1->stat(); // cout << "Before deserialization" << endl; // bvtotal.stat(); bm::deserialize(bvtotal, smem); operation_deserializer::deserialize(bv_target_s, smem, 0, set_OR); res = bvtotal.compare(bv_target_s); if (res != 0) { unsigned bit_idx = bv_target_s.get_first(); cout << bit_idx << " " << bv_target_s.get_next(bit_idx) << endl;; print_stat(bv_target_s); cout << "Operation deserialization error 2" << endl; exit(1); } // cout << "After deserialization" << endl; // bvtotal.stat(); bvtotal.optimize(); bv_target_s.optimize(); // cout << "After optimization" << endl; // bvtotal.stat(); if (++clcnt == 5) { clcnt = 0; bvtotal.clear(); bv_target_s.clear(); // cout << "Post clear." << endl; // bvtotal.stat(); } delete [] sermem; delete [] smem; delete bvect_min1; delete bvect_full1; } // for i } void StressTest(int repetitions, int set_operation = -1) { unsigned RatioSum = 0; unsigned SRatioSum = 0; unsigned DeltaSum = 0; unsigned SDeltaSum = 0; unsigned clear_count = 0; bvect bvtotal; bvtotal.set_new_blocks_strat(bm::BM_GAP); bm::random_subset rsub; cout << "----------------------------StressTest" << endl; unsigned size = BITVECT_SIZE - 10; //size = BITVECT_SIZE / 10; int i; for (i = 0; i < repetitions; ++i) { cout << endl << " - - - - - - - - - - - - STRESS STEP " << i; switch (set_operation) { case 0: cout << " [OR]"; break; case 1: cout << " [SUB]";break; case 2: cout << " [XOR]";break; case 3: cout << " [AND]";break; default: cout << " [RANDOM]"; } cout << endl; switch (rand() % 3) { case 0: size = BITVECT_SIZE / 10; break; case 1: size = BITVECT_SIZE / 2; break; default: size = BITVECT_SIZE - 10; break; } // switch bvect_mini* bvect_min1= new bvect_mini(size); bvect_mini* bvect_min2= new bvect_mini(size); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect_full1->set_new_blocks_strat(i&1 ? bm::BM_GAP : bm::BM_BIT); bvect_full2->set_new_blocks_strat(i&1 ? bm::BM_GAP : bm::BM_BIT); int opt = rand() % 2; unsigned start1 = 0; switch (rand() % 3) { case 1: start1 += size / 5; break; default: break; } unsigned start2 = 0; switch (rand() % 3) { case 1: start2 += size / 5; break; default: break; } /* if (i == 3) { g_cnt_check = 1; } */ FillSetsRandomMethod(bvect_min1, bvect_full1, start1, size, opt); FillSetsRandomMethod(bvect_min2, bvect_full2, start2, size, opt); unsigned arr[bm::set_total_blocks]={0,}; bm::id_t cnt = bvect_full1->count(); unsigned last_block = bvect_full1->count_blocks(arr); unsigned sum = bm::sum_arr(&arr[0], &arr[last_block+1]); if (sum != cnt) { cout << "Error in function count_blocks." << endl; cout << "Array sum = " << sum << endl; cout << "BitCount = " << cnt << endl; cnt = bvect_full1->count(); for (unsigned i = 0; i <= last_block; ++i) { if (arr[i]) { cout << "[" << i << ":" << arr[i] << "]"; } } cout << endl; cout << "================" << endl; print_stat(*bvect_full1); exit(1); } CheckCountRange(*bvect_full1, start1, BITVECT_SIZE, arr); CheckIntervals(*bvect_full1, BITVECT_SIZE); CheckCountRange(*bvect_full2, start2, BITVECT_SIZE); CheckCountRange(*bvect_full1, 0, start1, arr); CheckCountRange(*bvect_full2, 0, start2); TestRandomSubset(*bvect_full1, rsub); TestRandomSubset(*bvect_full2, rsub); /* cout << "!!!!!!!!!!!!!!!" << endl; CheckVectors(*bvect_min1, *bvect_full1, size); cout << "!!!!!!!!!!!!!!!" << endl; CheckVectors(*bvect_min2, *bvect_full2, size); cout << "!!!!!!!!!!!!!!!" << endl; bvect_full1->stat(); cout << " --" << endl; bvect_full2->stat(); */ int operation = rand()%5; if (set_operation != -1) operation = set_operation; switch(operation) { case 0: cout << "Operation OR" << endl; bvect_min1->combine_or(*bvect_min2); break; case 1: cout << "Operation SUB" << endl; bvect_min1->combine_sub(*bvect_min2); break; case 2: cout << "Operation XOR" << endl; bvect_min1->combine_xor(*bvect_min2); break; default: cout << "Operation AND" << endl; bvect_min1->combine_and(*bvect_min2); break; } int cres1 = bvect_min1->compare(*bvect_min2); delete bvect_min2; switch(operation) { case 0: { cout << "Operation OR" << endl; bm::id_t predicted_count = bm::count_or(*bvect_full1, *bvect_full2); bm::id_t predicted_any = bm::any_or(*bvect_full1, *bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, *bvect_full1, *bvect_full2, predicted_count, set_COUNT_OR, set_OR); bvect_full1->bit_or(*bvect_full2); bm::id_t count = bvect_full1->count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << "Count = " << count << "Predicted count = " << predicted_count << endl; exit(1); } int res = bvect_full1->compare(bv_target_s); if (res != 0) { cout << "Serialization operation failed!" << endl; exit(1); } } break; case 1: { cout << "Operation SUB" << endl; bm::id_t predicted_count = bm::count_sub(*bvect_full1, *bvect_full2); bm::id_t predicted_any = bm::any_sub(*bvect_full1, *bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, *bvect_full1, *bvect_full2, predicted_count, set_COUNT_SUB_AB, set_SUB); bvect_full1->bit_sub(*bvect_full2); bm::id_t count = bvect_full1->count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << "Count = " << count << "Predicted count = " << predicted_count << endl; exit(1); } int res = bvect_full1->compare(bv_target_s); if (res != 0) { cout << "Serialization operation failed!" << endl; exit(1); } } break; case 2: { cout << "Operation XOR <<<" << endl; bm::id_t predicted_count = bm::count_xor(*bvect_full1, *bvect_full2); bm::id_t predicted_any = bm::any_xor(*bvect_full1, *bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, *bvect_full1, *bvect_full2, predicted_count, set_COUNT_XOR, set_XOR); bvect_full1->bit_xor(*bvect_full2); bm::id_t count = bvect_full1->count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << "Count = " << count << "Predicted count = " << predicted_count << endl; exit(1); } int res = bvect_full1->compare(bv_target_s); if (res != 0) { cout << "Serialization operation failed!" << endl; exit(1); } } break; default: { cout << "Operation AND" << endl; bm::id_t predicted_count = bm::count_and(*bvect_full1, *bvect_full2); bm::id_t predicted_any = bm::any_and(*bvect_full1, *bvect_full2); if (predicted_any == 0 && predicted_count != 0) { cout << "Predicted any error!" << endl; exit(1); } bvect bv_target_s; SerializationOperation2Test(&bv_target_s, *bvect_full1, *bvect_full2, predicted_count, set_COUNT_AND, set_AND); TestRandomSubset(bv_target_s, rsub); bvect bv1(*bvect_full1); bvect_full1->bit_and(*bvect_full2); bm::id_t count = bvect_full1->count(); int res = bvect_full1->compare(bv_target_s); if (res != 0) { //SaveBVector("bv1.bv", bv1); //SaveBVector("bv2.bv", *bvect_full2); cout << "Serialization operation failed!" << endl; exit(1); } if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << "Count = " << count << "Predicted count = " << predicted_count << endl; exit(1); } } break; } cout << "Operation comparison" << endl; CheckVectors(*bvect_min1, *bvect_full1, size); int cres2 = bvect_full1->compare(*bvect_full2); CheckIntervals(*bvect_full1, BITVECT_SIZE); if (cres1 != cres2) { cout << cres1 << " " << cres2 << endl; cout << bvect_full1->get_first() << " " << bvect_full1->count() << endl; cout << bvect_full2->get_first() << " " << bvect_full2->count() << endl; // bvect_full1->stat(1000); cout << endl; // bvect_full2->stat(1000); printf("Bitset comparison operation failed.\n"); exit(1); } { bvect bv1(*bvect_full1); unsigned idx = rand() % size; bool b = bv1[idx]; bool changed; if (b) { changed = bv1.set_bit_conditional(idx, true, false); if (changed) { cout << "Set bit conditional failed!" << endl; exit(1); } b = bv1[idx]; if (!b) { cout << "Set bit conditional failed!" << endl; exit(1); } changed = bv1.set_bit_conditional(idx, false, false); if (changed) { cout << "Set bit conditional failed!" << endl; exit(1); } changed = bv1.set_bit_conditional(idx, true, true); if (changed) { cout << "Set bit conditional failed!" << endl; exit(1); } changed = bv1.set_bit_conditional(idx, false, true); if (!changed) { cout << "Set bit conditional failed!" << endl; exit(1); } b = bv1[idx]; if (b) { cout << "Set bit conditional failed!" << endl; exit(1); } } else { changed = bv1.set_bit_conditional(idx, false, true); if (changed) { cout << "Set bit conditional failed!" << endl; exit(1); } changed = bv1.set_bit_conditional(idx, true, false); if (!changed) { cout << "Set bit conditional failed!" << endl; exit(1); } b = bv1[idx]; if (!b) { cout << "Set bit conditional failed!" << endl; exit(1); } } } delete bvect_full2; struct bvect::statistics st1; bvect_full1->calc_stat(&st1); bvect_full1->optimize(); bvect_full1->optimize_gap_size(); struct bvect::statistics st2; bvect_full1->calc_stat(&st2); unsigned Ratio = (st2.memory_used * 100)/st1.memory_used; RatioSum+=Ratio; DeltaSum+=st1.memory_used - st2.memory_used; cout << "Optimization statistics: " << endl << " MemUsedBefore=" << st1.memory_used << " MemUsed=" << st2.memory_used << " Ratio=" << Ratio << "%" << " Delta=" << st1.memory_used - st2.memory_used << endl; cout << "Optimization comparison" << endl; CheckVectors(*bvect_min1, *bvect_full1, size); bvect_full1->set_gap_levels(gap_len_table_min::_len); CheckVectors(*bvect_min1, *bvect_full1, size); CheckIntervals(*bvect_full1, BITVECT_SIZE); //CheckCountRange(*bvect_full1, 0, size); // Serialization bvect_full1->calc_stat(&st2); cout << "Memory allocation: " << st2.max_serialize_mem << endl; unsigned char* sermem = new unsigned char[st2.max_serialize_mem]; // bvect_full1->stat(); cout << "Serialization..."; unsigned slen = bm::serialize(*bvect_full1, sermem, BM_NO_GAP_LENGTH|BM_NO_BYTE_ORDER); cout << "Ok" << endl; delete bvect_full1; unsigned SRatio = (slen*100)/st2.memory_used; SRatioSum+=SRatio; SDeltaSum+=st2.memory_used - slen; cout << "Serialized mem_max = " << st2.max_serialize_mem << " size= " << slen << " Ratio=" << SRatio << "%" << " Delta=" << st2.memory_used - slen << endl; bvect* bvect_full3= new bvect(); unsigned char* new_sermem = new unsigned char[slen]; memcpy(new_sermem, sermem, slen); delete [] sermem; cout << "Deserialization..."; bm::deserialize(*bvect_full3, new_sermem); bm::deserialize(bvtotal, new_sermem); bvect* bv_target_s=new bvect(); operation_deserializer::deserialize(*bv_target_s, new_sermem, 0, set_OR); cout << "Ok." << endl; delete [] new_sermem; cout << "Optimization..."; bvtotal.optimize(); cout << "Ok." << endl; ++clear_count; if (clear_count == 4) { bvtotal.clear(); clear_count = 0; } cout << "Serialization comparison" << endl; CheckVectors(*bvect_min1, *bvect_full3, size, true); int res = bv_target_s->compare(*bvect_full3); if (res != 0) { CheckVectors(*bvect_min1, *bv_target_s, size, true); } delete bv_target_s; delete bvect_min1; delete bvect_full3; } --i; cout << "Repetitions:" << i << " AVG optimization ratio:" << RatioSum/i << " AVG Delta:" << DeltaSum/i << endl << " AVG serialization Ratio:"<< SRatioSum/i << " Delta:" << SDeltaSum/i << endl; } void CheckGap2DGap(gap_vector& gapv) { bm::gap_word_t dgap_buf[bm::gap_max_buff_len+3]; bm::gap_word_t gap_buf[bm::gap_max_buff_len+3] = {0, }; bm::gap_2_dgap(gapv.get_buf(), dgap_buf); bm::dgap_2_gap(dgap_buf, gap_buf); int c = bm::gapcmp(gap_buf, gapv.get_buf()); if (c != 0) { cout << "Gap1: "; PrintGap(gapv.get_buf()); cout << "D-Gap: "; PrintGap(dgap_buf); cout << "Gap2:"; PrintGap(gap_buf); cout << "DGap conversion failed!" << endl; exit(1); } } void GAPCheck() { cout << "-------------------------------------------GAPCheck" << endl; { gap_vector gapv(0); bvect_mini bvect_min(bm::gap_max_bits); unsigned i; for( i = 0; i < 454; ++i) { bvect_min.set_bit(i); gapv.set_bit(i); } for(i = 0; i < 254; ++i) { bvect_min.clear_bit(i); gapv.clear_bit(i); } for(i = 5; i < 10; ++i) { bvect_min.set_bit(i); gapv.set_bit(i); } for( i = 0; i < bm::gap_max_bits; ++i) { int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); int bit3 = (gapv.test(i) == 1); if (bit1 != bit2) { cout << "problem with bit comparison " << i << endl; exit(1); } if (bit1 != bit3) { cout << "problem with bit test comparison " << i << endl; exit(1); } } } { gap_vector gapv(1); int bit = gapv.is_bit_true(65535); if (bit != 1) { cout << "Bit != 1" << endl; exit(1); } int i; for (i = 0; i < 65536; ++i) { bit = gapv.is_bit_true(i); if (bit != 1) { cout << "2.Bit != 1" << endl; exit(1); } } unsigned cnt = gapv.count_range(0, 65535); if (cnt != 65536) { cout << "count_range failed:" << cnt << endl; exit(1); } CheckCountRange(gapv, 10, 20); CheckCountRange(gapv, 0, 20); CheckGap2DGap(gapv); printf("gapv 1 check ok\n"); } { gap_vector gapv(0); int bit = gapv.is_bit_true(65535); int bit1 = gapv.test(65535); if(bit != 0) { cout << "Bit != 0" << endl; exit(1); } int i; for (i = 0; i < 65536; ++i) { bit = gapv.is_bit_true(i); bit1 = gapv.test(i); if (bit != 0) { cout << "2.Bit != 0 bit =" << i << endl; exit(1); } if (bit1 != 0) { cout << "2.Bit test != 0 bit =" << i << endl; exit(1); } } unsigned cnt = gapv.count_range(0, 65535); if (cnt != 0) { cout << "count_range failed:" << cnt << endl; exit(1); } CheckCountRange(gapv, 10, 20); CheckCountRange(gapv, 0, 20); CheckGap2DGap(gapv); printf("gapv 2 check ok\n"); } { gap_vector gapv(0); gapv.set_bit(1); gapv.set_bit(0); gapv.control(); CheckCountRange(gapv, 0, 20); int bit = gapv.is_bit_true(0); if (bit != 1) { cout << "Trouble" << endl; exit(1); } bit = gapv.is_bit_true(1); if (bit != 1) { cout << "Trouble 2." << endl; exit(1); } bit = gapv.is_bit_true(2); if(bit != 0) { cout << "Trouble 3." << endl; exit(1); } CheckGap2DGap(gapv); } { gap_vector gapv(0); gapv.set_bit(0); gapv.control(); gapv.set_bit(1); gapv.control(); gapv.set_bit(4); gapv.control(); gapv.set_bit(5); gapv.control(); CheckCountRange(gapv, 4, 5); CheckCountRange(gapv, 3, 5); gapv.set_bit(3); CheckCountRange(gapv, 3, 3); CheckCountRange(gapv, 3, 5); gapv.control(); int bit = gapv.is_bit_true(0); if(bit!=1) { cout << "Bug" << endl; } bit = gapv.is_bit_true(1); if(bit!=1) { cout << "Bug2" << endl; } gapv.control(); gapv.set_bit(4); gapv.control(); CheckGap2DGap(gapv); printf("gapv 3 check ok\n"); } { gap_vector gapv(0); bvect_mini bvect_min(bm::gap_max_bits); cout << "++++++1" << endl; print_gap(gapv, 10); gapv.set_bit(bm::gap_max_bits-1); gapv.control(); print_gap(gapv, 10); bvect_min.set_bit(bm::gap_max_bits-1); cout << "++++++3" << endl; gapv.set_bit(5); print_gap(gapv,15); gapv.control(); bvect_min.set_bit(5); cout << "++++++4" << endl; CheckCountRange(gapv, 13, 150); gapv.control(); CheckGap2DGap(gapv); unsigned i; for (i = 0; i < bm::gap_max_bits; ++i) { if (i == 65535) printf("%i\n", i); int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); int bit3 = (gapv.test(i) == 1); if (bit1 != bit2) { cout << "problem with bit comparison " << i << endl; } if (bit1 != bit3) { cout << "problem with bit test comparison " << i << endl; } } gapv.clear_bit(5); bvect_min.clear_bit(5); gapv.control(); CheckGap2DGap(gapv); for ( i = 0; i < bm::gap_max_bits; ++i) { if (i == 65535) printf("%i\n", i); int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); int bit3 = (gapv.test(i) == 1); if (bit1 != bit2) { cout << "2.problem with bit comparison " << i << endl; } if (bit1 != bit3) { cout << "2.problem with bit test comparison " << i << endl; } } printf("gapv check 4 ok.\n"); } { gap_vector gapv(0); bvect_mini bvect_min(65536); int i; for (i = 10; i > 0; i-=2) { bvect_min.set_bit(i); gapv.set_bit(i); gapv.control(); CheckCountRange(gapv, 0, i); int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); int bit3 = (gapv.test(i) != 0); if (bit1 != bit2) { cout << "3.problem with bit comparison " << i << endl; } if (bit1 != bit3) { cout << "3.problem with bit test comparison " << i << endl; } CheckGap2DGap(gapv); } for (i = 0; i < (int)bm::gap_max_bits; ++i) { int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); int bit3 = (gapv.test(i) == 1); if (bit1 != bit2) { cout << "3.problem with bit comparison " << i << endl; } if (bit1 != bit3) { cout << "3.problem with bit test comparison " << i << endl; } } printf("gapv check 5 ok.\n"); } { gap_vector gapv(0); bvect_mini bvect_min(bm::gap_max_bits); int i; for (i = 0; i < 25; ++i) { unsigned id = random_minmax(0, bm::gap_max_bits); bvect_min.set_bit(id); gapv.set_bit(id); gapv.control(); CheckCountRange(gapv, 0, id); CheckCountRange(gapv, id, 65535); CheckGap2DGap(gapv); } for (i = 0; i < (int)bm::gap_max_bits; ++i) { int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); if (bit1 != bit2) { cout << "4.problem with bit comparison " << i << endl; } } for (i = bm::gap_max_bits; i < 0; --i) { int bit1 = (gapv.is_bit_true(i) == 1); int bit2 = (bvect_min.is_bit_true(i) != 0); if (bit1 != bit2) { cout << "5.problem with bit comparison " << i << endl; } } printf("gapv check 6 ok.\n"); } printf("gapv random bit set check ok.\n"); // conversion functions test { // aligned position test bvect bvect; bvect.set_bit(1); bvect.clear(); unsigned* buf = (unsigned*) bvect.get_block(0); bm::or_bit_block(buf, 0, 4); unsigned cnt = bm::bit_block_calc_count_range(buf, 0, 3); assert(cnt == 4); bool bit = bvect.get_bit(0); assert(bit); bit = bvect.get_bit(1); assert(bit); bit = bvect.get_bit(2); assert(bit); bit = bvect.get_bit(3); assert(bit); bit = bvect.get_bit(4); assert(bit==0); bm::or_bit_block(buf, 0, 36); cnt = bm::bit_block_calc_count_range(buf, 0, 35); assert(cnt == 36); for (int i = 0; i < 36; ++i) { bit = (bvect.get_bit(i) != 0); assert(bit); } bit = (bvect.get_bit(36) != 0); assert(bit==0); unsigned count = bvect.recalc_count(); assert(count == 36); cout << "Aligned position test ok." << endl; } { // unaligned position test bvect bvect; bvect.set_bit(0); bvect.clear(); unsigned* buf = (unsigned*) bvect.get_block(0); bm::or_bit_block(buf, 5, 32); bool bit = (bvect.get_bit(4) != 0); assert(bit==0); unsigned cnt = bm::bit_block_calc_count_range(buf, 5, 5+32-1); assert(cnt == 32); cnt = bm::bit_block_calc_count_range(buf, 5, 5+32); assert(cnt == 32); int i; for (i = 5; i < 4 + 32; ++i) { bit = bvect.get_bit(i); assert(bit); } int count = bvect.recalc_count(); assert(count==32); cout << "Unaligned position ok." << endl; } // random test { cout << "random test" << endl; bvect bvect; bvect.set_bit(0); bvect.clear(); unsigned* buf = (unsigned*) bvect.get_block(0); for (int i = 0; i < 5000; ++i) { unsigned start = rand() % 65535; unsigned end = rand() % 65535; if (start > end) { unsigned tmp = end; end = start; start = tmp; } unsigned len = end - start; if (len) { bm::or_bit_block(buf, start, len); unsigned cnt = bm::bit_block_calc_count_range(buf, start, end); if (cnt != len) { cout << "random test: count_range comparison failed. " << " LEN = " << len << " cnt = " << cnt << endl; exit(1); } unsigned count = bvect.recalc_count(); if (count != len) { cout << "random test: count comparison failed. " << " LEN = " << len << " count = " << count << endl; exit(1); } for (unsigned j = start; j < end; ++j) { bool bit = bvect.get_bit(j); if (!bit) { cout << "random test: bit comparison failed. bit#" << i << endl; exit(1); } } // for j } bvect.clear(); if ((i % 100)==0) { cout << "*" << flush; } } // for i cout << endl << "Random test Ok." << endl; } // conversion test cout << "Conversion test" << endl; { gap_vector gapv(0); bvect bvect; gapv.set_bit(0); gapv.set_bit(2); gapv.set_bit(10); gapv.set_bit(11); gapv.set_bit(12); CheckCountRange(gapv, 3, 15); print_gap(gapv, 100); bvect.set_bit(0); bvect.clear(); unsigned* buf = (unsigned*) bvect.get_block(0); gapv.convert_to_bitset(buf); unsigned bitcount = bvect.recalc_count(); if (bitcount != 5) { cout << "test failed: bitcout = " << bitcount << endl; exit(1); } gap_vector gapv1(0); gap_word_t* gap_buf = gapv1.get_buf(); *gap_buf = 0; bit_convert_to_gap(gap_buf, buf, bm::gap_max_bits, bm::gap_max_buff_len); print_gap(gapv1, 100); bitcount = gapv1.bit_count(); if(bitcount != 5) { cout << "2.test_failed: bitcout = " << bitcount << endl; exit(1); } printf("conversion test ok.\n"); } // gap AND test { // special case 1: operand is all 1 gap_vector gapv1(0); gapv1.set_bit(2); gap_vector gapv2(1); gapv1.combine_and(gapv2.get_buf()); gapv1.control(); print_gap(gapv1, 0); int count = gapv1.bit_count(); assert(count == 1); int bit = gapv1.is_bit_true(2); if(bit == 0) { cout << "Wrong bit" << endl; exit(1); } CheckCountRange(gapv1, 0, 17); } { // special case 2: src is all 1 gap_vector gapv1(1); gap_vector gapv2(0); gapv2.set_bit(2); gapv1.combine_and(gapv2.get_buf()); gapv1.control(); print_gap(gapv1, 0); int count = gapv1.bit_count(); assert(count == 1); int bit = gapv1.is_bit_true(2); assert(bit); } { gap_vector gapv; gap_vector gapv1(0); gapv1.set_bit(3); gapv1.set_bit(4); print_gap(gapv1, 0); gap_vector gapv2(0); gapv2.set_bit(2); gapv2.set_bit(3); print_gap(gapv2, 0); unsigned dsize=0; bm::gap_buff_op((gap_word_t*)gapv.get_buf(), gapv1.get_buf(), 0, gapv2.get_buf(), 0, bm::and_op, dsize); print_gap(gapv, 0); gapv.control(); int bit1 = (gapv.is_bit_true(3) == 1); if(bit1 == 0) { cout << "Checking failed." << endl; exit(0); } gapv1.combine_or(gapv2); print_gap(gapv1, 0); gapv1.control(); } { printf("gap AND test 1.\n"); gap_vector gapv1(0); gap_vector gapv2(0); bvect_mini bvect_min1(65536); bvect_mini bvect_min2(65536); gapv1.set_bit(65535); bvect_min1.set_bit(65535); gapv1.set_bit(4); bvect_min1.set_bit(4); gapv2.set_bit(65535); bvect_min2.set_bit(65535); gapv2.set_bit(3); bvect_min2.set_bit(3); CheckCountRange(gapv2, 3, 65535); gapv2.control(); printf("vect1:"); print_gap(gapv1, 0); printf("vect2:");print_gap(gapv2, 0); gapv1.combine_and(gapv2.get_buf()); printf("vect1:");print_gap(gapv1, 0); gapv1.control(); unsigned bit1 = gapv1.is_bit_true(65535); assert(bit1); bvect_min1.combine_and(bvect_min2); CheckGAPMin(gapv1, bvect_min1, bm::gap_max_bits); } { printf("gap random AND test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); bvect_mini bvect_min1(65536); bvect_mini bvect_min2(65536); int i; for (i = 0; i < 25; ++i) { unsigned id = random_minmax(0, 65535); bvect_min1.set_bit(id); gapv1.set_bit(id); gapv1.control(); CheckCountRange(gapv1, 0, id); CheckCountRange(gapv1, id, 65535); } for (i = 0; i < 25; ++i) { unsigned id = random_minmax(0, 65535); bvect_min2.set_bit(id); gapv2.set_bit(id); gapv2.control(); } gapv1.combine_and(gapv2.get_buf()); gapv1.control(); gapv2.control(); bvect_min1.combine_and(bvect_min2); CheckGAPMin(gapv1, bvect_min1, bm::gap_max_bits); printf("gap random AND test ok.\n"); } { printf("gap OR test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); gapv1.set_bit(2); gapv2.set_bit(3); gapv1.combine_or(gapv2); gapv1.control(); print_gap(gapv1, 0); int bit1 = (gapv1.is_bit_true(0) == 1); assert(bit1==0); bit1=(gapv1.is_bit_true(2) == 1); assert(bit1); bit1=(gapv1.is_bit_true(3) == 1); assert(bit1); } { printf("gap XOR test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); gapv1.set_bit(2); gapv2.set_bit(3); gapv1.set_bit(4); gapv2.set_bit(4); print_gap(gapv1, 0); print_gap(gapv2, 0); gapv1.combine_xor(gapv2); gapv1.control(); print_gap(gapv1, 0); int bit1 = (gapv1.is_bit_true(0) == 0); assert(bit1); bit1=(gapv1.is_bit_true(2) == 1); assert(bit1); bit1=(gapv1.is_bit_true(3) == 1); assert(bit1); bit1=(gapv1.is_bit_true(4) == 0); assert(bit1); } { int i; printf("gap random OR test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); bvect_mini bvect_min1(bm::gap_max_bits); bvect_mini bvect_min2(bm::gap_max_bits); for (i = 0; i < 10; ++i) { unsigned id = random_minmax(0, 100); bvect_min1.set_bit(id); gapv1.set_bit(id); gapv1.control(); } for (i = 0; i < 10; ++i) { unsigned id = random_minmax(0, 100); bvect_min2.set_bit(id); gapv2.set_bit(id); gapv2.control(); } print_mv(bvect_min1, 64); print_mv(bvect_min2, 64); gapv1.combine_or(gapv2); gapv1.control(); gapv2.control(); bvect_min1.combine_or(bvect_min2); print_mv(bvect_min1, 64); CheckGAPMin(gapv1, bvect_min1, bm::gap_max_bits); printf("gap random OR test ok.\n"); } { int i; printf("gap random SUB test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); bvect_mini bvect_min1(bm::gap_max_bits); bvect_mini bvect_min2(bm::gap_max_bits); for (i = 0; i < 25; ++i) { unsigned id = random_minmax(0, 100); bvect_min1.set_bit(id); gapv1.set_bit(id); gapv1.control(); } for (i = 0; i < 25; ++i) { unsigned id = random_minmax(0, 100); bvect_min2.set_bit(id); gapv2.set_bit(id); gapv2.control(); } print_mv(bvect_min1, 64); print_mv(bvect_min2, 64); gapv1.combine_sub(gapv2); gapv1.control(); gapv2.control(); bvect_min1.combine_sub(bvect_min2); print_mv(bvect_min1, 64); CheckGAPMin(gapv1, bvect_min1, bm::gap_max_bits); printf("gap random SUB test ok.\n"); } { printf("GAP comparison test.\n"); gap_vector gapv1(0); gap_vector gapv2(0); gapv1.set_bit(3); gapv2.set_bit(3); int res = gapv1.compare(gapv2); if (res != 0) { printf("GAP comparison failed!"); exit(1); } gapv1.set_bit(4); gapv2.set_bit(4); res = gapv1.compare(gapv2); if (res != 0) { printf("GAP comparison failed!"); exit(1); } gapv1.set_bit(0); gapv1.set_bit(1); res = gapv1.compare(gapv2); if (res != 1) { printf("GAP comparison failed!"); exit(1); } gapv2.set_bit(0); gapv2.set_bit(1); res = gapv1.compare(gapv2); if (res != 0) { printf("GAP comparison failed!"); exit(1); } gapv1.clear_bit(1); res = gapv1.compare(gapv2); if (res != -1) { printf("GAP comparison failed!"); exit(1); } } } // ----------------------------------------------------------------------------- void MutationTest() { cout << "--------------------------------- MutationTest" << endl; bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; printf("\nMutation test.\n"); bvect_full.set_new_blocks_strat(bm::BM_GAP); bvect_full.set_bit(5); bvect_full.set_bit(5); bvect_min.set_bit(5); bvect_full.set_bit(65535); bvect_full.set_bit(65537); bvect_min.set_bit(65535); bvect_min.set_bit(65537); bvect_min.set_bit(100000); bvect_full.set_bit(100000); // detailed vectors verification ::CheckVectors(bvect_min, bvect_full, ITERATIONS, false); int i; for (i = 5; i < 20000; i+=3) { bvect_min.set_bit(i); bvect_full.set_bit(i); } ::CheckVectors(bvect_min, bvect_full, ITERATIONS, false); for (i = 100000; i < 200000; i+=3) { bvect_min.set_bit(i); bvect_full.set_bit(i); } ::CheckVectors(bvect_min, bvect_full, 300000); // set-clear functionality { printf("Set-clear functionality test."); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; bvect_full.set_new_blocks_strat(bm::BM_GAP); int i; for (i = 100000; i < 100010; ++i) { bvect_min.set_bit(i); bvect_full.set_bit(i); } ::CheckVectors(bvect_min, bvect_full, 300000); for (i = 100000; i < 100010; ++i) { bvect_min.clear_bit(i); bvect_full.clear_bit(i); } ::CheckVectors(bvect_min, bvect_full, 300000); bvect_full.optimize(); CheckVectors(bvect_min, bvect_full, 65536);//max+10); } } void MutationOperationsTest() { cout << "------------------------------------ MutationOperationsTest" << endl; printf("Mutation operations test 1.\n"); { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_BIT); bvect_full1.set_bit(100); bvect_min1.set_bit(100); int i; for(i = 0; i < 10000; i+=2) { bvect_full2.set_bit(i); bvect_min2.set_bit(i); } print_stat(bvect_full2); CheckVectors(bvect_min2, bvect_full2, 65536, true); bvect_min1.combine_and(bvect_min2); bvect_full1.bit_and(bvect_full2); CheckVectors(bvect_min1, bvect_full1, 65536);//max+10); } printf("Mutation operations test 2.\n"); { unsigned delta = 65536; bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); int i; for(i = 0; i < 1000; i+=1) { bvect_full1.set_bit(delta+i); bvect_min1.set_bit(delta+i); } for(i = 0; i < 100; i+=2) { bvect_full2.set_bit(delta+i); bvect_min2.set_bit(delta+i); } // CheckVectors(bvect_min2, bvect_full2, 65536); bvect_min1.combine_and(bvect_min2); bvect_full1.bit_and(bvect_full2); CheckVectors(bvect_min1, bvect_full1, 65536);//max+10); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, 65536);//max+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect_full1; bvect_full1.set_bit(3); bvect_min1.set_bit(3); struct bvect::statistics st; bvect_full1.calc_stat(&st); // serialization unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(bvect_full1, sermem); cout << "BVECTOR SERMEM=" << slen << endl; bvect bvect_full3; bm::deserialize(bvect_full3, sermem); print_stat(bvect_full3); CheckVectors(bvect_min1, bvect_full3, 100, true); } printf("Mutation operations test 3.\n"); { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned min = BITVECT_SIZE / 2 - ITERATIONS; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; unsigned len = max - min; FillSets(&bvect_min1, &bvect_full1, min, max, 0); FillSets(&bvect_min1, &bvect_full1, 0, len, 5); printf("Bvect_FULL 1 STAT\n"); print_stat(bvect_full1); // CheckVectors(bvect_min1, bvect_full1, max+10, false); FillSets(&bvect_min2, &bvect_full2, min, max, 0); FillSets(&bvect_min2, &bvect_full2, 0, len, 0); printf("Bvect_FULL 2 STAT\n"); print_stat(bvect_full2); // CheckVectors(bvect_min2, bvect_full2, max+10); bvect_min1.combine_and(bvect_min2); bvect_full1.bit_and(bvect_full2); printf("Bvect_FULL 1 STAT after AND\n"); print_stat(bvect_full1); CheckVectors(bvect_min1, bvect_full1, max+10, false); struct bvect::statistics st; bvect_full1.calc_stat(&st); cout << "BVECTOR: GAP=" << st.gap_blocks << " BIT=" << st.bit_blocks << " MEM=" << st.memory_used << " SERMAX=" << st.max_serialize_mem << endl; cout << "MINIVECT: " << bvect_min1.mem_used() << endl; bvect_full1.optimize(); print_stat(bvect_full1); CheckVectors(bvect_min1, bvect_full1, max+10, false); bvect_full1.calc_stat(&st); cout << "BVECTOR: GAP=" << st.gap_blocks << " BIT=" << st.bit_blocks << " MEM=" << st.memory_used << " SERMAX=" << st.max_serialize_mem << endl; cout << "MINIVECT: " << bvect_min1.mem_used() << endl; // serialization unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(bvect_full1, sermem); cout << "BVECTOR SERMEM=" << slen << endl; bvect bvect_full3; bm::deserialize(bvect_full3, sermem); print_stat(bvect_full3); CheckVectors(bvect_min1, bvect_full3, max+10, true); delete [] sermem; cout << "Copy constructor check." << endl; { bvect bvect_full4(bvect_full3); print_stat(bvect_full3); CheckVectors(bvect_min1, bvect_full4, max+10, true); } } } void SerializationTest() { cout << " ----------------------------------- SerializationTest" << endl; cout << "Serialization STEP 0" << endl; { unsigned size = BITVECT_SIZE/6000; bvect_mini* bvect_min1= new bvect_mini(BITVECT_SIZE); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect* bv_target_s= new bvect(); bvect_full1->set_new_blocks_strat(bm::BM_BIT); bvect_full2->set_new_blocks_strat(bm::BM_BIT); for(unsigned i = 0; i < size; ++i) { bvect_full1->set_bit(i); bvect_min1->set_bit(i); } bvect_full1->optimize(); CheckVectors(*bvect_min1, *bvect_full1, size, true); bvect::statistics st; bvect_full1->calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(*bvect_full1, sermem); cout << "Serialized mem_max = " << st.max_serialize_mem << " size= " << slen << " Ratio=" << (slen*100)/st.max_serialize_mem << "%" << endl; bm::deserialize(*bvect_full2, sermem); operation_deserializer::deserialize(*bv_target_s, sermem, 0, set_OR); delete [] sermem; CheckVectors(*bvect_min1, *bvect_full2, size, true); CheckVectors(*bvect_min1, *bv_target_s, size, true); delete bvect_full2; delete bvect_min1; delete bvect_full1; delete bv_target_s; } { unsigned size = BITVECT_SIZE/6000; bvect_mini* bvect_min1= new bvect_mini(BITVECT_SIZE); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect* bv_target_s= new bvect(); bvect_full1->set_new_blocks_strat(bm::BM_BIT); bvect_full2->set_new_blocks_strat(bm::BM_BIT); bvect_full1->set_bit(131072); bvect_min1->set_bit(131072); bvect_full1->optimize(); bvect::statistics st; bvect_full1->calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(*bvect_full1, sermem); cout << "Serialized mem_max = " << st.max_serialize_mem << " size= " << slen << " Ratio=" << (slen*100)/st.max_serialize_mem << "%" << endl; bm::deserialize(*bvect_full2, sermem); operation_deserializer::deserialize(*bv_target_s, sermem, 0, set_OR); delete [] sermem; CheckVectors(*bvect_min1, *bvect_full2, size, true); CheckVectors(*bvect_min1, *bv_target_s, size, true); delete bvect_full2; delete bvect_min1; delete bvect_full1; delete bv_target_s; } cout << "Serialization STEP 1." << endl; { bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect_full1; bvect_full1.set_new_blocks_strat(bm::BM_GAP); unsigned min = BITVECT_SIZE / 2 - ITERATIONS; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; unsigned len = max - min; FillSets(&bvect_min1, &bvect_full1, min, max, 0); FillSets(&bvect_min1, &bvect_full1, 0, len, 5); // shot some random bits int i; for (i = 0; i < 10000; ++i) { unsigned bit = rand() % BITVECT_SIZE; bvect_full1.set_bit(bit); bvect_min1.set_bit(bit); } bvect::statistics st; bvect_full1.calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; print_stat(bvect_full1); unsigned slen = bm::serialize(bvect_full1, sermem); cout << "Serialized len = " << slen << endl; bvect bvect_full3; bm::deserialize(bvect_full3, sermem); bvect* bv_target_s = new bvect(); operation_deserializer::deserialize(*bv_target_s, sermem, 0, set_OR); CheckVectors(bvect_min1, bvect_full3, max+10, true); CheckVectors(bvect_min1, *bv_target_s, max+10, true); delete [] sermem; delete bv_target_s; } cout << "Stage 2" << endl; { bvect_mini* bvect_min1= new bvect_mini(BITVECT_SIZE); // bm::bvect_mini* bvect_min2= new bm::bvect_mini(BITVECT_SIZE); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect_full1->set_new_blocks_strat(bm::BM_GAP); bvect_full2->set_new_blocks_strat(bm::BM_GAP); FillSetsRandomMethod(bvect_min1, bvect_full1, 1, BITVECT_SIZE-10, 1); // FillSetsRandomMethod(bvect_min2, bvect_full2, 1, BITVECT_SIZE-10, 1); //bvect_full1->stat(); cout << "Filling. OK." << endl; bvect::statistics st; bvect_full1->calc_stat(&st); cout << st.max_serialize_mem << endl; unsigned char* sermem = new unsigned char[st.max_serialize_mem]; cout << "Serialization" << endl; unsigned slen = bm::serialize(*bvect_full1, sermem); cout << "Serialized mem_max = " << st.max_serialize_mem << " size= " << slen << " Ratio=" << (slen*100)/st.max_serialize_mem << "%" << endl; cout << "Deserialization" << endl; bm::deserialize(*bvect_full2, sermem); cout << "Deserialization ok" << endl; bvect* bv_target_s=new bvect(); operation_deserializer::deserialize(*bv_target_s, sermem, 0, set_OR); CheckVectors(*bvect_min1, *bvect_full2, BITVECT_SIZE, true); CheckVectors(*bvect_min1, *bv_target_s, BITVECT_SIZE, true); delete [] sermem; delete bv_target_s; delete bvect_full2; delete bvect_min1; delete bvect_full1; } cout << "Stage 3" << endl; { bvect_mini* bvect_min1= new bvect_mini(BITVECT_SIZE); bvect_mini* bvect_min2= new bvect_mini(BITVECT_SIZE); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect_full1->set_new_blocks_strat(bm::BM_GAP); bvect_full2->set_new_blocks_strat(bm::BM_GAP); FillSetsRandomMethod(bvect_min1, bvect_full1, 1, BITVECT_SIZE, 1); FillSetsRandomMethod(bvect_min2, bvect_full2, 1, BITVECT_SIZE, 1); CheckVectors(*bvect_min1, *bvect_full1, BITVECT_SIZE, true); CheckVectors(*bvect_min2, *bvect_full2, BITVECT_SIZE, true); bvect::statistics st; bvect_full1->calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(*bvect_full1, sermem); bvect bvt; bm::deserialize(bvt, sermem); if (bvt != *bvect_full1) { print_stat(bvt); print_stat(*bvect_full1); cout << "Error!" << endl; exit(1); } CheckVectors(*bvect_min1, *bvect_full1, BITVECT_SIZE, true); CheckVectors(*bvect_min2, *bvect_full2, BITVECT_SIZE, true); cout << "Serialized mem_max = " << st.max_serialize_mem << " size= " << slen << " Ratio=" << (slen*100)/st.max_serialize_mem << "%" << endl; bvect* bv_target_s=new bvect(*bvect_full2); print_stat(*bv_target_s); print_stat(*bvect_full2); bvect* bvect_full3= new bvect(); *bvect_full3 = *bvect_full1; *bvect_full3 |= *bvect_full2; // CheckVectors(*bvect_min2, *bvect_full3, BITVECT_SIZE, true); bm::deserialize(*bvect_full2, sermem); operation_deserializer::deserialize(*bv_target_s, sermem, 0, set_OR); delete [] sermem; CheckVectors(*bvect_min1, *bvect_full1, BITVECT_SIZE, true); // CheckVectors(*bvect_min1, *bvect_full3, BITVECT_SIZE, true); bvect_min2->combine_or(*bvect_min1); delete bvect_min1; if (*bvect_full2 != *bvect_full3) { print_stat(*bvect_full2); print_stat(*bvect_full3); cout << "Error!" << endl; exit(1); } CheckVectors(*bvect_min2, *bvect_full2, BITVECT_SIZE, true); CheckVectors(*bvect_min2, *bv_target_s, BITVECT_SIZE, true); delete bv_target_s; delete bvect_full1; delete bvect_full2; delete bvect_full3; delete bvect_min2; } cout << "Stage 4. " << endl; { unsigned size = BITVECT_SIZE/3; bvect_mini* bvect_min1= new bvect_mini(BITVECT_SIZE); bvect* bvect_full1= new bvect(); bvect* bvect_full2= new bvect(); bvect_full1->set_new_blocks_strat(bm::BM_BIT); bvect_full2->set_new_blocks_strat(bm::BM_BIT); unsigned i; for(i = 0; i < 65000; ++i) { bvect_full1->set_bit(i); bvect_min1->set_bit(i); } for(i = 65536; i < 65536+65000; ++i) { bvect_full1->set_bit(i); bvect_min1->set_bit(i); } for (i = 65536*2; i < size/6; ++i) { bvect_full1->set_bit(i); bvect_min1->set_bit(i); } bvect_full1->optimize(); print_stat(*bvect_full1); bvect::statistics st; bvect_full1->calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(*bvect_full1, sermem); cout << "Serialized mem_max = " << st.max_serialize_mem << " size= " << slen << " Ratio=" << (slen*100)/st.max_serialize_mem << "%" << endl; unsigned char* new_sermem = new unsigned char[st.max_serialize_mem]; ::memcpy(new_sermem, sermem, slen); bvect bv_target_s(*bvect_full2); bm::deserialize(*bvect_full2, new_sermem); operation_deserializer::deserialize(bv_target_s, new_sermem, 0, set_OR); delete [] sermem; delete [] new_sermem; CheckVectors(*bvect_min1, *bvect_full2, size, true); CheckVectors(*bvect_min1, bv_target_s, size, true); delete bvect_full2; delete bvect_min1; delete bvect_full1; } } void GetNextTest() { cout << "-------------------------------------------- GetNextTest" << endl; int i; for(i = 0; i < 2; ++i) { cout << "Strategy " << i << endl; { bvect bvect_full1; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(i ? bm::BM_GAP : bm::BM_BIT); bvect_full1.set_bit(0); bvect_min1.set_bit(0); bvect_full1.set_bit(65536); bvect_min1.set_bit(65536); unsigned nbit1 = bvect_full1.get_first(); unsigned nbit2 = bvect_min1.get_first(); if (nbit1 != nbit2) { cout << "1. get_first failed() " << nbit1 << " " << nbit2 << endl; exit(1); } nbit1 = bvect_full1.get_next(nbit1); nbit2 = bvect_min1.get_next(nbit2); if ((nbit1 != nbit2) || (nbit1 != 65536)) { cout << "1. get_next failed() " << nbit1 << " " << nbit2 << endl; exit(1); } } { bvect bvect_full1; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(i ? bm::BM_GAP : bm::BM_BIT); bvect_full1.set_bit(65535); bvect_min1.set_bit(65535); unsigned nbit1 = bvect_full1.get_first(); unsigned nbit2 = bvect_min1.get_first(); if ((nbit1 != nbit2) || (nbit1 != 65535)) { cout << "1. get_first failed() " << nbit1 << " " << nbit2 << endl; exit(1); } nbit1 = bvect_full1.get_next(nbit1); nbit2 = bvect_min1.get_next(nbit2); if (nbit1 != nbit2 ) { cout << "1. get_next failed() " << nbit1 << " " << nbit2 << endl; exit(1); } } { cout << "--------------" << endl; bvect bvect_full1; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(i ? bm::BM_GAP : bm::BM_BIT); bvect_full1.set_bit(655350); bvect_min1.set_bit(655350); unsigned nbit1 = bvect_full1.get_first(); unsigned nbit2 = bvect_min1.get_first(); if (nbit1 != nbit2 || nbit1 != 655350) { cout << "1. get_first failed() " << nbit1 << " " << nbit2 << endl; exit(1); } nbit1 = bvect_full1.get_next(nbit1); nbit2 = bvect_min1.get_next(nbit2); if (nbit1 != nbit2) { cout << "1. get_next failed() " << nbit1 << " " << nbit2 << endl; exit(1); } } { bvect bvect_full1; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(i ? bm::BM_GAP : bm::BM_BIT); bvect_full1.set_bit(256); bvect_min1.set_bit(256); // bvect_full1.clear_bit(256); bvect_full1.set_bit(65536); bvect_min1.set_bit(65536); unsigned nbit1 = bvect_full1.get_first(); unsigned nbit2 = bvect_min1.get_first(); if (nbit1 != nbit2) { cout << "get_first failed " << nbit1 << " " << nbit2 << endl; exit(1); } while (nbit1) { cout << nbit1 << endl; nbit1 = bvect_full1.get_next(nbit1); nbit2 = bvect_min1.get_next(nbit2); if (nbit1 != nbit2) { cout << "get_next failed " << nbit1 << " " << nbit2 << endl; exit(1); } } // while } }// for } // Test contributed by Maxim Shemanarev. void MaxSTest() { bvect vec; int i, j; unsigned id; for(i = 0; i < 100; i++) { int n = rand() % 2000 + 1; id = 1; for(j = 0; j < n; j++) { id += rand() % 10 + 1; vec.set_bit(id); } vec.optimize(); vec.clear(); fprintf(stderr, "."); } } void CalcBeginMask() { printf("BeginMask:\n"); int i; for (i = 0; i < 32; ++i) { unsigned mask = 0; for(int j = i; j < 32; ++j) { unsigned nbit = j; nbit &= bm::set_word_mask; bm::word_t mask1 = (((bm::word_t)1) << j); mask |= mask1; } printf("0x%x, ", mask); } printf("\n"); } void CalcEndMask() { printf("EndMask:\n"); int i; for (i = 0; i < 32; ++i) { unsigned mask = 1; for(int j = i; j > 0; --j) { unsigned nbit = j; nbit &= bm::set_word_mask; bm::word_t mask1 = (((bm::word_t)1) << j); mask |= mask1; } printf("0x%x,", mask); } printf("\n"); } void EnumeratorTest() { cout << "-------------------------------------------- EnumeratorTest" << endl; { bvect bvect1; bvect1.set_bit(100); bvect::enumerator en = bvect1.first(); if (*en != 100) { cout << "Enumerator error !" << endl; exit(1); } bvect1.clear_bit(100); bvect1.set_bit(2000000000); en.go_first(); if (*en != 2000000000) { cout << "Enumerator error !" << endl; exit(1); } } { bvect bvect1; bvect1.set_bit(0); bvect1.set_bit(10); bvect1.set_bit(35); bvect1.set_bit(1000); bvect1.set_bit(2016519); bvect1.set_bit(2034779); bvect1.set_bit(bm::id_max-1); bvect::enumerator en = bvect1.first(); unsigned num = bvect1.get_first(); bvect::enumerator end = bvect1.end(); while (en < end) { if (*en != num) { cout << "Enumeration comparison failed !" << " enumerator = " << *en << " get_next() = " << num << endl; exit(1); } ++en; num = bvect1.get_next(num); } if (num != 0) { cout << "Enumeration error!" << endl; exit(1); } } /* { bvect bvect1; bvect1.set(); bvect::enumerator en = bvect1.first(); unsigned num = bvect1.get_first(); while (en < bvect1.end()) { if (*en != num) { cout << "Enumeration comparison failed !" << " enumerator = " << *en << " get_next() = " << num << endl; exit(1); } ++en; num = bvect1.get_next(num); } if (num != 0) { cout << "Enumeration error!" << endl; exit(1); } } */ { bvect bvect1; int i; for(i = 0; i < 65536; ++i) { bvect1.set_bit(i); } /* for(i = 65536*10; i < 65536*20; i+=3) { bvect1.set_bit(i); } */ bvect::enumerator en = bvect1.first(); unsigned num = bvect1.get_first(); while (en < bvect1.end()) { if (*en != num) { cout << "Enumeration comparison failed !" << " enumerator = " << *en << " get_next() = " << num << endl; exit(1); } ++en; num = bvect1.get_next(num); if (num == 31) { num = num + 0; } } if (num != 0) { cout << "Enumeration error!" << endl; exit(1); } } { bvect bvect1; bvect1.set_new_blocks_strat(bm::BM_GAP); bvect1.set_bit(100); bvect::enumerator en = bvect1.first(); if (*en != 100) { cout << "Enumerator error !" << endl; exit(1); } bvect1.clear_bit(100); bvect1.set_bit(2000000); en.go_first(); if (*en != 2000000) { cout << "Enumerator error !" << endl; exit(1); } print_stat(bvect1); } { bvect bvect1; bvect1.set_new_blocks_strat(bm::BM_GAP); bvect1.set_bit(0); bvect1.set_bit(1); bvect1.set_bit(10); bvect1.set_bit(100); bvect1.set_bit(1000); bvect::enumerator en = bvect1.first(); unsigned num = bvect1.get_first(); while (en < bvect1.end()) { if (*en != num) { cout << "Enumeration comparison failed !" << " enumerator = " << *en << " get_next() = " << num << endl; exit(1); } ++en; num = bvect1.get_next(num); } if (num != 0) { cout << "Enumeration error!" << endl; exit(1); } } } void BlockLevelTest() { bvect bv; bvect bv2; bv.set_new_blocks_strat(bm::BM_GAP); bv2.set_new_blocks_strat(bm::BM_GAP); int i; for (i = 0; i < 500; i+=1) { bv.set_bit(i); } print_stat(bv); for (i = 0; i < 1000; i+=2) { bv2.set_bit(i); } print_stat(bv2); struct bvect::statistics st; bv2.calc_stat(&st); unsigned char* sermem = new unsigned char[st.max_serialize_mem]; unsigned slen = bm::serialize(bv2, sermem); assert(slen); slen = 0; bm::deserialize(bv, sermem); // bv.optimize(); print_stat(bv); } /* __int64 CalcBitCount64(__int64 b) { b = (b & 0x5555555555555555) + (b >> 1 & 0x5555555555555555); b = (b & 0x3333333333333333) + (b >> 2 & 0x3333333333333333); b = b + (b >> 4) & 0x0F0F0F0F0F0F0F0F; b = b + (b >> 8); b = b + (b >> 16); b = b + (b >> 32) & 0x0000007F; return b; } */ void SyntaxTest() { cout << "----------------------------- Syntax test." << endl; bvect bv1; bvect::allocator_type a = bv1.get_allocator(); bvect bv2(bv1); bvect bv3; bv3.swap(bv1); bv1[100] = true; bool v = bv1[100]; assert(v); v = false; bv1[100] = false; bv2 |= bv1; bv2 &= bv1; bv2 ^= bv1; bv2 -= bv1; bv3 = bv1 | bv2; if (bv1 < bv2) { } bvect::reference ref = bv1[10]; bool bn = !ref; bool bn2 = ~ref; bn = bn2 = false; ref.flip(); bvect bvn = ~bv1; cout << "----------------------------- Syntax test ok." << endl; } void SetTest() { unsigned cnt; bvect bv; bv.set(); cnt = bv.count(); if (cnt != bm::id_max) { cout << "Set test failed!." << endl; exit(1); } bv.invert(); cnt = bv.count(); if (cnt != 0) { cout << "Set invert test failed!." << endl; exit(1); } bv.set(0); bv.set(bm::id_max-1); cnt = bv.count(); assert(cnt == 2); bv.invert(); print_stat(bv); cnt = bv.count(); if (cnt != bm::id_max-2) { cout << "Set invert test failed!." << endl; exit(1); } bv.clear(); bv[1] &= true; bool v = bv[1]; if (v) { cout << "Set &= test failed!" << endl; exit(1); } bv[1] = true; bv[1] &= true; v = bv[1]; if (!v) { cout << "Set &= test failed (2)!" << endl; exit(1); } bv.clear(true); bv.invert(); bv[1] &= true; v = bv[1]; if (!v) { cout << "Set &= test failed (2)!" << endl; exit(1); } bvect bv2; bv2[1] = true; bv2[1] = false; bvect::statistics stat1; bv2.calc_stat(&stat1); bv2.optimize(); bvect::statistics stat2; bv2.calc_stat(&stat2); if (stat2.bit_blocks != 0 || stat2.gap_blocks != 0 || stat1.memory_used <= stat2.memory_used) { cout << "Optimization memory free test failed (2)!" << endl; exit(1); } { bvect bv3; bool changed; changed = bv3.set_bit_conditional(10, true, true); v = bv3[10]; if (v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, true, false); v = bv3[10]; if (!v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, false); v = bv3[10]; if (!v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, true); v = bv3[10]; if (v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } } { bvect bv3(bm::BM_GAP); bool changed; changed = bv3.set_bit_conditional(10, true, true); v = bv3[10]; if (v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, true, false); v = bv3[10]; if (!v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, false); v = bv3[10]; if (!v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, true); v = bv3[10]; if (v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } } { bvect bv3(bm::BM_GAP); bv3.invert(); bv3.optimize(); bool changed; changed = bv3.set_bit_conditional(10, true, true); v = bv3[10]; if (!v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, true, false); v = bv3[10]; if (!v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, false); v = bv3[10]; if (!v || changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, false, true); v = bv3[10]; if (v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } changed = bv3.set_bit_conditional(10, true, false); v = bv3[10]; if (!v || !changed) { cout << "Conditional bit set failed." << endl; exit(1); } } { bvect bv(0); bv.resize(100); bv[10] = true; bv.resize(1000001); bv[100000] = 1; if (bv.size() != 1000001) { cout << "Resize failed" << endl; exit(1); } if (bv.count() != 2) { cout << "Resize count failed" << endl; exit(1); } bv.resize(100); if (bv.size() != 100) { cout << "Resize failed" << endl; exit(1); } if (bv.count() != 1) { cout << "Resize count failed" << endl; exit(1); } bv.resize(60000100); bv.invert(); bv.clear(true); if (bv.size() != 60000100) { cout << "Resize failed" << endl; exit(1); } if (bv.count() != 0) { cout << "Resize count failed" << endl; exit(1); } } } template void CompareMiniSet(const A& ms, const B& bvm) { for (unsigned i = 0; i < bm::set_total_blocks; ++i) { bool ms_val = ms.test(i)!=0; bool bvm_val = bvm.is_bit_true(i)!=0; if (ms_val != bvm_val) { printf("MiniSet comparison error: %u\n",i); exit(1); } } } void MiniSetTest() { cout << "----------------------- MiniSetTest" << endl; { bm::miniset ms; bvect_mini bvm(bm::set_total_blocks); CompareMiniSet(ms, bvm); ms.set(1); bvm.set_bit(1); CompareMiniSet(ms, bvm); unsigned i; for (i = 1; i < 10; i++) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < 10; i++) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < 10; i+=3) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < 5; i+=3) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); } { bm::miniset ms; bvect_mini bvm(bm::set_total_blocks); ms.set(1); bvm.set_bit(1); CompareMiniSet(ms, bvm); unsigned i; for (i = 1; i < bm::set_total_blocks; i+=3) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < bm::set_total_blocks/2; i+=3) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); } { bm::bvmini ms(0); bvect_mini bvm(bm::set_total_blocks); CompareMiniSet(ms, bvm); ms.set(1); bvm.set_bit(1); CompareMiniSet(ms, bvm); unsigned i; for (i = 1; i < 10; i++) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < 10; i++) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < bm::set_total_blocks; i+=3) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < bm::set_total_blocks/2; i+=3) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); } { bm::miniset ms; bvect_mini bvm(bm::set_total_blocks); ms.set(1); bvm.set_bit(1); CompareMiniSet(ms, bvm); unsigned i; for (i = 1; i < 15; i+=3) { ms.set(i); bvm.set_bit(i); } CompareMiniSet(ms, bvm); for (i = 1; i < 7; i+=3) { ms.set(i, false); bvm.clear_bit(i); } CompareMiniSet(ms, bvm); } cout << "----------------------- MiniSetTest ok" << endl; } unsigned CalcBitCount32(unsigned b) { b = (b & 0x55555555) + (b >> 1 & 0x55555555); b = (b & 0x33333333) + (b >> 2 & 0x33333333); b = b + ((b >> 4) & 0x0F0F0F0F); b = b + (b >> 8); b = b + ((b >> 16) & 0x0000003F); return b; } void PrintGapLevels(const gap_word_t* glevel) { cout << "Gap levels:" << endl; unsigned i; for (i = 0; i < bm::gap_levels; ++i) { cout << glevel[i] << ","; } cout << endl; } void OptimGAPTest() { gap_word_t glevel[bm::gap_levels]; ::memcpy(glevel, gap_len_table::_len, bm::gap_levels * sizeof(gap_word_t)); { gap_word_t length[] = { 2, 2, 5, 5, 10, 11, 12 }; unsigned lsize = sizeof(length) / sizeof(gap_word_t); bm::improve_gap_levels(length, length + lsize, glevel); PrintGapLevels(glevel); } { gap_word_t length[] = { 3, 5, 15, 15, 100, 110, 120 }; unsigned lsize = sizeof(length) / sizeof(gap_word_t); bm::improve_gap_levels(length, length + lsize, glevel); PrintGapLevels(glevel); } { gap_word_t length[] = { 15, 80, 5, 3, 100, 110, 95 }; unsigned lsize = sizeof(length) / sizeof(gap_word_t); bm::improve_gap_levels(length, length + lsize, glevel); PrintGapLevels(glevel); } { gap_word_t length[] = { 16,30,14,24,14,30,18,14,12,16,8,38,28,4,20,18,28,22,32,14,12,16,10,8,14,18,14,8, 16,30,8,8,58,28,18,4,26,14,52,12,18,10,14,18,22,18,20,70,12,6,26,6,8,22,12,4,8,8, 8,54,18,6,8,4,4,10,4,4,4,4,4,6,22,14,38,40,56,50,6,10,8,18,82,16,6,18,20,12,12, 16,8,14,14,10,16,12,10,16,14,12,18,14,18,34,14,12,18,18,10,20,10,18,8,14,14,22,16, 10,10,18,8,20,14,10,14,12,12,14,16,16,6,10,14,6,10,10,10,10,12,4,8,8,8,10,10,8, 8,12,10,10,14,14,14,8,4,4,10,10,4,10,4,8,6,52,104,584,218 }; unsigned lsize = sizeof(length) / sizeof(gap_word_t); bm::improve_gap_levels(length, length + lsize, glevel); PrintGapLevels(glevel); } { gap_word_t length[] = { 30,46,26,4,4,68,72,6,10,4,6,14,6,42,198,22,12,4,6,24,12,8,18,4,6,10,6,4,6,6,12,6 ,6,4,4,78,38,8,52,4,8,10,6,8,8,6,10,4,6,6,4,10,6,8,16,22,28,14,10,10,16,10,20,10 ,14,12,8,18,4,8,10,6,10,4,6,12,16,12,6,4,8,4,14,14,6,8,4,10,10,8,8,6,8,6,8,4,8,4 ,8,10,6,4,6 }; unsigned lsize = sizeof(length) / sizeof(gap_word_t); bm::improve_gap_levels(length, length + lsize, glevel); PrintGapLevels(glevel); } } #if defined(BMSSE2OPT) || defined(BMSSE42OPT) #if(_MSC_VER) # define BM_ALIGN16 __declspec(align(16)) # define BM_ALIGN16ATTR #else // GCC # define BM_ALIGN16 # define BM_ALIGN16ATTR __attribute__((aligned (16))) #endif #else // NO SSE # define BM_ALIGN16ATTR # define BM_ALIGN16 #endif void BitCountChangeTest() { cout << "---------------------------- BitCountChangeTest " << endl; unsigned i; for(i = 0xFFFFFFFF; i; i <<= 1) { unsigned a0 = bm::bit_count_change(i); unsigned a1 = BitCountChange(i); if (a0 != a1) { cout << hex << "Bit count change test failed!" << " i = " << i << " return = " << a0 << " check = " << a1 << endl; exit(1); } } cout << "---------------------------- STEP 2 " << endl; for(i = 0xFFFFFFFF; i; i >>= 1) { unsigned a0 = bm::bit_count_change(i); unsigned a1 = BitCountChange(i); if (a0 != a1) { cout << "Bit count change test failed!" << " i = " << i << " return = " << a0 << " check = " << a1 << endl; exit(1); } } cout << "---------------------------- STEP 3 " << endl; for (i = 0; i < 0xFFFFFFF; ++i) { unsigned a0 = bm::bit_count_change(i); unsigned a1 = BitCountChange(i); if (a0 != a1) { cout << "Bit count change test failed!" << " i = " << i << " return = " << a0 << " check = " << a1 << endl; exit(1); } } bm::word_t BM_ALIGN16 arr[16] BM_ALIGN16ATTR = {0,}; arr[0] = (bm::word_t)(1 << 31); arr[1] = 1; //(bm::word_t)(1 << 31); bm::id_t cnt; bm::id_t bc, bc1; cnt = bm::bit_count_change(arr[1]); cout << cnt << endl; if (cnt != 2) { cout << "0.count_change() failed " << cnt << endl; exit(1); } cnt = bm::bit_block_calc_count_change(arr, arr+4, &bc); bc1 = bit_block_calc_count(arr, arr+4); if (bc != bc1) { cout << "1. bitcount comparison failed " << endl; } if (cnt != 3) { cout << "1. count_intervals() failed " << cnt << endl; exit(1); } ::memset(arr, 0, sizeof(arr)); arr[0] = arr[1] = arr[2] = 0xFFFFFFFF; arr[3] = (bm::word_t)(0xFFFFFFFF >> 1); cnt = bm::bit_block_calc_count_change(arr, arr+4, &bc); cout << cnt << endl; bc1 = bit_block_calc_count(arr, arr+4); if (bc != bc1) { cout << "1.1 bitcount comparison failed " << endl; } // this test is not correct for both 32 and 64 bit mode because of loop unroll if (cnt != 2 && cnt != 3) { cout << "1.1 count_intervals() failed " << cnt << endl; exit(1); } cout << "---------------------------- STEP 4 " << endl; bvect bv1; cnt = bm::count_intervals(bv1); if (cnt != 1) { cout << "1.count_intervals() failed " << cnt << endl; exit(1); } CheckIntervals(bv1, 65536); bv1.invert(); cnt = count_intervals(bv1); cout << "Inverted cnt=" << cnt << endl; if (cnt != 2) { cout << "2.inverted count_intervals() failed " << cnt << endl; exit(1); } bv1.invert(); for (i = 10; i < 100000; ++i) { bv1.set(i); } cnt = count_intervals(bv1); if (cnt != 3) { cout << "3.count_intervals() failed " << cnt << endl; exit(1); } cout << "-----" << endl; CheckIntervals(bv1, 65536*2); cout << "Optmization..." << endl; bv1.optimize(); cnt = count_intervals(bv1); if (cnt != 3) { cout << "4.count_intervals() failed " << cnt << endl; exit(1); } CheckIntervals(bv1, 65536*2); cout << "---------------------------- array GAP test " << endl; { bm::gap_word_t arr[] = { 0 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 1) { cout << "Array gap test failed. 1. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 1. " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 1. " << endl; exit(1); } } { bm::gap_word_t arr[] = { 65535 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 2) { cout << "Array gap test failed. 1.1 " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 1.1 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 1. " << endl; exit(1); } } { bm::gap_word_t arr[] = { 0, 65535 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 3) { cout << "Array gap test failed. 1.2 " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 1.2 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 1.2 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 0, 1, 2, 65534, 65535 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 3) { cout << "Array gap test failed. 1.3 " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 1.3 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 1.3 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 0, 1, 2 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 1) { cout << "Array gap test failed. 2. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 2 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 2 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 1, 2 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 2) { cout << "Array gap test failed. 3. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 3 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 3 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 1, 2, 10 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 4) { cout << "Array gap test failed. 4. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 4 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 4 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 1, 2, 10, 11 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 4) { cout << "Array gap test failed. 5. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 5 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 5 " << endl; exit(1); } } { bm::gap_word_t arr[] = { 1, 2, 10, 11, 256 }; unsigned gap_count; gap_count = bit_array_compute_gaps(arr, sizeof(arr)/sizeof(arr[0])); if (gap_count != 6) { cout << "Array gap test failed. 6. " << endl; exit(1); } bm::gap_word_t gap[20] = {0}; bm::gap_word_t gap_cntrl[20] = {0}; gap_set_all(gap_cntrl, bm::gap_max_bits, 0); for (unsigned i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) { unsigned is_set; gap_set_value(1, gap_cntrl, arr[i], &is_set); } unsigned gap_l_cntrl = gap_length(gap_cntrl); unsigned gap_len = gap_set_array(&gap[0], arr, sizeof(arr)/sizeof(arr[0])); unsigned gap_len1 = gap_length(gap); if (gap_len != gap_l_cntrl || gap_len1 != gap_l_cntrl) { cout << "Array gap test failed. 6 " << endl; exit(1); } int cmpres = gapcmp(gap, gap_cntrl); if (cmpres != 0) { cout << "Array gap cmp test failed. 6 " << endl; exit(1); } } cout << "---------------------------- BitCountChangeTest Ok." << endl; } void DNACompressionTest() { const char seeds[] = { 'A', 'C', 'G', 'T', 'A', 'C', 'G', 'A', 'N', 'A', 'C', 'G' }; const unsigned arr_size = bm::set_block_size*4; const unsigned arr_plain_size = arr_size / 8; unsigned char BM_ALIGN16 block1[arr_size] BM_ALIGN16ATTR = {0,}; unsigned char BM_ALIGN16 tmatrix1[8][arr_plain_size] BM_ALIGN16ATTR; unsigned BM_ALIGN16 distance1[8][8] BM_ALIGN16ATTR; unsigned char pc_vector1[8] = {0,}; unsigned pc_vector_stat1[bm::ibpc_end]; /* unsigned BM_ALIGN16 tmatrix2[32][bm::set_block_plain_size] BM_ALIGN16ATTR; unsigned BM_ALIGN16 distance2[bm::set_block_plain_cnt][bm::set_block_plain_cnt] BM_ALIGN16ATTR; unsigned char pc_vector2[32] = {0,}; unsigned BM_ALIGN16 tmatrix3[32][bm::set_block_plain_size] BM_ALIGN16ATTR; unsigned BM_ALIGN16 distance3[bm::set_block_plain_cnt][bm::set_block_plain_cnt] BM_ALIGN16ATTR; unsigned char pc_vector3[32] = {0,}; */ // generate pseudo-random DNA sequence for (unsigned i = 0; i < arr_size; ++i) { unsigned letter_idx = rand() % sizeof(seeds); unsigned char l = seeds[letter_idx]; unsigned char c = 0; switch (l) { case 'A': c = 0; break; case 'C': c = 1; break; case 'G': c = 2; break; case 'T': c = 3; break; case 'N': c = 4; break; default: cout << "Alphabet error!" << endl; exit(1); }; block1[i] = c; //cout << block1[i]; } cout << endl; bm::vect_bit_transpose (block1, arr_size, tmatrix1); bm::tmatrix_distance (tmatrix1, distance1); cout << "ALL count=" << sizeof(char)*8*arr_plain_size << endl; bm::bit_iblock_make_pcv(distance1, pc_vector1); bm::bit_iblock_pcv_stat(pc_vector1, pc_vector1 + 8, pc_vector_stat1); for (unsigned s = 0; s < bm::ibpc_end; ++s) { switch(s) { case bm::ibpc_uncompr: cout << "Uncompressed: "; break; case bm::ibpc_all_zero: cout << " All ZERO: "; break; case bm::ibpc_all_one: cout << " All ONE: "; break; case bm::ibpc_equiv: cout << " Equiv: "; break; case bm::ibpc_close: cout << " Similar: "; break; default: //cout << "Oops!" << s << " "; break; } cout << pc_vector_stat1[s] << endl; } // for // print out the pc_vector for (unsigned j = 0; j < 8; ++j) { unsigned ibpc = pc_vector1[j] & 7; unsigned n_row = (pc_vector1[j] >> 3); cout << j << ":" << "->" << n_row << " "; switch(ibpc) { case bm::ibpc_uncompr: cout << "Uncompressed: "; cout << " popcnt=" << distance1[j][j]; break; case bm::ibpc_all_zero: cout << "ZERO"; break; case bm::ibpc_all_one: cout << "ONE: "; break; case bm::ibpc_equiv: cout << "Equiv: "; break; case bm::ibpc_close: cout << " Similar: "; cout << " popcnt=" << distance1[j][j] << " Humming=" << distance1[j][n_row]; break; } cout << endl; } /* cout << endl << "Second round." << endl << endl; bm::bit_iblock_reduce(tmatrix1, pc_vector1, pc_vector1+32, tmatrix2); bm::tmatrix_distance (tmatrix2, distance2); bm::bit_iblock_make_pcv(distance2, pc_vector2); // print out the pc_vector for (unsigned j = 0; j < 32; ++j) { unsigned ibpc = pc_vector2[j] & 7; unsigned n_row = (pc_vector2[j] >> 3); cout << j << ":" << "->" << n_row << " "; switch(ibpc) { case bm::ibpc_uncompr: cout << "Uncompressed: "; cout << " popcnt=" << distance2[j][j]; break; case bm::ibpc_all_zero: cout << "ZERO"; break; case bm::ibpc_all_one: cout << "ONE: "; break; case bm::ibpc_equiv: cout << "Equiv: "; break; case bm::ibpc_close: cout << " Similar: "; cout << " popcnt=" << distance2[j][j] << " Humming=" << distance2[j][n_row] << endl; { const unsigned* r1 = tmatrix2[j]; for (unsigned i = 0; i < bm::set_block_plain_size; ++i) { cout << hex << r1[i] << " "; } cout << dec << endl << endl; } break; } cout << endl; } cout << endl << "3rd round." << endl << endl; bm::bit_iblock_reduce(tmatrix2, pc_vector2, pc_vector2+32, tmatrix3); bm::tmatrix_distance (tmatrix3, distance3); bm::bit_iblock_make_pcv(distance3, pc_vector3); // print out the pc_vector for (unsigned j = 0; j < 32; ++j) { unsigned ibpc = pc_vector3[j] & 7; unsigned n_row = (pc_vector3[j] >> 3); cout << j << ":" << "->" << n_row << " "; switch(ibpc) { case bm::ibpc_uncompr: cout << "Uncompressed: "; cout << " popcnt=" << distance3[j][j]; break; case bm::ibpc_all_zero: cout << "ZERO"; break; case bm::ibpc_all_one: cout << "ONE: "; break; case bm::ibpc_equiv: cout << "Equiv: "; break; case bm::ibpc_close: cout << " Similar: "; cout << " popcnt=" << distance3[j][j] << " Humming=" << distance3[j][n_row] << endl; { const unsigned* r1 = tmatrix3[j]; for (unsigned i = 0; i < bm::set_block_plain_size; ++i) { cout << hex << r1[i] << " "; } cout << dec << endl << endl; } break; } cout << endl; } */ } void BitBlockTransposeTest() { DNACompressionTest(); bm::word_t BM_ALIGN16 block1[bm::set_block_size] BM_ALIGN16ATTR = {0,}; bm::word_t BM_ALIGN16 block2[bm::set_block_size] BM_ALIGN16ATTR = {0xFF,}; unsigned BM_ALIGN16 tmatrix1[32][bm::set_block_plain_size] BM_ALIGN16ATTR; cout << "---------------------------- BitTransposeTest" << endl; cout << "Transpose 1" << endl; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = 1; } bm::vect_bit_transpose (block1, bm::set_block_size, tmatrix1); bm::vect_bit_trestore (tmatrix1, block2); for (unsigned i = 0; i < bm::set_block_size; ++i) { if (block1[i] != block2[i]) { cout << "Bit transpose error! " << i << endl; exit(1); } } { unsigned BM_ALIGN16 distance[bm::set_block_plain_cnt][bm::set_block_plain_cnt]; bm::tmatrix_distance (tmatrix1, distance); PrintDistanceMatrix(distance); // distance matrix verification: { for (unsigned i = 0; i < bm::set_block_plain_cnt; ++i) { const unsigned* row = distance[i]; for (unsigned j = i; j < bm::set_block_plain_cnt; ++j) { if (i == j) { if (distance[0][0] != 2048) { cout << "Self distance(bitcount) is incorrect!" << endl; exit(1); } } else { if (i == 0) { if (row[j] != 2048) // max distance { cout << "Incorrect max distance!" << endl; exit(1); } } else { if (row[j] != 0) // max distance { cout << "Incorrect min distance!" << endl; exit(1); } } } } } } } cout << "Transpose 2" << endl; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = 1 | (1 << 17); } bm::vect_bit_transpose (block1, bm::set_block_size, tmatrix1); bm::vect_bit_trestore (tmatrix1, block2); for (unsigned i = 0; i < bm::set_block_size; ++i) { if (block1[i] != block2[i]) { cout << "Bit transpose error! " << i << endl; exit(1); } } cout << "Transpose 3" << endl; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = ~1; } bm::vect_bit_transpose (block1, bm::set_block_size, tmatrix1); bm::vect_bit_trestore (tmatrix1, block2); for (unsigned i = 0; i < bm::set_block_size; ++i) { if (block1[i] != block2[i]) { cout << "Bit transpose error! " << i << endl; exit(1); } } cout << "Transpose 4" << endl; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = i; } bm::vect_bit_transpose (block1, bm::set_block_size, tmatrix1); bm::vect_bit_trestore (tmatrix1, block2); for (unsigned i = 0; i < bm::set_block_size; ++i) { if (block1[i] != block2[i]) { cout << "Bit transpose error! " << i << endl; exit(1); } } /* cout << "Transpose 5 - random" << endl; for (unsigned c = 0; c < 10000; ++c) { if ((c % 100) == 0) cout << "."; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = rand(); } bm::vect_bit_transpose (block1, bm::set_block_size, tmatrix1); bm::vect_bit_trestore (tmatrix1, block2); for (unsigned i = 0; i < bm::set_block_size; ++i) { if (block1[i] != block2[i]) { cout << "Bit transpose error! " << i << endl; exit(1); } } } */ cout << "Transpose GAP block 1" << endl; { gap_vector gapv(0); gap_vector gapv1(9); gapv.set_bit(1); gapv.set_bit(2); gapv.set_bit(10); gapv.set_bit(65000); gap_transpose_engine gte; if (sizeof(gte.tmatrix_) != (2048 * sizeof(bm::word_t))) { cout << "TMatrix recalculation error!" << sizeof(gte.tmatrix_) << endl; exit(1); } gte.transpose(gapv.get_buf());//, block1); gte.compute_distance_matrix(); gte.reduce(); gte.restore(); unsigned glen = *(gapv.get_buf()) >> 3; PrintGap(gapv.get_buf()); PrintDGap((gap_word_t*) block1, glen-1); PrintDGapGamma((gap_word_t*) block1, glen-1); PrintTMatrix(gte.tmatrix_, gte.eff_cols_, true); bm::gap_word_t gap_head = *gapv.get_buf(); gte.trestore(gap_head, gapv1.get_buf());//, block2); if (gapv.compare(gapv1)) { cout << "GAP block transpose error!" << endl; PrintGap(gapv.get_buf()); PrintGap(gapv1.get_buf()); exit(1); } } cout << "Transpose GAP block 2" << endl; { gap_vector gapv(0); gap_vector gapv1(0); unsigned gcnt = 5; for (unsigned i = 0; i < 65500; i+= 50) { for (unsigned j = 0; j < gcnt ; ++j) { gapv.set_bit(i); if (++i > 65500) break; } gcnt += 2; } gap_transpose_engine gte; gte.transpose(gapv.get_buf()); gte.compute_distance_matrix(); gte.reduce(); gte.restore(); unsigned glen = *(gapv.get_buf()) >> 3; cout << glen << endl; bm::gap_word_t gap_head = *gapv.get_buf(); gte.trestore(gap_head, gapv1.get_buf()); if (gapv.compare(gapv1)) { cout << "GAP block transpose error!" << endl; PrintGap(gapv.get_buf()); PrintGap(gapv1.get_buf()); exit(1); } } cout << endl << "---------------------------- BitTransposeTest ok" << endl; } /* #define POWER_CHECK(w, mask) \ (bm::bit_count_table::_count[(w&mask) ^ ((w&mask)-1)]) void BitListTest() { unsigned bits[64] = {0,}; unsigned w = 0; w = (1 << 3) | 1; int bn3 = POWER_CHECK(w, 1 << 3) - 1; int bn2 = POWER_CHECK(w, 1 << 2) - 1; int bn0 = POWER_CHECK(w, 1 << 0) - 1; bit_list(w, bits+1); } */ void ResizeTest() { {{ bvect bv(0); assert(bv.any() == false); assert(bv.count() == 0); }} {{ bvect bv1(10); bvect bv2(bv1); assert(bv1.size() == bv2.size()); }} {{ bvect bv(10); assert(bv.any() == false); assert(bv.count() == 0); bv.invert(); unsigned cnt = bv.count(); assert(cnt == 10); }} {{ bvect bv1(10); bv1.set(1); bvect bv2(0); assert(bv1.size() == 10); assert(bv2.size() == 0); assert(bv1.count() == 1); assert(bv2.count() == 0); bv1.swap(bv2); assert(bv2.size() == 10); assert(bv2.count() == 1); assert(bv1.size() == 0); assert(bv1.count() == 0); }} {{ bvect bv1; bv1.set(65536); bv1.set(100); assert(bv1.size() == bm::id_max); assert(bv1.count() == 2); bv1.resize(101); assert(bv1.size() == 101); assert(bv1.count() == 1); {{ bm::id_t f = bv1.get_first(); assert(f == 100); f = bv1.get_next(f); assert(f == 0); }} bv1.resize(10); assert(bv1.size() == 10); assert(bv1.count() == 0); bm::id_t f = bv1.get_first(); assert(f == 0); }} {{ bvect bv; print_stat(bv); bv.set(100); bv.set(65536 + 10); print_stat(bv); bv.set_range(0, 65536*10, false); print_stat(bv); }} // test logical operations {{ bvect bv1(65536 * 10); bvect bv2(65536 * 100); bv1.set(5); bv2.set(5); bv2.set(65536 * 2); bv2 &= bv1; assert(bv2.size() == 65536 * 100); assert(bv2.count() == 1); assert(bv2.get_first() == 5); }} {{ bvect bv1(10); bvect bv2; bv1.set(5); bv2.set(5); bv2.set(65536 * 2); bv1 &= bv2; assert(bv1.size() == bv2.size()); assert(bv1.count() == 1); assert(bv1.get_first() == 5); }} {{ bvect bv1(10); bvect bv2; bv1.set(5); bv2.set(6); bv2.set(65536 * 2); bv1 |= bv2; assert(bv1.size() == bv2.size()); assert(bv1.count() == 3); }} // comparison test {{ int cmp; bvect bv1(10); bvect bv2; bv2.set(65536 * 2); cmp = bv1.compare(bv2); assert(cmp < 0); bv1.set(5); assert(cmp < 0); cmp = bv1.compare(bv2); assert(cmp > 0); cmp = bv2.compare(bv1); assert(cmp < 0); }} // inserter {{ bvect bv1(10); { bvect::insert_iterator it(bv1); *it = 100 * 65536; } assert(bv1.size() == 100 * 65536 + 1); }} // serialization {{ bvect bv1(10); bv1.set(5); struct bvect::statistics st1; bv1.calc_stat(&st1); unsigned char* sermem = new unsigned char[st1.max_serialize_mem]; unsigned slen2 = bm::serialize(bv1, sermem); cout << slen2 << endl; bvect bv2(0); bm::deserialize(bv2, sermem); delete [] sermem; assert(bv2.size() == 10); assert(bv2.count() == 1); assert(bv2.get_first() == 5); }} {{ bvect bv1(10); bv1.set(5); unsigned int arg[] = { 10, 65536, 65537, 65538 * 10000 }; unsigned* it1 = arg; unsigned* it2 = arg + 4; combine_or(bv1, it1, it2); assert(bv1.size() == 65538 * 10000 + 1); bvect::enumerator en = bv1.first(); while (en.valid()) { cout << *en << " "; ++en; } }} } void ExportTest() { cout << "---------------------------- ExportTest..." << endl; { char buf[20] = {0,}; buf[0] = 1; buf[1] = 1; buf[2]= (char)(1 << 1); bvect bv1; export_array(bv1, buf + 0, buf + 20); assert(bv1.count() == 3); assert(bv1.test(0)); assert(bv1.test(8)); assert(bv1.test(17)); } { char buf[65536*10] = {0,}; buf[0] = 1; buf[1] = 1; buf[2]= (char)(1 << 1); bvect bv1; export_array(bv1, buf + 0, buf + 65536*10); assert(bv1.count() == 3); assert(bv1.test(0)); assert(bv1.test(8)); assert(bv1.test(17)); } { short buf[20] = {0,}; buf[0] = 1; buf[1] = 1; buf[2]= (char)(1 << 1); bvect bv1; export_array(bv1, buf + 0, buf + 20); assert(bv1.count() == 3); assert(bv1.test(0)); assert(bv1.test(16)); assert(bv1.test(33)); } { int buf[20] = {0,}; buf[0] = 1; buf[1] = 1; buf[2]= (char)(1 << 1); bvect bv1; export_array(bv1, buf + 0, buf + 20); assert(bv1.count() == 3); assert(bv1.test(0)); assert(bv1.test(32)); assert(bv1.test(65)); } cout << "---------------------------- ExportTest Ok." << endl; } void TestRecomb() { bm::word_t b1[bm::set_block_size]= {0,}; bm::word_t b2[bm::set_block_size]= {0,}; bm::word_t br[bm::set_block_size]= {0,}; b1[0] = 1; b1[1] = 1; b2[0] = 1; bitblock_get_adapter bga1(b1); bitblock_get_adapter bga2(b2); bitblock_store_adapter bbsa(br); bm::bit_AND and_func; bit_recomb, bitblock_store_adapter> (bga1, bga2,and_func, bbsa); /* bit_recomb(bitblock_get_adapter(b1), bitblock_get_adapter(b2), bit_AND(), bitblock_store_adapter(br) ); assert(br[0] == 1); for (int i = 1; i < bm::set_block_size; ++i) { assert(br[i] == 0); } bitblock_sum_adapter sa; bit_recomb(bitblock_get_adapter(b1), bitblock_get_adapter(b2), bit_COUNT_AND(), sa ); assert(sa.sum() == 1); */ } void BitForEachTest() { cout << "---------------------------- BitForEachTest..." << endl; unsigned bit_list1[32]; unsigned bit_list2[32]; for (unsigned i = 0; i < 65536*50; ++i) { unsigned bits1 = bm::bit_list(i, bit_list1); unsigned bits2 = bm::bit_list_4(i, bit_list2); if (bits1 != bits2) { cout << "Bit for each test failed bit_cnt criteria!" << endl; exit(1); } for (unsigned j = 0; j < bits1; ++j) { if (bit_list1[j] != bit_list2[j]) { cout << "Bit for each check failed for " << j << endl; exit(1); } } } // for cout << "---------------------------- BitForEachTest Ok." << endl; } void Log2Test() { cout << "---------------------------- Log2 Test..." << endl; cout << "Stage 1" << endl; for (unsigned i = 1; i <= 65535; ++i) { unsigned l1 = bm::ilog2(i); unsigned l2 = iLog2(i); unsigned l3 = ilog2_LUT(i); unsigned l4 = l3;//bm::bsr_asm32(i); if (l1 != l2 || l2 != l3 || l2 != l4) { cout << "Log2 error for " << i << endl; cout << l2 << " " << l3 << endl;; exit(1); } } cout << "Stage 2" << endl; for (unsigned i = 1; i <= 100*65535; ++i) { unsigned l1 = bm::ilog2(i); unsigned l2 = iLog2(i); unsigned l3 = ilog2_LUT(i); unsigned l4 = l3; //bm::bsr_asm32(i); if (l1 != l2 || l2 != l3 || l2 != l4) { cout << "Log2 error for " << i << endl; cout << l2 << " " << l3 << endl;; exit(1); } } cout << "---------------------------- Log2 Test Ok." << endl; } /* void BitEncoderTest() { cout << "---------------------------- BitEncoderTest..." << endl; cout << "Bit encoder stage 1" << endl; unsigned char buf1[2048] = {0, }; { encoder enc(buf1, sizeof(buf1)); bit_out bout(enc); bout.put_bit(1); bout.put_zero_bit(); bout.put_zero_bits(8); bout.put_bit(1); bout.put_bit(0); bout.put_bit(1); bout.flush(); decoder dec(buf1); bit_in bin(dec); unsigned bit_value; bit_value = bin.get_bit(); if (bit_value != 1) { cout << "BitEncoder failed!" << endl; exit(1);} bit_value = bin.get_bit(); if (bit_value != 0) { cout << "BitEncoder failed!" << endl; exit(1);} unsigned zeros = bin.eat_zero_bits(); if (zeros != 8) { cout << "BitEncoder failed!" << endl; exit(1);} bit_value = bin.get_bit(); if (bit_value != 1) { cout << "BitEncoder failed!" << endl; exit(1);} zeros = bin.eat_zero_bits(); if (zeros != 1) { cout << "BitEncoder failed!" << endl; exit(1);} bit_value = bin.get_bit(); if (bit_value != 1) { cout << "BitEncoder failed!" << endl; exit(1);} } cout << "Bit encoder stage 2" << endl; { unsigned char bits[2048] = {0, }; { encoder enc(buf1, sizeof(buf1)); bit_out bout(enc); for (unsigned i = 0; i < 2048; ++i) { unsigned val = rand() % 2; if (val > 1 ) val = 1; bits[i] = (unsigned char) val; bout.put_bit(val); } } { decoder dec(buf1); bit_in bin(dec); for (unsigned i = 0; i < 2048; ++i) { unsigned val = bits[i]; unsigned bit_value = bin.get_bit(); if (val != bit_value) { cout << "Bit " << i << " incorrect!" << endl; exit(1); } } } } cout << "---------------------------- BitForEncoderTest Ok." << endl; } */ void GammaEncoderTest() { cout << "---------------------------- GammaEncoderTest" << endl; unsigned char buf1[2048 * 4] = {0, }; cout << "Stage 1" << endl; { encoder enc(buf1, sizeof(buf1)); typedef bit_out TBitIO; bit_out bout(enc); gamma_encoder gamma(bout); gamma(65534); } { decoder dec(buf1); typedef bit_in TBitIO; bit_in bin(dec); gamma_decoder gamma(bin); gap_word_t value = gamma(); if (value != 65534) { cout << "Gamma decoder error for value=" << value << endl; exit(1); } } { encoder enc(buf1, sizeof(buf1)); typedef bit_out TBitIO; bit_out bout(enc); gamma_encoder gamma(bout); for (gap_word_t i = 1; i < 15; ++i) { gamma(i); } } { decoder dec(buf1); typedef bit_in TBitIO; bit_in bin(dec); gamma_decoder gamma(bin); for (gap_word_t i = 1; i < 15; ++i) { gap_word_t value = gamma(); if (value != i) { cout << "Gamma decoder error for " << i << " value=" << value << endl; exit(1); } } } cout << "Stage 2" << endl; for (unsigned i = 0; i < 256; ++i) { gap_word_t short_block[64] = {0,}; { encoder enc(buf1, sizeof(buf1)); typedef bit_out TBitIO; bit_out bout(enc); gamma_encoder gamma(bout); for (unsigned j = 0; j < 64; ++j) { gap_word_t a = rand() % 65535; if (!a) a = 65535; // 0 is illegal gap_word_t value = short_block[j] = a; gamma(value); } // for } { decoder dec(buf1); typedef bit_in TBitIO; bit_in bin(dec); gamma_decoder gamma(bin); for (unsigned j = 0; j < 64; ++j) { gap_word_t value = short_block[j]; gap_word_t r = gamma(); if (r != value) { cout << "Gamma encoding failure for value=" << value << " gamma=" << r << endl; exit(1); } } // for } } cout << "Stage 3" << endl; unsigned code_value = 65535; for (unsigned i = 0; i < 10000; ++i) { gap_word_t short_block[1000] = {0,}; { encoder enc(buf1, sizeof(buf1)); typedef bit_out TBitIO; bit_out bout(enc); gamma_encoder gamma(bout); for (unsigned j = 0; j < 1000; ++j) { gap_word_t a = code_value; if (!a) { code_value = a = 65535; } gap_word_t value = short_block[j] = a; gamma(value); --code_value; } // for } { decoder dec(buf1); typedef bit_in TBitIO; bit_in bin(dec); gamma_decoder gamma(bin); for (unsigned j = 0; j < 1000; ++j) { gap_word_t value = short_block[j]; gap_word_t r = gamma(); if (r != value) { cout << "Gamma encoding failure for value=" << value << " gamma=" << r << endl; exit(1); } } // for } } cout << "---------------------------- GammaEncoderTest Ok." << endl; } void LoadBVDump(const char* filename, const char* filename_out=0, bool validate=false) { ifstream bv_file (filename, ios::in | ios::binary); if (!bv_file.good()) { cout << "Cannot open file: " << filename << endl; exit(1); } ofstream* bv_file_out = 0; if (filename_out) { bv_file_out = new ofstream(filename_out, ios::out | ios::binary); if (!bv_file_out->good()) { cout << "Cannot create file: " << filename_out << endl; exit(1); } } unsigned buffer_size = 1024*1024; unsigned char* buffer = new unsigned char[buffer_size]; unsigned count = 0; clock_t start = clock(); unsigned total_out_size = 0; for (;1; ++count) { unsigned bv_size; bv_file.read((char*)&bv_size, sizeof(bv_size)); if (!bv_file.good()) break; if (bv_size == 0) { cout << "Warning:Zero vector in dump..." << endl; continue; } if (buffer_size < bv_size) { delete [] buffer; buffer_size = bv_size; buffer = new unsigned char[buffer_size]; } bv_file.read((char*)buffer, bv_size); { bvect bv; bm::deserialize(bv, (unsigned char*)buffer); bvect::statistics st1; bv.calc_stat(&st1); if (st1.max_serialize_mem > buffer_size) { delete [] buffer; buffer_size = st1.max_serialize_mem; buffer = new unsigned char[buffer_size]; } unsigned blob_size = bm::serialize(bv, buffer, BM_NO_GAP_LENGTH|BM_NO_BYTE_ORDER); total_out_size += blob_size; if (blob_size > bv_size) { //print_stat(bv); //cout << count << ". -" << blob_size-bv_size << endl; //exit(1); } if (validate) { bvect bv_control; bm::deserialize(bv_control, (unsigned char*)buffer); if (bv_control != bv) { cout << "Serialization error!" << endl; exit(1); } } if (bv_file_out) { bv_file_out->write((char*)&blob_size, sizeof(blob_size)); bv_file_out->write((char*)buffer, blob_size); } } if (count % 1000 == 0) { cout << count << " out=" << total_out_size << endl; } //cout << count << ": size=" << bv_size << endl; } delete [] buffer; cout << "Total vectors:" << count << endl; cout << "Total out size:" << total_out_size << endl; clock_t finish = clock(); clock_t elapsed_clocks = finish - start; double duration = (double)(elapsed_clocks) / CLOCKS_PER_SEC; cout << endl << "Serialization duration = " << duration << endl; bv_file_out->close(); delete bv_file_out; } void GroupByTest(const char* filename, const char* query_filename) { bvect bv_query; unsigned count = 0; unsigned group_by_count = 0; clock_t start = clock(); // load the query vector { ifstream bv_file (query_filename, ios::in | ios::binary); if (!bv_file.good()) { cout << "Cannot open file: " << query_filename << endl; exit(1); } unsigned buffer_size = 400*1024*1024; unsigned char* buffer = new unsigned char[buffer_size]; unsigned bv_size=0; bv_file.read((char*)&bv_size, sizeof(bv_size)); if (bv_size == 0) { cout << "Warning:Zero vector in query dump..." << endl; return; } bv_file.read((char*)buffer, bv_size); bm::deserialize(bv_query, (unsigned char*)buffer); delete [] buffer; } ifstream bv_file (filename, ios::in | ios::binary); if (!bv_file.good()) { cout << "Cannot open file: " << filename << endl; exit(1); } unsigned buffer_size = 100*1024*1024; unsigned char* buffer = new unsigned char[buffer_size]; for (;1; ++count) { unsigned bv_size; bv_file.read((char*)&bv_size, sizeof(bv_size)); if (!bv_file.good()) break; if (bv_size == 0) { cout << "Warning:Zero vector in dump..." << endl; continue; } if (buffer_size < bv_size) { delete [] buffer; buffer_size = bv_size; buffer = new unsigned char[buffer_size]; } bv_file.read((char*)buffer, bv_size); bvect bv; if (1) { bv.clear(true); bm::deserialize(bv, (unsigned char*)buffer); unsigned bc = bm::count_and(bv, bv_query); if (bc) { ++group_by_count; } /* bv &= bv_query; if (bv.any()) { ++group_by_count; } */ } #if 0 //print_stat(bv_query); //exit(1); { bvect bv(BM_GAP); operation_deserializer::deserialize(bv, bv_query, (unsigned char*)buffer, 0, bm::set_AND); // control if (0) { bvect bv_control(BM_GAP); bm::deserialize(bv_control, (unsigned char*)buffer); bv_control &= bv_query; if (bv_control != bv) { cerr << "Group by control failure" << endl; cerr << bv_control.count() << endl; cerr << bv.count() << endl; exit(1); } } if (bv.any()) { ++group_by_count; } } #endif if (count % 1000 == 0) { cout << count << endl; } } delete [] buffer; cout << "Total vectors:" << count << endl; cout << "Group by vectors:" << group_by_count << endl; clock_t finish = clock(); clock_t elapsed_clocks = finish - start; double duration = (double)(elapsed_clocks) / CLOCKS_PER_SEC; cout << endl << "Test duration = " << duration << endl; } void LoadVectors(const char* dir_name, unsigned from, unsigned to) { vector bv_list; vector sz_list; unsigned total_size = 0; unsigned total_new_size = 0; for(; from <= to; ++from) { char fname[1024]; sprintf(fname, "%s/%i", dir_name, from); bvect* bv = new bvect; unsigned fsize = 0; LoadBVector(fname, *bv, &fsize); //bv->optimize(); //print_stat(*bv); // get new size unsigned blob_size = 0; { bvect::statistics st1; bv->calc_stat(&st1); unsigned char* blob = new unsigned char[st1.max_serialize_mem]; blob_size = bm::serialize(*bv, blob, BM_NO_GAP_LENGTH|BM_NO_BYTE_ORDER); if (st1.max_serialize_mem < blob_size) { printf("BLOB size prediction error!\n"); exit(1); } //if (from >= 27) { bvect bv_control; bm::deserialize(bv_control, (unsigned char*)blob); if (bv_control != *bv) { cout << "Serialization error!" << endl; exit(1); } } delete [] blob; } cout << fname << " " << " old=" << fsize << " new=" << blob_size << " diff=" << (int)fsize - (int) blob_size << endl; bv_list.push_back(bv); sz_list.push_back(fsize); total_size += fsize; total_new_size += blob_size; } // for cout << "Total size = " << total_size / (1024*1024) << "Mb" << endl; cout << " New size = " << total_new_size / (1024*1024) << "Mb" << endl; cout << "Total diff = " << (total_size - total_new_size) / (1024*1024) << "Mb" << endl; vector bv_blobs; cout << "Running serialization benchmark..." << endl; { clock_t start = clock(); for (size_t i = 0; i < bv_list.size(); ++i) { const bvect* bv = bv_list[i]; bvect::statistics st1; bv->calc_stat(&st1); unsigned char* blob = new unsigned char[st1.max_serialize_mem*2]; bv_blobs.push_back(blob); for (int j = 0; j < (int)(400/(i?i:1)); ++j) { //unsigned blob_size = bm::serialize(*bv, blob); } // delete [] blob; } clock_t finish = clock(); clock_t elapsed_clocks = finish - start; double duration = (double)(elapsed_clocks) / CLOCKS_PER_SEC; cout << endl << "Serialization duration = " << duration << endl; } cout << "Running de-serialization benchmark..." << endl; { clock_t start = clock(); for (size_t i = 0; i < bv_blobs.size(); ++i) { const unsigned char* blob = bv_blobs[i]; for (int j = 0; j < (int)(400/(i?i:1)); ++j) { bvect bv; bm::deserialize(bv, (unsigned char*)blob); } // delete [] blob; } clock_t finish = clock(); clock_t elapsed_clocks = finish - start; double duration = (double)(elapsed_clocks) / CLOCKS_PER_SEC; cout << endl << "DeSerialization duration = " << duration << endl; } for (size_t i = 0; i < bv_list.size(); ++i) { delete bv_list[i]; } for (size_t i = 0; i < bv_blobs.size(); ++i) { delete [] bv_blobs[i]; } } void deser_test() { const char* file_names[] = {"1", "2", "3", "4"}; const int file_lengths[] = {413760, 127855, 128640, 415192}; string base_path("c:\\dev\\deser\\"); bm::bvector<> bv(bm::BM_GAP); bm::bvector<> bv2(bm::BM_GAP); for(unsigned i = 0; i < sizeof(file_names) / sizeof(file_names[0]); ++i) { string fname(base_path); fname.append(file_names[i]); ifstream f(fname.c_str(), ios::in | ios::binary); if (!f.good()) { std::cerr << "Bad file name " << fname.c_str() << endl; return; } vector v; v.resize(file_lengths[i]); f.read(&v[0], file_lengths[i]); if (i == 3) { cout << " "; } bm::deserialize(bv, (unsigned char*)&v[0]); bm::bvector<> bv_temp(bm::BM_GAP); bm::deserialize(bv_temp, (unsigned char*)&v[0]); bv2 |= bv_temp; } cerr << bv.count() << " (correct answer = " << bv2.count() << ")" << endl; cerr << abs((int)(bv.count() - bv2.count())) << endl; bv ^= bv2; bv.optimize(); cerr << bv.count() << endl; // print_stat(bv); cout << endl; bv2.optimize(); // print_stat(bv2, 126); } int main(void) { time_t start_time = time(0); time_t finish_time; //deser_test(); //return 0; TestRecomb(); OptimGAPTest(); CalcBeginMask(); CalcEndMask(); if (0) { GroupByTest("C:/dev/group-by-sets/sets/geo_organization.bvdump", "C:/dev/group-by-sets/single/pubmed.dat"); exit(1); } /* LoadBVDump("C:/dev/group-by-sets/sets/geo_organization.dat", "C:/dev/group-by-sets/sets/geo_organization.bvdump", true); // validate! LoadBVDump("C:/dev/group-by-sets/sets/exec_time_msec_bit.dat", "C:/dev/group-by-sets/sets/exec_time_msec_bit.bvdump", true); LoadBVDump("C:/dev/group-by-sets/sets/geo_country.dat", "C:/dev/group-by-sets/sets/geo_country.bvdump", true); LoadBVDump("C:/dev/group-by-sets/sets/log_displayeduids.dat", "C:/dev/group-by-sets/sets/log_displayeduids.bvdump", true); //LoadVectors("c:/dev/bv_perf", 3, 27); exit(1); */ ExportTest(); ResizeTest(); MiniSetTest(); SyntaxTest(); SetTest(); BitCountChangeTest(); Log2Test(); BitForEachTest(); // BitEncoderTest(); GammaEncoderTest(); EnumeratorTest(); BasicFunctionalityTest(); ClearAllTest(); GAPCheck(); MaxSTest(); GetNextTest(); SimpleRandomFillTest(); RangeRandomFillTest(); AndOperationsTest(); OrOperationsTest(); XorOperationsTest(); SubOperationsTest(); WordCmpTest(); ComparisonTest(); BitBlockTransposeTest(); MutationTest(); MutationOperationsTest(); SerializationTest(); DesrializationTest2(); BlockLevelTest(); StressTest(100, 0); // OR StressTest(100, 1); // SUB StressTest(100, 2); // XOR StressTest(100, 3); // AND StressTest(800); finish_time = time(0); cout << "Test execution time = " << finish_time - start_time << endl; #ifdef MEM_DEBUG cout << "Number of BLOCK allocations = " << dbg_block_allocator::na_ << endl; cout << "Number of PTR allocations = " << dbg_ptr_allocator::na_ << endl << endl; if(dbg_block_allocator::balance() != 0) { cout << "Block memory leak! " << endl; cout << dbg_block_allocator::balance() << endl; exit(1); } if(dbg_ptr_allocator::balance() != 0) { cout << "Ptr memory leak! " << endl; cout << dbg_ptr_allocator::balance() << endl; exit(1); } #endif return 0; } bm3.7.0/tests/stress/Makefile0000666000175000017500000000302711365120467014350 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Stress Test CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = test DESTTYPE = DESTINATIONDIR=tests/stress include ../../makefile.in bm3.7.0/tests/stress/rlebtv.h0000666000175000017500000001442211365120467014360 0ustar tlktlk/* Copyright (c) 2002,2003 Anatoliy Kuznetsov. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef RLEBTV__H__INCLUDED__ #define RLEBTV__H__INCLUDED__ #include /* GAP vector is designed to be very small. The size of buffer is fixed 128 short values. First word is a start flag. Used for debugging purposes. */ class gap_vector { public: gap_vector(gap_word_t init = 0) { m_buf[0] = 1 << 3; // initial length = 1; if (init) { m_buf[0] ^= 1; } m_buf[1] = gap_max_bits - 1; } /// Checks if bit pos 1 or 0. Returns 0 if 0 and non zero otherwise. int is_bit_true(unsigned pos) const; int test(unsigned pos) const; /// Sets bit number pos to 1 /// returns true if operation sucessful, false if GAP threashold reached and /// we need to convert block to true bitblock bool set_bit(unsigned pos); /// Sets bit number pos to 0 bool clear_bit(unsigned pos); /// Counts number of bits ON unsigned bit_count() const; unsigned count_range(unsigned left, unsigned right, unsigned* d=0) const; void control() const; void convert_to_bitset(unsigned* dest) const; int combine_and(const gap_word_t* other); const gap_word_t* get_buf() const { return m_buf; } void invert() { *m_buf = 1 - *m_buf; } void temp_invert() const; void combine_or(const gap_vector& vect); void combine_sub(const gap_vector& vect); void combine_xor(const gap_vector& vect); gap_word_t* get_buf() { return m_buf; } int compare(const gap_vector& vect); private: gap_word_t m_buf[bm::gap_max_buff_len+3]; }; inline void gap_vector::combine_or(const gap_vector& vect) { gap_word_t tmp_buf[bm::gap_max_buff_len * 3] = {0,}; // temporary result unsigned len, dsize; gap_word_t* res = bm::gap_operation_or(m_buf, vect.get_buf(), tmp_buf, dsize); len = bm::gap_length(res); if (res == tmp_buf) { assert(len); ::memcpy(m_buf, tmp_buf, (len+1)*sizeof(gap_word_t)); } else { assert(res == m_buf); } } inline void gap_vector::combine_xor(const gap_vector& vect) { gap_word_t tmp_buf[gap_max_buff_len * 3] = {0,}; // temporary result unsigned len, dsize; gap_word_t* res = bm::gap_operation_xor(m_buf, vect.get_buf(), tmp_buf, dsize); len = bm::gap_length(res); if (res == tmp_buf) { assert(len); ::memcpy(m_buf, tmp_buf, (len+1)*sizeof(gap_word_t)); } else { assert(res == m_buf); } } inline void gap_vector::combine_sub(const gap_vector& vect) { unsigned dsize; gap_word_t tmp_buf[bm::gap_max_buff_len * 3] = {0,}; // temporary result gap_word_t* res = bm::gap_operation_sub(m_buf, vect.get_buf(), tmp_buf, dsize); unsigned len = bm::gap_length(res); if (res == tmp_buf) { assert(len); ::memcpy(m_buf, tmp_buf, (len+1) * sizeof(gap_word_t)); } else { assert(res == m_buf); } } inline void gap_vector::temp_invert() const { gap_word_t* buf = const_cast(m_buf); *buf ^= 1; } inline void gap_vector::control() const { unsigned sum = bm::gap_control_sum(m_buf); if(sum != bm::gap_max_bits-1) { assert(0); cout << "GAP Control failed." << endl; exit(1); } unsigned len = bm::gap_length(m_buf); gap_word_t prev = m_buf[1]; for (unsigned i = 2; i < len; ++i) { if (i != len-1) { if (m_buf[i] <= prev) { assert(0); cout << "GAP sequence control failed." << endl; exit(1); } } else { assert(m_buf[i] == bm::gap_max_bits-1); } prev = m_buf[i]; } } inline int gap_vector::is_bit_true(unsigned pos) const { return bm::gap_test(m_buf, pos); } inline int gap_vector::test(unsigned pos) const { return bm::gap_test(m_buf, pos); } unsigned gap_vector::bit_count() const { return bm::gap_bit_count(m_buf); } unsigned gap_vector::count_range(unsigned left, unsigned right, unsigned*) const { return bm::gap_bit_count_range(m_buf, (gap_word_t)left, (gap_word_t)right); } // returns destination size int gap_vector::combine_and(const gap_word_t* other) { gap_word_t tmp_buf[gap_max_buff_len * 3] = {0,}; // temporary result unsigned dsize; gap_word_t* res = bm::gap_operation_and(m_buf, other, tmp_buf, dsize); unsigned len = bm::gap_length(res); if (res == tmp_buf) { assert(len); ::memcpy(m_buf, tmp_buf, (len+1) * sizeof(gap_word_t)); } else { assert(res == m_buf); } return 0; } inline bool gap_vector::set_bit(unsigned pos) { unsigned is_set; bm::gap_set_value(1, m_buf, pos, &is_set); return is_set!=0; } inline bool gap_vector::clear_bit(unsigned pos) { unsigned is_set; bm::gap_set_value(0, m_buf, pos, &is_set); return is_set!=0; } inline void gap_vector::convert_to_bitset(unsigned* dest) const { bm::gap_convert_to_bitset(dest, m_buf); } inline int gap_vector::compare(const gap_vector& vect) { return bm::gapcmp(m_buf, vect.get_buf()); } #endif bm3.7.0/tests/perf/0000700000175000017500000000000011365120467012301 5ustar tlktlkbm3.7.0/tests/perf/perf.cpp0000666000175000017500000006375011365120467013772 0ustar tlktlk/* Copyright (c) 2002-2009 Anatoliy Kuznetsov. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include // No intermix FP with integer SSE in this program //#define BM_SET_MMX_GUARD //#define BMSSE2OPT //#define BMSSE42OPT //#define BM64OPT #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4996) #endif #include "bm.h" #include "bmalgo.h" #include "bmserial.h" //#include "bmdbg.h" #include using namespace std; const unsigned BSIZE = 150000000; const unsigned int REPEATS = 300; typedef bitset test_bitset; unsigned platform_test = 1; class TimeTaker { public: TimeTaker(const char* test_name, unsigned repeats) : test_name_(test_name), repeats_(repeats) { start_ = clock(); } ~TimeTaker() { finish_ = clock(); clock_t elapsed_clocks = finish_ - start_; double duration = (double)(finish_ - start_) / CLOCKS_PER_SEC; cout << test_name_ << " ; "; if (platform_test) { cout << duration << endl; return; } cout << elapsed_clocks << ";" << duration << ";"; if (repeats_) { double ops_per_sec = (double)repeats_ / duration; cout << ops_per_sec; } cout << endl; } private: const char* test_name_; clock_t start_; clock_t finish_; unsigned repeats_; }; typedef bm::bvector<> bvect; void SimpleFillSets(test_bitset& bset, bvect& bvect, unsigned min, unsigned max, unsigned fill_factor, bool set_flag=true) { for (unsigned i = min; i < max; i+=fill_factor) { bset[i] = true; bvect[i] = true; } // for i } // // Interval filling. // 111........111111........111111..........11111111.......1111111... // void FillSetsIntervals(test_bitset& bset, bvect& bvect, unsigned min, unsigned max, unsigned fill_factor, bool set_flag=true) { while(fill_factor==0) { fill_factor=rand()%10; } unsigned i, j; unsigned factor = 10 * fill_factor; for (i = min; i < max; ++i) { unsigned len, end; do { len = rand() % factor; end = i+len; } while (end >= max); for (j = i; j < end; ++j) { if (set_flag) { bset[j] = true; bvect[j]= true; } else { bset[j] = false; bvect[j] = false; } } // j i = end; len = rand() % 10; i+=len; { for(unsigned k=0; k < 1000 && i < max; k+=3,i+=3) { if (set_flag) { bset[i] = true; bvect[i] = true; } else { bset[j] = false; bvect[j] = false; } } } } // for i } void MemCpyTest() { unsigned* m1 = new unsigned[BSIZE/32]; unsigned* m2 = new unsigned[BSIZE/32]; unsigned int i,j; if (!platform_test) { TimeTaker tt("Memory ADD transfer test", REPEATS * 4); for (i = 0; i < REPEATS*4; ++i) { for (j = 0; j < BSIZE/32; j+=4) { m1[j+0] += m2[j+0]; m1[j+1] += m2[j+1]; m1[j+2] += m2[j+2]; m1[j+3] += m2[j+3]; } } } if (!platform_test) { TimeTaker tt("memcpy transfer test", REPEATS * 4); for (i = 0; i < REPEATS*4; ++i) { memcpy(m1, m2, BSIZE/32 * sizeof(unsigned)); } } delete [] m1; delete [] m2; } void BitCountTest() { { bvect* bv = new bvect(); test_bitset* bset = new test_bitset(); unsigned value = 0; FillSetsIntervals(*bset, *bv, 0, BSIZE, 10); if (!platform_test) { TimeTaker tt("BitCount. Random bitvector", REPEATS*2); for (unsigned i = 0; i < REPEATS*2; ++i) { value+=bv->count(); } } volatile unsigned* p = &value; unsigned c1 = *p; c1 = value = 0; if (!platform_test) { TimeTaker tt("BitCount. Random bitvector (STL)", REPEATS*2); for (unsigned i = 0; i < REPEATS*2; ++i) { value += bset->count(); } } c1 = *p; c1 = value = 0; delete bset; delete bv; } } void BitForEachTest() { // setup the test data // unsigned* test_arr = new unsigned[65536]; for (unsigned j = 0; j < 65536; ++j) { test_arr[j] = j; } if (!platform_test) { unsigned bit_list[32]; TimeTaker tt("BitList algorithm. Conventional (AND based check)", REPEATS*10); for (unsigned i = 0; i < REPEATS*10; ++i) { for (unsigned j = 0; j < 65536; ++j) { bm::bit_list(i*test_arr[j], bit_list); } } } { unsigned bit_list[32]; TimeTaker tt("BitList4 algorithm(sub-octet+switch)", REPEATS*10); for (unsigned i = 0; i < REPEATS*10; ++i) { for (unsigned j = 0; j < 65536; ++j) { bm::bit_list_4(i*test_arr[j], bit_list); } } } delete test_arr; } void BitCountSparseTest() { { bvect* bv = new bvect(); test_bitset* bset = new test_bitset(); unsigned value = 0, c1; volatile unsigned* p = &value; SimpleFillSets(*bset, *bv, 0, BSIZE, 2500); { TimeTaker tt("BitCount: Sparse bitset ", REPEATS*10); for (unsigned i = 0; i < REPEATS*10; ++i) { value += bv->count(); } } if (!platform_test) { TimeTaker tt("BitCount: Sparse bitset (STL)", REPEATS*10); for (unsigned int i = 0; i < REPEATS*10; ++i) { value += bset->count(); } } c1 = *p; value = c1 = 0; bv->optimize(); { TimeTaker tt("BitCount: GAP Sparse bitset", REPEATS*1000); for (unsigned i = 0; i < REPEATS*1000; ++i) { value += bv->count(); } delete bv; delete bset; } c1 = *p; value = c1 = 0; } } void BitCompareTest() { { bvect* bv1 = new bvect(); bvect* bv2 = new bvect(); test_bitset* bset = new test_bitset(); int value = 0; SimpleFillSets(*bset, *bv1, 0, BSIZE, 10); SimpleFillSets(*bset, *bv2, 0, BSIZE, 10); { TimeTaker tt("BitCompare: Random bitvector", REPEATS*10); for (unsigned int i = 0; i < REPEATS*10; ++i) { value+=bv1->compare(*bv2); } } delete bset; delete bv1; delete bv2; } if (platform_test) return; unsigned cnt = REPEATS * 100000; unsigned* arr1 = new unsigned[cnt]; unsigned* arr2 = new unsigned[cnt]; unsigned i; for (i = 0; i < cnt; ++i) { if ((rand() % 10) == 0) { arr1[i] = 0; } else { arr1[i] = rand(); arr2[i] = rand(); } } { TimeTaker tt("wordcmp complex: Random words comparison", cnt); for (i = 0; i < cnt; ++i) { int res2 = bm::wordcmp(arr1[i], arr2[i]); int res = bm::wordcmp0(arr1[i], arr2[i]); if (res != res2) { cerr << "Incorrect result ! " << arr1[i] << "<=>" << arr2[i] << " res=" << res << endl; exit(1); } } } int c = 0; volatile void* p = &c; { TimeTaker tt("wordcmp0. Random words comparison", cnt); for (i = 0; i < cnt; ++i) { c += bm::wordcmp0(arr1[i], arr2[i]); } } { TimeTaker tt("wordcmp. Random words comparison", cnt); for (i = 0; i < cnt; ++i) { c += bm::wordcmp(arr1[i], arr2[i]); } } c = 0;; delete [] arr1; delete [] arr2; char buf[256]; sprintf(buf, "%p", p); } void EnumeratorTest() { bvect bv; test_bitset* bset = new test_bitset(); unsigned value = 0; FillSetsIntervals(*bset, bv, 0, BSIZE, 10); unsigned cnt1 = bv.count(); //unsigned cnt2 = bset->count(); unsigned i; { TimeTaker tt("bvector<>::enumerator", REPEATS/10); for (i = 0; i < REPEATS/10; ++i) { bvect::enumerator en = bv.first(); for (;en.valid();++en) { value = *en; } } } // ----------------------------------------------- unsigned cnt = 0; { TimeTaker tt("bvector<>::get_next()", REPEATS/10); for (i = 0; i < REPEATS/10; ++i) { if (bv.any()) { unsigned value = bv.get_first(); do { value = bv.get_next(value); cnt += value; } while ( value ); } } } delete bset; // delete bv; char buf[256]; sprintf(buf, "%i %i ", cnt, cnt1);//, cnt2); } void EnumeratorTestGAP() { bvect* bv = new bvect(); test_bitset* bset = new test_bitset(); unsigned i; unsigned value = 0; SimpleFillSets(*bset, *bv, 0, BSIZE, 2500); bv->count(); for (int k = 0; k < 2; ++k) { { TimeTaker tt("Sparse bvector (enumerator)", REPEATS*10*(k+1)); for (i = 0; i < REPEATS*10*(k+1); ++i) { bvect::enumerator en = bv->first(); bvect::enumerator bend = bv->end(); while (en < bend) { value = *en; ++en; } } } // ----------------------------------------------- unsigned cnt = 0; { TimeTaker tt("Sparse bvector (get_next())", REPEATS*10*(k+1)); for (i = 0; i < REPEATS*10*(k+1); ++i) { if (bv->any()) { unsigned value = bv->get_first(); do { value = bv->get_next(value); cnt += value; } while ( value ); } } } char buf[256]; sprintf(buf, "%i", cnt); // to fool some smart compilers like ICC { bv->optimize(); } if (!platform_test) { cout << "Testing optimized vectors." << endl; } } delete bv; delete bset; // ----------------------------------------------- } void SerializationTest() { bvect bv_sparse; // prepare a test bitset with a small number of bits set somewhere // far from the beginning for (unsigned i = 0; i < 5; ++i) { bv_sparse[BSIZE/2 + i * 3] = true; } bv_sparse[100] = true; bv_sparse[70000] = true; bv_sparse[200000] = true; bv_sparse.optimize(); unsigned cnt = bv_sparse.count(); bvect::statistics st; bv_sparse.calc_stat(&st); unsigned char* buf = new unsigned char[st.max_serialize_mem]; unsigned len, id_size; len = id_size = 0; { TimeTaker tt("Small bvector serialization", REPEATS*70000); for (unsigned i = 0; i < REPEATS*70000; ++i) { len += bm::serialize(bv_sparse, buf, bm::BM_NO_BYTE_ORDER|bm::BM_NO_GAP_LENGTH); id_size += cnt * sizeof(unsigned); } } delete [] buf; buf = 0; bvect* bv = new bvect(); test_bitset* bset = new test_bitset(); unsigned value = 0; SimpleFillSets(*bset, *bv, 0, BSIZE, 4); cnt = bv->count(); bv->calc_stat(&st); buf = new unsigned char[st.max_serialize_mem]; { TimeTaker tt("Large bvector serialization", REPEATS*4); for (unsigned i = 0; i < REPEATS*4; ++i) { len += bm::serialize(*bv, buf, bm::BM_NO_BYTE_ORDER|bm::BM_NO_GAP_LENGTH); id_size += cnt * sizeof(unsigned); } } char cbuf[256]; sprintf(cbuf, "%i %i %i", id_size, len, value); delete bv; delete bset; delete [] buf; } void InvertTest() { bvect* bv = new bvect(); test_bitset* bset = new test_bitset(); unsigned i; //unsigned value = 0; SimpleFillSets(*bset, *bv, 0, BSIZE, 2500); { TimeTaker tt("Invert bvector", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bv->flip(); } } if (!platform_test) { TimeTaker tt("Invert bvector (STL)", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bset->flip(); } } delete bv; delete bset; } void AndTest() { bvect* bv1 = new bvect(); test_bitset* bset1 = new test_bitset(); test_bitset* bset2 = new test_bitset(); bvect* bv2 = new bvect(); unsigned i; //unsigned value = 0; SimpleFillSets(*bset1, *bv1, 0, BSIZE, 100); SimpleFillSets(*bset1, *bv2, 0, BSIZE, 100); { TimeTaker tt("AND bvector test", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { *bv1 &= *bv2; } } if (!platform_test) { TimeTaker tt("AND bvector test(STL)", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { *bset1 &= *bset2; } } delete bv1; delete bv2; delete bset1; delete bset2; } void SubTest() { bvect* bv1 = new bvect(); test_bitset* bset1 = new test_bitset(); bvect* bv2 = new bvect(); unsigned i; SimpleFillSets(*bset1, *bv1, 0, BSIZE, 100); SimpleFillSets(*bset1, *bv2, 0, BSIZE, 100); delete bset1; { TimeTaker tt("SUB bvector test", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { *bv1 -= *bv2; } } delete bv1; delete bv2; } void XorCountTest() { bvect* bv1 = new bvect(); bvect* bv2 = new bvect(); test_bitset* bset1 = new test_bitset(); test_bitset* bset2 = new test_bitset(); unsigned i; SimpleFillSets(*bset1, *bv1, 0, BSIZE, 400); SimpleFillSets(*bset2, *bv2, 0, BSIZE, 500); unsigned count1 = 0; unsigned count2 = 0; unsigned test_count = 0; if (!platform_test) { bvect bv_tmp; TimeTaker tt("XOR COUNT bvector test with TEMP vector", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bv_tmp.clear(false); bv_tmp |= *bv1; bv_tmp ^= *bv2; count1 += bv_tmp.count(); } } if (!platform_test) { test_bitset* bset_tmp = new test_bitset(); TimeTaker tt("XOR COUNT bvector test with TEMP vector (STL)", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bset_tmp->reset(); *bset_tmp |= *bset1; *bset_tmp ^= *bset2; test_count += bset_tmp->count(); } } { TimeTaker tt("XOR COUNT bvector test", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { count2 += bm::count_xor(*bv1, *bv2); } } if (!platform_test) if (count1 != count2) { cout << "Check failed !" << endl; cout << count1 << " " << count2 << " " << test_count << endl; exit(1); } count1 = count2 = 0; // ----------------------------------------- if (!platform_test) { cout << "One optimized vector" << endl; } bv2->optimize(); if (!platform_test) { bvect bv_tmp; TimeTaker tt("XOR COUNT bvector test with TEMP vector", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bv_tmp.clear(false); bv_tmp |= *bv1; bv_tmp ^= *bv2; count1 += bv_tmp.count(); } } { TimeTaker tt("XOR COUNT bvector test", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { count2 += bm::count_xor(*bv1, *bv2); } } if (!platform_test) if (count1 != count2) { cout << "Check failed !" << endl; exit(1); } count1 = count2 = 0; // ----------------------------------------- if (!platform_test) { cout << "Both vectors optimized" << endl; } bv1->optimize(); //bv1->stat(); if (!platform_test) { bvect bv_tmp; TimeTaker tt("XOR COUNT bvector test with TEMP vector", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { bv_tmp.clear(false); bv_tmp |= *bv1; bv_tmp ^= *bv2; count1 += bv_tmp.count(); } } { TimeTaker tt("XOR COUNT bvector test", REPEATS*4); for (i = 0; i < REPEATS*4; ++i) { count2 += bm::count_xor(*bv1, *bv2); } } if (!platform_test) if (count1 != count2) { cout << "Check failed !" << endl; exit(1); } count1 = count2 = 0; delete bv1; delete bv2; delete bset1; delete bset2; } void TI_MetricTest() { bvect* bv1 = new bvect(); bvect* bv2 = new bvect(); test_bitset* bset1 = new test_bitset(); test_bitset* bset2 = new test_bitset(); unsigned i; SimpleFillSets(*bset1, *bv1, 0, BSIZE, 500); SimpleFillSets(*bset2, *bv2, 0, BSIZE, 250); unsigned count1 = 0; unsigned count2 = 0; unsigned countA=0, countB=0, test_countA=0, test_countB=0; unsigned test_count = 0; double ti1=0, ti2=0; { TimeTaker tt("Tversky Index bvector test vector", REPEATS); for (i = 0; i < REPEATS; ++i) { count1 = bm::count_and(*bv1, *bv2); countA = bm::count_sub(*bv1, *bv2); countB = bm::count_sub(*bv2, *bv1); ti1 = double(count1) / double(0.4*countA + 0.5*countB + count1); } } if (!platform_test) { test_bitset* bset_tmp = new test_bitset(); double test_dice = 0; TimeTaker tt("Dice bvector test with TEMP vector(STL)", REPEATS); for (i = 0; i < REPEATS; ++i) { bset_tmp->reset(); *bset_tmp |= *bset1; *bset_tmp &= *bset2; test_count += bset_tmp->count(); test_countA += bset1->count(); test_countB += bset2->count(); test_countA += bset1->count(); test_countB += bset2->count(); test_dice += double(2*test_count) / double(test_countA + test_countB); } } { bm::distance_metric_descriptor dmd[3]; dmd[0].metric = bm::COUNT_AND; dmd[1].metric = bm::COUNT_SUB_AB; dmd[2].metric = bm::COUNT_SUB_BA; TimeTaker tt("Tversky Index bvector test (pipeline)", REPEATS); for (i = 0; i < REPEATS; ++i) { bm::distance_operation(*bv1, *bv2, &dmd[0], (&dmd[0])+3); ti2 = double(dmd[0].result) / double(0.4*dmd[1].result + 0.5*dmd[2].result + dmd[0].result); dmd[0].result = dmd[1].result = dmd[2].result = 0; } } if (fabs(ti2 - ti1) > 0.1) { cout << "Check failed ! error=" << fabs(ti2 - ti1) << endl; cout << ti1 << " " << ti2 << endl; exit(1); } count1 = count2 = 0; // ----------------------------------------- if (!platform_test) { cout << "One optimized vector" << endl; } bv2->optimize(); bv1->count(); // trying to fool the CPU cache { TimeTaker tt("Dice metric bvector test", REPEATS); for (i = 0; i < REPEATS; ++i) { count1 = bm::count_and(*bv1, *bv2); countA = bm::count_sub(*bv1, *bv2); countB = bm::count_sub(*bv2, *bv1); ti1 = double(count1) / double(0.4*countA + 0.5*countB + count1); } } { bm::distance_metric_descriptor dmd[3]; dmd[0].metric = bm::COUNT_AND; dmd[1].metric = bm::COUNT_SUB_AB; dmd[2].metric = bm::COUNT_SUB_BA; TimeTaker tt("Tversky Index bvector test(pipeline)", REPEATS); for (i = 0; i < REPEATS; ++i) { bm::distance_operation(*bv1, *bv2, &dmd[0], (&dmd[0])+3); ti2 = double(dmd[0].result) / double(0.4*dmd[1].result + 0.5*dmd[2].result + dmd[0].result); dmd[0].result = dmd[1].result = dmd[2].result = 0; } } if (fabs(ti2 - ti1) > 0.1) { cout << "Check failed !" << endl; cout << ti1 << " " << ti2 << endl; exit(1); } count1 = count2 = 0; count1 = count2 = 0; // ----------------------------------------- if (!platform_test) { cout << "Both vectors optimized" << endl; } bv1->optimize(); { TimeTaker tt("Tversky index bvector test", REPEATS); for (i = 0; i < REPEATS; ++i) { count1 = bm::count_and(*bv1, *bv2); countA = bm::count_sub(*bv1, *bv2); countB = bm::count_sub(*bv2, *bv1); ti1 = double(count1) / double(0.4*countA + 0.5*countB + count1); } } { bm::distance_metric_descriptor dmd[3]; dmd[0].metric = bm::COUNT_AND; dmd[1].metric = bm::COUNT_SUB_AB; dmd[2].metric = bm::COUNT_SUB_BA; TimeTaker tt("Tversky Index bvector test (pipeline)", REPEATS); for (i = 0; i < REPEATS; ++i) { bm::distance_operation(*bv1, *bv2, &dmd[0], (&dmd[0])+3); ti2 = double(dmd[0].result) / double(0.4*dmd[1].result + 0.5*dmd[2].result + dmd[0].result); dmd[0].result = dmd[1].result = dmd[2].result = 0; } } if (fabs(ti2 - ti1) > 0.1) { cout << "Check failed !" << endl; cout << ti1 << " " << ti2 << endl; exit(1); } delete bv1; delete bv2; delete bset1; delete bset2; } #ifdef BMSSE2OPT # if(_MSC_VER) # define BM_ALIGN16 __declspec(align(16)) # define BM_ALIGN16ATTR # else // GCC # define BM_ALIGN16 # define BM_ALIGN16ATTR __attribute__((aligned(16))) # endif #else # define BM_ALIGN16 # define BM_ALIGN16ATTR #endif void BitBlockTransposeTest() { bm::word_t BM_ALIGN16 block1[bm::set_block_size] BM_ALIGN16ATTR = {0,}; //bm::word_t BM_ALIGN16 block2[bm::set_block_size] = {0xFF,}; unsigned BM_ALIGN16 tmatrix1[32][bm::set_block_plain_size] BM_ALIGN16ATTR; for (unsigned i = 0; i < bm::set_block_size; ++i) { block1[i] = 1 | (1 << 5) | (7 << 15) | (3 << 22); } const unsigned blocks_count = 70000; bm::word_t* blocks[blocks_count]; for (unsigned k = 0; k < blocks_count; ++k) { blocks[k] = bm::block_allocator::allocate(bm::set_block_size, 0); for (unsigned i = 0; i < bm::set_block_size; ++i) { blocks[k][i] = 1 | (1 << 5) | (7 << 15) | (3 << 22); } } unsigned cnt=0; /* { TimeTaker tt("Bit-block transpose.", REPEATS*1000); for (unsigned i = 0; i < REPEATS*1000; ++i) { bm::bit_block_transpose(block1, tmatrix1); } } { TimeTaker tt("Bit-block trestore.", REPEATS*1000); for (unsigned i = 0; i < REPEATS*1000; ++i) { bm::bit_block_trestore(tmatrix1, block2); cnt += block2[10]; } } { TimeTaker tt("Bit-block transpose distance.", REPEATS*1000); unsigned distance[bm::set_block_plain_cnt][bm::set_block_plain_cnt]; for (unsigned i = 0; i < REPEATS*1000; ++i) { bm::bit_block_tmatrix_distance(tmatrix1, distance); cnt += distance[1][1]; } } printf("", cnt); */ unsigned d2[bm::set_block_plain_cnt][bm::set_block_plain_cnt]; { TimeTaker tt("Bit-block transpose+distance", 100000); unsigned distance[bm::set_block_plain_cnt][bm::set_block_plain_cnt]; unsigned idx = 0; for (unsigned i = 0; i < 100000; ++i) { bm::vect_bit_transpose (blocks[idx], bm::set_block_size, tmatrix1); bm::tmatrix_distance (tmatrix1, distance); cnt += distance[1][1]; ++idx; if (idx >= blocks_count) idx = 0; memcpy(d2, distance, sizeof(distance)); } } char cbuf[256]; sprintf(cbuf, "%i %i", cnt, d2[10][10]); for (unsigned i = 0; i < blocks_count; ++i) { bm::block_allocator::deallocate(blocks[i], 0); } } void ptest() { bvect* bv_small = new bvect(bm::BM_GAP); bvect* bv_large = new bvect(bm::BM_GAP); test_bitset* bset = new test_bitset(); FillSetsIntervals(*bset, *bv_large, 0, 2000000000, 10); for (int i = 0; i < 2000; ++i) { bv_small->set(i*10000); } { TimeTaker tt("Operation &= test", REPEATS * 10); unsigned count = 0; for (unsigned i = 0; i < REPEATS*10; ++i) { bvect t1(bm::BM_GAP); t1 = *bv_small; t1 &= *bv_large; count += t1.count(); } } { TimeTaker tt("Operation &= with enumerator test", REPEATS * 10); unsigned count = 0; for (unsigned i = 0; i < REPEATS*10; ++i) { bvect t1(bm::BM_GAP); bvect t2(bm::BM_GAP); t1 = *bv_small; for (bvect::enumerator it = t1.first(); it != t1.end(); ++it) { if ((*bv_large)[*it]) { t2.set_bit(*it); } } count += t2.count(); } } } int main(void) { // ptest(); TimeTaker tt("TOTAL", 1); MemCpyTest(); BitCountTest(); BitForEachTest(); BitCountSparseTest(); BitCompareTest(); BitBlockTransposeTest(); EnumeratorTest(); EnumeratorTestGAP(); AndTest(); SubTest(); InvertTest(); XorCountTest(); TI_MetricTest(); SerializationTest(); return 0; } #ifdef _MSC_VER #pragma warning( pop ) #endif bm3.7.0/tests/perf/Makefile0000666000175000017500000000303211365120467013755 0ustar tlktlk# ============================================================================ # # BitMagic Library makefile # (c) 2002 Anatoliy Kuznetsov. # # ============================================================================ # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # ============================================================================ PROJECTNAME=BitMagic Library Performance Test CXXSOURCES=$(wildcard *.cpp) BASICINCS=src CSOURCES= DESTINATION = perf DESTTYPE = DESTINATIONDIR=tests/perf include ../../makefile.in bm3.7.0/tests/perf/perf.vcproj0000666000175000017500000001221211206705076014475 0ustar tlktlk