pax_global_header00006660000000000000000000000064122255740640014521gustar00rootroot0000000000000052 comment=a3fe9e8b5c15aa56b3feb397f78575d5a8f846f5 engauge-digitizer-5.2/000077500000000000000000000000001222557406400147725ustar00rootroot00000000000000engauge-digitizer-5.2/.gitignore000066400000000000000000000001141222557406400167560ustar00rootroot00000000000000Makefile src/.objs bin/engauge moc_* .bookmarks .history digitizer.pro.user engauge-digitizer-5.2/Doxyfile000066400000000000000000000233071222557406400165050ustar00rootroot00000000000000# Doxyfile 1.3.7-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = digitizer.kdevelop PROJECT_NUMBER = 2.13 OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = /home/mark/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = /home/mark/engauge_dev/digitizer FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.C \ *.H \ *.tlh \ *.diff \ *.patch \ *.moc \ *.xpm \ *.dox RECURSIVE = yes EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 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 CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = YES LATEX_OUTPUT = latex 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 LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf 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 MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = yes XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = digitizer.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO engauge-digitizer-5.2/INSTALL000066400000000000000000000153341222557406400160310ustar00rootroot00000000000000 INSTALL Engauge Digitizer Table of Contents: 1. REQUIREMENTS 1.1 Before installing a binary release 1.2 Before installing a source code release 2. USER INSTALL - Mac OSX Executable Release 3. USER INSTALL - MS Windows Executable Release 4. USER INSTALL - Source Release 5. DEVELOPER INSTALL - Using Makefile 6. INTERNATIONALIZATION 1. REQUIREMENTS --------------- 1.1 Before installing a binary release ---------------------------- If you are installing a binary version of Engauge Digitizer, you do not need to worry about installing other packages first. The required packages will either be bundled with Engauge, or installed automatically if you are using a package manager such as Ubuntu's Synaptic. 1.2 Before installing a source code release ------------------------------------------- If you are compiling Engauge Digitizer from source code, the following two packages must first be installed: 1. Version 4 of Qt from qt.nokia.com ******************************************************************* * Comments and warnings: * * 1. Do NOT install Version 3! You must install version 4 * * 2. You may download the open source version for free, although * * purchasing a commercial version entitles you to customer * * support from the wonderful staff at Trolltech, and to * * include Qt in commercial products * * 3. The QTDIR environment variable must point to the Qt * * installation directory * * 4. The PATH environment variable must point to the qmake tool * * of Qt. Hint - if you have compilation problems on a computer * * with multiple versions of Qt, then try 'qmake -v' to see if * * you are using the wrong version of Qt. If so, then adjust * * your PATH variable to use Qt version 4 * * 5. In Microsoft Windows the preferred setup is using QtSDK from * * qt.nokia.com with the optional MinGW package installed * * during the QtSDK installation. Details are given below. * ******************************************************************* 2. Version 3.1.2 of FFTW from www.fftw.org ******************************************************************* * Comments and warnings: * * 1. Version 3.1.2 is guaranteed to work, although other versions * * will probably also work * * 2. Linux users may be able to install a package for their * * distribution using their standard package installer. This is * * the preferred method. * * 3. The FFTW source may be downloaded from www.fftw.org and * * installed manually. In this case, the standard instalation * * steps are followed: * * 3a) ./configure * * 3b) make * * 3c) make install * ******************************************************************* Note that open source versions of both Qt and FFTW are freely available. 2. USER INSTALL - Mac OSX Executable Release -------------------------------------------- Untar the executable release package. The executable name is Engauge.app. The samples directory contains some sample image and document files, but it must be copied from inside the bundle. To copy the samples directory, open the bundle using 'Show contents', then click on the Contents directory, and then copy the samples directory. 3. USER INSTALL - MS Windows Executable Release ----------------------------------------------- Unzip the executable release package. The executable name is digitizer.exe. The samples directory contains some sample image and document files. 4. USER INSTALL - Source Release -------------------------------- This installation method is much harder than installing one of the executable releases. However, this is the only option for unsupported operating systems. Building your own executable is not too much of a problem if you have already installed Qt from Trolltech (qt.nokia.com) installed, but if you have yet to install the Qt toolkit, you may have much work ahead of you. There are two source release packages - zip file and tarball. Both contain the same contents, and both work under MS Windows, Mac OSX, Linux, and a wide variety of other platforms. 5. DEVELOPER INSTALL - Using Makefile ------------------------------------------- 1. See if Qt is installed. Some tricks are to try running 'qmake -v' and to look in '/usr/lib' for a directory like 'qt-3.3.3' 2. If Qt from Trolltech is not already installed, then install Qt/X11 (see http://qt.nokia.com/developer/platforms/index.html) 3. Get a copy of the source code using anonymous git git clone http://git.code.sf.net/p/digitizer/code digitizer-code -OR- by downloading the source tarball from digitizer.sourceforge.net and running 'tar xvfz digit-src-X_Y.tar.gz' 4. 'cd digitizer' 5. 'qmake -unix digitizer.pro' 6. 'make' 7. You can now run the digitizer executable 6. INTERNATIONALIZATION ------------------------ The following steps will create a translation file: 1. Open http://babelfish.altavista.com/tr for translations 2. Edit digitizer.pro to add the appropriate translation file, and check the modified file into cvs. This step is only performed for new languages, and is skipped if there is already an entry. 3. Run 'lupdate digitizer.pro' to create a 'digitizer_XX_YY.ts' file. 4. Run 'linguist digitizer_XX_YY.ts' and use the babelfish webpage to translate 5. Save the modified *.ts file, being sure to check it into cvs so the changes will never be lost 6. Run 'lrelease digitizer_XX_YY.ts' to get the digitizer_XX_YY.qm file 7. Make sure main.cpp loads in the appropriate qm files WARNING - I would like to gently discourage any volunteers from attempting to translate the text of Engauge Digitizer. Some brave volunteers have contacted me about translating from English, only to realize that the simple Engauge interface is actually hiding an amazing amount of documentation. The work involved is really too much for a single volunteer - and that work would have to be updated often because the code is still under development. I am extremely pleased that people have volunteered for this task though! engauge-digitizer-5.2/LICENSE000066400000000000000000000354451222557406400160120ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS engauge-digitizer-5.2/README000066400000000000000000000033121222557406400156510ustar00rootroot00000000000000Introduction ------------ This main directory and its subdirectories contain the Engauge Digitizer software project (http://digitizer.sourceforge.net). Engauge Digitizer was created to fulfill a recurring need of the author - to conveniently and quickly extract numbers from graph images. If you are trying to build the software from source code, read file INSTALL in this directory. You may also want to look at the fairly extensive documentation in the usermanual directory - that documentation is accessed by opening usermanual/index.html in your browser. Further information may be found at http://digitizer.sourceforge.net. Utilities --------- A postprocessing utility found in the utility/tranpose directory may be used to transpose the export files. Date and time formats can be handled by opening the usermanual/dateconvert.html web page in your browser. Building the software --------------------- Please note that this software is NOT compiled and linked using autoconf and automake. Instead, this is built with the qmake utility provided by Trolltech (www.trolltech.com), and requires the Qt library from the same company. More information about building this software is found in the INSTALL file in the main directory. A GPL version of Qt is supplied with most Linux distributions for developing open source projects. Please refer to the Qt licensing restrictions at www.trolltech.com for further information. Licensing --------- All of the files in this directory, other than the LICENSE file, were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/README_for_osx000066400000000000000000000017051222557406400174140ustar00rootroot00000000000000Unfortunately, the developers are no longer able to offer Mac OSX releases. Until mid-2006, we were able to build Mac OSX releases on free computers offered by Sourceforge.net, but those free services are no longer available. Although Mac OSX users are still able to build Engauge Digitizer from source code, this is not recommended for most people. You will have to build two other software packages first - Qt from Trolltech.com and FFTW from fftw.org. Building all three packages from source code can take hours, even if no problems are encountered. However, OSX users have two easier options: Option 1) The gracious people at ATG (http://naranja.umh.es/~atg) have been offering Mac OSX release packages for several years. You will find Engauge Digitizer in their Qt3.3.x software section. Thanks ATG! Option 2) Jack Fink maintains Engauge Digitizer in the Fink distribution (http://finkproject.org). Thanks Jack! engauge-digitizer-5.2/RELEASE000066400000000000000000000020051222557406400157720ustar00rootroot00000000000000 RELEASE Engauge Digitizer This file documents how to generate release packages for distribution to Sourceforge. See file INSTALL for instructions on installing a release package. RELEASE - Source / Linux --------------- This assumes Qt 4.x is already installed on the computer. 1. Change the version number in digitdef.cpp and rebuild the executable VersionNumber = QString ("X.Y"); VersionNumbersSupported << "X.0" << "X.1" << ... << "X.Y"; where X is the major version number and Y is the minor version number. The document file formats do not change between minor versions. 2. Run test cases using valgrind (http://valgrind.kde.org) to check for uninitialized variables and memory leaks valgrind --leak-check=yes engauge 3. Create source tarball git archive master --prefix engauge-VERSION/ -o /tmp/engauge_VERSION.tgz 4. Test compilation and installation from source 5. Tag git version 6. Upload the tarball to sourceforge engauge-digitizer-5.2/animation/000077500000000000000000000000001222557406400167515ustar00rootroot00000000000000engauge-digitizer-5.2/animation/README000066400000000000000000000012201222557406400176240ustar00rootroot00000000000000Introduction ------------ This animation directory contains the image files needed to create the animated gif image found at the top left of the Engauge Digitizer website (http://digitizer.sourceforge.net). Build the animation sequence ---------------------------- Run ImageMagick to make the animation sequence, as follows: convert -delay 100 -loop 0 step*.gif animation.gif Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/animation/animation.gif000066400000000000000000000021351222557406400214200ustar00rootroot00000000000000GIF89aE-3!!!!!!!!{sskk{c{csZkRcJZJRBRBRBJ:B1:):)1!)!!T+,E-pH,Ȥrl:IZ'R]OHAvrJ)^Q>P8*xq{r*&r~Ky`mpU)*LP)U}*ML'M &*J#*$DmOCmPѺC]Uҳ ~V"gB#oW*#`Tx/)!+H a\j1 1gM*N$# "@qO&*"BP`~ZrO6@%@pA"H4ň|QWhKH@O !" *<8p퐢~ pl$&njL˓c̹3ZōBv4ӢM^:@!T+,&pGr\F&4!T+,>&j Gr !T+,pGr\F&4!T+,   !q$F*!T+,  p(ȕQ@G'4-r!T+,pH\Ť$&\ꐪ!T+, &pH,R\:WhY6E 2eN`v gb!T+,#7pH,Cl).ؕUͪn+.Ԣn(|Ng]! T+,E-fpH,Ȥrl:ШtJZجz\w|䚻U7:N~NbBJ'IF~A;engauge-digitizer-5.2/animation/animation.png000066400000000000000000001150131222557406400214370ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$|prVWxXY6%@h&vACRAx'}:L]|(PlW2IUH<9xlwXnxۮkXp p{ 7x WXa69p8p8xeOSISL3|(u,O} 1PbH~˰,cdp!Yxi_uMӣjf9j=Kxx8c,cƿ?:jp=F>@/>Ht4[SD9ۑBz^Η~W~?.Zl~H ?~Yӄ8Rrڏs6܆A9I]"y?F?J`LckǗ|8뀹zۓn҅G 0Q/0IpO߲5`@#\/ 1OXP + TT1KO0/ωP:Al(c gIC! wAݐhD[QKR6nz4CfnY_zisŲp:8aw!#v?9^:8Ai^` S Z@%JN^p BDAAS&ZrkLyHiHn9r~Ln%^bh89θZ g͇cXJSh $ b ԰y¤9cp6.菢>CޱL_) |] = VGQuOpʤߚ1W.[Ĵo[Jk7 Ү/-+|pPZ'\]O )݇$MXF@چĥLq[Z 4bb81(` XLF3t\6GFQL!w!jρ3%D0!]KEZnTdxP0|=Xk bF"ye2+ |rZPKDqXY!qaHB*3An,34@e띨$ 5JM ϗDYWСuFpjJ{6XGr_%^/Dƴ\/ IXZP&܉PcOSJL ly' H|s^QXkխӔ#P p,˘(:| bk9F y9a8Ba3 p% "3ou V4᜴İY(daT<+S`Mu>gȈ@<,t :/ HGcK{ķ)9%y\KmxKls1-89ȀP!GɍC/NcæͰ"|[l4 3Xp 4.:C@X2E\'K⭇<,Bq\x E3ζ"lzTAPȱzƱߛKylJ}gL':lD#1灧/c DdBrF|,6Xw7- VF &f_Mu["iA= JZ< j+9K!r)4DGT~35gfZЋ %tM/.}y-[$(,wYAJ8tJ3az 70d<HlF ʔ9e7S2W(KZpGww3(ycG)]Gt#aǚ G!`L-#26XҹI<ɉӶ5%?XR[V7 Rġ"<|&LȝŚ%Y,u,ٞ Z6 *yEl !C?#r`r^K…y@5Pҝ|?8p,<#]\;Qd\#! S7P[vʥW;czi@:bɡlTviHeri) Bo&ΡCSsAp\pQCFdZFqz.or<Dzy0;ʪ9, LKbQ4]$ 7.EiDȝzaXgR!PBpZO|leS_>vn wK''#I M))Hzyl̂`(YK'jX$k2;sQ#3wbl|Cs8^ebaiq%$Irʼk-K BQºc@b'ʪǧ&uKy)±\f\#W}!S(-]Xfη<ƕ]ɶ 3y(dSĒ<2-([QWd;0p6wgrwC(z ,^x錖FWoo54(L㓽yʠ0ѽJF n CtǯpT?@i'J8k8IkL-@ڭp̎eڢ]XxHΙ)AOu ZSotA9) QڼRK4R+vlЩb1,L0;4, -(fCFR(5ٌ"9-:ꄋ?cb<ൌWnM#˜WTH3iBl^ܟa*zDY 93emՍH \+\ 7^pMT(-! Cz'!~q1z9{L>]O)hc}/Ėr}ו{txIʣ?O`0 )+pc|g^ ?'ФM1l{mۄӒ6_߰'_TыOjŠ(WȘ - j{)'SReUn{eZL/ (m)mTU*+2?NV1kTTFMcJ'X6*ǏSSRS5U8x95*5QS}G`zwqخXD;4rKģdV *-/GH+Q"rʲ*e\i!< ˩i^kOx)ێSʩg8si&uI4E "gۮUCjOZӄS)t,7>Y:-8}Cl܇۷,`뾀iqu=dS@KG3YNlh7+Sa^635%kZ:-܈WNmj{ juum]LT{$MV 0{(曁כvSk(<Y-nly S+XA53*7ӅMǚ}ZDs֦O+,U[ȕY̒\kVO0tnJGo=2mno CF-%|#h+Ii'!i4piC`h4j'%ssFQ#Ϧyƣˬ1Y@R'/q Ⱥ4ź҄Xn`I6S<шRbA@hD2Ǟ|K?dǢV)y2b*5yAwh/+^])ziY){:+{Hos \GЫ3v%//XَC8(;oqvWxƻ+.е+z- ehI8U]qtkhơ U]sQvW\skq3>b芡1tb芡+^ Cڀ{߇Χ'K슳 rZqvg5pvCdhk+b" c_;b畳sb犝Ev6孼z ]b0st芣_ʻWʻ+v^oYyW1ZyW1taj]j]g7rVU zVU ]1m g,Dx:nz ֖4~u݋V;uiNZ<}τcsak}3"<}qE[k5̃[[3nmH%fa"͟~qM[r.*K&*jәh*V*O!s Պ+|*Ys4P? r^rr*n03 qst\Us_2;>bf6 /*%׬vWp6nfaCZ!߾ v{0ܶfvv >sa~dҸ6"6i)EP|,/$yz.nXН67[qߦyA~48߁rw gAlD `] hz{lAknS(5-YPh_hYܠ-ͺSe Ary I<,|)WZİ94p~$4Og__'%ɔ-8u5-I:'PIWcE!c!4G$ǭ{'0|]\ƠgXd?i;0|ցlbǼ>$n1 mZfЛ,==lLIw׀}gYoJ(c;j{Nݦq"Upw1$~<-ˈh ws lG~lB\Ť˔*Hm!DL4\s$F>Ҹ-sJ]f+P{@Z\D| #ߐU  f[ iA{h`peB*{WJTU*QU%* a7|~_B>bm;cTǫ&l5z'uaȷ"a=-]̨VIs2Ŗ۴C&}؄ ̏Lfdw޼\olb,͛1qG)/[g8{D}UPm'&pFC>nAs;^V^.^wZȖ>؇<ۍgv~oAkw|V֏{Gk$au-,UhܨEY7[P_TWoF<]DZ)ޜ&C?i%kDepqɒ}拓-W-ViV0FSN{S(dyR[5>)0pRs5͸kjomwair;%Aݘn,:v7yjT焱;2lge ]}GՑH{~”(5 ZўB):߅~ҮM#8Ͳ7\,m[QVvzZ,==\}jXΎKzآwfKM: hcK>MK]:EY7sdO|#1f ˛bْN_F2@']4,sNwr[ѝͲ7nkސ;]wxȎtƠtic]pf=e/ex6c;3>8ltusz CxZ]s^P/Clh6CL>dwL&Ww3ɯ-U{0Ix.M~M,ȉI9'ngxr{Ȱ&h$@yNiwB?@Ax'tȝ9i7KX6l,l`mF6:Dno:o^w:S/G %X_A:T)qo䵏{CP<9r /~!Tq@+D5oN*wUg_uSou_LkXM[]Umd?ziL@ oV Eᄲ2X(TtRYu?޽YNրy?pE2~&Yi=w_a?YߤDF #-^82(;2vð)xmkBSx]N 0ҀWݨ􁭷Z eݤP,bZjApUGb\PPT=V̥o:b\dwg7%x~#0`='{- HW)d⓲BڢҙNefvi]_)K?P]F8ʽqD,$\"2_AzZ}4*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmmkBTxkWn&77fsVDEдRhĨتV[[ bŇM{z//OԿp~PLԺy&$s/ج~.-3eoykޫ_O0'͵%}tod |\MX9ңvد]-Ł?Ho:= ;uodz݄`wLn~_'{LM't_ )qm7aÜ_\7>m78w7ߴ쒖w<&C7r]:?/^y݄cOP~]dnI[_{zO'Y?mQkыݶ8;;MáSxE+ z@vKלscGK3xMH}Rdۘ1uw5uIک,?Z/}=sO~MI]3| fm4 )*s , $oսx/7^q/^x>}Frw:zǒ_z_.e~Ac8sI_OmƸf ^439 =_݄?U~nO]DܟsEMH!oxmkBT xkWn&7fljQmڢ`ڇXo/JXHBhFbć PE(mAQ_~ٍ1{v'3gHc B"ˮ{|_Z ?;zʼnť? )ۍJϔ\BJ 4sYHDhLr'_엽v@ۏH$P8"O?`=tG3?%2-`nB%7;v/ҿR$jM>Jl6/ݡ5nOUl7OHrz1}WPA3k>{m7${|Ѧi;_)3ϻ NU4}unǰ݄? }'ʌ}#ڸQ='~cnBW0}g5c~j_=wߠ|w~Mx. o|wǴJq9tLu[՘8&qs{%7- u|M?M7km?o zT]<]{+{l7kw_Tv?M9ا=T[g~suw?RnM;;M%9G(UFIm9 wn~mj~5}fRoyIm'5꾍ySǺ|WnI_["K{xf iyfo9_̿-ߐ$s>?eSevwDmo 8jwu/ׯhXcޱ(ޗKnܫ)ИEB}n:7c݌ywbN3s{J;yF MO+j 4?ּP?ݤ GyMPO g_LZ?ֳU1!JmkBTxkSgIzz3M4uD/ۜM76EE_'Rq:tl*h**` t2V-II}P7sDzo'xFHD/ޕCq?84.XJqCݨ\z>XL 9ai_A@ D"Dc;:LE؏g=qп ~]"IoKO٪c?!]KdZJAnB%?kHޕIm-וM>Jd쟿C7kp4`Gϳ݄>I~^EK9ӿ玏赞Xe2ϵ݄SdE:tޏz̯/ҿVfwxG;uuͩv4Ry+3v=ޘ9?=&ӷ]3?z-zwg '"} NX23{꾮}Zs;zُn/œۓ~&aAǽ~įnB"{7ߴoγy|M_@[R<]:߻_ϱ݄_uOզr,Mt7yjP{_j[gsuw?rlM;;Mׇ%;[?1:ץ[%&oצ6+=\՜3cGKgڏ\Ԇ]0oۘcXj6/?c+Zs]yzboό]?^9!-:Ϭ-4sҶdOTl}Kĝ3;g&lś}DX{wu/;8Ѱ= Nܱ$ޗKߩ*hLhtS1nƺ:fN0sC1\u?l7?*hP1ͶTeB}?7O*RK_oAP#[e(nmkBTxkSgIzz3Mm^҂sZ76X 2ئy/^P:wMnՁV膎@MQaccoiĤO 9yN?! BTM؈t}{:$N,./Oo}?-9r2%q"q1ɝkoyMܧvWAI%H/?i:#YM~Dfyy&Yrn#FWzGȏޕ۬ZWnQbGcPW}'v^$9>13lnB)2]:Gs}}7_/3ϻVh{A:>;=cn֕o>weC_HjoG\Ye mCzo׌Uk$>?{wߦ|wMx.ʌtkǴJq9xLuО+~vܞ|&Z1o 04k|Ӿy`Pm7 *:O޵~&/>B{k>ϲ݄w?k{Gd ~_kzn^g϶$۴z\\ߐn7t_hDgpͿ|wk<[o!Yu><9=HۂiB"޻B TLoHQ<~zXX4=dz!G%䄥yp-ֿ1q"q1kk:cqп(xJBሤ9@C^PW~$TDύ+%Io>%o }x##WzF/ӿ@|Z ƯImo.90}_ K|>v$iEm_C&\1nB2:uJѿDZީe~7mn_Wuޕ{?sgoJroG|e m^5ce͐&@g1]5k~ ؞&3$S{^6m7au]ֵg%{۵݄_9'6ۨޜw~3m7 滛fo7 J ~nvҰ_y:s:пH嫴mknBCZ^}޹tz_mȯzl=|~үmI`ǿYiK{BR|{N^_v7kIVbGK=x_ֽۘ1u{w5̡Y!W{fzK~<=u>pK\Zy[hN2w~{NS;U:[\h[ͺ\~^kq>eFF ݿ?}"] 2߿\b UAc17c܌u3ݕOy}7΋Jl6sϼ>v$ =ދ$zӿ 豞ذk*݄dEv?KҿHJ||JmTUɂM:=Te޾#9п'ڶQ'|݄/`Czm׌5%!?{{8Qzo݄S`wTf~;]&V =k~ߪNzm7aaMK8^뷜kпM37{_~vzYҥ% sѹ]қHjl7 ]s6iħ^5cXѿu:]滚Kz^ߣc/w憤7Ə?ohKRZuY[hN2gwyϽަ`nne Cݿc|l˥6앎_l{u5.w$-43n{ӹ6ܿ}P߮5+? l7?{)m7^>)'L@g_N5v@i<0v\ȷGmkBTxoQ^Mwv7-q$ !^&K",^ 2 $ Ȑ0ȖxA"D"Hn{S}I}<=<-i!#"n1湋ǣ@i~^k#wa}}-.+{*ӭ7'k?/@._u/_Jt@ӝWU痪]OߓhqhP=i.$_2t,HW|SYEw4 wwutv*}].[KoU]o Du{Zu?u߮5s!L719nRI]8s? K^sw?NE &~@9H/(mkBTHxKQSԶ6_ RYAVuQRQJteEEQ$TXAT(tQAAE/QI7ݳ<ߋl6;g9۔ѿi|"|Z4ș_dW" oJݓn׿iw줿/L5L_qʼn3]t@T Hձ^ksiz#=?1] bz&wX~JC4)Ows 1MPXљuL7a;(3=_dLg =xV 3yݧzd\tgI~0, ?M<Z^I=&,Tl٥y%!&-#>ib]cc>_z5݄Ic{ոW\7`BZ۝YRw}0׷oǿz],|Ӷxnؑ \\gzٍk}LSCa)[!u}_ 3r/l&j=oUDr>soϢ>)*>[}}W}>y]w4 wtTt9HZ%-wG$ju j$X(%-+$jރ:|:`oyoIUJ_}_J3݄%ꞍK[M7%~H0Ҙ;=?zFz 3HN};\7>0(rnoWObm#'{?M_$IJnQģt&?rjk [J; it0݄_G@UXI_{f_'68!nB5WW&=k _qM71=#s~qz=z~OWn5j_+my|M{=._ӟoqL7h^WvjO|tgWk@0ǽ:=&w_nZ;}DtϏڷY|f̯rL7]u6v6%y{5%srz]լ+-/vXv;;,5;Wy>" Nu~{FˆJk{8w՟ӗZ<}I }]W29#RӿDߩk0PKTun]zvqW5߷>-?ugqMMWs6ĕd&LKY3{ϧW|1qr?WmkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jƇS mkBTpx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 6NfmkBT xڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳXB_hřb8J( ;Ѻm[=Ed)D>DpГILn\W!X`}QA_&r`/蚎 XSq/n*x1͆ 'EO&:P~Xqw D{"䇟6o@/>Ht4[SD9ۑBz^Η~W~?.Zl~H ?~Yӄ8Rrڏs6܆A9I]"y?F?J`LckǗ|8뀹zۓn҅G 0Q/0IpO߲5`@#\/ 1OXP + TT1KO0/ωP:Al(c gIC! wAݐhD[QKR6nz4CfnY_%Ť|H%$+ow!RTbp f0_4ev7-̧t^RtްͫÞlñT53e' (C 68vn{|` 0.`o!;GC(ن (_t! W;FxM嶹X*s8=q:]d3O dٸH-<͢(2ņ686]0s { g+`2aR (jA04;+znQe"J#=x3n1+r|b+Dq!B”ĕq$,_D%PjRxp(woHT Ni(\dZ W{.+ěDYGgD)6*qX2P#K.?(L , l' ķ_ȏT9ŕ'EsKlb;S;2h*4P CTgش6Bʰaf:^Er L\Y‡2C גFi3q1H;ߊ\S'c@ǪGDJ|o.\2IڼȜ8t،8=F3oJL 1h76\UE'znnh n`J~+zm "~#=}^G!2XmƳ`*D,$k@x#*Aѿ'<Ђb3EZ>ݸ-]$FDmB*IRHT[@0M2MidfQè2#E`Mn2͒#̍(JΏZppwOP oǍFRf<Nʬ׃13' Dd&i( NN7`vSn[T 09!e!JRJ.cg9yēXY Q7I$UQ!SC);/B?!d1"G)G 9pңH|@9ۜO$;Şı EclNd5RByq$=d=qN qt;g HL esLeO @R$K3HATz33wjjpn>F<ElL&2$D$Me4ˆLJH1 6]/۩CéSqDyK@"ۋ)I%\%q9,TbQ4\$Lׯ.EjD}GT B2"Id'Rl)O n wK'#I M((ȶ0sl̜`*Knj'k2;sQ#3;pL# !aU)F! d_ IxZ -Px.P j7 9f%"ER!JؗGh@r2FUFm_`ɕ-z"3[.ۅ!>bOfDi,ȪɹE1Ϗq3S65JZSotI1 dQڼJK4 gCb>zB&IFX!OJ$~j&<"gZt9턓?#p2NݜFB1_8֧Hh5Bl#xfKdpd$JG|0̟qCy#RG pY:Av _"%%D6zD|$ORK8}&Y >GF7zta28/ix?җ`IjI@پו{d &εGЂn>@w_HG]!>{)L'P$E1,{eۑ*6O?XRLGfp,0VX= 3 yڞyI5T9UYF4-pݲj*SkQe'b9@Ijjj5UQӈ +>ͧԬTEM}Bd?rZMei,譞r$]q{E5%j%Q#=+oEVSU+G'ZI%Y_RMYZYU<+Z4y.Ijjj2}ۋe'eTfz30z3zD>t %Z~S^wl{R~O)#5t4p)Ye]V@*쁹ط(N`]0Kv:p]7/"uϥAwb*ʓI3ÅhLW|MAC%Sz NGAn$Kq,uTnMRUKhFVfFU)ڣzߔAl WbIi5Ն73…WڰHdnϦ,taӾf$ѳYZkO+VE -hҴՔiF.U[R1[fh M677P@Y!ȍF# I](H6,JD+64$ٍS"&+h6ƽvb2b?7fjl !h<̋Ӆ uS&LZH8[J "m2~FT*S)e7qjGlD5AwSf3O|~|_7|9Xr$#L:(sDZ\%xIocv|$ĉJsHnV˥| _*氋l^wV CZgNsyͽ &72ozI6'$!lM*~ !>`uOo9_>w6 =^翄Ф҆ GdWط }P"G+[ ^6>\Ҷ>~諳F$_w5a$ڞqk zh47ۯ3V"zKEF{H^eWDH#U'>  m7C5C ]3t+X+C?Ter#\HZeqE+yU5;s,;m.vsfewhpjYzaVR,< +o-_nog#=nsx JڔNlnSdh[fE$m$'ZP> '6y| QVX vK;gON{Ooi^B1˷Ի 6EٍZScNzFB˚ ZYdrywc{ax/\wF {SNOKL|VL~2)Mlu[iEG?H^95JC Z38 yw|D=OtT`:wQ%iw{ECHD?:pM,w'W 8~x־#~ߙRIwy4&+ 0<9-@U |,Gm wω[4ϝz,+.DxOjў/8>HEjЪJʶJퟑMX4P!&,i=Ѽ-KF^f+{@Rh]3$}AF%^ =P $f[o‚?@GAqsħolWc㭴M1 d0ky.?8k/"RϸF6rqNZ$9)>jyLP+UfB#a^?63/K +pfB2ڃL$[g%D a|~_Ϣ07]+*# [ FOHX;K>3m dbdmZ!>lB݆}-G$M|~2Y@[?e61=1qg).[1\=>*(Nw(C>nA&w&X\ypZȗ>؇'Wg1rO .qmq/Zğ*_ oblyM[?y0MtT͡$|N|1dCHsql t7 ZJv5QU/d_,g =xGknUpiV 78%M֛B!/p-fت/YN\LJ~4<'; #ʆwܜ~ix);~)|OPl~iV'EyO\ڵig.;bi۲2guF@^|{iDu; #8'g6=e^Ys6zӥtG ژ2םNpp 8s.2tt6#^1]ﰍA'IsXNgܡcd7=uvl\/oFK]tvls{p4ά_WԒztA&vaLep4S  U:E=Tʰ4XO,?V2֎_e#ζ#{`G cTh{4`6.hcNs5mbdl3B#7v#j^Hshߦ lxԃހ% o=^'';9|ÂR^2C;@ֺ/xo0]+@NakAS81 5*Eꌏ_*܌}edɑN=vgG}vԁ:feObwR\R4 [Iqࡢ6Gg},F٣DEiHp.i<h^Vy*oaJqWjiAq[y sUf-vuU5=Uዳ\!l89 h|͗{JI Hw[*7M^_V\^_Q5NI L 6q&eJNhr|D#P]j YsbWih(Br*{0hi{ʩ0dg }kʩfSNu-TG#spZ8J /$3Ơz@mɲ,F!)l~V~v so8eyYyY1n>c}HJoؖ`I|lG7 Ds=otlK;6L?dR[*gmkBSx]N0 *֣TĆ WMŹft:ܗrZ9u#]bJj:2,O:paZ佷Q0l"הC2 IYEڡҹڹ}9C̍:T+V;M"šeD0ɚOFЄU[*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwjbRmkBTx1 0DQ%sE@`^ ׸X{z&1?mo4__pv __?ݿn`@__wg@__4__pv __w7i-?G74zUERmkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jL mkBTA8x흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 1fmkBTpxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ,Yh0m͔UJDd5Ͱ6{qm;9;繟>\;gsyắ^nQi0v ={ IcC]{\j)]UK^lH ӂ#9IFaV0/v!VԚIFccͤN+͙軂q~c9%x zЏ%weM9Ej߶੬Z0eh=Gq8Pk4#!m܄%7ӻi/2Aq8)x)1u$joSX)35W 0xJB-x,)=o@c+)Zo:I%ło{=7ts~;;=9w45+2t@>BشrJ'aH5O;) 4!%vBq/DNݗCXFWMj vb]P‚wc+Y>21p`{GyŌA.c䮹g-Y%~^%z4 TV{%3d nzy؟g@(5ORuC_ߺmRbQ}ֽ{#iSK8=l3' ~(JF\wMb0DjCD~:Fu?:1 k-u=ul"u +@(GJzܵU3>LS)PDX9'z4×}8Ӆb O\ aeCu`wk`;#ۋQ7ovےtRS"$迊>ЋGp9FFH-j p C K[I)Vñt+ILjwa۽զPxUp\ KM?_4 3Ea# ŕFxT,|,yXK^W9S}D{J:4eMJOfg.j`gMْ>?ͷ)IENDB`engauge-digitizer-5.2/animation/step1.png000066400000000000000000000702021222557406400205140ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$prVWxX[:5Lr۠}xO|g;l& H VTsqԯm~}nݗmޗ+<^ ˲ZV]֥[."p8p8#h_4$4?74ݗKs %_W bu\[[nЅG 0P/0IpO߲5`F9G=bV."k}}`_ yPѐӁo Nt:4#__65.,,pht ңCIgz:E\G2 Xê|l9-QM_?:KA'?]ONE{Ns,moSIz_?hgԛz? ?{ySő방B/Xo F$%LOe/Q"J!xR|{-4TMAg VngàVUcxG:E O&DJƃϽ_3_G_OhtgmZ鄦vƐrkW'->NSZޓQ?t|_|>UC_;tV']ӔqUg~ nGd9ka.h*QPWHpc}6\ۑUJٽ}c˧_E_>[p8p8p8W"XHmkBF)3mkTSx]WH7ra_8gϞ}>]m L x$CH^rl a&}[13NhInuW-ssBr Rfj:,y߳?;hBxٝ]g8.:Cm†0,0fͅsgr6!r$Wȝ ;`CmLw:}ld \;sn2gQkJ>#ߡA!hVX>2CX},oc+B3IPaKh8! א3O;B +\  ܲVܳbrRrכp6s ܃a<9K!# XLHI,eHVD$`& .LHrAp:4:yكWJȽX@%DFOeLTF6ͥߙ1.۷&iߡo%[ܻ_BXTޱw"T ^`??d HP+fQY@i&CC " e qY}'hf) ő'YEǦ pN}lT_ "R%Q-:h"cgy,*̐Qii$Osʀ-lIO̲rE(#0$xWH\$ﮟ,21]D%PjbP߽!Qu(;pRk:\[QDooemF?b|,V^4- OgYЛco*M }-Dz\zI^**19T7Nq"jk`M^AXͧպYwSn"S;)׫u^wSnzλi,hI8jت;L'>ءkoU6_y,zZYu ϱvEga~NtTiYU,4Y.qj4 k/x.3uj3OqfDQ2*J48'Z$H{R~O)35t6pv)Ye^V@_.6c`ä$%96q[̒ݢG0\Chkiox&Ԇpf+Z2%?h]PPc΄^QRtAdϕ[f8WI#ZUQT(uK!6 +Z1_ ԤִjC niLmXLj$ 2k4aݶf6$,٥P*oʢbTrijJ4%fj)J,QJSxREnb+E( /G@F.b|$ t%"v)FTu+@V;=3F{ !h<Ӆ 8uS䀬!vLZۈ8[J "m2~FD()e7qjGtD5A7]jS|~|[W|9r8pL:(3DZ%xIo#v|{$ıJ3YHnT͋|u_*fԳhNw+g>3yL~Wk^3}p E^65$n/ۓ_B , =' @٧ B/a!4)!HY-GxmJ_õ&& ϜS7| ?1tf7.ōp[ynو}L2MAiXı~/5&%T}̵1hǴmÕmTrJD h9&f9 y@;nh9[JIR]z,' 6Do@y1Q;QDv v)pΉ&ґ&4%)JZn7.h 1<gA],/ZPh0InR5Z*Uc%7Q ;{JR Ӕ }o32WUK.>_҈kAf;٫k)O\w5C ]kz% ghA9]st+h7a ]sYvjvٹf8 f蚡1tf蚡k^ CڄCbj욳Kr\sv5gԫpv5Cd( ]3te:AɝwRKgz]5;G绰f3tf蚡Wλλk^ G[;jv^>;;jvy1og]gz]5Cw5gw5gלZyW3yW3twa܅#&&2]cූg Kalj8 /nvxe_/3i㣙a^+{Cߜ5"񢿃u k[RE'\0foX[/?O4ڪu{.㿢'*EFj.Ӿ<,L L~9K?!s^V r(n43h9>ٹfoc.{`=-nlPy<-|]5 XX/__zyf6ʛpe:0-}2|DރҸ:۴ Tв|}ˬ(x =h]TgַqoG eWp{t]}M|ػzMcؽ\`o(Hkj̳ԉӰQP}VDoV,s!,{10Ieθ.?c;%)?%]Yj<+K&Tqҟ&SS6>[iE{?HA9ՇJC Z28 yO|D= NtD`:uQ%yO{E6CHD?:pM,'W 8vxmL f$KfmTnXwBY*l>co wψ[4ϝz,*.DxOJQ/<8>HEJ-QJʦrퟒNX4S!Qơ(i?,ORI3Ǡci^5#.=`NShU3*pz9,0X@yp,$ooi] sn.9,qkxշe̷KkZ핰G ?BZAV^O=m?gz:b3(qNZ$9.!jyLP+UB#a^?3/K+pdB"ڃL$[G%DxL0G>vaGQІh՘قTy C a|f{e;ZlM>DPX 87_L>[aU &Rw_u`[eі0I]himrkr|qŕ dWw,FBk $&M4U+?vR _-¬ U&͵tT,|N|1dCHsq t/ly{2_ɾYA[+Ҭp*KF7By_^|]a_Xܝ1yZ 41n\77hΥo9-Yr; 'Wlum}3k}h}0v5@F Հl~Ȝu#|?aLQOzJGnwuKqLg.:|a۲2ѧu^mҐQrp~۴<"bMi)1 e;|!;h$pyt${tt!`OƈnwXbCvu>2CX},oO!xBz#hxrGY#,ΨY}Gvnv`{}x38Gg !B GJ%&%.Kz a]DMt~>_h%CT>&xv:~3;P!Ugl`cc$;|K&*ވto4vgjFvNԜj8h }O%b$J`4ʝC;8AoA[wQc C}.+1}dt >Iں1{gppWZӢK:hFqw)MTgttFGo1v(ФC]ag;Ov.u9C>]S-gJќSRIq⩢n7Ggm,F٣DEiH#Iw];NzY*mJ+ŭA5TU] To s @ZTf2oAC"*h $W @nܔs*h4yyYmڶkRC+/s xyEm&2]$ 70-H 34L9AږdXuLGjŶ,PQJD] P9QS-^>NIڔS,^We =])J]O7YI -&A0άD꜓} f!FLxf`p6b=5z]λwoYL$J`&ۣ^p}:2ɤmr&=~+mkBSx]N0 o I>:"ZB+H'5|w>Lzk5CNNzP.*uP$ՙup!>CЁGtӪXCؙ;ֳٍ͙ c_RYL* }*j6ʸWjy5FWd%UKR$H9N\[z9<\*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbimkBTƸxA @ ѹ{2J i-ƥϐ52]de7_cMoo= h믿 4__qq诿믿뿸w ___߻@믿믿/?n@_O)@b 7=Go_7$?\bT!mkBTg x흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j",+ mkBT@x흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 fmkBTxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳR"tCܵ:hڋEQNJ{nJsL}} } ,jJfdtZfmL %;ЋuNs߅ȘmDS=jf$N6ھ=2A{(}[ټ˟SP}eb3(]'g$.u 8BAҭddJB' =!%G閗p~(ckogv$O2@)Pְ+3}lly?F2 B`-] u͞:nh"U ɾ@(Ǣ=(+x3MC1 #q]>DU'q.Yڲ]bas`)aĹײU8RȦFL|i]k1m+W^^reAPiG( Xaw8](7Jţbc)*Z^*6șUς٨RοOɄA1廦|zdqQ7)&IGͫS&Ѹ‘+zK{b)C'gk:KIENDB`engauge-digitizer-5.2/animation/step2.png000066400000000000000000000701601222557406400205200ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$prVWxX[65Lnb#6hw;l& H |2'U}J9?'s}7ER0d?x.nޯ|̇`0_t[ P(*&?.Sklhs=a5a0#_3J\frvA_؏Ls!*rt:mɘ.Kf1CSBdaC)o\F(: -Y!?ZYOjZNδX } ѣ,kG1t j?p@a^,`GD]7}\"Ɏ2ڟ Rv=;!d91υdzh?t6H3e/1?PZQRo99X,2)Q gGSS>_ F$%LOyQ"J!cfZhzN=b:m V6߳aPTE+ j<4p'r _/Q7Gb:Vx05k|+ix/IֆQZv·>4}934vEjiiZp]cN}^-KQ,UhyKl{}ϡ|2Al(c gIC&,2wAܐhD[QKR6nzr8p8p8oZd[}HmkBF)3rmkTSx]sFKHd+þjkk' >%Ť|H%$+ow!RTbp f0_4ev7-̧t^RtްͫÞlñT53e' (C 68vn{|` 0.`o!;GC(ن (_t! W;FxM嶹X*s8=q:]d3O dٸH-<͢(2ņ686]0s { g+`2aR (jA04;+znQe"J#=x3n1+r|b+Dq!B”ĕq$,_D%PjRxp(woHT Ni(\dZ W{.+ěDYGgD)6*qX2P#K.?(L , l' ķ_ȏT9ŕ'EsKlb;S;2h*4P CTgش6Bʰaf:^Er L\Y‡2C גFi3q1H;ߊ\S'c@ǪGDJ|o.\2IڼȜ8t،8=F3oJL 1h76\UE'znnh n`J~+zm "~#=}^G!2XmƳ`*D,$k@x#*Aѿ'<Ђb3EZ>ݸ-]$FDmB*IRHT[@0M2MidfQè2#E`Mn2͒#̍(JΏZppwOP oǍFRf<Nʬ׃13' Dd&i( NN7`vSn[T 09!e!JRJ.cg9yēXY Q7I$UQ!SC);/B?!d1"G)G 9pңH|@9ۜO$;Şı EclNd5RByq$=d=qN qt;g HL esLeO @R$K3HATz33wjjpn>F<ElL&2$D$Me4ˆLJH1 6]/۩CéSqDyK@"ۋ)I%\%q9,TbQ4\$Lׯ.EjD}GT B2"Id'Rl)O n wK'#I M((ȶ0sl̜`*Knj'k2;sQ#3;pL# !aU)F! d_ IxZ -Px.P j7 9f%"ER!JؗGh@r2FUFm_`ɕ-z"3[.ۅ!>bOfDi,ȪɹE1Ϗq3S65JZSotI1 dQڼJK4 gCb>zB&IFX!OJ$~j&<"gZt9턓?#p2NݜFB1_8֧Hh5Bl#xfKdpd$JG|0̟qCy#RG pY:Av _"%%D6zD|$ORK8}&Y >GF7zta28/ix?җ`IjI@پו{d &εGЂn>@w_HG]!>{)L'P$E1,{eۑ*6O?XRLGfp,0VX= 3 yڞyI5T9UYF4-pݲj*SkQe'b9@Ijjj5UQӈ +>ͧԬTEM}Bd?rZMei,譞r$]q{E5%j%Q#=+oEVSU+G'ZI%Y_RMYZYU<+Z4y.Ijjj2}ۋe'eTfz30z3zD>t %Z~S^wl{R~O)#5t4p)Ye]V@*쁹ط(N`]0Kv:p]7/"uϥAwb*ʓI3ÅhLW|MAC%Sz NGAn$Kq,uTnMRUKhFVfFU)ڣzߔAl WbIi5Ն73…WڰHdnϦ,taӾf$ѳYZkO+VE -hҴՔiF.U[R1[fh M677P@Y!ȍF# I](H6,JD+64$ٍS"&+h6ƽvb2b?7fjl !h<̋Ӆ uS&LZH8[J "m2~FT*S)e7qjGlD5AwSf3O|~|_7|9Xr$#L:(sDZ\%xIocv|$ĉJsHnV˥| _*氋l^wV CZgNsyͽ &72ozI6'$!lM*~ !>`uOo9_>w6 =^翄Ф҆ GdWط }P"G+[ ^6>\Ҷ>~諳F$_w5a$ڞqk zh47ۯ3V"zKEF{H^eWDH#U'>  m7C5C ]3t+X+C?Ter#\HZeqE+yU5;s,;m.vsfewhpjYzaVR,< +o-_nog#=nsx JڔNlnSdh[fE$m$'ZP> '6y| QVX vK;gON{Ooi^B1˷Ի 6EٍZScNzFB˚ ZYdrywc{ax/\wF {SNOKL|VL~2)Mlu[iEG?H^95JC Z38 yw|D=OtT`:wQ%iw{ECHD?:pM,w'W 8~x־#~ߙRIwy4&+ 0<9-@U |,Gm wω[4ϝz,+.DxOjў/8>HEjЪJʶJퟑMX4P!&,i=Ѽ-KF^f+{@Rh]3$}AF%^ =P $f[o‚?@GAqsħolWc㭴M1 d0ky.?8k/"RϸF6rqNZ$9)>jyLP+UfB#a^?63/K +pfB2ڃL$[g%D a|~_Ϣ07]+*# [ FOHX;K>3m dbdmZ!>lB݆}-G$M|~2Y@[?e61=1qg).[1\=>*(Nw(C>nA&w&X\ypZȗ>؇'Wg1rO .qmq/Zğ*_ oblyM[?y0MtT͡$|N|1dCHsql t7 ZJv5QU/d_,g =xGknUpiV 78%M֛B!/p-fت/YN\LJ~4<'; #ʆwܜ~ix);~)|OPl~iV'EyO\ڵig.;bi۲2guF@^|{iDu; #8'g6=e^Ys6zӥtG ژ2םNpp 8s.2tt6#^1]ﰍA'IsXNgܡcd7=uvl\/oFK]tvls{p4ͬ9Zr^n!Ȥ8.lTYi,QfT\uC[\"CGPz%'؊_,xv2:a: p mlcҦemLiW>&:~_,5ܚmFhCf516`D͙<' f`hc91|Oy=P]/=mlFl`aim4֜ z# A }`tG`_=wX~QL:92=vǎώ:pQ쒲P]jK6a+i?ҲҀe.X5z0{/~|8>Ҏ6bZymkBSx]N0 *pjت MjlmA^fgfg3 fѣFN 7h>Uia}A۔ A|pRodgd/ez2ؐH]RNHA*7؞ .9n#NXWnpBhEkGBpZu@*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbqmkBTPx10 @܅T a**X o|+rzi*VuFMOloj3믿믿k3믿믿k3믿믿k3믿믿k3믿믿k3믿?o4ÙW7I]`oOp&Gg_]~Vo&|w4hBmkBTcx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j9{ mkBTcxx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 YfmkBTc@xڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳW>x㷣Qrk! 2M"{w} }Ze>(ׄj,Qh_~kϻ()-$a33f8~_Dtm.SyJ˳Og2)әle[G& vms&d*j&U5n\vl{jQEP&fQAI_h;/<} < 7 6zԟ'AhMSuCIk%'݇Ħ\ޥmN.yhǙbk2QR!4k|x ^LsPT&M*tI>A6p*@s{-BI B(N83-N&|ԐOb@u?u8nrjTPdOL%20.c;1]02Eđ8H FPR'.lӫqϭó` yh_RP۶uȤ1ͯ㬞{Bw/Y={~P?`(gv'D8]hnċVC*WU㼵{`ZA xi3ӖBqC蟧CɤPC-!QS=x*ê&R>]sM0n֔a4膰omӒ]t~k5jD(7uUGYn9IENDB`engauge-digitizer-5.2/animation/step3.png000066400000000000000000000702041222557406400205200ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$cprVWxXm@Ea7ˈ2NuL.ALLπƬURկPwMnǯ{z[r[.~Ypު뵺ܪ _3jc`0 `0 `xnwwt=_Z+뻝ϖ힯 ][ؿ#o"5Һw#x ~B<=]gˉK{G֋w\ښ.>tBּ z<>?]/-`F4n@OHG;Np{/[x&ɖ>|y5| %;/' 0IP">٣A:UwH~7E؟O6d?'CCo n/#6 /m?ZRc,6>{ ;@ ztmyW.>$a;da ƞ:~gFqH~\#{R=܀H1yAWIo‹v:`j>:KK%0;6aAoRmnDۧ#KLIpP+^w:nR[%] @!GI~s5|2jeomiS{hQ4r*"AYP" Pmi?&`>4GSLu^Z牮)\֔b5gV 4gK̹-u.W$آT.]OݯG;fEyv<~ &56#4;kcHc+ݎ8Hkpho֫O(x~?7=$$ |Yopz{(e(0'`0 `0 `0 18|v {MHmkBF)3mkTSx]WH7ra_8gϞ}>]m L x$CH^rl a&}[13NhInuW-ssBr Rfj:,y߳?;hBxٝ]g8.:Cm†0,0fͅsgr6!r$Wȝ ;`CmLw:}ld \;sn2gQkJ>#ߡA!hVX>2CX},oc+B3IPaKh8! א3O;B +\  ܲVܳbrRrכp6s ܃a<9K!# XLHI,eHVD$`& .LHrAp:4:yكWJȽX@%DFOeLTF6ͥߙ1.۷&iߡo%[ܻ_BXTޱw"T ^`??d HP+fQY@i&CC " e qY}'hf) ő'YEǦ pN}lT_ "R%Q-:h"cgy,*̐Qii$Osʀ-lIO̲rE(#0$xWH\$ﮟ,21]D%PjbP߽!Qu(;pRk:\[QDooemF?b|,V^4- OgYЛco*M }-Dz\zI^**19T7Nq"jk`M^AXͧպYwSn"S;)׫u^wSnzλi,hI8jت;L'>ءkoU6_y,zZYu ϱvEga~NtTiYU,4Y.qj4 k/x.3uj3OqfDQ2*J48'Z$H{R~O)35t6pv)Ye^V@_.6c`ä$%96q[̒ݢG0\Chkiox&Ԇpf+Z2%?h]PPc΄^QRtAdϕ[f8WI#ZUQT(uK!6 +Z1_ ԤִjC niLmXLj$ 2k4aݶf6$,٥P*oʢbTrijJ4%fj)J,QJSxREnb+E( /G@F.b|$ t%"v)FTu+@V;=3F{ !h<Ӆ 8uS䀬!vLZۈ8[J "m2~FD()e7qjGtD5A7]jS|~|[W|9r8pL:(3DZ%xIo#v|{$ıJ3YHnT͋|u_*fԳhNw+g>3yL~Wk^3}p E^65$n/ۓ_B , =' @٧ B/a!4)!HY-GxmJ_õ&& ϜS7| ?1tf7.ōp[ynو}L2MAiXı~/5&%T}̵1hǴmÕmTrJD h9&f9 y@;nh9[JIR]z,' 6Do@y1Q;QDv v)pΉ&ґ&4%)JZn7.h 1<gA],/ZPh0InR5Z*Uc%7Q ;{JR Ӕ }o32WUK.>_҈kAf;٫k)O\w5C ]kz% ghA9]st+h7a ]sYvjvٹf8 f蚡1tf蚡k^ CڄCbj욳Kr\sv5gԫpv5Cd( ]3te:AɝwRKgz]5;G绰f3tf蚡Wλλk^ G[;jv^>;;jvy1og]gz]5Cw5gw5gלZyW3yW3twa܅#&&2]cූg Kalj8 /nvxe_/3i㣙a^+{Cߜ5"񢿃u k[RE'\0foX[/?O4ڪu{.㿢'*EFj.Ӿ<,L L~9K?!s^V r(n43h9>ٹfoc.{`=-nlPy<-|]5 XX/__zyf6ʛpe:0-}2|DރҸ:۴ Tв|}ˬ(x =h]TgַqoG eWp{t]}M|ػzMcؽ\`o(Hkj̳ԉӰQP}VDoV,s!,{10Ieθ.?c;%)?%]Yj<+K&Tqҟ&SS6>[iE{?HA9ՇJC Z28 yO|D= NtD`:uQ%yO{E6CHD?:pM,'W 8vxmL f$KfmTnXwBY*l>co wψ[4ϝz,*.DxOJQ/<8>HEJ-QJʦrퟒNX4S!Qơ(i?,ORI3Ǡci^5#.=`NShU3*pz9,0X@yp,$ooi] sn.9,qkxշe̷KkZ핰G ?BZAV^O=m?gz:b3(qNZ$9.!jyLP+UB#a^?3/K+pdB"ڃL$[G%DxL0G>vaGQІh՘قTy C a|f{e;ZlM>DPX 87_L>[aU &Rw_u`[eі0I]himrkr|qŕ dWw,FBk $&M4U+?vR _-¬ U&͵tT,|N|1dCHsq t/ly{2_ɾYA[+Ҭp*KF7By_^|]a_Xܝ1yZ 41n\77hΥo9-Yr; 'Wlum}3k}h}0v5@F Հl~Ȝu#|?aLQOzJGnwuKqLg.:|a۲2ѧu^mҐQrp~۴<"bMi)1 e;|!;h$pyt${tt!`OƈnwXbCvu>2CX},oO!xBz#hxrGY#,ΨY}Gvnv`{}x38Gg !B GJ%&%.Kz a]DMt~>_h%CT>&xv:~3;P!Ugl`cc$;|K&*ވto4vgjFvNԜj8h }O%b$J`4ʝC;8AoA[wQc C}.+1}dt >Iں1{gppWZӢK:hFqw)MTgttFGo1v(ФC]ag;Ov.u9C>]S-gJќSRIq⩢n7Ggm,F٣DEiH#Iw];NzY*mJ+ŭA5TU] To s @ZTf2oAC"*h $W @nܔs*h4yyYmڶkRC+/s xyEm&2]$ 70-H 34L9AږdXuLGjŶ,PQJD] P9QS-^>NIڔS,^We =])J]O7YI -&AZ8Qt92>amJng 'kcz_1++1++f[؃]weyiYi@K"~Df=znu '#Lڑ&g[~S:mkBSx]N0G)jxDV&\5ib6"lFŬԂ0ȩ*mHGY iecL ]|p,E~wvS8'ً, U}L.$RRP-Sfj圎~=mZWL~8qX>pN˼k\O*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbtmkBT 8x10 @܅)`Ib7[z?*֚쵔 _E[-_?uj_Di @믿믿Ooݿ __?诿믿??w~4__r hpMB \W2:貴?K`v7'k*RmkBTɠx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jW mkBTx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 ޺fmkBTypxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ  &*!Db$j!>L Q*Dbb16MWݙCimKw[JwN'af=/gι3s?)˫.Ez4L)z/3(Tq-]eEGqU 3BL}J!ET$7،ZQfaW!ϾGvS&RhM'@FBk6:wlH&U̢bG8k&A&ڎoU))^o6 _PPR[huNOm6{&tB{ i׿ny(̈́Aa`Q}{ r6 Ad: B`-]af_y>]|#lym..sqsq'<G؎ \EAp8p8x [Ć6CvÅ:?,cnwWu>T}Iop6%a&/ y4``¯8[N6pj dZ-kaLxğRKh:p64l6 4qm񪅿 )-Tx-f|apz*7(G ?wG D]Pk- ?|9F 5/,gO@af">CD! '?غ"CBX_Q\&,qGiF0K%'+QT'P+6ڏdL@Z!vC9/z|Pz̓ sW>]ų%lu~ 5/v:&ho~2^n葍^7#ğK q@?S!}/Ozb@ `lKvܧxxSb1L$,wʝ䅊-63aT{fmn0D?CDz'~=N@`پd3᯶7~DRqfp8p8p88.HmkBF)3~mkTSx][sƒq$ߓ}Q>EW|URLJ Aɲ_\$HX\˒WxY3!RTbp`랯{juڋd~?\,eSOunR߲͛5T5{5e (nA ~v¯vs|` 0.`o!(ن (_t! WۣlRMcT`'[ 6pzb.]dاMO'[i> t{t<EF9d'b٨٭1+ɀ6M쥝K *M8{ǿ9l'5H9!x!h p+bk&qU&< $ Gn1&zxXj1lĻb2lĂ4DG·qЁ:?We<µxjA!4pxF~fmE(1cc!"7U$mgN:lF#Oȷ_&@Ʉcc.I7]p' wN6pkNXs%b6g/D>/\63"xD6 \?pяbazhAyM"f CN\K.#K&s!h$RG 0 2M ifQè2%E`Nn2͔C̉(JΎZpgD'0}2˅c(uaLM #26Yq(''N.N7`:vRN[T 9!e!JRJcg9~ēX^rQ7I(UQS);7BCqLj!g74|IC>xn3r<{ǂt4fsg3 gs"CB#o!vW3P9FZ5Π(Eb(3d*k)Y"'}yq$'c\Ez\2s1R],xG*'SANL #Ϸf@?7Vjy>;Q8;4B{,^霖F́gn5(ؗ{I)a2r3>LGpY W1s(tZ>$_ЂGɌk =%bY5>(F{1sfJӺOA zΞ.)F>t;]WjfCc^pHG#:_?iC¨"k]d)UD=_/GLN8;'`g#.\Ɖӈ0fa i&WH݁olP^A E f50SVGC~ oDe`#K.{kPV"\靔Oqb ǵ$cdtQ.XMVz—cꋿ8\_l+b2t{Iڥ??hAa a;/N6kX&ҏ+"2H%p,i J}! q/)0RX= 2&H!=wwqkʩrR*ݱiZ /K:e)eTV*+2NVo1sԤUj*!},O ˩^zQw8|95镚WSﭞq]qyE9%6*%Qc=vX+wϖSY)GgZIy%YWRNYJYe<Z4x.qrjWj*3zܐ}ۍe)eTfz50:3zD<t %\~Q^wl;^G)#5p4ﻰ(Ye]/pՈ쁹۷(Ne]0Mv:p]7Bu%Aub*ʓI3 pTW|MAC%Sz NAKq,uTnLRUJpZZzJU)ܣzߔAl Wbqi՚;3Ԃ[Z3Tdnͦ,taӾK ,٣P+kʢb7riڨK$#檥j F^MQJ2hRGb(,@Z.b<$k5t"V F4M@^;?)35rv6͋4.]fŏ:Qݎ @uM }-m(L v4U?I#xM0k(5x#x6O,z^O)3xgdXS//payw z~&Or9MS-E7;C?Dk$Pl $'ҼZ/^syYE.=9t@Lqӂ߷i3>DCviwk`[H25%>|$Pw@p txBJkQ_a߄3f%:CHo Ju˓Q _ MWn|CRgGf7DSP&E7<>)O{`ׇ{}Lv?e lÒ{WBrlAo)11ql[K bj,̼c?AG}۬@mzEGD-XO'9'jjӌy.n\AYG->Y^ב"h0n-Z*b5ܚQ ](@Vz=%΅YB>=ۜ}'KWplp!{u剏qw|K]8;b芡 2R1tC -GW]Պ+8z-8FBCAW\+vy9QZ1tV1tC m@!i rVqv9[8슳U8b芡 2tk+b" c;b畳sb犝][yW1ZyW1taoq]ѫj]Gw;w;WǷb3tb芡ʻʻ+^oTz ]b0t{C{h}e [CP3u݇vץ=G#;w o=&TC<6i|S0kmy"7gkP`kza[8H=ThGno3O_gg% jӑhJZE/O=>zwX -W ]1tU` Saя9Gs CYC'Dojn^.ŭf@7GU;W-sxet˶yəʗߑuVQXb YXKwHno ~YBv<,Gt5(cS:EOAZoehA24j[1.G[a'=h.(Gu>f[P;>?٤{ e}w^Gl.nP*[=Jd7hMD:q -k16hf]SeAsyibs``a1M;=].2Yi2y˔|$סn1n?uLsb @f7e}?P-5/Jv~L̋fAI[yLnfB{p8yDUV;.lvx }^QQMMت>5zoEz9[Ql|e {[&oѪak'?"i߻uq%(T3~Hq'&0r9VAQvB3=q{X\tcqi![zjǿ_Ly?Dĵɟڽh1|E.U5mMت¨7oTaY7;Ɛ ʫ##YDZ)ޜ&^@?/h%+qDeQɒ})=W-ViG3 #P7io ,'^µb¾¾g9:ѿ[yZ 41n\7hΥPl1nv(-'W t3sF}h:yA;5v@F 9ӀtCW?SvdR.0,SUiO5N5kӈ=0@%9]ҲY1=v$+S}fڭ-^p?7ٹIOp="fGR[mRvsXvk0NOѥb)f6>lM7hLZl31\,55n1k}l X{lsМB {|ں]2A tE{o;;G̜VԒ=.{Imب:DY6ԩ*k '}ꆶEqԭDQ2,#Sď^,=et"t1C*9쳍Afm:19\ {h6}pk#pL`ecl7G3x7qa[M0JdmOsb?hKfG9P_ǣilp.6Hl#6046hMka-XR pZZϞ2꣡E)>YL}Ϛ2꣙E{ƔQ,kKȜ ѼbԜ}rd|-xӖނ9ο&4b.[b.[Lwّ{rc=e۷l˧"~F&w{^/4'x#\ڑѤv'/xmkBSx]N 0҂m6}Q[o*]U! I2;3;˘*Tj{PHn:C t!y&w.0 ` *jg! +F{ifS 'U%mJK,WڻR/}DrݫVg}Q2++d%>72:gN[*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBT;xܱ Pru]N-L ʻ|b)3s-wt~)Ǔ޻f^]xS ~-{e{ μ6MmkBTxܱ 0@Q|.N FX;8]Zk쵔?o|G;@'ow`/E&믿So@,@__; __?,@__; __>{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|ray8mkBThx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j}:; mkBTgxx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 afmkBTxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳXB_hřb8J( ;Ѻm[=Ed)D>DpГILn\W!X`}QA_&r`/蚎 XSq/n*x1͆ 'EO&:P~Xqw D{"䇟6oa&o"9Ҽow{L QB<<ϖ*^-b->?<6pshi2N?ylp)r.Txo 3G_.=#醁+.q".Ȗ|}9者uų' 0IpyYqqa1AS lY7! O7q p<Q,d?á7j-FW^w W ŸwHШ9?[^ϝJou=b-y*v>$a;wD ??7;QRn3Nuzdsa[IsrvcߣPB 'qgz`Eu)1Fz1L$,oH{V[<̈ߓScWzQ<"H/_T -Ip*[:e' 4<6E5=a7wXt)[cC\w:8ݴ[$[X5aEwbJbJ"AZN 3!.LuOc@i-z|!9 Rfj83yߵz Us;h@x]hΠ߿[in†0,0f%ͅ gJ6J$W( ΰ{4&[r˜/ᴻ 6pzQGvNЦspDt搝4ESw#V8bLv췰N!A$%- { 7P2}H{B 5#\W5  ܲVܳbrRM|98nᄻ3ho}~̶{gnYq$$ɲ d $EG"L0YnHr;A~itóɔPz*Jb%+*"꫘CA_4. |o\nMn%[D/!TJnT{"?"@k _@s.\t,aiuKj1h"8x+g#`2`J (jA04;+znQ1d"MK#=xSa1fKr|b+Dq!1ǫB”ĕ&q$,_D%PjRxp(woHT C(P4\X("\@6"xƬX,-M (nǨ'9yhsM6:$HK/VkXխӘ#L|1;YQm~   M MaC!Dب f`> ё%h\t )ĕ%|,3t Op-zhP13 ai[K6=$|XXu>Bߛ E l6+2'N6#NtأǁۯDdBbh1ڍ|Uщ޸b-{A4صrF ^A@Ϙ@iL.,  <"JPG 0=4"Ì&zV"ťO7%cy%Qc |TɑjcHy.L0aq@٠YFa0HXcqH:u5;'(CoǍCC~fhc$LyL {=3l|HM$<)Ӧ-?)TƳ&0"4LNHYd:o$@~N2$w1kTdBͣd{Ir|IPKbo21"GG- pңHļG9O$;Şı E3< ؜ȐSByq$=d#qNqt;g HL esLe @R$K3HATz33wj:|%|x8\r)ؘLe8IHÈK'ڈ~ݡT bJhz[KgB!PBp\O)Y{䧏]g۽=ȥӑd[V9U 6f?0%`5̓5wbxFes_zQCp&W$H3kB˻"8.ɇ} .p|[!(DH*D M7HN .?EOdbc\٥|Y%TM瞃>ŞoG׫f@?/VOܨswN!XX=tAK#@zHYƤ0zߎL #8KIńLZhfZ:`ri#dFI4Βى[ w93%iCcfOW#|A%ͫD3!KpfN9$/a2ɟ4ޢgiTh@52jD闭F#bzE'ܝv83 x.i$dc}B4V+$f?ˏgDA&AFJz) G?7"u2pF8wk5)+^[BdN'B8c1z;dta.YMV^pz—cK8Z_lkb2txIƣ??hAa a/vOk|wX&?'P$E1,;2Hp_/XRBG6ō'XRMaJ2 {6d,"j{)'TSVeUnzcӴ^z;uˎ3ʪLUVFeӋb0)竩ITEM 'X6*SWSSVS5qjj2j5Q gztqՔجXFO{*c{ ௽q=[MAV2 {i%QtDga~I5eMkeU\oi!,)竩iV k? BM/ gUSspfDd5hqNyIJ{]9tш~٥TdmvY }>LJbߚ8}5_,-xUd]=߉(iOm(653a^K5L%[Z:YObX '~7¥Nh]=j#QTuz_Al WbIi6T] aiB+-y&鉂ĚU.Ђ$z6KkmviE#X\4$ȥjZ%JiFoX}_QlrzhQ>ut%"v)F+h6ƽvb2b?7fj W!h<̋Ӆ uv;)YM&Xw0!q7&EVe6Q&R85#x:O"FQO.3xgdXS/,qaywG zA&Or9uS-E;C?XkP $7ZÎ/^sEYFw׽[+g>3yLg^3}p ̻E_ovޚDهI!, \' @g B/a!4T$, =<7Q7\JDhte%(#'t _Fa$|Ew7A ]-Kq+k= ]"p5[l~ &^Eh,tpI xNs#|L>+7d1-p;aܯ0pczsAYW [z-_{H-FBk=tds;%4ѦP_ |`G݂D[xF-\pIvI?MIG῍ VxL#(OEG1>b&6ۤ[ &Ymev_kW^ZlW3:Ja?wOI aR q6#Gqwkg?r F5 21\^]wy`ܭE` h{|f ]3t+a8C r5Gh蚣k^ G9!PG5;egf皝kv^ic8p ]3t9kf0OMh=$v=?^Nkή9$g5gל]sJg ]3tIrm5C ]l\y'tvW\s}{;{+j^>C+jz5 -9z]9pfsf皝WvV |W ]3j^yWs*8^yWsv٫w5C/w5C }U8bn"chm]l=~k *|ОζՎ#઴jd+v|[τjǂצFq>W{ODlM f5{[KnmAOF94uJDohtX"h֫#Q)2RHtϧaCs_嚡k_|*L39UH[K_yf?aZh,YY15kP v|NiN#\ϐ5E%mlrdbC-/_(&QB>*\_ 櫴^Ma=pj+Z4vݛ ]rbIF8 NC=}eMYU(Y~nG=pAFf:< ;ȬwJ {[N/KLT%_LwJ).p|GG?HApgZT@f2q*"w{B#~ _r8= Kߋ42;m#*X1OpV8=y=!~L f$K<mTnXwBy&*|>6gMN}##X wC"<' 5Shϗ^DV"hUle3GҶ8CN&TU,)ԌĐhcPΉfj'S4SGd#PT.Z "I_tgȪ3GIٟە0{nq;c?'k;;NM5,羏^j\Vh=0r}Y謽aK=R,RG–ϡ]ky\躬zJb|mWʫL=a^?3/K+pfB2ڣL$[g%DxLo<>ϳݷӶx} ^QolUZdg0[vΗ!|f\+$%ʞV۴D$}؄ ZɏHzdws\o lb,{bμS\K7c_CUm$:pQ؅~}ݜMny=[N,.z贐/}N~5x߯b&t@m Zʟ*_ӊK=H?p] &laܛ4֪騬CyWcMʫ7b#]DZ.ӥ^&^A?/im+DUeQɓ})=WnMepiV pKF۬u!ׯp-fتYN\LJ~E K7 Ius)7;m|CbetA=A]ntaԸM'cȈק|0<-Cgʎ̹_7A97ƔE?_~*IStw~ĥ}x^}!Cyq&Uo* cR+o+mom[Iz.͐d.vCbPy<|]5 X(gavݢ-+cj9Q{z@v+w%Ȍ8'Wp͂Cp-Ȱ{4YNu89_(3iw i@`Nܡ|!f6>lM7ӣ.fH'Is0_4u=jk}df5}`>$|sx;8/ ۑ">6l:fԒs:[@&9Fթ&"uhNTYk:>I?%: 韫n#t$FaiY"~e:p?XFG !B!p0:d B[>ۘiuئKp]o &;kH,$C؍any.Ҳm D@ 5t@'x#\ڑ٢"pmkBSx] 0s5|4֣MkQOW,n"YƖmGPRIŒ 8VvnGr!#lzI} xoC: I]E֣n}_C}"< 5iXRcTcRH]a3E<adN[L*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBTx1 x<0@DuJR@+Ynz- LЛ3?]e6HlzMmkBTx 0 PgpGpgp=qEDT;z |mCǛv 7øP&5~\-_px{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|raymkBT-x흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j9Hf mkBT-Xx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 !fdfmkBT*xڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳqՖ-L S ]prD;Eݴ =0!;Nu5J,JvhʛS9E7^~*OgV3$=(Bέw`T͙Lv:}몵IcD;=H~/yXjrDȡA`C_ )N)E4{Qܣl٭894XjAW`fQǡ!D"M>BJm4z 8? )tiZ7يfE lz_]J$M"|ׇ5&^s#yHK:-MJN*GoB o{Ig`\3EE@k cSQ_Żo`-SBGXQYYh{[^vE!oŽ=ی*Qޫu֚:5#YOֈE;/ "m~-#}zQx;Z?rE5eSK83]lCgNJȑ0bK3ڷ0{\D 0Q| ]pb  ݀m]!'vb( +*Uצ&CZEq?88*GE{:ԅEFMfU+=4%t1%$J*UC䯳 ' ʸ-1hrop'tG!=H/rqN\D΄1]CiUXѬ`:}F&7'+/U "|9e0U.rjr]3Lq8])&DќkAˊqQ%?PZZ ӅOL)${4 ofVJ!#JƯhehR+oj O~=!N 9L86gӥdm&00F@wmyB朲(Z5Ea z_:%IENDB`engauge-digitizer-5.2/animation/step6.png000066400000000000000000000723541222557406400205330ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$VprVWxX[@v&cDvLr/A}6+ןTS( ܆*/ϗ|Oߧqa˱wQ/\. Oc16sQp8p8p|fmY-bKqD ./˘-UBjU^bIXdwKB) 00GW qww-'MJ84^-lc-sa&?wu<]Li?)m:90iջ!vƳ>P=e_:F[: T2(G ?wG D_Pk--?|c06j7^X,Ξ'uE1}LB LO,uE\y$k-/MXҌ`K/NV۽:OzVPqms3@?Ə.~7piDn؟Ҡ9*6aۇ$sGx5,5{۪f'*x51[}z.ƞ:~g+#4яI5@Ghx|OP)&/_??h/# y-{.(BާVm^Ѧ}`Hv[t戝p㵆pZڬ6;K/O87+N`[tVqQXvaݸU\rw@+\$yb7BҚ: ŵrD\M U y!kEVifȨc2ŐeQyαi9\g&Gg\G$}FCDJ3"cD#̀aBhʐєIe$Oc€tIOȷ_ɏ,Gs+lZ-EE O@)csSadPF+6:ÆA*8ƈC M5t~9Z)e<µtj\@!4p<0E3."A6]Q4*9V9V"PzUbL̉|@͈#|$);q9(h# ɑ1h71R\Ue'z|E m`I9n~J@E@Gzִ:#dr܌gTHfዎE~Z.y,ƶfhHh-_}-]FD;̅U&JH 1!0zܸ S ؿI!|4jUM9j,rxwb'2X#{8 '~8jR8^$08R!c7rJtC8k le4kS#6L䄔()i( 7y;Ϥs'˱XcA+Elε A R.!+Ӣ\f3rs1 8쑤Xz>m!&ў CZS~|XI'tBbp0@8@o#OyL(6ާmA8П-{xylrAbgprY2#^3#Zy$˥.T+T|8̅&R~F iejT 9RrY4DCgQDF1Sm$gl_ ;<:~-vh8|c=2Re*Tq#铈q/jD.qT6r4ELf,+1;2!vV6+6ǒsEkH !BeU'%//(G: 8˜&7M*f}x/6/v^'N^VVUM?|JPuMsrZOvlJPv0JQE^`2ʧb4 &afFGj M+dwSY5фu=fJӆOE zϞ>Q|5KvwyJ]3tj!1;vrP&D{柕QL%>2zs> SF z$N'V4wy.i<(k;5^0㙭0,k9j(G3_aȿяHcdu{y7Kڔ/@t #~$O2K8]&Y .KFtd'c} d,(: 7Prڧ??EH`Dnw5@}f^벗dBE(oawoGY Q?/QJ W؀4pb jUQs 〴8~Ss_9iלf1UjUVQ?0ME8wC)\QvSZeUTx=֒<(Οd_LMFEԧp 8q~155j5-.!2Οd_LMV*jzմ_{LTVϸbҮ8)b1%6k%VQc=ʸ3W8]LAN* {i!b|gaAbʚZsLӄ Οd_LMZM̰?dcpINb*s#=zTK9=OO ێQ#GZH ieG.r!~ j3z`0i}kX M6dw1 Wuu2pZq. cY䟸P-lk¼ j,whЛq~iŰpQ#ZA،56r*UuF 0zE/֛fC70X-RQ*ԝIRº}.-HgfV4B1ʚ[ȕq\nd9:eɆxJu&7@Y!Ȧif!iɖIdAW*Xf!ni4_ICx_!4S1;.h^D(~.2vZ;L[ncaBnjMcclIjFdT5Aw]f7|~/b_4|5\('L9(sDZ\%H #)fM κ@Y5?׊v<|I.2|zX9%h)cZ@<oo;]llWrI${ٚTS|i|$R@:%ͥYR_a߁3&k@LloJȋu#QJ_ M#Wn|CRHڿa"W? ]/_!:;4ql/ G=\y>iOk{|UkLjmN%j= ]؀\PbbZЕDZuW~-%V`0Z}NoMIԗCMrcXE>P hiO"f1vWk8*=ix1?l򺏠NiFMwi/kmʫLkGir4B{s)Iu!M2j7`$ަ(W`;r>vW]w+ĹDy[ok"Ck5C ]3Jz3ВZst9Z9蚣W"1fl\s+q gҚkf5C 3 mCb욳+rZsv5g4qv5CWd8 ]3tU:ɕwJKgz]5;9绰f3tf蚡Wʻʻk^ G[+jv^>;+jvy9og]gz]5Cw5gw5gלڨYyW3^yW3twa\#&d&2ƻU#෦gYKa|[(J{B#[EhwZ1 _5>9&\ʶ'p?ٚlͪlkwž* si댵޲c,D^;W+FJl֑2ӀOÄsf6C5C ]3t+X)C? Tr޷ .B[~Zh,YY35kPaeqKs>k21.*fڲܒ56Vc=a,bO#-/_e(%QB>:\VW὚,z2VO x/V{vh~?v6Wl7w]%'L8 5-4cvQQ\C9|;14Ό̢uywH0䝞/l;OVy%S]6:Go?!{IϬ* xt̓(E*e$F>9A:"c)q zֿg)hy*wڌ G>kU. c\7 ysz[{Ds-3<, ʟOhLg<wkȾc7U%=%nw[jqI3^o秽63sa%\2|襶Dx.F{),濾}cgeZ9}6f?R7} 5.Z罨Be}߇/4/V*v~D2S"yqT҇Fx~Hf&T?3a\B݅}#G&M|~2]@;>8^o\b,b"f). \>>'PUE[}hɻ__hf7g[~ϖ~,=8-Kÿ_ _-ȲΰHM\1ES+ZQv=[]kaބ1LzZ5u}?j <Фz#1:u-4yIkXɖ&jQ"W?K2A|[浟` gԿ[(z b拭 :]nu|ZŽEs)f\5pIs.bS͎q$~'}Cm8bOPצ 85)C X<Q6Oe]Lّ6H9{ˆ(~f+OW=~C?Ii'a,EWo59ޣ75#Rt=$Ma^i%~=m%VVⷕ{`2 Ib򧚇:,\_,?|ma3ڽueM#U[k}ހ![qexP؇|1 βYrtskhcZ\Zײw";+٧MG'[h> vx0-#vMk [tvZ&=9C oxں3Aly ~ wapth:8SJ~ OKj=λ aĐUp4Ǻj4v mq#mEdيY2, ׳"#GOAYspet!t0#1*tc6;mpe+!j[٦F=o6^3.;bs-<Ԝã}nΨ7=F+۞4-NԝCpp8f5qs!=:o uOmcvzEG4kuGz;gP/hIpK'Or69 =$]l w{0Hn]gygy@W:A{GfAAcEƌ[cpyaDWD oWӉʼ}w'~z5l\sTo ֚4S}?$.\1ֽ) 7vetohuQMʲ{t~bjCfx6lc;CM6b}3hu h-ܩMy j^y:oa+y[iZ,hA-ۖnYUЀw7. J >ZZ~Ȟ ꣡%)>YJ ꣙%TP,oKDUN}c&ίa8 ^fDCA̒ʈ]Ca!r$n :={5gl\0L5:6:B^|8~7:ɥ;Y?UW1mkBSx]N 0bmZЍJ+ЫB@w evfvQmp݉#AX4 KqR#(ŀz?)jpXF={9HC IPa]OeWmSӅ>s2ҿ212CRů)Z嬸*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBT8x100 TV ԿB%CT`L} I.mkBT8x @@5hO1z9|<ۊc.dj;tJ Bt.K7vkK:< 6+~ mkBTx1 x<0@DuJR@+Ynz- LЛ3?]e6HldoNmkBT8xױ Pvqww9h|#T/DD Xm겞F߃._uN_޹?NrɟZ02 v7`@mkBT(xұ HRGzWws֕lnh$l8ޘmkBT\xxܱ 0@Q|.N FX;8]Zk쵔?o|G;@'ow`/E&믿So@,@__; __?,@__; __>{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|rayeimkBTx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jSt mkBTx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 `fmkBT@xڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳBE ="X 5ys*S"xF<#z͐8**݁B7g2%K4UkrD;}uis"Sc8k1 Q?@f&友`^=)a`~ C{6㢔NpR}7B/eF'K3`\ӵ(o a\i֒[Q"_v`mF$]"?iR{ݹo{3ѿD0pojpb}pN#Xp?kV2{:R}#5OL+nD ~1{PCuH K6w (X+W޼ bveIyexw1ev]1}B'f+-b1\wܼte4ޝ nED0-\mc.J,b[[1-5kJ\y5F>8kqЊhsd%z"}oo!yD ^I_7(/m @U WWYB]rv ?CPODFmº*} _Džɵ cߥG>Mm\A@0q]T߈`*Y>rOvBGEUTQ\^A#Obz1Ms7j4 hb\Xݍ`4es!#Q&l:D~f̷^թ9j,hwba&L>~)gJ!dr`9C >Ogx.dR ſic eV/fi'9Ǒh|T @ @ @ %!?w"wvϟ.tpw<[=uRzHutxΉfޱ 4qg7 p>[}){:uH,r9[.ҩlEzgk/l<{k4`{z y꽪}9yN'C9|ڍ`mKZϨ#fw$e<>k#yfחm6vAyx8gs׿hJAPPFȓR7l7#OwnHD Һ+=lX͙oB;,kH[+@ @ @ c ՛rF)&.HmkBF)3mkTSx][Sɒ=g<m<1a_ا]G]0Q ~qH-03^E̪ qƍlR]Օ_f}]-޴agl)a5~^ۼ 셪9^4y<.`ӏ3F7 aC^3…x%Pr %+΅? g=`Cjep}d8=v]dܣMO'oh9 x8zm: isN;+G&km[KHTZp ؎(>$=! BC@+WLnYrLYHqHnbqLn)Ynua7pYɷ>?fb=Vcpe,8A dYA "#&  pA$ @?p4:yكdJ}(\@%DFOUL!/pnK7c.]`W&iCVnV*]_{j7*Aes[ 5ֆ_@s.\t,aiuKj1h"8x+g#`2`J (jA04;+znQ1d"MK#=xSa1fKr|b+Dq!1ǫB”ĕ&q$,_D%PjRxp(woHT C(P4\X("\@6"xƬX,-M (nǨ'9yhsM6:$HK/VkXխӘ#L|1;YQm~   M MaC!Dب f`> ё%h\t )ĕ%|,3t Op-zhP13 ai[K6=$|XXu>Bߛ E l6+2'N6#NtأǁۯDdBbh1ڍ|Uщ޸b-{A4صrF ^A@Ϙ@iL.,  <"JPG 0=4"Ì&zV"ťO7%cy%Qc |TɑjcHy.L0aq@٠YFa0HXcqH:u5;'(CoǍCC~fhc$LyL {=3l|HM$<)Ӧ-?)TƳ&0"4LNHYd:o$@~N2$w1kTdBͣd{Ir|IPKbo21"GG- pңHļG9O$;Şı E3< ؜ȐSByq$=d#qNqt;g HL esLe @R$K3HATz33wj:|%|x8\r)ؘLe8IHÈK'ڈ~ݡT bJhz[KgB!PBp\O)Y{䧏]g۽=ȥӑd[V9U 6f?0%`5̓5wbxFes_zQCp&W$H3kB˻"8.ɇ} .p|[!(DH*D M7HN .?EOdbc\٥|Y%TM瞃>ŞoG׫f@?/VOܨswN!XX=tAK#@zHYƤ0zߎL #8KIńLZhfZ:`ri#dFI4Βى[ w93%iCcfOW#|A%ͫD3!KpfN9$/a2ɟ4ޢgiTh@52jD闭F#bzE'ܝv83 x.i$dc}B4V+$f?ˏgDA&AFJz) G?7"u2pF8wk5)+^[BdN'B8c1z;dta.YMV^pz—cK8Z_lkb2txIƣ??hAa a/vOk|wX&ҏ("axvME >9ԾQ 9zq TSR+^r  y^zI5T9UYF4-pݲ㌲j*SkQeb9@qjjj5UQӀ +>ͧԨTEM=Bd?rZMei,^p$]q{E5%6k%QS6=koEVSU+6GgZI%Y_RMYZYU<[Z4y.qjjj2}ӋeeTfz30szD>t %Z~S^wlR^W)#5t4pv)Ye]V@_!-8=쁹ط(N`m0Kv:pU7Y#uϥAwb"qSÅhL|uAC%z NGA֓8Ɇ_*7Ǎp=ZWϪȨ*E{Uݿ^eojRo U"@djXZJuKIz 3{:qU 5; Z]Zƨ,*VoA#&͆4I3riڪbxfR=*4Fue(@e9"뺞!b|$u]Hbņ$qJр Qw݆"иNOFƌQܣuA*GycpNjUdaI_u GpSi]`UOhe"`]S?3$aD2g|K?qwt@d)/G#z}_7*+Z4+?#)fM κ@rj^.ϯ;hU1]ed{wzݻN/rF0:SǴ}ukO0nyvv&d!ekRKKsW} 2PY}gþuKX * > ¾gpMK 8׀>]ـ/0"A; \ޥ~-6bNC"uZ4qlztj<>^2]mRJz^ȱ,W+h-=c떯ZR{W#d`浞 :fhX />`G#n|-<.8$?P;RӤן$ER@#+q<'{"x#hؘu@o1qm-,62^+S-6ZsëѰJٻ$Յ0M߀GGz;^]/V|E#?d< 0VsKgw4Z=> ]3tIVjf0f蚣KrZst5Gǐ^h#蚝˲Vs5;41~8JkC5C ]3J'&~֟P/5gל]嚳kή9{Quk$CGf蚡k. Mjv^:;+jv9ξ=߇w5C/w5C W|W]sj8ZyWٹ^yWsΫq|;+j^>C+jz5 ]9{]9FʻʻkCw*1 716އzX5>ShX [g}jǑxpUs5B;>^~^˾^gB5ckG#8+V'"}sGE[3JA%F?p{Üx:c%X4: ~,hWDUu$LS0܃p9r5C ] V/|>*-Bm3֟[L-_ 4`,G5(keqMs>k4.gڢܒ66VcaT硖֗x`(neUڃxIx&sn CC-WPMBMDv#XiѾвfnV=J9(9=&Y9õ2k1ƝӋ.,{g*.Sdʾ\#S 3-JC Z38 yw|D= OtND`/wQ%Ew{E6CHD?pM,' 8~z֞mL f$K<mTnXwBy&*|>6gMN}##X wC"<' 5Shϗ^DV"hUle3GҶ8CN&TU,)ԌĐhcPΉfj'S4SGd#PT.Z "I_tgȪ3GIٟە0{nq;c?'k;;NM5,羏^j\Vh=0r}Y謽aK=R,RG–ϡ]ky\躬zJb|mWʫL=a^?3/K+pfB2ڣL$[g%DxLo<>ϳݷӶx} ^QQ-تz1=a(>a5/C̸V6IK=i H u4sd: { Xĝy?ėrop9,#F;Iu B39=zX\bqi!_`jj׿_Ly?DĵA?Ue{ 5mMø7iUQYׇ{ƐMʫ7b#]DZ.ӥ^&^A?/im+DUeQɓ})=WnMepiV pKF۬u!ׯp-fتYN\LJ~E K7 Ius)ov&,h5{6LĩqyN^s-e;O?4ax<[ϔsnso,)k6b4@+UړNѩF!aRx&{ffS ]DW翩7Kďg\f뷕ŷc.m%7C=B{py8nw5 ,Wca0 hFwv?_ض8U5MvzHV&r7GC\Y(AFf?yE4lkAݣBtڭ9mBN?_N:8=v]d 6{id m:GtQ6C:yN;QΎX#䀵6 pF @&|aߎwpv~fө5贷ݢw2)A6N5QGSuZIA.AWH?Б(2#TzFd ◱vz/ u~@CC`t@8B}1iM6&4+XaQnMvx64>n~31lwlQ?>ct٦ovqsxF&Zވ,po4qiFc G9=V7]nPFb1mQ9AoXs =o{EL8$-N,W<ݡ!3n!(lc2@wqEf|I k|ږĶdٜ6'-9ozECfGzG#txW)MTgtt1::͠CY&;aG=vcGm d쐲>1}-LOќS [6qPQu1X4KJ1t(ywjvZ p*o_-LU nKMCT9-(n 2oaʬ涡T aހ,55Ui@S=ER5 iIXvSU农Ӏ{eUgm$]˫/s x}Em$ր:$ n7d0M f04A&d-k[5{LcշCRs[e͵mQP ʩAr꣥)>Z~득%)>YoL9{S̭r~"s~b37Mr~3{󃟓} j@ X$l k ƌ5 W$JF{eyiYa{ƶK"~Fׄ]nM ,'x#\ڑ٢ mkBSx]N 0Ҁګ}nT[oU! IR,aV#jAZtQbBNPܧ8}0)MਟV X^l"dJ!,"Pa{ʦ23U;/T#Ɯ:(8O/İt|7<Z8ux*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBTx۱ @ [)qq(|_ mҪZTMp[ye=Z란{msE:};N%hv=<}}v]ȟs=.5w|WYz)۽\55CpmkBT[xұ HRGzWws֕lnh$l8o3/mkBTxܱ 0@Q|.N FX;8]Zk쵔?o|G;@'ow`/E&믿So@,@__; __?,@__; __>{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|raydcmkBT(x흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j mkBTx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 _fmkBTxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳC(f %=V]P?G7èiDF:BUqڏh.8^ދ2q,2>F[)knG]U̼vW2nA+)}%W7/G 1rC-(0UTˉv}_eT xS WD\f `iL b=,iQuuD\fu_ADj|GYwI`^ƾFU ǎ6>3'm(8S!^H,,v԰_QU!ZO,&R ꬲN'% *ov=6״/VG2a.ӏwŅ(GŊh-D,!RBH<6W׹\˥Z/\}Y͸\U @ @ _" ɿyf~?޾b ?NPR KO($x|D/,LyN֛'\:I=/R}$G^/Ӑ>ݾ,C>>O )B;^o[O>h/Aordp$|<d7*[.;2#h~,/O`Q "`sLaa&WwX_{}ZUo " h3x_ltߪzpl<[ACǍS~"wn~s-`zr% z_dq_mƶuV?$LN)Y~H-Cg"xKɸab.tAWտ'[_wn mƺ3UT8I*a+6ĸug K?J.-^Lz2BmmїlOٿmD_Ço[/`Nץ'XuPPwJe$u_oz`/tgԿq>/;+ pkHq'F0L3\4 9$ uĴsrt {W՜V'qҨ:>IHu<+=,n!MuٛF7h/?:?AYi(XΗkB{Yr_[j_&7 [zF+YmH-7O=˯?9"ř$^)g P;ߠ?y3v;Y3> y[Kg?UBH›W/ ZO+2C@ @ @ 1~1|HmkBF)3mkTSx][sƒƞǑ|}Q>Ew(J)!(Y kYJ/ }{fpRL`_|PoZwN{:Sәh4;3yvgf3;;k@x ŭ]h^۽z5IkHrROH7.(YK(Q_t* W\x:LX^l`^ޡ{iud my;:N:}vo:k^k nrc-WJ *mH[p (?$=!PJBC-]W5  m ܪ֙ܓÈrrJmtf;nXͷ.?fr=VCte$8RAK8Ar,F#& )pA0@?pZ4:yكdJ](\@DsFOUB>/pn\H%7c.\`[t[nWV@{j7."?"o X \$yb7BҚ: ŵ#* +g-d2`JQ z047/znQT+#?xc0& r|rP*CbWEą) bzq$vXD%!PjRxp(wH;P:pkJs6X_QFooSemyVH.XZP$JP3_s П 'tH|_K^QTcp[3!G@!f-1YQmq Jsf*-%sbqbSq{:>&Tdh|V4ј İQ(deT'be9Mu2a)6ytҡ F6Z}Q2 "y6MMAl~%?2O| )sYfh .F03rcB4:O};>M-MaC!D f`> Qˡ'h:TCaʑ>V:\n=4_ (hFV$ȦC_6G(={麌]UM1&e~|fّN>{8|ujLH1F1*; .@]_l#N_͉u;GW,z8(г&y!fhU5*sRΐr5EFQrqԂ;}|wDs/3};ȁGm\ XØdG*dl&QNI}n)|Mg-R" 'M`ajĆi%% %F:o'4@~N2$w9kbG0鑔f_!d9mcDL [R>G᱈yr {{A2qvC -̘9U6f?4)%oj'k0;;e1S<#9J=(eb!8+$95.%G"Ka_(&7,) Ѣ+v|!L?+B*YыT|M4R3-:!vNZO;v<\㹌H0a iWH݁`WlPYLQE Hf=2SV+D=~$oDeh#Km:.kSV%\靔Oqf ǵ$auv:6]2x/ix?֗pqf|}]+#ɘm%݆#}.^Hԇ۬};cRLP"cXveQlBN7L)+KOd>iª(%WXq@ZgkK\3**r{"л(;)Oez** ^l <(gOMFyԣp 8q~>55j5ͣ!2gOMV*jzմ[LTV/bҮ8.b>%6k%VQS=ʸkΧ VP=ϴ(> J⳰d>ekeBIs3ϧIyfXQ1_8l>= g"6Q'PNm[ Ai#-rG{."k̷˹1O N1{`)#57y̓ݡ0\MV!hŹ,7Ndu8̒Bq o*_rdD/8fz4 bX8 J-ՍtdyU9Ux b-d @OMJlh-LjZ~LdG8taվf$ѳYZkK+VUe͉-lʨPFYFLtW72NY2dJGbE(@d4dKYi+Ipd7Έ4_ICx_!4S1{*h^E(~.2dY7Yu`b„Ԛ`Y#XW5GH)#4? kXe=ѣoaOž(ij0AaN2腙b&1[[ 6Yme+3-6^sͯѰJٻ$Յ4Ψ߀GCz;^]V|E#΅?d< 1Fs+gw4Z=> ]3tEjf0z%蚣+r^st5G/EO/4tU٨ٹf皝x?5C ]͚kz) ghĮ'q5gWl욳k^jT욡kqf蚡0t+ʻkvs`aoo]Ћgz]5C/ŕw5G/w5GVxvW\rsʻʻk^C+j^g+jή9{Qf3tf蚡m GLMd oMIڳva,\F6"h'Njw &c<6k|4r0LmO<~蛳53/+ؚU0Rmm/=U< k1eǢYcDZu$Z2WDH#E  ݇;LImVkf:WT~4Wo/}]m둷D2J)X> gj<נ4,v|^eN5c\T̐5e%kl,rtGZZ]QK|t~~+2,K{9Yduc6_ mؽ?vo6Wl7w]%'L8 51ZhfY٣trciE0Z `11m;]_.2M2wLA2e)KuOo?!IϬ* xt̓(U*e,F>9A:"#)q zֿ)he*wZ G>kU. c\7 ysz[{B߹JEw'y4&3I5`adyr雀X@w7i;D`9] 8|O=_qr<:ZUUI_

L-kNf-@3hY34}UAF#^ L| e[oWҔ@w{iwx90Ymbam>|B}&ʋoꣳ2G-KatlL) [ݛ>t^Ns n;R^e,)bXͼ8*c~-Cl-^آԄlq3E٤9F)~c6ɇ?-PEGk4NԕfL&NMt056@F :Ӏ|BW?Svd RN0,JiOoSC');읥c&{ffS]W7+Og\$2JJ1WL]ƛ!\,~CbPy<xN]5 X*gaz[Yk;c:HFZ=נG=C\Y, c#3<_E4lkALZ[Sә6V{:St6pzLg lhlv:tE!;i-:;`lvo78m͘OB6N3Kv`Ȱ p4 %fIaؐUhthz]ׅKLP7,?n+r$V̊ai92~­e: p?\FG !B>78d Bz]i6m؀lc]DM~>Јw;kal7GnxԵqfkh{Fӄisz@}F&nNd PqFa9mQdxAߢBazM ,uf83~z;t)/9&$v f[~;$wӣ;, _414ڈ +2f"jA7xMѾɚy%&UYњiTֺלyU3qmXy)9e! +4n$+yn8]h*Mw N GgmwPM'{6;ÎvQuQ kڷIYvIYP,޻h2 F66- ygx&X Gβtiywj&l 5}0ނ՚-h0UBs-˰ 5b…3Ui^Ѐ{`PR&k@1xnͦ 뫺e(QT_Hun4ݐ4a4^Mb1Vɇ+MT aZDCB&UPm-كAGKKSA}4d9';KXSA}4d Tm:q~iON_8?k0NOX,aQ<"RxDS 7|3w,RX<$Cyl.c]ë́yѶFn~wotdK;(ySCmkBSx]N0 *aV `o6I\fggg3-f1AND Um0؆TAytqRfA aZwOpOd c/vgdcJp!,"mQbs>e&vj\_in(8ʽU\tkAD}S[ )*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBT(xԡ !DAK@cA%2b3)"E.tY]>N&Bf'mkBTxӡ @E j@ [5 r}UU^ot_?O@k㲦{H܀_S4l5mkBT0x۱ ! @v{a z*0Wޑ;j>v7?m t;Wy&dog&{yF4,mkBT9xڱ 0.0rB +^Hy犔(t/e0Wy= ]^73칐? s~uOx-|A1$7x1mkBTxxұ HRGzWws֕lnh$l8wmkBT_Pxܱ 0@Q|.N FX;8]Zk쵔?o|G;@'ow`/E&믿So@,@__; __?,@__; __>{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|raymkBTjHx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$jٮ mkBTx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 ) fmkBTSxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ6bFDOwDXlhk&2EML?s Wkɣ(0fCJA4)Y2NML=1ΆgI⛥8>OujaS|L=}R#CEgjRb_@"{nֲaZRC z_ZÔ(ニ zq^S%<{{IłwO;1S?:H HvCՃ;u 5Pƿ$ ynZTkJQ4EGޱgq:S ѡ&cqM):zqrT?ҏ麯__Ϣ㖥S Ǝf'{Y)#G̨Qq<]T^eEJUzM.]$\ ~v ]%mgU䵫 o$wi{kI]դwHx'bxvǹ%kOKV\l: Gpl_WD}B-9&&?]'/9!Jx_/!8!l5X cu6L lA~eA)W4"`aߟer?4R)Ӎ'wQqW ;Sg>E DPbaxs tF͞quͭ8Vw?a|`9W}T``v▩pM|tmfXL(i.]}HxvQr"]$~:΀]T7a֖|;}orΚr<}/-QV%U: Ry}bBJEF<9 &.Fc)h Iw0Tb?5I1+ r3ȭkIENDB`engauge-digitizer-5.2/animation/step9.png000066400000000000000000000727161222557406400205400ustar00rootroot00000000000000PNG  IHDRE-*sBIT|d pHYs  ZtEXtCreation Time02/27/03\* tEXtSoftwareMacromedia Fireworks MX*$8prVWxXq@r Hvh&d%S:0`&˟7~Q8!jfږFSZ,rt?w~zD|#Pw(7~sr vn}xDƕdͰkx_^z[a_b)SS'_I+5}$l@x ̆1I!]Gft: jIťkfϯ?76 Wu]通d9W`mW2$?)CD[nFM"O 0OŅj༗֊G_fr eUtG~n|Ew")JI!(Y7X\˒WxY3"Ef07=_ ݼop6Wtdkie%oZܬgnv5(c 58u:wF;!^ISf҅{p؅MȹErgҟpDžoʝCyǞ͵6ZF O.݆K7mʳ)itb %C^nݠvCvum X>C>`+B#IPiKځp+]@:n g(@)kASQk 2U˭3!!"r2䮷wiv9 `96O{~b=VCty4S9A 4il1450) <410M ڣuԠ1}~MԁUT@qIѢ"ڇMr颀f̥ ,1P{ nV)ջݨ6 ^` Ÿsd HkL\3, B!!V2@ Yl`$5EsdQG)Eؼ4A.!پ|+*]CD 3"]CfC`,ER22)DM֘0]ᓳ쀺 Ow3+$.LIH\ew'Lq֘.wC(5ux1w(ސXt(!wDC2Sru`s%&Zt2fX4$diiZ@p#F}<Co7yBcqu(jݭӐ#M|Qp,K(6?| XGX4ya8Bf3INq81)> )O 4쓖6 %,X,|=>N (f#L:Hbuf HGuCMۯdG9 N6 -<ټFNdp'ThFgǜŰ3lȅ`#a !:j1t@r \eN!)%k W !f#)v iS'@3%ǪEDrh*]ѫ2)ƴȜ8wt،8FbsmN  ɡ1h76\UE'zlE Qgw8W3|].ԁ  ri trςIրDGTE?JXЌ|ۋ 3\4Ћ '/>_K. #KfBP+p%R7=:G\^`B c6L/64AC2#D02TXxᯑA_WPށz}n}~o}$LyM {=3l|HM\%)Ӧ-9?)bE(Rl>L0 R$$PC?S&.bYus/FB}"1=3>-~qz{KCj')s=wNKZ:oј-'\Q@db"Kő,6Pi;KQL=41g7 HprL @RğXėf!f`515sn>E,E &6$DCgaD%1uDNM N McQE# J kfՇ}ᵉ}qp"h#cy`,m(I_kh)8&;{ӌI)a"LGpy 1s(pI.h#2%*H GɜDVM-~|윩f0SR^x+A [-E3 Y[pfN $f;0yOho4* ĞE=JU"PZ1iqpz߱>eFB1_8'Hz Gx̶UVȈ@A`CZqCq#@ гt۝ݼ}6EEJz[IDp\L6m&P{o->ˣɊXKv#m ,2^1pE sߘ/KaR{'aU~{=|g^ RDc 0O=ʂU,.K:|ÌBj_Hh9zq ,aZae:%> 3iq!m/I=u2]= Ӣ{t@Wg-ezee̷Cz ~r}n2nZzNc9|(\_jU7-MmBd!ÿ~r}nn*M/x7V> 1IwޱX'֫N,ӉOy'6h[q 8^]U ϱvEga~Nt,Y\oi#4f)iM̰zRoz>_08#o.sB-z)TI-sZ+BQ9N lЙ:Cg wB^fB է g`}Ķey&oY Wu:pZq- m#Y8άGKf¼ jKu: .±N\>suѲfVZFQ%ڢh5] P^ъj'^M%24o&gZ^9V(ԙƓxW 5!fihRycTqmA%WF2JSre;p:4%WD[Th>K)6R~rD6M3 IK(H&sĂ5' IOTGu+@V;==rzͫ4]:YS䀬!vlY8Z"m*~Fi#%ef<'d %z_<3߲?,)_ fƸo:C Ny9 cmw ^Ѧ[鈿!uyhLlxzy4?oKU vzmb`:}8itXz [wg[]zC:+9$lO*!.'pw/ev7/_\Q))%Upڄ~D݂k5ȑcН5V S7| ?$9tfη.ŭt(tl%xej)CcǦ_PO&-T9̍1hߐimCHw6*_ka~-"L_[ZcRJ{W#`楞J }p=?%w4Q'P^|4ɉ`O]DkxF5\pIjtM?MHG忍 ZxH#(OFGP1>b&6k4lҼTx-^kw^jlW2:Ja?wOI iR qmJ'+p-lp!{u?YqK]78;b芡K2V1tC7 -GW]+8z%-b}z+v.F;WGp(br mV ]1t+a8CP=$v??VN*ή8$ggW]qJgW ]1tIrmCW ]tyTtvvU\s}};{;*^>CW;*z5 -8z]8pbsb犝WvvU |vU ]1jyWq*8yWqv٫wC/wCW }n]8bn"chml=~K:|&P#zOVxτzǂZq>{n9]3#񢿂Yu k[REa,_~t_4: ~,hUD]'LS0C 3ꃿ6CCW ]1t+X)CTdrPo/}]mD2J)h> cj4B,v|niN5#\ϐ=E%mlFsdYDjZ_^C|tq-,2K{5QD}6_ ؽ7vob:7:;K*7 3-4g/Ԭ B=7%ȇ#[s{8 R=psKd6b;!-?%]iΒ/U\'ɔ |G{?HA3ͫJC Z28 yO|D= NtNHb/uQ%EO{E6CHD?pC,' 8vzڞmwfGR]{IIzt6~n XwDY:l>co wO4V,F.DxJQ/=8>ǑڋZVҕI_<9!WeHzćDbN4իiDfOA>L5kFf#>rѪfIU7 2irX`걀X I0xf4voܽO;M{g,qkaxX2|LXֺ.F{-,ƿsOGEk9|+m"%(lykJ\нcz ]}܏мX%[p*LzaI#=PȄ"IVQ**QE%G%iSlv@>clzvF7zTCb1:^ A+ 'M󒯃E"?B݁c##SO|v2Y@;o]a/y1cK|)ׁ8h$yׁ f6l9ڣ|mw}&;k?S|M;.Wkaք1[Z{:*Pz/*oCH8օWKr=Q2_ɾYA[+7&24xo8%m־ȐDW#_lWW8,wr} C;.n-KMI7QMsi7;ǴN6!t1K`2}A䚭o&taԸO^b]c dD\ xϖ!g̸]A?7E{6AHoSCO\ڇw;KWMhzCޏ_5So諗ډϸz[ID諷ŷc.m%7CX>|U=y8Zf<׻+Unv{;yٙGQmvj#k2v=7E=CY, c#3<^C4l{A\v;3J\Znu0nۅ@nޥl@OICo(i vtMKt]{yt]6{Hǒp9 @&ln>O;x gd<ഽݼ4ۄDW!25ltըI-&t7;XЙ,[<+rV6c?/x9N<:a:H pĦdɒ%64;[X`Qz6;=bIx}o63t;=Y>ƤŒZӱmi`p#~iJcJi{ڦv~wJbr"=ws¾a9@a.%;4!u["po:gI3`7{(q Ƿd4$s݉'H9xKIHf fkkNIwn~zv5=T\ڠ+^BA٠BcFS~2G ~WL^%Wt^կ%?VՏXʪ_MVխIugZSEub) WvjqinS9W )D[{yLy2SL5=7 "m !ܥccST&fetglY5੽Iewzӂl^Gf6mi=SM6fuDEɚf*#IwMꝝw;Uׯ&k%ydנT^TWY mK,ʩ@+B TnzN*o)CR(*뺮Ԝ Lނ/&+olkF^yKkz-i ip!CW^F~*'U0_ ܮǥpkSo4ko)ߒ؃ܽ~nyҲfBzR>o%Z6hZo~^ l8|l2iGN |mkBSx]N0ZUÆiU&fn ftX+9ANB 6UcPlڠ)K@[TBN9 cNr:w!71-bl{a.⟈mL_Z[1Ҋ*mkBTx}+$+nʔiSL")HdJ,DbH$T3;;W֊z]@&-Y>\yنytc u/$р_ ݈vvvͅUJ@4ZaE6HxV:F6Q>KSy.&{<}Ad:KN?2 n37,OMEN#HF`?- j!j {r+%Aqh $S@%%|9`ƅ}6.?jU 7KBC_{-׮8`Se[ lhF-*,?nt WTe\ÚMOsf^|ŝ}Em ;GFn^Kb[dAݜҥy_g:=h5=#*|3z¡F#$̣[^Y EO)ـ~Iȑ8  Ľ&C}24 L >bXXFkhFWI. -h-yU`F m<}hRvTf}|dT@OP\I' 0%U-b2֓yxd^ƣcAēwP)Xͣ KZQX!+}~CX@- >9Fwx+$@>,#Xٵ1vQ5%tᑄJ#5̖3S=R e[OjRgfM߉ZpE9%辴tc⏥R1. p8Ywh;w@^tug.XHT^?2!+tU#_:{*!nygn:@ Zgpwp٧P栢=ԇ|Utl7~䙔@0 +h%\'̊!Lu`tp/߹÷0!:lH- gA ^Z1KO_<*•G}|;n'e}*#(4hB9Th玡NŶ@%fĠpo9,vrdԬ,qcD-7= 7V >v`f1B+?`ؕ?ջ+yKV"o6TpŚUk}"bɍ7!H*3(Tu|jGyŪEe18-BYYdf[L>='4"}\x乢2EOcvxV|MڡBs%ȧԜ?U$g{075պ[=h`Iu7ޡ1t(f\%}R@uPA(@0Mz>n /:{7l6u]~m'3u/OOX-?Jk3pMNVnuS>q$t>NSgِ,yfzkf6{4!ڵ Y̳X?%ţG|j}~H)'FCy6)$.[xgߍJ<MC+QgPX 7~PT֜~5=4WaH]0/qJ!Ѧ?q?+kpB7ޠ">G}W=\&fH0e kƲ]N0Gg45*O xFD ~Pv_u9%|?vǾal*.p,S?5jPt~ۢ4$FMm3\9\fVdٿIuKk+s]h?:iĺ-^pYljkeA ֣;$3~:LH Ip#W,%ebbad{O`eE}9!mB ,ƈyAUkb]Nø ˌD_ˁj5j%u^׸ `O g9cE @=BHMlk@$ ءۖ#iBOOA\zXCR%ˆ6 _loNVL?7\iB#~_l5zq#wRf|{jSKlcԁt*=LfLQJ_Ke[LE(EU0"R4hbR |;i@fT,}X?GBP7A#Hk2dwըU¢ {3eKxŨ!tϼѝ;ZهMK+2S:¾m:ʋT,شt|H>(;:HfT+_oG=3fLál,0K@I rHmD-Kɵ""7@8bRz=Dmc CF_ŀT-DM2_=Wl@F䴦"%b||+h Un+z`Dv~_ClO$>Y Bcyg |rp]o:8khۘM埁/W^ֆE^ls wfY~(cUSM6:-=j0y-AgЀNN2g$>+y| GA]cپ6m n5v{y4y:l<5y7/CBqP!L||R۝I׷Iw|X\Zꑽܳuu}1c%(Hh!!&>{Ny! BC~{ Uz-b i>hTN./hY}_sPp͠ '.D1bԿoK'mCn0H]_ _&kdx3{G!~KdlfPej9dm5Zq[nJ;#:u|CC-y Oo!N獼7;tYW[kcd [@P {q7wΎd'>{*QVؿMAN: Zl]ѓ䯹c[}: pz$1 U(rtH):=)_]2{xlu:0'Y0v~p %Nj #o^'X՜T¯-d'dT{voƧ߇&9ގlOz|lxq!leP>ޓ 4lBޞ}yơ$9Eg/>_Y\j*SCş9Pdo/g_J7wG`fע4>*04yWĉ &oD93mϻL}5Čގv$OEA0h61s_ qhL`Iw^%M2g 0=f_v fM7R;IEJQ04Ys N[4HWR99s_;o@O7 @s21FQyhm`:o_ π7:zAE^,έx!{>!7r#{77;"{&/0WßﳠA[yυmk}ݲC,NZ M9@`CtD"<p& ^K_J}GR}/ +-khO.ЙZ"W 83;&_ EKًH|!GCVyhKj-үP~Z̚lpyN7;aACNh }p*}FZM8oMGeh ŕW&;0ܕ +$Dz sD %0x/{gݷB#cpD˵#e"K/) !Y#̓Dlg4b>EM3T (9&p~-'GɑlY[?E.`ހM Evn4s<{nҟ4z3ƿM(p4x։m |&x%Z@({~N1qy8FPjDo6SXyhr :JgǾfN&b7Ԋ{dK<ڜw#sںN}xU~Mf_ 244yYhtvш̪>Qc8{Y oߛ|u߄6W(-ߺȍ# n֚MPj] Mp# y}XK sSU>q݁(yug5s3q !{;ߓ"4dG _4>7IH4(.#B ؜cz (#}%şnMC- }|[ϸ%6Pe>4RQoZ ]r;^@UofJ_nnaL3RlP?yרfchRr$R΄"rKG,-cJ铞\ੂJq{} y+wܥMYaq$xH{h2؂H!XG-Cz+Ng÷M#Y#dnrjE!ٯ.Th";vv ׏I42'ZJFBѳ$.2n;ӹtw=xt劉f>W:m+zl<Q CsBL@G1RB9zBG/u9߱\!p"Mj} ӆr)nST&t`&YfpKOm5oI~6;6h'!aG^drE% v <R1%/LPskK\wIΌ\ӀxI7Jb(i(H<'ߟ-Ԥ)ycNŚ:V J>̛jATg /d^YOCrG:ic;CʀW4' hJ7_sQL3!Mۯ6Ky{⼲q 7x˼`[(sk349bx7|q T zըH?-m䙄3ΐ{K@lg)ݺ@ RtiMd\zK.(\rZȞqp~M`d6 /wOd`.HyEϼ zd&<ʉdd9}hR^օ=W"3D_=,!l,ŏq?E?BІ^^c] J*סIq+\bjō 0}6?t6Gл̂:?s%V/Df= ~4_ M=? uA? L`R.[ B:RZ^A)D(ϼRSJu!lꟆ&/Λ cM}[cXaDe(_Lz"oHqcTxwt]8a S!BɄL}XJ" Y[8—>;r xDv؅7Q/b .=_U$?&Y ]X>e F€"UE,hi#z@7Hzc/x27m0"f\0Ѓ>#au Mb5s$Tvb18#{c4+Ώѭ _'2Eeoߟe-2$i%  MrNMAN.9$Dayj~\l;]?B~^Ng~5/Bmu%hk^BiJʵ+w @F!M*yg_8,|:ֆmWàc 3FGu~2'uF=!"ct8/ZԸruڐGtXCg5ZbKZbb[^V ٤)E=+!KΔ\C50!xV~&,~"1>ύ^/kdCmBb4 rQ"x D!W'ܻ}QΏy"Bx|31H.Ͷ2!qb̬?M!?q9><-lW]M}m5NgO4Z{m݅o #CÇM] 2h2_AG@nn*I J<&ߟ Jk`:1Ϩ#{D+B2y\i1^_E1lAbBAnE FX0>>H1'H$K[~ l5n}*jV9/@>RL.$?m>EN$D'~.%8yFc`}{C;+@03Ft̋g; $O)O:f |"""yAБlDk#/{φ7$Ő; Žz ,^rp"~}5C|pKAyɼ"7zq%{SJ{.̥܅ؔNICC!nVzСÒ+e1f(G -/3h)I=қUbPxF?M;YͶTj^zWyr>&5zRnqO÷ My}vP/vFZ4Z#GqES:/]`<{f#y3lfT9FG Oy6uB%|@uf~3˙@}XSwx$"Q}S!T AHP!.Eev_\κ7+miy4qv0‰jdž?+o^+-Y>VH?uhR?wX[ЦKZ$'͡WF E c[`P[Џ q\_]R +zZQ>3jQÉ(cF̬BYB-yFvrQYc? PCt8|];_ svXV +P٭o)1[H>fo]HL@c9w ttW#0*-ZDx}n;,^y{Rn] *j^D;b0 7 63&7*}QxoɶR^dte3a(ԍʛ?ߚW♰\#zz>% T,ȦRkYp\V$PUઐuAXcg{ .uU69WDԶ,|=?_xb}N@;|P%})A?zR!@@P?t@Jy1P{mS̔eYZ^w^1*| ֊9L'd !P'hKh70b:lf'bYykxDm1mx*|u'8B@(čbJJc~0y7ŏz #9{khA׿Y&Y7NU6S@cFLRz}n@*&d^O?bF4k@~O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?O~'?YMwbmkBTx1 @ kAM~7jmwSL$-I೬U`Y:X^ˍk3z=J=[mkBTK0xٱ @ kApGppZq5W8ŃW~RDD~{c>,$ iemo]eg{06(7}mkBTxx1 EAƻlH/3ŀVU ǘȦS dg2힫{yL MƽDTmkBTx Pvqwwp1ƣ^±IC"PV,۞]]]0fy}ٵsZξdׅ3i¹I?5x7`5EmkBTxұ HRGzWws֕lnh$l8=mkBT xٱ EAv&⨑EGpx)uf[}{Z@?{{3Ћh@'4yWmkBT xܱ 0@Q|.N FX;8]Zk쵔?o|G;@'ow`/E&믿So@,@__; __?,@__; __>{?_M?fn?Fυ+_dz d4/ejn&!g;9IX|ray<umkBT0x흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j mkBTրx흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 OfmkBTxڍm0aaAXAtNuө~"B~v(I$Ic i#Gl6p8޾s[ouv?Ru߯+fԍ^|}m43ϭu!Z9RUY׽B,z"|~>/|RתY̞EGߔ뙷L?:fV\꺯Pv#R>cNb=^Fz=yNI}.3?3̥*Ǫ7٧ڞƵ2~zWİg#g&2yK;wʞ2vm"Ggʼd~g<[şXlk=^k͞Gy\ׇ3M^&}V3=3ڣ<_(녾v9> G@Sǿ99Gy*"QYu*lz;{-/9v=Q_s>c),k:gQ%ԝ,SFwA2vWcWqlׯ[},g7F}.2˘ڳ (Mmҥ^?tIzovmr?9<O",so{}XbG;4o ? }4a5%;<(7t"ws?u)z_XyDsZSrM/nK3N=,/H%| #ybj5&$@d5_kʅMgMu{\oZuEJ _y̯'NOAlr:NM.d2.&y|۟qkؗGTI۶m>D)Zz\6/'ޭkíz+}3@ ^T{g޾f>R0k/ h,ÉV9Q)-SL|w?C65^د[5=%((J2J0uH&bepECDKDcf5D$̲7X};SCUƜ>*DوBÍ6oi-Hn~3M0e'KXS՗O1-}dI[}j5f"Rr$Kb*U}fGE 4-XG4K^.FCAT]l")W0}?؄IENDB`engauge-digitizer-5.2/bin/000077500000000000000000000000001222557406400155425ustar00rootroot00000000000000engauge-digitizer-5.2/bin/README000066400000000000000000000007021222557406400164210ustar00rootroot00000000000000Introduction ------------ This bin directory contains the executable that is built by successfully compiling and linking Engauge Digitizer (http://digitizer.sourceforge.net). Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/digitizer.dsp000077500000000000000000000724511222557406400175100ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="Engauge Digitizer" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=Engauge Digitizer - 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 "Digitizer.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 "Digitizer.mak" CFG="Engauge Digitizer - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "Engauge Digitizer - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "Engauge Digitizer - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "bin" # PROP BASE Intermediate_Dir "objs" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "bin" # PROP Intermediate_Dir "objs" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "$(QTDIR)\include" /I "$(FFTW_HOME)\api" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "UNICODE" /D "QT_THREAD_SUPPORT" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 bin\libfftw3-3.lib imm32.lib $(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib wsock32.lib /nologo /stack:0x180000 /subsystem:windows /machine:I386 /out:"bin\engauge.exe" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "bin" # PROP BASE Intermediate_Dir "objs" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "bin" # PROP Intermediate_Dir "objs" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MD /W3 /Gm /GX /ZI /Od /I "$(QTDIR)\include" /I "$(FFTW_HOME)\api" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "UNICODE" /D "QT_THREAD_SUPPORT" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 bin\libfftw3-3.lib imm32.lib $(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"bin\engauge.exe" /pdbtype:sept # SUBTRACT LINK32 /nodefaultlib !ENDIF # Begin Target # Name "Engauge Digitizer - Win32 Release" # Name "Engauge Digitizer - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=src\axispointdlg.cpp # End Source File # Begin Source File SOURCE=src\clipboard.cpp # End Source File # Begin Source File SOURCE=src\colorchooser.cpp # End Source File # Begin Source File SOURCE=src\coordsysdlg.cpp # End Source File # Begin Source File SOURCE=src\curvecmb.cpp # End Source File # Begin Source File SOURCE=src\defaultsettings.cpp # End Source File # Begin Source File SOURCE=src\digitdebug.cpp # End Source File # Begin Source File SOURCE=src\digitdef.cpp # End Source File # Begin Source File SOURCE=src\digitdoc.cpp # End Source File # Begin Source File SOURCE=src\digitizer.rc # End Source File # Begin Source File SOURCE=src\digitmain.cpp # End Source File # Begin Source File SOURCE=src\digittool.cpp # End Source File # Begin Source File SOURCE=src\digitview.cpp # End Source File # Begin Source File SOURCE=src\discretize.cpp # End Source File # Begin Source File SOURCE=src\discretizedlg.cpp # End Source File # Begin Source File SOURCE=src\exportdlg.cpp # End Source File # Begin Source File SOURCE=src\geometrydlg.cpp # End Source File # Begin Source File SOURCE=src\geometrywindowitem.cpp # End Source File # Begin Source File SOURCE=src\grid.cpp # End Source File # Begin Source File SOURCE=src\gridmesh.cpp # End Source File # Begin Source File SOURCE=src\gridmeshdlg.cpp # End Source File # Begin Source File SOURCE=src\gridremoval.cpp # End Source File # Begin Source File SOURCE=src\gridremovaldlg.cpp # End Source File # Begin Source File SOURCE=src\helpwindow.cpp # End Source File # Begin Source File SOURCE=src\highlight.cpp # End Source File # Begin Source File SOURCE=src\main.cpp # End Source File # Begin Source File SOURCE=src\match.cpp # End Source File # Begin Source File SOURCE=src\matchset.cpp # End Source File # Begin Source File SOURCE=src\measurecmb.cpp # End Source File # Begin Source File SOURCE=src\mmsubs.cpp # End Source File # Begin Source File SOURCE=src\moc_axispointdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_colorchooser.cpp # End Source File # Begin Source File SOURCE=src\moc_coordsysdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_curvecmb.cpp # End Source File # Begin Source File SOURCE=src\moc_digitdoc.cpp # End Source File # Begin Source File SOURCE=src\moc_digitmain.cpp # End Source File # Begin Source File SOURCE=src\moc_digitview.cpp # End Source File # Begin Source File SOURCE=src\moc_discretizedlg.cpp # End Source File # Begin Source File SOURCE=src\moc_exportdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_geometrydlg.cpp # End Source File # Begin Source File SOURCE=src\moc_gridmeshdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_gridremovaldlg.cpp # End Source File # Begin Source File SOURCE=src\moc_helpwindow.cpp # End Source File # Begin Source File SOURCE=src\moc_measurecmb.cpp # End Source File # Begin Source File SOURCE=src\moc_mrudocuments.cpp # End Source File # Begin Source File SOURCE=src\moc_pointmatchdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_pointsetdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_pointsetnamedlg.cpp # End Source File # Begin Source File SOURCE=src\moc_pointsetsdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_scalebardlg.cpp # End Source File # Begin Source File SOURCE=src\moc_segmentdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_sessionsdlg.cpp # End Source File # Begin Source File SOURCE=src\moc_transform.cpp # End Source File # Begin Source File SOURCE=src\moc_zoomcmb.cpp # End Source File # Begin Source File SOURCE=src\mrudocuments.cpp # End Source File # Begin Source File SOURCE=src\osxsubs.cpp # End Source File # Begin Source File SOURCE=src\point.cpp # End Source File # Begin Source File SOURCE=src\pointmatch.cpp # End Source File # Begin Source File SOURCE=src\pointmatchdlg.cpp # End Source File # Begin Source File SOURCE=src\pointmatchthread.cpp # End Source File # Begin Source File SOURCE=src\pointset.cpp # End Source File # Begin Source File SOURCE=src\pointsetdlg.cpp # End Source File # Begin Source File SOURCE=src\pointsetnamedlg.cpp # End Source File # Begin Source File SOURCE=src\pointsets.cpp # End Source File # Begin Source File SOURCE=src\pointsetsdlg.cpp # End Source File # Begin Source File SOURCE=src\pointsetstyles.cpp # End Source File # Begin Source File SOURCE=src\scalebardlg.cpp # End Source File # Begin Source File SOURCE=src\scanforaxes.cpp # End Source File # Begin Source File SOURCE=src\segment.cpp # End Source File # Begin Source File SOURCE=src\segmentdlg.cpp # End Source File # Begin Source File SOURCE=src\segments.cpp # End Source File # Begin Source File SOURCE=src\sessionsdlg.cpp # End Source File # Begin Source File SOURCE=src\transform.cpp # End Source File # Begin Source File SOURCE=src\zoomcmb.cpp # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=src\axispointdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=axispointdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=axispointdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\clipboard.h # End Source File # Begin Source File SOURCE=src\colorchooser.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=colorchooser "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=colorchooser "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\coordsysdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=coordsysdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=coordsysdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\curvecmb.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=curvecmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=curvecmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\defaultsettings.h # End Source File # Begin Source File SOURCE=src\digitdebug.h # End Source File # Begin Source File SOURCE=src\digitdef.h # End Source File # Begin Source File SOURCE=src\digitdoc.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitdoc "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitdoc "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\digitmain.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitmain "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitmain "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\digittool.h # End Source File # Begin Source File SOURCE=src\digitview.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitview "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=digitview "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\discretize.h # End Source File # Begin Source File SOURCE=src\discretizedlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=discretizedlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=discretizedlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\exportdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=exportdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=exportdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\geometrydlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=geometrydlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=geometrydlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\geometrywindowitem.h # End Source File # Begin Source File SOURCE=src\grid.h # End Source File # Begin Source File SOURCE=src\gridmesh.h # End Source File # Begin Source File SOURCE=src\gridmeshdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=gridmeshdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=gridmeshdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\gridremoval.h # End Source File # Begin Source File SOURCE=src\gridremovaldlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=gridremovaldlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=gridremovaldlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\helpwindow.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=helpwindow "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=helpwindow "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\highlight.h # End Source File # Begin Source File SOURCE=src\main.h # End Source File # Begin Source File SOURCE=src\match.h # End Source File # Begin Source File SOURCE=src\matchset.h # End Source File # Begin Source File SOURCE=src\measurecmb.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=measurecmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=measurecmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\mmsubs.h # End Source File # Begin Source File SOURCE=src\mrudocuments.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=mrudocuments "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=mrudocuments "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\osxsubs.h # End Source File # Begin Source File SOURCE=src\point.h # End Source File # Begin Source File SOURCE=src\pointmatch.h # End Source File # Begin Source File SOURCE=src\pointmatchdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointmatchdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointmatchdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\pointmatchthread.h # End Source File # Begin Source File SOURCE=src\pointset.h # End Source File # Begin Source File SOURCE=src\pointsetdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\pointsetnamedlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetnamedlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetnamedlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\pointsets.h # End Source File # Begin Source File SOURCE=src\pointsetsdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetsdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=pointsetsdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\pointsetstyles.h # End Source File # Begin Source File SOURCE=src\scalebardlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=scalebardlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=scalebardlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\scanforaxes.h # End Source File # Begin Source File SOURCE=src\segment.h # End Source File # Begin Source File SOURCE=src\segmentdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=segmentdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=segmentdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\segments.h # End Source File # Begin Source File SOURCE=src\sessionsdlg.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=sessionsdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=sessionsdlg "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\transform.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=transform "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=transform "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=src\zoomcmb.h !IF "$(CFG)" == "Engauge Digitizer - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=zoomcmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ELSEIF "$(CFG)" == "Engauge Digitizer - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build - qt moc on $(InputName).h InputPath=src InputName=zoomcmb "src\moc_$(InputName).cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" %QTDIR%\bin\moc.exe -p . src\$(InputName).h -o src\moc_$(InputName).cpp # End Custom Build !ENDIF # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # Begin Source File SOURCE=src\img\digitizer.ico # End Source File # End Group # Begin Source File SOURCE=src\digitaxis.xpm # End Source File # Begin Source File SOURCE=src\digitcurve.xpm # End Source File # Begin Source File SOURCE=src\digitmeasure.xpm # End Source File # Begin Source File SOURCE=src\digitsegment.xpm # End Source File # Begin Source File SOURCE=src\digitselect.xpm # End Source File # Begin Source File SOURCE=src\fileimport.xpm # End Source File # Begin Source File SOURCE=src\fileopen.xpm # End Source File # Begin Source File SOURCE=src\filesave.xpm # End Source File # Begin Source File SOURCE=src\whatsthis.xpm # End Source File # End Target # End Project engauge-digitizer-5.2/digitizer.dsw000077500000000000000000000010101222557406400174760ustar00rootroot00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "Engauge Digitizer"=.\Digitizer.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### engauge-digitizer-5.2/digitizer.filelist000066400000000000000000000055261222557406400205310ustar00rootroot00000000000000AUTHORS COPYING ChangeLog INSTALL Makefile.am README TODO admin digitizer.kdevprj digitizer.lsm digitizer/Makefile.am digitizer/axispointdlg.cpp digitizer/axispointdlg.h digitizer/clipboard.cpp digitizer/clipboard.h digitizer/colorchooser.cpp digitizer/colorchooser.h digitizer/coordsysdlg.cpp digitizer/coordsysdlg.h digitizer/curvecmb.cpp digitizer/curvecmb.h digitizer/defaultsettings.cpp digitizer/defaultsettings.h digitizer/digitaxis.xpm digitizer/digitcurve.xpm digitizer/digitdebug.cpp digitizer/digitdebug.h digitizer/digitdef.cpp digitizer/digitdef.h digitizer/digitdoc.cpp digitizer/digitdoc.h digitizer/digitmain.cpp digitizer/digitmain.h digitizer/digitmeasure.xpm digitizer/digitscale.xpm digitizer/digitsegment.xpm digitizer/digitselect.xpm digitizer/digittool.cpp digitizer/digittool.h digitizer/digitview.cpp digitizer/digitview.h digitizer/discretize.cpp digitizer/discretize.h digitizer/discretizedlg.cpp digitizer/discretizedlg.h digitizer/docs/Makefile.am digitizer/docs/en/Makefile.am digitizer/docs/en/index-1.html digitizer/docs/en/index-2.html digitizer/docs/en/index-3.html digitizer/docs/en/index-4.html digitizer/docs/en/index-5.html digitizer/docs/en/index-6.html digitizer/docs/en/index.html digitizer/exportdlg.cpp digitizer/exportdlg.h digitizer/filenew.xpm digitizer/geometrydlg.cpp digitizer/geometrydlg.h digitizer/geometrywindowitem.cpp digitizer/geometrywindowitem.h digitizer/grid.cpp digitizer/grid.h digitizer/gridmesh.cpp digitizer/gridmesh.h digitizer/gridmeshdlg.cpp digitizer/gridmeshdlg.h digitizer/gridremoval.cpp digitizer/gridremoval.h digitizer/gridremovaldlg.cpp digitizer/gridremovaldlg.h digitizer/helpback.xpm digitizer/helpforward.xpm digitizer/helphome.xpm digitizer/helpwindow.cpp digitizer/helpwindow.h digitizer/main.cpp digitizer/main.h digitizer/match.cpp digitizer/match.h digitizer/matchset.cpp digitizer/matchset.h digitizer/measurecmb.cpp digitizer/measurecmb.h digitizer/mmsubs.cpp digitizer/mmsubs.h digitizer/mrudocuments.cpp digitizer/mrudocuments.h digitizer/osxsubs.cpp digitizer/osxsubs.h digitizer/point.cpp digitizer/point.h digitizer/pointmatch.cpp digitizer/pointmatch.h digitizer/pointmatchdlg.cpp digitizer/pointmatchdlg.h digitizer/pointset.cpp digitizer/pointset.h digitizer/pointsetdlg.cpp digitizer/pointsetdlg.h digitizer/pointsetnamedlg.cpp digitizer/pointsetnamedlg.h digitizer/pointsets.cpp digitizer/pointsets.h digitizer/pointsetsdlg.cpp digitizer/pointsetsdlg.h digitizer/pointsetstyles.cpp digitizer/pointsetstyles.h digitizer/scalebardlg.cpp digitizer/scalebardlg.h digitizer/scanforaxes.cpp digitizer/scanforaxes.h digitizer/segment.cpp digitizer/segment.h digitizer/segmentdlg.cpp digitizer/segmentdlg.h digitizer/segments.cpp digitizer/segments.h digitizer/sessionsdlg.cpp digitizer/sessionsdlg.h digitizer/transform.cpp digitizer/transform.h digitizer/whatsthis.xpm digitizer/zoomcmb.cpp digitizer/zoomcmb.h engauge-digitizer-5.2/digitizer.kdevelop000066400000000000000000000101551222557406400205210ustar00rootroot00000000000000 mark mitchell mmdigitizer@gmail.com $VERSION$ KDevTrollProject C++ Qt . false false false *.o,*.lo,CVS false bash bash_bugs clanlib w3c-dom-level2-html fortran_bugs_gcc gnome1 gnustep gtk gtk_bugs haskell haskell_bugs_ghc java_bugs_gcc java_bugs_sun kde2book opengl pascal_bugs_fp php php_bugs perl perl_bugs python python_bugs qt-kdev3 ruby ruby_bugs sdl stl w3c-svg sw w3c-uaag10 wxwidgets_bugs KDE Libraries (Doxygen) true false false false true 10 custom /home/mark/engauge_dev/digitizer/bin/ /home/mark/engauge_dev/digitizer/bin/digitizer false true false 1 false gmake 0 .h .cpp true true true false true true true 250 400 250 engauge-digitizer-5.2/digitizer.kdevelop.pcs000066400000000000000000034231041222557406400213120ustar00rootroot00000000000000PCShj/home/mark/engauge_dev/digitizer/src/axispointdlg.cppB:_-zf/home/mark/engauge_dev/digitizer/src/axispointdlg.hB:`3d/home/mark/engauge_dev/digitizer/src/clipboard.cppB:_?`/home/mark/engauge_dev/digitizer/src/clipboard.hB:`CX/home/mark/engauge_dev/digitizer/src/cmd.cppB:_U$T/home/mark/engauge_dev/digitizer/src/cmd.hB:`Wdh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cppB:_]d/home/mark/engauge_dev/digitizer/src/cmdaddpoint.hB:`bhn/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cppB:_ij/home/mark/engauge_dev/digitizer/src/cmdchangecurve.hB:`mf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cppB:_tb/home/mark/engauge_dev/digitizer/src/cmdinvoker.hB:`yn/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cppB:_j/home/mark/engauge_dev/digitizer/src/cmdremovepoint.hB:`\j/home/mark/engauge_dev/digitizer/src/colorchooser.cppB:`ff/home/mark/engauge_dev/digitizer/src/colorchooser.hB:`h/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppB:d2Jd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hB:`#b/home/mark/engauge_dev/digitizer/src/curvecmb.cppB:_>V^/home/mark/engauge_dev/digitizer/src/curvecmb.hB:`Cp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppB:_Il/home/mark/engauge_dev/digitizer/src/defaultsettings.hB:`ntf/home/mark/engauge_dev/digitizer/src/digitdebug.cppB:_ <b/home/mark/engauge_dev/digitizer/src/digitdebug.hB:`|b/home/mark/engauge_dev/digitizer/src/digitdef.cppB:_.l^/home/mark/engauge_dev/digitizer/src/digitdef.hB:`4b/home/mark/engauge_dev/digitizer/src/digitdoc.cppB:_d^/home/mark/engauge_dev/digitizer/src/digitdoc.hB:`!Bd/home/mark/engauge_dev/digitizer/src/digitmain.cppB:db@`/home/mark/engauge_dev/digitizer/src/digitmain.hB:`Wjd/home/mark/engauge_dev/digitizer/src/digittool.cppB:_t`/home/mark/engauge_dev/digitizer/src/digittool.hB:`U0d/home/mark/engauge_dev/digitizer/src/digitview.cppB:fS`/home/mark/engauge_dev/digitizer/src/digitview.hB:`f/home/mark/engauge_dev/digitizer/src/discretize.cppB:_fb/home/mark/engauge_dev/digitizer/src/discretize.hB:`Pl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppB:fH-h/home/mark/engauge_dev/digitizer/src/discretizedlg.hB:`9d/home/mark/engauge_dev/digitizer/src/exportdlg.cppB:f[Z`/home/mark/engauge_dev/digitizer/src/exportdlg.hB:`q,h/home/mark/engauge_dev/digitizer/src/geometrydlg.cppB:_6d/home/mark/engauge_dev/digitizer/src/geometrydlg.hB:`v/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cppB:_.r/home/mark/engauge_dev/digitizer/src/geometrywindowitem.hB:`Z/home/mark/engauge_dev/digitizer/src/grid.cppB:_^V/home/mark/engauge_dev/digitizer/src/grid.hB:`*b/home/mark/engauge_dev/digitizer/src/gridmesh.cppB:_^/home/mark/engauge_dev/digitizer/src/gridmesh.hB:`h/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppB:fed/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hB:`(h/home/mark/engauge_dev/digitizer/src/gridremoval.cppB:_Zd/home/mark/engauge_dev/digitizer/src/gridremoval.hB:`hn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppB:fx~j/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hB:` f/home/mark/engauge_dev/digitizer/src/helpwindow.cppB:f 9b/home/mark/engauge_dev/digitizer/src/helpwindow.hB:` HZ/home/mark/engauge_dev/digitizer/src/main.cpp _V/home/mark/engauge_dev/digitizer/src/main.hB:` y\/home/mark/engauge_dev/digitizer/src/match.cppB:_ ~X/home/mark/engauge_dev/digitizer/src/match.hB:` 8b/home/mark/engauge_dev/digitizer/src/matchset.cppB:_ ^/home/mark/engauge_dev/digitizer/src/matchset.hB:` Xf/home/mark/engauge_dev/digitizer/src/measurecmb.cppB:_ b/home/mark/engauge_dev/digitizer/src/measurecmb.hB:` |^/home/mark/engauge_dev/digitizer/src/mmsubs.cppB:_ úZ/home/mark/engauge_dev/digitizer/src/mmsubs.hB:` j/home/mark/engauge_dev/digitizer/src/mrudocuments.cppB:_ "f/home/mark/engauge_dev/digitizer/src/mrudocuments.hB:` .`/home/mark/engauge_dev/digitizer/src/osxsubs.cppB:_ @\/home/mark/engauge_dev/digitizer/src/osxsubs.hB:` AN\/home/mark/engauge_dev/digitizer/src/point.cppB:_ AX/home/mark/engauge_dev/digitizer/src/point.hB:` Jf/home/mark/engauge_dev/digitizer/src/pointmatch.cppB:_ zdb/home/mark/engauge_dev/digitizer/src/pointmatch.hB:` Vl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppB:f ^h/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hB:` Ȥb/home/mark/engauge_dev/digitizer/src/pointset.cppB:_ ^/home/mark/engauge_dev/digitizer/src/pointset.hB:` h/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppB:f \,d/home/mark/engauge_dev/digitizer/src/pointsetdlg.hB:` mp/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cppB:_ l/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hB:` dd/home/mark/engauge_dev/digitizer/src/pointsets.cppB:_ r`/home/mark/engauge_dev/digitizer/src/pointsets.hB:` 2j/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppB:f ef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hB:` un/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppB:_ 4j/home/mark/engauge_dev/digitizer/src/pointsetstyles.hB:` h/home/mark/engauge_dev/digitizer/src/scalebardlg.cppB:_ רd/home/mark/engauge_dev/digitizer/src/scalebardlg.hB:` Th/home/mark/engauge_dev/digitizer/src/scanforaxes.cppB:_ d/home/mark/engauge_dev/digitizer/src/scanforaxes.hB:` &`/home/mark/engauge_dev/digitizer/src/segment.cppB:_ \/home/mark/engauge_dev/digitizer/src/segment.hB:` f/home/mark/engauge_dev/digitizer/src/segmentdlg.cppB:f 9b/home/mark/engauge_dev/digitizer/src/segmentdlg.hB:` Db/home/mark/engauge_dev/digitizer/src/segments.cppB:_ bV^/home/mark/engauge_dev/digitizer/src/segments.hB:` ~h/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppB:f d/home/mark/engauge_dev/digitizer/src/sessionsdlg.hB:` 6d/home/mark/engauge_dev/digitizer/src/transform.cppB:_ Ҟ`/home/mark/engauge_dev/digitizer/src/transform.hB:` `/home/mark/engauge_dev/digitizer/src/zoomcmb.cppB:_ \/home/mark/engauge_dev/digitizer/src/zoomcmb.hB:` j/home/mark/engauge_dev/digitizer/src/axispointdlg.cppAxisPointDlgj/home/mark/engauge_dev/digitizer/src/axispointdlg.cpp+WAxisPointDlgpc.docDigitDoc*x doubley doubleslotAcceptj/home/mark/engauge_dev/digitizer/src/axispointdlg.cpppAxisPointDlgvoidxj/home/mark/engauge_dev/digitizer/src/axispointdlg.cpp^cAxisPointDlgvoid doubleyj/home/mark/engauge_dev/digitizer/src/axispointdlg.cppejAxisPointDlgvoid double~ AxisPointDlgj/home/mark/engauge_dev/digitizer/src/axispointdlg.cppY\AxisPointDlgldtf/home/mark/engauge_dev/digitizer/src/axispointdlg.hAxisPointDlgf/home/mark/engauge_dev/digitizer/src/axispointdlg.h&CQDialogAxisPointDlgf/home/mark/engauge_dev/digitizer/src/axispointdlg.h,,3AxisPointDlgldtdocDigitDoc*x doubley doubleslotAcceptf/home/mark/engauge_dev/digitizer/src/axispointdlg.h5 5AxisPointDlgvoidvoidxf/home/mark/engauge_dev/digitizer/src/axispointdlg.h/ /AxisPointDlgvoid doubleyf/home/mark/engauge_dev/digitizer/src/axispointdlg.h0 0AxisPointDlgvoid double~ AxisPointDlgf/home/mark/engauge_dev/digitizer/src/axispointdlg.h--AxisPointDlg , buttonCancelf/home/mark/engauge_dev/digitizer/src/axispointdlg.h@@QPushButton*buttonOkf/home/mark/engauge_dev/digitizer/src/axispointdlg.h??QPushButton*docf/home/mark/engauge_dev/digitizer/src/axispointdlg.hB BDigitDoc* doubleValidatorXf/home/mark/engauge_dev/digitizer/src/axispointdlg.h==&"QDoubleValidator* doubleValidatorYf/home/mark/engauge_dev/digitizer/src/axispointdlg.h>>&"QDoubleValidator* editXf/home/mark/engauge_dev/digitizer/src/axispointdlg.h; ;QLineEdit* editYf/home/mark/engauge_dev/digitizer/src/axispointdlg.h< <QLineEdit* labelXf/home/mark/engauge_dev/digitizer/src/axispointdlg.h9 9QLabel* labelYf/home/mark/engauge_dev/digitizer/src/axispointdlg.h: :QLabel*d/home/mark/engauge_dev/digitizer/src/clipboard.cppClipboardd/home/mark/engauge_dev/digitizer/src/clipboard.cpp!$Clipboardc.daddPointd/home/mark/engauge_dev/digitizer/src/clipboard.cpp+0ClipboardxScreenintyScreenintvoiddumpd/home/mark/engauge_dev/digitizer/src/clipboard.cpp27Clipboardvoid~ Clipboardd/home/mark/engauge_dev/digitizer/src/clipboard.cpp&)Clipboard`/home/mark/engauge_dev/digitizer/src/clipboard.hClipboard`/home/mark/engauge_dev/digitizer/src/clipboard.h#V Clipboard`/home/mark/engauge_dev/digitizer/src/clipboard.hKKClipboardaddPoint`/home/mark/engauge_dev/digitizer/src/clipboard.hA A+ClipboardnxScreenintyScreenintvoid clear`/home/mark/engauge_dev/digitizer/src/clipboard.h;;,ClipboardvoidvoidclipboardItems`/home/mark/engauge_dev/digitizer/src/clipboard.hGGBClipboardvoidboolcontents`/home/mark/engauge_dev/digitizer/src/clipboard.hDD>Clipboard4void*QValueList< QPoint >* create`/home/mark/engauge_dev/digitizer/src/clipboard.h(,Clipboardh.dvoidvoiddestroy`/home/mark/engauge_dev/digitizer/src/clipboard.h-4Clipboardvoidvoiddump`/home/mark/engauge_dev/digitizer/src/clipboard.h> >Clipboardvoidvoidinstance`/home/mark/engauge_dev/digitizer/src/clipboard.h58ClipboardvoidClipboard&~ Clipboard`/home/mark/engauge_dev/digitizer/src/clipboard.hLLClipboard clear`/home/mark/engauge_dev/digitizer/src/clipboard.h;;,ClipboardvoidvoidclipboardItems`/home/mark/engauge_dev/digitizer/src/clipboard.hGGBClipboardvoidboolcontents`/home/mark/engauge_dev/digitizer/src/clipboard.hDD>Clipboard4void*QValueList< QPoint >* create`/home/mark/engauge_dev/digitizer/src/clipboard.h(,Clipboardh.dvoidvoiddestroy`/home/mark/engauge_dev/digitizer/src/clipboard.h-4Clipboardvoidvoidinstance`/home/mark/engauge_dev/digitizer/src/clipboard.h58ClipboardvoidClipboard&m_clipboard`/home/mark/engauge_dev/digitizer/src/clipboard.hTT!Clipboard*m_contents`/home/mark/engauge_dev/digitizer/src/clipboard.hQQ!(QValueList< QPoint >X/home/mark/engauge_dev/digitizer/src/cmd.cppCmdX/home/mark/engauge_dev/digitizer/src/cmd.cpp!CmddocDigitDoc&nameQStringdumpX/home/mark/engauge_dev/digitizer/src/cmd.cpp#&Cmd)voidT/home/mark/engauge_dev/digitizer/src/cmd.hCmdT/home/mark/engauge_dev/digitizer/src/cmd.h"9CmdT/home/mark/engauge_dev/digitizer/src/cmd.h&&$CmddocDigitDoc&nameQStringdoCommandT/home/mark/engauge_dev/digitizer/src/cmd.h** CmdvoiddumpT/home/mark/engauge_dev/digitizer/src/cmd.h0 0CmdvoidundoCommandT/home/mark/engauge_dev/digitizer/src/cmd.h--"CmdDvoid ~ CmdT/home/mark/engauge_dev/digitizer/src/cmd.h''Cmd ~ CmdT/home/mark/engauge_dev/digitizer/src/cmd.h''Cmd m_docT/home/mark/engauge_dev/digitizer/src/cmd.h5 5DigitDoc& m_nameT/home/mark/engauge_dev/digitizer/src/cmd.h8 8QStringh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cppCmdAddPointh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cpp'CmdAddPointppcdocDigitDoc&xScreenunsigned intyScreenunsigned intdoCommandh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cpp.1CmdAddPointvoidundoCommandh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cpp35CmdAddPointvoid~ CmdAddPointh/home/mark/engauge_dev/digitizer/src/cmdaddpoint.cpp),CmdAddPointtnid/home/mark/engauge_dev/digitizer/src/cmdaddpoint.hCmdAddPointd/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h%9CmdCmdAddPointd/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h)+CmdAddPointtnidocDigitDoc&xScreenunsigned intyScreenunsigned intdoCommandd/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h//CmdAddPointvoidundoCommandd/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h22CmdAddPointuvoid~ CmdAddPointd/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h,,CmdAddPoint)m_xScreend/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h66unsigned intm_yScreend/home/mark/engauge_dev/digitizer/src/cmdaddpoint.h77unsigned intn/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cppCmdChangeCurven/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cpp&CmdChangeCurve.evdocDigitDoc&oldCurveQStringnewCurveQStringdoCommandn/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cpp-/CmdChangeCurvevoidundoCommandn/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cpp13CmdChangeCurvevoid ~ CmdChangeCurven/home/mark/engauge_dev/digitizer/src/cmdchangecurve.cpp(+CmdChangeCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.hCmdChangeCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h$8CmdCmdChangeCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h(*CmdChangeCurve.evdocDigitDoc&oldCurveQStringnewCurveQStringdoCommandj/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h..CmdChangeCurvevoidundoCommandj/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h11CmdChangeCurvevoid ~ CmdChangeCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h++CmdChangeCurveucem_newCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h6 6QStringm_oldCurvej/home/mark/engauge_dev/digitizer/src/cmdchangecurve.h5 5QStringf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cppCmdInvokerf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cpp!'CmdInvoker.redocDigitDoc&doCommandf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cpp1GCmdInvokerCmd*voiddumpf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cppMWCmdInvokervoidundoCommandf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cppIKCmdInvokervoid~ CmdInvokerf/home/mark/engauge_dev/digitizer/src/cmdinvoker.cpp*/CmdInvokerb/home/mark/engauge_dev/digitizer/src/cmdinvoker.hCmdInvokerb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h/GCmdInvokerb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h33CmdInvoker.redocDigitDoc&doCommandb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h7 7CmdInvokeracmdCmd*voiddumpb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h= =CmdInvokervoidundoCommandb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h: :CmdInvoker`void~ CmdInvokerb/home/mark/engauge_dev/digitizer/src/cmdinvoker.h44CmdInvoker  m_commandHistoryb/home/mark/engauge_dev/digitizer/src/cmdinvoker.hCC"QPtrList< Cmd > m_docb/home/mark/engauge_dev/digitizer/src/cmdinvoker.hE EDigitDoc&n/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cppCmdRemovePointn/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cpp'CmdRemovePoint.tndocDigitDoc&xScreenunsigned intyScreenunsigned intdoCommandn/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cpp.0CmdRemovePoint(voidundoCommandn/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cpp24CmdRemovePointvoid ~ CmdRemovePointn/home/mark/engauge_dev/digitizer/src/cmdremovepoint.cpp),CmdRemovePointj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.hCmdRemovePointj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h$8CmdCmdRemovePointj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h(*CmdRemovePoint.tndocDigitDoc&xScreenunsigned intyScreenunsigned intdoCommandj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h..CmdRemovePointAvoidundoCommandj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h11CmdRemovePoint؈void ~ CmdRemovePointj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h++CmdRemovePointopem_xScreenj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h55unsigned intm_yScreenj/home/mark/engauge_dev/digitizer/src/cmdremovepoint.h66unsigned intj/home/mark/engauge_dev/digitizer/src/colorchooser.cppClickableViewj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserClickableView canvasQCanvas* parentQWidget*ColorChooserj/home/mark/engauge_dev/digitizer/src/colorchooser.cppCColorChooserpc. parentQWidget*imageOriginalconst QImage*xTopLeftintyTopLeftint rgbBgQRgbshowLargeboolDividerj/home/mark/engauge_dev/digitizer/src/colorchooser.cppFTColorChooserDividerchooserColorChooser* canvasQCanvas* lowerboolTabj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDividerTabchooserColorChooser*dividerDivider* canvasQCanvas* lowerbool*changeBackgroundColorj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser ~imageOriginalconst QImage* rgbBgQRgbvoidchangeTextLimitj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser lowerbool limitintvoid"colorAttributeMaxj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser voidint,contentsMouseMoveEventj/home/mark/engauge_dev/digitizer/src/colorchooser.cpp (ColorChooserClickableVieweQMouseEvent*void.contentsMousePressEventj/home/mark/engauge_dev/digitizer/src/colorchooser.cpp*>ColorChooserClickableView eQMouseEvent*void2contentsMouseReleaseEventj/home/mark/engauge_dev/digitizer/src/colorchooser.cpp@DColorChooserClickableViewQMouseEvent*voiddragContinuej/home/mark/engauge_dev/digitizer/src/colorchooser.cppVeColorChooserDividerxCursorintvoiddragStartj/home/mark/engauge_dev/digitizer/src/colorchooser.cppgjColorChooserDivider xCursorintvoiddrawShapej/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDividerTabpQPainter&void(loadForegroundPixmapj/home/mark/engauge_dev/digitizer/src/colorchooser.cpp ColorChooser  rgbBgQRgbvoidloadHistogramj/home/mark/engauge_dev/digitizer/src/colorchooser.cpp`ColorChooserimageOriginalconst QImage* method DiscretizeMethod"colorAttributeMaxinthistogram0QPtrList< QCanvasLine >* rgbBgQRgbdlg QProgressDialog*voidloadHistogramsj/home/mark/engauge_dev/digitizer/src/colorchooser.cppbColorChooserimageOriginalconst QImage*void(moveToScreenPositionj/home/mark/engauge_dev/digitizer/src/colorchooser.cpplColorChooserDividerxScreen doublevoid(moveToScreenPositionj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDividerTabZxScreen doublevoid"passLimitToParentj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser lowerbool limitintvoid refreshHistogramj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserhistogram0QPtrList< QCanvasLine >* method DiscretizeMethodboolscreenPositionj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDivider voidint&setDiscretizeMethodj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser  method DiscretizeMethodlimitLowerintlimitUpperintvoidsetLimitj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDivider limitintvoidsetVisiblej/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDivider showboolvoidsetVisiblej/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooserDividerTab ʀshowboolvoid(showCurrentHistogramj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooservoidslotHighj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChoosertextconst QString&voidslotLowj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser textconst QString&voidupdateGrayoutsj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooser void~ ColorChooserj/home/mark/engauge_dev/digitizer/src/colorchooser.cppColorChooseresof/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserf/home/mark/engauge_dev/digitizer/src/colorchooser.h<(QObjectClickableViewf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserQCanvasViewClickableViewf/home/mark/engauge_dev/digitizer/src/colorchooser.h7ColorChooserClickableView canvasQCanvas* parentQWidget*,contentsMouseMoveEventf/home/mark/engauge_dev/digitizer/src/colorchooser.h 3ColorChooserClickableVieweQMouseEvent*void.contentsMousePressEventf/home/mark/engauge_dev/digitizer/src/colorchooser.h 4ColorChooserClickableViewu9eQMouseEvent*void2contentsMouseReleaseEventf/home/mark/engauge_dev/digitizer/src/colorchooser.h 6ColorChooserClickableViewu9eQMouseEvent*void~ ClickableViewf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserClickableView܀~ ClickableViewf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserClickableView܀draggedTabf/home/mark/engauge_dev/digitizer/src/colorchooser.h Divider::Tab*draggingf/home/mark/engauge_dev/digitizer/src/colorchooser.h booldraggingOffsetf/home/mark/engauge_dev/digitizer/src/colorchooser.h intDividerf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserTabf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserDivider QCanvasRectangleTabf/home/mark/engauge_dev/digitizer/src/colorchooser.h UColorChooserDividerTabchooserColorChooser*dividerDivider* canvasQCanvas* lowerbooldividerf/home/mark/engauge_dev/digitizer/src/colorchooser.h 4ColorChooserDividerTabDivider*drawShapef/home/mark/engauge_dev/digitizer/src/colorchooser.h/ColorChooserDividerTabpQPainter&void(moveToScreenPositionf/home/mark/engauge_dev/digitizer/src/colorchooser.h5ColorChooserDividerTabxScreen doublevoidrttif/home/mark/engauge_dev/digitizer/src/colorchooser.h 8ColorChooserDividerTab$intsetVisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h&ColorChooserDividerTabshowboolvoidvisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h FColorChooserDividerTabvoidbool ~ Tabf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserDividerTabdividerf/home/mark/engauge_dev/digitizer/src/colorchooser.h 4ColorChooserDividerTabDivider*rttif/home/mark/engauge_dev/digitizer/src/colorchooser.h 8ColorChooserDividerTab$intvisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h FColorChooserDividerTabvoidbool ~ Tabf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserDividerTabRttiTabf/home/mark/engauge_dev/digitizer/src/colorchooser.hintm_canvasf/home/mark/engauge_dev/digitizer/src/colorchooser.hQCanvas*m_chooserf/home/mark/engauge_dev/digitizer/src/colorchooser.h#ColorChooser*m_dividerf/home/mark/engauge_dev/digitizer/src/colorchooser.hDivider*m_lowerf/home/mark/engauge_dev/digitizer/src/colorchooser.hboolm_pixmapf/home/mark/engauge_dev/digitizer/src/colorchooser.hQPixmap* Dividerf/home/mark/engauge_dev/digitizer/src/colorchooser.hCColorChooserDividerchooserColorChooser* canvasQCanvas* lowerbooldragContinuef/home/mark/engauge_dev/digitizer/src/colorchooser.h &ColorChooserDividerxCursorintvoiddragStartf/home/mark/engauge_dev/digitizer/src/colorchooser.h #ColorChooserDividerxCursorintvoid(moveToScreenPositionf/home/mark/engauge_dev/digitizer/src/colorchooser.h 1ColorChooserDividerxScreen doublevoidscreenPositionf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserDividervoidintsetLimitf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserDivider limitintvoidsetVisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h "ColorChooserDividershowboolvoidvisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h8ColorChooserDividervoidbool~ Dividerf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserDividervisiblef/home/mark/engauge_dev/digitizer/src/colorchooser.h8ColorChooserDividervoidbool~ Dividerf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooserDividerm_canvasf/home/mark/engauge_dev/digitizer/src/colorchooser.hQCanvas*m_chooserf/home/mark/engauge_dev/digitizer/src/colorchooser.hColorChooser*m_limitf/home/mark/engauge_dev/digitizer/src/colorchooser.h int m_linef/home/mark/engauge_dev/digitizer/src/colorchooser.hQCanvasLine*m_lowerf/home/mark/engauge_dev/digitizer/src/colorchooser.h bool m_tabf/home/mark/engauge_dev/digitizer/src/colorchooser.h Tab*m_xScreenf/home/mark/engauge_dev/digitizer/src/colorchooser.h doublem_xScreenOffsetf/home/mark/engauge_dev/digitizer/src/colorchooser.h doubleColorChooserf/home/mark/engauge_dev/digitizer/src/colorchooser.hBC=ColorChoosereso parentQWidget*imageOriginalconst QImage*xTopLeftintyTopLeftint rgbBgQRgbshowLargebool*changeBackgroundColorf/home/mark/engauge_dev/digitizer/src/colorchooser.ht tGColorChooserimageOriginalconst QImage* rgbBgQRgbvoidchangeTextLimitf/home/mark/engauge_dev/digitizer/src/colorchooser.hw w/ColorChooser lowerbool limitintvoidchooserHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.hzz7ColorChooservoidint"colorAttributeMaxf/home/mark/engauge_dev/digitizer/src/colorchooser.h}}ColorChooservoidintlimitChangef/home/mark/engauge_dev/digitizer/src/colorchooser.h +ColorChooser lowerbool limitintvoid(loadForegroundPixmapf/home/mark/engauge_dev/digitizer/src/colorchooser.h )ColorChooser rgbBgQRgbvoidloadHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooserTimageOriginalconst QImage* method DiscretizeMethod"colorAttributeMaxinthistogram0QPtrList< QCanvasLine >* rgbBgQRgbdlg QProgressDialog*voidloadHistogramsf/home/mark/engauge_dev/digitizer/src/colorchooser.h 4ColorChooserimageOriginalconst QImage*void"passLimitToParentf/home/mark/engauge_dev/digitizer/src/colorchooser.h 1ColorChooserԀ lowerbool limitintvoid refreshHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h TColorChooserhistogram0QPtrList< QCanvasLine >* method DiscretizeMethodbool&setDiscretizeMethodf/home/mark/engauge_dev/digitizer/src/colorchooser.h ]ColorChooser method DiscretizeMethodlimitLowerintlimitUpperintvoid(showCurrentHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h #ColorChooservoidvoidslotHighf/home/mark/engauge_dev/digitizer/src/colorchooser.h "ColorChooserconst QString&voidslotLowf/home/mark/engauge_dev/digitizer/src/colorchooser.h !ColorChooserconst QString&voidupdateGrayoutsf/home/mark/engauge_dev/digitizer/src/colorchooser.h ColorChooservoid~ ColorChooserf/home/mark/engauge_dev/digitizer/src/colorchooser.hDDColorChooserchooserHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.hzz7ColorChooservoidint'ChooserFramef/home/mark/engauge_dev/digitizer/src/colorchooser.hRRint"ChooserFullHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.hWWintChooserPaddingf/home/mark/engauge_dev/digitizer/src/colorchooser.hMMintChooserWidthf/home/mark/engauge_dev/digitizer/src/colorchooser.hHHintEditWidthf/home/mark/engauge_dev/digitizer/src/colorchooser.h\\intScaleFullHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.haaintSeparationf/home/mark/engauge_dev/digitizer/src/colorchooser.hffintTabHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.hppintTabWidthf/home/mark/engauge_dev/digitizer/src/colorchooser.hkkintchooserCanvasf/home/mark/engauge_dev/digitizer/src/colorchooser.h QCanvas*"chooserCanvasViewf/home/mark/engauge_dev/digitizer/src/colorchooser.h$ClickableView*dividerLowerf/home/mark/engauge_dev/digitizer/src/colorchooser.h Divider*dividerUpperf/home/mark/engauge_dev/digitizer/src/colorchooser.h Divider*editHighf/home/mark/engauge_dev/digitizer/src/colorchooser.h QLineEdit*editLowf/home/mark/engauge_dev/digitizer/src/colorchooser.h QLineEdit*&foregroundHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h-.QPtrList< QCanvasLine >grayoutLowerf/home/mark/engauge_dev/digitizer/src/colorchooser.h  QCanvasPolygon*grayoutUpperf/home/mark/engauge_dev/digitizer/src/colorchooser.h  QCanvasPolygon*hueHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h&.QPtrList< QCanvasLine >$intensityHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h,.QPtrList< QCanvasLine >labelLowerf/home/mark/engauge_dev/digitizer/src/colorchooser.h QLabel*labelUpperf/home/mark/engauge_dev/digitizer/src/colorchooser.h QLabel*m_chooserHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.h&&int$m_discretizeMethodf/home/mark/engauge_dev/digitizer/src/colorchooser.h' DiscretizeMethodm_parentf/home/mark/engauge_dev/digitizer/src/colorchooser.h QWidget*m_rgbBgf/home/mark/engauge_dev/digitizer/src/colorchooser.h" "QRgbm_scaleHeightf/home/mark/engauge_dev/digitizer/src/colorchooser.h''intm_showLargef/home/mark/engauge_dev/digitizer/src/colorchooser.h% %bool pixmapForegroundf/home/mark/engauge_dev/digitizer/src/colorchooser.h QPixmappixmapHuef/home/mark/engauge_dev/digitizer/src/colorchooser.h QPixmappixmapIntensityf/home/mark/engauge_dev/digitizer/src/colorchooser.h QPixmap pixmapSaturationf/home/mark/engauge_dev/digitizer/src/colorchooser.h QPixmappixmapValuef/home/mark/engauge_dev/digitizer/src/colorchooser.h QPixmap&saturationHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h-.QPtrList< QCanvasLine >scaleCanvasf/home/mark/engauge_dev/digitizer/src/colorchooser.h QCanvas*scaleCanvasViewf/home/mark/engauge_dev/digitizer/src/colorchooser.h  QCanvasView*validatorHighf/home/mark/engauge_dev/digitizer/src/colorchooser.h QIntValidator*validatorLowf/home/mark/engauge_dev/digitizer/src/colorchooser.hQIntValidator*valueHistogramf/home/mark/engauge_dev/digitizer/src/colorchooser.h(.QPtrList< QCanvasLine >h/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp CoordSysDlgh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp'CoordSysDlgppc titleQStringsettingsCoordSettings*slotCartesianh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlg P toggleboolvoidslotDegreesh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp(0CoordSysDlg toggleboolvoidslotGradiansh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp2:CoordSysDlg toggleboolvoidslotLinearXh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlgc toggleboolvoidslotLinearYh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlg  toggleboolvoidslotLogXh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp CoordSysDlg toggleboolvoidslotLogYh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp&CoordSysDlg  toggleboolvoidslotPolarh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlg  toggleboolvoidslotRadiansh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cpp<DCoordSysDlg toggleboolvoidslotWhath/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppFICoordSysDlg avoidtoggleActionsh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlgvoid~ CoordSysDlgh/home/mark/engauge_dev/digitizer/src/coordsysdlg.cppCoordSysDlggldd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hCoordSysDlgd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h$UQDialog CoordSysDlgd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h**7CoordSysDlggld titleQStringsettingsCoordSettings*slotCartesiand/home/mark/engauge_dev/digitizer/src/coordsysdlg.h/ /#CoordSysDlg toggleboolvoidslotDegreesd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h5 5!CoordSysDlg toggleboolvoidslotGradiansd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h6 6"CoordSysDlgۂ toggleboolvoidslotLinearXd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h1 1!CoordSysDlg toggleboolvoidslotLinearYd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h3 3!CoordSysDlg toggleboolvoidslotLogXd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h2 2CoordSysDlg toggleboolvoidslotLogYd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h4 4CoordSysDlg toggleboolvoidslotPolard/home/mark/engauge_dev/digitizer/src/coordsysdlg.h0 0CoordSysDlg M toggleboolvoidslotRadiansd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h7 7!CoordSysDlg toggleboolvoidslotWhatd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h8 8CoordSysDlgvoidvoidtoggleActionsd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h= =CoordSysDlgvoid~ CoordSysDlgd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h++CoordSysDlgsbuttonCanceld/home/mark/engauge_dev/digitizer/src/coordsysdlg.hSSQPushButton*buttonCartesiand/home/mark/engauge_dev/digitizer/src/coordsysdlg.hBB!QRadioButton*buttonDegreesd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hNNQRadioButton*buttonGradiansd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hOO QRadioButton*buttonLinearXd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hFFQRadioButton*buttonLinearYd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hJJQRadioButton*buttonLogXd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hGGQRadioButton*buttonLogYd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hKKQRadioButton*buttonOkd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hRRQPushButton*buttonPolard/home/mark/engauge_dev/digitizer/src/coordsysdlg.hCCQRadioButton*buttonRadiansd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hPPQRadioButton*buttonWhatd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hTTQPushButton*groupCoordsd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hAAQButtonGroup*groupUnitsd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hMMQButtonGroup* groupXd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hEEQButtonGroup* groupYd/home/mark/engauge_dev/digitizer/src/coordsysdlg.hIIQButtonGroup*settingsd/home/mark/engauge_dev/digitizer/src/coordsysdlg.h??CoordSettings*b/home/mark/engauge_dev/digitizer/src/curvecmb.cppCurveCmbb/home/mark/engauge_dev/digitizer/src/curvecmb.cpp/@CurveCmbpc. parentQWidget* attachToDocumentb/home/mark/engauge_dev/digitizer/src/curvecmb.cppGXCurveCmbdocDigitDoc*voidslotComboCurveb/home/mark/engauge_dev/digitizer/src/curvecmb.cpp^nCurveCmb toggleboolvoid"slotComboNotCurveb/home/mark/engauge_dev/digitizer/src/curvecmb.cppptCurveCmb toggleboolvoid~ CurveCmbb/home/mark/engauge_dev/digitizer/src/curvecmb.cppBECurveCmbn^/home/mark/engauge_dev/digitizer/src/curvecmb.hCurveCmb^/home/mark/engauge_dev/digitizer/src/curvecmb.h,>QComboBoxCurveCmb^/home/mark/engauge_dev/digitizer/src/curvecmb.h22CurveCmb h. parentQWidget* attachToDocument^/home/mark/engauge_dev/digitizer/src/curvecmb.h6 6(CurveCmbrdocDigitDoc*voidslotComboCurve^/home/mark/engauge_dev/digitizer/src/curvecmb.h; ;$CurveCmbe toggleboolvoid"slotComboNotCurve^/home/mark/engauge_dev/digitizer/src/curvecmb.h= ='CurveCmb toggleboolvoid~ CurveCmb^/home/mark/engauge_dev/digitizer/src/curvecmb.h33CurveCmbp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppCOORD_FRAMEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppdd1COORD_GROUPconst QStringCOORD_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppcc:(ENGAUGE_GROUP_PREFIXconst QString COORD_THETAUNITSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppgg;COORD_GROUPconst QString"COORD_XTHETASCALEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppee=COORD_GROUPconst QStringCOORD_YRSCALEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppff5COORD_GROUPconst QStringFDISCRETIZE_FOREGROUND_THRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppa DISCRETIZE_GROUPconst QStringDDISCRETIZE_FOREGROUND_THRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp_ DISCRETIZE_GROUPconst QString DISCRETIZE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppD(ENGAUGE_GROUP_PREFIXconst QString8DISCRETIZE_HUE_THRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS DISCRETIZE_GROUPconst QString6DISCRETIZE_HUE_THRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQ DISCRETIZE_GROUPconst QStringDDISCRETIZE_INTENSITY_THRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp_ DISCRETIZE_GROUPconst QStringBDISCRETIZE_INTENSITY_THRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp] DISCRETIZE_GROUPconst QString0DISCRETIZE_METHODDEFAULTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppKv DISCRETIZE_GROUPconst QStringFDISCRETIZE_SATURATION_THRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppa DISCRETIZE_GROUPconst QStringDDISCRETIZE_SATURATION_THRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp_ DISCRETIZE_GROUPconst QString<DISCRETIZE_VALUE_THRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppW DISCRETIZE_GROUPconst QString:DISCRETIZE_VALUE_THRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppU DISCRETIZE_GROUPconst QString"EXPORT_DELIMITERSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppll=EXPORT_GROUPconst QStringEXPORT_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppii<e(ENGAUGE_GROUP_PREFIXconst QStringEXPORT_HEADERp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppmm5EXPORT_GROUPconst QStringEXPORT_LAYOUTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppkk5EXPORT_GROUPconst QString,EXPORT_POINTSSELECTIONp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppjjGEXPORT_GROUPconst QString*GRID_DISPLAY_GRIDSETXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppE$GRID_DISPLAY_GROUPconst QString*GRID_DISPLAY_GRIDSETYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppE$GRID_DISPLAY_GROUPconst QString$GRID_DISPLAY_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppH(ENGAUGE_GROUP_PREFIXconst QString.GRID_REMOVAL_COLOR_BLUEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppIt$GRID_REMOVAL_GROUPconst QString0GRID_REMOVAL_COLOR_GREENp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK$GRID_REMOVAL_GROUPconst QString,GRID_REMOVAL_COLOR_REDp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppGe$GRID_REMOVAL_GROUPconst QStringHGRID_REMOVAL_FOREGROUNDTHRESHOLDHIGHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppcz$GRID_REMOVAL_GROUPconst QStringFGRID_REMOVAL_FOREGROUNDTHRESHOLDLOWp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppa $GRID_REMOVAL_GROUPconst QString4GRID_REMOVAL_GAPSEPARATIONp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppOx$GRID_REMOVAL_GROUPconst QString2GRID_REMOVAL_GRIDDISTANCEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppM$GRID_REMOVAL_GROUPconst QString*GRID_REMOVAL_GRIDSETXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppE.$GRID_REMOVAL_GROUPconst QString*GRID_REMOVAL_GRIDSETYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppEl$GRID_REMOVAL_GROUPconst QString$GRID_REMOVAL_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppH(ENGAUGE_GROUP_PREFIXconst QString0GRID_REMOVAL_REMOVECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppKo$GRID_REMOVAL_GROUPconst QString8GRID_REMOVAL_REMOVEGRIDLINESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppSh$GRID_REMOVAL_GROUPconst QString8GRID_REMOVAL_REMOVETHINLINESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS$GRID_REMOVAL_GROUPconst QString4GRID_REMOVAL_THINTHICKNESSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppO⬀$GRID_REMOVAL_GROUPconst QStringHANDLE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp<2(ENGAUGE_GROUP_PREFIXconst QStringHANDLE_HEIGHTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5HANDLE_GROUPconst QStringHANDLE_WIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp3NHANDLE_GROUPconst QStringKEY_CLIPBOARDp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5KEY_GROUPconst QStringKEY_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp6(ENGAUGE_GROUP_PREFIXconst QStringKEY_TREEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp+KEY_GROUPconst QStringKEY_VARIABLESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5MKEY_GROUPconst QStringMATH_DOUBLEMINp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp7MATH_GROUPconst QStringMATH_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp}}8d(ENGAUGE_GROUP_PREFIXconst QString MATH_MAXCOMMANDSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp;MATH_GROUPconst QString(MATH_POWERMOSTSIGMAXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp~~CMATH_GROUPconst QString(MATH_POWERMOSTSIGMINp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppCMATH_GROUPconst QString$MRU_LIST_DOCUMENTSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK0MRU_LIST_DOCUMENTS_GROUPconst QString0MRU_LIST_DOCUMENTS_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppEMRU_LIST_GROUPconst QStringMRU_LIST_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp;(ENGAUGE_GROUP_PREFIXconst QStringMRU_LIST_MAXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp3MRU_LIST_GROUPconst QString0POINTMATCH_ACCEPTEDCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK POINTMATCH_GROUPconst QString POINTMATCH_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDa(ENGAUGE_GROUP_PREFIXconst QString8POINTMATCH_HIGHLIGHTDIAMETERp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppSt POINTMATCH_GROUPconst QString8POINTMATCH_HIGHLIGHTLINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS POINTMATCH_GROUPconst QString0POINTMATCH_REJECTEDCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK POINTMATCH_GROUPconst QString8POINTMATCH_SEPARATIONDEFAULTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS POINTMATCH_GROUPconst QString,POINTMATCH_SIZEDEFAULTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppGe POINTMATCH_GROUPconst QString&POINTSET_AXES_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppJM(ENGAUGE_GROUP_PREFIXconst QString.POINTSET_AXES_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppI&POINTSET_AXES_GROUPconst QString6POINTSET_AXES_LINECONNECTASp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQ&POINTSET_AXES_GROUPconst QString,POINTSET_AXES_LINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppG&POINTSET_AXES_GROUPconst QString4POINTSET_AXES_POINTINCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppO&POINTSET_AXES_GROUPconst QString8POINTSET_AXES_POINTLINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS&POINTSET_AXES_GROUPconst QString6POINTSET_AXES_POINTLINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQg&POINTSET_AXES_GROUPconst QString0POINTSET_AXES_POINTSHAPEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppKg&POINTSET_AXES_GROUPconst QString.POINTSET_AXES_POINTSIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppI&POINTSET_AXES_GROUPconst QString(POINTSET_CURVE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppL(ENGAUGE_GROUP_PREFIXconst QString0POINTSET_CURVE_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppN(POINTSET_CURVE_GROUPconst QString8POINTSET_CURVE_LINECONNECTASp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppV(POINTSET_CURVE_GROUPconst QString.POINTSET_CURVE_LINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppL(POINTSET_CURVE_GROUPconst QString6POINTSET_CURVE_POINTINCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppT(POINTSET_CURVE_GROUPconst QString:POINTSET_CURVE_POINTLINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppX(POINTSET_CURVE_GROUPconst QString8POINTSET_CURVE_POINTLINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppV(POINTSET_CURVE_GROUPconst QString2POINTSET_CURVE_POINTSHAPEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppP(POINTSET_CURVE_GROUPconst QString0POINTSET_CURVE_POINTSIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppN(POINTSET_CURVE_GROUPconst QString,POINTSET_MEASURE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppP܀(ENGAUGE_GROUP_PREFIXconst QString4POINTSET_MEASURE_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppR,POINTSET_MEASURE_GROUPconst QString<POINTSET_MEASURE_LINECONNECTASp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppZg,POINTSET_MEASURE_GROUPconst QString2POINTSET_MEASURE_LINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppP,POINTSET_MEASURE_GROUPconst QString:POINTSET_MEASURE_POINTINCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppX,POINTSET_MEASURE_GROUPconst QString>POINTSET_MEASURE_POINTLINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp\,POINTSET_MEASURE_GROUPconst QString<POINTSET_MEASURE_POINTLINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppZu<,POINTSET_MEASURE_GROUPconst QString6POINTSET_MEASURE_POINTSHAPEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppT,POINTSET_MEASURE_GROUPconst QString4POINTSET_MEASURE_POINTSIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppRk,POINTSET_MEASURE_GROUPconst QString(POINTSET_SCALE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppL(ENGAUGE_GROUP_PREFIXconst QString0POINTSET_SCALE_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK(POINTSET_SCALE_GROUPconst QString8POINTSET_SCALE_LINECONNECTASp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppSk(POINTSET_SCALE_GROUPconst QString.POINTSET_SCALE_LINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppIǀ(POINTSET_SCALE_GROUPconst QString6POINTSET_SCALE_POINTINCOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQ(POINTSET_SCALE_GROUPconst QString:POINTSET_SCALE_POINTLINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppU(POINTSET_SCALE_GROUPconst QString8POINTSET_SCALE_POINTLINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS(POINTSET_SCALE_GROUPconst QString2POINTSET_SCALE_POINTSHAPEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppM(POINTSET_SCALE_GROUPconst QString0POINTSET_SCALE_POINTSIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppK(POINTSET_SCALE_GROUPconst QString>SCANFORAXES_ENDPOINTKERNELWIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp\(ENGAUGE_GROUP_PREFIXconst QString"SCANFORAXES_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppF(ENGAUGE_GROUP_PREFIXconst QString*SCANFORAXES_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppH (ENGAUGE_GROUP_PREFIXconst QString*SCANFORAXES_LINEWIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppH(ENGAUGE_GROUP_PREFIXconst QString,SCANFORAXES_SCANEFFECTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp  J(ENGAUGE_GROUP_PREFIXconst QString&SEGMENT_FILLCORNERSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppASEGMENT_GROUPconst QStringSEGMENT_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp>U(ENGAUGE_GROUP_PREFIXconst QString"SEGMENT_LINECOLORp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp=]SEGMENT_GROUPconst QString SEGMENT_LINESIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp;SEGMENT_GROUPconst QString"SEGMENT_MINPOINTSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp=WSEGMENT_GROUPconst QString<SEGMENT_POINTDEFAULTSEPARATIONp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppWSEGMENT_GROUPconst QString4SEGMENT_POINTMINSEPARATIONp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppO SEGMENT_GROUPconst QStringSESSIONS_AXESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppVV5oSESSIONS_GROUPconst QString(SESSIONS_COORDINATESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppUUCMSESSIONS_GROUPconst QStringSESSIONS_CURVESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppXX9ISESSIONS_GROUPconst QString&SESSIONS_DISCRETIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp\\AzSESSIONS_GROUPconst QString$SESSIONS_EXPORTINGp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp__<SESSIONS_GROUPconst QString(SESSIONS_GRIDDISPLAYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp^^CSESSIONS_GROUPconst QString(SESSIONS_GRIDREMOVALp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp]]CSESSIONS_GROUPconst QStringSESSIONS_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppSS@sgn(ENGAUGE_GROUP_PREFIXconst QString:SESSIONS_INITIALDIGITIZESTATEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppaaUSESSIONS_GROUPconst QString"SESSIONS_MEASURESp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp[[=SESSIONS_GROUPconst QString&SESSIONS_POINTMATCHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppZZASESSIONS_GROUPconst QString"SESSIONS_SCALEBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppWW=TSESSIONS_GROUPconst QString"SESSIONS_SEGMENTSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppYY=lSESSIONS_GROUPconst QString"SESSIONS_SESSIONSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppTT=MSESSIONS_GROUPconst QString.SESSIONS_VIEWSELECTIONSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp``ISESSIONS_GROUPconst QStringVIEW_BACKGROUNDp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppyy9VIEW_GROUPconst QString$VIEW_CURVEGEOMETRYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppzz?zVIEW_GROUPconst QString>VIEW_DIGITIZECURVEPOINTSTOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppttU/VIEW_TOOLBARSconst QStringBVIEW_DIGITIZEMEASUREPOINTSTOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppuuYVIEW_TOOLBARSconst QString VIEW_FILETOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppqq7VIEW_TOOLBARSconst QStringVIEW_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppoo8(ENGAUGE_GROUP_PREFIXconst QString,VIEW_IMAGESCALETOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppssCaVIEW_TOOLBARSconst QString(VIEW_MEASUREGEOMETRYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp{{CVIEW_GROUPconst QStringVIEW_POINTSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppxx1 VIEW_GROUPconst QString$VIEW_SELECTTOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpprr;VIEW_TOOLBARSconst QStringVIEW_STATUSBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppww7VIEW_GROUPconst QStringVIEW_TOOLBARSp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpppp5VVIEW_GROUPconst QString VIEW_ZOOMTOOLBARp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppvv7VIEW_TOOLBARSconst QString$WINDOW_CURVE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppH(ENGAUGE_GROUP_PREFIXconst QString&WINDOW_CURVE_HEIGHTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppA$WINDOW_CURVE_GROUPconst QString$WINDOW_CURVE_WIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp?$WINDOW_CURVE_GROUPconst QStringWINDOW_CURVE_Xp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp7#$WINDOW_CURVE_GROUPconst QStringWINDOW_CURVE_Yp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp7$WINDOW_CURVE_GROUPconst QString"WINDOW_HELP_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppF(ENGAUGE_GROUP_PREFIXconst QString$WINDOW_HELP_HEIGHTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp? "WINDOW_HELP_GROUPconst QString"WINDOW_HELP_WIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp="WINDOW_HELP_GROUPconst QStringWINDOW_HELP_Xp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5"WINDOW_HELP_GROUPconst QStringWINDOW_HELP_Yp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5l"WINDOW_HELP_GROUPconst QString8WINDOW_MAIN_COMBOBOXWIDTHMINp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppS"WINDOW_MAIN_GROUPconst QString*WINDOW_MAIN_FONT_NAMEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppE6"WINDOW_MAIN_GROUPconst QString2WINDOW_MAIN_FONT_OVERRIDEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppM"WINDOW_MAIN_GROUPconst QString*WINDOW_MAIN_FONT_SIZEp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppED"WINDOW_MAIN_GROUPconst QString"WINDOW_MAIN_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppF⦀(ENGAUGE_GROUP_PREFIXconst QString$WINDOW_MAIN_HEIGHTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp?z"WINDOW_MAIN_GROUPconst QString"WINDOW_MAIN_WIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp="WINDOW_MAIN_GROUPconst QStringWINDOW_MAIN_Xp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5"WINDOW_MAIN_GROUPconst QStringWINDOW_MAIN_Yp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp5z"WINDOW_MAIN_GROUPconst QString(WINDOW_MEASURE_GROUPp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppL(ENGAUGE_GROUP_PREFIXconst QString*WINDOW_MEASURE_HEIGHTp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppE(WINDOW_MEASURE_GROUPconst QString(WINDOW_MEASURE_WIDTHp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppC(WINDOW_MEASURE_GROUPconst QString WINDOW_MEASURE_Xp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp;g(WINDOW_MEASURE_GROUPconst QString WINDOW_MEASURE_Yp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp;J(WINDOW_MEASURE_GROUPconst QString^DefaultSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp DefaultSettingsarchiveSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsvoidgetAxesStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsPointSetStyle&getComboBoxWidthMinp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsint getCoordSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsaCoordSettingsgetCurveStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsmpointSetIndexintPointSetStyle*getDiscretizeSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings$DiscretizeSettingsgetDoubleMinp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings double"getExportSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingspExportSettings,getGridDisplayGridSetXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingstGridSet,getGridDisplayGridSetYp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings/GridSet,getGridRemovalSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp DefaultSettings&GridRemovalSettingsgetHandleSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp DefaultSettings QSizegetKeyClipboardp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsintgetKeyTreep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings/intgetKeyVariablesp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsintgetMaxCommandsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp!$DefaultSettingsintgetMeasureStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp&;DefaultSettingspointSetIndexintPointSetStylegetMruDocumentsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppBEDefaultSettingsQStringListgetMruMaxp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp=@DefaultSettingsint<getPointMatchHighlightDiameterp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppGJDefaultSettingsgint<getPointMatchHighlightLineSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppLODefaultSettingsint*getPointMatchSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQTDefaultSettings$PointMatchSettings$getPowerMostSigMaxp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppVYDefaultSettingsint$getPowerMostSigMinp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp[^DefaultSettingsnintgetScaleStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp`cDefaultSettingsPointSetStyleBgetScanForAxesEndpointKernelWidthp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppehDefaultSettingstint.getScanForAxesLineColorp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppjmDefaultSettings1 Color.getScanForAxesLineWidthp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpporDefaultSettingsFint0getScanForAxesScanEffectp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpptwDefaultSettings܀bool8getSegmentPointMinSeparationp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppy|DefaultSettingsint$getSegmentSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp~DefaultSettingsSegmentSettings&getSessionsSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings SessionsSettings"getViewBackgroundp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsk&BackgroundSelection(getViewCurveGeometryp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsboolBgetViewDigitizeCurvePointsToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsboolFgetViewDigitizeMeasurePointsToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsbool$getViewFileToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingspbool0getViewImageScaleToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsbool,getViewMeasureGeometryp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingstboolgetViewPointsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings$ViewPointSelection(getViewSelectToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsbool getViewStatusBarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsbool$getViewZoomToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsbool,getWindowCurvePositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings QPoint$getWindowCurveSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings QSize*getWindowHelpPositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsv QPoint"getWindowHelpSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsU QSize*getWindowMainFontNamep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsQString2getWindowMainFontOverridep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsWbool*getWindowMainFontSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsint*getWindowMainPositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsg QPoint"getWindowMainSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsG QSize0getWindowMeasurePositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings QPoint(getWindowMeasureSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings QSizeFinitializeSettingsToFactoryDefaultsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingstvoid(loadArchivedSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsvvoid loadMruDocumentsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingscrArchiverQSettings&void"loadPointSetStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings  rStylePointSetStyle&rArchiverQSettings&keyPointShapeconst QStringkeyPointSizeconst QString keyPointLineSizeconst QString"keyPointLineColorconst QStringkeyPointInColorconst QStringkeyLineSizeconst QStringkeyLineColorconst QString keyLineConnectAsconst QStringvoid$loadPointSetStylesp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp/DefaultSettings isCurveboolrStyleList$PointSetStyleList&rArchiverQSettings&keyGroupPrefixconst QStringkeyPointShapeconst QStringkeyPointSizeconst QString keyPointLineSizeconst QString"keyPointLineColorconst QStringkeyPointInColorconst QStringkeyLineSizeconst QStringkeyLineColorconst QString keyLineConnectAsconst QStringvoidsetAxesStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings stylePointSetStylevoid&setComboBoxWidthMinp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp14DefaultSettingsd comboBoxWidthMinintvoid setCoordSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp6<DefaultSettings coordCoordSettingsvoidsetCurveStylesp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp>ADefaultSettingsrStyles0const PointSetStyleList&void*setDiscretizeSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppCFDefaultSettingsgdiscretize$DiscretizeSettingsvoid"setExportSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppHNDefaultSettingsexportSettingsExportSettingsvoid,setGridDisplaySettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppUYDefaultSettingsgrid GridMeshSettingsvoid,setGridRemovalSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppPSDefaultSettingsgrid&GridRemovalSettingsvoid setMeasureStylesp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp[^DefaultSettingsrStyles0const PointSetStyleList&voidsetMruDocumentsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp`cDefaultSettingserMruDocuments$const QStringList&void*setPointMatchSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingst match$PointMatchSettingsvoidsetScaleStylep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings stylePointSetStylevoid$setSegmentSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingssegSegmentSettingsvoid&setSessionsSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings sessionsSettings SessionsSettingsvoid"setViewBackgroundp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppehDefaultSettingsview&BackgroundSelectionvoid(setViewCurveGeometryp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppjmDefaultSettingsviewboolvoidBsetViewDigitizeCurvePointsToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpporDefaultSettingsviewboolvoidFsetViewDigitizeMeasurePointsToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpptwDefaultSettingsviewboolvoid$setViewFileToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppy|DefaultSettingsviewboolvoid0setViewImageScaleToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cpp~DefaultSettingsviewboolvoid,setViewMeasureGeometryp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsgviewboolvoidsetViewPointsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsview$ViewPointSelectionvoid(setViewSelectToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsviewboolvoid setViewStatusBarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsviewboolvoid$setViewZoomToolbarp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsgviewboolvoid,setWindowCurvePositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingspos QPointvoid$setWindowCurveSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingssize QSizevoid*setWindowHelpPositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingspos QPointvoid"setWindowHelpSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingssize QSizevoid*setWindowMainPositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingspos QPointvoid"setWindowMainSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingssize QSizevoid0setWindowMeasurePositionp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingsdpos QPointvoid(setWindowMeasureSizep/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettingssize QSizevoid"~ DefaultSettingsp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppDefaultSettings(ENGAUGE_GROUP_PREFIXp/home/mark/engauge_dev/digitizer/src/defaultsettings.cppQQ.const QStringl/home/mark/engauge_dev/digitizer/src/defaultsettings.hDefaultSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hB<bDefaultSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hDefaultSettingsarchiveSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h DefaultSettings avoid createl/home/mark/engauge_dev/digitizer/src/defaultsettings.hFJDefaultSettingssgnvoidvoiddestroyl/home/mark/engauge_dev/digitizer/src/defaultsettings.hKRDefaultSettingsttevoidvoidgetAxesStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h DefaultSettingsPointSetStyle&getComboBoxWidthMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.hDefaultSettingsint getCoordSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hYY$DefaultSettingsCoordSettingsgetCurveStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h2DefaultSettingspointSetIndexintPointSetStyle*getDiscretizeSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h.DefaultSettings$DiscretizeSettingsgetDoubleMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.hh hDefaultSettings double"getExportSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hZZ&DefaultSettingsExportSettings,getGridDisplayGridSetXl/home/mark/engauge_dev/digitizer/src/defaultsettings.h| |$DefaultSettingsGridSet,getGridDisplayGridSetYl/home/mark/engauge_dev/digitizer/src/defaultsettings.h} }$DefaultSettingsGridSet,getGridRemovalSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h{{0DefaultSettings&GridRemovalSettingsgetHandleSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.hx xDefaultSettingsʀ QSizegetKeyClipboardl/home/mark/engauge_dev/digitizer/src/defaultsettings.huuDefaultSettingsintgetKeyTreel/home/mark/engauge_dev/digitizer/src/defaultsettings.hvvDefaultSettingsintgetKeyVariablesl/home/mark/engauge_dev/digitizer/src/defaultsettings.hwwDefaultSettingsu9intgetMaxCommandsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hiiDefaultSettings~intgetMeasureStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h4DefaultSettingsppointSetIndexintPointSetStylegetMruDocumentsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h!DefaultSettingsQStringListgetMruMaxl/home/mark/engauge_dev/digitizer/src/defaultsettings.hDefaultSettingsint<getPointMatchHighlightDiameterl/home/mark/engauge_dev/digitizer/src/defaultsettings.h~~(DefaultSettingsint<getPointMatchHighlightLineSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h(DefaultSettingsint*getPointMatchSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h.DefaultSettings$PointMatchSettings$getPowerMostSigMaxl/home/mark/engauge_dev/digitizer/src/defaultsettings.hffDefaultSettingsint$getPowerMostSigMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.hggDefaultSettingsu9intgetScaleStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h!DefaultSettingsPointSetStyleBgetScanForAxesEndpointKernelWidthl/home/mark/engauge_dev/digitizer/src/defaultsettings.h+DefaultSettingsint.getScanForAxesLineColorl/home/mark/engauge_dev/digitizer/src/defaultsettings.h #DefaultSettings  Color.getScanForAxesLineWidthl/home/mark/engauge_dev/digitizer/src/defaultsettings.h!DefaultSettingsint0getScanForAxesScanEffectl/home/mark/engauge_dev/digitizer/src/defaultsettings.h #DefaultSettingsbool8getSegmentPointMinSeparationl/home/mark/engauge_dev/digitizer/src/defaultsettings.hzz&DefaultSettingsint$getSegmentSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hyy(DefaultSettingssnoSegmentSettings&getSessionsSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h*DefaultSettings SessionsSettings"getViewBackgroundl/home/mark/engauge_dev/digitizer/src/defaultsettings.hcc+DefaultSettingst&BackgroundSelection(getViewCurveGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.hd dDefaultSettingsboolBgetViewDigitizeCurvePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h^ ^,DefaultSettingseboolFgetViewDigitizeMeasurePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h_ _.DefaultSettings bool$getViewFileToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h[ [DefaultSettingsbool0getViewImageScaleToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h] ]#DefaultSettingsebool,getViewMeasureGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.he e!DefaultSettingsboolgetViewPointsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hbb&DefaultSettings$ViewPointSelection(getViewSelectToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h\ \DefaultSettingsbool getViewStatusBarl/home/mark/engauge_dev/digitizer/src/defaultsettings.ha aDefaultSettingsrbool$getViewZoomToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h` `DefaultSettingsrbool,getWindowCurvePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.hj j#DefaultSettings QPoint$getWindowCurveSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.hk kDefaultSettings QSize*getWindowHelpPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.hl l"DefaultSettingsy QPoint"getWindowHelpSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.hm mDefaultSettings QSize*getWindowMainFontNamel/home/mark/engauge_dev/digitizer/src/defaultsettings.hs s#DefaultSettingsQString2getWindowMainFontOverridel/home/mark/engauge_dev/digitizer/src/defaultsettings.hr r$DefaultSettingsbool*getWindowMainFontSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.httDefaultSettingsint*getWindowMainPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.hn n"DefaultSettingsހ QPoint"getWindowMainSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.ho oDefaultSettings QSize0getWindowMeasurePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.hp p%DefaultSettings QPoint(getWindowMeasureSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.hq q DefaultSettings QSizeFinitializeSettingsToFactoryDefaultsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h .DefaultSettingsvoidinstancel/home/mark/engauge_dev/digitizer/src/defaultsettings.hSVDefaultSettingsSvoid DefaultSettings&(loadArchivedSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h DefaultSettings evoid loadMruDocumentsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h /DefaultSettingsrArchiverQSettings&void"loadPointSetStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h %DefaultSettings i  rStylePointSetStyle&rArchiverQSettings&keyPointShapeconst QStringkeyPointSizeconst QString keyPointLineSizeconst QString"keyPointLineColorconst QStringkeyPointInColorconst QStringkeyLineSizeconst QStringkeyLineColorconst QString keyLineConnectAsconst QStringvoid$loadPointSetStylesl/home/mark/engauge_dev/digitizer/src/defaultsettings.h %DefaultSettings isCurveboolrStyleList$PointSetStyleList&rArchiverQSettings&keyGroupPrefixconst QStringkeyPointShapeconst QStringkeyPointSizeconst QString keyPointLineSizeconst QString"keyPointLineColorconst QStringkeyPointInColorconst QStringkeyLineSizeconst QStringkeyLineColorconst QString keyLineConnectAsconst QStringvoidsetAxesStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h *DefaultSettings stylePointSetStylevoid&setComboBoxWidthMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 2DefaultSettings comboBoxWidthMinintvoid setCoordSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h .DefaultSettings coordCoordSettingsvoidsetCurveStylesl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 9DefaultSettingsrStyles0const PointSetStyleList&void*setDiscretizeSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h =DefaultSettings &discretize$DiscretizeSettingsvoid"setExportSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 9DefaultSettingsexportSettingsExportSettingsvoid,setGridDisplaySettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 6DefaultSettingsgrid GridMeshSettingsvoid,setGridRemovalSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 9DefaultSettings ;grid&GridRemovalSettingsvoid setMeasureStylesl/home/mark/engauge_dev/digitizer/src/defaultsettings.h ;DefaultSettingsrStyles0const PointSetStyleList&voidsetMruDocumentsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h :DefaultSettingsrMruDocuments$const QStringList&voidsetMruMaxl/home/mark/engauge_dev/digitizer/src/defaultsettings.h DefaultSettings mruMaxintvoid*setPointMatchSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 8DefaultSettings > match$PointMatchSettingsvoidsetScaleStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h +DefaultSettings J stylePointSetStylevoid$setSegmentSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 0DefaultSettingssegSegmentSettingsvoid&setSessionsSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h ?DefaultSettings  sessionsSettings SessionsSettingsvoid"setViewBackgroundl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 4DefaultSettings *view&BackgroundSelectionvoid(setViewCurveGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.h (DefaultSettings +viewboolvoidBsetViewDigitizeCurvePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 5DefaultSettingsviewboolvoidFsetViewDigitizeMeasurePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h 7DefaultSettingsviewboolvoid$setViewFileToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h &DefaultSettings 0viewboolvoid0setViewImageScaleToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h ,DefaultSettingsviewboolvoid,setViewMeasureGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.h *DefaultSettingsviewboolvoidsetViewPointsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h /DefaultSettings 4view$ViewPointSelectionvoid(setViewSelectToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h (DefaultSettings 4viewboolvoid setViewStatusBarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h $DefaultSettingsviewboolvoid$setViewZoomToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h &DefaultSettings 9viewboolvoid,setWindowCurvePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h +DefaultSettingspos QPointvoid$setWindowCurveSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h 'DefaultSettings Dsize QSizevoid*setWindowHelpPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h *DefaultSettings Gpos QPointvoid"setWindowHelpSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h &DefaultSettingssize QSizevoid*setWindowMainPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h *DefaultSettingspos QPointvoid"setWindowMainSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h &DefaultSettingssize QSizevoid0setWindowMeasurePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h -DefaultSettings pos QPointvoid(setWindowMeasureSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h )DefaultSettingssize QSizevoid"~ DefaultSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hDefaultSettings createl/home/mark/engauge_dev/digitizer/src/defaultsettings.hFJDefaultSettingssgnvoidvoiddestroyl/home/mark/engauge_dev/digitizer/src/defaultsettings.hKRDefaultSettingsttevoidvoidinstancel/home/mark/engauge_dev/digitizer/src/defaultsettings.hSVDefaultSettingsSvoid DefaultSettings&6m_axesStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h..PointSetStylem_coordSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h!CoordSettingsm_curveStylesl/home/mark/engauge_dev/digitizer/src/defaultsettings.h00#"PointSetStyleList(m_discretizeSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h+++$DiscretizeSettingsm_doubleMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.h  double m_exportSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h#ExportSettings*m_gridDisplayGridSetXl/home/mark/engauge_dev/digitizer/src/defaultsettings.h" "!GridSet*m_gridDisplayGridSetYl/home/mark/engauge_dev/digitizer/src/defaultsettings.h# #!GridSet*m_gridRemovalSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h-&GridRemovalSettingsm_handleSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QSizem_keyClipboardl/home/mark/engauge_dev/digitizer/src/defaultsettings.hintm_keyTreel/home/mark/engauge_dev/digitizer/src/defaultsettings.hintm_keyVariablesl/home/mark/engauge_dev/digitizer/src/defaultsettings.hintm_maxCommandsl/home/mark/engauge_dev/digitizer/src/defaultsettings.hunsigned intm_measureStylesl/home/mark/engauge_dev/digitizer/src/defaultsettings.h11%"PointSetStyleListm_mruDocumentsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h55QStringListm_mruMaxl/home/mark/engauge_dev/digitizer/src/defaultsettings.h44int:m_pointMatchHighlightDiameterl/home/mark/engauge_dev/digitizer/src/defaultsettings.h&&%int:m_pointMatchHighlightLineSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h''%int(m_pointMatchSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h((+$PointMatchSettings"m_powerMostSigMaxl/home/mark/engauge_dev/digitizer/src/defaultsettings.hint"m_powerMostSigMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.hintm_scaleStylel/home/mark/engauge_dev/digitizer/src/defaultsettings.h//PointSetStyle@m_scanForAxesEndpointKernelWidthl/home/mark/engauge_dev/digitizer/src/defaultsettings.h::(int,m_scanForAxesLineColorl/home/mark/engauge_dev/digitizer/src/defaultsettings.h8 8  Color,m_scanForAxesLineWidthl/home/mark/engauge_dev/digitizer/src/defaultsettings.h99int.m_scanForAxesScanEffectl/home/mark/engauge_dev/digitizer/src/defaultsettings.h; ; bool6m_segmentPointMinSeparationl/home/mark/engauge_dev/digitizer/src/defaultsettings.h#int"m_segmentSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h%SegmentSettings$m_sessionsSettingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h' SessionsSettingsm_settingsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h& DefaultSettings* m_viewBackgroundl/home/mark/engauge_dev/digitizer/src/defaultsettings.h(&BackgroundSelection&m_viewCurveGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.h bool@m_viewDigitizeCurvePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h )boolDm_viewDigitizeMeasurePointsToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h +bool"m_viewFileToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h bool.m_viewImageScaleToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h bool*m_viewMeasureGeometryl/home/mark/engauge_dev/digitizer/src/defaultsettings.h boolm_viewPointsl/home/mark/engauge_dev/digitizer/src/defaultsettings.h#$ViewPointSelection&m_viewSelectToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h boolm_viewStatusBarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h bool"m_viewZoomToolbarl/home/mark/engauge_dev/digitizer/src/defaultsettings.h bool*m_windowCurvePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QPoint"m_windowCurveSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QSize(m_windowHelpPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QPoint m_windowHelpSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QSize8m_windowMainComboBoxWidthMinl/home/mark/engauge_dev/digitizer/src/defaultsettings.h  $int(m_windowMainFontNamel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QString0m_windowMainFontOverridel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  !bool(m_windowMainFontSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  int(m_windowMainPositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QPoint m_windowMainSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QSize.m_windowMeasurePositionl/home/mark/engauge_dev/digitizer/src/defaultsettings.h " QPoint&m_windowMeasureSizel/home/mark/engauge_dev/digitizer/src/defaultsettings.h  QSizef/home/mark/engauge_dev/digitizer/src/digitdebug.cpp DigitDebugf/home/mark/engauge_dev/digitizer/src/digitdebug.cpp-/DigitDebug.guflagNamef/home/mark/engauge_dev/digitizer/src/digitdebug.cppADDigitDebug jflag FlagsQString"flagStringsLookupf/home/mark/engauge_dev/digitizer/src/digitdebug.cppKsDigitDebugflag Flags lookup LookupQStringgenericDebugf/home/mark/engauge_dev/digitizer/src/digitdebug.cppu}DigitDebug؈flag FlagsstrQStringvoidsetDebugFlagf/home/mark/engauge_dev/digitizer/src/digitdebug.cpp5?DigitDebugwstrQStringboolusageHelpf/home/mark/engauge_dev/digitizer/src/digitdebug.cppFIDigitDebugflag FlagsQStringusageLongf/home/mark/engauge_dev/digitizer/src/digitdebug.cppDigitDebugQStringusageShortf/home/mark/engauge_dev/digitizer/src/digitdebug.cppDigitDebug ?QString~ DigitDebugf/home/mark/engauge_dev/digitizer/src/digitdebug.cpp13DigitDebugb/home/mark/engauge_dev/digitizer/src/digitdebug.hDigitDebugb/home/mark/engauge_dev/digitizer/src/digitdebug.h$]DigitDebugb/home/mark/engauge_dev/digitizer/src/digitdebug.h((DigitDebug.guctorb/home/mark/engauge_dev/digitizer/src/digitdebug.h99GDigitDebugstrQStringvoidcurvecmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h;;KDigitDebugstrQStringvoiddtorb/home/mark/engauge_dev/digitizer/src/digitdebug.h::GDigitDebugstrQStringvoidflagNameb/home/mark/engauge_dev/digitizer/src/digitdebug.hUU'DigitDebugaflag FlagsQString"flagStringsLookupb/home/mark/engauge_dev/digitizer/src/digitdebug.hRR?DigitDebuglflag Flags lookup LookupQStringgenericDebugb/home/mark/engauge_dev/digitizer/src/digitdebug.h\\5DigitDebug flag FlagsstrQStringvoidmeasurecmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h<<MDigitDebugstrQStringvoidrefreshb/home/mark/engauge_dev/digitizer/src/digitdebug.h==JDigitDebug strQStringvoidscanningb/home/mark/engauge_dev/digitizer/src/digitdebug.h>>KDigitDebugstrQStringvoidsetDebugFlagb/home/mark/engauge_dev/digitizer/src/digitdebug.hFF)DigitDebugstrQStringboolusageHelpb/home/mark/engauge_dev/digitizer/src/digitdebug.hVV(DigitDebugiflag FlagsQStringusageLongb/home/mark/engauge_dev/digitizer/src/digitdebug.hBB"DigitDebug voidQStringusageShortb/home/mark/engauge_dev/digitizer/src/digitdebug.hAA#DigitDebugvoidQString~ DigitDebugb/home/mark/engauge_dev/digitizer/src/digitdebug.h))DigitDebug{ctorb/home/mark/engauge_dev/digitizer/src/digitdebug.h99GDigitDebugstrQStringvoidcurvecmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h;;KDigitDebugstrQStringvoiddtorb/home/mark/engauge_dev/digitizer/src/digitdebug.h::GDigitDebugstrQStringvoidmeasurecmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h<<MDigitDebugstrQStringvoidrefreshb/home/mark/engauge_dev/digitizer/src/digitdebug.h==JDigitDebug strQStringvoidscanningb/home/mark/engauge_dev/digitizer/src/digitdebug.h>>KDigitDebugstrQStringvoid Ctorb/home/mark/engauge_dev/digitizer/src/digitdebug.h//intCurveCmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h11intDtorb/home/mark/engauge_dev/digitizer/src/digitdebug.h00 intLookupFlagNameb/home/mark/engauge_dev/digitizer/src/digitdebug.hLLintLookupUsageHelpb/home/mark/engauge_dev/digitizer/src/digitdebug.hMMintMaxFlagsb/home/mark/engauge_dev/digitizer/src/digitdebug.h55intMeasureCmbb/home/mark/engauge_dev/digitizer/src/digitdebug.h22intRefreshb/home/mark/engauge_dev/digitizer/src/digitdebug.h33 intScanningb/home/mark/engauge_dev/digitizer/src/digitdebug.h44intdebugMaskb/home/mark/engauge_dev/digitizer/src/digitdebug.hYY"unsigned longb/home/mark/engauge_dev/digitizer/src/digitdef.cppdelimiterb/home/mark/engauge_dev/digitizer/src/digitdef.cpp7Cpc.del ExportDelimitersQStringinitGlobalsb/home/mark/engauge_dev/digitizer/src/digitdef.cppEXvoidmmUnitizeb/home/mark/engauge_dev/digitizer/src/digitdef.cppZh coordCoordSettingsmmUnitsGridSetStringsb/home/mark/engauge_dev/digitizer/src/digitdef.cpp. .QStringListVersionNumberb/home/mark/engauge_dev/digitizer/src/digitdef.cpp((QString.VersionNumbersSupportedb/home/mark/engauge_dev/digitizer/src/digitdef.cpp) )#QStringListfreewareCaptionb/home/mark/engauge_dev/digitizer/src/digitdef.cpp4 4 const char*^/home/mark/engauge_dev/digitizer/src/digitdef.h CoordSettings^/home/mark/engauge_dev/digitizer/src/digitdef.h4: frame^/home/mark/engauge_dev/digitizer/src/digitdef.h66ReferenceFramethetaUnits^/home/mark/engauge_dev/digitizer/src/digitdef.h9 9ThetaUnitsxThetaScale^/home/mark/engauge_dev/digitizer/src/digitdef.h77 ScaleyRScale^/home/mark/engauge_dev/digitizer/src/digitdef.h88 Scale$DiscretizeSettings^/home/mark/engauge_dev/digitizer/src/digitdef.h  discretizeMethod^/home/mark/engauge_dev/digitizer/src/digitdef.h# DiscretizeMethod.foregroundThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hint,foregroundThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hint hueThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hinthueThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hint,intensityThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hint*intensityThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hint.saturationThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hint,saturationThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hint$valueThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hint"valueThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hintExportSettings^/home/mark/engauge_dev/digitizer/src/digitdef.h[adelimiters^/home/mark/engauge_dev/digitizer/src/digitdef.h__ ExportDelimiters header^/home/mark/engauge_dev/digitizer/src/digitdef.h``ExportHeader layout^/home/mark/engauge_dev/digitizer/src/digitdef.h^^ExportLayoutpointsSelection^/home/mark/engauge_dev/digitizer/src/digitdef.h]]'*ExportPointsSelection GridMeshSettings^/home/mark/engauge_dev/digitizer/src/digitdef.hp}  countX^/home/mark/engauge_dev/digitizer/src/digitdef.huu int countY^/home/mark/engauge_dev/digitizer/src/digitdef.hvv intgridSetX^/home/mark/engauge_dev/digitizer/src/digitdef.hs sGridSetgridSetY^/home/mark/engauge_dev/digitizer/src/digitdef.ht tGridSetinitialized^/home/mark/engauge_dev/digitizer/src/digitdef.hrrbool startX^/home/mark/engauge_dev/digitizer/src/digitdef.hy y double startY^/home/mark/engauge_dev/digitizer/src/digitdef.hz z double stepX^/home/mark/engauge_dev/digitizer/src/digitdef.hw w double stepY^/home/mark/engauge_dev/digitizer/src/digitdef.hx x double stopX^/home/mark/engauge_dev/digitizer/src/digitdef.h{ { double stopY^/home/mark/engauge_dev/digitizer/src/digitdef.h| | double&GridRemovalSettings^/home/mark/engauge_dev/digitizer/src/digitdef.h  color^/home/mark/engauge_dev/digitizer/src/digitdef.h  QColor.foregroundThresholdHigh^/home/mark/engauge_dev/digitizer/src/digitdef.hint,foregroundThresholdLow^/home/mark/engauge_dev/digitizer/src/digitdef.hintgapSeparation^/home/mark/engauge_dev/digitizer/src/digitdef.h  doublegridDistance^/home/mark/engauge_dev/digitizer/src/digitdef.h  doublegridMesh^/home/mark/engauge_dev/digitizer/src/digitdef.h GridMeshSettingsremoveColor^/home/mark/engauge_dev/digitizer/src/digitdef.hboolremoveGridlines^/home/mark/engauge_dev/digitizer/src/digitdef.hboolremoveThinLines^/home/mark/engauge_dev/digitizer/src/digitdef.hboolthinThickness^/home/mark/engauge_dev/digitizer/src/digitdef.h  double$PointMatchSettings^/home/mark/engauge_dev/digitizer/src/digitdef.hacceptedColor^/home/mark/engauge_dev/digitizer/src/digitdef.h ColorpointSeparation^/home/mark/engauge_dev/digitizer/src/digitdef.hintpointSize^/home/mark/engauge_dev/digitizer/src/digitdef.hintrejectedColor^/home/mark/engauge_dev/digitizer/src/digitdef.h Color"PointMatchTriplet^/home/mark/engauge_dev/digitizer/src/digitdef.hcorrelation^/home/mark/engauge_dev/digitizer/src/digitdef.h  doublex^/home/mark/engauge_dev/digitizer/src/digitdef.hinty^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointSetStyle^/home/mark/engauge_dev/digitizer/src/digitdef.hlineColor^/home/mark/engauge_dev/digitizer/src/digitdef.h ColorlineConnectAs^/home/mark/engauge_dev/digitizer/src/digitdef.hLineConnectAslineSize^/home/mark/engauge_dev/digitizer/src/digitdef.h LineSizepointInColor^/home/mark/engauge_dev/digitizer/src/digitdef.h ColorpointLineColor^/home/mark/engauge_dev/digitizer/src/digitdef.h   ColorpointLineSize^/home/mark/engauge_dev/digitizer/src/digitdef.h  PointLineSizepointShape^/home/mark/engauge_dev/digitizer/src/digitdef.h PointShapepointSize^/home/mark/engauge_dev/digitizer/src/digitdef.h PointSizeSegmentSettings^/home/mark/engauge_dev/digitizer/src/digitdef.hfillCorners^/home/mark/engauge_dev/digitizer/src/digitdef.hboollineColor^/home/mark/engauge_dev/digitizer/src/digitdef.h ColorlineSize^/home/mark/engauge_dev/digitizer/src/digitdef.h LineSizeminPoints^/home/mark/engauge_dev/digitizer/src/digitdef.hintpointSeparation^/home/mark/engauge_dev/digitizer/src/digitdef.hint SessionsSettings^/home/mark/engauge_dev/digitizer/src/digitdef.haxes^/home/mark/engauge_dev/digitizer/src/digitdef.h  boolcoordinates^/home/mark/engauge_dev/digitizer/src/digitdef.hbool curves^/home/mark/engauge_dev/digitizer/src/digitdef.h  booldiscretize^/home/mark/engauge_dev/digitizer/src/digitdef.hboolexporting^/home/mark/engauge_dev/digitizer/src/digitdef.hboolgridDisplay^/home/mark/engauge_dev/digitizer/src/digitdef.hboolgridRemoval^/home/mark/engauge_dev/digitizer/src/digitdef.hbool(initialDigitizeState^/home/mark/engauge_dev/digitizer/src/digitdef.h$DigitizeStatemeasures^/home/mark/engauge_dev/digitizer/src/digitdef.hboolpointMatch^/home/mark/engauge_dev/digitizer/src/digitdef.h  boolscaleBar^/home/mark/engauge_dev/digitizer/src/digitdef.h  boolsegments^/home/mark/engauge_dev/digitizer/src/digitdef.h  boolsessions^/home/mark/engauge_dev/digitizer/src/digitdef.hboolviewSelections^/home/mark/engauge_dev/digitizer/src/digitdef.hbooldelimiter^/home/mark/engauge_dev/digitizer/src/digitdef.h!!'adel ExportDelimitersQStringsAllButCount^/home/mark/engauge_dev/digitizer/src/digitdef.hgg intAllButStart^/home/mark/engauge_dev/digitizer/src/digitdef.hhh intAllButStep^/home/mark/engauge_dev/digitizer/src/digitdef.hii intAllButStop^/home/mark/engauge_dev/digitizer/src/digitdef.hjj int&AllCurvesOnEachLine^/home/mark/engauge_dev/digitizer/src/digitdef.hHHintAxisState^/home/mark/engauge_dev/digitizer/src/digitdef.h intBlankBackground^/home/mark/engauge_dev/digitizer/src/digitdef.hintCartesian^/home/mark/engauge_dev/digitizer/src/digitdef.h!! int$ComboboxSwatchSize^/home/mark/engauge_dev/digitizer/src/digitdef.h !const int Commas^/home/mark/engauge_dev/digitizer/src/digitdef.hOOintContour^/home/mark/engauge_dev/digitizer/src/digitdef.h int Cross^/home/mark/engauge_dev/digitizer/src/digitdef.h intCurveState^/home/mark/engauge_dev/digitizer/src/digitdef.h intDiamond^/home/mark/engauge_dev/digitizer/src/digitdef.h intDigitBlack^/home/mark/engauge_dev/digitizer/src/digitdef.hintDigitBlue^/home/mark/engauge_dev/digitizer/src/digitdef.h intDigitCyan^/home/mark/engauge_dev/digitizer/src/digitdef.h intDigitGold^/home/mark/engauge_dev/digitizer/src/digitdef.h intDigitGreen^/home/mark/engauge_dev/digitizer/src/digitdef.h intDigitMagenta^/home/mark/engauge_dev/digitizer/src/digitdef.hintDigitMaxColor^/home/mark/engauge_dev/digitizer/src/digitdef.hintDigitRed^/home/mark/engauge_dev/digitizer/src/digitdef.h int DigitTransparent^/home/mark/engauge_dev/digitizer/src/digitdef.hintDigitYellow^/home/mark/engauge_dev/digitizer/src/digitdef.h int(DiscretizeForeground^/home/mark/engauge_dev/digitizer/src/digitdef.hint.DiscretizeForegroundMax^/home/mark/engauge_dev/digitizer/src/digitdef.h 'const intDiscretizeHue^/home/mark/engauge_dev/digitizer/src/digitdef.hint DiscretizeHueMax^/home/mark/engauge_dev/digitizer/src/digitdef.h  const int&DiscretizeIntensity^/home/mark/engauge_dev/digitizer/src/digitdef.hint,DiscretizeIntensityMax^/home/mark/engauge_dev/digitizer/src/digitdef.h &const intDiscretizeNone^/home/mark/engauge_dev/digitizer/src/digitdef.hint(DiscretizeSaturation^/home/mark/engauge_dev/digitizer/src/digitdef.hint.DiscretizeSaturationMax^/home/mark/engauge_dev/digitizer/src/digitdef.h 'const intDiscretizeValue^/home/mark/engauge_dev/digitizer/src/digitdef.hint$DiscretizeValueMax^/home/mark/engauge_dev/digitizer/src/digitdef.h "const intEyedropperHotX^/home/mark/engauge_dev/digitizer/src/digitdef.h const intEyedropperHotY^/home/mark/engauge_dev/digitizer/src/digitdef.h const intGridTypeDisplay^/home/mark/engauge_dev/digitizer/src/digitdef.hintGridTypeRemoval^/home/mark/engauge_dev/digitizer/src/digitdef.hintHeaderGnuplot^/home/mark/engauge_dev/digitizer/src/digitdef.hXXintHeaderNone^/home/mark/engauge_dev/digitizer/src/digitdef.hVV intHeaderSimple^/home/mark/engauge_dev/digitizer/src/digitdef.hWWintLineSize1^/home/mark/engauge_dev/digitizer/src/digitdef.hintLineSize2^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize3^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize4^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize5^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize6^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize7^/home/mark/engauge_dev/digitizer/src/digitdef.h intLineSize8^/home/mark/engauge_dev/digitizer/src/digitdef.h int Linear^/home/mark/engauge_dev/digitizer/src/digitdef.h((intLog^/home/mark/engauge_dev/digitizer/src/digitdef.h))int$MaxConnectAsMethod^/home/mark/engauge_dev/digitizer/src/digitdef.hintMaxLineSize^/home/mark/engauge_dev/digitizer/src/digitdef.h int MaxPointLineSize^/home/mark/engauge_dev/digitizer/src/digitdef.hintMaxPointShape^/home/mark/engauge_dev/digitizer/src/digitdef.hintMaxPointSize^/home/mark/engauge_dev/digitizer/src/digitdef.hintMeasureState^/home/mark/engauge_dev/digitizer/src/digitdef.hint$OneCurveOnEachLine^/home/mark/engauge_dev/digitizer/src/digitdef.hIIintOriginalImage^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize1^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize2^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize3^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize4^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize5^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize6^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize7^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointLineSize8^/home/mark/engauge_dev/digitizer/src/digitdef.hint.PointMatchSeparationMin^/home/mark/engauge_dev/digitizer/src/digitdef.h %const int"PointMatchSizeMin^/home/mark/engauge_dev/digitizer/src/digitdef.h const intPointMatchState^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointSize1^/home/mark/engauge_dev/digitizer/src/digitdef.hintPointSize2^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize3^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize4^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize5^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize6^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize7^/home/mark/engauge_dev/digitizer/src/digitdef.h intPointSize8^/home/mark/engauge_dev/digitizer/src/digitdef.h int Polar^/home/mark/engauge_dev/digitizer/src/digitdef.h""intProcessedImage^/home/mark/engauge_dev/digitizer/src/digitdef.hint&RemovalMaxRecursion^/home/mark/engauge_dev/digitizer/src/digitdef.h $const intRtti_Point^/home/mark/engauge_dev/digitizer/src/digitdef.h const int Rtti_SegmentLine^/home/mark/engauge_dev/digitizer/src/digitdef.h !const intScaleState^/home/mark/engauge_dev/digitizer/src/digitdef.h intSegmentState^/home/mark/engauge_dev/digitizer/src/digitdef.hintSelectState^/home/mark/engauge_dev/digitizer/src/digitdef.h int(SingleValuedFunction^/home/mark/engauge_dev/digitizer/src/digitdef.hint Spaces^/home/mark/engauge_dev/digitizer/src/digitdef.hPPint Square^/home/mark/engauge_dev/digitizer/src/digitdef.hintTabs^/home/mark/engauge_dev/digitizer/src/digitdef.hQQintThetaDegrees^/home/mark/engauge_dev/digitizer/src/digitdef.h//intThetaGradians^/home/mark/engauge_dev/digitizer/src/digitdef.h00intThetaRadians^/home/mark/engauge_dev/digitizer/src/digitdef.h11intTriangle^/home/mark/engauge_dev/digitizer/src/digitdef.h int:UserManualEnvironmentVariable^/home/mark/engauge_dev/digitizer/src/digitdef.hAconst QStringViewAllPoints^/home/mark/engauge_dev/digitizer/src/digitdef.hintViewAxesPoints^/home/mark/engauge_dev/digitizer/src/digitdef.hintViewCurvePoints^/home/mark/engauge_dev/digitizer/src/digitdef.hint"ViewMeasurePoints^/home/mark/engauge_dev/digitizer/src/digitdef.hintViewScalePoints^/home/mark/engauge_dev/digitizer/src/digitdef.hintX^/home/mark/engauge_dev/digitizer/src/digitdef.hintXFromAllCurves^/home/mark/engauge_dev/digitizer/src/digitdef.h??intXFromFirstCurve^/home/mark/engauge_dev/digitizer/src/digitdef.h@@intXFromGridLines^/home/mark/engauge_dev/digitizer/src/digitdef.hAAintXYFromAllCurves^/home/mark/engauge_dev/digitizer/src/digitdef.hBBintZGridLines^/home/mark/engauge_dev/digitizer/src/digitdef.h const doubleZHandles^/home/mark/engauge_dev/digitizer/src/digitdef.h const double ZLines^/home/mark/engauge_dev/digitizer/src/digitdef.h const doubleZPoints^/home/mark/engauge_dev/digitizer/src/digitdef.h const double"ZScanForAxesLines^/home/mark/engauge_dev/digitizer/src/digitdef.h $const doubleZSegments^/home/mark/engauge_dev/digitizer/src/digitdef.h const doubleglobalKeyCopy^/home/mark/engauge_dev/digitizer/src/digitdef.h2const QStringglobalKeyCut^/home/mark/engauge_dev/digitizer/src/digitdef.h1const QStringglobalKeyPaste^/home/mark/engauge_dev/digitizer/src/digitdef.h3const QString "PointSetStyleList^/home/mark/engauge_dev/digitizer/src/digitdef.h"36QValueList< PointSetStyle >b/home/mark/engauge_dev/digitizer/src/digitdoc.cppdDigitDocb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpc. stateDigitizeState"addAcceptedPointsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp5;DigitDoc VacceptedPoints*QValueList< QPoint >*voidaddAxisPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cppFXDigitDoc xScreenintyScreenint xGraph double yGraph doublevoidaddPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DDigitDocxScreenintyScreenint Point*addPointInvokeb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DigitDocu<xScreenintyScreenintvoid4addSampleMatchPointToViewsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc SvoidaddViewb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocviewDigitView*voidaxesStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc voidPointSetStyleaxisPointCountb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidintbackgroundb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocr&BackgroundSelectionchangedViewListb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp"0DigitDoc void*cleanUpAcceptedPointsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp ,DigitDoc Z stateDigitizeStatevoid&clearAcceptedPointsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp=GDigitDoc lvoid*collectAcceptedPointsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp.3DigitDoc [acceptedPoints*QValueList< QPoint >*void*computeTransformationb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidcopyb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp(DigitDoc viewDigitView*voidcurveCmbTextb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp5:DigitDoc :QStringcurveNamesb/home/mark/engauge_dev/digitizer/src/digitdoc.cppFJDigitDoc ЀlistQStringList*voidcurveStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocnameQStringPointSetStylecurveThumbnailb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc fnameQStringQPixmapcutb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc ̀viewDigitView*voiddumpb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp%DigitDoc 8voidexportDocumentb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocfilenameconst QString&boolfilterImportb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocBQStringfilterOpenSaveb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocQStringfindViewb/home/mark/engauge_dev/digitizer/src/digitdoc.cppt~DigitDocviewLookupDigitView*boolfinishMoveb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp'3DigitDocvoid forwardNormalMsgb/home/mark/engauge_dev/digitizer/src/digitdoc.cppx{DigitDoczmessageQStringvoid&forwardPermanentMsgb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp}DigitDocmessageQStringvoid"geometryInfoCurveb/home/mark/engauge_dev/digitizer/src/digitdoc.cppIZDigitDoc  rInfo.GeometryWindowItemList&bool&geometryInfoMeasureb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp\mDigitDoc f rInfo.GeometryWindowItemList&boolgridDisplayb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocbool8highlightCandidateMatchPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpconst QPoint&voidimportFileb/home/mark/engauge_dev/digitizer/src/digitdoc.cppdDigitDocfilenameconst QString& formatconst char*boolimportImageb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc imageconst QImage&boolimportPixmapb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc pixmapconst QPixmap&boolinitDefaultsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoid&initGridDisplayMeshb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp/2DigitDocu<voidinitGridMeshb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp4SDigitDocgridSettings"GridMeshSettings*void&initGridRemovalMeshb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp*-DigitDoc voidisActionToRedob/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc ƀboolisActionToUndob/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocboolisLastViewb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp26DigitDocu<bool$loadOriginalPixmapb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoid(makeGridDisplayLinesb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoid matchPointAcceptb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc lvoid matchPointRejectb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DigitDocu<void matchSamplePointb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocp QPointboolmeasureCmbTextb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp<ADigitDocQStringmeasureNamesb/home/mark/engauge_dev/digitizer/src/digitdoc.cppLPDigitDoclistQStringList*void measureThumbnailb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocnameQStringQPixmapopenDocumentb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp\DigitDocfilenameconst QString&bool pasteb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp*DDigitDocviewDigitView*void printb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoid*processOriginalPixmapb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc voidredob/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc ɀvoid(removeGestatingPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cppvDigitDocp Point*void>removeSampleMatchPointFromViewsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidremoveViewb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DigitDocrviewDigitView*void replacePointSetsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppRvDigitDoc pointsetsPointSets*0curvesWithOrphanedPointsQStringList*4measuresWithOrphanedPointsQStringList*voidsaveDocumentb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp^DigitDocfilenameconst QString&boolscalePointCountb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidintscaleStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidPointSetStylescanForAxesb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc xMinG double xMaxG double yMinG double yMaxG doublevoid screenToXThetaYRb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocxScreenintyScreenint xThetadouble*yRdouble*void(selectionListChangedb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp_bDigitDocvoid$sendUpdateGeometryb/home/mark/engauge_dev/digitizer/src/digitdoc.cpporDigitDocvoidsetAxesStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpointSetStylePointSetStylevoidsetAxisPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cppZfDigitDocdp Point*xThetaGraph doubleyRGraph doublevoidsetBackgroundb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocselection&BackgroundSelectionvoidsetBackgroundb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocDigitCanvasselection&BackgroundSelectionvoid setCoordSettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppUDigitDocsettingsCoordSettingsvoidsetCurveCmbTextb/home/mark/engauge_dev/digitizer/src/digitdoc.cppCODigitDoccurveCmbTextQStringvoid setDigitizeStateb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc  stateDigitizeStatevoid*setDiscretizeSettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DigitDocEsettings$DiscretizeSettingsvoidsetExportPathb/home/mark/engauge_dev/digitizer/src/digitdoc.cppWbDigitDoc filenameconst QString&void,setGridDisplaySettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocsettings GridMeshSettingsshowboolvoid,setGridRemovalSettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocsettings&GridRemovalSettingsvoid setMatchSetStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpointSetStylePointSetStylevoid"setMeasureCmbTextb/home/mark/engauge_dev/digitizer/src/digitdoc.cppQ]DigitDoc 5measureCmbTextQStringvoid*setPointMatchSettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp DigitDoc settings$PointMatchSettingsvoidsetSavePathb/home/mark/engauge_dev/digitizer/src/digitdoc.cppLUDigitDoc filenameconst QString&voidsetScalePointb/home/mark/engauge_dev/digitizer/src/digitdoc.cpphtDigitDocp Point*x doubley doublevoidsetScaleStyleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpointSetStylePointSetStylevoid$setSegmentSettingsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocsettingsSegmentSettingsvoidsetViewCursorb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp8JDigitDocviewDigitView*void*setViewPointSelectionb/home/mark/engauge_dev/digitizer/src/digitdoc.cppoDigitDocu<$viewPointSelection$ViewPointSelectionvoidshowGridDisplayb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc  toggleboolvoidshowSegmentsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppdmDigitDocu<showboolvoidslotUpdateViewsb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc senderDigitView*boundingRect QRectvoid,supportedVersionNumberb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocversionNumberQStringbooltrackCursorb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocpconst QPoint&voidundob/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocu<void updateBackgroundb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocDigitCanvasvoidupdateFromListb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc updateRectList(QValueList< QRect >*voidvalidAxesb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc voidboolvalidAxisPointb/home/mark/engauge_dev/digitizer/src/digitdoc.cpp(DigitDocu< xTheta doubleyR doubleboolvalidScaleb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDocvoidbool$viewPointSelectionb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc$ViewPointSelection~ DigitDocb/home/mark/engauge_dev/digitizer/src/digitdoc.cppDigitDoc^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDoc^/home/mark/engauge_dev/digitizer/src/digitdoc.hGQObjectDigitCanvas^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDocQCanvasDigitCanvas^/home/mark/engauge_dev/digitizer/src/digitdoc.h2DigitDocDigitCanvasdocDigitDoc*setBackground^/home/mark/engauge_dev/digitizer/src/digitdoc.h 9DigitDocDigitCanvasaselection&BackgroundSelectionvoid updateBackground^/home/mark/engauge_dev/digitizer/src/digitdoc.h #DigitDocDigitCanvastvoidvoid~ DigitCanvas^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDocDigitCanvasDigitCanvas^/home/mark/engauge_dev/digitizer/src/digitdoc.h2DigitDocDigitCanvasdocDigitDoc*~ DigitCanvas^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDocDigitCanvas m_doc^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDoc*DigitDoc^/home/mark/engauge_dev/digitizer/src/digitdoc.h!DigitDoc h. stateDigitizeState"addAcceptedPoints^/home/mark/engauge_dev/digitizer/src/digitdoc.h >DigitDocacceptedPoints*QValueList< QPoint >*voidaddAxisPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h MDigitDoclxScreenintyScreenint xGraph double yGraph doublevoidaddPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h -DigitDocxScreenintyScreenint Point*addPointInvoke^/home/mark/engauge_dev/digitizer/src/digitdoc.h 1DigitDoc xScreenintyScreenintvoid4addSampleMatchPointToViews^/home/mark/engauge_dev/digitizer/src/digitdoc.h )DigitDoc/voidvoidaddView^/home/mark/engauge_dev/digitizer/src/digitdoc.h !DigitDocviewDigitView*voidaxesStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h((!DigitDoc voidPointSetStyleaxisPointCount^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDocvoidintbackground^/home/mark/engauge_dev/digitizer/src/digitdoc.hcc(DigitDocvoid&BackgroundSelection bounds^/home/mark/engauge_dev/digitizer/src/digitdoc.hffGDigitDocAvoid QRect canvas^/home/mark/engauge_dev/digitizer/src/digitdoc.h6DigitDocQCanvas*changedViewList^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocvoid*cleanUpAcceptedPoints^/home/mark/engauge_dev/digitizer/src/digitdoc.h 3DigitDoc stateDigitizeStatevoid&clearAcceptedPoints^/home/mark/engauge_dev/digitizer/src/digitdoc.h "DigitDocuvoidvoid*collectAcceptedPoints^/home/mark/engauge_dev/digitizer/src/digitdoc.h BDigitDocacceptedPoints*QValueList< QPoint >*void*computeTransformation^/home/mark/engauge_dev/digitizer/src/digitdoc.h $DigitDocdvoidvoidcoordSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h$$ADigitDoc.voidCoordSettingscopy^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocviewDigitView*voidcurveCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocQStringcurveNames^/home/mark/engauge_dev/digitizer/src/digitdoc.h &DigitDoclistQStringList*voidcurveStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h))*DigitDocnameQStringPointSetStylecurveThumbnail^/home/mark/engauge_dev/digitizer/src/digitdoc.h} }(DigitDocnameQStringQPixmapcut^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocviewDigitView*voiddigitizeState^/home/mark/engauge_dev/digitizer/src/digitdoc.hADigitDocvoidDigitizeState$discretizeSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h99PDigitDoc5void$DiscretizeSettingsdump^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDoc/voidvoidexportDocument^/home/mark/engauge_dev/digitizer/src/digitdoc.h 0DigitDocfilenameconst QString&boolexportPath^/home/mark/engauge_dev/digitizer/src/digitdoc.h>DigitDoc const QString&exportSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h00DDigitDocvoidExportSettingsfilterImport^/home/mark/engauge_dev/digitizer/src/digitdoc.hyy!DigitDocQStringfilterOpenSave^/home/mark/engauge_dev/digitizer/src/digitdoc.hzz#DigitDocQStringfindView^/home/mark/engauge_dev/digitizer/src/digitdoc.h "DigitDocviewDigitView*boolfinishMove^/home/mark/engauge_dev/digitizer/src/digitdoc.hM MDigitDoc=voidvoidfirstView^/home/mark/engauge_dev/digitizer/src/digitdoc.h9DigitDocDigitView* forwardNormalMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h  'DigitDoctextQStringvoid&forwardPermanentMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h *DigitDoctextQStringvoid"geometryInfoCurve^/home/mark/engauge_dev/digitizer/src/digitdoc.hi i9DigitDoc rInfo.GeometryWindowItemList&bool&geometryInfoMeasure^/home/mark/engauge_dev/digitizer/src/digitdoc.hj j;DigitDocm rInfo.GeometryWindowItemList&boolgridDisplay^/home/mark/engauge_dev/digitizer/src/digitdoc.h< <DigitDoc$voidbool&gridDisplaySettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h??PDigitDoc1void GridMeshSettings&gridRemovalSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h55SDigitDocvoid&GridRemovalSettings8highlightCandidateMatchPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h 5DigitDoceconst QPoint&voidimportFile^/home/mark/engauge_dev/digitizer/src/digitdoc.h DDigitDocfilenameconst QString& formatconst char*boolimportImage^/home/mark/engauge_dev/digitizer/src/digitdoc.h )DigitDoca imageconst QImage&boolimportPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.h ,DigitDoc pixmapconst QPixmap&boolinitDefaults^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDoclvoid&initGridDisplayMesh^/home/mark/engauge_dev/digitizer/src/digitdoc.h "DigitDocvoidvoidinitGridMesh^/home/mark/engauge_dev/digitizer/src/digitdoc.h 5DigitDocggridSettings"GridMeshSettings*void&initGridRemovalMesh^/home/mark/engauge_dev/digitizer/src/digitdoc.h "DigitDocevoidvoidisActionToRedo^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDoc/boolisActionToUndo^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocibool(isExistingExportFile^/home/mark/engauge_dev/digitizer/src/digitdoc.hNDigitDoc voidconst bool$isExistingSaveFile^/home/mark/engauge_dev/digitizer/src/digitdoc.hJDigitDocl voidconst boolisLastView^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocbool$loadOriginalPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.h !DigitDocvoidvoid(makeGridDisplayLines^/home/mark/engauge_dev/digitizer/src/digitdoc.h #DigitDocvoidvoid$markFileAsExported^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDocvoid matchPointAccept^/home/mark/engauge_dev/digitizer/src/digitdoc.hZ ZDigitDoc<voidvoid matchPointReject^/home/mark/engauge_dev/digitizer/src/digitdoc.h[ [DigitDocemvoidvoid matchSamplePoint^/home/mark/engauge_dev/digitizer/src/digitdoc.hW W#DigitDocp QPointboolmeasureCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDociQStringmeasureNames^/home/mark/engauge_dev/digitizer/src/digitdoc.h (DigitDoclistQStringList*void measureThumbnail^/home/mark/engauge_dev/digitizer/src/digitdoc.h~ ~*DigitDocnameQStringQPixmapmodified^/home/mark/engauge_dev/digitizer/src/digitdoc.h*DigitDocboolnormalMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h 'DigitDocqtextconst QString&voidopenDocument^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDocfilenameconst QString&booloriginalImage^/home/mark/engauge_dev/digitizer/src/digitdoc.hssADigitDocvoidconst QImage&originalPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.httDDigitDockrvoidconst QPixmap& paste^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocviewDigitView*voidpermanentMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h *DigitDoc|textconst QString&void$pointMatchSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hGGPDigitDocvoid$PointMatchSettingspointSets^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDocvoid const PointSets* print^/home/mark/engauge_dev/digitizer/src/digitdoc.hP PDigitDoc?voidvoid*processOriginalPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.h $DigitDocvoidvoidprocessedImage^/home/mark/engauge_dev/digitizer/src/digitdoc.huuCDigitDocmvoidconst QImage&processedPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.hvvFDigitDockvoidconst QPixmap&redo^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocvoid(removeGestatingPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h! !'DigitDoc@p Point*void>removeSampleMatchPointFromViews^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDocvoidvoidremoveView^/home/mark/engauge_dev/digitizer/src/digitdoc.h $DigitDoceviewDigitView*void replacePointSets^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDocpointSetsPointSets*0curvesWithOrphanedPointsQStringList*4measuresWithOrphanedPointsQStringList*voidsaveDocument^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDocfilenameconst QString&boolsavePath^/home/mark/engauge_dev/digitizer/src/digitdoc.h:DigitDoc const QString&scalePointCount^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDocvoidintscaleStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h**"DigitDocvoidPointSetStylescanForAxes^/home/mark/engauge_dev/digitizer/src/digitdoc.h LDigitDoce xMinG double xMaxG double yMinG double yMaxG doublevoid screenToXThetaYR^/home/mark/engauge_dev/digitizer/src/digitdoc.h ODigitDocxScreenintyScreenint xThetadouble*yRdouble*voidsegmentSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hCCGDigitDocvoidSegmentSettingsselectionChange^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocvoidvoid(selectionListChanged^/home/mark/engauge_dev/digitizer/src/digitdoc.hS S#DigitDocvoidvoid$sendUpdateGeometry^/home/mark/engauge_dev/digitizer/src/digitdoc.hm m!DigitDocOCvoidvoidsetAxesStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h+ +2DigitDocpointSetStylePointSetStylevoidsetAxisPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h CDigitDoc p Point*xThetaGraph doubleyRGraph doublevoidsetBackground^/home/mark/engauge_dev/digitizer/src/digitdoc.hb b5DigitDoc selection&BackgroundSelectionvoid setCoordSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h% %1DigitDocsettingsCoordSettingsvoidsetCurveCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDocicurveCmbTextQStringvoid setDigitizeState^/home/mark/engauge_dev/digitizer/src/digitdoc.h .DigitDoc stateDigitizeStatevoid*setDiscretizeSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h8 8;DigitDocsettings$DiscretizeSettingsvoidsetExportPath^/home/mark/engauge_dev/digitizer/src/digitdoc.h /DigitDocfilenameconst QString&void"setExportSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h11gDigitDocsettingsExportSettingsvoid,setGridDisplaySettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h> >EDigitDoclsettings GridMeshSettingsshowboolvoid,setGridRemovalSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h4 4=DigitDocsettings&GridRemovalSettingsvoid setMatchSetStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h, ,6DigitDocpointSetStylePointSetStylevoid"setMeasureCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h 2DigitDocmeasureCmbTextQStringvoidsetModified^/home/mark/engauge_dev/digitizer/src/digitdoc.hEDigitDocmodifiedboolvoid*setPointMatchSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hF F;DigitDocasettings$PointMatchSettingsvoidsetSavePath^/home/mark/engauge_dev/digitizer/src/digitdoc.h -DigitDocifilenameconst QString&voidsetScalePoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h 4DigitDocp Point*x doubley doublevoidsetScaleStyle^/home/mark/engauge_dev/digitizer/src/digitdoc.h- -3DigitDocpointSetStylePointSetStylevoid$setSegmentSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hB B5DigitDocsettingsSegmentSettingsvoidsetTitle^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDoc titleconst QString&voidsetViewCursor^/home/mark/engauge_dev/digitizer/src/digitdoc.h 'DigitDocviewDigitView*void*setViewPointSelection^/home/mark/engauge_dev/digitizer/src/digitdoc.h^ ^EDigitDocuc$viewPointSelection$ViewPointSelectionvoidshowGridDisplay^/home/mark/engauge_dev/digitizer/src/digitdoc.h= =%DigitDoc toggleboolvoidshowSegments^/home/mark/engauge_dev/digitizer/src/digitdoc.h  DigitDocshowboolvoidslotUpdateViews^/home/mark/engauge_dev/digitizer/src/digitdoc.h ?DigitDoc senderDigitView*boundingRect QRectvoid,supportedVersionNumber^/home/mark/engauge_dev/digitizer/src/digitdoc.hp p6DigitDocversionStringQStringbooltemporaryMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h *DigitDoctextconst QString&void title^/home/mark/engauge_dev/digitizer/src/digitdoc.h4DigitDocconst QString&trackCursor^/home/mark/engauge_dev/digitizer/src/digitdoc.h $DigitDocconst QPoint&voidtrackingMsg^/home/mark/engauge_dev/digitizer/src/digitdoc.h GDigitDoctextCoordsconst QString&textResconst QString&voidtransform^/home/mark/engauge_dev/digitizer/src/digitdoc.hJJ<DigitDoc/void const Transform*(transformationChange^/home/mark/engauge_dev/digitizer/src/digitdoc.h #DigitDocevoidvoidundo^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocvoidupdateFromList^/home/mark/engauge_dev/digitizer/src/digitdoc.h :DigitDocupdateRectList(QValueList< QRect >*voidupdateGeometry^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDoczvoidvoidvalidAxes^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocvoidboolvalidAxisPoint^/home/mark/engauge_dev/digitizer/src/digitdoc.h 1DigitDoc xTheta doubleyR doubleboolvalidScale^/home/mark/engauge_dev/digitizer/src/digitdoc.h DigitDocQvoidbool$viewPointSelection^/home/mark/engauge_dev/digitizer/src/digitdoc.h__/DigitDocvoid$ViewPointSelection~ DigitDoc^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitDoci bounds^/home/mark/engauge_dev/digitizer/src/digitdoc.hffGDigitDocAvoid QRect canvas^/home/mark/engauge_dev/digitizer/src/digitdoc.h6DigitDocQCanvas*coordSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h$$ADigitDoc.voidCoordSettingsdigitizeState^/home/mark/engauge_dev/digitizer/src/digitdoc.hADigitDocvoidDigitizeState$discretizeSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h99PDigitDoc5void$DiscretizeSettingsexportPath^/home/mark/engauge_dev/digitizer/src/digitdoc.h>DigitDoc const QString&exportSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h00DDigitDocvoidExportSettingsfirstView^/home/mark/engauge_dev/digitizer/src/digitdoc.h9DigitDocDigitView*&gridDisplaySettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h??PDigitDoc1void GridMeshSettings&gridRemovalSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h55SDigitDocvoid&GridRemovalSettings(isExistingExportFile^/home/mark/engauge_dev/digitizer/src/digitdoc.hNDigitDoc voidconst bool$isExistingSaveFile^/home/mark/engauge_dev/digitizer/src/digitdoc.hJDigitDocl voidconst bool$markFileAsExported^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDocvoidmodified^/home/mark/engauge_dev/digitizer/src/digitdoc.h*DigitDocbooloriginalImage^/home/mark/engauge_dev/digitizer/src/digitdoc.hssADigitDocvoidconst QImage&originalPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.httDDigitDockrvoidconst QPixmap&$pointMatchSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hGGPDigitDocvoid$PointMatchSettingspointSets^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDocvoid const PointSets*processedImage^/home/mark/engauge_dev/digitizer/src/digitdoc.huuCDigitDocmvoidconst QImage&processedPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.hvvFDigitDockvoidconst QPixmap&savePath^/home/mark/engauge_dev/digitizer/src/digitdoc.h:DigitDoc const QString&segmentSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.hCCGDigitDocvoidSegmentSettings"setExportSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h11gDigitDocsettingsExportSettingsvoidsetModified^/home/mark/engauge_dev/digitizer/src/digitdoc.hEDigitDocmodifiedboolvoidsetTitle^/home/mark/engauge_dev/digitizer/src/digitdoc.h<DigitDoc titleconst QString&void title^/home/mark/engauge_dev/digitizer/src/digitdoc.h4DigitDocconst QString&transform^/home/mark/engauge_dev/digitizer/src/digitdoc.hJJ<DigitDoc/void const Transform*"MagicNumber^/home/mark/engauge_dev/digitizer/src/digitdoc.hint*m_backgroundSelection^/home/mark/engauge_dev/digitizer/src/digitdoc.h-&BackgroundSelectionm_canvas^/home/mark/engauge_dev/digitizer/src/digitdoc.hDigitCanvasm_cmdInvoker^/home/mark/engauge_dev/digitizer/src/digitdoc.hFFCmdInvokerm_coordSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h!!!CoordSettingsm_curveCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h QStringm_digitizeState^/home/mark/engauge_dev/digitizer/src/digitdoc.h!DigitizeState2m_dirtyAxesTransformation^/home/mark/engauge_dev/digitizer/src/digitdoc.h> >"bool4m_dirtyScaleTransformation^/home/mark/engauge_dev/digitizer/src/digitdoc.h? ?#bool(m_discretizeSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h66+$DiscretizeSettings$m_exportFileExists^/home/mark/engauge_dev/digitizer/src/digitdoc.h boolm_exportPath^/home/mark/engauge_dev/digitizer/src/digitdoc.h QString m_exportSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h$$#ExportSettingsm_gridDisplay^/home/mark/engauge_dev/digitizer/src/digitdoc.h Grid**m_gridDisplaySettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h*** GridMeshSettings*m_gridRemovalSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h''-&GridRemovalSettingsm_matchSet^/home/mark/engauge_dev/digitizer/src/digitdoc.h MatchSet* m_measureCmbText^/home/mark/engauge_dev/digitizer/src/digitdoc.h QStringm_modified^/home/mark/engauge_dev/digitizer/src/digitdoc.h boolm_originalImage^/home/mark/engauge_dev/digitizer/src/digitdoc.h  QImage m_originalPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.h QPixmap(m_pointMatchSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h00+$PointMatchSettingsm_pointSets^/home/mark/engauge_dev/digitizer/src/digitdoc.h PointSets* m_processedImage^/home/mark/engauge_dev/digitizer/src/digitdoc.h  QImage"m_processedPixmap^/home/mark/engauge_dev/digitizer/src/digitdoc.h QPixmap&m_samplePointPixels^/home/mark/engauge_dev/digitizer/src/digitdoc.hBB#QPointArray m_saveFileExists^/home/mark/engauge_dev/digitizer/src/digitdoc.h boolm_savePath^/home/mark/engauge_dev/digitizer/src/digitdoc.h QString"m_segmentSettings^/home/mark/engauge_dev/digitizer/src/digitdoc.h--%SegmentSettingsm_segments^/home/mark/engauge_dev/digitizer/src/digitdoc.h Segments*m_title^/home/mark/engauge_dev/digitizer/src/digitdoc.h QStringm_transform^/home/mark/engauge_dev/digitizer/src/digitdoc.h3 3Transform*m_viewList^/home/mark/engauge_dev/digitizer/src/digitdoc.h#,QPtrList< DigitView >*(m_viewPointSelection^/home/mark/engauge_dev/digitizer/src/digitdoc.h+$ViewPointSelectionextensionCsv^/home/mark/engauge_dev/digitizer/src/digitdoc.h~~"const QStringextensionDig^/home/mark/engauge_dev/digitizer/src/digitdoc.h"const QStringd/home/mark/engauge_dev/digitizer/src/digitmain.cppwDigitMaind/home/mark/engauge_dev/digitizer/src/digitmain.cpp*DigitMainc.n(exportFileAtShutdownQStringactiveDocumentd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainNDigitDoc*activeViewd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainDigitView*canCloseFramed/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainsdocDigitDoc*viewDigitView*bool*clipboardContainsUrisd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainboolcreateClientd/home/mark/engauge_dev/digitizer/src/digitmain.cpp)DigitMaindocDigitDoc*void(displayCurveGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain rInfo.GeometryWindowItemList&void,displayMeasureGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain rInfo.GeometryWindowItemList&voiddocumentSaved/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain|docDigitDoc*booldocumentSaveAsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp$DigitMaindocDigitDoc*booldragEnterEventd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainT pEvent QDragEnterEvent*voiddropEventd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainN pEventQDropEvent*voideventClosed/home/mark/engauge_dev/digitizer/src/digitmain.cpp\tDigitMainK objectQObject* eventQEvent*booleventFilterd/home/mark/engauge_dev/digitizer/src/digitmain.cppZDigitMain objectQObject* eventQEvent*booleventKeyPressd/home/mark/engauge_dev/digitizer/src/digitmain.cppvDigitMaing objectQObject* eventQEvent*boolfindViewd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainNviewDigitView*bool$importImageDraggedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp_}DigitMainv imageconst QImage&voidimportImageFiled/home/mark/engauge_dev/digitizer/src/digitmain.cpp+KDigitMain,fileconst QStringvoidimportImageFiled/home/mark/engauge_dev/digitizer/src/digitmain.cppM]DigitMain-fileconst QString xMinG double xMaxG double yMinG double yMaxG doublevoid&importPixmapDraggedd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain= pixmapconst QPixmap&voidinitActionsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp6DigitMainvoid initGeometryInfod/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain#voidinitMenuBard/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidinitStatusBard/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain&voidinitToolBarsd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain!voidinitViewd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMaindvoidmoveEventd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainP pEventQMoveEvent*voidnewDocumentd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainDigitDoc*noGeometryInfod/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainivoid openDocumentFiled/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainsfileconst QStringvoidqueryExitd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainKboolremoveDocumentd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainjdocDigitDoc*void replacePointSetsd/home/mark/engauge_dev/digitizer/src/digitmain.cppSyDigitMaindocDigitDoc*copyPointSetsPointSets*6pointSetsWithOrphanedPointsQStringList&replacingCurvesboolvoidresetActionsd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain@voidresizeEventd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain pEventQResizeEvent*voidsafeToQuitd/home/mark/engauge_dev/digitizer/src/digitmain.cpp{DigitMaintboolsetActiveViewd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainuviewDigitView*voidsetCurveCmbd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMain;docDigitDoc*void setDigitizeStated/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainN stateDigitizeStatevoidsetMeasureCmbd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMaindocDigitDoc*void(slotClipboardChangedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp*-DigitMainvoid.slotCurveComboActivatedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainintvoid slotDigitizeAxisd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMainl toggleboolvoid"slotDigitizeCurved/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMain toggleboolvoid&slotDigitizeMeasured/home/mark/engauge_dev/digitizer/src/digitmain.cpp ! )DigitMain toggleboolvoid,slotDigitizePointMatchd/home/mark/engauge_dev/digitizer/src/digitmain.cpp 5 =DigitMaind toggleboolvoid"slotDigitizeScaled/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid&slotDigitizeSegmentd/home/mark/engauge_dev/digitizer/src/digitmain.cpp + 3DigitMain toggleboolvoid$slotDigitizeSelectd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoidslotEditCopyd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain/voidslotEditCutd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotEditPasted/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid$slotEditPasteAsNewd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  )DigitMaingvoidslotEditRedod/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotEditUndod/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotFileClosed/home/mark/engauge_dev/digitizer/src/digitmain.cpps}DigitMainvoidslotFileExitd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotFileExportd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoid slotFileExportAsd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotFileImportd/home/mark/engauge_dev/digitizer/src/digitmain.cpp/>DigitMainvoidslotFileOpend/home/mark/engauge_dev/digitizer/src/digitmain.cpp@ODigitMainvoid$slotFileOpenRecentd/home/mark/engauge_dev/digitizer/src/digitmain.cppQ]DigitMainfilenameQStringvoidslotFilePrintd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidslotFileSaved/home/mark/engauge_dev/digitizer/src/digitmain.cpp_gDigitMainvvoidslotFileSaveAsd/home/mark/engauge_dev/digitizer/src/digitmain.cppiqDigitMainvoidslotHelpAboutd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid slotHelpGlossaryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid2slotHelpLineGraphTutoriald/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainRvoid&slotHelpMapTutoriald/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainkvoid4slotHelpPointGraphTutoriald/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid$slotHelpUserManuald/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainevoid*slotHideCurveGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  !DigitMainvoid.slotHideMeasureGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp # 'DigitMain void2slotMeasureComboActivatedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMainintvoid"slotMenuActivatedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainRidintvoid(slotMenuPreactivatedd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainkvoid&slotSelectionChanged/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMainvoid slotSettingsAxesd/home/mark/engauge_dev/digitizer/src/digitmain.cpp V lDigitMaingvoid(slotSettingsCoordSysd/home/mark/engauge_dev/digitizer/src/digitmain.cpp ? TDigitMainvoid$slotSettingsCurvesd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid,slotSettingsDiscretized/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid.slotSettingsExportSetupd/home/mark/engauge_dev/digitizer/src/digitmain.cpp ? cDigitMainvoid.slotSettingsGridDisplayd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid.slotSettingsGridRemovald/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainـvoid(slotSettingsMeasuresd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainvoid,slotSettingsPointMatchd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  &DigitMaintvoid"slotSettingsScaled/home/mark/engauge_dev/digitizer/src/digitmain.cpp n DigitMainuvoid(slotSettingsSegmentsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp ( =DigitMainivoid(slotSettingsSessionsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp e uDigitMainsvoid&slotStatusNormalMsgd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainetextconst QString&void,slotStatusPermanentMsgd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMaintextconst QString&void,slotStatusTemporaryMsgd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMaintextconst QString&void*slotStatusTrackingMsgd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainTtextCoordsconst QString&textResconst QString&void0slotTransformationChanged/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMainvoid$slotUpdateGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp ) 7DigitMain void"slotViewAllPointsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid$slotViewAxesPointsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp  DigitMain toggleboolvoid*slotViewCurveGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainsgn toggleboolvoid&slotViewCurvePointsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoidDslotViewDigitizeCurvePointsToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp O YDigitMainh toggleboolvoidHslotViewDigitizeMeasurePointsToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp [ eDigitMain toggleboolvoid&slotViewFileToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp + 5DigitMain toggleboolvoid&slotViewGridDisplayd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid2slotViewImageScaleToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp C MDigitMain toggleboolvoid.slotViewMeasureGeometryd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainÀ toggleboolvoid*slotViewMeasurePointsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid(slotViewNoBackgroundd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid*slotViewOriginalImaged/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMainn toggleboolvoid,slotViewProcessedImaged/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid&slotViewScalePointsd/home/mark/engauge_dev/digitizer/src/digitmain.cpp DigitMain toggleboolvoid*slotViewSelectToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp 7 ADigitMain toggleboolvoid"slotViewStatusBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp s }DigitMain toggleboolvoid&slotViewZoomToolBard/home/mark/engauge_dev/digitizer/src/digitmain.cpp g qDigitMain toggleboolvoid&slotWindowNewWindowd/home/mark/engauge_dev/digitizer/src/digitmain.cpp w DigitMainvoidspawnHelpd/home/mark/engauge_dev/digitizer/src/digitmain.cppQDigitMainhelpHomeQStringvoid,toggleActionPasteAsNewd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoidtoggleActionsd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoid"toggleActionsEditd/home/mark/engauge_dev/digitizer/src/digitmain.cppDigitMainvoid~ DigitMaind/home/mark/engauge_dev/digitizer/src/digitmain.cpp,4DigitMain`/home/mark/engauge_dev/digitizer/src/digitmain.hDigitMain`/home/mark/engauge_dev/digitizer/src/digitmain.h-QMainWindowwDigitMain`/home/mark/engauge_dev/digitizer/src/digitmain.h+DigitMainh.n(exportFileAtShutdownQStringactiveDocument`/home/mark/engauge_dev/digitizer/src/digitmain.h} }"DigitMaintvoidDigitDoc*activeView`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidDigitView*canCloseFrame`/home/mark/engauge_dev/digitizer/src/digitmain.h 6DigitMain܀docDigitDoc*viewDigitView*bool*clipboardContainsUris`/home/mark/engauge_dev/digitizer/src/digitmain.h  DigitMainboolcreateClient`/home/mark/engauge_dev/digitizer/src/digitmain.h $DigitMain docDigitDoc*void(displayCurveGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h <DigitMain ̀ rInfo.GeometryWindowItemList&void,displayMeasureGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h >DigitMain rInfo.GeometryWindowItemList&voiddocumentSave`/home/mark/engauge_dev/digitizer/src/digitmain.h $DigitMaindocDigitDoc*booldocumentSaveAs`/home/mark/engauge_dev/digitizer/src/digitmain.h &DigitMaindocDigitDoc*booldragEnterEvent`/home/mark/engauge_dev/digitizer/src/digitmain.h8DigitMain pEvent QDragEnterEvent*voiddropEvent`/home/mark/engauge_dev/digitizer/src/digitmain.h.DigitMain pEventQDropEvent*voideventClose`/home/mark/engauge_dev/digitizer/src/digitmain.h 3DigitMain Ȁ objectQObject* eventQEvent*booleventFilter`/home/mark/engauge_dev/digitizer/src/digitmain.h<DigitMainu< objectQObject* eventQEvent*booleventKeyPress`/home/mark/engauge_dev/digitizer/src/digitmain.h 6DigitMain  objectQObject* eventQEvent*boolfindView`/home/mark/engauge_dev/digitizer/src/digitmain.h "DigitMain viewDigitView*bool$importImageDragged`/home/mark/engauge_dev/digitizer/src/digitmain.hX X0DigitMain imageconst QImage&voidimportImageFile`/home/mark/engauge_dev/digitizer/src/digitmain.h ,DigitMainfileconst QStringvoidimportImageFile`/home/mark/engauge_dev/digitizer/src/digitmain.h !DigitMainfileconst QString xMinG double xMaxG double yMinG double yMaxG doublevoid&importPixmapDragged`/home/mark/engauge_dev/digitizer/src/digitmain.h[ [3DigitMain  pixmapconst QPixmap&voidinitActions`/home/mark/engauge_dev/digitizer/src/digitmain.h^ ^DigitMainvoid initGeometryInfo`/home/mark/engauge_dev/digitizer/src/digitmain.h` `DigitMainvoidinitMenuBar`/home/mark/engauge_dev/digitizer/src/digitmain.hb bDigitMainvoidinitStatusBar`/home/mark/engauge_dev/digitizer/src/digitmain.hd dDigitMain voidinitToolBars`/home/mark/engauge_dev/digitizer/src/digitmain.hf fDigitMainvoidinitView`/home/mark/engauge_dev/digitizer/src/digitmain.hh hDigitMainvoidmoveEvent`/home/mark/engauge_dev/digitizer/src/digitmain.h.DigitMain pEventQMoveEvent*voidnewDocument`/home/mark/engauge_dev/digitizer/src/digitmain.hk kDigitMainvoidDigitDoc*noGeometryInfo`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain Ѐvoidvoid openDocumentFile`/home/mark/engauge_dev/digitizer/src/digitmain.h -DigitMainfileconst QStringvoidqueryExit`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainboolremoveDocument`/home/mark/engauge_dev/digitizer/src/digitmain.h &DigitMaindocDigitDoc*void replacePointSets`/home/mark/engauge_dev/digitizer/src/digitmain.hy zEDigitMain docDigitDoc*copyPointSetsPointSets*6pointSetsWithOrphanedPointsQStringList&replacingCurvesboolvoidresetActions`/home/mark/engauge_dev/digitizer/src/digitmain.ho oDigitMainvoidvoidresizeEvent`/home/mark/engauge_dev/digitizer/src/digitmain.h2DigitMain pEventQResizeEvent*voidsafeToQuit`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainboolsetActiveView`/home/mark/engauge_dev/digitizer/src/digitmain.h 'DigitMainviewDigitView*voidsetCurveCmb`/home/mark/engauge_dev/digitizer/src/digitmain.hr r#DigitMain docDigitDoc*void setDigitizeState`/home/mark/engauge_dev/digitizer/src/digitmain.h 6DigitMaindigitizeStateDigitizeStatevoidsetMeasureCmb`/home/mark/engauge_dev/digitizer/src/digitmain.hu u%DigitMaindocDigitDoc*void(slotClipboardChanged`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainu<void.slotCurveComboActivated`/home/mark/engauge_dev/digitizer/src/digitmain.hH H%DigitMain intvoid slotDigitizeAxis`/home/mark/engauge_dev/digitizer/src/digitmain.h  &DigitMain w toggleboolvoid"slotDigitizeCurve`/home/mark/engauge_dev/digitizer/src/digitmain.h$ $'DigitMain y toggleboolvoid&slotDigitizeMeasure`/home/mark/engauge_dev/digitizer/src/digitmain.h* *)DigitMain toggleboolvoid,slotDigitizePointMatch`/home/mark/engauge_dev/digitizer/src/digitmain.h( (,DigitMain toggleboolvoid"slotDigitizeScale`/home/mark/engauge_dev/digitizer/src/digitmain.h" "'DigitMain y toggleboolvoid&slotDigitizeSegment`/home/mark/engauge_dev/digitizer/src/digitmain.h& &)DigitMain toggleboolvoid$slotDigitizeSelect`/home/mark/engauge_dev/digitizer/src/digitmain.h (DigitMain toggleboolvoidslotEditCopy`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain ?voidslotEditCut`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotEditPaste`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain Bvoid$slotEditPasteAsNew`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotEditRedo`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain 8voidslotEditUndo`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileClose`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileExit`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileExport`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoid slotFileExportAs`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileImport`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileOpen`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoid$slotFileOpenRecent`/home/mark/engauge_dev/digitizer/src/digitmain.h -DigitMainu<filenameQStringvoidslotFilePrint`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotFileSave`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainecivoidslotFileSaveAs`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoidslotHelpAbout`/home/mark/engauge_dev/digitizer/src/digitmain.h/ /DigitMainЂvoid slotHelpGlossary`/home/mark/engauge_dev/digitizer/src/digitmain.h3 3DigitMainvoid2slotHelpLineGraphTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h5 5$DigitMainvoid&slotHelpMapTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h9 9DigitMainvoid4slotHelpPointGraphTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h7 7%DigitMainvoid$slotHelpUserManual`/home/mark/engauge_dev/digitizer/src/digitmain.h1 1DigitMain void*slotHideCurveGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.hR R$DigitMain voidvoid.slotHideMeasureGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.hS S&DigitMain voidvoid2slotMeasureComboActivated`/home/mark/engauge_dev/digitizer/src/digitmain.hI I'DigitMainintvoid"slotMenuActivated`/home/mark/engauge_dev/digitizer/src/digitmain.hE E"DigitMainidintvoid(slotMenuPreactivated`/home/mark/engauge_dev/digitizer/src/digitmain.hC CDigitMain void&slotSelectionChange`/home/mark/engauge_dev/digitizer/src/digitmain.hL L"DigitMain voidvoid slotSettingsAxes`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoid(slotSettingsCoordSys`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain fvoid$slotSettingsCurves`/home/mark/engauge_dev/digitizer/src/digitmain.h  DigitMainvoid,slotSettingsDiscretize`/home/mark/engauge_dev/digitizer/src/digitmain.h !DigitMain qvoid.slotSettingsExportSetup`/home/mark/engauge_dev/digitizer/src/digitmain.h "DigitMain rvoid.slotSettingsGridDisplay`/home/mark/engauge_dev/digitizer/src/digitmain.h "DigitMainvoid.slotSettingsGridRemoval`/home/mark/engauge_dev/digitizer/src/digitmain.h "DigitMainvoid(slotSettingsMeasures`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain Wvoid,slotSettingsPointMatch`/home/mark/engauge_dev/digitizer/src/digitmain.h !DigitMainvoid"slotSettingsScale`/home/mark/engauge_dev/digitizer/src/digitmain.h  DigitMainvoid(slotSettingsSegments`/home/mark/engauge_dev/digitizer/src/digitmain.h  DigitMain \void(slotSettingsSessions`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMainvoid&slotStatusNormalMsg`/home/mark/engauge_dev/digitizer/src/digitmain.h; ;1DigitMain textconst QString&void,slotStatusPermanentMsg`/home/mark/engauge_dev/digitizer/src/digitmain.h= =4DigitMaintextconst QString&void,slotStatusTemporaryMsg`/home/mark/engauge_dev/digitizer/src/digitmain.h? ?4DigitMain textconst QString&void*slotStatusTrackingMsg`/home/mark/engauge_dev/digitizer/src/digitmain.hA AQDigitMaintextCoordsconst QString&textResconst QString&void0slotTransformationChange`/home/mark/engauge_dev/digitizer/src/digitmain.hO O'DigitMain voidvoid$slotUpdateGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h !DigitMainvoidvoid"slotViewAllPoints`/home/mark/engauge_dev/digitizer/src/digitmain.h 'DigitMain Z toggleboolvoid$slotViewAxesPoints`/home/mark/engauge_dev/digitizer/src/digitmain.h (DigitMain Q toggleboolvoid*slotViewCurveGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h +DigitMain toggleboolvoid&slotViewCurvePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h )DigitMaino toggleboolvoidDslotViewDigitizeCurvePointsToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h 8DigitMain I toggleboolvoidHslotViewDigitizeMeasurePointsToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h :DigitMainR toggleboolvoid&slotViewFileToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h )DigitMain toggleboolvoid&slotViewGridDisplay`/home/mark/engauge_dev/digitizer/src/digitmain.h )DigitMain toggleboolvoid2slotViewImageScaleToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h /DigitMain M toggleboolvoid.slotViewMeasureGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h -DigitMain toggleboolvoid*slotViewMeasurePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h +DigitMain toggleboolvoid(slotViewNoBackground`/home/mark/engauge_dev/digitizer/src/digitmain.h *DigitMain [ toggleboolvoid*slotViewOriginalImage`/home/mark/engauge_dev/digitizer/src/digitmain.h +DigitMain toggleboolvoid,slotViewProcessedImage`/home/mark/engauge_dev/digitizer/src/digitmain.h ,DigitMain toggleboolvoid&slotViewScalePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h )DigitMain toggleboolvoid*slotViewSelectToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h +DigitMain toggleboolvoid"slotViewStatusBar`/home/mark/engauge_dev/digitizer/src/digitmain.h 'DigitMain toggleboolvoid&slotViewZoomToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h )DigitMain toggleboolvoid&slotWindowNewWindow`/home/mark/engauge_dev/digitizer/src/digitmain.h- -DigitMain voidspawnHelp`/home/mark/engauge_dev/digitizer/src/digitmain.h $DigitMain ӀhelpHomeQStringvoid,toggleActionPasteAsNew`/home/mark/engauge_dev/digitizer/src/digitmain.h %DigitMainvoidvoidtoggleActions`/home/mark/engauge_dev/digitizer/src/digitmain.h DigitMain voidvoid"toggleActionsEdit`/home/mark/engauge_dev/digitizer/src/digitmain.h  DigitMain voidvoid~ DigitMain`/home/mark/engauge_dev/digitizer/src/digitmain.hDigitMaino^curveCmb`/home/mark/engauge_dev/digitizer/src/digitmain.h CurveCmb* curveGeometryDlg`/home/mark/engauge_dev/digitizer/src/digitmain.h%%!GeometryDlg*digitizeAction`/home/mark/engauge_dev/digitizer/src/digitmain.h QActionGroup*digitizeAxis`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*digitizeCurve`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*4digitizeCurvePointsToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h (QToolBar*digitizeMeasure`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*8digitizeMeasurePointsToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h *QToolBar*digitizeMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*$digitizePointMatch`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*digitizeScale`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*digitizeSegment`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*digitizeSelect`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*docList`/home/mark/engauge_dev/digitizer/src/digitmain.h*QPtrList< DigitDoc >*editCopy`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*editCut`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*editMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*editPaste`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*editPasteAsNew`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*editRedo`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*editUndo`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileClose`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileExit`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileExport`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileExportAs`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileImport`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*fileOpen`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileOpenRecent`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*filePrint`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileSave`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileSaveAs`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*fileToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h QToolBar*helpAboutApp`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*helpGlossary`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction**helpLineGraphTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h "QAction*helpMapTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*helpMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*,helpPointGraphTutorial`/home/mark/engauge_dev/digitizer/src/digitmain.h #QAction*helpUserManual`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*"imageScaleToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h QToolBar*m_activeView`/home/mark/engauge_dev/digitizer/src/digitmain.h" "DigitView*,m_exportFileAtShutdown`/home/mark/engauge_dev/digitizer/src/digitmain.h, ,"QStringm_mruDocuments`/home/mark/engauge_dev/digitizer/src/digitmain.h))MruDocumentsmeasureCmb`/home/mark/engauge_dev/digitizer/src/digitmain.hMeasureCmb*$measureGeometryDlg`/home/mark/engauge_dev/digitizer/src/digitmain.h&&#GeometryDlg*printer`/home/mark/engauge_dev/digitizer/src/digitmain.h QPrinter*selectToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h QToolBar*settingsAxes`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction* settingsCoordSys`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*settingsCurves`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*$settingsDiscretize`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction*&settingsExportSetup`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction*&settingsGridDisplay`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction*&settingsGridRemoval`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction* settingsMeasures`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*settingsMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*$settingsPointMatch`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*settingsScale`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction* settingsSegments`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction* settingsSessions`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction*statusCoords`/home/mark/engauge_dev/digitizer/src/digitmain.h QLabel*statusNormal`/home/mark/engauge_dev/digitizer/src/digitmain.h QLabel*statusPermanent`/home/mark/engauge_dev/digitizer/src/digitmain.h QLabel*statusRes`/home/mark/engauge_dev/digitizer/src/digitmain.h QLabel*viewAllPoints`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewAxesPoints`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*(viewBackgroundAction`/home/mark/engauge_dev/digitizer/src/digitmain.h&QActionGroup*"viewCurveGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewCurvePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*<viewDigitizeCurvePointsToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h +QAction*@viewDigitizeMeasurePointsToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h -QAction*viewFileToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewGridDisplay`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction**viewImageScaleToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h "QAction*&viewMeasureGeometry`/home/mark/engauge_dev/digitizer/src/digitmain.h  QAction*"viewMeasurePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu* viewNoBackground`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*"viewOriginalImage`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction* viewPointsAction`/home/mark/engauge_dev/digitizer/src/digitmain.h"QActionGroup*$viewProcessedImage`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewScalePoints`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*"viewSelectToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewStatusBar`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*viewZoomToolBar`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*windowAction`/home/mark/engauge_dev/digitizer/src/digitmain.hQActionGroup*windowCascade`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*windowMenu`/home/mark/engauge_dev/digitizer/src/digitmain.hQPopupMenu*windowNewWindow`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*windowTile`/home/mark/engauge_dev/digitizer/src/digitmain.h QAction*workspace`/home/mark/engauge_dev/digitizer/src/digitmain.hQWorkspace*zoomCmb`/home/mark/engauge_dev/digitizer/src/digitmain.h ZoomCmb*zoomToolbar`/home/mark/engauge_dev/digitizer/src/digitmain.h QToolBar*d/home/mark/engauge_dev/digitizer/src/digittool.cpp7DigitToold/home/mark/engauge_dev/digitizer/src/digittool.cppLRDigitToolc.l stateDigitizeStatePointAxisToold/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolPointCurveToold/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveToolPointMatchToold/home/mark/engauge_dev/digitizer/src/digittool.cppPointMatchTool PointMeasureToold/home/mark/engauge_dev/digitizer/src/digittool.cppY] PointMeasureTool ScaleToold/home/mark/engauge_dev/digitizer/src/digittool.cppScaleToolSegmentToold/home/mark/engauge_dev/digitizer/src/digittool.cpp SegmentToolSelectToold/home/mark/engauge_dev/digitizer/src/digittool.cppdhSelectToolactivateSegmentd/home/mark/engauge_dev/digitizer/src/digittool.cpp.SegmentToolviewDigitView*eQMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolDigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveTool DigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp$&PointMatchToolDigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cppdf PointMeasureToolDigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cppScaleTool DigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp02SegmentTool DigitView*QMouseEvent*void:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digittool.cppnpSelectToolu<DigitView*QMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolHviewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp(0PointMatchToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cpphn PointMeasureTool viewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cppScaleToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp4<SegmentToolDviewDigitView*eQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digittool.cpprSelectToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp2@PointMatchToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppp PointMeasureToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppScaleToolviewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp>YSegmentTool viewDigitView*eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppSelectToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolDigitView*QMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveTool DigitView*QMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cppBDPointMatchToolDigitView*QMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp PointMeasureToolDigitView*QMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cppScaleToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp[]SegmentToolBDigitView*QMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digittool.cppSelectToolviewDigitView*eQMouseEvent*voideditAxisPointd/home/mark/engauge_dev/digitizer/src/digittool.cpphDigitToolviewDigitView*xdouble*ydouble*booleditScalePointd/home/mark/engauge_dev/digitizer/src/digittool.cppDigitToolviewDigitView* lengthdouble*boolfindToold/home/mark/engauge_dev/digitizer/src/digittool.cppYfDigitTool  stateDigitizeStateDigitTool*keyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisToolDigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveTool DigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppFWPointMatchToolviewDigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp PointMeasureTool DigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppScaleToolDigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cpp_bSegmentTooldDigitView*eQKeyEvent*voidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digittool.cppSelectToolDigitView*eQKeyEvent*void~ DigitToold/home/mark/engauge_dev/digitizer/src/digittool.cppTWDigitToolv~ PointAxisToold/home/mark/engauge_dev/digitizer/src/digittool.cppPointAxisTool ~ PointCurveToold/home/mark/engauge_dev/digitizer/src/digittool.cppPointCurveTool ~ PointMatchToold/home/mark/engauge_dev/digitizer/src/digittool.cpp"PointMatchTool$~ PointMeasureToold/home/mark/engauge_dev/digitizer/src/digittool.cpp_b PointMeasureTool~ ScaleToold/home/mark/engauge_dev/digitizer/src/digittool.cppScaleTool ~ SegmentToold/home/mark/engauge_dev/digitizer/src/digittool.cpp SegmentTool~ SelectToold/home/mark/engauge_dev/digitizer/src/digittool.cppjlSelectToolaxisToold/home/mark/engauge_dev/digitizer/src/digittool.cppDDPointAxisToolcurveToold/home/mark/engauge_dev/digitizer/src/digittool.cppEEPointCurveToolmatchToold/home/mark/engauge_dev/digitizer/src/digittool.cppFFPointMatchToolmeasureToold/home/mark/engauge_dev/digitizer/src/digittool.cppGG# PointMeasureToolscaleToold/home/mark/engauge_dev/digitizer/src/digittool.cppHHScaleToolsegmentToold/home/mark/engauge_dev/digitizer/src/digittool.cppIISegmentToolselectToold/home/mark/engauge_dev/digitizer/src/digittool.cppJJSelectTool`/home/mark/engauge_dev/digitizer/src/digittool.hDigitTool`/home/mark/engauge_dev/digitizer/src/digittool.h4T DigitTool`/home/mark/engauge_dev/digitizer/src/digittool.h88"DigitToolh.l stateDigitizeState:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hEESDigitToolDviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hFFLDigitToolDviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hGGMDigitToolDviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hHHODigitToolDviewDigitView*eQMouseEvent*voideditAxisPoint`/home/mark/engauge_dev/digitizer/src/digittool.hN N=DigitToolviewDigitView*xdouble*ydouble*booleditScalePoint`/home/mark/engauge_dev/digitizer/src/digittool.hO O8DigitToolviewDigitView* lengthdouble*boolfindTool`/home/mark/engauge_dev/digitizer/src/digittool.h??3DigitTool stateDigitizeStateDigitTool*keyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hIIADigitToolDviewDigitView*eQKeyEvent*void state`/home/mark/engauge_dev/digitizer/src/digittool.h<<1DigitToolvoidDigitizeState~ DigitTool`/home/mark/engauge_dev/digitizer/src/digittool.h9 9DigitToolv state`/home/mark/engauge_dev/digitizer/src/digittool.h<<1DigitToolvoidDigitizeStateareaSelect`/home/mark/engauge_dev/digitizer/src/digittool.hCCboolm_state`/home/mark/engauge_dev/digitizer/src/digittool.hSSDigitizeStatetoolList`/home/mark/engauge_dev/digitizer/src/digittool.h@@'*QPtrList< DigitTool >PointAxisTool`/home/mark/engauge_dev/digitizer/src/digittool.hWcDigitToolPointAxisTool`/home/mark/engauge_dev/digitizer/src/digittool.h[[PointAxisTool:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.h^^OPointAxisToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.h__HPointAxisToolviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h``IPointAxisToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.haaKPointAxisTool|viewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hbb=PointAxisToolviewDigitView*eQKeyEvent*void~ PointAxisTool`/home/mark/engauge_dev/digitizer/src/digittool.h\\PointAxisTool0PointCurveTool`/home/mark/engauge_dev/digitizer/src/digittool.hfrDigitToolPointCurveTool`/home/mark/engauge_dev/digitizer/src/digittool.hjjPointCurveTool:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hmmOPointCurveToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hnnHPointCurveToolviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hooIPointCurveToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hppKPointCurveToolviewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hqq=PointCurveToolviewDigitView*eQKeyEvent*void ~ PointCurveTool`/home/mark/engauge_dev/digitizer/src/digittool.hkkPointCurveToolPointMatchTool`/home/mark/engauge_dev/digitizer/src/digittool.huDigitToolPointMatchTool`/home/mark/engauge_dev/digitizer/src/digittool.hyyPointMatchToolu<:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.h||OPointMatchToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.h}}HPointMatchToolviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h~~IPointMatchToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hKPointMatchTool viewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h=PointMatchToolׄviewDigitView*eQKeyEvent*void ~ PointMatchTool`/home/mark/engauge_dev/digitizer/src/digittool.hzzPointMatchTool PointMeasureTool`/home/mark/engauge_dev/digitizer/src/digittool.hDigitTool PointMeasureTool`/home/mark/engauge_dev/digitizer/src/digittool.h PointMeasureTool:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hO PointMeasureToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hH PointMeasureToolviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hI PointMeasureToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hK PointMeasureToolviewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h= PointMeasureToolviewDigitView*eQKeyEvent*void$~ PointMeasureTool`/home/mark/engauge_dev/digitizer/src/digittool.h PointMeasureTool9ScaleTool`/home/mark/engauge_dev/digitizer/src/digittool.hDigitToolScaleTool`/home/mark/engauge_dev/digitizer/src/digittool.hScaleTool:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hOScaleTool viewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hHScaleToolviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hIScaleToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hKScaleToolviewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h=ScaleToolviewDigitView*eQKeyEvent*void~ ScaleTool`/home/mark/engauge_dev/digitizer/src/digittool.hScaleTool cursorDown`/home/mark/engauge_dev/digitizer/src/digittool.h  QPointdrawingBar`/home/mark/engauge_dev/digitizer/src/digittool.h boolpointEnd`/home/mark/engauge_dev/digitizer/src/digittool.h  Point*pointStart`/home/mark/engauge_dev/digitizer/src/digittool.h  Point*SegmentTool`/home/mark/engauge_dev/digitizer/src/digittool.hDigitToolSegmentTool`/home/mark/engauge_dev/digitizer/src/digittool.hSegmentToolactivateSegment`/home/mark/engauge_dev/digitizer/src/digittool.h 9SegmentToolviewDigitView*eQMouseEvent*void:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hOSegmentToolviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hHSegmentToolu<viewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hISegmentToolviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hKSegmentToolviewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h=SegmentToolviewDigitView*eQKeyEvent*void~ SegmentTool`/home/mark/engauge_dev/digitizer/src/digittool.hSegmentTool activeSegment`/home/mark/engauge_dev/digitizer/src/digittool.h Segment*SelectTool`/home/mark/engauge_dev/digitizer/src/digittool.hDigitToolSelectTool`/home/mark/engauge_dev/digitizer/src/digittool.hSelectTool:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digittool.hOSelectToolsviewDigitView*eQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digittool.hHSelectToolBviewDigitView*eQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digittool.hISelectToolcviewDigitView*eQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digittool.hKSelectToolviewDigitView*eQMouseEvent*voidkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digittool.h=SelectToolviewDigitView*eQKeyEvent*void~ SelectTool`/home/mark/engauge_dev/digitizer/src/digittool.hSelectToolAreaSelect`/home/mark/engauge_dev/digitizer/src/digittool.hintMove`/home/mark/engauge_dev/digitizer/src/digittool.h intNone`/home/mark/engauge_dev/digitizer/src/digittool.h intcursorDown`/home/mark/engauge_dev/digitizer/src/digittool.h  QPointcursorLast`/home/mark/engauge_dev/digitizer/src/digittool.h  QPointselectMode`/home/mark/engauge_dev/digitizer/src/digittool.hSelectModed/home/mark/engauge_dev/digitizer/src/digitview.cpp"DigitViewd/home/mark/engauge_dev/digitizer/src/digitview.cppJbDigitViewc.wdocDigitDoc* parentQWidget*nameconst char* wFlagsintaddHandlesd/home/mark/engauge_dev/digitizer/src/digitview.cppJqDigitView boundsconst QRect&void&addSampleMatchPointd/home/mark/engauge_dev/digitizer/src/digitview.cpp#DigitView"samplePointPixels$const QPointArray&voidcloseEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewQCloseEvent*void$collisionsFilteredd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewp QPointrttiintQCanvasItemList$collisionsFilteredd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewp1 QPointp2 QPointrttiintQCanvasItemList$collisionsFilteredd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitView j listInQCanvasItemListrttiintQCanvasItemList:contentsMouseDoubleClickEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewDeQMouseEvent*void,contentsMouseMoveEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewu<eQMouseEvent*void.contentsMousePressEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewFeQMouseEvent*void2contentsMouseReleaseEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitVieweQMouseEvent*voidconvertZoomd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewtp QPointtobool QPointconvertZoomd/home/mark/engauge_dev/digitizer/src/digitview.cpp.DigitViewr QRecttobool QRect$drawRubberBandLined/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewcorner1 QPointcorner2 QPointvoid.drawRubberBandRectangled/home/mark/engauge_dev/digitizer/src/digitview.cppi~DigitViewcorner1 QPointcorner2 QPointvoidkeyPressEventd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitVieweQKeyEvent*voidlistBoundsd/home/mark/engauge_dev/digitizer/src/digitview.cpp0HDigitViewlist QCanvasItemList* QRectmoveHandlesd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitView delta QPointvoidmoveSelectiond/home/mark/engauge_dev/digitizer/src/digitview.cpp DigitView | delta QPointvoidpointIsSelectedd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewu<itemQCanvasItem*boolremoveHandlesd/home/mark/engauge_dev/digitizer/src/digitview.cppsDigitViewvoid,removeSampleMatchPointd/home/mark/engauge_dev/digitizer/src/digitview.cpp%(DigitViewvoidvoidsafeUpcastd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewitr2QCanvasItemList::iterator Point*$selectItemsReplaced/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewlist QCanvasItemList*void"selectItemsToggled/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewu<list QCanvasItemList*voidselectSegmentd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitView qsegmentSegment*void"showAreaSelectEndd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewicursorDown QPointcursorLast QPointvoid$showAreaSelectMoved/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewBcursorDown QPointcursorLast QPointcursorNext QPointvoidshowScaleBarEndd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewcursorDown QPointcursorLast QPointvoid showScaleBarMoved/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewocursorDown QPointcursorLast QPointcursorNext QPointvoidslotZoomChanged/home/mark/engauge_dev/digitizer/src/digitview.cpp.=DigitViewzoomconst QString&voidunselectd/home/mark/engauge_dev/digitizer/src/digitview.cppDigitViewvoid updated/home/mark/engauge_dev/digitizer/src/digitview.cppDigitView senderDigitView*boundingRect QRectvoid~ DigitViewd/home/mark/engauge_dev/digitizer/src/digitview.cppdgDigitViewv`/home/mark/engauge_dev/digitizer/src/digitview.hDigitView`/home/mark/engauge_dev/digitizer/src/digitview.h6QCanvasView%DigitView`/home/mark/engauge_dev/digitizer/src/digitview.h>>KDigitViewh.wdocDigitDoc* parentQWidget*nameconst char* wFlagsintaddHandles`/home/mark/engauge_dev/digitizer/src/digitview.h (DigitView boundsconst QRect&void&addSampleMatchPoint`/home/mark/engauge_dev/digitizer/src/digitview.hg gBDigitViewu<"samplePointPixels$const QPointArray&voidcloseEvent`/home/mark/engauge_dev/digitizer/src/digitview.hqq+DigitVieweQCloseEvent*void$collisionsFiltered`/home/mark/engauge_dev/digitizer/src/digitview.hPP:DigitViewp QPointrttiintQCanvasItemList$collisionsFiltered`/home/mark/engauge_dev/digitizer/src/digitview.hQQFDigitViewp1 QPointp2 QPointrttiintQCanvasItemList$collisionsFiltered`/home/mark/engauge_dev/digitizer/src/digitview.hRRHDigitView listInQCanvasItemListrttiintQCanvasItemList:contentsMouseDoubleClickEvent`/home/mark/engauge_dev/digitizer/src/digitview.hrr>DigitVieweQMouseEvent*void,contentsMouseMoveEvent`/home/mark/engauge_dev/digitizer/src/digitview.hss7DigitVieweQMouseEvent*void.contentsMousePressEvent`/home/mark/engauge_dev/digitizer/src/digitview.htt8DigitVieweQMouseEvent*void2contentsMouseReleaseEvent`/home/mark/engauge_dev/digitizer/src/digitview.huu:DigitVieweQMouseEvent*voidconvertZoom`/home/mark/engauge_dev/digitizer/src/digitview.h )DigitViewp QPointtobool QPointconvertZoom`/home/mark/engauge_dev/digitizer/src/digitview.h 'DigitViewr QRecttobool QRectdocument`/home/mark/engauge_dev/digitizer/src/digitview.hBB0DigitView( DigitDoc*$drawRubberBandLine`/home/mark/engauge_dev/digitizer/src/digitview.h 5DigitView start QPointend QPointvoid.drawRubberBandRectangle`/home/mark/engauge_dev/digitizer/src/digitview.h @DigitViewcorner1 QPointcorner2 QPointvoidisSelection`/home/mark/engauge_dev/digitizer/src/digitview.haa@DigitViewvoidboolkeyPressEvent`/home/mark/engauge_dev/digitizer/src/digitview.hvv,DigitView eQKeyEvent*voidlistBounds`/home/mark/engauge_dev/digitizer/src/digitview.h +DigitViewlist QCanvasItemList* QRectmoveHandles`/home/mark/engauge_dev/digitizer/src/digitview.h "DigitView delta QPointvoidmoveSelection`/home/mark/engauge_dev/digitizer/src/digitview.hU U$DigitView delta QPointvoidpointIsSelected`/home/mark/engauge_dev/digitizer/src/digitview.h^ ^+DigitView zitemQCanvasItem*boolremoveHandles`/home/mark/engauge_dev/digitizer/src/digitview.h DigitViewu<voidvoid,removeSampleMatchPoint`/home/mark/engauge_dev/digitizer/src/digitview.hh h%DigitViewvoidvoidsafeUpcast`/home/mark/engauge_dev/digitizer/src/digitview.h 4DigitViewitr2QCanvasItemList::iterator Point*$selectItemsReplace`/home/mark/engauge_dev/digitizer/src/digitview.hX X2DigitViewȀlist QCanvasItemList*void"selectItemsToggle`/home/mark/engauge_dev/digitizer/src/digitview.hZ Z1DigitView(list QCanvasItemList*voidselectSegment`/home/mark/engauge_dev/digitizer/src/digitview.hY Y(DigitViewsegmentSegment*void"showAreaSelectEnd`/home/mark/engauge_dev/digitizer/src/digitview.hI I@DigitView cursorDown QPointcursorLast QPointvoid$showAreaSelectMove`/home/mark/engauge_dev/digitizer/src/digitview.hH HTDigitViewcursorDown QPointcursorLast QPointcursorNext QPointvoidshowScaleBarEnd`/home/mark/engauge_dev/digitizer/src/digitview.hM M>DigitViewcursorDown QPointcursorLast QPointvoid showScaleBarMove`/home/mark/engauge_dev/digitizer/src/digitview.hL LRDigitView cursorDown QPointcursorLast QPointcursorNext QPointvoidslotZoomChange`/home/mark/engauge_dev/digitizer/src/digitview.hl l,DigitViewzoomconst QString&voidunselect`/home/mark/engauge_dev/digitizer/src/digitview.h[ [DigitViewvoidvoid update`/home/mark/engauge_dev/digitizer/src/digitview.hE E6DigitView  senderDigitView*boundingRect QRectvoidzoom`/home/mark/engauge_dev/digitizer/src/digitview.hdd%DigitView vvoidint~ DigitView`/home/mark/engauge_dev/digitizer/src/digitview.h??DigitViewvdocument`/home/mark/engauge_dev/digitizer/src/digitview.hBB0DigitView( DigitDoc*isSelection`/home/mark/engauge_dev/digitizer/src/digitview.haa@DigitViewvoidboolzoom`/home/mark/engauge_dev/digitizer/src/digitview.hdd%DigitView vvoidint m_doc`/home/mark/engauge_dev/digitizer/src/digitview.hz zDigitDoc*m_handles`/home/mark/engauge_dev/digitizer/src/digitview.h(8QPtrList< QCanvasRectangle >m_selectedItems`/home/mark/engauge_dev/digitizer/src/digitview.h).QPtrList< QCanvasItem > m_zoom`/home/mark/engauge_dev/digitizer/src/digitview.hintselectionList`/home/mark/engauge_dev/digitizer/src/digitview.h!QCanvasItemListf/home/mark/engauge_dev/digitizer/src/discretize.cpp Discretizef/home/mark/engauge_dev/digitizer/src/discretize.cpp?BDiscretize.ezbackgroundColorf/home/mark/engauge_dev/digitizer/src/discretize.cppIuDiscretize | imageconst QImage*QRgb"colorAttributeMaxf/home/mark/engauge_dev/digitizer/src/discretize.cppwDiscretize€ method DiscretizeMethodintcolorComparef/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize color1QRgb color2QRgbbooldiscretizef/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize P imageQImage*settings$DiscretizeSettingsbackgroundColorQRgbvoid2discretizeValueForegroundf/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize였 imageconst QImage*xintyint method DiscretizeMethodrBgintgBgintbBgintint8discretizeValueNotForegroundf/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretizeav( imageconst QImage*xintyint method DiscretizeMethodintpixelIsOnf/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize valueintlowinthighintboolpixelIsOnf/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize valueintsettings&GridRemovalSettingsboolpixelIsOnf/home/mark/engauge_dev/digitizer/src/discretize.cppDiscretize valueintsettings$DiscretizeSettingsbool$processedPixelIsOnf/home/mark/engauge_dev/digitizer/src/discretize.cpp&Discretize E imageconst QImage&xintyintbool~ Discretizef/home/mark/engauge_dev/digitizer/src/discretize.cppDGDiscretizeub/home/mark/engauge_dev/digitizer/src/discretize.hDiscretizeb/home/mark/engauge_dev/digitizer/src/discretize.h8dColorEntryb/home/mark/engauge_dev/digitizer/src/discretize.h\`Discretize colorb/home/mark/engauge_dev/digitizer/src/discretize.h^ ^ QColor countb/home/mark/engauge_dev/digitizer/src/discretize.h_ _int Discretizeb/home/mark/engauge_dev/digitizer/src/discretize.h<<Discretize.ezbackgroundColorb/home/mark/engauge_dev/digitizer/src/discretize.hC C-Discretizeu imageconst QImage*QRgb"colorAttributeMaxb/home/mark/engauge_dev/digitizer/src/discretize.h@@8Discretize  method DiscretizeMethodintcolorCompareb/home/mark/engauge_dev/digitizer/src/discretize.hF F/Discretize color1QRgb color2QRgbbooldiscretizeb/home/mark/engauge_dev/digitizer/src/discretize.hR RYDiscretize imageQImage*settings$DiscretizeSettingsbackgroundColorQRgbvoid2discretizeValueForegroundb/home/mark/engauge_dev/digitizer/src/discretize.hKL&DiscretizeC  imageconst QImage*xintyint method DiscretizeMethodrBgintgBgintbBgintint8discretizeValueNotForegroundb/home/mark/engauge_dev/digitizer/src/discretize.hJJfDiscretize Ġ imageconst QImage*xintyint method DiscretizeMethodintpixelIsOnb/home/mark/engauge_dev/digitizer/src/discretize.hU UADiscretize  valueintsettings&GridRemovalSettingsboolpixelIsOnb/home/mark/engauge_dev/digitizer/src/discretize.hV V@Discretize valueintsettings$DiscretizeSettingsboolpixelIsOnb/home/mark/engauge_dev/digitizer/src/discretize.hc c6Discretizeu< valueintlowinthighintbool$processedPixelIsOnb/home/mark/engauge_dev/digitizer/src/discretize.hW WDDiscretize  imageconst QImage&xintyintbool~ Discretizeb/home/mark/engauge_dev/digitizer/src/discretize.h==Discretize ColorListb/home/mark/engauge_dev/digitizer/src/discretize.ha#a,0QValueList< ColorEntry >l/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp DiscretizeDlgl/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp<DiscretizeDlgc.g titleQStringimageOriginalconst QImage*settings&DiscretizeSettings* loadWorkingImagel/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlgvoid&setDiscretizeMethodl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlg method DiscretizeMethodvoidslotForegroundl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlgvoidslotHuel/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlg voidslotIntensityl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlgvoidslotLimitChangel/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp(DiscretizeDlg lowerbool limitintvoidslotSaturationl/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp*-DiscretizeDlgvoidslotValuel/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp/2DiscretizeDlgÀvoidslotWhatl/home/mark/engauge_dev/digitizer/src/discretizedlg.cpp47DiscretizeDlgvoidtoggleActionsl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlg zvoid~ DiscretizeDlgl/home/mark/engauge_dev/digitizer/src/discretizedlg.cppDiscretizeDlgdezh/home/mark/engauge_dev/digitizer/src/discretizedlg.hDiscretizeDlgh/home/mark/engauge_dev/digitizer/src/discretizedlg.h=QDialogDiscretizeDlgh/home/mark/engauge_dev/digitizer/src/discretizedlg.hCD#DiscretizeDlgh.g titleQStringimageOriginalconst QImage*settings&DiscretizeSettings* loadWorkingImageh/home/mark/engauge_dev/digitizer/src/discretizedlg.hg gDiscretizeDlgvoidvoid&setDiscretizeMethodh/home/mark/engauge_dev/digitizer/src/discretizedlg.hT T5DiscretizeDlgu< method DiscretizeMethodvoidsetHueHighh/home/mark/engauge_dev/digitizer/src/discretizedlg.hW WDiscretizeDlg limitintvoidsetHueLowh/home/mark/engauge_dev/digitizer/src/discretizedlg.hX XDiscretizeDlg limitintvoid"setSaturationHighh/home/mark/engauge_dev/digitizer/src/discretizedlg.hY Y%DiscretizeDlg limitintvoid setSaturationLowh/home/mark/engauge_dev/digitizer/src/discretizedlg.hZ Z$DiscretizeDlg limitintvoidsetValueHighh/home/mark/engauge_dev/digitizer/src/discretizedlg.h[ [ DiscretizeDlg limitintvoidsetValueLowh/home/mark/engauge_dev/digitizer/src/discretizedlg.h\ \DiscretizeDlg limitintvoidslotForegroundh/home/mark/engauge_dev/digitizer/src/discretizedlg.hJ JDiscretizeDlgvoidslotHueh/home/mark/engauge_dev/digitizer/src/discretizedlg.hK KDiscretizeDlgvoidslotIntensityh/home/mark/engauge_dev/digitizer/src/discretizedlg.hI IDiscretizeDlgvoidslotLimitChangeh/home/mark/engauge_dev/digitizer/src/discretizedlg.hL L#DiscretizeDlgu<boolintvoidslotSaturationh/home/mark/engauge_dev/digitizer/src/discretizedlg.hM MDiscretizeDlgvoidslotValueh/home/mark/engauge_dev/digitizer/src/discretizedlg.hN NDiscretizeDlgvoidslotWhath/home/mark/engauge_dev/digitizer/src/discretizedlg.hO ODiscretizeDlgu<voidvoidtoggleActionsh/home/mark/engauge_dev/digitizer/src/discretizedlg.h_ _DiscretizeDlgvoidvoid~ DiscretizeDlgh/home/mark/engauge_dev/digitizer/src/discretizedlg.hEEDiscretizeDlgdezbuttonCancelh/home/mark/engauge_dev/digitizer/src/discretizedlg.h}}QPushButton* buttonForegroundh/home/mark/engauge_dev/digitizer/src/discretizedlg.hnn"QRadioButton*buttonHueh/home/mark/engauge_dev/digitizer/src/discretizedlg.hooQRadioButton*buttonIntensityh/home/mark/engauge_dev/digitizer/src/discretizedlg.hmm!QRadioButton*buttonOkh/home/mark/engauge_dev/digitizer/src/discretizedlg.h||QPushButton* buttonSaturationh/home/mark/engauge_dev/digitizer/src/discretizedlg.hpp"QRadioButton*buttonValueh/home/mark/engauge_dev/digitizer/src/discretizedlg.hqqQRadioButton*buttonWhath/home/mark/engauge_dev/digitizer/src/discretizedlg.h~~QPushButton*colorChooserh/home/mark/engauge_dev/digitizer/src/discretizedlg.httColorChooser*discretizeh/home/mark/engauge_dev/digitizer/src/discretizedlg.hDiscretizegroupSelectionh/home/mark/engauge_dev/digitizer/src/discretizedlg.hjj QButtonGroup*imageOriginalh/home/mark/engauge_dev/digitizer/src/discretizedlg.hbbconst QImage*imageWorkingh/home/mark/engauge_dev/digitizer/src/discretizedlg.h  QImagelabelPreviewh/home/mark/engauge_dev/digitizer/src/discretizedlg.hw wQLabel*previewCanvash/home/mark/engauge_dev/digitizer/src/discretizedlg.hx xQCanvas*"previewCanvasViewh/home/mark/engauge_dev/digitizer/src/discretizedlg.hyy"QCanvasView*settingsh/home/mark/engauge_dev/digitizer/src/discretizedlg.hcc &DiscretizeSettings* titleh/home/mark/engauge_dev/digitizer/src/discretizedlg.ha aQStringd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlgd/home/mark/engauge_dev/digitizer/src/exportdlg.cpp1ExportDlgc.g titleQStringpointSetsPointSets* coord(const CoordSettings*grid.const GridMeshSettings* xportExportSettings*resetListsd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlgvoid.slotAllCurvesOnEachLined/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg toggleboolvoidslotCommasd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg) toggleboolvoidslotExcluded/home/mark/engauge_dev/digitizer/src/exportdlg.cppwExportDlgDvoidslotExcludedd/home/mark/engauge_dev/digitizer/src/exportdlg.cppbeExportDlgmQListBoxItem*voidslotGnuplotd/home/mark/engauge_dev/digitizer/src/exportdlg.cpp ExportDlg toggleboolvoidslotIncluded/home/mark/engauge_dev/digitizer/src/exportdlg.cppguExportDlg)voidslotIncludedd/home/mark/engauge_dev/digitizer/src/exportdlg.cpp]`ExportDlgoQListBoxItem*voidslotNoned/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg toggleboolvoid,slotOneCurveOnEachLined/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg첀 toggleboolvoidslotSimpled/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg  toggleboolvoidslotSpacesd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg toggleboolvoidslotTabsd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg  toggleboolvoidslotWhatd/home/mark/engauge_dev/digitizer/src/exportdlg.cpp ExportDlgvoidslotXAllCurvesd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg toggleboolvoidslotXFirstCurved/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlgn toggleboolvoidslotXGridLinesd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg첀 toggleboolvoidslotXYAllCurvesd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg toggleboolvoidtoggleActionsd/home/mark/engauge_dev/digitizer/src/exportdlg.cppEExportDlgvoidupdatePreviewd/home/mark/engauge_dev/digitizer/src/exportdlg.cppGWExportDlg2void~ ExportDlgd/home/mark/engauge_dev/digitizer/src/exportdlg.cppExportDlg`/home/mark/engauge_dev/digitizer/src/exportdlg.hExportDlg`/home/mark/engauge_dev/digitizer/src/exportdlg.h*QDialogExportDlg`/home/mark/engauge_dev/digitizer/src/exportdlg.h01:ExportDlgh.g titleQStringpointSetsPointSets* coord(const CoordSettings*grid.const GridMeshSettings* xportExportSettings*resetLists`/home/mark/engauge_dev/digitizer/src/exportdlg.hM MExportDlgʀvoidvoid.slotAllCurvesOnEachLine`/home/mark/engauge_dev/digitizer/src/exportdlg.h> >-ExportDlg toggleboolvoidslotCommas`/home/mark/engauge_dev/digitizer/src/exportdlg.h@ @ ExportDlgu< toggleboolvoidslotExclude`/home/mark/engauge_dev/digitizer/src/exportdlg.h9 9ExportDlg voidvoidslotExcluded`/home/mark/engauge_dev/digitizer/src/exportdlg.h7 7)ExportDlgitemQListBoxItem*voidslotGnuplot`/home/mark/engauge_dev/digitizer/src/exportdlg.hE E!ExportDlg toggleboolvoidslotInclude`/home/mark/engauge_dev/digitizer/src/exportdlg.h8 8ExportDlgvoidvoidslotIncluded`/home/mark/engauge_dev/digitizer/src/exportdlg.h6 6)ExportDlgitemQListBoxItem*voidslotNone`/home/mark/engauge_dev/digitizer/src/exportdlg.hC CExportDlg toggleboolvoid,slotOneCurveOnEachLine`/home/mark/engauge_dev/digitizer/src/exportdlg.h? ?,ExportDlg toggleboolvoidslotSimple`/home/mark/engauge_dev/digitizer/src/exportdlg.hD D ExportDlg toggleboolvoidslotSpaces`/home/mark/engauge_dev/digitizer/src/exportdlg.hA A ExportDlg toggleboolvoidslotTabs`/home/mark/engauge_dev/digitizer/src/exportdlg.hB BExportDlg toggleboolvoidslotWhat`/home/mark/engauge_dev/digitizer/src/exportdlg.hF FExportDlgvoidvoidslotXAllCurves`/home/mark/engauge_dev/digitizer/src/exportdlg.h: :$ExportDlgu< toggleboolvoidslotXFirstCurve`/home/mark/engauge_dev/digitizer/src/exportdlg.h; ;%ExportDlg toggleboolvoidslotXGridLines`/home/mark/engauge_dev/digitizer/src/exportdlg.h< <$ExportDlg toggleboolvoidslotXYAllCurves`/home/mark/engauge_dev/digitizer/src/exportdlg.h= =%ExportDlg toggleboolvoidtoggleActions`/home/mark/engauge_dev/digitizer/src/exportdlg.hP PExportDlgvoidvoidupdatePreview`/home/mark/engauge_dev/digitizer/src/exportdlg.hS SExportDlgvoidvoid~ ExportDlg`/home/mark/engauge_dev/digitizer/src/exportdlg.h22ExportDlgy 2buttonAllCurvesOnEachLine`/home/mark/engauge_dev/digitizer/src/exportdlg.hdd+QRadioButton*buttonCancel`/home/mark/engauge_dev/digitizer/src/exportdlg.hzzQPushButton*buttonCommas`/home/mark/engauge_dev/digitizer/src/exportdlg.hhhQRadioButton*buttonExclude`/home/mark/engauge_dev/digitizer/src/exportdlg.h[[QPushButton*buttonGnuplot`/home/mark/engauge_dev/digitizer/src/exportdlg.hooQRadioButton*buttonInclude`/home/mark/engauge_dev/digitizer/src/exportdlg.hZZQPushButton*buttonNone`/home/mark/engauge_dev/digitizer/src/exportdlg.hmmQRadioButton*buttonOk`/home/mark/engauge_dev/digitizer/src/exportdlg.hyyQPushButton*0buttonOneCurveOnEachLine`/home/mark/engauge_dev/digitizer/src/exportdlg.hee*QRadioButton*buttonSimple`/home/mark/engauge_dev/digitizer/src/exportdlg.hnnQRadioButton*buttonSpaces`/home/mark/engauge_dev/digitizer/src/exportdlg.hiiQRadioButton*buttonTabs`/home/mark/engauge_dev/digitizer/src/exportdlg.hjjQRadioButton*buttonWhat`/home/mark/engauge_dev/digitizer/src/exportdlg.h{{QPushButton* buttonXAllCurves`/home/mark/engauge_dev/digitizer/src/exportdlg.h^^"QRadioButton*"buttonXFirstCurve`/home/mark/engauge_dev/digitizer/src/exportdlg.h__#QRadioButton* buttonXGridLines`/home/mark/engauge_dev/digitizer/src/exportdlg.h``"QRadioButton*"buttonXYAllCurves`/home/mark/engauge_dev/digitizer/src/exportdlg.haa#QRadioButton* coord`/home/mark/engauge_dev/digitizer/src/exportdlg.h}}(const CoordSettings*grid`/home/mark/engauge_dev/digitizer/src/exportdlg.h~~ .const GridMeshSettings*&groupCurveSelection`/home/mark/engauge_dev/digitizer/src/exportdlg.hU U"QGroupBox*groupDelimiters`/home/mark/engauge_dev/digitizer/src/exportdlg.hgg!QButtonGroup*groupHeader`/home/mark/engauge_dev/digitizer/src/exportdlg.hllQButtonGroup*groupLayout`/home/mark/engauge_dev/digitizer/src/exportdlg.hccQButtonGroup*(groupPointsSelection`/home/mark/engauge_dev/digitizer/src/exportdlg.h]]&QButtonGroup*labelExcluded`/home/mark/engauge_dev/digitizer/src/exportdlg.hW WQLabel*labelIncluded`/home/mark/engauge_dev/digitizer/src/exportdlg.hV VQLabel*labelPreview`/home/mark/engauge_dev/digitizer/src/exportdlg.hv vQLabel*listExcluded`/home/mark/engauge_dev/digitizer/src/exportdlg.hY YQListBox*listIncluded`/home/mark/engauge_dev/digitizer/src/exportdlg.hX XQListBox*listPreview`/home/mark/engauge_dev/digitizer/src/exportdlg.hw wQListBox*pointSets`/home/mark/engauge_dev/digitizer/src/exportdlg.hJ JPointSets* xport`/home/mark/engauge_dev/digitizer/src/exportdlg.hExportSettings*h/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppYGeometryDlgppc parentQWidget* curveboolInfoTableh/home/mark/engauge_dev/digitizer/src/geometrydlg.cpp#'GeometryDlgInfoTable parentGeometryDlg*$addNewItemsToTableh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlg rInfo.GeometryWindowItemList&voidclearTableh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgvoidcurveReplaceh/home/mark/engauge_dev/digitizer/src/geometrydlg.cpp!GeometryDlgtextconst char*QString&displayGeometryInfoh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgu< rInfo.GeometryWindowItemList&voiddragObjecth/home/mark/engauge_dev/digitizer/src/geometrydlg.cpp)0GeometryDlgInfoTableQDragObject*(extractSelectedItemsh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgdelimiterQStringQString,getSelectedItemsBoundsh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlg rowBeginint&colBeginint& rowEndint& colEndint&voidhideEventh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgQHideEvent*voidkeyPressEventh/home/mark/engauge_dev/digitizer/src/geometrydlg.cpp2;GeometryDlgInfoTableeQKeyEvent*voidmoveEventh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgeQMoveEvent*voidresizeEventh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlgi eQResizeEvent*void"setRowColumnCounth/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlg rInfo.GeometryWindowItemList&void~ GeometryDlgh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppGeometryDlggldMIME_DELIMITERh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppVV#const QStringMIME_SUBTYPEh/home/mark/engauge_dev/digitizer/src/geometrydlg.cppWW%const QCStringd/home/mark/engauge_dev/digitizer/src/geometrydlg.hGeometryDlgd/home/mark/engauge_dev/digitizer/src/geometrydlg.h:QDialogInfoTabled/home/mark/engauge_dev/digitizer/src/geometrydlg.hZlGeometryDlg QTableInfoTabled/home/mark/engauge_dev/digitizer/src/geometrydlg.h^^&GeometryDlgInfoTableu< parentGeometryDlg*dragObjectd/home/mark/engauge_dev/digitizer/src/geometrydlg.hcc)GeometryDlgInfoTableQDragObject*keyPressEventd/home/mark/engauge_dev/digitizer/src/geometrydlg.hff.GeometryDlgInfoTable{eQKeyEvent*void parentd/home/mark/engauge_dev/digitizer/src/geometrydlg.hjjGeometryDlg* GeometryDlgd/home/mark/engauge_dev/digitizer/src/geometrydlg.h@@,GeometryDlggld parentQWidget* curvebool$addNewItemsToTabled/home/mark/engauge_dev/digitizer/src/geometrydlg.hx x:GeometryDlg rInfo.GeometryWindowItemList&voidclearTabled/home/mark/engauge_dev/digitizer/src/geometrydlg.hr rGeometryDlgvoidcurveReplaced/home/mark/engauge_dev/digitizer/src/geometrydlg.h~ ~*GeometryDlgtextconst char*QString&displayGeometryInfod/home/mark/engauge_dev/digitizer/src/geometrydlg.hD D;GeometryDlg rInfo.GeometryWindowItemList&void(extractSelectedItemsd/home/mark/engauge_dev/digitizer/src/geometrydlg.hG G3GeometryDlgdelimiterQStringQString,getSelectedItemsBoundsd/home/mark/engauge_dev/digitizer/src/geometrydlg.h{ {WGeometryDlgrowBeginint&colBeginint& rowEndint& colEndint&voidhideEventd/home/mark/engauge_dev/digitizer/src/geometrydlg.hQQ)GeometryDlgneQHideEvent*voidhideGeometryd/home/mark/engauge_dev/digitizer/src/geometrydlg.hL LGeometryDlgEvoidmoveEventd/home/mark/engauge_dev/digitizer/src/geometrydlg.hTT)GeometryDlgeQMoveEvent*voidresizeEventd/home/mark/engauge_dev/digitizer/src/geometrydlg.hUU-GeometryDlgeQResizeEvent*void"setRowColumnCountd/home/mark/engauge_dev/digitizer/src/geometrydlg.hu u9GeometryDlg rInfo.GeometryWindowItemList&void~ GeometryDlgd/home/mark/engauge_dev/digitizer/src/geometrydlg.hAAGeometryDlg} curved/home/mark/engauge_dev/digitizer/src/geometrydlg.ho obooldisplayedInfod/home/mark/engauge_dev/digitizer/src/geometrydlg.h(,GeometryWindowItemListinfoTabled/home/mark/engauge_dev/digitizer/src/geometrydlg.h InfoTable* layoutd/home/mark/engauge_dev/digitizer/src/geometrydlg.hQGridLayout*v/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp$GeometryWindowItemv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp!%$GeometryWindowItemiwo$GeometryWindowItemv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp',$GeometryWindowItemrowint columnint entryQString$GeometryWindowItemv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp.3$GeometryWindowItemold2const GeometryWindowItem& columnv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cppJM$GeometryWindowItemint entryv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cppOR$GeometryWindowItemQStringoperator =v/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp5<$GeometryWindowItemold2const GeometryWindowItem&&GeometryWindowItem&operator ==v/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cpp>C$GeometryWindowItem other2const GeometryWindowItem&boolrowv/home/mark/engauge_dev/digitizer/src/geometrywindowitem.cppEH$GeometryWindowItemintr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h$GeometryWindowItemr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h$=$GeometryWindowItemr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h))$GeometryWindowItemiwo$GeometryWindowItemr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h**:$GeometryWindowItemrowint columnint entryQString$GeometryWindowItemr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h--5$GeometryWindowItemold2const GeometryWindowItem& columnr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h44$GeometryWindowItem int entryr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h5 5$GeometryWindowItem QStringoperator =r/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h..@$GeometryWindowItemold2const GeometryWindowItem&&GeometryWindowItem&operator ==r/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h1 1:$GeometryWindowItemi  other2const GeometryWindowItem&boolrowr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h33$GeometryWindowItem intm_columnr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h::intm_entryr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h; ;QString m_rowr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.h99 int ,GeometryWindowItemListr/home/mark/engauge_dev/digitizer/src/geometrywindowitem.hB'B=@QValueList< GeometryWindowItem >Z/home/mark/engauge_dev/digitizer/src/grid.cppGridZ/home/mark/engauge_dev/digitizer/src/grid.cpp&.Grid gridTypeGridType canvasQCanvas*gridlinePenZ/home/mark/engauge_dev/digitizer/src/grid.cppLXGridRboolQPenmakeGridLinesZ/home/mark/engauge_dev/digitizer/src/grid.cpp7JGridztransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsvoidshowGridZ/home/mark/engauge_dev/digitizer/src/grid.cppZdGrid toggleboolvoid ~ GridZ/home/mark/engauge_dev/digitizer/src/grid.cpp05Grid V/home/mark/engauge_dev/digitizer/src/grid.hGridV/home/mark/engauge_dev/digitizer/src/grid.h'CGridV/home/mark/engauge_dev/digitizer/src/grid.h++,GridgridTypeGridType canvasQCanvas*gridV/home/mark/engauge_dev/digitizer/src/grid.h44&GridvoidboolgridlinePenV/home/mark/engauge_dev/digitizer/src/grid.h= =GridRboolQPenmakeGridLinesV/home/mark/engauge_dev/digitizer/src/grid.h0 1"Gridtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsvoidshowGridV/home/mark/engauge_dev/digitizer/src/grid.h5 5GridĀ toggleboolvoid ~ GridV/home/mark/engauge_dev/digitizer/src/grid.h,, GridgridV/home/mark/engauge_dev/digitizer/src/grid.h44&Gridvoidboolm_canvasV/home/mark/engauge_dev/digitizer/src/grid.h: :QCanvas* m_gridV/home/mark/engauge_dev/digitizer/src/grid.h@ @boolm_gridTypeV/home/mark/engauge_dev/digitizer/src/grid.h9 9GridTypem_linesV/home/mark/engauge_dev/digitizer/src/grid.hBB!.QPtrList< QCanvasLine >b/home/mark/engauge_dev/digitizer/src/gridmesh.cppGridMeshb/home/mark/engauge_dev/digitizer/src/gridmesh.cpp!GridMeshpc.angleSpacingb/home/mark/engauge_dev/digitizer/src/gridmesh.cppGridMesht unitsThetaUnits doublemakeGridLinesb/home/mark/engauge_dev/digitizer/src/gridmesh.cpp(6GridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridRb/home/mark/engauge_dev/digitizer/src/gridmesh.cppGridMeshmtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridThetab/home/mark/engauge_dev/digitizer/src/gridmesh.cppvGridMesh]transform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridXb/home/mark/engauge_dev/digitizer/src/gridmesh.cpp8UGridMeshPtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridYb/home/mark/engauge_dev/digitizer/src/gridmesh.cppWtGridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreen~ GridMeshb/home/mark/engauge_dev/digitizer/src/gridmesh.cpp#&GridMesh^/home/mark/engauge_dev/digitizer/src/gridmesh.hGridMesh^/home/mark/engauge_dev/digitizer/src/gridmesh.h9SGridMesh^/home/mark/engauge_dev/digitizer/src/gridmesh.h==GridMesh h.angleSpacing^/home/mark/engauge_dev/digitizer/src/gridmesh.hR R(GridMeshunitThetaUnits doublemakeGridLines^/home/mark/engauge_dev/digitizer/src/gridmesh.hBC=GridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridR^/home/mark/engauge_dev/digitizer/src/gridmesh.hNO=GridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridTheta^/home/mark/engauge_dev/digitizer/src/gridmesh.hLM=GridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridX^/home/mark/engauge_dev/digitizer/src/gridmesh.hHI=GridMeshu<transform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreenmakeGridY^/home/mark/engauge_dev/digitizer/src/gridmesh.hJK=GridMeshtransform const Transform* coord&const CoordSettingsgrid,const GridMeshSettingsGridlinesScreen~ GridMesh^/home/mark/engauge_dev/digitizer/src/gridmesh.h>>GridMeshGridlineScreen^/home/mark/engauge_dev/digitizer/src/gridmesh.h+2R^/home/mark/engauge_dev/digitizer/src/gridmesh.h11bool start^/home/mark/engauge_dev/digitizer/src/gridmesh.h- - QPointstop^/home/mark/engauge_dev/digitizer/src/gridmesh.h. . QPointangleSpacingDeg^/home/mark/engauge_dev/digitizer/src/gridmesh.h" ""const double angleSpacingGrad^/home/mark/engauge_dev/digitizer/src/gridmesh.h# #?const doubleangleSpacingRad^/home/mark/engauge_dev/digitizer/src/gridmesh.h$ $Econst doublepixelSpacing^/home/mark/engauge_dev/digitizer/src/gridmesh.h' 'const double GridlinesScreen^/home/mark/engauge_dev/digitizer/src/gridmesh.h4#428QValueList< GridlineScreen >h/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpp/GridMeshDlgppcgridTypeQString titleQStringcoordSettingsCoordSettings*gridSettings"GridMeshSettings*(computeDisabledValueh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpp.GridMeshDlg  linearboolgridSetGridSet countint* startdouble*stepdouble*stopdouble*editCountQLineEdit*editStartQLineEdit*editStepQLineEdit*editStopQLineEdit*voidslotCountXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlg0textconst QString&voidslotCountYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgtextconst QString&voidslotDisableXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlg؈ indexintvoidslotDisableYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgi indexintvoidslotStartXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlg$textconst QString&voidslotStartYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgtextconst QString&voidslotStepXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgtextconst QString&voidslotStepYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgtextconst QString&voidslotStopXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpp GridMeshDlgu<textconst QString&voidslotStopYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpp GridMeshDlg>textconst QString&voidslotWhath/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlg(voidtoggleActionsh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpp0jGridMeshDlgvoid validateSettingsh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cpplGridMeshDlga  scale ScalegridSetGridSettextCountQStringtextStartQStringtextStepQStringtextStopQString countint start doublestep doublestop doublebool"validateSettingsXh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgbool"validateSettingsYh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlgbool~ GridMeshDlgh/home/mark/engauge_dev/digitizer/src/gridmeshdlg.cppGridMeshDlggldd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hGridMeshDlgd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h-QDialogGridMeshDlgd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h34CGridMeshDlggldgridTypeQString titleQStringcoordSettingsCoordSettings*gridSettings"GridMeshSettings*(computeDisabledValued/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hT VGridMeshDlg  linearboolgridSetGridSet countint* startdouble*stepdouble*stopdouble*editCountQLineEdit*editStartQLineEdit*editStepQLineEdit*editStopQLineEdit*voidslotCountXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h; ;(GridMeshDlg-textconst QString&voidslotCountYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h< <(GridMeshDlg߂textconst QString&voidslotDisableXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h9 9 GridMeshDlgB indexintvoidslotDisableYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h: : GridMeshDlg indexintvoidslotStartXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h= =(GridMeshDlgtextconst QString&voidslotStartYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h> >(GridMeshDlgtextconst QString&voidslotStepXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h? ?'GridMeshDlgtextconst QString&voidslotStepYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h@ @'GridMeshDlgtextconst QString&voidslotStopXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hA A'GridMeshDlgitextconst QString&voidslotStopYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hB B'GridMeshDlgu<textconst QString&voidslotWhatd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hC CGridMeshDlgvoidvoidtoggleActionsd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hH HGridMeshDlgvoidvoid validateSettingsd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hM O8GridMeshDlg  scale ScalegridSetGridSettextCountQStringtextStartQStringtextStepQStringtextStopQString countint start doublestep doublestop doublebool"validateSettingsXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hP P GridMeshDlgvoidbool"validateSettingsYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hQ Q GridMeshDlgvoidbool~ GridMeshDlgd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h55GridMeshDlg#buttonCanceld/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hQPushButton*buttonOkd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hQPushButton*buttonWhatd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hQPushButton*comboDisableXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h_ _QComboBox*comboDisableYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hb bQComboBox*coordSettingsd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hXX CoordSettings*editCountXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.he eQLineEdit*editCountYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hi iQLineEdit*editStartXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hm mQLineEdit*editStartYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hq qQLineEdit*editStepXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h} }QLineEdit*editStepYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h QLineEdit*editStopXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hu uQLineEdit*editStopYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hy yQLineEdit*gridSettingsd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hYY""GridMeshSettings* groupXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h[ [QGroupBox* groupYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h\ \QGroupBox*labelCountXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hd dQLabel*labelCountYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hh hQLabel*labelDisableXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h^ ^QLabel*labelDisableYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.ha aQLabel*labelStartXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hl lQLabel*labelStartYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hp pQLabel*labelStepXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h| |QLabel*labelStepYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h QLabel*labelStopXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.ht tQLabel*labelStopYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hx xQLabel*validatorCountXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hff"QIntValidator*validatorCountYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hjj"QIntValidator*validatorStartXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hnn%"QDoubleValidator*validatorStartYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hrr%"QDoubleValidator*validatorStepXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h~~$"QDoubleValidator*validatorStepYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.h$"QDoubleValidator*validatorStopXd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hvv$"QDoubleValidator*validatorStopYd/home/mark/engauge_dev/digitizer/src/gridmeshdlg.hzz$"QDoubleValidator*h/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp4>GridRemovalppc Neuronh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval NeuronneuronDictNeuronDict*Synapseh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalSynapsesynapseDictSynapseDict*addPixelh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalSynapse xintyintvoidaddSynapseh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp GridRemoval Neuron*GridRemoval::Synapse*(colorSettingsChangedh/home/mark/engauge_dev/digitizer/src/gridremoval.cppEMGridRemovalgridSettings&GridRemovalSettings$gridSettingsLatest(GridRemovalSettings*bool.connectNeuronAcrossGapsh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp1GridRemoval Neuron pixels char*pixel2Neuronint*neuronDict const NeuronDict widthint heightintgapSeparation doublevoid0connectNeuronsAcrossGapsh/home/mark/engauge_dev/digitizer/src/gridremoval.cppO[GridRemoval pixels char* widthint heightintgapSeparation doublevoidFconnectSynapseToSynapsesDestinationh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp3^GridRemoval Neuron pixels char* heightintgapSeparation doublexSourceintySourceintvoid<connectSynapseToSynapsesSourceh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp`zGridRemoval Neuron  pixels char*pixel2Neuronint*neuronDict const NeuronDict widthint heightintgapSeparation doublexintyint xLookint yLookint neuronsProcessed$QValueList< int >*void$distanceToOffPixelh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp]zGridRemoval pixels char* widthint heightintxintyintsearchPatternSearchPattern*pixelThresholdPixelState doubleeraseThinPixelsh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp|GridRemoval pixels char* widthint heightintthinThickness doublepixelThresholdPixelStatevoid,initializePixel2Neuronh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval G pixels char* widthint heightintint* initializePixelsh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval GimageWorkingQImage* char*initializeThinh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval G coordCoordSettingstransform const Transform*thinThickness doublevoid(initializeThinSearchh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalthinThickness double xBasis double yBasis doublesearchPatternSearchPattern*void4recursivelySetPixel2Neuronh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp|GridRemoval  pixels char*pixel2Neuronint* widthint heightintxintyintactiveNeuronNeuron*activeSynapseSynapse* levelintvoid removeAndConnecth/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalimageWorkingQImage*transform const Transform*coordSettingsCoordSettingsgridSettings&GridRemovalSettingsbackgroundColorQRgbvoidremoveColorh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalimageWorkingQImage* pixels char* widthint heightintgridSettings&GridRemovalSettings$gridSettingsLatest(GridRemovalSettings*"pixelStateRemovedPixelStatevoid0removeGridlineHorizontalh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp-fGridRemoval   pixels char* widthint heightint xStartint yStartint xStopint yStopintgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoid,removeGridlineVerticalh/home/mark/engauge_dev/digitizer/src/gridremoval.cpphGridRemoval   pixels char* widthint heightint xStartint yStartint xStopint yStopintgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoidremoveGridlinesh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp+GridRemoval pixels char* widthint heightinttransform const Transform*coordSettingsCoordSettingsgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoidremoveThinLinesh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval  pixels char* widthint heightint coordCoordSettingstransform const Transform*thinThickness double,pixelStateRemovedPass1PixelState,pixelStateRemovedPass2PixelStatevoidsavePixelsh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemoval  pixels char* widthint heightintimageWorkingQImage*backgroundColorQRgbvoidxCenterOfMassh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalSynapseintyCenterOfMassh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalSynapseint~ GridRemovalh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp@CGridRemovallav~ Neuronh/home/mark/engauge_dev/digitizer/src/gridremoval.cpp GridRemoval Neuron G~ Synapseh/home/mark/engauge_dev/digitizer/src/gridremoval.cppGridRemovalSynapsed/home/mark/engauge_dev/digitizer/src/gridremoval.hGridRemovald/home/mark/engauge_dev/digitizer/src/gridremoval.h@ Neurond/home/mark/engauge_dev/digitizer/src/gridremoval.hxGridRemoval Neurond/home/mark/engauge_dev/digitizer/src/gridremoval.h{{&GridRemoval NeuronCneuronDictNeuronDict*addSynapsed/home/mark/engauge_dev/digitizer/src/gridremoval.h~~GridRemoval NeuronSynapse*.connectNeuronAcrossGapsd/home/mark/engauge_dev/digitizer/src/gridremoval.h SGridRemoval Neuron/ pixels char*pixel2Neuronint*neuronDict const NeuronDict widthint heightintgapSeparation doublevoidFconnectSynapseToSynapsesDestinationd/home/mark/engauge_dev/digitizer/src/gridremoval.h EGridRemoval Neuron pixels char* heightintgapSeparation doublexSourceintySourceintvoid<connectSynapseToSynapsesSourced/home/mark/engauge_dev/digitizer/src/gridremoval.h BGridRemoval Neuron?  pixels char*pixel2Neuronint*neuronDict const NeuronDict widthint heightintgapSeparation doublexintyint xLookint yLookint neuronsProcessed$QValueList< int >*void indexd/home/mark/engauge_dev/digitizer/src/gridremoval.h(GridRemoval Neuronlong~ Neurond/home/mark/engauge_dev/digitizer/src/gridremoval.h||GridRemoval Neuron indexd/home/mark/engauge_dev/digitizer/src/gridremoval.h(GridRemoval Neuronlongm_indexd/home/mark/engauge_dev/digitizer/src/gridremoval.h longm_synapseDictd/home/mark/engauge_dev/digitizer/src/gridremoval.h!SynapseDictSearchPointd/home/mark/engauge_dev/digitizer/src/gridremoval.hGridRemovalSearchPointd/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemovalSearchPointxintyintdistance doubledistanced/home/mark/engauge_dev/digitizer/src/gridremoval.h0GridRemovalSearchPoint doublexd/home/mark/engauge_dev/digitizer/src/gridremoval.h'GridRemovalSearchPointintyd/home/mark/engauge_dev/digitizer/src/gridremoval.h'GridRemovalSearchPointint~ SearchPointd/home/mark/engauge_dev/digitizer/src/gridremoval.hGridRemovalSearchPointSearchPointd/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemovalSearchPointxintyintdistance doubledistanced/home/mark/engauge_dev/digitizer/src/gridremoval.h0GridRemovalSearchPoint doublexd/home/mark/engauge_dev/digitizer/src/gridremoval.h'GridRemovalSearchPointintyd/home/mark/engauge_dev/digitizer/src/gridremoval.h'GridRemovalSearchPointint~ SearchPointd/home/mark/engauge_dev/digitizer/src/gridremoval.hGridRemovalSearchPointm_distanced/home/mark/engauge_dev/digitizer/src/gridremoval.h doublem_pointd/home/mark/engauge_dev/digitizer/src/gridremoval.h QPoint$SearchPointPtrListd/home/mark/engauge_dev/digitizer/src/gridremoval.hGridRemovalQPtrList< T >compareItemsd/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemoval$SearchPointPtrList item1(QPtrCollection::Item item2(QPtrCollection::ItemintcompareItemsd/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemoval$SearchPointPtrList item1(QPtrCollection::Item item2(QPtrCollection::ItemintSynapsed/home/mark/engauge_dev/digitizer/src/gridremoval.haqGridRemovalSynapsed/home/mark/engauge_dev/digitizer/src/gridremoval.hdd)GridRemovalSynapseosynapseDictSynapseDict*addPixeld/home/mark/engauge_dev/digitizer/src/gridremoval.hg g#GridRemovalSynapsexintyintvoid indexd/home/mark/engauge_dev/digitizer/src/gridremoval.hhh(GridRemovalSynapselongxCenterOfMassd/home/mark/engauge_dev/digitizer/src/gridremoval.hi iGridRemovalSynapseintyCenterOfMassd/home/mark/engauge_dev/digitizer/src/gridremoval.hj jGridRemovalSynapseint~ Synapsed/home/mark/engauge_dev/digitizer/src/gridremoval.heeGridRemovalSynapseg indexd/home/mark/engauge_dev/digitizer/src/gridremoval.hhh(GridRemovalSynapselongm_countPixelsd/home/mark/engauge_dev/digitizer/src/gridremoval.hn nintm_indexd/home/mark/engauge_dev/digitizer/src/gridremoval.hm mlong m_xSumd/home/mark/engauge_dev/digitizer/src/gridremoval.ho oint m_ySumd/home/mark/engauge_dev/digitizer/src/gridremoval.hp pintGridRemovald/home/mark/engauge_dev/digitizer/src/gridremoval.hDDGridRemovallav(colorSettingsChangedd/home/mark/engauge_dev/digitizer/src/gridremoval.h .GridRemovalgridSettings&GridRemovalSettings$gridSettingsLatest(GridRemovalSettings*bool0connectNeuronsAcrossGapsd/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemoval  pixels char* widthint heightintgapSeparation doublevoid$distanceToOffPixeld/home/mark/engauge_dev/digitizer/src/gridremoval.h >GridRemovalm pixels char* widthint heightintxintyintsearchPatternSearchPattern*pixelThresholdPixelState doubleeraseThinPixelsd/home/mark/engauge_dev/digitizer/src/gridremoval.h 6GridRemovals pixels char* widthint heightintthinThickness doublepixelThresholdPixelStatevoid,initializePixel2Neurond/home/mark/engauge_dev/digitizer/src/gridremoval.hDGridRemovali pixels char* widthint heightintint* initializePixelsd/home/mark/engauge_dev/digitizer/src/gridremoval.h 0GridRemovalimageWorkingQImage* char*initializeThind/home/mark/engauge_dev/digitizer/src/gridremoval.h GridRemovale coordCoordSettingstransform const Transform*thinThickness doublevoid(initializeThinSearchd/home/mark/engauge_dev/digitizer/src/gridremoval.h #GridRemovalnthinThickness double xBasis double yBasis doublesearchPatternSearchPattern*void4recursivelySetPixel2Neurond/home/mark/engauge_dev/digitizer/src/gridremoval.h (GridRemovali  pixels char*pixel2Neuronint* widthint heightintxintyintactiveNeuronNeuron*activeSynapseSynapse* levelintvoid removeAndConnectd/home/mark/engauge_dev/digitizer/src/gridremoval.hK LZGridRemovalimageWorkingQImage*transform const Transform*coordSettingsCoordSettingsgridSettings&GridRemovalSettingsbackgroundColorQRgbvoidremoveColord/home/mark/engauge_dev/digitizer/src/gridremoval.h #GridRemovalimageWorkingQImage* pixels char* widthint heightintgridSettings&GridRemovalSettings$gridSettingsLatest(GridRemovalSettings*"pixelStateRemovedPixelStatevoid0removeGridlineHorizontald/home/mark/engauge_dev/digitizer/src/gridremoval.h #GridRemovalp  pixels char* widthint heightint xStartint yStartint xStopint yStopintgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoid,removeGridlineVerticald/home/mark/engauge_dev/digitizer/src/gridremoval.h #GridRemoval  pixels char* widthint heightint xStartint yStartint xStopint yStopintgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoidremoveGridlinesd/home/mark/engauge_dev/digitizer/src/gridremoval.h #GridRemoval pixels char* widthint heightinttransform const Transform*coordSettingsCoordSettingsgridSettings&GridRemovalSettings"pixelStateRemovedPixelStatevoidremoveThinLinesd/home/mark/engauge_dev/digitizer/src/gridremoval.h KGridRemoval pixels char* widthint heightint coordCoordSettingstransform const Transform*thinThickness double,pixelStateRemovedPass1PixelState,pixelStateRemovedPass2PixelStatevoidsavePixelsd/home/mark/engauge_dev/digitizer/src/gridremoval.h 1GridRemoval. pixels char* widthint heightintimageWorkingQImage*backgroundColorQRgbvoid~ GridRemovald/home/mark/engauge_dev/digitizer/src/gridremoval.hEEGridRemovalPixelOffd/home/mark/engauge_dev/digitizer/src/gridremoval.hPPintPixelOnd/home/mark/engauge_dev/digitizer/src/gridremoval.hUU int(PixelOnRemovedStage1d/home/mark/engauge_dev/digitizer/src/gridremoval.hQQint(PixelOnRemovedStage2d/home/mark/engauge_dev/digitizer/src/gridremoval.hRRint(PixelOnRemovedStage3d/home/mark/engauge_dev/digitizer/src/gridremoval.hSSint(PixelOnRemovedStage4d/home/mark/engauge_dev/digitizer/src/gridremoval.hTTintneuronDictd/home/mark/engauge_dev/digitizer/src/gridremoval.hNeuronDict&searchPatternMinusXd/home/mark/engauge_dev/digitizer/src/gridremoval.h%SearchPattern&searchPatternMinusYd/home/mark/engauge_dev/digitizer/src/gridremoval.h%SearchPattern$searchPatternPlusXd/home/mark/engauge_dev/digitizer/src/gridremoval.h$SearchPattern$searchPatternPlusYd/home/mark/engauge_dev/digitizer/src/gridremoval.h$SearchPatternxBasisXSd/home/mark/engauge_dev/digitizer/src/gridremoval.h  doublexBasisYSd/home/mark/engauge_dev/digitizer/src/gridremoval.h doubleyBasisXSd/home/mark/engauge_dev/digitizer/src/gridremoval.h' doubleyBasisYSd/home/mark/engauge_dev/digitizer/src/gridremoval.h)1 double NeuronDictd/home/mark/engauge_dev/digitizer/src/gridremoval.htt'$QIntDict< Neuron > SearchPatternd/home/mark/engauge_dev/digitizer/src/gridremoval.h,9BSearchPointPtrList< SearchPoint > *SearchPatternIteratord/home/mark/engauge_dev/digitizer/src/gridremoval.h*?>QPtrListIterator< SearchPoint > SynapseDictd/home/mark/engauge_dev/digitizer/src/gridremoval.hYY)&QIntDict< Synapse >n/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp ClickablePreviewn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppY]GridRemovalDlg ClickablePreview canvasQCanvas*dlgGridRemovalDlg*GridRemovalDlgn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppBGridRemovalDlg.gl titleQStringimageOriginalconst QImage*transform const Transform*coordSettingsCoordSettings*gridSettings(GridRemovalSettings*.contentsMousePressEventn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp_cGridRemovalDlg ClickablePreviewdeQMouseEvent*void$enableColorChoosern/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlg enableboolvoidloadEyedroppern/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgvoid loadWorkingImagen/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgvoidHloadWorkingImageAndIsolateBackgroundn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp%GridRemovalDlg voidsetColorn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp'7GridRemovalDlgp QPointvoid slotColorToggledn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppszGridRemovalDlg txonboolvoidslotGapn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp|GridRemovalDlg etextconst QString&void slotGridDistancen/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlg textconst QString&voidslotGridToggledn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgonboolvoidslotGridlinesn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlg cvoidslotLimitChangen/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppiqGridRemovalDlg> lowerbool limitintvoid"slotThinThicknessn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgtextconst QString&voidslotThinToggledn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlg onboolvoidslotWhatn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgpvoidtoggleActionsn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cpp9WGridRemovalDlg^void ~ GridRemovalDlgn/home/mark/engauge_dev/digitizer/src/gridremovaldlg.cppGridRemovalDlgj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hGridRemovalDlgj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h=QDialog ClickablePreviewj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hGridRemovalDlgQCanvasView ClickablePreviewj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h>GridRemovalDlg ClickablePreview? canvasQCanvas*dlgGridRemovalDlg*.contentsMousePressEventj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h 4GridRemovalDlg ClickablePrevieweQMouseEvent*voiddlgj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hGridRemovalDlg*GridRemovalDlgj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hCE(GridRemovalDlg.gl titleQStringimageOriginalconst QImage*transform const Transform*coordSettingsCoordSettings*gridSettings(GridRemovalSettings*$enableColorChooserj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hZ Z(GridRemovalDlg enableboolvoidloadEyedropperj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h` `GridRemovalDlgvoidvoid loadWorkingImagej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hc cGridRemovalDlg(voidvoidHloadWorkingImageAndIsolateBackgroundj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hd d3GridRemovalDlgvoidvoidsetColorj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hI IGridRemovalDlgp QPointvoid slotColorToggledj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hN NGridRemovalDlgboolvoidslotGapj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hO O!GridRemovalDlgconst QString&void slotGridDistancej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hR R*GridRemovalDlgconst QString&voidslotGridToggledj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hQ QGridRemovalDlgboolvoidslotGridlinesj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hP PGridRemovalDlguvoidslotLimitChangej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hM M/GridRemovalDlg lowerbool limitintvoid"slotThinThicknessj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hS S+GridRemovalDlgconst QString&voidslotThinToggledj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hT TGridRemovalDlgboolvoidslotWhatj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hU UGridRemovalDlg voidvoidtoggleActionsj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h] ]GridRemovalDlgPvoidvoid ~ GridRemovalDlgj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hFFGridRemovalDlglav"buttonCancelj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hQPushButton*buttonGridMeshj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hv vQButton*buttonOkj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hQPushButton*buttonWhatj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hQPushButton*checkColorj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hm mQCheckBox*checkGridj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hs sQCheckBox*checkThinj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h| |QCheckBox*colorChooserj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hppColorChooser*coordSettingsj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hii CoordSettings*editGapj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h QLineEdit* editGridDistancej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hx xQLineEdit*"editThinThicknessj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h  QLineEdit*gridSettingsj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hjj%(GridRemovalSettings*imageOriginalj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hggconst QImage*labelColorj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.ho oQLabel*labelColorMainj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hn nQLabel*labelGapj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h QLabel*"labelGridDistancej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hw wQLabel*labelGridMainj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.ht tQLabel*labelGridMeshj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hu uQLabel*labelPreviewj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h QLabel*labelThinMainj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h} }QLabel*$labelThinThicknessj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h~ ~QLabel*"m_backgroundColorj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h  QColor$m_cursorEyedropperj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h QCursor*m_gridRemovalj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hGridRemovalm_imageWorkingj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h  QImagepreviewCanvasj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h QCanvas*"previewCanvasViewj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h'"ClickablePreview* titlej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hf fQStringtransformj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hhh const Transform*validatorGapj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h""QDoubleValidator**validatorGridDistancej/home/mark/engauge_dev/digitizer/src/gridremovaldlg.hyy+"QDoubleValidator*,validatorThinThicknessj/home/mark/engauge_dev/digitizer/src/gridremovaldlg.h,"QDoubleValidator*f/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindowf/home/mark/engauge_dev/digitizer/src/helpwindow.cpp*HelpWindow.wo home_const QString& _pathconst QString& parentQWidget*nameconst char*addBookmarkf/home/mark/engauge_dev/digitizer/src/helpwindow.cppJNHelpWindow voidbookmChosenf/home/mark/engauge_dev/digitizer/src/helpwindow.cppAHHelpWindowniintvoidhistChosenf/home/mark/engauge_dev/digitizer/src/helpwindow.cpp8?HelpWindowiintvoidmoveEventf/home/mark/engauge_dev/digitizer/src/helpwindow.cppPTHelpWindow  pEventQMoveEvent*voidopenFilef/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindowvoidpathSelectedf/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindow _pathconst QString&void printf/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindow voidreadBookmarksf/home/mark/engauge_dev/digitizer/src/helpwindow.cpp-6HelpWindowvoidreadHistoryf/home/mark/engauge_dev/digitizer/src/helpwindow.cpp +HelpWindowjvoidresizeEventf/home/mark/engauge_dev/digitizer/src/helpwindow.cppVZHelpWindow pEventQResizeEvent*void(setBackwardAvailablef/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindow*bboolvoid&setForwardAvailablef/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindowbboolvoidtextChangedf/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindowvoid~ HelpWindowf/home/mark/engauge_dev/digitizer/src/helpwindow.cppHelpWindow ob/home/mark/engauge_dev/digitizer/src/helpwindow.hHelpWindowb/home/mark/engauge_dev/digitizer/src/helpwindow.h?QMainWindowHelpWindowb/home/mark/engauge_dev/digitizer/src/helpwindow.heHelpWindow.wo home_const QString&pathconst QString& parentQWidget*nameconst char*addBookmarkb/home/mark/engauge_dev/digitizer/src/helpwindow.h+ +HelpWindowvoidbookmChosenb/home/mark/engauge_dev/digitizer/src/helpwindow.h* *HelpWindoweintvoidhistChosenb/home/mark/engauge_dev/digitizer/src/helpwindow.h) )HelpWindow intvoidmoveEventb/home/mark/engauge_dev/digitizer/src/helpwindow.h//.HelpWindow pEventQMoveEvent*voidopenFileb/home/mark/engauge_dev/digitizer/src/helpwindow.h% %HelpWindowvoidpathSelectedb/home/mark/engauge_dev/digitizer/src/helpwindow.h( ('HelpWindow sconst QString&void printb/home/mark/engauge_dev/digitizer/src/helpwindow.h& &HelpWindowvoidreadBookmarksb/home/mark/engauge_dev/digitizer/src/helpwindow.h5 5HelpWindowvoidreadHistoryb/home/mark/engauge_dev/digitizer/src/helpwindow.h4 4HelpWindowvoidresizeEventb/home/mark/engauge_dev/digitizer/src/helpwindow.h002HelpWindow pEventQResizeEvent*void(setBackwardAvailableb/home/mark/engauge_dev/digitizer/src/helpwindow.h! !%HelpWindowCboolvoid&setForwardAvailableb/home/mark/engauge_dev/digitizer/src/helpwindow.h" "$HelpWindowRboolvoidtextChangedb/home/mark/engauge_dev/digitizer/src/helpwindow.h$ $HelpWindowvoid~ HelpWindowb/home/mark/engauge_dev/digitizer/src/helpwindow.hHelpWindowi backwardIdb/home/mark/engauge_dev/digitizer/src/helpwindow.h99int bookmb/home/mark/engauge_dev/digitizer/src/helpwindow.h==QPopupMenu*bookmarksb/home/mark/engauge_dev/digitizer/src/helpwindow.h;;"QStringListbrowserb/home/mark/engauge_dev/digitizer/src/helpwindow.h77QTextBrowser*forwardIdb/home/mark/engauge_dev/digitizer/src/helpwindow.h99inthistb/home/mark/engauge_dev/digitizer/src/helpwindow.h==QPopupMenu*historyb/home/mark/engauge_dev/digitizer/src/helpwindow.h;;QStringListmBookmarksb/home/mark/engauge_dev/digitizer/src/helpwindow.h<!<+(QMap< int, QString >mHistoryb/home/mark/engauge_dev/digitizer/src/helpwindow.h<<(QMap< int, QString >pathCombob/home/mark/engauge_dev/digitizer/src/helpwindow.h88QComboBox*selectedURLb/home/mark/engauge_dev/digitizer/src/helpwindow.h: :QStringZ/home/mark/engauge_dev/digitizer/src/main.cppmainZ/home/mark/engauge_dev/digitizer/src/main.cpp argcint argv[] char*intparseCmdLineZ/home/mark/engauge_dev/digitizer/src/main.cppkk)argcint argv[] char*voidparseRangePairZ/home/mark/engauge_dev/digitizer/src/main.cpplm%arg1QStringarg2QStringrangeMindouble&rangeMaxdouble&bool&showAllUsageAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cppnn*ashowAsErrorboolvoidshowAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cppoo5)msgOutputQStringshowAsErrorboolvoid(showAxisUsageAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cpppp.void assert_engaugeZ/home/mark/engauge_dev/digitizer/src/main.cppr}conditionbool,ENGAUGE_CONST_MODIFIERvoid"check_ptr_engaugeZ/home/mark/engauge_dev/digitizer/src/main.cppptrconst char*,ENGAUGE_CONST_MODIFIERvoidfatal_engaugeZ/home/mark/engauge_dev/digitizer/src/main.cppicommentconst char*,ENGAUGE_CONST_MODIFIERvoidmainZ/home/mark/engauge_dev/digitizer/src/main.cpp argcint argv[] char*intparseCmdLineZ/home/mark/engauge_dev/digitizer/src/main.cppargcint argv[] char*voidparseRangePairZ/home/mark/engauge_dev/digitizer/src/main.cpp#arg1QStringarg2QStringrangeMindouble&rangeMaxdouble&bool&showAllUsageAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cpp%Fu<showAsErrorboolvoidshowAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cppHTmsgOutputQStringshowAsErrorboolvoid(showAxisUsageAndQuitZ/home/mark/engauge_dev/digitizer/src/main.cppV] 8voidcmdExportZ/home/mark/engauge_dev/digitizer/src/main.cpp]]QStringcmdImportZ/home/mark/engauge_dev/digitizer/src/main.cpp\\QStringcmdInvokeZ/home/mark/engauge_dev/digitizer/src/main.cppbbbool$cmdManualDirectoryZ/home/mark/engauge_dev/digitizer/src/main.cpp__QDircmdOnlyBmpZ/home/mark/engauge_dev/digitizer/src/main.cppaaboolcmdOpenZ/home/mark/engauge_dev/digitizer/src/main.cpp^^QStringcmdPixelsZ/home/mark/engauge_dev/digitizer/src/main.cpp``bool cmdSettingsResetZ/home/mark/engauge_dev/digitizer/src/main.cppccboolcmdSettingsTextZ/home/mark/engauge_dev/digitizer/src/main.cppddboolcmdXMaxGZ/home/mark/engauge_dev/digitizer/src/main.cppgg doublecmdXMinGZ/home/mark/engauge_dev/digitizer/src/main.cppff doublecmdXYAxesZ/home/mark/engauge_dev/digitizer/src/main.cppe eboolcmdYMaxGZ/home/mark/engauge_dev/digitizer/src/main.cppii doublecmdYMinGZ/home/mark/engauge_dev/digitizer/src/main.cpphh doubleV/home/mark/engauge_dev/digitizer/src/main.hassert_engaugeV/home/mark/engauge_dev/digitizer/src/main.h**Zaconst boolfileconst char*lineconst intvoid"check_ptr_engaugeV/home/mark/engauge_dev/digitizer/src/main.h++^iaconst char*fileconst char*lineconst intvoidfatal_engaugeV/home/mark/engauge_dev/digitizer/src/main.h,,Zgsconst char*fileconst char*lineconst intvoid\/home/mark/engauge_dev/digitizer/src/match.cpp Match\/home/mark/engauge_dev/digitizer/src/match.cpp&2 MatchxScreenintyScreenintcolorAccepted ColorcolorRejected Color stylePointSetStyle canvasQCanvas*areaPoints\/home/mark/engauge_dev/digitizer/src/match.cpp<? MatchQPointArraydrawShape\/home/mark/engauge_dev/digitizer/src/match.cppY\ MatchpQPainter&voiddumpMatch\/home/mark/engauge_dev/digitizer/src/match.cpp^b MatchvoidsetState\/home/mark/engauge_dev/digitizer/src/match.cppAW Match stateMatchStatevoid~ Match\/home/mark/engauge_dev/digitizer/src/match.cpp4: MatchX/home/mark/engauge_dev/digitizer/src/match.h MatchX/home/mark/engauge_dev/digitizer/src/match.h1f(QCanvasPolygonalItem  MatchX/home/mark/engauge_dev/digitizer/src/match.h57+ Match~TxScreenintyScreenintcolorAccepted ColorcolorRejected Color stylePointSetStyle canvasQCanvas*areaPointsX/home/mark/engauge_dev/digitizer/src/match.hWW. Match$voidQPointArraydrawShapeX/home/mark/engauge_dev/digitizer/src/match.hR R MatchpQPainter&voiddumpMatchX/home/mark/engauge_dev/digitizer/src/match.hM M Matchu<voidvoid setPointSetStyleX/home/mark/engauge_dev/digitizer/src/match.hFFK Match stylePointSetStylevoidsetStateX/home/mark/engauge_dev/digitizer/src/match.hC C# Match stateMatchStatevoid stateX/home/mark/engauge_dev/digitizer/src/match.hBB. MatchvoidMatchStatexX/home/mark/engauge_dev/digitizer/src/match.hII% MatchvoidintyX/home/mark/engauge_dev/digitizer/src/match.hJJ% Matchvoidint~ MatchX/home/mark/engauge_dev/digitizer/src/match.h88  Match setPointSetStyleX/home/mark/engauge_dev/digitizer/src/match.hFFK Match stylePointSetStylevoid stateX/home/mark/engauge_dev/digitizer/src/match.hBB. MatchvoidMatchStatexX/home/mark/engauge_dev/digitizer/src/match.hII% MatchvoidintyX/home/mark/engauge_dev/digitizer/src/match.hJJ% Matchvoidint StateAcceptedX/home/mark/engauge_dev/digitizer/src/match.h<<int,StateRejectedInvisibleX/home/mark/engauge_dev/digitizer/src/match.h>>int(StateRejectedVisibleX/home/mark/engauge_dev/digitizer/src/match.h==intm_colorAcceptedX/home/mark/engauge_dev/digitizer/src/match.h^ ^ Colorm_colorRejectedX/home/mark/engauge_dev/digitizer/src/match.h_ _ Colorm_pointSetStyleX/home/mark/engauge_dev/digitizer/src/match.hee!PointSetStylem_stateX/home/mark/engauge_dev/digitizer/src/match.hbbMatchStatem_xScreenX/home/mark/engauge_dev/digitizer/src/match.hZZintm_yScreenX/home/mark/engauge_dev/digitizer/src/match.h[[intb/home/mark/engauge_dev/digitizer/src/matchset.cpp MatchSetb/home/mark/engauge_dev/digitizer/src/matchset.cpp;DMatchSetpc.acceptedPointsb/home/mark/engauge_dev/digitizer/src/matchset.cppS`MatchSetacceptedPoints*QValueList< QPoint >*void0addCreatedPointsToCanvasb/home/mark/engauge_dev/digitizer/src/matchset.cppbMatchSet   canvasQCanvas* stylePointSetStylesettings$PointMatchSettingspointsCreatedLconst QValueList< PointMatchTriplet >*updateRectList(QValueList< QRect >*void clearb/home/mark/engauge_dev/digitizer/src/matchset.cppMatchSetupdateRectList(QValueList< QRect >*voidmakeHighlightb/home/mark/engauge_dev/digitizer/src/matchset.cppMatchSet color Color"QCanvasRectangle* matchPointAcceptb/home/mark/engauge_dev/digitizer/src/matchset.cppMatchSetupdateRectList(QValueList< QRect >*bool matchPointRejectb/home/mark/engauge_dev/digitizer/src/matchset.cppMatchSetupdateRectList(QValueList< QRect >*boolmoveHighlightsb/home/mark/engauge_dev/digitizer/src/matchset.cpp3MatchSetuupdateRectList(QValueList< QRect >*void setPointSetStyleb/home/mark/engauge_dev/digitizer/src/matchset.cpp59MatchSet؈ stylePointSetStylevoid~ MatchSetb/home/mark/engauge_dev/digitizer/src/matchset.cppFQMatchSetm^/home/mark/engauge_dev/digitizer/src/matchset.hMatchSet^/home/mark/engauge_dev/digitizer/src/matchset.h4a MatchSet^/home/mark/engauge_dev/digitizer/src/matchset.h88MatchSet h.acceptedPoints^/home/mark/engauge_dev/digitizer/src/matchset.h< <;MatchSetacceptedPoints*QValueList< QPoint >*void0addCreatedPointsToCanvas^/home/mark/engauge_dev/digitizer/src/matchset.h? A(MatchSet ( canvasQCanvas* stylePointSetStylesettings$PointMatchSettingspointsCreatedLconst QValueList< PointMatchTriplet >*updateRectList(QValueList< QRect >*void clear^/home/mark/engauge_dev/digitizer/src/matchset.hD D1MatchSet(updateRectList(QValueList< QRect >*voidmakeHighlight^/home/mark/engauge_dev/digitizer/src/matchset.hPP0MatchSet color Color"QCanvasRectangle* matchPointAccept^/home/mark/engauge_dev/digitizer/src/matchset.hG G<MatchSetupdateRectList(QValueList< QRect >*bool matchPointReject^/home/mark/engauge_dev/digitizer/src/matchset.hH H<MatchSet neupdateRectList(QValueList< QRect >*boolmoveHighlights^/home/mark/engauge_dev/digitizer/src/matchset.hQ Q:MatchSet updateRectList(QValueList< QRect >*void setPointSetStyle^/home/mark/engauge_dev/digitizer/src/matchset.hK K.MatchSet stylePointSetStylevoid~ MatchSet^/home/mark/engauge_dev/digitizer/src/matchset.h99MatchSetm_canvas^/home/mark/engauge_dev/digitizer/src/matchset.hS SQCanvas*&m_highlightAccepted^/home/mark/engauge_dev/digitizer/src/matchset.h__)"QCanvasRectangle*&m_highlightRejected^/home/mark/engauge_dev/digitizer/src/matchset.h``)"QCanvasRectangle*m_matchList^/home/mark/engauge_dev/digitizer/src/matchset.h[["QPtrList< Match >m_matches^/home/mark/engauge_dev/digitizer/src/matchset.hZZintm_settings^/home/mark/engauge_dev/digitizer/src/matchset.hTT!$PointMatchSettingsf/home/mark/engauge_dev/digitizer/src/measurecmb.cppMeasureCmbf/home/mark/engauge_dev/digitizer/src/measurecmb.cpp.>MeasureCmb.bm parentQWidget* attachToDocumentf/home/mark/engauge_dev/digitizer/src/measurecmb.cppEVMeasureCmbdocDigitDoc*void slotComboMeasuref/home/mark/engauge_dev/digitizer/src/measurecmb.cpp\lMeasureCmb toggleboolvoid&slotComboNotMeasuref/home/mark/engauge_dev/digitizer/src/measurecmb.cppnrMeasureCmb toggleboolvoid~ MeasureCmbf/home/mark/engauge_dev/digitizer/src/measurecmb.cpp@CMeasureCmbnb/home/mark/engauge_dev/digitizer/src/measurecmb.hMeasureCmbb/home/mark/engauge_dev/digitizer/src/measurecmb.h,>QComboBoxMeasureCmbb/home/mark/engauge_dev/digitizer/src/measurecmb.h22MeasureCmb.bm parentQWidget* attachToDocumentb/home/mark/engauge_dev/digitizer/src/measurecmb.h6 6(MeasureCmbdocDigitDoc*void slotComboMeasureb/home/mark/engauge_dev/digitizer/src/measurecmb.h; ;&MeasureCmbi toggleboolvoid&slotComboNotMeasureb/home/mark/engauge_dev/digitizer/src/measurecmb.h= =)MeasureCmb toggleboolvoid~ MeasureCmbb/home/mark/engauge_dev/digitizer/src/measurecmb.h33MeasureCmbր^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp7adjust_count^/home/mark/engauge_dev/digitizer/src/mmsubs.cppES pplinearAxisbool start doublestop doubleinc doubleintadjust_inc^/home/mark/engauge_dev/digitizer/src/mmsubs.cppVn*linearAxisboolroundoffPowerint start doublestop double countint doubleadjust_start^/home/mark/engauge_dev/digitizer/src/mmsubs.cppqztlinearAxisboolroundoffPowerintstop doubleinc double countint doubleadjust_stop^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp}alinearAxisboolroundoffPowerint start doubleinc double countint doubleangleleft^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp0x0 doubley0 doublex1 doubley1 doublex2 doubley2 double doubleangleright^/home/mark/engauge_dev/digitizer/src/mmsubs.cpplx0 doubley0 doublex1 doubley1 doublex2 doubley2 double doubleaxisScale^/home/mark/engauge_dev/digitizer/src/mmsubs.cppbx_min_in doublex_max_in doublelinearAxisboolx_startdouble* x_stopdouble*x_deltadouble*x_countint*void.clippedsegmentisvisible^/home/mark/engauge_dev/digitizer/src/mmsubs.cppP xTopLeft doubleyTopLeft doublexTopRight doubleyTopRight doublexBottomRight doubleyBottomRight doublexBottomLeft doubleyBottomLeft double xStartdouble* yStartdouble* xStopdouble* yStopdouble*bool*compute_linear_to_log^/home/mark/engauge_dev/digitizer/src/mmsubs.cppSe*vdouble*vMin doublevMax doublebool*compute_log_to_linear^/home/mark/engauge_dev/digitizer/src/mmsubs.cpph|tvdouble*vMin doublevMax doublebool.compute_screen_to_graph^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp r_graph[][] doubler_screen[][] double a[][] doublea_inverse[][] doubleint(convertfromcartesian^/home/mark/engauge_dev/digitizer/src/mmsubs.cppe unitsmmUnitsx doubley double xThetadouble*yRdouble*void$converttocartesian^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp2 unitsmmUnits xTheta doubleyR doublexdouble*ydouble*voiddabs^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp Rx double double dangle^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp  `r1[] doubler2[] double double"dangle_4_quadrant^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp*|rfrom[] doublerabout[] double rto[] double doubledasinsafe^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp-<arg double doubledatan2safe^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp?Jy doublex double double dcross^/home/mark/engauge_dev/digitizer/src/mmsubs.cppMSr1[] doubler2[] doubler3[] doublevoidddot^/home/mark/engauge_dev/digitizer/src/mmsubs.cppVZr1[] doubler2[] double doubledegrees2radians^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp]aargument double doubledinverse^/home/mark/engauge_dev/digitizer/src/mmsubs.cppdadouble*nintnpint iworknint*ydouble* workndouble* worknndouble*booldistancetoline^/home/mark/engauge_dev/digitizer/src/mmsubs.cppx doubley doublex1 doubley1 doublex2 doubley2 double doubledlincom^/home/mark/engauge_dev/digitizer/src/mmsubs.cppcin1 double rin1[] doublecin2 double rin2[] double rout[] doublevoiddlubksb^/home/mark/engauge_dev/digitizer/src/mmsubs.cppadouble*nintnpint indexint*bdouble*booldludcmp^/home/mark/engauge_dev/digitizer/src/mmsubs.cppadouble*nintnpint indexint* workndouble*booldmlt3x1^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp .z[] double x[][]const doubley[]const doublevoiddmlt3x3^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp1@ z[][] double x[][]const double y[][]const doublevoid$double_interpolate^/home/mark/engauge_dev/digitizer/src/mmsubs.cppCmlengthRawintxRawdouble*yRawdouble*lengthIntintxIntdouble*yIntdouble*void drandf^/home/mark/engauge_dev/digitizer/src/mmsubs.cpppt doubledrandgt^/home/mark/engauge_dev/digitizer/src/mmsubs.cppw randg1double* randg2double*voiddtranspose^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp ڀrin[][] doublerout[][] doublevoiddtrrotate^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp angle doublevecabout[] doubletransform[][] doublevoiddunitize^/home/mark/engauge_dev/digitizer/src/mmsubs.cppr[] doubleur[] doublevoid dvmag1^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp؈r[] double double dvmag3^/home/mark/engauge_dev/digitizer/src/mmsubs.cppx doubley doublez double doublefunctionarea^/home/mark/engauge_dev/digitizer/src/mmsubs.cppnPointsintxdouble*ydouble* double"intersecttwolines^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp xLine1a doubleyLine1a doublexLine1b doubleyLine1b doublexLine2a doubleyLine2a doublexLine2b doubleyLine2b doublesLine1Intdouble*sLine2Intdouble*boollstchm1^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp"cstring[]charint8multidimensionalminimization^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp%xVectorsdouble**yVectordouble*ndiminttolerance double.minFunction( double * ) doubleiterationmaxintiterationint*boolpixelRGB^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp imageconst QImage*xintyintQRgbpixelRGB1^/home/mark/engauge_dev/digitizer/src/mmsubs.cppimage1Bitconst QImage*xintyintQRgbpixelRGB32^/home/mark/engauge_dev/digitizer/src/mmsubs.cppimage32Bitconst QImage*xintyintQRgbpixelRGB8^/home/mark/engauge_dev/digitizer/src/mmsubs.cppu<image8Bitconst QImage*xintyintQRgbpointinsidebox^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp)  xI doubleyI doublex0 doubley0 doublex1 doubley1 doublex2 doubley2 doublex3 doubley3 doubleboolpolygonarea^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp,jnPointsintxdouble*ydouble* double$polygonarearecurse^/home/mark/engauge_dev/digitizer/src/mmsubs.cppmu<nPointsintxdouble*ydouble* levelint double(projectpointontoline^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp,xCenter doubleyCenter double xStart double yStart double xStop double yStop doublexProjectiondouble*yProjectiondouble*voidradians2degrees^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp/3argument double doubleroundofftopower^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp6:arg doubleroundoffPowerint doublesetPixelRGB^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp=M & imageQImage*xintyintqQRgbvoidsetPixelRGB1^/home/mark/engauge_dev/digitizer/src/mmsubs.cppPgimage1BitQImage*xintyintqQRgbvoidsetPixelRGB32^/home/mark/engauge_dev/digitizer/src/mmsubs.cppy 2image32BitQImage*xintyintqQRgbvoidsetPixelRGB8^/home/mark/engauge_dev/digitizer/src/mmsubs.cppjv .image8BitQImage*xintyintqQRgbvoidvaluePower^/home/mark/engauge_dev/digitizer/src/mmsubs.cpp value doubleintDOUBLEONE^/home/mark/engauge_dev/digitizer/src/mmsubs.cppB B#const doublePI^/home/mark/engauge_dev/digitizer/src/mmsubs.cppA Aconst doubleZ/home/mark/engauge_dev/digitizer/src/mmsubs.h$double_interpolateZ/home/mark/engauge_dev/digitizer/src/mmsubs.hab,*lengthRawintxRawdouble*yRawdouble*lengthIntintxIntdouble*yIntdouble*void2S2G_BAD_GRAPH_COORDINATESZ/home/mark/engauge_dev/digitizer/src/mmsubs.h5 5'const int4S2G_BAD_SCREEN_COORDINATESZ/home/mark/engauge_dev/digitizer/src/mmsubs.h6 6(const intS2G_SUCCESSZ/home/mark/engauge_dev/digitizer/src/mmsubs.h4 4const intmmCartesianZ/home/mark/engauge_dev/digitizer/src/mmsubs.h,, intmmDegreesZ/home/mark/engauge_dev/digitizer/src/mmsubs.h-- intmmGradiansZ/home/mark/engauge_dev/digitizer/src/mmsubs.h.. intmmRadiansZ/home/mark/engauge_dev/digitizer/src/mmsubs.h// intj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpp MruDocumentsj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpp(MruDocumentspc.(appendDocumentToListj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppt|MruDocuments xdocQStringvoidattachPopupMenuj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpp6PMruDocumentsnpParentMenuQPopupMenu*parentActionIdintframeOffset QSizevoidisEmptyj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpporMruDocumentsboolmergeDocumentj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppRmMruDocumentsdocQStringvoid*prependDocumentToListj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpp~MruDocuments ydocQStringvoid6reconnectActionsToPopupMenuj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppMruDocumentsvoid*slotActionHighlightedj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppMruDocumentsidintvoid.slotActionUnhighlightedj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppMruDocumentsvoid slotMruActivatedj/home/mark/engauge_dev/digitizer/src/mrudocuments.cppMruDocumentsidintvoid~ MruDocumentsj/home/mark/engauge_dev/digitizer/src/mrudocuments.cpp*4MruDocumentstnef/home/mark/engauge_dev/digitizer/src/mrudocuments.hMruDocumentsf/home/mark/engauge_dev/digitizer/src/mrudocuments.h$bQObject MruDocumentsf/home/mark/engauge_dev/digitizer/src/mrudocuments.h**MruDocumentstne(appendDocumentToListf/home/mark/engauge_dev/digitizer/src/mrudocuments.hL L*MruDocumentsBdocQStringvoidattachPopupMenuf/home/mark/engauge_dev/digitizer/src/mrudocuments.h. .ZMruDocumentspParentMenuQPopupMenu* m_parentActionIdintframeOffset QSizevoidisEmptyf/home/mark/engauge_dev/digitizer/src/mrudocuments.h7 7MruDocumentsboolmergeDocumentf/home/mark/engauge_dev/digitizer/src/mrudocuments.h4 4#MruDocumentsdocQStringvoidmruChosenf/home/mark/engauge_dev/digitizer/src/mrudocuments.hG G$MruDocumentsfilenameQStringvoid*prependDocumentToListf/home/mark/engauge_dev/digitizer/src/mrudocuments.hM M+MruDocumentsdegdocQStringvoid6reconnectActionsToPopupMenuf/home/mark/engauge_dev/digitizer/src/mrudocuments.hP P&MruDocumentsvoid*slotActionHighlightedf/home/mark/engauge_dev/digitizer/src/mrudocuments.h< <&MruDocuments idintvoid.slotActionUnhighlightedf/home/mark/engauge_dev/digitizer/src/mrudocuments.h? ?"MruDocumentsvoid slotMruActivatedf/home/mark/engauge_dev/digitizer/src/mrudocuments.hB B!MruDocumentsidintvoid~ MruDocumentsf/home/mark/engauge_dev/digitizer/src/mrudocuments.h++MruDocumentsnm_frameOffsetf/home/mark/engauge_dev/digitizer/src/mrudocuments.hW W QPointm_mruDocumentsf/home/mark/engauge_dev/digitizer/src/mrudocuments.haa"MruDocumentListm_mruMaxf/home/mark/engauge_dev/digitizer/src/mrudocuments.h]]intm_pParentMenuf/home/mark/engauge_dev/digitizer/src/mrudocuments.hSSQPopupMenu*m_pPopupf/home/mark/engauge_dev/digitizer/src/mrudocuments.hZZQPopupMenu* m_parentActionIdf/home/mark/engauge_dev/digitizer/src/mrudocuments.hTTint MruDocumentListf/home/mark/engauge_dev/digitizer/src/mrudocuments.h!!)&QPtrList< QAction >`/home/mark/engauge_dev/digitizer/src/osxsubs.cpp\/home/mark/engauge_dev/digitizer/src/osxsubs.h\/home/mark/engauge_dev/digitizer/src/point.cpp Point\/home/mark/engauge_dev/digitizer/src/point.cpp-< Point؈xScreenintyScreenint canvasQCanvas* Point\/home/mark/engauge_dev/digitizer/src/point.cpp>N PointxScreenintyScreenintxThetaGraph doubleyRGraph double canvasQCanvas*areaPoints\/home/mark/engauge_dev/digitizer/src/point.cppei PointuQPointArraydrawShape\/home/mark/engauge_dev/digitizer/src/point.cppko PointpQPainter&voiddumpPoint\/home/mark/engauge_dev/digitizer/src/point.cpp Pointvoid moveBy\/home/mark/engauge_dev/digitizer/src/point.cppq Point xDelta double yDelta doublevoidsetPointSet\/home/mark/engauge_dev/digitizer/src/point.cppXc PointpointSetconst PointSet*void~ Point\/home/mark/engauge_dev/digitizer/src/point.cppPV Point؈X/home/mark/engauge_dev/digitizer/src/point.h PointX/home/mark/engauge_dev/digitizer/src/point.h4~(QCanvasPolygonalItem PointX/home/mark/engauge_dev/digitizer/src/point.h884 PointxScreenintyScreenint canvasQCanvas* PointX/home/mark/engauge_dev/digitizer/src/point.h99X PointxScreenintyScreenintxThetaGraph doubleyRGraph double canvasQCanvas*areaPointsX/home/mark/engauge_dev/digitizer/src/point.hPP. Point$voidQPointArrayboundsLineLeftX/home/mark/engauge_dev/digitizer/src/point.hYYE Pointvoid QRectboundsLineRightX/home/mark/engauge_dev/digitizer/src/point.hZZF Pointvoid QRectdrawShapeX/home/mark/engauge_dev/digitizer/src/point.he e PointpQPainter&voiddumpPointX/home/mark/engauge_dev/digitizer/src/point.h` ` Pointu<voidvoid*graphCoordsAreDefinedX/home/mark/engauge_dev/digitizer/src/point.hJJO PointvoidboollineNextX/home/mark/engauge_dev/digitizer/src/point.hTT6 Point?voidQCanvasLine*linePrevX/home/mark/engauge_dev/digitizer/src/point.hSS6 PointvoidQCanvasLine* moveByX/home/mark/engauge_dev/digitizer/src/point.hMM5 Point xDelta double yDelta doublevoidpointSetX/home/mark/engauge_dev/digitizer/src/point.h>>9 Point voidconst PointSet*rttiX/home/mark/engauge_dev/digitizer/src/point.h]]/ PointvvoidintsetLineNextX/home/mark/engauge_dev/digitizer/src/point.hVV> PointlineQCanvasLine*voidsetLinePrevX/home/mark/engauge_dev/digitizer/src/point.hUU> PointlineQCanvasLine*voidsetPointSetX/home/mark/engauge_dev/digitizer/src/point.h= =. Pointu<pointSetconst PointSet*voidsetXThetaGraphX/home/mark/engauge_dev/digitizer/src/point.hEEd PointxThetaGraph doublevoidsetYRGraphX/home/mark/engauge_dev/digitizer/src/point.hFFP PointyRGraph doublevoidxScreenX/home/mark/engauge_dev/digitizer/src/point.hAA+ Pointu<voidintxThetaGraphX/home/mark/engauge_dev/digitizer/src/point.hCC6 Pointvoid doubleyRGraphX/home/mark/engauge_dev/digitizer/src/point.hDD. Pointvoid doubleyScreenX/home/mark/engauge_dev/digitizer/src/point.hBB+ Pointvoidint~ PointX/home/mark/engauge_dev/digitizer/src/point.h::  PointUboundsLineLeftX/home/mark/engauge_dev/digitizer/src/point.hYYE Pointvoid QRectboundsLineRightX/home/mark/engauge_dev/digitizer/src/point.hZZF Pointvoid QRect*graphCoordsAreDefinedX/home/mark/engauge_dev/digitizer/src/point.hJJO PointvoidboollineNextX/home/mark/engauge_dev/digitizer/src/point.hTT6 Point?voidQCanvasLine*linePrevX/home/mark/engauge_dev/digitizer/src/point.hSS6 PointvoidQCanvasLine*pointSetX/home/mark/engauge_dev/digitizer/src/point.h>>9 Point voidconst PointSet*rttiX/home/mark/engauge_dev/digitizer/src/point.h]]/ PointvvoidintsetLineNextX/home/mark/engauge_dev/digitizer/src/point.hVV> PointlineQCanvasLine*voidsetLinePrevX/home/mark/engauge_dev/digitizer/src/point.hUU> PointlineQCanvasLine*voidsetXThetaGraphX/home/mark/engauge_dev/digitizer/src/point.hEEd PointxThetaGraph doublevoidsetYRGraphX/home/mark/engauge_dev/digitizer/src/point.hFFP PointyRGraph doublevoidxScreenX/home/mark/engauge_dev/digitizer/src/point.hAA+ Pointu<voidintxThetaGraphX/home/mark/engauge_dev/digitizer/src/point.hCC6 Pointvoid doubleyRGraphX/home/mark/engauge_dev/digitizer/src/point.hDD. Pointvoid doubleyScreenX/home/mark/engauge_dev/digitizer/src/point.hBB+ Pointvoidint m_lineNextX/home/mark/engauge_dev/digitizer/src/point.hyyQCanvasLine*m_linePrevX/home/mark/engauge_dev/digitizer/src/point.hxxQCanvasLine*m_pointSetX/home/mark/engauge_dev/digitizer/src/point.hiiconst PointSet*m_xScreenX/home/mark/engauge_dev/digitizer/src/point.hllintm_xThetaDefinedX/home/mark/engauge_dev/digitizer/src/point.h| |boolm_xThetaGraphX/home/mark/engauge_dev/digitizer/src/point.hs s doublem_yRDefinedX/home/mark/engauge_dev/digitizer/src/point.h} }boolm_yRGraphX/home/mark/engauge_dev/digitizer/src/point.ht t doublem_yScreenX/home/mark/engauge_dev/digitizer/src/point.hmmintPointPtrListX/home/mark/engauge_dev/digitizer/src/point.hQPtrList< T >compareItemsX/home/mark/engauge_dev/digitizer/src/point.hPointPtrList item1(QPtrCollection::Item item2(QPtrCollection::ItemintcompareItemsX/home/mark/engauge_dev/digitizer/src/point.hPointPtrList item1(QPtrCollection::Item item2(QPtrCollection::Itemint PointListX/home/mark/engauge_dev/digitizer/src/point.h%*PointPtrList< Point > "PointListIteratorX/home/mark/engauge_dev/digitizer/src/point.h 12QPtrListIterator< Point >f/home/mark/engauge_dev/digitizer/src/pointmatch.cpp PointMatchf/home/mark/engauge_dev/digitizer/src/pointmatch.cpp=@PointMatch.hc&convertImageToArrayf/home/mark/engauge_dev/digitizer/src/pointmatch.cppGZPointMatchimageProcessedconst QImage&imageArray int**imageWidthint*imageHeightint*void(convertSampleToArrayf/home/mark/engauge_dev/digitizer/src/pointmatch.cpp\PointMatch c"samplePointPixels$const QPointArray&sampleMaskArray bool**sampleMaskWidthint* sampleMaskHeightint*xCenterint*yCenterint*voidcorrelationf/home/mark/engauge_dev/digitizer/src/pointmatch.cppPointMatch sampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintimageArrayint*imageWidthintimageHeightintxintyintcorrdouble*bool.isolateSampleMatchPointf/home/mark/engauge_dev/digitizer/src/pointmatch.cppPointMatch"samplePointPixelsQPointArray* imageconst QImage&settings$PointMatchSettings xStartint yStartintxintyintbool matchSamplePointf/home/mark/engauge_dev/digitizer/src/pointmatch.cppPointMatch imageProcessedconst QImage&settings$PointMatchSettings"samplePointPixels$const QPointArray&pointsExisting$const QPointArray&pointsCreated@QValueList< PointMatchTriplet >*void,recurseThroughOnRegionf/home/mark/engauge_dev/digitizer/src/pointmatch.cpp_PointMatchsampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintimageArrayint*imageWidthintimageHeightintxintyintfirstMax bool*onCountint*xSumint*ySumint*xMinint*xMaxint*yMinint*yMaxint*correlationMaxdouble*void:removePixelsNearCurrentPointsf/home/mark/engauge_dev/digitizer/src/pointmatch.cppaPointMatchimageArrayint*imageWidthintimageHeightintpointsExisting$const QPointArray&pointSeparationintvoidscanImagef/home/mark/engauge_dev/digitizer/src/pointmatch.cppPointMatch ; sampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintsettings$PointMatchSettingsimageArrayint*imageWidthintimageHeightintpointsCreatedPointMatchList*void~ PointMatchf/home/mark/engauge_dev/digitizer/src/pointmatch.cppBEPointMatch yb/home/mark/engauge_dev/digitizer/src/pointmatch.hMatchPtrListb/home/mark/engauge_dev/digitizer/src/pointmatch.h8GQPtrList< T >compareItemsb/home/mark/engauge_dev/digitizer/src/pointmatch.h<FMatchPtrList.hc item1(QPtrCollection::Item item2(QPtrCollection::ItemintcompareItemsb/home/mark/engauge_dev/digitizer/src/pointmatch.h<FMatchPtrList.hc item1(QPtrCollection::Item item2(QPtrCollection::ItemintPointMatchb/home/mark/engauge_dev/digitizer/src/pointmatch.hR PointMatchb/home/mark/engauge_dev/digitizer/src/pointmatch.hVVPointMatch&convertImageToArrayb/home/mark/engauge_dev/digitizer/src/pointmatch.hr s(PointMatchimageProcessedconst QImage&imageArray int**imageWidthint*imageHeightint*void(convertSampleToArrayb/home/mark/engauge_dev/digitizer/src/pointmatch.hm o!PointMatcht"samplePointPixels$const QPointArray&sampleMaskArray bool**sampleMaskWidthint* sampleMaskHeightint*xCenterint*yCenterint*voidcorrelationb/home/mark/engauge_dev/digitizer/src/pointmatch.hv zBPointMatch sampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintimageArrayint*imageWidthintimageHeightintxintyintcorrdouble*bool.isolateSampleMatchPointb/home/mark/engauge_dev/digitizer/src/pointmatch.hZ \+PointMatch"samplePointPixelsQPointArray* imageconst QImage&settings$PointMatchSettings xStartint yStartintxintyintbool matchSamplePointb/home/mark/engauge_dev/digitizer/src/pointmatch.h_ aVPointMatchimageProcessedconst QImage&settings$PointMatchSettings"samplePointPixels$const QPointArray&pointsExisting$const QPointArray&pointsCreated@QValueList< PointMatchTriplet >*void,recurseThroughOnRegionb/home/mark/engauge_dev/digitizer/src/pointmatch.h PointMatchsampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintimageArrayint*imageWidthintimageHeightintxintyintfirstMax bool*onCountint*xSumint*ySumint*xMinint*xMaxint*yMinint*yMaxint*correlationMaxdouble*void:removePixelsNearCurrentPointsb/home/mark/engauge_dev/digitizer/src/pointmatch.h~ =PointMatchimageArrayint*imageWidthintimageHeightintpointsExisting$const QPointArray&pointSeparationintvoidscanImageb/home/mark/engauge_dev/digitizer/src/pointmatch.h $PointMatch sampleMaskArray bool*sampleMaskWidthint sampleMaskHeightintsampleXCenterintsampleYCenterintsettings$PointMatchSettingsimageArrayint*imageWidthintimageHeightintpointsCreatedPointMatchList*void~ PointMatchb/home/mark/engauge_dev/digitizer/src/pointmatch.hWWPointMatch PixelOffb/home/mark/engauge_dev/digitizer/src/pointmatch.hggintPixelOnScannedb/home/mark/engauge_dev/digitizer/src/pointmatch.hiiint PixelOnUnscannedb/home/mark/engauge_dev/digitizer/src/pointmatch.hhhint PointMatchListb/home/mark/engauge_dev/digitizer/src/pointmatch.hL(L6BMatchPtrList< PointMatchTriplet > ,PointMatchListIteratorb/home/mark/engauge_dev/digitizer/src/pointmatch.hM,MBJQPtrListIterator< PointMatchTriplet >l/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cpp?PointMatchDlgc.g titleconst QString stylePointSetStylesettings&PointMatchSettings*drawPointl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgiimagePreviewQImage*imagePointconst QImage&xCenterintyCenterintdiscretize"const Discretize&disc$DiscretizeSettingsvoidloadPointImagesl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgivoidmakePointsl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cpp0PointMatchDlg\void"setPointSetStylesl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cpp2=PointMatchDlg void"slotAcceptedColorl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppbgPointMatchDlgtextconst QString&void&slotPointSeparationl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppirPointMatchDlgtextconst QString&voidslotPointSizel/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppt}PointMatchDlgtextconst QString&void"slotRejectedColorl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgtextconst QString&voidslotWhatl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgvoidtoggleActionsl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cpp?HPointMatchDlgfvoidupdatePreviewl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppJPPointMatchDlg void validateSettingsl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppR\PointMatchDlg bool~ PointMatchDlgl/home/mark/engauge_dev/digitizer/src/pointmatchdlg.cppPointMatchDlgdhch/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hPointMatchDlgh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hAQDialogPointMatchDlgh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hGH#PointMatchDlgh.g titleconst QString stylePointSetStylesettings&PointMatchSettings*drawPointh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h` aVPointMatchDlgimagePreviewQImage*imagePointconst QImage&xCenterintyCenterintdiscretize"const Discretize&disc$DiscretizeSettingsvoidloadPointImagesh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hd dPointMatchDlgivoidvoidmakePointsh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hg gPointMatchDlgvoidvoid"setPointSetStylesh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hj j PointMatchDlgxvoidvoid"slotAcceptedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hM M/PointMatchDlgtextconst QString&void&slotPointSeparationh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hN N1PointMatchDlgItextconst QString&voidslotPointSizeh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hO O+PointMatchDlg Ղtextconst QString&void"slotRejectedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hP P/PointMatchDlgtextconst QString&voidslotWhath/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hQ QPointMatchDlgvoidvoidtoggleActionsh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hm mPointMatchDlgvoidvoidupdatePreviewh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hs sPointMatchDlghvoidvoid validateSettingsh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hp pPointMatchDlghvoidbool~ PointMatchDlgh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hIIPointMatchDlgdhcPreviewHeighth/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h\\intPreviewWidthh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hWWintbuttonCancelh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hQPushButton*buttonOkh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hQPushButton*buttonWhath/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hQPushButton*$comboAcceptedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h !QComboBox*$comboRejectedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h !QComboBox*&editPointSeparationh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h{ {"QLineEdit*editPointSizeh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h QLineEdit*imageCircleh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h$ QImageimageDiamondh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h  QImageimageSquareh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h&1 QImage$labelAcceptedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h QLabel*(labelPointSeparationh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hz z QLabel*labelPointSizeh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h~ ~QLabel*labelPreviewh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h QLabel*$labelRejectedColorh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h QLabel* pointsetAcceptedh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h PointSet pointsetRejectedh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h/PointSetpreviewCanvash/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h QCanvas*"previewCanvasViewh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h"QCanvasView*settingsh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hww &PointMatchSettings* styleh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hvvPointSetStyle titleh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.hu uQString0validatorPointSeparationh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h||+QIntValidator*$validatorPointSizeh/home/mark/engauge_dev/digitizer/src/pointmatchdlg.h%QIntValidator*b/home/mark/engauge_dev/digitizer/src/pointset.cpp"PointSetb/home/mark/engauge_dev/digitizer/src/pointset.cpp]dPointSetpc.addLineb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet canvasQCanvas* pFrom Point*pTo Point*updateRectList(QValueList< QRect >*voidaddPointb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet canvasQCanvas* point Point*updateRectList(QValueList< QRect >*void"adjustForLogScaleb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet scale ScalepointXYdouble*bool,attachPointsToPointSetb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetvoiddeleteSharedb/home/mark/engauge_dev/digitizer/src/pointset.cppvPointSetvoiddumpb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetvoidexportCurveAllb/home/mark/engauge_dev/digitizer/src/pointset.cppoPointSet xportExportSettingsxPrecisionintyPrecisionintQString"exportCurveHeaderb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetY xportExportSettingsQString exportCurvePointb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetx double coordCoordSettings useInterpolationboolyPrecisionintQString"forceSingleValuedb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet coordCoordSettingstransform const Transform*updateRectList(QValueList< QRect >*voidgeometryInfob/home/mark/engauge_dev/digitizer/src/pointset.cpp0EPointSetvalidTransformboolcartesianboolpNextRowint* rInfo.GeometryWindowItemList&void geometryInfoAreab/home/mark/engauge_dev/digitizer/src/pointset.cppGmPointSetpNextRowint* rInfo.GeometryWindowItemList&void(geometryInfoDistanceb/home/mark/engauge_dev/digitizer/src/pointset.cppoPointSetpNextRowint* rInfo.GeometryWindowItemList&cartesianboolvoid2geometryInfoDistancePass1b/home/mark/engauge_dev/digitizer/src/pointset.cppPointSeto iintitrNext$PointListIterator& xLast double yLast doublex doubley doubledistance doubletotalDistance doublepNextRowint* rInfo.GeometryWindowItemList&voidhideb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetvoid$mergeUniqueXValuesb/home/mark/engauge_dev/digitizer/src/pointset.cppOmPointSetlist*QValueList< double >*xPrecisionintvoidpointCountb/home/mark/engauge_dev/digitizer/src/pointset.cppdgPointSetlint&pointSetCoordinatesb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetQPointArray&pointSetGraphLimitsb/home/mark/engauge_dev/digitizer/src/pointset.cpp2PointSetxThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*bool(pointSetScreenLimitsb/home/mark/engauge_dev/digitizer/src/pointset.cpp4MPointSetxMindouble*xMaxdouble*yMindouble*yMaxdouble*bool pointsb/home/mark/engauge_dev/digitizer/src/pointset.cpp_bPointSetu< const PointList*removeLineb/home/mark/engauge_dev/digitizer/src/pointset.cppC]PointSet pFrom Point*pTo Point*updateRectList(QValueList< QRect >*voidremovePointb/home/mark/engauge_dev/digitizer/src/pointset.cpp2PointSet p Point*updateRectList(QValueList< QRect >*voidremovePointsb/home/mark/engauge_dev/digitizer/src/pointset.cpp4APointSet0voidserializeReadb/home/mark/engauge_dev/digitizer/src/pointset.cpp .PointSetsQDataStream& canvasQCanvas*voidserializeWriteb/home/mark/engauge_dev/digitizer/src/pointset.cpp PointSet NsQDataStream&voidsetStyleb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetV stylePointSetStylevoidsetVisibleb/home/mark/engauge_dev/digitizer/src/pointset.cppntPointSetvisibleboolvoidshowb/home/mark/engauge_dev/digitizer/src/pointset.cppi}PointSetkvoidsingleValuedb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet coordCoordSettingstransform const Transform*boolthumbnailb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSetQPixmap,updateGraphCoordinatesb/home/mark/engauge_dev/digitizer/src/pointset.cppPointSet coordCoordSettingstransform const Transform*void~ PointSetb/home/mark/engauge_dev/digitizer/src/pointset.cppflPointSet PIb/home/mark/engauge_dev/digitizer/src/pointset.cpp[ [const double^/home/mark/engauge_dev/digitizer/src/pointset.hPointSet^/home/mark/engauge_dev/digitizer/src/pointset.hE)PointSet^/home/mark/engauge_dev/digitizer/src/pointset.hJJPointSet h.addLine^/home/mark/engauge_dev/digitizer/src/pointset.h ^PointSet2 canvasQCanvas* pFrom Point*pTo Point*updateRectList(QValueList< QRect >*voidaddPoint^/home/mark/engauge_dev/digitizer/src/pointset.hT TSPointSet canvasQCanvas* point Point*updateRectList(QValueList< QRect >*void"adjustForLogScale^/home/mark/engauge_dev/digitizer/src/pointset.h 8PointSetr scale ScalepointXYdouble*bool,attachPointsToPointSet^/home/mark/engauge_dev/digitizer/src/pointset.h %PointSetvoidvoiddeleteShared^/home/mark/engauge_dev/digitizer/src/pointset.hN NPointSetvoidvoiddump^/home/mark/engauge_dev/digitizer/src/pointset.h PointSetvoidvoidexportCurveAll^/home/mark/engauge_dev/digitizer/src/pointset.hw wPPointSetg xportExportSettingsxPrecisionintyPrecisionintQString"exportCurveHeader^/home/mark/engauge_dev/digitizer/src/pointset.hp p3PointSeta xportExportSettingsQString exportCurvePoint^/home/mark/engauge_dev/digitizer/src/pointset.hs saPointSetu<x double coordCoordSettings useInterpolationboolyPrecisiointQString"forceSingleValued^/home/mark/engauge_dev/digitizer/src/pointset.h (PointSet! coordCoordSettingstransform const Transform*updateRectList(QValueList< QRect >*voidgeometryInfo^/home/mark/engauge_dev/digitizer/src/pointset.h $PointSetvalidTransformboolcartesianboolpNextRowint* rInfo.GeometryWindowItemList&void geometryInfoArea^/home/mark/engauge_dev/digitizer/src/pointset.h GPointSet pNextRowint* rInfo.GeometryWindowItemList&void(geometryInfoDistance^/home/mark/engauge_dev/digitizer/src/pointset.h [PointSetdpNextRowint* rInfo.GeometryWindowItemList&cartesianboolvoid2geometryInfoDistancePass1^/home/mark/engauge_dev/digitizer/src/pointset.h ZPointSett iintitrNext$PointListIterator& xLast double yLast doublex doubley doubledistance doubletotalDistance doublepNextRowint* rInfo.GeometryWindowItemList&voidgetExport^/home/mark/engauge_dev/digitizer/src/pointset.hkk3PointSet voidboolhide^/home/mark/engauge_dev/digitizer/src/pointset.h{ {PointSetvoidvoid$mergeUniqueXValues^/home/mark/engauge_dev/digitizer/src/pointset.h EPointSetlist*QValueList< double >*xPrecisionintvoid modifiedGeometry^/home/mark/engauge_dev/digitizer/src/pointset.h>PointSetivoidboolname^/home/mark/engauge_dev/digitizer/src/pointset.h^^5PointSet voidconst QStringpointCount^/home/mark/engauge_dev/digitizer/src/pointset.hddPointSetvoidint&pointSetCoordinates^/home/mark/engauge_dev/digitizer/src/pointset.h)PointSetvoidQPointArray&pointSetGraphLimits^/home/mark/engauge_dev/digitizer/src/pointset.h `PointSetxThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*bool(pointSetScreenLimits^/home/mark/engauge_dev/digitizer/src/pointset.h UPointSetxMindouble*xMaxdouble*yMindouble*yMaxdouble*bool points^/home/mark/engauge_dev/digitizer/src/pointset.haa'PointSet void const PointList*removeLine^/home/mark/engauge_dev/digitizer/src/pointset.h PPointSet  pFrom Point*pTo Point*updateRectList(QValueList< QRect >*voidremovePoint^/home/mark/engauge_dev/digitizer/src/pointset.hW WEPointSet D point Point*updateRectList(QValueList< QRect >*voidremovePoints^/home/mark/engauge_dev/digitizer/src/pointset.hZ ZPointSet.devoidvoidserializeRead^/home/mark/engauge_dev/digitizer/src/pointset.h 7PointSet]sQDataStream& canvasQCanvas*voidserializeWrite^/home/mark/engauge_dev/digitizer/src/pointset.h -PointSet sQDataStream&voidsetExport^/home/mark/engauge_dev/digitizer/src/pointset.hll4PointSet xportboolvoid&setModifiedGeometry^/home/mark/engauge_dev/digitizer/src/pointset.hDPointSetu<modboolvoidsetName^/home/mark/engauge_dev/digitizer/src/pointset.h]]1PointSetxnameQStringvoidsetStyle^/home/mark/engauge_dev/digitizer/src/pointset.hh h&PointSetu< stylePointSetStylevoidsetVisible^/home/mark/engauge_dev/digitizer/src/pointset.h| |!PointSetvisibleboolvoidshow^/home/mark/engauge_dev/digitizer/src/pointset.hz zPointSetu<voidvoidsingleValued^/home/mark/engauge_dev/digitizer/src/pointset.h FPointSet* coordCoordSettingstransform const Transform*bool style^/home/mark/engauge_dev/digitizer/src/pointset.hgg7PointSet voidPointSetStylethumbnail^/home/mark/engauge_dev/digitizer/src/pointset.h PointSet QPixmap,updateGraphCoordinates^/home/mark/engauge_dev/digitizer/src/pointset.h PPointSet coordCoordSettingstransform const Transform*void~ PointSet^/home/mark/engauge_dev/digitizer/src/pointset.hKKPointSetgetExport^/home/mark/engauge_dev/digitizer/src/pointset.hkk3PointSet voidbool modifiedGeometry^/home/mark/engauge_dev/digitizer/src/pointset.h>PointSetivoidboolname^/home/mark/engauge_dev/digitizer/src/pointset.h^^5PointSet voidconst QStringsetExport^/home/mark/engauge_dev/digitizer/src/pointset.hll4PointSet xportboolvoid&setModifiedGeometry^/home/mark/engauge_dev/digitizer/src/pointset.hDPointSetu<modboolvoidsetName^/home/mark/engauge_dev/digitizer/src/pointset.h]]1PointSetxnameQStringvoid style^/home/mark/engauge_dev/digitizer/src/pointset.hgg7PointSet voidPointSetStylem_export^/home/mark/engauge_dev/digitizer/src/pointset.h boolm_lines^/home/mark/engauge_dev/digitizer/src/pointset.h!.QPtrList< QCanvasLine >$m_modifiedGeometry^/home/mark/engauge_dev/digitizer/src/pointset.h bool m_name^/home/mark/engauge_dev/digitizer/src/pointset.h QStringm_points^/home/mark/engauge_dev/digitizer/src/pointset.hPointListm_style^/home/mark/engauge_dev/digitizer/src/pointset.hPointSetStyle AxesPointSetName^/home/mark/engauge_dev/digitizer/src/pointset.h==0const QString DefaultCurveName^/home/mark/engauge_dev/digitizer/src/pointset.h??2const QString$DefaultMeasureName^/home/mark/engauge_dev/digitizer/src/pointset.h@@6const QString"ScalePointSetName^/home/mark/engauge_dev/digitizer/src/pointset.h>>2const QStringh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppPointSetDlgh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp2PointSetDlgppc titleQStringpointsetNameQString stateDigitizeStatepointSetStylePointSetStyle*curveReplaceh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp*PointSetDlgtextconst char*QString$pointsetNameFilterh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp,3PointSetDlg]pointsetNameconst QStringQStringslotLineColorh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppchPointSetDlgtextconst QString&void"slotLineConnectAsh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppjoPointSetDlgttextconst QString&voidslotLineSizeh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp\aPointSetDlg textconst QString&void slotPointInColorh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppUZPointSetDlgEtextconst QString&void$slotPointLineColorh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppNSPointSetDlgtextconst QString&void"slotPointLineSizeh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppGLPointSetDlg textconst QString&voidslotPointShapeh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp9>PointSetDlgMtextconst QString&voidslotPointSizeh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cpp@EPointSetDlgtextconst QString&voidslotWhath/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppqtPointSetDlgtvoidtoggleActionsh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppPointSetDlgvoidupdatePreviewh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppPointSetDlg>void~ PointSetDlgh/home/mark/engauge_dev/digitizer/src/pointsetdlg.cppPointSetDlggldd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hPointSetDlgd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h2~QDialogPointSetDlgd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h89#PointSetDlggld titleQStringcurveNameQString stateDigitizeStatepointSetStylePointSetStyle*curveReplaced/home/mark/engauge_dev/digitizer/src/pointsetdlg.hW W*PointSetDlgtextconst char*QString$pointsetNameFilterd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hZ Z:PointSetDlgpointsetNameconst QStringQStringslotLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hD D+PointSetDlgetextconst QString&void"slotLineConnectAsd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hE E/PointSetDlgitextconst QString&voidslotLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.hC C*PointSetDlgatextconst QString&void slotPointInColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hB B.PointSetDlgBtextconst QString&void$slotPointLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hA A0PointSetDlg textconst QString&void"slotPointLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.h@ @/PointSetDlgtextconst QString&voidslotPointShaped/home/mark/engauge_dev/digitizer/src/pointsetdlg.h> >,PointSetDlgtextconst QString&voidslotPointSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.h? ?+PointSetDlgtextconst QString&voidslotWhatd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hF FPointSetDlg*voidvoidtoggleActionsd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hQ QPointSetDlgvoidupdatePreviewd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hT TPointSetDlgvoid~ PointSetDlgd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h::PointSetDlgu<buttonCanceld/home/mark/engauge_dev/digitizer/src/pointsetdlg.h||QPushButton*buttonOkd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h{{QPushButton*buttonWhatd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h}}QPushButton*comboLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.ho oQComboBox*$comboLineConnectAsd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hp p!QComboBox*comboLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.hn nQComboBox*comboShaped/home/mark/engauge_dev/digitizer/src/pointsetdlg.hc cQComboBox*"comboShapeInColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hg g QComboBox*&comboShapeLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hf f"QComboBox*$comboShapeLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.he e!QComboBox*comboShapeSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.hd dQComboBox*groupLined/home/mark/engauge_dev/digitizer/src/pointsetdlg.hj jQGroupBox*groupPointd/home/mark/engauge_dev/digitizer/src/pointsetdlg.h] ]QGroupBox*labelLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hl lQLabel*$labelLineConnectAsd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hm mQLabel*labelLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.hk kQLabel*labelPreviewd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hs sQLabel*labelShaped/home/mark/engauge_dev/digitizer/src/pointsetdlg.h^ ^QLabel*"labelShapeInColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.hb bQLabel*&labelShapeLineColord/home/mark/engauge_dev/digitizer/src/pointsetdlg.ha aQLabel*$labelShapeLineSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.h` `QLabel*labelShapeSized/home/mark/engauge_dev/digitizer/src/pointsetdlg.h_ _QLabel*pointSetd/home/mark/engauge_dev/digitizer/src/pointsetdlg.ht tPointSet*pointSetStyled/home/mark/engauge_dev/digitizer/src/pointsetdlg.hNN PointSetStyle*previewCanvasd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hu uQCanvas*"previewCanvasViewd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hvv"QCanvasView* previewLeftPointd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hw w Point*"previewRightPointd/home/mark/engauge_dev/digitizer/src/pointsetdlg.hx x Point* stated/home/mark/engauge_dev/digitizer/src/pointsetdlg.hKKDigitizeStatep/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cppPointSetNameDlgp/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cpp$GPointSetNameDlggld curvebool titleQStringnameQString*disallowedNamesQStringListcurveReplacep/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cpp[fPointSetNameDlgtextconst char*QStringslotTextChangedp/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cpplqPointSetNameDlgtextconst QString&voidtoggleActionsp/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cppNYPointSetNameDlgvoid"~ PointSetNameDlgp/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.cppILPointSetNameDlgl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hPointSetNameDlgl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h&LQDialogPointSetNameDlgl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h,,ZPointSetNameDlggld curvebool titleQStringnameQString*disallowedNamesQStringListcurveReplacel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h= =*PointSetNameDlgtextconst char*QStringslotTextChangedl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h2 2)PointSetNameDlgconst QString&voidtoggleActionsl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h: :PointSetNameDlgvoid"~ PointSetNameDlgl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h--PointSetNameDlgmanbuttonCancell/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hKKQPushButton*buttonOkl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hJJQPushButton* curvel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h7 7booldisallowedNamesl/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hFFQStringListeditNamel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hI IQLineEdit*labelNamel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hH HQLabel*namel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.hC CQString* titlel/home/mark/engauge_dev/digitizer/src/pointsetnamedlg.h@ @QStringd/home/mark/engauge_dev/digitizer/src/pointsets.cpp@PointSetsd/home/mark/engauge_dev/digitizer/src/pointsets.cpp:EPointSetsc.saddCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppZbPointSetsnameQStringvoidaddMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppdlPointSets)nameQStringvoidaddPointAxesd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets canvasQCanvas*p Point*updateRectList(QValueList< QRect >*voidaddPointCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets  canvasQCanvas*p Point*nameQStringupdateRectList(QValueList< QRect >*voidaddPointMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets ݀ canvasQCanvas*p Point*nameQStringupdateRectList(QValueList< QRect >*voidaddPointScaled/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets canvasQCanvas*p Point*updateRectList(QValueList< QRect >*void8adjustXOrYPrecisionForExportd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets솀 scale ScalevScreenMin doublevScreenMax doublevGraphMin doublevGraphMax doubleprecisionint*void(ascendingXValuesListd/home/mark/engauge_dev/digitizer/src/pointsets.cpp PointSetsw coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionint(QValueList< double >.attachPointsToPointSetsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets %void$axisSetGraphLimitsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets coordCoordSettingstransform const Transform*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*bool curveCoordinatesd/home/mark/engauge_dev/digitizer/src/pointsets.cpppzPointSets SnameQStringQPointArraycurveNamesd/home/mark/engauge_dev/digitizer/src/pointsets.cppdmPointSetslistQStringList*voidcurveStyled/home/mark/engauge_dev/digitizer/src/pointsets.cppzPointSetsnameQStringPointSetStylecurveStylesd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets.const PointSetStyleListcurveThumbnaild/home/mark/engauge_dev/digitizer/src/pointsets.cpp|PointSets рnameQStringQPixmapdeleteSharedd/home/mark/engauge_dev/digitizer/src/pointsets.cppLXPointSetsvoiddumpd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsvoidexportExcluded/home/mark/engauge_dev/digitizer/src/pointsets.cpp4>PointSets] curveQStringvoidexportExcludedd/home/mark/engauge_dev/digitizer/src/pointsets.cpp&PointSetsQStringList$exportHeaderPrefixd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets coordCoordSettings xportExportSettingsQStringexportIncluded/home/mark/engauge_dev/digitizer/src/pointsets.cpp(2PointSets curveQStringvoidexportIncludedd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsQStringListexportToStreamd/home/mark/engauge_dev/digitizer/src/pointsets.cppxPointSetsstrQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsvoid>exportToStreamAllCurvesTogetherd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsstrQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionintyPrecisionintvoidBexportToStreamEachCurveSeparatelyd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsstrQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionintyPrecisionintvoidfindCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppnyPointSets nameQStringPointSet*findMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cpp{PointSetsenameQStringPointSet*"geometryInfoCurved/home/mark/engauge_dev/digitizer/src/pointsets.cpp@KPointSetsu<validTransformboolcartesianboolnameQString rInfo.GeometryWindowItemList&void&geometryInfoMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppMXPointSetsvalidTransformboolcartesianboolnameQString rInfo.GeometryWindowItemList&voidmeasureNamesd/home/mark/engauge_dev/digitizer/src/pointsets.cppoxPointSetslistQStringList*voidmeasureStyled/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsBnameQStringPointSetStylemeasureStylesd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets  .const PointSetStyleList measureThumbnaild/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets 0nameQStringQPixmap*modifiedGeometryCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppZcPointSetsnameQStringbool.modifiedGeometryMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppenPointSets [nameQStringboolmoveCurveDownd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsnameQStringvoidmoveCurveUpd/home/mark/engauge_dev/digitizer/src/pointsets.cpp(:PointSetsnameQStringvoidmoveMeasureDownd/home/mark/engauge_dev/digitizer/src/pointsets.cpp&PointSetsnameQStringvoidmoveMeasureUpd/home/mark/engauge_dev/digitizer/src/pointsets.cpp<NPointSetsnameQStringvoidpointCountCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets nameQStringint"pointCountMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets̀nameQStringint&pointSetGraphLimitsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets coordCoordSettingstransform const Transform*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*boolremoveCurved/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsnameQStringvoidremoveMeasured/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets0nameQStringvoidremovePointd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsp Point*updateRectList(QValueList< QRect >*bool:removePointsForSelectedCurvesd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets selectedCurvesQStringList*void>removePointsForSelectedMeasuresd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets selectedMeasuresQStringList*void6selectXYPrecisionsForExportd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsπ coordCoordSettingsxPrecisionint*yPrecisionint*voidserializeReadd/home/mark/engauge_dev/digitizer/src/pointsets.cpp]vPointSetssQDataStream& canvasQCanvas*voidserializeWrited/home/mark/engauge_dev/digitizer/src/pointsets.cppN[PointSetssQDataStream&voidsetCurveStyled/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsnameQStringpointSetStylePointSetStylevoidsetMeasureStyled/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsnameQStringpointSetStylePointSetStylevoidsetNamed/home/mark/engauge_dev/digitizer/src/pointsets.cppPbPointSetsoldNameQStringnewNameQStringvoidshowAllPointsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets "voidvoidshowAxesPointsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsvoidvoidshowCurvePointsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets curveQStringvoid"showMeasurePointsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsmeasureQStringvoidshowScalePointsd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSetsvoidvoid$showSinglePointSetd/home/mark/engauge_dev/digitizer/src/pointsets.cppPointSets typePointSetTypenameQStringvoid2singlePointSetGraphLimitsd/home/mark/engauge_dev/digitizer/src/pointsets.cpp&PointSets pPointSet* first bool*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*void4singlePointSetScreenLimitsd/home/mark/engauge_dev/digitizer/src/pointsets.cpp(;PointSetspPointSet* first bool*xMindouble*xMaxdouble*yMindouble*yMaxdouble*void,updateGraphCoordinatesd/home/mark/engauge_dev/digitizer/src/pointsets.cpp=LPointSets coordCoordSettingstransform const Transform*updateRectList(QValueList< QRect >*void~ PointSetsd/home/mark/engauge_dev/digitizer/src/pointsets.cppGJPointSetso`/home/mark/engauge_dev/digitizer/src/pointsets.hPointSets`/home/mark/engauge_dev/digitizer/src/pointsets.hEFPointSets`/home/mark/engauge_dev/digitizer/src/pointsets.hIIPointSetsh.saddCurve`/home/mark/engauge_dev/digitizer/src/pointsets.hQ QPointSets<nameQStringvoidaddMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.hR R!PointSetsnameQStringvoidaddPointAxes`/home/mark/engauge_dev/digitizer/src/pointsets.hY YSPointSetsp canvasQCanvas*p Point*updateRectList(QValueList< QRect >*voidaddPointCurve`/home/mark/engauge_dev/digitizer/src/pointsets.hZ ZbPointSets canvasQCanvas*p Point*nameQStringupdateRectList(QValueList< QRect >*voidaddPointMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.h[ [dPointSets canvasQCanvas*p Point*nameQStringupdateRectList(QValueList< QRect >*voidaddPointScale`/home/mark/engauge_dev/digitizer/src/pointsets.h\ \TPointSets canvasQCanvas*p Point*updateRectList(QValueList< QRect >*void8adjustXOrYPrecisionForExport`/home/mark/engauge_dev/digitizer/src/pointsets.h 9PointSets2 scale ScalevScreenMin doublevScreenMax doublevGraphMin doublevGraphMax doubleprecisionint*void(ascendingXValuesList`/home/mark/engauge_dev/digitizer/src/pointsets.hBPointSets coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionint(QValueList< double >.attachPointsToPointSets`/home/mark/engauge_dev/digitizer/src/pointsets.h &PointSetsvoidvoidaxes`/home/mark/engauge_dev/digitizer/src/pointsets.hUU8PointSetsvoidconst PointSet*axesStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h||BPointSetsvoidPointSetStyle$axisSetGraphLimits`/home/mark/engauge_dev/digitizer/src/pointsets.h #PointSets  coordCoordSettingstransform const Transform*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*bool curveCoordinates`/home/mark/engauge_dev/digitizer/src/pointsets.h.PointSets nameQStringQPointArraycurveNames`/home/mark/engauge_dev/digitizer/src/pointsets.hj j&PointSetslistQStringList*voidcurveStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h}}*PointSetsnameQStringPointSetStylecurveStyles`/home/mark/engauge_dev/digitizer/src/pointsets.h)PointSets \.const PointSetStyleListcurveThumbnail`/home/mark/engauge_dev/digitizer/src/pointsets.h (PointSetsnameQStringQPixmapdeleteShared`/home/mark/engauge_dev/digitizer/src/pointsets.hM MPointSetsevoidvoiddump`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSets voidvoidexportExclude`/home/mark/engauge_dev/digitizer/src/pointsets.h %PointSets  curveQStringvoidexportExcluded`/home/mark/engauge_dev/digitizer/src/pointsets.h$PointSetsvoidQStringList$exportHeaderPrefix`/home/mark/engauge_dev/digitizer/src/pointsets.h IPointSets   coordCoordSettings xportExportSettingsQStringexportInclude`/home/mark/engauge_dev/digitizer/src/pointsets.h %PointSets curveQStringvoidexportIncluded`/home/mark/engauge_dev/digitizer/src/pointsets.h$PointSetsvoidQStringListexportToStream`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSets .strQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsvoid>exportToStreamAllCurvesTogether`/home/mark/engauge_dev/digitizer/src/pointsets.h ;PointSetsstrQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionintyPrecisionintvoidBexportToStreamEachCurveSeparately`/home/mark/engauge_dev/digitizer/src/pointsets.h ;PointSets.strQTextStream& coordCoordSettingsgrid GridMeshSettings xportExportSettingsxPrecisionintyPrecisionintvoidfindCurve`/home/mark/engauge_dev/digitizer/src/pointsets.h %PointSetsnameQStringPointSet*findMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.h 'PointSetsnameQStringPointSet*"geometryInfoCurve`/home/mark/engauge_dev/digitizer/src/pointsets.h $PointSets validTransformboolcartesianboolnameQString rInfo.GeometryWindowItemList&void&geometryInfoMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.h $PointSetsvalidTransformboolcartesianboolnameQString rInfo.GeometryWindowItemList&voidmeasureNames`/home/mark/engauge_dev/digitizer/src/pointsets.hk k(PointSetslistQStringList*voidmeasureStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h~~,PointSetsnameQStringPointSetStylemeasureStyles`/home/mark/engauge_dev/digitizer/src/pointsets.h+PointSets.const PointSetStyleList measureThumbnail`/home/mark/engauge_dev/digitizer/src/pointsets.h *PointSetsnameQStringQPixmap*modifiedGeometryCurve`/home/mark/engauge_dev/digitizer/src/pointsets.h ,PointSetsnameQStringbool.modifiedGeometryMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.h .PointSetsnameQStringboolmoveCurveDown`/home/mark/engauge_dev/digitizer/src/pointsets.hn n$PointSetsnameQStringvoidmoveCurveUp`/home/mark/engauge_dev/digitizer/src/pointsets.ho o"PointSetsnameQStringvoidmoveMeasureDown`/home/mark/engauge_dev/digitizer/src/pointsets.hp p&PointSets nameQStringvoidmoveMeasureUp`/home/mark/engauge_dev/digitizer/src/pointsets.hq q$PointSetsxnameQStringvoidpointCountCurve`/home/mark/engauge_dev/digitizer/src/pointsets.hxx%PointSetsnameQStringint"pointCountMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.hyy'PointSetsnameQStringint&pointSetGraphLimits`/home/mark/engauge_dev/digitizer/src/pointsets.h #PointSets coordCoordSettingstransform const Transform*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*boolremoveCurve`/home/mark/engauge_dev/digitizer/src/pointsets.hf f"PointSetsnameQStringvoidremoveMeasure`/home/mark/engauge_dev/digitizer/src/pointsets.hg g$PointSets ހnameQStringvoidremovePoint`/home/mark/engauge_dev/digitizer/src/pointsets.h_ _EPointSets  point Point*updateRectList(QValueList< QRect >*bool:removePointsForSelectedCurves`/home/mark/engauge_dev/digitizer/src/pointsets.hb bFPointSets"selectedPointSetsQStringList*void>removePointsForSelectedMeasures`/home/mark/engauge_dev/digitizer/src/pointsets.hc cGPointSets selectedMeasuresQStringList*void scale`/home/mark/engauge_dev/digitizer/src/pointsets.hVV:PointSetsOvoidconst PointSet*scaleStyle`/home/mark/engauge_dev/digitizer/src/pointsets.hDPointSetsvoidPointSetStyle6selectXYPrecisionsForExport`/home/mark/engauge_dev/digitizer/src/pointsets.h [PointSets  coordCoordSettingsxPrecisionint*yPrecisionint*voidserializeRead`/home/mark/engauge_dev/digitizer/src/pointsets.h 7PointSets 1sQDataStream& canvasQCanvas*voidserializeWrite`/home/mark/engauge_dev/digitizer/src/pointsets.h -PointSetssQDataStream&voidsetAxesStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h\PointSetspointSetStylePointSetStylevoidsetCurveStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h APointSets nameQStringpointSetStylePointSetStylevoidsetMeasureStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h CPointSetsnameQStringpointSetStylePointSetStylevoidsetName`/home/mark/engauge_dev/digitizer/src/pointsets.hu u2PointSetsoldNameQStringnewNameQStringvoidsetScaleStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h^PointSets pointSetStylePointSetStylevoidshowAllPoints`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSets voidvoidshowAxesPoints`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSetsvoidvoidshowCurvePoints`/home/mark/engauge_dev/digitizer/src/pointsets.h 'PointSets curveQStringvoid"showMeasurePoints`/home/mark/engauge_dev/digitizer/src/pointsets.h +PointSets  measureQStringvoidshowScalePoints`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSetsvoidvoid$showSinglePointSet`/home/mark/engauge_dev/digitizer/src/pointsets.h JPointSetstypePointSetTypenameQStringvoid2singlePointSetGraphLimits`/home/mark/engauge_dev/digitizer/src/pointsets.h IPointSetspPointSet* first bool*xThetaMindouble*xThetaMaxdouble* yRMindouble* yRMaxdouble*void4singlePointSetScreenLimits`/home/mark/engauge_dev/digitizer/src/pointsets.h =PointSetspPointSet* first bool*xMindouble*xMaxdouble*yMindouble*yMaxdouble*void,updateGraphCoordinates`/home/mark/engauge_dev/digitizer/src/pointsets.h (PointSets coordCoordSettingstransform const Transform*updateRectList(QValueList< QRect >*void~ PointSets`/home/mark/engauge_dev/digitizer/src/pointsets.hJJPointSetsoaxes`/home/mark/engauge_dev/digitizer/src/pointsets.hUU8PointSetsvoidconst PointSet*axesStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h||BPointSetsvoidPointSetStyle scale`/home/mark/engauge_dev/digitizer/src/pointsets.hVV:PointSetsOvoidconst PointSet*scaleStyle`/home/mark/engauge_dev/digitizer/src/pointsets.hDPointSetsvoidPointSetStylesetAxesStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h\PointSetspointSetStylePointSetStylevoidsetScaleStyle`/home/mark/engauge_dev/digitizer/src/pointsets.h^PointSets pointSetStylePointSetStylevoidAxisPointSet`/home/mark/engauge_dev/digitizer/src/pointsets.hintCurvePointSet`/home/mark/engauge_dev/digitizer/src/pointsets.hintMeasurePointSet`/home/mark/engauge_dev/digitizer/src/pointsets.hintScalePointSet`/home/mark/engauge_dev/digitizer/src/pointsets.hintaxesPointSet`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSetcurveList`/home/mark/engauge_dev/digitizer/src/pointsets.hPointSetListmeasureList`/home/mark/engauge_dev/digitizer/src/pointsets.hPointSetListscalePointSet`/home/mark/engauge_dev/digitizer/src/pointsets.h PointSet PointSetList`/home/mark/engauge_dev/digitizer/src/pointsets.h==),QValueList< PointSet > 2PointSetListConstIterator`/home/mark/engauge_dev/digitizer/src/pointsets.h>*>CFQValueListConstIterator< PointSet > (PointSetListIterator`/home/mark/engauge_dev/digitizer/src/pointsets.h?%?9<QValueListIterator< PointSet >j/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cpp2PointSetsDlgpc. curvebool titleQStringpointSetsPointSets*6pointSetsWithOrphanedPointsQStringList*curveReplacej/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlg textconst char*QString6newNameFromPreviousPointSetj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlg previousNameQStringQString&refreshPointSetListj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgtvoid$selectPointSetNamej/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlg nameQStringvoidslotDownj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cpp(PointSetsDlgvoidslotNewj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cpp*MPointSetsDlgqvoidslotPropertiesj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppOfPointSetsDlgqvoidslotRemovej/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cpphPointSetsDlg voidslotRenamej/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlg qvoid(slotSelectionChangedj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgitemQListBoxItem*void slotUpj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgvoidslotWhatj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgvoidtoggleActionsj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgtvoid~ PointSetsDlgj/home/mark/engauge_dev/digitizer/src/pointsetsdlg.cppPointSetsDlgtf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hPointSetsDlgf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h/oQDialogPointSetsDlgf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h55kPointSetsDlglds curvebool titleQStringpointSetsPointSets*6pointSetsWithOrphanedPointsQStringList*curveReplacef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h[ [*PointSetsDlgtextconst char*QString6newNameFromPreviousPointSetf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hF F=PointSetsDlgpreviousNameQStringQString&refreshPointSetListf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hU U"PointSetsDlgBvoidvoid$selectPointSetNamef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hX X2PointSetsDlgselectionNameQStringvoidslotDownf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h: :PointSetsDlggvoidvoidslotNewf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h< <PointSetsDlgvoidvoidslotPropertiesf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h= =PointSetsDlgvoidvoidslotRemovef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h> >PointSetsDlgvoidvoidslotRenamef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h? ?PointSetsDlgvoidvoid(slotSelectionChangedf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h@ @1PointSetsDlg itemQListBoxItem*void slotUpf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h; ;PointSetsDlgvoidvoidslotWhatf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hA APointSetsDlgu<voidvoidtoggleActionsf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h^ ^PointSetsDlgvoidvoid~ PointSetsDlgf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h66PointSetsDlgtactivePointSetf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hn nQStringbuttonCancelf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hjjQPushButton*buttonDownf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hffQPushButton*buttonNewf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.haaQPushButton*buttonOkf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hiiQPushButton* buttonPropertiesf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hdd!QPushButton*buttonRemovef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hbbQPushButton*buttonRenamef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hccQPushButton*buttonUpf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.heeQPushButton*buttonWhatf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hkkQPushButton* curvef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hI IboolpointSetNamesf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hg gQListBox*pointSetsf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hO OPointSets*6pointSetsWithOrphanedPointsf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hRR,QStringList* titlef/home/mark/engauge_dev/digitizer/src/pointsetsdlg.hL LQString NoActivePointSetf/home/mark/engauge_dev/digitizer/src/pointsetsdlg.h)),const QStringn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp*-PointSetStyles.seareaPointsn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp,SPointSetStyles}xScreenintyScreenintpointSetStylePointSetStyleQPointArray colorn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylesFtextQString ColorcolorNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles  color ColorQStringcolorNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp!PointSetStylesutevoidQStringListdrawShapen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppUPointSetStylespQPainter&xScreenintyScreenintpointSetStylePointSetStylevoidlineConnectAsn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylesQtextQStringLineConnectAs"lineConnectAsNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles methodLineConnectAsQString$lineConnectAsNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp#*PointSetStylesPQ voidQStringListlineSizen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles textQStringLineSizelineSizeNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp|PointSetStylessizeLineSizeQStringlineSizeNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylesvoidQStringListpointLineSizen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylestextQStringPointLineSize"pointLineSizeNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppbzPointSetStylessizePointLineSizeQString$pointLineSizeNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles voidQStringListpointSetBrushn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles  color Color QBrushpointSetColorn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles  color Color QColorpointSetPenn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles  color Colorsizeint styleQt::PenStyleQPenpointShapen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles textQStringPointShapepointShapeNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp4FPointSetStyles shapePointShapeQStringpointShapeNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles voidQStringListpointSizen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStyles textQStringPointSizepointSizeNamen/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppH`PointSetStylessizePointSizeQStringpointSizeNamesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cppPointSetStylesvoidQStringList ~ PointSetStylesn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp/2PointSetStylesCOLOR_GOLDn/home/mark/engauge_dev/digitizer/src/pointsetstyles.cpp( (%const QColorj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hPointSetStylesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h-nPointSetStylesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hccPointSetStylesareaPointsj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hYYWPointSetStyles xScreenintyScreenintpointSetStylePointSetStyleQPointArray colorj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hN NPointSetStylestextQString ColorcolorNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hG G"PointSetStylesS color ColorQStringcolorNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hUU PointSetStylesvoidQStringList createj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h15PointSetStyles.sevoidvoiddestroyj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h6=PointSetStylesytsvoidvoiddrawShapej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hZ ZVPointSetStylespQPainter&xScreenintyScreenintpointSetStylePointSetStylevoidinstancej/home/mark/engauge_dev/digitizer/src/pointsetstyles.h>APointSetStylesvoidPointSetStyles&lineConnectAsj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hOO-PointSetStylesu<textQStringLineConnectAs"lineConnectAsNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hH H3PointSetStylesl methodLineConnectAsQString$lineConnectAsNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hVV(PointSetStyles؈voidQStringListlineSizej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hM M#PointSetStylestextQStringLineSizelineSizeNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hF F'PointSetStylessizeLineSizeQStringlineSizeNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hTT#PointSetStylesvoidQStringListpointLineSizej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hLL-PointSetStyles*textQStringPointLineSize"pointLineSizeNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hE E1PointSetStylesBsizePointLineSizeQString$pointLineSizeNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hSS(PointSetStylesvoidQStringListpointSetBrushj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h^ ^%PointSetStyles color Color QBrushpointSetColorj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h_ _%PointSetStyles color Color QColorpointSetPenj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h] ]OPointSetStyles color Colorsizeint styleQt::PenStyleQPenpointShapej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hJJ'PointSetStylesutextQStringPointShapepointShapeNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hC C,PointSetStyles[ shapePointShapeQStringpointShapeNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hQQ%PointSetStylesvoidQStringListpointSizej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hKK%PointSetStylesotextQStringPointSizepointSizeNamej/home/mark/engauge_dev/digitizer/src/pointsetstyles.hD D)PointSetStylessizePointSizeQStringpointSizeNamesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hRR$PointSetStylesvoidQStringList(pointSizeToHalfwidthj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hiiSPointSetStylesu<sizePointSizeint ~ PointSetStylesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hddPointSetStyles  createj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h15PointSetStyles.sevoidvoiddestroyj/home/mark/engauge_dev/digitizer/src/pointsetstyles.h6=PointSetStylesytsvoidvoidinstancej/home/mark/engauge_dev/digitizer/src/pointsetstyles.h>APointSetStylesvoidPointSetStyles&(pointSizeToHalfwidthj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hiiSPointSetStylesu<sizePointSizeintpointSetStylesj/home/mark/engauge_dev/digitizer/src/pointsetstyles.hll)PointSetStyles*h/home/mark/engauge_dev/digitizer/src/scalebardlg.cppScaleBarDlgh/home/mark/engauge_dev/digitizer/src/scalebardlg.cpp"CScaleBarDlgppcdocDigitDoc* length double~ ScaleBarDlgh/home/mark/engauge_dev/digitizer/src/scalebardlg.cppEHScaleBarDlggldd/home/mark/engauge_dev/digitizer/src/scalebardlg.hScaleBarDlgd/home/mark/engauge_dev/digitizer/src/scalebardlg.h)=QDialogScaleBarDlgd/home/mark/engauge_dev/digitizer/src/scalebardlg.h//-ScaleBarDlgglddocDigitDoc* length double lengthd/home/mark/engauge_dev/digitizer/src/scalebardlg.h22=ScaleBarDlgivoidconst QString~ ScaleBarDlgd/home/mark/engauge_dev/digitizer/src/scalebardlg.h00ScaleBarDlg lengthd/home/mark/engauge_dev/digitizer/src/scalebardlg.h22=ScaleBarDlgivoidconst QStringbuttonCanceld/home/mark/engauge_dev/digitizer/src/scalebardlg.h::QPushButton*buttonOkd/home/mark/engauge_dev/digitizer/src/scalebardlg.h99QPushButton*docd/home/mark/engauge_dev/digitizer/src/scalebardlg.h< <DigitDoc*doubleValidatord/home/mark/engauge_dev/digitizer/src/scalebardlg.h88%"QDoubleValidator*editLengthd/home/mark/engauge_dev/digitizer/src/scalebardlg.h7 7QLineEdit*labelLengthd/home/mark/engauge_dev/digitizer/src/scalebardlg.h6 6QLabel*h/home/mark/engauge_dev/digitizer/src/scanforaxes.cppScanForAxesh/home/mark/engauge_dev/digitizer/src/scanforaxes.cpp-7ScanForAxesppc xMinG double xMaxG double yMinG double yMaxG doubledocDigitDoc*executeh/home/mark/engauge_dev/digitizer/src/scanforaxes.cpp>gScanForAxesvoid.scanAxisForHighEndpointh/home/mark/engauge_dev/digitizer/src/scanforaxes.cppHScanForAxes axisSliceAxisSliceaxisMaxint&void,scanAxisForLowEndpointh/home/mark/engauge_dev/digitizer/src/scanforaxes.cppScanForAxesaxisSliceAxisSliceaxisMinint&voidscanXAxish/home/mark/engauge_dev/digitizer/src/scanforaxes.cppiScanForAxesimgconst QImage&scanLineQCanvasLine&bestXLineQCanvasLine&xAxisRowint&xAxisColMinint&xAxisColMaxint&voidscanYAxish/home/mark/engauge_dev/digitizer/src/scanforaxes.cppScanForAxesimgconst QImage&scanLineQCanvasLine&bestYLineQCanvasLine&yAxisColint&yAxisRowMinint&yAxisRowMaxint&voidupdateViewh/home/mark/engauge_dev/digitizer/src/scanforaxes.cppJPScanForAxesimgconst QImage&void~ ScanForAxesh/home/mark/engauge_dev/digitizer/src/scanforaxes.cpp9<ScanForAxessexPIXEL_DARKh/home/mark/engauge_dev/digitizer/src/scanforaxes.cpp* *const intPIXEL_LIGHTh/home/mark/engauge_dev/digitizer/src/scanforaxes.cpp+ +const intd/home/mark/engauge_dev/digitizer/src/scanforaxes.hScanForAxesd/home/mark/engauge_dev/digitizer/src/scanforaxes.h(KScanForAxesd/home/mark/engauge_dev/digitizer/src/scanforaxes.h-/ScanForAxessex xMinG double xMaxG double yMinG double yMaxG doubledocDigitDoc*executed/home/mark/engauge_dev/digitizer/src/scanforaxes.h3 3ScanForAxesvoid.scanAxisForHighEndpointd/home/mark/engauge_dev/digitizer/src/scanforaxes.h? ?CScanForAxesaxisSliceAxisSliceaxisMaxint&void,scanAxisForLowEndpointd/home/mark/engauge_dev/digitizer/src/scanforaxes.h> >BScanForAxesaxisSliceAxisSliceaxisMinint&voidscanXAxisd/home/mark/engauge_dev/digitizer/src/scanforaxes.h8 98ScanForAxesimgconst QImage&scanLineQCanvasLine&bestXLineQCanvasLine&xAxisRowint&xAxisColMinint&xAxisColMaxint&voidscanYAxisd/home/mark/engauge_dev/digitizer/src/scanforaxes.h: ;8ScanForAxesimgconst QImage&scanLineQCanvasLine&bestYLineQCanvasLine&yAxisColint&yAxisRowMinint&yAxisRowMaxint&voidupdateViewd/home/mark/engauge_dev/digitizer/src/scanforaxes.hC C&ScanForAxesimgconst QImage&void~ ScanForAxesd/home/mark/engauge_dev/digitizer/src/scanforaxes.h00ScanForAxes m_docd/home/mark/engauge_dev/digitizer/src/scanforaxes.hI IDigitDoc*m_xMaxGd/home/mark/engauge_dev/digitizer/src/scanforaxes.hF F doublem_xMinGd/home/mark/engauge_dev/digitizer/src/scanforaxes.hE E doublem_yMaxGd/home/mark/engauge_dev/digitizer/src/scanforaxes.hH H doublem_yMinGd/home/mark/engauge_dev/digitizer/src/scanforaxes.hG G double AxisSliced/home/mark/engauge_dev/digitizer/src/scanforaxes.h$ $)2QMemArray< unsigned int >`/home/mark/engauge_dev/digitizer/src/segment.cppSegment`/home/mark/engauge_dev/digitizer/src/segment.cpp<DSegmentppc canvasQCanvas*yintSegmentLine`/home/mark/engauge_dev/digitizer/src/segment.cpp\`SegmentLine  canvasQCanvas*segmentSegment*appendColumn`/home/mark/engauge_dev/digitizer/src/segment.cppM]SegmentqxintyintsegSegmentSettingsvoid*createAcceptablePoint`/home/mark/engauge_dev/digitizer/src/segment.cpp_qSegment pFirst bool* pList*QValueList< QPoint >* xPrevdouble* yPrevdouble*x doubley doublevoiddump`/home/mark/engauge_dev/digitizer/src/segment.cppPZSegmentu<voidfillPoints`/home/mark/engauge_dev/digitizer/src/segment.cppSegmentsegSegmentSettings(QValueList< QPoint >0fillPointsFillingCorners`/home/mark/engauge_dev/digitizer/src/segment.cppSegment؈segSegmentSettings(QValueList< QPoint >>fillPointsWithoutFillingCorners`/home/mark/engauge_dev/digitizer/src/segment.cppESegmentusegSegmentSettings(QValueList< QPoint > lines`/home/mark/engauge_dev/digitizer/src/segment.cppSegmentQCanvasItemList$pointIsCloseToLine`/home/mark/engauge_dev/digitizer/src/segment.cppSegment xLeft double yLeft doublexInt doubleyInt double xRight double yRight doublebool(pointsAreCloseToLine`/home/mark/engauge_dev/digitizer/src/segment.cppSegment xLeft double yLeft doubleremovedPoints(QValueList< QPoint > xRight double yRight doublebool&removeUnneededLines`/home/mark/engauge_dev/digitizer/src/segment.cppsSegment foldedLinesint*voidsetSettings`/home/mark/engauge_dev/digitizer/src/segment.cppGNSegment&settingsSegmentSettingsvoidshowSegment`/home/mark/engauge_dev/digitizer/src/segment.cppSegment toggleboolsegSegmentSettingsupdateRectList(QValueList< QRect >*void~ Segment`/home/mark/engauge_dev/digitizer/src/segment.cppFKSegment~ SegmentLine`/home/mark/engauge_dev/digitizer/src/segment.cppbdSegmentLine\/home/mark/engauge_dev/digitizer/src/segment.hSegment\/home/mark/engauge_dev/digitizer/src/segment.hASegment\/home/mark/engauge_dev/digitizer/src/segment.hEE#Segment canvasQCanvas*yintappendColumn\/home/mark/engauge_dev/digitizer/src/segment.hI I8SegmentxintyintsegSegmentSettingsvoid*createAcceptablePoint\/home/mark/engauge_dev/digitizer/src/segment.hw x7Segment pFirst bool* pList*QValueList< QPoint >* xPrevdouble* yPrevdouble*x doubley doublevoiddump\/home/mark/engauge_dev/digitizer/src/segment.hb bSegment voidvoidfillPoints\/home/mark/engauge_dev/digitizer/src/segment.h\\6SegmentBsegSegmentSettings(QValueList< QPoint >0fillPointsFillingCorners\/home/mark/engauge_dev/digitizer/src/segment.h{{DSegment segSegmentSettings(QValueList< QPoint >>fillPointsWithoutFillingCorners\/home/mark/engauge_dev/digitizer/src/segment.h||KSegmentsegSegmentSettings(QValueList< QPoint > length\/home/mark/engauge_dev/digitizer/src/segment.hOO,Segmentvoid doublelineCount\/home/mark/engauge_dev/digitizer/src/segment.hPP3Segmentvoidint lines\/home/mark/engauge_dev/digitizer/src/segment.hYYSegmentvoidQCanvasItemList$pointIsCloseToLine\/home/mark/engauge_dev/digitizer/src/segment.h #Segment  xLeft double yLeft doublexInt doubleyInt double xRight double yRight doublebool(pointsAreCloseToLine\/home/mark/engauge_dev/digitizer/src/segment.h #Segment xLeft double yLeft doubleremovedPoints(QValueList< QPoint > xRight double yRight doublebool&removeUnneededLines\/home/mark/engauge_dev/digitizer/src/segment.hV V.SegmentfoldedLinesint*voidsetSettings\/home/mark/engauge_dev/digitizer/src/segment.h_ _.SegmentsettingsSegmentSettingsvoidshowSegment\/home/mark/engauge_dev/digitizer/src/segment.hL LYSegment toggleboolsegSegmentSettingsupdateRectList(QValueList< QRect >*void~ Segment\/home/mark/engauge_dev/digitizer/src/segment.hFFSegment length\/home/mark/engauge_dev/digitizer/src/segment.hOO,Segmentvoid doublelineCount\/home/mark/engauge_dev/digitizer/src/segment.hPP3Segmentvoidint canvas\/home/mark/engauge_dev/digitizer/src/segment.hf fQCanvas*m_length\/home/mark/engauge_dev/digitizer/src/segment.ho o doublem_lines\/home/mark/engauge_dev/digitizer/src/segment.hll!.QPtrList< SegmentLine > yLast\/home/mark/engauge_dev/digitizer/src/segment.hii intSegmentLine\/home/mark/engauge_dev/digitizer/src/segment.h+9QCanvasLineSegmentLine\/home/mark/engauge_dev/digitizer/src/segment.h//2SegmentLine  canvasQCanvas*segmentSegment*rtti\/home/mark/engauge_dev/digitizer/src/segment.h225SegmentLine voidintsegment\/home/mark/engauge_dev/digitizer/src/segment.h440SegmentLinevoidSegment*~ SegmentLine\/home/mark/engauge_dev/digitizer/src/segment.h00SegmentLine rtti\/home/mark/engauge_dev/digitizer/src/segment.h225SegmentLine voidintsegment\/home/mark/engauge_dev/digitizer/src/segment.h440SegmentLinevoidSegment*m_segment\/home/mark/engauge_dev/digitizer/src/segment.h8 8Segment*f/home/mark/engauge_dev/digitizer/src/segmentdlg.cpp SegmentDlgf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppXSegmentDlg.gl titleQStringsettings SegmentSettings*slotFillCornersf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppSegmentDlg checkboolvoidslotLineColorf/home/mark/engauge_dev/digitizer/src/segmentdlg.cpp!SegmentDlgtextconst QString&voidslotLineSizef/home/mark/engauge_dev/digitizer/src/segmentdlg.cppSegmentDlgtextconst QString&voidslotMinPointsf/home/mark/engauge_dev/digitizer/src/segmentdlg.cpp#,SegmentDlgtextconst QString&void&slotPointSeparationf/home/mark/engauge_dev/digitizer/src/segmentdlg.cpp.7SegmentDlg>textconst QString&void"slotUpdatePreviewf/home/mark/engauge_dev/digitizer/src/segmentdlg.cpp9iSegmentDlgvoidslotWhatf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppknSegmentDlgvoidtoggleActionsf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppSegmentDlgvoid validateSettingsf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppSegmentDlg .bool~ SegmentDlgf/home/mark/engauge_dev/digitizer/src/segmentdlg.cppSegmentDlgib/home/mark/engauge_dev/digitizer/src/segmentdlg.hSegmentDlgb/home/mark/engauge_dev/digitizer/src/segmentdlg.h:QDialog SegmentDlgb/home/mark/engauge_dev/digitizer/src/segmentdlg.h@@8SegmentDlg.gl titleQStringsettings SegmentSettings*slotFillCornersb/home/mark/engauge_dev/digitizer/src/segmentdlg.hG G$SegmentDlgu< checkboolvoidslotLineColorb/home/mark/engauge_dev/digitizer/src/segmentdlg.hI I+SegmentDlgstextconst QString&voidslotLineSizeb/home/mark/engauge_dev/digitizer/src/segmentdlg.hH H*SegmentDlgu<textconst QString&voidslotMinPointsb/home/mark/engauge_dev/digitizer/src/segmentdlg.hE E+SegmentDlgtextconst QString&void&slotPointSeparationb/home/mark/engauge_dev/digitizer/src/segmentdlg.hF F1SegmentDlgutextconst QString&void"slotUpdatePreviewb/home/mark/engauge_dev/digitizer/src/segmentdlg.hQ Q SegmentDlgvoidvoidslotWhatb/home/mark/engauge_dev/digitizer/src/segmentdlg.hJ JSegmentDlgivoidvoidtoggleActionsb/home/mark/engauge_dev/digitizer/src/segmentdlg.h[ [SegmentDlgvoidvoidupdatePreviewb/home/mark/engauge_dev/digitizer/src/segmentdlg.hV VSegmentDlgvoidvoid validateSettingsb/home/mark/engauge_dev/digitizer/src/segmentdlg.h^ ^SegmentDlgmvoidbool~ SegmentDlgb/home/mark/engauge_dev/digitizer/src/segmentdlg.hAASegmentDlgbuttonCancelb/home/mark/engauge_dev/digitizer/src/segmentdlg.h~~QPushButton*buttonOkb/home/mark/engauge_dev/digitizer/src/segmentdlg.h}}QPushButton*buttonWhatb/home/mark/engauge_dev/digitizer/src/segmentdlg.hQPushButton* checkFillCornersb/home/mark/engauge_dev/digitizer/src/segmentdlg.hl lQCheckBox*comboLineColorb/home/mark/engauge_dev/digitizer/src/segmentdlg.hr rQComboBox*comboLineSizeb/home/mark/engauge_dev/digitizer/src/segmentdlg.ho oQComboBox*editMinPointsb/home/mark/engauge_dev/digitizer/src/segmentdlg.hd dQLineEdit*&editPointSeparationb/home/mark/engauge_dev/digitizer/src/segmentdlg.hh h"QLineEdit* labelFillCornersb/home/mark/engauge_dev/digitizer/src/segmentdlg.hk kQLabel*labelLineColorb/home/mark/engauge_dev/digitizer/src/segmentdlg.hq qQLabel*labelLineSizeb/home/mark/engauge_dev/digitizer/src/segmentdlg.hn nQLabel*labelMinPointsb/home/mark/engauge_dev/digitizer/src/segmentdlg.hc cQLabel*(labelPointSeparationb/home/mark/engauge_dev/digitizer/src/segmentdlg.hg g QLabel*labelPreviewb/home/mark/engauge_dev/digitizer/src/segmentdlg.hu uQLabel*pointSetb/home/mark/engauge_dev/digitizer/src/segmentdlg.hz zPointSetpreviewCanvasb/home/mark/engauge_dev/digitizer/src/segmentdlg.hv vQCanvas*"previewCanvasViewb/home/mark/engauge_dev/digitizer/src/segmentdlg.hww"QCanvasView*(previewImageOriginalb/home/mark/engauge_dev/digitizer/src/segmentdlg.hx x QImagesegmentsb/home/mark/engauge_dev/digitizer/src/segmentdlg.hy ySegments*settingsb/home/mark/engauge_dev/digitizer/src/segmentdlg.h`` SegmentSettings*$validatorMinPointsb/home/mark/engauge_dev/digitizer/src/segmentdlg.hee%QIntValidator*0validatorPointSeparationb/home/mark/engauge_dev/digitizer/src/segmentdlg.hii+QIntValidator*b/home/mark/engauge_dev/digitizer/src/segments.cppSegmentsb/home/mark/engauge_dev/digitizer/src/segments.cpp=CSegmentspc. canvasQCanvas*adjacentRunsb/home/mark/engauge_dev/digitizer/src/segments.cppL_SegmentsscolumnBool bool* yStartint yStopint heightintintadjacentSegmentb/home/mark/engauge_dev/digitizer/src/segments.cppaiSegmentslastSegmentSegment** yStartint yStopint heightintSegment* adjacentSegmentsb/home/mark/engauge_dev/digitizer/src/segments.cppk~SegmentslastSegmentSegment** yStartint yStopint heightintintdumpb/home/mark/engauge_dev/digitizer/src/segments.cppSegmentsavoidfillPointsb/home/mark/engauge_dev/digitizer/src/segments.cppSegmentssegSegmentSettings(QValueList< QPoint >finishRunb/home/mark/engauge_dev/digitizer/src/segments.cppSegments  lastBool bool*nextBool bool*lastSegmentSegment**currSegmentSegment**xint yStartint yStopint heightintsetSegmentSettingsmadeLinesint*voidloadBoolb/home/mark/engauge_dev/digitizer/src/segments.cppSegmentsu<discretize"const Discretize*columnBool bool* imageQImage*xintvoidloadSegmentb/home/mark/engauge_dev/digitizer/src/segments.cppSegmentscolumnSegmentSegment** heightintvoidmakeSegmentsb/home/mark/engauge_dev/digitizer/src/segments.cpp%Segments imageProcessedQImage&segSegmentSettingsvoid&matchRunsToSegmentsb/home/mark/engauge_dev/digitizer/src/segments.cpp'BSegments xint heightintlastBool bool*lastSegmentSegment**currBool bool*currSegmentSegment**nextBool bool*segSegmentSettingsmadeLinesint*foldedLinesint*shortLinesint*void&removeUnneededLinesb/home/mark/engauge_dev/digitizer/src/segments.cppDfSegmentslastSegmentSegment**currSegmentSegment** heightintfoldedLinesint*shortLinesint*segSegmentSettingsvoidscrollBoolb/home/mark/engauge_dev/digitizer/src/segments.cpphlSegmentsleft bool* right bool* heightintvoidscrollSegmentb/home/mark/engauge_dev/digitizer/src/segments.cppnrSegmentsBleftSegment** rightSegment** heightintvoidsetSettingsb/home/mark/engauge_dev/digitizer/src/segments.cppSegmentsSsettingsSegmentSettingsvoidshowSegmentsb/home/mark/engauge_dev/digitizer/src/segments.cpptSegmentsa toggleboolsegSegmentSettingsupdateRectList(QValueList< QRect >*void~ Segmentsb/home/mark/engauge_dev/digitizer/src/segments.cppEJSegments^/home/mark/engauge_dev/digitizer/src/segments.hSegments^/home/mark/engauge_dev/digitizer/src/segments.h3vSegments^/home/mark/engauge_dev/digitizer/src/segments.h77Segments h. canvasQCanvas*adjacentRuns^/home/mark/engauge_dev/digitizer/src/segments.hOOISegmentscolumnBool bool* yStartint yStopint heightintintadjacentSegment^/home/mark/engauge_dev/digitizer/src/segments.hR RVSegmentslastSegmentSegment** yStartint yStopint heightintSegment* adjacentSegments^/home/mark/engauge_dev/digitizer/src/segments.hUURSegmentslastSegmentSegment** yStartint yStopint heightintintdump^/home/mark/engauge_dev/digitizer/src/segments.hH HSegmentsmvoidvoidfillPoints^/home/mark/engauge_dev/digitizer/src/segments.h;;6Segments(segSegmentSettings(QValueList< QPoint >finishRun^/home/mark/engauge_dev/digitizer/src/segments.hZ \TSegmentsP lastBool bool*nextBool bool*lastSegmentSegment**currSegmentSegment**xint yStartint yStopint heightintsegSegmentSettingsmadeLinesint*voidloadBool^/home/mark/engauge_dev/digitizer/src/segments.h_ _WSegmentsdiscretize"const Discretize*columnBool bool* imageQImage*xintvoidloadSegment^/home/mark/engauge_dev/digitizer/src/segments.hb b9SegmentscolumnSegmentSegment** heightintvoidmakeSegments^/home/mark/engauge_dev/digitizer/src/segments.h? ?BSegmentsimageProcessedQImage&segSegmentSettingsvoid&matchRunsToSegments^/home/mark/engauge_dev/digitizer/src/segments.he g8Segmentsm xint heightintlastBool bool*lastSegmentSegment**currBool bool*currSegmentSegment**nextBool bool*segSegmentSettingsmadeLinesint*foldedLinesint*shortLinesint*void&removeUnneededLines^/home/mark/engauge_dev/digitizer/src/segments.hk l=Segments lastSegmentSegment**currSegmentSegment** heightintfoldedLinesint*shortLinesint*segSegmentSettingsvoidscrollBool^/home/mark/engauge_dev/digitizer/src/segments.ho o8Segmentseleft bool* right bool* heightintvoidscrollSegment^/home/mark/engauge_dev/digitizer/src/segments.hr rCSegmentssleftSegment** rightSegment** heightintvoidsetSettings^/home/mark/engauge_dev/digitizer/src/segments.hE E.SegmentssettingsSegmentSettingsvoidshowSegments^/home/mark/engauge_dev/digitizer/src/segments.hB BZSegments toggleboolsegSegmentSettingsupdateRectList(QValueList< QRect >*void~ Segments^/home/mark/engauge_dev/digitizer/src/segments.h88Segments( canvas^/home/mark/engauge_dev/digitizer/src/segments.hL LQCanvas*segments^/home/mark/engauge_dev/digitizer/src/segments.huu&QPtrList< Segment >h/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlgh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp,SessionsDlgppc sessionsSettings"SessionsSettings*slotAxesh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp SessionsDlg onboolvoidslotCoordinatesh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlg)onboolvoidslotCurvesh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlgonboolvoidslotDiscretizeh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp%(SessionsDlgonboolvoidslotExportingh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp47SessionsDlg \onboolvoidslotGridDisplayh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp/2SessionsDlgonboolvoidslotGridRemovalh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp*-SessionsDlg onboolvoid0slotInitialDigitizeStateh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp>MSessionsDlg stateconst QString&voidslotMeasuresh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp #SessionsDlg onboolvoidslotPointMatchh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlgonboolvoidslotScaleBarh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp SessionsDlg|onboolvoidslotSegmentsh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlg onboolvoidslotSessionsh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlg[onboolvoid$slotViewSelectionsh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cpp9<SessionsDlg onboolvoidslotWhath/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppORSessionsDlg qvoidstateNameh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlgsDigitizeStateconst QStringtoggleActionsh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlgvoid~ SessionsDlgh/home/mark/engauge_dev/digitizer/src/sessionsdlg.cppSessionsDlggldd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hSessionsDlgd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h'dQDialogSessionsDlgd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h--2SessionsDlggldsessionSettings"SessionsSettings*slotAxesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h4 4SessionsDlgu<onboolvoidslotCoordinatesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h3 3!SessionsDlgonboolvoidslotCurvesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h6 6SessionsDlgonboolvoidslotDiscretized/home/mark/engauge_dev/digitizer/src/sessionsdlg.h: : SessionsDlg‚onboolvoidslotExportingd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h= =SessionsDlgonboolvoidslotGridDisplayd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h< <!SessionsDlgonboolvoidslotGridRemovald/home/mark/engauge_dev/digitizer/src/sessionsdlg.h; ;!SessionsDlgonboolvoid0slotInitialDigitizeStated/home/mark/engauge_dev/digitizer/src/sessionsdlg.h? ?7SessionsDlg stateconst QString&voidslotMeasuresd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h9 9SessionsDlgonboolvoidslotPointMatchd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h8 8 SessionsDlgonboolvoidslotScaleBard/home/mark/engauge_dev/digitizer/src/sessionsdlg.h5 5SessionsDlg onboolvoidslotSegmentsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h7 7SessionsDlgu<onboolvoidslotSessionsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h2 2SessionsDlgonboolvoid$slotViewSelectionsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h> >$SessionsDlgonboolvoidslotWhatd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h@ @SessionsDlgu<voidvoidstateNamed/home/mark/engauge_dev/digitizer/src/sessionsdlg.hHH,SessionsDlgsDigitizeStateconst QStringtoggleActionsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hE ESessionsDlg vvoidvoid~ SessionsDlgd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h..SessionsDlgbuttonCanceld/home/mark/engauge_dev/digitizer/src/sessionsdlg.hbbQPushButton*buttonOkd/home/mark/engauge_dev/digitizer/src/sessionsdlg.haaQPushButton*buttonWhatd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hccQPushButton*checkAxesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hM MQCheckBox* checkCoordinatesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hL LQCheckBox*checkCurvesd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hO OQCheckBox*checkDiscretized/home/mark/engauge_dev/digitizer/src/sessionsdlg.hS SQCheckBox*checkExportingd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hV VQCheckBox* checkGridDisplayd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hU UQCheckBox* checkGridRemovald/home/mark/engauge_dev/digitizer/src/sessionsdlg.hT TQCheckBox*checkMeasuresd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hR RQCheckBox*checkPointMatchd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hQ QQCheckBox*checkScaleBard/home/mark/engauge_dev/digitizer/src/sessionsdlg.hN NQCheckBox*checkSegmentsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hP PQCheckBox*checkSessionsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hK KQCheckBox*&checkViewSelectionsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.hW W"QCheckBox*.cmbInitialDigitizeStated/home/mark/engauge_dev/digitizer/src/sessionsdlg.h[ [&QComboBox*.lblInitialDigitizeStated/home/mark/engauge_dev/digitizer/src/sessionsdlg.hZ Z#QLabel*$m_sessionsSettingsd/home/mark/engauge_dev/digitizer/src/sessionsdlg.h^^("SessionsSettings*d/home/mark/engauge_dev/digitizer/src/transform.cppTransformd/home/mark/engauge_dev/digitizer/src/transform.cpp&2Transformc.mdocDigitDoc*4adjust_midvalued_log_coordd/home/mark/engauge_dev/digitizer/src/transform.cpp9NTransform scale Scalec0double*c1double*c2double*void6adjust_midvalued_log_coordsd/home/mark/engauge_dev/digitizer/src/transform.cppP\Transform coordCoordSettingsr_graph[][] doublevoid2computeAxesTransformationd/home/mark/engauge_dev/digitizer/src/transform.cppTransformu< coordCoordSettingspointSetconst PointSet*void,computeLogToFromLineard/home/mark/engauge_dev/digitizer/src/transform.cpp^hTransform  coordCoordSettingsr_graph[][] double.Transform::LogLinReturn,computeLogToFromLineard/home/mark/engauge_dev/digitizer/src/transform.cppjTransform scale Scaler[] doubleadouble*bdouble*.Transform::LogLinReturn4computeScaleTransformationd/home/mark/engauge_dev/digitizer/src/transform.cppYTransform  coordCoordSettingspointSetconst PointSet*voiddumpd/home/mark/engauge_dev/digitizer/src/transform.cppTransformPvoidgraphToScreend/home/mark/engauge_dev/digitizer/src/transform.cppTransformu< xGraph double yGraph doublexScreendouble*yScreendouble*voidlinearToLogd/home/mark/engauge_dev/digitizer/src/transform.cppTransform؈ coordCoordSettings xThetadouble*yRdouble*voidlogToLineard/home/mark/engauge_dev/digitizer/src/transform.cppTransform coordCoordSettings xThetadouble*yRdouble*voidscreenToGraphd/home/mark/engauge_dev/digitizer/src/transform.cppTransformxScreenintyScreenint xGraphdouble* yGraphdouble*void screenToXThetaYRd/home/mark/engauge_dev/digitizer/src/transform.cppyTransform coordCoordSettingsxScreenintyScreenint xThetadouble*yRdouble*voidxBasisScreend/home/mark/engauge_dev/digitizer/src/transform.cppTransformJ coordCoordSettingsxScreendouble*yScreendouble*void xThetaYRToScreend/home/mark/engauge_dev/digitizer/src/transform.cpp[bTransform coordCoordSettings xTheta doubleyR doublexScreenint*yScreenint*void xThetaYRToScreend/home/mark/engauge_dev/digitizer/src/transform.cppdwTransform coordCoordSettings xTheta doubleyR doublexScreendouble*yScreendouble*voidyBasisScreend/home/mark/engauge_dev/digitizer/src/transform.cppTransformO coordCoordSettingsxScreendouble*yScreendouble*void~ Transformd/home/mark/engauge_dev/digitizer/src/transform.cpp47Transform `/home/mark/engauge_dev/digitizer/src/transform.hTransform`/home/mark/engauge_dev/digitizer/src/transform.h)QObjectTransform`/home/mark/engauge_dev/digitizer/src/transform.h//Transformh.mdocDigitDoc*4adjust_midvalued_log_coord`/home/mark/engauge_dev/digitizer/src/transform.h; ;TTransform scale Scalec0double*c1double*c2double*void6adjust_midvalued_log_coords`/home/mark/engauge_dev/digitizer/src/transform.h< <QTransform  coordCoordSettingsr_graph[][] doublevoidaxisPointCount`/home/mark/engauge_dev/digitizer/src/transform.h339Transformvoidint2computeAxesTransformation`/home/mark/engauge_dev/digitizer/src/transform.h7 7QTransform| coordCoordSettingspointSetconst PointSet*void,computeLogToFromLinear`/home/mark/engauge_dev/digitizer/src/transform.h^^_Transform coordCoordSettingsr_graph[][] double.Transform::LogLinReturn,computeLogToFromLinear`/home/mark/engauge_dev/digitizer/src/transform.h__cTransform scale Scaler[] doubleadouble*bdouble*.Transform::LogLinReturn4computeScaleTransformation`/home/mark/engauge_dev/digitizer/src/transform.h8 8RTransform coordCoordSettingspointSetconst PointSet*voiddump`/home/mark/engauge_dev/digitizer/src/transform.hP PTransformvoidvoidgraphToScreen`/home/mark/engauge_dev/digitizer/src/transform.hb b\Transform  xGraph double yGraph doublexScreendouble*yScreendouble*voidlinearToLog`/home/mark/engauge_dev/digitizer/src/transform.hf fKTransformu< coordCoordSettings xThetadouble*yRdouble*voidlogToLinear`/home/mark/engauge_dev/digitizer/src/transform.hg gKTransformu< coordCoordSettings xThetadouble*yRdouble*voidscalePointCount`/home/mark/engauge_dev/digitizer/src/transform.h44;TransformvoidintscreenToGraph`/home/mark/engauge_dev/digitizer/src/transform.hc cVTransform xScreenintyScreenint xGraphdouble* yGraphdouble*void screenToXThetaYR`/home/mark/engauge_dev/digitizer/src/transform.hH I'Transform  coordCoordSettingsxScreenintyScreenint xThetadouble*yRdouble*voidvalidAxes`/home/mark/engauge_dev/digitizer/src/transform.h??6Transform voidboolvalidScale`/home/mark/engauge_dev/digitizer/src/transform.h@@8Transform voidboolxBasisScreen`/home/mark/engauge_dev/digitizer/src/transform.hL LRTransform  coordCoordSettingsxScreendouble*yScreendouble*void xThetaYRToScreen`/home/mark/engauge_dev/digitizer/src/transform.hD E'Transform  coordCoordSettings xTheta doubleyR doublexScreenint*yScreenint*void xThetaYRToScreen`/home/mark/engauge_dev/digitizer/src/transform.hF G-Transform  coordCoordSettings xTheta doubleyR doublexScreendouble*yScreendouble*voidyBasisScreen`/home/mark/engauge_dev/digitizer/src/transform.hM MRTransform  coordCoordSettingsxScreendouble*yScreendouble*void~ Transform`/home/mark/engauge_dev/digitizer/src/transform.h00TransformdaxisPointCount`/home/mark/engauge_dev/digitizer/src/transform.h339TransformvoidintscalePointCount`/home/mark/engauge_dev/digitizer/src/transform.h44;TransformvoidintvalidAxes`/home/mark/engauge_dev/digitizer/src/transform.h??6Transform voidboolvalidScale`/home/mark/engauge_dev/digitizer/src/transform.h@@8Transform voidbool4L2L_NONPOSITIVE_COORDINATE`/home/mark/engauge_dev/digitizer/src/transform.hYY intL2L_NO_SPREAD`/home/mark/engauge_dev/digitizer/src/transform.hZZintL2L_SUCCESS`/home/mark/engauge_dev/digitizer/src/transform.hXXintdoc`/home/mark/engauge_dev/digitizer/src/transform.hT TDigitDoc*m_aX`/home/mark/engauge_dev/digitizer/src/transform.h  doublem_aY`/home/mark/engauge_dev/digitizer/src/transform.h double m_axisPointCount`/home/mark/engauge_dev/digitizer/src/transform.hjjintm_bX`/home/mark/engauge_dev/digitizer/src/transform.h  doublem_bY`/home/mark/engauge_dev/digitizer/src/transform.h doublem_graphToScreen`/home/mark/engauge_dev/digitizer/src/transform.hw w" double"m_scalePointCount`/home/mark/engauge_dev/digitizer/src/transform.hkkintm_screenToGraph`/home/mark/engauge_dev/digitizer/src/transform.ht t" doublem_validAxes`/home/mark/engauge_dev/digitizer/src/transform.hp pboolm_validScale`/home/mark/engauge_dev/digitizer/src/transform.hq qbool`/home/mark/engauge_dev/digitizer/src/zoomcmb.cppZoomCmb`/home/mark/engauge_dev/digitizer/src/zoomcmb.cpp,@ZoomCmbppc parentQWidget*keyPressEvent`/home/mark/engauge_dev/digitizer/src/zoomcmb.cppcjZoomCmbeQKeyEvent*voidsetZoom`/home/mark/engauge_dev/digitizer/src/zoomcmb.cppGaZoomCmbzoomintvoid~ ZoomCmb`/home/mark/engauge_dev/digitizer/src/zoomcmb.cppBEZoomCmbzoomDefaults`/home/mark/engauge_dev/digitizer/src/zoomcmb.cpp* *Jint\/home/mark/engauge_dev/digitizer/src/zoomcmb.hZoomCmb\/home/mark/engauge_dev/digitizer/src/zoomcmb.h';QComboBoxZoomCmb\/home/mark/engauge_dev/digitizer/src/zoomcmb.h--ZoomCmb parentQWidget*keyPressEvent\/home/mark/engauge_dev/digitizer/src/zoomcmb.h77,ZoomCmbeQKeyEvent*voidsetZoom\/home/mark/engauge_dev/digitizer/src/zoomcmb.h2 2ZoomCmbzintvoid~ ZoomCmb\/home/mark/engauge_dev/digitizer/src/zoomcmb.h..ZoomCmbivalidator\/home/mark/engauge_dev/digitizer/src/zoomcmb.h99"QRegExpValidator*engauge-digitizer-5.2/digitizer.kdevses000066400000000000000000000014751222557406400203610ustar00rootroot00000000000000 engauge-digitizer-5.2/digitizer.pro000066400000000000000000000071771222557406400175220ustar00rootroot00000000000000# Use this file to build Engauge Digitizer from source code, # according to the instructions in the INSTALL file. For # hints on modifying this file, examine the .qmake.cache # in the qt installation directory TEMPLATE = app CONFIG = qt warn_on thread debug OBJECTS_DIR = src/.objs unix { # hints for LIBS entry: # 1) to fix solaris-g++ link errors, try appending "-lSM -lICE -ldl" # 2) to fix ugly fonts and blocky widgets, try appending "-lfreetype -lXft -lrt" LIBS += -lfftw3 } macx { DEFINES += Q_OS_MACX LIBS = -framework CoreFoundation -lfftw3 QMAKE_CXXFLAGS_DEBUG += -Wno-non-virtual-dtor QMAKE_CXXFLAGS_RELEASE += -Wno-non-virtual-dtor } win32 { DEFINES += WIN32 INCLUDEPATH = $$(FFTW_HOME)/include LIBS += -L$$(FFTW_HOME)/lib -lfftw3 OBJECTS_DIR = src/.objs } HEADERS = src/axispointdlg.h \ src/clipboard.h \ src/colorchooser.h \ src/coordsysdlg.h \ src/curvecmb.h \ src/defaultsettings.h \ src/digitdebug.h \ src/digitdef.h \ src/digitdoc.h \ src/digitmain.h \ src/digittool.h \ src/digitview.h \ src/discretize.h \ src/discretizedlg.h \ src/exportdlg.h \ src/geometrydlg.h \ src/geometrywindowitem.h \ src/grid.h \ src/gridmesh.h \ src/gridmeshdlg.h \ src/gridremoval.h \ src/gridremovaldlg.h \ src/helpwindow.h \ src/highlight.h \ src/main.h \ src/match.h \ src/matchset.h \ src/measurecmb.h \ src/mmsubs.h \ src/mrudocuments.h \ src/osxsubs.h \ src/point.h \ src/pointmatch.h \ src/pointmatchdlg.h \ src/pointmatchthread.h \ src/pointset.h \ src/pointsetdlg.h \ src/pointsets.h \ src/pointsetnamedlg.h \ src/pointsetsdlg.h \ src/pointsetstyles.h \ src/scalebardlg.h \ src/scanforaxes.h \ src/segment.h \ src/segmentdlg.h \ src/segments.h \ src/sessionsdlg.h \ src/transform.h \ src/zoomcmb.h SOURCES = src/axispointdlg.cpp \ src/clipboard.cpp \ src/colorchooser.cpp \ src/coordsysdlg.cpp \ src/curvecmb.cpp \ src/defaultsettings.cpp \ src/digitdebug.cpp \ src/digitdef.cpp \ src/digitdoc.cpp \ src/digitmain.cpp \ src/digittool.cpp \ src/digitview.cpp \ src/discretize.cpp \ src/discretizedlg.cpp \ src/exportdlg.cpp \ src/geometrydlg.cpp \ src/geometrywindowitem.cpp \ src/grid.cpp \ src/gridmesh.cpp \ src/gridmeshdlg.cpp \ src/gridremoval.cpp \ src/gridremovaldlg.cpp \ src/helpwindow.cpp \ src/highlight.cpp \ src/main.cpp \ src/match.cpp \ src/matchset.cpp \ src/measurecmb.cpp \ src/mmsubs.cpp \ src/mrudocuments.cpp \ src/osxsubs.cpp \ src/point.cpp \ src/pointmatch.cpp \ src/pointmatchdlg.cpp \ src/pointmatchthread.cpp \ src/pointset.cpp \ src/pointsetdlg.cpp \ src/pointsetnamedlg.cpp \ src/pointsets.cpp \ src/pointsetsdlg.cpp \ src/pointsetstyles.cpp \ src/scalebardlg.cpp \ src/scanforaxes.cpp \ src/segment.cpp \ src/segmentdlg.cpp \ src/segments.cpp \ src/sessionsdlg.cpp \ src/transform.cpp \ src/zoomcmb.cpp TARGET = bin/engauge # pt_br is portugese brazilian # tr is turkish TRANSLATIONS = engauge_pt_br.ts \ engauge_tr.ts MOC_DIR = src/.moc #qt3support was inserted by qt3to4. qt3support in turn requires network QT += qt3support network engauge-digitizer-5.2/doc/000077500000000000000000000000001222557406400155375ustar00rootroot00000000000000engauge-digitizer-5.2/doc/developers/000077500000000000000000000000001222557406400177075ustar00rootroot00000000000000engauge-digitizer-5.2/doc/developers/README000066400000000000000000000022771222557406400205770ustar00rootroot00000000000000Introduction ------------ If you are a user, you will find nothing of interest in this directory so you should instead be looking at the usermanual directory. This directory contains documentation for any developers working on the Engauge Digitizer open source software project. None of this documentation will be useful for users! However, nondevelopers are welcome to examine any of these files. Here are the files, with comments: classdiagram.dia - Dia document file used to produce classdiagram.jpg classdiagram.jpg - Diagram of C++ classes selectionstate.dia - Dia document file used to produce selectionstate.jpg selectionstate.jpg - State transition diagram involving "selection" and "no selection" states selectstate.dia - Dia document file used to produce selectstate.jpg selectstate.jpg - State transition diagram involving "none", "move" and "area select" states usecases.txt - Deprecated file originally used to Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/doc/developers/REGRESSION_TESTS000066400000000000000000000061611222557406400223000ustar00rootroot00000000000000test procedure: startup and shutdown ------------------------------------ initial status: testing has not yet started steps: -start Engauge Digitizer -exit Engauge Digitizer -restart Engauge Digitizer test procedure: axis point mode on linear-linear graph ------------------------------------------------------ initial status: Engauge is running without any documents steps: -import samples/inverse.jpg -(axis point mode) digitize three axis points -move cursor around -verify correct coordinates in status bar -(segment fill mode) click on left side of curve to add points -(segment fill mode) click on right side of curve to add points -enable View/Curve Geometry Info window -check for reasonable numbers -disable View/Curve Geometry Info window and immediately reenable it -verify window disappeared and reappeared correctly -enable View/Gridlines Display -check for reasonable gridlines -disable View/Gridlines Display and immediately reenable it -verify gridlines disappeared and reappeared correctly -leave this window open test procedure: axis point mode on linear-log graph --------------------------------------------------- initial status: Engauge is running with a single window containing "inverse" steps: -import samples/linlog.jpg -select log scale for vertical axis using Settings/Coordinates/Y-R/Log -(axis point mode) digitize three axis points, but NOT three points at right angles. Instead, digitize points (3, 1), (1, 10) and (3, 10) -move cursor around and verify correct coordinates in status bar -click on "inverse" window and then the "linlog" window -verify the View/Curve Geometry Info window contents changed appropriately test procedure: windows ----------------------- initial status: Engauge is running with two windows containing "inverse" and "linlog" with "linlog" currently active steps: -select Window/New Window -verify there are now two "linlog" entries on the Window menu -select Window/Cascade -verify there are three cascaded windows -select Window/Tile -verify there are three tiled windows -click on the X of one of the two "linlog" windows -verify there are now just two windows with "inverse" and "linlog" test procedure: help -------------------- initial status: Engauge is running with at least one document open steps: -select Help/About Engauge -verify About window has reasonable version number -close About window -select Help/User Manual -verify that a browser window appeared showing help topics -click on some of the help topics -verify the browser follows links correctly -close the Help browser -select Help/Graph Tutorial -verify that a browser window appeared showing the graph tutorial -close the graph tutorial browser -select Help/Map Tutorial -verify that a browser window appeared showing the map tutorial -close the map tutorial browser -select Help/What's This and then a document window -verify the cursor changed appropriately, and popup help appeared -repeat Help/What's This for each button on the Toolbar -repeat Help/What's This for the Status Bar engauge-digitizer-5.2/doc/developers/classdiagram.dia000066400000000000000000000143101222557406400230170ustar00rootroot00000000000000msǑS誼G3=A#ʾرTjI(܁3 .;;VJ6f==owj=[. Ə|x~_78.VQ:>z~vg߿gb\욭g_ų 7GG^f^oʣEqY>?>-b^R[|:zW̟2\WU˫zD64\':-.^|~I'n mT,VC=o1GD7*NWʯb~}\mVlPr9/Ei.Yi3Efu?}Wjv޾H4\|oޮ2]l=;b3?$^>s]+݊=e}OsRy\m/[t}wayfk_Xo]mpwߛք+;σ7jC$ż49}~MzNOY+żUnTSə$̘yylZ_W@_ͧϫ鹍"vM$>,jnIK?gE7KwfvVi9?O$KUwު9s|h}v~NힵCݪ]pS^^͋M>}sݔDP$s!ܒ&˅L*%cS|B1!|f..\hWzl\r\_/Bp!\. ) =Bjw.t̛ E \8]2( C!d2 GM2 y!0 I1):cg72$Fߗr2 A C!pdR2ŭθ\K -zLPT6Ԅgeá,Hccß;KAp8QáNbIE3q%%x[u:f.!)mlN>.wcW󿔗ˠJ%ADP)$o.k&7QbTƷ,ޔ—Z+22YeFfC!p8 6`Jy{ b&V[@$Ǽ LìR^\ l1C!|8n>tCň 3jo)gP1kMXV~[~&&gOg"|o~rXj%mu!~<q]rzI! Չ 2._7 wSiJrv٭ _.fW3w!CxxɭfNZ;9LUmU)6=w6s%0vv0EZX, B`x0)}@3˭pSϗR]״gzw1b~q~9\1^R/}y=̮泳C&ޥ]-7w>'({T~05'Utx?2&.J9 ɭ'ݝ|b-_(hwdr IBR=@KꃄQCRTtj=$m4Y234v#$<$MnD[0GGGG,45O&7#̈́t4hQMh*EL M,m7B]@dힲMq+##FGbڃ9q LJde9MMq}2[ded;ZI >hC*K1IOD@jsUNdz,m͢;uIKKRi;!!!>=xGarO2a R ~5a͢b`wZ#(????&7.اuj$`D2Sᘨ4[f\nhFj^$i]ޕ˲X_&e}}erO訄Q9[Y0"ĊdTm+_6""BKc_,~+דY [8K8ˌβi-] Bi)D`^xq+ebNn?mV+++,7\Wl?k!rWl@z8V}#[D=Y{j+_ߴRvr>s8q3h y[o#Ft^MF6:fE'2Sd?Dar+@Si$g 'N[-gzLgF&z&Le@wȺDp@@d}(W|F HsdJNv+]U;͸"2S-q^)Q 6JدO+B#M6@| =,_BD6?$̸bFym{PQf:Aw{@| Cb oGBkmR~2DEjuزqCf뿝ӨG:FjnE6qk&d-<6_3Z/fEK8WsvDڳح0̛Ek2QֳXҲh<f,hOX.q% )9+mEUK%(gך!5U  WsCBP<+vH*rkX-8)B8)B8)B8)ItQF0TD2nàtCp#Qr< `0 C0Lzz%(xF估SyQ^ج`8]PcBc#_ T* AqSarS!Cv\y0*JLhi"H8]3(s?Bp!\. wWva.%v:&uTdcتQW֛;!7(^7`r=E5/6T&_}Fjd~?/Ѥu\~<2-f&iՓh+M\׿zhֿ8Bk׿N=8p8 c0 0|,v]}Qvz 7zxK%'8p 'wWLB >8h"D0EN22nYT2GVJ!ILXCx^H Ms}"IoEƱ8Pێ0K1b"b~]0[(GD9"Qr}n-^_T7b~sswyQy^A>>`46MؾXgjbgE:άU-*]}oQɤ:鍬uZEo5ſ&w-qUTSmBPD;A=7]_ˤPD#FchFqUh:%=3㜜RmuÎvzfɹ n2Yl|6K(ܻNyhr;UQcW^;q|'Iș2N>gKot5Pr?{U۝Yɬu &dCH~I;ɠk;Yb+/Ꙧ"ʪnHO1*n9_wlg 1/:6x`^  VgpZic]^, xIicU뭹 !Li1ֲ䠑F9h䠑FKA'RLl\Q^49X^S5w+AN2=rKC"dv>(q# \ANtGUj$6 NfQŔtwC4U3,/.Gd"Iܾ$xDI#͙dsJ%<Ϲ L_ bf+I <,Or4 UTREH!UTRE_B( QNdr"}е"M$DQ=moݚ4,꙰;%]2I~f<|+wf[MGՏŇrAs*._|oqg4xengauge-digitizer-5.2/doc/developers/classdiagram.jpg000077500000000000000000006714561222557406400230710ustar00rootroot00000000000000JFIFHHCreated with The GIMPCC7"       XY9VWx8:Zy!&67SUivw$%'"#(5Atu)14EQRFGHIJfgh3CDTaeq*2B ?ik$x.(N{-dtWctkAX-{%p>mAHcTt],XX\uhK,"}cK,"}cŋ/)euȷ_Xŋ/)euȷ_X7tbY`r-0tbY`r-0 ,XX\u,XX\uhK,"}cK,"}cŋ/)euȷ_Xŋ/)euȷ_X7tbY`r-0tbY`r-0 ,XX\u,XX\uhK,"}cV6:v=/GTIƺx1t-dۭڂک '4n4n[fs7GZuVF=xzJ*u-2ڕU F oc}-knݿ[#;/&u7_W#N NMa<0 !h\(MIyHXDI;#l6M0) @$򁍍Yy4Yy44w^M;onCw^M;onF ŗN:ۯŗN:ۯ@:'qeӰ:'qeӰoYy4Yy44w^M;onCw^M;onF ŗN:ۯŗN:ۯ@:'qeӰ:'qeӰoYy4&cgx8Ar}]8Y5c8+kخ h 6 4;N{a7ǷZrAu-9gJ(jz頸i9Mbj4FOg9.9>T]>֏ΐ˝gN֋[jp&#O[i֪(+.,$}A*LBud.uɏ&iEûs6aQ%Z 5vU 8r4#Y-}V˨_l- FkwpTdۃ}H "m::Nr}vC,Wb a-EeY8UXo4 hl4WӸ_sGS`2/l̒EgXy R$r@]*.rJQM8⊪]sdJ(*i8IVJX<]!u ,9y_kKww( E6e:eq2PU7+.%Y.NqeR4L2r|Z=5wmBa }pΦ*tyQZNb5K$ӑgQ%':15t$K&w"F9:s{VQMuW~R-^JMHKvP YI1.D0ZbM.uH)"Y:=wo9:e)ZGojGZ`]9ew[ky͛/+Mf ec>EO箁ml:S"2g\+9-Ƈ+KIJ~uodģO V,cDRl,+u.ԩ$'*r6" .|ųXi~1Cٺ`q"Lu?q^$4qCF`jJ\nlފ ~זٽ*lOuFXC{Ld@cOK+5[ /dw+6o ;-i#%,ɪ'$O.eH0&xJkFхg7﹭ɅYD Sjiɋҭg|e'1e!쾘}6WoIqB7;\5KpL1uf\.$UY:$]$qof:TvuHc m*5jE =s:P2>3w^[fP 5m+!nm異IxX}}\5ĜQm3$ȓQ G&3gVV*-DZkh7=m荳b2~깩^@o-:hq[qJWEId:?*uӍM8lEuU1J\nlފ ~זٽ7 /f;wAnCg:s.))Jrq8]qqU8A@c7Z ^i2$ZstPٵJn"HH3ݦf) *|nMҁ/7._7uoE N،eIsRݠGcQgKQ9).M5G)%FkrRʃMM!u P1K,[aeuk?<LQA"z(^Mk|ƺѝӉmA0MmSf*Uwkr- :{_q]6[M4])Ҧuߦ͚kt$/y*/&jOMm|˖u>oR\!ׄО˙YMtf!ŵ#iZ`_i_mDۻ~H@)/q]'*0#,?psґX(v*]eD2ߋd[͋&Ɏ?2ʧRA)n)dJ=79mܠ#,?psґܓ.gu~}06!IZӯpYLԧ4$Ǭ"Z}}Fj J&(EJyfuo*=e}\Vo ihvbM"Xvr I(Nj667˝*7@xG*us}MJc6!ґH\\mf[rr9ztc<0?o-dzQy ,"{exVVG`%u&1,B^:vsK{sVdܣid~)F2[%Yv<^.ŔUn'Xp$[I*,*ThVЄ=)akm`f}Νڬh5\f!AZi!u{:ٍk[ F{B҉tP/z}B \UAns??2R\jRKeʍTQ䥃͕ iy Bc)NYJ=X$֌<'y?R''ߑ|3:[ԛ `{yOWC8c_űIn8w='d-F+2&j4vwB'Kô4xUO&OhS餋tVJ=_<3E_g@ WFm:Uy`ο$mv:<3E_g@ WFm:Uy`ο$mv:<3E_g@ WFm:Uy`ο$mv:<3E_g@ WFm:Uy`ο$mv:<3E_g@ WFm:Uy`ο$mv:<3E_g@ WFm:Uy`ο$mv:<3E_g]J,2ӎrme(e˱veZj]UYHf΢BdLXiɴʊfI6'! bkA0E ?+p2.myQO%ϪEv2bɔ];$XRY&x[3c':7y`9o~o=qNU7ls%c#yx`+q^6R,,q_o #^qϤD_?(-OuWws/vi8~ϧ>lz8] gqXp uÊ+* ((2xkի8~Z𳂽b={LBB+j1YBg$o[Z}ļܓYz 6^m }>?{/x,rGך,泘m#d柙F9泓ӛ-7+r799'g(Njew``GGZ\\X grnǛ،BLGZ]}diZ-gs-Iod -oɠmtH˰r!LY(")xTɋn~Ū7 Ċ6TwkEFzċcp?#f)w4HEQa'4ZqiB:b_G+/ڱ]K`0sNgHRjm]}żi$0mTRi)ۓM:Բ2u"}O )8lzsֺm0hR:JfUNg&2*++k3vw1|Xf[R>s8ceE߮Sgs$1@Un(jl;їaadb[K.ڭ6s9jڭ͖y4 A2ihdʧ%,DjRNG[)#[MIt~’*d7}bB:u*4][~t9٭5$wadD(ޠ(q'>(:ckfx-[\ spmWv:6+(QrhgC+*5L!{W^x7Wh<$/y*/&jOM}b v!P2co+-twgos")KOE)[TIudε(3MİqlS^tNɧ`M4RM/"p4-!--!+5Y9\s)YEyLYb$[i2R@ŝ9qс q';<泾c#Fo{~{v{9'4ː܍/ꗙSs9q(yEe,8Nu CB[[UAnpt?UR4emU'Qse BY(NFJ#XQ<'y?R''ߑ|3:[ԛ `{yOWC8c_űIn8p|uda?09+Juxω Kjrygq;epܥ1#)-ީ}]M]o辌uCNݨ7̀ @_gà/j3s`/F ڌ}# Fl:v?H6Cw$?Z q݇qjm2L'ɽW%DeZof:*g܉*S+S43v`nսز)"HMp2ѝOoY9ẍ́퇴jKQXzYc:[&MTN6zd}s7.<+)-l~`/Tǹ:GmP:C׆lh2W_Iz_ .YK |]$><|*H}e. (_Iz_ .YK |]$><|*H}e. (_Iz_ .YK |]$><|*H}e. (_Iz_ .YK |]$><|*H}e. (_Iz_ .YK |]$><|*H}e. (_Iz_ .YK |]$><|*H}e. ( unf,7irP4$lKqkE^SWQғz즆:ڍ J])^*;"K"d{w(RJ6(J/CnwoW~T麥MoMwoݻvbϱv%BOFķYꬵ9fuN:)1'o^hj[j#I@tUbݵҩH\dv'L'~iѣM*Tabd6WvwOnTݺtv۷kKĭd̵>'HOW[$&dn5VJ 9HgUL OQ,J=A \Yycq]>uMTSaJO6UiZ_qTeZmmd\/Be'݇YC۰Up (u;v !en<\/Be'݇YC۰Up (u;v !en<\/Be'݇YC۰Up (u;v !en<\/Be'݇YC۰Up (u;v !en<\/Be'݇YC۰Up (u;v !en<\/Be'݉|&1.UįĪ}@ +K| XzY.-P$sU P`JզpFQx*_:O?8Mc~]{_UV&i@'\[*9]Ho/X: WL]ԍPW`w<@a~!wsV8H$Hgɖ/$ʺ8S]meMޞKI/&!/nDUJP@OWO+_r|Ey$ -\عv6܄7!SwGTi-Սn/-r+^'镯nPDpr ʌ"$WzcTyB^/g,6+!^8l9U5t  :[}StaGFӐ{1h){ɣ#Qp.m8Qө +ifʩ$,%4@sV/ZM9?@|} ~O:}?q_?G'=>OW\xw_M{\;fC Z:ۊqҒK=] AYmmPJ<TWݳi4Wm?|} ~O:}?q_?G'=>OW O+U*VѣFj6tR]*Tef{6ikݻtvtMu K{Ɍ2j5HOk1ul!mg Mۢ=Sڼt= ԮR4GD2کuV1Ldwɭ싿vl!g[_m+c-%1iWUƫNpuIp2_@YbC?:Vyؐο+v$:C:g@YbC?:Vyؐο+v$:C:g7}ǽa9h_3{A76]w^ϹtYӜ^dhhgSr9}J+wW_C:g@YbC?:Vyؐο+v$:C:g@YbC?:Vyؐο+v$`{vV_+5EU|{߉+]lVCK\4j)T(Baю;OR>es%C #$CYR1LU5hSݻݶSWM72Xϭϗq=,iG7Zͳ͛EV^n^EXK/Zu-WEeB =aY5シ(Q?ND[G\ /kp6- _N"*peNNݖ—إ]HKd$3;5xxc_Jş^&^|7ٶ)BaAp͸&6Z{y3=ݍ;).[Ll&8݈J0 ˪M^ܫ1'e^2΃ZndvTU]lVɒ*hTS̩9 8S<(0ъcدwT\= #|qlTóH8ђqu5s &Z?ydf:Ki7 E^"a5X6HR]^m1MϻgU!DNռ{ \:&A8 sƜچgc.}M2h7f[AZҋؠ^ Ҍ[11\k۫Y32!5dyZMžV&ˉrR@vTT XyxMhln²6:<L)d5L9CR\Wd$~Rv;x +ňIJkSΝ@_&^:]xJ:Vds4\Au6VB(j)ndRg9 WԨe[}WKsN<LVr.@߻nqqJE}K%[ZN:ɲ}q eI;I~I@Nƚ]SRrfK:'PFu1\Er,9mn77bt8 *tRo,&DkGQj-[q[& L {\|K\`MYޜe$ KħΟ><\qΟ(a_8\ep9[i2?M\aC#`avFS*J; :Uc[W;qJgpѤ̂NVl#er1ZI"Afutco8Ź#~\1t]x2L' Sh^QH\\[%PJuB. UW[¸\0c+iY]Ou8V B0(Mƛ]} 2].`neQ4N; 8,'G i+l J7JNVttb.,)6|2ubUM;&4۩b'Yޟ0g(7[0v qՒrU3p$2$^!n?#Z$zǭ+zGFe].5xRT519TbɹXs$uWq'IԮD\p5Bz{jߦڔM5MtE]UwqEjo&2gиּLhyL$4tPpQnJI _GipG uKShtXVw48W ,^'9NJ!n?3En?3E8TL?_^~C W:<&cʞQuwv駠 &R2Os [j4Ho+|Jq'/':wsƼr[ny3ܝ|;yAHa\m63` EHy"@Riۊdk-ucab8ú[ @xorE$XܸM cOi=mrnXIPN[u\I 'mفM8YDx7Y4*JcYDfJA|Lw|&{;^|{nTNWQV\w2=:. r˗NCfnp X 5RD#e8`tRg(a:$#l./$%-&2So3\6aؠ<ݲ;V[T9M- :zv="\M85okf\?0i %BUE44.UBΦxs0KL+j[-Ոѣ)EKuLtM85o'87/rsfpwmC82^s?6_CeÚg]Տ mIHM~z29uJD۟&)hCK&9r.ʊ{NGY eEGbiNy4Z=$83kFM,ʂ3 v9T9(7s#qY,E1zr!F˝ t=̶FٱIZ?u\ԯ 7H4xlj8g$Ʋ:iPQSd"ۻxmW=-n)[|+<\΄e `yg Y4zm4ʹ*5FFުjS\drcSO #Al>E U,n}G* |6ѣ RJ`Dm'29Ο(-wt`[w3=6汃|'2巛,@^ﻻ_䳾-"ň)B\0FN3̋ċ ՞"w4ԕPHUBSk܎3B /vQԠŷ; 4TgBS*:ZTR9Wb65u4K& N.FTIҭ=%peMhYnFyB,gdZ=q' [~'keX\ m:k?evtޥf2``!_&n,* Fhqk휎b8]b]9Rwb\̈7\oƻVvԞŸ˻*KgMsSUQȹϧb t%IJ%N0FSR&8 O~w1|'RljE߭,xlU/@Uq#;7jsWGS?ϙh/q g)oKQirh\^'aN絈}^M^N BVwzX7ܵSlk>qamƕN>iNaUx 1djƁЯ"\uX6Mlua1ɖIŲ+ոNU\ryP~Œ0 Od0(W*fmYe3ifBlmb-n_ +'/Q 2sbԮkS j8MkIWuu[\ vCLEmY8.jiIˍYLxȒ[ aoWAJ#Km=_N8! S!kUkhE7)N\@TGH3|,D-:D˷7M J6-+jWX7ܵSlk>qaW )Uq>|PLәĮvt1y>Oӏ0q>߭3o+?_t-yoA_B4  [ūuа ۏnߨ'W?P_/P9L5-:X-}q~~J`nUQy$aR2o3+fv=*/'"5c%Su7xCZf$ɷ+TEtu-3IHEXZUܲq:tjYXY%’*#)?yE+g9DĐM7rT nWPO4%TłIҠf\|d=Id_oS2QժuJFԮލ"Uxv6Q*Qpqi|Q'b[#9R[t,NMzdChq",{r%gܥhqAAS5/J.p9 \jm5Հ.%],YK{$-A{7"a~$CKfdJu[#T#4f-i,# 2].$igxűP˩2\ ѬՌ՛Ԃ*IKUbSi7uߦZk )5\qj;z{$[t< Horzamoub9&䌦S|_ ZG/mdms&czgNg+U$۷[h^6C:{s{GnjgCSjipELf)uuElLs946,pW{C+AXxEuED7TY-:Aq"2Ds2k_RRn@c&fcD(RYWn7=X:ZBNӋ)I&x̠0DzA%FӕJMW3],‚J'Pm8 U<YaV j Y52zuU*nwU!,,rDJh3jJnJCeU[q3kjKjΎ::1;2M=:[G_u{%*.q [=vچxUלs)>v::1 @N4^=:\_u{%%[io桤ʅx퀲UלrI*XFP ڌ}# e6iK:yԓ wsmi̤{8 wK}OjguOtꁓ~~xư|8\ׂM|IYEuFHT],b%5f^,&s9c ȑQoݨ7̀SB";ۓ!bZҖsѪuWz%H$\$Xsbat&aĬZtBue4q&es Ex!KoȔJR< y}nջ5{uiFQtK.n,ld&$nfQ|F ڌ}#=9c')Y,~׿~:qqd7d{rWi ~qPfeLqj|էaV(Xɯ %JHM]I1pbůKs7t,8aQI')0:v?H6QoOViwE}']'os_֋cQ?\0ݨ7͇@_gSְNȔX ^,Sdא$&._h[M1wb׋%gg:U0[}S̔<*Ӥ ɉxJ-e]I$9.W#%!r 1J2[SCLu\J $!TLQoݨ7̀ ozV:QoVqml"dmzN|QyMϒGu2 Or']v7 ʕRoFP; Cz IaʦtHi~wU}=֦moR&mw߷v57i[&s`C*tf2&mG~܌<K܍Z)rY&hx ݆{ݷX02u2|b QU" Jodžg`[ivfGH}']'os_֋cQ?\0Ű;6uxv-ʃ FI뼽SNɨvcu搏W]>ujzF ڌ}# {bnYAqѯ1'/Nk)H$yeOg}ɯvqäRmOi`;;o2u-Ɋ/入Dg LoUB8؏\4g&ccFl:v?H6@0 5kP{on+olX5'$'l`&N0q]uqEv8TUO'R˭ֲYTT7P0 @_g.KQLgs(sYRȥjb3}օ_k+S}=۶:{>cK9~B-(~.`{j&{M{wFj~zt{;Y]k0=er^rI$Q9h;ɝ\H1-Wbw(j=L&`:}fޠ'Ӹ  eŝcFZj*qӓ"{7=%̣#NATkʛMF#?3x<xh Nӭam)E6o (K\t GؓU&V )=]uaeJԄ}oP-no:v[6MN sFhU]Z0TE4ɠen74ѩ!NnWBFXD;F#?3x<xh yoP.3nl:ir lƌhU]df0KE*ɮzqL;Nq]YXEC۫8ƪ3>l%s;6Wj:4wU!-Ha1R$IQ^NeȪ4YH\pQ37qGO,{X,] Mtqg)YJayDt7w78@p#'"DPzQŸ:).Ķt2Fkr92{y􊼐MM!uq,rtK,gaeF#?3x<xh }ȬXoZ%!+aTFMbqY,s8hT.UoREڐL_bxb!Ei_3E~nƒg-4ԆGWT=W?ǎ2L[?~k [*KgMq.Tj*s'HWʬ'MDrʩ&vQ9Ja\pQ37qGg626΃og hA5_M>&cRñu՚TT=Y+/qM;sp%. ełV`(ReWs8iu-/G+(dkv9U3RqG#?3xY 21Coigeі2ڧ(9lȵGs(ӫv9-X2qq9 4n88ͨ@ڨNsMFoU`HKp;LT2tWm2*Mn#'8<xh \pQ37_xO~-_󮅃qG;cvk>m&[Nm<9'z`sQatq]° U'ݝڟro ɯ'/<ֳ& 6 u{Gw5*' 8GpG gl{;W8X;?H4(^wr͝,_rp|+pbg{mGe ~rj3ʎ}W6ǣ2w܅9h`f?沢|vRijʈK~*xH?wz_ 垿+m(@!{W^x7Wh<$/y*/&jOM@}y?>/w^Oϩ1@KcA_PC4u6 S+3Ƃhl4WӸC߈}[/*}CߟNm/;@G a_7W>Nm/;@G a_7WdL`KtwAsvQOo{kRMvl]۴MwnMuM?렽m|!CCOoW6[$f ~"SJ<`&q$4ARrN$fh2SRSnX yjtjTdo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].7)_P+@rs`IϝK"H~|` v?>m|!CC2X7Cs;r)_P+@> Ddo$vܧm|!CCv?>!σ%$?>w?<,!].%Tjh@ۭ] .kZZol֦*TfۻM={>ƣ/x(ʳ7y8]aQn z)]L˕~՗cU3Ƿl8b}SeQ 0~ˀ̬Rco!k/c#j}KOc=BVs _v&wQϪ&?x?{p) h5{hͅD%n?< .;"!6'廴T7ڐ  ~,_SiB=/WP C?~Ddi@p=G^1p?[?aL_r|`OSĿA4D3GS2 KcA_PG?Ѻ~4gh٨ G_T>=տ?.\BTLf:(/B׬z4iSuJjݷe:{6߿~6]'hlؾ7mzfʑBm]6]kT4(^$uHV>p-\IkﬖSZg41Gnʛ)S|!Π.ԇ7?ڑ'_:RPWjE| HxCp?/A^]@ne+˵! Ouyv_|!Π.ԇ7?ڑ'_:RPWjE| HxCp?/A^]@ne+˵! Ouyv_|!Π.ԇ7?ڑ'_:RPWjE| HxCp?/A^]@ne+˵! Ouyv_|!Π.ԇ7?ڑ'_:RPWjE| HxCp?/A^]@ne+˵! Ouyv_|!Π.ԇ7?ڑ#pHg,=İ H-9F5}!Q\JiWN"%RS@u F#OZo'㒹x/e|7T߾wWP'fۡ 8ֹn6Rʓ>eJ QX*2H"JԵF6on7?V:N] )/cP_Ng[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp<$v|NgNg[a9vp~/ b/Ix6P%^t(j3'HU4P.M;O)գjkT]604"kU0N=,q8ws_RapIcw@iP|:X nW*9\߇n!bg{mIc ~r nH{ͅD$n?< .;"!6'廴T7ڐ  ~,_SiB=/WPDxDlkfGSD"{W~b`"ֶ53=ϻ/'˜0/|?,h+fGHf\C~>XW=sOo׋*ce+}MWBm95Iq Wn1)T j )ݪʔzrrTƩ(lh\(/c ~n%wmDZeƴBB NpӃ ^:Oy9_w7 p9'C3D*֢uX{b})oU[cMxdrl;$]xO=AV'ґn}XJE8٧vHʟ&L|1}n|ꅦH<3E_g WFm:Uy`ο$mv_z<3E_g WFm:Uy`ο$mv_z<3E_g WFm:Uy`ο$mv_z<3E_g WFm:Uy`ο$mv_z<3E_g WFmTކ]ZKijoݮ͕om-jn۴]v]t]tA WFm:Uyavl^ͼFC:"I\ڃ9I~6o:WY{(!uN-Z)1"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳"䍳Gu#l=(]_]{>"%ݕ׳urܒo"P &8 S bϻ/'˜ % |z"|?,h+&RܜZp=Ku' kEw$yUV0,WܔݞmY8zwi'HqiK[> HqiK[>HqiK[> HqiK[>HqiK[>o߫~1:_8cdžr#x;R~ƭ=%+s":ߖqtmxJ<[5t/RV/RV//RV/RV//RV\eḱpsqZwv#M)($Q5=A@?g]`i;7ԭOf8 CO}\J3%S@_0L>f8J:x0T(xc Pg㣌.S_[ :%2ː4;-&#]3F4섺OW/hoUݺ픵ݭ=א,+ "e;Tg+#gw0ߚ6!UPN lԝj>JZ{}_0L>f8J:x0Ty(xPc㧌>S@_0L>f8J:x0T&q?E+V׍lZUcj\#e]\pt_t"Ker|NtR]ȓyMOcn1PW)Ҡ/ CO}\J3%eū&®拂R%7μSqWs4tJ^iZ)Ť/B֖5\mŠ#X  + /oa(8+}Հ pVmŠ#X  + /oa(8+}9Ɏ1HͯͱNIUz AÚ=.8RuQNnI-ڣv6: H jxU1ϗڛ|Mn7!Rk"IaWtzmI :'t+UWiT!)Ԯa[@@.6E|W8ۅKZz@@6E|_8ۅGnW_ÍQ_pW~@6E|_8ۅG&~A>DW]7>DVB6v8M7L+MI*':q|)%Z>aM-U64գ&(%z zl ~m".P,TĈk=t*7sa ::"IdShVRFw R(l@@6E|_8ۅGnW_ÍQ_pW~@6E|_8ۅGnW_ÍQ_pW~H<^^x%/fKyi[IhVmGuVkIN7Gedk@e F綜ַe\/3Rۜ\Nϖ*G{ɲ9ȨV9\)޹JM9ŧe͵5ֶв p RmŠ'H q + /_!(x*}Ԁ p RmŠ'H <8Έ_(x*}ԏUXKRH8wr*8kܜ7ݲs/Ps߭ lUw{Mݦƺ{ 7a)oٵ^ڢRژQDDӚZҾԻzt'jqӕKl _JE;w]7(x*}Ԁ p RmŠ'H q + /_!(x*}Ԁ p RmŠ'H q + /_#[nHQm2 ,,P[ĶWwL$rAM]Wl;*T7{>㶮vGqFArE%ިU7eziŔ\œS4`ٚd;V] {jSM7d@pbg{mIc ~rxj3ʎ}W6ǣ2w܅9h`g~Z߽?¢D|vRmk~ I~*xH?wz_ 垿+m("{W~b`"ֶ53?=G^1p7Wh 0/9|0'~}L)_  /83Ƃ_f1\_xF_r 3 Ϯ/C ˨m6np~/YLP'5XV2Dw>敊+ޓ# @0j6j)ei9>QCP^4.3ŐlEEmt{ -kHFff+mWTo߰쨣Xւ29VMM_CcĞ[&)NѤWbm^j\ 32ݎķqtesjhB) )'m2j2(\4ğr0B]-k.Zo)Lg䢔..AĠt~DGs/2 bS0?<_Ls*<:Lniw|-*$ːeGNtoբgq>'VZTAXʜ=l kg+BvJOI~zJ>OfÁ,yr+ Wi5c,`Lv)X{]d#\Ru7ةÉ)\gU ^ɥZ|gpQ$[t4nl˗ʺ9,ldosxm7!⦠\Y E}86TeW%bYxQ5{.e-nop4d4̦OƘтڻY0FEAu9c$[}B-Z4~ GR,2_f"Ƃ;4\4Xߏ߫'4DvKMIH&r_0;ݟ`5Blqߚ 4T㇍f"^q"KW2̐߳@\*S`E [jNóZˊW%׃Vӻ.W$eMa΃,֞%SPv@95y&;̬^Io)o!6 g>6̗8- YΟ'9aͧ8\847GgP7 7&Vg} ߭.,%WT1f`yj*Y0ee u 75jvATW :|,~bvG^s2ZjJu"'6` $ b(H9Muo$v!Z]NyRM$Q ĥ>7>n IP,1ʎclxqb$캚4uM I]Ԧ~䁦=YI%u{^Lۛ:pdƙ%>+)WS ɧd`4en8L;QnPBYX4ۨz mb-/rnEs2GQ',93/mPrm}`bf]:f$d W=8;6;c+f6ioyt}vtE[9 #^ %͘63-؅Vd׷Qp$jki:uc3JrvšܒjolN,D)J2tq&dXܐ.$XPnWB^tWKa,_tmFt2Tz1lgI[Gc9LqUpPM)J"yMG\+7H dw̱}6fUEHEU7|JbXzc8SjMYJjEyN%2i[cd/[%ݕO)ed#N>0IF@hsk*|3eۖʦjj5Ug%jפrߟ DUAlPifs,bbn RMYYZG 's|g  Jj[8u#kntK1yNꂂ=jq1 !JJ:.~XpIoPˌp$igeі2ڧ1*qӓ"{7=%̣#NATkʛMj״ڭf2V͖#cQ9-E&f)73 Y,s8S46z)dʇ{ߙ`],Z]]'Ifb#!٪Ȯf$e0w"<^\b$.m7b4ڬ.V}eg3hƫM܍2Fl[剤 R KFFK&U9-8b$KP-B-<z2A c܇Ppg}֗B8&Oŏr[@/._2]2iL(Ί] ivҊc9 ؉f^K&Y4[)f\dRFLRmp|5yV2pqnjy4Aꐚh!rE)nck~̴J4 tf.} 7WOprԃ%[7riˀasב,6!H8ÖK1[3\r7![$rgLD8+?\ZYSlVzp!+AB/q>SVuX(lM9-뵡⼗ )N7q=0}qYQrs"AbLs{eʥ@Z4xAv~+ orŐNe :K Vdz9l[ćƪ?ǵ.S$T<%?W !RDꔌHyE.S&LڂVqb21 ޞC=羃"$Ζ&Q1ldm@stm5`b t9̾.+`!v [[ٜE:Q XDz6+2Wo2hb[A,EfF3DXx⌀+c {=Ku޹9Qe( bSR[h1)sMU)>TS(>-=5dʽw(YգK>rs"ʨ }۪fM&8F]kʉ,R<nbqx,>'(yO295ܔ=N/˸6m:@g[e)J$,CEr1z/Tģ%%0GUWX/sJB4Ϝ%dmW9)]rbKXv,|n ƷD2+?`ZfB]pUi_rR?Oxp ɭ %e)ܦ)>qoYC򷊡҃*2*Q#VƑd.>U}ܐozOޭƷ&X^x?Ԉ5dfɦ[XkAj+ipq"#TRUҔ "|sNPXUoٴ-x |JgJ)&),}9D'"r6_}B/RrhTF*߻fCb)G^2AE8Ä&xu6HC*f *bJKWN ҫnl"DYҊIE NQ f'ȜCPԧ\*QFʴٻnuP؊Qji)i̐QN?q3GJyS0TSP2Z:uV]wݷ@`@R$ΔRLR(Xr4N>D $l4^:ЩRz56UvwkRKTkIMSM6dq xm͒:PʙʘRӭB=ۿnBȪ$tbBӔHp'(0P#e.h),fJkѩ-nۻ]T?"xZZJji$S|8Lo.l҆T6T: NjWfwm6>ET%D>@O9GaI/sE Nc4*T^MioݳvR/ZSTM ~g'[ysd0`)ԠdztPO}*6ۻn?*I*%(Ph"|; :H} (hJuRjlK~훶2$6]Y |C֎]u +HN%IYWq<ѣ[n4 Exr=|78Ѽ Θ95jcy/Gof7y_'&mL{K#2ʽc{4fd>B. ))2]cF\AH8`WPg!4ˡ8)Mfi\"]XH. "o#L^sC0ǵVV鮮!kC{&ܩ#hesvc9$_/vywSD ~W΢R!.~ԋ䔮pB*,F D㗬RLN :5HR~l~< #;`FDڒrcFVNhD9ݮڂ89+ M(Eu$h(mhY?؞miC;Ѯ5o!w7uw)?؋p T$Q<&2B^m7K OЅqp1c.xsϒ(}ϟnG~y P}/,Br-$7)#oXl!,u8$#G^mB4\\GWtqC~:8v>>e{n?("?uJSZv&b3TWdXPY鑫YXWXb' '7A㩲 ȕy- Ln˷4Ą98EhLC++ݥI ]uvJGMh,\…Ʌds0.eqGOYua(M]x駹F?@qm\R%..ףY &!n~:׷ѽ?x u#RqI-~.ۃiūxSBN7r<94CFÅ7 J7Uxi f- 8^̶E'3TQ8GpS~q $y8$^ WGIq|YS#y 1gLW;MVn'M)ƌ4cDwM5K bܭ)pP-4g)kyjP'Ve+5.1p8e MRK/j<n;aV,˔$Uvj}\-艎WiKlI;PZV Tq3Vv垗ހ\R24pqN+N\zn6TWa87+خ\LvTeʈb%}wH2o-şg6&Fnwu'[<:JJӧx*MaHMvMDs:Li"3џZ͚g̠l'[?oNW񉈆bKc:CN+Pj2wS %\34GIx] 0bmBTW4}^?\gmk${W,5^r~.Xidy\ȳrztxoOA%0?;rU^{>+625U3IyܼK M\dcox.2$Ҙ/muU"In>j{NpINXcYbڃ=vfN\p<9M ސb _?`9Sˎ|@ |NLÚH!,Ts'ۉ8o8K_g>8i.%+ڏ?**$eub?g)=r[d $HPlstS},;0UƫtpM,k9PnE=y2gq#.o5]\j$HwgpwyL4H鏞\Tc6 L[q KyG$ Z8eqs..'dJ?wke~MWsmƘG Qc?LxwowGJe%OHA7)!/֓sg !x!bm/oΗvHޢ'3fLv,'!WB,Ս(\UݑdӎRZFt7Sfpm2,2cvI4v#ގ2g:dGC}"Al6ñ,:Z֢%V" cwO҅FRŌ/<|&U$u#z>du=oۂO6L[2b+bq#ΈLM񕾽lc@Zn?*<)G[]4w4jM-:ssq]Eƙɓ*N H+v}Ц u8 Z;f|?Z&6qK1zhlXVfMiQVfe߯I%1[|/#I%-mO)1eJgڍN>.V@w-t|h<\fʧjsjJ!)z֏qp·mi_ڱr[-*Dp,M3̕ħ#'i )z#!TV=?3kT-#8}2pimw2گUT|EJoj)wJiF4Jz(ȩ8emrh6yz%DE0 po`5@QBa]mtV궇~%$Z-/Ov5[L?uer?)]k90VH􍣯ټ,BXv/- ]KWN}Dxey6v2P܎0%y¥. *#\W5DM9"gq<R#Fb: 5y*qrP?fpI LΚJǵ~ ^L֌uG鲔rI!v"I=wlQt#XyROY!vf玩.ar7NW̹B^ˁp6?cq9(A3+ )ii{JbrP^ kHuH1{xض_kf3/&v,Es"l* f\}̭IE 5/vJC -:=ec\F?cV#.dB[d#_7VËI:P%Sdc4BKJ}S,S.vjX5d] 6Ls̉Ls#Ey\|neJ\zQtۦLu4T!mV@d"ayݹ,Rii1,ygF㶧;gw)11Fk)9=M(6w{: vF.ߎ(&YZ=mG)jї)&6VgVf*u; եUEL:UhӮa5J0+\kpUd34W`%#2]IζW{ uD]2\Xy2^=f'U޶S -xCGWBa{@#cH&̝dѹ8.ĢLɇ'|QM˓2ǎ1cɟ#FNGg՗J7!shʑm,WB!2Rdj['yXQRQ"2q{ZV !)R،jY-bdimC$~$WY?=w=t#fMrT;]i޵-zc}̗?(̪r뀳@g3iY5Ix!m2p%IDu`_[j}i~ĈnuGsstњۂO5ĺ=ȤrTHIM*07qu+f(~/'xN"5fﻓr$oSgG򅿔d0PhIhkUEi<* U^Üq 2[=b[ŽjY@e{ҭHCnR~=ㆲ [HyzIA/ H|{z>7%1ZG ̚&妬E Nu4n}q ٮKj:q8^zT =D[cΌ:&cQ$kkE[iz7<>%G4Kp-Tg:F+P8G)ljDFoGg:Mϳ{)[:㻣8bj+'7|iTrf_*i$%ٶPNZiZ,`Q9G6jH m~R{;/w}[[wECl*!$Owio!vߩq?-ݧ⧁Ԁ_qygJ@@Y|2Ҁ{'~.&jOM%_=Z?fG@d/w^Oϩ1?aL_~>XW=ĿA4D_e 0rN:T{wd5\lfUtPTLSesӕi;JR0WS'T P V |I^/;~\Wed-79،j4(˙XB}u ĵeBf"xrݠ X~THG`lÝ)6`WR Xe(8aRl%wc}-_}%CLyDQ YT:URz/`ĘY{ V |I^.<œv-H`YhRf$#Hzv& ;a1=L$Z/? [mmU-Vpv*3HїTG9TTHifLa9(c;'F,x-X-&3^={Ղc=e׸ k[XK6=h nj9]S\)IW%3Ld3ZCBwWBz@Ʋ+/Q5K`}qWMjtNMe-A7S%]pM8Y8q碶dׅYQMf$soQGRt}7tmk dQ-QS(Y5"V}h!7c**֭zkTޭMݻ^an1o|"ǐ= ;S44nך_r5_՛JmSDdSmU!.@ab!(kI;\S}OI;\S}Ok Pwtؠ'H}WSWS6{!( ܚcSW gas$4bji8apm;=xSk\]hϖښAW`zO1x:O1xf0b]dŘ=e e;#8J) a!||tGEd33k3+5( ;:CP w>? w>?|0A awN5))l5( ;:CPxCX]ÿ> a?|co?|co= awN|0CXzO1x:O1xȆvq-c\&YGFyG{7wh)ڑۍ._ms;5Z=7oې^I"@Wz?clo'se9+fjPXXY8uAL:bzo߻]t3{X3!wqmROGtסSm[dT-~U$u" kKJ/$5ٮ+1c6_[jκ FGJn7Г$!&GFJ!Cab)IiOO$Zi(H %PnTi짳M6A9pۊW«wyaeT&2yMULS LKP2fM۷խS}MvV?5)BO(E( %&I=jj%T2fM۷խS}MvV?5)BO(E(%&I9nni;J (m/Qh߳uRJ$復lRLfWsEoi=խ{GZ[S&T{=h']jgZKJ:֦lur2+s0ZZlɲ+=\vJ9 {{j'v?t٦CbF?bF?  'yʴNև4<NhOzSq:SqL.hx*0*;ZUa;Uv=M/j!!zwqn|32m-vy65;E{9EBPH:>t*A&i`JiU1ʁJU?4<NhK!lL+6%<G=qnt#UQD5LWcqt6$l]#v9-˄=o`va-[]4̋\ xZUe"HKg&S7¨ʦ ЩE<=.O/ܭE4 :nL DE#Np6FjLuw&졿US9S ګqWi*.:Wi*.N%_Ճ}8V ORnޱRnޱρv@G\,(J-εqsL ~\HW?d )r_kW=kmW+69M gFomsjq胹{j]ɪU}H_DӚ#S]r Zؒΰ"..,,*(tdDZW 47Xf YsnvZ=-#r1_Ju={ܦ_{mU1Ӌj[-y fqɛic)l}jݵc_;\ܯD8ܫz@+X\{v+X\{v'_W?dqsL ~\H+X\{v+X\{v'_W?dqsL ~\H+X\{v+X\{v'_W?dqsL ~\H+X\{v+X\{v'_W?dqsL ~\H+X\{v+X\{v'_W?dqsL ~\H¹QƾE:\s^q u[k iRtC~@J`H҃)u1DBt;;Rnޱ> `#~Ɂ˖SRnޱRnޱ> `#~Ɂ˖SRnޱlc7mO\ 98Zmv{N=)R. QGg/VmwSTh*_W?dqsL ~\H¸'&,Z=e e wG@qR0=}\C|z3۬F=@+X\{v'_W?dqsL ~\Hkɡ {݂mo ޓh.Z#Ro[覎.'V}e0٤2Ui$f wǒ㘞0jіٿG;HLֻ}6)N/$j7wn@ލ7n%=GP-U̾{l52FzGۣ iUccCU-9ܷj>tEVԗ˥RnޱRnޱ> `#~Ɂ˖SRnޱRnޱ> `#~Ɂ˖SRnޱRnޱ> `#~Ɂ˖SRnޱRnޱ> `#~Ɂ˖SRnޱRnޱ> `#~Ɂ˖SRnޱ 5-qֲ`[bdnsX]y݈L5FvdSENFs$WzY\G\,|01r tU`]q0tU`]q0|G\,|01r tU`]q0bKT+IjXVyx W9kKiFURLw<%̮)ͪC댗NaV>v'jEjL=#|01r G\,6Vo# 6on0B$ wT t㗫n}N@U_2+=ʷۉ4Js>ΐ+#X/|U}g&Hn{Tƫ>Es)rgvIqdsЯ_H14j?iO~'+`c@M|$x(c:kZ;q"f)V)9LF?;QQo= uk{@ukku:HAQ֦` 1GvUWeZ5oN=wݻn5:j:%kڇv0%hv?D?q{?;ߌslz>/w}[W݉Ts깶= ;-C-;"!6'廴T7ڐlԋ[TBHS_j@/8e}M  ~,_Si@= J{ ~q~&Dx¿߭\i2ϻ/'˜0/|?,h+_  /rN:T{wd5\lfUtPTLSesӕi;JR0WS'T P V |I^%Eõ +jJ1=W:{^߫Tt]\U$c}EkN> }jO:FS2L57TJt7W߾5]ڄ]k,=k,=WȬ()wY-{&Ok5hwk5hcl>`ɇy%8`$_1aƇ_1aƌ[Gt%YsfD"˵,M*mT T^DtͥSoW}7T߮[|QmS0_?cC[knW$=X;,|=K1E0qOdI~ wƶ0bCݍ~ wƶ0bCݍ|QmS0$[aL<ïeI?/8Pb,\RUrHXir#)2˹9%ADUwZ*vok%biihi~ 뮺뮺5Y-{&6) m#7(iQQ"Br)ĨQ(@*J+Frҧf{gbxG7x+О핦%Ʌ\*DIX%aĵt7P+iRݦnp &#qF|,auEu]C5-u4RVG;y5DO5qsthۮ ^"vuv) m# lTU%ݦjQFUvn]nݷ]5]G0x9f(VoˋZK`j<9֋[f=ѱV3zmҟۦuBZl8-i*(+ȪeMWFW'Y=Q-@m$| u:*ԧnwk rY7@i{S>~rh)9m{pz1!1oD, tY%r^2"[|bG'cww78 )M`s*byӵhߜ`|[^cz,s2E[fOQj6bFG"PdI鍰d^TG` JSXUlH]rt*bCgcXމO}kݠ##OXnXrDk7KsxiA2|YF;T:IQB[RRoSC{mB$<}5jhHZ9t =Y.6Kp5]UbTfSHSL<^b)ݠQP5؊'ېrZ݇eN*wۢ1/BþcsŠcj]w[t+K]z:͖-rVn Y1IlPQVNXw "TWUQ\2t)5߼%O#8.)9bjFp]?kpSr>7Mv$:!qMٱ^b@h".?Ñ|?7fzB\Sy6lW!ؐ)Ⱦ n ؏Ñ|?7fzB\Sy6lW!ؐ)Ⱦ n ؏Ñ|?7fzB\Sy6lW!ؐ)Ⱦ n ؏Ñ|?7fzB\Sy6lW!ؐ)Ⱦ n ؏Ñ|?7fzB\Sy6lW!ؐ)Ⱦ n ؏Ñ|?7fzB\Sy6lW!ؐY\mj+ɞ[,ۭJV_l{̥Zl߷ewֆOkv4T7J6;la.˯S˅nuâĭM&h7-sYݱ'ԩn>5169qexB-B *mmHqŌEeֈv]9e7EdeDE ݩJ'{SUoͳu@./T1N"Yr "J"AژI`%U2vleiVLm1r'Y%OlKcz!OٱNPbM r'Y%OlKcz!OٱNPbM r'Y%OlKcz!qOٱNpb o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;Eyu_Xr'Y%]lدUHC! o&͊T;gpoJDjRԳ5wb>j9=31,Շ4bRj4ǤGV'wnCmw%k-ԵBVI5!&646Ŵ'5ʾ >Vd䊪*lLd~n@oml U65A,Zpv,4ӓ8Z I ̤#T0^ڤo2) kvt-fZF[H4jϒ 4br̓l*5ySu? #".*;b?kE\kpUv~7Mv$:!qMٱ^b@h".*;b?kE\kpUv~7Mv$:!qMٱ^b@h".*;b?kE\kpUv~7Mv$:!qMٱ^b@h"x.+;b_kD]k0Wvľ7Mv$:!qMٱ^b@h"x.+;b_kD]k0Wvľ7Mv$:!qMٱ^b@h"x.+;b_kD]k0Wvľ7Mv$:!qMٱ^b@h"x.+;b_kD]k0Wvľ7Mv$:!qMٱ^b@h"x.+;b_kD]k0Wvľ7Mv$:!qMٱ^b@h"x.+;b_kS1 NeX!jWB,|YR5h>S7X{Fw7-q~vw=GBlدUHC! o&͊T;gmhTc2KP$D&L- *Z>oQ.X [vӣB)QOnݔ۳f6M34DTI( &I911<2/rHR)B:tl۳fݺx8j3ʎ}W6ǣ2w܅9h`y5}ؙeG>cp=Vmߩq?-ݧ⧁ԅg~Z߽?¢D|vR垿+m(_qygJHU#߯W?oq4H'~.&jOM@}y?>/w^Oϩ1@KcA_PE~>XW=ɜO%r?h_ ׯ"Xuc6lTңE5Mct{~*U[vz x=2gvHc<#ҼOvQ`®yjb"j߰Z:ߴJը~8xD븣w>AoVTA0s"ˮEi +#ټuJN'ٸ4jfsۡX=TuMw~'>,ŬI,II kbH & [ 7o'bGiP3H>~;0dӅȸg+V SpYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/K`1g>pYp<ഽ.)Ŝ_Qgß8K, s |qEpZ^|/( K2 YϜ%yiz\988-/Kj3ʎ}W6Ǥ1wۆ?9Hdx+&-ݦtՑH+!$T>t+:RRh5h߳wQL~~Rmߩq?-ݧ⧁ԅg~Z߽?¢D|vR垿+m(_qygJHU#߯W?oq4H'~.&jOM@}y?>/w^Oϩ1@KcA_PE~>XW==n\O./Q7I˖)BdtNJحF!զ;˵d$ꎆ*h5iZ](Q62"럳5g+R/mmlmo;QQw&mܯI#r6͵u>V^Q%pȲ"jVg( Xk#Q̦,v;(@ER?]PɒԫYM+T B{gbxG7x+О핦%Ʌ\*DIX%aĵt7P+iRݦnp &#qF|,auEu]C5-u4RVG;y5DO5qsthۮ6[yqJ@-<u 9i{9{CPD34j3My|[QHK[]S$\KE)oqmRio԰.|?,):xU>sJC¯YW-X|@Ϝҿt|`V"_84<<*ş9X"ՀW,+O qgi_`*x:xU>sJC¯YW-X|@Ϝҿt|`V"_84<<*ş9X"ՀW,+O qgi_`*x:xU>sJC¯YW-X79Njd{ޕz UWo{ju6mݷ]=4t@¯YW|@Ϝҿ)qYk0m:wwҘ>o:hS$T齧 )V\=i9V7S~/y):xU>sJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DsJC¯YW1gD~DfA,Ō".?B'=%T:>jJu?optpH{ͅD$n?< /rI Ii{*n5< wn _mMt]6ߥ=7nۦ馺릚렂1?-ݧ⧁Ԁ_qygJ@@Y|2Ҁ{'~.&jOM%_=Z?fG@d/w^Oϩ1?aL_~>XW=ĿA4D_Z2ٱK&%vkJʅ먣;&Tլ@” ;]6k]83Y@_^c3c(tKCuflz@i{{͏XӍ/ys1ՙzq!f:6=bN4=VfǬPsu1Ő[Ur6Dރb Wfib}Els"qWi\g{]TLKCuflz*r~v1L*GS\~v[#OqEԠQu#}i «= 8ӗRӏ*ٮĺ9 2m[1$6n ߰q1F e`dv0 6%Mee]J1m!+a,!Yw3`"2RLoHn2w+ҡx6pԥ\[POM7ۧ {nMqWܜɭ6ǭ4_k;60K;]"T}xu:esEMf*RL1Si{{͏X/Ӎ/ys1ՙ83=YZ_ ]fg+_0tKCek@@.iw}XӍ.3Օq!fzc"p1&m˻p+_,l5 !.L*V&/ vJ-%ӡ]LZ7sdHl 17|eeD 2+Vk)>J9ݛɪ'oy˛Fvh߾wWPo +_]|~%X_]|~%Xqt? F<".63^݈~&ZglBN ׼wbɧ#YEҤMmYv6o<$ $<֚ImISj$xTb$hfR Ӷ$ZW0OɎ԰/Ӷ$ZW0zysԭ+֘<9VL:vޞDu+J/=;oO"Nqz'8Jҽi Nȓni^çmI7RZbӶ$ZW0zysԭ+֘<9VL:vޞDu+J/=;oO"Nqz'8Jҽi Nȓni^çmI7RZbӶ$ZW0zysԭ+֘<9VL:vޞDu+J/=;oO"Nqz'8Jҽi Nȓni^çmI7RZbӶ$ZW0zysԭ+֘<9VL:vޞDu+J/=;oO"Nqz'8Jҽi Nȓni^çmI7RZbӶ$ZW0zysԭ+֘<9VL:vޞDu+J/=;oO"Nqz'8Jҽi Nȓni^çmI7RZbӶ$ZW0zysԭ+֘<9VLaw?M^SFb'FP[edz>bؼM$5vKTRŗ)@PGmM18e}M  ~,_Si@= J{ ~q~&CU"E~Z?fG@d/w^Oϩ1?aL_~>XW=ĿA4D__ {B@ϷQUHEV$.i5^57;UA99AEڢlHjſKe(H`\$ιJɋkּKpA`dlߖ!GVxD1'S/A{F mҢ5` 2ߥpB'`9+L?sۆn 9 m g?2-$FhL KqqP["Rz"};ι'WlE1g .c"VїV7:(a7 q8g#1GfS]\iĕTUM;153zsQOod:\ةQc:VŇgEU HaV$CQQ8Ո N&FM1/)6_ HI7mKGj4ňUe,:Xo7my"^qhX2MkYfePI~ % E(_Lmaq-[Ⱦ2T^ʆe%el\^RiV~Uܼ%6Z67)6yGy~4OxM t{0"lXTWM]3O ]Ep%Ĕy} '[ft-^vyKowX;׻n6@r^ Ɉk]",^>ۑHK{bv݄usd r}ת̄B$jtW|ZL~܈p*{D?VE~'v5xK#Q݋:6d)RKq^JqU6hdE n>u_ w.)`?s.Fjݓ(O({5`"ڳVY9~CM:i.HG%^Gߒbw#AX9jջnd.n*CA1_zCZSS{Dk*.Iӡn'8Yij%"tfqgh7+ U;xzGxP (l\Mf[~L+2G/-gIgOiFe(5[{HTt|CwY#"EgHeF˻kY^GkEL@6`"W[ۚlxF2S%fq}L%O:|j\ۛAɀag*; 'u)5bZ+-o3tn/Hx://}][z w>-o3tn/Hx://}][z w>-o3tn/Hx://}][z w>-o3tn/Hx://}][z w>-o3tn/Hxn71[EhKw>-S$ilۍkeMe 7DRZ^;66#Y|%x\wp}=qާ@~ J>~Z?fGG"y(.}o7IIg3S,qވetdp/IUԺ2:wimԩbU:쉿Z?fG@d/w^Oϩ1?aL_~>XW=ĿA4D__ {Br[9gޞveY'EpXȩWrZ/|wST'E)E%_q"5VrQХN7"E,t'vl-xT}_ON,Eضk#2tqg)Iܐ.$XOq#qEؚWBRg'2tj ׇMŎC0kR쏮'2nk֒Te9Td6FFʋ]E (N$l-xT}_gm~>o£{UȋK2WW%+K>' &7UnڜnteĐvtu `X3jփiĶm/rGsMst#0ĄATsvI1*l-xT}_gm~>o£pE>ڑeU˩QVb-&I'hE܈T۱zkEgU;k^Wmm.x}_eap(1p/;*TVNZ9ÍpW,U1˹ƶBl k6}aVL&Su8l-I?ʆ"A5= Jo'sff$,UWPY]vmm.x}_km>pģgyXUH A[|Hr]FKMPBcĔd E)VHB^ 1-p}K9BE[UUO9mE3;[R6Y/E:6ˍTM 8mm.x}_km>pģGoY-@Qխ\dv[Fh|CV* e%WDxe-dh2涵I'-6ډiU zZty1>@OEl˩$%؊d.A&z_;#Ϥ^@NzS9ET,{>z_;#Ϥ^@NzS9El^FěV)&\ ^vd(o}"8Dr:ԕV ]NDa/uS39.4}="U/b"U/b="U/b"U/b="U/b"U/b^_-p 9#JѣӑUB<`=r) ǷNRg޲{cf Fԅ5 du鄉۲ќ%R)- /ќ%R)-!ќ%R)- /ќ%R)-!ќ%R)- /ќ%R)-#"ஞx'z!'[^GzRjyop2":IY12;}+UϯzY,ÅTy*܀yǻ)(OBjo-]rS] ȓ+)Pʄ(v֦7ѫwmf5׽_CWޣI@~^z';D>U{=4WUhC_CWޣI@~^z';D>U{=4WUhC_CWޣIYO uIv{U;SCTSlOg߯n;ݺi+#sWG2vŽj1$vemg:KV}=rS+Zm0u,/M-ZJ^"*O VG䏱!Y7>!_zʯgFB"*O VG䏱!Y7>!_zʯgFB"*O VG䏱!Y7>!_zʯgFB"*O VG䏱!Y7>!_zʯgFB? i.*۔wPLFCqɎUBr>kH O]KJ*ס9y#aVG䏱T=Nݻv۷n6ۦvۦm۷M=6OcM4M4M4O0/9|0'~}L)_  /83Ƃ|Y>x*:2܊w- ̗vBtRTRU,Ujg-- or$RoGB[wo/<}׉GkĄQ;&%m珙[(K:6tWJ(iVQL%k5G|@\ˇ^%Wg\:(|@\!cs$mm.x}_km>pģz!cs$<ȇKؐ_luQ| xeï<ȇKؐ{").f>?b@yt~p.%/Wm.=xԽ_OD>R\} .~ćIs1x6j^|R|=?Is1dC%H/g\:(<}׉GdC%Hx=3H pģ<ˇ^%Wx=3H !D>R\} .~Ā eǯm-.=x=^SD>R\} .~ćIs1x6JFe+-dO׊[FR(q+y)O&FA in8[C4f{>ȤdC%H ?+es'Gr4ΪlRNl֙ԥdTa'-_fKvYCb]*e3Nkn!څ}M56/;Sҡۭj۷n܏Gh1cZ5{ ,mZ %GlbE(OL/QgZ)v[=<X$1^d'eia raW0gRu8\63S#2w\y.۪:d0gLZ!!)9֐[4ʍ3N&eRHfPrW[dNr"5{j,[f5n%F6~1u'cJ~L2gȻLY)k}M#iDm@ț!wɄؓ; d=oMڧ*(+qAJV;Z*;*[-[vufE /2%ڢr2w<$4*$)d te2mL p*RېD~Ͷ]CH6"ѱT-I> c μ$}sdTf]Ҷr[>%,-U zx/)]\jT(a?ߥu(Hng[glfv7hvܭv[ 9%yԎ 0-c Nn:+g$(EeviBVو i&$i[3D $neAYX]BYl) Yjf#$~ѝi6aX+NOdZLq里!3ޕ)pǩͽ\9x -q&Z͋R*W&S(oH+ޑ q{US6iNyGm7hnEJH.\QPq,ܠI_Bƽ3EZm0#z_wd+h!o/lFKUiƧRA)l%&lk[ɬS)~K Y|Wzʋ1r(g#2*KZpG8o$[ /#k;)6wUJP$mXgxg,.64|wVw2βa܌q,2yQ-wt9 ^=]EHxĠ]8f,(>XΦ*)hB5,/vߓ~ˍpNOcĉ#iXd[[Qnz.CSG%^ivKHC60v/@ic+{nr;ko;A$^2W19j*Z8#St7pLlgE.+&}ӆYֿ{/Hݪ|O7bHRDFjm'!'jx:o{1ww:;pM7jEm_E2qM]F{lKJxFL59v\LM"8[Q\:/wY_7y{d2&zI Uym:|uK-UFZT9u;Cǵ2PT/a?7ٗK'\ciPvBR3qZ)dboj|Z+&O0#aYȫݣj"pm:ı_^A$\^h,R;KCq\]^2xA&8*Zk[n GچqFjeb>QZLySә\2FJ[䶁+qSjv9W o\}q$_[a7+O3t88\Zz8&n\H!_w<\ 9k6uve6tMt ,s]z-$^izk8Y,h2a"]ӎwgfOKьi^?cYKۋgG-o(;,㒍+-)Ay5{SJ#2 *s %aUEx&kRd~Oiefe8l@&j7Ȳ* +[%ײES$#YiKy )EmŲ.c}5,y5A Ij'sZff$#PPE] @u6ɸ KzS)1A_1HRd ^?R:f#ϸ!A_h쭰gd1vٌnǕύ >/ӂmxVʜph.%rjY\nT8?N7=oѷ2Zřfuo?bnnE(/.-dSKu,gݹv{}Uogq7윙0;n\y=l\E*٩!܌ ?Ts= Ҙ-)P?Ml%g }9+{ʑה,i{WdJE\ eUc 5#}{j!(ZN3d D$ru"=m;G%sZ2(3q1(-I"S_*ϡp`HVKV&kI}IrDl7F; 4ʒKQ! MyHuImYk9r!MpkCvVL0%,ڽLw7 +Ɋ -;>3#)FDz#WSy杋h3p/#'vIL o4mDkoFrq2Mv42"Y61LJu홲CDADZ-gvvrux4&>{u2eųa)5&q0"uٷNNֲyA]Df2㧄%<[Eq~֯e֤Y8#=t 0U!3"4R$]y~ixyf&-G i&3Ŭ&5U_. TK<+T6^˓RC:\d2蝓#p '+"ӕC˦FAN{T_-"~PkWȺ1{*$Jobj Xn$z}QCd+FHlσiY)` !KTiBpWVդ՚d"ũ]vT2F"Ɯ 9]ٓDc,Ȟ~"B)7(NN Ǹ͖1FEpTXߏ`О=ČHj3c6L2e.^8``sqnԙAEA= [~$xZHuEBbsJ곚}ʎC}s7l^8NNjزjڭ3°dB } ECSӊZtAkr?|Es"܏n:n?->(o;N5N:2>>99QdL,mlof]ZMv#(M7Sr`[.fbj.%rgQ QKQ*d ЫKlϿφoN`}܆^x/~e;7r{Ŗ/7|>8O>bBWpX.va۫WK^mZO#gwb[ +P5[/'t Wչ [b>r|fWo9u]QW~!8!mdf 9'6S r.a+} irn;gn%SA H9M&s PEn<{]0ݩիx՗ {{IMR8mB3Bj72L_ܮv+ьPN]2H-HΤ@C`/xE7mJȐyqI")ʤNv㏸`+1A5n}\m63@w2]]0nZ5QdEAB9drBH"%DaoK0S-Ty1Os{03Ͷ&[ 3lǸ;al`2D,[wAM(~؅f}>rE#q8ً6"w>kvը\3mBtG{R%&7kF ~2[w8yb@Y<7\DjA6rn9?FYɶ &GS)rXSb,-EudG;پ[\ }i]q<-GZ-q>7⛿R~^wy:|sͧ(}=qg򏻿M<[gCdAq1d?1ͧ/9sAt-9l@޸Vm#;#IĪR3e\ə^@|;bCB';Z*/GI3N0Xn7 VN&]p#[Q6ɖ,)Y?.5 W{7-gC&8\\m$` 7yV:bWV an8؞c;&l#lsK UItMe*tXǐ*$4PdܢPr'Jyh}:eJjR#7='ev|b5&)&OB.vIXrEWٴ]X\[? qMŵBʵ(o9$*x9C3J/!$8w39٥4]WoHia7V} 7v*L0eNv0,ܘ =bqz̑JB /%ɦ<6[˸$r')1țz}Ho%ń=M[Z)=1[JO.!.umau4%\^-WL`?*ΖTsnNT}=_''lI'^dmf[p- ciN!E;tM6jB͙Qt&\9Y{s}o޺zE*k#J d\2?xOV:ɔLK$$هm!w3qsÕYJvI,B>4R%˃,C{o$`W?c `%'u).ʵ<2֎$R^0V[dsI;̪ĎAW\kmuӶ|2QM7;{8R9A9<{p;|wˆWreq({( $Z$V<| &mZ̯' - &VflkA(U]ZjтSJ).,.e-]&bա@ eZP7Iqztɸvu% cTpgUf쿥^;-d7tfŹKPnד2bmYbyV! :}O>2n1L ²M;#FEHi81RmdE%4e.YapzET^Kh5 2l{$@n Q]4 ǖڌБ-ᴁmT+ҌAqu-N7fۙ$F5+(7dg:]w$c1jבՖ$Q8b}Kd7w߹g<HHߠ);z:.Պpa4aTWtˎj#G'I4SpG ^N2ZFW? C\R}, (Y: eg'V=g4i" 0x=^+hi1zơ1ϹF&tXQr m 8ekڨWv(;t!=Hlf6rvXmS&^owws ; pVy ] fݵS(ogɁ$>~HDdSeT#9}I3quwvC/_gXj盱Xs ZDTeN9SS<{S% hUK~s=tbp[ߖ8&} 7d-oU#7F&`&, Ţ dB=&-="'c0 KYI %趂u,MS?t7YiؘJ%(mWarm @カE{g`;߆[oV#늁!IEǑ:M9%$otK .KhbU6c5p ~_۴m2$Iw3Rs\iNΆ$|edOQ;?#cv*^wkbkϾɅjh-6-bѣ#gg# 5 &)-M1"[-ڪÉoK+o(ICm+2Uː_m+2Uːr|`OS@}y?>q/g}C@KcA_PE x=2gvHc<#ҼOvQ`®yjb"j߰Z:ߴJը~8xD븣w>AoVTA0s"ˮEi +#ټuJN'ٸ4jf@-<u koRϑGQ}~yEϑGQ}~yE_ezd]#JG ](WuUGAn#4l4a'2]B5MiP[}*TZGAhVɱc54(^Ih)(mZЪ}*ł8Nck^* 1`fMŃי40Nz:w876^3Ńי4<|^fnO;ߏy/g[T{?><|^fnOxLX<|^fnOxLX9U"7Rfg.ƓDxܕE¼nSJL?+=&KHՏ0bUHM˱mQ>y:7$i"a^7r)&wA~ja{ 1Y^Vj$֠<(-dRG o% ?8K}Y.ԀxQ=[v><(-dRG o% ?8K}Y.ԀxQ=[v><(-dRG o% ?8K}Y.ԀxQ=[v>N =y Ve\^[2GTp\sG4`NFQkP,aQe]U,g-6{~ *츻ДYԖhni FI3*;HYgZj.h*>̺;L8Q ?8K}Y.ԀxQ=[v><(-dRpie<[V72^dzAf-LVE~&ï&))ԛgT ID:P(T{ ?8K}Y.ԀYE5y%U ;ސYuj+4ɬ%tjn&YQ#Τ =@jAPiHHɢժeZ";W9(SSvSOnݛn_~{wTfc_0idžE*^8X;&Yym2w )JTV߿ZiTٲ(SKniO[T{?><|^fnOxLX 37'ha Mtpo~?lf > 37'h<&,x6ܟw876^ӹ|&,x6ܟy3r~[T{?NzU834[5'$在e]-ɔo6+zIlGv*8id7=:\gK%X"zk^rY.0R%3nJ9j31B/N6:hd)7,h+ ) 2jOm)m[T{?Nzay3r~mR`4(tAvc[o:SJy7(莲p &P_}mI1C]jzw876^siyR-7\4=,Uh)F(,&pJddk#xJFho7OM+Y9|0'~}L) _> S b83Ƃ % |z"<X$1^d'eia raW3Lh8%rn0_}S_u֮/Ve#+^cyefMEH5 #a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕AV;\|D;y(K21N?OcISzC[4+78H7lOJM:ѭY:\SCΙ^uP\2=@U؝hYMqlU:#)?fQӛ4NQ1$k&C#XC;M#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@L\߾+t{ ƥh(ff^deUIAuHT\km rN#_B۽Zzx>#a6lBM$e*Vl4EEE,}t=oObK=G[أRgCt(}/==>E,}t=oObK=G[أRgCt(}/==>E,}t=oObK=G[أRgC3f2h8'yXLk׻Zm}=kZqWȉ$Sj*gJ-OMw֭n:(p.:ƋV֓=R`nBYAuQU%ӱTY +ْγJ5Z6d'R9HnĠT3d7Ker 0Ԡd).bMR߲=nۻ_jg-Uy7U{>Ҟ5߿kMu?Gaw}X=~FGlj0 $jHWESל r}; -S.r4M$O|.SqaGÕxrY4q',^/Irb]$N"eChn(ha{|Y>z"{>i֫es7ތ}xSmWcUƜYalQ̜H^o&prqLjZ*أRgCὩ$n-"rvv$[ն ^܋#TUu7]o}QApR⊒.D_܆^Ğ͊/[Eʄu5Ɣ&VnQ;&\}ňUj5)l5;΢XJD`=K z #9]Xn(Q8RwGŒvn 7fwzntw{]k4uk3 z%&ܸv1.񫹩/v;Z2]<[X{%ZMuèƕ+} ~PxQ8RwCˆǎzV />F#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@:ex;1{Cpl=͕@x>#a6lB]2=@kF%;\ NY3 )E%7QjJ{$uhUS}5 _KiTtmAѧ{yezz֤m1*`iѢYCn?HR9Q =R;+߶lnk{@/w^Oϩ1?aL_~>XW=ĿA4D_ǃ?;~d3>p+^.l5 !.L*V/ vJ-%ӡ]LZ7sdHl 17|eeD 2+Vk)>J9ݛɪ'oy˛Fvh߾wWPo +_]|~%X_]|~%XxFy.V,NYknX_c$Wb!Y",H„#w߷>Xۡ{?'Q߬Ow~Ŀs/4_wrpONSok(/WK᭧XEγvfUJ˹q`wKwm5\+.ne. l &i~LQKR0,bFqz8+Fio.q,YRk)|3A :%CNqL_91k5c8;Kty&L;ks]y#t9jQSlÛunpbE-{b\jne  EZjzb6}1rNGJ1RLb&BF[h,a{\x2g7,.A]8 ] H ƞH[s%H깟g?' ˟n';{޹bxS?5~}^0\+twR}e'wTaÎioNU5qg2<06)G8w[z^n8;w2']rGqKtHf{3{UQ"5=VN@*N 34 ,Ȏ*L#FowMe ͝' RtLCƴ̌tHme'L#BC}# Wrf-ENmopOd5og" =wuMQΧ vi].Ŋ Z~8Yj(W~1eo*!IL|i *^;q֋"IM'8I6@5< * ||" wɉeq?TElBn@&F=y'0YĺpUS\P.pHl5:ֱR\(\I:Nf󩢢 Gt,q!yq;4tvVɫ:l4&GZur<$Id[}wTteRP녽.vUuRQ-6,Gj[$Ъ٫9pS'INll*BRkH H?n5xƪE8H!ܱk hn"!+:a+quvSO״4 Urd} i:Uwegl=irWo&G܌XbɉmA2-Ge')s\ʉ6`RtNQ>ܻG8 )1tw*by"T$\a٘{2#JvJNs+ Ft`"5c(l&ysQ=݉ngPws!"1jz#w;%R-BT$Uy/G-Uao8Ġ>v ŬH:,!H ?bk |bG֛E \J ~(o'ꪚ5j3W 9|0'~}L) _> S b83Ƃ % |z"<س$1^ t'ei] raWPj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڰ頺!>Pj@  oڱ+VӝŃ#ۉ*K˪1)H()ؤT"SK~CAР˶.k3\9~#b-Z[iy֜(=TR' +d擪ٸ۷1V߷߮ϱB`/oǯ lWǃ?+~d3>p+_,l5 !.L*V&/ vJ-%ӡ]LZ7sdHl 17|eeD 2+Vk)>J9ݛɪ'oy˛Fvh߾wWPo +_]|~%X_]|~%Xm[r?ڷkcͮ!@ o#_t_r]yljͫGͫ -wؾp_=\oq=V9dl"Î-lr?V{GMZDգbm)sM #%h\4Ɬm dp?j}K;9oß˫`r ?5W ~k..]_\&9 MsYul@Ap?07~ae_yoß˫`9ygg4L_ U%xv<9AN˳FJ,gR۩UV۸v] s6'GHAՙ3# 3*FWcth oB5hjRRZhRݵJ:fAp?0+`@Ap?07~ae_yoß˫`r ?5WyigM6[.]Ƴ+풉$1pm iYco5758)][f22$t5E~ ~k.N-K0n  ?5W ~k..]_t3 w.!x wipvv@gWbn+7&PմKZco0k?.]_\&9  MsYul}Ik3 ݊8\EyM5ܹ'ڄsJ"xT{e[7gjv}(,T'TWAPќY ݯ し7#5MxHLڔ^%JPcg{0|#ҭ\QLB:h[u=r ?5W؀1f`  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulAp?0/<7~ae9oß˫` ?5W ~k..]_\&9  MsYulv$zV:U|N6˥ɵ[Ppke-pA|ޤhVI4tԥ3ۨo3v0 |oRO?Ð-gg4̸ALCU"y!<- ?5W ~k..]_\&9  MsYulAp?0/<7~ae9n|ß˫t@.Ap~?p6~]}_mçhr O5wU@ j.o4'nB~Oψ 7~h?_WM_7X5t42mX卙.;,4te0"qs%@jPT׺k:ү}\f7M g?wSX ;j,ɸ/c49;ѳvJ[ddͭM{Zquڢ.Sy,GmMLm7ݦkO,|%duNna,'{sp=÷ɯ FxK8뺜bĖٜ\t]* B6 ].R\1kSa5tu.0تD&62Bv7u;g|%duNna,'{sp=f~9%duNncW/ʮh"`ˀ"wK$} D֛d3dӊZW%@u)'K~O~ޤf~Nk{ P/tIrD/kT\LO`{6N2d3S*YY4ըX=kߺo g?wSX d\!$[e) ~Ŧ5GL<_k!+q=]iۿw_٦l_.Tp5K>LW@y'/煱^Ą_ߏ_د` I"(Y ƪ Or{pۉ\CYlQ'݉MOi3;*JZlfJ^93zPy)xb@o㙋ޮ7_f/zLޔfJ^93zPGIB;)oU!mn(iFӤ^M.m6 yjZjWIT/XK ѹD7ܥ]Iҥekn-J>Rє43CvV.[x<[fu"*(mgIY ptdtUZO4`kW~gOgWXn9 :bOCp9Id 73VEG ]Tⴙ-9ECCoM+S&}Q8v7RWiҁ K3]oJ 3|%/^v(s1{f 7RWi҃UnsaF):,/-ڋ ! 1ADpiNHNR^+S-[e:@uP\}gø!3pB&-}6 |0Zʉ6` cr BVE \J 7p+b95DW3H" 'nv}č_ݲۧ?ngg[7*(\Z:.6, M5 f"ӵ_-eRyYx ɥn \nMQˡ&G[9̒bߩ 7F71uђXg:ZrŀkRVJ%U]6؄Зmf sp •M.@s7b _V2= kizv/Dk8 Кr0Lc,N]NT >M/oqU&TQŬӁA3Up:i1(HAz ((Wd-[ŐhdBZrNw}7JZ]6ns,EU:hoc+hp!rf:[ӻz.*#9ͺwr1'rIroq'8܇qq}`w[D8J X?wA9J:0뗛y5aa!T7hUocfQGbn sΝQ55Hjb*ޖz=:I;GHMKM9ࢲeF45=2e15y!Q^u\c+04Umb@h*[O~-QHQHUf>n'5LJwӋb.FFV 1[Է|+HqɭN(5pDh߈ܑ]2X%&SD~E+|>hΞ9-ϲp_"( 4te6X߸KSWSD"HHêb}qUFo$ncpه{NJBRKC)uZZ+"8v L4fM=Pn7Zɔa#[|cG0/ `*y9Ϝ/oϟq'1%qv$rC+T%۸-I'6XBĔH4fd XNH*EeO=&i3.Yrh’p:|ȓqv0Ϲ]E %cns ݶ|tl̊뚏[GS Syv3z\[2NLÚH(PrxVso@,܀fv;ŷOXɒT#ymoU"d}ئMf%Is=Ze'd`L#;! ˭u-c7KK?'SVe3g{WrycseeȦN݈m)hk'_| Z.&W ms>Nj'$'l2ʼn.q]uq9iO'R3QYKK6BոbزBN n~`CWcҽ*&Si71ʱZ>{A8e5UmG\M끭EQ"Bݎ.(o9R3G?ʆ"EIpr(:l?"xY!b'x}VKYFy@B,$n mr,GeC&_:ոS2sR߮ ɳsf*րC{[Cdt~bNFZPZסGbn sk:vv?SGT#+_!VH:E"o]*i.4QNҖeo0VOS:~^K7]|x?ۀ'A/8<.F5v I^%d_rOx~-" ,d*!dLەˇu tT7ڔԦtCIq"Hy]AS.s#ۤ6Ǔsrrwe` h&L2-y WY[wѮ [r^@f|UfIN`r_3`s3^[/c:HQu/R.sGkRET()^aI1:&C(#|R;8?1!I>, jK-ɏEY9pv8vj X|䬃94I;mԒՠzgb-.dR|PqF˨$ Qy,~Øtg;BinHMVp2=ٍV JnY qRTvGieFJ2Ăg[0t>pl&IlYf4eLr0JlȵGs(ӫv9-Xu70/ϻe,X}%EjoivF %Cn6V.ZK,ˎVuU6c5K]B6svEXڷ w)9v*4p"zeapÒ$lpqH'qiQgPXjl#(ۛ#}zW95=yfr ;ɆɭȚ'cHvuϸ6"JG6f8\XGo87/ `j0NwSNޯq-F=🣌urWY,sT12= 3AtLNBKH_5~epڑgZ'c/nLZj]F]lraa҈Q-=j1u n'fl5jYݝ>샄Ak94 ztsON?dJғz@aT<0(H+ S%[DWPlstL4BS1̲ctJ>;iYivseH87aĶ2r qSՍ7dYbgYKrԺX2q]PA=F&@,~co$}܄?E~>nB~Oψ 7~h?_WM_7X5t wVJyVM* wVJyVM* V (koYGAK;veگ&?]ҷ]JQlIY$*d%^3HJkc搱WA>et*j:8 sZ>]j>ӌaxr*/%5%WZVޥM&8kW~֜n Yn ͙6"H"7&XDu-Z^T#k}ium\mUW6,{2߭V8*ve!Iy #~ FFK-{Pze]MOY%+G̈́`Ʈ0&\\nD fc8s?ʥ1}:m5$=ORL zr&Η^GW"ETH÷~vB+s&ټN-!d7/9M ^}k?j}8(hIMʇXLoq?TspKiF-E̡H ލŹn̲s~HV&?Rۈlchyp7Mno -red_.C9 el1D93i[}Gq.kf9a@·egTO#wwnDԒ'KyDgz{~~=~O_ b7Q8y7/7Q8 _6On!:L4]p0K"hR~3sAԨ~Mw;d‹-hn+ڥmjK:-J'aޜĹT\e?G1avO%Ć/cj@Z*mw򥸔u;r#6Nfpd \"rX)5]I!Ǻ+i1=es{k\2y}]-v+QmCn ݳJ+Is +4(m>3KH="?f #<^§A7mn [f?~_V.QdYgkWz͝`4:$ y-P[saeE#)8|ͪQxYq#IUD %,h\ N p]Me*2JDi#j)@3-]Îm"V[BVc&Zmm3r$S}: |[G"}M^t'͕YI^uLd[Ǧ dxZ~aY˴Ǩ`iIq9^Q_[?1zQdHEA 9;XW59_Mi/Exwѱ4q86;s8Jnf#zcvBq[~azC+L;zϩQ}u󳑦!қ_IX5oF+IHlr;~ϾwDʌ\"`uیoM*-I2ѡk-d *PHvzq j(-X㘮^x.6Xq]X-)>ڵW>}վ&3;zk̓I\5&g^M̔86o鳤p,oYg 4ZHkDJ!8^ߟ8tI;R֥&W,H򁔈qWsnj=ޱAY+2v+yGH@z\[#<2D 9,fZƋuHI팥_h3YrCQ=ziVo(BhӭZڳm7 i1,uvPé^e OPs*G褜>Mһ/NuvLy‚|HbSZ˙EY4Ο&S%ӝKcFdjWg.keo,fbrUžZ2Qb]c-Ʈn$O6sd30LwCq}w_36&ݑ[M)ņI/fIC\.ߞfnw1x163޸.ˀ.,N-b Ųۿ7ƜMGI,ɟ 'ַƽƫ|d\?{،VGLw[;~^{GMUY(Fn U%V\1ᄮo>Fv\Nh5#xN&|c;pblg;#q]:{r3eiMS{rNGZWM!+JqfK~IM-ef3>jNYY=9%XU"8ؙ3-]I5b=Q΅ܦ5IHg5Л1 =8tٖBk-oJҳApe VsgE-U3Cz۱e9ME>sVt-,K=:%@mJsY6`%Qe:̕&9t7ZI͂T"zTx1V3θ>c>1 nʼngkw3m.]lO%c0ܜ! i3yLAjJ/wpSQV:H||M=+dnɶ柭SJ(J%s1_SKo2V%żqn2FTH8p|OXόfG:80 Uds#*zoRj 6"7E 7 jTXLv,/ #)m%ԸFi5I8mQKJJ073e\uMhx BQV:v2.f][⢰jN_3]2rF#XHMTKv%"a1}*|c29ـbg3#q}VLjs ~0;rÆ5=INqAI\I{L)] љ6[f5"y* b֞:SG;~ Uds#26]9@ˋ nqnٻu*7~[:inM}==?0ѷN2_py\~j*ZQۻ~5!p}߻Mk݄[v5͛k[)۳O۠o#_teQdiEbE1m#'ܒoY4#) eCA-.եdʢz}͝-FKJGbz!sj0] n9$)^/o/d[%.3rT94B_]ꓧ-s7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp ҕ(ňXAҕ(ňXB_7XŸIps7XŸIp;oyz] ף5ݛt55e_DTPMs'Q>lz:1Z|sg!&22Bх&K2nJ!)Hvv#l乤jkBujwl߯I@mOcW s6'7X5t5~h?_WMwaǕdrÚK '/d4|fٍIP,ps4eI務\ga(s 7KfiM~CF:|2;^F\.T[ܤ> >+KU&G&oӞ\ @,M,Hk9RJL]$j>9`_/Gká#?|n͌QG]z8t}w?͹泚r=y?|Ӕ}V.k?^/)S% `'pvŒVr2,4^I(;ǣ2ơcH v魝RS&Ifst/g_uydwBF:2{`-F/poI>r.R`EORbeIu An0s$~LUyG}'6JjK>3S|t,JO.ą{Q{;KłO(&(-pZF}[i^A,z:d쒦xj,Jk5#;FէrO%Ű:^ȎFfC#)m%Դc#G) KdG{~ udv:23A "InvH J`W;m .K+=1NkU6+e)m>Cv$'f7ctWDߔ.߽~w;--pG-:{6Vr;pf Jhir62Kc _7 ׇCF:|2;^k co2-7ە&\4vmɮ@ȅ3}0wyg{zܝr:23A`_/Gk{~=G_kZbf;gs5I~N D*"%#9 9$*f L>JVqt")g] R]7͛Qzm*\gr vr|& _ߏ_دbB`/oǯ lWd-3rVK6"J.z)U a!L$ GtB' ߰6pޟ[ P(gqed8K7{^ڼN %Uu-ZG a訊aá˪SCQ6҇Ky}ԩ|6bc㫪7C a v4WڃeE@FmIuzUa=7c^֮ӳ]~wsۃ񉏎ިDʭJqfS:/]8 đc-˲8J~0qb~{~Ci\hGzF5_v򵴥plZnFIYIrl?/0ӹ>(pOuV35;lʒi{+c^1Gv#6c"7Nf"-FG(WQު|)K;_ Wv-G*|dC ]xdw+!׌vGz2=l:9V z<dʷ_̏o['Uḃc^1Ųx[pv-G*|dC ]xdw+!׌vGz2=ǃl~9U!z <cʯ_ ̏q~Uz^fsB@ Xο7#x1V3θ>s~Uz^fsB@ XόfG:80?KceӔ+츼n@4xN-5NMt߷VϱnMu ttdofsB@{a߷v=7nAݷvkꑮ]tMtMt]5*ZQlvjF;kv׻޶k5{ln?Cn2_py\~jVbK X`ΝLIEAA֛搖8`rMp;t)GBiWuժJLo#_tm/L`mS5;{>ȭ aN-JG*4F hج{*/H_m LA>Њr]iE^"k2)JWƭW>ԍ{V ?zM;MMhGJ۹У'-ez0peb=;821B6GN[A"`t(?h>dY^=ol} LA>ЍQ|Ȳ 8rWjz[& shCc-9폴#oq2,FB#Eޱ ?X|{cG9m̋+сУ'-ez0peb=;821B6GN[A"`t(?h>dY^=ol} LA>ЍQ|Ȳ 8rWO ,Rge" *' fnR"TcV,0R-fvj$֪/q}jo-zD-jܭ)[$'A u)R/jPgR N$.^Tjlֶidhnݮ۞Ͽې@mOcZoܱm'k6k`5$Okb^=d(i-2LcXhI Su2;WjQZ(0n͕ۦ udvPcE#߸gu-GJ,r q5hqIqJ'i1}Ԑ\R50ɷ뺶[4t0dg#_7 ׉M.Mg4ׅ1X*Lͷjdwι]PmE RNӭ Gޤtjɷ뺶[4t0dg^udiv`7Gkɷ뺶[4Y6]wV~x~ ~mydv:21Az(oޭVɿz[@xn ~mydv:21A᫗-]\%LPl6AYHn7A]q!I]yXLR'AEMDFws&_ۭo21A`7Gkɿz[C&_ۭo21A`7Gkɿz[C&_ۭo3~vuߺl&P=)J(eY D%ҤU])D_CTM1n=u|XH֋tsu͗&^t6̸YrFLI-*U>PLi^=ݥ=b4ۥm*\gr vr|& _ߏ_دbB`/oǯ lWevA7}^6߃hڍ&Vg$Uji4ʩr'5\P߻vk~5q{x< LFKO)D.`):g $7Rce9*.jULQ):)SSn66 +^vLj43j43W{, ׼E -B0GdJ. oƮ/~cC= oƮ/~cC=w|P{Q0 +^vLj43i$DzPrۛR(n,f/t+68K+vPKh(J]a$‰5J~uZfĊiQ܍ ĪA@\!f;Uxx$e6 Ce=)Q Z: la'+ln\6dU%MFF- dr*O˵HjJnyVf݈}k~5q{xwk~5q{x[k`"ɇyZ`%W1LJW1NJAe(V(wYoy;&Qwk~5q{xY_8eɝ5\10;Z9MzbАOqo3YNPɴJWRZG~SYwYoy;&?., M9ieEDd20OSKSO1LMl Gb1^@HԅV=I"1!OF"{{7oS[V (>LƓ[9-U85*2_M1uUni ˬK\YN.L*%R9[v, N({gG9Slkp#byFxSgH6ssʧjr()kkd5Cgo.u2sb(ˁq6 PTM5_54bU 3]d*[mUg 9 NW 5K>LWAc_.Tp |Bx[HL>!<-?=voWfʔlN:t߲k~7i7m]]7ikj mɝ]nlc"]w0|g ٣|ͥ㩖{!EeGNMԪxjPS@ɥABXM9 >t)4g5iv%T* $+UN(*թG/i/hlMiVPcۤ@LeNV|+2ƲrZA"}q|J*Y%*(NGK%T)Q9ȥkVJG6{J/uVm]{t^}|l,̿3m}X8,O2H>E`vGȶ־Xtsm}FFf|A6x̴zĚ^,,:2U㲭@ zRY)BPo-(Oye6ղG+PgooHk'[Krn-x͞tVhM>JE02;B'bT"9΍/.$%uTac$FZxٱlt5N#kM.%w7uUM`sRӵkrP{o,_y.su{P*v-DƻuH3Gf&S}]΁]ܩs_'ɟ6 k}ʗ5|4~~=~O_ b y'/煱^r)glîȧޱ>^MMaqo^ā~~G!_۩wsQX B",:NݵK+ZM4߳]O^<>&ful:f|w1dIJohEOŪQJT >zu 8x:;k1oM8t'/iwkDE3ccVo8; 'J]ik-$vÈ8R7M֏8~ZIFX&kVg_(r BD}t7q)jq2fAڽ͠~/M"|}O^<>?jPt{{Ma(דHp$q}]=CRwGr;JjAn;폵M"|}\҆ ӵC ˭tw.&6KU>yFB 4xJJe+rex$0H4Pz:,u-&p#6R;,jQ]Q,D˙V%ߠd*.Nj Nea²LQzn;폵M"|}ZviUbڝ/F3ikjӋ,7͗ ;\B}u 5DeQ{LXٞ.ޮpc"żK7?w(yl}:n;폵oM8;,[ĺz7xgTc홌)MѷM7r<͸m5w9 [ if8=I Nn_u\rN}k?j}8(hIMʆXusb>+-H;R1u':7:AVuZ 8RcUM)R߿nƚaя;Yh ^HICLm (^r$!$WݪխѥjT~u=ˑLOA0ԧ'GeKl P%$gꕦb4ԷU۳mM]։Qn|#.b+kT36$qHc: : RLW,UHڔVEI8ݛtخZg_kkxvy[։Qn|#.~5x[˵P/eK^5^LSļx =Qk'R*aSK^`(馓ezNs#.Jk`G_I&grGUOnw{])0u;ߍh52@wZ'EyP4oO+o_#8lIs\a׌)Hno\ |bG'cwňIJkSΝ@P։Qn|#.~5x[˵P/z0KJSr)S\xX?=NkUy'lC;wRaGLefjO[%Yv<^.ĢƫMN2s9+ D[I*,*ThVkD>jo9##R[%2ndp8؈FQqQw:4+ȨçkD>jn )BJۯ÷h=< Gg7gjVc(w1o(ylj ,r JNQ mDMѪT34,bJ5쩳v7"jmόcځ+}.v{EngOQkqVqby%>+FMGIe|"ċ),ZijO1di5Ŷm`ٲt&$Mv4WxŪC#XC;M8aDp9[k0w; T7֯4}jY0k5^@wjYדp_xIcWf^M@{O67[jN3k;ܿYJڱζgہgFBK ]Mq"vRRMVScÓ/.:KR۵!' @O-\ы(6]EDml)a%znݺL7ZE,>?O 22-j]>Y%mJ@/uQJ!Ү\NS+ɦ8ròu)e+rK:LgqDʔ4OSMH7Ze@4>92㤵+[r~. ]e.=\QtFY_vš&RWۮ{n΢S~oYƨZvtORiSQ}wqD2:}iɭu2I8TU֔Cl0ow/.#5;06N5MQY19s# YCJ$4-d3J-sͥ:UO2 ۪r"fo\ú)r[5u"UH*{~*i}jg O~I|8޴, 07o-hъ0,'F$'Wj3w*0U8=k.[u= RR]ykE c5[[II,8R^O7 n*U߫W!֩Vs KۮJRGnzh1,c6+{IްAtĞQνIR'9F56'D_Zw+Ku  F/օf㥹 1X[]fEd֢b$jFn] cnjTU~PC,rFki)2"Z;AMХUYj}1*.eVru҉JThO@qm*\gr ]KxZ)us|ҖYIe YЬhi4NO 0e% ;OW`ZIO+QoRO?Ð/oǯ lW!07+z伤}gAlJN|?W^ ?I Q?c'dJ6wFݗ@W(۲ߓ 2[%v\_{xA^FK{Dnˇ~O+oHmqy-.< #%"Qe'dJ6wFݗ@W(۲ߓ 2[%v\_qK`UgZd5-̙MDCCI25-k6iOu4L植%ԥV;Q:~Gϙ푟N@ ٝ~pG#]e3-R3`{\j4[$_7>j= d[ 22JSL,Ay3qdQF} Zgk"'ll%̗ d[6,[]jqفMy5mdl= DU1)h'C" FNd {tqvtZSLedX4 G؍2A6J>po⓽ k;\Kw{?SZNCH7^Zr~y0>,3y8&oÑK #C ;uJbv ckϦx]KYڷ#1R.RqӒ Oko ]9 GdfeGL{Ũq^#6_'e!JgKp;67Ĵ櫀S'ߦJϒhauND$RN-("G kQ4qRɋ Sly!vwF>˲tC)nͼǏ&Z>JC"[]9EUm"3|S4*X7ŎXg ]+- kha/ʩ6:i6v Ke Yl(*e +z'CQ&B\Ύ&F.e+#3_qJ$Q"&ccnP|YK*Iˌg?X7s=r,oJ[=5N,E*L,va{ OUe1Yqn?7(^74@1M8|ӿ8~,Rt~]>N._vFȮksȳܣϊxXג+|;>_-<b; ϗn%$/O}#ݨ U4|i{v@@wQ|3~xv 9N7b0ɶr#*' ZG![sg/FºG˘eYA]M\`(1Qbs̿=Dɮn(YFqN Uqwpì/~-9Sˎ{Z'&ya$t`rn(9?I|U}]ݕ2zlRۣ|YLZZVv&(ےcD]"֮4 Nq9ȽqU`JiCNmQgKΔ"!NF#+I"1">*f؎d4yHɮk6A (','ZٳIb&͸EN47!QiNQ/®E y%͙j8@x[oEq fh]9)HS~rr9Zfj++6\u}uF~_v>\:q{swstpscN$?"$2NQA{>U\ \9Ea6puFW_nfcXx<\$B! .ܮYV9|{л Pv9C)t 2=4xj-oud)YSclogS[wzBuKY p1YNG \=r61 =,xE&JF۟|NX۝ȶI꯲84*X}?CmdK ojj6u2V.DZHk^RܰEƔ%5tYMWEŐzpv~m}\i"n;mɿ(ZHy38Grh$7Uᓈ$vMp;2YtG#tSqnDOȅ6?q8uEIILjm&K6VK>IŔZaKreZ?pwfZ4ļ~οbBgG2/1N$o%ړJ)R$gv{zrq͗{')wB?J_6&Xb u8VY\YH;NMxHχq܆B+1ipz{籔`Fn`Qt%{ Jh8Gb Wo a}iT"K(n(%su1f%k= 1ƼAij5'K1J-/ftRv,DŽ5[+.ٔwE_[% |.8WG d}kv6ZNww3x$7jo*/1^.1yڦG,W%/N)-J޿QgCR8 JZ4E4eĉ,77(Txޏ\[VSسk&)]y=?ۓ:=TF8z@i,qۙI,ɪA"It=U$ɝ]\ e~?-$+o[`B7pWpF)`x]|(FVIʲzɤ!VMCO%,!ݗz[$K{[rU6َym([U.Sw_{t'6凸nOޏ1s4b'7ɖ~%hɑKjll})\RBD`\zMEZ=̊$SK(Q>ϲ&Em_Yɻ}eiګϝVi>Ñ{]p6tX}"ƒ3P[]E8N ,֪՜2U~"蘯}z^x6K^Gp\%*4hūVd"vgK̍ޏ2yhٚrۭJ*ԫۧ߯~ If+wOFѤx R;n-z }캚e-IiSfԓKPQ?q2u+ۭ=.O}xA^wRž "5%C_9M"Nk n=w; 7p+!&q~XSOL+NWE m_hQl(\&8ϓ1[q)Du4Zrڻ_ |^c{"Fk El1PWhټb; uvyf zjO[%Yv<^.Un'Xpy4A3+* %2xU)}xA^w+f񊂼0;@%\[< N,D)JKJ#'GfE]&$#LQmưۋKEkZ$igW*b;v6^-m_Na^SɨֵԴ^)T:RLSM[MNYFQ"DJaTOlq*:DZ6ZRKէZMݯ g]oq@ekޒviyXcFuTioRx#XQa'b m#L: 7 &qD[6%r4Een!fBUeF9Y Bb"ji BKkH Uv(|7źB]SyI[T%Q:/1nSǍ~kš~z9mͧ)G_5>v8U¥a}/XZKo)5uj'eK }mZ+ƴ&~/VZnuGsstњ' }]wstR9* n$$\?ź@>y>SyI[T%P|7źB]zю Mwhv-N*-Bsw2}n.&`糀t.u38]w) GN7vطT'o)5uj/XZKv+kj2qmUZioحm)Xzy#+K+P1LB1!KՙyB˥kYB QcbN2!ʵRX+ӯD3QڷI7(n6Uw"V$ V7~{vMnЂ CD_QV=]{+9ioOhoۺv `9I[̲}Σf?چ.ӭywo9֚415$HfV RM5$SjgP BSiNXsr".M5UdM;Jj_B( 4WRzRJ0Zew\ \tlj[+Mu RQg]"$: V&̧<hT,Ru]^ɽ TPdp~mh pWmFTƬč ג$}&U%; D:FOTE;@Svڛh &.n`VCeEgJ1Ky 5kDUlWJ\G߉U7>Z}Tϐj7^7co =>csԨGFGRUE)4]:{*"TMlG}zU7mntMv}g]u˒?MX8AsCjǏr*?|X|7qΛFˡƜ-ݲ5Ci[d3Iw _i+l)C:)J^rv9_!\ &ٛ1\Dn: w:ZM#{}pb>6+mΏz[הfM10n9n1kmbɥVE{[RffGEi,4(}Ə)ڨj>KrWrfы pvX-H$. Ile.-Ep[$U#jTVR̶w7 rmh)h]6+[]/q(wf6W^Tt2]x]e(z#F$v޴V!PUrC5pޜtIoi!߷"RKR?PtT$UjS\Ō4*:szȟ}6:_]($ ŋ81Yı8[wW[et4!t;~e,QVG+vǰC T2^XX^ߣ}I^ŲC]Y8u[tJed{QH*LnmT4ݷܩs_'ɟ4.*{iÖyb).p1Va7tL!UJe]@ᄊ5.Zݷܩs_'ɟA7+ؐ |Bx[A_8YCrVcjnkN>Nz[1hVxSH4eILv5"%j֪wu-Swt?-g V OnEzle3~M }ہ9ˈ{綋)Ç}x};-R,fy9,ˎijHrOvM8G[k)mY^/-a]-mBq',46W.MbÓ (NJ$wM]]X5Yl>t?-gNKǜ6+00dv-,znRLr1i=#2v8Lʏ;Gb76[nT 鳸![<ϱp6w2g?n4*dq\hLYY@e0z4O(&Q*KW+gjRzv^tkTݮ4ŝ6w2g?n}UlZj?-g;e`3WX`ܿ0ȮtySGR}Qj` |M[.N$fzBE[T9"o7 & *9Js N0$JN @6w2g?nYl>P/;HZ!Kc/"M ɛoj8>nU,BTio$EW}v\XKS+ 0:le3~M }ہgGuLp.&!Gx.;QEsc6M_sqQQܢgSc:N-/vtxZ茡B -Jn-s$n"Lv:-={%S:gP0WN,l&M }ۀ鳸![<ϱp6~%hH3$lNG͖j"QNQQ˸+4SPU̸J40s`ZϞxs`ZϞx6o|!bQܹ%wV?,?>TϽZcz5I|ef+z+L+=wgI-9`:-Ye bE"5L)d0xbguz<90xbguzI {٥g!k)U 'vs/?4>b8lO۲(9iW"TMg8}3,WEMXID(sF ;c 7&|\GÝ&|\G.g`ϲqmɦ;##`}++FhHÏ>-QSh$Zv/ͭ"Q~HnNDr&RL8z@G+MMj|lAyHaޟCb&.k{1A&nce}-65ٺ4`g$,GJe:>4蝩BڎGⵉ=G$6Ke~jH ͗2QYNܨee&obj t.ZE eA]"w?o8q7Ӈ5%˟Nk¹N~9e/ Ώ k>{#Ώ k>{#⟳oӤ ɖqѕ6RNB$9.W#)'MJ2[Su_5u\:$.LOwwwsc.K띎Cr7p?[)):txL+XqtxL+Xqh@Rҕx~BxJJU8eӑ1Haa$ɩ£JTxTV~Ľk.9ľAĬp2&'RwQ@wV2n_oɌwXK0qX90xbguz<90xbguz( t5&|\GÝ&|\G_/Z.PXVa 92kV6NKeHمIb9~7S8=Dd*jӧr-pꅱwBM4U-[UJbIMmE3;[M(F^E:G TtxL+XqtxL+XqodBq`@eJQlIX؇%jKRP]c8f 8jEtQHB*rq_PǑ5ϩ9*8\]ngouUtn<9kQ8ǔcL{ܽp ?FEͮTdX0$6c}RR })i2̃Tڦ=b!`klO{='t3L-&).44 I>)),Km3T良p<|qAN3H=a8O> <p<|qAs |Ƈ ?a8O> <9>c? |Ƈ!' `dȀ9>c?0Rc' `dȇ0'hy{"0RcØN3H=0|'hy;"?`O>X0' g{p||1 Axy>xC 02d@p||1 Axs })02dCN珎4<=s })' `ǏN珎4<=a8O>8 D' `LJ0' g{?a8O>8 D9>xC ۃr ͺMԽ#FaB.CQo4޻"ejH)JE$Y\"J1L5jvN GO>-Ƿ67RA HN E[zժ+) )&`%dZrĊ+D3ժuj:|}nq prh;.tߘ'NJ.SGS(%olv3lTOIQ3[f^lj(<>7ϲ!_Tm=rW[,~iPEurtÚ(xmhku5k9K^lj(<>^lj(<>n(n(9Lxμ9Lxμ9K9K^lj(<>^lj(<>n(n(9Lxμ9Lxμ9K9K^lj(<>^lj(<>/ [>v&߇<)oPؚ;~yLxbμ9Lxbμ<)oPؚ;~OCbh病1}:G病1}:G\OCbhs–>?^lj(|C^lj(|Gs–>/ [>v&߀yxS'ء4zyxS'ء4z/ [>v&߇<)oPؚ;~yLxbμ9Lxbμ<)oPؚ;~OCbh病1}:G病1}:G\OCbhs–>5vup)(dR3hba&FY5뤬*u(SuxWu6ND#Ikԫup)ȜgnфG Nm+mq\QnkJYU:XZP lTlF&_e שWv5~Za@wjYדp_G}̿HVkf7],I>Ǽ_/6gٍKQE%|.]>zϬz[bCU&լFAILnZWd 9!2%&E쟫d6MflSȖ6.BΡE&evRUq1=EҒڏgnoUIq{aOݖ '5DP)E :J gl(TiQr\͖6]Ŧf~ =o177*Buci Qf3o2$[)YqO*hahk;+SGuoIh#W[+mɸb:# fWձMlRBNMaw=BP@[!dgl E`8Fʸf,Cb603\#^7pJJ򣊪lpVi=bc%{N`<6RGξ(7 SչcE+P-kLElHN~kQO^nfܮ(}oyhЛE+o/=7܊x=,SuUWS]Ř*==F7 V 2pdJ FȓUk~ R$kMB`ᐹ';G<\rCo0+d+m6]M8ݝFX;V+cygV|[\z$.*%ISɶ7kd\~&CflՇbDfKNB~࿩{ UuS=5{$_zhrq䦢rI-x$v s#}mvswH|є?LQ-(wA` Ei dqY<2LE&'@$H 2icHԦ{dZ, tD6$ה|mƍ(Xw&?]Iw+n1g6፭;w@p7ܰS+i b3&I!>cxsI'M9}iȄZ/::rFvZ`e" 00¯'~{|x_z8Lo!(%9M1x[ɹ]Ȟ?[9RB*-~( ݅}3W+:vMA#'Pɥ GdI*8]%)D|6uxkkɳ{O{z*j#7rR9SZgno[nB6`wGqP4F܅kQ.lVAn.5.\&2l2ÇFtT%̛ HerH #OXuFu$gƖ8#qv_qi3K7C[ecɱ_\ 2ڗ®巉`"4ɘ^ ̫xЅ!G0'xJ-6%SqDv,/=GϪ0[mQRzDX,TѪ.JBg'kg1--[ywY;RZ gvzY!Hb$DPDHR#s-gAmKFfW¿{~t _c 拞q?@~y7:3:eެO.~K ^|]nwl hɅ"UKV5+j@Q\S1Xj)q)\q] ai0QY)8"tW-fJ~Awsج1 <4/8>Avǃ}O~N>"| ?}C4@_ MEpv.EHW6!ۜ܎,IȨѣݩܪ\]L+^O r;N;='G%9w/y[|9qO rowB ckr{su`{!>ک59҃}Zv3ReQ}f/-9[<[7on(-QnMJLOzrI<0IZL!ʱ+ѹ5S8N>tsr8+..9 13{&Fo[tǼlLZ9ji9Rq]t_q 9Flexo+['zD: f ahu|97( ֹk9nӣ%-C[CAWV\tݜpc7n V(]pӁQ\,'!'7[aqK3/FvIW( DuWiĆy 029b.|wMoT:ߖmORѥr)s(->$IaGgW*;({Y82&R =1a Ķ0$竽쫇z:ղkp;jʛȮ"(5^#$ڭ*k]0N`-9iFߎVxvxEr\_:RN{%fyq>Ҥ}H)20dz' _untR}ɈӝHm%*#ʍGL-8ue /dW(LɤY(j)4gqy_zu^?{jm8IMG\YWerDi Jy<]I :2O#؀7K=eh߯7V绹oɧ4\[ww!dD:Fc-n εeǭS:LviM%peKފcBq[IU Z%&o ?^|8ף8:? ^,9Kǟ@ ~yrw%E ˬ,/}O5oYepM<] sѼZQnis/.+A?)qR?1*)V|#sMFbv8\G] ͧwq9*t4x׺e̲|u\~Ei材u͵e: JOfq46J}ei'JN.'J,D{oC3;PJf7$3#2NJ,6Y?[J;}ήaQg3 k.Gt G.&/:wإzAS2'KTQ2.čB]*g#[>o#EmJf3Qa6 ټ)9f{HK'5!r&e,swn|08'" :Kf%T^(n 7I&E;GbryR.T{:𳝽Q!pze12Mq{~MyNEhƒao$d"Íeo:Oq VyD#3[V .bvG3Eon1eiwI7XmJA%_m$)SI Mp9i|v,E8[&liKz1ڲWfO"$}9ZKH~;I{QDՓ9\t-eFzjpt-.<ٞfN I*kDTRWW%;Y'"EVYvXi<]%ǃcN;S-+]@$[fx`i39-'Dž 軛n2D}Gm[.x '3n"`α@-,Dj0,rI9=ɏ*&^S$kʕHVT(` G޹50Qu36|uZh1 912AH88#ѷ]&FIf7%.g!GǥIw >&|O%UdIA9[24¾}BDV%i0#>_Ow65ۮo5f(Kv:>YO9|şYs>+q5YߒeA3 gk$9`^׿40JMS5ʬl8XH*А #9Q8Š2QŷN'VV)ko^vGjfAT;e)VR婮Yr#dc^H'H]\rhiQ.YUYYDm`rYrKH-<71܇Z Lי_-t-";.ry\|jt7PeNCm[MMog<9|wpzmVy'D#$]y%67yԸNzۑܴ^}|.u{D)ۣ܍oɣt7f)RvYMGjo#'_2ɎU[&"7MW v,]s-q5|ĄreLXĴybvGK:]I >K&ScGg,nGM&"c- kzƂ ?)S<\/̅Prl qS9ŽZ?:i#,@]K .#,WG#;<9Lp?O27APrY()LF'GUh+؏ 5K>LWAc_.Tp |Bx[HL>!<- +}'Z7S"}7 ȿ8gJoJoGsszs]gxyc0l^2̎ޣ}(ϯj*.7rEZbN\Jt6j,N9A`ܝ/[ZuJw95Sy9Jܺ]|>8e5&{\pJO,a5ܟ$r>i_W3o/FMv#'8ڮƫ8;o,8]H8q-ePDFH-\z{;2KSd"BJj.rLٲo[ߏũ[qEMp5ziCggG~ ,du; `>\Gcrd44KZRz5XD$Nw,S 8Dl5QTn̷f$l\Xv;qc6ލmr޼Dʂ]L3y V;Q)'įy' u5c5ZLgsq+`+z;\c3Bߗލ:KZ0osĴzY!9Ƚ8!']iN8`Y i7o*b]I$9/v*V=5JԘ$uo$قEsre^6.&ΤHBJLllHmmoht)E'<KIjJ LII}v`kc殏K^A>*idf:`ll{/=%2GT0I~2s;L'a!RSK,-:yV2m ' Mkj^KosOG[؊َk@EHfCWj$3-eg#-!,;Po5 L f ]aDd*)1B;ո~My:EzEP5j*lw+|"El*ӱ/–u?:$YIu˩&@qS]Ip%ńK.H&W [n^MN))^*<xlM~kl.QyF$B뛋",s 剥0 #ߥb\ 8+;́£DI]f $o E:b<M:ӧޗ]A}ٌxIY\Y5gcdM=B#MI89gFlV$)v9v7|kǶ.,NF))2滒TGn*^4vywܚwg/?\0c_d+@KGHշ>v;aWWt(٭&8E#BJj,W&ݿ۵fc[^Fm:>H#jw58ޛʊӕgU1asɗFjOvmue?Ch/y6MT$MYL `I-*3ı8'D#1}: m7Ѻj*ɚ!Pr9,lFJ/J=2N@ѢyWP|Ӕh5^n(n:2,Ke~H gQFNܖYe&cMju[-= a =]<ٿߒeA1F̚p8ҔVa@lmJpYux/Kyѐ2g,vrUĤڍe7O e4b(?Me)oRIT1Ɖ\Sx;?P61!b'}ҺZby7kkU'ﻹL:'*&4yۋW2i׳g J5>SnpOR(qZ ބn$okɂ)˜'D/%r"DTtHgoէ3caYpΤĺV6q!Ea*X& *0DSQtەwV@Rf͓}Dfwe}v-H߬& t/ l{NBSh(Z+nP /5q$*2ң lU#2CJm]qcNǢMjTSB";ۓ!bZҖsѪuWz%H$\$Xsbat&aĬZtBue4q&F7L|#64_Pi9hE [޲_guC ]%3haL\mA֋5f=SSd;A)MfR%ddگ%W:@A2ȿ׭aV(Xɯ %JHM]I1pbůKs7t,8aQI')8ºHѹNR ,7h bmN.S o7% wO:2CL].ܷNJ[Q5%MG"{\)% dwwصſN9gQb5Ƒѕ.RG(_-l>l7sQMڑYSlX"\@fmz? ~*w<)GD]DƏ;qj&M3:stqaYƧc ڮIEqc6l;^UwHl`)6W}& bwyܚ'MpQrշ.,\r$O HGvx1-\Iݨ]J?T}!au&^>THsIAܝ/:b]/ћ"-5 EꮌjGWi! wic tE D!~M6+(.T/csh=qDI OhQvڵVpk_ɺjL_@jNfZ C-!ؐFg~\J;Tf y6AMv~c_ĖJB%*{b<}+Euu*~_{aLLWҖ)ɩBb%4 X"Mnv'G$8]R4 I dp6+Y)!#QD +<ݍV 0әdv<^.ŔUnFXp$[)*,*ThVH,gX]܆1wwvh1=$r#]kow7fi6]葔Dlsyr98݊#:q=ޱSާ^>m9/ۛis.xo_#'d\Y&1rJ/O:^+5,6lUDp=IE,`y}uAr_MGk?tE(OW8͹rmNN`ۋ!2>wJQ"p$Au&GWY$M{;>GkM/hv79PɞZLgq#-sp]\jWwgpwL4t UXuII$HUV8B]Jv\lLSvU[XD*PaZrb*ۛnzt\[/%R!iUnXӅ 2!M`̛o,F)GM6mLN$6K0cg%+V?Lw?Ȯ%i{;kt7N$'w7J ~ZIT­:@ N觍Ԣض[ԒCEr2Zj $%%0H8WX/tJBD7.w5x};s~u囲+b]\IyoĊ#U BƈeZk_s-҆clgqB@k8@zVR1!+m C]}6 wEpBA9a$G+kŰ;6uxv-ʃ cߦ:c939ߢۖ܎1r~)ѕͬ%b1G\q)`&W$^T]^JTUй8P>C,[:iL@>yp>q:1?C}˜}~_~߼*Ӥ ɉxJ-e]I$9.W#%!r 1J2[SCLu\J $!TL ;%bEHlo\o-oe9DzfM#IۍX zȭg҅(}`J4<6/τ!w\Lw|)˞y\jeM*q&pK#'Pu.Yr^?͕ "U5wQxtYb\kNmN82WtJ!ƚe!:[-n[(g:3\ʹet\qKCY&SN,hyDl_:P~Ck/B㉷YR; &ۋ2w|u@eɰWDA=9VMGS#Q{Ma$.'r*._q)(Mdɱe JtEc$yIN>+׊O Qm,hyDl_kvU{ΐ,v,BL싱/~駼(Ypaf׎bכ滟 U*3G+N-fC֑ PVm8%Ho{F_0BlƏ_f\gekoZ^ovqEW#+[! FNr$FAcy^2XmEE7N3҅(}`J4<6/5Fx`d^jFM"|ll9!HrI#GdCy`{CRDb\QUAyk*2drfPbuJ4<6/(Xؿ[hbNV0%Y\czխM"RTTlU˶m1ܶy EФw.*Q9݌4r 7=M2!wż87b!,%=}AλFG,{\!e IJn>cOzzP~BƇF@>sf~I/qƘI%1[|/#I%-mO)1eJgڍN>.V@w-t|h<\fʧjsjJ=*cC#bmX҅(}`.l'lKp$Xa$c»8~m9c (y˛Y!ZQu d3 T'0GYP&M&T:l.:[AA7u~h/Qg|\ 6 ގhϥ Qm,hyDl_=VobGliFcC#bmX҅(}`㯇9u8 3g.kFwrÙim)S]뜟/! EǼDiܼgʽ^o@>91{IT՝ܶ<˭hLo6_HjSzԛԒiqc](h=SX\hO7s]_ט􈿠s]_טs]_ט􈿠s]_טs]_5Bw Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#w Ɨ>dn#ߊ;+L{$xt&K32S0Ca˨4SjSБs代f•ҢqKg6nݶ@9˥9,yI/FgJ8%CET OlfҺFrvumsD Z)Ϸ 7hoC>$Opu /\p$Opu /\p$Opu /Ϸ ;hdC >$_op|CֆG8EZϷ ;hdC >$_op|CֆG8R[rb.Ȯ]0ObyNq}u"EŒMt{22WDzJ%o*Ϸ ;hdC>$_o-O)1'4TFS~͔7,"r 7]&q'88ݾŋI;T\,EZϷ ;hdC0Rwޓ, 85V쑛, U5PyՍ\7ɓc!Nn:f+=6kmA|eAiw 7 yifCܠZB5§KwAZfR3Z:'%SCZ*N-K0n  ;j,ɸ/$za"'dƬ8Juͤjαe%Cw馾b͚/KJOgMPeEa:E֤pxE42Lm#uF[vlN6ۦiܜ^u)׫;6:Ŕ mߦ5&o6h/b*릕=5B6xMc  &SZ!։IlM2v͔%iٷm:۷۷ni;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ wAq۠A[߷AƒƷn;xP~ N"{ Tq҅>SS*nx+[qș]J46YIȐب}hR.XZvTOvAqۡ8Ez3 )}§ΦTWx#3yil!QP!L8\z*쩺:֦6,Zv߭~nMΚk.{#}Ƅb]ۦښESn}ݻmwiMOdo2.c0^m*F9 B ?D6z;(GTjkY-~*q/O]߮JZ(R/ VѮec (9Pٲ/c}h/R驭f^hǸ=tN~c)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFrc)7 S3?6oGсɎf~lޏ)O ٽFuѸñK)9DAA^=5'd|dv즿IXrnlSYgam hJt9ќ˫T&:YP)'"R?c%eE۲&McئbѢ*kOA-lJu4f(6VKM%9'ljEMBέTm R[u#[{{zt:kne n63lJײu4f(6VKM%9'ljEMRέyTm-FFuTݴˣ?,mG  cj>~kw豵HG?5XڏC?,mG  cj>~kw豵HG?5XڏC?,mG  cj>~kw豵HG?5XڏC?,mG  cj>~kw豵HG?5XڏC?,mG  cj>~kw豵HG?5XڏC?,mG  cj>~kw豵HG?5XڏC?,mG  cj>--=e#4輥@eT纜_ke;Ul6'womUjj·tKQV?3Aߢ}"%&[/,Q$[inj=F2'giyKʉu9 &_;L#Vlnsv]6nNoۘ˶.k3\9|oRO?Ð/oǯ lW!07+4 fZVn81\|]:ŅUi-\QSEfIR&~,JT"ªp-\ "*h,*$GDISҦJ٧N:v<O u\xx2ia^)W ]{^g!߾Tso?]JXj{4k ,>:%gщ %up:LO U!re鲗nw/#\R 1_vYrs^-@/ )shKPP(wi{6${:{VR]wݳMe'sW;4xDK!fJG){  z,X0]i-A@JmݤmQؑ=2ﭻf٧N:v<O u\xx2ia^uy']^˗۹~ ƄMܴ޺w_w}˞A)qߓOs9`O)7jJq:i֒.T<@œ Tk"ēoz T+x9n\T fk)[plGf-n븐-mT̫kqdZG.1-52MUskY:*8ݲmxOuWʬc%)XYm\,v1K9=[M˪wWmP4<\1lN1 2&uۋԎgeT-dh8J888zL9+xϫ0!tu^.=q](ݭnK3С(7-WO'rd;fY ʼn,5Y >k?|EG^.nXN|''LΞ$g%w'›}@sAVşWc?6}RKqf9]^82AveLiqKIq% E2ab>%&3MĈҖght|AVşWa [}_I-]YvNTd\U48ʜ|ؓJmꦧA{n[q4Ji,(V-}s, k 4p7GSid&ރn6q8f&˕;tR>@QL[k,Nh8J888zL@Mķod8i% 9O1dw8ȩ$om153D(,[<مV{֏Zxۃkkr|FpZv۸M`#=k 2Z +2e!&u1CD#,t 惄ニ>ӇÚ,N1s$k-nq&'ˆ{N"ebضtJBc~Rɬ5t=5K%VDSPL Y%nbsfzT,ێi6xh=c"؝&cR@dM*9d?9lo16Z;J$ppqgpsAVşW`/$%3@[p[%d]ԻGŜǻf^x2@g%<"gKR`OdxJsZW-ssAVşWa [}_ILlu3*Ld)4,!  Qro&{N Nz*_{F>M;됫 4WBOcӱ^ >Nz*_{F>M;됫!n{;tpvֹ$j\')Bt:yQ('EPuO*fЧJnNXL -j>J&Uč{r 4F1eJFblj@<ő_xyvgoGzFg3tE*"nUPD ]̸ȧUJŻˆ p`ZQŠaߛhG + ~o_(-}֋ p`ZQŠaߛh+F}n $Ԑqs64QwR3!*zm|$jeQV6nأTE*8Q_ 0[~CGinFE_Z[ %\M!|k7Eخf8o)&uNDQ\z ]\oNp GDjRD[q7s6v{YwgT3f)OkW ߾G8IQC=rBjlmֽk=Tɲ̮9JIȩ%8PΗT٢nZ-.w'_rcOʖh)Xp/&Pw]nQsNâ#@R⛞oډ.ELIKP$4[n= 5w\[lC=^qn} yzXEŹ_{3aw\[lC=^qn}Ǖbݗ 5mIAr#YY9Gq-#xJt8wqRf:/}ܕ .^lENVr;K])u Τh1gbbi%c3LjS')y,7yWiecAդ%) !Mu5q&= TϭK0zg.-϶\YMZG9%d׿- .~)sZsyBDv\[몯=swg.-϶!/K踷>x{,?`/=sRs!+̓>j{ xC,feu:hRlwd4顩vi;єږHt_.Tp5K>LW@y'/煱^Ą_ߏ_د` Mfۜp HwCsɤ-6ʻqG}JĐOe GjЪdiS3߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_|xg_ggC߷ܶu|vt_2׼$-JOی#IKU9w96n«ǐRY:BR7;ʗmP_a߾Tso?]J3B/單5L5/8dmwvNUi34EF#pґhhc5UW}}kS+F?mwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{rwǷ-}@~<{r U%>b_|1gx7݊Ġ'"4J[&j}ήMU%]=BQ4Or`8N~/Kn6tݳz2vuvĨn˦k.K _ΖA * &WB"<慵PCG|ж*`}xtZoCNMB(Y!#ih[_e1\F)2|vW:'-4u+5fd4 Ǚ-ƪ`T8u8iߤWo #~Neϱf)QoG̷!LLS;һ{rQL3_E-bAdi E\M3X[?n&(\rPWp+C}!=?UT?u);V4y ̗GIn;SHK2Z:s6eNӣ%sŧGz$'wDu#zt3= A+<Rgl<[!$ ƾJ_%dxokf^xD|ntEc(s} uˬ~yPXcJ@:\қMEXM,m qP,)FR,UH [uD{{4A ^@GerJI~ىs:dV"•m(BYlN KqpW,ng V$b͋AnGj1ݶHڬm)¨"#hHpfҭ^|f-OjZL[&&$+<}mniօjedBiSjKiFZMt:^'nֲCT C:\En-"^;aCq;_)bKxe)7l~:h<$Z:LF6\N$M]Vhƅ!Ǒ87\m!΋8ہ$n匜%uf B9Lp7LZ۬o3پZa(*`yK%l Z 8YnȎZ넙7Ͷk0U7R:XSf<u->-5J[gM;*\MLKm; ;$"M ].I sKjMg^1FwՓ}2FVsI $Ɯ5#\Lʥ7#:yz4o,(E$s_2w-bz>¹lm»nL~鮼D. p2N=5&&a;V`}ʒM5M&Žv KMWc덌g9>N!Rڛ-YܢbH0x(eK*nӄkTP(hwmw'_rw'_rW({Ge0daa֎-Yєxi95#\ 7ws)RG8MPjmUBQXt Vv' $b)Tg4oL˲#荧9܊P;,򠊻#;Tp:%L_4a0$ UNJ&^~`9eX]bVd,<Q((F|(l:YKUKɧ(NI=)/NJ;hOmyL(Gq(6L3I*M)T[.˫<Q8UDm 5Hm+W<3 *0 |oRO?Ðl˶.k3\9h>z{~~=~O_ b_kκ|J"m ]F ǛڢA51}8eΥBjtW^jLS߿J;i]v .g3ޖ .i/ 2\$ gi,ptVAn2eu^,NФ7'1WGP9&xc?L`K2tb{c[ r_7\rMNGޮPyR8@!J}xRJ)4 h"ɟ &jmi.*'iQb0Fx$R{`adI<+zXjm^ |I]')2j@njYVOsEA[u(zRW/Q}ǷZnS|1d5EhsANYmٽFP#^?L^P'"%b(rQTK.?9b>zHs4SnTEs4#)>O!vCmeD5.g3ޖdI<+zXf C-Ha21do^ vb[Q=c)5xͬ'Dd( vVN5?. 'f'bB㼹dPȽ]3Q{APi f8lC$=#Gi&Sә,?}+g(c 'f'bB㼹dPytppĸY [j>eǒbf6f46cN*(g\ǭWi]C4v2wAZ=`u0ْ$:VpNh2̰ݍ؆a =d&YDS$Qb.oJ!.;˟O:NBysYءx6+ی4nd}Kg12ɒ R9l}㼺eX 5fŤ_ K{o+Ȼm6y|1)MӦ/yEh{VO6]c^=LG2*c[k hm@p8.[Bd<)ͷ厒J)0Hi4~d&#^ ~H4qcqkI`?΄eλaПq] b,d)klt^Ŗ^SY2œXHT3Q<۬*@5">9c5%X9YV{OP#J/a-ʼn(}#ȏ[o? \~֌!Lm1 GJ;c% GGdep /v/bá>㼹ePYx.OtpSߑ}p?󡾙 G JiWl;TAc#NW8brM1E,lx],)&_>dqRv(@-*K  ]9˞"}~.+[Y@(#qZ*ȿ`KqlIn*ﳄ^}uL[}XzGR LBl~қZJSXR,ねzL'ѹIzRiDK]ۍ[Ò'fE:c|ym. .Rߠ[Q2+9nB  Cf_68@j;%GL2չ1;=WvABWqҜIekgM=lnT4+s}J.ytQRtZ;)T0kOT{tzߕ|Mg#4:Z!<.< 62Q&ejO/#7VZ ǝrʧ[?_GN\C]V[ҮffsbKux~-{;"u0%uF|!]SH,ZFYjfYZj iT728o[tHV!Y3~iKg<\kxPmBW$ $FIw ./F#t<|Z;smb)iF BP,g+َjL]j'e&lNG/JQ(bkoaqrҁ>S1}pU? ]i˳,We%uU=-N~-z5Q{sz̀Ƚ5GSo>ͻe*[`b3~&T%g2[Upp3alڋf' GtfZ"'`]D{:*5-oZXIjDbA5ItRFSb%]j,*ŭ9c/W[ d_Xd00ϥ{Vv1*WG $C> .XK'#'B:MȢ?3#'ILcjk?gŲ# ͷybF9 :Qyq^n0W+ (<7 %7-9hV1OP{J22!bab$=$_1\Z[vInA i"FX2JSru0։yS-׵gw+Ud}A%ZC]T'L sXRE-b1WHKU7WZev_j;TNor^C2f\QO%EJ%ڑ1̤Doyi%ʵ8U!IN_p2d/xQZq:FzE%L. k֐TdURmBgfM) J$bN#dY GHc 7||Oo8-;)MGļ)]y[oG]nNq-s$q(q+0vɬKX;o\&Te2DEۛMmǶꎢ"7t>ў@N3k\MtFy)عҜmzTlA23n'G/5gcq@'›EӼ>иW%6tcяcbxe:xFB?ne&)S$Sbq.jnF#0MyV):%^(7ʱ%PɧS3OQU_H&t^MiY.-G&$(E!̶6I/} q" Ŏ/q#[aUzAZMX=7Hq\ʑ#pJ{r |דTܐC1#<1v;BcحU@qvD߹U7]aU3'^2wZ%3uEXb +wj'Z-neyWxg:-?-7UW P_Rbv˃\o.o8lg2MLiZn,ؚ}xDbrY^`eD*-j=: nXɡɄnȄ+2I)q|T&Qofu'KR gT(ɬ!*6{Y uj2Ӊ ގz3UyA vs=F(IeƤ<-=+Vx-Z>Dž -VVfYeb*9RY6zMoJNTNePCYҞdgfi#ְ;跇[?Y'; sYѯHD=¤3ˤcJ ڼ|NtΎ1;nx'۷nͻvlۦݻ6nݺiݻvm۷M?CM4M4M?CM?CA.ygSlpn Y,΀NE%3#\ʈ- = j :H (KNJN:LMJ#eQ} oGDӓ[)K"H䢗*LJ[(*Z(m*%Ч4Nͻ6mn4 [|uHZ.ʎj) a5)Ik5PLW@y'/煱^Ą_ߏ_د`wοHy}\X.Rdwms6,!Rzʊz|tz욀GዊqyG$ M.!X,72r&H\x ':-|;npѶsm]2Q( DxY?"I/NȧyF-2Yw=qi)CO넂P==J#:1{4"+A]jSx-Qt.q,_u{xQ?'I39T㫇8o{7o8!K#p ^9i\Mji"l,ag{YNFLSjs ٽQ F~<"<,ğ$G$@)1'/Y2.ޥ(ŋbHsƊ8 nWOPԤłܪiҮZ- SIC:HHGge!G ɩ5LJmRdxBB%TDxY?"I >?'I39y\T8@d{g17`7ķ{3MԲyB'I"wp;~f_mVxG2 5DŽhփ:sybΊNeWcia2)J y?Bu4SֱpHqG#+ oV˞6z͔S#Z7OräeZ5r2Ӎ*Jqrk؆.HgfALޯ 2hfoO[&AM )t1㺮~7(}5fm68KciAj6ANG6(7܎ݪe]CW\FM^.nv%7;20+hn7n~[5Jip.EV>˖$wnYT+L2SxIC3}FJz{R kywsYcFjX~Q;$m̅ V T:݋;?`rTQn1I^ODRV+mMШM"k*"^}#Ȕo}-!Q#*22?b8ɍ;rrꥆʙ&{PvX!':QՅEB eMl`AJ74Rj=;ο"^s&z@@._/9H=kNȗ _ yKRZӼ%?gp< o#d[Td iXo̫]̺v$.:a鹜)js l֊1sK'V5O))Oȕ ޵@_JRZ%g?w@6E㜒F3r#Gndn.t&y+fM%dUI-(Py:fX% >Rj%I{jrK 3VKݻNqSq{-LQ_mml@@믱{XnYt(&RUQd8vy )QEC}]Lo$]4"Iiiml×3!Y9kK1;z-G;蝱UCܠB+EJX'맹 ZOM[eYƽb. W|26>c饹 2Q]GW{re)mQKvoBT|NbV>+e~j*6̶FZ#E|o>7jkTqԝ hwi;S:zd]ڶNfx4MAUЮm Aul3iTj[euF7o3MңSnm4W'VJP,.y5H#NPݪwP4V*k~}==1ȷzA̋<=1ȷzA̋< |oRO?ÐHNd[Mf|K~ ~Clb*GMuIvP 7N)YCa(]OMw _ߏ_دcq=Y5[E0W$'Mڑ$EÄ7iE%ͧߴݛvۥ]7lݮ{7_2=zxzc/[9o72=zxzc/[9o72=zxzc/[9o7^;os$HjeqGUB328A9Ld{ʄ괫u] yX{"𽒙5MB^(Uk"#/J=7VJRx[|uQZ;oWumwC%a[(!fw'HN~JhF[d uMZTgΡq7LRKGyҥYOq6nRMԳ#g1Obx. eull:T82_ղzB86(:B86(P|fXgV>åC%a[(#g1Ob#g1Obx. eull:T82_ղzB86(:B86(P|fXgV>åC%a[(#g1Ob#g1Obx. eull:T82_ղzB86(:B86(P|fXgV>åC%a[(#g1Ob#g1Obx. eull:T82_ղzB86(:B86(P|fXgV>åC%a[(#g1Ob#g1ObN-O3вCJWǺ6oucmpiqZPے7{#Jض7hc*cvxcm VI[}>խё(fcD-=uv֖4ya<#}Z4kAjM)BM<}NE72j0vYqau4Sֱ~-שqlkuOu9~qa"ߋ8-woY#RGV$i:zE]%x vK*R32y4s5h`&f=Gn>#dxDv9NoO>lQ~M94Oe[ۏY:<IwG3]F 6hk?[xDv9NoOGn>#d&Mu'x<$;ɣDomۏY:<e[#dxDv9NoO>lQ~M94Oe[ۏY:<IwG3]F 6hk?[xDv9NoOGn>#d C˜窙z#>K#gʭ`ɕ(n=OBx#lb+7:psTreJkWf(pyEp1s ʍϢ)m8ҭOi$`JvB=@j×QWgJ>^5o.:JQG3;"@ﻓo@}Egu(\r߭pMIfGlWu)W$zۃz_%(|)>t;\o};<泝>z,KrmQ.K~9\I3P}I23"r%8;W|#LR+}mQeVf[j,!#(ה[.\MFy<91LߍYmԀؔ*O<}v\+ pĊY`Kw[O'Df۬A@d{njķ{3M}뽈=I"wG}Gb v%/}$@Q^KrR[دdYi%8,Ov8OH b. 2Qԛ;jѦqR5:9v͡ѝzLί}'8Ӕ՛i(bBl"ߨfjV $HNlX@.W<\p7͏ھL/8P_oF&@d!Oc'߆  W_'nv}č_ݲۧ?ngg[7*(\Z:.6, M5 f"ӵ_-eRy[ůoPQ&rlt4tNQ>]hqˉA!t3]ULG!ԦH*ir5 ;ّ j![sCIܱ,\C.zFh!I]q^}aْhu :٢Wi@j-vAⰃ9,D(KdCS+>PLSgV#TTm]`R ^1DwT"K'fˎ/ R#Vber.eU9+uh̠J.cM ?,1b<uCo5qWg#O Np]V$28XRĥV]h(#vU 5ݻݮ'g SM?qF#-*(43xqe$ɵBh΃2aɱ[bKqe3*\Ks/A$9MuhL!IrIA } AAnHbbbnV׮X,V/8Ox\LQ'U4)ʘWJt[{kqK˿\v5|Xb"vO,Jۻ}!M:>赢bHQ#^2gF/ۿ.ٵ{:`AOұ˅ϳrjnQ.+xN2F`ɀa ]hˆr+K s/jɃ@gЕ(;K.6Ix Tm(kj%:U[7A'BCUk\v.+ ¿ւx8W=OI~9ij#KVHbQB(\s9/I7Z~ OE;ZT*hW6_-E6N 6b[]bsn$U]spQG4®K4GzML'fһ"yj$0_m EA-_D߿XXK"$M35qcj_=w+ow4aOR{wK\{#EǬd@l|c:Q!d_4~^E%{bM(wd`5ZI\j)8TLEe<8]̹Mwn8ʻ|YUM+,c}d 3I-ɏ7};lZ SIMoCRn-Hu0ݭ4l,\7i0ً4 oO{yueہ8.YNjc9 m,=]0YNt% Ǽ5ލJ 2hB[B&~@{d=p:e57K]Q~=:|,SŐK92_R!@[֋1iҵh2 d()=΋Q1d3qO]@^;Hy(>Q`n,y^,Ȃ߳SM.MNd.XfZ&{COJLpHH^F^'0Dfڱ ^GihՆFmAM̌9Myo)Fe5:r+MYeMhަ@P}1S ,&r[qRkVTeb(IY*]F$UTKlr`6lGReGn?Jycl(e >%.ihH,FsAƽQZGݻ@9[]oYu~큆}Z9eMj; *sVS"F{lKJ$z,N Q&H_N[ED;]#]G6Ң_GiPqZ<U]j]UÕVN(r;[]XP1W<4}@}6bzG~ڏ,gTl~8L1oeC­:;c)Mymn]I-Nn_u\q2-8""?qrOВelqe$2T27oJxY]"L6žw{bN4)CM)OcGUVkl"Ӛn&:STw,hFp˯Mq 9ܢ<,eժbZ,rq̅\]I̶A sKqcڊfwҶm-2^2*uzml4U,<ʥսUk0/ A\GxKoCbwrr~4'S5ܵ9X{Ʈ>D&rsFUu<ʣUl sc 9FEafZ"/gʽe'&YևP:I{)Eԑ=V;R[zI>7SX溸/:=ܣz)B/&vGlT-kYeNXۇwzl;ٔQ'6wk&]}}r-j\d3,AܰXWq;Th.@9r8WJRʭHH,GPSח>ϭ_nO%,a*l/Y|0- bg|)'E)OlCqLЇ#$qԬ\y.>O?ŬH:,!H ?bk |bG֛E \J ~(o'ꪚ5j3Vt ܧ.}j^w)˿Z׀udq}^UtQi^%fRQڱee>JZꍔgi把X9` Hrk6$ r9u$}qkLxjjXJkǽ˹?RI@yz֯7r^x{gfoA lӵ\r ˭k6b9ͬg>X,nNM4=Ғ<&θL)$!0Sח>ϭ_g \rÚQ<[_:s}g'?Ilb3Yu1Wly7ZmWg5TvjYpOeqq9<,eꪱ8Sח>ϭ_tv OERݼx>ϭ_Ƴa"FO˷WS?,ɷ2L z-Dr {oI]qa,JnZ`/p=¢[ Q5Ju<)_j SJ1i(Z5.Jũw`*Fk]TqWpGTQ9WMI26wB[,6 &Wa=v+/]vQ{uM7%Uν 5$F3 j(mK^, VʮfW"ykHCuc}YNi&^MQܱe.6 df4rLsV<[׽ v5޿Z؀n׃LK\@OEl˩$%؊d.A&cd**TZMe_nEY[vS3#oՙiQSn eI o_{Ac[{^%t WkPM7 Պm b&ImʏDj'+'+,`4&8;MN}-e%:^umu>Dň_ 7Eu v5޿Z؃nƷ[^ 3á Yk|6ܘӻy̵p5HRcіӏ*ҝYgtv5LRfyEq*59qdj]T-~,|>]Ndh%_Rk4nUѪQpѓnƷ[^x-kzkb<?}fnƷ[^Ӄ !E-qLvх̍^y7zun9/JTJn~iS4ұʀ:9B:*X]&n4tD2:M1Uz4@֛wX}*{Sl߭)ݏ+S[%DN 28",QhẢW0h5e(@ŨJrfmCxre<tYʡF~0UcBa6*Z7$5I:(Х 4=l7ލ9_Xg"! H'٨aieQekHiHBu'"NS*LBe*;6馃x??+^s/V ?'ލ9_Xx;ѷG74yCԽX;Rb|ʣUߍY_X_kwj~3; re8& #𚘡5jE.i Zu*ST۽8kez^K_{Cbx>"]N5jQ!vB:[C UIk\_VHMP/u&|f6S1B=U,B,cEF5@gd p\rnjr5ƨvWkRvWǟɩn)]\cFnVޛVdvlktT6ݿw_rw>2~<Ɵ9HzU?|Y;\g wXH3œR Pdѣ.xʁrŨSVvӣF-USvݔݿ~6鮺?3՗ڦ:.Wחo>{me2akn5nNRʳ$ra WdntVD]FjPC]ݑwrB:;6ۦ4ߺt1]k'8^ˀ+˷=׍f K|YDߗoqZRne׫AjZdn߭%vՄZnJ*nQ Wk(ײ6&#e޺NHYnfgދՒ[B !UJwlֶ;?dEO WZCRZJ;wMk$Kұj{l%J2W}b?U4"cFu7Rqnj nP { O]b]iiunmיo2ME E vȻiczT體,SgyJ)hTZZT}Β .L ѤXR׷*.X iP.^-)QFݴRm:{6ٳntMx-kzkb o_{C8Sn_f{%c2. {)+ĨUJ$ fvSAһl܆SCn4vt۸(ݍoֽ [׽=#kf 3w=M(%3;ޖvl4 Vfvl֥MoOEK?ր v5޿Z؃nƷ[^-[h9Xĭ7Uw&,bhm;ɓHnWUs$s{'JOW ,dpWA,I=(n?ݍoֽ [׽%V1i<$spe_bby*짆kmj: -5HZ` $x*UVQC-[hc[{<k|5~OEK?ևe?,Zx-kzkb o_{C8SnOEK?ր v5޿Z؇h ,kc,EndjɻU+(p}xƚTbStsM*PTŲuV nj"b\oc~;$d7qPW7ݕJ7mժԫS}]ۀnHyssuMVK;+;ܪeuCuZ=2c'!:i7Rg[ҭ_v[\$ɒKO5JiҮahDW[ݷOsPqnm;K\sU=FS:iSpvmXjLK8Վ½=4Zgk%[z鶙KBXЪ A4i~:#28܇73SJ'I[;~v]=ۥ۷CmSMQx=  Ie⪌g =TvEFԺNF;vwōOڗѹ1CM=PqRXĩMp YM6֦ܩUn{vޏ4ӹ믻P.Q퇚&,ۆ pSąbrJr'\Hw)bqR6݋] ERaV5$̶ Mw7xf#})V5o_rpmWvlA.is[Fq^eyCpme׸GBN)2?SVd"U((O͍Hm(۴\eްЗc$dzLU@}\rmJx{!)j0r 5-\slZQD]>^>6DKHmH Ke҆<1*bnohHVrRU=[fSQYE9,0k)^鴘[\uK *?JEeƈe9]1ԤWi&܁Mr#d%PoL{}^7o6:\M:rl"j)V Q&kn6TqM46Cvi7m(w;u\0S@bT5QPKgT{|Ouy1a t{_f=!!4%s'Ih@ :RK/dl=piTyR j5r5Ov,j|ԽuɊi:[߾T{l1\x1MEΠS->GQWr )ݵ{9C}SMPkk qHP/l#=F" ZeŶSuϱQB~ԶbKj-Ե6}JHƵ7~Qqt,[57 K:MN&Jie\ (vТr44{eBSٮm d!@7;鮏gl)ՖNM>E Rي. DRڊ~%*G}3:ߦkFαl׏skh4Ql5:(nTyp7 "WB Of5ݮ d!@7;鮏gl)ՖNM>E Rي. DRڊ~%*G}3:ߦkFαl׏skh4Ql5:(nTyp7 "WB Of5ݮ d!@7;鰏gl)ՖNM>E Rي DR*G}3:ߦkFαlskʈ4Ql5:(nTyp7 "WBuKOf='d了=ݳb /V[[i;7\*Kf*t6-KSj)(ԩS~ W:ų^=S})E loKOQU܀wm] '(ocCGT/=v'd=ݳb /VZ[i;7\*Kf*t86-KSR/S~ WBų^=S})D$loKOQU܂wm] '(ocCGT-=VA s{vQYjmsTP-iھKu-M_Rw1Mon W:Ų=S}* E loKOQU܀wm] '(ocCG/=v~H6K/nfaV"HPrI'؎\gSYI;ry)h7yU1N< ],Gkժ+g[֪zc&c櫑IīMӭFC^d|tӡj-<"?+vO&A1Mp̝eܲ $dE7t$3!-Fǡ洦={guQ IHyyj715ZIY,nN;R8n=&D#Aa+^єKD/Ղ-^0HJ-1e ZW^aYLZn ;Lwru8(ʲ*L:*ÉL$LSa4$Ŧ ,Mn7m |Ub% =V$B;k~0YHKBt]9;@`Ʃ{-MCHG&ךK7VR\ISHל"ʡ[ qY3LV9V 'r$W!(4}٥[%O2Q%rۥDR?o78qz$_x:hd6+0e}jpnYCһEp@sAuHPKcH*3fJ2lK$Ҕy[UxQd!BjHQڅvJ\˒ySNkl&Mns26;ebPSۓIN7+AgܦŹmUƢIX`h>p>/2oܤŹ6AmՁlkȍFBB}FMxn uѢ)$ǹ :r|nף%3 yY59@eQrj,F2x*v` |Zܱ!f<&]䨕ÎYaW2G!,p'?mڰۖݙu{ۑ7f_pDHo6 T ?d-z`xo`%I\ oU{=JjW\gk,_ˏ g3beP0mq"ŞmQ-ɭS=I~;$t*98D%׵ zSQ_aE%*ytV.^x#Qf(F\qi+ oqSFOtPr9ZwFky-U*D9 L˨Uqn=7ь[72ѪꮜZXiݍ}94ۆMUG'N+ M{=gAL^xv n*(UOږT4pm_Z%SQ/R;֦7Oy{ʍc+bo)וhjuq67PܨK*o@E;71Ҟv{mwN+ M{=gAL^xv n*(UOږU4pm^Z%u_qR;֦7{]=*56uf{^SAgPAޖICr,ںNPXƆl_J{5ٮwN; M{=gAK^xv n*(UOږT4pm_Z%SQ/R5)֦7]=*56uf{^SAgPAޖICr,ںNPXƆl_J{5ٮwN; M{=gAK^xv n*(UOږT4pm_Z%SQ/R5)֦7]=*56uf{^SAgPAޖICr,ںNPXƆl_J{5ٮwN; M{=gAK^xv n*(UOږT4pm_Z%SQ/R5)֦7]=*56ue{^TAgPAޖICr,ںNPXƆS_J{58$(}6힣1zI)بU?j[1Pӥ}hZQODHcZߦ=*56uf{^SAgPAޖICr,ںNPXƆl_J{5ٮwN+ Mt{=gAL^xv n*(UOږT4pm^Z%SQ/R;֦7]=*56uf{^SAgPAޖICr,ںNPXƆl_J{5ٮwN; M{=gAK^xv n*(UOږT4pm_Z%SQ/R5)֦7]5c >N.>$Ky\DV>'y٫sEKUФxU"O(YMY 9iujԡLs0"U\꽫ޫ_U}[e5Qwv{}ۏvE]ZuN.NŲ*Ր~BBcssm+sG9X֖u2ԝ@3]jooM?΃{-P֛ua6I朚=Ar-E]-[^5 ihUE=4Kae?ia E]ZuN.NŲ*Ր~BBcssm+sG9X֖u2ԝ@3]jooM?΃{-P֛ua6I朚=Ar-E]-[^5 ihUE=4Kae?ia E]ZuN.NŲ*Ր~BBcssm+sG9X֖u2ԝ@3]jooM?΃{-P֛ua6I朚=Ar=E]-[^5 ihUE=SާHWVbln; dwАJV5L'nt5LZw3T3u{Mn;y&r6q~KkWkKV+n׍C5ZZ"_OM)poRCOXlHWVbln; dwАJV5L'nt5LZw3T3u{Mn;y&r6q~OkWkKV+n׍C5ZZ"_On87!-$UիXd[+[­Y]t$&:76ҷ;tsingS-I۪$ S5֦2f15*,H^i/6tG͹6Y0›)n)Hزui5".=DdZ3MC%dl4Vd'oJCpɯsPYkkPC, y܈a^&4k+?[~LX/EK܄[o˺j1xОemfb[qSuv[&ԭi9 V)"ŋaWl/ܛmsyR>UoV#qn0Cy4(5H=._ԙcMx )T.ˠ7Zʛtd2JCCzۭ`m:{!m!p;&"!nIp9K&S}yoW}x>Ϸc`"N8`YI*, f=n>\NO[{x(5>@)(w|':R\ܭJ曱j_LW3}z7ѝMe9v5\iŖf˅ąAj)g '*',xҫ%]իXd[+[­Y]t$&:w6ҷ;tsingS-I۪$ S5֦ Fڡ7l q94{{\ZZ I[vj{tOae?imuؐ"_:'e 'gZvm=r !19ۣkKs:jNV jZ77MC7Zni׽&㷚rh#mgDvlx3U-UҞ-=Ā uj)8(Y;?㰫oVAp] ʹcZ[RvITu7y`: C7Zni׽&㷚rh#mg$vlx3U-UOcz~ E]ZuN.NŲ*ՐzBBcssm+sG9X֖u2ԝR@3v7&o?(n3jnӯ{ 2Mo4F>ÔIr*ij5%mfKDZ)Ҟ==bFvt\,wS15K,(&hjWЩHبNn;lQ!ޔ6_Z>_:'e 'gZvm=r !19ۣkKs:jNV jZ77M"v~P"RdEba9_ԺMh$qmZTʭ5uhx0a/Mt/-b}nt/-b}n .^J Lbi.^ʹСGftҧM6SJݻ6lۦvۦݺih?'ҏ(X!ҏ(X 7N[b1|{)=^ۤe Zt "^%258Ge%rV((zN|eEOտqkbԤ|2Һ/Dr>p"4|JEH''2x񪴋ZZtc-ɉo8np[])-Ɯ}!'5ŲI}Mݨ<]t2ncWs\$_Ԃђ 'smRJz9tS߼"6lvzm߷]jJ>2'`'ҏ(X!ҏ(X 7/-b}nt/-b}n Pڍ*,OGfPTBJ2cBeSUii ZQZtNF€ |-E"j Ug1#JMg"q >IB2H4BFM7ۮG_Z[&o '>Ҍؖ7]wX)gSHRA2eNTHu4ƾDBC~(6d5X6e)JEswD|bG'cw_ X1<ڴ U ҏ(X!ҏ(X#p892j3e,Td&\ϧկ,&UYv<\(MVv+gP|eEOտR qKBcj7mۮkX u_f]Zu 7oM{vibHR0WrUչN,JKMQ C*5S]DS6T,T%ni j]9e(b (X7.,{%$J-bb<ŋ.%^*q')䖊!třU'8nWVnٲM7tH'0[slˆ֎ѫ,=#ԖFmRyW6x+sF\%Qj p<3 5g&zꃁj bMi9.LdĴTY&6ZVJ^H&&\Cr9.=s }!r:3بG Y;JSD!)4dc 1*D~XV Rz.>dpe#{wm˯om܁RcIcؒ&ĀQWkD]H NGdcM128~ͬ1Ԝ |v.88oc܇FkIsy%pYwkcDͫp-u4L(AT̚^Tu'Z 2+:`-$ԑå6.0X>NJo6$͚gv"ۗSy;Ʀ͂ \hb<]-`s`BeTzA38|}nƺp$GԎ2mdYO`D2m4H9&ʎE<9}n9HGrZbc$p7UU)9Eu$wv]J wњBgΝHmay :Gq'Lw msG\q70JVǃ.@vJM5Z\"vH.rw#" Đv[-H(E[?6tCm̶~lԆ=&4.\+ݝ}m3>&g1ޓzqb^,=mw 8Ԥ#]k 4z/ko2Ҿ,2ykEZax9U.)OTWT97#Aa+_gΝHmay :GǠ;"i_ `7fSgb^uN{׉(<fA FL^_YY_Ӝ7m*^r0ΜWZ>:eefuPbDQփD3NdCH{7YFil,uWWm^?y :Gâ-:u!I~=X&SQ2/Sl@ZKfH]iwUe*^mZh!'t[{YH. v޳cAq7l zol&5qeJEJ_YU`Qi,SsQ y :Gâ-:u!IG?;Icp $M#>ܒ 2РIu967HSKE霪k,-V@[\qCsBwd4n?/)Gm86sp.i[nVKK'V HX>^ic9Ay :Gâ-:u!I2v-ʷKrdZ;hͶH$/2[{n6H),Ű;V8$ƝB"{`T^&Sl䐦8^W9Hyd(df,ޙ-:u!IE[?6tCmzLwe_&$$&;om) ӘT۷BOx=%%X`:.\d.4HbILy{6#L&( ^ N"[{,:L['fւQf ,գIJS y :GƇd:1^8kf_ܝūQթ =iP 8ҋ+$ WJem[5aWN%{_}w!ϹmWqdweH&i NgXcE8ofyYKjqԄG2M], ڪ [s4TgB.+j:'%#s(7),'QDr2QwN'J`:9if}Q#~QߥawUP{Ac9wv0wb7b)|X7qȒAs.Q(NsЪyAoԆQ#iWfE-իUeލm**8\ 첼6 'm"-R~ëiR'2L$§X95733n3GR,'8-&nF hvOfⓎW 5EJ(zT.s0n=n &-Fw7Tzacg;yaOg!Oر>0wb65uZv:}^&mϜU>e &0 ԇiޛ'F1{f zE)ͩN89*0wb\Cb_midm$ϼ1z"[~-X9hmjT\gg ꥻRK2JV\ZߝmJuՄf:s{Vo!ב(7퉹@-$)"[NGb4p֥ҕj$e%WD6)6)J@tCbɳbTE{5tO`pg\o]r**LRnUjL緙.3&ܐOtSq^gWC%>4' ej|)nC;dDi (KvKSlTrI2=`uF,Yvqi2Α[cV>bs\UݍTRj;T\:u#9M powdSg^do&KuΧC_gs($H "vCGbDT@m n'ndhӔ^x$ּ~nȲ$Qt_ht&s-O-ܑB2a|L^"T*nzj˄Q#bYƉ E]UQRuMAG}[ΜSJSٺMۮ*@}NE>! eϐ~n0 d|C+}rʞC[׉9MvD^7M!X>._n&$٢?(`mGSPh%{؞RA1E¦$W[{5ߞ1_lWF ?#0J0;W| [ i\Xo*-V`^_Ӧhyt]Z6SHKmD *j\ҲUjM)4xH%)l~|7ދdO"{n) &Jزµ"2.E٧bI.Gtd/ c^v*l`Wgt=U%CQ|Wf判 =X8.zpx,C^R:[7 jx5x1 NCq:B 01mm"eZ}إ;扁-٬d$&M 3]:[R6ުOL& 2 rlXOH^v*l`Wgt=U%C1CF9%!![]++&;\ e022݊dŴF=?6KtdiF,뒢XW J/h76^}lWޖ*>q;6@Wwˮcsj}zeގk:dčJ^<(UUIsGbzK+ӮnACp܊!/ۅ\2.X5ݹ@z;n`_ [[V15s֏hoؖVz5d{\vUORz#U˂_ʕq #ۧrYJ ;wCR\0xQث础H杞e2s]\5* ts/϶ \|&d dy($ґ( T4{nMuЭ^[3;E ǔ?"n>:]RmoQa0<ɀ\ iő5-E c^E||(UUIsGbzK{.ĝa~}˧t\i[| bI?e)7bWo3[,-Q13҆*SAd]k oL`#b{7؏"W"#(ڔn%1w+TERFxQث硃Ž_T= ompە $JVsw5: 飩YN).%&2i)b!5F YV,+(T /eb1ʶ[ʮ't۟ٙwXyukIMofG#n5h&{_i&$#$K*ʒN|(UUIsGbzK+ӮnACp܊!/ۅ\2.X5ݹ@z?uEz> 2mͽh>pl+;PJ4+*LǖAs;#-:f|g8e2i;5My/q|(UUIsGbzKX<${݋Ϯ!(UUIsM[;Vzą!3ekO}t{@r+%j &XFZ]mm.=Nl#K~D6hm4ZJۨwߊ NR٥m/Xm 襣Xҭ/WZUgWS5RPs_^22s cu tg])VNbl#$78MMqkI*^$4gN/Wgt=U%C;.zz 3Tb^$4gN/Wgt=U%C;.zz 3Tb^$4gN/Wgt=U%C;.zz 3Tb^$4gN/Wgt=U%C 7lX=ڛΛ޺ݝ="P%eڛ4$CnƏJ﫮u>^$4gN/JfjocKxW `V{GI_P&_ߥGq 3 ._aƜ(ς'~?ՀQ`W5T;GI_Q\iŒ-˗Xq 3 ._`5#{ouRN;L+mih'oNͫw66葦u<:k6iFBjrnˋ/MvA @_TnU˨*-wYuv4Uҧc{i즖Nnf8L|Sk~fhuw2r]Q2C`N'Ws@4ޞ~k‹+˷Pq / ?.߇AƼ((~  T52򯇄cc1bZX\PkeKū{jˆe`EUvzH*mޮvƊj vR׫xGp!¬xxQpQv?5EG_Ό#f2sjCd[$SpZ8*_tڢLҊL6wUH'bd] swq֎͝DzܨŃbg׊㘥琟.#5ZW٦޶kZ2oVrR1V1&^̨N6̷|O3-VC8Q\p@~~r}6*'N+_TJMMW1WPъv_rgi# ^czT+Za0@&J6UyܫM m.q]c;+/kwt}6/ *UTVBhWֆҤhSk8] ]u&,36J"PYC|=>n 49z)D%ьA4 6-2ԩ-in4|y[v]x+vv0}H&AGq+VIB:I=Pȕ\/@:p,|zƏGRԖBU@ѭ-7j†h:gi4 LU2+VݲG$MBϔ*tց~g֕mko}=}t <&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vg|&x R5`ǹ}z ?l|ApjǏr*V<{|Qp*8?Vgտd'Wy1L_M,J&ؔvohh*wQFH4]N*}a&[$%7Sri V]=ҍvvmkk@engauge-digitizer-5.2/doc/developers/compiler_settings000066400000000000000000000030521222557406400233640ustar00rootroot00000000000000This project was developed using the following configurations. linux i386 configuration ------------------------ gcc 3.4.2 compiling, of course (4.0.1 on ubuntu) kdevelop 3.1.1 integrated development environment microsoft visual c++ 6.0 integrated development environment and compiling qt 3.3.4 cross platform user interface library open office draw 1.0.1 for drawing some sample input files fedora core 3 development platform mac osx 10.2 configuration (on sourceforge compile farm) -------------------------------------------------------- ./configure -fast -platform macx-g++ -static -qt-imgfmt-jpeg -qt-imgfmt-mng -qt-gif -qt-zlib -thread export QTDIR=/home/users/m/ma/markmitch/qt-mac-free-3.3.3 export QMAKESPEC=$QTDIR/mkspecs/macx-g++ export PATH=$QTDIR/bin:$PATH gcc 3.3.2 compiling, of course qt 3.3.2 cross platform user interface library solaris 9 x386 configuration (on sourceforge compile farm) -------------------------------------------------------- ./configure -fast -platform solaris-g++ -static -qt-imgfmt-jpeg -qt-imgfmt-mng -qt-gif -qt-zlib -thread export QTDIR=/home/users/m/ma/markmitch/qt-x11-free-3.3.3 export QMAKESPEC=$QTDIR/mkspecs/solaris-g++ export PATH=$QTDIR/bin:$PATH gcc 3.3.2 compiling, of course qt 3.3.2 cross platform user interface library window configuration -------------------- microsoft visual c++ 6.0 integrated development environment and compiling qt 3.3.4 cross platform user interface library engauge-digitizer-5.2/doc/developers/selectionstate.dia000066400000000000000000000030001222557406400234050ustar00rootroot00000000000000Mo8s*-(5Mb{vφ,12ePt\PVے?"E*A Xag8g"w*Bގ0FIfrv;4?L ,ͧ\x^uPP)yxtw8XY4Zeӕv4o3Ud:ڴ%E^(!oGh\9b{/7XeMVU RV[G:ыX2Do4/w1"Bwe3t3-\rIḺPpwʼnyyN?祙8SYz<wZR=|4\돖?de6E[3/fycn"v .g܉\,&IdrPeo3̍u.\6OPPz!|&a'ڷ-3\b=iQqi/8MwI"(cy-֭6;,&U PG!R95&+Ai$B9٭|mՂ#J=l?9Zī97 \-Z(}LqϘ-ܗ[8B#JH0EVDBۄE<k^@U1`@6'ڈpXv XHc>jj & |a6yM(7%fu\9%!*B=v_f%+ &iVBȉ8BnL kJ}ۭSI.xþ.N)/ů9d%&Csy9+9#7P)M/ϯӹNg7,;jK1[&߀n].(p X` Pd͓Z1eb gKFRG<"bPLB䃐E.& ),[clU1{$D/+)7;e;Oq搠]TokY&.O$=`ihHxk+jyͰ;`Q%)oh:Q7BuE] _<Q䁏"p2_B$?I$ 2#Yi,D(/4nnx:9՘x6hΚ9`Q7D WW*m^ۤ>CN"쎳cf-`Orl RwJ[[퉇m'T qv{޺Az ⛓f3-Vw>4tB&όRY>^<'$?ͳҏwxDī9"h,+o!穃%fP =@L%M-Wn,pYѓ} l5fյƍ/rtr4žs7:|+MqžG =?Ot,1IʆЙ"s0tq%DeY33' =:;d&T׋1R6F5Գ8M\jO\=sc\ a2>b&/"3c$KXDKor5ekM.=DE{QaMM3BѳJ"c2ޣ}`Ml{ C('>t@C2,>spɢ \!ޚ&Ѹ:dq.cDPluЃ_ŝ"9.AئOccfn4*FXfn̉M>$$1SFb: q&g<B::y1Ia1M3CHo#%ǡ2Y" I#3:J>Ѐ$&`)0I1`qq`rgau+Z#tfykXѹReTMVܲ ih#4~-{71s&u  {%HA4-23IŸBS8D@q&m*C\p3 TFTp0=' @&2lZʆrqiMd$ o0x=cZm&HrFd4)ЈEi$~w7#H{qDM_ߡe6`Ȓ?AI4N$;3-Psir,f"38Is@mM< U#Kŧg>$pQ'. A$b>XbbX8*&*8ܥJ6&k^]%nknJr:h۷LB@$)=^/ЎtmP~Lԁ@NqoXT"ڨ)P+'v9bGH_@6!䰞3;<~9+ Kr9c v8G$9nX9H60=N D|+FjGE ZD6E6)7"g( |$%EhG)Mϳoh;Α49M8мDX)`qlE؂čj6ƄxiJ[i;ι@jM"gVwT<@,q;Vge;mH̕-s #(K h;em|0qq bI/CZfȓL$0?JDL8VV󮌜a%؁(Y%bEK^=0, X蕙:͎*WiMft :({gbXLvS緁B n#DCyɡhHgmp]_dQR\ʐ"xC>71WȜU {sX<cjcB](*us??*t1$PU sSWdX3(Y;sRɰLnHX|gGwkV$f #q3d/n=M9ExaCҙ2EHH_C_&RzH  qZ ;j N?͘巉6ukdH8ν5p@ٮ6t`Sۼ^g]Sb9ϱN-MfY&z M!GхM *U$lI]iDxcT4tOPQՌ!U f&PUU#&,o6T9Bg4m ԧ-oy*'Bq'LrtS? @#k#j1{n_ߤb\0ӑ}׻!>X㘹˿6pWǠ48pY5+4Gm: PlV̲L0sגT%)]7<]:GF\ (O*tU$o u\f٦]D@"tPħ 7 :0&N+rJX GJk~2ϓH~;o \X>LMիShې  &x&!gR}b7Fg&\Nmʰ;vǐ~%psL0t;yT*h0./]0@G)m*"I{WF83pzD{:)B`~6蹀+g~?"IGoǢ5L BH0lD[/)ϳv):< >:AWsa%P)%ʂH[ ?4# F詙Bn)۞ZnMg{w`ݻs*ns1`5bhi)aUfT 20t,Jm16mLy8}fΙfD9o S=1uv#b"1c78CzZ#: ,ɥ>3Hhw鬥RTCܟi:]~l| yCI)d2 Kу@b%5N\T)(\ $kxn B](*us??*t1$PU sSWdX3(Y;sRɰLnaB9SXH\S_%Y(뜥EmDPC:"Cr;r(O+RJG%~eKՅTȃaoK J}E"8A<-ѓ|Q")4qStմAutxlwe3hHLQѨG(ʋ'@UBbpv#b~ 7_'N!6^9l8Be4,ུKJ^GRQ7 "s^"yԱ5hq+dĒG!Y قĸ(œzvT6F8?v6zvK&0$B9 Šd->[ ~mrcޘx^G(!-Ba09:t9cz_9>&p#|~0RC7+haR2āƒ0>!-D''MQc'Vf&6E²[T`&/ Ss]A GOK ʨC2QуbSmǔ jcďC6t5!|!\4;:~8p(5xqO3C54*cXоߴhfniY[а8U˳?M !<U.`>ϘbndEŠe6&$f9TPtz^HbW+0gqWF no "!o9XOTռD3ƄrI4 FTXTF;$ ȳFc3bR5N.*J^SoSvZY*ALS"!n9A8dpɷkCih's$0)x<#/PqL;Y;@L{v[,>gr(tDzo/–t,33[,!qazoXtGt?Cul%e_#wZ^- 6*#=u+_{lN}9y<6\]2a!.x;0Dn [q_v JkhMA?9PBS,?!!;'rh3t|'r J24M?hJRΜF lBCӝ-4u0xTx 8q 5&N,~,Ep#5q? gɤYHr?o}.,rhhrv&ppOm~թmԕ,Xt>8l}I3VHYL^X-BgEcUmgG0N%IpdyQ9NL!㎅28"aP Nf$7|dᇧGp" ʚf*F㓈&gI ̥=8> f&PUU#&,o6T9Bg4m ԧ-oy* +wqpY'Hg9FP^X9chE&xp H} bG8Ai(eH bχ])s@G=}ƯjdY;l҃dxefifN)NGbNoޟn I:u?~j?R{'}߇giY9T' 1pD %I$hH(,) qFAm1,뎶=obڼ乪o3Ǎ!N.4֜Nd\mP7C7:.y.DjF F8pd:?|cAb 'qw4h{pu3.r[ Od~`|>J ?)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@`r|B|-1 "C3rd0JW٫Fv,4eZչR:vsv#RĜnDk҇ )sRVt 0rg_t 8<6orGU9V9|j>X|~pJl}+Acz $OjV]##f(lvlΏl F;@>a{sשwx=@]F*O:Axh}ѷu-*W%8 'N6J%x-¬Wl&*]ḧ́2>d(۱SHѕ;0h(7Umpxk6e Gw-NL,zremz cx<^֯^DDYTyО&A%ikzŮ}hl2zݖ6fjtK׶2m+tJ KScQ)у3_܇RQTaKVht[ΒٯBuFѬF+z/MbTb5ZޙRU:3J4瞭ڳf+^x("Ί>wӻRY QV͸㍗Y.)sRmZhLzUC5[ņke/ R67Lǎ̸US VC|G؈mv*ɩIhtJIȴ~HbQKqcŃv3};_WCZEY exlo#g!ez)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J{CzgeښѪqssqS{sz-Xr9LDڶ(TFz4hמݹ Uy$);nw2O,[m[Il#uq&xRD,e-T'&xCwd&~ⱭSS"n z1uV2u|ӥeB Zmҷ6%N })BN #F>%JFzѯ :tᆽxc8l c,aha.3AAZ&Q h+F'Oŋlܵf oPN657%?3y,ʩ0U245iB [~Ys߭KrGzPG .gtFԩݧJ2rؿȧ0TlYB f*"B(zfF+7"ܵ{jv֗Lo&vx>^y祘v#J\2Ok'D׾kC^zJ{\&mIä:R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R zkuo.}󏹲Ò ߋzWlt_*d6}Wހ^yd#N'O-Նj|EF)toRf:&ӳ~_zt͛21 rT2v&Wwė췪O$ RF!9}yioL-kRRRRU]_Z w1t2C\ F=R/cj-+DZ٣~{מv[ull׳^v5<2{^>9nݗ\1eM&f$7])[H۴}8%kU}x*`hF6f; 6}{s=Z"RrX[Vf[>ck_P)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)QdYN$NRGPHpmRLMիShlE?z~ˏI~C?V|sa{Ŀ_K?2|s}U`󯗸O%98 =swQ3ݑs0IϜⱄ|~7Rś*~Cu  ~@bv>"] f9=F=IH#1b&;!*DЉzg)b,e)K_>M"FC シ7{qc@G;16{xsolKVMn>0ʑao5CXe"٥bfW$@&IEHpInp0fC,hzaN8|*HC(=Mf BPUV[k.d7|~OvOuGmYwٺ#K9zqz }1a%Lb4 FLY!zl8>1r/ h۷,ݩNZߚUI=Ӊ<|Ƅr3\> Rxj2lH0Jb h g+_RY>S\񐿶|E#A{xof&w wjblؗZF?t,1IʆЙ"s0tq%DeY33' =:;d&T׋1R6F5Գ8LfXe,1}0!ŇPK4221d`yƁ<1nߠgv9k~kPn Up=t'>u<CCF. TNi0Ĉep ۼ_'F]m2DRZU+ 83F#.ѹ )ԊA CQ,8YA2#a`RV##Mn *Q7Me/-ڔkX'F)J2(?ȱiE>\&> N~}հ(? t,҂\8KI7CRK [J5<.p!z~hF@S2S<.ܛ(w5`ͦQȀ8}KJaQfrRhy|y4EѺ74!^:WHOҴѱd!a9_æً9-'O̦@iPPJ#`cFaDNkX\:t=/oq Ο |?t8o@>?iad_hm)b,e)K_>M"FC シ7{qc@G;16{xsolKVMnu,L{ؓQSG˜:#ca{8Dd̃T~P? >loqE͵J"FmCҴ7BDs)g9N0A,:YI,UfHɋ#/[͇&4Pv;)[^JвI!.ڥ0yL[w!"hX;/?4fkr{ JA%d/&e#!wYɠ}ژ=?9%Vѷ ,=:&4 4f,1yn#,#nLc1;[.傭y3 vqĔ} YKv4suxxU]qSn~o[ue{@k2u~(^_Df[u>]c[ㄺǦ/ܪ"Eݎ+U3cݕm['a4e8ghN^3lOݔaV-oaХ._iT6 sz[*|.sjKa{d{ fYjVu/r cْ悓fynG赬JRJRJRJRJRJRJRJRJRJRJRJRJRJRJRJRJRJRJR;<]:GF\ (O*tU$o u\f٦]D@"tPħ 7 :0&N+rn#38OĮ?;bipo*@Y uT%#ʹDI;Oj>qhu ҂8^6z|`gk9 ,Fc⼸ p,A/˃gFQSI-סg zVXG$=ϾЍrm@,SDL,@̭[pF*\ڔPUgi˦9q6ha_~gIud̝M_cVott ÿaN{mҔ闞:|6 ֎y]=4\U6Y:6#Y3Cj&hlJCl-qtC}pdʡ(rRg8G̀8SȢ35QG7 w,/# Rs r!.ލYJ G$=ϾЍrm@,SDL,@̭[pF*\ڔPUD/Qmbk#єWhɉ$_BGjwqQpM8#㦩QmZq1ER$0 z$ i9:Ա,mx"Lf~P?'8|אjgH 1INAC-ѪBlucO>23 sU40\/ vqlوZ2.tWFCmP@r%/8@BoTRm N/F'SCuU&$Ÿi'M3ީNZ{Dz%Y()9^M;C$0B/"Y&Kt>#8u+| 7tblzho`om"5n[HjyckĐG)20[&[6m- 1LXJw>>-Lƀ4xf"9ZV@#Wp2vpLHa.Es*TT1Wk .^ &J=;b"cb rVj#!iتc|\JfKX’ 8&qU D92PV`d\F YQt4ז9h-cXs /sBX-FZJc8PG<>ZhdQߓfB`%9$V+4~QؤgOcwcoVM]! msԠ #Dс0u(L $k˹:*[$$=9<јGS 'GIP2d+q%rELp"+XQ&m@ =D%(ܧh$Im=NRX608H|,NME; ͯ,~f扻 {}Vf8\rk`'Q&w\ $=9;J#9G"HǠHJPX m#r)|Oو9ԦNX:C b€1˟@ D_>@wGB5R) 8gqM0GSLD2l" #ssjSYATI6C+efyz}8$=QǦ:]o׆7PޞV]Wؗn-Z׽_҃&hSG8@{|8MQ1 5F?*=_,0C"2ɑ[ ~mrcޘx^G(!-BvZtXr{WHn:oh'ž~8A|}=??=weOc'& fHDd @ƙd0>$65IP"6oy(*ޢ~.q9ѲnsLA$^,rbsfZ?uG}KQqDqgA#y4١NQ{y7hF,<,!Fh 9|WhpXw;&D(,Ic!ZTR$8]޴ݧa.s3{Ɍ&8 Bc0`Y7Ÿ\6JgYn ]3|@JO(7=6cM[).Q(9gcwb.9à#_cf>WõftԬ~W@riAz Z<r?&$ndw~ߝˀKtDsHIgy[becC&u' O $WILhTy,mЧۘd(Ӧ 0)qrը?cΣWMmQ #d9i}A;P-NwBcK-\tnPz4H#D*N UZv)S%Q,NNxmӻVyۯ|{NM{jIDqN|پam A>C-J5gav涴҈ICށJRJRJR\yLpoxr  7(KcDh[},l5)pcQGm!iQv/aHfW" ORm--9sZmZ/BFY*(fvMAŲb_cJzԡ6F*/oӖzSƐ*‚Hfs>ḽl6oK[-k[ԥ((/{Z׽kZZַKZJW_|[L\BGrA#m{6eeA .%5mYcnZgkO - wKoo/ ;7zzޗK+zktM'`nI@vp5' wn7ӆ}ioѧ+pۧ^Ymӻ &f/u1ET=E{Lompl/yzc9e{ZL<27k! 8eʺ^gl^,aM굽mJo7xth{s]|HЛ4,WČ ۜy^Zo*6[-ar/nL릴ycqFSu!}$ؼ4_C^e_A4_Q^wO]ݎf_(+cVF0ң㳬Y yspزd~%.7#ՎK9_דውێJrtf6ǰbOcI̋}A:_9ײ9]dtqNiA qnb 2(rV=m,r,m7XkeX,oo[^׷{^ͯomA2ňے*ppT )+ZfIR$J^[T)T~xiNF3ۻv׫^9gXh/-yHdDݜ}峴r{i p(ekh7 J2_a?FN%+XnvRg #{g'gͶeܵkF{q=6Ckx 1ިX[{2LS K:/ v啰wáW:|/pWR [fvu/_sgW#vO6װTGi Kl~7ܯ{PtqJ./_EYm&M8l=>:-_;nV6mgS6d8^ϭkzwws) XdCbFW 6`kյX[]%m?[>2[44Jeo[z⼢0u+.@ڱb>);83/lpo^n &ލJm߫f9eâXE ,8 t6#h,!n|ֹb4eX}jk3[<2ٕg#y = z]Ќ3\R{6>0-BX;Z7f9*D^Y{edM4௪?9 ݝ>%J'׫{(Fاj4Zt&Mߴ j X::s˧Fr?[|: XؘbCQ_Օ콱mM5 ]IRwN!m2GL n^zw6-+!Ju <7).n[y G,t+2HN9=r͎t+Hߕ{\ޡ9dZ[TWۼjknh&.f⴫[YFG$֛ m±˭p1r{1w3-4yJN<(xb^pԨܡǡCwUܨ0AĚ<\/|7̐0G2A&Z&H@I(q{4jm$$^t>!7DZt^G6|!T(bmaK3R}Jע}?ځB,2җyR R R잞#]Jo\E&CނT$m0CR"Z7='W6m k}%`p{0Knc@Qq挾vFYV,}G*wkqX.W,_QuW3;咥|]o|CTm}Tړ]iDHTdFSs](ou|Pˑ4nӕ9KM3Tټ;`F ^٥&m [J |BxTiD jJb'fB6V+a􌌰}6m ݳ^Z`rEB.Mֵd~-پǦ8k/[jZyeO If"`J;+Խ^C~j @+Ilx>bߋk Y;JiH ZLɹKnOf^M8ChՉ'xajooNG*ZXVK\8a2CZR R R R R R R R P}ҕ*];T)RnO ߿vܱקNxnݙc1<6SD|qi0g9đW\wߵd5Qrޮ<\ HB]ZX JKsvllyuμS8ODu8gcp˻t8mKbC3%k8!ݎb]tR2o=|Z#ԛ%V׭X #ƧtwBZݷMtۡV:"&^c? h^*CQ~62>H&-8]ѶV܋^oUSI:%ۣdyx_vbXsԩr/$ӥa b-da7P^߫zg̷.)7Ƭt_x1mӇy0cBL^< 켡J_yoՎ oTx m_Ey0.ikdֶطo#mБBϥ2Mv҂ (Ztpg;9b0r“UoK_g[{59/h&DX '1kX}okZ׶Mk[ūtҁJRJRJR_-tӵ::'߯=;n׆;lշVe{0,3מ9c79Z_ZPGF ;I\2 )1Qlm8[w׏ܶ_Uڡ,Čmp,<%2-W#"moMq PR m\ܾJxFZP\GSy >FSr^ܭM咋>QC| 0!:ݝ`?sr&ctNr=fom\ܴiY}N/V9e҂2gWtHBװ]yv8ǡ> DB#ؾ4m]9`60ăJWv..hԯ]wRJ$UDoʌcPZѱ8&қ܈Y>]((_N.5Yg^;Go\zӭeSl]f;ug(:3קVN8Lŗ_YG<=Lۭȟa²o\?}w͙;={r,1(K[2l/}r wp z T'I)r9^mNl([^li()m|sU~]Ol(pCy9mn=ےKF1؛n(jnuF)MG1׫|KKbjVD3!GGZmq"$]crI})vk8cotҜy;Gr<`x.售poXƒ7ҏ-k uRbƄ;qvoovqgo*lydGM q~8O~Oɨi6P|9$Kb}h_g;i(iBÃoO%τ:\(C,iCV*,᭾/*l\[Sr@Վ [?j}O]r+,qՖRt9IuԫZawrů +a@adZhsS_v`^i<5l)/SDX_[nJ*f@9 lʑx3cO3cH;v9ęÙq`Ds,xe^L1?,bsfI arH7,hFFffoO)JP)JP)JP*;L9#nccڷ~d_5. X i饆0i6b瞬8:R QȯCUŀ? R EUCL#-+! 7\`Y 98=#1,Ӱbyj9ϧYc[deDeSt xi6CNdqR YVZ4 MX2f[1x0lE Vs2siN>\NΎ9>'FZ$",/0+c8q >_ ؐ[#B"ySw\A̳d<:7Ҙ>@oyZ#R ±FV9 S!XxBco;l△ɴ8Aep_BA: !IƘRo繁ӻJ4.,I.}3Ӛ/{&#ɬ+skF9*sL KCƮNJla.._G"g%XV$z-;m Xww܉Kn siegȒ[J63`y;A ]"轐ȏ92%%IWl\r=3%CoAdcpd1Թ0n}WfΨ,9y_g;n߲柰O_'e忨=ݘ9FPc+ bL.莆RQ7fӷsIEQxj v=~E]O.s,OB^G.Y>Sc x&) d}Wk&ő:Y<%PY"E/sLE xK^|BSy&R8mwPPf !S>"q 4oթ"B"1"?Ӈ E`oQ24"(P1I0JQ 1c+2 (4/h莆mKRnR"G)i7`ݥunbqؗZcF$|v/vpl[LF̦AD]æg̢/)kwETHĭ#Nī؅7747ꐾc+5E;y>t|f5'qiR!Ntdwդlt3CL,n"wlZzFG{w91uVMa[#]1Vkd dG%*\5rv *Pg quGy.MLo s}(.kfW%J.(yΗtR\o;/bXY1Gu ȆiI!3nJTH˝960 yvAavJ5dQü\ /QK t-pn]XVU4r~"Y/~8=}}=}& O(Êer2:v[!I:tvåv6II:+}PLsHEcDDsB9DlFLZXNwᤛkNY%b`OqvmH244 JRTk Gh; L<llq.T&p9mC+)]ޔj[KF6Nʜ )Q)|^ׁl*t-lqbپ]]rѥFfI4m|=E]j7\x j| !V83ԙ.zڛ6%F l.n0teJRJRJRJRJRJRJRJR\:N sɕ`]E.Wl&!K;2NB1VW~[V"SS˪5}9Uy`yCp^,HEk1k^p!SÝȝC3$QK͚˝dUYHFxҫ|ryt{mw#A縈n(ߛ݃S1^JXEZIFH)Eb4 R Rk;Pl`1S7:'L|[Wg?s?9|LO}8gc\+LAQC\.BӅ=I &71A H2G@;5HT?, |d}Ot:,r9o;prڠ.}@WE u634wɬ 'ƍ@Ʉ+8$s`M5 tLXq tNd%5?MG{U?0Õ y~`8W /;clh+ݽF $a1"XX:"_ wVV/ d^=0LJ.4E':= dݬ[OdBd T9ٵ:DeCR2@@bu (t(c`<_GI (!N60,x'`/(%CiGK\IaMRAx*gzzr$hrѤsst~lҩ1x-DNO=1!tyM;S* Tqs™:)FSܓMRB ɹd,]$.yG#rR &rtve},8dvK7(#`99LJCenot& y*SH Tzv=73DbZ6JH 3p%[D:)90tML Rm;ǞX44E0H%UeCR2@@bu (t(c`<_GI (!N60,x&䳢I0:E 9ND8hI Bx3a:ujay/Fb#w]-\1>q< *MIZfoθΩ,Pb%1“-0f]<^QJҎ=Ւ#2$ƚ]T0HH1Sb[(BrR,r%fH&@}w-y\w%W&oMQ%ff#p_6 dˁO-KEx4c%dT䯡TĬ.i64|,6dg@eSxfQ)KpL MZSGȭ)򁿇19֗4IpyJ)IjXT n+w ' D "sn)vVgt.k4DDcRȉ⌝ig72#wNrWom@؝Jo [=׫kl{T,55?~m<_}( n)ݮzgZR)E[ljVvkqE[ƦHw|xt)ui^W/_Wq$5JஷQ/9mbp?ݜTܡ3VlշER ƛ23^\FmKk4]fULjqv.>čf ߍ'QAᄻ ǁZMԼ~)?oA)>m6d}d=?~4Ru%5ᙜsSk+}skqIޛRo[zEi[١F7QB}#&yiBu_[@<G=zӸwȍfXet.hc|ckO,P|s!ͤ}Ã]]%sq2 d pA%_c.(F8ooF)'rr3>uYEq4JHPmoxFŻjliU/93vÐN/$-0^9lkl|m fS>ml!mxf:X- O^^z }SS˕e͑_rkU,a'Ezz벟[kW Ϙ;Zƾey}.a1oW7k[/k6+Zd9J̼wH<|DZ?obok[/WSW,sXn٨ _h.K6;^gYp #nٸ;ZW}1?-SJsN0v[U|EJm}昃! ~gBt_,jX}eo{_p= _?`s+c3|UckP߭Bm6ml{Z׽kZֽ{ֵkZPq=<۩W7v-KdCl,ْ`6Ƌqמ7׶T[^MymƆ3CpYlvf^>\.elhN&콭3vMD )(sm'/d{aVkݚC:ImX89U2ߖNxE n,-So_țU Į?b+4{ܥӱ-Hvp:xk m{*M<& 6D23DC!rBrhW{gB8oe)FdW6>y >[ACmmБM>u\V2yөZmstG}\j:@\ډ|t}!cwPᨆ9C@ܑ+aY N(xP$}ЈhAPllO#1|6V3./Ww]rS;0 Ju~ ط=xֿk腠]ǖ9[-Hڅd_ϯ鵬ߵNy[2ޫv[3FZ zҒײӤI0!ktSk[wilO{eRByrmoюY8swElׯ+cUw\zZ&ێc}7V+6L<0ײ͐<'4gZb._ׅMnyc]U*6y/[I[()qњKM3"O[ qB}&)=m3Nov޷$pM [?TAIxU}=eiz7E_]oem>woJo*_V,-o[?.J|91-lDͪq޸oya8oL(V6VX=~i+\st."Eϡ1ODwBV6jh"6MV}Jku\*'(SCjGa.ty~?ķvi`ȗl3weUv=HnJnaM_̷T|(!J%h4iCyՓ ֍TVS rd ϳlM 0+vi L-5 qFl=zf1ʫ\qy&DOk* 7e.'dW{1jg֕okBVW׽6[pfb[:frAGBlC^w/aώ{eg~͋]J։v'WMx y_UWz&2w2C6X>@l(z=L8 =7<29F#lşJ+H਻Z%6JV(rawvz[·>Xiy;?!sjMWHuj B S[h٧^vj߻艗Eui|}x|އEߵ}h!\v%9-0%I16YA4 R R R R R R R R R׵{Zk^׷{_6 jf;oKq]va$l'='CmҝJPa9,Zh*viAxӴϾ I _",+L* g=Wb{9re^Yպ:<8J.;sQ^~.E/,Ƌn˿9#٭7$"jGWT>jPBfQ:хQM{E_ԕO~^K<5/_i/jp[5x+ιXFN`˪4ʓڳ6e%מv&Q^L4j3&O4΢x +3+^߷^fR{;m{VzB4&єA<(NVקT{>F;|~Ǻa )޶ؗfTja^6ے<-LHl.ќm_b8i!3S{j?DzKܙCn)wN?+R_ 7H|DlRΉ9 h.i+a|ч*e m\v{weSaW_G\4! n;'.v.)@U"Kecg54kk2DHXZ޾e4\/Oݘ_WT(i7zHIJ=wHdܓRق;{Bwo"ݳ~EV}JJ_8ѶP D*G2fa:MQm:1|>﷠PEoNAdkbj?`#zӍFZ I㒢5Y^9x[G䕟lkH0+Fs)gqAE֥=Ye̍PaPu\rfE̺ZPC> xGǏ9 sޯksf$G`_1ӰR(x+([eniӶ4`.JP)JP)JP+NңNv[f۫;ZZ׵镯o[Zr4ݲr ]]sm_bTe|@p[,ە{6,{ַU(4j=Z SNVTV >YCtEMxז7ɸ(mXfWo׵{[AN:M:$ѥ2}8'Ն:^xmoWڔR;O8J !p%D!n}-`HBLāz͈ɘXsAѻRėPZ8`۠.Dah$E/^y[K{;;zm{ e|m=ЩU w*ށ'uww^0#F%9fWk]2&P*_x JP)nURC2oB搿 ^bڛO2RsZLo! e+t:;oUڅ@Mwo==F(s7=G| 'FVs4l9O:P>5h>h׊}:'ԟ=xkۯ*=ěő4sU%/0qfQoJ[QHe2E&v܈ \1.+ժW6=$ zoɃMQܐ(p&I>/lV(M-Yݮ>捺ay๬oD0x}G|5rp⛬afpU~Dk/F\S^i(jahLʙ7pjdq=w W]0 :(uңcY@iKoɀ -\{~]-{o\u%-+ b2#7][#_" цI0v|\ѥc;HLi6J-$o;o9f&ڱ>%o~ޯnwݥ}0^V4-O-ɷaC{ҔR:9s#rUNQ"R-3{ԝ܉B-Vޡ(M+ N٬t5vorK1}["7;8.鑅ҳMӽqL8HxHQI婥:}YiVSK[l[<)XN5m nF9+~۩bL_Wܛ7V/2sP7NTˆjZjfrXkee 5'5V6 E [(6 .1O 2y,at|6ocHCb;X%[ԕB%D:GzVɑ+)D?iad_hmrYV*B SJ; J̠zJ[7:Xೣ''`-&k1r*j_*d;g@pDeɭ3g=tv-_4u n Xљ(5]xѵi\~*=t,1IʆЙ"s0tq%DeY33' =:;d&T׋1R6F5Գ8M;;(3L)4a%fȔIC9Tf*㠪wj0s̡(l,<-̠}O@d®0&5r8ztXgzh 'F(uĸV@%C'AַB &X*z*2t L>hh>Xb&F*X*FܙxdJƇօZ*ntnTr;oշ(AGSVGPT?=0,&?)xiqCĸ<K#\\>a7#fqA GԚIRys9: t|KĽLp$vLRęzǖ$( M7ЌiR%11I8?- roLG.\6${gбTN,A JLxU I83 @茩ZSY 2qM#R4hZ~sO芧8 04F#Zlj?;lx`.rPEB9Tv>bu ~; "He$s:DF@vAEXYM'{8f-K_4d%:o %i`c(*[&X;#52Q8#푲:ƣإ)=ٲK/Qj羽k1k $?`sLe:9qB_|)Kֆٲ$?F ,4L'gґ:S)>N-ǷA澅U'~ v J&c5aqXRW#-'OL- 41>:%fNcgUSff9E %r'~d8L~#|ɻRW8|p5?o6]D@؇u` uG?а5td!. Df,.+r*\e酡aƆ'DlqPJl7,ۦAv7uP}?CGV3EW7 èmvZ9ws1ԚTqxdpCcqEjϛъr~>*$wq> 8l$E(ĜW覝]Q=E+AUt$No]:%ry }.?!l4)G:ŎM@ =ͽ/Z6O=3i(E@"wB.uZh? D? K6|ѱ^7cw:? MH2Z@s ,& >X 㷾tIӟLIO<8G`XJ˃cmϠ">Iz2y xٷ ~;atbdLP[u$'K{C3nQi.R(:Xű'Ks&e1u2GFiq!9/x~@}2߈9kD˧L3{GLs^#جyB%;;dq.MmULrJG5,q] X>M|DׄY<"JDVg脍fޏ"KIGd@dR&y{LdY/rn ȲC"> #(RS(N=n@][$yUzcu74{y="*xhH"6@R R R R R R V*ԵxhqFj^_$lik@^ T*m8gv0[.E/'!UmrZ-7yd{߹+wGжG1:snU#9]k=ʷ$́f0;K';H|mE!" 5O4wNiߥ+Yu.@[z쯼`}FQR%$%M&bm}]]ʀKS'DաNg{[R}u50l*/E-4 'SMSܐx5ݽZes,5h⥹BGeցJRJRJRJR8Xg97,r,rXm|ok׵{^T?JF_<@{f}$nJ.@oO*N B.bl5d_ڢ5!O3 S,HF@$)=lUEƆʇoqcpu-"/O_JSʟ1`MxY9; f6mt:]V_ XݙZo߻NIiM-C+{}xײA6_WSVXF[:r]gyzگl)B￑&i) cƯh8w_":RoU Oc]ŽqY`b]xc;?8Qc{9+rkmّ(tzk ^< hdzS =p~Z%m Ij]|1'$jݚ5Msgςkτ DF$)zL<*Tq ei,Xx0v=6ߓ6?jEE!%eOqW)vfy:MɺyLc9Pu 8n R Vv"%9 W &`O9#vsb90L4)XBG$XU6)DJ@c兂BGDa!c%&%-Âb^I^habhFbVW.S6qdĘ+'1 !aL}K|UG[J> 1I4KˇFo1ܔV88B~;r$X5ΊwBsdvDzVh.=#w9w#JDkBeJ 09GO"h%?̡II_[ YG\׶: JV3I^]/+AcYd<! %IJd1"Ȍp4@K)K2})JP)JP)JP)JP)JP)JP+vik~krc|moyey@ݝgV/mroYrE%۵2jN>ݚwk^ycBI>*[_Si3ʢ\.M(]U[g:ɫ-ֵ#v~ӱD`˼/مp:aȽ ڤ.T IKt'z8zVƉ#=z95g=ßH0:ױ]T|4JJ_SӒS hA1O|w.gfy>z~ӻ`IR R R R R R R R R R R Rb(gHy5dŘ!:S>3Cť_*-no)#uF۟9Ы JP)JP)JP)JP)JP)JP)JP)J= p(FO'Hˀd=< O_!ܫgfO;8kOaqnoq&v6kѐn<*I$<\s9^-% Vgv{ 5lؙ#,:]b;Tv-bz'/$<BG` zjtؙr+m̲a,H޸Ɏȸ3O(;d"z2A3\ί{dhPCzךֆ5iP0/VHvyOq(jhHTSizua6*P)JP)JP)JP)JP)Z|k2o TB)[ # wdle '3G[6Sba\V8fO82Ό|ӠC]))$),:0 ȟ=4! Io凕Z V.4~ |Cf&xqzssQ "@f}LXKcV<&Tl8>2XBySc8q39;;5G, ZJG5# f|_ "OR ? KO2;,R'\>RX7&H"%CІ,A( ()>Sz+=_OswRwEy- U|@A*:q#K௾ۇʘ>?641T]NΦ6|%R9PN&qt4 BɌ8?d_ӱ)j4|_|2 ͑㳛ɂaO2z?,9"ZJ%-VPyZ3 'k(|? J@l֌N^xVC^A]C Ep~>ZHS7$tSsRfy^"r)X*)`0P,L6G?U$!s3SDIr,&n &1xL@L}QR&. oLna0Ң733:;F~?@YMqk#)? olxd$8X"M >폭M?#\-ս6C p⣀.wun&=Xz/8z2[ g6n I{ё<@ dž6c@p%ҔRl42B L@!l9aO)fM!㉤p2hp`+-ewXa3pX1bc$ΈʏJ717)t\dЃzdu3 >䙜yb4;09)Kiy";x*JÓ$V?ϟ sf=;cx*rpnzqY xq!wR=H;{@ΪK3~qN .$y)d ?íR)WIHQ>)[g< 8ő2#J:&džOH/D@?ͽ[jr~}I*y9d][} !=*c)gq(M&=lC /ț>g8a`LAh)Ph\] y] n7¥o,ǬUHu"J[?)"en?2Mb[p yŎfPP̕(j*E6:$>i2ǑeAF,ERX)kPR"H)JP)JP)JP)JP)JP)JP)JP*zD)#J=_2aώٖk6O2@eU F䑴ZAj&7rEkXRE69](9僳v8 C˙&Z'1I\ַB$tcMͮF"\WUB-<ʠ$nYnT\?v:އk*zjsg]tέj~(Ҫ׳N;9rNh6#JB'ԭJgR5wBtl٥B}ջVyنXe7ɧ>$9tgIg.*py~DFS-#9Yb8 /c-Y7&uFBi\ߏ\d+X]ӗ/-TqOlG6ZdhZTҰ3w5\4iӖˆ>"r@FӀP{n`p[< X]/-{mמa*)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)J%Ǡ8 L d~c&3z+{Y[v,Mή{E3uIҤe I b2\Fs 3 ns~X;3ir3߻,4f*dz~ @[/ݱ  m&viK0Mmf9jͩKyVo/̇O-"7VHZ$0 (tfkٸtq @/F료e'g6^߽,Q"{PȐ3"lҋ{vۡvXƣmesl~i4y5Է6!I5Bҷ{L͸]rzѹ_^1;(c166fFl#`Jd Sj֙IM^tj^o^ׯ XaVkׯ uׯa0 01qkZֵ(((((( α'\+RFҚً>Ha'1W4~;X YW8tzP?o@E^i]~뿌~#Ĝ3d/o#))lgtz; ȲH#osxNZϼd|O~ȩӝŠńObQ$b%(9YlYicC|!Ll KMA#|>scH=L22ip>q4>:= d^9 yJ0%@3+y~?|`*"s+(8MFlA)\g'ԒLEռ's2&~GѠ 2h&0n쉺cΏy)5|7$3Yf`'Gܨ+%I}N=cMPhZ:K##2R&n41gL@}`PRVΈS3hLV3"T5XFiC _' >; ?al%>PWA"n|p؄)Sy$(.Ti (*79ptX~|lBqXۍ"p"4IRMWIK8Ai@9ǡ7u|)ފpW~@ſh]T^K}4U_1~ʎ44wH+/ϻPSEHњn{OMw j(iWG/,]wc 7ȱÑhcoemP`: ?7%*āNTkR6amqq*byxLݭr=?Jیϰݼ}YkA gg@RLm*JuLcK"$4 w%R[@w9̧ޓ%|$(a,Me*&"4F@Rpk`5'B2&:F:veJPހb:b%/|k)y1!1ngz>K"1[%nzZ"%o*E6?R4ffi]4x &qEUđDk,py>Xu{GT8?R<< xL>XЏ9McsrR(|HeJ*h 6!,f۷¦'#fxSՒ*4}% PYS4|fF + $J@G2hfBmchјpŏ҂bI6|vԛx:(֛'L {0pa;+sVA6TPs s'D0{OI;#3#AG(}U,IIZ&x#9wq=BfMmͱt 3tu*ttҝN҃3Svf F駶4A sWnB G "L$0UD,(hQO\%yu9f,S|I+G2!Da ?w9Z_9ZF9hk~ kQV/Hqkơ̎?5HS 7 R)մBS$l6)J)J)J)J)J)J)J)J)JSSx:Β44P7f[QIZvк*wޑFiA- KS'o?o=͢׾:t[ܡ HoXwC%Z[,۰I8_J;:#gөT1ۼ-gdV.aTb>*lxըf~D5LyPc6*lΘمĭ:굱3,SI^Tݫ^e2=6;Nաս^w%^vK)Ֆ;SKn={2Jq>O^J68>&%fuwۿ58s+3n,litX+^-Wi?,>U&.3侔٫݈$bWW=Zbލ3Eu}Х*?YHΏ-4v>99%߈2I{.XoRDq&vjhUpIsI0|Hq[v0.;vWwLPo^&[4=;a 7U)J)J)J)J)J)J)J)J)J)ZWaXw2_=xa<|)muEy-vhnknw~AiTNuD^=H:ztf:6F|1kQi"nRԺ~ DKnIn@P__Z 8_ +鵣e^š*Q2L=pMKRk[Kˑ6"V+{szmW\JDHՖ*ժQ 'ӆ{wݳ Za͙7}1""MW$juſ`'|GK.؝rd.nٯk} 42Ԅ~T{˭YBE"r8&ߊjypkH^j&-Mfu,m^z\2)2\1E`a)T\_aoD=>npvWf߻n“0.Aa/ +Ykd;U͛nW׭&c/u86 ؞7or91~#l*m_OՍjzԼݣڹJE5lG'siݖ3E ^}hz򾿢_瑨ψu*6$qvǑhr̻$bbF#-:_FcZum٧Dܗ㷾ؒ_eҨIgdZ}~?k@P>as6v|2 _\g/]xm̪-z*d}[6Hq^KkjF{{&l^rH~ܬ:7˰,Jv&ȑѯ-gWǨu[Nz;̬(6ֿc@B&_MAc_ӻ zmzϦo#,owÎս}_"WgyU2&,|ohQ7[,oy|K#sj}IpCҭ&6̭ګIY~?\wے!hP.=xWwޭ=kuT/_VѷH3>ns/7O[_1-h󕜙+瞫&io@U[y_>D9!<ߤ|$v5oܿ s:pwO[4L]AE;,/ؑ Ԣ=-۰1זY7DڼlK춥3hqhNB*dەm|tӞܱ!Qhup~l#~_qz[{zp m>c}xHfhTS&7&Ro ׅ׻Z7Aznm߹~8,Tcm($7l"0mi!m7AѪνW6_)OTz+-i>!Ll@ {qJ5lկ<3;=sp7pBiZF7՝uFHw~P6<ڟJyӊlmǠPs뇋*S{8/ C*نlToDrƝНcrWm"S .U( WcHx<<+l[=۞;ۯ EhCc0pATeDm ab}{ZLmVJtkO ml”RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR wFq_yQfy ,AXFBNeRMɖ 47qvL3Z$D }A!gy2BKD+3k ՍIk)bq-E-ϢS ?+q~}"7|b?PJi 8|ͳ$hR<@sG,1TQN 3pYqw^Dh&~;)?A/@SY&س'oaT :2Yċqc;`9^ה*LXyHq#I-}De0GᲔtM "K_}=~+z%հ*|IE|ͱ.C?H!  Ҩ35vI|[F,>S;24&UK3T305D#UP+_FDq#pO N$ lZ4~{{bbp~2O숖"s4;Y43{֦':X}Q663nCg~5ܩP Z3C@Bד7>#V8} rejLC?j BM}~R灟k.A86p/>_3ưME1aèSy_joyZt,.B3u8o) $FNA6Ŏ(ՠl@[8ŤKdpՈ́}:/9OnN:@2%hlBS Q3|B`j`AydzJALCвgRHPH'En$dMPG M/h‰XB Po< p0|XL.&Lh*2bΘA`13Z22"ϭɝ&:f6 ЙVO"f#EC8g!fkwF"sʱYlW0J*Z{Lv1 *Lp'WE3,s ,  sK$ޏL8CʀP GBT)d9 g_@I?F.=1h;~5Q(M7Z̓'16g(3lAw<"?m JpVMl: e As,# ~"~gNq{':AhSZgE[2`4oԮ`jt9b~Փ1.U;X8c`4A*qyWyX8A#aѬT {`(1'fMTu/,7x+ԮBBwnIkf4"w3C7f;nX$R 7u*h)v  7 7&ggL}6ffi[ےB65jy'Tcq`~l Mۧ2W܍FSY9Ш'Cf4N幆y9S:x47֡m $ڢi$|Ǣ5/>ccKdƂ&,5,**Jܙ b`Sa` j&bl橞94c"e>[0Ǧ\?ЃL9Ƚ~bv~_il?} bG%@)KK8/m,)&8:j$/{\b üX6Tbz&W=q.t(b+"N r$A/Zf"^W2)9F bGvN?@GW㚄I f%8/LT-BIrGwUPvh,f>(} /Bq/-]+tq1|RJ >)v`2>?8&xb 2ѱ`_IOUEM>@zF>G)63H@tvS']|r~V]wsvEC)7TeQ)M'wAp NtS+u;š&;]j c{YN.Utfz kVv6e&a}b=[`wݔ& V.r}c,v(!CC!r6YS1zFu)SYy*9sfdQ>'/ gOȢ6rct? >/yfkjz7y3Oئro6=xj"UAAٽ)xO,?*uf.uuGQkףO|zT*Iar,Jz f>XFE~!dEUP!(#*jO*rሒK/"yuC){.:kx {?l? ʥz̲c==IsͽS?i[ͦ-UxdW*Ѫ|B:]ߛn662N@bS٠E_8hd^\j~PJoV "T$mR>}T~FzCRPU(߀ETQcR6JE+-KbAG-2 Z Cd~VIT fl'g&R7Z7Uc!?BHQ^GQȤ@>۴AX_AQ}4(NbDq aW cuH3*ذFcM7^ͲS^ bJk5*A*gZn$A'ϳBӓBM9Waeػͤ(!U8J4)#&hRBI!6H kgDl9zQ a*;3Š= 4^@lwkJKTBSu1p\=ylz+*{\y HV5WUPSJY-mq6*֑/fWsJWΐ!¯2V/@$ސwÄleUd9^t^OxhP'b+:ϙGJE\]lR5TYiX-Üc_K.GaDKOt79޿q[^mX RL2}VQs&;$EW-oljcPHS(ZQ`aF,YT(LҶ"HϷP ~ⷔUAEd ֝Y9JfS6c[sSmd4##h~`F^6A6e0cccccccd?c-NJ-x\ 'Lì{.[8cwy.ȫXݜB%m)yn)La,ZG8垷|de7]82ߝ)M:r eRP}3D䌝_?dv n%+[¬`+[+_U3O)x$n|%lyaӑn-.w_wSnJ-ʑ!u0KXlZ6uH#Ϲc\p˟@EbSʒߨtt#]b͹Uqg/ hl,+\ HYsjYۏ,UW4Ѯ" Aw!hAG) UOHmGN;q۴~qγ*9@EҶMHY, T/ݻV+Z_[Zb~Ÿۭ'7s$VCYU!oSNZGj.ƕ=d7N[Еdk!m?VebK.+)GٱjٔrHy&wDՉ >AWZISdUOW(3pXg0pU?E^ZYh[u*mjETQ`ӑYYvr7҉GwzH#YStPm'*wĿ]p,QHH>ٱd_ ݼH ubl !Sh.NKLTMcJYpR**B2!?4##h}ctT̡an)۞Z QwRUм1ݤdd^f{okn eN^$RLFCav;r*ϕxfW2~۶Su`r$~/{xm -'"Eb<"y<7w5d_B("f>KtxLn>U[Ak^ mr%: ~2U8͙j<,pwF!^:H25f:F9XMŚcvҳGR3dWWH ydȞ-dN3 )4s ]a~Z q׍?Q#<*gYp+NEE:d2/1lw┷AN;YAVebK.+)GٱjٔrHy&wDՉ >AWZIauVsKB񗶞dtwNve2QZy;]PW6iAUzWd+dnƹqՃQZu*sF9=SVl%,~Xj?"LU6G#M -K 2PSu+]c,Vk>kܗ*8\UqѮXjc  a mĺ7hbrx cMzۥŁ)yז x$uMҗ-Hգ l7UmMaj,}_>cj[3 <W\,½/ٷ wɢ+3ogW,h}ο$3ԋ("c͞!31& >W]__sX9_#[xo}v],rh}^@>ؗZ|qд*OړjN@,\UQʆ gfΏFR;Maf#iqj@IĤA؎}2ݶ?ޜ[Q,ېo`|xD ӺIgsr MmNgˌf=̍.G*߀:J|Z'7HoMkjE $Ctl*ū&uj8DK G^PN{w U+ɵ5c[TĥULVN gI u[̡ eLE/-ڋx~Kao/=,j`W.tI~`M&ֺ^lʵgkx:b"o];t/23mvHmkkULDT:Cm(gSüj{w*V9vf+K ^X^Պ2cSO&컭q;͹ⴰm6_Cn!fd#.hLK<5Ee[H.U<7\>Wd+-~ 7ٵaT `T^l{h^ŦǰM`7+!l܋`E ǟJ.;Oۮ?ՁSTzKjU&r4'JS;pJ\(fqд*OړjN@,\UQʆ gfΏFR;Maf#iqj@IĤnw,׍>p(idfn,.*ʤrie`r>436ȖFN)H~k lXr8'Xg9VT^X9GtKxk[R.pM aV-X3Q%Xf2:)>Z㘹}2M:|Lܝ5xNl\?A`tDMh6_PnknN+Nip\ۼ_M8͙ ޴Av3]~0gϊNX X֦+ 1, RlVKcU-4 eWӉ+Tv1)`ϕŦUN@X'gdÄGbD7J*ͩ;TbR0f`_Ks sh"z/#m>sy)?%0TY$]eT%\k$f{ڞ66G%29iIWBƪ8GwvUEy--:+Q{[TJ a1;ͅȫ;>V⪵ ]\0 o^~v _`X|v"xwUf?c 5lN[5K梶l琞p^[Sտnt.i} ɪlUcQAS?BT䪱۷?Uͮt:DzpyU*}q='zkw,*.2Xҗ*D#/W9IqoIUej&ARt;MkV͉+Xچ/cm>̏aGnDݧ#A45]Y $ֶ 2a{Ec޶APq|9yAΊa;Aw֕VQGJ~3kҙG+$wo o˥Mژ>USozd Oێ8q,56\.zqPΪ)4 UK4~ԄĤӈ!)tho/(;>V;_$^dkc3g3\e\c6=H:OA}c}>j!\HyN\JGO|F{>8b<\7rpM͝^EÝ'qT,v=m#k0000000000000000000\JEeu70YD-jUS?5SoZ!5s(|K(lW:Ǔ?A-Aַ{ֵk^Ƶ~w5?M\rGd2M,zMu:Q:+BFX֎8I+c4!uJ= >Yr=9R:D;ß r-6,N?2.u/\h ꟦*0M9>}H.T^j5KbCݼyMr8ْ5gd08GD+4Z1 򽁰yGu 4VB׸+쳫[Z6 ƃF,f {ד0V7F54VMlҽ=R>l*7.:3{[ !t~bi;)@8QV2 MYp.b*ֆ#oV rv˥%Kfg+M>) ֺlM8MVy$)&}>і8[f~ .j"/KX ZRԻ19ɞ)iyi$J'Nɿ"=-'qߧf߸umkԃ@F=Lv|%ggԔ_ӦDR:3~x0z?YU_ݖ"V}ߔs9_.a~§-֝-8FԲ˞2yAjco?-X,9 ȔKSVAjz"6&%M"v1]!1]U=mWן:O+R"t tPA%#vlW0읠!AJi> F?֚ցz$uL! WAl^xגHS+C4 6S%=?܎8[.LH]}4WF'-l:s7 Q[4h?JeO§k*<]]Ls<*D*/tohޘ/mU`BZw)|L.(f) {ڌčV9TޒG E=~|'ݾCنb״;GHVt.cd8C& 1ŞYjLс,;f3^9!Nޏ&ְg=m|1;B"i2%&7օIT 1&#X/mM<]Rhk8걨8Ė/[dpRq>+ԺqPaasT (04dS+(.qr0]i._~^T-п9pup7n(@=z|5eBh-zV! ߱zX ,8X,W''f EEg8dFïSg hf=xmFNFAh_t3/O_hhXM~ַ\Nh;/򖓦)e#ߦ7f7k=KXKM㛑CnA_b5սi!Bս!_O A?)(3x1wю牱 yqA(ţ0 ^ `j}V!z޷[L ,a0`` A޶k{o[޷(=^ŘSa M-ak[{,\ŀEP0Z!?M/H}Yf3H[FT#Pgڄz)4'lJ"Bht'rG45_unwٟ'~Bշ]i_sWV69`A$_Dxo3}v#,mw"@ -DmOVQF*+~Oꭆ+$wo'Dbm_\ޟ|UTl111111111111111117ˑ5T⤄M,R2$F1F(TAAF!h9o{޵k{ZֲֿO:Gξ)yǔgޛ5cܑU/SC/C*drO MT }zQob"G3]k!W ̀Dgâ3oܭGj~+Z/ _;>=yj]9˻UXͼ; WڧVɆ-k,dJ4nIPOhWu;}h*zC>Ei"XT9 D-'1DQ!{vq׼BTMI肻1,NCD/v(laO'ҿX G`ki/tȟrՇkhuo2g)%IE/?ѳOht,(i1~,rrt8.MRAXG$"(`.`A`fYŁtHK;[8ьbό`~kZֵkZֵkZצ~5k_kZcccc:5L]Bw0nXf!!2W`ކ!&v1bQӝr%/롼| 4Hdp@O$ 6,|Sy#rG̔r;|xנ\zS@:y0w*2!]+wTT2ƈ ܶ{NQo&(=JqLƚ9*)4Čvrуlt@gcRjs3Z3p}cvxvΖGbYLiqZ'ա̅M9*hj{a-VU#g@-Dڵ0͢3 L^bt`47iBa(5H s3jYqBYJrR|Czz5>?Q'3u}pDT} 3/Ä&+w^mb(.:KHdCS:}^ț%;04ʙTi[D+'kJؤ:֏@ֵ*Ԧzb$lAC00000?gձ;;J5..΋$j.p\RF=JAf0"'W(xeJE|.IRQ7}Kr7 (HķfQk ^sGcy j67"^ؼzrԢHh 4m5YiBS2BU$QX˝ܧ7 ̧+ #\`ZUoO>$])4 ѳb$TrSBvɏ8 Js7@v6:bۇKR#9ҥN_=aIfUPd4=+X,64[$he7U%ܭR#*3xGN9鸕ӛn.=l=>`C|~hB#4f FuA H%*RJL1E9 h$(XBZ}q11111 4;(ÝnH9Vح.uc"wEmj@mHW<x?o8(7xJvˤj-*["=I oOkF4nGo;H!\∃6C@'.QiY5Aied:Mu`w;BܚܖX#vDEA)H\Q|UZ8L2Nj=(by !5GJ">3s}"T'{CR.Hzs=5/~'KF$?; 'B[ji4K"wD±{C1"TXy"D;֪s:!_w#4G"IN{jgŎ=ZK5`[ǃXbS8#^Ҷ$-+~D3hE2gɓTlʶbm&2Fa(\jg'rtL`*}>SZExl;ی%fzy?~օ8PpD AXFoAt/jc8#RiaMi+X)e>@:t[\e㊾pv[JYnw68L[%v@Ӗ[@bE*el쫦Zp[5PFNT-k 3ľP֓D_fl`Eصkaޡ3ևoF89}L#+% Elъɩb#ַ^-ѦVEC,rg.Wjj y;y)s]IւBLy2shb ڵGy22u|i4=c/E*۰obý[0*H]~^/.dF%N7R~?>olZ1kwU :b/Og޽utDRp+Zl0Z_wmoZ~R"o䣜|I_ L80koݭ-C _ˀ}K4ȋtf})+I=u~7H<ȏ~_"V3u*j01?4f#@#{уv]A[>0*>h{2A׌+J?i*F0":LT|,CVO_pt A~;RQ5AZd )Kb1hW#I!>ƹ>^r4*z>-4jzd>"o7Aњ'C !н}+[ÿ8չAkʝQ_BR1 {\z.tjZT5d #MQh- ҙ1J\JUŮK+4Ç) <5Q]'FNe]U5s:DC7@@*QFF與惾jJ Hjה1, ٶ9XB7\JsKL"43Cg\fznzA\܋ejcmHQB5TQ?A? Z&MG%J,T)خg{WF*lϕz,nt}ll$.zÿ% a DP?cccccc~9~s:*߮Jz!\ʖ3ęL\2PCwpci׷smԈ% ]Fs?6SƽK!7X*guIqE3 g_coJJ-Hi . ;ţ>Y+-&".y$)k A64sm:^a\xÓ|uQ[>UUḘ ʊ]Pg,>\~JPͫߡ+PX1y_LB@y0k+l# hkDD a;Fhůdzw6W2q݃>F~5zu[Yd&zޢcn.b\@O{v] !@ۧ'I#mb;)s~) <&GVâi*Շr6D^9#<8>I]JC vaXw=+jb>PUR#/l{$5El[e/a{ky%`T!wlQU߈~{}KQ'^6elPձ\݈-bΨTzD;^.DohN%Gԭ/0߷Co. gZ!Z;9KF_]ݯMzkZˠ, X8~_GP!vɄ_0!^۽=~57Iߕ^k|ʌ[IխhABʯǭk=]^0)O^"n_5e@-mֵYh_7P*qeEc%ЃOZ}O[֌YtxytByꅲCk~y)oBl{Mo'Fµ@D ؔ?bh1OR|E^ XOVj צbAWG3bC3 ãPw$5>8e]6DWw|a |36R+sm2@xâ%j_#[.cw=S֨j?97*4[e8ϬI(yYѩH'VU3d&֭+m*-s0)†A7BЂ`I(^͌aݑQTHm¼Y ąF"(l&&+c=hw  [2r*䪮H$8(OC[A'{Q&7csZi g7DFYah tьkD 2 4d9@H=H=C_yo[[~Wox ;ɵ|BGKWIĐ N+OXx\A*675gy\<{[٥Yּڬ΢}za%Ó)jfF½Niīf %KsW-v65\M*d)VJC;!DYŅ7 Hv͵" ccccc>q[rH:Jao@4O=32RM=]ah2D)D|m)E7WCޔ |<*m9"k}SR|%հPPSl,C_CLqi+ o'?x\UC|UwGoo=K,Di8]EӖոE,vR#N'0(#zDž}1a٤vy_M]ZV1~GgqE!ȅpN"^m[dsm !{IGl{ַ&_ F2G~A5g=Tum\/-! 'Y7LzfƶƬ567Au_]9HSl jvq7~жCJp_Auj\Q-bZ,-\J^Lf߷|ALnf{_]¼EVzNz AOƽ?eN0"VhBJԍaM9M{tk_zzzkӓ\W 1v2kkZ^{<`xkl'AƇ&YL?zg_EN])ʭ" bK-o~дo[z޷_J'&)&#LM=PS3ߥC/~z }.ѺwH#gkZ0_CݣLlo{a!zk,?%=^B/(jM i؛!g$kz$ 2.CI!1IeGg]0)7sh/96۳zOS+~Z-+a̲A(`==ŀwsHiJƟp0=q2p@nGOI[c ?jy IyTU|=>:b,sE*x*M'&(r8'!h`\whmk^˥sSmV"(%npӡPqIF6iI3J9N&ҸMUҽ*`Ȥae[|L2@bKV(:V+9q$k_ێ28TH簏E,uo9/N$6 |<$1(NNi'h4aGi{fh` Ѓz0*3ǕnBwg p Ϋ8KvqxfnVTj61I$G$ gfĺ?[X]iyqNocd⴨ˎ衮ޑBkFFOSKےަF!bC\ڨ56p9AѪBix]:>ܥW"]5L7:XKBnIg2U,ۆYlohgJq~ynRجb~߃{9ܦ]E^Bˠ\`,y|{Of2'żaNgu:,5%8Џe`o~>ÊۇS>-ߣ?pn?-|nWWr)㞠C#=ǒ4Ma\kos.p)1 $kQ$(d:7qJЯ$MiբNDB^ocmqE$.Ƃ{!JUIXhhwi40"weyhZɩݥ1K[Qr5ќJKRjeI( 0-_mx4# H <s4:N)LZC,[i{M$ |~9Lz]N7N;/*讗OȡWQ{\ ń`1Zv$61111ʣG ƫnwhO&SRRI,=+utJJw9{,HufS[?Rw-{"D(h[Owt^ b>p)JP-P*G*|r^<$#bhD4'Ƕ vR铧N9 JTI):d ӧ ($I$,!`@:ֵ?V^J_:U]5L#}>L+X-me42W7 F˩G;'5\n !gxnYN@y ~Iz*΂y鹯@E=TK+.gۉ eItNq` 7S]sER5J@&}Z i-]?zcY5LkS7 t~M &CP/:F]>O^(_9p-5el09w-axn֛I'c諍ێLq)`vS;7yjr#)71td6èG ikR>flѩVrq蝖`v,K!@f)˲r4haOe/M–03YSOE#>gbNΠt'2ccc4(N,8iF&iF`0 0oaA-o[޲-K _VӱѧW d1ipugv\#vt87f%kEsƯJ];QGt%bs~Vrh%ZghOiZvL1Uq%k^K5l9%P qeuCy}!@FHOU9n},&اhi}TR(ҥSDR|L\T;8e̽w(iUd>1"򮵴Z*Y Ki[߮MkAK8QbCϭ-Hb*+|EqxuZ([S4(+>C TI@֨+(u*ęEC3\X2[I躝ͫs|5MW:[CA IlHmʺ`&iǏ;kᔋ5Ú96[MutLi r}%;hf= NKm%R{Tqa0&O- '0=oD$RakTjS`:GdkyV_]Ȩ測٧m$Qû+*>Ar/ G5ZPײu/ [ '·X u(vhMiBƜbOUߟr>tlS e4>ĩM]|kPiR)>&.l*N X__`\6IĖvG;]kASkAZvz!ßU-]Tu\}1WT8[r2%3mD#VMYp܏EqxuZ([S4(+>C TI@֨+(u*ęEC3\X2[I躝ͫs?h^ (+QC5O;^YK+$j(%Gqmsس_;ƔufM ?Ҥ7ZP< N̖>Ě]$Um5UA9y Cʩ\=/1}>ڶvM&5q siCqT:۪y6NIa.y:9vJA\` p')dE5AͷuS_l OM{|w b YSHkK눝 JV6:q Pc]12/2 ;,IK{SUƦu4$:ٕDʕsA =RL1&(RA$q`YDXDa !h:5IZ}.%SZNj5QF'9(1cQb R׋#O\př*DRc;4 )xLh YzѓNX"I5APV2ņ)ՍqKcO, `WY˯?3?znxd;nI` (?8L,//XYut젏#&Ӹ ')^.b6k&'F!,gFE.a#0`vZЂ [Ђ [Ђ-oz޷zze_}> RZܧSA3~e8nc/ucP{C0!`rxR' , R ~/Zgw ̗ JOs=%>F8!P/a =I{͎4y \xFMRR\H#R%x~"Q0ugTbVx4[ oYT< r׹d @]7~뙡3W61KmA ܸcY/0tԑj5 ,J]&Nk^rŲ jIVb, d6iȴi[(v}UD)dJĉX?1`1`1`1`2xځyH3|RbP mM:nnA=&eѾ17rx9y9Ë@BwRfLCɲvVRs r] 5%;[%yCZgcæ.7呩.J8&?WUKZPEBA3~ɜ|IeC"P,.qhD-"5:{;#iWP@EaB3M;GO?Kvݣ5#^chÏ-mփ7'0Dnim1Ez1pDHZV2P&5ܷ٢6Vy{V ual6%עU g =\%'>S~c" }RNм3;J+B%iФI3axX>pB !]hz܄.@Ô<'"0hA$h0"f1<\/n,F`\0DR"DQ(r?[нS6+S{@=2He[%3/dw 9~ƒv!ԪpH cjFt$Ki8v?_Yrw.د\ :L?oz Z4af8 RJyD1&6Y!YC{}^k˪ RI$^YIo)cLVWSY=`,{jG=?Ovġ 6w`X >u$bG2:ށQr+i+NqiWq7:\ՙ1 P(Hdhy!DM hDcdB)8CJ"1) c!oa6*8+8 ĤO[ғh4/okIkalk72SU2OVĜZ*y߆!]];j 8zh$c)2zm:rLY-WvDW-i.ˇGQG Ǥ΍*ETb G^=1&7Xم}.NO$CD'=Z^Th7lZӑ]lNDt玛9f-Q$ [9:h;m>ce𳣺S7DS(RdVs?#H+)3AaQ?<BYiߥ  J&e,.ԉf'2"3FO* q5MnۀYcKp<r]5Xv*)r^˂cY!pDjQ:F0{,;E!x8̯|qBUlvuV[޷$ֆp= pK6`l/,k♟!c!v"RZ~ / {ƷLƷ[o^޿:޷1112,ޔsp*T}aD@0t? `wh~݇z޷o0 w/iIb;;,[9[*p)F*b`޽{ QPgJ͵Nb@''s5.,B%1F{"ƑY/ KY_:ZC' V Jpr=ɜֆ'4/j|ȴQ[,iFbiLbWM-שWB4iԜY@CT(~$%}i> 3יoN[oa!zqjt ManJq nEl{9\<[ Kх+eqF#mFo+)ZeD(0any)+eyIMq 9}ձ$3  H_djchR`(tHsyaK<,9{h"$+-M.rWXMf Om'E7Wkn =߳i!kkT=f!tH1:xx9h䥩w椳oSK,N053˥ցnx[4kKVu#3[y[@$  w:'y3g*2zy]D0zpYAWz U6T~vy5sKTo':߮~ @Q8><$+hRH۫]C4wV5}bijRtYWviU>4!\ڤE  AE٩<! cccccccgzU:"Hڽ9׷LJ+R(,E(J"B!q2,B zߖ,lZskؓyҙF Bb -!bKكz0t#~w#IV>=&·oCW--HQ+|3G|nքf N_ kx-ߜX`Y l:xU(aLԔ^đ6c˄,$<\7EQy5欍+}?ܖh u/g%5p4룐hLOwY051*D2)ezևM@T kCт.n4N= 4J elIwO`9_ƴPf"{뽛޷k~͗w{c4!&)w\^J*]>_C J?6cY=w' |]4L5(>7_œ4/M|ďɗ'0 1g;Alezo_.lPN{_ƴvL!O{C=y29WᚐU{}-~| k_VAzzk~05'PzԷyR7zقij`M<>Q~Cg<6yTWS<^֐R57T *̋ɖnR= GKw`,NIE0?b;lUt'HoK);דK7 !XS)u϶V}N\r KC_R7m\ќE?Lgjjv _8й!'C\ęBC(/0';SV|1M}x]o"y4fֹisoQɣiU4l&o!XBdl 4#]2\lH2tGK_snp^Z^揟@m£R5YkHpʆ  TqDV2}gNT+`Jlib)+ۥB=ҏJ,*?P uՇRj459ޝLRa(W)i!zth.KLޤ,$ B0N"ze$a'` (c-3ʱ2<+VuD7 z6O#+`O<',Х݀%nRSqU4d)3yw╠k N :u/=dVi"6BbXo5&+|y]z;qpe+MʚpGtaGm8آ^aαI}8zuPc{"$:T]@>ؓsJf.BS-Vz&-M aSܑWhZSꇜφ,q*\x" 0H)ٖBĩ7n8鬳ޙHe&6<GFų5 ưv-zoDZӤ+@:㱁ѿ;ģf޴)Md>l m_i!ݖ/wZЃs?ӕ(Z>/vIF$ [uM% y~OAjcJ{+Z:[Ϟ ~X5֖ܐw el[5Ϧl? x5v3t݂=!?;?o5Ib^Ǣl?z,ԕJ͔?_={l7 {t(^D|Yb =߃~?L7 z~~/Q0jJ~k@v[ߨwl ] 5Tn/_V]h!gR)lͩѻ8^;c-q㻀U%Wkj>`TNzQZٻֵdɑ'!4$HӦJN9 dAIE ,BZ}111111111111U?m%ru w?2M!Es(m0.>8hm ? 4*9fCé,1 XR*dvZdo M.$٩%4Nre$a'2 mOJjyWŭx9L"r(?,T-.8( G g w\Y:c]yBG= T44ei?O73AfCB/qIIHh֕h^Bb+!?*>:RjFs yBVBv9`c,^DyCI;i:{.!Una<6u]ophk5kW+"ӵoRF[5 Śyfc5׈oU9t6#ɪw0IıͫH;> ώ9P~^pKyx7TϸUR, Vޱ@a?s X-Ɇ#2ڀP6k;K^'d=]mGH+2D>ܤ7ABd)6G2x?P+SD3 j 8 zVB`ŭ0.S">t8`LS"fL00:Pt%XMk*"l& k z0; *wT-^ʆ$,!ơZܫoAB1/~ S@߯5Iַ׮ac)A~j(2Mu}c l)1=oIQŦSoh oaޠOMA˵*J~9 \\*̪ꩄ=HC~`f?w B(_<-g _ޒKsoe *kj!"|Q?̇FEܨ~Fx!h=NXJyXѕf/#E RAW# ('‰TzSW?Yl%Yz5* Kg8#8"/L:}PYʼ=Rfw8g2%šA a\ݱ95Qc1!Ҥ:-sCxD>,WL64QmuƱ~ŎzlkJWI,qɑKH!I@ׂXŵ5bͧfTv;] Bʳ;O vJℵ r% TJ4Q;l.4.BLm^v)%M_DkiMDw i1!67#Z mBDr+fl:|EtΫzmK"TI\;$Js@"=" kP<(m\QeFW^ǽ^NeFrC*v2w1J7X`TnfL෇E7l'=+~؅ڃ*y 룺[V"DgN+FcEcX\r(2y:`GZ eB-ꢖyE)QI]-ӍD>(y)2 I7ok7G8#PcAѸNh:b٤/8*S.¹XVh<4{jG)v'Ff*b4&`϶S"L4$F%JӦLQ ӐP@Q$PBYEYaZփ^r7t)!hJM{5ˑi帥0ah*MuO:9з+Ƴ̨(S'KK LtDA"hhc Cdn(n1)2iރ7~Y,iMaqdc,ynEbqXr M!xR>ЍcˢĭmT\hbbfIrFNğ ; UM`aV0kǭ*ʉCqUEҧtXd-3 y[|FF)PeS@f?j?g L#~0 ݿ{*ث/#JYuYJ>͋ṾEGХ7'x$ NOpQ JH*@wsM=7q23D0cִ3[<{׼f!l{ nC<^ސ;Y @ׯ2Mֿ,Z "si UtҖ\.Ԋʐ5<.H`OX3(X[v疥&gf ݻ|ֽw叾K*teZ+q3dմyX9ǝK.ѹ6BJu1WҐ!;щ0A߮t/_)pk@wɒ+WČ4e/+~ߺh4?zzfL޿`Ez,!;h*M>s^4F,ȫ]eN2X9ݓGʞTH1[RR:fwSRW`3 5 /iF^X6V{#ث/#JYuYJ>͋ṾEGХ7'x$ NOpQ JH+ҝ AtUuw?BZd nR˅ڑVR槅ї Ce qNԸLӂ`cM~3YJ#YĪk;UesK+aҖuEtrS 5Iq Ngr y4[Y=ӌٞ`]I'c57SqJ굌͐%jb `ϥ qcϒ +' aN:)z:dֶ͵TτEA^6ݒu8;Ʃzacmvnrd%KōY?VebK.+)GٱjٔrHy&wDՉ >AWZIccccccccccc(l>bvŁGHJmqxosU&+%[DLujEfD񠓰j~;NAj;дrغ{S,/6\-EQ&TM=6ҦT)ygcXA91Ʃ l.KH<]aGwwWiӖ\y̹Yhg2nwO3\j%W( q*ؖ|6?N/%!= h6Qޭl ݍSLDzS2_&ܳR|yV|w?Zv~^i"^_?+[г.FJ=G{<ҦQ0 ɲz.0tm^9.z:dSkʠuӜi.kf`_g7km/ ^ۮTsGk\{%u`[h]e1~)mNGdwWCyNOY P#rwB Mo,>ٹC!{A.ٗX Xu .Y6ERQ?sf[ote}H|] '(Hْ5xӯܛjC._ *ɽ+iL8;ޞhT5 3ve_nYHS$GYw5' 9u*Fe6\ܼfUrײڙ,6zQ;}Cxtj@oktz"9 LΏ2/>垷|de7]82ߝ)M:r eRP_XǠ9=aXn@AY3 #[j2D8#sV\ږv(Y0)u-qR c) Eo, 9HJZ~Cj:w@ێݠuQ,>lzB̾`NOO:T{NS7[6sS^Z Yi%5ՖWX֯)ZaH% 9g!y({{ճ)bK*{;OmV; ؗpVJ>ig6,3NMdҒ牍Up $"5N(+~+\[p[*uV"Nb2w ۑVv|KUk4d00۶Su`r$~/{xm -'"Eb<"y<7w5d_B("f>Kt}p3R# c,{}x|& b1f iYv`r sdO2'9K0TP>b;cֺ*|ƺx:oU ":KA"XۦYmB ӓc>#MVs}#OH>'>F!\Z9Qo![rhsGK%`Bn:u(c;ogL;|T~ݷ/VK#~schIi9Џ+y۹&GX)07Mh%B\SؽDo}[\_+ǟɤGڒ~ tUtNjݚG5j8iGoX&mxpKcU-0)b ySpxv=n>7_J9= v_PI}9O\ ;^'vepYl*M3zifDԟo6Iu%!m3mk!2drm(U11111111111ҩVupVR}]ZP}D،>CSg|c{_c_'r/4sO?D.O>tD+n!RY`@w,~TO?S_E_;7~ wr?{p-;} ͔}3k^ȾfY w;"> ؗ"D)44u?,qM&!oXePXjѕT$-Lr<&S[3ΙhDB3T.Sp:&֐iTVz{ʩeM`ʖ|~hG!Q,f5M3^NxLE>`Nw,sOg}_uY|+Tq~^Ϲl|ّϦq|.SѐDAK%/hTܪSRΤlY i<8}y%Jzrw,uԿ4D}})?o}p}~100000000000000?engauge-digitizer-5.2/doc/developers/usecases.txt000066400000000000000000000060561222557406400222720ustar00rootroot00000000000000/*************************************************************************** usecases.txt - Documentation on the most important use cases. At this point in the project, this file is deprecated and file REGRESSION_TESTS should be examined instead ------------------- begin : Nov 29 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@earthlink.net $Log: usecases.txt,v $ Revision 1.1 2006/10/25 07:41:22 markmitch Cleanup for Debian release Revision 1.3 2006/10/25 04:01:49 markmitch README explains directory contents ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ Measure curve value at various locations on a curve 1. Import graph picture 2. Select Axis Point mode 3. Add axis point along one of the axes, along with its graph coordinates 4. Add axis point along one of the axes, along with its graph coordinates 5. Add axis point along one of the axes, along with its graph coordinates 6. Place cursor over points on curve and observe coordinates in status bar Create a tabular text file containing coordinate values without segment fill 1. Import graph picture 2. Select Axis Point mode 3. Add axis point along one of the axes, along with its graph coordinates 4. Add axis point along one of the axes, along with its graph coordinates 5. Add axis point along one of the axes, along with its graph coordinates 6. Select Curve Point mode 7. Add many curve points along the curve 8. Export file Create a tabular text file containing coordinate values with segment fill 1. Import graph picture 2. Select Axis Point Mode 3. Add axis point along one of the axes, along with its graph coordinates 4. Add axis point along one of the axes, along with its graph coordinates 5. Add axis point along one of the axes, along with its graph coordinates 6. Select Segment Fill mode 7. Click on segments to quickly create a curve points along the segments 8. Select Curve Point mode 9. Add a few curve points in the parts of the curve not covered by segments 10. Export file Measure angles, distances and areas on a map 1. Import map picture 2. Select Scale Bar mode 3. Click and drag to create a scale bar, and enter the length 4. Enable the Measure Geometry window using View/Measure Geometry menu option 5. Select Measure Point mode 6. Add measure points onto the map 7. View, or copy and paste, the values in the Measure Geometry window engauge-digitizer-5.2/doc/users/000077500000000000000000000000001222557406400167005ustar00rootroot00000000000000engauge-digitizer-5.2/doc/users/README000066400000000000000000000007271222557406400175660ustar00rootroot00000000000000Introduction ------------ All user documentation is found in the usermanual directory within the main directory. Open the file 'usermanual/index.html' in your browser to access that documentation. Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/osx/000077500000000000000000000000001222557406400156035ustar00rootroot00000000000000engauge-digitizer-5.2/osx/Info.plist000066400000000000000000000011631222557406400175540ustar00rootroot00000000000000 CFBundleExecutable engauge CFBundleGetInfoString © 2004 by Mark Mitchell CFBundleIconFile CFBundlePackageType APPL CFBundleSignature NGAG NOTE This file was generated by qmake -spec macx-pbuilder engauge-digitizer-5.2/osx/PkgInfo000066400000000000000000000000111222557406400170530ustar00rootroot00000000000000APPLNGAG engauge-digitizer-5.2/release_windows.bat000077500000000000000000000041261222557406400206620ustar00rootroot00000000000000@echo off rem this script builds Engauge Digitizer for MS Windows platforms rem usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] rem author: mark mitchell rem release directory %releaseDir% is one level below the %releaseRootDir% directory, to be rem consistent with the linux and osx environments where the release directory ends up in rem the user's current directory when he/she untars! set releaseRootDir=releaseRoot rem parse optional command line argument to override directory defaults if "%1" == "" goto usage if "%2" == "" goto usage set version=%1_%2 if "%3" == "" goto noDirectory set releaseRootDir=%3% :noDirectory set releaseDir=%releaseRootDir%\engauge rem make sure executable exists in bin directory if not exist bin\engauge.exe goto missingExe set zipFile=..\digit-exe-windows-%version%.zip echo echo Version number: %version% echo Building release in directory: %releaseDir% echo Writing to zip file: %zipFile% rem clean up release directory. use prompt since empty entry would delete drive del /s /q %releaseDir% rem make directory tree echo Recreating release directory... mkdir %releaseDir% mkdir %releaseDir%\samples mkdir %releaseDir%\usermanual rem copy files. note that all wildcard copies are performed with file suffixes rem so the CVS subdirectory is not copied echo Copying files... copy bin\engauge.exe %releaseDir% copy LICENSE %releaseDir% copy samples\*.bmp %releaseDir%\samples copy samples\*.gif %releaseDir%\samples copy samples\*.jpg %releaseDir%\samples copy samples\*.png %releaseDir%\samples copy usermanual\*.gif %releaseDir%\usermanual copy usermanual\*.html %releaseDir%\usermanual copy usermanual\*.jpg %releaseDir%\usermanual copy usermanual\*.png %releaseDir%\usermanual rem we made it this far, so finish up by zipping up the release echo Writing zip file... "\program files\winzip\winzip64.exe" -a -r %zipFile% %releaseRootDir% goto end :usage echo Usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] goto end :missingExe echo executable has not been created. see RELEASE file goto end :end engauge-digitizer-5.2/samples/000077500000000000000000000000001222557406400164365ustar00rootroot00000000000000engauge-digitizer-5.2/samples/README000066400000000000000000000042221222557406400173160ustar00rootroot00000000000000Introduction ------------ This samples directory contains several sample image files that may be imported into Engauge Digitizer (http://digitizer.sourceforge.net). These files are listed below, with comments: corners.png - Graph that lots of corners that would be painful to digitize manually gridlines.gif - Graph with gridlines that are easily removed by Engauge gridlines_log.gif - Another graph with gridlines that are easily removed by Engauge gridlines_log.src - Creates gridlines_log.gif in gnuplot using 'load' command (not an image!) inverse.jpg - Image of y/x function inverse.png - Same as inverse.jpg but in png format linlog.jpg - Graph with linear/logarithmic coordinates linlog.png - Same as linlog.jpg but in png format loglin.png - Graph with logarithmic/linear coordinates loglog.png - Graph with logarithmic/logarithmic coordinates normdist.jpg - Graph of normal distribution normdist.png - Same as normdist.jpg but in png format pointmatch.jpg - Graph with fuzzy points for playing with Point Match feature of Engauge pointplot.bmp - Graph with points that are easily captured by Point Match feature of Engauge, if the Discretize settings are set to "Intensity 90 to 99" for the triangles, and "Intensity 10 to 50" for the diamonds polarcircles.jpg - Polar plot for experimenting. No coordinates are displayed, so not very useful polarplot.jpg - Polar plot with cardioid pattern polarplot.png - Same as polarplot.jpg but in png format testcase.jpg - Simple graph that serves as an excellent starting point for the new user testcase.png - Same as testcase.jpg but in png format testcoords.jpg - Advanced graph used by developers to check the affine transformations in Engauge testcoords.sxd - Open Office document used to create testcoords.jpg (not an image!) usgs.png - Fictional map loosely based on U.S. Geological Survey topographic maps Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/samples/corners.png000066400000000000000000000105371222557406400206250ustar00rootroot00000000000000PNG  IHDRX^|o$PLTExxx@@@ǛIDATx]͖Y=opǵzԏQ?G籯[ &19+j[00 `0 bi钶p2X(2L-)^o5Y&XKyVB&A:R^o:˲rRfQ dOvU`a-l 6ye]RB*KЭw(AzUڎfIX d| Caz7C v{t Sg lyv=-a5ndĒwbI&$j d#Wb0g%< C'5Rw(ЈezP$ng5؀^o%ξ!Lٺwh!ª )H*]?%Տwb;9H{Qǫ AZ`0 e rP-AGSXTyhOK_R"0 ,AW wQSb-TȻa 3 4y-:'ٓ4:jShI#c1t!ԊBT[^C&="nQRwec^3U!MUݳ7V~B\KGnv du@e 7ګd*0taĚ젳H-K~p]%"z|YڼjhGNUZ:cœC.hr2jN.xleV T?(aܫ,V=XbÿÏf8m1 ĚI`X#$ypjCYGH`8?,V8 9g!Ƀł7]PC Gsٯ,ֳI0h GcPdgw(eMR2K?Jjud3/by ރj@9 g GsP X,bvp`a9I,'ǀj@E GsebGb5abXGH"gw8gmMXUg%bȿW͹/Z$n\?*g3 w'xv`P C0`rb%beĊ&[Y0pr`aMkj";3,VXbkrV3Ypf0>*-5݊UsP,VM!g;$2b5Hd%I^x;Oٗy*cn7 aabWUN߳X+dz w?{th}v 1%x7 `d ΅3!@}ó@˜ apޝ3MA4`"vdMGua yCȰ#LXTܜIB![CĪwЃ{ʓGaau7_x~9 g,O˲֓\gHG$ >u@a8>a%I<̐bgt^Hx=Z^FHSw@K^)u [0b CwCg V|0t qhY3ln'8qxXH4D !gNtZK0xXczIBPpP|1+VDw+5EZqԴ1H,bŇ@ ;`._[hpVؑa[屮[ޛ5uałyʚ?Vk RG'郵k7vIN,$ AvXkK$Y$;H0b.`,YB1(3lܓ'i$3Acw*_ʝKZ1Ǖ˖qgA"VUM"=#{8ٔHHRqd[I 0LqNyCMԹb>I,_ d[R &C$X7 d5!eȶ@CvwfZ.Oꋿ?EE ?LL$R+:cr Q0g}9orTU$@kyHϫ3Wcp`Jh@IQ)fV}@q1k mɀ[* C6_56U!.Wy 6D#[[NkhLX3-֒[+$/|Ӯa$8!$_ ȁcX6@ gl >ɸ1c|P9lT·b޹u;kw(־ytgBm03- /So NkEab$v-HC?Y eHOOJkł͊7I Vy uc7IGMPm*wFRϙ 'Cg)C$5ܒ:#h,AX ˑ,B, Ivs "p4z4TD$V])MV!Z+wWyeG Śi jG7鹱 P^P JĐe/e.>nLuY!`B'/3XUfv>X,wNX-ӥb*j,x>RxqmpV bniQuF#PcoB1 XlGCp L2FQ6̷{IbŇUbrK(u_ $_&틂2gQYZ{=p^bg&ǿL0) -|X7gx|XH{=bS_| wgp0gݱ oĺ47CrsߔIW4-zPin 7ƚ+VL[\KS7Fu:=z#>Lb~s7gTZU Åh^Imi;AEm EOkU,O&󙃰/r}f(DM Ip1S;߄-Q.1Sޙh L)2`nr_U-0yDMk( ՀJK={Xӽ9L1n`E#H$dSDrb:}喤fb=$ }}pO{{VXGUEN` !̃8}J706_ `)$\pdʰF_rI ǬJR EnO B5YrdzWhg`DIړ~1`XJw k,mu52!YID5#im]b xם>uR=i ")͊*B̈́YL5"FDZG,]tvg !xvo 3P,z͢H@$I3gkBCLMQǖ|2u4g0 `tIK3j IXILqA ^Ի<A)X*LjD&1 `0 x#˻%KCIENDB`engauge-digitizer-5.2/samples/gridlines.gif000066400000000000000000000233531222557406400211130ustar00rootroot00000000000000GIF89anޜ0b,n0I8ͻdhl! tmx|pH,Ȥrl:ШtJZجvzxL.zn|N~%]c W%#'2Mý`ʷ9" Eј ۫,ލZ+ l`JBk YnG;("2ARHM\hdJ*`M ^2@?b.S%.9xz%BIА `_W=6NyQ=ljyä́Е]IkxftpY\<)&~`2NhIIRiÚX 9:#wn'sB:)^v*+ޫhn*xݩ;?j9Έs(ci,k.؂qV!bk&hvfh`ij'{(Kﲀmv/9J>[qi[,Yg{Kc?ꬾb ! nv_>vb:eR0ޯ: ≧8jo'o}wav3{2y˹;&qOp2J~h֌Q}Ĵ7.-ui#makRv&" j@㩎,6h:QPݱVX,xmZN2,b6YOf+YTB\Yfp Nxx6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.wK8dՂId٤ȴDL>,/I:~  P|MBO2?*ъZtF7όr&RQ%'ByЖ&M)LgP)NwOg^J}ԠtJУ2N}I*UR!DJT..jC ԫgݩY Q~lOЗuqe(^нU~+@ }C1UF*"vc#Sn/0l,,Qҵd9{ђִEe1 Z4hlպhm#Z"l[Vmkr!WGg2׺nM/<I5o^ l taJ^7l~zIe| ;s g}aaVl \qu7apU;|TH):cָ7j3lOX(Nqs\!=/(f|SRylb-(s^/[/gpjd/ycM뛯 y;99}vpZUtX3Gy܅t^I'z*+;s:tͅP|=5?}`W[BgY6իV5GאuuY\c^4; l4+R irvMBZγýn?۵KtK,2;½;ktߺwmL2+p6\,]9'f[mRw:]rس s\5i+sɻsoAMrZ,Ї˹豶9g/Xߴַ3;[OodOhvӭpo?W~=Żk t"u?e~ׁx>}܏Onw{zAv%{/ow8z??>;nyIq|' +O@\O/?/-XF)Ks+|-}W'(wX{sxX?7{D~XFU xt8$Oa08$4x8:<؃괂B8#H%wׁ'.8ds]xKH7l)hxw[]S j`VzƄM6"dcr8Xt2!X{ȇppxZ?tXatm6Uz?pևqbgUl& 舚ySkh[x{Sxbf|HYXim[\HSɘ|hH_`fXzg8؈(͈X)kG`at]hRXpxZ^g궏dXȎX9Ȋx~jh_ Vh(UYx887wёt ɒVɡQrS*zf#%꙳Yr2*W1߹n>.*BYF6+ʢpfx8|>AEjuGJaٝK*9,Xen]T9;S !͉Y-LuQ3Q* Jeɠ.p pjrzV}z:xZAI6胢:Ez*OU٩B8ǨLvi"\jGڦjP(f\ F]ʬgn4$*ꕦzOzzšZxp %V㗩ɭ##ŨJj7eh''HCz8 h犋9ǰ-;K+iʘW - K)ڲ" 5I՛گ1ְ8ka<;VXwU,ۀH;' ɬ>1̨;+  HG:MYBkInIT;\}B (97k#ɸYikKk k 鷢yw{l˒Y비`9˺K û8ka돰P {۵Ĺykwɸ 뽹 K Y5틷l ſ';[klEf+u+a{ KJʵ|Ψ뙼H |+ˡ.,̼4|™Uj;ä[z ,K2lPI/( ÚQ[{XֻI>#al!L̟Al7e8Lt\Y PH{Ƣm v|qLMLji|ǔlȅ|ȼ{h"(;)ɖo㽎^ݻ0.+6^ ͣ9. *~ >-N;4^P%>;K~#^+K=|?RT>mFNm| r:֢-9:~Ou{N'߅~g^8H>Smۿ1 ꜞn܍t )o>ޮIHs  @^nP`^U~a|nn^Þ橉 @1@.+{M餞p^_Z^, )6Ͼ~ IδHUǾcϳϿN/^Kl*H.>n}>q?0Iͻ`(\hɾpr- vJ| oerlr *ZV.r /Kδzm:﷘ Ǎ{l!}~95G[\0*|Y:UAVx?B9A3k>׷q.6 |۵|S>y·6e<7ƞ Qv/ #{׈߬>s-^~w|G~h 49X2 RU!%zǡ!^MbI'1cL wY$8`Kbzh%@CM“(cP dR2DV6Kִb"]Π/a7&:kX EYou.8zz_ E!yeƉ&jf)V$ڟYڨnnAjZz(-5k**XڭI( B0>곝NDZtۋ>lL|;^%& +- tmrb\RBͻ4/s/`z8d;0B,l W+ٷp9.>$l(,0,sDl8ή@쯡̪Rl/6 .Hθ,)GwY,,^cawQBuE1UMNow{ n+- >wOzl5㦶J4#?ę[{Cc'1ɢRfZ:Ǜ>A1.;Ok7キQt\=󉯛=s߼*B磉z\}w_1~w : VW#PaQhȁ VP +Bd$ /+ 9h!t?ӁWV0Y1T0-du4? B3xBwP, ]*!ΉbzEQQh\ WCQThDNm{a'1 d70H$8~[$sT\lYd'n/Qi<iBJE!&M"jB#UiJvHU&1&=PfBJf/q]:)l宙X!)qƛ2f'`vy,d͉ܩ8Iφ#3g-F4hikgBi~T()OD=E <Qd@W˖P>RY4%P?QSPL L)әQCRTFg"G!*}BFeI#<̫)Y%UVlXzɅlUFĭ4퉸p]+JСMr5KW$ FȔY*((KLW iZ@I {mhkwU6B̕dm#Sa:Ѝt_Z7.v\ŒMgۓj7:\}Fڏ׫Uc*6=x]h-r;  XvH1XeA~YeagdؼLE/o"EVfE&wWC:7q~Pw](?X~ \zI%)~xi8}89S5w~g|g~e4Sa5|pxjxPb|H^*(mm~ceMwF= U}pȊj|ux؃v z _GeKS٘(h{Hy{v̘pUXy8Yȍ䑐 $mĸhّɃDz ,y$YsÅ1XI-(9:xmW~8"w&OY#HZX'ɋR9;i=ɇ5A:8獋Ve4ivgȕxLpɒrwcIJyxyHu[D{C~ ؘdH}yYj9pY{{c Vɘn)kAٗ)y闗ؔèțy Iَҹdw8j޶ {YSXf9Wv#gniRYFHYvV9i bpvyMiiqdqO(]z|]鹃zf>Uء]ɟ(:N&sgt:Ѣ+0;U4 0yl`=z W6x٠6Ť xlh9Zt2q\qA@wPʥ1S^`brN5fҦAgE¥llh§d 6xzO:I؄z*4v*,st *9 ,Jj(X0*ʪjJjA€}Xzʩz*R:sӬګ*TJjתʭTEZ :V**:Zzگ;[{ ۰;[{۱j4JZLծ"%PG~& +F"K5) 5Ke;,;.-WĆ⒴'>37a8 (x2CN!`;V1df+ZE][F:azq{vB{˷t>F+!=䷈˲4,9÷J+~Klk\묑:&;a3m:˹Yʸ[D[)[6++۴[˻eK{޷oKup;8nϻ@BAj:Dl@ClADmAFi=Go>Hp?Gu@GvAHwDKzEL{AMFM|BNJOsDPIPIRHTPTyJSIUPSJVLUKWMVMXTX}OXPYR[S[T\U]YaV^R`X_TbZaUcddWeXf^eZh[h^jem_k]m`jhoamdngo]pcoaqfprtqkrmtfrhunujtbukupwktnxounwzzv}t|pyy}v{p|{yvr}|~~ČƐĔɚǛŠ̥̟ҡԱѳӷʽ̿! , *\ȰÇ#JHŋ3jȱǏ CIɆ Dz˗ȜI͛8sɳϟ@ JѣH*]ʴӧP U$VĪjAZINBE*WȝKݻx˷߿ LÈ+^̸ǐ#زgӮmjʗ͢U֭pɊ\%erɑMJZŻ7,O|ȉ+?<9uG>IҳSn;.<ӏWo=/>o?H%Q\TFm֛oXIXmv*d8ۆz*@8Yr*tIfr+=p;>@)d?Q1P.)eS>YeTfiXne`^)&c~Yfdihfp)'sYgtixg)sWhpsH!'.n4+2b3U㤕6hhk+Y+ O+J뭳jk\p믰D;"{l.묱*m>+bkmnmjn~+knno+koZ;GOK(֨* V 30ij]"¢T+ ''Up.,0,4/ 25iD< BD#=F'4J7 RWTc=Vg5Zw bd=f6j r׍4E2/SEʗ[Ԃ1'L%{\K[,)M&P2Zς R eLM7I^zns׮}'/|3/;o}g}o}s/{o~~误~/o__g(B"!ӄm9e.PUhsˠ+"8 ^0.tn[($B@z2lC `?!("ݨD"t-Ap XW"-f^ c2g4Ո5nc:‘w=~ dB4 E&=clCo:NbU,r $t(c!&FRD$Š].(!$NH^@ȅ. Py(L`0ȐC/ q47zo hzoТ=-q?p`8@s=}Sg@I AЅ:TmhDJчJE3эzT hH9Jҏ%ISҕg g$eJO:@ Yʂ脁r*PD! qT [" fʉE1Q,dzcD8a 0axCxD8aֻ2X=` E 0u f/jh?;ZϚ6MiKժel_;[6mk궷p;\7Mq*m+2;]ZhޤUe01 Sr@*od Y -o7 )NrE/QUp̠,t de:  kXp`n0# F71GpЍf<@xF: Т'ъ ܠ@  },"AF%;M,*SQ-{],2aF5m,:9a1u}lh%6_xs Et7:EzFFV92K/a02T ƾ *t /1x7`kY0X b{ mP{վml{{ֶ r;>nt{V z;o|{ַ <?poǀ Ն b`H;ijYWiVbtE1@nQpҗ2=7 ]Q\hFb P"{`A Dp xh@ 3a.@x#X`1pBeN`ԞM=wǽxw~|?x? x3|!?y7򘿼)ys}A?zw?})ނמ{ |2N2U4:Er{mܫ2R%ьM׷7XoXth$(A tCaZ\ Th00j0oaЍB`a̠ 1zV- Ȁ؀8Xhx؁ 8X"h!$x,(.؂08/X2h14x<8>؃@8ڷEG EgT_K ɰ `JT9>WW8i^)0s Jh sǀ |q,J70 P( ڀ}| 0`(@  w jH`+ Cg0P؊8Xhx؋8Xhx̨ȸ،8XhјxܨH+P(0+g󵆜V%j PT08 x|O &J|UI 0B2ǏP )  @P@@hP@@`("i'Y&@%%A9EIBFGٔLKJ9N)UIPVWٕ\[Z9^)eI`fgٖlkj9n)uIpvwIC VPT1 *R `P р*%A `Jh   P ^<7 rg %L)`Yٛ&0(DiwUd)#𛼉Y)Yٝ )9Y蹞ٞ )9Yٟ ):Z ڠ*$<(0:Y@!@ L> @wP ڀ&^t47Հ PT҆aP r9 P 37P ۠ TX:Z`Tỉ"#\]J!^ "srJxjuzz|{~*}Z:jz*Z:jz*Z:j PI@O pj*VEz ְ 8"Ji06^ I}i֠ WHڭ:Zz蚮꺮ڮ:Zz 7 7i2}  ۰ ^ːհ+ k%K&(.۲0{2˲35468>۳@{B˳CEDFHN۴P{R˴SUTVQ% > yK7^0j>UH ^x+ z S8 b )* ^k;[Kk;[Kk;[Kky뚌zkx ^U^k ky o 񛾭 \|"j \|l !"\$|l)#.012\4 *;|۱KC|˱ B&7໫-El^{K~른`h{Khmno\t|srv}x ~\Ȅ|ȃȂȆȍȈ Ɏɏ\ɔ|ɓɒɖF>H0a+Ĥ\Ğ|Oܢ<:| ` "{; (b雿]}n  >^~n >^~"n)$*+.{ "S ся{vMЈ KwM*,[ 8" 'qXZ\^`btm+Rx͐\&M羌;0~>^n>ݬ!MCU~,S~P+ߘ>^^ꪾyn^nNꚞ묾 ^^>䡭Pu;ݝ\҉҆[>>^>.~nn _n!.ymَl3]ߋm%$|Ȟ >$&*)2_/_~8?*? s}џnF_߬"圾*< T_VXYZ^[`?d]h\lOk.mr?vooMw_{u}߮EmrNN.#0?ޡ?_?q?oNo_؛Ooqؾ!鮜,v?0 w"!~~/B˴"Lǩ>N9/fR.* 00d7ӊ 8&RK/4SM7SO?5TQG}2DIE5UN (VUzCC ):h}U m3.D]VYs:h"Sqz B&L |%li?`94;>߇?~"h~ͳykqJ($TL&OhTq Vu흤{ɘ C9ނZś<^R UBЅ/a`8(iQ`t"M;t:tOL@4TrSYvMc$ F7#I<3H#UьgDcոF6R~mX:}wG3ߜ8G]Kt)9~-LCM#mrŴUde;\Vb}`sD9JRMth2ral+9+%G M"}͊_JKcb2Кf6M0, Мr Xʤ$9<Vh0NlԳsċR-iQ'b̡hD%:QVԢ,W fŜAQ2@x1+jaZ`/:)N-Xַ=oϥmRF"޶wrnF $!tRKj2)g PtyZhp 9_׾ڔ}k[1ROK;ca^O+%PfF[PLϻDB>6z+t8/qaFXSKGh,C8&=Ѯ*1YAȾpk hٲuy5#0$( g>,#tŘҗFq')AuUW=ID\MTLZ# ~ gӐHzvӟ>jp -(UE09)!A Ty1ekt;r+BAn'F]q`?WGWTpaakF~O^aW >vt=ֿ53{j?x ^/|:';-ֶ$f(>{'o=ohc"2A6Dw|I|7u}E郥T~U$p_)s*ob˲;l"v?O?/6RLK! *6IK=J[9 S a! ˽ @8 ̚pXAaZ9@ o+iWL"y'  ! B% M=膂;ٻXc g%.8:/?2;˙3L#5arB4Z ӗ2MC8 @<4DXD,HS=99OPQ$RDITA-.* "8c-Bū EEE;;__ě8bKa=:(褄)PRjkF`nD<ˌo<GӀ)GHT?f!8A)XKq] ~Ȼ!{;:eԖ.CH 7p/u惾ȋt!`GU[SfCc5X=1DɔTKtɗ6#Hb+A8zܨ+q) Ƞ, ʢHhH.K„t{jڰ ʫį8Bʮ\Bb9$7ɱKd˶0t˸K5j0wDsx)?yZ4ԛA$4AFI`/%B4$j%Д%\L@)̑ؔ6MMg+ :7I$s6OzC䄗k#tN%tǤBS3)hZjφ;$O )ͺ L͐MN4(̷(G8Nũ~e5 < PйޜI= ~{z#QUQuLϻ flga0|-QҦȰlL @#gID,'ʊ>(uc + +R.U-TɦЧӜ1!܄8?9mMqC2TC7\SQlL4K1I uT 6xĢTCԧhDT@uK<-U4ɵdS>UNqքLfTaC4JKP-=sFSDE{GEWM\NuLe/vT^w SPz"8ĩ6ՂHLU!Z)ZX 9ϏVJC)VHKseg%j-2VV?Q&W -BQz?tZ*ElWDDLUZyWWsP$W%X %[O;و ["#%!L['X:[8KNb/ˑ-Lٿ}ɂ#\P3t:M\=5U \wQp'ff,f4D=>NjEjd"T>Cl7}^ӍnF]&n.Բ.LfNKjkkYkT&T7,oK&BiŦVٞkn V456rcmT0oi]m|mGXjef2ۖj̤j}kdf9U]'o$MfFh'n'VhPˍp"'6NA>:Ɣnl~f6}ڙ"o#3H)7p.jV_pצm9;𨮔 zޜ{WLݝ@fqN M6qt^kt^E$q>q_Vn a>&uKirUuo'rS=q Fa=MlkNK)N-5HOMnO I s-tm>N>xtNK_MoqMo%nb?x܉GBOTZ"M*k _Ofnl!CP)vy)Ftߚ ? FIxNp| FvR9yƚaFJ V ʛ9GudM|D=KG[JzAVۇ_`i6qH wK6Ƈ|OSS_Aww׸1 4\or{3V xaE%{3'Ihu/=51p{l_nNiwv7H{ve7rqN}70qwyY} =ߖ~|oWPB5UA*(UC'JtŒ7r#Ȑ"G,i$ʔ*WJ!˘2gҬi&ΐwZ*aCsޜhcĤJb  H!DV $X+S.V-k,ڴjײm-ܸrҭkET/ݙ'BC,XaR@8 z+8aWn5زgӮm6ܺw7‡/n%.;A-y74;Kށ.vU$@\U ]il;!s*.lt5l~L?*5^ Ji;b@iN4ԏzSHdArp:A@G&Gq ii|#b!lFvݺ/^ݠ03 ٯ,q`R$$igЪ`C-"Z[Uxp!rt{"*F/5ur/$GsEgHTӆXUirBG ZrRcEC6wj!UJ3F: BsQ G7LPeC{ \ wD=1(^P\%+Lo*ZA]d-miC\lp3'jE)ld :q2Wҙ\ԫ%hQmtS/ApB O3-򊤦|*N.V$J֓޿ Ѱu3 @+2 G[sʉ8k|#Z׽Ȧ^hjiÝrTdi(R`+AA-6qM3dګn,h7h985Sr^ CB^ k J 2-p+=.r2}.t+RֽnsН5V0Y\ŲMOҫ}/|+ҷ/~ aJE~,>p}cG9 fWF0K_l\*4ZLdޖB% +q3Z:X 1o#FNѣqc+GCrʌ\c%'>;p*IQwbb&5^vK,fTtN$7cÌTGe-הg0=LI%@}>4k..tzY4BgD>B.z3Az3cmI̮^CH/vjP-PʆJ"6\f]UYYjY'kxr#ҍwh?t'$ɹ9nHU_o516᮷n}v#\e<W.38#.S ~vfHRLUJ[ '&?9z &MF9\μ5-\S=pm:l'߂!ַ7~a!/Yq\ԁl}5[{os9Er_%=7NJ"^f={m Z:B~i0,O6Ku-iIV//ss-Q}1FZzUSJ}"X]W2j3Lsw0ie$P}aO$z-uyBsųs>}L`KQSwVWa*ghOܓEoS9Ե. ܎YF ]bEƕTR 1,C%9߅ ] 'P蕇jQOIMK _zWCAɞm6dVܑ0H \!`_ ߩ mIOFda۝] Z !xY5#>"$F$N"%B[H:^y")׌"*~ +\ Z޴) !MZBL" #EZAݻ4=r1N2U6L jOAqc,# F:c[-$g㹕?&aH@4[|QA6^DIC.n#Cj,F;yGG``8j`'A+hXm&15dQLcFB捘UHivBR,!dw>IviH3QKIYR#n._'Hge ^Dh=8E$o1綨*M[&c -#.rWe QAS' xrvi(TP~^3gnaI[adqJUrJ}hSWHV yd6h}(Y. :MQVh( ĩn5%\~)).%FEDj.5b X0Ω+ g)ݍ%Y'^Ɩo$bEb/oԩg/F*Quʴ,UM#Zj'mjʢ iz UX#ǟm;| Kt.n cozS^%FzIKqneC}#=+؅Q 9AcRhtMljmkaQnۺ2xOJ'/e!Ѡɺ夿A+Jl ~R)ХdA#i+YL+NMRǞЃjQL'(e LZJ-Rggl, ,h~6ݩ/}jh| A1U&Mc*-Ns:(yY*p"aĪȂƎ-V,Oڕ+Jjx)mZ EjB]6e|/HՁy^`}"` ʎyP;7hoՃhkwsΏ<>NoJܽ'(<׾4oQF>׿Z8n #?s6@p5`A&TaC +T1fԸcB] #K츒eK/aƔ9&ˊ&-xŞ8D"1WG x$Λ-6ρfպkW_HcѦU֏W]tnԶwջo_㵪kUUN]%IQ rgϟA=tiӧ=tukׯa)'ɶ+ֽwo߿>\;1'7UqѦ'S&x$҂$3'wfw% |eͮN9wyǗ?ߦʳ'& }Jrl*,#jKAJ )&1P 9Я[.;戚9".QFλhq-j,-!,#GDl枳,:j1\r3t#TRLv1l74l&JnH)JO̲=,4EG '˶ K1T49sR1L%p9lմRuUV =~?]g_ 4-Cs<(J%/Ǔ˷sФL= Wq(;&UuR1o?*t3PSCkEkUHɶ} .RuNzs1.,uER}'mX3;.Q~St- TƤT*%̖ڲ\@yʔBnʟNZi1G\gfEьPc ǭ,S)ڥ_hjAwQ@oo=a;e]>1@y;W kEϫVr]׳硏~/'gj#[ż)S ,, 7ldl_Z{Pٝrffu?'KeiBS A Nf+H0P-P@鵥kӂ>-oS QCΐT涘lb!7?|7i:MqE)ZgÊB6{(%ga$ȶ@ q4ḳٯe/۠F&'|i`gxJi3#!5 ZXXCO"#a8EфA(e mkJYo_#9uq)Nr? QGʅBceILiNM|$ðx+xY@."¸p*dSDGD z+K62u=[e۩.$:BW Dh&cB1Y=mG\v^ *U.#-uKaSΔ5MqS=OTEqrwUzTYڷ2Ф @d \*mՁ҆dY:ڊk9M[Lն9\ic= ؾQ^T}fH_4 U4`/ v!a O88\r=,}f{$fl5Q< ^ʔt tyZ;hݹE6򑑜d%#y]H9x)X*K,O)ъYnSz59!)\ΙuT3w=%S.~ؽ$-_E/ѧj1HFyeTn[+n\jQ{:?cEu $IDJaYϚֵqk];أ-ye?sNie&v[\׶&AdW Krmp56ѝnu{АfqsvMpX4eQ]aF-}52T kgO|bV5ckwrtJ1э6Q"ͣj2:K6ChI{t`3=aI׷<څ)uswG,ۺAY:峌7ke7ўvrj0~c6}tDsJzaAHbfA7fnܭ5n80yoAzя7Qzկ/=C>JZ:~;v Ez7|s"wxS=<}d모6cJ_`u~7bqo>‰8  ;0Lczl/8ΔP%^g\ ,m05p9P˒mdntOmyI;imW,B¤~o4p 0 op@0O04Mfg£0(!.0 p Ϗ!Ծ4,6 KJs 1QjrLτAp,g"&15q?o!N-j, #4)P^kǩZbOmQc~P 0i\ @\lQ5?hm`lq90VlFL4>B eqJ.\1@q ߰LZK ("7")r1Q"Y#GO#Á(*rG80*go0xC %i q,8jr+ov8#-R"?buM*mʔ0[0Q 64r(9(-#r2+$',˒+r-2,;O,R--r-r+{.5,r+2(2-1/r1r/s.p$ҋd@nO/Ar"Cs4U0-4E4S5,C125c46?5Q.ks7R1y7[4_02pbRR\ $RVn&"..6 S128;<8Ó;< 0/,>ss0S.'>qS?S<#bƬnQ%tBi=S@;RC1ۓC?>7T5C.=/ϓ,?5EBs13TD;"36eSЬ's N_֊=R>3D3?COJE{rEO<[Kc,e@E+-4JѓCdd 搋Dp̫D3}ZO=<@s7w4'ISJ60<s?[C /O3LQ+5S=U.u,#7 u15 H);l\MtP=?S?F J4LWM3X SsGT6tSTYR/ATXJ1fNN2HH' Fto,oxRS37Lu]]G: 5U^^'D4rbUSVE ! Oa!P+eOOB9Hj:5_%B f6iK/%Bpc`N) *-d*-Civl9j(kU9V)AGEjVCnCt eBeWlVl26Ҡi% RR+S>MV,rvrqGmr1`g`d2}aKWV *&<_RB1eA^t@ Qbxqmp)?mꗎmd(oSbv;4YTvwa7^7|;pf-xPmgIfv9"n)t~U71vTuYL&F-5[VAHjsVnĄٺ„O!uQi3FW7=8 kBu<ՆcX.x8<N5W}ҌxQO`m6m^tfIzQ]XGT^gQSTLՌM#SK-IuD xw} 7Huq².y13>WËw{4SwSMQtSZZ%JT[[4{[X"!jtj B$FqRS;;DG5RsWwXAX[W︇mԌ?YٓyW1NkN뚸PNtdcWpA4beXXqS7t-958s1x)YyQUf2g}нl#_;ٙӜPqL=;YE-IuYX7RgXS؝7D4:9x]E]kΖ1ry'}_exVDk=a$_+"Yà wJ.:r8mk]PsWҕ0o:1nmD=dcix9y{d0ƐM6im|IO6!\ҸUjgYiΦh;E~{3K,KZRSYwz77{+zL+H cnZJ"bywy\5s6ٴa‹kvu6owL|kқ.ۇB*?ȍ\ LE6=zF/Ws1P P%/ǮTrKPCIŲPؾCtͱ# ȁDYQH&[/sYZνt\ KIZX{Unj-d˹p)%5F@>-QU+|=8/Q WާuŻ Uo#6,kt9rDVOC:VA#K5G1X5yE3<7eKR5S=m[h:Dv<6ýDvZf 2]>;w#ʊb&7+]+~o,[c]lС{钬FT7p:U?~)^4;4@z֯fegCV]*ABobzJIABh`"$w^+0{95e{j(Judvkq<7Ō;~ 9l.5Kpec7F-)ڼi5ٴk>:ѶZFثy~\̛;n{ԫ[6磮93}9{0mrx_Q/>;Ȑ;_}H`*a` .Ƞc fݑ@TUwl_u^S!E8oE`~U`Hc6`:#jIR@Hx.5ZRhLNR!wVrSvAT\rfna^IffcjɦOy!Cnp^YvGꑧf1'hB*j9~"`C:ZhNP^i ݜb$}%bp}ݙ!Dٵ@cavZeFY&ʢ^t8#[ZkV,v U(jJꇚUN&fmݙ]Gܘ otKoA]~Ց٢IzgQeWRNZQ޺b~P=ƔnqJ~ r2Y5gP>Jxֶh*WꖈCY(7kn.Ktt5BY$YUd9 vbMvfvjvn JM7k:!^ Gmvg{;~9O \yyT1LorE|GPПps&a99dz%Xw'}T"ӘAkl?Is TirQ41)rL/N *̌jtGCfnӃE !k ?,Y75䬩Moќb$I½Y͓GF'@ UtHv)Ox+Mfӕ$uk[1U4ARR꺴bsS!z-#ߊX6e,i$!ti>QS¥=QgHVrj&?I1Dr5NIi*FيQl$Ie̫Dױ4>o9d`iTJw4u_A'Q%kz"YJE .[:m{ WpUKpbYgn6-+xiZ섯KaKɻܓȹ&` x$.+ dʼn<'+)qzYx<,#{XY3it-Z80xT7&u M"K$Jza̴(< 8y)AI n0 k//ƫkK7#E +zьn[.7FjZV)gyԤ.O=ey_zc!)W&׃% X2,5Gμ 2YZTiDQKĤCheUylk[v.5#_:t+*5Y9ЧQ x{&%Au>.LR3'ɒR+| o8ʼ%e|ni%n Y퐋|$oƉ}:"ya5wѽ1Lo|/6;0Wx_;r\'qӟvYq_ٞ7⎳ /ώ[ŽKL,:!n`[Vl%Z VsTeìJ-w݅c+AqHwϧy'lozz'gByE-[D@) `Z+vt ?JRd*oEWQ8|OoKǝ-{/Ϗo˿D櫅1g(C(Hh H6(?cOYgq2f!jmZrrY?ԣ+Ȃ-/1(3H5h79;=CGrgakIK^EI'\1;[ȅ]⁎/+P)x=&ukȆmo>xZ[oG+Ą{ȇ}D+Fiʖ{8v-lȈ舋D@"XKx]gX|bN3bz6HbhC 3(} h\vXtxHZ|1:PO^|YhX;|U͕sl_U8&Y`b+6: xV(#nluQyEeZfX1R1b#Ӆ0z1'5ub)l*;nBHtWyTc+̨JB}s*|Oӧ3ՍMXO\-Y4eq&RXK`J[wOġb c`$8oaX``)VSL!;?W`Ew Ni+ ɣ=b19 If};yC"|VBx^A_yx3I?7Y@:Ji{RlG9'IKIwN[;+bV)sG#eٛKqi61i !!mXP? $u 5c9Y虑I]IbTS"=HE&23rh*dD0sU[QF W(8J s ԝr:xoklVƵWԢ1:NRe0wqv}kNgb)]֗-2ԗXjS831#yoGEx(fڠn6uOrš֚xb#Zu뢛I>o3P57.Q٣Z%uGGʝr}WJRDi%QgyOU!WgO:>[Ozt@XC"2?oꠟzlښwpڧ]>8\Hdd@[2ڛ1ȩZʮ-B-D il $d椄}:*llU::$z`!H )q:Izڦ|30ۦ{r??@F!Hz\0xj ꮜڮZ.ʴI{ԩ}b=?@H*Jo\ߒJ} Y@ɥZᴫ灧@:?JvWD983ExJ%)nd"6{+k-묚Jzʙ|zkEf :;Rs;@И3D2"P֍MFxB2N[PK۴UH+* 𵃻kn!R5 9y;‹wIB݃Ī֘rkD5ZԷ ⁠; K tBv.khe9:wrʬ4:",>) Aa<,%C& ;XЛV19隵ƴb! ^`@?D)( PƯkƘ嗽aIqꤘ #MMNށK@D"%Nݰ +, .()>4)~/*3;Y.^;NOeA^@YELPG23\A ލ].ZN С.<(ƣ<:83N h뷎빮N;engauge-digitizer-5.2/samples/gridlines_log.src000066400000000000000000000004121222557406400217650ustar00rootroot00000000000000set logscale y set xrange [1: 10] set yrange [1: 1000] set ytics (1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000) set grid y set grid lt -1 lw 0.8 plot log(x)*exp(x/2) w lines lt -1 lw 1.4,log(x)*exp(x) with lines lt -1 lw 1.4 engauge-digitizer-5.2/samples/inverse.jpg000066400000000000000000000750651222557406400206300ustar00rootroot00000000000000JFIF(JFXXC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222<H! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Y#cҀG?€ >cg?”OeH|ļ1}Vy\/RoM!N{w~FbOm߰  @;:E?Rϥtn?ڜcwQF5?\o9cg]Ǚc!ryA#_1KTdx?a=}(&>aEW;uGSڀouwҜ۱u5YdIJtL o<ЬҬ=1ч'Lw.#9f\pа%IY"9}hdpz E">?ɽ~oTޟJsMqd޿JvQ"mf&2GxM6?A,ځ][~oO'cd@;Fe8w.sw7ʻybu$<\Bl#򨡖[T]5P꽸F3ށJ"( n|s}jy!vL˵ł@*nVYo<`Jc>6(oayA@ OLɸ6϶`XsO\>@ w"HhϘ1I7s׶}*u>rZS5#,_E2O ȡN9ʐpAFѭZ}I.I<>sZ?.Z oޏahxzA,U{ Uݎ@h'>WA}jf 8_WAz [PO>(n-`<r6ށz($RI<);;9ی/^ ( ( ( ( ( ( ( ( (>{kKI ̊IJ ?N??v'X;G?coh9 abr`?篽Icohy:XNj$c,6*9T|2".|!V:bIue&Lf= uH5 =\l8gztkAD5sU%C=Ҁ:'X;G?cohu7_׼ ~۟]? u(u_^dTK$!tCcolР( EX/P@Q@u\_Ao_?( e봿PZ,QAE]?#7qguE( (ſWOIր=(_"h.ԟ,wf_yV\,UB@o5PEWuqO*  ( ( P˞wP@Q@B3Պs (?Q'DZQ@g^pօPEWP/ j|@ Պ EU{/ ]ڂ_b (!.;?,QAE-NPE^Bh5OG|P~?so}h׳xFd w?8@ (!V(eQAEW_w]b\ ެP˞wP@Q@i?&ZРϛF?C( (kV(- P{]FP[ ( (o/KP@Q@WO\coAq]Qb;TPK3=Ms 񍟍l>&[K[糎B6cw={t-NPE^Bh5OF_tO]2Vyʫ(bW {zU?X^\4'ٵUI#:K `0gtPEWuqO*  ( ( P˞wP@Q@B3Պs (?Q'DZQ@BSyNeRoe.t' 6^x?w_/?tlߓѠ^]+hHc *e. n*A{~OF?]z_A{~OF?]+^ذ4%|Hjy='BۥʴlߓѲ{~OF^lߓѲ{~OFz_A{~OPZ%ߒf6NB>?]/?thM+?]/?th_/?u%;N1kFҳ~/?tlߓѡ_yw/Yv>d/Frn D 9ryV3 *F}n$WZHړGA=(W}ycZZHF{fe ؐd{d}Eyƻſ KPhF }=nVN޿Jy='e. /z y='e.e.K%wM l}!#BptO{~O\>h)4)aDŻIUP!g l0B7|psF7O?]/?th_/?tlߓѠ^] }B\ $ }y='e. /z y='e.-κЃؿT/?th\+u 6^x?ЋW 6^x?/K_޿ȁ~Rd'^x?йW/?tlߓѡ_/?tlߓѠ^Jn#*sѭZDKQA&|0פ5@Q@/vCZAo_?(+:5bQAE^Ci6?X*Foz P@V>?j}IKPP`v&7^ ^uq?'Z ( {_Ћpn-ikmyn)6FM[_ZDBH܌S#Xa _Uu>6P@Q@a%X=(+f172P~O}(3' ({_Պ E^A_ (_KRPUB3\vTX+[%{h(*kB.ƋPAuO뷻bc1܁ |ϵc1qQ@?k\S C.Š (?2Pt?b\ I2օP|0פ5@Q@/vCZAo_?(+:5bQAE^Ci6?X*Foz P@Q@y|:zQ@WP/ hEb8?pMi:GG}p-q` (q"`c]uoż9#`FApA$+:b]OP{o V(e ( ( ! ~AE_me ( aI8kB (+_bQAEWuqj|@*mAk/ԱEUt?(o?[ k]:]OVe1YX3!QTv />gyMd唲,7`)PK^+'@EPU/vCZt4Xym"h%BG"WR0A > :s*5ƅtpt]8E Q@?k\S C.Š (?2Pt?b\ I2օPeД^Sg԰}[y='];{e.4+?]/?th_Av~J?]/?thE+.)bmZ\ZQQKG'pQ>"^Q/U}U*o(Fjb;cZZHF{fe ؐd{d}Eyƻſ KPhF }=nVN޿Jy='e. /z y='e.e.K%wM l}!#BptO{~OF?]z_A{~O\1kLW]k[֝4s R E&;hI /!-'`7r8ߐ@6^x?/K_޿Ȃ.ͅ١ .U>?]Mz?lߓѲ{~OFޗlߓѲ{~OFz_Dw]bhAFs _}4.n}:z?]/?thE+?]/?th_@w})2|e/?th\+u 6^x?ЋW 6^x?/K_޿ȥxP|beSp9eh֭"%t(>olР( EX/P@Q@u\_Ao_?( e봿PZ,QAE]?#7qguE( /Y[yv#C{''. ȫT=ʀ:^uq?'Z ( {_ЋP@ִKWnJăUG~ClCj%2A+$ AbAֿ?2|l(+@JC.{ߐQAEWO\coV(e ( ( G?o-hPEg# zOZQ@^Bh5 (#V(- PU7vCj _~( (f17EWJï:Q@U{ ]ք]?( WJW\xÖ\V_Fqyz;(0Bg{O#)" <<ҠɴPHQ@a%X=(+f172P~O}(3' ({_Պ E^A_ (_KRPUB3\vTX+[%{h(*kB.ƋP@Q@f_I|=o%߅e4x67@-u-;B7*UP=zC*zIPHQ@a%X=(+f172P~O}(3' ({_Պ E^A_ (_KRPUB3\vTX xxz Heu;L6v0V,ıTIcҩxk7q:$. uW'Y!-zp3W^+'@EPU/vCZt4X( )p~#>k7)v:M0mV HnRSs1u>6lx3${x|=b3{\)Ym1VWYAEW_w]b\ ެP˞wP@Q@i?&ZР̺~tV,{/?t4oy?lߓѲ{~OF/z y='e..]BGHHxT/?th[tV 6^x?ЋW 6^x?/K_޿Ȃ.Ņ+6@FU>?].U?]7J>|e.4"e.4 W D|߾w>I2}j}4.n}:z?]/?thE+?]/?th_R[i>l2Hʜ2kV忺PI76? hPEP{ ]֬P[ ( ( /X/P@Q@WP_ -|( ނs>/M.MRJgg$9^pF1|7G5/?&#H;n1B}h?o_u@ (E,QAEP{ZBP˩񰢂7>>o.eY&Fn 98\aBGʼnA|5hS=q왼.NI 6cit'96 4 8 sW(e ( ( ! ~AE_me ( aI8kB (+_bQAEWuqj|@*mAk/ԱEUt?( ^uq?'Z ( {_ЋPEWuqO*  ( *9[{ PȡԌA8ychwZ |gsd% +S~(;{XϷ F0q# ;OxB]8/c_7!.vd #ؠ+f172P~O}(3' ({_Պ E^A_ (_KRPUB3\vTX+[%{h(*kB.ƋP@Q@^Aֿ?2|l(+@JC.{ߑ 9j@z6X}V rzgV<W_ =v͑>!fU} U$$/<}iKԄÚؿ7\qnJ i-zkcv<䞃񎢀7B3Պs (?Q'DZQ@g^pօPEWP/ j|@ Պ EU{/ ]ڂ_b (!.;?,QAcY2]CSK{h,ǩu,{ɬx][߀i |mb>c[ՓҶ^x?y='BK_޿6^x?y='@/z y='.]BGHHxP\.eߓѲ{~OF^lߓѲ{~OFz_A{~OF?]+Y%ٰ4!|0@jy='ة\G 6^x?ЛW 6^x?/K_޿Ȃ.M>ha৅ne.&p2^G^;c iHtE"uԭ rO4;{ vhύÃkI\sǥwŠϛF?C( (kV(- P{]FP[ ( (o/KP@Q@WO\coAq]Qb #MI䵵߱`\vsX ^uq?'Z ( {_ЋPEWuqO*  ( ( P˞wP@Q@B3Պs (?Q'DZQ@g^pօPEWP/ j|@ Պ EU{/ ]ڂ_b (!.;?,QAE-NPE^Bh5OE( (a _Uu>6P@Q@a%X=(+f172P~O}(3' ({_Պ E^A_ (_KRPUB3\vTX+[%{h(*kB.ƋP@Q@^Aֿ?2|l(+@JC.{ߐQAEWO\coV(e ( ( G?o-hPEg# zOZQ@^Bh5 (#V(- PU7vCj _~( (f17E'V-6;Cϐ*~dz*/sⷼȨ f0ʒ<PG^+'@EPU/vCZt4X( )XSaE^}vUs (FozC.{ߐQAEg?kB (+iV]]UU{qXܓ`wg?oE0xZfZ>h9hg?oE gYUsOhXLmg=zVh9h}s7" C@7úƅ-%A)ml8>h9h}s7" C@0xZfZ>h9k?F|Uc$hZ0E%ts:7Kc8NXg?oE0$x\:Ru)9B>BH¶OZH|J1:P5)<+<69jh9k=ω◀m+JKh9hg?oE0gV1>khFbRwI2"nal@4>h9hg?oEA CGh9hg?oE uI+дo>Kyb]] l1x4>h9h}s7" C@0xZfZ.ëi}S:F;o6 )nryuTQ@7.Ӯm]Fl4j(,"VuU Ύ? ϵhUۅPw,Լ7XLα\K 0VB3ߚѠ{ ($(K( af%'t,qAVnhA!E q3Z[*Z1q<8# gKAmP)WKDdu 8#nbT'`;^AR(<_^j4;MDЃ\#ao%-!`bp1T+PB[ִ׼uA [k{AY…m| GQEe^ĐFu,GB;8ĎIIScC-"$9 {{/:%߉I)PɕdE%F u5/7!g"-U؇yqPcԎq@V?4gSӣC׿nPq4ܘ 8${ xI[z^ MmMr݈c);69#9qT -ia˟ټo'nP;is(AYݦ}mwϷ˼:?#pr{P0־-ׅ˽CX>+[8ʁ)q Zn50ǂd]fAf.R1[m>ls1Pryy ch8þ2 ռwb?`2NF zů m;b-߰bVIJ_, 9#- },{E[_ZDBH܌S#XAEq߇|e}Os.v@?;O=3ՏI덟 HdHUQԓY }kNK ]v;!8${cJ֯u=LxM]yPꚞE@w{0n|?Dӯ#xRHa#h Huw҈(+o鶌/_Jbyq8PXd(7ᗈ|!x.,_k[y ,]ʪz-aE tN[R?1,M. qHzִoxBuũZ4&+_,yKqןg5} }SP.G1U@Xn9v/' GaMH>n~bHu' {PHQ@Wxwj?$$A#C Pf,8'G='Pvo"FꁝT ~Q@te>OQt_tF3z=ض_,2IV. 4 s0|k-n]^8KYQRHʄF8HǶpqi^6uǷLk|P%Xmn@ 5/r3s}"4 Rg/ {%wCl}&'SQmRZ7?(y< B-Kܿ7?(y< @/r2 ׻6/"bH??h[TV 7?(ЋRg/ 7?(-Kܿ7?* G[l0b9s4hRT^'y< }" /r0y< }"Կ}"G|߹wq2hиVzԟ}"Jw`V'lw܌j_a_4t?$DwB#  1`kC /ZR;m4h}QX\kj%YT`HC5ܟu-?Oa k?w6c9.ݽ?xAF?Ej_axAF?E3?EAv~J?EMRzoQxAFڗ?oQxAFj_dw]bIFs1_j}4.j}:yz?E?hE3?E?h_@ws)2olР=KᏂ5[uj"pmaGL㧠 79Ytme0$qS7@N[' c⦙pxFёHM?/Ǩ=` SE<4!B;-b:p#?(жr_?oQ_?oQZ?ݛ l1$ j}4-\Wzy?Ey+T:dɮ]n[! Üc NhCTw΅2ᵨ5*- .#E,tY~n28PY{xAFJo?-Hd194-*\WzQxAFڗ?oQxAFj_axAP#oûL8~h\U+=_OxA\ux;0YMqFq֍/r2[ gJi{tӧJӱO$ 2=ÖqDK$2 m w88"Ի & J+ܲnk5>-Z~nG0 - ms%]Yz=+}"4*Կ}"4 Rg/  yw RZ >?E?hE3?E?h_?oQZ?݋ }W\1j}wy< }" /r0y< }"Կ-κ0cؿ?h\+t 7?(ЋRg/ 7?(-Kܿ́~Rdy?(йW?oQ_?oQZ?JD$,sȭZDKQA&|0פ5@Q@/vCZAo_?(+:5bQA?1CHmYxxtt=ddA q٬olР( EX/P@Q@u\_Ao_?( e봿PZ<͗`. ՝őYs|"`Xrr 8ûzUt?(*)e s<m-"g~Q{nk,{Y݇-`Zێ1۸&uf7?(ЫRg/ 7?(-Kܿ7?* Wt0by14+Kj$?oQ_?oQZ?oQxAFj_dOv,- _)pL0?٩?(v*j3C}"4&Կ}"4 Rg/ {:O3bSQsT7?(y< B-Kܿ7?(y< @/r2{wyIc/֧y< B_wӧoQxAFZ?oQxAFj_e+Ƹ:ڛϓ/"i.[Eg^pօPEWP/ j|@ Պ EU{/ ]ڂ_b:K]X}_%D̺91!FZClCj%2A+$ A@WO\coAq]Qb9PxX\ji)b,0pGQ;d|1mNYյj%aTNB"/ 3?S^+'@EPU/vCZt4X( )XSaE^}vUs (FozC.{ߐQAEg?kB (>olР( EX/P@Q@u\_Ao_?( e봿PZ,QApCo>(|B}GFO'BN\mQ^@WO\coAq]Qb (?o_u@ (E,QAEP{ZBP˩񰢂m* ~AE]?#7qX=(3L@76? hPEP{ ]֬P[ ( ( /X/P@Q@WP_ -|(6P@Q@a%X=(+f172P~O}(3' ({_Պ E^A_ (_KR/Rum|n-K]xԜY4]?#7qguE( +&|O\,6WfmwUV%y_ @6+[%{h(*kB.ƋP@Q@^Aֿ?2|l(+@JC.{ߐQAEWO\coV(e ( ( G?o-hPEf]Fe"3}~nսzES7?(y< Aڗ?oQxAFj_dowa͏cj}4-\Wzy?E?hE3?E?h_Azft0$LI}" j*ޞaxAF?Ej_axAF?E3?EAh~Km<:G; J+޾d?oQ6_?KԆe;KXM߇nQSmX: ɒr'ſKOhBšM}jVnޟOJy< }" /r0y< }"Կ}"{%wCl}&'BpTOxAF?Ej_axAF?E3?E?h_Adbl0A#}"bs=_7?(y< BmKܿ7?(y< @/r2 w $9v/5>?E5JlQ*I 2+V忺PI76? hPEP{ ]֬P[ ( ( /X/P@Q@WP_ -|(ym"h%BG"WR0A*k_bY$%b$]B# N?#7qguE( Լ57 qhmKTdsXZ;Gkbh!r@$RPY^+'@EPU/vCZt4X( )XSaE^}vUs (FozC.{ߐQAEg?kB (>olР( EX/P@Q@u\_Ao_?( e봿PZ,QAEy??祿>Ţ~FcooA]Foz P@Q@y|:zQ@WP/ hEb (+:b]OP{o V(e ( ( ! ~AE_me ( aI8kB (+_bQAEWuqj|@*mAk/ԱE]e@m"k TTFrP+;g8 Yẹkyc mx䍃+.ApAP^+'@EPU/vCZt4X( )XSaE^}vUs (FozC.{ߐQAEg?kB (>olР( EX/P@Q@u\_Ao_?( e봿PZ,QAEgg߇='~i-vWv23+=>ݛ/ CBFFש 9vVWwr-$08*_!4yſWOIր=(_"hEQ@?k\S C.Š (?2Pt?b\ I2օP}6v') :6?j;X 5@ύ??Psbhaճ/j?P;`Tycv>6?j;X 5@b{iaW?ls*?P;`Tycv>6?j;X 5@ύ?:1˳g݉^X?Qkcƨyc6?jxoV xZW[C&Rm2[{`〸 ;ύ?_x f~gU18'g$؍z~'Oq/3ug[&.Zvu?QkcƨTyccRyc'vv>6?j;X 5@?Qkcƨ5:yc">`:z( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?engauge-digitizer-5.2/samples/inverse.png000066400000000000000000001663601222557406400206330ustar00rootroot00000000000000PNG  IHDRbKGD pHYs  ~ IDATx{Y}}sSU=== fl [+!.avc-`BD Y0RvV@JH@$bA6m),"l؃m3]u9<=tMTMUNU>9y$"H$Dkg-@"H$Ia$DH #H$ERD"/H$}F"H$0D"q_$Pxt]l628_Cg#e"q>g-@" QJ+yh$"MTUu&J' !]}eRJkuRlM$'0E|oι:s WOD޼ZIVLrE1ϛy㟜s1|Cٱ9y{e2(H" N_J,˜sq fp´Zl6L&X<NtMgц8޺+>uy^<]fG{+8΍BF ! ,*`𶷽xQqK嵯}#u]e<Ͳ,#lpwvv]UU41f=^-Ҁ@ ^qXhaGZ`ю]:Xhblx Z?l<>zu]3'pJ-_,nL9 h{{9U7}ڢ(LQjoo/6sScZ맟~90pkI #͋] = ˻dt#NkM>˗//㻻oy[/~S?w߾O?MDQ[|m<|3< NٟUp8N!/}K?WUu%X9|N|/1\Jm˼P~ @`xZZ&A7_xڍG]m"ރ/ȟO`y녝Kuڅp0Ɣe9N뺟qNlafhK7/guP{4{f|_L^@#OWQ}z?Gg"S~}xzcSJmZ) KF s_|}T68@N$6˲,˘J{tt4Lڶrs.%jmZ#"/"l8nU6}GC{rmooW OCgVھܐNlaF#⇇8FK ZY,@C5 !6ky h`e HN@Ymmm4(26ڵkڮ꿎~Em!"7o޼~z۶Qm1'!ibWt{scƽ'd0s)`,0;8D*#2cRmV8ܴ;y.]iK9qT$ f>"uc}mp|C എXg[`&>+y";l4h>0[KHdxc^~>yYmoo߼y3EZ{ܤױqpc:L(2#  [XgBYƮ6>VM孃6 _nfm|o +qvͦibG&EQhʸ:qŲnZhOS":+Z,A\_Fq|@L rV򼈵Sh~/h$R'gxJg h; p@_6.9p@MP5âӢLwb#Ν;X=:g~g}ʞXJR\:-[by=u(Q>%ǎ`uJl61hV| CZsA)G!|s"0ŨSE0D+ɟt1'_4ƴm* |u[xfyh燯}k9,o߾KYL\x^eM+W//t]gqի3_d<-a s\jW\,m⢒,ąb2D^Q2%"*b4hիW8\0Om g-a4MuHl0u˗/uC,:::އ+&3h:XwY;kf񆨮aWiUFB1꺎1x4Mc眵vkk+\'Y4ȇe'q4/M @)N ̼'.)PĺiUUHy3( \<看WƓ aPye (dVkݶm<;K$Pl?,]4J/E s㹌n<˲xsAچ$_ιhtxx=Q2')D򜙛ڊ㒶Hl0RxA۶;;;(W8qH #883Ch4Wa&0 h47HFJ%6DR9&tZWU5W$0s e Z8皦ٴ)6!H$7қx,#>OA")DM;;;BDb-\R LDM 3m?[da$<_,beI[$6GRyF㕴ιlv=$)D_,߯y{^DDdXڶdF!%LI #qcL<\uT)UA ;yND7o޼t|>__2y&3CY 8$P01RoX,}Gur)˲im׮]ۋ7ǿ*]ϮK$^1i%.yۼĬ!]UUK=3Ƙ<ϣ:9t]eYRgy:*Gy$wH\@{߶6'qt:bXYu]>wƍ㍭1}t);F!"R45bH^β.e,^1 jub#eyxx8ϝsMoH\(b7*cL k~}v(E0FQLaY-t~d2ZkNE )ąBkw]G?߽rJDmoo[kE00 ˲,dYFD>kqVP@ 6h0:ň5Z!qC0g¦-9@y K-d#7U @gN_ 8#׀4vAkb@m@PhQh{@7] Z+Y[/7'?D\LFN8&X\k(arTFK@iCPfY(k8 r6p@ \>&`3A L*FJJi @(8p *MGCס4 B@POAA%U< {)XM()vr@O0f*'"Xb tq0A3|' yu7|D1aQyP;o:}y(A(HVL>7P`4"&e@]' yjNDv]w֟GKw}sه0w=;M;iLsd*/wm<Y/0Dh4rZ\ @kMIZ7Dџ}v7 8"(^.nMa7c" `a谒mq9[דBLp8}yor45W^W0ruy6Xdp3"Rj3Nz`Y2=P؍KyN2޹ӗxK@Hh 8Kׇ&Gh ~ckX c,WE$>:`Hd]>ӟvTͬ"ϻu _Kp{:?.J0fr4j[V|>G?[@9dsYDOo2RjxCSO!} %d04.֠ۏـAVݠPp̭M5(DKGhcD+Gh[})˓;(spBNJ/'^zL[hH<`M8 qF) @6HI x]ٿJ0ذ2`ݶksEWg$Ϡ\>1 XG>`Ȭ_ܵN0HPtNg  ugi66@l>PCK!FTXxTZ]217n4y XL0iBtCI$@ ux-@W.A T*|ݨ8A\((aᰚkKVX\q5=yx>_Ttp>A0%H@t̽ѶwE$%|qƣQߵ E4X 5E rssԀ( ^@je]@I/ƹHP1tZ۳ٳT ?ZT^D "-szQh>E|^$zp3<؃F$QBB‚#:2`!ri6]!WwB hXdA W :<]UB1,|!3b_hn7v`0xTEnZٯ `b8y`ִh,37Ms{sp"#X@ ]%ou#@<U% -xlH12gU:eyb?d)!P eD-RylNz' R!(}駟۶=::.~{ʞ'4P ZkaYYk/J/K]׏=((buYוvD⫰$DUl64rźB]Cu]{ﷶ cDkr1gK"q+x<!Lx|rmiB9}]ׯ_9} ZĸNeRu"r$Tai<ϣ{,kmUUy?J^}F⡠{uQs!i|>/{_u'uVԚuE(8H<dYf.d`>_젢(Wu="w\]YyQ'0Ӣ.}PvcD( "u <υa%u]QmZkc |gg0i۶,Kc{aCRCD<:B[ IDATϠtR*IRCDbZyQ')Db_ke˗̼B%Ia$z},H|MH$"t4S߉F"œ19Jpdb8bH$"޷m+"ιֳ,O2ZkjTĚ0,˔RZbQUU4YFl`6cʲ$tl]!l6bϭ[R>ꀨbx3τEZxCx Ia$.BQmݭ"fW\Cwdu"u|>>x"^X,09(yYmX#:6Vpfj4i<xF]l6{G>(Ba Ckػt3 YEl6#`/} HR E۶ƘBa{{{<ӟsNЇ;'afYQ#"z^U#XFBQELbTJ}۷}[4&~>fuVUUg-٠i;7)RGGG%0GRZ}{}{4OOk?яZkc! "u*^=ϙy20F<[[[)蝸f( P4bDjHz CalK*#g \<xͥR2*г/tak ;ʠF1 1q`@PhQh{@7] ZشLZ(eX=} ց ڹ뗯w0wVY\g{!huȵf&7=MU,l$ܝ6E@`26*'y41|`XT@FGsh=љMdhUVlP,@l 7;NDL^R͟*]4n1!QQ^` 4)6zUh`+= Qc30BeƂcCL`ѫkvf zs#6_$ [ ]n@7!`*G |0T?zд? ꩫFZL GGRhl Q V0Z@B1<`N_$(w~ V^ؿ}GG;*k  /qt[[֊1/,P;tN@BQˆ ] #xLk%#9cY9Fo>U9F6BFt0pFPmoB'8F@ee5zsciFffe6gBm`C zEAQFSBw`vlXquͼrANuCg<ޖZeoO~zZ_;{ e7|?#|gI6[E$wR}6Hggeܿ8az/Kr/c>_͛hI͞G}4//x-y,2&׶] E婍|S[)S.gOŻ) g/3e[\p,X:~>|iװڨ8|{~__|?/ۃV>c޴Ø6'i-0G;@IbP?A lczG!MfX7~пk m̚q F]ۀNzh%pg?`˺[_y!fPd  Vm~>.y zRV / M1իP_m<&Y?cqV{^ nc&TDJ҂3Nz`Y2=P؍KyN2޹ӗxK@Hh 8Kׇ&Gh ~ckX c,WE$>cޡ2w^yƝl_Ť>?'`6/GîeU3xdC67u@@F #Va84zKz86[5òk}1F.^s=wJ2/: {,^8 `^H z jxTR{jA@ydFEze<%V,#yo)0Ci0#Ju։׆^&4"k Xq"FJe Gh0R1^jW 6,ʨR)PɽTtu ,!7(uЪ@x( Tĝ/ nוPD(͝;Ȱ9</ڼ@l̙TW#Cy EK?kI/#Ћ]RMܻm O>cBkrpXQQ/f`{Ch@k\AX1/-1"ͭJ XB ̬V`j{.4hEnjOW@==K IAET"9%eǍ.Z:v&&у4z6'QʘzN_!Ďב   1NCǯY72 UPF" $ 4mg;]Ga|V"[/7v`0xT,\iu_Y 3\||˷گ'>h?kaLe!sG/*g-lb>N\(V"e?__4eu]Z+WBg-򫚲,GQ]׃:Xk̜y,B0.8H\(!O֖R;w֚b3ƶy[krrI=PeY̏>AYfNEu(spufF0^bP&LBqm뺞L&ιwj۶,d21`X,bJTU/) ^ NDu]p΍$PfhTE]Yi,Kq΍F i^DYD/۶j8E/\R N$. 9UU=N" "z"sf P8(̬I"2_e}o@- Cᙂcz+Hiv0y޶R Ds/چ"+&6ARDĴm/sp՝t ?h 뫢$ȪZI"sDRDEX, GGGZx ?˗ @x=_^SuH #HbE;wcZv6b>+ptA LD"qbR<:ڍGV E^DbY\eDlmmpu] #?O 0Gܘ t#Hb]\׵0QercȊ/>X*խ9p#j,D"J5x12JUU`z0Z@guQ@DHIa$pT[@FՀ_x(Kudx׶ kUY˛8Ia$9g&`U"(tp|F"x`yƢwcbW^}s>xwn޽raXf&Ia$FW7( hO a%d5K꜑F"x`n|>;GG f^9#)D"8::{4ڙZJcxkCM0;w7K GCm۶m{vb^D 3`jv6c"MJ*H) GgSI #q>V`xz6Qu]3sQ|^(Ν;̬3)5M#cL!eY9HJzFBd2d2ֶm;-YaUfh> ze|>f\viٌ!ī0 "'QU.zkkk8j0MMppp45;;;-)R)upp@0 p !4Myk,{Ǿ;qĦ}]A|,K3hm{K־|sNɈk˷q@C{%h4O3B4i`Gjf^xCCwˢ%О[hliۙu̸wۗ5rUuF9ODV)ĉ[{{e=NSЁ7d)9u]:g>dmܺuk6]zgͲlgg缅."Vtw;wppc6J]5M=y< FQI[ooOrLwvvoEXc1jcvww8(<',˶Cˠ05fZ.3WUuppKKUU^4?xh ]_UU磭!Sb\?e,S L"\`tWJ *!{3%Xa |@k<2Y#Ɍu)`FB:e(w" 0CA8ŃsZbpAoK#$Z#DŌ'1$&b']o$55 xΰ| @7}㊠"t;t cA1" tS B؈ң=DzUZkiZR}V)EirDO1z:Y]tΤ6Py5jxBQ(BוVq25 @`6-m`MGT3:@+*֕3fd*  (4Ա%]Y8[Ck%E_?QCڀ{=:G__-$ӤKLߙONƆF]?ID ^$6 t]Z><)E((B-{ (À@B:# 8'N]Z.x>y z5Bco٪9FLjhb@F`D@#ʢZmUf<@lV7;NDLሧz Ua|^·l^!#eEI\S*zF?I*&p8 &V 8Q^=<$ ,^]S zAeYǙE{^$ ˆЩpOy[(IA'Dy㜻vaopϳxf! `QiFdeIɼFW.<0$9gsV +0|^<.vS3,>HynRPXSwk2u(Ub ȱlz"RJ/Kv!JY8b#%XBZ+<0Jplo?v@'"m0i{ <@dD &*Uz48qr(.~ۇ I#$MewBjgC=B٨<\w> <ʭs}t6pE!/9MMñx^)@ }t\D^_95yŗq`;dT:Ͳw,`A@>t}>x}Wlc'߮Ƴ}{cg~9ʲ'FHPF/|Y}PS IDATau dQk(85zkXZ&߶]E婍-fT} [/hu+ ) o'Ol2R#Wz'Gw { hA'A (D<7z!UQAJ>k/} U#{/0fM϶Xk`۪,o6Ƕ,Mfw#{ލ X8{"*"`W=&*1uaA2?bą TVX^*#.v}_ujq `a踖mq[&{OvBL8{yzp˗/CQ{:l @`mEbqN+%ߘI%R^"F8 FA$!ncl%,Q{99{yL@>DD fr}h66&R+<0߿E(J$#EP! J1xyYBCg l4݆]E1u+|#/b\{Y&ӛ KJh(LCt}p`^H#P$adn]V8WG#Ջ}We**ho>0,vTrp SԈ2@rCh B >FCjЦYp =p-bo`^%xc%⥎VT ˳2P >0j %<di4:yVpZ 4oP9VA~d!=B E@!yOxw_{/?c?6G^Ï[@fQ#}q{V-fs(GUh4ڹ#7~Qެ2 SG kP0%q@= 0堊(98JZbY~I%YQ/}!HP&no[ElZ/JhzPGŨf^4*`70ٕBj֢s*V/a!S12G-) VlD2 lϤmLC `@ (@ʖk"E1hD@ŵIy u rFJS g/OꗚK$ #1"&7dLD QyVI Y+"" *BnT~{ǍLD?_W~;qd|v0EdZ4UecCe e 7od 0"%H@t½ж!ZL9Ok$Rt&CXM LeV(`qi !j!7?4>Ơ3+kJ;]c HZê@Pb"1BZBG. ޤHf~7q6X++Q(-Aڸ*>~.Rfd>'i=^kO{MJ⼩ptAeۺuOD9mPKDVȤ')kIRD@y'*s`A`,h3?3"կ~5u%-lB (tJkG,Kkm۶y{yC( D8)E_:pǚx4MS%0Ƥ0eJNWԁ7h4;w UUHPUU|xx(" o#+sηoi1HTݻwiÃ49w"JzeERtd2!K.}`fkd2ᵓj<8zִޱj1(G=n!)(}[kܹNkp eYmeh4jVDf1Ν;O=xw^]݅`=V8lnf#Ņ u]m Jኋ/Hi9*.8]pJp1(;i4eYFDɤ~4s.Cà0ZkI Ѷk1rooŋgYZɲLkx&7[s-Nl2@84X\В=W(ڦ^,fGiZii.EAu67Puz|>|5lAa iwEADIutXdY]M&_~9˲tDWeWKVgȒXBN)F,˔R,2fN[t:M߿tRcLL:q\yVeue{  t:*Vmۦ8GygYOl6 !$@)v3kZ;N0TU\1iObH{߹sGD/Rʕ+)HKU)B)򱷷Wgv c```a)bNR9:+i'(ZEնmʭ:<<O^ey1(cnDV^z܎1N&}zgw例Ѩ( ܵk׊(2mTu1000"1Zk&/_K/u}5}{.^\.۪䭺|2MRxxբ\Ѿ1ƦiRs.u遁mu" 䡺|r5J)UeQ/ir0dT50ձAVˆ}|IjG'E&XZZchG chcԅ1JbQ53E| i=p76E䥗^JxjymS*bgx"/.\[ `"6MVHjlWJu=L>sm>I\xFi>5LN (WI*8Cr,֭[,nׇú9; ⅝b>ڶhӠ?N]޽􏇇NveYflQۮ!"J#YAa H Qy((\hMD=XQ̜J)"yF͛7,˴cauĠ0)1Mc/kO>d>0ph\.sM' D5dټ?!Dvݻ'"<|>O{'|~5ZeYi`W*2qNۓmuƠ0)so?/rz3 ‰~50I9EQF@b,kx_dOu)&? ?"z;ߙ_kKoMDŢdp@#1&˲;wǟ'?:'ths:Xm``Omuu]'E b6) cڮ @Z= )^DRͲO Jx=IlܭV@QE<RCuC0%Xa |zE[Ou}V/5Ms y> ۥ0$) ·lp !#eEI\S*zF?IGfqPA6釣Y0BeƁ͍b!ЀU`daꊝZg (:8Ό("ydFNwxcB(MB,`ˎz.)35^tꎢ3E/BL\O#0" (KJ Fn6rQV0$9gsV +0|^<.vS3,>HynRGFBH GlvDKVk%'&A M=]&`#;NVݸ<7F2rn Տ]]YɅH)rwphvj˃?zUʡhhd&$9_7Ad}b EʫWK=#P!+[gpaiL(&U+0P:h4tDmywX%aM̬GڜEp  X׾CKчSbw K$p](f˅zٵY} d?{͛z?YXDdCH65 "y}o9ry5,{P_M>ēQ]6ޱEⰁxc-( _-Ab FTAh% l NɷmW@Ѳ?<|kkk>3.hX\p&.zwM&ƘUF|SOK/_+dM?_pxDV+!c|7ؓ'6) +d҉`fN@ F;٘cVtc$yP{_C={y(e $+ 3q74>{ hA'A (D<7z!SWjLW;8UA{ӟ+|ݙ5w< ~Gg[,V5mUW?7{F%mu=9ndxϻQ _O}\DY A=Vkx& =@~?-H u34@ǵlvނ6{bǩӥ bbDwPx }7"խKkc'xSZ]4)dUci7f)AI,8ᥭ%BQ :@X[Ƀ4w"`5pp5'g/ (',WM@DPXV cefE$_?:bAD42B14"ʌ)r}'ףlI^?_QW9,͵go< bz0 bT?4,p#1 㠷P̭FMU (D+e43""#TV!k a5~޿#bPeQ]s\ {{{Gtb3(Gh@YYccb… 1t-2idPt]cFeYu)}2(Gt <Ͽo/իW'[nmooyKe``>-&Ƹ cg?YZo}[GOݻ"r ,GGҗ~ҥK\.E(|Hcm۶,t1$Ok[eT% @VW6IS(:Z{w^+I \0ڵ-Ba$q +ds9[P81do|iOAD>Zk}Y}۶z3L%NMsjN>/9n*AB!]hT/,7/)H0]#"5 xky岛HD"Np&"D;WGDO那шnݺu4=zMތqOrQ)f5['xF P Xϱ Dk@4̋$@ &c0ٹC A9n뺧zix<~Ͽ Ck%"!ԣn߾ 0Apݱ;f5dG 3*ʺH@w|v^.I;(a`|-6,O'^]Z-%o :,5~>HjeY޽{뺲,snxm|>;;;r.ArYUx` x #GȪ]'K9ڕ4`Y[O9$\zz aPN&(㇇1鴓#3/K"+{o{{a͛T g>Is_<-*~ƍwiS՝٭ '3/_rw~xg]SY۶Ig$묵,uh6˲|F)`\?6Ms6d0NRBpp=޹yf6<*!Pg_;AGKTɪZΧ:sB0RJٔ{p|;)IIFJ_Y,eYzO38G pH hm49xBSDil6{<"*h [Tsu]щK$# W>  (/KXvme5CG KNAfu9}FHCsxF+35)$yI33f#bizϟ%ƘifEQ|'B'(bFm<. YjlD@DUU뭱޹s]oK f]ێF#6F: _1F0wmN|<˲?o}[׮]SJ9nݺ??x4y=y411,N_S L1  hTھ-lKz,]OFWEdS^'} tF@A";GxR6RXQD&]_\D0%%}w1ɴgN$N}y6 $URlB- reM12d[y}t9b(R j{ؾe!{C;F|xtŊ I)7UH`qJH&(: JUXQ\C{sXO|sPJmBj7*$e$ڶ=FҚD9jCBpmC&Ddo4g?CufQʶ7@'IG?Bٟ{?O~{S?S_|<{J \Q8vzж1"<ۿY,55LzP]gxpn0MH&8SW{OpwzC;vWk~٨mm1Tһ]q^.r|}oOSTu]87KQ}캫p]p4EJx;ڧz?|i+WdXC$㦓Qok^bwcrFw0FQG~Gc# `<@ŧ?ky5:JH893DY]OQWAJ)GIO| CBg<h2=3sxK<*zpt'iWl 4}er5!AS30,=@@1M@8Qt*ɞ8BE{>M+H VAP(Q00pjpzH*lQho\,c^kZhѢY-Zh -ZhqVhF-Z8+E-ZZѢE- hѢEgm y(NpqBn(\+٦y 5okADA BI`3jb>OI\nD@l`IN.<ų3[TYq9` հ@5Q"hh8܀yyr׼L?wZ4A@ӊhܓCQ(\1kgz^^4 D@ P2 IBYm,`'96B!HI/ ƞA^q @C,-yuںst[_`(7M$ɵ^R۷O1 Xp]K:?Tٔ3LQ ]Fye٦iTsl{Kqp0x?YIkkRF~J쭿+_VV^(c8K ي0PyjǝN93Moۄu]s[{xX}/LԉlJ)Jƥh/M&]z%/`y?啕ǎ?]wn˛x\//1DT%2'f&c"j 2t X8C/}) @ny]5D">;f;4Mi6)ܕ:H B`ɋ~O92usp+KEO&x|ͷ Ԣw-w,֚k"tݵ5"2uM~0c}}>GQg<4MSFkd2ifPpebmG( $rd zzb\s YszW+P6_s a6iv%fsWc_!92DoC^Y?*Gn's@;ym}{`0ؗ%~}7ίif% B'zqWFDDzkW^yo?E}9mwvKd5Q^P{?#/nٗ^ 7O&MrG^-Q'!"zc7K-0F\wud,6Yю5sc?z+{Se9Yg&E c3O7IYjspyL#f  7J`]q~wi6γ}DT|0 0*Q^!<pvxի^CGyMXkE`0"wDi~= )Oy) Ww]zֳ3e $PI! !66593 "*"2>#ϯ*g?~35@hUd2/[-Bd]s5Jw󝛛8sڶ{9r$Iu:(y14}cccVx8Ɏ|G>~^wzw7jla_kqE;#׿_|o  666>OQ4 yZ/F㑡`k3 0c;;rÇ=߇5@1UYڔ Ϳ]KQ,BSn9gFJ0 a8. (m^ɟI$ꪫ9~GT5YGxy "GEd J'|st|٣MD Qaׅy+OVWW*nȍu&5oMr4ncY>HGlU =DιE/eW^y` Y{}v2=,w7lm'x17?^?M؇AGf˘2DyM5QM?}@+_K)NT7PM4*nRIToz?0gaPnt 5Ԍ3% "J)"~S/xigy,ɻ#J˂7A|OPAxS~ukgwAU4MwK *nJC%GǏ}q,c 5 GÍpDXH*"C IDATEYk6,Z`AD|$""JYZZrZXv:"!v`f<O92O ;?zŋY'W U;̴]5ywO~r׉_zh$ syo>_w.W&g?rS$Pdfܠz;77!z@h4:1gwpȑ /cgQL ˭_̩zc16̍t|1߃O:t7Q'ToiRSETj}`0xq-\ hhRRanVje>xwD :ّNݦ(MݜP/9&?˲׾5"uv&`oN&f*=,Rco}["MStt="cɑnO;6BnSCWU*{,=YϾK GӨi666ϸcJS vV G,?~ܕ8`Mݑ51WC9BDȕ eu /μxX)=cǩ}6*ڜ$*8\U^:|}Qzۧ> #fS̏Iy~=Du9w(&vJ1!lɭzii 1feee4eY>T^>w8i>ڳ/4K9gRh)(*krc޹V8bޤsj4IO3` pZxo`@e8p/Kj|YF#5uQ@E ) ` ;;x J)3f^(y~2~ _ERJ9:tV̲;E<6. /{t=p4/(!ʲ\ڷ/YkL \a>_>?;>ѦiZ׵}o?H0w^/6,^WiuRa]_^^cбc( M̻|WU%8;O&k&gi1ao<4BZ>weeeeeegcj= @Q4yM3L<:S7BKDQ4*|n=ts'D8'|/~"G]m;z_yc49GUUUi,Y:uÓ >9V9/p 0ߞ?8z(ZU\䵯}-O?J~v$| >|}o ޚ˲8~s }s9b?puSa5+Zs={ ^Wnuz8%̉m[=kkk@JN>/_~g(,Y&/ fmPCǩ&*-&4@Mss_wC 4۷4X/)JCKia>SPI#J'^̞s;6,77OL3r4҆!';->,?O8p[\t/\'?<,̘ys=D䜛[Cʇe'|//iRCP hXfS_}v0J{% LB{}/pDEUΓO _!l'a0|H|,t1;{k8z^Lfisg|͂?9Wc׾,-.k5w젓[_[&U>JQPM!Q> )h&f7q4YgS{+ţ.EwϜAq1; ih4Mp^ f 7 Ѥ*a Q^{s'/BNf;g}С__eW]u4D{ɠCJ`lCkJ)r%% uA,+.p9?/iYlfr?MAto\+9K/ys8_'hi":kW_}5Xk|:&{WWW_iE+8#, .6^W 4M>8!DcoO|   N ,op=e$|S}z@% L.P/xӓ^|9qPjЬYq@ o $8Xy'> pys5pe)77|,J@u.%Ip'`-49טיNFH817LOB̟W8Dm/_q7o}3 g\q LM [/|FIC&f/S9k?r _Oljⷮk5bS8l)Op˲L$˲`@D,-,ۿ(젨֡dkäur<{=WI6hjP$%, %$ $gJλlAOakTZRkHݧ NA[ %RBJ)*8Z =H$+6H ggvpe)x. "߸ڷ5J))8@*_tƳ#PT Ӱ%A(Rg˳ᜥ}$*->ۉ!x =FŐn@v“tS-_:n?rKR*5Rpgݦ* !kuwom (hsss0\wuvcpߴ}C|8Ldsssiy9ɑ#s5_nlc| Iv/MUꆄa2U52 z6 0g&chTq{םׇO X#Q+H nQ27Tdc8" +KBh-cA4M?򈐦ZK)CĞedвt9.x43;/ ͗&hlI آaj(ɹvߏ!cg=R4jK%'=2?IhFJj<)bڝm'G@EE9,NR(0`]'qxy-7zm+\7ZkILDĉ8 <&# K7Y1u0$j-<@ 9\/mr@X܉F"f+B9Ӵ@(4@ F#\S0$$@@H ҘY頵С@U70D  v||8>V[=@ATrTƙ8NV~/jDQ~EKƐI_(hk Y>ի;(lMVt#8=;5>t$ %);I t"|J:R/ؖmm hHH4)Ԁl$T RNL,@@r):Y.s"!h>BP h@/z=B%V@ |=sPV( N-0\e8.//ZS'`*8Jw|4P;1EiH#D` =U8aEh }oˉު%]8V&z4JLaE~@u3B-.LE @Ӏ4 rmvRSUR>^ږιhލc4LUE$TzCI?NlY)x | , :|aHlZI, V\őipr'p hy Oo,,PC(*:u pB @;BZY{A 3[c#!7Zs8 w 6p~ߙZ"*=KKK\pyg&< )}אEreY6/BI*-I^SPf HX5/.V HDNC@4hi}EL ` *"9 'ę |؝Zsn @<j,O1ZM4RS M{ 8!!o@Z@y xX?tLRi4HHFD&R 5{EA\(Œ +:#XI*@-"G w >Eݥ Vi!`W~у>mw^@E,di .&y-Z L`pdHD3 s.~d26LXrpW^Q65<}ŏ=ԵJYq_USykskkko=СCn'4Eg=n+PE!o4MΆ0 RvqQveiv:ιA \EQ~ʪ PJi5'sQm% nD߯*kcrg|hƞ$IjeHNMB :wzUJ+naT8)+A7ZKqkko<w:JRjơyƑhb[سSeJ)]>"߿ksTkkkA/ [APEVQc:")HXkmy7i0FE%=o)آE 6~ͫՋe/ z'HоN_}ߘvz^M]C+Hyƍ9[Oܜ_s:vl\_V-;bK-Z *[59F%!7MB\jmm @ەRΛZ4cc ۲qQMAѢE خ-歵n7M^W-ZV`(sd*I@Bڣшun7 Ip8 >X%e `yyYJDZ}S9q[hbx | ^"+29)c]lb_`1L-Z^V`#e]]H'(1̣rpJROIXkMg%T]\pyyhѢ cQZi< !Mx҂1~1LWrZED RM{xCM]B1[h!)%G]i*/ou 9DjZ7Ϧɡ 8ZӨ+iYҢX`-Za`z>=KuNizϗB$qhx4v- H;(B]Ș(<5ahxjޚ IDAT:~sRH)Zi6'}ɹ! X=.H@[h]V`<0+?8 .8pBw޹~ aJ=x7gln-8`4 &hmWeQG=x 9iEZ.E7º4sK PD@QqٳhѢvj5Xk9jiieY !sNJIDYiꚈ4n۷Me@:q,M[iѢE"9g4u_a`'I@GE^h־RB9TNOآEgVx̛kB9v~8KY#|7V䮒@(E!YZ-}58Cu]RGl9Ya 0X@itamIZ.4}Gj grC IyPo>. wV9J Ljjذ,/K6 ܠ% q,$ $I@*!6Q6$h Jp3攀\ d΂"|0P 0ŢԂq PJDtÈݧG?'Z:S;:}*HHI4@ ԇYgQbH00+t= ',H ,O! ST)}Ao=(o :g g\MzpAǏHnd `bOC: wK.B) J .l|< x>$A4AYC tO"R"t ZRQ(9ʻI\^2אФ!vq]]GfgNҰۙY?rPZvyfsо0(\C;+; 6xBh*IA @3RNjQq"j 1>*)L3k<;M8h `-)|e@w:$sDxpJ@L' o'z NxڃnG B-rP|i_J&_ xbq (*Hf[ٞ @!>zh}HꅠtA'~/N~Cݐp"LۿCFF"4{ @Ϧaqȳu4*߽#$. ]4 wl1뱟QUUnmƦ("HFA1NH1HDN XFX+clc nV7[s~#?ާu:}SU>u^c5s<Λ( &gGgYyaUZ 1N-j _ )ucMM7gV''kA,Ύ_~y~\k^Eu;/?~`8\XܽqcZ|Ǿ˟\ kB-W?ӕt %Cg4/j:D ִm;hI~ }saL2ӷayB &6bTb6T`l/zF(X%b=*5Kg76ʲ}~Y7B÷~;'0!ޞ/,tXO j:klw쎋ۿ٫<+1K ^J?a"|ZN+'g|`4?v:zSI;QQ;QZ H0vaxUR*v1IA`6@bS>ՏXQk_]ꜙ6M è87B4Y.ɫ>t͟8]Fݦ1uIУQ逗> A E5}ꜭSX]Gey'%Eg??yFMiXp/}_ƞ0Jqя0u0{>BE>d2"a &~O1"\+2* W7q9]Ir󠫃R%Z')MR׽ٞ\č3r JG&!mDVUuoG |Z(rR()ei|nЀ4UjO^q" rGw K0P;v^:W - }٭;[7Wrj˭[WX>mpU@ ,SmͰ\e!CИ|Yp|bQ5~$gBz  P[z.AC"lNf8(u}>p8N]==O+WÜ7!L&_]pX:ƈq3c;Tө?^3BΒ:w8x2IIOkx7E$.E]iO]36n߾ƘmwC̹RG!_ziqㆈݑoS]zo|xFps cLa08=99<<4| ̗{`oqM{zzz~xvPմ;ΝfggI6j;Yd0d5H0Nq1E1sőqz񌓵C~mѼs`2%&bl:V>o{4!W[Kc0+W XKӴMw^{wr)CcL4ggg9Ok^a|-qXKlwwMGJoݺvZaZEQe.Q+g $8(ʝUt)XHAq|b޳|1U+H);Uqvvֶm]O᜻{b888ȇssɎQ6M",nOSEߢT5|}Sڧ QݻGGGρ7~yDqD,t`i&lJbӔe1zk "]b-!,p\$3U:@As& ӚHJ46kk%(j~%ΪX+ڵ?#?r\~ɏO_Vݺ qwQ FJprP SdƯF\QUtub)(`5|OS1$TQ >aoCq+ C5,%ntoFdAݬcGmyCȚ؉p^w,ypQ¦tNL6&uV  [g'{A Ekc` FMYa:(,@gnڛ~y|np H$XT1XP2؜mQ5F*uqmt|UEw G>2 /0tؼװB6\q:,E:>Ys4Vvm ޻.֊M@}38>&.6QEdqttxddƣj99孻6a[p{Q\ ɳ[&( !~ pԎd" U4Ӎb>RwHP VU%L|>+&V\wCV OVI$Fwj;7w\lE8mS1őuv4H4AK#ws]Q:F`U!E,0Q}q(J%/G8g2pJtAfCEQfGp$rgsQ򦸐;ӹ!k42'U E;, IDATJ MI_$]: _,W}vvu1$ 3M o(l,xnPXey_`-bTkH0iSIR [n9 *<* '>O&0 Ϳ?y`h-u9ut _g,s[?4Msa}s[s?C1&ƸX,/+,+0lJk<ƩE| !ni&PC`-ټzͷ`m8:s|Ouο?]2&qbz+ܽqcZ|Ǿ˟\ kB-W?ӕt :%Cg4/jv7+XӶt|M']_ ~+5waXPFxM|l;U(nE*\t<:*wf06x=RƍMVm]yIF~Gax{¦XY_/1UHqt|ogSD[}|=7D#`"i8Y\M}Pwqq7{]w%ciúK^{& (-;f|<*Q)L;S!lUIA:yZgONǃ>.(J:l6A})]ꜙ6M$*XݙGʁ_gXb|3/_ uyMc꒠G/}jv~v ò(擿Or9IAּЈ:*/xD<1.)w>k(6jJ|{oLt'- Xn nWH 9ćʈm2cg=aMO_s/SCz0X(XmTRt-bͪ bPmߟJ.\R=]l $9R;_};GeVEH[=~y +\ $H3EP1ACoB|}RCŨ U++uD6W):' _b*==0zcvIDw])b1.+Q4eYfuxx؏Xn5ϯ]BrJa}Z< ;G"w[kONN50[Mc.1^Dr=c`0ڵkgggƘ7뺮==W=DƘi۶rύl6+ggP|6fNYC]R=D޳Cm޽{w8F[nUUYs!!dQUUve/Y6)#+1A==K< Z*$( ;>% һz)fSdQu)1͚z 癤W==ƘQKLyOboN)H>dSl{zz%z1K]YkU5W81+}W=r 8Tx-pl\===^a'&rifX~u]߽{97LB*^a'6p8L)áܹs'bGGGowyzzz;yOTU4MnښzgUKN/ ")}OOF{%W,f`0A^FmM_ﯧiW=is1ƳiQ`0x׋6|=== yOe\.43k1+ZׯZkwOSM0z+@>ok>Kzm n6༥ROOϣ+жmuxwo} Ԣ1D0F 3`rOyֱR8CM/[ ^AF cP-h>׶ԋz9ᤙggԘAx(AT@ThDۘ*`d%i1PЉ5f0<[/zx{vrS~7/+M8&/X mv1cp< ؎p֣`Զpn !!*ɈQހT\~MI1Y@zİLU5V)Z8yqLf5i+kՀ.I% y Զ8e ΤR?{>KU [PKEV!N԰({8gv!83f%oIVnb+VZ7VV%"Y`R`Aq8? )LaZ S)r6qU l&v-u8Y>t|r땏 +[;! K T$C]#Ύ;nv\lE8mS1őuv4H4AK#ws]Q:FyCXa uPhJh_'_aN{~,va]lץ/7f[5]Aݰ6*r?]IM'S2tFfwB(5mNt%;i_\waXPFxM|l;U(nE*-*wf06x=RƍMVm]yIF~Gax{¦XY_/1UHqt|ogSD[}|=7D#`"i8Y\M}P}qq7{]w%ciúK^{& (-;f|<*Q)L;Szk/s<-'ãɦurknbKgo C@S>ՏXQkSUuL &slq]|/9[/l خѼ_GMT"p糟 ]`Jm4<>o.c [v8iG:gukw =z#-4J+_NF+#&~OEbD/Wd ϵUXn:Zgsd Ao"K:0nSJuo'/qLQIv4}Qgnn]qAx*[ 3[$AN2YuON"qp<9 _Vkx}qw}~GWGW#:f2Xpq+?PѢ I:>)nyWo޺ Iau/+տe\/AlehS\e!CИ|Yp|bQ5 lLR>y$s[Pn(Fjfpwz:!V`5IKqPxkLwd\M[y LH`p< aí4VB-RXtNH kfUj'2poGx1ac)i%t@^5#oТ15jh!& -Qvv/i.uee 6R|s\Q˶hh;k͸4-)_cZHe ۯ^cӵ @IJL(lꊳ ɥqltX=6nRJ7ޤvqJ-v?;??&ke4EV]WIc;5m$]*N. C"HQ9]A=ZP̝@N `բ`}b\RJE"6r4CZG% ˽E`%e˦phJs(IǭQE n0˜h .@NjWU'zUCNrkһg/u d2yׇaUW1HxƮ#or(U=/{^B֭[1szѳQιb1LeYuk۵!u_غrQ*2p8j,KUvuўzѳy}v0tmK7o_:`yuݓ`<^1F\4w]Vmyn4ޯ|-?{)s5tʕRa0ƈ3%=;;vxܞ̆GG}:4LBιսGGG)fSEQbFE{zF-}ʀ1&W l$VEsBnUBݽ^Ed^gaaӻBLϾpΩzn<xZgbYU۷׽i(sٌDd\u]e]u]jv^<: 9PEBb^Țct Z| yQp:.MY.)b~]k>ѳeh31)6uUosSzd.7[6xP>s!z 5mӴמ'ys3>X%<Fcun\jוEY˧W=@cH/+J:M!!>KROOE0z+lִ>X M3LQHbI}0z+nA{6? I˲K 1S)!ƴ\===+Kfvt< 1,"088. s?ySVUɑS9,EQU%H͋'>Xir0 1`0׎A.$H_JI&{+`l6zQD 149Ƥ޹#)yBFce5U,VãzRJ$g]nQ1@yFce07j Fż&6X.sj===Oy4UYUzn<}h >!xU[iܻi:׶s]==W=vm3 ܼof= E?"R `mn kMo\m3L'y"HWb+$,,_=Bb`w`V F\ljΜ~gQ3'΍ܙɍ̜SݧpaD"'RI @UWp0P2] ~//ɸ3v@eIh4^0H#\8"/4il9QmC H)=/2IM\Af&Ie>2u\L\h0"˅Zku%&{!IT( F`)ڵkD.b8C6R<<%`DJ6Ͳ$ںc(k}4mY */zm1۷o'QdIL&i:{\h0"KE."IFvx ?Zkhti*իGGG.3;窪1&E "UUUj7 д08(@ @,nv*T@_<4[wSxdh-Fi-N o'\YCEF5۰twSc2'U[Z}2­[Z쒫m:de\kYW/X>^h[؄3}~ `CYCYJP1+pBirxHR(P ä;fgFP֙[F@fn{OOLM4̬rz=ᐙWBjTYb=J7EmA+(J J#Ni.;4]Ex *RZs.I;w iܼqynzmz%v2Xk㜓3'u_~9Ut̘=2iTO4h%Z˳N2BCREiN^<9h,dqT}=g00aw“BaVb)}T;/o%&Z'lg"Φi*Zyf^~UHp{GG`퓍kY\旜sh$^{ѕ+W4M?ܿ'Ig[`}g檪0*\sEJFIJE` , TN ֮Z>i]zEQc*u]˨/~rr2 $}}}Xk|)gJamt fwAhJQfv.G%ژJ``Ӄ$OpJ}!(I=Ѥ%x4+wb EQ`6h?XVUU_~`}}Z+ 5:Z_~Y[__5EQ/r<$#KHY9 ǣ-P -v%]\ `u8'/XqOQKlЄGpppPJUU5g(򫯾*,Kgũ4|sN8.xc ²OWIlra!g_=q)Nc.f}9-! 6_CߞuVf ƕжmœVW$4ꫯڶ|2mmmxeY8#d2~7|_˾RD.D0"/]^F>99IӴi HDyY6{M9.֊9V FEC]e1ZkY`QUyK"yDy=e%8qttԴi$Idj~)F$DD""fIE"H䩈#D"O}IENDB`engauge-digitizer-5.2/samples/linlog.jpg000066400000000000000000001077561222557406400204440ustar00rootroot00000000000000JFIFddCreated with The GIMPCC"   8  VW56Utx $"#8 QRa!S1ATUq"%2Bb ?y/BNj֤^kz%$K6933 U9#V޽>Yp9(^ z|G93ZWToN(ZeQW9BEZsҝ($L&8zDyjyΫ]S7{3d8{%~؜>^?5?1.ѝV0n)g.q݅+7*K{R8|2֩HeE{kۊ6AIN?hVSp(Qa@}P)2֩HeE{kۊ6AIN?hVSp(Qa^е!Z#skrE %QkVQiҤJP $Ks rˀD кDص#kD(%bVQ+O$TN $Lҳ ˏ +ȕ3n}+-hD9:4N9ٟR$sBiW.JPL b1 jYו%A7N5WJI ֻt+c KZcyJ3"}3vTM%᧴y[Ƙ'rSseGp(ÎGYP_I,y.fX_/U4t띉U}S`NN)g8yCFV+}W'[iZnlRVR*8֓ezBr|ϖ=^!uV׳>H3ݎSb ʴluo|Jf2gڹW㳃 jJ v&|Zpf!6s04qˮIEK-\L\jn=MW{+-]YN\%$ۮN觤ex8ʸKB)BmP a3՝lHlPս/¸7)a(;k)|24klVZXlO29V6Lted퉖 }ط4]ͬ }:&\5j\:[֖0W.v&C|yj%OI\kM K"̌ڮ5!,} J>VGGc2>Ts-W9o, nκ* js}Ng7?Jwj; 2D*!)T<5`>k)YԍHa&0,*[(.F6mlJ)@a HL*! B1uy^C de2$I)uus՞j(]lh$ 5ynY7ub1:ߔ*&RIc9cVX'z vh&*rS/榥rr^֫"KL+i+%iB呣{~r >kkZyTGgIpJ_)~On5|姞D|y>r >k *씿DR1:6jO<* |姞D|yaP?d"NWZyTGgI-<#Ϥ wl%/zw?'NMr >kZyTGgIpJ_)~On5|姞D|y>r >k *씿DR1:6jO<* |姞D|yaP?d"NWZyTGgI-<#Ϥ wl%/zw?'NMr >kZyTGgIpJ_)~On5|姞D|y>r >k *씿DR1:6jO<* ! WH%BqVI(Ӱ,K#:6^qrPF&eÆW ߬P~5/ éK:_PT֊HƁ7SY y,V1??f|cyBѝ)\ڝ[z'GrZSN 3<8qys hOx/0GT.qYFJoDQrQf]?)c-&Uf"$|R{Y*/Oy<Ŏ,iNܤeV452 ##feZUG<(z49sY~,k}tS)̓XV\kM1DvCifJj ^RclSI<$$uJ=Xj_,xK,TN+:D&&$S3t:<4N̮62$NYa\pxHVs h8;[{,S34qXKңY:9aV<W蔕\SÆ`0$}2A MIiG)ٵߑ 6B=sd-m#lQ^sbͼX5^s6v+Exg7+};F*cmm|\ h%Pl:Z3Sbm&VKޭgl Ee^f6X4i>u7EEj$>یy s-iXUtKZ=ՌB)+:oaIy˯Zىݧck{DY[ Hb[YPc TܿED557Ų]dڵ# ڑo\/Vck]R+úe.-]:rUt7BǫIkErZ[Q[V[vӲ+Q DO Lʬγ\m5N ,%UWkDPӉ(j@3e5v3M %Ȯz22eQY$/+ejW KRs`iGت|z2LR%z[,OgdWzuuSj)-]br.§HQ{+5d3dl9シskW)3m1^n;9-r4 CU&xVI2`f󹽥d3ZIEfV;o7dgHW͍M,D14#վbm9t~xǮ2L2*ڴJL6XmU̩(***",,K2̾ 2ԨP;gt`b?\'@;;?@1:4Yтpu 30_1.?d"N頽BGKYтpwl%/zw?'NMgt`b?\9^a-{ur3|FɃη3XfCKVPxyђS'=#gIkR1w?V *Kid7j*#VUJ\NL2ּA x,ĺ*y.Q-\KRV~k_i F9\:@iLW"V\J۲%QpoVzZr#Tj5E`zeiL82+< /<ˇ4{-$Rii]ĕ֗*-܈RKTfmDNGJXRJbc@'&.׏ \trygsEE$Vpg.,I.d]f6d T1FIwX<ڤ1V/,o˒3%)scSOD!\JqJaFa=Xj_,xK,O.qe´y*)K RHzj;Kxg-͈NJtj);bMR^-r]ǖ21銼>M-3xC81yNpVEd܉"ܚ91cl$ lVcnݑXbٱB eTW+{?+K$d"nZhLඕ7 s1Լ2$@q)ɔŎP^'bY'?78f㥻{]U)dEΥTT(ǜ / $H* N'4+7͒86I"P).҅jP5MY9dm;> 9/K(L1a(p7 Zko(?!mR` #* n#kO9[ *ʼn$äKpJ*P^o xnxl&WdΠ5^gOtɳXvvܫx%7v|Bx=U8GTY1%|9"šV$ʶgRD;5uִM|@A,%YSgіc'@ܶf8fd{y6-ljҁ@k:MRQm6vPl wƺ."^+Lꡢjݡ xSbez|-,KʥAкT6jpUX>5-1fSc$lܖe#{tkfd{$Ehiˣ(=wn-zS^2[T _Քb;%(.+%թ^9yhRa."# &'ӗGQzE9PΔܑjiFٕS257HǏ;]gNUTKQX&S7$l-;罪i㩵5SpX峍=⌖.n#p.kruB I zQ8)ZkT,ĖtUvuwPj2Oy"IB_WcKJps'RDڴmi5:FRRuyb CH(k?V{G8lɰL9I!g s<{?k+OFd{Ha= Qw+r[R&R3H &i_cяgD&~MM*qNsKS$>?44 [OBz"h<'27doZ$b[.EAUXlmRc=Xj_,d`NR޼% -:b뚗Js 9(Fܯ $ե\(Hn:QNƲ-hdfw\.K7t ʹB޷͍4x5#Q`,[SN ۗ<訆ZEA(VOƒC1dYc=uu^duLffkVF&`w]MQE2)fsm)d8CPX_cDғFbm,?)ߖSUU4ŖPJළ)%(=XnI? 왽0TkqR8kqd5>ptOw1x" |מăM|t[]ڔs:5qyE|2`p3,\T^&^U5Mv:!1&P ?3Wc4ڐ\\ .#-[JV{۩Խ%-7:}W$ rXkY'vI[{קY)ZQG^<ɢ6'/S,+5Q5Á$y{ak9>m]fCKb,@IT6:j/'d!C+ o;VMhS5YVmc&yfFt^^qLKsK[b=['ӗGQz︳-+ 2#*"6-ʢ4h :geZeEET%eEIEEI3gΊ**>fw !A|DNveyCZvaƵ >t˷TCٝvꈝeyANݗ;;;֤ٝvt3_.Q ݒo()۲gqwԂ3_.Qfw "tb4p;M;v\0Z^fw !A|DN2FvIn˝kR A|D:}/oQ7sûjAz}/oO;:18&򂝻.vwwqH/O;Uq-Ч4p3jd,ʵw"Qq;$AY֤D"(-766ܠ ݒo()۲gqwm RNbqDz'ɵU'[V&~[ U"g#ti+R BerDAkgӐ;Սnm% kɅ}0M:|L|LY<^an;J䘙ŹK+c܇zF=%v`~zřFyI#/ L4aP<4LXޣ% Upù#f=z/u,U8G1HNI=6Ct-RIWEI xFiY֚!QfZrS*Ϟi2'Yt].Iٝvt3_.QLww]wKvk|x%LOihB(&q=K#!= RKVPQm(hwdn˝kR A|D:}/oQ7sûjAz}/oO;:18&򂝻.vwwqH/O;g{]'@F#G$PSe5g{]>t˷TD(hwd vaƵ >t˷TCٝvꈝeyANݗ;;;֤ٝvt3_.Q ݒo()۲gqwԂ3_.Qfw "tb4p;M;v\0Z^fw !A|DN2FvIn˝kR A|D:}/oQ7sûjAz}/oO;:18&򂝻.vwwqH/O;g{]'@F#G$PSe5g{]>t˷TD(hwd vaƵ >t˷TCٝvꈝeyANݗ;;;֤ٝvt3_.Q ݒo()۲gqwԂ3_.QAճҸFeppE 32)/xnVaؗX&\xeļpPb|YA|٤5ZBNg".wu:Fbm9t~xǮ.O.pa=j{ki{g&W xzc[J+XKq)ɅZH%RS<2̀z~nm seVwj]6ɸx5VO^- GqR[ %+;776Y^֋osT~&BDqV U&TY-:cNT9 e rw-^ߗdmJ멅KmC'ռ\v_$౥g xIpNvmrDrg64Z#rFQ<Vnwj}G֣Jkn,qH,qnIJrhw[H=Xj_,xK,* n#kO9[ *ʼn$äKpJ*P^o xnxl&Wd p"mZ&U nZxK31ʓ V[3Qkx32=w5i@Π5ݝ?(;EC( ҶD;ψc]OI/s`EuP5V<]KDZ2>aw%eR]~Jo}[HJ_*XTuzmKdWFXMnK252`S΢y7f)-կjE1f֒YajFNvRԯм)0FwotHisiˣ(=w^Yl Skjg7)]YͩձqGqmqDy!XAU8 03Ï 9Sݼ.Ԝ`+{W1'V$ŦѦ3.+4.I42##TrUD0b%S$7TQ L[RqRjxDVg `rTfus0 VvKQ#qF"e=+H)R5 R+L~2s̓; 8,2.<8KےO9M$UFO%~[nje9)W 1ʞbռYZu@ lqWs"7?q"Ja(Q{Y+f4s=aO))QWÃcgl:ܵ%b|߬P~5/0^ h8PzrV!^a9VjEREI0 ,O$7 ,xǑz"\PoQӯH ^qd'2 bnM̲NZUႄPYf މ`!:&er@7Gpx"iehL&9xFq<9qkrfIԭf.Zr|MTơsUmH@+R vY(7Xcr~*1w 9M8Be M=QU]glTh^) H/AG-ـNOmK67x:۬Qs+oM ڣ`{ ] :u&Alb%fn&̾/A^ؐi\ߜO5ukr+RgF/(/CRFrXœ {ԤU@֑&g]9nj<}[7kF 9#n޸_np׈J :#Ĥ0Wt\Z>t囦*nV 'δdV)295ԞAaIYgNk^YdKxQP0ֈ6%6PՄg[G٦6#$aGjfRr4K]4de`I^_Vԯ{u=`5sF@ҏT:dK c}5Y8:+pc%5+C7ҧ"94Sx#BepВ7>VSj8fXp7t˷TD(hwd vaƵ >t˷TCٝvꈝeyANݗ;;;֤ٝvt3_.Q ݒo()۲gqwԂ3_.Qfw "tb4p;M;v\0Z^fw !A|DN2FvIn˝kSvRGoy䱂iQYfmձԂ@9a K#( "ԍXj9&t^*vc%rfp'lniRu kib@Sv&98A?RIx9t$M,F4|iU-gQV- {*n3G)DGb8?EM1W1/zf[mm"+rӇk)2D"*#M"4+HN۶\+ xx()?X>t˷TCٝv+<{|Q64Oq"Ig ) ZY-),#1)NQI LEJNd1618&۲gqwԂ3_.Qfw "tb4p;M;v\0Z^fw !A|DN2FvIn˝kR A|D:}/oQ7sûjAz}/oO;:18&򂝻.vwwqH/O;g{]'@F#G$PSe5g{]>t˷TD(hwd vaƵ >t˷TCٝvꈝeyANݗ;;;֤ٝvt3_.Q ݒo()۲gqwԂ3_.Qfw "tb4p;M;v\0Z^fw !A|DN2FvIn˝kR A|D}GV'Jp.~(ा9YYb^ycbfDqÎI(.,$ppgp6;-;*)$Z9q`O_Ip~p'3"/S4$%l=?tVƾ 2MT6^ST3w9&AVKgyA/%ܲZLq=.~rH)ݢ@<ڤ1V/,o˒3%)scSOD!\JqJaFa88̻ay1+-Nemmck)!y.}*)qZfnq:c#y9,,ѭ)tEov,6v yյ 2䮌,J\8CC؜^ =H"?yu[3O[H'pH&<ҎfHCSYڸ$N,293r@n4kQZ^/(I+Y5El#7MqFfD7K%GÆt ^'k sp\}L%mi UMj=:Bq)FBlX7#=*s, +[F_yMtv=`)o^m<$8=cȌN拄x)/brXw݌^3Y+ @Ls):5  i1ȶTc\kJfMDiT8š$:5.K9ZyrJ?]ea[DeUFeUYTTFmagLLH̨4訩:"lQQRTT_EB3~/(ξYv'@;2FvI;v\0Z_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֤g_;t_Q|>N2FvIn˝kR 3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂa3~Q7sûjA}FuӰE?N(hwd vaƵ :}g{btb4p;M;v\0Z_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֤g_;t_Q|>N2FvIn˝kR 3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂa3~Q7sûjA}FuӰE?N(hwd vaƵ*g)2-TRC5XxR.q9 C1W$Q A@,6-ZSbJг<1"Fݽ'gNەڪsuF֔58dyUG/d2[H-l-czS H q)C3E9PΔܑjiFٕS257HǏ;]gNUTKQX&S7$l-8񧬾VaѶfK40 u[vҮi{,ExҴLFsV05ZeU|HJk7"rՊ@H!Be$X_+ QFへg2t_Q|>p{_㱷+oLd UqM{kLLORzx' px]4+D'd]vuwPj2Oy"IB_WcKJps'RDڴmi5:FRRv18&۲gqw_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֤g_;t_Q|>N2FvIn˝kR 3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂa3~Q7sûjA}Fuӱb:g7;g& n8/M|Q0χ8ģK3V?ϑŝcyICK| 䘥3+b_w;bw8$lǻEeGc9F1I1&(b}N4Z* >cZOKUӽEoaT,CyR.8)%U,W/{zH3+f6rAo2ϰQTtUb^UxJTDnW5xjB25$OòWmP yi=C;.L>qնԎp],dpZa l؃p .i x}"z| ʶk)1 ]N,bJs1%ਖ਼ ?Xu͙Q p5k&G6V1??̊'/M+8c2NÆXJs%kk#99FԱ4wjsokSN:=ε9f#L63Ӗ'd'H<\\X'Y`_!) iB͍d&dNHޝՊ@4*&RIc9cVXCsUӱ#m6ub1*djn'OcjdTVT9MRRnHYw>})<7ܲlXX`y]("ܙșJnh[+{8]cn 7idOr^sZfu"kD.{knq{Ht$ SY-punh才'1ҀmRc=Xj_,d`0dy1֜,[WG%JQ԰vtIQ4)TBҝ!*Udd\ s@s$WR/f5xMSa 5霃Rj+%re] G'c-WB7i2ϝ*y ~ERY:ktyZ+R#茅 6j崋FOm-\^Qʫ-$zXTTֱHLבRlhMoX7NFEZKXP̱s&?+_ uCX-a\xge)MJ+(sik2C3A<"FxŖ_ @ Pmd/T-Άâq\@nF܉*Gפ Q:t kzK_.o>W Pb]W#7h4i)&F9}T}oҩ3i_㪔fcUi]P֩;WvO5Ui]vD5$_V SPr2Jss//[TZkgWu;jWʨ*Jh˖ܩb`O zVKCJ*Ԝymf"M@h'9:;.,>U.G{'S޼۱,x:H"q9!{ W##ˑV՝S^j2ϕ!g-튳=W+nRtj0)Ucmn KQtƸ׌-UWe3A+H,60Bxq_C 4IuuWk]ԖsÁ:+VI,JLʫ-#Hl04lΙmi'FQU EQRiQRtEL󢢢h g_;t_Q|>NveyCZvaƵ :}g{btb4p;M;v\0Z_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֤g_;t_Q|>N2FvIn˝kR 3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂa3~Q7sûjA}FuӰE?N(hwd vaƵ :}g{btb4p;M;v\0Z_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֤g_;t_Q|>N2FvIn˝kR 3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂa3~Q7sûjA}FuӰE?N(hwd vaƵ :}g{btb4p;M;v\0Z_t_Q|>=Fuӱ:18&򂝻.vwwqH//(ξYv:}g؝eyANݗ;;;֦3yHcܡs3 R.mNc81J.mN=k#F J)ƧPQq}22 $$:oXw.TOI4EFe];ajά0ʪ\Mܦ׼iަhJ mEKigĴ +Z[R+#b'g3~%ryZ]9VbOgJ *IMMZf]uRV/i2]wie1e*GF䪉2 aF/딟:JKmlACzjfግ3:{g -ާUb$CRgUHF6{#{ÆF#G$P;v\0Z3~/(ξYv'@F#G$PSe5E?Ng_; ݒo()۲gqwԂc4ul+2nv88""LA[,qR_%ĚxaqωFg xじe*߬P~5/ (?TTϛ4&HILS7eRpO.qe´y̵7j&^zc.B#ZQY"a*('<<̣2,2Ï9M4H*uSۅ>J( )zeVBdZ`jwmB5*7Xi,97syB*c%sqEk}+1"tW5aʸJ 3'6KOEr!AdEa 2=<"ώP4Ako(?!mR` #hiˣ(=wYpbm9t~xǮ? 8OQ7\$9,Z4Mvq2RIILcUYD[ GD$2j)6NI 2mzn{Ls}{Vº\+Szi.Nֿ 虞e.zyW_6p>">:$u©? Bm:`5&U2 ^ '6ũ[\R'^A+B$ZZ|N"zua'fXe\}`+5a,}jd6LZPR>K^f3(rBRJǒIBȷ2PX9bMy=;iR7kTa|bF*à2_ӌ5]ފ L>2f!ʌtFd7\MYԨ+tоeܭJmH\Zk{KT|2EiUB>Q[)/($y Ʉ_dqvF_:(^"$T:{ӒA+B+ sX(ñBLs)^ h8PzrV!^a9VjEREI0 ,O$7 ,xƥ+ivsgMV뚂c:P_;ʼnu$cͩsf4{Dyc[5K{ m9Ѷe+j)k2t]GڵȮ]OF\>||T+[$qmqHzB sNԊ01:a YInaX1Z=Z쨽mw{qF֓)"~Խy' jnA_01 +br}(D˯s:qa1IrE'Kݙ`grX uvjͱFbI57 Ѫ.O`4yg]vLYysYr%c; SeωD{u["LjgGߞ-|=-^tQG:lgnһl -57]Jl߽w+CטeN׽(C?mWo{?c142/yjD [4Ώ})>*:B[MI ;Gv4rf^\2nVֽy&gZׯj4߽w+CS~ԯXiMk^Pk^ϢS~ԯ>MMqRd?b`5zMBuz&>MMqRd?-57]Jl'^aӤZRx s!:O9qQ9yEgh՘uvHWWS bN#/5ikגjk5ܺՍi{M?H1ޯ'Q>ѴvUv&(_`"dŔN߽w+CkT$yj=SZNҠR'H+PBR}{UI(0#eSܑ>ʋwmMi;J'Kל"~ЭA ITQ% 5zMBuz&@~MMqRd?-57]Jlvֵ5 ֵ-57]Jl߽w+C&jZׯ$'Zׯj+߽w+CS~ԯo6FE-HC+qF'[H@q+r3Sb(ƟVꫫVpj-:'lHKiz?Ẇ`7L֕6 e[#7V}AvUPGgV{#sJ 4>I&7ޥZz3~å>7>;v^boj_'vֵ5 ֵ-57]Jl߽w+CԺ#SFuXҜQtgٜ!vT>خܫ,MKT;MZkZ䚄ZMEv}|Zjo޻! 5ikגjk5Zjo޻!iz?Ẇ`,Lզ^IN_SnrJ?De`5:W=EYOMv`紫SᒷnQ886ЭTKgS~ԯo^cuy:W^{t}o]QVȽԃtn(:=t;n]5&x*pE=ypˋզ^IN_hiz?Ẇ`E_2om Z=H:AhV3JONVRgQݍ>xٗ P5ikגjk5Zjo޻!iz?Ẇ`,Lզ^IN_Wgiz?Ẇ`E_2퀱0Vֽy&:ֽQ]E_2˫], F.n; BE_H11Y=\B=fҢLgDEi:SooqOrG*/c]Q5* H/^rtB%'ڛPqD3 r=1Z=Z쨽mw{qF֓)"~Խy' jnA_01jZׯ$'Zׯj4߽w+CS~ԯXBZssZ"  (BU̴R%NYPyA%i9ezT(qmqH{{B pPj%i1:YaIVya9qvֵ5 ֵ-57]Jl߽w+C&jZׯ$'Zׯj+߽w+CS~ԯXiMk^Pk^ϢS~ԯ` .tApQC%zwo{O_غs&.nzCU7Kؑ.L޿w4Tj~c}]:awN(:S] lWlnU&bpxiMk^Pk^S~ԯ>MMqRd?OoK<MMqRd?b`5zMBuz&>MMqRd?-57]Jlvֵ5 ֵ-57]Jl fj~V;ICd4Os^4ݵ-&_#gv4ab9El?`ȤskD׃#+m@ʷv'vGnj2R("έ9NFi&| Jߘ"zuЭgGn!`˦N|9G/.qU_UUzB a.]IPj_X+qRUښMz *zl-Y7+a+~cothd^ԉA: BiR|Ut.<8v"i̼ezS7YuF\QWi{YUܗڬS$2PCv.}Lku-[T،Gc\@s}d,|CES>XxiigfdgYTkz!eҨ967&Ǎ:Cm-UN!SfFʠ=Eb%|3כCHVj2zfp?OQ ZX,8Z _VT16лmdgH +ef_1w1v|c'MIZ i=#Ue$)e|>Jn~*F=9zvyfnݕ%sg% ADɟmJn~*F;A6ɞETߑGjՅ"j:Eخe0QFLJۖT {hpuhoP r7#}ͰqH7Vw-~vG 7r:(ŃZri%EE&P2Sdײ\jo+b^4̆m\*r癕i4enw$挝V*uZ.1 )kt 0UVtD`e7.O5U19TPVS#F̑)Bvp;><!jBF7NJ4('"HӥH9e9IEaX<kzՖzE1K%Q9nh#rnWeuҮFw $PB7X/Nr+R'^B&.n8s(sDby劄87CኴJ0StQ<ƹ4%efhI4+-9[nNKԍrGgG%jV<:Rޞv!R9 jM]J6g픵&=Ne='p"gR%PKŽ^OQr=sߘM >|-;O#H^b NF=$u֮|5u|i:D/eV9v8>%`fydwhY Zlny *Q#D5bXuu?O&g'R\Et|sjnb6zmWd]n_HN-&k"A NsFhAJr~͉K.uEը6rԽ4foMi'1h0!iT,kF[YJMrѵ3,Z\UzۖE,84z{0S.je]D5:cǮh5ZDytة%Ki2ſ %yU=Ͱe2 HZ﷋kM8씢Ki3:ȟM۟ @6>24kh^NKݡӤum5GV38b(a- p뇫FO^A[T~Ea]h63]UHR씭z5C 6 ShM76ʔ$kdL5o R36&⨖F&ƴ{r:E]ɗ:ѯ0js5,.@ìLTiֆ#ڂHc$D+yOҔ*:cϲM"C}h̪@ŲڷhT6_aMgZ ̏UďCQC l,zbI,:B֦Ti[|rtQU/%a޳ʿl#3CVcpIirO53["j`-bH+|NgR'(3~_3psh]nծϒ c(XB [[&R;-E6UڪR_vнlpnto+T454L6gk=EDc5oK XdJ,6_& S2Zګ۔lgVn)\D%&՗v uH{RsEI$;^*y=3m1jܖCQIƀͤV봹N`%!'*y8??֑Ŷ@Avu^*n t}m%}O`R Qئ>{Twmrr%%*9@ծNڹG ;UMu8EtQrޫGidëaE [63^ž='lXG]^o6+4ù۷=w{:l$M*NMkL>[)%N(QV{sR5' VnL/m7;V)Tqըƿj.Vs.֙7bVܰRkCͥsCz m딵6iImPsA6ֹk-8LپÔ8.7~QE,ӖI.*)5Q=[$KT=|̑^{FǷ?]vd5lGjUec<̫I[+u%/4dW;qIK\YV#<͵nnufA`39ǢFYڢ&9>Hi5}5S|3KrɃbx{&}_i5tQ.k(ilksX(+:~z4˓gLNU*!kz(U켵ѱ$Jv90FNl)jnݯ`5QJʽچyX`{;^T7hN/"]*fYȪ 6T$,SLP Bԅcb$ͭoo@hP!FN "D>J*r!:r , /1zo5v]˵7A! pI8>ʞ1NacU7!S l3dJ\A`!56y9Y-}ٞ^V͡{ƾ%HvgxNzP4uc532{KcdgdQ!?>_~ֺ-lFڣVr t9y_KUPr!"`{q{fvrsLa,UQm{Vi,=͟# R=OcM,adBҩY 6tlКkTfX(+I-X!7&6ln..H%1 tuQ*cv,]X+|nb %-s6|>jn;^kUOslY~k `*o<ֳd;%(uΡ?'dSv91F O̍0 d}N_ur_)t}$֝y ʏ[XסH[ۊLS+=~7aO`k$M ;M!<׵$5iOVfFhW\Kv\u>ֆ%s}##AC |BQ*s9:_8WWRg:c` xɛ.=2Y&0OD˚f|{K@`ߝ5#RuI02ʽm>/ `Ab$R BLb^WengG̢(B)]JW՜Og-+j\TBɬ STڰƜjK:eEG0wJX@l3);:O5}pm|ϩ.:'lz).X+f00&x4ar)ZKNj:ܙ^ ]5Jn-mvXR&㭁Q~\]3$oĭ}anO׶Y[J |L_Tz?VlTpݒ\6 lk-«),CUn5YMQxL!`87({]W(I%KT=|̑^{FǷ?]vd5lGjUec<̫I[+u%/4dW;qIK\YV#<͵nnufA`39ǢFYڢ&9>Hi5}5S|3KrɃbx{&{kQ>jY]mU%mEj˺ A֞`[QcTRtuī F=A+S`KSw\pͲVU4Sj򤉻@qyUc0*_EUhY\lҥo!!bd +c9xDn9/KNtRZyEVM ff,[j# =9-|뗙:eK#Ƽl{+IW"5Y^RIʂL$:)XF[C&On 2@q{st}q^*j\iY=ݬ'ZAPjTl-qQ%n$DZwٚrGZʠengauge-digitizer-5.2/samples/linlog.png000077500000000000000000000266511222557406400204450ustar00rootroot00000000000000PNG  IHDR#ZbKGD pHYs``zxEtIME 6 IDATxOgIuq?{9s~߽@~k$ @20tI2>@`h'y@ C! & ]~ @20tI2>@`h'y@ d>12R0YqM@P ɉ rvv6+2eUhC@l@#㬴OOO_3_zͦui##]lB@DM D6."mmfLx6"Z@`dP;cN"bZf, 2=5qnWw^` 0,2dZ w@ddؾ'U/믿nK㱷Z!THw@`se`ru#Ӻ4;W0z66ĉ X彿W @6o?|LH[Zf׆iv?z׻\ׯ%0l (r8ֺ4Ŀ6Lt?OWHs  0, 56GXߥ'a]G&ͦ'nݺ\zΝ;6 ̕"S{77`8"e#~c(g?hİC#\c=@K@rU>bME6- KVTa]GlT~(.y.H G*o{0uigz>>>>??7ɟ%;J0 İD | W9J0!f7l˟!z *RO?[ 4hC#W`!2`΁2fJ'F!d$ @`ske 9k6La]FC\!P@Ƴ`&30.kE`܊[1[uG&l#m`m,0.Պt\ˆr%x'"圠 jO2ʀ`={.]i,a鑮w.wP+NvuHsQH.m~14OnZІiv4Q @抐ա (G Ǵ@o1b׆iȔ*|lMrUՈ`(B2PdEd`M@{s$VGrA y?ܡ82{@Jkr"7.!u@C *E諞]dtQFh2L %$-d`[@ T4t@ )d )N%%$ʼn3 a.X+! J?;ƕT0 QγBt^r+H(V@ Vc*b"TׯW$@9@s%:`_ x;ɧ PYje,IζmB(BpLG`hJHv@" .$ ŰJ ܺu 4hC`'d`'"NJP{͈&@M 4%K2o @;ՠ衾NvI I0 HX(A! 'ό@F%详d2/η!lÝU$ Y7E%E~2-Q^`muI,d KKWA@S^`YEy"?d ?cV@P xPu#44:_ $#JJ0DI# xH0 L%㦎 [{2@ X0vL踸J$ Y7L@XffZ T8*$?pUX&BZIX @ :/0] @`n@!}N&2&8LH|%C1rswzzj'''gggrK`٥7e]р@*J֡i5Ҁ@s  / ifS,=e|/}K!P@^0gO{-1Q ;4hvV|%xWlE ʜ1X)e@kΊܻw%X~o`Yz#Ŷ']ʒpqqo4 g>r;sDXIGV5}{mԚ]D 'yҀJ_/~rE/ [ 4V8<,t{9ȥeL@&Dqw EҠ f'!(xoJ]!P@-gui1}@t@X֭[" Q=]9md@ߺpnn]F*'Nx1(W^3+rp=㾐5?6#njȔ^D^@ */EOw#݅Dyd]."]k ܹ#'r} 68<<<*Ѻd`eceܘ/`_bCW\굲 t\\Rۆ(/=." ,$"?zbF6mPA@E$z X[!#C,;I$+*v@v3bV@ VdzV@V8  @- F%譢 RIhJB$-`[@|&X (|w(/qG Qw__\Gv㛮&z209.12=eWiBO>'x_^xO~L6i:de(% rdzx]6+ &@(Ap+鑮`$!C%|O(^udzkr>%_eZQ {.mǧMx;\pd+rVm<Mi1mD"2=Sy װ\ޟ @oeFdz]4hC N@^Wi2a"8aiiX!(C- 2C|(Ϥ (TAWxP*Aj@(A-20!2͍KqJ}ݑKLXK%XK@!:A@XQQ ]_Qw(42G%%(_(!2\zW[Ud9!+C)FU=詚rPr3 d{K%裶@u$ lC%؆{U8q%VhvDZCgW.BC8U7 $v @^dnF#D Per@9r ,$@@'ljAj 1Au(ACD*B%(A+BZqB=(A5C(ABU(ACBm"5W C|"ԂH 3"Ֆ ˌ l^@|%yݶ{2-VpPJ V@Pj TU(Pz* S "XPJ TR€mk l˟!0:Q|wn Z@JRĊ ".A%%G@ ѯ48~".eqYa9S&wГ<: D˗tƍ{٤~}+XK[B2N\0ŝN菀\yv75Be #a iC%'>[nj2`iLqӆz% ׅ~LE9Ae@㵕sm6MpڰH DDJo[IJɘ|D޶&cZHq@s$[ A; L; c6n9k 6fsΜ\h!0r%(B2> l^&Ub2&UgQ@|}[2Ă臀 ~] @g(@L=4}d= !(1w,(P420N@J w @JpA 4!_ yE23!0 d  0 ;v ! P{8B }hD yY 20M,z20k` 0 Ap&e@`.M zz%20wo` 0&:d`!=J Qd`]:Vd`ؽ!~! tȻ4C{0J ,w&@%8cd`!Qd`4@}(2 @`9Kd`y @@JCvc@k 43hW v`@i4@hQ v]@) Kd e@@C;- Rd }@@hJP ,vW@!ʏ_@BW1V;* *Wd o@@Ԭ( UdDY0JP ,vN@12P@J vK@G Ja8ޝ@BA%(˹%NNNІiv{zzj4@|gm@M%8s6Z6vk{6 Gjͦ6L#}X GW`m7h4؜XmUh!JOwݑ9e$ݶMFD!+Od70)̔dXD3&>ӎ?Gb P =/~ _C>g}72#~0Ӄs8m ('mbv@T%pi}ƽe(sޏF}X tC_~m}* eۘyp׆ivw & J_R(JF0lN6L7]] 0w]9f%`(ae@.+miІiv3!@`=%81K`&Ȱt+$JpG@#8_3x9_W}X @`/d` @7P,  eeܘ@@'$ @ ˸1 @'N IhX[ٙ6LH ؙH$$K/pά9+Fh]}NHDҺ4{ x֢35gLc4&DX1=A"`kIC~5ů _QD{- YNe>Lvdf_H{2% +h/62%G?EҺ4d›.͞/r(q\4DʔH1hJE7IDͥHb-fOH{2߹ 8W#SF}Z.>|S֕P% ϨD$*Kn_o>AZT]DK$1ʢ1b#Zz iL&0)$l-`͞0d`%rP.s#]HHZfO'*}}HTZfܲ1HTZf/H9GK jQivq .hSHTh#]c&_K#ki2nbӤjCM盵6LˬHyɺIld.M6;eg$*KJ+&FeŠ" -."]t04{D$ۤ5joz݃Τ9@&x.O,agq27lLۏ D$~4$)4V7w] pmVLe)D\n$b4钏$ 㜶bIKqʦA`at3QMն+*.n}&lY*0Z.n}mI:7ɦ_׃3#vLcf"ZqÐD"jH-Mrm?H0."]vEBҺ4{8w:DuikeJY\JH _KK&bDbцiJ8 @#B#! @@-CHAHA% 4[: 2"> 4Kht@ d E|@h2l@ @  ,d8 @Y@#p@) )(@fKGRvC IENDB`engauge-digitizer-5.2/samples/loglin.png000066400000000000000000000264061222557406400204400ustar00rootroot00000000000000PNG  IHDR"ybKGD pHYs``zxEtIME {R IDATxϋeuǧY@MMz "5YaC6h#-5a-{v@h,D(`&iF8 9J5UuxyV9yzݻ Z''H~  . ]$!  tA$ @=@ }e&I@=@]@(3IB@y@蕠4{b\ 0ޘ{朞.҈N۳۟Ƣ4] ,EB<*v>#kk.nפ@K]Nd3T4Ɲe۵ ׍nWԅO%rOol[sivm ۷~H\ Lsv20BN\]X;stt.F]۳xQdiO{.K'dZsiv/PwՕz;̏~iC(%6J6&V܋Qoͥ="v_9z۷^ޏ5҆ aN8(~h,aKrXo. D }(ᅼ^xppA]!$ Ƚi>5b-Fk{c4c+1E 'cwҠ @@#0|v/V1v?ͥD_R\o vv9B@H`M4{Db-1K5mCyqqa/bD-(@QKggו{ ^(D$e; K0l @p˽ _NxPsd!P 2?M!T/BůmGZ{oaG@.Ƚ@ŗb9wiІ:'ЎK!/PФh{I*@kr/D;O> %РK(~! )RQME~owr@{)jTarowr@Z{kbD{~Ǔ;%иK]Qn$ڗ{(~xLݷm@m]ȽP?:mp "&g߭=m@+}ɽM%НK(-? @=ʽT-N!ЩK(>@]WQQ]@@r/e'StEwb]I@?)(>@'O ZSN MtB(,hA@+):@C{(O> >RF? P9>^@?+ P-^-THO-GGG<+E  P$~,5@ 7 P~&x>;fB@wBU|nS&C@w*>ڕ)! @Q pd @`M2t[p YV"/ 1,@_*$Mւ%/kq ~1v!- @9^4f.RůX NTDv}}vM{ooONNlWsiv;Q|'B#m֦Ѐ a7'b_ 5wtͥTB+Ca{V$.^rގqn[]0zh0QWFq|sK&pxxXB ݛƶ5f/17ZxX@(73rod:gL\[._i>##S_PHȴVsdWWWV/}|Zk_rҳ?{G?@{_,"a0O_yyb[siv0;Oxc*>u +1Wop2 A`aXdZښa0#]mk.n'6и{3<%"_c[ ]@`ql麿mK/^ ŗo渱. *_9̑Sii[mͥv_1ۙr|Nu0Bj|StYT޼=W[3FUuRwuƟ$2R4{QcW&ABc@c %oR|NZG,Zwa@`wjwO\:4hC@"( @mG">r_PQA(hr_VIQA4hr_\1QJB@hr_bQBLr_hQB CXr_n4֌ P0ܸU|nSt@Kgq_^^m>3|_ߥACC)nD ůT " EE W` ÌU@Ei(~}5#b@/C@3cz'@kqC >%*Los*N^B_V 0r?RCP^+OmXR?zE9i.]P홳#V"w}}=~齽pQ0\N^qϲ䗁g C W:{E~sKtͥٽ@\pҠ w<Uuۂvm0Qp\Gli˟ں;޺uk xj7'ʛ+ ƶ5f-@x3~.-NBs^pEc1j.]c.(~.  oY{8>!ӚK{'H⺺z1t'yG:rͯ7#'pb1Ƚ\z#3} \['?u o ,nKWwZh@E{{-/ to;^siv;F9W0޽ڨ%?oЀ@Qѷ+nFͥeiN@޽{7NnҠ  }"VW"VL\=#˷0x `:`Y!鞹k.ͮ텽XSbE`=>Dㄳ4fWϬB&X¿~)d$PȟY-,EWŻuPݩB g Ԁ%`n9K6@omwOCYF*Qe(&w]_6+fY$܏ŰiPi 3uʓwB FX(~u$6 mԱ,PrkCd@;+xtE///[mRg˿erCKr"E, !!*^mMX @#P0J T|n*p!N@-'wm%[왣K@]@*wqɢŕ%ܷ[J2C+)aVO $ vv&wu\!~,+:(L 󠗏=;wA̵$U||XKp}.P}@+@Wʒ@wl q.X@g& MPH%@K@@?#+!WR(,r_\Ih? !,@+(!F/ 3?! APG@7GΆef ͖[~O Y1\(~!b Ŕ@v#U||Tf7Eo'*fj+H@- -@["9C_+#cE@.#Ƭ m׷P~kO ^~Fya$e pd2 7Z:e&ܯM@׀ PBX>cv(r+E0B`QQ en]n{zz*l]__۶۳\Ne ˂r5i5Ҁ@EEK ьͥű@`A5>\/KL`XD/r4k.>f;@`Q׾˚̅@{sc^rmͥEm?WFvd(Qr/,Wr.:.g5х<thKG s#UL`24=2w_C <{Ƕ\Ϳ5{M&B $pbh`%rQ//N.%ɺKoͥeKb;OxcB`g7^~E~uqW 00KUwwZl[siv;' wYu떻2qintt6FͥٛJ"0ppl6&0,Vm$,l]z\j_)Q|Q37~Q|n];QroEE݃{+r..3L%z {/=箞{jW^t?:Ksip"c2_$[P~ /H# 갅~XU%[4!P,-@"TT,BOϊ@;*v7"ݔD'0ϣn'bcxrkCd ⇷:B 1#(~Gn:UBσ2@76[^G{8'g !S+" >H@|K/4V.NN)r_ha|(~5"BrҠ iPir?O@{( >mfܷYWڒ@xL|%I aH_Fs32|@7GΆ@-l;i!ԒL@񳗀\Lş [@">@)ue"p WQނD{8nD4ی&܏F@L$Ou e _^^<B{6٥kZ{C #?#,[#Y) U|y9/D}%"L#h ~ o-[P^s~M U| [_n?~9>p P%<Mů}u%#`B/@qb # =7lC3!P;:<" PP%*"Ux P%!׈!P:! Pj!%W Pؚ!Ŗ P+!eօ P7! Q \Esg_tA Ux>y@/ͷ/?r=sv@wBۿ 홳#z$g:r^y+}Fl  "Ͼ}l ۿ&mB ŏ>L昰NOOGY4HhMS/mM`-4"0|uo^Sy>4ݴ+1eX(@x35kD\Z.Ƶ{vݶldavѐ/...@i5ࠍP(9iOr4f+Ѐ"^Kػj }4>#\)u0B-k)͌6_B5f6r?ջ䍡 4C`wK_nFo5>|x{9[siv?u o ]@%ow̗c7S&;.s} X dz! E. F |i3`  nja+f IDAT(KcF{a9X7-"V4G~IPSٵ/K0m x}o3L3a" :\Ϯ?hk.M.f2ȃmk|IYy*B!fܯCW(@Պ_ 6@֙Zz~*1Cy;rGwt@`;(.]1ؚ?8r?!<Pyܑyܘ$Ϡπ@ ?Q|u; $\  ""og&ʃ'J'U#{˝0>~Cl@ T|ل[네 @2(!c(1(?X!~ ::!i>x!j! 8 Z͐{ v@V(~r} F@n(~X?>dh(r; @܇o,@T|5AQ*(' /9mm-+/kl}3$@`2Q3w(~>DBӆ#  &MGGӅz$Ѓ#= 4}Xt,@V|ӷ5iCQ +>r8F@_*>r{!@ktM@Szuw&y@ A@?|m'j fnn 0@ Gʌh@{F]Qef !P#!L P#P@BRᅼ{!L& /sz!W@B z_c{޷f_*Vef ! _ˣnGtuc4fOo@9=x %۵ͥ^c3҅ Pw9" epxxٳtOOO%2 /zbM\[. *?,rb/M#Tͥ٫+AB htt2 "{mM\}{r`:ͥ4 O@S۷o ~jHpb >o7郿˿10fr!y-Wn2|wD׻A{@%AiN\KX>v-Vn&aL.$RA TDpǀ_B/#99c"N\=# 0<駟%h1 F #1KD@x|̀ f++c6ĘK[V ~7{Fg*54{v"@In`2qB"1Kc &=@ g @`w Y@ Dv'ΐ T@H@`w^)t1iWzeH܍厴;f''\ . m-*͞⭼c7|"*w0ͥeǷeppb]Gene5:K{'i.TeF#u!1Fs?`FtōZ$FڰDo奺#NLO ]G#m-*͞⭼KW >]b#36LK W4ubьn]6eQk..;j4Mܕv8qj J?r0)cEL!( xp}NqZ$bQ6~mx;m)6-tý)6zHl.Z}DQ &>%91)xV"I [2"0L"6/; &6%"//7$fFz.YXO6.cxhKDGtH354LL첻46$i"Bͥ#3{y} 5^0^^3OLqӉsʽ H(G#s1 푑w&M0  `@@7&r@sW!lBpBII0\IENDB`engauge-digitizer-5.2/samples/loglog.png000066400000000000000000000271601222557406400204350ustar00rootroot00000000000000PNG  IHDR@bKGD pHYs``zxEtIME !gQe IDATxOeuaCg{nUĄ,~X(`^&x#AC@A`{g1?/x 'd7+fHI)TSzu[|bT9N}ᆪO  MO=q @9P 01 r iPi !&1S^rMV2s@i7ٙYCeT daxdfw z!_N" YYRf͡Ѧ4{d@x`K! $#pPvd%#pMivoiMKx`KnF@$^sIy2"S,qcmJ{57.)/9|%Q C`rf4gIS7%V2a| 1 x]S;/!Қf57B~_ZW7F$pOzڦ)|6ʵ)!4lr{?W뮑1  v/UUO mI^MK6{^w>z3r@aӔÜ6ٽ47.)/9>wsW|(+)$UsS` d?y,` @ >ȃ=HNr@^bCZڔf7V47.)[p|G?я씈<,{ՆMiᑙONNrsC!BvB2+G9{UOj kd @`[)K|<%nN k<]+@<7]9q] ` @ L##Fa%rX\y| 98\y<@cP Py<;񸾾voeuG`a#r=/{UXL@=@9BC\/ >x4 pÌz"rDu„ #ψG,) :xL+ .cZoiZ$rL*1@[P9~LP AI  P!cfxLpA@9ώH@f(Ǣ! IX7c)A! :x$H @(G^!i8ʑKG2$&r⑒& R ;c1A D4 =}ts|rrruugUQ rw-ڹka @ n;>>5ZyZd lMXNJpI lGX=._C[@9Vx PYEDe 3tSʑGV,CXUă_0T@ؠI24{ M[XC[v z!rgSy<0R4lfNxl[-w1e veVJZSn%60fw,+!-ȅBw-!G r{!cc L4퍍xܹs` J rHra.3{`J܌١A2 +!{D<\!L!`O2ߨ0CS{!0eF47YWQE?D<[*s{@`  U#b`6<멹iv L& o,xȬQU(훀镣4(]GmXN4Hvc92&`>rù` %rY6c3, ܈3m; f'(QL+R"1|D-9 hfx4J62 eeiURC:CgS Qy)@9  C&MYf P>Y&]rCG(G]GQgW(Qd[,j(y(NXqK -u@`6c6NN϶!@9 x\\\|l` ͷx x(Qd[j( KU`$)I&<(ii@P&ڸ&4h7m C`E(NJpI=*G?ovߡxJZ M okqģ~P 3 3յx{P>ri0@P;Xb"[!% 01 AH@J(GmhģNQ'&@9&y2c22 P;rEb- C`+ĵͧUrҏyChn]rbV'y(۷k+cK`u0rCh`X0q׈x4CL+l[NV9̍sҗ)94[ <0U&nx_U]\\vTH"nn36`4n{ivA* 4~x!<=@)lKHٝ {XTs*0.$wȯ\ rŇW(gv%qUVؼ(-x0-Ҕ#U6"VH@9VK@v(Gv,x~:rܥ@9D }]&`c߻0wi0ma"[!:I5 kP%gPz{GY ǽ{b(@Vx]ϨfxCl<9??7zpvvvyy-zttdM͡fMxH* Ќ@m99f ug/q6b)!Wɑ:9\g 1]UC`9Q P *fT̊@` x|%T@)1hpJg`j dC< %ġ5$ LcO,,$?wGWk] N^}xi(|65], odg@`9^{'Ow\XB`+UUVf0$!۷oKq{JQsw/;d,F.L'vT8M<Gylr½!J`؍6hvp`j 0Ņ.WP6ʮ"0|6|I1TrkvZ4xH<ުu\qzaB9*CE@<3gP:#H@ #K2BX+I! @9VKr'xgGP   "cErF@9$$xI` @<*kX-v=Nhå(CQ(yy8 @<3%c#^(Qd[/ hm/Ѷwrl R"^~aB(GBf$f[QG-q[(G]&#xFT(TbChGi8N|J]ʱYB`Cdž{XGG]ϵg#iց@vxK[ڂ(Gke?p -Rb<1~֍x4O%pkj@uD<%e`X\b- IkHPAzFcP-&6"xleQ:~ &x0C r<|In0@=@;GGG˳3{ύl٩@x`ʆ3<"bᆹH99D^pX W0O <05̏p p`<'p;&aZ\]]Na@o+p/| =HvԶ5Y:@x`^y223Օc9Nၩ@CCG-~|<|'v `?[ow7!p%}X!MŜfS6w]sKv ` &PZX ~|_+&ݮ6VM1S <05̃p ];w߽{WWs*w/;d~+ 01[oQ+SUselе@pBf! ρ+H9Cn6_{!/ރUi] :+ۇrcXEՆLS|Хar!( 7=&K&`V7,<dҔ#ǧU[f]@`!c+~j!Q;HXxȣu(?Tx\__{å3 oxDYQr@AxHybyY#pXCrېw=#/oV@D'9@I I0(5 u/X=$ ^ѡ(G8NK s~ƼܪGc*%>OkypC`V\y{(Y0f (G3d#QA"JD9" #xcY&c3, n 娽* UӢQOI_@ /#/)i D񘄫g^P z$ |ayV@9 oA} x>z׹CξQ5"0ٟ< ((G}*tG(GE͢T4N(G-NtA(GmHtD((G=BtG((G <tJ((Gݡ6tMhS(-@@% 1|B Py@9rf@`.Q %sq&C9@$ 6xx8LA@{ ţ[Q pi0 @<,â`@B9Q @<%C8L@9K hQ! ([(G['@Cx4K(̀@,QhV(G?@!nm1N@`F+@9v@#(Ǵw:#` d"-1mA O(i鯭Po !аxs@!0* -}| $0or|7@ @{rD7@ 4&( $(G| @3r,z @`6t!,% Q/ѢKCJ`xTq!$ Px  0x3(njv@ xH򟍈ri?Y #PxzM d| iM2{03%Px=}4ʣ#ٙ=tfs#S2ن㓓  ȽqU"_g05e"Q򒓻9YshA@̕~wk-yW\r^xgv`<Àf9, @ן仁n_߸ ǫ_s؏&G?4@{[NomRуK[@fد ,KyB6rQf:xr/_!+y"1X1z@DH<Xltܿ߷|K_*A6?h @s6 V {oٝ/~Bv5>#@ska P/)n9!dp?t{a`}P9 ID

    ;,;/%}g57.yw_-VjTj!nڄ崂ၩTZ 4DK#W4{}iT2 iSM$ݽװSI6`SsDɬ)Ѵ JU4@Z68r9@x`*a6Vu0*.Q)/C57͞p_Z%U nڔfwӺGiIw/gۃa%8T[w٭O0`S Cge`'xC005Lefˬw_~47>܈i3<=;+zv=pfxnN/am-eފTzC>3hGٽ Dqç.LM-2VfS REiup@x`jj 4,JX*ruMٗf ܴ)e9RixZWnOsnlqd%nn3BSSLUeT´Tkn=Ͼ5!Miv/s̡J#2hUr~65ܭهֶDVV;# :^\ <05ȄZU]L%,LKK[]{nڔf2j4{[nU~tFݰ:z;B@z=]{20z}CA0ОSސh/?:j} P^ Nc>g#z*zm?LrTO37#y)$ʑH?yڐY$g^GԌ}).GTG_Re.䍭7atۤ?1KzΑwlB9(Yp>C? wc{ MO!29_֬|~"#(?( 0=Ck]GH5#v?;ߥ0ԗk>AHL_3p7q9JI$"tdaFzT77vH4D۔2gh4$ޑ>Ry mo 7iC9I쪏 yKl~ pcoIؼKcoYIz_q$VG*Xzmu0)#i@2Xı%=Ӏ=h$O26BH 1QT2&Q &$Wwf9bܹ@C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (=Tw]鶂mB +Ry̸}ZEv n%v4]O_LF&E[yc ,HѾF 0HEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEXo\ꫧvKFb[mvkk,5>SK$o%S"L1vōņcʚk`LbiUpH8$r@$Դ =VgRGTqn/]]jO[,>]5$4k=o>.k_}tcZ[z|]ֿƵ?@5?k=o>.k_}tcZ[z|]ֿ*+)I,lnT&Ƶ?G5 k_}tcZ[z|]ֿƵ?G5?k=o>.k_}tcZ[/m46絶Srp29 ~5]WRNپ֥\=C upJ7m!ni_acW٧ Đ6'PyC'o^!¥s2</d)IF?՚Z%d-Ϧ_5jHc\2 2V #RFr ?k_}uֿƵ?Rk=o>.k_}tcZ[z|]ֿƵ?@5?k=o>.m*^kFGۦ E]cZ[z|]5?k=o>.k_}tcZ[z|]ֿƵ?@5?k=o>.k_}t) Sj0 %t*ygbOROZTQ@W?O'UZ(((*#B.ƋP@Q@Q@UMGQMY$WIˆ2M!PH'$,HPHq\TMGX -F *`HTmS@˳UM^}v?ՊC[r3$oCdszc\fxE}-&`4QSKF)e)L?U; L?Ui| L?Ui| L?Ui| L?Ui| L?Ui| L?UA{q#X\i2 HS2Di|2ϔTXg_e)L?Ug_e)L?Ug_e)L?Ug_e)7\.5 B^flcǵT"$N)|k"}.i:en 4enC YrIV/O}'JOA?>/O}'J" ֤L1) O?,T_@L?Ui|8:>/O}'XZeĚNyI&f2a#<@U]5it#w2ϔT}_O*qu}_O*>SIQ`qu}_O*>SIQ`qu}_O*>SIQ`qu}_O*{> $8S'k qƺO?>/O}'Equ}_O*>SIQ`qu}_O*>SIQ`qu}_O*>SIQ`qu}_O*>SIQ`qu}_O*>SIQ`qu}_O*>SIQ`quWKbz22v+c#1z+JVaT=6V-i PwE*ʣx܀l@/M#kAi#$GVA#+66uvpHI%I,I$I$ $_ K@Q@Q@Q@WuqhEb ( (_xkYi{Pv D`7 kHh7P{V(.[/ ( +'VW:|w617:<gq*鴤2_ZI[\ijDH܌S=KM;0 )Q@Uw?O"( ( ( (?N[DZQ@W?O'UZ(((*#B.ƋP@Q@Q@ fi-;{a %<]c;782x^[ `!n@v$޴RŠseuaEī_]ol0Bw;FQwhA Oz3Ǹn~R$-bY}nFpGZ_"z+1Q@W\diB.b ( ( (3տLU@s~*Ե{ft %Ā1e#.x;XsKFO:}6]ls>0˓lkͰȃr~Jk.y崙MkF&)T\ lenln +' *E-tPEPEPE^A_OE( (*äӫBy[F] w@W6Zܲ=C%ܑVK%q8i0+N4@TQ@c=Xl( ѿ]C)^90eYc7Ph@ !Z\FŠ(a24 ȱEQ@Q@Q@wj&*РKcqiPCk"S $wQHEV>{]:}J;Hm^ g$o:)Up1+slV\4fy...UiR /vq fn5MMP"uj\Xqk3Vlְ*Ԓc-*3>cG,?~ޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c* +DeXDe½W%?G,?‹=_{YϤ`H? .gA~Q ?=_{YϤa\YZj'-a6z`8a`|Pvde8 UnUwG,?¢~ޯ?,?YϤa3}} c(A~Qvޯ?\YZ,֠ZJAcO ?We?>g>߱}} c('gA~Q ?=_{YϤcxK+Xu[;N?ʊZxb + < r؝z?ՂMIa$jdGޤA~T6֌~ޯ?,?YϤa3}} c(A~Qvޯ?,? {+A '$yc?vT+տ'A~Q ?oWG,?‹>g>߱}} c(oWG,?‹>g>߱}} c(oWG,?‹>g>߱}} c(oWʺ\iު¨ۻ (Q@syZ襠(((:4"hEQ@<6\\JCI*I<z jq !Arqcvv+2-oTeIC\-ܻ2tqyhX1|>t4td9XžB0FA45)t7M`,Zx #=sg7JeZ$yKEEOѿxAF?E= /r0y< }"Կ}"4 Rg/ 7?(-Kܿ7?(y< @/r0y< }"Կ}"{aqBM&$ RZ >?E?hE3?E?h_?+NJ1$1]Ȗβody0!ObM'$mmdtkKH#a>j(FJZxARi3?E? Rg/ 7?(-Kܿ7?(y< @/r2 s v75>?E%JWy?E?hM3?E?h_?oQZ?oV=ޗA " b3/3%U?1^Yۅc"guT xAF?EF/r0y< }"Կ}"w|?wq2(Ш*WOxAF?Ej_axAF?E3?E?h_?oQZ?oQxAFj_axAF?E3?E?h_U˛TȪVS| Ҥf},7Q0ȇFU>X6fmagkkC n'j(FO'b<RAEPEPEPUu\_t4X+?ismb PH$Xr.X0OK/Ef0 (+@zAr]XQAEPY>#LQ֒ݲ cc<n#dnJIe}KO̶fjzv`R!댟(E,QAEPEPEP~ڷ}( (O<5`_Q@Q@Q@U{]F]?( t@3e*hŴpdYUڑ0NiS}~ Uw?O"( ( ( (?N[DZQ@W?O'UZ(((*#B.ƋP@Q@:~胅_vVޭ%b Q@Q@c=Xl( (0u SI+`{^4GS'ZKXAEf0!댟(E,QAEPEPEP~ڷ}(oZb,Ξo$2,1bEkzIh45+-NbmmV7GOsЖ$rN-}qxr{}4OķZ +Ռ$IJI.9rliDe۪i,F *ِ Lt@/ h:j&}:E%`''$g٭af:U$ 'Z.Tg(|.,?YϤ;_{YϤ`H? .gA~Q ?=_{YϤ`H? .gA~Q ?=_{YϤ`H? .gA~TVapk "084&˅zKy?,?YϤd{z`H? *gL0@-UV*pptLzhYe)kjWq dSO ?rmݰU`H? >g>߱gA~Q ?=_{YϤ`H? .gA~Q ?=_{ Y@#cERV}} c(A~QvOa ?E{z`H? >g>߱]a ?E{z`H? ŽM=+k² =!`6u3߰YϤ`H? z`H? +XvEPVȟG,?‹}_{YϤ`H? .gA~Q ?=_{YϤ`H? .gA~Q ?=_{YϤ`H? .gA~Q ?=_{*qWzF. ~*Ҥfn(AEI熿k: ( ( (  Ћ4y9 s(eђ,9*HRtߗLޢQ@Q@^}v?Պ Š ( (_A1Ρi}?ۭK4H7@5pfuoż,2x䍃+w*a24 ȱEQ@Q@Q@wj&*Р(<RAEPEPEPUu\_t4X..%H $Q@$dV A'Pv%R$;lO$ƥb ]M+1Q@Q@c=Xl( ( (?:+qt@?.m{Wc] cFiWo~AUB0?Vhb ( ( (3տLU@Su[%-8v$Uu$N&#-#M;I.JCmm%Č2#Vm* crFnA<7V\[J6 dGhJ $_ K@Q@Q@Q@WuqhEb0|G-[z}V0\Vi-"Vc ( (+@zAr]XQAEPEPM:A/Kv-O݁>͐gzOaW\diYHoE( (((ӿV1V< CM]I  spbJ`wGsa]KKf W ^{A`<X\s93ݏ %pL<f'}y< }"ڗ?oQxAFj_axAF?E3?E?h_?oQZ?oQxAFj_axAP^ٰ !|@fbs-_}"4"Կ-=N[xa I%4I p*H8*dxAWRC}"j_axAF?E3?E?h_?oQZ?oQxAFj_dwZAN11oj}4*J 7?(ЛRg/ 7?(-Kܿ7?(y< @/r0y< }"Կ}"4 Rg/*j3eŌF2`I7#T8##F'JveC,QH ( ( (?N[DZQ@W?O'UZ(((*#B.ƅtg?p5c>g?p4}~haW_G?Ƌ0>g?p4}~haW_G?Ƌ0>g?p4}~haW_./mkR.!e$A§}fTU_o?>g?p4Y*+}~h}f¯򿹇?Əa*+}~h}f¯򿹇?Əa*+}~h}f¯򿹘^!O"0meY2z*[!# 15T;DN n)*js?uDo?>g?p5>¯򿹇?Əa*+}~h}f¯򿹇?Əa*+}~h}f¯򿹇?Əa*+}~h}f¯򿹕t[Uuu7kSsiR3ifP#Rd.g{{HA̮ 9ʐWi sE?4jfie@CI,#\.lIy I熿k: ( ( (  Ћ'AO5mlWBXxt8ٳs[եOݴQY((( ??P\_VP@Q@Q@Q@7V[D*92<Gj[ ^[5bʬ&v'hZ'b;u_PO:*+2B((( ;?o_hPEP\?xkV)h ( ( (?_IeŶb/PZ=UyvQ*&8ۚ6Vnmcimmn'j(FO':-R ( (+@zAr]XQAEPEPEj&=3ƺnV+wA8eh ®ZTrZT9Ҟ_xY(((ӿV1VPEI熿k: ( ( ( eƫ^KKkn{  MiOKRS$(((seuaEQ@Q@VfC)ky2ې Ԁ{jV*x{QUm.U8 <,9 G5D,D PEPEP~ڷ}(2-hX-ޥxPHֆ0I N[ B,o8d!|J C+)VTA I熿k: ( ( (35Fm;Lch󸷳*7 X˾9{QᶱvI/+`w YrIZm/OF!EPEPEP{V(.[/ ( (((a24 ɋ%1Km^%36 ?D2 wJŠ((ӿV1VPuE|C[!}*yn;*H5KJ{GAO9$sωeu^0T| we@ R^[KԴh6u['211K{f/UPT\WĿ/?tlߓлW 6^x?/K_޿6^x?y='@/z y='e.e.4 W 6^x?/K_޿¶KcĒyеZ$<A1`AΤV] BWl I4MZ='y='e.ЛW 6^x?/K_޿6^x?y='@/z y='e.e.4 W 6^x?/K_޿6^x?y='@/z" s4$v7U>?]'JG?]/?thM+?]/?th_/?tlߓѠ^lߓѲ{~OFz_A{~OF?]+?]/?th_/?u;N1kFAҾϯ_/BjkUuv,F%zKV-4I&9 !n:UbW2/J?oe.z_A{~OF?]+?]/?th_/?tlߓѠ^lߓѲ{~OFz_A{~OF?]+tU2}rUp?&_@-'MmT/WBl3jI熿k: ( ( (oQ+EG[ke,y #v͠ET4`Xt2wHSI/+ugr˱%$]FvU?($(((seuaEQ@Q@Uw?O"+/mx$c fEdTNI&@͛Vc ( ( (?N[DZQ@W?O'UZ(((tojs-p>ϕ'^c[$d`gH蜾_ ު/f)hEQ@Q@Q@c=Xl( ( ( ҄\7"Tu[t$ȌdeS8N/+:ڎQ/soyf^'!LQ:s\iQREPEP~ڷ}( (O<5`_Q@Q@Q@^CK2 0ۇG*|ȧ*@09Z!$$qơU ;V)|먉*#YJ,QAEPEPEP{V(.[/ ( (((a24 ȱE:HI(ׁEKy`ݜ|Zޭ%R}, Q@Q@_kb ( }Z 46]\L˹v nXj?5ׁ|=qq,O.lI#gcIg?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ Aq{hZu )'??Ƌ2B0}?̟aW_G?Ƌ0>g?p4}~haW_G?Ƌ0>g?p4}~haW_G?Ƌ0>g?p58')2Bק??Əd G=ƛuo%֒*9Y]H#ehVwS跗+uē@W$<c$؜⛋_?'B/6~g?p4}~j,*+}~h}f¯򿹇?Əa*+}~h}f¯򿹇?Əa*+WK%^7WSve91V#6vaE0|%]_޳jPt.sTr*j(; š;ZN+YG%ipvp8خO<5`_Q@Q@V _PqIH6qry&GwW;6#6ZVc  ЋPEPEPEW_i]b((*F'JpP@VfMvXEZx$b@e 8]El ^[@2d n8u ڭҒm0 )Q@Q@wj&*Р(<RAEPEP.<څ #ub+vr6ˑR ͐Bւmm㷷"$ qUE8դaUu\_t4X((( ??P\_VP@Q@Q@Q@W\diB.b (Q.\yQG\(`$-,NGIꔾ_paEPEg蘫B ( $_ K@Q@U KR}"6YlkqfeVǙGI~v{Zl¨U D:4"hEQ@Q@Q@c=Xl( ( ( ҄\7"PX6_Mʚt RS-tU\m4QVc ( (?N[DZQ@zZlwSHS5pY p,W*MSh|tsw21I#݁k.GPsyZ襠(j_b/d[ۻ3`r762 ̪ƛ͞y~qqrWng 5ڹ8$33i_Q@WuqhEb ( ( (+@zAr]XQAEPEPE]#qoE( (n䷸%T)$r(eu#x 'mP0O6q-#218Xec$$pɵW5_( ;?o_hPEs~%~\AWH^3}:1+#<<gM&IPIV_=w:͸ʼn KJYmAi);vRr~cD<8ugo"eJ80?tTdo_O&K?)ӹ~?ȿK?)i?.?ȿK?)Ev^EǚK5#!dpr ๞-PEjD6/4Ros0 2pcw4.g{ N)[~?fgS57/4}_O&/5apMLpB`١2R<__O&K?)r=~?fgS4\=~?fgS4\=~?fgS4\=~?fgS4\=~?fgS4\=~?fgS4\=~?Aqo e ٩/|EʕH{fgS4\i_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥j͓29O(P ~ޤfgS4\i_٥h4?Mi_٥h4?Mi_ϧy-.$Pȑ+X:Ύy ܼX.e#sRi'R7*؁Eռw*HWR2!pAOK?)oM/4}_O&/4}_O&/ʺZU?ZTۻ (Q@syZ襠( {&=YnOkp %!eY[kkȓ8If'%IbI$I&:OEf0 (/,QAEPEPEP{V(.[/ ( (((a24 ȱEQ@=q%ޏKyq0ǘ,nrXY;SmkWr:KE$mp2p@ ֒2Ef03տLU@Q@syZ襠şpq%nnc@@K1T!ީlGBc7"7`{-_Š(*#B.ƋP@Q@Q@Q@^}v?Պ Š ( ( (!댟(E,QAEPE\-W7V7ʛ@W'V$-w1\K ښƱcq/\.~-"B\le}iZ%ݍVgdH 8S5B6Dihׁ@9i]gŪ%5 MNMVe?<`x*@ @5X..aE 9{ ={Wvik<1#Y$] b$͛i&K$ diyq\ǖ!QFqI$K_Ү u'v@ FsW/imLF1跎p = L?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{jm"-*Iab vy$/T9$4i&_i >&Z_"4eϮ+3@&Z_"4eϮ+3@&Z_"4eϮ+3@&Z_"4eϮ+3@&Z_"4eϮ+3@&Z_"4eϮ+3@nm%͊:3UhAN`O@j&Z_"4't-/}u^?2\K]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{hK]sWfm ju#A+,gD4y yY ddfZK]sWfL?E{h$?2\-/}u^?2\-/}u^?2\-/}u^?2\-/}u^?2\-/}u^?2\-/}u^&qm`RBȤC /cVP>6u-" ;"[yͱ9cR̟(t!+sKalw䐂H]ff 0(gZg''inv2qg4EPEPEPYOI󼟷ZKmݳz݌9EhQ@Q@Q@Q@&nX<y@Q@Q@Q@gͦy!ռ}{o+o^ݜ';c ( ( ( (?N>}\gۏ/Y{t( (9[cHU I9Gcgyawݬ4 H8a~b(((ngDWx ʬHRGP V}(z66h)[ELrɜ/$wr ( ( (n.%"BI#TP2I'4_Mմfݮ4Br%*8%I7Vuv K4,$g{EPEPEP{=2K--cFI?k>W0y~^7on9LPcgyawݬ4 H8a~b ( ( (n.%"BI#TP2I'4_Rմn5MBp%8'ƮPEP??U C.|*-n$\tFzE}ğ,o8 !{.GQ@Q@Q@W':㍤I4'$nw U@.׏]4La̓OuY6s( ( ( uco} ņU۽~#`9aʂ8}W:S!KԵ .1K"!SF\t?l|*Ǚmw2Lg4Q@Q@Q@O7gd#cIQ ( ( ( xAִoZOceyXMt- ^Cb6V w6Fi}눥E`Yn =08#l^'>_C/HKQGeUUP: ()Zl:#I A BA  `Tc4|^{ɰ&H;WUUU¨%73EPEPEPTaY-u$m HGelt.Im9OJSʫ1T;v؛w( ( ( Q - T CcAͮjʹt!T241 * EIo+†52A(4EPH2\@Ԣ ( ( (/U- ErV ձFGݟw>ьy۱q>M>Zi)`Mws̐.vʪPKnf'B ( ( (z_iw "{o%$dC@-_\-ݵޛxF62F !H$FW-07,lm8mcL $K31f$XI$I PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPengauge-digitizer-5.2/samples/normdist.png000077500000000000000000001534231222557406400210160ustar00rootroot00000000000000PNG  IHDRbKGD pHYs  ~ IDATxٓd}YYU==`#HA&$iGВio~qHG_`8b`VblZ$DfL/v.gdfWL51=]ٷry=3#D"w D"Q0"H$򁈂D"DH$| `D"H#D"(H$@\(l!ic\nu]xi1<'H$y\(D AfڶMDJu]|>O$jF$<7C2s,I!v8}Zvvv}$Ixfx|vviQMy\.$>'D"4 y=L&k)e|4M&@u] C}D"usF4/E!֭[ SBfN;;;iZkRi}H$>:1ZZfj4>gggO qw:N"F榵 1~C0`FyFhb1 8 gu`4}qӴo6ᝇ٪ h=<tez– ᧲W~l>zv>x"aC MR] dҶ1&cPux:nWAcvvv$f'~ݪ9EQV"AĐ bd4y$]kӳtX:w*ƫL'YɁɈp:b:?k|_u|Nj9kݜտWͽTxٻo~GoM&޽+FBNNN&I]a$iRrggg<߹s'X87"8 a.S @p@>׾xeƟᨳ>WC!IWI+򫮗4в vݿ׭n dO<4?h՛>2pu|k.ޥkkp_+ KO}?_D{Cy?$afwu]e1&dwcjs1Le .t",Gp|H#`  ` J)02X _%ǣK@y.L |wri3ѣ)XxT͝}}Ɠ䤟L@fѨ4\!Wsq~!I!{W Ʋq !fC z:ccLX:4MA?+βlZy4-4ʲ.Day,smc戼 -VX+! R@Q`(I2#Ţ;~{oo<=ubx}?^YL(XAz^r{Sܛ;7>&@jLf=J1COz%.(޵r```@Jay: ^ 2XʙJ<hoOO?\,FU/ {{7dwn 9/wnyAw,0x˛:0?$bca,BףQ0iz||< B C2". Ye3E:|@uιjuu[b0TU`>V-F|wJ%g"KA%z*2pp9׷\\'o߽k_~&@BH@n֍[^$ʡB`;Asw!AdVi=#fN&IH.ą,Ko\f($x}<>Ecz00ƄIcEeo s~,T*6)s۶O)GuM|f۫* @)MGaƍ_DR5ȅ- H3JTL;IQo,Hx J ۍ xF)!Ȳ( GGG?h49QxBmyPJd>ZmFGaik U:! HXdXk/$;k4I"m&FKxt- rb5 4<Ġ,@6I8B!p;G2[dz?1iYKuP $`'`9Prַc, i!!O?rU3"HI4Vb,4o->,f/B$db;9tepO~5THUӆH2#rUBm4)PyVo[89 gI3nپsCQA&ODjvг-^-&ȥ& F9Ɵ8˲` -0^6UɵPvȚQf%`@ExD{D+y$#(.`v{{{BJѬFUD#~~<;w rE z[/, u>Wќ , T9XzkϦOv~ ^OG%>rɉ8"%DRV5@V].&0!}oLH:AQ{,ϛ` 1Ⱦ?-L9| {RX,>k= A&$!ϾwWQ%td//YRs4(+o?lF\f`Dλo>PxO~_m %aeY)ќ 03Meʰ]L/L>~ a!ҶÈ\fI*\Q7"% n ^eźu %{n `8(څPm/2-Cُ ) lw|_@1Kg\"R?Ey+V|D99a|!M#CI̦=phj`vh&Cc2&ݭ*x A]w@ F«`j6oL&"ῑem1&@q@sp@\Ɲe2k}L_J)tyy&Z !sx۶zy:p|&CX z0(cXm)sa? \ bBiGGG{{{eYZk9"btu]MdynˬleUVhU 4=GEC co}o$`03 1_zgcF9H% [vxu8$}1$ 8P?bW$ i<-:i)D&@ t72I rק3J8 :`hT+X G;g/Z1t鋭wSK%t:L&JlvuƘjffP{St]'޷mV'LH,xa^d]AǙ@02$p4o=gL$9(Q@埃 sOd iY%+o5 ^z}A$օV$ BMǟ `##1 =(ARAdl=9ٟL,X|}w5=%)pбC@ "A !i4M PAx<FNNN0S3/WuUV`&&* ,_ .̏ H@{'0mD@GpϰH`)c0DY;`R%,c>7;c BYm´M}n/b"ֱy3Wx/ zV}k?7{^udj :`x%A:` cc}>3gIgy}+}_r`G7f^V!boo9Qڠ%ɤ<σ8;;L&ڶUtڦITiZF)( @c=( [ fH$w1|PtN8)DŪLꅽ_7yɎgYֵ,QGGo M KMk/ AnMR # qbcfw WU{p6eoҥ?2 lt҇ ) A,%`F~ 8ϽinYC4aIu޻wZpI)O$h,ˌ1T$$<3YǞY/a98sgk0g W=tϲIIaJ)<L ٝ3dG)|eqn.9 b1T:!l^vJ϶*KT`xBg1^I -$B0'лAzxzd]5;1kp>9U2Ksۃ\ߟ,C$_-ĀM ,z9|'9B[_LV/rA,!,C- =`dpIPϻx+&??,R|[?DIBZ;纮yf]Y-xZyOS},i>88g>#n{"꽫j|p/8,ˤs N>2d1 O>gW0M1l9v"t||8?#Ϡgf$)ddOo`/Am<@Hc#o\| Nh+[0~/.bXT8=V5hBZ} pG6 _&?g G8<$e-,GGG!}/X(Dy凜Bmc S4+\.kU)k!)DCM5 N"(M2(n~<=dzʵ鴪*fVJI)ONN, )e,{!?] >x*2MҮΦ}\&ϔ jYAD\*g #NOO0spT﫪 ޽ ιС/=|8::u=;N,Q^a8JsgګQ&˷^{GS^_F燇0y?kgVo ( IDATVׯ_Rc Kh<6[Ti0L@:3ݳCd ̹XẂNt&z6?K2@ ok'G3$bjy\x>%I,Ku]Mt]eYQ۶/r4Ƅ<ϻ Kh|heTo駬y0VM߃U `421G1lg, *}#& !/,5lyCeZ됢` "/P|aJۡg|-S@uf*VAd/BNW| ]Ps*TMHg!X#k0}3XlI/|?<R1~,WgG$<óufK\Ŵȇ$ F@JI EPg::v}g#C1ߙb a ~`xՎQqϞȥFʯ)o cm= { {!NL L6d0ج0%ىgOr0=]zE@h tM|Lt~%$?!I1瀉0D\j McA3p_1zX5KeT-&cXC 9ۊ(^q `JŅ!N$ iڶRj#~۶% 3ŷLȻQ8Ҁ`&@/,ͮqu>M.ϋ 71WM-Xnk @(hˢJFT0h4 gggDJ,s|5u]33u]7Ͳ,Z[ku,Gy7Ͷ6N<Zj0\Xpxx(Zix]˥>~{$IY"!P0fYpc1bh&@L}tt 8-ƒ(F%%7sCNRJ;Gw] % }5X س]/SNN>`B|n& Sӏך]DƅQ%lfY.`l/rooO)Ur:*s..yo욶HA{4cQyozUEylAp[ BUhxO1ю+ȇ«+ eYQUUJa5ƌF#!D]Ddf| EQ)"9vQm<+ޡ]ڟIJ"<,-?xM.A0:fή8:ysX};; #xXb };犢QO9km`z "Z{>DI$YUS.W ( %Ow/tꚎ/eXAM() ^JӶBg³$ǿDJsJnKT(2`MQn:1wXס{a.r[JW~cUV`I( =ĴYWQ(lz)K /:.{lkk}2Z0vi\H0ȂX?E L+!dFl4ށaw ]LJN mI=u{$ =䍡s}n`0h62M;BB !-#IBJ\L7Ißdg4$Y6:ϯe OB*( 8L"C{)ˈoa 5 HBj`$^ 'yR Lƒx@U=%_>.5t2(@#ɫ~9@ zԵOnV=&ś}UEAp4*iN>$ 0A-3([wus?J4zuE#)ɳBV{A1 b)xYL&<ϻ%9n۶<^I5HҁNz< 'u$]xH H,A9G 8@$H X̻9q) ᜔>z bya{-d2(YiI)Ʊ[%nH=b+:l3o]Ch@%nޥvXp P& NJɀlRH5 O9V0RI~X.UUp<f+M]wՠl:J);H<`Xb ~ $bhE0ݼ,u XҠTm' b` nOǓ"7o;|)(A=+cU"^Oi2:D !#~+` |Un5cyo@N2_><ɃP \}qxn*x/zod/ v:G )8zXᅂu`0,Ks:783p(<::>I@gr4*"bs3EZMc&YZuN2Iq$Z -QHM%ݥ9! ,C9)V"/>]IZA_;/+Dp@4F$VlCM Ŷ3U$r(1v@X.Vy&@fX ^qZvR0Wo??'[⊓$j:/jo?ڙnٞ[X"rx6D*Jpum mO޺5_ly.b'`̦vgGxB`P$/ \P-qLJ"T1 ȪMW9=L6|T2K&/Ə>,kW 乎88DM<'"O`'50̥瘝Ս"C@hgwjfD"C<3"O%T$$!KF ,W9b3rĽ XW giY)?Ӽ% 㑏( gV ;ڮ#y@yx{^ oWϯ/&~2 v`D* !w7a} 8X׻SgPPuUN{Q-"BWsڮ]_u]-@xfuUV gz;KΊp;cs9L&bR3%{:#\0DlF?4Zct~hcrzn&PVU0ږAdYN\[k899ֆsT0 "RvZ*uKY.T=9-lź:O r~b2->*+E UcN7qX.Ƙiܹ$}"٩D$!,|^1&IG1AռW[Oy."K?ÆaL&~NNNJ)ub apV9>aX-ө OM Qg3po(l9g6}$v=>>l6T)lSI$7|>1&0cfjlUtEN !ǏΏol[Ū7=(lH*AAGDA"C'bd h/_:`):3"Q6ia$㋝Ab1GvcZSO@ D(而;GG̏A!n\SNk@{eA.Jmoh} "藬ϩ"J3@ 3+NV G9~њF@@gU8Q yyG̴fYuZkk,{kёs޻{l6yeuǏ?>>vlۮ'q 4*cTU'+vA}ve/ &IfpԴhA{7/,WڄP .  pi3ZSҮ\׺%(n??R8qhiD+pi7.~/wzFz|XOD" ΊVGЊ3p/3!./MCTV?SrW*v&Pu CVb5f0̌-i&/XO;k š{ڵ$˲hPJ٪b<׾cLN$KbZ냃ca>x yVM]?xrr}<̳>;0*:C&\zi)V>yS-yz= ev#T8_0onetLIMzze$}W" BRLIQUX"~#4uxy1 <<@,B|·[:,鋾~ QħU;2%Px" %.N2{ݔV`m[fOӦiB߫]=|ݻ)>41"uVқwo_k fsh$:K@dS1 ;D &ιC70=<ַw;D> IDATFkˢrQ=:]ONo]=/"xﳢ@;ajrmTf0'd(uYm ,&(' J0ĜxGm@VW{W~\^| iL`ҡ"s0ޟ%;j/n̽wcft (T24f3`\eyvvo&ݻwVjL%U($oZzV*˶ͺLWBȋ"۾ou_wI#&9٩}rLI{3`ϸ/0/\X-s"0߲[뽶0 Ou l6mU\\?w1 1%ψs& K8NHݼtJׂPo?6y]K8z!vBjKM&b_yәEƶy۠Њ?o-If%`\Eq||a۶JDnkm4c ! Ðje<)eV2+نLgDh9 \|K^"V(;TOk `J`DyaAQъKxBmq<]úqum7ypNa:mln,"UV\-p~R2rél>_ڎhV [D/MH]rYaIX}Rd!DȀ9@e/nżIZ})\1vB1V{޶ۢ('fڡWvb€W(A@TKKrTD蝈lXo(w9 A3!<ݺ2sq}T^nI]tV+g˴}}!Fq|-Mg|j&0"QDM41P+@#x&{lĆ4H6lEc@x5Q~b(gIldղ9CeHw2ZR)q/Yf}9c2 iz5ҁȘcs} iG3A ƫvЁ<dYCN=96L*?PezQ/WDzQ *2)ڻZ ꮀ E{RR8Hm}WI  *?i6WUO 8\ji Q|P *"RTY*#` m^!qQSQD e }O9dw$fs"ݾ}SUU]׍_;"BCBfn0њi#dx0Zggp8Ǧ&4>BUۋ`<] ̻rHy<F4m۾;!}7qΝT8$|>B8Jsyg `AQMQ7zl+ Lhc4F386M7 f)$0}>\7qy=yގ ;0dY6Nv߻w{9pQs9Ǐ*cI!Oޟ88Ȟw;UG|HY1Ea M3<ȫ͵8=aI?-1L0 Tezz h@7,(7ʐ,WOG~,"/!pp`޺-mCEBn/QO }*5B(D]KLrBDR[F{kĥm.&U4oN38mrmJ (NϺ_( 2#}Y`.%ތF\S+$ʲtݹs뎟ωy%P^кdR;=v\$bbǷrQ<~t~|5L'z#N\ ɏe-qq͑Whm+ޡNSDVYӟ p0XQio ߖ*ϳו  8DK ƫ8uG>.&?h Zq{&/Λ_NJC=@N3^^{c1lwmlN,ηl6lhZr?v 톮mvaڵF^yF10"۶!ͦ}k(:GUSUq)y \så#$-WQ`|<('wͺBlƺJTn!wt]Gj؛8{G>҆-Q=-n==c2MڌC^6E1/w䣱ެQTQDScy!_VW}GQKW,Sx m)VBQu¹8.,7 AŘO?Q0n`((.t0&ʌccl[V7I]>D7-D(l,\ml%W|,Ry1PW%<\,"=fPBڰZj|Z4_I?3_qF1D+n!p0ʟ|S,My:zfq8btg?ȝ[G{bUW|,O|Y:.zTiﲰFq8mry…/*=N}T:X7v6%LJZ|K&)j}=o胷*JP/׶ߧ{tWQ`|\R~`:aZ͝;N=o!Af\tRA9z:0 ȋ:@:%U74WMB+]E8zc_>ͽG^]rLt10 [ab{zgyiӇ,0XvH,%ZQN$i2"V;o<,ߩ״އH#1ZdQ\+0Df] ÐZ!k}4N>|hi6˲&h溓B!vJc-狥\ qڠFs[:F*Ϟ<(cZcy"2N֏?fE/YD|tpZiWn|o{?PP~@L6 YN*.y|5",-jhzV`(7 eXkΔRnދkY}{߫L&ם`RMHկ3 jH"*pO%{oTFLJױ s~&m厼X, cLι|>OΌ1޹s'}|RP2=1,U&}FiqCA -f+1gRKXPa\+0Ercܾ};ƸZۭv\Zk1gggZkѣGI}HWH_gOXoSSk.%i1ZnK jAwި?'_&[6 M8}vAO6b[ fv y4M0ܾ}Z˲Z L&aF g6{AQMQg8.55յ-؂,(\j[\+0R(T]"2L6Rj˲lmۺ,3l6<ϝs!b;j8[kZom/#o7NWůVt$ RBF]lJƨ\[>˲=oOzcBk]wzظPo;y6( 㘻Qnhk[e Ͷݯ CP&ByĎxz"6Ŵ)_NUqZ(Vxc4S!/\r}Mʡi|{?f9QBT7 ' FEQ YRݠV_<7>7N|4mRB0hG;0W˳^ly(g?(;wq[}M@7H|Šopa@6Ы?|+;3d‘f_Y}jv{_Wd_!v^ï DDPBL;i Ѷҗқx g[>"6J1tzeYeYhINEQ~vuy7ND,|l3Aih4K[4Z㈸aP1hdG$IAedn)Ň1"I1 WB^,\?y[we|Ui]uܮ T@ӈ CoUY_M (79]SkuYXDQTg7֪Na|+ jCu:͠u=wg'0-V4JD^4 mR9kqzxX i뎎wrvp8m{/Fo"nP1LG>HKuR<"hzC^'Ҵ#XETk- trzVU9n1S;GBzI1cݎF %"Gib՛nu]""OmZ $룍_(ɻO%uYA4)%bDJ:O} 8]|3_B 0,}%5Y!qkFuiZ?==I*٦"E&3f)˲tj2[gC1YU)6VE"*􀵻(Ϲ:"QT/*PHdVvp?QE @XrɜGm<1rZgl7({_T|z+0T4̶dm'yfBRyR#Nn'`R)}P4<O@X4 (`5B7D1(Uvb) 3cO ږE[{1Q|A"J|2cvn R(e !{UUyv\9WdR] G;x-Sm]/μ*hzTP DJ[d !vFc?$Hԕۓ?taZ1I|}g?)2Hhۨm=,{ M@0FWo =[`7% `sc}5Fn`\|dlZ|ί_YfQA]tE;/PdAB ְeȨa|RQJC ȏ(ȏ1ION)x5^$-׽`󧙟*d1$q=ei^Ƒ =hKjif@l#k 3Įި,S(9_йM%`3i:lU.wS L㆘D5MTRc b\##?dDj[2Çkp'՞&ޝer7Senf5 ^Z$Ռݴn M(Y"_/=8zºȀ}D|Kfz׺rSץ1gޞ^VGn y}n")da6cb J!0L+\$л @eιVvK5iB*qgGča0Fꐈ@:H1]>k!Osoq7톾`dT#>?S@F1 vɌ7-1ӺʑQ !L&9KՏ/,|5e"?;_~R=xxte"4|_ ynq&qrrb !8Dd6=xejj6u^VZ[\VJFnl{">^=ܲktMkL$xV3nT DA%sQd7kr44MszCq^߻w/ uQeY(2(. j}Dݷ苑rfdG`4әiPl֢p]Ik \ROﺮBk]׵L&TU5 CUUl۾71&G`՜ IDATczT2ne"n6lꛋpIP$fzjfǓ/1r#UUlڶ"_eeI0ܺu 1ߎ G#u%hj{(C8D&`ĤӼF8~n ũi|繈ܻwO)zϲyg7L*f_'{@0y'GŅIDܾ}{/"1f[o)U8)'%F>Q.h-E]rq{8roT[h˽RQg}aLq\cxL Wvr`\أnBHUakJM3響y9![&G}D-4bQ$zZSi)!0j; Q{!xZ"%^ɭ\.oݺB8;;c5C }SB|Ql $עHDvGEh֠|,u |aѭsv[ XP }i4 (k( Ѫ|=Gc(!5ѯY lE0E_| 쟿ys=zNa꒝MS 1Y#=NDB_(3-k#;vw;rZ{tt{߿\ɇ! BLR:N5]/zb,f@>xIfpŴhA{7RV%tx*@ܷٓ8(iM鳞:Dr Z52!d&( @sv>rKwS j=SVJ &@[՘>23]Қ86Ec=e_^ .^]KRԓhPJ>Б)|Zoxg}#v`U@u6zž"OҳMMA,G1^/| Q)Dd/h*N*Bg%EUa!d}`Ҭԯޭ9-&vvG~6 ^iR"jħcsQ!!@6N2yۋ&nYRb$mEli䟈ņZi+RgE/λ6~V`mf:GF*^MP8 m}D`2L.1tÃo}o>3A٬ǏWE @JEe ӂ2=!CĄjd/4@=s"Jl3|rpo3GĆٜ!:|K)v 1I:6{ʗī!>E㻕3w}u\+0R)Jj6r:^lZzV*˶ͺLWBȋ"۾ou1F^INxvEߺ\)kR)̀5?&LRW?mJJy"BЊBjKM&b_EƶyrY۠ЊUyk1\.8>>fYè `6Ok\ J!b_Ъe7}JNX[SE''ʇ" 8>\[~[N}a^1 e ͖OV0@n8gK &DŽ"[b'bуsVt5a]gv=qg~7+L2TU҃WQ9 P,~(2`5t1e.|YsaV}HҢ^~ԋ¶E97CoLm2 B z@\-OJDމʆJQRe3S)m0J%ncACȍ"@ZT. cFwASmV Z=yQӌdU*rdAc2 ZX!b"' vo2}& 'b|4OwqDgt E^ut=􈲮gkP""J %͕HW?,ATeRFCJ#vfIKBMY@bDZo?X.~{0!&6ĀT6@@+E@倠2 f|1JD@("2odzTwΥwfޏ=JBDʲwߝf0X[|HDHC|rv)*ȭg m7Z7"l,T|T.Ka޸l{DSȑDimyB0 Ifܾ}[ksl^]D!1Ƌf|#/c2kj0D8$r~~6ۖ~Y͘NKXӀ d"}dnݺ|z9 +5 Ce4MzAz3 @*oR4ax1r8~_b䣳vI}~8GUC.Q(k\Px|"C&3Y lNj܂,~qzz*" 1橚R֭[)-BH /X9p0!&5G)4Ãs+Y|g:vƠ-mwn4ej7kFRa]/(mSIgi&=#pG^ GlfC*B_OG\7@QD0΅}ߤg32#a8Ro<9w'u<8'0!EqrrZ.tZE)o::mqT/^> /`a[UAX'J\ԑU)eEhoC!OŐ`Z3 f,Cz9Z;o.EԖe霻sNSɲ,&϶Rj^Zkme@4ם'³*ArN ]|f߄9W3F>$Mgɧpy#;Rl"2ٛ.MB]ȇ!ʀP6d9lc(gi;Z Ƀ6 TqOuDf듆F4&1eax̪b%RLjES@Ya𰱽/1 6 y!0 ")jHj)w7{*++t3yq_D]Y]Uxx{u' o5;2S>΂YoBB #y(IuIHawg7FacXc(0a|;cޟ"^UHn4㮸`t3 RW71bc[P >YY &qr0ty3Ea 덿{ۮW$OJćr}CD;r/;G6qc֤J 0-O]Yk8]^O᝺=+fB2ҶP;j#+Pic1e NqGEǤ (>uG޿i6. /1egѱjRu{ƿǃx6-nBR#QַO̟=O=/yx=^z>8uɤ=(D9C"$yfH#6Km_EQNOu dLH )Dߟ=>r5f+EiMypX8ɉն8%F>9 Zjyf*ٌfqux9O$4 w6>4L&Y6ckWuQ̮tG^-wvF+\ֳ{0c#W(0^vĭK׫#(Ko_'%vvs.8)1 }\ڌ%)a[`\^n"ɴ S Bېp1u{{ZaŨ8Gfk-2 .7K)z34gZ b,k[岞NS/` PT f5@" ђHQgʘ))z__U S)(! `P  (e(:uO'g:Q]p+J*6&1Db&6dB*LAL $tHO8ϒBks.=Zu]+&W Pyj2q}ӑ+8k>QF%Ly8т෥Q Q{&r#@ CnxG~06`cb@i"A'E -N_y? vpiZMVTHD\BAԘn|9D.BCJII޻+! DJ)cuk]u]7MSey{#9WH)UUMD|D+zGٸ%{*^ DtJ%JK7{f;Y0S53[WE@; F×s20cDV~#~m߷*V '4d*ČA+[1R$YVk=H`X줔1I`N'''fsڵAj5ρj5%Z'ӚVXe9AVXVECJS`oB` WuNJo1aǵZP,B֕1L6*xG>!eLb=UaVA{}Js.`\'!DJ z.,0"^E088?iᜫge5M7,;3IMGYB/{BB&@v>&VKP`c [""ꚙfmJewUHD&Y.JҏAjOǀq>VJMWDzEʩA @!5c Kw7&9>U׊'SԵƦȸ4r(D&+FJr9N7FQ)n&˲fSU|>N_ 9˻CI3!([h7>Z|m}?:uŢꝷ'k&ewA>#橑C)wvRukd oD%Te!#c #f?_ٿY~K279mN,ˢu6TiXa2H\Z}EB)fN1<}8Jٟܮ o8C l FYOl_~/eC7K,g-,%AgƆF}=/1)̠Gh'Z8O!+$SFf4~WN7Y77s/-eZ4\|RJW8mcދ9|O)m6`2VUQ]m6l9uW(UuLVɄ5T݆A'L7 <4߽Ʒ{>a%VjT/ d2ޯV+1Z몪tk-˲m[G핒ά6m8PL'#Wjn(Q͉SOцI1}չ޷mkY."Rs3أV׶#W? 2}MwX,cUV'ǭf;2bmvyHb26[롦*gl 6oʸE`ʲl>H]-Ԡ\8z@'tf|UgZb榬T߃wy( j},zZ~::>>l6y}f.5re$ӯ?NNB(`38?ڶ= y\7enٙrovrk o6M[U˲\,hpjCXصm.#Q|gN/nhJiz޻7?rZګ>Wg1I U@NfTMׯ__,CT=esK!RDBUH18\qntfi[)3"}Hj&NF,1Fk}2;tPJ %a@!"*")⛰8L5?mۋ6"$q02#z'$553 B/HMiLw<,o#AgJ*#Wh|H&*bL !JpCF6=c2Ag !"9{ӷ߿o Jntz_1cӋD"DE ZPUY@>Z[_|_i&ef%-a*Fʁ$!b@E2_ÿu_|S2N֫e/  Yv4Liٹq@Qր$2tB",HġOQIeVc$2 .n6''ZtjHwPB׹ƿ]v8 0ކ#k;D߱Z Jvko԰/Q`P<Բ уس3 wpfyaIc r׮|h9G(0^4Ѯ  QUo~_C`,{<Ӕ`sv-{/ q|:nٯgq}d}8 κ YԸ}Ah{ߑKFs'fMY2@GƨC)uzz m;LjXܻwN!$uYe.KSYfkKao#@ӯ-?p##/!b v ) g#V/YΑYLR;;;Y-KN"bq}pppxxcZVM9YZ2͆Y]]VVK:cXEptn]ٶ|b5saX,Ύs7H)5MRɲ,?|˧*L\L*^І BUy+NQqp!5> 8m!KՎcc6u=x2DJi>pμƌ/przbHVyӿqrB &?\k @m>x##/Cxlh>嬞l?{A³,m eYuyv:.ln(dks[BiATxBHqO4DIZRWI=VA1ͦmK- uǛ環B"@X5RhH Ilǒf4ZHCS$bӚѓkVRd:@h6:U?bBN7I?15!,,4$ mBfaކF(1Z }J8˲Zf3\Yrq:tAPz)VmHj[2R4g>uhO Gԟ{6%hZT!y="YE%!-^+FyOR:"0hwT$OCp XdHW=efZ\g6Qj7Qq}wrKGSASL(,)=f#}w},+l~+\\`(l6ދȹfjx׭f^uV*˚)'LS\cyQ$R1R?r#O I2G[NkP}$ uXD:#C"% OJ;WOckÞ9 lz!KBa .J8PSRa0$6 ؏lVڤr]LQix 1vjrN;k-Zhlg1IMIJ{Cpme!}LIYgEw{kJwR6K#B5BDjz4_. P ieQ~|nc@ee08mW8fI^Y$ pr䃈Wg%A1IJ:k 6L&tʟ.߼{tww.//?xڥ}wwf$ .4yzr໴E)zCD6Z{xx?3NNN#i=`\Jf];GnO$AytFO'AAƩ+uSqCeT[R,!qr;?ȃ"AUCCx]?"u7>0Ѹy:B6n|s*H-nCw7u?6~ص],Oma?2K|1A⳿ɷ҇L %}'\eo<9UU-}iYkށZw:8mކuz3no l0ZV %gף$l.찘*IA3`FS0ʡ"I bFr+OxP)tdխ wruY2AQONɏS9x8AV2 \x-ɲmۡ:t:9Wz(뺽=R)b .6ӝL edzF>5A1AgeZ;׋ktUL8" =d )XrD& 0GCRv,DNWZ=O`F,y]x(*zҦ=l918F΄2|Z[c9kD/,0iq||<8-u]snp}gY4MYnU-(i;Uy)6ڶyDmRJдܸn@J@2 i k`#AA$ h-1ЊAC62|(т a=}A(b$Dm]gbngu|盿ƭtͶdIC,# BX6k\4OTs|ڢ(BCAZ B916 IYr@!ĠβAZRBDS#lezWn]%N"m(3jMU1$.,0sқzlqDHū*q }0 '!|?+DW,\@ĒIM,fbnUc Dx0@8jc! V+uu1ƪONN ?gh"ra1)k| ?)JAiv( )&iPgMFF^&ǭ((8:ry@I6c d2J)|>?==˘?+Д!2ƪ=њcd#6fUG}J:>>!)MYuo@߱Y !>"*c<' Iga|Yd22jAݽCXv .8ؽnRUYYآI{F_GeWl;x'E1)t aS:D1wuU'n3%#by_ejpr4G 3Yq=|5Fpp)ǦttQk6Lrtt~xt$ַ5 1Tն 3KG\##Oe+L/N͒b( 2S?m68GF>:J\7=b iZR?Q`\1}nQr|NUVW}kk|`3Ջ Ą}:v͍vy^mkߎ۰(0x%7?S}NS5E&u$iW}##/YzqN͓:jl7d? h۶(1*ӝztX̦15rYO@ҩ^0QEЉAe(yqmftQxo`S*r}R,C,(unD hI =:䗊)(! `P  ( gmNFI5 R>IFN0EI)E%.7m2pe:ZejeիpIl ғFY(Vdusn24MS۷wfmۊ+5wHI!}n ۊWǘE/HrI1^+E ν͠]z7Dz/@Bb󪴁[h:%YV,^[snp:@z v$Q jCRHi[|(ɵߍ;KB%JUd9JEJHpX/N@GmtK62YOy> ̲YONe.#tߙWMVE)ѯ0I+ǡF*A(Ϊ>jV!(ڦiJ)㹴ZD\7lK4Ť.۾dX+TBtS1/I4<@wNWQAX?\}sy7Exh "IaљI ӻ UOnp 6¥ &/3Me_-uQiV `e >K䛕Ɉ˕Me\hɊĘ'Rwf&fBx?[_޵J,S*l5-!րZihIø{t:-˲ t:ojRjKb\O5 rbU1b{hE:Avxʹ?ַl;ˊ ѽ{)TS֮+jp:K[27@F~h2CfZk4)ba Kx#8>o=dZ!WzHJU)<(zI 6J)E >u_:YѲj;Uպd(;ӹNBh"O ܍71&,<ϫE7}4|~|$6e m0!Ph vSH]eǀq>VJMWDzEʩag^cdF/X 2ZVʣ[J6)iZѵy=zŷuW9LeHQ~t׋NrܠtPRzXc%~ #BȲvwwSJ{cL4eYp~1P5!|{yqyh: yU}%&5T1SԙU*dBd&J_sB|fW˯Ȯm>﫲j[WÃaYBԋzH)_SnW!X^ 1]y~!Dj6c/ܟ!"BUA qf㌡7J8>R_WCeddc^7>YA?ֵkZ>RUV?`|]===Ν;wM)Vsn^߿K)r('m82?3 x?bbnkLF0J1 IDATD;T? ى1N&{r4yku4#XtCw5G>&Iec򑑏%>gP i:{rnwuj{*% z̃8j?msa^ uݠO߿?| =~ʢs]X`HƘlr9rZzf^!!2AY!Rgg2(+7FF>a/} 12eendmG2Mp2mtdvȜ}TZ_x <C4ө1fxRjU4IsCP=}߼{w[yQ+FF^;h$n[,VDo~uקZRiۘsyFQDu!jP&VdYu0X^9!;x+lkfl>Sy9:C EA -Ⳍ_'7o 4z2ABҾwunV+ ߹w|Fc*{M^1'ocW0]z}%IV;kxS(!giE184oC=ϋ `Xp;\9) ݄M^OyrebRYa;M!/ ;k]s80ǟ{` v?0PM8k`wd"8_.mcy/z<#Wz?֕A1+0dLWM$~_L e6xp)U ?L`4M$iCcl{{:c 6 0w`p@Y:%CcaZ=pHՙ5.I5Kx^Etaf `q|?Np0k0KTYg e(J)UclXm# ,B0HUp~n$ebu4dU-Z8j TWVe_cun,o>nk "N`^FO;o[~3 hi-v:uFnh(m0 f]8uHgWsϭ0ڶRhss@]ל0 sEQi: vww4p E׵M]2ƴ6Y;Ȓ31EpeB53pvGNu4#M?[oBW 8:DNvT}n@o9(Ɓ14ow !,s.ocw`Gߎ$=pp h!Pgh!G.j Pͳdg#1Mt7F'~{+b]p0 Pp-b vcTA!ѱNf.؋EF* ;{7oч%8ygY6o޼eY4T1Nwww"Z)jcDi<+o|@v–M ˝eb!`$Z-&ŚvZ]Ȧ|kww8 :8n8aL8'Yx#8s!\Hy\ˬ!\wPNѐA+Ç^aa:i!:- h|I eZ]0xW| fbm3(²\ӡMjLy2gj%9cLpFb:7p\hP3!3C:Aޅss's+|>L]eYu͛7cUU1hZAL8Xu|=Lݛۣ2BpJSdƴ$ۢޓ: al{߾.Sd՛&.>kg]l2X`.pv6:08-<;WWs0(!Pz կYk:Ź e 9 `8Z 5@`0{Mf!%T%J#HUu{ۿo) !u\1>ܡ`:emp8g'Vɤ,$I̢,ˍ jE6%h [e%)otAX+YCHoh!Ði rβD0q_^cg l: V_cgMᅋ}7h %*$aq좃g`N*MW,uFg`"_p4cg]甊Tgu]'Qdlc1QҫՅ], Af)zn1IIo #vvvcLAޔ"em*b [10tpºZNAh`83@ p.cYL%`F1?6 0 vo|\#&c z}zṟ^{`l:33|F Nh,pT!(vMc릩@AAj[C΁kOF_wV96&3 $N盛,T?N _ NXYAmVp7/~qsnEXxiVE@1aj.1p~&F\(, Q50ġCǫQ`K 㤪Mkl4:~lW; Ҝ}w(cк Bì91~nt.-дf7L\ ACS0rm:dC Aa]88lެTJmJڮAA|gcۃd280c\Rc܎8c N28)Qr rO D) =,zf(+s]p h5KM+=mx(n׋7N" Rw Q,đ8btq h `i1Ft]m5rY.Z4<5 `awlz?l@0t1ăAv c.]gAL,K $o4@YSƍ`MV|U;LX?-\;L1; Xч[ֲX ??R#5 wijm{Cy}e1#/CʋBwAtƴ0hᒮw'*# @*.D<¥9 <SBpakhtBp ~oͦwBé`.0r;G=OQT4tkqFB W\a0uʲXvu5܌\  J^v_y+&ZnV, $C].M 04l m'.Z€fØ&sD1X7Hpd?xtTydHQ9Ɠ/9-|6:,%ӑL`ҮCmqQ˺@~R삇_u &O3k0[(P7odC_Z0CHu]T e)s5x1\ndiR :bjs]|x+ ۡҶ 0h+ڿ#wyf(ϦV|d!@J\a NC)D#X0q#gA:n~Za4 vf q"5e\)ɰm\6pL ~nt8tƩ1k0P*ݻxqLvY0V?`u &ٜC3nRpԍu\m'݆C`0̹uJ$ҵnPIlm??H S1ADsRJpxguU Cݖhevʂ[}RWn0`^i+ "H'P{ypuFn)xVU \k%"x< \$3cպ]ga;%j?(㿳5OZ!5EZwCWB J#hUÀab 1ߖOhcU8AbV3.i^ppLh൷0<K‡1F3!@C@lݘ!CJ|泿^O6"ppjE](pK`uySH9h݅*z0H?~uK0Xضmw@ p5dе ^m6F#T5`(<AݣiV{<ϥ-~v_ 82C :_&j+Pb >SabBXVW`VErU'm>xtJk4=iDeSAb<r!Eyn`oOp؆ @YvͬWҫ K6RYG'VGDN,sxؽ1ֺ)9`9GYAH!#ykXGB exp?ƪگ0^uU A`Z C87xIU}\yvc?,KLj5`dU.jfU@|΃HF}#]#T4kIDATQC,x}m/eI@NiB*HIY5fN [ςZX u]G?Iװ9a Ny<Uht5M.`JFNFndw©*͂n(u8M0}C)_ߝ`sKgz1ϲ/]<ɔCmȕR! (#9xtyVe0vM-BEʻ_ijqW̴u-,x Hh$zXk󃃃-߿uIn1ʲs9Icι& XAyAuu]3IƘ1f:L&ғƘ":0,rup!h-,>ϛd vN0cJĀ~{dk1Hp ́G9a*P-q6( sd1~UUUmmm|y)nA%Aι(Fb\aEl6 S4J{ݾ}{ggi\Ed_يp ]A$@s7>&9=烵Ӎ!P]0W/b'UG9MGpcg4@e=?Oi!D$}nAb^Í 9|^b bwwWk `4͎^ܾ}2cES_s###QY:hj mD uU-i~_%t5p9FTJOMgKzܺuk!dI!1A0 'b43m۪iVURm Aro. :ge%ж0. 3x^8Z%®(elZ,1|{ 'x̹=j-qp<~KŃ]31ƐIΒ%iʲ$^ve.flmmMpH1((q~ _I%H(Zozg08/C<ȪZp@70u&n12/8ȼGɛ- tlmmM8@wZ0:-s$~~BMTURΐtI>(*BkDZ1ֺ:)%i ʣ)ʡ p^A˪'y<;!YQQ0(Fiܟ`c(u2g`G߉p/)<p\ah 2$xcӍ I0 s}/'58z hk-:b!R۶ߏXAV'Z0xDZ`4˾W>;C/r^AP:%//6~js9T^w֭,I[8R:2!űOj{qYt]W;#EQ4M1hkߺpQ,8wR APן%jR(cu]m))[FF$Rʪp=UUI))k`ZI);w=O5dȟbI{FQ,p~/wtBٌsd>YXѹ2s`/DkeO;RJ^ Ç[[[u]ǼH>z?B]OSnS8;)+s.9_qSV{O-fY_%HOQU)ڂu]+8 g8R>ܱ"S OA'}]VY.^>;9 B2D)(,k!R1.P ^}a(.$7u.3Cw-2їu]uPĞwW-sNBbZo۶3A<'az}2H$IB[jZkz}*'g9#6)xh1RyEOFQD'>s6zk;DR]fmO[Amҋp:wuZB`8Oxxxf8d7 bAVEԡ rgg,v" OA]Xk1SP$˼JoW`0fGONzs:;?ˍߢtccc^vF?,K~cuT~ SRmۃzs^ι4M!m-rҾp8dVnJ):i~ˍq~fQ0cssfÓp LwʠzxjCŒ6h)f~y}_fmooSY9r8'gZs:Ge9L(]ꤿth9V'y٠v$>bdiRg1GOyowu쫑DQ~OEk-Z*!ZU)h/7YcEQ6˲zݧ/,WR3. 4ƔeI</*tJNZk_1{f(ضm/ŠM9ȍ ~*}'Ǿyz2łV6XQ}/Ş W ;P_A/ ߃b8$캮z:Ւ̊HJx]=tr{!z'F4EB _e9 ,jPX,nݺE۶Efeq3 cl4<'\(ŢO|xۭ[.,1rhUGVUuSݥ,˖iVrl0nݺ[V_1bgg p=Çx  3, LstKJ>%e￿CyrTd:K)777ܹ㇗=r$b>S6OR.2cyFAE8ʲR[V^n:ANSrQJ%(˒smGQt<+ xɢQJ)53= pԶ+tCƳpUS9vsTV6˲$1J+ݥv]Ƙ4Mɘ*=:xq6(me|(wrd7Z)E.%Kr8RY%tgz@1+LNZO3!*dSF5It]GY%!zMLSyEp)y$983ZkYc{u۶4w50MS"p8<88Z:E7Q`)RIPp{8EA`)e?rЗ}:|iiRl6kFJI$WɄEQAUOrKh0UZΠnI {q6HWU9-2EQPd2 :R(HyH½n۶i`@Fj"com4PYr\,T@Jm߿}6)]J$Cy>tJ>Vȼ=Pȇ&E0 WUh<S84 ("{} _ \.)߯st:bU{}ܕ4cL?G㴼;ЫuN‹JIIy)֓zP_h>Uy^KE( *(6GN^}LkHGUUU]TqvE,x܏IW 8Џ$hҢQ()e{=!ha8Zk 4/MmI}͕RIܿs> (H&TZp8s=B#&IKԫmNN^Tb<#6 ûw-(uzy~ qo!?;A@y@g'ir;2r6mZw ƍdQt:%", *$>5Ƙm3[ٶQ,ʧ~zu-1* Wpܦi,;nUw{NDUiIg}4M57QμSKs&ݹUH"VN#գu*bxzf#r~H:iiiiiik?4M4M4M4M4M4M4{weo/6{)V[8 h֯y:%WSQ?>{3vspMOzV1ub=ȆV Tᛯ'/$qj7tc̎*l*].U~W.Du_?4Źg0l|i/"E$2B?Rʣ_:Fb.ڥFޛeD enKAc?Li%$\IZ˦iiiiiiiiiiikk>GƲi?ulE@?JN@b8#]EBuMUGu;ExR',ƭܦ;'QncoVYf*ȄaI ?\iE_ ̝ O $q $/ש'?\rZς6b GZuiJGaUpO+yk"n붚iiiiiiiiikY:16Wv໘b\=+e+?gu2'+䏎v e7šyl-]^$#sٺG(fnN71|/隸v 9:f9\:݄XٝbL }ڙ P]fUlF4.9Q*Gg\?%Ƽ3&p۹l۲c^mlSNOBƫ'K+F;o,&+tfSR4c "Kظ|u(T3b[6#] S'b9#u#zanGq& 6 :0zӎVN?Iק̅vO/B lEz%?#O^9 &|s"p7/mGl,!iOČIl&fs_Ym+ GݭfhmUM P4lk,lݙdqߔ&.Z&SˈYX)SFeE˕C݇,7Fl]ےq]Flȉ`e2yk)e3V6Kf&ӫjob*F KF2*'|_i3xm=˻3=͛osZ;HFT)G< .əSҳ:ᆜJ:Z;!QOS[=/c_W/ڍ*ʲ}.g?*TOO]r # <+Wh&fۖFIh^ XeDEFqpx:Zܞ"cvUx閼}:qϿyu~(Y35.6)2uDTCNWlDWLߐW'-=h4O~XH^Lbv⍱6xc~w3"sX?81vj3oy+=߾ٙDB4uxBÅ ܖM ŹkWʾBIbxU(eQUG%#Î,g.x n,m{MU,b/LsC'.kcG~^}>ώu󫇔ZyڸZkVZJy$1ӯn+|nV7+<٠S Eq boc;f/? \5qXZ2~G7@{s^uL-g`ƶVX=>9X/ UE u]=Jq&^c>h._دLV')-faF c1K1X#}{M4M5ǂfi:ȡ08*0a~\)S#ܻpAd#$*QI3(y;~NlUˉ2f-Q$Kgj#*% rvkxs49\o7l3_%洵mFO!Ic홷)](V.+%`+ (^ܐO+#m8B#m[ddabY%2ߑ#p@$q8Ԯ]J #,HD[@znHP'Vmtp2 b7Ycj! .WA:֓%׺I7P9:KcbqmXK=ZZ9jzǃ L < wr[f?r )(b 6d2h`T~I kdqa.U,jh r">BP{ q׳39l.S ⵏh422F,nI ([FG/&G!vKWjicuE\(0xF.qn$=|+Z,>U`F"e콜EVۂ9Vs7Mbj[r~HN{{~u]L:7-eb3sdif9*Ĥ7^O'n{Ǹ\"嬄lL8zգO0|/母񍌞7\Fc9CbJVA$RPVK9ٗ#j;JfW7$A-;BV.PSpUÃݹ ͫ_+<3؀8UQ**$|ebrˏNῖ!jF4~z4n7P0ɚ[%8a̱.d32tӱ:=L+Y 'F(iyAH/cXObplfO=,zʎ ge WR:KyEM%(Ybz2Y SׂUCr~?XN.7[1QCQXم@uP  f?SkCkmȞ8n'=8[.l;5 |E{(Z9乌IВy^ ݻ{*Yl=sൎC,GGXbIowl^ZE&it7 ƺdl8!vyW>hozg>j?Mzɔ5jfqdkUzWdGQy r$ZցhFOĂ 7>nA?Xjw⮲8G2y^@[[f|}z8[\*o[v*W_e  (kWh2Cw_~_2.UݝTFH汶m{jV|Kf62( v2@ĩsI\kd-T"IGOm ƚ%Xџر# vWlcsnw1<W6C(ʜpO$qξ x7[R910#YUaiDw<ٜx \pc),NbVkQϮN;vO0S#;,(#Qie#2ck8[2ݰ BcV_^w~_en[U\kKtY5<A?ASn jB+]*%F'I`짿Þgm=[ g(9$^(y G)"} pFgƦC᳅69M, ^eVe$|1c!T(caH ę8DVq##RVݛi2|axcIzO*?ʬ ՏM4M56-B+؎: 0^tdGQ}{9੸%"}lW~_9I?:=We.>.gxXPAby֒Y]t !]i ݰlOD׿Qjx r{d>,di!d,@U fv~c=jG'C ~P"M$JFRUpȒ zyk6K/I~Y4Or:?v ڶ'A\`aIu.ے9g)xvr<%n˕w0Ȫ=Z&v=x󥺞[<}|qC#80'8'qcZ mLq~̛$alHY7zFG$x'--W%vۯ/"Ex<%>9a38?#ly}YeLsJR:Kyݻ:7Exئ4 %S2!Yx&40hlB}ܬB Y>-%{Aԓ`x[F{_{BZkAє JܯQ?<*l&ᡓv+ 읉"[=QHcOYbq$Ilmmю8(pF)HW^R8Glн9,QFbw$q`a^*aq{2d,ӡ% JRAfr/r4>!enі =pVvHU{${vRߎ1n'|Qbfh䮯-U0e>8pX/ש$_XE&ܷӸoõZ%y_u T7:xi Vg5Fk<&u'i爉#h2x p8H18ËēݰfR31rpT|;vrzv坹 $"E;DxDtF~u3|{ύ.ZGÉZ>T=zf}R[!z8hclwP1bHآ"А2;d"e泒UL!iѪP;!8(:#Uw^ b[K!P%׺ᔂ?ƠJ_^XlFd *ts[<&j.*HR]՘^IRY/o7kYe[ x׊%?`$şђM';v a#5đ#ӟ0 %v-N5ܻc!u]h;*r#TET|~{M4M5Cksa6eY6֋#{1CPa",*吅 [*0Bۢ]È66-95{8$7NO_nb2],=>zh2 %D"uum|\Ln)?i^c_ćg3Y,kgpbC5bx`x?  %z=ןO~~z곳/n{'gؼ㥦U(RY>V2PDa_J6sqǏTԲىӔ-Ӟ@۞:-/<;2Ov+n(gՄ2De<䏏UXKMWs،} ,|yEmWC\gGWX\MmM=ِ;W[G*n8ls2#ǵ1?RDg*3-ٻTތ{)> 0 Gi`A"(d#^A ??)8{ɭ{S$AYRX <|FR蹃%۟u>X1#X~|}6=csǮC8-?#D =:gmL<Tl0oj_Pc(Rua{=iN H^h"t+@.(< y>E5)\lٲWZK(1^>CZA18ܞY#C%*9Qg,9<(ޔwMяDI"YUBE]{!ᔃuZؾOڗsR<% Pύ2_@Ʈ!~ ]M\oN4;IxK4!iMČH>8<FmO'l28]Rx79f\YS>L<Lky̞{sg"=͵_gc3PI4bN1!R;=i=%{ٷ:ݳ_בPI-؛=u? F镡`܏5gLCq;HG+ze!OEG,9Jߝ(&?Ts1H㰤0Iʿ$`5+->E=e+&dtk==Xw!}I=ۤ {i>'[#59_VYZqP"s~^m4}ܽzm mW?mm_L0Xb8G3:ZVq泘8pxlXc zIHb2F# m<=݅QZ3kpQv`-ȡ.d!Tr~-]hs {ϧۿn~~u)tbL׽jj2OQRC8 o;_1[p^~aW'N?kw~ɯ8)wVc(XoChHdoĜQ P~sߎv[bode H-E]wtvfj8\mSdr9_Ĩ12e=ɺl^J8v߹vj6$G"KT,2G+}D `K`naBJR Hc 00pxόr6"!V*ځ?ѵ"I`3+Mg5 Kv2%.$J 5vV O+mD9C磹jf$N7?lzB\\H/C}e$~3@QBB<$많|Cu۲.XFv<#"sUH=x)ckx:>T،F 3-ūf{B@#fG Tzy;ad&Riײa$y$GUQsC۸RN:l75b嬉&#?o3|B*׮9Y]CzPpE|s3sm{mv#u$/{e,M2"#8~<ly_mb6ߞ0 D1#1JTnXq/"Aqi0v^04\ؾlSH@[N ?< e>Im^)r*Az}׭MXP|^b͙/eYCb ff !?BOR) ?/.ſK4%c=7FGfj9ph ש馚i{zVlG\LXd:LԲGx#(V7U;)5ʻϑgOzd^"_O$@AXF"'-G1i28 vVrE%^I K[.l;5 |E{(Z9乌IВy^ ⿎q!@\լi.eѷd*cafUq;j_s;ܹNUNYOV$u<~yΡ#3KpdCL9?[̆a&Nvx^[Y,,C#kqG]U$ze1 rNOkO8VfnIrF汝072Rc_Y%{XU%@86J,&[%GL0X i:@$keynTg$2ŴAjz9*y<ǸXB%ɛdO_ExOXyǐԙ ))R%hVJcN p{?Mhn5_h^ԞexF}k5e ._WOviK Am 䲗 Lx,ty( T|۱<~3թEqY. 7\"$h˕2:/#? Nl=kwﰊQ`4s WֲXlDPŏLݏ8,?pRW7y6m*-F $2~3fy Q&10~G_bɍ!$3֮H,-,R)`>ԄE Y :sf4l+ĎĄug%bNH66ݭ㜦i ܵ%+5s[Im37U81EMKdGZj¥C1fyJnxndU23ZvI:;gcfr\>kvhe(dX #PPxOoSc76 W;QH#3M*Jf=[p?g;+ ?&υvhۑذt-<6ܣ0O-kVKLk;TҰ>Ix;sd3_M7j؆TV~Y)vw;OgedjO:wRqAc ;RB8{;q;m#6"鮍 HȽ$?g,|9(Ef8(jONՄZ̆7E#S;_h$/X;4Z,c>AX@y;O1ۓ;!#ܛg%B,uO-x̄/'u!y<{xy2Q385l|sӈ"^6tq6F76l b7)DG"fGP9Pfƻiik*]l6Bs:Kr( \Պkrih3;zL%U YaAbU*(#7#LO+ڣ;1.ued+C8>!^|u17&y?v`*dװ,EfDacQCcsTjcy&2%{ f.8aq m.ۙ{ &.Gg8щQ&6dOcSwL[F %<\0>鳇fhgXeZ=u`jŖW|nj W㿑HySyv P$$js{s˗؅صk"bxⶲ#X87=ٛg6>7[J#.[y=#ԫlQ!#Of;Uˌ1Ⲓ~_:aIպbI,#q)oBB +Igc ZSsb1X3vD 0IF+Q?e^'WJϗ&=G^Q䓂 UG#r?~85ǔ20nbvd.C}(c罏 Tcװ,E.c;%r$ )'UFSF|oapsEVʊ rXU gŸ~?ߑ}썃U`fש[EY}Q$O9 gP1uqdZ{IL߁b1ĨdcȕAUXޘjwz1؊X^jG]UJVY>X??Monl h=˱VuF!{j_nb2],=>zh2 %D"u=~fln &kx2t!=Htz 3GxoAyC)(n/*m϶jTn;=+cӯI?ZΘ9NGcd '0u2G/U_\u~n:_&Pdgk/&9,M9IeS]B2e ֏5 rXi.kXB9%o.R{yqΣy26kxۆbORh+ 49 ILJOR$ /qGyg2QC4w$s4hI $Y?|ڱӓ<+kXaVev6 2~8Ϊ g;0݇pY؃;>0]jdgH=~#XB$`y:xyϔ粶PT՛3ƮVG cƋ?# ʃמl_nn }K/hmOx/*`@-/k ?7H[3'#ƶWx]+~lj^UjH [|qM dayMfy[*Р 5ŌŚC"9ZӒ'{~]ӱ箶l,E,fo #rZN*=PepǤ> *l1)B!̡nUoVgy|܋q|R=c#4u_@eWۯ+[!qǁ QR%VR@) ǰif74y]ty(ʌ^6th8e "x\ K ͉A*~>Lܟx甞=د'Tm1YdOʁįBJV lj_byyY-9+;"U'07UGpbD@@{~@:ܞ8 89*cGBx9kd!xxة> ?+3ɒ/)T8yccEq_cѲ7qtxŸ/K K5&Kn@R0콟@;smX԰xrլG2jxFerNd(p?p8ޛVd2˸FA,2@ԆR:Cgny\ڃ+q]]9@KCFvt :Y\KvK 1< ]:)@'ʝ߶btVi=sV?H0䏐A$jV+1O/ݼ.\Wےix,+I!Ib q7Y|*^\W -d\^4ેs@m<2ֲlйJ_3E Ӣ,iKX%F̗4b)ѽAbc؜pe -۞5ZHy$).J$LzƖil @cHdbG9^糹19܂8.ɍxJH&E졈 7x p,!gZ N{OcO8x/dr^frG$F#bcu* ݩ;qӷkd+׬H?|cڞ7߃n{)~<<~c4%Wf 'V--\[U,ʲC*ʄ1xPof2sֱ6ZYb[h=r4[y:ձlm2}o'|t_Zؤ3MƢ ג]nX]ɴeEB*O [̼H8WxcL_3Yпc!fHҵ9VX##X0y y JnhndU23ZvI0u)d}r BX'wW-f8GhJ~G <_)1]Eq"*f*by'Gf}S!ߩw3 ''+OW?H5SW;{_'Oox~QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW/sQij??QtEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEfy$Z7~&wn?OsxOk/)Ҿ o ^ ǯ|)GmwYx[چE8?-_?o'Cwᕿ)i_+ψuoOֿcZH֯xOx_5?][kf{u~:k O) _ᕏOt-+) Nv/5 _ x{mWmm~#.58o|ހ~xŞ|Mx O?>1fxs¾4c>&7u=#AYjγ^Z^ks}}sʿ??FoO??0k?%?ſAg #y:#ڿپ??6 ^*O >0~ߴ !?m;O5 j6x:<1o+/ß,')º h~X.5ow/S 4'؟‹7'&k7 O $Abk}+oW<N~*~j3u?X|`%W~)|4|E @<k{_M-"YswWQ_G ⯍ZG߱wx_=񏄾V9cxzx_ι~ǟ#=‹/Dq~"|b~Ϳ ?F|v7+OX?V ZG] }3%mOox.+r?XW?rW~sbɟS'o+h_moSO~xsi t Wm\|@?eiZ}lty|9k׶~ to_ك^+x >}oaĞ*Uǂ | y࿌  K ڏlAjմ{E>?4?. ?O0|TO|Q7_]_N &Eg[Bk=;G<='^ Iѥ𦳣\\o_? 'L 1m|b'.hٿ +'w_폶iG07Nf,oEj?cEB~[o7<˘YyKGΝ|\{ g]X?{&ij >KE@l_b& xXdG&)x'A|B|:v6y߆zݞ?!J?`Nj{,Tо2׊Vo| >K2YwtM;R]Ω\i'Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ş|Mx O?>1fxs¾4c>&7u=#AYjγ^Z^ks}}sʿ-O[S<| _(MF_N?:LJ|Gv?OowYӼAHbxu=Gv43Hc?o+&?)|XY;/eI"R>ÿzƟw,Դ L-߬jz~kA/ês>~*Q$mgh>д;=/FѴ;];Kӭmlm(?qiWX+?\i)eO4| ռ[Ş,ֺ=IS¢ 2>WE?_Rg; |YY/:ŏx}x#Ѵ|/ |_?o 75@✿_$ue?+O}'K~ee-"េj?j?82?#>?-u-bÚ.VAxO_j߅?n3-"_-_ 7cmw]cJìoGT&/#?gſ]ſ 7🁮|GڷiOڏ:eO^/_>%|`e'σ~֓ 174\ϟ~h ~zGYh|++tχ5-Nz(((((((((((((((0?Xw [E73'G~xK_wk֑m ᮳ g|?ӿΧ:υ|.+xONQτ5(_odI?">jeOh]xO_{S{@? oEKρ<~-Ǻ¯# 5(xL?mx Gj=Cjf^t[Ag7F ]>G jzȴfn|6`<' Q*+/|=¿ ?| _ :iF_^\_\^j5^Q+^Y5K` ( ( ( ( ( j??Qu_?@G 7n?((((+?iWq>j?j?82?#>?-u-bÚ.VAxO_j߅?n3-"_??_R!ޝitߌW/%?SᏃ>N.t|UuhGi:EYƣ}xGIԾ |W!jx^!ѬAj:/5'ü_&ZgO^%+X8ggC?KO6u/%/~3wo4`+!x'?&{?CC5}=~1k.V_z ( ( ( ( ( ( ( ( ( ( ( ( H?Tk+oq I'?dXkzN5{-NS?:E/4~ey/|hV ~6Bߵ|/_3C7?>|#k__ƖjOj|Q־2~Ų)?g:o>1G~ |=?gχWo_ρ| gM;HӒ{˛_]j>"g3jU^Vk:dwN/&_t}gGuBWxzW ~?w)Gx3 u%_)x@K+ Yx_boxzŷS=Zig@|s{|w_| Gïzߋ^ C߯moC־)'f~>_~)~9E׈>)R! /9xc k|{~ tӴ9'k/x:xV|WgY&j~EQEQEQEQEQEQEQEW/sQij??QtEPEPEPEPEPEPEPEPO-8Eg?*+Sѵ2[]; |wZ[xg\?@i:>:ixY=w'Ӭ|8n/?­c^Gg3]x_.BW@i5M7$~/jk_ |y _f b ؾ>j?> ~!~;N;LӗL-M>#E?||=I=tsN(\2||!g@~՟ ~G.|zBWGXxᅧ]Þ;α@OHu,5/((((((((?n?^,ſGOeƱ 1GxJdž"oIF뺡 k> ]_G sov;Gc[/jOWJ=WP4}J'6o|w>o袀 ( ( ( ( ( ( ( ( j??Qu_?@G 7n?((((((((|GR[h~~񞣩x!e?Go.~7ן n/5}wy|`2 < <exǚk5>!x׆f_Ny,o-l} gwŞ*u xFѼIj]W ͷyg` !φu'G[r;YѼc."|=?o/?Տ3}_|/;\^xOTYـ~QEQEQEQEQEQEQEQEyş^_ƿZ" ?/&5G| Ú<]cxwOAdxH5 JLoePO?m;F hIZ &㿇Z윗^$coP_/kLgoO4o bQ&q?hO jCL\~xO~|3_g O?xO𞍧xs¾4mχ{k=#AYz6^kmccmDKo;>|HhO]D COpίh.|9OX5e>|2x~)ѼyዝbO.w7n?O((((((_cƿڏG 7]#wXD|f_|@!<9Ww_ wW?U)'̿E_w'x,m)~<:5Exf@ѿdG[o:牵QgO|S>>-{8\PHhm WOYfk|@Oۛo+_5ᧇ}2[4eO'^A^ <+1nJ|}O_6>??|Ommio85M}o|Uw+\9+_dد¯Cr?H3χ4xNy_i~㨭_2[:r^;"{ _<_#+l[mI 3㷉Z?,V_b?[I,mno ~ݟ߷?%i 1σR_h¦—? eg }ك^;  |Y A׿<kIP𯉼WfQw!T+:7| mEYuMNKhk~_?g6KW~7?? %k/]Wֶ|m>#]/?k/ o6? v %/As@Q@Q@Q@Q@Q@Q@x?j__g*|3NWмAjzw'j:O'F_5Ě6Z{ogď&ߵ?j7~0xÚ_?eڿ[ѓƿQ~Zρko"~)g ~<㦻3g~(((((( o#G??؟۟Do(<| C?foO7%)'7㦅m3h~%&|TEJ_-Ė)#ƽY|7G;_k,57ǟ5[ ?BG5ac3<?Z/UoW^y_Iy>$|iƏ?~ ~_ϟ+7g3i=毮]5xŞ!uoxZ:ω5ST ((+9F~5(((?iWq>j?j?82?#>?-u-bÚ.VAxO_j߅?n3-"_#&??<8"G;f|vGQ~ ?j/ ? xo>w}>@mo-xw@o4|nҼ9៎~x4|Sqks?66>k@?_(((((? | gĿ/J>|`/|3hx5/ BxHizkhVY^_-4[Y#<'W7_ ;xs7Ë'џQiiڥ~QEQEQEQEQEQExW >~࡟>6>GKL5>''[]Լ:%[xRc|2h34x?|Y _7oï i#7~п|Ej W )'할3ߍO?Ci ih5{=ׅ%?7-o+o ?'  5k4)_?4oi_xF؃oi'NExW?'j?|_ w'i+:G|3H|?ivz^ivvvZXAmQ/?o>|,iSn/׆o|??_>"5j4?O]u=bj g(((( _7_ (((8?L_R߃Z'co> _?_٧~2_tKFu7Ru{jρ =cG<'>#~[~ؿwd~?Q? ^L.}՟?k?/JutDž?? uoB8;^ xÿ<+_Q&~Yxq[_(u 3ƟǍEUWZvLo/G:&xook߆|O-C>_@&[{/Gѵ?&? (((((~;O m>"Ϻ |w# gᯀORj{BMw8SE|A4 k;jkYxkº/] &w/ gG^$ xGF5-;DxH8?HwXࣟU/$^c& |wÚWMYձ:`gKC>>)MgKz.o ( ( ( ( (?k l~~~6W0|j7xo |eO?moymwkxw~4ZxVѼ)0iw`m~H|~ZGB|?ןxO$?g8 (?_M㦋go_k GwZĿ~P ~ xW _j Դw`wZuiK)hiizVl|mS:_eQ𭞍cjo}j?QEQEQEQEQEW5,~m궿 | j?>2hß|Y<{ois𭯉$O> >|Aw*i ~P l_j />0/> Zn?~|K)KB2[?zƉ > xsR🋴/G4jfaiP\Wǿoxv/x>0k ?;^ O oNu߲o>'x|U|e7}S4X((((( =;|?n.|A|Tǿ& FgNω(Aw80' _Y KYӴ5?N]ϊl[W^=_?R?೟o/EW!:oMOSÞ")/P@? oY~O_S'iSEPEPEPEPEP^?Bk ?~:_tj^Wk^!3cjy #BѭuMsFӮ5-tg`/dW?b%Nk 'ލ~̚ƍH~՟>~xo/|6xŚ> i_(B GO|3h"SP?h?ۿ5~ў=֢t?kY>&~*fҼ9w_ |+|<*β|7isqz((((( _7_ (((((N!F}ym`CW>V[|{xú4>$o?xzxN'gÚW|B,~*_K~ > ~~ ~-? ńsMJN4GJ|8gAxN|iwx_OŞ|34O|;x?`oįx^Wn{3Nl?(((+[㿈[_!o<#kw+/Za5M?].Y^h׆<;mE>wU?o Y袊((((+_W_; xsR🋴/G4jfaiP\|R"Wψ$^ >A[ٚ>|C YK/Gψ _{}_?n[;o_N)u?x <&▕R~oLj>0xP|'r]Bj`QEQEQEQEQEC0🊼gg?߷,hڎxWǾT4O= 1Dw+!o4R78Y4( ( (? j?/oà?i G De *P?+gdGu_?S_~Q@?`:)_ x"G??nWٿ_?V{_V_+OO? OL)M?य़_I:E(?J?㩯tRk(:E(?J?㩯tRk(:E(?J?㩯tR cO= A  5 'M?$K,~oI|+Mx|,񍷈<5o τUc|K5OC ~'F_ jo{kB}CQI<<S_`:)_Pu5XΊQME~S_`:)_Pu5XΊQME~S_`:)_Pu5XΊW#>\@_m_h_tm?n•w6"+NgoqOox`:)Gu5XΊWMS_~Q@?`:)Gu5XΊWMS_~Q@?`:)Gu5XΊWMϿ?W/6?[O[]ͿȽ \k|7+?P__ß1%h_oڏhyW/|5Ϗ 5&?J?㩯tRk:E+?J?㩯tRk:E+?J?㩯tRk?fG'9kZG*O¿% wKi/R_W{_~q_V/?/&|MS_~Q@?`:)Gu5XΊW i¬i .W ?U`´*Wk OTfmTWQ@Q@~,W?@&xV KѵGKӼi[?ٗ'3-G_x/1ѵ4W> xs_?i[>* 6:I%_M]wQ@Q@Q@Q@Q@~5( _7@QEQEQEQEQEs,g|_x^&>,|Y+:XMbH|?iwꗖvZ_\m((h* ~`~? ]] | {h#3Sk~.M o^6oKu 7m{z)_ٯ5o?ৃO]i*Լ+z/|=xGҴ"Fgqiz\j2\ci EPEPEPEPEP_?@G 7n '~. %?mo_g$|-ҴZe|?|@^jWOoEhW+40((((OM?ѿ~&;k)j'>)'ׄZ-2^ x5 +~'O,t+oY[j~_0~ۿy}O(5ft*?dψ"o| >7íW?Eu, |`៏Ze[BSe_~ 'GVa-f|+j~2!o_ SC]_Tx~ YEm@Q@Q@Q@Q@Q@K?j?= m`o:4M;Hʞ,~ [Y5ߊמ'iڴ2VxR-Y`N?W? S?|A}|Ug eOMxs_ Qg.cEL>1~~+x< |e>2J~_|]oψ~5^.^(((((wWG / u׈,>?~|3_ =c+xCN׵{?ɬ5zgug_-'G_?Eۯ_+ x_xoQ𗊼1OM3G?itC¿Wc u+7W? kc g?J6B-:ާam1|w~՟-{gGl/Oᦷ'[Eρ|I{S%k>-i>WDn|_)νgw ak kDtO|^{ P>,_w.> Ng=_^^9^ 懣~$ÏO/RSN6/-~#OKW}~>?4#KBuែ<)U[hZQ@Q@Q@Q@Q@Q@?G_.ooѿxdb~ߟMw'<9/_ x?fg x'6q=cQomariO M] χC_EZ¿t7G%gď4mfO ?h=?_?)[ u_v)׏&ޠ(((((,g_w}l)M~~ؿ~|8@d-&i~ i~]INt xE5ox_iO_h |O~YkXMO:kU״?Y흾kΝos $W{~P1;n'ն ?⯋|7?*7XdۿQ׿j_xe.O*ώ'?fRQiZ%7X>FQ_(((((Ş|+o>|ig~1w4m;~g|G\!ω=[^i"KtmRN4뫛i&(?OG'㧅 x qQ@oŸ%/>?#~)M?_u鴏K_[~^!L-G $_5oo>eρ?e|& >;>?|+;;žuol/զ]^\~|7º?ۓO?h$ ~?Ob_ giR|: i ߃yu7otG[φ-|sP^ ¾=|u_xƞ ox;>tWŞmx{sykt=SFt˭;TӮng)[((Oox~W/sQi( ( ( g'G?ڃ"+i6Ekw[ -[ᛛ;*ξ}?O{;GѴ};]5 ? gG._ xNP㿇o%jP?V?$.|&uKޡIΝ WgO_ uovcNe|^+ºq_> {|}px>1վ _ X?exWz'ck_<44m_5sŚ֍{sW> ( ( ( ( ( Cgؗ玾i Կh=w)4f?JxӨ\cUѾ'>j,𭞳}}ka?oCG?äie {چx? ~-d>@ ?Nugsxz߈<5(>'/|T]k REPEPEPEPEP\<'_W׆|?Oτchw+ NCx{X5E旬ڥ֝iW67O,MQ@Ž-Bſga |?w Wbo B?~8ƱxS=Y3? |S ƾ*-~Y`)a?e/|?~0?l_$7mdx㮥@k۟׎g_B1g<'k-?^%- |BSᶻ 9E~@ ?_%>χT߆Vؚ΅au]cR?'ߊ_d[$ף~ wݕk |y{>'K?-^k?b!?|kAQC#V][Q&/?|)g4y-~Fj>_ozfEP_?@G 7n9FQ@h___t~џ~N _ ~1/ +xNu !ֵ 4-sTѭ$n4Uaп>< *~PoJRwa853w|EL;?w%m~o]gSu7"-j@C i_?g$/Ql='[Yӯb_*|+o?qx|?? MOyX~!xᇉj^,SJS _myw'K\H,Nc?i?گojړ_ g' &>_߁~7&U߄ >xB[S /ï xwoX x]+9xH~"mobc;qo~ x%A(((((((xsG\~xo~,x+W>xS~,?eWw)0Mim/:>Λ1pjg|{_ &<O,w|'#<+=:X3H׼?zwZv][_XmƙvU해zC oxO??k? /esOe7>+So[&{x/ƞ7w<6մ?_j?!~"~0xN_,GO⎏ķL/_ ge62ëxozxFy|?eߐ?Hls)~gŴ W?9!Iƿj??Qt<?E`O ~(?lnW6 '>O+OO 2?I*}G~/_\].|2z6[Y|A{WIxWİiD6K_ xA/?⟆?f]/x/*?j KV>>/o^'y^65>4O&՟KþW袀 ( ( ( ( ( ( ( ڏ''?"(M~7OLψK-wS4YӿC?_φ\wQ\x;[𿇼YѼLg|+7t{x,υ^>5})[ߴthj/(k#Zw ]CG/|5>[C7'OH[~(((((((+ۧ:'8o/?oo^ow31H|-|1Dŷ'|o+۾uD[=>('틬~v m~5ς_OOx;n |Sǃ M?+CK4}W+o Z^%'u~[o_z?W/_|ou?ƚjr^x/x(?i; :+_ x~&}Ŀ> k?d?j7ZZ^į?g__|o ͨ̿Mf 7_mwĖ)4_ xOM[E2ѾxoVq~/ | ;gO t/E|߅3k4 GBWzgV^=̿-` >$x 7sտ!bѷZ.e 7Ú_1;g?|+[i> gKY*QEQEQEQEQEQEQEQEQEZ|'%~&~ǟ ?wxχP u'g|8f?<[_߉=/xR1NGE{|M[S? ~Կ/T7S:Ӿ=ō͝xB~!Ӵx7ZNO74mSK aG/OۇU7xĿۇ /!x׆f_Ny,o-l} gwŞ*u xFѼIj]QEQEQEQEQEQEQEW/sQij??QtEPEPEPEPEPEPEPE{^|~ ^f{ kh>k 4/'l%W>A j'>s(5V^ |ᯀ4i_O-ß>K}^'Ӽ-m9 d 3A +zݾm6ԭٯHԼw}?mW_hڗ _ o3߻PO)?!'|__h;oHо-5Z#?ScGҼK;B>!xC_WOR/d(>u >'k|3Ţ|<gA b~!xz]Γx c?c|S5'c|?e &hc/f~^//I<@-_ [;мcO?ߊ^+р?o(((((+9F~5(((((((`n/.xOO!g?o|?v~j |I ƾ3k?>fg&+> ~ѿǿ;Od?vV?MO1+'&i tMwO|wo /? H˭R?߇/O~/x} xcHh5_OσZi߳&i~ 5_I+I<_x-h mBI# q|p|mu/t;O7^{'>iÿ| <-^ m@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|^jqxAd^o|Aj:/5<&|xs ZsGz&xW]75; x:> K =@64xΏLƑd3 <#x}!M~6i6:G9o⧂5}Ju? ~Կ/T7S:Ӿ=ō͝xB~!Ӵx7ZNO74mSK g⟌?h; mg/ hg._Gv>:~^0+8FlR|Wϊ.ﮭ?O# MO_y_ /S?'tWŞmx{sykt=SFt˭;TӮng)X(((( _7_ ((((+?iګqjj?|2>$?tbÚ?V|A Pïi^"ߊ/m|3^/?kC` ^>/›?h>:͗5GZWg->wƞ Stos[t ^&~mgo xX> >G?m~ƿ> ]Sm?ƩZ?zxoٳ _-_O?~1kٿeωZby?6?gL?j/jk>;xwG|G[^G ؾe4|?3xeφ< M#>lg)wQDI&4_(_큧x­>4_ Ww˛?/}_  >$#?e_7Y> ?H@?uh>ƺ%/?|s~+ȳ7{ؾ}((((((((((((((((+UVW犮&5~0 mS9~ėZ΍hvm/S|[?oF)~ GOojbj`GmQE Oox~QEQE|A _^mك_~oxw5x>2rxVvuϊ5 ^iDŽ'j*4mfY~a?e?o)G?aؗKhț G͇Xa_!?OjcM??๿M7>̞߄bx*_xSO?\Ѿ o[G;υ?c?X[xS?r_|kĿ~&i|ux6OOx#o>!?f>;i>O5nY|>𭏇үxG )kSQw MO|?]K"bb?MӾ2WYѾ.|τ%h?dsUD/ ?6y᩿OeاG*?g//>!q}AWu량:mS5ʾ,Q|AjZ毯kנjFie/~߷v 7 |>/޵~>)uxÚ=l~?)Gx ~_ן-~0|vⶽ|=h|fτ-~˟ ~ x׶G|;k~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (9xO¾=𯉼 ƞ ,ѴWŞs>&mykt/YѵK;;TӮloXD- !?}w__$o^I ,?5;Wo+ {K~< ěo[ };ᖑχ_>B#gXGoM+_٩Vxuboy͵~@"?cO+/y(-3 WW/Ooo ´Ea/V_~ۤŢO_\i]l+9F_j?/,o~Q@?$߶/g?|2S$gw.K@Ҿ '𞕨^xGÞ6]ƅs{wgKًN{gg 4_O!g>&Q៉|7?\xI5/v~4uxt𞳨Q6ዝ'Ht[((((((((((((((((((((((((((( _7_ ((((((((((((((((((((((((((((0?߱O?ػ K_YOk[ O_G@$^w ;]C=+BÖ~ug2@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@engauge-digitizer-5.2/samples/polarplot.jpg000066400000000000000000000552101222557406400211570ustar00rootroot00000000000000JFIFJFXXC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222222P! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?r8cTR"H%[11zP506.O d̎3ۯbUbUՀ|uS~<ʘQ֎[YP&Gh=3H.V&IǫJHuAtd<#;$ǡ8?8&ArlP 62qSX qSt@/'_+>A, #isOhGi{f4hE= B̧<i` cڡW hؒQ#ӭ-d2#XƓ>8p̃iN6\J̓N5r¢u$8&;j٠1"-aٴc<~ +ECq6+hJ$j~lte!g;c:HxTPI;+iKxf%" Ϲ5-Df( qa<vo;sVckg8zO \aOLsMk5wf~~?w=oE{A}^:I*Vܱt-;צqҩh-Kf01;OHj , q%b&&0 +u@-b^Ȭ?#a'&{I}\{k[Tk-htnPGo"0[Q0I12;nlzzaV<&GÀ}%9((C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222N ! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (Y%ڮ8d $ 3@'1<ߌf}Ri7Y%"6+N]xXĬqd4 UuDɊNEGY&H`!:Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@eCsqqrgrHS4'@O GUP*(cah t ?X:Z??¹}?Í;h/Zl 77+[w$^-vj7mi-Nr*$J )*wqs ^H$;41%}/./<9$ev)$$V@O GUQ*(cah t ?X:Z??€-V?G@O GUQ*(cah t ?X:Z??€-V?G@O GUQ*(cah t ?X:Z??€-V?G@O GUQ*(cah t ?X:Z??€-V?G@O GUQ*(cah t ?X:Z??€-V?G@O GUQ*(cah t ?X:Z??€-V?G@O GUUkEҢе #,FVXBq@PYi?&ZТ ( (9<RA@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g/j/hB+?Q'D@PEPEP?O'UZ( ( kNjjV>n|\$[qG*M]C Ѣ/*s'?]0'O̗$F~0j-K}_^;ǦX;J`N aϾ8̟F :>q݈oPX66"7zVҕ @-.TtؑI WvG[%aw?*_?Cx*ZY} Cɕ0U/WM3o6h'Լ->:wzfȢ ncd@MI 9?=iKɯκzwğ=tE}\vdH1տM%CFXLD]>doQ\ ( ( ( ( ( ( (wEO% hQ@g?hB(( $_ K]PX<7z[Mnn﹝đ9WN>X+n-7 O :߈d Ŭ,W;;z^!_D|_MmA6đC8*jj4cDVc ( (&¾ԮAdݰ02d*ż?4!F1ƌGj8ѲSzyY{_=7k~X-nlnqO_-2Z [l U$U#u&.VnbCgpn q8jcnJ^|Qu4WAEPEPEPEPT5-I|M.ϗtfqnTe(>h08{V q\j M2ѥRAp =؞4SVigmdv;b#5O-#O: \zrt!!9 +,5+DL `GXb0Ӄ~cN2z+aEPEPEPEPEȽפ (G?o-hQ@Q@ﯭ9.LB$f$I IJ-AuK{K$mgh˷`Vc H擫&[K[O|O\QNQѾV?{4(Qx_Ꮖ.uJ 8Jj cprx񯋼] ϧsk"V ƃ;) 7y\e :q]$K}KY @'ڱPjC~rPVUϲ[.JE`0 ( ( ( ( (#n䷸%T)$r(eu#x j < OFL=h@ &kW_Q5r4jY@MǪثMg/.GLayc[5=//-ErPEPEPEPEȽפ (QKJM|ˌiٖ/|G٥iGai?>/|EGai?>/|EGai?~ s]_[QcSa*FePX`:EGWfq}w+ME泹ԕไ΢ +!ee*GPk׼GıA$Aafgn>Cӌ۔/j)?~|8`_H..Kily?pv+Ѿ/|S^J.qbʟai?>/|Xܯi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥h4?Mi_٥kQ.u_ W^վ_Y*Xk_NX5oC=3dfj~eǖ3=*zJ,3*m'Z}J_Icvܫ`VEGa~?_4?MfgSK#04?MfgS#04?MfgS#04?MfgS#04?MfgS#04?MfgS#04?MfgS#04?MfgS#04?MP]Q&fS?pEE# G?o-hQ@Q@A{}i=|',x?i6Iu}'WQ Ynn")1z>hzX60Y.>Hǫ6MuB=7du3 $_ K]qPEPEPEPEPEPEPEP^2'5FRayԮ<uFBdK ( ( ( ^_V~O}4((4ym(a(yY/0|@A=y ^~/W_!.Es $_ K]PEPEPEPEPEPEPEPESTu2Mԭ6K##@#N2qjKtMe|(|,u`v<4`I|Am1u.KޠVARS׈GZhi\eQ@Q@V~"^4(LEP\_BIl'JoM>%O$wj%eSuU,L7m9@5euZIm6'0V8ܪqk/j/kjZ\Ej PҌjkll2jԵxAF?E= -Kܿ7?(y< @/r29m"$/$\TP2I%pQ=Vk%v8}pB6:'_Oj'mxAX*(t[K*эrgf1J:#03Zw,hZvuKdӮ@JLQC~RxۏG0V<[rZ}JH7<`@t?% h?{{aU G?Ej]7?(y< @/r0y< }"Կ}"4 Rg/ 7?(-Kܿ7?(y< @/r0y< }"Կ}"4 Rg/ 7?(-Kܿ7?(y< @/r0y< }"Կ}"4 Rg/ 7?(-Kܿ7?(y< @/r0y< }"Կ}"4 Rg/ 7?(-Kܿ7?(y< @/r0y< }"Կʚ52MԴK;,O3` W) OSI[ԴXaY ]b5Px*8H7_q-RN}"ЫRg/ 7?(-Kܿ5 .fX/-|6ެ pOdWP<=VKngDA+l$qsr!(-#awwua=• 2(aX ;l?I5o\7P$1 yXƟ䘊v7=Y".VMUi%VS+x% T6PȠq`0?rL ơCYm; ]1ɤ_<'/$dz:B\1$ ֜Z\kZ_me (9ٳ] G$dؐpqcFtsHW\N;gV T-.VXnBJI` A GBE`0MlE]YܻKY'\O<5`_PEPEPEPEPEPEPEPEPEP\_?wA=Wπ+{{(YYALoGtTV ( (wEO% hQ@g?hB(]ZѦTZP $e 'M=+$~4ѵ-VWc$1;Oo5t'fzQI熿k ((((((((((?,}RO[}&_Cs9s,;ޞwV ( (wEO% hQ@aSҥʵEX-Y?L?E{hK]sWfL?E{hK]sWfL?E{hK]sWfL?E{k񞱠xt]+QӵioVf] z8فy2]z4>M"HR/ Jؓfb!l+l `/CwQ/eG {n< dI#^0hi%~wݑ~Sg_x~xdcy""Q,D0 {V&Z_"5gb-/}u^?2\ >i >i >ic:+\=Ŭ1^UbBi >i >i >i >ipEBEʁ &z2VE0 @eϮ+3G&Z_"4eϮ+3G&Z_"4eϮ+3G&Z_"4eϮ+3G&Z_"4eϮ+3\]l,~2j[iuMђIb?c!@ O^kzMy;OL?E{hK]sWfeϮ+3G&Z_"4eϮ+3G&Z_"4eϮ+3G&Z_"4eϮ+3TurhZux[H7ͣ]ƋY =I ]EUPy1ͬo€6((~2fex:gm5)P 62r6(Y;%}݈\WZ/ػfƧf!~R6z.iE[PhXԶ Ss"~^yZ襮PEPEgæy^!ռ o+ofݜ;{ ((t{+eݵ̒G]l瞕@Q@Q@ggEwvݸyv'g3JТ ( (?DOkH͞e DK /oFʕ8#/͡3(PEPX,ouM<>=Ѱ; (}zLm6 KXF,x$ƀ.i۵ƗZ_@QeP#8 U( C>O%M/pmFƠXH!#+2A1t--Cؤf=IbIcd^JtZi{=2K--cFI2?soʃLBe+;؂+(( |KK[eDF2pr0r1 jPEPEPq 2E,nUX6e8==ꞙߛ8>pq8=} hQ@Q@ ’<ϲ%fm-;U`OjԼK okzm;䌀dc@PEPEW,伿woh5k%G R<<)crziRv]NS Y3h$#`pÃ*b0 ( =wGӵ:U:y# #s|KK[eDF2pr0r1 jPs̶BvA,}$?2Ote++x4P*6ݰʍ9H惨^]i~`N4\b㝹8Q@p~>n[oy:=[ l\eIS[ᢝD_OcLtdMDdIIպRrnOv0?d+@sXg^@Q@Q@?Xm|?o{iZ+%)n^a!EfW" PEPEPX kk yʼn'N3bI%$I$/? ѶQ@Q@ ߘt5 !Wf'j}萠81j;W5iXfw1'$N =UFuQ@Q@_I}i 2Fw+ lT6bQ8P b( ( (Ҭq+[F騾YQ{OҮ9BKٮYHS+PHRB;W9Q@Q@,m級xi)Q'+{}&Q[9X9$GxՂ;p:Q@Q@}ּI d.'3#+( o23]O#iӾHľrI.pF۔8Xp:1"!VA"曥i6 HyY^Y$lw% '@Š(+𖕣hڄM)[{&s,eX($'$Nz@/Q֐Γ,MjrpIHf)+b I2Q@5K@ԵO+V)lg3X? 4쯆zǚLzo{yA`w%hZ}[Š(+?]{SI@PYi?&ZТ (dσu:.,HQ%1i7dpN5_z:+]5h\B5 (X` q5]Nk̗67q[E5vo* \.]WMG&+:"cd!dP?O'UZ( ( ( ( ( ( ( ( ( (8/? [KinrpKvu]eYFz0OWDEs((+?]{SI@PYi-ޔ"ʰ?Ӻ-}} c(A~S4>g>߱}} c(oW\/»Kh[G6["#Ƭ= e@ⷃnף̗Z2|;iY"t*BG=AIk.H펾$0[-C&!*F1d'+gxsHWZZM^Q,,_&<;L&4Uv7`d΋eVrVm5>5,J$$K[`H? .Wx}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3}} c(A~Qvޯ?,?YϤa3[Ɠ֯[m6Pϙ/$: ­xCVͦq772\:icر'v mQO3sG,?¹>g>߱}} c(oWG,?‹>g>߱}} c(oWG,?‹>g>߱C[MQeXZAAhoUR2 I2Q@y"AZx( ^@ Dc; 8?('կɧ Es(O<5`_PEPEPEPEPEPEPEPEPEko%ĩ1!y$($w+׊|uu!DU͹ qCAۑRztbZS[GOn$W8Š((?@4E_me ( W!N.k0u !H FsWN|RS3~)״Z{_i; ԡ@ˑĊT*,1ӶF jT8z=W$g?O'UZ( ( ( ( ( ( ( ( (2|K]3z$ڮ?o '8hgm%]GGoEa+^uzF7?e/^/̗6đC8*j۾ ( ( ^_V~O}4((uޕwm;Qbdk\aԎ1 +KkLԴ۔MJ`AAWEO~gGKr3' *E-tQ@Q@Q@Q@Q@Q@Q@Q@Wáh4Im:6 \!Gp2˵ ^|:.Mة|?y57t"fEĉN3,88#%´^aEPEPEȽפ (G?o-hQ@Q@yƣ k Gۨ.o;n::z- n&0~[?}a72 8888Atw9<RAY((((((((j.<GpR2@]Yȑ`Gz^F+L>תM93;X9!IlW̕\EQ@Q@Q@g/j/hB+?Q'D@PEP{}:KfʐfS4w+n#4.E-6-dQ'@?$y$y5n'&e(((+?]{SI@PYҕ]@ӳ-}_O&K?)ӹ/4}_O&/5]ou$&4 =qh{H"̯ǫnͪ2[OK[:Bv`V_u KwyJ,vl%@Y‚̪ R({H*/Eiw:09Zۡe`0 eH CV7j4`\1猌dfYR7DQ*_gk%ܖ_6#$X]O (? Þ-tK ldV$˒vqF5 PZu]WF(Χ4}_O&n_/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/4}_O&/;\ښiP_:TPGq*vr:MOQš+o/2^~nxaёwB(EUo"U3xe.qAr*х8_O&j֕Y9VRR">/|G٥k;Gai?>/|EGai?>/|EGai?>/|EGai?>/|EGai?>/|EGai?>/|EGai?>/|EGai?ȺM&٢#3^FAYi?&ZТ ( (9<R|Qxܦ$ÎHrZR:SSM\夵mX O%`Iϙ$] C6Z:]6HGNzzl6#Y{/ȍWVo =NѥRHʄp N=;7\u7/T}%ٜ;Ip#XVUE)&_PEPEPEP%|ON}ĖOgoXc׾3:ɇNy~##12.Ҏەr23`enzϑy[!*kCk'e72;~G7*}F=忊I%ijwV%0?qW4t^Wml+79B8sAIqf_PV;A?pN2p$zEkyG1B#y5U*0Hl>}ɿ. @yxKbhKfZL:6Vx=᫛5}zb&~($Jm8%>/p6zA}ΫG𶃠l:Neg"!bDp'$䌞kZRU4IX( ( ( ( ( ( ^_V~O}4(((O<5`_PEPEPEP,ė%W/$XNI$I'GGW?_[Muج Я/&m4D<"GOQ:&97Y((((((((?@4E_me ( (sjm5I HUciN0r0sEn6q+i-fYT6*H8r9<RA@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g/j/hB*̯g-o9z?@ Tyc6?j;X 5Qy[;#B#؀3¬$ڀ3㻸64og$WOsl_l,**r2+׵^ FՔٝǗUNȒ`?Hr_hZ^i"iHBFUqW.nNki92Fs X<=i?g6[yju߱ǖqg5kcƨTyc6?j;X 5Gύ??QkcƨTyc6?j;X 5Gύ??QkcƨTyc6?j;X 5Gύ??QkcƨTyc6?j;X 5Gύ??QkcƨTyc6?j;X 5Gύ??QkcƨTyc6?j;X 5Gύ??QkcƨU^=bN%y4{nFq{Q@Q@V[{L}II"[yS]E`vI  XMlE]YܻKY'\((((((((((((((((((((((((((((((engauge-digitizer-5.2/samples/polarplot.png000077500000000000000000001370751222557406400212000ustar00rootroot00000000000000PNG  IHDR NeҢbKGD pHYs  ~ IDATxy]}w;Ν$Ǝb"B*a%HA fpX\$Tr"(a8lJ S(2 h;3vwӷ\=|Tgy޷|=@ x.@ .A$@ pGH@ ";D"w$D A$99kmw@w몪UU5M7^$!R@Y׌1cR*m;hkEQxX# yT\V~@k949G)mF)UUUE9d2gCA$Ezݯym9EQ!'"A)uΝ>pkmg@4d*M4MGիWs\B.EὟι. 11Y܋s.㺮)]t߼y+@]׌Β8883(Jtz!,/wrLDm(<(ڶR2y_@r-APRb I)v]v" m۩@P@ xN[Q'w~2m?,,#|w}W4IjݭZk @qÇ4dz%>ι$IʲgYv||wsXk-x{Jt/"?~5ZJu.b8v *)eZ_tST׋Z^ye=>@ ;ʲLDkMWUZ>|}ZGQZ[.]0^vSnߝg&<pIC|=[ͼekUO-  tGNq AJ!]q 0 4@<QRWdڻheY6:5hto-M3IO.E/J!$t/CeP (ͪ(H Z`:rU )([mG/#[x%.Wp6I9C âpX.L@֣[/n=`v[9C4yN rUAMŞ(xl ,W*D~ǓdwQMZmƺ ; "qy˛tXow96f*vRƪcy˻NRʺ2'UV"6 m {PV$b״UxJ64ET %:?NZ$)ZFRDg`C'gƄɝ۞[٘S" I| A,Ѓbd1% {~L{٩ЗG{k{SEyT"΀2\YA HY ƸVp} `/GȃX1qێe&iNŁpyk6p*sրKP<2xlT(ErXqYxTY糶OOCk 7;2H9z3t]ۇG+=O'~vsx0Y=|NƲ.4IgGɤղ&8" AL{zC4M[8Թ5\Pf2 X )Uc;;)LN9=YA`K \F)rYн _~ODP`(5YP|=,v] )@z|*ʐ*Czx{Sd>lVSx%lc Tq}դMH[֣w[-qsj7c,TbJ:`rFČ7,1Sr40V2PP*k@sDsnLv{plkxPqYQDJLs\^ N,=pJ9p8s/Z Öxyׄ1='MӦic;;;wzg {T**XΝ D}mx,,m> h\#īh< {-eeX2'≃_H# orz4P_O>~pH`atƽSfpf< &{ TUr^z=lM .tyeYeݓ !eYc19(:x,r;\VI/aO>ȕ{XWn,^z~ӟtՍ1vΖ`>#!x0ʏYѬbҬڟAuQ_m뜋X,$ 9缮kcd2"C!@ܲ\Bq+KPWTD)sk.km1^$ZأOk0CNP=xa6" nwT$~ 7 2RQXh OXm4U@U?ǀ~׵k_r1_Vͧ #kR[dTׄEL܋sM{)e4dۡnN3ZCBys5WO3T ٷ̛.? Q׭!nmNAO<&<K  YWũ]yFϥ% b Hf8[\ot{2o?.8Gs)@g^0z $+0~$P۬*> U +D˩7M"jB~C,WѨ/t~Ga(uSB?%wϱݼFAǛ YqxK <~wo<s?oJgZg߲|Zt1#w˜G=68b|WaG?1ꪲGSu9KĀX t e ^t0S(M___13o~TNN +bs5%# gB3I t $ͯ; |/ۦcbS!޿ޟK9qm+!c廙7:Pc4I~oţ=dWw7 7 C DM=Ңbz _r9eS;2@ lb Ż @Hi6G,$`'޽o%24}G=(~z)Z`rxٙ!Z:KT2&$q$N<m-s{w óprw_&ra]ɢjҴZmˤ4 $ԟ~g}'gk8M@ `9CݕQ(J!r8_ (bãt{;;-2 ~)mFn ,ZD1I8d9e һg! @kRQ9Gϔ-Ip'ˆJQ4uOp:%ПyJ$ icпwKi=5Eh g(1P{#H(ÐcXA6Org&Ǹ3`Q(ZoFtr>Mv?5.5}38HՀP!a會NsxXc\kMn'a Ӭ6љ167h..kCmۈɯfoؿh=v_P 1&pDŽLn};u3Ͷr:8Nj|:,.*Q: -o$e}g.#5OnWBu An +`(=8;nx!a0 &]}gnxYĭiܝqBR:=l8V$܇+okIC4&_6|{*8GV|^ZV_jOq1^HzY; c!6YO AοHR8i<) BF YbU@B0sʐ*&a_:<~WOx?N3Sb^Հπ10[=uP"( &{{c0ڶOd^S Z)!Gz`3.q:9H&8'údBF#YSmPsR$"tE Ui GrXD?g1ؿ~s]58oWpAW0OAQ H3Xkڶ3p$Yu=-f7ZOun B^A_.9Rvmvzћ?1"(rRFdmR p pװi|mYpY>hu*@7z4 k‹KW<#\S㘏n`u ep!](EUgS}i<~w¤Ē&9Ou7x Q0nM;[{ߺyO,7 |SW mS XV]_o!VN ;-6P _}w;m}yG .TK|λHb㈔|T!`|h~8'H.FZm^ IR8VJ={eN P `=T6 㱵wӯ(G(Pt9"Ae4rQJ X jB6E bb7ƄCFm|/@VxxsH}{FqP`G= *ږ9rEƒjg)rʏ*c&Л8@SP Z2IXbvf˟7\VkDc[``qp1p|@9lV> A! H@69!*+N:<ߝkac~u,6^H-p ;' \$\/us#U?(Nǀ1t&?]( NmW75p8*Ý٬zϬi[wove*uUqKa'ٟE,gxQg@ lP/˾ereU ǘ{7ƲZEQ4Uӣj3Ftl_ °+~l^Ot AFB`ѱaph0+J#Dl(MC ywC+f>z=`%ai86 \nqVI9֪'udZiҍkr(N'_5==Mrؓ a9\+PS % PJrqd0 l۶Z䤇m۶`z\ӎ @̋de 8;݋),G1ɄP'8֠q[i%Aq^4x/㶨iUY!"DC*[n4.ZZ(A)@ ma@̒T b_єu;^@LZ5BG Tcp68YsS6MIޭy;mXjA{Ƃ Z{M 9f3)eEx q4 YĭJ@)8Gҁ>FD^/â,(?zP۶WŒy|`nGGi${I*="H$be%yPFd^H)@K)_ote _ގTaZG6$ q&ob< C$V. Bι 14MA "EQ\:::v8t?ՔR#45 Y0!W+5cl2aob`zAb؛(k7Zo|\^t6'8ERoķ+cXD RPp?u<.˺5*lv\yA^6Cc׀^ TxO0Cpb4;,Հ1F){{{0\.sk$I.rR;❃{_̈́ٻR $!Dc 6PDhyr1)ǽ%,/ ,0֭Rle M2 pt9I3lx `i?:%Ǎn#Wh'M;:ϲQM4%TI$$i> `DQ 821# n߾ ~ODHW5q_v?D" 'KZG\sHZDT5$ZC n\;+uS5rQh Mu[=fT}_6OIOc`c8T s}ԧAeƘ7|h8F,cacDGǥ PWt1-|ڳO5_|x iSZ-x/Z&?>q3~yy#oQL.cJy#s_g#8afkjzv. oX=+mqݞt3a^p9S8Cqv5hc b18 v `i,G,I" 9=W {0{7uIDWm+@i c8,*Oʌ92jF`U[A@ ux/rQ`!,,ZU1 sLjBH]i1Iv6`X% n9Fq:‮qޛUa$qkښ8};Ie$ILZpm67N'ܹìA{ ZA@Fj40z:_ IDAT/(1Qq*Ef0dյ*.E (+P20 nIQ@D2Y٪,$ՀqF1WiUuD B*U3ZP}0ЎVG0V1uA8\IO4HDZP {"KYp6M@ +"v@J(x;kIz@n 8-G1`E uiMow: h.`lwsk, k*wfUemUp.9]->PUbLIʌJOQ15k IA"`EU4h Ӱh+X(y0Z$[ ,e 4X,` ,do߻PÅ.V!LCW6RF$\/`Ba$9 Z4x@vu';:^Teeun8A<*? A j# %1t:l!(y`tq0 Pڞ{Q|45ܦHrhRJc g/tRe mk WW$L {PZHfV[*v-aVic< If4[o_(e\TV%V F=::8IoV|Eo->WjM@ėnZ;OA/͎/O_z}Z R9!z\7wSeΒFf2Tղߟ}oU͔ 2dܨyf T^/r] 4r2f"m Xvj4GW, NQi\v*ɢ(kj:ۣRT y/H@ &WeIa޿+9wOYk[%“_~~ r(s \28V`!@}*{/K7H8GG` $Mh[*%#CmJZ"APjHQʲncVD5ZNOcuVGG7ˉ] D^S@|W|V엳=Gr/0C0 8X0 @X:`PQIJ0i. ˺Hx>LJí0Zk\YN!;ñM?+3G!Pk0_ُOTxO 0ƣʴE@"c 0[ƽʐ,ˏZ2/(i@øմӒd-[8DY`X^zq U"4:DH4fK->Y3p t-,>oe8do/ OFNFR 8>G,98Lg*Z`,ad]$e0,SJh "poq̪ !$\.1aCBZJ g`ݬOIAEp/9ɐ`G@dc=6EޠI[.( LJY2 hʚ|'$(4 5,9, eb DzleE.6qG   0!CèՁUa~O^b?J D|Fa" ʴ9eU] $j8pƮU0`qq!Trc s.D]UQ[cRBJg a.J@Xэ``flm m!rZCOtFK D`sȁ1v5i0I9Ũt!MTDuChBG8(°Vf`Ư *:mB8_9qsn&sxcx10R`@q!9~ث痸8,M@("McM''{T~*3*Ð9B@!N`A?SipiΝLfJ YuE|O$op8BORʲ,á rd릎POxS3YDL:U ;:7)"7(5Ɲ9-*)G8%VGMc ,K4?_0b$2 )W_[k8_3*_u0}bDxILjGY^[RLふB,3ooSYA2cM\ۺEѭ[0 `4{;u떔2MSƘ'ۄ88{GGN=#,H I8]p,K{wF 4ڦ1ռߏZUaD49ΡIjqO~g>_zgD]sn_Pźr8V3]G%AUHus4azi l~g\S3@MidƉƭHkn|<4FO&}!`v\ss;94Ͳsؗ%q%*UBrk@^7E3毇V#glI@mW4iDsgVpm]5"BQa#V/@\b/=((Z<cC I;kH r$am d[1[&F,ip#ظEPs *=[#'R$ELO(L\>ܿw<.$U`8͈-ZCX-$ym-K1#ūutt<4okwq۞xٹ&) )C\eư 1Gya< vtt a:5ı,ip@ԼdzqJ"-~/n8N~ss4uttd 1ASX{D9tǰHjS#\65&0evÎ'0fvUFOE! {+l }(V/0aqppܪ*IksbGGǹFqn4f`9 0OfDUҤI^K,xrp07;;8Ӓm;::6 NΠ96{B $,V fAa[\7 .O'U`7M$>6pENht"; Y1荤. <!dYdH.KUE=5;eN±J `bZX6E~5z)s}ppD`_n3 t'C̦) 08vf8hQ&>O4 ;::6E>rZiثĹlp,,9P9ضEaUVJ+tjGGd_/x1(aӔ4j>%L8N#3JnO3 ҵB[h`|x(Nk(-;:^" 3l(@ɼpk5iJAȭV$N ДYޯ$Φ@v' #p%utxկnq&ʁQ {ᰵ5km6KIO0$ ; M1gBc@(9^ߙ~J1L^2(%tt(8+$X4ǂcF/9Bu8^̝Ox7$88rUWvU/Mym[[.E-e 3WFմjHf-nMr+ r.5/o,+ݲhZz'[Aj+i{*!+/` iяr+ lsm]MgKh0EePPul8Ȃ֎IyCN*Xwc$ϿЋ%W(x4Wm }/86 MYLK&& qzBP9`.fGюdc,io;(S)%L>3ϱ@ѥuGGSA$!NGS`@ir#%WF;jX ӉXAPR̚_n3NCtt Mc]~X" /˺ip% qӘJU<H`.З~W|?V1CGNjiջb-|:v$֏IJsi $Zq`j\$i!+s BܾK.Q?5THp0-PP'aps[VE۶@Z+|ADeY&ILDsc m |σ"䒯b+' ,1²(Bym]CD|8*I(R$ 1vtt$K=,Z(A5`!nry_ޫ$:,۲6otDBXˋx Z:`A`l4=R' * $Id24MQyXV0,ˬrkk=g\cι_ /S.:D _\Ael`s߾S~ u]rDZEQ˹J" CZ @)&Ѱ n=2rQ,@6V"BL Zq~|}e302q, F~GcO8x2Eia^r*˲m[[[eY/XifeY/OMH'N ? ڇ^k{no-2ιZ~kۖ1Ӽ\%ᜳJ)I!6ۇXV^P rP໴߫H[dunu] `x{YPuDZk!$p^!RD#(Fsqfgr?6a^WQeeyC&q'5@țX #\~}?loo3ƔRm>{vZe( ֆ,,t<`K{/l(Na WiO~<,vF?4+>]oz0޸+ ęx<8<\no$* iiڨQJ%IbY.$*fz7Ƥi'7oܰ'IJy XD hgXZU~liAf+蒀"jwww1Oi:WI!ʲ[k4F[[[86:+i]k}u NX46JH^w~߻oQ?+J~hp-Ug詒XXQuRj4 8~@sBֺ7ozj؛ظN0m^Cg(^o=YQ"zfy/ ^մmk/y|xWdљ9 o0* MEYH76Xy SVŰY3kA3]$?[Nn0AX,7.z z$.˲,s SXEQAжn8Zk?4Mv{޿.pnT+LPn9K.m\=Ģ&rU=IAP׵?i~3}JZZ+88I ;F pKm (K̫۟BLX؄-0P\j/mlFc `6Fs} %9֮}@׆}όu觷 !Ⱦ1j6I+ lA6:t (r|czZb%WRIh&"Fy[IkB!b0Ƭg8oP@ր  kMSR"@-`kE&U/ժ,!dݛ,$ŗ3ь *9nl EP;4&. "RJ(/9B&ya! N<wn% Q'[P8Zk~%᷐>lP5r[üh IDAT(\$nke5Ҍ>>;W\|1^g,e~Jg8  Oޙ)KqeƜl"=tҭtB/wz"ٻFUIqev$|<۶=<<|00y@ky$0 5X G>Q?%IЯʌE`,;`!0 /W-T0~T=Ƙ771ι+!$I=xeY w/Z&Nu"L!wE2wo`h/\|xb}PR˓ec]z^)eY=?PHPanUv`4zɟAi"Ik.>~Ztﭵ`f 0Žu;|uh۶>;MSR[޼=i62?9~{Yxރqid Jr: 2rl;`-5c =>tײ,}ϻϽ_I3U\|`0v0fh߹8 (A:5Rcg9H]?W">w>KkwBFm˯WXbc,lەF!ZqS4]C4}$sYzm&w!Bmarp ӌ#_)Llvc]CJJf4%79Nխ19'{JkY;HH4M& 0e{ <>+%}Ns4],:%J2υqaZk/ym'aYqZ_@UUci.^xqǾy?7Y297ي1jqBɶ ;:pAUUGGG|`isնmkivooGr霛N~o̗&U^>;û?g9خ*8նySBg|=.a7SrP/u$W-[i>3#I6»'}/N!@01۹T*`X~/8}ϊqn&^S#1i'|.ns<>(<ϟcҍcXO׌E:D(pq\N"x$V1>3n߾e۷qjXGL~`wJԋ~A]ߕϋΧP|DrxDa^kca Qp1wPժ@hqv_h2Q ^MF~\?7nhzL{;mqTi a1;o#|:aPx?eyfξe]oivww> Rje{9矫it2˲TJyhy}j&&シw5`OB͛LF BK@-GA‰7_fl(b{{˲isaKy}-q|;cЪ;U@Ĉ"ZM_yuOz47%uSSCoF~ig|nx|GeY[!]^I;iu V+߬jKo}qכ^d\c1Tж˒nݺ ɩU_aЏߺutNҾՠx齷4!>wjJ)`0X,EQxG1&om/# s6xY l/*%ޛbӋFo^3Ƽ~(Z[km4M=xJ??V>t:[Qq쟫2N'쓪>K/RsceYJ )x g\'6a@lkf*h@3!DED䫓eYy|ZWP_F ʺE|vV1I[{, qCLrXfQN;D@0 zy>&r]KkMDgd]=Gu%K_|ݼh{{{-F[·E^s&I)`}{XćnE@eJŲ\WoёΧ+/N%yF1Kx/DY8^VQ~^D4;YBq7MX,GO@^m^p]?iEboZAKcX8ZY`BF b{N\zEN:ʲဗ_X s/.s>o@EcͲlwֿj&ISJa9c t/q8WaJ)F-ueЇfp4ٹ*!`0`MS\UUޔo/*[y3-8`@0[YB0 -HJaBKcI].yTDZ>z<yX?|հş7Löm;fp8@>j ނ0llY, 7w?JɪZ3,RIrB#soP h>?|w_or1f2kOa'bȲl]'"=#|ץW4>}hU P^(8%mUOgK_ߞ. onx{ύ{W|zI3L֖E6@]fNp`%q5TAAe IF_dX= ;Rz%sڵi|w_ *o:t6g?-3Sָ0Aci&qƸ0p`'6dwr9W ^WË~%XZk,~ X$|}%'8nnnzK/=3hX|w}( oWxSq h|rAC;]WY1Gv< 0GcM,EξTvF3qz;9ry;wRa\_g@Pj[ N$b&ӗ^<+Yz=k^}eOzʵ˽<ܯB`BQEQ\.>n0>F,Kaf*-ܺqHT: %~T忽p:k(ˊ)QॺzBʲ\OzgsW<{QUUH4M}xo52Aj$$A^fO3 [Z0._ׇ$h[ir:IIumc/az܋'|OqGQדPpCn zsD27bZro7~e$ǩ'r-gCW;io3;I,|f>v;T}lhsϬ1fss9ZsNgs'7I),46G an8p=vIIR7YrxSn!qxlU#yj2]4h4fЫ~i~ڵk^h'^+^~)w GdX~R~9677rQitD~a;r};h4M~~ڶ~:w]7qK)rm|WXȂ8N;.!doq_vm0uC?[?ޯƑ(9p$igsOއaKSVJtZ4C#MA=FY\4pje"ϕ/ık׮v mh;(UH[[[iv^~WP~efrp9AqM8su~ [,+WZ?БRzpp@񁈦i|.M3>ض,Ǚd4ye |NT;Xk}7ouP4LxN i-zoL䏇Ce\j EY(C:>ʕ+gԚW[܌x2~t}p… k9~ 7kQ!`hvdp 7PI~B.DkF#k7g#{y;ө}fRsέ$ժm`PF]x/J)_(7oZ`r'xI<@fwo?òZ`wu$*hc, $XZJi$B?,gp7s4)1u ?88~]^.>~?>>˗fcmoP* UU}Un{ku]C:Y;J)b>d/p?3I^wv^R^x!2zr4Munu/jXpniDzj@@Mzӟ8z$I8Z{yd$.\`>oll^v표W  ^ZHyVU$%{T1>uw9R~6Aoz/OY y9!+yYK2pc=V:^π!4s˺cQ(5  M$Icf>׊U'e[Z+ywɺ/ożO`2j9lb4fFȯ΋^(peBNt=O-` 1wƟnZr0{gh(d~}8ONOQjo. c̀6T+b@ A9;8r݂pJI@y?qVP-RRbX( !q++W#6!oဢh1SjlluS؍h \:'0ۦ@yqq9)e7VƿhZ?6dض8~f‹j7 g@^p ]缟ǬV`[ hY /ts B ;::7ýy3V꠫:1>Vu`/^<3Qq"!xX5O@0<(.%3ˆ=s0T I҅"3 CZ9B/9bYPX,~??Q0ñ!UX\ǓO7^KqAj բ9HpDYUđj `,05ItttZyUZ $'Q>>_0r P')^Uo8I4qD_j @/Ng2!F󮺩6ŨΑ^a4t,/KPsrxU*+9FX녂>CYVR_w@k],[|pUU_88?JH(,Vsɷ9F)RQ("& Cg$ 텱YNX-Z7 D_ {(BXF;.;^xjwwBk5Qaz z4 0afsJ}3z>'HP ={Oagbȥ9o?CE[[[ljÔ&h( q7=@ =Gb .b2Y[N'η*"Bh?P78w粸d*_e\gopVJyeGab38XpnťMlwOIy+̪|\9qv6 CksHYVea הK{qٻN9ب9Wsn6yYDYGG}eugޤ7+(Mj-#1sa{A8he=]m/jmhۚQsK9E ({{{az\Jidccqjl, I8Z-P.aޏRRg$sZZEN)@1v 7CE#%AVw_.Q)ιƵs۶ؿ8P8ˎii%'r]ޛ8C޶f9q9 bHi),[)AV/S,5^@mB^4i^Aw'˙9BrQ H+:^#`q(HcXm3|bufLKQXs)%x_z{tG*10,v'~.$IMUaXXg׍dyDg>%޻}]LY9m_fktOD~ZA40VJIW+ɜa[M輦do|l_O&K^U}yWuPRyӶ`<~5##CNJozO m4^y IDATqз.lD)ZlIz4R >.[%( AL$h4B* w_L<ꗺQ{¹sX8*po%cZHGǃV34 oD%̲E$xGp rIA5pZ2"(C"E4!>3E %l5{.-(-'I6Q|g^ē"ni VfGiHz5eYi/@@ .tĸo@AU«l+ a@ Z2%P3@73qrK{d~|yJC{)A$Wpfe6'C@ʨfimp05A,,s_b|l"g)DU,rı+6$h 'aɋ(`>'x"$MmۆQ⚆H*j J:P B`-ĭX::mYj8p7ߴCPMHgoI@Ak0 !B k5sw_cg (t5w ,'9ljuD E0L*XU xVr~ `/}[x{PJZID`Fy+W0Zs0 <0`[YGDGX!.$ʶVuPԕMTEu%{d4@ .w&}[2O0q'=) rdFւSp8PB-8C0A /jiX8F эHL;=-?FM`AIX (NDqf]+X-Yi #u@ TmhC jxQS`Q$2<hն¢(s39ܣb$@أU_Z!2eT垄{١a51`!>&,@``Ā8@dfla"Z=4[J# eh9R1:ٻYH*XkCBB Z+΅H(p!)ɷQ68|8)!4 <UIA=q/FDfA`A(!BW,EQUUqAQb W8O@Y4@pXhpSuR @2pJzZ?$Vo\, Q`'~lo'Z(ꦌ@pAR1ĄPEY.Ctgc>6V=)^:xŲF#E%wR8ǜC`rYn3J$%fs8whp<έ͜43krE~߸T( a,Bttn豯0\JQ[@c$>E`;}߳/@9#!,rh/I3QGo=h|* 8#Dϭi0rS"޶*6G_YfI0@NdFBm6DK:٢I4,n 9<x$~gmEFC^~Y"jU7?tGcT5 (ʑUIF vˢx͖P&@X-]8ٟ΁pS0 F^@ё9U' (EWZh(haU-@8]?lV؆2`0,]DGAQx}1pg( qj\a8:_1P"$#n=z';:] '}&r`-s0FLWEdZIGMc.@ڴ`\z!-- [1 n:).dTW ܹo[qaw2qAPtq'(=ll\%S |ծ,{UUn0ں6Ru٩'N+4a,$/ @TdbѼb 8pԗ<G@hڨЖ  _?L2:gU, lUt U챯ʉ3ݎI:qc>1QH@t$ٱ h7Ny%wc::N$YA)ii-#ItYQq,E(l]z0;຦juZ8qF=Xj30V1rFzKO.&sPXugG Á5csea"xl Nj5%|49uUWa'Ish;gp0W,K BqXPW;R_Vo50 @!; DԪ΄hqq` U) ѦBA;gWpsuYŻ!D `h#BW86Z xeʭ=|$C;W/r ƹɬ e 4Gj]&ۻ5BLj"h C  :}wc@ pZnqW nxv}|2nOv(.sEP+ ZsQiFSТ~yE#y@Rv%Se`-#n8sHٔoog/7i( (-:IYA8DeI<¬;o4V0e/P_]99 RT`.8FBSb a^VKqn͍lj>Hy8ڮb㩁nFQ` ZWv㿮™!vcItaRg*H@hs/ggL/ޜ }uLvZGǃQ @pSU k6H&`ceY|o^$XL*z@XNL$AGywNpi5AP/7j}P#)^׶vJ::,we "@z1m79U\K @1&pqQp~ ӣ#uC'2r)̶nUN{шToWAT 4vtH;}t41 `6[hx= ZҰ&MM( Dp r@8}9%Å!hKBnn ߶K{X Vp+i0W L?t5nS::>N8@cSAA\ƌ4Q|L`!P-p%e` { pKG %H; ui!?WU&g <_B22aGn=&]賣㣅v |(^R^~/Q 'tLN'd OA)AE}rۡmb u[4m0::@5m+M)׿\{Pa{ %i:P`*]˰7WnW G|U7Nz lt֣,YGG|ˊ2K*[_+FbC\oveUaQYTaD&I^"ȷMgݝ@(V,qU>};OsDUUVc d2amoo{s94M)UUQX زޣ1~wc#Lg A F -t]lǣՒKt/XPɠiO])_ZO~`penn3Kc#q۰cNލ0G_'So$(2z={{{ޥZ;i۶Ţ(J3ۏS zabp?Ql5eGQatOGk!uє"ՎCwPߞFw}w3 1WUқBy],pAc cZ;LΝ;׶RsN) |>8<N7 qMQ*fw9mڟŠ"-ۃo%rut|X&(a.7z뭟NEKR&޸_n̈́ hk[5@ˢ"} @ ,AgSpwqε9'l*`+j$I"_`77+kpaUsn%aUXt#O;Qc r䍵}'/+Q7{ R97RUj0 Q7uʣTl3<"z39QfR`0pg&քmT*3MhN"4>\Of;CQ{^䯣DnnpJw>{ eHr~z= ív< 0GcMݘSˌ:_1@@ @ %NJ7.*K#BR08QVeejYʆ;h ,r#pp֔E~v~fAW`䉒1])6\*ׂȍF#-@tt?حmBj +  m@IPcfٓ+k  <:@Q eNj ~h8i BC]pw?fA GaFgP45 FACuNkcLJ ,` y%`4ipWuK=K(R I5` `lc:Ź-F!@$]6w4%]2IBw qe$Rb qt77)**AZb %8gGqdCwXdkW?UEB^#`%nL(1l(xC=1n)o㤿& B8,y2Do ]9Ȫؕ?kkSmohsy43Y1 } .d>qw~qU0ʁA"eߚ'U7 Cy]e-8xZ1&(]\ ʡAta$ݽ/l[-MѥJX$z) %qѳ`\a ٸ<粤\@ qOãNg$1%XkSX̠ d 5ջ7ꧬz<aR䵊B%նAd 8 C,Ac[GGM@ahOhU AD>ٶ,)ճO$bUe#2 9#9 CXN6 K'Zc}B{UHFF}QD_Ou⟁u6-`^eʛT:g⑦3w:N8^ eB"RcThD_KTO,ڝ,EAiDͭ ?﷣cX"ٸnY\>4K%q+d$A =o!H[ }p* ZUǕ2s8ǁKI4B񅺽*0t GE=3;u뎏(dwP%ܲQ561OVtj39<.m_$\QS`4E/@f-L:#qWqhqX~z`ee$ fp1/bd~i R7_Q@:#1b8t1Z|-4s&. '!j8A;-̴B`zd]@3  Ի9Eú!Ad/sË"x~ǝZ~K~v7S7KG-q0_>}z:d`r^` ~4b,`=4 Y@@n@Q8XuC;Bg$ %޷ cZ ">ݏdl-|E}yH~q¿SM  5O"d4`y8b1 b8,W2h pPuSDp Q)?D* 1rN=X ELui@U _L^<6_ʯ3zmQU{DwL<a&xߝm8[>/NQQqWH(( ,F} zJOK7_-A䃝|cԧU=|KCƃX,nlfR(hLC"P K"ẑv .`Zdd€q: }&fDF$A' H0%QD j`P8ӧ{:էoo~uj׮]O^kZϏϔ3͙©+0Jr(E)Gɬou$ ߹tt׃GLsOGV8A:J~p05Ʊ DK |KcZ*:.&I6uGeͶ̲"kK9Ғ{tQWfkEmp3U1rw֏{#$5vF{21d@+QAkڶ<"mb-yiG@$n FBc jh$k@Errx&x+< Fĵz2XZd~GF0A" <3`auEYE\ܾsqUF7N9$;.O?j=HQ[J]_[1wn]>DL9pH[ȉonz*ISJ8,NɈS Da YgG?4 QZ֜6"LBJ@nJLRܾsˏ{$]\I "kL)qj\]x$b-tMdM N1溣SN\po5*l+Vd۟rCGBY-:YJ$(ֈ/2gGM&ٝ[rsr<"%)ӣKLgHӶiWiOgR+^~܃\ l;5 X n7mG2$Ԡ9y1#;^h$0q~l-I &JW\2":[~5M,inq52/|muq |LScr-gtIxg~= kGPmtF 0 +r;Nct6=xϑϚu_B ='4+Z.%RAQF@^}ʃ.jH `a 3nI~t-"%0T޿q럑 9`}]e1#? :9qS Ⱥigm9`%XLTYFg\E= cm@4$+H9;&?{~|x} ./~*R?JQ?Lݳ챼uh 1qo6-"3|ڊ,޲:~a3qn61.ׇ^3(2٭d]b`y@l+P$ܖy6QpXͅa`qBGVZpag`d߄0P[k#joF["@R9޵rM3Ʊ0N- 2 p9i6q<G0a4`,A 8*)q0 ?Pi`{:aT%z=,yU5Dk@Ჷ蕮$Ġnm*\J?Dn8*~&0ttIz8>(D q~}(@`),},^>Hf$bRd JŔԝLߴ #ëQgԻ*nS~gmOYLۮBZ̾{"Y2U%0$#cDt]g:BgԶ^ө tmFѓ>.%/4_0E@U`~[c$ T~, N 16Z>K5u ]RRu !a8_P&A^u0l*=0mANbZ҉ъ1$hhO+yϔlIfbۮWi$aPk{k5KioY-fkoWbjzIތ n1X"]S| 7je70cǁI'vxRL{]|Ʊm,W˳ljhKQ([?\]:=(!d9 ^,((fl,!58 jh Zܽl[:؝z<[7G;#{[Qm{]>~k1 9CXf4}lja_^Y>HfmE2'%4 MC!LgA_8Lm7_Q]n;I+}QAFBZ5|Ʒ89HZKGǢl~P"pK ᗎOL hm[֋sa iQDUH.WuG?pnO`b"h|`[AYuuH:إfC[E<4Jb KVgc6a*eQ#*5/CLIFJYLCI`_q{ i!<ж=sf zv&l!n FT=.LWIAل\vPu/e2B~>Hu&a6|/giUG}pK=P hK5Kğk È{*0<8$[(lߜoem4麾>]KE @OAm "iÃ#X.$.)8FAG 0&9-T DC('`Z˂'%B`+LFѣԳz-׆IZH.t0@F32 GU(7ܻLQٷ)+,odxs>PQ@OЂVZ_:oC&@(@A~8b _G=9;\N$)viW<vKmdW=/OQ{ @\_:|4Z)Ey'^qGUYGF[l<A{qx6'kV5cp4dACq u5G❷Qʣfܻ_햊 w'Bw.G0Fa4NJI}G=S>Hx/eXoQ$e u,%1ؒGs8BBj y#Z{>wyψ e|R:S%\(ݜ~jj( 11X ՞ _mm&ɣaAf㨵`DI\<Ǐ>a&A EO<opF(R.BXktZ !|<{76Hsc ڶ"> B4PK>]W$nv`%I PL >y'$ H$˲z"^UUyB{Hψ<{76H!6 (!m2ƚiU)qr-NyޏzcDZ붣(qEd2q c UU<{A niB!EQLӦi(RJLx=SR:#!ݏBi^rDZ֎R ;suE0 `Yڶmq\ q;}r۠v]w`xz!uM)ox$M5ƸԽKaI$MSkkR2cw `Z1!A ]]19WJ !\ll6֭[MdYHaEd@1<0lƅ׈wPF|3Nn(\m[kuǮWE k,Kv@)e cyZxO΍:-GZBf=5g. þ]ÃwO)5XkWl6pxxbg!'XkOݾ}{X,|N)8fr9<<$|_^,IL& ~ׯ_߿Wo~7o CB0 -\/ƘkPQio߾q^K>m[szzX,>bm^E1 s;mX^ufj✟fY9o˗/u]qs9^ZmYُٖy r%Am[!ByZ9ZNNNee0 nlV%Iv"x KMXk] ^0\yUJu>U#<5Hc\G+[]؇4Ms3*Ns9]Ts1@kfL&\Cz{sM{!]q<^#MӸnWq^c^_999Yqfv-TyއAm[6%7:)^y=2k\h?c뵔i}ǯyy}5 ~眗e9Mrf!yO< um4[:bR}(w5 QoivIc,F }m"݇LIh5+4mwlaʓAk,ԩ@?i>@nV4p1?ƬE(tUPރ-?:2ރ6wǐ>4"IP_ $@ !A0ց e$TzD4^gݻLM,J,ddG4% G4d+)4E,FLmfvxU)q@JpX)qCcU=㨠 4PEPEPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222H! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (L$c}$ekXa\%’yfa FpY)u7V佹nvxƲlYDH q ,I}gYywx4r@c ~4k '4^s8SIQa8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:>/O}'Ge)⨰{8:l/O}'Qa8:>/O}'Ge)⨰{8:>/O}'TuY{Hf@nf)bh:qK_R2  ZΨ'qo #hXFR8s+gçp ;piN ).1Ҩ2 (*FA@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yg]ץW]YBL񎝈9dB.|:D4 IM֑ ̀brI$WINOŠ (ggV{gnI9'kQQ-_OٽErPEnjm4((~J`w]PEPEPEPEPEPEPEPEPEPEPEP\?$PXlc@&(*FA@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r^4#g_/j-$m`g2BNK/j5q6003Uz+rtaEPEnjm4(% 4<[ I@)b%nS#^Ig"OG$*/#9PO!Jhuu-fXY:tI$w6'$sօsPXۺ( ( ( ( ( ( ( ( ( ( ( a+o6zmQ;A'냀bJUf7b},du[ڈŧs[rV"?we_+Š((rPQ@Can렠((((((((((iOGϥv^$>[?_I9 e<GѪj_^$>kOU9KNhB((+?YG%hQ@Q@=gV6 ((((((((((+?>ixPlly'#lc#8<Zzu]Dݐx/}T.I|>11 ^NK%dVC ( ( (gV *7~9a+N1Se˹-Gk hHHEYf* FXa\*J)+PEPEPEPEPYx_v9(B(ON?4nl$MyS@r60 I:K=2K--cFI_F״}KZŎcu,P:ݒ23=uo?vfRJk>g?p4}~ha?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?E{ o?>g?p4Ya?gſ 6.\{ {5OD 17= Ҽ q^1y\1inf<z,FkXx:1~q+WsJ ( ( ( ( ( (gSISaA?>/O}'E L?Ui| L?Ui| L?Ui| L?Ui| L?Ui| L?Ui| L?Ui| L?Ui| L?Ufk>*=o%gA4ѫHe.('U rcgG"g#x|OY.ɴV rzW;s#0okvQePw8lׂ")5>EM̒i>6.loPw䑹˖ln88?9T4T>/O}'Ge),?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIQ?,?ο>SIUVi%kYo`~=,RF MΩ_,m5 z 9U +bӹ.VЍ|?Ĩ]%j{M"e?6V9.UOݧ|)+Mj^ɿκ)fY|AAYMra~ ( ( ( ( ( ( ( ( (g%mc}k $FFA`+5;EwnIC#j6}Xq)#%_= -\?io$Di;'lHH?m_% WܿBoNMk[5}W1B+°qI w_:9l]IX(PEPEPEPEPEPEPEPEPEnjm4((~J`w[7VscwmsC*n#r0!G#zSMt ' DODOerprNv>"C"(tK Y 0Gv1=+Kz'5t`ƒh"cXd85']jiG- RWMQk=RWMQk{s[|YAnGuuiK*q:?A4F^ߐZ]q<u#:| @<rL? cfDm>eď2]Hm}18Q×􋆸4m:fM%Fr P2´s *@((((((((((+?YG%hQ@Q@=gV6 ((((((((((((((+?YG%hQ@c'QiK"Y-% Ԭ$ʂc,25@=gV6 ((((((((((((((+?YG%hQ@/ g/$l' O e'qv*VUta8,e*Wͺ ''9 s?wC4@aAUct?MT}M7%Q?wC4@aAUg70,cwmm"eǝ2E?i=7:aAUct?MT}M7%Q?wC4@aAUct?MT}M7%V~q Z_C>mdL|??;oJ~0i* >&?;oJ~0i*3X_i6mm"aeݏgaAUct?MT}M7%P?wC4GaAUct?MT}M7%P~q ^K}-w6&l3<[fq8h}M7%P?wC4GaAUct?MT}M7%P?wC4Y\x/i?M>oD/}x<h}M7%Q?wC4@aAUct?MT}M7%Q?wC4@nj4Ojz7m%&]8pkC~0i* >&?;oJ~0i* >&>K'_Cfț^eۏ'9;c >&?;oJ~0i* >&?X>$SҮNg$.wƀ3,98@aEP}36zUm$qۘ SZ{1;neRJz 1RPEPQ7(xu +Sp{ IEPEpC E<ϾVUm ;UFO`j(H!yb2Q##I@Q@0Cl 89TP1f,wfIhec1O;]uQ@VjP6^Z^q;\^4 U@v.Kf#9"F[F{gTQ@ke)Z rPa"Y%H82.efXKfM/Hӭ.;,"]X'@ˌCIԡtkRdX/m㸍d0WP3jPQ2[; FG;xUڀ9Vy",U/$J$[#{wr gSLXֱ<^=g9=1Q@szLj-0jW^墕c9<\c$=S7-\[O|]bYʌFG\ntdpPEP~{yg aa˫|WsI򳖑±EӖeg#OG\d EnɎI$RO/qUM|unijR۳j!RRhЃÞx@Q@ݗ'?4x5W)ip}%޷MG&8]Ҫe8R zPEeKK %%vՊ[pkMAQѮuNn6<ljYczcdn`Q#? yaI$ tQ@گtkVQIKp]-[[/B"iƻ#*Ϛ %4_Gwlg,qDzX[l$FT@EPX~"R}>̹Ӽ,r+!EX` ?| 4Ӵ`k^2K[M>kl<[J["'q ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (engauge-digitizer-5.2/samples/testcase.png000077500000000000000000000655301222557406400207730ustar00rootroot00000000000000PNG  IHDRHWPbKGD pHYs  ~ IDATxy]wv $@3,Hcf`D !0 RŒ B!0XƘ[wWwull{媾u~U߾{s}S1#.c]1΄1ؙp`0; cgcL80c}{kmβ,,˼Z1I$o !R1FR @!uuy1뺮/r$( t{áƍ>{Z뽽b1۝sDDDBi1Bc4ѝ(c;o@$R;;-kD4syw]u]]񸿫HD=\%}LxfWm+迹,ˢ(y9c>(wu]yOUG)圛f@cۦY!p 1^9}$Dݮ."Ƹu&Iu]۶!qZƘ,-sB~|>71Ʈ>3ϴm۟q`NcN(iv}r8%M{)e?i4-^}[.+BβZknzck͛=~n.:[F?ꩯ)8ʌ766>4q&)\]q_7c]B?H{??#?rޖ[}5=3/b}W_9|\PJwlcKvIc}k׮3>J)4MUUι|c]F?P;0˲2}_t1.-GIVU1Mӽ=!Fy Ugc=nB&I?ikk+u]I^URk-ywʌ1.c헕-rccS׵1_":0cq{}O<^3O,hc=n>-O胄ӂ1x<1ؙp`0; cgcL80c c3`1v&1΄1ؙp`0; cgcL80c c3`1v&1΄1ؙp`0; cgcL80c c3`1v&1΄1ؙp`0; cgcL80c c3`1v&Vw8R9uvk+W rBbc?݋cD8"9%*"]+%苷x}):zl~!B u[HĽe`(Kd<mZ677d21v]gs9!91imY)3WGFiS(+c]ADƠWB$52: E:%۲8*DzGN)EBH2mD]dIz20!I$I^c6sRJkmm`@kB)@C;S/dܿ}ZG(cR ˓T3C&l8qpGj0oN !41jΛ}Tq\jJ)Z ! !xڢ(,{%$L Biכ^eO6#`vN -'@#lgA;O#!#Q#c<  wPW13ʄ' ^GB|IL`& rV@3n):Rj>V`7RFl6Lo޼KDO<]V!| ꃿO+')T`{cwEpl_}W~ۻߢ_>++rE Q!x"@1{& DNWY5u!lPw||#!ӎGIy޶-br[[[|X뚦G:zIyh*[6HOrbrc]]wvz = ^qj9v<^?wq "ھp쿹ϕFQ^q d$hE ky{Q]sCcAOR`d 9J ZP}{=> xX@ rRGk"Z?βcW2m4M#:{R'ڟyD1voģY " 2J NzH-6Ub6RHB(#ƈI@"HM!H"'1e`eٗygY`4eO=4=,94]I UnWMƙfhBmxI,}㞻ei\.۶-D'I$IQ1ƽ>9c맽Q$q]G4%ʅ6r$?V_` yaof *pos}_1GX,bMf}s}`0蛤c2s h3 w&Sgbɞ*WuUCLM~6H q3gBZe9bIGy,K}\`]~u@kQf>>ܛ}K$MCtdhm1NnȲw8s` M$B@Z+>1`KZb  Nlt*lJuU'<ٿj_ 7 $.obŁ{0$0wBQ ʺ5_ %0O?4k(N pSD<\# ؃ @P@YDBU4+F)wk6Q&U΍)yC80c@@ ҡ&dI^K h,O CTZ /\10q 'Bt1_5B+F/Ȥ ,Q, %@uo_|80cNˁHlV`>0Q_t>k4W&)؃JT- *U"#F÷Ϋ?+AhJdYR PG%!!Br.G_?${DWh](-=XpAT:H5Up$~%tL)a0`QDeF{y&o:M! ,Rkh PGCz( Oa0\"@lpi@`@>mߕ<qx{cH2 \ҜTM(Wo@Amk;/cA%:)m `="R㝻n"b <΁kj!JJi2Dq! @Xo vfZeYVUcl6cD $@~ aeiiϣLrY5M>*r~$#DnzGk//`0.˺1p ^l\'[,޵W}l9E)P jB}wHDLpsimH{71soQ6ʆhK/Q$q > - t@ ؓ:w CJ91}3T3^~xQWㄊ0c}>ru*#:@6GѺ:..k$x鏀! 1,Bsuڜ;0BZkDBCk:˲;N&ҨbgbT+8~H@Hnb}!upشPV;Dfd M>/B@FAZttԈԸN+M:AZ%XɐA< #뺮O7nRJ4Mm캮 QuAi Gwrb 1(L *Q (Dma5+P@3X \gH:De9=6 '*傀1v*`"D]VM~?3ns&ʇ[xЩ"vNh ̕wwpZ]׍F~1&w`TUy}=㩧"Kh 40(bW%@:6k!8B@!%z{n^@D=ȖPfkA1?4sAw<jm: u?V)5~dmeYE1LR]UMxȺYR5XE/7{MApb8_'3XU?K e֦o b5YP͍S%js !@J(C|cjq'RJk]u]ڶW*~ɳ~rsIII<-6\{ Vi66v>ޜ|7_lvsi B@ԀG &l@LTxU$Iܽ&"04x-B;qj,@vibBaSRjed`1;JUrM@ $Gu~AuRjkki"ods!H!M $T6kۓUb_hRֈQjBT wymߟ]: fKBD|U1ٸ⁦A`&[m?8ʍG 1 Ё~V8BX, cN^hݠA&= 󿵕?5kn,_Mp[op2*@p]w'}Zj4MF?1ƾd} iT`46c:|F]WD](X:^=N~ߤ``>3c=dB_Q*FHNM%,"~1/QW*=pWUTU'G1vnhD"V \RF7^g[dYZ&Y[!KjP?NN9zow2ɜ1ЋML ]P[&_ hbH|%|d}L ۢ\˸8"@lpi@`@>mߕ<qucw9:4'US%i>U{#}A[e;P,M9+.":)m `="R㝻n"b.0cEh5X56ZE<2W~oY~ LK:[qu0bUYC#]]oGUJFvFsT\0 Gm=L/7j]6S jJ W/.c좄YlLG>@JY#uhxRYf6` x@K zڜ'R:|bNNE|$kէn; 2i?r*IZP«}\8 AB@(2"B@H|IE2M8٦eD˭DnQ81v/' @P@YDBU4+FZtGD-!Ck-Áqqgm_i<@vQ<$ :]ӴB/WgA2B릧A5_^8~cwM$C'YY&5pu[ٻ-gH6 Dm[H ¸h\`-_W"YattD}JӽcP6D[z"[Yh XZ](a0 :Hu2JjE]* u yD  Z uBKK"+ XJncI~Y,~n<,n%%pX, "q 1v8oҮSL"U[<WMO?_?d47 Y&\Tk7_)2@d#BQNWvj E \bM!՝u[KRYn/]6PwuZ 2r_v)$ۗ 7 2f*%1`?Y.? -DF]׬ [EϪe1[QZth*"rtp 1vwD?Z* IDAT`:`9\NiNf5*Bn2U̔']:mP HAӢ_VbSh(vyy :!8u{0EG]$;g4 B)-*|0! [r'e !wctd5A@ +fJec^j p'u#`ZG٥q7*@p<߃sc] uOryfx$QO<6dݠmѺse~%B:_3r9we0ry!tzϊ1v8YR<"?fYuq8fO'_ɺu.UDZpQr't:Rb'@..Dnuq$p;&][Y XoTjqxxxrťs7Lksbcn4݋c]$:4  ]'fڷxU >A Pa\6];I:l-.s7Iy^zxx8N7xc@}A!@&zuI+?8QHʺ(FD*51\ԈiG^.a-1CN DaN뻯+ߖWI*7#/#sD7M,UG?+åإq'$Iy~TuƘ,7aE~4/NguR=p&c$bUaa倀G~ o oLw?/OMưG*A `O27J]FG3瀆d)UK72ݹmW֚bZsW\=x'Vw[ z7'C'#cX>ܧ|♿WK'~b2~:҇tB$xN+8d!jzͷ}09C˗^z97 sy[kH)5N_~+Wm~,*Q6|=_WG1CGc."H-@<v#{GFۏ}'n΁ p}|;C "ھ@\;j.x1(?ߨ6p8eYjy|{1ƭ-}`0@J6U-`oocgt"p5hyZ $Ic~K+!8Z(b%/$H@s਒H:rc,_v黼Jl6L|SzMor@ZԈbuVW6+S܁}C @*<]9yaƼ ^ZiQwHFn^ꂈ}덈4HPZg(dXHP!b>r9s}Ze7 j!uj]&)W4c~x7 #@)"xԅn`J*s]bADyWUbe0_ǣq Km$j0ơ#Dec+PG$7OG\Z$ZFm$?ښbьSnN@Du~(c"5T};F[ 1Ppp HnB*JB -.8wH!@.jeHM)K@rEEQB&J\|7VoBbDRYv'Bi=J5kكEV1_<>4UA;E*L7[;7*׿$ dWdZyC d %BS@>1,6GJ4-꟠UK(W@\ޫe0{hDt-$pr1(6vΥyoRTbt^Q];cQ1A˝lm6pk=4c[/s#IU[i-FQ'$5AjdI!I[lo ׵֍Q\< fQ f VJmpuqGdWV$uscbtCC`pPu hDEʃ{Fib4oR Ly|iV6nV pjqk;xI8xXK+Wdu;"B#:(h .zX)WVd?OE=%!CWL"Ή^=ѵ_}Np7@"AH ÍTxgWiO_+hڐmw%qNcyXF W@ ErȎofdļ1$ ..m (f_>0vyv=""0 V2"RV 5 .5w?mgasXޡH'Z,`YT B n8Jfē  .!X"6B,D!_㩮]6KLG TTJh@/[vq6!Ɓإ& 1M|a0IŧKk%DLhZt$TyaǕM.(N>^0; OKt_y sZQP*Da_JrWXvwc\`"W, & tK-=tG( 8l [ʗl8 1 @u_Lk!@JP@b}K+,ݬlV*ɶ7 6Ug€$ؗ"t" 饵$ϿkPa0?wcaU.FQV%FvLָe !:MR"Dv80Ċ vȄw}gR]4d\D!`q`0viEԭX-ƶ2hM:L G02Rp`0vYE :lL;]JO=kO櫁IZD m>g3v80FuO̖.2(h$AV `wEDb - y :P*2AE;BWkW1u!QqaALAB^ '3v80݃k(x|%xjd9PQ$M*0}=08,)nN^59Wd_a~o~te!f!!|(x_ϒpشe/L=$fTuΩ8N /Jxϐ]r\`r{W4Xt6i r;l}C{^mxp%`7ǣXd#@bm XkDvhf͖!͓-۟y:v^VI#MLuGi~|a0v44O-`﫛0q?{}P-Mw62VZKoQ-|dJn1Ks'aZ!meYsBPJHT76K #@,@}qx H8؃BX`BDHC] !oaG!poB E:!2AHU4z ʦI$(@FNcZMj5 u]gY#""RJ5Mc] e?[I@@๕=dPo_EP4Ad[%MPBdG?p> tj@ hq$p2'B   @&8wܿj7nܸzjq0Q]0(xf+W؛6td$k,GO.|L/$WIU7 !ID%3 <C!g?Yi8Y@%! 2xs`/W'"/[Ω20^BBQiVUeއbRʫW"b1\ŰmR 2@FPD$ YPB(0\3vq©~ i"B*fɰgUYq #&ŷ7Gp80;OF O疿-N}+S$Wa,KMlll>E @tFsNֶy!M+ %.2kqoD!s@TR5wH-kDTֺokBs)e߫!( 8=jd{ o )J5}c޻Xe]߽oYu}ͽc{&rf3J0HHqPPdAHHF؁WX6!;v2sgΝۏꮪS{?V_[ݷϩQu㬳kZk[{ߕAĎx)'*K؃Kt0OzGb6) UeƘ|nqqcGڇն[e/4:;\X2K@]AU Y@*b/oe0\G@dp"%ѱe(r!)ǫ3midtA0 3pq ~3 ~~߬_lZ(Ss;s X[eW77g r#X!֢9Rb87?ͫߪi ltWs9Wg07|I `d/V?>ߝ@"HRȋYR{sNj ǫD[ce- ؈X aUy9&K?e3b.FugH;*y]Eҙ "ޔN  cnd(ÌS 1Bqem~,*WWp\ `8v),kB u"%¾Y,YEяL˻"p00>; <@RיjH IDAT,VwfjUӹp8g0; ERuK{bGaQ28ԝ꯴и *pñ03_N|zE9-6Vۇ{wr2N|*}>tuU cwlgߟj\Byb1' RƗ|(tu c &G͔r*UMC-)`\]qU<`I)۶`VUUAE$d27EZ2l0Ί1ݟqak31meƂq]s`\רO|%^Kzh BUy+[0C 0`tk qX xAÂL:`*, :JU?>5F%¥ cZ۶kyea+0}d֗!,-naܩ> L`=S9-j맰(:JԜ70m$=%CHh] Ze%шC0(5`'p:Sf-41"scR9CRroo/cJ4 4ZyP6rR ]>(jgr $EQ4qGqsZA`A:C_>CUfPY0wZhFƓUU? RxxaZs=pzzZucZm$ Ph=.G|X?@7m5|D7~jb)DhN!$0`6>Z{vp2ju[V*V>:@㸱\o|Ygy;3<i(^,iA`Nɤ* IYkE<.8*D=ghrF'(s a c㎎e{7^B{fq  ⻿юp7NC ׾_$c_&Tq-4fc+`5X VŹ$G?Lhrk.j\`TUE }h ˲4McoV*&x/{Y0A`L 4`F雖U˯7< g.>/ksy?,w=#d8;Ea4 M20Ԭ,1Fi2 ?{%^]Hs2Y+sEd2Erzije  f $|d'M" Ƭy& s1c;'2J0̯iy1=92vxYu E Fjh[ MB̦˗bCڟO/,)uw"kѶmEQ}c cm1aZ1 X4!ɭ4{%.p}  oT*j H_TB \F~U#DNp܀@D Qs\5: zU]Ah ^U<~Iݡ"aij=0a0_KE;_9*=?nua4ߛ0F#Xѐ+Ra a0sF섳Tj=d@kОiC͡SrpS .0UEIA6w`U6-T3|H`iO~W#05Hƽc R 0 %)M۳:L e}6KB7hȗ—Q<MOR7 X q .Q+Oxtmjk)Jt!m&)ƘV+2\,V >::9xmĒ)4Iދ/|n㸯, P><>{iZWz8Ƅ>W%kڜ+,e6bTW{WZpx>,lmX?b:ZEe=9nM~EM:Ɏ[Kg%LJo {BIr? t@7QS8@28-/9=_z8!tgTZg{ qkcBժDxuL٬LmѾ_1-^8}x2zBG'aR g5w.$\* /Um`s2tAp?̭{}(=1EYoPA#Na, ٣7Eű'hf^4ՊM(?WAp/?X47꺞c`#V>x_׋!s-0ZYx03B8?+݇I`c &V뽟:Ndjp Mʿɩ~g tDk*jF ?ᬅxql1`ofλdel*f\AY.-*>~_`՗;N~cw<*b`/8$I{Dw"c`*-o-/ [zU~q!LG-G̀:1O.&İ,{= ,g٪>/G9ߵp|\xKOY [U—`<|O{q?:?EU>{imA"bw)tF@6cV!O'E_ moed0lx4X ԀX 0K0Q=VQ`AfӴ7^z6̰?|tFh@ tp^[40mp^c);FҶVqU%E"Gu@J5mۓCge^b/A]>:--KMPQ7|ke|$Q0WFH鼭UF Ѱ&cwQ6M7l2F7CLxABDʀa0DM Ob0 fxhWue4),B6 =%rH(mzc;/1u+uMsV-@ sjNPRq#džFt2!X: wSe#`QRvgn0x߳АcL$C&Ϸ. cyB(] +"cL$qDb6]E_][rl&^N[ HPK~)&ݔPJ H)_h;h*kXaH3, -׳f]0L媪:9aXk^.'''ae٥<8_ViHa3([C)%JH򽽽 Hn`FZsdynVlxƘiem.Bvi&wn[gKJ蠢?R1<}d8%(ݥKJtcC.im۶mwmE!7bmД&Zkw6K @۶|2ܶ8O7eSmn~쬋6aSsOOO' f0Py"M>Y R;w"}׬J:$?CqΝ]`O$ > MS ӄٶPOr2/Ad-NOO݌=ߞ܃\B2Ƙ,˒$8';c|fκcO&'a$5*߄& Mt/,4²Kbd1k24*uj"w&Z 79}Y*2u ]qMoa\NO Cwv a}SPp^vυv^N<zm:7sǷ-E6Xv@}<ϣr>MoT芽((Qz?O6˲^Gf ٷWMyzV8K)E $O"u*5]!UZo[\jAwY]kߞ烡>Q)疞щfkxѫ1FSk<u1luЕї4_iHct$@> g/' TUUYvWX.;2d[4#[VQT}S ٻ˼)Ѝ^4]`Y@IklSvKhʲQݝ(ub m~]8ߨ1S&Կli9]8:nw%u90֑2mKeJ)I֚,Iף_ 2|e4MFڰovh0=+sNo7.;0ԼyG$lF Cyޅe &vMo<2)?u6F#n" L}|zz:RA[XUUժk'| 6d`ONND5],2ι2MS6]}9Ia|2u]qʲڬR湓8 8锼ZczxGߊvMl#`0f4]jo899v9g5ݻw]iw]EFzQ4N4K]蟪8ݻG.h4ZSU>XqM>@3cl2hwwflp~OWճx/(HZkI(uAᒦ#9Ŷ:hٓ{Hg`0)Md[rvhz۵VbUJɎ(>fwOotQfYFbsOzB4/booDž;ZKw(u2d%$Q%}$-!9vd>R} -*[MӤiJz]VJ1]/mi AE&q >+?۝(uZ\+~+p84e)),z0tjsR~+$!?c& {7~!㺮0`yem& 0t$c۷{1(9A`۹](_t}a7%vJoP ]gQ:: Q0t#km}@se((}ʩS.Ct8i"=]]Qd4ɷkXkIFQZk˲$ :ZSb}iCkN)HJyvvv8 %Rek-' mOwwvZk.$nO! R|D'''MӐ-9::ڢ.B, C"O1֕e .GQD9Jn8%v޸sΛoIT-xud2!#G]d^ڎ*Ë,~muӘ~qD|Q5Y;h-%(>Psr6ѱ@$ەk)xIU!}\.4# [Q cgggt9]VNriEru]gYvxx\.%MEQjp8`t:jol6}€d-(K1xuvzz Cղ/Gic&(8 64 b4֝X.O[DAWZ }ݧKόc1ٍTѭytZz7/A'!ֽ+gGnLJÃ[ӮGwܡ8J%ϡ4)(f3"jGrLz`Ck6sZ}Uޠ.dk8Ck|>uVUU{ӫZ$fE'gzcoǯ|58Лh=ϛf^"v#:!'7^&@8mKXwږ\t)đw9t>Ż(R7xcghJS 6TRo0 ߿_UUYMpHvɣ&϶I҅7ֺ))NNN(wN)ܾ}K_^һw^zda'hg:yW`.u sfE_fb{Zk-Q3s:jLf@TTA-&RFr 'i̷vѢ:%lȾEhZki6[vZoc$97Dp IEQyH󪪺 2 Wh_d~<)m[yݦd.(}î[<ѭ$c;xQUnRH~*Q]1SMr*it'U44z&t{.yK-Hq24-]"mGcH_vgf+nblQ~ lF;7ABTlhI$ Z;5uL$p{_P#Oe7t85eW ñ8p8g p<`8pp8τ3x&p83>rހIENDB`engauge-digitizer-5.2/samples/testcoords.jpg000066400000000000000000005362131222557406400213430ustar00rootroot00000000000000JFIFCC" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_ k3> ռAk=/?%/_u/_iڮc?>:ִ"Fj5䚍Ɲj=y, E| qޅ |`?F~|- @߈4}CZ|']_GW]hfyVVW3Y_W>:/?O7< :w+ N<=o G5E垩k:]֝iV73OQ\Y_W>:/?O7< :w+ N<=o G5E垩k:]֝iV73OPEPEPEPEPEPEŞ^mxy NT6h:u׊{͵skm? /.W?NeZ?#?_+/K_[&_GO/?Z<' ¾ׁ|Mx'ƞѼYOYӼG_xWzuxg:=摯x]/,MY.SNx`(3 N<oH<'yxgYӵ:^V_xfK -}. ( ( ( ( ( (~ŞV[?x~|Y[k:t*м+MGŚ?Mz+W 7piXw7W>"((_>xC_ M w*O^"4OQ/º[x~]w#:~ޏqX`@' ¾ׁ|Mx'ƞѼYOYӼG_xWzuxg:=摯x]/,MY.SNx`((' ¾ׁ|Mx'ƞѼYOYӼG_xWzuxg:=摯x]/,MY.SNxn ( ( (,mc>&xOvz;AӮUh/mK[iAOxZW,l(~ŞV[?x~|Y[k:t*м+MGŚ?Mz+W 7piXw7W>"((((((c,~egm_~2|:W?/!^#?-?y[k_sK ¾=|u_xƞ ox;>tWŞmx{sykt=SFt˭;TӮng)[(+5пf :>8[c_WRU>CkA/ÿzƟw,Դ L-߬jz~kA(Q_xO m3_Abxƞ Ѽ'xO ?x^#mxg>}y u{=/FѴ;GTnlm( ¾4Ӯux,,A jt{NWU^nm;Ś4hZχk=_K(o' oOۇ@7:[K|bh/Oƺ5g`CS򬬮g( ( (?>,|,"Ѿ%???x×?kU-?^7]?9únQEQEQEQEQEQEQEQEQEQEQE2[O#Oh_ RP,?ޯ_MC].YYkhe/^/(3!T𬚏n(oxR[xĿ6|Q.?i~!˛gQӾe~CGG`/7_WO_?iٷx䟳 >>xo7O ~w|5~cc߂~ x/|;,C?+㟈Q<xO7~-'xĚ㻝g|1L(7:O'|~ "^,> Ao7x+?_xsVTc?h_@#A/~ eĞ#_o <9z_+H#*U'3&ς+ռyh]L?L?g_OOh;w**_4}; ]exg~K3_߅s|#|[iK~^Wğ_uZյ[~6%_xĿ  ~*O7G5߆t/H<%mVcO7]xgP[On_ßþ97?͈ 1|E+x_^Z|,hcگϫО;77I{υ<]{k q(u|C'_{4߈kÞ4?h?*~O;~.şO~&okG7_ ?~?g_wb~XkTσ~W#moO ß-|_~ ,??| %exF  ZoOW➥ŸG|u@PoN$~2/?u :h;x/Ï|a>V)]C?>DžO]xG3j2We/>>/ '5/S'.?/m^9j? #7H~$i_w/ 㯅%]>28'~1~PO?kcƟ|%gqk'3@)i? ~x[O ~ǞuO[߱|H<#7_Wů >}mVi_MkO_U7_е;/N7?߅^95#դk>_o|5oU %m|9𗍯~/_%'kp|E3Y|@Ľ+O ƽ7 t6 -狧~w:g3X_뗾  W|UFGs{XԼI{1ɡWwUΣOڃ j\O|J/_Vυl ?jOo/&Ow+_x~_įc;uXGk~;_ŸۡE~x5ecoI7OE/ӼUW>| 0-Sǿό~ E|}?Ao?~+WS_Śǁ>)|1~|@oY_Ozޱk>& =[|c_"~ 85t`{C//_xşE?i]7QUaT(7{'ݍj> [w5O|O_Nu]#ě?x7_O/A+h;᧎m?Ux▁De@{eH|(6|Ohf](|B񏄾VLg<~Wï.<%:77~~Բ=z|m ~*׋|2>>;?Oÿψ~"^0A߁f⭿o]|\|9c^1wN׾xGg?s{Sƾ2[/< S|KOia@-/Լ#7+%m?Z /oGg~. i~ ,[?߁>- w߁_ |?OLe9~:)KE_ڞK߈>"7>,GQ_NWT>~,?gρ~ W_]xWQS ѴY>|<>VaĿ_<0k5'5|'0a 0*=S<{/ vƟ5K?|=~"/ ~p~cdߴ?f1׀_Kh<e?Nh'~~us?_Z|@~:9'ÿهŸ|)?w0~؟>xGu_xGw_.<%/3?"! 㿄| ^ 𖏧/b ~ [?IOAxMi/vG=Xu -~1 Q?7?iǏ>x?'x:H~^_?|)?K|#'[Hj_Q|$Kx}֟kNf[O s?Gƞ*~!пh_ 4' 'E_'ywmo-47>񏇼U < /|)Z?>~_wzo_ ֯A::g<±|c2E|9"| |;=#-#5{_ |m+a⟃ o|;5Xgi=D> vQ[Am?~(Dυtߌ |hѭ+|S~z,~ϞïY ?& jvv<%$~%1o!4qoVC$^:㯠?aw PxNgڛ+_>%O/įzo|`ֿx-8qd>9;D @¥1 ,NlBN?[_YWxg6]; Dy-oo ~ǿh?3eY^ |yFZ:GhO xfHdk٣Q5?go%`3}N|6_/<}.W> w]xn>,+_ZÝWYo|rofS;|@O׶hI<8;bԾ!x2@{_,|b>)W?x<= Wg? K|f<`տb|$ |#{G~N~ߴ2|o|} oψ ;G6>\̟?WI?nƗ>럱O#^# $ϋh?`L/~$|1֋Ax. |-con~;h>,񞓡SO/Atּu~ϟ 0|A~=o|^e_%c\NT /J7W 0x }k׋8B މ㏎?/gMSß"J~7r/٫~ϨyO]72xm?o z{º?$'OWg|e;6xzN{O޳k?oZ֡>|&?}{ |L>2]xz_sxf/_o5-> XxK_Z_>;xV'ώ%xj6떺>7Z|-u`C?A mئ 5_>?>-nC:k㴟<{Be3?ޑ⏀?5?w?/(,wm|`/|?b_[Ѻ|V_oj? lK xWOUN~?>ii5};Ÿko^g<JoOi_mo:к,О<?;> |obvS9GK| ak?%⇈o(0ZC>+x~=xF7o-?i??ÿ'įڿix/Dh[]_>xCj)ſß x^=tߎ^fƿ?߱x V)[Ѿ x ѭ|T:h:gϋ?>GO7~/|Ma߉ _ I5osf|k6w5>?'|SWl%c?ZkՄ<9/^8~8GR-j:?[7gEq#:nS/x_NGt>*՚g>1 >=ȷ4'|@cF#~W57B&G;xW o~Wſ |tgj>|uj C czw#âx ~OH'VX_ٟ[x w›x'? zo3|'d_q\h~Ԟ '9O_=;j/7Um[7>|)?A74^V s'񍷆 i}NW  ~յ/گѾ2/'Ѯ>|BE4ψ>IO/f?Űx&|/o|Y=ÿ/ k |m? |s>6k| ZgMsK¿zm SýXӵ|R-+IP+a%~3x~ At?M>j.|=~|[ ?>'k_ui>x>gÿ'G#hkoiGqOXڝCt|uϟ~0|>žo^ſ<?¿w^^skd-c߂bY _#|'F`gW~g|g|Ϛ'|u/ Ӵ^4g.O|A|p[ƿ x?`KL?>%?gy~# MG#c^ď௅ -A~?N&Ծ?%Qoj |9&I`~j1h._43?=wߊh?|K>0'4?|4}\Wp|R񗁼߉EMx^;|9-R x<4/4MB-W]3 e2 *c¿t oCZjڸAQm:ֶ̯~*xFN.τ/ W׉Y_Z6Ş$ve(>k?׊~ x𯁾>4Qß~^~;g|/OZ_U㯏4w u{7N^ռM_> o=~{~D`>+| ?Myؿ푨ƺ_m[׎q=~GQ~쿶 ?k|-_zDƫO7_ŏ_5ߊ|Z?*_GSq;}c? B> 7D=_&~oIiMfOD~iuof> O <#O"cH|~ɶM_ڧǿg߳Uڣ<:& >|??ٻzQ6㿆G|OxK~?oߵx?f𗊿g*ÿ_ 9i 5ߎM(w"_SE~xĿx#Ú-[w⟏>uʺ_|=|`wgO +x_uW^E/fA|ArX|3H>|$‘|!c?m<|L^x;4o|%~)[Uw~㯄>6V,X~55O ^j<}~?h~gn~5<Oׇ>~_+|}OƟ~ ~Ϳ?zo>)eo7Br◎#u5m ?goi?Z>8ߴ??m3^C?A';|h&N A=ʹcJ[YຟѾ2C h'_/F[_O>߳$I(tO>8s/>[~o?R/3-Y?hOiZ /5o,Ud?2 3c)/co[5?2x;7| 3\o?~ᏈZ&oM?=A>%㟈-~+6>!Pyߌe_ /_oS A@|KѴOM77YCך_|3 w_k xd~:r?:zĿu%SOC u=K{|wss/~6?Qhk-{~6_ ^K'>OK=_Iy 3_'-JK?~+cwo~ĿO|k Cx |I ᆣk|T7Q`߂9Ygg;ٟ+׿g[Xg~h|]~ֿ~/57xs>!'c|,?ߵG?<߉_jmߋ&9~|W9]ux?(x)' x/Lo?xmi_>jGş>7UOǯ7?uonj?d :/|/࿏w&7D|SoZOw%Wk$3ƿ/> \j<}7z߈(igoxR~??)b @~ |wۯ$~O|!~_kN |σ>_|S׼aC90G?WeSO?O߳7{ sSHW]5 +|l|<$^#i?~}x_wc~)XO?h c^ZrE6_ >h߇ O.?a?ؗ>˩l;/E+Kϋ -]@xſ |VE/ּo hx_|8ktU)7:ψt_|6~|EOx᭯Q'Z)??xxW_7 [oO'yD|V9 ӟ'?A?_No~>$<%d)_ u߲ݩ|Tנ_|` ->\|gg_|{w |3W)[93f[Qyo~:|/xW^|Uw 'K𿋾L3lLJgsJ;?un<+MW|A>'Y1|?>:f7ff4[xg?w  x _<'R5˟?bo>9~~rJo&|^gKS{_><|^ͫᇃ0~1_~(iuo?GTt 4O?k*_b𭝮 [|B+ڻ yƏ7*?m{U|y3Ě|ğd_?Wğ'xoo־1/QV_ Lh>)k_~ x^.bقNצAxm{x{Zo (u7ğ|A犿h?_j> $Gb? /O٧F⿃jW^+_cl/*y~ ? ~:/if¿ޣ⟎?i>|(?n]Ncӿe:w5:CIm-[GNW  ~յ/گѾ2/'Ѯ>|BE4ψ>IO/f?Űx&|/o|Y91dOI%@|>(d~?>;|'/+?к? c+o h„1 G| C`n~-~.xoׅaog|i9h'ot_zOOGx_/?_ K ,]Z}d8? ;T3+|)׼Ax!¾$~|B?[xI o~ 棬O[K NNjm{ڶ߀|A<dbh߉!~=x~ ϣ~4Mo'_|Oς>!~~Wgg 7EngOg/Eτ&?a?g 7 x ;᧍5oMu;_~|V/x^cUo Ꚏx?|CN|[35KT|<ƝQ/[xeyaٞ_,>oO~?/~|-=3@xƿ/? ~;jz/~" S@B~Zg BxwRNz׏~xzGw|2u߈5U/^;={…w o?o-W?k?ᮽzhx%ko|Q &0i?h/ _|VмϊmhV_>uʺ_|=|`wgO +x_uW^E/fA|ArX|3H>|$‘|!c_wďB?>7| |I+?O1'/𕖱>:xO'/sǿ<3x2!i%iMT~0xs.?h~>#; YX𮰋ӳ?swlf .~ž Y~~a_~>"ׁ|MxO>6s|5,_Ӿ2x?j:na{4xHBfX_~ gľgK7~W`kGE|)e_ |kE㯉> ďKs ⷆ| x*x=?o5⟈5u;LABW>~^|?o&7 ~Cg%loYo~&~- ~.>?g3k!X~w> ~~:GY?;{TckWO^xW_ U]7xW, g9CCWV;oj1[7>*[8>5>p6s_ Yh=!׀~S_ÿ _ L~Ҿ' Oe27>3x ߆>2|C|I;~ xg⎭s|Dփ}8Z-S#/WP-~:w??k?:|a_Ml7_-e |pc!/bgå|>=|,fo$l?|EmC?/gocĚŦ?|(gS|poß[O ¿F~ 9G/K|3.o@?f/_4> _K@Z]ï>k᮱ρ^6kZ>xG6|~-w}Ѿ2џ,Ӟ,-# 綶Dm_ |g|~+gܞ??k,ߴ?ko^;oᶻ'kP.h#> h7C~Ҿ,|!m?R𗉾 ]Kw<mex^;~(x|%Mgď@?1|"㿏_~Z|@o3K|l?Gwa-wþ >k_ Xx0i t?h_ x_)|-'Ək $_xKٓA4cƟo >,Ρ< Cï ;|soxžѵc-yQ 6x㷆SֿO'9j: *)FgCŞok:ŸVd62  |'еK~~*j?u O|BE4ψ>IO/f?Űx&|/o|Y>ߠ_ | GCt/H?OfZ~ig Cn P/e_o2{t}o#Z~OJX<g?_灿?fM? e?45׬2xK'4x|3ew>!x_ ~+& 3ᎇ?x+ׁOkß?ñdOQ?Ϳ?*_hj?m_^4/-+_{?^||$~ПQ tklO|okf?gw?VMl~ĈgG|BgƏKjI_?e~ `_$/~?A xzK kߵ:7/hz'62_,_?kk[>mw,񞓡SO/Atּu~ϟ 0|A~=o|^e_k_|{_|W Q)'Mo_56?gi|V75T5o h)"<~fcx7 yW&GcsAW#_/3W%>(? YO|/?xGÚ/?d5t_'cV~)od^&"~1мxZAa|kW? ?񷊾0~w]GT𯅼USҿ ?f?|B7t}WúxA7?kؿMKW C|@|Bkᵷ?lj}V#?/Oᗎ?g_~[H/w7;x ?|k~|3_>%)Լ?  |i_Ϭ B⟉6b_4Iox:tv׀q~ +;~}#O?hk|E{ ._uOσm|u.23/–z_k|rh7 yLxBKgM_~!k]g/k?es|@E2Gįj#㟁oٯm?Eks/گ~"]8?n_{D|"B7آ:|)~῏ =G SQ#3(G~@;m<|3Y;>_|Z)[1ԺGG~"|J4 Yq}U> |k|EJgƭsǿ_]={Ϩ\i_ //Ɵ5V?:?7'ݬ|Xl/?i؟i?5}sH=Y_~x-r_<-oS㷌 )[ƱŸuh^?%Y4|ï ~~ξi/wpxÚMu(=v7??Oo_=ߏ_<  ;yc෉~i @ѯg[ |c|}O >(|q⿅ ?g~xC1@~ÿgOw/ګw6u?znj~xKl|<<%oưѿ~;x&~RY{Auʾ@[&{oگ|<[N+l{Ѽk 3?¾5o|֍|)g<y3 թxFof@ k>(|EgO>lgۏ:Lj~Ož8-> ?fZ;u?.5m>ӿs>Ua>,gKm:¿~(_7|-5.W-Gu?x_^ ~ 5|7ռGsaٟ^u? @e¯K O'/ OŏIh ǿugO ďſL&D]|Kgt/"Ti-t?7 |#F4 u=9/  Wߵ .!j_P?᷆gO{mx{&#:<|Eoωm_[ ?ao4_Sx'#G &~9_? i7ៃ?g?%_?m ~&xieυ4Oo x`if4^,~.}3%ӵ Ɵ}~¯<+e8~_ AA%׍nOٿ+i %__K>;~מ l|M+R<{?ٗڇŐS$r~Ǿ(+φ^ ѭd??f7?>3մZ6W>+xk߅ x|f5O'-@O?j(_??O@} ?NMK:ݮdZǿ >} '<1|o>A?eLuϊ~,>$gwc?S /O{ ?j{_13ٿQn?:g7k Jt<9煴ڎŷ>񇏾?e_B߉>/Þ-'O[Zt@ 7BAa+_V$CXCO_| P🄾;aѼofgB]–Yϱn4>)|?<#“ Fa wo"/㷅 -_pk?wx/s4o|(~߱50o|%W?khO~^Nr/ٗ_쇤xB~_UJ~'?O?~5K𝮣c]7_>O^!3cjg=_]ѭuMsYmuoD w'3 \5kPW%6~п.-kϵ*x?_?G?ً߀th? ~~ > ~ q.oSO<|Ay[7?3kP|# :&K> |?O4=Dk_ k:O<7/|E|k|WW#ѿ!xNBKψ~&}RӼ-_%׃|N?|Iޏ|["< ?o{.3᷁iF\Өo||U}O=kτo4OiRj? ~*JF?/jo~_?gq x/:wjO< ?R-|{?|%o`7QHAxiӼ7B^*>7'įo/ ~?ǃ,_(_|[w<^~tVOxJ_?K~_|1?s"|B?i__jM;zO>4?[|SŸ<+⿇?eg?~3|Y:E|"soBA|@wǞ[GѾ)_>!~|#4 |M]xY|GKxjz/>=j+o~ֿoڳ'Gg?5]}O ?axkKgy~_fO^*uo GtOï>#-mH~ھY'^!'Z~MaKx.qN?k9ƿ ~x_7?흧:FQ⏅>0,xWiH5+?GӾ|%|m_O?hG9H?~MLx;?OAdO1>;?&RK4|G x|?Gma~ٞ9oe/ú&~߈g'3[WõdϏ_ߍ;φүϊZLJ+E@s~ OR/ ~>mo9'w|v?j3;^"/=Ei>xK|'e_=K;ُf;Owſ[xǟkGgF|)_/񮥩|=}w_|L񏀯 ? «PS?fO:(fO}|=wO׼9Z 1x'7 럎_¾Y?gG-t_:G qPxY~Yx-؃׆o?8~Ԟ^w ϾCf GJ?Ѿ1׎t4#V6??#Rh|~2O<~߳>xk?? |V5AATׂ|m]/WO4 9ƯO s^%e_X~`x X_`f0~~1~~ K:uO{=a|1uۇ_@?$ƚ||ks|Yo_:?~#|B'Y+uhhG|+ঈmm#o&_|dpAK࿁>Oo_- o7a%~>?ڗljƿ | >)YC׊4O| h^#=Co_ f>"~*J!j ~3 xᯌ>&~?mJ_ߍ&<;|PǎGfy> 'gxi$~ڿ?|^|m?uoC'-G|EOkgc~ᯉ<{#Wshß4S5 gÿ;EмY@-?~ jo/'þ mCG1O|"*R~@|)S?j4|m|_{wψg~|FL>7о-G-U_xş_i^UEYᎧ}>_៍<+'Ǿ <?h:xNNT _M!?Ji4t? };Ɵo 8b}*Pq/_g_~?7Q? ,ލj,g4OV|9|=ѿ $ЭS| 9 Gx3O~|?/?e >:·:|Su#Ig}4k? ?L AN|$~:Sh׆h8c ߄4osm+xW~៉Z?'x _??>)t/2~?f'칣\6~~# qw?kcᏈ54Y ;xƿOڂᗋaĠਟ?OQÏ٧|C??iτ߅&xoIo|135OI~~?i__΃Mß߆eMc?ߊ~ڧث[ƚc[@/5o|>-w<'X> ^\7½ +gN׿nLѼi>Aoه G/Ÿ/o/}s;?Gυ~7_u|_+۟<]e?6b~džF/W &;'~5EIw8_|m_|XUհ| emGMׄG{W> |qV -ECƝ|[Bvo 7?gڳ5χ#/›~2kGBB/xTM;1k7_VV oZi`o?_ ?NI;|u߇ @'<vԿ <%37 |"g_#9?R_|W|A?~Ϟ%p|8ΟhokQOI/ xO◆%sk?N_<5Y>6[^zWOك׉>!|`i8L?ۣN|}Eo~/>D|D=Aƞ~1WL}"c/dߵ7 ~ϟ&h|P߂hw?gP M?U~f?8&_Im J=3W-M<)c|=']{zׄ? e'|S_~ԟ e?hGQ|?~ x 3|_=b4t|Z'1on<i2HR~E|"umBA|@'~)DGѾ)_> .]H |M]8>"?Fw|GK/gjzo4/5'' u#O^DG'C>30<GWYπ<YO |v2|9+l-Gw+~j 0_[|?>1WJm;z]Wٻ^TiX*~| |ug?|?P~?gj/xO<>~ j[sl_? xs²j| oLc~m_~&k7~ Oua7ſ&?Wc/iL~xCio> kߴ_><_ ~0i%iߴ?|G%|Bόg>5_7j? h^|4!aO?i7ÓZ]GY7Ua{z~p?wW?d_ό0O[#xr5ODYXO%eu|)+x׿e9z.?h#,hx$?H~ޟ?cߋv7?O(~g KO^.2X|LQ{ mUbxsO7~Yj6Zti_| 'ڿ?_~cž W<+oG.h?? OV'g'/j߃Gx>1x: k߁+7;O| h-SoGjoOO/~-?ګо:xO3?z go xzV_|_O>G|w_G'e:?TOj  [|kio؋ெ/[:*x]?ß|<{+˥yg1'[o~񵾿u? +k'e^kA'~wQdx+?>"~O _wZohU /^1_A |4w|S|e⏉5qT2Sv z77O[P {g_|AxG? |35WXghkw 7~&~:M[ZANO~o:_>Ǿُox~?έ/eo~"} SV4ß_7Wk]S~|Q;מnUm_h> |zh[/'9"73߾|Lo{<o|i?Sx6=s8~~*~ ~"\oO .A_oƟ~:6uڳxwo*]xo?#I˿R{்|Do񵏇 m MtO >1xWv~Ο|/?4~?Cӿ_gۯſ2~GA52~/_(?j9>aR}G wO(߆>&_ S>|bZ%xG|EQ=/Lx[?뿶3B#o#k?,~u3O7g'o_ S־$:nxU~ΰ|3 ~ޟ[W-;& h?R-{SO2vԼU|>~*޷WCxЖ_5w.? x nٕ~>74??/`oW#M[ k?cmnoN^' &MAh_@ ڗ|7aOW5M^O?^Ӿ5x_g|!O?|e'|UOM7ŭb7/ß|et ;nO?wrh> >|`~>__?gH񝆣Goφ:cWm>xǾ-+Vk ;{u u¯ᯁ5{L~|1goLj<_o_'OGh_IE AI]SU]??|"o> 'ýjdOgOk_77?-/c?ÿW¨A_O~2Ϻ߆>A]3z7n<#?hW?iu8>|o?}GI۩@?tOROg*Ok>.?mx?lp⯂`ᧉ~_~i@?h]ֲlƣ];ZUuo/ {OO? U/ǿ |AP-f/C}3BA?Lx4/h-{ǟ2hwS$g7O ._d?}E!~ ?gN-_7Y> ~ZU|_W7x~7<7_WGJG_ |+` >6tvxĿ>>N­:GG>?n?=/<%@&i> $(_oŸ|#O?0x?,^t?yo|=?m;OWxgø|W^YJ?wAm@M+J| L|~s-9/(O?/+ώi''?Xj;O[O?+7 hso~οucχ&'s>-uϏg"1xT/h);GAOO(|'g{<;79h|G=Ϥ^_~͟6~ 7X|;-SxO _~?~6|:kſhhx &o\?`okOj? |+¿ u ot~uϋ??NߌŸ|%3W~?m~ ~-ΰ|^~Sžac&xQ寅|=/;_1M?{_AψoKM[?b럴v82O썦|a?lG/~W.o?هCӮ}K~_$XP|!|w 㟄=g/|~xĚo ~%xKϋi߃[㯀o*_~~lLlKk:|~)V>Yk߈ e;N|$7P|?kً_?fxֺo5|y]/;)<5 wc7IP~) .||Cs<xzŗQxNUmGҼ)j>>|[(|Gh?~Þ i?|cᎷfNx_{mVvwxO??YbAk8f /~_߈ eOm>6x ICž?|[oX+'Me_:VUgs]0~#W5|G?YƯ{x7g??I]= ? O?_|J| m+:|=>2Oْw-ψAVXj!>y | _sf__Ǎ, xW=?T'XMoEF|87q#O?N@|A;?f ?V^|{}_xվ:E]3&s~9x[?|3M[۫ p~П?J7|@_~ϭ!✾_|@H׬?o/)|Eh^(<-?ߋ5?|{qA?_7韴ς>6[ FOwNz?ǫ?x;>?Ǟ/Ck?3?l={_ K?B| գS_`#~1|> ~oqx ..]m_A_ 'G[_w?|`>^S㶿=N%^,G| ga/|W_;' cc'~<[ Þ1n|@߉ߴ|G?ᄿ w|?%$|R3'&.DŽj |-Gz_| ]5wP?j)I|RL!::<Ǎ?_gSH<]. | xJ|E _s~.4 ~_o,;>;j+Ÿ߰/!sA4xYDck7/o\џ<]y>&|, :7sǯk~[[ߋ |I?~?xoOkXK[GLkuO|_O9|X>|_م?io@?i??j|Z5x_'ԼC'ψ>.|m_|0 Q)#ѿ΍/?WsgcYǍ7 -?oO=W|w?~3}A_u ~ |qSc~.mq~_ 8|@O;?oM?%?jQ]jهlߎ~&i~_~|I~֟R?_ +O_ko|_>>w?|Iw1>u_iVƕ۟_Dv_x~+~ѿÿxw|ex>)~O|HW}wÿ'ĿGᗄE隗í3ߌ|KE-wĻ>4xG`~ޏGGϏ> |!o x#[~xwK?~#W?1׋>H5k? J}y >'?3~?/EoF6D ɞcm:UdOh~մ/ >xWZr |Si`?sƞ]şe~5P~ʟ > ҿw/i?Ɵ 4|]մ(i|;g_4ǚ߆U;l7x>ֿk`G_ |?Jo_"&?O3._ÿO¿~ j:G]l?k[?k+>7?:o|wA?7mo㏀?g=w_~8ƚ~ S ;B|&;? ~Vŏس/O/z?O蟵/xRUo/ |3 6߳1ڿOO=/ş }|L]&s@|.ga'g+?ࣿjOGg/3o>:?[sa4=_5߁>._k|%./c/*tكWI_i3Uχi?k]ᗆ4}sW >' WoeHyNG~3~_>4[_ Osgۯ+|:{/"{sχZgx?7|zM_/*/>8~Ԟ^w ϾCf GJ?Ѿ1׎t4#V6??#Rh@>_))}~_G| ~>0n*G⟃1|>d_Z>߇-׭|sďX|eVW@oC?d_%U оqҿi?hw?رhU44u_ xS_>9/jOuatſAw;O>7of6,;^'OZ߄5 {77d-SҼSuO>>@??g&/߇_x ?^5"ß' ~- /_]u#93 `og~S߳?xPE㟁:/xf$^7z C?τt_w0x>44oڧ |';|Y_)^+#^~Ѽ#N+>~Y?ĿO●> x?g~~'n&OZ?ZÏxw| |2> jZ -3#ΙK/|w o('Wv:gcgᦼ?~?|5~/|BHoGu |?O{O/So"/,~9?_dڶ /kNV|0W_ t.aÿcWWsO_Kw'M>|*G?5dOX7?h;f~ x27E?io^ aj>3W? 3(Yӟ/߶?hk~4cq럴_~rix?G< wZI^:xRse hR{_xwů\-ƳgmZ<|9¿Q^1| ?Q/v5~o_~P/K]mj |'n~O}-?TG~-lѼO/hqH񾏤|hLxM>_xj=K Vio _A3i_OVzw[Ҵ۟_[Gqu|Lkޕÿ٣:3=p~&>|bG?f! >k~B[mSOx~|7yq|LG5ozG~2_;υ/+χ %ş^?ӬAO99௅2\??x&4oXWSᶡ÷/?+x>>/~^s+w<[5 k_]yE??:?iwm}1| uEi?S Cy;|1472> x-_x4<w_.g?S )9wO`υ~1+??~>:Jύ*!2u1x&oMq^G)DW~_?^ 0'_f{/*>3|`w~(hIɚu|eÞWO| ,{'o_?nx<#E\`w?fO Y|aF4ڏㄾ6O !xᶱ_~W|l:_F߳' ſSgڛ|b0|}Ѵ7Ҽ)źg Oſ<~)x?ρ5cCLo xS৉i? Q?e?,_Frů ]G¯N>ߏF|I/<-_|}G:_t ?j i W|`>~Z7t;.Cusdk,M5Y<%6%iAO|EƉ-=|lf؇ ~߲q'CM;G/٧BS? >i_~~ Ŀ d>W,⯆Mw_ |Ax?g~2>*|O?X _ⷈ5m^¿ TG:Ɗo?+R];O?~#oh_hط_ρ< Gxa/+&^W߇,~k?|+_|Y?ᶣa&AFx'uڗ`~|vs?W^*7nSs ī]TOA慣xZuGH􋥰;W|=@g:e;5q| Ӽ9[k4Co[x~"➣]A ~ k*?;Ǐ?a߃Oٛ7tfWY6?,dkoūڃÿ?fz' 3?j?W7~5_gU|+G MF|jƭ#wA?ͯj?5C/ɯQx@?~x(u_:_4oAZ/<VW|Ux/|7;? gχegj?nZW_~*xV?(?ic q~6 e+o~6|['w_/XYK1jk'22xPx C4=AqS𥿄gs'~ A2^OK/x'~(#/g]J?u? ;C g-W_GoV<__+u^e^xsAowp?1 д~Ւ_z_쏁T=j'_k_Ꮔ}/c?Gú?i ~ Ckm狭||=мυxsnI?z? /ß'?d??eLo࢞Ѿ)ɣ^; x#V+cr Ǟ '5.0h?^>{$|L_~?߇SKxS?c[GSR`S֕Vk4OGOfwω>8?hG O|mU?{ =3w;"?~)OOw z2a_6>"=S{ǿ~?o?kPo?n/@W#Mß<%~|#G>|$H? a|x? |E_.zS  ĉOK|S;aquj O2e??߈mw#'E|1?|S8 _ڟeψz/| -~&{[7/ /,?^+Mo>6|X|SZ1?8^)(#lů?oۋ㧃8|S Fu]ILl[xk9C?A TмW8Kh~ךwg_ 73n> 0|VxZx-m>h !xwM/ ?g? UG1Կ?_>+|CQ#I_:'q|=?O}τ|Ax'Vxti"}*H#o?{U\⟌/z "~xx/QX[xmN]}kD)O~Ҿ'࿉7|A/ <97_ xgOJ|eGfڞ?|es_ ?f?;?ShKƾԤo.|V0|j)^>kQռU:-'P׾)tbI]j>*Sº&<1x-_YQ^&y;liMa?>"1X<7ߏ|?о xO/;pZC_1ſ_>ow''n ^@ſ 6j tk>~in?&_ ~&?]qqO 5ګ?h_>0x|l#ٓ|S{": ~.W_|!?٫~6K3[u*}_|Aai IX^~>&xcNX~:KO |;/i(xZn GGfOx _7 +yK?i 5?,~+\"si߄^~_)xJ l< 7Pi6u?zG :ψk>[Wmk$_o w!_sTo(??|]Gឭ3<iˏx~O  Լ-Jx$jt^_Mt?_8o|6}_|?AßxZ'+ӗe|J]VѼ?SmOV:ΟN>~~+VsDG4տhYj>)|4Ҽ~ScLƽKO4:o,[|7gŞ2>&RS; 9-/ڇW9ګ7dQקMoXMS⤿ 0<buཟ2?[3Y|s?٢!w_z//ko~'Uui_xK]zMdm'^-l 5mrgŽgׂ~!x ¿^]C|M ~+߉i*|5k !ğ߶fO|Rh?U~՞>|]g|3~ @~ׇl;5j |2gKO~ _j_Χ%D|2og'?ƿ'_.6B?g_x]+cx>P?Ak1}?'Xx>+'G,X59/ğ7Z^  ՞2v2u/ o^;kkl6 OwA!Jx~ ' |?Ş7wƿٟUW⦣Gm?ߴO|?]_?m.Y𽞳[>lom.R@o' ?j_?'~ԟωOO~4?cߋH< F |Ca7~ /AxOC 7MxZqB707ýC_<;+í>*sjߴ|^~o(?5O"|,_>|1;"/?o^/|Dޓ|'ׯ| e,;Tك0x_2>&|EW=X~3^վOÿv> ^>;{sCW.=z??_>t|v5 wÍ;O3O> _Yck$5M?f_(GƯ#,/|cT_f<};/tGi_?>|Dի?Y[ 7k2=4_x]~h6~0|mf]WGO1*O ߵ_ ?do3|ij㟃&Ş^3^~> }g?v?x,i/>hZMcESx5Oٳ! ~> x'ÿ>3xFOe^ Þ-ſ? 1hgXV}[Ŷ_i|vT~>4k _|+wwYbnOmυw|Mr>xǏ |Z֯>=|z?OEG5|:?~_eW|= !i6|<}⏏Zg:Ş}g֝O_hIM.nuWqпkφ>eO╷ƹ_J'u k.|LtA?,"6Ýc"|sZp~&|"bY|%`['_J)i~_~*5~џƏg|%/WEj&4Wֺ~% 1 #gwi(|"5'Ÿ ~5ɪ|x¾:վ!| ÿt^5[?`/¿^ E~&l|s⯉:wǍ;↩+o~]WAcm7_|'[=WG?M㎍W36ߜC~c/"7GoxtKo_| 7L4;'k]ϋ?ᆟ:|NmOi' |@e+⟈c{ xÞ.[On'?|ss?_Pۦ?>|E??({?xgWi6AxOZw> su⯃*m,=? |1 i_ǣ~6uڋQ4;eι{ߴ~,K?ůګ ~~pxGo?_6|,K߈_N KzWïxÞ7|WC/s_^?h:j?bXew,~O0'Ϗ _<=yK}+׊$KLJ?>%߂(x3ĺt-K~/#"S>xWO4x7^ZƗa| <-/'VmO|7c,OH/^z?d_># S'>7oWM¿>!|]?~ GFCWxK?ox/'cge so?hg鿶?IOٯ/x-: M0ho:O?oA Qqo~w~?mQ3*V?hOiZu g5o,U{ 3 3d/o)/ku*e]SCMj? j~+W|l!]sRG?=&/x?N>q5h||w?O?< a_GCG4O@㾻/j/]ZkM៍xÿ(~%_4_>|^|.esψ1A7cώ࢞~ |'?◎?g~ ]]gſ_ |uxk?޵ 4x:<|9{?Ue|~'{A8?n_C߈?_nêKԵ>(>|3]Gy|v־&|F/ [?Odao> ~ 3G >-뺎 _,| /~| b,|57_i?|vhSKxg|e7=:/_ gk4𞳨¾?x W׼?k:|Ys[x/Q4k &nA˙xŞQ&t.b߶L?eOic'Ư؇. gCM{5O&'; |{33x|=o=> |/ σ<|H|B|5>xo~2hgMcA'g4?1|,tN^x^_:Fj=u+iew*'8h7^~6xKÞ"~?=Gxe}7>)~Ik_|QC xOٛ_ > ;?7V# c3Gí7OJ~)xkD^|E~|@_>.Յiqynٟ;u~(g~z# G]㟋mAe rwÿ7 i_wo~ge߰ -_WoM _~ OzhGX|%~G~/~ڿ?/]O|ic}w_u|pK:~iŸXW_qYAkշ |%'g~Om{xs%'?h߄_>9X Sǿ>;i'?~*߆ l/2o |qĞJ&Ӵ? Y~j~+|$_m|A; c~|TkIE|Veᯇk_>3EmwⷉO-ox[ψ?⟇t W1]xu>@?0xst_ᮏ|]qw]C[ͭ-:?~cO3x;RdC4j¿>6Ɵ|Axпfxe~ iml|l)v ?oH[-Ӥx +>1t?k@ |p#?S|'[|~ZOOGO?|AHcZk/oo:y~[ S @?GT?c#QOf^[T^C'?|+~yAxω}/>T?ϧ|A? |{M`_+[=5⏈j?w`H|+|;_~!h K?w ~07|a|J_ωߋ/VVïBoceQ&~ Xx(ҍS~ m{cR⯁~&韴oh߇t ~| &់zwǎ._WgO7޿ `?<~Զve> ?`/fzLJKo | ? ľh7Ġ?i߄_"n j~ ߂?hߊzΏW_ߊ_W/|Ig^u>" u?'|7*[?_//ğ_ <O_m~3[;2gh)|/㧋>"<3G*|L<|Ck_oÝ3&g|ex6xOe޳k?q_/E.>|&? |o |L> _š_3!|mCʞv~0xx{1Ӽ!_ 5^> |g />$ /`|hك 4x|s'BO 5/F/|]Cvv~0|)t"e 1O|G+.7fϋ'??~#28xKo믂tO=_+/?(<#:6i;Q|x4|~?d n>)⟉|GGx)xǾ<3? 2f_O3+3BoK~׵SNM/?L+ W> ~$?_W?kֿ|IK>|?>_5xÞC?ۣ$&@Z<_~ 垙 O~FcsO^h,8/WSwL> k&~$4|\|Q-NC3Ğ]6=|?wwό %>"o5&+χ9թ5Z>xsA}R)о!?_o({,,&HׇYj~Ӿ:xWQW| xD/]&2Y0M{_ >5_;7M_ /ÿ͟~8c_|">9x-|qOx~?x[<?i/*vOU_M/ _tM|BWlyψu<;τí;⟃.~Г]῟?[Hi>.Y|@(s}:??px|#@g+~Zo_0|>'|QU|M)Wo |LEW~IJK1Of(x{AOgU|4_;^!`Lgz|W<_/>-xt5b#|l~|>7|2?g>|zIoM?~-߁ ^/㮷H<ZG/~-&cax\!`&|8ktx|+Vxψt_|IԾ+:7ſx᭯xú)?ߜo ¿>|j2h??>-]g |3E~ ~&??ß1ԼOڂ^ @gſ7H*tF%|[|?Շ>?Qquǿ|)ʿo']h~?- g_4^(~#+~޿w'[%yO9{O[x]牼k AwkxORֵ_'=?|? kXK_~˺3* |/_?k~߳<8 %>(|\^8H|c߆ÖVm_N]aWO&&|+z~3|6??f> :OxCej|CNUU;;W:W[ч xu |I-axd?~ʞ &_7YC'߁~ =g P|w?' xσ iX~!x-|i_  7E/h_|A; G6|7g_WM;@~xfkx@~e?"<%ox_Nߋ|VOXk|s_>n?A>$_x߈w6VZGEX~Jj/OO?7~iu&~2|JF>xI>Ǻ{7>ҼY?h?f^g4xM"xc_ƚhQ|Y?|A xOg㟏|if?}/G?|5$h|-_T |=~ j+;?߲6 rgOAn2_vW^x/G:;c㶵34#|/]߆6?v/7ு_<{??,KO4ڣKWÞ+Ž?r>3<9/㇇ /x>Ɵᧂ|q_Qc'EGd:|u㿉~'J[/xg4?j#?Ÿv^5Ɵ;o]3ƶ> \_-m k7~/şW~|Oo%<)>_ [0"ŏCg.WVP>l05|@U~11߈^;t};'ǻO ³f n?+xsp`^ׇMwm_mui?m>~gx'ǟ_ >4?hl߳h~xg?|S,wgk|B׾!Z);^3Z$<Ox,//>&hZc4 ASU?d?h S߷%쵬[~ʟqumnu\+']|_^W GWOI/?coZwx} ~xwhψZ&oߎ,O1`~k^ kg|W/[O!eq\ 3Ŷ^'f(yu[𾩫xNŠiA< p|  ~؞ x{Qo8|y? #}+⇄6|YG~ǧ;1_o?"mcѿh?xWß5׬%4PҟW{HAoß^~'v~?5z&o xWkWo [A+|fU|2eh~`~1}*k_'؃w>|i5o#MNj<7~?voGiOύo ]4G}_i>5G( `=agb;g-~ZeBx/?Pw< ٛ?OxǗ>0oxRǺ_~x&RO_to?W_'kF u#K?m"ĚĿږN[j'|'Y߳>ß⏈8xgo;g;Q.~ bπ??h>KO~"A?||w%0 ~|uQ;\hߵŷ~xo?]xψ|Q~45~ַExƝ~Țx[7[|a¯^6|]ޅ8 ྱ烼oߋߴ[fg>7?|[8xgh>|@[~-SKOºƝO/L]Qoׄ%kUt?ךƣxFOӼ$)~7H`O. ~'~ng236kc?GZ;@kf7^u/V> v >-GO?g*_k)7_I+9/0 6| _1}q韲ooT>#_ iY ?l7޾.M߳:/tÑ|N'|Y >}'sssW?Ⱦ6zjWmoӼw~8|?So> -mcZ>xbνoǁzc'l[?oڏvl|9߄9 O|?G> |Kuuo?#=x{׾4X>.h' '|-;|B>4~ t/|1,h?okZAxGӼo4CĞ:?U{^/ǭ#J)woA|!]/v? ?_?+ozĝ{DvxxB/jxKpN~)|M ',/~%?yEw?E~4i#]WG-GOV3~m~ ~ ?d- M?fh;7_ ~?AoSPG|9+-Ư [ >.{K?j|M٩_?h~|/:@6AkoS^¿ǿ |m Oxß?Q; Lg??aH1_tKWZ?O'_ox[D WgK_E <~c? x?ڏ<' -GZ?xwŸ> _93g97 Uо)d/|*5m^/x$YoDž~/=t.㯉^i߃>$\gOge|GU\-#Û~ |GjL$I?<GR߲S {Q6*:B~mFh_<3ῄ"g_^d%Of=tf?Qo|k/]fxF~^FyW=x_~3|9~2;sZP`Կ/dq<@Gǯ|{t6?wk73& ,0x-> x^5E˸&"? !k~ÿ'?|mg|ii5Wx_ſ۬|?4|D5]''Ə6=?yڟqkμ'ޑb8<-/<R{g?oKB? |K❷ſHrO\?Kែ?i Sk?K OK<g<`_?N~Ϛwۃ?ox{⷇<+׉?3?|V¿샠y㯉'e~/~?3,~&*iW%ψZ?/Y+_~ ?]o[xso|9xK+)K]oSOWio"h?w,[|/E? >hi&Ծ"|gg|73 ~Nx>ß >&jR|@լ|K|:|/oc?d_g?Z_|G2Zx+?e 9;<?# cٓ_ 9|`1x{ ~|AC_ |*O7~ ~ş`>| ~xe>h_Yo|K|3?<j ?W;~ҿ?io?g_?qR~b/ eg㟎޿_(|R⿆?GK 3Eg᷈>.|V0|j)^>kQռU:-'P׾)tbI]j>*Sº&<1x-_YᦷU|# 3߰4O?|]sQ2|B/<u?|zA_?g_|oJ|+/*vO|o'yxTgOxgB|C|)NOƟ|cmiό6bڏO~4j>Ӽ kGᏁ?~,+>t߇ Zu]UO|͟e_;TI2|Qk^5 z>0.4φZ/|m_$g%4+xGX-6i AC?_k? Ŀn* xG>_~+i5 [ mT_kſC7~h?<[8>ߴï?O> mh|%Ixw]s/ߋv-|#+Z/ůۻg~.u> j ,[ x-ww/_?SeFW(>|G~g|oOٻ_9|AӾ)? S⪭xWmᏆ5kS|q⿉ +x_~|W𞗢x|~W.'Ү55k x uS|x=m?Ŀ9Y3{&߄o??*|A> @POz;wϊ  oo| 'ֱwG>0G¿g̾ |eƿk6߳W? |k@iT?'x[:|Aqd<뗿 >-m k7~/şW~|Oo%<)<Sտh }eυG폎 3%֏' 5?c?*l _>3 96xNO}4][ÿkB=~^%(\;kwe߄_g}|7|3A@_3L?l~m;} ( ( ( ( ( ( |[?ÍR?M߆ |+ck{~"x?Wa,zv tYA6vO@?oۋ!^(ğ7?yߌ/:}?_H[??~7D|6OGxn\4m3a=+yO_K쩣|f_~2 $٧<'b7MOXxX/4rgTOĺ]?k~ȟm?,/_K~)^c➯OI]Wo+~0|Dk<o;߆z||???쩬x e?/~37LϦ ߇)_C~?_ޫ5 sLwY?Pg~Xx[K$~1x'ï,!񇋿5>"twWL~п1w~|q?S@|#S> ?=kT'-toY:j>7:6¿?`+Ǐ ?lgA_7_+x^%?i/~-|:fo:>qtzOZ j>%G\ Z 7%Xÿφ5߉ğ7_K"~;H\GGgb  w~/x/Cſ:Mct?x]SĿ8ӣxX41ִkdo <k-(Ӭ|U^W񇇬ÿ>x~O_|M?-^5./\?x~]$~ &o>})'_+KE+xgsA|{W_G"ƣ #eY[|@e[Kí+-?ho>)~@|;3c8~ e׾`jjoo?k%\⯈ Ch/<x{߀~Ǐt&?_|s{Fbg`gx~:|}S|_'ͭ|Y>œ'Þ 񧃭mc\gŞ+f^?kc[߅7-?~8?,|u|du㿌 5}]/om|G/> |??k';vڔZF= >0+~,?hCQOzOiOQᵗ5=c𯀵Ugx>%~A٣~~жwůٷؓ)K _ h(_^4_K_*/GDŽ ~w*㷆~7~_t%Ӿ7O)]C_z~ |K_O *Ӵb:| kE,wC.k};YүKmFY| 7fgo&%kfe!|B~/sC_I?W ~0Q*χ>c>ǂ'~A㯇O9St~#g|?]O?c/^zm#5/xc?)E?p?A?2N=oŸWm ? !? i_/A\u?x_)|/>,~|D⿋ ?h__U;8o~ _ fwÏ~ NJh៉ƵjjV7E x[Q)B<+xst]xOTO~ ]7V:v_xgPu{Hz֍qyok:Um7'61pxᖣ/?׊jl/'gد+ه׈:Ψv6] y;0|[?We  ZgU/VAt/O"W;?=Ӽw]cN[;_f3A~y*wW#_A|g칩i/gWkw~־,-~~|>_"i߃_5O>?-s37ſ)m~$)ouuো+N7n??G9}9>ơwK'@h.o񏂼WhOߋn>ſ3Qwq~j^7,~#;Ka?|w^G|R'|a+:?~F=BM##F~~V_ E?e]cπic?ط;?WJwggA|"iak :2Ѧxſ-{Lk|Eτ>>㻭8& H5iomoB']ŏ>.uK~%x8gόCA>,/g_4&7_kPx~_n.uCӠ~&[A׀l?_?|\|Ox~O|exPkxzCZF|Zuo\j>5?!ҵKo ^Y7gS_ s>0~֟>~ѾL~0MMӼ)w?`ov)mg'>g_?ߊZvI(oUٺ_ xg.yOKxOF|Og8~?|![j)ψ<=᧌Cx?!xQ*񶷠xsT0` o5?oKѼ y7މjۯW߳WG/ه>-ޑikY5Zo Ӽ_wB_ ~!B{xN/z__xV]^x /7_r؋D`Y/?)oOٷjm |z mxܞ{v%Dž>1u7zę'[w_? 4'ë/?⏌şؗEÏ ~4j?mf}Ws ?d O~::"moM|A@'w~[_G~)ѿ> -|]^CM9"FG?E/xgioߵ?UoaAXǟ~+=;S? 4k=SGσï~6}]|=74_|8_Y3*4о'Ͼ t `?e_W?wx5φ *kO\Ѿ;xkŚցkx¾&~-αQ|⯐, >?g?h?s_-ehS5 úO^.^L<3j fxX\^|kcᯈ|; x'ï G|t]k |#}^/ kfuo^|Bo.7v,|V0|Mf_i~>?~'Ke:7@xo:τ k#?_>Y ,_ ?V¬sY𰿴U?k9N?ҫv2|'(Q?f~?i5`?iOj5K_ n4*мU\K|XjS #I??7V'!1'3 /|$w{[u/_?cWş >"0şt8~8[xĚsNlW?"|efCswcoBo&='">?>Wg_/gIு?d؃඙|C|8&ßWKYA~|g~&|XSi>-W_/x/|?xuxO<9eBu(}>{;94'oYmѾ5GOwOWĿMk3acW4_}j?5_~ ſ >U[O_QY~b~>x%oKO/kߎ>_ïv|Mþ) $ @?g nU kك2\gxŸⷅ|1G/x{@f|Fgz>ͽυuج;//ٯºhώ?'Vk࿅~ԼU}jŏtZt^iZj7vClu07 L~ŗ5_ï/"A?_OO?Mه7>:66hzooK߅u _gMo]֟y|2WŸ x?/Z_W+9|i?;*O/g|UGRw|"u#Ƕ|G?e_C_ǿ'{+{QI}ꟴo-7Ɵv`hoi=4?64K? 6ӴǮxPǚmx;:埋nY~*yxYФ]7Wl/|Lc|/$?f?gk`Wx/Ok;? |M k'>">4o~'#Ͽ~?mc%w| G?c?G{g5Ώ:j:|MC~?`oڃ M?x/ⵔT?4"A_hz)o ;M? Sei;Mg,/~X~2TkcwW4-? !m/ڿ5N?R|V? 7+/_ؿm3ٻh__>=,7lmEu~ gN]W_)gg^S z_k hMڷIwxOE h||| o%/⧅tXV}C>ֵ"zFZ5zW[%g,f /j?b;a||׈?j  '^-M^^^'h?p|N7_g:O۟s'GCxB*~_n/G j^G'ï'~)xS? 5x'nhώMJ>%~; CD;??_>#xDN=>ayU>,|9o|?x//~*__~T?/3x;Ŀ_T4txcZ5x K]VzNڏAb-΍mb'h?gW7?'-S??g6?d?اw-+^%׈> xn 7^9Oŏ/Wg4_e>0|9ſ |1UNVa;?h? ~~ _o~?Aهx|8mCFW'};?h__u~~~N 1)/<+Nҵ !.i~ 5TѮ/#mgJ-9f5>2Osu~ 2¶pxa}Ao~~1t}N inV=Tk_?`o ?o S )?3о.CʟۿD~=x~6.b_ |%O#Iⷁ)?dk?|kKO0?,=A ,_O 7>XSÞ񧃮-cCӧŞ+^ѿh_^#~뿴?m| Ѿ%/T A᛫?xᅎ?9ox:Y4;=:x_㧅.lx?lxk[NԿl>  xaX~`mo3g_|!~?߄lG–/w—6 qڃw5\|-[j_L?Wemcg|?Ǐt)2|:XOσ;ߋ]I5|!χ_|ee"-3&|(<~A~7 ᇇ4;~oׇпc߂ßv,5AO57<_ig63l~ п9~8пh?~ŞK^ƞW& jx γwtxOKr:Z8_>|؃/YA?_Uk7 ~|Co/ċfcfoSƷ><{tϊgᯆ߷~~Ͽ ?&|Yl|KwĿGWowJ_ 1uƾ2`Qؿ_C|mzom/O <{_-/}'_|_ ~'x:ot|e/;+ -sׄh>x>/mg/׍#ςcosh42,:U C?X[ǎρ>e~_x#ĺo57>ٿ5/:/x|Z?׍?Ѽ>_<5³g~4 =m)=_< uVu{_?;?k/ƟO>/W_OT><+ g^7ixFgc=gN|Y_LJM7FwH4mgKӵM:{i╾`ON~ |~(G-+ߴ-sIkO4m?(?? ~*<}m"?aNQ>߰/O}@nE Y_l~. >;'=!u߅>W%^|#ᘼc?`/ _BOd5a~$|%h?dK4x|0 |cAs_R_.~~~Ο?/w><>x cx/TӾ$VD< +}>1KCk,ŞѴ}Ulek {5hirA>?d6>E0>WfSV?j6 {?x7 |'__G+_>k_P ᧈۯ<jcxo W>5z|KֿfK)~?GUe7'߉q#> |e 3Դ|K_ '|oŝ76kcG|tK~ ~ |Js/du>×0!_E=;^*Zvaj۞ϵi'Ş|Mx O?>1fxs¾4c>&7u=#AYjγ^Z^ks}}sʿ_ 5mg>GbٻD#o|E⯅0x ]g AiQ~/~ǚ9&~ jڏ}{O~(> x+IsO ~xgO|9s[s\*kŋź=gN oVFn/_:o+ Y?@|'?b4_^_> NX6k/a#w Oh~Egc,k~;[Fg_oŏόwf"Ҿ%-/mwO_×?uNRH'|{h1:Fh |S6AG?gُ?go o|`emcfO[3y6scW ^1>>)|'Úuα&=#AiwT񦗧Z_h[A,|e7fRiZG_?kq2//֝e>i>/>6[~؟_+Qh|Du%g-^~ʟUc><_?oxD! _:c"|/g~ ? u?wjGaߍPxKZ?i^>6N'Yj~+xX%8_x~п1w~|q?S@|#S> ?=kT'-toY:j>7:6~ |v_=‘f|,oZ?H4G~W_h~[ۭa@ggɟo y'|wß 5KPվk x+ৌqQ WJ9n_?şo~ж?nk*ҿi}kd_ڇwo> xO7_'ƾ'/|!^v->jO|!|)O?x ¾ÛBu`ho^~߳?>2|:{e/|3t#skiGew|A>|/5 wΓsO ό^ B~%~ŸuX<mďw2ҿe_OS__xDž?m?'!?"ş c-cq> xGTtY2So_+|3ƟzO|2&ڗ~1@<h|co>)9}㾝gMs^ /xx?do}54J>| ~)|w2|S%??|6ѷ?-oLsEOZ~`|⟍?R4_~Ϡ3@x?hK S?>_?sINX~wk/٣:%uNuKSK@Ï?|N//?*x_q⯄~*}G:xgw1j@ڿU='QmG^ Fb> ~пiO :8'^"+ k<G-o~:_/|;"D~ "f>[_?7#Z_?6D~ Wm\uxKh ·7oEMQ>J&&:+xoN!Q_ï~-<'o}?s_ | w~6|G犓QcZ^. mxVVWQ/MtkKQ?>"-~՟ gOo?=ïo~5'ôۡ}|Wg_Xx;.woh_ſ+7>"ğS//ÿ i&? y~mN>|=ǟᧅ~?N_<=/Wo #W| F_ӴG~>ϋ>9h7xkm:uY z?e<Ogj:9ك .X|qgN>!~ھC|bσu}3Ǟ"<xW%1 x{>=? 犾 m ?>/~W&3'ִ_Ǿ ]_ŞF𭞭_؛as\p_-w kzxǞ`~Ϳ/m/ؿgįx'OA׎Sψ% |b|]#v}ckxſ|i#e~&O:__s~_0g/aOů#⯌iw/#~ў.޿xW |cWwQKڟ'5^nH]zK|>dxB[.kω(íC4xZn|j~q&~x/շ?'>^x~,o~ ~ ]xWdz־5SZLψ=o=f-qϮ7j+?SS|eP o [E8~Ѷ?B/ف?7 oYQ~7Ğ!tK?:?ui_ c,|(Y௎io/_ºr+GxK_xKN4[5/zG??<㏄LU:e#-5_>4Osb᎑owJM࿊W> \➝%~u-/Ʊx7%+g= HGĿo_ ~ٿ~G<'}ƿ^1|;MD_W'x:+|3}GS_QU.h+ZǏtk>~?Ώ0|E3_}|@Ǿ'G?,|soOK<|a]m[|RÿzƱiao߷gΞ; gϭ?h߆_?%O/_'ÚO ֛M>_ƿsP j>?DQK~̿q>‰H_@F zY_W>:/?O7< :w+ N<=o G5E垩k:]֝iV73Oc{Lb8~ȷߴMÿٿ7.hOß|n?b'A{[_~~ݟn> _~?ࠒx{ ,~h ?f z~ |>Qw -c O㗈 x#bx& 7>|1ÿx @>(((((((((?K|KK]_2ٚƷ>sRgo5iZ}[KoS߇_>R_?d/$-4}~>0/mеgB#>Em+~CYq|@ύ>Og;:o^O 5Yw|y/{ {_^=:uoxFOO#+#xV~?M>ugk'>7 h?>WxgW|A7OMG^iӾ6~ x᦯owŞGZ_5R]}-?| >~ֺoA =~ΧR%g[/~~*3'u𯄼+7x~'I[_ /~#|8x_!{=_jvw?sÚǯ`? #_)aB/ OW4cUi?/ğ/~.x| ߶M?4Zէt7߀[_&׈<?!w__> ӼwC)?x/_OoكY>~'٧?+|3׾1| ixi߆z_o?[Ng|'4&~x:[x6_Ś#Wu!մ}j+&o?+7ȯ>xPT~'/o:"4 ofO Z  㧊o>xߵ9cxKNl1~Q_?Kς;K_Khho]}e< _ |2k// LJ|9=2KAs$Xe(RA;߰4GWMm8LW֗!?+ş67~>;o?+uckLNj~&wOӼa{ ]Zǂf~x;C|ScOk~MY +T|&ٛ(I˿(s?o>(j75# %[/i g|>> ]\xf?۾KhnX/cvO0E_?cGƯl'烥h5|W*Eo&$.%xGNJ ~_Ƶ?+KyOgjO@k?~/~Ϟd~&]iw+4m;~8N`WŞ*,meo|<]D|[~*xOY||3?$៊}ͤASFwB]G巄C) J|`I`~~/T /h:ُOo6߲ߊk Q_ÍS ~ 4.Kb|y~' ~_G~?g?A|w?Gk?_-|H~~Ⱦ?|O #|w??g_fW^=GlS㿃l1j|oJ>𯊴[]z`OEQEQEQEQEQEQEQEQEQEQE?f(<+\|^G oW_M[γ5 gڇE?|dOi>$Z?ڤ((((((((((((x¾𯉼ux~ _x>,txW~sx&sgh>д;SYuK];Kӭno`YT~ŚO߈?i/<{ͿH-_>82 )tgUuNޑ¾&;ixcRO1cÏD> | մ' +Bx?/oxR];G-wK#/xw@.+:]hwOjci#7IÞ?[?A$?:'>p{Q@Q@Q@Q@Q@Q@0|++~0|n|Pž*;ڏ>&^]N-~]X徻 ^~ |;/;g .~((((((((((((((?gk ~54ᗊ??&uKObkoM?dxHҵ3COi{em<^ExwmxGV߳Oo|'Qk Y~ᧄu88o<'׃ti9_þ.ΛxDu mgz?/mgᧂO &τ'hÞmtm\ӧŞ&[f^(?߰/*Q߲)/X?N4Y OCe½+/X- G$ēK3?/__CO_h~,4_|+[^Ӽk|=躆x{HiKYꚎx666Т (4;X"Xx#G|;|4[_E G,keApkwM4"@[cUuS;G;S^C× ޳|-Ρ/xOR,)=|+xsuo]xTwO W]KWvxPt]H摡hz]ֳqg&qhU/mY ~_9şg|пh?~~:|4^ƞ6~gx uktxO0l:Z?g__uN j) +xNҴ{j. 4-Kn,n4J8 g~=c> >,.v/W7otyl+xz[5R렢<Yx/h?~τ YiS/+yo<3?,6i{G,g٣׵E π|I& |$mxwxg j~xS|x~x+:o'G~t-C,5^д˝6[-#Oܳe;g>OaK#vë_?/#`xKC_)x[ƿٚE%^]~Z>Exdc| 4 |5su;×!_|EG^WZoai~4ϲSڿxO¶~*|ug~τCmNZ|Xwul =֩};A|i.zķQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^Kρ~)|k/ fM◌94۾.fxHhZgocS_6 ~@~(eK4+اğ{f㻏L[ |7ȿ ^qͪ?|%s>W]/i4+h۳I_? \/®)?gR_)xGXھ+J)@?L,ا)w:_fooK WBо x_w>#𮡦|R4| 9/|Ge +_>|,񍏇^so9߄ >xB[S /ï xwoXJuߍ~ψW tOg>xU$M? _/{%f[? ?dOt|6_c.5}3Rj?ۺ߀5Os"P _~ɟ6N{o  Ş.wm3X㿈;5r?|mx5׈.:Og='ğe▦h[PҡּSχ?] WᗀKJ/.t< {F Q-cWz&=/ O¾| _ ~ _o ;ѴxW~m{>mgh>д;=/FѴ;];Kӭmlm(?|5R>~|?SOxv(ុOǩd8xJg;E~g|Ln| cF?5!-=Ŀ_Uo]fš/߳¯d%麎>ocyij>5?Wem7s 7)x?nL<_OuF􏄞 w_@t o]((((((((((((((((((((((((((((((((((((((((//ٯºhώ?'Vk࿅~ԼU}jŏtZt^iZj7vCluE?ko7g|V5]<+; wOEӼ [Ñi_)s!~<%?:GTjo~gJoe٣h3_8 |Sh]/ӿIo~GZԼ?],]Ӯ<,4'? ¾/|3'~Ѽ'xOFӼ9_ WÚu g=B,Ft/NP?~.  x^-YX%K w?B2f|Q㻟i>-Ox&~ٿ[ }ly?_kC؟?EJlkO?-j~}Cß?ͣj/[B&%S)gOj _[^׆|cM>yNj:V]K'xĚw-OsO'wĽMݾ(߷??bizG.|w⏅qj~'?-co~..~ȿ3]h3x7P#6#Þ$~!|6м_O?<>|W<:~o|wo9f;*?Nw=?~gt}{}p诀?k࠿,,)1UY?Kjz~Wu"Zu__?k߁LJ8U|3CwOu'X QosM} Ww6'MZ) #w c'ޯM?y/ئwq'u|q߇6]M#z|3.ƛ֟ǎ~9hxG/{>ssWǿk?$ς[ cx{|w+]w@;5x/~)w #?<~~>|9l G/CE#ƛOw*>lK)G%4|6%"_ؿn? ǟE|S"fj:dOكoxOTO_ ~Rk[y-%ZVicq%=/,ѕ/lJ/O@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Wп+5FxO?%k;]:Z~/Z׈t ^xHЯ-k]S\ѴFKho]:弄*mOh/cC?F 9 @/"_?\MW'-`~ xtg/ofQ4?o4K]cŻVOMKYV~4Yqu^Y>(((((((((((((((((((((((((((((xO¾=𯉼 ƞ ,ѴWŞs>&mykt/YѵK;;TӮloX?͓?O? xS"-nx4_?H\>_'5Dc鿲/[Se{Xxַ oս/4 5|Xg&W|3|+~:e>+OŞ*|U߳> D3sᛍ;Y<oIxGQ׭YþFA((>5ۿ?gw0|_i~O¿j^u]uW毡k]og&qڭ7/s^E9 o-3Q1?7;Ñ_w-kzƑoZ=GcwD/x^?)OO?fO&O?~'m3L'-A;ᗈ _Ee|:j>w=SRW~)|ut! Lx;wc˟ ?gٳN^sڇ{Oᨒ/x_O-=:|gkм|G$>!a_oA<)}?$VO,E?;{nsc~)~i',{kOۣ➑-#|[u?|;]CYҾh^,Ӽ x__x'ԵjOGg' ){|G36~xfxmw]x?u+o v'* &wOcSs/|%[߲-Soea7KiU VY& G<[?E|犿a;=;dGOºt^w ~-o9Ww/S 4'؟‹7'&k7 O $Abk}+oW< ( ( ( ( ( >!xK/x\Z\fyO#}DsmMǦ^^[j?6<ZxO/U w]<5 3r}Dua{86T~rEQEQEQEQEQEQEQEQEQEQEWQ~| c?~/x_ghO᧋~j "7Ɨqxsⷁ4|M7 ?Gd/O~GGi:o?YvO?G_>^}K/_ <33ψxſ,5EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs,ѵWYjKׄ+y:scc >4M׈<9s9|$T? ?gπ^5g_;&GP lF⏀Za]wzGIxúz k_#oV%ks'| _?f٣N?g5gT9J#?e}0ࣟq/Ve_T;|3?ma~o}g_|KACs?Azù~x;KguB_Kg| ռAuS>x/_u/_iV}mCt"FwZŜƝiV3\g>EQEQEQEQEQEQEQEQEQEWox̑/Jڥr0\~.w RX&hqiOio障=p }]Vi~ x/_?ٟmO}$ Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|3miJ>)j btk=?Z=σ?l_ f}7 %Bu[]B×>3O Ş''?ϋ? Q 7]'7/?*_O +OM|= "#E4p袊((((((((((((((((((((((((((((((( ?g٪|''~|-5_iJ>6_.~#x6mĞ|Fо|Bt^/?|.wt_owΓ @~;|w,f?o?ڟ*%NΏ{?h~O$=O^(((((((((((>)4z*ۈa|suo&^=>S-'e;l#"ſ&u'QX?{Mxoڕw).-|mxԙo!~[Ğ{ ( ( ( ( ( ( ( ( ( ( (> ^~>h"C'?|xQj4tMg> S>+/ gχF🃼=N|'_i?3hzF HmKӴ: h"~ ??l{/ 5?g+Ú|Ig^?*k-xfW((((((((((((((((((((((((((((((((?di(@|4>EcO=5o^iWO tKƾ&5O?5?ŝмO%M+[ǖp|>O>b[<#o'{aÿ~8Buk:=#wtx ԼO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@o"E?x^__`u_ľ/w-ڴHdoٴnψ =p?ljzY_@/O|c>?~~ºo|?X>"}_>cPϋ~;%u9&St|:rjv_b)hS׼_xKT+QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE'?? Q ]'7/߱O-O ,B= "]Jړ.Gcb} ]~?oxKM~˞տo/_;SW%_&/&,GsᇈtAh2}_<'J^ߋ7g>/υƕ~?ڦ~ke߀?Cxß5ğ LJ>(((((((((((&?4tIτ5[QNaӵ_j>MN(I\i=: 5NT]=G_&*Լ#>K|ndOso\>͟_xkmOkhTO^3Y ^((((((((((((((((((((((((((((((((?mߍ~*b.[fQ⯅ |Yi&]W毡Y6^j7t0uy=| ]C~iSڧ.j^W/2dEPEPEPEPEPEPEPEPEPEPEP_,o)\ ~<Gށy<Śí+Y5Ӽ;x~.}\=?Y~)ISO;SK ^QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|/?S_^_ǿ,xBviOo/֘?,? d{׋eC\>]o>֙I> xAox:-7# _VPBIU??o#xP_M fq._.%&SAgIB ?(((((((((((?jO}V>4~-wWᵿn_<]~VsS["A{QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŞ|Mx O?>1fxs¾4c>&7u=#AYjγ^Z^ks}}sʽ|G'7{T²? S G+_§ //w!x7woxO^~3|V?|mQ֣~տ[x[\'?|q GŲ4tM3S#>ߢ(((((((((((W^gEc5j+KYn*;X&{wY)ᑣ,X؇P ?ZFIۏxŚ^!t]n6bM>ƝydUX2]jwZ.%4}3E[]* y.^x6HRv((((((((ּCxj;>e-ZEyjvZURG,mB ʐ8epcrW B<5gK'yK}BԶssj >jכvZiڦ!T_4[;xV{Q.$rEi?7wc+he_['wxGG|?5O|3w6+? | Nߊw?l__un,=7/_!м]چ?;((((((((((( ??gĿ/?]??Ҿ ?)Y?/"<Ӈ}GYhW#~'V4Wx_@]K7&9!e`* 7?Jvǿ':go_&Gϲ}li66VVVYCk *o(C H*"WA}Bv'4? ] /oXß3% C?T߿:=<]c?O| gd~ |9e$~]-F x/x?`EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWM~hj=/ƿ +Ocqw?G[} M|+__^GU~U:~oƯ?KMkwğ%֏%=WC'|A{&>[?x^,Ѽ:S¿_/uj Oj,ӯUxW__{P5h:E/4 Y=NdJӭ+8@=(((((((((((u<^N'36MHm?K͟r$6uk1ok˹-Y8FweU$yCx7~ >74 k:5;/]Z1Y٘n? ֮/tha伎@WXv/?IizU͇E4_ G[/YɢkڕzUO'iqaw<4_j7_ȳ.sw  -K|@#Fo]7ºUX.5Fw $Kh/淶Ejvjw'*!m Χx[ d3o=<y -/|_4\<^9apwONOp˨i77%ݬS>x>xS)֥vږm'V[+jy-wP|j>}kj4L-Q𿅼+JQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~_V48Ye.7,OaR *oBo7ĿX?_7lk_#'[/ QEQEQEQEQEQEQEW1x~~.Ɓ{-]gkVu-K \o}wnA/+Ǣ]}Xk1_"K0xPD~޿<+eŚíWYi;Ӽ;ž._u|&W+k۟??K?bU_?em} _Du_X((((((((((((((((((((((((((((((((/|Y/_-w__fk#KŞ.; _jY|R]|cmo3w3Whm-mi.nn&d x!Git(ѝUIG!zt<)4V":^mtK8Wm v:Ʃ~/Z|7Mն6o7k~*񎿧Im"jv⻭gY.TZYAkk{-1]\(Z>A:%;m3X3S?^V$>{cOIi}/ᶡ/o>ЏuMNMAxEkd]R m/(|?Z\XɩCZ4-BY^ix5[a!- (EY,|9w-YiVIP̖0A <0Adh QEQEQEQEp7M> xT?=*.>iV>!ӗo:g|Σᵊ>u?\Ï į|i o^- }m[?38Z/jɩ<QEQEQEQEQEQEQEQEQEQEQE|k.~ΟOEx7dž5O[ /|?t/jvx'f4xQ?&T=?k Q@~_<{S?>$L^ ύ? >xSx7Ϳ9QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE*;?wg_MxSYO|Iڃ_['&E?|Y_s] ž e?i_{oۇ ơ7ˏmGE@S'-?d|GxR-$OHJG^OkD?E.B!hyl?ɳigؿ`s_xWGM> ҭoۖLu<z^~m,oKv@~iZ>k}Q/- >h.:h̑|ɥ$˺?g.oKu[JaZ\j2P sKOw62ۥݬhi~ni>mzM$ΆKWWIxRuI4GuE;h/W_!P|IOOib;>Sz!-|Vlo\x2LttH廃n`t{iP BKyK'~nBԶqm>j58vZyھ'O{@լ>}[E,Yn(^K{  d24pąƁv((((((((jZLg?/bi|Gqi-m--.#+B[Nӌ[oq-B}p;J'iIdZ];ۢO;[^k{7\jAkm@:'K3E.z^m?4h- $o&gY۾Y1Т((((((((((+(/k?? 5G6sXhxKSO^38E9w?4?w xOH?~k?4/G<[xw?|Y _7oï i#7~п|Ej 6ؾ&{oMKঅjZ|wZfM3'Oo&T=?k Q@~_<{S?>$L^ ύ? >xSx7Ϳ8Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@p<t/?Xfÿ0ljOΚ5to2F;zG~<~]I]N (((((((((((MO2O_?W) }S',^?$´|JesO/& 5 l:'yot{RZ?OMO~'xcL((((((((((((((((((((((((((((((((?w_$$f cUA-O?|#={O4@c~ uM_wM5?Yo>|,iSn/׆o|??_>"5j4?O]u=bj gw.a٪//,|Gп|w6ؾۯa>_d??eh:"? / |MgQEQEQEQEQEQEQEQEQEQEQEjZe4}>Tn|=m%Ms\M$TK4vEU8zWzj&͆m,$Z\d}zsi4<'ML^-CHS.}JKEƗ_P#>)OIU-.4 @Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g◁>|,▻/eK/5o|?kj5 C3Bҵ=be4`? |w_>|[пt cUA-3ߴO]P4@cǞ6=s_wxR5?^k7-g#M?hw\?,}?~4~П|9bÖvRɒHxƾ&Cg x.¹>((((((((((((((((((((((((((((((((?S ,xn_ _ ??}_~?Ux_o?׿ /$}L|RO5}cGf o]sź_(((((((((((׿~ |?m?ƾ5ft{]oF>"kSF-kV]wxw?_uo_yi/-_}_XwQEQEQEQEQEQEQEQEQEQEQEࠟO߅??mmOֱsO> ~^5;MK^V}|w3'<1o+۳ +gA_ᑿa/w[hjgK(iOm?)L.c)O(((((((((((((((((((((((((((((((?K|KK]_2ٚƷ>sRgo5iZ}[K*?ٞ5?es) B|9oYK&K !c <)?| ƾ'dφ/G6]?m>XhxKL7xA53Lvh\e4}>Kӭ٧=muē\M~l4w#f:QEQEQEQEQEQEQEQEQEQEQE|A(g'~Q|97<#u :_|~wm;Þ|9[hφ|=Y-"KѴm.N[kh-%((((((((((((((((((((((((((((((((>;m~-?khך1K:΁\o _wJGs -¾7g&_jg#_??%?n?@袊(((((((((((((((((((((((((((((((+%Mbχ_O?i/[vsƑ~1ؿ 4[X|@/>о"Z6sHޝ-3>+w4Ş*UE OK#y'>RzC^32O /ᯇoR>(O|7j#+/ gχF🃼=N|'_i?3hzF HmKӴ: h"@: ( ( ( ( ( ( ( ( ( ( ( < 4_G0S7+_oCZk@?7 !oXß % CTyߧh_~|pƥ47_OWٿ,_lk/'#Y/ QEQEQEQEQEQEQEQEQEQEQEp4+? '%4O e?+V:oԴ/i~%|,W|9fx7V[cG|%WÖS_?k?ڃ'kn|?/>>[=O.}|(ÿ|BƟ?Ok A]YW񦅨?>|}q3~?/!# ??I͠~_4 s G?Vw_wa1) etO7~߰> _ _?h?/sºm~*1o~+k/ NӾ5Wx~ž'~-?oX;q W/Oa5$?A$OJ~_?_M kP[S¿g_z5E]_|1/O0v Ù |_jg,ψ?ؿ5z~?k Sχf?U:5x~&x/uS|+j:%Χxך?u?  c_x|m4񏊼'j:ogWϊ8#XdOOW焴oj;CMsK]~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (~5Wk֟ [?~K/vu/ +^5]H摡^[ֺijuy/Uڟ I"_4; sW_Dh¸O<[|W#_~!׾+x ߍ1֣i~>hǿw>!4Ğ1>'xǾ-ҬixYo뺼}?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@uVU]jy'Y?ٟbg%\x/Nj$7Cxnjt{H }3\Q.-+ktn ( ( ( ( ( ( +z?'' Qo |2} +1O'/Be) #.7wcԟď~ϿOSBk|gm*,%tC@C}WߏcO|UMĠ_»|WEo x\E|w,??i{;*=c1awCÞgt}sOkYycgg|~{eJ?d_|enXj_~$/ec~c,~K߳ !_>2|:I #?- ? #h??k>+?;x?<&gxr?]/^.%}S4B-K_ln<%x¿@| ef٧8__ ?0g_J  {[_z>y{| ''~~'G 'ş?iv|K _/좃2оC|;x?::~[~$~@$ZÏاoWg /ͩ>)\~׃ xkA~)|~kxVVou%q V>T}@~1~y] *I7oVw27ŸEQ^KTfρk}OO|@'潩h|{'_ 4 ]oY:'iv@'~k?n7KZ=x?_<?nt`o^WG,^&վG:VEmc?Q_qo?ak W᷍?l|a|/=^? ; _ oV=u|@ßk8@0JzG%w<7³C|OKxoz_W O$m-\@/_< 3~/tw-O,/ |:u. t}&'s?ooi/_ڂo ^M;_Mw> h>O__Q G/QQNVS4xWO| WO ?|L=3#o {QEQEQEQEQEQEQEQEQEQEQE|HNsqc6/M?_4 EefK{kkVWQCm/o\?eK讼A/5/~f7-/|_߈7e-yyyrhv66VVVYCk *o(C H*"PEPEs,g|_x^&>,|Y+:XMbH|?iwꗖvZ_\mسWI[7bٷ>i:ſ^ae.i;<9Wڟm^R!~#^#˟vgi xS¾&_' 3S-_~* F~jf~+V[GU|M{^,u{j6rir:uP;Ӿ=|_ijk/Y[G_%Ŀ{Wc_/eN'oE?@wx/ٯºg?'V׋5O|i࿅~ԼU}iZ=xEt^ik7rj7vXruP| o/د?lq?KxmgH-D 7-?"R|;@|?w⏋>.iSm~4χ_g~ @6Z] cR?`i<71o_o_Zf#sIw]&; - ~qa?PGL/^??O_'~ǿ'>)::ſ_7ÿ/e5+օ;GL<]}KW(((((((((((((((((((((((((((((((((((((+ٟ+oO QKUGSY~|bg_~{7 Q/z^'4h,??9|YojY?A?1|AWjTZmNn)}EPEPEPEPEPEPEPEPEPE,|,Mwƿ2g$~)xß cOjZGjVhjo5=?Loom(?柲w?q>{w )E'Y> /\hj tO~!|U|%?n'u¹7?swۿ DK=KoYCcj@뀷Fk= |i63QiFigZx-?J)@?L,ا)w:_fooK WBо x_w>#𮡦|RhZO 4=W^^?񥜞 ^$oK~#gc1"_k_,Ok?Eh%I o?g__uN j) +xNҴ{j. 4-Kn,n4J8 K ~f,/YW w?_mGOe b6~=B?k׿aτ '',% <{="Pt(mxÚF3xS~6M3~*ie_2xG74O㿆^m?xT~?/< &xYĭSQ;o :D߅|9ioEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|A!g1|x x:ΣG|ENsoO x>2>,w|i_ ψ|M<9}? W^ρ| /> ?x;z6 O¾ӭxg>gg6gkizuEA`~LW~| w x7ů+_(?#>׭cj~W+?VEPEPEPEPEPEy/ >x]_ / 7_^2xwoX;nŚ#_iOO-|h%[3lhڣW'?eG~#Þ|9F]7|[HxSgG?À_x& ~%7kxc;b/O@uK %Wz}/㻟xO<1gE\ecF;_c J?%O+ORnw&_𱿵|) /6?w?hOǯfh~̟ o/87>{_/Gे7W5;o#? 5Oj5xH|Ce;=̽ck|]O|,wq◉5 ٮ5tC?x~h^e Cr?ρоi/ i3o|95k?^𞛤xH뺟~ocS5;6y@>@a/;J=G~ɿ#~u|m־Ǧ\i&[,?O-<;S6I*"b O?{Jܟ+|8O&YO~Z 7o5-6NWo<1;Lmz ^)Y|qn?}C_ۿwƻo<jw?I'؟ `.xz(((((((((((((((((((((((((((((((((((((((((((((XYZ_5ß /x;~1o"? < U_ڇ# о=sٚmgQE|S_"'?wOi)~ 5=OI x']w1Tÿj? |]]7>j>??Uxs~ſo:~ӿ~):>9i?5;?_wOW?~)?/G<%xw (B+uoZOKƿ~ W]KWvXgOH摡koy&qhڭ6m^KQ_~hwhzZK>*+ ߷>/׭MYhe|CGm[7/<~)~ߴ_.>)7X.<~Z_/7Yj~xG]fDsxc3+Q_W?_whkkRIǦ ?ۼ] ,o_ ïb_ï߇~i/wYk h ?l_~xw|Eм'xH "O?gUo1~_!d5 P/1/Η/|_xM?X/w>(񍶉 Um6=k׿_?`'',%kjB|]PzwٿbxÚF㏃ ~3xS$6~𯀼+>_|~wm;Þ|9[hφ|=Y-"KѴm.N[kh-%(*oo +%Z~_Ǔ ./[MF> _ƻ !?|Gto3N-owŧb:>uW~)k 5o|9xW(Ow࿎/ d|?=? xuhx6|mƹ_6" Ǿ_ ?b/S n[5|E_-|5{Ν~hx^/Z>Q=;Z2|eψ4~ xf^-A'| Fl|4=GŖ֩I ???b7>8?l G~?C}^ !oďt/>i_w\hRq(O(m=+w'xs~#O~_EhxC~|q.Z? E| oS?S?Kh7mKW-D 7?-_5P"~|mx~z~ |SZo+XΡOA;xOwb?m_-E|9c񿄾/-sR~|U[azv{i/gM/)O<oM';ᅵ/V^{uQKo7/ xnQ6şmx V9◁>8,in G/K׉5/|@"iC3]Ҵbe+اx/{ihgOKZ? hZ+_ %g'w &ƑQ nu9co5e>~^σzO5h^~)[xgQ<_k׈|'GKVo$WuMT( ( ( ( ( ( ( ( (9xgN|MbzG,w/eq<_~؟M/ڣvot? O^/Ǘ7 tm#\Rg|,O(WG K͟φ~Ե?O%5}/Yڼ9jPk]۶?O?dc [Wय़? ) .|~_.t'toZx/_hW4ZZA 1Xb~#M/i M~ MG|,?xsE_ſAgM;w?|S[|*ß>+|z^C~$>~>=b_*A<à5g#⇇#kK:^li[cw_7kBMoşſ(>2C{T~!|] [^-~|[>sxwǾ GǿƩ|E_[|c<ľ%]W_L Ow0~"n3;!h G}x$?ς:UO2+׊j&uK$^?_tx?eOH!OϟCPxº7_Qlg/نU=|F<B:O,g(OOꚯƏe #O|Io?>$X5OuV>?^֬>4_~ЀQE:w<+ok> :.x/[]K.xBW5<=zyş_?_2-/6? >asR?k_Heg ?j杩A wn~P^'¶Jxa_|oCŸiϋsZwƿ_^l>4O:^o +)Oj?|BكGcbi?~8x]gifx#7o;ğ|A15k? |+G7j|:_ xZ_m_ IC%炤AD,E 쟬~uc |3GO# ~? ,GN_ AdMx[ΑE|C#OmN񿊿`|cw >t$?4|>?o~5GkkOTlgCg??7l_Goh> Mhoh?g|(9 ώ]qDkMwƞwL c7ྉ?<3OMmş> 5Zm^Ś?l~ȟΟ$,onZ^_ïC?T6$'-"??3C]ş Ok >#|i?c'W?x''uMWG2W[wj'$7??f|P?ּAl$Wo~1'B~|E/un؟v_iogX|XWPCzG @ZxWO¿ ⾣mh/a&i,RIo<%_¯ULC|KfGO> ' C|f; ~Ⱥ^6ImPxW<xyqi~*+o_6uoę|9G=Cž/< m_Y~`,<+ "  h9a#oG&goXT|,oh\~d~)~EP= G|R~7kO>$_;h hV>|*o|U{s > x/?iwٓCOŭkg/[0|r.`=K9UWW?b ?NٗŸO[r~E/ uv?oO x'_h;mcr:ol গpAj/+[/ o)t?ce~Сį_Nk1uؾ. -d=ŧ*φ?_\_#Y O7+OL? o!GoL_?h&W$|/ @x?ׇ<௎ > ྱx*k/7A@Wg/=o:[߇/u/h >z|}0|,'{ ??~+웥xg_AoS/~_;kw×? Ѽv^(>@g_?4o+|Gg]Q [x+g_x_n?@Þo5W/|'|>,|LKGiᯊ?h>5??٫ o>go}oo8+Ǟ|YooBx7_ǯϾ?B+uoZOKƿ~ W]KWvXgOH摡koy&qhڭ6m^KNf N?` ~"4l| q?߇_j>7kgl_C?D4iSp// tC'? |z^d"c?5?'4߇>J ~#~/x_E|- UоPOg_ڟ'm3_ _5x|íwIgom šg<|=xO'Gо|0<32;bW~.߃tj ?k3oKNO xg>h i?kOV6?-|7٠|m _ *(|25>79>0_-7㗆t~%/|O0AY$Ե?b>~<ۗÚcaSgOido煼u[S1kĿ>-d/-u⏆Zw[㏯6meOğ1ZtCg[]Ӿ$ k +://Zs Sޏ? x*Ю!.g⟃|>w` o_sGD_~6ޡoׅ~:hߌ>!W}of _x2z ,~?_W 5~"~5#u^~;;exr K | _'tM~1.6:'[{^}\x^*7?7|!kv5Kzxc_4x_oZ;? y֭j:^ƿ% 0|?o/^&4OH Úo<#cxO'eo/ǿ>(|Gh?hI+^ uG7Nx_{mVvwxO??:< 'XDd?3շ.'|c?[Ş"?lk)*4vZDŽ| z.}gG~(ۧu78 ~#@]Fg~u~1u7& [_|9x]|G<7D&>9_3S. Zvޏ&y}^ş&'!zOO//ٯºhώ?'Vk࿅~ԼU}jŏtZt^iZj7vCluPnN|Q G-3Om #]uCv?k+?.McN?g2?J?[.??sǯYO/~^1>S"xM}/į |~w72;w|uߴW߀-] O 7|~ #:^?v׆|/&Cirm{ >(8g;~o{Z|lMKS/wc^|96?.wt+Hx[_g?SK߈?fO"m_~Ϟ(e|վ8o{_I0xG<=;/AҼcOů?>#׈-/&?f sCA|1ѣ:fk]᣺hoj_p]yXg>g#E>| 'APt_~(~ }^5AxWZx'Yo~ {ou@|? ~͟~_|VuHïwL|k% /F5Yl;}K5M> (8>_P? |o~O2_Ӿxx~!~;|_sN~=3^QVEh>4~:~_~_??g>:Db)aK_wş?'Z.?)o F|a>(~޳r⯂k^>+|8n|g+O9?_Vx~~ܿ/ق}=k㏎? ^ `Gw[~ _]wYA#<[0pΕ!~ÿ-?_7}'~;h ~͟| M?ߋunm) ?fC^𯂼%7'AmAWߍNOA7y#7/z?ZKo? t+>_WO? >!xS/ڗτ|Adjٯ3 /s/.i?o5s/.~xÿ퟇?y!w*kzg H'{87|V᪬f |~ʟOgUNؿb +o >C_>!LOW4ELK|QVU/w_ f~?' ~'gg5ge۟A¿Ɲ݇OI| Oy~10~< Sx: Q_~?_<+fϏims?G>&|eχV඗4;WA{ⷈej|~)y*O<~=6<3N'⯇5%GO7OZ/ǍWğ~$>*]<~ˉ~"I\~~*|]?`9x|{|gWs~|~j'5~?e_~^$+Ğ>~%Ҽo P{B~Oÿ|`wilڃW}/$>2|Bm|'|0gm: Wo>x#[/o i_ďڟ׍9~Ul|oraof?{H~lO٫ǿ~?&OC_k^, gu[a?ho NOxš?XO;3Xvs_=EPEP?_o~?'ǿ4|TѼº?#~$ΩOڥ~+ >|RƧ|+wYP~_UO=b|0OgQgEx G~:m@>6~ƞ߈>韴٪k[j'|vl>$i/ZoDി@k3?j+ſ?hf٫=։㿂;ſz̟<%?(>&̿_hg>v_ |FԮn8pW?W" ??>`f"/~_O'2Z0uKǏ y? >wL/}?alO>2x¿f60~lw^+Ycڃ7I<7oVφ%%㋟n_G]2yǍ>(xDž"G/;jd_ګO> xĿMًkso~0I|3;Vg5u/5:?Oŏ|5' 7o>/㟀_S_~4į3 K>"x _? |__  iO_o9),_~0C~0x#'|AL|'> _oᶁ͚φo_M#MKׄmO|5I~sD٫Z|?_ ~^&~?{O?| |333>>|tů|@-|^_]1?x?Ïدve?FD~~Ưc?+_v߳W&?o>3~$&ů|?5m7,iǟkY!?E?@i]oßW%íkYxCG}ٿ|S$;F# w+熿_m(|`~Q^់YxJ5$ý'Ÿ/K?~Wu׃4+%O?~Dj_ | e G_ګxA8_Gdڛ>|]A~, ~Ͽf+| ѼO~-㟁>(|Z?S |#VGĿR/mc^>9|'Yk*__xg?gπ~ף ~?ixkᇍ[k/^4<'_W׆|?Oτchw+ NCx{X5E旬ڥ֝iW67O,M:w eH? g_w5~ B4۬_/eE| GZwǏ_~&~~ G]>⏍Zjo{x(u{~ ǟg iC|u|?/'ZG1|0rƺe߅~ѿ</zg~h:Lj?g#ƿ4_/ÿFç_?usG:w eH? g_w5 mC_k|<~0|5>0Z* >=X<ρGEǟh;?g/$ӭ Soy~@~ʰxWF-Zx'eOڻ5ּUs¿ڏះ /TgO𭯇5|dF9tοk' /xg^| Ax1Þ*🊼9k7|CW|Ajvzw_XsR K:M)|Rw?@~|&|XԾ"Ieᯁ>$|,u ò|K]߇w0uh>2.wKT}E|/i~))$|/DuI |GOÿ~?|?_ m?HUQէnuŞ|+o>|ig~1w4m;~g|G\!ω=[^i"KtmRN4뫛i&(?ӿK/Fo:;i;)iz¿@?i߲Fw+W&𿎾?M5|BMᕷ+?[|D|?DLJf];V)k |9ѵk:v%#O7Y4`Cs9:xOOLx|_ /⇎>|+E?gτ> /~M/6_ SVx:w eH? g_w4ç_?us^?'Xx>+'G,X59/ğ7Z^  ՞2v2u/ o^;kkl6 Oq+~޿w'[%yO9{O[x]牼k AwkxORֵ_'=?|? Sz5WP/; f <º+G6y #BfMFNѴ^N`(`i?d~y_+o`9R¿'5|Uឡ> XxY ڎJ׵M*:WU?g' x^:|41g~*gG!7CxW׼AꗗZ\_\sX?g:X|]pç_?usG:w eH? g_w5?~>w?? 'hρ|i7?*~ߵ')|WЭGϺswiCx?~>N,!tοkf}!>`_~|Nu/ojO S[|3{_OuW/|7VƿxQw|A Ft/P𯌼+a⯆o? Uռm|l%uiw ?Y4`C}/N?eJ?fw_Q|$F)ÞH5Ooem`?PEPk~Ҟ F|?:O-|Y;_OT;U|M{Z.YHu.YQӵVo"tοk+:|:5#^Rw-tSğ^Oo'¿jmmx{E>? x/G}v)>`N,!tοk?huS8z¯-įcmŚ5?_~G>կ~+|ox[㵏<|%g|I+oW|Y4`C%#O7A}eO o ƿ^4_5_ 'hCzhZA~,kwm;f|9sᇉ4??m|WWρ??A:ikQ]d~mo?>|Vz+~о!>x_?eƏ N,!澟)=|+xsuo]xTwO W]KWvxPt]H摡hz]ֳqg&qhU/mYQ@Q@|A&OoǾ*7u5<O|` _~6/߳'_>UmOⶣji5> ¿mfO$wό f Ϋ3ᦟ/uOuuc.~)xCGEe~_P+-#@~8^<3#Gω >-;2x}mAh^mkM#7'?_(((((((((((((((((((((((+W?hW'0|AS A߈;WOҾ|?Ÿg߁ڟ~ikߍ{ox᷎Gßg3PZ?f_~xZ?Cw~#>+LJk|7"?;Oc'_m^V㟂~_/c[ O>2h9x tQM?NGn]&go_4{m7C^'׌ oI J|A|T>_ ]7Ƌ*w*.+]gaj|0 fIm-1|٬|L#Z=E~P|@7"|6)[_ ?ƿ =犮?`X&= 7xZ~2~Dt?? 5-Fៃ|{%t_ߍ?~1S |+؟[_J ^~_?GcRf |:e؃ ~ϺOO_ h/Al8h f-G@S_&\wwWcmAuk \E_mU߆¾6g<?EQEK?o_ï>|7?k)7~7ho<)Zߴ?MxZv N ){oLZwP-ύ-~؍L~Lۣz7>8>u?G i^)ZUr?xz?~мSm:@>>woJxnW?o?f>5?q o ;~}XGm_o׈Kk}fχ_~ \kCo5ht+Xsi8_d_kC܏d~>0/@uO k?g/?q$?IW?>|?g'ڷğm|w? ~ :OxCej|CNUU;;W:W[ч xu o@Q@~`\~,|,?.2ſ~_]/x#GC %2RgR,_|E;bx>.vooY,O4w |+okσ=g߉>%NNM '}#kFkkoÏZ࿈~=Ysums<hgE Wß7?B~OOڊYѼGZo~!~>(%b(%|/?3g~ӿd(ǁe/Ï(_۟ᯌ)/Io_>%? o&qz⧍qgZ2|_? t\8P_~Пmn/؇7>_?bW]V UxTS_񾧨}~Ț U֟~ 8 'O^L<5s,|{_x^<O>񏃼Yi#<+=:G|MbH׼?^jwZv]\[Om<0o7_|AY Ko +nWn E#h|ISd{?6O^&$W?eEw ~/-:w?2zxOZׇg u~ռQ^*ova_= K (7C?ڛ ᯃ> _|`߬x%~_+"joO>$]?=Ïه N'wƯxM+tgAxg >߱N_S|[URׯ#S|??kkI?i^,o~% O¾| _ ~ _o ;ѴxW~m{>mgh>д;=/FѴ;];Kӭmlm(((?࢞We]Xw|A}_S4mGĿ!W: վ:u]ϋ~0x?C>]+NWož-W|uZ/dOľ/ÿZ?&ߌuyKx"TMω|kᏯw^7~6"xٵ¿>+Ig7 {/>Hş<+ ^]<3? /NOH!.o5}R~>j{ڳLJ0~51__z'?"B9xk?Y~=7~;>_OKς*&j;|RP?lSwZ>*>><}s[x~Xn?c➇j>6?f?mk'ྷgo WÚ5xg[xZi^OYW>7/m-|x:Y%`3WHt;P(((?m߂*?bs.'f<xQ⯊ |Y_j&{Wk7Z^6tw3XZEg7Go#ik٣?|@?d FRYo~ _#5OS1xsn8 7Ŀ4;/ jߧ5kχ-_Ǿ gMFӴGƞ*| go_XAs?Z'~uKy_ g\vvA㏌;>k [oo${}cfcJԾ2x●|7Ki㻏|S߁/ ~">-/~?/7ϊOOc [?xg\{GVW? B^o ?ዟ'YuQO ƕ}g(u~ >XO>9>(c?m?>xšGm/y>;.mP|r>^x[~?m? Y՟|?ko>mm:k^c|C'ZtkQ/k[tQEQEQE/৊dR֡I/|~QxWউŽJ +wIboǺ?h];XW/~УT'?Go?i">?xot~7O [^!f|U?/~<~s)_࿌~;!CmGŗ>*𯉯< x~6sxڏ+ :_h&?m/4t-:{R~#GaS'?_jߍM'7~ض-{SO^' ƺGßk_߲+|Sk^QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEF|G_x{Gg<tm/^犼u͍<3g 7^ k5| ϨE C^iw_oş</~:A9R炵ScGŸO2xCG| oG#Хho>8=˟YWמѼ??ZYwYmG~|Us/oxGu TY6_j:=Ωc?ţ|;Oud]_[) io^"g߅ oK?+:x.=cX<)kDvO{xe | m~_ƯxQ x#S(j4oT#xcw~|A/4?>#jo?߶>0?_~d~|/߇*u'gX|-?'A/z??t>M,1s/x2|3aM~ؿN췭|7٠xƚAW¿G/_?f79(~0~2~9|q~2|PӾ/>;>gG߲|Ck-5xs>JUg-c@x;=1.?٦~~Ӟ'b |c,/?f z;?5/ٷ[i s?Uj?];73{PI`W%i|Az/ |/߳ Iy|\W>Zog|q߳o--;1~%OO2>{`x/߶oѿfFo#T'<{ #:gǍ$?2|ak_ϋ?t:;Iwhx__s%_? j4x]WzOWvW_|Ko_~O kg⯁,{L]?>^!~*O7~~eOWGڇ~yU|>>)x?k߶w|t&6|%?> kw<k~69<-_ h +[We|, oZG_Z_ >@a95K2=_ӟWw_lï_<x@c Zž ~xC_ h']اeOrc  YCGn 0-|]B?:O:79|eW_WKl;𧅾)x~+|DO6x[?~!F?GqƟt?cW>0x\Vg?~w|U__g=O~ӟ}χ?'SR[oQ|U#!r5GÞ7t ǺgY ; ƚ\XO7:7k\>崾!6-kC,Ck|Wd ~>-u~6=n_>8W/2izWx߄7/? ;z7Lg h5/'ǀk¿+{[^]eǂf o/zxMŚ[/5k&Oڗ~xo߆~x~ DCcֿĿOg>3Fo?Q3qx'ß>? wO]k%LJ<KV?/ iOhS|NxK8?~'> xÚ 猾 | "~ў4lǟ(3υ>=u g@| '|H O&şѬ.3?+9EOM<?^Ꮘ/~xf09?hÿlGhu7#gx>eO>;eW~>#OPo~LHw+ߏaXAğs>3 -xŏ> ׿d I=x/7 |?x_Y|K_ك|ᯄτ |d?go h0h6~0~֚o7Og&ſ|>67|&?ٻ W/~-s>]獮e?ڽ~pxW|U':?Ư{/Ck^T:|A?wï?>?j?>_?5/?lu1u_SFʿ~/x>,7}~/FQtGPx^{Ş(>|Ks6 Dž|'_>?|l񷀼7/[|TxIZk h&i??a{?τGO?lf#6ߴO_=5Tfw6j>,W2MG>/|NJ5G4?h8>%xK _Ğ?'DHZA?VNJ~(|TAo*O$'G~0h>;~s#u_k*QO>'.u"ևG⟇x'ُƣQb]-F.?f Ɵh+^~ 6Z[\yIO|`|Z|)_ +>;}EPEPEPϏ|Q ?go |kh|-v|K(|ԭj |Czƻ]k_Oom&'?m~~|?f3kWOo?%?>+x-[|"fW^OڶkhW?k_+^JKǟ_p|SGVMT/b*xx;@?g|'׾2Z!Nk_ }?W3/Gq}~|7Ɵ/WE|AcO Q)Wºtx/ #k4}o^xW~|?]xYw|YGƞмU>sx;GgxKYΗ:Ηc\EYP~&~>._~<_Vp|ƗPhw[~.;|:/~*𖝧|8 t'߃_| ?߄>|4/>&_|;":?Z>;<9.g6oDt+dYA#|O>jOxO/o~WIK^||{?7|GG<~5W?. '?4/Ŗu T^i&]{H6^w0꺍Ey7W_<+59P?|v˭:Z~/E/_hV^xHЬ5/CѴFKt:ⳇ(W|P h3j_k"'ǟ/}_|b[x[ĿjuSݗ?:ǃ>"Be߉>?w!ߏ |G̿4{o,?~,~ܿ>B?c?'4Yg_߱?i[^%5_~2|kv|e7 +%O~3C7@"~,P<韲^ gqd_^/Ŀ{/>e~Oؿ_gG/:tS{u_ |W |'࿈.~.~"kQm š?~7~OşiSGoDŽtڣW__KX?;0~ G_> |;-"Pпa_?;/0~4uM~ܞ,9;߁#Ҡ?w~<J|%}CYj W_Q-/R,_ t}F˧?u,mߌ޳NMkI|_ gAm_%˝wCyx.G@7¿W )oS 0~4># 5Zm^Ś⯄?t.w c2=>>|3+F>*_麮su~Ѽ'-^ 5 |4n|MPI_ׄxg_)z:#3 %j??;k<3vǿ;Vx'~6}/W:7þ?:k#Gi?o?l{/%?|+cPF5O Ÿx>Vt|ei7 |Jм^a_~:]?-OC3e{|}gV|Tu]G?? y֛Rg~GxNό~ >Se;_?j> o8Wi:;*(!E| >xf]῅?]h? |;-_# ~?x ~~> .>#~?xVM;:Q2?|5!Pv?xcÚ~%ϊ|5<_w?cWxNSO>_cCw vO^ vxSN_A e]+?Xhw~#~-~!|-~,音]֕>&Jᗉ/; iωŧk4mBo^2|vW?4xj?g?ڇxiwm7?%|E*E~O_KW^ Ǐ('e;[[xJ úğ~;#}_)?ix< eK⾥\'?ޓK/ ;=?/{w‰[Z)_uᏋ~+~`ş(_?*~_Oڧj]o-ſz?kO|Qotm[KY7|<g_ )+?|UHxm?cOOُ >ou?h_fz??ׅ|uC_WگG6 ◂e\̟ ߲ӥ/I{~^HNǺU|O$x/~#9_ |d| qj:kmŸi/ߴz)E'gu )' ~ 5'_[|Q<'~`}?ۿ׎|M ~3:/?ξ#?x||#]_ ^N~{m_gx7ⶅ>62Q{'ٯߎg?z¸uWY#վ2|+Ʃŷ/gh>)=;6)⯀?ǃ P[]?n<u|=)o_gǽ?\散x>?>*xKCk9ic–>3uQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ_Q Wdoߌ>eϋ߶ >΍j_ E]ǟ_dž~$aşd_ hz5桦~!k o?>4_P?~~?[; -_ſ%; g|k G߈u2ߍ#7> &_0~>|l_ _Pwu:>4 cྟ?Jխo|Tnm|<|GCq?cEiO_xG?+?j%C0j)wֳ(5^%kOszO!?|?tWŞmx{sykt=SFt˭;TӮng)[3?#k㯏M=A1 x_gG?#)yy> j%;G|O>~/(q_e߆~^k0k~0G흫bY࿂_dx' >~?~7.,Լ%)d^_ _ + !Axc_yAM4+5xŞ|Mx O?>1fxs¾4c>&7u=#AYjγ^Z^ks}}sʿ|F`Rh$Uw~e~,m|?Ӽ[u|R[i&Wᇉ|A |MW%^ӵ x^ӵ[O|s⏄gNJ>WA?C60xxoW_s??/gkhGύ+x/𷍵733~o^/q'X9?| ӿP~!/O|)ي O. 7텬˟Ə#?#kl>o=¹j |X?w|EX_ܟkxşG'φ:?_oo+K{~ў-gگnJkWj_w R |9zí_>?|9x)$1,~>i |N@QEQEW 5,GIKUiS~Po|9{#_Ng3:l w~5Zu4?_?g/~|kt/ٶÚq?d#'ƿg'O?j9|.~P{/[o(>)UO^ ?_ŏS袊( Y>K Ox?|/4md+D>~nD1~Ⱦ G /Q|+~h3w6[~Ϳj>((֝f_1j\ƿ~ҟFxOo߳/~1'kWMWO>׈t ~Wo-k]S\u}:;ho]F%+n'~)]xk>GRxƿZw%_|5/>߳ڎOƏ^Y׋|kᏊx]Ʊ}EPEPEPE~p~z6IOPz^o_exM&|K{3;]ZJ CGm*Otx^=U֝O?l .:ֳ?xZ.]W,͟3Ox×3Ŭh1w<+>gm|3 y~@߳6+  >|DgoUf |Uwgo~oG?*xFկ߉Wj~|E-CƟ,G@Q@WQOx; F+^xΣᯈ_<+be/|EW._<!KxWfO>xsTG?0/X)ß /g,]g W$f[ 5ѭg eៀD{Nտट?ρi7/h?'Ŗ~O|>g?| w?>$>+_,mc>&xOvz;AӮUh/mK[iAOxZW,l//ٯºhώ?'Vk࿅~ԼU}jŏtZt^iZj7vCluAN[O0$BoO ?ËCS.4 k8 ,D||Eg Tƿ]?_g|xz_~5K_¿ ^*ӵ]b:|uh:E/4 \-tk{5;Fo{m:X}Fg|GG?uΝj> U|3? {x>4wmmb+=F >!ٴ{K!Vzt/| ~3@)?wRԾ>7 d_ٿMcV&_[_~)E{Uk~.~ȿj?؞5}/ ŚΝ O¾Ӯu!.lgyk:ΩykizuK*B_ ~!B{xN/z__xV]^x /o7zt/#iyVW 76?Vߌ~ڶ0xVZ7o.uCQW|M ׄC&|Rm |Wo}п9~8пh?~ŞK^ƞW& jx γwtxOKr:Z ß|'9 |Y_:Ŀ|i[8yAM4+56?_u/k~G?ǭ7B>鶟 Ge_ 3 #scUhk~ 7 jlT"_/ue_;fZn}m>*|g;F"oV&~xOŞ|34Oŷm?e^ OZ3Uگoƽfw@[ w|R|/GiºJ?k"G<;R>.~)dO?I|IIx3Vc=^K_I? uS_k:+;e319.?(/>(|/ ?? C~*^xᗈ~߳ NwxGşZO|_:O' Ϟ$+w6~ǟ/\ӼIj M}_o5OWza?~pX|i?H\CK[R~_g}k_`Sgş燵_Z/M_5oh lD׬Wz°Cύ|-gi3x/¾vs #~Ѽ3xŞ* Nn|Mk>#,uxQkc:Ω^_OQ@Q@ |tg+⟅5E>&+&;b~7 MO wi rѿ? ,?,t/>o#OEPLog/b}'BƿMÚOooB 3">(,߅?/@߄~" ~ q.oSO<~ {!Ӵm;֕t>>A { ?w/)Pxľ퇇? > q *5/o^B|0eO?_@'(v٦Z/P2 |;*| ~6x{⟃tj_>")|q ~=%,S|WKWx㏂WxV}ïQ?5ψS?o |c_অ>5xwN(+ڧ৊.xW׉~j;~_<#n˭F·>*4x_X^)AƏY?>&j?4?~x*~>;W/ ??we/D~i [~:jw!(>j1iAG>*7?;O_ڃ⮅j<{klSw5Oj}?᪼A|6֯w|0Y>xƒ >&~|;(((Οm~_ |G~xMxLx⯈o|#-Z^$jothC]~x3me~#'u@@@i |,o"hϊo ?o].j^ / xJzo~<??T|,i_Z?o?bY&?}w4k/bӿ*x>sw+_y 1|o?fϿƏ(p/٪ie~> O>?M>=J|3~f+_O֟ڞ |@Ԯfwk;EW7'Pi g>2X|!}+G3NAҾ$|\ok<+g߉*)iv6|lC㿆~&?>|BkC[kxúf]h_9tsZ- 3 ۃ=;gOFQ'#koxk|?}#,,~x^AzPcog~: q|x3-O⯇_eӼ?+f|!Rwe/zƣ᮱xRWq{|v='~ ~>_Xy>%~WOt x<%뿳|Y? x {oLL x_zMxC()S¾{j "|c¿j֜w>wxOKt,`}<7ᇋ~&x&/&ɼ!S^~*bxZhoxoğw + xW^(Ҵk?'|V/?w>XhW:_"wQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@engauge-digitizer-5.2/samples/testcoords.sxd000066400000000000000000000213531222557406400213530ustar00rootroot00000000000000PKTt-P-Pictures/100000000000005900000047CE790D02.pngPNG  IHDRYGw PLTE̙R\IDATxm E1lm&Jow)''[b-'~3Ls#L*gAy ʹҐ@BCr4 9hU~VVuъ衼 vz(oc=&遞-iRiJSβa1]f[|@o;K2u-`t3螄BZ@wKzbpwv:b ̼$45ё磜AY~$|&,W勵DJ-n&ҾU>/u蛺G]}tDkgDkj^jΛz[b}l}g^ǚzd[mm /0-DIENDB`PKTt- content.xmln8)Z,0 IJDIm2l6^26m Ex^b/I搒dI1dV-D<g.~|ZaiDK2L]#ɄNd~ra?^7}IY4!S:Y/I&4xqEB̠l>hM?K 4XT5CE~&`[E M\zVv?EUw:z6P!W`Yyf4FQ27*l e-.Z-CKLR~hN¢ɥ'%UM30nѯPe/iE&#ڸ4`>)^8J|%sF]neȿ@Tocڊ;^&uŹmc]ӄεUqŠSyTW R^y%~(|qL2-頗?Y#~R _YXդiq.82v#v t'PQFͧDCmM%յkMU7xSEk)eʾ*觮&ok}3AvPo\t[HBe;\ҷ;_{?T,SM":n_ktOۙ{,#rb|]g~v*0LS\a䉇6/n70VEOV1j>:Ww@i+ ẍ́e,W5:TPʦQ3n7oIA_G4ʴsUX/503xoN?@*o\j^{dTD([bڻ' ^z`h ^Qx'7E^ƌ1h$*/WB&u|򤉀@L9Pkh[($JKYQ$ڒ U5Kݵ-[lkL&0Q鶎4t=fBzWf XxOUx@mӔňƲ}+dj vP0> ;8 k# _} CUDAQ))|VDeL0G=!N`؛j ǰ}0\A膡" 70x}%ì1',/Ak t%3E FnW?B`80@ufp_uc7eُܰ<\T+ES$Qۀ r (й*Cۺ>FڒKC?gUNF:^T`TbhCx4z3aahYCЊ#(cD P4v`[CܠbT;7A>5PPg ͮc;~K05wTcp\`8Dڨg^ PU~n9QHƒR:8P??2 sDT/oPO+z+Sْ &4@ V4iRˡ٭,M0 { Rfj^B8?3HOI_^):rlk֟*Қ+$ThٯF+*(wm+PtXT<2{AGLDtwWW9n: +Y$-"khmGj}br[[~ciA `Å7Bb?RV@[?s9icx8z. _U9~{,j9kG;-DprYF0;grN]m?{ =3a]:{h%? 7L~PKZL" qePKTt- styles.xml[r8}߯rjE^S83[vZ'U3 I -{~bKH$c۔v7Fw ϾKbtKxNYzny#B$ YDչӏ/gӯ!\ҐF,, ;1oY|HAI_9K/Fqw-dFA4?sk-Dv8 Fa(뺎0܉Ai)P WVFSZ'JE @fEk,@W G _ojlc!ȅ[J6oX\hj:z$mPӡ=t2͡cuzv0O| eG8CZ<@-R2efC )#ch%CO%⍑.S[j0jk~ y=g1KY,=+2_Z>"#2:"#2zџ `PiN߱BSΧTPo|OӼ^ o?Oa~kTJBp^G&v;ڵV'~W8[ چaܲ"vsw-~v{^ll<틃leN M^;|o4 tΫ2 T-7zRpv1c\pL~jXTQSc5mپ7b8⬀ԓ?{;Q%C\QU1$/ Q}ï}~  !:9$leLI9vhJ_R[R'u5vz:[t?B?PK5N?)=PKTt- hmeta.xml OpenOffice.org 1.0.1 (Linux)2002-11-03T22:30:012002-11-20T13:02:41en-US20PT1H50M3SPKTt- settings.xmlZ[s~_a2[0ɖl{oVY2e H2&ZZm.zXaIdL^<;}P~/r.~^IV''$&Jܸ9[(XՂlީeUº],+!˪u4PA :poŹRo%xSmZi_gJFS@LoPyv/- Xvf |'^^oO"VFaqjXR>oc#H<vP0H*^ 5/Aȭڇ}R:;j|~< B^ʕGO"8< $إE{ÒpLff$BRENE{x`^,&ץ:~BW2 ތ/B1C2<6'ߢ$q5#K453tPtY70Kʠj˅/U4fbwjFcE2C!Mn[jz5-[ُ^cLU=/] [i bHpY< #&?v?޽(BynG#TfB[fCÍ4_ l˨?$P#w|FcF.΀р]""ݿHpsMW@K|. ~g)|AcE{р!b$h䁂Ӈ7:f^B$sfz<9לI+A켡3^y!0GA Ȑ5)]?}I""Ҝjn, OB? Č84׉ʆF7`N0#<@vhxSs?!&cu#Yt+VX(&H¡ j;[oED{m%܆oX1qĐ IWD.KCS,4!3;ANv-N@DUxpr]rFM?݂4.ٓGoHx^I4A K_78$\us#xc7(0ߦ4y `)݄*1UhY1➑O#`D9g eDJ6STt>H^M;FzQQ4!5¿~Mx IFUun}_4iF$ޛ`,~v!p%^Ir̨ڍj"{IfQdD%SIò6+|G3g~ԇߟzPͬaY:B ڃB^ݞ Ѓ=iVq2{1Y9=?bIWnT1|tnYc 8k?fմĒW_pӱgz}VA[JK?}7;liǃMv2ׯuzH?ڏWqgAџColk̰K2NO4tki5|y6j(A9X@Y[L5L.H/*V@Rl*7 M V%5uRgm <_48L¡<"nGFӞ:5k u|[{%f_NnxgPK[iPKTt-P-Pictures/100000000000005900000047CE790D02.pngPKTt-ZL" qe content.xmlPKTt-5N?)=  styles.xmlPKTt- hmeta.xmlPKTt--m( settings.xmlPKTt-[iMETA-INF/manifest.xmlPKV!engauge-digitizer-5.2/samples/usgs.png000066400000000000000000053463321222557406400201450ustar00rootroot00000000000000PNG  IHDRUUbKGD pHYsaa?itIME !?q_tEXtCommentCreated with The GIMPd%n IDATxY}{!s   gP2mJVx     + 8J~Vo! ܏| S5׎4z̆[ MfNOa          +@<w:e~ gQ.Hs4z̆[4z̆[ّ'oP]Na]_7Sgz(Lh~gQ00.Hs4z̆[4z̆[fKS\~  av%  6    G/s IDAT 7ǷL &?ǷL{\r#~hM.Վ4z̆[4z̆[~N?HST\pl67ɭN 9IT܏~mM.4z̆[4z̆[z 2\   @UW   7μN +@T+@ǷLǷL#;μN  7ɭNߍ~ p R2ՎHsHs̆[4z̆[|d*GMz l~*    "<W7SQ2DɭN Q7W+@ɭN  +@Q8QɭNT#;Q+@ֽQQ~av%ߍ|pN3Վ4z4z̆[] IDATz !s ߍz  3 &EMRu u      QɭN+@UǷL7Q$>Q%  ǷL+@W8μN μN+@Tҕ  Վ4z̆[~߂b (c %#; 2DV+SμN    ǷL+@T ɭN7T  ɭN GdJՎHs4z~.(E|x Lh\r#D 2DW8μN8QT#;TǷL ɭN7Sҕz a.Hs4z̆[ L*(Ka zNL? IDAT  Bagz( ɭN 7T Q      A  Qk$qՎHs4z̆[4z̆[* .LMz Ba5QQ+@TM4z̆[4z̆[ .2GU~Lhvogz(0   +IμN #;μN    \r#.ՎHs4z̆[4z̆[ <4J`   >c      7ST      ~Qkc2ՎHs_r0 IDAT4z̆[4z̆[Y}aS|Ba9IμN+@Qokl~*SHs̆[4z̆[ c8J~      J2DW+@Q+@Q av% |sgz(04z4z̆[aM_~| Pj\r#  ! # Q7D+@W+@μN Gd gz(Vo!ҕ~bՎHsHs4z̆[a0_ IDAT?J|||x QɭN 7Q~QkVo! l~*Vo!*Hs4zbP4  FEY_}| av%        voVo!av%\r# Փx b 0׎HsHs4z̆[b..6'&||x Kgvol~*\r#\r#\r#Փx R4z̆[4z̆[02[  {  5f           ~gz( Lh av%ّz .׎_ IDATHsHs4z̆[4z̆[bS00, ''&& f y ~֔1hGdgz(     9IJ   Vo! ~~dS+rՎHs4z̆[4z̆[_N20.4'''''&&]z | A`       7ST    cS,ՎHs4z̆[4z̆[`Q5.02 )'' z Ӗ1hVo!       +@T8ǷL  cQ,Hs̆[4z̆[ IDATdQ.,.az 1h+@Qz z d0Hs4z̆[4z̆[`M* }| r      μN+@T"<T  r,~>c~u gQ0HsHs4z4z̆[_*00z{&''' u`ez  r μN"<Tx ~!s ~g4z_J0.0&'''& ݐ&n    μN"<T S)#T IDATz z ߆~ gP24z̆[Y}`2}kj_ x       A   |bPHs4z̆[4z̆[c.2bx \r#Qk~|bP.4z̆[4z̆[,~j r,     "      RՎ+rՎ4z̆[4z̆[ IDATLAhl~*aHs4z̆[4z̆[bq   l~* Vo! av%        L)r+rՎHs̆[4z̆[vs   gz(\r# Vo!Vo!    `2Hs4z̆[4z̆[fM77;' IDATgz(gz(\r#Vo!gz(z bdL4z4z̆[a`g{`q |sav%gz(av%Vo!Bal~*    |y| fb.Hs4z92A=;'&' iu  GdLhLhLh UZɭN7SQ\r#Lh ~kN.Hs4z̆[N9557AGG?z(&&    T7ɭNdQՎ+rՎHs6y IDAT4z̆[4z̆[LL2c\r#|.HsHs4z̆[4z̆[J;(8g  Qk         dQՎՎHsHs4z̆[4z̆[LA?*&<_c     !  7SμN  av%'ou ~Q.Վ+rՎHs4z̆[4z̆[GEHle IDAT, ?M`1h7SμNav%bRHs̆[4z̆[Y}G?AE2(& 'M`g Ϙ&n 7ZμN    !s ߂~fQ.ՎՎ4z̆[4z̆[L. M``a&n % 7SQ    !s ߂|P2׎HsHs4z4z̆[N[  KL`aڒ&nP2Qo IDAT4zX >_#p  \r#    +@μN T#;μN   dP׎Hs4z̆[ PN`bݐ#p +@T#;μN2DJP0Hs4z̆[4z̆[E   @`w   r,&   μN T#;μN"\r#   |P.HsHs4z̆[4z̆[13 IDAT ;E^|w        ɭN   P,ՎHs4z̆[4z̆[6AHc|w r,ߍx P,4z̆[4z̆[J4 =Mz |y   (  7IA   N0Վ̆[4z̆[NO=M`g     l~* 2DμN";Q+ IDATav%Lh܏|| NՎHs4z̆[4z̆[MH  ||  ܏x d,׎4z4z̆[LG6J`h\r#NYQ"<Qav%Փx Q,4zL=E  }x     @UT ّu aՎHs4z̆[ IDATL6!c6G        V8T8W gz( .Hs4z̆[Y}Magz(aQHs4z̆[̆[, Jj$q  ##  Vo! dՎ4z̆[4z̆[MJ|4= IDATj|܏u q$>μNgz(.4z̆[4z̆[\C` x ܀!s >cr,  Q+@Tgz(u P.̆[4z̆[,WC`i    }~Lh~5 Al~*dՎHs4z̆[4z̆[P,;NC`i|~'or,~l~*P.R IDAT4z4z̆[P*@H_  }z    \r#  +rՎHs4zL^  {~av%  Qk,ՎHs4z̆[NML^||av%Qkx MHsHs4z̆[LCՖ3 IDATL`al~ s Lh~Vo! + Lh~b,4z̆[4z̆[PJ\PG^a`j b!s  l~* {l~*u iR ,ՎHs4z̆[4z̆[PL\gRGbaqhayx   5av% z   hQ ,׎4z̆[4z̆[RG``n_$qr,vo5gz(z Q,*g IDATHsHs̆[4z̆[M\fSG_sngc`}u   {~0Vo! ~ fP .Վ4z̆[4z̆[Y}RJ_sna gz(w\r# aNGtGtGtHs4z4z̆[aRJ^hb_~l~* ~|f.GtGtHsGt4zk*S IDAT`PQL]eilb^  dNՎGtHsHs4z̆[bPJE]dghb`a|dQHsGtGtGtGtGtGtGtGt4z̆[H`^dcb~|hQ,GtGtGtGtGtGtGtGtGtGt4z̆[4z̆[PHabddY_ ~z A IDAT dP,GtGtGtGtGtGtGtGt4z̆[4z̆[MJMH__~u dTGtGtGt4z̆[4z̆[LLMH[dRz !s   Q2GtGtHsGtGt̆[4z̆[JLNL`g h`  bMGtGtGtGt4z̆[4z̆[q IDATLLLPLLL`gz |bM.GtGt4z4z̆[JNJJbgfa }~Փ~aNՎGtGtGtGtGtGt4zJLM  ff x Փ+maP.ՎHsGtGtGtGtGtGtGtGt4z̆[M_I" IDATa~P.ՎHs4z̆[MMbbbPP0222.GtGt4z̆[̆[Y}L`` P.ՎGtGt4z̆[4z̆[H^ d   k.ՎGtGt4zC.^ IDAT[4z̆[G`c|.Hs̆[4z̆[La`edcbgT0ՎHs4z̆[4z̆[NL_b_dbbi_24z4z̆[RJL}ZLi IDATH`]`dc_da dT3ՎGtGtGtGtHs4zGtGtGtGtGtcdbab0Վ+rՎGtGtGt4z̆[GtGtGtGtGtGtQcbb^c]b0GtHs4z̆[GtGtGtGtGtGtGtGtGtNMR`[aYbRՎHs IDATGtGtGtGtGtGtGt4z̆[4z̆[GtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtM[_^^_`daadGtGtGtGtGtGtGtHs4z̆[4z̆[GtGtGtGtGtGtGtGtGtGtGtGtGtGtb`gddf[hihd,׎ՎՎՎՎՎՎGtGtGtGt4z̆[4z̆[GtGtGtGtGtGtGtGtGtGtGtGtGtQL`b_NHsGtGtGtGtHs4z̆[4z̆[GtGtGtGtGtGtGtGtGtGtyl IDATNNNL]y }~ c_dab_V^dS0ՎGtGtGtGt̆[4z̆[GtGtGtGtGtGtNLq ܂z ``_Y\SՎGtGtGtGtGtHs4z4z̆[GtGtGtGtGtGtGtGtGtGtGtY}db[USGt4zGtGtGtGtGtGtGtGtJJQUw|`_dUVYa IDAT0ՎHsHsGtGtGtGt4z̆[GtGtGtGtGtGtGtGtGtGtLNNQa`UTGtGtGtGtGtGtGt4z̆[GtGtGtGtGtGtGtGtGtGtGtGtGtGtGtNM L}~~`aNT ,ێHsHs4z̆[4z̆[GtGtGtGt~~ QMLLTP,4z̆[4z̆[GtU IDATL~|NLMMP4z̆[4z̆[GtMJz }~ bOMJP4z̆[4z̆[GtM   bPHs̆[4z̆[NMx x |bOOR*sH IDATM4z4z̆[MJC  xaRHL4zMLHM_ߍaRHMHs4z̆[JLGcJ`4z̆[~ͯ IDATMLz Ta_Hs4z̆[MMMML |bQSHEcM4z̆[4z̆[Y}LJJHaLTHab4z̆[4z̆[M:, IDAT_܀$q|_MQQ`4z̆[4z̆[MH_MTHN`Hs̆[4z̆[M^z dOHIMa.4z4z4z̆[MJ`z z LMM`^ IDAT4z̆[4z̆[4z̆[4z̆[4z̆[4zHMJJ^ z  gNBJMDL`gP Վ4z̆[4z̆[NJLJ^z BMbf,Hs4z̆[LLNG_ N@LQB`+rՎHs4z̆[̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z P IDATML_L,Hs4z̆[̆[HsMJJGGL] L@DPRDL(4z̆[4z̆[La cM'rՎ4z̆[4z̆[HsQNQB{q IDAT$̆[4z̆[MPH cDKNSY+rՎHs4z4z̆[J  dBM[@&)r׎4z̆[Y}PG_ d\]MGQ.4zHN IDATMJ_fG<*4z̆[LJL_J]MHs4z̆[LaELJ][4z̆[4z̆[,J^aHH6 IDATQ^LHs4z̆[4z̆[.JaM^_M,4z̆[4z̆[.*PJH\M`M,̆[4z̆[,*MHbYTJ``,4z4z̆[P IDAT0J`cL`M,Hs4z̆[(M[bUDG`cM2׎4z̆[Hs4z̆[MaV_24z̆[\2Z2. |6 IDAT baH`L2Hs4z̆[Hs6^a^^\NbHs4z̆[̆[X1/] d`\RL.Hs4z̆[4z̆[Hs̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z̆[Y} D%&`c_NKNdN } IDAT4z̆[4z̆[*Jc_ă[4z̆[Hs,LL^_cIPaf4z4z̆[ , Q ^_ՎՎHs4z̆[Hsx IDAT $H\OK+rՎ4z..\`_a_4z̆[Hs(J`\aPH4z̆[  (Mf^`NbQI ~ IDATHs4z̆[4z̆[Hsf`^`VLHJ_`4z̆[4z̆[`^La_Hs4z̆[4z̆[\M`̆[4z̆[ IDAT ^]`J]4z4z̆[ L |` UN4z̆[ $_~|c`bNaQHs4zY}+(||b_ I IDAT gM`24z̆[ (||chNNS4z̆[4z4z4z4z4z4z4z4z̆[ ,a~ cc] hWMEQ2ՎHs4z̆[4z̆[+a`fWMQ2Hs4z̆[4z̆[ҽ IDAT.a |aaad^ NJ2ՎHs4z̆[4z̆[ |~  b^b_HQ̆[4z̆[̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z̆[4z̆[{ ||`acbcTHS.4z̆[4z̆[Hs4|~~x I3 IDATa`_bafS0MR.Վ4z4z̆[4z~x ~cb`bbh0,M.Hs4zHs/Lu  a_aabP7$2ՎHs4z̆[4zH^{x ~a`aaQ"+rՎy IDAT4z̆[HsH^_^bd.,304z̆[-*Gw  _^bM.&*0ՎHs4z̆[4z̆[HsG[w   dM2'Վ)r&,ՎHs4z̆[4z̆[Wa IDATY}_MH*,Hs̆[4z̆[HsJ_ PNK2%Վ׎+r&,Վ4z̆[4z̆[(,J_ PMP2,4z4z̆[Hs.(J\    bNNH3׎Վ)r(0x~ IDATՎ4z**\aLN<(0Hs4z̆[Hs,*}z  ~`NLP0(׎4z̆[(Eu  | `MLM0׎Վ+r(4z̆[ j, IDAT**E|bMM>0HsHs4z̆[4z̆[4z4z4z4z4z4z̆[*z k {$q܀x  _PLN>׎Վ+r4z̆[4z̆[**c~{ LP>0HsHs̆[4z̆[̆[4z̆[4z̆[4z̆[4z̆[  x |~PMP'z IDAT:׎Վ+rՎ4z̆[4z̆[4z4z4z4z4z̆[A  z  Q:,׎Վ+rՎ4z4z̆[̆[4z̆[4z̆[`c~u b,4z|  bz  z ~ P2ՎՎ)rՎHs4z̆[Xch IDATY}E|z }z 66334z̆[La܀u b}| u J.َ׎)rՎ4z̆[Laz| {~ 40׎Hs4z̆[4z̆[2LՓՓ\Kv IDAT!s 68Hs4z̆[4z̆[Hs2(L^    a84.ՎHs̆[4z̆[.(L_.4z̆[4z̆[HsJ }| BaL<,Վ4z4z̆[n IDATJVo!\r#\r#>6,4zHs      x }cG2׎HsHs4z̆[` Lh~0 >8.׎׎4z̆[Hsӕ IDATHac_ff<60Hs4z̆[`^fa  Lh  <0ՎHs4z̆[4z̆[Hsabax  !s ߄`@0ՎHsHs4z̆[4z̆[Hfb\r#J@>0  IDATHs̆[4z̆[HsY}~       |J0ՎHs4z̆[4z̆[J^LB24z4z̆[HsNNNlA}x av%     <5Hs4zolr IDATa   $q܂|aL0ՎHs4z̆[lANNa~0Hs4z̆[GtGtGtGtM_  ~QL@.Վ4z̆[GtGt'oGdQkav%x.Gd6gRb] IDAT333333333333333MMMMMMMMMMMMNar!s    r,~av%ߍ~ cR5ՎHsHs4z̆[4z̆[HsNlANlAGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGtQNabߍߍ~cR5Hs̆[4z̆[GtGtGtGtGtGtGtGtGtGtL ]  Lh~ fN>Վ4z̆[4z̆[G| IDATGtGtGtGt&G_ }z Lh܏~f.+rՎ4z4z̆[GtGtGtGt&**..0MNQ_ \r#iHs4zGtGtGtGtGtGtGtGtGtGtGtGtGtGtGt,( L]w| z M0Վ4z̆[GtGtGtGtGtGtGtGtGtGtGtGtGtGtGtGt*M`iY IDATwx   ّz gN6ՎHs4z̆[NlANlAGtGtY}& N_w|x gՎHs4z̆[HsN".J] }z | gNHs4z̆[4z̆[Gt*,L`  z z gN,4z̆[4z̆[ IDATHslAՎ)r(H]x   fP-Վ̆[4z̆[Վ)rJZfN0Վ4z̆[4z̆[HsMagfNHsHs4z4z̆[h IDATՎ׎+r0Hk d4zHsՎ+r*0GaP2-ՎHs4z̆[Վ+r*0*NHs4z̆[Hs,0(HsHs}H IDAT4z̆[+r*0(GM0׎Hs4z̆[HsՎՎ.0000.0MNNM#!!Hs4z̆[̆[.,JQ̆[4z̆[a IDATՎ)r(JՎHsHs4z̆[4z̆[Y},LQ.4z4z̆[׎'rՎ)r*JS.sHs4zՎ(GN.x IDATHs4z̆[*J.׎Hs4z̆[Վ+rՎ+rՎ+r,.4z̆[ՎՎՎ)r*.!s4z̆[- IDAT*.4z̆[̆[,.!+rՎHs4z̆[4z̆[*3,))%̆[4z̆[Վ'raQ IDAT*,$,#Hs4z4z̆[.,(.')Hs4z*0$.)'Hs4z̆[Hs(.Վ)r&04z̆[b8 IDAT*,24z̆[HsY}Վ,3%Hs4z̆[.'4z̆[̆[Hs IDATՎՎՎHsHsHs4z̆[4z̆[Վ+rՎ+r׎)r׎+rՎՎ+rHs̆[4z̆[Hs!!HsHs4z4z̆[+rՎ+rՎ+rՎ+rՎ+rՎ㤥 IDAT4z̆[HsHs4z̆[+rՎ+rՎHs4z̆[HsՎՎ+rHs4z̆[#D IDAT!!Hs4z̆[HsHsHs4z̆[̆[4z̆[4z̆[HsHsՎ+rՎl>. IDATHs̆[4z̆[HsHsHs4z4z̆[Y}HsՎ4zHsHs+r+rՎ4z̆[K IDATHsHsHs4z̆[HsHsHsՎ)rHs4z̆[333̆[HsHsHsHs)rՎHs4z̆[GtHs4z̆[HsHs|nw IDATHs4z̆[4z̆[GtGtGtGtGt̆[4z4z̆[HsHsՎ4z̆[4z̆[GtGtGtGtGtGtGt4z̆[4z4z̆[HsHsHs̆[4z̆[GtGtGtGtGtGtGtGt4z̆[4z̆[HsHs+rՎHsHs4z̆[GtGtGtGtGtGtGtGtGt$K IDATGtGtHs̆[4z4z̆[4z4z̆[HsՎHs4z̆[GtGtGtGtGtGtGt̆[4z4z̆[4z4z̆[HsHsHs4zGtGtGtGtGtGtHs̆[4z4z̆[4z4z̆[HsHsHs4z̆[GtGtGtGtGtY IDAT̆[4z4z̆[4z4z̆[HsHsHsHs4z̆[GtHs̆[4z4z̆[4z4z̆[HsHs4z̆[GtGtGtGtGtY}̆[4z4z̆[4z4z̆[4z̆[4z̆[GtGtGtGtGtGtGtHs4z̆[4z̆[Hsu>Q IDAT4z̆[4z̆[GtGtGtGtGtGtGtGtGt4z̆[4z̆[4z̆[4z̆[4z̆[Hs4z̆[4z̆[4z̆[Hs4z̆[4z̆[4z̆[4z̆[4z̆[Hs IDAT̆[4z4z̆[4z4z̆[4z̆[4z4z̆[4z4z̆[4z̆[̆[4z4z̆[4z4z̆[4z̆[]\ IDAT̆[4z4z̆[4z4z̆[4z̆[Hs4z4z̆[4z̆[4z4z̆[̆[4z4z̆[4z4z̆[̆[4z4z̆[fw IDAT̆[Y}qZ IDAT3 IDATHsFqHsD IDATHsHs4z a IDATHsHsHsY}Hs$ҏ IDATHsHs 7 IDATHsQ5Q5Q5Q5+rHs+rQ5Q5Q5{Y IDAT+rQ5ՎQ5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5Q5+rՎ/: IDAT+rQ5Q5Q5Q5Q5+r+r#Q5Q5Q5Hs)r׎+r%HsY}Q5 IDAT)r׎+rHs(Q5% IDAT)r)r+r$&&Q5Hs&)Q5&&HsՎ4z̆[)r(1/v2 IDAT(HsՎ+r/ՎՎ+r+rHs IDAT3+r׎+rHs+r+r+r(8Y}Վ!K IDAT+rՎ+r>+rՎ+rՎ)r+rՎ+rՎ+r+r*@=w IDAT+rՎ+r+rՎ+r*5َ+r&,َU IDATՎ%r+r*,+rՎ+r,,(+rՎ+r*)r׎+rՎ+r,(,*",(,(+rՎ+r+r,(C IDAT*&**HsՎ+rՎ'r*(*)rՎ)r'r'rՎ+r&.Վ)r&*)r)r*(M&)r'r(+r,+rՎHs:) IDATY}+r(*JH(**&.)r*JL&*,0ՎHs&*QN,(H,+r,JLb IDAT*MC(Hs+rՎ&RMH,(+rJGC*Hs+rՎ+r+rՎ(JULG *.*+r)r+rՎzB IDAT*LP,..**.Hs*Վ+rՎ(VPLM*(*(+rՎ*ՎJPLQ(*'rՎHs+r&*+rՎ*w0 IDAT^JJL(*&2&+rՎLJLL*.**L\HHHH(*)r+rՎJJLHLaE&%{G IDATY}$)rՎ*\LLJLa`J(׎+r,)r׎*Jba_M.+rՎ()rՎ`_aa,+rՎ(*& IDAT(J`aaaaa`^M.&* )rՎ^```^L**)rՎH^d``L* ,+rՎ$`_^LW IDAT*Վ *aabbbM+rՎ)r*+rՎ*&,ab^b]HHHs0&+rՎ+rՎ+rՎ+r$_ ccG00pB IDATJ(a^`_^LHs0L()r)r)rՎ]^__\L+rՎM()r׎GtGtGt331GtGt"P]|_^^Hs*L,PMh|~] IDAT`^`L*Y}J&)rՎGtGtGtGtGtGt+r J`u `^~\LHsՎ+r*+rՎM$+rՎGtGtGtGtGtGtGt+rMJg!s x ~ ``{z ܂~_Վ)r*Վ_N(GtGt+r JNMc~ q  ߍx b`{|u$qߍz ^NHs*.Վ IDAT`M*GtGtJJdw~!s  _w|!s ߆ ]R.3_G&)rՎGtGtGtG_y  x { _w u { `HsՎ)r,Վ_N&'rՎGtGtGt+rH\_~   x y   Gduy b.׎%r(Վ_NNNM*GtGtGtGtGtGtGtGt IDATMb~  twtGd|{bbHs dNNN,Վ4z̆[+r$AML\{z    z Ηav% Lh~dN 7ՎHs)rՎ aML,JLz z |     u Հ~u  Qk   r,~Vo!  u | P*)rMJ\|z z ~+m |Ba r,~Lhx `  IDAT`LL,az |~   o  \r#    ~0~Ba  M+rՎbL,EQX~~ƛBar,6gx x b*]J&Mx    .kVo!    9IɭN \r#Gd M+r_L׎2Q8 IDATGtNLu      gz( \r#  " @UT7J av%Lh!s ߋ~ _MY}M*Vo! Vo! @UɭN W2DDav%Gd!s ߂~L`H*GtGtGtGtGt331GtGt+r,N_x       av%    )@UQ V8D gz(Vo!!s ߂~L^J+rՎGtGtGtGtGt331GtGtGtGtGtM  \r#     "    7? ) ɭN V8J  x ? IDATM+rՎ+rfQ3Վ+rՎGtGtՎ)r*_x     l~*\r#    +@UVֽQ UZǷL  U@;μN 7okr,  u Q,+rՎ_J(Gt,yx Qk 7SJ J0H͵Nr,~Vo!cMz ~_J&GtGt+r, }u  av%    +7ST 0H˳M3K˳M W7D   RHsՎՎ+rՎ Ȣ IDATwx *ՎGtGtLM|z         7SǷL5MǰL0HɣPģL5M͵NM,Վ+rՎ+rՎ`MGtGtGtGt*LMMz u av%@UǷL(A˳M 9PиO.F͵N.FɣPƧM3K͵NT#;<cMHs   `Վ331HsՎ)r MPLu ~ l~* -   2DJ 3\˳MƧM0HéJ3KéJ ŮK3KζN RՎՎ+rՎ   MHsHs,L ~Vo! < IU@UTQeX IDAT5MɣP ʤQƧM   ʤQ2JζN :Q ߍ|P,Hs+raJ*Hs]Vo!8U :T@UW5MŮKx.{:ePGHs(^~  +8TT";μN9UD0HƧM  as; ŮK2JŮK  cQ+rՎHs+rՎ+rՎu JHs,_~gz(2DTW2DD0H˳M^pɣPWjJWj9dv>8VQ73s IDATz `J.HsՎ)r(QYes\^Q W,EǰLhy77]7 A`7~6^p~6 'oو Hs+rՎY}~ !s ߀z Hs+r"MRe~z  Vo!  ?+@T ŮKhyv2~6 v2 s1r~6 `+rՎ~HsHs*Rz z x ~p0~6r&Hs   .Hs+r*N IDATJMR[ +l`)   av%LhL&Վz u |dHsLMS ~~W7Shyl`)LhBabJ$Hs~ fb&+rՎ+rՎ+r*LR_` ّ|gz( ǷL&?μN   >as~p0   ǰL7OԻQQ+@ǷL ,Gdkyx P $%rՎ+r)rՎ^cL+rJLQ_~|uǷL2DVǰL9PʤQ<u~p0{5hy:Q+@<Q*zg IDAT z +rՎ̆[+r+rՎ+rJJR^e|y | }x "μN8W ;dv9x9 hy:hy;ƧM W7ɭN  av%Bax  M(+rՎ)r+rՎ+rՎ  a*+r_~y  Vo!r, ɱL7OģL   FZmv2  hy<?Zm~6W7Q aH&'rَ+rՎ+rՎ+rՎ׎+r+ra,_q}~#p t ~}T#;ƧM<]<]7]?<{<<:Y!s a,b_aNj IDAT+rՎ+rՎ+r+rՎ+rNX_~   Lh~r,D#;A3˳M7OéJ  :hy~6       l~*]&'rՎ+r+rՎՎ+raa(#MX_~ݐt AUZTŮK=WģL7k|<ŮK9PҺPV7Wz mM$2i+m6g6g!s z ~x !s  ~>cBaؿRTTؿRҺP˳M:xk.7{5v2?:BCFɣPζN:e6g:eّ~ c`dP.Վ+rՎ+rՎ+r&MY^}x ّz r  l~*  voμN 2JʤQ^p< u9     ;RǰL &?TvoQk c$O IDATQ,ՎHs+rՎ+rՎa%%Y_^}z z x z Vo!μN2DʤQ6\<asu9T#;av%z {^M*Y} acb+rՎ)r+rՎ+rՎ+r)r'&]b  ˚5f  Qk{av%D7U >^p~6n~6 ʤQ6PŮK Q+@<    ^J)r׎+r)r׎ a)rՎ+rՎ+r+r+r!_ 5f˚ \r#av%   μN :Q˳M5MéJ! >n:    + l~*\r#u ],+rՎ+r; IDAT]]]_5f5f|\r#Q+@éJ=W6\@^7ƧM;RǷL7Saa*Hs***((**( ]Վ+r+r#,$Y_~Vo!\r# J#;ɭN  ζN5MǰL    \r#GdaM+r2&*(ՎVo!|`*(H]˚1hx Vo!gz(ɭN7SQ˳M9PFǷL9IDu `,Hs,*(,av%Lh ^,)r)r%%*[`  Vo!l~* 5QRF IDAT 0+@T#;J# S&?ģL       #  l~*Gd c)rՎ+r0&,ՎL('%(*[]}-j-jl~*~QT#;VVTɭNɭNJ@U˳M<]dvW+@$q`L0Hs(,,  aH%%(^y x  Lh ~l~*   # ǷL ˳M5MʤQ dv    |^G+r((,  ~J(,L#p ǜ#p z ~Lh" ?@UQؿR(AŮK{5dv7  x.{av% x w  _J*Hs)r$(+rՎk  IDAT&-*LTy~ݐ#p *lx \r#A+@Q͵N3KƧMk|9U :Q y`L$&*  ~cN*/(J r  ǜ1h   Qk\r#  % ǷL+@Q ؿR2J˳Mk|~6 éJ2J˳M     zr ^L,+rՎHs+r&&(Վgz(Qk(-68JT{  r ܏Gd~0ǷL +@VζN3KɱLas9 y &*&*  ,&/4<:GS|f IDATb-j 5f˚*l   2i wx. ɭN 8μN ԻQ2JʤQ7nk|~6r      |{hL*Hs+r*&* **++14>DH{z Ӗ*lGd-j~Qk{av%    <as9ƧM:YɱL~Vo! | *+rՎ+r*$)r׎Y}5~~{,*+/4@HNRSV`{*lav%av%-jav%ǷL9I9~av%~}MMPP&  z {| '18<GU^}~  ֔5fgz(gz(av%Ba\r# % ɭN 8ǷLwav%   L()r׎+rbE IDAT&LJ&%r׎_**/8<AH^}~5fQkav%LhLh r,#;T| LJ"z _Q(/:>H}|˚Qk  1h Lh~av%        |sVo!y ~&+rՎ)r(J")rՎl~*~'o~`((/>>LHH_}x       l~*Vo!gz( J2DQ  $>μNu ~ ()r׎+rՎ+r(JG&'rՎ+rՎ~|bQFڠ IDAT(-:LG]_^|BaVo!~0J+@Q5M˳Mk|9{Vo! *&JG* z`R.1BM^   %   r,~av%!s    ?\^Vdv7k|:   6\˳M$>TVo!  s | L.'rՎ#r&JJ.!r+rՎc,6DBL^Qk1hu Qkav%dv;:hy9&?T`NJJ* d^P:BGG]   || as~6 ~6k|9  6\ζNLh &|T IDAT+rMaE&+rՎbaP<HHG[l~*Un ~ |||av%r,ǰL9PŮK9k|<*CUx ,(G_bH*|bL<HLG   gz(  gz(Fc~{  ~ }|      _*_^C)rՎav% LL_{z Gd/ 9duz ~ BaVo!  ζN2JŮK k|7  9PǰL "<VL+rՎ*^`H,~ IDAT`LL]w ƛGdu |} Vo!av%Zm:9PǰL*N^PcJL[}~Gd     Fc |z Lhav% иO0HɱL ~66\ζN   bJ*HscLՎY}  `LH^}|  Qk      ˚9d  ~  Qk\r#иO0HC   <]ɱL  Vo!x ~*+rՎ+r*MM_N,~`LH^z {|Qk\r#Qk˚ǜ*ll, IDAT u{5ɣPM,HsNMJ_`L*  a`bLH` x ~{| av%#    5f˚9d |z  Qk5  _L(+rՎ+r*JH^`J(Վ+rՎz ~`aM`| {45fǜ9d|u V7Q7ǷL|MHs(NLM, x]aM`z y  \r#   wp; Ӗ  |x  >cǷL+@μN иO<as9<]˳M 7Q x aM&(L^`r9m IDAT+rՎ+r+rՎ  ~0wLh^Ja|    @    -jӖϘ r   4 ɭN2DQB^p7 8A  |)r׎Hs+r(_J+r׎$q܆ _ay~z Vo!V[@1h r ||x >^p>8Q~cJ.(L_N*ǷL~ dNEb}|  ߍx ~      GdӖ&nڒ-j| }  Qk     @UD "<˳M  7OζN  7D>c wx ّ|  bM,׎Hs+rՎ+r(J`fT7Վ~c_``ccME$q$q)? IDATAVVo!*l*lӖ|@UD˳M5Mwu u __^&J`bT  u{ _b !s ~u    ȬM7ST  ~Gd1h   x l~*     @OиO7A Qk x{ }~x \E&)r!%r*G`b.Վ\r#>c`Ha{x | ~ 8TμN #;Jav%6g5fÞ#p z Lh ˳M5MƧMgz(Qkz }{~~^L($c  z y _z {~   Q S 7J \r#Baݐ*lu }z ʙ\r#   !   9PǰL    z w|\E "&,t% IDAT`cRՎ  gz(Lhz }  _Mx     NYֽQ  :ǷL !  r,Lh9d {|{| Qk        7]ζN "<ɭN av%Lh x x ~aM$$M` ,gz(Lhz } PMrav%Vo!SμN2DǷLVo!Qk~|w GdbbǷL=WéJz ~cJ-ML`gY}  ~}   _HJ^     x.Vo!\r#  $<V=WƧM  W7J l~*=b  x w ƛgz(  bbμN #; ŮK;RéJ 7]éJ  gz(Vo!  ~~aGML^gՎ l~*Vo! {~_ IDATJL`   av%Vo!Vo! NYQ,A=WD:Y˳MV#;J  u  gz(  NYWV ɱL7OǰL  !   l~*gz(  \r#|~ ^GJPa  MՎx y~z _N`y av%QkɣP5M˳MT+@Jw-QkBaNYDǰL9PŮK:Y˳MW7Dav%gz(Lh QkcEGah+@D r,~av% z wx  q܆!s _LJ_   gz(   %  ɱL5MиO W7J ~0w\r# \r#  \^μNɱL7OéJT#;μN  l~*gz(   r,~\r#z  `A J fՎ+rՎav%Qk~+mߍJ_Qkgz(7SV3KɣPɱL0HζNW#;}/x.:eLh  \^A͵N3KƧMμN2DɭNl~*QkG5 IDATl~*l~*\r#z w fNJ]0T#;D x.{Lh   +m[L`{~        ʤQ2JɱLV9& Gdgz(  ifT.FɱLɱL   l~*Vo!  x.{Lh} _CG]ag+r av%Qk {``   okɭN éJ7OɱLѹO/G9# 5gz(#  bbV0HŮK7OɱLW7μN   av%     7{Lh x  { _GGa ׎ՎɭN7SJQk:e`L_|(AиOéJ3K˳MS7QVo!gz(bbJ0HŮKģL7OɱLV8μN\r#Ba|{ _QdR,U؝/ IDATV7JBa  c`\ {~\r#r,    voɭN %?ӺP  9PǰL1IS7D Vo!Vo!4"   *C˳M  9P͵N @UJ     Qk  ^Ra gN .ՎQ+@J  gz(Vo!av%|y ]`^^ \r#gz(Vo!   voU  éJ9PζN1IRǷL9ID   7SμN7OéJ éJ3KиO        r,>c  u y\M.+rՎ T"<μN)(x.{\r#l~*Ba q{ `a`^   \r#       # \^ɭN2JʤQ2JŮK̴MǷL9ID  7SV7OɱL ƧM 0HŮK   μN2DμN        3Gd   s t| \\μN2DJx.Ba `a^Qk >c\^?% 2JζN3KŮK;RӺPɭN7SDLh7 IDAT7SV0HɱL͵N;RVo!GdBa|a^ V2DǷL  gz(  !s {|a_~    l~*Vo!  \r#av%   9IQ(AŮK  -FӺP V8μN l~*Gd    7SW3K͵N  2DT           av%av% ~Bax w ]]^^,Վ Q+@J  \\~l~*Vo! Lh gz(    @UT2J˳M  ,EиOU :μN gz(  @UT5MŮKas:         av%   r,~av% q}~^^bbc,+rՎ+rՎY}W7Jz _} ~l~*GdVo!\r#2JζNIhy@ɣP0HζNμN2DJNYJ5MéJPd< hy<7μNav%Bax ``^`ab.N IDAT. μN2DɭNr,~Vo! \_|}~ Vo!r, av%\r# Vo!av% @UμN.FŮKA_I^pv2 Wj<7]ɣPģL2JŮK  V8ɭN 5MģLdv>v2 as@         5Ba s~_\aa M.+rμN2DJu ^`^ ||Qk UZμN.FɱLIA`:9as>7]âKŮK;RζNμN2D?ģLdv>7Wj@J:YǰLgz(2i~~baab. Q2DD\r#Gd ^x |~       UZD 5MɱLZm> v2^p: I  ɣP 2JɱL  T#;<  UZD          \^ǷL  z  b] Vx _|z     \r# 8 IDAT  # ;RƧMas7~p0hy:?   W ʤQ6OǰL  + ɭN7SU 7 %    z~hu ^{d.2DμN~ wax l~*~~0{gz(QkifQ;RŮKas7vz4{5hy@ƧM:YǰL7SɭN\^Jv2{9u w R5M˳MT#;T r, xw ~|  \r# w\r#    av%  as9}o/oc*7Wj?  Q+@?\^ɭN     x7  éJ9P˳M#;Q     #;Q x lw!s $qy    dN0ʤQ 5MɱLT";J  Qk s}  y Lh  l~* okǷL5MɣPas;r0 9y  J9PǰL V+@ɭN    x: 7ɭN        μN7T#;T  z y}u  y IDATx   x z ՎɱL7OɱLT#;Jav%>cz a xav% r0cX&cX&w3x<ɭN{:éJ9PɱL7T2DμN@UǷLQ#;T~}| MJ  =WɱL NYA:e  }|a`yz  Lh    \^J *CƧMWj<eZ&cX&aW)   l}:    9PŮK 3KǰLhy79   :YŮK  #;μN9IQ+@DNYQ 7μN %  9IQ7μN |sQk{     x  cN,(ՎéJ7OǰL0!V+@J ,z Ba  u u ~_    # +@UWj;eZ&aW) aX.aW)hy:éJ;R˳M :hy9  :YƧMQ@UǷL  NSWT#;ǷL)   u~w {z   x t ~  ~ bM,&*ՎŮK9P˳MμN2DA  gz(Qkx ~x ut IDAT |`     +@T3KéJaV%w3yu1hy< éJ5MéJŮK;RŮK   :YéJ    2DǷLU :ɭN  @UVT#;A   l~*Lh  s{x  Vo!  xz `M(*+rՎǰL5M͵NμN2DAav%:e~ x b^px4w3|ǰL=WζN>^p9:YƧMQ+@μNQ+@ɭN2DμNQ+@ɭN@UǷLav%Bax \r#Lh!s ߆~c(,  ŮK Q+@ǷL gz(  q y|}~c rx   7OéJaV%  i]( bt>  ;dv{5   7]ɱL W7μND7SQ7SWǷL7IAUZǷL Q+@ǷL  av%ّ>c Vo! r,~Gd   u w  c+rՎY}3RƧM Q+@ɭN  Vo!  ~|{| b     7OиOdv9aY1 aV&aW)cX& r09bt?иO0HéJ ~6r: =WɱL Q+@μN  +Sy IDAT Q7SμN   Vo!  , l~*Gd r, ~0wGd x w|.k|;ƧM:Y͵NQ7SJl~*Ba| ccX&aV%r0bt;R͵NéJμN2DɭNQ2DɭN\r#av%av%Lhav%gz(>c|~ u.s1dv: ģL3KҺP μN2DA/ av%Bau  b`b`     Sg{5aY1 aV%    btC =WŮK;R >^p{m/  ɭN      \r#%   % x.{av%x.     av% \r#|  x4hy?ǰL.FؿRɭN7SǷL\r#>c^`@UμNaX.aV%f['7n<Hb¨IǰLŮK9PǰL;RɱL7O͵NμN2DVo!Vo!r,l~*UZJ}|0Ѿ IDAT~p0Zm<  ŮK(AζN  V 7D av%Qk  ^~Ղx     # 9IQ*CǰL>aW( aW)cX&v2as:9 7YŮK7OɱL   T   2D7ǷL   gz(   l~*   UZɭN7SJ \r#\r# u~  gQ0+rՎ{5as?    T8J  av%\r#az z    9IμN2JʤQ {5hy9QeC  éJ:WǰLǰL7OéJ  >^p7 =WéJ   2DɭN         @UμNT7D  Qk  z  c.+rՎ{5  Zm>Q+@Jav%\r#}~a_x ~\r#av%NYμN2JζNZm9aV%a\<aW)cX&9k|?;MdȢOéJɱL7OéJ3KɱL7n6@UJW7Dl~*\r#Vo!!s ߆~cX&;^p9 ŮK;R͵NɭN7S?  av%Qk   z~ ] }u    ǷL 3KŮKLc~6|kLa]@ x4Zm:4 IDATʤQ6W˳M9  3K͵N7OƧM        " AV>    μN2DǷL Vo!  \r# gz(  'o ~bQ,Վ+rՎaW)cX&9k|<ɭNgz(>cz ^^ Qk\r#aV%aW+a]@a\<aW)aV%;hyBAThIA_ɣPʤQ5M˳M2JŮK3KIμN2DɭNl~*Lhb,aX,cX& 7as9  @UǷL av%Lh z |^z   QkVo! 3KŮKWj7|kL00 8xX [a]@  7SgCCMdEHbB ǰL      2JJ éJ=W     8TC   \^W V8D     3Vo!b,+rՎՎ+rՎa[7{m/  r;  6\˳M5M˳M5M͵N 2DALh   | \r#  ifV,EʤQPd:aY/`Z8a]BD!ga]>aV%    hy>      ;R͵N .FɱL =WŮK 7W          @UɭN  \^μN #;J  /  Gd ~ dN -t IDAT.Վ+rՎ+rՎaY/ ƧM5M͵N5M3KŮK W :ǷL av%Lh  z l~*\r# 3KéJhy:`[:|kL aW(  7oZmI 0HǰL ǰL:Y       OZQ+@T  W7Q      cP*+r+r+rՎ aV& 7n> éJ3KǰLɱLV8ǷL r,~Vo! ~l~*Qk  UZW `Z6qS0aZ2aV%tg, |   ;RŮKǰL9PéJ        ǷLQ#;ǷL% +7SɭN:ɭN     cPՎ+r+rՎ)rՎ+raV&cX&7ɱL9PǰLV8D\r#Vo!l~*LhVo!i](`Z6lcF|kLaV%cX&l`)WjBhy:9PŮKǰL9PɱL9IQ+@Qu ~fQ*Y}^p? ƧM9P˳MT#;ǷL \r# Vo! $q܂    gz(Qk\r#s IDAT7OŮK^p<`\?xX  aZ2l`)k_(&"izPd{5hy9 9PƧM ʤQ6OʤQ     ԿP+@ 8Q 2Q+@VμN       dQ.+rՎՎ+r+r+rŮK5M˳MT#;~0av% Gdz y ʙGdQkQkNYD`\?a^CUlcFaV%aV%aV&aV%l`)9iz=_q}5{5 k|>=WŮKŮK;R:YģLʤQ6\ɱL,AW7Vߍ|a0 ;Zm< ŮK5M˳M3K˳MμN\^? r,~Lh {  ! \r#   ɱL7OJ lcF0  aV&aV%f['w3ssr0~6^p< 6W˳M ɱL:YƧM            IJ  μN8V7J  Q2+rՎ+rՎ+rՎ+rՎv2as;éJ5MǰL;RƧM éJ=W μN 7ǷL  r,~Vo! |{   {z t }|        ^p{5`\A|kL0 T~a]@aY/aX. aV&wj-}o/w3   9PζN ͵N5MǰL         jg6 J 8μNe IDAT  aL.ՎՎՎ+rՎՎ+rՎ{5dvDŮK9PǰL;RƧM:YƧMW9IDgz(Lht~ y  LhUZQcX&`\AT~a]@*aX.cX&l`)aX,aV&}o/yw37dv;˳M5MʤQμN2DJǷL aM. 9Lc; ŮK9P˳M;R˳MǰL9P  T+@A   r,~\r# s}|    |      ͵N3KF`[;  [a^C aX.aW(     ͵N3KéJ      +      cMՎՎՎaV& v2dv~6 ˳M5MζN2JɱLʤQ=W  V7ɭN x   av%    `\=ua\; aW+  aW)l`)wj- 7k|<   +@ǷL ͵N3K˳M    T#;ǷL9IɭNGd Lh      J,+rՎaV&i](v2r~6ǰL> IDATQ+@ɭNl~*Vo!~aW)`\=a\<a]@aW)|67+@͵N3KéJƧM7O͵N9IɭN+@ɭNgz(GdLhfcX&  ʤQ2JŮK:YɱLT"<ǷL  !s ߀    Qk    ;dv~6`\=a^CgqS  a^C8 ulcF  :PǰL+@T      ƧM3KɱL 2DǷL W7J Lh Vo!>cÞVo!    ,ՎaV%ŮKT9Ir,QkUZɭN~6ri](|kLlcFw3r0as;RǰL+@ɭNQQT#;QDNY+@asWjhyɱL7OQ2DμNWQ@U@Uav%\r#r,r,av%av%QkVo!~av%faW+aW(   Q+@J  z y}      <as98    @! kLa]Bu16\éJ Q ɭN 8Was:PtYLo IDATd:   ƧM.FɱL ǷL W7ɭN  \r#     f.Վ+rՎaW(    aV&  ;RиO3K5M5M9P3K3K2J,EؿR@U    ~0    z ww  }|     \r#   ;k|     ~\  a^C000^aW)x4k|   6\ʤQ :μNɭN :ɱL:Y    as:7^pŮK7O      BaBa~      wgz(  h2.0,Վ+r+raW(  aX,i](7k|:  3KǰLJ3KǰL !  x|w|  l~*      aV%aW)a]B- * -|kLa\<a\<  2  lcFa]B   8Q  7SɭNƧM  hyv2 {5as{5  ƧM0HζNGd >c\r#   GdBaGd % Vo!N,*ՎՎaX,  9as7   éJ9PиO y~    gz(         xXglcF qSga^C|kLa[7a]B    0 aY1i]( qd*    9PɱLhy9s1u>  >cVo!Qk>cgz(     Qka(0Վ IDATY};;n^p3KéJVo!A+@8l`)lcFuqSqSa]Ba]Ba]@a]Ba\;|kLhy:@UJ~6ʤQVo!\r#\r#Qk7S7SNY7SQk.*00 aW+aY1i](asx4^p~6   z y  r,     #IǷLɭN 8Q   i](cX&  a^C a]>*        +@T     @PŮKu  Qkav%\r#\r# @UQ 7V~Vo!T(ՎaV%aX.9k|;x4r@2JɱLS&?Qw \r##;μN#;Q+@cX&aW)xXglcFa]B*p_L|kLaZ6aX,f['9IǷL͵Ndv7{v2ʤQ6RɱLW7J\r#~l~*av%@UμNW7Va,     : ~p0Wj;2J˳M y    NYTU :T   hyx4 ulcFa]B  )tNJDgZJ g}B IDAT 9~\aY/cX&k_(  :YŮK &      z | Qk    ǷL2DWW7μN   Վ aW)aY/7OɱL   !s ߂        ɭN7S 9dv   [qSa]@ lcFa]>   zfPYQFIICeXJ  @ aW+aV%       x;  ģL9PŮK \r#Gd  z       ~0w\r#QՎ5MɱLz T"<TUZɭNԻQ,EʤQ;u~\[qSa]@a]>a\<eXJydPa^CaV%aW(5M˳M{x4<]ŮKQ+@: z av%T"<Qu QaV%aX.   .FǰLux4  |{|8T8  `Y5a^C[|kL|kL lcFa]>qS  IICZRF    aW+aW(x;    9I 5MéJ{{5  ǰL   z~u         aP˭6 IDATՎaV%aV&ŮK3KɱL^p{5 hy;ɣP7OɱLT#;A :T7SɭNƧM:YJ9k|9oc*aY/`Y5|kLa^C a]>a]@lcFa]>h\'" u=W˳M9IμNr~6x.{Ba\r#\r#Qk|cP*   l`)  ǰLWj<v2dv:    :T      `W-|kL'! qS)      ~6dv;  Q+@Q 5MǰLhy<7   V8ǷLz s }|  μN2DǷL    Վ       dv~6    av%  bbWɱL7OŮKoc*aV&`V' ) ) }p_L   /  8#;ǷL  ǷL+@Qn~6as9   x.  |Vo!    ǷL9IǷL   gP*Վ<asdv;7x4nɣP7]U@UVo!\^ǷLbbɭЏ IDATN7OŮK`V'}jSaY/ƧM0HμNQQQ+@7OƧMPdn999~6k|sǷL9I|   <Pdx4       QkVo!  bb? i](`U% )/ tp_Lp_LydP {5r;  9IɭN ,EƧMA`?{5k|7  ;R˳M   ~Gd~0  ɭN7UU7μN!   cP,Վi](      uB@^@   C <]S2DJBa       \r#Ba     )@UμN  7SɭN .F˳MWj:f[' xX    gZJ   oUa]BaV&  nC :Y͵N #;ǷL! @UμN ,EҺP@^?hy;dv<  5MɱL $>TokLh   s|   x.  )% #;U :TokLhΗ~bR2Վ f['  aW(9 Sg<as~6éJ&?ԻQ U :Aav%Vo!   Vo! gz(     \^ǷL   T; aV%a[7ga]B  & a]BlcFwj- 9Pd>ŮK3K͵N U8  3KŮKdv{5as<ʤQ7OҺP|}   IDATBa ǷL :μNVo! bQ0Y}aW+re+f['aW(>Zm;~6Zm?Qav%Vo!\r# \^A 9PƧMh\'aW+a^CD lcFZRFAA@EEAeXJa]Ba\<ŮK3KиO3K͵Ndv~6~6asBɣP .F˳Mi~3μNl~*bS aW+aW+i](  aW+aV% {5 ǰL,EֽQ UZ: {QkVo!      NYQ Wj9bW%f['aY1  !  AAAyE%W18slX@& 9^p>ɣP0HɱL  2JģLZm:as7Sg<  ǰL5MɱL7T     ّR0aV&aW+f['   aW+  x4k|<T7Q?\^BaVo!        "  7SμN 5MɱLh\'aW(aW+ -eXJ lX `X0l`) {5^p;J7OS7OʤQoc*::as9      >c~Vo! {GdR,.aW(aX,aV&G IDATʤQ3KQ+@l~*BaՓVo!7SǷLμN5MζNǰLǰL^p7aW)a^CeXJlXfCC@7dv5M7OɱLk|9aW(9k|Vo!Vo!wl~*cR,,,,,..aW(f[' aV%aY1aV&aV% aV&aW+i]({m/as:ŮK3KζN V8ɭN*~Vo!      2DμN 7OǰL as9k_(aV&aW( by 1 CC@ ;dv: 'U :A2DǷL.FɣPdv{5cX&aV&uh- {5Zm; ǰL6PŮK :ǷL   Vo!r, wr,~P.+rՎaV&aW)aW)   aW)f[' f[' aW)cX&   6r,   +7SW=WʤQas<bW%  re+aV% a\<a]B@  f x^]??> s1hy{5 F 5MƧMn:aW)aW+uh-  v2 dv;     Qk ~av% M2+rՎaV%aV%f['aV%cX&i]({5u?ʤQ6RҺPQ+@J7SQ =WéJSg<aV%aV%fktXbW%\^ǷL5M˳M^p;l`)cX&cX&W( IDAT7dv?Vo!Vo!_M2aX,  aV%aW(aW)aW)aW+  V8ɭN       Wj7  aW(aV&a]@ -YQF2f1  U{ H+v]lX2 ua^CV8J % ^p7aV& aW(aV&       av%  N.aW)aW(aW){5hyBǰLμN2DɭNWj@HsKw~{m/79PǰL@UɭNSg7aX,aV&9k|9N, aV%aX,aV&aW(  2]͵N Q+@J      Zm9 aW)aV&-  p_L)  ~  VfFFB_L |kLaZ4 éJ9PиOμN*f['  aX,aV%         fN,Վ+rȽ IDAT   l`)i](aW+aW+ 7Zm;ɣP3KɱL  V8A   @UV     aV%aV& V5 ~ U/   V%  *CŮKaX,aW(  ~6k|<ɣP7P˳MU :Q~Vo!   ՎՎ+rՎi](aW(aY/cX&ǰL7OɱLμNUZɭN  ǰL9PʤQaV&aV%NJD`W-~p0r>ģL5M˳Mf['aV&~6as< :Q|q    {v2uh-aW(aV% aY/i]( ʤQ6O˳M μN k|{5 aV& cX&aW) @ZRFFFB  bfEEAydPlcFa]B`W+aV% aV& aV& <as:   :U | cՎՎ+ra]BcX&u:~6 ^pre+cX&aW(cX& aW(*ulcFaX.cX& 7dv@ F  5MԻQ  иO5MǰL    f['cX&D  ȍi Gr}R}. IDATa]B  aW)i]( 9ɣP7RɱL*CζNǰLaW+cX&7as; ʤQ8ǷL x q }z  x  |ߍz 0ՎՎ+rՎY}a^Ca]B  ;dv>:hy>}\ lcF aW(l`) 7Wj< ɣP ,EɱL ˳M5MéJ      HHCgZJ*!  9  7OŮKGa;) {5dv9      ~  }!s |dՎՎa]Ba]>;^p:i](aW(aW)qSa]@a\<aW(l`):as>ǰL7OиO˳M5MéJaV&aW(aW)ZRFHDDX~a]@7OɱL{5k|:~0wgz(x ~q~|~|ߋ|fNJ"8xXga]Bf[' < dv9 aW(  u|kLlcF ^T~a[9 ~6^p< J0HɱL   cX&cX&a]B@^  D(  W~AAA9U`]BaZ4aW(r:  >v2hy7    ~  ~hN+rՎfxR IDAT D! {5k|as~6 a^C~\xXga]BaW)cX&x4as<  ʤQ7OɱL tg,    yE%F  ~ȍi8sfIIC!fP     aV% ~6n<  lz z  cQaW(7i](a^Ca]Ba[7aW)i](9 asCéJ7O˳Mtg,f['f['fFzsfFzlX]U;RŮKSg:aV%aW)aV&#;Qz cQ,#         D!D~\[a[9aW)f[' s1 Pd<   ŮK5MƧM ζN2JŮK   u1f['aY/a^CU^  .  exY T~aW(l`)   6Y˳MaV& aV%aW( s~dP ~\Ua\;f['   a^C    ^UlcFaX,cX&re+as~p0  ʤQ6YʤQˇ IDAT     |z4   cX&aZ6  ZRFZRFM- Kw~ yZȍieJ" as7 aW+ 2DǷL a0+rՎaV%a^CaX,aV&~p07z4:HHCgZJnTulɱL3KζN2JǰLZm7aW(aV&v2dv;zH    a]>      aW(aW)f[' uh-n~6    7k|7   hy: u9dv9a]B[|kL0  AAA(jx^R2 y nTdv: éJ2JƧM dv:aW+   !s ߆   aՎaW+aV%re+cX&aV&<]ƧM3K͵N7n7x:n:hydvx4 :hy{5aV&aY/|kL^gZJIICfFzx^nT]T~ƧMdv;aV&aV%aV&aV%9PиO7ɭNu9| IDAT,   aW(a]B8    |kLaX.oc*aV%aW(aW(    :hy7x7hy7x9 ;  :hyx4a]>T~xX#  AAA]YN|   ;dv@  Zm9f['aV&   r,~av% cR,aZ6kLa^C0 aW(aV& 3KɱL:hy: ?Zm9?    @hyx4 a\<g~\ ydPYQF@@?  b7NJDxcO hv`Y1 Zm7aW(ulcF   n d*Վ~\aV&aV%aV%a^C|kL|kLaV&=WéJ7:Xk?:asx4aV&aX.a]BdWI{5^p@Lc7f['uqS a]>W7ǷLd* a[9aW)aV% aV&aV&aW( lcFa]>qSR IDAT 3KɱL    ?    ?f['aW) p_LZRF   Vs a\;aY1cX& :Wj;aW)8|kLlcFaV&aW(  l~*Qk  d.Y}tX a\<l`)aV&a^C a^CaW(  <=W͵N3KéJ   A_ȢOdv7aW)a]BD!YQFf;$ WxZx^5iNJD>& ca]Bf['   cX& a^C ua^C 9|kLcX&  x<  7JVo! ّ  jc_fN 0Վ*qSua]BaY/aW+  lcFqS   cX&9as> 5MŮK      ¨I DLc<a\< cF   Z??>EEAEEA `X0oc*lcF]UwWa]@i](    bbfNlcFcX&cX&aV%aV%lcFuu=WɱL5M˳M;R>X=W:Y:YBasaV&a\<gZJx~fxXaW(oc*a^C,8 IDATaV&T9Iddf, |kLa]B   a]B~\[a]>aV%:^p;' 0HɱL   ;R˳M6N˳M 2JéJ ! q\P]f) (jlXG{===DD@EEAYQF 2`\=aW+re+i](`\?}[a]Ba]>  bad. # 0^T~qSlcF |kL *~\xXa^CaV%l`) 7dv9 éJ7OéJ  ;RиOԻQ5MéJ?Wj;aV%aX.a[9a]B ydPHHCW1) bsu===DD@YQF  `Z8aY/cX& aW+ kbE}[]yeO% a^Ca]B    Q+@ɭN   ac,qSua]Ba]BlcFlcFa]>aW(l`)96\ǰLǰL=WŮK?Zm{5aW)aZ2a]BD~\YQFCC@ȍibvGCCCC@~\[a]BaW+f['`\=`\ApR]V}[hkbEdv;a`cuq IDAT  qSua\< |kLxXga]BxXglcF/ 9-xXa]>   ˳M5MŮK @^ǰL ǰL5MŮKZm: a\<[}\  gZJIICxAAA@@?DD@ p_L  `[;`[:`Y3aV&`Y5`Z6`[;  ' xYhpRxXga^C     Q+@ǷLQk  |abdN,a]Ba\<a]@a]>a]>˳M5MƧM7]J ˳M9PŮKf['IIC@@?p_L a^Ca\<`[:`U%`W+`V*`Y5`Z6oUxXa^CaV&=W͵Nav%z gb)  -a^CqSua^C ^T~lcFaW+ a\;lcFK% lcFa]@ n>D5M˳M͵N7OéJ:YʤQ     aV%a\<]~\  '_LeXJ, )`[;`[:)gZJtjSoT xXga]@ aX.i](ɱL3KζN fN׎+r  |kLa]> lcF9 a^C i](aW( 99~\lcF x4^p7  ɱL;RƧMɱL  ˳M5MéJhy9aV%aX,a^C[|kL0 !N IDATzfP  `[:`Y5`[:`Z8 ZRFHHC}zfP VxY/}\]a]@ >c d.+r|kL|kLa\<aW(f['aY1a]@|kLa^Ca\<7n;ƧM7OɱLŮK;R;RɱLaV%aY1a^C|kLzfP! lcFa]@`Y5a]BZRFNJDzfPdxYlcFa]@aX,aV&˳M5MǰL jdP xXga\;lcF 00 )  f['f[' !  D *qSs1dv<  ԻQ,EŮK 9k|{5a^C~\     a^Ca[9  p_LzfPyeO   -     Qk  Q׎8!   lcFxX  )[    i](aW) a\<a^C    ga]>aW)f[' ŮK;RֽQ;PŮK   ؿR(AģL;r9 f['aW(a\;[lcF@ lcF! 88xX)qSa]> |kL ! ZRFXPE   lcFa]BaX,l`)  V8Q~eN.[vOk IDATa]@~\a]>i](aX,a\<a^C^T~a[7aW)f['#;Wa]BlcFa]B a]Ba]@  uqSa]>|kLa]Ba]BzfPxcO܏~aY})       lcFlcF 9 i](aW+ a]>a^C9      ˳M5MǰL2D7D7ɭN ͵N :hy~6cX&aW(a\;a]@D da\<a]>lcF9 ? pU! lcFa[9lcF)~\  UsWydP-xXga]>  ;RǰL Gd Փz a^a,Վ  !  ( -|kL9 ^p9   f['cX&aZ2D }ydP  aV&aV&  ͵N+@DJjg9J NDW:YéJ<as;uh-aX,aX,lcFa[7cF9 }^ qSa]Ba]Ba]@]U BB?GGB p_L  ƧM5Y˳M  c_P)r׎     |kL   a\;  #aX,aV% ` IDAT+?J}/  ͵N3KéJ<dv:oc*aV&1IICUzfP  |kL|kL |[GGB@@?HHB  ɣP5MŮKwQk  _(+rՎkuuu|kLNJD|kLaW)7^px<;:hycX&a\<p_LYQFHHCNJDNJDh\}iRdWIeXJ7]ŮKc,dYQF           a^C  x4dv@aW)YQF  )a]Ba[9   ɭNk})  D@UT ͵N3KʤQ f['aX.a^Ca^C,! gZJ     !' EEAEEAHHB$ qSua]>  6\éJ ^`S.FFBZRF     9WjaZ2  eXJeXJpU88xXga]BaW)aV%  2DT k}) !  DLc9a]B 0pUtYQFydPZRF! }ZRF % xcOtNJDGGBDD@@@?HHCIIC aZ4aV&  #;J9 IDATSՎ+rՎZRFp_L?cX&$>W@U+@?k})ɱL7OƧM>^p9a]BpUtYQF! eXJ}ZRFZRFGGBBB?GGB9PǰL#;Ta]*IICp_L      a]B  aW)*ydPYQFtp_L  ~\[a]>aW+cX&  J  #;μNq+ ?9IQɱL7O˳M ;dv{5lcF eXJ   tZRFZRFp_L XPE===   a]@a\;{5u<  $>μN\r#S,Վp_LgZJ[~\l`)a]BydPp_LydP~\[a\<8V&?Tq+ɱL5MF;dvv2lcFtpUgZJ  jS===FFB=$SaW(f['],fHHCeXJ  [qS     aW)i](aV%)$ IDATlcF9gZJHHCgZJ%    &?U x2  D+@ǷL  ζN9PʤQ  :hy7D     YQF  >>=??>aX.l`)~p0as@ 7]˳M&?WcN,+rՎs]s^lcF    a[9aW(aW(aW(aW+ qSeXJeXJ xXga]B7n@2DɭN  7DU #;ǷLq+   ͵N3KǰL  :hy9     p_LHHB>>====  8xXglcF N.׎vbAAAZRFydP|kLaV&cX&l`)aV%a]@ YQF2DμNμN 8W2DTq+Q+@WǰL9PƧM:hy9re+}p_LXPEGCClcFa\<aW+f['Q0# lcF^ aW(aZ2aV& lcF !   kHHCgZJ  % xXgaZ62DɭN ǷL7ǷL fy'   D7U ֽQ*CéJ  <as7 a]B    gZJeXJ  %n IDATDDAydP   qSua]>{m/^p7 #;ɭN!s y b.YQFlcFU}\aW(l`)i](aV%a]B dydPgZJydPaV%#;μNǷL Vo!ǷL :TζN2JģL<asx4aW(ZRF  gZJlcFa\<aW(oc*ɣP_`NY} #)   a]@]qS 0l`)a\;  jSYQFp_L    J2J͵N W7A av%l~*2 Q$>VǰL:YŮK CPd9  ! 'FFBEEA2I*FzAAAK+BB?     _aQ0+rՎ Ep_L a[9ua]@  T~a^CaW)    |kL      1*aW( ƧM3KζN    % D  8V ֽQ*CɱL ?Zm~6oc*aW)       CC@tȍi8syEfCC@XXfTAtiEGcwc IDATN{vUgZJ   [a]@ aV&cX&lcF- ) }YQF  YQF!    ga]@cX& x9    9P͵N9I?     LhϘA`  x.   # 9IV.FéJPd;aW) a]B ' 1czfPf  ]??>YZؖoeXJydP a^C*ulcFaW+cX&aW)  a^C     ga^Cl`)  éJ *   \r#Qk>c{gz(  :8μN cX&aV%a\<lcF lcFsfG{ VyqSlcFlcF  eXJ[a^C=W˳M~av%av%Vo!~0J2DT?Zm{m/i](aV%aW)|kLlcFAAAK+G{eFzHDDPHHCjS 89 cX&-80       [|kLǷL2DJ! Vo! Vo! Qkwav%Vo!  μND IDATre+aW+aV%aV& ȍi KwP~{ W1yZlX4i̗4i̗4i̗4i̗4i̗4i̗4i̗4i̗4i̗4i̗4i̗eXJ}jSaV&aW)aV%gZJYQF[|kLJ9PǰLgz(Vo! x.av%47Wi](aW+f['aX,JvO}{ Wx^tU4i̗̗4i4i̗̗4i̗4i̗4i̗4i̗4i̗̗4i̗4i̗  a]>l`) aV%a^C  0 dgZJ      Q+@ɭN av%   .k  Vo!{av%av%  éJ:WŮK aW( oc*aW(8  q\P;$ IuSS{R2_7v̗̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗̗4i YQFtp_L   aV& aX.a\<   )tjSFFB* ZRFp_La\<   ƧM7OζN ǷL7IɭN Qk  ܏ߍ ҆| Lh LhGd\r#D2DW   cX&aW(a^Cga]B)[ZRFg:#Ly|{{ V  ̗4i4i̗4i4i̗4i4i̗4i̗4i̗4i̗4i̗4i̗4i̗̗̗4i4i̗4i̗4i4i̗4i̗4i̗2x IDAT4i4i̗aW)a\<tjSZRFǷL7IJ~\r#Փ'o܏x z z QkcX&aY/a]B*a^CؖoN{~O}̗4i̗4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i4i̗4i̗4i̗4i̗̗4i̗̗4i4i̗̗4i̗4i̗4i̗4i4i̗4i̗4i4i̗̗4i̗4i̗  IICzfPa]BaW(a\<  keXJ    a[7aV%  T#;T~gz(x ق| ߍ|}$qVo!l~*57T͵N3KŮK  re+aX.D X6W|~Hs ;$4i̗4i4i̗̗4i4i̗̗4i4i4i̗̗4i̗4i̗4i4i4i̗4i̗̗4i4i̗4i̗̗4i4i̗̗4iFFBZRF  aV& *D"  }eXJzfP cX&  ɣP7PɱLav%~ wx ߍy$q    l`)aX. a^C  T|YਅX{䧀 ~Iu̗4i4i̗4i̗̗̗4i̗̗4i4i̗̗̗4i4i̗̗4i4i̗4i̗4i4i̗̗4iZRF2pUaV&}jScX&ƧM7OɱLQ+@JVo!/0 IDATz ّl܄'or~6aX.aY1a]>]jS T~ਅX{䧀̗4i̗4i4i4i̗̗4i4i̗4i4i̗̗4i4i̗4i4i C'  aV&    }YQF ZRFaX,9hy; ŮK7OɱL Q+@< Vo!  w   b^ 6ggz(?8μNǰL9PʤQ |kL M{|Yݨ   ̗4i4i̗̗4i̗4i̗4i4i̗̗̗SHHC}p_LaX,ŮK7OJbbVo!c^{a]> Vݨ#Xx U U U U U4i4i4i4i4i4i4i̗̗̗4i4i̗4i4i̗4i4i̗4i4i4i4i   gZJ   cX& |kL])        ZRF           éJ2J   ǷL|s.&  .3gz(    {{{{{ ζN6\  7x  l`) *00UxZ W̗̗4i̗4i̗4i4i̗4ipF IDAT4i̗4i4i̗4i̗4i4i̗̗4i4i̗̗̗4i̗4i4i   p_L aW( a\;T~qS  "  eXJ         7dv< ƧM3K͵N W7ɭNav%Vo! z  g  Vo!3ɭN7SU ~\ X~& ̗4i4i̗4i̗̗4i̗̗4i̗̗4i4i̗̗4i̗4i4i̗̗4i4i̗̗4i4i̗̗4i4i̗̗4i4i̗̗4i̗̗4i̗4i̗ydPzfP% a\<cX& aW(aV&  aW+lcF ! YQF  ZRF    tgZJ % Ua]Bl`)  n>    9P˳M +@TLh {~    x. ! UZQ *CƧM^p~p0aW+qS }ydPqEN{~Zਅ"Xz V]ȍiv[4i̗4i̗4i̗ IIC  /aY1aW(aW+aW) )  p_LeXJ) p_L      ƧM5MɱL T#;ǷL% ~0Vo!z |u {|  <+@V   a]@uqS V]ȍi̗4i̗EEAaW(aW(aW(a\<?n IDATeXJeXJɣPéJT9Iav%| \r#bbJ<x} X{Y䧀|Zȍi4i̗4i̗  p_L UlcFaW(aV%aV&aW)aW+l`)/  ZRFjS     aW(aV%      6W˳M μN2DɭN  z {~ {~  \r#  + 1ZRFIu|# bf̗4i̗̗gZJgqSi](aV%aV&aW)aW+f['a\;lcFp_LaV&cX&ƧM5M˳MμN2D?av%\r#~{ \r#7SɭN~6rx4 T]s̗̗  pU a]BaW)cX&l`)aV%a^C    %   aW(aV&9Wj@   ɣP5M˳MT9IDr,~Vo! z }~  gz(     % 䧀 ]AAA^I|eXJ  /IDAT 5 ( aW+ ~6" PdԻQ,EμN\r#܏ ebQ.ՎVO8IENDB`engauge-digitizer-5.2/src/000077500000000000000000000000001222557406400155615ustar00rootroot00000000000000engauge-digitizer-5.2/src/Doxyfile000066400000000000000000000233461222557406400172770ustar00rootroot00000000000000# Doxyfile 1.3.7-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = digitizer.kdevelop PROJECT_NUMBER = $VERSION$ OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = /home/mark/engauge_dev/digitizer/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = /home/mark/engauge_dev/digitizer/src FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.C \ *.H \ *.tlh \ *.diff \ *.patch \ *.moc \ *.xpm \ *.dox RECURSIVE = yes EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 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 CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = YES LATEX_OUTPUT = latex 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 LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf 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 MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = yes XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = digitizer.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO engauge-digitizer-5.2/src/README000066400000000000000000000021531222557406400164420ustar00rootroot00000000000000Introduction ------------ The src directory contains the source code necessary to generate the 'Engauge Digitizer' software program. This program has fairly extensive documentation in the usermanual directory - that documentation is accessed by opening usermanual/index.html in your browser. Building the software --------------------- Please note that this software is NOT compiled and linked using autoconf and automake. Instead, this is built with the qmake utility provided by Trolltech (www.trolltech.com), and requires the Qt library from the same company. More information about building this software is found in the INSTALL file in the main directory. A GPL version of Qt is supplied with most Linux distributions for developing open source projects. Please refer to the Qt licensing restrictions at www.trolltech.com for further information. Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/src/axispointdlg.cpp000066400000000000000000000100301222557406400207640ustar00rootroot00000000000000/*************************************************************************** axispointdlg.cpp - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "axispointdlg.h" #include "digitdoc.h" #include "digitview.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" AxisPointDlg::AxisPointDlg(DigitDoc* doc, double x, double y) : QDialog(0, "axispointdlg", true), doc(doc) { DigitDebug::ctor(QString("axispointdlg " + QString::number((ulong) this, 16))); ASSERT_ENGAUGE(doc != 0); setCaption(tr("Axis Point - [%1]%2") .arg(doc->title()) .arg(freewareCaption)); setFixedSize(250, 130); labelX = new QLabel(tr("X or Theta:"), this); CHECK_PTR_ENGAUGE(labelX); labelX->setGeometry(10, 10, 110, 30); labelY = new QLabel(tr("Y or R:"), this); CHECK_PTR_ENGAUGE(labelY); labelY->setGeometry(10, 50, 110, 30); editX = new QLineEdit(QString::number(x), this); CHECK_PTR_ENGAUGE(editX); editX->setGeometry(140, 10, 100, 30); doubleValidatorX = new QDoubleValidator(editX); CHECK_PTR_ENGAUGE(doubleValidatorX); editX->setValidator(doubleValidatorX); editY = new QLineEdit(QString::number(y), this); CHECK_PTR_ENGAUGE(editY); editY->setGeometry(140, 50, 100, 30); doubleValidatorY = new QDoubleValidator(editY); CHECK_PTR_ENGAUGE(doubleValidatorY); editY->setValidator(doubleValidatorY); buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 90, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(slotAccept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 90, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); } AxisPointDlg::~AxisPointDlg() { DigitDebug::dtor(QString("axispointdlg " + QString::number((ulong) this, 16))); } double AxisPointDlg::x(void) { double value; #ifdef VISUALSTUDIO sscanf_s(editX->text(), "%lg", &value); #else sscanf(editX->text(), "%lg", &value); #endif return value; } double AxisPointDlg::y(void) { double value; #ifdef VISUALSTUDIO sscanf_s(editY->text(), "%lg", &value); #else sscanf(editY->text(), "%lg", &value); #endif return value; } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void AxisPointDlg::slotAccept() { double doubleMin = DefaultSettings::instance().getDoubleMin(); if (((x() != 0.0) && (dabs(x()) < doubleMin)) || ((y() != 0.0) && (dabs(y()) < doubleMin))) { if (QMessageBox::No == QMessageBox::warning(this, tr("Coordinate warning!"), tr("A coordinate's magnitude is smaller than the critical value of %1!\n" "This may cause problems later. You may continue, or return to modify \n" "the value. Hint - you might consider scaling the coordinates up by some \n" "power of ten.\n\n" "Do you want to continue?").arg(doubleMin), QMessageBox::Yes, QMessageBox::No)) { // do not finish yet. let user edit points return; } } // done editing points accept(); } engauge-digitizer-5.2/src/axispointdlg.h000066400000000000000000000035661222557406400204510ustar00rootroot00000000000000/*************************************************************************** axispointdlg.h - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef AXISPOINTDLG_H #define AXISPOINTDLG_H #include #include #include #include #include class DigitDoc; // when an axis point is created, this dialog appears so the user can immediately // enter in the world coordinates of that axis point class AxisPointDlg : public QDialog { Q_OBJECT public: AxisPointDlg(DigitDoc* doc, double x, double y); ~AxisPointDlg(); double x(void); double y(void); public slots: // user has accepted coordinates, so make sure they are are reasonable void slotAccept(void); private: QLabel* labelX; QLabel* labelY; QLineEdit* editX; QLineEdit* editY; QDoubleValidator* doubleValidatorX; QDoubleValidator* doubleValidatorY; QPushButton* buttonOk; QPushButton* buttonCancel; DigitDoc* doc; }; #endif // AXISPOINTDLG_H engauge-digitizer-5.2/src/clipboard.cpp000066400000000000000000000034451222557406400202320ustar00rootroot00000000000000/*************************************************************************** clipboard.cpp - description ------------------- begin : Mon Dec 9 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "clipboard.h" #include "digitdebug.h" //Added by qt3to4: #include Clipboard* Clipboard::m_clipboard = (Clipboard*) 0; Clipboard::Clipboard() { DigitDebug::ctor(QString("clipboard ") + QString::number((ulong) this, 16)); } Clipboard::~Clipboard() { DigitDebug::dtor(QString("clipboard ") + QString::number((ulong) this, 16)); } void Clipboard::addPoint(int xScreen, int yScreen) { // note that the point loses its association with any pointset when added to the clipboard // TODO - allow reassigning a point (which may be from a paste) to another pointset m_contents.append(QPoint(xScreen, yScreen)); } void Clipboard::dump() { QList::iterator itr; for (itr = m_contents.begin(); itr != m_contents.end(); ++itr) qDebug("%d\t%d\n", (*itr).x(), (*itr).y()); } engauge-digitizer-5.2/src/clipboard.h000066400000000000000000000043341222557406400176750ustar00rootroot00000000000000/*************************************************************************** clipboard.h - description ------------------- begin : Mon Dec 9 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef CLIPBOARD_H #define CLIPBOARD_H #include "point.h" //Added by qt3to4: #include // this singleton class performs digitizer-specific clipboard operations. // other applications and mime types are not supported class Clipboard { public: static void create(void) { if (!m_clipboard) m_clipboard = new Clipboard; } static void destroy(void) { if (m_clipboard) { delete m_clipboard; m_clipboard = 0; } } static Clipboard& instance(void) { return *m_clipboard; } // empty contents of clipboard void clear(void) { m_contents.clear(); } // debug void dump(void); // append single point void addPoint(int xScreen, int yScreen); // return contents for building new points QList* contents(void) { return &m_contents; } // return true if clipboard has any items bool clipboardItems(void) { return (m_contents.count() > 0); } protected: Clipboard(); ~Clipboard(); private: // clipboard contents. points are detached from the canvas and pointsets QList m_contents; // this singleton object static Clipboard* m_clipboard; }; #endif // CLIPBOARD_H engauge-digitizer-5.2/src/colorchooser.cpp000066400000000000000000000552211222557406400207730ustar00rootroot00000000000000/*************************************************************************** colorchooser.cpp - description ------------------- begin : Fri Dec 26 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #include #include #include "colorchooser.h" #include "digitdebug.h" #include "main.h" #include "discretize.h" #include "img/colorchooser_hue.xpm" #include "img/colorchooser_saturation.xpm" #include "img/colorchooser_value.xpm" #include "img/colorchooser_lower.xpm" #include "img/colorchooser_upper.xpm" ColorChooser::ColorChooser(QWidget* parent, const QImage* imageOriginal, int xTopLeft, int yTopLeft, QRgb rgbBg, bool showLarge) : m_parent(parent), pixmapIntensity(colorchooser_value_xpm), pixmapForeground(colorchooser_value_xpm), pixmapHue(colorchooser_hue_xpm), pixmapSaturation(colorchooser_saturation_xpm), pixmapValue(colorchooser_value_xpm), editLow(0), editHigh(0), m_discretizeMethod(DiscretizeNone), m_rgbBg(rgbBg), m_showLarge(showLarge) { DigitDebug::ctor(QString("colorchooser ") + QString::number((ulong) this, 16)); ASSERT_ENGAUGE(m_parent != 0); int x = xTopLeft, y = yTopLeft; QColor grayoutColor(232, 232, 232); if (showLarge) { m_chooserHeight = ChooserFullHeight; m_scaleHeight = ScaleFullHeight; } else { m_chooserHeight = ChooserFullHeight / 2; m_scaleHeight = ScaleFullHeight / 2; } chooserCanvas = new Q3Canvas(parent); CHECK_PTR_ENGAUGE(chooserCanvas); chooserCanvas->resize(ChooserWidth + 2 * ChooserPadding, m_chooserHeight); grayoutLower = new Q3CanvasPolygon(chooserCanvas); CHECK_PTR_ENGAUGE(grayoutLower); grayoutLower->setBrush(QBrush(grayoutColor)); grayoutLower->setZ(-1); grayoutLower->setVisible(true); grayoutUpper = new Q3CanvasPolygon(chooserCanvas); CHECK_PTR_ENGAUGE(grayoutUpper); grayoutUpper->setBrush(QBrush(grayoutColor)); grayoutUpper->setZ(-1); grayoutUpper->setVisible(true); chooserCanvasView = new ClickableView(chooserCanvas, m_parent); CHECK_PTR_ENGAUGE(chooserCanvasView); chooserCanvasView->setGeometry(x, y, ChooserWidth + 2 * ChooserPadding + ChooserFrame, m_chooserHeight); y += m_chooserHeight + Separation; chooserCanvasView->setHScrollBarMode(Q3ScrollView::AlwaysOff); chooserCanvasView->setVScrollBarMode(Q3ScrollView::AlwaysOff); QWhatsThis::add(chooserCanvasView, QString(tr( "Histogram of color attribute values. The lower and upper limits are shown, " "and may be dragged using the handles"))); scaleCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(scaleCanvas); scaleCanvas->resize(ChooserWidth + 2 * ChooserPadding, m_scaleHeight); scaleCanvasView = new Q3CanvasView(scaleCanvas, m_parent); CHECK_PTR_ENGAUGE(scaleCanvasView); scaleCanvasView->setGeometry(x, y, ChooserWidth + 2 * ChooserPadding + ChooserFrame, m_scaleHeight); y += m_scaleHeight + 5; scaleCanvasView->setHScrollBarMode(Q3ScrollView::AlwaysOff); scaleCanvasView->setVScrollBarMode(Q3ScrollView::AlwaysOff); QWhatsThis::add(scaleCanvasView, QString(tr("Scale for histogram"))); // histogram widgets dividerLower = new Divider(this, chooserCanvas, true); CHECK_PTR_ENGAUGE(dividerLower); dividerUpper = new Divider(this, chooserCanvas, false); CHECK_PTR_ENGAUGE(dividerUpper); if (m_showLarge) { // labels over min and max value columns labelLower = new QLabel(QString(tr("Lower limit:")), m_parent); CHECK_PTR_ENGAUGE(labelLower); labelLower->setGeometry(x, y, EditWidth, 30); labelUpper = new QLabel(QString(tr("Upper limit:")), m_parent); CHECK_PTR_ENGAUGE(labelUpper); labelUpper->setGeometry(x + ChooserWidth + 2 * ChooserPadding + ChooserFrame - EditWidth, y, EditWidth, 30); y += 25; // edit controls for keyboard editing of limits editLow = new QLineEdit(m_parent); CHECK_PTR_ENGAUGE(editLow); editLow->setGeometry(x, y, EditWidth, 30); QWhatsThis::add(editLow, QString(tr("Lower limit.\n\nIf the lower limit is less than the upper limit, " "only values between the limits are considered on. If the lower limit is greater than the upper limit, " "only values outside the limits are considered on"))); validatorLow = new QIntValidator(editLow); CHECK_PTR_ENGAUGE(validatorLow); editLow->setValidator(validatorLow); connect(editLow, SIGNAL(textChanged(const QString &)), this, SLOT(slotLow(const QString &))); editHigh = new QLineEdit(m_parent); CHECK_PTR_ENGAUGE(editHigh); editHigh->setGeometry(x + ChooserWidth + 2 * ChooserPadding + ChooserFrame - EditWidth, y, EditWidth, 30); QWhatsThis::add(editHigh, QString(tr("Upper limit.\n\nIf the lower limit is less than the upper limit, " "only values between the limits are considered on. If the lower limit is greater than the upper limit, " "only values outside the limits are considered on"))); validatorHigh = new QIntValidator(editHigh); CHECK_PTR_ENGAUGE(validatorHigh); editHigh->setValidator(validatorHigh); connect(editHigh, SIGNAL(textChanged(const QString &)), this, SLOT(slotHigh(const QString &))); } loadHistograms(imageOriginal); } ColorChooser::~ColorChooser() { DigitDebug::dtor(QString("colorchooser ") + QString::number((ulong) this, 16)); } void ColorChooser::changeBackgroundColor(const QImage* imageOriginal, QRgb rgbBg) { if (rgbBg != m_rgbBg) { m_rgbBg = rgbBg; loadForegroundPixmap(m_rgbBg); loadHistograms(imageOriginal); } } void ColorChooser::changeTextLimit(bool lower, int limit) { if (m_showLarge) { if (lower) { ASSERT_ENGAUGE(editLow != 0); if (editLow->text().isEmpty() || (limit != editLow->text().toInt())) editLow->setText(QString("%1").arg(limit)); } else { ASSERT_ENGAUGE(editHigh != 0); if (editHigh->text().isEmpty() || (limit != editHigh->text().toInt())) editHigh->setText(QString("%1").arg(limit)); } } else { // skip changing the edit boxes, since they do not exist. create the signal // the edit box change would have made if (lower) slotLow(QString("%1").arg(limit)); else slotHigh(QString("%1").arg(limit)); } } int ColorChooser::colorAttributeMax(void) { Discretize discretize; return discretize.colorAttributeMax(m_discretizeMethod); } void ColorChooser::loadForegroundPixmap(QRgb rgbBg) { // build foreground/background pixmap. for the foreground color we use black or white, // whichever is furthest in rgb space from the background color int width = ChooserWidth + 2 * ChooserPadding; QImage imageScale(width, m_scaleHeight, 32); int rBg, gBg, bBg; QColor colorBg(rgbBg); colorBg.rgb(&rBg, &gBg, &bBg); QRgb rgbFg; int distanceBlack = (rBg - 0) * (rBg - 0) + (gBg - 0) * (gBg - 0) + (bBg - 0) * (bBg - 0); int distanceWhite = (rBg - 255) * (rBg - 255) + (gBg - 255) * (gBg - 255) + (bBg - 255) * (bBg - 255); if (distanceWhite > distanceBlack) rgbFg = QColor(Qt::white).rgb(); else rgbFg = QColor(Qt::black).rgb(); for (int x = 0; x < width; x++) for (int y = 0; y < m_scaleHeight; y++) { // show an triangle with bottom side on the left, and point on the right if (x < (y * width) / (m_scaleHeight - 2 * ChooserFrame)) setPixelRGB(&imageScale, x, y, rgbBg); else setPixelRGB(&imageScale, x, y, rgbFg); } pixmapForeground.convertFromImage(imageScale, Qt::ThresholdDither); if (m_discretizeMethod == DiscretizeForeground) { scaleCanvas->setBackgroundPixmap(pixmapForeground); scaleCanvas->update(); } } void ColorChooser::loadHistogram(const QImage* imageOriginal, DiscretizeMethod method, int colorAttributeMax, Q3PtrList* histogram, QRgb rgbBg, QProgressDialog* dlg) { ASSERT_ENGAUGE( (method == DiscretizeIntensity) || (method == DiscretizeForeground) || (method == DiscretizeHue) || (method == DiscretizeSaturation) || (method == DiscretizeValue)); // remove any stale points ASSERT_ENGAUGE(histogram != 0); histogram->clear(); int *bins = new int [colorAttributeMax + 1]; CHECK_PTR_ENGAUGE(bins); int i; for (i = 0; i <= colorAttributeMax; i++) bins [i] = 0; Discretize discretize; int x, y, value, rBg, gBg, bBg; QColor color(rgbBg); color.rgb(&rBg, &gBg, &bBg); for (x = 0; x < imageOriginal->width(); x++) { for (y = 0; y < imageOriginal->height(); y++) { if (method == DiscretizeForeground) value = discretize.discretizeValueForeground(imageOriginal, x, y, method, rBg, gBg, bBg); else value = discretize.discretizeValueNotForeground(imageOriginal, x, y, method); bins [value] += 1; } // update progress bar ASSERT_ENGAUGE(dlg != 0); dlg->setValue(imageOriginal->width() * method + x); } // represent histograms as lines on canvas int xOld = ChooserPadding, yOld = m_chooserHeight - 1, xNew, yNew; double pixelCount = (double) (imageOriginal->width() * imageOriginal->height()); for (i = 0; i <= colorAttributeMax + 1; i++) { if (i < colorAttributeMax + 1) { // convert bin count to log scale so small bin counts are still visible xNew = ChooserPadding + (int) (((ChooserWidth - 1) * i) / (double) (colorAttributeMax) + 0.5); int binCount = bins [i]; if (binCount < 1) binCount = 1; yNew = (int) ((m_chooserHeight - 1.0) * (1.0 - log((double) binCount) / log(pixelCount)) + 0.5); if (yNew < 0) yNew = 0; if (yNew > m_chooserHeight - 1) yNew = m_chooserHeight - 1; } else { xNew = ChooserPadding + ChooserWidth; yNew = m_chooserHeight - 1; } Q3CanvasLine* line = new Q3CanvasLine(chooserCanvas); CHECK_PTR_ENGAUGE(line); line->setPoints(xOld, yOld, xNew, yNew); histogram->append(line); xOld = xNew; yOld = yNew; } ASSERT_ENGAUGE(bins != 0); delete[] bins; } void ColorChooser::loadHistograms(const QImage* imageOriginal) { qApp->processEvents(); // process events just once to fill gray box left over from dropped down menu int discretizeMethods = 5; int runTime = imageOriginal->width() * discretizeMethods; QProgressDialog* dlg = new QProgressDialog(QString(tr("Loading histograms")), "Cancel", 0, runTime, m_parent); CHECK_PTR_ENGAUGE(dlg); dlg->setCaption(tr("Progress")); dlg->show(); loadForegroundPixmap(m_rgbBg); intensityHistogram.setAutoDelete(true); foregroundHistogram.setAutoDelete(true); hueHistogram.setAutoDelete(true); saturationHistogram.setAutoDelete(true); valueHistogram.setAutoDelete(true); loadHistogram(imageOriginal, DiscretizeIntensity, DiscretizeIntensityMax, &intensityHistogram, m_rgbBg, dlg); loadHistogram(imageOriginal, DiscretizeForeground, DiscretizeForegroundMax, &foregroundHistogram, m_rgbBg, dlg); loadHistogram(imageOriginal, DiscretizeHue, DiscretizeHueMax, &hueHistogram, m_rgbBg, dlg); loadHistogram(imageOriginal, DiscretizeSaturation, DiscretizeSaturationMax, &saturationHistogram, m_rgbBg, dlg); loadHistogram(imageOriginal, DiscretizeValue, DiscretizeValueMax, &valueHistogram, m_rgbBg, dlg); showCurrentHistogram(); chooserCanvas->update(); ASSERT_ENGAUGE(dlg != 0); delete dlg; qApp->processEvents(); // process events just once to fill gray box left over from previous window } void ColorChooser::passLimitToParent(bool lower, int limit) { emit(limitChange(lower, limit)); } bool ColorChooser::refreshHistogram(Q3PtrList* histogram, DiscretizeMethod method) { bool changed = false; Q3CanvasLine* line; ASSERT_ENGAUGE(histogram != 0); for (line = histogram->first(); line != 0; line = histogram->next()) if (line->visible() != (m_discretizeMethod == method)) { changed = true; line->setVisible(m_discretizeMethod == method); chooserCanvas->setChanged(line->boundingRect()); } return changed; } void ColorChooser::setDiscretizeMethod(DiscretizeMethod method, int limitLower, int limitUpper) { m_discretizeMethod = method; if (m_discretizeMethod != DiscretizeNone) { ASSERT_ENGAUGE(dividerLower); dividerLower->setLimit(limitLower); ASSERT_ENGAUGE(dividerUpper); dividerUpper->setLimit(limitUpper); } bool showDividers = true; switch (method) { case DiscretizeNone: { // the histogram and scale borrow the palette of the nearby edit boxes, so // the enabled and disabled colors are consistent, and the user sees consistent // visual clues about state QPixmap disabledBackground(ChooserWidth + 2 * ChooserPadding, 1); if (editLow == 0) disabledBackground.fill(Qt::lightGray); else disabledBackground.fill(editLow->palette().disabled().background()); scaleCanvas->setBackgroundPixmap(disabledBackground); showDividers = false; } break; case DiscretizeIntensity: scaleCanvas->setBackgroundPixmap(pixmapIntensity); break; case DiscretizeForeground: scaleCanvas->setBackgroundPixmap(pixmapForeground); break; case DiscretizeHue: scaleCanvas->setBackgroundPixmap(pixmapHue); break; case DiscretizeSaturation: scaleCanvas->setBackgroundPixmap(pixmapSaturation); break; case DiscretizeValue: scaleCanvas->setBackgroundPixmap(pixmapValue); break; } grayoutLower->setVisible(showDividers); grayoutUpper->setVisible(showDividers); dividerLower->setVisible(showDividers); dividerUpper->setVisible(showDividers); scaleCanvas->update(); if (m_showLarge) { validatorLow->setRange(0, colorAttributeMax()); validatorHigh->setRange(0, colorAttributeMax()); changeTextLimit(true, limitLower); changeTextLimit(false, limitUpper); } showCurrentHistogram(); updateGrayouts(); chooserCanvas->update(); } void ColorChooser::showCurrentHistogram() { dividerLower->setVisible(m_discretizeMethod != DiscretizeNone); dividerUpper->setVisible(m_discretizeMethod != DiscretizeNone); refreshHistogram(&intensityHistogram, DiscretizeIntensity); refreshHistogram(&foregroundHistogram, DiscretizeForeground); refreshHistogram(&hueHistogram, DiscretizeHue); refreshHistogram(&saturationHistogram, DiscretizeSaturation); refreshHistogram(&valueHistogram, DiscretizeValue); } void ColorChooser::updateGrayouts() { if (m_discretizeMethod != DiscretizeNone) { // update grayout areas int lowerLeft = 0; int upperRight = ChooserWidth; int lower = dividerLower->screenPosition(); int upper = dividerUpper->screenPosition(); if (lower > upper) { lowerLeft = upper; upperRight = lower; } Q3PointArray boundsLowerNew(QRect(lowerLeft, 0, lower - lowerLeft, m_chooserHeight - 1)); // left, top, width, height if (boundsLowerNew != grayoutLower->areaPoints()) { chooserCanvas->setChanged(grayoutLower->boundingRect()); grayoutLower->setPoints(boundsLowerNew); chooserCanvas->setChanged(grayoutLower->boundingRect()); } Q3PointArray boundsUpperNew(QRect(upper, 0, upperRight - upper + 2 * ChooserPadding, m_chooserHeight - 1)); // left, top, width, height if (boundsUpperNew != grayoutUpper->areaPoints()) { chooserCanvas->setChanged(grayoutUpper->boundingRect()); grayoutUpper->setPoints(boundsUpperNew); chooserCanvas->setChanged(grayoutUpper->boundingRect()); } } } ColorChooser::ClickableView::ClickableView(Q3Canvas* canvas, QWidget* parent) : Q3CanvasView(canvas, parent), dragging(false) { } void ColorChooser::ClickableView::contentsMouseMoveEvent(QMouseEvent* e) { if (dragging) { // drag to new position ASSERT_ENGAUGE(draggedTab != 0); draggedTab->divider()->dragContinue(e->pos().x()); } } void ColorChooser::ClickableView::contentsMousePressEvent(QMouseEvent* e) { Q3CanvasItemList list = canvas()->collisions(e->pos()); if (!list.isEmpty()) { // sift through list looking for a Tab Q3CanvasItemList::iterator itr; for (itr = list.begin(); itr != list.end(); ++itr) { Q3CanvasItem* item = *itr; if (item->rtti() == Divider::Tab::RttiTab) { dragging = true; draggedTab = (Divider::Tab*) item; ASSERT_ENGAUGE(e != 0); draggedTab->divider()->dragStart(e->pos().x()); break; } } } } void ColorChooser::ClickableView::contentsMouseReleaseEvent(QMouseEvent*) { dragging = false; draggedTab = 0; } ColorChooser::Divider::Divider(ColorChooser* chooser, Q3Canvas* canvas, bool lower) : m_chooser(chooser), m_canvas(canvas), m_lower(lower), m_limit(0), m_xScreenOffset(0) { m_line = new Q3CanvasLine(canvas); CHECK_PTR_ENGAUGE(m_line); m_line->setPen(QPen(QColor(0, 0, 255))); m_line->show(); m_tab = new Tab(chooser, this, canvas, lower); CHECK_PTR_ENGAUGE(m_tab); } void ColorChooser::Divider::dragContinue(int xCursor) { // clip to histogram extent, which is less than screen extent because of padding double xScreen = xCursor - m_xScreenOffset; if (xScreen < ChooserPadding) xScreen = ChooserPadding; if (ChooserWidth + ChooserPadding - 1 < xScreen) xScreen = ChooserWidth + ChooserPadding - 1; // move divider, including its tab moveToScreenPosition(xScreen); // show new position ASSERT_ENGAUGE(m_canvas); m_canvas->update(); } void ColorChooser::Divider::dragStart(int xCursor) { m_xScreenOffset = xCursor - m_xScreen; } void ColorChooser::Divider::moveToScreenPosition(double xScreen) { m_xScreen = xScreen; ASSERT_ENGAUGE(m_chooser != 0); m_line->setPoints((int) (xScreen + 0.5), 0, (int) (xScreen + 0.5), m_chooser->chooserHeight() - 1); ASSERT_ENGAUGE(m_tab != 0); m_tab->moveToScreenPosition(xScreen); ASSERT_ENGAUGE(m_chooser != 0); int limit = (int) ((xScreen - ChooserPadding) * m_chooser->colorAttributeMax() / (ChooserWidth - 1) + 0.5); if (limit != m_limit) { m_limit = limit; ASSERT_ENGAUGE(m_chooser != 0); m_chooser->changeTextLimit(m_lower, m_limit); } } int ColorChooser::Divider::screenPosition(void) { ASSERT_ENGAUGE(m_line != 0); return m_line->startPoint().x(); } void ColorChooser::Divider::setLimit(int limit) { ASSERT_ENGAUGE(m_chooser != 0); m_xScreen = ChooserPadding + (int) ((limit * (ChooserWidth - 1)) / (double) m_chooser->colorAttributeMax() + 0.5); ASSERT_ENGAUGE(m_line != 0); QRect oldBounds = m_line->boundingRect(); ASSERT_ENGAUGE(m_chooser != 0); m_line->setPoints((int) (m_xScreen + 0.5), 0, (int) (m_xScreen + 0.5), m_chooser->chooserHeight() - 1); QRect newBounds = m_line->boundingRect(); if (oldBounds != newBounds) { ASSERT_ENGAUGE(m_canvas != 0); m_canvas->setChanged(oldBounds); m_canvas->setChanged(newBounds); } ASSERT_ENGAUGE(m_tab != 0); m_tab->moveToScreenPosition(m_xScreen); m_limit = limit; ASSERT_ENGAUGE(m_chooser != 0); m_chooser->updateGrayouts(); m_canvas->update(); } void ColorChooser::Divider::setVisible(bool show) { ASSERT_ENGAUGE(m_line != 0); m_line->setVisible(show); ASSERT_ENGAUGE(m_tab != 0); m_tab->setVisible(show); } ColorChooser::Divider::Tab::Tab(ColorChooser* chooser, Divider* divider, Q3Canvas* canvas, bool lower) : Q3CanvasRectangle(0, 0, TabWidth, TabHeight, canvas), m_chooser(chooser), m_divider(divider), m_canvas(canvas), m_lower(lower) { if (lower) m_pixmap = new QPixmap(histogram_lower_xpm); else m_pixmap = new QPixmap(histogram_upper_xpm); CHECK_PTR_ENGAUGE(m_pixmap); Q3CanvasRectangle::show(); Q3CanvasRectangle::setZ(10.0); // put above everything else if (m_lower) // lower limit is at a lower height than upper limit Q3CanvasRectangle::setY((double) (3 * chooser->chooserHeight() / 4 - TabHeight / 2)); else // upper limit is at a higher height than lower limit Q3CanvasRectangle::setY((double) (chooser->chooserHeight() / 4 - TabHeight / 2)); } void ColorChooser::Divider::Tab::drawShape(QPainter &p) { if (Q3CanvasRectangle::visible()) p.drawPixmap((int) x(), (int) y(), *m_pixmap); } void ColorChooser::Divider::Tab::moveToScreenPosition(double xScreen) { QRect oldBounds = Q3CanvasRectangle::boundingRect(); Q3CanvasRectangle::setX(xScreen - TabWidth / 2); QRect newBounds = Q3CanvasRectangle::boundingRect(); if (oldBounds != newBounds) { ASSERT_ENGAUGE(m_canvas != 0); m_canvas->setChanged(oldBounds); m_canvas->setChanged(newBounds); } } void ColorChooser::Divider::Tab::setVisible(bool show) { Q3CanvasRectangle::setVisible(show); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void ColorChooser::slotHigh(const QString &text) { int limit = text.toInt(); // keep divider on screen. lower bound is handled by validator if (limit > colorAttributeMax()) { limit = colorAttributeMax(); if (m_showLarge) { ASSERT_ENGAUGE(editHigh != 0); editHigh->setText(QString("%1").arg(limit)); } } ASSERT_ENGAUGE(dividerUpper); dividerUpper->setLimit(limit); // send limit if valid, else invalid value if blank so user is forced to enter 0 for zero if (text.isEmpty()) passLimitToParent(false, colorAttributeMax() + 1); else passLimitToParent(false, limit); } void ColorChooser::slotLow(const QString &text) { int limit = text.toInt(); // keep divider on screen. lower bound is handled by validator if (limit > colorAttributeMax()) { limit = colorAttributeMax(); if (m_showLarge) { ASSERT_ENGAUGE(editLow != 0); editLow->setText(QString("%1").arg(limit)); } } ASSERT_ENGAUGE(dividerLower); dividerLower->setLimit(limit); // send limit if valid, else invalid value if blank so user is forced to enter 0 for zero if (text.isEmpty()) passLimitToParent(true, colorAttributeMax() + 1); else passLimitToParent(true, limit); } engauge-digitizer-5.2/src/colorchooser.h000066400000000000000000000201031222557406400204270ustar00rootroot00000000000000/*************************************************************************** colorchooser.h - description ------------------- begin : Fri Dec 26 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef COLORCHOOSER_H #define COLORCHOOSER_H #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include "digitdef.h" // this set of widgets presents a histogram of color attribute values, // with one or two draggable limit dividers overlaying the histogram. // a scale below the histogram pictorially shows the color attribute spectrum. // one or two edit boxes below allow keyboard editing of the limits class ColorChooser : public QObject { Q_OBJECT public: ColorChooser(QWidget* parent, const QImage* imageOriginal, int xTopLeft, int yTopLeft, QRgb rgbBg, bool showLarge); ~ColorChooser(); enum { ChooserWidth = 202 }; enum { ChooserPadding = 4 // padding on each side of histogram (needed so first and last points are visible) }; enum { ChooserFrame = 3 // pixels used up by frame }; enum { ChooserFullHeight = 110 }; enum { EditWidth = 80 }; enum { ScaleFullHeight = 20 }; enum { Separation = 3 }; enum { TabWidth = 32 }; enum { TabHeight = 20 }; // change background color, and update foreground histogram void changeBackgroundColor(const QImage* imageOriginal, QRgb rgbBg); // put limit into edit box void changeTextLimit(bool lower, int limit); // chooser height depends on the format int chooserHeight(void) { return m_chooserHeight; } // attribute maximum depends on which color attribute is chosen int colorAttributeMax(void); // set discretize method, loading appropriate background histogram image. the limits // are not relevant if the method is DiscretizeNone since that state is equivalent // to setEnabled(false). all other states are equivalent to setEnabled(true) void setDiscretizeMethod(DiscretizeMethod method, int limitLower = 0, int limitUpper = 0); // update grayout areas to correspond to current limits void updateGrayouts(); // histogram divider class. one divider is lower bound, other divider is upper bound. // this class should be private but Microsoft compiler will choke if it is class Divider { public: Divider(ColorChooser* chooser, Q3Canvas* canvas, bool lower); ~Divider() { } // set horizontal position of vertical line, returning true if position changed void setLimit(int limit); void moveToScreenPosition(double xScreen); int screenPosition(void); // process a click-and-drag by dragging lower or upper limit a little in x direction void dragStart(int xCursor); void dragContinue(int xCursor); // show or hide this divider void setVisible(bool show); bool visible(void) { return m_line->visible(); } // tab is derived from QCanvasRectangle since QCanvasPixmap is NOT derived from QCanvasItem class Tab : public Q3CanvasRectangle { public: Tab(ColorChooser* chooser, Divider* divider, Q3Canvas* canvas, bool lower); ~Tab() {} void moveToScreenPosition(double xScreen); Divider* divider() { return m_divider; } // show or hide this tab void setVisible(bool show); bool visible(void) { return Q3CanvasRectangle::visible(); } enum { RttiTab = 123456 // large random value over 1000 }; virtual int rtti() const { return RttiTab; } protected: virtual void drawShape(QPainter &p); private: ColorChooser* m_chooser; Divider* m_divider; Q3Canvas* m_canvas; QPixmap* m_pixmap; bool m_lower; }; private: ColorChooser* m_chooser; Q3Canvas* m_canvas; bool m_lower; // true for lower bound, false for upper bound Q3CanvasLine* m_line; Tab* m_tab; // for any value of the limit, there are multiple possible screen positions. when // the limit is changed in an edit box, the screen position is updated accordingly. // when the divider is dragged, the screen position changes in one-pixel increments, // and the limit is updated accordingly int m_limit; double m_xScreen; // cursor distance from center of tab when mouse was pressed double m_xScreenOffset; }; signals: void limitChange(bool lower, int limit); public slots: void slotHigh(const QString &); void slotLow(const QString &); private: // refresh a single histogram bool refreshHistogram(Q3PtrList* histogram, DiscretizeMethod method); // build foreground pixmap void loadForegroundPixmap(QRgb rgbBg); // creates histograms from original image void loadHistogram(const QImage* imageOriginal, DiscretizeMethod method, int colorAttributeMax, Q3PtrList* histogram, QRgb rgbBg, QProgressDialog* dlg); void loadHistograms(const QImage* imageOriginal); void showCurrentHistogram(void); // send limit to parent class using signal void passLimitToParent(bool lower, int limit); class ClickableView : public Q3CanvasView { public: ClickableView(Q3Canvas* canvas, QWidget* parent); ~ClickableView() {} private: void contentsMouseMoveEvent(QMouseEvent* e); void contentsMousePressEvent(QMouseEvent* e); void contentsMouseReleaseEvent(QMouseEvent* e); bool dragging; // screen offset from center of tab int draggingOffset; Divider::Tab* draggedTab; }; QWidget* m_parent; // widgets for displaying the attribute histogram, and the adjustable boundary lines Q3Canvas* chooserCanvas; ClickableView* chooserCanvasView; Divider* dividerLower; Divider* dividerUpper; Q3PtrList intensityHistogram; Q3PtrList foregroundHistogram; Q3PtrList hueHistogram; Q3PtrList saturationHistogram; Q3PtrList valueHistogram; Q3Canvas* scaleCanvas; Q3CanvasView* scaleCanvasView; Q3CanvasPolygon* grayoutLower; Q3CanvasPolygon* grayoutUpper; // histogram backgrounds QPixmap pixmapIntensity; QPixmap pixmapForeground; QPixmap pixmapHue; QPixmap pixmapSaturation; QPixmap pixmapValue; // column labels QLabel* labelLower; QLabel* labelUpper; // keyboard editing QLineEdit* editLow; QIntValidator* validatorLow; QLineEdit* editHigh; QIntValidator* validatorHigh; // histogram option DiscretizeMethod m_discretizeMethod; // background color QRgb m_rgbBg; // large format has two edit boxes for manual editing, and larger widget sizes bool m_showLarge; int m_chooserHeight; int m_scaleHeight; }; #endif // COLORCHOOSER_H engauge-digitizer-5.2/src/coordsysdlg.cpp000066400000000000000000000264551222557406400206350ustar00rootroot00000000000000/*************************************************************************** coordsysdlg.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include //Added by qt3to4: #include #include #include #include "coordsysdlg.h" #include "main.h" #include "img/whatsthis.xpm" #include "digitdebug.h" CoordSysDlg::CoordSysDlg(QString title, CoordSettings* settings) : QDialog(0, "coordsysdlg", true), settings(settings) { DigitDebug::ctor(QString("coordsysdlg ") + QString::number((ulong) this, 16)); setCaption(tr("Coordinate System - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(340, 360); // coordinate reference frame groupCoords = new Q3ButtonGroup(QString(tr("Coordinates")), this); CHECK_PTR_ENGAUGE(groupCoords); groupCoords->setGeometry(10, 10, 320, 80); buttonCartesian = new QRadioButton(QString(tr("Cartesian (X and Y)")), groupCoords); CHECK_PTR_ENGAUGE(buttonCartesian); buttonCartesian->setGeometry(10, 30, 210, 20); QWhatsThis::add(buttonCartesian, QString(tr("Select cartesian coordinates.\n\n" "The X and Y coordinates will be used"))); connect(buttonCartesian, SIGNAL(toggled(bool)), this, SLOT(slotCartesian(bool))); buttonPolar = new QRadioButton(QString(tr("Polar (Theta and R)")), groupCoords); CHECK_PTR_ENGAUGE(buttonPolar); buttonPolar->setGeometry(10, 50, 210, 20); QWhatsThis::add(buttonPolar, QString(tr("Select polar coordinates.\n\n" "The Theta and R coordinates will be used.\n\n" "Polar coordinates are not allowed with log scale for Theta"))); connect(buttonPolar, SIGNAL(toggled(bool)), this, SLOT(slotPolar(bool))); // x/theta groupX = new Q3ButtonGroup(QString(tr("X/Theta")), this); CHECK_PTR_ENGAUGE(groupX); groupX->setGeometry(10, 100, 145, 80); buttonLinearX = new QRadioButton(QString(tr("Linear")), groupX); CHECK_PTR_ENGAUGE(buttonLinearX); buttonLinearX->setGeometry(10, 30, 80, 20); QWhatsThis::add(buttonLinearX, QString(tr("Specifies linear scale for the X or Theta coordinate"))); connect(buttonLinearX, SIGNAL(toggled(bool)), this, SLOT(slotLinearX(bool))); buttonLogX = new QRadioButton(QString(tr("Log")), groupX); CHECK_PTR_ENGAUGE(buttonLogX); buttonLogX->setGeometry(10, 50, 80, 20); QWhatsThis::add(buttonLogX, QString(tr("Specifies logarithmic scale for the X coordinate.\n\n" "Log scale is not allowed for the Theta coordinate"))); connect(buttonLogX, SIGNAL(toggled(bool)), this, SLOT(slotLogX(bool))); // y/r groupY = new Q3ButtonGroup(QString(tr("Y/R")), this); CHECK_PTR_ENGAUGE(groupY); groupY->setGeometry(185, 100, 145, 80); buttonLinearY = new QRadioButton(QString(tr("Linear")), groupY); CHECK_PTR_ENGAUGE(buttonLinearY); buttonLinearY->setGeometry(10, 30, 80, 20); QWhatsThis::add(buttonLinearY, QString(tr("Specifies linear scale for the Y or R coordinate"))); connect(buttonLinearY, SIGNAL(toggled(bool)), this, SLOT(slotLinearY(bool))); buttonLogY = new QRadioButton(QString(tr("Log")), groupY); CHECK_PTR_ENGAUGE(buttonLogY); buttonLogY->setGeometry(10, 50, 80, 20); QWhatsThis::add(buttonLogY, QString(tr("Specifies logarithmic scale for the Y or R coordinate"))); connect(buttonLogY, SIGNAL(toggled(bool)), this, SLOT(slotLogY(bool))); // polar group groupPolar = new Q3ButtonGroup(QString(tr("Polar Coordinates")), this); CHECK_PTR_ENGAUGE(groupPolar); groupPolar->setGeometry(10, 190, 320, 120); // theta units in polar group labelThetaUnits = new QLabel(QString(tr("Theta Units:")), groupPolar); CHECK_PTR_ENGAUGE(labelThetaUnits); labelThetaUnits->setGeometry(10, 30, 80, 20); buttonDegrees = new QRadioButton(QString(tr("Degrees:")), groupPolar); CHECK_PTR_ENGAUGE(buttonDegrees); buttonDegrees->setGeometry(10, 50, 210, 20); QWhatsThis::add(buttonDegrees, QString(tr("Specifies degrees for the Theta coordinate.\n\n" "This does not apply to the cartesian coordinate X"))); connect(buttonDegrees, SIGNAL(toggled(bool)), this, SLOT(slotDegrees(bool))); buttonGradians = new QRadioButton(QString(tr("Gradians")), groupPolar); CHECK_PTR_ENGAUGE(buttonGradians); buttonGradians->setGeometry(10, 70, 210, 20); QWhatsThis::add(buttonGradians, QString("Specifies gradians for the Theta coordinate.\n\n" "This does not apply to the cartesian coordinate X")); connect(buttonGradians, SIGNAL(toggled(bool)), this, SLOT(slotGradians(bool))); buttonRadians = new QRadioButton(QString(tr("Radians")), groupPolar); CHECK_PTR_ENGAUGE(buttonRadians); buttonRadians->setGeometry(10, 90, 210, 20); QWhatsThis::add(buttonRadians, QString("Specifies radians for the Theta coordinate.\n\n" "This does not apply to the cartesian coordinate X")); connect(buttonRadians, SIGNAL(toggled(bool)), this, SLOT(slotRadians(bool))); // polar origin radius in polar group labelOriginRadius = new QLabel(QString(tr("Origin Radius:")), groupPolar); CHECK_PTR_ENGAUGE(labelOriginRadius); labelOriginRadius->setGeometry(230, 30, 80, 20); editOriginRadius = new QLineEdit(groupPolar); CHECK_PTR_ENGAUGE(editOriginRadius); editOriginRadius->setText(QString("%1").arg(settings->originRadius)); editOriginRadius->setGeometry(230, 50, 80, 20); QWhatsThis::add(editOriginRadius, QString(tr("Specify radius value at origin.\n\n" "Normally the radius at the origin is 0, but a nonzero value may be applied if the radial units are decibels."))); validatorOriginRadius = new QDoubleValidator(editOriginRadius); CHECK_PTR_ENGAUGE(validatorOriginRadius); validatorOriginRadius->setBottom(0.0); editOriginRadius->setValidator(validatorOriginRadius); connect(editOriginRadius, SIGNAL(textChanged(const QString &)), this, SLOT(slotOriginRadius(const QString &))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 320, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 320, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(270, 320, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); toggleActions(); } CoordSysDlg::~CoordSysDlg() { DigitDebug::dtor(QString("coordsysdlg ") + QString::number((ulong) this, 16)); delete buttonOk; delete buttonCancel; } void CoordSysDlg::toggleActions() { // this function is straightforward except for the following constraints: // (1) cannot allow polar coordinates and logx simultaneously // (2) need to disable the polar units buttons if cartesian coordinates are chosen ASSERT_ENGAUGE(settings != 0); ASSERT_ENGAUGE(buttonCartesian != 0); ASSERT_ENGAUGE(buttonPolar != 0); ASSERT_ENGAUGE(buttonLogX != 0); ASSERT_ENGAUGE(buttonDegrees != 0); ASSERT_ENGAUGE(buttonGradians != 0); ASSERT_ENGAUGE(buttonRadians != 0); ASSERT_ENGAUGE(editOriginRadius != 0); switch (settings->frame) { case Cartesian: buttonCartesian->setChecked(true); editOriginRadius->setEnabled(false); buttonLogX->setEnabled(true); buttonDegrees->setEnabled(false); buttonGradians->setEnabled(false); buttonRadians->setEnabled(false); break; case Polar: buttonPolar->setChecked(true); editOriginRadius->setEnabled(true); buttonLogX->setEnabled(false); buttonDegrees->setEnabled(true); buttonGradians->setEnabled(true); buttonRadians->setEnabled(true); break; } switch (settings->xThetaScale) { case Linear: buttonLinearX->setChecked(true); buttonPolar->setEnabled(true); break; case Log: buttonLogX->setChecked(true); buttonPolar->setEnabled(false); break; } switch (settings->yRScale) { case Linear: buttonLinearY->setChecked(true); break; case Log: buttonLogY->setChecked(true); break; } switch (settings->thetaUnits) { case ThetaDegrees: buttonDegrees->setChecked(true); break; case ThetaGradians: buttonGradians->setChecked(true); break; case ThetaRadians: buttonRadians->setChecked(true); break; } } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void CoordSysDlg::slotCartesian(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->frame != Cartesian)) { settings->frame = Cartesian; toggleActions(); } } void CoordSysDlg::slotPolar(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->frame != Polar)) { settings->frame = Polar; toggleActions(); } } void CoordSysDlg::slotLinearX(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->xThetaScale != Linear)) { settings->xThetaScale = Linear; toggleActions(); } } void CoordSysDlg::slotLogX(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->xThetaScale != Log)) { settings->xThetaScale = Log; toggleActions(); } } void CoordSysDlg::slotLinearY(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->yRScale != Linear)) { settings->yRScale = Linear; toggleActions(); } } void CoordSysDlg::slotLogY(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->yRScale != Log)) { settings->yRScale = Log; toggleActions(); } } void CoordSysDlg::slotDegrees(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->thetaUnits != ThetaDegrees)) { settings->thetaUnits = ThetaDegrees; toggleActions(); } } void CoordSysDlg::slotGradians(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->thetaUnits != ThetaGradians)) { settings->thetaUnits = ThetaGradians; toggleActions(); } } void CoordSysDlg::slotRadians(bool toggle) { ASSERT_ENGAUGE(settings != 0); if (toggle && (settings->thetaUnits != ThetaRadians)) { settings->thetaUnits = ThetaRadians; toggleActions(); } } void CoordSysDlg::slotOriginRadius(const QString &originRadius) { ASSERT_ENGAUGE(settings != 0); if (settings->frame == Polar) { settings->originRadius = originRadius.toDouble(); toggleActions(); } } void CoordSysDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/coordsysdlg.h000066400000000000000000000051401222557406400202660ustar00rootroot00000000000000/*************************************************************************** coordsysdlg.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef COORDSYSDLG_H #define COORDSYSDLG_H #include #include #include #include #include #include #include #include "digitdef.h" // this dialog box class edits a document's axes information class CoordSysDlg : public QDialog { Q_OBJECT public: CoordSysDlg(QString title, CoordSettings* settings); ~CoordSysDlg(); private slots: void slotCartesian(bool toggle); void slotPolar(bool toggle); void slotOriginRadius(const QString &originRadius); void slotLinearX(bool toggle); void slotLogX(bool toggle); void slotLinearY(bool toggle); void slotLogY(bool toggle); void slotDegrees(bool toggle); void slotGradians(bool toggle); void slotRadians(bool toggle); void slotWhat(void); private: // enable or disable buttons as appropriate void toggleActions(); CoordSettings* settings; Q3ButtonGroup* groupCoords; QRadioButton* buttonCartesian; QRadioButton* buttonPolar; Q3ButtonGroup* groupX; QRadioButton* buttonLinearX; QRadioButton* buttonLogX; Q3ButtonGroup* groupY; QRadioButton* buttonLinearY; QRadioButton* buttonLogY; Q3ButtonGroup* groupPolar; QLabel* labelThetaUnits; QRadioButton* buttonDegrees; QRadioButton* buttonGradians; QRadioButton* buttonRadians; QLabel* labelOriginRadius; QLineEdit* editOriginRadius; QDoubleValidator* validatorOriginRadius; QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; }; #endif // COORDSYSDLG_H engauge-digitizer-5.2/src/curvecmb.cpp000066400000000000000000000060111222557406400200710ustar00rootroot00000000000000/*************************************************************************** curvecmb.cpp - description ------------------- begin : Thu Oct 31 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include "curvecmb.h" #include "digitview.h" #include "digitdebug.h" #include "main.h" #include "pointsetstyles.h" #include "defaultsettings.h" #include CurveCmb::CurveCmb(QWidget* parent) : QComboBox(true, parent, "curve list") { DigitDebug::ctor(QString("curvecmb ") + QString::number((ulong) this, 16)); setMinimumWidth(DefaultSettings::instance().getComboBoxWidthMin()); setEnabled(false); setEditable(false); QWhatsThis::add(this, QString(tr("Currently active curve\n\n" "While in one of the curve digitizing modes (Curve Point, Segment Fill, or Point Match), any " "new points will be assigned to this curve\n\n" "Another curve may be selected by using the dropdown button"))); // override the default Qt focus policy with the Windows and Motif policy setFocusPolicy(Qt::StrongFocus); } CurveCmb::~CurveCmb() { DigitDebug::dtor(QString("curvecmb ") + QString::number((ulong) this, 16)); } void CurveCmb::attachToDocument(DigitDoc* doc) { clear(); if (doc) { // show all curves in combobox QStringList list; doc->curveNames(&list); for (QStringList::iterator itr = list.begin(); itr != list.end(); ++itr) insertItem(doc->curveThumbnail(*itr), *itr); DigitDebug::curvecmb(QString("attaching to document with ") + QString::number(list.count()) + QString(" curves: ") + list.join(QString(" "))); } else DigitDebug::curvecmb(QString("attaching to null document")); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void CurveCmb::slotComboCurve(bool toggle) { if (toggle) { setEnabled(true); if (currentText().isEmpty()) { for (int index = 0; index < count(); index++) { if (text(index) == DefaultCurveName) { setCurrentItem(index); break; } } } } } void CurveCmb::slotComboNotCurve(bool toggle) { if (toggle) setEnabled(false); } engauge-digitizer-5.2/src/curvecmb.h000066400000000000000000000031501222557406400175370ustar00rootroot00000000000000/*************************************************************************** curvecmb.h - description ------------------- begin : Thu Oct 31 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef CURVECMB_H #define CURVECMB_H #include #include #include "digitdoc.h" // this combobox in draw toolbar displays the currently active curve, if in // curve mode. otherwise this is grayed out class CurveCmb : public QComboBox { Q_OBJECT public: CurveCmb(QWidget* parent); ~CurveCmb(); // load curve names from a document void attachToDocument(DigitDoc* doc); private slots: // change cursor to curve point mode void slotComboCurve(bool toggle); // change cursor to noncurve point mode void slotComboNotCurve(bool toggle); }; #endif // CURVECMB_H engauge-digitizer-5.2/src/defaultsettings.cpp000066400000000000000000001706301222557406400215010ustar00rootroot00000000000000/*************************************************************************** defaultsettings.cpp - description ------------------- begin : Thu Sep 9 2004 copyright : (C) 2004 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "defaultsettings.h" #include "digitdebug.h" extern bool cmdSettingsReset; extern bool cmdSettingsText; DefaultSettings* DefaultSettings::m_settings = (DefaultSettings*) 0; const QString ENGAUGE_GROUP_PREFIX("/Engauge"); // all settings below belong to this group const QString SESSIONS_GROUP(ENGAUGE_GROUP_PREFIX + "/sessions"); // group prefix for sessions const QString SESSIONS_SESSIONS(SESSIONS_GROUP + "/sessions"); const QString SESSIONS_COORDINATES(SESSIONS_GROUP + "/coordinates"); const QString SESSIONS_AXES(SESSIONS_GROUP + "/axes"); const QString SESSIONS_SCALEBAR(SESSIONS_GROUP + "/scalebar"); const QString SESSIONS_CURVES(SESSIONS_GROUP + "/curves"); const QString SESSIONS_SEGMENTS(SESSIONS_GROUP + "/segments"); const QString SESSIONS_POINTMATCH(SESSIONS_GROUP + "/pointmatch"); const QString SESSIONS_MEASURES(SESSIONS_GROUP + "/measures"); const QString SESSIONS_DISCRETIZE(SESSIONS_GROUP + "/discretize"); const QString SESSIONS_GRIDREMOVAL(SESSIONS_GROUP + "/gridremoval"); const QString SESSIONS_GRIDDISPLAY(SESSIONS_GROUP + "/griddisplay"); const QString SESSIONS_EXPORTING(SESSIONS_GROUP + "/export"); const QString SESSIONS_VIEWSELECTIONS(SESSIONS_GROUP + "/viewselections"); const QString SESSIONS_INITIALDIGITIZESTATE(SESSIONS_GROUP + "/initialdigitizestate"); const QString COORD_GROUP(ENGAUGE_GROUP_PREFIX + "/coord"); // group prefix for coord const QString COORD_FRAME(COORD_GROUP + "/frame"); const QString COORD_ORIGINRADIUS(COORD_GROUP + "/originradius"); const QString COORD_XTHETASCALE(COORD_GROUP + "/xthetascale"); const QString COORD_YRSCALE(COORD_GROUP + "/yrscale"); const QString COORD_THETAUNITS(COORD_GROUP + "/thetaunits"); const QString EXPORT_GROUP(ENGAUGE_GROUP_PREFIX + "/export"); // group prefix for export const QString EXPORT_POINTSSELECTION(EXPORT_GROUP + "/pointsselection"); const QString EXPORT_LAYOUT(EXPORT_GROUP + "/layout"); const QString EXPORT_DELIMITERS(EXPORT_GROUP + "/delimiters"); const QString EXPORT_HEADER(EXPORT_GROUP + "/header"); const QString EXPORT_XLABEL(EXPORT_GROUP + "/xlabel"); const QString EXPORT_THETALABEL(EXPORT_GROUP + "/thetalabel"); const QString VIEW_GROUP(ENGAUGE_GROUP_PREFIX + "/view"); // group prefix for view selections const QString VIEW_TOOLBARS(VIEW_GROUP + "/toolbars"); // subgroup prefix for view toolbars selections const QString VIEW_FILETOOLBAR(VIEW_TOOLBARS + "/file"); const QString VIEW_SELECTTOOLBAR(VIEW_TOOLBARS + "/select"); const QString VIEW_IMAGESCALETOOLBAR(VIEW_TOOLBARS + "/imagescale"); const QString VIEW_DIGITIZECURVEPOINTSTOOLBAR(VIEW_TOOLBARS + "/digitizecurvepoints"); const QString VIEW_DIGITIZEMEASUREPOINTSTOOLBAR(VIEW_TOOLBARS + "/digitizemeasurepoints"); const QString VIEW_ZOOMTOOLBAR(VIEW_TOOLBARS + "/zoom"); const QString VIEW_STATUSBAR(VIEW_GROUP + "/statusbar"); const QString VIEW_POINTS(VIEW_GROUP + "/points"); const QString VIEW_BACKGROUND(VIEW_GROUP + "/background"); const QString VIEW_CURVEGEOMETRY(VIEW_GROUP + "/curvegeometry"); const QString VIEW_MEASUREGEOMETRY(VIEW_GROUP + "/measuregeometry"); const QString MATH_GROUP(ENGAUGE_GROUP_PREFIX + "/math"); // group prefix for math const QString MATH_POWERMOSTSIGMAX(MATH_GROUP + "/powermostsigmax"); const QString MATH_POWERMOSTSIGMIN(MATH_GROUP + "/powermostsigmin"); const QString MATH_DOUBLEMIN(MATH_GROUP + "/doublemin"); const QString MATH_MAXCOMMANDS(MATH_GROUP + "/maxcommands"); const QString WINDOW_CURVE_GROUP(ENGAUGE_GROUP_PREFIX + "/window/curve"); // group prefix for curve geometry window const QString WINDOW_CURVE_WIDTH(WINDOW_CURVE_GROUP + "/width"); const QString WINDOW_CURVE_HEIGHT(WINDOW_CURVE_GROUP + "/height"); const QString WINDOW_CURVE_X(WINDOW_CURVE_GROUP + "/x"); const QString WINDOW_CURVE_Y(WINDOW_CURVE_GROUP + "/y"); const QString WINDOW_HELP_GROUP(ENGAUGE_GROUP_PREFIX + "/window/help"); // group prefix for help window const QString WINDOW_HELP_WIDTH(WINDOW_HELP_GROUP + "/width"); const QString WINDOW_HELP_HEIGHT(WINDOW_HELP_GROUP + "/height"); const QString WINDOW_HELP_X(WINDOW_HELP_GROUP + "/x"); const QString WINDOW_HELP_Y(WINDOW_HELP_GROUP + "/y"); const QString WINDOW_MAIN_GROUP(ENGAUGE_GROUP_PREFIX + "/window/main"); // group prefix for main window const QString WINDOW_MAIN_WIDTH(WINDOW_MAIN_GROUP + "/width"); const QString WINDOW_MAIN_HEIGHT(WINDOW_MAIN_GROUP + "/height"); const QString WINDOW_MAIN_X(WINDOW_MAIN_GROUP + "/x"); const QString WINDOW_MAIN_Y(WINDOW_MAIN_GROUP + "/y"); const QString WINDOW_MAIN_FONT_OVERRIDE(WINDOW_MAIN_GROUP + "/font/override"); const QString WINDOW_MAIN_FONT_NAME(WINDOW_MAIN_GROUP + "/font/name"); const QString WINDOW_MAIN_FONT_SIZE(WINDOW_MAIN_GROUP + "/font/size"); const QString WINDOW_MAIN_COMBOBOXWIDTHMIN(WINDOW_MAIN_GROUP + "/comboboxwidthmin"); const QString WINDOW_MEASURE_GROUP(ENGAUGE_GROUP_PREFIX + "/window/measure"); // group prefix for measure geometry window const QString WINDOW_MEASURE_WIDTH(WINDOW_MEASURE_GROUP + "/width"); const QString WINDOW_MEASURE_HEIGHT(WINDOW_MEASURE_GROUP + "/height"); const QString WINDOW_MEASURE_X(WINDOW_MEASURE_GROUP + "/x"); const QString WINDOW_MEASURE_Y(WINDOW_MEASURE_GROUP + "/y"); const QString KEY_GROUP(ENGAUGE_GROUP_PREFIX + "/key"); // group prefix for key const QString KEY_CLIPBOARD(KEY_GROUP + "/clipboard"); const QString KEY_TREE(KEY_GROUP + "/tree"); const QString KEY_VARIABLES(KEY_GROUP + "/variables"); const QString HANDLE_GROUP(ENGAUGE_GROUP_PREFIX + "/handle"); // group prefix for handle const QString HANDLE_WIDTH(HANDLE_GROUP + "/width"); const QString HANDLE_HEIGHT(HANDLE_GROUP + "/height"); const QString SEGMENT_GROUP(ENGAUGE_GROUP_PREFIX + "/segment"); // group prefix for segment const QString SEGMENT_MINPOINTS(SEGMENT_GROUP + "/minpoints"); const QString SEGMENT_POINTMINSEPARATION(SEGMENT_GROUP + "/pointminseparation"); const QString SEGMENT_POINTDEFAULTSEPARATION(SEGMENT_GROUP + "/pointdefaultseparation"); const QString SEGMENT_FILLCORNERS(SEGMENT_GROUP + "/fillcorners"); const QString SEGMENT_LINESIZE(SEGMENT_GROUP + "/linesize"); const QString SEGMENT_LINECOLOR(SEGMENT_GROUP + "/linecolor"); const QString GRID_REMOVAL_GROUP(ENGAUGE_GROUP_PREFIX + "/grid/removal"); // group prefix for grid removal const QString GRID_REMOVAL_REMOVETHINLINES(GRID_REMOVAL_GROUP + "/removethinlines"); const QString GRID_REMOVAL_THINTHICKNESS(GRID_REMOVAL_GROUP + "/thinthickness"); const QString GRID_REMOVAL_REMOVEGRIDLINES(GRID_REMOVAL_GROUP + "/removegridlines"); const QString GRID_REMOVAL_GRIDSETX(GRID_REMOVAL_GROUP + "/gridsetx"); const QString GRID_REMOVAL_GRIDSETY(GRID_REMOVAL_GROUP + "/gridsety"); const QString GRID_REMOVAL_GRIDDISTANCE(GRID_REMOVAL_GROUP + "/griddistance"); const QString GRID_REMOVAL_REMOVECOLOR(GRID_REMOVAL_GROUP + "/removecolor"); const QString GRID_REMOVAL_COLOR_RED(GRID_REMOVAL_GROUP + "/color/red"); const QString GRID_REMOVAL_COLOR_GREEN(GRID_REMOVAL_GROUP + "/color/green"); const QString GRID_REMOVAL_COLOR_BLUE(GRID_REMOVAL_GROUP + "/color/blue"); const QString GRID_REMOVAL_GAPSEPARATION(GRID_REMOVAL_GROUP + "/gapseparation"); const QString GRID_REMOVAL_FOREGROUNDTHRESHOLDLOW(GRID_REMOVAL_GROUP + "/foregroundthresholdlow"); const QString GRID_REMOVAL_FOREGROUNDTHRESHOLDHIGH(GRID_REMOVAL_GROUP + "/foregroundthresholdhigh"); const QString GRID_DISPLAY_GROUP(ENGAUGE_GROUP_PREFIX + "/grid/display"); // group prefix for grid display const QString GRID_DISPLAY_GRIDSETX(GRID_DISPLAY_GROUP + "/gridsetx"); const QString GRID_DISPLAY_GRIDSETY(GRID_DISPLAY_GROUP + "/gridsety"); const QString POINTMATCH_GROUP(ENGAUGE_GROUP_PREFIX + "/pointmatch"); // group prefix for pointmatch const QString POINTMATCH_HIGHLIGHTDIAMETER(POINTMATCH_GROUP + "/highlightdiameter"); const QString POINTMATCH_HIGHLIGHTLINESIZE(POINTMATCH_GROUP + "/highlightlinesize"); const QString POINTMATCH_SEPARATIONDEFAULT(POINTMATCH_GROUP + "/separationdefault"); const QString POINTMATCH_SIZEDEFAULT(POINTMATCH_GROUP + "/sizedefault"); const QString POINTMATCH_ACCEPTEDCOLOR(POINTMATCH_GROUP + "/acceptedcolor"); const QString POINTMATCH_REJECTEDCOLOR(POINTMATCH_GROUP + "/rejectedcolor"); const QString POINTMATCH_CANDIDATECOLOR(POINTMATCH_GROUP + "/candidatecolor"); const QString DISCRETIZE_GROUP(ENGAUGE_GROUP_PREFIX + "/discretize"); // group prefix for discretize const QString DISCRETIZE_METHODDEFAULT(DISCRETIZE_GROUP + "/methoddefault"); const QString DISCRETIZE_INTENSITY_THRESHOLDLOW(DISCRETIZE_GROUP + "/intensity/thresholdlow"); const QString DISCRETIZE_INTENSITY_THRESHOLDHIGH(DISCRETIZE_GROUP + "/intensity/thresholdhigh"); const QString DISCRETIZE_FOREGROUND_THRESHOLDLOW(DISCRETIZE_GROUP + "/foreground/thresholdlow"); const QString DISCRETIZE_FOREGROUND_THRESHOLDHIGH(DISCRETIZE_GROUP + "/foreground/thresholdhigh"); const QString DISCRETIZE_HUE_THRESHOLDLOW(DISCRETIZE_GROUP + "/hue/thresholdlow"); const QString DISCRETIZE_HUE_THRESHOLDHIGH(DISCRETIZE_GROUP + "/hue/thresholdhigh"); const QString DISCRETIZE_SATURATION_THRESHOLDLOW(DISCRETIZE_GROUP + "/saturation/thresholdlow"); const QString DISCRETIZE_SATURATION_THRESHOLDHIGH(DISCRETIZE_GROUP + "/saturation/thresholdhigh"); const QString DISCRETIZE_VALUE_THRESHOLDLOW(DISCRETIZE_GROUP + "/value/thresholdlow"); const QString DISCRETIZE_VALUE_THRESHOLDHIGH(DISCRETIZE_GROUP + "/value/thresholdhigh"); const QString POINTSET_AXES_GROUP(ENGAUGE_GROUP_PREFIX + "/pointset/axes"); // group prefix for axes const QString POINTSET_AXES_POINTSHAPE(POINTSET_AXES_GROUP + "/pointshape"); const QString POINTSET_AXES_POINTSIZE(POINTSET_AXES_GROUP + "/pointsize"); const QString POINTSET_AXES_POINTLINESIZE(POINTSET_AXES_GROUP + "/pointlinesize"); const QString POINTSET_AXES_POINTLINECOLOR(POINTSET_AXES_GROUP + "/pointlinecolor"); const QString POINTSET_AXES_POINTINCOLOR(POINTSET_AXES_GROUP + "/pointincolor"); const QString POINTSET_AXES_LINESIZE(POINTSET_AXES_GROUP + "/linesize"); const QString POINTSET_AXES_LINECOLOR(POINTSET_AXES_GROUP + "/linecolor"); const QString POINTSET_AXES_LINECONNECTAS(POINTSET_AXES_GROUP + "/lineconnectas"); const QString POINTSET_SCALE_GROUP(ENGAUGE_GROUP_PREFIX + "/pointset/scale"); // group prefix for scale const QString POINTSET_SCALE_POINTSHAPE(POINTSET_SCALE_GROUP + "/pointshape"); const QString POINTSET_SCALE_POINTSIZE(POINTSET_SCALE_GROUP + "/pointsize"); const QString POINTSET_SCALE_POINTLINESIZE(POINTSET_SCALE_GROUP + "/pointlinesize"); const QString POINTSET_SCALE_POINTLINECOLOR(POINTSET_SCALE_GROUP + "/pointlinecolor"); const QString POINTSET_SCALE_POINTINCOLOR(POINTSET_SCALE_GROUP + "/pointincolor"); const QString POINTSET_SCALE_LINESIZE(POINTSET_SCALE_GROUP + "/linesize"); const QString POINTSET_SCALE_LINECOLOR(POINTSET_SCALE_GROUP + "/linecolor"); const QString POINTSET_SCALE_LINECONNECTAS(POINTSET_SCALE_GROUP + "/lineconnectas"); const QString POINTSET_CURVE_GROUP(ENGAUGE_GROUP_PREFIX + "/pointset/curve"); // group prefix for 0 or more curves const QString POINTSET_CURVE_POINTSHAPE(POINTSET_CURVE_GROUP + "/%1/pointshape"); const QString POINTSET_CURVE_POINTSIZE(POINTSET_CURVE_GROUP + "/%1/pointsize"); const QString POINTSET_CURVE_POINTLINESIZE(POINTSET_CURVE_GROUP + "/%1/pointlinesize"); const QString POINTSET_CURVE_POINTLINECOLOR(POINTSET_CURVE_GROUP + "/%1/pointlinecolor"); const QString POINTSET_CURVE_POINTINCOLOR(POINTSET_CURVE_GROUP + "/%1/pointincolor"); const QString POINTSET_CURVE_LINESIZE(POINTSET_CURVE_GROUP + "/%1/linesize"); const QString POINTSET_CURVE_LINECOLOR(POINTSET_CURVE_GROUP + "/%1/linecolor"); const QString POINTSET_CURVE_LINECONNECTAS(POINTSET_CURVE_GROUP + "/%1/lineconnectas"); const QString POINTSET_MEASURE_GROUP(ENGAUGE_GROUP_PREFIX + "/pointset/measure"); // group prefix for 0 or more measures const QString POINTSET_MEASURE_POINTSHAPE(POINTSET_MEASURE_GROUP + "/%1/pointshape"); const QString POINTSET_MEASURE_POINTSIZE(POINTSET_MEASURE_GROUP + "/%1/pointsize"); const QString POINTSET_MEASURE_POINTLINESIZE(POINTSET_MEASURE_GROUP + "/%1/pointlinesize"); const QString POINTSET_MEASURE_POINTLINECOLOR(POINTSET_MEASURE_GROUP + "/%1/pointlinecolor"); const QString POINTSET_MEASURE_POINTINCOLOR(POINTSET_MEASURE_GROUP + "/%1/pointincolor"); const QString POINTSET_MEASURE_LINESIZE(POINTSET_MEASURE_GROUP + "/%1/linesize"); const QString POINTSET_MEASURE_LINECOLOR(POINTSET_MEASURE_GROUP + "/%1/linecolor"); const QString POINTSET_MEASURE_LINECONNECTAS(POINTSET_MEASURE_GROUP + "/%1/lineconnectas"); const QString MRU_LIST_GROUP(ENGAUGE_GROUP_PREFIX + "/mru"); // group prefix for mru list const QString MRU_LIST_MAX(MRU_LIST_GROUP + "/max"); const QString MRU_LIST_DOCUMENTS_GROUP(MRU_LIST_GROUP + "/documents"); // subgroup prefix for 0 or more mru documents const QString MRU_LIST_DOCUMENTS(MRU_LIST_DOCUMENTS_GROUP + "/%1/document"); const QString SCANFORAXES_GROUP(ENGAUGE_GROUP_PREFIX + "/scanforaxes"); // group prefix for scan for axes const QString SCANFORAXES_LINECOLOR(ENGAUGE_GROUP_PREFIX + "/linecolor"); const QString SCANFORAXES_LINEWIDTH(ENGAUGE_GROUP_PREFIX + "/linewidth"); const QString SCANFORAXES_ENDPOINTKERNELWIDTH(ENGAUGE_GROUP_PREFIX + "/endpointkernelwidth"); const QString SCANFORAXES_SCANEFFECT(ENGAUGE_GROUP_PREFIX + "/scaneffect"); DefaultSettings::DefaultSettings() { DigitDebug::ctor(QString("settings ") + QString::number((ulong) this, 16)); initializeSettingsToFactoryDefaults(); if (!cmdSettingsReset) loadArchivedSettings(); } DefaultSettings::~DefaultSettings() { DigitDebug::dtor(QString("settings ") + QString::number((ulong) this, 16)); } void DefaultSettings::archiveSettings() { // in linux this archiver must be a local variable or else file is not saved. in // windows any calls to insertSearchPath or setPath either cancel cmdSettingsText, // or they cause multiple files to be written out (one per group) //QSettings archiver(cmdSettingsText ? QSettings::Ini : QSettings::Native); QString organization ("engauge"); // in linux systems a .ini file with this prefix is put into home directory QSettings archiver (organization); archiver.writeEntry(SESSIONS_SESSIONS, m_sessionsSettings.sessions); archiver.writeEntry(SESSIONS_COORDINATES, m_sessionsSettings.coordinates); archiver.writeEntry(SESSIONS_AXES, m_sessionsSettings.axes); archiver.writeEntry(SESSIONS_SCALEBAR, m_sessionsSettings.scaleBar); archiver.writeEntry(SESSIONS_CURVES, m_sessionsSettings.curves); archiver.writeEntry(SESSIONS_SEGMENTS, m_sessionsSettings.segments); archiver.writeEntry(SESSIONS_POINTMATCH, m_sessionsSettings.pointMatch); archiver.writeEntry(SESSIONS_MEASURES, m_sessionsSettings.measures); archiver.writeEntry(SESSIONS_DISCRETIZE, m_sessionsSettings.discretize); archiver.writeEntry(SESSIONS_GRIDREMOVAL, m_sessionsSettings.gridRemoval); archiver.writeEntry(SESSIONS_GRIDDISPLAY, m_sessionsSettings.gridDisplay); archiver.writeEntry(SESSIONS_EXPORTING, m_sessionsSettings.exporting); archiver.writeEntry(SESSIONS_VIEWSELECTIONS, m_sessionsSettings.viewSelections); archiver.writeEntry(SESSIONS_INITIALDIGITIZESTATE, m_sessionsSettings.initialDigitizeState); archiver.writeEntry(COORD_FRAME, m_coordSettings.frame); archiver.writeEntry(COORD_ORIGINRADIUS, m_coordSettings.originRadius); archiver.writeEntry(COORD_XTHETASCALE, m_coordSettings.xThetaScale); archiver.writeEntry(COORD_YRSCALE, m_coordSettings.yRScale); archiver.writeEntry(COORD_THETAUNITS, m_coordSettings.thetaUnits); archiver.writeEntry(EXPORT_POINTSSELECTION, m_exportSettings.pointsSelection); archiver.writeEntry(EXPORT_LAYOUT, m_exportSettings.layout); archiver.writeEntry(EXPORT_DELIMITERS, m_exportSettings.delimiters); archiver.writeEntry(EXPORT_HEADER, m_exportSettings.header); archiver.writeEntry(EXPORT_XLABEL, m_exportSettings.xLabel); archiver.writeEntry(EXPORT_THETALABEL, m_exportSettings.thetaLabel); archiver.writeEntry(VIEW_FILETOOLBAR, m_viewFileToolbar); archiver.writeEntry(VIEW_SELECTTOOLBAR, m_viewSelectToolbar); archiver.writeEntry(VIEW_IMAGESCALETOOLBAR, m_viewImageScaleToolbar); archiver.writeEntry(VIEW_DIGITIZECURVEPOINTSTOOLBAR, m_viewDigitizeCurvePointsToolbar); archiver.writeEntry(VIEW_DIGITIZEMEASUREPOINTSTOOLBAR, m_viewDigitizeMeasurePointsToolbar); archiver.writeEntry(VIEW_ZOOMTOOLBAR, m_viewZoomToolbar); archiver.writeEntry(VIEW_STATUSBAR, m_viewStatusBar); archiver.writeEntry(VIEW_POINTS, m_viewPoints); archiver.writeEntry(VIEW_BACKGROUND, m_viewBackground); archiver.writeEntry(VIEW_CURVEGEOMETRY, m_viewCurveGeometry); archiver.writeEntry(VIEW_MEASUREGEOMETRY, m_viewMeasureGeometry); archiver.writeEntry(MATH_POWERMOSTSIGMAX, m_powerMostSigMax); archiver.writeEntry(MATH_POWERMOSTSIGMIN, m_powerMostSigMin); archiver.writeEntry(MATH_DOUBLEMIN, m_doubleMin); archiver.writeEntry(MATH_MAXCOMMANDS, (int) m_maxCommands); archiver.writeEntry(WINDOW_CURVE_WIDTH, m_windowCurveSize.width()); archiver.writeEntry(WINDOW_CURVE_HEIGHT, m_windowCurveSize.height()); archiver.writeEntry(WINDOW_CURVE_X, m_windowCurvePosition.x()); archiver.writeEntry(WINDOW_CURVE_Y, m_windowCurvePosition.y()); archiver.writeEntry(WINDOW_HELP_WIDTH, m_windowHelpSize.width()); archiver.writeEntry(WINDOW_HELP_HEIGHT, m_windowHelpSize.height()); archiver.writeEntry(WINDOW_HELP_X, m_windowHelpPosition.x()); archiver.writeEntry(WINDOW_HELP_Y, m_windowHelpPosition.y()); archiver.writeEntry(WINDOW_MAIN_WIDTH, m_windowMainSize.width()); archiver.writeEntry(WINDOW_MAIN_HEIGHT, m_windowMainSize.height()); archiver.writeEntry(WINDOW_MAIN_X, m_windowMainPosition.x()); archiver.writeEntry(WINDOW_MAIN_Y, m_windowMainPosition.y()); archiver.writeEntry(WINDOW_MAIN_FONT_OVERRIDE, m_windowMainFontOverride); archiver.writeEntry(WINDOW_MAIN_FONT_NAME, m_windowMainFontName); archiver.writeEntry(WINDOW_MAIN_FONT_SIZE, m_windowMainFontSize); archiver.writeEntry(WINDOW_MAIN_COMBOBOXWIDTHMIN, m_windowMainComboBoxWidthMin); archiver.writeEntry(WINDOW_MEASURE_WIDTH, m_windowMeasureSize.width()); archiver.writeEntry(WINDOW_MEASURE_HEIGHT, m_windowMeasureSize.height()); archiver.writeEntry(WINDOW_MEASURE_X, m_windowMeasurePosition.x()); archiver.writeEntry(WINDOW_MEASURE_Y, m_windowMeasurePosition.y()); archiver.writeEntry(KEY_CLIPBOARD, m_keyClipboard); archiver.writeEntry(KEY_TREE, m_keyTree); archiver.writeEntry(KEY_VARIABLES, m_keyVariables); archiver.writeEntry(HANDLE_WIDTH, m_handleSize.width()); archiver.writeEntry(HANDLE_HEIGHT, m_handleSize.height()); archiver.writeEntry(SEGMENT_POINTMINSEPARATION, m_segmentPointMinSeparation); archiver.writeEntry(SEGMENT_MINPOINTS, m_segmentSettings.minPoints); archiver.writeEntry(SEGMENT_POINTDEFAULTSEPARATION, m_segmentSettings.pointSeparation); archiver.writeEntry(SEGMENT_FILLCORNERS, m_segmentSettings.fillCorners); archiver.writeEntry(SEGMENT_LINESIZE, m_segmentSettings.lineSize); archiver.writeEntry(SEGMENT_LINECOLOR, m_segmentSettings.lineColor); archiver.writeEntry(GRID_REMOVAL_GRIDSETX, m_gridRemovalSettings.gridMesh.gridSetX); archiver.writeEntry(GRID_REMOVAL_GRIDSETY, m_gridRemovalSettings.gridMesh.gridSetY); archiver.writeEntry(GRID_REMOVAL_THINTHICKNESS, m_gridRemovalSettings.thinThickness); archiver.writeEntry(GRID_REMOVAL_GRIDDISTANCE, m_gridRemovalSettings.gridDistance); archiver.writeEntry(GRID_REMOVAL_COLOR_RED, m_gridRemovalSettings.color.red()); archiver.writeEntry(GRID_REMOVAL_COLOR_GREEN, m_gridRemovalSettings.color.green()); archiver.writeEntry(GRID_REMOVAL_COLOR_BLUE, m_gridRemovalSettings.color.blue()); archiver.writeEntry(GRID_REMOVAL_GAPSEPARATION, m_gridRemovalSettings.gapSeparation); archiver.writeEntry(GRID_REMOVAL_FOREGROUNDTHRESHOLDLOW, m_gridRemovalSettings.foregroundThresholdLow); archiver.writeEntry(GRID_REMOVAL_FOREGROUNDTHRESHOLDHIGH, m_gridRemovalSettings.foregroundThresholdHigh); archiver.writeEntry(GRID_DISPLAY_GRIDSETX, m_gridDisplayGridSetX); archiver.writeEntry(GRID_DISPLAY_GRIDSETY, m_gridDisplayGridSetY); archiver.writeEntry(POINTMATCH_HIGHLIGHTDIAMETER, m_pointMatchHighlightDiameter); archiver.writeEntry(POINTMATCH_HIGHLIGHTLINESIZE, m_pointMatchHighlightLineSize); archiver.writeEntry(POINTMATCH_SEPARATIONDEFAULT, m_pointMatchSettings.pointSeparation); archiver.writeEntry(POINTMATCH_SIZEDEFAULT, m_pointMatchSettings.pointSize); archiver.writeEntry(POINTMATCH_ACCEPTEDCOLOR, m_pointMatchSettings.acceptedColor); archiver.writeEntry(POINTMATCH_REJECTEDCOLOR, m_pointMatchSettings.rejectedColor); archiver.writeEntry(POINTMATCH_CANDIDATECOLOR, m_pointMatchSettings.candidateColor); archiver.writeEntry(DISCRETIZE_METHODDEFAULT, m_discretizeSettings.discretizeMethod); archiver.writeEntry(DISCRETIZE_INTENSITY_THRESHOLDLOW, m_discretizeSettings.intensityThresholdLow); archiver.writeEntry(DISCRETIZE_INTENSITY_THRESHOLDHIGH, m_discretizeSettings.intensityThresholdHigh); archiver.writeEntry(DISCRETIZE_FOREGROUND_THRESHOLDLOW, m_discretizeSettings.foregroundThresholdLow); archiver.writeEntry(DISCRETIZE_FOREGROUND_THRESHOLDHIGH, m_discretizeSettings.foregroundThresholdHigh); archiver.writeEntry(DISCRETIZE_HUE_THRESHOLDLOW, m_discretizeSettings.hueThresholdLow); archiver.writeEntry(DISCRETIZE_HUE_THRESHOLDHIGH, m_discretizeSettings.hueThresholdHigh); archiver.writeEntry(DISCRETIZE_SATURATION_THRESHOLDLOW, m_discretizeSettings.saturationThresholdLow); archiver.writeEntry(DISCRETIZE_SATURATION_THRESHOLDHIGH, m_discretizeSettings.saturationThresholdHigh); archiver.writeEntry(DISCRETIZE_VALUE_THRESHOLDLOW, m_discretizeSettings.valueThresholdLow); archiver.writeEntry(DISCRETIZE_VALUE_THRESHOLDHIGH, m_discretizeSettings.valueThresholdHigh); archiver.writeEntry(POINTSET_AXES_POINTSHAPE, m_axesStyle.pointShape); archiver.writeEntry(POINTSET_AXES_POINTSIZE, m_axesStyle.pointSize); archiver.writeEntry(POINTSET_AXES_POINTLINESIZE, m_axesStyle.pointLineSize); archiver.writeEntry(POINTSET_AXES_POINTLINECOLOR, m_axesStyle.pointLineColor); archiver.writeEntry(POINTSET_AXES_POINTINCOLOR, m_axesStyle.pointInColor); archiver.writeEntry(POINTSET_AXES_LINESIZE, m_axesStyle.lineSize); archiver.writeEntry(POINTSET_AXES_LINECOLOR, m_axesStyle.lineColor); archiver.writeEntry(POINTSET_AXES_LINECONNECTAS, m_axesStyle.lineConnectAs); archiver.writeEntry(POINTSET_SCALE_POINTSHAPE, m_scaleStyle.pointShape); archiver.writeEntry(POINTSET_SCALE_POINTSIZE, m_scaleStyle.pointSize); archiver.writeEntry(POINTSET_SCALE_POINTLINESIZE, m_scaleStyle.pointLineSize); archiver.writeEntry(POINTSET_SCALE_POINTLINECOLOR, m_scaleStyle.pointLineColor); archiver.writeEntry(POINTSET_SCALE_POINTINCOLOR, m_scaleStyle.pointInColor); archiver.writeEntry(POINTSET_SCALE_LINESIZE, m_scaleStyle.lineSize); archiver.writeEntry(POINTSET_SCALE_LINECOLOR, m_scaleStyle.lineColor); archiver.writeEntry(POINTSET_SCALE_LINECONNECTAS, m_scaleStyle.lineConnectAs); int index; PointSetStyleList::iterator itr; for (index = 0, itr = m_curveStyles.begin(); itr != m_curveStyles.end(); ++itr, ++index) { archiver.writeEntry(POINTSET_CURVE_POINTSHAPE.arg(index), (*itr).pointShape); archiver.writeEntry(POINTSET_CURVE_POINTSIZE.arg(index), (*itr).pointSize); archiver.writeEntry(POINTSET_CURVE_POINTLINESIZE.arg(index), (*itr).pointLineSize); archiver.writeEntry(POINTSET_CURVE_POINTLINECOLOR.arg(index), (*itr).pointLineColor); archiver.writeEntry(POINTSET_CURVE_POINTINCOLOR.arg(index), (*itr).pointInColor); archiver.writeEntry(POINTSET_CURVE_LINESIZE.arg(index), (*itr).lineSize); archiver.writeEntry(POINTSET_CURVE_LINECOLOR.arg(index), (*itr).lineColor); archiver.writeEntry(POINTSET_CURVE_LINECONNECTAS.arg(index), (*itr).lineConnectAs); } for (index = 0, itr = m_measureStyles.begin(); itr != m_measureStyles.end(); ++itr, ++index) { archiver.writeEntry(POINTSET_MEASURE_POINTSHAPE.arg(index), (*itr).pointShape); archiver.writeEntry(POINTSET_MEASURE_POINTSIZE.arg(index), (*itr).pointSize); archiver.writeEntry(POINTSET_MEASURE_POINTLINESIZE.arg(index), (*itr).pointLineSize); archiver.writeEntry(POINTSET_MEASURE_POINTLINECOLOR.arg(index), (*itr).pointLineColor); archiver.writeEntry(POINTSET_MEASURE_POINTINCOLOR.arg(index), (*itr).pointInColor); archiver.writeEntry(POINTSET_MEASURE_LINESIZE.arg(index), (*itr).lineSize); archiver.writeEntry(POINTSET_MEASURE_LINECOLOR.arg(index), (*itr).lineColor); archiver.writeEntry(POINTSET_MEASURE_LINECONNECTAS.arg(index), (*itr).lineConnectAs); } archiver.writeEntry(MRU_LIST_MAX, m_mruMax); QStringList::iterator its; for (index = 0, its = m_mruDocuments.begin(); its != m_mruDocuments.end(); ++index, ++its) archiver.writeEntry(MRU_LIST_DOCUMENTS.arg(index), (*its)); archiver.writeEntry(SCANFORAXES_LINECOLOR, m_scanForAxesLineColor); archiver.writeEntry(SCANFORAXES_LINEWIDTH, m_scanForAxesLineWidth); archiver.writeEntry(SCANFORAXES_ENDPOINTKERNELWIDTH, m_scanForAxesEndpointKernelWidth); archiver.writeEntry(SCANFORAXES_SCANEFFECT, m_scanForAxesScanEffect); } PointSetStyle DefaultSettings::getAxesStyle() { return m_axesStyle; } int DefaultSettings::getComboBoxWidthMin() { return m_windowMainComboBoxWidthMin; } CoordSettings DefaultSettings::getCoordSettings() { return m_coordSettings; } PointSetStyle DefaultSettings::getCurveStyle(int pointSetIndex) { if (pointSetIndex >= (int) m_curveStyles.count()) { // invent defaults since entry does not exist for this index in the list PointSetStyle style; style.pointShape = (PointShape) (pointSetIndex % MaxPointShape); style.pointSize = PointSize4; style.pointLineSize = PointLineSize2; style.pointLineColor = DigitBlue; style.pointInColor = DigitBlue; style.lineSize = LineSize1; style.lineColor = DigitBlue; style.lineConnectAs = SingleValuedFunction; return style; } else return m_curveStyles [pointSetIndex]; } DiscretizeSettings DefaultSettings::getDiscretizeSettings() { return m_discretizeSettings; } double DefaultSettings::getDoubleMin() { return m_doubleMin; } ExportSettings DefaultSettings::getExportSettings() { return m_exportSettings; } GridSet DefaultSettings::getGridDisplayGridSetX() { return m_gridDisplayGridSetX; } GridSet DefaultSettings::getGridDisplayGridSetY() { return m_gridDisplayGridSetY; } GridRemovalSettings DefaultSettings::getGridRemovalSettings() { return m_gridRemovalSettings; } QSize DefaultSettings::getHandleSize() { return m_handleSize; } int DefaultSettings::getKeyClipboard() { return m_keyClipboard; } int DefaultSettings::getKeyTree() { return m_keyTree; } int DefaultSettings::getKeyVariables() { return m_keyVariables; } int DefaultSettings::getMaxCommands() { return m_maxCommands; } PointSetStyle DefaultSettings::getMeasureStyle(int pointSetIndex) { if (pointSetIndex >= (int) m_measureStyles.count()) { // invent defaults since entry does not exist for this index in the list PointSetStyle style; const int OFFSET = 1; // offset to prevent first curve and first measure from looking alike style.pointShape = (PointShape) ((pointSetIndex + OFFSET) % MaxPointShape); style.pointSize = PointSize4; style.pointLineSize = PointLineSize2; style.pointLineColor = DigitBlue; style.pointInColor = DigitBlue; style.lineSize = LineSize1; style.lineColor = DigitBlue; style.lineConnectAs = SingleValuedFunction; return style; } else return m_measureStyles [pointSetIndex]; } int DefaultSettings::getMruMax() { return m_mruMax; } QStringList DefaultSettings::getMruDocuments() { return m_mruDocuments; } int DefaultSettings::getPointMatchHighlightDiameter() { return m_pointMatchHighlightDiameter; } int DefaultSettings::getPointMatchHighlightLineSize() { return m_pointMatchHighlightLineSize; } PointMatchSettings DefaultSettings::getPointMatchSettings() { return m_pointMatchSettings; } int DefaultSettings::getPowerMostSigMax() { return m_powerMostSigMax; } int DefaultSettings::getPowerMostSigMin() { return m_powerMostSigMin; } PointSetStyle DefaultSettings::getScaleStyle() { return m_scaleStyle; } int DefaultSettings::getScanForAxesEndpointKernelWidth() { return m_scanForAxesEndpointKernelWidth; } Color DefaultSettings::getScanForAxesLineColor() { return m_scanForAxesLineColor; } int DefaultSettings::getScanForAxesLineWidth() { return m_scanForAxesLineWidth; } bool DefaultSettings::getScanForAxesScanEffect() { return m_scanForAxesScanEffect; } int DefaultSettings::getSegmentPointMinSeparation() { return m_segmentPointMinSeparation; } SegmentSettings DefaultSettings::getSegmentSettings() { return m_segmentSettings; } SessionsSettings DefaultSettings::getSessionsSettings() { return m_sessionsSettings; } BackgroundSelection DefaultSettings::getViewBackground() { return m_viewBackground; } bool DefaultSettings::getViewCurveGeometry() { return m_viewCurveGeometry; } bool DefaultSettings::getViewDigitizeCurvePointsToolbar() { return m_viewDigitizeCurvePointsToolbar; } bool DefaultSettings::getViewDigitizeMeasurePointsToolbar() { return m_viewDigitizeMeasurePointsToolbar; } bool DefaultSettings::getViewFileToolbar() { return m_viewFileToolbar; } bool DefaultSettings::getViewImageScaleToolbar() { return m_viewImageScaleToolbar; } bool DefaultSettings::getViewMeasureGeometry() { return m_viewMeasureGeometry; } ViewPointSelection DefaultSettings::getViewPoints() { return m_viewPoints; } bool DefaultSettings::getViewSelectToolbar() { return m_viewSelectToolbar; } bool DefaultSettings::getViewStatusBar() { return m_viewStatusBar; } bool DefaultSettings::getViewZoomToolbar() { return m_viewZoomToolbar; } QPoint DefaultSettings::getWindowCurvePosition() { return m_windowCurvePosition; } QSize DefaultSettings::getWindowCurveSize() { return m_windowCurveSize; } QPoint DefaultSettings::getWindowHelpPosition() { return m_windowHelpPosition; } QSize DefaultSettings::getWindowHelpSize() { return m_windowHelpSize; } QString DefaultSettings::getWindowMainFontName() { return m_windowMainFontName; } bool DefaultSettings::getWindowMainFontOverride() { return m_windowMainFontOverride; } int DefaultSettings::getWindowMainFontSize() { return m_windowMainFontSize; } QPoint DefaultSettings::getWindowMainPosition() { return m_windowMainPosition; } QSize DefaultSettings::getWindowMainSize() { return m_windowMainSize; } QPoint DefaultSettings::getWindowMeasurePosition() { return m_windowMeasurePosition; } QSize DefaultSettings::getWindowMeasureSize() { return m_windowMeasureSize; } void DefaultSettings::initializeSettingsToFactoryDefaults() { // default for session settings is to not save them since that is easier for // beginners to understand. advanced users, who will most benefit from saved // settings, must turn on this feature m_sessionsSettings.sessions = true; m_sessionsSettings.coordinates = false; m_sessionsSettings.axes = false; m_sessionsSettings.scaleBar = false; m_sessionsSettings.curves = false; m_sessionsSettings.segments = false; m_sessionsSettings.pointMatch = false; m_sessionsSettings.measures = false; m_sessionsSettings.discretize = false; m_sessionsSettings.gridRemoval = false; m_sessionsSettings.gridDisplay = false; m_sessionsSettings.exporting = false; m_sessionsSettings.viewSelections = false; // first document will start up in segment state. this will gently push the user towards // using the most efficient method of digitizing, which is what the user really cares about. // the user will be reminded elsewhere that axes points must be generated m_sessionsSettings.initialDigitizeState = SegmentState; m_coordSettings.frame = Cartesian; m_coordSettings.originRadius = 0.0; m_coordSettings.xThetaScale = Linear; m_coordSettings.yRScale = Linear; m_coordSettings.thetaUnits = ThetaDegrees; m_exportSettings.pointsSelection = XFromAllCurves; m_exportSettings.layout = AllCurvesOnEachLine; m_exportSettings.delimiters = Commas; m_exportSettings.header = HeaderSimple; m_exportSettings.xLabel = "x"; m_exportSettings.thetaLabel = "theta"; m_viewFileToolbar = true; m_viewSelectToolbar = true; m_viewImageScaleToolbar = true; m_viewDigitizeCurvePointsToolbar = true; m_viewDigitizeMeasurePointsToolbar = true; m_viewZoomToolbar = true; m_viewStatusBar = true; m_viewPoints = ViewAllPoints; m_viewBackground = ProcessedImage; m_viewCurveGeometry = false; m_viewMeasureGeometry = false; m_powerMostSigMax = 6; m_powerMostSigMin = -4; m_doubleMin = 1.0e-12; m_maxCommands = 100; // initial width+x should be less than 800 pixels to fit low resolution displays, and // initial height+y should be less than 640 pixels to fit low resolution displays m_windowCurveSize = QSize(180, 280); m_windowCurvePosition = QPoint(40, 40); // initial width+x should be less than 800 pixels to fit low resolution displays, and // initial height+y should be less than 640 pixels to fit low resolution displays m_windowHelpSize = QSize(640, 700); m_windowHelpPosition = QPoint(40, 40); // initial width+x should be less than 800 pixels to fit low resolution displays, and // initial height+y should be less than 640 pixels to fit low resolution displays m_windowMainSize = QSize(700, 500); m_windowMainPosition = QPoint(40, 40); m_windowMainFontOverride = false; m_windowMainFontName = "Helvetica"; m_windowMainFontSize = 12; // initial width+x should be less than 800 pixels to fit low resolution displays, and // initial height+y should be less than 640 pixels to fit low resolution displays m_windowMeasureSize = QSize(180, 280); m_windowMeasurePosition = QPoint(40, 40); m_keyClipboard = Qt::Key_C; m_keyTree = Qt::Key_T; m_keyVariables = Qt::Key_V; m_handleSize = QSize(6, 6); m_segmentPointMinSeparation = 4; m_segmentSettings.minPoints = 2; m_segmentSettings.pointSeparation = 10; m_segmentSettings.fillCorners = false; // false for smoothly curving graphs, true for piecewise linear graphs m_segmentSettings.lineSize = LineSize3; m_segmentSettings.lineColor = DigitGreen; m_gridRemovalSettings.removeThinLines = false; m_gridRemovalSettings.thinThickness = 2.0; // two pixels thick m_gridRemovalSettings.removeGridlines = false; m_gridRemovalSettings.gridMesh.gridSetX = AllButStep; m_gridRemovalSettings.gridMesh.gridSetY = AllButStep; m_gridRemovalSettings.gridDistance = 4.0; // two pixels on either side of the infinitely thin gridline m_gridRemovalSettings.removeColor = false; m_gridRemovalSettings.color = Qt::green; // do NOT use black, or black-on-white images will turn completely white m_gridRemovalSettings.foregroundThresholdLow = 0; // same as corresponding discretize value below m_gridRemovalSettings.foregroundThresholdHigh = 10; // same as corresponding discretize value below m_gridRemovalSettings.gapSeparation = 6.0; // greater than RemovalThinThickness times two m_gridDisplayGridSetX = AllButStep; m_gridDisplayGridSetY = AllButStep; m_pointMatchHighlightDiameter = 26; m_pointMatchHighlightLineSize = 3; m_pointMatchSettings.pointSeparation = 15; m_pointMatchSettings.pointSize = 60; m_pointMatchSettings.acceptedColor = DigitGreen; m_pointMatchSettings.rejectedColor = DigitRed; m_pointMatchSettings.candidateColor = DigitBlue; // synchronize with DigitDoc::openDocument m_discretizeSettings.discretizeMethod = DiscretizeIntensity; m_discretizeSettings.intensityThresholdLow = 0; m_discretizeSettings.intensityThresholdHigh = 50; m_discretizeSettings.foregroundThresholdLow = 0; // same as corresponding grid removal value above m_discretizeSettings.foregroundThresholdHigh = 10; // same as corresponding grid removal value above m_discretizeSettings.hueThresholdLow = 180; m_discretizeSettings.hueThresholdHigh = 360; m_discretizeSettings.saturationThresholdLow = 50; m_discretizeSettings.saturationThresholdHigh = 100; m_discretizeSettings.valueThresholdLow = 0; m_discretizeSettings.valueThresholdHigh = 50; m_axesStyle.pointShape = Cross; m_axesStyle.pointSize = PointSize4; m_axesStyle.pointLineSize = PointLineSize2; m_axesStyle.pointLineColor = DigitRed; m_axesStyle.pointInColor = DigitRed; m_axesStyle.lineSize = LineSize1; m_axesStyle.lineColor = DigitTransparent; m_axesStyle.lineConnectAs = SingleValuedFunction; m_scaleStyle.pointShape = Cross; m_scaleStyle.pointSize = PointSize4; m_scaleStyle.pointLineSize = PointLineSize2; m_scaleStyle.pointLineColor = DigitMagenta; m_scaleStyle.pointInColor = DigitMagenta; m_scaleStyle.lineSize = LineSize1; m_scaleStyle.lineColor = DigitMagenta; m_scaleStyle.lineConnectAs = SingleValuedFunction; // m_curveStyles defaults are not created here since the number that will be needed in the // future is unknown at startup. all available curve styles are loaded from archival // during startup, and then more are generated by getCurveStyle if necessary // m_measureStyles defaults are not created here since the number that will be needed in the // future is unknown at startup. all available measure styles are loaded from archival // during startup, and then more are generated by getMeasureStyle if necessary // most recently used document list starts out empty m_mruMax = 4; m_windowMainComboBoxWidthMin = 120; m_scanForAxesLineColor = DigitCyan; m_scanForAxesLineWidth = 2; // same width as convolution performed to recognize axes m_scanForAxesEndpointKernelWidth = 40; // substantially bigger than 2, which would pick up the first // on-pixel adjacent to an off-pixel, but smaller than the // width of a realistic axis line. an endpoint is expected to // have width/2 successive white or black pixels, followed by width/2 // successive black or white pixels m_scanForAxesScanEffect = true; // enable scan effect so user can see that program is working, how // it is working, and when it is done working. penalty is that // redraws needed for scan effect make algorithm slow on some computers } void DefaultSettings::loadArchivedSettings() { // in linux this archiver must be a local variable or else file is not saved. in // windows any calls to insertSearchPath or setPath either cancel cmdSettingsText, // or they cause multiple files to be written out (one per group) QSettings archiver; m_sessionsSettings.sessions = archiver.readBoolEntry(SESSIONS_SESSIONS, m_sessionsSettings.sessions); if (m_sessionsSettings.sessions) { m_sessionsSettings.coordinates = archiver.readBoolEntry(SESSIONS_COORDINATES, m_sessionsSettings.coordinates); m_sessionsSettings.axes = archiver.readBoolEntry(SESSIONS_AXES, m_sessionsSettings.axes); m_sessionsSettings.scaleBar = archiver.readBoolEntry(SESSIONS_SCALEBAR, m_sessionsSettings.scaleBar); m_sessionsSettings.curves = archiver.readBoolEntry(SESSIONS_CURVES, m_sessionsSettings.curves); m_sessionsSettings.segments = archiver.readBoolEntry(SESSIONS_SEGMENTS, m_sessionsSettings.segments); m_sessionsSettings.pointMatch = archiver.readBoolEntry(SESSIONS_POINTMATCH, m_sessionsSettings.pointMatch); m_sessionsSettings.measures = archiver.readBoolEntry(SESSIONS_MEASURES, m_sessionsSettings.measures); m_sessionsSettings.discretize = archiver.readBoolEntry(SESSIONS_DISCRETIZE, m_sessionsSettings.discretize); m_sessionsSettings.gridRemoval = archiver.readBoolEntry(SESSIONS_GRIDREMOVAL, m_sessionsSettings.gridRemoval); m_sessionsSettings.gridDisplay = archiver.readBoolEntry(SESSIONS_GRIDDISPLAY, m_sessionsSettings.gridDisplay); m_sessionsSettings.exporting = archiver.readBoolEntry(SESSIONS_EXPORTING, m_sessionsSettings.exporting); m_sessionsSettings.viewSelections = archiver.readBoolEntry(SESSIONS_VIEWSELECTIONS, m_sessionsSettings.viewSelections); m_sessionsSettings.initialDigitizeState = (DigitizeState) archiver.readNumEntry(SESSIONS_INITIALDIGITIZESTATE, m_sessionsSettings.initialDigitizeState); } if (m_sessionsSettings.sessions && m_sessionsSettings.coordinates) { m_coordSettings.frame = (ReferenceFrame) archiver.readNumEntry(COORD_FRAME, m_coordSettings.frame); m_coordSettings.originRadius = archiver.readDoubleEntry(COORD_ORIGINRADIUS, m_coordSettings.originRadius); m_coordSettings.xThetaScale = (Scale) archiver.readNumEntry(COORD_XTHETASCALE, m_coordSettings.xThetaScale); m_coordSettings.yRScale = (Scale) archiver.readNumEntry(COORD_YRSCALE, m_coordSettings.yRScale); m_coordSettings.thetaUnits = (ThetaUnits) archiver.readNumEntry(COORD_THETAUNITS, m_coordSettings.thetaUnits); } if (m_sessionsSettings.sessions && m_sessionsSettings.exporting) { m_exportSettings.pointsSelection = (ExportPointsSelection) archiver.readNumEntry(EXPORT_POINTSSELECTION, m_exportSettings.pointsSelection); m_exportSettings.layout = (ExportLayout) archiver.readNumEntry(EXPORT_LAYOUT, m_exportSettings.layout); m_exportSettings.delimiters = (ExportDelimiters) archiver.readNumEntry(EXPORT_DELIMITERS, m_exportSettings.delimiters); m_exportSettings.header = (ExportHeader) archiver.readNumEntry(EXPORT_HEADER, m_exportSettings.header); m_exportSettings.xLabel = archiver.readEntry(EXPORT_XLABEL, m_exportSettings.xLabel); m_exportSettings.thetaLabel = archiver.readEntry(EXPORT_THETALABEL, m_exportSettings.thetaLabel); } if (m_sessionsSettings.sessions && m_sessionsSettings.viewSelections) { m_viewFileToolbar = archiver.readBoolEntry(VIEW_FILETOOLBAR, m_viewFileToolbar); m_viewSelectToolbar = archiver.readBoolEntry(VIEW_SELECTTOOLBAR, m_viewSelectToolbar); m_viewImageScaleToolbar = archiver.readBoolEntry(VIEW_IMAGESCALETOOLBAR, m_viewImageScaleToolbar); m_viewDigitizeCurvePointsToolbar = archiver.readBoolEntry(VIEW_DIGITIZECURVEPOINTSTOOLBAR, m_viewDigitizeCurvePointsToolbar); m_viewDigitizeMeasurePointsToolbar = archiver.readBoolEntry(VIEW_DIGITIZEMEASUREPOINTSTOOLBAR, m_viewDigitizeMeasurePointsToolbar); m_viewZoomToolbar = archiver.readBoolEntry(VIEW_ZOOMTOOLBAR, m_viewZoomToolbar); m_viewStatusBar = archiver.readBoolEntry(VIEW_STATUSBAR, m_viewStatusBar); m_viewPoints = (ViewPointSelection) archiver.readNumEntry(VIEW_POINTS, m_viewPoints); m_viewBackground = (BackgroundSelection) archiver.readNumEntry(VIEW_BACKGROUND, m_viewBackground); m_viewCurveGeometry = archiver.readBoolEntry(VIEW_CURVEGEOMETRY, m_viewCurveGeometry); m_viewMeasureGeometry = archiver.readBoolEntry(VIEW_MEASUREGEOMETRY, m_viewMeasureGeometry); } m_powerMostSigMax = archiver.readNumEntry(MATH_POWERMOSTSIGMAX, m_powerMostSigMax); m_powerMostSigMin = archiver.readNumEntry(MATH_POWERMOSTSIGMIN, m_powerMostSigMin); m_doubleMin = archiver.readDoubleEntry(MATH_DOUBLEMIN, m_doubleMin); m_maxCommands = archiver.readNumEntry(MATH_MAXCOMMANDS, m_maxCommands); m_windowCurveSize.setWidth(archiver.readNumEntry(WINDOW_CURVE_WIDTH, m_windowCurveSize.width())); m_windowCurveSize.setHeight(archiver.readNumEntry(WINDOW_CURVE_HEIGHT, m_windowCurveSize.height())); m_windowCurvePosition.setX(archiver.readNumEntry(WINDOW_CURVE_X, m_windowCurvePosition.x())); m_windowCurvePosition.setY(archiver.readNumEntry(WINDOW_CURVE_Y, m_windowCurvePosition.y())); m_windowHelpSize.setWidth(archiver.readNumEntry(WINDOW_HELP_WIDTH, m_windowHelpSize.width())); m_windowHelpSize.setHeight(archiver.readNumEntry(WINDOW_HELP_HEIGHT, m_windowHelpSize.height())); m_windowHelpPosition.setX(archiver.readNumEntry(WINDOW_HELP_X, m_windowHelpPosition.x())); m_windowHelpPosition.setY(archiver.readNumEntry(WINDOW_HELP_Y, m_windowHelpPosition.y())); m_windowMainSize.setWidth(archiver.readNumEntry(WINDOW_MAIN_WIDTH, m_windowMainSize.width())); m_windowMainSize.setHeight(archiver.readNumEntry(WINDOW_MAIN_HEIGHT, m_windowMainSize.height())); m_windowMainPosition.setX(archiver.readNumEntry(WINDOW_MAIN_X, m_windowMainPosition.x())); m_windowMainPosition.setY(archiver.readNumEntry(WINDOW_MAIN_Y, m_windowMainPosition.y())); m_windowMainFontOverride = archiver.readBoolEntry(WINDOW_MAIN_FONT_OVERRIDE, m_windowMainFontOverride); m_windowMainFontName = archiver.readEntry(WINDOW_MAIN_FONT_NAME, m_windowMainFontName); m_windowMainFontSize = archiver.readNumEntry(WINDOW_MAIN_FONT_SIZE, m_windowMainFontSize); m_windowMainComboBoxWidthMin = archiver.readNumEntry(WINDOW_MAIN_COMBOBOXWIDTHMIN, m_windowMainComboBoxWidthMin); m_windowMeasureSize.setWidth(archiver.readNumEntry(WINDOW_MEASURE_WIDTH, m_windowMeasureSize.width())); m_windowMeasureSize.setHeight(archiver.readNumEntry(WINDOW_MEASURE_HEIGHT, m_windowMeasureSize.height())); m_windowMeasurePosition.setX(archiver.readNumEntry(WINDOW_MEASURE_X, m_windowMeasurePosition.x())); m_windowMeasurePosition.setY(archiver.readNumEntry(WINDOW_MEASURE_Y, m_windowMeasurePosition.y())); m_keyClipboard = archiver.readNumEntry(KEY_CLIPBOARD, m_keyClipboard); m_keyTree = archiver.readNumEntry(KEY_TREE, m_keyTree); m_keyVariables = archiver.readNumEntry(KEY_VARIABLES, m_keyVariables); m_handleSize.setWidth(archiver.readNumEntry(HANDLE_WIDTH, m_handleSize.width())); m_handleSize.setHeight(archiver.readNumEntry(HANDLE_HEIGHT, m_handleSize.height())); if (m_sessionsSettings.sessions && m_sessionsSettings.segments) { m_segmentPointMinSeparation = archiver.readNumEntry(SEGMENT_POINTMINSEPARATION, m_segmentPointMinSeparation); m_segmentSettings.minPoints = archiver.readNumEntry(SEGMENT_MINPOINTS, m_segmentSettings.minPoints); m_segmentSettings.pointSeparation = archiver.readNumEntry(SEGMENT_POINTDEFAULTSEPARATION, m_segmentSettings.pointSeparation); m_segmentSettings.fillCorners = archiver.readBoolEntry(SEGMENT_FILLCORNERS, m_segmentSettings.fillCorners); m_segmentSettings.lineSize = (LineSize) archiver.readNumEntry(SEGMENT_LINESIZE, m_segmentSettings.lineSize); m_segmentSettings.lineColor = (Color) archiver.readNumEntry(SEGMENT_LINECOLOR, m_segmentSettings.lineColor); } if (m_sessionsSettings.sessions && m_sessionsSettings.gridRemoval) { m_gridRemovalSettings.removeThinLines = archiver.readBoolEntry(GRID_REMOVAL_REMOVETHINLINES, m_gridRemovalSettings.removeThinLines); m_gridRemovalSettings.thinThickness = archiver.readDoubleEntry(GRID_REMOVAL_THINTHICKNESS, m_gridRemovalSettings.thinThickness); m_gridRemovalSettings.removeGridlines = archiver.readBoolEntry(GRID_REMOVAL_REMOVEGRIDLINES, m_gridRemovalSettings.removeGridlines); m_gridRemovalSettings.gridMesh.gridSetX = (GridSet) archiver.readNumEntry(GRID_REMOVAL_GRIDSETX, m_gridRemovalSettings.gridMesh.gridSetX); m_gridRemovalSettings.gridMesh.gridSetY = (GridSet) archiver.readNumEntry(GRID_REMOVAL_GRIDSETY, m_gridRemovalSettings.gridMesh.gridSetY); m_gridRemovalSettings.gridDistance = archiver.readDoubleEntry(GRID_REMOVAL_GRIDDISTANCE, m_gridRemovalSettings.gridDistance); m_gridRemovalSettings.removeColor = archiver.readBoolEntry(GRID_REMOVAL_REMOVECOLOR, m_gridRemovalSettings.removeColor); int r = archiver.readNumEntry(GRID_REMOVAL_COLOR_RED, m_gridRemovalSettings.color.red()); int g = archiver.readNumEntry(GRID_REMOVAL_COLOR_GREEN, m_gridRemovalSettings.color.green()); int b = archiver.readNumEntry(GRID_REMOVAL_COLOR_BLUE, m_gridRemovalSettings.color.blue()); m_gridRemovalSettings.color = QColor(r, g, b); m_gridRemovalSettings.foregroundThresholdLow = archiver.readNumEntry(GRID_REMOVAL_FOREGROUNDTHRESHOLDLOW, m_gridRemovalSettings.foregroundThresholdLow); m_gridRemovalSettings.foregroundThresholdHigh = archiver.readNumEntry(GRID_REMOVAL_FOREGROUNDTHRESHOLDHIGH, m_gridRemovalSettings.foregroundThresholdHigh); m_gridRemovalSettings.gapSeparation = archiver.readDoubleEntry(GRID_REMOVAL_GAPSEPARATION, m_gridRemovalSettings.gapSeparation); } if (m_sessionsSettings.sessions && m_sessionsSettings.gridDisplay) { m_gridDisplayGridSetX = (GridSet) archiver.readNumEntry(GRID_DISPLAY_GRIDSETX, m_gridDisplayGridSetX); m_gridDisplayGridSetY = (GridSet) archiver.readNumEntry(GRID_DISPLAY_GRIDSETY, m_gridDisplayGridSetY); } if (m_sessionsSettings.sessions && m_sessionsSettings.pointMatch) { m_pointMatchHighlightDiameter = archiver.readNumEntry(POINTMATCH_HIGHLIGHTDIAMETER, m_pointMatchHighlightDiameter); m_pointMatchHighlightLineSize = archiver.readNumEntry(POINTMATCH_HIGHLIGHTLINESIZE, m_pointMatchHighlightLineSize); m_pointMatchSettings.pointSeparation = archiver.readNumEntry(POINTMATCH_SEPARATIONDEFAULT, m_pointMatchSettings.pointSeparation); m_pointMatchSettings.pointSize = archiver.readNumEntry(POINTMATCH_SIZEDEFAULT, m_pointMatchSettings.pointSize); m_pointMatchSettings.acceptedColor = (Color) archiver.readNumEntry(POINTMATCH_ACCEPTEDCOLOR, m_pointMatchSettings.acceptedColor); m_pointMatchSettings.rejectedColor = (Color) archiver.readNumEntry(POINTMATCH_REJECTEDCOLOR, m_pointMatchSettings.rejectedColor); m_pointMatchSettings.candidateColor = (Color) archiver.readNumEntry(POINTMATCH_CANDIDATECOLOR, m_pointMatchSettings.candidateColor); } if (m_sessionsSettings.sessions && m_sessionsSettings.discretize) { m_discretizeSettings.discretizeMethod = (DiscretizeMethod) archiver.readNumEntry(DISCRETIZE_METHODDEFAULT, m_discretizeSettings.discretizeMethod); m_discretizeSettings.intensityThresholdLow = archiver.readNumEntry(DISCRETIZE_INTENSITY_THRESHOLDLOW, m_discretizeSettings.intensityThresholdLow); m_discretizeSettings.intensityThresholdHigh = archiver.readNumEntry(DISCRETIZE_INTENSITY_THRESHOLDHIGH, m_discretizeSettings.intensityThresholdHigh); m_discretizeSettings.foregroundThresholdLow = archiver.readNumEntry(DISCRETIZE_FOREGROUND_THRESHOLDLOW, m_discretizeSettings.foregroundThresholdLow); m_discretizeSettings.foregroundThresholdHigh = archiver.readNumEntry(DISCRETIZE_FOREGROUND_THRESHOLDHIGH, m_discretizeSettings.foregroundThresholdHigh); m_discretizeSettings.hueThresholdLow = archiver.readNumEntry(DISCRETIZE_HUE_THRESHOLDLOW, m_discretizeSettings.hueThresholdLow); m_discretizeSettings.hueThresholdHigh = archiver.readNumEntry(DISCRETIZE_HUE_THRESHOLDHIGH, m_discretizeSettings.hueThresholdHigh); m_discretizeSettings.saturationThresholdLow = archiver.readNumEntry(DISCRETIZE_SATURATION_THRESHOLDLOW, m_discretizeSettings.saturationThresholdLow); m_discretizeSettings.saturationThresholdHigh = archiver.readNumEntry(DISCRETIZE_SATURATION_THRESHOLDHIGH, m_discretizeSettings.saturationThresholdHigh); m_discretizeSettings.valueThresholdLow = archiver.readNumEntry(DISCRETIZE_VALUE_THRESHOLDLOW, m_discretizeSettings.valueThresholdLow); m_discretizeSettings.valueThresholdHigh = archiver.readNumEntry(DISCRETIZE_VALUE_THRESHOLDHIGH, m_discretizeSettings.valueThresholdHigh); } if (m_sessionsSettings.sessions && m_sessionsSettings.axes) { loadPointSetStyle(m_axesStyle, archiver, POINTSET_AXES_POINTSHAPE, POINTSET_AXES_POINTSIZE, POINTSET_AXES_POINTLINESIZE, POINTSET_AXES_POINTLINECOLOR, POINTSET_AXES_POINTINCOLOR, POINTSET_AXES_LINESIZE, POINTSET_AXES_LINECOLOR, POINTSET_AXES_LINECONNECTAS); } if (m_sessionsSettings.sessions && m_sessionsSettings.scaleBar) { loadPointSetStyle(m_scaleStyle, archiver, POINTSET_SCALE_POINTSHAPE, POINTSET_SCALE_POINTSIZE, POINTSET_SCALE_POINTLINESIZE, POINTSET_SCALE_POINTLINECOLOR, POINTSET_SCALE_POINTINCOLOR, POINTSET_SCALE_LINESIZE, POINTSET_SCALE_LINECOLOR, POINTSET_SCALE_LINECONNECTAS); } if (m_sessionsSettings.sessions && m_sessionsSettings.curves) { loadPointSetStyles(true, m_curveStyles, archiver, POINTSET_CURVE_GROUP, POINTSET_CURVE_POINTSHAPE, POINTSET_CURVE_POINTSIZE, POINTSET_CURVE_POINTLINESIZE, POINTSET_CURVE_POINTLINECOLOR, POINTSET_CURVE_POINTINCOLOR, POINTSET_CURVE_LINESIZE, POINTSET_CURVE_LINECOLOR, POINTSET_CURVE_LINECONNECTAS); } if (m_sessionsSettings.sessions && m_sessionsSettings.measures) { loadPointSetStyles(false, m_measureStyles, archiver, POINTSET_MEASURE_GROUP, POINTSET_MEASURE_POINTSHAPE, POINTSET_MEASURE_POINTSIZE, POINTSET_MEASURE_POINTLINESIZE, POINTSET_MEASURE_POINTLINECOLOR, POINTSET_MEASURE_POINTINCOLOR, POINTSET_MEASURE_LINESIZE, POINTSET_MEASURE_LINECOLOR, POINTSET_MEASURE_LINECONNECTAS); } m_mruMax = archiver.readNumEntry(MRU_LIST_MAX, m_mruMax); loadMruDocuments(archiver); m_scanForAxesLineColor = (Color) archiver.readNumEntry(SCANFORAXES_LINECOLOR, m_scanForAxesLineColor); m_scanForAxesLineWidth = archiver.readNumEntry(SCANFORAXES_LINEWIDTH, m_scanForAxesLineWidth); m_scanForAxesEndpointKernelWidth = archiver.readNumEntry(SCANFORAXES_ENDPOINTKERNELWIDTH, m_scanForAxesEndpointKernelWidth); m_scanForAxesScanEffect = archiver.readBoolEntry(SCANFORAXES_SCANEFFECT, m_scanForAxesScanEffect); } void DefaultSettings::loadMruDocuments(QSettings& rArchiver) { QStringList subkeyList = rArchiver.subkeyList(MRU_LIST_DOCUMENTS_GROUP); QStringList::Iterator itr; int indexExpected = 0; for (itr = subkeyList.begin(); itr != subkeyList.end(); ++itr) { // convert subkey into numeric index. subkey must equal the expected value or else // entry is considered corrupted bool ok; int indexFound = (*itr).toInt(&ok); if (ok && (indexExpected++ == indexFound)) { QString doc = rArchiver.readEntry(MRU_LIST_DOCUMENTS.arg(indexFound)); m_mruDocuments.append(doc); } } } void DefaultSettings::loadPointSetStyle(PointSetStyle& rStyle, QSettings& rArchiver, const QString keyPointShape, const QString keyPointSize, const QString keyPointLineSize, const QString keyPointLineColor, const QString keyPointInColor, const QString keyLineSize, const QString keyLineColor, const QString keyLineConnectAs) { rStyle.pointShape = (PointShape) rArchiver.readNumEntry(keyPointShape, rStyle.pointShape); rStyle.pointSize = (PointSize) rArchiver.readNumEntry(keyPointSize, rStyle.pointSize); rStyle.pointLineSize = (PointLineSize) rArchiver.readNumEntry(keyPointLineSize, rStyle.pointLineSize); rStyle.pointLineColor = (Color) rArchiver.readNumEntry(keyPointLineColor, rStyle.pointLineColor); rStyle.pointInColor = (Color) rArchiver.readNumEntry(keyPointInColor, rStyle.pointInColor); rStyle.lineSize = (LineSize) rArchiver.readNumEntry(keyLineSize, rStyle.lineSize); rStyle.lineColor = (Color) rArchiver.readNumEntry(keyLineColor, rStyle.lineColor); rStyle.lineConnectAs = (LineConnectAs) rArchiver.readNumEntry(keyLineConnectAs, rStyle.lineConnectAs); } void DefaultSettings::loadPointSetStyles(bool isCurve, PointSetStyleList& rStyleList, QSettings& rArchiver, const QString keyGroupPrefix, const QString keyPointShape, const QString keyPointSize, const QString keyPointLineSize, const QString keyPointLineColor, const QString keyPointInColor, const QString keyLineSize, const QString keyLineColor, const QString keyLineConnectAs) { QStringList subkeyList = rArchiver.subkeyList(keyGroupPrefix); QStringList::Iterator itr; int indexExpected = 0; for (itr = subkeyList.begin(); itr != subkeyList.end(); ++itr) { // convert subkey into numeric index. subkey must equal the expected value or else // entry is considered corrupted bool ok; int indexFound = (*itr).toInt(&ok); if (ok && (indexExpected++ == indexFound)) { PointSetStyle style; if (isCurve) style = getCurveStyle(indexFound); else style = getMeasureStyle(indexFound); loadPointSetStyle(style, rArchiver, QString(keyPointShape).arg(indexFound), QString(keyPointSize).arg(indexFound), QString(keyPointLineSize).arg(indexFound), QString(keyPointLineColor).arg(indexFound), QString(keyPointInColor).arg(indexFound), QString(keyLineSize).arg(indexFound), QString(keyLineColor).arg(indexFound), QString(keyLineConnectAs).arg(indexFound)); rStyleList.append(style); } } } void DefaultSettings::setComboBoxWidthMin(int comboBoxWidthMin) { m_windowMainComboBoxWidthMin = comboBoxWidthMin; } void DefaultSettings::setCoordSettings(CoordSettings coord) { m_coordSettings.frame = coord.frame; m_coordSettings.originRadius = coord.originRadius; m_coordSettings.xThetaScale = coord.xThetaScale; m_coordSettings.yRScale = coord.yRScale; m_coordSettings.thetaUnits = coord.thetaUnits; } void DefaultSettings::setCurveStyles(const PointSetStyleList& rStyles) { m_curveStyles = rStyles; } void DefaultSettings::setDiscretizeSettings(DiscretizeSettings discretize) { m_discretizeSettings = discretize; } void DefaultSettings::setExportSettings(ExportSettings exportSettings) { m_exportSettings.pointsSelection = exportSettings.pointsSelection; m_exportSettings.layout = exportSettings.layout; m_exportSettings.delimiters = exportSettings.delimiters; m_exportSettings.header = exportSettings.header; m_exportSettings.xLabel = exportSettings.xLabel; m_exportSettings.thetaLabel = exportSettings.thetaLabel; } void DefaultSettings::setGridRemovalSettings(GridRemovalSettings grid) { m_gridRemovalSettings = grid; } void DefaultSettings::setGridDisplaySettings(GridMeshSettings grid) { m_gridDisplayGridSetX = grid.gridSetX; m_gridDisplayGridSetY = grid.gridSetY; } void DefaultSettings::setMeasureStyles(const PointSetStyleList& rStyles) { m_measureStyles = rStyles; } void DefaultSettings::setMruDocuments(const QStringList& rMruDocuments) { m_mruDocuments = rMruDocuments; } void DefaultSettings::setViewBackground(BackgroundSelection view) { m_viewBackground = view; } void DefaultSettings::setViewCurveGeometry(bool view) { m_viewCurveGeometry = view; } void DefaultSettings::setViewDigitizeCurvePointsToolbar(bool view) { m_viewDigitizeCurvePointsToolbar = view; } void DefaultSettings::setViewDigitizeMeasurePointsToolbar(bool view) { m_viewDigitizeMeasurePointsToolbar = view; } void DefaultSettings::setViewFileToolbar(bool view) { m_viewFileToolbar = view; } void DefaultSettings::setViewImageScaleToolbar(bool view) { m_viewImageScaleToolbar = view; } void DefaultSettings::setViewMeasureGeometry(bool view) { m_viewMeasureGeometry = view; } void DefaultSettings::setViewPoints(ViewPointSelection view) { m_viewPoints = view; } void DefaultSettings::setViewSelectToolbar(bool view) { m_viewSelectToolbar = view; } void DefaultSettings::setViewStatusBar(bool view) { m_viewStatusBar = view; } void DefaultSettings::setViewZoomToolbar(bool view) { m_viewZoomToolbar = view; } void DefaultSettings::setWindowCurvePosition(QPoint pos) { m_windowCurvePosition = pos; } void DefaultSettings::setWindowCurveSize(QSize size) { m_windowCurveSize = size; } void DefaultSettings::setWindowHelpPosition(QPoint pos) { m_windowHelpPosition = pos; } void DefaultSettings::setWindowHelpSize(QSize size) { m_windowHelpSize = size; } void DefaultSettings::setWindowMainPosition(QPoint pos) { m_windowMainPosition = pos; } void DefaultSettings::setWindowMainSize(QSize size) { m_windowMainSize = size; } void DefaultSettings::setPointMatchSettings(PointMatchSettings match) { m_pointMatchSettings = match; } void DefaultSettings::setWindowMeasurePosition(QPoint pos) { m_windowMeasurePosition = pos; } void DefaultSettings::setWindowMeasureSize(QSize size) { m_windowMeasureSize = size; } void DefaultSettings::setSegmentSettings(SegmentSettings seg) { m_segmentSettings = seg; } void DefaultSettings::setAxesStyle(PointSetStyle style) { m_axesStyle = style; } void DefaultSettings::setScaleStyle(PointSetStyle style) { m_scaleStyle = style; } void DefaultSettings::setSessionsSettings(SessionsSettings sessionsSettings) { m_sessionsSettings = sessionsSettings; } engauge-digitizer-5.2/src/defaultsettings.h000066400000000000000000000236611222557406400211470ustar00rootroot00000000000000/*************************************************************************** defaultsettings.h - description ------------------- begin : Thu Sep 9 2004 copyright : (C) 2004 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DEFAULTSETTINGS_H #define DEFAULTSETTINGS_H #include #include #include #include #include "digitdef.h" // this singleton class saves and restores default program settings, which // are a mixture of the original default settings (read in during startup) and // the settings of all of the documents that have been opened so far. these // default settings are saved during program shutdown for use in other sessions class DefaultSettings { public: static void create(void) { if (!m_settings) m_settings = new DefaultSettings; } static void destroy(void) { if (m_settings) { delete m_settings; m_settings = 0; } } static DefaultSettings& instance(void) { return *m_settings; } // get methods. where possible, these return structures to reduce the number of methods CoordSettings getCoordSettings(); ExportSettings getExportSettings(); bool getViewFileToolbar(); bool getViewSelectToolbar(); bool getViewImageScaleToolbar(); bool getViewDigitizeCurvePointsToolbar(); bool getViewDigitizeMeasurePointsToolbar(); bool getViewZoomToolbar(); bool getViewStatusBar(); ViewPointSelection getViewPoints(); BackgroundSelection getViewBackground(); bool getViewCurveGeometry(); bool getViewMeasureGeometry(); int getPowerMostSigMax(); int getPowerMostSigMin(); double getDoubleMin(); int getMaxCommands(); QPoint getWindowCurvePosition(); QSize getWindowCurveSize(); QPoint getWindowHelpPosition(); QSize getWindowHelpSize(); QPoint getWindowMainPosition(); QSize getWindowMainSize(); QPoint getWindowMeasurePosition(); QSize getWindowMeasureSize(); bool getWindowMainFontOverride(); QString getWindowMainFontName(); int getWindowMainFontSize(); int getKeyClipboard(); int getKeyTree(); int getKeyVariables(); QSize getHandleSize(); SegmentSettings getSegmentSettings(); int getSegmentPointMinSeparation(); GridRemovalSettings getGridRemovalSettings(); GridSet getGridDisplayGridSetX(); GridSet getGridDisplayGridSetY(); int getPointMatchHighlightDiameter(); int getPointMatchHighlightLineSize(); PointMatchSettings getPointMatchSettings(); DiscretizeSettings getDiscretizeSettings(); PointSetStyle getAxesStyle(); PointSetStyle getScaleStyle(); PointSetStyle getCurveStyle(int pointSetIndex); PointSetStyle getMeasureStyle(int pointSetIndex); int getMruMax(); QStringList getMruDocuments(); int getComboBoxWidthMin(); SessionsSettings getSessionsSettings(); Color getScanForAxesLineColor(); int getScanForAxesLineWidth(); int getScanForAxesEndpointKernelWidth(); bool getScanForAxesScanEffect(); // set methods. for simplicity, these accept structures used by external code void setCoordSettings(CoordSettings coord); void setDiscretizeSettings(DiscretizeSettings discretize); void setExportSettings(ExportSettings exportSettings); void setViewBackground(BackgroundSelection view); void setViewCurveGeometry(bool view); void setViewDigitizeCurvePointsToolbar(bool view); void setViewDigitizeMeasurePointsToolbar(bool view); void setViewFileToolbar(bool view); void setViewImageScaleToolbar(bool view); void setViewMeasureGeometry(bool view); void setViewPoints(ViewPointSelection view); void setViewSelectToolbar(bool view); void setViewStatusBar(bool view); void setViewZoomToolbar(bool view); void setGridRemovalSettings(GridRemovalSettings grid); void setGridDisplaySettings(GridMeshSettings grid); void setPointMatchSettings(PointMatchSettings match); void setSegmentSettings(SegmentSettings seg); void setWindowCurvePosition(QPoint pos); void setWindowCurveSize(QSize size); void setWindowHelpPosition(QPoint pos); void setWindowHelpSize(QSize size); void setWindowMainPosition(QPoint pos); void setWindowMainSize(QSize size); void setWindowMeasurePosition(QPoint pos); void setWindowMeasureSize(QSize size); void setAxesStyle(PointSetStyle style); void setScaleStyle(PointSetStyle style); void setCurveStyles(const PointSetStyleList& rStyles); void setMeasureStyles(const PointSetStyleList& rStyles); void setMruMax(int mruMax); void setMruDocuments(const QStringList& rMruDocuments); void setComboBoxWidthMin(int comboBoxWidthMin); void setSessionsSettings(SessionsSettings sessionsSettings); // save current settings just before exiting the application void archiveSettings(); protected: DefaultSettings(); ~DefaultSettings(); private: // user controls a set of flags that determine what gets saved SessionsSettings m_sessionsSettings; // settings are initialized to factory defaults, then the archived values are merged in void initializeSettingsToFactoryDefaults(); void loadArchivedSettings(); void loadMruDocuments(QSettings& rArchiver); void loadPointSetStyle(PointSetStyle& rStyle, QSettings& rArchiver, const QString keyPointShape, const QString keyPointSize, const QString keyPointLineSize, const QString keyPointLineColor, const QString keyPointInColor, const QString keyLineSize, const QString keyLineColor, const QString keyLineConnectAs); void loadPointSetStyles(bool isCurve, PointSetStyleList& rStyleList, QSettings& rArchiver, const QString keyGroupPrefix, const QString keyPointShape, const QString keyPointSize, const QString keyPointLineSize, const QString keyPointLineColor, const QString keyPointInColor, const QString keyLineSize, const QString keyLineColor, const QString keyLineConnectAs); // singleton instance static DefaultSettings* m_settings; // coordinate settings CoordSettings m_coordSettings; // export settings ExportSettings m_exportSettings; // view selections bool m_viewFileToolbar; bool m_viewSelectToolbar; bool m_viewImageScaleToolbar; bool m_viewDigitizeCurvePointsToolbar; bool m_viewDigitizeMeasurePointsToolbar; bool m_viewZoomToolbar; bool m_viewStatusBar; ViewPointSelection m_viewPoints; BackgroundSelection m_viewBackground; bool m_viewCurveGeometry; bool m_viewMeasureGeometry; // status bar coordinates having powers outside the min-to-max range are displayed // in exponential format since there would be too many digits to make identifying // the magnitude reasonably easy int m_powerMostSigMax; int m_powerMostSigMin; // any number between -DoubleMin and +DoubleMin is considered to be zero. useful // info for this is at http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm double m_doubleMin; // command do/undo. the value must be computed so that available memory is not exceeded unsigned int m_maxCommands; // choose curve geometry window size so it completely fits on small 800x600 screens QPoint m_windowCurvePosition; QSize m_windowCurveSize; // choose help window size so it completely fits on small 800x600 screens QPoint m_windowHelpPosition; QSize m_windowHelpSize; // choose main window size so it completely fits on small 800x600 screens QPoint m_windowMainPosition; QSize m_windowMainSize; bool m_windowMainFontOverride; QString m_windowMainFontName; int m_windowMainFontSize; int m_windowMainComboBoxWidthMin; // choose measure geometry window size so it completely fits on small 800x600 screens QPoint m_windowMeasurePosition; QSize m_windowMeasureSize; // keystrokes for debug dumps int m_keyClipboard; // clipboard contents int m_keyTree; // document QObject tree. no output for release version of Qt library int m_keyVariables; // document member variables // width and height of handles around selected objects, in pixels QSize m_handleSize; // segment settings int m_segmentPointMinSeparation; SegmentSettings m_segmentSettings; // gridline removal defaults GridRemovalSettings m_gridRemovalSettings; // grid display defaults GridSet m_gridDisplayGridSetX; GridSet m_gridDisplayGridSetY; // match points separation default and minimum int m_pointMatchHighlightDiameter; int m_pointMatchHighlightLineSize; PointMatchSettings m_pointMatchSettings; // discretization defaults DiscretizeSettings m_discretizeSettings; // pointset styles PointSetStyle m_axesStyle; PointSetStyle m_scaleStyle; PointSetStyleList m_curveStyles; PointSetStyleList m_measureStyles; // most recently used documents int m_mruMax; QStringList m_mruDocuments; // scan for axes algorith defaults Color m_scanForAxesLineColor; int m_scanForAxesLineWidth; int m_scanForAxesEndpointKernelWidth; bool m_scanForAxesScanEffect; }; #endif // DEFAULTSETTINGS_H engauge-digitizer-5.2/src/digitdebug.cpp000066400000000000000000000066761222557406400204130ustar00rootroot00000000000000/*************************************************************************** digitdebug.cpp - description ------------------- begin : Tue Dec 3 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "digitdebug.h" #include "main.h" unsigned long DigitDebug::debugMask = 0; DigitDebug::DigitDebug() { } DigitDebug::~DigitDebug() { } bool DigitDebug::setDebugFlag(QString str) { for (int flag = 0; flag < (int) MaxFlags; flag++) if (str == QString("-") + flagName((Flags) flag)) { debugMask |= 1 << flag; return true; } return false; } QString DigitDebug::flagName(Flags flag) { return flagStringsLookup(flag, LookupFlagName); } QString DigitDebug::usageHelp(Flags flag) { return flagStringsLookup(flag, LookupUsageHelp); } QString DigitDebug::flagStringsLookup(Flags flag, Lookup lookup) { switch (flag) { case Ctor: if (lookup == LookupFlagName) return QString("ctor"); else return QString("trace constructor calls"); case Dtor: if (lookup == LookupFlagName) return QString("dtor"); else return QString("trace destructor calls"); case CurveCmb: if (lookup == LookupFlagName) return QString("curvecmb"); else return QString("trace curve combobox"); case MeasureCmb: if (lookup == LookupFlagName) return QString("measurecmb"); else return QString("trace measure combobox"); case Refresh: if (lookup == LookupFlagName) return QString("refresh"); else return QString("trace screen refreshes"); case Scanning: if (lookup == LookupFlagName) return QString("scanning"); else return QString("trace image scanning"); case MaxFlags: break; } FATAL_ENGAUGE("unable to find debug lookup flag"); return QString(""); } void DigitDebug::genericDebug(Flags flag, QString str) { unsigned long bit = 1 << flag; if ((bit & debugMask) != 0) qDebug("%s %-8.8s %s", QTime::currentTime().toString("hh:mm:ss:zzz").latin1(), flagName (flag).latin1(), str.latin1()); } QString DigitDebug::usageShort() { QString str; for (int flag = 0; flag < (int) MaxFlags; flag++) { str.append(QString(" [-") + flagName((Flags) flag) + QString("]")); } return str; } QString DigitDebug::usageLong() { QString str; for (int flag = 0; flag < (int) MaxFlags; flag++) { QString name = QString("[-") + flagName((Flags) flag) + QString("] "); QString comment = usageHelp((Flags) flag).latin1(); str.append(name + comment + QString("\n")); } return str; } engauge-digitizer-5.2/src/digitdebug.h000066400000000000000000000062021222557406400200410ustar00rootroot00000000000000/*************************************************************************** digitdebug.h - description ------------------- begin : Tue Dec 3 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITDEBUG_H #define DIGITDEBUG_H #include // this completely static class filters and formats debug information. for // debug there is also the Key_D button which tells DigitMain to dump the // document class DigitDebug { public: DigitDebug(); ~DigitDebug(); // any changes to the Flags enumeration must be reflected in the // debug methods immediately below, and in flagStringsLookup enum Flags { Ctor = 0, Dtor, CurveCmb, MeasureCmb, Refresh, Scanning, MaxFlags }; // debug methods static void ctor(QString str) { genericDebug(Ctor, str); } static void dtor(QString str) { genericDebug(Dtor, str); } static void curvecmb(QString str) { genericDebug(CurveCmb, str); } static void measurecmb(QString str) { genericDebug(MeasureCmb, str); } static void refresh(QString str) { genericDebug(Refresh, str); } static void scanning(QString str) { genericDebug(Scanning, str); } // documentation of command line options static QString usageShort(void); static QString usageLong(void); // if string is one of the command line debug flags, returns true and // enables that type of debug spew static bool setDebugFlag(QString str); private: enum Lookup { LookupFlagName, // command line option token (minus leading dash) LookupUsageHelp // usage information displayed by -help, or after command line error }; // return one of the strings associated with a particular flag. the strings are // consolidated into one place so developers will be more likely to keep things in sync static QString flagStringsLookup(Flags flag, Lookup lookup); // wrappers around flagStringsLookup static QString flagName(Flags flag); static QString usageHelp(Flags flag); // mask that filters the debug spew. each bit represents one type of spew static unsigned long debugMask; // filter debug lines, format them with common style and output them static void genericDebug(Flags flag, QString str); }; #endif // DIGITDEBUG_H engauge-digitizer-5.2/src/digitdef.cpp000066400000000000000000000055111222557406400200460ustar00rootroot00000000000000/*************************************************************************** digitdef.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "digitdef.h" #include "main.h" QString VersionNumber; QStringList VersionNumbersSupported; // globals that really should not belong to any class. the goal is to // localize the simple user datatype code, with more complicated user // datatypes getting their own classes QStringList GridSetStrings; // kludge for freeware Qt 2.3.1 so window captions work #if defined(WIN32) const char* freewareCaption = " [Qt]"; #else const char* freewareCaption = ""; #endif QString delimiter(ExportDelimiters del) { switch(del) { case Commas: default: return QString(","); case Spaces: return QString(" "); case Tabs: return QString("\t"); } } void initGlobals() { GridSetStrings.append("Count"); GridSetStrings.append("Start"); GridSetStrings.append("Step"); GridSetStrings.append("Stop"); // following asserts guarantee the QStringList will effectively work as an array. there // is no QStringArray, and QStringList is supported by many widgets ASSERT_ENGAUGE(GridSetStrings.findIndex("Count") == AllButCount); ASSERT_ENGAUGE(GridSetStrings.findIndex("Start") == AllButStart); ASSERT_ENGAUGE(GridSetStrings.findIndex("Step") == AllButStep); ASSERT_ENGAUGE(GridSetStrings.findIndex("Stop") == AllButStop); VersionNumber = QString("5.2"); VersionNumbersSupported << "2.0" << "2.1" << "2.2" << "2.3" << "2.4" << "2.5" << "2.6" << "2.7" << "2.8" << "2.9" << "2.10" << "2.11" << "2.12" << "2.13" << "2.14" << "2.15" << "3.0" << "4.0" << "4.1" << "5.0" << "5.1" << "5.2"; } mmUnits mmUnitize(CoordSettings coord) { if (coord.frame == Cartesian) return mmCartesian; else { // polar coordinates if (coord.thetaUnits == ThetaDegrees) return mmDegrees; else if (coord.thetaUnits == ThetaGradians) return mmGradians; else return mmRadians; } } engauge-digitizer-5.2/src/digitdef.h000066400000000000000000000267741222557406400175310ustar00rootroot00000000000000/*************************************************************************** digitdef.h - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITDEF_H #define DIGITDEF_H #include #include #include #include #include "mmsubs.h" // version information is stored as a number in string format // so that numerically identical versions (2.1 and 2.10) can be distinguished. // VersionNumbersSupported is a list of file versions that can be opened by // this version extern QString VersionNumber; extern QStringList VersionNumbersSupported; // user can specify location of user manual using this environment variable const QString UserManualEnvironmentVariable("ENGAUGE_USERMANUAL"); // user can specify browser command using this environment variable const QString BrowserEnvironmentVariable("ENGAUGE_BROWSER"); // global keys that must be kept consistent with menu items in main window const QString globalKeyCut(QObject::tr("Ctrl+X")); const QString globalKeyCopy(QObject::tr("Ctrl+C")); const QString globalKeyPaste(QObject::tr("Ctrl+V")); // kludge for freeware Qt 2.3.1 so window captions work extern const char* freewareCaption; // z values determine which drawn entities overlap others const double ZGridLines = 0.0; // lower than everything so grid lines are at the bottom const double ZLines = 1.0; // lower than ZPoints so lines are behind points const double ZPoints = 2.0; // higher than ZLines so lines are behind points const double ZSegments = 3.0; // higher than almost everything since segments are only seen in segment mode const double ZHandles = 4.0; // higher than segments so we can always see selection handles const double ZScanForAxesLines = 5.0; // higher than segments so we can always see the scan axes lines // gridline removal limits const int RemovalMaxRecursion = 4000; // default Windows stack size of 1MB handles recursion depth of 5700 // eyedropper is used to get color of single pixel const int EyedropperHotX = 0; const int EyedropperHotY = 15; // digitize modes enum DigitizeState { AxisState, CurveState, MeasureState, PointMatchState, ScaleState, SegmentState, SelectState }; // gridline types enum GridType { GridTypeRemoval, GridTypeDisplay }; // circles are not allowed as point shapes because the point shapes are drawn // as polygons so a circle would require too many points (but note that // QPointArray::makeEllipse would be helpful in this case) // // the first curve is assigned the first point shape, and each succeeding curve // gets the next shape (cycling through the shapes if necessary). we start the // list with the polygons, and then end with the crosses and x's enum PointShape { Cross = 0, X, Diamond, Square, Triangle, MaxPointShape }; enum PointSize { PointSize1 = 0, PointSize2, PointSize3, PointSize4, PointSize5, PointSize6, PointSize7, PointSize8, MaxPointSize }; enum PointLineSize { PointLineSize1 = 0, PointLineSize2, PointLineSize3, PointLineSize4, PointLineSize5, PointLineSize6, PointLineSize7, PointLineSize8, MaxPointLineSize }; enum LineSize { LineSize1 = 0, LineSize2, LineSize3, LineSize4, LineSize5, LineSize6, LineSize7, LineSize8, MaxLineSize }; // Point line color, point interior color, and line color share the same values enum Color { DigitBlack = 0, DigitBlue, DigitCyan, DigitGold, DigitGreen, DigitMagenta, DigitRed, DigitTransparent, DigitYellow, DigitMaxColor }; // Connect As method determines how points are connected by lines enum LineConnectAs { SingleValuedFunction = 0, Contour, MaxConnectAsMethod }; struct PointSetStyle { // cross, diamond, ... PointShape pointShape; // width and height of point shape. this unitless value is mapped into a pixel value that // assumes the point line has a width of one pixel PointSize pointSize; // width of point line, in pixels PointLineSize pointLineSize; // color of point shape Color pointLineColor; // color inside point shape Color pointInColor; // width of line between points, in pixels LineSize lineSize; // line color Color lineColor; // connect as method LineConnectAs lineConnectAs; }; typedef QList PointSetStyleList; // reference frame that applies to both x/theta and y/r graph coordinates of a document enum ReferenceFrame { Cartesian, Polar }; // scale that applies separately to x/theta and y/r coordinates of a document enum Scale { Linear, Log }; // units that apply to theta polar graph coordinate of a document enum ThetaUnits { ThetaDegrees, ThetaGradians, ThetaRadians }; struct CoordSettings { ReferenceFrame frame; double originRadius; Scale xThetaScale; Scale yRScale; ThetaUnits thetaUnits; }; // methods of determining which points are to be exported enum ExportPointsSelection { XFromAllCurves, // y from interpolating all curve XFromFirstCurve, // y from interpolating all curves XFromGridLines, // y from interpolating all curves XYFromAllCurves // no interpolation is performed }; // multicurve layout in exported files enum ExportLayout { AllCurvesOnEachLine, OneCurveOnEachLine }; // value separators in exported files enum ExportDelimiters { Commas, Spaces, Tabs }; enum ExportHeader { HeaderNone, HeaderSimple, HeaderGnuplot }; struct ExportSettings { ExportPointsSelection pointsSelection; ExportLayout layout; ExportDelimiters delimiters; ExportHeader header; QString xLabel; QString thetaLabel; }; // of the four grid mesh parameters (count, increment, start, stop), only // three are independent enum GridSet { AllButCount, AllButStart, AllButStep, AllButStop }; extern QStringList GridSetStrings; // display and removal gridline meshes are regularly spaced struct GridMeshSettings { bool initialized; GridSet gridSetX; GridSet gridSetY; int countX; int countY; double stepX; double stepY; double startX; double startY; double stopX; double stopY; }; // gridline removal is performed by any combination of three approaches struct GridRemovalSettings { // thinline removal approach bool removeThinLines; double thinThickness; // regular gridline removal approach bool removeGridlines; GridMeshSettings gridMesh; double gridDistance; // color gridline removal approach bool removeColor; QColor color; int foregroundThresholdLow; int foregroundThresholdHigh; // after gridlines are removed, gaps smaller than this value are connected double gapSeparation; }; struct SegmentSettings { // minimum length of segment in points. segments with fewer points are not displayed. // smaller value usually causes many more segments to be drawn, which can lengthen // drawing time and collision finding (hidden canvas items are never considered during // collision finding). memory usage is not affected since segments of all sizes are // initially created, so we never have to go back and rescan when minPoints and // pointSeparation are modified int minPoints; // when a segment is digitized, the curve points will be separated by this value in pixels // although if fillCorners is on then sometimes the separations will be less int pointSeparation; // true to have a point at every corner. this option is useful for piecewise-linear graphs // because all important information is captured, but smoothly varying graphs can // become too cluttered with no benefit gained bool fillCorners; // width of line between points, in pixels LineSize lineSize; // line color Color lineColor; }; struct PointMatchSettings { // each new point cannot be closer to an existing point than this distance. this // prevents successive point matchings from creating duplicates int pointSeparation; // each point is limited in extent to this maximum width and height, in pixels, since // otherwise time is wasted (by n-squared searches) looking at huge areas that could // not possibly be acceptable sample points int pointSize; // each matched point is either accepted or rejected. candidate point is the remaining // unmarked point with the highest correlation Color acceptedColor; Color rejectedColor; Color candidateColor; }; // match points separation minimums const int PointMatchSeparationMin = 5; const int PointMatchSizeMin = 4; struct PointMatchTriplet { // screen coordinates of created point int x; int y; // correlation of sample point with pixels around this created point double correlation; }; // discretize settings determine how colors are used to discretize the image enum DiscretizeMethod { DiscretizeNone, DiscretizeIntensity, DiscretizeForeground, DiscretizeHue, DiscretizeSaturation, DiscretizeValue }; struct DiscretizeSettings { DiscretizeMethod discretizeMethod; // low threshold is higher than high threshold when range is union of // values below high threshold, and values above low threshold int intensityThresholdLow; int intensityThresholdHigh; int foregroundThresholdLow; int foregroundThresholdHigh; int hueThresholdLow; int hueThresholdHigh; int saturationThresholdLow; int saturationThresholdHigh; int valueThresholdLow; int valueThresholdHigh; }; // hue, saturation and value upper bounds. the lower bounds are all zero. hopefully // these agree with gimp and other important tools const int DiscretizeIntensityMax = 100; const int DiscretizeForegroundMax = 100; const int DiscretizeHueMax = 360; const int DiscretizeSaturationMax = 100; const int DiscretizeValueMax = 100; // only show the points selected for viewing enum ViewPointSelection { ViewAxesPoints, ViewScalePoints, ViewCurvePoints, ViewMeasurePoints, ViewAllPoints }; // background options enum BackgroundSelection { BlankBackground, // NoBackground would be a better name but it conflicts with Qt OriginalImage, ProcessedImage }; // filter for settings saved between sessions struct SessionsSettings { bool sessions; bool coordinates; bool axes; bool scaleBar; bool curves; bool segments; bool pointMatch; bool measures; bool discretize; bool gridRemoval; bool gridDisplay; bool exporting; bool viewSelections; DigitizeState initialDigitizeState; }; // run time type identification for points and segment lines. documentation for QCanvasItem // suggests using values above 1000 const int Rtti_Point = 1000; const int Rtti_SegmentLine = 1001; // size of color swatches in curve and measure comboboxes in pixels const int ComboboxSwatchSize = 12; // return curve delimiter QString delimiter(ExportDelimiters del); // initialize globals extern void initGlobals(void); // map our coordinates description into the mmsubs coordinate description extern mmUnits mmUnitize(CoordSettings coord); #endif // DIGITDEF_H engauge-digitizer-5.2/src/digitdoc.cpp000066400000000000000000001565001222557406400200620ustar00rootroot00000000000000/*************************************************************************** digitdoc.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifdef _MSC_VER // use pragma to prevent useless warning from Microsoft compiler #pragma warning ( disable : 4355 ) // 'this' used in base init list #endif #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #include "digitdoc.h" #include "digitmain.h" #include "digitview.h" #include "pointsets.h" #include "segment.h" #include "segments.h" #include "mmsubs.h" #include "transform.h" #include "grid.h" #include "digitdebug.h" #include "clipboard.h" #include "main.h" #include "discretize.h" #include "gridremoval.h" #include "pointmatch.h" #include "match.h" #include "matchset.h" #include "scanforaxes.h" #include "defaultsettings.h" extern bool cmdLazySegments; extern bool cmdOnlyBmp; extern bool cmdPixels; DigitDoc::DigitDoc(DigitizeState state) : m_savePath(QString("")), m_exportPath(QString("")), m_exportFileExists(false), m_viewPointSelection(ViewAllPoints), m_inViewPointSelectionOverride(false), m_backgroundSelection(ProcessedImage), m_canvas(this), m_digitizeState(state), m_dirtyAxesTransformation(true), m_dirtyScaleTransformation(true), m_samplePointPixels(0) { DigitDebug::ctor(QString("digitdoc ") + QString::number((ulong) this, 16)); // make sure the application version number has been added to list of supported version numbers ASSERT_ENGAUGE(supportedVersionNumber(VersionNumber)); // disallow SegmentState when lazy segment scanning is in effect if (cmdLazySegments && (m_digitizeState == SegmentState)) { state = AxisState; // pick any state other than SegmentState m_digitizeState = state; } m_viewList = new Q3PtrList; CHECK_PTR_ENGAUGE(m_viewList); m_viewList->setAutoDelete(true); m_pointSets = new PointSets; CHECK_PTR_ENGAUGE(m_pointSets); m_segments = new Segments(canvas()); CHECK_PTR_ENGAUGE(m_segments); m_matchSet = new MatchSet(); CHECK_PTR_ENGAUGE(m_matchSet); m_transform = new Transform(this); CHECK_PTR_ENGAUGE(m_transform); m_gridDisplay = new Grid(GridTypeDisplay, canvas()); CHECK_PTR_ENGAUGE(m_gridDisplay); DefaultSettings& rSettings = DefaultSettings::instance(); m_coordSettings = rSettings.getCoordSettings(); m_exportSettings = rSettings.getExportSettings(); // do not initialize grid line settings structures m_gridRemovalSettings and // m_gridSettings. user will not be allowed to configure the grid line settings // until after the transformation is defined, since: // (1) user will then have useful default values to work with // (2) grid display lines cannot even be converted to screen coordinates for // display until the transformation is defined m_segmentSettings = rSettings.getSegmentSettings(); m_pointMatchSettings = rSettings.getPointMatchSettings(); m_gridRemovalSettings = rSettings.getGridRemovalSettings(); m_gridDisplaySettings.initialized = false; m_gridDisplaySettings.gridSetX = rSettings.getGridDisplayGridSetX(); m_gridDisplaySettings.gridSetY = rSettings.getGridDisplayGridSetY(); m_discretizeSettings = rSettings.getDiscretizeSettings(); } DigitDoc::~DigitDoc() { DigitDebug::dtor(QString("digitdoc ") + QString::number((ulong) this, 16)); delete m_viewList; // autoDelete is on ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->deleteShared(); delete m_pointSets; delete m_segments; delete m_matchSet; delete m_transform; delete m_gridDisplay; } void DigitDoc::initDefaults() { ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->addCurve(DefaultCurveName); m_pointSets->addMeasure(DefaultMeasureName); m_curveCmbText = DefaultCurveName; m_measureCmbText = DefaultMeasureName; } void DigitDoc::addView(DigitView* view) { setViewCursor(view); ASSERT_ENGAUGE(m_viewList != 0); m_viewList->append(view); changedViewList(); } void DigitDoc::removeView(DigitView* view) { ASSERT_ENGAUGE(m_viewList != 0); m_viewList->remove(view); if (!m_viewList->isEmpty()) changedViewList(); } void DigitDoc::changedViewList(){ DigitView* view; if (isLastView()) { view = m_viewList->first(); view->setCaption(tr(m_title)); } else { int i; for (i = 1, view = m_viewList->first(); view != 0; i++, view = m_viewList->next()) view->setCaption(tr(m_title + ":%1").arg(i)); } } bool DigitDoc::isLastView() { ASSERT_ENGAUGE(m_viewList != 0); return ((int) m_viewList->count() == 1); } void DigitDoc::setViewCursor(DigitView* view) { // TODO allow different cursors ASSERT_ENGAUGE(view != 0); switch (m_digitizeState) { case PointMatchState: case SelectState: case SegmentState: view->setCursor(Qt::ArrowCursor); break; case AxisState: case CurveState: case MeasureState: case ScaleState: view->setCursor(Qt::CrossCursor); break; } } void DigitDoc::setSavePath(const QString &filename) { QFileInfo fInfo(filename); m_savePath = fInfo.dirPath(true) + QDir::separator() + fInfo.baseName(true) + extensionDig; m_title = fInfo.baseName(); if (m_exportPath.isEmpty()) m_exportPath = fInfo.dirPath(true) + QDir::separator() + fInfo.baseName(true) + extensionCsv; } void DigitDoc::setExportPath(const QString &filename) { QFileInfo fInfo(filename); m_exportPath = fInfo.dirPath(true) + QDir::separator() + fInfo.baseName(true) + extensionCsv; if (m_savePath.isEmpty()) { m_savePath = fInfo.dirPath(true) + QDir::separator() + fInfo.baseName(true) + extensionDig; m_title = fInfo.baseName(); } } bool DigitDoc::importFile(const QString &filename, const char* format) { static char formatBmp [] = "BMP"; const char* formatUsed; if (cmdOnlyBmp) formatUsed = formatBmp; else formatUsed = format; if (!m_originalPixmap.load (filename, formatUsed, Qt::ThresholdDither | Qt::ThresholdAlphaDither | Qt::AvoidDither)) { return false; } loadOriginalPixmap(); processOriginalPixmap(); // isolate background color as useful default for grid removal by color Discretize discretize; QRgb rgbBg = discretize.backgroundColor(&m_originalImage); m_gridRemovalSettings.color = rgbBg; m_modified = false; m_saveFileExists = false; setSavePath(filename); return true; } bool DigitDoc::importImage(const QImage& image) { if (!m_originalPixmap.convertFromImage (image, Qt::ThresholdDither | Qt::ThresholdAlphaDither | Qt::AvoidDither)) { return false; } loadOriginalPixmap(); processOriginalPixmap(); // isolate background color as useful default for grid removal by color Discretize discretize; QRgb rgbBg = discretize.backgroundColor(&m_originalImage); m_gridRemovalSettings.color = rgbBg; m_modified = false; m_saveFileExists = false; return true; } bool DigitDoc::importPixmap(const QPixmap& pixmap) { m_originalPixmap = pixmap; loadOriginalPixmap(); processOriginalPixmap(); // isolate background color as useful default for grid removal by color Discretize discretize; QRgb rgbBg = discretize.backgroundColor(&m_originalImage); m_gridRemovalSettings.color = rgbBg; m_modified = false; m_saveFileExists = false; return true; } void DigitDoc::loadOriginalPixmap() { m_originalImage = m_originalPixmap.convertToImage(); m_canvas.setBackgroundPixmap(m_originalPixmap); } void DigitDoc::processOriginalPixmap() { // make sure canvas has the correct size if (m_canvas.size() != m_originalPixmap.size()) m_canvas.resize (m_originalPixmap.width(), m_originalPixmap.height()); // processing involves two steps // 1) remove gridlines // 2) discretize Discretize discretize; QRgb backgroundColor = discretize.backgroundColor(&m_originalImage); m_processedImage = m_originalImage.copy(); // deep copy needed GridRemoval gridRemoval; gridRemoval.removeAndConnect(&m_processedImage, m_transform, m_coordSettings, m_gridRemovalSettings, backgroundColor); discretize.discretize(&m_processedImage, m_discretizeSettings); if (!cmdLazySegments) { // make segments using processed image with gridlines removed ASSERT_ENGAUGE(m_segments != 0); m_segments->makeSegments(m_processedImage, segmentSettings()); showSegments(m_digitizeState == SegmentState); } m_processedPixmap.convertFromImage(m_processedImage, Qt::ThresholdDither); if (m_backgroundSelection == ProcessedImage) m_canvas.setBackground(m_backgroundSelection); } bool DigitDoc::supportedVersionNumber(QString versionNumber) { return (VersionNumbersSupported.contains(versionNumber) > 0); } bool DigitDoc::openDocument(const QString &filename) { QFile f(filename); if (!f.open (QIODevice::ReadOnly)) return false; QDataStream str (&f); Q_INT32 magicNumber; str >> (Q_INT32 &) magicNumber; if (magicNumber != MagicNumber) { QMessageBox::critical(0, tr("I/O Error!"), tr("Invalid file format!\n" "Skipping file"), QMessageBox::Ok, Qt::NoButton); f.close(); return false; } double versionNumber; QString versionString; str >> versionNumber; // numeric value is ambiguous (2.1 or 2.10?) str >> versionString; if (versionString.isEmpty()) // kludge for files with empty version strings versionString = QString("%1").arg(versionNumber); if (!supportedVersionNumber(versionString)) { QMessageBox::critical(0, tr("I/O Error!"), QString("%1%2%3") .arg(tr("Unsupported version ")) .arg(versionString) .arg(tr("\nSkipping file")), QMessageBox::Ok, Qt::NoButton); f.close(); return false; } str >> (Q_INT32 &) m_backgroundSelection; str >> m_originalPixmap; str >> m_title; str >> m_curveCmbText; str >> m_measureCmbText; str >> (Q_INT32 &) m_coordSettings.frame; if (versionNumber < 3) m_coordSettings.originRadius = 0.0; else str >> (double &) m_coordSettings.originRadius; str >> (Q_INT32 &) m_coordSettings.thetaUnits; str >> (Q_INT32 &) m_coordSettings.xThetaScale; str >> (Q_INT32 &) m_coordSettings.yRScale; str >> (Q_INT32 &) m_exportSettings.delimiters; str >> (Q_INT32 &) m_exportSettings.layout; str >> (Q_INT32 &) m_exportSettings.pointsSelection; str >> (Q_INT32 &) m_exportSettings.header; if (versionNumber >= 5.2) { str >> m_exportSettings.xLabel; str >> m_exportSettings.thetaLabel; } str >> (Q_INT32 &) m_gridRemovalSettings.removeThinLines; str >> (double &) m_gridRemovalSettings.thinThickness; str >> (Q_INT32 &) m_gridRemovalSettings.removeGridlines; str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.initialized; str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.countX; str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.countY; str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetX; str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetY; str >> (double &) m_gridRemovalSettings.gridMesh.startX; str >> (double &) m_gridRemovalSettings.gridMesh.startY; str >> (double &) m_gridRemovalSettings.gridMesh.stepX; str >> (double &) m_gridRemovalSettings.gridMesh.stepY; str >> (double &) m_gridRemovalSettings.gridMesh.stopX; str >> (double &) m_gridRemovalSettings.gridMesh.stopY; str >> (double &) m_gridRemovalSettings.gridDistance; str >> (Q_INT32 &) m_gridRemovalSettings.removeColor; if (versionNumber >= 5) { str >> m_gridRemovalSettings.color; } else { Q_UINT32 p; str >> p; m_gridRemovalSettings.color.setRgb( p ); } str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdLow; str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdHigh; str >> (double &) m_gridRemovalSettings.gapSeparation; str >> (Q_INT32 &) m_gridDisplaySettings.initialized; str >> (Q_INT32 &) m_gridDisplaySettings.countX; str >> (Q_INT32 &) m_gridDisplaySettings.countY; str >> (Q_INT32 &) m_gridDisplaySettings.gridSetX; str >> (Q_INT32 &) m_gridDisplaySettings.gridSetY; str >> (double &) m_gridDisplaySettings.startX; str >> (double &) m_gridDisplaySettings.startY; str >> (double &) m_gridDisplaySettings.stepX; str >> (double &) m_gridDisplaySettings.stepY; str >> (double &) m_gridDisplaySettings.stopX; str >> (double &) m_gridDisplaySettings.stopY; str >> (Q_INT32 &) m_segmentSettings.minPoints; str >> (Q_INT32 &) m_segmentSettings.pointSeparation; str >> (Q_INT32 &) m_segmentSettings.lineSize; str >> (Q_INT32 &) m_segmentSettings.lineColor; str >> (Q_INT32 &) m_pointMatchSettings.pointSeparation; str >> (Q_INT32 &) m_pointMatchSettings.pointSize; str >> (Q_INT32 &) m_pointMatchSettings.acceptedColor; str >> (Q_INT32 &) m_pointMatchSettings.rejectedColor; if (versionNumber < 4) { // synchronize with DefaultSettings::initializeSettingsToFactoryDefaults m_pointMatchSettings.candidateColor = DigitBlue; } else str >> (Q_INT32 &) m_pointMatchSettings.candidateColor; str >> (Q_INT32 &) m_discretizeSettings.discretizeMethod; str >> (Q_INT32 &) m_discretizeSettings.intensityThresholdLow; str >> (Q_INT32 &) m_discretizeSettings.intensityThresholdHigh; str >> (Q_INT32 &) m_discretizeSettings.foregroundThresholdLow; str >> (Q_INT32 &) m_discretizeSettings.foregroundThresholdHigh; str >> (Q_INT32 &) m_discretizeSettings.hueThresholdLow; str >> (Q_INT32 &) m_discretizeSettings.hueThresholdHigh; str >> (Q_INT32 &) m_discretizeSettings.saturationThresholdLow; str >> (Q_INT32 &) m_discretizeSettings.saturationThresholdHigh; str >> (Q_INT32 &) m_discretizeSettings.valueThresholdLow; str >> (Q_INT32 &) m_discretizeSettings.valueThresholdHigh; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->serializeRead(str, canvas()); str >> (Q_INT32 &) magicNumber; if (magicNumber != MagicNumber) { QMessageBox::critical(0, tr("I/O Error!"), tr("Invalid file format!\n" "Skipping file"), QMessageBox::Ok, Qt::NoButton); f.close(); return false; } f.close(); computeTransformation(); // document has been read in so initialize m_modified = false; m_saveFileExists = true; setSavePath(filename); m_dirtyAxesTransformation = true; m_dirtyScaleTransformation = true; makeGridDisplayLines(); loadOriginalPixmap(); processOriginalPixmap(); return true; } bool DigitDoc::saveDocument(const QString &filename) { QFile f(filename); // translation flag applies to Microsoft Windows if (!f.open (QIODevice::WriteOnly)) return false; QDataStream str (&f); #ifdef __SUNPRO_CC str << (Q_INT32 &) MagicNumber; #else str << (const Q_INT32 &) MagicNumber; #endif str << VersionNumber.toDouble(); // numeric value is ambiguous (2.1 or 2.10?) str << VersionNumber; str << (Q_INT32 &) m_backgroundSelection; str << m_originalPixmap; str << m_title; str << m_curveCmbText; str << m_measureCmbText; str << (Q_INT32 &) m_coordSettings.frame; str << (double &) m_coordSettings.originRadius; str << (Q_INT32 &) m_coordSettings.thetaUnits; str << (Q_INT32 &) m_coordSettings.xThetaScale; str << (Q_INT32 &) m_coordSettings.yRScale; str << (Q_INT32 &) m_exportSettings.delimiters; str << (Q_INT32 &) m_exportSettings.layout; str << (Q_INT32 &) m_exportSettings.pointsSelection; str << (Q_INT32 &) m_exportSettings.header; str << m_exportSettings.xLabel; str << m_exportSettings.thetaLabel; str << (Q_INT32 &) m_gridRemovalSettings.removeThinLines; str << (double &) m_gridRemovalSettings.thinThickness; str << (Q_INT32 &) m_gridRemovalSettings.removeGridlines; str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.initialized; str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.countX; str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.countY; str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetX; str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetY; str << (double &) m_gridRemovalSettings.gridMesh.startX; str << (double &) m_gridRemovalSettings.gridMesh.startY; str << (double &) m_gridRemovalSettings.gridMesh.stepX; str << (double &) m_gridRemovalSettings.gridMesh.stepY; str << (double &) m_gridRemovalSettings.gridMesh.stopX; str << (double &) m_gridRemovalSettings.gridMesh.stopY; str << (double &) m_gridRemovalSettings.gridDistance; str << (Q_INT32 &) m_gridRemovalSettings.removeColor; str << m_gridRemovalSettings.color; str << (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdLow; str << (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdHigh; str << (double &) m_gridRemovalSettings.gapSeparation; str << (Q_INT32 &) m_gridDisplaySettings.initialized; str << (Q_INT32 &) m_gridDisplaySettings.countX; str << (Q_INT32 &) m_gridDisplaySettings.countY; str << (Q_INT32 &) m_gridDisplaySettings.gridSetX; str << (Q_INT32 &) m_gridDisplaySettings.gridSetY; str << (double &) m_gridDisplaySettings.startX; str << (double &) m_gridDisplaySettings.startY; str << (double &) m_gridDisplaySettings.stepX; str << (double &) m_gridDisplaySettings.stepY; str << (double &) m_gridDisplaySettings.stopX; str << (double &) m_gridDisplaySettings.stopY; str << (Q_INT32 &) m_segmentSettings.minPoints; str << (Q_INT32 &) m_segmentSettings.pointSeparation; str << (Q_INT32 &) m_segmentSettings.lineSize; str << (Q_INT32 &) m_segmentSettings.lineColor; str << (Q_INT32 &) m_pointMatchSettings.pointSeparation; str << (Q_INT32 &) m_pointMatchSettings.pointSize; str << (Q_INT32 &) m_pointMatchSettings.acceptedColor; str << (Q_INT32 &) m_pointMatchSettings.rejectedColor; str << (Q_INT32 &) m_pointMatchSettings.candidateColor; str << (Q_INT32 &) m_discretizeSettings.discretizeMethod; str << (Q_INT32 &) m_discretizeSettings.intensityThresholdLow; str << (Q_INT32 &) m_discretizeSettings.intensityThresholdHigh; str << (Q_INT32 &) m_discretizeSettings.foregroundThresholdLow; str << (Q_INT32 &) m_discretizeSettings.foregroundThresholdHigh; str << (Q_INT32 &) m_discretizeSettings.hueThresholdLow; str << (Q_INT32 &) m_discretizeSettings.hueThresholdHigh; str << (Q_INT32 &) m_discretizeSettings.saturationThresholdLow; str << (Q_INT32 &) m_discretizeSettings.saturationThresholdHigh; str << (Q_INT32 &) m_discretizeSettings.valueThresholdLow; str << (Q_INT32 &) m_discretizeSettings.valueThresholdHigh; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->serializeWrite(str); #ifdef __SUNPRO_CC str << (Q_INT32 &) MagicNumber; #else str << (const Q_INT32 &) MagicNumber; #endif f.close(); m_modified = false; m_saveFileExists = true; setSavePath(filename); return true; } bool DigitDoc::exportDocument(const QString &filename) { QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) return false; Q3TextStream str(&file); ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->exportToStream(str, coordSettings(), gridDisplaySettings(), exportSettings()); file.close(); setExportPath(filename); return true; } bool DigitDoc::isActionToUndo() { return true; } bool DigitDoc::isActionToRedo() { return true; } void DigitDoc::undo() { } void DigitDoc::redo() { } void DigitDoc::cut(DigitView* view) { m_modified = true; bool needNewTransform = false; // remove items selected in the view from the document, and send their attributes to the clipboard Clipboard::instance().clear(); QList updateRectList; Q3CanvasItemList::iterator itr; ASSERT_ENGAUGE(view != 0); for (itr = view->selectionList.begin(); itr != view->selectionList.end(); ++itr) { Point* p = view->safeUpcast(itr); if (p != 0) { Clipboard::instance().addPoint(p->xScreen(), p->yScreen()); ASSERT_ENGAUGE(m_pointSets != 0); if (m_pointSets->removePoint(p, &updateRectList)) needNewTransform = true; } } view->unselect(); if (needNewTransform) { // needNewTransform was set true by the removal of one or more axis or scale points m_dirtyAxesTransformation = true; m_dirtyScaleTransformation = true; computeTransformation(); } // update all views updateFromList(&updateRectList); sendUpdateGeometry(); } void DigitDoc::copy(DigitView* view) { // copy items selected in the view to the clipboard Clipboard::instance().clear(); Q3CanvasItemList::iterator itr; ASSERT_ENGAUGE(view != 0); for (itr = view->selectionList.begin(); itr != view->selectionList.end(); ++itr) { Point* p = view->safeUpcast(itr); if (p != 0) { ASSERT_ENGAUGE(p != 0); Clipboard::instance().addPoint(p->xScreen(), p->yScreen()); } } sendUpdateGeometry(); } void DigitDoc::paste(DigitView* view) { m_modified = true; Q3CanvasItemList newSelection; // paste points into document QList* list = Clipboard::instance().contents(); QList::iterator itr; ASSERT_ENGAUGE(list != 0); for (itr = list->begin(); itr != list->end(); ++itr) { int xScreen = (*itr).x(); int yScreen = (*itr).y(); Point* p = addPoint(xScreen, yScreen); newSelection.append((Q3CanvasItem*) p); } // replace any existing selection by new points ASSERT_ENGAUGE(view != 0); view->selectItemsReplace(&newSelection); sendUpdateGeometry(); } void DigitDoc::curveNames(QStringList* list) { ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->curveNames(list); } void DigitDoc::measureNames(QStringList* list) { ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->measureNames(list); } void DigitDoc::replacePointSets(PointSets* pointsets, QStringList* curvesWithOrphanedPoints, QStringList* measuresWithOrphanedPoints) { m_modified = true; ASSERT_ENGAUGE(m_pointSets != 0); if (curvesWithOrphanedPoints) m_pointSets->removePointsForSelectedCurves(curvesWithOrphanedPoints); if (measuresWithOrphanedPoints) m_pointSets->removePointsForSelectedMeasures(measuresWithOrphanedPoints); delete m_pointSets; m_pointSets = pointsets; m_pointSets->attachPointsToPointSets(); // update all views so all points reflect the style of the associated pointset, // and lines appear slotUpdateViews(0, m_canvas.rect()); QStringList names; // if m_curveCmbText is not found in the new list of curves, then arbitrarily pick // first curve. a popup will be generated elsewhere so user will realize this occurred ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->curveNames(&names); if (names.find(m_curveCmbText) == names.end()) m_curveCmbText = names.first(); // if m_measureCmbText is not found in the new list of measures, then arbitrarily pick // first measure. a popup will be generated elsewhere so user will realize this occurred m_pointSets->measureNames(&names); if (names.find(m_measureCmbText) == names.end()) m_measureCmbText = names.first(); } void DigitDoc::forwardNormalMsg(QString message) { emit(normalMsg(message)); } void DigitDoc::forwardPermanentMsg(QString message) { emit(permanentMsg(message)); } void DigitDoc::screenToXThetaYR(int xScreen, int yScreen, double* xTheta, double* yR) { ASSERT_ENGAUGE(m_transform != 0); m_transform->screenToXThetaYR(m_coordSettings, xScreen, yScreen, xTheta, yR); } void DigitDoc::trackCursor(const QPoint &p) { ASSERT_ENGAUGE(m_transform != 0); if (cmdPixels || m_transform->validAxes() || m_transform->validScale()) { QString textCoords, textRes; if (cmdPixels) { // display raw pixel coordinates for debugging segments, zoom, etc. textCoords.sprintf("(%d, %d)", p.x(), p.y()); textRes.sprintf("(1, 1)"); } else { // compute graph coordinates from original screen coordinates, without and with differentials double xTheta, yR, xThetaTweakX, yRTweakX, xThetaTweakY, yRTweakY; screenToXThetaYR(p.x(), p.y(), &xTheta, &yR); screenToXThetaYR(p.x() + 1, p.y(), &xThetaTweakX, &yRTweakX); screenToXThetaYR(p.x(), p.y() + 1, &xThetaTweakY, &yRTweakY); // compute resolution in each direction double xThetaResX = dabs(xTheta - xThetaTweakX); double yRResX = dabs(yR - yRTweakX); double xThetaResY = dabs(xTheta - xThetaTweakY); double yRResY = dabs(yR - yRTweakY); // combine the resolutions in each direction using root-mean-squared. the rationale is // that if the graph was exactly aligned in the horizontal and vertical screen directions, // the rms values xThetaRes and yRRes would obviously equal xThetaResX and yRResY respectively, // as desired. however, the irritation with this approach is that the coordinates of // a slightly rotated graph will not show the coupling of the x and y values, since // going up on the screen will cause changes in the least significant digits of // the x coordinate. the same is true for going right with the y coordinate. these slight // changes will be hidden by the roundoff step, but this is acceptable since we prefer the // cleaner look of a rounded off value in the statusbar. note the full precision will show // up in the exported files // // there is another argument for using the rms approach which hides slight coupling of // slightly rotated graphs. if the resolution in the x direction, which is limited by the // pixel spacing, is some value, it does not make sense to show much smaller contributions // due to the vertical coupling. in other words, we would be fine tuning a coarse value. double xThetaRes = sqrt(xThetaResX * xThetaResX + xThetaResY * xThetaResY); double yRRes = sqrt(yRResX * yRResX + yRResY * yRResY); // most significant digits int powerMostSigX = valuePower(xTheta) - 1; int powerMostSigY = valuePower(yRRes) - 1; // pick least significant digit that gives arbitrary two significant digits in // resolution. example: use 0.001 for 0.03 int powerLeastSigX = valuePower(xThetaRes) - 1; int powerLeastSigY = valuePower(yRRes) - 1; // build format string on the fly since we need a constant precision. otherwise, while moving // the cursor around trailing zeros would be dropped sometimes, causing the field width to // vary often, which causes the statusbar widgets to shift around. this is highly irritating. // default format is fixed, with precision set by least significant digits QString xFormat("%.*f"); QString yFormat("%.*f"); int precisionX = -powerLeastSigX; int precisionY = -powerLeastSigY; double roundedX = roundofftopower(xTheta, powerLeastSigX); double roundedY = roundofftopower(yR, powerLeastSigY); double roundedXRes = roundofftopower(xThetaRes, powerLeastSigX); double roundedYRes = roundofftopower(yRRes, powerLeastSigY); if ((powerMostSigX > DefaultSettings::instance().getPowerMostSigMax()) || (DefaultSettings::instance().getPowerMostSigMin() > powerMostSigX)) { ASSERT_ENGAUGE(m_canvas.width() > 1); precisionX = (int) (1 + log10((double) m_canvas.width())); roundedX = xTheta; roundedXRes = xThetaRes; xFormat = "%.*e"; // use e since g does not have trailing zeros, causing flicker during mouse moves } if ((powerMostSigY > DefaultSettings::instance().getPowerMostSigMax()) || (DefaultSettings::instance().getPowerMostSigMin() > powerMostSigY)) { ASSERT_ENGAUGE(m_canvas.height() > 1); precisionY = (int) (1 + log10((double) m_canvas.height())); roundedY = yR; roundedYRes = yRRes; yFormat = "%.*e"; // use e since g does not have trailing zeros, causing flicker during mouse moves } QString xyFormat = QString("(") + xFormat + QString(",") + yFormat + QString(")"); textCoords.sprintf(xyFormat, precisionX, roundedX, precisionY, roundedY); textRes.sprintf(xyFormat, precisionX, roundedXRes, precisionY, roundedYRes); } if (!cmdPixels && !m_transform->validAxes()) { // if using scale bar, then coordinates are arbitrary so do not display them textCoords = QString(""); } emit(trackingMsg(textCoords, textRes)); } else emit(trackingMsg(QString(""), QString(""))); } void DigitDoc::setDigitizeState(DigitizeState state) { // on state transitions, always turn off override stopShowOnlySelectedCurve(); if ((m_digitizeState == PointMatchState) && (state != PointMatchState)) cleanUpAcceptedPoints(state); if (cmdLazySegments && (state == SegmentState)) { // no longer able to postpone lazy segment scanning cmdLazySegments = false; ASSERT_ENGAUGE(m_segments != 0); m_segments->makeSegments(m_processedImage, segmentSettings()); } m_digitizeState = state; // state transitions involving segment state require hiding or showing segments showSegments(m_digitizeState == SegmentState); DigitView* view; for(view = m_viewList->first(); view != 0; view = m_viewList->next()) setViewCursor(view); } Point* DigitDoc::addPoint(int xScreen, int yScreen) { m_modified = true; double xThetaGraph = 0.0, yRGraph = 0.0; // new canvas item object Point* p; if ((m_digitizeState == CurveState) || (m_digitizeState == MeasureState)) { screenToXThetaYR(xScreen, yScreen, &xThetaGraph, &yRGraph); p = new Point(xScreen, yScreen, xThetaGraph, yRGraph, &m_canvas); CHECK_PTR_ENGAUGE(p); } else { p = new Point(xScreen, yScreen, &m_canvas); CHECK_PTR_ENGAUGE(p); } QList updateRectList; ASSERT_ENGAUGE(m_pointSets != 0); switch (m_digitizeState) { case AxisState: m_dirtyAxesTransformation = true; m_pointSets->addPointAxes(&m_canvas, p, &updateRectList); break; case CurveState: case SegmentState: m_pointSets->addPointCurve(&m_canvas, p, m_curveCmbText, &updateRectList); break; case MeasureState: m_pointSets->addPointMeasure(&m_canvas, p, m_measureCmbText, &updateRectList); break; case ScaleState: m_dirtyScaleTransformation = true; m_pointSets->addPointScale(&m_canvas, p, &updateRectList); break; case PointMatchState: case SelectState: default: FATAL_ENGAUGE("bad value for state"); } // update all views so point appears ASSERT_ENGAUGE(p != 0); slotUpdateViews(0, p->boundingRect()); // update all views so lines appear updateFromList(&updateRectList); return p; } void DigitDoc::addAxisPoint(int xScreen, int yScreen, double xGraph, double yGraph) { m_modified = true; // new canvas item object Point* p = new Point(xScreen, yScreen, xGraph, yGraph, &m_canvas); CHECK_PTR_ENGAUGE(p); QList updateRectList; m_dirtyAxesTransformation = true; m_pointSets->addPointAxes(&m_canvas, p, &updateRectList); // update all views so point appears ASSERT_ENGAUGE(p != 0); slotUpdateViews(0, p->boundingRect()); // update all views so lines appear updateFromList(&updateRectList); } void DigitDoc::setAxisPoint(Point* p, double xThetaGraph, double yRGraph) { m_dirtyAxesTransformation = true; ASSERT_ENGAUGE(p != 0); p->setXThetaGraph(xThetaGraph); p->setYRGraph(yRGraph); bool validBefore = validAxes(); computeTransformation(); if (validBefore != validAxes()) emit(transformationChange()); } void DigitDoc::setScalePoint(Point* p, double x, double y) { m_dirtyScaleTransformation = true; ASSERT_ENGAUGE(p != 0); p->setXThetaGraph(x); p->setYRGraph(y); bool validBefore = validScale(); computeTransformation(); if (validBefore != validScale()) emit(transformationChange()); } void DigitDoc::removeGestatingPoint(Point* p) { QList updateRectList; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->removePoint(p, &updateRectList); // update all views updateFromList(&updateRectList); } void DigitDoc::updateFromList(QList* updateRectList) { QList::iterator itr; ASSERT_ENGAUGE(updateRectList != 0); for (itr = updateRectList->begin(); itr != updateRectList->end(); ++itr) { QString str; str.sprintf("(%d,%d) (%d,%d)", (*itr).left(), (*itr).top(), (*itr).right(), (*itr).bottom()); DigitDebug::refresh(str); slotUpdateViews(0, (*itr)); } } int DigitDoc::axisPointCount(void) { ASSERT_ENGAUGE(m_transform != 0); return m_transform->axisPointCount(); } int DigitDoc::scalePointCount(void) { ASSERT_ENGAUGE(m_transform != 0); return m_transform->scalePointCount(); } void DigitDoc::computeTransformation() { ASSERT_ENGAUGE(m_pointSets != 0); const PointSet* pointset = m_pointSets->axes(); // try for axes transformation first ASSERT_ENGAUGE(m_transform != 0); if (m_dirtyAxesTransformation) { m_dirtyAxesTransformation = false; m_transform->computeAxesTransformation(m_coordSettings, pointset); } bool success = m_transform->validAxes(); if (!success) { // axes transformation failed so try scale bar transformation pointset = m_pointSets->scale(); if (m_dirtyScaleTransformation) { m_dirtyScaleTransformation = false; m_transform->computeScaleTransformation(m_coordSettings, pointset); } success = m_transform->validScale(); } if (success) { if (!m_gridRemovalSettings.gridMesh.initialized) initGridRemovalMesh(); if (!m_gridDisplaySettings.initialized) initGridDisplayMesh(); } // graph coordinates are updated even if transform is invalid, since graph coordinates // are just set to screen coordinates QList updateRectList; m_pointSets->updateGraphCoordinates(m_coordSettings, m_transform, &updateRectList); // update all views so lines appear updateFromList(&updateRectList); if (success) makeGridDisplayLines(); } bool DigitDoc::gridDisplay() { if (m_gridDisplay) return m_gridDisplay->grid(); return false; } void DigitDoc::showGridDisplay(bool toggle) { if (m_gridDisplay) m_gridDisplay->showGrid(toggle); slotUpdateViews(0, m_canvas.rect()); } void DigitDoc::setGridRemovalSettings(GridRemovalSettings settings) { m_modified = true; m_gridRemovalSettings = settings; processOriginalPixmap(); } void DigitDoc::setGridDisplaySettings(GridMeshSettings settings, bool show) { m_modified = true; m_gridDisplaySettings = settings; makeGridDisplayLines(); showGridDisplay(show); } void DigitDoc::makeGridDisplayLines() { ASSERT_ENGAUGE(m_gridDisplay != 0); bool show = m_gridDisplay->grid(); m_gridDisplay->makeGridLines(m_transform, m_coordSettings, m_gridDisplaySettings); if (show) showGridDisplay(show); } void DigitDoc::setSegmentSettings(SegmentSettings settings) { m_modified = true; // this method is called when user has updated the segment settings, which // is an indication that segments are indeed wanted, so unset cmdLazySegments cmdLazySegments = false; m_segmentSettings = settings; ASSERT_ENGAUGE(m_segments != 0); m_segments->setSettings(settings); processOriginalPixmap(); // state transitions involving segment state require hiding or showing segments if (m_digitizeState == SegmentState) showSegments(true); } void DigitDoc::setPointMatchSettings(PointMatchSettings settings) { m_pointMatchSettings = settings; } void DigitDoc::setDiscretizeSettings(DiscretizeSettings settings) { m_discretizeSettings = settings; processOriginalPixmap(); } bool DigitDoc::validAxes(void) { ASSERT_ENGAUGE(m_transform != 0); return m_transform->validAxes(); } bool DigitDoc::validScale(void) { ASSERT_ENGAUGE(m_transform != 0); return m_transform->validScale(); } bool DigitDoc::validAxisPoint(double xTheta, double yR) { if ((m_coordSettings.xThetaScale == Log) && (xTheta <= 0.0)) return false; if ((m_coordSettings.yRScale == Log) && (yR <= 0.0)) return false; return true; } void DigitDoc::initGridRemovalMesh() { initGridMesh(&m_gridRemovalSettings.gridMesh); } void DigitDoc::initGridDisplayMesh() { initGridMesh(&m_gridDisplaySettings); } void DigitDoc::initGridMesh(GridMeshSettings* gridSettings) { gridSettings->initialized = false; ASSERT_ENGAUGE(m_transform != 0); if (!m_transform->validAxes()) return; m_modified = true; gridSettings->gridSetX = AllButStep; gridSettings->gridSetY = AllButStep; double xThetaMin, xThetaMax, yRMin, yRMax; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->pointSetGraphLimits(m_coordSettings, m_transform, &xThetaMin, &xThetaMax, &yRMin, &yRMax); axisScale(xThetaMin, xThetaMax, (m_coordSettings.xThetaScale == Linear), &gridSettings->startX, &gridSettings->stopX, &gridSettings->stepX, &gridSettings->countX); axisScale(yRMin, yRMax, (m_coordSettings.yRScale == Linear), &gridSettings->startY, &gridSettings->stopY, &gridSettings->stepY, &gridSettings->countY); gridSettings->initialized = true; } void DigitDoc::setCoordSettings(CoordSettings settings) { // sanity check of axis points double xThetaMin, xThetaMax, yRMin, yRMax; ASSERT_ENGAUGE(m_pointSets != 0); if (m_pointSets->axisSetGraphLimits(settings, m_transform, &xThetaMin, &xThetaMax, &yRMin, &yRMax)) { bool badGraph = ((settings.xThetaScale == Log) && (xThetaMin <= 0.0)) || ((settings.yRScale == Log) && (yRMin <= 0.0)); if (badGraph) { QMessageBox::critical(0, tr("Range error for log scale!"), tr("Cannot select log scale when any axis points have zero or\n" "negative coordinates. The new settings will be ignored")); return; } } m_dirtyAxesTransformation = true; m_dirtyScaleTransformation = true; // sanity checks of grid lines bool badGridRemoval = m_gridRemovalSettings.gridMesh.initialized && ( ((settings.xThetaScale == Log) && (m_gridRemovalSettings.gridMesh.startX <= 0.0)) || ((settings.yRScale == Log) && (m_gridRemovalSettings.gridMesh.startY <= 0.0))); bool badGridDisplay = m_gridDisplaySettings.initialized && ( ((settings.xThetaScale == Log) && (m_gridDisplaySettings.startX <= 0.0)) || ((settings.yRScale == Log) && (m_gridDisplaySettings.startY <= 0.0))); m_modified = true; m_coordSettings = settings; // if necessary, quietly fix the grid lines to be consistent with log scale. // originally a warning message (with cancel option) was displayed, but this // confused people who did not even know there were grid lines, let alone // that the grid, that was automatically generated for linear mode, needed // to be fixed if (badGridRemoval) m_gridRemovalSettings.gridMesh.initialized = false; if (badGridDisplay) m_gridDisplaySettings.initialized = false; if (badGridRemoval || badGridDisplay) computeTransformation(); } PointSetStyle DigitDoc::axesStyle(void) { ASSERT_ENGAUGE(m_pointSets != 0); return m_pointSets->axesStyle(); } PointSetStyle DigitDoc::curveStyle(QString name) { ASSERT_ENGAUGE(m_pointSets != 0); return m_pointSets->curveStyle(name); } PointSetStyle DigitDoc::scaleStyle(void) { ASSERT_ENGAUGE(m_pointSets != 0); return m_pointSets->scaleStyle(); } void DigitDoc::setAxesStyle(PointSetStyle pointSetStyle) { m_modified = true; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->setAxesStyle(pointSetStyle); // update all views so all points reflect the new style slotUpdateViews(0, m_canvas.rect()); } void DigitDoc::setMatchSetStyle(PointSetStyle pointSetStyle) { if (m_matchSet != 0) { m_matchSet->setPointSetStyle(pointSetStyle); // update all views so all points reflect the new style slotUpdateViews(0, m_canvas.rect()); } } void DigitDoc::setScaleStyle(PointSetStyle pointSetStyle) { m_modified = true; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->setScaleStyle(pointSetStyle); // update all views so all points reflect the new style slotUpdateViews(0, m_canvas.rect()); } void DigitDoc::print() { QPrinter printer; QPainter p; // TODO the pagesize default should be editable in an options dialog printer.setPageSize(QPrinter::Letter); if (printer.setup()) { p.begin(&printer); m_canvas.drawArea(m_canvas.rect(), &p); p.end(); } } QString DigitDoc::filterImport() { QString filter(tr("Images (*.bmp *.gif *.jpg *.jpeg *.png *.pnm *.pbm *.xpm);;All Files (*.*)")); if (cmdOnlyBmp) filter = tr("Images (*.bmp);;All Files (*.*)"); return filter; } QString DigitDoc::filterOpenSave() { return QString("Engauge Digitizer (*%1);;All Files (*.*)") .arg(extensionDig); } void DigitDoc::dump() { qDebug("document %s", m_title.latin1()); qDebug("document modified %s", (m_modified ? "yes" : "no")); qDebug("document state %d", m_digitizeState); qDebug("document coord frame %d xthetascale %d yrscale %d thetaunits %d", m_coordSettings.frame, m_coordSettings.xThetaScale, m_coordSettings.yRScale, m_coordSettings.thetaUnits); qDebug("document export points selection %d layout %d delimiters %d header %d", m_exportSettings.pointsSelection, m_exportSettings.layout, m_exportSettings.delimiters, m_exportSettings.header); qDebug("document grid removal thinLines '%s' thinThickness %f gridlines '%s' gridDistance %f color '%s' color r=%d/g=%d/b=%d", (m_gridRemovalSettings.removeThinLines ? "yes" : "no"), m_gridRemovalSettings.thinThickness, (m_gridRemovalSettings.removeGridlines ? "yes" : "no"), m_gridRemovalSettings.gridDistance, (m_gridRemovalSettings.removeColor ? "yes" : "no"), m_gridRemovalSettings.color.red(), m_gridRemovalSettings.color.green(), m_gridRemovalSettings.color.blue()); if (m_gridRemovalSettings.gridMesh.initialized) qDebug("document grid removal counts %d/%d steps %f/%f starts %f/%f stops %f/%f", m_gridRemovalSettings.gridMesh.countX, m_gridRemovalSettings.gridMesh.countY, m_gridRemovalSettings.gridMesh.stepX, m_gridRemovalSettings.gridMesh.stepY, m_gridRemovalSettings.gridMesh.startX, m_gridRemovalSettings.gridMesh.startY, m_gridRemovalSettings.gridMesh.stopX, m_gridRemovalSettings.gridMesh.stopY); else qDebug("document grid removal mesh 'uninitialized'"); if (m_gridDisplaySettings.initialized) qDebug("document grid display counts %d/%d steps %f/%f starts %f/%f stops %f/%f", m_gridDisplaySettings.countX, m_gridDisplaySettings.countY, m_gridDisplaySettings.stepX, m_gridDisplaySettings.stepY, m_gridDisplaySettings.startX, m_gridDisplaySettings.startY, m_gridDisplaySettings.stopX, m_gridDisplaySettings.stopY); else qDebug("document grid display mesh 'uninitialized'"); qDebug("document segment settings minpoints %d pointseparation %d linesize %d linecolor %d", m_segmentSettings.minPoints, m_segmentSettings.pointSeparation, m_segmentSettings.lineSize, m_segmentSettings.lineColor); qDebug("document point match settings pointseparation %d pointsize %d", m_pointMatchSettings.pointSeparation, m_pointMatchSettings.pointSize); qDebug("document discretize settings method %d intensity %d/%d foreground %d/%d hue %d/%d saturation %d/%d value %d/%d", m_discretizeSettings.discretizeMethod, m_discretizeSettings.intensityThresholdLow, m_discretizeSettings.intensityThresholdHigh, m_discretizeSettings.foregroundThresholdLow, m_discretizeSettings.foregroundThresholdHigh, m_discretizeSettings.hueThresholdLow, m_discretizeSettings.hueThresholdHigh, m_discretizeSettings.saturationThresholdLow, m_discretizeSettings.saturationThresholdHigh, m_discretizeSettings.valueThresholdLow, m_discretizeSettings.valueThresholdHigh); ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->dump(); ASSERT_ENGAUGE(m_segments != 0); m_segments->dump(); ASSERT_ENGAUGE(m_transform != 0); m_transform->dump(); // since match points list is typically extremely long, which causes // previous information to scroll offscreen, we omit match points here } void DigitDoc::finishMove() { m_modified = true; // recompute transformation and apply to all points. this is wasteful if // only a few pointset points were moved (transformation and most points would be // changed unnecessarily) but the extra time spent is short and this code is simple m_dirtyAxesTransformation = true; m_dirtyScaleTransformation = true; computeTransformation(); sendUpdateGeometry(); } QString DigitDoc::curveCmbText() { ASSERT_ENGAUGE(!m_curveCmbText.isEmpty()); return m_curveCmbText; } QString DigitDoc::measureCmbText() { ASSERT_ENGAUGE(!m_measureCmbText.isEmpty()); return m_measureCmbText; } void DigitDoc::setCurveCmbText(QString curveCmbText) { QStringList list; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->curveNames(&list); if (list.find(curveCmbText) == list.end()) FATAL_ENGAUGE(QObject::tr("could not find %1 among curve names: %2") .arg(curveCmbText.latin1()) .arg(list.join(QString(" ")).latin1())); m_curveCmbText = curveCmbText; } void DigitDoc::setMeasureCmbText(QString measureCmbText) { QStringList list; ASSERT_ENGAUGE(m_pointSets != 0); m_pointSets->measureNames(&list); if (list.find(measureCmbText) == list.end()) FATAL_ENGAUGE(QObject::tr("could not find %1 among measure names: %2") .arg(measureCmbText.latin1()) .arg(list.join(QString(" ")).latin1())); m_measureCmbText = measureCmbText; } void DigitDoc::selectionListChanged() { emit(selectionChange()); } void DigitDoc::showSegments(bool show) { // make segments visible QList updateRectList; ASSERT_ENGAUGE(m_segments != 0); m_segments->showSegments(show, m_segmentSettings, &updateRectList); // do not update using updateRectList since that suffers from bad flicker slotUpdateViews(0, m_canvas.rect()); } void DigitDoc::setViewPointSelection(ViewPointSelection viewPointSelection) { m_viewPointSelection = viewPointSelection; ASSERT_ENGAUGE(m_pointSets != 0); switch (viewPointSelection) { case ViewAxesPoints: m_pointSets->showAxesPoints(); break; case ViewScalePoints: m_pointSets->showScalePoints(); break; case ViewCurvePoints: m_pointSets->showCurvePoints(m_curveCmbText); break; case ViewMeasurePoints: m_pointSets->showMeasurePoints(m_measureCmbText); break; case ViewAllPoints: m_pointSets->showAllPoints(); break; } slotUpdateViews(0, m_canvas.rect()); } ViewPointSelection DigitDoc::viewPointSelection() { return m_viewPointSelection; } void DigitDoc::setBackground(BackgroundSelection selection) { m_backgroundSelection = selection; m_canvas.setBackground(selection); } BackgroundSelection DigitDoc::background() { return m_backgroundSelection; } void DigitDoc::highlightCandidateMatchPoint(const QPoint &p) { ASSERT_ENGAUGE(m_digitizeState == PointMatchState); Discretize discretize; if (discretize.processedPixelIsOn(m_processedImage, p.x(), p.y())) { // pixel is on bool found = (m_samplePointPixels.size() > 0); if (found) found = m_samplePointPixels.containsPoint(QPoint(p.x(), p.y()), Qt::OddEvenFill); if (!found) { // if max point size is set to huge value, the n-squared search algorithm will bog down // so show user the wait cursor. bog was seen for a pixel count of about 8000 QApplication::setOverrideCursor(Qt::WaitCursor); // process new point m_samplePointPixels.resize(0); PointMatch pointMatch; pointMatch.isolateSampleMatchPoint(&m_samplePointPixels, m_processedImage, m_pointMatchSettings, p.x(), p.y()); addSampleMatchPointToViews(); QApplication::restoreOverrideCursor(); } return; } // pixel is off m_samplePointPixels.resize(0); removeSampleMatchPointFromViews(); } void DigitDoc::addSampleMatchPointToViews() { DigitView* view; for(view = m_viewList->first(); view != 0; view = m_viewList->next()) view->addSampleMatchPoint(m_samplePointPixels); } void DigitDoc::removeSampleMatchPointFromViews() { DigitView* view; for(view = m_viewList->first(); view != 0; view = m_viewList->next()) view->removeSampleMatchPoint(); } bool DigitDoc::matchSamplePoint(QPoint p) { // fail if there is no sample point under the cursor if (!m_samplePointPixels.containsPoint(QPoint(p.x(), p.y()), Qt::OddEvenFill)) return false; // start with existing points in current pointset Q3PointArray pointsExisting = m_pointSets->curveCoordinates(m_curveCmbText); // matching step is slow (on the order of several seconds) so show hourglass QApplication::setOverrideCursor(Qt::WaitCursor); // assemble list of matching points QList pointsCreated; PointMatch::matchSamplePoint(m_processedImage, m_pointMatchSettings, m_samplePointPixels, pointsExisting, &pointsCreated); // computations are over QApplication::restoreOverrideCursor(); if (pointsCreated.count() < 1) { QMessageBox::critical(0, tr("Point Match Error!"), tr("No points successfully matched the sample point!\n" "Skipping the matching of sample points using arrow keys"), QMessageBox::Ok, Qt::NoButton); } else { QList updateRectList; ASSERT_ENGAUGE(m_matchSet != 0); m_matchSet->addCreatedPointsToCanvas(&m_canvas, curveStyle(m_curveCmbText), m_pointMatchSettings, &pointsCreated, &updateRectList); // update all views updateFromList(&updateRectList); forwardNormalMsg(QString(tr("Right=Accept, Space=Reject, Left=Remove. Select to exit"))); } return true; } void DigitDoc::matchPointAccept() { QList updateRectList; ASSERT_ENGAUGE(m_matchSet != 0); if (m_matchSet->matchPointAccept(&updateRectList)) { // update all views updateFromList(&updateRectList); } } void DigitDoc::matchPointReject() { QList updateRectList; ASSERT_ENGAUGE(m_matchSet != 0); if (m_matchSet->matchPointReject(&updateRectList)) { // update all views updateFromList(&updateRectList); } } void DigitDoc::matchPointRemove() { QList updateRectList; ASSERT_ENGAUGE(m_matchSet != 0); if (m_matchSet->matchPointRemove(&updateRectList)) { // update all views updateFromList(&updateRectList); } } void DigitDoc::cleanUpAcceptedPoints(DigitizeState state) { QList acceptedPoints; collectAcceptedPoints(&acceptedPoints); if (acceptedPoints.count() > 0) { // accepted points can only be saved as curve or measure points. show a dialog box // asking how points should be saved, with the default set according to the new state QString msg; msg = QString("There are %1 accepted points.\n\nHow should they be saved?") .arg(acceptedPoints.count()); int buttonDefault = 2; if (state == CurveState) buttonDefault = 0; else if (state == MeasureState) buttonDefault = 1; int buttonChose = QMessageBox::information(0, title(), msg, QString(tr("Curve")), QString(tr("Measure")), QString(tr("Do not save")), buttonDefault, 2); if (buttonChose == 0) { m_digitizeState = CurveState; addAcceptedPoints(&acceptedPoints); } else if (buttonChose == 1) { m_digitizeState = MeasureState; addAcceptedPoints(&acceptedPoints); } } clearAcceptedPoints(); } void DigitDoc::collectAcceptedPoints(QList* acceptedPoints) { // get accepted points in point match ASSERT_ENGAUGE(m_matchSet != 0); m_matchSet->acceptedPoints(acceptedPoints); } void DigitDoc::addAcceptedPoints(QList* acceptedPoints) { QList::iterator itr; ASSERT_ENGAUGE(acceptedPoints != 0); for (itr = acceptedPoints->begin(); itr != acceptedPoints->end(); ++itr) addPoint((*itr).x(), (*itr).y()); } void DigitDoc::clearAcceptedPoints() { QList updateRectList; m_matchSet->clear(&updateRectList); sendUpdateGeometry(); // update all views. the previous call to sendUpdateGeometry cleaned // up the points, but it left behind the highlights updateFromList(&updateRectList); } bool DigitDoc::geometryInfoCurve(GeometryWindowItemList& rInfo) { ASSERT_ENGAUGE(m_pointSets != 0); bool mod = m_pointSets->modifiedGeometryCurve(m_curveCmbText); if (mod) { computeTransformation(); ASSERT_ENGAUGE(m_transform != 0); m_pointSets->geometryInfoCurve( m_transform->validAxes() || m_transform->validScale(), m_coordSettings.frame == Cartesian, m_curveCmbText, rInfo); } return mod; } bool DigitDoc::geometryInfoMeasure(GeometryWindowItemList& rInfo) { ASSERT_ENGAUGE(m_pointSets != 0); bool mod = m_pointSets->modifiedGeometryMeasure(m_measureCmbText); if (mod) { computeTransformation(); ASSERT_ENGAUGE(m_transform != 0); m_pointSets->geometryInfoMeasure( m_transform->validAxes() || m_transform->validScale(), m_coordSettings.frame == Cartesian, m_measureCmbText, rInfo); } return mod; } void DigitDoc::sendUpdateGeometry() { emit(updateGeometry()); } bool DigitDoc::findView(DigitView* viewLookup) { DigitView* view; for(view = m_viewList->first(); view != 0; view = m_viewList->next()) { if (view == viewLookup) return true; } return false; } void DigitDoc::DigitCanvas::setBackground(BackgroundSelection selection) { switch (selection) { case BlankBackground: { QPixmap empty(m_doc->originalPixmap().width(), m_doc->originalPixmap().height()); empty.fill(Qt::white); Q3Canvas::setBackgroundPixmap(empty); } break; case OriginalImage: Q3Canvas::setBackgroundPixmap(m_doc->originalPixmap()); break; case ProcessedImage: Q3Canvas::setBackgroundPixmap(m_doc->processedPixmap()); break; } updateBackground(); } void DigitDoc::DigitCanvas::updateBackground() { // according to QCanvas::drawBackground documentation this is needed to force the redraw setChanged(QRect(0, 0, m_doc->originalImage().width(), m_doc->originalImage().height())); } QPixmap DigitDoc::curveThumbnail(QString name) { ASSERT_ENGAUGE(m_pointSets != 0); return m_pointSets->curveThumbnail(name); } QPixmap DigitDoc::measureThumbnail(QString name) { ASSERT_ENGAUGE(m_pointSets != 0); return m_pointSets->measureThumbnail(name); } void DigitDoc::scanForAxes(double xMinG, double xMaxG, double yMinG, double yMaxG) { ScanForAxes scanner(xMinG, xMaxG, yMinG, yMaxG, this); scanner.execute(); } void DigitDoc::startShowOnlySelectedCurve() { if (!m_inViewPointSelectionOverride) { m_inViewPointSelectionOverride = true; // store initial selection before overriding m_viewPointSelectionSaved = m_viewPointSelection; // override selection setViewPointSelection(ViewCurvePoints); } } void DigitDoc::stopShowOnlySelectedCurve() { if (m_inViewPointSelectionOverride) { m_inViewPointSelectionOverride = false; // restore initial selection before override setViewPointSelection(m_viewPointSelectionSaved); } } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void DigitDoc::slotUpdateViews(DigitView* sender, QRect boundingRect) { // TODO - consider changing this from a slot to a regular member function DigitView* view; for(view = m_viewList->first(); view != 0; view = m_viewList->next()) view->update(sender, boundingRect); } engauge-digitizer-5.2/src/digitdoc.h000066400000000000000000000455401222557406400175300ustar00rootroot00000000000000/*************************************************************************** digitdoc.h - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITDOC_H #define DIGITDOC_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include //Added by qt3to4: #include #include #include #include "pointset.h" #include "digitdef.h" #include "digitview.h" #include "mmsubs.h" class PointSets; class Segment; class Segments; class MatchSet; class Transform; class Grid; const QString extensionCsv(".csv"); const QString extensionDig(".dig"); // this class provides a document object for in the document-view model. // // there are a lot of helper classes since the document has so many important duties // that a single monolithic class would be unwieldy class DigitDoc : public QObject { Q_OBJECT friend class DigitView; public: DigitDoc(DigitizeState state); ~DigitDoc(); // imported documents need to be setup with defaults void initDefaults(); // adds a view to the document which represents the document contents void addView(DigitView* view); // removes a view from the list of currently connected views void removeView(DigitView* view); // gets called if a view is removed or added void changedViewList(); // returns the first view instance DigitView* firstView(){ return m_viewList->first(); }; // returns true, if the requested view is the last view of the document bool isLastView(); // return true if view pointer points to valid view bool findView(DigitView* view); // modified flag for the document is true after document has been modified void setModified(bool modified = true) { m_modified = modified; }; bool modified() { return m_modified; }; // return true if there is an action to undo or redo bool isActionToUndo(); bool isActionToRedo(); // edit operations void undo(); void redo(); void cut(DigitView* view); void copy(DigitView* view); void paste(DigitView* view); // initializes a new document by importing an image file bool importFile(const QString &filename, const char* format = 0); // initializes a new document by importing a dragged image bool importImage(const QImage &image); // initializes a new document by importing a dragged pixmap bool importPixmap(const QPixmap &pixmap); // loads the document and emits the updateViews() signal bool openDocument(const QString &filename); // saves the document bool saveDocument(const QString &filename); // exports the document bool exportDocument(const QString &filename); // sets the file name for the saved and exported files void setSavePath(const QString &filename); void setExportPath(const QString &filename); // returns the file names of the current document file and the last exported file const QString &savePath() const { return m_savePath; } const QString &exportPath() const { return m_exportPath; } // sets the filename of the document void setTitle(const QString &title) { m_title = title; } // returns the title of the document const QString &title() const { return m_title; } // returns the saved flag bool isExistingSaveFile(void) const { return m_saveFileExists; } // returns the exported flag bool isExistingExportFile(void) const { return m_exportFileExists; } // marking a file as exported is useful when automatically exporting, so // that the file will be saved without a save file dialog box appearing void markFileAsExported() { m_exportFileExists = true; } // canvasviews can access the document canvas Q3Canvas* canvas() { return (Q3Canvas*) &m_canvas; } // returns pointsets container belonging to this document const PointSets* pointSets(void) { return m_pointSets; } // replace current pointset list with the specified pointset list. both lists are optional void replacePointSets(PointSets* pointSets, QStringList* curvesWithOrphanedPoints, QStringList* measuresWithOrphanedPoints); // show cursor location in the statusbar, after converting from screen to graph coordinates void trackCursor(const QPoint &); // in point match mode, look for candidate match point under cursor void highlightCandidateMatchPoint(const QPoint &); // last curve choice in combobox. this persists across sessions QString curveCmbText(); void setCurveCmbText(QString curveCmbText); // last measure choice in combobox. this persists across sessions QString measureCmbText(); void setMeasureCmbText(QString measureCmbText); // get curve and measure names from pointset list. these will be shown in combobox void curveNames(QStringList* list); void measureNames(QStringList* list); // returns the number of axis and scale bar points int axisPointCount(void); int scalePointCount(void); // return whether or not the axis (need 3 points) or scale bar (need 2 points) points form // a valid transformation bool validAxes(void); bool validScale(void); // return whether or not the axis point is consistent with log (sometimes) or linear (always) coordinates bool validAxisPoint(double xTheta, double yR); // convert screen into graph coordinates, using screen/graph, cartesian/polar, linear/log transformations void screenToXThetaYR(int xScreen, int yScreen, double* xTheta, double* yR); // forward normal message to statusbar void forwardNormalMsg(QString text); // forward permanent message to statusbar void forwardPermanentMsg(QString text); // all documents are kept in the same digitize state DigitizeState digitizeState(void) { return m_digitizeState; } void setDigitizeState(DigitizeState state); // add axis or curve point, depending on state. axis point graph coordinates are set later by // setAxisPoint so user can see where the new axis point lies while editing the graph coordinatees Point* addPoint(int xScreen, int yScreen); // add axis point without user intervention void addAxisPoint(int xScreen, int yScreen, double xGraph, double yGraph); // change graph coordinates of an axis or scale bar point void setAxisPoint(Point* p, double xThetaGraph, double yRGraph); void setScalePoint(Point* p, double x, double y); // remove axis or scale bar point during its creation since user canceled editing of its graph coordinates void removeGestatingPoint(Point* p); // get and set methods for coordinates settings CoordSettings coordSettings(void) { return m_coordSettings; } void setCoordSettings(CoordSettings settings); // get and set methods for pointset styles of axes, scale bar, curve and matchset pointsets PointSetStyle axesStyle(void); PointSetStyle curveStyle(QString name); PointSetStyle scaleStyle(void); void setAxesStyle(PointSetStyle pointSetStyle); void setMatchSetStyle(PointSetStyle pointSetStyle); void setScaleStyle(PointSetStyle pointSetStyle); // get and set methods for export settings ExportSettings exportSettings(void) { return m_exportSettings; } void setExportSettings(ExportSettings settings) { m_modified = true; m_exportSettings = settings; } // get and set methods for grid removal line settings void setGridRemovalSettings(GridRemovalSettings settings); GridRemovalSettings gridRemovalSettings(void) { return m_gridRemovalSettings; } // get and set methods for discretization settings void setDiscretizeSettings(DiscretizeSettings settings); DiscretizeSettings discretizeSettings(void) { return m_discretizeSettings; } // get and set methods for grid and grid line settings bool gridDisplay(void); void showGridDisplay(bool toggle); void setGridDisplaySettings(GridMeshSettings settings, bool show); GridMeshSettings gridDisplaySettings(void) { return m_gridDisplaySettings; } // get and set methods for segment settings void setSegmentSettings(SegmentSettings settings); SegmentSettings segmentSettings(void) { return m_segmentSettings; } // get and set methods for point match settings void setPointMatchSettings(PointMatchSettings settings); PointMatchSettings pointMatchSettings(void) { return m_pointMatchSettings; } // transform. it is set internally using the axes points const Transform* transform(void) { return m_transform; } // update transformation, grid display, and graph coordinates after a move void finishMove(void); // print document void print(void); // forward notice of selection list change to main window void selectionListChanged(void); // match the sample point under the specified cursor position, returning false if there // is no point there bool matchSamplePoint(QPoint p); // add accepted, add rejected or remove one match point void matchPointAccept(void); void matchPointReject(void); void matchPointRemove(void); // selected points for viewing set and get methods void setViewPointSelection(ViewPointSelection viewPointSelection); ViewPointSelection viewPointSelection(void); // background set and get methods void setBackground(BackgroundSelection selection); BackgroundSelection background(void); // canvas bounds rectangle QRect bounds(void) { return QRect(QPoint(0, 0), m_canvas.size()); } // geometry info for the active curve or measure pointset. return true if info has changed bool geometryInfoCurve(GeometryWindowItemList& rInfo); bool geometryInfoMeasure(GeometryWindowItemList& rInfo); // send updateGeometry signal void sendUpdateGeometry(void); // is specified file version supported? bool supportedVersionNumber(QString versionString); // return original and processed images for copying and modifying externally const QImage &originalImage(void) { return m_originalImage; } const QPixmap &originalPixmap(void) { return m_originalPixmap; } const QImage &processedImage(void) { return m_processedImage; } const QPixmap &processedPixmap(void) { return m_processedPixmap; } // filters for opening and closing files. these are not document specific static QString filterImport(); static QString filterOpenSave(); // thumbnails for digitize toolbar comboboxes QPixmap curveThumbnail(QString name); QPixmap measureThumbnail(QString name); // scan for x and y axes in newly imported document. this is only invoked from // the command line because external scripts can, in some cases, fill in the // axes geometry information. the x axis is assumed to be near the bottom of the // image and the y axis is assumed to be near the left side of the image void scanForAxes(double xMinG, double xMaxG, double yMinG, double yMaxG); // for current view only, override the document's view state to show points in the // selected curve. every call to startShowOnlySelectedCurve must be followed by a // call to stopShowOnlySelectedCurve void startShowOnlySelectedCurve(); void stopShowOnlySelectedCurve(); // debug void dump(void); signals: // send normal message to statusbar void normalMsg(const QString &text); // send permanent message to statusbar void permanentMsg(const QString &text); // send temporary message to statusbar void temporaryMsg(const QString &text); // send tracking message to statusbar void trackingMsg(const QString &textCoords, const QString &textRes); // selection just changed void selectionChange(void); // transformation transitioned from valid to invalid, or vice versa void transformationChange(void); // update geometry info of curve and measure pointsets if they have been modified. forwarded to DigitMain void updateGeometry(void); public slots: // calls repaint() on all views connected to the document object and is called by // the view that changed the document. as this view normally repaints itself, it // is excluded from the paintEvent void slotUpdateViews(DigitView* sender, QRect boundingRect); private: enum { MagicNumber = 0xcafe }; // helper class that wraps around QCanvas to enable hiding background pixmap. initially the // pixmap was left in place and the QCanvas::drawBackground calls were intercepted, but this // left garbage after (1) foreground objects disappeared, and (2) scrolls class DigitCanvas : public Q3Canvas { public: DigitCanvas(DigitDoc* doc) : m_doc(doc) {} ~DigitCanvas() {} // set and get methods for state void setBackground(BackgroundSelection selection); // background update void updateBackground(void); private: DigitDoc* m_doc; }; // display context-sensitive cursors void setViewCursor(DigitView* view); // load original image into canvas during import or open void loadOriginalPixmap(void); // remove gridlines from original image and discretize, then break processed image into segments void processOriginalPixmap(void); // compute pleasing grid display line settings, returning true if successful void initGridMesh(GridMeshSettings* gridSettings); void initGridRemovalMesh(void); void initGridDisplayMesh(void); // show segments if flag is set void showSegments(bool show); // update the axes and scale bar transformations, and use whichever works. if there is incomplete // (insufficient points) or inconsistent information (collocated or collinear points), this exits // gracefully. if successful, all curve and measure point coordinates are updated and the grid lines are moved void computeTransformation(void); // rebuild the grid display lines, usually just after updating the transformation, but also after // modifying the grid display settings. if there are not enough axis points, or the axis points are // badly defined, this exits gracefully void makeGridDisplayLines(void); // update screen regions described by rectangles void updateFromList(QList* updateRectList); // tell all views to add or remove a sample match point void addSampleMatchPointToViews(void); void removeSampleMatchPointFromViews(void); // cleanup for state transition from point match to another state void cleanUpAcceptedPoints(DigitizeState state); void collectAcceptedPoints(QList* acceptedPoints); void addAcceptedPoints(QList* acceptedPoints); void clearAcceptedPoints(void); // pointsets owned by this document. each pointset has any number of points PointSets* m_pointSets; // segments that have been scanned in from the original image Segments* m_segments; // match points produced and used in point match mode. this is cleared when leaving point match mode MatchSet* m_matchSet; // gridlines for display. gridlines for removal are implicit in m_processedPixmap Grid* m_gridDisplay; // the dirty flag of the current document bool m_modified; QString m_title; QString m_savePath; // this is set to import path with appropriate file extension as default during import QString m_exportPath; // the first save after import is confirmed so user can select a new directory and edit the filename bool m_saveFileExists; // the first export after import is confirmed so user can select a new directory and edit the filename bool m_exportFileExists; // the list of the views currently connected to the document Q3PtrList* m_viewList; // points selected for viewing ViewPointSelection m_viewPointSelection; // used to stash m_viewPointSelection during temporary overrides by startShowOnlySelectedCurve bool m_inViewPointSelectionOverride; // state machine with two states allows only safe transitions ViewPointSelection m_viewPointSelectionSaved; // original scanned image is processed by gridline removal code, and available for m_canvas display // (in either original or processed form). // // m_originalImage and m_processedImage are QImage versions of m_originalPixmap and // m_processedPixmap, and should not be considered a waste of memory since // QImages are created anyway during the processing that creates the pixmaps BackgroundSelection m_backgroundSelection; QPixmap m_originalPixmap; QImage m_originalImage; QPixmap m_processedPixmap; QImage m_processedImage; // canvas is composed of scanned image (either original or discretized) as the // background, and drawn points DigitCanvas m_canvas; // digitize state is determined by the digitize toolbar DigitizeState m_digitizeState; // for the active document, these mirror the contents of the curve and measure combobox QString m_curveCmbText; QString m_measureCmbText; // coordinates settings CoordSettings m_coordSettings; // export settings determine the format of exported files ExportSettings m_exportSettings; // grid removal line settings GridRemovalSettings m_gridRemovalSettings; // grid display line settings GridMeshSettings m_gridDisplaySettings; // segment settings SegmentSettings m_segmentSettings; // point match settings PointMatchSettings m_pointMatchSettings; // transform owned by this document Transform* m_transform; // discretize settings DiscretizeSettings m_discretizeSettings; // true if axes or scale transformation is out of date. without // these flags, the transformations would be recomputed at least // once every event (including focusIn). since any popup warning // made by the transformation code causes a focusIn event while // returning to the main window, an infinite loop would otherwise // occur bool m_dirtyAxesTransformation; bool m_dirtyScaleTransformation; // candidate sample point for point match, represented as a set of pixels in original image QPolygon m_samplePointPixels; }; #endif // DIGITDOC_H engauge-digitizer-5.2/src/digitizer.rc000066400000000000000000000032661222557406400201100ustar00rootroot00000000000000//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON1 ICON DISCARDABLE "img\Digitizer.ico" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED engauge-digitizer-5.2/src/digitmain.cpp000066400000000000000000003137441222557406400202460ustar00rootroot00000000000000/*************************************************************************** digitmain.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #ifdef WIN32 #include #endif #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "digitview.h" #include "digitdoc.h" #include "digitmain.h" #include "img/fileimport.xpm" #include "img/fileopen.xpm" #include "img/filesave.xpm" #include "img/fileexport.xpm" #include "img/digitselectlarge.xpm" #include "img/digitselectsmall.xpm" #include "img/digitaxislarge.xpm" #include "img/digitaxissmall.xpm" #include "img/digitscalelarge.xpm" #include "img/digitscalesmall.xpm" #include "img/digitcurvelarge.xpm" #include "img/digitcurvesmall.xpm" #include "img/digitsegmentlarge.xpm" #include "img/digitsegmentsmall.xpm" #include "img/digitmatchlarge.xpm" #include "img/digitmatchsmall.xpm" #include "img/digitmeasurelarge.xpm" #include "img/digitmeasuresmall.xpm" #include "img/bannerapp.xpm" #include "coordsysdlg.h" #include "pointsetdlg.h" #include "pointsetsdlg.h" #include "gridmeshdlg.h" #include "gridremovaldlg.h" #include "discretizedlg.h" #include "curvecmb.h" #include "measurecmb.h" #include "zoomcmb.h" #include "pointsets.h" #include "exportdlg.h" #include "segmentdlg.h" #include "digitdebug.h" #include "clipboard.h" #include "geometrydlg.h" #include "helpwindow.h" #include "pointmatchdlg.h" #include "main.h" #include "defaultsettings.h" #include "sessionsdlg.h" #include "osxsubs.h" /// Helper Functions to emulate Qt3 QAction constructors QAction* createAction(QObject * parent, const char * name = 0) { QAction *f = new QAction(name, parent); return f; } QAction* createAction(const QString & menuText, QKeySequence accel, QObject * parent, const char * ) { QAction *f = createAction(parent, menuText); f->setShortcut(accel); f->setText(menuText); return f; } QAction* createAction( const QIconSet & icon, const QString & menuText, const QString & accel, QObject * parent, const char * name = 0 ) { QAction *f = createAction(menuText, accel, parent, name); f->setIcon(icon); return f; } QAction* createAction( const QString & text, const QIconSet & icon, const QString &, const QString& accel, QObject * parent, const char * name = 0, bool toggle = FALSE ) { QAction *f = createAction(icon, text, accel, parent, name); f->setCheckable(toggle); return f; } QAction* createAction( const QString & text, const QString &, QKeySequence accel, QObject * parent, const char * name = 0, bool toggle = FALSE ) { QAction *f = createAction(text, accel, parent, name); f->setCheckable(toggle); return f; } extern QDir cmdManualDirectory; extern bool cmdOnlyBmp; DigitMain::DigitMain(QString exportFileAtShutdown) : m_activeView(0), m_exportFileAtShutdown(exportFileAtShutdown) { DigitDebug::ctor(QString("digitmain ") + QString::number((ulong) this, 16)); setCaption(tr("Engauge Digitizer %1%2") .arg(VersionNumber) .arg(freewareCaption)); printer = new QPrinter; CHECK_PTR_ENGAUGE(printer); docList = new Q3PtrList(); CHECK_PTR_ENGAUGE(docList); docList->setAutoDelete(true); QPixmap bannerIcon(bannerapp_xpm); setIcon(bannerIcon); // enable import by dropping setAcceptDrops(true); // display main window in previous position with same size DefaultSettings& rSettings = DefaultSettings::instance(); move(rSettings.getWindowMainPosition()); resize(rSettings.getWindowMainSize()); // call inits to invoke all other construction parts initView(); initActions(); initMenuBar(); initToolBars(); initStatusBar(); initGeometryInfo(); viewFileToolBar->setOn(rSettings.getViewFileToolbar()); viewSelectToolBar->setOn(rSettings.getViewSelectToolbar()); viewImageScaleToolBar->setOn(rSettings.getViewImageScaleToolbar()); viewDigitizeCurvePointsToolBar->setOn(rSettings.getViewDigitizeCurvePointsToolbar()); viewDigitizeMeasurePointsToolBar->setOn(rSettings.getViewDigitizeMeasurePointsToolbar()); viewZoomToolBar->setOn(rSettings.getViewZoomToolbar()); viewStatusBar->setOn(rSettings.getViewStatusBar()); viewAxesPoints->setOn(ViewAxesPoints == rSettings.getViewPoints()); viewScalePoints->setOn(ViewScalePoints == rSettings.getViewPoints()); viewCurvePoints->setOn(ViewCurvePoints == rSettings.getViewPoints()); viewMeasurePoints->setOn(ViewMeasurePoints == rSettings.getViewPoints()); viewAllPoints->setOn(ViewAllPoints == rSettings.getViewPoints()); viewNoBackground->setOn(BlankBackground == rSettings.getViewBackground()); viewOriginalImage->setOn(OriginalImage == rSettings.getViewBackground()); viewProcessedImage->setOn(ProcessedImage == rSettings.getViewBackground()); viewGridDisplay->setOn(false); // always start with grid display off since it requires transformation viewCurveGeometry->setOn(rSettings.getViewCurveGeometry()); viewMeasureGeometry->setOn(rSettings.getViewMeasureGeometry()); toggleActions(); } DigitMain::~DigitMain() { DigitDebug::dtor(QString("digitmain ") + QString::number((ulong) this, 16)); delete printer; delete docList; delete curveGeometryDlg; delete measureGeometryDlg; } void DigitMain::initActions() { // xpm files created by gimp will give the compilation error // "warning: deprecated conversion from string constant to char*" during compilation. // these warnings can be prevented by inserting "const" in between "static" and "char*" QPixmap importIcon(fileimport_xpm); QPixmap openIcon(fileopen_xpm); QPixmap saveIcon(filesave_xpm); QPixmap exportIcon(fileexport_xpm); QPixmap pixmapSelectSmall(digitselectsmall_xpm), pixmapSelectLarge(digitselectlarge_xpm); QPixmap pixmapAxisSmall(digitaxissmall_xpm), pixmapAxisLarge(digitaxislarge_xpm); QPixmap pixmapScaleSmall(digitscalesmall_xpm), pixmapScaleLarge(digitscalelarge_xpm); QPixmap pixmapCurveSmall(digitcurvesmall_xpm), pixmapCurveLarge(digitcurvelarge_xpm); QPixmap pixmapSegmentSmall(digitsegmentsmall_xpm), pixmapSegmentLarge(digitsegmentlarge_xpm); QPixmap pixmapMatchSmall(digitmatchsmall_xpm), pixmapMatchLarge(digitmatchlarge_xpm); QPixmap pixmapMeasureSmall(digitmeasuresmall_xpm), pixmapMeasureLarge(digitmeasurelarge_xpm); QIcon selectIcons(pixmapSelectSmall); QIcon axisIcons(pixmapAxisSmall); QIcon scaleIcons(pixmapScaleSmall); QIcon curveIcons(pixmapCurveSmall); QIcon segmentIcons(pixmapSegmentSmall); QIcon matchIcons(pixmapMatchSmall); QIcon measureIcons(pixmapMeasureSmall); fileImport = createAction(tr("&Import File"), importIcon, tr("&Import"), tr("Ctrl+I"), this); CHECK_PTR_ENGAUGE(fileImport); fileImport->setStatusTip(tr("Creates a new document by importing an image")); fileImport->setWhatsThis(tr("New File\n\nCreates a new document by importing an image")); connect(fileImport, SIGNAL(activated()), this, SLOT(slotFileImport())); fileOpen = createAction(tr("&Open Document"), openIcon, tr("&Open..."), tr("Ctrl+O"), this); CHECK_PTR_ENGAUGE(fileOpen); fileOpen->setStatusTip(tr("Opens an existing document")); fileOpen->setWhatsThis(tr("Open Document\n\nOpens an existing document")); connect(fileOpen, SIGNAL(activated()), this, SLOT(slotFileOpen())); fileOpenRecent = new QMenu(tr("Open Recent Document"), this); //createAction(tr("Open Recent Document"), tr("Open Recent..."), 0, this); //CHECK_PTR_ENGAUGE(fileOpenRecent); //fileOpenRecent->setStatusTip(tr("Opens a recent document")); //fileOpenRecent->setWhatsThis(tr("Open File\n\nOpens a recent document")); fileClose = createAction(tr("&Close Document"), tr("&Close"), tr("Ctrl+W"), this); CHECK_PTR_ENGAUGE(fileClose); fileClose->setStatusTip(tr("Closes the current document")); fileClose->setWhatsThis(tr("Close Document\n\nCloses the current document")); connect(fileClose, SIGNAL(activated()), this, SLOT(slotFileClose())); fileSave = createAction(tr("&Save Document"), saveIcon, tr("&Save"), tr("Ctrl+S"), this); CHECK_PTR_ENGAUGE(fileSave); fileSave->setStatusTip(tr("Saves the current document")); fileSave->setWhatsThis(tr("Save Document\n\nSaves the current document")); connect(fileSave, SIGNAL(activated()), this, SLOT(slotFileSave())); fileSaveAs = createAction(tr("Save Document &As"), tr("Save &as..."), tr("Ctrl+A"), this); CHECK_PTR_ENGAUGE(fileSaveAs); fileSaveAs->setStatusTip(tr("Saves the current document under a new filename")); fileSaveAs->setWhatsThis(tr("Save As\n\nSaves the current document under a new filename")); connect(fileSaveAs, SIGNAL(activated()), this, SLOT(slotFileSaveAs())); fileExport = createAction(tr("&Export File"), exportIcon, tr("&Export"), tr("Ctrl+E"), this); CHECK_PTR_ENGAUGE(fileExport); fileExport->setStatusTip(tr("Exports the current document into a text file")); fileExport->setWhatsThis(tr("Export File\n\nExports the current document into a text file")); connect(fileExport, SIGNAL(activated()), this, SLOT(slotFileExport())); fileExportAs = createAction(tr("Export File As"), tr("Export As..."), 0, this); CHECK_PTR_ENGAUGE(fileExportAs); fileExportAs->setStatusTip(tr("Exports the current document into a text file under a new filename")); fileExportAs->setWhatsThis(tr("Export As\n\nExports the current document into a text file under a new filename")); connect(fileExportAs, SIGNAL(activated()), this, SLOT(slotFileExportAs())); filePrint = createAction(tr("&Print File"), tr("&Print"), tr("Ctrl+P"), this); CHECK_PTR_ENGAUGE(filePrint); filePrint->setStatusTip(tr("Prints out the current document")); filePrint->setWhatsThis(tr("Print File\n\nPrints out the current document")); connect(filePrint, SIGNAL(activated()), this, SLOT(slotFilePrint())); fileExit = createAction(tr("E&xit"), tr("E&xit"), tr("Ctrl+Q"), this); CHECK_PTR_ENGAUGE(fileExit); fileExit->setStatusTip(tr("Quits the application")); fileExit->setWhatsThis(tr("Exit\n\nQuits the application")); connect(fileExit, SIGNAL(activated()), this, SLOT(slotFileExit())); editUndo = createAction(tr("&Undo"), tr("&Undo"), tr("Ctrl+U"), this); CHECK_PTR_ENGAUGE(editUndo); editUndo->setStatusTip(tr("Undoes the previous action")); editUndo->setWhatsThis(tr("Undo\n\nUndoes the previous action")); connect(editUndo, SIGNAL(activated()), this, SLOT(slotEditUndo())); editRedo = createAction(tr("&Redo"), tr("&Redo"), tr("Ctrl+R"), this); CHECK_PTR_ENGAUGE(editRedo); editRedo->setStatusTip(tr("Redoes the next action")); editRedo->setWhatsThis(tr("Redo\n\nRedoes the next action")); connect(editRedo, SIGNAL(activated()), this, SLOT(slotEditRedo())); editCut = createAction(tr("Cu&t"), tr("Cu&t"), globalKeyCut, this); CHECK_PTR_ENGAUGE(editCut); editCut->setStatusTip(tr("Cuts the selected section and puts it to the clipboard")); editCut->setWhatsThis(tr("Cut\n\nCuts the selected section and puts it to the clipboard")); connect(editCut, SIGNAL(activated()), this, SLOT(slotEditCut())); editCopy = createAction(tr("&Copy"), tr("&Copy"), globalKeyCopy, this); CHECK_PTR_ENGAUGE(editCopy); editCopy->setStatusTip(tr("Copies the selected section to the clipboard")); editCopy->setWhatsThis(tr("Copy\n\nCopies the selected section to the clipboard")); connect(editCopy, SIGNAL(activated()), this, SLOT(slotEditCopy())); editPaste = createAction(tr("&Paste"), tr("&Paste"), globalKeyPaste, this); CHECK_PTR_ENGAUGE(editPaste); editPaste->setStatusTip(tr("Pastes the clipboard contents to actual position")); editPaste->setWhatsThis(tr("Paste\n\nPastes the clipboard contents to actual position")); connect(editPaste, SIGNAL(activated()), this, SLOT(slotEditPaste())); editPasteAsNew = createAction(tr("Paste As &New"), tr("Paste As &New"), tr("Ctrl+N"), this); CHECK_PTR_ENGAUGE(editPasteAsNew); editPasteAsNew->setStatusTip(tr("Pastes the image in the clipboard as a new document")); editPasteAsNew->setWhatsThis(tr("Paste As New\n\nPastes the image in the clipboard as a new document")); connect(editPasteAsNew, SIGNAL(activated()), this, SLOT(slotEditPasteAsNew())); connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(slotClipboardChanged())); viewFileToolBar = createAction(tr("File Tool&bar"), tr("File Tool&bar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewFileToolBar); viewFileToolBar->setStatusTip(tr("Enables/disables the file toolbar")); viewFileToolBar->setWhatsThis(tr("View File Toolbar\n\nEnables/disables the file toolbar")); connect(viewFileToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewFileToolBar(bool))); viewSelectToolBar = createAction(tr("Select Toolbar"), tr("Select Toolbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewSelectToolBar); viewSelectToolBar->setStatusTip(tr("Enables/disables the select toolbar")); viewSelectToolBar->setWhatsThis(tr("View Digitize Common toolbar\n\nEnables/disables the select toolbar")); connect(viewSelectToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewSelectToolBar(bool))); viewImageScaleToolBar = createAction(tr("Image Scale Toolbar"), tr("Image Scale Toolbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewImageScaleToolBar); viewImageScaleToolBar->setStatusTip(tr("Enables/disables the image scale toolbar")); viewImageScaleToolBar->setWhatsThis(tr("View Image Scale toolbar\n\nEnables/disables the image scale toolbar")); connect(viewImageScaleToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewImageScaleToolBar(bool))); viewDigitizeCurvePointsToolBar = createAction(tr("Digitize Curve Points Toolbar"), tr("Digitize Curve Points Toolbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewDigitizeCurvePointsToolBar); viewDigitizeCurvePointsToolBar->setStatusTip(tr("Enables/disables the toolbar for digitizing curve points")); viewDigitizeCurvePointsToolBar->setWhatsThis(tr("View Digitize Curve Points Scale toolbar\n\nEnables/disables the toolbar for digitizing curve points")); connect(viewDigitizeCurvePointsToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewDigitizeCurvePointsToolBar(bool))); viewDigitizeMeasurePointsToolBar = createAction(tr("Digitize Measure Points Toolbar"), tr("Digitize Measure Points Toolbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewDigitizeMeasurePointsToolBar); viewDigitizeMeasurePointsToolBar->setStatusTip(tr("Enables/disables the toolbar for digitizing measure points")); viewDigitizeMeasurePointsToolBar->setWhatsThis(tr("View Digitize Measure Points Scale toolbar\n\nEnables/disables the toolbar for digitizing measure points")); connect(viewDigitizeMeasurePointsToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewDigitizeMeasurePointsToolBar(bool))); viewZoomToolBar = createAction(tr("&Zoom Toolbar"), tr("&Zoom Toolbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewZoomToolBar); viewZoomToolBar->setStatusTip(tr("Enables/disables the zoom toolbar")); viewZoomToolBar->setWhatsThis(tr("View Zoom Toolbar\n\nEnables/disables the zoom toolbar")); connect(viewZoomToolBar, SIGNAL(toggled(bool)), this, SLOT(slotViewZoomToolBar(bool))); viewStatusBar = createAction(tr("&Statusbar"), tr("&Statusbar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewStatusBar); viewStatusBar->setStatusTip(tr("Enables/disables the statusbar")); viewStatusBar->setWhatsThis(tr("View Statusbar\n\nEnables/disables the statusbar")); connect(viewStatusBar, SIGNAL(toggled(bool)), this, SLOT(slotViewStatusBar(bool))); viewAxesPoints = createAction(tr("Axes Points"), tr("Axes Points"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewAxesPoints); viewAxesPoints->setStatusTip(tr("Show only axes points")); viewAxesPoints->setWhatsThis(tr("View Axes Points\n\nShow only axes points, and hide all other points")); connect(viewAxesPoints, SIGNAL(toggled(bool)), this, SLOT(slotViewAxesPoints(bool))); viewScalePoints = createAction(tr("Scale Bar Points"), tr("Scale Bar Points"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewScalePoints); viewScalePoints->setStatusTip(tr("Show only the scale bar")); viewScalePoints->setWhatsThis(tr("View Scale Bar\n\nShow only the scale bar, and hide all other points")); connect(viewScalePoints, SIGNAL(toggled(bool)), this, SLOT(slotViewScalePoints(bool))); viewCurvePoints = createAction(tr("Curve Points"), tr("Curve Points"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewCurvePoints); viewCurvePoints->setStatusTip(tr("Show only points in the active curve")); viewCurvePoints->setWhatsThis(tr("View Curve Points\n\nShow only points in the active curve, and hide all others")); connect(viewCurvePoints, SIGNAL(toggled(bool)), this, SLOT(slotViewCurvePoints(bool))); viewMeasurePoints = createAction(tr("Measure Points"), tr("Measure Points"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewMeasurePoints); viewMeasurePoints->setStatusTip(tr("Show only points in the active measure")); viewMeasurePoints->setWhatsThis(tr("View Measure Points\n\nShow only points in the active measure, and hide all others")); connect(viewMeasurePoints, SIGNAL(toggled(bool)), this, SLOT(slotViewMeasurePoints(bool))); viewAllPoints = createAction(tr("All Points"), tr("All Points"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewAllPoints); viewAllPoints->setStatusTip(tr("Show all axes, scale bar, curve and measure points")); viewAllPoints->setWhatsThis(tr("View All Points\n\nShow all axes, scale bar, curve and measure points")); connect(viewAllPoints, SIGNAL(toggled(bool)), this, SLOT(slotViewAllPoints(bool))); viewPointsAction = new QActionGroup(this); CHECK_PTR_ENGAUGE(viewPointsAction); viewPointsAction->addAction(viewAxesPoints); viewPointsAction->addAction(viewScalePoints); viewPointsAction->addAction(viewCurvePoints); viewPointsAction->addAction(viewMeasurePoints); viewPointsAction->addAction(viewAllPoints); viewNoBackground = createAction(tr("No Background"), tr("No Background"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewNoBackground); viewNoBackground->setStatusTip(tr("Show no background")); viewNoBackground->setWhatsThis(tr("No Background\n\nShow no background image")); connect(viewNoBackground, SIGNAL(toggled(bool)), this, SLOT(slotViewNoBackground(bool))); viewOriginalImage = createAction(tr("Original Image"), tr("Original Image"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewOriginalImage); viewOriginalImage->setStatusTip(tr("Show original image in the background")); viewOriginalImage->setWhatsThis(tr("View Original Image\n\nShow original image in the background")); connect(viewOriginalImage, SIGNAL(toggled(bool)), this, SLOT(slotViewOriginalImage(bool))); viewProcessedImage = createAction(tr("Processed Image"), tr("Processed Image"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewProcessedImage); viewProcessedImage->setStatusTip(tr("Show processed image in the background")); viewProcessedImage->setWhatsThis(tr("View Processed Image\n\nShow processed image in the background. " "The processed image is the result of removing gridlines from the original image, and " "discretizing the image into black and white. The processed image is used for segment fill, " "and is often less messy than the original image.")); connect(viewProcessedImage, SIGNAL(toggled(bool)), this, SLOT(slotViewProcessedImage(bool))); viewBackgroundAction = new QActionGroup(this); CHECK_PTR_ENGAUGE(viewBackgroundAction); viewBackgroundAction->addAction(viewNoBackground); viewBackgroundAction->addAction(viewOriginalImage); viewBackgroundAction->addAction(viewProcessedImage); viewGridDisplay = createAction(tr("&Gridlines Display"), tr("&Gridlines Display"), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewGridDisplay); viewGridDisplay->setStatusTip(tr("Enables/disables the gridlines display")); viewGridDisplay->setWhatsThis(tr("View Gridlines\n\nEnables/disables the gridlines display")); connect(viewGridDisplay, SIGNAL(toggled(bool)), this, SLOT(slotViewGridDisplay(bool))); viewCurveGeometry = createAction(tr("Curve Geometry"), tr("Curve Geometry &Info..."), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewCurveGeometry); viewCurveGeometry->setStatusTip(tr("Enables/disables the curve geometry information window")); viewCurveGeometry->setWhatsThis(tr("View Curve Geometry\n\nEnables/disables the curve geometry " "information window. Lengths and areas of the active curve are displayed")); connect(viewCurveGeometry, SIGNAL(toggled(bool)), this, SLOT(slotViewCurveGeometry(bool))); viewMeasureGeometry = createAction(tr("Measure Geometry"), tr("Measure Geometry &Info..."), 0, this, 0, true); CHECK_PTR_ENGAUGE(viewMeasureGeometry); viewMeasureGeometry->setStatusTip(tr("Enables/disables the measure geometry information window")); viewMeasureGeometry->setWhatsThis(tr("View Measure Geometry\n\nEnables/disables the measure geometry " "information window. Lengths and areas of the active measure are displayed")); connect(viewMeasureGeometry, SIGNAL(toggled(bool)), this, SLOT(slotViewMeasureGeometry(bool))); digitizeSelect = createAction(tr("Selec&t"), selectIcons, tr("Select"), tr("Ctrl+T"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeSelect); digitizeSelect->setStatusTip(tr("Select one or more points on screen")); digitizeSelect->setWhatsThis(tr("Select\n\nSelect one or more points on screen")); connect(digitizeSelect, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeSelect(bool))); digitizeAxis = createAction(tr("&Axis Point"), axisIcons, tr("Axis Point"), 0, this, 0, true); CHECK_PTR_ENGAUGE(digitizeAxis); digitizeAxis->setStatusTip(tr("Digitizes an axis point")); digitizeAxis->setWhatsThis(tr("Digitize Axis Point\n\nDigitizes an axis point by placing a new point " "at the cursor. The coordinates of the axis point are then entered. In a graph, three axis points are " "required to define the coordinates")); connect(digitizeAxis, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeAxis(bool))); digitizeScale = createAction(tr("Scale &Bar"), scaleIcons, tr("Scale Bar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(digitizeScale); digitizeScale->setStatusTip(tr("Digitizes a scale bar")); digitizeScale->setWhatsThis(tr("Digitize Scale Bar\n\nDigitizes a scale bar by placing a new point " "at the cursor. The length of the scale bar is entered. In a map, a scale bar is required to " "define the coordinate scale\n\nThis can only be used with linear cartesian coordinates, so it " "will be unavailable if log and/or polar coordinates have been selected")); connect(digitizeScale, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeScale(bool))); digitizeCurve = createAction(tr("Cu&rve Point"), curveIcons, tr("Curve Point"), tr("Ctrl+R"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeCurve); digitizeCurve->setStatusTip(tr("Digitizes a curve point")); digitizeCurve->setWhatsThis(tr("Digitize Curve Point\n\nDigitizes a single curve point under the cursor\n\n" "New points will be assigned to the currently active curve")); connect(digitizeCurve, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeCurve(bool))); digitizeSegment = createAction(tr("Se&gment Fill"), segmentIcons, tr("Segment Fill"), tr("Ctrl+G"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeSegment); digitizeSegment->setStatusTip(tr("Digitizes curve points along a curve segment")); digitizeSegment->setWhatsThis(tr("Digitize Segment Fill\n\nDigitizes a curve segment by placing curve points " "along the segment under the cursor\n\n" "New points will be assigned to the currently active curve")); connect(digitizeSegment, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeSegment(bool))); digitizePointMatch = createAction(tr("Point Matc&h"), matchIcons, tr("Point Match"), tr("Ctrl+H"), this, 0, true); CHECK_PTR_ENGAUGE(digitizePointMatch); digitizePointMatch->setStatusTip(tr("Digitizes curve points in a point plot by matching a point")); digitizePointMatch->setWhatsThis(tr("Digitize Curve Points by Point Matching\n\nDigitizes curve points in a " "point plot by finding points that match a sample point\n\n" "New points will be assigned to the currently active curve")); connect(digitizePointMatch, SIGNAL(toggled(bool)), this, SLOT(slotDigitizePointMatch(bool))); digitizeMeasure = createAction(tr("&Measure Point"), measureIcons, tr("Measure Point"), tr("Ctrl+M"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeMeasure); digitizeMeasure->setStatusTip(tr("Digitizes a measure point for measuring length and area")); digitizeMeasure->setWhatsThis(tr("Digitize Measure Point\n\nDigitizes a measure point by placing a new point " "at the cursor. Measure points give length and area values for the underlying regions\n\n" "New points will be assigned to the currently active measure")); connect(digitizeMeasure, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeMeasure(bool))); digitizeAction = new QActionGroup(this); CHECK_PTR_ENGAUGE(digitizeAction); digitizeAction->addAction(digitizeSelect); digitizeAction->addAction(digitizeAxis); digitizeAction->addAction(digitizeScale); digitizeAction->addAction(digitizeCurve); digitizeAction->addAction(digitizeSegment); digitizeAction->addAction(digitizePointMatch); digitizeAction->addAction(digitizeMeasure); settingsCoordSys = createAction(tr("Coordinates"), tr("Coordinates..."), 0, this); CHECK_PTR_ENGAUGE(settingsCoordSys); settingsCoordSys->setStatusTip(tr("Edits the coordinate system")); settingsCoordSys->setWhatsThis(tr("Coordinate System Settings\n\nEdits the coordinate system properties")); connect(settingsCoordSys, SIGNAL(activated()), this, SLOT(slotSettingsCoordSys())); settingsAxes = createAction(tr("Axes"), tr("Axes..."), 0, this); CHECK_PTR_ENGAUGE(settingsAxes); settingsAxes->setStatusTip(tr("Edits the axes properties")); settingsAxes->setWhatsThis(tr("Axes Settings\n\nEdits the axes properties")); connect(settingsAxes, SIGNAL(activated()), this, SLOT(slotSettingsAxes())); settingsScale = createAction(tr("Scale Bar"), tr("Scale Bar..."), 0, this); CHECK_PTR_ENGAUGE(settingsScale); settingsScale->setStatusTip(tr("Edits the scale bar properties")); settingsScale->setWhatsThis(tr("Scale Bar Settings\n\nEdits the scale bar properties")); connect(settingsScale, SIGNAL(activated()), this, SLOT(slotSettingsScale())); settingsCurves = createAction(tr("Curves"), tr("Curves..."), 0, this); CHECK_PTR_ENGAUGE(settingsCurves); settingsCurves->setStatusTip(tr("Edits the curve properties")); settingsCurves->setWhatsThis(tr("Curve Settings\n\nEdits the properties of the curves")); connect(settingsCurves, SIGNAL(activated()), this, SLOT(slotSettingsCurves())); settingsSegments = createAction(tr("Segments"), tr("Segments..."), 0, this); CHECK_PTR_ENGAUGE(settingsSegments); settingsSegments->setStatusTip(tr("Edits the segment fill properties")); settingsSegments->setWhatsThis(tr("Segment Fill Settings\n\nEdits the segment fill properties")); connect(settingsSegments, SIGNAL(activated()), this, SLOT(slotSettingsSegments())); settingsPointMatch = createAction(tr("Point Match"), tr("Point Match..."), 0, this); CHECK_PTR_ENGAUGE(settingsPointMatch); settingsPointMatch->setStatusTip(tr("Edits the point match properties")); settingsPointMatch->setWhatsThis(tr("Point Match Settings\n\nEdits the point match properties")); connect(settingsPointMatch, SIGNAL(activated()), this, SLOT(slotSettingsPointMatch())); settingsMeasures = createAction(tr("Measures"), tr("Measures..."), 0, this); CHECK_PTR_ENGAUGE(settingsMeasures); settingsMeasures->setStatusTip(tr("Edits the measure properties")); settingsMeasures->setWhatsThis(tr("Measures Settings\n\nEdits the measure properties")); connect(settingsMeasures, SIGNAL(activated()), this, SLOT(slotSettingsMeasures())); settingsDiscretize = createAction(tr("Discretize"), tr("Discretize..."), 0, this); CHECK_PTR_ENGAUGE(settingsDiscretize); settingsDiscretize->setStatusTip(tr("Edits the discretization properties")); settingsDiscretize->setWhatsThis(tr("Discretize Settings\n\nEdits the discretize properties, which affect the processed image")); connect(settingsDiscretize, SIGNAL(activated()), this, SLOT(slotSettingsDiscretize())); settingsGridRemoval = createAction(tr("Grid Removal"), tr("Grid Removal..."), 0, this); CHECK_PTR_ENGAUGE(settingsGridRemoval); settingsGridRemoval->setStatusTip(tr("Edits the grid removal properties")); settingsGridRemoval->setWhatsThis(tr("Grid Removal Settings\n\nEdits the grid removal properties, which affect the processed image")); connect(settingsGridRemoval, SIGNAL(activated()), this, SLOT(slotSettingsGridRemoval())); settingsGridDisplay = createAction(tr("Grid Display"), tr("Grid Display..."), 0, this); CHECK_PTR_ENGAUGE(settingsGridDisplay); settingsGridDisplay->setStatusTip(tr("Edits the grid display properties")); settingsGridDisplay->setWhatsThis(tr("Grid Display Settings\n\nEdits the grid display properties")); connect(settingsGridDisplay, SIGNAL(activated()), this, SLOT(slotSettingsGridDisplay())); settingsExportSetup = createAction(tr("Export Setup"), tr("Export Setup..."), 0, this); CHECK_PTR_ENGAUGE(settingsExportSetup); settingsExportSetup->setStatusTip(tr("Configure the export settings")); settingsExportSetup->setWhatsThis(tr("Export Setup\n\nConfigure the export settings")); connect(settingsExportSetup, SIGNAL(activated()), this, SLOT(slotSettingsExportSetup())); settingsSessions = createAction(tr("Sessions"), tr("Sessions..."), 0, this); CHECK_PTR_ENGAUGE(settingsSessions); settingsSessions->setStatusTip(tr("Select settings to be saved between sessions")); settingsSessions->setWhatsThis(tr("Sessions Setup\n\nSelect settings to be saved between sessions")); connect(settingsSessions, SIGNAL(activated()), this, SLOT(slotSettingsSessions())); windowNewWindow = createAction(tr("&New Window"), tr("&New Window"), 0, this); CHECK_PTR_ENGAUGE(windowNewWindow); windowNewWindow->setStatusTip(tr("Opens a new view for the current document")); windowNewWindow->setWhatsThis(tr("New Window\n\nOpens a new view for the current document")); connect(windowNewWindow, SIGNAL(activated()), this, SLOT(slotWindowNewWindow())); windowCascade = createAction(tr("&Cascade"), tr("&Cascade"), 0, this); CHECK_PTR_ENGAUGE(windowCascade); windowCascade->setStatusTip(tr("Cascades all windows")); windowCascade->setWhatsThis(tr("Cascade\n\nCascades all windows")); connect(windowCascade, SIGNAL(activated()), workspace, SLOT(cascadeSubWindows())); windowTile = createAction(tr("&Tile"), tr("&Tile"), 0, this); CHECK_PTR_ENGAUGE(windowTile); windowTile->setStatusTip(tr("Tiles all windows")); windowTile->setWhatsThis(tr("Tile\n\nTiles all windows")); connect(windowTile, SIGNAL(activated()), workspace, SLOT(tileSubWindows())); windowAction = new QActionGroup(this); CHECK_PTR_ENGAUGE(windowAction); windowAction->addAction(windowNewWindow); windowAction->addAction(windowCascade); windowAction->addAction(windowTile); helpAboutApp = createAction(tr("&About Engauge"), tr("&About Engauge..."), 0, this); CHECK_PTR_ENGAUGE(helpAboutApp); helpAboutApp->setStatusTip(tr("About the application")); helpAboutApp->setWhatsThis(tr("About Engauge\n\nAbout the application")); connect(helpAboutApp, SIGNAL(activated()), this, SLOT(slotHelpAbout())); helpUserManual = createAction(tr("&User Manual"), tr("&User Manual..."), 0, this); CHECK_PTR_ENGAUGE(helpUserManual); helpUserManual->setStatusTip(tr("Browse user manual")); helpUserManual->setWhatsThis(tr("User Manual\n\nBrowse user manual")); connect(helpUserManual, SIGNAL(activated()), this, SLOT(slotHelpUserManual())); helpGlossary = createAction(tr("&Glossary"), tr("&Glossary..."), 0, this); CHECK_PTR_ENGAUGE(helpGlossary); helpGlossary->setStatusTip(tr("Browse glossary")); helpGlossary->setWhatsThis(tr("Glossary\n\nBrowse glossary")); connect(helpGlossary, SIGNAL(activated()), this, SLOT(slotHelpGlossary())); helpConverter = createAction(tr("&Date/Time Converter"), tr("&Date/Time Converter..."), 0, this); CHECK_PTR_ENGAUGE(helpConverter); helpConverter->setStatusTip(tr("Convert dates and times in browser")); helpConverter->setWhatsThis(tr("Converter\n\nConvert dates and times in browser")); connect(helpConverter, SIGNAL(activated()), this, SLOT(slotConverter())); helpLineGraphTutorial = createAction(tr("&Line Graph Tutorial"), tr("&Line Graph Tutorial..."), 0, this); CHECK_PTR_ENGAUGE(helpLineGraphTutorial); helpLineGraphTutorial->setStatusTip(tr("Browse manual line graph tutorial")); helpLineGraphTutorial->setWhatsThis(tr("Line Graph Tutorial\n\nBrowse manual line graph tutorial")); connect(helpLineGraphTutorial, SIGNAL(activated()), this, SLOT(slotHelpLineGraphTutorial())); helpPointGraphTutorial = createAction(tr("&Point Graph Tutorial"), tr("&Point Graph Tutorial..."), 0, this); CHECK_PTR_ENGAUGE(helpPointGraphTutorial); helpPointGraphTutorial->setStatusTip(tr("Browse manual point graph tutorial")); helpPointGraphTutorial->setWhatsThis(tr("Point Graph Tutorial\n\nBrowse manual point graph tutorial")); connect(helpPointGraphTutorial, SIGNAL(activated()), this, SLOT(slotHelpPointGraphTutorial())); helpMapTutorial = createAction(tr("&Map Tutorial"), tr("&Map Tutorial..."), 0, this); CHECK_PTR_ENGAUGE(helpMapTutorial); helpMapTutorial->setStatusTip(tr("Browse map tutorial")); helpMapTutorial->setWhatsThis(tr("Map Tutorial\n\nBrowse map tutorial")); connect(helpMapTutorial, SIGNAL(activated()), this, SLOT(slotHelpMapTutorial())); } void DigitMain::initGeometryInfo() { curveGeometryDlg = new GeometryDlg(this, true); CHECK_PTR_ENGAUGE(curveGeometryDlg); connect(curveGeometryDlg, SIGNAL(hideGeometry()), this, SLOT(slotHideCurveGeometry())); measureGeometryDlg = new GeometryDlg(this, false); CHECK_PTR_ENGAUGE(measureGeometryDlg); connect(measureGeometryDlg, SIGNAL(hideGeometry()), this, SLOT(slotHideMeasureGeometry())); noGeometryInfo(); } void DigitMain::initMenuBar() { // menuBar entry fileMenu fileMenu = new QMenu(this); CHECK_PTR_ENGAUGE(fileMenu); fileImport->addTo(fileMenu); fileOpen->addTo(fileMenu); QSize mruFrameOffset = fileMenu->sizeHint(); // size() is unreliable because of performance optimization #ifndef Q_OS_MACX //fileOpenRecent->addMenu(fileMenu); fileMenu->addMenu(fileOpenRecent); const int INDEX_FILEOPENRECENT = 2; // import at index 0, open at index 1, open recent at index 2 m_mruDocuments.attachPopupMenu(fileMenu, fileMenu->idAt(INDEX_FILEOPENRECENT), mruFrameOffset); #endif fileClose->addTo(fileMenu); fileMenu->insertSeparator(); fileSave->addTo(fileMenu); fileSaveAs->addTo(fileMenu); fileExport->addTo(fileMenu); fileExportAs->addTo(fileMenu); fileMenu->insertSeparator(); filePrint->addTo(fileMenu); fileMenu->insertSeparator(); fileExit->addTo(fileMenu); connect(fileMenu, SIGNAL(highlighted(int)), &m_mruDocuments, SLOT(slotActionHighlighted(int))); connect(fileMenu, SIGNAL(aboutToHide()), &m_mruDocuments, SLOT(slotActionUnhighlighted())); connect(&m_mruDocuments, SIGNAL(mruChosen(QString)), this, SLOT(slotFileOpenRecent(QString))); // menuBar entry editMenu editMenu = new QMenu(this); CHECK_PTR_ENGAUGE(editMenu); editCut->addTo(editMenu); editCopy->addTo(editMenu); editPaste->addTo(editMenu); editPasteAsNew->addTo(editMenu); // menuBar entry viewMenu viewMenu = new QMenu(this); CHECK_PTR_ENGAUGE(viewMenu); viewMenu->setCheckable(true); viewFileToolBar->addTo(viewMenu); viewSelectToolBar->addTo(viewMenu); viewImageScaleToolBar->addTo(viewMenu); viewDigitizeCurvePointsToolBar->addTo(viewMenu); viewDigitizeMeasurePointsToolBar->addTo(viewMenu); viewZoomToolBar->addTo(viewMenu); viewStatusBar->addTo(viewMenu); viewMenu->insertSeparator(); viewAxesPoints->addTo(viewMenu); viewScalePoints->addTo(viewMenu); viewCurvePoints->addTo(viewMenu); viewMeasurePoints->addTo(viewMenu); viewAllPoints->addTo(viewMenu); viewMenu->insertSeparator(); viewNoBackground->addTo(viewMenu); viewOriginalImage->addTo(viewMenu); viewProcessedImage->addTo(viewMenu); viewMenu->insertSeparator(); viewGridDisplay->addTo(viewMenu); viewMenu->insertSeparator(); viewCurveGeometry->addTo(viewMenu); viewMeasureGeometry->addTo(viewMenu); // menuBar entry digitizeMenu digitizeMenu = new QMenu(this); CHECK_PTR_ENGAUGE(digitizeMenu); digitizeSelect->addTo(digitizeMenu); digitizeMenu->insertSeparator(); digitizeAxis->addTo(digitizeMenu); digitizeScale->addTo(digitizeMenu); digitizeMenu->insertSeparator(); digitizeCurve->addTo(digitizeMenu); digitizeSegment->addTo(digitizeMenu); digitizePointMatch->addTo(digitizeMenu); digitizeMenu->insertSeparator(); digitizeMeasure->addTo(digitizeMenu); // menuBar entry settingsMenu settingsMenu = new QMenu(this); CHECK_PTR_ENGAUGE(settingsMenu); settingsCoordSys->addTo(settingsMenu); settingsMenu->insertSeparator(); settingsAxes->addTo(settingsMenu); settingsScale->addTo(settingsMenu); settingsCurves->addTo(settingsMenu); settingsSegments->addTo(settingsMenu); settingsPointMatch->addTo(settingsMenu); settingsMeasures->addTo(settingsMenu); settingsMenu->insertSeparator(); settingsDiscretize->addTo(settingsMenu); settingsGridRemoval->addTo(settingsMenu); settingsMenu->insertSeparator(); settingsGridDisplay->addTo(settingsMenu); settingsMenu->insertSeparator(); settingsExportSetup->addTo(settingsMenu); settingsMenu->insertSeparator(); settingsSessions->addTo(settingsMenu); // menuBar entry windowMenu windowMenu = new QMenu(this); CHECK_PTR_ENGAUGE(windowMenu); windowMenu->setCheckable(true); connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(slotMenuPreactivated())); // menuBar entry helpMenu helpMenu = new QMenu(this); CHECK_PTR_ENGAUGE(helpMenu); helpAboutApp->addTo(helpMenu); helpMenu->insertSeparator(); helpUserManual->addTo(helpMenu); helpGlossary->addTo(helpMenu); helpConverter->addTo(helpMenu); helpLineGraphTutorial->addTo(helpMenu); helpPointGraphTutorial->addTo(helpMenu); helpMapTutorial->addTo(helpMenu); helpMenu->insertSeparator(); helpMenu->addAction(QWhatsThis::createAction(this)); menuBar()->insertItem(tr("&File"), fileMenu); menuBar()->insertItem(tr("&Edit"), editMenu); menuBar()->insertItem(tr("&View"), viewMenu); menuBar()->insertItem(tr("&Digitize"), digitizeMenu); menuBar()->insertItem(tr("&Settings"), settingsMenu); menuBar()->insertItem(tr("&Window"), windowMenu); menuBar()->insertItem(tr("&Help"), helpMenu); } void DigitMain::initStatusBar() { DefaultSettings& rSettings = DefaultSettings::instance(); statusBar()->setShown(rSettings.getViewStatusBar()); statusNormal = new QLabel(statusBar()); CHECK_PTR_ENGAUGE(statusNormal); statusBar()->addWidget(statusNormal, 7, true); QWhatsThis::add(statusNormal, QString(tr("Messages that describe the current activity"))); statusPermanent = new QLabel(statusBar()); CHECK_PTR_ENGAUGE(statusPermanent); statusBar()->addWidget(statusPermanent, 7, true); QWhatsThis::add(statusPermanent, QString(tr("Messages that describe remaining steps for " "defining the graph coordinates.\n\nThe graph coordinates are defined by creating " "three axes points or the scale bar"))); statusCoords = new QLabel(statusBar()); CHECK_PTR_ENGAUGE(statusCoords); statusBar()->addWidget(statusCoords, 1, true); QWhatsThis::add(statusCoords, QString(tr("Graph coordinates of the cursor.\n\n" "These are not available until the graph coordinates have been defined by creating " "three axes points or the scale bar"))); statusRes = new QLabel(statusBar()); CHECK_PTR_ENGAUGE(statusRes); statusBar()->addWidget(statusRes, 1, true); QWhatsThis::add(statusRes, QString(tr("Resolutions of the graph coordinates.\n\n" "These are not available until the graph coordinates have been defined by creating " "three axes points or the scale bar.\n\nThe resolution of a coordinate is the root-mean-square average " "of the errors in the horizontal and vertical directions on the screen"))); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::initToolBars() { DefaultSettings& rSettings = DefaultSettings::instance(); fileToolbar = new QToolBar("File Toolbar",this); CHECK_PTR_ENGAUGE(fileToolbar); fileImport->addTo(fileToolbar); fileOpen->addTo(fileToolbar); fileSave->addTo(fileToolbar); fileExport->addTo(fileToolbar); fileToolbar->setShown(rSettings.getViewFileToolbar()); addToolBar(fileToolbar); selectToolbar = new QToolBar("Select Toolbar", this); CHECK_PTR_ENGAUGE(selectToolbar); selectToolbar->addWidget(QWhatsThis::whatsThisButton(selectToolbar)); digitizeSelect->addTo(selectToolbar); selectToolbar->setShown(rSettings.getViewSelectToolbar()); addToolBar(selectToolbar); imageScaleToolbar = new QToolBar("Image Scale Toolbar", this); CHECK_PTR_ENGAUGE(imageScaleToolbar); digitizeAxis->addTo(imageScaleToolbar); digitizeScale->addTo(imageScaleToolbar); imageScaleToolbar->setShown(rSettings.getViewImageScaleToolbar()); addToolBar(imageScaleToolbar); digitizeCurvePointsToolbar = new QToolBar("Digitize Curve Toolbar", this); CHECK_PTR_ENGAUGE(digitizeCurvePointsToolbar); digitizeCurve->addTo(digitizeCurvePointsToolbar); digitizeSegment->addTo(digitizeCurvePointsToolbar); digitizePointMatch->addTo(digitizeCurvePointsToolbar); curveCmb = new CurveCmb(digitizeCurvePointsToolbar); digitizeCurvePointsToolbar->addWidget(curveCmb); CHECK_PTR_ENGAUGE(curveCmb); QToolTip::add(curveCmb, QString(tr("Curve List"))); digitizeCurvePointsToolbar->setShown(rSettings.getViewDigitizeCurvePointsToolbar()); addToolBar(digitizeCurvePointsToolbar); digitizeMeasurePointsToolbar = new QToolBar("Digitize Measure Points Toolbar", this); CHECK_PTR_ENGAUGE(digitizeMeasurePointsToolbar); digitizeMeasure->addTo(digitizeMeasurePointsToolbar); measureCmb = new MeasureCmb(digitizeMeasurePointsToolbar); digitizeMeasurePointsToolbar->addWidget(measureCmb); CHECK_PTR_ENGAUGE(measureCmb); QToolTip::add(measureCmb, QString(tr("Measure List"))); digitizeMeasurePointsToolbar->setShown(rSettings.getViewDigitizeMeasurePointsToolbar()); addToolBar(digitizeMeasurePointsToolbar); // clicking on toolbar pushbuttons causes state change in curve combobox connect(digitizeSelect, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboNotCurve(bool))); connect(digitizeAxis, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboNotCurve(bool))); connect(digitizeScale, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboNotCurve(bool))); connect(digitizeCurve, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboCurve(bool))); connect(digitizeSegment, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboCurve(bool))); connect(digitizePointMatch, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboCurve(bool))); connect(digitizeMeasure, SIGNAL(toggled(bool)), curveCmb, SLOT(slotComboNotCurve(bool))); // clicking on toolbar pushbuttons causes state change in measure combobox connect(digitizeSelect, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizeAxis, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizeScale, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizeCurve, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizeSegment, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizePointMatch, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboNotMeasure(bool))); connect(digitizeMeasure, SIGNAL(toggled(bool)), measureCmb, SLOT(slotComboMeasure(bool))); // clicking on curvecmb combobox causes state change in toolbar pushbuttons connect(curveCmb, SIGNAL(activated(int)), this, SLOT(slotCurveComboActivated(int))); // clicking on measurecmb combobox causes state change in toolbar pushbuttons connect(measureCmb, SIGNAL(activated(int)), this, SLOT(slotMeasureComboActivated(int))); zoomToolbar = new QToolBar("Zoom Toolbar", this); CHECK_PTR_ENGAUGE(zoomToolbar); zoomCmb = new ZoomCmb(zoomToolbar); zoomToolbar->addWidget(zoomCmb); CHECK_PTR_ENGAUGE(zoomCmb); QToolTip::add(zoomCmb, QString(tr("Zoom"))); zoomToolbar->setShown(rSettings.getViewZoomToolbar()); addToolBar(zoomToolbar); } void DigitMain::initView() { // set the main widget here workspace = new QMdiArea(); workspace->setViewMode(QMdiArea::SubWindowView); setCentralWidget(workspace); } DigitDoc* DigitMain::newDocument() { DigitDoc* doc; if (activeDocument()) { // this document is not the first so start up in same state as previous document for continuity doc = new DigitDoc(activeDocument()->digitizeState()); CHECK_PTR_ENGAUGE(doc); } else { doc = new DigitDoc(DefaultSettings::instance().getSessionsSettings().initialDigitizeState); CHECK_PTR_ENGAUGE(doc); } ASSERT_ENGAUGE(docList != 0); docList->append(doc); connect(doc, SIGNAL(normalMsg(const QString&)), this, SLOT(slotStatusNormalMsg(const QString&))); connect(doc, SIGNAL(permanentMsg(const QString&)), this, SLOT(slotStatusPermanentMsg(const QString&))); connect(doc, SIGNAL(temporaryMsg(const QString&)), this, SLOT(slotStatusTemporaryMsg(const QString&))); connect(doc, SIGNAL(trackingMsg(const QString&, const QString&)), this, SLOT(slotStatusTrackingMsg(const QString&, const QString&))); connect(doc, SIGNAL(selectionChange()), this, SLOT(slotSelectionChange())); connect(doc, SIGNAL(transformationChange()), this, SLOT(slotTransformationChange())); connect(doc, SIGNAL(updateGeometry()), this, SLOT(slotUpdateGeometry())); QString text(tr("Three axis points or the scale bar must be defined.")); doc->forwardPermanentMsg(text); return doc; } void DigitMain::createClient(DigitDoc* doc) { DigitView* view = new DigitView (doc, workspace, 0, Qt::WDestructiveClose); workspace->addSubWindow(view); CHECK_PTR_ENGAUGE(view); view->installEventFilter (this); ASSERT_ENGAUGE(doc != 0); doc->addView(view); if (workspace->subWindowList().isEmpty()) // show the very first window in maximized mode view->showMaximized(); else view->show(); setActiveView(view); } void DigitMain::importImageFile(const QString file) { slotStatusNormalMsg(QString(tr("Importing file..."))); QApplication::setOverrideCursor(Qt::WaitCursor); DigitDoc* doc = newDocument(); // open the file ASSERT_ENGAUGE(doc != 0); if (!doc->importFile(file)) { QApplication::restoreOverrideCursor(); if (cmdOnlyBmp) QMessageBox::critical(this, tr("Error!"), tr("Could not open BMP image!")); else QMessageBox::critical(this, tr("Error!"), tr("Could not open image!")); removeDocument(doc); return; } doc->initDefaults(); resetActions(); // create the window createClient(doc); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } void DigitMain::importImageFile(const QString file, double xMinG, double xMaxG, double yMinG, double yMaxG) { importImageFile(file); if (activeDocument()) { slotStatusNormalMsg(QString(tr("Scanning for axes..."))); QApplication::setOverrideCursor(Qt::WaitCursor); activeDocument()->scanForAxes(xMinG, xMaxG, yMinG, yMaxG); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } } void DigitMain::importImageDragged(const QImage& image) { slotStatusNormalMsg(QString(tr("Importing image..."))); QApplication::setOverrideCursor(Qt::WaitCursor); DigitDoc* doc = newDocument(); // save the image ASSERT_ENGAUGE(doc != 0); if (!doc->importImage(image)) { QApplication::restoreOverrideCursor(); QMessageBox::critical(this, tr("Error!"), tr("Could not load image!")); removeDocument(doc); return; } doc->initDefaults(); resetActions(); // create the window createClient(doc); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } void DigitMain::importPixmapDragged(const QPixmap& pixmap) { slotStatusNormalMsg(QString(tr("Importing image..."))); QApplication::setOverrideCursor(Qt::WaitCursor); DigitDoc* doc = newDocument(); // save the image ASSERT_ENGAUGE(doc != 0); if (!doc->importPixmap(pixmap)) { QApplication::restoreOverrideCursor(); QMessageBox::critical(this, tr("Error!"), tr("Could not load image!")); removeDocument(doc); return; } doc->initDefaults(); resetActions(); // create the window createClient(doc); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } void DigitMain::openDocumentFile(const QString file) { // do not set override cursor externally! slotStatusNormalMsg(QString(tr("Opening file..."))); QApplication::setOverrideCursor(Qt::WaitCursor); // check, if document already open. If yes, set the focus to the first view DigitDoc* doc; ASSERT_ENGAUGE(docList != 0); for (doc = docList->first(); doc; doc = docList->next()) { ASSERT_ENGAUGE(doc != 0); if (doc->savePath() == file) { focusOnViewOrDoc(0, doc); QApplication::restoreOverrideCursor(); return; } } doc = newDocument(); // open the file if (!doc->openDocument(file)) { QApplication::restoreOverrideCursor(); QMessageBox::critical(this, tr("Error!"),tr("Could not open document!")); removeDocument(doc); return; } resetActions(); // create the window createClient(doc); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } void DigitMain::setCurveCmb(DigitDoc* doc) { // save new pointset set into combobox ASSERT_ENGAUGE(curveCmb != 0); curveCmb->attachToDocument(doc); if (doc) { // synchronize document and combobox curveCmb->setCurrentText(doc->curveCmbText()); } } void DigitMain::setMeasureCmb(DigitDoc* doc) { // save new pointset set into combobox ASSERT_ENGAUGE(measureCmb != 0); measureCmb->attachToDocument(doc); if (doc) { // synchronize document and combobox measureCmb->setCurrentText(doc->measureCmbText()); } } void DigitMain::resetActions() { ASSERT_ENGAUGE(digitizeAxis != 0); digitizeAxis->setOn(false); ASSERT_ENGAUGE(digitizeCurve != 0); digitizeCurve->setOn(false); ASSERT_ENGAUGE(digitizePointMatch != 0); digitizePointMatch->setOn(false); ASSERT_ENGAUGE(digitizeScale != 0); digitizeScale->setOn(false); ASSERT_ENGAUGE(digitizeSegment != 0); digitizeSegment->setOn(false); ASSERT_ENGAUGE(digitizeSelect != 0); digitizeSelect->setOn(false); ASSERT_ENGAUGE(digitizeMeasure != 0); digitizeMeasure->setOn(false); } bool DigitMain::queryExit() { int exit = QMessageBox::information(this, tr("Quit..."), tr("You have unsaved changes. Do your really want to quit?"), QMessageBox::Ok, QMessageBox::Cancel); return (exit == QMessageBox::Ok); } void DigitMain::toggleActions() { // perform updates that are independent of the document ASSERT_ENGAUGE(fileOpenRecent != 0); fileOpenRecent->setEnabled(!m_mruDocuments.isEmpty()); // state change just occurred so update the menubar and toolbars correspondingly DigitDoc* doc = activeDocument(); if (doc) { CoordSettings coord = doc->coordSettings(); ASSERT_ENGAUGE(fileClose != 0); fileClose->setEnabled(true); ASSERT_ENGAUGE(fileSave != 0); fileSave->setEnabled(true); ASSERT_ENGAUGE(fileSaveAs != 0); fileSaveAs->setEnabled(true); ASSERT_ENGAUGE(fileExport != 0); fileExport->setEnabled(true); ASSERT_ENGAUGE(fileExportAs != 0); fileExportAs->setEnabled(true); ASSERT_ENGAUGE(filePrint != 0); filePrint->setEnabled(true); toggleActionsEdit(); ASSERT_ENGAUGE(viewAxesPoints != 0); ASSERT_ENGAUGE(viewScalePoints != 0); ASSERT_ENGAUGE(viewCurvePoints != 0); ASSERT_ENGAUGE(viewMeasurePoints != 0); ASSERT_ENGAUGE(viewAllPoints != 0); switch (doc->viewPointSelection()) { // setOn(false) causes unwanted toggling with action groups, so use switch statement! case ViewAxesPoints: viewAxesPoints->setOn(true); break; case ViewScalePoints: viewScalePoints->setOn(true); break; case ViewCurvePoints: viewCurvePoints->setOn(true); break; case ViewMeasurePoints: viewMeasurePoints->setOn(true); break; case ViewAllPoints: viewAllPoints->setOn(true); break; } viewAxesPoints->setEnabled(true); viewScalePoints->setEnabled(true); viewCurvePoints->setEnabled(true); viewMeasurePoints->setEnabled(true); viewAllPoints->setEnabled(true); ASSERT_ENGAUGE(viewNoBackground != 0); ASSERT_ENGAUGE(viewOriginalImage != 0); ASSERT_ENGAUGE(viewProcessedImage != 0); switch (doc->background()) { // setOn(false) causes unwanted toggling with action groups, so use switch statement! case BlankBackground: viewNoBackground->setOn(true); break; case OriginalImage: viewOriginalImage->setOn(true); break; case ProcessedImage: viewProcessedImage->setOn(true); break; } viewNoBackground->setEnabled(true); viewOriginalImage->setEnabled(true); viewProcessedImage->setEnabled(true); ASSERT_ENGAUGE(viewGridDisplay != 0); viewGridDisplay->setOn(doc->gridDisplay()); viewGridDisplay->setEnabled(doc->validAxes()); ASSERT_ENGAUGE(digitizeAction != 0); digitizeAction->setEnabled(true); ASSERT_ENGAUGE(digitizeAxis != 0); digitizeAxis->setEnabled((doc->axisPointCount() < 3) && // prevent too many axis points (doc->scalePointCount() == 0)); // prevent mixture of axis and scale points ASSERT_ENGAUGE(digitizeCurve != 0); digitizeCurve->setEnabled(true); ASSERT_ENGAUGE(digitizeScale != 0); digitizeScale->setEnabled( (coord.frame == Cartesian) && (coord.xThetaScale == Linear) && (coord.yRScale == Linear) && // incompatible with polar or log coordinates (doc->axisPointCount() == 0) && // prevent mixture of axis and scale points (doc->scalePointCount() < 2)); // prevent too many scale points ASSERT_ENGAUGE(digitizeSegment != 0); digitizeSegment->setEnabled(true); ASSERT_ENGAUGE(digitizePointMatch != 0); digitizePointMatch->setEnabled(true); ASSERT_ENGAUGE(digitizeSelect != 0); digitizeSelect->setEnabled(true); ASSERT_ENGAUGE(digitizeMeasure != 0); digitizeMeasure->setEnabled(true); ASSERT_ENGAUGE(settingsCoordSys != 0); settingsCoordSys->setEnabled(true); ASSERT_ENGAUGE(settingsAxes != 0); settingsAxes->setEnabled(true); ASSERT_ENGAUGE(settingsScale != 0); settingsScale->setEnabled(true); ASSERT_ENGAUGE(settingsCurves != 0); settingsCurves->setEnabled(true); ASSERT_ENGAUGE(settingsSegments != 0); settingsSegments->setEnabled(true); ASSERT_ENGAUGE(settingsPointMatch != 0); settingsPointMatch->setEnabled(true); ASSERT_ENGAUGE(settingsMeasures != 0); settingsMeasures->setEnabled(true); ASSERT_ENGAUGE(settingsDiscretize != 0); settingsDiscretize->setEnabled(true); ASSERT_ENGAUGE(settingsGridRemoval != 0); settingsGridRemoval->setEnabled(true); ASSERT_ENGAUGE(settingsGridDisplay != 0); settingsGridDisplay->setEnabled(doc->validAxes()); ASSERT_ENGAUGE(settingsExportSetup != 0); settingsExportSetup->setEnabled(true); setCurveCmb(doc); setMeasureCmb(doc); ASSERT_ENGAUGE(zoomCmb != 0); // zooming and point match state are incompatible, so zoom is disabled in that state, // because changing zoom immediately sends focus to zoom control so that all succeeding // mouse button and key press events are processed by the zoom control rather than // PointMatchTool zoomCmb->setEnabled(doc->digitizeState() != PointMatchState); ASSERT_ENGAUGE(activeView() != 0); zoomCmb->setZoom(activeView()->zoom()); switch (doc->digitizeState()) { // setOn(false) causes unwanted toggling with action groups, so use switch statement! case AxisState: ASSERT_ENGAUGE(digitizeAxis != 0); digitizeAxis->setOn(true); break; case CurveState: ASSERT_ENGAUGE(digitizeCurve != 0); digitizeCurve->setOn(true); break; case MeasureState: ASSERT_ENGAUGE(digitizeMeasure != 0); digitizeMeasure->setOn(true); break; case PointMatchState: ASSERT_ENGAUGE(digitizePointMatch != 0); digitizePointMatch->setOn(true); break; case ScaleState: ASSERT_ENGAUGE(digitizeScale != 0); digitizeScale->setOn(true); break; case SegmentState: ASSERT_ENGAUGE(digitizeSegment != 0); digitizeSegment->setOn(true); break; case SelectState: ASSERT_ENGAUGE(digitizeSelect != 0); digitizeSelect->setOn(true); break; } } else { ASSERT_ENGAUGE(fileClose != 0); fileClose->setEnabled(false); ASSERT_ENGAUGE(fileSave != 0); fileSave->setEnabled(false); ASSERT_ENGAUGE(fileSaveAs != 0); fileSaveAs->setEnabled(false); ASSERT_ENGAUGE(fileExport != 0); fileExport->setEnabled(false); ASSERT_ENGAUGE(fileExportAs != 0); fileExportAs->setEnabled(false); ASSERT_ENGAUGE(filePrint != 0); filePrint->setEnabled(false); toggleActionsEdit(); ASSERT_ENGAUGE(viewAxesPoints != 0); viewAxesPoints->setEnabled(false); ASSERT_ENGAUGE(viewScalePoints != 0); viewScalePoints->setEnabled(false); ASSERT_ENGAUGE(viewCurvePoints != 0); viewCurvePoints->setEnabled(false); ASSERT_ENGAUGE(viewMeasurePoints != 0); viewMeasurePoints->setEnabled(false); ASSERT_ENGAUGE(viewAllPoints != 0); viewAllPoints->setEnabled(false); ASSERT_ENGAUGE(viewNoBackground != 0); viewNoBackground->setEnabled(false); ASSERT_ENGAUGE(viewOriginalImage != 0); viewOriginalImage->setEnabled(false); ASSERT_ENGAUGE(viewProcessedImage != 0); viewProcessedImage->setEnabled(false); ASSERT_ENGAUGE(viewGridDisplay != 0); viewGridDisplay->setEnabled(false); ASSERT_ENGAUGE(digitizeAction != 0); digitizeAction->setEnabled(false); ASSERT_ENGAUGE(settingsCoordSys != 0); settingsCoordSys->setEnabled(false); ASSERT_ENGAUGE(settingsAxes != 0); settingsAxes->setEnabled(false); ASSERT_ENGAUGE(settingsScale != 0); settingsScale->setEnabled(false); ASSERT_ENGAUGE(settingsCurves != 0); settingsCurves->setEnabled(false); ASSERT_ENGAUGE(settingsSegments != 0); settingsSegments->setEnabled(false); ASSERT_ENGAUGE(settingsPointMatch != 0); settingsPointMatch->setEnabled(false); ASSERT_ENGAUGE(settingsMeasures != 0); settingsMeasures->setEnabled(false); ASSERT_ENGAUGE(settingsDiscretize != 0); settingsDiscretize->setEnabled(false); ASSERT_ENGAUGE(settingsGridRemoval != 0); settingsGridRemoval->setEnabled(false); ASSERT_ENGAUGE(settingsGridDisplay != 0); settingsGridDisplay->setEnabled(false); ASSERT_ENGAUGE(settingsExportSetup != 0); settingsExportSetup->setEnabled(false); setCurveCmb(0); setMeasureCmb(0); ASSERT_ENGAUGE(zoomCmb != 0); zoomCmb->setEnabled(false); } } void DigitMain::toggleActionsEdit() { DigitView* view = activeView(); if (view) { ASSERT_ENGAUGE(editUndo != 0); editUndo->setEnabled(view->document()->isActionToUndo()); ASSERT_ENGAUGE(editRedo != 0); editRedo->setEnabled(view->document()->isActionToRedo()); ASSERT_ENGAUGE(editCut != 0); editCut->setEnabled(view->isSelection()); ASSERT_ENGAUGE(editCopy != 0); editCopy->setEnabled(view->isSelection()); ASSERT_ENGAUGE(editPaste != 0); ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); bool creationState = (view->document()->digitizeState() == CurveState) || (view->document()->digitizeState() == MeasureState); editPaste->setEnabled(Clipboard::instance().clipboardItems() && creationState); } else { ASSERT_ENGAUGE(editUndo != 0); editUndo->setEnabled(false); ASSERT_ENGAUGE(editRedo != 0); editRedo->setEnabled(false); ASSERT_ENGAUGE(editCut != 0); editCut->setEnabled(false); ASSERT_ENGAUGE(editCopy != 0); editCopy->setEnabled(false); ASSERT_ENGAUGE(editPaste != 0); editPaste->setEnabled(false); } toggleActionPasteAsNew(); } void DigitMain::toggleActionPasteAsNew() { // accessing the clipboard below crashes in linux with qt3-gcc3.2, prompting the upgrade to qt-3.3.3 editPasteAsNew->setEnabled( clipboardContainsUris() || !QApplication::clipboard()->image().isNull() || !QApplication::clipboard()->pixmap().isNull()); } bool DigitMain::eventFilter(QObject* object, QEvent* event) { ASSERT_ENGAUGE(event != 0); switch (event->type()) { case QEvent::Close: if ((DigitMain*) object == this) { // close button in titlebar was clicked if (!safeToQuit()) return true; // true filters the event out according to QObject documentation } else { // close button in view was clicked bool rtn = eventClose(object, event); toggleActions(); return rtn; } break; // this break was missing for quite a while! case QEvent::FocusIn: if (((DigitMain*) object != this) && ((QMenuBar*) object != menuBar())) { DigitView* view = (DigitView*) object; if (findView(view)) { DigitDoc* doc = view->document(); ASSERT_ENGAUGE(doc != 0); setActiveView(view); toggleActions(); slotUpdateGeometry(); QString text(tr("The three axis points are correctly defined.")); ASSERT_ENGAUGE(doc != 0); if (!doc->validAxes()) { if (doc->validScale()) text = QString(tr("The scale bar is correctly defined.")); else text = QString(tr("Three axis points, or the scale bar, must be defined.")); } doc->forwardPermanentMsg(text); } } break; case QEvent::KeyPress: if (activeView()) { QKeyEvent* keyEvent = (QKeyEvent*) event; if ((keyEvent->key() == Qt::Key_Delete) && (activeView()->isSelection())) { // convert pressing delete key into cut slotEditCut(); return true; } } return eventKeyPress(object, event); default: break; } return QWidget::eventFilter (object, event); // standard event processing } bool DigitMain::eventClose(QObject* object, QEvent* event) { DigitView* view = (DigitView*) object; if (findView(view)) { DigitDoc* doc = view->document(); ASSERT_ENGAUGE(doc != 0); QCloseEvent* e = (QCloseEvent*) event; if (canCloseFrame(doc, view)) { doc->removeView(view); if (!doc->firstView()) { setActiveView(0); removeDocument(doc); } } e->ignore(); return true; } return false; } bool DigitMain::eventKeyPress(QObject* object, QEvent* event) { // object usually, but not always, contains view at this point DigitView* view = (DigitView*) object; if (findView(view)) { DigitDoc* doc = view->document(); QKeyEvent* e = (QKeyEvent*) event; if (e->key() == DefaultSettings::instance().getKeyClipboard()) { Clipboard::instance().dump(); e->ignore(); return true; } else if (e->key() == DefaultSettings::instance().getKeyTree()) { ASSERT_ENGAUGE(qApp != 0); qApp->dumpObjectTree(); e->ignore(); return true; } else if (e->key() == DefaultSettings::instance().getKeyVariables()) { ASSERT_ENGAUGE(doc != 0); doc->dump(); e->ignore(); return true; } } return false; } void DigitMain::moveEvent(QMoveEvent* pEvent) { if (pEvent) DefaultSettings::instance().setWindowMainPosition(pEvent->pos()); } void DigitMain::resizeEvent(QResizeEvent* pEvent) { if (pEvent) DefaultSettings::instance().setWindowMainSize(pEvent->size()); } void DigitMain::dragEnterEvent(QDragEnterEvent* pEvent) { if (Q3UriDrag::canDecode(pEvent)) pEvent->accept(); else if (Q3ImageDrag::canDecode(pEvent)) pEvent->accept(); } void DigitMain::dropEvent(QDropEvent* pEvent) { Q3StrList uriList; QImage image; if (Q3UriDrag::decode(pEvent, uriList)) { char* uri; for (uri = uriList.first(); uri; uri = uriList.next()) importImageFile(Q3UriDrag::uriToLocalFile(uri)); } else if (Q3ImageDrag::decode(pEvent, image)) importImageDragged(image); } DigitDoc* DigitMain::activeDocument() { DigitView* view = activeView(); if (view) return view->document(); else return 0; } DigitView* DigitMain::activeView() { // the active view is tracked by DigitMain, independent of the // active view that QWorkspace tracks, since DigitMain updates // its active view as soon as a focus in event occurs. QWorkspace // seems, at least under Linux, to post the focus in event into // a queue so the value returned by workspace->activeWindow() // is stale for quite a while after a new window focus in event return m_activeView; } bool DigitMain::findView(DigitView* view) { DigitDoc* doc; for (doc = docList->first(); doc; doc = docList->next()) { ASSERT_ENGAUGE(doc != 0); if (doc->findView(view)) return true; } return false; } void DigitMain::focusOnViewOrDoc(DigitView* view, DigitDoc* doc) { if (view != 0) { view->setFocus(); } else { // at least one of the arguments must be nonzero ASSERT_ENGAUGE(doc != 0); ASSERT_ENGAUGE(doc->firstView() != 0); doc->firstView()->setFocus(); } } void DigitMain::setActiveView(DigitView* view) { m_activeView = view; disconnect(zoomCmb, 0, 0, 0); if (view) connect(zoomCmb, SIGNAL(activated(const QString &)), view, SLOT(slotZoomChange(const QString &))); } void DigitMain::setDigitizeState(DigitizeState state) { // update all documents with next state for (DigitDoc* doc = docList->first(); doc; doc = docList->next()) { ASSERT_ENGAUGE(doc != 0); doc->setDigitizeState(state); ASSERT_ENGAUGE(curveCmb != 0); if ((doc == activeDocument()) && !curveCmb->currentText().isEmpty()) doc->setCurveCmbText(curveCmb->currentText()); ASSERT_ENGAUGE(measureCmb != 0); if ((doc == activeDocument()) && !measureCmb->currentText().isEmpty()) doc->setMeasureCmbText(measureCmb->currentText()); } } void DigitMain::displayCurveGeometry(GeometryWindowItemList& rInfo) { ASSERT_ENGAUGE(curveGeometryDlg != 0); curveGeometryDlg->displayGeometryInfo(rInfo); } void DigitMain::displayMeasureGeometry(GeometryWindowItemList& rInfo) { ASSERT_ENGAUGE(measureGeometryDlg != 0); measureGeometryDlg->displayGeometryInfo(rInfo); } void DigitMain::noGeometryInfo() { GeometryWindowItemList emptyInfo; emptyInfo.append(GeometryWindowItem(0, 0, tr("No geometry information yet"))); displayCurveGeometry(emptyInfo); displayMeasureGeometry(emptyInfo); } void DigitMain::removeDocument(DigitDoc* doc) { if (doc) { ASSERT_ENGAUGE(docList != 0); docList->remove(doc); // autoDelete is on if (docList->count() < 1) setActiveView(0); toggleActions(); slotUpdateGeometry(); } } QDir DigitMain::helpPath() { // user-specified locations of user manual directory come from command line or environment variable QString envValue(getenv(UserManualEnvironmentVariable)); QDir helpPath0(envValue); // possible locations of user manual directory #ifndef DEBIAN_PACKAGE const QDir helpPath1("usermanual"); const QDir helpPath2("../usermanual"); const QDir helpPath3("../../usermanual"); #else /* DEBIAN_PACKAGE */ const QDir helpPath1("/usr/share/doc/engauge-digitizer-doc/html"); #endif /* DEBIAN_PACKAGE */ // command line value can be easily changed and is controllable, so it is used first. environment // variable is also user-specified but it can be overridden by the command line QDir helpPath; if (cmdManualDirectory.exists()) helpPath = cmdManualDirectory; else if (!envValue.isEmpty() && helpPath0.exists()) helpPath = helpPath0; else if (helpPath1.exists()) helpPath = helpPath1; #ifndef DEBIAN_PACKAGE else if (helpPath2.exists()) helpPath = helpPath2; else if (helpPath3.exists()) helpPath = helpPath3; #endif /* ! DEBIAN_PACKAGE */ #ifdef Q_OS_MACX else if (userManualPath().exists()) helpPath = userManualPath(); #endif else { QMessageBox::critical(this, tr("Error!"), tr("Could not open user manual!\n\n" "This problem may be fixed by making any one of the following changes and then restarting:\n" #ifndef DEBIAN_PACKAGE "1. Run Engauge in its original directory, which contains the 'usermanual' subdirectory\n" "2. adding '-manual ' to the command line with set to the 'usermanual' subdirectory location\n" #else /* DEBIAN_PACKAGE */ "1. installing engauge-digitizer-doc (apt-get install engauge-digitizer-doc)\n" "2. adding '-manual ' to the command line with set a 'usermanual' directory location\n" #endif /* DEBIAN_PACKAGE */ "3. setting the %1 environment variable to the 'usermanual' subdirectory location") .arg(UserManualEnvironmentVariable)); } return helpPath; } void DigitMain::spawnHelp(QString helpHome) { QDir path = helpPath(); HelpWindow *help = new HelpWindow(helpHome, path.path(), 0, "help viewer"); CHECK_PTR_ENGAUGE(help); help->setCaption(QString("%1%2") .arg(tr("Engauge Digitizer Help")) .arg(freewareCaption)); if ((QApplication::desktop()->width() > 400) && (QApplication::desktop()->height() > 500)) help->show(); else help->showMaximized(); } void DigitMain::replacePointSets(DigitDoc* doc, PointSets* copyPointSets, QStringList &pointSetsWithOrphanedPoints, bool replacingCurves) { ASSERT_ENGAUGE(doc != 0); if (replacingCurves) { ASSERT_ENGAUGE(curveCmb != 0); QString oldSelection = curveCmb->currentText(); // save new pointset set into document doc->replacePointSets(copyPointSets, &pointSetsWithOrphanedPoints, 0); // update curveCmb setCurveCmb(doc); // set style according to selected curve in curveCmb doc->setMatchSetStyle(doc->curveStyle(curveCmb->currentText())); if (oldSelection != doc->curveCmbText()) QMessageBox::warning(this, doc->title(), tr("Selected curve was changed from " + oldSelection + " to " + doc->curveCmbText()), QMessageBox::Ok, 0); } else { ASSERT_ENGAUGE(measureCmb != 0); QString oldSelection = measureCmb->currentText(); // save new pointset set into document doc->replacePointSets(copyPointSets, 0, &pointSetsWithOrphanedPoints); // update measureCmb setMeasureCmb(doc); if (oldSelection != doc->measureCmbText()) QMessageBox::warning(this, doc->title(), tr("Selected measure was changed from " + oldSelection + " to " + doc->measureCmbText()), QMessageBox::Ok, 0); } } bool DigitMain::safeToQuit() { // ask user for guidance for each document with unsaved changes, but skip // active document if user requested automatic file export at shutdown DigitDoc* doc; for (doc = docList->first(); doc; doc = docList->next()) { if (m_exportFileAtShutdown.isEmpty() || (doc != activeDocument())) { ASSERT_ENGAUGE(doc != 0); if (doc->modified()) { if (!queryExit()) // user is canceling quit return false; break; } } } if (!m_exportFileAtShutdown.isEmpty()) { // user has requested automatic file export of active document at shutdown doc = activeDocument(); ASSERT_ENGAUGE(doc != 0); doc->markFileAsExported(); // prevent save file dialog from appearing in slotFileExport doc->setExportPath(m_exportFileAtShutdown); slotFileExport(); // export active document to export path from previous step } // last chance to save settings before quitting DefaultSettings::instance().archiveSettings(); return true; } bool DigitMain::canCloseFrame(DigitDoc* doc, DigitView* view) { if (!doc->isLastView()) return true; bool ret = false; ASSERT_ENGAUGE(doc != 0); if (doc->modified()) { QString saveName; switch(QMessageBox::information(view, doc->title(), tr("The current file has been modified.\n\n" "Do you want to save it?"), QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel)) { case QMessageBox::Yes: if (documentSave(doc)) { // save was canceled switch(QMessageBox::critical(view, tr("I/O Error!"), tr("Could not save the current document!\n\n" "Close anyway?"), QMessageBox::Yes, QMessageBox::No)) { case QMessageBox::Yes: ret = true; break; case QMessageBox::No: ret = false; break; } } else ret = true; break; case QMessageBox::No: ret = true; break; case QMessageBox::Cancel: default: ret = false; break; } } else ret = true; return ret; } bool DigitMain::clipboardContainsUris() { // all entries must contain valid file names QString text = QApplication::clipboard()->text(); //if (!text) // return false; QStringList list = QStringList::split(QString("\n"), text); if (list.size() == 0) return false; for (QStringList::iterator itr = list.begin(); itr != list.end(); ++itr) { QFile file(Q3UriDrag::uriToLocalFile(*itr)); if (!file.exists()) return false; } return true; } bool DigitMain::documentSave(DigitDoc* doc) { bool canceled = false; if (doc) { if (!doc->isExistingSaveFile()) canceled = documentSaveAs(doc); else { QApplication::setOverrideCursor(Qt::WaitCursor); if (!doc->saveDocument(doc->savePath())) { QApplication::restoreOverrideCursor(); QMessageBox::critical (this, tr("I/O Error!"), tr("Could not save the current document!")); } else QApplication::restoreOverrideCursor(); } } return canceled; } bool DigitMain::documentSaveAs(DigitDoc* doc) { bool canceled = false; if (doc) { QString filename = QFileDialog::getSaveFileName(this, tr("Save"), doc->savePath(), DigitDoc::filterOpenSave(), 0, QFileDialog::DontConfirmOverwrite); if (!filename.isEmpty()) { bool save = true; if (QFile::exists(filename)) { int rtn = QMessageBox::warning(0, tr("Warning"), tr("File already exists. Save anyway?"), tr("OK"), tr("Cancel"), 0, 0, 1); save = (rtn == 0); } if (save) { QApplication::setOverrideCursor(Qt::WaitCursor); if (!doc->saveDocument(filename)) { QApplication::restoreOverrideCursor(); QMessageBox::critical (this, tr("I/O Error!"), tr("Could not save the current document!")); canceled = true; } else { doc->changedViewList(); m_mruDocuments.mergeDocument(filename); QApplication::restoreOverrideCursor(); } } else canceled = true; } } return canceled; } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void DigitMain::slotClipboardChanged() { toggleActionPasteAsNew(); } void DigitMain::slotFileImport() { slotStatusNormalMsg(QString(tr("Opening image file..."))); QString filename = QFileDialog::getOpenFileName(this, tr("Import"), QString(), DigitDoc::filterImport()); if (!filename.isEmpty()) { QApplication::setOverrideCursor(Qt::WaitCursor); importImageFile(filename); QApplication::restoreOverrideCursor(); } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileOpen() { slotStatusNormalMsg(QString(tr("Opening document file..."))); QString filename = QFileDialog::getOpenFileName(this, tr("Open"), QString(), DigitDoc::filterOpenSave()); if (!filename.isEmpty()) { openDocumentFile(filename); m_mruDocuments.mergeDocument(filename); } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileOpenRecent(QString filename) { if (!filename.isEmpty()) { slotStatusNormalMsg(QString(tr("Opening recent document file..."))); openDocumentFile(filename); m_mruDocuments.mergeDocument(filename); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotFileSave() { slotStatusNormalMsg(QString(tr("Saving file..."))); DigitDoc* doc = activeDocument(); documentSave(doc); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileSaveAs() { slotStatusNormalMsg(QString(tr("Saving file under new filename..."))); DigitDoc* doc = activeDocument(); documentSaveAs(doc); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileClose() { slotStatusNormalMsg(QString(tr("Closing file..."))); QApplication::setOverrideCursor(Qt::WaitCursor); DigitDoc* doc = activeDocument(); removeDocument(doc); slotStatusNormalMsg(QString(tr("Ready."))); QApplication::restoreOverrideCursor(); } void DigitMain::slotFileExport() { slotStatusNormalMsg(QString(tr("Exporting file..."))); DigitDoc* doc = activeDocument(); if (doc) { if (!doc->isExistingExportFile()) slotFileExportAs(); else { QApplication::setOverrideCursor(Qt::WaitCursor); if (!doc->exportDocument(doc->exportPath())) { QApplication::restoreOverrideCursor(); QMessageBox::critical (this, tr("I/O Error!"), tr("Could not export the current document!")); } else QApplication::restoreOverrideCursor(); } } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileExportAs() { slotStatusNormalMsg(QString(tr("Exporting file under new filename..."))); DigitDoc* doc = activeDocument(); if (doc) { QString filename = QFileDialog::getSaveFileName (this, QString(tr("Export")), doc->exportPath (), tr("Excel (*.csv *.tsv *.txt);; All files (*.*)"), 0, QFileDialog::DontConfirmOverwrite); if (!filename.isEmpty()) { bool save = true; if (QFile::exists(filename)) { int rtn = QMessageBox::warning(0, tr("Warning"), tr("File already exists. Export anyway?"), tr("OK"), tr("Cancel"), 0, 0, 1); save = (rtn == 0); } if (save) { QApplication::setOverrideCursor(Qt::WaitCursor); if (!doc->exportDocument(filename)) { QApplication::restoreOverrideCursor(); QMessageBox::critical (this, tr("I/O Error!"), tr("Could not export the current document!")); return; } else QApplication::restoreOverrideCursor(); doc->changedViewList(); } } } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFilePrint() { slotStatusNormalMsg(QString(tr("Printing..."))); ASSERT_ENGAUGE(activeDocument() != 0); activeDocument()->print(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotFileExit() { slotStatusNormalMsg(QString(tr("Exiting application..."))); if (safeToQuit()) { ASSERT_ENGAUGE(qApp != 0); qApp->quit(); } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditUndo() { slotStatusNormalMsg(QString(tr("Undoing action..."))); DigitDoc* doc = activeDocument(); if (doc) doc->undo(); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditRedo() { slotStatusNormalMsg(QString(tr("Redoing action..."))); DigitDoc* doc = activeDocument(); if (doc) doc->redo(); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditCut() { slotStatusNormalMsg(QString(tr("Cutting selection..."))); DigitDoc* doc = activeDocument(); if (doc) doc->cut(activeView()); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditCopy() { slotStatusNormalMsg(QString(tr("Copying selection to clipboard..."))); DigitDoc* doc = activeDocument(); if (doc) doc->copy(activeView()); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditPaste() { slotStatusNormalMsg(QString(tr("Inserting clipboard contents..."))); DigitDoc* doc = activeDocument(); if (doc) doc->paste(activeView()); toggleActions(); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotEditPasteAsNew() { slotStatusNormalMsg(QString(tr("Inserting clipboard image..."))); if (clipboardContainsUris()) { QStringList list = QStringList::split("\n", QApplication::clipboard()->text()); for (QStringList::iterator itr = list.begin(); itr != list.end(); ++itr) importImageFile(Q3UriDrag::uriToLocalFile(*itr)); } else if (!QApplication::clipboard()->image().isNull()) importImageDragged(QApplication::clipboard()->image()); else if (!QApplication::clipboard()->pixmap().isNull()) importPixmapDragged(QApplication::clipboard()->pixmap()); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewFileToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle file toolbar..."))); ASSERT_ENGAUGE(fileToolbar != 0); fileToolbar->setShown(toggle); DefaultSettings::instance().setViewFileToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewSelectToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle select toolbar..."))); ASSERT_ENGAUGE(selectToolbar != 0); selectToolbar->setShown(toggle); DefaultSettings::instance().setViewSelectToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewImageScaleToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle image scale toolbar..."))); ASSERT_ENGAUGE(imageScaleToolbar != 0); imageScaleToolbar->setShown(toggle); DefaultSettings::instance().setViewImageScaleToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewDigitizeCurvePointsToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle digitize curve points toolbar..."))); ASSERT_ENGAUGE(digitizeCurvePointsToolbar != 0); digitizeCurvePointsToolbar->setShown(toggle); DefaultSettings::instance().setViewDigitizeCurvePointsToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewDigitizeMeasurePointsToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle digitize measure points toolbar..."))); ASSERT_ENGAUGE(digitizeMeasurePointsToolbar != 0); digitizeMeasurePointsToolbar->setShown(toggle); DefaultSettings::instance().setViewDigitizeMeasurePointsToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewZoomToolBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle zoom toolbar..."))); ASSERT_ENGAUGE(zoomToolbar != 0); zoomToolbar->setShown(toggle); DefaultSettings::instance().setViewZoomToolbar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewStatusBar(bool toggle) { slotStatusNormalMsg(QString(tr("Toggle statusbar..."))); ASSERT_ENGAUGE(statusBar() != 0); statusBar()->setShown(toggle); DefaultSettings::instance().setViewStatusBar(toggle); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotViewAxesPoints(bool toggle) { if (activeDocument() && toggle) { slotStatusNormalMsg(QString(tr("Show axes points..."))); activeDocument()->setViewPointSelection(ViewAxesPoints); DefaultSettings::instance().setViewPoints(ViewAxesPoints); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotViewScalePoints(bool toggle) { if (activeDocument() && toggle) { slotStatusNormalMsg(QString(tr("Show scale bar points..."))); activeDocument()->setViewPointSelection(ViewScalePoints); DefaultSettings::instance().setViewPoints(ViewScalePoints); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotViewCurvePoints(bool toggle) { if (activeDocument() && toggle) { slotStatusNormalMsg(QString(tr("Show curve points..."))); activeDocument()->setViewPointSelection(ViewCurvePoints); DefaultSettings::instance().setViewPoints(ViewCurvePoints); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotViewMeasurePoints(bool toggle) { if (activeDocument() && toggle) { slotStatusNormalMsg(QString(tr("Show measure points..."))); activeDocument()->setViewPointSelection(ViewMeasurePoints); DefaultSettings::instance().setViewPoints(ViewMeasurePoints); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotViewAllPoints(bool toggle) { if (activeDocument() && toggle) { slotStatusNormalMsg(QString(tr("Show all points..."))); activeDocument()->setViewPointSelection(ViewAllPoints); DefaultSettings::instance().setViewPoints(ViewAllPoints); slotStatusNormalMsg(QString(tr("Ready."))); } } void DigitMain::slotViewNoBackground(bool toggle) { if (activeDocument() && toggle) { activeDocument()->setBackground(BlankBackground); DefaultSettings::instance().setViewBackground(BlankBackground); } } void DigitMain::slotViewOriginalImage(bool toggle) { if (activeDocument() && toggle) { activeDocument()->setBackground(OriginalImage); DefaultSettings::instance().setViewBackground(OriginalImage); } } void DigitMain::slotViewProcessedImage(bool toggle) { if (activeDocument() && toggle) { activeDocument()->setBackground(ProcessedImage); DefaultSettings::instance().setViewBackground(ProcessedImage); } } void DigitMain::slotViewGridDisplay(bool toggle) { ASSERT_ENGAUGE(activeDocument() != 0); activeDocument()->showGridDisplay(toggle); } void DigitMain::slotViewCurveGeometry(bool toggle) { ASSERT_ENGAUGE(curveGeometryDlg != 0); curveGeometryDlg->setShown(toggle); DefaultSettings::instance().setViewCurveGeometry(toggle); } void DigitMain::slotViewMeasureGeometry(bool toggle) { ASSERT_ENGAUGE(measureGeometryDlg != 0); measureGeometryDlg->setShown(toggle); DefaultSettings::instance().setViewMeasureGeometry(toggle); } void DigitMain::slotDigitizeSelect(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Select points..."))); setDigitizeState(SelectState); ASSERT_ENGAUGE(curveCmb != 0); ASSERT_ENGAUGE(measureCmb != 0); if (curveCmb->hasFocus() || measureCmb->hasFocus()) { // Focus is currently on a combobox. Move focus to a view so a Control // keypress (which may occur prior to a click-and-drag) is handled by a // view rather than the combobox which just ignores it. Without this hack // the user has to click in the view to move focus, then press Control, // then click again to start the click-and-drag if (activeDocument()) { focusOnViewOrDoc(activeView(), activeDocument()); } } } } void DigitMain::slotDigitizeAxis(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize axis point..."))); setDigitizeState(AxisState); } } void DigitMain::slotDigitizeScale(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize scale bar..."))); setDigitizeState(ScaleState); } } void DigitMain::slotDigitizeCurve(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize curve point..."))); setDigitizeState(CurveState); } } void DigitMain::slotDigitizeMeasure(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize measure point..."))); setDigitizeState(MeasureState); } } void DigitMain::slotDigitizeSegment(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize segment by filling it with points..."))); setDigitizeState(SegmentState); } } void DigitMain::slotDigitizePointMatch(bool toggle) { if (toggle) { slotStatusNormalMsg(QString(tr("Digitize point plot by first clicking on sample point..."))); setDigitizeState(PointMatchState); } } void DigitMain::slotSettingsCoordSys() { slotStatusNormalMsg(QString(tr("Configuring coordinate system..."))); DigitDoc* doc = activeDocument(); if (doc) { CoordSettings coord = doc->coordSettings(); CoordSysDlg* dlg = new CoordSysDlg(doc->title(), &coord); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setCoordSettings(coord); doc->setCoordSettings(coord); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsAxes() { slotStatusNormalMsg(QString(tr("Configuring axes properties..."))); DigitDoc* doc = activeDocument(); if (doc) { PointSetStyle pointSetStyle = doc->axesStyle(); PointSetDlg* dlg = new PointSetDlg(doc->title(), AxesPointSetName, AxisState, &pointSetStyle); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setAxesStyle(pointSetStyle); doc->setAxesStyle(pointSetStyle); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsScale() { slotStatusNormalMsg(QString(tr("Configuring scale bar properties..."))); DigitDoc* doc = activeDocument(); if (doc) { PointSetStyle pointSetStyle = doc->scaleStyle(); PointSetDlg* dlg = new PointSetDlg(doc->title(), ScalePointSetName, ScaleState, &pointSetStyle); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setScaleStyle(pointSetStyle); doc->setScaleStyle(pointSetStyle); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsCurves() { slotStatusNormalMsg(QString(tr("Adding, removing and editing curves..."))); DigitDoc* doc = activeDocument(); if (doc) { PointSets* copyPointSets = new PointSets; CHECK_PTR_ENGAUGE(copyPointSets); QStringList curvesWithOrphanedPoints; *copyPointSets = *doc->pointSets(); PointSetsDlg* dlg = new PointSetsDlg(true, doc->title(), copyPointSets, &curvesWithOrphanedPoints); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { // save new pointset set into document replacePointSets(doc, copyPointSets, curvesWithOrphanedPoints, true); DefaultSettings::instance().setCurveStyles(copyPointSets->curveStyles()); } else delete copyPointSets; delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsDiscretize() { slotStatusNormalMsg(QString(tr("Configuring discretization..."))); DigitDoc* doc = activeDocument(); if (doc) { DiscretizeSettings discretize = doc->discretizeSettings(); DiscretizeDlg* dlg = new DiscretizeDlg(doc->title(), &(doc->originalImage()), &discretize); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setDiscretizeSettings(discretize); doc->setDiscretizeSettings(discretize); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsGridRemoval() { slotStatusNormalMsg(QString(tr("Configuring grid removal..."))); DigitDoc* doc = activeDocument(); if (doc) { CoordSettings coord = doc->coordSettings(); GridRemovalSettings grid = doc->gridRemovalSettings(); GridRemovalDlg* dlg = new GridRemovalDlg(doc->title(), &(doc->originalImage()), doc->transform(), &coord, &grid); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setGridRemovalSettings(grid); doc->setGridRemovalSettings(grid); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsGridDisplay() { slotStatusNormalMsg(QString(tr("Configuring grid display..."))); DigitDoc* doc = activeDocument(); if (doc) { CoordSettings coord = doc->coordSettings(); GridMeshSettings grid = doc->gridDisplaySettings(); GridMeshDlg* dlg = new GridMeshDlg(QString(tr("Display")), doc->title(), &coord, &grid); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setGridDisplaySettings(grid); ASSERT_ENGAUGE(viewGridDisplay != 0); doc->setGridDisplaySettings(grid, viewGridDisplay->isOn()); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsMeasures() { slotStatusNormalMsg(QString(tr("Adding, removing and editing measures..."))); DigitDoc* doc = activeDocument(); if (doc) { PointSets* copyPointSets = new PointSets; CHECK_PTR_ENGAUGE(copyPointSets); QStringList measuresWithOrphanedPoints; *copyPointSets = *doc->pointSets(); PointSetsDlg* dlg = new PointSetsDlg(false, doc->title(), copyPointSets, &measuresWithOrphanedPoints); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { // save new pointset set into document replacePointSets(doc, copyPointSets, measuresWithOrphanedPoints, false); DefaultSettings::instance().setMeasureStyles(copyPointSets->measureStyles()); } else delete copyPointSets; delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsPointMatch() { slotStatusNormalMsg(QString(tr("Configuring point match settings..."))); DigitDoc* doc = activeDocument(); if (doc) { PointMatchSettings match = doc->pointMatchSettings(); PointMatchDlg* dlg = new PointMatchDlg(doc->title(), doc->curveStyle(curveCmb->currentText()), &match); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setPointMatchSettings(match); doc->setPointMatchSettings(match); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsSegments() { slotStatusNormalMsg(QString(tr("Configuring segment properties..."))); DigitDoc* doc = activeDocument(); if (doc) { SegmentSettings seg = doc->segmentSettings(); SegmentDlg* dlg = new SegmentDlg(doc->title(), &seg); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setSegmentSettings(seg); doc->setSegmentSettings(seg); } delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsExportSetup() { slotStatusNormalMsg(QString(tr("Configuring export settings..."))); DigitDoc* doc = activeDocument(); if (doc) { PointSets* copyPointSets = new PointSets; CHECK_PTR_ENGAUGE(copyPointSets); *copyPointSets = *doc->pointSets(); CoordSettings coordSettings = doc->coordSettings(); GridMeshSettings gridSettings = doc->gridDisplaySettings(); ExportSettings exportSettings = doc->exportSettings(); ExportDlg* dlg = new ExportDlg(doc->title(), copyPointSets, &coordSettings, &gridSettings, &exportSettings); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { // save same set of pointsets into document, but with possibly different set of // pointsets included marked for export QStringList pointSetsWithOrphanedPoints; replacePointSets(doc, copyPointSets, pointSetsWithOrphanedPoints, true); DefaultSettings::instance().setExportSettings(exportSettings); doc->setExportSettings(exportSettings); } else delete copyPointSets; delete dlg; } slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotSettingsSessions() { slotStatusNormalMsg(QString(tr("Configuring sessions settings..."))); SessionsSettings sessionsSettings = DefaultSettings::instance().getSessionsSettings(); SessionsDlg* dlg = new SessionsDlg(&sessionsSettings); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { DefaultSettings::instance().setSessionsSettings(sessionsSettings); } delete dlg; slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotWindowNewWindow() { slotStatusNormalMsg(QString(tr("Opening new document view..."))); DigitDoc* doc = activeDocument(); if (doc) createClient(doc); slotStatusNormalMsg(QString(tr("Ready."))); } void DigitMain::slotHelpAbout() { QMessageBox::about(this, tr("About Engauge Digitizer"), QString("%1%2%3") .arg(tr("Engauge Digitizer\nVersion ")) .arg(VersionNumber) .arg(tr("\n(c) 2002 by Tobias Winchen, Tobias Richter, Mark Mitchell\n" "Engauge Digitizer comes with ABSOLUTELY NO WARRANTY.\n\n" "This is free software, and you are welcome to redistribute it under\n" "certain conditions according to the GNU General Public License Version 2," "or (at your option) any later version.\n" "Read the included LICENSE file for details.\n\n" "Author\nContact: mmdigitizer@gmail.com\n" "(All messages are welcome, and your privacy will be respected)\n\n" "Engauge Digitizer\n" "Home Page: http://digitizer.sourceforge.net\n" "Help Forum: http://sourceforge.net/forum/forum.php?forum_id=229857\n" "Open Discussion Forum: http://sourceforge.net/forum/forum.php?forum_id=229856\n\n" "FFTW 3.X.X\n" "Home Page: http://www.fftw.org"))); } void DigitMain::slotHelpUserManual() { spawnHelp(QString("index.html")); } void DigitMain::slotHelpGlossary() { spawnHelp(QString("glossary.html")); } void DigitMain::slotConverter() { QDir path = helpPath(); QString file(path.absPath() + "/dateconvert.html"); #ifdef WIN32 ShellExecuteA(NULL, "open", file.latin1(), NULL, NULL, SW_SHOWNORMAL); #else QString envValue(getenv(BrowserEnvironmentVariable)); if (envValue.isEmpty()) { #ifndef DEBIAN_PACKAGE QMessageBox::critical(this, tr("Error!"), tr("Environment variable ENGAUGE_BROWSER is not set! It must be set to the command used to start your browser")); #else /* DEBIAN_PACKAGE */ // QMessageBox::critical(this, tr("Error!"), tr("Environment variable ENGAUGE_BROWSER is not set! It must be set to the command used to start your browser")); QString cmd = QString("sh -c '/usr/bin/sensible-browser %2' &").arg(file); system(cmd); #endif /* DEBIAN_PACKAGE */ } else { QString cmd = QString("sh -c '%1 %2' &").arg(envValue).arg(file); system(cmd); } #endif } void DigitMain::slotHelpLineGraphTutorial() { spawnHelp(QString("tutormanlinegraph.html")); } void DigitMain::slotHelpPointGraphTutorial() { spawnHelp(QString("tutormanpointgraph.html")); } void DigitMain::slotHelpMapTutorial() { spawnHelp(QString("tutormanmap.html")); } void DigitMain::slotStatusNormalMsg(const QString &text) { ASSERT_ENGAUGE(statusNormal != 0); statusNormal->setText(text); } void DigitMain::slotStatusPermanentMsg(const QString &text) { ASSERT_ENGAUGE(statusPermanent != 0); statusPermanent->setText(text); } void DigitMain::slotStatusTemporaryMsg(const QString &text) { ASSERT_ENGAUGE(statusNormal != 0); statusNormal->setText(text); } void DigitMain::slotStatusTrackingMsg(const QString &textCoords, const QString &textRes) { ASSERT_ENGAUGE(statusCoords != 0); statusCoords->setText(textCoords); ASSERT_ENGAUGE(statusRes != 0); statusRes->setText(textRes); } void DigitMain::slotMenuPreactivated() { ASSERT_ENGAUGE(windowMenu != 0); windowMenu->clear(); ASSERT_ENGAUGE(windowNewWindow != 0); windowNewWindow->addTo(windowMenu); ASSERT_ENGAUGE(windowCascade != 0); windowCascade->addTo(windowMenu); ASSERT_ENGAUGE(windowTile != 0); windowTile->addTo(windowMenu); ASSERT_ENGAUGE(windowMenu != 0); windowMenu->insertSeparator(); ASSERT_ENGAUGE(workspace != 0); ASSERT_ENGAUGE(windowAction != 0); if (workspace->subWindowList().isEmpty()) windowAction->setEnabled(false); else windowAction->setEnabled(true); QList windows = workspace->subWindowList(); for (int i = 0; i < int(windows.count()); ++i) { ASSERT_ENGAUGE(windows.at(i) != 0); int id = windowMenu->insertItem(QString("&%1 ").arg(i+1) + windows.at(i)->caption(), this, SLOT(slotMenuActivated(int))); windowMenu->setItemParameter(id, i); windowMenu->setItemChecked(id, workspace->activeSubWindow() == windows.at(i)); } } void DigitMain::slotMenuActivated (int id) { ASSERT_ENGAUGE(workspace != 0); QMdiSubWindow* view = workspace->subWindowList().at(id); if (view) view->setFocus(); } void DigitMain::slotCurveComboActivated(int) { if (activeDocument()) { // keep current state, but save curveCmb selection to the active document setDigitizeState(activeDocument()->digitizeState()); ASSERT_ENGAUGE(viewPointsAction != 0); if (viewCurvePoints->isOn()) { // hide unwanted curves and show wanted curve slotViewCurvePoints(true); } activeDocument()->sendUpdateGeometry(); } } void DigitMain::slotMeasureComboActivated(int) { if (activeDocument()) { // keep current state, but save measureCmb selection to the active document setDigitizeState(activeDocument()->digitizeState()); ASSERT_ENGAUGE(viewPointsAction != 0); if (viewMeasurePoints->isOn()) { // hide unwanted measures and show wanted measure slotViewMeasurePoints(true); } activeDocument()->sendUpdateGeometry(); } } void DigitMain::slotSelectionChange() { toggleActionsEdit(); } void DigitMain::slotTransformationChange() { toggleActions(); } void DigitMain::slotHideCurveGeometry() { ASSERT_ENGAUGE(viewCurveGeometry != 0); viewCurveGeometry->setOn(false); } void DigitMain::slotHideMeasureGeometry() { ASSERT_ENGAUGE(viewMeasureGeometry != 0); viewMeasureGeometry->setOn(false); } void DigitMain::slotUpdateGeometry() { if (activeDocument()) { GeometryWindowItemList info; if (activeDocument()->geometryInfoCurve(info)) displayCurveGeometry(info); if (activeDocument()->geometryInfoMeasure(info)) displayMeasureGeometry(info); } else noGeometryInfo(); } engauge-digitizer-5.2/src/digitmain.h000066400000000000000000000412741222557406400177070ustar00rootroot00000000000000/*************************************************************************** digitmain.h - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITMAIN_H #define DIGITMAIN_H #include #include #include #include #include #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #include #include #include #include #include "digitdef.h" #include "geometrywindowitem.h" #include "mrudocuments.h" class DigitDoc; class DigitView; class CurveCmb; class MeasureCmb; class PointSets; class ZoomCmb; class GeometryDlg; // this class owns the main window, including the menus, toolbars, status bar class DigitMain : public QMainWindow { Q_OBJECT public: DigitMain(QString exportFileAtShutdown); ~DigitMain(); // imports an image file specified by commandline option or dialog box void importImageFile(const QString file); // import void importImageFile(const QString file, double xMinG, double xMaxG, double yMinG, double yMaxG); // import and isolate axes // opens a document file specified by commandline option or dialog box void openDocumentFile(const QString file); protected: // query before exiting since user has unsaved changes bool queryExit(); // event filter to catch close events for MDI child windows and is installed in // createClient() on every child window. Closing a window calls the eventFilter // first which removes the view from the connected documents' view list. If the // last view is going to be closed, the eventFilter() tests if the document is // modified; if yes, it asks the user to save the document. If the document has // never been saved, slotFileSaveAs() gets called to get a save name and path. virtual bool eventFilter(QObject* object, QEvent* event); // main window move and resize events are caught and the geometry is saved virtual void moveEvent(QMoveEvent* pEvent); virtual void resizeEvent(QResizeEvent* pEvent); // support import by dragging an image virtual void dragEnterEvent(QDragEnterEvent* pEvent); virtual void dropEvent(QDropEvent* pEvent); // creates a new child window. The document that will be connected to it // has to be created before and the instances filled, with e.g. openDocument(), // followed by a call createClient() to get a new MDI child window. void createClient(DigitDoc* doc); public slots: // update geometry info of curve and measure curves if they have been modified void slotUpdateGeometry(void); // update paste-as-new menu option if clipboard contents change void slotClipboardChanged(); // recent file name was chosen in mru popup menu. this is not invoked by fileOpenRecent menu option void slotFileOpenRecent(QString filename); private slots: // generate a new document in the actual view void slotFileImport(); // open a document void slotFileOpen(); // save a document void slotFileSave(); // save a document under a different filename void slotFileSaveAs(); // close the actual file void slotFileClose(); // export to text file void slotFileExport(); // export to text file under a different filename void slotFileExportAs(); // print the actual file void slotFilePrint(); // exits the application void slotFileExit(); // undo last action void slotEditUndo(); // redo next action void slotEditRedo(); // put the marked text/object into the clipboard and remove it from the document void slotEditCut(); // put the marked text/object into the clipboard void slotEditCopy(); // paste the clipboard into the document void slotEditPaste(); // import image in the clipboard as new document void slotEditPasteAsNew(); // toggle the file toolbar void slotViewFileToolBar(bool toggle); // toggle the select toolbar void slotViewSelectToolBar(bool toggle); // toggle the image scale toolbar void slotViewImageScaleToolBar(bool toggle); // toggle the digitize curve points toolbar void slotViewDigitizeCurvePointsToolBar(bool toggle); // toggle the digitize measure points toolbar void slotViewDigitizeMeasurePointsToolBar(bool toggle); // toggle the zoom toolbar void slotViewZoomToolBar(bool toggle); // toggle the statusbar void slotViewStatusBar(bool toggle); // toggle showing only axes points void slotViewAxesPoints(bool toggle); // toggle showing only scale bar points void slotViewScalePoints(bool toggle); // toggle showing only active curve points void slotViewCurvePoints(bool toggle); // toggle showing only measure points void slotViewMeasurePoints(bool toggle); // toggle showing all points void slotViewAllPoints(bool toggle); // no image in background void slotViewNoBackground(bool toggle); // original image in background void slotViewOriginalImage(bool toggle); // processed image in background void slotViewProcessedImage(bool toggle); // toggle the gridlines display void slotViewGridDisplay(bool toggle); // toggle the curve geometry dialog box void slotViewCurveGeometry(bool toggle); // toggle the measure geometry dialog box void slotViewMeasureGeometry(bool toggle); // coordinate system settings void slotSettingsCoordSys(); // axes settings void slotSettingsAxes(); // scale bar settings void slotSettingsScale(); // curves settings void slotSettingsCurves(); // segments settings void slotSettingsSegments(); // point match settings void slotSettingsPointMatch(); // measure settings void slotSettingsMeasures(); // grid removal settings void slotSettingsGridRemoval(); // grid display settings void slotSettingsGridDisplay(); // discretize settings void slotSettingsDiscretize(); // setup export void slotSettingsExportSetup(); // sessions settings void slotSettingsSessions(); // change to select mode void slotDigitizeSelect(bool toggle); // change to axis point mode void slotDigitizeAxis(bool toggle); // change to scale bar mode void slotDigitizeScale(bool toggle); // change to curve point mode void slotDigitizeCurve(bool toggle); // change to segment fill mode void slotDigitizeSegment(bool toggle); // change to point match mode void slotDigitizePointMatch(bool toggle); // change to measure mode void slotDigitizeMeasure(bool toggle); // creates a new view for the current document void slotWindowNewWindow(); // shows an about dialog void slotHelpAbout(); // shows user manual in browser void slotHelpUserManual(); // shows glossary in browser void slotHelpGlossary(); // shows date/time converter in browser void slotConverter(); // shows manual line graph tutorial in browser void slotHelpLineGraphTutorial(); // shows manual point graph tutorial in browser void slotHelpPointGraphTutorial(); // shows map tutorial in browser void slotHelpMapTutorial(); // display normal message in statusbar void slotStatusNormalMsg(const QString &text); // display permanent message in statusbar void slotStatusPermanentMsg(const QString &text); // display temporary message in statusbar void slotStatusTemporaryMsg(const QString &text); // display tracking information in statusbar void slotStatusTrackingMsg(const QString &textCoords, const QString &textRes); // gets called when the window menu is activated; recreates the window menu with all opened window titles void slotMenuPreactivated(); // activates the MDI child widget when it gets selected from the window menu void slotMenuActivated(int id); // receive selection from combobox containing list of pointsets void slotCurveComboActivated(int); void slotMeasureComboActivated(int); // selection just changed void slotSelectionChange(void); // transformation just transitioned from invalid to valid, or vice versa void slotTransformationChange(void); // hide curve or measure pointset geometry info windows void slotHideCurveGeometry(void); void slotHideMeasureGeometry(void); private: // imports an image received by drag and drop void importImageDragged(const QImage& image); // imports a pixmap received by drag and drop void importPixmapDragged(const QPixmap& pixmap); // initialize all QActions of the application void initActions(); // initialize the geometry info windows void initGeometryInfo(); // initMenuBar creates the menu_bar and inserts the menuitems void initMenuBar(); // setup the statusbar void initStatusBar(); // setup the file and digitize toolbars void initToolBars(); // setup the mainview void initView(); // perform the first initialization steps of a new document DigitDoc* newDocument(void); // turn off the digitize buttons. when toggleAction turns on a button that is still // on from a previous document, the signal gets dropped which skips necessary initialization void resetActions(void); // attach curveCmb combobox to document. use zero to detach current document void setCurveCmb(DigitDoc* doc); // attach measureCmb combobox to document. use zero to detach current document void setMeasureCmb(DigitDoc* doc); // replace either curves or measures pointsets in document, using list of // points that have orphaned points void replacePointSets(DigitDoc* doc, PointSets* copyPointSets, QStringList &pointSetsWithOrphanedPoints, bool replacingCurves); // the document that owns the currently active DigitView DigitDoc* activeDocument(void); // remove and delete specified document void removeDocument(DigitDoc* doc); // the currently active DigitView. setting the active view also sets the active document DigitView* activeView(void); void setActiveView(DigitView* view); // return true if view pointer points to valid view bool findView(DigitView* view); // save current state to all documents, and current curveCmb and measureCmb selections to active document void setDigitizeState(DigitizeState digitizeState); // event handling for specific events bool eventClose(QObject* object, QEvent* event); bool eventKeyPress(QObject* object, QEvent* event); // toggle menu_bar and toolbar actions depending on active document state void toggleActions(void); // toggle menu_bar edit actions void toggleActionsEdit(void); // paste-as-new availability depends on external clipboard so it is updated separately void toggleActionPasteAsNew(void); // display geometry info of currently active curve or measure void displayCurveGeometry(GeometryWindowItemList& rInfo); void displayMeasureGeometry(GeometryWindowItemList& rInfo); void noGeometryInfo(void); // spawn help browser void spawnHelp(QString helpHome); // move focus to specified view if defined, otherwise first view of specified doc void focusOnViewOrDoc(DigitView* view, DigitDoc* doc); // only quit if there are no unsaved changes, or user does not care bool safeToQuit(); bool canCloseFrame(DigitDoc* doc, DigitView* view); // save document and return true if operation was canceled bool documentSave(DigitDoc* doc); bool documentSaveAs(DigitDoc* doc); // help directory QDir helpPath(); // one or more file names may be specified as file:/home/dir/file with linefeed delimiters bool clipboardContainsUris(); // file menu contains all items of the menubar entry "File" QMenu* fileMenu; // edit menu contains all items of the menubar entry "Edit" QMenu* editMenu; // view menu contains all items of the menubar entry "View" QMenu* viewMenu; // digitize menu contains all items of the menubar entry "Digitize" QMenu* digitizeMenu; // settings menu contains all items of the menubar entry "Settings" QMenu* settingsMenu; // view menu contains all items of the menubar entry "Help" QMenu* helpMenu; // window menu QMenu* windowMenu; QToolBar* fileToolbar; QToolBar* selectToolbar; QToolBar* imageScaleToolbar; QToolBar* digitizeCurvePointsToolbar; QToolBar* digitizeMeasurePointsToolbar; QToolBar* zoomToolbar; // comboboxes owned by digitizeCurvePointsToolbar and digitizeMeasurePointsToolbar respectively CurveCmb* curveCmb; MeasureCmb* measureCmb; // combobox owned by zoomToolbar ZoomCmb* zoomCmb; // workspace is the MDI frame widget that handles MDI child widgets QMdiArea* workspace; // the printer instance QPrinter* printer; // a list of all open documents. If the last window of a document gets closed, the installed // eventFilter removes this document from the list. The document list is checked for modified // documents when the user is about to close the application Q3PtrList* docList; QAction* fileImport; QAction* fileOpen; QMenu* fileOpenRecent; QAction* fileSave; QAction* fileSaveAs; QAction* fileClose; QAction* fileExport; QAction* fileExportAs; QAction* filePrint; QAction* fileExit; QAction* editUndo; QAction* editRedo; QAction* editCut; QAction* editCopy; QAction* editPaste; QAction* editPasteAsNew; QAction* viewFileToolBar; QAction* viewSelectToolBar; QAction* viewImageScaleToolBar; QAction* viewDigitizeCurvePointsToolBar; QAction* viewDigitizeMeasurePointsToolBar; QAction* viewZoomToolBar; QAction* viewStatusBar; QActionGroup* viewPointsAction; QAction* viewAxesPoints; QAction* viewScalePoints; QAction* viewCurvePoints; QAction* viewMeasurePoints; QAction* viewAllPoints; QActionGroup* viewBackgroundAction; QAction* viewNoBackground; QAction* viewOriginalImage; QAction* viewProcessedImage; QAction* viewGridDisplay; QAction* viewCurveGeometry; QAction* viewMeasureGeometry; QActionGroup* digitizeAction; QAction* digitizeSelect; QAction* digitizeAxis; QAction* digitizeScale; QAction* digitizeCurve; QAction* digitizeSegment; QAction* digitizePointMatch; QAction* digitizeMeasure; QAction* settingsCoordSys; QAction* settingsAxes; QAction* settingsScale; QAction* settingsCurves; QAction* settingsSegments; QAction* settingsPointMatch; QAction* settingsMeasures; QAction* settingsDiscretize; QAction* settingsGridRemoval; QAction* settingsGridDisplay; QAction* settingsExportSetup; QAction* settingsSessions; QActionGroup* windowAction; QAction* windowNewWindow; QAction* windowTile; QAction* windowCascade; QAction* helpAboutApp; QAction* helpUserManual; QAction* helpGlossary; QAction* helpConverter; QAction* helpLineGraphTutorial; QAction* helpPointGraphTutorial; QAction* helpMapTutorial; // status bar perment message, coordinates and resolution QLabel* statusNormal; QLabel* statusPermanent; QLabel* statusCoords; QLabel* statusRes; // active view currently owns keyboard focus DigitView* m_activeView; // geometry information windows are always alive and accepting information, but only sometimes visible GeometryDlg* curveGeometryDlg; GeometryDlg* measureGeometryDlg; // maintain the list of most recently used documents MruDocuments m_mruDocuments; // optionally export file at shutdown if string is not empty QString m_exportFileAtShutdown; }; #endif // DIGITMAIN_H engauge-digitizer-5.2/src/digittool.cpp000066400000000000000000000525211222557406400202700ustar00rootroot00000000000000/*************************************************************************** digittool.cpp - description ------------------- begin : Tue Nov 5 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include "digittool.h" #include "digitdoc.h" #include "digitview.h" #include "axispointdlg.h" #include "scalebardlg.h" #include "segment.h" #include "digitdebug.h" #include "main.h" // define the tool list before its members Q3PtrList DigitTool::toolList; // define the members of the tool list static PointAxisTool axisTool; static PointCurveTool curveTool; static PointMatchTool matchTool; static PointMeasureTool measureTool; static ScaleTool scaleTool; static SegmentTool segmentTool; static SelectTool selectTool; DigitTool::DigitTool(DigitizeState state) : m_state(state) { DigitDebug::ctor(QString("digittool ") + QString::number((ulong) this, 16)); toolList.append(this); } DigitTool::~DigitTool() { DigitDebug::dtor(QString("digittool ") + QString::number((ulong) this, 16)); } DigitTool* DigitTool::findTool(DigitizeState state) { DigitTool* tool; for (tool = toolList.first(); tool; tool = toolList.next()) { ASSERT_ENGAUGE(tool != 0); if (tool->state() == state) return tool; } FATAL_ENGAUGE(QObject::tr("could not find tool for state %1") .arg(state)); return 0; } bool DigitTool::editAxisPoint(DigitView* view, double* x, double* y) { // if first selected item is an axis point, edit its properties while (true) { ASSERT_ENGAUGE(view != 0); AxisPointDlg* dlg = new AxisPointDlg(view->document(), *x, *y); CHECK_PTR_ENGAUGE(dlg); int rtn = dlg->exec(); if (rtn == QDialog::Accepted) { // get validated graph coordinates *x = dlg->x(); *y = dlg->y(); } delete dlg; if ((rtn != QDialog::Accepted) || (view->document()->validAxisPoint(*x, *y))) return rtn == QDialog::Accepted; else { ASSERT_ENGAUGE(view->document() != 0); QMessageBox::warning(0, view->document()->title(), QObject::tr("Log scale coordinates must be greater than zero")); } } } bool DigitTool::editScalePoint(DigitView* view, double* length) { // if first selected item is a scale bar point, edit its properties while (true) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ScaleBarDlg* dlg = new ScaleBarDlg(view->document(), *length); CHECK_PTR_ENGAUGE(dlg); int rtn = dlg->exec(); if (rtn == QDialog::Accepted) { // get validated graph coordinates sscanf(dlg->length(), "%lg", length); } delete dlg; if ((rtn != QDialog::Accepted) || (*length > 0.0)) return rtn == QDialog::Accepted; else QMessageBox::warning(0, view->document()->title(), QObject::tr("Scale bar lengths must have positive nonzero length")); } } void DigitTool::keyPressEvent(DigitView* view, QKeyEvent* e) { // handle the arrow keys ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(e != 0); switch (e->key()) { case Qt::Key_Up: view->moveSelection(QPoint(0, -1)); break; case Qt::Key_Down: view->moveSelection(QPoint(0, +1)); break; case Qt::Key_Left: view->moveSelection(QPoint(-1, 0)); break; case Qt::Key_Right: view->moveSelection(QPoint(+1, 0)); break; default: e->ignore(); break; } } void DigitTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { ASSERT_ENGAUGE(e != 0); switch (e->key()) { case Qt::Key_Up: case Qt::Key_Down: case Qt::Key_Left: case Qt::Key_Right: // update lines between points since order may have changed ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); view->document()->finishMove(); break; default: // let base class handle this e->ignore(); break; } } PointAxisTool::PointAxisTool() : DigitTool(AxisState) { DigitDebug::ctor(QString("pointaxistool ") + QString::number((ulong) this)); } PointAxisTool::~PointAxisTool() { DigitDebug::dtor(QString("pointaxistool ") + QString::number((ulong) this)); } void PointAxisTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void PointAxisTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); } void PointAxisTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } if (view->document()->axisPointCount() > 2) { QMessageBox::warning(0, view->document()->title(), QObject::tr("No more than three axis points can be created")); } else { Point* p; p = view->document()->addPoint(e->pos().x(), e->pos().y()); double x = 0.0, y = 0.0; if (editAxisPoint(view, &x, &y)) view->document()->setAxisPoint(p, x, y); else view->document()->removeGestatingPoint(p); view->document()->sendUpdateGeometry(); } } void PointAxisTool::contentsMouseReleaseEvent(DigitView*, QMouseEvent*) { } void PointAxisTool::keyPressEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyPressEvent(view, e); } void PointAxisTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } PointCurveTool::PointCurveTool() : DigitTool(CurveState) { DigitDebug::ctor(QString("pointcurvetool ") + QString::number((ulong) this)); } PointCurveTool::~PointCurveTool() { DigitDebug::dtor(QString("pointcurvetool ") + QString::number((ulong) this)); } void PointCurveTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void PointCurveTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); } void PointCurveTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } view->document()->addPoint(e->pos().x(), e->pos().y()); view->document()->sendUpdateGeometry(); } void PointCurveTool::contentsMouseReleaseEvent(DigitView*, QMouseEvent*) { } void PointCurveTool::keyPressEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyPressEvent(view, e); } void PointCurveTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } PointMatchTool::PointMatchTool() : DigitTool(PointMatchState) { DigitDebug::ctor(QString("pointmatchtool ") + QString::number((ulong) this)); } PointMatchTool::~PointMatchTool() { DigitDebug::dtor(QString("pointmatchtool ") + QString::number((ulong) this)); } void PointMatchTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void PointMatchTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); view->document()->highlightCandidateMatchPoint(e->pos()); } void PointMatchTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } if (!view->document()->matchSamplePoint(e->pos())) QMessageBox::warning(0, view->document()->title(), QObject::tr("Place the cursor over a sample point. Once it is highlighted, click once to start point matching")); } void PointMatchTool::contentsMouseReleaseEvent(DigitView*, QMouseEvent*) { } void PointMatchTool::keyPressEvent(DigitView* view, QKeyEvent*e) { // handle the arrow keys ASSERT_ENGAUGE(e != 0); if ((e->key() == Qt::Key_Up) || (e->key() == Qt::Key_Down) || (e->key() == Qt::Key_Left) || (e->key() == Qt::Key_Right) || (e->key() == Qt::Key_Space)) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); if ((e->key() == Qt::Key_Up) || (e->key() == Qt::Key_Right)) view->document()->matchPointAccept(); else if (e->key() == Qt::Key_Space) view->document()->matchPointReject(); else view->document()->matchPointRemove(); } else // let base class handle this e->ignore(); } void PointMatchTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } PointMeasureTool::PointMeasureTool() : DigitTool(MeasureState) { DigitDebug::ctor(QString("pointmeasuretool ") + QString::number((ulong) this)); } PointMeasureTool::~PointMeasureTool() { DigitDebug::dtor(QString("pointmeasuretool ") + QString::number((ulong) this)); } void PointMeasureTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void PointMeasureTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); } void PointMeasureTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } view->document()->addPoint(e->pos().x(), e->pos().y()); view->document()->sendUpdateGeometry(); } void PointMeasureTool::contentsMouseReleaseEvent(DigitView*, QMouseEvent*) { } void PointMeasureTool::keyPressEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyPressEvent(view, e); } void PointMeasureTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } ScaleTool::ScaleTool() : DigitTool(ScaleState), drawingBar(false) { DigitDebug::ctor(QString("scaletool ") + QString::number((ulong) this)); } ScaleTool::~ScaleTool() { DigitDebug::dtor(QString("scaletool ") + QString::number((ulong) this)); } void ScaleTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void ScaleTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); if (drawingBar) { view->document()->removeGestatingPoint(pointEnd); pointEnd = view->document()->addPoint(e->pos().x(), e->pos().y()); } } void ScaleTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } if (view->document()->scalePointCount() > 0) { QMessageBox::warning(0, view->document()->title(), QObject::tr("No more than one scale bar can be created")); } else { drawingBar = true; cursorDown = e->pos(); pointStart = view->document()->addPoint(cursorDown.x(), cursorDown.y()); // end point starts out collocated with start point, but then is dragged around. // we specify an arbitrary length for setScalePoint which will be replaced after mouse release pointEnd = view->document()->addPoint(cursorDown.x(), cursorDown.y()); } } void ScaleTool::contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e) { if (drawingBar) { drawingBar = false; ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); // sanity checks if (cursorDown == e->pos()) { QMessageBox::warning(0, view->document()->title(), QObject::tr("Scale bar is drawn by clicking and dragging. You must drag to a new point")); view->document()->removeGestatingPoint(pointStart); view->document()->removeGestatingPoint(pointEnd); view->document()->sendUpdateGeometry(); return; } double length = 1.0; if (editScalePoint(view, &length)) { // there is no single scale bar object, instead there are just two points so arbitrarily // set origin to be first point and put second point on x axis view->document()->setScalePoint(pointStart, 0.0, 0.0); view->document()->setScalePoint(pointEnd, length, 0.0); } else { view->document()->removeGestatingPoint(pointStart); view->document()->removeGestatingPoint(pointEnd); } view->document()->sendUpdateGeometry(); } } void ScaleTool::keyPressEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyPressEvent(view, e); } void ScaleTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } SegmentTool::SegmentTool() : DigitTool(SegmentState), activeSegment(0) { DigitDebug::ctor(QString("segmenttool ") + QString::number((ulong) this)); } SegmentTool::~SegmentTool() { DigitDebug::dtor(QString("segmenttool ") + QString::number((ulong) this)); } void SegmentTool::activateSegment(DigitView* view, QMouseEvent* e) { // look for segment under the cursor. other drawing objects are ignored ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(e != 0); Q3CanvasItemList list = view->collisionsFiltered(e->pos(), Rtti_SegmentLine); if (list.count() > 0) { // item found under cursor. for speed and reduced flicker, only update the selection // if the new segment line is not owned by the active segment SegmentLine* line = (SegmentLine*) list.first(); ASSERT_ENGAUGE(line != 0); if (activeSegment != line->segment()) { // replace the single selected segment line by all of the lines owned by the active segment activeSegment = line->segment(); view->selectSegment(activeSegment); } } else { // no item found under cursor view->unselect(); activeSegment = 0; } } void SegmentTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void SegmentTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); activateSegment(view, e); } void SegmentTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); if (!view->document()->bounds().contains(e->pos())) { QApplication::beep(); return; } activateSegment(view, e); if (activeSegment) { QList list = activeSegment->fillPoints(view->document()->segmentSettings()); QList::iterator itr; for (itr = list.begin(); itr != list.end(); ++itr) { view->document()->addPoint((*itr).x(), (*itr).y()); } view->document()->sendUpdateGeometry(); } } void SegmentTool::contentsMouseReleaseEvent(DigitView*, QMouseEvent*) { } void SegmentTool::keyPressEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyPressEvent(view, e); } void SegmentTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { DigitTool::keyReleaseEvent(view, e); } SelectTool::SelectTool() : DigitTool(SelectState), selectMode(None) { } SelectTool::~SelectTool() { } void SelectTool::contentsMouseDoubleClickEvent(DigitView*, QMouseEvent*) { } void SelectTool::contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); ASSERT_ENGAUGE(e != 0); view->document()->trackCursor(e->pos()); QPoint cursorNext = e->pos(); switch (selectMode) { case None: break; case Move: view->moveSelection(cursorNext - cursorLast); break; case AreaSelect: view->showAreaSelectMove(cursorDown, cursorLast, cursorNext); break; } cursorLast = cursorNext; } void SelectTool::contentsMousePressEvent(DigitView* view, QMouseEvent* e) { ASSERT_ENGAUGE(e != 0); cursorDown = e->pos(); cursorLast = e->pos(); // look for points under the cursor ASSERT_ENGAUGE(view != 0); Q3CanvasItemList list = view->collisionsFiltered(cursorDown, Rtti_Point); if (!list.empty()) { // click was on item if (e->button() == Qt::RightButton) { if (list.first()->rtti() == Rtti_Point) { Point* p = (Point *) list.first(); if (p->pointSet()->name() == AxesPointSetName) { double x = p->xThetaGraph(); double y = p->yRGraph(); if (editAxisPoint(view, &x, &y)) { ASSERT_ENGAUGE(view->document() != 0); view->document()->setAxisPoint(p, x, y); } } else if (p->pointSet()->name() == ScalePointSetName) { double length = p->xThetaGraph(); if (editScalePoint(view, &length)) { ASSERT_ENGAUGE(view->document() != 0); view->document()->setScalePoint(p, length, 0.0); } } } } else if (e->state() == Qt::ShiftModifier) { // shift click causes list to be added to, or removed from, the selection view->selectItemsToggle(&list); } else { // regular click starts a move selectMode = Move; if (!view->pointIsSelected(list.first())) // replace existing selection if any view->selectItemsReplace(&list); } } else { if ((e->state() & Qt::ControlModifier) != 0) { // this is the start of a click and drag operation, and the control button was // pressed earlier. this branch is needed for the case when the control button // was pressed when the focus was elsewhere, since the case when the focus was // on the view was handled in SelectTool::keyPressEvent (although this still // makes a redundant call to startShowOnlySelectedCurve) ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); view->document()->startShowOnlySelectedCurve(); } // start area selection selectMode = AreaSelect; } } void SelectTool::contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e) { Q3CanvasItemList list; ASSERT_ENGAUGE(e != 0); QPoint cursorNext = e->pos(); switch (selectMode) { case None: break; case Move: ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); view->document()->finishMove(); break; case AreaSelect: ASSERT_ENGAUGE(view != 0); view->showAreaSelectEnd(cursorDown, cursorLast); Q3CanvasItemList list = view->collisionsFiltered(cursorDown, cursorNext, Rtti_Point); view->selectItemsReplace(&list); break; } selectMode = None; } void SelectTool::keyPressEvent(DigitView* view, QKeyEvent* e) { // ideally there would be one key for showing the selected curve, and another // key for showing the selected measure. although the control button works fine // for the selected curve (which is more important), there is apparently no useful // available button for showing the selected measure: // shift - already used for adding new selected points to existing selected points // alt - latches so it requires user to always push it twice to correspond to // the key press/release sequence of other keys // meta - interacts with operating system (in linux at least) // letters - C for curve and M for measure does not work since holding down // a letter key causes autorepeat which results in many key events per // second which then causes flicker on the screen as widgets disappear // and reappear // so, due to lack of available options there is no equivalent for showing the // selected measure // was the just pressed key the control button? if (e->key() == Qt::Key_Control) { // this branch is reached when the control button is pressed while the view has // focus. the separate case of pressing the control button with focus elsewhere // followed by click and drag in this view, is handled in // SelectTool::contentsMousePressEvent ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); view->document()->startShowOnlySelectedCurve(); e->ignore(); } else { DigitTool::keyPressEvent(view, e); } } void SelectTool::keyReleaseEvent(DigitView* view, QKeyEvent* e) { // was the just released key the control button? if (e->key() == Qt::Key_Control) { ASSERT_ENGAUGE(view != 0); ASSERT_ENGAUGE(view->document() != 0); view->document()->stopShowOnlySelectedCurve(); e->ignore(); } else { DigitTool::keyReleaseEvent(view, e); } } engauge-digitizer-5.2/src/digittool.h000066400000000000000000000162751222557406400177430ustar00rootroot00000000000000/*************************************************************************** digittool.h - description ------------------- begin : Tue Nov 5 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITTOOL_H #define DIGITTOOL_H #include #include #include #include //Added by qt3to4: #include #include #include "digitdef.h" class DigitView; class Point; class Segment; // base class handler for keyboard and mouse input class DigitTool { public: DigitTool(DigitizeState state); virtual ~DigitTool(); // each tool object corresponds to a particular state DigitizeState state(void) { return m_state; } // methods and members that access the tool appropriate for the current mode static DigitTool* findTool(DigitizeState state); static Q3PtrList toolList; // area select selects all objects in a rectangular area static bool areaSelect; virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e) = 0; virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e) = 0; virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e) = 0; virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e) = 0; virtual void keyPressEvent(DigitView* view, QKeyEvent* e) = 0; virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e) = 0; protected: // edit the graph coordinates of an axis or scale bar point bool editAxisPoint(DigitView* view, double* x, double* y); bool editScalePoint(DigitView* view, double* length); private: DigitizeState m_state; }; // handler for keyboard and mouse input while in axis mode class PointAxisTool : public DigitTool { public: PointAxisTool(); ~PointAxisTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); }; // handler for keyboard and mouse input while in curve mode class PointCurveTool : public DigitTool { public: PointCurveTool(); ~PointCurveTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); }; // handler for keyboard and mouse input while in point match mode class PointMatchTool : public DigitTool { public: PointMatchTool(); ~PointMatchTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); }; // handler for keyboard and mouse input while in measure mode class PointMeasureTool : public DigitTool { public: PointMeasureTool(); ~PointMeasureTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); }; // handler for keyboard and mouse input while in scale bar mode class ScaleTool : public DigitTool { public: ScaleTool(); ~ScaleTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); private: // true from mouse press to mouse release bool drawingBar; // keep track of where cursor was when mouse was pressed QPoint cursorDown; // start and end points Point* pointStart; Point* pointEnd; }; // handler for keyboard and mouse input while in segment fill mode class SegmentTool : public DigitTool { public: SegmentTool(); ~SegmentTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); private: // activate a segment if cursor is over it void activateSegment(DigitView* view, QMouseEvent* e); Segment* activeSegment; }; // handler for keyboard and mouse input while in select mode class SelectTool : public DigitTool { public: SelectTool(); ~SelectTool(); virtual void contentsMouseDoubleClickEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseMoveEvent(DigitView* view, QMouseEvent* e); virtual void contentsMousePressEvent(DigitView* view, QMouseEvent* e); virtual void contentsMouseReleaseEvent(DigitView* view, QMouseEvent* e); virtual void keyPressEvent(DigitView* view, QKeyEvent* e); virtual void keyReleaseEvent(DigitView* view, QKeyEvent* e); private: enum SelectMode { None, Move, AreaSelect }; SelectMode selectMode; // keep track of where cursor was when mouse was pressed, and at previous refresh QPoint cursorDown; QPoint cursorLast; }; #endif // DIGITTOOL_H engauge-digitizer-5.2/src/digitview.cpp000066400000000000000000000372751222557406400202760ustar00rootroot00000000000000/*************************************************************************** digitview.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include //Added by qt3to4: #include #include #include #include #include #include #include "digitview.h" #include "digitdoc.h" #include "digittool.h" #include "transform.h" #include "segment.h" #include "digitdebug.h" #include "main.h" #include "img/bannerview.xpm" #include "defaultsettings.h" DigitView::DigitView(DigitDoc* doc, QWidget* parent, const char* name, Qt::WindowFlags wFlags) : Q3CanvasView(doc->canvas(), parent, name, wFlags), m_doc(doc), m_rubberBandRect(QRubberBand::Rectangle, this), m_rubberBandLine(QRubberBand::Line, this), m_zoom(100) { DigitDebug::ctor(QString("digitview ") + QString::number((ulong) this, 16)); m_rubberBandRect.hide(); m_rubberBandLine.hide(); QPixmap bannerIcon(bannerview_xpm); setIcon(bannerIcon); // turn on mouse tracking so cursor coordinates can be displayed even with mouse not pressed viewport()->setMouseTracking(true); // set focus policy so focusIn events are caught under ms windows. linux // catches those events without any help setFocusPolicy(Qt::StrongFocus); m_handles.setAutoDelete(true); QWhatsThis::add(this, QString(tr("View of the current document\n\n" "If document is a graph, add three axis points to define the graph " "coordinates, and then add curve points to digitize the curves\n\n" "If document is a map, add a scale bar to define the graph " "coordinates, and then add measure points to measure the geometry"))); } DigitView::~DigitView() { DigitDebug::dtor(QString("digitview ") + QString::number((ulong) this, 16)); } void DigitView::drawRubberBandRectangle(QPoint corner1, QPoint corner2) { // Next line gives error 'QPainter::begin: Widget painting can only begin as a result of a paintEvent' // QPainter p(viewport()); // Next two lines give error 'QPainter::setPen: Painter not active' // p.setPen(QColor(255, 255, 255)); // p.setPen(Qt::DotLine); //p.setRasterOp(NotROP); if (m_zoom != 100) { corner1 = convertZoom(corner1, true); corner2 = convertZoom(corner2, true); } // once a scroll movement has occurred the transformation from contents to viewport // is no longer the identity matrix. To satisfy the general case, perform the // transformation // QPoint c1V = contentsToViewport(corner1); // QPoint c2V = contentsToViewport(corner2); m_rubberBandRect.setGeometry (QRect (corner1, corner2).normalized ()); m_rubberBandRect.show (); // Next line gives error 'QPainter::drawRects: Painter not active' // p.drawRect(QRect(c1V, c2V)); } void DigitView::drawRubberBandLine(QPoint corner1, QPoint corner2) { // Next line gives error 'QPainter::begin: Widget painting can only begin as a result of a paintEvent' QPainter p(viewport()); // Next two lines give error 'QPainter::setPen: Painter not active' // p.setPen(QColor(255, 255, 255)); // p.setPen(Qt::DotLine); //p.setRasterOp(NotROP); if (m_zoom != 100) { corner1 = convertZoom(corner1, true); corner2 = convertZoom(corner2, true); } // once a scroll movement has occurred the transformation from contents to viewport // is no longer the identity matrix. To satisfy the general case, perform the // transformation // QPoint c1V = contentsToViewport(corner1); // QPoint c2V = contentsToViewport(corner2); m_rubberBandLine.setGeometry (QRect (corner1, corner2).normalized ()); m_rubberBandLine.show (); // Next line gives error 'QPainter::drawLine: Painter not active' // p.drawLine(c1V, c2V); } void DigitView::showAreaSelectMove(QPoint cursorDown, QPoint cursorLast, QPoint cursorNext) { if (cursorDown != cursorLast) // remove previous selection rectangle drawRubberBandRectangle(cursorDown, cursorLast); drawRubberBandRectangle(cursorDown, cursorNext); } void DigitView::showAreaSelectEnd(QPoint cursorDown, QPoint cursorLast) { if (cursorDown != cursorLast) // remove previous selection rectangle m_rubberBandRect.hide (); } void DigitView::showScaleBarMove(QPoint cursorDown, QPoint cursorLast, QPoint cursorNext) { if (cursorDown != cursorLast) // remove previous selection line segment drawRubberBandLine(cursorDown, cursorLast); drawRubberBandLine(cursorDown, cursorNext); } void DigitView::showScaleBarEnd(QPoint cursorDown, QPoint cursorLast) { if (cursorDown != cursorLast) // remove previous selection line segment m_rubberBandLine.hide (); } void DigitView::update(DigitView* sender, QRect boundingRect) { if (sender != this) { // do not use updateContents since that produces bad flicker. perhaps that // function is repainting the background, but our background is static if (m_zoom == 100) { repaintContents(boundingRect, false); } else { repaintContents(convertZoom(boundingRect, true), false); } } } void DigitView::closeEvent(QCloseEvent*) { // prevent closeEvent processing locally. That is performed in the DigitMain event filter } void DigitView::contentsMouseDoubleClickEvent(QMouseEvent* e) { ASSERT_ENGAUGE(m_doc != 0); DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) { if (m_zoom == 100) { tool->contentsMouseDoubleClickEvent(this, e); } else { QMouseEvent e100(e->type(), convertZoom(e->pos(), false), e->globalPos(), e->button(), e->state()); tool->contentsMouseDoubleClickEvent(this, &e100); } } } void DigitView::contentsMouseMoveEvent(QMouseEvent* e) { ASSERT_ENGAUGE(m_doc != 0); DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) { if (m_zoom == 100) { tool->contentsMouseMoveEvent(this, e); } else { QMouseEvent e100(e->type(), convertZoom(e->pos(), false), e->globalPos(), e->button(), e->state()); tool->contentsMouseMoveEvent(this, &e100); } } } void DigitView::contentsMousePressEvent(QMouseEvent* e) { // grab focus from previous widget. even after clicking elsewhere the zoom // combobox does not relinquish focus automatically, and... // 1) user is left wondering why pressing Delete suddenly has no effect // 2) user has to somehow think of tabbing to move focus from combobox if (!hasFocus()) setFocus(); ASSERT_ENGAUGE(m_doc != 0); DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) { if (m_zoom == 100) { tool->contentsMousePressEvent(this, e); } else { QMouseEvent e100(e->type(), convertZoom(e->pos(), false), e->globalPos(), e->button(), e->state()); tool->contentsMousePressEvent(this, &e100); } } } void DigitView::contentsMouseReleaseEvent(QMouseEvent* e) { ASSERT_ENGAUGE(m_doc != 0); DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) { if (m_zoom == 100) { tool->contentsMouseReleaseEvent(this, e); } else { QMouseEvent e100(e->type(), convertZoom(e->pos(), false), e->globalPos(), e->button(), e->state()); tool->contentsMouseReleaseEvent(this, &e100); } } } void DigitView::keyPressEvent(QKeyEvent* e) { if (m_doc != 0) { DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) tool->keyPressEvent(this, e); } } void DigitView::keyReleaseEvent(QKeyEvent* e) { if (m_doc != 0) { DigitTool* tool = DigitTool::findTool(m_doc->digitizeState()); if (tool) tool->keyReleaseEvent(this, e); } } QPoint DigitView::convertZoom(QPoint p, bool to) { qreal x, y; if (to) worldMatrix().map((double) p.x(), (double) p.y(), &x, &y); else inverseWorldMatrix().map((double) p.x(), (double) p.y(), &x, &y); return QPoint((int) (x + 0.5), (int) (y + 0.5)); } QRect DigitView::convertZoom(QRect r, bool to) { qreal xTL, yTL, xBR, yBR; if (to) { worldMatrix().map((double) r.left(), (double) r.top(), &xTL, &yTL); worldMatrix().map((double) r.right(), (double) r.bottom(), &xBR, &yBR); } else { inverseWorldMatrix().map((double) r.left(), (double) r.top(), &xTL, &yTL); inverseWorldMatrix().map((double) r.right(), (double) r.bottom(), &xBR, &yBR); } return QRect( QPoint((int) (xTL + 0.5), (int) (yTL + 0.5)), QPoint((int) (xBR + 0.5), (int) (yBR + 0.5))); } QRect DigitView::listBounds(Q3CanvasItemList* list) { int xMin = 0, yMin = 0, xMax = 1, yMax = 1; bool first = true; Q3CanvasItemList::iterator itr; ASSERT_ENGAUGE(list != 0); for (itr = list->begin(); itr != list->end(); ++itr) { ASSERT_ENGAUGE((*itr) != 0); QRect bounds = (*itr)->boundingRect(); if (first || (bounds.left() < xMin)) xMin = bounds.left(); if (first || (bounds.top() < yMin)) yMin = bounds.top(); if (first || (bounds.right() > xMax)) xMax = bounds.right(); if (first || (bounds.bottom() > yMax)) yMax = bounds.bottom(); first = false; } return QRect(QPoint(xMin, yMin), QPoint(xMax, yMax)).normalize(); } void DigitView::addHandles(const QRect &bounds) { m_handles.clear(); // show eight handles that represent the bounding rectangle for the selected items. we // do not put handles on each point since the points can be too small to fit the // handles, and also that would be slower for (int i = 0; i < 9; i++) { QSize handleSize = DefaultSettings::instance().getHandleSize(); int handleWidth = handleSize.width(); int handleHeight = handleSize.height(); // looping clockwise starting at top right point int x, y; if (i < 3) x = bounds.left() + bounds.width(); else if ((i == 3) || (i == 7)) x = bounds.left() + (bounds.width() + 1) / 2 - handleWidth / 2; else x = bounds.left() - handleWidth; if ((1 < i) && (i < 5)) y = bounds.top() + bounds.height(); else if ((i == 1) || (i == 5)) y = bounds.top() + (bounds.height() + 1) / 2 - handleHeight / 2; else y = bounds.top() - handleHeight; ASSERT_ENGAUGE(document() != 0); Q3CanvasRectangle* handle = new Q3CanvasRectangle(x, y, handleWidth, handleHeight, document()->canvas()); CHECK_PTR_ENGAUGE(handle); handle->setBrush(QBrush(Qt::green)); handle->setPen(QPen(Qt::black, 1)); handle->setZ(ZHandles); handle->show(); update(0, handle->boundingRect()); m_handles.append(handle); } } void DigitView::removeHandles() { Q3PtrListIterator itr(m_handles); Q3CanvasRectangle* handle; while ((handle = itr.current()) != 0) { ASSERT_ENGAUGE(handle != 0); QRect bounds = handle->boundingRect(); m_handles.remove(handle); // autoDelete is on update(0, bounds); } } void DigitView::moveHandles(QPoint delta) { Q3PtrListIterator itr(m_handles); Q3CanvasRectangle* handle; while ((handle = itr.current()) != 0) { ASSERT_ENGAUGE(handle != 0); QRect rectOld = handle->boundingRect(); handle->moveBy((double) delta.x(), (double) delta.y()); update(0, rectOld); update(0, handle->boundingRect()); ++itr; } } Q3CanvasItemList DigitView::collisionsFiltered(QPoint p, int rtti) { ASSERT_ENGAUGE(document() != 0); ASSERT_ENGAUGE(document()->canvas() != 0); Q3CanvasItemList list = document()->canvas()->collisions(p); return collisionsFiltered(list, rtti); } Q3CanvasItemList DigitView::collisionsFiltered(QPoint p1, QPoint p2, int rtti) { ASSERT_ENGAUGE(document() != 0); ASSERT_ENGAUGE(document()->canvas() != 0); Q3CanvasItemList list = document()->canvas()->collisions(QRect(p1, p2).normalize()); return collisionsFiltered(list, rtti); } Q3CanvasItemList DigitView::collisionsFiltered(Q3CanvasItemList listIn, int rtti) { // filter out all but the desired types Q3CanvasItemList listOut; Q3CanvasItemList::iterator itrIn; for (itrIn = listIn.begin(); itrIn != listIn.end(); ++itrIn) { ASSERT_ENGAUGE((*itrIn) != 0); if ((*itrIn)->rtti() == rtti) listOut.append(*itrIn); } return listOut; } void DigitView::unselect() { removeHandles(); selectionList.clear(); ASSERT_ENGAUGE(m_doc != 0); m_doc->selectionListChanged(); } void DigitView::selectSegment(Segment* segment) { ASSERT_ENGAUGE(segment != 0); Q3CanvasItemList list = segment->lines(); selectItemsReplace(&list); } void DigitView::selectItemsReplace(Q3CanvasItemList* list) { unselect(); selectionList = *list; ASSERT_ENGAUGE(m_doc != 0); m_doc->selectionListChanged(); removeHandles(); if (selectionList.count() > 0) addHandles(listBounds(&selectionList)); } void DigitView::selectItemsToggle(Q3CanvasItemList* list) { Q3CanvasItemList::iterator itr; ASSERT_ENGAUGE(list != 0); for (itr = list->begin(); itr != list->end(); ++itr) { Q3CanvasItemList::iterator itrS = selectionList.find(*itr); if (itrS == selectionList.end()) selectionList.append(*itr); else selectionList.remove(itrS); } ASSERT_ENGAUGE(m_doc != 0); m_doc->selectionListChanged(); removeHandles(); if (selectionList.count() > 0) addHandles(listBounds(&selectionList)); } void DigitView::moveSelection(QPoint delta) { moveHandles(delta); Q3CanvasItemList::iterator itr; for (itr = selectionList.begin(); itr != selectionList.end(); ++itr) { Point* p = safeUpcast(itr); if (p != 0) { QRect boundsLineLeft, boundsPoint, boundsLineRight; if (p->linePrev()) boundsLineLeft = p->boundsLineLeft(); boundsPoint = p->boundingRect(); if (p->lineNext()) boundsLineRight = p->boundsLineRight(); p->moveBy((double) delta.x(), (double) delta.y()); if (p->linePrev()) { update(0, boundsLineLeft); update(0, p->boundsLineLeft()); } update(0, boundsPoint); update(0, p->boundingRect()); if (p->lineNext()) { update(0, boundsLineRight); update(0, p->boundsLineRight()); } } } } Point* DigitView::safeUpcast(Q3CanvasItemList::iterator itr) { if ((*itr)->rtti() == Rtti_Point) return (Point*) (*itr); else return 0; } bool DigitView::pointIsSelected(Q3CanvasItem* item) { return (selectionList.find(item) != selectionList.end()); } void DigitView::addSampleMatchPoint(const Q3PointArray &samplePointPixels) { // remove stale handles removeHandles(); // add new handles //ASSERT_ENGAUGE(samplePointPixels); addHandles(samplePointPixels.boundingRect()); } void DigitView::removeSampleMatchPoint(void) { removeHandles(); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void DigitView::slotZoomChange(const QString &zoom) { QString stripped(zoom); if (stripped.right(1) == QString("%")) stripped.remove(stripped.length() - 1, 1); m_zoom = stripped.toInt(); double scale = (double) m_zoom / 100.0; QMatrix ms; ms.scale(scale, scale); setWorldMatrix(ms); updateContents(); } engauge-digitizer-5.2/src/digitview.h000066400000000000000000000130231222557406400177240ustar00rootroot00000000000000/*************************************************************************** digitview.h - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DIGITVIEW_H #define DIGITVIEW_H #include #include #include //Added by qt3to4: #include #include #include #include #include #include "digitdef.h" class DigitDoc; class Segment; class Point; // display one view of the canvas belonging to the active document class DigitView : public Q3CanvasView { Q_OBJECT friend class DigitDoc; public: DigitView(DigitDoc* doc, QWidget* parent, const char* name, Qt::WindowFlags wFlags); ~DigitView(); // returns a pointer to the document connected to the view DigitDoc* document() const { return m_doc; } // method to redraw the document contents if it has been modified void update(DigitView* sender, QRect boundingRect); // show rubber band rectangle around selected area void showAreaSelectMove(QPoint cursorDown, QPoint cursorLast, QPoint cursorNext); void showAreaSelectEnd(QPoint cursorDown, QPoint cursorLast); // show rubber band line segment to preview scale bar void showScaleBarMove(QPoint cursorDown, QPoint cursorLast, QPoint cursorNext); void showScaleBarEnd(QPoint cursorDown, QPoint cursorLast); // return a list of objects in the specified region Q3CanvasItemList collisionsFiltered(QPoint p, int rtti); Q3CanvasItemList collisionsFiltered(QPoint p1, QPoint p2, int rtti); Q3CanvasItemList collisionsFiltered(Q3CanvasItemList listIn, int rtti); // move everything that is selected. attached lines are moved also void moveSelection(QPoint delta); // select and unselect items void selectItemsReplace(Q3CanvasItemList* list); void selectSegment(Segment* segment); void selectItemsToggle(Q3CanvasItemList* list); // select unselected items and unselect selected items void unselect(void); // return true if point is currently selected bool pointIsSelected(Q3CanvasItem* item); // return true if anything is currently selected bool isSelection(void) { return selectionList.count() > 0; } // zoom get. set is performed by slotZoomChange int zoom(void) { return m_zoom; } // tell all views to add or remove a sample match point void addSampleMatchPoint(const Q3PointArray &samplePointPixels); void removeSampleMatchPoint(void); public slots: void slotZoomChange(const QString &zoom); protected: // event handlers virtual void closeEvent(QCloseEvent* e); virtual void contentsMouseDoubleClickEvent(QMouseEvent* e); virtual void contentsMouseMoveEvent(QMouseEvent* e); virtual void contentsMousePressEvent(QMouseEvent* e); virtual void contentsMouseReleaseEvent(QMouseEvent* e); virtual void keyPressEvent(QKeyEvent* e); virtual void keyReleaseEvent(QKeyEvent* e); private: DigitDoc* m_doc; // draw rubber band rectangle (around selection area) or line segment (to show future scale bar), // described by two points. the rubber band appears as a set of inverted pixels. external // code is responsible for calling this an even number of times. the rectangle and line // are hidden until needed, at which point the coordinates are set and they are made visible void drawRubberBandRectangle(QPoint corner1, QPoint corner2); void drawRubberBandLine(QPoint start, QPoint end); QRubberBand m_rubberBandRect; QRubberBand m_rubberBandLine; // items selected in this view Q3PtrList m_selectedItems; // selection list Q3CanvasItemList selectionList; // only Points can be selected and moved. verify this before making an upcast, returning // zero if canvas item is not a point Point* safeUpcast(Q3CanvasItemList::iterator itr); // handles around the select items or sample match point. there are either 0 or 8 items in this list Q3PtrList m_handles; // add handles around selectionList and remove current handles void addHandles(const QRect &bounds); void removeHandles(void); // move handles by translating void moveHandles(QPoint delta); // transform to/from zoomed coordinates by applying world transform QPoint convertZoom(QPoint p, bool to); QRect convertZoom(QRect r, bool to); // return bounding rectangle for a list of canvas items QRect listBounds(Q3CanvasItemList* list); // zoom factor as a percentage. zooms other than 100 will suffer performance penalty // locally and in the Qt library because extra transformations must be performed int m_zoom; }; #endif // DIGITVIEW_H engauge-digitizer-5.2/src/discretize.cpp000066400000000000000000000167621222557406400204460ustar00rootroot00000000000000/*************************************************************************** discretize.cpp - description ------------------- begin : Sun Dec 22 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "main.h" #include "mmsubs.h" #include "digitdebug.h" #include "discretize.h" Discretize::Discretize() { DigitDebug::ctor(QString("discretize ") + QString::number((ulong) this, 16)); } Discretize::~Discretize() { DigitDebug::dtor(QString("discretize ") + QString::number((ulong) this, 16)); } QRgb Discretize::backgroundColor(const QImage* image) { // travel diagonally (top-left to bottom-right) and count colors to isolate // background color, which is assumed to be the most frequent color QList::iterator itrC; // add unique elements to colors list ColorList colors; int x, y = 0; for (x = 0; x < image->width(); x++) { // look up this new pixel color ColorEntry c; c.color = pixelRGB(image, x, y); c.count = 0; bool found = false; for (itrC = colors.begin(); itrC != colors.end(); ++itrC) { if (colorCompare(c.color.rgb(), (*itrC).color.rgb())) { found = true; ++(*itrC).count; break; } } if (!found) colors.append(c); if (++y >= image->height()) y = 0; } // background color is most frequent color ColorEntry cMax; cMax.count = 0; for (itrC = colors.begin(); itrC != colors.end(); ++itrC) { if ((*itrC).count > cMax.count) cMax = (*itrC); } return cMax.color.rgb(); } int Discretize::colorAttributeMax(DiscretizeMethod method) const { switch (method) { case DiscretizeNone: return 0; case DiscretizeIntensity: return DiscretizeIntensityMax; case DiscretizeForeground: return DiscretizeForegroundMax; case DiscretizeHue: return DiscretizeHueMax; case DiscretizeSaturation: return DiscretizeSaturationMax; case DiscretizeValue: default: return DiscretizeValueMax; } } bool Discretize::colorCompare(QRgb color1, QRgb color2) { const long MASK = 0xf0f0f0f0; return (color1 & MASK) == (color2 & MASK); } void Discretize::discretize(QImage* image, DiscretizeSettings settings, QRgb backgroundColor) { int x, y, rBg, gBg, bBg; QColor background(backgroundColor); background.rgb(&rBg, &gBg, &bBg); // save the most recent settings static DiscretizeSettings settingsLatest; settingsLatest = settings; int value; for (x = 0; x < image->width(); x++) { for (y = 0; y < image->height(); y++) { if (settings.discretizeMethod == DiscretizeForeground) value = discretizeValueForeground(image, x, y, settings.discretizeMethod, rBg, gBg, bBg); else value = discretizeValueNotForeground(image, x, y, settings.discretizeMethod); if (pixelIsOn(value, settings)) setPixelRGB(image, x, y, QColor(Qt::black).rgb()); else setPixelRGB(image, x, y, QColor(Qt::white).rgb()); } // abort all calls to this function except the most recent, which last defined settingsLatest qApp->processEvents(); if (memcmp(&settings, &settingsLatest, sizeof(settingsLatest)) != 0) break; } } int Discretize::discretizeValueForeground(const QImage* image, int x, int y, DiscretizeMethod method, int rBg, int gBg, int bBg) const { // convert foreground value ASSERT_ENGAUGE(method == DiscretizeForeground); QColor color(pixelRGB(image, x, y)); int r, g, b; double distance; color.rgb(&r, &g, &b); distance = sqrt ((double) ((r - rBg) * (r - rBg) + (g - gBg) * (g - gBg) + (b - bBg) * (b - bBg))); int value = (int) (distance * DiscretizeForegroundMax / sqrt((double) (255 * 255 + 255 * 255 + 255 * 255)) + 0.5); if (value < 0) value = 0; if (colorAttributeMax(method) < value) value = colorAttributeMax(method); return value; } int Discretize::discretizeValueNotForeground(const QImage* image, int x, int y, DiscretizeMethod method) const { // convert intensity, hue, threshold or saturation value ASSERT_ENGAUGE(method != DiscretizeForeground); QColor color(pixelRGB(image, x, y)); int h, s, v, r, g, b; double intensity; // convert hue from 0 to 359, saturation from 0 to 255, value from 0 to 255 int value = 0; switch (method) { case DiscretizeNone: ASSERT_ENGAUGE(0); break; case DiscretizeIntensity: color.rgb(&r, &g, &b); intensity = sqrt ((double) (r * r + g * g + b * b)); value = (int) (intensity * DiscretizeIntensityMax / sqrt((double) (255 * 255 + 255 * 255 + 255 * 255)) + 0.5); break; case DiscretizeForeground: break; case DiscretizeHue: color.hsv(&h, &s, &v); value = h * DiscretizeHueMax / 359; break; case DiscretizeSaturation: color.hsv(&h, &s, &v); value = s * DiscretizeSaturationMax / 255; break; case DiscretizeValue: color.hsv(&h, &s, &v); value = v * DiscretizeValueMax / 255; break; } if (value < 0) value = 0; if (colorAttributeMax(method) < value) value = colorAttributeMax(method); return value; } bool Discretize::pixelIsOn(int value, int low, int high) const { if (low < high) return ((low <= value) && (value <= high)); else return ((low <= value) || (value <= high)); } bool Discretize::pixelIsOn(int value, GridRemovalSettings settings) const { return pixelIsOn(value, settings.foregroundThresholdLow, settings.foregroundThresholdHigh); } bool Discretize::pixelIsOn(int value, DiscretizeSettings settings) const { switch (settings.discretizeMethod) { case DiscretizeNone: ASSERT_ENGAUGE(0); break; case DiscretizeIntensity: return pixelIsOn(value, settings.intensityThresholdLow, settings.intensityThresholdHigh); case DiscretizeForeground: return pixelIsOn(value, settings.foregroundThresholdLow, settings.foregroundThresholdHigh); case DiscretizeHue: return pixelIsOn(value, settings.hueThresholdLow, settings.hueThresholdHigh); case DiscretizeSaturation: return pixelIsOn(value, settings.saturationThresholdLow, settings.saturationThresholdHigh); case DiscretizeValue: return pixelIsOn(value, settings.valueThresholdLow, settings.valueThresholdHigh); } return false; } bool Discretize::processedPixelIsOn(const QImage &image, int x, int y) const { if ((x < 0) || (image.width() <= x) || (y < 0) || (image.height() <= y)) { return false; } // pixel is on if it is closer to black than white in gray scale. this test must be performed // on little endian and big endian systems, with or without alpha bits (which are typically high bits) const int BLACK_WHITE_THRESHOLD = 255 / 2; // put threshold in middle of range int gray = qGray(pixelRGB(&image, x, y)); return (gray < BLACK_WHITE_THRESHOLD); } engauge-digitizer-5.2/src/discretize.h000066400000000000000000000060471222557406400201060ustar00rootroot00000000000000/*************************************************************************** discretize.h - description ------------------- begin : Sun Dec 22 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DISCRETIZE_H #define DISCRETIZE_H #include #include #include #include //Added by qt3to4: #include #include "digitdef.h" #include "digitdebug.h" // this class discretizes an image by setting every pixel either to // off or on class Discretize { public: Discretize(); ~Discretize(); // attribute maximum depends on which color attribute is chosen int colorAttributeMax(DiscretizeMethod method) const; // isolate background color, which is assumed to be the most popular color QRgb backgroundColor(const QImage* image); // return true if two colors are very close bool colorCompare(QRgb color1, QRgb color2); // return value of specified discretize color attribute at specified pixel. the // background color components are only used in foreground/background mode int discretizeValueNotForeground(const QImage* image, int x, int y, DiscretizeMethod method) const; int discretizeValueForeground(const QImage* image, int x, int y, DiscretizeMethod method, int rBg, int gBg, int bBg) const; // convert image to on-off using current settings. the background color is only // used in foreground/background mode. this function takes a fifth of a second to complete, // so it is reentrant with new calls aborting previous calls (since discretizedlg calls // this once per mouse move event so the program bogs down) void discretize(QImage* image, DiscretizeSettings settings, QRgb backgroundColor = 0); // return true if pixel satisfies the current attribute constraints bool pixelIsOn(int value, GridRemovalSettings settings) const; bool pixelIsOn(int value, DiscretizeSettings settings) const; bool processedPixelIsOn(const QImage &image, int x, int y) const; private: // store histogram of selected pixel colors as a QValueList struct ColorEntry { QColor color; int count; }; typedef QList ColorList; bool pixelIsOn(int value, int low, int high) const; }; #endif // DISCRETIZE_H engauge-digitizer-5.2/src/discretizedlg.cpp000066400000000000000000000236121222557406400211250ustar00rootroot00000000000000/*************************************************************************** discretizedlg.cpp - description ------------------- begin : Wed Dec 17 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include #include #include #include "digitdoc.h" #include "digitview.h" #include "discretize.h" #include "discretizedlg.h" #include "img/whatsthis.xpm" #include "digitdebug.h" #include "main.h" DiscretizeDlg::DiscretizeDlg(QString title, const QImage* imageOriginal, DiscretizeSettings* settings) : QDialog(0, "discretizedlg", true), title(title), imageOriginal(imageOriginal), settings(settings) { DigitDebug::ctor(QString("discretizedlg ") + QString::number((ulong) this, 16)); setCaption(tr("Discretize - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(400, 490); // discretize method selection groupSelection = new Q3ButtonGroup(QString(tr("Discretize method selection")), this); CHECK_PTR_ENGAUGE(groupSelection); groupSelection->setGeometry(10, 10, 380, 230); // intensity buttonIntensity = new QRadioButton(QString(tr("Intensity")), groupSelection); CHECK_PTR_ENGAUGE(buttonIntensity); buttonIntensity->setGeometry(10, 20, 130, 30); QWhatsThis::add(buttonIntensity, QString(tr("Discretize the original image using intensity"))); connect(buttonIntensity, SIGNAL(clicked()), this, SLOT(slotIntensity())); // foreground or background buttonForeground = new QRadioButton(QString(tr("Foreground")), groupSelection); CHECK_PTR_ENGAUGE(buttonForeground); buttonForeground->setGeometry(10, 60, 130, 30); QWhatsThis::add(buttonForeground, QString(tr("Discretize the original image into foreground and background.\n\n" "The background color is shown on the left side of the scale bar. All pixels with approximately " "the background color are considered part of the background, and all other pixels are considered " "part of the foreground"))); connect(buttonForeground, SIGNAL(clicked()), this, SLOT(slotForeground())); // hue buttonHue = new QRadioButton(QString(tr("Hue")), groupSelection); CHECK_PTR_ENGAUGE(buttonHue); buttonHue->setGeometry(10, 100, 130, 30); QWhatsThis::add(buttonHue, QString(tr("Discretize the original image using hue"))); connect(buttonHue, SIGNAL(clicked()), this, SLOT(slotHue())); // saturation buttonSaturation = new QRadioButton(QString(tr("Saturation")), groupSelection); CHECK_PTR_ENGAUGE(buttonSaturation); buttonSaturation->setGeometry(10, 140, 130, 30); QWhatsThis::add(buttonSaturation, QString(tr("Discretize the original image using saturation"))); connect(buttonSaturation, SIGNAL(clicked()), this, SLOT(slotSaturation())); // value buttonValue = new QRadioButton(QString(tr("Value")), groupSelection); CHECK_PTR_ENGAUGE(buttonValue); buttonValue->setGeometry(10, 180, 130, 30); QWhatsThis::add(buttonValue, QString(tr("Discretize the original image using value"))); connect(buttonValue, SIGNAL(clicked()), this, SLOT(slotValue())); // color chooser area QRgb rgbBg = discretize.backgroundColor(imageOriginal); colorChooser = new ColorChooser(groupSelection, imageOriginal, 150, 20, rgbBg, true); CHECK_PTR_ENGAUGE(colorChooser); connect(colorChooser, SIGNAL(limitChange(bool, int)), this, SLOT(slotLimitChange(bool, int))); // preview area labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(30, 240, 160, 30); previewCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(previewCanvas); previewCanvas->resize(imageOriginal->width(), imageOriginal->height()); previewCanvasView = new Q3CanvasView(previewCanvas, this); CHECK_PTR_ENGAUGE(previewCanvasView); previewCanvasView->setGeometry(30, 270, 340, 150); QWhatsThis::add(previewCanvasView, QString(tr( "Preview window shows how current settings affect the discretizing of the original image"))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(80, 440, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(210, 440, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(330, 440, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); setDiscretizeMethod(settings->discretizeMethod); } DiscretizeDlg::~DiscretizeDlg() { DigitDebug::dtor(QString("discretizedlg ") + QString::number((ulong) this, 16)); } void DiscretizeDlg::loadWorkingImage() { imageWorking = imageOriginal->copy(); // deep copy needed // use settings to process image discretize.discretize(&imageWorking, *settings); // update preview window QPixmap pixmapWorking; pixmapWorking.convertFromImage(imageWorking, Qt::ThresholdDither); ASSERT_ENGAUGE(previewCanvas != 0); previewCanvas->setBackgroundPixmap(pixmapWorking); } void DiscretizeDlg::setDiscretizeMethod(DiscretizeMethod method) { settings->discretizeMethod = method; switch (method) { case DiscretizeNone: colorChooser->setDiscretizeMethod(method); break; case DiscretizeIntensity: colorChooser->setDiscretizeMethod(method, settings->intensityThresholdLow, settings->intensityThresholdHigh); break; case DiscretizeForeground: colorChooser->setDiscretizeMethod(method, settings->foregroundThresholdLow, settings->foregroundThresholdHigh); break; case DiscretizeHue: colorChooser->setDiscretizeMethod(method, settings->hueThresholdLow, settings->hueThresholdHigh); break; case DiscretizeSaturation: colorChooser->setDiscretizeMethod(method, settings->saturationThresholdLow, settings->saturationThresholdHigh); break; case DiscretizeValue: colorChooser->setDiscretizeMethod(method, settings->valueThresholdLow, settings->valueThresholdHigh); break; } toggleActions(); } void DiscretizeDlg::toggleActions() { loadWorkingImage(); if ((settings->discretizeMethod == DiscretizeIntensity) && (!buttonIntensity->isChecked())) buttonIntensity->setChecked(true); if ((settings->discretizeMethod == DiscretizeForeground) && (!buttonForeground->isChecked())) buttonForeground->setChecked(true); if ((settings->discretizeMethod == DiscretizeHue) && (!buttonHue->isChecked())) buttonHue->setChecked(true); if ((settings->discretizeMethod == DiscretizeSaturation) && (!buttonSaturation->isChecked())) buttonSaturation->setChecked(true); if ((settings->discretizeMethod == DiscretizeValue) && (!buttonValue->isChecked())) buttonValue->setChecked(true); buttonOk->setEnabled( (settings->intensityThresholdHigh <= DiscretizeIntensityMax) && (settings->intensityThresholdLow <= DiscretizeIntensityMax) && (settings->foregroundThresholdHigh <= DiscretizeForegroundMax) && (settings->foregroundThresholdLow <= DiscretizeForegroundMax) && (settings->hueThresholdHigh <= DiscretizeHueMax) && (settings->hueThresholdLow <= DiscretizeHueMax) && (settings->saturationThresholdHigh <= DiscretizeSaturationMax) && (settings->saturationThresholdLow <= DiscretizeSaturationMax) && (settings->valueThresholdHigh <= DiscretizeValueMax) && (settings->valueThresholdLow <= DiscretizeValueMax)); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void DiscretizeDlg::slotIntensity() { setDiscretizeMethod(DiscretizeIntensity); } void DiscretizeDlg::slotForeground() { setDiscretizeMethod(DiscretizeForeground); } void DiscretizeDlg::slotHue() { setDiscretizeMethod(DiscretizeHue); } void DiscretizeDlg::slotLimitChange(bool lower, int limit) { switch (settings->discretizeMethod) { case DiscretizeNone: ASSERT_ENGAUGE(0); break; case DiscretizeIntensity: if (lower) settings->intensityThresholdLow = limit; else settings->intensityThresholdHigh = limit; break; case DiscretizeForeground: if (lower) settings->foregroundThresholdLow = limit; else settings->foregroundThresholdHigh = limit; break; case DiscretizeHue: if (lower) settings->hueThresholdLow = limit; else settings->hueThresholdHigh = limit; break; case DiscretizeSaturation: if (lower) settings->saturationThresholdLow = limit; else settings->saturationThresholdHigh = limit; break; case DiscretizeValue: if (lower) settings->valueThresholdLow = limit; else settings->valueThresholdHigh = limit; break; } toggleActions(); } void DiscretizeDlg::slotSaturation() { setDiscretizeMethod(DiscretizeSaturation); } void DiscretizeDlg::slotValue() { setDiscretizeMethod(DiscretizeValue); } void DiscretizeDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/discretizedlg.h000066400000000000000000000067331222557406400205770ustar00rootroot00000000000000/*************************************************************************** discretizedlg.h - description ------------------- begin : Wed Dec 17 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DISCRETIZEDLG_H #define DISCRETIZEDLG_H #include #include #include #include #include #include #include #include #include #include #include #include "digitdef.h" #include "colorchooser.h" #include "discretize.h" // this dialog box class edits the discretizing settings, which determine // how the original image is discretized class DiscretizeDlg : public QDialog { Q_OBJECT public: DiscretizeDlg(QString title, const QImage* imageOriginal, DiscretizeSettings* settings); ~DiscretizeDlg(); public slots: void slotIntensity(); void slotForeground(); void slotHue(); void slotLimitChange(bool, int); void slotSaturation(); void slotValue(); void slotWhat(void); private: // set discretize method, loading appropriate background histogram image void setDiscretizeMethod(DiscretizeMethod method); // set individual color attributes void setHueHigh(int limit); void setHueLow(int limit); void setSaturationHigh(int limit); void setSaturationLow(int limit); void setValueHigh(int limit); void setValueLow(int limit); // enable or disable buttons as appropriate void toggleActions(void); QString title; const QImage* imageOriginal; DiscretizeSettings* settings; // convert original image into pixel-addressable QImage, using current settings. // the first time through this also loads histograms void loadWorkingImage(void); // discretize method selection Q3ButtonGroup* groupSelection; // discretize methods QRadioButton* buttonIntensity; QRadioButton* buttonForeground; QRadioButton* buttonHue; QRadioButton* buttonSaturation; QRadioButton* buttonValue; // widgets for controlling the color attribute limits ColorChooser* colorChooser; // widgets for previewing the discretize results QLabel* labelPreview; Q3Canvas* previewCanvas; Q3CanvasView* previewCanvasView; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; // store pixel-addressable QImage QImage imageWorking; // discretize function of Discretize object takes a fifth of a second to complete, // so that function is reentrant with new calls aborting previous calls Discretize discretize; }; #endif // DISCRETIZEDLG_H engauge-digitizer-5.2/src/exportdlg.cpp000066400000000000000000000430701222557406400203010ustar00rootroot00000000000000/*************************************************************************** exportdlg.cpp - description ------------------- begin : Fri Nov 15 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include //Added by qt3to4: #include #include #include #include #include "exportdlg.h" #include "img/whatsthis.xpm" #include "pointsets.h" #include "digitdebug.h" #include "main.h" ExportDlg::ExportDlg(QString title, PointSets* pointSets, const CoordSettings* coord, const GridMeshSettings* grid, ExportSettings* xport) : QDialog(0, "exportdlg", true), pointSets(pointSets), coord(coord), grid(grid), xport(xport) { DigitDebug::ctor(QString("exportdlg ") + QString::number((ulong) this, 16)); setCaption(tr("Export Settings - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(380, 650); // curve selection groupCurveSelection = new Q3GroupBox(QString(tr("Curve Selection")), this); CHECK_PTR_ENGAUGE(groupCurveSelection); groupCurveSelection->setGeometry(10, 10, 360, 150); labelIncluded = new QLabel(QString(tr("Included")), groupCurveSelection); CHECK_PTR_ENGAUGE(labelIncluded); labelIncluded->setGeometry(10, 20, 110, 20); labelExcluded = new QLabel(QString(tr("Not included")), groupCurveSelection); CHECK_PTR_ENGAUGE(labelExcluded); labelExcluded->setGeometry(240, 20, 110, 20); listIncluded = new Q3ListBox(groupCurveSelection); CHECK_PTR_ENGAUGE(listIncluded); listIncluded->setGeometry(10, 40, 110, 100); QWhatsThis::add(listIncluded, QString(tr("List of curves to be included in the exported file"))); connect(listIncluded, SIGNAL(selectionChanged(Q3ListBoxItem*)), this, SLOT(slotIncluded(Q3ListBoxItem*))); listExcluded = new Q3ListBox(groupCurveSelection); CHECK_PTR_ENGAUGE(listExcluded); listExcluded->setGeometry(240, 40, 110, 100); QWhatsThis::add(listExcluded, QString(tr("List of curves to be excluded from the exported file"))); connect(listExcluded, SIGNAL(selectionChanged(Q3ListBoxItem*)), this, SLOT(slotExcluded(Q3ListBoxItem*))); buttonInclude = new QPushButton(QString(tr("<setGeometry(130, 40, 100, 30); QWhatsThis::add(buttonInclude, QString(tr("Move the currently selected curve from the excluded list " "to the included list"))); connect(buttonInclude, SIGNAL(clicked()), this, SLOT(slotInclude())); buttonExclude = new QPushButton(QString(tr("Exclude>>")), groupCurveSelection); CHECK_PTR_ENGAUGE(buttonExclude); buttonExclude->setGeometry(130, 80, 100, 30); QWhatsThis::add(buttonExclude, QString(tr("Move the currently selected curve from the included list " "to the excluded list"))); connect(buttonExclude, SIGNAL(clicked()), this, SLOT(slotExclude())); // points selection groupPointsSelection = new Q3ButtonGroup(QString(tr("Points Selection")), this); CHECK_PTR_ENGAUGE(groupPointsSelection); groupPointsSelection->setGeometry(10, 170, 360, 110); buttonXAllCurves = new QRadioButton(QString(tr("Interpolate Y's at X's from all curves")), groupPointsSelection); CHECK_PTR_ENGAUGE(buttonXAllCurves); buttonXAllCurves->setGeometry(10, 20, 300, 20); QWhatsThis::add(buttonXAllCurves, QString(tr("Exported file will have values at every unique X " "value from every curve. Y values will be linearly interpolated if necessary"))); connect(buttonXAllCurves, SIGNAL(toggled(bool)), this, SLOT(slotXAllCurves(bool))); buttonXFirstCurve = new QRadioButton(QString(tr("Interpolate Y's at X's from first curve")), groupPointsSelection); CHECK_PTR_ENGAUGE(buttonXFirstCurve); buttonXFirstCurve->setGeometry(10, 40, 300, 20); QWhatsThis::add(buttonXFirstCurve, QString(tr("Exported file will have values at every unique X " "value from the first curve. Y values will be linearly interpolated if necessary"))); connect(buttonXFirstCurve, SIGNAL(toggled(bool)), this, SLOT(slotXFirstCurve(bool))); buttonXGridLines = new QRadioButton(QString(tr("Interpolate Y's at grid line X's")), groupPointsSelection); CHECK_PTR_ENGAUGE(buttonXGridLines); buttonXGridLines->setGeometry(10, 60, 300, 20); QWhatsThis::add(buttonXGridLines, QString(tr("Exported file will have values at every unique X " "grid line. Y values will be linearly interpolated if necessary"))); connect(buttonXGridLines, SIGNAL(toggled(bool)), this, SLOT(slotXGridLines(bool))); buttonXYAllCurves = new QRadioButton(QString(tr("Raw X's and Y's")), groupPointsSelection); CHECK_PTR_ENGAUGE(buttonXYAllCurves); buttonXYAllCurves->setGeometry(10, 80, 300, 20); QWhatsThis::add(buttonXYAllCurves, QString(tr("Exported file will have only original X and Y values " "without any interpolation"))); connect(buttonXYAllCurves, SIGNAL(toggled(bool)), this, SLOT(slotXYAllCurves(bool))); // layout groupLayout = new Q3ButtonGroup(QString(tr("Layout")), this); CHECK_PTR_ENGAUGE(groupLayout); groupLayout->setGeometry(10, 290, 360, 70); buttonAllCurvesOnEachLine = new QRadioButton(QString(tr("All curves on each line")), groupLayout); CHECK_PTR_ENGAUGE(buttonAllCurvesOnEachLine); buttonAllCurvesOnEachLine->setGeometry(10, 20, 210, 20); QWhatsThis::add(buttonAllCurvesOnEachLine, QString(tr("Exported file will have, on each line, " "an X value, the Y value for the first curve, the Y value for the second curve,..."))); connect(buttonAllCurvesOnEachLine, SIGNAL(toggled(bool)), this, SLOT(slotAllCurvesOnEachLine(bool))); buttonOneCurveOnEachLine = new QRadioButton(QString(tr("One curve on each line")), groupLayout); CHECK_PTR_ENGAUGE(buttonOneCurveOnEachLine); buttonOneCurveOnEachLine->setGeometry(10, 40, 210, 20); QWhatsThis::add(buttonOneCurveOnEachLine, QString(tr("Exported file will have all the points for " "the first curve, with one X-Y pair on each line, then the points for the second curve,..."))); connect(buttonOneCurveOnEachLine, SIGNAL(toggled(bool)), this, SLOT(slotOneCurveOnEachLine(bool))); // delimiters groupDelimiters = new Q3ButtonGroup(QString(tr("Delimiters")), this); CHECK_PTR_ENGAUGE(groupDelimiters); groupDelimiters->setGeometry(10, 370, 113, 90); buttonCommas = new QRadioButton(QString(tr("Commas")), groupDelimiters); CHECK_PTR_ENGAUGE(buttonCommas); buttonCommas->setGeometry(10, 20, 110, 20); QWhatsThis::add(buttonCommas, QString(tr("Exported file will have commas between adjacent values"))); connect(buttonCommas, SIGNAL(toggled(bool)), this, SLOT(slotCommas(bool))); buttonSpaces = new QRadioButton(QString(tr("Spaces")), groupDelimiters); CHECK_PTR_ENGAUGE(buttonSpaces); buttonSpaces->setGeometry(10, 40, 110, 20); QWhatsThis::add(buttonSpaces, QString(tr("Exported file will have spaces between adjacent values"))); connect(buttonSpaces, SIGNAL(toggled(bool)), this, SLOT(slotSpaces(bool))); buttonTabs = new QRadioButton(QString(tr("Tabs")), groupDelimiters); CHECK_PTR_ENGAUGE(buttonTabs); buttonTabs->setGeometry(10, 60, 110, 20); QWhatsThis::add(buttonTabs, QString(tr("Exported file will have tabs between adjacent values"))); connect(buttonTabs, SIGNAL(toggled(bool)), this, SLOT(slotTabs(bool))); // header groupHeader = new Q3ButtonGroup(QString(tr("Header")), this); CHECK_PTR_ENGAUGE(groupHeader); groupHeader->setGeometry(133, 370, 113, 90); buttonNone = new QRadioButton(QString(tr("None")), groupHeader); CHECK_PTR_ENGAUGE(buttonNone); buttonNone->setGeometry(10, 20, 110, 20); QWhatsThis::add(buttonNone, QString(tr("Exported file will have no header line"))); connect(buttonNone, SIGNAL(toggled(bool)), this, SLOT(slotNone(bool))); buttonSimple = new QRadioButton(QString(tr("Simple")), groupHeader); CHECK_PTR_ENGAUGE(buttonSimple); buttonSimple->setGeometry(10, 40, 110, 20); QWhatsThis::add(buttonSimple, QString(tr("Exported file will have simple header line"))); connect(buttonSimple, SIGNAL(toggled(bool)), this, SLOT(slotSimple(bool))); buttonGnuplot = new QRadioButton(QString(tr("Gnuplot")), groupHeader); CHECK_PTR_ENGAUGE(buttonGnuplot); buttonGnuplot->setGeometry(10, 60, 110, 20); QWhatsThis::add(buttonGnuplot, QString(tr("Exported file will have gnuplot header line"))); connect(buttonGnuplot, SIGNAL(toggled(bool)), this, SLOT(slotGnuplot(bool))); // x label for header if (coord->frame == Cartesian) labelXThetaLabel = new QLabel(QString(tr("Header X Label")), this); else labelXThetaLabel = new QLabel(QString(tr("Header Theta Label")), this); CHECK_PTR_ENGAUGE(labelXThetaLabel); labelXThetaLabel->setGeometry(256, 390, 114, 20); editXThetaLabel = new QLineEdit(this); CHECK_PTR_ENGAUGE(editXThetaLabel); editXThetaLabel->setGeometry(256, 410, 110, 20); if (coord->frame == Cartesian) QWhatsThis::add(editXThetaLabel, QString(tr("Label in the header for x values"))); else QWhatsThis::add(editXThetaLabel, QString(tr("Label in the header for theta values"))); connect(editXThetaLabel, SIGNAL(textEdited(const QString&)), this, SLOT(slotXThetaLabel(const QString&))); // preview labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(10, 470, 100, 20); listPreview = new Q3ListBox(this); CHECK_PTR_ENGAUGE(listPreview); listPreview->setGeometry(10, 490, 360, 110); QWhatsThis::add(listPreview, QString(tr("Preview window shows how current settings affect the exported file"))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(45, 610, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(175, 610, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(305, 610, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); resetLists(); toggleActions(); updatePreview(); } ExportDlg::~ExportDlg() { DigitDebug::dtor(QString("exportdlg ") + QString::number((ulong) this, 16)); } void ExportDlg::resetLists() { ASSERT_ENGAUGE(listIncluded != 0); listIncluded->clear(); ASSERT_ENGAUGE(listExcluded != 0); listExcluded->clear(); ASSERT_ENGAUGE(pointSets != 0); listIncluded->insertStringList(pointSets->exportIncluded()); listExcluded->insertStringList(pointSets->exportExcluded()); } void ExportDlg::toggleActions() { ASSERT_ENGAUGE(buttonInclude != 0); buttonInclude->setEnabled(!listExcluded->currentText().isNull()); ASSERT_ENGAUGE(buttonExclude != 0); buttonExclude->setEnabled(!listIncluded->currentText().isNull()); ASSERT_ENGAUGE(xport != 0); ASSERT_ENGAUGE(buttonXAllCurves != 0); ASSERT_ENGAUGE(buttonXFirstCurve != 0); ASSERT_ENGAUGE(buttonXGridLines != 0); ASSERT_ENGAUGE(buttonXYAllCurves != 0); switch (xport->pointsSelection) { case XFromAllCurves: buttonXAllCurves->setChecked(true); break; case XFromFirstCurve: buttonXFirstCurve->setChecked(true); break; case XFromGridLines: buttonXGridLines->setChecked(true); break; case XYFromAllCurves: buttonXYAllCurves->setChecked(true); break; } ASSERT_ENGAUGE(buttonAllCurvesOnEachLine != 0); ASSERT_ENGAUGE(buttonOneCurveOnEachLine != 0); switch (xport->layout) { case AllCurvesOnEachLine: buttonAllCurvesOnEachLine->setChecked(true); break; case OneCurveOnEachLine: buttonOneCurveOnEachLine->setChecked(true); break; } ASSERT_ENGAUGE(buttonCommas != 0); ASSERT_ENGAUGE(buttonSpaces != 0); ASSERT_ENGAUGE(buttonTabs != 0); switch (xport->delimiters) { case Commas: buttonCommas->setChecked(true); break; case Spaces: buttonSpaces->setChecked(true); break; case Tabs: buttonTabs->setChecked(true); break; } ASSERT_ENGAUGE(buttonNone != 0); ASSERT_ENGAUGE(buttonSimple != 0); ASSERT_ENGAUGE(buttonGnuplot != 0); switch (xport->header) { case HeaderNone: buttonNone->setChecked(true); editXThetaLabel->setEnabled(false); break; case HeaderSimple: buttonSimple->setChecked(true); editXThetaLabel->setEnabled(true); break; case HeaderGnuplot: buttonGnuplot->setChecked(true); editXThetaLabel->setEnabled(true); break; } if (coord->frame == Cartesian) editXThetaLabel->setText(xport->xLabel); else editXThetaLabel->setText(xport->thetaLabel); } void ExportDlg::updatePreview() { ASSERT_ENGAUGE(listPreview != 0); listPreview->clear(); // export into a string rather than a file QString str; Q3TextStream stream(&str, QIODevice::WriteOnly); ASSERT_ENGAUGE(pointSets != 0); pointSets->exportToStream(stream, *coord, *grid, *xport); // split the string into a string list for the preview listbox QStringList list = QStringList::split('\n', str, true); listPreview->insertStringList(list); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void ExportDlg::slotIncluded(Q3ListBoxItem*) { toggleActions(); } void ExportDlg::slotExcluded(Q3ListBoxItem*) { toggleActions(); } void ExportDlg::slotInclude() { ASSERT_ENGAUGE(listExcluded != 0); QString curve = listExcluded->currentText(); ASSERT_ENGAUGE(pointSets != 0); pointSets->exportInclude(curve); resetLists(); ASSERT_ENGAUGE(listIncluded != 0); listIncluded->setCurrentItem(listIncluded->findItem(curve)); toggleActions(); updatePreview(); } void ExportDlg::slotExclude() { ASSERT_ENGAUGE(listIncluded != 0); QString curve = listIncluded->currentText(); ASSERT_ENGAUGE(pointSets != 0); pointSets->exportExclude(curve); resetLists(); ASSERT_ENGAUGE(listExcluded != 0); listExcluded->setCurrentItem(listExcluded->findItem(curve)); toggleActions(); updatePreview(); } void ExportDlg::slotXAllCurves(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->pointsSelection != XFromAllCurves)) { xport->pointsSelection = XFromAllCurves; toggleActions(); updatePreview(); } } void ExportDlg::slotXFirstCurve(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->pointsSelection != XFromFirstCurve)) { xport->pointsSelection = XFromFirstCurve; toggleActions(); updatePreview(); } } void ExportDlg::slotXGridLines(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->pointsSelection != XFromGridLines)) { xport->pointsSelection = XFromGridLines; toggleActions(); updatePreview(); } } void ExportDlg::slotXYAllCurves(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->pointsSelection != XYFromAllCurves)) { xport->pointsSelection = XYFromAllCurves; toggleActions(); updatePreview(); } } void ExportDlg::slotAllCurvesOnEachLine(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->layout != AllCurvesOnEachLine)) { xport->layout = AllCurvesOnEachLine; toggleActions(); updatePreview(); } } void ExportDlg::slotOneCurveOnEachLine(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->layout != OneCurveOnEachLine)) { xport->layout = OneCurveOnEachLine; toggleActions(); updatePreview(); } } void ExportDlg::slotCommas(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->delimiters != Commas)) { xport->delimiters = Commas; toggleActions(); updatePreview(); } } void ExportDlg::slotSpaces(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->delimiters != Spaces)) { xport->delimiters = Spaces; toggleActions(); updatePreview(); } } void ExportDlg::slotTabs(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->delimiters != Tabs)) { xport->delimiters = Tabs; toggleActions(); updatePreview(); } } void ExportDlg::slotNone(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->header != HeaderNone)) { xport->header = HeaderNone; toggleActions(); updatePreview(); } } void ExportDlg::slotSimple(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->header != HeaderSimple)) { xport->header = HeaderSimple; toggleActions(); updatePreview(); } } void ExportDlg::slotGnuplot(bool toggle) { ASSERT_ENGAUGE(xport != 0); if (toggle && (xport->header != HeaderGnuplot)) { xport->header = HeaderGnuplot; toggleActions(); updatePreview(); } } void ExportDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } void ExportDlg::slotXThetaLabel (const QString &text) { ASSERT_ENGAUGE(xport != 0); if (coord->frame == Cartesian) xport->xLabel = text; else xport->thetaLabel = text; } engauge-digitizer-5.2/src/exportdlg.h000066400000000000000000000076241222557406400177530ustar00rootroot00000000000000/*************************************************************************** exportdlg.h - description ------------------- begin : Fri Nov 15 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef EXPORTDLG_H #define EXPORTDLG_H #include #include #include #include #include #include #include #include #include #include "digitdef.h" class PointSets; // this dialog box edits the export settings class ExportDlg : public QDialog { Q_OBJECT public: ExportDlg(QString title, PointSets* pointSets, const CoordSettings* coord, const GridMeshSettings* grid, ExportSettings* xport); ~ExportDlg(); public slots: void slotIncluded(Q3ListBoxItem* item); void slotExcluded(Q3ListBoxItem* item); void slotInclude(void); void slotExclude(void); void slotXAllCurves(bool toggle); void slotXFirstCurve(bool toggle); void slotXGridLines(bool toggle); void slotXYAllCurves(bool toggle); void slotAllCurvesOnEachLine(bool toggle); void slotOneCurveOnEachLine(bool toggle); void slotCommas(bool toggle); void slotSpaces(bool toggle); void slotTabs(bool toggle); void slotNone(bool toggle); void slotSimple(bool toggle); void slotGnuplot(bool toggle); void slotXThetaLabel(const QString& xThetaLabel); void slotWhat(void); private: PointSets* pointSets; // reset included and excluded lists void resetLists(void); // enable or disable buttons as appropriate void toggleActions(void); // update preview after modifying a property void updatePreview(void); Q3GroupBox* groupCurveSelection; QLabel* labelIncluded; QLabel* labelExcluded; Q3ListBox* listIncluded; Q3ListBox* listExcluded; QPushButton* buttonInclude; QPushButton* buttonExclude; Q3ButtonGroup* groupPointsSelection; QRadioButton* buttonXAllCurves; QRadioButton* buttonXFirstCurve; QRadioButton* buttonXGridLines; QRadioButton* buttonXYAllCurves; Q3ButtonGroup* groupLayout; QRadioButton* buttonAllCurvesOnEachLine; QRadioButton* buttonOneCurveOnEachLine; Q3ButtonGroup* groupDelimiters; QRadioButton* buttonCommas; QRadioButton* buttonSpaces; QRadioButton* buttonTabs; Q3ButtonGroup* groupHeader; QRadioButton* buttonNone; QRadioButton* buttonSimple; QRadioButton* buttonGnuplot; QLabel* labelXThetaLabel; QLineEdit* editXThetaLabel; // immediately update the preview screen after each setting change, so user can // see the effects. if it turns out the user is blocked for an unacceptably long // time, then the update calculations should have processEvents calls inserted. if // another setting change occurs before the preview update finishes, a new // preview update can be started QLabel* labelPreview; Q3ListBox* listPreview; QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; const CoordSettings* coord; const GridMeshSettings* grid; ExportSettings* xport; }; #endif engauge-digitizer-5.2/src/geometrydlg.cpp000066400000000000000000000222051222557406400206100ustar00rootroot00000000000000/*************************************************************************** geometrydlg.cpp - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #include #include "geometrydlg.h" #include "digitdebug.h" #include "digitdef.h" #include "main.h" #include "defaultsettings.h" // mime types are listed in http://www.isi.edu/in-notes/iana/assignments/media-types/. // QTextDrag specifies the "text" type, and the subtype is chosen to work with other // applications. there seems to be no mime type/subtype pair that works with gnumeric // // ******************** // COMPATIBILITY MATRIX // ******************** // // drag copy drag copy drag copy drag copy // subtype oo oo gnumeric gnumeric wexcel wexcel mexcel mexcel // ------- ---- ---- -------- -------- ------ ------ ------ ------ // [1] yes yes no // plain[2] yes yes no yes yes yes // tab-separated-values no yes no yes yes no no // comma-separated-values no no // // where: // -an empty field means that combination was never checked // -oo specifies the spreadsheet (oocalc) and writing (oowrite) open office 1.0.1 apps in redhat linux 8 // -gnumeric 1.0.9 in redhat linux 8 could paste from the clipboard, but not accept drag and drop, and // only if the klipper tool was brought up to manually select the proper data in the clipboard // -wexcel is microsoft excel 2000 in windows xp // -mexcel is microsoft excel in mac osx 10.3 // // [1] the call to setSubtype was skipped // [2] with the plain subtype, tab delimiters seemed most compatible with other applications const QString MIME_DELIMITER = "\t"; const Q3CString MIME_SUBTYPE = "plain"; GeometryDlg::GeometryDlg(QWidget* parent, bool curve) : QDialog(parent, "geometrydlg", false), curve(curve), infoTable(0) { DigitDebug::ctor(QString("geometrydlg " + QString::number((ulong) this, 16))); setCaption(curveReplace("Curve Geometry%1") .arg(freewareCaption)); // display main window in previous position with same size DefaultSettings& rSettings = DefaultSettings::instance(); if (curve) { move(rSettings.getWindowCurvePosition()); resize(rSettings.getWindowCurveSize()); } else { move(rSettings.getWindowMeasurePosition()); resize(rSettings.getWindowMeasureSize()); } layout = new Q3GridLayout(this, 1, 1); CHECK_PTR_ENGAUGE(layout); infoTable = new InfoTable(this); CHECK_PTR_ENGAUGE(infoTable); infoTable->setReadOnly(true); infoTable->setDragEnabled(true); infoTable->setSelectionMode(Q3Table::Single); infoTable->setColumnMovingEnabled(true); QWhatsThis::add(infoTable, QString(tr("Geometry information\n\nThis window displays geometry information such as " "angles, coordinates, distances and areas, for the currently active curve or measure\n\n" "Functional area is defined as the area under the function and above the horizontal axis " "(useful for curves)\n\n" "Polygonal area is defined as the area inside the polygon bounded by the points (useful for measures)\n\n" "Selected items can by copied to other applications by clicking and dragging the mouse, and then " "either dragging the selected cells, or copying them using Control C\n\n" "Columns can be rearranged by pressing the control key and clicking and dragging the mouse"))); layout->addWidget(infoTable, 0, 0); } GeometryDlg::~GeometryDlg() { DigitDebug::dtor(QString("geometrydlg " + QString::number((ulong) this, 16))); } void GeometryDlg::hideEvent(QHideEvent*) { emit(hideGeometry()); } void GeometryDlg::moveEvent(QMoveEvent* e) { if (e) { if (curve) { DefaultSettings::instance().setWindowCurvePosition(e->pos()); } else { DefaultSettings::instance().setWindowMeasurePosition(e->pos()); } } } void GeometryDlg::resizeEvent(QResizeEvent* e) { if (e) { if (curve) { DefaultSettings::instance().setWindowCurveSize(e->size()); } else { DefaultSettings::instance().setWindowMeasureSize(e->size()); } } } QString GeometryDlg::extractSelectedItems(QString delimiter) { QString rtn; // extracted table is a subset of the original table with unselected rows on the top // and bottom, and unselected columns on the left and right, removed int rowBegin, colBegin; //inclusive int rowEnd, colEnd; // exclusive getSelectedItemsBounds(rowBegin, colBegin, rowEnd, colEnd); const QString SPACE = " "; // needed so empty corners do not cause rows or columns to be dropped for (int row = rowBegin; row < rowEnd; row++) { for (int col = colBegin; col < colEnd; col++) { if (infoTable->isSelected(row, col)) { Q3TableItem* pItem = infoTable->item(row, col); if (pItem == 0) rtn += SPACE; else rtn += pItem->text(); } if (col < colEnd - 1) rtn += delimiter; } rtn += QString("\n"); } return rtn; } void GeometryDlg::getSelectedItemsBounds(int& rowBegin, int& colBegin, int& rowEnd, int& colEnd) { ASSERT_ENGAUGE(infoTable != 0); rowBegin = infoTable->numRows(); colBegin = infoTable->numCols(); rowEnd = 0; colEnd = 0; for (int row = 0; row < infoTable->numRows(); row++) for (int col = 0; col < infoTable->numCols(); col++) { if (infoTable->isSelected(row, col)) { if (row < rowBegin) rowBegin = row; if (col < colBegin) colBegin = col; if (row >= rowEnd) rowEnd = row + 1; if (col >= colEnd) colEnd = col + 1; } } } void GeometryDlg::displayGeometryInfo(GeometryWindowItemList& rInfo) { if (rInfo != displayedInfo) { // one or more items have changed displayedInfo = rInfo; clearTable(); // QTable has problems unless numbers of rows and columns are defined before any items are added setRowColumnCount(rInfo); addNewItemsToTable(rInfo); } } void GeometryDlg::clearTable() { for (int row = 0; row < infoTable->numRows(); row++) for (int col = 0; col < infoTable->numCols(); col++) infoTable->clearCell(row, col); } void GeometryDlg::setRowColumnCount(GeometryWindowItemList& rInfo) { int maxRow = 0, maxColumn = 0; for (GeometryWindowItemList::iterator itr = rInfo.begin(); itr != rInfo.end(); ++itr) { int row = (*itr).row(); int col = (*itr).column(); if (row > maxRow) maxRow = row; if (col > maxColumn) maxColumn = col; } ASSERT_ENGAUGE(infoTable != 0); infoTable->setNumRows(maxRow + 1); infoTable->setNumCols(maxColumn + 1); } void GeometryDlg::addNewItemsToTable(GeometryWindowItemList& rInfo) { for (GeometryWindowItemList::iterator itr = rInfo.begin(); itr != rInfo.end(); ++itr) { int row = (*itr).row(); int col = (*itr).column(); QString entry = (*itr).entry(); Q3TableItem* pTableItem; if ((pTableItem = infoTable->item(row, col)) != 0) pTableItem->setText(entry); else { infoTable->setItem(row, col, new Q3TableItem(infoTable, Q3TableItem::Never, entry)); } } } QString GeometryDlg::curveReplace(const char* text) { if (curve) return QString(tr(text)); else { QString rtn(text); rtn.replace(QRegExp("curve"), QString("measure")); rtn.replace(QRegExp("Curve"), QString("Measure")); return rtn; } } GeometryDlg::InfoTable::InfoTable(GeometryDlg* parent) : Q3Table(parent, "info"), parent(parent) { } Q3DragObject* GeometryDlg::InfoTable::dragObject() { ASSERT_ENGAUGE(parent != 0); Q3TextDrag* pDrag = new Q3TextDrag(parent->extractSelectedItems(MIME_DELIMITER), this); pDrag->setSubtype(MIME_SUBTYPE); return pDrag; } void GeometryDlg::InfoTable::keyPressEvent(QKeyEvent* e) { if ((e->key() == Qt::Key_C) && (e->state() == Qt::ControlModifier)) { ASSERT_ENGAUGE(parent != 0); QApplication::clipboard()->setText(parent->extractSelectedItems(MIME_DELIMITER)); } else e->ignore(); } engauge-digitizer-5.2/src/geometrydlg.h000066400000000000000000000073471222557406400202670ustar00rootroot00000000000000/*************************************************************************** geometrydlg.h - description ------------------- begin : Fri Nov 1 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GEOMETRYDLG_H #define GEOMETRYDLG_H #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include "geometrywindowitem.h" class DigitDoc; // this dialog box just displays the geometry information for the currently // selected curve or measure pointset. this dialog is unique among the dialog boxes // in that: // (1) it is resizable (the other dialogs would require too much work) // (2) it displays only so there are no ok and cancel buttons (they would be equivalent) // (3) it is modeless class GeometryDlg : public QDialog { Q_OBJECT public: GeometryDlg(QWidget* parent, bool curve); ~GeometryDlg(); // replace existing contents of table void displayGeometryInfo(GeometryWindowItemList& rInfo); // write selected items into a string with the specified delimiter QString extractSelectedItems(QString delimiter); signals: // user clicked on close button in title bar void hideGeometry(); protected: // forward the hide event to the main window virtual void hideEvent(QHideEvent* e); // geometry windows move and resize events are caught and the geometries are saved virtual void moveEvent(QMoveEvent* e); virtual void resizeEvent(QResizeEvent* e); private: // subclass to override dragObject method class InfoTable : public Q3Table { public: InfoTable(GeometryDlg* parent); protected: // dragging virtual Q3DragObject* dragObject(); // for copying to clipboard virtual void keyPressEvent(QKeyEvent* e); private: GeometryDlg* parent; }; // true for curve pointsets, false for measure pointsets bool curve; // remove all content from table. the table items cannot be deleted void clearTable(); // define size of table before items are added void setRowColumnCount(GeometryWindowItemList& rInfo); // merge new items into table void addNewItemsToTable(GeometryWindowItemList& rInfo); // get bounds of selected items. lower limits are inclusive and upper limits are exclusive void getSelectedItemsBounds(int& rowBegin, int& colBegin, int& rowEnd, int& colEnd); // returns translated string with "curve" replaced by "measure" if curve is false QString curveReplace(const char* text); // autolayout Q3GridLayout* layout; // scrollable list box displays all geometry information InfoTable* infoTable; // items that are currently displayed. these are used to prevent unnecessary refreshes GeometryWindowItemList displayedInfo; }; #endif // GEOMETRYDLG_H engauge-digitizer-5.2/src/geometrywindowitem.cpp000066400000000000000000000036501222557406400222330ustar00rootroot00000000000000/*************************************************************************** geometrywindowitem.cpp - description ------------------- begin : Sun Sep 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "geometrywindowitem.h" GeometryWindowItem::GeometryWindowItem() : m_row(0), m_column(0) { } GeometryWindowItem::GeometryWindowItem(int row, int column, QString entry) : m_row(row), m_column(column), m_entry(entry) { } GeometryWindowItem::GeometryWindowItem(const GeometryWindowItem& old) { m_row = old.row(); m_column = old.column(); m_entry = old.entry(); } GeometryWindowItem& GeometryWindowItem::operator=(const GeometryWindowItem& old) { m_row = old.row(); m_column = old.column(); m_entry = old.entry(); return *this; } bool GeometryWindowItem::operator==(const GeometryWindowItem& other) const { return ((m_row == other.row()) && (m_column == other.column()) && (m_entry == other.entry())); } int GeometryWindowItem::row() const { return m_row; } int GeometryWindowItem::column() const { return m_column; } QString GeometryWindowItem::entry() const { return m_entry; } engauge-digitizer-5.2/src/geometrywindowitem.h000066400000000000000000000042701222557406400216770ustar00rootroot00000000000000/*************************************************************************** geometrywindowitem.h - description ------------------- begin : Sun Sep 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GEOMETRYWINDOWITEM_H #define GEOMETRYWINDOWITEM_H #include #include // entry corresponding to one cell in the table of the curve geometry or // measure geometry windows class GeometryWindowItem { public: GeometryWindowItem(); // default constructor should only be used by GeometryWindowItemList GeometryWindowItem(int row, int column, QString entry); // copy and assignment constructors are required by GeometryWindowItemList GeometryWindowItem(const GeometryWindowItem& old); GeometryWindowItem& operator=(const GeometryWindowItem& old); // comparison operator bool operator==(const GeometryWindowItem& other) const; int row() const; int column() const; QString entry() const; private: int m_row; int m_column; QString m_entry; }; // use value list, rather than pointer list, because it offers easy deep copies (although // this means adding default constructor, copy and assignment operators to the items). also, the // original pointer list implementation was probably leaking memory so value list should be safer typedef QList GeometryWindowItemList; #endif // GEOMETRYWINDOWITEM_H engauge-digitizer-5.2/src/grid.cpp000066400000000000000000000055021222557406400172140ustar00rootroot00000000000000/*************************************************************************** grid.cpp - description ------------------- begin : Tue Nov 19 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "grid.h" #include "gridmesh.h" #include "transform.h" #include "digitdebug.h" #include "main.h" #include "pointsetstyles.h" Grid::Grid(GridType gridType, Q3Canvas* canvas) : m_gridType(gridType), m_canvas(canvas), m_grid(false) { DigitDebug::ctor(QString("grid ") + QString::number((ulong) this, 16)); m_lines.setAutoDelete(true); } Grid::~Grid() { DigitDebug::dtor(QString("grid ") + QString::number((ulong) this, 16)); m_lines.clear(); // autoDelete is on } void Grid::makeGridLines(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { // remove all old grid lines from previous calls m_lines.clear(); // autoDelete is on GridMesh gridMesh; GridlinesScreen gridlines = gridMesh.makeGridLines(transform, coord, grid); GridlinesScreen::iterator itr; for (itr = gridlines.begin(); itr != gridlines.end(); ++itr) { Q3CanvasLine* line = new Q3CanvasLine(m_canvas); CHECK_PTR_ENGAUGE(line); line->setPoints((*itr).start.x(), (*itr).start.y(), (*itr).stop.x(), (*itr).stop.y()); line->setPen(gridlinePen((*itr).R)); line->setZ(ZGridLines); m_lines.append(line); } } QPen Grid::gridlinePen(bool R) { // line width other than 1 is not implemented in Qt 2.3 const int ONLY_AVAILABLE_WIDTH = 1; if (m_gridType == GridTypeRemoval) return PointSetStyles::instance().pointSetPen(DigitBlack, ONLY_AVAILABLE_WIDTH); else if (R) return PointSetStyles::instance().pointSetPen(DigitBlack, ONLY_AVAILABLE_WIDTH, Qt::DotLine); else return PointSetStyles::instance().pointSetPen(DigitBlack, ONLY_AVAILABLE_WIDTH, Qt::DashLine); } void Grid::showGrid(bool toggle) { m_grid = toggle; Q3CanvasLine* line; for (line = m_lines.first(); line; line = m_lines.next()) { ASSERT_ENGAUGE(line != 0); line->setVisible(toggle); } } engauge-digitizer-5.2/src/grid.h000066400000000000000000000037041222557406400166630ustar00rootroot00000000000000/*************************************************************************** grid.h - description ------------------- begin : Tue Nov 19 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GRID_H #define GRID_H #include #include #include "digitdef.h" class Transform; // this class owns the grid lines class Grid { public: Grid(GridType gridType, Q3Canvas* canvas); ~Grid(); // grid lines are rebuilt after change to any of the arguments of this function. they // start out hidden and remain so until showGrid is called void makeGridLines(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); // turn grid on/off bool grid(void) { return m_grid; } void showGrid(bool toggle); private: GridType m_gridType; Q3Canvas* m_canvas; // pen for gridlines depends on m_gridType, and if line represents R direction QPen gridlinePen(bool R); // true for visible grid lines, otherwise false for hidden bool m_grid; Q3PtrList m_lines; }; #endif // GRID_H engauge-digitizer-5.2/src/gridmesh.cpp000066400000000000000000000133561222557406400200770ustar00rootroot00000000000000/*************************************************************************** gridmesh.cpp - description ------------------- begin : Mon Dec 8 2003 copyright : (C) 2003 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "gridmesh.h" #include "transform.h" #include "digitdebug.h" #include "main.h" GridMesh::GridMesh() { DigitDebug::ctor(QString("gridmesh ") + QString::number((ulong) this, 16)); } GridMesh::~GridMesh() { DigitDebug::dtor(QString("gridmesh ") + QString::number((ulong) this, 16)); } GridlinesScreen GridMesh::makeGridLines(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { ASSERT_ENGAUGE(transform != 0); if (transform->validAxes()) { if (coord.frame == Cartesian) return makeGridX(transform, coord, grid) + makeGridY(transform, coord, grid); else return makeGridTheta(transform, coord, grid) + makeGridR(transform, coord, grid); } GridlinesScreen emptyList; return emptyList; } GridlinesScreen GridMesh::makeGridX(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { int i; int xStartS, yStartS, xStopS, yStopS; double xG = grid.startX; GridlineScreen gridline; GridlinesScreen gridlines; for (i = 0; i < grid.countX; i++) { ASSERT_ENGAUGE(transform != 0); transform->xThetaYRToScreen(coord, xG, grid.startY, &xStartS, &yStartS); transform->xThetaYRToScreen(coord, xG, grid.stopY, &xStopS, &yStopS); gridline.start.setX(xStartS); gridline.start.setY(yStartS); gridline.stop.setX(xStopS); gridline.stop.setY(yStopS); gridline.R = false; gridlines.append (gridline); if (coord.xThetaScale == Linear) xG += grid.stepX; else xG *= grid.stepX; } return gridlines; } GridlinesScreen GridMesh::makeGridY(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { int i; int xStartS, yStartS, xStopS, yStopS; double yG = grid.startY; GridlineScreen gridline; GridlinesScreen gridlines; for (i = 0; i < grid.countY; i++) { ASSERT_ENGAUGE(transform != 0); transform->xThetaYRToScreen(coord, grid.startX, yG, &xStartS, &yStartS); transform->xThetaYRToScreen(coord, grid.stopX, yG, &xStopS, &yStopS); gridline.start.setX(xStartS); gridline.start.setY(yStartS); gridline.stop.setX(xStopS); gridline.stop.setY(yStopS); gridline.R = false; gridlines.append (gridline); if (coord.yRScale == Linear) yG += grid.stepY; else yG *= grid.stepY; } return gridlines; } GridlinesScreen GridMesh::makeGridTheta(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { int i; int xStartS, yStartS, xStopS, yStopS; double thetaG = grid.startX; GridlineScreen gridline; GridlinesScreen gridlines; for (i = 0; i < grid.countX; i++) { ASSERT_ENGAUGE(transform != 0); transform->xThetaYRToScreen(coord, thetaG, grid.startY, &xStartS, &yStartS); transform->xThetaYRToScreen(coord, thetaG, grid.stopY, &xStopS, &yStopS); gridline.start.setX(xStartS); gridline.start.setY(yStartS); gridline.stop.setX(xStopS); gridline.stop.setY(yStopS); gridline.R = false; thetaG += grid.stepX; } return gridlines; } GridlinesScreen GridMesh::makeGridR(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid) { int i; int xStartS = 0, yStartS = 0, xStopS = 1, yStopS = 1; double rG = grid.startY; GridlineScreen gridline; GridlinesScreen gridlines; for (i = 0; i < grid.countY; i++) { // for polar coordinates we simply piecewise define the elliptical arc until motivated // to implement a better drawing algorithm. segments will be evenly spaced in angle // some pdf documents describing alternative algorithms are found in the doc directory. // it would have been elegant to use QCanvasEllipses but those are axis-aligned. double delta = angleSpacing(coord.thetaUnits); bool first = true; for (double angle = grid.startX; angle < grid.stopX; angle += delta) { ASSERT_ENGAUGE(transform != 0); transform->xThetaYRToScreen(coord, angle, rG, &xStopS, &yStopS); if (first) { xStartS = xStopS; yStartS = yStopS; } else { if (dvmag3 (xStopS - xStartS, yStopS - yStartS, 0.0) >= pixelSpacing) { gridline.start.setX(xStartS); gridline.start.setY(yStartS); gridline.stop.setX(xStopS); gridline.stop.setY(yStopS); gridline.R = true; xStartS = xStopS; yStartS = yStopS; } } first = false; } if (coord.yRScale == Linear) rG += grid.stepY; else rG *= grid.stepY; } return gridlines; } double GridMesh::angleSpacing(ThetaUnits units) { switch (units) { case ThetaDegrees: default: return angleSpacingDeg; case ThetaGradians: return angleSpacingGrad; case ThetaRadians: return angleSpacingRad; } } engauge-digitizer-5.2/src/gridmesh.h000066400000000000000000000056721222557406400175460ustar00rootroot00000000000000/*************************************************************************** gridmesh.h - description ------------------- begin : Mon Dec 8 2003 copyright : (C) 2003 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GRIDMESH_H #define GRIDMESH_H #include "digitdef.h" //Added by qt3to4: #include // angle spacing for ellipses is constant until constrained by minimum pixel spacing const double angleSpacingDeg = 1.0; // total # canvas lines is 360*#grids/spacing const double angleSpacingGrad = angleSpacingDeg * 400.0 / 360.0; const double angleSpacingRad = angleSpacingDeg * 3.1415926535 / 180.0; // minimum pixel spacing for ellipses. value of 4 should work well with 72 dots per inch const double pixelSpacing = 4; class Transform; struct GridlineScreen { QPoint start; QPoint stop; // true if line represents a radial line bool R; }; typedef QList GridlinesScreen; // this class computes the screen coordinates of the gridlines. this is called by // qcanvas-writing code, or by grid removal code which needs to know the locations // of the gridlines class GridMesh { public: GridMesh(); ~GridMesh(); // grid lines are rebuilt after change to any of the arguments of this function. they // start out hidden and remain so until showGrid is called GridlinesScreen makeGridLines(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); private: // create grid lines for evenly spaced values of x, y, theta and r GridlinesScreen makeGridX(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); GridlinesScreen makeGridY(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); GridlinesScreen makeGridTheta(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); GridlinesScreen makeGridR(const Transform* transform, const CoordSettings coord, const GridMeshSettings grid); // constant spacing for our hokey ellipse drawing algorithm double angleSpacing(ThetaUnits unit); }; #endif // GRIDMESH_H engauge-digitizer-5.2/src/gridmeshdlg.cpp000066400000000000000000000452171222557406400205670ustar00rootroot00000000000000/*************************************************************************** gridmeshdlg.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include //Added by qt3to4: #include #include #include #include #include "digitdoc.h" #include "digitview.h" #include "gridmeshdlg.h" #include "img/whatsthis.xpm" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" GridMeshDlg::GridMeshDlg(QString gridType, QString title, CoordSettings* coordSettings, GridMeshSettings* gridSettings) : QDialog(0, "gridmeshdlg", true), coordSettings(coordSettings), gridSettings(gridSettings) { DigitDebug::ctor(QString("gridmeshdlg ") + QString::number((ulong) this, 16)); setCaption(tr("Grid Mesh %1 - [%2]%3") .arg(gridType) .arg(title) .arg(freewareCaption)); setFixedSize(470, 280); // x grid lines groupX = new Q3GroupBox(QString(tr("X Grid Lines")), this); CHECK_PTR_ENGAUGE(groupX); groupX->setGeometry(10, 10, 220, 220); labelDisableX = new QLabel(QString(tr("Disable")), groupX); CHECK_PTR_ENGAUGE(labelDisableX); labelDisableX->setGeometry(10, 20, 100, 30); comboDisableX = new QComboBox(this, groupX, tr("Disabled X Value")); CHECK_PTR_ENGAUGE(comboDisableX); comboDisableX->setGeometry(110, 20, 100, 30); comboDisableX->setEditable(false); comboDisableX->insertStringList(GridSetStrings); QWhatsThis::add(comboDisableX, QString(tr("Disabled value.\n\nThe X grid lines are specified " "using only three values at a time. For flexibility, four values are offered so you must chose " "which value is disabled. Once disabled, that value is simply updated as the other values change"))); connect(comboDisableX, SIGNAL(activated(int)), this, SLOT(slotDisableX(int))); labelCountX = new QLabel(QString(tr("X Count")), groupX); CHECK_PTR_ENGAUGE(labelCountX); labelCountX->setGeometry(10, 60, 100, 30); editCountX = new QLineEdit(groupX); CHECK_PTR_ENGAUGE(editCountX); editCountX->setGeometry(110, 60, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editCountX->setText(QString("%1").arg(gridSettings->countX)); QWhatsThis::add(editCountX, QString(tr("Number of X grid lines.\n\nThe number of X grid lines must " "be entered as an integer greater than zero"))); validatorCountX = new QIntValidator(editCountX); CHECK_PTR_ENGAUGE(validatorCountX); editCountX->setValidator(validatorCountX); connect(editCountX, SIGNAL(textChanged(const QString &)), this, SLOT(slotCountX(const QString &))); labelStartX = new QLabel(QString(tr("X Start")), groupX); CHECK_PTR_ENGAUGE(labelStartX); labelStartX->setGeometry(10, 100, 100, 30); editStartX = new QLineEdit(groupX); CHECK_PTR_ENGAUGE(editStartX); editStartX->setGeometry(110, 100, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStartX->setText(QString("%1").arg(gridSettings->startX)); QWhatsThis::add(editStartX, QString(tr("Value of the first X grid line.\n\nThe start value cannot " "be greater than the stop value"))); validatorStartX = new QDoubleValidator(editStartX); CHECK_PTR_ENGAUGE(validatorStartX); editStartX->setValidator(validatorStartX); connect(editStartX, SIGNAL(textChanged(const QString &)), this, SLOT(slotStartX(const QString &))); labelStepX = new QLabel(QString(tr("X Step")), groupX); CHECK_PTR_ENGAUGE(labelStepX); labelStepX->setGeometry(10, 140, 100, 30); editStepX = new QLineEdit(groupX); CHECK_PTR_ENGAUGE(editStepX); editStepX->setGeometry(110, 140, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStepX->setText(QString("%1").arg(gridSettings->stepX)); QWhatsThis::add(editStepX, QString(tr("Difference in value between two successive X grid lines.\n\n" "The step value must be greater than zero"))); validatorStepX = new QDoubleValidator(editStepX); CHECK_PTR_ENGAUGE(validatorStepX); editStepX->setValidator(validatorStepX); connect(editStepX, SIGNAL(textChanged(const QString &)), this, SLOT(slotStepX(const QString &))); labelStopX = new QLabel(QString(tr("X Stop")), groupX); CHECK_PTR_ENGAUGE(labelStopX); labelStopX->setGeometry(10, 180, 100, 30); editStopX = new QLineEdit(groupX); CHECK_PTR_ENGAUGE(editStopX); editStopX->setGeometry(110, 180, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStopX->setText(QString("%1").arg(gridSettings->stopX)); QWhatsThis::add(editStopX, QString(tr("Value of the last X grid line.\n\nThe stop value cannot " "be less than the start value"))); validatorStopX = new QDoubleValidator(editStopX); CHECK_PTR_ENGAUGE(validatorStopX); editStopX->setValidator(validatorStopX); connect(editStopX, SIGNAL(textChanged(const QString &)), this, SLOT(slotStopX(const QString &))); // y grid lines groupY = new Q3GroupBox(QString(tr("Y Grid Lines")), this); CHECK_PTR_ENGAUGE(groupY); groupY->setGeometry(240, 10, 220, 220); labelDisableY = new QLabel(QString(tr("Disable")), groupY); CHECK_PTR_ENGAUGE(labelDisableY); labelDisableY->setGeometry(10, 20, 100, 30); comboDisableY = new QComboBox(false, groupY, tr("Disabled Y Value")); CHECK_PTR_ENGAUGE(comboDisableY); comboDisableY->setGeometry(110, 20, 100, 30); comboDisableY->setEditable(false); comboDisableY->insertStringList(GridSetStrings); QWhatsThis::add(comboDisableY, QString(tr("Disabled value.\n\nThe Y grid lines are specified " "using only three values at a time. For flexibility, four values are offered so you must chose " "which value is disabled. Once disabled, that value is simply updated as the other values change"))); connect(comboDisableY, SIGNAL(activated(int)), this, SLOT(slotDisableY(int))); labelCountY = new QLabel(QString(tr("Y Count")), groupY); CHECK_PTR_ENGAUGE(labelCountY); labelCountY->setGeometry(10, 60, 100, 30); editCountY = new QLineEdit(groupY); CHECK_PTR_ENGAUGE(editCountY); editCountY->setGeometry(110, 60, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editCountY->setText(QString("%1").arg(gridSettings->countY)); QWhatsThis::add(editCountY, QString(tr("Number of Y grid lines.\n\nThe number of X grid lines must " "be entered as an integer greater than zero"))); validatorCountY = new QIntValidator(editCountY); CHECK_PTR_ENGAUGE(validatorCountY); editCountY->setValidator(validatorCountY); connect(editCountY, SIGNAL(textChanged(const QString &)), this, SLOT(slotCountY(const QString &))); labelStartY = new QLabel(QString(tr("Y Start")), groupY); CHECK_PTR_ENGAUGE(labelStartY); labelStartY->setGeometry(10, 100, 100, 30); editStartY = new QLineEdit(groupY); CHECK_PTR_ENGAUGE(editStartY); editStartY->setGeometry(110, 100, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStartY->setText(QString("%1").arg(gridSettings->startY)); QWhatsThis::add(editStartY, QString(tr("Value of the first Y grid line.\n\nThe start value cannot " "be greater than the stop value"))); validatorStartY = new QDoubleValidator(editStartY); CHECK_PTR_ENGAUGE(validatorStartY); editStartY->setValidator(validatorStartY); connect(editStartY, SIGNAL(textChanged(const QString &)), this, SLOT(slotStartY(const QString &))); labelStepY = new QLabel(QString(tr("Y Step")), groupY); CHECK_PTR_ENGAUGE(labelStepY); labelStepY->setGeometry(10, 140, 100, 30); editStepY = new QLineEdit(groupY); CHECK_PTR_ENGAUGE(editStepY); editStepY->setGeometry(110, 140, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStepY->setText(QString("%1").arg(gridSettings->stepY)); QWhatsThis::add(editStepY, QString(tr("Difference in value between two successive Y grid lines.\n\n" "The step value must be greater than zero"))); validatorStepY = new QDoubleValidator(editStepY); CHECK_PTR_ENGAUGE(validatorStepY); editStepY->setValidator(validatorStepY); connect(editStepY, SIGNAL(textChanged(const QString &)), this, SLOT(slotStepY(const QString &))); labelStopY = new QLabel(QString(tr("Y Stop")), groupY); CHECK_PTR_ENGAUGE(labelStopY); labelStopY->setGeometry(10, 180, 100, 30); editStopY = new QLineEdit(groupY); CHECK_PTR_ENGAUGE(editStopY); editStopY->setGeometry(110, 180, 100, 30); ASSERT_ENGAUGE(gridSettings != 0); if (gridSettings->initialized) editStopY->setText(QString("%1").arg(gridSettings->stopY)); QWhatsThis::add(editStopY, QString(tr("Value of the last Y grid line.\n\nThe stop value cannot " "be less than the start value"))); validatorStopY = new QDoubleValidator(editStopY); CHECK_PTR_ENGAUGE(validatorStopY); editStopY->setValidator(validatorStopY); connect(editStopY, SIGNAL(textChanged(const QString &)), this, SLOT(slotStopY(const QString &))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(120, 240, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(250, 240, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(400, 240, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); toggleActions(); } GridMeshDlg::~GridMeshDlg() { DigitDebug::dtor(QString("gridmeshdlg ") + QString::number((ulong) this, 16)); } void GridMeshDlg::computeDisabledValue(bool linear, GridSet gridSet, int* count, double* start, double* step, double* stop, QLineEdit* editCount, QLineEdit* editStart, QLineEdit* editStep, QLineEdit* editStop) { // validators prevent divide by zero errors and negative log errors from occurring below switch (gridSet) { case AllButCount: if (linear) *count = 1 + (int) (0.5 + (*stop - *start) / *step); else *count = 1 + (int) ((log(*stop) - log(*start)) / log(*step)); ASSERT_ENGAUGE(editCount != 0); editCount->setText(QString("%1").arg(*count)); break; case AllButStart: if (linear) *start = *stop - (*count - 1.0) * *step; else *start = exp(log(*stop) - (*count - 1.0) * log(*step)); ASSERT_ENGAUGE(editStart != 0); editStart->setText(QString("%1").arg(*start)); break; case AllButStep: if (linear) *step = (*stop - *start) / (*count - 1.0); else *step = exp((log(*stop) - log(*start)) / (*count - 1.0)); ASSERT_ENGAUGE(editStep != 0); editStep->setText(QString("%1").arg(*step)); break; case AllButStop: if (linear) *stop = *start + (*count - 1.0) * *step; else *stop = exp(log(*start) + (*count - 1.0) * log(*step)); ASSERT_ENGAUGE(editStop != 0); editStop->setText(QString("%1").arg(*stop)); break; } } void GridMeshDlg::toggleActions() { ASSERT_ENGAUGE(gridSettings != 0); ASSERT_ENGAUGE(comboDisableX != 0); comboDisableX->setCurrentText(GridSetStrings [gridSettings->gridSetX]); ASSERT_ENGAUGE(comboDisableY != 0); comboDisableY->setCurrentText(GridSetStrings [gridSettings->gridSetY]); if (validateSettingsX()) { // automatically fill in the missing setting ASSERT_ENGAUGE(coordSettings != 0); ASSERT_ENGAUGE(gridSettings != 0); computeDisabledValue(coordSettings->xThetaScale == Linear, gridSettings->gridSetX, &gridSettings->countX, &gridSettings->startX, &gridSettings->stepX, &gridSettings->stopX, editCountX, editStartX, editStepX, editStopX); } if (validateSettingsY()) { // automatically fill in the missing setting ASSERT_ENGAUGE(coordSettings != 0); ASSERT_ENGAUGE(gridSettings != 0); computeDisabledValue(coordSettings->yRScale == Linear, gridSettings->gridSetY, &gridSettings->countY, &gridSettings->startY, &gridSettings->stepY, &gridSettings->stopY, editCountY, editStartY, editStepY, editStopY); } if (validateSettingsX() && validateSettingsY()) { // settings are now initialized. we do not need to worry about the case where x settings // are set but y are not, or vice versa, since user cannot click on OK until both // x and y settings are all set gridSettings->initialized = true; } // enable appropriate edit boxes ASSERT_ENGAUGE(editCountX != 0); editCountX->setEnabled(gridSettings->gridSetX != AllButCount); ASSERT_ENGAUGE(editStartX != 0); editStartX->setEnabled(gridSettings->gridSetX != AllButStart); ASSERT_ENGAUGE(editStepX != 0); editStepX->setEnabled(gridSettings->gridSetX != AllButStep); ASSERT_ENGAUGE(editStopX != 0); editStopX->setEnabled(gridSettings->gridSetX != AllButStop); ASSERT_ENGAUGE(editCountY != 0); editCountY->setEnabled(gridSettings->gridSetY != AllButCount); ASSERT_ENGAUGE(editStartY != 0); editStartY->setEnabled(gridSettings->gridSetY != AllButStart); ASSERT_ENGAUGE(editStepX != 0); editStepY->setEnabled(gridSettings->gridSetY != AllButStep); ASSERT_ENGAUGE(editStopY != 0); editStopY->setEnabled(gridSettings->gridSetY != AllButStop); ASSERT_ENGAUGE(buttonOk != 0); buttonOk->setEnabled(validateSettingsX() && validateSettingsY()); } bool GridMeshDlg::validateSettings(Scale scale, GridSet gridSet, QString textCount, QString textStart, QString textStep, QString textStop, int count, double start, double step, double stop) { // enforce constraints, but only on enabled settings since the disabled setting // will immediately be fixed automatically // (1) the fields other than the gridSet field cannot be blank if ((textCount.length() == 0) && (gridSet != AllButCount)) return false; if ((textStart.length() == 0) && (gridSet != AllButStart)) return false; if ((textStep.length() == 0) && (gridSet != AllButStep)) return false; if ((textStop.length() == 0) && (gridSet != AllButStop)) return false; // (2) need count values greater than one to eliminate divide by zero // (3) need count values greater than zero since we are forcing start0 if ((count < 2) && (gridSet != AllButCount)) return false; // (4) need start values less than or equal to stop values if ((start > stop) && (gridSet != AllButStart) && (gridSet != AllButStop)) return false; // (5) need start values greater than zero for log coordinates to eliminate log of negative value if (scale == Log) if ((start <= 0.0) && (gridSet != AllButStart)) return false; // (6) need nonzero step values to eliminate divide by zero // (7) need step values greater than zero for log coordinates to eliminate log of negative value // (8) need step values greater than zero to eliminate infinite loops (loops in the wrong direction) if ((step < DefaultSettings::instance().getDoubleMin()) && (gridSet != AllButStep)) return false; return true; } bool GridMeshDlg::validateSettingsX() { return validateSettings( coordSettings->xThetaScale, gridSettings->gridSetX, editCountX->text(), editStartX->text(), editStepX->text(), editStopX->text(), gridSettings->countX, gridSettings->startX, gridSettings->stepX, gridSettings->stopX); } bool GridMeshDlg::validateSettingsY() { return validateSettings( coordSettings->yRScale, gridSettings->gridSetY, editCountY->text(), editStartY->text(), editStepY->text(), editStopY->text(), gridSettings->countY, gridSettings->startY, gridSettings->stepY, gridSettings->stopY); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void GridMeshDlg::slotDisableX(int index) { ASSERT_ENGAUGE(gridSettings != 0); if ((GridSet) index != gridSettings->gridSetX) { gridSettings->gridSetX = (GridSet) index; toggleActions(); } } void GridMeshDlg::slotDisableY(int index) { ASSERT_ENGAUGE(gridSettings != 0); if ((GridSet) index != gridSettings->gridSetY) { gridSettings->gridSetY = (GridSet) index; toggleActions(); } } void GridMeshDlg::slotCountX(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->countX = 0; else gridSettings->countX = text.toInt(); toggleActions(); } void GridMeshDlg::slotCountY(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->countY = 0; else gridSettings->countY = text.toInt(); toggleActions(); } void GridMeshDlg::slotStartX(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->startX = 0.0; else gridSettings->startX = text.toDouble(); toggleActions(); } void GridMeshDlg::slotStartY(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->startY = 0.0; else gridSettings->startY = text.toDouble(); toggleActions(); } void GridMeshDlg::slotStepX(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->stepX = 0.0; else gridSettings->stepX = text.toDouble(); toggleActions(); } void GridMeshDlg::slotStepY(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->stepY = 0.0; else gridSettings->stepY = text.toDouble(); toggleActions(); } void GridMeshDlg::slotStopX(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->stopX = 0.0; else gridSettings->stopX = text.toDouble(); toggleActions(); } void GridMeshDlg::slotStopY(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->stopY = 0.0; else gridSettings->stopY = text.toDouble(); toggleActions(); } void GridMeshDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/gridmeshdlg.h000066400000000000000000000075641222557406400202370ustar00rootroot00000000000000/*************************************************************************** gridmeshdlg.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GRIDMESHDLG_H #define GRIDMESHDLG_H #include #include #include #include #include #include #include #include #include "digitdef.h" class DigitDoc; // this dialog box class edits the document's grid information class GridMeshDlg : public QDialog { Q_OBJECT public: GridMeshDlg(QString gridType, QString title, CoordSettings* coordSettings, GridMeshSettings* gridSettings); ~GridMeshDlg(); public slots: void slotDisableX(int index); void slotDisableY(int index); void slotCountX(const QString &text); void slotCountY(const QString &text); void slotStartX(const QString &text); void slotStartY(const QString &text); void slotStepX(const QString &text); void slotStepY(const QString &text); void slotStopX(const QString &text); void slotStopY(const QString &text); void slotWhat(void); private: // enable or disable buttons as appropriate void toggleActions(void); // return true if all settings constraints are currently satisfied. setBottom and setTop // in the validators were not used since the validators do not distinguish Intermediate // and Acceptable externally bool validateSettings(Scale scale, GridSet gridSet, QString textCount, QString textStart, QString textStep, QString textStop, int count, double start, double step, double stop); bool validateSettingsX(void); bool validateSettingsY(void); // given valid new values for three settings, compute the fourth void computeDisabledValue(bool linear, GridSet gridSet, int* count, double* start, double* step, double* stop, QLineEdit* editCount, QLineEdit* editStart, QLineEdit* editStep, QLineEdit* editStop); CoordSettings* coordSettings; GridMeshSettings* gridSettings; Q3GroupBox* groupX; Q3GroupBox* groupY; QLabel* labelDisableX; QComboBox* comboDisableX; QLabel* labelDisableY; QComboBox* comboDisableY; QLabel* labelCountX; QLineEdit* editCountX; QIntValidator* validatorCountX; QLabel* labelCountY; QLineEdit* editCountY; QIntValidator* validatorCountY; QLabel* labelStartX; QLineEdit* editStartX; QDoubleValidator* validatorStartX; QLabel* labelStartY; QLineEdit* editStartY; QDoubleValidator* validatorStartY; QLabel* labelStopX; QLineEdit* editStopX; QDoubleValidator* validatorStopX; QLabel* labelStopY; QLineEdit* editStopY; QDoubleValidator* validatorStopY; QLabel* labelStepX; QLineEdit* editStepX; QDoubleValidator* validatorStepX; QLabel* labelStepY; QLineEdit* editStepY; QDoubleValidator* validatorStepY; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; }; #endif // GRIDMESHDLG_H engauge-digitizer-5.2/src/gridremoval.cpp000066400000000000000000000613751222557406400206140ustar00rootroot00000000000000/*************************************************************************** gridremoval.cpp - description ------------------- begin : Fri Dec 5 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "gridmesh.h" #include "gridremoval.h" #include "transform.h" #include "main.h" #include "discretize.h" GridRemoval::GridRemoval() { DigitDebug::ctor(QString("gridremoval ") + QString::number((ulong) this, 16)); neuronDict.setAutoDelete(true); searchPatternPlusX.setAutoDelete(true); searchPatternPlusY.setAutoDelete(true); searchPatternMinusX.setAutoDelete(true); searchPatternMinusY.setAutoDelete(true); } GridRemoval::~GridRemoval() { DigitDebug::dtor(QString("gridremoval ") + QString::number((ulong) this, 16)); } bool GridRemoval::colorSettingsChanged(GridRemovalSettings gridSettings, GridRemovalSettings* gridSettingsLatest) { ASSERT_ENGAUGE(gridSettingsLatest != 0); return ((gridSettings.removeColor != gridSettingsLatest->removeColor) || (gridSettings.color != gridSettingsLatest->color) || (gridSettings.foregroundThresholdLow != gridSettingsLatest->foregroundThresholdLow) || (gridSettings.foregroundThresholdHigh != gridSettingsLatest->foregroundThresholdHigh)); } void GridRemoval::connectNeuronsAcrossGaps(char *pixels, int width, int height, double gapSeparation) { int *pixel2Neuron = initializePixel2Neuron(pixels, width, height); neuronDict.clear(); // autoDelete is on for (unsigned int n = 1; n <= neuronDict.count(); n++) neuronDict[n]->connectNeuronAcrossGaps(pixels, pixel2Neuron, neuronDict, width, height, gapSeparation); delete[] pixel2Neuron; } double GridRemoval::distanceToOffPixel(char *pixels, int width, int height, int x, int y, SearchPattern *searchPattern, PixelState pixelThreshold) { // pixels having values of pixelThreshold and higher are considered "on" SearchPatternIterator itr(*searchPattern); SearchPoint* p; while ((p = itr.current()) != 0) { int i = x + p->x(); if ((0 <= i) && (i < width)) { int j = y + p->y(); if ((0 <= j) && (j < height)) { if (pixels [FOLD2DINDEX(i, j, height)] < (int) pixelThreshold) { // reduce by one half since the distance is from the center of the on pixel // to the boundary of the off pixel return p->distance() - 0.5; } } } ++itr; } // return really big number return (double) width; } void GridRemoval::eraseThinPixels(char *pixels, int width, int height, double thinThickness, PixelState pixelThreshold) { // loop through pixels, removing those on thin lines for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { if (pixels [FOLD2DINDEX(x, y, height)] == (int) PixelOn) { double dPlusX = distanceToOffPixel(pixels, width, height, x, y, &searchPatternPlusX, pixelThreshold); double dMinusX = distanceToOffPixel(pixels, width, height, x, y, &searchPatternMinusX, pixelThreshold); if (dMinusX + dPlusX <= thinThickness) { pixels [FOLD2DINDEX(x, y, height)] = pixelThreshold; continue; } else { double dPlusY = distanceToOffPixel(pixels, width, height, x, y, &searchPatternPlusY, pixelThreshold); double dMinusY = distanceToOffPixel(pixels, width, height, x, y, &searchPatternMinusY, pixelThreshold); if (dMinusY + dPlusY <= thinThickness) { pixels [FOLD2DINDEX(x, y, height)] = pixelThreshold; continue; } } } } } int *GridRemoval::initializePixel2Neuron(char *pixels, int width, int height) { // each pixel gets assigned to a neuron. each neuron has its own index int *pixel2Neuron = new int [width * height]; CHECK_PTR_ENGAUGE(pixel2Neuron); int x, y; for (x = 0; x < width; x++) for (y = 0; y < height; y++) pixel2Neuron [FOLD2DINDEX(x, y, height)] = 0; for (x = 0; x < width; x++) for (y = 0; y < height; y++) recursivelySetPixel2Neuron(pixels, pixel2Neuron, width, height, x, y, 0, 0, 0); return pixel2Neuron; } char *GridRemoval::initializePixels(QImage *imageWorking) { // create and initialize an image in memory, which will greatly speed // up pixel reads and writes. using a custom array also allows an // splitting the "on" state into "on and part of gridline" and // "on and not part of gridline" states ASSERT_ENGAUGE(imageWorking != 0); int size = imageWorking->width() * imageWorking->height(); char* image = new char[size]; CHECK_PTR_ENGAUGE(image); for (int x = 0; x < imageWorking->width(); x++) for (int y = 0; y < imageWorking->height(); y++) { QColor pixel(pixelRGB(imageWorking, x, y)); int hue, saturation, value; pixel.hsv(&hue, &saturation, &value); if (value < 127) { image [FOLD2DINDEX(x, y, imageWorking->height())] = PixelOn; } else { image [FOLD2DINDEX(x, y, imageWorking->height())] = PixelOff; } } return image; } void GridRemoval::initializeThin(CoordSettings coord, const Transform *transform, double thinThickness) { // get basic vectors in screen coordinates. each is relative to (0,0) ASSERT_ENGAUGE(transform != 0); transform->xBasisScreen(coord, &xBasisXS, &xBasisYS); transform->yBasisScreen(coord, &yBasisXS, &yBasisYS); // initialize search patterns initializeThinSearch(thinThickness, xBasisXS, yBasisXS, &searchPatternPlusX); initializeThinSearch(thinThickness, xBasisYS, yBasisYS, &searchPatternPlusY); initializeThinSearch(thinThickness, -xBasisXS, yBasisXS, &searchPatternMinusX); initializeThinSearch(thinThickness, xBasisYS, -yBasisYS, &searchPatternMinusY); } void GridRemoval::initializeThinSearch(double thinThickness, double xBasis, double yBasis, SearchPattern *searchPattern) { // simply loop through all pixels that could possibly be closer than // a half pixel from a line through (0,0) and parallel to the basis vector int ijmax = (int) (thinThickness + 0.5) + 1; for (int j = -ijmax; j <= ijmax; j++) for (int i = -ijmax; i <= ijmax; i++) { double x = (double) i; double y = (double) j; // this point must be in same direction as the basis vector. use dot product if (x * xBasis + y * yBasis > 0) { // this point must be within a half pixel of the basis vector if (distancetoline(x, y, 0.0, 0.0, xBasis, yBasis) <= 0.5) { // add new search point SearchPoint *p = new SearchPoint(i, j, sqrt((double) (i * i + j * j))); CHECK_PTR_ENGAUGE(p); searchPattern->append(p); } } } // sort the search points by increasing distance, since we will want to // find the point with the smallest distance first searchPattern->sort(); } GridRemoval::Neuron::Neuron(NeuronDict *neuronDict) { m_index = 1 + neuronDict->count(); // keys are numbered 1,2,... neuronDict->insert(m_index, this); m_synapseDict.setAutoDelete(true); } GridRemoval::Neuron::~Neuron() { } GridRemoval::Synapse *GridRemoval::Neuron::addSynapse() { Synapse *s = new Synapse(&m_synapseDict); CHECK_PTR_ENGAUGE(s); return s; } void GridRemoval::Neuron::connectNeuronAcrossGaps(char *pixels, int *pixel2Neuron, const NeuronDict neuronDict, int width, int height, double gapSeparation) { int searchHalfWidth = (int) (gapSeparation + 0.5); // loop through synapses for (unsigned int i = 1; i <= m_synapseDict.count(); i++) { Synapse *s = m_synapseDict [i]; int x = s->xCenterOfMass(); int y = s->yCenterOfMass(); // look at all pixels within a square centered around this synapse center-of-mass, // but only halfway around, starting straight up and going clockwise) around the // current pixel for other neurons. do not look in a full circle since then // we would end up with two connections for each pair of synapses (one in // either direction) QList neuronsProcessed; // list of neurons that have been processed int xDelta, yDelta; for (xDelta = 0; xDelta <= searchHalfWidth; xDelta++) for (yDelta = -searchHalfWidth; yDelta <= searchHalfWidth; yDelta++) { // look at quadrants 1 and 4, and along +x and -y axes if ((0 < xDelta) || (yDelta < 0)) connectSynapseToSynapsesSource(pixels, pixel2Neuron, neuronDict, width, height, gapSeparation, x, y, x + xDelta, y + yDelta, &neuronsProcessed); } } } void GridRemoval::Neuron::connectSynapseToSynapsesDestination(char *pixels, int height, double gapSeparation, int xSource, int ySource) { // loop through synapses for (unsigned int i = 1; i <= m_synapseDict.count(); i++) { Synapse *s = m_synapseDict [i]; int xDestination = s->xCenterOfMass(); int yDestination = s->yCenterOfMass(); double separation = sqrt((double) ((xDestination - xSource) * (xDestination - xSource) + (yDestination - ySource) * (yDestination - ySource))); if (separation <= gapSeparation) { // draw a line from the source to the destination. we sacrifice efficiency for // simplicity, and do not use the Bresenham line-drawing algorithm (this is // a one-time cost and at most there should be less than a few hundred // pixels drawn in total) int nSteps = 1 + (int) (separation / 0.5); // separation in pixels times 1 step per 0.5 pixels double xDelta = (double) (xDestination - xSource) / (double) nSteps; double yDelta = (double) (yDestination - ySource) / (double) nSteps; double x = xSource + xDelta, y = ySource + yDelta; for (int i = 0; i < nSteps; i++) { // any pixel within a half pixel of (x,y) will be turned on int xLine = (int) x; int yLine = (int) y; if (sqrt((x - xLine) * (x - xLine) + (y - yLine) * (y - yLine)) < 0.5) pixels [FOLD2DINDEX(xLine, yLine, height)] = PixelOn; xLine += 1; if (sqrt((x - xLine) * (x - xLine) + (y - yLine) * (y - yLine)) < 0.5) pixels [FOLD2DINDEX(xLine, yLine, height)] = PixelOn; yLine += 1; if (sqrt((x - xLine) * (x - xLine) + (y - yLine) * (y - yLine)) < 0.5) pixels [FOLD2DINDEX(xLine, yLine, height)] = PixelOn; xLine -= 1; if (sqrt((x - xLine) * (x - xLine) + (y - yLine) * (y - yLine)) < 0.5) pixels [FOLD2DINDEX(xLine, yLine, height)] = PixelOn; x += xDelta; y += yDelta; } } } } void GridRemoval::Neuron::connectSynapseToSynapsesSource(char *pixels, int *pixel2Neuron, const NeuronDict neuronDict, int width, int height, double gapSeparation, int x, int y, int xLook, int yLook, QList *neuronsProcessed) { // this function tries to connect this synapse with center-of-mass at (x,y), // to the synapses of another neuron. the other neuron actually does the // work of making the connections if ((0 <= xLook) && (xLook < width) && (0 <= yLook) && (yLook < height)) { // see if pixel belongs to a neuron, that is not this neuron, // and this synapse has not already been connected to that neuron int n = pixel2Neuron [FOLD2DINDEX(xLook, yLook, height)]; if ((n != 0) && (n != m_index) && (neuronsProcessed->find(n) == neuronsProcessed->end())) { // let the other neuron do the actual connections, since there may be // zero, one or more and it alone knows where its synapses are neuronDict [n]->connectSynapseToSynapsesDestination(pixels, height, gapSeparation, x, y); // update list of process neurons neuronsProcessed->append(n); } } } void GridRemoval::recursivelySetPixel2Neuron(char *pixels, int *pixel2Neuron, int width, int height, int x, int y, Neuron *activeNeuron, Synapse *activeSynapse, int level) { // if this pixel should belong to a neuron, then assign it to the active neuron. // if there is no active neuron (activeNeuron is null), then create one int xDelta, yDelta; // do not set this pixel if it is not on, or if it has already been assigned // to a neuron int i = FOLD2DINDEX(x, y, height); if ((pixels [i] != (int) PixelOn) || (pixel2Neuron [i] != 0)) return; // this pixel needs to be assigned to a neuron if (activeNeuron == 0) { activeNeuron = new Neuron(&neuronDict); CHECK_PTR_ENGAUGE(activeNeuron); } pixel2Neuron [i] = activeNeuron->index(); // does this pixel need to be assigned to a synapse? look at eight // nearest neighbors bool needSynapse = false; for (xDelta = -1; !needSynapse && (xDelta <= 1); xDelta++) for (yDelta = -1; !needSynapse && (yDelta <= 1); yDelta++) if ((xDelta != 0) || (yDelta != 0)) { int xNeighbor = x + xDelta; int yNeighbor = y + yDelta; if ((0 <= xNeighbor) && (xNeighbor < width) && (0 <= yNeighbor) && (yNeighbor < height)) { if ((pixels [FOLD2DINDEX(xNeighbor, yNeighbor, height)] != (int) PixelOff) && (pixels [FOLD2DINDEX(xNeighbor, yNeighbor, height)] != (int) PixelOn)) { needSynapse = true; } } } // assign to synapse, creating a new one if necessary if (needSynapse) { if (activeSynapse == 0) { ASSERT_ENGAUGE(activeNeuron != 0); activeSynapse = activeNeuron->addSynapse(); } activeSynapse->addPixel(x, y); } else activeSynapse = 0; // limit the levels of recursion since Microsoft Windows will run out of stack // space. specifically, the default stack size of one megabyte only handles // 5700 levels of recursion here, and a stack size of two megabytes only // handles 11000 levels of recursion. extreme amounts of recursion happen in // images with extreme numbers of lines if (level < RemovalMaxRecursion) { // also set the eight nearest neighbors for (xDelta = -1; xDelta <= 1; xDelta++) for (yDelta = -1; yDelta <= 1; yDelta++) if ((xDelta != 0) || (yDelta != 0)) { int xNeighbor = x + xDelta; int yNeighbor = y + yDelta; if ((0 <= xNeighbor) && (xNeighbor < width) && (0 <= yNeighbor) && (yNeighbor < height)) { recursivelySetPixel2Neuron(pixels, pixel2Neuron, width, height, xNeighbor, yNeighbor, activeNeuron, activeSynapse, level + 1); } } } } void GridRemoval::removeAndConnect(QImage *imageWorking, const Transform *transform, CoordSettings coordSettings, GridRemovalSettings gridSettings, QRgb backgroundColor) { // save the most recent settings static GridRemovalSettings gridSettingsLatest; gridSettingsLatest = gridSettings; // abort all calls to this function except the most recent, which last defined gridSettingsLatest qApp->processEvents(); if (colorSettingsChanged(gridSettings, &gridSettingsLatest)) return; int width = imageWorking->width(); int height = imageWorking->height(); char *pixels = initializePixels(imageWorking); if (!colorSettingsChanged(gridSettings, &gridSettingsLatest)) if (gridSettings.removeColor) removeColor(imageWorking, pixels, width, height, gridSettings, &gridSettingsLatest, PixelOnRemovedStage1); if (!colorSettingsChanged(gridSettings, &gridSettingsLatest)) if ((gridSettings.removeGridlines) && (gridSettings.gridDistance > 0.0)) removeGridlines(pixels, width, height, transform, coordSettings, gridSettings, PixelOnRemovedStage2); if (!colorSettingsChanged(gridSettings, &gridSettingsLatest)) if ((gridSettings.removeThinLines) && (gridSettings.thinThickness > 0.0)) removeThinLines(pixels, width, height, coordSettings, transform, gridSettings.thinThickness, PixelOnRemovedStage3, PixelOnRemovedStage4); if (!colorSettingsChanged(gridSettings, &gridSettingsLatest)) if (gridSettings.gapSeparation > 0.0) connectNeuronsAcrossGaps(pixels, width, height, gridSettings.gapSeparation); if (!colorSettingsChanged(gridSettings, &gridSettingsLatest)) savePixels(pixels, width, height, imageWorking, backgroundColor); delete[] pixels; } void GridRemoval::removeColor(QImage *imageWorking, char *pixels, int width, int height, GridRemovalSettings gridSettings, GridRemovalSettings* gridSettingsLatest, PixelState pixelStateRemoved) { int rBg, gBg, bBg; gridSettings.color.rgb(&rBg, &gBg, &bBg); ASSERT_ENGAUGE(imageWorking != 0); Discretize discretize; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { int value = discretize.discretizeValueForeground(imageWorking, x, y, DiscretizeForeground, rBg, gBg, bBg); if (!discretize.pixelIsOn(value, gridSettings)) pixels [FOLD2DINDEX(x, y, height)] = pixelStateRemoved; } // abort all calls to this function except the most recent, which last defined gridSettingsLatest qApp->processEvents(); if (colorSettingsChanged(gridSettings, gridSettingsLatest)) break; } } void GridRemoval::removeGridlines(char *pixels, int width, int height, const Transform *transform, CoordSettings coordSettings, GridRemovalSettings gridSettings, PixelState pixelStateRemoved) { ASSERT_ENGAUGE(transform != 0); if (transform->validAxes()) { // get removal gridlines GridMesh gridMesh; GridlinesScreen gridlines; gridlines = gridMesh.makeGridLines(transform, coordSettings, gridSettings.gridMesh); GridlinesScreen::iterator itr; for (itr = gridlines.begin(); itr != gridlines.end(); ++itr) { int xStart = (*itr).start.x(); int yStart = (*itr).start.y(); int xStop = (*itr).stop.x(); int yStop = (*itr).stop.y(); if (dabs(xStop - xStart) < dabs(yStop - yStart)) removeGridlineVertical(pixels, width, height, xStart, yStart, xStop, yStop, gridSettings, pixelStateRemoved); else removeGridlineHorizontal(pixels, width, height, xStart, yStart, xStop, yStop, gridSettings, pixelStateRemoved); } } } void GridRemoval::removeGridlineHorizontal(char *pixels, int width, int height, int xStart, int yStart, int xStop, int yStop, GridRemovalSettings gridSettings, PixelState pixelStateRemoved) { // theta is the angle between the vertical column and the gridline. since we // divide by sinTheta, this function should NOT be used for vertical gridlines // since divide-by-zero error would occur if (xStart > xStop) { int temp = xStart; xStart = xStop; xStop = temp; temp = yStart; yStart = yStop; yStop = temp; } double sinTheta = sin(datan2safe(xStop - xStart, yStop - yStart)); // NOT datan2safe(dy,dx)! for (int x = (int) (xStart - gridSettings.gridDistance + 0.5); x < (int) (xStop + gridSettings.gridDistance + 0.5); x++) { // interest this pixel column (x=xc) with the gridline (x-x0)/(x1-x0)=(y-y0)/(y1-y0) // to get (xp,yp) double sLine1, sLine2; ASSERT_ENGAUGE(pixels != 0); if (intersecttwolines(x, 0.0, x, height, xStart, yStart, xStop, yStop, &sLine1, &sLine2)) { double yp = (1.0 - sLine2) * yStart + sLine2 * yStop; int yLow = (int) (-gridSettings.gridDistance / sinTheta + yp + 0.5); int yHigh = (int) (gridSettings.gridDistance / sinTheta + yp + 0.5); for (int y = yLow; y <= yHigh; y++) { bool include = true; if (sLine2 < 0.0) { // at start end, the pixels have to be on the same side of (xStart,yStart) as // (xStop,yStop), so use dot product to see if this pixel is on the same side double dotProduct = (x - xStart) * (xStop - xStart) + (y - yStart) * (yStop - yStart); include = (dotProduct >= 0.0); } else if (sLine2 > 1.0) { // at stop end, the pixels have to be on the same side of (xStop,yStop) as // (xStart,yStart), so use dot product to see if this pixel is on the same side double dotProduct = (x - xStop) * (xStart - xStop) + (y - yStop) * (yStart - yStop); include = (dotProduct >= 0.0); } if (include && (0 <= x) && (x < width) && (0 <= y) && (y < height)) { // overwrite this pixel with background color pixels [FOLD2DINDEX(x, y, height)] = pixelStateRemoved; } } } } } void GridRemoval::removeGridlineVertical(char *pixels, int width, int height, int xStart, int yStart, int xStop, int yStop, GridRemovalSettings gridSettings, PixelState pixelStateRemoved) { // theta is the angle between the horizontal row and the gridline. since we // divide by sinTheta, this function should NOT be used for horizontal gridlines // since divide-by-zero error would occur if (yStart > yStop) { int temp = yStart; yStart = yStop; yStop = temp; temp = xStart; xStart = xStop; xStop = temp; } double sinTheta = sin(datan2safe(yStop - yStart, xStop - xStart)); for (int y = (int) (yStart - gridSettings.gridDistance + 0.5); y < (int) (yStop + gridSettings.gridDistance + 0.5); y++) { // interest this pixel row (y=yc) with the gridline (x-x0)/(x1-x0)=(y-y0)/(y1-y0) // to get (xp,yp) double sLine1, sLine2; ASSERT_ENGAUGE(pixels != 0); if (intersecttwolines(0.0, y, width, y, xStart, yStart, xStop, yStop, &sLine1, &sLine2)) { double xp = (1.0 - sLine2) * xStart + sLine2 * xStop; int xLow = (int) (-gridSettings.gridDistance / sinTheta + xp + 0.5); int xHigh = (int) (gridSettings.gridDistance / sinTheta + xp + 0.5); for (int x = xLow; x <= xHigh; x++) { bool include = true; if (sLine2 < 0.0) { // at start end, the pixels have to be on the same side of (xStart,yStart) as // (xStop,yStop), so use dot product to see if this pixel is on the same side double dotProduct = (x - xStart) * (xStop - xStart) + (y - yStart) * (yStop - yStart); include = (dotProduct >= 0.0); } else if (sLine2 > 1.0) { // at stop end, the pixels have to be on the same side of (xStop,yStop) as // (xStart,yStart), so use dot product to see if this pixel is on the same side double dotProduct = (x - xStop) * (xStart - xStop) + (y - yStop) * (yStart - yStop); include = (dotProduct >= 0.0); } if (include && (0 <= x) && (x < width) && (0 <= y) && (y < height)) { // overwrite this pixel with background color pixels [FOLD2DINDEX(x, y, height)] = pixelStateRemoved; } } } } } void GridRemoval::removeThinLines(char *pixels, int width, int height, CoordSettings coord, const Transform *transform, double thinThickness, PixelState pixelStateRemovedPass1, PixelState pixelStateRemovedPass2) { ASSERT_ENGAUGE(transform != 0); if (transform->validAxes()) { initializeThin(coord, transform, thinThickness); // first pass erases the grid lines, except for the junctions eraseThinPixels(pixels, width, height, thinThickness, pixelStateRemovedPass1); // second pass erases the grid line junctions, which are little islands of on-pixels eraseThinPixels(pixels, width, height, thinThickness, pixelStateRemovedPass2); } } void GridRemoval::savePixels(char *pixels, int width, int height, QImage *imageWorking, QRgb backgroundColor) { for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { PixelState state = (PixelState) pixels [FOLD2DINDEX(x, y, height)]; if ((state != PixelOff) && (state != PixelOn)) setPixelRGB(imageWorking, x, y, backgroundColor); } } GridRemoval::Synapse::Synapse(SynapseDict *synapseDict) : m_countPixels(0), m_xSum(0), m_ySum(0) { m_index = 1 + synapseDict->count(); // keys are numbered 1,2,... synapseDict->insert(m_index, this); } GridRemoval::Synapse::~Synapse() { } void GridRemoval::Synapse::addPixel(int x, int y) { ++m_countPixels; m_xSum += x; m_ySum += y; } int GridRemoval::Synapse::xCenterOfMass() { if (m_countPixels < 1) return 0; else return (int) (m_xSum / (double) m_countPixels + 0.5); } int GridRemoval::Synapse::yCenterOfMass() { if (m_countPixels < 1) return 0; else return (int) (m_ySum / (double) m_countPixels + 0.5); } engauge-digitizer-5.2/src/gridremoval.h000066400000000000000000000230271222557406400202510ustar00rootroot00000000000000/*************************************************************************** gridremoval.h - description ------------------- begin : Fri Dec 5 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GRIDREMOVAL_H #define GRIDREMOVAL_H #include #include #include #include #include //Added by qt3to4: #include #include #include "digitdef.h" #include "digitdebug.h" class Transform; // this class removes gridlines from an image using a combination of // approaches. the following goals were kept in mind during development: // (1) algorithms had to actually remove gridlines // (2) algorithms had to be computationally efficient // (3) algorithms had to be simple enough to be quickly understood // unfortunately, compiler quirks forced the Synapse, SynapseDict, Neuron and NeuronDict // classes to be public rather than private as they should be for encapsulation class GridRemoval { public: GridRemoval(); ~GridRemoval(); // remove gridlines and then tidy up afterwards by reconnecting across gaps. // this function takes a fifth of a second to complete, // so it is reentrant with new calls aborting previous calls (since gridremovaldlg calls // this once per mouse move event so the program bogs down) void removeAndConnect(QImage *imageWorking, const Transform *transform, CoordSettings coordSettings, GridRemovalSettings gridSettings, QRgb backgroundColor); // each stage N considers pixels with state below PixelOnRemovedN to be off, otherwise on enum PixelState { PixelOff = 0, PixelOnRemovedStage1, PixelOnRemovedStage2, PixelOnRemovedStage3, PixelOnRemovedStage4, PixelOn }; class Synapse; typedef Q3IntDict SynapseDict; // a synapse is a complete set of adjacent on-pixels where each is adjacent to at // least one removed-pixel. the pixels of a synapse are a subset of the pixels in // a neuron. a neuron can have zero, one or more synapses. each synapse has a // center-of-mass, which is the arithmetic average of the (x,y) coordinates of all // the component pixels. // this class should be private but Microsoft compiler will choke if it is class Synapse { public: Synapse(SynapseDict *synapseDict); ~Synapse(); void addPixel(int x, int y); long index() { return m_index; } int xCenterOfMass(); int yCenterOfMass(); private: long m_index; int m_countPixels; int m_xSum; int m_ySum; }; class Neuron; typedef Q3IntDict NeuronDict; // a neuron is a complete set of adjacent on-pixels. each neuron is identified by // its index in the neuron list. each neuron has zero or more synapses class Neuron { public: Neuron(NeuronDict *neuronDict); ~Neuron(); Synapse *addSynapse(); void connectNeuronAcrossGaps(char *pixels, int *pixel2Neuron, const NeuronDict neuronDict, int width, int height, double gapSeparation); long index() { return m_index; } private: long m_index; SynapseDict m_synapseDict; void connectSynapseToSynapsesDestination(char *pixels, int height, double gapSeparation, int xSource, int ySource); void connectSynapseToSynapsesSource(char *pixels, int *pixel2Neuron, const NeuronDict neuronDict, int width, int height, double gapSeparation, int x, int y, int xLook, int yLook, QList *neuronsProcessed); }; // a "search point" is a pixel along one of the axis directions // (+x,-x,+y,-y) that is to be checked. the search pattern is composed // of search points along those four directions. search points and // search patterns are used for thin gridline removal class SearchPoint { public: SearchPoint(int x, int y, double distance) { m_point.setX(x); m_point.setY(y); m_distance = distance; } ~SearchPoint() {}; int x() { return m_point.x(); } int y() { return m_point.y(); } double distance() { return m_distance; } private: // (x,y) screen coordinates of this search pattern point, relative to // pixel under consideration QPoint m_point; // distance from pixel under consideration. positive if parallel to axis, // and negative if antiparallel double m_distance; }; private: // pointer list that also sorts SearchPoint objects by distance template class SearchPointPtrList: public Q3PtrList { protected: virtual int compareItems(Q3PtrCollection::Item item1, Q3PtrCollection::Item item2) { SearchPoint* p1 = (SearchPoint*) item1; SearchPoint* p2 = (SearchPoint*) item2; if (p1->distance() < p2->distance()) return -1; else if (p1->distance() > p2->distance()) return 1; else return 0; } }; // the point lists are pointer lists (versus value lists) so they can be sorted. // a search pattern is a sorted list of search points, which is an efficient // way of ignoring unimportant points, and efficiently scanning the important points typedef SearchPointPtrList SearchPattern; typedef Q3PtrListIterator SearchPatternIterator; NeuronDict neuronDict; // true if any color settings changed bool colorSettingsChanged(GridRemovalSettings gridSettings, GridRemovalSettings* gridSettingsLatest); // start gridline removal and gap connection by copying image into pixel array char *initializePixels(QImage *imageWorking); // main gridline removal functions void removeColor(QImage *imageWorking, char *pixels, int width, int height, GridRemovalSettings gridSettings, GridRemovalSettings* gridSettingsLatest, PixelState pixelStateRemoved); void removeGridlines(char *pixels, int width, int height, const Transform *transform, CoordSettings coordSettings, GridRemovalSettings gridSettings, PixelState pixelStateRemoved); void removeThinLines(char *pixels, int width, int height, CoordSettings coord, const Transform *transform, double thinThickness, PixelState pixelStateRemovedPass1, PixelState pixelStateRemovedPass2); // finish gridline removal and gap connection by saving pixel choices into working image void savePixels(char *pixels, int width, int height, QImage *imageWorking, QRgb backgroundColor); // gridline removal functions void removeGridlineHorizontal(char *pixels, int width, int height, int xStart, int yStart, int xStop, int yStop, GridRemovalSettings gridSettings, PixelState pixelStateRemoved); void removeGridlineVertical(char *pixels, int width, int height, int xStart, int yStart, int xStop, int yStop, GridRemovalSettings gridSettings, PixelState pixelStateRemoved); // thin gridline removal functions double distanceToOffPixel(char *pixels, int width, int height, int x, int y, SearchPattern *searchPattern, PixelState pixelThreshold); void initializeThin(CoordSettings coord, const Transform *transform, double thinThickness); void initializeThinSearch(double thinThickness, double xBasis, double yBasis, SearchPattern *searchPattern); void eraseThinPixels(char *pixels, int width, int height, double thinThickness, PixelState pixelThreshold); // thin gridline removal variables double xBasisXS, xBasisYS, yBasisXS, yBasisYS; // basis vectors in screen coordinates SearchPattern searchPatternPlusX; // search pattern in +x direction SearchPattern searchPatternPlusY; // search pattern in +y direction SearchPattern searchPatternMinusX; // search pattern in -x direction SearchPattern searchPatternMinusY; // search pattern in -y direction // gaps smaller than epsilon are connected using a "neuron-synapse" // metaphor. a neuron is defined as a group of connected on-pixels. a // synapse is a group of connect on-pixels, within a neuron and also // touching pixels that were removed by gridline removal functions. // synapses within the epsilon distance are connected by a line from // the center-of-mass of the first synapse to the center-of-mass of // the second line void connectNeuronsAcrossGaps(char *pixels, int width, int height, double gapSeparation); int *initializePixel2Neuron(char *pixels, int width, int height); void recursivelySetPixel2Neuron(char *pixels, int *pixel2Neuron, int width, int height, int x, int y, Neuron *activeNeuron, Synapse *activeSynapse, int level); }; #endif // GRIDREMOVAL_H engauge-digitizer-5.2/src/gridremovaldlg.cpp000066400000000000000000000356611222557406400213020ustar00rootroot00000000000000/*************************************************************************** gridremovaldlg.cpp - description ------------------- begin : Fri Dec 5 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //Added by qt3to4: #include #include #include #include #include "digitdoc.h" #include "digitview.h" #include "gridmesh.h" #include "gridmeshdlg.h" #include "gridremoval.h" #include "gridremovaldlg.h" #include "digitdebug.h" #include "main.h" #include "img/whatsthis.xpm" #include "img/eyedropperonmap.xpm" #include "img/eyedropperonmask.xpm" #include "transform.h" #include "discretize.h" GridRemovalDlg::GridRemovalDlg(QString title, const QImage* imageOriginal, const Transform* transform, CoordSettings* coordSettings, GridRemovalSettings* gridSettings) : QDialog(0, "gridremovaldlg", true), title(title), imageOriginal(imageOriginal), transform(transform), coordSettings(coordSettings), gridSettings(gridSettings) { DigitDebug::ctor(QString("gridremovaldlg ") + QString::number((ulong) this, 16)); setCaption(tr("Grid Removal - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(430, 620); // color checkColor = new QCheckBox(this); CHECK_PTR_ENGAUGE(checkColor); checkColor->setGeometry(10, 17, 15, 15); checkColor->setChecked(gridSettings->removeColor); QWhatsThis::add(checkColor, QString(tr("Check this box to remove all pixels whose color " "is close to the selected color.\n\n" "When this option is enabled, the selected color is displayed on the left end of the " "histogram scale. To change the selected color, click on a pixel in the preview widow below.\n\n" "This option is only useful if the gridlines in the original image are a different color " "than the curve lines"))); connect(checkColor, SIGNAL(toggled(bool)), this, SLOT(slotColorToggled(bool))); labelColorMain = new QLabel(QString(tr("Remove pixels of a particular color")), this); CHECK_PTR_ENGAUGE(labelColorMain); labelColorMain->setGeometry(30, 10, 360, 30); labelColor = new QLabel(QString(tr("Color:")), this); CHECK_PTR_ENGAUGE(labelColor); labelColor->setGeometry(30, 50, 270, 30); // color chooser area colorChooser = new ColorChooser(this, imageOriginal, 205, 50, gridSettings->color.rgb(), false); CHECK_PTR_ENGAUGE(colorChooser); connect(colorChooser, SIGNAL(limitChange(bool, int)), this, SLOT(slotLimitChange(bool, int))); // gridline mesh checkGrid = new QCheckBox(this); CHECK_PTR_ENGAUGE(checkGrid); checkGrid->setGeometry(10, 137, 15, 15); checkGrid->setChecked(gridSettings->removeGridlines); if (!transform->validAxes()) checkGrid->setEnabled(false); // do not get users hopes up - gridline approach requires transform QWhatsThis::add(checkGrid, QString(tr("Check this box to have pixels close to regularly spaced gridlines removed.\n\n" "This option is only available when the axis points have all been defined.\n\n" "The gridline values are defined here, by clicking on the Gridlines... button"))); connect(checkGrid, SIGNAL(toggled(bool)), this, SLOT(slotGridToggled(bool))); labelGridMain = new QLabel(QString(tr("Remove pixels close to regularly spaced gridlines")), this); CHECK_PTR_ENGAUGE(labelGridMain); labelGridMain->setGeometry(30, 130, 360, 30); labelGridMesh = new QLabel(QString(tr("Removal gridlines:")), this); CHECK_PTR_ENGAUGE(labelGridMesh); labelGridMesh->setGeometry(30, 170, 230, 30); buttonGridMesh = new QPushButton(tr("Gridlines..."), this); CHECK_PTR_ENGAUGE(buttonGridMesh); buttonGridMesh->setGeometry(270, 170, 150, 30); connect(buttonGridMesh, SIGNAL(clicked()), this, SLOT(slotGridlines())); labelGridDistance = new QLabel(QString(tr("Close distance (pixels):")), this); CHECK_PTR_ENGAUGE(labelGridDistance); labelGridDistance->setGeometry(30, 210, 230, 30); editGridDistance = new QLineEdit(this); CHECK_PTR_ENGAUGE(editGridDistance); editGridDistance->setGeometry(270, 210, 150, 30); editGridDistance->setText(QString("%1").arg(gridSettings->gridDistance, 0, 'f', 1)); // make sure users see decimal point QWhatsThis::add(editGridDistance, QString(tr("Set closeness distance in pixels.\n\n" "Pixels that are closer to the regularly spaced gridlines, than this distance, " "will be removed.\n\n" "This value cannot be negative. A zero value disables this feature. Decimal values are allowed"))); validatorGridDistance = new QDoubleValidator(editGridDistance); CHECK_PTR_ENGAUGE(validatorGridDistance); validatorGridDistance->setBottom(0.0); editGridDistance->setValidator(validatorGridDistance); connect(editGridDistance, SIGNAL(textChanged(const QString &)), this, SLOT(slotGridDistance(const QString &))); // thin lines checkThin = new QCheckBox(this); CHECK_PTR_ENGAUGE(checkThin); checkThin->setGeometry(10, 257, 15, 15); ASSERT_ENGAUGE(gridSettings != 0); checkThin->setChecked(gridSettings->removeThinLines); if (!transform->validAxes()) checkThin->setEnabled(false); // do not get users hopes up - thin line approach requires transform QWhatsThis::add(checkThin, QString(tr("Check this box to remove thin lines that are parallel to the axes.\n\n" "This option is only available when the axis points have all been defined.\n\n" "This option works especially well if the gridlines in the original image are thinner " "than the curve lines"))); connect(checkThin, SIGNAL(toggled(bool)), this, SLOT(slotThinToggled(bool))); labelThinMain = new QLabel(QString(tr("Remove thin lines parallel to the axes")), this); CHECK_PTR_ENGAUGE(labelThinMain); labelThinMain->setGeometry(30, 250, 360, 30); labelThinThickness = new QLabel(QString(tr("Minimum line thickness (pixels):")), this); CHECK_PTR_ENGAUGE(labelThinThickness); labelThinThickness->setGeometry(30, 290, 230, 30); editThinThickness = new QLineEdit(this); CHECK_PTR_ENGAUGE(editThinThickness); editThinThickness->setGeometry(270, 290, 150, 30); editThinThickness->setText(QString("%1").arg(gridSettings->thinThickness, 0, 'f', 1)); // make sure users see decimal point QWhatsThis::add(editThinThickness, QString(tr("Select minimum thickness for lines, in pixels.\n\n" "Pixels will be removed wherever lines are thinner than this value.\n\n" "This value cannot be negative. A zero value disables this feature. Decimal values are allowed"))); validatorThinThickness = new QDoubleValidator(editThinThickness); CHECK_PTR_ENGAUGE(validatorThinThickness); validatorThinThickness->setBottom(0.0); editThinThickness->setValidator(validatorThinThickness); connect(editThinThickness, SIGNAL(textChanged(const QString &)), this, SLOT(slotThinThickness(const QString &))); // gap labelGap = new QLabel(QString(tr("Maximum gap to connect (pixels):")), this); CHECK_PTR_ENGAUGE(labelGap); labelGap->setGeometry(10, 340, 270, 30); editGap = new QLineEdit(this); CHECK_PTR_ENGAUGE(editGap); editGap->setGeometry(270, 340, 150, 30); editGap->setText(QString("%1").arg(gridSettings->gapSeparation, 0, 'f', 1)); // make sure users see decimal point QWhatsThis::add(editGap, QString(tr("Set maximum gap separation in pixels.\n\n" "Lines whose endpoints are separated by less than this distance, will be connected.\n\n" "This value cannot be negative. A zero value disables this feature. Decimal values are allowed"))); validatorGap = new QDoubleValidator(editGap); CHECK_PTR_ENGAUGE(validatorGap); validatorGap->setBottom(0.0); editGap->setValidator(validatorGap); connect(editGap, SIGNAL(textChanged(const QString &)), this, SLOT(slotGap(const QString &))); // preview area labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(30, 390, 100, 30); previewCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(previewCanvas); previewCanvas->resize(imageOriginal->width(), imageOriginal->height()); previewCanvasView = new ClickablePreview(previewCanvas, this); CHECK_PTR_ENGAUGE(previewCanvasView); previewCanvasView->setGeometry(30, 420, 370, 150); QWhatsThis::add(previewCanvasView, QString(tr( "Preview window shows how current settings affect the gridlines.\n\n" "To change the selected color for the Remove By Color option, select that option and then " "click on a pixel in the preview window with the eyedropper"))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(100, 580, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(230, 580, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(360, 580, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); loadEyedropper(); loadWorkingImageAndIsolateBackground(); enableColorChooser(gridSettings->removeColor); toggleActions(); } GridRemovalDlg::~GridRemovalDlg() { DigitDebug::dtor(QString("gridremovaldlg ") + QString::number((ulong) this, 16)); } void GridRemovalDlg::enableColorChooser(bool enable) { ASSERT_ENGAUGE(colorChooser != 0); colorChooser->setDiscretizeMethod(enable ? DiscretizeForeground : DiscretizeNone, gridSettings->foregroundThresholdLow, gridSettings->foregroundThresholdHigh); } void GridRemovalDlg::loadEyedropper() { // load cursor images QPixmap pixmap(eyedropperonmap_xpm); QPixmap pixmask(eyedropperonmask_xpm); QBitmap bitmap; QBitmap bitmask; bitmap = pixmap.convertToImage().convertDepth(1, Qt::ThresholdDither); bitmask = pixmask.convertToImage().convertDepth(1, Qt::ThresholdDither); m_cursorEyedropper = new QCursor(bitmap, bitmask, EyedropperHotX, EyedropperHotY); CHECK_PTR_ENGAUGE(m_cursorEyedropper); } void GridRemovalDlg::loadWorkingImage() { ASSERT_ENGAUGE(previewCanvas != 0); m_imageWorking = imageOriginal->copy(); // deep copy needed m_gridRemoval.removeAndConnect(&m_imageWorking, transform, *coordSettings, *gridSettings, m_backgroundColor.rgb()); QPixmap pixmapWorking; pixmapWorking.convertFromImage(m_imageWorking, Qt::ThresholdDither); previewCanvas->setBackgroundPixmap(pixmapWorking); } void GridRemovalDlg::loadWorkingImageAndIsolateBackground() { loadWorkingImage(); Discretize discretize; m_backgroundColor = discretize.backgroundColor(&m_imageWorking); } void GridRemovalDlg::setColor(QPoint p) { if (checkColor->isChecked()) { if ((p.x() < m_imageWorking.width()) || (p.y() < m_imageWorking.height())) { // save color under cursor ASSERT_ENGAUGE(gridSettings != 0); gridSettings->color.setRgb(pixelRGB(&m_imageWorking, p.x(), p.y())); colorChooser->changeBackgroundColor(imageOriginal, gridSettings->color.rgb()); toggleActions(); } } } void GridRemovalDlg::toggleActions() { // a checkbox may be disabled but checked because there is no valid axis // transformation currently, but before there was and the user // selected that checkbox at that point ASSERT_ENGAUGE(checkThin != 0); ASSERT_ENGAUGE(checkGrid != 0); ASSERT_ENGAUGE(checkColor != 0); bool enableThin = checkThin->isChecked() && checkThin->isEnabled(); bool enableGrid = checkGrid->isChecked() && checkGrid->isEnabled(); bool enableColor = checkColor->isChecked() && checkColor->isEnabled(); // controls controlled by checkColor if (enableColor) previewCanvasView->setCursor(*m_cursorEyedropper); else previewCanvasView->unsetCursor(); // controls controlled by checkThin ASSERT_ENGAUGE(editThinThickness != 0); editThinThickness->setEnabled(enableThin); // controls controlled by checkGrid ASSERT_ENGAUGE(editGridDistance != 0); editGridDistance->setEnabled(enableGrid); ASSERT_ENGAUGE(buttonGridMesh != 0); buttonGridMesh->setEnabled(enableGrid); // update working image with current settings loadWorkingImage(); } GridRemovalDlg::ClickablePreview::ClickablePreview(Q3Canvas* canvas, GridRemovalDlg* dlg) : Q3CanvasView(canvas, dlg), dlg(dlg) { } void GridRemovalDlg::ClickablePreview::contentsMousePressEvent(QMouseEvent* e) { ASSERT_ENGAUGE(dlg != 0); dlg->setColor(e->pos()); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void GridRemovalDlg::slotLimitChange(bool lower, int limit) { if (lower) gridSettings->foregroundThresholdLow = limit; else gridSettings->foregroundThresholdHigh = limit; toggleActions(); } void GridRemovalDlg::slotColorToggled(bool on) { gridSettings->removeColor = on; enableColorChooser(on); toggleActions(); } void GridRemovalDlg::slotGap(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->gapSeparation = 0.0; else gridSettings->gapSeparation = text.toDouble(); toggleActions(); } void GridRemovalDlg::slotGridlines() { GridMeshSettings grid = gridSettings->gridMesh; GridMeshDlg* dlg = new GridMeshDlg(QString(tr("Removal")), title, coordSettings, &grid); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) gridSettings->gridMesh = grid; delete dlg; toggleActions(); } void GridRemovalDlg::slotGridToggled(bool on) { gridSettings->removeGridlines = on; toggleActions(); } void GridRemovalDlg::slotGridDistance(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->gridDistance = 0.0; else gridSettings->gridDistance = text.toDouble(); toggleActions(); } void GridRemovalDlg::slotThinThickness(const QString &text) { ASSERT_ENGAUGE(gridSettings != 0); if (text == QString("")) gridSettings->thinThickness = 0.0; else gridSettings->thinThickness = text.toDouble(); toggleActions(); } void GridRemovalDlg::slotThinToggled(bool on) { gridSettings->removeThinLines = on; toggleActions(); } void GridRemovalDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/gridremovaldlg.h000066400000000000000000000106351222557406400207410ustar00rootroot00000000000000/*************************************************************************** gridremovaldlg.h - description ------------------- begin : Fri Dec 5 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef GRIDREMOVALDLG_H #define GRIDREMOVALDLG_H #include #include #include #include #include #include #include #include #include //Added by qt3to4: #include #include "digitdef.h" #include "gridremoval.h" #include "colorchooser.h" class DigitDoc; class Transform; // this dialog box class edits the document's grid removal information, and // returns an image consisting of the original image with gridline pixels // removed (for later use by Segments) class GridRemovalDlg : public QDialog { Q_OBJECT public: GridRemovalDlg(QString title, const QImage* imageOriginal, const Transform* transform, CoordSettings* coordSettings, GridRemovalSettings* gridSettings); ~GridRemovalDlg(); // set color to the color of the pixel selected with the eyedropper void setColor(QPoint p); public slots: void slotLimitChange(bool lower, int limit); void slotColorToggled(bool); void slotGap(const QString &); void slotGridlines(); void slotGridToggled(bool); void slotGridDistance(const QString &); void slotThinThickness(const QString &); void slotThinToggled(bool); void slotWhat(void); private: // enable or disable color chooser void enableColorChooser(bool enable); // enable or disable buttons as appropriate void toggleActions(void); // load eyedropper override cursor void loadEyedropper(void); // convert original image into pixel-addressable QImage void loadWorkingImage(void); void loadWorkingImageAndIsolateBackground(void); QString title; const QImage* imageOriginal; const Transform* transform; CoordSettings* coordSettings; GridRemovalSettings* gridSettings; // color QCheckBox* checkColor; QLabel* labelColorMain; QLabel* labelColor; ColorChooser* colorChooser; // gridlines QCheckBox* checkGrid; QLabel* labelGridMain; QLabel* labelGridMesh; QPushButton* buttonGridMesh; QLabel* labelGridDistance; QLineEdit* editGridDistance; QDoubleValidator* validatorGridDistance; // thin lines QCheckBox* checkThin; QLabel* labelThinMain; QLabel* labelThinThickness; QLineEdit* editThinThickness; QDoubleValidator* validatorThinThickness; // gap QLabel* labelGap; QLineEdit* editGap; QDoubleValidator* validatorGap; class ClickablePreview : public Q3CanvasView { public: ClickablePreview(Q3Canvas* canvas, GridRemovalDlg* dlg); void contentsMousePressEvent(QMouseEvent* e); private: GridRemovalDlg* dlg; }; // widgets for previewing the gridline removal results QLabel* labelPreview; Q3Canvas* previewCanvas; ClickablePreview* previewCanvasView; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; // background color is automatically isolated out of original image QColor m_backgroundColor; // color eyedropper QCursor* m_cursorEyedropper; // store pixel-addressable QImage QImage m_imageWorking; // removeAndConnect function of GridRemoval object takes a fifth of a second to complete, // so that function is reentrant with new calls aborting previous calls GridRemoval m_gridRemoval; }; #endif // GRIDREMOVALDLG_H engauge-digitizer-5.2/src/helpwindow.cpp000066400000000000000000000242721222557406400204540ustar00rootroot00000000000000/**************************************************************************** ** $Id: helpwindow.cpp,v 1.4 2006/10/08 06:41:49 markmitch Exp $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include #include "img/helpback.xpm" #include "img/helpforward.xpm" #include "img/helphome.xpm" #include "helpwindow.h" #include "main.h" #include "digitdebug.h" #include "defaultsettings.h" HelpWindow::HelpWindow( const QString& home_, const QString& _path, QWidget* parent, const char *name) : Q3MainWindow( parent, name, Qt::WDestructiveClose ), pathCombo( 0 ), selectedURL() { DigitDebug::ctor(QString("helpwindow " + QString::number((ulong) this, 16))); readHistory(); readBookmarks(); browser = new Q3TextBrowser( this ); CHECK_PTR_ENGAUGE(browser); browser->mimeSourceFactory()->setFilePath( _path ); browser->setFrameStyle( Q3Frame::Panel | Q3Frame::Sunken ); connect( browser, SIGNAL( textChanged() ), this, SLOT( textChanged() ) ); setCentralWidget( browser ); if ( !home_.isEmpty() ) browser->setSource( home_ ); connect( browser, SIGNAL( highlighted( const QString&) ), statusBar(), SLOT( message( const QString&)) ); // display help window in previous position with same size DefaultSettings& rSettings = DefaultSettings::instance(); move(rSettings.getWindowHelpPosition()); resize(rSettings.getWindowHelpSize()); QMenu* file = new QMenu( this ); CHECK_PTR_ENGAUGE(file); file->insertItem( tr("&Open File"), this, SLOT( openFile() ), Qt::CTRL+Qt::Key_O ); file->insertItem( tr("&Print"), this, SLOT( print() ), Qt::CTRL+Qt::Key_P ); file->insertSeparator(); file->insertItem( tr("&Close"), this, SLOT( close() ), Qt::CTRL+Qt::Key_Q ); //file->insertItem( tr("E&xit"), qApp, SLOT( closeAllWindows() ), Qt::CTRL+Qt::Key_X ); // The same three icons are used twice each. QPixmap helpback (helpback_xpm); QPixmap helpforward (helpforward_xpm); QPixmap helphome (helphome_xpm); QIcon icon_back (helpback); QIcon icon_forward (helpforward); QIcon icon_home (helphome); QMenu* go = new QMenu( this ); CHECK_PTR_ENGAUGE(go); backwardId = go->insertItem( icon_back, tr("&Backward"), browser, SLOT( backward() ), Qt::CTRL+Qt::Key_Left ); forwardId = go->insertItem( icon_forward, tr("&Forward"), browser, SLOT( forward() ), Qt::CTRL+Qt::Key_Right ); go->insertItem( icon_home, tr("&Home"), browser, SLOT( home() ) ); hist = new QMenu( this ); CHECK_PTR_ENGAUGE(hist); QStringList::Iterator it = history.begin(); for ( ; it != history.end(); ++it ) mHistory[ hist->insertItem( *it ) ] = *it; connect( hist, SIGNAL( activated( int ) ), this, SLOT( histChosen( int ) ) ); bookm = new QMenu( this ); CHECK_PTR_ENGAUGE(bookm); bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) ); bookm->insertSeparator(); QStringList::Iterator it2 = bookmarks.begin(); for ( ; it2 != bookmarks.end(); ++it2 ) mBookmarks[ bookm->insertItem( *it2 ) ] = *it2; connect( bookm, SIGNAL( activated( int ) ), this, SLOT( bookmChosen( int ) ) ); menuBar()->insertItem( tr("&File"), file ); menuBar()->insertItem( tr("&Go"), go ); menuBar()->insertItem( tr( "History" ), hist ); menuBar()->insertItem( tr( "Bookmarks" ), bookm ); menuBar()->setItemEnabled( forwardId, FALSE); menuBar()->setItemEnabled( backwardId, FALSE); connect( browser, SIGNAL( backwardAvailable( bool ) ), this, SLOT( setBackwardAvailable( bool ) ) ); connect( browser, SIGNAL( forwardAvailable( bool ) ), this, SLOT( setForwardAvailable( bool ) ) ); Q3ToolBar* toolbar = new Q3ToolBar( this ); CHECK_PTR_ENGAUGE(toolbar); addToolBar( toolbar, "Toolbar"); QToolButton* button; button = new QToolButton( icon_back, tr("Backward"), "", browser, SLOT(backward()), toolbar ); CHECK_PTR_ENGAUGE(button); connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); button->setEnabled( FALSE ); button = new QToolButton( icon_forward, tr("Forward"), "", browser, SLOT(forward()), toolbar ); CHECK_PTR_ENGAUGE(button); connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); button->setEnabled( FALSE ); button = new QToolButton( icon_home, tr("Home"), "", browser, SLOT(home()), toolbar ); CHECK_PTR_ENGAUGE(button); toolbar->addSeparator(); pathCombo = new QComboBox( TRUE, toolbar ); CHECK_PTR_ENGAUGE(pathCombo); connect( pathCombo, SIGNAL( activated( const QString & ) ), this, SLOT( pathSelected( const QString & ) ) ); toolbar->setStretchableWidget( pathCombo ); setRightJustification( TRUE ); setDockEnabled( Qt::DockLeft, FALSE ); setDockEnabled( Qt::DockRight, FALSE ); pathCombo->insertItem( home_ ); browser->setFocus(); } HelpWindow::~HelpWindow() { DigitDebug::dtor(QString("helpwindow " + QString::number((ulong) this, 16))); history.clear(); QMap::Iterator it = mHistory.begin(); for ( ; it != mHistory.end(); ++it ) history.append( *it ); QFile f( QDir::currentDirPath() + "/.history" ); f.open( QIODevice::WriteOnly ); QDataStream s( &f ); s << history; f.close(); bookmarks.clear(); QMap::Iterator it2 = mBookmarks.begin(); for ( ; it2 != mBookmarks.end(); ++it2 ) bookmarks.append( *it2 ); QFile f2( QDir::currentDirPath() + "/.bookmarks" ); f2.open( QIODevice::WriteOnly ); QDataStream s2( &f2 ); s2 << bookmarks; f2.close(); } void HelpWindow::setBackwardAvailable( bool b) { menuBar()->setItemEnabled( backwardId, b); } void HelpWindow::setForwardAvailable( bool b) { menuBar()->setItemEnabled( forwardId, b); } void HelpWindow::textChanged() { if ( browser->documentTitle().isNull() ) setCaption( "Engauge Digitizer Help - " + browser->context() ); else setCaption( "Engauge Digitizer Help - " + browser->documentTitle() ) ; selectedURL = browser->context(); if ( !selectedURL.isEmpty() && pathCombo ) { bool exists = FALSE; int i; for ( i = 0; i < pathCombo->count(); ++i ) { if ( pathCombo->text( i ) == selectedURL ) { exists = TRUE; break; } } if ( !exists ) { pathCombo->insertItem( selectedURL, 0 ); pathCombo->setCurrentItem( 0 ); mHistory[ hist->insertItem( selectedURL ) ] = selectedURL; } else pathCombo->setCurrentItem( i ); selectedURL = QString::null; } } void HelpWindow::openFile() { #ifndef QT_NO_FILEDIALOG QString fn = Q3FileDialog::getOpenFileName( QString::null, QString::null, this ); if ( !fn.isEmpty() ) browser->setSource( fn ); #endif } void HelpWindow::print() { #ifndef QT_NO_PRINTER QPrinter printer; printer.setFullPage(TRUE); if ( printer.setup( this ) ) { QPainter p( &printer ); Q3PaintDeviceMetrics metrics(p.device()); int dpix = metrics.logicalDpiX(); int dpiy = metrics.logicalDpiY(); const int margin = 72; // pt QRect body(margin*dpix/72, margin*dpiy/72, metrics.width()-margin*dpix/72*2, metrics.height()-margin*dpiy/72*2 ); QFont font( "times", 10 ); Q3SimpleRichText richText( browser->text(), font, browser->context(), browser->styleSheet(), browser->mimeSourceFactory(), body.height() ); richText.setWidth( &p, body.width() ); QRect view( body ); int page = 1; do { richText.draw( &p, body.left(), body.top(), view, colorGroup() ); view.moveBy( 0, body.height() ); p.translate( 0 , -body.height() ); p.setFont( font ); p.drawText( view.right() - p.fontMetrics().width( QString::number(page) ), view.bottom() + p.fontMetrics().ascent() + 5, QString::number(page) ); if ( view.top() >= body.top() + richText.height() ) break; printer.newPage(); page++; } while (TRUE); } #endif } void HelpWindow::pathSelected( const QString &_path ) { ASSERT_ENGAUGE(browser != 0); browser->setSource( _path ); QMap::Iterator it = mHistory.begin(); bool exists = FALSE; for ( ; it != mHistory.end(); ++it ) { if ( *it == _path ) { exists = TRUE; break; } } if ( !exists ) mHistory[ hist->insertItem( _path ) ] = _path; } void HelpWindow::readHistory() { if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) { QFile f( QDir::currentDirPath() + "/.history" ); f.open( QIODevice::ReadOnly ); QDataStream s( &f ); s >> history; f.close(); while ( history.count() > 20 ) history.remove( history.begin() ); } } void HelpWindow::readBookmarks() { if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) { QFile f( QDir::currentDirPath() + "/.bookmarks" ); f.open( QIODevice::ReadOnly ); QDataStream s( &f ); s >> bookmarks; f.close(); } } void HelpWindow::histChosen( int i ) { if ( mHistory.contains( i ) ) { ASSERT_ENGAUGE(browser != 0); browser->setSource( mHistory[ i ] ); } } void HelpWindow::bookmChosen( int i ) { if ( mBookmarks.contains( i ) ) { ASSERT_ENGAUGE(browser != 0); browser->setSource( mBookmarks[ i ] ); } } void HelpWindow::addBookmark() { ASSERT_ENGAUGE(browser != 0); mBookmarks[ bookm->insertItem( caption() ) ] = browser->context(); } void HelpWindow::moveEvent(QMoveEvent* pEvent) { if (pEvent) DefaultSettings::instance().setWindowHelpPosition(pEvent->pos()); } void HelpWindow::resizeEvent(QResizeEvent* pEvent) { if (pEvent) DefaultSettings::instance().setWindowHelpSize(pEvent->size()); } engauge-digitizer-5.2/src/helpwindow.h000066400000000000000000000030771222557406400201210ustar00rootroot00000000000000/**************************************************************************** ** $Id: helpwindow.h,v 1.3 2005/03/20 01:47:05 markmitch Exp $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef HELPWINDOW_H #define HELPWINDOW_H #include #include #include #include #include //Added by qt3to4: #include #include #include class QComboBox; class HelpWindow : public Q3MainWindow { Q_OBJECT public: HelpWindow( const QString& home_, const QString& path, QWidget* parent = 0, const char *name=0 ); ~HelpWindow(); private slots: void setBackwardAvailable( bool ); void setForwardAvailable( bool ); void textChanged(); void openFile(); void print(); void pathSelected( const QString &); void histChosen( int ); void bookmChosen( int ); void addBookmark(); protected: virtual void moveEvent(QMoveEvent *pEvent); virtual void resizeEvent(QResizeEvent *pEvent); private: void readHistory(); void readBookmarks(); Q3TextBrowser* browser; QComboBox *pathCombo; int backwardId, forwardId; QString selectedURL; QStringList history, bookmarks; QMap mHistory, mBookmarks; QMenu *hist, *bookm; }; #endif // HELPWINDOW_H engauge-digitizer-5.2/src/highlight.cpp000066400000000000000000000037061222557406400202420ustar00rootroot00000000000000/*************************************************************************** highlight.cpp - description ------------------- begin : Tue Dec 19 2006 copyright : (C) 2006 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include "defaultsettings.h" #include "digitdebug.h" #include "highlight.h" #include "pointsetstyles.h" Highlight::Highlight(Color color, Q3Canvas* canvas) : Q3CanvasRectangle(0, 0, DefaultSettings::instance().getPointMatchHighlightDiameter(), DefaultSettings::instance().getPointMatchHighlightDiameter(), canvas) { DigitDebug::ctor(QString("highlight ") + QString::number((ulong) this, 16)); uint lineSize = DefaultSettings::instance().getPointMatchHighlightLineSize(); setPen(PointSetStyles::instance().pointSetPen(color, lineSize)); setVisible(true); } Highlight::~Highlight() { DigitDebug::dtor(QString("highlight ") + QString::number((ulong) this, 16)); } void Highlight::moveCenter(int x, int y) { int highlightDiameter = DefaultSettings::instance().getPointMatchHighlightDiameter(); move(x - highlightDiameter / 2, y - highlightDiameter / 2); } engauge-digitizer-5.2/src/highlight.h000066400000000000000000000031121222557406400176760ustar00rootroot00000000000000/*************************************************************************** highlight.h - description ------------------- begin : Tue Dec 19 2006 copyright : (C) 2006 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef HIGHLIGHT_H #define HIGHLIGHT_H #include #include "digitdef.h" class Q3Canvas; // this class implements the highlight box used during point matching. for the // most part the standard QCanvasRectangle methods are used, with geometry // configuration performed in this derived class class Highlight : public Q3CanvasRectangle { public: Highlight(Color color, Q3Canvas* canvas); ~Highlight(); // move center of box to specified location void moveCenter(int x, int y); }; #endif // HIGHLIGHT_H engauge-digitizer-5.2/src/img/000077500000000000000000000000001222557406400163355ustar00rootroot00000000000000engauge-digitizer-5.2/src/img/bannerapp.xpm000066400000000000000000000007271222557406400210370ustar00rootroot00000000000000/* XPM */ static const char * bannerapp_xpm[] = { "16 16 6 1", " c None", ". c #6D6D6D", "+ c #FFFFFF", "@ c #FF0000", "# c #00FF00", "$ c #000000", "................", ".++++++++++++++.", ".++@+++++++++++.", ".+@@@+++++++#++.", ".++@++++++++#++.", ".++$+++++++##++.", ".++$++++++##+++.", ".++$+++++##++++.", ".++$+++###+++++.", ".++$++##+++++++.", ".++$+##++++++++.", ".++@++++++++@++.", ".+@@@$$$$$$@@@+.", ".++@++++++++@++.", ".++++++++++++++.", "................"}; engauge-digitizer-5.2/src/img/bannerview.xpm000066400000000000000000000010051222557406400212170ustar00rootroot00000000000000/* XPM */ static const char * bannerview_xpm[] = { "16 16 9 1", " c None", ". c #6D6D6D", "+ c #FFFFFF", "@ c #DCDCDC", "# c #FF0000", "$ c #8C8C8C", "% c #000000", "& c #7C7C7C", "* c #00FF00", "........... ", ".+++++++++@. ", ".++#++++++$@. ", ".+###+++++$+@. ", ".++#++++++$++@. ", ".++%+++++++&&&&.", ".++%++++++**+++.", ".++%+++++**++++.", ".++%+++***+++++.", ".++%++**+++++++.", ".++%+**++++++++.", ".++#++++++++#++.", ".+###%%%%%%###+.", ".++#++++++++#++.", ".++++++++++++++.", "................"}; engauge-digitizer-5.2/src/img/colorchooser_hue.xpm000066400000000000000000000072561222557406400224370ustar00rootroot00000000000000/* XPM */ static const char * colorchooser_hue_xpm[] = { "210 1 204 2", " c None", ". c #FFFFFF", "+ c #FF0700", "@ c #FF0F00", "# c #FF1600", "$ c #FF1E00", "% c #FF2500", "& c #FF2D00", "* c #FF3500", "= c #FF3C00", "- c #FF4400", "; c #FF4B00", "> c #FF5300", ", c #FF5A00", "' c #FF6200", ") c #FF6A00", "! c #FF7100", "~ c #FF7900", "{ c #FF8000", "] c #FF8800", "^ c #FF8F00", "/ c #FF9700", "( c #FF9F00", "_ c #FFA600", ": c #FFAE00", "< c #FFB500", "[ c #FFBD00", "} c #FFC400", "| c #FFCC00", "1 c #FFD400", "2 c #FFDB00", "3 c #FFE300", "4 c #FFEA00", "5 c #FFF200", "6 c #FFF900", "7 c #FCFF00", "8 c #F4FF00", "9 c #EDFF00", "0 c #E5FF00", "a c #DEFF00", "b c #D6FF00", "c c #CFFF00", "d c #C7FF00", "e c #BFFF00", "f c #B8FF00", "g c #B0FF00", "h c #A9FF00", "i c #A1FF00", "j c #9AFF00", "k c #92FF00", "l c #8AFF00", "m c #83FF00", "n c #7BFF00", "o c #74FF00", "p c #6CFF00", "q c #64FF00", "r c #5DFF00", "s c #55FF00", "t c #4EFF00", "u c #46FF00", "v c #3FFF00", "w c #37FF00", "x c #2FFF00", "y c #28FF00", "z c #20FF00", "A c #19FF00", "B c #11FF00", "C c #0AFF00", "D c #02FF00", "E c #00FF05", "F c #00FF0C", "G c #00FF14", "H c #00FF1B", "I c #00FF23", "J c #00FF2A", "K c #00FF32", "L c #00FF3A", "M c #00FF41", "N c #00FF49", "O c #00FF50", "P c #00FF58", "Q c #00FF5F", "R c #00FF67", "S c #00FF6F", "T c #00FF76", "U c #00FF7E", "V c #00FF85", "W c #00FF8D", "X c #00FF94", "Y c #00FF9C", "Z c #00FFA4", "` c #00FFAB", " . c #00FFB3", ".. c #00FFBA", "+. c #00FFC2", "@. c #00FFC9", "#. c #00FFD1", "$. c #00FFD9", "%. c #00FFE0", "&. c #00FFE8", "*. c #00FFEF", "=. c #00FFF7", "-. c #00FFFF", ";. c #00F7FF", ">. c #00EFFF", ",. c #00E8FF", "'. c #00E0FF", "). c #00D9FF", "!. c #00D1FF", "~. c #00C9FF", "{. c #00C2FF", "]. c #00BAFF", "^. c #00B3FF", "/. c #00ABFF", "(. c #00A4FF", "_. c #009CFF", ":. c #0094FF", "<. c #008DFF", "[. c #0085FF", "}. c #007EFF", "|. c #0076FF", "1. c #006FFF", "2. c #0067FF", "3. c #005FFF", "4. c #0058FF", "5. c #0050FF", "6. c #0049FF", "7. c #0041FF", "8. c #003AFF", "9. c #0032FF", "0. c #002AFF", "a. c #0023FF", "b. c #001BFF", "c. c #0014FF", "d. c #000CFF", "e. c #0005FF", "f. c #0200FF", "g. c #0A00FF", "h. c #1100FF", "i. c #1900FF", "j. c #2000FF", "k. c #2800FF", "l. c #2F00FF", "m. c #3700FF", "n. c #3F00FF", "o. c #4600FF", "p. c #4E00FF", "q. c #5500FF", "r. c #5D00FF", "s. c #6400FF", "t. c #6C00FF", "u. c #7400FF", "v. c #7B00FF", "w. c #8300FF", "x. c #8A00FF", "y. c #9200FF", "z. c #9A00FF", "A. c #A100FF", "B. c #A900FF", "C. c #B000FF", "D. c #B800FF", "E. c #BF00FF", "F. c #C700FF", "G. c #CF00FF", "H. c #D600FF", "I. c #DE00FF", "J. c #E500FF", "K. c #ED00FF", "L. c #F400FF", "M. c #FC00FF", "N. c #FF00F9", "O. c #FF00F2", "P. c #FF00EA", "Q. c #FF00E3", "R. c #FF00DB", "S. c #FF00D4", "T. c #FF00CC", "U. c #FF00C4", "V. c #FF00BD", "W. c #FF00B5", "X. c #FF00AE", "Y. c #FF00A6", "Z. c #FF009F", "`. c #FF0097", " + c #FF008F", ".+ c #FF0088", "++ c #FF0080", "@+ c #FF0079", "#+ c #FF0071", "$+ c #FF006A", "%+ c #FF0062", "&+ c #FF005A", "*+ c #FF0053", "=+ c #FF004B", "-+ c #FF0044", ";+ c #FF003C", ">+ c #FF0035", ",+ c #FF002D", "'+ c #FF0025", ")+ c #FF001E", "!+ c #FF0016", "~+ c #FF000F", "{+ c #FF0007", "]+ c #FF0000", ". . . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+. . . . "}; engauge-digitizer-5.2/src/img/colorchooser_lower.xpm000066400000000000000000000020231222557406400227710ustar00rootroot00000000000000/* XPM */ static const char * histogram_lower_xpm[] = { "32 20 17 1", " c None", ". c #322BDB", "+ c #3F38E8", "@ c #1912C2", "# c #C9C9C9", "$ c #434358", "% c #86869B", "& c #000000", "* c #222277", "= c #0000FF", "- c #43436E", "; c #1111BB", "> c #1111A6", ", c #22224C", "' c #545454", ") c #545469", "! c #0D06B6", ".++++++++++++++++++++++++++++++@", "..++++++++++++++++++++++++++++@@", "..############################@@", "..############################@@", "..################$%##########@@", "..################&*%#########@@", "..################&=*-%#######@@", "..################&==;*-%#####@@", "..################&====;*-%###@@", "..################&======>,'##@@", "..################&======>,'##@@", "..################&====;*-%###@@", "..################&==;*-%#####@@", "..################&=*-%#######@@", "..################&*%#########@@", "..################)%##########@@", "..############################@@", "..############################@@", "..!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", ".!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"}; engauge-digitizer-5.2/src/img/colorchooser_saturation.xpm000066400000000000000000000072451222557406400240450ustar00rootroot00000000000000/* XPM */ static const char * colorchooser_saturation_xpm[] = { "210 1 203 2", " c None", ". c #FFFFFF", "+ c #FFFDFD", "@ c #FFFCFC", "# c #FFFBFB", "$ c #FFFAFA", "% c #FFF8F8", "& c #FFF7F7", "* c #FFF6F6", "= c #FFF5F5", "- c #FFF4F4", "; c #FFF2F2", "> c #FFF1F1", ", c #FFF0F0", "' c #FFEFEF", ") c #FFEEEE", "! c #FFECEC", "~ c #FFEBEB", "{ c #FFEAEA", "] c #FFE9E9", "^ c #FFE7E7", "/ c #FFE6E6", "( c #FFE5E5", "_ c #FFE4E4", ": c #FFE3E3", "< c #FFE1E1", "[ c #FFE0E0", "} c #FFDFDF", "| c #FFDEDE", "1 c #FFDDDD", "2 c #FFDBDB", "3 c #FFDADA", "4 c #FFD9D9", "5 c #FFD8D8", "6 c #FFD7D7", "7 c #FFD5D5", "8 c #FFD4D4", "9 c #FFD3D3", "0 c #FFD2D2", "a c #FFD0D0", "b c #FFCFCF", "c c #FFCECE", "d c #FFCDCD", "e c #FFCCCC", "f c #FFCACA", "g c #FFC9C9", "h c #FFC8C8", "i c #FFC7C7", "j c #FFC6C6", "k c #FFC4C4", "l c #FFC3C3", "m c #FFC2C2", "n c #FFC1C1", "o c #FFBFBF", "p c #FFBEBE", "q c #FFBDBD", "r c #FFBCBC", "s c #FFBBBB", "t c #FFB9B9", "u c #FFB8B8", "v c #FFB7B7", "w c #FFB6B6", "x c #FFB5B5", "y c #FFB3B3", "z c #FFB2B2", "A c #FFB1B1", "B c #FFB0B0", "C c #FFAFAF", "D c #FFADAD", "E c #FFACAC", "F c #FFABAB", "G c #FFAAAA", "H c #FFA8A8", "I c #FFA7A7", "J c #FFA6A6", "K c #FFA5A5", "L c #FFA4A4", "M c #FFA2A2", "N c #FFA1A1", "O c #FFA0A0", "P c #FF9F9F", "Q c #FF9E9E", "R c #FF9C9C", "S c #FF9B9B", "T c #FF9A9A", "U c #FF9999", "V c #FF9797", "W c #FF9696", "X c #FF9595", "Y c #FF9494", "Z c #FF9393", "` c #FF9191", " . c #FF9090", ".. c #FF8F8F", "+. c #FF8E8E", "@. c #FF8D8D", "#. c #FF8B8B", "$. c #FF8A8A", "%. c #FF8989", "&. c #FF8888", "*. c #FF8787", "=. c #FF8585", "-. c #FF8484", ";. c #FF8383", ">. c #FF8282", ",. c #FF8080", "'. c #FF7F7F", "). c #FF7E7E", "!. c #FF7D7D", "~. c #FF7B7B", "{. c #FF7A7A", "]. c #FF7979", "^. c #FF7777", "/. c #FF7676", "(. c #FF7575", "_. c #FF7373", ":. c #FF7272", "<. c #FF7171", "[. c #FF6F6F", "}. c #FF6E6E", "|. c #FF6D6D", "1. c #FF6C6C", "2. c #FF6A6A", "3. c #FF6969", "4. c #FF6868", "5. c #FF6666", "6. c #FF6565", "7. c #FF6464", "8. c #FF6262", "9. c #FF6161", "0. c #FF6060", "a. c #FF5E5E", "b. c #FF5D5D", "c. c #FF5C5C", "d. c #FF5A5A", "e. c #FF5959", "f. c #FF5858", "g. c #FF5656", "h. c #FF5555", "i. c #FF5454", "j. c #FF5252", "k. c #FF5151", "l. c #FF5050", "m. c #FF4F4F", "n. c #FF4D4D", "o. c #FF4C4C", "p. c #FF4B4B", "q. c #FF4949", "r. c #FF4848", "s. c #FF4747", "t. c #FF4545", "u. c #FF4444", "v. c #FF4343", "w. c #FF4141", "x. c #FF4040", "y. c #FF3F3F", "z. c #FF3D3D", "A. c #FF3C3C", "B. c #FF3B3B", "C. c #FF3939", "D. c #FF3838", "E. c #FF3737", "F. c #FF3636", "G. c #FF3434", "H. c #FF3333", "I. c #FF3232", "J. c #FF3030", "K. c #FF2F2F", "L. c #FF2E2E", "M. c #FF2C2C", "N. c #FF2B2B", "O. c #FF2A2A", "P. c #FF2828", "Q. c #FF2727", "R. c #FF2626", "S. c #FF2424", "T. c #FF2323", "U. c #FF2222", "V. c #FF2020", "W. c #FF1F1F", "X. c #FF1E1E", "Y. c #FF1C1C", "Z. c #FF1B1B", "`. c #FF1A1A", " + c #FF1919", ".+ c #FF1717", "++ c #FF1616", "@+ c #FF1515", "#+ c #FF1313", "$+ c #FF1212", "%+ c #FF1111", "&+ c #FF0F0F", "*+ c #FF0E0E", "=+ c #FF0D0D", "-+ c #FF0B0B", ";+ c #FF0A0A", ">+ c #FF0909", ",+ c #FF0707", "'+ c #FF0606", ")+ c #FF0505", "!+ c #FF0303", "~+ c #FF0202", "{+ c #FF0101", ". . . . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+. . . . "}; engauge-digitizer-5.2/src/img/colorchooser_upper.xpm000066400000000000000000000020231222557406400227740ustar00rootroot00000000000000/* XPM */ static const char * histogram_upper_xpm[] = { "32 20 17 1", " c None", ". c #322BDB", "+ c #3F38E8", "@ c #1912C2", "# c #C9C9C9", "$ c #86869B", "% c #545469", "& c #222277", "* c #000000", "= c #43436E", "- c #0000FF", "; c #1111BB", "> c #545454", ", c #22224C", "' c #1111A6", ") c #434358", "! c #0D06B6", ".++++++++++++++++++++++++++++++@", "..++++++++++++++++++++++++++++@@", "..############################@@", "..############################@@", "..##########$%################@@", "..#########$&*################@@", "..#######$=&-*################@@", "..#####$=&;--*################@@", "..###$=&;----*################@@", "..##>,'------*################@@", "..##>,'------*################@@", "..###$=&;----*################@@", "..#####$=&;--*################@@", "..#######$=&-*################@@", "..#########$&*################@@", "..##########$)################@@", "..############################@@", "..############################@@", "..!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", ".!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"}; engauge-digitizer-5.2/src/img/colorchooser_value.xpm000066400000000000000000000072601222557406400227650ustar00rootroot00000000000000/* XPM */ static const char * colorchooser_value_xpm[] = { "210 1 204 2", " c None", ". c #FFFFFF", "+ c #000000", "@ c #010000", "# c #020000", "$ c #030000", "% c #040000", "& c #060000", "* c #070000", "= c #080000", "- c #090000", "; c #0A0000", "> c #0C0000", ", c #0D0000", "' c #0E0000", ") c #0F0000", "! c #100000", "~ c #120000", "{ c #130000", "] c #140000", "^ c #150000", "/ c #170000", "( c #180000", "_ c #190000", ": c #1A0000", "< c #1B0000", "[ c #1D0000", "} c #1E0000", "| c #1F0000", "1 c #200000", "2 c #210000", "3 c #230000", "4 c #240000", "5 c #250000", "6 c #260000", "7 c #270000", "8 c #290000", "9 c #2A0000", "0 c #2B0000", "a c #2C0000", "b c #2E0000", "c c #2F0000", "d c #300000", "e c #310000", "f c #320000", "g c #340000", "h c #350000", "i c #360000", "j c #370000", "k c #380000", "l c #3A0000", "m c #3B0000", "n c #3C0000", "o c #3D0000", "p c #3F0000", "q c #400000", "r c #410000", "s c #420000", "t c #430000", "u c #450000", "v c #460000", "w c #470000", "x c #480000", "y c #490000", "z c #4B0000", "A c #4C0000", "B c #4D0000", "C c #4E0000", "D c #4F0000", "E c #510000", "F c #520000", "G c #530000", "H c #540000", "I c #560000", "J c #570000", "K c #580000", "L c #590000", "M c #5A0000", "N c #5C0000", "O c #5D0000", "P c #5E0000", "Q c #5F0000", "R c #600000", "S c #620000", "T c #630000", "U c #640000", "V c #650000", "W c #670000", "X c #680000", "Y c #690000", "Z c #6A0000", "` c #6B0000", " . c #6D0000", ".. c #6E0000", "+. c #6F0000", "@. c #700000", "#. c #710000", "$. c #730000", "%. c #740000", "&. c #750000", "*. c #760000", "=. c #770000", "-. c #790000", ";. c #7A0000", ">. c #7B0000", ",. c #7C0000", "'. c #7E0000", "). c #7F0000", "!. c #800000", "~. c #810000", "{. c #830000", "]. c #840000", "^. c #850000", "/. c #870000", "(. c #880000", "_. c #890000", ":. c #8B0000", "<. c #8C0000", "[. c #8D0000", "}. c #8F0000", "|. c #900000", "1. c #910000", "2. c #930000", "3. c #940000", "4. c #960000", "5. c #970000", "6. c #980000", "7. c #9A0000", "8. c #9B0000", "9. c #9C0000", "0. c #9E0000", "a. c #9F0000", "b. c #A00000", "c. c #A20000", "d. c #A30000", "e. c #A40000", "f. c #A60000", "g. c #A70000", "h. c #A80000", "i. c #AA0000", "j. c #AB0000", "k. c #AC0000", "l. c #AE0000", "m. c #AF0000", "n. c #B00000", "o. c #B20000", "p. c #B30000", "q. c #B40000", "r. c #B60000", "s. c #B70000", "t. c #B80000", "u. c #BA0000", "v. c #BB0000", "w. c #BC0000", "x. c #BE0000", "y. c #BF0000", "z. c #C00000", "A. c #C20000", "B. c #C30000", "C. c #C40000", "D. c #C60000", "E. c #C70000", "F. c #C80000", "G. c #C90000", "H. c #CB0000", "I. c #CC0000", "J. c #CD0000", "K. c #CF0000", "L. c #D00000", "M. c #D10000", "N. c #D20000", "O. c #D40000", "P. c #D50000", "Q. c #D60000", "R. c #D80000", "S. c #D90000", "T. c #DA0000", "U. c #DC0000", "V. c #DD0000", "W. c #DE0000", "X. c #DF0000", "Y. c #E10000", "Z. c #E20000", "`. c #E30000", " + c #E50000", ".+ c #E60000", "++ c #E70000", "@+ c #E80000", "#+ c #EA0000", "$+ c #EB0000", "%+ c #EC0000", "&+ c #EE0000", "*+ c #EF0000", "=+ c #F00000", "-+ c #F20000", ";+ c #F30000", ">+ c #F40000", ",+ c #F50000", "'+ c #F70000", ")+ c #F80000", "!+ c #F90000", "~+ c #FB0000", "{+ c #FC0000", "]+ c #FD0000", ". . . . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+. . . . "}; engauge-digitizer-5.2/src/img/digitaxislarge.xpm000066400000000000000000000020461222557406400220650ustar00rootroot00000000000000/* XPM */ static const char * digitaxislarge_xpm[] = { "32 26 4 1", " c None", ". c #FF0000", "+ c #000200", "@ c #000000", " ", " .. ", " .. ", " ...... ", " ...... ", " .. ", " .. ", " ++ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " @@ ", " ++ ", " .. .. ", " .. .. ", " ......+@@@@@@@@@@@@@@@+...... ", " ......++@@@@@@@@@@@@@@+...... ", " .. .. ", " .. .. ", " "}; engauge-digitizer-5.2/src/img/digitaxissmall.xpm000066400000000000000000000011221222557406400220750ustar00rootroot00000000000000/* XPM */ static const char * digitaxissmall_xpm[] = { "19 21 3 1", " c None", ". c #FF0000", "+ c #000200", " ", " .. ", " .... ", " .... ", " .. ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " ++ ", " .. .. ", " ....+++++++++.... ", " ....+++++++++.... ", " .. .. ", " "}; engauge-digitizer-5.2/src/img/digitcurvelarge.xpm000066400000000000000000000020471222557406400222460ustar00rootroot00000000000000/* XPM */ static const char * digitcurvelarge_xpm[] = { "32 26 4 1", " c None", ". c #000000", "+ c #0915F7", "@ c #6D6D6D", " ", " .. ", " .. ", " .. ++ ", " .. ++ ", " .. ++++++ ", " .. ...++++++ ", " .. ++ ...... ++ ", " .. ++ .... ++ ", " .. ++++++. ", " .. ++++++ ", " .. ..++ ", " .. @..++ ", " .. @.. ", " .. @.. ", " .. ++... ", " .. ++.. ", " ..++++++ ", " ..++++++ ", " .. ++ ", " .. ++ ", " .. ", " ............................ ", " ............................ ", " ", " "}; engauge-digitizer-5.2/src/img/digitcurvesmall.xpm000066400000000000000000000011611222557406400222600ustar00rootroot00000000000000/* XPM */ static const char * digitcurvesmall_xpm[] = { "19 21 5 1", " c None", ". c #000200", "+ c #0915F7", "@ c #000000", "# c #6D6D6D", " ", " .. ", " .. ++ ", " .. ++ ", " .. ++++++ ", " .. ++++++ ", " .. @++ ", " .. @ ++ ", " .. @@ ", " .. @@ ", " .. @@ ", " .. ++ @ ", " .. ++@# ", " .. ++++++ ", " .. ++++++ ", " .. ++ ", " .. ++ ", " .. ", " ..@.............. ", " ..@.............. ", " "}; engauge-digitizer-5.2/src/img/digitizer.ico000066400000000000000000000236261222557406400210340ustar00rootroot0000000000000000f h00h #(n&(0` ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www                                                            ( @ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www                             ( @ʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www           (0`wwwwwwwwwwwwwwwwwwwwwwppy    yxxwxxxxpxpwpwwwxxxppwwwwwwwwwwwwwwwwwwwwww( @wwwwwwwwwwwwwwypwwy ywwypwwwwwwwwwwwwww( wwwwy ppppppppppwwwwwwengauge-digitizer-5.2/src/img/digitmatchlarge.xpm000066400000000000000000000020301222557406400222060ustar00rootroot00000000000000/* XPM */ static const char * digitmatchlarge_xpm[] = { "32 26 3 1", " c None", ". c #000000", "+ c #DAA520", " ", " .. ", " .. ", " .. ++ ", " .. ++ ", " .. ++++++ ", " .. ++++++ ", " .. ++ ++ ", " .. ++ ++ ", " .. ++++++ ", " .. ++++++ ", " .. ++ ", " .. ++ ", " .. ", " .. ", " .. ++ ", " .. ++ ", " ..++++++ ", " ..++++++ ", " .. ++ ", " .. ++ ", " .. ", " ............................ ", " ............................ ", " ", " "}; engauge-digitizer-5.2/src/img/digitmatchsmall.xpm000066400000000000000000000011421222557406400222270ustar00rootroot00000000000000/* XPM */ static const char * digitmatchsmall_xpm[] = { "19 21 4 1", " c None", ". c #000200", "+ c #DAA520", "@ c #000000", " ", " .. ++ ", " .. ++ ", " .. ++++++ ", " .. ++++++ ", " .. ++ ", " .. ++ ++ ", " .. ++ ", " .. ++++++ ", " .. ++++++ ", " .. ++ ", " .. ++ ++ ", " .. ++ ", " .. ++++++ ", " .. ++++++ ", " .. ++ ", " .. ++ ", " .. ", " ..@.............. ", " ..@.............. ", " "}; engauge-digitizer-5.2/src/img/digitmeasurelarge.xpm000066400000000000000000000020701222557406400225570ustar00rootroot00000000000000/* XPM */ static const char * digitmeasurelarge_xpm[] = { "32 26 5 1", " c None", ". c #000200", "+ c #6D6D6D", "@ c #000000", "# c #00FFFF", " ", " ", " ", " ", " ", " ", " ", " ", ". +@@@ @@@+ .", ". +@+#@ @#+@+ .", ". +@+##@ @##+@+ .", ".+@+###@@@@@@@@@@@@@@@@@@###+@+.", ".@+##########################+@.", ".@############################@.", ". @+###@@@@@@@@@@@@@@@@@@###+@ .", ". +@+##@ @##+@+ .", ". +@+#@ @#+@+ .", ". +@@@ @@@+ .", " ", " ", " ", " ", " ", " ", " ", " "}; engauge-digitizer-5.2/src/img/digitmeasuresmall.xpm000066400000000000000000000011631222557406400225770ustar00rootroot00000000000000/* XPM */ static const char * digitmeasuresmall_xpm[] = { "19 21 5 1", " c None", ". c #000200", "+ c #000000", "@ c #6D6D6D", "# c #00FFFF", " ", " ", " ", " ", " ", ". . . .", ". +. .. .", ". +@. .@. .", ". +@#. .#@. .", ". +@##..+++++##@. .", ".+@#############@..", ". .@###########@. .", ". .@#...++++#@. .", ". .@. .@. .", ". .. .. .", ". . . .", " ", " ", " ", " ", " "}; engauge-digitizer-5.2/src/img/digitscalelarge.xpm000066400000000000000000000020111222557406400222000ustar00rootroot00000000000000/* XPM */ static const char * digitscalelarge_xpm[] = { "32 26 2 1", " c None", ". c #FF00FF", " ", " ", " ", " ", " ", " ", " ", " ", " ", " .............................. ", " .............................. ", " .. .. ", " .. .. ", " .. .. ", " .............................. ", " .............................. ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; engauge-digitizer-5.2/src/img/digitscalesmall.xpm000066400000000000000000000011041222557406400222200ustar00rootroot00000000000000/* XPM */ static const char * digitscalesmall_xpm[] = { "19 21 2 1", " c None", ". c #FF00FF", " ", " ", " ", " ", " ", " ", " ", " ................. ", " ................. ", " .. .. ", " .. .. ", " .. .. ", " ................. ", " ................. ", " ", " ", " ", " ", " ", " ", " "}; engauge-digitizer-5.2/src/img/digitsegmentlarge.xpm000066400000000000000000000020511222557406400225570ustar00rootroot00000000000000/* XPM */ static const char * digitsegmentlarge_xpm[] = { "32 26 4 1", " c None", ". c #000000", "+ c #6D6D6D", "@ c #20FC07", " ", " .. ", " .. ", " .. ", " .. ", " .. ", " .. +.......... ", " .. +....+@@@@@@@@. ", " .. +..+@@@@@@@@@@@@. ", " .. +..+@@@@@@+........ ", " .. +..+@@@@+....+ ", " .. +.+@@@@+..+ ", " .. +.+@@@+..+ ", " .. +.+@@@+.+ ", " .. .+@@@+.+ ", " .. +.@@@+.+ ", " .. .+@@+.+ ", " .. .@@@.+ ", " .. .@@+. ", " .. ....+ ", " .. ", " .. ", " ............................ ", " ............................ ", " ", " "}; engauge-digitizer-5.2/src/img/digitsegmentsmall.xpm000066400000000000000000000011631222557406400226000ustar00rootroot00000000000000/* XPM */ static const char * digitsegmentsmall_xpm[] = { "19 21 5 1", " c None", ". c #000200", "+ c #000000", "@ c #6D6D6D", "# c #20FC07", " ", " .. ", " .. +... ", " .. +@##. ", " .. +@###. ", " .. +@###@. ", " .. +@###@+ ", " .. +@###@. ", " .. +@###@. ", " .. +@###@+ ", " .. +@###@. ", " .. +@###@. ", " .. .@###@+ ", " .. +###@+ ", " .. +##@+ ", " .. +... ", " .. ", " .. ", " ..................", " ..................", " "}; engauge-digitizer-5.2/src/img/digitselectlarge.xpm000066400000000000000000000020311222557406400223720ustar00rootroot00000000000000/* XPM */ static const char * digitselectlarge_xpm[] = { "32 26 3 1", " c None", ". c #6D6D6D", "+ c #000200", " ", " ", " . ", " +. ", " ++. ", " +++. ", " ++++. ", " +++++. ", " ++++++. ", " +++++++. ", " ++++++++. ", " +++++++++. ", " ++++++++++. ", " ++++++++++ ", " +++++++ ", " +++ +++. ", " ++ +++ ", " + +++ ", " .++. ", " +++ ", " .++ ", " .++. ", " +++ ", " .+ ", " ", " "}; engauge-digitizer-5.2/src/img/digitselectsmall.xpm000066400000000000000000000010521222557406400224120ustar00rootroot00000000000000/* XPM */ static const char * digitselectsmall_xpm[] = { "17 21 3 1", " c None", ". c #000200", "+ c #6D6D6D", " ", " ", " .+ ", " ..+ ", " ...+ ", " ....+ ", " .....+ ", " ......+ ", " .......+ ", " ........+ ", " ......... ", " ......+ ", " ......+ ", " ..+ ... ", " .+ +..+ ", " . ... ", " +..+ ", " ... ", " +. ", " ", " "}; engauge-digitizer-5.2/src/img/eyedropperonmap.xpm000066400000000000000000000006601222557406400222760ustar00rootroot00000000000000/* XPM */ static const char * eyedropperonmap_xpm[] = { "16 16 3 1", " c None", ". c #FFFFFF", "+ c #000000", "...........++++.", "..........++++++", "..........++++++", "......++++++++++", ".......+++++++++", "........+++++++.", ".......+.++++...", "......+...+++...", ".....+...++++...", "....+...++..+...", "...+...++.......", "..+...++........", ".+...++.........", "+...++..........", "+..++...........", "++++............"}; engauge-digitizer-5.2/src/img/eyedropperonmask.xpm000066400000000000000000000006611222557406400224550ustar00rootroot00000000000000/* XPM */ static const char * eyedropperonmask_xpm[] = { "16 16 3 1", " c None", ". c #FFFFFF", "+ c #000000", "...........++++.", "..........++++++", "..........++++++", "......++++++++++", ".......+++++++++", "........+++++++.", ".......++++++...", "......+++++++...", ".....++++++++...", "....++++++..+...", "...++++++.......", "..++++++........", ".++++++.........", "++++++..........", "+++++...........", "++++............"}; engauge-digitizer-5.2/src/img/fileexport.xpm000066400000000000000000000006311222557406400212440ustar00rootroot00000000000000/* XPM */ static const char * fileexport_xpm[] = { "13 16 5 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #C0C0C0", "# c #DCDCDC", " ", " ", " ........ ", " .++++@##. ", " .++++@++#. ", " .++++@.... ", " .+++++@@@. ", " .++++++++. ", " .+.@.@.@+. ", " .++++++++. ", " .+.@.@.@+. ", " .++++++++. ", " .+.@.@.@+. ", " .++++++++. ", " .......... ", " "}; engauge-digitizer-5.2/src/img/fileimport.xpm000066400000000000000000000006501222557406400212360ustar00rootroot00000000000000/* XPM */ static const char * fileimport_xpm[] = { "13 16 6 1", " c None", ". c #040404", "+ c #000000", "@ c #FFFFFF", "# c #C0C0C0", "$ c #DCDCDC", " ... ", " . . .", " ..", "++++++++ ...", "+@@@@#$$+ ", "+@@@@#@@$+ ", "+@@@@#++++ ", "+@@@@@###+ ", "+@@@@@@@@+ ", "+@+#+#+#@+ ", "+@@@@@@@@+ ", "+@+#+#+#@+ ", "+@@@@@@@@+ ", "+@+#+#+#@+ ", "+@@@@@@@@+ ", "++++++++++ "}; engauge-digitizer-5.2/src/img/fileopen.xpm000066400000000000000000000006131222557406400206640ustar00rootroot00000000000000/* XPM */ static const char * fileopen_xpm[] = { "16 13 5 1", " c None", ". c #040404", "+ c #F3F704", "@ c #F3F7F3", "# c #E2D700", " ... ", " . . . ", " .. ", " ... ... ", ".+@+....... ", ".@+@+@+@+@. ", ".+@+@+@+@+. ", ".@+@+...........", ".+@+.#########. ", ".@+.#########. ", ".+.#########. ", "..#########. ", "........... "}; engauge-digitizer-5.2/src/img/filesave.xpm000066400000000000000000000006371222557406400206670ustar00rootroot00000000000000/* XPM */ static const char * filesave_xpm[] = { "16 14 5 1", " c None", ". c #000000", "+ c #65E0FF", "@ c #E2E2E2", "# c #777777", " .............. ", ".++++++++++++++.", ".++++++++++++++.", ".++ ++.", ".++ ++.", ".++ ++.", ".++ ++.", ".++++++++++++++.", ".++++++++++++++.", ".+++@@@@@@@#+++.", ".+++@@..@@@#+++.", ".+++@@..@@@#+++.", " .++@@..@@@#+++.", " ............. "}; engauge-digitizer-5.2/src/img/helpback.xpm000066400000000000000000000010421222557406400206310ustar00rootroot00000000000000/* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*helpback_xpm[]={ "16 16 5 1", "# c #000000", "a c #ffffff", "c c #808080", "b c #c0c0c0", ". c None", "................", ".......#........", "......##........", ".....#a#........", "....#aa########.", "...#aabaaaaaaa#.", "..#aabbbbbbbbb#.", "...#abbbbbbbbb#.", "...c#ab########.", "....c#a#ccccccc.", ".....c##c.......", "......c#c.......", ".......cc.......", "........c.......", "................", "......................"}; engauge-digitizer-5.2/src/img/helpforward.xpm000066400000000000000000000010631222557406400214000ustar00rootroot00000000000000/* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*helpforward_xpm[]={ "16 16 5 1", "# c #000000", "a c #ffffff", "c c #808080", "b c #c0c0c0", ". c None", "................", "................", ".........#......", ".........##.....", ".........#a#....", "..########aa#...", "..#aaaaaaabaa#..", "..#bbbbbbbbbaa#.", "..#bbbbbbbbba#..", "..########ba#c..", "..ccccccc#a#c...", "........c##c....", "........c#c.....", "........cc......", "........c.......", "................", "................"}; engauge-digitizer-5.2/src/img/helphome.xpm000066400000000000000000000010411222557406400206600ustar00rootroot00000000000000/* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*helphome_xpm[]={ "16 16 4 1", "# c #000000", "a c #ffffff", "b c #c0c0c0", ". c None", "........... ....", " ....##.......", "..#...####......", "..#..#aabb#.....", "..#.#aaaabb#....", "..##aaaaaabb#...", "..#aaaaaaaabb#..", ".#aaaaaaaaabbb#.", "###aaaaaaaabb###", "..#aaaaaaaabb#..", "..#aaa###aabb#..", "..#aaa#.#aabb#..", "..#aaa#.#aabb#..", "..#aaa#.#aabb#..", "..#aaa#.#aabb#..", "..#####.######..", "................"}; engauge-digitizer-5.2/src/img/lo16-app-digitizer.png000066400000000000000000000003551222557406400223750ustar00rootroot00000000000000PNG  IHDRR0PLTEO&IbKGDH pHYs Y-tIME7ECIDATxU+ P'e#:R͆p$ 3aE@Zz0] kke+1IENDB`engauge-digitizer-5.2/src/img/lo32-app-digitizer.png000066400000000000000000000004351222557406400223720ustar00rootroot00000000000000PNG  IHDR Tg0PLTEO&IbKGDH pHYs PtIME$:i^sIDATx+0 YnjXjهfEeM%LZKdA™v< PA  /X/ @>t BwP(#K 4fYώ0p®uTIENDB`engauge-digitizer-5.2/src/img/matchcircle.xpm000066400000000000000000000006631222557406400213460ustar00rootroot00000000000000/* XPM */ static const char * matchcircle_xpm[] = { "13 13 10 1", " c None", ". c #FFFFFF", "+ c #FEFEFE", "@ c #E6E6E6", "# c #A3A3A3", "$ c #454545", "% c #292929", "& c #000000", "* c #797979", "= c #1D1D1D", ".............", ".+@#$%&%$#@+.", ".@*=&&&&&=*@.", ".#=&&&&&&&=#.", ".$&&&&&&&&&$.", ".%&&&&&&&&&%.", ".&&&&&&&&&&&.", ".%&&&&&&&&&%.", ".$&&&&&&&&&$.", ".#=&&&&&&&=#.", ".@*=&&&&&=*@.", ".+@#$%&%$#@+.", "............."}; engauge-digitizer-5.2/src/img/matchdiamond.xpm000066400000000000000000000005671222557406400215230ustar00rootroot00000000000000/* XPM */ static const char * matchdiamond_xpm[] = { "13 13 6 1", " c None", ". c #FFFFFF", "+ c #FEFEFE", "@ c #EAEAEA", "# c #000000", "$ c #141414", ".............", ".++++@#@++++.", ".+++@$#$@+++.", ".++@$###$@++.", ".+@$#####$@+.", ".@$#######$@.", ".###########.", ".@$#######$@.", ".+@$#####$@+.", ".++@$###$@++.", ".+++@$#$@+++.", ".++++@#@++++.", "............."}; engauge-digitizer-5.2/src/img/matchsquare.xpm000066400000000000000000000005111222557406400213750ustar00rootroot00000000000000/* XPM */ static const char * matchsquare_xpm[] = { "13 13 3 1", " c None", ". c #FFFFFF", "+ c #000000", ".............", ".............", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", "..+++++++++..", ".............", "............."}; engauge-digitizer-5.2/src/img/segmentpreview.xpm000066400000000000000000000774011222557406400221400ustar00rootroot00000000000000/* XPM */ static const char * segmentpreview_xpm[] = { "320 100 3 1", " c None", ". c #000000", "+ c #FFFFFF", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++...+++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++..++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++..++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+..+++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++..++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++..++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++..+++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++..+++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++..+++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++..++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++..++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++..+++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++.++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++..++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++..+++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++..++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++..++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++..++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++..++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++.+++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++..++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++.+++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++..++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++.++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++..++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++", "++++++++++++++++++++..++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++", "++++++++++++++++++++..++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++", "+++++++++++++++++++..+++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++", "+++++++++++++++++++.+++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++", "+++++++++++++++++++.+++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+++++++...++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...++++..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++......++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"}; engauge-digitizer-5.2/src/img/whatsthis.xpm000066400000000000000000000011361222557406400211020ustar00rootroot00000000000000/* XPM */ static const char * whatsthis_xpm[] = { "21 20 3 1", " c None", ". c #000000", "+ c #000083", " ", " ", " ", " . +++++ ", " .. +++ +++ ", " ... +++ +++ ", " .... ++ ++ ", " ..... ++ ++ ", " ...... + +++ ", " ....... +++ ", " ........ +++ ", " ......... +++ ", " ..... +++ ", " .. ... ", " . ... +++ ", " ... +++ ", " ... ", " ... ", " ... ", " "}; engauge-digitizer-5.2/src/main.cpp000066400000000000000000000235701222557406400172200ustar00rootroot00000000000000/*************************************************************************** main.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include #include #include #include #include #include "digitmain.h" #include "clipboard.h" #include "pointsetstyles.h" #include "digitdef.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" // command line options. static variables are local and others are global static QString cmdImport; static QString cmdExport; static QString cmdOpen; QDir cmdManualDirectory; bool cmdLazySegments; bool cmdOnlyBmp; bool cmdPixels; bool cmdSettingsReset; bool cmdSettingsText; static bool cmdXYAxes; static double cmdXMinG; // x range min in graph units static double cmdXMaxG; // x range max in graph units static double cmdYMinG; // y range min in graph units static double cmdYMaxG; // y range max in graph units void parseCmdLine(int argc, char *argv[]); bool parseRangePair(QString arg1, QString arg2, double &rangeMin, double &rangeMax); void showAllUsageAndQuit(bool showAsError); void showAndQuit(QString msgOutput, bool showAsError); void showAxisUsageAndQuit(); void assert_engauge(bool condition, ENGAUGE_CONST_MODIFIER char *file, const int line) { if (!condition) { QMessageBox::critical(0, "Engauge Digitizer", QObject::tr("Unexpected problem in %1 at line %2\n") .arg(file) .arg(line) + "Please contact the author at mmdigitizer@gmail.com with this information"); exit(-1); } } void check_ptr_engauge(const char *ptr, ENGAUGE_CONST_MODIFIER char *file, const int line) { if (ptr == 0) { QMessageBox::critical(0, "Engauge Digitizer", QObject::tr("Out of memory in %1 at line %2\n") .arg(file) .arg(line) + "Please contact the author at mmdigitizer@gmail.com with this information"); exit(-1); } } void fatal_engauge(const char *comment, ENGAUGE_CONST_MODIFIER char *file, const int line) { QMessageBox::critical(0, "Engauge Digitizer", QObject::tr("Fatal error in %1 at line %2\n") .arg(file) .arg(line) + "\nThe description is '" + comment + "'\n" + "Please contact the author at mmdigitizer@gmail.com with this information"); exit(-1); } int main(int argc, char *argv[]) { QApplication app(argc, argv); #ifdef Q_OS_MACX // connect to plugins directory app.setLibraryPaths(app.applicationDirPath() + "/../PlugIns"); #endif parseCmdLine(argc, argv); initGlobals(); Clipboard::create(); PointSetStyles::create(); DefaultSettings::create(); DefaultSettings& rSettings = DefaultSettings::instance(); if (rSettings.getWindowMainFontOverride()) { app.setFont(QFont(rSettings.getWindowMainFontName(), rSettings.getWindowMainFontSize())); } QTranslator tor (0); // set the location where your .qm files are in load() below as the last parameter instead of "." // for development, use "/" to use the english original as // .qm files are stored in the base project directory. tor.load (QString("digitizer.") + QTextCodec::locale(), "."); app.installTranslator (&tor); DigitMain digitizer(cmdExport); qApp->setMainWidget(&digitizer); digitizer.show(); if (!cmdImport.isEmpty()) { if (cmdXYAxes) { digitizer.importImageFile(cmdImport, cmdXMinG, cmdXMaxG, cmdYMinG, cmdYMaxG); } else { digitizer.importImageFile(cmdImport); } } if (!cmdOpen.isEmpty()) digitizer.openDocumentFile (cmdOpen); return app.exec(); } void parseCmdLine(int argc, char *argv[]) { cmdImport = ""; cmdExport = ""; cmdOpen = ""; cmdManualDirectory = ""; cmdLazySegments = false; cmdOnlyBmp = false; cmdPixels = false; cmdSettingsReset = false; cmdSettingsText = false; cmdXYAxes = false; bool success = true; bool usage = false; // QApplication constructor documentation describes the qt built-in command line // arguments. we will parse our own debug flags for (int i = 1; i < argc; i++) { QString arg(argv [i]); if ((arg == QString("-import")) && (i + 1 < argc)) { cmdImport = argv [i + 1]; ++i; } else if ((arg == QString("-export")) && (i + 1 < argc)) { cmdExport = argv [i + 1]; ++i; } else if ((arg == QString("-open")) && (i + 1 < argc)) { cmdOpen = argv [i + 1]; ++i; } else if (QFile::exists(arg)) { cmdOpen = arg; } else if (arg == QString("-help")) usage = true; else if ((arg == QString("-manual")) && (i + 1 < argc)) { cmdManualDirectory = argv [i + 1]; if (!cmdManualDirectory.exists()) { QMessageBox::critical(0, "Engauge Digitizer", QObject::tr("User manual directory %1 does not exist") .arg(cmdManualDirectory.path())); success = false; } ++i; } else if (arg == QString("-onlybmp")) cmdOnlyBmp = true; else if (arg == QString("-lazysegments")) cmdLazySegments = true; else if (arg == QString("-pixels")) cmdPixels = true; else if (arg == QString("-reset")) cmdSettingsReset = true; else if (arg == QString("-text")) cmdSettingsText = true; else if ((arg == QString("-axes")) && (i + 4 < argc)) { if (parseRangePair(QString(argv [i + 1]), QString(argv [i + 2]), cmdXMinG, cmdXMaxG) && parseRangePair(QString(argv [i + 3]), QString(argv [i + 4]), cmdYMinG, cmdYMaxG)) cmdXYAxes = true; else success = false; i += 4; } else if ((arg == QString("-nograb")) || (arg == QString("-dograb")) || (arg == QString("-sync"))) { // ignore these Qt command line debug options. They will be // processed by QApplication if it was compiled with debugging } else if (!DigitDebug::setDebugFlag (QString (argv [i]))) success = false; } if (!success) showAllUsageAndQuit(true); // show as error if (usage) showAllUsageAndQuit(false); // show as information if (cmdXYAxes && cmdImport.isEmpty()) showAxisUsageAndQuit(); } bool parseRangePair(QString arg1, QString arg2, double &rangeMin, double &rangeMax) { bool okArg1, okArg2; rangeMin = arg1.toDouble(&okArg1); rangeMax = arg2.toDouble(&okArg2); return okArg1 && okArg2; } void showAllUsageAndQuit(bool showAsError) { QString msgOutput; // display one line with all options unadorned msgOutput += QObject::tr( "\nUsage:\nengauge [-import FILE] [-export FILE] [-open FILE] [FILE] [-help] [-manual DIRECTORY]\n" "[-axes XMIN XMAX YMIN YMAX] [-reset] [-text] [-lazysegments] [-onlybmp] [-pixels]\n%1\n") .arg(DigitDebug::usageShort().latin1()); // display multiple lines with each line having the details of one option msgOutput += QObject::tr("\nStartup:\n"); msgOutput += QObject::tr("[-import FILE] import image file at startup\n"); msgOutput += QObject::tr("[-open FILE] open document file at startup\n"); msgOutput += QObject::tr("[FILE] open document file at startup\n"); msgOutput += QObject::tr("[-help] display this help and exit\n"); msgOutput += QObject::tr("[-manual DIRECTORY] look for the user manual in the specified directory\n"); msgOutput += QObject::tr("[-axes XMIN XMAX YMIN YMAX] digitize axis points while importing file\n"); msgOutput += QObject::tr("[-lazysegments] postpone scanning for segments during startup until needed later\n"); msgOutput += QObject::tr("\nShutdown:\n"); msgOutput += QObject::tr("[-export FILE] export active document at shutdown\n"); msgOutput += QObject::tr("\nSettings:\n"); msgOutput += QObject::tr("[-reset] reset settings to factory defaults\n"); msgOutput += QObject::tr("[-text] load and save settings in a text file rather than the registry (Windows only)\n"); msgOutput += QObject::tr("\nInternationalization:\n"); msgOutput += QObject::tr("[-onlybmp] import all images as bmp files (fix for Chinese Windows)\n"); msgOutput += QObject::tr("\nDebugging:\n"); msgOutput += QObject::tr("[-pixels] track cursor in pixels\n"); msgOutput += QObject::tr(DigitDebug::usageLong().latin1()); // environment variables msgOutput += QObject::tr("\nEnvironment variables:\n"); msgOutput += BrowserEnvironmentVariable + QObject::tr("=command to run browser for date/time converter\n"); msgOutput += UserManualEnvironmentVariable + QObject::tr("=look for the user manual in the specified directory\n"); showAndQuit(msgOutput, showAsError); } void showAndQuit(QString msgOutput, bool showAsError) { msgOutput += QObject::tr("\n"); // show usage using a messagebox rather than writing to stdout or stderr since console // output is suppressed in microsoft windows if (showAsError) QMessageBox::critical(0, QObject::tr("Engauge Digitizer"), msgOutput); else QMessageBox::information(0, QObject::tr("Engauge Digitizer"), msgOutput); exit(-1); } void showAxisUsageAndQuit() { QString msgOutput; msgOutput += QObject::tr("Command line option '-axes' requires option '-import'\n"); showAndQuit(msgOutput, true); // show as error } engauge-digitizer-5.2/src/main.h000066400000000000000000000033121222557406400166550ustar00rootroot00000000000000/*************************************************************************** main.h - description ------------------- begin : Sun Nov 2 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MAIN_H #define MAIN_H // const is needed to pass around __FILE__ in most compilers, but it disagrees with Sun Forte compiler #ifdef __SUNPRO_CC #define ENGAUGE_CONST_MODIFIER #else #define ENGAUGE_CONST_MODIFIER const #endif #define ASSERT_ENGAUGE(a) assert_engauge(a,__FILE__,__LINE__) #define CHECK_PTR_ENGAUGE(a) check_ptr_engauge((const char*) a,__FILE__,__LINE__) #define FATAL_ENGAUGE(a) fatal_engauge((const char*) a,__FILE__,__LINE__) void assert_engauge(const bool a, ENGAUGE_CONST_MODIFIER char* file, const int line); void check_ptr_engauge(const char* a, ENGAUGE_CONST_MODIFIER char* file, const int line); void fatal_engauge(const char* s, ENGAUGE_CONST_MODIFIER char* file, const int line); #endif // MAIN_H engauge-digitizer-5.2/src/match.cpp000066400000000000000000000047311222557406400173660ustar00rootroot00000000000000/*************************************************************************** match.cpp - description ------------------- begin : Mon Jan 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "match.h" #include "digitdebug.h" #include "main.h" Match::Match(int xScreen, int yScreen, Color colorAccepted, Color colorRejected, PointSetStyle style, Q3Canvas* canvas) : Q3CanvasPolygonalItem(canvas), m_xScreen(xScreen), m_yScreen(yScreen), m_colorAccepted(colorAccepted), m_colorRejected(colorRejected), m_state(StateUnmarked), m_pointSetStyle(style) { DigitDebug::ctor(QString("match ") + QString::number((ulong) this, 16)); } Match::~Match() { DigitDebug::dtor(QString("match ") + QString::number((ulong) this, 16)); // all subclasses of QCanvasPolygonalItem must call hide in destructor hide(); } Q3PointArray Match::areaPoints() const { return PointSetStyles::instance().areaPoints(m_xScreen, m_yScreen, m_pointSetStyle); } void Match::setState(MatchState state) { m_state = state; switch (m_state) { case StateAccepted: show(); m_pointSetStyle.pointLineColor = m_colorAccepted; m_pointSetStyle.pointInColor = m_colorAccepted; break; case StateRejected: show(); m_pointSetStyle.pointLineColor = m_colorRejected; m_pointSetStyle.pointInColor = m_colorRejected; break; case StateUnmarked: hide(); break; } } void Match::drawShape(QPainter &p) { PointSetStyles::instance().drawShape(p, m_xScreen, m_yScreen, m_pointSetStyle); } void Match::dumpMatch() { qDebug("match this %lx xScreen %d yScreen %d ", (unsigned long) this, m_xScreen, m_yScreen); } engauge-digitizer-5.2/src/match.h000066400000000000000000000052121222557406400170260ustar00rootroot00000000000000/*************************************************************************** match.h - description ------------------- begin : Mon Jan 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MATCH_H #define MATCH_H #include #include //Added by qt3to4: #include #include "digitdef.h" #include "pointsetstyles.h" // class used to store match points. This class essentially duplicates the // basic idea of the more important Point class, with irrelevant functionality // removed and point match functionality added class Match : public Q3CanvasPolygonalItem { public: Match(int xScreen, int yScreen, Color colorAccepted, Color colorRejected, PointSetStyle style, Q3Canvas* canvas); ~Match(); enum MatchState { StateAccepted, StateRejected, StateUnmarked }; // change state MatchState state(void) { return m_state; } void setState(MatchState state); // change point style void setPointSetStyle(PointSetStyle style) { m_pointSetStyle = style; } // location int x(void) { return m_xScreen; } int y(void) { return m_yScreen; } // debug void dumpMatch(void); protected: // QCanvasPolygonalItem function that draws the polygonal item using the pen and brush void drawShape(QPainter& p); private: // QCanvasPolygonalItem function that returns the bounding points virtual Q3PointArray areaPoints(void) const; // screen coordinates are in pixels. They are only modified by a click-and-drag operation int m_xScreen; int m_yScreen; // colors in accepted and rejected states. these override the style Color m_colorAccepted; Color m_colorRejected; // state of this match point MatchState m_state; // point style PointSetStyle m_pointSetStyle; }; #endif // MATCH_H engauge-digitizer-5.2/src/matchset.cpp000066400000000000000000000146331222557406400201040ustar00rootroot00000000000000/*************************************************************************** matchset.cpp - description ------------------- begin : Mon Jan 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "matchset.h" #include "digitdef.h" #include "digitdebug.h" #include "highlight.h" #include "main.h" #include "match.h" #include "defaultsettings.h" MatchSet::MatchSet() : m_canvas(0), m_matches(0), m_highlightCandidate(0) { DigitDebug::ctor(QString("matchset ") + QString::number((ulong) this, 16)); m_matchList.setAutoDelete(true); } MatchSet::~MatchSet() { DigitDebug::dtor(QString("matchset ") + QString::number((ulong) this, 16)); QList updateRectList; clear(&updateRectList); if (m_highlightCandidate) delete m_highlightCandidate; } void MatchSet::acceptedPoints(QList* acceptedPoints) { Match* m; for (m = m_matchList.first(); m != 0; m = m_matchList.next()) { if (m->state() == Match::StateAccepted) { QPoint p(m->x(), m->y()); ASSERT_ENGAUGE(acceptedPoints != 0); acceptedPoints->append(p); } } } void MatchSet::addCreatedPointsToCanvas(Q3Canvas* canvas, PointSetStyle style, PointMatchSettings settings, const QList* pointsCreated, QList* updateRectList) { // make sure we have no stale points from previous invocations if (m_matchList.count() > 0) clear(updateRectList); m_canvas = canvas; m_settings = settings; QList::const_iterator itr; for (itr = pointsCreated->begin(); itr != pointsCreated->end(); ++itr) { PointMatchTriplet t = (*itr); Match* m = new Match(t.x, t.y, settings.acceptedColor, settings.rejectedColor, style, canvas); CHECK_PTR_ENGAUGE(m); m_matchList.append(m); } // create the highlight m_highlightCandidate = new Highlight(m_settings.candidateColor, canvas); CHECK_PTR_ENGAUGE(m_highlightCandidate); moveHighlights(updateRectList); } void MatchSet::clear(QList* updateRectList) { if (m_highlightCandidate) { updateRectList->append(m_highlightCandidate->boundingRect()); delete m_highlightCandidate; m_highlightCandidate = 0; } while (m_matchList.count() > 0) { ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(m_matchList.last()->boundingRect()); m_matchList.removeLast(); // autoDelete is on } } Q3CanvasRectangle* MatchSet::makeHighlight(Color color) { ASSERT_ENGAUGE(m_canvas != 0); Q3CanvasRectangle* r = new Q3CanvasRectangle(0, 0, DefaultSettings::instance().getPointMatchHighlightDiameter(), DefaultSettings::instance().getPointMatchHighlightDiameter(), m_canvas); CHECK_PTR_ENGAUGE(r); r->setPen(PointSetStyles::instance().pointSetPen(color, DefaultSettings::instance().getPointMatchHighlightLineSize())); r->setVisible(true); return r; } bool MatchSet::matchPointAccept(QList* updateRectList) { Match* m; for (m = m_matchList.first(); m != 0; m = m_matchList.next()) { if (m->state() == Match::StateUnmarked) { m->setState(Match::StateAccepted); ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(m->boundingRect()); moveHighlights(updateRectList); return true; } } return false; } bool MatchSet::matchPointReject(QList* updateRectList) { Match* m; for (m = m_matchList.first(); m != 0; m = m_matchList.next()) { if (m->state() == Match::StateUnmarked) { m->setState(Match::StateRejected); ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(m->boundingRect()); moveHighlights(updateRectList); return true; } } return false; } bool MatchSet::matchPointRemove(QList* updateRectList) { Match* mLastNotRejected = 0; Match* m; for (m = m_matchList.first(); m != 0; m = m_matchList.next()) { if (m->state() == Match::StateUnmarked) { if (mLastNotRejected != 0) { mLastNotRejected->setState(Match::StateUnmarked); ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(m->boundingRect()); moveHighlights(updateRectList); return true; } else return false; } mLastNotRejected = m; } // all points are accepted, so reject the last point m = m_matchList.last(); if (m != 0) { m->setState(Match::StateUnmarked); ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(m->boundingRect()); } moveHighlights(updateRectList); return true; } void MatchSet::moveHighlights(QList* updateRectList) { Match* m; for (m = m_matchList.first(); m != 0; m = m_matchList.next()) { if (m->state() == Match::StateUnmarked) { if (m_highlightCandidate == 0) { ASSERT_ENGAUGE(m_canvas != 0); m_highlightCandidate = new Highlight(m_settings.candidateColor, m_canvas); CHECK_PTR_ENGAUGE(m_highlightCandidate); } else updateRectList->append(m_highlightCandidate->boundingRect()); m_highlightCandidate->moveCenter(m->x(), m->y()); if (m_highlightCandidate != 0) updateRectList->append(m_highlightCandidate->boundingRect()); return; } } if (m_highlightCandidate != 0) { updateRectList->append(m_highlightCandidate->boundingRect()); delete m_highlightCandidate; m_highlightCandidate = 0; } } void MatchSet::setPointSetStyle(PointSetStyle style) { for (Match* m = m_matchList.first(); m != 0; m = m_matchList.next()) m->setPointSetStyle(style); } engauge-digitizer-5.2/src/matchset.h000066400000000000000000000057721222557406400175550ustar00rootroot00000000000000/*************************************************************************** matchset.h - description ------------------- begin : Mon Jan 12 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MATCHSET_H #define MATCHSET_H #include #include //Added by qt3to4: #include #include "digitdef.h" class Highlight; class Match; // this class contains all Match class objects, and parallels the // PointSet class, although this is much more simple. the Match // objects owned by this class were originally owned by a QArray, // but that created dependency problems in the header file class MatchSet { public: MatchSet(); ~MatchSet(); // return currently accepted points void acceptedPoints(QList* acceptedPoints); // create one canvas item for each matched point void addCreatedPointsToCanvas(Q3Canvas* canvas, PointSetStyle style, PointMatchSettings settings, const QList* pointsCreated, QList* updateRectList); // destroy all objects, releasing allocated memory void clear(QList* updateRectList); // add accepted, add rejected or remove one match point, returning true if a point's // state was changed bool matchPointAccept(QList* updateRectList); bool matchPointReject(QList* updateRectList); bool matchPointRemove(QList* updateRectList); // show style change on screen void setPointSetStyle(PointSetStyle style); private: // highlight maintenance Q3CanvasRectangle* makeHighlight(Color color); void moveHighlights(QList* updateRectList); Q3Canvas* m_canvas; PointMatchSettings m_settings; // pointer list of Match objects. QArray might have been better, but QArray // requires default constructors for its objects, but QCanvasItems require // pointer to canvas in all of the constructors. speed is not much of an issue // since only one search is performed after each keypress speed int m_matches; Q3PtrList m_matchList; // highlight the candidate point. QCanvasEllipse is not an option since the pen // is always NoPen Highlight* m_highlightCandidate; }; #endif // MATCHSET_H engauge-digitizer-5.2/src/measurecmb.cpp000066400000000000000000000057551222557406400204240ustar00rootroot00000000000000/*************************************************************************** measurecmb.cpp - description ------------------- begin : Thu Oct 31 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "measurecmb.h" #include "digitview.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" MeasureCmb::MeasureCmb(QWidget* parent) : QComboBox(true, parent, "measure list") { DigitDebug::ctor(QString("measurecmb ") + QString::number((ulong) this, 16)); setMinimumWidth(DefaultSettings::instance().getComboBoxWidthMin()); setEnabled(false); setEditable(false); QWhatsThis::add(this, QString(tr("Currently active measure\n\n" "While in the Measure Point measure digitizing mode, any new points will be assigned to this measure\n\n" "Another measure may be selected by using the dropdown button"))); // override the default Qt focus policy with the Windows and Motif policy setFocusPolicy(Qt::StrongFocus); } MeasureCmb::~MeasureCmb() { DigitDebug::dtor(QString("measurecmb ") + QString::number((ulong) this, 16)); } void MeasureCmb::attachToDocument(DigitDoc* doc) { clear(); if (doc) { // show all measures in combobox QStringList list; doc->measureNames(&list); for (QStringList::iterator itr = list.begin(); itr != list.end(); ++itr) insertItem(doc->measureThumbnail(*itr), *itr); DigitDebug::measurecmb(QString("attaching to document with ") + QString::number(list.count()) + QString(" measures: ") + list.join(QString(" "))); } else DigitDebug::measurecmb(QString("attaching to null document")); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void MeasureCmb::slotComboMeasure(bool toggle) { if (toggle) { setEnabled(true); if (currentText().isEmpty()) { for (int index = 0; index < count(); index++) { if (text(index) == DefaultMeasureName) { setCurrentItem(index); break; } } } } } void MeasureCmb::slotComboNotMeasure(bool toggle) { if (toggle) setEnabled(false); } engauge-digitizer-5.2/src/measurecmb.h000066400000000000000000000032001222557406400200500ustar00rootroot00000000000000/*************************************************************************** measurecmb.h - description ------------------- begin : Fri Dec 27 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MEASURECMB_H #define MEASURECMB_H #include #include #include "digitdoc.h" // this combobox in draw toolbar displays the currently active measure, if in // measure mode. otherwise this is grayed out class MeasureCmb : public QComboBox { Q_OBJECT public: MeasureCmb(QWidget* parent); ~MeasureCmb(); // load measure names from a document void attachToDocument(DigitDoc* doc); private slots: // change cursor to measure point mode void slotComboMeasure(bool toggle); // change cursor to nonmeasure point mode void slotComboNotMeasure(bool toggle); }; #endif // MEASURECMB_H engauge-digitizer-5.2/src/mmsubs.cpp000066400000000000000000001445771222557406400176150ustar00rootroot00000000000000/*************************************************************************** mmsubs.cpp - description ------------------- begin : Sat Nov 2 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //#include //#include #include "main.h" #include "mmsubs.h" #define max(a,b) ((a>b)?a:b) const double PI = 3.1415926535; const double DOUBLEONE = (double) 1; /*******************************************************************************/ int adjust_count (bool linearAxis, double start, double stop, double inc) { int count; if (linearAxis) count = (int) (1 + (stop - start) / inc); else { if ((start <= 0) || (inc <= 0.0)) count = 1; else count = (int) (1 + log10 (stop / start) / log10 (inc)); } return count; } /*******************************************************************************/ double adjust_inc (bool linearAxis, int roundoffPower, double start, double stop, int count) { double inc; if (linearAxis) { if (count > 1) inc = (stop - start) / (count - 1); else inc = stop - start; } else { if (start <= 0.0) // eliminate divide by zero inc = 1.0; else { if (count > 1) inc = pow (stop / start, (double) 1.0 / (count - 1)); else inc = stop / start; } } return roundofftopower (inc, roundoffPower); } /*******************************************************************************/ double adjust_start (bool linearAxis, int roundoffPower, double stop, double inc, int count) { double start; if (linearAxis) start = stop - inc * (count - 1); else start = stop / pow (inc, (double) (count - 1)); return roundofftopower (start, roundoffPower); } /*******************************************************************************/ double adjust_stop (bool linearAxis, int roundoffPower, double start, double inc, int count) { double stop; if (linearAxis) stop = start + inc * (count - 1); else stop = start * pow (inc, (double) (count - 1)); return roundofftopower (stop, roundoffPower); } /*******************************************************************************/ double angleleft (double x0, double y0, double x1, double y1, double x2, double y2) { // return angle on the left side of the vertex at the juntion of line segments // (x0,y0) to (x1,y1), and (x1,y1) to (x2,y2) double vectora [3], vectorb [3], vectoraxb [3]; vectora [0] = x1 - x0; vectora [1] = y1 - y0; vectora [2] = 0; vectorb [0] = x2 - x1; vectorb [1] = y2 - y1; vectorb [2] = 0; dcross (vectora, vectorb, vectoraxb); if (vectoraxb [2] > 0) return PI - dangle (vectora, vectorb); else return PI + dangle (vectora, vectorb); } /*******************************************************************************/ double angleright (double x0, double y0, double x1, double y1, double x2, double y2) { // return angle on the right side of the vertex at the juntion of line segments // (x0,y0) to (x1,y1), and (x1,y1) to (x2,y2) return 2.0 * PI - angleleft (x0, y0, x1, y1, x2, y2); } /*******************************************************************************/ void axisScale(double x_min_in, double x_max_in, bool linearAxis, double* x_start, double* x_stop, double* x_delta, int* x_count) // given the min and max values on an axis, picks start, delta and stop // values that nicely bound the low and high values. key in algorithm // is to minimize number of significant digits in start, delta and stop { double x_min, x_max; const double range_epsilon = 0.00000000001; double x_average, x_average_rounded_up, x_range; int ndigit_range; // define number of digits of precision. although value of 10 seems // desirable, the sprintf statements elsewhere in this file, which // operate on values with the specified precision, just lose it // for more than 8 digits. example '%.7lg' on 40.000005 gives 40.00001 const int nDigitsPrecision = 8; // sort the input values if (x_min_in > x_max_in) { x_min = x_max_in; x_max = x_min_in; } else { x_min = x_min_in; x_max = x_max_in; } // scale the coordinates logarithmically if log flag is set if (!linearAxis) { ASSERT_ENGAUGE(x_min > 0); ASSERT_ENGAUGE(x_max > 0); x_min = log10(x_min); x_max = log10(x_max); } // round off average to first significant digit of range x_average = (x_min + x_max) / 2.0; x_range = x_max - x_min; if (x_range == 0) x_range = dabs (x_average / 10.0); // for null range use arbitrary range ndigit_range = valuePower (x_range); *x_delta = pow ((double) 10.0, (double) ndigit_range); x_average_rounded_up = *x_delta * floor ((x_average + *x_delta / 2.0) / *x_delta); if (x_range > range_epsilon) { // adjust stepsize if more points are needed, accounting for roundoff while (dabs (x_range / *x_delta) <= 2.000001) *x_delta /= 2.0; } // go down until min point is included *x_start = x_average_rounded_up; while (*x_start > x_min) *x_start -= *x_delta; // go up until max point is included *x_stop = x_average_rounded_up; while (*x_stop < x_max) *x_stop += *x_delta; *x_count = 1 + (int) floor ((*x_stop - *x_start) / *x_delta + 0.5); if (!linearAxis) { // convert from log scale back to linear scale *x_start = pow((double) 10.0, *x_start); *x_stop = pow((double) 10.0, *x_stop); *x_delta = pow((double) 10.0, *x_delta); } // roundoff to eliminate epsilons of 10^-10 int roundoffPower = valuePower (*x_delta) - nDigitsPrecision; *x_start = roundofftopower(*x_start, roundoffPower); *x_stop = roundofftopower(*x_stop, roundoffPower); *x_delta = roundofftopower(*x_delta, roundoffPower); } /*******************************************************************************/ bool clippedsegmentisvisible(double xTopLeft, double yTopLeft, double xTopRight, double yTopRight, double xBottomRight, double yBottomRight, double xBottomLeft, double yBottomLeft, double* xStart, double* yStart, double* xStop, double* yStop) { // clip the line segment within a quadrilateral, then return true if it is // still visible. ASSUMPTION - quadrilateral is convex bool startInside, stopInside; startInside = pointinsidebox(*xStart, *yStart, xTopLeft, yTopLeft, xTopRight, yTopRight, xBottomRight, yBottomRight, xBottomLeft, yBottomLeft); stopInside = pointinsidebox(*xStop, *yStop, xTopLeft, yTopLeft, xTopRight, yTopRight, xBottomRight, yBottomRight, xBottomLeft, yBottomLeft); if (startInside) { if (stopInside) return true; else { // need to clip since stop point is outside of quadrilateral double sLine1, sLine2; if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xTopLeft, yTopLeft, xTopRight, yTopRight, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStop = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStop = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xTopRight, yTopRight, xBottomRight, yBottomRight, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStop = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStop = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xBottomRight, yBottomRight, xBottomLeft, yBottomLeft, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStop = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStop = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xBottomLeft, yBottomLeft, xTopLeft, yTopLeft, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStop = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStop = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } return true; } } else if (stopInside) { // need to clip since start point is outside of quadrilateral double sLine1, sLine2; if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xTopLeft, yTopLeft, xTopRight, yTopRight, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStart = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStart = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xTopRight, yTopRight, xBottomRight, yBottomRight, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStart = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStart = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xBottomRight, yBottomRight, xBottomLeft, yBottomLeft, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStart = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStart = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } else if (intersecttwolines (*xStart, *yStart, *xStop, *yStop, xBottomLeft, yBottomLeft, xTopLeft, yTopLeft, &sLine1, &sLine2) && (0.0 <= sLine1) && (sLine1 <= 1.0) && (0.0 <= sLine2) && (sLine2 <= 1.0)) { *xStart = (1 - sLine1) * (*xStart) + sLine1 * (*xStop); *yStart = (1 - sLine1) * (*yStart) + sLine1 * (*yStop); } return true; } else // no part of line segment is visible return false; } /*******************************************************************************/ bool compute_linear_to_log (double* v, double vMin, double vMax) // // converts linear scale coordinate to log scale coordinate. // example: vmin=1, v=50.5, vmax=100 gives v=10 { if (*v <= 0) return false; if (vMin <= 0) return false; if (vMax <= 0) return false; if (vMin >= vMax) return false; *v = pow((double) 10.0, log10(vMin) + (log10(vMax) - log10(vMin)) * (*v - vMin) / (vMax - vMin)); return true; } /*******************************************************************************/ bool compute_log_to_linear (double* v, double vMin, double vMax) // // converts log scale coordinate to linear scale coordinate. // example: vmin=1, v=10, vmax=100 gives v=50.5 { if (*v <= 0) return false; if (vMin <= 0) return false; if (vMax <= 0) return false; if (vMin >= vMax) return false; *v = vMin + (vMax - vMin) * (log10(*v) - log10(vMin)) / (log10(vMax) - log10(vMin)); return true; } /*******************************************************************************/ int compute_screen_to_graph (double r_graph [3] [3], double r_screen [3] [3], double a [3] [3], double a_inverse [3] [3]) // computes the transformation to get graph coordinates given // screen coordinates, where // G S // r = T r // // since this transformation is defined using three points (each in both // graph and screen coordinates), we are solving // G G G S S S // (r1 r2 r3 ) = T (r1 r2 r3 ) // so // -1 // T = G S // // we will assume that the computed transformation has all of the appropriate // y sign convention transformations, skews, scalings, rotations and translations // // note that we are NOT using (x,y,z) coordinates where z=constant. instead, so // that 3x3 transformations can perform translation, we ARE using (x,y,1) coordinates { int iworkn [3]; double workn [3], worknn [3] [3]; double r_screen_inverse [3] [3]; #ifdef NDEBUG double r_screen_debug [3] [3]; double r_graph_debug [3] [3]; double unity_matrix [3] [3]; #endif ASSERT_ENGAUGE(r_graph [2] [0] == 1.0); ASSERT_ENGAUGE(r_graph [2] [1] == 1.0); ASSERT_ENGAUGE(r_graph [2] [2] == 1.0); ASSERT_ENGAUGE(r_screen [2] [0] == 1.0); ASSERT_ENGAUGE(r_screen [2] [1] == 1.0); ASSERT_ENGAUGE(r_screen [2] [2] == 1.0); if (!dinverse((double*) r_screen, 3, 3, iworkn, (double*) r_screen_inverse, workn, (double*) worknn)) return S2G_BAD_SCREEN_COORDINATES; dmlt3x3(a, r_graph, r_screen_inverse); if (!dinverse((double*) a, 3, 3, iworkn, (double*) a_inverse, workn, (double*) worknn)) return S2G_BAD_GRAPH_COORDINATES; #ifdef NDEBUG /* for debugging, verify that original graph vectors actually get converted to the original screen vectors, and vice versa. also verify a was inverted */ dmlt3x3(r_graph_debug, a, r_screen); dmlt3x3(r_screen_debug, a_inverse, r_graph); dmlt3x3(unity_matrix, a, a_inverse); #endif return S2G_SUCCESS; } /*******************************************************************************/ void convertfromcartesian(mmUnits units, double x, double y, double originRadius, double *xTheta, double *yR) /* convert cartesian x and y to polar theta and r if the units are polar, otherwise just pass the coordinates through transparently. note how the temp variable allows making the output parameters the same as the inputs (example is convertcartesiantopolar(x, y, &x, &y)) */ { double radiusTemp; if (units == mmCartesian) { *xTheta = x; *yR = y; } else { radiusTemp = sqrt(x * x + y * y); *xTheta = datan2safe (y, x); if (units == mmDegrees) *xTheta *= 180.0 / PI; else if (units == mmGradians) *xTheta *= 200.0 / PI; *yR = radiusTemp + originRadius; } } /*******************************************************************************/ void converttocartesian(mmUnits units, double xTheta, double yR, double originRadius, double *x, double *y) /* convert polar theta and r to cartesian x and y if the units are polar, otherwise just pass the coordinates through transparently. note how the temp variable allows making the output parameters the same as the inputs (example convertpolartocartesian(x, y, &x, &y)) */ { double angleTemp; if (units == mmCartesian) { *x = xTheta; *y = yR; } else { angleTemp = xTheta; if (units == mmDegrees) angleTemp *= PI / 180.0; else if (units == mmGradians) angleTemp *= PI / 200.0; *x = (yR - originRadius) * cos(angleTemp); *y = (yR - originRadius) * sin(angleTemp); } } /*******************************************************************************/ double dabs (double x) /* returns absolute value of double precision value */ { if (x > 0) return (x); else return (-x); } /*******************************************************************************/ double dangle (double r1 [3], double r2 [3]) /* returns the angle between vectors r1 and r2 (radians) */ { double r1mag, r2mag, rdot12, cosine, value; r1mag = dvmag1 (r1); r2mag = dvmag1 (r2); rdot12 = ddot (r1, r2); cosine = rdot12 / (r1mag * r2mag); if (dabs (cosine) < 1.0) value = acos (cosine); else if (cosine > 1.0) value = 0.0; else value = PI; return (value); } /*******************************************************************************/ double dangle_4_quadrant (double rfrom [3], double rabout [3], double rto [3]) /* returns the angle (radians) required to rotate the from vector (rfrom), about the about vector (rabout), into the rabout-rto plane. a right-handed rotation is used, giving results between 0 and 2*pi */ { double pfrom [3], pto [3], value; double rtemp [3], rhalfpi [3]; /* project the from and to vectors perpendicular to rabout */ dcross (rabout, rfrom, rtemp); dcross (rtemp, rabout, pfrom); dcross (rabout, rto, rtemp); dcross (rtemp, rabout, pto); /* give answer between 0 and pi */ value = dangle (pfrom, pto); /* go to quadrants 3 and 4 if rto is past pi */ dcross (rabout, rfrom, rhalfpi); if (ddot (rhalfpi, rto) < 0.0) return (value); else return (2.0 * PI - value); } /*******************************************************************************/ double dasinsafe (double arg) /* bounds the input argument before returning dasinsafe */ { double value; if (arg < -1.0) value = -PI / 2.0; else { if (arg > 1.0) value = PI / 2.0; else value = asin (arg); } return (value); } /*******************************************************************************/ double datan2safe (double y, double x) /* checks for zero input arguments before returning atan */ { double value; if (x * x + y * y > 1.0e-8) value = atan2 (y, x); else value = 0.0; return (value); } /*******************************************************************************/ void dcross (double r1 [3], double r2 [3], double r3 [3]) /* cross product of first vector with second, into third */ { r3 [0] = r1 [1] * r2 [2] - r1 [2] * r2 [1]; r3 [1] = r1 [2] * r2 [0] - r1 [0] * r2 [2]; r3 [2] = r1 [0] * r2 [1] - r1 [1] * r2 [0]; } /*******************************************************************************/ double ddot (double r1 [3], double r2 [3]) /* dot product of 2 vectors */ { return (r1 [0] * r2 [0] + r1 [1] * r2 [1] + r1 [2] * r2 [2]); } /*******************************************************************************/ double degrees2radians (double argument) /* convert argument in degrees to radians */ { return (argument * atan((double) 1.0) / 45.0); } /*******************************************************************************/ bool dinverse (double* a, int n, int np, int* iworkn, double* y, double* workn, double* worknn) // finds the inverse of a square nxn matrix a, returning it // in the square nxn matrix y. algorithm is from "numerical recipes". // workn and worknn are the work areas. note that everything is // double precision (see cinverse for complex). kscr is the screen // output file number // // uses routines dlubksb and dludcmp { double column [3]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) worknn [FOLD2DINDEX(i, j, np)] = a [FOLD2DINDEX(i, j, np)]; // decompose the matrix if (!dludcmp (worknn, n, np, iworkn, workn)) return false; // find inverse by columns for (int j = 0; j < n; j++) { column [0] = 0; column [1] = 0; column [2] = 0; column [j] = 1; if (!dlubksb (worknn, n, np, iworkn, column)) return false; y [FOLD2DINDEX(0, j, np)] = column[0]; y [FOLD2DINDEX(1, j, np)] = column[1]; y [FOLD2DINDEX(2, j, np)] = column[2]; } return true; } /*******************************************************************************/ double distancetoline(double x, double y, double x1, double y1, double x2, double y2) { // project (x,y) onto line between (x1,y1) and (x2,y2), then return // distance between (x,y) and the projected point (xP,yP) double xP, yP; projectpointontoline(x, y, x1, y1, x2, y2, &xP, &yP); return sqrt((xP - x) * (xP - x) + (yP - y) * (yP - y)); } /*******************************************************************************/ void dlincom (double cin1, double rin1 [3], double cin2, double rin2 [3], double rout [3]) /* takes a linear combination of 2 vectors to produce a third. idea borrowed surreptiously from j. hoffman and f. morinigo. input rin1,rin2 first and second input vectors cin1,cin2 coefficients of the input vectors output rout = cin1 * rin1 + cin2 * rin2 */ { int i; for (i = 0; i < 3; i++) rout [i] = cin1 * rin1 [i] + cin2 * rin2 [i]; } /*******************************************************************************/ bool dlubksb (double* a, int n, int np, int* index, double* b) // solves a*x=b. returns true if successful // input // a lu decomposition matrix from dludcmp. order is nxn // n used size of vectors and matrix a // np dimensioned size of vectors and matrix a // index permutation vector from dludcmp // b b vector in a*x=b // output // b x vector in a*x=b { double sum; int i, j, k, ipermuted; k = -1; for (i = 0; i < n; i++) { ipermuted = index [i]; sum = b [ipermuted]; b [ipermuted] = b [i]; if (k != -1) for (j = k; j < i; j++) sum -= a [FOLD2DINDEX(i, j, np)] * b [j]; else if (sum != 0.0) k = i; b [i] = sum; } for (i = n - 1; i >= 0; i--) { sum = b [i]; for (j = i + 1; j < n; j++) sum -= a [FOLD2DINDEX(i, j, np)] * b [j]; if (a [FOLD2DINDEX(i, i, np)] == 0.0) return false; b [i] = sum / a [FOLD2DINDEX(i, i, np)]; } return true; } /*******************************************************************************/ bool dludcmp (double* a, int n, int np, int* index, double* workn) // returns lu decomposition of nxn matrix a, and true if successful // input // a matrix to decompose // n used size of vectors and matrix a // np dimensioned size of vectors and matrix a // output // index permutation vector // internal // workn temporary storage matrix { double tiny = 1.0e-12; // info at http://www.math.byu.edu/~schow/work/IEEEFloatingPoint.htm double alargest, term, sum; int i, j, k, ilargest; for (i = 0; i < n; i++) { alargest = 0.0; for (j = 0; j < n; j++) alargest = max (alargest, fabs (a [FOLD2DINDEX(i, j, np)])); if (alargest == 0.0) return false; workn [i] = 1.0 / alargest; } for (j = 0; j < n; j++) { for (i = 0; i < j; i++) { sum = a [FOLD2DINDEX(i, j, np)]; for (k = 0; k < i; k++) sum -= a [FOLD2DINDEX(i, k, np)] * a [FOLD2DINDEX(k, j, np)]; a [FOLD2DINDEX(i, j, np)] = sum; } alargest = 0.0; ilargest = j; for (i = j; i < n; i++) { sum = a [FOLD2DINDEX(i, j, np)]; for (k = 0; k < j; k++) sum -= a [FOLD2DINDEX(i, k, np)] * a [FOLD2DINDEX(k, j, np)]; a [FOLD2DINDEX(i, j, np)] = sum; term = workn [i] * fabs (sum); if (term >= alargest) { ilargest = i; alargest = term; } } if (j != ilargest) { for (k = 0; k < n; k++) { term = a [FOLD2DINDEX(ilargest, k, np)]; a [FOLD2DINDEX(ilargest, k, np)] = a [FOLD2DINDEX(j, k, np)]; a [FOLD2DINDEX(j, k, np)] = term; } workn [ilargest] = workn [j]; } index [j] = ilargest; if (a [FOLD2DINDEX(j, j, np)] == 0.0) a [FOLD2DINDEX(j, j, np)] = tiny; if (j != n - 1) { term = 1.0 / a [FOLD2DINDEX(j, j, np)]; for (i = j + 1; i < n; i++) a [FOLD2DINDEX(i, j, np)] *= term; } } return true; } /*******************************************************************************/ void dmlt3x1 (double z [3], const double x [3] [3], const double y [3]) /* multiply 3x3 matrix, x, by vector y, into vector z */ { double sum; int nrow, nentry; for (nrow = 0; nrow < 3; nrow++) { sum = 0.0; for (nentry = 0; nentry < 3; nentry++) sum = sum + x [nrow] [nentry] * y [nentry]; z [nrow] = sum; } } /*******************************************************************************/ void dmlt3x3 (double z [3] [3], const double x [3] [3], const double y [3] [3]) /* multiply 2 3x3 matrices, x and y, into z */ { int nrow, ncol, nentry; double sum; for (nrow = 0; nrow < 3; nrow++) for (ncol = 0; ncol < 3; ncol++) { sum = 0.0; for (nentry = 0; nentry < 3; nentry++) sum = sum + x [nrow] [nentry] * y [nentry] [ncol]; z [nrow] [ncol] = sum; } } /*******************************************************************************/ void double_interpolate (int lengthRaw, double *xRaw, double *yRaw, int lengthInt, double *xInt, double *yInt) /* linearly interpolate raw curve into interpolated curve. only yInt is output. this function implicitly assumes that the xRaw array is monotonically increasing */ { int iRaw = 1; for (int iInt = 0; iInt < lengthInt; iInt++) { if (lengthRaw < 1) { // not enough raw points to interpolate, so fill with zeros yInt [iInt] = 0.0; } else if (lengthRaw == 1) { // single raw point applies everywhere yInt [iInt] = yRaw [0]; } else { // bracket iInt'th point by iRaw-1 and iRaw while ((xInt [iInt] > xRaw [iRaw]) && (iRaw < lengthRaw - 1)) ++iRaw; ASSERT_ENGAUGE(xRaw [iRaw - 1] <= xRaw [iRaw]); // monotonically increasing? double denominator = xRaw [iRaw] - xRaw [iRaw - 1]; if (denominator == 0.0) { /* dilemma - both raw x values are the same but raw y values may not be the same. use the first y value and keep it simple so user will be able to figure out what happened */ yInt [iInt] = yRaw [iRaw - 1]; } else { /* normal interpolation */ yInt [iInt] = yRaw [iRaw - 1] + (xInt [iInt] - xRaw [iRaw - 1]) * (yRaw [iRaw] - yRaw [iRaw - 1]) / denominator; } } } } /*******************************************************************************/ double drandf () /* interface with the system dependent random number generator */ { return ((double) rand ()) / ((double) RAND_MAX); } /*******************************************************************************/ void drandgt (double* randg1, double* randg2) /* gaussian numbers with tails included. drawbacks are slower speed and that two, versus one, gaussian numbers are returned. value of pi is not critical (independent of calling program) */ { double r, u1, u2, theta; do { u1 = drandf (); } while (u1 == 0.0); u2 = drandf (); r = sqrt (- 2.0 * log (u1)); theta = 2.0 * PI * u2; *randg1 = r * cos (theta); *randg2 = r * sin (theta); } /*******************************************************************************/ void dtranspose (double rin [3] [3], double rout [3] [3]) /* perform transform of 3x3 matrix. input matrix can be same as output */ { double temp; rout [0] [0] = rin [0] [0]; temp = rin [1] [0]; rout [1] [0] = rin [0] [1]; rout [0] [1] = temp; temp = rin [2] [0]; rout [2] [0] = rin [0] [2]; rout [0] [2] = temp; rout [1] [1] = rin [1] [1]; temp = rin [2] [1]; rout [2] [1] = rin [1] [2]; rout [1] [2] = temp; rout [2] [2] = rin [2] [2]; } /*******************************************************************************/ void dtrrotate (double angle, double vecabout [3], double transform [3] [3]) /* returns a 3x3 transform matrix which rotates about an arbitrary vector derivation starts with vecend=v*cos(angle)*sin(phi)*Q+ v*sin(angle)*sin(phi)*R+ v*cos(phi)*P where P=vecabout Q=vecstartxP/(v*sin(phi)) R=(vecstartxP)xvecstart/(v*sin(phi)) and the terms are separated out to give vecend=transform*vecstart input angle angle of rotaton (rads) vecabout axis of rotation output transform 3x3 rotation transformation matrix */ { double c, s, px, py, pz, rabout [3]; c = cos (angle); s = sin (angle); dunitize (vecabout, rabout); px = rabout [0]; py = rabout [1]; pz = rabout [2]; transform [0] [0] = c * (pz * pz + py * py) + px * px; transform [1] [0] = -c * py * px + s * pz + px * py; transform [2] [0] = -c * pz * px - s * py + px * pz; transform [0] [1] = -c * px * py - s * pz + py * px; transform [1] [1] = c * (px * px + pz * pz) + py * py; transform [2] [1] = -c * pz * py + s * px + py * pz; transform [0] [2] = -c * px * pz + s * py + pz * px; transform [1] [2] = -c * py * pz - s * px + pz * py; transform [2] [2] = c * (py * py + px * px) + pz * pz; } /*******************************************************************************/ void dunitize (double r [3], double ur [3]) /* unitizes a vector into another. input and output vectors can be the same vector */ { double rmag; int i; rmag = dvmag1 (r); for (i = 0; i < 3; i++) ur [i] = r [i] / rmag; } /*******************************************************************************/ double dvmag1 (double r [3]) /* vector magnitude of 1 vector with 3 components */ { return (sqrt (r [0] * r [0] + r [1] * r [1] + r [2] * r [2])); } /*******************************************************************************/ double dvmag3 (double x, double y, double z) /* vector magnitude of 3 components of a vector */ { return (sqrt (x * x + y * y + z * z)); } /*******************************************************************************/ double functionarea(int nPoints, double* x, double* y) /* return the area under the point-wise defined function using unoptimized trapezoid rule integration */ { double sum = 0.0; for (int i = 0; i < nPoints - 1; i++) sum += (x [i + 1] - x [i]) * (y [i + 1] + y [i]) / 2.0; return sum; } /*******************************************************************************/ bool intersecttwolines (double xLine1a, double yLine1a, double xLine1b, double yLine1b, double xLine2a, double yLine2a, double xLine2b, double yLine2b, double* sLine1Int, double* sLine2Int) /* intersect two line segments defined using the two-point equation. return value is true if an intersection occurred. The parameter sLine1Int says where the intersection occurred along the first line, where sLine1Int=0 is at point a and sLine1Int=1 is at point b. The parameter sLine2Int works the same but for the second line */ { /* parameterize the two-point lines as x=(1-s)*xa+s*xb, y=(1-s)*ya+s*yb and then intersect to get s = numerator / denominator */ double denominator, numeratorLine1, numeratorLine2; denominator = (yLine2b - yLine2a) * (xLine1b - xLine1a) - (yLine1b - yLine1a) * (xLine2b - xLine2a); if (dabs(denominator) < 0.000001) return false; // either zero or an infinite number of points intersect numeratorLine1 = (yLine1a - yLine2a) * (xLine2b - xLine2a) - (yLine2b - yLine2a) * (xLine1a - xLine2a); numeratorLine2 = (yLine1b - yLine1a) * (xLine2a - xLine1a) - (yLine2a - yLine1a) * (xLine1b - xLine1a); *sLine1Int = numeratorLine1 / denominator; *sLine2Int = numeratorLine2 / denominator; return true; } /*******************************************************************************/ int lstchm1 (char cstring []) /* returns the position of the last nonblank charater in a string. special case - if string is blank then -1 is returned */ { int ich, numch; numch = strlen (cstring); for (ich = numch - 1; numch > 0; numch--) if (cstring [ich] != ' ') return (ich); return (-1); } /*******************************************************************************/ bool multidimensionalminimization(double** xVectors, double* yVector, int ndim, double tolerance, double minFunction(double*), int iterationmax, int* iteration) /* minimize the multivariable function minFunction. it is defined as double minFunction(double* minVector) where minVector has ndim elements. on input xVectors contains ndim+1 unique vectors, and yVector contains the corresponding minFunction values. on output, xVectors contains the minimized ndim+1 vectors, and yVector contains the corresponding minFunction values following code could be used to initialize before calling this function // allocate xVectors [0:ndim+1] [0:ndim] xVectors = (double**) malloc ((ndim + 1) * sizeof (double)); for (i = 0; i <= ndim; i++) xVectors [i] = (double*) malloc (ndim * sizeof (double)); for (j = 0; j <= ndim; j++) { for (i = 0; i < ndim; i++) xVectors [j] [i] = 0.0; if (j < ndim) xVectors [j] [j] = 1.0; } yVector = (double*) malloc ((ndim + 1) * sizeof (double)); for (j = 0; j <= ndim; j++) yVector [j] = myFunction (xVectors [j]); algorithm iterates until the function range (y(highest)-y(lowest)) is less than the specified tolerance, or the maximum iteration limit has been reached. algorithm success is returned as true or false */ { #define ALPHA 1.0 #define BETA 0.5 #define false 0 #define GAMMA 2.0 #define NMAX 20 #define true 1 double pr [NMAX], prr [NMAX], pbar [NMAX]; double ypr, yprr, rtolerance; int ilow, ihighest, nexthighest, i, j; int ndimplus1 = ndim + 1; *iteration = 0; while (true) /* iterate until convergence criteria are met */ { ilow = 0; if (yVector [0] > yVector [1]) { ihighest = 0; nexthighest = 1; } else { ihighest = 1; nexthighest = 0; } for (i = 0; i < ndimplus1; i++) { if (yVector [i] < yVector [ilow]) ilow = i; if (yVector [i] > yVector [ihighest]) { nexthighest = ihighest; ihighest = i; } else if (yVector [i] > yVector [nexthighest]) if (i != ihighest) nexthighest = i; } rtolerance = fabs (yVector [ihighest] - yVector [ilow]); if (rtolerance < tolerance) return true; if ((*iteration)++ >= iterationmax) return false; for (j = 0; j < ndim; j++) pbar [j] = 0.0; for (i = 0; i < ndimplus1; i++) if (i != ihighest) for (j = 0; j < ndim; j++) pbar [j] += xVectors [i] [j]; for (j = 0; j < ndim; j++) { pbar [j] /= ndim; pr [j] = (1.0 + ALPHA) * pbar [j] - ALPHA * xVectors [ihighest] [j]; } ypr = minFunction (pr); if (ypr <= yVector [ilow]) { for (j = 0; j < ndim; j++) prr [j] = GAMMA * pr [j] + (1.0 - GAMMA) * pbar [j]; yprr = minFunction (prr); if (yprr < yVector [ilow]) { for (j = 0; j < ndim; j++) xVectors [ihighest] [j] = prr [j]; yVector [ihighest] = yprr; } else { for (j = 0; j < ndim; j++) xVectors [ihighest] [j] = pr [j]; yVector [ihighest] = ypr; } } else if (ypr >= yVector [nexthighest]) { if (ypr < yVector [ihighest]) { for (j = 0; j < ndim; j++) xVectors [ihighest] [j] = pr [j]; yVector [ihighest] = ypr; } for (j = 0; j < ndim; j++) prr [j] = BETA * xVectors [ihighest] [j] + (1.0 - BETA) * pbar [j]; yprr = minFunction (prr); if (yprr < yVector [ihighest]) { for (j = 0; j < ndim; j++) xVectors [ihighest] [j] = prr [j]; yVector [ihighest] = yprr; } else { for (i = 0; i < ndimplus1; i++) if (i != ilow) { for (j = 0; j < ndim; j++) { pr [j] = (xVectors [i] [j] + xVectors [ilow] [j]) / 2.0; xVectors [i] [j] = pr [j]; } yVector [i] = minFunction (pr); } } } else { for (j = 0; j < ndim; j++) xVectors [ihighest] [j] = pr [j]; yVector [ihighest] = ypr; } } return false; } /*******************************************************************************/ QRgb pixelRGB(const QImage* image, int x, int y) { /* grab rgb pixel from 1 bit image */ ASSERT_ENGAUGE(image != 0); switch (image->depth()) { case 1: return pixelRGB1(image, x, y); case 8: return pixelRGB8(image, x, y); default: return pixelRGB32(image, x, y); } } /*******************************************************************************/ QRgb pixelRGB1(const QImage* image1Bit, int x, int y) { /* grab pixel from 1 bit image at specified position. each pixel is either black or white see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image1Bit != 0); unsigned int bit; if (image1Bit->bitOrder () == QImage::LittleEndian) bit = *(image1Bit->scanLine (y) + (x >> 3)) & (1 << (x & 7)); else bit = *(image1Bit->scanLine (y) + (x >> 3)) & (1 << (7 - (x & 7))); unsigned int tableIndex = ((bit == 0) ? 0 : 1); return image1Bit->color(tableIndex); } /*******************************************************************************/ QRgb pixelRGB8(const QImage* image8Bit, int x, int y) { /* grab rgb pixel from 8 bit image at specified position see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image8Bit != 0); unsigned int tableIndex = *(image8Bit->scanLine(y) + x); return image8Bit->color(tableIndex); } /*******************************************************************************/ QRgb pixelRGB32(const QImage* image32Bit, int x, int y) { /* grab rgb pixel from 32 bit image at specified position see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image32Bit != 0); unsigned int* p = (unsigned int *)image32Bit->scanLine(y) + x; return *p; } /*******************************************************************************/ bool pointinsidebox(double xI, double yI, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) /* return true if and only if the point I is inside the four-cornered box. the box does not have to be rectangular. ASSUMPTION - quadrilateral is convex */ { /* point is not surrounded if there is a 180 degree region around it that has no corner points in it */ double angle0, angle1, angle2, angle3; double angleMin, angleMax; angle0 = datan2safe(y0 - yI, x0 - xI); angle1 = datan2safe(y1 - yI, x1 - xI); angle2 = datan2safe(y2 - yI, x2 - xI); angle3 = datan2safe(y3 - yI, x3 - xI); angleMin = angle0; angleMax = angle0; if (angle1 < angleMin) { if (angle1 < angleMin - PI) angleMax = max(angleMax, angle1 + 2.0 * PI); else angleMin = angle1; } else angleMax = max(angleMax, angle1); if (angle2 < angleMin) { if (angle2 < angleMin - PI) angleMax = max(angleMax, angle2 + 2.0 * PI); else angleMin = angle2; } else angleMax = max(angleMax, angle2); if (angle3 < angleMin) { if (angle3 < angleMin - PI) angleMax = max(angleMax, angle3 + 2.0 * PI); else angleMin = angle3; } else angleMax = max(angleMax, angle3); return (dabs(angleMax - angleMin) > PI); } /*******************************************************************************/ double polygonarea(int nPoints, double* x, double* y) /* wrapper function around polygonarearecurse that prevents duplicate calculations by using previous results if they still apply. this method is thread safe although it has static variables */ { // inputs and output from previous invocation static int nPointsLast = 0; static double* xLast = 0; static double* yLast = 0; static double areaLast = 0.0; QMutex mutex; mutex.lock(); // have the inputs changed? bool changed = (nPoints != nPointsLast); if (!changed) { for (int i = 0; i < nPoints; i++) if ((x [i] != xLast [i]) || (y [i] != yLast [i])) { changed = true; break; } } if (changed) { // remove previous allocation if (xLast != 0) { delete xLast; xLast = 0; } if (yLast != 0) { delete yLast; yLast = 0; } // save new inputs, reallocating memory nPointsLast = nPoints; areaLast = 0.0; if (nPointsLast > 0) { xLast = new double [nPointsLast]; yLast = new double [nPointsLast]; for (int i = 0; i < nPointsLast; i++) { xLast [i] = x [i]; yLast [i] = y [i]; } // compute new area areaLast = polygonarearecurse (nPointsLast, xLast, yLast, 0); } } mutex.unlock(); return areaLast; } /*******************************************************************************/ double polygonarearecurse(int nPoints, double* x, double* y, int level) /* return the area under the possibly multiply-connected polygon. if unable to allocate memory then return negative area so user will know value is incorrect */ { /* break up polygon into simply connected smaller parts, if the polygon is not already simply connected. note - this function closes the polygon internally - so the last point should NOT be the same as the first point. example, nPoints = 3/4 for a triangle/square this function no longer uses memcpy since negative lengths cause crashes in osx this function is slow, and since it is called for window focus event that can cause sluggish responses. in fact, this effect is probably the cause of crashes in osx. therefore, the polygonareaoptimizer wrapper function should be used */ const double NEGATIVE_AREA = -1.0; // QString inputs = QString("level: %1, points: %2\n").arg(level).arg(nPoints); // for (int iii = 0; iii < nPoints; iii++) // { // inputs += QString("[%1,%2]").arg(x[iii]).arg(y[iii]); // if ((iii % 10 == 9) && (iii != nPoints - 1)) // inputs += QString("\n"); // } // QMessageBox::critical(0, QString("polygonarea"), inputs); // fprintf (stderr, "%s\n\n", inputs.latin1()); if (nPoints < 3) return 0.0; for (int linea = 0; linea < nPoints - 1; linea++) for (int lineb = linea + 1; lineb < nPoints; lineb++) { int linebp1 = lineb + 1; if (linebp1 >= nPoints) linebp1 -= nPoints; double sLineaInt, sLinebInt; if (intersecttwolines (x [linea], y [linea], x [linea + 1], y [linea + 1], x [lineb], y [lineb], x [linebp1], y [linebp1], &sLineaInt, &sLinebInt) && (0 < sLineaInt) && (sLineaInt < 1) && (0 < sLinebInt) && (sLinebInt < 1)) { /* lines between points linea and linea+1, and lineb and lineb+1, cross each other. break up each line to create two new polygons */ /* a pathological case occurs when the number of points in either of the two subareas equals the nPoints (nPointsArea1 or nPointsArea2 is zero). in this case, this function will recurse forever because the smaller subareas are not actually smaller. this infinite recursion indeed happens on the mac powerpc for the corners.png sample file. applying some algebra to the constraints that neither nPointsArea1 nor nPointsArea2 can equal nPoints gives the interesting result that the difference lineb-linea can never be 1 nor nPoints-1. after some reflection, this makes sense for two reasons: 1) if nPointsArea1 equals nPoints then nPointsArea2 equals two, or if nPointsArea2 equals nPoints then nPointsArea1 equals two, and we can only subdivide the areas into triangles 2) this case corresponds to a vertex, and not the intersection of two closed polygons */ int nPointsArea1 = (linea + 1) + (1) + (nPoints - lineb - 1); int nPointsArea2 = (lineb - linea) + (1); if ((nPoints != nPointsArea1) && (nPoints != nPointsArea2)) { /* recurse*/ int iFrom, iTo; /* all combinations of memory allocation failures are handled */ double* xArea1 = 0; double* yArea1 = 0; double* xArea2 = 0; double* yArea2 = 0; /* recurse for first area */ double area1 = NEGATIVE_AREA; xArea1 = new double [nPointsArea1]; yArea1 = new double [nPointsArea1]; if ((xArea1 != 0) && (yArea1 != 0)) { for (iFrom = 0, iTo = 0; iTo < linea + 1; iFrom++, iTo++) { xArea1 [iTo] = x [iFrom]; yArea1 [iTo] = y [iFrom]; } xArea1 [linea + 1] = (1.0 - sLineaInt) * x [linea] + sLineaInt * x [linea + 1]; yArea1 [linea + 1] = (1.0 - sLineaInt) * y [linea] + sLineaInt * y [linea + 1]; for (iFrom = lineb + 1, iTo = linea + 2; iTo < nPointsArea1; iFrom++, iTo++) { xArea1 [iTo] = x [iFrom]; yArea1 [iTo] = y [iFrom]; } area1 = polygonarearecurse (nPointsArea1, xArea1, yArea1, level + 1); } /* recurse for second area */ double area2 = NEGATIVE_AREA; xArea2 = new double [nPointsArea2]; yArea2 = new double [nPointsArea2]; if ((xArea1 != 0) && (yArea1 != 0) && (xArea2 != 0) && (yArea2 != 0)) { for (iFrom = linea + 1, iTo = 0; iTo < lineb - linea; iFrom++, iTo++) { xArea2 [iTo] = x [iFrom]; yArea2 [iTo] = y [iFrom]; } xArea2 [lineb - linea] = xArea1 [linea + 1]; yArea2 [lineb - linea] = yArea1 [linea + 1]; area2 = polygonarearecurse (nPointsArea2, xArea2, yArea2, level + 1); } /* allocated arrays can be safely released now */ if (xArea1) delete[] xArea1; if (yArea1) delete[] yArea1; if (xArea2) delete[] xArea2; if (yArea2) delete[] yArea2; if ((area1 < 0.0) || (area2 < 0.0)) return NEGATIVE_AREA; return area1 + area2; } } } // area of a general simply-connected polygon double columnleft = 0.0, columnright = 0.0; int i, ip1; for (i = 0; i < nPoints; i++) { ip1 = (i + 1) % nPoints; // cast the integers to double so integer overflow does not give negative column values columnleft += ((double) x [ip1]) * ((double) y [i]); columnright += ((double) x [i]) * ((double) y [ip1]); } return dabs(columnleft - columnright) / 2.0; } /*******************************************************************************/ void projectpointontoline(double xCenter, double yCenter, double xStart, double yStart, double xStop, double yStop, double* xProjection, double* yProjection) /* find closest point to (x, y) on the line segment from (xStart, yStart) to (xStop, yStop). closest point is kept between the start and stop point */ { if (dabs (yStart - yStop) < 0.000001) { /* special case - line segment is vertical */ *yProjection = yStart; double s = (xCenter - xStart) / (xStop - xStart); if (s < 0) *xProjection = xStart; else if (s > 1) *xProjection = xStop; else *xProjection = (1.0 - s) * xStart + s * xStop; } else { /* general case - compute slope and intercept of line through (xCenter, yCenter) */ double slope = (xStop - xStart) / (yStart - yStop); double yintercept = yCenter - slope * xCenter; /* intersect center point line (slope-intercept form) with start-stop line (parametric form x=(1-s)*x1+s*x2, y=(1-s)*y1+s*y2) */ double s = (slope * xStart + yintercept - yStart) / (yStop - yStart + slope * (xStart - xStop)); if (s < 0) { *xProjection = xStart; *yProjection = yStart; } else if (s > 1) { *xProjection = xStop; *yProjection = yStop; } else { *xProjection = (1.0 - s) * xStart + s * xStop; *yProjection = (1.0 - s) * yStart + s * yStop; } } } /*******************************************************************************/ double radians2degrees (double argument) /* convert argument in radians to degrees */ { return (argument * 45.0 / atan((double) 1.0)); } /*******************************************************************************/ double roundofftopower(double arg, int roundoffPower) { double powerOf10 = pow ((double) 10, roundoffPower); return powerOf10 * floor (arg / powerOf10 + 0.5); } /*******************************************************************************/ void setPixelRGB(QImage* image, int x, int y, QRgb q) { /* set rgb pixel in 1 bit image */ ASSERT_ENGAUGE(image != 0); switch (image->depth()) { case 1: setPixelRGB1(image, x, y, q); return; case 8: setPixelRGB8(image, x, y, q); return; case 32: setPixelRGB32(image, x, y, q); return; } } /*******************************************************************************/ void setPixelRGB1(QImage* image1Bit, int x, int y, QRgb q) { /* set rgb pixel in 1 bit image at specified position see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image1Bit != 0); for (int index = 0; index < image1Bit->numColors(); index++) if (q == image1Bit->color(index)) { if (image1Bit->bitOrder () == QImage::LittleEndian) { *(image1Bit->scanLine (y) + (x >> 3)) &= ~(1 << (x & 7)); if (index > 0) *(image1Bit->scanLine (y) + (x >> 3)) |= index << (x & 7); } else { *(image1Bit->scanLine (y) + (x >> 3)) &= ~(1 << (7 - (x & 7))); if (index > 0) *(image1Bit->scanLine (y) + (x >> 3)) |= index << (7 - (x & 7)); } return; } } /*******************************************************************************/ void setPixelRGB8(QImage* image8Bit, int x, int y, QRgb q) { /* set rgb pixel in 8 bit image at specified position see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image8Bit != 0); for (int index = 0; index < image8Bit->numColors(); index++) if (q == image8Bit->color(index)) { *(image8Bit->scanLine(y) + x) = index; return; } } /*******************************************************************************/ void setPixelRGB32(QImage* image32Bit, int x, int y, QRgb q) { /* set rgb pixel in 32 bit image at specified position see detailed description of QImage class to understand this */ ASSERT_ENGAUGE(image32Bit != 0); int* p = (int *)image32Bit->scanLine(y) + x; *p = q; } /*******************************************************************************/ int valuePower(double value) { // compute power of 10 for input value, rounding down to nearest // integer solution of value>=10**solution const int minPower = -30; // MAX_DOUBLE is 10^38 double avalue = dabs(value); if (avalue < pow(10.0, minPower)) return minPower; else return (int) floor (log10 (avalue)); } engauge-digitizer-5.2/src/mmsubs.h000066400000000000000000000136461222557406400172520ustar00rootroot00000000000000/*************************************************************************** mmsubs.h - description ------------------- begin : Sat Nov 2 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MMSUBS_H #define MMSUBS_H #include #include #include // mutually exclusive descriptions of ordinate, and also of abscissa enum mmUnits { mmCartesian, mmDegrees, mmGradians, mmRadians }; #define RGB_BLACK Qt::black.rgb() #define RGB_WHITE Qt::white.rgb() const int S2G_SUCCESS = 0; const int S2G_BAD_GRAPH_COORDINATES = 1; const int S2G_BAD_SCREEN_COORDINATES = 2; extern int adjust_count (bool linearAxis, double start, double stop, double inc); extern double adjust_inc (bool linearAxis, int roundoffPower, double start, double stop, int count); extern double adjust_start (bool linearAxis, int roundoffPower, double stop, double inc, int count); extern double adjust_stop (bool linearAxis, int roundoffPower, double start, double inc, int count); extern double angleleft (double x0, double y0, double x1, double y1, double x2, double y2); extern double angleright (double x0, double y0, double x1, double y1, double x2, double y2); extern void axisScale(double x_min_in, double x_max_in, bool linearAxis, double* x_start, double* x_stop, double* x_delta, int* x_count); extern bool clippedsegmentisvisible(double xTopLeft, double yTopLeft, double xTopRight, double yTopRight, double xBottomRight, double yBottomRight, double xBottomLeft, double yBottomLeft, double* xStart, double* yStart, double* xStop, double* yStop); extern bool compute_linear_to_log (double* v, double vMin, double vMax); extern bool compute_log_to_linear (double* v, double vMin, double vMax); extern int compute_screen_to_graph (double [3] [3], double [3] [3], double [3] [3], double [3] [3]); extern void convertfromcartesian(mmUnits units, double x, double y, double originRadius, double *xTheta, double *yR); extern void converttocartesian(mmUnits units, double xTheta, double yR, double originRadius, double *x, double *y); extern double dabs (double); extern double dangle (double [3], double [3]); extern double dangle_4_quadrant (double [3], double [3], double [3]); extern double dasinsafe (double); extern double datan2safe (double, double); extern void dcross (double [3], double [3], double [3]); extern double ddot (double [3], double [3]); extern double degrees2radians (double argument); extern bool dinverse (double* a, int n, int np, int* iworkn, double* y, double* workn, double* worknn); extern double distancetoline(double x, double y, double x1, double y1, double x2, double y2); extern void dlincom (double, double [3], double, double [3], double [3]); extern void dloadi (double [3] [3]); extern bool dlubksb (double* a, int n, int np, int* index, double* b); extern bool dludcmp (double* a, int n, int np, int* index, double* workn); extern void dmlt3x1 (double [3], const double [3] [3], const double [3]); extern void dmlt3x3 (double [3] [3], const double [3] [3], const double [3] [3]); void double_interpolate (int lengthRaw, double *xRaw, double *yRaw, int lengthInt, double *xInt, double *yInt); extern double drandf (); extern void drandgt (double *, double *); extern void dtranspose (double [3] [3], double [3] [3]); extern void dtrrotate (double, double [3], double [3] [3]); extern void dunitize (double [3], double [3]); extern double dvmag1 (double [3]); extern double dvmag3 (double, double, double); extern double functionarea(int npoints, double* x, double* y); extern bool intersecttwolines (double xLine1a, double yLine1a, double xLine1b, double yLine1b, double xLine2a, double yLine2a, double xLine2b, double yLine2b, double* sLine1Int, double* sLine2Int); extern int lstchm1 (char *); extern bool multidimensionalminimization(double** xVectors, double* yVector, int ndim, double tolerance, double minFunction(double *), int iterationmax, int* iteration); extern QRgb pixelRGB(const QImage* image, int x, int y); extern QRgb pixelRGB1(const QImage* image1Bit, int x, int y); extern QRgb pixelRGB8(const QImage* image8Bit, int x, int y); extern QRgb pixelRGB32(const QImage* image32Bit, int x, int y); extern bool pointinsidebox(double xI, double yI, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); extern double polygonarearecurse(int npoints, double* x, double* y, int level); extern double polygonarea(int npoints, double* x, double* y); extern void projectpointontoline(double xCenter, double yCenter, double xStart, double yStart, double xStop, double yStop, double* xProjection, double* yProjection); extern double radians2degrees (double argument); extern double roundofftopower(double, int); extern void setPixelRGB(QImage* image, int x, int y, QRgb q); extern void setPixelRGB1(QImage* image1Bit, int x, int y, QRgb q); extern void setPixelRGB8(QImage* image8Bit, int x, int y, QRgb q); extern void setPixelRGB32(QImage* image32Bit, int x, int y, QRgb q); extern int valuePower(double value); /* functions that can handle variably dimensioned arrays use the FOLD2DINDEX macro to manually fold the array indices */ #define FOLD2DINDEX(i,j,jmax) ((i)*(jmax)+j) #endif // MMSUBS_H engauge-digitizer-5.2/src/mrudocuments.cpp000066400000000000000000000130051222557406400210110ustar00rootroot00000000000000/*************************************************************************** mrudocuments.cpp - description ------------------- begin : Sat Sep 25 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "mrudocuments.h" #include "digitdebug.h" #include "defaultsettings.h" #include "main.h" //Added by qt3to4: #include MruDocuments::MruDocuments() : m_pParentMenu(0), m_parentActionId(-1), m_frameOffset(0, 0), m_pPopup(0), m_mruMax(0) { DigitDebug::ctor(QString("mrudocuments ") + QString::number((ulong) this, 16)); m_mruMax = DefaultSettings::instance().getMruMax(); } MruDocuments::~MruDocuments() { DigitDebug::dtor(QString("mrudocuments ") + QString::number((ulong) this, 16)); m_mruDocuments.setAutoDelete(true); while (m_mruDocuments.count() > 0) m_mruDocuments.removeLast(); // autoDelete is on if (m_pPopup != 0) delete m_pPopup; } void MruDocuments::attachPopupMenu(QMenu* pParentMenu, int parentActionId, QSize frameOffset) { ASSERT_ENGAUGE(m_pParentMenu == 0); m_pParentMenu = pParentMenu; m_parentActionId = parentActionId; // mru popup menu is offset from the parent popup menu m_frameOffset = QPoint(frameOffset.width(), frameOffset.height()); // create mru popup menu m_pPopup = new QMenu("mru list", pParentMenu); CHECK_PTR_ENGAUGE(m_pPopup); m_pPopup->hide(); // insert initial entries from settings QStringList list = DefaultSettings::instance().getMruDocuments(); QStringList::iterator itr; for (itr = list.begin(); itr != list.end(); ++itr) appendDocumentToList(*itr); reconnectActionsToPopupMenu(); // receive activation of an mru entry connect(m_pPopup, SIGNAL(activated(int)), this, SLOT(slotMruActivated(int))); } void MruDocuments::mergeDocument(QString doc) { // if this document is already the first in the list, then nothing needs to be done if (!m_mruDocuments.isEmpty()) if (doc == m_mruDocuments.first()->text()) return; // disconnect all of the entries from the popup menu since list must be built with the newest entry // first and there is no way to move entries around in the popup menu QAction* pAction; for (pAction = m_mruDocuments.first(); pAction; pAction = m_mruDocuments.next()) pAction->removeFrom(m_pPopup); // remove duplicate entry from list if it exists for (pAction = m_mruDocuments.first(); pAction; pAction = m_mruDocuments.next()) if (doc == pAction->text()) { m_mruDocuments.remove(pAction); // autodelete is off delete pAction; break; } prependDocumentToList(doc); reconnectActionsToPopupMenu(); } bool MruDocuments::isEmpty() { return m_mruDocuments.isEmpty(); } void MruDocuments::appendDocumentToList(QString doc) { if ((int) m_mruDocuments.count() < m_mruMax) { QAction* pAction = new QAction(doc, 0); CHECK_PTR_ENGAUGE(pAction); m_mruDocuments.append(pAction); } } void MruDocuments::prependDocumentToList(QString doc) { // insert new entry into list QAction* pAction = new QAction(doc, 0); CHECK_PTR_ENGAUGE(pAction); m_mruDocuments.prepend(pAction); // remove entries if the limit is exceeded. since only one entry is added at a time, only // one entry might have to be removed if ((int) m_mruDocuments.count() > m_mruMax) { pAction = m_mruDocuments.last(); m_mruDocuments.removeLast(); ASSERT_ENGAUGE(pAction != 0); delete pAction; } } void MruDocuments::reconnectActionsToPopupMenu() { // reconnect actions, now that they have been sorted, to popup menu QStringList list; for (QAction* pAction = m_mruDocuments.first(); pAction; pAction = m_mruDocuments.next()) { pAction->addTo(m_pPopup); list.append(pAction->text()); } // update settings DefaultSettings::instance().setMruDocuments(list); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void MruDocuments::slotActionHighlighted(int id) { if (!isEmpty() && (m_pPopup != 0)) { if (id == m_parentActionId) { // since parent popup menu may have moved, reposition this frame m_pPopup->move(m_pParentMenu->pos() + m_frameOffset); m_pPopup->show(); } else { m_pPopup->hide(); } } } void MruDocuments::slotActionUnhighlighted() { if (m_pPopup != 0) { m_pPopup->hide(); } } void MruDocuments::slotMruActivated(int id) { // search for the action having the specified id, since the id and index are different quantities for (int index = 0; index < (int) m_mruDocuments.count(); index++) if (id == m_pPopup->idAt(index)) { QAction* pAction = m_mruDocuments.at(index); if (pAction != 0) emit(mruChosen(pAction->text())); break; } } engauge-digitizer-5.2/src/mrudocuments.h000066400000000000000000000060521222557406400204620ustar00rootroot00000000000000/*************************************************************************** mrudocuments.h - description ------------------- begin : Sat Sep 25 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef MRUDOCUMENTS_H #define MRUDOCUMENTS_H #include #include #include typedef Q3PtrList MruDocumentList; // class that maintains the most recently used document list in the main menu class MruDocuments : public QObject { Q_OBJECT public: MruDocuments(); ~MruDocuments(); // create and attach popup menu during startup, but hide it when it is not needed void attachPopupMenu(QMenu* pParentMenu, int m_parentActionId, QSize frameOffset); // merge a document that has just been: // -opened (it has a new name) // -saved for the first time (it has a new name) // -resaved but with a new name (it has a new name) void mergeDocument(QString doc); // are there any documents? bool isEmpty(); public slots: // one of the actions in the parent popup menu has been highlighted void slotActionHighlighted(int id); // the highlighted action in the parent popup menu is leaving the highlighted state void slotActionUnhighlighted(); // mru item was activated void slotMruActivated(int id); signals: // open the mru document that was just chosen void mruChosen(QString filename); private: // a document can be either prepended to the begining of the list, or appended to the end void appendDocumentToList(QString doc); void prependDocumentToList(QString doc); // reconnect actions to popup menu void reconnectActionsToPopupMenu(); // parent popup menu and action QMenu* m_pParentMenu; int m_parentActionId; // top left of mru frame is at frame offset plus current position of parent popup menu QPoint m_frameOffset; // popup menu that will contain the most recently used document list. this is hidden until needed QMenu* m_pPopup; // max size of mru list int m_mruMax; // dynamic list of mru documents has one QAction per document. if a // document is merged more than once, its previous action is removed MruDocumentList m_mruDocuments; }; #endif // MRUDOCUMENTS_H engauge-digitizer-5.2/src/osxsubs.cpp000066400000000000000000000030371222557406400177760ustar00rootroot00000000000000/*************************************************************************** osxsubs.cpp - description ------------------- begin : Sun Nov 7 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include "osxsubs.h" #ifdef Q_OS_MACX #include QDir userManualPath() { CFURLRef pluginRef = CFBundleCopyBundleURL(CFBundleGetMainBundle()); CFStringRef macPath = CFURLCopyFileSystemPath(pluginRef, kCFURLPOSIXPathStyle); const char *pathPtr = CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding()); QString p(pathPtr); p += "/Contents/Resources/usermanual"; return QDir(p); } #endif engauge-digitizer-5.2/src/osxsubs.h000066400000000000000000000022161222557406400174410ustar00rootroot00000000000000/*************************************************************************** osxsubs.h - description ------------------- begin : Sun Nov 7 2004 copyright : (C) 2004 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef OSXSUBS_H #define OSXSUBS_H #include #ifdef Q_OS_MACX extern QDir userManualPath(); #endif // Q_OS_MACX #endif // OSXSUBS_H engauge-digitizer-5.2/src/point.cpp000066400000000000000000000076561222557406400174340ustar00rootroot00000000000000/*************************************************************************** point.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "pointset.h" #include "point.h" #include "digitdebug.h" #include "main.h" Point::Point(int xScreen, int yScreen, Q3Canvas* canvas) : Q3CanvasPolygonalItem(canvas), m_pointSet(0), m_xScreen(xScreen), m_yScreen(yScreen), m_xThetaGraph(0.0), m_yRGraph(0.0), m_linePrev(0), m_lineNext(0), m_xThetaDefined(false), m_yRDefined(false) { DigitDebug::ctor(QString("point ") + QString::number((ulong) this, 16)); // this new point is not shown until setPointSet, since it is not connected to any pointset } Point::Point(int xScreen, int yScreen, double xThetaGraph, double yRGraph, Q3Canvas* canvas) : Q3CanvasPolygonalItem(canvas), m_pointSet(0), m_xScreen(xScreen), m_yScreen(yScreen), m_xThetaGraph(xThetaGraph), m_yRGraph(yRGraph), m_linePrev(0), m_lineNext(0), m_xThetaDefined(true), m_yRDefined(true) { DigitDebug::ctor(QString("point ") + QString::number((ulong) this, 16)); // this new point is not shown until setPointSet, since it is not connected to any pointset } Point::~Point() { DigitDebug::dtor(QString("point ") + QString::number((ulong) this, 16)); // all subclasses of QCanvasPolygonalItem must call hide in destructor hide(); } void Point::setPointSet(const PointSet* pointSet) { m_pointSet = pointSet; // show this point setZ(ZPoints); show(); // do not call QCanvasPolygonalItem::invalidate here in an attempt to get points to appear // in preview window in osx. doing so will cause bizarre behavior (i.e. points disappear // upon closing export setup dialog) } Q3PointArray Point::areaPoints() const { ASSERT_ENGAUGE(m_pointSet != 0); return PointSetStyles::instance().areaPoints(m_xScreen, m_yScreen, m_pointSet->style()); } void Point::drawShape(QPainter &p) { ASSERT_ENGAUGE(m_pointSet != 0); PointSetStyles::instance().drawShape(p, m_xScreen, m_yScreen, m_pointSet->style()); } void Point::moveBy(double xDelta, double yDelta) { // moving visible point causes fatal error in qt library during next repaint, so temporarily hide this point hide(); // move this point Q3CanvasPolygonalItem::moveBy(xDelta, yDelta); m_xScreen += (int) xDelta; m_yScreen += (int) yDelta; // move the attached lines if (m_linePrev) { QPoint start = m_linePrev->startPoint(); QPoint end = m_linePrev->endPoint(); m_linePrev->setPoints(start.x(), start.y(), end.x() + (int) xDelta, end.y() + (int) yDelta); } if (m_lineNext) { QPoint start = m_lineNext->startPoint(); QPoint end = m_lineNext->endPoint(); m_lineNext->setPoints(start.x() + (int) xDelta, start.y() + (int) yDelta, end.x(), end.y()); } // finished with move so make point visible again. see hide() above show(); } void Point::dumpPoint() { qDebug("point this %lx m_pointSet %lx xScreen %d yScreen %d xThetaGraph %g yRGraph %g", (unsigned long) this, (unsigned long) m_pointSet, m_xScreen, m_yScreen, m_xThetaGraph, m_yRGraph); } engauge-digitizer-5.2/src/point.h000066400000000000000000000131701222557406400170650ustar00rootroot00000000000000/*************************************************************************** point.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINT_H #define POINT_H #include #include #include //Added by qt3to4: #include #include #include "digitdef.h" #include "pointsetstyles.h" class PointSet; // class used to store axis, segment, curve and measure points. Whether a point is an axis // point or data point is determined by identifying which pointset the point is assigned to. // // this class was originally derived from QCanvasPolygon. Unfortunately that class // does not support an outline (the pen is always NoPen), and we would like to offer // the option of an empty outline since that might be easier to align. class Point : public Q3CanvasPolygonalItem { public: Point(int xScreen, int yScreen, Q3Canvas* canvas); Point(int xScreen, int yScreen, double xThetaGraph, double yRGraph, Q3Canvas* canvas); ~Point(); // explicitly set the parent pointset. this allows access to the pointset style void setPointSet(const PointSet* pointSet); const PointSet* pointSet(void) { return m_pointSet; } // get and set methods for coordinates int xScreen(void) { return m_xScreen; } int yScreen(void) { return m_yScreen; } double xThetaGraph(void) { return m_xThetaGraph; } double yRGraph(void) { return m_yRGraph; } void setXThetaGraph(double xThetaGraph) { m_xThetaGraph = xThetaGraph; m_xThetaDefined = true; } void setYRGraph(double yRGraph) { m_yRGraph = yRGraph; m_yRDefined = true; } // axes and scale bar points are created, and displayed, well before their graph coordinates // are defined by the user (publicly) and calls to setXThetaGraph and setYRGraph (behind the scenes) bool graphCoordsAreDefined(void) { return m_xThetaDefined && m_yRDefined; } // move the point. this is called often during moves so graph coordinates are not updated virtual void moveBy(double xDelta, double yDelta); // QCanvasPolygonalItem function that returns the bounding points virtual Q3PointArray areaPoints(void) const; // get and set methods for the attached lines Q3CanvasLine* linePrev(void) { return m_linePrev; } Q3CanvasLine* lineNext(void) { return m_lineNext; } void setLinePrev(Q3CanvasLine* line) { m_linePrev = line; } void setLineNext(Q3CanvasLine* line) { m_lineNext = line; } // bounds of lines on left and right sides, if they exist QRect boundsLineLeft(void) { return m_linePrev->boundingRect(); } QRect boundsLineRight(void) { return m_lineNext->boundingRect(); } // run time type id int rtti(void) const { return Rtti_Point; } // debug void dumpPoint(void); protected: // QCanvasPolygonalItem function that draws the polygonal item using the pen and brush void drawShape(QPainter& p); private: const PointSet* m_pointSet; // screen coordinates are in pixels. They are only modified by a click-and-drag operation int m_xScreen; int m_yScreen; // graph coordinates are input by the user for axis points, and are a function // of the screen coordinates and the axis points for data points. If the cartesian flag // is set then xThetaGraph and yRGraph correspond to x and y respectively, otherwise they // correspond to theta and r respectively with the units enumerated in Units double m_xThetaGraph; double m_yRGraph; // lines attached to previous and next points in the pointset. each line is shared by // two adjacent points Q3CanvasLine* m_linePrev; Q3CanvasLine* m_lineNext; // true after xTheta and yR graph coordinates have been defined bool m_xThetaDefined; bool m_yRDefined; }; // pointer list that also sorts Point objects by xTheta coordinate. compilation // under Mandrake 10.1 (gcc version unknown) of compareItems will fail unless the // Point class is defined above, since the forward declaration is apparently not // enough and "invalid use of undefined type 'struct Point'" errors appear template class PointPtrList: public Q3PtrList { protected: virtual int compareItems(Q3PtrCollection::Item item1, Q3PtrCollection::Item item2) { Point* p1 = (Point*) item1; Point* p2 = (Point*) item2; if (p1->xThetaGraph() < p2->xThetaGraph()) return -1; else if (p1->xThetaGraph() > p2->xThetaGraph()) return 1; else return 0; } }; // the point lists are pointer lists (versus value lists) so that, for brief // intervals, there can be multiple pointsets that share the same points. Further // information can be found in the PointSets comments typedef PointPtrList PointList; typedef Q3PtrListIterator PointListIterator; #endif // POINT_H engauge-digitizer-5.2/src/pointmatch.cpp000066400000000000000000000164741222557406400204470ustar00rootroot00000000000000/*************************************************************************** pointmatch.cpp - description ------------------- begin : Tue Jan 6 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include #include #ifdef WIN32 #include #endif #include "main.h" #include "mmsubs.h" #include "digitdebug.h" #include "discretize.h" #include "pointmatch.h" #include "pointmatchthread.h" // Directions for isolateSampleMatchPoint. Since that algorithm goes in a counterclockwise pattern these // are in clockwise order enum Direction { DIR_LEFT, // First try going right up (which is to the back right in the reference frame of a left vector) DIR_LEFT_DOWN, // First try going up (which is to the back right in the reference frame of a left/down vector) DIR_DOWN, // First try going left up (which is to the back right in the reference frame of a down vector) DIR_RIGHT_DOWN,// First try going left (which is to the back right in the reference frame of a right/down vector) DIR_RIGHT, // First try going left down (which is to the back right in the reference frame of a right vector) DIR_RIGHT_UP, // First try going down (which is to the back right in the reference frame of a right/up vector) DIR_UP, // First try going right down (which is to the back right in the reference frame of a up vector) DIR_LEFT_UP, // First try going right (which is to the back right in the reference frame of a left/right vector) NUMBER_DIRECTIONS }; PointMatch::PointMatch() { DigitDebug::ctor(QString("pointmatch ") + QString::number((ulong) this, 16)); } PointMatch::~PointMatch() { DigitDebug::dtor(QString("pointmatch ") + QString::number((ulong) this, 16)); } bool PointMatch::isolateSampleMatchPoint(QPolygon* samplePointPixels, const QImage &image, PointMatchSettings settings, int x, int y) { #ifdef LOG_MATCH_POINT QFile data ("dbg.log"); QTextStream *out; if (data.open (QFile::WriteOnly | QFile::Truncate)) { out = new QTextStream (&data); } const char *directions [] = { "left ", "left/down ", "down ", "right/down", "right ", "right/up ", "up ", "left/up "}; #endif if ((x < 0) || (y < 0) || (image.width() <= x) || (image.height() <= y)) return false; // out of bounds Discretize discretize; if (!discretize.processedPixelIsOn(image, x, y)) return false; // pixel is off int xCenter = x, yCenter = y; int xLeft = xCenter - settings.pointSize / 2; int yTop = yCenter - settings.pointSize / 2; int xRight = xCenter + settings.pointSize / 2; int yBottom = yCenter + settings.pointSize / 2; int xMin = (xLeft > 0 ) ? xLeft : 0; int yMin = (yTop > 0 ) ? yTop : 0; int xMax = (xRight < image.width () ) ? xRight : image.width (); int yMax = (yBottom < image.height ()) ? yBottom : image.height (); // Go to the right until just after edge or the right side, whichever comes first do { if (discretize.processedPixelIsOn(image, x, y)) { ++x; } else { break; } } while (x < xMax); --x; // Now jump from the outside back to the inside of the right side int xStart = x, yStart = y; // Go counterclockwise around (xCenter,yCenter), along the edge of the selected points or the // settings.pointSize boundary, until we reach (xStart,yStart) again ASSERT_ENGAUGE(samplePointPixels != 0); Direction previousDirection = DIR_LEFT; // Start with this to get first try going up right while ((samplePointPixels->size () == 0) ||(x != xStart) || (y != yStart)) { #ifdef LOG_MATCH_POINT *out << " direction=" << directions [previousDirection] << " x=" << x << " y=" << y << endl; #endif // Try the directions other than previousDirection until we find the first that has an on-pixel for (int directionOffset = 5; directionOffset < 5 + NUMBER_DIRECTIONS; directionOffset++) { // Compute next direction from previous direction and offset Direction nextDirection = (Direction) ((previousDirection + directionOffset) % NUMBER_DIRECTIONS); int xNext = x, yNext = y; switch (nextDirection) { case DIR_LEFT: xNext = x - 1; break; case DIR_LEFT_DOWN: xNext = x - 1; yNext = y + 1; break; case DIR_DOWN: yNext = y + 1; break; case DIR_RIGHT_DOWN: xNext = x + 1; yNext = y + 1; break; case DIR_RIGHT: xNext = x + 1; break; case DIR_RIGHT_UP: xNext = x + 1; yNext = y - 1; break; case DIR_UP: yNext = y - 1; break; case DIR_LEFT_UP: xNext = x - 1; yNext = y - 1; break; case NUMBER_DIRECTIONS: break; } if ((xMin <= xNext) && (xNext < xMax) && (yMin <= yNext) && (yNext < yMax)) { if (discretize.processedPixelIsOn(image, xNext, yNext)) { // We just found the first on-pixel. Save it and exit the inner loop int newSize = samplePointPixels->size() + 1; samplePointPixels->resize(newSize); samplePointPixels->setPoint(newSize - 1, xNext, yNext); x = xNext; y = yNext; previousDirection = nextDirection; break; } } } } #ifdef LOG_MATCH_POINT data.close (); #endif return true; } void PointMatch::matchSamplePoint(const QImage &imageProcessed, PointMatchSettings settings, const QPolygon &samplePointPixels, const QPolygon &pointsExisting, QList* pointsCreated) { QDialog dlg; dlg.setFixedSize(410, 70); dlg.setModal(true); // modeless would allow app to close with dialog still open! QLabel* labelComment = new QLabel(QObject::tr("Processing..."), &dlg); CHECK_PTR_ENGAUGE(labelComment); labelComment->setGeometry(10, 10, 390, 30); dlg.show(); PointMatchThread thread(imageProcessed, settings, samplePointPixels, pointsExisting); // start thread thread.start(); const unsigned long SLEEP_IN_SECONDS = 1; while (!thread.isFinished()) { qApp->processEvents(); #ifdef WIN32 // _sleep(SLEEP_IN_SECONDS); Sleep(SLEEP_IN_SECONDS); #else sleep(SLEEP_IN_SECONDS); #endif } *pointsCreated = thread.pointsCreated(); } engauge-digitizer-5.2/src/pointmatch.h000066400000000000000000000057261222557406400201120ustar00rootroot00000000000000/*************************************************************************** pointmatch.h - description ------------------- begin : Tue Jan 6 2003 copyright : (C) 2003 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTMATCH_H #define POINTMATCH_H #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include "digitdef.h" #include "digitdebug.h" #include "fftw3.h" class Match; // pointer list that also sorts Match objects by xTheta coordinate template class MatchPtrList: public Q3PtrList { protected: virtual int compareItems(Q3PtrCollection::Item item1, Q3PtrCollection::Item item2) { PointMatchTriplet* p1 = (PointMatchTriplet*) item1; PointMatchTriplet* p2 = (PointMatchTriplet*) item2; if (p1->correlation > p2->correlation) return -1; else if (p1->correlation < p2->correlation) return 1; else return 0; } }; // the point lists are pointer lists (versus value lists) so that, for brief // intervals, there can be multiple pointsets that share the same points. Further // information can be found in the PointSets comments typedef MatchPtrList PointMatchList; // this class searches through the original or processed image and // isolates candidate match points. the matches are sorted by // quality of match class PointMatch { public: PointMatch(); ~PointMatch(); // recursively isolate the "on" pixels around (x,y). return true if pixel at (x,y) was on bool isolateSampleMatchPoint(QPolygon * samplePointPixels, const QImage &image, PointMatchSettings settings, int x, int y); // create document points that match the sample point under the cursor static void matchSamplePoint(const QImage &imageProcessed, PointMatchSettings settings, const QPolygon &samplePointPixels, const QPolygon &pointsExisting, QList* pointsCreated); }; #endif // POINTMATCH_H engauge-digitizer-5.2/src/pointmatchdlg.cpp000066400000000000000000000347321222557406400211330ustar00rootroot00000000000000/*************************************************************************** discretizedlg.cpp - description ------------------- begin : Thu Jan 1 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //Added by qt3to4: #include #include #include #include #include "pointmatchdlg.h" #include "digitdebug.h" #include "main.h" #include "highlight.h" #include "img/whatsthis.xpm" #include "img/matchdiamond.xpm" #include "img/matchcircle.xpm" #include "img/matchsquare.xpm" PointMatchDlg::PointMatchDlg(const QString title, PointSetStyle style, PointMatchSettings* settings) : QDialog(0, "pointmatchdlg", true), title(title), style(style), settings(settings), highlight(0) { DigitDebug::ctor(QString("pointmatchdlg ") + QString::number((ulong) this, 16)); setCaption(tr("Point Match - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(360, 390); labelPointSeparation = new QLabel(tr("Point Separation:"), this); CHECK_PTR_ENGAUGE(labelPointSeparation); labelPointSeparation->setGeometry(10, 10, 200, 30); editPointSeparation = new QLineEdit(this); CHECK_PTR_ENGAUGE(editPointSeparation); editPointSeparation->setGeometry(220, 10, 130, 30); editPointSeparation->setText(QString("%1").arg(settings->pointSeparation)); QWhatsThis::add(editPointSeparation, QString(tr("Select a point separation in pixels.\n\n" "Matched points must be separated from existing points by at least this number of pixels.\n\n" "This value has a lower limit"))); validatorPointSeparation = new QIntValidator(editPointSeparation); CHECK_PTR_ENGAUGE(validatorPointSeparation); editPointSeparation->setValidator(validatorPointSeparation); connect(editPointSeparation, SIGNAL(textChanged(const QString &)), this, SLOT(slotPointSeparation(const QString &))); labelPointSize = new QLabel(tr("Maximum Point Size:"), this); CHECK_PTR_ENGAUGE(labelPointSize); labelPointSize->setGeometry(10, 50, 200, 30); editPointSize = new QLineEdit(this); CHECK_PTR_ENGAUGE(editPointSize); editPointSize->setGeometry(220, 50, 130, 30); editPointSize->setText(QString("%1").arg(settings->pointSize)); QWhatsThis::add(editPointSize, QString(tr("Select a maximum point size in pixels.\n\n" "Sample match points must fit within a square box, around the cursor, having width and height " "equal to this maximum.\n\n" "This size is also used to determine if a region of pixels that are on, in the processed image, " "should be ignored since that region is wider or taller than this limit.\n\n" "This value has a lower limit"))); validatorPointSize = new QIntValidator(editPointSize); CHECK_PTR_ENGAUGE(validatorPointSize); editPointSize->setValidator(validatorPointSize); connect(editPointSize, SIGNAL(textChanged(const QString &)), this, SLOT(slotPointSize(const QString &))); labelAcceptedColor = new QLabel(QString(tr("Accepted Point Color:")), this); CHECK_PTR_ENGAUGE(labelAcceptedColor); labelAcceptedColor->setGeometry(10, 90, 200, 30); comboAcceptedColor = new QComboBox(false, this, tr("Accepted Point Color")); CHECK_PTR_ENGAUGE(comboAcceptedColor); comboAcceptedColor->setGeometry(220, 90, 130, 30); comboAcceptedColor->setEditable(false); comboAcceptedColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboAcceptedColor, QString(tr("Select a color for matched points that are accepted"))); connect(comboAcceptedColor, SIGNAL(activated(const QString &)), this, SLOT(slotAcceptedColor(const QString &))); labelRejectedColor = new QLabel(QString(tr("Rejected Point Color:")), this); CHECK_PTR_ENGAUGE(labelRejectedColor); labelRejectedColor->setGeometry(10, 130, 200, 30); comboRejectedColor = new QComboBox(false, this, tr("Rejected Point Color")); CHECK_PTR_ENGAUGE(comboRejectedColor); comboRejectedColor->setGeometry(220, 130, 130, 30); comboRejectedColor->setEditable(false); comboRejectedColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboRejectedColor, QString(tr("Select a color for matched points that are rejected"))); connect(comboRejectedColor, SIGNAL(activated(const QString &)), this, SLOT(slotRejectedColor(const QString &))); labelCandidateColor = new QLabel(QString(tr("Candidate Color:")), this); CHECK_PTR_ENGAUGE(labelCandidateColor); labelCandidateColor->setGeometry(10, 170, 200, 30); comboCandidateColor = new QComboBox(false, this, tr("Candidate Point Color")); CHECK_PTR_ENGAUGE(comboCandidateColor); comboCandidateColor->setGeometry(220, 170, 130, 30); comboCandidateColor->setEditable(false); comboCandidateColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboCandidateColor, QString(tr("Select a color for the point being decided upon"))); connect(comboCandidateColor, SIGNAL(activated(const QString &)), this, SLOT(slotCandidateColor(const QString &))); // preview area labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(20, 210, 100, 20); previewCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(previewCanvas); previewCanvas->resize(PreviewWidth, PreviewHeight); previewCanvasView = new Q3CanvasView(previewCanvas, this, 0, Qt::WDestructiveClose); CHECK_PTR_ENGAUGE(previewCanvasView); previewCanvasView->setGeometry(20, 230, PreviewWidth, PreviewHeight); previewCanvasView->setHScrollBarMode(Q3ScrollView::AlwaysOff); previewCanvasView->setVScrollBarMode(Q3ScrollView::AlwaysOff); QWhatsThis::add(previewCanvasView, QString(tr("Preview window shows how current settings affect " "point matching, and how the marked and candidate points are displayed.\n\nThe points are separated " "by the point separation value, and the maximum point size is shown as a box in the center"))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(60, 350, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(170, 350, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(290, 350, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); setPointSetStyles(); loadPointImages(); toggleActions(); updatePreview(); } PointMatchDlg::~PointMatchDlg() { DigitDebug::dtor(QString("pointmatchdlg ") + QString::number((ulong) this, 16)); if (highlight != 0) delete highlight; pointsetAccepted.removePoints(); pointsetRejected.removePoints(); } void PointMatchDlg::drawPoint(QImage* imagePreview, const QImage &imagePoint, int xCenter, int yCenter, const Discretize &discretize, DiscretizeSettings disc) { int wPoint = imagePoint.width(); int hPoint = imagePoint.height(); for (int xPoint = 0; xPoint < wPoint; xPoint++) for (int yPoint = 0; yPoint < hPoint; yPoint++) { ASSERT_ENGAUGE(0 <= xPoint); ASSERT_ENGAUGE(xPoint < wPoint); ASSERT_ENGAUGE(0 <= yPoint); ASSERT_ENGAUGE(yPoint < hPoint); int value = discretize.discretizeValueNotForeground(&imagePoint, xPoint, yPoint, DiscretizeIntensity); if (discretize.pixelIsOn(value, disc)) { int xPreview = xCenter - (wPoint / 2 - xPoint); int yPreview = yCenter - (hPoint / 2 - yPoint); ASSERT_ENGAUGE(0 <= xPreview); ASSERT_ENGAUGE(xPreview < PreviewWidth); ASSERT_ENGAUGE(0 <= yPreview); ASSERT_ENGAUGE(yPreview < PreviewHeight); setPixelRGB(imagePreview, xPreview, yPreview, pixelRGB(&imagePoint, xPoint, yPoint)); } } } void PointMatchDlg::loadPointImages() { QPixmap pixmapDiamond(matchdiamond_xpm); QPixmap pixmapCircle(matchcircle_xpm); QPixmap pixmapSquare(matchsquare_xpm); imageDiamond = pixmapDiamond.convertToImage(); imageCircle = pixmapCircle.convertToImage(); imageSquare = pixmapSquare.convertToImage(); } void PointMatchDlg::makePoints() { if (highlight != 0) { delete highlight; highlight = 0; } pointsetAccepted.removePoints(); pointsetRejected.removePoints(); QImage imagePreview(PreviewWidth, PreviewHeight, 32); imagePreview.fill(Qt::white); if (validateSettings()) { // show box around central point that represents the maximum sample point size int left = PreviewWidth / 2 - settings->pointSize / 2; int top = PreviewHeight / 2 - settings->pointSize / 2; int x; for (x = left; x <= left + settings->pointSize; x++) for (int y = top; y <= top + settings->pointSize; y++) setPixelRGB(&imagePreview, x, y, Qt::lightGray); setPointSetStyles(); // implicit assumption that all point images have same size int wPoint = imageDiamond.width(); ASSERT_ENGAUGE(wPoint == imageCircle.width()); ASSERT_ENGAUGE(wPoint == imageSquare.width()); // manually set the local discretize settings, which are only used for working with the point images Discretize discretize; DiscretizeSettings disc; disc.discretizeMethod = DiscretizeIntensity; disc.intensityThresholdLow = 0; disc.intensityThresholdHigh = 90; // start at center and move to left until we reach the left side int xCenter = PreviewWidth / 2; x = xCenter; while (x - settings->pointSeparation - (wPoint - 1) / 2 > 0) x -= settings->pointSeparation; // draw columns of points across the canvas int y [] = {PreviewHeight / 4, PreviewHeight / 2, (3 * PreviewHeight) / 4}; QImage* images [] = {&imageDiamond, &imageCircle, &imageSquare}; Point* p; QList updateRectList; do { // rows are top (diamonds), middle (circles) and bottom (squares) for (int row = 0; row < 3; row++) { // original image points drawPoint(&imagePreview, *(images [row]), x, y [row], discretize, disc); // engauge digitizer points ASSERT_ENGAUGE(previewCanvas != 0); p = new Point(x, y [row], previewCanvas); CHECK_PTR_ENGAUGE(p); if (row == 0) { pointsetAccepted.addPoint(previewCanvas, p, &updateRectList); p->setPointSet(&pointsetAccepted); } else if (row == 1) { pointsetRejected.addPoint(previewCanvas, p, &updateRectList); p->setPointSet(&pointsetRejected); } else { // no points for candidate row } } x += settings->pointSeparation; } while (x + (wPoint - 1) / 2 < PreviewWidth); // show single highlight in middlemost ponit highlight = new Highlight(settings->candidateColor, previewCanvas); CHECK_PTR_ENGAUGE(highlight); highlight->moveCenter(xCenter, y [2]); } // save original image points as background QPixmap pixmapPreview; pixmapPreview.convertFromImage(imagePreview); ASSERT_ENGAUGE(previewCanvas != 0); previewCanvas->setBackgroundPixmap(pixmapPreview); } void PointMatchDlg::setPointSetStyles() { // set style of engauge points style.lineColor = DigitTransparent; style.pointInColor = settings->acceptedColor; style.pointLineColor = settings->acceptedColor; pointsetAccepted.setStyle(style); style.pointInColor = settings->rejectedColor; style.pointLineColor = settings->rejectedColor; pointsetRejected.setStyle(style); } void PointMatchDlg::toggleActions() { ASSERT_ENGAUGE(comboAcceptedColor != 0); comboAcceptedColor->setCurrentText(PointSetStyles::instance().colorName(settings->acceptedColor)); ASSERT_ENGAUGE(comboRejectedColor != 0); comboRejectedColor->setCurrentText(PointSetStyles::instance().colorName(settings->rejectedColor)); ASSERT_ENGAUGE(comboCandidateColor != 0); comboCandidateColor->setCurrentText(PointSetStyles::instance().colorName(settings->candidateColor)); ASSERT_ENGAUGE(buttonOk != 0); buttonOk->setEnabled(validateSettings()); } void PointMatchDlg::updatePreview() { makePoints(); ASSERT_ENGAUGE(previewCanvas != 0); previewCanvasView->updateContents(); } bool PointMatchDlg::validateSettings() { // enforce constraints ASSERT_ENGAUGE(settings != 0); if (settings->pointSeparation < PointMatchSeparationMin) return false; if (settings->pointSize < PointMatchSizeMin) return false; return true; } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void PointMatchDlg::slotAcceptedColor(const QString &text) { ASSERT_ENGAUGE(settings != 0); settings->acceptedColor = PointSetStyles::instance().color(text); updatePreview(); } void PointMatchDlg::slotCandidateColor(const QString &text) { ASSERT_ENGAUGE(settings != 0); settings->candidateColor = PointSetStyles::instance().color(text); updatePreview(); } void PointMatchDlg::slotPointSeparation(const QString &text) { ASSERT_ENGAUGE(settings != 0); if (text == QString("")) settings->pointSeparation = 0; else settings->pointSeparation = text.toInt(); toggleActions(); updatePreview(); } void PointMatchDlg::slotPointSize(const QString &text) { ASSERT_ENGAUGE(settings != 0); if (text == QString("")) settings->pointSize = 0; else settings->pointSize = text.toInt(); toggleActions(); updatePreview(); } void PointMatchDlg::slotRejectedColor(const QString &text) { ASSERT_ENGAUGE(settings != 0); settings->rejectedColor = PointSetStyles::instance().color(text); updatePreview(); } void PointMatchDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/pointmatchdlg.h000066400000000000000000000103451222557406400205720ustar00rootroot00000000000000/*************************************************************************** pointmatchdlg.h - description ------------------- begin : Thu Jan 1 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTMATCHDLG_H #define POINTMATCHDLG_H #include #include #include #include #include #include #include #include #include #include #include #include #include "digitdef.h" #include "discretize.h" #include "point.h" #include "pointset.h" class Highlight; // one of these modal dialog boxes belongs to each view, and is // hidden until the user selects "point match" mode. the user // uses this dialog box to select the sample point to be matched, and // the number of points that satisfactorily match the sample point. // the benefits of one PointMatchDlg per DigitView are: // 1) simpler and more robust code // 2) user can have different sample points by using multiple DigitViews class PointMatchDlg : public QDialog { Q_OBJECT public: PointMatchDlg(const QString title, PointSetStyle style, PointMatchSettings* settings); ~PointMatchDlg(); public slots: void slotAcceptedColor(const QString &text); void slotCandidateColor(const QString &text); void slotPointSeparation(const QString &text); void slotPointSize(const QString &text); void slotRejectedColor(const QString &text); void slotWhat(void); private: enum { PreviewWidth = 320 }; enum { PreviewHeight = 100 }; // color pixels in preview image using point image as mask void drawPoint(QImage* imagePreview, const QImage &imagePoint, int xCenter, int yCenter, const Discretize &discretize, DiscretizeSettings disc); // convert editor-friendly xpm files into pixel-addressable masks void loadPointImages(void); // make points that represent points in original image, and engauge digitizer points void makePoints(void); // styles must be set before any points are created void setPointSetStyles(void); // enable or disable buttons as appropriate void toggleActions(void); // return true if all settings contraints are currently satisfied bool validateSettings(void); // update preview after modifying a property void updatePreview(void); QString title; PointSetStyle style; PointMatchSettings* settings; // point match properties QLabel* labelPointSeparation; QLineEdit* editPointSeparation; QIntValidator* validatorPointSeparation; QLabel* labelPointSize; QLineEdit* editPointSize; QIntValidator* validatorPointSize; QLabel* labelAcceptedColor; QComboBox* comboAcceptedColor; QLabel* labelRejectedColor; QComboBox* comboRejectedColor; QLabel* labelCandidateColor; QComboBox* comboCandidateColor; // widgets for previewing the point and line styles of the currently selected segment QLabel* labelPreview; Q3Canvas* previewCanvas; Q3CanvasView* previewCanvasView; Highlight* highlight; PointSet pointsetAccepted, pointsetRejected; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; // point images for preview window are used as masks to color pixels QImage imageDiamond, imageCircle, imageSquare; }; #endif // POINTMATCHDLG_H engauge-digitizer-5.2/src/pointmatchthread.cpp000066400000000000000000000444521222557406400216340ustar00rootroot00000000000000/*************************************************************************** pointmatchthread.cpp - description ------------------- begin : Mon Jan 1 2007 copyright : (C) 2007 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include "main.h" #include "mmsubs.h" #include "digitdebug.h" #include "discretize.h" #include "pointmatchthread.h" PointMatchThread::PointMatchThread(const QImage &imageProcessed, PointMatchSettings settings, const Q3PointArray &samplePointPixels, const Q3PointArray &pointsExisting) : m_imageProcessed(imageProcessed), m_settings(settings), m_samplePointPixels(samplePointPixels), m_pointsExisting(pointsExisting) { DigitDebug::ctor(QString("pointmatchthread ") + QString::number((ulong) this, 16)); } PointMatchThread::~PointMatchThread() { DigitDebug::dtor(QString("pointmatchthread ") + QString::number((ulong) this, 16)); } void PointMatchThread::allocateMemory(double** array, fftw_complex** arrayPrime, int width, int height) { *array = new double [width * height]; CHECK_PTR_ENGAUGE(*array); *arrayPrime = new fftw_complex [width * height]; CHECK_PTR_ENGAUGE(*arrayPrime); } void PointMatchThread::assembleLocalMaxima(double* image, double* sample, double* convolution, PointMatchList& listCreated, int width, int height, int sampleXCenter, int sampleYCenter, int sampleXExtent, int sampleYExtent) { // ignore tiny correlation values near zero by applying this threshold const double SINGLE_PIXEL_CORRELATION = 1.0; int iDeltaMin = xDeltaMin(sampleXCenter); int iDeltaMax = xDeltaMax(sampleXCenter, sampleXExtent); int jDeltaMin = yDeltaMin(sampleYCenter); int jDeltaMax = yDeltaMax(sampleYCenter, sampleYExtent); for (int i = 0; i < width; i++) for (int j = 0; j < height; j++) { double convIJ = convolution[FOLD2DINDEX(i, j, height)]; // loop through neighboring points bool isLocalMax = true; for (int iDelta= iDeltaMin; iDelta < iDeltaMax; iDelta++) { int iNeighbor = i + iDelta; if ((0 <= iNeighbor) && (iNeighbor < width)) { for (int jDelta = jDeltaMin; jDelta < jDeltaMax; jDelta++) { int jNeighbor = j + jDelta; if ((0 <= jNeighbor) && (jNeighbor < height)) { if ((convolution [FOLD2DINDEX(iNeighbor, jNeighbor, height)] >= convIJ) && (iNeighbor != i || jNeighbor != j)) { isLocalMax = false; break; } } } } } if (isLocalMax && (convIJ > SINGLE_PIXEL_CORRELATION)) { // save new local maximum PointMatchTriplet* t = new PointMatchTriplet; CHECK_PTR_ENGAUGE(t); t->x = i + sampleXCenter; t->y = j + sampleYCenter; // correlation stored in convIJ is not used since fast convolution is meant to // be performed once (it is global and slow), and later on we may want to redo // local correlations when a maximum is removed and it overlaps another maxima. // so, the manually-computed correlation value is assigned to this maximum. // computation of manual convolutions is not too slow because there are // typically less than 200 of them t->correlation = correlation(image, sample, width, height, t->x, t->y, sampleXCenter, sampleYCenter, sampleXExtent, sampleYExtent); listCreated.append(t); } } } void PointMatchThread::computeConvolution(fftw_complex* imagePrime, fftw_complex* samplePrime, int width, int height, double** convolution) { fftw_complex* convolutionPrime; allocateMemory(convolution, &convolutionPrime, width, height); // perform in-place conjugation of the sample since equation is F-1 {F(f) * F*(g)} conjugateMatrix(width, height, samplePrime); // perform the convolution in transform space multiplyMatrices(width, height, imagePrime, samplePrime, convolutionPrime); // backward transform the convolution fftw_plan pConvolution = fftw_plan_dft_c2r_2d(width, height, convolutionPrime, *convolution, FFTW_ESTIMATE); fftw_execute (pConvolution); releasePhaseArray(convolutionPrime); } void PointMatchThread::conjugateMatrix(int width, int height, fftw_complex* matrix) { ASSERT_ENGAUGE(matrix != 0); for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { int index = FOLD2DINDEX(x, y, height); matrix [index] [1] = -1.0 * matrix [index] [1]; } } double PointMatchThread::correlation(double* image, double* sample, int width, int height, int x, int y, int sampleXCenter, int sampleYCenter, int sampleXExtent, int sampleYExtent) { ASSERT_ENGAUGE(image != 0); ASSERT_ENGAUGE(sample != 0); int iDeltaMin = xDeltaMin(sampleXCenter); int iDeltaMax = xDeltaMax(sampleXCenter, sampleXExtent); int jDeltaMin = yDeltaMin(sampleYCenter); int jDeltaMax = yDeltaMax(sampleYCenter, sampleYExtent); // highest correlation value corresponds to image pixels centered around (x,y) // matching the sample pixels centered around (sampleXCenter,sampleYCenter) double sum = 0.0; for (int iDelta = iDeltaMin; iDelta < iDeltaMax; iDelta++) { int iImage = x + iDelta; int iSample = sampleXCenter + iDelta; // assumes sample starts at lowest row if ((0 <= iImage) && (iImage < width)) { for (int jDelta = jDeltaMin; jDelta < jDeltaMax; jDelta++) { int jImage = y + jDelta; int jSample = sampleYCenter + jDelta; // assumes sample starts at lowest column if ((0 <= jImage) && (jImage < height)) { // good correlation occurs when both pixels have the same PixelOnUnscanned value. once // an image pixel has been scanned then it should be ignored if ((image [FOLD2DINDEX(iImage, jImage, height)] == PixelOnUnscanned) && (sample [FOLD2DINDEX(iSample, jSample, height)] == PixelOnUnscanned)) { sum += PixelOnUnscanned; } } } } } return sum; } void PointMatchThread::loadImage(const QImage &imageProcessed, PointMatchSettings settings, const Q3PointArray &pointsExisting, int width, int height, double** image, fftw_complex** imagePrime) { allocateMemory(image, imagePrime, width, height); populateImageArray(imageProcessed, width, height, image); removePixelsNearExistingPoints(*image, width, height, pointsExisting, settings.pointSeparation); // forward transform the image fftw_plan pImage = fftw_plan_dft_r2c_2d(width, height, *image, *imagePrime, FFTW_ESTIMATE); fftw_execute(pImage); } void PointMatchThread::loadSample(const Q3PointArray &samplePointPixels, int width, int height, double** sample, fftw_complex** samplePrime, int* sampleXCenter, int* sampleYCenter, int* sampleXExtent, int* sampleYExtent) { // populate 2d sample array with same size (width x height) as image so fft // transforms will have same dimensions, which means their transforms can be // multiplied element-to-element allocateMemory(sample, samplePrime, width, height); populateSampleArray(samplePointPixels, width, height, sample, sampleXCenter, sampleYCenter, sampleXExtent, sampleYExtent); // forward transform the sample fftw_plan pSample = fftw_plan_dft_r2c_2d(width, height, *sample, *samplePrime, FFTW_ESTIMATE); fftw_execute(pSample); } void PointMatchThread::multiplyMatrices(int width, int height, fftw_complex* in1, fftw_complex* in2, fftw_complex* out) { for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { int index = FOLD2DINDEX(x, y, height); out [index] [0] = in1 [index] [0] * in2 [index] [0] - in1 [index] [1] * in2 [index] [1]; out [index] [1] = in1 [index] [0] * in2 [index] [1] + in1 [index] [1] * in2 [index] [0]; } } uint PointMatchThread::optimizeLengthForFft(uint originalLength) { const uint INITIAL_CLOSEST_LENGTH = 0; // loop through powers, looking for the lowest multiple of 2^a * 3^b * 5^c * 7^d // that is at or above the original length. Since the original length is expected // to usually be less than 2000, we use only the smaller primes (2, 3, 5 and 7) // and ignore 11 and 13 even though fftw can benefit from those as well uint closestLength = INITIAL_CLOSEST_LENGTH; for (uint power2 = 1; power2 < originalLength; power2 *= 2) { for (uint power3 = 1; power3 < originalLength; power3 *= 3) { for (uint power5 = 1; power5 < originalLength; power5 *= 5) { for (uint power7 = 1; power7 < originalLength; power7 *= 7) { uint newLength = power2 * power3 * power5 * power7; if (originalLength <= newLength) { if ((closestLength == INITIAL_CLOSEST_LENGTH) || (newLength < closestLength)) { // this is the best so far, so save it. No special weighting // is given to powers of 2, although those can be more // efficient than other closestLength = newLength; } } } } } } if (closestLength == INITIAL_CLOSEST_LENGTH) { // no closest length was found, so just return the original length // and expect slow fft performance closestLength = originalLength; } return closestLength; } QList PointMatchThread::pointsCreated() { return m_pointsCreated; } void PointMatchThread::populateImageArray(const QImage &imageProcessed, int width, int height, double** image) { // initialize memory with original image in real component, and imaginary component set to zero Discretize discretize; for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { (*image) [FOLD2DINDEX(x, y, height)] = (discretize.processedPixelIsOn(imageProcessed, x, y) ? PixelOnUnscanned : PixelOff); } } void PointMatchThread::populateSampleArray(const Q3PointArray &samplePointPixels, int width, int height, double** sample, int* sampleXCenter, int* sampleYCenter, int* sampleXExtent, int* sampleYExtent) { // compute bounds bool first = true; unsigned int i; int xMin = width, yMin = height, xMax = 0, yMax = 0; for (i = 0; i < (unsigned int) samplePointPixels.size(); i++) { int x = (samplePointPixels.at(i)).x(); int y = (samplePointPixels.at(i)).y(); if (first || (x < xMin)) xMin = x; if (first || (x > xMax)) xMax = x; if (first || (y < yMin)) yMin = y; if (first || (y > yMax)) yMax = y; first = false; } const int border = 1; // #pixels in border on each side xMin -= border; yMin -= border; xMax += border; yMax += border; // initialize memory with original image in real component, and imaginary component set to zero int x, y; for (x = 0; x < width; x++) for (y = 0; y < height; y++) { (*sample) [FOLD2DINDEX(x, y, height)] = PixelOff; } int xSum = 0, ySum = 0; for (i = 0; i < (unsigned int) samplePointPixels.size(); i++) { // place, quite arbitrarily, the sample image up against the top left corner x = (samplePointPixels.at(i)).x() - xMin; y = (samplePointPixels.at(i)).y() - yMin; ASSERT_ENGAUGE((0 < x) && (x < width)); ASSERT_ENGAUGE((0 < y) && (y < height)); (*sample) [FOLD2DINDEX(x, y, height)] = PixelOnUnscanned; xSum += x; ySum += y; } // compute location of center of mass, which will represent the center of the point *sampleXCenter = (int) ((double) xSum / (double) samplePointPixels.size() + 0.5); *sampleYCenter = (int) ((double) ySum / (double) samplePointPixels.size() + 0.5); // dimensions of portion of array actually used by sample (rest is empty) *sampleXExtent = xMax - xMin + 1; *sampleYExtent = yMax - yMin + 1; } void PointMatchThread::releaseImageArray(double* array) { ASSERT_ENGAUGE(array != 0); delete[] array; } void PointMatchThread::releasePhaseArray(fftw_complex* arrayPrime) { ASSERT_ENGAUGE(arrayPrime != 0); delete[] arrayPrime; } void PointMatchThread::removePixelsNearExistingPoints(double* image, int imageWidth, int imageHeight, const Q3PointArray &pointsExisting, int pointSeparation) { for (int i = 0; i < pointsExisting.size(); i++) { int xPoint = (pointsExisting.at(i)).x(); int yPoint = (pointsExisting.at(i)).y(); // loop through rows of pixels int yMin = yPoint - pointSeparation; if (yMin < 0) yMin = 0; int yMax = yPoint + pointSeparation; if (imageHeight < yMax) yMax = imageHeight; for (int y = yMin; y < yMax; y++) { // pythagorean theorem gives range of x values int radical = pointSeparation * pointSeparation - (y - yPoint) * (y - yPoint); if (0 < radical) { int xMin = (int) (xPoint - sqrt((double) radical)); if (xMin < 0) xMin = 0; int xMax = xPoint + (xPoint - xMin); if (imageWidth < xMax) xMax = imageWidth; // turn off pixels in this row of pixels for (int x = xMin; x < xMax; x++) { if (image [FOLD2DINDEX(x, y, imageHeight)] != PixelOff) { image [FOLD2DINDEX(x, y, imageHeight)] = PixelOff; } } } } } } void PointMatchThread::run() { // use larger arrays for computations, if necessary, to improve fft performance int originalWidth = m_imageProcessed.width(); int originalHeight = m_imageProcessed.height(); int width = optimizeLengthForFft(originalWidth); int height = optimizeLengthForFft(originalHeight); // the untransformed (unprimed) and transformed (primed) storage arrays can be huge // for big pictures, so minimize the number of allocated arrays at every point in time double *image, *sample, *convolution; fftw_complex *imagePrime, *samplePrime; // compute convolution=F(-1){F(image)*F(*)(sample)} int sampleXCenter, sampleYCenter, sampleXExtent, sampleYExtent; loadImage(m_imageProcessed, m_settings, m_pointsExisting, width, height, &image, &imagePrime); loadSample(m_samplePointPixels, width, height, &sample, &samplePrime, &sampleXCenter, &sampleYCenter, &sampleXExtent, &sampleYExtent); computeConvolution(imagePrime, samplePrime, width, height, &convolution); // assemble local maxima, where each is the maxima centered in a region // having a width of sampleWidth and a height of sampleHeight PointMatchList listCreated; assembleLocalMaxima(image, sample, convolution, listCreated, width, height, sampleXCenter, sampleYCenter, sampleXExtent, sampleYExtent); listCreated.sort(); // copy sorted match points to output for (PointMatchTriplet* t = listCreated.first(); t != 0; t = listCreated.next()) { m_pointsCreated.append(*t); // current order of maxima would be fine if they never overlapped. however, // they often overlap so as each point is pulled off the list, and its pixels // are removed from the image, we might consider updating all succeeding maxima // here if those maximax overlap the just-removed maxima. the maxima list is kept // in descending order according to correlation value } releaseImageArray(image); releasePhaseArray(imagePrime); releaseImageArray(sample); releasePhaseArray(samplePrime); releaseImageArray(convolution); } int PointMatchThread::xDeltaMax(int sampleXCenter, int sampleXExtent) { return (int) sampleXExtent - (int) sampleXCenter; } int PointMatchThread::xDeltaMin(int sampleXCenter) { return -1 * (int) sampleXCenter; } int PointMatchThread::yDeltaMax(int sampleYCenter, int sampleYExtent) { return (int) sampleYExtent - (int) sampleYCenter; } int PointMatchThread::yDeltaMin(int sampleYCenter) { return -1 * (int) sampleYCenter; } engauge-digitizer-5.2/src/pointmatchthread.h000066400000000000000000000151751222557406400213010ustar00rootroot00000000000000/*************************************************************************** pointmatchthread.h - description ------------------- begin : Mon Jan 1 2007 copyright : (C) 2007 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTMATCHTHREAD_H #define POINTMATCHTHREAD_H #include #include //Added by qt3to4: #include #include #include "digitdef.h" #include "digitdebug.h" #include "pointmatch.h" #include "fftw3.h" // this class, used by PointMatch, implements the threaded part of // the point matching calculations. since the fftw library performs its // calculations in just 3 or 4 big steps and is responsive for long periods, // the lack of frequent returns precludes a progress bar, or a cancel button class PointMatchThread : public QThread { public: PointMatchThread(const QImage &imageProcessed, PointMatchSettings settings, const Q3PointArray &samplePointPixels, const Q3PointArray &pointsExisting); ~PointMatchThread(); // perform thread calculations virtual void run(); // output QList pointsCreated(); private: enum PixelStates { PixelOff, // pixel is off PixelOnUnscanned, // pixel is on and has not yet been scanned PixelOnScanned // pixel is on and has been scanned and assigned to a maxima, so ignore it }; // allocate memory for an image array and phase array pair before calculations void allocateMemory(double** array, fftw_complex** arrayPrime, int width, int height); // find each local maxima that is the largest value in a region that is: // 1. as big as the the sample // 2. centered about that local maxima void assembleLocalMaxima(double* image, double* sample, double* convolution, PointMatchList& listCreated, int width, int height, int sampleXCenter, int sampleYCenter, int sampleXExtent, int sampleYExtent); // compute convolution in image space from phase space image and sample arrays void computeConvolution(fftw_complex* imagePrime, fftw_complex* samplePrime, int width, int height, double** convolution); // in-place replacement of matrix by its complex conjugate void conjugateMatrix(int width, int height, fftw_complex* matrix); // correlate sample and image around specified screen location double correlation(double* image, double* sample, int width, int height, int x, int y, int sampleXCenter, int sampleYCenter, int sampleXExtent, int sampleYExtent); // load image and imagePrime arrays void loadImage(const QImage &imageProcessed, PointMatchSettings settings, const Q3PointArray &pointsExisting, int width, int height, double** image, fftw_complex** imagePrime); // load sample and samplePrime arrays, and compute center location and extent void loadSample(const Q3PointArray &samplePointPixels, int width, int height, double** sample, fftw_complex** samplePrime, int* sampleXCenter, int* sampleYCenter, int* sampleXExtent, int* sampleYExtent); // multiply corresponding elements of two matrices into a third matrix void multiplyMatrices(int width, int height, fftw_complex* in1, fftw_complex* in2, fftw_complex* out); // given an original array length, this method returns an array length that includes // enough padding so that the array length equals 2^a * 3^b * 5^c * 7^d, which // optimizes the fft performance. Typical memory penalties are less than 6% to get // a cpu performance increase of 0% to roughly 100% or 200% uint optimizeLengthForFft(uint originalLength); // populate sample array with sample image void populateSampleArray(const Q3PointArray &samplePointPixels, int width, int height, double** sample, int* sampleXCenter, int* sampleYCenter, int* sampleXExtent, int* sampleYExtent); // populate image array with processed image void populateImageArray(const QImage &imageProcessed, int width, int height, double** image); // release memory for one array after finishing calculations void releaseImageArray(double* array); void releasePhaseArray(fftw_complex* array); // prevent duplication of existing points. this function returns // the number of pixels removed void removePixelsNearExistingPoints(double* image, int imageWidth, int imageHeight, const Q3PointArray &pointsExisting, int pointSeparation); // correlate the sample point with the image, returning points in list that is // sorted by correlation void scanImage(bool* sampleMaskArray, int sampleMaskWidth, int sampleMaskHeight, int sampleXCenter, int sampleYCenter, PointMatchSettings settings, int* imageArray, int imageWidth, int imageHeight, PointMatchList* pointsCreated); // bounds of region around sample center int xDeltaMax(int sampleXCenter, int sampleXExtent); int xDeltaMin(int sampleXCenter); int yDeltaMax(int sampleYCenter, int sampleYExtent); int yDeltaMin(int sampleYCenter); // inputs const QImage& m_imageProcessed; PointMatchSettings m_settings; const Q3PointArray& m_samplePointPixels; const Q3PointArray& m_pointsExisting; // output QList m_pointsCreated; }; #endif // POINTMATCHTHREAD_H engauge-digitizer-5.2/src/pointset.cpp000066400000000000000000000623721222557406400201440ustar00rootroot00000000000000/*************************************************************************** pointset.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include #include "pointset.h" #include "digitdef.h" #include "transform.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" #include "geometrywindowitem.h" const double PI = 3.1415926535; PointSet::PointSet() : m_export(true), m_modifiedGeometry(true) { // the pointset style is set by setStyle DigitDebug::ctor(QString("pointset ") + QString::number((ulong) this, 16)); } PointSet::~PointSet() { DigitDebug::dtor(QString("pointset ") + QString::number((ulong) this, 16)); // cannot delete the points in m_points and lines in m_lines here since they are temporarily // shared by multiple pointsets. instead, deleteShared is called just before destruction } void PointSet::setVisible(bool visible) { if (visible) show(); else hide(); } void PointSet::deleteShared() { m_lines.setAutoDelete(true); m_lines.clear(); // autoDelete is on m_lines.setAutoDelete(false); m_points.setAutoDelete(true); m_points.clear(); // autoDelete is on m_points.setAutoDelete(false); } void PointSet::setStyle(PointSetStyle style) { m_style = style; Q3PtrListIterator itr(m_lines); Q3CanvasLine* line; while ((line = itr.current()) != 0) { ASSERT_ENGAUGE(line != 0); line->setPen(PointSetStyles::instance().pointSetPen(m_style.lineColor, m_style.lineSize)); if (m_style.lineColor == DigitTransparent) line->hide(); else line->show(); ++itr; } } void PointSet::addPoint(Q3Canvas* canvas, Point* point, QList* updateRectList) { // insert point between two other points if it lies on the line between the two points const int LineEpsilonPixels = 2; int index = 0; ASSERT_ENGAUGE(point != 0); double x = point->xScreen(); double y = point->yScreen(); Point* pOld = 0; for (Point* pNew = m_points.first(); pNew; pNew = m_points.next(), index++) { ASSERT_ENGAUGE(pNew != 0); double xNew = pNew->xScreen(); double yNew = pNew->yScreen(); if (pOld) { double xOld = pOld->xScreen(); double yOld = pOld->yScreen(); double xProj, yProj; projectpointontoline(x, y, xOld, yOld, xNew, yNew, &xProj, &yProj); double diff = sqrt((x - xProj) * (x - xProj) + (y - yProj) * (y - yProj)); if (diff < LineEpsilonPixels) { m_points.insert(index, point); point->setPointSet(this); removeLine(pOld, pNew, updateRectList); addLine(canvas, pOld, point, updateRectList); addLine(canvas, point, pNew, updateRectList); m_modifiedGeometry = true; return; } } pOld = pNew; } // just append point to end of pointset m_points.append(point); point->setPointSet(this); if (pOld) addLine(canvas, pOld, point, updateRectList); m_modifiedGeometry = true; } void PointSet::addLine(Q3Canvas* canvas, Point* pFrom, Point* pTo, QList* updateRectList) { ASSERT_ENGAUGE(pFrom); ASSERT_ENGAUGE(pTo); Q3CanvasLine* line = new Q3CanvasLine(canvas); CHECK_PTR_ENGAUGE(line); line->setPoints(pFrom->xScreen(), pFrom->yScreen(), pTo->xScreen(), pTo->yScreen()); line->setPen(PointSetStyles::instance().pointSetPen(m_style.lineColor, m_style.lineSize)); line->setZ(ZLines); if (m_style.lineColor == DigitTransparent) line->hide(); else line->show(); m_lines.append(line); pFrom->setLineNext(line); pTo->setLinePrev(line); QRect rect( QPoint(pFrom->xScreen(), pFrom->yScreen()), QPoint(pTo->xScreen(), pTo->yScreen())); updateRectList->append(rect.normalize()); m_modifiedGeometry = true; } void PointSet::removePoint(Point* p, QList* updateRectList) { // remove one of its attached lines. four cases are: // 1. solitary point (0 lines->0 lines) // 2. leftmost point (1 attached lines->0 attached lines) // 3. doubly attached point (2 attached lines->1 attached line) // 4. rightmost point (1 attached line->0 attached lines) ASSERT_ENGAUGE(p); Point* pFirst = m_points.first(); Point* pLast = m_points.last(); if (m_points.count() > 1) { // not case 1 if ((p == m_points.first()) || (p == m_points.last())) { Point* pOld = 0; for (Point* pNew = m_points.first(); pNew; pNew = m_points.next()) { if (((p == pOld) && (p == pFirst)) || ((p == pNew) && (p == pLast))) { // cases 2 and 4 removeLine(pOld, pNew, updateRectList); break; } pOld = pNew; } } else { Point* pOlder = 0; Point* pOld = 0; for (Point* pNew = m_points.first(); pNew; pNew = m_points.next()) { if (p == pOld) { if (pOlder) { // case 3 ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(pOlder->lineNext()->boundingRect()); removeLine(pOld, pNew, updateRectList); ASSERT_ENGAUGE(pOlder != 0); pOlder->lineNext()->setPoints( pOlder->xScreen(), pOlder->yScreen(), pNew->xScreen(), pNew->yScreen()); ASSERT_ENGAUGE(pNew != 0); pNew->setLinePrev(pOlder->lineNext()); updateRectList->append(pOlder->lineNext()->boundingRect()); break; } } pOlder = pOld; pOld = pNew; } } } // remove the point, using removeRef (which ignores compareItems) rather than // remove (which uses compareItems) ASSERT_ENGAUGE(updateRectList != 0); updateRectList->append(p->boundingRect()); if (!m_points.removeRef(p)) { FATAL_ENGAUGE("unable to remove point"); } delete p; m_modifiedGeometry = true; } void PointSet::removePoints() { QList updateRectList; Point* p; Point* pNext; for (p = m_points.first(); p; p = pNext) { pNext = m_points.next(); removePoint(p, &updateRectList); } m_modifiedGeometry = true; } void PointSet::removeLine(Point* pFrom, Point* pTo, QList* updateRectList) { // consistency checks ASSERT_ENGAUGE(pFrom); ASSERT_ENGAUGE(pTo); ASSERT_ENGAUGE(pFrom->lineNext()); ASSERT_ENGAUGE(pTo->linePrev()); ASSERT_ENGAUGE(pFrom->lineNext() == pTo->linePrev()); if (!m_lines.remove(m_lines.find(pFrom->lineNext()))) { FATAL_ENGAUGE("unable to remove line"); } delete pFrom->lineNext(); pFrom->setLineNext(0); pTo->setLinePrev(0); QRect rect( QPoint(pFrom->xScreen(), pFrom->yScreen()), QPoint(pTo->xScreen(), pTo->yScreen())); updateRectList->append(rect.normalize()); m_modifiedGeometry = true; } const PointList* PointSet::points() const { return &m_points; } int PointSet::pointCount() { return m_points.count(); } void PointSet::show() { for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); point->show(); } Q3PtrListIterator itr(m_lines); Q3CanvasLine* line; while ((line = itr.current()) != 0) { ASSERT_ENGAUGE(line != 0); if (m_style.lineColor == DigitTransparent) line->hide(); else line->show(); ++itr; } } void PointSet::hide() { for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); point->hide(); } Q3PtrListIterator itr(m_lines); Q3CanvasLine* line; while ((line = itr.current()) != 0) { ASSERT_ENGAUGE(line != 0); line->hide(); ++itr; } } void PointSet::dump() { qDebug("pointset %lx name %s points %d shape %d size %d size %d " "color %d color %d size %d color %d connect %d", (unsigned long) this, m_name.latin1(), m_points.count(), (int) m_style.pointShape, (int) m_style.pointSize, (int) m_style.pointLineSize, (int) m_style.pointLineColor, (int) m_style.pointInColor, (int) m_style.lineSize, (int) m_style.lineColor, (int) m_style.lineConnectAs); for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); point->dumpPoint(); } Q3PtrListIterator itr(m_lines); Q3CanvasLine* line; while ((line = itr.current()) != 0) { ASSERT_ENGAUGE(line != 0); qDebug("pointset line %lx pointset %lx start (%d, %d) end (%d, %d)", (unsigned long) line, (unsigned long) this, line->startPoint().x(), line->startPoint().y(), line->endPoint().x(), line->endPoint().y()); ++itr; } } void PointSet::attachPointsToPointSet() { for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); point->setPointSet(this); } m_modifiedGeometry = true; } void PointSet::updateGraphCoordinates(CoordSettings coord, const Transform* transform) { for (Point* point = m_points.first(); point; point = m_points.next()) { double xTheta, yR; ASSERT_ENGAUGE(transform != 0); ASSERT_ENGAUGE(point != 0); transform->screenToXThetaYR(coord, point->xScreen(), point->yScreen(), &xTheta, &yR); point->setXThetaGraph(xTheta); point->setYRGraph(yR); } m_modifiedGeometry = true; } bool PointSet::singleValued(CoordSettings coord, const Transform* transform) { bool first = true; double xThetaLast = 0.0, xTheta, yR; for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(transform != 0); ASSERT_ENGAUGE(point != 0); transform->screenToXThetaYR(coord, point->xScreen(), point->yScreen(), &xTheta, &yR); if (!first && (xTheta < xThetaLast)) return false; xThetaLast = xTheta; first = false; } return true; } void PointSet::forceSingleValued(CoordSettings coord, const Transform* transform, QList* updateRectList) { // quick exit if pointset is a closed contour, which is the case for all axis, scale and // measure pointsets. curve pointsets may be either single valued functions, or closed contours if (m_style.lineConnectAs != SingleValuedFunction) return; // quick exit if points are already in order if (singleValued(coord, transform)) return; // sort the points by xTheta m_points.sort(); // to prevent having to remove N lines and then immediately adding N lines, we only // adjust as many lines as necessary Point* pOlder = 0; Point* pOld = m_points.last(); for (Point* pNew = m_points.first(); pNew; pNew = m_points.next()) { if (pOlder) { // second condition handles when last point is moved to before first point if ((pOlder->lineNext() != pNew->linePrev()) || (pNew->linePrev() == 0)) { if (!pOlder->lineNext()) { // previous point was originally at the end of the list so it has // no next line. use the next line of the point now at the end pOlder->setLineNext(pOld->lineNext()); pOld->setLineNext(0); } updateRectList->append(pOlder->lineNext()->boundingRect()); pOlder->lineNext()->setPoints( pOlder->xScreen(), pOlder->yScreen(), pNew->xScreen(), pNew->yScreen()); updateRectList->append(pOlder->lineNext()->boundingRect()); pNew->setLinePrev(pOlder->lineNext()); } } else { // this is the first point. make sure it has no previous line pNew->setLinePrev(0); } pOlder = pNew; } m_modifiedGeometry = true; } bool PointSet::pointSetGraphLimits(double *xThetaMin, double *xThetaMax, double *yRMin, double *yRMax) { ASSERT_ENGAUGE(xThetaMin != 0); ASSERT_ENGAUGE(xThetaMax != 0); ASSERT_ENGAUGE(yRMin != 0); ASSERT_ENGAUGE(yRMax != 0); bool found = false; for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); if (!found || (point->xThetaGraph() < *xThetaMin)) *xThetaMin = point->xThetaGraph(); if (!found || (point->xThetaGraph() > *xThetaMax)) *xThetaMax = point->xThetaGraph(); if (!found || (point->yRGraph() < *yRMin)) *yRMin = point->yRGraph(); if (!found || (point->yRGraph() > *yRMax)) *yRMax = point->yRGraph(); found = true; } return found; } bool PointSet::pointSetScreenLimits(double *xMin, double *xMax, double *yMin, double *yMax) { ASSERT_ENGAUGE(xMin != 0); ASSERT_ENGAUGE(xMax != 0); ASSERT_ENGAUGE(yMin != 0); ASSERT_ENGAUGE(yMax != 0); bool found = false; for (Point* point = m_points.first(); point; point = m_points.next()) { ASSERT_ENGAUGE(point != 0); if (!found || (point->xScreen() < *xMin)) *xMin = point->xScreen(); if (!found || (point->xScreen() > *xMax)) *xMax = point->xScreen(); if (!found || (point->yScreen() < *yMin)) *yMin = point->yScreen(); if (!found || (point->yScreen() > *yMax)) *yMax = point->yScreen(); found = true; } return found; } void PointSet::mergeUniqueXValues(QList* list, int xPrecision) { ASSERT_ENGAUGE(list != 0); Point* p = m_points.first(); QList::iterator itr; // insert member points that should go before any points already in the list for (itr = list->begin(); p && (itr != list->end()); ++itr) for (; p && (p->xThetaGraph() < (*itr)); p = m_points.next()) list->insert(itr, p->xThetaGraph()); // insert member points that should go after all points already in the list for (; p; p = m_points.next()) list->append(p->xThetaGraph()); // remove duplicate entries caused by two or more curves having points with identical // exported x coordinates, since these duplicates are useless and cause problems (i.e. sql // insert will crash) qSort(list->begin(), list->end()); itr = std::unique (list->begin(), list->end()); list->erase(itr, list->end()); } QString PointSet::exportCurveAll(ExportSettings xport, int xPrecision, int yPrecision) { QString rtn; // if this curve is a function, then skip points whose exported x value is the same // as the previous point so the output can be imported into any sql database that // requires unique x values QString xLast, xNew, yNew; for (Point* p = m_points.first(); p; p = m_points.next()) { xNew.setNum(p->xThetaGraph(), 'g', xPrecision); yNew.setNum(p->yRGraph(), 'g', yPrecision); if ((xLast != xNew) || (m_style.lineConnectAs != SingleValuedFunction)) { rtn += xNew; rtn += delimiter(xport.delimiters); rtn += yNew; rtn += "\n"; } xLast = xNew; } return rtn; } QString PointSet::exportCurveHeader(ExportSettings xport) { QString filtered(m_name); filtered.replace(QRegExp(delimiter(xport.delimiters)), QString("")); return filtered; } QString PointSet::exportCurvePoint(double x, CoordSettings coord, bool useInterpolation, int yPrecision) { QString yNew; // initial empty value might be returned if interpolation is disabled if (m_points.count() == 0) return yNew; if (!useInterpolation) { // x value has to exactly match one of the points in this curve PointListIterator itr(m_points); Point* p; while ((p = itr.current()) != 0) { if (x == p->xThetaGraph()) return yNew.setNum(p->yRGraph(), 'g', yPrecision); ++itr; } return yNew; } if (m_points.count() == 1) return yNew.setNum(m_points.first()->yRGraph(), 'g', yPrecision); // this sequential search suffers from n-squared performance, since saving // the two iterators as member variables between invocations caused problems // when deleting and copying pointsets PointListIterator* m_itrLeft = new PointListIterator(m_points); CHECK_PTR_ENGAUGE(m_itrLeft); PointListIterator* m_itrRight = new PointListIterator(m_points); CHECK_PTR_ENGAUGE(m_itrRight); ++(*m_itrRight); // loop until x value is between the left and right points, or we reach the end of the list while ((x > m_itrRight->current()->xThetaGraph()) && !m_itrRight->atLast()) { ++(*m_itrLeft); ++(*m_itrRight); } Point* pLeft = m_itrLeft->current(); Point* pRight = m_itrRight->current(); ASSERT_ENGAUGE(pLeft != 0); ASSERT_ENGAUGE(pRight != 0); double leftPointX = pLeft->xThetaGraph(); double rightPointX = pRight->xThetaGraph(); double leftPointY = pLeft->yRGraph(); double rightPointY = pRight->yRGraph(); if (adjustForLogScale(coord.xThetaScale, &leftPointX) && adjustForLogScale(coord.xThetaScale, &rightPointX) && adjustForLogScale(coord.xThetaScale, &x) && adjustForLogScale(coord.yRScale, &leftPointY) && adjustForLogScale(coord.yRScale, &rightPointY)) { double denominator = rightPointX - leftPointX; if (denominator < DefaultSettings::instance().getDoubleMin()) yNew.setNum(leftPointX, 'g', yPrecision); else { // if x value is between the points this is an interpolation (0xScreen(); s << point->yScreen(); s << point->xThetaGraph(); s << point->yRGraph(); ++itr; } } void PointSet::serializeRead(QDataStream &s, Q3Canvas* canvas) { ASSERT_ENGAUGE(canvas != 0); s >> m_name; s >> (Q_INT32 &) m_style.pointShape; s >> (Q_INT32 &) m_style.pointSize; s >> (Q_INT32 &) m_style.pointLineSize; s >> (Q_INT32 &) m_style.pointLineColor; s >> (Q_INT32 &) m_style.pointInColor; s >> (Q_INT32 &) m_style.lineSize; s >> (Q_INT32 &) m_style.lineColor; s >> (Q_INT32 &) m_style.lineConnectAs; int count; s >> (Q_INT32 &) count; QList updateRectList; for (int i = 0; i < count; i++) { int xScreen, yScreen; double xGraph, yGraph; s >> xScreen; s >> yScreen; s >> xGraph; s >> yGraph; Point* point = new Point(xScreen, yScreen, xGraph, yGraph, canvas); CHECK_PTR_ENGAUGE(point); addPoint(canvas, point, &updateRectList); } m_modifiedGeometry = true; // do not call attachPointsToPointSet here since this pointet is temporary for graph pointsets. call // attachPointsToPointSet in the function that calls this } void PointSet::geometryInfo(bool validTransform, bool cartesian, int* pNextRow, GeometryWindowItemList& rInfo) { ASSERT_ENGAUGE(pNextRow != 0); // header QString s = QObject::tr("Name:"); rInfo.append(GeometryWindowItem(*pNextRow, 0, s)); rInfo.append(GeometryWindowItem(*pNextRow, 1, m_name)); ++(*pNextRow); rInfo.append(GeometryWindowItem(*pNextRow, 0, QString("Units:"))); rInfo.append(GeometryWindowItem(*pNextRow, 1, (validTransform ? QObject::tr("Graph") : QObject::tr("Pixels")))); ++(*pNextRow); geometryInfoArea(pNextRow, rInfo); geometryInfoDistance(pNextRow, rInfo, cartesian); m_modifiedGeometry = false; } void PointSet::geometryInfoArea(int* pNextRow, GeometryWindowItemList& rInfo) { double funcArea = 0.0, polyArea = 0.0; int i, nPoints = m_points.count(); Point* point; if (nPoints > 2) { double* x = new double [nPoints]; CHECK_PTR_ENGAUGE(x); double* y = new double [nPoints]; CHECK_PTR_ENGAUGE(y); for (i = 0, point = m_points.first(); point; point = m_points.next(), i++) { ASSERT_ENGAUGE(point != 0); x [i] = point->xThetaGraph(); y [i] = point->yRGraph(); } funcArea = functionarea(nPoints, x, y); polyArea = polygonarea(nPoints, x, y); delete[] x; delete[] y; } ASSERT_ENGAUGE(pNextRow != 0); rInfo.append(GeometryWindowItem(*pNextRow, 0, QObject::tr("FuncArea"))); rInfo.append(GeometryWindowItem(*pNextRow, 1, QString::number(funcArea))); ++(*pNextRow); rInfo.append(GeometryWindowItem(*pNextRow, 0, QObject::tr("PolyArea"))); rInfo.append(GeometryWindowItem(*pNextRow, 1, QString::number(polyArea))); ++(*pNextRow); } void PointSet::geometryInfoDistance(int *pNextRow, GeometryWindowItemList& rInfo, bool cartesian) { QString line; bool firstPoint; double xLast = 0.0, yLast = 0.0, x, y; double totalDistance = 0.0, distance; int i, pass; Point* point; ASSERT_ENGAUGE(pNextRow != 0); rInfo.append(GeometryWindowItem(*pNextRow, 0, (cartesian ? QObject::tr("X") : QObject::tr("Theta")))); rInfo.append(GeometryWindowItem(*pNextRow, 1, (cartesian ? QObject::tr("Y") : QObject::tr("R")))); rInfo.append(GeometryWindowItem(*pNextRow, 2, QObject::tr("Index"))); rInfo.append(GeometryWindowItem(*pNextRow, 3, QObject::tr("Distance"))); rInfo.append(GeometryWindowItem(*pNextRow, 4, QObject::tr("Percent"))); rInfo.append(GeometryWindowItem(*pNextRow, 5, QObject::tr("Distance"))); rInfo.append(GeometryWindowItem(*pNextRow, 6, QObject::tr("Percent"))); rInfo.append(GeometryWindowItem(*pNextRow, 7, QObject::tr("Angle"))); ++(*pNextRow); // first pass computes totalDistance and xLast and yLast, second pass outputs one line per point for (pass = 0; pass < 2; pass++) { firstPoint = true; distance = 0.0; PointListIterator itr(m_points), itrNext(m_points); ++itrNext; for (i = 0; itr.current(); ++itr, ++itrNext, i++) { point = itr.current(); x = point->xThetaGraph(); y = point->yRGraph(); if (!firstPoint) distance += sqrt((x - xLast) * (x - xLast) + (y - yLast) * (y - yLast)); if (pass == 1) geometryInfoDistancePass1(i, itrNext, xLast, yLast, x, y, distance, totalDistance, pNextRow, rInfo); firstPoint = false; xLast = x; yLast = y; } totalDistance = distance; } } void PointSet::geometryInfoDistancePass1(int i, PointListIterator &itrNext, double xLast, double yLast, double x, double y, double distance, double totalDistance, int* pNextRow, GeometryWindowItemList& rInfo) { if (!itrNext.current()) itrNext.toFirst(); Point* pointNext = itrNext.current(); ASSERT_ENGAUGE(pointNext != 0); double xNext = pointNext->xThetaGraph(); double yNext = pointNext->yRGraph(); double pcDistance; if (totalDistance <= 0.0) pcDistance = 100.0; else pcDistance = 100.0 * distance / totalDistance; double r1[3], r2[3]; r1[0] = xLast - x; // xLast from last point of pass 0 is used by first point in pass 1 r1[1] = yLast - y; // yLast from last point of pass 0 is used by first point in pass 1 r1[2] = 0.0; r2[0] = xNext - x; r2[1] = yNext - y; r2[2] = 0.0; double angle = dangle(r1, r2) * 180.0 / PI; ASSERT_ENGAUGE(pNextRow != 0); rInfo.append(GeometryWindowItem(*pNextRow, 0, QString::number(x))); rInfo.append(GeometryWindowItem(*pNextRow, 1, QString::number(y))); rInfo.append(GeometryWindowItem(*pNextRow, 2, QString::number(i))); rInfo.append(GeometryWindowItem(*pNextRow, 3, QString::number(distance))); rInfo.append(GeometryWindowItem(*pNextRow, 4, QString::number(pcDistance))); rInfo.append(GeometryWindowItem(*pNextRow, 5, QString::number(totalDistance - distance))); rInfo.append(GeometryWindowItem(*pNextRow, 6, QString::number(100.0 - pcDistance))); rInfo.append(GeometryWindowItem(*pNextRow, 7, QString::number(angle))); ++(*pNextRow); } Q3PointArray PointSet::pointSetCoordinates() { Q3PointArray points(m_points.count()); int i = 0; for (Point* point = m_points.first(); point; point = m_points.next(), i++) points.setPoint(i, point->xScreen(), point->yScreen()); return points; } QPixmap PointSet::thumbnail() { Q3Canvas c(12, 12); Point p(6, 6, &c); p.setPointSet(this); QPixmap pm(12, 12); // remove pixmap background so background of requesting widget will appear. this must be // done before the QPainter starts painting pm.setMask(pm.createHeuristicMask()); QPainter painter(&pm); c.drawArea(c.rect(), &painter); return pm; } engauge-digitizer-5.2/src/pointset.h000066400000000000000000000200311222557406400175730ustar00rootroot00000000000000/*************************************************************************** pointset.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSET_H #define POINTSET_H #include #include //Added by qt3to4: #include #include #include #include "point.h" #include "pointsetstyles.h" #include "mmsubs.h" #include "geometrywindowitem.h" const QString AxesPointSetName = QString("Axes"); const QString ScalePointSetName = QString("Scale"); const QString DefaultCurveName = QString("Curve1"); const QString DefaultMeasureName = QString("Measure1"); class Transform; // this class contains all points and drawing information for a particular pointset class PointSet { public: // need default constructor since the pointsets are collected into a value list PointSet(); ~PointSet(); // remove shared objects before deleting pointsets. do not call while objects are shared with other pointsets void deleteShared(void); // add point to pointset, not worrying about keeping the pointset single valued (which is for // curves only). if new point is on the line between two points then insert it between // those two points (desired behavior for curve and measure pointsets, which happens to not affect // axes and scale pointsets) void addPoint(Q3Canvas* canvas, Point* point, QList* updateRectList); // remove a point from this pointset void removePoint(Point* point, QList* updateRectList); // remove all points, and their lines, probably since this pointset is about to be deleted void removePoints(void); // name of pointset void setName(QString name) { m_name = name; } const QString name(void) const { return m_name; } // return iterator for looping through the points in this pointset const PointList* points(void) const; // return number of points in this pointset int pointCount(void); // style get and set methods. setStyle should be followed by global screen refresh PointSetStyle style(void) const { return m_style; } void setStyle(PointSetStyle style); // export get and set methods bool getExport(void) const { return m_export; } void setExport(bool xport) { m_export = xport; } // return the name of this pointset, filtering out any embedded delimiters for easier parsing // downstream (which would be performed by external applications) QString exportCurveHeader(ExportSettings xport); // given an x value, return the corresponding y value, interpolating if necessary QString exportCurvePoint(double x, CoordSettings coord, bool useInterpolation, int yPrecisio); // export this pointset with one x-y pair on each line. header and footer are handled elsewhere. // the x and y values will be exported with their respective numeric precisions QString exportCurveAll(ExportSettings xport, int xPrecision, int yPrecision); // show or hide all points void show(void); void hide(void); void setVisible(bool visible); // display debug information for this pointset void dump(void); // call this after creating new set of pointsets, to attach existing points to new pointset void attachPointsToPointSet(void); // apply the transformation to set graph coordinates of the points in the curve and measure pointsets void updateGraphCoordinates(CoordSettings coord, const Transform* transform); // return bounds on the coordinates for this pointset, and true if // at least one point was found bool pointSetGraphLimits(double *xThetaMin, double *xThetaMax, double *yRMin, double *yRMax); bool pointSetScreenLimits(double *xMin, double *xMax, double *yMin, double *yMax); // merge the x values of this pointset into a sorted list having unique x values. although // this returns numeric x values with full precision, their exported precision must be // specified so no adjacent exported x values will have the same value (breaks postprocessing // tools such as sql databases) void mergeUniqueXValues(QList* list, int xPrecision); // serialize void serializeWrite(QDataStream &s) const; void serializeRead(QDataStream &s, Q3Canvas* canvas); // return the geometry info for this pointset void geometryInfo(bool validTransform, bool cartesian, int* pNextRow, GeometryWindowItemList& rInfo); // get and set for modified flag bool modifiedGeometry(void) { return m_modifiedGeometry; } void setModifiedGeometry(bool mod) { m_modifiedGeometry = mod; } // for curve pointsets connected as Single Valued Functions, since the graph coordinates // of all points are updated, we must reconnect any points that were reordered. remember, // a single valued function has only a single value per xTheta value, so the lines cannot overlap void forceSingleValued(CoordSettings coord, const Transform* transform, QList* updateRectList); // return point coordinates of this pointset Q3PointArray pointSetCoordinates(void); // convert an x or y coordinate to log scale if necessary bool adjustForLogScale(Scale scale, double* pointXY); // thumbnail for digitize toolbar comboboxes QPixmap thumbnail(); private: // adding and removing lines involves updating update area and point pointers void addLine(Q3Canvas* canvas, Point* pFrom, Point* pTo, QList* updateRectList); void removeLine(Point* pFrom, Point* pTo, QList* updateRectList); // true if pointset is single valued bool singleValued(CoordSettings coord, const Transform* transform); // return the area and distance geometry info for this pointset void geometryInfoArea(int* pNextRow, GeometryWindowItemList& rInfo); void geometryInfoDistance(int* pNextRow, GeometryWindowItemList& rInfo, bool cartesian); void geometryInfoDistancePass1(int i, PointListIterator &itrNext, double xLast, double yLast, double x, double y, double distance, double totalDistance, int* pNextRow, GeometryWindowItemList& rInfo); // user-specified name of this pointset QString m_name; // true/false to include/exclude the curve pointset during export bool m_export; // shape and line style of this pointset PointSetStyle m_style; // points belonging to this pointset. each point is owned by exactly one pointset, and lives // from when the user explicitly creates the point until the user explicitly deletes the point PointList m_points; // lines belonging to this pointset. points are sorted by ordinate and then linked by lines. all // lines are replaced if any of the following occurs (1) a point is added (2) a point is // deleted (3) the line style changes (4) the document is loaded. this approach may be a bit // slower, but it greatly simplifies the code, and realistically there should not be more // than a couple of hundred points per pointset so execution time is trivial Q3PtrList m_lines; // modified flag is true when geometry info for this pointset is not the same as // the contents of the corresponding geometry info window, for curves and measures bool m_modifiedGeometry; }; #endif // POINTSET_H engauge-digitizer-5.2/src/pointsetdlg.cpp000066400000000000000000000334441222557406400206310ustar00rootroot00000000000000/*************************************************************************** pointsetdlg.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //Added by qt3to4: #include #include #include #include "pointsetdlg.h" #include "digitdef.h" #include "pointsetstyles.h" #include "point.h" #include "pointset.h" #include "img/whatsthis.xpm" #include "digitdebug.h" #include "main.h" PointSetDlg::PointSetDlg(QString title, QString pointsetName, DigitizeState state, PointSetStyle* pointSetStyle) : QDialog(0, "pointsetdlg", true), state(state), pointSetStyle(pointSetStyle) { DigitDebug::ctor(QString("pointsetdlg ") + QString::number((ulong) this, 16)); setCaption(curveReplace("Curve Properties - [%1%2]%3") .arg(title) .arg(pointsetNameFilter(pointsetName)) .arg(freewareCaption)); setFixedSize(340, 520); // point area groupPoint = new Q3GroupBox(QString(tr("Point")), this); CHECK_PTR_ENGAUGE(groupPoint); groupPoint->setGeometry(10, 10, 320, 220); labelShape = new QLabel(QString(tr("Shape:")), this); CHECK_PTR_ENGAUGE(labelShape); labelShape->setGeometry(20, 30, 120, 30); comboShape = new QComboBox(false, this, tr("Shape")); CHECK_PTR_ENGAUGE(comboShape); comboShape->setGeometry(145, 30, 175, 30); comboShape->setEditable(false); comboShape->insertStringList(PointSetStyles::instance().pointShapeNames()); QWhatsThis::add(comboShape, QString(tr("Select a shape for the points"))); connect(comboShape, SIGNAL(activated(const QString &)), this, SLOT(slotPointShape(const QString &))); labelShapeSize = new QLabel(QString(tr("Size:")), this); CHECK_PTR_ENGAUGE(labelShapeSize); labelShapeSize->setGeometry(20, 70, 120, 30); comboShapeSize = new QComboBox(false, this, tr("Shape Size")); CHECK_PTR_ENGAUGE(comboShapeSize); comboShapeSize->setGeometry(145, 70, 175, 30); comboShapeSize->setEditable(false); comboShapeSize->insertStringList(PointSetStyles::instance().pointSizeNames()); QWhatsThis::add(comboShapeSize, QString(tr("Select an overall size for the points"))); connect(comboShapeSize, SIGNAL(activated(const QString &)), this, SLOT(slotPointSize(const QString &))); labelShapeLineSize = new QLabel(QString(tr("Line Size:")), this); CHECK_PTR_ENGAUGE(labelShapeLineSize); labelShapeLineSize->setGeometry(20, 110, 120, 30); comboShapeLineSize = new QComboBox(false, this, tr("Shape Line Size")); CHECK_PTR_ENGAUGE(comboShapeLineSize); comboShapeLineSize->setGeometry(145, 110, 175, 30); comboShapeLineSize->setEditable(false); comboShapeLineSize->insertStringList(PointSetStyles::instance().pointLineSizeNames()); QWhatsThis::add(comboShapeLineSize, QString(tr("Select a size for the line used to draw the point shapes"))); connect(comboShapeLineSize, SIGNAL(activated(const QString &)), this, SLOT(slotPointLineSize(const QString &))); labelShapeLineColor = new QLabel(QString(tr("Line Color:")), this); CHECK_PTR_ENGAUGE(labelShapeLineColor); labelShapeLineColor->setGeometry(20, 150, 120, 30); comboShapeLineColor = new QComboBox(false, this, tr("Shape Line Color")); CHECK_PTR_ENGAUGE(comboShapeLineColor); comboShapeLineColor->setGeometry(145, 150, 175, 30); comboShapeLineColor->setEditable(false); comboShapeLineColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboShapeLineColor, QString(tr("Select a color for the line used to draw the point shapes"))); connect(comboShapeLineColor, SIGNAL(activated(const QString &)), this, SLOT(slotPointLineColor(const QString &))); labelShapeInColor = new QLabel(QString(tr("Interior Color:")), this); CHECK_PTR_ENGAUGE(labelShapeInColor); labelShapeInColor->setGeometry(20, 190, 120, 30); comboShapeInColor = new QComboBox(false, this, tr("Shape Interior Color")); CHECK_PTR_ENGAUGE(comboShapeInColor); comboShapeInColor->setGeometry(145, 190, 175, 30); comboShapeInColor->setEditable(false); comboShapeInColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboShapeInColor, QString(tr("Select a color for the interior of the point shapes.\n\n" "This has no effect on points without interiors"))); connect(comboShapeInColor, SIGNAL(activated(const QString &)), this, SLOT(slotPointInColor(const QString &))); // line area groupLine = new Q3GroupBox(QString(tr("Line")), this); CHECK_PTR_ENGAUGE(groupLine); groupLine->setGeometry(10, 240, 320, 140); labelLineSize = new QLabel(QString(tr("Size:")), this); CHECK_PTR_ENGAUGE(labelLineSize); labelLineSize->setGeometry(20, 260, 120, 30); comboLineSize = new QComboBox(false, this, tr("Line Size")); CHECK_PTR_ENGAUGE(comboLineSize); comboLineSize->setGeometry(145, 260, 175, 30); comboLineSize->setEditable(false); comboLineSize->insertStringList(PointSetStyles::instance().lineSizeNames()); QWhatsThis::add(comboLineSize, QString(tr("Select a size for the lines drawn between points"))); connect(comboLineSize, SIGNAL(activated(const QString &)), this, SLOT(slotLineSize(const QString &))); labelLineColor = new QLabel(QString(tr("Color:")), this); CHECK_PTR_ENGAUGE(labelLineColor); labelLineColor->setGeometry(20, 300, 120, 30); comboLineColor = new QComboBox(false, this, tr("Line Color")); CHECK_PTR_ENGAUGE(comboLineColor); comboLineColor->setGeometry(145, 300, 175, 30); comboLineColor->setEditable(false); comboLineColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboLineColor, QString(tr("Select a color for the lines drawn between points"))); connect(comboLineColor, SIGNAL(activated(const QString &)), this, SLOT(slotLineColor(const QString &))); labelLineConnectAs = new QLabel(QString(tr("Connect As:")), this); CHECK_PTR_ENGAUGE(labelLineConnectAs); labelLineConnectAs->setGeometry(20, 340, 120, 30); comboLineConnectAs = new QComboBox(false, this, tr("Connect As")); CHECK_PTR_ENGAUGE(comboLineConnectAs); comboLineConnectAs->setGeometry(145, 340, 175, 30); comboLineConnectAs->setEditable(false); if (state != CurveState) comboLineConnectAs->setEnabled(false); // can only change Connect As method of curves comboLineConnectAs->insertStringList(PointSetStyles::instance().lineConnectAsNames()); QWhatsThis::add(comboLineConnectAs, QString(tr("Select rule for connecting points with lines.\n\n" "If the curve is connected as a single-valued function then the points are ordered by " "increasing value of the independent variable.\n\n" "If the curve is connected as a closed contour, then the points are ordered by age, except for " "points placed along an existing line. Any point placed on top of any existing line is inserted " "between the two endpoints of that line - as if its age was between the ages of the two " "endpoints.\n\n" "Lines are drawn between successively ordered points"))); connect(comboLineConnectAs, SIGNAL(activated(const QString &)), this, SLOT(slotLineConnectAs(const QString &))); // preview area labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(10, 390, 115, 20); previewCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(previewCanvas); previewCanvas->resize(360, 50); previewCanvasView = new Q3CanvasView(previewCanvas, this); CHECK_PTR_ENGAUGE(previewCanvasView); previewCanvasView->setGeometry(10, 420, 320, 50); previewCanvasView->setHScrollBarMode(Q3ScrollView::AlwaysOff); previewCanvasView->setVScrollBarMode(Q3ScrollView::AlwaysOff); QWhatsThis::add(previewCanvasView, QString(tr( "Preview window shows how current settings affect the lines and points"))); pointSet = new PointSet; CHECK_PTR_ENGAUGE(pointSet); pointSet->setStyle(*pointSetStyle); previewLeftPoint = new Point(40, 25, previewCanvas); CHECK_PTR_ENGAUGE(previewLeftPoint); previewRightPoint = new Point(250, 25, previewCanvas); CHECK_PTR_ENGAUGE(previewRightPoint); QList updateRectList; pointSet->addPoint(previewCanvas, previewLeftPoint, &updateRectList); pointSet->addPoint(previewCanvas, previewRightPoint, &updateRectList); previewLeftPoint->setPointSet(pointSet); previewRightPoint->setPointSet(pointSet); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 480, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 480, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(270, 480, 60, 30); QToolTip::add(buttonWhat, QString("What's this?")); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); toggleActions(); updatePreview(); } PointSetDlg::~PointSetDlg() { DigitDebug::dtor(QString("pointsetdlg ") + QString::number((ulong) this, 16)); delete pointSet; delete buttonOk; delete buttonCancel; } void PointSetDlg::toggleActions() { ASSERT_ENGAUGE(comboShape != 0); comboShape->setCurrentText(PointSetStyles::instance().pointShapeName(pointSetStyle->pointShape)); ASSERT_ENGAUGE(comboShapeSize != 0); comboShapeSize->setCurrentText(PointSetStyles::instance().pointSizeName(pointSetStyle->pointSize)); ASSERT_ENGAUGE(comboShapeLineSize != 0); comboShapeLineSize->setCurrentText(PointSetStyles::instance().pointLineSizeName(pointSetStyle->pointLineSize)); ASSERT_ENGAUGE(comboShapeLineColor != 0); comboShapeLineColor->setCurrentText(PointSetStyles::instance().colorName(pointSetStyle->pointLineColor)); ASSERT_ENGAUGE(comboShapeInColor != 0); comboShapeInColor->setCurrentText(PointSetStyles::instance().colorName(pointSetStyle->pointInColor)); ASSERT_ENGAUGE(comboLineSize != 0); comboLineSize->setCurrentText(PointSetStyles::instance().lineSizeName(pointSetStyle->lineSize)); ASSERT_ENGAUGE(comboLineColor != 0); comboLineColor->setCurrentText(PointSetStyles::instance().colorName(pointSetStyle->lineColor)); ASSERT_ENGAUGE(comboLineConnectAs != 0); comboLineConnectAs->setCurrentText(PointSetStyles::instance().lineConnectAsName(pointSetStyle->lineConnectAs)); } void PointSetDlg::updatePreview() { ASSERT_ENGAUGE(pointSet != 0); pointSet->setStyle(*pointSetStyle); ASSERT_ENGAUGE(previewCanvasView != 0); previewCanvasView->updateContents(); } QString PointSetDlg::curveReplace(const char* text) { QString rtn(text); switch (state) { case AxisState: rtn.replace(QRegExp("curve"), QString("axes")); rtn.replace(QRegExp("Curve"), QString("Axes")); break; case CurveState: break; case MeasureState: rtn.replace(QRegExp("curve"), QString("measure")); rtn.replace(QRegExp("Curve"), QString("Measure")); break; case ScaleState: rtn.replace(QRegExp("curve"), QString("scale bar")); rtn.replace(QRegExp("Curve"), QString("Scale bar")); break; default: FATAL_ENGAUGE("bad value for state"); } return rtn; } QString PointSetDlg::pointsetNameFilter(const QString pointsetName) { if ((state == CurveState) || (state == MeasureState)) return QString(" - ") + pointsetName; else return QString(""); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void PointSetDlg::slotPointShape(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->pointShape = PointSetStyles::instance().pointShape(text); updatePreview(); } void PointSetDlg::slotPointSize(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->pointSize = PointSetStyles::instance().pointSize(text); updatePreview(); } void PointSetDlg::slotPointLineSize(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->pointLineSize = PointSetStyles::instance().pointLineSize(text); updatePreview(); } void PointSetDlg::slotPointLineColor(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->pointLineColor = PointSetStyles::instance().color(text); updatePreview(); } void PointSetDlg::slotPointInColor(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->pointInColor = PointSetStyles::instance().color(text); updatePreview(); } void PointSetDlg::slotLineSize(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->lineSize = PointSetStyles::instance().lineSize(text); updatePreview(); } void PointSetDlg::slotLineColor(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->lineColor = PointSetStyles::instance().color(text); updatePreview(); } void PointSetDlg::slotLineConnectAs(const QString &text) { ASSERT_ENGAUGE(pointSetStyle != 0); pointSetStyle->lineConnectAs = PointSetStyles::instance().lineConnectAs(text); updatePreview(); } void PointSetDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/pointsetdlg.h000066400000000000000000000075141222557406400202750ustar00rootroot00000000000000/*************************************************************************** pointsetdlg.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSETDLG_H #define POINTSETDLG_H #include #include #include #include #include #include #include #include #include #include "digitdef.h" #include "pointsetstyles.h" class PointSet; class Point; // this dialog box class edits the properties of one pointset. The pointset // may be an axis, scale, curve or measure pointset (depending on current state) // but the pointset type does not matter here since all are handled identically class PointSetDlg : public QDialog { Q_OBJECT public: PointSetDlg(QString title, QString curveName, DigitizeState state, PointSetStyle* pointSetStyle); ~PointSetDlg(); private slots: void slotPointShape(const QString &text); void slotPointSize(const QString &text); void slotPointLineSize(const QString &text); void slotPointLineColor(const QString &text); void slotPointInColor(const QString &text); void slotLineSize(const QString &text); void slotLineColor(const QString &text); void slotLineConnectAs(const QString &text); void slotWhat(void); private: // state determines which type of pointset is being edited DigitizeState state; // style to be edited PointSetStyle *pointSetStyle; // enable or disable buttons as appropriate void toggleActions(); // update preview after modifying a property void updatePreview(); // returns translated string with "curve" replaced by "axis", "scale bar" or "measure" QString curveReplace(const char* text); // returns the pointset name if in curve or measure state, else blank QString pointsetNameFilter(const QString pointsetName); // widgets for editing the point style of the currently selected pointset Q3GroupBox* groupPoint; QLabel* labelShape; QLabel* labelShapeSize; QLabel* labelShapeLineSize; QLabel* labelShapeLineColor; QLabel* labelShapeInColor; QComboBox* comboShape; QComboBox* comboShapeSize; QComboBox* comboShapeLineSize; QComboBox* comboShapeLineColor; QComboBox* comboShapeInColor; // widgets for editing the line style of the currently selected pointset Q3GroupBox* groupLine; QLabel* labelLineSize; QLabel* labelLineColor; QLabel* labelLineConnectAs; QComboBox* comboLineSize; QComboBox* comboLineColor; QComboBox* comboLineConnectAs; // widgets for previewing the point and line styles of the currently selected pointset QLabel* labelPreview; PointSet* pointSet; Q3Canvas* previewCanvas; Q3CanvasView* previewCanvasView; Point* previewLeftPoint; Point* previewRightPoint; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; }; #endif // POINTSETDLG_H engauge-digitizer-5.2/src/pointsetnamedlg.cpp000066400000000000000000000064541222557406400214730ustar00rootroot00000000000000/*************************************************************************** pointsetnamedlg.cpp - description ------------------- begin : Fri Nov 8 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "pointsetnamedlg.h" #include "digitdebug.h" #include "digitdef.h" #include "main.h" PointSetNameDlg::PointSetNameDlg(bool curve, QString title, QString* name, QStringList disallowedNames) : QDialog(0, "pointsetnamedlg", true), curve(curve), title(title), name(name), disallowedNames(disallowedNames) { DigitDebug::ctor(QString("pointsetnamedlg ") + QString::number((ulong) this, 16)); setCaption(curveReplace("Curve Name - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(250, 100); labelName = new QLabel(QString(tr("Name:")), this); CHECK_PTR_ENGAUGE(labelName); labelName->setGeometry(10, 10, 100, 30); editName = new QLineEdit(*name, this); CHECK_PTR_ENGAUGE(editName); editName->setGeometry(140, 10, 100, 30); connect(editName, SIGNAL(textChanged(const QString &)), this, SLOT(slotTextChanged(const QString &))); buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 60, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 60, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); toggleActions(); } PointSetNameDlg::~PointSetNameDlg() { DigitDebug::dtor(QString("pointsetnamedlg ") + QString::number((ulong) this, 16)); } void PointSetNameDlg::toggleActions() { bool enable = true; ASSERT_ENGAUGE(editName != 0); if (editName->text() == QString("")) enable = false; else if (disallowedNames.find(editName->text()) != disallowedNames.end()) enable = false; ASSERT_ENGAUGE(buttonOk != 0); buttonOk->setEnabled(enable); } QString PointSetNameDlg::curveReplace(const char* text) { if (curve) return QString(tr(text)); else { QString rtn(text); rtn.replace(QRegExp("curve"), QString("measure")); rtn.replace(QRegExp("Curve"), QString("Measure")); return rtn; } } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void PointSetNameDlg::slotTextChanged(const QString &text) { *name = text; toggleActions(); } engauge-digitizer-5.2/src/pointsetnamedlg.h000066400000000000000000000044721222557406400211360ustar00rootroot00000000000000/*************************************************************************** pointsetnamedlg.h - description ------------------- begin : Fri Nov 8 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSETNAMEDLG_H #define POINTSETNAMEDLG_H #include #include #include #include #include #include #include // edit the name of a curve or measure. Note that the axis pointset has a fixed name so // only curve and measure pointset names can be modified class PointSetNameDlg : public QDialog { Q_OBJECT public: PointSetNameDlg(bool curve, QString title, QString* name, QStringList disallowedNames); ~PointSetNameDlg(); private slots: // called after each edit change in the edit box void slotTextChanged(const QString &); private: // true for curve pointsets, false for measure pointsets bool curve; // enable or disable buttons as appropriate void toggleActions(); // returns translated string with "curve" replaced by "measure" if curve is false QString curveReplace(const char* text); // document title QString title; // scratch copy of curve or measure name that will be edited by this dialog QString* name; // names are disallowed since pointset names must be unique QStringList disallowedNames; QLabel* labelName; QLineEdit* editName; QPushButton* buttonOk; QPushButton* buttonCancel; }; #endif // POINTSETNAMEDLG_H engauge-digitizer-5.2/src/pointsets.cpp000066400000000000000000000600741222557406400203240ustar00rootroot00000000000000/*************************************************************************** pointsets.cpp - description ------------------- begin : Sat Nov 9 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include "pointsets.h" #include "transform.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" #include "geometrywindowitem.h" //Added by qt3to4: #include #include #include #include PointSets::PointSets() { DigitDebug::ctor(QString("pointsets ") + QString::number((ulong) this, 16)); DefaultSettings& rSettings = DefaultSettings::instance(); axesPointSet.setStyle(rSettings.getAxesStyle()); axesPointSet.setName(AxesPointSetName); scalePointSet.setStyle(rSettings.getScaleStyle()); scalePointSet.setName(ScalePointSetName); } PointSets::~PointSets() { DigitDebug::dtor(QString("pointsets ") + QString::number((ulong) this, 16)); } void PointSets::deleteShared() { axesPointSet.deleteShared(); scalePointSet.deleteShared(); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).deleteShared(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).deleteShared(); } void PointSets::addCurve(QString name) { PointSet pointSet; pointSet.setStyle(DefaultSettings::instance().getCurveStyle(curveList.count())); pointSet.setName(name); curveList.append(pointSet); } void PointSets::addMeasure(QString name) { PointSet pointSet; pointSet.setStyle(DefaultSettings::instance().getMeasureStyle(measureList.count())); pointSet.setName(name); measureList.append(pointSet); } PointSet* PointSets::findCurve(QString name) { PointSetListConstIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if ((*itr).name() == name) return (PointSet*) &(*itr); // pointset is probably in the process of getting renamed //qWarning("unable to find curve name %s", name.latin1()); return 0; } PointSet* PointSets::findMeasure(QString name) { PointSetListConstIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if ((*itr).name() == name) return (PointSet*) &(*itr); // pointset is probably in the process of getting renamed //qWarning("unable to find measure name %s", name.latin1()); return 0; } void PointSets::addPointAxes(Q3Canvas* canvas, Point* p, QList* updateRectList) { axesPointSet.addPoint(canvas, p, updateRectList); } void PointSets::addPointScale(Q3Canvas* canvas, Point* p, QList* updateRectList) { scalePointSet.addPoint(canvas, p, updateRectList); } void PointSets::addPointCurve(Q3Canvas* canvas, Point* p, QString name, QList* updateRectList) { PointSet* pointSet = findCurve(name); if (pointSet != 0) pointSet->addPoint(canvas, p, updateRectList); } void PointSets::addPointMeasure(Q3Canvas* canvas, Point* p, QString name, QList* updateRectList) { PointSet* pointSet = findMeasure(name); if (pointSet != 0) pointSet->addPoint(canvas, p, updateRectList); } bool PointSets::removePoint(Point* p, QList* updateRectList) { ASSERT_ENGAUGE(p != 0); if (p->pointSet() == &axesPointSet) { axesPointSet.removePoint(p, updateRectList); return true; } else if (p->pointSet() == &scalePointSet) { scalePointSet.removePoint(p, updateRectList); return true; } else { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (p->pointSet() == &(*itr)) { (*itr).removePoint(p, updateRectList); return true; } for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (p->pointSet() == &(*itr)) { (*itr).removePoint(p, updateRectList); return true; } } FATAL_ENGAUGE(QObject::tr("curve or measure not found for point (%1,%2)") .arg(p->xScreen()) .arg(p->yScreen())); return false; } void PointSets::removePointsForSelectedCurves(QStringList* selectedCurves) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (selectedCurves->find((*itr).name()) != selectedCurves->end()) (*itr).removePoints(); } void PointSets::removePointsForSelectedMeasures(QStringList* selectedMeasures) { PointSetListIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (selectedMeasures->find((*itr).name()) != selectedMeasures->end()) (*itr).removePoints(); } void PointSets::removeCurve(QString name) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (name == (*itr).name()) { curveList.remove(itr); return; } FATAL_ENGAUGE("unable to remove curve"); } void PointSets::removeMeasure(QString name) { PointSetListIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (name == (*itr).name()) { measureList.remove(itr); return; } FATAL_ENGAUGE("unable to remove measure"); } int PointSets::pointCountCurve(QString name) { PointSet* pointSet = findCurve(name); if (pointSet == 0) return 0; else return pointSet->pointCount(); } int PointSets::pointCountMeasure(QString name) { PointSet* pointSet = findMeasure(name); if (pointSet == 0) return 0; else return pointSet->pointCount(); } void PointSets::moveCurveDown(QString name) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (name == (*itr).name()) { PointSet pointSet = (*itr); itr = curveList.remove(itr); ++itr; curveList.insert(itr, pointSet); return; } FATAL_ENGAUGE("unable to move curve down"); } void PointSets::moveMeasureDown(QString name) { PointSetListIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (name == (*itr).name()) { PointSet pointSet = (*itr); itr = measureList.remove(itr); ++itr; measureList.insert(itr, pointSet); return; } FATAL_ENGAUGE("unable to move measure down"); } void PointSets::moveCurveUp(QString name) { PointSetListIterator itr; for (itr = curveList.end(); itr != curveList.begin(); --itr) if (itr != curveList.end()) { if (name == (*itr).name()) { PointSet pointSet = (*itr); itr = curveList.remove(itr); --itr; curveList.insert(itr, pointSet); return; } } FATAL_ENGAUGE("unable to move curve down"); } void PointSets::moveMeasureUp(QString name) { PointSetListIterator itr; for (itr = measureList.end(); itr != measureList.begin(); --itr) if (itr != measureList.end()) { if (name == (*itr).name()) { PointSet pointSet = (*itr); itr = measureList.remove(itr); --itr; measureList.insert(itr, pointSet); return; } } FATAL_ENGAUGE("unable to move measure down"); } void PointSets::setName(QString oldName, QString newName) { ASSERT_ENGAUGE(oldName != AxesPointSetName); ASSERT_ENGAUGE(oldName != ScalePointSetName); PointSet* pointSet = findCurve(oldName); if (pointSet) { pointSet->setName(newName); return; } pointSet = findMeasure(oldName); if (pointSet) { pointSet->setName(newName); return; } } void PointSets::curveNames(QStringList* list) { PointSetListIterator itr; ASSERT_ENGAUGE(list != 0); list->clear(); for (itr = curveList.begin(); itr != curveList.end(); ++itr) list->append((*itr).name()); } void PointSets::measureNames(QStringList* list) { PointSetListIterator itr; ASSERT_ENGAUGE(list != 0); list->clear(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) list->append((*itr).name()); } PointSetStyle PointSets::curveStyle(QString name) { PointSet* pointSet = findCurve(name); ASSERT_ENGAUGE(pointSet != 0); return pointSet->style(); } PointSetStyle PointSets::measureStyle(QString name) { PointSet* pointSet = findMeasure(name); ASSERT_ENGAUGE(pointSet != 0); return pointSet->style(); } void PointSets::setCurveStyle(QString name, PointSetStyle pointSetStyle) { PointSet* pointSet = findCurve(name); ASSERT_ENGAUGE(pointSet != 0); pointSet->setStyle(pointSetStyle); } void PointSets::setMeasureStyle(QString name, PointSetStyle pointSetStyle) { PointSet* pointSet = findMeasure(name); ASSERT_ENGAUGE(pointSet != 0); pointSet->setStyle(pointSetStyle); } const PointSetStyleList PointSets::curveStyles() { PointSetStyleList list; PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) list.append((*itr).style()); return list; } const PointSetStyleList PointSets::measureStyles() { PointSetStyleList list; PointSetListIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) list.append((*itr).style()); return list; } void PointSets::showSinglePointSet(PointSetType type, QString name) { axesPointSet.setVisible(type == AxisPointSet); scalePointSet.setVisible(type == ScalePointSet); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).setVisible((type == CurvePointSet) ? (name == (*itr).name()) : false); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).setVisible((type == MeasurePointSet) ? (name == (*itr).name()) : false); } void PointSets::showAxesPoints(void) { showSinglePointSet(AxisPointSet); } void PointSets::showScalePoints(void) { showSinglePointSet(ScalePointSet); } void PointSets::showCurvePoints(QString curve) { showSinglePointSet(CurvePointSet, curve); } void PointSets::showMeasurePoints(QString measure) { showSinglePointSet(MeasurePointSet, measure); } void PointSets::showAllPoints(void) { axesPointSet.show(); scalePointSet.show(); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).show(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).show(); } void PointSets::dump() { axesPointSet.dump(); scalePointSet.dump(); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).dump(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).dump(); } void PointSets::attachPointsToPointSets() { axesPointSet.attachPointsToPointSet(); scalePointSet.attachPointsToPointSet(); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).attachPointsToPointSet(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).attachPointsToPointSet(); } bool PointSets::axisSetGraphLimits(CoordSettings coord, const Transform* transform, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax) { // update QList updateRectList; updateGraphCoordinates(coord, transform, &updateRectList); // get limits return axesPointSet.pointSetGraphLimits(xThetaMin, xThetaMax, yRMin, yRMax); } bool PointSets::pointSetGraphLimits(CoordSettings coord, const Transform* transform, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax) { // update and get axis limits bool first = axisSetGraphLimits(coord, transform, xThetaMin, xThetaMax, yRMin, yRMax); singlePointSetGraphLimits(&scalePointSet, &first, xThetaMin, xThetaMax, yRMin, yRMax); PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) singlePointSetGraphLimits(&(*itr), &first, xThetaMin, xThetaMax, yRMin, yRMax); for (itr = measureList.begin(); itr != measureList.end(); ++itr) singlePointSetGraphLimits(&(*itr), &first, xThetaMin, xThetaMax, yRMin, yRMax); return !first; } void PointSets::singlePointSetGraphLimits(PointSet* p, bool* first, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax) { double xtmin, xtmax, yrmin, yrmax; ASSERT_ENGAUGE(p != 0); if (p->pointSetGraphLimits(&xtmin, &xtmax, &yrmin, &yrmax)) { if (*first || (xtmin < *xThetaMin)) *xThetaMin = xtmin; if (*first || (xtmax > *xThetaMax)) *xThetaMax = xtmax; if (*first || (yrmin < *yRMin)) *yRMin = yrmin; if (*first || (yrmax > *yRMax)) *yRMax = yrmax; *first = false; } } void PointSets::singlePointSetScreenLimits(PointSet* p, bool* first, double* xMin, double* xMax, double* yMin, double* yMax) { double xmin, xmax, ymin, ymax; ASSERT_ENGAUGE(p != 0); if (p->pointSetScreenLimits(&xmin, &xmax, &ymin, &ymax)) { if (*first || (xmin < *xMin)) *xMin = xmin; if (*first || (xmax > *xMax)) *xMax = xmax; if (*first || (ymin < *yMin)) *yMin = ymin; if (*first || (ymax > *yMax)) *yMax = ymax; *first = false; } } void PointSets::updateGraphCoordinates(CoordSettings coord, const Transform* transform, QList* updateRectList) { // apply transformation PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) { (*itr).updateGraphCoordinates(coord, transform); (*itr).forceSingleValued(coord, transform, updateRectList); } for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).updateGraphCoordinates(coord, transform); } void PointSets::serializeWrite(QDataStream &s) const { axesPointSet.serializeWrite(s); scalePointSet.serializeWrite(s); PointSetListConstIterator itr; s << (const Q_INT32 &) curveList.count(); for (itr = curveList.begin(); itr != curveList.end(); ++itr) (*itr).serializeWrite(s); s << (const Q_INT32 &) measureList.count(); for (itr = measureList.begin(); itr != measureList.end(); ++itr) (*itr).serializeWrite(s); } void PointSets::serializeRead(QDataStream &s, Q3Canvas* canvas) { axesPointSet.serializeRead(s, canvas); axesPointSet.attachPointsToPointSet(); scalePointSet.serializeRead(s, canvas); scalePointSet.attachPointsToPointSet(); int i; int count; s >> (Q_INT32 &) count; for (i = 0; i < count; i++) { PointSet pointSet; pointSet.serializeRead(s, canvas); curveList.append(pointSet); curveList.last().attachPointsToPointSet(); } s >> (Q_INT32 &) count; for (i = 0; i < count; i++) { PointSet pointSet; pointSet.serializeRead(s, canvas); measureList.append(pointSet); measureList.last().attachPointsToPointSet(); } } void PointSets::exportToStream(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport) { int xPrecision, yPrecision; selectXYPrecisionsForExport(coord, &xPrecision, &yPrecision); if (xport.layout == AllCurvesOnEachLine) exportToStreamAllCurvesTogether(str, coord, grid, xport, xPrecision, yPrecision); else exportToStreamEachCurveSeparately(str, coord, grid, xport, xPrecision, yPrecision); } void PointSets::exportToStreamAllCurvesTogether(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision, int yPrecision) { // list of x values in ascending order QList xUsed = ascendingXValuesList(coord, grid, xport, xPrecision); if (xport.header != HeaderNone) { // header str << exportHeaderPrefix(coord, xport); for (PointSetList::iterator itrG = curveList.begin(); itrG != curveList.end(); ++itrG) if ((*itrG).getExport()) { str << delimiter(xport.delimiters); str << (*itrG).exportCurveHeader(xport); } str << "\n"; } // if only allowing raw data, then forgo interpolation bool useInterpolation = (xport.pointsSelection != XYFromAllCurves); // loop through x values with one per line QString xNew; QList::iterator itrX; for (itrX = xUsed.begin(); itrX != xUsed.end(); ++itrX) { xNew.setNum(*itrX, 'g', xPrecision); str << xNew; for (PointSetList::iterator itrG = curveList.begin(); itrG != curveList.end(); ++itrG) if ((*itrG).getExport()) { str << delimiter(xport.delimiters); str << (*itrG).exportCurvePoint(*itrX, coord, useInterpolation, yPrecision); } str << "\n"; } } void PointSets::exportToStreamEachCurveSeparately(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision, int yPrecision) { // list of x values in ascending order QList xUsed = ascendingXValuesList(coord, grid, xport, xPrecision); for (PointSetList::iterator itrG = curveList.begin(); itrG != curveList.end(); ++itrG) if ((*itrG).getExport()) { if (xport.header != HeaderNone) { // header str << exportHeaderPrefix(coord, xport); str << delimiter(xport.delimiters); str << (*itrG).exportCurveHeader(xport); str << "\n"; } if (xport.pointsSelection == XYFromAllCurves) str << (*itrG).exportCurveAll(xport, xPrecision, yPrecision); else { // loop through x values with one per line const bool useInterpolation = true; QString xNew; QList::iterator itrX; for (itrX = xUsed.begin(); itrX != xUsed.end(); ++itrX) { str << xNew.setNum(*itrX, 'g', xPrecision); str << delimiter(xport.delimiters); str << (*itrG).exportCurvePoint(*itrX, coord, useInterpolation, yPrecision); str << "\n"; } } if (xport.header == HeaderGnuplot) { // gnuplot expects two blank records between successive data blocks str << "\n\n"; } } } QString PointSets::exportHeaderPrefix(CoordSettings coord, ExportSettings xport) { QString prefix; if (xport.header == HeaderGnuplot) prefix += "#"; if (coord.frame == Cartesian) prefix += xport.xLabel; else prefix += xport.thetaLabel; return prefix; } QList PointSets::ascendingXValuesList(CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision) { QList list; switch (xport.pointsSelection) { case XFromAllCurves: case XYFromAllCurves: { for (PointSetList::iterator itrG = curveList.begin(); itrG != curveList.end(); ++itrG) (*itrG).mergeUniqueXValues(&list, xPrecision); } break; case XFromFirstCurve: // for simplicity for the user and in code, we use x values from the // first curve, not the first exported curve according to the export flags (*curveList.begin()).mergeUniqueXValues(&list, xPrecision); break; case XFromGridLines: { double x = grid.startX; for (int i = 0; i < grid.countX; i++) { list.append(x); if (coord.xThetaScale == Linear) x += grid.stepX; else x *= grid.stepX; } } break; } return list; } QStringList PointSets::exportIncluded() { QStringList list; PointSetListConstIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if ((*itr).getExport()) list.append((*itr).name()); return list; } QStringList PointSets::exportExcluded() { QStringList list; PointSetListConstIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (!(*itr).getExport()) list.append((*itr).name()); return list; } void PointSets::exportInclude(QString curve) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (curve == (*itr).name()) { (*itr).setExport(true); return; } } void PointSets::exportExclude(QString curve) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (curve == (*itr).name()) { (*itr).setExport(false); return; } } void PointSets::geometryInfoCurve(bool validTransform, bool cartesian, QString name, GeometryWindowItemList& rInfo) { PointSetListIterator itr; int nextRow = 0; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (name == (*itr).name()) (*itr).geometryInfo(validTransform, cartesian, &nextRow, rInfo); else (*itr).setModifiedGeometry(true); } void PointSets::geometryInfoMeasure(bool validTransform, bool cartesian, QString name, GeometryWindowItemList& rInfo) { PointSetListIterator itr; int nextRow = 0; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (name == (*itr).name()) (*itr).geometryInfo(validTransform, cartesian, &nextRow, rInfo); else (*itr).setModifiedGeometry(true); } bool PointSets::modifiedGeometryCurve(QString name) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (name == (*itr).name()) return (*itr).modifiedGeometry(); return false; } bool PointSets::modifiedGeometryMeasure(QString name) { PointSetListIterator itr; for (itr = measureList.begin(); itr != measureList.end(); ++itr) if (name == (*itr).name()) return (*itr).modifiedGeometry(); return false; } Q3PointArray PointSets::curveCoordinates(QString name) { PointSetListIterator itr; for (itr = curveList.begin(); itr != curveList.end(); ++itr) if (name == (*itr).name()) return (*itr).pointSetCoordinates(); Q3PointArray empty; return empty; } QPixmap PointSets::curveThumbnail(QString name) { PointSet* pointSet = findCurve(name); ASSERT_ENGAUGE(pointSet != 0); return pointSet->thumbnail(); } QPixmap PointSets::measureThumbnail(QString name) { PointSet* pointSet = findMeasure(name); ASSERT_ENGAUGE(pointSet != 0); return pointSet->thumbnail(); } void PointSets::selectXYPrecisionsForExport(CoordSettings coord, int* xPrecision, int* yPrecision) { // these defaults are the same as QString and QTextStream. however, they are inadequate when // the resolution is much smaller than the range, like when numeric date on the x axis // ranges from 38242 (9/12/2004) to 38243 (9/13/2004) and the resolution is 0.0033 days/pixel *xPrecision = 6; *yPrecision = 6; // increase the precision if necessary so all significant digits are included if ((coord.xThetaScale == Linear) || (coord.yRScale == Linear)) { PointSetListIterator itr; bool first = true; double xThetaMin, xThetaMax, yRMin, yRMax; for (itr = curveList.begin(); itr != curveList.end(); ++itr) singlePointSetGraphLimits(&(*itr), &first, &xThetaMin, &xThetaMax, &yRMin, &yRMax); first = true; double xMin, xMax, yMin, yMax; for (itr = curveList.begin(); itr != curveList.end(); ++itr) singlePointSetScreenLimits(&(*itr), &first, &xMin, &xMax, &yMin, &yMax); adjustXOrYPrecisionForExport(coord.xThetaScale, xMin, xMax, xThetaMin, xThetaMax, xPrecision); adjustXOrYPrecisionForExport(coord.yRScale, yMin, yMax, yRMin, yRMax, yPrecision); } } void PointSets::adjustXOrYPrecisionForExport(Scale scale, double vScreenMin, double vScreenMax, double vGraphMin, double vGraphMax, int* precision) { if ((scale == Linear) && (vScreenMax - vScreenMin > 0)) { double vLargestMagnitude = (dabs(vGraphMax) > dabs(vGraphMin)) ? dabs(vGraphMax) : dabs(vGraphMin); double vResolution = (vGraphMax - vGraphMin) / (vScreenMax - vScreenMin); // minimum resolution is computed so that moving by a single pixel (which corresponds to // jump in graph coordinates of 1-pixel x vResolution) should cause a change in at least // one digit of the largest possible exported value (which is vLargestMagnitude) int minPrecision = 2 + (int) log10 (vLargestMagnitude / vResolution); ASSERT_ENGAUGE(precision != 0); if (minPrecision > *precision) *precision = minPrecision; } } engauge-digitizer-5.2/src/pointsets.h000066400000000000000000000232311222557406400177630ustar00rootroot00000000000000/*************************************************************************** pointsets.h - description ------------------- begin : Sat Nov 9 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSETS_H #define POINTSETS_H #include #include //Added by qt3to4: #include #include #include #include #include "pointset.h" #include "mmsubs.h" #include "geometrywindowitem.h" class Q3Canvas; class Transform; // the pointset list is stored in a value list, while the pointset points are // stored in pointer lists. This enables making a new copy of the // pointset list for PointSetsDlg to modify, with the original kept if Cancel // is selected, otherwise the new copy is kept if OK is selected. Further // information can be found in the PointList comments typedef QList PointSetList; typedef QList::const_iterator PointSetListConstIterator; typedef QList::iterator PointSetListIterator; // this container class manages the pointsets in a document. an instance of // this class can be copied for editing since the pointset list is value based. // each pointset has pointers to its associated points (on the heap) so // copying this container class does not duplicate the points class PointSets { public: PointSets(); ~PointSets(); // remove shared objects before deleting pointsets. do not call while objects are shared with other pointsets void deleteShared(void); // add a curve or measure pointset to the pointset list. the axis and scale bar pointsets // are automatically added during construction void addCurve(QString name); void addMeasure(QString name); // return the axes or scale bar pointset const PointSet* axes(void) { return &axesPointSet; } const PointSet* scale(void) { return &scalePointSet; } // add a point to an axes, curve, measure or scale pointset void addPointAxes(Q3Canvas* canvas, Point* p, QList* updateRectList); void addPointCurve(Q3Canvas* canvas, Point* p, QString name, QList* updateRectList); void addPointMeasure(Q3Canvas* canvas, Point* p, QString name, QList* updateRectList); void addPointScale(Q3Canvas* canvas, Point* p, QList* updateRectList); // remove a point from its pointset. returns true if point belonged to axes pointset bool removePoint(Point* point, QList* updateRectList); // remove all points, and their lines, for the selected curve or measure pointsets void removePointsForSelectedCurves(QStringList* selectedPointSets); void removePointsForSelectedMeasures(QStringList* selectedMeasures); // remove curve or measure pointset from the pointset list void removeCurve(QString name); void removeMeasure(QString name); // get curve and measure names from pointset list. these will be shown in combobox void curveNames(QStringList* list); void measureNames(QStringList* list); // move the specified curve or measure up or down in the order void moveCurveDown(QString name); void moveCurveUp(QString name); void moveMeasureDown(QString name); void moveMeasureUp(QString name); // rename a pointset. this make no sense for the axes or scale bar pointsets // since they have fixed names void setName(QString oldName, QString newName); // number of points in specified curve or measure pointset int pointCountCurve(QString name); int pointCountMeasure(QString name); // get and set methods for accessing single pointset style PointSetStyle axesStyle(void) { return axesPointSet.style(); } PointSetStyle curveStyle(QString name); PointSetStyle measureStyle(QString name); PointSetStyle scaleStyle(void) { return scalePointSet.style(); } void setAxesStyle(PointSetStyle pointSetStyle) { axesPointSet.setStyle(pointSetStyle); } void setCurveStyle(QString name, PointSetStyle pointSetStyle); void setMeasureStyle(QString name, PointSetStyle pointSetStyle); void setScaleStyle(PointSetStyle pointSetStyle) { scalePointSet.setStyle(pointSetStyle); } // get methods for accessing multiple pointset styles const PointSetStyleList curveStyles(); const PointSetStyleList measureStyles(); // show particular pointset, or all pointsets void showAxesPoints(void); void showScalePoints(void); void showCurvePoints(QString curve); void showMeasurePoints(QString measure); void showAllPoints(void); // debug these pointsets void dump(void); // call this after creating new set of pointsets, to attach existing points to new pointsets void attachPointsToPointSets(void); // return bounds on the coordinates for just axis, or all, pointsets, and true if // there were any coordinates bool axisSetGraphLimits(CoordSettings coord, const Transform* transform, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax); bool pointSetGraphLimits(CoordSettings coord, const Transform* transform, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax); // apply the transformation to set graph coordinates of the points in the curves and // measures. if the operation could cause points to be reordered to keep a curve // single-valued then the optional update list should be used void updateGraphCoordinates(CoordSettings coord, const Transform* transform, QList* updateRectList); // return coordinate range for specified pointset void singlePointSetGraphLimits(PointSet* p, bool* first, double* xThetaMin, double* xThetaMax, double* yRMin, double* yRMax); void singlePointSetScreenLimits(PointSet* p, bool* first, double* xMin, double* xMax, double* yMin, double* yMax); // serialize void serializeWrite(QDataStream &s) const; void serializeRead(QDataStream &s, Q3Canvas* canvas); // export the curves into a text stream void exportToStream(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport); // lists of curves to be included and excluded from export QStringList exportIncluded(void); QStringList exportExcluded(void); // include and exclude a curve from export void exportInclude(QString curve); void exportExclude(QString curve); // return the geometry info for a particular curve or measure pointset void geometryInfoCurve(bool validTransform, bool cartesian, QString name, GeometryWindowItemList& rInfo); void geometryInfoMeasure(bool validTransform, bool cartesian, QString name, GeometryWindowItemList& rInfo); // has geometry of indicated curve or measure pointset changed bool modifiedGeometryCurve(QString name); bool modifiedGeometryMeasure(QString name); // return point coordinates of specified curve Q3PointArray curveCoordinates(QString name); // thumbnails for digitize toolbar comboboxes QPixmap curveThumbnail(QString name); QPixmap measureThumbnail(QString name); private: enum PointSetType { AxisPointSet, ScalePointSet, CurvePointSet, MeasurePointSet }; // show specified pointset, and hide all others void showSinglePointSet(PointSetType type, QString name = QString("")); // find a curve or measure pointset in the pointset list PointSet* findCurve(QString name); PointSet* findMeasure(QString name); // first part of each header has optional gnuplot delimiter, and 'x' or 'theta' QString exportHeaderPrefix(CoordSettings coord, ExportSettings xport); // return list of x values in ascending order QList ascendingXValuesList(CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision); // curves can be exported together in multiple columns, or one after the other in the same column void exportToStreamAllCurvesTogether(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision, int yPrecision); void exportToStreamEachCurveSeparately(Q3TextStream& str, CoordSettings coord, GridMeshSettings grid, ExportSettings xport, int xPrecision, int yPrecision); // select smallest possible precision values, to reduce clutter in export, while still // including the significant digits void selectXYPrecisionsForExport(CoordSettings coord, int* xPrecision, int* yPrecision); // adjust, if necessary, the precision in the x or y direction void adjustXOrYPrecisionForExport(Scale scale, double vScreenMin, double vScreenMax, double vGraphMin, double vGraphMax, int* precision); // single axis pointset PointSet axesPointSet; // single scale bar pointset PointSet scalePointSet; // pointset list containing one or more curve pointsets PointSetList curveList; // pointset list containing one or more measure pointsets PointSetList measureList; }; #endif // POINTSETS_H engauge-digitizer-5.2/src/pointsetsdlg.cpp000066400000000000000000000317041222557406400210110ustar00rootroot00000000000000/*************************************************************************** pointsetsdlg.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include "pointsetdlg.h" #include "pointsetsdlg.h" #include "pointsetnamedlg.h" #include "pointsets.h" #include "img/whatsthis.xpm" #include "digitdebug.h" #include "main.h" PointSetsDlg::PointSetsDlg(bool curve, QString title, PointSets* pointSets, QStringList* pointSetsWithOrphanedPoints) : QDialog(0, "pointsetsdlg", true), curve(curve), title(title), pointSets(pointSets), pointSetsWithOrphanedPoints(pointSetsWithOrphanedPoints), activePointSet(NoActivePointSet) { DigitDebug::ctor(QString("pointsetsdlg ") + QString::number((ulong) this, 16)); setCaption(curveReplace("Curves - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(380, 380); buttonNew = new QPushButton(tr("New..."), this); CHECK_PTR_ENGAUGE(buttonNew); buttonNew->setGeometry(10, 10, 100, 30); QWhatsThis::add(buttonNew, curveReplace("Adds a new curve to the curve list.\n\n" "Every curve name must be unique")); connect(buttonNew, SIGNAL(clicked()), this, SLOT(slotNew())); buttonRemove = new QPushButton(tr("Remove"), this); CHECK_PTR_ENGAUGE(buttonRemove); buttonRemove->setGeometry(140, 10, 100, 30); QWhatsThis::add(buttonRemove, curveReplace("Removes the currently selected curve from " "the curve list.\n\nThere must always be at least one curve")); connect(buttonRemove, SIGNAL(clicked()), this, SLOT(slotRemove())); pointSetNames = new Q3ListBox(this); CHECK_PTR_ENGAUGE(pointSetNames); pointSetNames->setGeometry(10, 50, 230, 280); QWhatsThis::add(pointSetNames, curveReplace("List of the curves belonging to this document")); connect(pointSetNames, SIGNAL(selectionChanged(Q3ListBoxItem*)), this, SLOT(slotSelectionChanged(Q3ListBoxItem*))); buttonUp = new QPushButton(tr("Move Up"), this); CHECK_PTR_ENGAUGE(buttonUp); buttonUp->setGeometry(270, 50, 100, 30); QWhatsThis::add(buttonUp, curveReplace("Move the currently selected curve up in the " "curve list.\n\nExported curves will be in the same order as displayed here.\n\n" "Basically, the order of the curves is cosmetic")); connect(buttonUp, SIGNAL(clicked()), this, SLOT(slotUp())); buttonDown = new QPushButton(tr("Move Down"), this); CHECK_PTR_ENGAUGE(buttonDown); buttonDown->setGeometry(270, 90, 100, 30); QWhatsThis::add(buttonDown, curveReplace("Move the currently selected curve down in " "the curve list.\n\nExported curves will be in the same order as displayed here.\n\n" "Basically, the order of the curves is cosmetic")); connect(buttonDown, SIGNAL(clicked()), this, SLOT(slotDown())); buttonRename = new QPushButton(tr("Rename..."), this); CHECK_PTR_ENGAUGE(buttonRename); buttonRename->setGeometry(270, 260, 100, 30); QWhatsThis::add(buttonRename, curveReplace("Rename the currently selected curve")); connect(buttonRename, SIGNAL(clicked()), this, SLOT(slotRename())); buttonProperties = new QPushButton(tr("Properties..."), this); CHECK_PTR_ENGAUGE(buttonProperties); buttonProperties->setGeometry(270, 300, 100, 30); QWhatsThis::add(buttonProperties, curveReplace("Edit the properties of the currently " "selected curve")); connect(buttonProperties, SIGNAL(clicked()), this, SLOT(slotProperties())); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 340, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 340, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(310, 340, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); refreshPointSetList(); QStringList list; if (curve) pointSets->curveNames(&list); else pointSets->measureNames(&list); selectPointSetName(list.first()); toggleActions(); pointSetsWithOrphanedPoints->clear(); } PointSetsDlg::~PointSetsDlg() { DigitDebug::dtor(QString("pointsetsdlg ") + QString::number((ulong) this, 16)); delete buttonOk; delete buttonCancel; } void PointSetsDlg::refreshPointSetList() { // after refreshing, one entry must be selected so try to make it the same as before ASSERT_ENGAUGE(pointSetNames != 0); QString selected = pointSetNames->currentText(); pointSetNames->clear(); QStringList list; ASSERT_ENGAUGE(pointSets != 0); if (curve) pointSets->curveNames(&list); else pointSets->measureNames(&list); QStringList::iterator itr; for (itr = list.begin(); itr != list.end(); ++itr) { // create a pixmap showing the style of this pointset const int width = 50, height = 15; QPixmap pix(width, height); pix.fill(Qt::red); Q3Canvas* canvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(canvas); canvas->resize(width, height); PointSet* pointSet = new PointSet; CHECK_PTR_ENGAUGE(pointSet); if (curve) pointSet->setStyle(pointSets->curveStyle(*itr)); else pointSet->setStyle(pointSets->measureStyle(*itr)); Point* previewLeftPoint = new Point(width / 5, height / 2, canvas); CHECK_PTR_ENGAUGE(previewLeftPoint); Point* previewRightPoint = new Point(width * 4 / 5, height / 2, canvas); CHECK_PTR_ENGAUGE(previewRightPoint); QList updateRectList; pointSet->addPoint(canvas, previewLeftPoint, &updateRectList); pointSet->addPoint(canvas, previewRightPoint, &updateRectList); previewLeftPoint->setPointSet(pointSet); previewRightPoint->setPointSet(pointSet); QPainter p(&pix); canvas->drawArea(canvas->rect(), &p); delete previewLeftPoint; delete previewRightPoint; delete pointSet; delete canvas; // save pixmap and pointset name pointSetNames->insertItem(pix, (*itr)); } Q3ListBoxItem* item = pointSetNames->findItem(selected); if (item) pointSetNames->setCurrentItem(item); else pointSetNames->setCurrentItem(0); ASSERT_ENGAUGE(pointSetNames->count() > 0); } void PointSetsDlg::selectPointSetName(QString name) { ASSERT_ENGAUGE(pointSetNames != 0); for (uint index = 0; index < pointSetNames->count(); index++) if (name == pointSetNames->text(index)) { pointSetNames->setSelected(index, true); return; } pointSetNames->setSelected(0, true); } void PointSetsDlg::toggleActions() { // disallow having fewer than one pointset ASSERT_ENGAUGE(buttonRemove != 0); buttonRemove->setEnabled(pointSetNames->count() > 1); // cannot move highest pointset up, or lowest pointset down ASSERT_ENGAUGE(buttonUp != 0); buttonUp->setEnabled(pointSetNames->currentItem() > 0); ASSERT_ENGAUGE(buttonDown != 0); buttonDown->setEnabled(pointSetNames->currentItem() < (int) (pointSetNames->count() - 1)); } QString PointSetsDlg::curveReplace(const char* text) { if (curve) return QString(tr(text)); else { QString rtn(text); rtn.replace(QRegExp("curve"), QString("measure")); rtn.replace(QRegExp("Curve"), QString("Measure")); return rtn; } } QString PointSetsDlg::newNameFromPreviousPointSet(QString previousName) { // work backward to find last nonnumeric character int lastNonnumeric = previousName.length() - 1; // this may go as low as -1! int digitsInNumber = 0; while ((lastNonnumeric >= 0) && previousName.at(lastNonnumeric).isDigit()) { --lastNonnumeric; ++digitsInNumber; } // parse numeric suffix value unsigned int suffix = 0; if (digitsInNumber > 0) suffix = previousName.mid(lastNonnumeric + 1).toUInt(); // combine old prefix and new suffix QString prefix; if (lastNonnumeric >= 0) prefix = previousName.left(lastNonnumeric + 1); return prefix + QString::number(suffix + 1); } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void PointSetsDlg::slotDown() { ASSERT_ENGAUGE(pointSets != 0); if (curve) pointSets->moveCurveDown(activePointSet); else pointSets->moveMeasureDown(activePointSet); refreshPointSetList(); selectPointSetName(activePointSet); } void PointSetsDlg::slotNew() { QString name; if (curve) name = DefaultCurveName; else name = DefaultMeasureName; QStringList disallowedNames; ASSERT_ENGAUGE(pointSetNames != 0); for (uint index = 0; index < pointSetNames->count(); index++) if (pointSetNames->text(index) != AxesPointSetName) { disallowedNames.append(pointSetNames->text(index)); // this pointset is the most recent so far name = newNameFromPreviousPointSet(pointSetNames->text(index)); } PointSetNameDlg* dlg = new PointSetNameDlg(curve, title, &name, disallowedNames); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { ASSERT_ENGAUGE(pointSets != 0); if (curve) pointSets->addCurve(name); else pointSets->addMeasure(name); refreshPointSetList(); selectPointSetName(name); toggleActions(); } } void PointSetsDlg::slotProperties() { PointSetStyle pointSetStyle; ASSERT_ENGAUGE(pointSets != 0); QString curveName = pointSetNames->currentText(); if (curve) pointSetStyle = pointSets->curveStyle(curveName); else pointSetStyle = pointSets->measureStyle(curveName); PointSetDlg* dlg = new PointSetDlg(title, curveName, (curve ? CurveState : MeasureState), &pointSetStyle); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { if (curve) pointSets->setCurveStyle(pointSetNames->currentText(), pointSetStyle); else pointSets->setMeasureStyle(pointSetNames->currentText(), pointSetStyle); refreshPointSetList(); } } void PointSetsDlg::slotRemove() { // prevent the dangerous action of deleting a pointset that has points int pointCount; ASSERT_ENGAUGE(pointSets != 0); if (curve) pointCount = pointSets->pointCountCurve(pointSetNames->currentText()); else pointCount = pointSets->pointCountMeasure(pointSetNames->currentText()); if (pointCount > 0) { QString msg; msg.sprintf(curveReplace("This curve has %d points. Do you still want to delete it and its points?"), pointCount); if (QMessageBox::warning(this, title, msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) return; pointSetsWithOrphanedPoints->append(pointSetNames->currentText()); } if (curve) pointSets->removeCurve(pointSetNames->currentText()); else pointSets->removeMeasure(pointSetNames->currentText()); ASSERT_ENGAUGE(pointSetNames != 0); int index = pointSetNames->currentItem(); refreshPointSetList(); pointSetNames->setCurrentItem(index + 1); } void PointSetsDlg::slotRename() { ASSERT_ENGAUGE(pointSetNames != 0); QString copyName = pointSetNames->currentText(); QStringList disallowedNames; for (uint index = 0; index < pointSetNames->count(); index++) if ((pointSetNames->text(index) != AxesPointSetName) && (pointSetNames->text(index) != copyName)) disallowedNames.append(pointSetNames->text(index)); PointSetNameDlg* dlg = new PointSetNameDlg(curve, title, ©Name, disallowedNames); CHECK_PTR_ENGAUGE(dlg); if (dlg->exec() == QDialog::Accepted) { ASSERT_ENGAUGE(pointSets != 0); pointSets->setName(pointSetNames->currentText(), copyName); refreshPointSetList(); selectPointSetName(copyName); } } void PointSetsDlg::slotSelectionChanged(Q3ListBoxItem* item) { ASSERT_ENGAUGE(item != 0); activePointSet = item->text(); toggleActions(); } void PointSetsDlg::slotUp() { ASSERT_ENGAUGE(pointSets != 0); if (curve) pointSets->moveCurveUp(activePointSet); else pointSets->moveMeasureUp(activePointSet); refreshPointSetList(); selectPointSetName(activePointSet); } void PointSetsDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/pointsetsdlg.h000066400000000000000000000065501222557406400204570ustar00rootroot00000000000000/*************************************************************************** pointsetsdlg.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSETSDLG_H #define POINTSETSDLG_H #include #include #include #include #include #include #include #include "pointset.h" const QString NoActivePointSet = QString(""); class PointSet; class PointSets; // this dialog box class edits one of the documents pointset lists class PointSetsDlg : public QDialog { Q_OBJECT public: PointSetsDlg(bool curve, QString title, PointSets* pointSets, QStringList* pointSetsWithOrphanedPoints); ~PointSetsDlg(); public slots: void slotDown(void); void slotUp(void); void slotNew(void); void slotProperties(void); void slotRemove(void); void slotRename(void); void slotSelectionChanged(Q3ListBoxItem* item); void slotWhat(void); private: // generate next curve or measure name from previous by adding one to any digits at the end QString newNameFromPreviousPointSet(QString previousName); // true for curve pointsets, false for measure pointsets bool curve; // document tile for captions QString title; // scratch copy of pointsets container that will be edited by this dialog PointSets* pointSets; // points belonging to removed pointsets are orphaned and must be deleted if user clicks on ok QStringList *pointSetsWithOrphanedPoints; // refresh pointset list after any change to pointset name list or properties. exits with first entry selected void refreshPointSetList(void); // select a particular pointset name in pointSetNames. goal is to have selection follow the moved item void selectPointSetName(QString selectionName); // returns translated string with "curve" replaced by "measure" if curve is false QString curveReplace(const char* text); // enable or disable buttons as appropriate void toggleActions(void); // widgets for maintaining the pointset list QPushButton* buttonNew; QPushButton* buttonRemove; QPushButton* buttonRename; QPushButton* buttonProperties; QPushButton* buttonUp; QPushButton* buttonDown; Q3ListBox* pointSetNames; QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; // name of curve or measure currently selected in the listbox. initially empty QString activePointSet; }; #endif // POINTSETSDLG_H engauge-digitizer-5.2/src/pointsetstyles.cpp000066400000000000000000000304671222557406400214100ustar00rootroot00000000000000/*************************************************************************** pointsetstyles.cpp - description ------------------- begin : Wed Nov 13 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include "pointsetstyles.h" #include "digitdebug.h" #include "main.h" PointSetStyles* PointSetStyles::pointSetStyles = 0; const QColor COLOR_GOLD(218, 165, 32); PointSetStyles::PointSetStyles() { DigitDebug::ctor(QString("pointsetstyles ") + QString::number((ulong) this, 16)); } PointSetStyles::~PointSetStyles() { DigitDebug::dtor(QString("pointsetstyles ") + QString::number((ulong) this, 16)); } QString PointSetStyles::pointShapeName(PointShape shape) { switch (shape) { case Cross: return QString("Cross"); case Diamond: return QString("Diamond"); case Square: return QString("Square"); case Triangle: return QString("Triangle"); case X: return QString("X"); case MaxPointShape: default: return QString(""); } } QString PointSetStyles::pointSizeName(PointSize size) { switch (size) { case PointSize1: return QString("1"); case PointSize2: return QString("2"); case PointSize3: return QString("3"); case PointSize4: return QString("4"); case PointSize5: return QString("5"); case PointSize6: return QString("6"); case PointSize7: return QString("7"); case PointSize8: return QString("8"); case MaxPointSize: default: return QString(""); } } QString PointSetStyles::pointLineSizeName(PointLineSize size) { switch (size) { case PointLineSize1: return QString("1"); case PointLineSize2: return QString("2"); case PointLineSize3: return QString("3"); case PointLineSize4: return QString("4"); case PointLineSize5: return QString("5"); case PointLineSize6: return QString("6"); case PointLineSize7: return QString("7"); case PointLineSize8: return QString("8"); case MaxPointLineSize: default: return QString(""); } } QString PointSetStyles::lineSizeName(LineSize size) { switch (size) { case LineSize1: return QString("1"); case LineSize2: return QString("2"); case LineSize3: return QString("3"); case LineSize4: return QString("4"); case LineSize5: return QString("5"); case LineSize6: return QString("6"); case LineSize7: return QString("7"); case LineSize8: return QString("8"); case MaxLineSize: default: return QString(""); } } QString PointSetStyles::colorName(Color color) { switch (color) { case DigitBlack: return QString("Black"); case DigitBlue: return QString("Blue"); case DigitCyan: return QString("Cyan"); case DigitGold: return QString("Gold"); case DigitGreen: return QString("Green"); case DigitMagenta: return QString("Magenta"); case DigitRed: return QString("Red"); case DigitTransparent: return QString("Transparent"); case DigitYellow: return QString("Yellow"); case DigitMaxColor: default: return QString(""); } } QString PointSetStyles::lineConnectAsName(LineConnectAs method) { switch (method) { case SingleValuedFunction: return QString("Single Valued Function"); case Contour: return QString("Contour"); case MaxConnectAsMethod: default: return QString(""); } } PointShape PointSetStyles::pointShape(QString text) { for (int shape = 0; shape < (int) MaxPointShape; shape++) if (text == pointShapeName((PointShape) shape)) return (PointShape) shape; return (PointShape) 0; } PointSize PointSetStyles::pointSize(QString text) { for (int size = 0; size < (int) MaxPointSize; size++) if (text == pointSizeName((PointSize) size)) return (PointSize) size; return (PointSize) 0; } PointLineSize PointSetStyles::pointLineSize(QString text) { for (int size = 0; size < (int) MaxPointLineSize; size++) if (text == pointLineSizeName((PointLineSize) size)) return (PointLineSize) size; return (PointLineSize) 0; } LineSize PointSetStyles::lineSize(QString text) { for (int size = 0; size < (int) MaxLineSize; size++) if (text == lineSizeName((LineSize) size)) return (LineSize) size; return (LineSize) 0; } Color PointSetStyles::color(QString text) { for (int color = 0; color < (int) DigitMaxColor; color++) if (text == colorName((Color) color)) return (Color) color; return (Color) 0; } LineConnectAs PointSetStyles::lineConnectAs(QString text) { for (int method = 0; method < (int) MaxConnectAsMethod; method++) if (text == lineConnectAsName((LineConnectAs) method)) return (LineConnectAs) method; return (LineConnectAs) 0; } QStringList PointSetStyles::pointShapeNames(void) { QStringList list; for (int shape = 0; shape < (int) MaxPointShape; shape++) list.append(pointShapeName((PointShape) shape)); return list; } QStringList PointSetStyles::pointSizeNames(void) { QStringList list; for (int size = 0; size < (int) MaxPointSize; size++) list.append(pointSizeName((PointSize) size)); return list; } QStringList PointSetStyles::pointLineSizeNames(void) { QStringList list; for (int size = 0; size < (int) MaxPointLineSize; size++) list.append(pointLineSizeName((PointLineSize) size)); return list; } QStringList PointSetStyles::lineSizeNames(void) { QStringList list; for (int size = 0; size < (int) MaxLineSize; size++) list.append(lineSizeName((LineSize) size)); return list; } QStringList PointSetStyles::colorNames(void) { QStringList list; for (int color = 0; color < (int) DigitMaxColor; color++) list.append(colorName((Color) color)); return list; } QStringList PointSetStyles::lineConnectAsNames(void) { QStringList list; for (int method = 0; method < (int) MaxConnectAsMethod; method++) list.append(lineConnectAsName((LineConnectAs) method)); return list; } Q3PointArray PointSetStyles::areaPoints(int xScreen, int yScreen, PointSetStyle pointSetStyle) const { Q3PointArray arr; int fudgeFactor = 1; // add an extra pixel around the perimeter to allow for roundoff error // half point size int hPS = pointSizeToHalfwidth(pointSetStyle.pointSize) + pointSetStyle.pointLineSize + fudgeFactor; switch (pointSetStyle.pointShape) { case Cross: case Diamond: arr.resize(5); arr.setPoint(0, QPoint(-hPS + xScreen, 0 + yScreen)); arr.setPoint(1, QPoint( 0 + xScreen, -hPS + yScreen)); arr.setPoint(2, QPoint( hPS + xScreen, 0 + yScreen)); arr.setPoint(3, QPoint( 0 + xScreen, hPS + yScreen)); arr.setPoint(4, QPoint(-hPS + xScreen, 0 + yScreen)); break; case Square: case X: default: arr.resize(5); arr.setPoint(0, QPoint(-hPS + xScreen, -hPS + yScreen)); arr.setPoint(1, QPoint( hPS + xScreen, -hPS + yScreen)); arr.setPoint(2, QPoint( hPS + xScreen, hPS + yScreen)); arr.setPoint(3, QPoint(-hPS + xScreen, hPS + yScreen)); arr.setPoint(4, QPoint(-hPS + xScreen, -hPS + yScreen)); break; case Triangle: arr.resize(4); arr.setPoint(0, QPoint(-hPS + xScreen, hPS + yScreen)); arr.setPoint(1, QPoint( hPS + xScreen, hPS + yScreen)); arr.setPoint(2, QPoint( 0 + xScreen, -hPS + yScreen)); arr.setPoint(3, QPoint(-hPS + xScreen, hPS + yScreen)); break; } return arr; } void PointSetStyles::drawShape(QPainter &p, int xScreen, int yScreen, PointSetStyle pointSetStyle) { p.setPen(pointSetPen(pointSetStyle.pointLineColor, pointSetStyle.pointLineSize)); p.setBrush(pointSetBrush(pointSetStyle.pointInColor)); Q3PointArray arr; int hPS = pointSizeToHalfwidth(pointSetStyle.pointSize); // half point size, excluding point line size switch (pointSetStyle.pointShape) { case Cross: arr.resize(9); arr.setPoint(0, QPoint(-hPS + xScreen, 0 + yScreen)); arr.setPoint(1, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(2, QPoint( 0 + xScreen, -hPS + yScreen)); arr.setPoint(3, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(4, QPoint( hPS + xScreen, 0 + yScreen)); arr.setPoint(5, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(6, QPoint( 0 + xScreen, hPS + yScreen)); arr.setPoint(7, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(8, QPoint(-hPS + xScreen, 0 + yScreen)); break; case Diamond: arr.resize(5); arr.setPoint(0, QPoint(-hPS + xScreen, 0 + yScreen)); arr.setPoint(1, QPoint( 0 + xScreen, -hPS + yScreen)); arr.setPoint(2, QPoint( hPS + xScreen, 0 + yScreen)); arr.setPoint(3, QPoint( 0 + xScreen, hPS + yScreen)); arr.setPoint(4, QPoint(-hPS + xScreen, 0 + yScreen)); break; case Square: arr.resize(5); arr.setPoint(0, QPoint(-hPS + xScreen, -hPS + yScreen)); arr.setPoint(1, QPoint( hPS + xScreen, -hPS + yScreen)); arr.setPoint(2, QPoint( hPS + xScreen, hPS + yScreen)); arr.setPoint(3, QPoint(-hPS + xScreen, hPS + yScreen)); arr.setPoint(4, QPoint(-hPS + xScreen, -hPS + yScreen)); break; case Triangle: arr.resize(4); arr.setPoint(0, QPoint(-hPS + xScreen, hPS + yScreen)); arr.setPoint(1, QPoint( hPS + xScreen, hPS + yScreen)); arr.setPoint(2, QPoint( 0 + xScreen, -hPS + yScreen)); arr.setPoint(3, QPoint(-hPS + xScreen, hPS + yScreen)); break; case X: default: arr.resize(9); arr.setPoint(0, QPoint(-hPS + xScreen, -hPS + yScreen)); arr.setPoint(1, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(2, QPoint(-hPS + xScreen, hPS + yScreen)); arr.setPoint(3, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(4, QPoint( hPS + xScreen, hPS + yScreen)); arr.setPoint(5, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(6, QPoint( hPS + xScreen, -hPS + yScreen)); arr.setPoint(7, QPoint( 0 + xScreen, 0 + yScreen)); arr.setPoint(8, QPoint(-hPS + xScreen, -hPS + yScreen)); break; } p.drawPolygon(arr); } QPen PointSetStyles::pointSetPen(Color color, int size, Qt::PenStyle style) { switch (color) { case DigitBlack: case DigitMaxColor: default: return QPen(Qt::black, size, style); case DigitBlue: return QPen(Qt::blue, size, style); case DigitCyan: return QPen(Qt::cyan, size, style); case DigitGold: return QPen(COLOR_GOLD, size, style); case DigitGreen: return QPen(Qt::green, size, style); case DigitMagenta: return QPen(Qt::magenta, size, style); case DigitRed: return QPen(Qt::red, size, style); case DigitTransparent: return QPen(Qt::color0, size, style); case DigitYellow: return QPen(Qt::yellow, size, style); } } QBrush PointSetStyles::pointSetBrush(Color color) { switch (color) { case DigitBlack: case DigitMaxColor: default: return QBrush(Qt::black); case DigitBlue: return QBrush(Qt::blue); case DigitCyan: return QBrush(Qt::cyan); case DigitGold: return QBrush(COLOR_GOLD); case DigitGreen: return QBrush(Qt::green); case DigitMagenta: return QBrush(Qt::magenta); case DigitRed: return QBrush(Qt::red); case DigitTransparent: return QBrush(Qt::color0); case DigitYellow: return QBrush(Qt::yellow); } } QColor PointSetStyles::pointSetColor(Color color) { switch (color) { case DigitBlack: case DigitMaxColor: default: return Qt::black; case DigitBlue: return Qt::blue; case DigitCyan: return Qt::cyan; case DigitGold: return COLOR_GOLD; case DigitGreen: return Qt::green; case DigitMagenta: return Qt::magenta; case DigitRed: return Qt::red; case DigitTransparent: return Qt::color0; case DigitYellow: return Qt::yellow; } } engauge-digitizer-5.2/src/pointsetstyles.h000066400000000000000000000062241222557406400210470ustar00rootroot00000000000000/*************************************************************************** pointsetstyles.h - description ------------------- begin : Wed Nov 13 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef POINTSETSTYLES_H #define POINTSETSTYLES_H #include #include #include #include //Added by qt3to4: #include #include "digitdef.h" // this singleton class draws points and lines for both axes and curve pointsets class PointSetStyles { public: static void create(void) { if (!pointSetStyles) pointSetStyles = new PointSetStyles; } static void destroy(void) { if (pointSetStyles) { delete pointSetStyles; pointSetStyles = 0; } } static PointSetStyles& instance(void) { return *pointSetStyles; } QString pointShapeName(PointShape shape); QString pointSizeName(PointSize size); QString pointLineSizeName(PointLineSize size); QString lineSizeName(LineSize size); QString colorName(Color color); QString lineConnectAsName(LineConnectAs method); PointShape pointShape(QString text); PointSize pointSize(QString text); PointLineSize pointLineSize(QString text); LineSize lineSize(QString text); Color color(QString text); LineConnectAs lineConnectAs(QString text); QStringList pointShapeNames(void); QStringList pointSizeNames(void); QStringList pointLineSizeNames(void); QStringList lineSizeNames(void); QStringList colorNames(void); QStringList lineConnectAsNames(void); // drawing methods for canvas polygon objects Q3PointArray areaPoints(int xScreen, int yScreen, PointSetStyle pointSetStyle) const; void drawShape(QPainter &p, int xScreen, int yScreen, PointSetStyle pointSetStyle); // set pen and brush. this works on both the point line and the line QPen pointSetPen(Color color, int size, Qt::PenStyle style = Qt::SolidLine); QBrush pointSetBrush(Color color); QColor pointSetColor(Color color); protected: PointSetStyles(); ~PointSetStyles(); private: // conversion of pointSize from displayed index (1-8) to halfwidth in pixels int pointSizeToHalfwidth(PointSize size) const { return 2 * ((int) size + 1); } // this singleton object static PointSetStyles* pointSetStyles; }; #endif engauge-digitizer-5.2/src/resource.h000066400000000000000000000006721222557406400175660ustar00rootroot00000000000000//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by digitizer.rc // #define IDI_ICON1 101 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif engauge-digitizer-5.2/src/scalebardlg.cpp000066400000000000000000000045431222557406400205360ustar00rootroot00000000000000/*************************************************************************** scalebardlg.cpp - description ------------------- begin : Tue Dec 31 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "scalebardlg.h" #include "digitdoc.h" #include "digitview.h" #include "digitdebug.h" #include "main.h" //Added by qt3to4: #include ScaleBarDlg::ScaleBarDlg(DigitDoc* doc, double length) : QDialog(0, "scalebardlg", true), doc(doc) { DigitDebug::ctor(QString("scalebardlg " + QString::number((ulong) this, 16))); ASSERT_ENGAUGE(doc != 0); setCaption(tr("Scale Bar - [%1]%2") .arg(doc->title()) .arg(freewareCaption)); setFixedSize(250, 90); labelLength = new QLabel(tr("Length:"), this); CHECK_PTR_ENGAUGE(labelLength); labelLength->setGeometry(10, 10, 110, 30); editLength = new QLineEdit(QString::number(length), this); CHECK_PTR_ENGAUGE(editLength); editLength->setGeometry(140, 10, 100, 30); doubleValidator = new QDoubleValidator(editLength); CHECK_PTR_ENGAUGE(doubleValidator); editLength->setValidator(doubleValidator); buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 50, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 50, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); } ScaleBarDlg::~ScaleBarDlg() { DigitDebug::dtor(QString("scalebardlg " + QString::number((ulong) this, 16))); } engauge-digitizer-5.2/src/scalebardlg.h000066400000000000000000000032631222557406400202010ustar00rootroot00000000000000/*************************************************************************** scalebardlg.h - description ------------------- begin : Tue Dec 31 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SCALEBARDLG_H #define SCALEBARDLG_H #include #include #include #include #include class DigitDoc; // when a scale bar is created, this dialog appears so the user can immediately // enter in the length of the scale bar class ScaleBarDlg : public QDialog { Q_OBJECT public: ScaleBarDlg(DigitDoc* doc, double length); ~ScaleBarDlg(); const QString length(void) { return editLength->text(); } private: QLabel* labelLength; QLineEdit* editLength; QDoubleValidator* doubleValidator; QPushButton* buttonOk; QPushButton* buttonCancel; DigitDoc* doc; }; #endif // SCALEBARDLG_H engauge-digitizer-5.2/src/scanforaxes.cpp000066400000000000000000000254621222557406400206120ustar00rootroot00000000000000/*************************************************************************** scanforaxes.cpp - description ------------------- begin : Tue Oct 26 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "scanforaxes.h" #include "defaultsettings.h" #include "main.h" #include "discretize.h" const int PIXEL_DARK = 1; // need value larger than PIXEL_LIGHT const int PIXEL_LIGHT = 0; // need value less than PIXEL_DARK ScanForAxes::ScanForAxes(double xMinG, double xMaxG, double yMinG, double yMaxG, DigitDoc* doc) : m_xMinG(xMinG), m_xMaxG(xMaxG), m_yMinG(yMinG), m_yMaxG(yMaxG), m_doc(doc) { DigitDebug::ctor(QString("scanforaxes ") + QString::number((ulong) this, 16)); } ScanForAxes::~ScanForAxes() { DigitDebug::dtor(QString("scanforaxes ") + QString::number((ulong) this, 16)); } void ScanForAxes::execute() { const QImage img = m_doc->processedImage(); if ((img.width() > 2) && (img.height() > 2)) { QColor scanLineColor = PointSetStyles::instance().pointSetColor( DefaultSettings::instance().getScanForAxesLineColor()); int scanLineWidth = DefaultSettings::instance().getScanForAxesLineWidth(); Q3CanvasLine scanLine(m_doc->canvas()); Q3CanvasLine bestXLine(m_doc->canvas()); // best x scan line so far Q3CanvasLine bestYLine(m_doc->canvas()); // best y scan line so far scanLine.setBrush(QBrush(scanLineColor)); bestXLine.setBrush(QBrush(scanLineColor)); bestYLine.setBrush(QBrush(scanLineColor)); scanLine.setPen(QPen(scanLineColor, scanLineWidth)); bestXLine.setPen(QPen(scanLineColor, scanLineWidth)); bestYLine.setPen(QPen(scanLineColor, scanLineWidth)); scanLine.setZ(ZScanForAxesLines); bestXLine.setZ(ZScanForAxesLines); bestYLine.setZ(ZScanForAxesLines); scanLine.show(); int xAxisRow, xAxisColMin, xAxisColMax; int yAxisCol, yAxisRowMin, yAxisRowMax; scanXAxis(img, scanLine, bestXLine, xAxisRow, xAxisColMin, xAxisColMax); scanYAxis(img, scanLine, bestYLine, yAxisCol, yAxisRowMin, yAxisRowMax); double yForXAxis = 0.0; double xForYAxis = 0.0; m_doc->addAxisPoint(xAxisColMin, xAxisRow, m_xMinG, yForXAxis); m_doc->addAxisPoint(xAxisColMax, xAxisRow, m_xMaxG, yForXAxis); m_doc->addAxisPoint(yAxisCol, yAxisRowMin, xForYAxis, m_yMaxG); // remember, lowest row is at top so use yAxisRowMin! } } void ScanForAxes::scanXAxis(const QImage& img, Q3CanvasLine& scanLine, Q3CanvasLine& bestXLine, int& xAxisRow, int& xAxisColMin, int& xAxisColMax) { ASSERT_ENGAUGE(img.height() > 2); // x axis scan starts at bottom and goes up bestXLine.setPoints(0, img.height() - 1, img.width() - 1, img.height() - 1); bestXLine.show(); // weight starts off at max value of 1 at bottom, and tapers off to 0 at top double weight = 1.0; double dWeight = 1.0 / img.height(); xAxisRow = 0; double highestCorrelation = 0.0; int row, col; bool scanEffect = DefaultSettings::instance().getScanForAxesScanEffect(); Discretize discretize; for (row = img.height() - 1; row >= 0; row--) { scanLine.setPoints(0, row, img.width() - 1, row); double correlation = 0.0; for (col = 0; col < img.width(); col++) if (row + 1 < img.height()) { // perform one-dimensional convolution with finite step function. only two-pixel // wide step function convolution kernel is needed since it will pick up axes of any width, // plus its small value reduces number of computations int pixelHigh = (discretize.processedPixelIsOn(img, col, row + 1) ? PIXEL_DARK : PIXEL_LIGHT); // should be dark at edge of axis int pixelLow = (discretize.processedPixelIsOn(img, col, row) ? PIXEL_DARK : PIXEL_LIGHT); // should be light at edge of axis correlation += pixelHigh - pixelLow; } if (weight * correlation > highestCorrelation) { xAxisRow = row + 1; // we want the row with the black values highestCorrelation = correlation; bestXLine.setPoints(0, xAxisRow, img.width() - 1, xAxisRow); updateView(img); // update so user can see newest axis candidate } if (scanEffect) updateView(img); // update so user sees nice scanning effect as scanLine moves weight -= dWeight; } // get endpoints AxisSlice rowSlice(img.width()); for (col = 0; col < img.width(); col++) rowSlice [col] = (img.pixel(col, xAxisRow) == QColor(Qt::black).rgb()); scanAxisForLowEndpoint(rowSlice, xAxisColMin); scanAxisForHighEndpoint(rowSlice, xAxisColMax); // shrink line down to the actual axis bestXLine.setPoints(xAxisColMin, xAxisRow, xAxisColMax, xAxisRow); updateView(img); } void ScanForAxes::scanYAxis(const QImage& img, Q3CanvasLine& scanLine, Q3CanvasLine& bestYLine, int& yAxisCol, int& yAxisRowMin, int& yAxisRowMax) { ASSERT_ENGAUGE(img.width() > 2); // y axis scan starts at left and goes right bestYLine.setPoints(0, 0, 0, img.height() - 1); bestYLine.show(); // weight starts off at max value of 1 at left, and tapers off to 0 at right double weight = 1.0; double dWeight = 1.0 / img.width(); yAxisCol = 0; double highestCorrelation = 0.0; int col, row; bool scanEffect = DefaultSettings::instance().getScanForAxesScanEffect(); Discretize discretize; for (col = 0; col < img.width(); col++) { scanLine.setPoints(col, 0, col, img.height() - 1); double correlation = 0.0; for (row = 0; row < img.height(); row++) if (col + 1 < img.width()) { // perform one-dimensional convolution with finite step function. only two-pixel // wide step function convolution kernel is needed since it will pick up axes of any width, // plus its small value reduces number of computations int pixelHigh = (discretize.processedPixelIsOn(img, col + 1, row) ? PIXEL_DARK : PIXEL_LIGHT); // should be dark at edge of axis int pixelLow = (discretize.processedPixelIsOn(img, col, row) ? PIXEL_DARK : PIXEL_LIGHT); // should be light at edge of axis correlation += pixelHigh - pixelLow; } if (weight * correlation > highestCorrelation) { yAxisCol = col + 1; // we want the column with the black values highestCorrelation = correlation; bestYLine.setPoints(yAxisCol, 0, yAxisCol, img.height() - 1); updateView(img); // update so user can see newest axis candidate } if (scanEffect) updateView(img); // update so user sees nice scanning effect as scanLine moves weight -= dWeight; } // get endpoints AxisSlice colSlice(img.height()); for (row = 0; row < img.height(); row++) colSlice [row] = (img.pixel(yAxisCol, row) == QColor(Qt::black).rgb()); scanAxisForLowEndpoint(colSlice, yAxisRowMin); scanAxisForHighEndpoint(colSlice, yAxisRowMax); // shrink line down to the actual axis bestYLine.setPoints(yAxisCol, yAxisRowMin, yAxisCol, yAxisRowMax); updateView(img); } void ScanForAxes::scanAxisForLowEndpoint(AxisSlice axisSlice, int& axisMin) { // convolution kernel width int kernelWidth = DefaultSettings::instance().getScanForAxesEndpointKernelWidth(); int halfWidth = kernelWidth / 2; // scan from low to high by moving center of convolution kernel double bestCorrelation = 0.0; axisMin = 0; for (int center = 0; center < (int) axisSlice.size(); center++) { // weight starts off at max value of 1 at left, and tapers off slowly and then more // quickly to 0 at right, as w=sqrt(1-col/colmax) double radical = 1.0 - (double) center / (double) axisSlice.size(); double weight; if (radical < 0.0) weight = 0.0; else weight = sqrt(radical); double correlation = 0.0; for (int offsetSigned = center - halfWidth; offsetSigned < center + halfWidth; offsetSigned++) { if (offsetSigned < center) { if (offsetSigned >= 0) correlation -= axisSlice [offsetSigned]; // microsoft compiler bug disallows unsigned int index else correlation -= PIXEL_LIGHT; } else { if (offsetSigned < (int) axisSlice.size()) correlation += axisSlice [offsetSigned]; // microsoft compiler bug disallows unsigned int index else correlation += PIXEL_LIGHT; } } if (weight * correlation > bestCorrelation) { bestCorrelation = correlation; axisMin = center; } } } void ScanForAxes::scanAxisForHighEndpoint(AxisSlice axisSlice, int& axisMax) { // convolution kernel width int kernelWidth = DefaultSettings::instance().getScanForAxesEndpointKernelWidth(); int halfWidth = kernelWidth / 2; // scan from high to low by moving center of convolution kernel double bestCorrelation = 0.0; axisMax = 0; for (int center = axisSlice.size() - 1; center >= 0; center--) { // weight starts off at max value of 1 at right, and tapers off slowly and then more // quickly to 0 at left, as w=sqrt(col/colmax) double radical = (double) center / (double) axisSlice.size(); double weight; if (radical < 0.0) weight = 0.0; else weight = sqrt(radical); double correlation = 0.0; for (int offsetSigned = center - halfWidth; offsetSigned < center + halfWidth; offsetSigned++) { if (offsetSigned > center) { if (offsetSigned < (int) axisSlice.size()) correlation -= axisSlice [offsetSigned]; // microsoft compiler bug disallows unsigned int index else correlation -= PIXEL_LIGHT; } else { if (offsetSigned >= 0) correlation += axisSlice [offsetSigned]; // microsoft compiler bug disallows unsigned int index else correlation += PIXEL_LIGHT; } } if (weight * correlation > bestCorrelation) { bestCorrelation = correlation; axisMax = center; } } } void ScanForAxes::updateView(const QImage& img) { // this is somewhat slow. since this may be an issue on slower computers, it can be disabled // in the default settings m_doc->slotUpdateViews(0, img.rect()); m_doc->sendUpdateGeometry(); } engauge-digitizer-5.2/src/scanforaxes.h000066400000000000000000000044721222557406400202550ustar00rootroot00000000000000/*************************************************************************** scanforaxes.h - description ------------------- begin : Tue Oct 26 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SCANFORAXES_H #define SCANFORAXES_H #include #include "digitdoc.h" #include "digitdebug.h" typedef QVector AxisSlice; // scan a newly-imported document for the x and y axes, then create // three axis points class ScanForAxes { public: // ranges for x and y axes in graph coordinates ScanForAxes(double xMinG, double xMaxG, double yMinG, double yMaxG, DigitDoc* doc); ~ScanForAxes(); // perform the scanning void execute(); private: // scan in either x or y axis void scanXAxis(const QImage& img, Q3CanvasLine& scanLine, Q3CanvasLine& bestXLine, int& xAxisRow, int& xAxisColMin, int& xAxisColMax); void scanYAxis(const QImage& img, Q3CanvasLine& scanLine, Q3CanvasLine& bestYLine, int& yAxisCol, int& yAxisRowMin, int& yAxisRowMax); // convolutions along axis slice pinpoint start and end of axis line void scanAxisForLowEndpoint(AxisSlice axisSlice, int& axisMin); void scanAxisForHighEndpoint(AxisSlice axisSlice, int& axisMax); // update best lines in active view (there is only one view during import). this // is SLOW so only call this when necessary void updateView(const QImage& img); double m_xMinG; double m_xMaxG; double m_yMinG; double m_yMaxG; DigitDoc* m_doc; }; #endif // SCANFORAXES_H engauge-digitizer-5.2/src/segment.cpp000066400000000000000000000234401222557406400177320ustar00rootroot00000000000000/*************************************************************************** segment.cpp - description ------------------- begin : Wed Nov 20 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include //Added by qt3to4: #include #include #include "segment.h" #include "digitdef.h" #include "pointsetstyles.h" #include "digitdebug.h" #include "main.h" Segment::Segment(Q3Canvas* canvas, int y) : canvas(canvas), yLast(y), m_length(0.0) { DigitDebug::ctor(QString("segment ") + QString::number((ulong) this, 16)); m_lines.setAutoDelete(true); } Segment::~Segment() { DigitDebug::dtor(QString("segment ") + QString::number((ulong) this, 16)); m_lines.clear(); // autoDelete is on } void Segment::appendColumn(int x, int y, SegmentSettings seg) { SegmentLine* line = new SegmentLine(canvas, this); CHECK_PTR_ENGAUGE(line); line->setPoints(x - 1, yLast, x, y); line->setPen(PointSetStyles::instance().pointSetPen(seg.lineColor, seg.lineSize)); line->setZ(ZSegments); // do not show this line or its segment. this is handled later m_lines.append(line); // update total length using distance formula m_length += sqrt((1.0) * (1.0) + (y - yLast) * (y - yLast)); yLast = y; } void Segment::createAcceptablePoint(bool* pFirst, QList* pList, double* xPrev, double* yPrev, double x, double y) { int iOld = (int) (*xPrev + 0.5); int jOld = (int) (*yPrev + 0.5); int i = (int) (x + 0.5); int j = (int) (y + 0.5); if (*pFirst || (iOld != i) || (jOld != j)) { *xPrev = x; *yPrev = y; ASSERT_ENGAUGE(pList != 0); pList->append(QPoint(i, j)); } *pFirst = false; } void Segment::removeUnneededLines(int* foldedLines) { // pathological case is y=0.001*x*x, since the small slope can fool a naive algorithm // into optimizing away all but one point at the origin and another point at the far right. // from this we see that we cannot simply throw away points that were optimized away since they // are needed later to see if we have diverged from the curve SegmentLine* lineOlder = 0; SegmentLine* line; QList removedPoints; for (line = m_lines.first(); line; line = m_lines.next()) { if (lineOlder != 0) { double xLeft = lineOlder->startPoint().x(); double yLeft = lineOlder->startPoint().y(); double xInt = lineOlder->endPoint().x(); double yInt = lineOlder->endPoint().y(); ASSERT_ENGAUGE(line != 0); double xRight = line->endPoint().x(); double yRight = line->endPoint().y(); if (pointIsCloseToLine(xLeft, yLeft, xInt, yInt, xRight, yRight) && pointsAreCloseToLine(xLeft, yLeft, removedPoints, xRight, yRight)) { // remove intermediate point, by removing older line and stretching new line to first point ++(*foldedLines); removedPoints.append(QPoint((int) xInt, (int) yInt)); m_lines.remove(lineOlder); // autoDelete is on line->setPoints((int) xLeft, (int) yLeft, (int) xRight, (int) yRight); } else // keeping this intermediate point and clear out the removed points list removedPoints.clear(); } lineOlder = line; } } bool Segment::pointIsCloseToLine(double xLeft, double yLeft, double xInt, double yInt, double xRight, double yRight) { double xProj, yProj; projectpointontoline(xInt, yInt, xLeft, yLeft, xRight, yRight, &xProj, &yProj); return ( (xInt - xProj) * (xInt - xProj) + (yInt - yProj) * (yInt - yProj) < 0.5 * 0.5); } bool Segment::pointsAreCloseToLine(double xLeft, double yLeft, QList removedPoints, double xRight, double yRight) { QList::iterator itr; for (itr = removedPoints.begin(); itr != removedPoints.end(); ++itr) if (!pointIsCloseToLine(xLeft, yLeft, (double) (*itr).x(), (double) (*itr).y(), xRight, yRight)) return false; return true; } void Segment::showSegment(bool toggle, SegmentSettings seg, QList* updateRectList) { SegmentLine* line; for (line = m_lines.first(); line; line = m_lines.next()) { ASSERT_ENGAUGE(line != 0); line->setVisible(toggle); if (toggle) { QRect updateRect = QRect( line->startPoint(), line->endPoint()).normalize(); updateRect.setLeft(updateRect.left() - seg.lineSize); updateRect.setTop(updateRect.top() - seg.lineSize); updateRect.setRight(updateRect.right() + seg.lineSize); updateRect.setBottom(updateRect.bottom() + seg.lineSize); updateRectList->append(updateRect); } } } Q3CanvasItemList Segment::lines() { Q3CanvasItemList list; SegmentLine* line; for (line = m_lines.first(); line; line = m_lines.next()) list.append((Q3CanvasLine*) line); return list; } QList Segment::fillPoints(SegmentSettings seg) { if (seg.fillCorners) return fillPointsFillingCorners(seg); else return fillPointsWithoutFillingCorners(seg); } QList Segment::fillPointsFillingCorners(SegmentSettings seg) { QList list; ASSERT_ENGAUGE(m_lines.first() != 0); if (m_lines.count() > 0) { double xLast = (double) m_lines.first()->startPoint().x(); double yLast = (double) m_lines.first()->startPoint().y(); double x, y; // variables for createAcceptablePoint double xPrev = m_lines.first()->startPoint().x(); double yPrev = m_lines.first()->startPoint().y(); for (SegmentLine* line = m_lines.first(); line; line = m_lines.next()) { bool firstPointOfLineSegment = true; ASSERT_ENGAUGE(line != 0); double xNext = (double) line->endPoint().x(); double yNext = (double) line->endPoint().y(); // distance formula double segmentLength = sqrt((xNext - xLast) * (xNext - xLast) + (yNext - yLast) * (yNext - yLast)); // loop since we might need to insert multiple points within a single line. this // is the case when removeUnneededLines has consolidated many segment lines double distanceLeft = segmentLength; double s = 0.0; do { // coordinates of new point x = (1.0 - s) * xLast + s * xNext; y = (1.0 - s) * yLast + s * yNext; createAcceptablePoint(&firstPointOfLineSegment, &list, &xPrev, &yPrev, x, y); distanceLeft -= seg.pointSeparation; s += seg.pointSeparation / segmentLength; } while (distanceLeft >= seg.pointSeparation); xLast = xNext; yLast = yNext; } // create one more point at end of last segment, if a point was not already created there bool firstPointOfLineSegment = true; createAcceptablePoint(&firstPointOfLineSegment, &list, &xPrev, &yPrev, xLast, yLast); } return list; } QList Segment::fillPointsWithoutFillingCorners(SegmentSettings seg) { QList list; ASSERT_ENGAUGE(m_lines.first() != 0); if (m_lines.count() > 0) { double xLast = (double) m_lines.first()->startPoint().x(); double yLast = (double) m_lines.first()->startPoint().y(); double x, xNext; double y, yNext; double distanceCompleted = 0.0; // variables for createAcceptablePoint bool firstPoint = true; double xPrev = m_lines.first()->startPoint().x(); double yPrev = m_lines.first()->startPoint().y(); for (SegmentLine* line = m_lines.first(); line; line = m_lines.next()) { ASSERT_ENGAUGE(line != 0); xNext = (double) line->endPoint().x(); yNext = (double) line->endPoint().y(); // distance formula double segmentLength = sqrt((xNext - xLast) * (xNext - xLast) + (yNext - yLast) * (yNext - yLast)); if (segmentLength > 0.0) { // loop since we might need to insert multiple points within a single line. this // is the case when removeUnneededLines has consolidated many segment lines while (distanceCompleted <= segmentLength) { double s = distanceCompleted / segmentLength; // coordinates of new point x = (1.0 - s) * xLast + s * xNext; y = (1.0 - s) * yLast + s * yNext; createAcceptablePoint(&firstPoint, &list, &xPrev, &yPrev, x, y); distanceCompleted += seg.pointSeparation; } distanceCompleted -= segmentLength; } xLast = xNext; yLast = yNext; } } return list; } void Segment::setSettings(SegmentSettings settings) { for (SegmentLine* line = m_lines.first(); line; line = m_lines.next()) { ASSERT_ENGAUGE(line != 0); line->setPen(PointSetStyles::instance().pointSetPen(settings.lineColor, settings.lineSize)); } } void Segment::dump() { ASSERT_ENGAUGE(m_lines.first() != 0); ASSERT_ENGAUGE(m_lines.last() != 0); qDebug("segment %lx lines %d length %g start (%d, %d) stop (%d, %d)", (unsigned long) this, m_lines.count(), length(), m_lines.first()->startPoint().x(), m_lines.first()->startPoint().y(), m_lines.last()->endPoint().x(), m_lines.last()->endPoint().y()); } SegmentLine::SegmentLine(Q3Canvas* canvas, Segment* segment) : Q3CanvasLine(canvas), m_segment(segment) { } SegmentLine::~SegmentLine() { } engauge-digitizer-5.2/src/segment.h000066400000000000000000000110011222557406400173650ustar00rootroot00000000000000/*************************************************************************** segment.h - description ------------------- begin : Wed Nov 20 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SEGMENT_H #define SEGMENT_H #include #include //Added by qt3to4: #include #include "digitdef.h" class Segment; // this class is a special case the standard QCanvasLine for segments, and // has its own rtti value class SegmentLine : public Q3CanvasLine { public: SegmentLine(Q3Canvas* canvas, Segment* segment); ~SegmentLine(); int rtti(void) const { return Rtti_SegmentLine; } Segment* segment(void) { return m_segment; } private: Segment* m_segment; }; // this class is a container for all of the segments. a segment is a set // of linked lines that run along a curve in the original image. the // main complication is that curves in the original image cross each other // and other things like grid lines. rather than invent artificial // intelligence (the next software project), we rely on the user to link // multiple segments together to get points along the entire curve length class Segment { public: Segment(Q3Canvas* canvas, int y); ~Segment(); // add some more pixels in a new column to an active segment void appendColumn(int x, int y, SegmentSettings seg); // show or hide segment void showSegment(bool toggle, SegmentSettings seg, QList* updateRectList); // get methods for length in pixels and in lines double length(void) { return m_length; } int lineCount(void) { return m_lines.count(); } // try to compress a segment that was just completed, by folding together line from // point i to point i+1, with the line from i+1 to i+2, then the line from i+2 to i+3, // until one of the points is more than a half pixel from the folded line. this should // save memory and improve user interface responsiveness void removeUnneededLines(int* foldedLines); // returns canvas item list of segment lines as downcasted canvas lines Q3CanvasItemList lines(void); // create evenly spaced points along the segment QList fillPoints(SegmentSettings seg); // get and set methods for segment settings void setSettings(SegmentSettings settings); // display debug information for this segment void dump(void); private: Q3Canvas* canvas; // y value of last point which is in previous column int yLast; // this segment is drawn as a series of line segments Q3PtrList m_lines; // total length of lines owned by this segment, as floating point to allow fractional increments double m_length; // while filling corners, create a point if any of the following are true: // -it is the first point of the any line segment // -it is different than the previous point // while not filling corners, create a point if any of the following are true: // -it is the first point of the first line segment // -it is different than the previous point void createAcceptablePoint(bool* pFirst, QList* pList, double* xPrev, double* yPrev, double x, double y); // create evenly spaced points along the segment QList fillPointsFillingCorners(SegmentSettings seg); QList fillPointsWithoutFillingCorners(SegmentSettings seg); // return true if point are a half pixel or less away from a line bool pointIsCloseToLine(double xLeft, double yLeft, double xInt, double yInt, double xRight, double yRight); bool pointsAreCloseToLine(double xLeft, double yLeft, QList removedPoints, double xRight, double yRight); }; #endif // SEGMENT_H engauge-digitizer-5.2/src/segmentdlg.cpp000066400000000000000000000266641222557406400204340ustar00rootroot00000000000000/*************************************************************************** segmentdlg.cpp - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include //Added by qt3to4: #include #include #include #include "segmentdlg.h" #include "pointsetstyles.h" #include "digitdebug.h" #include "main.h" #include "defaultsettings.h" #include "img/whatsthis.xpm" #include "img/segmentpreview.xpm" #include "segments.h" #include "segment.h" SegmentDlg::SegmentDlg(QString title, SegmentSettings* settings) : QDialog(0, "segmentdlg", true), settings(settings) { DigitDebug::ctor(QString("segmentdlg ") + QString::number((ulong) this, 16)); setCaption(tr("Segments - [%1]%2") .arg(title) .arg(freewareCaption)); setFixedSize(340, 380); // segment settings labelMinPoints = new QLabel(QString(tr("Minimum Length:")), this); CHECK_PTR_ENGAUGE(labelMinPoints); labelMinPoints->setGeometry(20, 10, 160, 30); editMinPoints = new QLineEdit(this); CHECK_PTR_ENGAUGE(editMinPoints); editMinPoints->setGeometry(190, 10, 130, 30); editMinPoints->setText(QString("%1").arg(settings->minPoints)); QWhatsThis::add(editMinPoints, QString(tr("Select a minimum number of points in a segment.\n\n" "Only segments with more points will be created.\n\n" "This value should be as large as possible to reduce memory usage. This value has " "a lower limit"))); validatorMinPoints = new QIntValidator(editMinPoints); CHECK_PTR_ENGAUGE(validatorMinPoints); editMinPoints->setValidator(validatorMinPoints); connect(editMinPoints, SIGNAL(textChanged(const QString &)), this, SLOT(slotMinPoints(const QString &))); labelPointSeparation = new QLabel(QString(tr("Point Separation:")), this); CHECK_PTR_ENGAUGE(labelPointSeparation); labelPointSeparation->setGeometry(20, 50, 160, 30); editPointSeparation = new QLineEdit(this); CHECK_PTR_ENGAUGE(editPointSeparation); editPointSeparation->setGeometry(190, 50, 130, 30); editPointSeparation->setText(QString("%1").arg(settings->pointSeparation)); QWhatsThis::add(editPointSeparation, QString(tr("Select a point separation in pixels.\n\n" "Successive points added to a segment will be separated by this number of pixels. " "If Fill Corners is enabled, then additional points will be inserted at corners so some points " "will be closer.\n\n" "This value has a lower limit"))); validatorPointSeparation = new QIntValidator(editPointSeparation); CHECK_PTR_ENGAUGE(validatorPointSeparation); editPointSeparation->setValidator(validatorPointSeparation); connect(editPointSeparation, SIGNAL(textChanged(const QString &)), this, SLOT(slotPointSeparation(const QString &))); labelFillCorners = new QLabel(QString(tr("Fill Corners:")), this); CHECK_PTR_ENGAUGE(labelFillCorners); labelFillCorners->setGeometry(20, 90, 160, 30); checkFillCorners = new QCheckBox(this); CHECK_PTR_ENGAUGE(checkFillCorners); checkFillCorners->setGeometry(190, 90, 130, 30); checkFillCorners->setChecked(settings->fillCorners); QWhatsThis::add(checkFillCorners, QString(tr("Fill corners.\n\n" "In addition to the points placed at regular intervals, this option causes a point to be " "placed at each corner. This option can capture important information in piecewise linear graphs, " "but gradually curving graphs may not benefit from the additional points"))); connect(checkFillCorners, SIGNAL(toggled(bool)), this, SLOT(slotFillCorners(bool))); labelLineSize = new QLabel(QString(tr("Line Size:")), this); CHECK_PTR_ENGAUGE(labelLineSize); labelLineSize->setGeometry(20, 130, 160, 30); comboLineSize = new QComboBox(false, this, tr("Line Size")); CHECK_PTR_ENGAUGE(comboLineSize); comboLineSize->setGeometry(190, 130, 130, 30); comboLineSize->setEditable(false); comboLineSize->insertStringList(PointSetStyles::instance().lineSizeNames()); QWhatsThis::add(comboLineSize, QString(tr("Select a size for the lines drawn along a segment"))); connect(comboLineSize, SIGNAL(activated(const QString &)), this, SLOT(slotLineSize(const QString &))); connect(comboLineSize, SIGNAL(textChanged(const QString &)), this, SLOT(slotLineSize(const QString &))); labelLineColor = new QLabel(QString(tr("Line Color:")), this); CHECK_PTR_ENGAUGE(labelLineColor); labelLineColor->setGeometry(20, 170, 160, 30); comboLineColor = new QComboBox(false, this, tr("Line Color")); CHECK_PTR_ENGAUGE(comboLineColor); comboLineColor->setGeometry(190, 170, 130, 30); comboLineColor->setEditable(false); comboLineColor->insertStringList(PointSetStyles::instance().colorNames()); QWhatsThis::add(comboLineColor, QString(tr("Select a color for the lines drawn along a segment"))); connect(comboLineColor, SIGNAL(activated(const QString &)), this, SLOT(slotLineColor(const QString &))); // preview area labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); labelPreview->setGeometry(10, 210, 160, 20); previewCanvas = new Q3Canvas(this); CHECK_PTR_ENGAUGE(previewCanvas); previewCanvas->resize(320, 100); QPixmap previewPixmap(segmentpreview_xpm); previewImageOriginal = previewPixmap.createHeuristicMask().convertToImage(); previewCanvasView = new Q3CanvasView(previewCanvas, this); CHECK_PTR_ENGAUGE(previewCanvasView); previewCanvasView->setGeometry(10, 230, 320, 100); previewCanvasView->setHScrollBarMode(Q3ScrollView::AlwaysOff); previewCanvasView->setVScrollBarMode(Q3ScrollView::AlwaysOff); QWhatsThis::add(previewCanvasView, QString(tr("Preview window shows the shortest line that can be segment filled, " "and the effects of current settings on segments and points generated by segment fill"))); segments = new Segments(previewCanvas); CHECK_PTR_ENGAUGE(segments); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(10, 340, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(140, 340, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(270, 340, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); // pointSet will own the preview points PointSetStyle style = DefaultSettings::instance().getCurveStyle(0); style.lineColor = DigitTransparent; // hide lines pointSet.setStyle(style); toggleActions(); connect(this, SIGNAL(updatePreview()), this, SLOT(slotUpdatePreview())); emit(updatePreview()); } SegmentDlg::~SegmentDlg() { DigitDebug::dtor(QString("segmentdlg ") + QString::number((ulong) this, 16)); if (segments) { delete segments; segments = 0; } if (previewCanvas) { delete previewCanvas; previewCanvas = 0; } } void SegmentDlg::toggleActions() { ASSERT_ENGAUGE(comboLineSize != 0); comboLineSize->setCurrentText(PointSetStyles::instance().lineSizeName(settings->lineSize)); ASSERT_ENGAUGE(comboLineColor != 0); comboLineColor->setCurrentText(PointSetStyles::instance().colorName(settings->lineColor)); ASSERT_ENGAUGE(buttonOk != 0); buttonOk->setEnabled(validateSettings()); } bool SegmentDlg::validateSettings() { // enforce constraints ASSERT_ENGAUGE(settings != 0); if (settings->minPoints < DefaultSettings::instance().getSegmentSettings().minPoints) return false; if (settings->pointSeparation < DefaultSettings::instance().getSegmentPointMinSeparation()) return false; return true; } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void SegmentDlg::slotFillCorners(bool check) { ASSERT_ENGAUGE(settings != 0); settings->fillCorners = check; emit(updatePreview()); } void SegmentDlg::slotLineSize(const QString &text) { ASSERT_ENGAUGE(settings != 0); settings->lineSize = PointSetStyles::instance().lineSize(text); emit(updatePreview()); } void SegmentDlg::slotLineColor(const QString &text) { ASSERT_ENGAUGE(settings != 0); settings->lineColor = PointSetStyles::instance().color(text); emit(updatePreview()); } void SegmentDlg::slotMinPoints(const QString &text) { ASSERT_ENGAUGE(settings != 0); if (text == QString("")) settings->minPoints = 0; else settings->minPoints = text.toInt(); toggleActions(); emit(updatePreview()); } void SegmentDlg::slotPointSeparation(const QString &text) { ASSERT_ENGAUGE(settings != 0); if (text == QString("")) settings->pointSeparation = 0; else settings->pointSeparation = text.toInt(); toggleActions(); emit(updatePreview()); } void SegmentDlg::slotUpdatePreview() { // draw shortest horizontal line, 2 pixels wide, that will show minimum points and separation const int Y_HORIZONTAL_LINE = 20; QImage previewImage = previewImageOriginal.copy(); int width = (settings->minPoints - 1) * settings->pointSeparation + 1; // add extra pixel to prevent roundoff problems int indexBlack = previewImage.pixelIndex(0, 0); // subtle trick here! put black in top-left pixel so index is available int xStart = previewCanvas->width() / 2 - width / 2; if (xStart < 0) xStart = 0; int xStop = previewCanvas->width() / 2 + width / 2; if (xStop >= previewCanvas->width()) xStop = previewCanvas->width() - 1; for (int x = xStart; x <= xStop; x++) { previewImage.setPixel(x, Y_HORIZONTAL_LINE, indexBlack); previewImage.setPixel(x, Y_HORIZONTAL_LINE + 1, indexBlack); } QPixmap previewPixmap; previewPixmap.convertFromImage(previewImage); previewCanvas->setBackgroundPixmap(previewPixmap); // make segments for display QList updateRectList; ASSERT_ENGAUGE(settings != 0); segments->makeSegments(previewImage, *settings); segments->showSegments(true, *settings, &updateRectList); if (validateSettings()) { // make points for display pointSet.removePoints(); // remove existing points QList list = segments->fillPoints(*settings); QList::iterator itr; for (itr = list.begin(); itr != list.end(); ++itr) { Point* p = new Point((*itr).x(), (*itr).y(), previewCanvas); CHECK_PTR_ENGAUGE(p); pointSet.addPoint(previewCanvas, p, &updateRectList); } } else pointSet.removePoints(); pointSet.show(); previewCanvasView->repaintContents(); } void SegmentDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/segmentdlg.h000066400000000000000000000064671222557406400201000ustar00rootroot00000000000000/*************************************************************************** segmentdlg.h - description ------------------- begin : Wed Oct 30 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SEGMENTDLG_H #define SEGMENTDLG_H #include #include #include #include #include #include #include #include #include #include #include "digitdef.h" #include "point.h" #include "pointset.h" class Segments; // this dialog box class edits a document's segment information class SegmentDlg : public QDialog { Q_OBJECT public: SegmentDlg(QString title, SegmentSettings* settings); ~SegmentDlg(); public slots: void slotMinPoints(const QString &text); void slotPointSeparation(const QString &text); void slotFillCorners(bool check); void slotLineSize(const QString &text); void slotLineColor(const QString &text); void slotWhat(void); private slots: // update preview after modifying a property. this is implemented as a slot so that // the long delay involved in creating segments will delay responses to the user (especially // typing in point separation window) void slotUpdatePreview(void); signals: // send off signal to update preview after current processing has a chance to finish void updatePreview(void); private: // enable or disable buttons as appropriate void toggleActions(void); // return true if all settings contraints are currently satisfied bool validateSettings(void); SegmentSettings* settings; // segment properties QLabel* labelMinPoints; QLineEdit* editMinPoints; QIntValidator* validatorMinPoints; QLabel* labelPointSeparation; QLineEdit* editPointSeparation; QIntValidator* validatorPointSeparation; QLabel* labelFillCorners; QCheckBox* checkFillCorners; QLabel* labelLineSize; QComboBox* comboLineSize; QLabel* labelLineColor; QComboBox* comboLineColor; // widgets for previewing the point and line styles of the currently selected segment QLabel* labelPreview; Q3Canvas* previewCanvas; Q3CanvasView* previewCanvasView; QImage previewImageOriginal; Segments* segments; PointSet pointSet; // every point, even preview points, must belong to a pointset // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; }; #endif // SEGMENTDLG_H engauge-digitizer-5.2/src/segments.cpp000066400000000000000000000253141222557406400201170ustar00rootroot00000000000000/*************************************************************************** segments.cpp - description ------------------- begin : Wed Nov 20 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //Added by qt3to4: #include #include #include "segments.h" #include "segment.h" #include "digitdebug.h" #include "main.h" #include "pointsetstyles.h" #include "discretize.h" Segments::Segments(Q3Canvas* canvas) : canvas(canvas) { DigitDebug::ctor(QString("segments ") + QString::number((ulong) this, 16)); segments.setAutoDelete(true); } Segments::~Segments() { DigitDebug::dtor(QString("segments ") + QString::number((ulong) this, 16)); segments.clear(); // autoDelete is on } int Segments::adjacentRuns(bool* columnBool, int yStart, int yStop, int height) { int runs = 0; bool inRun = false; for (int y = yStart - 1; y <= yStop + 1; y++) { if ((0 <= y) && (y < height)) { if (!inRun && columnBool [y]) { inRun = true; ++runs; } else if (inRun && !columnBool [y]) inRun = false; } } return runs; } Segment* Segments::adjacentSegment(Segment** lastSegment, int yStart, int yStop, int height) { for (int y = yStart - 1; y <= yStop + 1; y++) if ((0 <= y) && (y < height)) if (lastSegment [y]) return lastSegment [y]; return 0; } int Segments::adjacentSegments(Segment** lastSegment, int yStart, int yStop, int height) { int segments = 0; bool inSegment = false; for (int y = yStart - 1; y <= yStop + 1; y++) { if ((0 <= y) && (y < height)) { if (!inSegment && lastSegment [y]) { inSegment = true; ++segments; } else if (inSegment && !lastSegment [y]) inSegment = false; } } return segments; } QList Segments::fillPoints(SegmentSettings seg) { QList list; for (Segment* segment = segments.first(); segment; segment = segments.next()) { ASSERT_ENGAUGE(segment != 0); list += segment->fillPoints(seg); } return list; } void Segments::finishRun(bool* lastBool, bool* nextBool, Segment** lastSegment, Segment** currSegment, int x, int yStart, int yStop, int height, SegmentSettings set, int* madeLines) { // when looking at adjacent columns, include pixels that touch diagonally since // those may also diagonally touch nearby runs in the same column (which would indicate // a branch) DigitDebug::scanning(QString("column ") + QString::number(x) + QString(", rows ") + QString::number(yStart) + QString(" to ") + QString::number(yStop) + QString(", runs on left ") + QString::number(adjacentRuns(nextBool, yStart, yStop, height)) + QString(", runs on right ") + QString::number(adjacentSegments(lastSegment, yStart, yStop, height))); // count runs that touch on the left if (adjacentRuns(lastBool, yStart, yStop, height) > 1) return; // count runs that touch on the right if (adjacentRuns(nextBool, yStart, yStop, height) > 1) return; Segment* seg; if (adjacentSegments(lastSegment, yStart, yStop, height) == 0) { // this is the start of a new segment seg = new Segment(canvas, (int) (0.5 + (yStart + yStop) / 2.0)); CHECK_PTR_ENGAUGE(seg); segments.append(seg); } else { // this is the continuation of an existing segment seg = adjacentSegment(lastSegment, yStart, yStop, height); ++(*madeLines); ASSERT_ENGAUGE(seg != 0); seg->appendColumn(x, (int) (0.5 + (yStart + yStop) / 2.0), set); } for (int y = yStart; y <= yStop; y++) currSegment [y] = seg; } void Segments::loadBool(const Discretize* discretize, bool* columnBool, QImage* image, int x) { ASSERT_ENGAUGE(image != 0); for (int y = 0; y < image->height(); y++) if (x < 0) columnBool [y] = false; else columnBool [y] = discretize->processedPixelIsOn(*image, x, y); } void Segments::loadSegment(Segment** columnSegment, int height) { for (int y = 0; y < height; y++) columnSegment [y] = 0; } void Segments::makeSegments(QImage &imageProcessed, SegmentSettings seg) { segments.clear(); // autoDelete is on // statistics that show up in debug spew int madeLines = 0; int shortLines = 0; // lines rejected since their segments are too short int foldedLines = 0; // lines rejected since they could be into other lines // debugging with modal progress dialog box is problematic so make switchable const bool useDlg = true; // for each new column of pixels, loop through the runs. a run is defined as // one or more colored pixels that are all touching, with one uncolored pixel or the // image boundary at each end of the set. for each set in the current column, count // the number of runs it touches in the adjacent (left and right) columns. here is // the pseudocode: // if ((L > 1) || (R > 1)) // "this run is at a branch point so ignore the set" // else // if (L == 0) // "this run is the start of a new segment" // else // "this run is appended to the segment on the left int width = imageProcessed.width(); int height = imageProcessed.height(); QProgressDialog* dlg; if (useDlg) { dlg = new QProgressDialog("Scanning segments in image", "Cancel", 0, width); CHECK_PTR_ENGAUGE(dlg); dlg->setCaption(QString("Progress")); dlg->show(); } bool* lastBool = new bool [height]; CHECK_PTR_ENGAUGE(lastBool); bool* currBool = new bool [height]; CHECK_PTR_ENGAUGE(currBool); bool* nextBool = new bool [height]; CHECK_PTR_ENGAUGE(nextBool); Segment** lastSegment = new Segment* [height]; CHECK_PTR_ENGAUGE(lastSegment); Segment** currSegment = new Segment* [height]; CHECK_PTR_ENGAUGE(currSegment); Discretize discretize; loadBool(&discretize, lastBool, &imageProcessed, -1); loadBool(&discretize, currBool, &imageProcessed, 0); loadBool(&discretize, nextBool, &imageProcessed, 1); loadSegment(lastSegment, height); for (int x = 0; x < width; x++) { if (useDlg) { // update progress bar dlg->setValue(x); qApp->processEvents(); if (dlg->wasCanceled()) // quit scanning. only existing segments will be available break; } matchRunsToSegments(x, height, lastBool, lastSegment, currBool, currSegment, nextBool, seg, &madeLines, &foldedLines, &shortLines); // get ready for next column scrollBool(lastBool, currBool, height); scrollBool(currBool, nextBool, height); if (x + 1 < width) loadBool(&discretize, nextBool, &imageProcessed, x + 1); scrollSegment(lastSegment, currSegment, height); } if (useDlg) { dlg->setValue(width); delete dlg; } DigitDebug::scanning(QString("segment lines created ") + QString::number(madeLines) + QString(", too short so removed ") + QString::number(shortLines) + QString(", folded together ") + QString::number(foldedLines)); delete[] lastBool; delete[] currBool; delete[] nextBool; delete[] lastSegment; delete[] currSegment; } void Segments::matchRunsToSegments(int x, int height, bool* lastBool, Segment** lastSegment, bool* currBool, Segment** currSegment, bool* nextBool, SegmentSettings seg, int* madeLines, int* foldedLines, int* shortLines) { loadSegment(currSegment, height); int yStart = 0; bool inRun = false; for (int y = 0; y < height; y++) { if (!inRun && currBool [y]) { inRun = true; yStart = y; } if ((y + 1 >= height) || !currBool [y + 1]) { if (inRun) finishRun(lastBool, nextBool, lastSegment, currSegment, x, yStart, y, height, seg, madeLines); inRun = false; } } removeUnneededLines(lastSegment, currSegment, height, foldedLines, shortLines, seg); } void Segments::removeUnneededLines(Segment** lastSegment, Segment** currSegment, int height, int* foldedLines, int* shortLines, SegmentSettings seg) { Segment* segLast = 0; for (int yLast = 0; yLast < height; yLast++) { if (lastSegment [yLast] && (lastSegment [yLast] != segLast)) { segLast = lastSegment [yLast]; // if the segment is found in the current column then it is still in work so postpone processing bool found = false; for (int yCur = 0; yCur < height; yCur++) if (segLast == currSegment [yCur]) { found = true; break; } if (!found) { ASSERT_ENGAUGE(segLast != 0); if (segLast->length() < (seg.minPoints - 1) * seg.pointSeparation) { // remove whole segment since it is too short *shortLines += segLast->lineCount(); segments.remove(segLast); // autoDelete is on } else // keep segment, but try to fold lines segLast->removeUnneededLines(foldedLines); } } } } void Segments::scrollBool(bool* left, bool* right, int height) { for (int y = 0; y < height; y++) left [y] = right [y]; } void Segments::scrollSegment(Segment** left, Segment** right, int height) { for (int y = 0; y < height; y++) left [y] = right [y]; } void Segments::showSegments(bool toggle, SegmentSettings seg, QList* updateRectList) { int minPixels = (seg.minPoints - 1) * seg.pointSeparation; Segment* segment; for (segment = segments.first(); segment; segment = segments.next()) { // no matter the value of toggle, never show segments that are too short ASSERT_ENGAUGE(segment != 0); if (segment->length() < minPixels) segment->showSegment(false, seg, updateRectList); else segment->showSegment(toggle, seg, updateRectList); } } void Segments::setSettings(SegmentSettings settings) { Segment* segment; for (segment = segments.first(); segment; segment = segments.next()) { ASSERT_ENGAUGE(segment != 0); segment->setSettings(settings); } } void Segments::dump() { for (Segment* segment = segments.first(); segment; segment = segments.next()) { ASSERT_ENGAUGE(segment != 0); segment->dump(); } } engauge-digitizer-5.2/src/segments.h000066400000000000000000000107011222557406400175560ustar00rootroot00000000000000/*************************************************************************** segments.h - description ------------------- begin : Wed Nov 20 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SEGMENTS_H #define SEGMENTS_H #include #include //Added by qt3to4: #include #include "digitdef.h" class Segment; class Discretize; // this class is a container for all of the segments. a segment is a set // of linked lines that run along a curve in the original image. the // main complication is that curves in the original image cross each other // and other things like grid lines. rather than invent artificial // intelligence (the next software project), we rely on the user to link // multiple segments together to get points along the entire curve length class Segments { public: Segments(Q3Canvas* canvas); ~Segments(); // return segment fill points for all segments, for previewing QList fillPoints(SegmentSettings seg); // segments are built when the original image is loaded. they start out hidden // and remain so until showSegments is called void makeSegments(QImage &imageProcessed, SegmentSettings seg); // turn segments on/off void showSegments(bool toggle, SegmentSettings seg, QList* updateRectList); // get and set methods for segment settings void setSettings(SegmentSettings settings); // debug these segments void dump(void); private: Q3Canvas* canvas; // return the number of runs adjacent to the pixels from yStart to yStop (inclusive) int adjacentRuns(bool* columnBool, int yStart, int yStop, int height); // find the single segment pointer among the adjacent pixels from yStart-1 to yStop+1 Segment* adjacentSegment(Segment** lastSegment, int yStart, int yStop, int height); // return the number of segments adjacent to the pixels from yStart to yStop (inclusive) int adjacentSegments(Segment** lastSegment, int yStart, int yStop, int height); // process a run of pixels. if there are fewer than two adjacent pixel runs on // either side, this run will be added to an existing segment, or the start of // a new segment void finishRun(bool* lastBool, bool* nextBool, Segment** lastSegment, Segment** currSegment, int x, int yStart, int yStop, int height, SegmentSettings seg, int* madeLines); // initialize one column of boolean flags using the pixels of the specified column void loadBool(const Discretize* discretize, bool* columnBool, QImage* image, int x); // initialize one column of segment pointers void loadSegment(Segment** columnSegment, int height); // identify the runs in a column, and connect them to segments void matchRunsToSegments(int x, int height, bool* lastBool, Segment** lastSegment, bool* currBool, Segment** currSegment, bool* nextBool, SegmentSettings seg, int* madeLines, int* foldedLines, int* shortLines); // remove unneeded lines belonging to segments that just finished in the previous column. // the results of this function are displayed in the debug spew of makeSegments void removeUnneededLines(Segment** lastSegment, Segment** currSegment, int height, int* foldedLines, int* shortLines, SegmentSettings seg); // scroll the boolean flags of the right column into the left column void scrollBool(bool* left, bool* right, int height); // scroll the segment pointers of the right column into the left column void scrollSegment(Segment** left, Segment** right, int height); // segments produced by scanning the image Q3PtrList segments; }; #endif // SEGMENTS_H engauge-digitizer-5.2/src/sessionsdlg.cpp000066400000000000000000000302371222557406400206270ustar00rootroot00000000000000/*************************************************************************** sessionsdlg.cpp - description ------------------- begin : Thu Oct 7 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include //Added by qt3to4: #include #include #include "sessionsdlg.h" #include "img/whatsthis.xpm" #include "digitdebug.h" #include "defaultsettings.h" #include "main.h" SessionsDlg::SessionsDlg(SessionsSettings* sessionsSettings) : QDialog(0, "SessionsDlg", false), m_sessionsSettings(sessionsSettings) { DigitDebug::ctor(QString("sessionsdlg " + QString::number((ulong) this, 16))); setCaption(tr("Sessions %1") .arg(freewareCaption)); setFixedSize(380, 320); // sessions settings checkSessions = new QCheckBox(QString(tr("Save the following settings between sessions:")), this); CHECK_PTR_ENGAUGE(checkSessions); checkSessions->setGeometry(20, 20, 325, 20); QWhatsThis::add(checkSessions, QString(tr("Select this to enable saving of settings between sessions"))); connect(checkSessions, SIGNAL(toggled(bool)), this, SLOT(slotSessions(bool))); checkCoordinates = new QCheckBox(QString(tr("Coordinates")), this); CHECK_PTR_ENGAUGE(checkCoordinates); checkCoordinates->setGeometry(50, 50, 130, 20); QWhatsThis::add(checkCoordinates, QString(tr("Select this to save coordinates settings between sessions"))); connect(checkCoordinates, SIGNAL(toggled(bool)), this, SLOT(slotCoordinates(bool))); checkAxes = new QCheckBox(QString(tr("Axes")), this); CHECK_PTR_ENGAUGE(checkAxes); checkAxes->setGeometry(50, 80, 130, 20); QWhatsThis::add(checkAxes, QString(tr("Select this to save axes settings between sessions"))); connect(checkAxes, SIGNAL(toggled(bool)), this, SLOT(slotAxes(bool))); checkScaleBar = new QCheckBox(QString(tr("Scale bar")), this); CHECK_PTR_ENGAUGE(checkScaleBar); checkScaleBar->setGeometry(50, 110, 130, 20); QWhatsThis::add(checkScaleBar, QString(tr("Select this to save scale bar settings between sessions"))); connect(checkScaleBar, SIGNAL(toggled(bool)), this, SLOT(slotScaleBar(bool))); checkCurves = new QCheckBox(QString(tr("Curves")), this); CHECK_PTR_ENGAUGE(checkCurves); checkCurves->setGeometry(50, 140, 130, 20); QWhatsThis::add(checkCurves, QString(tr("Select this to save curves settings between sessions"))); connect(checkCurves, SIGNAL(toggled(bool)), this, SLOT(slotCurves(bool))); checkSegments = new QCheckBox(QString(tr("Segments")), this); CHECK_PTR_ENGAUGE(checkSegments); checkSegments->setGeometry(50, 170, 130, 20); QWhatsThis::add(checkSegments, QString(tr("Select this to save segments settings between sessions"))); connect(checkSegments, SIGNAL(toggled(bool)), this, SLOT(slotSegments(bool))); checkPointMatch = new QCheckBox(QString(tr("Point match")), this); CHECK_PTR_ENGAUGE(checkPointMatch); checkPointMatch->setGeometry(50, 200, 130, 20); QWhatsThis::add(checkPointMatch, QString(tr("Select this to save point match settings between sessions"))); connect(checkPointMatch, SIGNAL(toggled(bool)), this, SLOT(slotPointMatch(bool))); checkMeasures = new QCheckBox(QString(tr("Measures")), this); CHECK_PTR_ENGAUGE(checkMeasures); checkMeasures->setGeometry(210, 50, 130, 20); QWhatsThis::add(checkMeasures, QString(tr("Select this to save measures settings between sessions"))); connect(checkMeasures, SIGNAL(toggled(bool)), this, SLOT(slotMeasures(bool))); checkDiscretize = new QCheckBox(QString(tr("Discretize")), this); CHECK_PTR_ENGAUGE(checkDiscretize); checkDiscretize->setGeometry(210, 80, 130, 20); QWhatsThis::add(checkDiscretize, QString(tr("Select this to save discretize settings between sessions"))); connect(checkDiscretize, SIGNAL(toggled(bool)), this, SLOT(slotDiscretize(bool))); checkGridRemoval = new QCheckBox(QString(tr("Grid removal")), this); CHECK_PTR_ENGAUGE(checkGridRemoval); checkGridRemoval->setGeometry(210, 110, 130, 20); QWhatsThis::add(checkGridRemoval, QString(tr("Select this to save grid removal settings between sessions"))); connect(checkGridRemoval, SIGNAL(toggled(bool)), this, SLOT(slotGridRemoval(bool))); checkGridDisplay = new QCheckBox(QString(tr("Grid display")), this); CHECK_PTR_ENGAUGE(checkGridDisplay); checkGridDisplay->setGeometry(210, 140, 130, 20); QWhatsThis::add(checkGridDisplay, QString(tr("Select this to save grid display settings between sessions"))); connect(checkGridDisplay, SIGNAL(toggled(bool)), this, SLOT(slotGridDisplay(bool))); checkExporting = new QCheckBox(QString(tr("Export")), this); CHECK_PTR_ENGAUGE(checkExporting); checkExporting->setGeometry(210, 170, 130, 20); QWhatsThis::add(checkExporting, QString(tr("Select this to save export settings between sessions"))); connect(checkExporting, SIGNAL(toggled(bool)), this, SLOT(slotExporting(bool))); checkViewSelections = new QCheckBox(QString(tr("View selections")), this); CHECK_PTR_ENGAUGE(checkViewSelections); checkViewSelections->setGeometry(210, 200, 130, 20); QWhatsThis::add(checkViewSelections, QString(tr("Select this to save view selections between sessions"))); connect(checkViewSelections, SIGNAL(toggled(bool)), this, SLOT(slotViewSelections(bool))); lblInitialDigitizeState = new QLabel(QString(tr("Initial digitizing state:")), this); CHECK_PTR_ENGAUGE(lblInitialDigitizeState); lblInitialDigitizeState->setGeometry(30, 240, 160, 20); cmbInitialDigitizeState = new QComboBox(this); CHECK_PTR_ENGAUGE(cmbInitialDigitizeState); cmbInitialDigitizeState->setGeometry(210, 240, 130, 20); cmbInitialDigitizeState->insertItem(stateName(SelectState)); // states in order of appearance in toolbar cmbInitialDigitizeState->insertItem(stateName(AxisState)); cmbInitialDigitizeState->insertItem(stateName(ScaleState)); cmbInitialDigitizeState->insertItem(stateName(CurveState)); cmbInitialDigitizeState->insertItem(stateName(PointMatchState)); cmbInitialDigitizeState->insertItem(stateName(SegmentState)); cmbInitialDigitizeState->insertItem(stateName(MeasureState)); QWhatsThis::add(cmbInitialDigitizeState, QString(tr("Select initial digitizing state after startup"))); connect(cmbInitialDigitizeState, SIGNAL(activated(const QString&)), this, SLOT(slotInitialDigitizeState(const QString&))); // navigation buttons buttonOk = new QPushButton(tr("OK"), this); CHECK_PTR_ENGAUGE(buttonOk); buttonOk->setGeometry(30, 280, 100, 30); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); buttonCancel = new QPushButton(tr("Cancel"), this); CHECK_PTR_ENGAUGE(buttonCancel); buttonCancel->setGeometry(160, 280, 100, 30); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); buttonWhat = new QPushButton(this); CHECK_PTR_ENGAUGE(buttonWhat); buttonWhat->setPixmap(QPixmap(whatsthis_xpm)); buttonWhat->setGeometry(290, 280, 60, 30); QToolTip::add(buttonWhat, QString(tr("What's this?"))); connect(buttonWhat, SIGNAL(clicked()), this, SLOT(slotWhat())); toggleActions(); } SessionsDlg::~SessionsDlg() { DigitDebug::dtor(QString("sessionsdlg ") + QString::number((ulong) this, 16)); } void SessionsDlg::toggleActions() { ASSERT_ENGAUGE(checkSessions != 0); ASSERT_ENGAUGE(checkCoordinates != 0); ASSERT_ENGAUGE(checkAxes != 0); ASSERT_ENGAUGE(checkScaleBar != 0); ASSERT_ENGAUGE(checkCurves != 0); ASSERT_ENGAUGE(checkSegments != 0); ASSERT_ENGAUGE(checkPointMatch != 0); ASSERT_ENGAUGE(checkMeasures != 0); ASSERT_ENGAUGE(checkDiscretize != 0); ASSERT_ENGAUGE(checkGridRemoval != 0); ASSERT_ENGAUGE(checkGridDisplay != 0); ASSERT_ENGAUGE(checkExporting != 0); ASSERT_ENGAUGE(checkViewSelections != 0); ASSERT_ENGAUGE(cmbInitialDigitizeState != 0); checkSessions->setChecked(m_sessionsSettings->sessions); checkCoordinates->setChecked(m_sessionsSettings->coordinates); checkAxes->setChecked(m_sessionsSettings->axes); checkScaleBar->setChecked(m_sessionsSettings->scaleBar); checkCurves->setChecked(m_sessionsSettings->curves); checkSegments->setChecked(m_sessionsSettings->segments); checkPointMatch->setChecked(m_sessionsSettings->pointMatch); checkMeasures->setChecked(m_sessionsSettings->measures); checkDiscretize->setChecked(m_sessionsSettings->discretize); checkGridRemoval->setChecked(m_sessionsSettings->gridRemoval); checkGridDisplay->setChecked(m_sessionsSettings->gridDisplay); checkExporting->setChecked(m_sessionsSettings->exporting); checkViewSelections->setChecked(m_sessionsSettings->viewSelections); cmbInitialDigitizeState->setCurrentText(stateName(m_sessionsSettings->initialDigitizeState)); checkCoordinates->setEnabled(m_sessionsSettings->sessions); checkAxes->setEnabled(m_sessionsSettings->sessions); checkScaleBar->setEnabled(m_sessionsSettings->sessions); checkCurves->setEnabled(m_sessionsSettings->sessions); checkSegments->setEnabled(m_sessionsSettings->sessions); checkPointMatch->setEnabled(m_sessionsSettings->sessions); checkMeasures->setEnabled(m_sessionsSettings->sessions); checkDiscretize->setEnabled(m_sessionsSettings->sessions); checkGridRemoval->setEnabled(m_sessionsSettings->sessions); checkGridDisplay->setEnabled(m_sessionsSettings->sessions); checkExporting->setEnabled(m_sessionsSettings->sessions); checkViewSelections->setEnabled(m_sessionsSettings->sessions); cmbInitialDigitizeState->setEnabled(m_sessionsSettings->sessions); } const QString SessionsDlg::stateName(DigitizeState s) { // compiler will warn if any new states are overlooked here switch (s) { case AxisState: return "Axis Points"; case CurveState: return "Curve Points"; case MeasureState: return "Measure Points"; case PointMatchState: return "Point Match"; case ScaleState: return "Scale Bar"; case SegmentState: return "Segment Fill"; case SelectState: return "Select"; } return ""; } ///////////////////////////////////////////////////////////////////// // SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void SessionsDlg::slotSessions(bool on) { m_sessionsSettings->sessions = on; toggleActions(); } void SessionsDlg::slotCoordinates(bool on) { m_sessionsSettings->coordinates = on; } void SessionsDlg::slotAxes(bool on) { m_sessionsSettings->axes = on; } void SessionsDlg::slotScaleBar(bool on) { m_sessionsSettings->scaleBar = on; } void SessionsDlg::slotCurves(bool on) { m_sessionsSettings->curves = on; } void SessionsDlg::slotSegments(bool on) { m_sessionsSettings->segments = on; } void SessionsDlg::slotPointMatch(bool on) { m_sessionsSettings->pointMatch = on; } void SessionsDlg::slotMeasures(bool on) { m_sessionsSettings->measures = on; } void SessionsDlg::slotDiscretize(bool on) { m_sessionsSettings->discretize = on; } void SessionsDlg::slotGridRemoval(bool on) { m_sessionsSettings->gridRemoval = on; } void SessionsDlg::slotGridDisplay(bool on) { m_sessionsSettings->gridDisplay = on; } void SessionsDlg::slotExporting(bool on) { m_sessionsSettings->exporting = on; } void SessionsDlg::slotViewSelections(bool on) { m_sessionsSettings->viewSelections = on; } void SessionsDlg::slotInitialDigitizeState(const QString& state) { for (int index = 0;; index++) { DigitizeState s = (DigitizeState) index; if (stateName(s).isEmpty()) // failed to find match return; if (stateName(s) == state) { m_sessionsSettings->initialDigitizeState = s; return; } } } void SessionsDlg::slotWhat() { QWhatsThis::enterWhatsThisMode(); } engauge-digitizer-5.2/src/sessionsdlg.h000066400000000000000000000055151222557406400202750ustar00rootroot00000000000000/*************************************************************************** sessionsdlg.h - description ------------------- begin : Thu Oct 7 2004 copyright : (C) 2004 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef SESSIONSDLG_H #define SESSIONSDLG_H #include #include #include #include #include "digitdef.h" // this dialog box lets user control the saving of settings between sessions class SessionsDlg : public QDialog { Q_OBJECT public: SessionsDlg(SessionsSettings* sessionSettings); ~SessionsDlg(); public slots: void slotSessions(bool on); void slotCoordinates(bool on); void slotAxes(bool on); void slotScaleBar(bool on); void slotCurves(bool on); void slotSegments(bool on); void slotPointMatch(bool on); void slotMeasures(bool on); void slotDiscretize(bool on); void slotGridRemoval(bool on); void slotGridDisplay(bool on); void slotExporting(bool on); void slotViewSelections(bool on); void slotInitialDigitizeState(const QString& state); void slotWhat(void); private: // enable or disable buttons as appropriate void toggleActions(void); // displayed name for particular state const QString stateName(DigitizeState s); // checkboxes control which settings, if any, are saved QCheckBox* checkSessions; QCheckBox* checkCoordinates; QCheckBox* checkAxes; QCheckBox* checkScaleBar; QCheckBox* checkCurves; QCheckBox* checkSegments; QCheckBox* checkPointMatch; QCheckBox* checkMeasures; QCheckBox* checkDiscretize; QCheckBox* checkGridRemoval; QCheckBox* checkGridDisplay; QCheckBox* checkExporting; QCheckBox* checkViewSelections; // combobox is used to choose initial state QLabel* lblInitialDigitizeState; QComboBox* cmbInitialDigitizeState; // user selections SessionsSettings* m_sessionsSettings; // navigation buttons QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonWhat; }; #endif // SESSIONSDLG_H engauge-digitizer-5.2/src/transform.cpp000066400000000000000000000375271222557406400203160ustar00rootroot00000000000000/*************************************************************************** transform.cpp - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include "transform.h" #include "point.h" #include "pointset.h" #include "mmsubs.h" #include "digitdoc.h" #include "digitview.h" #include "digitdebug.h" #include "main.h" Transform::Transform(DigitDoc* doc) : doc(doc), m_axisPointCount(0), m_scalePointCount(0), m_validAxes(false), m_validScale(false), m_aX(0.0), m_aY(0.0), m_bX(0.0), m_bY(0.0) { DigitDebug::ctor(QString("transform ") + QString::number((ulong) this, 16)); } Transform::~Transform() { DigitDebug::dtor(QString("transform ") + QString::number((ulong) this, 16)); } void Transform::adjust_midvalued_log_coord(Scale scale, double* c0, double* c1, double* c2) { if (scale == Log) { double cMin = *c0; double cMax = cMin; if (*c1 < cMin) cMin = *c1; if (*c1 > cMax) cMax = *c1; if (*c2 < cMin) cMin = *c2; if (*c2 > cMax) cMax = *c2; if ((cMin < *c0) && (*c0 < cMax)) *c0 = cMin + (cMax - cMin) * (log(*c0) - log(cMin)) / (log(cMax) - log(cMin)); if ((cMin < *c1) && (*c1 < cMax)) *c1 = cMin + (cMax - cMin) * (log(*c1) - log(cMin)) / (log(cMax) - log(cMin)); if ((cMin < *c2) && (*c2 < cMax)) *c2 = cMin + (cMax - cMin) * (log(*c2) - log(cMin)) / (log(cMax) - log(cMin)); } } void Transform::adjust_midvalued_log_coords(CoordSettings coord, double r_graph [3] [3]) { // this function does nothing for linear coordinates. for log coordinates, this // function adjusts the middle coordinate since compute_screen_to_graph assumes // the coordinates are linear. if the middle log coordinate does not equal the // min or max log coordinates, an undesired skew will appear. if two of the axis // points share the same log coordinate, the skew will not appear. // // the only function called after this function that accesses the middle log coordinate // will be compute_screen_to_graph adjust_midvalued_log_coord(coord.xThetaScale, &r_graph [0] [0], &r_graph [0] [1], &r_graph [0] [2]); adjust_midvalued_log_coord(coord.yRScale, &r_graph [1] [0], &r_graph [1] [1], &r_graph [1] [2]); } Transform::LogLinReturn Transform::computeLogToFromLinear(CoordSettings coord, double r_graph [3] [3]) { LogLinReturn rtn; if ((rtn = computeLogToFromLinear(coord.xThetaScale, 0.0, r_graph [0], &m_aX, &m_bX)) != L2L_SUCCESS) return rtn; if ((rtn = computeLogToFromLinear(coord.yRScale, coord.originRadius, r_graph [1], &m_aY, &m_bY)) != L2L_SUCCESS) return rtn; return L2L_SUCCESS; } Transform::LogLinReturn Transform::computeLogToFromLinear(Scale scale, double logOffset, double r [3], double* a, double* b) { if (scale == Log) { bool first = true; double xyMin = 0.0, xyMax = 0.0; for (int i = 0; i < 3; i++) { double rOffset = r [i] + logOffset; if (first || (rOffset < xyMin)) xyMin = rOffset; if (first || (rOffset > xyMax)) xyMax = rOffset; first = false; } if (xyMin == xyMax) return L2L_NO_SPREAD; if (xyMin <= 0.0) return L2L_NONPOSITIVE_COORDINATE; *b = log (xyMax / xyMin) / (xyMax - xyMin); *a = xyMin * exp (- (*b) * xyMin); } return L2L_SUCCESS; } void Transform::computeAxesTransformation(CoordSettings coord, const PointSet* pointSet) { double r_graph [3] [3]; double r_screen [3] [3]; ASSERT_ENGAUGE(pointSet != 0); const PointList* points = pointSet->points(); PointListIterator itr(*points); m_axisPointCount = 0; m_validAxes = false; while (itr) { if (m_axisPointCount == 3) FATAL_ENGAUGE("we have more than three axis points, and so are about to overflow an array"); ASSERT_ENGAUGE((*itr) != 0); if ((*itr)->graphCoordsAreDefined()) { double xGraph, yGraph; converttocartesian(mmUnitize(coord), (*itr)->xThetaGraph(), (*itr)->yRGraph(), coord.originRadius, &xGraph, &yGraph); r_graph [0] [m_axisPointCount] = xGraph; r_graph [1] [m_axisPointCount] = yGraph; r_graph [2] [m_axisPointCount] = 1.0; r_screen [0] [m_axisPointCount] = (*itr)->xScreen(); r_screen [1] [m_axisPointCount] = (*itr)->yScreen(); r_screen [2] [m_axisPointCount] = 1.0; ++m_axisPointCount; } ++itr; } if (m_axisPointCount == 3) { adjust_midvalued_log_coords(coord, r_graph); int rtnS2G = compute_screen_to_graph(r_graph, r_screen, m_screenToGraph, m_graphToScreen); m_validAxes = false; if (rtnS2G == S2G_SUCCESS) { int rtnL2L = computeLogToFromLinear(coord, r_graph); switch(rtnL2L) { case L2L_SUCCESS: break; case L2L_NONPOSITIVE_COORDINATE: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more axis points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("An axis point has a graph coordinate that is zero or negative, which is not " "consistent with log scale."))); return; case L2L_NO_SPREAD: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more axis points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("The axis points cannot have identical x or y values with log scale."))); return; } } m_validAxes = (rtnS2G == S2G_SUCCESS); switch(rtnS2G) { case S2G_SUCCESS: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("The three axis points are correctly defined."))); break; case S2G_BAD_GRAPH_COORDINATES: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more axis points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("The graph coordinates of the three axis points cannot be colocated or collinear.\n" "Change to Select mode, then right click on an axis point to fix the graph coordinates."))); break; case S2G_BAD_SCREEN_COORDINATES: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more axis points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("The three axis points cannot be colocated or collinear.\n" "Click and drag an axis point to define the coordinate frame."))); break; } } else { QString text; if (m_axisPointCount == 1) text = QString(tr("One axis point is defined. Need two more.")); else text = QString(tr("Two axis points are defined. Need one more.")); ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(text); } } void Transform::computeScaleTransformation(CoordSettings coord, const PointSet* pointSet) { double r_graph [3] [3]; double r_screen [3] [3]; ASSERT_ENGAUGE(pointSet != 0); const PointList* points = pointSet->points(); PointListIterator itr(*points); m_scalePointCount = 0; m_validScale = false; while (itr) { if (m_scalePointCount == 2) FATAL_ENGAUGE("we have more than two scale bar points, and so are about to overflow an array"); ASSERT_ENGAUGE((*itr) != 0); if ((*itr)->graphCoordsAreDefined()) { double xGraph, yGraph; converttocartesian(mmUnitize(coord), (*itr)->xThetaGraph(), (*itr)->yRGraph(), coord.originRadius, &xGraph, &yGraph); r_graph [0] [m_scalePointCount] = xGraph; r_graph [1] [m_scalePointCount] = yGraph; r_graph [2] [m_scalePointCount] = 1.0; r_screen [0] [m_scalePointCount] = (*itr)->xScreen(); r_screen [1] [m_scalePointCount] = (*itr)->yScreen(); r_screen [2] [m_scalePointCount] = 1.0; ++m_scalePointCount; } ++itr; } if (m_scalePointCount == 2) { // create virtual third point along a virtual axis which is just orthogonal to the virtual // axis between the other two points. assumes all points are in same z-value (which is 1.0) plane double axis1 [3], axis2 [3], z [3] = {0.0, 0.0, 1.0}; axis1 [0] = r_graph [0] [1] - r_graph [0] [0]; axis1 [1] = r_graph [1] [1] - r_graph [1] [0]; axis1 [2] = r_graph [2] [1] - r_graph [2] [0]; dcross(z, axis1, axis2); r_graph [0] [2] = r_graph [0] [0] + axis2 [0]; r_graph [1] [2] = r_graph [1] [0] + axis2 [1]; r_graph [2] [2] = 1.0; axis1 [0] = r_screen [0] [1] - r_screen [0] [0]; axis1 [1] = r_screen [1] [1] - r_screen [1] [0]; axis1 [2] = r_screen [2] [1] - r_screen [2] [0]; dcross(z, axis1, axis2); r_screen [0] [2] = r_screen [0] [0] + axis2 [0]; r_screen [1] [2] = r_screen [1] [0] + axis2 [1]; r_screen [2] [2] = 1.0; int rtnS2G = compute_screen_to_graph(r_graph, r_screen, m_screenToGraph, m_graphToScreen); // log to linear transformation is not allowed when using scale bar since it would // be such an extremely rare special case that its benefit would be minimal, especially // since it would only confuse the majority of users who would not be expecting it m_validScale = (rtnS2G == S2G_SUCCESS); switch(rtnS2G) { case S2G_SUCCESS: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("The two scale bar points are correctly defined."))); break; case S2G_BAD_GRAPH_COORDINATES: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more scale bar points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("The graph coordinates of the two scale bar points cannot be colocated.\n" "Change to Select mode, then right click on a scale bar point to fix the scale."))); break; case S2G_BAD_SCREEN_COORDINATES: ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(QString(tr("One or more scale bar points must be fixed."))); QMessageBox::warning (0, doc->title(), QString(tr("The two scale bar points cannot be colocated.\n" "Click and drag a scale bar point to define the coordinate frame."))); break; } } else { QString text; if (m_scalePointCount == 1) text = QString(tr("One scale bar point is defined. Need one more.")); ASSERT_ENGAUGE(doc != 0); doc->forwardPermanentMsg(text); } } void Transform::xThetaYRToScreen(CoordSettings coord, double xTheta, double yR, int* xScreen, int* yScreen) const { double xScreenD, yScreenD; xThetaYRToScreen(coord, xTheta, yR, &xScreenD, &yScreenD); *xScreen = (int) (0.5 + xScreenD); *yScreen = (int) (0.5 + yScreenD); } void Transform::xThetaYRToScreen(CoordSettings coord, double xTheta, double yR, double* xScreen, double* yScreen) const { if (validAxes() || validScale()) { linearToLog(coord, &xTheta, &yR); double xGraph, yGraph; converttocartesian(mmUnitize(coord), xTheta, yR, coord.originRadius, &xGraph, &yGraph); graphToScreen(xGraph, yGraph, xScreen, yScreen); } else { // until transform is defined just use identity matrix. this branch is only executed when trying // to connect points with lines, and the transform is not currently defined *xScreen = xTheta; *yScreen = yR; } } void Transform::screenToXThetaYR(CoordSettings coord, int xScreen, int yScreen, double* xTheta, double* yR) const { if (validAxes() || validScale()) { double xGraph, yGraph; screenToGraph(xScreen, yScreen, &xGraph, &yGraph); convertfromcartesian(mmUnitize(coord), xGraph, yGraph, coord.originRadius, xTheta, yR); logToLinear(coord, xTheta, yR); } else { // until transform is defined just use identity matrix. this branch is only defined when trying // to connect points with lines, and the transform is not currently defined *xTheta = xScreen; *yR = yScreen; } } void Transform::graphToScreen(double xGraph, double yGraph, double* xScreen, double* yScreen) const { ASSERT_ENGAUGE(validAxes() || validScale()); double rScreen [3], rGraph [3]; rGraph [0] = xGraph; rGraph [1] = yGraph; rGraph [2] = 1.0; dmlt3x1(rScreen, m_graphToScreen, rGraph); *xScreen = rScreen [0]; *yScreen = rScreen [1]; } void Transform::screenToGraph(int xScreen, int yScreen, double* xGraph, double* yGraph) const { ASSERT_ENGAUGE(validAxes() || validScale()); double rScreen [3], rGraph [3]; rScreen [0] = (double) xScreen; rScreen [1] = (double) yScreen; rScreen [2] = 1.0; dmlt3x1(rGraph, m_screenToGraph, rScreen); *xGraph = rGraph [0]; *yGraph = rGraph [1]; } void Transform::linearToLog(CoordSettings coord, double* xTheta, double* yR) const { if (coord.xThetaScale == Log) { ASSERT_ENGAUGE(m_aX != 0.0); ASSERT_ENGAUGE(m_bX != 0.0); *xTheta = log (*xTheta / m_aX) / m_bX; } if (coord.yRScale == Log) { ASSERT_ENGAUGE(m_aY != 0.0); ASSERT_ENGAUGE(m_bY != 0.0); *yR = log (*yR / m_aY) / m_bY; } } void Transform::logToLinear(CoordSettings coord, double* xTheta, double* yR) const { if (coord.xThetaScale == Log) *xTheta = m_aX * exp (m_bX * (*xTheta)); if (coord.yRScale == Log) *yR = m_aY * exp (m_bY * (*yR)); } void Transform::xBasisScreen(CoordSettings coord, double *xScreen, double *yScreen) const { // return basis vector in x direction. do not look at screen increment // resulting from graph increment of (0,0) to (1,0), since log scale may // be in effect which would crash with a zero double xBeforeS, yBeforeS; double xAfterS, yAfterS; xThetaYRToScreen(coord, 1.0, 1.0, &xBeforeS, &yBeforeS); xThetaYRToScreen(coord, 10.0, 1.0, &xAfterS, &yAfterS); *xScreen = xAfterS - xBeforeS; *yScreen = yAfterS - yBeforeS; } void Transform::yBasisScreen(CoordSettings coord, double *xScreen, double *yScreen) const { // return basis vector in x direction. do not look at screen increment // resulting from graph increment of (0,0) to (1,0), since log scale may // be in effect which would crash with a zero double xBeforeS, yBeforeS; double xAfterS, yAfterS; xThetaYRToScreen(coord, 1.0, 1.0, &xBeforeS, &yBeforeS); xThetaYRToScreen(coord, 1.0, 10.0, &xAfterS, &yAfterS); *xScreen = xAfterS - xBeforeS; *yScreen = yAfterS - yBeforeS; } void Transform::dump() { qDebug("transform axispoints %d scalepoints %d validaxes %s validscale %s", m_axisPointCount, m_scalePointCount, (m_validAxes ? "yes" : "no"), (m_validScale ? "yes" : "no")); if (m_validAxes || m_validScale) { qDebug("transform screentograph %f %f %f %f %f %f %f %f %f", m_screenToGraph [0] [0], m_screenToGraph [0] [1], m_screenToGraph [0] [2], m_screenToGraph [1] [0], m_screenToGraph [1] [1], m_screenToGraph [1] [2], m_screenToGraph [2] [0], m_screenToGraph [2] [1], m_screenToGraph [2] [2]); qDebug("transform graphtoscreen %f %f %f %f %f %f %f %f %f", m_graphToScreen [0] [0], m_graphToScreen [0] [1], m_graphToScreen [0] [2], m_graphToScreen [1] [0], m_graphToScreen [1] [1], m_graphToScreen [1] [2], m_graphToScreen [2] [0], m_graphToScreen [2] [1], m_graphToScreen [2] [2]); } } engauge-digitizer-5.2/src/transform.h000066400000000000000000000120511222557406400177440ustar00rootroot00000000000000/*************************************************************************** transform.h - description ------------------- begin : Tue Oct 29 14:43:44 PST 2002 copyright : (C) 2002 by email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef TRANSFORM_H #define TRANSFORM_H #include #include "mmsubs.h" #include "digitdef.h" class PointSet; class DigitDoc; // class that maintains the screen-to-world transformation. it is derived from QObject solely // to get access to the tr function class Transform : public QObject { Q_OBJECT public: Transform(DigitDoc* doc); ~Transform(); // number of axes and scale bar points defined int axisPointCount(void) { return m_axisPointCount; } int scalePointCount(void) { return m_scalePointCount; } // try to compute the screen to/from graph coordinate transformation void computeAxesTransformation(CoordSettings coord, const PointSet* pointSet); void computeScaleTransformation(CoordSettings coord, const PointSet* pointSet); // adjust mid-valued log coordinates so we can handle axes points with any log coordinates void adjust_midvalued_log_coord(Scale scale, double* c0, double* c1, double* c2); void adjust_midvalued_log_coords(CoordSettings coord, double r_graph [3] [3]); // true when the axes or scale bar transformations have been correctly and completely defined bool validAxes(void) const { return m_validAxes; } bool validScale(void) const { return m_validScale; } // full matrix transformations containing screen/graph, cartesian/polar, log/linear // transformations void xThetaYRToScreen(CoordSettings coord, double xTheta, double yR, int* xScreen, int* yScreen) const; void xThetaYRToScreen(CoordSettings coord, double xTheta, double yR, double* xScreen, double* yScreen) const; void screenToXThetaYR(CoordSettings coord, int xScreen, int yScreen, double *xTheta, double *yR) const; // basis vectors in x and y directions void xBasisScreen(CoordSettings coord, double *xScreen, double *yScreen) const; void yBasisScreen(CoordSettings coord, double *xScreen, double *yScreen) const; // debug this transformation void dump(void); private: DigitDoc* doc; enum LogLinReturn { L2L_SUCCESS, L2L_NONPOSITIVE_COORDINATE, L2L_NO_SPREAD }; // compute a and b that map log to/from linear Transform::LogLinReturn computeLogToFromLinear(CoordSettings coord, double r_graph [3] [3]); Transform::LogLinReturn computeLogToFromLinear(Scale scale, double logOffset, double r [3], double* a, double* b); // matrix transformations without cartesian/polar and linear/log transformations void graphToScreen(double xGraph, double yGraph, double* xScreen, double* yScreen) const; void screenToGraph(int xScreen, int yScreen, double* xGraph, double* yGraph) const; // perform linear/log transformations void linearToLog(CoordSettings coord, double* xTheta, double* yR) const; void logToLinear(CoordSettings coord, double* xTheta, double* yR) const; // number of axis and scale point points int m_axisPointCount; int m_scalePointCount; // flags to indicate when screenToGraph and graphToScreen are defined, which means // there are three non-collinear axis points (for axes transformation) or // two scale bar points (for scale bar transformation) bool m_validAxes; bool m_validScale; // matrix to convert vector from screen coordinates to graph coordinates double m_screenToGraph [3] [3]; // matrix to convert vector from graph coordinates to screen coordinates double m_graphToScreen [3] [3]; // log to linear transformation keeps the same coordinate at two points, but all // other points are warped. example: 1->1 and 100->100, but 50.5->10 (since 50.5 is // midpoint of untransformed values and 10 is midpoint of transformed values). this // transformation works out to xT = x0U * exp (log (x1T / x0T) * (xU - x0U) / (x1U - x0U)) // which is recast as xT = a * exp (b * xU). inverse transformation is xU = log (xT / a) / b. // the two points selected for the boundary conditions are the pair with the widest separation // in value double m_aX, m_aY; double m_bX, m_bY; }; #endif // TRANSFORM_H engauge-digitizer-5.2/src/zoomcmb.cpp000066400000000000000000000054121222557406400177350ustar00rootroot00000000000000/*************************************************************************** zoomcmb.cpp - description ------------------- begin : Sat Dec 7 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include //Added by qt3to4: #include #include "zoomcmb.h" #include "digitdebug.h" #include "digitdef.h" #include "main.h" // default zoom settings as percentages static int zoomDefaults [] = {2000, 1000, 500, 400, 300, 200, 100, 75, 50, 33, 25, 10}; ZoomCmb::ZoomCmb(QWidget* parent) : QComboBox(true, parent, "zoom factor") { DigitDebug::ctor(QString("zoomcmb ") + QString::number((ulong) this, 16)); setEnabled(false); QWhatsThis::add(this, QString(tr("Zoom factor as a percentage.\n\n" "A value from the list may be selected, " "or another value may be typed in (followed by Enter)"))); QRegExp rx("[1-9]\\d{0,2}%{0,1}$"); // 1 through 999 with optional trailing percentage validator = new QRegExpValidator(rx, parent, "zoom validator"); CHECK_PTR_ENGAUGE(validator); setValidator(validator); setZoom(100); // override the default Qt focus policy with the Windows and Motif policy setFocusPolicy(Qt::StrongFocus); } ZoomCmb::~ZoomCmb() { DigitDebug::dtor(QString("zoomcmb ") + QString::number((ulong) this, 16)); } void ZoomCmb::setZoom(int zoom) { clear(); QString strSelect; strSelect.sprintf("%d%%", zoom); bool inserted = false; for (unsigned int i = 0; i < sizeof(zoomDefaults) / sizeof(int); i++) { QString str; if (!inserted && (zoom > zoomDefaults [i])) { insertItem(strSelect); inserted = true; } else if (zoom == zoomDefaults [i]) inserted = true; // value is already in default list str.sprintf("%d%%", zoomDefaults [i]); insertItem(str); } setCurrentText(strSelect); } void ZoomCmb::keyPressEvent(QKeyEvent* e) { if ((e->key() == Qt::Key_Return) || (e->key() == Qt::Key_Enter)) emit(activated(currentText())); e->ignore(); } engauge-digitizer-5.2/src/zoomcmb.h000066400000000000000000000032061222557406400174010ustar00rootroot00000000000000/*************************************************************************** zoomcmb.h - description ------------------- begin : Sat Dec 7 2002 copyright : (C) 2002 by Mark Mitchell email : mmdigitizer@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef ZOOMCMB_H #define ZOOMCMB_H #include #include //Added by qt3to4: #include // zoom combobox in zoom toolbar shows and modifies zoom setting of // currently active window class ZoomCmb : public QComboBox { Q_OBJECT public: ZoomCmb(QWidget* parent); ~ZoomCmb(); // called when changing focus to another window. show union of default list and // this value void setZoom(int z); private: // send the zoom value to the view when carriage return is pressed virtual void keyPressEvent(QKeyEvent* e); QRegExpValidator* validator; }; #endif // ZOOMCMB_H engauge-digitizer-5.2/templates/000077500000000000000000000000001222557406400167705ustar00rootroot00000000000000engauge-digitizer-5.2/templates/README000066400000000000000000000006421222557406400176520ustar00rootroot00000000000000Introduction ------------ The templates directory contains deprecated templates that were once used by KDevelop. This directory can be ignored. Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/templates/cpp000066400000000000000000000000001222557406400174630ustar00rootroot00000000000000engauge-digitizer-5.2/templates/h000066400000000000000000000000001222557406400171300ustar00rootroot00000000000000engauge-digitizer-5.2/translate/000077500000000000000000000000001222557406400167675ustar00rootroot00000000000000engauge-digitizer-5.2/translate/README000066400000000000000000000007141222557406400176510ustar00rootroot00000000000000Introduction ------------ The translate directory contains translation files for Engauge Digitizer. This directory is only useful for developers, and users should ignore this directory. Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/translate/engauge_pt_br.ts000066400000000000000000003413001222557406400221410ustar00rootroot00000000000000 AxisPointDlg Axis Point - [%1]%2 Ponto Da Linha Central - [%1]%2 X or Theta: X ou Theta: Y or R: Y ou R: OK Aprovação Cancel Cancelamento Coordinate warning ! Aviso coordenado ! A coordinate's magnitude is smaller than the critical value of %1 ! This may cause problems later. You may continue, or return to modify the value. Hint - you might consider scaling the coordinates up by some power of ten. Do you want to continue? Um valor de coordinate's é menor do que o valor crítico de %1! Isto pode causar problemas mais tarde. Você pode continuar, ou retorne para modificar o valor. Sugestão - você pôde considerar escalar as coordenadas acima por algum poder de dez. Você quer continuar? ColorChooser Histogram of color attribute values. The lower and upper limits are shown, and may be dragged using the handles Histograma de valores do atributo da cor. Os limites mais baixos e superiores são mostrados, e podem ser arrastados usando os punhos Scale for histogram Escala para o histograma Lower limit: Limite mais baixo: Upper limit: Limite superior: Lower limit. If the lower limit is less than the upper limit, only values between the limits are considered on. If the lower limit is greater than the upper limit, only values outside the limits are considered on Limite mais baixo. Se o limite mais baixo for menos do que o limite superior, only os valores entre os limites estão considerados sobre. Se o limite mais baixo for mais grande do que o limite superior, only os valores fora dos limites estão considerados sobre Upper limit. If the lower limit is less than the upper limit, only values between the limits are considered on. If the lower limit is greater than the upper limit, only values outside the limits are considered on Limite superior. Se o limite mais baixo for menos do que o limite superior, only os valores entre os limites estão considerados sobre. Se o limite mais baixo for mais grande do que o limite superior, only os valores fora dos limites estão considerados sobre Loading histograms Criando histogramas Progress Progresso CoordSysDlg Coordinate System - [%1]%2 Sistema Coordenado - [%1]%2 Coordinates Coordenadas Cartesian (X and Y) Cartesian (X e Y) Select cartesian coordinates. The X and Y coordinates will be used Selecione coordenadas cartesian. As coordenadas de X e de Y serão usadas Polar (Theta and R) Polar (Theta e R) Select polar coordinates. The Theta and R coordinates will be used. Polar coordinates are not allowed with log scale for Theta Selecione coordenadas polares. As coordenadas do Theta e do R serão usadas. As coordenadas polares não são permitidas com a escala logarítmica para o Theta X/Theta X/Theta Linear Linear Specifies linear scale for the X or Theta coordinate Especifica a escala linear para a coordenada de X ou de Theta Log Logarítmico Specifies logarithmic scale for the X coordinate. Log scale is not allowed for the Theta coordinate Especifica a escala logarítmica para a coordenada de X. A escala do registro não é permitida a coordenada do theta Y/R Y/R Specifies linear scale for the Y or R coordinate Especifica a escala linear para a coordenada de Y ou de R Specifies logarithmic scale for the Y or R coordinate Especifica a escala logarítmica para a coordenada de Y ou de R Theta Units Unidades do Theta Degrees Graus Specifies degrees for the Theta coordinate. This does not apply to the cartesian coordinate X Especifica graus para a coordenada do Theta. Isto não se aplica à coordenada cartesian X Gradians Gradians Radians Radianos OK Aprovação Cancel Cancelamento What's this? What's isto? CurveCmb Currently active curve While in curve mode, any new points will be assigned to this curve Another curve may be selected by using the dropdown button Curva atualmente ativa. Quando na modalidade da curva, todos os pontos novos serão atribuídos a esta curva. Uma outra curva pode ser selecionada usando a tecla dropdown DigitDoc I/O Error ! Erro da entrada ! Invalid file format ! Skipping file Formato inválido da lima ! Lima saltando Unsupported version Versão unsupported Skipping file Lima saltando The current file has been modified. Do you want to save it? A lima atual foi modificada. Você quer conservá-la ? Untitled Untitled Could not save the current document ! Close anyway ? Não podia conservar o original atual! Fim de qualquer maneira ? Range error for log scale ! Erro da escala para a escala logarítmica ! Cannot select log scale when any axis points have zero or negative coordinates. The new settings will be ignored Não pode selecionar a escala do registro quando todos os pontos da linha central têm coordenadas de zero ou de negativo. Os ajustes novos serão ignorados Point Match Error ! Erro Do Fósforo Do Ponto ! No points successfully matched the sample point ! Skipping the matching of sample points using arrow keys Nenhum ponto combinou com sucesso o ponto da amostra ! Saltando combinar da amostra aponta usando chaves de seta Use arrow keys to accept and reject matched points Use chaves de seta aceitar e rejeitar pontos combinados Curve Curva Measure Medida Do not save Não conserve DigitMain Engauge Digitizer %1%2%3 Digitador do Engauge %1%2%3 Import File Importe Lima &Import &Importe Ctrl+I Ctrl+I Creates a new document by importing an image Cría um original novo importando uma imagem New File Creates a new document by importing an image Lima Nova. Cría um original novo importando uma imagem Open File Abra Lima &Open... &Abra... Opens an existing document Abre um original existente Open File Opens an existing document Abra Lima. Abre um original existente Save File Excepto a Lima &Save &Excepto Ctrl+S Ctrl+E Saves the actual document Conserva o original real Save File Saves the actual document Excepto a lima. Conserva o original real Save File As Excepto a Lima Como Save &as... Excepto &como... Ctrl+A Ctrl+C Saves the actual document under a new filename Conserva o original real sob um nome de arquivo novo Save As Saves the actual document under a new filename Excepto Como. Conserva o original real sob um nome de arquivo novo Close File Feche Lima &Close Fetche Ctrl+W Closes the actual document Fecha o original real Close File Closes the actual document Feche Lima. Fecha o original real Export File Exporte Lima &Export &Exporte Ctrl+E Ctrl+E Exports the actual document into a text file Exporta o original real em uma lima de texto Export File Exports the actual document into a text file Exporte Lima. Exporta o original real em uma lima de texto Export File As Exporte Lima Como Export As... Exporte Como... Exports the actual document into a text file under a new filename Exporta o original real em uma lima de texto sob um nome de arquivo novo Export As Exports the actual document into a text file under a new filename Exporte Como. Exporta o original real em uma lima de texto sob um nome de arquivo novo Export Setup Instalação da Exportação Export Setup... Instalação da Exportação... Configure the export settings Configurarando os ajustes da exportação... Export Setup Configure the export settings Instalação Da Exportação. Configurare os ajustes da exportação Print File Lima da Cópia &Print Cópia Ctrl+P Prints out the actual document Imprime o original real Print File Prints out the actual document Lima da Cópia. Imprime o original real Exit Saída E&xit Saída Ctrl+Q Quits the application Para a aplicação Exit Quits the application Saída. Para a aplicação Cut Remova Cu&t Remova Ctrl+X Cuts the selected section and puts it to the clipboard Remove a seção selecionada e põe-na à prancheta Cut Cuts the selected section and puts it to the clipboard Remova. Remove a seção selecionada e põe-na à prancheta Copy Cópia &Copy &Cópia Ctrl+C Copies the selected section to the clipboard Copía a seção selecionada à prancheta Copy Copies the selected section to the clipboard Cópia. Copía a seção selecionada à prancheta Paste Cola &Paste Cola Ctrl+V Pastes the clipboard contents to actual position Cola os índices da prancheta à posição real Paste Pastes the clipboard contents to actual position Cola. Cola os índices da prancheta à posição real File Toolbar Lima toolbar File Tool&bar Lima toolbar Enables/disables the file toolbar Permite ou incapacita a lima toolbar View File Toolbar Enables/disables the file toolbar Lima Toolbar Da Vista. Permite e incapacita a lima toolbar Digitize Toolbar Digite Toolbar Digitize Tool&bar Digite Tool&bar Enables/disables the digitize toolbar Permite ou incapacita digitar toolbar View Digitize toolbar Enables/disables the digitize toolbar A Vista Digita Toolbar. Permite e incapacita digitar toolbar Zoom Toolbar Zumbido Toolbar &Zoom Toolbar &Zumbido Toolbar Enables/disables the zoom toolbar Permite ou incapacita o zumbido toolbar View Zoom Toolbar Enables/disables the zoom toolbar Zumbido Toolbar Da Vista. Permite e incapacita o zumbido toolbar Statusbar Statusbar &Statusbar &Statusbar Enables/disables the statusbar Permite ou incapacita o statusbar View Statusbar Enables/disables the statusbar View Statusbar. Enables and disables the statusbar Axes Points Pontos dos Machados Show only axes points Mostre somente pontos dos machados View Axes Points Show only axes points, and hide all other points A Vista Axes Pontos. Mostre somente pontos dos machados, e esconda todos pontos restantes Scale Bar Points Pontos da Barra da Escala Show only the scale bar Mostre somente a barra da escala View Scale Bar Show only the scale bar, and hide all other points Barra Da Escala Da Vista. Mostre somente a barra da escala, e esconda todos pontos restantes Curve Points Pontos da Curva Show only points in the active curve Mostre somente pontos na curva ativa View Curve Points Show only points in the active curve, and hide all others Pontos Da Curva Da Vista. Mostre somente pontos na curva ativa, e esconda toda a outra Measure Points Pontos da Medida Show only points in the active measure Mostre somente pontos na medida ativa View Measure Points Show only points in the active measure, and hide all others Pontos Da Medida Da Vista. Mostre somente pontos na medida ativa, e esconda toda a outra All Points Todos os pontos Show all axes, scale bar, curve and measure points Mostre todos os machados, barra da escala, curva e pontos da medida View All Points Show all axes, scale bar, curve and measure points Veja Todos os Pontos. Mostre todos os machados, barra da escala, curva e pontos da medida No Background Nenhum Fundo Show no background Não mostre nenhum fundo No Background Show no background image Nenhum Fundo. Não mostre nenhuma imagem de fundo Original Image Imagem Original Show original image in the background Mostre a imagem original no fundo View Original Image Show original image in the background Imagem Do Original Da Vista. Mostre a imagem original no fundo Processed Image Imagem Processada Show processed image in the background Mostre a imagem processada no fundo View Processed Image Show processed image in the background. The processed image is the result of removing gridlines from the original image, and discretizing the image into black and white. The processed image is used for segment fill, and is often less messy than the original image. Imagem Processada Vista. Mostre a imagem processada no fundo. A imagem processada é o resultado de remover os gridlines da imagem original, e de discretizing a imagem em preto e no branco. A imagem processada é usada para a suficiência do segmento, e é frequentemente mais menos messy do que a imagem original. Gridlines Display Exposição dos Gridlines &Gridlines Display Exposição dos &Gridlines Enables/disables the gridlines display Permite ou incapacita a exposição dos gridlines View Gridlines Enables/disables the gridlines display Vista Gridlines. Permite e incapacita a exposição dos gridlines Curve Geometry Geometria da Curva Curve Geometry &Info... Informação da Geometria da Curva Enables/disables the curve geometry information window Permite ou incapacita a janela da informação da geometria da curva View Curve Geometry Enables/disables the curve geometry information window. Lengths and areas of the active curve are displayed Geometria Da Curva Da Vista. Permite e incapacita a janela da informação da geometria da curva. Os comprimentos e as áreas da curva ativa são indicados Measure Geometry Geometria da Medida Measure Geometry &Info... Informação da Geometria da Medida Enables/disables the measure geometry information window Permite ou incapacita a informação da geometria da medida View Measure Geometry Enables/disables the measure geometry information window. Lengths and areas of the active measure are displayed Geometria Da Medida Da Vista. Permite e incapacita a janela da informação da geometria da medida. Os comprimentos e as áreas da medida ativa são indicados Select Selecione &Select &Selecione Select one or more points on screen Selecione um ou mais ponto na tela Select Select one or more points on screen Seleto. Selecione um ou mais ponto na tela Axis Point Ponto da Linha Central &Axis Point Ponto da Linha Central Digitizes an axis point Digita um ponto da linha central Digitize Axis Point Digitizes an axis point by placing a new point at the cursor. The coordinates of the axis point are then entered Digite O Ponto Da Linha central. Digita um ponto da linha central colocando um ponto novo no cursor. As coordenadas do ponto da linha central são incorporadas então Scale Bar Barra da Escala &Scale Bar Barra da E&scala Digitizes a scale bar Digita uma barra da escala Digitize Scale Bar Digitizes a scale bar by placing a new point at the cursor. The length of the scale bar is entered This can only be used with linear cartesian coordinates Digite A Barra Da Escala. Digita uma barra da escala colocando um ponto novo no cursor. O comprimento da barra da escala é incorporado. Isto pode somente ser usado com coordenadas cartesian lineares Curve Point Ponto da Curva &Curve Point Ponto da &Curva Digitizes a curve point Digita um ponto da curva Digitize Curve Point Digitizes a curve point by placing a new point at the cursor. Curve points give numeric values for the underlying curves Digite o Ponto da Curva. Digita um ponto da curva colocando um ponto novo no cursor. Os pontos da curva dão valores numéricos para as curvas subjacentes Segment Fill Suficiência do Segmento &Segment Fill &Suficiência do Segmento Digitizes curve points along a curve segment Digita pontos da curva ao longo de um segmento de curva Digitize Segment Fill Digitizes a curve segment by placing curve points along the segment under the cursor Digite A Suficiência Do Segmento. Digita um segmento de curva colocando pontos da curva ao longo do segmento sob o cursor Point Match Combine um Ponto &Point Match Combine um &Ponto Digitizes curve points in a point plot by matching a point Digita pontos da curva em um lote do ponto combinando um ponto Digitize Curve Points by Matching Digitizes curve points in a point plot by finding points that match a sample point Digite Pontos da Curva Combinando. Digita pontos da curva em um lote do ponto encontrando os pontos que combinam um ponto da amostra Measure Point Ponto da Medida &Measure Point Ponto da &Medida Digitizes a measure point for measuring length and area Digita um ponto da medida para o comprimento e a área de medição Digitize Measure Point Digitizes a measure point by placing a new point at the cursor. Measure points give length and area values for the underlying regions Digite o Ponto da Medida. Digita um ponto da medida colocando um ponto novo no cursor. Os pontos da medida dão valores do comprimento e da área para as regiões subjacentes Coordinates Coordenadas... Coordinates... Coordenadas Edits the coordinate system Edita o sistema coordenado Coordinate System Settings Edits the coordinate system properties Ajustes Do Sistema Coordenado. Edita as propriedades do sistema coordenado Axes Machados Axes... Machados... Edits the axes properties Edita as propriedades dos machados Axes Settings Edits the axes properties Ajustes Dos Machados. Edita as propriedades dos machados Scale Bar... Barra da Escala... Edits the scale bar properties Edita as propriedades da barra da escala Scale Bar Settings Edits the scale bar properties Ajustes da Barra da Escala. Edita as propriedades da barra da escala Curves Curvas Curves... Curvas... Edits the curve properties Edita as propriedades da curva Curve Settings Edits the properties of the curves Ajustes Da Curva. Edita as propriedades das curvas Segments Segmentos Segments... Segmentos... Edits the segment fill properties Edita as propriedades da suficiência do segmento Segment Fill Settings Edits the segment fill properties Ajustes Da Suficiência Do Segmento. Edita as propriedades da suficiência do segmento Point Match... Combine um Ponto... Edits the point match properties Edita as propriedades do fósforo do ponto Point Match Settings Edits the point match properties Ajustes Do Combine Um Ponto. Edita as propriedades do combine um ponto Measures Medidas Measures... Medidas... Edits the measure properties Edita as propriedades da medida Measures Settings Edits the measure properties Ajustes Das Medidas. Edita as propriedades da medida Discretize Discretize Discretize... Discretize... Edits the discretization properties Edita as propriedades do discretization Discretize Settings Edits the discretize properties, which affect the processed image Discretize Ajustes. Edita discretize as propriedades, que afetam a imagem processada Grid Removal Remoção da Grade... Grid Removal... Remoção da Grade Edits the grid removal properties Edita as propriedades da remoção da grade Grid Removal Settings Edits the grid removal properties, which affect the processed image Ajustes Da Remoção Da Grade. Edita as propriedades da remoção da grade, que afetam a imagem processada Grid Display Exposição da Grade Grid Display... Exposição da Grade... Edits the grid display properties Edita as propriedades da exposição da grade Grid Display Settings Edits the grid display properties Ajustes Da Exposição Da Grade. Edita as propriedades da exposição da grade New Window Janela Nova &New Window Janela &Nova Opens a new view for the current document Abre uma vista nova para o original atual New Window Opens a new view for the current document Janela Nova. Abre uma vista nova para o original atual Cascade Cascata &Cascade &Cascata Cascades all windows É conectadas em cascata todas as janelas Cascade Cascades all windows Cascata. É conectadas em cascata todas as janelas Tile Telha &Tile &Telha Tiles all windows Telha todas as janelas Tile Tiles all windows Telha. Telha todas as janelas About Engauge Sobre Engauge &About Engauge... Sobre Engauge... About the application Sobre a aplicação About Engauge About the application Sobre Engauge. Sobre a aplicação User Manual Manual De Usuário &User Manual... Manual De &Usuário... Browse user manual Browse o manual de usuário User Manual Browse user manual Manual De Usuário. Browse o manual de usuário Line Graph Tutorial Linha Tutorial Do Gráfico &Line Graph Tutorial... &Linha Tutorial Do Gráfico Browse manual line graph tutorial Browse a linha manual tutorial do gráfico Line Graph Tutorial Browse manual line graph tutorial Linha Tutorial Do Gráfico. Browse a linha manual tutorial do gráfico Point Graph Tutorial Tutorial do Gráfico de Ponto &Point Graph Tutorial... Tutorial do Gráfico de &Ponto... Browse manual point graph tutorial Browse o tutorial manual do gráfico de ponto Point Graph Tutorial Browse manual point graph tutorial Tutorial Do Gráfico De Ponto. Browse o tutorial manual do gráfico de ponto Map Tutorial Tutorial Do Mapa &Map Tutorial... Tutorial Do &Mapa... Browse map tutorial Browse o tutorial do mapa Map Tutorial Browse map tutorial Tutorial Do Mapa. Browse o tutorial do mapa What's &This Que é Este? &File Lima &Edit &Edite &View &Vista &Digitize &Digite &Settings Ajustes &Window Janela &Help Ajuda Messages that describe the current activity Mensagens que descrevem a atividade atual Messages that describe remaining steps for defining the graph coordinates. The graph coordinates are defined by creating three axes points or the scale bar As mensagens que descrevem etapas restantes para definir o gráfico coordenam. As coordenadas do gráfico são definidas criando três pontos dos machados ou a barra da escala Graph coordinates of the cursor. These are not available until the graph coordinates have been defined by creating three axes points or the scale bar Coordenadas do gráfico do cursor. Estes não estão disponíveis até que as coordenadas do gráfico estejam definidas criando três pontos dos machados ou a barra da escala Resolutions of the graph coordinates. These are not available until the graph coordinates have been defined by creating three axes points or the scale bar. The resolution of a coordinate is the root-mean-square average of the errors in the horizontal and vertical directions on the screen Definições das coordenadas do gráfico. Estes não estão disponíveis até que as coordenadas do gráfico estejam definidas criando três pontos dos machados ou a barra da escala. A definição de uma coordenada é a média do raiz-signific-quadrado dos erros nos sentidos horizontais e verticais na tela Ready. Pronto. Three axis points or the scale bar must be defined. Três pontos da linha central ou a barra da escala devem ser definidos. Importing file... Importando a lima... Error ! Erro ! Could not open BMP image ! Não podia abrir a imagem de BMP ! Could not open image ! Não podia abrir a imagem! Opening file... Lima da abertura... Could not open document ! Não podia abrir o original ! Quit... Parado... You have unsaved changes. Do your really want to quit? Você tem mudanças unsaved. Seu querem realmente parar? The three axis points are correctly defined. Os três pontos da linha central são definidos corretamente. The scale bar is correctly defined. A barra da escala é definida corretamente. Three axis points, or the scale bar, must be defined. Três pontos da linha central, ou a barra da escala, devem ser definidos. No geometry information yet Nenhuma informação da geometria ainda Engauge Digitizer Help Ajuda do Digitador do Engauge Opening image file... Lima da imagem da abertura... Images (*.bmp *.png *.pnm *.xpm);;All Files (*.*) Imagens (*.bmp *.png *.pnm *.xpm);;Todas as Limas (*.*) Images (*.bmp *.gif *.jpg *.png *.pnm *.xpm);;All Files (*.*) Imagens (*.bmp *.gif *.jpg *.png *.pnm *.xpm);;Todas as Limas (*.*) Images (*.bmp);;All Files (*.*) Imagens (*.bmp);;Todas as Limas (*.*) import importe Import Importe Opening document file... Lima de original da abertura... Engauge Digitizer (*.dig);;All Files (*.*) Digitador do Engauge (*.dig);;Todas as Limas Open Abra Saving file... Lima do saving... I/O Error ! Erro da Entrada ! Could not save the current document ! Não podia conservar o original atual! Saving file under new filename... Lima do saving sob o nome de arquivo novo... Save Excepto Warning Aviso File already exists. Save anyway? A lima existe já. Excepto de qualquer maneira? OK Aprovação Cancel Cancelamento Closing file... Fechando uma lima... Exporting file... Exportando a lima... Could not export the current document ! Não podia exportar o original atual ! Exporting file under new filename... Exportando a lima sob o nome de arquivo novo Export Exporte File already exists. Export anyway? A lima existe já. Exportação de qualquer maneira? Configuring export settings... Configurarando os ajustes da exportação... Printing... Imprimir... Exiting application... Retirando a aplicação... Cutting selection... Removendo a seleção... Copying selection to clipboard... Copí a seleção à prancheta... Inserting clipboard contents... Introduzir a prancheta satisfaz... Toggle file toolbar... Toggle a lima toolbar... Toggle digitize toolbar... Toggle digitar toolbar... Toggle zoom toolbar... Toggle o zumbido toolbar... Toggle statusbar... Toggle o statusbar... Show axes points... Mostre pontos dos machados... Show scale bar points... Mostre pontos da barra da escala... Show curve points... Mostre pontos da curva... Show measure points... Mostre pontos da medida Show all points... Mostre todos os pontos... Select points... Selecione pontos... Digitize axis point... Digite o ponto da linha central... Digitize scale bar... Digite a barra da escala Digitize curve point... Digite o ponto da curva... Digitize measure point... Digite o ponto da medida... Digitize segment by filling it with points... Digite o segmento enchendo o com os pontos... Digitize curve points on point plot by matching points... Digite pontos da curva no lote do ponto por pontos combinando... Configuring coordinate system... Configurarando o sistema coordenado... Configuring axes properties... Configurarando as propriedades dos machados... Configuring scale bar properties... Configurarando as propriedades da barra da escala... Adding, removing and editing curves... Adicionar, remover e editar curvam-se... Configuring discretization... Configurarando o discretization... Configuring grid removal... Configurarando a remoção da grade... Configuring grid display... Configurarando a exposição da grade... Display Exposição Adding, removing and editing measures... Adicionar, remover e editar medem... Configuring point match settings... Configurarando os ajustes do fósforo do ponto... Configuring segment properties... Configurarando as propriedades do segmento... Opening new document view... Vista nova abrindo do original... About... Sobre... Engauge Digitizer Version Digitador Engauge Versão (c) 2002 by Mark Mitchell Author Contact: mmdigitizer@earthlink.net (All messages are welcome, and your privacy will be respected) Engauge Digitizer Home Page: http://digitizer.sourceforge.net Help Forum: http://sourceforge.net/forum/forum.php?forum_id=229857 Open Discussion Forum: http://sourceforge.net/forum/forum.php?forum_id=229856 (c) 2002 por Marca Mitchell. Autor Contato: mmdigitizer@earthlink.net (todas as mensagens são bem-vindas, e sua privacidade será respeitada). Digitador De Engauge. Home Page: http://digitizer.sourceforge.net Forum da Ajuda: http://sourceforge.net/forum/forum.php?forum_id=229857 Abrem O Forum Da Discussão: http://sourceforge.net/forum/forum.php?forum_id=229856 DigitView View of the current document If document is a graph, add three axis points to define the graph coordinates, and then add curve points to digitize the curves If document is a map, add a scale bar to define the graph coordinates, and then add measure points to measure the geometry Vista do original atual. Se o original for um gráfico, adicione três pontos da linha central para definir as coordenadas do gráfico, e adicione então pontos da curva para digitar as curvas. Se o original for um mapa, adicione uma barra da escala para definir as coordenadas do gráfico, e adicione então pontos da medida para medir a geometria DiscretizeDlg Discretize - [%1]%2 Discretize - [%1]%2 Discretize method selection Discretize a seleção do método Intensity Intensidade Discretize the original image using intensity Discretize a imagem original usando a intensidade Foreground Primeiro plano Discretize the original image into foreground and background. The background color is shown on the left side of the scale bar. All pixels with approximately the background color are considered part of the background, and all other pixels are considered part of the foreground Discretize a imagem original no primeiro plano e no fundo. A cor do fundo é mostrada no lado esquerdo da barra da escala. Todos os pixels com a cor do fundo são considerados aproximadamente parte do fundo, e todos pixels restantes são considerados parte do primeiro plano Hue Hue Discretize the original image using hue Discretize a imagem original usando o hue Saturation Saturation Discretize the original image using saturation Discretize a imagem original usando o saturation Value Valor Discretize the original image using value Discretize a imagem original usando o valor Preview Inspecção Prévia Preview window shows how current settings affect the discretizing of the original image A janela da inspecção prévia mostra como os ajustes atuais afetam discretizing da imagem original OK Aprovação Cancel Cancelamento What's this? Que é Este? ExportDlg Export Settings - [%1]%2 Ajustes da Exportação - [%1]%2 Curve Selection Seleção da Curva Included Incluído Not included Nao incluído List of curves to be included in the exported file Lista das curvas a ser incluídas na lima exportada List of curves to be excluded from the exported file Lista das curvas a ser excluídas da lima exportada <<Include <<Inclua Move the currently selected curve from the excluded list to the included list Mova a curva atualmente selecionada da lista excluída para a lista incluída Exclude>> Exclua>> Move the currently selected curve from the included list to the excluded list Mova a curva atualmente selecionada da lista incluída para a lista excluída Points Selection Seleção Dos Pontos Interpolate Y's at X's from all curves Interpolate Y's em X's de todas as curvas Exported file will have values at every unique X value from every curve. Y values will be linearly interpolated if necessary A lima exportada terá valores em cada valor original de X de cada curva. Os valores de Y interpolated linear se necessário Interpolate Y's at X's from first curve Interpolate Y's em X's da primeira curva Exported file will have values at every unique X value from the first curve. Y values will be linearly interpolated if necessary A lima exportada terá valores em cada valor original de X da primeira curva. Os valores de Y interpolated linear se necessário Interpolate Y's at grid line X's Interpolate Y's na linha de grade X's Exported file will have values at every unique X grid line. Y values will be linearly interpolated if necessary A lima exportada terá valores em cada linha de grade original de X. Os valores de Y interpolated linear se necessário Raw X's and Y's X's e Y's crus Layout Disposição All curves on each line Todas as curvas em cada linha Exported file will have, on each line, an X value, the Y value for the first curve, the Y value for the second curve,... A lima exportada terá, em cada linha, um valor de X, o valor para a primeira curva, o valor de Y de Y para a segunda curva... One curve on each line Uma curva em cada linha Exported file will have all the points for the first curve, with one X-Y pair on each line, then the points for the second curve,... A lima exportada terá todos os pontos para a primeira curva, com um par de X-Y em cada linha, então os pontos para a segunda curva... Delimiters Delimitadores Commas Vírgulas Exported file will have commas between adjacent values A lima exportada terá vírgulas entre valores adjacentes Spaces Espaços Exported file will have spaces between adjacent values A lima exportada terá espaços entre valores adjacentes Tabs Abas Exported file will have tabs between adjacent values A lima exportada terá abas entre valores adjacentes Header Encabeçamento None Nenhuns Exported file will have no header line A lima exportada não terá nenhuma linha do encabeçamento Simple Simples Exported file will have simple header line A lima exportada terá a linha simples do encabeçamento Gnuplot Gnuplot Exported file will have gnuplot header line A lima exportada terá a linha do encabeçamento do gnuplot Preview Inspecção prévia Preview window shows how current settings affect the exported file A janela da inspecção prévia mostra como os ajustes atuais afetam a lima exportada OK Aprovação Cancel Cancelamento What's this? Que é este? GeometryDlg Geometry information This window displays geometry information such as angles, coordinates, distances and areas, for the currently active curve or measure Functional area is defined as the area under the function and above the horizontal axis (useful for curves) Polygonal area is defined as the area inside the polygon bounded by the points (useful for measures) Informação da geometria. Esta informação da geometria das exposições de janela tal como os ângulos, coordenadas, distâncias e áreas, para a curva ou a medida atualmente ativa. A área funcional é definida como a área sob a função e acima da linha central horizontal (útil para curvas). A área polygonal é definida como a área dentro do polygon limitado pelos pontos (úteis para medidas) GridMeshDlg Grid Mesh %1 - [%2]%3 Engranzamento da Grade %1 - [%2]%3 X Grid Lines Linhas de Grade X Disable Incapacite Disabled X Value Valor Disabled De X Disabled value. The X grid lines are specified using only three values at a time. For flexibility, four values are offered so you must chose which value is disabled. Once disabled, that value is simply updated as the other values change Valor disabled. As linhas de grade de X são especificadas usando somente três valores de cada vez. Para a flexibilidade, quatro valores são oferecidos assim que você deve escolheu que valor é disabled. Uma vez que incapacitado, esse valor é atualizado simplesmente enquanto os outros valores mudam X Count X Contagem Number of X grid lines. The number of X grid lines must be entered as an integer greater than zero Número de linhas de grade de X. O número de linhas de grade de X deve ser incorporado como um inteiro mais extremamente de zero X Start X Começo Value of the first X grid line. The start value cannot be greater than the stop value Valor da primeira linha de grade de X. O valor do começo não pode ser mais grande do que o valor do batente X Step X Etapa Difference in value between two successive X grid lines. The step value must be greater than zero Diferença em um valor entre duas linhas de grade sucessivas de X. O valor da etapa deve ser mais grande de zero X Stop X Batente Value of the last X grid line. The stop value cannot be less than the start value Valor da última linha de grade de X. O valor do batente não pode ser menos do que o valor do começo Y Grid Lines Linhas de Grade Y Disabled Y Value Valor Disabled De Y Disabled value. The Y grid lines are specified using only three values at a time. For flexibility, four values are offered so you must chose which value is disabled. Once disabled, that value is simply updated as the other values change Valor disabled. As linhas de grade de Y são especificadas usando somente três valores de cada vez. Para a flexibilidade, quatro valores são oferecidos assim que você deve escolheu que valor é disabled. Uma vez que incapacitado, esse valor é atualizado simplesmente enquanto os outros valores mudam Y Count Y Contagem Number of Y grid lines. The number of X grid lines must be entered as an integer greater than zero Número de linhas de grade de Y. O número de linhas de grade de X deve ser incorporado como um inteiro mais extremamente de zero Y Start Y Começo Value of the first Y grid line. The start value cannot be greater than the stop value Valor da primeira linha de grade de Y. O valor do começo não pode ser mais grande do que o valor do batente Y Step Y Etapa Difference in value between two successive Y grid lines. The step value must be greater than zero Diferença em um valor entre duas linhas de grade sucessivas de Y. O valor da etapa deve ser mais grande de zero Y Stop Y Batente Value of the last Y grid line. The stop value cannot be less than the start value Valor da última linha de grade de Y. O valor do batente não pode ser menos do que o valor do começo OK Aprovação Cancel Cancelamento What's this? Que é este? GridRemovalDlg Grid Removal - [%1]%2 Remoção da Grade - [%1]%2 Check this box to have pixels of a particular color removed. This option is only useful if the gridlines in the original image are a different color than the curve lines Verifique esta caixa para ter pixels de uma cor particular removida. Esta opção é somente útil se os gridlines na imagem original forem uma cor diferente do que as linhas da curva Remove pixels of a particular color Remova os pixels de uma cor particular Color: Cor Check this box to have pixels close to regularly spaced gridlines removed. This option is only available when the axis points have all been defined. The gridline values are defined here, by clicking on the Gridlines... button Verifique esta caixa para ter pixels perto dos gridlines regularmente espaçados removidos. Esta opção está somente disponível quando os pontos da linha central tudo foram definidos. Os valores do gridline são definidos aqui, estalando na tecla de Gridlines... Remove pixels close to regularly spaced gridlines Remova os pixels perto dos gridlines regularmente espaçados Removal gridlines: Gridlines da remoção: Gridlines... Gridlines... Close distance (pixels): Distância próxima (pixels): Set closeness distance in pixels. Pixels that are closer to the regularly spaced gridlines, than this distance, will be removed. This value cannot be negative. A zero value disables this feature. Decimal values are allowed Ajuste a distância do closeness nos pixels. Os pixels que são mais perto dos gridlines regularmente espaçados, do que esta distância, serão removidos. Este valor não pode ser negativo. Um valor zero incapacita esta característica. Os valores decimais são permitidos Check this box to remove thin lines that are parallel to the axes. This option is only available when the axis points have all been defined. This option works especially well if the gridlines in the original image are thinner than the curve lines Verifique esta caixa para remover as linhas finas que estão paralelas aos machados. Esta opção está somente disponível quando os pontos da linha central tudo foram definidos. Esta opção trabalha especial bom se os gridlines na imagem original forem mais finos do que as linhas da curva Remove thin lines parallel to the axes Remova as linhas finas paralelas aos machados Minimum line thickness (pixels): Linha espessura mínima (pixels): Select minimum thickness for lines, in pixels. Pixels will be removed wherever lines are thinner than this value. This value cannot be negative. A zero value disables this feature. Decimal values are allowed Selecione a espessura mínima para linhas, nos pixels. Os pixels serão removidos onde quer que as linhas são mais finas do que este valor. Este valor não pode ser negativo. Um valor zero incapacita esta característica. Os valores decimais são permitidos Maximum gap to connect (pixels): Abertura máxima a conectar (pixels): Set maximum gap separation in pixels. Lines whose endpoints are separated by less than this distance, will be connected. This value cannot be negative. A zero value disables this feature. Decimal values are allowed Ajuste a separação máxima da abertura nos pixels. As linhas cujos os endpoints são separados por menos do que esta distância, serão conectadas. Este valor não pode ser negativo. Um valor zero incapacita esta característica. Os valores decimais são permitidos Preview Inspecção prévia Preview window shows how current settings affect the gridlines. To change the background color, select the foreground option, and then click on a pixel in the preview window with the eyedropper A janela da inspecção prévia mostra como os ajustes atuais afetam os gridlines. Para mudar a cor do fundo, selecione a opção do primeiro plano, e estale então sobre um pixel na janela da inspecção prévia com o eyedropper OK Aprovação Cancel Cancelamento What's this? Que é este? Removal Remoção HelpWindow &New Window Janela &Nova &Open File Abra A Lima &Print Cópia &Close Fim E&xit Saída &Backward Para trás &Forward Para diante &Home Começo &About ... Sobre About &Qt ... Sobre &Qt... Add Bookmark Adicione o Bookmark &File Lima &Go History History Bookmarks Bookmark Backward Backward Forward Para diante Home Começo MeasureCmb Currently active measure While in measure mode, any new points will be assigned to this measure Another measure may be selected by using the dropdown button Medida atualmente ativa. Quando na modalidade da medida, todos os pontos novos serão atribuídos a esta medida. Uma outra medida pode ser selecionada usando a tecla dropdown PointMatchDlg Point Match - [%1]%2 Fósforo Do Ponto - [%1]%2 Point Separation: Separação Do Ponto: Select a point separation in pixels. Matched points must be separated from existing points by at least this number of pixels. This value has a lower limit Selecione uma separação do ponto nos pixels. Os pontos combinados devem ser separados dos pontos existentes ao menos por este número dos pixels. Este valor tem um limite mais baixo Maximum Point Size: Tamanho Máximo Do Ponto: Select a maximum point size in pixels. Sample match points must fit within a square box, around the cursor, having width and height equal to this maximum. This size is also used to determine if a region of pixels that are on, in the processed image, should be ignored since that region is wider or taller than this limit. This value has a lower limit Selecione um tamanho máximo do ponto nos pixels. Os pontos de fósforo da amostra devem caber dentro de uma caixa quadrada, em torno do cursor, tendo a largura e a altura iguais a este máximo. Este tamanho está usado também determinar se uma região dos pixels em que esteja, na imagem processada, se for ignorada desde que a região é mais larga ou mais alta do que este limite. Este valor tem um limite mais baixo Accepted Point Color Cor Aceitada Do Ponto Select a color for matched points that are accepted Selecione uma cor para os pontos combinados que são aceitados Rejected Point Color Cor Rejeitada Do Ponto Select a color for matched points that are rejected Selecione uma cor para os pontos combinados que são rejeitados Preview Inspecção prévia Preview window shows how current settings affect matching of points, and display of matched points. Matched points are either accepted or rejected. Accepted points are turned into rejected points, and vice versa, using the up and down arrows on the keyboard A janela da inspecção prévia mostra como os ajustes atuais afetam combinar dos pontos, e exposição de pontos combinados. Os pontos combinados são aceitados ou rejeitados. Os pontos aceitados são girados em pontos rejeitados, e no versa vice, usando o ascendente e para baixo as setas no teclado OK Aprovação Cancel Cancelamento What's this? Que é este? PointSetDlg Point Ponto Shape: Forma: Shape Forma Select a shape for the points Selecione uma forma para os pontos Size: Tamanho: Shape Size Tamanho Da Forma: Select an overall size for the points Selecione um tamanho total para os pontos Line Size: Linha Tamanho: Shape Line Size Linha Tamanho Da Forma: Select a size for the line used to draw the point shapes Selecione um tamanho para a linha usada extrair as formas do ponto Line Color: Linha Cor: Shape Line Color Linha Cor Da Forma: Select a color for the line used to draw the point shapes Selecione uma cor para a linha usada extrair as formas do ponto Interior Color: Cor Interior: Shape Interior Color Cor Interior Da Forma: Select a color for the interior of the point shapes. This has no effect on points without interiors Selecione uma cor para o interior das formas do ponto. Isto não tem nenhum efeito em pontos sem interiores Line Linha Line Size Linha Tamanho Select a size for the lines drawn between points Selecione um tamanho para as linhas extraídas entre pontos Color: Cor: Line Color Linha Cor: Select a color for the lines drawn between points Selecione uma cor para as linhas extraídas entre pontos Connect As: Conecte Como: Connect As Conecte Como Select rule for connecting points with lines. If the curve is connected as a single-valued function then the points are ordered by increasing value of the independent variable. If the curve is connected as a closed contour, then the points are ordered by age, except for points placed along an existing line. Any point placed on top of any existing line is inserted between the two endpoints of that line - as if its age was between the ages of the two endpoints. Lines are drawn between successively ordered points Selecione a régua para pontos conectando com linhas. Se a curva for conectada como uma função único-avaliada então os pontos estão requisitados aumentando o valor da variável independente. Se a curva for conectada como um contorno closed, os pontos estão requisitados então pela idade, à exceção dos pontos colocados ao longo de uma linha existente. Algum ponto colocado no alto de toda a linha existente é introduzido entre os dois endpoints dessa linha - como se sua idade estava entre as idades dos dois endpoints. As linhas são extraídas entre pontos sucessivamente requisitados Preview Inspecção prévia Preview window shows how current settings affect the lines and points A janela da inspecção prévia mostra como os ajustes atuais afetam as linhas e os pontos OK Aprovação Cancel Cancelamento PointSetNameDlg Name: Nome: OK Aprovação Cancel Cancelamento PointSetsDlg New... Novo... Remove Remova Move Up Mova Para Cima Move Down Abaixe Rename... Rebatize... Properties... Propriedades... OK Aprovação Cancel Cancelamento What's this? Que é este? QObject curve or measure not found for point (%1,%2) curva ou medida não encontrada para o ponto (%1, %2) could not find %1 among curve names: %2 não podia encontrar %1 entre nomes da curva: %2 could not find %1 among measure names: %2 não podia encontrar %1 entre nomes da medida: %2 could not find tool for state %1 não podia encontrar a ferramenta para o estado %1 Log scale coordinates must be greater than zero As coordenadas da escala do registro devem ser mais grandes de zero Scale bar lengths must have positive nonzero length Os comprimentos da barra da escala devem ter o comprimento positivo No more than three axis points can be created Não mais de três pontos da linha central podem ser criados Click on a highlighted sample point to start point matching Estale sobre um ponto destacado da amostra para começar combinar do ponto No more than one scale bar can be created Não mais de uma barra da escala pode ser criada Scale bar is drawn by clicking and dragging. You must drag to a new point A barra da escala é extraída estalando e arrastando. Você deve arrastar a um ponto novo Unexpected problem in %1 at line %2 Problema inesperado em %1 na linha %2 Out of memory in %1 at line %2 Fora da memória em %1 na linha %2 Fatal error in %1 at line %2 Erro fatal em %1 na linha %2 ScaleBarDlg Scale Bar - [%1]%2 Barra Da Escala - [ %1]%2 Length: Comprimento: OK Aprovação Cancel Cancelamento SegmentDlg Segments - [%1]%2 Segmentos - [%1]%2 Minimum Length Comprimento Mínimo Select a minimum number of points in a segment. Only segments with more points will be created. This value should be as large as possible to reduce memory usage. This value has a lower limit Selecione um número mínimo dos pontos em um segmento. Somente os segmentos com mais pontos serão criados. Este valor deve ser tão grande como possível reduzir o uso da memória. Este valor tem um limite mais baixo Point Separation Separação Do Ponto Select a point separation in pixels. Points added to a segment will be separated by this number of pixels. This value has a lower limit Selecione uma separação do ponto nos pixels. Os pontos adicionados a um segmento serão separados por este número dos pixels. Este valor tem um limite mais baixo Line Size Linha Tamanho Select a size for the lines drawn along a segment Selecione um tamanho para as linhas extraídas ao longo de um segmento Line Color Linha Cor Select a color for the lines drawn along a segment Selecione uma cor para as linhas extraídas ao longo de um segmento Preview Inspecção prévia Preview window shows how current settings affect the segments. The segments will be drawn like the horizontal line. The vertical lines shows how the digitized points will be spaced A janela da inspecção prévia mostra como os ajustes atuais afetam os segmentos. Os segmentos serão extraídos como a linha horizontal. As linhas verticais mostram como os pontos digitados serão espaçados OK Aprovação Cancel Cancelamento What's this? Que é este? Transform One or more axis points must be fixed. Um ou o mais ponto da linha central deve ser fixo. An axis point has a graph coordinate that is zero or negative, which is not consistent with log scale. Um ponto da linha central tem uma coordenada do gráfico que seja zero ou negativa, que não é consistente com a escala do registro. The axis points cannot have identical x or y values with log scale. Os pontos da linha central não podem ter valores idênticos de x ou de y com escala do registro. The three axis points are correctly defined. Os três pontos da linha central são definidos corretamente. The graph coordinates of the three axis points cannot be colocated or collinear. Change to Select mode, then right click on an axis point to fix the graph coordinates. As coordenadas do gráfico dos três pontos da linha central não podem ser colocated ou collinear. Mude à modalidade seleta, a seguir direito estale sobre um ponto da linha central para reparar as coordenadas do gráfico. The three axis points cannot be colocated or collinear. Click and drag an axis point to define the coordinate frame. Os três pontos da linha central não podem ser colocated ou collinear. Estale e arraste um ponto da linha central para definir o frame coordenado. One axis point is defined. Need two more. Um ponto da linha central é definido. Necessidade dois mais. Two axis points are defined. Need one more. Dois pontos da linha central são definidos. Necessidade uma mais. The two scale bar points are correctly defined. Os dois pontos da barra da escala são definidos corretamente. One or more scale bar points must be fixed. Aquele ou mais pontos da barra da escala devem ser fixo. The graph coordinates of the two scale bar points cannot be colocated. Change to Select mode, then right click on a scale bar point to fix the scale. As coordenadas do gráfico dos dois pontos da barra da escala não podem ser colocated. Mude à modalidade seleta, a seguir direito estale sobre um ponto da barra da escala para reparar a escala. The two scale bar points cannot be colocated. Click and drag a scale bar point to define the coordinate frame. Os dois pontos da barra da escala não podem ser colocated. Estale e arraste um ponto da barra da escala para definir o frame coordenado. One scale bar point is defined. Need one more. Um ponto da barra da escala é definido. Necessidade uma mais. ZoomCmb Zoom factor as a percentage. A value from the list may be selected, or another value may be typed in (followed by Enter) Fator do zumbido como uma porcentagem. Um valor da lista pode ser selecionado, ou um outro valor pode ser datilografado dentro (seguido perto Entre) engauge-digitizer-5.2/usermanual/000077500000000000000000000000001222557406400171465ustar00rootroot00000000000000engauge-digitizer-5.2/usermanual/README000066400000000000000000000015551222557406400200340ustar00rootroot00000000000000Introduction ------------ The usermanual directory contains documentation for the Engauge Digitizer tool. You can access the documentation by loading the index.html file into your browser. While running Engauge Digitizer, selecting some of the options under the Help menu will open up a simple browser, with one of the User Manual pages displayed in the browser window. All of the User Manual documentation is also available at http://digitizer.sourceforge.net, along with a lot of other useful information. Users are encouraged to search for help in the Help and Open Discussion forums at that site. Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and are subject to 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. engauge-digitizer-5.2/usermanual/animation.bmp000066400000000000000000000110661222557406400216310ustar00rootroot00000000000000BM66(/ engauge-digitizer-5.2/usermanual/animation.gif000066400000000000000000000444641222557406400216300ustar00rootroot00000000000000GIF89aE-!d! NETSCAPE2.0,E-{ރ{|{{{{{={{{{{{{ރ{|{{{{{={{{{{{{ރ{|{{{x{={{{{{{{{|{{{{{{{{{{{ރ{=|{{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރ|{{{{{={{{{{ރ{|{= {{{={{{{{={ރ{|{{{{<{{{{{{{|{{{{={@{{{{ރ{| x{{{={{@{{{ރ{|{={{={{{{{{{|{{{{={{{{{{{ރ{|{{{{{={{{={{{{ރ{|{{x{{={{{{{{{=|{{={{={@| @xx{={ރx|={{x{{={{{{{{{0ރ{|{{{{{={ދ!d,E-{ރ{|{{{{{={{{{{{{ރ{|{{{{{={{{{{{{ރ{|{{{x{={{{{{{{{|{{{{{{{{{{{ރ{=|{{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރ|{{{{{={{{{{ރ{|{= {{{={{{{{={ރ{|{{{{<{{{{{{{|{{{{={@{{{{ރ{| x{{{={{@{{{ރ{|{={{={{{{{{{|{{{{={{{{{{{ރ{|{{{{{={{{t{{{{ރ{|{{Rz{{={{{{{{^J){=|{{={{=^J)@|)RJ @xRJ{={ރx|={{xK{={{{{{{{0ރ/{|{{{{{={ދ!d,E-{ރ{|{{{{{={{{{{{{ރ{|{{{{{={{{{{{{ރ{|{{{x{={{{{{{{{|{{{{{{{{{{{ރ{=|{{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރ|{{{{{={{{{{ރ{|{= {{{={{{{{={ރ{|{{{{<{{{{{{{|{{{{={@{{{{ރ{| x{{{={{@{{{ރ{|{={{={{{{{{{|{{{{={{{{{{{ރ{|{{{{{={{{t{{{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ!d,E-0D%J(QD%J(QD%J(QD%J(QĄ%J(QD%J(QD%J(QD%J(QD&(QD%J(QD%J(QD%J(QD%*L0aD%J(QD%J(QD%J(QD%J(1a„ %J(QD%J(QD%J(QD%J(QD F(QD%J(QD%J(QD%J( D%JTQD%J(QD%J(QD%J(QD%J(QbB%J(QD%J(QD%J(QD(QD!J(QD%J(QD%J(QD%JD%J(QD%J(QD%J(QD%J(Q"@%J( @%J(QD%J(QD%J(QDJ(QD%J(QD%J(QD%J(QD% (QD% (QD%J(QD%J(QD%J( D%J(D%J(QD%J(QD%J(QD%J(QD%J(QD%J(QD%J(QDB(QD%(QD%J(QD%J(QD%JPD%JD%J(QD%J(QD%J( @%J(QD%J(QD%J(QD%J(QD%J(QDB(QD%J(QD%J(QD(QD%JPD%J(QD%J(QD%JPD%J(Q@%J(QD%J(QD%J( @%J(QDJ(QD%J(QD%J(Q@%J(QD%JPD%J(QD%J(QD(QD%J(Q"@%J(QD%J(QD% QD%J(QD!J(QD%J(QD%J D%J(QD%J(QD%J(QD%J(Q @%J(QD%J(Q D%J(QD%J(QDJ(QD%J(QD%J(QD%J(QD(QD%J(QD%(QD%J(QDD%J(QD%J(D%J(QD @%J(QD%J(QD%J(QD%  @%J(QD%J(QD%(QD%  @%J(QD%J(QD%J(D% @%J(QD%J(QD%J(QD%J( @J(QD%J(QD%J(QD(QDJ(QD%J(QD%J(QD%JPD%J(QD%J(QD%J(QD%J(Q@%J(QD%J(QD%J(QD%J(QDJ(QD%J(QD%J(QD%J(QD%JTQD%J(QD%J(QD%J(QD%&(QaˆJ(PD% (QD%J(Q@J0Ą & @ @ @a„ &L0 @ @ @ @ &L(1aB!JQD%B(D%J(Q"D!JT0D %J(QD%J(QD%J(QD%J(Qˆ%*(QD%J(QD%J(QD%J(QDJT!d,E-{ރ{|{{{{{=^J{{{{{{ރ{L){{{{{={{{^J Rz{{ރ{|{{{)SJ{={{{{{{{wR{|{{{{{{K{{{{{ރ{=|{/{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރ|{{{{{={{{{{ރ{|{= {{{={{{{{={ރ{|{{{{<{{{{{{{|{{{{O){@{{{{ރ{=| x{{{={{@{ァR{{ރ{|{={ァRJ){={{{{{RJ){|{{{{={){{{{{{ރ{|z{{{{={{{t{S{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ!d,E-{ރ{|{{{{{=^J{{{{{{ރ{L){{{{{={{{^J Rz{{ރ{|{{{)SJ{={{{{{{{wR{|{{{{{{K{{{{{ރ{=|{/{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރ|{{{{{={{{{{ރ{|{= {{{={{{{ {={ރ{|{{{){<{{{{{{{=|{{{{O){=RJA{{{{ރ{=|RJ) x{{{={{@{ァR@){{ރ{|{={ァRJ){={{{{{RJ)R|{{{{={){{{{{{ރ{|z{{{{={{{t{S{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ!d,E-{ރ{|{{{{{=^J{{{{{{ރ{L){{{{{={{{^J Rz{{ރ{|{{{)SJ{={{{{{{{wR{|{{{{{{K{{{{{ރ{=|{/{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{{{{{|{{{{{={{{{{{{ރ{|{{{{{={{Ax{{{{ރ{|{ {{={{{{{={ރ{|{{{{={{{{{{{ރJ|{{{{{={{OA{{{ރ{|{){{{={{{{ {)RP{ރ{|{{{){RJ){{{{{{{=J)|{{{{O){=RJA={{{{ރ{=|RJ) xz{{={{@{ァR@){{ރ{|{={ァRJ){={{{{{RJ)R|{{{{={){{{{{{ރ{|z{{{{={{{t{S{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ!d,E-{ރ{|{{{{{=^J{{{{{{ރ{L){{{{{={{{^J Rz{{ރ{|{{{)SJ{={{{{{{{wR{|{{{{{{K{{{{{ރ{=|{/{{{{={{{x{={{ރ{|{{{x={{{{{{ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{S {{{|{{{{J){={{{{{{{ރJ)R|{{{{{={{OARJ{{{{ރ{|{RJ{{={{{{{=P{ރ{|{{{{){{{{{{{ރJ|{{{{{={{OA{{{ރ{|{){{{={{{{ {)RP{ރ{|{{{){RJ){{{{{{{=J)|{{{{O){=RJA={{{{ރ{=|RJ) xz{{={{@{ァR@){{ރ{|{={ァRJ){={{{{{RJ)R|{{{{={){{{{{{ރ{|z{{{{={{{t{S{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ!d,E-{ރ{|{{{{{=^J{{{{{{ރ{L){{{{{={{{^J Rz{{ރ{|{R{)SJ{={{{{{RP{wR{|{{{{RJ)zK{{{{{ރ{J)T{/{{{{={{{ァR{={{ރ{|{{P{x={{{{{{@ރ|{{{{{={{{{{{{ރ{|{{={{{={{{{>x{xރ{|{{{{={{{{{{{|{{{{{={{{{{{ރ{|{{x{={{{{S {{{|{{{{J){={{{{{{{ރJ)R|{{{{{={{OARJ{{{{ރ{|{RJ{{={{{{{=P{ރ{|{{{{){{{{{{{ރJ|{{{{{={{OA{{{ރ{|{){{{={{{{ {)RP{ރ{|{{{){RJ){{{{{{{=J)|{{{{O){=RJA={{{{ރ{=|RJ) xz{{={{@{ァR@){{ރ{|{={ァRJ){={{{{{RJ)R|{{{{={){{{{{{ރ{|z{{{{={{{t{S{{ރ{|{w`zRz{{={{{{{^J^J){=|{{={K)%^J)@H)L)RJ @ RJ RJ{={ރx|={{RJK{={{{{{{{)0ރ/{|{{{{{={ދ;engauge-digitizer-5.2/usermanual/animation.png000066400000000000000000000006661222557406400216430ustar00rootroot00000000000000PNG  IHDR/  . pHYsHHFk>hIDATX͘Qn Dg^Uz3N>vK@Hlg'Ю6nef  ]aJ%6 @* 4AfyVD%c_Hk9ӾFDZRrFAJɴ\&M:HklMe4xQ}QLXH\/mn/G)@zc{u(7ّ'Ih.o2.8:*fCp;[3T~(8MJhCRDBzDא$w>쾹 ɐOHuUHPI[FЬe,i ,{(VoL~N ډIENDB`engauge-digitizer-5.2/usermanual/answerdiscretizing.html000066400000000000000000000070221222557406400237530ustar00rootroot00000000000000 Engauge Digitizer - Discretizing

    What Is Discretizing?

    When an image is imported, Engauge Digitizer processes that image by converting each pixel into black or white. Since most images use black writing on a white background, the black pixels are assumed to represent curves, and the white pixels are assumed to represent the background. This process of converting color images into black foreground and white background is called discretizing. The resulting processed image can be automatically digitized using Segment Fill and Point Match.

    Usually the default discretizing settings correctly differentiate the foreground from the background. For example, in the two images below, the original image on the left gets processed into the image on the right.

    OK before OK after
    Before discretizing After discretizing

    However, an image that uses color might not get correctly digitized. In the two images below, the original image on the left is processed into the featureless image on the right. The relatively dark green was assumed to be part of the foreground.

    OK before OK after
    Before discretizing After discretizing

    Even a black-and-white image might be discretized in a manner that is not very helpful. In the two images below, the original image on the left is processed into the image on the right. One curve is so thin it has broken up into many unconnected short segments, and the other curve is so light that it has disappeared entirely! Neither curve will be recognized by the curve recognition algorithms in Engauge Digitizer.

    OK before OK after
    Before discretizing After discretizing

    How Do I Control Discretizing?

    By simply changing the Discretizing settings, curves can often be extracted from color, low-contrast and low-resolution images. Such images are often produced by fax machines, microfiche, cheap scanners, and excessive enlarging on the copier.

    Use the Settings/Discretizing dialog to experiment with various discretizing settings. You can get more information about the Discretizing dialog.

    engauge-digitizer-5.2/usermanual/answergridremoval.html000066400000000000000000000032551222557406400235740ustar00rootroot00000000000000 Engauge Digitizer - Grid Removal

    Engauge Digitizer - Grid Removal


    What Is Grid Removal?

    Grid lines in an original image interfere with the automatic line and point detection algorithms in Engauge Digitizer. In most cases, however, the grid lines can be quickly removed using one of the grid removal features offered by Engauge Digitizer. The resulting processed image can be automatically digitized using Segment Fill and Point Match.

    Here is an example of how grid removal can clean up an image:

    Before Image After Image
    Before Grid Removal After Grid Removal

    How Do I Control Grid Removal?

    By simply changing the Grid Removal settings, grid lines can usually be removed.

    Use the Settings/Grid Removal dialog to experiment with various discretizing settings. You can get more information about the Grid Removal dialog.

    engauge-digitizer-5.2/usermanual/answerlinegraph.html000066400000000000000000000066171222557406400232370ustar00rootroot00000000000000 Engauge Digitizer - Digitizing Line Graphs

    Engauge Digitizer - Digitizing Line Graphs


    Typical Set of Steps To Digitize Line Graphs

    The following steps digitize a linear cartesian graph with one curve:

    • Obtain an image file (bitmap, jpeg or other) showing one or more curves and both axes
    • Import the image file using one of the following options:
      • File/Import menu option
      • Copying and pasting
      • Dragging and dropping
    • Click on the Axes Point button before entering axes points. These will define the coordinate system
    • Click on one of the axes to add the first axes point, then enter its graph coordinates
    • Click on one of the axes to add the second axes point, then enter its graph coordinates
    • Click on one of the axes to add the third axes point, then enter its graph coordinates
    • Click on the Segment Fill button to automatically digitize entire curve segments at a time.
    • Click on a segment underneath the cursor to fill that segment with a set of curve points. Repeat until the segments have been digitized.
    • Click on the Curve Points button to manually enter curve points.
    • Click on the curve to add a curve point. Repeat until the curve is covered with a sufficient number of curve points
    • Export curve points using one of the following options:
      • File/Export menu option to save selected curves into a tabular text file
      • Copying and pasting to copy points in the current curve from the curve geometry window to another application
      • Dragging and dropping to copy points in the current curve from the curve geometry window to another application

    Optional Steps

    To clean up the image for better performance of Segment Fill and Point Match: steps:

    • Show the processed image, rather than the original image, by selecting the View/Processed Image menu option
    • Adjust the discretize settings using the Settings/Discretize menu option, until unwanted parts of the image disappear
    • Remove grid lines using the Settings/Grid Removal menu option

    For a graph that is logarithmic or polar:

    • Select the Settings/Coords menu option to bring up the coordinates window
    • Select the appropriate coordinate settings

    For a graph with more than one curve:

    • Select the Settings/Curves menu option to bring up the curves window
    • Click on the New button to create a new curve, then enter the name of the new curve
    • Repeat the previous step until all desired curve names have been entered
    • In the main window, use the Curves combobox to select a curve. While that curve is selected, all new curve points will be assigned to that curve
    engauge-digitizer-5.2/usermanual/answermap.html000066400000000000000000000047431222557406400220410ustar00rootroot00000000000000 Engauge Digitizer - Digitizing Maps

    Engauge Digitizer - Digitizing Maps


    Typical Set of Steps To Digitize An Image File

    The following steps manually digitize a map with one measure:

    • Obtain an image file (bitmap, jpeg or other) containing a scale bar with its scale distance marked
    • Import the image file using one of the following options:
      • File/Import menu option
      • Copying and pasting
      • Dragging and dropping
    • Click on the Scale Bar button before entering the scale bar. This will define the scale
    • Click on one end of the scale bar, then drag to the other end of the scale bar, then enter the scale bar length
    • Select the View/Measure Geometry Info menu option to bring up the measure geometry window
    • Click on the Measure Points button before entering measure points. These will contain the measure angles, distances and areas
    • Click on the map to add a measure point
    • Repeat the previous step until the map is covered with a sufficient number of measure points
    • Export measure points using one of the following options:
      • Copying and pasting to copy points in the current measure from the measure geometry window to another application
      • Dragging and dropping to copy points in the current measure from the measure geometry window to another application

    Optional Steps

    For a map with more than one measure:

    • Select the Settings/Measures menu option to bring up the measures window
    • Click on the New button to create a new measure, then enter the name of the new measure
    • Repeat the previous step until all desired measure names have been entered
    • In the main window, use the Measures combobox to select a measure. While that measure is selected, all new measure points will be assigned to that measure
    engauge-digitizer-5.2/usermanual/answermapconst.html000066400000000000000000000033111222557406400230760ustar00rootroot00000000000000 Engauge Digitizer - Map Constraints

    Engauge Digitizer - Map Constraints


    Projections

    Currently, only (somewhat common) cylindrical lat/lon coordinates, and (very rare) polar lat/lon coordinates are supported.

    Such popular projections as Lambert, Mercator and UTM are not supported, and any attempts to accurately digitize such projections will not succeed.

    In the future, a generalized warping algorithm may be added which would support the vast majority of map projections. Besides being extremely flexible, this approach would be easy to learn and work even in cases where details of the original map projection are not known. However, the disadvantages of the generalized warping algorithm would be that lat/lon lines must exist in the map, and accuracy will probably be degraded.

    Open and Closed Contours

    Version 1.5 of Engauge Digitizer first offered support for open and closed contours. The Connect As property of a curve can be changed to Contour, and then the points of that curve are connected according to their age, with one exception. Any point created along an existing contour line (which would have two older endpoints) is treated as if the new point was created sometime between the two endpoints, and inserted between them.

    engauge-digitizer-5.2/usermanual/answermeasuring.html000066400000000000000000000020341222557406400232450ustar00rootroot00000000000000 Engauge Digitizer - Measuring Angles, Distances And Areas

    Engauge Digitizer - Measuring Angles, Distances and Areas


    The curve geometry and measure geometry windows show various measurements for the currently active curve and measure, respectively.

    The geometry windows are normally not displayed. To bring up the curve geometry window, use the View/Curve Geometry Info menu option. Likewise, to bring up the measure geometry window, use the View/Measure Geometry Info menu option.

    engauge-digitizer-5.2/usermanual/answernowindow.html000066400000000000000000000031631222557406400231230ustar00rootroot00000000000000 Engauge Digitizer - Missing Curve Or Measure Geometry Info Window

    Engauge Digitizer - Missing Curve Or Measure Geometry Info Window


    A rare problem can occur in Engauge - the Curve Geometry Info window or the Measure Geometry Info window may not appear when the appropriate Curve Geometry Info or Measure Geometry Info menu item is chosen (in the View menu).

    This problem can arise when using dual monitors. The problem occurs when a window is dragged to the second monitor. That position is quietly saved by Engauge, and then eventually the user exits Engauge. Later, the second monitor is removed. The next time Engauge is started and a Curve or Measure Geometry Info window is selected, it will not seem to appear since it is automatically moved to the old position on the missing second monitor.

    This problem could theoretically also occur when using a single monitor, by making drastic changes to the resolution.

    The simple fix for this problem is to restart Engauge with the "-reset" command line option. Please note that this will cause all settings to be reset.

    engauge-digitizer-5.2/usermanual/answerother.html000066400000000000000000000024431222557406400224000ustar00rootroot00000000000000 Engauge Digitizer - Other Help Options

    Engauge Digitizer - Other Help Options


    Status Bar

    The status bar (found at the bottom of the application) displays hints to help the user define the axes or scale bar

    Tooltip Help

    Tooltip help is available for buttons in the toolbars. Simply placing the cursor over a toolbar button for a few seconds will cause a brief help description to pop up

    What's This Help

    What's This help is available for almost every tool and window seen in the application. Simply clicking on a What's This button, and then the item of interest, will cause a comprehensive help description to pop up.

    Contact The Author

    Questions, comments and requests may be sent to the author at the e-mail address found in the About Engauge dialog.

    engauge-digitizer-5.2/usermanual/answerout.html000066400000000000000000000036651222557406400220750ustar00rootroot00000000000000 Engauge Digitizer - Getting Data Out

    Engauge Digitizer - Getting Data Out


    Reading Coordinates In Status Bar

    The coordinates of any specific point on a curve can be seen in the status bar, the only requirement being that the axes points must already be defined. When all three axes points are defined, the coordinates under the cursor are always displayed, so place the cursor over a point on the curve to determine the coordinates at that point.

    The status bar coordinates must be recorded by the user, or manually typed into other applications.

    This approach does not work for maps using scale bars.

    Exporting Curves Into An Export File

    Curves may be exported into an export file using the File/Export menu option. The export file is a tabular text file that can be imported directly into other software tools like Excel and Gnumeric.

    The format of the export file can be controlled by using the File/Export Setup menu option.

    This approach does not work for maps using scale bars.

    Copying From The Geometry Info Windows

    All of the information in the curve geometry and measure geometry windows can be copied using the operating system clipboard. All selected lines are automatically copied to the clipboard, where they are available for pasting into other applications.

    This approach works for both curves and maps using scale bars.

    engauge-digitizer-5.2/usermanual/answerpointgraph.html000066400000000000000000000073401222557406400234330ustar00rootroot00000000000000 Engauge Digitizer - Digitizing Point Graphs

    Engauge Digitizer - Digitizing Point Graphs


    Warning: Not all point graphs work well when automatically matching points in Engauge. Before going any further, you may want to read about point match requirements.

    Typical Set of Steps To Digitize Point Graphs

    The following steps digitize a linear cartesian graph with points along one curve:

    • Obtain an image file (bitmap, jpeg or other) showing one or more graphs and both axes
    • Import the image file using one of the following options:
      • File/Import menu option
      • Copying and pasting
      • Dragging and dropping
    • Click on the Axes Point button before entering axes points. These will define the coordinate system
    • Click on one of the axes to add the first axes point, then enter its graph coordinates
    • Click on one of the axes to add the second axes point, then enter its graph coordinates
    • Click on one of the axes to add the third axes point, then enter its graph coordinates
    • Click on the Point Match button to automatically digitize many curve points.
    • Click on a sample point, and then use the arrow keys to accept or reject points that match the sample point.
    • Click on the Curve Points button to manually enter curve points.
    • Click on the curve to add a curve point
    • Repeat the previous step until the curve is covered with a sufficient number of curve points
    • Export curve points using one of the following options:
      • File/Export menu option to save selected curves into a tabular text file
      • Copying and pasting to copy points in the current curve from the curve geometry window to another application
      • Dragging and dropping to copy points in the current curve from the curve geometry window to another application

    Optional Steps

    To clean up the image for better performance of Segment Fill and Point Match: steps:

    • Show the processed image, rather than the original image, by selecting the View/Processed Image menu option
    • Adjust the discretize settings using the Settings/Discretize menu option, until unwanted parts of the image disappear
    • Remove grid lines using the Settings/Grid Removal menu option

    For a graph that is logarithmic or polar:

    • Select the Settings/Coords menu option to bring up the coordinates window
    • Select the appropriate coordinate settings

    For a graph with more than one curve:

    • Select the Settings/Curves menu option to bring up the curves window
    • Click on the New button to create a new curve, then enter the name of the new curve
    • Repeat the previous step until all desired curve names have been entered
    • In the main window, use the Curves combobox to select a curve. While that curve is selected, all new curve points will be assigned to that curve
    engauge-digitizer-5.2/usermanual/answerselectmode.html000066400000000000000000000041661222557406400234070ustar00rootroot00000000000000 Engauge Digitizer - Select Mode

    Engauge Digitizer - Select Mode


    What Options Are Available In Select Mode?

    In Select Mode, one or more points can be selected using a variety of options:

    Option Behavior Useful For...
    Click on unselected point A simple click on an unselected point selects that point. Points that are already selected will be unselected. Selecting a single point
    Shift click on unselected point Pressing the shift key while clicking on an unselected point selects that point. Points that are already selected will remain selected. Adding one new point to the set of selected points
    Shift click on selected point Pressing the shift key while clicking on a selected point unselects that point. Points that are already selected will remain selected. Unselecting a single point
    Click and drag A clicking and dragging operation will select all points in the drawn rectangle. Points that are already selected will be unselected. Selecting one or more points
    Control click and drag Pressing the control key before performing a click and drag movement will temporarily hide all points except those belonging to the selected curve, so only the selected curve's points will be selected. Points that are already selected will be unselected. Selecting one or more points in a single curve, or selecting only one point when multiple points overlap.
    engauge-digitizer-5.2/usermanual/betteraccuracy.html000066400000000000000000000034631222557406400230420ustar00rootroot00000000000000 Engauge Digitizer - Better Accuracy

    Engauge Digitizer - Better Accuracy


    To get better accuracy in the digitized output data exported from Engauge Digitizer, it is helpful to understand that all points are only as accurate as the pixel size (you can see that accuracy in the status bar). If the distance in graph units from one pixel to the next is D, then theoretically the best possible accuracy is also D.

    It is not possible to define points that are 'between' pixels, even by zooming in closer. That is a constraint imposed by the graphics library that is used in Engauge Digitizer.

    Fortunately, there are some tricks to improve the accuracy. In order of increasing difficulty:

    • If the axis points are not correctly defined then fix them
    • Turn on the grid lines by selecting View/Gridlines Display and compare them to grid lines in the original image to see if the axis points can be slightly adjusted so the grid lines better match each other.
    • Use a graphics application like Microsoft Paint (Windows) or GIMP (Linux) to scale the original up in size so each pixel is smaller, and therefore the accuracy of each point is correspondingly better. The larger image is then imported into Engauge Digitizer. This step can be performed using just the command line using the powerful ImageMagick tool.
    engauge-digitizer-5.2/usermanual/commandlineoptions.html000066400000000000000000000126741222557406400237500ustar00rootroot00000000000000 Engauge Digitizer - Command Line Options

    Engauge Digitizer - Command Line Options


    Engauge Digitizer accepts many command line options, and one environment variable, for more flexibility and power.

    Startup

    -import FILE Automatically import the specified image file at startup. Image files may also be imported manually using the menu
    -open FILE Automatically open the specified Engauge Digitizer document file at startup. Document files may also be opened manually using the menu
    -help Display a list of command line options with some brief comments, and then exit
    -manual DIRECTORY Look for the user manual in the specified directory. If Engauge Digitizer is run in a directory other than the installation directory, then the user manual directory must be specified using either this command line option or the ENGAUGE_USERMANUAL environment variable.
    -axes XMIN XMAX YMIN YMAX Scan the imported file at startup, and locate the X and Y axes. Then digitize axis points assuming the X axis ranges from XMIN to XMAX, and the Y axis ranges from YMIN to YMAX. The X axis is assumed to be near the bottom of the image, and the Y axis is assumed to be on the left side of the image. For speed, no attempt to rotate the image if it is sideways, so the digitized points may require adjustment. This feature should be useful when using Perl or other scripts to digitize many images with known axes ranges. The axis points may also be digitized manually using the Digitize Axis Points mode
    -lazysegments Postpone scanning for segments that is normally performed during startup, until either the Segments dialog is used, or the Segment Fill button is selected.

    Shutdown

    -export FILE Automatically export the active document at shutdown. Documents may also be exported manually using the menu.

    Settings

    -reset Reset all settings to the factory defaults. This option is a fast and easy way to restore all settings to a useful configuration, especially when there are problems with one or more settings.
    -text Load settings from a text file at startup, and save settings to the same text file when done, rather than use the Windows registry. That text file will be C:\Documents and Settings\All Users\Application Data\engaugerc in Windows XP, and C:\Windows\All Users\Application Data\engaugerc in Windows 98 and ME. Note that the Application Data directory may be hidden, so although it will not appear when a simple 'dir' command is used, you can still go into that directory using 'cd Application Data'. This option has no effect in Linux and Unix because the settings are always stored in a text file such as $HOME/.qt/engaugerc.

    Internationalization

    -onlybmp Import all images as bitmap (BMP) files. This is a fix for Chinese Windows.

    Debugging

    -pixels Show cursor location in pixel coordinates rather than graph coordinates
    -ctor Trace constructor calls
    -dtor Trace destructor calls
    -curvecmb Trace curve combobox operations
    -measurecmb Trace measure combobox operations
    -refresh Trace screen refreshes
    -scanning Trace image scanning

    Environment variables

    ENGAUGE_BROWSER To start up the date/time converter from within Engauge Digitizer, this environment variable must be set to the shell command that runs a javascript-capable browser. This environment variable is not used in Microsoft Windows. Examples are 'firefox', 'konqueror', ...
    ENGAUGE_USERMANUAL If set, this specifies the directory containing the user manual. This option, like the '-manual' command line option, is used when running Engauge Digitizer in a directory other than the installation directory.
    engauge-digitizer-5.2/usermanual/contextmenuwindows.html000066400000000000000000000043501222557406400240220ustar00rootroot00000000000000 Engauge Digitizer - Adding To Windows Explorer Context Menu

    Engauge Digitizer - Adding To Windows Explorer Context Menu


    Introduction

    In Windows Explorer a simple right-click on an image file will bring up a context menu that lists some software applications. Clicking on one of those applications starts that application, and loads the image file.

    Engauge Digitizer can be inserted into that context menu, where it is easily available for processing image file formats such as BMP, GIF, JPEG, PNG and XPM.

    Frequent users of Engauge Digitizer will appreciate the speed of context menus.

    Steps

    Follow these ten steps to add Engauge Digitizer to the Windows Explorer context menu:

    1. Open up Windows Explorer
    2. Select Tools / Folder Options / File Types
    3. Select an image file type from the list of registered file types
    4. Click on the Advanced button
    5. Select the open action
    6. Click on the Edit button
    7. In the "Application used to perform action" field, enter the following line, being careful to include the quotation marks:

       

      c:\engauge\digitizer.exe -import "%1"

       

    8. Click on the OK button to finish editing the open action
    9. Click on the OK button to finish modifying the file type actions
    10. Click on the OK button to finish modifying folder options, or select another image file type and repeat starting at step 4

    engauge-digitizer-5.2/usermanual/dateconvert.css000077500000000000000000000012711222557406400222020ustar00rootroot00000000000000form { background-color: tan; border-width: 1; border-style: solid; padding: 10px; } img { margin-left: auto; margin-right: auto; } sup { font-size: 80%; } td { margin: 0; border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse; } td.mainheader { margin: 0; text-align: center; } td.header { margin: 0; padding: 0 0 0 5px; } table { margin-left: auto; margin-right: auto; border-collapse: collapse; } .inputs { width: 160px; } .inputswide { width: 440px; } td.settings { width: 240px; border-width: 0px; vertical-align: top; } td.settingsspacer { border-width: 0px; width: 100px; } td.invis { border-width: 0px; }engauge-digitizer-5.2/usermanual/dateconvert.html000077500000000000000000000176441222557406400223710ustar00rootroot00000000000000 Date/Time Converter for Engauge Digitizer

    Engauge Digitizer - Date/Time Converter


    Introduction

    The Converter Tool below was designed to add date and time handling to Engauge Digitizer. Specifically, this tool is used to convert axis point coordinates that sometimes appear in the original image as date and/or time text, into numeric date value coordinates that Engauge Digitizer can handle [1]. The numeric date values of the digitized curve points can then be exported to your favorite spreadsheet, which can convert those date values back to date and/or time text.

    The absolute date and time table is used to convert date/time coordinates of the axis points. The relative date and time table is useful for converting the date/time coordinate resolution, shown in the Engauge Digitizer status bar as a decimal number, back to more understandable standard time units.

    Converter Tool

    Date value units: [2]
    Excel for Windows
    Excel for Macintosh
    Gnumeric
      Date string format: [3]
    English
    European

    absolute date and time [4]
    raw date value [5] raw date string [6] interpreted point in time[7]

    relative date and time [8]
    raw date value [9]   interpreted interval [10]

    Example

    In the example below (corners.png in the samples directory), the horizontal axis is specified by date coordinates. Since Engauge Digitizer is expecting numbers and not date strings, you enter date 09-12 into the Converter. Its corresponding numeric date value 38972, which appears immediately on the left, is then copied to Engauge.

    example

    Footnotes

    [1] Engauge Digitizer does not directly support date and time strings because they can quickly become very complicated: Are the dates Gregorian or Julian? Are the date values for Excel for Windows, Excel for Macintosh, or Gnumeric? Are the month and day specified in the English or European order? What values will be filled in if parts of the date and time are unspecified? Adding date and time features would only benefit a few users, while making the user interface of Engauge Digitizer much more confusing for everyone (as these footnotes would attest).

    [2] Excel for Windows date value is 1 for just after midnight January 1, 1900. Excel for Macintosh date value is 0 for just after midnight January 1, 1904. Gnumeric date value is 0 for just after midnight on December 30, 1989.

    [3] In English units the month precedes the day (9/1 is September 1). In European units the day precedes the month (9/1 is January 9).

    [4] Enter date and/or time values here that correspond to points in time on the calendar. Any parts of the date that are not specified will be assumed to be the current year, month and day, correspondingly. Any parts of the time that are not specified will be assumed to be zero.

    [5]A number representing the days since the epoch given by footnote [6]. This number is produced by the DATEVALUE() function that is available in common spreadsheet programs. An example is the datevalue of 27395 for January 1 1975 in Excel for Windows. Konqueror browser bug - Date values computed from date strings before December 13, 1901 20:45:32 (datevalue = 713.86518) may be stuck at the December date.

    [6]A string containing the date and/or time, with the date always preceding the time if both are used. The supported date and time formats are listed.

    [7]This read-only field displays the results of the raw date value and raw date string conversions, in terms of an absolute point in time.

    [8] Enter date and/or time values here that correspond to differences between points in time on the calendar. Any parts of the date and time that are not specified will be assumed to be zero.

    [9]A decimal number representing a time interval, in units of days.

    [10]This read-only field displays the results of the raw date value conversion, in terms of a time interval.

    engauge-digitizer-5.2/usermanual/dateconvert.jpg000066400000000000000000004662021222557406400222000ustar00rootroot00000000000000JFIFHHCreated with The GIMPExifMM*CC"     !1AQa q"VW&RU#$'25678SXbuw%349BFGTYfgstv xy(DEderC؂)h U  !1AQaq"Rb#2BSTCUr3456cs$%DtE&de ?tVW洩ih 2L<Ѹ[3TaZ:t@ Z;._4xIa$Vv@Y˨%R[ LL뢙θ9"@( 䞝Z:3rSP( 9 +u6#er"srEmi81pۢZ2 RP0cmK[Ӌe! 0+Z鮐h6FϐrYV*TjjFUE4k0#e\ nr oM C * 9b NԠm0fz>^s5Y1s9tAt95O `0kLԥjUD@DS÷pRP#o^M3N]1.?թ:ϴ1}?N9oJ[bsU_ '|oP@kʍbIH&*&Ρd֞s79w ʮ.BORkȽϮ]E {^6MG**=Ӄ,PI.l`u$IOgv}i:Ogkooϲgg~cOJVm(2ѵz_5,*) 0 7JPiD^\Vm dTMak(bAѧZԚ =:HJ|.?թ:ϴ0|ЧVXN3|"sPv!Pq. `5õ鮘'?MU B}7|c *v>R1*T%U[rܧ9%"8iaj]=j ˪:a A:W]WM(22M1HNIZN7 umՇxO}m}U|PMz>y2WA]W/P) HEE%&Ux ț_ݶE… dkUߵ5tm3?$i'REC;*J7I)`꫰D:LLL]p]xI=RuSݟia?Ng9oJ>OۙLQLU! c簴JR15@DGpB1\jNM$y֒,0kI4BQIC)C~c9EvDC.aӯׇڵ'U=o۫;c{&ZFs٘&WL,et"q"*'LL$9@$06龪A(Oh3Fi"TFNpEnYE0Tb `?8mQ_5ʡ4XHSY'mQW2Jp` rՉJ]( QlDH>^OjԝTwgvyOSn?lN~o؜7W% rWHu#d쒨leTZ0H9PbrN1\GME hЌeꖪ> 21r͜E0$Ȃ !ڜZbRIZN7 umՇxMalOF8}c-TEU ` shøDq^S7I`Ű0j A( ꊊJ2Tû<<2 '(l^hri8**sG6gHpd?A>`5a{V꧳>ӴB[ua'u'9oJ[bsU_ '|HGvO8;?u$IOgv}i:+Y*q1 j & 6m rT@C^U!( p2fk=[{PG3T)ctEՇlUp8ѓL(T!h^I!4Ȥh綺󁳤;;~Ng:Pw(3QiɩJv`OZp)*VP9vtLHIr@"U2gwÇ6-˩]쮅J}@t00r^8t+Mْ3/.Ax_mq 9%d يʵї߲ݸ:<\:q<.oxMqoHuu+k{'Dmϼʈdzyٕxqo˫98#ͿMtNW&uxˆ#=og~qwV;x9{.`N#ï_ԏ߯WW:prN0aDmϼh{9\ }qu鿏V)캷sq oG׫89_ԏ9῏P#o}nqDm<ӛ]5Ǐ_ :oÇ~{]ףo#ϿM۷6ve4F=̾W0}G:musӏ@ݿMzoHuu+NFit(ϼ\|[?sP<<~:уHuy #oˆvg.{.p߻]|˟<5w[R?xR<~tC嗀{9({9}.5ׯZxpo;x [R?~]^p~:хo>86}supo(nn|˫~7~C_ԏ߯WW:pr?NwkvF=̦dzyٕeNq㦚q]ϼxoݻN<\>9_ԏ{=9_ԏ #oܞܷDQO;"כǧ~;p`Zxp;xn[R?~]~a~zӅGf{h{.p߻]|˫7M5-?WW_pr5{6vd6vesunӛoݠtm878[R>~:7tw^Gӫ=Qx?˲Jvg.{-yzpw7 v~w>-^8tR?~]~aˆdzyْdzyٕeO黎eջNn;vϋ|GݮzC=HG߅i(\m878ǿx͋|Gӫ89_ԏ߯WW:p6ve4F=̮{.`N#ï]oAÆLj0Huu+NF=̔F=̮oÏ~ӛ]5Ǐ_ :oG~n`wk?^{տ #ozOeռz8ÿxDz 4:<:oHӟrN0aDmϼh{9\ }qu鿏V [R?~]^pzDEѶtĹ-JF es҃jZi#lrq],N@ gQhrৗ0v`*P9 `=ظ>֬v""#/0ܬi#rDxvb~ցׇoe) dw^ז]@G0m-9GP)<|NAD1bSYw9ywjhʥo,\SkiJ~Uj@r`0@]te7u@4n3+%R5}QٷE)#Lw b?xYax3ғrlE(ĦNk<2kAԮ`Ӄn'F˙[;bt Ȩ]Jt]B}iU*/VK*r~Z3l݋EY%R;m/TmMMYlz2ԫvHDSJ]YR[S3*h3dLe(DzE#m*{Sl޻SeQT31qtŵV`X 9IDȬPB$}~T._Ҭ6U[rb:^Ÿk*h3*uZ-{,U2~&w+Q:̪:EW<[J:bZ!9~IE Fj&ՒnNf(hpq6U[rbJ`MZ 7Bh 5P LG E;us͍SjrXS1v- f#1ZV[ջğJ=tEJF"$)Ml&SP[T5 ʖ`nYjdxv,dI8vnfjVjF1TTYp͓*M(W2$@1La%RRcGm7تB*j{!Z҇E!#E6GFOoikRي7Rj HpEtї-dHڛv{& k OѰ\ڃHNܿs ܰ]Y̙9`-EoM*PJx% KV*B(YqtVȐMʒȧm}2.*gDPqU hGAʝ4[*yeAf"6U[r`ybߕ f%yUrmt-'+oȩgٞr]K@&xX"Y(}nW) SN]'3_g- =jPTeʊ0ґcYq2vT).@;gDNRy-!]OL*͔jVB";"e$MURTO!j<|ʶq$*>zAk6T UrB7E$E9Ĥ( ¥t0Z :R~aY7upX$8feR?umxK'F<5+t })nw@`4~1O8:[`;G5HyC}#@iǛ@P k߻|0HyCPnl#L0XsO`;G5 C<@Oz Xhth C

    j! HyCM&8At1]C8ktM7nx #LJmY9r5 C~?k>C?w8At0j! N<}}~:a<;hv>j! HyCOzǧ_{Fշg;8C8At0j! o{}=~~p>ݼ:i㻌HyCP}~:4 u߮O>G90HyCPqӜyxG9:s]C8ktMC<@Mxë ߻aA [vvm梐5 C<@iǛ@4 \>G9:sj! HyC}=]}Ay!Ǐƒw~<`;G5HyC?@qEr hPt0hCx@G #LJm C<N E$W'Gxʟbwx"9]%&;|pevDM:«*@ʟd8%lkPxdTD*m3}Ȱ@ f aif uȦ MU"}Dy%5.>ZZ(6kLoVC&B-5B:IZ{A /gZ_DT!Rپ4x0ьܨdE0L g6 T->S ݆{vlĥ ZRu?>PITu_!OL%$ X6f2wpiySPZ{(uy-7uv5%)@J@ 2VV֣RfI+ݲS܉>6 ۧxvMd RI5E/ 8ˢ};(+۫lԬ&-]<%כUWrL)B#.tujyܘ1u| WD~k%;E^znJ3uJhhNgU xzvӽ`d*šxv;(eOfNwv&TSCN de*%.heM%D$P:DHD4 TjnpwP v ! YI@e™m,v֠o&vAr":vP>66% Jr<˔9sS]BI7aZ,=ޑ!늒jFENWU'Jdgflޗh˕D$TQDrwA2"_e a6Eec׸10G>[{vAriWT{L@Rt]ҒIW]|"3MH72%H)C WBɸN]9PM~,ڴz²lQ#.}A hIobA#׿I wimŤ(ZEW%@f*l=Qc=솣-k101(|QJE:cZ2dXoi狶r ̓TJR,l8h'j$3eRzl#Pju6 ѺNw D4̲1TXC e] :AhD_g%. wy∘v;36o*Ef(ڢIzG5NpbliJ1HOɭjz%CjZ_LrhYY5W7rg| %vw'p.];]v| ISnB(TnP&=D%t:ں#ؘ#l* 1vS+ a:>-I*r֨w)#O&]V̧t/ɸITffA2FT1I$m.]*)UX9Q1##VnV7RyKZt%TV= H˲kPJG @tZh(s@à$IRu*BJT" ${!姱ٚU]8mkFǦhW@t*jffi=E(2MJǙq6^t3kymVM N^/ de;\u?YW. Br6d.6Yf'A9xljH>f!0nf+'Q:g1uߨiW{?LpJJMA$h5cYT#(-u BT *JB A%FW#1b"nm?9I۵*W04H  hR*3t4N'YNrd yIU󶮢](*U\..Rw=/z.!8A8b7E$$4*b-S+TP %ZQ赝@HD^&CE1mG@T;;1L5d/%az0S-o(N,Z߉e.Z+TXoMTDadA,mY+Q *)xq=?"ٜ9eEjHdLtקnG_aoFjcdn$]uT9SE(UNBr4\*QR! ;/- Ұ2t[+|XJJN\zvAٹW ѮpU([.fW_mU=VSIfuͭ9' Ix7c ˜6ڴ@ 2: zv9%L@1Oɘu`ti CAƹ˺lR'ft<#UPIBc#V#ǩDYڢ[QQc#ATi!uo2֥!V􌭪\h-ơld!ism=3vY]"c *,jGUro+X0mcmT^_  N\@tgh2# ル߿LJ>*p@Q*H?OoةM Y!+)PI"V@WquCM;}jZ/* xSUD򞚯x@TƨM(3PH0APP3ryxxqfjˆgn % ](Ŷu,ChbѲucʲ}87+hY7nяh͙&ɳjɹd8GFmէThxFXӊpC 8C~GqyB,FN%1 ۺRŲ*Mf#tyNQS2چ8PuvD"4#5ןO:x9Azc )B9e$JR9cH(Dt D@tA6".%t(%](R5 "b 1L !q״K'ZƐTjHΛ3Mh+ ] @ȚR`i60)9˙X@2hIĹ \R21$QM]pa˝$\"\Sghz!iv8z\|Apӣ SCi]|Sti6ֺ۪}@X ?Q2 v@ sp@/(=bTYhUΝŪM±W,Uș! SKYڷcq$&8-ՌgAE͓׏&HhLC42dDJ GS)YJ&hʰY[}*ʠՕY]'4vʳZQ:Y5 ͲhhE s9ۋ;spK/NMͷ8[fRP}dQM4Ȣ-DU$0xv\1ؽS;"?1j&[\**N5s-+%E-cvRqrqE1KR>ZY?xy7ea\qt߻Mڇ +Z 5״+ ?5[ͯXtaXA۽gB 3/Rif?\o/&!|{AA3Wo7_p0q:qs~)<<^+_qǛϊo po p]M?1]G|!N !N1]Mizuv+q<<^+q/Gzq]M{ǯQ{zG8pӏubC>C>!EcQ(⚛{q7}87}8C 1]Gw}87}8Bu7F+_=8AA +QF>=уS}qz)<<^>G7qSS}q?O5o po p?\nnq~_Q{zG8yz:AA /ZHGy~GO!N !N½}jo7=L| pa /+؛0ι*>VvtsԀ'r{)L0bey(-gKtp.]%_LV ;]^ٞuKٛfںײ{P4IMHl[ wAeΡd&$Ōg#HUsQEe"M"1GP])LL٨uRZc4ƆQΞFr-AQW9@o"$\@zCEL-W؆o= w氏)aO\i!G-ohjrib1cq(Hϟ'O$VsP펬{"Ft".2oh$ZbA]eyr_V+)yiyY:6%!Y3a+-XՎ-ť'\"i8GcʑL/?nټPꊉ T2l ',̈́5T:FEe+"Uȸ5½ RRN[W)8w1-^Ź0l$|ݬ4pTDɗM_3YԢKzUHBВ2K p5JUJuM(!FOx;b=93 +zM]UDp#(KF**SS(v[:kWPsk7F8Kn.muTW /5HOAɢg,A)T[0PƠJMtMX^u)?l.W402 XtKNxfbr 2b$a s*6*#x w &) qT(zkզ"~6rמX wԝ5wDGsZ-Xr6.yA2bL"#,:s3SPMLs0HKtME \1cQ(PzdYIhMdF~AU"7r銈(Sb(NPE1bBb㢈l.(Ш$R +uO& en̛`B 9$ck\]A98JM'4;v"ZH*t:ZG" gK$R04Ls@չ%iՉ B2Iy# NK&Y2XgJ[UDU aѺK7rP 6Uv ɕ1w3(US T` ]@8&:iծ'Kل6_Eo%i;gIOF+]׷$AS+Y :d 6uc$)yϒ6Ke&N-hnLy4h%,-%i ɴܴHu҇P.Ԍ#`lɹ==mYsR3S3a-G^xOHa'I.PjH4_[!.tȏG+K)UW0]FQt&Wul3ǪD(Y:Y5M^PAtԣMh׀9$w7 TQKYk-92WX/d^m;]DET 8m82պZ I!ΥaIlj8!IVG3sn괅m2hLӝB\RqB 9҂6^ڲ)+sM h}fC+3UA*ksDQ-r'9Gm.LfԥDE71dʻXIzG-ViTV6XiMn EY1P`@6fip.U(dN dP#3t} Ai˕_6ٴeVs )x!Є8HDTr>לrY3\2'06_HqmB$c$\^)Sb"bFjVӈ$84Ed.c@($ة7RJWc M(*+Ri(dTR$R@d ]㦼1=,^9eYnM^ƺt嬔ṂlFOFfpt*&(jI=?(ݠK}̾1*X8HZx▔!JpU[ trL֩^vEJj[~iݻk*"'2tJ~.%HїE_$LŽa$eT2Q_}6Z:zRWrK$)Rq90 ' dc6B-ǒ%,C<$4*Nj" (ݡJ3E݉OJRԕS5TH@C>)JOϻlb9FGU"Tr(gn9P[ibͷh]vmygP*viibamJ!7 IVf^F Bʐ(I$PԒ3X.T(hboe^YͺxJ!9#untHA."$Ie ,\W*F5E7^+L i[tEj7Y:I5CP쉰e;?ygDQhye4cPIUSH!SbUzG P32$(a/x^vNJZpH%xG* FfۙZׯ-lOINV]iJLY'8BA4̻Z@6ٰqQwaAw AlTLA]EWTډEU ;Z12ʡ:*Ys&mUhp=իD綍mtg!/C34"-Z˸ǝ.aO6od]eJjԼugqQJ.VrHliɥG9&ec{ፙ-y4YH%p2#4JJNtK a>-% ')A I9W=0dLIŖ䘦+)U(9"%Q3oJ^:NAh˝e0"&[ H6::"Вgc!ÚD(Wy E 5 N_E=M2$UI5~m;)^Q,k8DS1q⊹LJ,7(Rן[k*֝-G˲2/RXЄEYT訍Դ%] FyY.a ERE+B41Qђ QĥDci(ѓnU*q|b&-جh<\*n sY7a5QDv29Lݺ1!!6m:9t`?:O{%@BBM\J2Z1R{f;h൅@c"*)oiݖ DjCOT,[3lmOL=x;jWd}t!Do{lX%!5d&bМi(/ڃBCk jm: MPz\BMwF`뉇h(S [)Az@(8:$5~Vr(vW]4(d,b!Ǒ2(%ԀS+B9! N3@JR }e'|ؤYUyUF&-ʪΨ Q9h@ }j,Nfd$Fl^HɎ@w{k:0q`.*.A-Sjk"MMH ]q?0/=Pt0Xvy<5 C<}CPt0Xvy<5 C<}C^gĩK|(ԊAǮѫGM쀣t)T9DS0̱^ fj丠!J]k/T['EK d3AWQm⠷$]iC3HgB>Mc5R\ &t*4SIRT$En(/tgI P/!?ZJ-DQ]F;V02]ٟH$e@L8A 4bB!^̄rklQ(O_'O>JF$lڏN(a^P;[>u}^0h+\0{[>w5O`&j=-ʟ;wKwra`9mirk=f?Bj5n#Oj27_39[+FMKU.]GՉzHSsx/ܸrW*PE.SM|JMV թ:虺LDQē+|܎PhF e5:%wҍ폳w>H]}:#: ;oN8Uwk-rFk*Lĩ]N[j<*wUԙ@YWl*@19@ Cf.^P  n P6Q1wKwr4n7;o keFԔBrf)U$tTDBd&뇋!^sP[>w"*RKrdEGu @ѓJ&RQەPM4S!J+X0EׁhݛZ^{ziǮUuJej ѵ[zj3s5w5II1/M hRc-"Ezu̯p<1q2 Yb90E|'ಏ9NHQO)M/&PA46H2SYvii7SO*n~} Ks-PLH#"LDR2rN뾐 4-&^tۂ.Jzh5h,PTrMs TN`1ĥРR\sGZI_턂=W DDb m$0QnNT[49S]|0ѣw&Wi}8nN}"HP\UL9Drma0Dt(5j H*tTQȉn BT9@ #!^sP[>wxwx=fM)xjC(MW&E!ҨNp!b@Aݯ \)oFS~D~cEu:_~'Jn^j@L#}-Ҝѻφ0_+$ q HN:hPaÊcpwzb|GR.tarw_Kut^.|j"=6Q3c3x`^?Yi˦+PrJ!ݮ:oS5U#AwKwr^sP[>wfj_fj_"NϷ(tYt'*|j=-ʟ;_3P^?3P^?5OzG9SxkjvG<jvG">  *)uPGUzbByTNVic"W+&ټ}T,uħU56@frvR +i(G*IN I),P0ks Gݨo1?,Ud;F6˚)[/k#NfqH;b廇FM!pu$Naq  .c*a1%է fe h%E]Ai*&XP-?B"nҀ:qDxFυg %W>k[qy4s (?[ oV[;,Ғ&qi:5E@ =y׮x뮾31m;y1w-rpݧNZyr@w xs;xA8o}89Ci9 |v0$/d]\к7Pz:xcN.ŮPtn8j|zO?@ iEuuy׏(#=>cN.ŮPzuݧQӻ(<p<ф1opb(==A|79Cx01ϻǁpb(m8>~oݮPunj7z{Cv>w,@ W7>bNr 8q|P~C]xs4|" Z_xǯw>qӷ1k7>(=k1ϻǁpb(mǣ7ou߿4C!;xAap`kcNrb Z Pwn]urz9v]CL!;xC ;ü~9r=pp4|" Z 5M9C}o8 # Cv>{-r;89Aqτ1opb(=y7(!-G>ۇbNrvECAϻv1o 3v.;=_ǓLpBǬ?m0_?IsQ6t|EST[ʮ2`a'%D:Ed:Yض}ʵP#b+KOXRe K f%mO-i:bqS19q^)ps45B,f*}D{WR q!MڦeIתz|K@W;"rf]ܺPbWOޛVM(֮T797sU9_.ۈh\kR-U*bLbu5$"J;]FDD(Z 8QԨxL_PO[O0Cd)ުRUB>90,3H#oAc `*skuNukzn0)KOb`pد)9*WoRnl"'#eUPCz}~i5>L!3Lnʋ)H!M7~ju#s,X[JDcADqL!3^BQG5>5.L2+q(O(JlL ݤ%U2;FIJK&o5>Liad^%%j`Ta]StP bn H;8]: W-']#;]K¹ QN4t@@ (m QD DO/`HoIg2wPP g!FT^JNpc"*{]N,iʞ3Hc\214+MȨluMBfhj(u.<?vXc5>L!ZVyGWK- K sEP$bKUrڕ ,B E6"Rt[% -Wpm`!̲- 0:Kai;Yd b*c=CQ>o?4K|_ $$$I$bтu EMsu봛AђYZ ԙzkWnP)ʉawǤӿ `hZ#zz S9 k)3U=˒Y~69l.f໷h1]ȷDPUuSDeB*ێOIS8(KM%JZʖRMH8TO=7iK3.ڝyǦC-!%kq-$M!Ǥӿ |zOm;o0{esPU;~:#N:oS@ c ^ʲi%NRQ 'rWl飦AgEQ]&czZې,"^~Y!$)AIvF6BkUkn̼v-Jro)$%T@$R)SeN7?mq< DO/j'}-~'˶Nn V+蓔g}YyE+VCjE7&Im~wߞa}~i5>LzG1?w؁`i÷?|:pӳE-vF%h؇ΪGk a7I(rFq=B#ƎG3ŵ tEZ22Jɨ_SE!%1vԦ @tԢ!C>WP :j!ODŽ0gAA:Cw0j! !;87}87}85|X5ï`N')<C>WP߼7q:CO`N')<0o p`:C0|a?xg{!z16#qhƹku"DfLΒ ɔ/n2 =%v.u*QdiXɭ R4J%iWPT5^VMsp);"eA埵bѳE+c:A$&ungjHTLПϿ}o\K B 0a0`#*WWU4BVp)IE9DBsJa:Aӽ ET2Pu),{-]BB19J:n9awX+<_JK dJBKފێ( #4 DDDwo!_50GN.\[WZ׷zT0a+Q>t216E. 3YΙ U'h&ed ovY]riq/8B 0aavUc+'a?[6 *ez6FaI+"J_dlH ؑ6nGU.VciJ"-;D'lYG1"Ӥc5UʊapͿhvlu;gj%)(Ii!]$ TEf݋xfħ"~wEYp Y˥SAdpuTAHeYeN%"iLucHR #ɽqyo9 d6bbN4)))D$jG#DfSXͅk 9hiy{fY/o^A3Vn%,Ur3,&aAX!ni^{iX6̼K}vrfŔ.IRN1gdd& *)o;_T.4q apcl]-!$r@ "5Pvʃ>~RXj+fp{X֏D*#/'f@;Af"*sc5t&x2s(iǕ:^mCj4搸I5fBb9BkQ#\\KM+zf$ԅQ`n\jXrӲ-jlfδdO(v~er-%S0YMKQz,LYSŅy/ٜl6]meVĊ'e^\4di2VSu e! gӧqǣNRmPb-MJ5jDD[e$&020x ZW107PwlXψ˯-%DBf#p߮0{ vZ/+tY.7'F].֋A6*GO'#̕qtNph},G߿8si^Y_'*lo>tՃ@߼ww鵻M~4??p sk;r@m40h W>x?kPM=-z7;`?{x_:ϧ_Py1\kNl":gߟ:E4(ph|:>L>>piwsjl_z4?phxN;@ݻ Wy:ϧ_Py0h~Qׯ|4w1\ #"t~"_?8ϻGuGN:suoY>4nqC~& >W~ry9_y. zqNeπ4\G?ph|:>>LW:>u{t:uN?~)t}#0Jͺe64nX4~q^~}G4??p-lճFh> MxӮ\:\mn_-iϳM:;q,s7~88 >VqM:yǟ?^ GLxCBwg#0Ly.}~3;߯y ݜzюc1' QCց)37k6F!CT#3 Md+Rs-u WuSTj8UʾRh4QEDzQKDPr x[k1ˁj9՗i=p6Mt)jz\h?!HStn y~Omrcڜ;{<؋~%a9 C ~ZyٛLi02efHCkQ_tvA:bdJLLs( Ѫ ^q"(yU۠[{>"OBi|j72oc6p!'a?[6:7M[>l7tGEg dE@%RTE1D@9D@Cb<n'간jԄXV.=CC$3nq1H hbRߓ)JP1)zjVIĜ4^ɽh~Јk""g)˫4ݙKvX5j쵏)eH.6h[$HT-kqqlK]nn[\"঴iO[32)wl$z"\R0Y^!5PӪ..z:u;k` ʏ=ڠ8F[8v΀vxvHU(Qidy9¯*j6%1;R7ԫ EJ9L %"6 dk1#+%"TUI:mgN#vR2(%L51)d 7cbP6ɗz// &3te3^s;/oVC0RlwJ/3/Gn_~ޜ0 K\iɗ~z׽K^&RcS%/O,Gy2EJw!"3w:8ť$FQRY-fdؙ$Q;-۰w+,S&hFIO"fjHf1v7 zϱܝB 7cju#QAȑGKRRq! z pzd}:^ʊZtLѐ4CNVU2dVDŽ\1tcCД# XG#5TtT4rn)7"ʴ+BFf71kwN LR*;-v }$9b".IFEa*Ju̹d|%ɤlR`lcVl4lnգFI ٲDAȚI!JwNb%_܅qWBEg͒e&e-F[+wglwnٳ.ʞ4fmKNJ'v-9iz\.eV][MJOl u Q]p豇fv남:AXw5m|7U?s| 9]dX]gJ,fI+#$r$KV @+Z㊥\qJZZO\ Y2v޲lk"l'fٲJˡKS 0PK-n8bqŭŒrޜ7zQ`t¦hvL(d_m#]<د| 9]T d4T)Kt95Ț1Gp(F2Q_[clK>"c.+dߺؖ|! ~~i5ڗhdk$o?0J4醽R]m|TO!?jֻ ָnC (] Mׁծ(|Tq]+5훥{xh^Tc&6Wu4w.㿨wp0 ]߽-#«G|] v}yi'O6`:AaUz}w.|xɃ.t< Ƿn=(Mk>A~wkŬU^*Tw=6mt̓/Ox5ŬU^ gBi:oo q^Pͯ|X0_U{>~~<xi_@1kW! on9:zuvwo݀(uoU~=^#wyB;<(Mt.-`ª!U(A<=w^Ct{b *WW{EPLZUBGyBՠoPLwqpyqk_;Ǐo#5W{EPŸ~'(]GGAŬU^*|] #5᧤<9BǏ| ^#ݿ=]Z tkŸtżU^EWszxϿO0M0r6mt͋X0_U{>v#w쎞wo㧏WVŬU~=^#wyBo_6 ZUB9| yݼyX c_cVws!z##0L||I7'OZ;")k& 8T垩|ݳCWLٻ g%`tIKd1r`XOƌ=̘ɸt>W+֣uGp`աi*e਩J-eZVGҍb|EJRv̞EpKbN%\pJjQV jF80C=e4[;]dVMɳ\ dE+KhhMxl}E~cijZr5 +vUms' TцUfIbcAk'EJ^YW֊2Bw[2`5 GU#&T d T0R(3ᝃ)%lA:oF4c.v7ŖZvٻy߿bؕ _5dmYVtmi4īEqrO<߭ ^T**zB幭|V1 ցk(*S$,ͤdu[MEYQ!rzS4׬u粊3vnfUif޺{:Z굡\f@V5'M%Rq*]]/KǠdtFɾ]/HEvs4n5:%4 f]a(h?}퀸! 00``DCvN ̠T_Zފz-Y3{`F\$Գ܋n|BGr}]? ^q9⏐bь]=p3 )>1xX8Ǵ5є"`+5l ÄE% P! 04,C*|G[W&w駽V5-rITwJ[Hޞc.E!?R0n]5~ȠnQ`=*B 0aavUc>cJLTrDv|s7ǵU6fX@g+d0`'P(03'q?PrB5 SBC NS` <=xB+ 1[1OJo|ovhэ8~-6ȹx]H IiBJ$e"j%c{bT;D*_A!z1@ZW09RsH:1jz:^)k,npΪ,-4yl̍_{ĭ3m* 8t&F? ԑKW'ۯL&朦I+'%n 5"2O&,gr-;nDPLeL@dB4 T?JNS6򤟢&b:z!EϨUvӧP{[B"&8.xɹV{2BeY/%!O|5i*5p{W]M%0;3Yw%W"V:֊}^復(eamZriq֡F%V}O6*GOgMCp$3uX쪊L,@(20fi>-/XTN$*AirU"D54p k3TL! 0IFjZILn#]PtFю}XQ 9Yw1MH]d'N\IT0l\*SF׸+(K=!MnyWvcYf5#Mw]ۈbn( cF@д9]kHS9 ňH4@ fv|~3~o;1q.e@Fߚa+ if˺-y%և}vSaJ&%ݫ#3M7ѵkAi睕C%ؔ KDmGe^iWܱZJ6{T$hWU|lM햮*2WclS;FEQ,q u"89Csu4A~LZ\ b۶˜,9DS+BJf[ J:R@>Dtte-`ݹII10;396[SN!зZoi:|5Sw0t+`) jv:]:Zb# )<@%3l'(˧l\+nyp1/%6 B 0a0`"xL1zw\18}8bc$p 9uy]%6ij&26K}mg.7'F].֋A6b?7 *`ֶ_ _OkP*GO'޻@>usaP/O}Jk ߊ^SGG=#=w}SwcYԡo*^f/'<#Gf<4^00m>c;o"=a^7t=Z鿬tfAV;7E1p?q*m>e!:yw8 8sqGgrZoN{ez|>ׇͿ@߮*j>ӰCEr6F ь}G}5qxỏ>zw}s 26F ь}GMwuߦwwӻN#qMUN_ߺ`U/O}6F186;Ǹwb< kͧ[#ߢ7W^#l>a`/O}uc9^}yכ+d8o5V_wovbc:Qh黎-k=zNYӞ9FFz|^01acQ Cy^myӟW)Vǻ|IX{vs2vF ь}GŠow_W8DHb*W_t1 ݞa`/O}ݯ:ot: G^~mweן1 e[eG1ݧsdm>eXn` Cv5xxV>UF5Ӳ84Ѽ¹ez|>ϯ6~sϯj:q}qwxmV]Z#ݸrvF ь}Gw~<;zFMpiM iџCvsݧ(/O}6F1:n߼wqӏV0j8oh Cwg5/O}1Ͽ@ݦ|zx1UIu60' M'2xZߑ&<<!w{6 /x-~ ~llw~+z*9|X*9ZDmnd V]*mʚ ſr岼6q~jn5lBJ)-$RT*qS.iHN)-0 0{n%7*Ԍ@[*.Ev9y'h3\(s 0mk w"=m?p)(JxB)z6&K* 69X<1jzɨvd仴En]=vvyPR>[j:VR)J5Um  -JUV ʙ+pD1| &]dZ#6 Vɢ@(J#~?}퀸D=:o}~\wwkoxz}ȯ6??7鯽?EI=udW[XB$ b=v>65 M6,YOXI͐ME]S4!s0 &{zs.;?[eΛ%.d4+riZX/Y7bxaVAqWu"ڑ u;yZ׷JvR_m%oNskL N7gbYHS$F=.޼ΥN#&eGY1h37%cٲ$5hZOˣy $]U_^n^]I6nWnLcd6q-)$ LĔqB`Q1]kr٨ bQ$ o])Tr$ۦY T э7HTw ~lt<ҐgpGctVEJ b>Գf_:ZߜXlj8Ra~IymqafڗBm$ EAw.vl㊙'rϸzѼ˪m S3Գ%lJ-jƪq1 P:i"u"p"9HJQ8덠3Df˵ &#V˺9KH#*`. qGH*ظ%;A6|vjta'p;CO _ܺK/ QCT0ܚbfJEUpG ]7X!V@(z@|Br{\wܹ(?| ^.縰|P={ʕ! }˝rj'r{\z@|,*Tp/.w᪇}˝rj' ,ޕ.縰|P=ܹ(?|'T), Qe߼~cκ3yNMp:eYvME*i(at)J&0>:i]Rs3kZY?x@6Uk@y™uy h )W{\_ ND0~ERgnoV?re'>uyS1h5~5o?g".r^Zï_p;Gt]Dv9N?uy-oT8yw j oS0r^C7ǯ]/(0ƭᆪ(Wq<ȻuyS1luxßP5Xi%r;9DS0r^Cao[8#yN?uy-9˿^pƮGgR ~uyS1o߿9ؕyN?uy->zywyoaѯHgd")9N?ŠןϿwpW Jvs\:s)w\1+ϿsWbz[8#Ͼ.r^Z>MCN~u]5p;B.r^Zy7qĭ4i"4vES0r^C7߸ztïcVw>ȘuyS1lxys߯ wa[8#+Od]:s)o1+Ͽ&.^[7^opbW#d")9N?ż7߻a\}W`:s^x6iկ Jvs\:s-oąկ;}{}#7d/ j;=_ǒN7ݬzێc1ZAg_ jͥ+Vj(zu'1/7} *V:.MJI7nW0 r/IVJkPMYac:ZE;`)Y̳f嘮 :m}QF!Oկb\.س.xS&Ô A f s zKhlmF;;ue5j蘪]fo1h݊+lEz \1kjӽŒlk6;z9KhVBr'&h;qwnAe2G<^Nǥm}1'h'sIt~1}%IUXjHRn~KG܉&m *^&#[j䊕Al)ܲד/h\g֓Ǚ[l+w›+&\6\د=s4#ύDf`+MQ|ѭA=!Xl(K~ gPD7c+4$Ѳn+DA"pD".HRS(S*0: D Gݶlļa0`  B!%?e9Sٌ&+[Ufe\եMK *3/ei`)PmK I˕gN^E@X7HII`Box`TA2j"@@pS(:a1]SLX[YkPTpnQ@ؕ [T,IHP4%]N wGYB0ml6f#3<ٺ)'Uu❤D(rod^5}j߬F՗.% @N$BA!W5iJ 1 J 00Ĉd&ԭI;8_xqFf\i5h- (8`"rXrqǏ icwB 'WYc?AnY/RBF_4zr~rp\<bJ,:NWHUΝHRtm,Y*˳Hòbu*T J;Y/S_N}ˋpmuWmjx^yKZTZ%Sҕ:?Z>*UCIpI5MG(C3{(g'KGӴ]UE\v}6ZJPpw%h3$d eE16$ֵŠ#kzkC:TZZ"깔^(eѨ:DƏ;sɑl(H 1w:etحfY+۪rFSt|eTLtۂ*dQq"P*g,=\[JC:%qS800Ru Zh lYM=A)7,Hd|vpm!ތ\;܌Q<{ &Q> d=VӖ*d]w ;W6,\M4؏ڡ)bS %Dӯu'ʾhE]F])RжBSGm多JHZb鸢Fa!*8D6Eۺ:USؽ=%]+f]7oͮSdjϤ/D6ŨRU7c% yPo/pYyXvr{HlQ1( 2#_;=j*AL-^kcoDp]ɑ#ߙ -g{,z=*{ e!AS ;ݎVH7rt9|n{%o.teYoMp+ixǕ=Nt E?%'mgn4H$ D> %cַ'`BVq%C5u7BiW\Sr@psq0&FU,.׹,n}V+.ZNEP[ӓ0rl\0]³rn&r(ec%3STseR+Z r!7!Vj*0s$Wl"%B[le5N +ttES"~I܂&ɅȜQ6h3㗃EW?vAP/%%nJ '@HK/#Oԇ\䑕jE2G)8'idJ4dK& H˼bJaJ`.9[)r=1D6ݎNkK̛HLT6Z>-J֊#QT SA|fM>|92'%"Нِ1{i*²9; R4}SE"Zq:X<&TUb- `GELZʒbjCMۋKmBU#K!K e*)N;Q&RPDIZ5f٪)$I?ƒtuHr`觓JujIT91:)ׄ.FDmiƞO7SwlXψwʴfe1& e\Y$+D8tpf۴WL~U؊zV! ~~i5ڗhdk:Akqpu;; E#4>;'9MA]~qhG mvS9j#ha*Ut ZoT.uݮ)[f{M-+ZH|yY$4i$Lxg}>4̀Nnay1i{g񏽳uz~PNnm780ٷ ٺCl\^~6>pa]ûFvq>1n~mo]8P9~0{񏭳uyO_Pzm4 +wsNpO}@y8ٺCɿѧ^>pa]Ty ӊD]Ys:}|clsk~M`7W|Xi0'g{cN)n~n o\|¹jj ٺǯV usstqc;lt|cl!zlz +ws@vq>1n'cN>0a]ûÉ ٺq P͔vq>1nx׊^m4?NaNyМk`7Hssyuզtd24ѯi|clAywlSl!_w_ +pa]û񏽳uyӃlxxŏW-]ݞ_}a;87Wi80}sO>Nd3]^7쏓^j<c6;@GH~h{p.ցcw{6 owWBnvnRmv iʹhzƣ|ZJN0EӒ%Uw?1(IRX 鈁1@J1uآƽ5<ٜZfc/Y/AN:&c!ƧVJHfGDdJssP`.=>5 C'P䝁v^؀tcQsmq/zm x SҒNQenѓ4NӕEQUN;Bø1$b9[Jk%VX>A7LݷPAuSY#q9Lv+*$MJ^'Q[;;EH̋Y$wLђlE.°YVWT a_ )(ȇ+,t=>D@8V=vޝ9w4=]9G2MȊa̫X6D}l.xhށ}ȭ 2܉ 95Na? Z1EyvC $⺧QVАTUK>IvC+GrFN4v$HNrPg'?8n ؄V\P5:櫨jci77&bE׋ak$ i.M::0`Ck#MtDwcZ XSuy[]Qj~QZj MV@~)'O6jpĹb>s=f#/yq^VI[.\<0;F}59XUu 7`⊨PrƝMkYdu" 1MsuN+"-sezX%o6f4i GQu)^$\TbVlN(.G$M@.9)Fh@H9yX&~TuE\HG:z *L'. >+r{Y"RHd(3S2BcD9 Ң[fo8"dI$vp"iP)Po(sb筯G~|R {=gy'O#r.DkE8,Su dJG]jp8B/[^3Zݾ[^3Zݾ5}\Z S[կV&-!~n. Ѭ8v2o)4.̮t_.Dӽjֿ$tSrni*^tΒ*,.\bK"GrүfGrƋףLr>VovFBE{%!N_=rv;+!"(utZ׳ִէ{f8T*XF$S}[}XlG +/KĂ畹6;Ê]rd/6Z_}~Zk Qj( QDڠAhT>n{+2\+n{Lˆk ;eAUcE Dh& S]P)ĉe  ^Гõ9}d<%|wWm=r>`m`gQ.Gy _oﰟ;٥ O>ޯГڿ4udg5;g|\<lKxznmv Sv@|iN|';xZ]< z6[l'xp]0Ӕ-#MSI 61ժZ$ ;Yw*&DDǗ̟dEL8bzqR&TMP^9- )]wZce!k0co`k2ogT"̋0gںL`cJ3jm=E)9??zuXV`߼C2Z<LJe\}OumeMUxD^MF:-NIldU맥I4K@cf(R]53 /3<" [ #Ts :ůfBSdLڹ(ф,]X; 4#u#NV̲ 7Dz]s;+RA1gmǓJKܽj((4QLVDE˽|<$֭+-1i٨M'L@: ӧ,QmJDC}ԸxTNwx_6ݼ7U)WV!S/\uSR5zg9*8.JZ9E%=}A5T.Y:d&y.4)r˝Z\JVH5H%4ATn Fn?s?\#ywΫ7"Wwgn{|Jgo8u/}]ZY+vݾ44iw{\ײ08sit~<e]C5l`p@XE՞W y;՞W ywWX]G~Oi=]z @58qӊ:yÛ_FnfJج`V{\XԽZϫn9o(}dڝ9g셧h7 }@? x>"Y+0|c20Kd.aХ-Ah)nf@év,;Ǫ+\r~vXY:o~~h9τs%i>(MGB"=4";":G}%v^LC^mP8!B2vkZ5($)ݿt,;axnWh5Pm=8G{Xa.1'߷[u1N.㘢@!;h릠=4ov鮡 9P?gj{k۞aW;ӞбyÀр >GVlUc21Bwd0{VUwm'.ٗ]' Kծ:a]HYNVߺ-:q_6ä8q{^q gLm?{p W%h*ㆻc;h04 F<  `s/s|48Cg]Cy|S@ #f֝ Xiڝi{!c9O :q_:7 DlU 8vрm)z;m@tqNbn>:H#ÂbCABғCQ;Ӟ,b` w7?H&!ϰf2wD(rzsѣ?=9ß.`\<n~p.%h]?MOl?׆D 1QuM >0M_($!y|S-~t،'N!5au^ 9ÀӃh7o }B?t.%kǼU)7N1(/Q1hS쎔Zh'q MEclDBhccCxG.l4 tg8Nޝ{BǴ}=858qфY̬7Y&rhP 9h`) )E{iy9^͜oY徬䞶ADRؤ)$EH X6T`2е'^Lp*A4;NQԴ䆒WAM 4is?BB' m:׏WXDžS*ٻ49]妱!IplB3ٿ~@PBk:17%~P%-ı!#u}{Ai@r QНy;Q*H=\ia xqm}6@C~ϧ ̮݄h7ykx!Fb`65q2R2 D96S0,g jZxh#Qtݵu^<{4"s*NYi+9o˽ŹY^2ήTҬLwJQAi ym΃wOS!! /,ӫc.[mMSΨ7*VC:cEDjY+TyȇpoAƠ S*@ӆL-l Rñw~=pFٸѬ* ѽ@GG.z&X@tEC^qׯ1-4tu㳰ϯ^k$7jVqh7ET?*1U|#Sv+YV.d]4\ ʒJlm9:z}C2RN -Ր2%$N1ŠՓeZVŠX&^RA*Kr8"%Q4%W.crD9M9(0"hzcHE5]S2P61~ee7oTȂ $.b,[ƌWZWOpcґl5H 6( QLS*9*sb`nm-UZEe;$M9]MF0@C eGzzs%I>J2@ D`d6LU IE*jH&ŷ-6gз&[G))"5ļU qd+qCC_)j۪RKg+GV*ZV5Rʄ0;饝ँ%LO@1G" jMPRZU5$$%{R/9r!ݲf r=rk9Āғfݙ0wz8wL("Vʵ[ "% @1"o9WaȾb1/T3N|a;e,Q6: L"=D/n2%%6I 5TladEKI! (Er:"6PU%Ɗ$""ŤvwՕAMB-OfBHGn&WPzy]kX JBh:~T P9w?$(nhHݪ paT]e*gԝS rDt#ڢj*&@unԆ07a64~l\!|*UW}iJ,Q6 c Q.M6ͩ2f=^4 ) PI$Gf"48 eA$$А}EH۲!kZ-BWJLt % ©l}_y-?r3޹NYkU*mYh;gjMSR-ԆYȹΘ,yY?^\HjrnAeLA11& H!*[I6yL5|Ci]6÷X4QZ((0O#HͅwK6pWh:n,W%`rp\T78ITŸitTQZ;cbpУA9F w~m@ejZ՚丽0{1_;u0hI2D`Tbؼn@(&z'H0pnZ-bg*wF^۸>tڥ߉H62.鈧tont4s( [i() (t"Qoy ðQ!EFqS@b$%vMv\银_a.)|jQZQDJJ: $QVa e"&"Msf)e^*n D뭵I,s!o+ #W4ӈ!Uѓd*DɸS*4**F}t`٪KQSIG5VKcc,FLp9p'%I'O`ͅKjBMS("߲4nQ&E# f籅rg1-Rt|s c:h0\" &RYB1zPU@MHÑ@QJI':h9add5E3I҄`I )>f+8uK16-E(:i35FFq\{sUp$jUG(EfzhZ[vf*銮xT1N<- ͢J Xʺ#l +y3BU{ GN9(\ؤ_#]5+)BAbEUptQR}6Ta" lJǝhTȺL#ET8+A >ה[OˇCYjA-W)E24]VQ.VƪWСidg/6澥D?#Qh)ON"_I.MR-TӒ"„*Z4"!L,vRtհҪ-[+;XWlX,:ܚޝIsO{0wF]Q3]v cO kRa9DٳPE$H Pm$:"!e1Tg 㗇YD6v̓c!I=tpH\YSsE!t.[syKtj$H5",ev #ҥvTSo-li+Go)Ffo/KF#T1);4zzi: v^̨q &H =WR6IiJaZFRRgL$DߌQ3t#>H}O; pOsxAƥ|s$!JbRl)"i[7d!@)`][ČM UfsWWަMeBi5^^5zGM6]u4h ʝD\@OIBY̭5aT\TʖGVKl ړy,-᧥L!)H9IZKP m]UT䄫]  ڸt 8GlGhm[9U>]=z/$JOGĖhZ*A8IK$kW?t_4yسiʕ˥"L{*zon*S}O0Z&h5"I2TPnTinPľi]KHaNMssdt1ѺM #CI':6B|P8.JTCbɊ$GCM4۷d0lQIJ򬣩uÔmXR5$ UF`D=I1`UV2.xF+0XV6dd)Ƕ*?Լqzݼ*I(u][R;AnKpkظ:ўgX^>8dz@YW*98÷/.Pc%{ H94̄/P6*j9*De968c4)4yK)IiIZ~P BGly!@ 4Q*#to4h&sF]=HuJ7TGQS%BbWqf Ґ]&eTteUnH̶e( ZRʴĪ:Z%\$)%MvL"g2=*EUV+hTUIOa. 䲆jTR  U:ئ^s3VS"chSyzl*.egdQ~TtWN̨)8Cngɋ* =@\"TJ]qlSˠ,)4HkeƝ#g.,·29BJE_z0&{U1O#nك|"DsrŖBz ^>iQPUA[Itē7BM%Bmu ym ̲7i(W2M*/`GiW3dE@0d; j6o람lIJ1M'%k"rx"P&!qpI2RB*K!XZ]Ah5H $dP.E3ɦGPA_imkJ}Yհn/% GP&F&Je蠼%hb a9@1@( |`TsXL&õ\F! jrEԛ`RTYecA2]>fNRj_2u|ԋyy9R}%)$Go߽rGUçnUw (cUNcD]zj1Vkǹd([~$TY)&R.v*;rvShQ:ꜚ G;5ҭ4ZIҩΠ%KqW$ z 3l݊_ -hGA $Ti` #fqPUD?L5FB,P^UY5ML!" 3YJ(R)?ju:N\}1r֨f+ KM'3ɔi3Gm>wj֏\,VEoSIrV9S&T1bRșK$+q.= L8$M2Mi ӕnkrkRK$7bPH7W4*k+f20rN[xfEijhf5;^ks^s+T#: ' KM9p,1LcKTvL 9oW X(Nc3YE浄o*eC(v aPKE]r(mC,%1D}hC J%"]&3&)Z "\d>%8SH`S{_MS(R6 }9 BKd(jBr̅fbPP&8Gn=7+r&4^5S3-:xa@nr NS(i :&`T)HDj7h7GQPLreUP TPBk_Cn%D:ioT`ChN2"`0x-8v] $KDSܙ5{:T42۪c$NFwn@5Mܸ@vvBaл ,H4 .16JTC2)jc[a$ؚ㨆a*:IrTʹ{#(:qAPD4(zLDa(A0aӔ1;#G&(0-;+1MlFf}fA!GL.1l!Ha@ǜ0cwGI 8G ;_ˌco0 &1EsR(`M~S K3 QkSP0KdtONj` Cw8 k 6o墍':+lkFt'=^N{4Bm6 KjiR0iG1텁3( G;B>_=&0x`#0 :}uC TߎT@aCaj!szHvA(B0>DL)n>fju>ui*|^BM!:V㘢4P0*A+d+0hPd;%T6Dɦa7(MMhv (r.aj"?!N'D((¨N8_Bjf @ 4C=@CU)* 4Ε^*Qm@v SEIі'i(w5T '9T!qg04d@|u\G]LeyA.TT`](5A`150}aj#j>BL6uwLR@7b0SxBT:(mMPH" $twFI--ɡRG ]D5۴ GyLRD"BRh*$n΢QePDS@048S׏`;dF7u56_C QlO&"maCQ0`H4 ij +L[ܫ,9(dMTt7ekT;:-jcm 5#HP0BtXD: q ô TLalɩ`8FkcCfLD = mɀDD(m6| FH@vw]CM}Ɯ8_UM)癮}>cj'?ѨfOm3B$x 3Y X 46N;`u )(%QCME)![3k$t ܅d+AAzbW1KVF*1\5XOd:GТ:0u! S)jT8GLL=cc$RdՃsAI A(L]DG96=z-!ڗ]nqCJHٖ{wJT8N)Br:+=45f2[lTl)IۺJ gpt( IΉLGk;b rT\n6݌bˏ[Gj!ZkR+kxxfkZd.? Q_D3T™oNb7Q6$ƒ: f%#b:r˨q)@EBy5Sm>[kQ9t1Lm6wj;69dyrͩ @%$TVE#.Ġ,EH-ZZh6[|֫ $iŴis)ii9`OB!v~m HFbQ FJ-e c*b5"'(Oo>`.:VG:+tum*͔0t}X$%kB?f+Sj$n,;`R.,(MPQ9)o$7^UGJ~h^Ffr@贎ٍzs91 Vk y|XL*Z5iv*W2*zKUUד~ET9&!piᏬ|D ןӏ! 00``A ! 02Yz%jioORػF:pJ:JWwMӉh̤AmCa[M{UB\NY*že&Q|.Wi Kn!Od;i%FڹdټAVںE7 6\IvTItHITU)Q3)al {ldoHe)R١s r뚢M#g5 |')}oBכN;7siK1Buk9yDn^ezBQŋBte"?H`uvU!6*ftT ,[zf[*J"L)YGcb] mikzZ\]۪NYl6VjRՑBJ=ف+D"Ep` 5b?{"٘WɲWPt*ͤ;qDE6;$IDRzgc+'RAn.rrlVJTՍƬ wm1d*YG J6fYu9\ k@Fϥ1kF 9c))[ޛ^JÛJXK2S3))eu[8NΗ:7$(~im.%f[}ܞ۫ bδKyYwlR_1 NАZE0`9tdѫTPnգT-7E2"tS"HB& B"ė#3d(hR(t@Ixi.>3IaXm)Km4HJ! JR$ eenZ]B h@ BBR$R!Yj~v z択cVvs\yGρVqClj?pPų5% PuZSpK3jU; vQZHLp-=/QXq76m⟓S~"EB6 smvy"jP,B^v혿 QJ:T 8Yk A0 U!Tƭw4l^ɓ*My@==f!*1`iwrEd] owƭ*V MQݻ_e[grb}qbQ1aHE$9X#05h˳wK#-U'е{z4BY7p1"OM$"I=5vP;U;8್Y|Qt 9 Q AZ s!湝iFt rmAg,--ᩮj apMfKYVDZ|^Ij>R|h4Hw9rHd\n-9mijr/%saZRVsYŨS撏32XGEQBg2KS[%gsHj&M8VUӕvp56. +[W 1%W6)RužY7\wlP},#'+*i)CrљLGT˥Eh.e/wni RjpWQl;NU߱r XqcعF)76vr[3 -%s/n3YzttRvԲEH@c"hĭ&4{(߷;Wg&7Hs4)9M58g^`Tn򎪧USJ 24ɝrnx){M@+#ohNh( Ix0o![0Q(SqZ( &o%tGJŭJjº:OP/*ZZ܉!U' J-wNMHd@u}2ҩ=Oqm|̳&«eT_1]ibp(dsוuKOŕ"LUձYWN>p =c @ h\Jꮾ0OMTRT}yn9oJ4t컆bYVs 8& Y6wnOSfVN:"WtE)KTUcMIzN$i f܌Q L"|"bRˍG/TFf RgCS&v)c`' JuC~+o,EZ\ p`2 vgf$95lr;tMKB8`4\T^mg0uT"zv2R[˄i7OtMc @אt?\eʈxєXDT1"eB f2e^┯)(tX%2r q%;wOR] bɫvAEE.t3:r%Or5M"^;M)ehjVa*(5n*\.1E.v:U(@X*eX=ĢlݬUקf۵"R0{OTSts誆N8]lV)Z*xQ =#̹G֑ 0RjӭQr܊8AZ$iד ɴM ,]-gRt%XW5ƥZ@ h(HB8dh) Shs.<= /-%O>U+%\$")k&"R"J` G]΍u+E8r tH,Y9(DE1n@6s9! ѪVa)w qED@4݈<>lܡki(Vimh% (ԩ[j])TS5Q .=*ʉ X񑮒{ojYt ipUPʞ9L${=E0o QZbx%ZUq\u] tSd"Pb nU.)q[Ų4}4گe 5(z&{t7[Zr`-Aq!0e_b5nL"l5}:CM#'vF Of@|GFc;#r1,d-ڊumNԜc3EFJI0L܍ђ"oPI@1Axb=峫3w=JIZ[m&*ዋOM–(O19Eu\gv0hڪiRHF%_K5ӕݬQ;3fnVnU?kGIqA bNz-8jQU4sYEQL+6biNeE1EEߕZFK/VMr%ٰR>ZV\<4HG odKcӶB.UJSg|W3c#IQ{}ljd4$ݨG( w&M%5 Vh͵MM9Ho3q鋉&P I;AݿꇶX:J! |dNHKO;B[1USjjE4T訝 xu Uvš`oܲ^dnTcv)֩~l:2 ZGfϢP|UXȠ0)Ի*5#+pqF=biy^P+\uQQ>Y't;uJFmԽIzN*ƺmm5\SS#QZh'u$)T7* jIMv8:cRJn80`jvyN~R,G Q a`&,) ՍwN"ۺ"kJy9S$QUEDMy#m8|ѾO) Jڲ]TF5?AE(Z4LNPQjgM~;Kl@[Kqj:^J:"V*y8ni4UbR]MzU5o(jZOk,jsAS5-Y"(l@a&uٜ@5Sy*Uvkd,_TR}DcᨉVMr&0u U9Dv bSf,\] TZT;B^wM:h9Zuf~ иDWP ikp]KYT(TaDR+,j[@n㹧6v(ƄzB̛ͭvV~iT;xح3YH)pXٖi*gwV (U @NM\#G"IZ6:DY8NQm9Ivr}TUkT%EoY1@WQյ!tQ ! x+E4i`7n  B>D:.qτ#h?qGnקO`3F!Mᾯ#wpc鋖O73W.'{˞\ߑ&<9sv;=_ CQYQ)0cX0f3)sTV/G%)MZAh1)v,3 =㰰N^-g-ͧb,V7w/u*P]BUvZcWHOQFڋ%-12f+wQֱ _մ2m\{9>w2_r2}om?aи∬U+RG۴tى^ DαR *A#zHHxF{B<Neu0sIo)1&]''mf?!%iDUU\ɛAhHD F8GS)hYg1hđPLɪ˺YU\7n T (پp%P\CM|wyN8C.`A ! j_zobdyz8IJz6w8&>+Z}-/G-iNF)Y4!i_7UWYw2lX{*u@muD unUT XbM/Cuf̩kisTU-xX4Z#;~ 3‹gl٬r 88Aެr\Bf=do[~QhJLU[PJ8EJMӗ ejimB P7puzu:\2LT9W㘛Qsiv.-OՖO˩o*Ԅ1-]A4T TKGHNo}=ܴf&үDWuIyVA#muJTjM͋vfErP9y]Ys ꢳHKybȉvl*p %t@a5 RGQCOĹL.j9sTu>EvʙMTSTPSRՄZk#lxӼd{MJzԋf+F=K]\j:i!fzZ̮imGHV"x\ZIhMiV&ʬJTpo. 7N6<儺kiIR=e2h¹ijgJ:eVsU Dt"lνf8b3nr" Ԯp`ArEI=cMUHYDOJU*Hş(ZGH4*K(A1IG]8ad˲rcĦ 75 :/эi_%8YwV[TZBT*]iX JBAҋ;ot9dm~n!_+SE([$-iq!] HqHZ_K^ؒ~p$ߘE.G:g.:Fեn%Dv҂F%gۙKH4b(DU؈`6]UnK5> 2.ďNS0`S0bJDtTP pF%q%qUDjYg_ϰrYg_ϱ%X0F%q%qUDjYg_ϰrYg_ϱ%X5 t5j}?j}?IV !fa>fa>ĕ`j}?j}?IP#zC\!fa>fa>ĕ`j}?j}?IV !fa>fa>ĕ`j}?j}?IV !fa>ԇdPE}B#WO?}O?}*"5y,3~/9,3~/ؒB#WO?}O?}*"5y,3~/9,3~/ؒB#WO?}9=<~"džq%x0F%q%qUDjYg_ϰrYg_ϱ%X0F%q%qUDj 90v~++xنc_>ĕ`j}?j}?IV !fa>fa>ĕ`j}?j}?IV !fa>fa>ĕ`j}?j}?IV !fa>fa>ĕ`U⿖zҒS̙A;C|ŠKEb=T2}J]A1wt(uOOC*JH'Ps$,ʧkO8[E].@%D D7BapRۖZ\nЭ+5iUIjlhT4g"(f\)ȉ`v/i|ЙO4t.vZmˉ/+WźyOCCFE6,^sR]dpȼst{uf6m;BTPhnVim 4δEؒ֍ݖKUqmtI&r۰d m38)T0b5׵A{ck,d)j-mE\j}#2fпdb\bK چ_sE6idM巈VҸp2Lеt8ڎyE}9Iq#3q꼝7'$ah6xݩ^ff=s9,|c "Bnb(orHz=1-_f.R*6hDž"gD E8HP @@10~̕fQe%9̽Kk[jSYaXh誴[lu8kMJFɅkgrFN# /+.mJ%Lö$XCۨ$v a4MLJ) YZb+1jv4K3z@A{brR+(SHʘAn_|u/>9ꮒ']Q z|J'ER fA"Q%rtwMSpUMӂf펲epR L&0(S(m($)@F/${ (ҳJ=& cԕL3;h:cu"gez6wrvҬ&Awu=1*jD,cE)9"N[;5"%HUTMDb(1Gqbw~z7Ժ٩ :E:A&ɰcJSE3V) GmuLd"Ab1,d˜*=%f&j!6Ւ{Dǒ"Hv F'h(^@2.s1bEUy7`ӄZXm*HÕd>eӳd*0`܇))Hca\0ز?5åYĩ*~),ȡUƦI`q2jSOQ) S i!  ծs}ŭǡk\Yv O+Џ$ J٪b@ e](E3 @ "AjϦ" NɭE>U~ŶuQL9SLcCLs?~`x9Ok<qv" \qu3o=2ēy+Vy@L:c-\97fRIvs&Y$RtAgȾ13n V):Fjd@Oa"oIS(d~X&>)SPu-S,r ]PW5aګO@@2gѓwuT"P2,]L)ENgxic3vTuWCRvQ II:? ]V4ف7e;sv)yZNMPVCD}2)5 V- `9ȑRn$+`t#ڶ xsmbײOvark|s#g.]E%VPֺT1ZWtORo]5*S,c"SlfcG}3|ū'rlZT04FJ.597QdU*mZIGdrv22~U#MVUѤhuܣF fnpkɀ &@8J_\KEk.tZIW6⇬dg536q0EިB% Q\|ʶ}{W\eFRGQi*ŤMJ2N32Q˲*20Be˧h=!v B 0a0`  B 0a0`  B 0a0`  B 0a0`  B"?4u3T+TzQZ*DRHdL@LQb6.#hI&4sg̎W택z@Qs)a(` tħgk@_ui;%,!~MRߙ%-`/哚!蔴崔 })sp|k[.'ɞ~=sG~Gk`-D ?Ǯ?mFhgqPGOG]4S]L;ڂX@IKJf]9I`pۄQDWv /*d&(B^ |Mˮ]diabenm͕RRbF1v^Z]Zucȷo"wMvGyP0ː*K_(>NR)LH !NT#*T vǍ}#"4O_{mY[ ٳVmy-W7yGjYmƓ#'"mqi- 񉮑M' )o1dO6ذn 뒓6oVͷ?e4 =/찶0ۨm)Wd9$ +N蛹rVRG;0rPRy=MCIOJd`vnZAD3pDafZ;*:5 >bU LkSJ#rRF.p;ҋ]ǂ e>9Dְv6&j6t )dFȯDX~*Yb!dܿ}E)z~=C$UU2Δ]3U65>JU$]'-[B-Yqԍu$dF]&ЦePrMGLѓI: vDKfvCo^%PyfJ~~hs*Ze#n$?Q$UE ]F<ܖyZtlvz) Iz昅-UEfPZQVr"UFƹw:9Hfq>RǝmVEfֶV6d9An=nd:VPGm^rFWep*xl2rnɹKgʴθX %NRV5=ϞCh9QivZvkȑx29OLh$#)S]VjeSwд_fNa/KFɵAs׮ھd".EUr".Β&s0_*B.=;l4Y +)He!YH拕2J6*%]zf$x,V,\Mm* g~)7TNeL!jm-%=t.l-1ܖG݋-*޲m v.rqgć&]E)R\ojflk,eǦEr~ۮ4:YⱧ&TC37Ŗ!ԗQ֖ZMٴ89ym.-GfO$NLF&J|2pNL1*iY.zvT1R˲#x)yԬ=B3eOFGKM]ZTZˆS!WϵRxtʝa ֎t_^Zosa.51vLLS4r-fbI6I$̋vZE+1J& ^6Y"ֳ4Q57#9%>,-7%;.T]A[n \qq[Ⱦ=d&r]-Nٓu.d;&Գf+=gZ2Kfem@m€)M|Dznͧȿ.7ޛipr/v )W- AձڋQԍIUT3s5D3AA!}AKVh&5uWԬ"\ۊ6$[NL=gD\7ar#MghԨC֧o29K4M_jL @gUQ'q"Y(TdXÑE*KٴG"qòQv{G~c.Y-UF9Iߚ#Q80:~M#,.v`GZِr u9oXob0Vj)yV.bw&Ev*(]6"`?znͧȿ.7ĉ+[k+7*T-"۾j&\԰EEi)."PPan`P~}MX;b[SPfh"IW)2:)dTp0QB"߽7f_3{)Kg r#s_C016)*IÚPTUT3QPpEv|3ž˴ M>m*%5[Z{[y:aBD7Q^٬Qy (D=˗]Lt;vm?NEq~ݛOӃ\ow p_W3aߞYjS.U4*S"h1ELzZh4sTBQ_g#UOٓ-591seX{-w F[rn3tȰLP1F4x܇Ddܯznͧȿ.7e&|i=#I^J"p&a4E1n+cִtw4zgQ@ʑ4 ܖWJTsar+e$N0F>Ħ 7bʊܘ"u%@@MY||dk^e4j5eV|ӵnTQg H&S*0#b3LJe1Su˪)jRXֳ#BBR^#NUwkF3qX8j-t-6B{:seP&$㚋qZG W?"ɺȮU9U,0e@Q"P4f8#q&TK+a  6TKm˼T+J.,$]a *GR:u%ޭ+ Q3+)kZ񄶙Qvj/*h)KG-~݂'rveڛͦI-hEQTܑF^.'nAdQ5 vRVsiEX5Y g!5WX1#zq*Uw"tSS5WJvz˶EdV*_0rVjdd o1]]{2kYYܹgIU1M; q }Uu [l0#d_<=ܝ1Nn-7+Xv{>fɦF冉-ĊB"jq:80yhqͦd꼹G nem:Q>پ=8¹hD[H;P uW1؂venUޤ**Q*BL'44[kR*HRBARcܑ:en %B!,v_M4GJJZRʕaPS.+ ]SaJ J9hfF7TI ,nfOE/ NWtuʹ1JV]ĝqXQӕl#OeƮ7QNd[9NbabP,CUDͯV}:Zd,R ߵUDJ N@fj~0˶:.JEA"J.y@ P$嶔_h~l`Jmzib&E2YuEso0av%+͏dg\0egJJ)ubi*>;*H®x"nLL&H2[>EfVR?@JF3zΏe3棏RHe梅3.rz:WО !n`әͭ΁gz.#!xj {thb/ I[8eYgh$9*gz źl;5Ỷ2Vc|EIPUĤR3<{*%@ Dwv+2E=eK_D\ɋhn(8Wl/"Qo EnDfb@I& ħP&*fpĠ & "qn !s؅HV]뇝ڪoðIZij9ڢ`"$$Mtԍ6Q@HB.v; 9Ⱦf |۳ՅA1E} t&"hmHT e5EAks5QD '/19S7Q[]QFZMj( viXJDw ڙ"̭\X:%90ۺT֚6#*@pM_ِ|ۖk*ɨ( *sB0aE;tEUؿݎ ]HZ΄>rWp5{}s$[FHĬGE*kr*&ٳb7DMEm]n(悷eM'l9[uA'13QE) saPpa0`  B 0a0`  B 0a0`  B 0a0`  B 0a0` lwIbcYӦ/EAȃ"~i Ǹ24@_$b&*Hg$lf ˇ gF{>h[{n %jH"V.9QgEWhxWQr(5h WmQ9Pjb,CQa׹ 5M-ˀDLiZ4=1 N)j,^0(&9hT{Pg̒%ԛ]˦㉲m6j֜~Ҵj>鲧Y}lE-rқY-Gb߾Ue^=ka;"vܴ&mk\ݛfaXMړ3LXv32-İB<6`hV1P=`NN-h>US^5qQKnֈMbp$V:i(fGliiYX-5.#ѥ, ^hZ51)Ze 52ʜ rc!GN[S̥#Y&CWQkj2q14] -  {'!2xtިv]g9$Œ.|dҕꭋ 8Sr/魲ғR[jɹ m(E*߹])J=^ΔPƐ"ԕTQZH|YJJ+oJ[ Ќ%;\zY:Z!Zqt `6]Xu,5vҋaR!FəJ T%Y*-հҩVéKtL'nN"*:AGm\C=ty:)%ȕ erߋ| krt:oTji e Ba QmRs (JLB]=#pK&[6̕im6])v,FbZ--eZM]T)I j|wvRypIJLFxC% ba Yſ2zEb>Fzvmd0IɈ zGHvbPEM4R&HPA@^aӯ6v> OJ=>h3iX30SRMʰܬY;%Lj̮e$Җ̔ RR2)A9vR믿־nY9Rs"2S2^iJ }PYYrQarF䌩1#m5`ճ-bɺ-hmj2ݳf蔈HDE"4!HBMij(ʮۙ5I ).dd* \*A012olvZ.n&&MUlN*$)qr2{8*tS)Ș`$yD$?xaL,ͦ2u4+F)8*ḇ̀1Z%Kem' ֵoC]Jq_m[zbҜdv( %%[2y4;Wg(}kNTLLʆ)5UQ̯2Sr #& 4jzrX'RNFuJBelUQDݲr RXPL>ɃqC;Wvv¨"j 94T[ի={*]xXȹb(Ir˝Ҁʆ[-|#NQFDzoKwHB g~u7Ӧxz$ w:@DG C7rw6Mܘ$+?M7)ϱ%GK#GFϳ$stsmȝ@qMˍ::=Jgr+:A)LQ^3pY1$3 R3(h`a|З&  's.*OVGȸrVK'U8Bv*$IDI+5Aq{04OZ:jV}TCWJWEA_4W;QV0;)Q;3Tb";)xGic&.&9j.2nFGQL4zJnWs iÈve[ 5? KӜGǿD[ݬ[-hZۋ?<청W^rI ].kZ YitY3+$;S@K&iEjn0J;Iݔ[;BnOaRJRh3 LDt x-s=-ۍd\Vr%x . %EfaD.C t5`et\@ *\×_TTv$!E6T j!ԕupn'/Ny ҡlAv#dns=.TUxZ"1L.8*֒»-zuCQT-[B6M1T;M+ERp1Ӑ7cD:*U}xI/zbKJ _aHpd o1]]\g^ٛhm5E c+1\)EGCV'tq3( Aֳ *fmԲ*qU =q-,۩b]8J*tW]2ؒ/\;5V~˃G p{h0? Y}^nzw{[1z٨.wf|\=ߴWk[]7{C> _Pw;Vgpbp{ zóQ`>\.?+V_W;ޝj+35 D:8\;4`5ݳM_sq׫óQ`>\.?+.;qnw_-;ӫ³;f|\=ߴpp~o\G+V_W;ޝj+31 ^njXnz٨.w(n!no梳; p^@x<⾸vj=l˅Gpgve*۵TV;ޝj+31 ^vj=l˅Gpz٧tq5m0 8a~c[o7mo* Cp+7 <4᥎:=p{ z~c[o7m@U/\;56޸=p{ z~khqkw Cpp~o\vj=l˅GpevJw8ݵ{ӻEfw!G p{h\;56޸|2_ezano梳;f|\=ߴpp~o\>]Ҳmt07m}AQYbóQ`>\.?G p{h Y}^n|zw{[1z٨.wf|\=ߴWk[]7{C> _Pw;Vgpbpe|d?5`C|. y?NݣXʐ7me@z>Nk31 ^vj=l˅Gpz٨.w+/MvNk5/\;56޸=p{ z~khqkw Cpp~o\vj=l˅GpgvJ֭thCݵ{ӻEfw!G p{h(=nV5 p2YOMc\۶"gbp{ zóQ`>\.?evJw8ݵ{ӻEfw!G p{h\;56޸|2_ezano梳;f|\=ߴpp~o\>]Ҳmt07m}AQYbóQ`>\.?G pCWk[]7{C> _Pw;YbóQ`>\.?G p{h Y}^n|zw{[1z٨.wf|\=ߴWk[]7{C> _Pw;Vgpbp{ zóQ`>\.?evJw8ݵ{ӻEfw!G p{h&RqجmMɶ4U!Oql]NV,5{,)v;E˳]ITOSTPtBRwĴL/越*9eO}6-&~fUƚR( ^r';_O%𼟙)bC|gZi'Ո񼟙)c;}կ9ϑKMl3)i4ĎZcҍ.H{y_lw{6 rE,kD:ԣ8lRlS6=n$7[w^."^בv]3 ,3%4rJГu$)>m J>-GQ`neeNjH'?Ay,eQ]6a| A6J-H²o7xǣad~[/ķe#kQx9-tA|}H-ƬbtH՞7#2zD^Fa򉿿 kV?1 3xnjw.a ҋf۳MSRԗT J"F~_Lj g{9znb-]i雩|eGT[>^e+jYR혜J"ʹ1DŽ5y|~H+𑦽/coӡx𑦽/c45?$p0<$isAX5y|~H+p0<$isAX5y|~H+p0<$isAX5y|~H+p0<$isAX5y|~H+p0<$isAX5y|~H+p0<$isAX\Yw/&#UZ&߫YY8@ L(mtԧ(0ax[ٯʼn_px[ٯʼn_p&ݑ- yNaEoxf :tLyb1~M)EM9R~uFXNEcd Di˵TTHACspYn5]ۮJ^dY"+MRTSM3C9i2/?S-NZM Jj PQan[ъR[蓼(ZA o. t I0\t8 {5B+ᚻC#en{gr\mznP2i9dlPGpce+ _a4 {N4m/UVquvNu5I C_zC_bm1ONB9ox 9fեrZR^^i 4rfEE=8U {&q{r[ORqp=!ѫKLx7V!U1y\l$ C)•Pa*!Smʒ ]Q!:j<zM0=8 mϪ-vⷵS<=Coj(WKntTcAE4cQfjiڍ=/ Y e+q& ab`ל&IDb hYhX ړdτ LN rw9V+\%SPT:kua"/E#n-l5Bgi'wjԴ(H593T2hKɶ)d'1yeQɴca GR%sDZΘjZZJI*E+(L\!LD<'204EN*9b2;NeWy"5T;0o8pOX b:Fě,ʈ`Öpyji&BLvO9` !uÅvSu2䘷liR&難x$(ܑ2NQ ]:!CtyWʛ6Gg唕+ *UpP;V !JQ͵VJ}-ABOJ㧩U#*JBZ2Q^MvP ;P B6f{Vi_=X̫d=ShqICP Sˉ)IM*APtj jcXåĆ :(\֎S]BC{i+1Jua/H>J{9n* vde=#.Ve C05#m[^v]ggZq`6\ɻ*,E2YRu\y{ӫ'U$rZkn^Е?U Mg=NUN =88n@ ԥVV([*(G+yWi ,mHl r8L(Xy1 X8{,v7+ f8?P0 =tu]Ko؎C0CiuiS ) J+SZDNS2%8(+֠Fɤ<]qst?F>^!G[+zҵS`Φ̅!TQ7qIN4IY_KUK L,r bS=#BySaLR|׬-T У 4ݯv_`0`  B 0a0` tWݮ&5ӳ]3Jv+a|a^cmE1ƗVR9d.C&cI!CF4,P!Vpb#9Ǫ$Loq-KSVά=rniZ%RO*Pl3:) PP!^T:W,y%)IK (A%IЕ @!@eQQA,>Q @)IOV@U(I\Hht}tx#uq,U'6;9?xԹnmMSkWnP*M0DVRQ=d1w[/o{*|4eSOJS!YҡTùN h1]4i"h! 2uPBRTH΃I Te6(( Dc Bv8ya#IՍ_ 'Qu!N5rG!fL? }5m#pVJ NRDVe 3) 4QEE PDr@ /#1J 2՗:1AHX%@wR%sQBU)@ !X]zQ⸎ݳ_V5Oy sIRt"1HV.hE2+1m8eEtw6YQ#VxK@= +Za\ *mÑyxDVFZQd/mf?p V\M:M1@ 9PMs&zY@iEHU+S!ѧQӊum&ч4||C[<}ckAPn8h.ʂwJ-¸0sL𧌬gZYr뚒7XSKM$tTjKGT ̅PLrk5^]27n)'m*aa;BhoؼlQFO 6U,(s HI% @f5Rg2 55+2(uD G8ay()ȒzyQNe+e~K@r(@^RfV1^8XRWMVpY&']T̢%B5uD(6dYSl%>Y4VN0i^%*$4ѝ !n86?p5Z_}h0Z*֑cQwUܷn. ( ( OhwaАpZR *78tC*$\XɣbB7y(La/E򖵐ݢm0R4*RM!K !R*(1c1k8ű.2W- DL맣L\0`\ ߟ8>Jƭ{t~agk@_ui;%,H~v4 e'VKy?3mR1"Vh4vPI)}<0f fJ_>;//.ܥE$>E?.rd Kb &rm!h¢[X <]BKq(zF ճo /\e%YL&DӋ7n`\E_"x \_*:h՝܅@5v'.:-7HTdT,)ZJ",`A@Tw5HM ɐiBM778m `4#FueFZxg,s IHʵDNT†)D鉕:`;Ժ\<}E؊xUz7%pfvQ](MGM"$Qݎl.m~ogU}G?węwvW-?O1_d?67d?67U} ;L f+`'٘Z c_˛_c_˛_~F&]݄3OwvW-?f1/ͯx1/ͯU_dBhs٢V5%%IW-y w KT Q6jG,b"RJTp);1rZwV41\5z4a]X4Uh,pXFۢ$ EX?\T]ыB{nTDUzEiUDYHU2MV[ϔmPIN'|˩;{ցFl]CwzLbPCrA88X!Zn]fF_)=áyq,%g0jLC:_S(i3݄3OwvW-?f1/ͯx1/ͯR TATFD#HR)R%@)*I( Q$xecV0iBjj@`  ' H\ɔVn4VPO" -pUN ri vKcsk| vKcsk|N'&h.}E; f+b3|<`_|!Qs|Iwa>|"l݄3O vKcsk| vKcsk|0/W>9c$˻fbi6}E،;%;%Tm1eO1_wa>|"lFo\\ UO*62'٘Z fbi6#7l.m~ol.m~o'G?węwv]{k:?b3v[eSrDtEY3_nD) @CP%7/]|lcgH#6-.KeRn uPECRLL'G?w@5d ˃CdBzq6^,Ÿ;ڃ UO*6rYk@SN9DDF`VD(Z,TB@NPej[`pcZ2v"3. UcMW(g!T ' R5&^ҴFEEW.Z8\,EX(`#Es7(F9Xm_18 MMHЦ֕i8,YT\F$)M4h4kˡ2_!=8. ,B{_V;.f- til+v-\=߈t? `v)NR)eCT&TU_dGj9c$+ `5hYUiY?5@ o1]]|5H:w_8Jcb[RLFlɺٙZoSZ[NܔUR"Q85Hh*1غLVG}Vut-y;Pڳ%-7UM]y4fIʋ$M2"h !# P$:0wݸZq452'm.)Ɲ 4>85-yݟ&eP\qm2BY'`ƽQf̃NL%N%8@"5*DCFv>/*7RQVS1s֖(IR$2) .;Kz+eOQ\dڲ HdUhUc[Hʑgq8갰V⇨$(ݢ-/+?-1֫FeU6Zq^$SmkD1[W=d XD G21tꬫ7#MGT助e 5k9*! mm%IZ4W@Ҡ-IbD=bQ)tJJh@$֩#םwȸu+JՖ"f]I3vITdGK2.C%T)̘,ͿjVBgCWhm;9Q-q-VYgD &+YzZQ;rԡ|Tr,l`٘)"e8P eҗQLjxfqQrCZQ4)G9 fR& 2)J4U(QCidZ˭I:T:Tz# N9ޚ@c:Y/ zTQROY;&A)8MR),myK{]ھVB*OYpەKg͢Tt` "r8&ݷwVȕ}LۙvYU;yå\, ȁ[ (`Od '67 boqU/O[[{y*{SKD-QH&nUIÉ 2qI'L7零VJ16趢/BEjrsO'BJD*SM= +6CT?vVHT:mf0les&%}:g/^SjV*'I Py=p`{bں 2ulU$`|ZdlJţD5]s;*꤁|siHJwui.SɘPYJBvՌlЍQocl۷pޞj 5w:>R/㣏o.}pJat說d]J״RQ5V1Md{IyI8hKD' q:b椔P16()ˬ(U2P2䂷F' jw̓ܔ4a؀h;\:AQKr6KmiRI;Iqb+E[*/TntG"ncܻ"8Hb dVRL"j;Yr]wJՊ4=< 7D;3: H T>8֖ nзjҞkO6McѩIA뚂>_)P 2MA-EXV T.`x|JTQl,RUSRL٭E3FC>W,#JJpUT-TZOхHQd |1 ϕ)8)v^bp3+'.bI%(za ( (J, PS]t;tK0m)ExZG<҃\Umi+3CU 柢lM˕^Ld#YfdV"v5(6 AWNR'w-^KSJS ] F8sHk]ݾITnKuy"$SB̥kj+ JEҔ?Z-;w 6WYʼnXVT`#~Workdl[_;mb.ijf{JX%`<36s1HJΠWNUTAnHX}!aҢF%T,Jji܊R)J҃h &g2q/Uу)- 6x I y"EԜ0ӌZĺ[Rm&rME6m>N.4]Ս5GLDd#JV>*۫HL7m@U[8`MjeJ(p)VٱŻo毺0q(LӱUlzɵMZnp h rEH`9Gdu|^ 徇CRͥ'SS-k!V ^iRRAI b(*-2Tڪ)Uٮ@in+ [Ro  RA#P4*rrgYS8U!w"n]F!q(=dp‚Q!JBqiCm+Vf4|u3IJ:v.47\JB2-HsNtp@hP w [CK8~cW$ *GXtVO1] ZDԕ$4 &=C6ȋ@$Z6햊. :n<V֦&feKdUJ*N]LԴK BP 5FtCP6 { %=\W66YF!c$Ws ІL%e)bROr2cv<Քs6Wnւz9*UxR] 2,sTgx.B 4uiNqM0q K)'H*) }`X%Hm-JHװW8I,T(9`*H4_"ce)4r(@pQ. Pr"S>Ok ʲu#*!k+Ka#YU E!*J@lT"`dWgPIJ SFIEA>[/D vD9U ||6kJWrd*0ݱtN6dNxM:zrJƭ{t~ageIW7F5Lh ITؾVm:%r< Lm v_sԐvY`9y22rY4 $d&6+@{?_Ka/ܰ@L kmC]CPcW0g+4 !-8m-/~|~Z_IL`7;;ge8Oi l E@״$6FQ-JW :/ nMR:ciɹ#vL=!%0̺~ZIVtY<MT*i,W]SZ (V5Ƹ#tYb稏ꯔ[ F xy$Nn8ʯ)w_;&稏ꯔ[y#:,‘4YRʟnc]6b:O稏ꯔ[y#:,‘3ٟRm;nv]:Vy۳]S~GuW-YUqaHϩK۷q;a. XuMQ_(f:.&5$ T4.IkSt|cLv.AH6*oZ6]- bۛvo%h6͑';fZoHX߶?dүIOJ> yukJ@5JE%@)%*Uedhe_ JŽLU"IW{^,QH1QIjf"S0j^3Uqa~\5n?"qe TO!ۤM&)U ȉH/UY>I7L,'n5RPhJrS dLQ3)tF- kܩisߟy6縓D"ƵӈMYC5ineԡu9(=ltOz3xnz~xo^;0B,{PUG&vE鉹TL/wn8o]vV~5MQ_(fGuW-Y#g>/uSvL<]zyJwSMQ_(fGuW-Y#h>/wnݟR^TݞyozEK0w?CQn?)0E)Χtg=7=D~U|;Q_(fyiݻwR﮿zٷgozEK0w?CQn?)0E)|v})zc_f#J oA䚦稏ꯔ[y#:,‘3ٟRm;nv] y#:,zEK0`)|dqthZ׬JL%IO*T7(U3݁btE5pETLLŠ*WoQ܌eť}_o.IZF(;Fn )6L0}l?լ;"FWTEol)aw~\"T@ZVoNTR$qEץ:|󴶺2Hl\$HZI6t)*$Uqc[3ihƱR%Qʷz|+'$CmQTE MD.P( =C7#;ݑfIIKtMAՆr-̻RG'ZA SMq NVV#"ܜK8wTR\I{"[Q@L.:۳a * c*5;$⫁E@I8Gj?+yE0S+1q@G^wu4YRT|  tiJvϐʄsP4MW\4 ^{R֧Yrnmi&Rq^f.P:xtRBQP W/D2ox*.sw}q,ŚUXW32+"T\0FU dz*IUΚ#!tBn05]Eˌ"JB\+p!{\* X;;|S\*!VG9KJ::FCxU!]atY%"EPLZmi* VGʵ%Yl:$R*G⡮۷Vgu-5'ݢ73vh縣IGC22EԁA}&b٤YtWr=!rou)3IWpu=(E`r8T:+zvxDbZ6 $)E:Fqro+ZIdssQC"aUZ-گ A$TQp@UL 3S:?*,p3F[rphR7\&cFʶEU[nL(&8xjњq ERBEi:FRҌ<0cP5?1)9 y@nlx evR`6:*biI$wմzڮB)WRt"eTX uDža[ёijzfrrd 6:BECvç'OqI4ȗPv5o34?+)M l0tjjR1NeUWMaZi$DhbEE4ɵ%[UR,銾D)K"E+ȣ¬T.âq0ibRm YJ1a.,IRʩH3JPR4ŐQJ *S _gU}7!TFjijWO<:"D#Ȥ M cyCutRyn;h[_WgQ˅4vGD/((Y 5H)|]$Œf Z>ZI(ȞV}v0 sT%G*&V6*U.+QеNUٛ.ҩ4EVl49nUt-0H`eRk]##$X.DBŅ$gEr՘hzJB#%m$~ZmHS6eCSrjݠxZVK2g@d T/ ;fvέ3HSkkp) ՆآU1%9N͔ȸxԔEft 7'16Э.u't *wbc{\D.yX(K@N'IUl6]^rPTbMSV:Ar,l$d D "z~<һfĄ*_ BjJR+#-IM$Bԇj8p6<&V5e#s:ySǯ,DX̀ȡv 2L Fuj.7J=ښNT1,XȾfw.QU۝6e )qCGMzmԸT0)όQBn FMa 5tW h0`  B 0a0` fv 7q=6udcS3Q GFIU5r nSfEEM.ztmOW:U" %6֭Fiy\k(Zv@=BiF cWd,ueY;vՋu]pVmeP$@@6R5 kbyzBDTb"K5P\2"c qG͹e+Rȴ= v.q}$EZsT,0(rR}_DL9!D@p39w&IeoͲ'"@ XÈڥ9cDɢ !TapLenD+_D40q(GAt >I&]HRaoac"cpüDG]91us A%i֒żᗙGQ-/HimR3;:C51zpj=dįTv3[CoNFl(:C51zpj=^oNFl(:C51zpj=^oNFl(:CUtGu;RP4BRERH""P+8H$ӍnqӍDGHG)9C" &/(!]JbU#iNGҥ˵lsܟH7%ZՖm-bRYy6JV^y:M]'\FfʽWI/uKr֜.ݪ˫Ul0'YluMC®L)R5%]q@8ٺ?6}RV/>Rŏ83iXV̩ ZV=.܌VKy8Ӎ2;vI/Ir8б-blF]@-)p<Ҝi-YHyCP>>oN G|ޜnؕF{zDdj! HyC@85zpįTv3aGFFPt1ӃQ7 JOqo#6zDdj! HyC@85zpįTv3aGFFPt1ӃQ7 JOqo#6zDdj! HyC@85zpįTv3aGFFPt1ӃQ7 JOqo#6zDdj! vuɒ^U d7 *'PHIHLB$-LbAPS2p@8ҕh>IuB9zSDUpI3*IS>Lp%CK8 ȴ,;mvrAdh9[8C,֜n]R'[iVzw8RA}Y :CTAǥG|ޜj')!v+&}C3=b(Ia?a|~4~}B~tQvy?a|~4k?j̑l|I hY_? FQx)taM ݧE9ZMw% r#{$c¼y5RG` -=CYJDRU$/ANP&5tG^wh!qr ElVs JJh}S]>nآrUFd* a3b:;"MIW ,!rC@߫?=WڪzkVPqQ s x)d@ NTtA(5G*~6Vĥ&Wz*TyUSUSHv0IWvNgyvd)k[4Hh2>kSDHʾ\S@d$+vu0*fRs)JnS,cW⥢Yc;':)s) &^|*S%XJE GA.&\RfZm 1 M;"$#mՁ2]Yp0e'R#k͒ZQ\6@Ŷ~VK*R2 5R@}&JJ[B^53!kdD%YYSpԎ`2eTYH1"]:E %pVtd+ZKPљmB@Qso'kpN)LM#TS32R M8nPU#q:=v@;g}ĺiuݦ)3,+&*TuӬMZaV瓃 đDP'Ga"+\*BP^(>AʻlWsZWil|*~)mG!EC1DMӓ1BS" eML9GESR Iܒ?au*ku()-**#"q"M*"i{%^/UNO4DkF*q2B8╪"_a7(CH8n* EY!ThS *M@0 ç3 ̖:j$U:iz%L]k\ MH)B2X[i2oc7r2y=ke&1h\ݚZܣPL3*!Qj9AwP"fX\2tvd*"Tw%fSOg[sJW毩^Jnj(hښDA*l,+Sz.)kak(Ki$TӦY HJ0PTHH5=痻T;= qoX= pjIkMYøxJ~Vt똒5X?}1vHvљ[1SY,jrq9Vvfbv4u-N'J[N>IerE=oǒ-!2n*RT$VH&hTl-IRUR[JTU@jNdg/?4uJ¯XOPv4tgo᭕U%&kVW-(Z*iYiŔmfͳ@@SVb uo2UIiKi?Z)nuR5;Jβ}ohhafNMC&w84 4bxpclH8ZN#呥@bFZ* 5MҺLAmaVye굮SWV4ۧ15T$X ҂"+IiW94DL)$*1RA="ѳKHI:FIIf6r=%k*64ܕ#Xó&H$U:/[HR8l쨑 5o- r)+mF! ]X o SD:HҢAol@C\RͱڿQSL?RWvꨨ'nD5R##8.E:`\\ʊ~/q-aMUg)q``7O=ww`a|a|" Y7O=6FջIFq1gl>``7O=cVܞC8En0z0m10^;fٺ|r{ue hbٺ|n0z0v>0v>R,drOT(*f CTVER*Še:i3%Z 4Qd]")bd^\N ܐ s6SL`š"),l>`a@|IjVU KVAfn֊Ū.DjTHPYVk)9Ew{*V\J tn y[#).\}AXFC.;gK_?K>oJV ]aRr'زm)έ82qSZbKK21qWΗdtȨ) JrSf2jb(Ιa7O=u%kHZvdܼ?.Ԝ쫈~^j]Ҷeʐn!AIRI(|䝫%+iYr53)7*^y qu-!AIRIbٺ|n0z1{[e/0^;fٺ|ws;v>{,훧f jݿٿ8`;GvF tц3ϻvߺ/`ŝtуl>`a[r{we hbٺ|n0z0ƭN0^jSyA85ēE dM&UcS0"e*(BJ n0z1Sj(JePdaꊼ#痒T$Q",t2 #$s:v+{Е)W3hTč:n4zԵxf&C'mږՅ>]eܫ؄k"I1%ljL k.ߜM j/)֙57O=O{5!ѻ2\$]jjJ ~Z2JiI JB0H {  cWackT8݇i.K&kTQ!17H_3xiբ:4$72lC6+t#]+"'3tMRPӎ$6Wؕ[^fI2nS5L]>e{Pp`*m.Pܑ!Kۍp7{bX4gfMCj\NɍтeD&׎JnyR"d .XMA4$)ҭf\ؚS)')$B=!C@k:3141xf$f({]t箃VM|hm63H8xT1֡-Yn$dmյڶOpi:cZjOJ RaW]I…u(Y,aDS(CyxYQRYATȢ*CA!8 %1D7i4jf97)GӰlxAMLX5MfR8" U:P QuZb\phW@)FG(șNAB%(zd!5j9;FUyjUݕ^}7SɊβpq^Yb8\ *"lr+3ײN]WyKY^B%DCN>X$fB[H )AJ"Cˠu{ʷ:7DŜu4si7S4@GFjIP~Lm銕7N 2(y$&eJb.uE 4IRBNRV-jX AgAAǙL ~UqVW > ;_5msLJ&؊0qsDhʞgP$ .Yi Je[Q&V\:s3UQphF,t1NSݯOQަL n]qYÅgXxX^Ev*n*@7.|@ @ Y^t)7P.ddG3Y@nD˦ s=xR1JL5$A "ʵkLUE cRP Asp!p ˅ljtȽS(MUdpARw %|hP%=fౖAir!kfE)es`orڪjͥ!!"'=">="s]9۔DŦFĉprQU!SUVYEL Ϊ1Mi(F ʷBQ6IT@ <"Eru)C`ԥY]3--bJVVtz PSvf, OE@ҡIPȒ Iѵ =0`2Yh:Lj B 0a4}`A ! 00``A ! 00``AwէuA ! 0)Ͽ\0``A ! 00``A !\~|{A\ oϏq`?݋n%QzcV?i0賵[/:]X {o$?;_O%𼟙)c q얘ǘC9琴䴴>wOmZϠ_(~wBpӯ?8G]կAk! HyCw'lY[O4;M7~ǯ@馼w<7u C=q]CQZ+t0j! R)ZJ) B$)* A Vۉ BP-!IZT($AHHK]E5bz`*c:&=f@Hp>TX'J*(QPɪ:j$g`0 C)0$Q5T,Ȫjs&J&`1L1C(`(A[譐A5bH$ "Q8vddͩ3][(n%AWFݳ4Uds)B9Ʉ4vsL3Z(D^m]6Ҟ^%(7FОyAU6[F+=M6qu CZ|:87zY}D<2`-jʦ,ɿEƊ,>+^=](ً򮩙BĝkkMKl [eF^qRRED *ɨ(dIB5Q1:j&`)S0`@CI7pC@ӹR={QP]׍iRY& BYUtu&*K+J] qJC|M~H(gt!v 7z˃#oy+iN;"<8tݼep '^oz^כV׽Xy+iN;!,i릑L;faD>L!=y'%|4ׇ9>70axD>LW$=ǯ7{wߦJihsH rƭDz|v 7=y'k{ѿſGpWM9:4}qQOa`qq?7<<"Cz|OC<4'^}qQOa`qq?7<<"Cz|O%|͟9:<\juq0|"Cz|Ozw}`㷛nJihsHyC>ը0aDz=<"Cz|O.JihsHyC>ը0aDq?7H{^oNL<4'^}qQOa`qq?_ލ,!=y'%|4ׇ9G3;oaxEכ~{?oH{_?ףa_NjGP1L/hvg?H{^n:~S?xכV׽OxwCE^Pׯ;;OEӥpxD,v=_;*^#ߗʊMGAz=?OP:xE=y+3ei@C8n!۸Gm7دO݇e']4翝o(gwxq0|"?$=ǯ7>AĉWOxwCDC>ը0aD\Psl}}G?PZP'])\ CF(kv}a?Nkg0 }GD CF+כV׽X%~bt_5eѨ!`qq?7|<"Cz|O.'_?3M>ruiyC>ը0abCQG/?}GytxbAyͻO&2:Esr@i(kZq;vaDq?_ލ-<"Cz|Ozw}a䯟9:4}qQOa`pq?7!=y'GpWOxwCCƭG]?q '^oz^o7<4'^}qQOaat/Ǹ߰L'O=?9 {^ot VGs&9F^ZC8(Obpl(t n`:]n[RZNTI#$@$"כ]Jq7Iљߐ ƏHjmP(`:C4 <-z#P(`:C4 <:#P(`:C4 <:#P(`:C4 <:#P(`:C4 <:#P(`:C4 <:#P(`:C4 <:#P(`:C4 <:#P(c)1z;lpQ D)rU% dLIR3t0h Y6t#7fR|sM!yw:-*C)*JAr6՛iJ1=!<Ò-ywP/4P- RTKqּEIX$PkS&%4UM_휤4iP&҇x0"ɺɝTAbP*IRHj&pS)J`0"U59YJqMT!騚:j! b@ >nn VM3dFQ̙d_G n2֌BL%'CFm<ҞqviMNM,6bS75mR۝90YuL[]6 1h)i&D݆THo&HyCP-3X흶YyDtLBM!N].Ch)Pt1T䥣)/=!2(~ZfY<츐iԤ8)$ 2sv3rsM!iwBN - RIPP(`:C4 <'܍Cp[F;K#7N\:w%:hA Z<!?wA *v` ;(6픧;0`Ɩj[ԓv ^Hpd&~hTt2 ݮ ~ё]g%eN7ffm[Hj[HF4$\յym2d/MV伌i 8B@8Fj̔7X07+zqJӌ1Q):Q4(5QF1 & ILH+͏ pQ]z9uTXcLǿbԦYAIvŒ"<LV(CK˩7+ދz_9+'+g<`,ԼQ CKlc/BoR%/mYV5wyZ꒩ m]vT =(L[[`#t *IWպUQe\+,Lʬu 4L1HQ($E!")*ZANb"hVܬ%LBtYUTڝC1zSe qQ),>2ť(QwSb++-;i~NwyKͷ`ގg:=,ۥ+ >r@q Z;G0a.; /b隙d- ej hu d20YePfĀp:}7UBUm-r%vRlY T8De],eQ\-Ȩ%oœi΢˙j~µOXśnJE,ȸ*^sZZnnTPX ټr $lb%d+ :$䀭mumPTt& d %kA^I9'9xW=QUps ~nW^PgPVpΫ{RN׏&*~Rs.hha0tԂ]Nj-:T )OcHHMŝFGL]zĠ}L9@MI$Ԃ=hδ\ HwԿ׃YbZc>;#F46NKeLjix)쾻N4yMG=:nݿãͦ6XwsJS_e:n :ǫ9pn^|Sh~wpVì:p0Wt zF"k;sp6xu먀Û^CǧM۷[n8n-ˈi8h+upớ~o0?WWi DyZ릛<8E}exn;kw>@6GwۃxC㿫7k*}1_eǎ;`_] 4Ӧ|X6G^4׎y 7~7E}pۃpj#_5{.pqݯO>)?Z;wj#6Gwۃx!Qw~M|=e}G@ߊm֏6GpP @t_{eÆ诲i8i{.7p߯z7^:qӧW7Gx-4ڏqq%VETEcJTHMT!U5 tCb) 5ŭ;?Z>~;n_b]^eByZuRBJСT*$G14˲M50[O2NmI4RT5! <5ϰ@ŇE ɵ=FDs#/CI@H+$$@C9@b岂QWCMS:+%U"jvwwV߼:5TFXԏɂf<E3qscMH;)lnjA㦺pt}ݾ;ٴEmC ,1)7,KrmLKL6ۭ8!IR;ֽ~ [wrfѳR+F$:+-+5.CRm?.hu) ^˜uw8{/powW=xPǯ6G7w}Cz8ӦۺpF"M6qt}vumϮkӻ\Cnvǰzmݟeo[7VQg-ГRrjƴaBS ۞sV\Bdě sgSH#xhF]x rzCOѸy0SDr6eeH{(jV + FFOM 1웄^\z&ʰMCPT}XګSH@}Դt$$rZ9: vSg%-2,Z2"@jgOJ5հ$6I B@@HJR62 E\U uaurO,3[?.iF"T \LL: (0ň;yE`e~LwAM*x5+#͔ Jm.5Ÿl;5T5nҏEϺxʽpVDS3)\f(LqRܞe>鄪:w*8 eNwTM4kO4cflw@q!DF+rnղ>srM0Rˍz)RCQNSSsHuZJNU,@h#Bup= /sB\;./6l!l5v!쵏Af`'iz@&].&Ggfc܉7"]Ff7n nY}nZR~KƼ϶,IJФ.i=TijR]}R۬ E xKM{kfIf03V|^3d}\ݟ:%)GY}j,NLf .ݷ'l+杲 Vp5| tڙ(k9ϗ?K"úףi0-ȼcqocF8m bn4N7YĦnhtk"b14ZEj \C骋V*F*nB63Vʹη {@8B, vK˒TԀƬnKqym/ mVɘZΩVJV]/W:ݝT-=xb՞Zߵ, p5g:9ї~oNPYf5˰hQ-xyii!4ܩ#Xks$fZn:PBqmM mY$"i-~bRzքm_d5hRP4t=Q*QII%M=A3B/ȧ˪M8U\Z26GBb\]L˅))I4*%4'#ILy0˸ !B܁ =ui^͞|k rSE"3QXe&Ūu}A!sH>Sk3njR%5J*D> knȫqm:JY~j.=\:E㮚tn9%t^tӛsYblŅf hʠRvW&!`SBs8F3QVWt +b־mOsIUvQ\h)MyFӲEM}[)6d8o $v&. i gMhݫ79ϗ"\:_/M rw#EN|2k1\Y{ ew |JFBD@h7Rht틹N:(]B1Iŧoݐ٨%»eKesfrce32s,KNỂ3Hql\I.KjXV*_9ItԑJ?=*f^B54Jrâl? r:~hc*,FS\ C'1,,kQ,*Ճb8U$T Щ"0 gdx]j.B4*m6"a"9!&b"W)$1_QIŬCJ\8)ʋ(ј΃!u8isJxrD)ӠD2.]wȁEeUDڨb\ם2:.!!B\)=to &6v/v[XSqd#wMG7')Ю5]Q(,@CA $ss6>nuU9%i7 CuJ$Pƕn aP f>=pyc ,&R *q*ЄM݌&nR}ZÔ{Dl1#@a sQ.Hk>qa'eyIp316tU:Cյ 5"pka$kG5hx ѨQtEך;ÖAԬE52r"2)AyVbŢ_S8V)@k\󦓪wh>^9P'N7M9 ު2p<7t_>c7G?1=L6Ƣ句 *z)4m=Xϒ|ʕmw R ^428r)0[vJ)!Kpe݈[/)Q}m0:4UFJ}L3eJj*ɦ_5q&IPf)I P (siI*fMr A)5,˿h$w:𸣧0 d#g %7F4 5כuD?dNVI(ɎMMQ/8۷= $gcMbC`d.tu2/݊V#QRkI rZPj&/&j ha lHNKM~JUYTg~O<(MP$&'GiL:͖qݥ rzO˿>P'ZT_߿\46ݒ :Bq TVljkC8-uN=~T"_PPE7 ,T P] 2ZKkiܻY8N9R{NK'KJ+Fʭ ᚇnЌdav%h݄sQeZ8B?)( $, @Q^ 5zKR0 m$iN݆͘o .З'p{7Fߦ>J6&9x0j%jW |3ͥGk\]:\2HfOQVQCNEh± &ٕgrfٻ3l{tak r%q7!8#>)VhGGCa(19В)qǐm*XIeJPXV5eMy[g˿?rzCO ,ه/t\"<^"d\B~OQv4jG WF9W3Ti w8PkrɵuEtEѳT1s\\W/ 6J*Im\ %!3EFSgυMH5 RGB tAR*iZTL;8t5eJTAήuD=&i9ї~qutiy*$)'LV:Zllu%WM$"вˮmқH]΢̅v3o{j-u) SHܛbǑU ‘ 'skZrvm¥%зUJHj58 Z ՙR!n&a%*Vt%9U>TkյXY~2tKx~hkb?lw.OHQz>ps=p%'dje %v[6^޲|( ],sΒL° ʐ$E ELS[NPT-X̃=PpiXҪeHi&GL#3=anSqlR%.A%) cxNZh2Ϙ2&Fjp*5uS9!OT[a.{f : ; u17m4 &4(E-{VRgR-@!ӈu iT]XđE% Qgfu7֤ԂAbY& 9h#m%%=\eZI!]J䝳AS$'Hq@D t!9 !nlrx?kѻ9\!b@:J&FyP"( U3$qMR9.@D(順9̽kN˶ˬ0,IIUjjSL'),n)PPS!vlM%Qz8uuTweM~n;25aٷac>j/}\kq|^^Z68&ͭ~X*-K K4=V9E+"uNȊZ{Aʛ롭!J;{ڹZy'*k)›nr},um[UsڂdD+EtI)bCs7؈Q՟8Mzwy?3mR" BkQ̸g?3`#BnMLi=3/~g4otiu`їC=ghƣ;O*{G T>.n`IL[,}ߏ|\I={=د(NqӨqk6s'_ tӛ~6T鮝cwnżCw\Iӿtpuʓtvxp[0 ] ӯXsoz✩8soZ-w'NAqNTu:t]<a <{)w'NC1NT~N:oCa iyBt<5ا*Nn:h\[0 .}۷o ~W'NitߋX08snzP:ط`sf1s'Hh;yS]- ;y珺: Whfe"(DH T,dm e"k%%n7)6S-LPhB(ANV6$H y 2I5rle|5w(UDLChJ `3MT)Y#%Htb=Z2b)-Y ѾkBCLK5e-KvkZU{eeWo?Eִf^v}ԽCm%o e-KVr؟Kv]*]T>.;ë@ yͻǿIj2(U{*NV7qo;u xxEP:ا,NnCwHn !;AUqiRᓁjTQ!*# =M7dȄG]tWtFaouIFmiQ=rdؑ^.h3yE_gC;2лztf?b͙\aJe0 e&i7'4/&KoN콁xwɶܙLK*жlݠT*MP,o WdmWm迗ۻpzmoF#D54}7͜m0۩YhmP}[~Y(cRH=Qy6h*T#[G1 frybprWeN55-*U :27Uu*ȥpsǃ19+;w:cuwn5r _hTX3$:::β6(Wn]™o:wϡT|h[KYup- *f ?ph誖ȶ( %"uP7p͛Ԓ+IHP ' >n E7PenKWqJףo,W+Dt5>a|ɠ A_q͏%:7zΗjRJnZU6,3.LHChmP!4 ζK"BJʲl[6̳ٔnZNNU/-.R-4m )HH`Íq >|Ƣ{OcT!oFK2 y(N̗vEbZ%aV3Eim#&#hB'5eJP6~1H#C ”9#PqRvMw kwݓopjWGAiV(RR[2PX q tdrѐA{w$x{i$$] 4$(D#1Jn";UoEUt]+v-2P.@0$遀h`wdB06[&A_qnbtg00l< զC'9wܛFdqkjtȞɗ]/@t`>l7zlFE[Z+]E- ȩrPH(rʉvR ~-cɥEsxwHG[Z&NTIwNX*;I䪬] l4&omW/HG:՝VrR⼓-+ODTbU]*F=U.k򼜋v 5E叇tI gvM`m[fU-hHݩIwYu(!Jִ&lY9Z(Zq2r{oٶ&.Ժ[ nֳ.t6&ͯnM۳ kKfmv'P[RjlbWv-e4* WgrHh) :+5m%Xۈkn߸J\{64%mCV ?EfQ v$7_Ԧ)Vǣjw qP*nMw.Xni,ܴR#,(E/s&4tEd 'QϴQu#FȰlZV-*$QfHUE:Dxsr]d `mvEneA {!I}JJJ Ԡ* eZFQrC7zqBVwFLSICMW틷wLJtK^QJY9LB5Yg*R{S2-SRt3ꞘQi)%0F̒ͻ_hEI\V#_RfvZ2)QP)ڎ:1w3[# ˣ'Lb鳴U Hª:kapa0{yxedLU%&Tഄ UϺVɤEh[{ Ry]ڑ2`Tzm4 n]$-%m9Ǎ^,M7)|abQ%(4VHMధm{Y\2֔ܨ/JjϿte153))#1{ef,9צKw'۳(Ϩ2ĕkIOLnQLPXqąrNPOA.c&"ؚT($4y  #7[&'>oGsqS Z-ВVDA4ƾYБ"hSEa8u:sd6rZR5QrMꢢFfLK]*]IǾEʑ>;^ڊ4v/YneM /E]5( i-NUvjUhDW zkA!q_[&W:>:6PZjk\RMI,lIJNs#żV#ui]k͝s#R8TQ 6ڹo3 e߽iF"(-= G uHlG4E8Hm&c&p)N]"#z5a>#7b~MC]l50wyz>}0kmL1S(FUoTmBHQx}$ 9mBa%Ȼ %IuH.1aICh( GMJ  dൠ(X[&Wz5>a|X+Vڭg $!@U@]5ۖ |tp(kUPC9ET952eIMY ҁ\)(vgMt`tՀ B0ӈkNе0JchNug{Գ!\@ d(RZ5G*ZثpꚚuwPj eQHRկJԞkEgBIoE' @ҊBB5Q v97Tᙩf#uٯ?*5U#W0=HXJu YL;-_B5QX kEJDJWb֧m+nU'z?FE;dtZ ug8T{L=Xc& 4tV.n};n:~ @!~=::?+dRˉu)-IΤ |.a2%%*)h'1َ_%kJVUyqm?nbjJ4|btXTS錜l{)%o͏%s4KWT>^ I:t_B $$#%g%)ߗdyL {{h=BZokd$-ܡX7i(#KW.eTYYnTEE+jt9Q[*VTc㴩LKM{t޴RRbWU$&a{5׼56?7~Tݎ&api;[yVˉV  h:WvEm% #Oq*#UgHĦgm vn"ƩmHݘYhy6|*Aʪ媻 TDpӡch)xZU픫( 8nBfV)cD2N'EɜrdQD01{5 G=#bvM}?п<. JOVg@$l? p$(PőPU5ә--sLY)Z^|T +TbOV ɢ ȨH <*ػV/PfWTkzl|u@#$4z6P{_6w}Պ5oɷ5a}l[/8kRr̒I$gg/ !AM Z =쟻J`d-wSj uw+}ݓopjا*lnΙ{|ծ #|V^*m"wFf?69>O_j9Epy:LAC$SA vG\J@;mK Aia_Lc'OTT+Wʷ+U\Õ;rT*F60lLDw7w&[I0ZyYp'l^:I.SCee UR0M:j.]MxU%V#(UU Ff;T~rD;r9QTɁ3Y=m|Rý]VnZZF"BzN%vez i6. HdrM6#y?3mRI糳5.!C3?3`:iӪSud }t?wGimGϪL4 <׮0j'ϨAw¯X{<@ bƧͿxz~ɋb3P8hM]qXJ;j트. 1)n.UEh=3sop! ,Ko I!;e e5?(I U#f=0 ~u6%15sf$ӽ  j$R`PXSf@ `:zs{ozso:[*hA(AAvt1Y}?#?1]4xn͍\YdxWq89\m*Ɲg5`]A3.yfpY&njNJML]z;cA`osC(b3OU)uۆI"EV$-ЍxsKBPMeSGl;~:78\ZEd]VG5$:T1 뉩^ju-KCɺ}b!0c? r^R_L~egZU%~͕;xI+~Øe˹33=-2m "16AٶeۓjNxealߋcݫNV$6tfggdy"vnїc-*Dddm#[a{#PUqK/5fӔv*v*؀']bm@ECJ:n+f73pȶE5qԺrSZ: 1%&! 6:pšwmv8TuH;h:bV0Hդr sn*==Vܥ1],R8"IJ6 ABcjŠbї((qU%HT:!P(ez8_V_ፄBrBny;AiBFeMLRGI =:CzGUdtvLʚ/9erU(K5[JEhp)R(bIb;v!nꥧ)0L_v%[L՛ECD:f*ѱCX)^ܥkV[ꆠWj\;w;2YS@Ru]F6V%ijޣЦAzu(D*Na !c4 )6*%sVFaP!u9G~nYYU[ȭ:3-.GJJƴݬJtѸ\$ʠO_.xqOaxiSJH#Lg|byy|ـ;rNH__uxq*NJUc3SDV-ꐬClX8QY ?% ꅀlYM&t*ԉ3lu&$CPӇFvJC=YjT"ӘJ!*ɦ,&M*))DOvZcc-\S} !7(SIG 4z@6nLG9}\Rq7,SSVFX52pq*BTH飢S É bהJ܅"-AٔuլJrkMi܄"bxcJQ$˺+KFQpTdLsFu)9#Ld, @Sj#}'$.iⲋ8z#8XʪM"B}c[>T/OUFZ&,dzbPZǻv͕SX>PԈAXNѱTV2h8.Xix+]3m 6fjѪ Af&H )R]9֯Kfrӗ ^&gI9K%]K+e;\k*ؽ#)tm+w4-/5[eV䭵iQzR%g jv[+u(r:oq%yCa.2.mХ$886Ӗ\̤̻EW_uZ eeyh)+Hq*}*NRj;Z}fj?{:EU1n&>A8ЊrA$ٹ` 7?C'ܸnsI[S׹dk*i{P-uFNRU$BF^6YN1q #`,"yB0ZW6Mb2{R[nBk/ -TB@7~rYC˵V!LHM tAij.rڰݠbޏ%}ċi.ͨR&emg-6K6b跤;ݛft_s zMn!.r] mC,[jHf-o/}}0ƣpg]Y?V;0vԝf!ZaMWP!U&n l[tR8呛1tn.Rڽ;35L⸘FyW,hHABȽ`&f)He2nN_fZR(MW+MSOPCyD`Ye7 XDE!5 iHl$Qna0iO\2BNҰY bDzfV;qQIrT*IŃ6Yl%m 'M0.)3l2 RJkR5ʬhj5dj[M'ie.QRxb`˽{$ ѐp[(ep;͹naumƮփ-cSZVՌ&Q$FUD3ab#|䈂NʖMHOfћJU:Id虱298aLLu/" RmfRi*F5*dZ=b4jpFC)ζ֛vdZy/Vt߼CC܌:3=Ow^Y7N2!m[.ܤ,M(*x(RQ1LB\W9Iy |帬n4&R5jГq/M#-\4d1ҎY~LQ]a2v.۷1 9wUV.LۙELAE2L)C-96!-VJSZ*) EGG[^XWQkCj:[?MݻE5 ~ 3%\Uu]%r*(@6eDmhhBE0e_F8T1p>;Vɂ\Ż}ޮZ$&U9=Qf;]]Uy/P4,G!S0)y&ijR'T(*p7-+WCTvMnl}::6oXI$ԏ NR=g( dH) 7a[?MݻE5 ᮛ\2q_Zj]- : pprOӒ[THT*&r`}r!ʾOy9 }S&TdDbrj0;1W:Zo)_ ff^ [TgDZH;p )&m<ie*r&̥47&黣VI S:Zo)_ Ykub(:foy#q.EDa*X1L֦N-\¬kfС~YꚎ isZ0){8OMV%Q*@?_?PNcL%;S~O8vԭT7ҭZofz j;|kQ\m)˦U(!)iY@CdE<(SUE6͚Ec@&1DDG:Zo)_ ~t.ܱXT%˱дaUp4xv%ZYCL&}ceP7j7t&*mzQ _VЙLgS,Iz'ս HeVd ruakJC$.tەC.T~ˮU8,iNEWr=@E7'[@ L'6t hV;Rdx s(X43!E}HS DG\_r6fV+N/ۂb ] B Q:ܰ 8=Y}A >։Q:FjW+0 ii@4*# N~hN?t#~gswNҗy ' JfZ$(gH28 DӀOw oP?&bgD ̀֠xpIpE]u@f\N 3o_8k>a+ϼ}uvN;zC7qߧӧnmސnፇ rkPvZbٳvpǛN}]5:8WWXyoOPoV{{ސvG8x 5@;8nh6׳l߻|1?o^ڎi=<|9M-xsh` iצ gէPN#-xWWXyqM鏀Q=۹n9D_G0\p}S]6Cӣ~qA0iQ6|[q'pt}:prtF>9=jvo Gernfsh7q=" 8sj<^}ǎ>9Dyp>l{sϻ70=qxGs~}Æ+WPtqCD߻xxzy=owy͟wizxw y⺇ӧF:b(9n'pt}zp=qxGqsqv&-çD߻xzѣ 05o}5V>76.+y͠[aջ&9@18S[7i G/Fo0oӃh7s{Ѩtkzsn>G(:ycz㇌1P_G>(㻇6t>9D;~|z4vl:ubp'i1fg~iw~@];u9nmwtuxG8x 5ף~:Jr34n""&Q%$ b;UX@ D]48鯗O5s.oMfے?*@:R]eD]R k]ge{ ζd)QfzYӨɧqI10V&_ehum* Yu"Bw)E˕2F5Ubڨp+Eb{F]6$jĕ $v";jw'pCmHGrpEc?aջ[ \9VmnEboMs( uuDS8nJBWOH=ܮ$"vefY2fJU%3 BO)WF+=.uCK$7IK6y,(iSּK6vj}<~CK~?EW +A֟iP JRJ0$UpeJsH4E$ԏlca=|'Jɍ;[0XҰ8 "9b(e!n8 əA#.htpZ%̝RЦmUVcҼ=Hm л^G}ŷzq)E~ ]m [6,g(>d $B _a4~}Btq$Yt:mUAY-t%=9S IƋ/$ƐD:MYY7qobdX6/#'3 7vuAe(tL:g |nWvX I*ۊ[kIRAE ˱{..>2͵d+۩m-BۉJE {$v~)SWtD3pRL^UD&1D) QyOˋ+;sfmڎ(uVSԌEET0Ex Ns1L"""8Lz涇 XkUux1ss,;Իr&~ʳ'J ԔI4 ).6R*FPw.l8m Ǵ*iSV|J)W1J8fS]ܧɹykjФ* QTa9S@/4eA4AuG+rYU^SK3:pUj0*~وx2@y7o;/|˿Q^Wj*:οg[?N9G+/p-߂VygZ(:غγŋ8nAlB : # :c:@@@Cpr7'wl 9KTeI8-!*^ [i$)ILnV}ٻR2T),DA%W4iJI;or7w'xo[Vѣ'3+I;or7w'xo[Vѣ+I;or7w'xo[U\<+ʊa)8@J1`ͨpF໗kBlBIP7òr%i q_Sm61-kZR"Q *M[MO1"óSmJK2yM4JqRR6TR @̖T2n[Zq ,peBVF=m1dZČ$\KJ/y'&Hi;TGY m(l jEtѱ[=eJC9v/<^i$PbX,,[9+8LHժ](N9Y(V !&#e`uI˕ΥLmMjY+80yR\f;4BOAC/vQjFkl~s~T.>C{Qw>՞f-a<ۼSo<6;1g)YR˶0e'YPz~=eYTö6kwܚfL?.Ł/{5fOe Y3!o7.+(F}%[^e픤p1ԤCFv60MQlOt`* R}!QJ]FyT 1$d|S&_ dES9j (f6 ݉ՑXZv9fffkԕ[Rqj8zW|! eb8 N$; 9> .xcΉUѽs.I[ڴiNנּq33knjqIqT}, Dk=1zzE-[3[Sv1,\Zo%Y\5n΋R0*(u >0ㅨ*$$-[K$܍:zZrb)Fr1Q.p;ډNniG@7$tßuہq66λ3IqMNXtkp)aF$ZkX閗F= ^ָBabzSM-JҫAX5!Db\2f=x6uVfI&FT 71Rw UD!-eYkv;:mRP&לP}p Dzx1!GZV6[=()ildIJ@R z(Cܻ1$.Տ(TDĢԑR@a$ e˨O3{Пgo6ƥ%YYi47%ؕej]$C @ k@` 'x[-[B|W[ܶ <+x1շh)k$lm ^x;or7ëoS k$lm ^x;or7ëoS k$lm ^x;or7ëoS kA'ePdnQzRG3Tw熈cg$.Ldc"bq*5EӛeC1SQe։hs3*sDD0FfPY8/.g7\Kս_9ek-A96z#^3l^6 RVZU4ճraalƣXx[-[B|Wum>|"e} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W[ܶ <+x04}Ce} 'x[-[B|W>Kal- w¸#bПā %RM4͝ GUJ`餤)GF3+Lnwf *ʕ1>@PQ0^O xѥm>GkIO]TiՈ[Ē`&o.RAPGpb!c3xhg~޵OMLkf| kQ {zJ`O[wƛ>&(~wO lt#=o;x0`4| $trƝ0`Cv>`cN 0bhG?{;x0`4| &w4| "ӷ  Hӷ cN 0a iA MrƝ0`Cv>`:9v>` iAd4cUqƮlt99ħqHBV*N$Hiri \:.e&ace:.+:1"rEIdN.ɕ"O@0T1zwV9[Ʌz$K)M$\Ght%˒EQ ".3A1v,yM.O&^6)qоJ迢hI˙`եe\\%RXa;L6]mHC=%o%ŵ]Ԯ&Zв տ}Mv=HuU?%H-0\̹.! urw{AvMsY:z6HsSU g١GkfldE]=W<:q*Klڵ\n>AY ] ʢEt m0kt9SOu\UMfKy&jڽ}8\eo=?*RfͶbP%[iaXC3gG,Zs^Vm-uڥ,dɦYx KI5,R֜h%%\l|$EMEvD@ b&XxP!^eP\9\( ]ujW")NM4S9( #;RBqW>J8kwAvw. N&f *l;0JMgSJ}!Nd;$ s^R(4ی7\I֦E}$*[*eBfRDp޽SHʝ]ײISK)p?}qv%(APT Ri{@δfiJufE T~Ff,$s U?ُiN̅IT Q]ND2l֏sTʙРeԎI4r+;MQnO:㟝TР8\sǫϊ\OVrBBݕəJTa.)5 S%D* tc e:ekh<%Z l%2Дi#[q)TV*}tj,)A\DepMh` `(;x*W(>[<+t(pbWk9=(Mbݶꕀj+*ըHd2AQ*R.хu&/|(Bӹ.mP]UmІ"R [%4R)g.E[zNofkouhA4=WRxTa+\fD\)(A]TדĆx):qϾ]\9x*WPS~u͊UHCxR,fk B~-5ʂh]6UJ R@PH֧v$) ~ޑ׾%OUzcy_?(^3.?:|+t(>q:@ZL۸v5ӯaMj=0=wh>n?/O%WJ8kw}q>'Y|O$P9|tέC߿l`z7k}+ݯ~^KAgvOq @!ZmPT#A(%mS[ Wn, e ās'Lڥ" NS Q Of:6߿\P9|t֭C߿zǮvz~Q-ҼDJp=Р>.+_P: n }ZKV|~j3trZvz~Q-ҼDJ_@p_8[yGHiײZg~":0=wh>n?/O%WJ &tgy"Mj=0=wh>n?/O%W:㟝TР8{\sï͉= k7G/ը{;\0汭l%7 _yE@lȾe&Op):`T Sr{c<%؂.@SE"h ^PDU9=RBsl kxڸy亷D7BP}ԥ"7QHB E$zEk3d`z7k}+ݯ~^KA u?;_{\szOHVլ막3trZn?/O%Wy_?(^3t8~wNCx(T5ݿDn_5PwDJz7k}+=^| qϟ> LtAM%I :kV=qݯ~^KAvz~Q-Ҽg)p?}q"g rzv@fZg~9]cZx=wh>?NCxNp=8ո~p>&tm}}4έC߿zy_?(^]cZxBIOHt Q0,lnW3,-W6vPenUGdm^{W&z@OViujOjjz7k}+ݯ~^KAy߇uj_ u>/?VS_zx3t2ZSǚDJz7k}+?^{Wyu~H'YׇgFTfe:~55X=wh>n?/O%WԼ4 SԼ:[~Sդk>ω7C/ի㥵Ku;=2کv7͊AH d +gR:Q]xRqo^~aocY'4u4;مi\C);]s;6Kj! ][ܹj,ܡIĦ$})ɕQu!!btHZǺZkNv-r5TV8&ccY~qϣM3Cs3=1.~Ψ 9I6F tя"։;7O=6F>pa )Ak~~7O=6F>pa #FUݿytуl>`cO}mf80Otуl>`cg=~7O=6F>pa ٺ|n0z1aN m_~[fٺ| @1n0z0m|)[fٺ| !',|cl>``7O=0'g[fٺ| !Dhʻ;1n0z0m|񏭳tуl>`cFcl>``7O=0g[fɣkQ [3+\[eE1[iN62ČvЛmWQWnk6hh6cBъҔsبsW =@(t mM`JN5s>ZJ1' ˕w: )H5YM( 6Mڬ|HD̩Q20"Ak|5'|¿WcuGO36i)BF(^W0vN pԴȔt1D5 #ķѯȕ1}jO<wؙqbO<1-k%s`ķѯȕ1}jO<wؙq!<ķѯȕ1F?"W;?{]&C?`wbd>F?"W; K\Pwؙq}jOB K\<1-k%saCwbd>{]&C?aO<1-k%s`ķѯȕ1}jO<wؙq!<ķѯȕ1F?"W;?{]&C?`wbd>F?"W; K\Pwؙq}jOB K\<1-k%saCwbd>{]&C?aO<1-k%s`ķѯȕ1}jO<wؙq!2S76S*cQ7LH@w;$*&ǰJBif$s(['8Ja77$  @1A!•k|5'LR8xb[hJ}o_+c !ԟ0x;2 IByo_+c%|~Dwь(~LR8k|5'! %|~Dwь5F0;2 I!ԟ0'5F0xb[hJ}‡k|5'LR8xb[hJ}o_+c !ԟ0x;2 IByo_+c%|~Dwь(~LR8k|5'! %|~Dwь5F0;2 I!ԟ0'5F0xb[hJ}‡k|5'LR8xb[hJ}o_+c !ԟ0x;2 IByo_+c%|~Dwь(~LR8k|5'! %d5ޫR.C(cf҅TC,[J $APIg!Oo"+wbd>{]&C?af[H?zOo"+wbd>{]&C?af[H?zOo"+wbd>{]&C?af[H?zOo"+wbd>{]&C?af[H?zOo"+wbd>{]&C?af[H?zOo"+wbd>{]&C?af[H?_^+4VYM78( [ԭi3p]}:R&!$tH2Y+r&PQ@ Fwbd>{]&C?aErUU-QEѭOMRͫZ^8oLFM\&͵H=ّ24A:0 .7fZ{E'okar; գtQH sꦙJ:,x;2 IQu#OǸn4eN맠!S86ΥA#X9w}߾<\`5{vn8iys6O~81%O5 ԃ4#a`/O}SYk_&/m>epa/m>epa/m>epaylծF ы80bz|^01g87ilz|^01gOfwF9زW J~ee8cR"Sl m#C^n=C9Qi)J;=@H@tr*4 u~B FY3iy+Jea"250V)I@ۊy/_..*. U?E"cϷbZvAGLWT [IQL 2Ԕ6"C!INBd6L&\6%b1HRER"c@"":i"ݫBV؟L2F*l˪h6RP JskLQMEǐ@WiNkܧ(M1L%0Q5wwCp{H{g+XJp4" Au $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! $$=Ӭ$=Ӭ! 0*uMK5w PTO\)R %N,:` RqpS8Qk]C wzV9^Yb AS gMZQʍ㚸 &z6Gr\f,;RmUgM.mHR J4-aTTP 9^Է1jPq**962 2+H/.:*H 4]S unbf1VWW OlSR  & R86RQ vehPc*fAUu*y8Tִ)uσ \ 0a0`  B 0a0`  B 0a0`  B 0a0` A%UUQ]3g JjHr7j) .sJv2KI,QʈRLJ'.NRs&Ll^v7r0U]14b((P% 6Cv 8Iԗ\PLj:+Jn1CClM$" d逈5":.cUn7Ne0`˰f%ϫE~Wׁ>zvB}U[!LGd#C}U[}@!!S [~%mN)ZG;Q+B=U~@s?8) ?k@6#tJV|jN?UVxPtSvz;!>~P 2iZSVقI_hUVpPt}vB50z_0`2~mJ_؍PB@=U[!LS{qG_:t)(k$øEx+=~Gq>{/qCO:t)2~m0+W?j`Un7:j`;!=U[ژ0`bZ'hQ+JA+@glGd#BU[:@!Sn?@Cœp`JbZm}-u_쾪 >*=~@s?8)) 1ĵh/tBVho{s_:5)z Un7HL1RXcF;TV|iO;FUn7C0zeUn7iNe0`!2~mח_8_~3k8b?d#U[:@!ѯL0 1TKZ6Q;e}>Od#U[~){/q e0`0Oĵ#tPVi8F_UVpPtSn?@Cœ0`0_֯ͣ)ZU;;!o>`Gd @U`>*]'m"JO)h{!nHL}zeUnwiFe0`!2~mח_8)vB=[m~P Gd#U[:@!ӧL1OPZ_Fzc_|`Gd @U`>vB47U!"e0`e+KZGѵ-yzJ{⾿?d#}U[}@!ѯLz;@C˜0bh؍RV|jN?UVxPtSn?@Cœp`E1Rքm-u_ >)j`Un7:j` 1ĵh/tBVhojPUn7:j`;!o>`?Ե~?WpW>0zmV?8|)_UVpPtS Rc/kW^ ^^|^y!"P)vB5(z_0`,3H6'tVV=~FuCvB}U[!L1QakmHٳ.ȅ-u_쾪 >*=~@s?8)) 1ĵh/tBVho{s_:5)_~?Pt}(P6gpQZ?8nɦhR/%cZ [eiFTHȘ1 _b}"IH"֬Uz]4ܬTNQ⩕b)(RD }wqM(qhHa4JRP<&@3%y?2%Zءc׋ 0) || (dhr > 0)) { out += delimiter + dy + " days"; delimiter = ", "; } if ((hr > 0) || (dmn > 0)) { out += delimiter + hr + " hours"; delimiter = ", "; } if ((mn > 0) || (dsc > 0)) { out += delimiter + mn + " minutes"; delimiter = ", "; } if (sc > 0) { out += delimiter + sc + " seconds"; } if ((yr > 0) || (mo > 0)) { delimiter = ""; out += " (about "; if (yr > 0) { out += yr + " year"; out += (yr > 1 ? "s" : ""); delimiter = " and "; } if (mo > 0) { out += delimiter + mo + " months"; delimiter = ", "; } out += ")"; } } objStringOut.value = out; } function datevalue_to_gregorian (objUnits, value, epoch, date) { return jdn_to_gregorian (objUnits, epoch + value, date); } function dc_log (msg) { if (DEBUG) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); GBLTut_ConsoleService.logStringMessage (msg); } } function gregorian_to_datevalue (objUnits, d, epoch) { var d_gregorian = gregorian_to_jdn (d); var datevalue = d_gregorian - epoch; if (windows_kludge (objUnits, d_gregorian)) { --datevalue; } return datevalue; } function gregorian_to_jdn (d) { var mo = d.getMonth () + 1; var a = Math.floor ((14.0 - mo) / 12.0); var y = d.getFullYear () + 4800 - a; var m = mo + 12 * a - 3; var total = d.getDate () + Math.floor ((153 * m + 2) / 5) + 365 * y + Math.floor (y / 4) - Math.floor (y / 100) + Math.floor (y / 400) - 32045 - 0.5 + // half day since gregorian starts at noon universal_time (d.getHours (), d.getMinutes (), d.getSeconds ()); return total; } function is_abs_datevalue (str) { var regexp = /^(\-)*\d+(\.\d*)?$/ var result = str.match (regexp); return (null != result); } function is_english (objFormat) { for (i = 0; i < objFormat.length; i++) { if (objFormat[i].checked) { return (FORMAT_ENGLISH_TOKEN == objFormat[i].value); } } return false; } function is_rel_datevalue (str) { var regexp = /^\d+(\.\d*)?$/ var result = str.match (regexp); return (null != result); } function jdn_epoch (objUnits) { switch (units (objUnits)) { case UNITS_WINDOWS: // datevalue 0 is just after midnight on 12/31/1899 for first 60 days, // but we want datevalue 0 for 12/30/1899 for thousands of days after then return 2415018.5; case UNITS_MACINTOSH: // datevalue 0 is just after midnight on 1/1/1904 return 2416480.5; case UNITS_GNUMERIC: // datevalue 0 is just after midnight on 12/30/1899 return 2415018.5; } } function jdn_to_gregorian (objUnits, jdn, date) { if (jdn < 0) { return false; } var j = jdn + 32044; var g = Math.floor (j / 146097); var dg = j % 146097; var c = Math.floor (((Math.floor (dg / 36524) + 1) * 3) / 4); var dc = dg - c * 36524; var b = Math.floor (dc / 1461); var db = dc % 1461; var a = Math.floor (((Math.floor (db / 365) + 1) * 3) / 4); var da = db - a * 365; da += 1; if (windows_kludge (objUnits, jdn)) { da += 1; } var y = g * 400 + c * 100 + b * 4 + a; var m = Math.floor ((da * 5 + 308) / 153) - 2; var d = da - Math.floor (((m + 4) * 153) / 5) + 122; var dd = d + 0.5; var yr = y - 4800 + Math.floor ((m + 2) / 12); var mo = (m + 2) % 12; var dy = Math.floor (dd); date.setYear (yr); date.setMonth (mo); date.setDate (Math.floor (dd)); var dh = 24 * (dd % 1); var hr = Math.floor (dh); var dm = 60 * (dh - hr); var mn = Math.floor (dm); var ds = 60 * (dm - mn); date.setHours (hr); date.setMinutes (mn); date.setSeconds (ds); return true; } function test (objUnits) { var d0 = new Date (); d0.initialize (true, "1/1/1900"); var jdn0 = gregorian_to_jdn (d0); alert ("jdn value of just after midnight 1/1/1900 was computed as "+jdn0+", and should be 2415020.5"); var excel0 = gregorian_to_datevalue (d0, jdn0); alert ("excel value of 1/1/1900 was computed as "+excel0+", and should be 1"); var d1 = new Date (); jdn_to_gregorian (objUnits, 2415019.5, d1); alert ("jdn value of 2415019.5 corresponds to gregorian date of "+d1.toString ()+", and should be just after midnight 12/31/1899") } function units (objUnits) { for (i = 0; i < objUnits.length; i++) { if (objUnits[i].checked) { if (UNITS_WINDOWS_TOKEN == objUnits[i].value) { return UNITS_WINDOWS; } if (UNITS_MACINTOSH_TOKEN == objUnits[i].value) { return UNITS_MACINTOSH; } if (UNITS_GNUMERIC_TOKEN == objUnits[i].value) { return UNITS_GNUMERIC; } } } alert ("Unidentified date value units"); return UNITS_WINDOWS; } function universal_time (hours, minutes, seconds) { return (hours + (minutes + seconds / 60) / 60) / 24; } function windows_kludge (objUnits, jdn) { if (UNITS_WINDOWS == units (objUnits)) { if (jdn < 2415079.5) { // julian date of just after midnight 3/1/1900 // must fix excel for windows bug that includes imaginary date 2/29/1900 return true; } } return false; } engauge-digitizer-5.2/usermanual/dateformats.css000077500000000000000000000007461222557406400222030ustar00rootroot00000000000000td { padding: 1px; border-width: 1px; border-color: black; border-style: solid; border-collapse: collapse; vertical-align: top; } td.invis { border-width: 0px; } td.info { width: 240px; padding-left: 5px; font-size: 70%; background-color: white; } td.mainheader { text-align: center; } td.header { width: 240px; padding-left: 5px; } table { margin-left: auto; margin-right: auto; border-collapse: collapse; } table.colored { background-color: tan; } engauge-digitizer-5.2/usermanual/dateformats.html000077500000000000000000000054031222557406400223520ustar00rootroot00000000000000 Date/Time Formats Supported By Engauge Digitizer Converter

    Engauge Digitizer - Supported Date/Time Formats


    date formats
    englisheuropeanenglish and european
    MM-DD-YYYYDD-MM-YYYYm DD, YYYY
    MM/DD/YYYYDD/MM/YYYYm DD,YYYY
    MM-DD-YYDD-MM-YYm DD YYYY
    MM/DD/YYDD/MM/YYm DD
    MM-DDDD-MMDD
    MM/DDDD/MM
    YYYY-MM-DDYYYY-DD-MM
    YYYY/MM/DDYYYY/DD/MM
    YYYY-MM
    YYYY/MM
     
    time formats
    hh:
    hh:mm
    hh:mm:ss
    hh:mm:ss ap
    hh:mm:ssap

    Legend

    • DD = one or two numeric digits for the day
    • MM = one or two numeric digits for the month
    • YYYY = one or two numeric digits for the year
    • YYYY = three or four numeric digits for the year
    • m = month specified in either lower or upper case as 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov' or 'dec'.
    • hh = one or two numeric digits for the hours
    • mm = one or two numeric digits for the minutes
    • ss = one or two numeric digits for the seconds
    • ap = part of day specified in either lower or upper case as 'am' or 'pm'
    engauge-digitizer-5.2/usermanual/datefromstring.js000077500000000000000000000213161222557406400225420ustar00rootroot00000000000000// Standard Date object, which offers useful formatting in its toString method, was // extended with several private members (good encapsulation!) needed to parse the many // available date/time string formats offered by the new public initialize () method. // Note, the return value should be used to determine if the date was parsed correctly! var NOT_DEFINED = -1; var TOKEN_AM = "am"; var TOKEN_PM = "pm"; var TOKEN_SPACE_AM = " am"; var TOKEN_SPACE_PM = " pm"; Date.prototype.initialize = function (isEnglish, dateTimeString) { isEnglish = isEnglish; dateTimeString = dateTimeString.toLowerCase (); that = this; // common workaround for ECMAScript Language spec bug valid = false; iDTS = 0; // used by parse_* functions to index dateTimeString [] iToken = 0; // used by initialize_* functions to index tokens [] tokens = new Array (); // parsed tokens signature = ""; // example is "nn/nn/nnnn" for "MM/DD/YYYY" if (string_into_tokens (that)) { if (initialize_from_tokens (that)) { valid = true; } } return valid; function initialize_date (signature_date) { var m = NOT_DEFINED, d = NOT_DEFINED, y = NOT_DEFINED; if (("nn-nn-nnnn" == signature_date) || ("nn/nn/nnnn" == signature_date) || ("nn-nn-nn" == signature_date) || ("nn/nn/nn" == signature_date)) { m = 0; d = 2; y = 4; iToken += 5; } else if (("nn-nn" == signature_date) || ("nn/nn" == signature_date)) { m = 0; d = 2; iToken += 3; } else if (("nnnn-nn-nn" == signature_date) || ("nnnn/nn/nn" == signature_date)) { y = 0; m = 2; d = 4; iToken += 5; } else if (("nnnn-nn" == signature_date) || ("nnnn/nn" == signature_date)) { y = 0; m = 2; iToken += 3; } else if ("m nn, nnnn" == signature_date) { m = 0; d = 2; y = 5; iToken += 6; } else if (("m nn,nnnn" == signature_date) || ("m nn nnnn" == signature_date)) { m = 0; d = 2; y = 4; iToken += 5; } else if ("m nn" == signature_date) { m = 0; d = 2; iToken += 3; } else if ("nn" == signature_date) { d = 0; iToken += 1; } var success = true; if ((y >= 0) || (m >= 0) || (d >= 0)) { if (!isEnglish && (m >= 0) && (d >= 0)) { var tmp = m; m = d; d = tmp; } var yr = that.getYear () + 1900; // offset for setYear () is 0, for getYear () it is 1900 var mo = that.getMonth (); var dy = that.getDate (); // unspecified longer time units are set to current year/month, but // unspecified shorter time units are set to zero if (y >= 0) { yr = parseInt (tokens [y] ); mo = 0; dy = 0; } if (m >= 0) { mo = parseInt (tokens [m] - 1); dy = 0; } if (d >= 0) { dy = parseInt (tokens [d] ); } that.setYear (yr); that.setMonth (mo); that.setDate (dy); that.setHours (0); that.setMinutes(0); that.setSeconds(0); } }; function initialize_from_tokens () { // parse out date and time signatures. If there are both date and time, they will be // separated by last space before end, or " am", or " pm". Note that time must always // have a colon to eliminate ambiguities var start = signature.indexOf (TOKEN_SPACE_AM); if (start < 0) { start = signature.indexOf (TOKEN_SPACE_PM); } if (start < 0) { start = signature.length - 1; } var colon = signature.lastIndexOf (":", start); var space = -1; if (colon >= 0) { space = signature.lastIndexOf (" ", colon); } if (space >= 0) { signature_date = signature.substr (0, space); signature_time = signature.substr (space + 1); } else { if (signature.indexOf (":") < 0) { // date only signature_date = signature; signature_time = ""; } else { // time only signature_date = ""; signature_time = signature; } } initialize_date (signature_date); if ((signature_date.length > 0) && (signature_time.length > 0)) { ++iToken; // account for space delimiter } initialize_time (signature_time); var success = (iToken == tokens.length); dc_log ("date signature = <" + signature_date + ">, time signature = <" + signature_time + ">, successful parsing = " + success); return success; }; function initialize_time (signature_time) { var h = NOT_DEFINED, m = NOT_DEFINED, s = NOT_DEFINED; if ("nn:nn:nn ap" == signature_time) { h = iToken; m = iToken + 2; s = iToken + 4; if (tokens [iToken + 6] == TOKEN_PM) { s += 12; } iToken += 7; } else if ("nn:nn:nnap" == signature_time) { h = iToken; m = iToken + 2; s = iToken + 4; if (tokens [iToken + 5] == TOKEN_PM) { s += 12; } iToken += 6; } else if ("nn:nn:nn" == signature_time) { h = iToken; m = iToken + 2; s = iToken + 4; iToken += 5; } else if ("nn:nn" == signature_time) { h = iToken; m = iToken + 2; iToken += 3; } else if ("nn:" == signature_time) { h = iToken; iToken += 2; } if ((h >= 0) || (m >= 0) || (s >= 0)) { var hr = that.getHours (); var mn = that.getMinutes (); var sc = that.getSeconds (); // unspecified longer time units are set to current hours/minutes, but // unspecified shorter time units are set to zero if (h >= 0) { hr = parseInt (tokens [h]); mn = 0; sc = 0; } if (m >= 0) { mn = parseInt (tokens [m]); sc = 0; } if (s >= 0) { sc = parseInt (tokens [s]); } that.setHours (hr); that.setMinutes (mn); that.setSeconds (sc); } }; function is_digit (c) { var regexp = /^[0-9]$/; var result = c.match (regexp); if (null == result) result = false; return result; }; function parse_delimiter () { var c = dateTimeString.substr (iDTS, 1); if (("/" == c) || ("-" == c) || (" " == c) || ("," == c) || (":" == c)) { tokens.push (c); signature += c; ++iDTS; return true; } return false; }; function parse_integer () { var foundInteger = false; var sum = 0; while ((iDTS < dateTimeString.length) && (is_digit (dateTimeString.substr (iDTS, 1)))) { sum = 10 * sum + parseInt (dateTimeString.substr (iDTS, 1)); foundInteger = true; ++iDTS; } if (foundInteger) { tokens.push (sum); if (sum < 100) { signature += "nn"; } else { signature += "nnnn"; } } return foundInteger; }; function parse_month (mName, mValue) { if (dateTimeString.indexOf (mName) == iDTS) { tokens.push (mValue); signature += "m"; iDTS += mName.length; return true; } return false; }; function parse_month_text () { if (parse_month ("january", 1) || parse_month ("jan", 1) || parse_month ("february", 2) || parse_month ("feb", 2) || parse_month ("march", 3) || parse_month ("mar", 3) || parse_month ("april", 4) || parse_month ("apr", 4) || parse_month ("may", 5) || parse_month ("may", 5) || parse_month ("june", 6) || parse_month ("jun", 6) || parse_month ("july", 7) || parse_month ("jul", 7) || parse_month ("august", 8) || parse_month ("aug", 8) || parse_month ("september", 9) || parse_month ("sep", 9) || parse_month ("october", 10) || parse_month ("oct", 10) || parse_month ("november", 11) || parse_month ("nov", 11) || parse_month ("december", 12) || parse_month ("dec", 12)) { return true; } return false; }; function string_into_tokens () { while (iDTS < dateTimeString.length) { if (parse_integer ()) { } else if (parse_delimiter ()) { } else if (parse_month_text ()) { } else { return false; } } return true; }; } engauge-digitizer-5.2/usermanual/dialogs.html000066400000000000000000000025611222557406400214620ustar00rootroot00000000000000 Engauge Digitizer - Dialogs

    Engauge Digitizer - Dialogs


    Dialog Boxes

    Each dialog box has its own brief documentation for various objects found in the dialog box. This documentation is accessible by clicking on the What's This button at the bottom right, and then clicking on an object.

    These are the dialog boxes in Engauge Digitizer:

    engauge-digitizer-5.2/usermanual/discretize_bad_color_after.png000066400000000000000000000003721222557406400252100ustar00rootroot00000000000000PNG  IHDRTG` pHYs  #uIDATx1 Om7ZTIENDB`engauge-digitizer-5.2/usermanual/discretize_bad_color_before.png000066400000000000000000000151521222557406400253530ustar00rootroot00000000000000PNG  IHDRTG` pHYs  #uIDATxyUϽz3{I!yl.(E@Eٞ("( IȪ1@# M Y&$gޫf`O2齫/ton{sUN@[C$A#-GZ?h9bd>6^V{P'0P' ڳEOEQNGdHMJ=Mz?0PHq7~䘲@FO0F:@IP@{FnWdx}@)Įfr4&+bJ: 8 La}{ V|](Tn?W{Xz.i㇚08%:s Ӻke?\ zM=8ze-{<>B*֧QE6oo 9[[x[gƶL2>r(::suc*H sډ[к+ւnNsWqIߊKoW $Oaݜ/GKOf=򽻷SXĨ%MR,'"٢,tyI`=Z^@3W zJ~SHPp#H!Z>V] B\% h9T"2ojy9,SG )( rW v+>@-I% ڂ۟)( r(ޅ}GPsS@Ԩ!Ce@JA[^r,u6sh)hF] \cZL,}D5Ic:,yy"S!Mv.&b,S--I[ ]UqH÷E`nO\ -/ $3F5#J5mR,ƨ%9t,ckw 'u[N oޗC+cv\xIy%uuQ$Z+zRRn-LRu6+fhS6? }OUQ%JImZ91I/!ZIP[.Vz9aE03TOu[q-W_’&)Xޕ%?{һ0o%'P|O2 W\H"4_Kõy0} ZEݳ<vCEGla=!E85fG-q*?eϣHM ]|?qchx4Q7vSsCweh h):V.b=rkÊ=anGmZ3hv3M!ZuP;ǧ8Ju ZnI1j)DSXhv`ВߠxL󛐩BB22-y Z~Ӣ8S.AL͗5 {cAu$A1|J4m}O슼-AY,Qay>O Ai,Ev2{1n3\SeCi7hvyFR/?hs͉USy~o-G=TT}Pzc^6C$,S[KK4ꀉ|6ƻμUv_Xېx7銃VF@Ry "C0,eQg 2WqS'^3W<ڭb156! ZԇV-A>BZ{&  ڣ:Z 0R6~V9Nj> O_3l gSh"_\vC+&i}j%BFuG蕤[hsyگ&US'q6g.d=p(aű95 oˊ3XL+&mj-X/'2ZZNC(R]ڤnc( D e Wj+JBhS[q9* ӈ RWUh+'6;RFܴ4 ]VbWܨ%Cչ,UvͣgCř;?pںPkl˘B NizC`&#E2D/0+k7̖; @s #TO w+-G#TBtpPb@ 8=@SgmV׫Hm;(zNB:&]U}P샖|a XGte<]x-?2n4dkQ ^u =d4ۇ#pԓktձ nGE ǿ"zM<JOrL{7pҁqW +>]wYz9i Ѡ&e0R>›iARZ)"ןט}Q`TDIY>}_y@gXgXcC+JQIϠĀC2-DDH{!cӋ%WigB+DSQAJpaV/mH9Ј|Hh~j0^C z9qH.?P'z|Yt("{7󛢹h.ݿ%T'ݳi0ہO2B,м(\!@Y@= %ơv{DC$.0)2up|yZ!:h^9Ҽ٥iŻ ]3ӑDM o_,M+>_pa ZngJOaޅP|$B+#o hQ f#Zns%R(:࣪z3ܮĘ5=4}[;uᐽ`Eg[;rÅQhFw*ߖHZ7F"JRq.∖(Dh]jǭf|/drVrMG W+q:FޒS|ɨ |`R'A4`nB^AgU:ko9nP/@řb/9.:gr$hcUaTx|U *&^*>V_p=3>Uqzlbu[kdCI4RZzJcBˑ`T:gT:ZMJY2Nt<6LV ܊r N0dߓ1>{=-;Is$Aˑ)K[M tSëM+9*=h9MK|XL} 2jY^r,8# q| ,xI~ϺLj )42Rz2+>ʎ%O J*?Dӱ$Vsqx7Or>B[٫fBB+#`ԲNN@,[oZ}aLE8gLEh=  zw,U6ֈ9J>pI廟ebëPt ЫH1D@ k@uźj2F%!$lIY>^0R aCVL>j ~Vs] ax%Vͥ|<4U׃|-qrt$eQ;T˷F; }-2DGCL*GJMGTm^qZ!V &"DO wbnJɬ{c1 AG ޞSp:/npAёn*2 o6$ARu@O#6AZ{} -Glu@X#J ZgӇ,)\+%Ziˁ  brA#-GZ?h9brA#-GZ?h9brIjgxl>͈!?3JI;oQ<0T;ﰲ]CuJ8_y{#mx;b7rdPә[bO$;H&X"6jPyv贑 .b j2 `xtHP& ,f-5%-+AdH)Wn0ltG!V&^daï BFi[st'}I8hh0q'yѡ\!FVϱ!ҩJ0ZfeͲ|]_0a~PIr ŽR~=RI/+5__Ncп\ZH}"I*xJk_l=:2=T_,PsJ2}uu:*~lbzEN+YiLeq~>mgQ+Iۊ#GF#?h9b?G@ؤ?h9brA$f_IiGr٩apf4~5 :dx$[b](Bqv?FޮrtR/jdr X/{~ɁCpt4ܳk dRk ܿu5+2Ufh̃5+4!Ճ".6+LWwc'V`biс4]?Z8/{͡~@ɱLy m[LLNQDq?]v.5Z}];qa;ۿg߱ewI{.#GdO,ӗĀ !tP;i &+Wit `TKQ[f95/ߤ9h%P*y^jWjFrȃPfzFﴋ u&jb20{!=Gˣ۩^Eδ?سߡ7VK·L[hh{f>@*5|csuyIJOdWi$FW_]R|GH)^{^<7sh!G{Txb=A{rU9RGvܠh B 𯕠(Sޓs6j.Bmާ f<U ،0s.o6ǨyC¯j͙<NQoV7}jx>qigmyU5,cR>R֥1PlT w+S%^#\:Q)e-\Ƞ]X:Zu~Oş'kDv)3lVtUv*,W ^Eތ뛿{vxZܚ Bޕگjb$ySʨ *b¯:ﳀ[|$Ȟxٔ5W Zr{̧3nݧROrG)fHsG PvI=i^{Nv7yyߞڹ:}y/ך%Z ғxz17J/'l$twˢtW>&Re ^<ثNcV`ܭ+ b\2p}V∵t\l I3Zi"1!Q+JOa'W9zܨ!cɑⰧSbkk舻)@x[ y#Q 7o $M Fx%Rr . &O憻#F(塡t:=00077!4eʔoN+hWwwwOOP("˗\.w7Bl6r~H$l߾!=%AL7dK$uuu PH@.YZZr{zz2P($ ç#x.ѻжmۺ8CXX *&<kkkqwޥAAAs1663{/_b՝>}DrKKˌ?!fq9Qoٲw!$9s\rw^tttr~-*( R.qWAYry;. ̙3&)_֖#M- ,8{,* R./ ÇqBAry100p…܅P\^0 UP\899YZZ޺u w!T5k ?HlKSSSjj꯿Jggڶ6܅P \uuu.R rvժUx)w:toooܵPl<}4*R.CBB?Z+**pC4ʊ㍸<55O?u̜9߾y&B@:)gX ,[ɓ' 򁁁>}/q2a K򎎎*Ev؁ ~طoD)...x" `gllxbq uuuQ***eggEA'0]]]sssw-r X& 6>>C=^ 4iR\\\ww@ hkk344]$JP( Geff;PSSSSS TPPXbܹsR$Rx˗nٲ%!!aʕKLLlhh`SNK\#G8px #Gܾ} w-(%%%wܙ>}:B`hiiO<NG G9D)744C,Zn@.Byyy---***wY|]U\\{zjQQQKK?r$9eq)|^>y/ Z ,<==;&~׫,m N㏝}ň|M\QPPغu{||EpW4Nݻs%֔,ӔN8d2;;;B/ϸ\nkk3FKDzuM6$ҜfΜY0~O܌?˗<ŋBӧO@AAA!>?رw!R Ѷ|ϟooo)//ohh cΜ9ǎsvv>zhOOϋ/D $/޸2allL|geBB•+W–,Y3oܹΝ;EEE `>555mm/ w9\E???UU՜ qR4ҥK͟?舻ׁ=0~555mmm>&&ѣG+lW̘1y ݉ @ LLL6o޼wl{{(~/H9SSt300Ѐ.c6o<^/^XlˁX,___ee徾>??sa@|}}B"h $ 4mͿ򋇇ࠫɓ' I8 RȦPPPRXXvڶJ{,ooouuuEEŒ7ovuuEDDH}"ؖ<<<7nu۷o;88Jkؖ"jjjh4_~iӦ=}vܿ@|s=w\}}}JJӧO}||KKKq\>)1))6,,;p@UU{ `XncLLL@@YEEży󪫫wƗK={t:4m&kkk;;;mmÇlݺ1##cͯzD>\Be۶mVVV8FBNNN{VwwW-,]g̘`PNN[aa!X6mte"`W^^+>.ѶaȤItttp7 Ԏ L__իW@AAAmm-񸺺 djj&>.?~_}ի/_$|tR~Yfj77:rdԻKzT;$$ٳ8$yD)ǏyKq~LqXãϟҥK.7o،zD)g߿hRD)'~*R~ μ)))))))))))))))))'I!卍O< 枞F'Ѷp s $J^mmmjjF@eee'OhN---c- }w W溺%K'/||@>u<~ʕ+-agg71xؖζ<::I'SL{, $JͲe~W0D)⅏[VVVdd$IkO>=mڴDWWW@d2sss̙/~'Ѷ̙3!}~ wS/2!!A| BWWW|\c(˫B%%%ǏBׯ_WRR½fu<|=66vĸbooÇK^N|M\ss!EUWW+*IEEEgg3":::nݺi&EڵI9̙3IQ]]}'{233sww1;;!f  s$O*===ɟW$988?'kp8{B$Jk[[חoeeejj)@☘CCÀ{O DFF, ?$JvxxcBfڶm^ťy :SN?԰;*RO`0&M1112yLBSNҬ=`F#(,::Z|>cGu舏Cu닏 >H9>H9>H9>H9:?cIKK۸q#Nu)UUUeeeSN͞={դ?/uYZZ3i~~~~~>Bˋ~ Ν!g*>˿+}}}@ 3f777y&i?!E Օ0oIIE /^$eBll imܸqx蕕?088f?N/?]vb```&_\\|5SSSSSSZjmmm]vmmmmJJJAAݵkWFFi'''9r6#BH__fTVVJA\VSS ggg___uuue˖ ,YD>xа6 gܹĈFmmVVV~~~WZ\nii)"gF211љ6mڈ vݻwoK)۷ܜ̋/.]tR500w񸧧իMCCCʦMJΤ%%%555>>>*nذ uǏ's{&''{xxsg}D杧rrrʞ={b8޽{? '$~:;vd2̲^&I{۷oG{Kڹs'BhG7l0%/]G\;WQQ1eʔ}xɵ644,\pĸD>UUU#""RSSI;0228BӺim$IENDB`engauge-digitizer-5.2/usermanual/discretize_bad_gray_before.png000066400000000000000000000500641222557406400252000ustar00rootroot00000000000000PNG  IHDRTG` pHYs  #uOIDATxw^uϙr}vjwX$ T16qlرc8N8v$-.1B1 BB "I]iwyE v]VGg{ܙ3g~ְ@"hE?E+/2)ZyOʋ N t,jd)rC]^Q>k,!%ܢ>0JK_% @Q6B 2 zqo\c'y|:Ss~^~˳?RR m FL&O>,F+W}a|qB@wAaҗ:Bࠕst:H$2\r4gpvq.WW`=lиRe!bFD//8rM<5B緢Aф\kmE֗^~??oߛ6ygGZ[bѼh{`΅sf̚QBO`ժU͒up9v؛o9E;v3F`@9 QFikKk2t#='.c̗>`_{LhDRXcXO@Фd ]֎L&9g֬]C|'J=K!hr }b5 b1!2uT{ޤCs\}]~_z.9sQZ3dd Dm]=j܃  }vמ]{e-r>sTSS}̒0ʖ$K7rmms"B r`YssM0{L"CƘ[V*q&<BA>}G?ޒe{Ǝ{~ddz Ν"Ö~ 0R'nWYR" 6Ta<?t%+=xAxTNW7o<ؽ5l鷕m%xG~OHjk-//vE C0 1jkj ؿgp|)6oҵO /掇~WڔS*=,"Qfz2{-[ v--C" sk""j;$ʙL /Z [D+kR.}VCA)ꫯݿz}]g T:PHv,'f3"Ó3ʭΞJ7W^.Zy8tNO1HM]` =}?0qVΐ(,09$:aq_^]`Wd2$n@N&@P55C'R%V9\pɒ97m8{Qń8.\EOK9]!*TC*++s\q{(V 2sbCv钥mmC%hxp&Z53f,z|Йs/sMv9uVcNʹKܨ!>)C0t˦-d׸σĜ |˟]>}48\4"),FGh5i` FO׬Y=z4rSkoo~> @F թT 4urLN*ʒ]2w#H9rdpOL8߾oCo'Ne{1gcƍ-x8 m#$_p6ttt2I* =$ 8p… 92]5L8A˂* r-W\QUr ǩa1"S6CL:6֐L+믻9 vW oS:AB~qՋ0k4ikPe}PiŐi>k.!c(И\@3.BŎ;4cH n۶O`AKVcs}X 1]z%e%/~M7I)RK x ԩS7nNj gs:saNi2'ع}g2F*JNNIi.4Υr =ˮuSw[+8[h1W xI$A`B /KVFgQn1mVUUo|iӦS<(c׈Eo`$ 1( PL'EdlJ>l/c/X@D_Lv +\];m4xCc62N& g] `;e θJ AIdȑvBDRIĀ'=dhJO"ad⦳wCCVZu*a!}?ԝ@P\ )dRV[/H 02tb"Nk.k1F7k` tNzWUmmĉ7n۵k1Xl^mm ׬޸qȞ{wN<0LjHp9J\۶[k#%A<߰qCو28Gy^$ېe_" &11RH"Ҥ/+0qBmmmz#gש,:$.D)$ 0ɨDcLkGV2jg5?-TV !֌ᢦex˒ h#>oouuu XjhhƘeVϙqq* _fMm]m]m]84 Cb]B sa6E#G~xԍ 35w! "@fÚrtv@^)v1vM߯4Qڏ@Dl.[]]H$#ޮQyt bxL)US[c/#{NҞzM##Osa(D:yp a&l:kݵkWEUEeyerD2Bq@0hdPSSʤ-A,H&2i'{gKY rL0 jr3mmDRpV>a*} }헽g?٧}B@ʨ…ޅ:/g9qυ0 c^ b`uKyxB'PsE3|Mx,2˖l6{pƍ5D?zͷ|SBDNn0z/*T\^=νB!(Ik<} '4n޵sرc'C!͍7'xq0W?s.sUW}_V,nw<ϋ0 DHqq}7RX ˣ۬.ҹVvߟ5,)e4Ja!8!{*bw.N{ҥ^zWW0%a~{Hw"c~o>+Κ9│&]/ 1EqW| fYhQ#S_`SL2eJ^x={tMUNEk5RʾwL8U:lV*#C$_ a5S~7~?_ù6[>|PvXs`/?Yj<rxk4Ȝ[cɐ1ͭɜaR!;ҚJ_pʔ) e Y?˟^۶m &_@H!CFK8C8CoÇ/YyOƏ|ݓMOQn+wa&4ִum߶E[C>a14T{ ndݼyZ[R(_Id 7ҩ/,J(RZ?_:a%5V8̘5c <ȁ bǎ;k}]VnްqÝsg}}GnȤ&=O>dJHQZV:N0!ziUYYʩP$-??`۶mMMM+>)fOXk?O_?|J%W,ȅ'Mѡ&$`qr W_{uKKu;g?o3pJ` uuu5CV, dd_@avpzqOg5|J RNZt ߄axx%G.hZd%CӦMa&|ϥ "TЕ:O)%@cjқ飭#GF -\~ػoGeeeML)夫I /'!SBU)Z6Z+zK^S_emX/]{͵Zi  KF hko#E*UL<+9Ep; tn2hx#q'r@]qٖ-[V\nO;IC4!N 3  zwe0DqnЉzAry˖>9|Cz3<OHOr1d(4()C!˩˩q`"2gr 7&_z]m%{n)$c'RLf-;vpV)** )!n6\*˶uܽMi!3ڐ!cғG=z֭Y'c5#jV(M,c̮]Qp,J"iB%if3dy $loo߻oonVե_+**]:o?oT?e1u[{ֺɐNr˜<l$dő-ⱸSŲd&{G_Hˑ۟ՇjiN'sn#}ɈUW6sˣ-G$O- "ڄwRH y8KḐ@98F=vuk׬뤔YRآXbq_n"GĀA~9I4!sUbx9 [ho}ȇ?r͕לzX'.1IOW4Rre00d]X<֥R"SfY#F&;w4*/pĉ;G+JJ+GTSk()9'sa*jmokhQYs}*i'ƍH!B!xHyKJ!ĩkciIiiY)pa6D:?|eᢅη>UUVL闻4I_.yk_8< C!^^‹yQ_6 s{_߻pέ:TJ!G`U~9L*{DW@KN_+:O) ׎x !*<ϛ7ocl+_yɘ9' ?ֲY>뗟(KDh-cRVŪjޕx'~2W\vEm]?rt YCL0w~y,Ch{>ҫ~U>1Pzez›={6O&(ƃc~y"pZ/t Y ._`mjnڷoߨѣ-vY8pr❭{t;\|ԨQw>pժUt]}W\O:Fv&*+!uQKpSW]}K/wɓ`ڵ&M{\7? L0m?wwiq:3f͸=_w}yE9X2RJh#m&>0J_{ݵW_sgyMMM .[0~S@38Y )|O3gȑ#׬]u \ͯ6N9jaWϝ?ΩG 1D`]:͟Oko~;uNǂ64;';R )Y{}ċyf_x>pÍ7TVVP .xo ng?w~VXqW jBrm5(sd"IHd1ad0xgi^|aGGSO>(t[}YWju^|СT鷕32 "nӒeP3dyq%@D"&d%MMMSNe-1ғg.};^~v΋s o#%./|Br0|A,} eecƏAD7 v5@EE}{ ϿuիW{s>ص{]?/1Ƥ/ .<_o\sI3>j8>5ȑ1NAX"+>78rZj}{joVpadrѢE۶n s!P.5|Ckvd7o\l/~ݻwvNJQ%=+/_|EƏoAD9^13f̘1cF\6Ѓ5[}?o-> =Ę1cq;%KK߅|YLң#}Ct_wZ=t碕#;npM7pΟX-[~\Hn#G淾ezgٵkWN&o5o0 w @BuLϰ!^{͵w%Ko,|j={r^Mw[k-[׵~c7f555ƍWg3}}/655 J} p\T*oFeX,rJHB\{َ,q*-/җeӖK^0ᬉgq\$Y2O>>|M7ݑRJ+5iԈuNAY'0mڴЁ4׾Ă?G֎Y3u(X)eȚy敔,z|׶zAFeraΝ&~uug}}\0qwX?WX>Y3z ._?GHS6 Tv/]Ӂ/b8kY%%%ϭXLfLc@P?^Y{uln{:NssܙŸFT}nzMt@\{]w566)NBpѭyw;ӝ* J3A03϶{Ͻ  bt*ѱ&{DgK)FTUA׿u3nLSc_cƛ**bXyy)+fCl=0@HZk.8Y,=}φuؕo:w#pBCtΤI&Mtɥ<;vlذa۶ms.s葉gMQ9atC m YpB$C3sΗ.]t̾j sNtH1wܹ油7=]іU/:sNĂ\Os Zk 3ƙӦZc=p^ƙfC3a@ vۡC:::*++G[_9sET׼Eo 9k[_ܲe C6a?}4&P!ADHk c>1ϯ|~u_IOHDά`yѣv=so7mޔIgnm'ˁ51^Wg&M,I!ZX\+=9Ջ/4y҄qB (Ez|?7m8OAXŻwWq7җ+/O2u; ΀]x5ٳ{ϾJEWU_a_;˩s9+.i鳦^93v̤ee Bܽ2b7( î2LoSA2Ƽ~9~9!%ŋҋUUk֬Yz͝wαCL2e jui({sХbяNdEs2Kl޲eC9yd©v1ƴBյ.9i".[o1Kt"~U)'ϯLәtd g|ES0c֌Փ&Njjj:묳bR*v=#鷕[kSTIIKꜯQ 4w"$ݮ %KDsFNs3fP "MF.ۆtDd4frNw\qgOW{ .\s͘1c?pwlݴ5Ta\4ڄ*$FZkUQ6A*f3Bdc ~ =ӡ[֮[0ʪigO OdYE.b.,F{E+tf}A`AeN:y``+֯[;e8&P 5Uʇ*3/|!E"HĂȆL?c3]$={׬Ys`)'Md_UUbcRɒ$cZkB+E+? նatC}}-[:;4oٺe-nj1cZkT )Y3DTJ#GTW>6 ="1u#߻^rL^|ݯuYwĔQLNJɐ<HǓq0SH+ ]5ȴcڧĩD2Έj0ĬP(jIa UWW_\.Lm>yflkk{mk۶m1}F4QQQ1z0 %Fydֺc{НG#T*UZV>M跕;_.'N@Nn-H"D$ m’gaϞ=Ƙt&n:(//ߺeQ = P _0`` HD<. Nx,1)Ҿ;e?/DDϿ׿u)e6M$a !dcAZː*L$NUnll\=ٽW^u>̾@GUY~Cg U72pOS8H:2Gl}m}oD 'MC̀i cbhlj\dwܵs ںs緥rrUVeŒQ'k}{!J3ƈѥ^JҜT:dpM mL$7>z(XؿoCG[[|cgk푣GXr7qΝ~K?F#XV[FWo2T^Qfq.km!E@a{GU6e0C4t{m Y!ĜnRJ%≶r847R)1zDcq n!C wzÒV O0 x #+U_҄t"eɐFRT"Hmw~g?0d3E xFr8sw='cg`{ )Ps"0hfܥ_~BނCf"Z5w=]5,Me4XuL H2uC&IPsCY< Oxk:i&Y_қ@$(i<pv!d,/wO#Nk`-" YBā_}O_uoqq ")E@ gRʢd).G^s]?J_F2RdIۺ$ CcL:^}(U 1Z闇&c})+/ul3`dŒ0?Ϋ;pKTNM=x=G)d8?ݗ~*^LU,24Ƀn5c֨QbmD"CgxdJvۺlk"C<-ǎ]yE)2i,?v9e V^dS"ßhE?E+/2)ZyOʋ V^dS"ß[ K@@D*9X ~*R k VNq!Y(SNH!BrDB. 1it9nW";Nɑ9O.`Z_^dHSJ)X,?Owqfd'ODbR"C~('MMM?vuԳ'LgG(g )і pIP[~뷬߲eK{F:΁kbgӬ[l !2t"75Vr *w,c$Nڛ* 9%kmƛ 3cĔRJuV9ef;wqC,+(_`AGG=s\ |c*@?ƘAHMsc5֨d"@fʅ9M$-VHCWJ!1&ӑAt&SɿPX KDD@LWDBb BDks+5j sfg2#GxOM"KEV_FT\RJpf$F"g 1Zyrޖ\%OzA,J`y#Gt.LPxxV>dJJKxQk?,=9ˎ|K^$;CSdh붭׷Eӹ/d23Lkkƃ.@eL&A6KŬiϾ=G2T, XT&iioD"Qpoi" &5C![޵[}p_G8 @+ݑZV;/ ^S MFܻ{o^dR^kKW[0o=XK@4@SK%q +۵@すfJ) @Pd9>X )kMYfC7\OK],7"E:~^ꫯK}va:6ڹk_UcX&!0Zez#c 7 Po:'Y{l]+5? f^76tw|Sԡ6V d([Mg!buU5ۻ l߲D,!=sr&#tW0e}.ɀ>9hҁh[ 0Ȼsxwu5ҵX9j .8n;YǏd/YѾx FT0ڼTdE] 9"́Gij\VsZ @1Dr.+XZk|tEݕ"F(IV /{Clnn6d.Y:qs9'T'Ƙ6L 2Lgɒd&a'ƙ1;fFrm{KF2鲤rłY},{uO' %I@pdɬYbt99L\T/ˣCfNTrD; Ep]"TtݷG[ᒼ̿t矯Z )|ŭl= &SϾp6CC-|!uYKKJɐvdm<\~KL E>QÀ9u <Y?" O0ҙC%劵V˫:|@SIiF6m8Yc̾}6FXc<m9z(@Q E~e.ȀI)6%2D@ (DP &K 2n [ K%DXK!5^`g –p(XL0d=ș0(^q>d 4PeTp8 d{Lp%DnZ[/-kA">r{!tb:2nCfx h@!s̋/1Ƙ9Xe6PvOvsE)R V^dS"ß0wf`<.zq@sx,#k,c5tmWx[vGMƂ]gJ=-4@uoW'tnJ덇,[2zD</\5rjhlc[nq\1w$4+S,\6ǐT3<OGT(\3 6 ڽks+{嗛[d^'"ZB] *"Zk1xf3J:.-+'Ⲋ#ذ~~/t1fK,ݰn˫_niiYn1n[h#ŋIgMQU&l2؃>?+26FJ B-[ǒ)oR^'LG2ܱ}Ǐ~5֘y&N~|֌Y.B.:B l{׶pٳ.p_յ~ OEի~3&td?E@Kv+qgΜxk… ?}ԐR>ԓV,s*\K]:9cƎ47,G&5qƻ箶 !0dX<>S{++/{d,c. 9}ǎx}ѧ==q݅a2{v>T*I<:jHUWq˟[?{/"VWW@6?MM AK/H$.r 8s={u ʂ<愗FHO|;_sm&1₷mݱ{mywUUEs.rlnmk}?DTVe,Z ߭5jk->J@?[[6 ĉ[6=~d}Yi٨QudSY/ "w06nM@D٬ڛ[- *k7tZH3cLIiw. EZkT*=?HhXkQ`:;nmL.+/'ʊJeTg;tт  DL+Τ=+lzG5Z b z .,,daYMӤIH<6x"~!r38H$2{ۿmM2<)z?u(`1 Dc%O/Y~ݜ \r%py?8bK ΆֶP/=f9>~Oe %2N),DqBƘyJ) V^Vx"ZA!R2\{J6lٰ[wk"JW- fCtRvֶ}7r 6׾|[oUzR*կw~?q1/.anr88P=4NɤcB֗2`a.d Ѳl@p֨✿˖/s12䜻CdibTk<}lYwfD͌3P;JK7l߹xPYf<3f>i@hXw/pAA.= Έ^[70ƚgA6Z'b@̆CaMRlW.-]pUAΞZ P(eT"fD'}9r$W"2$ @ؼyeK+++_z񥅋655g>왂v5r9` sҗA 5OM`:cr>dc|w_~ҲD Y9A Y:~lc\|%\wu\rq%占C8J)~Tn|1Z >DdYc9hyG{ƍmfXs9giDljj;y5ӧM鎊Ҋ~tNGhdkV7w _,++feee'N~d#K-7?胕U~+KDG[%?9q?`B ƙ;iAHTnߵeOWW=z]YUYZ^f"C8ZΘ>?)~_0нfVz=Ot˷nzιtK7Pxͯ}/R}w,̆^:7{|kUUoǏ~E+8R0ц, )Rԃ=x[o7cD,K?h b_>޿mcGO߽ODJ3?eҤT{{S;f쨺Q ozM}C9<@Dcǎƛ***täLW^yvݺu )rx=o !?~_.~z\:ow\^}B |ϟwI&t <͞=T[Sk@,O87=hΝW^~)S,ZN<}yBN2@`H!3LØw݉x"P ~&2aW׬۸͟;N8D Vwǚ7]YR'?yǗ׾z܋! :Otȃ,lի +&G;^y (Z| ukmn=FAt7mmCQsr/~DCraс147 Ze-Y.u\w?%KDH{\eUR*AhEPA*؊ *"@b%A Y 7'|s9˹~u.킈+ ũSdnnn{kh*ݔ円GF8VVV`jEĄr\ܽ`XG<''3%%!`0|||pwTs89s\~!`0q腅ⰰѼΝ;&[ZZf͚%HX,VsssTTTaaa@@@ddٳg]]]B"u(Ǐv|||._LI[bS&~v?hZZڥK|}}[ll[---;v@ov˖-}6޼pB135ի7>sݺujw<<966V9Kpz0??;w.(77իWCSmmܸx>⚶sd˗/.h~׿>|p…č~={חb ;;;iPmc.#dkom bU*n+N:555b̪vGy򥁁r˳gϞ={򡁁18Դ|…koqU9nݺիW>WWQ޹;Ge۶ma06lr'N]#bbbrUmۆGZ233 D|P=4mƍ'ODvww744vM6-##ѣGw]տn;w7BH,3 777!ի.VWoq ;vhkk/_] x3u#cǎ۷o01_mD{.J"lvppp{{<6g}[gΜAo{ZH4s 555##$'""] ߳g8צF B[[[s,8p*3119rHNTfffqqq uÍUߊKR&}vfllL/naaL*6bvӃ)B'O.(( *&M:~8n?:tF۷OOlcB r!A3g̟?_~%rk 1cƌ;wKҶ6kH$O?~+_L&OKKds,&M6->>>00077744w9!YZZ;wn}/˱V>}7++رct:wE "-III"w h Teڴi bAĵaaa~~~0.*ZۛmddtQ "NdCCޜѣ~~~b8,, w9"NKKtTۋ('H$ZvmNNq d B}޽r@F###E"͆"ǬYf̘K233qWDY4{B wwVXXW.T$_~@qܹѼznxƌӧO] qLxD"ZYY]p/Vii)BNsܪ*P>_!S%SZZùs疔L>}ƌ/p$I||)S\]]ׯ__UUqc5y￿h"ܝ|[<(Ν7.jp0::z'|ggnncuwwܹ!DѸ\CpW4֭_oUlmm7m4 bԍxiiŋCBBF[&N8Q(㏸+g:Y]]-tvNt@ JJJp5he~q\fy<ޓ'OꅰWͽ{]Xg^d rƖWk ~`B:222\Bh,q4 \dɠEq<>322 .]aua`+MMMčN'N1?1! tW_kkkCCC@@@]]qqq18_|r[%d yDڽ{۷E"ɓ,Y1ŵ!4iҤlacq "k׮}葵5455r 8c7o2LЍ7h4ZxxT*qH*؊?~B ... .] ⺢_'O711]vAuݻwlق0asDDG}.m4# ϟ?ҤI /ݻ__x[8;;Z w[qB/^#~駙3g?xԩSq:8ӓx`'---qv`8Ã84wuu5N_lT*J/_]X$!!A7ܸqٳÇ q;4sYЉ'I#obbUTWWwvv11;1СCkDhRTTTqqr_TT4ebE__40rʃ"""ȯ5ǏoooE]paʕUG522"I;8a+#.\@,;v\j` Dݭxff VK|.byͧOVyr[{fT\.744>}:Y7oT.&.CUUU)G2k׮)T>^9z~~ҥKN8<q~m]f Fm0cQ~~~ss3|j"4n^xX%--[X8u[*؊*Xx?8VNT;@AAi8::J_|T8PAAAAAAAAAAAAAAAAAAũuyruuÇe{{۷/^x{{WVVMLLmۆGFJYYYcc#Ge2ɔJp]=kTxXXKLL B 555##w.n (" 77իWCq\~iYY>&vwwWVVX, _X[[Bp}5a8VTT0;99(7szj޼yK.U>z*B(==/\nãv}]BA~\.F===owѢE}}}C 888L0888&&F.{!!!{kԺի333333B  wwF5yd]vp70*???ݾU---yyy2x#@FZ;w###q7%UQQ1*8cO?tUt###m'JL&i]/8i-"Bf"ֆE/ s!-LVVV ?uꔾ̙3tkO/++swwJ>qV!bEZsO< ˖-#:^VVFBD%%%uON[?'%% zswwG"##["y/b }6B(88X( Pww:6*ɼB6m:vB֭[:11x<$ ݻ79Hy퓶#s>wvvFEE͙3QoDQQ5B̈s85k<~xH$Zm !חI뵧'B̈^#]rI6)*kkksssɬ}Vmnn޹s}<<f˗/SRRJJJHiKK{˗]]]I(ɓ#?G3[}ƎCCϟ?GDFF L=666ǎ#d\.,Xpw}"''GۍFEE*888sj>hΜ9%%%</---88x(!*/,,,FL}}}{{{D⡟~ҏng ̜9;pMruҒ}&Gx~{tsBNs\NPkWXq̙[vuu}+ۓ9ɄEL___ %&&"VXiMI 244/]\\~3ɄBHLLrJcccOO˂I&f8p`ΝzzC|T릝P(\x1]駟oNĉٰpw 7?e$IENDB`engauge-digitizer-5.2/usermanual/discretize_ok_before.png000066400000000000000000000402471222557406400240430ustar00rootroot00000000000000PNG  IHDR pHYs  #u@YIDATxwx\33ޕVd 81ƀiPB&Z(B$^M C 6 &46`Kvޙ9ʲdveY-V;w;w9!AFFE- Ȩ-gs2d&L|~ڣ6d`tﲐ"!U'm+}S}Ũ-{|,jb5<`{V#}7xǏ3V5t@ΛФWC 0P{ohҞ}oa{`=TEU0}-\ӱ/}F{ƪWZTNj ~V)%,J/l3~ ߘ3gE_+:v'N<oͿy u&0k}:献zm3"aYb!}n҃^xjߵhQ(#".L'{DGy0F'$+ [a6^zN:7ߎ"eg_h+ hќs??CLP CVqkjz+,$Ok@.(^73r^ 2\ Nma]~DEՁm-|:|VAS T(AY߾544t5 Ea&%.caaBGn,Yfnom3'IR*A9ll{tO¾;';|o#GֶŮ2O1bw\ӥ$EzQIDJ[3ܼDymmq礔\{ݵ>IW^gݙ#VZ0s]]*䭇Q}C=8(*qgWl:% u*#q^`ϛW{ .>sЄсN TN'Ly~"Eh<??qǍ|ܧƂsR 1FP[mTb t~PM&=t}F+U} h(ʛE4P,J={>ҋ|A"rڣ^xC KzcgR,W;nn˯k4\ DZjS@ aX@*3:!}u1(Z6lք-u5 g\w^:c ý~^{ȟ*mqWLT-@bo^I($ ]>  !snz(Yl[@(U~J_-r[<;랻^~嚗e]Yw0CR=&#'0H#&0D˔+q&.$w^kJ+y,.+Z'@$?=6qAFEƘ (%ݯ2uzA0 CmVSNÏˁjAWzwvo$dr-A{/qg"^R,l!MRߣ}=~sg<Ol3j27/GċϜ*en֚k]x`x*YL믷qA(R̭Ži>dYfq)va?G,c&N6=y\w͒8@ c g~2g Ď=fܹ?(,s&H@&ꊫp ZXʴMm9#I9htYf+r!ws[ߚ/_|F鹉SY(Ix* ĤR+˚C#o٦>}&ڭ}$=Z/;=w\NJ%L"=Ir8h}{WΙД[ h1|WJ{x*̻[&}[W(';O {n +ҟMB?yޅQ}>tD{9zN; l5E}'wcS0qmwv&:ۗ},EC<" "$qKzN%u*5Ep{'Uixh1QWy:/xQ<ȅH,2zͱ5pEn;(CC\J4XkXDΛs^}o5ړy3v1qyy.|C/Jr^tOF`a?|w b6ޞY*mXWjdصiz[M ˱x58$-!6z Ը*)] rƧ W`b *Sx-w }j8 :VXgjoX͝9K;TknXtYS0{=wؐ\qyTgƍ7hA?8)s`X-k.IR|ǾSq-te,`"2c怕R[neoV" ,%ŷzY^WSZEˀ3G1ȣכƭ<H[%l%(7zEZR <oaTF}yeD ּB3.gzꈟ}Fkkk$W^sf[lֈQaceK7J(vNfQ 8@BUD"_Rl`*vנ/.AD :H4z}`sm"qPi@ij ڣJM2HaP)Ti 9Cd@+ Ǖu?AT!{RZ 뵶Aސ2ݑ@amf̘Q,,"Qs1q_uUʃԗ2*Z6Ɛֺ+*]v٥ou9'"YUוT=Bֲ]&< y.qSr^r%iG@-ھ?ha0އawKY4jDD{ i@o1eYfy0>FՖe ЇpѤh C||(.|I_bbT{mv:Ëq1VI6PK+K[{6O1[#T6,d |͇ v=wXkA(X Lk&>i5<묳WK7wR /ONSw}Y&L|7fj#Ya@@Pd&RC⅙M`سOfSRAf]༳c vr-gL*́Z__&3.HV jzYf)(N*A ١@8`}g3ӶzֹQ!@zVLt] "udM~wjәT, $Z*X,},[mV_c>Cܨ԰Xkk>)%,wȞvK""RRJ/ &A.HK.+=@t L.#.qa*v PCC{9kjz\YUK.&\IT&_ĿhBKOCiEoom3O4B\ZgRAה:c D#׿5{F;tI8vfiwԤҞ\>Ǟ [aؾ{{_wu|~I_eF,ND:_~?O)SMt_/A'JNbaǝvk(b/X_{o7^{cw:ǯ3f7?iuu9 |_= B&xo^n⛛m(jHttk_"}\ =Uz'O檫M]t0g55ƪ B,pgU/^!HexYk 8AYرC_ԝZv`1\No튅>03'{/",`/ ov{\YȲ;\/TKC_U4g[=ͱCd>5 /iҞ;"$8.$`BGf}vؑG>#9eAMH/`V&^sEA3_|?>0`ƬgsC7(3L/>/eB:A:׻};{dv}4hĖZ5 /)%eKxh3!EZ[#{+bc\(ྩ/(d{/ Z]r5W^{Ê4i/-3}P_<PF&Hw[o!X+O֦BIX}cQ#XbigKUVD:WB6q}W_hPR*lF_rAtg?iJ®,&hq苫|Sɨ гg>+.\zkƪqtYZ !C0@Ի}qLw95D|߼}?;Dkmf~_YtrE_0I_iUc}qtY\]/^ijJ69F?>Hy`{p1nj@[T^\bҹ DeQ#Vq9~6MM*׬nVru!C~7|[o5hwq6t. ?=50 KH/.ѦIQzR*)%:e2pk̼ +^|Ňygr'ttS^cK,J aX,6A.;/LMsqF^wuƎ;묳N;4ŊtJ>ť&}CAXoS1\0 [&ь1 iϭS:YM$q֡ۧ5&.,i'aQe)R&0U՚~}Jhc=vs\-"PiPV87Z<Pə ,`^_y~w 7 śnI)갔fzfD/;`4Z1hРO?}={9nn¼y`h R _\=e]Y˯ HJIe.[d&^MD@J+noG ;{k.,|-oK pe4rpРAgy֎;3O{҃f%֞ī*Ѱan=vt7nqXJΕg f ``QJع8ſ f᯾JƉ'n@sn`aR\*%"-]b9 +r >3p5Z$ԥ ;:;1߸λ(VHDsaX5ՉecmgW_6w}7 ñs1;s}]=e._ h"X}K.'?Ѓ;b{$ BM*Tg/=GV]es=^oے-#"xB,.сzYfs17;ocotW栌'Zk;6ñXf'Hg|>L_)K]R|lCа3/?ajk 9hU=tY$X/nzG_ܔK z˵V?r\0gYyk}%w| B00a%NJUօxѮë9pE]U/(ХR{Xl-_7Έ7ڃ3\R/^m/K Ȋ;|om<^S|k{y. #44?(4pnuL_|Az/,V_d3ak4b}*]}qWURRb8x}^z鯾rNe;a]`Ic0$ZX5Lŵg\. K5^™f[lqow  ^JūKwK&*mͷ?~9;g[wB8=fvz19[k=w3WMX LNi#Ҭ/^U/.^yRح^x_:?Ʈ5K.d:nUɠxl/uP–lk˜_v/υ9i("$"c TjZx1S_xGME|,FD 4GP+MXo 6S=}oO<b2I I*?/()plk/a./wy8h@殻&:[o?]q@AlT"=z͕ 2wQF>_"I<{NXkEDB09A/}T*;ڪr!D9G9{oT/Wh{O<^[nr-wmzgc0JmP Zvc*zlκP8R’nbKq)WRˈR'tOfQx|q= 49{10e85ǖ6;Hi(@AeQX@4$Ir)'GwϮU&ߚ7km4icg*V\L`Xkt͙$I7e_J0 S!C/>g=uС'O>&no`((RhڭZi MzHCGf"r% ) ny_Opfrr3> /hD LV I{_g 0Y-+R%뭳'V߾ ]wmݦ>36` &4 j#͎%ݓx@;f6a$.S胝S).zGq댛Ɔs>g~gCIaF(ll(0y@V7= O6(FO?1kqmb(NiU__7Xk$>10ʨ7L|Ʊ3f_#32DɗO>Fz'xQ.JAXk8 >pL|& C~뭷֖bbf|{.z*=o2{c&"b* |@PFZ|{$=3eF9jͷb>X) pӇ0l˭̴)N 0vcL_fe0 s}:$6 CO=[ou7sΝuY{wcSM|=yuFΗ2 i |R;lj\.~wKRJD|޶ν+QJؖ1"isiRu$R:^Am1)%a.5!Eyt/~@k ?=Ϊ\Bi^kx9r9sc8ofZ~kSO](1s>Ha LZkÎ LFh`3_?_OG Q`- ʨ0 R'q%=5b*+okz裏6v? 383*PSNyWfgK:6W3d(RRBA p_z(a!{1cԩSw}7e.ץ3z j@k- "򫣏0tߟ|"o H s^}}@s|Hh²{Pk]ر!u设֤8)̬nkkkhh:kg$ID7h0b+( .2׿Μ9墋/tSZM{vZ q)1&0YV zt=6DJsT{{\}-B [gR7"r|yTՑX Jyh|oTOmEk.q=7-q?AY Zn-b*R6EKcy|ޞJ"x| oM/jNxS}H_Qc}rr$v1Hk]c5`Fz9 8ßy87hl=QWWG _gb##ZyL.q饗w]CJDSMyd0/*T#R JK^_ًT?QtGUya}qW0wDAzѦsJ ,fu: H=Hˑ'Ov"I{`8ܿ6[]³r@@1|cEEcK8%ƃS1QԳ qoW^~C2ú[~ykV=9ksi)h3}nZ6}$nQb9(. ºv Kn@)﫮sx`6Oo5z/^)ߓa`G?|1'0A$/[2'>}q_6h(HchM%N u&\y<'_6CѺ -^R qmXJd'8 Wҧ/. (84B6m(`!J@(2:;;UW&S}q! ㊺x􃙾x7CjKK8ZA5B|.4M㼈닓"MCE`96Z؟w[_˩SrHS JBHLRs@ J!=XWE_a$esi2}^@e0__o.*e+jE4*)[oQ:}328U0<m 3.VIK \@‹32~x监'wR1c)J&tfd,q䜌~Nf39gs2d&LCMཏXD꾓!I,^g  yeTǵ|JicfYIRfÄw}o.ZAU,:/񶋁UPnOZkMg}:Ƙb[1ۋ_BhuKM0Z6*qM Ĝ`dKjM` OI\)0i޼6\[(eT\|:_ 'P,R9cs.̅/Raj[oEIcf̘10oѽ('EQ]dK7\cqF&jo [o暣 y`ܹskݢywF^l! I)ZW_qu>s_,Ɩ= K7HJw>uY盛}S1?ND7^v^qRL&>Z۽""RI|?6arMZf}O,,t,^~VlQX6ި^͛gTs(vϚ5T(yyTwy$dM/J@10W]uU]TҁeРAƼ@' VDQ֨!-{X5,q;ĥ=jޞ@kD"ב(5FA M-($ uƷxKI__nr.{TeRm"(+yJhhxԅu{e(C,tU]  B+E*߀( OZ-nW*SZ W"2<"mXu]y9睳цZ{ܖ_( YK")2 "5MzY{ШkY@'6-R@Bk͋F0Zw21fkz.W7qÉxWFyS%hހxӨzسv` ao668lK_JLb'n 6 65o"c^i&NStpC8ps϶XJآs.wG4dH^wr{PՀ`w'vxjTZa@L`Hŗ\/{3mʔ?qw [kr{7|1cGxD`/{a&mnmRJSk7{[oܳ9(߮V|?;s}g? Fuשm1k%?.v~g`kklhg}ZZ[6bs&osa&=f#L6\X~֛<_ngqH YκO'6'sQtǟe8y&L@vm$CN'.R眵VD8ffo}.P'_w\/DۊoƈF4b%JFz籰7_seΝO^~mYE$Ii//O74囊uu\|ՕRuѓ$HUh/սΌ.,?`@X4,?>'֑ 49W|N EOmm|K/2% UF9DMgo2U^yQ K>_a T*)RitWBH 2ګFiDHyyqN* [[i@s]I5 .YއPD.+.hu}s$_ZQ$2/_x\|[lnƻ3H(̅¢IHzXi D $"}`5&6xX_*ƂaI%9WSJŮwx}~ߊÇU=N9I+R rKww+o{Λ%2Ľ[]s v޻%I2qώSS|1UM^2Ddi a'x]tGۋA0KN>k JNٳU+y!lў(EJ+UŵDDBU6pߝ .'y緶V `I|fa;"8(9ƭ;W}n\8A-YQ%8/a<O`ij9?ċת@ 4N(hشZ~8i=ɗ}1*6ZC8=ܩӞu=|X/b՟hooQkj7 jT__?t7x<0"XB(D {f{Q)ufE[[/Z>uƆaH2}'3sFO>䱿8qߞ| "m"$,.WxU.ǜ$TY*UWs։HSN=9h6ޭm6dç<]ӡW]u?lcI MDs9-+rviqC뎿  Oyv#>[ח }xqPWWW~u6lo!3$]2jncRgΕW\9d@E_`{G׫WAxrGNX>xg=f?>kP_s5K/4.3?'ƛ 2# "'OF,8>Of~r!5lqB顇:d()ҁ^y啇8nH{_hjwUW]Z#|r#G?vtM7t^{mQz뮻 <~Zk¸+Z(UK1[fXX5қC'{u:7^cƍYyp뎿JR+^ Pa* ;onT5C)`C(r-oPMg} PJc*k!`=!"""==cƌ<0v\o8R 4aLe]=Nt0f};s{0ǚ$$TiYwqkYΓh'IǞ?xƌ 瞿nEQg_VNcC$qzҟ10^/ a=~]$a/q^8a[$bY:t-VY˔YĊ2mn'",2='bEOe)ȌǞqbEs70t"\uK2S. * Vb^ RO㷿͌wgTf hr XQԈQh R{x s7*TD%as@88, XsԨSPmYH_1Xi5*N #Cb|G,kFhdJCA @@ o9aϜQ# sSM%]AE`{6 R (JCL Engauge Digitizer - Coordinates Dialog

    Engauge Digitizer - Coordinates Dialog


    When a scale bar is used, there is no coordinate system to worry about. However, when axes points are used there are two coordinates involved.

    Engauge Digitizer initially assumes that the two coordinates are linear and cartesian (linear X and Y). This assumption is the default since most graphs follow this behavior.

    The coordinates dialog is used to select other coordinate systems. The coordinates may be polar (Angle and Radius) rather than cartesian. The coordinates may also be logarithmic rather than linear.

    Cartesian Coordinates

    Either cartesian coordinate may be either linear or logarithmic.

    Engauge does not need to know the units of either cartesian coordinate.

    Polar Coordinates

    Only the radius coordinate may be logarithmic in a polar plot.

    Engauge needs to know the units of the angle coordinate. By default, the polar angle units are degrees. They may also be changed to gradians or radians. In any case, the angle coordinate must be linear, and cannot be logarithmic.

    Normally, the radius at the origin of a polar plot is zero. However, a nonzero value may be appropriate if the radial units are decibels, and in some other cases.

    Dialog

    The coordinate system settings for a cartesian graph with linear X values, and logarithmic Y values, are shown below:

            

    engauge-digitizer-5.2/usermanual/dlgcoordsys1.png000066400000000000000000000547441222557406400223070ustar00rootroot00000000000000PNG  IHDR\* bKGD pHYsHHFk>YIDATx{\Tua. Q(U5*ifnZZ~MY榛뮮_닺D4ִ5w2@AQu9?l&.xss>g>y+R( G!.'NTkm1wBnS'kjZEQԣG( ǎEQ,8o3}omn*N8QmG 2 w_\=1???z*ǎ!h2j ѹ3q`=|Ս(jiᶵ.`.3u0p'qʌl] =<Ѫ>] WHduHn2+ M|Sy1PڵCO4ئCOJC"|~:78SŤ:g2+qemߞ{L(~OY9`XSQdY-[ 6^t ^5G+7` pC |ǚ-\jק0/{8a0(*fSw^GEy?"nӆ?ͫsV2}+ʫ%p"3&Uʕ>9㎣;[)ueYA^ď_7}OG\xǧߎ^^Am^g{Ns){o?!|&d-{uڧmW|&r[^\⨩5O8: ĩӅԩvRQի.^8W0 v3m^[>&F0)|m` J˺ѽm;H_C Od1n Yx:2m=O׷W]L^׵}S]@[N2AR.eҴ%-֍j?.X $FB+ VP‹VW{ڦh`t|8|$>jmBwŁ 1:>-2.[RQY(<@iW~شn"2Dc=tpXǦuز(]_YK>wm)pP͏'_/ &>ٙ?&52g˶,F7}d~njP[EF%d؇y/Pbg̞qj(g}r&6Gٍ}<FLJ/Oc%[20;*q`ij+Yiֻ,{i {=-۾ea'wg/ϯF៖i8h]:uý{G_o&MGMm5wkvDhp%{1<3yHKZ(-9˅ 0jdc0 Lxq?O>/-33?&@`00 MFvԙYfHpu|\\y:C }3zý3?ȱIVo ,'|g-3#b?o~`ן#Gs10f0qwsKΏ 1} |sK_G=[? \,>WDlY?-'> 7¯vŗ@77OP~>ѿsssȶzԻ7fq O2܁o5v-p[|,l_-l=Œ&#?1ȗwƩ<*Vºzqz88PYY4Ʉ7nܯΫ@7_wZ+h4ͣ7ZGWy7IXRVT~3wg/ FԻ9qđgo /C7|cVUʯ̰ȞL;CZ1qujp|ڟ-X}*/`2קs4&4?Sg8h<χ{>em:7:OeO_rßOuZmRp P9"Ýd~ll)ؚrܳ|i'mgsw\0s:l!+豳\a>ְer.q~~|z7Fd\+ k|u  xd4PWgW8;;r~6~nqv֒}&Pqg&J~A)uN^=/DYi:]Cʪկћo5u2'Sy{l@yi~+1wgesW6Ss@ͣ7Mơ#'uuZ]Kd׻XecV[fH;~~˴)*®Oj[ &KYڇLz0 w ||z:䬇75ړ}OScuZj"mwbJ/9I:xa@6w O+aD 7O ix!ߛjNNuJeU-oKXF 0<{( Wʪ8]oEwyU79w,}ؓ"_ZVo5yUm􃧈cAW|{ AmzWDE4W.Z㑻?W7OZ {-}ֵkyNfc܎V17|g~9YKZU髽yyyٝw=AZ|jk*0(8j]ѕTU\BU8W?4Tf\8wnntI5q 589@qPW2oJRUy>j(CeE\G~T\vI W(PW~ts|aW2&C-[>USY_8~==tрܝ=qh[f}?ouTR{߿?(& g'G2g/G]s/0?wHQؽsd֖__]dAmrm=֞x))lãgպ֧w{xlXF W9sN<}|w8F)={+985*_<:e{ƭ 8S&#SWP?#gyiɻ+W-X)qlq!H0PU?~C,9ddI7$6:;;7 ^3r')E/.?Caezzl.^ VܼqrKuu\T hηlτѠov+ WAn`!=s'ݐ舢(Õ*g~,d]w.-[wX'TSzpX qpnv\{zQuTϋd#ݨ?.X!7իp|MΟ?`a!>WnWW^ Y}l-XA#:%:HB+6"W!lDB؈\! Ba#pF$ !HB+6ҩ^hE !n 6 #11y衇ؿā7Xhh($==Ng]BfԀ*ILLdС|dgg``֭^Ν;),,Yh^ee%K,gѢE7ε^Ϟ=ozz)YمMm~W|gΜ!11ɲe˨EUt:֯_Odd$~ !!ccY.NGjj*2sL qF %**m۶E>}t,Y9rElle^ěoItt4'""${g!-ܳgbu1}t`ǎ|gY4d6o̠AxG0av-mŊ̚5dvMFFpGٳYlkqf̘Y8z(7n^dee[o}v9x cƌIBܚKaܹ-N_nXK7ƾkrss7oNNN3m4l]weNL[p!=QQQܹbNڪϟ?1c`)bYYTWWJiiك^Gq!|||ؿ?cƌAѐԩS0`m>B[OJJlѮ>ܔf?:&e\޽),,lq''V]ӡ( 2NUUnJRRTTT4|QQe˸X|}}#))wycʕ+mBz&MԮ}ӬH_7776nڵk 63߀t}… 6֧O𠼼V… IOO'00k.`0XjM98Y|9O?4|M}|,X"233Yv- 6 ~m8w[n%!!4@~~eZcqqqL&RRR(//gm.oII \pTM=UUqssҥKʨQcѢE\|DAA~jkkqssRqWQf̘MGaСL6,jlٲSNgggoߎ^gĈ1eN<^_gȐ! 44}]V!ĭHTUUvܹ<BzիYzu~BJ$ !HB+6"W!lDB؈\! Ba#pF$ !HB+6"W!lDB؈\! Ba#&q 309bC$Wul;7iኮiүWff&&''J&&&&K ss+ܔrrr4h*ڵǏ3iҤt RUUprrk9z=h4Z~*w)PZZʔ)S=z4ÇgȐ! <ѣGb |5ȩ*#11y衇ؿPU?;;_~Tt:hGAnnMپYhh(l2oAAAM_VVFtt4?yWʲZ> +iԩS<J-ogΝ#33Ӳl 299DNvv61 U;wRXXخ`֭7Jyy9ox'?~<ƍc…zTUg}W_}~( -Ck̘1/_`UeԨQ̞=~&K lp>СCh4w7{ތ;={f|=?,[`ɒ%<,^@\]] #..e{ꩧ8}u(ٓ6lȑ#߿?oP\\̛o 믿ΠA͍hxWعs'騪ʷ~KJJ ȑ#&K Wt6 999Gg?0h'G r J0(XA~WTUeƍJTT۶mLt_Ht:ӧOgɒ%ʑ#G?~` k0^Z+iussCJP'E%Ֆ`[QV;AfYi!EQ^Ohh( y爎ã={t:t*|||ؿ?ݻwGѐDVVnnn\ϟϘ1c6lpSc.\{M&Xӻw6e޽3uV`x <Zm=zhิpEW`‚),,$<<YKPW[;n}8!`˲  ++(RU[Dpp5^^^V-**BQlb/~~~$%%;0vXBCCYreۭپNCQjշ}vN:+7nͶrYӣG6? СCL3w%LZ+i!--{1@O&NOKKcرe_/psscƍ]EQ,.\Hzz:8p]v VZդ 0rH(//gM6#<СC6mYYYäI:u*'O&>>hLb\s>ٙ۷1baaaL2'Oy2d "--w}ںdኮno w)Q3ghy6'sj-?gi\c$&&Zi4Ln9͜[qN0QU3gΐȀdٲe5X-`9 XkY\5sr9ךQVk,66绨j>3iኮn9ZjBӜfQU'X`~~~9 $##;vgf͚&hm7v-򇵔G-99smҥ(r2e~F(++#-- 63X7L¦O)iv-s5*saΜ9\Y^nݺW_˼ypttD1m4lȑ#-1SUs5R͔5ɣX򨅆6YG||<UUUVܖV3SUgy`I$UUmϬq!49S5k0a4 gݻwO}\kˬ4Ln9ͮqN3kqqq:.]D>}-=۷oM3EQjY 6O[ [e5Ys4kaÆo` ??[Zn@]o1EQno=Q+**jGMU9ڒzϋ/Ȋ+~g%DGarVe˖-:uxƍs=`o=Zʣ sgOܹsn6]Eiv2|cƍ6#--͒z,ĭ4U988t|c79YG{7.n'EQ:|1[ok"aw>\! Ba#pF$ !HB+6"W!lDB؈\! Ba#jo{%]uܔ{]!:ZF!誤W!lDB؈\! Ba#pF$ !HB+6"W!lDB؈\!pz=FB6755NǁPU2ѣDDDӧkgʕJhh(7͵SU2/,O>=܃t:K}t1qDN8a]pǏϸqXp!zUUgW__~(ݻy˳(om^`AʳsN mwtE5c BBBX|yV"66QFY޽_as=s iiiz͛g]pE7ޠ7|_A`={phjhWYXZxꩧ8}>j+ܹ*})))k ݳgcƌ k44 4D233Kpn޽Yt)6l`ڵr'N0lذVD9s&UU9rǏ'**Xmۆ?}t,Ylܸ8BCC+@||<{/ uuu,^ ҧOEt1\k48q"w}7Yb }1bnXYfݻʕ+̘1YfqQ6n /ӧINNgҥ(BXX}̞=e˖[ْ%Kfԩ888c5nOdF@YY}6lg[ug|;wn׭[` #G0v$k3fL&eeeٳ^NСC~BCC#>>*BCC)--m~듒b!O< عs'3< `ƌm.5+dKyh:uW^y˗3n8"##0L䥗^jӶu:4P-[X6q.))$h>s+$mm,u۬c4yٱcӧOonu< rn3UUcٲe$%%1tPv?OZZ;v}00 Z wwf'TU%++ N`` `׮]m?ѱܚ뮷7@FÚ5kذaooEsSpF#׿5(›oٳgYv-p} 5j~~~,Z"L&}ܸtRRR@AA.\ 55yHD'rkO/b {)Ԁ~zL&JQo?pvvfzFAXXSLɓ̙3>&MԩS ?~<BQv=c+:Qw}UUx:8toȋpugլ^}QYYk&Vt8+v !!!&ŤB؈\! Ba#pF$ !HB+6"W!lDB؈\! Ba#pF$ !HB+6"W!lDB؈2>dffrarrr͍`bbbqYRwKMII!''AR\\̮]8~8&M =lޥBii)SLa >!C0x`F͊+,D7Nn.@h/LN:Ń>H@@?d:~vvܹsdffylݺՖ%u788Z-ΖRwEKlp>СCh4w7{ތ;={f|=?n6zI||-wKtnϞ=-96 999Gg?0h'G r J0(y?t:RSSILL$003gb0PU#G0~xe۶m6nH\\DEEm6TUEUUt:ׯ'22} ;_w[WhMnee%899{^ddG_UL]]%uW @^!]bf"99ݻw+W1cfѣlܸ^xSN*aaa|Gdgg3{l-[`l޼h[Ba'nK[+gӧjIQI%VNP'%%%ݐΟ?1c`2(++cϞ=zt:LJjhWUUEhh( s(--c޴`0Xj… IOO'00k.[*q_wEhMpgݺuxn"#ww¼ I5Ysړjذaoc0g֭$$$0|pXn<("5"ί4jlٲSN|8wwQh\!lDB؈\! Ba#pF$ !HB+6"W!l]4[UIp7%%eHr.EꮰB+6"W!lDB؈\! Ba#pF$ !HB+6"W!ldddػ1.nztN#00yk.{1V}g(&L`׮]>|cb f͚Err2w$kqf̘Y8z(7n^dee[o}v9x cƌ)BsΝuY3gsAQwN||>UUf{Aף8t>>>߿1cƠhHJJbԩ 0ww6K!RRR;kHH~֮]˄ h4hZK@TUҽcwVo %%%Dpp0M{yyY-K@@YYYDFFZrmӣGZu u:h,TUe֭-YQQe˸X|}}#))wycʕ+myBGpuqvvzcK.ѷo_.\`WPVV .$==@8]ZU_qF֮]rԟ֧Oe4𠼼VǴ-``ժUxxx4>rH(//g<|7m>B FPPo6uuu;w[6y\.\@jj*999܆;/2~! ,￧L֮]Kjjj?`0oqqqL&RRR(//gm>&3gPU777.]5 ???-Z˗1LK~~>臨777}pEё-[p)"""x7n=\ycbb4iSNe͔)SZ3fi&xG:t(ӦM#++pZmhiZotRn&Or}3g?<|l߾^ψ# cʔ) >|8$''dɒӒ;lqz2<<<ˣQQZ-k֬cÆ <-^c0j s?w\98-7|cs˴p5j~~~,Z"L&梪*nnn\t UU))) . 4쯪/!! 6w^8<9r$^^^m k.d"??SSSTUe߾}7Ck\\\Xl_|26mb常X֭#33g}EQD5_dŊdddx a2HII7^www=ʱcx-fmmmk`߾}7ٙ۷1baaaL2'O0gy>bbb4iSNe͔)Sgeƌ,Z_777֯_r/^_gȐ! 44}]˼ӦM>{ټy3;vo'66={{C]syoooV\͛կ~ٳqpp冗' &&srm5{ otRnOa͙37|g}o͵y)*ϟoӂs%%% !:]DFFH7^իW}B̤H*++Yt)_~.Z'W@ii)/2hZbccvͧĵIB40|pvmbtJ/K!lDZBt"|򉽋С)+D'sFgeVҥ 6bnff&&''J&&&Fަ%pSRRaРADGGリk.?ΤI}l↲yMII)SE޽quuh4Ș1cXn)))-ݬ,aLBtt旷\xrgϞ.Zf>LN:Ń>H@@p qOqUisܹsL1h .ΠAٳM^(DWtejkk Ϗ/RUUebui6 fСh4u4zg{x3zT,{xr'|z5wU*BYYEEEhy;VtYrzey񌇇lڥCll,~~~s"ƒprԲ@5+T<2N"##3j(byecII \pK.a0POOOG*^ϥK0 F#:777N<%%%.^hu=M+W`2PooorYYYЭ[7[E`2puusvvkg6 x{{DNEFYPM]m9?^~~ r[9::RVVF>}HMM GW^q9 AѐUlNӽ{w=[Fuu5EEEDDDXk0 NG@@4.J4M<Ϧ V+A)*۪8:u#87%%%ynii)& ///.]^GZd"44j*++t?ɏ?hf䄢(h4(by7MBo3f/` g8V|jptꆫ7S&wmB]]pyK [n8::QGGGln=[쌿?䄏nnn @Zf1':5LVI a?6 111q=Ȅy/ԛ),;vlm^QQbYWUTT`2CUf[&YPUWWJ=߿?Νŋ 0ąYqppڒdmgӀYns wZl}֭8SUɄhDseׯhZN:Eqpp`0uz9(,,lvݺukv=NNN )b@( JMM%ՋB*++qqqiU6`!JQzAqq1ݺu K]a6äIHIIaDFFҫW/JJJHKK߿U4;q{gϞc2,7\bIjݻ7ۗФjN}nm=...Nsvv< WoOO}9jү&n ooo.^ș3gpppG3|wҤIdffrAm] cǎmջH߾}3Ȫ@Qe8;;W{M=0 ^gՋ"Z\hlvZHHz KfgyX|O>?k$r3L W!jkk--ي pvv[nGzEiv\eZ[~!D%߇k0|֭`0sB\EQpssgϞ҇Z[[KII<= i\5q_Nܺl3:6I#6"W!lDr !HNfS !D{t؜f)))EV ~~~.kvv6ʹs0`^!ukN`<<L&jjjAQ'hImAVSScsV?`WVVÀ(~}RVVFee%EQZq&Ӭ-nY77V:ɼ(((ח=zPPPsӧ;wQ1ٙ6XG߾}-/$/--ח ~)//o6Yuu-ONZZӬ5/ ˋQ/멫{\xHHHUUU٘] @u ۛ+W`ns9΄r]KK9VU3gX2. 82͜+Wp-7Y4 -8UUP?pPYY=NNN8Bt 6m^sFZZ111Vu h46 4S F n# 2]QTU6`VnepuuE1l0<==x$ i ߟuֵ8ߵri4|||(,,ҥKZdKo3As ֭rETU… mZGUUURYYiiW?Ǚk9ͺw;whmiuz#>>>q1%''Mk9&"KnLu؜f8888p 888X0`\\\0xzzFh4ҧOwݛ^za22d&WK먿====)**j1Ǚ9G k;<\ZZ`7;|x{!/=gF$ !HB+6"W!lDB؈4Bf?!:lN''6kƄF9 D||͙3g(//eBlZ((B߾}OU2EQ8p/B4C4k;wg_fmLQE!lDB؈\! Ba#pF$ !HB+6"W!lDB؈\!vKoBnJJ.uoB2B+6"W!lDB؈\! Ba#pF$ !HBoٻ좞{Aq zy]~v /`C UVu]8+{.mƌ. ޤF{s.ȋl… .BRCm܈,7̈́F$ !HB+6rCn !w66WP0EoBZBdddػVK_lYkA:}/4i!!!/tUUt*si{_4CUUGbb"ߟC~رcw}>,k-A\UUO1cGСC:tQF裏駟jΝ;ǜ9sx뭷 nf$''СC?&!!E7Qs-bwt>ܚ^z%|I̙(̙3˗/K/qdYFSOc1vX{hFEEK,gŖaaaٻx&kMӶp8@qq1'On2m\|ZƩʋ//=/ZW_Q^^Nbbbƍ#44(mfHMM%11@fΜ`@UUyG %$$;C9㉊"66m۶Y$n.sK֕`i?`[<.''2n˖-|Nٳ 㣏>";;ٳglٲWXYHNNfdddILLёū2c f͚ѣGٸq#/IsAh.YHt:EEE۷`>-,E!>>z=6g3aÆPVV)((^GGG={t::DUU>>>vI'jܧ{+[}AAA9sA5v̙3޽{3oS-7ĭnnnlܸkע(J󔕕… IOO'00k׮kO>6`0j*<<<LKOOaR-ٙe˖׿ 6P\\˗ywٴi˗/ٹ2?fΜiU$Ã_~? AQQ]O>yRSSnZꊈߟ^z$]B k񰂂ٖ[U _͛7cnvbccٳg?֫_ⷿ-޻">}:6m"//GyC2m4'&&I&1uT&OL||[ROAzp- /nVw-@]ww ^䦙B؈\! Ba#pF$ !HB+6"W!lPZ:Hއ+7LYĉ&4[/\xB2G!:?wYw8ZUUEQ&]Ma~KBcN[fn(( WAWxkA1]m kgKF2+fJrN3IENDB`engauge-digitizer-5.2/usermanual/dlgcurvegeometry.html000066400000000000000000000036001222557406400234220ustar00rootroot00000000000000 Engauge Digitizer - Curve Geometry Window

    Engauge Digitizer - Curve Geometry Window


    The curve geometry window shows angles, distances and areas for the currently active curve (which is displayed in the Digitize toolbar). Regions in the window may be selected, and then exported to other applications by either copying or dragging. Control-C is used for copying.

    At each point, the angle is defined between the line from the previous point, and the line to the next point.

    At each point, the distance is defined as the length of the line to the next point.

    The functional area of the curve is the area calculated by integrating the area under the curve. The polygonal area of the curve is the area within the polygon through all of the points in the curve.

    Until the coordinates are defined by axes points or a scale bar, the curve geometry window will show information in the screen coordinates, which are in units of pixels. Afterwards, the geometry measurements are in the curve coordinates.

    An example of a curve geometry window is shown below. The FuncArea is the area under the function, and the PolyArea is the area inside the closed polygon. The distances along the curve, in either direction, are shown, along with the angle at each point, and the coordinates of each point.

            

    engauge-digitizer-5.2/usermanual/dlgcurvegeometry1.png000066400000000000000000001546601222557406400233400ustar00rootroot00000000000000PNG  IHDR$",W pHYsHHFk>IDATxqlW{HcJ}؟⟨#x^XZT†iW.U$ZS݂TMR$$SyqVeũ.ePAvԢ3"3g؎MB~±Ϝs93"͢XCM/< ]_I. ?|?XqqA_߉p3e* HPnF@o"Sl]_jH!w2PnVSʜP\ eVXU HA/fXl}|R k! iHCҐcF Ey,H'\ +Vd4Mr9e~ְ37 iHCҐcFTs "۪5seFR3 #B…߰,>kuҐ4! iH?ɠF[sI11'wP7X'*}ZZbEn -lP[؎|}*?˰l&'VC,z:VF+à;Lxr.jNxQoתB!nORyf.ag7Ւi6kXGĮa4! iHCKD<49|9\A2q3-QAfZ5F # q3-Ж?GB E i;$j88h Qm&_MMM# *?cV+zb$ӧnRc*~NHCҐ4!i2s lI҉)/XŷiPP8ѠV':jae!ZqЩt[V9ƺ\d>Ů&Bg| 뵮^KcFSQ" ; h% ~>tTZOinx#HCҐ4!!fML&!$$mFTF侔oq3-a\툘,b @`"}D)ZEҰMjA֭&!}QUٶj?Qq#iFz4u#V=l3 rL_O6ꊋB=AAhm75'j}d}OFo}*-Vc*)0J bn%IQN? is!3u}`6! iHCҐizT 3+^G`1c &[)b 11ڇ_7aTNx:!n wAguzPz&=iQMD9vB;;\!Fޏ*]Ni j=-$M34jP2=CrbtZ4BazRFNHA2XaY%_A4! iHCKgXs79OdxbkN'K-"?#T}M"ZBUJq]I6ZΜO*Ҭ"*p7dL@eP"em;3_ BBh\"p}j}l\I6l9dBot|ЇVXWsqqۋNt"4 B(QʃQVMJëSOj{;Z*wrXM4! iHCKɥEs R<\ a3--~Q- .Ϸ"ߞcL ۟2jw4{SWP߿ۿۿK& 6谰aauְ֐NE_1n,yYtq//.ޮ?rڸ56[09$ !SM/_{Ζ !޼K }b3ڧ=Ctd#t?ӯF}tOW;tuF_d}e2Z-ބ^-\]Ǻ/N%[-޷j-ǿί>rL3 Bm^u Q:O PgxOQүYa[[{&?;߈N6:iQUM{)%T(Pk]x&Z@@6x\x"VbWbmqtv׽ wCL\'oxHzzw6[-$T:ՠNnPw}}F>b 2 }nŵGgKF:|=Gz8˘:}fi/W#ڧn'*~=nXQ!X*XJMRNq3+?g Sʼnвíl>¬-=[Kgozʠ~7"!ܞ- /'o//L _ W--O8%|ⱟl1!zIF4K-<,d˾ݮ}JK6:B3A価nQ%V`hr,!Lz< LFl״EwbeWO&WQ1MFSbnq[oOJ0e~92kn{NB4M7;#hP!TRNY&z1ysnnι׬ݙkuur9])#i l$ fX}? <|eYba`D*0 EխS$tqZӧ{y3|!O$^?ubYeؑs#d2IQFqþ.s*ruݟkbߑ_3c3Aq? b124nK<*^y!dXV_|!>ɭ sk`ͦ⚵ZmbN~}"<-yaa&>Zs~d@C\H7:LF˯=lDѿ.j4nNiO8=Xf鑯F/]NV%saWSNhp#C#KxMl%TH Ⲹ䦯O[-]wwxh\X7_[-V6F>9hBXdltsYz藣>āD-=[:n<4&?%yL フRBLW*MY-Vͼ6Z4YP!;=4<>Ya$4YaAa(-+Bl6Lr~vӧϏ/lLF7+,so\~{RnZwwY{zP_( l=D/FVFC6Vu݀ 9p_ٓH/Z +[5&[5&[5&[5&[5&[5&[5(*p24cDYD*ĽِP,˲,XV57p/7Dn}ϥѾ8Bl$z7'y٬KfGώrݯ= l~hE/( OCCWN>K#FKGn#ghuwuwvuv,0g>9cd!Fj5MiG| JD2V _ pb8<~eٚMϺ {^xR x^3nnɒSOν+g2 &7|1~ՍB+MO4n!.Aۭ;j5BHgৃKHxl(yϖ` l&>V"jB(z1J6f??nXMF1:%ISn׫.Ž'<&Idl5l? vB vZZanռ-M/I3i2lV}M6d#I%$f0e_ZR4m6i8RPx =LRĪI0/}Y`fN$Z f ^e 1n4isLn65o2 ?1pA:FH4bXoq8"e#"meٱX;"l"D"%..7eextN?玜;od,yxt!dXgƊw(ukllfFc{]޿::$?',,_rk ͚񭴽诅N`Y͑wh7jFk2UR|]?o}^f}|vs7V;B V+EщBHf{ۇXﮉNHɓ ^ve+eD,Lݤ c}Gώ%]mjtlԵuBEH^knPo˰":-ijkVkRT4`m.hV .s?S,Z^fNcƿomi9yͣ^FH#{Η]'%SO !ZȖq^%!ςfgnU,L.dKn^{aCdnB'y+Y)^KXŏ~1-E*BEnPloYspdF PI*Ju7_[[%PyJ Z[n*gth=J{f̸^qq+.:t:ڙ+3DW05۱fSQO{V]!&'~3^\ȹ{kx>_]]YrRQ(~0Lݽb~E`qؕXt*F/FaL+<;>9ůhvFFIٲNݠVB7#?Lw_[-֑VKɾ}W\܃$ mXq~l$O?nq){ȧhpsR#hG*'y;I6;;ҭU}V߉ay}}c“a}^xd#P99= 524z̏N_T?ĭok67kUQ'fB(c--O??gVXf{L~ϒ”KwԾ}w#llllԐj Dj1[I|ql<,z8Lpϒsd \F!2O'M.'#/r6~ilҬpo'V,SSXu fXBC2 .D8;}oDe)o!Z7eDW2o2@DM9w9=/F=Jvf%lkykʣ(\"[dm'[#G}efX7i&EWbX9e|}:)sf##{{(GCx"{evw@hϑ$" uMגdgG'EQ,":vطK[T:ZyZ =/ē-rs^=zʴisLe?N仯L I݈"R584(8 7ϼgɦ“a<?俉M Oi? v|u_y{؉m*}kok|Ѐ^ emTh4=:!DӴf/lyaa&>S; +xˍ~9(fenEJ;t,.GOoO>×J-(_ß̕5,P_sj04sG; Ovv-< p25da]JtX\ZtjϱSOq3-VGώ6h&ֿr8tuU}=*h=7FHaf3ŠcWy}P8<]oN/Jvg64&CAZ#]l@emrmR}`FbhnP4`htakuphl$ \r.Q%%4BCܽ{ljt{ZS:]NT\Hw^uonI~f]%Ҽ3w!ZNTM>NEMeNO{eSR'I$=al@ ~<8Ϯh%^VuK̏3jnNn?#޳& ? _f{ۼYtXkKdf+GNbSeDYY;W\ԭRL|@kבk0MAݶ&!Fύvg鴫T9z)*zpUZ[{s7k97}Xl*NE ѩhLY`t얾8rn )JRS|ӵW<]cX7K[Tp?)+[_W\qfXۋw;.BM.>Ҭ(00xvP| F]f~In&)-BLWpw)zz۔b_k[=[68Hzz"!9_J2eE:En榞Nc;k~ eccdtDTi΂v P6M&s^eUq9t֮Җ.0 wE+VdY#ᗱl/O}}}'{i=;FZ'i@Xɖ/} oE@K9;~S݈@d d d d d dk po =~oƭۭd#?ʡFjgO8jf0rnĺjѮ}~zwj)jXVb^j55'-HZ-VLZ-TTtޠg&LFS{hihJ6fXRUX!67r߼oԔ VLXb+ifPoX^.k_iѤjVvZmXZ% y+II: ŪVɥdCozBclqq7~fXgqdR U:n{߻B Rg ~VIERQT˓'7j x:^rTV|<ՈϿyrL|;ozZļ̟'-[Z"Y9Rnz?~91C靈,g_~Zu=C7ѩM]FIIt:Р? b}[t.6;a:Esxz;!Okڰ>"ɩMٞ_/I\Rix#p2aB(we=ht2;c3,AFP5z5}}jPd#}4s?y+ DhuUBW&*<@FoI *`a|C4~KdN-G|͊1Gh? =+/'N8:<`Fgv|ټ<ՠ1YRǐ3v}dHNr苡ᯇZHwwow s>=u5\/ve ᯆl6g ^g_-,uk˱ƍF~fH$,,ã_t:mfzbi/_Gkxpt:9W0}7]*& TDAb]-?'xm`|{d\o,QFj@үV(7+w #KQ7  {TcbN已i{-͎}=m8s?P-,>&5ǔks'YV 7X^xL"&h\o%Mh4%eaYVpa\WI~65  ?ON^Y8v9->(P%K {ӏ%*#N_f{608}#i#O0n4HGW葰f&҆uK5Y8^}CԮo(o-Z6>Ț5.@"aAx\d|.e>i[νΥdY0srF&[eD{2_ͦYZxNӭί{oh'T vлv'**u'źJ$卺Alq/pb]!*Ͱk.. !Bxӆ~dR葰f oR+Ki4 So{ڵ-70kRF AeFezfcTGώ%m*t.\+ B #|~^$s)Iߵt9]K-Ӽ/z) Y`AV(p̫ 5k~L&ww:{64`u~͍2/>>(BBBwH)Y`/N r$m%ǂV Q#WKE- WwQ!TDx2\qrЯ]TDVJO63-,@t,Q/9z~Sw(5..L&Bhžg_F;se!5=q8z +3W\#Fx]9Ej1`f-"$Ѯ̏C=]5XXV *BY-7J$\ bGCѿҒ鯢&!mJ)7$}R̹)f*`q+-7jQڼN>^;JL|Y`G}}l4~G;?GRTkK}0OO&uVżլYlX7FVfƼ '+VdY_, ]d{)}7~J;;ͬ~2"d0h&>;sv.(XxlӕL&z$?LY|?ˈ5&[5&[5&[5&[5&[5&[TW^LZ*OI6Z-֎:+եl)Y1QYY/,Y`{&C"ݞ7 ^0QuEB#/2|{LOo^IRII MmdlҬҠ X>$Vl%TDq\6HO 8F9;}o$@|s#/;$r 2-Gxd&A`! _ WĘv1=ZdK3݄6qd4-PK :EG"?~Stt*P}#p::NMNI`h䂵$L.~>z4M\NWt**jHΩRuƅ<y~(7yI1rc7)1I:Cn$eA^?Zf0 VN ,Fj5Mӭ-(g$`dIEݦR-FH OJ8<"߇/CBddV@p5_0'"v%0̞?э4*,'&c%JY@=E|Y`86""ju5bϿǺ75zИ%Ri{m] ٶoDg"F:MFv_J|n(U}}=;/*ءlmgtX7s 27teEXpxtxyc◄qX-o~֌Q$~lr9v25_*ٹ)Y+j׸PYL*ŲȀ9_ ;w;+VXV+n%;%~NBl6ˍ2~Z`ϖ37giҦt|%ZF(^(FSJui>vEsK$<֭ѕ%BarMR*X*;ssFLrXX7s“a::]FA;Ok"D53 3sدF̋w2-Z у_ ::˽Cn&įą5 s%% |]l\3&%zKa"J|ʣG/MM$?=0ْF/tsssK-RR5ІLnPVj2u3 lnP^3r3i;t%5O_ZiNJ{zobF"GƂ^?uRwR&zq/8puWe禊~%C_9v:D_? j5"_׌iױPϩHӀkN'=*12H 1H3,Hc6_Tt|t?r~ۥnPVl$\dK&6І@2ѶD_8O#" *A@6&w6 hrrn_jR-n'$Y%Bn}QpUXNe  jӦ &Ѥk4ҥA}'4Muu#$;QŠ4/bб`AYK!EPT3w: @ϋ`adߌEb?R']Q3z:}[> zN7a_px2߈"NʤRő*JJmIͥ4uUTfP6UT&!.J`h*#UkKk>no?WRBJl; FzZւ2WR8;WEFZjޠ {jq_-bY?2{ze"Ys>RlJ lXpn1RW02) -?՝SUf[37kj<׊ wh'͹+QGʌub]&[ԭ(W9X"Qj㇨q * jߘYBݭ-s)So@FoUYKL ¿=.Roj9-n @|7Qxm( [-7dePz4ރ^dؑ"}& > _?R_{~t|N9'ף d^ǦXN܃_:ePal,+ףbŊTn{-ͦ-YDwmsS\?9=5jN?H tRɔM&%#CGR2}2w7l68^.b~l6F^o;-(+GU!FO};1Vi<}ujY^'fguCm7*"~=nX Kn&N6X)_΂3)hu3,=![Ӭ%,N`>HIB*3w<B?mX(?NG`XVZG"k ^QXk~ ecc|T|&zĦS68HzzV( U5m$)kI)+C=ˍ5ur5OsnMN'y`tRɕ-%2z'w5%L "̛̍l$wS9fٵϥ}JJc%"M9+Bl6Lr~vӧ˺Qx`5Rv5bŊH4,x-r}|SnZwwY{[q jLjLjLjLjLjLjLjLjR (,0K-D-i(cPn |l`23 ,so6o,0v&IϩTb DBm6ٟ*rPc+xGoE]bh,a̩1 B߄E/F[P$Q4M!9P{4˲e',V^X6e`8ܡ^MZ[ZkWicb bNE{ WVqsEjoi_PxIml|F:P7R}sJwݼdMIFefis>"cZ wk5ؕZ@ͮby|62x&PwWwgWg+ɜAѩ¡oBE!DZǸ^QIgf~gFώ&$cS1fƪ]!>,8yy\uߝfϟőXfA"N*S*Gk5qkޕͰ\R3 }2$E+f sjsl6ޱИ%[IAFcu+N$D"adJ4FM]33?7n-U`e?/ʕqr6,,%TTxڝqK}=}[Teu|z~~,|eGnfفPҠb+/8 95JтRFYe/UR3>Vs~41GP$.o"<ķt6dU.#Jÿ ;u: ׆/lEʪ˅/koYnw C=* _L\gףjujUI˕ 9sgr6b &b:\2Jp!E;iIJ3CJZ~<('{=OTXA9*](J%aKcC_.FE\QV8RoT7 .IU(_fd6Y-֑#wJ9&R9 la, p˖-AήN~K*N&:;v9zz{Bs\PSHd߃V*ω/X3+ުkC΂1v;HLMvT22bj\Ru=]8{ړ&n2 n*xVl#|$RdI nOm-EfKʌuV9KVcWTsSGA VT>֍V"$BEQ[[e~9 ˪:|AvC,-8hy:l%o%FйPd4Fk:xveFriQYܡA944}UP䤒Ԥ(*cCeRULdEu ʾ#wӾE{zdFҽ~jǔ-a!u'%~r X+~acsJUUie %A߉ E60MU~dm2n4ў?Nw,V4M exeY {[xheYeYn#ֳvVR6O<Z6R,WfZ6 KݠVBBms)B,uA=P?Q .Btůƭk~ʽ]pCDV,"{J#C#Z!gKo)2'z˺vRR[L[X,Wt²A7Vx 9 "F\q+ r2'$}RΟˌ/[$H:~fS,R!A]$Ԛl6LU~vӧ5g1-urcT+VD#ς vgBݴ)D7ae Pb%=5Xn}ryz6llllllllFY@h&3 Ljpo#D[ ,[ 0 ?zvynxF΍x{ecZJD ZuKN E'&* @tռ(=cЅ"ԫԧN(dgC4M{咛IbfXBEpoc`ﳼiAN-('+9uzNWi- |oXD#j֖VAUhNkK !yH',0{{  ‚OO'/L_ּ۔~>z4M\NWt9\t t.=䝚*MNvKLݦ0H _.$-hd*=.ĸ ;|I1ѩ(Z@Vոh2_yĴ(s?#\aϭ#ћ䥲}G3AT8*h(w1 Tl jZ-V}Ll_*aBZ777Wz^Q7(~#8v8~nm_*'==VW:y+Y<5%jΏ([?/SdkH+'#Ourpi_/u'UVH۫+ܥ-тz}}NEG'#GJ݂Hxڒˈ2oz[Tg»ykDzzqQ΁Tٖ-d%f~e"jyEM_f{.RnY+dj~~Q\LM?H;9{+5_H?H_C'Gsfd[{uv -p~~SukD*mKH$ ƍF&yQ-[wӒ5scA.7'"yy"g_& |2]O.R*X Z'pد`bbdX||VusYǖU,[-f dv!8;;+Z___W_W__?08 ~]~L0 甌HUU2"Ld;Ny{_t1<8̥+c{6uXh3խw3$~I7I? L5'%k^<mmfY.WRWt | ݳS_{/a(edq\1h8" \`zK/9"ouM%xe<#F$& |2abG$ +FEee -abj+J:؎fgsN2sxwd*ɵklvuiҢ -+Bl6Lr~vӧ˺Q0 G]@UeŊh$YpZp!oJMRNq3+VXvU X*`<@ @ @ @ @ @ @ @ ca@m`^ - {LNLE;U:kļϼV˽U+|t6Mܿ'/"(xl`>xvpŊ喢i&$i&}|=ɚ NDi0VX$+)د+\@7<&aCCÀt ֪Y`r<Du~Hg)5+wth4y'1 f7n6 ߄b[a2,w qGlM 7lOv߭]] jssyvݼyH߯hcWbǵwu}WlNރ^AX\ tU$crj۶قghuvdt*,0/^6o66W|W!gf#CG,_=0!J|_8u2n0vF+QX{KHL20{Grɡ,B/;^ݢsY91GѳϩQ~dCozBclY!ujUueGnҋ[Y䲆G1H71M|ּx>>eZv|z~~޸^,|5ײ2l_{r%NXaQ`A>wq?Fs~ˈee|RZC_rrZՖ9e۽)nb+_E,g| }hI?|R2rx93qddIVR%#7du< b|PX7tFeE;i&Mfb9?RzR*lB)d{[Gύv*osWǻvc[g)ӽ_j弄\' ڞvO;+tpw(f} tF)^[Bd?/EWFm;mR9c!,0;ݙwEI$[ahEo_L=8cdtl&MJA&O]/sjE&.XkKkѩhl*68400rTF-Y}l:v9v9p< 9`1? 7OK6wO0A wT wЇX$=aRj.Gύ:v;*i'½ 7YlMl%+X=P3ƾ_NjZK 7eP9RVi:t>Tݻ+4POz2,Ӱa E__S/*JO|7I%NTG7[Hf+x;޾z2CC$e~ѕg'<[v]48TM&IFByi}|츁9?e1#9u'G8Gwq9N ~ uz^;ȐxCHlamBf]ΧD"Q|?}7m{NA:Wn!,`tlpl}=ƥǾsQYH<'E K{>䐴B=5OFPWW;[}7+15_E/0`6_;GR0e+fq*z(S\x ]2n[͖,[-]li΃GFYuV)HJ{ TGRJ6YǺJ$ :+nź+^.[>F'?L[C`$Aݠ;r"w5[d#)Y3G}zyb Y+ U)+΅"=bԱ W_ ~1IP@˫-/ ;ɜ&WizPds%Tʶ+*! BJGRhs84q*z](KUz|.L33r%4,+2}tx2ˈz}S|\daes̵܇Y>gM o!2<:*%1ݠN{܉Y~ᯁyY.G'j!Z#lW;08zk~,Fl}V ?0+[U)et{]+Y~t:f;zH?ȵ+^+gŚ\E=,9%!cGiVJ5TDB9ϹǍt˾/Q&&'>>+3V朷?Hgَ]=[2nD5k: F^kV}F`T?:@UZz意O? `Yֵn.%dXV/DvVwPw("TDMkw4YoQ!.Ka.a !;:BDݠFP&<ϕC*T\vx(o!-y/z1rs$~,ٴ٤YިfXt8eX>.a"BhOk k Tw\:Zd.0gG<}n2WGz !BEWO>Gi{~ EQ}'>>ILAo˯H!L `p0Bȹ{'ۨD[fXE֗ o_v'ͰV;g*WxT,XTHޟ10 sá~ + " _\H1^a(SePD*=mޑ{mG&[,q589?ysσLP/6qd,ݮ|\BE'ߏ_0)]U b86""juy/0n4r'cI  r},FZMtkK+B2I}h!T>Fus!!A>bȷI\ODJa=3oX@=~,,Ɵ!mK !yH'[q*Q*-J !ybG̕aZZ$RHh|#*)2]qeEBeT\3g#ɲQLPFM|Tsl!7c1KO5?40onԶ6, yVȥsrr>7Z۲EHvvVV__ƍF DjrRuȸIVOQvK)[?',Y0ʭ?r%_8EgwE8^UW*Vۍ|?!Um ff5HŹr6Ÿ5o}}}ik#IBh$D߷N wl$?BgK=ŠsQw 9&wĴT)fr3ɧ{LJ\Ӈ4N_S3gx^TV06l>?;2<֭at5}eڴ:HI6jԮb!utqÓa! =&1~XX?/C;^j.hǫJOIďAoj)~%JfL3 Ez.h]PX`̉ldMG5&[? ju"%@OjU~1VWV0FҚ<'ۣǾXX?/kdNEXhOIZ s%lR-&{S&:COc0v)E\*ķKQ+Tz.)5dk+:bd*iV9SQžB:jK?=[^U,ÒRU+GQgEAo$~I/ 2d33{ԊˊjYn,s_5Q$lՎ7! ?Hf2~5Nɑ#R_uk(E%US(Zx5s? vdsPURSx/Z7ĹE٭v[߱>mMTZRͅ O> >YR4)RB-> 8_u⎐dC߄zNi? :wKT??w t͂FīZH D*ƜGǫ5$ 1Һ!j,qDZTuk۲eE5Qe+[=IZjNVYV+[me9ިl6;<:)fDB:A~m}DXy>vznI-ZNNr3;0?k"=w9v=+qyZD>/^j~&>t:U)74esd k W5mm[C1^-Tš[#VrkFMsJF$e 3_N:bw5%L 07F:*^#:ECQɹ)wE螣=/6n M7}}o&6òn(ݮuU9m&N(D'k(hygs2WbMO rr 36/G[S'i}E~Pom#tCR!TN޾rI1X7C*%s97x6j*+_o$mITQMYfd[[N>=~~|e Y`H?'+VDgЂ jz)}7~J;;ͬ~~X`Q~XZ'jLjLjLjLjLjLjLjL'ʋ2 L兟0@W" Pa%V ˋ(x1t6Mܿ'ji&$i&}|BeH';UT7<&aCC*=Y񔢫1M%~ȬT#+V@H\R*gy6z])V5L&fX({nl"j[ keEE]:[\AL.WfFreKeg~5YMͽz,4f{ɶd?^N) o$ߔZ[kmt:;v9N}|ʝ{ϥ;wtg]6pA:^tټ-Towz㝎lAڱ*ml6} O)rz;r^IpWl5GAڶV|@6?/uK鯜C{];lAh.f'7ǂljo"e]ufdRqD'w`peK6M?H[Y""ՕJn::sRHlo _ QERW2 uef|r"Sy Ʋ#(+Q窃D#M'v!f\iLdl, tD"L$o+Oˎ:CR7"UR___j`p)]l6;|b=o,Uff_lbm`fl5kV/Nϋ@JЕsrL&)xlq%=afqK}=Vb0, X;Ff.KWx=W$vTkQjQRoo٬AT\ BEh.J !yXBX_/]*9׬P7yqDR3E+ЗC<҅;tFlW*JR1 "v^Z* ?Y8=W {+BUM3hr$F BHJekqG'wLL裑JI%ae\FETX,}+]sYdQ8)2LD"7b=e L]ٷ۹+G@ οuzRvO;+tpw@)faxC )==!f9qxnnjpwzZ&d.b];FݢLfhL&sYѰwer؈cܨm-j/.2TUZKf XK($GY&[ G/F#"mx_/S{;<n65ٚK>Gc/]9 (M/si044I__S_E5xy“a.'22VT*G8D.E9e #<݄dY^vM֭VT]izܨc!l49Ok3\RZ}˰La`-!OCLoǦcc8iF_z=Ȍ^Pԋ+rQ%YнFʢ  Z_s)6rDe˚,’H$/!-wӶlUDz2z'ܑw(v3T7 ddSWW_O$g%v#+,.Hp`nϯܶ6eU_eX"hD k?^ !#eq]k窼28fW/>WٟgUzLslTqDʏ窃`#PnFBX8w9u#$~'o%F" ʾ#w}=~=.׸fO.OdՖ*@e@Wj*a!y'/aKa!u'%WTsi&qku젬6tk&šXU. H{~eKs8Fur.)Ue#r z=E6~6T/U)< +%B]0#+9mo,,+g#IGύ #H"R0QVlɖ-Naڽ}6+# 7;?w\BF΍ߛ~_\\V?r~KMf'1 mtWh7˰ͻ/ޏ,_ ]ns}^zLmn۲eks$e^,RRŮĢST4|1lh_ vpsƍŰoNW wTE$ufpvD_ G Z@o~6cH_^g}!Wlk$b=aYVIDATF b=źH;)[_3_c#Ig#RbTx$Ge|^T}=G{!A}β6c;:b3,u6Z &sɸ{ÇTͰ#&]h4cdh@!L>/z~`Yֽ-TT(H*B(ʲ,˲΁'3rr%o% sŗe9#'se}V'6h݇BŞ[L͊uu:'^W] [89 x?).9RP,ءgu9]qŚrs \T8Bρ]ԭ6"tstg|يseFظseB(&=߲r*>3xY@ b.#e+"H``/BM7O}}}'+[+9xlllllllll) fm267Z&OJ֑fl$K^KgȊ+$sqVLvɽųIJ6Xw1 iɴ0P^Y5lh0m0}(~7ijZb}|$d𓠸7dkfp.o#6Z/ L!nqs^' i)s(r-opcyaRXh]c/Fy}Jt>^=zA>0z3+3-0ْ&v5FQi&MFSыEf>Dݠb-kSaࣀkKVK kֿҿ[힃à}9騖w/u'UF?_6%[vbժN777'[sT].(OR?!7vHH*J4F[vK(c_E ʮƕyǽ?b1ܑ/9-MUc_T}񈬏hAl?&]Tx=k.FJzB;9ՙ66Hh#iеϥ^NS<[a-iRs?N.ŨԙT/m8<\P7nѣF{I ^Wt2źG{2nVAM:LOL&LuzMweW˖Yx%a|O7L0DRug64&C,KE>4&s'z1wO6$eVĵ h4Zn)2bHAY$]ۡOߧ=mby#c_s,9yi_T}HZ!KE| { ER{TFVrlkNIZ+͹Fǿڠiz,l3ŠcG ˚,*~M=:KBuŔeүFw1<8̥%l^ ;`,4xQng֜H4"r+'a]~{A"! /bdP?',*Y Ǹto#޳+IAٟ0w'ܮRc*"+kFR(eKY㝎⬺5u(8*cȖN"TEVNWʟc`VMTn:OE )a%E-EQr7=]qL-8v=ּ#wWE{fR"묲(xUdEeJ &'sݚ:)EvaR̭| $hr}KFa2==[b_ꖴ6 5n6thna;ևMVTUDV0(yoٗCn䬿}Y__FQxlFER⥪[SGݖ-oAYɝD֧<F_OOV&?ǜ8%7 ˚,lA6 u뽮/t4;Mpt:ݲ 6:X\rekmxT+d[ kXkHtKŗ<<8ZW9f vo\]o)|dh0U/F fQ+5BvmUVTFEkH(qCEc0/o)6%CeWdGR`uAUZقlIӼy.9`j TWg 1}}j4}s~EQO"n hjЯKiL__yg3܏TH?uktӡaXSS(\()FlΙ>"y`tv+οuR Yn2xDJiWQ_})|qwǭL_@BѾ!TN*_cP jx룢(+J1+ bʖh)B(ϰ~8z+Zaٲ!f$l>}zRa5Rbj]IT+VDg jz)}7~J;;ͬ~~X ͿvN˳S' < 5&[5&[5&[5&[5&[5&[5&[5&[@,,,0P1 Z- H3I6Vk2_-EQ>Sҏ97i&I3;+ԅc+*(,0ǺMFh>o}4(G2o6ٟAL绝&4b1G:9S?Q%Rm03?s鱘vKy76x4YlASÆwuefX*P9Uђɼ):1 8r5/ XY E !jF;4.wYÿ{=Xh7r1n2 ?N|;{SlcߎɽGݹ9_٬{KY$m͸XAYKtU lw F\طcF施-ϥwu o4ff\Yf 5}f/] ?׆N?Hg˱˖ab<6o),fKFFceo ?Rwu.upY0& '{*ۦ"N7E+8m]t,]uuӑ}ͦ] ,Z[km';v9N}|vyHӊ5;w9E5/FWxX3,^f."%qDfpVP$.o"<ķt6>?ɖ4"guv^U)L>%1?Pjngu4PJR\__ϧEMXYf_cNu]⭠X`M|#[l±`-qq~~K' Pƪ7+8zL=p"?& Yfk^ܲQ -,Yyj[u5قˈI>Mt<]2oת̽T*Eh+ο~Ufa=<—(Й!kh@JfB%M% }Y{4LRĪn\DFu/ê@ _+KX(^ k&7E²kCb!V.w-Fύvت_oFk~g5k2y+>8Q'dƮƨ[4MG: );FݢLf̞vO;+-g&FG)d |vrnjOhS3ZF\.?R0 d槙XPJ]8<77U-RQQb2R$ѣYl;s :_}C]̥pEm$|$,G1v;˳hlflLYݥ+jiɖς+3'vn)|,Zi=?@{N*u'Gx⻉ȥHr.wʐ^R O* # G""-ٽ 7YlMzrRsAA]]9 WW ~tcLfNϵ \Z1ᙆ%5) [^e644Mz}zY]}ZTTѣr ނARXoH\+.&^KIj áhR$y;wO:H|L8KݦD˚,ْaүٗ6c\z1ǟUpݙQW(k"QJuuuD"a~VCg s[fgg[ڶI{kV] s|oP%#IE+D9/ ˓U:8z2D3]n>蕋o5CFRW?ϖ+|׬h#BQDc/ ̽Y eUG@`n5RnPw$o%FQDF'6Z?Frpht ;\U$kD$sN2/z'~6Z׬j^wN! eQ'k׵n e=VZv,|܂2l1WY3R˲lबڰ6ZYeYֱ104 y WqݚJѣ؂DaCM&F R!AHwq+%jnP5cb?+[ s/9'fX>-C{ rs stOoTeٖ}-²|͒e3+Bl6]--O~ X@ b;jgA(+VD#ςUނ B5=ߔV?fV^?lJFp6}7,g d d d d d d d d 1^@ha;olIc\-.$d绝P-t6Mܿ`1C>Lf2Iͤb6Z+Hh{g`2m0> e#7F0K4F+i&F(GVG:v/}>ҍ)PW}Jac} Z6.J#gGVXQn=5M 'A$'V[n(A^MZ!$I>O{$#2+,Oe1796,)>Ib*|Ƈ>Z,.x]V+g+f5lhz4*Wc_Z: &KZ6BBCީJ6maW[{,^E8c9o$B(yI1Ɍ$`dB=ۈԄzAmJJxbla0>yaRohĴ; +WV' )6\9׏4seF=)Z+E.kl!7c1KM}}=;oXoJã$ll?rXۛm%F{cƍ\`_ ;w;*PH\¼ɬxqQ9͇q}+OW׆qrO%*+Sƾ"O =,?cLYFM耊 QF}}}A.]l#E]B*h)T[#bz+{k|YŹsl?[)zƟ!hߪD#M'v!f&iˈ&$Ki4ټYt~@耙3g\ڴX3i_ a1+q*7՞9sGV\E/*;]dXFWY+ɰ~^Sr%tjU1/Vc+XV /]XSVGB+,C;O𺪕TJw1 S\L"0]m4ů 4 w)vE+g#ųU9Pϊ#6pJ]dKkֿ4Mݢڽh~*QCWڡ/;o==!|oRwR"1H3i2v^P7(jXMFSj`!T\L|Lm#V)c#v&:|VWGZ Ocb%`hFc{D/g/;dY}x&d4 X]Q y0MӣgG{U2)žr(s`j.GxXl+ܜ{4wm\?dHYr/VɾHB$TRihfieGKlKnTNv6V6QJz,YhmwI]/XYJdiMHdI0Ff8a|<_hLvꭰQFGgGBWn#CYȻ#љh|4v19^&kq0?1jP%etgyZl9EEh #+}4ٳ%gzzf Y{wHamM K&I>l$HjXyIL?Zl]<=/h_KZ:_Z?IF<xL} x>W)iF*Ă[T*,tY'ƋNujCb#IضpItU^ (Ư=LM6Ja;&-մ G2kHd%5Ks7| Y(ٳUSm{8x2+ 0^䂚Mb[oNJa/șt Awb-䊇L&@E~Ձݳ2LH[5Hw?5+pHτ WJ'/'i'=0׭\) {k Pbj#*w}&t<=r%mi$ܣDJ@1~Ũe"'#*-շqNkz%5$%s H BjP!c#S w#[2<<S#M6u>_!26>R/q|Kr qS!29öմba>T4neÃo ET*J 5t:j[\bNL&w=5QR}RY}5*x8(֕!(Ԣ2U /c>Q RǫED1B#= pmF]eRf Z)T /m4^6\&'|RIXTKzV=2TQbBtd>Y`w;&d2<1P[w::j!K^N]BGg &sFŪXh&]ZEv3vnB&g39l.;00H^c dToEY|>qtپWoe.4 yCQTs^T]m(;^f}K/qcc];^=wqN{IJ]ŘY-68\ƎW-BpBxUo6:[bvYPf8²,qlw,--tt:-M@NmUTyIxZ F$oY˥)vHzFjBP*Ud42:zjTr/FO)kS'Nݱ{e8MVݕJ2QOd3XVOimWO#YH AU\\RsiR@,p "14njdTv:6,5Le 2j}ZQzSVL&:"v7odoؚ+ΓM6QE:"RԆTv@+ Ie#t?ОG&wXQ l#@=}6R@ gUڗY:]fɤBHPl,fc(>R^_s蝴Z wP*?wЉ&jT|>V3,)}b7<^fWkRF+54~K-@>o`Ed\t1~g8uY}f+Ԏnj]egFZkra&]׆ YnlO*C}$@6tʷׇPlv-Us6vs7rDg]e#*rlf1,,LoϑβF^covj3L7e^+JioS5%aǫ'~yωEc(Y_qPW7HVpͰ,#8J;c3 e@~^pdϖ:xmjo=x]T]\}TG7JyvyTkQjlHUoHkRwIri</^䱕V `#655[9~[c 5iR*+ە+C!>FV=5"b+=sVW(u5z-@V{ijhW ) ޡ(x\,Ye2 iuCGX7nh*p-ò a~b{zx#:zQcccUi՚FSIlZFO]u6H&=gә0)2)"2*u&zqd> !db5ij,V:7bitW0fE]lșHh @$ fB8E"EWZWL&EZ)ůbeoll{e؅2e;PX6mBbeжŖ)jcCQknԬ6KQ8rdK|>?Y|"fT+ [_G#'&x_W8Wyܴ|_Q9s*-s]$J~ KBj:NRBajڐh3r] J(ltֹé汰N w1?D<V_jD^68.x6(pt|,b/_V}IJARN4Nxs߱ޗ{RN^KeK\k3c!u5goLk֘ tdMwP( c_tnulwx@z$ޫ^X-'LLB-?qFuɳ=/B_[GOB><|tX^Fl"'nM&A 372cI2V }~vc&6V̏L5#*Faĸ[ܨ !P7L&&.w7{l+V z 5Y]`kf!t9GXR%G.iU-|'z>jXŗCJ"@T׆/c;;rrTs<.O=jVGu_a +[u)v>b!7B"yw|Xg\~^!8dBB']'O~"pFD 'aY=ksX޶khQ+(aع)/])Oۡ#Ųz$R̗3U O~69@knMzhͱ qܞ2 -\Z`Y=I3u5V!Ot;>sC Y'Yg_v-d\ꓡc!ɔ`Y>/ѤNiVqFPbb#icCIM&Wto| "\v z p WX"?"T5; g e,RHkw{ozf󌇻 <<RW iwbjb%mc OjFGO:Sb^/\rl-*% lE]zvy{t% :;VH_Mpض 9b oɊ4Y)OJ^hgI{׵QQtuv-/+pDzJ_-Y+IIlā 0^ϒv%8k?sY BxUo6:[bvYPf8~ ,к=(,˞-bʂ+J%\(85! Orv:s?3W;ɲEbQvNbFF@•#v5J\*'IJV>n6kzYpƢ؂0Xb|R&C'%(*8Fo*bb;TXpUSQ_/ n@bjo`cA󥦍yY{$Q&6_E8.kW&eU5XL,yY-SIIsyqq=ܽw NF hv.7堆IvD'ұE]O6\=8gzp=YAOeTfAsc`./$蝴  *7P3j{NтfejAE='K}!ɢ&W MVM@OwOY$B(v{s!_X>꠆*2_/|, Ԭ*";^HW}}c!!F w *P2`5ò㑎NY,35OXR'\gŖZt>G޲)7Ͽ6kfbk(so ǿ+Tj-5yNтfo\ƽˍ*GѾ\/f>9ph {;k씃ZΎx7mj> Rl[lM>>+oh:sӥ_PE=JYX5맊HW ﵾ,oY`jns XLe+(-ԧЬ[WcJGD磉 \`u][{۶viFnFY{wH|&|RzK?b  }dHF$I@crEIz7DдN^NNz򓲋i./xxާeF^gL7J?G:v6,mکla T*zsCH9ˉ=ūO{W5f_\1I{xMVdDdVՆ} = βz yF/dWZtQJm\*~l+șHGB6Ӓz2;ҙ f *dXȖ;oIȑ-/r]O$TltS|wF:e[9(BHc'JSiu>uO'xdkgbJta9öմA/lWMǍÃrWK =5ZYk H~b- 3'yM~ 6 ǾXA5m(‘byآ)v l,`c֤6̠'a\uY8Y \UGsv tdkg'zy]X-NzҝmŢۅ>zh?ϯ 1̢Mg8$=md6m0YJ>o3 ^/'/'`_sތ~4z 3l7汳c7ѦM_q`mWM!ߗTΡUk)Lუco>Z\ m`=`Gfyv]z|Rɱ1d(Obg8% (֬WU1Rr jQu[;Z}-" Z|RFpeaƶ @,zKsZ!q\&߇\ONe~d$7n7QNlwW7i'z?Z-H] L嚔H`qڷ;;)nQV L z"]A@ !v4$["+M0 FZAj9G`Ewr[(:l~ֵr޳3wtx"8n.1'X穚`v';8[]]cSۈRtژbZZ}9=|sN5VJUlT҆U>,Y_=e1(' +MTqNeq`AFur.Ƅ">qqsr6?JO~[3, g~=)jY,̂~^k'ɇ3 ߳œ<  G* 5 -,[J;`RWS'TOR).զjQе5}n=}nO{e3RYմ\j6 k7P/`ߦ&t:|U 5ՆqEl,S˄R{ƛQwR]sblt RQX5$?ˁ+.׬F̯ge5\뮢VP\#]McȞ-_0fP j]]]EkUZɴ[HRbg&ollj=lllƌV=夲6n7W&Tj H|hCj/Kt*|:YSRMȖDV .6؈d!VpQ=ydOg0BkQ;jCljTofn;hko6md2Ts<.O}MfE]ޮ%d2k<;3b |>Z/*µL3Ռr#lu/VezF( a!uwv7ީy6?9GW~{27pǤ yz &t,T<2s8 q&u!2 бIɓ' K8A++E݃ A 뒺:>3g7 6yw_YB鑭5H&$ jX,A@ #[@ Gu~m6@ 7t{$$fBb˼nd/~@ Z*ϳfZ4b @ }ٳE g@ _?_y +K[@ {""@VZ} /[#iY E,0btb 3>.;rtFQFENG~IN:aD{)˲S(j5z2^jP;)nq]nv)G_ 3"hwj=wQ a&p0'u:2[30W{E喇v-nY|͂%5}2~˼Qi2'rZ 0ޮ#~Ho+5r+e+W?qb;:vo +vY=V]&?UR;[Y[lwWŭɚ"YZi\iu{1|2<ѯ X<Аf{zB/K:cbzk!Ot;ebc [ٞzЪvBgs + n۱!;l 6,gϿppK'&~^ަN;;j ֲj l׶&ij˓!ſ}WRߗJ_-::J_Mp5|x%}{Ocͱ1[\iD1#x¿ׯmjtP0zE!>b=ý蹫k.1A,.`B݂WZL/z$~yFOu>W .֕#EOic_ +"^$ R8?cU_@a3 @zbKT CA=ML#7y=&<C4V\(5!S-=5o6עuU•#TRRRjx6j+JZ27 -V*1X3t/{+vLsDqDOP.;J}C0 Jg;iްӈβҚu%mlN!e:7$VJgzӟe'rFUYY~ƶ@HpfEό;cEaϩG쪪&kDakX-S=~A3p~! ,$蝴  .PsC}PyyqqQԷ>ws J;S=k׊#ZnaISj!ɞwR!k}C_Ѥg\DF!>6B++x&mzwtv4<Р<`󕂮toIJ8ZcY) Q}4KdYs@*zUEUg~1,ZB%3D'ұA9JYt4bs`'fe4o-X-x5z4fs᷆_+쭩]>UY|X`dWJeng(bkh*yhALķ,M֗Z-V,^b6q1\gNpZ\[qt `_p|ns+-z?3kbK^km־N=JYX(SfSNuwv#Tݰ_r]ߒd8SvQʶEZ Tm_5M[UGgG|b!#', jzrMֈ ?|-pϖKg}}մk4nPؚm[lRNҴT `^U5'C 01?"7mnv$,$$pU~`b@}+RI:u0kcl ΖJώU5ò@}g8_yL_OL{^U/<2Y Ǡb6,-@PSs& $T,S۳U/g#2m'O8;  @ l>7bƯrdA>[@ bl;a\ aVm@ a)rJEwk o*>2ok޻@ rf5ae1w!@Xh_)R80h@ Z?q\&y衇B"Ȟ-@ +B5pb/@ !G}fJIENDB`engauge-digitizer-5.2/usermanual/dlgcurves.html000066400000000000000000000024751222557406400220420ustar00rootroot00000000000000 Engauge Digitizer - Curves Dialog

    Engauge Digitizer - Curves Dialog


    The curves dialog can:

    • Add new curves
    • Remove existing curves (but there must always be at least one)
    • Rename curves (but every curve name must be unique)
    • Change curve settings
    • Reorder curves

    Each curve is drawn as a series of points, and lines between the points. To control how those points and lines are drawn, change the curve settings.

    The order of the curve names defined in this dialog, will appear in every exported file. To control the order of the curves in the export file, move the curve names around using the Move Up and Move Down buttons.

    An example of a curves dialog with two curves is shown below:

            

    engauge-digitizer-5.2/usermanual/dlgcurves1.png000066400000000000000000000331721222557406400217410ustar00rootroot00000000000000PNG  IHDR pHYsHHFk>6,IDATx}lU7_xj (cuWV .\: wє} H+6)+6]-i@w7)]Z%mYmo]t zuRj2uKm#HǸ4q$~d'9go]ow|g'mذMpeZا"*?~ETO!RcD$'eC8q`d͚q[JD7įKbm6%9&2MJO'RzX٫N8rd83mzoZDH}WID1a{OBPj"[֚vxӡ]Ԅ37eH7?3&=2)+(ߘe[agxA2s5v ;xS7̘NriDTh2T"{n8KvZ&)㹠Icƴ!KULp0&8ToHn3 YyW[K3?.7:%"KQ&gD\s%/e=mJEv]^Uueç'G좛(sbRR J#?Lz{s}MOFŚbj6.Iiɘڞ M?; u}Wjt{G89 ww)C&?!6jV/esjMmۓnZK̳$fGxK~j~$+MdcmOɚgڙUkxQF9SWMJ!fjlS)c^. ^:JDe${|eW4cdNYo=^MBQk9|*~ tRÑԗh٪TڛJ3]Xnq G"G"_ ϻ&&o⼙j_j.%H={.)wD400l|=u6h_ۡC/&*wRF&f-*46{ڗZ𮙭(g 8֛+"κ"(=i:pIR#^ybr-3soet.,"hDL.W'c:532tFq=^wב'BOΎ>?I&7'#C.Vy?Hzƿ;|*\\F&O]L M_GZtD1ٺw㙯[36ͳDyPpG !|[=]:e?ΫsSy)TH7ֶ̫U e?˜tdf2sIjЈHQD\ٖh|Zgw͌-,NRͮש{KI$ʼn"W̴ΪSu=y]%8w|=FDlRK٨y>$W eu99R^6ٺv bGލwTߛ̍r\bhѮ䤙,:+өAN$tusӗR|-8]ӥ̚ +8)4)V(@i-~L=d08'{;w**QR{?ʑEnyVeJ=>\M3->1d2v֟ [XOV?֥S_nv>Z0EV,ڍiw[q{DW n\+ &wt^ 7=͟JtAex$_2WIv{o_^+oY[ZYE+1%s]I}ֲ>KCA/z2DOD4t>ߏ}dkǔO1m?&?K?\ w'SyǢqߏ}'v&fϠMhƈ|EMM]3@BrP(ZI4oyk3OZb:w})ɽ(v&ooxg*X-"nq2SS}o5iLgv7z++2viC@U'&&^?A@ׁ?ONжYiQ}J<!F]:(1 6tCUއ ʑJDD |䣑l0%/&876*3-OFϝ;%ԥTØR jB\\i>xGawdW@'9-jBOsYcOmOTf?]t%ғ閧[A4i>9~0J'FD4|r鑦ۇJ/ CXIݤ}|C݇)aK?OD1Z 8(Q9$K)~&UUh)^-73LD 'ZȘ2 >`=vK߽NY "R$Ş(Wtɜ±b;?,Y7Q9R\[L<=ep|ณeA'a0SjVM~LOAuwILZ=L1z_fj-Jwn/$KDOJBDtZe" {׿ٯ >{+:3-z2Ko+96$Ybzc,3w8alۺdN<}ioЩ!2;9o8=w+ʭTݤlY;w>o˲uC7-SOڤ@L˴G승\#gZ6EOFû¦em#C݇;v/s ֖13NV{'h޻{l_T]u ;!O<18BҮ_ϷEѷ洹[["T*u:ԗ-wo4D۞l#"`dQxG؞9X1z v7.y6R5}iFd9'L2T-EL\$M-^.n&UXjLKY}TJww~CvT%IURDcV{8.O_\Bw3X.0T JOv7@*G+[}{8 g=}{Uz.CG_?g"kV?Ļ.f]䧸)}ޕQXHwr "m"Qj4>> g8 K5p`A0pL A0pL gW~]a-+_`R)b>rȑJo)>uZӴ25n|қx{L/vk+X-Jj0zq_PyIJMOKϷSIm6l8_gC[CvmA׷ɽ=IO۞k;a"25}?J$ڟi&4V:t6m&ΟwmƘJk=͏7/8G^'ԥc{7z"jj" m e?\t>4<[Rw:hạ>.h.=T--yEF.t4S=ffn31>ͽ7q>T- N(n};3ɟ;v˱w .*f)w͔7lc -eZ!t:ޢ?ǜd\pD?n֙C7}K!Iʼ;a(ߤ-Od;q>NKVX?T.5ﵾgӿ)ǔ;<{OUU7u|woG#"~ = c¹ -<`A37C@B%|ѓouGE=>e-'^UՖ-}}d*bL3Z~GT%%?Mr3c?֛@[\.]9vfGbͱąD`s cd1-NE#m@T#FQxWN"J$A>w7z++2viC@s`YkS;x/Zչ$WEz1=i--7n qjvW|(/SzNgî(+rOݷ]71"y}ΛDTw\ڗ8;cUfA"<9~ ,UI%ғ閧[A4i>9~0J'FD4|r&"s[$,''ϵ6o&FGG+7'LLjyo~;;_w[@@UU*h9,ޢGt:=}W)b/E鴓9cwcYȘ2 >`7=v?d?E" ^ {"3|_`H|HDD{?Ge{_{o7Y!"F~rE1>bT LkZD Sx:L˴{+e5rk}/thxWش̺uDtPv~"V,J2 n| ѧަF=jjnsnZf,{``HS-; ;fMu׏-woaְ6"b~ c,#; ,Vn;IR Զl1e*VwO]31Mj  .5rF˟֪ϭ]]ڕ?E#,1BG (6"W`qn.a[-Jh_.K}[vVnrC4r@V@hGHmA oR`\f=)}0-iC۶z}5.LS%s z7.SLhXeܤ(OhqG]A_T͘TT׌9hsD,jjPk`I( ,r R»2-eE J~0xBXC4w9/d'~K=ioܼ+(W87s4>|͑˩Uw:"5ƔK+n-nS(>YUv}gÝoļw-J]NKUw Z#~>i6rkUM=Ob _n2~AdD6*gόhFf*ռ+୕G/C~5qA#mAaz7̢Uӫ*`۬oS[sVKT[6LNDr6ygc""c$"z.55nV[HM԰GĈ6adf-tou(mT\Kg[N^ֈweG,IcʥUT6iM) "9(-Tm|jXwKW , "wN-:l Y'WKcrݮ}K^UQeeOzLD}Md̖=AVED$U1ZY#HT] pCYJo*Fyh>}S>A&vwz{>_?->rq,ٗtkh&̴  6?BDDR@ 뛖2-.bάF?Ȟ>[W!#}'f}s\z8fgH"Rg@8&JOp(9@8Eļ?@>jٿIY >y=)}}-&ԥTRJODMhv^j=ݎQ}©jsIt:MhDȊ] rډE $&'N1rt`D=`O_t,v݂8ov:ScN1uι\-]kL%`Z˸8bڤ#k9s4i,mIMe43bD4d좭_͜iƔAnexfޥ0KO4MrP:f9ovl[VfZB0TT%)ՊZf懶=6[it]DArd]p$ISƔ1RcZLDȊie VZ:N"")N3WW]۽lL~N$vf$wy[ӺIf|^̲t&=fRX lIU3vrzA|LQޱ9m\ɜ6\+O:͊sԦ,kyi* ޕP@iA p˒B `T`ENGX Hk/ xE`)0A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL A0pL GW` k}ҫwULEj}Zϴ.7L+Rҫ .Ƙ\K%B $̫fWADBETD ` @8& ` *{{3߻{G>JP1o7WdioSH&ʓkaF^y }_쏱뿷{mO{cFF=pl 7a_g}};v*HBA0T|h> èooyo>FD'L8gDzە=i78qy=Cookh<9W-ҾPy1jΖ^j{bgbsUUG>!"Z>wI%:C3FB? jpQ/;uwq{{zY ]}q *xGȢ{C`Lew}<;,exs~U#ʕ+*F4Z_}q *Ao n}_-j-~@YXR/Z|4cl)K[z1&S7]/uTPmMm볭1e'ֲgHƔ1Pnj}a{ʫ '[4BDXܸjx|? VqO`(Iпٿ_wAy?ƑG {ʫr߿)r6v.5;o?zߏ冝  $+}|߲ڟw=WzL A0pL uL+Rw:"LE]o3^5w˭`(^/9X 1pL A0pL A0pp7@<OWa _n@<+kYn6!V~G}WAh}cLP.E=&0^ ?QP^ur J /1pc(1zL jp`.1~&QⓄX@)X{^+şq#3W,y,u)En ;[u7&\]"2 " %' -<`A= <'F%|ѓQ{b)n"z짏uvu&/&w?{Z=y'=D(% ~[IƘ->11[Ǖ>\D)=h?ND}o~pLuAww4P?֪Z|ph.Ik̭eZfϫ=ggZ&\|VI볭looWdUs|Kdr"+M{r͏7E3qιz\D~SN朻rUKcNtIJ'"Jc )=ݑykID_DH=]]%N npc`6]=p{U)IVƚ)[KV ?T[[{]JMjqs$Y""}JW"JӲ,ϠOD$2c[y{F Qkyk`f:s7=/HVzWTL\AD&-+ȴL~F{ϴLmRw8e/˲_ܯizZ&LdiݴLdZ漵 -iž_UsΡSC(n"ᠣM}rHC$`67m l=Kb}+jN߾%%IR}bçsSerPס--[ õ'G/.^.b싥JU;8˟?E#4dK˓-;BA0B."PCkc(^*"D=&RVzL S9|tELOHZ˭`4[ "^rc @8& ` @8& `\&Ga)peryIxIouWz-`I6`gRJ}⬱`ՇݷݷSܯnwⓄ]~& EE"ynGsn#7e6Lr97ʕ+YZ{՞vЩ}-:&;ZvZkY,ljzC z{^}O ]GuI.=0+δʲ P b+W,bSf*sP=M*ִ녮C912ٴInTz$=ӱfW( ;Df|QJ`L<q{M{e#Gf'&?K?\ w'V(&\(ozfϝ?Gv:uܹsa"Jny{smm5?$d8wmVݤ $WDDt %Mj1qc'untfw""c ?%-Έ-[}W9-rߚMĕ5v>RO ~cWze00Hy MF3OBB###tz!""F!8\EM^H,ˉ uZ-"ou_kT*53ƤH i=?NDJbI-o?ygsVJz*I}lTkUs_"+3a];.)9jW96Jc qٴ`*మS]]9(v*>?2Ǝ9c; Mc'ϵJ8qcFI|8ṅxhZ;!RkTnWKS'o?O OWvwk>$\[ϫ= QءCmϵ*]׏656{j#GNGA>kG8 4(Պ>(5$"tޏQȰ*FDdͬ/r狝$IS~YrNjRdL|"t>>>n߲oM P̻rD] n n2xr{[0$IeJ\[oF>ݰ{[k|,iZ]CcG#{۽ȼ-0;:p[|?n7xo}[Qs~--H*R-r J'j?J5֣/4,gg+kXΆ swr]6seV=,-_rmh/vy/]4e|Wn ~Âp4-BҩT\dwd\` QrwҊ^MO60\BXmܰ`NMir.bLJOe|hatC8 P__n swS9}jһ "m"Qry`][/q(QX*(c +1pL A0pL A0p o˹ WMWz+@ :ߖw)k05=R_iQ[1T}cS~o1.(;Nrܽ1;DDJ47V_.lU YIENDB`engauge-digitizer-5.2/usermanual/dlgdiscretize.html000066400000000000000000000040001222557406400226620ustar00rootroot00000000000000 Engauge Digitizer - Discretize Dialog

    Engauge Digitizer - Discretize Dialog


    The Discretize dialog lets you adjust how the original image is processed. The processed image is used in Segment Fill and Point Match. To see the processed image, select the View/Processed Image menu option.

    When the original image is processed, the Discretize settings determine which attribute of the picture will be used to determine if each pixel is 'on', or 'off'. The availabe attributes are:

    • Intensity, similar to Value, refers to the degree of lightness or darkness.
    • Foreground is defined as any part of the image that is not the background color. The background color is defined to be the color that appears most often in the original image.
    • Hue is the color. It ranges from red, through various colors, and then back to red.
    • Saturation refers to the degree of hue. Unsaturated colors are considered black, white and shades of gray.
    • Value, similar to Intensity, refers to the degree of lightness or darkness.

    Select an attribute. A histogram of the attribute values will appear in the histogram window. If necessary, click and drag the two tabs in that window to change the attribute range. Your changes will appear in the Preview window.

    The Discretize settings that successfully clean up the pointplot.bmp example are shown below.

          

    engauge-digitizer-5.2/usermanual/dlgdiscretize1.png000066400000000000000000000437041222557406400226010ustar00rootroot00000000000000PNG  IHDR pHYsHHFk>GvIDATxlu?W>JS*)e%Mq+Hj7 hirhIB}@Jݸ'z8uVP(vTu6bFR3q'u㌟U0ϼ=3ӂlsL'O7Vg}G *똱1cv_WDEHOzʼCHbt R*U(Q&7 IFH8>M/4g555gI-Ҥ'HB#]"IW@Do^DJٖC^ _J_1Y|+0+shTYD4??_SS~i"̙̙98"Ldz6"xs-,eU"u*u:NID 22le6Y(<|p֟*\]쮦n"U& O ,}Iaf{'etLGGCa4A86n]'i"I},>څ F,RhBs9biBjHK+rS|1Aga)Zw0kIAHr7 Xڞwz còF'٩=˔JDjꖣIN4"PBILzPˎC"r"33D#Ǐ^$9Ӣ/ 3[^}oa%f7's,gzyZ& SBD$YZx!^ yb7HX6~qx^G]&J+a pxR(M"1狳gq;SY#I3ܴSMÓGSR{y#wN׹Zlj7zp&#RѳՄs/gcY=RbYE%]WB\{qmxqA^OD4nKcvy)F~fQobw(%1:f.E9qͩl{98QJOLCw).Q|Iq>ХkA"C9܇Skj,+u<6MJ9,[lbib|(w{d]-}9v%W? [ "i}򤍻}WF:VJK`zHLz>&ln00cb-MVŨ(}Oݡ e))!pwh"BD+؄%dj~ ydcG ҜyZ7-]yZyu{ _3V^7Hs%ibMzJKQr[J:)>Y c|Y2ART%Nʙ}%єh+c>yVǧa2SJ2!D륹T[2ۃ[k%I2:n!TlBJR =m|kBNƾO$")p.g?%O}>9F[ ]I*>Oz'=s*#WMTNv&GD}x\[r6Yd}}"1[o A]Ł7/o;~ХeHΔ7w]άa g8'U(&\%:tx;I#yBDa1.N4ۏ]7܇!Zze᜵X^~,KD1SgPf:iNR cÔ*NK݊Gξg޻{3M)rZj(8v><ֹԜȲŷ?wE"Oߤ~ASb62%eGJ$A~)=hi:ؠS)^HKNjubks#7V()o ck MSh"'l1+&I{m`FBK-w8w-ϙ'] ,,+,D3rzOf7UG"a*9G~پ"Zr.g:tvZ叇=wv"=D{˺dq4%\Joj1,ODobRZD:F1DJJ$_ a?2:&{."Ғ+p]FIL8%c-JƲ+#і BDi {E2 02ah\CN03G?#U::I[줧şIr/I/(`xO&}oV~dwKE"){.yq9J$^o[3K[G.L%п(51*QP..b.RGf2cl(H4c3ֽ?t9kd cLDN;w.?Ccsp*!"1oxzl(>)>%OcSq"bua op6*u}9Z0c, N9"-Zcz8]Wo5'&_1aRE_o(Q ?N L܃c>+P7^lppPMA @Sj)5h B 4PMAiX9lF3k\g.Yx2{zTR9n?Ql.BCE&#(%f3=P VwED ZwÓ%)(aKmC_嫯ׇRɔ^Z[>|Pe{kqKR+V5ubU*kuilNThPPoFNj cCCo w<;3&o9bZVkyQ}=t)q]nn#"a/Ϳh& ;yfs"W#̞cQj &B<;J%xDJ<Zkvŧ-[;nq/ ">2'vubdowun={w˩fosfʥuO 9xđ]BZhl62d81{w}(~=Zأ#letu?ĴcsZjѓo,l9Q$"pk<=Wjj.|9gL&a>ef L&HwOG&3Ĵ[Oxct+=Ϸ?~,~=nJi͡vGz}(g/AiS01wMO6q9%L200D-ƍp$2c\H$L0Wer.x( Х$I=\J!10pNQ˳-vβ"IR]-F}ؗ1" M RB1ϱ!7s{tĚXu5)$}Hp-5y# p[wX[DJilZSRز= ֱd2~*/Qթzx|.Q2b'P˳eui_>R~Q%zÚSSo?|̲]d8| D$#]l՜o!!`dJ&3Xer9=lY:? YLvKMCCσ}ݾǞR}u# g_پ'"bM,YbYK-x!8WIi%QK1iLqu^MZ>LibYRBJIr6i3C$iQӧ v{=%[Z#Eغ<[@9~̻}BշR[k""Az"J$M) tGY rKMLkHj]<$f+JqѲ"444L/v' qN̾oKN{LH$VR~|:?l= zS)y򲖴Gt[:) \B|&ND ȭ]7)Mdb̘۱!I qNyg\xJDLFc'98M&SP:ihh_U:+˵11A5Z$QP;feq|Rs{͟;n}`$@ij|'2xrP)-wF?6:K{xj6ybSDLSGW؇c\l@q:)9K( f9x>PjwH'fejr3miǭ\-y-Vm[&ү~:D{k6[KD-{(r5zvٱ"n޺ji ԗS2r2YS@Ej/u<&>^FDt;5j>|#"FNu3>;WF'oϾpwf/%LA× 5TRFDϵ;:dn o.$I"W"Ҝd2—y3za9;%I=;}ҫ5&?=/A3MƼs&ttcGcssK P[:;mmm E㤴Zqb{`O WZZ#k܏6kw,*GIZjC-O"f0 QΔ"l*1;Kb&!Ό#[L"rq0 3xbǞNo7mXޑ{!JgltF{#j =l]UIz^߈zSI:rp/{E>PN% O/tX/WrgRrr܏Vxݼysa1OfX[BJ(`[&%hzL5ZqWc*7ϡO'z_xQP ^/Q V ~(C{ uyr`S^o5jSc♁ځGA ^ ]ħDjWUG3ATY5@A|. B "Z )hA ^ ] ǧOBAq>bs>b ^ ]OmPmj ԠJ9 򌥾C@1UB#v ԠGj)h5/6 @b7jW -5вH# {JZÆPMA @Sj)5h B jWJxm;;j,h_IBM'< mUf~~^Z?Ԣףr:z}xiv+PJuhl69'6c;Wխȡ&7Ӗ'LnXÐSf{{;n^J9{ÓՈqcg乢ף&Q7͡Kk6Óaep&B^r%Sqo׺j݉Ӆ<&a/qHtD4==z4q͇<}$Yȩ_wƧ$6nvw>E>( Se.5==Rw-`Ӊ赨(^ۃF|6J :j^mQj89X}{9y:;ɰ$I=\JDL&SRxҤ0+4=\뱕ͫv^'"0yi2L^W{@ve嗦ZS2  蘑y$7da='n2s\l^~ *jֶ6Wk^%(1(94Lpu_ώ$I✨ߢO$ek*6\{{f # pj=$C-O ޞfe7ՙ&D28p?ΞaodmgJHQj6I444^Q"b)XabbюW{ҭAipLէ(~YwX9[dٔ,WGw֝V8$D:8'6VbF#rjytD=;vU*ֱw神Ƈ=?sahj+ P<j9tWGWx1$Iw!"C W?P Cm~~>*rhCNl^iFA322"wFQFT"uu%_+ɲ(̜8)-֯g9ӠPJr`ɕ7g&v-xCӰd2u3%(5JdPjVY6ed޹ ߳mG_hu1qNl7ZVe)U$8nȕd*޼y3]ew̗3co@*ᅂS,~ EQYD UJj@UJ#oP:P( hJʌae|w vwEE1.fXN/ʟJ!Ԫljca]} Ω @SpYur2 PN?Լ(j(91~~ sjUjLL? 9/iwsI$e%<g$uK]ޒ`t9BkU;Θ[k*l QOD/]fz˜J-W [3_SMA @Sj)5h B 4PMA @Sj)%A{N7er$&YN6mmmh+~EG8yk!A>N??BCoǮ$Ib0\=ec_q~ָ*%'7ohT%[g)ݰmViʪЦ^ſ?ȡ&7VzL[I{wtDc\milNNwT <"4zM$D8ħkx @eP#?LKBp8әr{h0ֱҜTxuXwXWətĚXsgo?wD$^D~ʕ>>%1x!8?QL`(v`0 $"bk3GZS29Ԭ;mmmx {z$Iy7=]=2[dž'=ʼ \5Qb6!Zr6i2Jr9*0"W"o GET"^vو(%1TDK0 ȳ3 ^v<߱BJwMu7g'ܥ PSKX V/xb FkRH 1<ڀ`'Kx)WytlB 4PMA Ԡ,jWB J.<6kVZjd6e[Эjx2\){D(5*F*p8;Kay^ fO=%~x/0U48p8<+l6 8~'?afdjyÎـ<+^є؍!oюGc:Vk@h"<] eO)w݁PR-4y{-g?] 1l٦>"KI"_3:e[6=,|jT;qR:~~R),.pzzza[~3W}xnqS 7$K|lP2: 4=R 6TS;SB*%Z6=,2tr/z#JD3C#CmJw }ӣ={/x>8ww 9=Midvb PR9-g[:=kb=OzΝ=g.7BCc+S8qi±Ii\HsdRr'-)"cvζ&I񗏳f|nNd}hXc*Jou[$IGxS^JII{ȕ$IZmDDc>>^,1D{gnHbkbm$IZ>R}]oXvଶJ/S$ ӯ֐M%gxO>|2|)}+9:2*O⍦L( +V1[&?g)s3NsV9f5c`h?"bY:a$ywx%MMW1l1(ff-d+PjU*S$rdV2՚Xk3s`7C:u䩉 JSJjMٗw22 ɝrBw^/NibM Hile|%ӧ3'9)̊*R?hb"=uw㧎ѳ,z~#{ &Cϋ<ٔ_+5 |kdK ϱ1pJҔR'wԳuV$JD__Woٵp>1MbZ 0ՙ]|Þ:,˷;LdXZUyj%bFt}됇bHӏRgZ]nrF?~|/xE.#Ύ_v5{xt[ w[պ:[CՃmn'/MzHHƇ;.+uq\q/'7oxCPsj˯x}xqWHao@!@+rʹKnqJ 'kqԕ)A 6mlFQ)onZ~2q=w=P#'JΞs7eiƣѨY_;K5n>gVUb98=;JDKaґn4EIdXi.G>9\SS2sh4z:~AwWc-b)#k6^U wuSyA`tȂ,4810=?~-Q͇ծ`ص$cWխ[nݺǟ}O.w'ClhhX~ak[[+*A!tx3 }:7=]=2[dž'=SvVzQ<o92xÍHhۃ6z[*V:7gɢףədӓMA^WԆ^Z\k=l:~cmm%?)'LfS Rce ĮŢףg86Lv.E㮡ׇ:>k=v5:;zWe0&"رXL:V⇚u8EMY`9-OHscO/CM\n!>ǽ P߳mG_h=F{cG 5:ׁ܃Rwϋ= X *$ISM XV> ~sXž>RbD?+~yy@^xm 3~G׏xc䝑v"2.FCJY~w"ߒ2Ο;Gό]Sd2);qD"D$ڢJ BDnI-mxAjV5QSߤ(27lFcQRyHe@AֶVVm[hl(ŪKOD]xJ-9j׷BPMA @Sj)5Q6˫vG!ԪQ(.ZձgpN 4PMA @Sj)5h B 4PMA @Sj)z/]s<j*ӚCm!i @Sj)5h B 4PMA @Sj)纙&y 7{o޼YBK7o/_}w7Hbh}E.*@R!'"No4DKQWཀ}=|)'"ܙs"gr${J$ZUCDDB~=?;SV~cx9O gR)5h B 4PMA @Sj)eA{zTXwX˶rq2/5~~</__*t=4~~ rQծS-w5T!@H_T ` iO S/a;\nSvV[:haP Ru3dzV"ߪ]-"ԠXaUKNu뇫%YKu)Զmۖ=~[oݺnRuIUFB 6Dn8THAcoUlB.MDt믷VyW-hFP:۹@hUͷ5(JWیBA9j4= Wi۪¿jP&hiY:hK{t_Jkz Ԡ|eP5(7DB PMAu$*ZjL5AU!*ΩQM*Zj,45_lʁP($ZEA|Dj)5( B 4B3 6h B 4PMA @Sj)5h B 4PMW@Mx Zj&B * b6*CAq!Ԡ `j>dB * łPMA @Sj)'d&>l6hjh ڀOXb2!`JgFo;ũP%XBE)-e^g\R7\(_RϵTP8(kͨjk$\ɗFqCjW >_kUA nJD~Nw Uk >LM_+ن?_[nUuoW 6nݟMTڶm_ip@ŪƚTDK XԿPp֭/(Ӻ ~6]3*Bۖ_i P9TgE1|mޏ op4~M|>e嫔ڦǭ;yTk?J TKP[o7EcԮ_Tk UP??*5Ԭ;x\U-Oh B 4PMA @Sj)5h B 4PMA @Sj)5h B 4E~V٬v6ݥPR(\"l61Gk } Tҽbc}j.P/ن +^؈/ΩUgT^Xx[T SGO-{!2(\"ԖҒUMO=OԖJ] O=Pzo o gᄁ,TMcysMIo=FpN omjעl{җFYm T<<&0.;Uޔ|y۶m{ͮ]ҒO9#ojQܺՒ=F]ݭ{s>"j?PC#~XwDon5p& b4yyxqo||{832r5zen>p6n۶m#"]5_ED9OQO\?uj -z)-)M P~[ vDNK!"rp-΍3={x{諰Hi!fwmv믷nEimL)#7jI&.Ƹ(<R0'6v7A5yߵ7؉HD?Hϵ;:2%&''cF:BC$qp+"2LKan;oyۭZJb@-US!!1RD2tJ~LBRxcj9SS4l1Qb&7ggFzN͚j3eH"aV`t[#K>Xk,*l>"ڊ PSMCCSHn/-uȶ&=O$>zmL㹎7=]=C:6yxӉ [8W8)-֟SŸ*ǏٝeOSvb|C0wFZֹ{<}aY0inĚ49Vܽ`5y7OJ~ֲ$[qb( !"J/VCJKd~?z C˘Amd2u.0+HiInbiQ[{M_ܜNoTºj:} C+}7g3u}m0 0SWZZծ\|Ov9yzۃ6cmcni-1FNIiiߣo#9q~bjk%ZZ9 +_NAD)դga_)7vL/_$gD$ Zd__^yW0Wϝ~t&iP٫I)M \iC-]FǘjMykq/M&SKUz/KX/~@( 4V"h-QLVNJKzez| e˗ ] F-9{aKS3 @Sj)8̨'V&ͮ BmU /J (^`Jױ5 C* ]ASMA @StDmJ) PVIIjlfrLJ_gggb6v@Sj)5h B 4PMA @Sj)5h B 4%r>djhDBڛսYt2T3??_SSs3 ;`68R{;Ft_Jp X?;iI޽%c;Hn9 E5X;I>ߨ!"9XzNNbe^ԨR%IENDB`engauge-digitizer-5.2/usermanual/dlgexport.html000066400000000000000000000042371222557406400220520ustar00rootroot00000000000000 Engauge Digitizer - Export Setup Dialog

    Engauge Digitizer - Export Setup Dialog


    The Export Setup dialog is very powerful, so that exported files can can be easily imported into other tools such as Excel and Gnumeric.

    Only curves may be exported, so this dialog ignores all measures.

    Every curve will be exported by default. To prevent a curve from getting exported, select the curve name and then click on the Exclude button. Clicking on the Include button will return the curve to the export list.

    The curves are exported as a set of points. The user may control which points are exported. X values from all curves, just the first curve, or from the grid lines may be selected, and corresponding Y values will be calculated. The raw X and Y values can also be selected, although this format is typically less useful to other applications.

    Between each two fields (or entries) in the export file, there is a delimiter. The type of delimiter may be selected in this dialog, so the exported file can be easily read into another application. Examples of delimiters are commas, spaces and tabs.

    By default, a simple header line is inserted at the top of each exported file. This header line contains the names of each column of data. Such popular spreadsheet programs as Excel and Gnumeric can read the column names from the simple header line. The header line can be removed, or slightly changed for compatibility with Gnuplot. If you want complete Gnuplot compatibility, spaces should be used as delimiters.

    An example of the export setup for a simple document is shown below:

            

    engauge-digitizer-5.2/usermanual/dlgexport1.png000066400000000000000000000754241222557406400217610ustar00rootroot00000000000000PNG  IHDRT5& pHYsHHFk>zIDATxl8'> _Utҷrj"|ԘQ-fV{T.>jnVmNI5JBz1է &}4T3L-8(mggwqb;<r~^#O|~ݻw[BȤ$ sn^3XmAE;]/CXx"G!@<HȼP@!Lg̹VJFwB_2DD(W u-uݻw4i M 2i"JZ!LZ6z!CVB| W \o.xqIhV OՅ2jiQP lګJ&ޤ<=N`@8ܻwoݺuS=?5X=&At3r?Wx #Klg{s0tAHxU :;mxkC',NmtjZ`]+ 9OBZfE FIǤw',CB@̚ϖ=&$>b7ԣJ*u8 y ~&eSHI02x) &PԈ 2}^NCkAXvM DZ7ѿ&d.xD> )LҊag K%GQL9GM@A;E +VW]:! kᢗX1ML9E[ #V|ٸ薶]GOFNMi-gҷg];UZuzʻ(B2Tp=,CBZ!LtNQynN.ٴNc:hY"VxEa"OF]"SqECSA}e=ml;}4QkoM8~@DZ p>iKNBw_4i&JjFשhAeRq<ɵh:li%Iy80P!2ˌ:95QIY[yDFY;Lxm;ǖ[IBQh |t֩C`ʧISvڷ1p@[>*՟Yy+J)Lp O飩ԣVW1"|#طOo0N.tVd]$D}U_}y JM(;?P}޺IxrLJ4E(JJ%I(V-/M*,g';a# i^V VV}*k DMgó7sӗ(e21^ ҷ404)I"]DOq=)xfD,>I%  T>~H+4M[m:wfQsoTnd,s4쉱є deiADB,J fN!7,."(j=.٘8Lfƿ 72ҠC!L( C);APUFiEJ,EQ xT `jue:UƦRTa`E1V#]>'Ufԓ5 Yӻ,%i, AAjT;Þ^R&SZR)%%p,hyS/7h&Je[f߮Yvi*@ h飩(uʝ:qDYa;YA;8dO:w??madvT۩ V5qMLM* ¸~,ii:XSt@=8?⫱7vj0qfbWS2 inP&_m:$mLJ ^g bh&trcbJ?nJ;7%ɔ(Y4}7umk#P,Ϝ-2l;ʽ6FYhfo9 Kt e)]8}:2sˍ yW+t6]\TNw t3ҽѵ¡8X-l`TMulл-Y#Ca186qox *xr0t&Ll[}Bg;rgG[Lo&ca 5&ѿkVk#@V&%}=3:7LFdEv:R͔*:4}) S@YAkLT%V}&7il;jJMH\Imf8f/0N.Ȑuw%қ!wq3KwϺ8@? &0$,zT0=iE64I)aϺ]vTFE9G[LHb @aYz4A%s4y -y=d'ʈ`H݈z>pZK2&2?'}E,$L%L]~Hw2MoՒ$͒T=0tU+$MZ 8c~UE_:֬_:mjهevՙ ly;~dkm <7kYaƯ̯;*k@@b@[ۭLUNꂖ HeU.on( @5!NbF->'8s+eBZ۫ IM ^ J>D eR6l@t[XH[KOTV8hYiqB!LǙ E eП# D[SN߷%FE.]IJyLɺX(ֿ%=ݭGZczUYVdo./E/Z AzOY.}qB;ky􇧇<'u?Bh6 k|1i1%Az%V >/  &SClr*_FM~;? υ;vTVTzyꞯ# 2r1( .KPDtxzPDԽZNDddӫM4EWe\k4d9 _@M]?i@)CV+}|(b1 ̝qRGN%Sd0t#i%ȑS"a"'(V^ Y}}++rp@l$|7Jɓj)6;]Nk0J '$2v;\7[˵&Rg)u ;UL țs3!bbR1iνΖfm`f7YF|H(JG[pV?Fj92a\TY=&qBTPr"΁=ą$VN\{LzP;=Gۅ1!x*Seȵ?tIU &h=VTl~YJI MH⸨_cr,p"&%e%,SjeZskӯ ィ0Lk(OZ#ʈd* jn 4I1t&YK*pKX1Ǻ|9zab/p,x&<=& O: 'ڜAyRNJ|ЯA/wi6=n˲=eXv*5+NN~ ro JSXZltDB}rScfBhn IBD  !``B&``B&``B&``B&``B&JFN˥nA"0ņc7ͱ%4?\hIpևQxI#[d6/hfQV>]pIf9ج_: E 1kftx,(焒V ,_xI#+JI3Y˯#O3f͞BW,ZN6p΂ߏ . %0ɐrv>f/|pSx0s?fN 7^~ oZv5r;vWrE+niXNޏ>ӐpC[.E/ſw 91+^[-ţq|ָ)'"U..b1XGM6eDӳL e_x,I|P_z?mimQn±oȌs-Ydkf!+r}]fSru/'{, yKz.UQzLpQP4RRjxx89 ԔQw .&R /4)^c H^Ld\G$Av|Lɰs Ї!0˰}4#9ϜrڮN+2|q8wܝ9ޏ.YtᡰV؇ 0rKz.UQp1;3sJ~ci\"`y>EPǼ_3By:x*u 050Lr<);91r jF-1 UNGP@IRwOo9*YTE1G$~TP!E2i"wЙPn`"7 W, T,' 9d*LzL3 r~0ļ=Aw*i)Y-V7gSTVRХ*rY1)J UF%%1TP &W[y>JʓV{yBdۛmVض*++'8g{@sɭa>N!33ѿk_˜v˓r+jy.'0uq1oRѥ*rs'$ݐOiӕU.*lo~~Z'wJz@;O|:ui"' XyiI:r5d1wGWpCDZW2zMֱӱӳד)O@/$MJ;iZ5ޑWi=]rQRBE V L!2 L!Y7ޢUu .4:::w֭:8ڴA\OITClb_F<˲CldH}߳ 9hVSITbWc9H\K(d@0ksv;vVG:#GkkjzL$IEW͉D"I)i~Ln Oأע`XiZw-^c%ܷ{L1XhQ X!}+e,$S)EQE'{Hguj"U0&"a"2 T-Ǵ*܏'b-iiMfx|_fd0x2q\nxbo=&a-EI+[*22?}",t~4y}}V..`,.gJ,%%Dr ǖ( \')Rڂy?H HL\K-MfD@*҇ME}K' RN˙U%:cBV<DŽV1Q&X$M`cZ[rc ]Fsò(2UN`xB i[o~+ϲYwALe4ޡG i-$) KJIdҲ&P&!)X6Y j(#}صu Vq1(E0 Mʤ"MJl9u6)xWNg/ED!D2QFT=^En eYaLЯ*EQÐ:-(m$~/DI+˜T0MVY6LS4@X*h>gUrT(#JNH T9Z;00| :߼<>}q'&EKyRnH)I-dcBV>~,ZuDŽ2 L!K tDittl6+hJrh{L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!2 L!1R\Bh5LKQ-́URoB3֘Bp00! Bp00! Bp00! BpS㋍n9BhZd`‡eBųv7>)**DŽ2 L!2 L!2 L!2 L!2 L!2 L qL1epԭ@Pd{;vB:pl6Q[d("N:|>q{VauD.Ff+L3oBPSGGGGGG|q罞Q9 cZ߹y+K_j8l`f+M3oBP$C M MH ^}h;aZoZpD"^f_@v;x~ ogTJJJZqqe$fhǓVjjǾnSjv_;ZVw0=gmzG|wg6}, QDNBk[+A]v9-|cO##ouX-|}Пb7b~"?UO:VjjmyܞЩPV'Kjjk~=|Yj̫jYu^ RRxZ@8cG;{?hOC ̱rlowg|^(VG} L2g't&d]`M]HSZw0A`s5MVZ)i"Op:qx@G[Sx# 2r> S@aʙňmM]0CS2Lb`P_h*5] &&T68uޝ*涘y~vqf!%2 I'@ MOZ1;9fdi]Z/I<</ T*4ee%h@jL,&g᪭UPb:(Z~rIQ*+*[^k<).g嶭ALg{ݙ6即ݏOH|7(|#XX]OO:^np_:V~?pn'•D"jv, $AK'v[VD"E Ҕyu;V;! d7a;XZXkrDOAVǓ\=&P^޽{y|XW9P;fx *D!#p"ySB]ǺZ_IA&``B&``B&``B&``B"[W#քZ[Ԑӣy!*_o{zzzzz zzzX9[* +V7xA YX]N}hq(4bcRxN>@d( _i~fQӴLm Efst^(b:']l90%-q K4$*|}mU9{*;]Nt!GƗ՘%N2lKR,Ò&[?QLb6t2Į\O~h:y^X 9kScLhՑZOحV+jTw#WGBBqpChjnt :w-VkL(y۠&a_i44j=W __ d;pυj E/FynFG ِyeVLSSgp4kZkln?:[v/w磒+rB4M4=~&~- `.MJj~߈3~;UrcccS}Ք;##ͿjvT;2{vN "X ~2HSt`k[gUrM/7ub=tkK;˘r1g4XLlfPqbjD~&z_.lt8:E4s/9>WU^ǾQ!ȾC#GO:w;w7ڜ }͆b9vT!!01!4˹o[6[l[mj\H-no(rowFeG %UU 4YDߒHNvQGbLȽϭFI&^,xE,Mܦ<~!Kv^YFӝwu{Gb Cծ*a2#(3FI\Ko.X]] G;F=R~Z>EK_6H:<)Z.+~ZCzO BZ.SNsƻ~enl=XEi}jZX½=Ymp0&l=|VAyW79wT!fې9&2ʌL?XGƦWf[|ʩ=R>*()Y+j`|:t:,}QRxxB- x\`u|RV X.gg cB8B !d8B9B9B930wr~lh߅œߋռ_C9`5[tRFTs~GܶͱN _I+:緾f-vW(Jnfb-5cs~Ͻ 5orm+v:=&+<ܫXPۊ|a9`o]vҁ#ߘ{VK]wK|y7 -Ɯ߳[rE[Zt˻ih)07B07BhX ,FhY ,FhY=&Њ !d8B !d8!d8!d8;cUl^>CdXP=݅/RX;e{Wzs~kAɶ޲!Gk?Ü߅߈{k8l\wBཀl[)xkzYA!{`ig`ys~ˊ\{pTW턤JzxܡwJv=4h3z 0|9/&R5jr_RwAZd2ƈԔu ˛)F1/緘 ț"V@(ZD2٬CPX4hM+>7]N+"Od)Y2"5R4"@Ґ5s~UUU`;x㋍@w*~YgK]B@Ґ5s~4E|fǰloZ_oNϞŧw1 9Z0".Wd{ߌ+)ŲբL*otTnĨVJJi}Uaf ćъӪoÅ~a<`Zk00! Bp00! s~# s~# grr^/.η:{h7ͧ? ]"La_GB=ry(}jǓ5 uW|ʙ۞ܵTJl>PZ\MmnwӴ౫6U̠F^OKk:?7}=(DG7\y}WKB=[^bRpV1&eE:t&zf-Ym-Lbϑj*++9rgʥf~P+f]쌵Zu/lIn B2&-wW0 xLeX z1Vnn<:*G$yGӾî?Yaߑ9 ~3}o-<ݩŧδ' \zѬgIΧ#WGT_W_&EHpSzLZc}uphG\x0<|x'9 z[Z[I/Edof'566wtibs'|Yf͚k_DG?{_vYkmUX,v)v `=diGZ՛ c7 >yj{U7j,gvw֜9[ΦRPDT(QNDrZFP*Au55(ʑ׎mlI|C.Pr&r1@ GbRЩ{ۺJoԘ>=U_jGeجi4)q\*CT0Mޅd}͜ir8h8`lbsV֟Fhf*_?Һ9i Ml%i4F٭*oeK)XW3>Wtj|q`!2y1ypShU녿\*plOC@(rZ&MB3MW`#⨧B*=&bcW@izjWUeEek $MH==& .}Cu֡V.N⸨Ybc 0zW)D4! qPeܐ4) 3f9%ԙ֜uPSKfl5_[,Oi& 2APTvw[x%|#L-p4}ҤVw$1YV7ZynFG:,Gs"죙H$[k=nqe`:m~O\OUL'[x#$2)DŽfܻwO3=c] X>dj+kdTZ{\@dsqy- ^'':`ll,^ nPOeSPexS$Iu(#$es 6qdfaONN~Yeee u/ԵRU*nS%JR8yVP-s`>b=t6nOVw!u-3GR& MJQQ1,T#Md7O*aӬ 3=*忔>bU?:6q}N)BQq{+M`ߴXX [ۼmgja-###'l}U) JwwZ2COud7ZvwUNB֌_GIz]Mw"88tn,:t3IfsTpXX?ΤgΛ;jZsgw%0˩2HV-6o'3myܞ`8;5*C'7c/Ax73^=UTf||' 3~ g#N@NV0222v'\jzٝ1 6ߩ7%|IŒR瘖(s^s^YßuFbwT9t9 j-N04y;cno#X\zxyNͼ)N*ČRܜYș$H^(f_`X&on5ӳ0&pfKb8U T]EKp9ccصbmmD t*0 ϛjW0-IQVd5{wΘۻ{nIƌb4E'I?6>i(H@%Sݑ#PoZv>0UWOfw8s{JOeT^*EǤRKmiu'MWɅ?g+8ZvE:UUvmmB?S3:%307*=UTHThH*0 o{ \|"Cۣ65S Zv|s0:ЭNʴSYoÃW}xW&q>˛qt6ޢ4k4!uhz`˰@S4o8ؠp8l6kyfst85=wL-V~~@ԻauZI_IQs{|/ٗ&A׉ΎN߯9s!rdEV GE1<< ipuV`ll߶7u7մߑ_5;/{vN P_l6{]岒zLUM/7w춭ȟ#{$P.+;RMj-u'5G~GFɆ `ayzWBgB]ͿilxuB$53>ET>\7OscrrɫRb t)gd7}[%rB9Xzxy_2Ȳ,ث졾Е~;_-O2J1E;Pq5amR0;DaBGKa߳ɛ{F7#nL㽂,TaC=mH҄4RA$%7Wf~;KoV;SN@L3!>ZO**[ {6ƗY4twu[yᦀiW*fkTL2 *+*?wϱHcg*;w>~F?[o0APoZ[pszM~Y1S1.&ۼǯg m0JSŹܓd)M7nh8ܐ[`yAnVO*Lm4+K B !d8B !d8B !d8B !d8B'_l,uQrੂai-К2i&S-‚S^S-cB&``B&``B&``B&``B&``B&``B&``Bbřfm0EHڢ֎zW b,)%E>4i?nwT;QeG!Y䥜 :ASc GTG1Oh{lML<}Fl|S]oKBEDBM::Xߩkľutin 𹰺ȗ#`f:I/EdofaLm%/ FG@!&ºZ꽇*EƗfl8=(}˰K /7XFGGO:RTt8 g3uFG@bcSD/FѿEW7 _y.B+1=̻4EQJ<$Ao4]F;~=j )<Ǥ;'Lija%Lb#??|q8z1-C" 򬋮*9%tMιbllpVh4FE &^hG:nwwBXz)U*ߴJ) IzW5hk;}ypV;xC]DqU3}LKVB&KT.$A|bu Axip>ԗ &OZgDl[mF]Uo"ZEQXWR !N:wQXW[]``B&``B΂co!¾@,{zzJcܠ  ZdO~,"J`ݺu *ݿ[ZBkֽ{ ,(Z0e!45*'~Z}ν],k8@˻pq'%!)iE F|Կ 4+xjjT?Ů]GZ_z8o׾֭\tp֭[b|eu_g* CZ8:WY'-;"ٸqc3jV[/eYn|w:D.F{7k8à ekprHJ`?xbdB+RdwOcc^eW۳ Ir&;s8>qыQaEM1!Tli[5ǫK jfpw,l9 d{w4 ٶۿjHuXO(w.;R˽MRZ?IŶu+a(U{Lx'9*)hTy޾nf8sJZ0xcBȌtG~>_pA{;|$p,O%I=*b__ǽ2?uW~.NK񗍒$$J_\B+Ru٫~{9hy<<vn|/8P*]zk@/sIνNmWk#Pǻ9ZQ. K_\~G(mo{zzM{ySI)-o׽*E=!7sc ׾B*ź380@BhuX0*!zwOfƮ]?=A&``B&S[@ZE?PeSs *|#}z֭H{ޥijg,ľ6$I{=;l*:q *5M,ge񀺸tGj8@?H4\ITy3%jR= R_.D.L|~e19mOwR`ǯ+iBhCd(V'QFhN4Ls X|u0JZ!LD뭄ʞg=-n=khj}6>95ǺDA^ꊚEݜV7ԋ8zkT1K(QF7 Q[n%92%Ve8[^|!NNg#IRE.F_@_o0_mݺuϛij6Vjݒ.PigO;,BhYU=&J*0!V L!2 L!2 L!Y 5j>jվ2[>\c#k]<|W*+_]-VrZʨw`cC(nݺqGhu['N2hx,.>,g]ni~pLo73SEUisS)V|ծޓ Se9{l6su-m"< {L$IF>(6h >~-Yzgk?BkĪJx; No!ZZwŸ}}K!TZ*gF!jUB&``B&``B&``B2_Gy-˭7ml$xZ\=4[ݬ|sgӀoyWdH/˲ZW-i}Ԫ=*w$I/dYx{0zԃЪ X&{{'ʘ zV PvA.vfrR%RL}(#ӑKWKTƗ4D(i0 ^n:N&^Ҭ`/kkjL /7^DR S^[؎qy 464xXb}7qj֧+_]ae:J$pOg }^E.F_c7bdV\}_ +V :';ة~3vr=χpUUWoz=Ug:~8;UVeSSτ#Z>\}^u 6^ voW [L߅\Pn@TjrL֨eǔB&.M}k~Z\}ߢ q>tGr=~[v:Kd^j>η;ܶ;wt֋ѿEm۲JvK-P@ɛ iZMDQj"]ms*VԺ}o?"*7wv-9WMfUslkRߦBт W+ݑjkjNѲj%jHRѮZ212Bg!dюZi*SR`*''IxŠ&SLuIԮeDj2"j()jj9Z#;w:f&9LޕlMu{w||H5h%̹4 :N=HjC:~8J>K S1tps:5@כ]~ϰL'@4t=hP(jw^mwqjy l9ofn~C̹`5s E!7drVmʛ6q5lٲE߬pu?vSCZZb_Ĵ.LޒD\͇ @o0†CO%I\Q]ٷ R2&X=H,p&}1,}+5\\zgWˇomm-m-pUVVrpyժYzgANܡ?emx!ԗ@^wew B/k[[EEQKZIAֽƌ|yS'0 ҷZki]#S}uڅ wHЪugfUAx(g >̹=v*.r| ǃ䫝K?@N?̔ʜKYp{NDUoFF3 QP7nܸqLPm|`A%Yal?M$H$RrcW?C7˲l|`c#}DҺJn ;'#Ժ;vP`jrwZU4QBhy,*VU`¨}p޽K[nqXU !tH^䯑E׏ !`3sZDŽZ)}p_z1!DJBh{L7n{ܺuk/C)Yj_I|u>eIm||D#{,Kn 챯cUykIls22x$IrwGxi&7(Oh<74Kk &>o>߼֟%JVTcB-C`ESĵ>W~~?Qrs5V?w}6˲sj8p-=IE<>z5]A{#F仲Yo߲mZ]S[u8}ړ++nݺuօ/L7@Go^\x~حߺ[ |uz__ws敷~Օ۷n[ rW>@RLRORvh5k}UM'n#'`*%$Z݁w}myj'n$jbWc~lYtef$EL߅5nv5/I07+ot8 :himHx~-.ɾPn.Ųfcjz _dGKF~:Ow!M]TYV>lFЪ( h@l͞E]#PJU͢;wnԺҒ$yo_6f]W?oKZ;(Bc8b?r><̭A:^h} #V=|*ˤ ٟd=It!rfM2V5K$2FT*rƅxnnu? &SU&f[ޖ dJZg)$ߑwdwwOwbBBr.sG)x2H4}˭P_(,r`*mnٹ3} KSuA8H sΟ:Xά_Wz:EQZau>zVǯn߾]5::JD޺uKmϽ{n[ݻwlmեjqw߯SG;fˡÇ^oݻwJ \L7ᄈl0f?1!֜UcB'K00!iLK !`scZ(DŽZ9ጒ(!feeJ !-+ӭ_eLyN@6^u7Xn]<_}͇O2kߞ.|GlEd5_-˲y3jYnY ЗTgΝ7j8ԐeXe/|,MWs->TP^[5kҸEY !>I}e-GZ|rZxHJtI dʞg=-n=khj}6z+_]aY}{_jLѿep3 jZq\|lc Ǩ 4n'qg^b<{=j[n%홒yZO9zѿ]>%etf|Ls=~]I+PJѮbLP!2&-[>0x\OyM_o0\<;ݭVX.8pv`A5_m:-_J{/ $(~}`dR:f<{=9tb:i}gǯg55R$Eb#H⧛@Ԋ ~+| tGr=~j@FܔEQHT3|=&߲U3imIݞՄVF֭־3}j^5طg -;ӗ[RM5.VѿE qKQήN5yQgmf:]/YQ;r&}6 f둞wz?ws\mMm:(lmD|/pA͇y_\&C-hmA j{(MJ@eVЌV7cMdfYnsKs彶گo @_6:8 tTZB<)_ֶTOZn]WJ{QGԎB) ~!TT LGs?Z"|!d8B !d8B !d8B !d8B !d8l6 +hQǣPx0n`2͟?-u+V\3 BVQ(jȸIzU&g xi=lJ#/CG䯑S < yģpۼ+#0;9*#X#G/B2zL8f!Q0qVH`Bx{Y^15TaF nJ9碎~76iQbӊ8x ѿE7R(3J+e S~saӵ6n.+|.qFuKXX1ayƍͮ]ھEQҊy{dͼu˧͹u˧_/ ~w]ouO?o?2~ᅩ 4@bWc/5;Upkroc[]]'~KSG Q.&,7nuva)4!u8|(#2mG;ƅںn~3_&HbRzH >{@ jЙ {|Sh3k~l~=s=V~:*'7n,ulegsǡ_)Gk[Аs&^nWWJxwK##[-):^U-}llM4=~&v5m<5f˥%qQI+ҤL3mmoo㕻ʲoBI(ibW7nxnçu6W&*i3WNX~'D`YLW1H=^05r>,ucWT*,}^eY VCjzQp'5<^ bR&1)[ƪ-i8|/X{>"ReYUF8.M3}\%'OU ;݌qHMqݓf. QCjl5*B}TUU& >`]UA>s_Ԟ>y$LlZ>j(t&ٟpSh=z)r`_F<4[%ꛇ0&p"Sʱ%ok1}r%}qee&9}NPDM]oueI'? whz(#2-In[w%Yޣ@Su/ӣ({-g qxx`)AaRQF[aZNQTmͶ0Lov*R)%݄y"Iӌ7Q5eVQl5z#懟Q|][G[ߩ=fl߱{.EQAJc"5/q?؎jkj_F+m9g=O'o =٫?ٽӾ3^@ $OʻƓH$J2G J9s{׵ia.D.+{۽ǝ;؛ǎyL~ZymNp:kqa{f_٦n}TNGg+*G ߽`xx)juԮJ2zL+c(i%} " Svw)uBsc5&ڊM/!0Z O-LK|VUGҠ~BӜ'nBeoG[ (: LڃhnE~BVQ(jȸ < F֎cB&``B&``B&``B&``BNki|eaO,\[2Q֥xQOVuso^:Aˍ2 &WB@ *O3]n^)1!|BXjc@RoBh͙ʫ|?@S_X1!z HוzBkNV LXN IENDB`engauge-digitizer-5.2/usermanual/dlggriddisplay.html000066400000000000000000000024771222557406400230500ustar00rootroot00000000000000 Engauge Digitizer - Grid Display Dialog

    Engauge Digitizer - Grid Display Dialog


    The Grid Display dialog lets you control the placement of grid lines that will be superimposed on the original image.

    Hint: Grid lines are often useful for visually checking that the axes points are correctly placed and set.

    The Count, Start, Step and Stop values determine where the horizontal and vertical grid lines appear. Only three of the four values can be changed at a time, and the fourth value is updated correspondingly using the relationship START + COUNT * STEP = STOP. The dropdown comboboxes determine which one of the values is not available for manual editing.

    The grid display settings for the pointplot.bmp example are shown below:

            

    engauge-digitizer-5.2/usermanual/dlggriddisplay1.png000066400000000000000000000443131222557406400227440ustar00rootroot00000000000000PNG  IHDR2D pHYsHHFk>H}IDATxl87_ݣ M#_>Y=Z73Iu 6T}D :Q;$E5 $hmRGc1FqL+uh\EFwq8NHÝKϟo~xý{ 6B!#1 0e/oۏBdO  >ѽ sI}_t& $B͙s5ޫ wB=*L|2LWF&3%%Unouo\DHS?8:9$ BN7㓊H([Kv[Y̽VLc ޑeR:夫WkL;2+9p\/Nڧdj M90-V˘i>+[Cc rx8qvT|m`"ZkwIQM.|!(z!go$b;O8{I37bQ3֕g&A}I~jRll_q0 1gSg%3\_,|;TW)?#@NYi>?J3V3c(v)jym&Qs:9x.Nu9?eݮHY3T^?XD<("f_曌k#@ggۏG|`OqizHGk<<gSQEUQ/%ױ)lBc`ә<8zRf: !=;YEʎ`>H$P#vX&3ZܰPJݵ׻3d & L<AK:^HP A֧OBΞHm+c@;iD15bSdcikCX&?Q~?2LP|;[=e*Z.=u$HTf§.fV.SXgfRbL4Qee(2,ǜ܏ӴYk{7D=JV.Ekw; K <^g-U5Å{F@fgkfO6ru_SuQU pa:FL7D4Nv(OB x<0O\|6Q8ry[ϞMj?>)Lm04`DDž<>R°,B$~Z8~ǿgXKV!WFjZh<`4E)3 Kgӳx^'eq]W5"@N{WY(3 8 FR n\Af"IdPks;[umgH)0`b*~!!I;?zEk)A`P$E}D(hK3©V"f tU~]u>>3g?"<]8K.̓jw~\\-%M49}Xv@CQW.T0<\~0hΐ?f pIԚ/}@|±ݯEN ]EzNy^펞K,Nq|\(G6Wi$hN4M]`(9e/~'ӏ/MfV`vDu_{#Kw7EZdZIs6An"R(Yp6*.N˓Z\\j)3=J^?~=-&V~R vYvo2 #gifkdbEN'*iR$f+~,m'IR2#5,eH}|-)V.$?gd) ]H"D]Xt2p:K!=uz>#LDONnl }ygQ{;'~'GGg.NGύwcђo2}%ή5Cli^yRUb`U0Z=m?i)8o$](q ]8$Z㔜"1& hf@R0ZS@S(4ߓYE!$JfWm"*He9$i0KpuԭȪp_x'~un~ႊ,ʌ@T14Ͷu15]m%H&6<`D ]#(3BU B,4opNHQ 8u"(J~]a?v>qBm![ep ;H]A U}`q ab Xt$}78[tZfl<4MڠԗzI.?$u[J.UԪߊEׯ~/ I"i[sLw Ldq4p} .vr#Mn3h3s3so2SL),c>5tYؒ9ep < '5+_|'}达 iXn!22OU̲mxOR&bk_s ~2_meM!3$@T1փ8U+˓Z0-'5,KD2,K`IXA},ONg֚aYBms&׃8y`yRYA@!d<=?(oy8лa!N}}[=]==!*4Bi! 4Bi24L!dhB0M#aF!C4Bi! 4BZeiŒһ-)Xl,+ mNr,$|M>n+gXl6yG_oL,Ku)wb/ $ǒ -DFmOҷfX[ɱ‰+ ~GyM^[ rhV%M;_t6oj"Y! ut5lQȩHcdxdWW{OZcΔ\%~W{k|33ҋ#}>kr.9tvjroG&&&&vMϣ^c@j z[t5z3$[|}΢2~/<  05 hn 8錞r9i|Ql\3W53FhW*u=qlu8عZna{q\lT=Bݿ\ XF:ZsmXQgj=}pcJF)[a60b WQI6jسklPb,9pv/TdtЙ߳Y_mvu @~`Aty=|#ǽ'u#ֲM;{v{7/z{˿nbY-gdQ%bk`k0>c  I(qJr޹X*Xo{;:AS?(ٛ.W;ÝTuDl2[ʊ(kDzt-%~[4z{?l{"ҴL5BGCm+Ҵ?'Md_7_Kh@+3R@1WW]`٨{{~@+<m_DA8(ج  R[&x4X"bfsJnfXX7;B?]e8n(>kc֎I211QXF”@TtU c6$ N @Z묬e̙ș}{v1טp Hc#4MZtd=A#Ʀ0bPI!uW1f13gLɾ=kݿĈ5Flz(Z Es2i"EIM_ '&` ?8;$t4nNyyTh5޲KyGDRƦ0k@f#B-=b !7[9<=t};Eb1 9|p:[<@VdYw ֱݡ(QqFxM+Orze6w0-S?ŧLS4SèЎ9UcUXv(f#v)cEQ]Pv2SXFڳ*#"$g:.vsԡaiF"l6Zpfnoa{"閟A D<=7 &EѾmV5wa{MZEi9>:(5bK[| UoDlQo4XaĆ ղ&5fܻwOq  ,i/P8}uVsrOWO=}8ByB0M#aF!C4Bi! mn)uHwKQ4r=[Q6l؀0biZg+YL<|%0biZgJNI M955@{CF14XzkZ>LSٚN6A@л[zT X7f"TvNmf"Tvskk:f,am+z>6m{6_wxz5sSشs݊U"V&;O处)ǏvK6JNY ׄ]XϘIx 仐͊ы7xofIA7ДØE#pmm[k.b />(BUQ&6tp@b4a}T3nU=~511q5u 7i333+n_A[ 592cіKL&'knl6Ӏ #V0[k.b5$Z{;&.ES곍FYJ&3g(gF_Zna{qSQNYعV0%4l6[v9Y;u=q{yG\t3lohgIRƾ3SY> N֚τ^gU];%ٻߛsjB?nffy۽n ˄N@'#}Dv!~% J:^=?"ՌGT/ءh/ɫkd8X*b;tv(~1 #7NJoo9'bC18ΎNQT*E+I_}ގQ Z޴bEѾ  &o*aFۏ;;;Z=ccʌ>ɦE1W_7,BM+9bܱ{׽N>P4C@D&3ale3+kLpa=Xə8bKEh4I457bs<tlw8;?$ؕ1EXrol,8_|d>Ur1DE4WW'jom(FzE쪜Q7Afo˜33='{w vm z6:|ne9SEQG0A`8SAAb,awڭ'qIu˙<6@'%r I:΢0D.kkk97bkhh(hi!+r#hgdz#ΈD{=/#Sy^M$ &"/]/ 8;$t4nN9h븜ֲɱiEժְJN}"(*y6(c2c/7;$9mQ U 놓CS|-udjA]ߪg2˰zoĒ<]űiYSSMkOk)9'0ER@DaZOęUwҷߌv>NښwZ!-qZ*{lZkvdgkjG:&(ʁg6a@VV-+MLL{Zqq8"tG,\,.-fG&9/u=%rNBb~K,A$;(3N~Y ”r3טu;GқnYkZ A)׋oޏH:~!L (M{ZguԽ=5PI>rp<|%v #Fz~ѳͱ0Ew5S"qo?tD:|22#GΏe%hO'>+v|[a{VД3xs"%W?@Stf&"ᕆ9qnNF?6(JX 83ts(v!*BQEWhP-8C /(9l6ZCP4a}: $^Yw ?zzG,zȅDYIi%WB"&Yc'#FDk5IngrJJzyRG,4a -bVS3u5#jN Jq@ѫDAB3z^uBqP zoͪo&Z3zXZfQCSkX'" µ {['uiAuiJwFo5L=)ue|gS|ea.GF.#VuSt5T#v UX]!D24L!dhB0M#aF!C4Bi! 4Bi24 Q7x =mӻ #v߯w*80biZg#c/0 FV#bql! 4Bi24L!dhB0M#aF!C4BV4MX,䕤6'u-m儬0pBf,6Y$ǒXmUohٞ׌mJl>eq6+Q(svp6hj a'L ͇{˘t!Nj{~5$mh77+ 6;'<:{荐6'fȽwT#^*^/[f&3ze9p8@4MӁz7g+G5Ș7Z -[#^ 'G&M$Sxvz:Iͱ^',sѦNgb4{g{oFc{zI&?&2Ѳt3s#=?[Ee/ܳ܊#ͯ5O}n0MӃ$Ȯ]{vi`1{zWr{{SrN70->DZC@l S'''ۏw;7==Pb92oFƷGITzfrr2p$&`̌g'~!>ӦGNS'ߑv5~k{]m6zxX*X0l1-&G䟒`˲tt(wָUI[xۏRc#jKYiSC\mT`Ψw4==Mv6ݐuM:*|>bO͏T6ܼ4 $AJwM_㿋uÆ 6l$DZw_t;_Q#V$av:[[S.05'b s XP4l^(vylZ잽}r\ԷWX13?ٯ^UMI`k=t)dع{|6R_ ; !B{O{//_6W0:Ao'JNQՔ4='b>٘k *"M; FBLeE,XVPf$BTUҷSd6m0 Pkk] ?~y3>6n~L&o{q  z卖AX7NBP|L}Td LĜz$dxp >C3>6>ɒ&22y͍CpWpK @AvכO[ۏ١Z<ܛ8% {v{<=糛%y?EӁ#O`Q>C\/Ds"嵖{6Ο8##Z6+=b -%z˷o߾}_ֻi$Ȯ]v5P=_^g=nOTD34 hhg_Ҿz2[CߦOj{O8tvv$mؚ7}اw  ©kp$Aq9uv9ՈMb鿤}}=]59|vx`p@33t50 0M8uzdl m}b&}'.%^p\鈥iqFdk#ֶ٦F[\6KP0Nʬҷ ׷kTO||I"GϼMVQsLg<Mܘ>j_0bSc/JGlB?@nEs^j LUA9'۟{z*7E\;I]K}ԗV?)!q1aUDV dqZ_֧#ATz^gkcs=AơFlꛔKq-b*J$վ󭁈 wdXV5l6ջizpf2nжV[X5gLh[lٶub=4CBP\Qpmlp78~Yj?8C}jM_tʲN^ݨuGNPCZ2 E79g##}]X;B Eop v.,߉ ];~٭w+w O Y,Gނ?zT~0;rk**,2r#>|==z%޽{˲W]>Bi24L!dhB0M#aF!Ct&ߑGӴ_)aӴnlO8TA0bc!dhB0M#aF!C4Bi! 4Bi24L!dhxn7z7b؞ XLz׻ p80biZgC3Wn#vq86Bi! 4Bi24L!dhB0M#aF!C+sN&,KJRrBV(.y)q{l6b8γˣ-E Zbbl5c$r[XdR³ٸ;VQBtp6hj \_iaZh>^ך{ܵEWBVd2FB}33j;ёgdiFRl692UMw3 ^pLz3v ?aJh4(د "ֿ"ڳ@kfLSxW ZV 3F pK@(颫h`̌s_k< )m;%z:t:g BUQ"IJ4-3JGegF&z: 1~Yrz b_-̏ع|pjk{ֶ6"IUQ&&nbmlM6KW4Md׉k (/c'r*"L~ wM9n o?#"'mT7i&Ȣ$R $IfMl-8wSR Шu{DNE ܏ElwwG[ǜ}iSB>08x& $fB˳*ml}̍o4 &2YПMlsnswoN_1+cOk)EQjjqW@qwc{CPEFYm6zx>r1>/8_GlnM^KE3t4m||]Vp*3D%L $BNm(򡖾_X} ||}>yF_tS#g_y\UVy֘qL9I 6[CBG"/{zR_" F 28D.98YQ (Ofy7HTRӴ8#n ]/\ ow~ػz*ҳۣ(JXXIl-䔮]*wPzU0w)9T.ݻ7IeF X7^gDiZbkY[윝βU8<$esr9g"{{_ĵCԵTG}iqFaJH\LXDPX8- @QsQIفw/5bSߤ_kKUQ E#v)9?GA{,]d6m0kQyoyem =?>8Cs1 FAmo=kkp774G6nؕ%HDQ-ZdXlLCeFXAo-;# 2:XYy;"dp BHY(ȕJ9% KUx EMl*  iįE|`'y5SYPL!+pT5yʳYY&": j/g>;RٝB%S*RVd9'YYHnb!eDDQt-ZD~#}kBb(wn@NwZ*o݄+Q~ߪw+Z*X0*7yJzd0bè4BB0M#aF!CCkz*F죇iZO#FnBˀ LӺ=myA M#aF!C4Bi! 4Bi24L!dhB0M#UIH݄Q#tXLz׻ `^lKQ43;M@s`.n5"ǦB0M#aF!C4Bi! 4Bi24L!dheNӉфbI^IjsRRVN %/%mmkw$ ;qP;$Iڞ5oOfMl-8wSRI,*s'r*O͹-T*؏ "M?}pp>gl꟒Sc޾^faqZrѶH9i"c66O}'d%dg&''G`xzz2o=g>=~K,Wǩsj 5l{ YxB>bsKs  q[8*>bw^'P0NᲬJNJ/\~} ||Oߦ  DOG[^o}./@Q:\mTj!oeF{7>,~ ll Έ@nQ4%I\LtI)CECor?bAk6ONO槫Pk!b]/'.{{%Ilska(Lpk5zjxECVEQL`$I"INg5f 'P n|XF2:߫wC4M ߑ7tGh5- AgGQg#VMGTVΠEZ%'JP7@D-727-asv^YEƿGE>K_O”Yg*"+eZgr d٘{;_E=5טu\ו{Ʈ:B7)-bZRU$H0?bܻE#vzkf-;&l fގQdՇͶŽ&V+FS4 TVQsٱݚ?8C|iEQ 'mFbkفo$$?rȊ~_]D@H@+I/ys~w|Ycgl(?f77Z{TѦ \p6БPH>#gg[*]dp5M/ĉ*B;,qJN(NWRԏuuoH]@kջeU28ݻMN{,ˊbeGWOV[RaĢQi* F,zٛF4Bi24L!dhyq-_ B F죇iZO#FnBˀ LӺ=m9 F!C4Bi! 4Bi24L!dhBVx_G0bQZaƋPeEki^ UXTpl! 4Bi24L!dhB0M#aF!C4Bi!  QOE&TU_XWV#6V'1Mb.;[Q,|hU_cZX4n\|LWaqU0$M#Z8U(IM|Gֻ F3#[ %=W+ޓ A)z7ᫀolB!wીkl`Fe޿~O>?eY#iCQQ#W!oբDhKfj-Gu{ڧeꇉ.Fh-H)Ŀ=w+֑>PЏ._ u*~!p8p/է9?% q)ayb{O⯾DBX<, *S?m{E3oksn.0HhP w x$X⃟ 6  e<4SQ@YRW烞zu|h!+&bU^ܪl[`@'}RkX)M; C<>c ל665@[kjek5M =jL0nȩyfq٨yGRtdX==)vzWWi%3o_v9RM@%@,OKizuHU:T3(4#QUTz5#I0f䳎zȊ08x4pGfb4ES@RBQI6u-f9y%nbu{nߟ.i"C$Jڪl>wk\cRg#eijIUQ L %3u\t[3r33ی\u3@1jlL`~S__&$Pt:L`sSTvϫ{>$C<꾍omWW&er U~'yvְJN:U$HVB7.,S(Lӆ ݽ t dKx04hbw F<^OV5,}j`S~EQ{L5#L cccL CQ* 7 %f_vR:cnn7ͭoFUQҴ(i]s2iSPۥ6jXL@q=-^\cn{ͽMQVP ͇nu  /p/Oڟ^v5GGf)Ya"O^I:3iT_xr?x=LFm]_%qukv$IV$AREķofWɯSY%һƽ?/P'MЦZ̧g7ͽE3 Gwpy_',OPubӴ1q0jsɖ5lC\pZ[ƒ2W߂5z ih[J7mxUીdwxDCׅBkBjhuM7k99=iT%7%5|BrPxj]nziwB"BBU@ 2Bl`֍v)Z"W|r|bU_cZX4uZAbǦB0M#aF!C4Bi! 4Bi24L!dhBЊBk˻!dPf}St ۰aCc nnt:ߠ~@! /%!{/@NB77ڡv (ƪ!кvZݻꠇĆ @M˂c!M@[`69kS6Q!Ν!IENDB`engauge-digitizer-5.2/usermanual/dlggridremoval.html000066400000000000000000000037051222557406400230430ustar00rootroot00000000000000 Engauge Digitizer - Grid Removal Dialog

    Engauge Digitizer - Grid Removal Dialog


    The Grid Removal dialog lets you remove grid lines in the original image. The resulting processed image is used in Segment Fill and Point Match. To see the processed image, select the View/Processed Image menu option.

    There are three methods for removing grid lines:

    • Remove pixels of a particular color.
    • Remove pixels close to regularly spaced gridlines.
    • Remove thin lines parallel to the axes.

    When removing pixels of a particular color, you can click on a pixel in the Preview window to select that color.

    When removing pixels close to regularly spaced grid lines, you must specify those grid lines, and the margin around each line. This option is only available when the axes have been defined.

    When removing thin lines parallel to the axes, you specify the minimum thickness. If a line is so thin that it is thinner than this number of pixels, in either the horizontal or vertical directions, then that line is removed.

    Since removing grid lines usually leaves gaps, smaller gaps produced by grid removal will be removed. The maximum gap size is an option that applies if any grid removal options is chosen.

    The Grid Removal settings that successfully remove all grid lines in the gridlines_log.png example are shown below.

            

    engauge-digitizer-5.2/usermanual/dlggridremoval1.png000066400000000000000000000724521222557406400227510ustar00rootroot00000000000000PNG  IHDRə pHYsHHFk>tIDATxqlw?iU*USb+=_-Tjr*NDMM]mOqZ풤8SpJ=ũ^v{6"&:5ꌮ%;&! y>xy{gjFw}lr *y`aK >+},۟2ZB 6НlNҙ4NDd#"blN:cc(7k͕؀S+y&'bl  'I !.6l}rEȑfH =36QȦW`%𵔞2+<>N̫ ZqEV6۷әQ(_fܚΊZx@z_X\e,Wfٸײ"B^-8ݾ}{Æ |5SpnȖ=8\ODw'Jm uO.ŠkQ3nqDi"V:mwND}^uYs[x"J$ǙE2KW\Mi."57~ADFCsS>.͠xS{nxtIk=yjIR/rDKx3Uv"yh,^? ?ʲ8Ri92oاQeFXbG͘o{/xj5-GD4eԷ13i7uYUO뗳u:ɉbˆҁ!%yUlSwDeDÌ;MN;qYD|0${\ t#sq5ήz. uUH8dB:i-4sDW1AA٣(Gu98O"먜v2E>Dr:QaUrU-,\l\~.Vztwhe2\2{*wnmicII""[*blǧ|%YyН;9r:qNb=*vqSNwUf&񇌔'"-G(7>ÉOOmثݺ>.e_%9j?,:L𗃙2!]n64=D=ܸU'wrxF6PL>^fR""IU')?v?SDR :9̲8]QaU>TU(31ĎYFUUƟ|=x{p1uzl9WKețۇN9QQ踚Bk2\$E d gUxhYW͸dl و1>SD0-ɘw20q0MO7'foёWz;\D4<<~[iGDӽoF*)y24щ%U/4e)#aIR$"jS_ɚF%9eNXV&d\FC3g}Bx9<uܣ "cS kɊt:xm}}o|c=,NbWCڝ]{ЇƸ.&% ϪX^rI^Q줍t8s-N5Rѐ9Y[c\Y$"LXCAcQˑ2_tNDp?/ٵ1wY_lrtr?8 56p:L4U8d(GNdYf(n\Q$M^;mXJ"}-y2=UvucP/ا؅JzovZؘ\NTEa%qO5w|=n 9$%|nBKB*߇N13C{IѱS71 N^6nܰ2\ s}F-n~uUz=ce_C/-e-5386r7Gxx,r.0;y"Ve>PU:^s?=Du]/=#UߋkwsqEU;n[<_q5Bo4M})uuo5e&nw|Uԇ> G8|?:Ux;U'咼*.2s|ʼn(aeog; s$X՘5Eͩ=0N#"YN,?9]6MDNRf⺦(1,+کqVq[V(T·Ysw"328?wJD:ðDLtr%ZXt$0ibL%"{Y*{BH;ĥu-gn)f5X)XzVSD:ˊF.zSb]KT1!{qYXƲx"ed y!e=Ƌq N&RdŸ.%A+OmɸgkyAL~)i9qOǜ,_6"f=황*Ylt흣|?;񊗈;ٹee+׉%Uǯ:2YFK(NQo˾~|e>hm5=?x,CەoLz2G;#|-?*,OMoEF2U癉?&$I""uݥ,cyebW%7sTNCD:QQe&K9rd\vڞ,dv]K2FԺhrJ^'\lXZ^պ4m N[=rτO_ Va6xr0v_\'q ` %%KK .,A\Xq ` %%KK .,A\Xb[lM ٢㒈m|v n߾m|:4;ٗԯk+r5X?uK=_+}P4qm^j[M>K$?zGk~EYKwqioSjҝ0T2v/2nNt|G+s<-Q"X,Jn f͛7o޼r:^t'̋pg?<2-nTUuvf@m2y,`ukwRH3ֻ۫ΨƏkf_]wQcioB<9_ |b@^.rxo~_9M%زs3aoGHHϷQLD9+QXMZN+_g2NHE~ /B\d [a:tё82`akRv,}> p5{7L5߰R`yfdxx9[8}^oLD.? lzjV\ܾZ~qi';QRR#GZ*mZ^lI}:5t[!ɑ# >4iqT:hb|o/v!fk q8_%"#B^HDMT2E/HͪD4<'O5*) NL:Ş<9~W+fH&KV7Q0Dѥf%Iyow7ZW'ݻk3/ 'O "[a2M &>Z^EUYhNoto[x跡ҝ(A8v4mj|1j| ~kmim5?=uֻ֖_lX`G{G㨹(G;v! ;wGNG:茶- uMy_ 0.W]J@DoߖPDXNz陻Z#HQ#A~n`퐑'_%_QhZ_Zo?jp+8CO[~ʭOαy_sat ` %%KK .,A\Xq ` %%KK .,A\X t`7K(t`=0/C\B%]t`}%%KK .,A\XdUǥ(WF*ˉkݕnQE2z!D2Q~[;wۏ 0Fͪ(C;Vtt)gw/Nְ5u<IR` ۅ㽔5&%AGO{çv!q9vܳė ʑoCZN  N~7 KQ "G9yS֊ƥ:ĵAb45Gƣ0j<|5oݻrV/qi%TY$u\94eLjWv*_vV`}ZѸ9uƏ٩e.GuU?:uSR'Ί%Wzý{*Ҥ9=u#9+GG}| 凓ƣ'󏞋O$ mfd~eю/'6m6?ߜ2zeaIxox9?ڼٻ|-h4崔6{م7}*-~/_4^Xްv,QÃjk&Mw/x"?A,Dzv*q>L$&?O"Vz]o۔t'+L-9}s?$~1L+e9tK/jD| 9!| 7א ͛7o޼y)~ruQN~xvqe=괸פEmЖ:s?j^cOGyf=OxF?yt<=E>%K4cajj5 q=5VzF/D^/3 /ƍ Iob^-{]1-[1>z>q|+EDA2>5=ݤu.CDQ DEQ!yy>p(@Yơ lzj6_kvAm]=]F~ 6l}>qfqX\sz>n;~9n^"0{2LKtػ+lA(\fS{{r{QnwL [wxrз35CMӑ[C/Ujt-t$]|I9u+Y]O?q}5v㺮sq ]cUF^7:Yu22Wd#6h=?UU(>z~@  zNON$_Bm:^l(9,QH|03pQL$U؍%l6~Y$"dDv*8쬋m~9r>t8Fs_N#u5Ψ.0j6zB]-B" XڕH&l -ƖzN/ xukV;Eé45'7*cÞ=Ǔq"9?_Ұ^vWe "Dé(\ ji}WgT16q5A:ύ<$;͙1H^Nf~16=~30LWDG%W^dqی9l>N_OCl5#,=e~3\#5RLd#5𰱍M4_ lID1S$Y""֑\tY$y,EW͙3'"Vc'YifbFfz3d7 ƽ4_JTx%]ʺس᳃ΪSWu"93f'P'Y\cfv]٩܍?p1f͞:br/{\;,79=?ְ%X:K@;"l(3}fUƄvk yJf0iRFz..x{iRrUotYh-_m3c36>yIҜxk੽Oτ/ZN'>Q3O592ޣDz,ɪlJv*vo~s=j8"Z"V:_Z_W?ۡ"jYߑSzI7_wJ?ύ[ynԸ/]:(*pJ9"ifow嬽ϱ? DbARK"n#sx_zagCY'eZɿʾF貾v HQ>5l }Ĩfg(r&r:ͯZWOW==o?>WgaL1%t8)wx.X<%k3E|R 6-r.;+[gFwhʑΚ=?c碾|s8ݻw;\l`dt]:#1FU dʤJwè<cdeZk(4'Y^eD+qW)Gezu͝()RgGNƵsF? 4^;@xR 腨6x ]\)9q5A9rV9==Fp?-1.ݽ,kpG(<u}Ǯde+]mpX$^6{xgxuҽ{F ;cb*xr)~;(nm}WQuکS[>~1mtg EF"jN}[6 d2 4mj|1j| EF"ʌc-DɮZ^n~-M=ގʼ8 ;cD]O5;=97k Igf(jDߑ_ie;Wo盅 uM7{f5fo|Q0~>ytnAjɹƟ66:OkKk>/{㩧n*7,s\-ӷûy_q]ꤗm2 ]0j\ @DoߖxD1'=t3Mww-(Ѐi rDDlݾRR  xiJb>^,h0nYNUվ7Iasxy`B\`Ab8y~?oϝM}X .,A\Xq ` %%KK .,A\Xq ` %%KKKv+X7o.`n'O* X"۽D\+_ اK]$.V&U!Ke >\X%rUpat `ɺ]j9NQ'~\rڄe q>L,oUL櫌2RRnjң?cl <)n+sR(L[=b[QF*߿?X}FZ.f&T1\-WMF:QaUQe$l \4fF"7:^H|?B'ny^-mգJv*o]5.NHQTUu8jl0I`K[Cf\.5dkXn:?}vA%FGާ Q|L$~9./wJ‹ZN+OzB\hez>n;~9n$|:,l[[[xAxݩSHϷG  w~0~=^- Ea lvC(M~ԵCm}-N[ZPWwW/ڟ=+]vj r3?S`]Enh31p\z5w65"rV9OZW#~-_:42UgrldgSaYVSդᔳ2yDdoWC .~ܽ߷q_cׯ(~9:uq0d~<87uwɺXfD $.@QFzYTf˟rd2ζbtwJՠY`| &/'٬w;c'"zfnzw{elu2NƄOvY̷|t8WL*gfn7m̍LCN^)%eXyZ&"S0$%%&%IieƬil5)zFjV%acqh0[rccYIuƖ.+;uV9?>y?GcKaFObRʎ*G>cNK9~(.%MIGaK"[TvtID,f'"ְg>[[[fonbUmꚦ9r$MJ ~#o,0 #geeFDdl.a[%wH>36HYIѳSY5E@\so ?w06|ۛ'E=? ZhtY/s$։dSb&&(GL0e+cwƉa[Ñ!HXv[&_ST;nÒ$߼ٻ|-HDv}ƫ5J 茶֖&_cSimi-I4랑s#MtalKZowGfYs%WI3ǫ(}o/lF/ /L<an#zNfҤ$Ovݸ*Q 23ncYW˸?.MJlNv]i5;ez"RTEQt8[t-"},tV*[o5nUWA_>a|z:ploh{MxODƛ(XNӘ2)*8-̲ʌb.9sqd-RTp~R(rVoR=&MJ6>_  2D;RiUUMJQe)yfx|#=_v=ڂ,~IS0u"n Rb8[WyO$Z'X%r]X<]XKtoe tX:|ȺKK .,A\Xq ` %%KKW=KVD &~Q#.nhhM%0&IҢ .o*X4Wk 0w ` %%KK .,YEqJ7ah>D܋dGO$>R]2_5|rXV*}kU2z!D2A9!&L,}<-LWh9P[Ʋ~ѠN6nhYc +wB=+~wAVb:'8trRWi3DZ_w6kN_O?YI*5]k;|rڏ餛tN=_gd$vφ q*gtxwf"z}SRM_,\)MIDJۡ}ͩRV^6'O˓'d9f\ 'MEUON1FUU{}Q{[ѥ:(؝edpn;N"g"i{Y$xLcljJQ]ծYcd6 $3 u~3vGSt:ZNckX]- _kѺ'l6~Y$x\ѹǸp8JrF2UkANu=9,!vqg"؝3DDޝ^!MIj| )$$bl֖]ANvלWѥv*bFܿwz+$lTU%Lc2HS0^ *yfz3$l!DEFϏr5Ϛl9WdA;5҄m& cY֬\uj?&?}@.|vY=Fw{,<%;Fg37uE+“cc"g"G;J3tT;HFjdADEUOҖ"ְzUβcuF5؋~As4ctwg_jD21x;*62rPNo *bkX"B"؉:[Z_W?ۡ/;Eqg<#eF#4bWJ^gzNoVjC/~wxqP"g"9kkj)GrV))u54ְƸqg;gg<5뎶8h? 5,['1 c[o%r_D䨡r땧dmF32agC?5J)ӊqmbY&O/⪌?.KͽhFOϛ=Oc_rt˄gD2F&GD\-7++n•#a'~#Qю/'6m6?ߜ2zU3nL&#BަgI7 [-|b<C2صy"3Q/Ѽhe:я:茶- uM7KFv9)S[o &";c5]ۺk+o5I_8c߷??5|l ;(nmzKQ'l݂ ]|KNe`#GyZ6!1U1Z~V DtmYΏO_ VUF? 4hn|vȸ#/#"p*447j'[l>Q2v/'Col?N?|l404`o|ɹwҔd{SmY%ߜUr+e{?cqZgW`Z-H!.,A\XzU& A\,؅J7V`M]Xq ` %%KK .,A\Xq ` %%KK .,A\XOSO_O[ٌWR|gCf+݊iFoK=_+}PvV6LUT2vl.-@-}rÆ 6lM{Wx\[z gJ1c!L,o,/: mwkWշҾXVV4𛁛7o޼yRxҝh.%=4QÝz<9T"vYCWC[}ڤɢ,XEo6̬4,L#X`kXn:?}vA%FGާ Q|L$~9./qciR[xq{Wi}4qh `o5jUe5p0v? h9MHϷ]܏-L_2;Ex~8(fa & oA@9z!qTt[xa91> ˉwרWe^*7Q[8 c{)Woے/63~ o Zާ~^Ueq>ZJ"7QZjHˁ"RTP[ˋ-/RNuwvK7$"19rzdཁ`DZXwHiCҩtwA>_Bė 16qM .cM蝐%G6.]3edx?1-ejrrK>hԵjmZ^jI}:5|hQiRJ_ODN_I\iXçáC-/twv+BDMh4t`~GEM9<>MFŽ404r#":>kcө㡓}=o?^+9;D4|~٥ZWOW!٫/{*).K.-:Gnq~}]"帮c\jBu$9uNz6{t]'̵d وuGϏzxUU5m>мpŊ31jл!"UQKX^n3GDY%;3_f_kwB@DczNgcSWSv%.''ED_Y,ۇׂBѯ TfUU(ͼ;Eéhl :]&/'U]ecWH$]G:qmbrrp=yoq}T3/Km޷zLl B@D^uz5~9^i{ռ P| n`ZcfF"j5)zFjV%acqh>NRgc\IDD5t\鬳7I'Y<-TL\gc+rhܟ/e-##FG:bY{6rv3]Л!a0,˚3:EGFΌx6zp sl-.c4I#M&8 3""ReH2}k^g#UUFÃƕX'涟Zγ3quXOTFΌy8Wս]5[{`aKKfbZa]5ާg\-o3sgOtX.SFjȪVDʺ]Dh\mHq&1y2qyFRFl K9y`DATTD+m/ʽ:R/W%&?/i[zRW%Ʃl/u*o ,,зz&G\ UNQbLuOghhh`h5Υ*VOܥK=FhOtΆZWm/3qʴ"OoRok#ctY_W_[[;xrr$gov6Q>cbX3_&a/cK[ŏ7\5lt\}&YY))u5E9r:l [E)G3%։2)YEVy[si*ӊ<-5ND]tG5U3;ƸS穭?_rm~<9z;ddcw=wow?ҭXw8}͕nz%%KK .,A\Xq ` %%KK .,A\Xq ` |<0+'&~Q#.nhhM%0دC\ܓ cn, s .,A\Xq ` 弴Rj)I+ӒUҟK,/L-{|"XTv=Ȭ|;Uz'L++qvnwkC%n"J%SBY ??LN9ݬz:+twhvgGe]J<Ѓ޶Qn`q*0dl#揉 5˜; rG+[{𜍜-u֬GBG}Q e~}rk:!>^\.[,vALg-o,z;T&RT .~;3gF΍4],e[eX`v~rF/D^/3x\a76pݩd\N\MX)Upg4KI^o|{3+ `T; ͑3a`ާfK6jɝrZ蝐wa=oY_\D#|9j|͛hclkKMMKv*q|!"eZ!7*Ꜽ1:hƥRɣ#G}bbc13w maoJ 7@inrrˁ|SY?T(oR͞R%ۗ"=6s:RgT~?Vo'$~1N:9s-I\N8NQ\$U؝';(|:3vgLD5t! OLLFo&l=* 6-q9fyfTػw4%S4?7dĵ "jؖ_/ X[*qgFا1eFh).c$Ew(겑q5g;4KuS\df]lqP'p.(nIq +/ge"rs6rj%e]L&߷7u5ED\ w*|JZzvMO7sQ;(}r͞J1ND#gF }r?9w6|ػkNv,򊞏.ƌKbʌBDt:kK%>-Gg|}# ۄ{kJޚUz-4+sW]1#JG9Z|3C [RzqV-4*;%;T- 㽃m|KĝSTTD+m/RD*wĬ6rDJaG *q,*IbLC "9%šl6x!m-KkVH;D}(_t{a*qg{o_F/t&׬mF*GLz5d64lt\}U!"9+SrIM*Gv:;fYˆښڮc]rVf4c$hp9\C &.'kݻ.GIK))u54ְyJN]MQUNFܱT?1QZs:Okkj=u|  'QSrjb3x6yjRɔQv |47+WƏk)c -Ku8iHůlYX.hҖ'^#l/yR.KƆPd$(;vyȔIQ:(G;v*n/>Rq|5xH~<;cD]OZS[>~1mn^QcH8w[O|91ހf7<  F.ZEUɝ*3J}s99!cyFޙd$Zv.˲m>냯78Ζ[z4MZ93yv n߾-a8@C>9+6o_Oc{顡 c73 imذï  mFUcbd/<9z;ddcwVЀMνbo߾=w}JHdfp{ xj rK c~D .,A\Xz=Tc@\,؅J7V`M]Xq ` %%KK .,A\Xq ` %%KK .,A\Xq ` `ӕn~K744T&][7!. ;w-Zڷc%%KK .,A\Xe q~)JDhjK$?zG=:RJ1=YJ\n]wn{Q$&[diҭԋ9崶ŲEr{%ccF>1_Yux6z>|TX@4?XS-uf3\-'n+'|ǛKJD3a`OާFRR{(`.z'$n-/cY_\(^|6 m6_7+Ȳw.u8@-1./372RDJqg'a4N_'FOױ.MBC#G}bbc13wmf_nJ 7@)6j-"06rENwۇ={zκD(GŕKKGKvZP?)F RWbcG&ɮ׻/>SS1/>dq麤Jۡ[R_;k~'sXE>ѩVYyrjpC|͞_vhulZKSçv&%HɡȇԟSJɻۛVx<$⽯u,x{"S97ʷȹc]v?.iWPIKKՏ!s#TYTfUUXVm:^lilWpyu}P\_\ʐL&l -s"wNSVW :^KA]'&&t-"ėɩfwV;GK;95{pmv-)VsZwWHW y"R5>gt1.q5A:9D2fڝNW[LDxom7{LlA xL#u5ΨjWr܋q26&|:&^CDg \soJ1A6~8 ĵ "jؖc -KD"zz{磽oDE {6ze\-װ!'O5%]*lQvPV(E6*.eagfNDsl-*v*3n>DDNDDpT;5%"QrRar.\*hpxNv4av]r2sN{r͞=|TF':u^v <~7g=7{mNDC ZoUʑK| tXC9={X7D2a<"ݐvK\ |XWU0Y\5V st>G rV;UUvyJulrdbBdU&"-wxNӲs鬱Ɣ_?--PO>Ij9=5`*f|bV)6މe1~0rnָ|%hly^MӤ3#el"},t@)uVVnlq?8{>EGO_O .}-54gg<=O mذï  mFU$cbd/<9z;ddcw'7̩:_v{jkЀކ8^9+ >;r㸶Cm-/H uI7$>_BrDD_N0ĈDt*eFi=x)"ujΣҤTdėD$%I"JH|{֘ y$>Kt:]ND#gF4dyXy“JSRc=я/ 7YKvkNo ثf.ofgahtt9)G=o8E\5av#t81Y|ĩS+Urr.cذ豣2HS޹1}|=.G߱>EUH)mș=D_ޑs#Mc)oZuwxmU"4d>IoODv=:Ufv=y&!z"2&+Ӱa۲,?t*l`퐑'AXq ` %%KK .,A\XoZϮ]O$Z=j˜$I+ |؅lÆ ۷+0O'+?]V .'7]Y[JOﵻnC"mC\¢!+sz0/Y F8+7G"t0Ee8$#+* K Y +|G?7|7mF` VRIV.r%!.aqnb| [.+*GD~be}Zz%,S6uX0CVŠY͟pV*!.UՕĕE7gMh戈zopn@) -B\,0%`\ %%@ %2`aK BVX7wKCK .Y 庆)Kf-q DZX\pXKKuSK\p`.KK=d% .\,rp{\/q.!. -o$z+K:Y p2XF`yVσqBV2`at>A\>P9Xv.+CKq~C\U;<+q#A\y X .Z嚄;+qah 2k`\ÃjMXrAVRE^˵ @Ҿ!WX_2U"mZ%@!.$ -Vr0w`h 6ӹɕjrm֏OxT,Ta5CKx?K%+e%%\ý \âa\ .`h Ǫ_X\0X &.V]vZºCMr5֧UG\jZºr%qCw?S+<]:,q`h jar¬%j*%j\0Xr`uB\ Z~CKU q ` p%&ma!t0 -LG y .+A 0vm*ˆWTі n JKXMf#}UYD]ZedeBeatYP9w裏oo*6.+ CKJr+ qYZE$GD~e%J` rJ`x:`aJ7a^KX-VxqY .`]B*X yD0 &.".W,9. q0>ಲ\ ZXeeg61w0'|Z,AI8V<+ q Ko˕+qŚs+q ަaty>.wʇU#8jyfp].S04eaÆ++nڳCq^kbeϷ=e d}oY 2(bt UV7|Sk =WZ*~>:w|C+c9^ϯ\kVT;h ܵbճ4ճ(Z$D]xo.a$I7e`UltO[͟~Wner>&>֐gt֤uʭ@\ZX˱ c>dXѸ7$Uw,A\Xq ` %%KK .,OunMX:pgw 'n'nvkgzk]Bo .A3Mnª6J| V,?{~kJ 8 Ŗ].{|K!bY(k,wɽ\6k $8 ʞ_\XY_3YxU".`Mzoql0kËr!zNglc4ˏ͠ %jcѿ}ҭXcGfXJ*W7q.ĚGGbbC>h c9~1oI|.Ě}ݏ>qw&oa9gyo)Y7s7 ˮ1_>+; =`;=>%h[s3iQRRGّ\ .n,1zN r:rVNN$s_:3w_2dţ>7Xa0\iD_N ~a ;ާ4%j6 n$gw;v^8d#=" D7>r.bwGݏ w?v?̯L]K5m^.DG*}kޣ>JDXh}xvYɛ )G;>o|f;~Z[\7@,[#_Qse6rѨ n>LDw}SRFٳs%qpSӕe_4kN_O?P/e?b{G??ѿg^q&2lJGYJ7v SUX[QA$"MV)_kk^M&l6ap[Qb\u1.u5ED.+q9m*}kޣ7͝墬\峂SN%"9+'b_ l胏UJJYֳr<%Mȹf].ЌܝRHV3ްYpV;!V[d}㳍|cѳ\Ɯ>~jcAce䃈6=멭L&Sc]{8t;b[ݭƃ{eu)~ҍ]||?։o0wm,rg?8[Rr ,.ݙ|7qܜo{\>_ plap1k94 F.^ plzN=^ߦeLifW;`^6}efc_ɈKgV7,̚8 fcOOhb\NWV5z~5Yx󋸼'`egzk]Bo .} >`plb%%KK .,A\Xq ` ҿq#Xgyl.d}wޝ撏jhXڻo?`~[0 5U㘴HTL_l={}J3,T>WGOs79XO`UG/ݾhÉIODFh. .`[%(軿ۯn__GZ|+n߼=-Je"IENDB`engauge-digitizer-5.2/usermanual/dlgmeasuregeometry.html000066400000000000000000000036631222557406400237500ustar00rootroot00000000000000 Engauge Digitizer - Measure Geometry Window

    Engauge Digitizer - Measure Geometry Window


    The measure geometry window shows angles, distances and areas for the currently active measure (which is displayed in the Digitize toolbar). Regions in the window may be selected and then exported to other applications by either copying or dragging. Control-C is used for copying.

    At each point, the angle is defined between the line from the previous point, and the line to the next point.

    At each point, the distance is defined as the length of the line to the next point.

    The functional area of the measure is the area calculated by integrating the area under the curve. The polygonal area of the measure is the area within the polygon through all of the points in the measure.

    Until the coordinates are defined by axes points or a scale bar, the measure geometry window will show information in the screen coordinates, which are in units of pixels. Afterwards, the geometry measurements are in the measure coordinates.

    An example of a measure geometry window is shown below. The FuncArea may be ignored since it is not useful for a measure. The PolyArea is the area inside the closed polygon. The distances along the measure, in either direction, are shown, along with the angle at each point, and the coordinates of each point.

            

    engauge-digitizer-5.2/usermanual/dlgmeasuregeometry1.png000066400000000000000000001047771222557406400236610ustar00rootroot00000000000000PNG  IHDRNu^; pHYsHHFk>IDATxlW}2X-Q)__Q G U=zuUqJe_aWĔUUMBML%fnBmJ%W4WYj7ږ*JeGVAQbi?ƌ3!P?p&LMs٨ !)t]*O,$f&yS/fuD994! iHZӗT{ȲJ[=|GL\MUCE8*E nξXy+wZJ45?ece^]N hg2LB|ӣv=gzM!Dn2R- G?z}vܻF(9\n3EO F6[M1eMq Ґ4! _MZ-OdbB}u3.w5b_yBQlI-+W/6Xse$PɲLXԻ&tUޓ'Uɤ81@ϥ- {ψb(JMz=jFDoܕ$96[O/M֦ՖUȀd;Iv5'Cvٳw ]NSo35{_h2WP-ͮѱˎfb?4j#woe/z=j^O1mOn:6m-g?%];`%fiHCҐ#F7K#%(X:\xzK'}z?( /BH1I/R`~ADړI|KY&ch]JY7z z:򃟾Hjbd0tRmŴښ#Xֈc-vGy+YeN*ԓ! &@XיB'ɧ-|F#\;lswhFOeVG;<0Xeܞ1 UH(KxbقrK UMx boh9ɤ?f0]T.?h0Xle7A2z=bY ʳ?YvRm;Mg>o~YYG{B6=a)o$tʚLFƀ䏴yɠGiӓ$e m0B 2ٌBJ!6/?v#w]MX-K eX@BҐ4!]t-D?2QiQG,-Ó}ҠEzHG:bB,2E?B^Ϣ,-Q}mifq\6:i,rCýUzb1G-QlOW"w{wS;BȰ/|PhŸR<-fM7o0_p\o/Jvw=GLFD `0 ʳ"JҺB#(4jF*ð iHCҐtk iIQ4J {5F<<[\b%+=>-=_Y!^fv詢 I$޵#T} pgvI)0YȲ/4! iHCM4jc @_ "_/w"[C=rw &._ CEz"w":Μ9]]|NqVX/_e9|q_ wŊHŠ/  `Lp+=4DNFcUH$2 -"?h,oߔzǍ'L S76L&DrJgw=粘-P\1& Ko1M!j++lP.wכ]uoN鑼x"R}xXx$Wz Q%$tRNtxp B0lkqֶ-1Ήojl'$B^by-ZXюgg8|ܳۓ-i9v1#]nS-T= u~f?^"BI`׉.4 toۮ6-¬6!G%8.u+1.8.JpdtD|\.J/ֵyfėǥ~Lw_O6ڮ\+ysˆuM8rrN_r9ЮcC/JX8kaqmFmk"6!^&4FǤ7I+ PqWͨ@AP`6p!Ϟ;Kg%CR\`0o#B!LOh>7r2w4>n8;xv?LMU6wGFI>^=خПL6S>"ҡ B(J.-]_6+d d|܈UVL)"brAD9sC^W?7}gLM45-.Y!O'':tGGd yE?O&4BN&E2߫il}iDߍ"tiIyL]^Y0+=+t:D;gΜ_"==S|Dމ<QEfJy@3@CPJ_ _ /Q[JP _ /Q_@A =4|3;@G>A;́3HZYΠVczI+DoMnY\C"tPteY0pvb,<r8K'Jpl|{ 869Gd[8Oj/ĶѦ~Zs*ӝot%' FXZs/QuM~9_rMR!:;y9r=؄87jp~~㸱1r 8.J_ eȌYᱭnC+BD^L-U(F˜K+A.j`% p'd'Rw,!=7\+^KiI=f9j~>F8z}h4"ZkM&- et-"Z#مSTDy|"- N<@L=<إXǛnxWHn!A߰ڐf6 &~e1$~H%i)Vsi&dmFz}o0PEWWt!}dC9ѱQ~O#6{1QqӒדa߯'\$ |{˽ yLfO^_eJOiĿW;oF6?=_o+"7Ot_"Z,iZ|2oK/Yv*+[-:t48VT"QxX^?{Bn!tg)'>>+Ul!/^8}uͮ$Ώ7]'bb(saZgJ}Ʋ,BȺ8pBkC M2(qc2&C*#D֘zN$yOߠyO](Q?|0B#Oi  ?c]gZ{,AowR-B(v9qZ_\:zL\ߙfkrK!qD;gΜDeCGCz'y_Ccꁠщ}"NxYGցjrX!zh !B/xACthh4VWZ|aNvmv$g"Tfng^l+M6o/ǗsK7;P] c;[[\=tn]7cKfi<vPT u3Ƿh TOa~4wDg3=zPXpbЮ;6{^VrzE|16_/-$p#UrR7oHo.ǨʾNn&Gm23> "$]:Nt-hd.Am&&\}td )~o|:o]$Jy0|Uq$_M3'-|ھў6)m~~ޞ. V锉]YX$Ϟ=x9PG9q\>Wcc]\)M6!.ulr&H"T|w'dM~9ih$!q٩Tv._ se6\ϻ&?<_(m5iȅc.KRySGFGBuVn S;%Y$}H4%5&AIIyyphöFgn!2%q\ w? Doᦜ.~H$Pk^dOtwOX dzbQ~ugqq@NLㅍ' wmDNFz~hV_?$˫56V,f b,|x%U"1};Ej"-4[v/oݙ04 4mWd*J Q&jABR̲"98pPrWY+:7}7z'Log^~(Uz}Hvㆡ(ĭ?GNv Y]ov!6oܿ &[HP:F+B(1|N<V(!s7ږؑtuu&)ǥZ|12 "#R]o S0mtn%''d%oѡ!6ϺvxE+= $g|%>-D< }g"oG$Ȯ1_ FNd7(yx>]wz86X`?/D9tJlyyClnRIVڰPݻi>K\MX7X5$~:jXe:"y5IPC~+@tۋmzB1~) [YYw *&VUIeG-)7m/o%Mn?<tll\e߽--OG]\Gd|ܘd I*~=[#E Bh0|;JNKɛz_Ͽ+q^O;|"oG{7 ݙogW+W1Fk쫘8]y#tϓ-$}K( wM[.w}eC@-$#('qzb˲( M.S㟍yVjJ~/x,nd0 ד֮]|m_r?On& ztᾛ8~QX![Ⱦ>?{pnG:"p$)M]ş[==^7]AeY>V0t:M9@{mwakͶ:B: ?y.B!ŭ9yV7}&eY^Wxw{ӷ[[x-ߐw3+BǥӅuHOĹy̙]|`=٫_.L:=G8H䝈==KF&>7:Q{UJ,g8HN'>Ҥir33uG^'rwmod Anjd ]W1ǥ|%86>z=L6P:TRiogVWU.[Q< })uւx`8JlcIzb/7!c~bO~2rrh9q>0M&||uo"K+A~|%"yWqI5[z#Ǜ34F׉.p0hx!Dtqr#̢wQ6OgJo^lj=HC)zxy]!VC|z*>%?t=8.sʵ$N~=ih6s8iȅbA׳.nrg]J{J4"Zk K *|rT/ &l?T1miL' S_O9690qVד펍Iz5p҈QדM6Lb JǛ xU%t!6˩ن-Smk^:X:SȅkR̢#yxeyvd-V6S)NSVG*j}’XJ#(#㹅x6~.`>_pO&&UJ.w_p|R$.g^k8"z?TbJr)n=ݎnaA/x4z"= KQ.)jkg]]F∾ƍH+#+-hQW`묂=چ]_mmwGTm$~e22NjkY,j1q=qͳ`剒x=蟢Hv(*-ZA#twvo }XPrB d035wLcd_ד!id:*~,|TU:l!Yio}UQXo +o4CXIP.K_af|p4$}F]3zGVVT"YYZ1M:J:,2ze/Z`l⫄lVd݆mW~kqaWdD5KdU<8RWLmlm37f4ybۆj6lRIkr@Օj퉁zBCߢMNJ#*EWgn4?+㕝5o#qE&>}۞f_oX:D+qdz?%hldֲ҃P_ ~~]vzoKEpm-p0?myˋ#j(1  >]cu=lM ; WUh0I!dZ_l9"C1i{-1cTVW5#zpG!&p,jhWq#JvGV e 6l4e}ۘai xelIւmT oJcamv/*HRsel6яGݻG8ʳh盝=&Bowh_ }E+z~eG'e={zz"=Nb| N~9)y~ Va1K&M6zm~:cC?sӶxadY6 O;3ݻAw(1׳.a+q=(Q郋MO9lm'cM&uշ'Ӝmͱx12:bhs>*sjrY}1m969oKd~]+ R?r,?gIvW8 kTḇahmwKG4djrBQV IS6&D &FgwVXoslurBWS)~嶡em(IRfJq\ lh?^n9Gd-L~Y4jͰ6*9:kɯ'%3,:ymͳsmxOOgY먡0b6k5űd]gk2rbgҞ|#|5D;gΜX4[<.L:=G8Hȣq{ X.I?߳ϳ}x462Bۋml5 W# ="?9]h !zh !P#z| 0ˋ 葇Yd:^;d =],7 H!6Q._Y b:^ b7۩gJ^NthHSй+VRBeDjPx " df>?бPIfن=qy%i%Y Fl!vIY:&~1`2' i}u G #jwg+}FAI 6~Z)YK,9edphwq\n!^ט4jjr{v{믮W:r?|_L\ϺƾKR?RF[e-#(?"S4S&[r9a!Kbe={=pWh5J/ $]}^yz 㝝NjҸ6sm䓑B㸩ĔsHݯ[Kt#4$E&_Qξ,pa(py۝ cl(0X i_5J*{584-OǕ4'19^)6"nDQ)Vm"(F/(I2]uG+CͮzKRF$$m[#dEiܧ }~=,%:ov(?kB4#X, #p: 4ĔHz8@,\`*Ul쯱/'&Lϥ{O d?wq#zjVz@jr^:OMN~=ˈ5UG ccTkͲVJ#{I ]meɧIʶaybXLй!Ɍ~: Dz}$+^4%iZӉTh쫘4,OXKZ]Y7]ɜ3/ƿO'7i |0#sxiZ)Z2>S?OWWHCX?W_r]*ևUSSp|g}Pa*fȯgOڈ{}A[_hjjv_R)SE]hԑα c|zl|[r`B媵LUR_xJQbTJy~HPvvֵlfYٽZtY~bK.==a1[ht_jº=Zniiq6fQi::م]Nf_먼Wu4&Ve6F?N_Zg܌-Ԃu5{'[AtDPɫI,_8AܕugqZד%D6_6\Q/:.BI!aKR#$W4v Lj#%ʐ'׮H#>(RbesvY- 184r;qcɏ( YirDl±!~?`z-p Vh=XJ_ KdsxS4%a,ǹ9raOWTmR}Ue?"4 'ggg Ir9^O_}~1ҘԵk gJҘJ-||H*}Rif#~%rޫ8`^(꾠 Ǜ.I9콬_Si<il6BGBHt4{p"=;@CA =4@@CA =4@@CAXDhqzQVL̃ѯ=6Tm$#IW׬_۟ffUIV+Ut:Nd]mdf"=AsBWbZPo-ƒ~ŏ_v鴀GG(B{Yu"k)x,(8]CS4[K&FN;59;mM_684ȧSJ^ ,8D`IO,+c{v!y oE %5RYxi;Xs-huǹ_pIq@QnK`6`{ͪWx}g1y rJJڹ[OhW&s ^ j-T=^I7ƾ^/qNvUD"F- QGZpmw] x{L)Vɯ'={=ǰUZVc*bdtdycCjB-5OKKCR|j^szV7Ɉg i`jKa6i6BzyIjP}r5JR+V`Z"F1kkY>=6>_BHF{V&_iHr@ݵPx%~ZuAugUWQ z`O zu|5gn4?̧o2 3g1v9fYSvJn&e&6RYSEeG꽪]mǍGZPKͤDN!ձIVwˁ*% u{!&\`0hqPܝ9qͪWxa(6T9cyP}]|pWK6ޞNVQILU׾lݵPx~vھYuA}޸okiVda.wF.t? wi5+IR VĿ=[*T5ޙfh&}Dfd4sKnZзG|(gngҷ҇j.ЫATW%f ͔h 7-ҫJe&-ؖP F? ;^AQNopp{K\X6s 9K;r~ ܵkg]_N;:\qJjU rW>ZXcCQؚk"j?><اϪ NSl6llWQ~SyJJگK0m# ZlC :;lDk6MfYw"Pb X1;ǪBYCC/9%-,x[=wdtpjDz*i===Qh~L9:5 Ӫ;$R?dΪlE~;p U %Zs-T7ަ5M}|y%|Iwc Nٞ]ϺF.=6>~]qWY$cj-{zʽ[lSm9/~Jf6[:ޫn˚טZH,wYkU==UQՊ}Ӛ&tj\*M¾##d I:$ ϟ; !߽{*]ݧBhn}յu !9)RC$RG޽^)kZ̖lC~ }=+鳪~1#<ԫZPӃ"% cYݒU˪C+ͦ}Du\ƫPlk">ށ<{=*¨a,b* S.!(PSC9rΧǍ LeߛSc\η'u5ce񽪅؄)o0-(If6~8Zs44/'<q \N#,_U{Ɣetmw)K,/S/fURUچwclCUV#C#Jگ9/+|.~i҇kTu]wvv65mNy~PѡsC>M9)6ϒ^wzrR=ֻ+?cZm"VI  j:~A44oOTkZdzB摄Z{U5۞f[o  mY6[E Jb5rikZƋj6k7:F_U{^ d?ow:d2 JN{~#oGL~ĔU{76Tei+4Zڽjjcj"-F*Eה fir<{<#ȪWߥcBt:D;gΜ zeCGCz'==4@@CA =4@@CA =4<,.U̢ګ~]4x,/u =r,]v}?ZQi1wl!g*+bux.qPmV-)HthH^Kͭϴ*k)$f"IҨt& ~8qu<^|)W={=okDZ_-02:JT¹9,0Ve`A3% +P56QTڑT#F++?1)I[jT@~Dx{WrL%4hV9l6 ySVeT.+-,꡸A(JR|U.%XM0^Uo27^f^(=p{K]m&IHWP|9˓>mdO|^vpP@إl)9~BWsk-Jf ڐmW,IrYGI2 3@`_\W$):"P a>v{./ҙL&Lq51b:{{Q2w3|2J͠*ouݿ_{$5W9VQOV# ~,JrƋB(i@,;_-5pAwVs&Kзhr3i;Nt@'iUq5vF1 3EJ㍞JlF6WUBӈBe]vܝ:!E_pvwd%Y;ZҾr33[iAhhk*Z|h*dko3 N4Ce&ĔKRuRc5ICBi-\U[̀T|Uw Q!p4^)ꑾkXN6ė_Oҽz%'Xtb*1vwrL ؤ*|%ȰL-b^clm.o&lԽǍ6zcWz+K&TÈY~<ߣ V&d|5c}[u6)X{􏌏ĿO~9}S˱mԶmml%.~ rWdREd?bUJu*E_Mb1YLC$Y%WCi&g\Fre38IWJsl! bӘ;5KH=c{kmYEUGSSc5$9K,0Ƨ._p/E؆~5Z{uRU⪟ES?*}v%gղeU%}[]}Qb2+HƢOMb==ۨmݞ]z54]?suƺ*S4>u5{'˧ `YňްʐP~#@p5 6#=|̈J۵-udFOGG.NS-TW+zVzd+3ig~G?uv+jࣁa]gMIi*ҷ[LlC BjnYxȹugkz^Ղa;6Rӷ݊ehBm) c*E?םA=9AAT $[Hi$. Z44XbI-V#Zxy|)ՒJO) &x/zE`q iG##! zz/OSk3 8>_#gj9|u/ S,[yy$.$FV3wJ3_I$4{ks"iHVz[pʾ)5׈JD(fh;|pSDǛ.I9콬߾Yٍ,V0EX??|~AyORұ!q\:]XD;gΜ)и,"1uuGQg^@CeCGCz'@YGQg^ 62@@CA =4@@CA =4JYDhʢ b,,2UKǯOh&߯PA ]DvZօ4 ꊇHI:ȁdz0]'6;I3d ϝ_bd}}mT %>:o7{߭KĘ7r߸{\GǪUqD䶊e>/Bf}~\UT":j,aBG w*(/BQNl!n+yONUTQG~Un&Q-<$l6 TGd|܈NV*A&fRluZSρZ( ynF/kvރ BK' ɨYJCr䚂$?3=s=ZZ8xz)f  Ĕ㩺/bwt;8[۝r[ȹ_pS˰9;d)~-q\.sv|2R7Ass⋗}g*e4IöIrgAq i1tvw_ rw{$ZrXJ{⋉AZE([lz7&1rw{I^ ?ׂ*S2U)/(jDGHs5 6)9y1z4縜̯R/,IN*{w]Pz:=WsѕE0k*k_ccܑOF<{1| T~D*ZZEfYH2o]oU䪌WW 6ⴀKc2>)O&jDEG uh`692:21sxӮ+D|JUjv%тiU~OҮ ^ _aFZ 3' 'N;x-HrY4F },o?vھ6q-D-Z ђA"3r3j ׿4lZm&K4M:HfjtԻ׫_1e;ݑClb)'E9)uK~gFUn0 rsԻϫK#p(g2}phP&vE>(S&1w{tܻݑ02:ۆ]n,B' ˪Ttt ߿?s;]w?Ԏ6fM 6V^QB#:٥}SB _Bђ d՝hl՞"[>i.F{mR܏(jaeUE$A6ף%[J,pfuM~9Y{eb[+.7V;8_yS~!ڱUf9S[lm}Ѿ5MuȅCOdtw7|HR5fz+?ja]ZfdeLs[G%Z-||uӯV絙kYJZ˪j4|_ U[zh&s 9>_Ob-䂯 [Rꊊ/(Wy@_Ԃ ~]d1DSDhA5\ؤsS-㿅!M&,+4xߗ UtbfU zR? DuTėԏ)֒^5i~No_ XcV*+f2>t1d%|j^" aK4\Ϻ.1 .Ly^YY=S9<^ .iQ+Yȅ%YU֢1x&MߺeOOu#RE$ڗhA<#I|PH:UZШ#$Umgvv?*fђ?U4$3aYKhA$kTARkz-Z*iMej\rbde }㟏GNGgVד<pfYٲbz~멷, _ˊl$FT d1s}ug+n}Ncr7+=ߴAf S[-*-hWZ%H\OlSUՌ>}[d*Iݕ$MӭϴvNv!bcuF?j{zGҜ# kuK`1[*O_hn4H"Ey>V*Iui3(L(ւt =[. 5ҲAzpSTbJ*||zTMqdt!$YC#9-O;% v/p!^[es\gwgߧeMͦr'|Z-T, vh;Y'&׵g)j0'A85-`rmc~L)\q+EGZP$޻gggggEDlC[ꢐB#JGd/ x-hdSZj'r 9Zs*%GUϢEi,T˓ dfB %IBvVwIAGe }yWbW-8JLI^+DlYwwљ4 {ޅiDi%~P;{rR?›;684;.d<?{>Q+#BjW^G|.$wƣ_v%ٳS^suBou~$тD)Bj<cGgUQ;竓UugGQ%#Y֎[!Q+OY(4b]ggg*1%>684yOpJK^. 1IR)c*fYHWJv|zXyV^/FxQ+nlCDGJP/FxRz mTG*BmsSF.T)k/QIX~s,CKyCtQdDsRSD(=Ga>|]VjKͤd2dnOpox8pHqtY\^ao.]V%\["ɶ]m&IHgKPnOfYbcs? oǧ + N/,PgY@Hr -G&w}$6u=Ub䌷+u˩76mTGb*BmsSMdEvtDb_+7 OV3o#"tf&y =E9 K+6{_*3kKr0]A-}.i?-LmI#]|4"+I bw#p888NJ%0yFh {WKs?_UhX"d i;T\KgHMG37fpu(//gÎ:dkk6j#A r1GUu5y:1rI4Yr^YU}*[jhy)_zĹAr\n!;sO-4hS2ҐJK9I.pW%oZd[o969wBee0:ʺZޫ$^VS8|~5Z|]}P/mk3\ϻ0Zp=Bus]-R2)Y;VG*}V([ees,C931fH!nPSS8SA>D;j3;;+lYS+ojjNruI;U W_V}MkT_r]B۝c8|کTVe 4*Jɚ^VS QI>} j:k*5y㿜h:-T7׉zYkW[>ǖx 4R?޻HeDesx JǢSFOGIIPɫI:7T6ҷҪyV22>pqHz;ٺΚ.*:XT UGiXYw+- $EY1hԽ[E!ÖH-nO.J^Zxn64:c`>"$:W5?ds [ 1:*U%I+rQ4Fm+ԌK ׎Ҟ"2#4T{Z̖=E*h_IG }֮9CwV6oX.H#q5(΄t29G<וYP=EVzy+=##Եk gloIͦfg \γ-yD0K^54|<)zU^xIN&lO8H8;G.֟*ZclBC4~DY)+J\޶1O-d}AI-X݂)ICQ|z %^&݊sN||%Zg$}#x U)?b}"6PՑlUc%+=hxďl&x ?NH=L&W v^gQ?d I{W|q`0HBy6V4y#I˲~^loIIGz"I#>dw7}+߷ NG^I K!bW[Xĺ[dʣ$Qlm#!C/zݙ>?|~ K &KRN*{/? cZmR^G^ 'rd!wIlEݧulCUxHÅgtHRsըx(G,FO+#-sUOQsf.:_Vu=d7zRXxI*aK qtai4qp9sgX's? #HO$N@@CA =4@@CA =4@ JMaܝm(-ykHP:"x,(NFh=;p&80w"F ADi}f2w8y#rR7zqo幙HO$v)F*}ߙ>Ţj !:G߼U9{lb:QQ5k}z7nvjlx9[#TGsC#%H-UF>Tg-ۤ\1׺ުT`Hz%i׵5,k#k5>5/jK$ 뿪?^jO#v~$ooY2brk/濘>]uD>Q z`O'dAZ.LkLW37g,On7ړ&Wa2Cyyoᒛ2ov]vwnf#UԜdD|{۝9dlv7  DHʪZ`sw$:dըz !dj2%W Fx%buT#I!3G2#e0[ kGbYefo.U-s,&ƙ:쿸8/Sϵo@#M('eٻNv1%h&f:%6H@SN>gng[Á%8_3BnhPLrLZ'uЫtyz]޳iinnN{{z,3{[r&iSY|*#ӀwWoW{ou P6xZNM<Ž퉢EQC;يďWL䭈_QV]n> Yi3ACkx~9ZŏF?-~% C1@U3-/JDԽLaD>u[eɹo=;~q }%}s*2VFmmyiuն&^{rfuM~9 |D 9M7 4[qKέk3$ r%jYGJ%}V9 I-dz#c9kuڑwj{}Mk*?^r C("2_wi=E@֞dxb[xv[,[<<=`f~dn2ʺ>K}a~%/SQ\'smS=?W`ήyY:TRg׳ bccݘ\ 1U]ޮg]cƔz%vԏ)SgPa8[,T*<ɠjJcI5HRsmD Z&S?eUS&㓒.UwZb-'%ZGidBP/^)xJfT3CQVʚv{_rkQ˔F$E\b==?XJ-Z +d6­PD*)szBx$&N+LbQ>#oVq1u!mkzI>Ql.%UE΢v5I*o~- IDAT`k]R '}&7vD B+&_ܽhXmUg DOGh%6$>{4PQ [F/F3BH]_i$Kзh^n ӷ[iAXPr6{Jܻ=* eï$U.Ѻl!qwhO4y#I ͳZRV 8K E"=3g/$UHv^.L:=G8H<ʬDU_yb @CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA =4@@CA !mM'ir.wj$I7 DV7V7rw녞yUHߙY,!zh !zh !zhtJ]fP7䃞]\ic0Yϼ<~R{Vr_9i֙MWlhKߙY<>+0nڃ;3CgZ[ +:_lq*t2/=>E8nŊzBuGPa2ooqN_!ć>{zXj*ӃWB|ăA}upl(sg}FIENDB`engauge-digitizer-5.2/usermanual/dlgmeasures.html000066400000000000000000000025451222557406400223550ustar00rootroot00000000000000 Engauge Digitizer - Measures Dialog

    Engauge Digitizer - Measures Dialog


    The measures dialog can:

    • Add new measures
    • Remove existing measures (but there must always be at least one)
    • Rename measures (but every measure name must be unique)
    • Change measure settings
    • Reorder measures

    Each measure is drawn as a series of points, and lines between the points. To control how those points and lines are drawn, change the measure settings.

    The order of the measure names defined in this dialog, will appear in every exported file. To control the order of the measures in the export file, move the measure names around using the Move Up and Move Down buttons.

    An example of a measures dialog with two measures is shown below:

            

    engauge-digitizer-5.2/usermanual/dlgmeasures1.png000066400000000000000000000340731222557406400222570ustar00rootroot00000000000000PNG  IHDR pHYsHHFk>7IDATxlU7OUj& (cURDm]:-[$vh^,b ꒦蹛= n%JR^\:RjDuhgF9RGq'qıIxd'9g~9ݼynYnTo&<N$77Jo EcŊb#B+"K@eC8qadϚI%?YjyʧJt;3bdSe"uL: ZQ~@.e?$/e gJ{|*& {ip֍y|e U(ywM<哪{cr"[TI J|9RS>垹[GooOyN_Go6~򈈈>ͯ8w`'6gt]9͉(iB[S4~+$Fm?"kURdZf@QNyS{g{04nNMeS˸\Y{8mfF/eվ桶j5ңsV@K__v5Yz?֍[m5[p[w5"?R̩rm"[nKd׮dZ~y8})Wdl<\H lZ;mm)ɾ\@3;?ίν=+^Sin\01#1_c9"3/Ѓ~njXo"h$wm4͉HGbUe(mG`TƹDl&wU|`S/żsּqWphthˑD ȿQG5I ѭD$[Ak3PX}m:hYĪ$X]wǍJOd j-Y~L%C=f:}̔,bTmVS %v]wǍ,D$U DzhK(=HQ$)u"iyA 3 W[ cIoN2?wHd4ciVi~_);&ethjT㦑[yлЖ1p3aJhxyoaI4{_pLBUgID)Xr&yP1R/ܠ]sMϿ>4"c1&\YtA%I BehQdZKĬEla(nδ<;J%'\J"19:vrJ=U"o횮}cH IƤ/w;¦Ez$Ӝyր$$Iާp7O=cNNDdN>ƹ%HB/tWv͉\Z58W<3mN]Z(QP7yaPh99e=P:~$V+ mіPs給]A"~7A6w넙άZgBk]dXdp?;JD+7Ds$ޗ+"κjՁp>)0qfLxӱ]/vYo&kFsw)v&IwQSιZ+=Sh۳gZgG?yhQ#>f§ -%1%,nE N' ӠV`Ώn6&Z;ۨĭ{LSK^=JTNS 0eNgݳD[R s΢5q|N2?ރ/} U'yoWp:9wLetSwZѿI2QVe͙t=ED$"nsиmä**ETZ:72ucZ#bk6 6Hw2t "uݘY8{X׍=+0gkcDtu^Ly18_Iʹ匮ȸ9aJ $mغvbGMKHJ{sqx9~!9Ydhh2>ETDuh#)NaΕw!(D3]R3xH:Z)Iʂ83ϟ%n)VEZʂ .BPGxS4->"JOҭ˸Mv~:/jio6ӓ٦>)=)9}$ziOHinm݅$ <"Dg~ee'Cqg/xql][7=nf xcU)v[Z/(X֧8c٭J>̪ G?MjFDJkLHeT _yH˩WRu2dLg6&$H[tϤ|D9{NIkm6ʎ⒡Nv ZGDm/;{k[^\kW Ea'z{z{__nL:&p \`A0 ukY_BP3m-P0v:Ƨ3?׮t'+Z=|DFi1E|(;s& =~;K\LqgmB6E~??}ljnjWSj;__+"?VʧXǁUV=@ہȏ#%#b xe7"7C%[Mm/ozܘ6v7~;+:vylGdG0Tԉ ?wuwE~9?jo[dS) )=dEvEz{z;_$HGpoҗJz0DD+JDWrq^]ήN"JOp{)>eYN^̎==צWWY ƴAD/Ls!EVj>3y<$GD4|fyOۇo^`g^z9SLt8pfcJ| x.Q0QS|yX`sUhH%Q-/3BD ɋg[Ȝ2 t nJՒ+0af5l21Hg\-g2 "??ˇd߮}6[^0#m/%'2SGZv 'O ,b;3MyRujTf2C\/2q`2 ;ҷ-ḿgZZۼHOn/(DOJBDLFe"쌴ݷPdkּeYDe[%|aγ(~Qc^=D3 N<`sn-[7g&3D[pP桳Cmu`s:7+ʭTݢlY;t9 l Ȳ|7tSlKڤ@,rFr\+oٖ6""mo'C=";#N/s V13NVηgᔙ 57#=ȣپ -!@ @:u##G8 K»woo46_l'boŬikۣ67Et=tӛmFEMgFaŴkݲ.0ݸ\K֪Ήiid9', Vd>d&3mI$حڄbwKi)]J.| }"DJ@xfUq3r%i;؅, CŰ,Tnw9y) Z ,Ounٷw+PX{cڷw_7EV>֤~~l¿οCkֲޕK}O+B}T+)r&8 V-9ǽ^| GapJcvX0`A0 uL:&p \+.Ӱq|0h1B1I9zh`QΝ=iZwn>SM\^Rػ +r]`!cLP.Eߙg_RU'pDL%)-7Uu w Z "A[WUةX/Z>B1\p%kEY=&NopeE&co|qTU;~c}-H۴n=JΜj}6=ɋL&SnR*'иox0dSzwhwc}o:^ȵxCB',EFs ?g*{-"Ebgޥ<1ylf@ТMQv$;;s3 >OQT ?P0v&U{kb'bGC^w&"4:}j{\&\+~~M'"]uMwL铺q5%.&IߗkYSƾki3h+3,?BܸqD$>'>NDvE-sm:;s |`dW$~6TO\LnK<~@JhMQ_1]^/u ?<x$1m] Iҩ3rZh;Ɔo1l>$ID HB>z8u:s*XD_%Hf&3ϵYi~ypHf*㼫3|fyO3%'8=j,'/&/7[i!FGG+72 0-73e[3Uubol9wMo󷝝휳\aҸ՚4uuwuwuNپIDdL�!X$^<@ l2LaDz7jp]xX-M(7yY9tuwuyXpc0Y#"SRQ&eٙ ƀ"+D֪=Gz(9>b8T JpMȏ# waٖ[l+@@_x#""mo'C=dY>Ds6/7s}n}X-:-p-xs@eJ}8"h=k8k;Jצ61k6"by,s<=[6"Η:Sہ6S&b>@DZ1jѾ  )ȵrSO&6r:),Ͳc/utQ'd`s`8P\Es妕[N\`[- QS+D?:RM(:Xakal zL:(ˬ%>; ѲsʐA&I*u૕VBO$`gM&>OxW1MdL] s%Fj}<̔cZ_H`sƴwy~})cʪ5>>z+Rqf=pKnygfD&RK^LOp$dW'OgFG/kD)DD4'ȖRڤnr#d&Q-ؾ3OF~C;PnE`1Le1-e(y_BgYa_s:FDnF7(GĉXzB3 ">}[!5=jկYg19mݦ}" ?l6G)%Ϧ"ZN[%Ժ+lJOd|볟i4szOy^G=2Sܷ^˙bkxzNUY)n=ÜWJ6*sfjsN/f5i5#4à=1"DQdbT%Uy;1&W3z\7  Z+$2_}Zlm +<$VuL%7ײ@ΧғFb4MyC{B/71M&F/iϴl0 kZ=y:޺3i\}jrIޞzY9prǘp%N=&wy䳮>pGR6~J*zM&eiPUp1&( @ xja8q&p7%8A -)%zL%1B \=&"%xW^rVpcr G U"+JV2m.zDsUETn1mhWooUq*jQ٭{S(3Iҗi=69GJ yv+i4ZazF'Nj]6w] zVkInliNpkX% ƴDfN>їX""NէtmBkezŭOG$Q*6Ū9e9K*rf'uU1'TUs,D `E*&UI3LC\ŭ ٔʈUb&QkU'\4MZ&"c "EVI]Ԝcw|Rj%3afN,i㜋H7Zr ͥjə(lRT`Id Yq D^7nDHdbf2#xƘ$I7:0" nZ||&7eQvYp 0Ac$09\+y ,{ w6gULDdL+cGe,t#=ڤ&˲eYƴACc&dm~5smqS&opRe&3rlYy(0ƄL&mL{iT& DZQ9o9;3b|}W@ʲ9Ld<$W;PtR&#(SYp)1cPTgY,QTANQP^5r:1]X[cA 0TZ1P5553?xwáJ+P D}}WzMU?_L;.PyDFi1E|(;s& %'MoMfgGC^N9|v8h=oD,q1oӾTܲtMO5q/wGwE.j:11/l{mw)^Di(MLL?pl A+ȹW{^JYL|vD8SD$rb [uB!"*|z&۞kS׫y+BRRo=LP`J_o_dg϶9e2<6%}EVfd;;uZZVj*+ LȯuPy}GE 9LZrpZ'J,y Yۯ @ Xv1wr*ʵrǁC=-Y@o;*ќ2eY&"gm_ӉH5b?NDi*r P@d{*+ M?i l N6ފYֶGm n6Et*́Ȏtho/゘lS:,T^11TWc_͙rNA徣}?Wys~[__+7=TR/+P .<^p*@ zL1B \S9e);6LEz^U`|||UL+%1&p \`A0 uL:&p\ P<|$e1zߏ_X^R , * V0R=ac(z1ĻN|(" -)S9pJߒRR1Pc*-uL+f6u c ɚJA0}Q_կ^WUǁMOܹb4?oAw" V$J]Q"2L" =xs'/& -`A]soMD,hvI}jx Ĝj!tgwgRjoS`0{~otһ%o;;>e'NuRU" `LңOFQ DF#~k=yhwcvDvAN5֩P}(9tИ6ײlu-ιcX!z^64N}RW//3ZC4?՜lylMOp{)>eYN^L7%0a %UID41 (Uz?PL%"d~c"*tZd2NY&'5)yAzpCPs⬕g k)dLphRTwNJ?ȢE6Yx [Mj3Ȯ3ܲ7dY= l Ȳ|7tSlKڤߔe[1=[t,*XKВ%:5-:;tbOkx鿧7=)<iy}-67#1mnm9}voWGܔ,n>)iCw3ӧF?}{﫱+N=9xr<'d`s ,}GnT[[:gzZ sZ\>&R(qjS99ԣާVz-VzL%P֋^۠@)|VzL:&p"O-Zn`:wGǽ^ob_j%~iRW(%1&p \`A0 uL:&pb>(,^rp*oI7CCEW&w?XW?ZKD1z(Fr?̦\*Zw?Myfb *)iޚJ,w;I%+CgSl!PsoMͽ5 xW555ON9q>_&)~6mz筩~DCn·M?}gīW[rS^mɯE{_~{h ׺c[6M/RIVV z{_coKǏDI##ʲ3l555W^]l Z5=&c8s@GSͬ*TsK݇p0lڤާz^UI软vhyECJҸ11HDo y^;s %'MoMfgvEknj~ى/R O4CؙXTSSCDQR-b ~_xl /4=u…eeB[hkh /Zi4q1ADͪա!ID|ŶݍS_j)$$JmnLvw<##%mΈ-ۚ__uK[Tso6rsXW!NDJ?Q7uǁ7i3=R]L$"EV 6T""[J§gvm/-\7GFF2C(RQ|sޣ>O,ɋIuZ-"[s뫷yT fI"3z~6*YZxO;Br+WY%= bHD^0bgbNRTk_"+3a:.)yAT-c4qM 21דg-l|8y~K#c=}r5T:N(v:B_iWO(J䅏.,ԈCԺZr?.f{-t.syJxJ +v&z_eU,xj{UD;Լ=zx= bٽG_?9oӨT+>22*"H5b?NDi*FDdϬy> ro;(/Ӂ́,~sbhNՕ|""Y%xfiwo9o PWͻrD݇O8)iShө3zg3{&vEJB[w|6q6=td=úȎtho/-ǹͷGBLmnmJo+,mnAƜG z푅ƶ*Weć^Uqgc{^y)o}|SZ|,31:˭A;{w_U3 QrXgּ` ZMrPqu*Us%,Gʁ\e ,qsÐrwBoKvjZs)`RJ?;ǗCKhn`S喋ȿ;=ӧ*0 S7M pZr0.K[ꗵ/q(QX{*(cv(<0`A0 uL:&p \3oQq)w>!Joη|Dd_[x/rFLŎ6Tz?V[1t7o~;2+]ySoK}?Nwrr9Yjc|Kc"{I%L+/ID̈́.IENDB`engauge-digitizer-5.2/usermanual/dlgpointmatch.html000066400000000000000000000033071222557406400226740ustar00rootroot00000000000000 Engauge Digitizer - Point Match Dialog

    Engauge Digitizer - Point Match Dialog


    The point match dialog controls how Point Match is applied to point graphs. You can control:

    • Minimum point separation
    • Maximum point size
    • Accepted point color
    • Rejected point color
    • Candidate color

    The minimum point separation prevents the creation of new points that duplicate existing points. Otherwise, duplicate points would be a problem if Point Match was run more than once.

    The maximum point size prevents sample points from being too large. Occasionally a sample point will lie on top of a grid line or axis line, which confuses Engauge because it is not able to distinguish the point from the grid or axis line. The maximum point size value limits the width and height of the sample point so that, at most, only a few pixels of the grid or axis line are attached.

    Colors are used to distinguish accepted points, rejected points, and the candidate point from each other.

    The Preview window display the settings.

    An example of a point match dialog is shown below:

            

    engauge-digitizer-5.2/usermanual/dlgpointmatch1.png000066400000000000000000001303371222557406400226010ustar00rootroot00000000000000PNG  IHDRKvSbKGD pHYs  tIME +u% IDATxwTX]fq|۷/W{SgOFnN:(xw3u}SSSZbJtsm{ ۶0kXzev #e31'*YY5Lɡ[cyFX?Dc)IzuwM`J*H㓵[HO=g(14jȎGTU7rH Gdey&]b9k dxXi}X$@4ڢ|e9NI_v{_Y"=A(,:#r UؾM[ZD oSL,}up8Rzq:\dDa:}5lɌ7i圙}9tN&@fHT1Ġi!%FcS`(6L4>\hԋ$GTVѻ>=M[_I4ꢥժW!.6br;ݠU@Q ë `jX-zeJ4(=~B9֓yǬwcD-WE/֍'Y#øKv{Љ<vx\j 7Y?8=6 sw^ vzUv1u2yTU?Xq='-ECNaYUH*m?/W7{Af;Qbhv4,FT_O_:Z!Kt9M -H{ٲm/{e3qBj6O!ijx#m!+6{MvrO Y~>^[l?Hѐ TU#hf*  Le,jjNrڠnw.=6Gr7ۡa2IJua WGH(i&/aw`MrDa&__kQ4wZA;ѶU QVp؏"[,F}@4 .FK{0iZ!ֻNF UQFFC74j9'UY xOs+=c<8֣Wʝ<=rɝ=pԓܢW6N=oR}bGEmV=t}rO[P~Hh4=`K=izl]y|~=s:xVY:xR>>9f ՛]|ӧs>G39.,']DUu#+:~y_hj>Za]`Ӧ$SXƞC|f?)-w^* 2s3|H6;kY$ڝ ~̈́ѹ̚1 _#C^d>ZS¦n_zxx^!$[%EMjdHXMSDf9x2]D*_m`CK~dlVvE9 e% 6 3 cITUYjU8f1xPYE׉c;8\֌nܩ,AvcR5҃x͌*ࢹCشo}RY!o83#üYCq8X-f LgÌ"de;J2!,&if}M%g7_7g_ފiy:eUh y3Irb0z h"NuѦ}GBO-DH@m}M5;bܓvn+Ӯ=f'{OJR]]iPT''=qOV46c6,qcn"@ ۭ\ql͙$%B=(f^ft'GX*0~TV`æDc1>h#KV ˑvȄQ(Mw//YͭZ 't{|VΝGvg_3q{׻yy9mGN: f*BD("tp8LLtMQ؊Lihk&#hjs=YK.~n. ]CQb$ٰYj1u"/&LƜSW[ 1֬3Ͼ@ 'EC<{^^:O< S_[Dq9̻`K*r3eB6N!MPT#U ,c6(ȊBJL_-i 25 1YQ&)dze*j:x2G=ͭq )}=,uXdl$fL,vԓok$`X-2u7YV2y̺GQRe}2 Z҅']bk=df#uD2-~ݓ.Sج2fSgOCO%tRvw722I#O$V MӨ!GMdfry1DB 44Q MŒ;;KhnlljӗTV5{e¸ڈH&k|=Ĭi5zSSsڠA$ ݓ e=1=i@Xx:qUV'^կ/::@umgOmǭOn{R;OTs5'T'DHrDĎ񈢾=!^]1z\X:\x;9nRE"AD.8! -&b3A4c(ӓ (ܩMV;+cdo﫢*ʈ$Dт( Dmج&YFU%L$Ef - #؝LD/@UDoW%A$D$p >Q*}zpϧBum3&?"'BAYQR#, D10ɩ}дW1ݬkTF8, =NZUCInh0Ɋ}2n~ǥQQm=il'6}ܯNq:m]xiwOq5ڎT brS1~27N<;vk[~r\7Ә?_Ʉ(\N(=1f*YT;Rq%'!Iiě``/)" !YDth/xhpQeMp8lfPkk Ry玠5M „1y^{cFHA$)@LVp:8v**Ic̨dL@0J[ yS|,PU bQ4u}NSUTMAv+y=S͔DJדfޘ,ɤ99|ۮC.C(+ith[1q?8(h44 $'Wޥ1QX̸6dEFETU0h3DZ4 a vj3=tcG UE ?w*Ǖq,M GA`+1I=Ѩ^U&%K/ YUfʈ>XrH#C)9](^r+ɲÍ|q/{쥡1(fȞ\`1E-سϮ=LЏY3ɺ]݇Rרw~Z;]T5&] x}ZUMASU,f&2v4D#|gjf;8\lTEDY9;(ڹ4SŪG2 Sr{V#5CYE ̝=J?d%S841m4_}]}9STJ4rp?w]4=z!4Mc*~nvDU-|zo،(45yidz%ʎT–-;kBxu94x]|AQ?ic&zRQQI[p8&m{)w,fX,FeU?ohduX$K$ WTdG38l}?[mzwn@H#˃-vXh$A>G4ᝲtGH#g%St=@:D}}}w<م4Ο{AB1 a2 ;T9 H^ D#mHَ,Q(fQ4a@G2YLd& QHDDQ"ig.T%" jBU3[,D ɊKAd#шQ4a8P(r,k.,_{:Y^B\sT2>ZSlGM:nQ2c2Y}0#J&fB@mhMUh,{̘N9BSkTU9 r,)z Mt%I BHJr2ܑ̞QHuM-?FL3J, wA]2>YBcc}d=)Im<r*d&лͧ ė y:{Є/e!Si =]vOG߮S1=6~,鿛$kz۟'@bkVX,uuof=zayDXvwy8<)3hk p&1~`>߰hI$5ņk1dbF}I.}Un(#4}dO߉v}Ѓ2=U)=nOi څgy厁ۅ9v7t;Y\H֣oqްGַ2Rd/SI@T`ܓbHD?:z0 0K8~V6PNqc힪|YN:]k2tw錑&dd޷DUcF&h UlCT1~94Ø%LKw5JfF9I'=kx{ zE=|x[o͛7t:4h^g2#G x4 H$Gce``p2tP}=M"Ow4000081FXai````FXai```8$(K_ KSYYj5@(bK1c0p@!~lٲh4gYai````t NVPQzڏ="!FCai`fWlQ}ڏO،4FXy,DN uۿd2a6O/nbXEٌ1( H£$Q@ϻ(&`1K>EgdX^?|>v;!"Ns9z|IJJJ[;[[[1L8nklO IDATl7`͚5TUU!2.ϟ}|>f͛Yx1vǏ7>33g3 ?^IZSg_'nm&`D44Yİl$1aTU?˗UW]uRnj3;v,^'\tEݶtRx .rƏboc=FQQs̡o߾,Z~!TEAA=! bJcsiFa zѣzrj*RʈD"x^HZZ>>} "HDAAl޼e˖1dN'SLtّ#GzL2<Awތ=sJii)"€ p88t(ҿ DQ:Dyy9`Eaaa5PWWn!q0ٵkMMMуp8ظq#oGf%(NW%Hˉb6l?ܹp8LFFӳgO $I466k.ONNUxŭd;yN~;Tւ-j4ǣiPEQp8(§~ˑ$ Jss3 + --w}{rwt:;2e IIISQQ)S+ٻw/`Jl„ :eaa!7o_fĉ׏,fsmܼy3 6 Ihnn\~x^^x%S]]M~~>7x#}aJKK Bڵyq#WfҥDaa!MMM Q]]i\wu;b"l۶ Yy衇뮻zYz Պl1d~zy7عs'C ! R^^$Iw}S[[ˊ+X`BΙԇUTVQUh39,}>uuuJee%o&&QFQYY믿k!++e]eqW0`.]_M]]]v?9âEؼy*W^yljRSSYz5O>$yyyJ&O… ihh%{!??^zqUWiW5xSKf,o6iVcDzm6:u]G~0L?.RFٳ$=zsNdYj&fvqMKK?1cƌٳ[~zϟϏcjjj())js!I444pȑ̟?,<۷˅a׮]TUU@[[[mѣ&Mb@ZZ]}B4El6[bn4ZRRBYY .O>Hĸqx饗ضm[",3gUU B5.񯣡1ȻbLwr޴~?UF㜩a)fbȑX,RSSnDb\QlnHXqdl6̠A8)++^cʕ1Պ, 8#I1i$ 𤦦bZQȲ yٳ'EEE'hq:4e˖b ̙C=p\z0X ۝XZ>ѱ SSSA~Sm3Ecꏐ'7m4Ι ٳgsA{Dh=jzz:n;1cX/ `J*bay =z4˗/'33|^xA`Μ9LOOTUU)h/^LMM ƍ#??ƁXd  bp%#SO1gf3555%BvyZ̞=;pUUUٳ*֮]K0dÆ ;ˊNe˖-[ꫯ())!;;rzAFFyDž5W^y4yl̜9ڬ72|pk|%fHr;(HKuȤG gp )H7L ]c۹馛Xt)O?4 6ŋ3j(HTu={$nĬExӟNwgRSSC,#333f`4-1ꫯ{aZ4h .L6oM7݄f㬳LtϟOMM =Æ {eɒ% :CfffY{w|~_˗m6Yx1/'?Im~;*_ikkc6E={&uuua3_^=D$0Ll…#C?—[+hm)x=444x㍈{RSS1\^}[]uqɼF~SZ_~?%ڎ}2Tm7000g,fB1ay3i$ dԾ qڏ681K32 ƸF7_ lܸM6@:KPPP@AAF7K#, 40000K#, s F#, N޽{)++t{_(|_#, Ǐ7RBҿ)ƘFXai````FX&8B3e!i|߶L~/hc#,y衇ѣ^{-nkll&77^{[o_z9kx}RTT9묳?>P<3g?J0D.o/++7 3f`ԨQuYL>kÇĉyw=YlӧOO> 8[o2|>wC%??+{f6nHee%鈢i>|M6a2}7gΜɸqzlXH$¡CxF~~>>[nWSպ:yf͚EQQqmu]swлwodY{&o[ =( /"?0}i崴0dl6 zn:z,TVVbׯRZZJ$O>Bqq1'-- [p80`p[K[[ x<Hss3fGfffץ(v SYYc=  o>ZZZELzvchjjbJ}}=.!C`6Yd `Z0`$%׮]̝;)S$N+((`@RRh4)//?`8zh>C҂$Iһwo$I"pDQ<ÿ3<\}?tj/V\_̴i0\s5׿O?K/5L ˂裏Xp!vnJaa!՝zFD"\y̘1dz>d{d2Ot:߿?o஻wx㍜{8DN0Mqq1wfРA<#߿殻bڴih<@~~>w}7p ̜9A(//' 1|9p\pWJ'>BIb,YիWxPI={6ӦMppss-g~_s9 2eee466rwrYg~z _}}o߾kܸqlܸzzARRRq7r]wq}v>3B~)曄B!z-mۆf# !7p&cZaqF1bo---$''STTD>}(..cb6ElN'3LZL:Zmۆ,˔PWWDŽ :uN's宻oFeKz_yO.KT^4&Mo[ {g,\̛75kNy *3o<~bXt)=z;5M***Xv-~)&==bx &LwwAJJ K,I!3k,4McÆ XVzRSSOʅ^bE1b^ux/^/̾}b= /3w'O&))礤cV\g=Nuu5˖-CUU\. ,`ܹ?H$ªUعs'v⥗^G477DHOOO|f36f#m`„ \˗3a6nH^^t?K /ȑ# 7K/,~؅,**bƌ@>}ضm&L2A8رc8q"iiiX,=\^/gD".D;Ue8&##K/,>C \r ;/.$Mɓ˕kݞ[,, سg޽e˖zjnFu\{֭[ǫ( {m۶Q]]i|>lb4.\lo6ll6w{ӹ$(,^/'OW^aΝlڴk61Κ5kxtlh6INNEQ:thbEďf%~&fɐL&_|qbtCvv6Da"I}$iiiL<Ν;_oڵg}}rWvAN'ddd }l6s$>CPWWGaa!6ZTUE$(HT#mnx9w\dYOfwHĜ9s3f ^ӺĪ*-[m݆nW_%~'-:w+..λC&3g2sLOKt''P4M Ip\qIl&;; &ICCJ^x(W]u={LT={D$ E]E]ďc̙q:tjoɔKKKcƍȲ(((0L,ȑ#ٴir AZZZ())aΝl߾rAxի , 99~Ç3omfh4Nss3k֬:_ӧO'榛nw}!CVU$L&NT}K:u*Ç'++ EQXv-p ,YM6h"rrrhjjBn7EEEdffK/%f}>L:p8̖-[0L](H13fpwbLݎ=l,XO?͘1cG)Sis&v#"$qSYY8zL&o?|̙3;z>PRRmFrr23gdݼ;t:xS yl?4<#/aѢED"&MĽȑ#Et:{̛7o{NsrrÇ`Ak\)BOk% BFXai````f&0089_|7o6@4=3408 s]#, Na2d`Yai````FXai````$Z7&o(o28bgf̘1FX|… 8qw%zߎ-[0`W|wEUU40gxASSSVz"Bdee}5, 40000K#, 0fûaŊՋ3?c1'iլ\uQYYi0h .bFe4ԙ+W/STTHj4E$$I:?#̞=˰\t)_immM,5Lp饗rErNX,~$%%}D裏X|9 t:ѣcΜ9x<>ϫ FXǎ~ϟOQQ(RVVFqq1FXai/  d a)2/f7X5\X`0O@L(";;Ihll$idVk=onnMӰl`b`ZijjB4HNN6},?#N''Of͚5سJZZZ4 M>}p8B!ijjBe, rHTob2޽ >C^^v͛7/L~~>~*@ N|(~?dY& лwo֭[B4b444i&tDQDEEa֭ 2uuufzMRR;vॗ^"&xOOx7k  :mw(ÉMKK#;;;vDUU$ bZ&##Q ߿d~?YYYȑ#G6l_0uTFq€z7x7ϧzye_̔)SX,8pgy bIII̝;;M7DFF O?ɓ'sM7zƅY]]p^zsN}O;,ٰa&Mbر3ZdTTT4rN4ԫhyofYjj=ݜ5Mg prE@f8p@`vo~>^5;v,?3Ç/WFFFw^Z-jbȑxzzrlBaa!Z;;;ƌC:uؾ};kΨQڵ+%%%ܹsF+BΝY~=#G?Ν;r $a0Y&ƍÃll¹s簱jjd2T*jX,:1LVN޽qrrbܹ2eJ%#Fo߾jbcc9>}O?a08~8߿JK/Bk2ذaw /@$Iܹskr%j5f^}Uիǭ[=z4mڴ`00d@ IDAT | .f͚Y\\Lnn.h4r!exF#_+2N`Μ9rEDD/gϦ3f`kkի iӦ!x{{pIns==*iii̞=,z 3x9rcii?YFEE5YXX۷~'ѣٙB\]]aٲeԮ]1cK~~>NNN\vuѫW/ ^gĉlذ@ۙY&K,aՄGc B~غu+GaȑtЁDFMpp0Ç'**[K/ѧO4 :uzh撝dΝ;ٳgggׯObb"K,! ~6mڵkUᕎ9ӿ^|E/^̉'gDDD0p@^랔#&& 0|p @AA| k֬Ϗ 3}q!^uڴií[2e +WdrAP0rHBCC1~հZ $I\rFC۶miժՋ~+WpEző#G|}6/hтǏCZZoߖͲVZ;''' 7nRF~~>:t;wz^RR‰'puuٙb:v֭[u( Μ9$Iԭ[Bqqq2j(4iR͍]Fbb"7odڵrf?^nӱcGzRܹs\R6cB &k׮ɹs爏?(ϕ+WI&r˪*5ѢEtX,$ÇILLBAǎپ};ѕVuR7ɘf{*<;v 'mڴ᫯Ν;̲3gKxx85jݝ0äIprrCkNN߾jZIOOd2hP( Y dggcZ1yENN"_wttgϞiRYoD2e ӧO= &LII V"33weliذ!| hZ֬Y եFܺu 2wΩSXl)))K2n84 ͚5ߦQF7˗3gF#ua„ 4lؐ?+W2uTquu%<<-ZkfϞŋw 8PꫬXR{ĉYz5cǎh4Miժm۶eذaY͛7ꫯrܹVYYd cƌd2Ѽys&NHhhggg7ǹthZ,Yܹs1bZp.@;;;y7<<ʕ+qssc mڴbIJe˘9s&NNNiӦJquٌZ GGGzHFJJJ*=l64hC ƁXt)V?5⥗^ۻJiڰa?|<2DFF`ԩ[oE (((ի*6ɄdOOOZj%ڵM6;wY  1L(JʽS(_ZpZ'{zz@@@*qƑR233d2agg':___$I7Lq䐞`@P` ""ooo|}}iڴ)VT0(F~~>f>eg.^h4bcc'5jŅ@-vvv!I5kݝT6n܈ ޴lٲ\%p5"""?v͛W0֌ z=GGG<<<;PRRBJJ (JYU)))ATArr2JJ%Փzm޽{DRѺuky(((`޽ر\ INNU 1Xۑ XV233x"nnnr$XV\Irr2FZMv4hNNN̝;NJ͚59vc2prrbkVKzz:~-ΝCTjر#z۷oܹs={6gϞe۶mc6quueᄅT*9qׯl6cXtAAAz~ٌ$IbZq?#111r Yf=WWW8˙4i͛7gxzzR^=Ν;GFFmڴ'HļyXp! lZVXv-XVܹ3}ѱ3mٲ-[ȿ_~nFA֭1 Я_?/^LNӧUH1ͤqڵk' h69p 2]E0`gϞeŊ 4FC׮]VcbdddпNرc4hc]2d"!!XHhhHHH`ҤIcV\I`` ;v,g̜9f͚;`6?>7n^z~z"""i߾= Ippp̙31az=_5:t`ԨQ駟q) fϞMƍ0a|gܾ}\\\LNN$IOOgi&._oAHH.\?ݝyey9v۶m#.._|}aggDŽ YfTRQfMT*}Ӝ7| }nnnlٲ+VA fΜy饗믿fʕԪU4k ggg7nqF]ʽ.^Hqq1zÇ`ggѣGyx"j-[boo7x˜F!55\bcc˙eY9&&`v!w_ח͛7D~5%IBRhɓܺuPn @aaܵLNN֭[;V2)uӱZ ׯz"55hhժt҅@vq_^ё<6mDqq1jj5 @=Cv7od4lZMټy3O`CEZh߾=K,Ν;Y6k֌^xA {" j۶mIEq1ԩ#w1 ܾ}l:vH1 dddP/ 6dڴiL:cǎ0tPLV$<60`;vD$ضmgΜsβ9L&lll0XVx饗 ^GPVˇҢE ?J%*Jt:T*=N GJZZt:P(rڵ燍 Z/FL&233X,m]`0pqqQcÿm*J\]]gpppd2HG~~e㴽{&::KҤIBBBWWWzUn)Fj@qq1EEE򰕠ꄄ0yd>7n<7?7KU6h Yr%ԫWwwwMj֭+ dc}6A6ߢP(C?/겸\]]X,r-EVVCy >k)**B!IIII}p%>c"##r ϟgݺư7˗/BPP?x֬Y3,k֬a.y5),,$)) Nh$))[a-r4oޜ~~zx6llذ6lȈ#䱯ƆI&3{l[lo ?<^7LϞ=S /`رlذ?e˖1}tQm۶%00L̙3y޽;M6]k噷%K;&L{.k^/?Iddd-ϏM61{lrss% ݻ关3ƍoeܸqӰaC&L@˖-+j7o ,`СhZڶmˈ#BNNNᆪGԭ[(,^B{h;;;J%у:`01ޖcǎeԨQ( ӧ}{OX, >u )>>**K@e׉+^&l63n8jRXG:V"##~.,@@ a@ R xg Zܹz;wq!!!eܹs$&&Ҿ}T$RSSYx1( J%2|pP(ƲvZ|||$I\vHN>Mff&666x{{Ӯ];郷cOl>Ϗ 6py+%/_θqk֭[9v)))(J<==i֬$ Jfy YI)))ڵk8;;3bF#7odʕƲ|r 999L&iOYZ,6ô fذaԭ[|^JQQYzy[Æ ť{F#yyy*Ž}vf3ݺu޾ڭޣG2k,J%/"7l6Ý;wBF#%%%‬jբcǎ7p-vqQ*婤"i20HRD!r V"(()S)gyz Z&(H\:99B@$ l6SRRR.:uN[z|V+ZzBV+vvvbccCvv66l@PPvmBCCQ*dggSXX...h4 Ț5kgҤI3\, yyyz_6dffRTTBgggZ<ܠjX,X,<<Bd2qa!99'Or96l ~gϞ,ijEPT)ʍ7PZk<Ӵi"waÆh4~|eų>;J+ <==iРšRVtBw)))!&&^_iƘĭ[r 4k z;pSHIIaԨQH.]$&&F/((S~} tKxyg/?>SNO??RW^OTTǏʕ+kqr~1o޼G>_,1 zVsE6l؀7֮]N'/(3|8Ԋd2~_CfƍԮ][[Ndee-֭֔KPPPJT*2220+)**Hs,k;;;]iKbN ( y,k> A,mllgذa|w۷~" Ϡl988ȑ#qvv&,,)S'P^=> CZulԨر&MQYR(_^z%\\\8{ܒ{ڒ`@$t:T*@crrr~Gn޼ɰappp ** XiuAL~q_SV-֭ÇСCq˲|tt:1 a6IOO'((ֹZ&995jb?EEE`Zܸq͛7hӦ 6mȑ#t ;;;y*Ξd5kHfٴiSzɺu:u*{nݺpuaÆdddKaa!\|N͛7ܨ_>;w… dɒ[nC\rr] rrr\rnݺ?$%%K|ZnMdd$`4Ȩt?=_g} /@PP 8n޼Iv I&ݻ@6lȶm<M6xb}]رc^^^Wr^WfǾ}A$y5s= /PzbѢEL40tš5kJ ZMQ(۷~ V{fJ+''www$I"99OOΫf#c˖-̘1"lmmK.r^z3g30b/^̺u׿@Vˋ/Hjj*9nnn >#GT rpp>`+4mڔۗzȐ!̘1_tؑaÆ7رcyg3g&L`ժUL8e˖1k, t1f̘ fikkKϞ=qwwg|RUm۶ N+ի1cxxx0~x+</yWP(4nܘ1cРAJ.;;իWOZ;w.RprrSOQfMzA-0Lt:ѣ\ݝaÆѫW/y=#ov`6+ǹYGb`20r[ThP( , ՊZFVc0PT֪ؔ t%Ih4b2qFַATbZ1 X,T**JRZV×&I*~VUNWYRZFG-*KcXbK$ <4yZPnصk#$$Dl' 66PL&Sˆ~ohqq1w˫j*M~^fF =AkRYn< ]=NrR]jUSuV[.QfP2)Bx 6͕@w+t1u*,@@ ?b' dee)`2HIIARU{iPUjf)<""**Jdğ,U*#777 f)<&2oģf\@obG Y 0K@ f),@@ a@ f),@@ ~FLL 0kצN:ξy\=zz(*<<}xzzʧfggSV-z-BBBuhժ0K@02FA$|=ʢEؿb-ztannnL&-[FVV?#& RI\\1޽ O=;wF[\x ˣGrmu VZHDRR?37oDVӲeK:wF᫯Aуmۆ^_~xxxp 6l+p` 00Pؾ};:t@T]{@ Zԩ9x %%%ԩSIP(gggt:ڵc…ӨQJ[AAAt֍Y^i6Q* 0;;;BBBX~=5jIL8Q|!St:'.EEE5bJEaeKƍjh4嘚JRREEEx{{ӠAZ-jZ-ݻwaÆr|YYYR~}iԨ:d())ח hGҵkW֭FAPI~_@͡CPHdff\߰j*M&6 R 2̍7D :aF??r$ŋƿNJ~;88'khZ a@ R Y 0K@ f),@@ Y 0K@ f),@@ lc'9Y0f|'fpZaƴjkOlSg|Vml<B>jkEA4 G_EֱK\VrŬjkf5WR0d39ZJbV 2jk-g9V+Li|ɗjI&E,ַ|KSRRYYY57o2i$rss&??{vgq*ieff2zhbccOtR/̩S$IVbȑ?4``ɬ߰U%Tڵkɓ'=zt>#"##0`Kx3;v7xJZ%%%L0[ҷo_.^X%x:w̡C3fLƍΝ;իW^{eqq1=Ǐ  ®]hbtܙ,f {aĈ=PkҥL0RA=ر#q70رQF~0EEE||Gӿ@ڷoO||\P1cƐdb߾},\j_իWS\\Lvv6ݻwԺu-Z ==Ț5k׿EVV}_0sLʢK.;wZ-[VZ{Gvv+s̡TcǎDG?xb͛lْ ˖-G?PO?erؾ}8~i22J;>j2uT.\(WmڴڵkO4 ZZ4 <]vU.&&Ç!ˌ#!!Zh?\UPPٳgOZ׮]cСDGGӊd$&&VZ~>rZߟWuU ˗imܸ &pΝJM㣏>շo_:T֕+Wx饗^;""'\Q~7L"nݺŔ)SʽݻYlYRTTĖ-[Xre9<{9NE[{3L,_O>Ҋ;77/?V=kݻ7`46mZwNNgƌ}YΜ|5ȅ ٳgF.]ʧ~Zie;w.g.wM^^ݻw'**Rsϕh4d>s233+dg3{l͛WN+77ݻsc'ϒee3D5P0deYq+9Z(:mk ^Tǿ||O1Pa՚c^e'q"+NiA tZeƔSivO>CvaN׊L?=Z wwWkr5uε: 'W>x]jtʳ-}03gVZz|)QAQXXA8j1BZ+ѧcnYNӯM0RijW+hmF1X[KXVBpBϠmէZȥfJc,og򭨬8%W=+ LoԧVZppW[\Ej&{ZK `mGrab3b4?tE:CvaJ)Vw*2``Q", 7/ߨHƜ;siH]/q+h?qк4]Zsa++KwO<I 3'V^"i $X,PVSj~we\GwVYX{/HqK.W[^&L0Lj}HRUc%ŵ^e]S)ӪwlKE,,|CFcZ9>9JZ.edb -[  Y%$DGFp9.9k=z-Qj=\K/6ʴ\v J07j(eXIrJ..sոkbj{WK2CJ+_i%:%b}0w~h)ARH{W_'|W;+ZIpJCUUTjhJVQZ~ Jt hі>r]^KwW˦TзPr3K|||$(%''?ǏΞ=+|iĉH|($@͛'UƁf͚IJRajԣGJ|=/~Ok…j۷OzꩧJ~O矗~ arrrK666ZR^ZdIZ{BCCKj qV޽ a{|$o+ڳgԸqcIPH!}OO>ҥK*̔"$Ӛ8qt f͚%jy!qVxxbŊ a6o, 8H5iҤJfΜ)jFtiF#uIZre0Ҁi}Dp:NZzuy}v~ZH5h )&&Bi̘1V-ZDpҚ5k*ںuTnRH5x`)66Bd7޸pҺu*ڲe_i :TqF0IIIkvO+ݥJ"##%__0!H쾧5|p͛$$$HG V<==={V:~c3fHJ}ViVV.wVKfP(>}3fЃu{f̘oJ?8q̜LxT U3{l6mZ! aaaHę3gt@:߰g֬YjѣGφ7@Ν;3k,4iR!-aaaXVt@2ߴgΜ9=pݺu 0TK{gD?WӤi#=}SRRV\QDAAWUW]wuWwVWZp]ERNO.[RE]zgڤIG1iҰy=Ck3|fvgĉ 8ЮFaСL&9y A7dٵKHH 99Zc-{Jn&^y `F2tP iiio2C.h ot '>>tF (5jov؇f3b/x &NA\\iii4)`6()3f <QQQ]{h4n5C&xzd.! IDATDoiR6 P~n_O>vm:t(ͤcjU{ǜ9siV7mDŴix饗ݻ] Bcc#'N< Gҋ?;áo߾ 8 VS3f_$!!/C 'ObnU˙>}CW~8p [nշnfvmt:C 3Ͱ㏙6mTf.X<;~8=4XvC Gh൹`<==~gTTƍcW[hk\{p'ه WƼ7PNEGG3n86} =zFͻKjkkHj={n]Ǐ/?ƥcɒ%i//X4jz-nT*v111?_xk3ewrkװa.QĤ'l: aРApLM ?2{m4 ?BOI&L`Ihh( cibD}Qjii!w`.̚5c̘1v-if&ObѢEuKIIOyƓ3ft^5;c,\a@b)))TUUqI4~t1$ Sjo納N LD{\/}ԩSD)))lܷ 5N^#66RN :O^[ou1[xx.Zfذa>vYbL1<(Gߝ]̈́ X`4}}xNbrdU뱫?'<`;'6ջ 'HmMe Ӹ3NǮ:S*5!!DGG yh׫MMqjhhRzPMm``\Ⱦo!((h."WYY} )'::p\rssד&J%mmm6mqww]feQCLL aaatQTDls슉*:DZMLL F*++ŜZ}XdXhhh])G݉%<c|M6YJ!zNqUUUٸ"O`#caJOO][׭rfÇ1 =rddMVkhSEYj?Ť*=q|}}BPȅ SNvZ6nȀ\fe.=h4ڹmʕ+9w??Naa!:H ֮]ˆ NJCXcEEEjӇ9=WX… ٵaKKcGh4Myf~m{=:{;vP\\N#,,@e08z(˗/gѢE޴Ԓޱ4.BYYzI>} s9re˖h"m̐bɱc0Lc*--eӦMkpVo<Ȳ)//w:|0˖-7?~o WNfX())aƍ'%;;@R)ڔr,^GB364P^^Nyy91BnWRRիYz5Ũ,+**@$>BBB޷o/&--z˩$$$ԟ駟fJJJX,:[͛'gX,ݻwycǎɮz 2 f՘dQQVbڵ>tl6gj*// RR~rY>֭[~=CPP{ ݻywHOO]uz=9uu{ † X~=eeeH-//BСCmxw8~8u--{gSVVFurhBNNK,ĉl+W@@w}> 6P^^N$apu;sΕ ;,Yɓ'v][Kee^|VXƍ Rɝw)]d`UUUE}}=6 X|96m3Nל9stWZٹs'K,!##USCuuJNNzeٲel޼JT`RT̞=___yرK)j Ͻ+qR$V^-ׁJss3gӦM6ӏ;_MII]IYD^^[l!/:+f5kAّk޽l޼fzZZ| v6rssٲe 6˰f9(;rٳ[L?r| eee]999lٲŦhdڵrJSSw/~a[l6olS!`0vZ9P:r}|W6:ķ~Kyy]Y޶6ؼy3EEE6Aoݺuݺ;d۶mN]gΜaӦM6z=֭rWol߿m۶̮2^~R__Ϯ]ضm}}v*++N>ƍm1666~z9P:sm߾f={ؾ};UUU]?7nX__g}&JGW;wj{nv0ihԩSlذuuuݺjkkٹs'\iv˴4?r1iEEE;)F^^M[,mӕcSl6; ^;#W%3Wvvˮ]]uڜ\yyyr׀e江z222e]s;W]]]\˝:`0+''s뢷: _MM]휜*++uO466ܜ\YYY]]czLᗮwݻ$q^gˋKRuB{Qzv6`9]\aaxw, ݺ.*d;rnwٸBAbtyԞJ!"""s^n.F#a@й۸ʗ .%Es7[,EP`Moh]*   o;ow_LJHy jjj銌oo7[:ƙeWy95ˣc\*Ȩ(f^O]:ΦFMK*⊊³e4)((qE5Eg2wTlFBWPE{NaaaMMC%Eů(I55RJIHA:HX}ws]w$ye)F  H|"1I)6,!nnҌ֋/J1< tq YZn\\, =`9PfxkK>><1 ۫}:MCA4k HYݥ7lzo\ etuH6lJCccmy>Kӯ^ڳu(o.~!!W^|j4$&f ͱTJ3oyR+ #]\CC_{MnuJipJfZT*3l?Q0_mOGG̳iV{TCfٸKZ<0vq  o.)LOuqV!εqGp+J v=* gH]j=ظRF#3]]҉~d:$%GF̳>ғ'I55ґ={.ZuNjDgGZ#XH߾`U':E@u HΝm hng4ȱeR{xع|q c+*, KHza٪}غbbߟ&$In wow8s.Wlx8? HHٳ6&v^swG]s*8Xn'".og.Nvy9pGDvIIPbMaNG$twd$j>t7NWFC`v./u--HDWbTX2\m]\~Z- .է]l,'Į.xL>>v7tvBիN.6 {mWti4/\c ロ>}8,Arr]Δ&L@@@]8BAHH7|MiPRܹsILLtX<5c 驩\wu;t2ydzw%{5x`Ҡ#Fϡ+,,ɓ'\Nxxx0gΜn]Co>rHZ.wwwù[l?<==3g N]Æ .o`5ǣ霺Lb3$j={6N]Çgʔ)6njøql5vEDD0uT".5kSZ&55[nfرc7n>>>]L:LJ;8.OOOFa?~>>t:Z[[baJX' AAAˮf<<(gĈ,X &8\N$q*8@$b:\g6@"##ikkl:L6I&j1u񀶗2d@ߟ#G2|e4Ga6S>R*ظn1ϏQFq3n8>EBMM :Ivd̙3ݝ  LϏ1cư`Ǝk] ~~$$$0}tf̘!?ڹ^]]SM&2<=cر̟?1c8tzjjj$nXG޽>}:3g$""Bvf2I?Ǐg=ڦZN]Մ%-:z۬W`8ukQfZ>F/bt222y3СCINNvX<ӟaݺ;Fff&֯ll,E#G2l0 $?f^],eDFFڹf:u׮]r "%%ܭ)8x ~V^;8RRRPvY)J<<<8v?5'bc)HN&%%w:pmyy<,N٥RT*T*iii>}_}ETJRRó:^Ovv6ǔmk飏OJJ}XVV&nN BС1$gZo>,ns$$$0l0.$Μ9ä?&-5A9r$wf߾}(Μ͛Yz5yrMCr2#G_~N]YYY۷/Zaaa]kʲe?$FM>}dŬsy o ߿=+.NxX=tN>LLtm{3WT.qy\.lvue{T~䪫o__eF\R@pQ.\lrsx7-Rpb6Q_B-R!8@p{âPKS D˜@ `)"X @ @ \e\һ6URlfu㏳f{9\EN4MNy>3y~ai9993iooo?Cvڬyxm>}ki???']!3k^~e,X`3-33믿^l2ljt:/_n]׿f ;֬YCxx]Ü?9]>X$<.I+Μ93l]ss 5kʹS:mϜ9={8mocݿ>$!!~0IDAT߿iK-ݽ{]YkL2C9mܵkwv&))&҃lHו):i(f]uRRQRBU}Qrskr&6hjj)HsZ ].mlq+ڟkN:J҇mmmݶv\.GFcm%.Lms p@ ̈`)"X @ @ `)Whĉa)|:{|`0pIG CMˣiHhEFF6 2nznnnDEEPKT2x`]Lkii!ӪٳgYSm*, l~GyvRXXzYk3됛ҥ=$$Į#W޽媘u廒ECCe˶vӧQ 8n3ghllt...ή Fcc#g)IRRӧO]||]s4 :+!!@VVV\ꎂcܸ=g|i4%_}@yC邫,E>KK|.[&D@paD.%ii'$`)zٲ@ .@Y 7~`)tN]r 2\ D,@ @ `)"X e=:TPPఔ@ \,*++/Zi܋,{@ \,bbb=_RբjŖĘ@ `)"X @ @ `)"X @ R D,@K@ R D,@ @ װvbݺubk_dnfL":B JNNƊ-~(..&66G~ 33StEb5}߶mOJJ "X:ۛ7]`~'׿x*ƏORR LZZEEE;+**馛֞W_՘(v1LչJ%:FCCE@ʫh4(.{$IH$ bbmqo~ռwnnn Dg8\J>Sf͚ÿoڔKy^7NJ`)g6ߏIIIN/EqY~i_K/\O aѢcDE`2IL'寑RKzz: t:u]?lܸٳg?vj*[.+̲Ç?RZZJ[[ބpדtٗO?%**}*%ŋ1L>W9~W_}իyyy:uXΊ jjj~gF?^zIvX󟣸~xz*Y`=JAA5Duu5֭{j5y>#(Wf׮]$%%PcpYngBd1zYl 楆POT$%\+%&++~)S0j(<==P 2I&gNlڴ5kPRRV宻b(J.]_|^gРA,XTqs0,YRz =W*;'|wwwvI]]&IÆ =rĉ1 F"##ٻw/YYYOl('(J~rrZ2e Z{sϥ^{%FբT*ihhb\Q^^:N>oңP(4iǏ/\rrr bĈݻ<<<(ОVn۶m6tGQwř///&OB`߾}g@sZ-cƌ[ogɒ%jj5zbԩ?ϤIhllwa;qb)?2`yf9jF#j "##圛C ^#11Q>0`=DGG@i&L`TTTX,j͍z)PDFFr 7P[[K`` ߚrssw???܈'V<<< ) t:|ϢhW%3ydyxi;:u,9Xֵrr* 鶴)dh|8< o7k ˶嫓>VȮo>AףP`0GJ+%ę=iÃZek֋āB nX,&hb K̙39sx"MC@~U7xz=zM FILKK &ItbeSS漷/~UL=8plyx?pwJJJ'%ZJMZ;0`Ţ.6w/?111ŝ__E?~M.!)gO$8p G O>Gy# @ @ `)"X @ ɴ9D@ @~n@z  K*9#4uFyחZ,j=o zX \v5PZV$gfW/R_[jZ[ܳ sU,f:Z,Av̟jX\Oahmi3< tfnjT4 cz#XחLz2,IWCAnZ7W \{jϟps,BK@pPa1[8'ouhq "5\IENDB`engauge-digitizer-5.2/usermanual/dlgsegments.html000066400000000000000000000025441222557406400223550ustar00rootroot00000000000000 Engauge Digitizer - Segments Dialog

    Engauge Digitizer - Segments Dialog


    The segments dialog controls how Segment Fill is applied to line graphs. You can control:

    • Minimum segment length
    • Separation (or spacing) of the generated points along the segment
    • Thickness of the segment line that is displayed during Segment Fill
    • Color of the segment line that is displayed during Segment Fill

    A line in the processed image is a candidate for segment fill if it is longer than the specified minimum segment length. Clicking on that segment will then cause points to be created along that line, separated by the specified point separation.

    The preview window displays the current settings.

    An example of a segments dialog is shown below:

            

    engauge-digitizer-5.2/usermanual/dlgsegments1.png000066400000000000000000000312151222557406400222530ustar00rootroot00000000000000PNG  IHDRBn{ pHYsHHFk>2?IDATxqh?O7t>хKm|YK剼EJ ܌DnG*w#݇-v -˯\h,ͬ<,\4ri9{LNwT'%v[u>/L}wn,ٰa H\K}ao\uAhML^/bKmo.b~f-/%$SI,:e [0RO~ZK'rIQ ^@k]U7aÆYKA/@[h 4BNY(_Qs E Lcr]H."+, X4'SI2@_a sъ z@Ecy͔,p9ȂP/:nذan4.z0-+g `@Ӡm;޷&pyx_׋.-Y묾Frl{rI9_ 0:e.ùC\@]RjS-pþXpՔg~?K߁j#gݾKaXJ|Ҟ (3ὫZ@WSxN:J&kT6Fg;z~YrT⋌f'gRt<\˥-6^;0]63, f\e O\t(z>:<"EYUzW/k=-3̊z:X^o K_v^ sn>_@u+dcyUkHX.m`.G :Oy(~Xn +*÷aC{1:7TJgt]XkY^;ϳ-mTujШ>?cg_o@]vFPnigRkwie@[ t*Sߚp],K+XIF?5ЖvEhONuF9;B)F}Ri0}z\*̿c|emcIsov򫏾ߵ@zRpW] _{);R!y^3Ug(0T)@JYh|voHM@VV}{'$ +oOptz͊=|8Nt·؎c!]OtFp8u!~gTw ۛ"+f]- ϣwɢ2 Y;q}qVzBRnj~?ѥtn]\r~Lr}nԘi^rV} .>cB( ~}'rKOgt|+EuMCDJ, bOH_K,'ۉ-/4nLU7T\\Y^USJY(}n<{ohG9QfWz c+/r=@wOH9 O82Rk'k?pbb!kY/ӌ< R܊T.Q8 ,XvWs:;^sxG}wBsT˫# Kw˻7wej(TKhm](bQٸgRQ )bݼw˻$I ҲL|"z.;\y724ȲDU8UanNپާ٪}tc[R*m%OϿo pTjŷ9r~nRoAϏƅ}X0&>LL;rJF٘ ;*Ƌ(?2, |s ZreyJ 5=>yz}F5;zF=_(jQ@1 @чyu%gK71)ktn:U.b6x{|ՋFccQ]O1CnCܬ;z%Dɔ3JJʳK@Pʌq^yl N\hiAۑ:N3 ΨxcX3f{DO8;D/B\7/zF.H{0r6y^N.~Kܗk,kg*:_7n`]8H.̑-XnYq:o/ˍyngseao{~uB@wl[q-ߎi#|: |LlPQ>3z\V`}k\R~+j|#hx\%BF*6??aBQd:`|އe/vx+NڱnTznܰbm;Y\; U7K_{b % /1RI|,Ȫ5ZQIY-o(e7q+=kk*deFع^YVOq 8\taMQT :[fkQf;y GOv=7X=d}F5^űr;wFsvNPs'rYi2ۡ8Gߎ=ktc,:^FڎIJ[Fuad;,3>}X 6/KZVw?jXަ# f4/0M$}{'ox^@nc߯s-r΢M,;ZNoTaRSv65뒿'tjJs{ ,岕W#{%#wyZ~hD+hbwF*nM9`ߊ3VN I\y]wU85i\$Z2] ˑ-3fqKxhԻ@:_(3*c,Urv0iBT+SoGk֪rkp e )m`˒rcH2_wJ ;%N0/*1ТOkd6 01B#D<1B#D<1B#D<1B#D<ʛ@Ȑt!< @@sWJcJlhiJ87Fxc1FxcPy_ >qJwm}!a"Ƹl6[Jҽ@_clل-2]pMc.QXshiی jk]e>rvļFc(/*o"m?zN11r&bLlx!v!;mWH^O}'](lŸ./MKf--vRM_[twֹسדN\K<-?b?:WC}<0ߘNP@ãQ[yf-o\Tkו4)|g R7R]ǻ?ƒדʌ|+X<(J0|d;7kIKy6Jg7;Iʬ+eܘ:g3z6.YtSR;CWюG/Ky-:ڱj)/'$Xq~.Q294>Ә+ʨe%#@)Yʺw:+ݗu<dW;ht>]KƂ9+guЩ{TM*wE3w\+Ot9# h9vչ$r`PRFbU,]`Zuwd|U]?މʠ<1kΗ;Y L\ mͽ--SrA{j-FϢ2蠳լ:j3]ES/</p/u=x*ϸzFV$ZTy>7[źG6yc\17p4.~lT"lC[AVh}vEU@Vw#'ɖ߶Psh(JUEo{L|-vcz5mWY^|nN޸8[^hi}5ki]m 4EàqsJ}}: jkm,XaEQ>)+n-"ZV-<-ؾG|=izr```ܨPoʰ` LLUujAћWTo8-t]RfV*.;ë cLZ(r9Ntн cLqhMҋ_`Q)"!a"+U0ƨ/1F%#< c1B#D<1B#D<1B#D<1B#D<1BóP$'+bcTJFύU1*1v 07Fxc1Fxc1Fxc1FxcW Ů]-Ol%ZŔi Q+f3.D[,6eǗr\ 0}o:5D/y)-mBn#;F>y~]$OꋔP,jgl\'c 4в4%u(?ygF?A7kow>`c{a}쎇^7|*, N1T@ӡg?<~\7z=x:_TTёD"x.};׍t:t*44>5ln CIkYT.7z[F$17^ 3(Ki H<-sV2)i;qbX/@p{*hI#E<'o$;v~5||<Gt~э :/%_}):2Qf]Hv,Ɂv9=k{QlDϯ<͍^3c mmst-th0$}- S^#m,M,6>Zio:fgge97d{kنCbX鎬gɁ? MINQX $-7#F*Jw݊O7z{7Џ۴,ZM*{`ҽ@,ؽ]. T.h:1Fxc1Fx!.jqU41*%KE`QCo0c0c0c0c,.TJxm;199Y1ƨdl6l{A 66cTb >)|1ƨ=s"!F5*ʛ@wGc1FxcƨWf6+h   ;Eg[zB tWn/ Zц'\.W蝐k Yhy=p$ѱ-U(*twn*ˑ%Fc, Ãh4:;ke-oϷߧ( `OpD}E-w3rm[6wʣH5Mѽo@KmͿmp_frr2*/K g,{[~olu΢#GNsY5ZyeTn֏uҽX fKY}cTga;+J* O򔜿x|<?q-h9#GG[nHG;aѬhJb-Uв6Y}J&''W-P6GGc#eF.A|ORTǥNl"g#: j~˨, vҹcć( ߽?\2(FoBfBokN^4ikokko}[F` xN5B#D6H\I4~%:0Lb<1vaLu+gM\I(b.WDoj7u'VYT/1CQ k@쬕_adՠN RTf:ckνjƘCg( RS)78;UUwn*JrFs9iMUsFL5cޑ+LNNBGT[ ^?V &֋>n;V4f@FiZm5͝Lg)@x59ik=wі@BZ^=o'z> YygWњb&y>\}cTga;+J&O򔜿8g^8ޞ^醤h )|*Zk蝐:틏5gn'M潾垻w%o$! )JB?Z_kmx(ӊ4%|b'ce:_̽62yWZ399g.%kh4. i GecA=KRE i 7bSW?:΀yٻe>PLdֳe\.WTtk #g";:ޕk" (Ưĥt1-q-ipnwbJ!|: ʌ"lz.&o$+!&,3)X'EQƕl!57>ۘ,qrdN뉞`aѼFj%Nl?.%#0~q,01>IpPG5a1n]ku{Y`R8qUW '\0|fطy(E$$Zm]O 2hcccJ?tI`{{ PÃDNeXߢĎFBuU*uNg2iJJ|8ʱŸY_:֊eXhU5FW׳z=4Euuwv8:[\ y1[B~bXkwB|-2X/6qrd:֊]ֶܮ(ӊ4%Gw:wz{7f1VnEU@ b8|zص ۷iHѕpHӵ{H&4xzYp?_ޘ(3ʮv kM&Q,;ÎGP~ZC6,`O0bҽB-DFf=A<!a"!a"]ng2#T^wwrNj"n$鮪,,sxQyJO-#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<~/\h#D<1B#D<1B#D<1B#D<1B#D<1B#D<1B#D<1BM6[龣#D<1,.J!a"!a"!a"!a"!a"!a"!a"xi.Z0c0c0c0c0c0c0c0c0c0c0c0c0c0c0ϲj-=G,'ƣF+mм IRc0c0c0c0o9'clJwem;A⳰>um6ߢ+ӃlYC$> 2԰˺1z~5=H|g7.y,, ~}[gaA$> bg2=(ᳰTYj>|ֆ> +1B6?Ͽ%G7&Bv=&zV,ys$I^ƨ7xs{Q? ogyyq\TsDQ)Om )sQkbۼymEKгgN~P4M9M~ŕ5I[V8:`o[oj,#}-@s:ͶR? 7c?vr$˰rF,TYlYV5ؼy͛7XbFceZ, =nήV4GtPm?jZ~g|3x9?[͂γs@ݐhlSU؅ѻٶwgLnHFmͶ;hxAp pul޼̱7ozTwA!cە.h={z=AB|n:N/֋V,>]lDX <t:j[Z_jٗ罍^V%a)Yʌq߱?&'ԿK gu n޼nr78asJb*yZ6 &b2WEU:2ULz#5yTU-8W@5g_vGZ];]nL&~eXj8]'$j/J*7usR fߘcr/,UQͻ3lXՌraNt5*)y$τO65g滑=/iPo7[l5[U;H^@h\__,>cܶucJ` n(3w`wxlçmGڊfI7Σb.~9>b[IRZk[׳z=OJ9Vq)ʾ]P z5|wܻp!`MH5j"jJ,0̡ 5giy||Iߢ UEd绡guGjv] ä>O9q8uX?}(SŨӪՍ!h5_Hee5R0fLNN R3ZXs3|+ߢ-,IaL9-@4c{aT̓ eнlCȧ$_`Ęj!瑻h|ւ,Vnf`ݿ=Q-O'+0 q!De"|ւ,uSz0|j\mywJ`< o0c0c0c0cb8{Kw]E;Z D0Yߙg[ 3o3~၆J?핻UUNE>;;kYz)YvVq@l+¿fgg7lU0ks>;; F,07Fh%vm#9oo~!ɛy? B*IENDB`engauge-digitizer-5.2/usermanual/dlgsessions.html000066400000000000000000000017571222557406400224030ustar00rootroot00000000000000 Engauge Digitizer - Sessions Dialog

    Engauge Digitizer - Sessions Dialog


    The sessions dialog is used to select which settings are saved between sessions. The first checkbox enables or disables the saving of settings between sessions.

    When the saving of settings is enabled, the checkboxes underneath determine which settings are saved. These checkboxes correspond to the entries in the Settings menu.

            

    engauge-digitizer-5.2/usermanual/dlgsessions.png000066400000000000000000000321711222557406400222150ustar00rootroot00000000000000PNG  IHDRj2\g . pHYsHHFk>4+IDATxqhW hϐhkJ)/vyHB,o.ܷrde][ {c%F.-YڵRZ.͍T.2\ 5 8XG4I,3gΜߙ9۰ihhA*Gpz?\j}-TGb UXZ#K(%D(=s32,w A'8K-Cglo|۟GCCʿwx|ӓCr!?M'JA=t͏We)'I9r0z@ȊWSЈ9);MTIE[cӘ~4Ӽ5?8z_̈z>撅}_oF4F 3Oٻs{T &xhRy [}iLcZM:Z: a*h4> qLWȼCFH Ƥg h[HKRj4b4318q*T>1_!8~e.qGP^s2F>gWSCy_s )=oW( \i^GLcz P/wL}x`CC~05_(?eODV.9 wYz⃡ٿ@$I.9hJ9{BB4SKi}m&9&ϾK|IaZ`9MrMO^bi5W1-iLotN*'[[QAy|woR: t@?/ ߝ%KL[v ([iOIY)?gN% RvzΌ"P?r~aL 5o3]Lcz  [)"j#/* Q:jzrc9nIB-z}6+<=i0R>hwo| iy.p1ϸ ʄ.ϦLFAIY h8J1 dhvZrRQ]u24kI·o>qtތ jUx(5s^IsF:5ߋQ`jԶKޟ$a1w _2UZ*f dEi`0 d 'PPKP*l;`R 6c[0-߹_Q;d)f$?"otXg"@vO,, $Rޚs4_gE`4PeiNu2}:dH $͔5opM^O;((Y-Z)C:dqB^~u/@1-@*/S~GgQ~ nJӕj^Bܮrh68u=q8PF)+xZz}&#Fri6:L/*8(fʌ\[$~^>142ai )FLc.Ҧ_4{~ 'GP~՜Ճs dNԒǜ[!:ƟpT1ʿ 3jyEz#C(LAHM@RɐF)ǐ)LK?eAϐ`"uO1魕>j~.ɧ=>2dzؚ $t'a07"1MGfb̓69jܧ-xh=Q <y)ءZ ]46{ _Gnw86b41iQN 8u* |'|n uG|p!@\_NA((A| AT JP>Q  *A@D%(A| AT JP>Q  *A@D%(AR>v;ğS:_lۣh{AJF@jه(7떙x*J>zyEʼ?ώ@MPWte4EQ+gY6v+VQant8_c,&FR?KCCC^]nXvqW~Eg?U]C`0G>^H) 9PYoH< Z(aQu?SF71Ԑfi ~ XSezCNodmFy}%fz!pp@hKv~'O^ `8+9?/cpm6)Yގ٥稇eY1/)_ѻ_w/ p89l?䔻bm1/aE)v)vO|L6v9e4tnvq.E {0=ͬ(aQp:SlJZURRRT =V>T$MReXix]>֩LCCʊEP ķVqsta1vGSF1^}: zx t3˙}o%_v?3-\Ox<̲%Fru(y7IkF5scg%K7EQmŽXjjs3scQq8 ɻIm[XX9SBf~wاg{ /LGFDI@gzCN xҵm۬{[%Jt954÷*sڒ\RNvmPXXx-1 ю:BLx_FEŠɋ6h0H7Ҳ4W&==$yIJH˒dZwog[y؝Xz1;&s3yebݶc;;$ܘoaF(H)(zJ>$t/zO&LⱙfH1AG˼liH9i2wWy@@XH/M&Shmj6 m-Ytsߔ546%IE}^Xw[lVjd3g:H|xYkOZaI0붪L/gUwe IU})P0 KJwd~!ȵld2O"Y}`밋Tbg5L&d2¢PtFlTRfj6I—rK*)fmd/ -ZAwI/?%, dh0(7L({;JZU*|*zLdkp'ɓnBh<??)v`~7];,:N/]nP!i{fiv~DOO.\_rq_kb+aN}"O9;NtU^j1HںϺn yu/C+IR^]\RU{|O7;8;9[JZU.|buARvO7%jaJg^L6 LsE}^K'# P!Ւ,-KgZlvnjǣ>ƭSmu&R[,-ש uuR>#4Lm uGO-~Y! AM JP>Q  *A@D%(A| AT JP>Q  *|fy>E4#[̫?Z7y(0CcԤ=hh"ј|(RCW&r-8e]. }(~R騾 7eYe٢`{|c]:?f%/ntdSU_7n| WWBc7bt%G!p<;pdʹ〃x*Dyc{)O8Jz?d{qk?MOU%{q_a_ɿ*ڈ@rp.}Py| #oGNo3LCOf@ofmDw<-;>-bw萬~^dj6N@S.Ynڌ(t3--ܷk0O2Vq2xah4"RmǶr7`!-UE2褪b`07=Z{qfSWoI~ʴi=v_x4<ΰS^"Rmc=#e <.Ut?_jY&f뒺={t3f>)*PV88zO(~7/V(mp!`cKc6o gS )qYL-£LT|]Kt9:!Jbo*iqiBf)$uG}PzJ8爧0_o#R);.-;-ǏQA,Q]]ٯf];.w<g`׳D龷zOyafy׫Cm.yyrC|~u ɽb*FT:ο[Q  *A@D%(A| AT JP>Q  *E4#77_m1P'ԡ!ewn,R5`ٺ~ەZH@,cY7&:,e_BQrƯ Wk^:* BZp:-cGޞosړ>SW'E) s8aIv}Q_QϷF. ?fm×ZHyz88{K2v{x4|,[;7LZPhl>h-T %FBO-#j(ړҁ}ӲSC?˒y^0 [0N*Ed/\>?$k)5\?*.Z]T83Q ]W&!dˣL;Ñ"dOd*C̉;cU;kYZM&S[=BZ%(Dq$EQldj!:SsRo2$*ãᢝN~G6\/mmnO{Nd-n^[Tėf'˲;N8ъ` p.7AA| AT JP>Q  *A@D%(A| AT JP>Q  *A@D% t``|fЁ}[ā*3dec6!ưxi|[cHy'8eYn|~ul.uDǼ<ϳ,>^uQ*wObԢŋ"ǖ(t>AQ/o(#UV#v O_?m3L^*UiXxW*v!-CߨD_;v>Cl<taQp:Sl2u׺S눪Y&#ϛȝ|/i'{)Ox(V[ň,;qens nxvq)g!)l6*?TηVlJy>J&޾C*Mé81SS6sX,qȁ렫T Q=G=g-ɯ0L L^L9^t/0Dr꣩ȵ!AWp,W2Ѥ|@:`7z-Ǿn/Ŝ=mV`%n~*Ml{mVKh:AUG;]7eʐN5~#NDӗ?*XZ-$Mb,g v'^LN@L^tH/Lsʤ簇Sf?ځ]#1O лR6F\.6F6̢I"ɔ#T_ҁBZ?g0??_XF&2 J69LĩF |3e,ɔNzNj"%IdijVhO>@һ%I= [䱞={t3f>)ZtaI0DRy|mV/HNDZW!4.gILPm ’@Xz)m2q24[Z-D>6xP;v!-DE,(NЅYD>#*ԽYAW:E*/m8ƅRQ3KnC&NۮWq[l —î.طo  zђ|p`7sukeYItu~7zu=o34]n m;tMp`o׉Ȩ/tuw yxvv}ݱkGՒt3v_=/qX'FN}vqNӱu8;HAXYY! Nj*.J"n@+"Z 4qڡ)DKA AT JP>Q  *A@D%(A| AT JP>Q  *A@D%(AhЁ}s"@WshlFeY6v+0JQΔ{1Pd]'ȵnXvqnme5ĺDǼ<ϳ,>^uQ*w3^ ~ZǺckP盝79ӑik^JOպHE{_wS_~giXxLu3͊*v!-\8w56At38 ,9-,hh>tn'Zw*wGA#'P{vO;LKy<$Xծ-0ͬ|bv &NUz?d{qdxz]wў|@5D\\U PvZKrfz^ L$Nlqȁ`$0@DQYK/P* دu>J'cnh*Lzzu5yu(JnФ|@l <+ZGGZz?.F!k0yr%Ѥr5~#NDS0)_LNv5/`vv(f4EIiiY~$I129uA{Q8*w`(]''N\'uDRߧ^vlQCƗgYpI- C7dcFȄ/8-k}d&~-3g܇L죫슔җ,mVjd3g:H| {y5/kN_ɇШF*%iE?u 5K&$WԽTޛ_ܤX<6 wtu:'Yh>e1 3Q(j\d)芖¢@  Ff[E^Hyr JbfIjL\%Q1 u <6Ldi!|dk(*p.ѕ hK>T;gu:;vpxyq@]kh.IR^]\ȥ jUDu|<<;;|>ص#~jɵL{w {(o8n̥Kz~7zu=o34]n88 }}XYY! Nj*Ё}s,;#+D"0 hfn H؂M-f>?U --^n 4Wu(&[E3gm\G8@D%(A| AT JP>Q  *A@D%(A| AT J4}t``|fЁ}[l;`|CNQq˲.X{ՊLRDkp: 5ExQ_w:7ꅴ0ejoXxTWroYu?;<^_a"ڛ}TN,F=&ߙII8_q6@򻤧cFoDeى+vh8v#<^nGgeǼi@+zoqo£anGLpף_؉n:a۹]lZHyz]_. m=GEBZj>dc71@,eEj9H FR)fPޫ}A< 3,VLZ <6L|+okMABrua[RfāCsW' T)=gzo>zG u '*e>;w?MKЫ}k"7;rny;4Tj%LNQ4rῄ{(::QY-GM&VVVk6ZJw`d3L14౳aeYv,+,-KgZvl Y8-Voj1E(nKxl Ok݊MT[Q  *A@D%(A| AT J4}t`GzC3 u/[́eحZz#H4&T71-A,#xNc6yX4/:N7*;IgȖ?XZ-$7-Kn޶H7ēx 6huUA6ɇ گ Y(.CkH{TߨӄqfCvxP5ԵA6T)hlz^T/nt,liCj!Ŵ4_sZ';BZ,e"D )ͺj2z҂([ Q-q`/tK8}9N~Z_Uͻ^uj;t9m;n6NC`;A֧VVVk6ZJ s`GD;CD+f>PAA| AT JP>Q  *A@D%(A| AT JP>Q  *A@D%(A| AT JP>Q  *Pek}a~~M@uh4448qQ8oɯls?׺,R\\>J&޾^sg>IMiPu3v3Lrh׎%L\ZYZ+’tq eG,&EjQfZZBtz d $yIJd݈1۶Ї ͭ-"yX $)|/t1~Z7Y{ ҂//3qY,/*ʃOlQ###W7܍(H]ilZk^93qt`k%R:һj?>1= Rd~ wuw={t3f>)U BiY\0͌, yCο5jK}n`00qeB\e1|%<08p$e2rn֠M߸pBBJ\S h8:%BZ,e"D Qĺj2z҂(dbg5L&d2m `ul 뾡<9aޢbF1<NKWNWw``pYùcǙ'~7zu=o34]n:}x< 9žgg$sb|B\pt9j}23 nc-x!88|) mc-11~a蝡wHZޟ.v9ʹ0ۃnC?S{u5??Oe>Ss| ֩e a,^DsP>QRQ`Gacu( V6, *>Q  *A@D%(A| AT JP>QIS>ofҵ AF|v}4aee;_[ _pֺ%"+Eڽ+_n]œ A_2q:\+BNM+++@/DD>DTvhȩ AErb?1SIENDB`engauge-digitizer-5.2/usermanual/fixingaxispoints.html000066400000000000000000000030151222557406400234410ustar00rootroot00000000000000 Engauge Digitizer - Fixing The Axis Points

    Engauge Digitizer - Fixing The Axis Points


    If you are seeing unexpected values for the coordinates produced by Engauge Digitizer, then there probably is a problem with the axis points. Axis point problems include:

    • An axis point was placed at the wrong location on the graph
    • The X or Y coordinate of an axis point was entered incorrectly
    • In a polar plot, the origin has a nonzero radius (so the default value of zero in the Coordinates Dialog does not apply)

    The trick for identifying the problem is to turn on Grid Display (in the View menu). Once the grid lines are displayed on top of the original, just read the coordinates along a few grid lines in the Status Bar, and the problem should become apparent, so you can fix it. For example, in the following picture the Y coordinate of the axis point on the right was typed incorrectly:

    Picture of slanted grid lines

    This trick is also helpful if your axis points are fine, but the problem lies in the original image.

    engauge-digitizer-5.2/usermanual/fixingaxispoints.png000066400000000000000000002124661222557406400232750ustar00rootroot00000000000000PNG  IHDRT1 6 pHYs  d_IDATx]w|TE>3l' HE6峿b^_ذAĂNBBHn6,Kv7$EtysΞ9s ""՗ ! xK|@`1#1Fq> 3JVa!9^ nxШ A\TXb@ N"5@h2pÀI5rpl H"xP!:o' 6'5.%0@R5j8c1BenvHu(;b|TP6G eU,f1ca 1!"0'v{Anˆc8c1 -XVź.IrsF,"X#1EFqŲwL#??}_{5Ix1 KÜ f0,0a )࠹?5p%p F|!\6#lR_0JmXB(@8ijTjPd |浹'QjB "uPa@B0 Af%Q+[X"#@ZYxDI'dĤ˭,h+WquB-?, ^)(J'Y'YYDEXR!V b/Pcb5Gury  Wp $ 2jKNFőh}?2N% ZE]Ǐ1eZ~Yb@I%26hjk巪㷈NFɲ\Wsa8 ~Ebd ^h:I.fVq~Td|"cZðějh]OnmAAD:bIa1$Ē|u|1 @Y-Hd6"cJ1H˪8DuB?ZryYD #5V`gxYFtT 0+FjVͳAŨ$"q#  ( aj-1FAԬŬ(a`8@ B$s^yx-((ЮCan!HN~IT.!bVS[GjG,@ѩh55Qn7`2Y YKt8}L~W֩/<@KIM?;XT**VQR|鼪Ͽˮo Qӱ#[xer`1iTFTZ!Z5Q3V0m资Pi_ IQg>GeՠhS?): l+&IZ>!|;d$dwNC*TZU/%9@&jY|cF8'DTZ5ѨQqx!Ƅ(? +QdX=ՠ*PqBL~QZWFMtZT\ *NAy%Rl4U"EFRBs^@iXEV"3 C0a`#Lby+˖/:p(gg\u x"p 䕖~߫CS &>k$^\PP``fǾ_\ҳ{'ܺU<Ϩʪ^z볽3#/^A4urɓ]Nd,K |!FOC x!D!0B bc4O>ү".Ҏژs"bޢ#*踶 !DJ˝n>qpľF9VtD=YWyc+Dѡ?B:Du>o&Z 6F~MjTvmL=zwO*(|]:mԀޭ:7ws D3጗()D6l3;-iԊ -gV"I1f=nc+7sz ( !)\-,( 4j'ʖkeQ QM.dBĒ V5'.b5jd4?wJO">16JXV4ӈ%J:\\LjǚWPjQeR JM=0K+9-8kJ,(Zt%bc:`CK+,(?DIXF,t|IB1Q$N7:3RaAQʪ((pGG$6Ơ _.,e|6E.,W0-XTi\meZPgE Ơ(+(r @kA/,c0F"ŚCNjZ~QQ}bw2۔[84*1@Q,Vp=ɘ H caԞb20`:te;x>pqHQȳ//fPVf1g{dm)/|tj) WeO,|/tzU,ƌ' 2"ʢ|u]6_qwͷ$'j ; JJ&z61ZBcXNc'likۮc-"Ѩ NJrPi( l J\4]9J9AS8*@|O5 @V /jUPiLB$WTѤ|>5N72]_͉ZXb2`Nl-_wk |(BpdU5jPu|I1IZQ/cj@,TTψ:5Xj@|TUgD5 ^1>/8\W@hb˰ ( 0 V=! @DrYQ$v!Bb0 :)Wye9~|ac'%Ű 'Z)e==c9H^()ً 1:u16^nu-[hپOA:\~Y鋯WӢ$o^23n~ՕDgĴTsIhQ[J퓺gdoNP3[}}cŒ;NIYهd\NUe;X55ȕMvVxuAcXmUi>y;Wtf2 dڷA}ZuMYKgoKc;HϼBjd`ѱMԄGH=U|$ -+KrAJ+ r$ H*J9)t YL"d'ϫ>PWQny5[wlǯ$,g0݄qZ'qck׺4ը-s (-CL:fN:O]lwut2$O+SFowāb:j"LgBm-)9uYCŘUy|*LxݔIR;DmޱkPЁIN:0uJϜ>3ΤwU% '% ^n jA*XЫ BYYGHlVvAX$X,F ,&(>njł"H0h xPc!7OJ`,Zw т.8Z1"9w:S0Y`,tBE!>FQ1oI1\_y=zJ7:>A>Ϭl>c\\K"BA˶wȡӟ,EɣH~q# Y8r{(2_seU( !@eԤgnܸQqO[,^|%xڲ|MڵGm@&H$W^ET _xo֬xAXsjtFVVfNLv{,bZu8Yr{ @ `X0d#BHJJt.wjEұuDZc?j]._w2'(Z]aTACCxb PX ,-b! q&(Q @8b PP,jD667)F(X+ > ʪAdl.ka1A(&x|P8?)Kf|`uN<%qu2(&=$:@' @lT(=XUZsdnDAPT+$3V@p@ 4jШ,~bNDiA|h5P\,ɡ6'8`ԂB*hu3Je6u ZbXvRx I<AнKHc`0ð Yұ aax5Dz qȲ,aM#Yc˨?Ћ$)R/<5WU@=qGVHA2Rx"@H$-,0F!ctrB;`jH2v_EIs /onDCLG,A*y\FcPqlcW+(SksTKp0Z"@de@k"x\ѐs* oNefd9, >~}Z_7k"0`T&GyccZaYXE!1RT<>$v KWA %0f fAEeJ>/L @~PZ6<`2c(j(| Rx<`6'tP^j5uk@:~Tu|5e||@/**HeWD8@ 堡Rp-_d \n2!5TZAd \n0PW,)*@u h堤 T*0 85T=.ph3PmISx=tAUUтG9B:*Gͻ}񏃁1/=8rxoYQXX:FHNc8Fi^Y2,+_>Z#b.ZB L>E@wE&2YqcA"2t:c TV8DB D}67xPOMZ 9_;wdejVuuAK=.8bH6ժ9.PVV,qHP$BQ :Ծ8ޭ}wYTT]nRIt+Z$K F^U;#c?G'ѓGw-GZͻ5f/#A&<; &_szMcnn%_Ef^Ea1U , !@x,P. 5 (Hd(vVTvkP"yodIՎA)-q$&D|6QH_RꞽTT9J+mqznQQfj]La#YO=|U.o*7Ը Pq?f#.'3mNo^A/2i@&Y/ Ũ HSA0,vH7x<nN00[ojO}ar Tu|NtF**8k큸(JpI +hxP _n jTZ4`u=vC JLFqf{k 6;Di'`҇!J, Pͷ938rCdv0y4*"C.z!T׎O) < 5T@ \omH\.APQz5p,[QmO0)-e'Qi}1b00Eq*E bxts9" 1]gBW#eK1߭6x!/Ի[ޘ3\ 0AXPُ4">ޘ_ͰrLyϘ DB˔V~QC{g(|Z+,8},#q@A{$ O5ǂeHJ $BU xEnkAYeA:7_AWsA0 5X ʐTǏjxmv7h5@0T[3av`2vh5*+HoQhv&#x@ 5!.v>n2j@ TYai$)?>lφǚ n/D@ X@u| \^ҁ *O@oxXB 6 *ǘ :dCXa(s[o1Cmm1(E|LpM#9R;  >7j @1Vfp1#κxs 3O<w]߾m2p2"E{޷g_ii)"gx< 0E Xr G0a{nw*kd9펢Vɉ+s=o1ǥE>EU%窶{4xY"DڶIW$wYEn_ŗ:hv)樶Z@xVk)FC ˲PUi2hܶ%ZkIaƘnNG]Ue2;\z}",'"c0ǥ.g]Ed2 -2Yw B<! :CRUN3EwZ<*1B5ǤTUfպ1VcmISIR==AmK?t$ܒ?-DFp*窩5*euڋXAqdng|.WY"bMMnTT+7TV DuXDً12j[jm5W<{tK y_6f[1Yo%IV m(sQܚs>ufwQŮ}U((Uq<bI%b15,JȤWnlS,6F͂$K+9$ۜXs\]ÆG6EWd.lN7F%]XQ^p^CTAT^"wcA@Q:E"bVUVVBt%;' NQ4)"QvyW@Q:9+,,P{}gZr1c*|y|8JK)5NFoK+k5Bd=^(8 :ªX1%|LF# ucJz e $U0F+;QϏO.]j68cYa%,`@!  0o?\]URj**WbL0`1 RX}嗟zR(3*d@ e+cxӧOmXeXn3!P!iiU1.mzk_xn_0#cZ"hIO)>O,ӷA};8BV8t:T8mMD5hbhЫ[O PVM L$srW@4Ĵ0ƴ liSOA(Ƞ9xuӻG2 Cz^I2f]VFH 235:F ::LI:*I3Pb1` `NDs m3?ث@!b۵KbLe*#Ր>nнM3?prs ?GqQ9&:8^ z8Q0 eVPe*J, aA\^> *B^%\ z=X]f# X *J `C^9㳂Fe5|ePrPR *AA%0|QF7e^U꠰ 0#hP^zpx|ZM(kG^󋫀kuPa,QzQ-_k#huPi$ F=(l:~a5|`Pn W_  FT#)f#D@hx^蠸 D18%2(H3 `C Q@d +& ojw#$)XB2F#$)0c޿֤8 P)b` "q- `i٤ [Z<~@! IAȩ8&XVFQ0ņ:`x˝2 8 4b# )d?!ڷiUV^0,Y%.BFTdP"ʠ780[D T UFbA"E_`Nd4,dtZe,H V"ĚFyՠQ`jAX(PkEP^ jh؆|,TX0Pc1Qg5Z~E5*7@ :ʷ-W7ݵ|#(-V 3|0A:5 w=,(_lNzP f-؝A WTWǗe6#OZ50TXg1|\0hS T-a`(Y'#Q1*Q u{10 ðLū]eEY2sˀXYX.pOGpgA|$FkkOZ1QYYYbbәݨAdĤDI8C)2( Dj >hEE0|e9nZA=@j]TQ> ԸIb# ,Y矫ڰ~(,("IBHY0DALY>4"!cz 9">cLEQqBt[SôpmRW,_a‚ , VIթ=R[&l|] #f^vډbqaa ;H՟~뭷Zl(J!Vol2GD&MjI5k,˴*3#Fpw}עU }3f>}:>6^ӄz ?ne˖/ֵۑcGйsfh-EraÇ]ve۶m{kF;vl֭~~hӛ0'2r` 91onѲEpmZRUNj\[nm޳CEE/~+ZnmZ?쳾WQ߷.?s ?O>)R41޵kW^nĉUj/4MF | Ns⅏=X\\\ĤiIgҟ^xy嗻tRZz={,X 20 B'MJ )ŬܺŁ!KӺ2%%UeU{v)+)1矻w~]w͜9s̙]Rm61)8y ì_~!iӧۗf8Nū8c1ԱcG_y*4?|CNNk?[ݶuN;L&1˲<<ϲ,˲L1S/ 뮿[x5?wܟ1#}pT*}~G괺N;Ʋ,Kij6ƘcVN'LLH;']7)91q=ofYVZcUT>lIi`LMMOsYt;O?1)]ӗ-[qƍ{vW:+/ܜĸ]v9v䣏?ϏG͘>c!fYkhݪV:x(?C[-9!G^f۟-vOLcu\+/DfXc<~E~C ٱkW363#sn?]i->;u|={DEEKo٢7ڶiۮmniӻԼa#{uo͙;c~/GGG/_aIgfL1c{܄qwLc{ ʋ*2e,Y$%%F.C*^%7vmKiYiEEZNJN3,sЁ_|y ,tys>{8x`Abbp8Gzp:Ƅ[:ռg&33uvn;x[o9GtNj(yy3ϘtݤOϞ8qbltĻ0j믗e!oرcȐ!!+rĉ|abbb3n.p Vgač !KL,ZRRZ7}/I = b 4DdԮ6eOQ;~u,::}|1w?ʊ̰ eewyŕUCUƭ kSBiqiUyU%Qe:S|]u7nj-*(il˗-tn;I n3r_-9"@H$IGmT!$8YRi~5F&2hs8={ٳO>W^x+^ٶm[EV:F'4 ]g Qt#@z+..oy1!M6,.^8KJBbB}~gn#OjOH^qW85'ɒy}ބ)k_c6 ?nڸotL.xZ3_-3zHhp˿\e~A~UUUYIYy4'Nf)s}گnټ(JbBbFfj}Eק8tPz:3Z1jT,n6pŕWin+LlνB՜8qb׾].xwݺubʥ%%%UUUeEe,ϗp oZ(DQVZuO{7,]vZŅ;@hقp-L1MݺunFI~iNu `\[ݻv+r+5m:vh_g_NvB玝Nĸf$t$8*9nXab)-.Yl*y2|@:DfP% @+Y |xҥ SwL@t2 w. 86hP$_os:tةCN- fԣGE-eVk߾}C6ݢEg!];w8nㆍǎh5u`969X/**:TۧO.;v9O>)S4MϞ=:Ԧm}ik5XslzzzU*!rvҥuR>|xݥi]!\{MLt tI3gQ0X쬌fݫc)Rx7 -uƲl>}9Ҫu+JթS*Q*ܟy2sذa;t6 |aa:vR<_Y]yȱ}9=x੷OeW^gM'2N̦:겲۷k豣mڶaW^4,==9KeȐ!yy"'$%L=~^]^wKxȦ`Ơ7hɓ',x\9C$aÆ9NٜBwf{iii]ӺjjΝ'2펡j4Yo$e}/!:0 fsztJEmڶݣwJǔ޵KJnݺɲpBۥj#Z6bR/uPMEEE=zѣF9bĈcǏjl&Lض}[Iiɘ1cƎ;fWѣG^~-mfy̘1&駟***ʧ(/,,,(( 33Sr9 w{)++8?6}!dŧ+{t!܈e #L].㋪[$%уԯz4j駟A]?Dkロ%#5\sC]z`!G~aӦMDcƌpZJ8o hp̙3S;T_|`08\[E%%sͽnuǎ 8g[-]ѣ׍k&^aCSk5I-*+_x1|TpS~z,z|qQh(--} T@wy^[+VE[޾#4fo#!_~y>}=Zll,mhRtB"[ę3gv-}xF1113f̨ +Fc7|F +%ax"fBȕW^y7ZںeYWG #iC-6=: Unbk &|_Gsnᶬ\n 삍lGSMBH ,^x9 R$ .ԯtؿ`.y|tΧAE6?R?l!Y& 8 "e?2%%%O?tc# |>w)DiY ¥wuB__Y&]vOx8"X()))k0EQ<}7u:qt.rY tIY A[a+MQb|oaEQ8oh@z &,Ydq[? j:::/>xD]GzVt~mhBEQz9\.N$uáU?3UfѣF[-'2N7ؿPT111^Cq^~K/T]UpK ?,XQ>mjj^sOBv=~׼K/醛 {۳4^v ADQ4L. ;7#<4~~}wWڱ!nK;rȐCJJOe8w.doBōEC? @ ZO=T׮]/f &&Fф+BzA-H =ZQqqiʢVSRRBi6 AZ,ˠ %/c\VVGNm gaj}>.LHd49.5S٫\m5kavmƜՋ*Ip~BnA 8\&wU48k%K /(#A_|'lsgi6Q~8,-hUB|>By׫V9RTT4f'f3AZݸ-b9ɓO>zy煠C3(ddW_֛sKt\s7+g+Oˍ#ؤҭyYz qd("}m[ǿǤ*WLd0BGM6UPoҥj]l_|ŞGSQY/=ܡ}30ƛ]@.N0.|}&x[b7oi#pիWOY-/A|>FC'9Fva(/նHL|wo6= Z\e1&vO<[#۟e{fރSy^:n{Dq N/ @6'w*zW|>9ƬU\p8xw!^Q"+ QX%$JcQ1,ұ(Ɋ,I`X r쓉H9If=$#h$b%܎vmDH@t97^4D 3 &OT*=WynŊ׬%X-^1wؤ$]T*IAPՂ {jUuiS.kh(STjpVc|aFk6ΧŠ.w;ee,^TSI T"^wKސdq?GSo ~ 6ΞK%, BC,;`0!,E9+bYYY-, d *!J8NIVO1$3r<ǻ.ϳ ]ZVJvmy8⼖T*V=~84{iUU]Wicrێ>gq;ј>A2 s-73nij˗W^yism.-7^{MV~UBH\lܕcl!G dee])?0;vxᇧL5)AxnB1?~G20InذsP3~a=!\#ScEV$@P#l\T"S Ip,f=AghʱnQ(a %YJLJٽ錘9&o:1ƣƌ~p\eHrzE&+|n=G>s7"+Pvl: :#&ߎ5.[I7̙7BوWȲܥ˝/_?ldr=U,q2LN*+-;gFt$im(N3d!fdBP% 33N̜9;|GDQnK?]1ԢKh=e1nh1 à P<=il##{0(  ,"nPS ]k,˪4*%)" :Z:E$:NDpr&:zJZlpl^9&!/v壏?0~ ;ͷo}}9^/T_yI7iG# 2syw o`8^B qNNk4B%KNooVje_r`\`p:.motF KSq:/pF(cy$%yʴ[2喧~JT~|eE7% }#׹PEAݻ t8`O TT$1 W=Jkr[5 f118`"@МS BN&.4͜5*6&v挙)))^\v`an[XLF0R5h{ͷLNnF5N_5_,8a?#~aÇUTTL6K$ioA-[6bĈ/@XRᐣza#-YĠ7sz~PҮ];J0b17Z芊Yf?}'oe!w?d%VD>iA7n%oh' [X cP5 CoBePg`QEVYY5dD6$n 3S.syMѪZyx=$.V0Qo~Ğ˗H`1Kfx3B=B0ʻI_/vNZT^myg}.e_(رc[ouժU .߿V܏?>Ri}c8lN;-^xn[žT}zԩ=@֨8`2a5`{.B!1S<,7Z®o@b@/P $oS( +Ĕm tњfROQQهOvX LߔCH !,guЃmכfO?gAlh=b.Ig@hz:mm90HkT bdT*++ZBțo 8q!LFcTyW<^ 5TęQ,y[L._h"D>E!i,8p ===Va(ʸq|  80###6V R4͓ӻk]?[oCߤT1Ϸ2xMsr,}Oپ$$ )JMHFo ,?~ZFۊeXa=cjԩs~5 8^#~ 3tܙRNerzt/1!"{߃vȒeT\l}/6svN+((Sݷ*.)~l6!CCHKJиTWFP IVu\jz֬YǍgϞc)))믿>x!dw1~m{,k۶mmڴiѢE s߯暐]_~!~;zhZhJu]j<8+ /KQon UZZzԩÇnݺ~L [/?/Ь8pmw޲,WVVs=W]}U\|TE40$_|1dOhܹ?C8%x hͳf Yꫯ~WME[8ݻww}[QQQ0dȐ\[.^X}ӧO>}:mX3f5mڴ#G,ڵk3yŊnȢoMj(BH~~_諯zWC͚5kMտJ~;wn GiZ$t>]iBB_6‚ӑc=4E1h_p7+?+lFQ7[V :=33]\v]wp8:wf͚ѐ!C 2o޼zH8uTc&5neIIJlj,h{4†uSe5pc;gC+m|M-0i5BW^z&5K+V;̐Zw1]ve7x#|ر޽{o۶^7++:! ?Զƭ-Ee +jO/ݻw7vQLtz+**ϟիWo߾μnV꓁"8O0 sIe;tИAnĤFpbŊ jժ#F4fo֭/_>c SO=p8@Ri#<0LIIɬYYpa||9gR1!:-jF#4EXmvow\ݺuu}z׮]OWRRRhߢEBvŕ+W&uBHnnnȮhnUyhz /al|M,㲳 0Leрnj]n]HY999vbY6XVvv64SNUTYӧR WDcCbڵ/rȢٳgo!FrRj3&]֭{C͛7履~j^wذa!l㏇,z֬Yӌ gϞx ]wqNj/H;Ր!C,Kcdu-G6D5cƌG6BB^{gᩧZxŋ.]:mڴ>(]<={PI&,Zfk߲eK:5cUUCO Wѣm6[d\#F,fϞN5\SVV$Ys·z(]7|s`^ DWPPPwHJo'Q r< , Wz" :ܣc%/MEf7BB3<C]bl>9:]III~Ϝ0 |G;wye w5ȪwEդTDtI@agR#믿ii||(}:t@@$$$L:֭[i"z8 =BS‡K41M@$@'$-[6m4HKK;vV9$e˖~'l=\wuZSl?3_8  ͫ}%ȰF:DcqFz*e/=b|4Z~1cy.sDpP믿ܩ3ByK݌>OP111 X+>/--뮻غ]|r:w9rbGVJŋ釣GFt]l#h0?C:)cY/,Ɋ@}j7)۵knzoW_}.]Y{%IoM'N'=bAX(²n'h4ݮVBN`0x^BZ1DLf5?MMM=qgAe9hk]v-aƥtMGzE*I$v8~3j0Gyu8Cf:"/=2d9vw+srr篿z޼yNOҥٳ#qjC?x^:Czj:j0jFLj^z̙0lذ˗\l.1Ќ0O>Je=zӯegR/ڡ￉W՟~Unwzz?`4+l{iPp3R'NKRgyr B3°,t:/k:2Ey<_'l2s&֯_ߥKZɿj?0ѝ;wE:CXm6C6a?XVK9g =.uҮ]}A!VUUrssSSSeY^y-=_@i_Uo[,s)Zd#;&NHf!7O2ԩSMWo@+W.X dvcǦNzԩjÆ -ZxqFFlذ_ #{7}ZVbX,ju!xߌ"xJyV؀\ 瞣~#5|e5/4y^׋Z|yaa!07xc`iqݻI?OLr-~_7\}CyyyII =J6##cܹ+8pA0v5 *J? Ku*smĤFAx'z-СCLL^JEp$$$Гsssm6ۼyKح[ po. ĥFg駟tʔ)>E.F4$y3;w fJէOyjӦM#GOpq@Q!3<3|:u~xС@뮻:I>cP_-]|4i5\@ʻ("&5ߙ{_oyjI{#O?>Çi~M7jՊvjy/C\O\? "P@zL>?Om$a^z]ve={z>H۶m[v>#G䔗9r\zYEQSa8~Uzƥ;2J,S_yWݺuᄂzCԫk4i… vڳg3"6td0d*˲Jt^`:cƌԩS]ttĉSNm߾}Ϟ=#G}ӦMPqo{ಚѼ Uò‰k5! ͫ!ݣ>}^o3c +O?۷ٳبt0TKcƌ>;3ǣ!9}4cNNf N۾cǎ}-_ޤÇϜ9SV߿, !?}充iWJR,G 1.)))((IJ ?RV~~JO="R y®]|AFxY+f Emhҷؒ<ŸIm> !;w>6l'E=͛z)A:@ݠ_~˻͜$I m~-c|>,)Sڴi#o߾}!}֯_{vmڵ ~e4ťҟt4[ۯ_g}_`믿>''EqΜ9ݺuiѢ%:uJe:@$''^zzZq8;|WIIIUUUHY-Z' Zm ^h YTSSsԩZnݮ]`Yv}ҤI7޸z}HYw-򱱱;vlsN Y1'+>>{!Z5yСC555!+LHHHKKѣGp!+ ɓ'1!e%%%ՀUUU! v{HYիWz r:beee^^^8Y={ r%, r:tؾ}[ť^~7o޿EEŐ!Cj۷o7|0h3fG} cݻw}wqGCKȂ ,!J5k֬ٳg?c$͞=sΏ<( ٳlѢE6w^۝]7 r-^RGnn… ;tPNN'|< ٵkWiiiQQQaHEEŢEQ^ 'N=z4[fffZ,!˲ׯ߸q#$%%<E))) Vc|ԩCˢmraHbY<!TPPpرG;gn:XVyyyH Pa[nJUox˲C4́<%%%^ !TYYy`ٽ{weed ~e!##݃wԩ^Y^^… z}_)Ǐ'+;;{ɒ%!Gdɲ+HQ;Su/Ҋ+`޼yt*ܹsX^B$Icz"$I< B?=ğ| qST$\dg;egg]yg}>_d}?.$.R1ܹs_|rĉcuҢZjյkG}]Æ .9s@||b=:_~g Y4gΜ~!xd]}%%%M(J3houM7,: 3gPm6[YY媮r\eee>rB*ٳGVQ>~xș]vvvaacgvk֬y 4dȐ5ͮ]...Y0TVVl`qtѣ3bxȑ'!Sv=cQZZRVAA(GN*j߾}o4E=Y(:ΐ?^^^~ر񪪪#G\ rUQQNVEEѣGg!<ϻ\&5/UN39+//?~J t:ny:X|RTT򕕖fddGM4=***,KȮU\\,VH:eCvE*+dhX:T^^xY>p#dWs^c@i_ƥƘc$M{ER|<O [1Ʋ,ϟ?a?DU]]ݥK+}]D%r *7d`SHiU^^QႨhCqqq'N<~xQQeQsR ?~~|ĉe˖ \`ɢCԐATov  w:{hthSOә?tڻwoyy;BQkF{ԩWE1I=}'|2*,IBvEUpW/^2*,iUl2ʪ8?O<ĦMB >t`Xl… g͚5eʔ{i`?wܿrW_BO_uV‰+}ݐE|W_s熫9|E6m+'42$oۭVjX,P]];!6dUeYWgY8fyyyNNN:>M](8qB[ҥK_,:u:Fn:Z-BeيǏ}?9feeQbHǜJJJJ*++7xUV"4 KERVfffUUU8Xzg[ R։'B"'NРz^o8_jjVUUeffj`Yg|6-/5///\W vh4=***7srrRN'ލ*Q_jȮHelGVUU5^ f]vpNR\X_={JJJvlRR?oې G?ߤm޼ڵse//_ǩ=X_j=Y_j/R#&R3bܸq%Kx3fL>}ԩ}оwyv8pm"K ĿėvCOUU_Rߌ۷o߾}'L0y'Oұ6;9K/q[liժU#+R$+K ,RM"ReY4mJM: TbY$+++J!TZZZ]]M${[`)K$uPvvv/fEqfUWW6WėZO/H\*_Kmu>q(v֍NEQ|ꖥx:ٔIDAT3fLnn߁Ųu'Fzj9*KR!Kĥ7 zu裏ƌoHKK馛֮]TY$K=_j %]\$I!jhϐ?p7ֻ+php(j@C$z$ŪUa|OGne +/IR7pׅՌ@ò$I h,h{4†uSe5Pt]oof͚C;JKKpRȗ{8p@œ'O6{|OnFE̗<OԽ KYlYȥpdYO<@ެ+W̗ĥ^z&"a,Xp!=zM7DE$ E?~ x²,͚Jyyܹ4,M|"[ի]n_C :rϴ\.jԨQ!駟y晐E?Np\,ڼy3f̘E?+b4In:thȢ_ '몫***j,Ih۶m tnԩS!:vH΅]TRwjpQ#.iSaJ6_|~իWImܸo߾{vЁ~{<~QRS>?m7/Yֵ6_S:u'|r[K 'ػw7x @ϬVk>=._\jĤ^˜5k[o3ggH رc?-[}QX .=1 Ӣj? O (|IjOg̘;7O˲BCL>ow}7=tޛ>}@۶m NWVVRz꩐ɢQ_juuraNNΉ'e&+ҵk㼼<>ݺuBj󕗗?paÆAeffsv"I҂ 77&Ν;.Q%I*** քvEϷhѢ]qʕzI݃+v۽jժQez-ߌXOl|MC @l,qvvvHYnj[.\֮]X l/[o``.]]62ٳ-1[Ypˬ֭ :o޼~{c)wA뮻o^oCښ5kVvٳc)Ln5+W}III˗/_xŋGiFF̙3ɚ1cѣGCu֭rJnzxӤ"N4)dњ5k^{E?-[UUCO Wѣm6[d\#F,fϞN5\SVV$Ys·z(]7|snnnȢHrPEH`Qs EQT_aJ.Y/=eʢѬͫ/vmvۚ5k7?~|P6&< SԼnCMx> KϤ1nܸ_^}Մcǎ]l qqq3gΤA8v?~|۶mzyyybY6W' uܸq[nUTo}A^K,ԵG1eʔ%KgddL8`ԨQ@}ݺuZ = O>ٺu+B7ޠpکYYY3g\j?_jzz: yb%H\?!T*;=nl2XK5LR\KmӦMXќdŊN<RKm׮]Ԅpq@W'BbXV111Ph\jLLLT׌4.cǎRCvE@\jWF i\jrrrTá_%\jWFR"ťn:\\jHY4.5,ڪUpq-Zy凙w|</3Ooܰq"qnC޸e˖K4."\ѣGg̘ wӧϜ9:t7߼tŋ/Z(++Oĥ"K=SԼLT}\ƍQiiiǏSeQeq xbyʕk׮|u|b`ˊĥFロ'c޿ɓs"8H4|{'du]x?e˲:x#K ?)6m2Lܝ;w4ZjuVd:? 2i~7٭[7Cs|ZZ~?F%pk ==}ez(uEq|ݻޛ(k41+vQbhF؍bT{;8흀Yfv潝}n͛p\n@Xҥ `bbk.X"$/_ׇcǎ ,Z#H$gϞUV4}tΝ is Z~A_ڙ3g/^,<<<`=:Z㸲)c@@T] :Q-]y`ԯA?~|֬YnݺA~A뻺?3oׯ_1clԵkN6Y/TE T>b2*Z)k(F3UJOx޽ϧz@=rØg0TFRJhc ~z]v8dJ'N(8m1>KV_P!K:~*gWVצ.4L2-TSSKOOQtIg˓ö|̙3r[@,+**jŊϭ[>}ރ HmmmXX،30 x999cBCC?~U9Z(rH$9s&yRK*FGG+BQ4///;;X1xx֝;w<HI'%%Aa|{L&eV`` #æњ1cX,x$%%(/^HKK366<=5er{J@?aѐ\MaXpppdd΍7P;eggϛ7"f %B(*E>Ayz*""bܹB]^D"r\.ϧLۅ r8$$$P"ǃH)_W''҂Q ϟjK,!9°~qqqP}  EZG:t(TʱBD,R wirӦMQcٳgU0^ŋ*,,0a"@???2dƍ`ԩ*rذaBBB.\r%%%cv}.;gW&={_NH.553g>|GǎqVUUU(i[[[S>qPVUWW{9鹸888뽰l* 200pvvԩe}d@XXXYY0:::Rp8::::::8NIޞ `kkHի#F;wcǎ... CCC@vvvyy555;ud`@\l˕bAAAZZ2Z::::t;-DNYUQQZӏ *W: aԷJvM'wwHpO'ǪaJoyi5UjZZ@ (ի<] @Q4"""33׋0qx|l7@}պm6'i`XXXܾ}EA㋂;\<흑;{l{͛722U3P-Xu7l0ҥKQ (>x?>Oi.Pu8pG|>Vyxxl&Ҽ!i&ak׮1L}d2=ztK? 2ݻ]rXd)L՘ h f׮]MLL>?peZh*1i$x˖ؐygΜ)Ob/AKKKv jgA wuʔ)''SN(QFM2Zf-ehh8n8rL__,9|0zruuI&ƎK@y׺z*8rOi ӧO>}:,y1Oɡ 60 {uuu5͖+uڵHW HaaaJJ"{򕅇⤤ eee?~\SS&;;V\\\\\2ZiiiO T*U&IIIr0 [t)wȑ#Gr/JU0n`V^^6m&K$bc[vIM/BQz)Jsss ̞3l0#cn8rADBBO?D?~|Ϟ=A$%%3 X5gΜw?;v(5𣚢AUUU111|rCQQQr_oQvlٲORV 8Җ-[JJJ @֭#o߾9" ֯_e@Y^SSMYŋʪm۶]r,?~|JJJ}i9;;SGGGO>]YӧGGG׫Cl9s|Gr?w5PAdeeAWĕ+WmFYŋ_XX8dʪ;w_Jׯ^*++{EYe˖)5bĈzq~UFNKK#>feP/Ίm#G$$A[6o!&&&;K={Mlmm`ѣG_~gͶ:;;Dw%00pUu?zHE߽{'CAɓ' 2ƍdܸq=z8x 8NZ3 > FFFȔ\.7&&Fv_\\\^^,99W^_̝;QQQ(jkkGGGS.ƫ;***PMHHϗ `dgg8^_ZbX PҊx񢢢說*2%-8V0S!%->ϏQ̇bȐt@8L&ũ)߿WίXWNWeV+%%%D177W(ᔋqe***(Eˣd2՝Vmmmee2(VVVR"$@DFFm 6!1!ak׮6!n޼ /֬Yf;k+++c+W\re](߿2tvv֭[%GΝqɤ"ɓf͚QXX~,+33^WUUɪ]v)VNN 055D;DEEQ&.((ؽ{b]THL:{neIE JZ0](8>>ӔIт KL:R&x{L:MI:]TTRLbq9 !!A2@ P{RU # EtZ,SGR&VFK"P"tZQ!'NP&VF Laie⑐piʤu~TT 0o~@)Tȅӧ}āf͚2h #Gȵ"[nR lIaÆ ͹zj}iٳjիWsae6`/zMY؜ * 3HKKKWY>NNF^yBOdԩSe˓Ri=߼y3ܚB‰Jqfƌ˗]td^hJ4`xU0DvsjR= TG:T ZRՂR?5dJcYYYP(7]GZ7jtܙi-'}*fff- ŕ]zz:MOO%-5pݗ(GQ[[#04tOȅ?%-m۶U777W|/pOI .۵klobbllL<Ąro``looobokklojjJ)* {{{e ssse OjQ EQVVVŸ\[ZZ*[iӆr៘H|gωc'ӕkL_7 Olm+y-WUZZ:h OrO>O>#N:$&&&$$TTTԑz/z/ z/z_?8.(#ͨȈKfqWOO@T*%qoݺkX@6INNBCC1 7n|+;wڵk8lXH$ PEќ<"H"0FqǪчsh)z7?fTj}}}> ;wرc^PP@jOBE4h|Qh}*EQeUITBQEeԧ0,T!4A_dǏ5\)PMMϥb F;l{iqZPEl|N;V>CKMMMYUjISR=g*۞<|Pڭٳgvvv@ t"J$HC RTα¢KEHѢR)S?bUyy??CU>S|e˖W'k׮ׯ7`)YS=K0 `sLZnvm۶VAGyݿ EQ&nݺҢUEoO՝7=*=5O %?S*W!&ڵҥK.]ڽ{ 888޽[2RJzjO]o TCh~J|}sGcRQ cلVE@L` 㥥)dX(\\Tk׮O0zǣUPP@IK0^III$-(.ooo???KKaÆq!YaeiAم7DJZEEEʂT BE" )iSQ% 5cPK[BS-x y=ԩSN6T&ݾ}; ;;ӧ, zb8q0??O]_Z3ԺӢ~h...ϟ?ҥT*MOO<s| ^D)p>## zzz=β[(bd2ccc]\\ -cY@*} >|h㏵#G*xhrhR ׯ_jggEϜ9S-@,rv 5222##2f̘ E4_Æj7lذauVxVdggHHm֧R W\IJJ߿?xO~([~rhuRݻjffrʤJ6/U_*oU}$۷54}fu__j>rc:tСCwڕSN%b2Y/^hos9y$*cАX,6m#A֭[gbbB* ="hJk׮,YWa-&A*~;ǍIT [4@Tyׯxzz~V8pwttԩY/t"=emmHަ"J"##sss 8qCZ#-e?$)) Acǎ]x{{*\uVիW455o 1g2TY>}|L?44 J^R6ݧOfF+Af͂VTTBgo޼Y/ŋdsJ>|yZWЩze˖'Ovuu FDD(J V֧RQUb2ZQ& Lfqq1 n4x`uuu٪t؀*7,g0 c`_EƥՀU=Vi)#sd[߿I0 e> c|]ח'孾BT? ZTjL2Ó-TSSKOOQ0,--<99Y1FHHHDD1,H$SNqdFEE͜9Sd aaa3f̐s90,++(8 }իW?e#"Ji(]\\,w`kiiݹs^ILL󓒒ONyHիWr*h1L*Ecbb xf̘!%III*Nj/Ҍ)N2_ +m񊴂###---+,$Іo U&|>?##@jDDܹsLf r\.ϧRۅ r8$$$P"ǃH)_W2 ,,r RI@eJ%8S266`2nnn 񴵵|||^| '!zESSSNureXPPF\p@:t`aaQwZD]]",,L()V'k > 6V㸲V"kӧO#VTt/$OVYX8JUah:22̭[vA.wޭE={6԰Żљx|l7@< R6.'}Qih5jԨQw !2{lWWW:L[W/_oߴJ|2PSI79s %*0l6[n FTTԵk"##C矊*A SRR0ݻw,<<\,'%%]<)//OOO,e,++㚚ue555ٔJKK;}4eeR2QLJJTF+&&ɓ&&&$-A=zt-h5*A\vU*V29:t>|ˠA׊!C5J61mSS*Ι=g؈aFF r''' ?g ƌC aΜ9޽vQ$kP]*ۧL8cǎ˗/'ow|^33RٶVz%%~AK"***JYɓ7RVm޼Ç"9>}PVXj׮]7oެ/- uFYxbe&OQ_Z:u,={VgώWٸx)/^^""//y](VXT_KKKGAY͛7+p^Ba~(^|j*eF]XXX/ZAу<44tɒ%ZM81;;JNkQbA+ANN,''x[(((8Ig>u֍;ǰFUټy3t.> 66Y$_K.W[<ѣG*H$vvva` 4Cop( qg0ޜG⒝}YMMMŏFtuu-訸.\P\婫+n$999)IMMU8+**nܸH@MMmٲe e0 KNNUSSS\\CxZZ˗/Y,e&Qa$JZ<˗222|iӦ >}zРA'OT~UUU4Ç֭ڸq{˿P(իe˗/.]JY}k׮5`(CCC}}}0aBjjj}iXrQ'&&^fܹs溺 @?RV]vmUK.U`RQQӽ{-0`@yyyhUUU}UϞ=]aȑE(Y͛E)k5n8e &r6=Kmx0ʲe˶m&[uix Hhhszzz۷ooiiР*UB _7o$(2ܸ|XcFP%SD@R4-- 2҉\_tnR_re.>~֭"sΐT:wOvЪiI$wa#>rj0D"D" M<6C ~-KKqh}PUveG]UVVwݻ|ÇИ͛i[jj0ҶzѢm_.bK0L 233gΜ)N:TeR*HRSSe={cxˊEEEEII mKERamrh[*nKݳg|F n޼uVVfK%Z[[KR @vرc X;w~z}i-mm߮-.Y0h @mmmM6eK 52c١0`mDDDpp0L&˗ERUERNnY^\yi*(z;wȕ#{Ν۷oKQF%Io4h|h}*SW\4Ts?0 ٤0KKK$u떋 ,'ȑ#T;=B h O{.AeeeBUlO5?cه&EQ<` d=ۧbdZz{JCz{EoOr{o߾++ϟÒ7nfp>}:!w޶m۞9sĉgΜ'<<|…:dAoOɁޞrQ)ߓUw{hCz{IiS P滦Ǐ߹s̙3=zEΝ;taÆ)6fWRǿtϟTLh( jjjf̘!O :jԨ8P(Jmllttt{hUKAS*2h;dT4{PkUb0:܋o߾~ 522" +ca%PUA1w\&YDZ QQQ\.o߾]p!é;-@BB(x<8kERlwѣGCk6 ðdffΟ?_QI$=zSQFDD̛7O[[[Qgee(ϣi۷ɩ?''R>}h"J3{l}}}BHDJZ!!!199̬jkk?|@)>|x Q6mZv_&BS8{zzRN쳲|}}VVV$%%D:(211رbFNd͂$455IyYxR\RT0ZSW<>GUR~Tk M6ϟ1113fP?;;{ڵϟ?_Zw4(ufpѤH$γf͒+766(..:t(y AŎ? ̀JȮ]Ҽ,([ASѽ{Hݘ1c]hT㸳3iGmTe~OAr]nnnBCC#,, %%%p V&kPtc-T,Q 11q׮]P ޾}Ҽh*zZVVk*/ާNי߇?^/uڵ4Z#ZJ]7 W^Ο?믿*kb 7O@t˧>f -`Z xdc>e7ϟ ͛Ge˖]tP ݈T&k(~R ֧RQ r D"Q||OI+//E555H,Lfii)=_MI P(_\\Vqqq||< Ba|(7O<xUTeYEZ<O 6L"E ϟ?W>\HMHHPrƌ(Jғ'OB55,Y#qV!(JMOO?z(TeL"P"y UQ!'NPHUF LTe⑐pi䙠&T*-,,3{ΰÌ"""/aӧ uttTeղe)z-(JJJ @Y5kPVmذΝ;ʘtpp,zE@@eնmۮ^Z_Zp)߽{7|eƏR_ZΔӧOWjPֽCl={v߾}U] 1cPV]zu۶mU/^Pg6mN>}#m6mڴ!CP6sΆ uد_z@ ݻ7eU``e˔1bD^^^h8EYpBe~紴4*;;;S1sAiiiJ3 ޿e Ο=obbf8K$}˗/YtܹsaT2IyxV3`>*@1՟ e&UQQKHؠ(ZQQQ]]- ~[?^,}- _ |}}a^𡢢b׮]d=FqѺU*\tڵ_~- _D"X,^plJӧOvk׮߿5EVz eP:M&Wҽ{mۖ؀ѵ}}}8 w'}h*H ZҠy055555'''P HyyA.]Z^^NVVRlpҼРUA,wܙ԰III[lQGeee:ԷVRᯥ#ƅ̙3@ A;wۧՂc 6VR!U? D"eii뛑QQQsO 8޾}kdd`0f6Al& @D=}ֺnޚ^+ݶkۈQ#l05 8wpտ>zW4hhYkcet͛7dd2J HjjjBBKVkv3g,..ΆUo߶EQ4%%e׮]rmUӕ)&()@AK`1@b (1D1iTUUedddii)WVY[[☘3L8,22mH$h!i}2G T  pi`````Kׯ_ڵ>8p`~~~QQQ\\D"ԩ|@"úl_,eN.W¦J}ŋJ9slׯ߾}Ԁ'NDFFWXrQRǏߧO7o޺u T3g΄V\ xa T(BRiOݻw呑w>{ `̞=(N}^tǏ/^رcO|899bŊW^ifǎɫVӧڵkcccsMMM=x SNK.e0(bM')HT*UO _mrҥ} 8DI&1iSv5uT8 zͺ5ާq\ E)4 X(n){ҥ X%UU^<{VMMMRS*BX, wt+k0Z Q֪aLfhfC+S1~^TRä yO.Tƍ'[޷o_&YWxm5` X+`lo :  nͤR0J6u+,HLl?xp ,~2eƔ)6m  e" LKK bXrN >ׯ_RTA۷o+{2P֡D"r*رcqR<` .(rzyy>)#%%[n5"-9brs0CMb NN@$8>~.ql_JU.u+}{ʕL m۶577'utt?|eGիWwݾ}{˲8q⯿ m :tI[\.OIE㥮[5ѣ&&&'1uԳ@AUV6]#d=3O .8![UVuuѢE3N\sm6?6N4_DMHS ^'%%7L@ĸ~d*~IKKӧ϶m'Nرcǭ[R3:tcxlӦMq͚507biv ߸q#4Haaa|*H࿚K.G/RSS+**dٱcǡCth|` J!®?v-Y @Xbc+rwdh$c'TţGdKwpppHJJ"G5j(O]]]vvv 2SÇ>\+VXx U.]tROOϲ2Xbll,{XWWVk׎"aggw޽ƿ()./&|X[[_|YtWOvYWW/۷oߖ梹o`?Q\;87"{G{)nJmPZZ:i$OOO%K4MC믴J9{۷ߍ7WgΟitJmB̙3K.FVxx8A%K̟?3I|9du yB 2 gϞUJxck|*&Kx<tuuTVVԬLIICGG ~ɓOX桰0''`t$$$$''ͪalN:5z>Y B&<}4RPZh*w?gϞ .;wޗ/_{nөTrҹsW/_+Wzyy={(>^zǏ>|N8ڣGw : 6J%bϞ=ZZZw RWWǏ7<{ŋ^j9ҝ6mZzzׯ=ztvI___OOǏ?~T*{ƍ[[ɓ'O2N(&$$9bŊ^z;wIGc|>„ ޺u ŋ@gөTC~׷ojhhD|w`@cǎr΁^@=~СM69::/_Us3W*B}u/ZN8Q76nc,\ ]BWm۶mp5zϷB 2Dϸ8#ðcdž$&&4&ÝA4nf;v ;v|E4L?L/\\\n߾b . 2 oS@GGGv@ݻwdddV :uӛ kkk91p`@M(`С'O̜9I/~wSN>6lyH̚5)ðǎ* #tOsTqwwe '} ڵk7otXnСC\nNNYz^CPQѣ[؋ m:{. WRٜo߾~ƍ׮]/_u]"A3 5y)Jsss ̞3l0#c#MmƧO&>o̙3677wȑ666&M*,,l:6~ii)A{=rt~"bƌڵ;vlAAAf ڵkEDFFFmll 8}ͣG`ĉYYY _~N< mg%&&FEEtͦ F @$44411rrr dccs7:::ưp„ /^9r$Aڷo?y&'OaҥKzz:Aiii;w611񩩩!P<^|t̛7]vP,w}_ ##͛7χ6A߿}666wDr⑕էO Č3fff۷}۷4hPfffNN,''x[(((8Ri4jjjoΝ;歗?>11prrji ܽ{wڵ-;;O#RIU++O/zǟFfgdd+Vp\xaX׮]eH$v X_K<|W^^%׮]={6aǎB Ri!?$MQ'N?> ×pܐ{:99AVTjnnk.all\LT @6&&F.ARSSgϞ`0Tq 9HRS.RijjjT05˗O81d2do cǎr_=b1˥S}ipqqMGX&3ԇV4ƍ { YO/777ӡC^z4̈́,??w4#4P&8$XEؔenyDK?;V YW.;vŋ.\h\Ҵqlj/OB"?իW*agp T 5mيE7FcA1#3յ0"zrs ŸѾ4]xql3C[w,'xwb{ u Ibb誥WXtm6KqEJ%dL?n|K?΍Mݫ jjNBf8whc[[[,|=?AOdHxGb'HZO4hh`0r S~{ F Ƞ08-V`߸oCշJE铉Ij,/ِ :۰ ٤ucǎy.QcџCS ~;x|^/f_F}KB P;߷u/٢㸾@ @ĭۢ4R`(:g{{/shj8[[[ +ύ D(E%5GNQ+*F@T* !r#4c8K$9Pf`2g@?T&,%nu')`8R\"-=TEDBvH&JWW3   7ʴ /gy\QQ )z|[.Ϧ o0blxd+1 O?ٿouMu3 -b2<o_qqq]z@QW\mE I9@>KȣqSRf͙U1AQt?{LEcbcM~z eCQt߾}7nP% X,F"¸Dq^?me2(`&X@~d'ݣ $fY FdTdtb4Pheu 3p@0x|X`` ;mtϠ1Y_UeHU2YTTsDZ@P͉j BҪA۴i޽{wnޣǎ~-|T ,a0奼| P7ݧ铮]ܼ[ݻ_:=5}lݿ{?7'` (B8lAdTEIE^]KQEH˖L'[>)CTc*keC(<=xT+Kĩ[2̂^ OsxqUNnV.۳oϕ+WT~>̂2ebltX9|A/|>?3;sڴi 8x`@E#3eڔ9E_?aʄ+WdffZXXtk"Y'ׯѣُ޾mDDO6uA˖-FD"\RNUK~tDc;w>/6qā3C؇m/$,jۖmfVf':dCO=)dsHD={П_ćl$%%9j߁}kJ\АAC rѱѓ'M఑BBQt{=gޜtA<|0Q XbEMM2FQ4//ſw)!!!pE_uvrZ[W圢Td(0Yl m# c)8G1̙3:vT-Z=,*.  jkݝ ,@ޖm-j"#߽W稇500СN:|덋,^ð;9zK*_̴W^U tt;wC ;vɓPϞ=(loɣ'N6?457`iiiqb֖| ,"ǘwo+($wlvDxD;v]we2IIQQUUf^^^d4IE>512IJJng (Y={jkkido``{nfMCYiF IYˍT{xzhk> T435{P$l۶ۿS!CyE!"qLtLrZ2rssk׶ӧO [[K;٫sfffffWg/cJA˗/KKJwK/%bc3cAsr===9ꜴjAB ~:55{RR$bIIO7p]]u ƣ-55(b35:W z^UU` IػOoC}QcFj٪ܜ\kٝO(jAMTTUjDVVV?>sLtdX$p%IdD1 wޥKB c0EŇnSq+!+++[QQ;ݿ'J_zqmҾų 1 O=|X"^nſ.GNy^$]r%44h}<x˶-Ob*??_$x= )))n]ʺ?3+3 HMu L+ aƍO:y|^ZFsE{ yfEEEJJʲ=}sJA%}JwkBFX#;hyyy'NҥK޺{xޝ)cǒEFvͯ^JjKKPԉSeGy۷o?zhIYsgW~!ŋׯ]Daaa.=t훷baeeT*EPE>&PRTr1^O"<|022RuСARqAcGlݶ E^GFGb/OOOߺu+ݻ˗/WTGFG=uVX{ȡ^%C5#^R Ϗ321nkݖ  V*26RN=BDK.ud;>y/زa! |Ѷm==R^Qfݚ` ^J'O|X,~7`odg 8g&&mLpXS .=WWU/B*G[ZZb Y[XEEG@BBg͚#8 bɓVV@Q{vV  D_W߼9p2 8cvڥtUG[_~? ~|mH> D"|ҲҰȰC,w7w^_zΞ:A{M{bn..ie˕3ft}ذaLNNKsw}BukM-?2qʈ#""KKK߻?dȐS!1$&&fde{ȰU#]F$$? |ֺG[BKJJQ;[==IYO>x\nD"1嫗:{thpބ p]2bbɏxc'Oܻw礼(#c~/]tn۵o" 2! VeE^~JB߅\.̤K.|^!ϣǸ,,-dWdnnnL]MB~! (=W/_ˣX* &ibbcc,^2s1cNZ=;O:֦EԴ;,ZHK"Kwȴ(@>~=k,+nhh8s̜ܜŋ|Rvq-Ł/W[߫w<ͫRؼWkkxg_<dee-Y*// 0 :e*b/KWW/&inl@N6mwǥ8ZlUVFe˃:"A@S]S(j*+D"'b A`A"1訓Ofgg?x݁7(%Y[5gO?èqsD@"Ԋkkkk_&B $PXոg|}}g͝I@Ҳ8:;ffA p)!mkVWWw̘1;bPHdT[]ٱcҊR]M] ԪҢRIИ =! F;vR\ﯣSU]+=~O>UZZZ(J@@8}o2P3A"#Ks=x89;%%̞;Uۊ 5)$ ܓò X_U]Pceeg9ډD$dl;??ܴa! 0ݻo߾`\v 8QcM8c_z1hࠈw=zFEE]zyԩffqyZVV6st|CCsr5542|')9`0Ç(*=vzz2iJeeefVM{uuOAAA6v6^iI]BB….?M[qbj p nކbFĺ{y=`Ȁj3K3?M-*A/K~),,c]tKŸ٭cld (/okٶPc#㊊rKKvکp;PP%"!dٰښjjj"d}q̏ Awwww7w|ֶg)Vcl۹mOcm6S:sWֲ?*AEz9+PH^ ]5?:0Gp¨H$_ &`29r۷h-ZCx_wJV:3ן^*-b Uh 58  4V mKE6L&+3+@O?1%I[KԔ`8 jZûo~*Au0QAI$vp͛ҏL M+#P1#'PZ%5/lvi"?'B'UE*ȈkkJxHQePҠAFEAM"K Pe@T\S^Op6oco]xxBKOHp\ja,᥃K? 4N (mėJ$tӎm+lq.,,7d0ziРACR-ދGXXZXŢupRIENDB`engauge-digitizer-5.2/usermanual/glossary.html000066400000000000000000000136271222557406400217100ustar00rootroot00000000000000 Engauge Digitizer - Glossary

    Engauge Digitizer - Glossary


    axis point
    Point that is added to a graph to define the scale. The two coordinate values must be defined for each axis point. Three axis points are needed to define the scales in the two coordinate directions
    collinear
    Collinear points lie along a straight line. The three axis points cannot be collinear because graph coordinates are therefore impossible to compute.
    collocated
    Collocated points are close to each other or at the same location. Multiple axis points cannot share the same location because graph coordinates are therefore impossible to compute, and should be widely separated so computed graph coordinates are most accurate.
    coordinates
    Two values used in a graph to specify position. If the coordinates are cartesian, the two values are X and Y. If the coordinates are polar, the two values are the radius R and the angle theta. The X, Y and R coordinates can be logarithmic
    corner
    The point at the junction of two line segments in a piecewise linear curve
    curve
    Continuous line in a graph or map. This is digitized by creating curve points along the line
    curve point
    Point that is added to a graph on top of either a curve or point in the original image
    digitize
    Process of converting non-digital data into numbers. The specific type of digitizing performed by Engauge Digitizer is the conversion of graph and map images into numbers. These numbers can be exported to spreadsheets and other math software
    discretize
    Process that converts each pixel of an original image into either the black foreground, or the white background. The colors and grays of the original image are lost. By controlling discretizing, unwanted parts of the original image can be removed
    engauge
    Process of converting an image file containing a graph or map into numbers. The word 'engauge' was invented to distinguish this process from other types of digitizing
    export
    Process of copying digitized information from Engauge Digitizer to other software or a file
    fast correlation
    A preferred method of performing template matching, which is identifying various places in an image where a template (or sample) appears. This method is fast because it uses a highly efficient Fast Fourier Transform, and is therefore used by Engauge to perform point matching.
    graph
    Image having two coordinate directions. Three axis points define the scales in the two coordinate directions, and the location of the origin. Graphs have either points or curves
    grid display
    Grid lines may be added to a graph after the axis points have been defined. Any errors while creating the axis points are usually apparent when grid lines are displayed
    grid removal
    Process that removes the grid from an original graph image so automated digitizing techniques perform better
    import
    Process of loading an original graph or map image into Engauge Digitizer
    line graph
    Graph containing lines
    line segment
    Part of a straight line that lies between two end points
    map
    Image without any coordinates, and having the same scale in any direction. A scale bar defines the scale in a map
    measure
    Set of one or more connected line segments that is used to measure distance and/or area in a graph or map
    piecewise linear
    Curve that is composed of multiple line segments. A graph of the absolute value function is a simple example of a piecewise linear curve
    point graph
    Graph containing distinct points in the original image
    point match
    Automated digitizing technique used on graphs containing points. The user selects a representative sample point, and then similar points are automatically digitized starting with the closest match
    resolution
    The distance in graph units corresponding to the pixel separation of the original image. This distance is displayed in the status bar, since it represents the accuracy of the graph measurements
    sample point
    The point, chosen by the user during point matching, that best represents the points to be matched
    scale
    Relationship between the actual distance on the graph or map, and the represented units. Typically, actual distance is measured in pixels on the screen, or centimeters or inches on a printout. The represented units may be distance, time, percent, counts, ...
    scale bar
    Line segment that defines the scale of a map
    segment
    Piece of a curve, in a graph, that can be automatically digitized using segment fill mode. A segment is a set of adjoining points that lie between two endpoints
    segment fill
    Process of automatically digitizing a curve in a graph, by creating curve points along each segment along the curve
    select mode
    Digitizing mode in which existing points can be selected by clicking on an individual points, or clicking and dragging to select all points in a box. Shift-click adds a new point to the points that are already selected. The control key temporarily hides points that do not belong to the currently selected curve.
    session
    Period of time spent using Engauge Digitizer, from starting the software to stopping it
    engauge-digitizer-5.2/usermanual/gridremoveafter.png000066400000000000000000000056361222557406400230530ustar00rootroot00000000000000PNG  IHDR-Y pHYs  d_ PIDATx-tJ{^Z 6Be\bMmb +3+,2v+f_no-M2{Ϟt}>2y~~&2Gv>ჲ0F{ݢ4%h&!pBs]ی$ݮr}eN`ٶmg>D,zYsn:c#\s>(ݮ"Iust6bf@& ƘnZV.'$I8tZG>t8v:n7p޶\.onnNjⲹy07PJ}A|9*_Dzhi:cvn%BCHv+* C1 ðbne7ĬVP%R^M ð5qX,r_Lr(0 ܢ,[זe}- C)(&϶d2Ld5cY׳Lv+waY|ߟf$"KZ|M97MSʬ=| wV4u]W=vkζ8W:᫭$Iái=z;վ\].^v[>V(Pmx$IXvsNPnBUgi~eݪU8H@Ӵ0 վ1_U\.'ŧE)z[v:rZ,_q<͒$h0nΧۭJ8=??W=ym&V+mWYy'|Ry.)M@.Ƙ8T=yVx0noo }jc&Z%ֶ!|JO/>dm)]rw~'ahԴO,F(Hq|B a!A$ii|≭iu}b{>TPpaÓG21yȍZ!^vC !z'! Qn[gW8)i.KaW8p*_QDve^"Z-|CRwl1fiuzǶ_|w杄1_| ݡ杄昼+P/ݍ@.w1LV\ItJv[GWR5 ]I~1=v |W2 g |KԶV}]Fuq-Ok,ZeY$~G>m3v TijYV$ 6_|gms;AoC{{Wi&IRlՇn]A{CeeZ-m P(nbW(]ι:'C@<$i#c9c +B(x PJm{kt˲l^#y4!'Es+5OO/k7*[.iV✋m9?ޤJ!vqN2 P(|%$PE4k;!ͩ|s˲6b8OM|m(<|;TSnWw䩦l6NSd^yĝޮnAq xMb]zjReL&9~89S*˗iv;L2TJ},H>R! |\O.=]בI8ٌ`^d8v],إW!ucR+D$I$׽˓$iTu.s, $I0kiN' C_.D廎#˲b!-p lhVG)#yU10vdW'd yUW1x*Vy8cm\FzP"|74ug6MS|(s|sRuR}^vC Oc̶h^ͨ>ƘxDGu>۶WKJo>ثWKJwF#YW)ahUS}U((pOFR^زt՛r;PS=ZiKvCpjU>ƘXk'z*='5*c>ιpqNvWNis9'a5*c>@]qgAE5'N&$$W^wwwњIf壔|/ V,3 c0A rH[jv+7v80cdrh$/˲|>qTIan#(=h ʇ=xhJ|eZlۦ8*k[(A%hɃJvy+RIhVFeex >XJ˲l`+|=,z^_,)(n1y.qj~*kv!MN8u${ v8c)v̇=@ᣔ=@Qp@Qe>PR8o,B*oΗ)O |1 *\8 ME@_TGI+|pB|V IS]8S\1^1'qL{Ak$!4%_:_6~_u#"y/23Fo /{R{h A@A@A@A@"id . IENDB`engauge-digitizer-5.2/usermanual/gridremovebefore.png000066400000000000000000000116231222557406400232050ustar00rootroot00000000000000PNG  IHDR-Y pHYs  d_EIDATx]/H{9.vѬ%fE.+/ά$+y;&6`Oa6XaO'!!iz*~9N{q?b|1JiG LzeEBDUվW6c늢 |iYoyy^Y*cAAq(bXd`"u$c,-4M4mلaC\g^܊r9TQB$i*g.z\~O)5 c^'IRb(.^e۶mexl*g.z\TqBǩ]ө仈.~ $м,~dr钪8{]ǩ?,+}|B8UUmnj̆%ie&Z _d>a R6HT\axww#:ߕJ>D(777dZef}͇6߫TRU|1]O]Ej44F+ $X(jj$a?Lyp]-n7JQkdcRn6+ aqEHv !VEԮPelߕSMD`Mhv몪n.Wt:ɨv1؍MoHbav497F1c : l bYV{eȕZ(<0ljjw\p]<۶w]!%BZpΧi|^=BPҏ?W[OhXEQOKbK)ɔT9tI %8u˧=+0{||G 4| '( ôC~sOSU*.*? !FӴz=ϻY7@:ī} v;8f&-b>,Rsm[r#],{Utݻ^mY|`g9ۋ(|A=8]dD/HdZ-z.%91 E1lDtbxzzrg(OÑq!Qfj\`JU[V+M nJU?|iIj)UEn8%^f(|q3@ׁ)A*h2V<(" yА.n-f(Br7j=9Hm۠j{Tը>@٭gqEf@vQ @Al6LҥQ|SjFV,5 'o2ȜWr]uMDK^z]rE< ԇ=uC-p{t js(Pr]9]}>.g۶ 7TըPJvUUl6af GzR8Brsh; hly3M j W łc2B* TUUyj8dq;ŁG!O&tm .0 ۶eH :8WJ48#IRYH^n뺮>>>4"c+|\ |-s~ss(n{.2B"u4M;9u dV22,(v)s]\Af#Aa}El6jyݣ۶ ~P潉v}>@$ԓJ;ZTU}*Uݬ,UL<ϲ,<יό\C`4Gc[FQg*/IMt*nEnmjeUej7Jmۙ"v;d~iEQo_^u]?Fx3oR58 R *8ݯ@KTiȵ18RJ)ŭj$_뤮z޾ӱ߮rR!Pl'ByCo0a`~2"C[,.ji[+0kc|1^a&(ަn$_$p8ޛtXE"I[ȕaE`u[l7kWpƩp?q]nInT\q>i-$$9Q{#v^$P Us ·6;϶mUijy5}$ϊHr]'Y Mm Vd2m[P Z I/_3ԶA"棔Jv^78j^~BZhs~HW%I^߽{gy@_U\v˥\^P2-dks tCD6_.[Զ]m6>>>Bf3] [0js]w"J>9ʼ~1Ry:](<*u !>|h>yi1V9N;w!r|)R  #]Y"B) y^",O:Fd6MvfK o6]ס"TGdc>˲<σVE~>/[2Ĺ v[藪SU5łtUUϭU!^$u0,K4RUfW@4{8v݇ _", ֭Ts]q Ɇ+g>pb,m q=1,'dXAS^baeYmT&ŊS:X4l6|>&U cO@4zh/GQG7^3+ -UWha@+ڧTdaKmKQIkGjAΨʮ~Yza``e([;{ WbA{|պ[m6|1\.wl6+NECaUaNS˲0ceprwww!B"+ $CsATy\ER@x{T<Mv(v-EyC3HT9K&=ys)8`/C}AqڠxR$@H:0HQ=i^a ceI%|PleZ=DG<<1Bo &˖@mP棔q8 A} Of}2~7K۷ok9QA o$4 :Wpl6q!p gǵ:h!z`$I6 Z{(1H @=H>uUUŶc{Nc{4~$k(H}>X{0bI{k&Z{@w< ж̖2ROp$_|J˩ϗF9˄N߿+2NJîX}_Qp8LڽĂjeY[ݘXp%. H$^*䓇 J T%_$[$(X9[Dwo٘ -/~H &(@-n-4 Ey}߂(UM&?FTnEA|]}YC^ЮfpĘѢG)[X!mk1IvDTuRՖF9hDAv1‡(]]DA|a&IQEQ$ Dh8OɋyAXQ#PJ5MsB!DUU])s}}3@/<\$MO|XiA@"9 ]G*Hq ũ2|m|ũ N#ʙFqֲtد ii&Ir_yv548Oaye%Id2N۶(ӧ$I3ƒ$ɄTO>ՙ⯿otEL&uFhdF_NSi! K{̇ 0ED05,pc@&!}ceV̧³aUxJ1+< ϒMO!^P>c1f<=====ui_@+0jpE4ĿTjUÞqauKMi4{4|὿};J>IJ,EQ4MeG(d2$I*9f!=b:I8-Ų,]UUBHӴ$I /K=~,KDu)n\ȞrrK1\uhϟ<8,˪&Ԭ<!jXjUUa* l xZ0(eK&P$9mDQ$%?kQsK*ZgF-@ &1· ףv27MDG8s?IENDB`engauge-digitizer-5.2/usermanual/index.html000066400000000000000000000066551222557406400211570ustar00rootroot00000000000000 Engauge Digitizer - Help Topics

    Engauge Digitizer - Help Topics


    Short explanations of the specialized words used by Engauge Digitizer are available in the glossary. More detailed information is available below.

    The following tutorials summarize the basic steps involved in digitizing:

    • Tutorial for manually digitizing a simple line graph
    • Tutorial for manually digitizing a simple point graph
    • Tutorial for manually digitizing a simple map
    • Tutorial for automatically digitizing a simple line graph
    • Tutorial for automatically digitizing a simple point graph

    These answers are available for general questions about using Engauge:

    These answers are available for users who are having problems using Engauge:

    • When I import an image file, important parts are missing or hidden. How do I fix this?
    • The coordinates I am getting seem to be wrong. How do I fix them?
    • The Curve Geometry Info or Measure Geometry Info window has disappeared. How do I get it back?
    engauge-digitizer-5.2/usermanual/pointmatchrequirements.html000066400000000000000000000032601222557406400246470ustar00rootroot00000000000000 Engauge Digitizer - Point Match Requirements

    Engauge Digitizer - Point Match Requirements


    Separation of Points

    Engauge is limited in terms of types of point graphs that can be automatically digitized in point graph mode.

    The point graph on the left below may be automatically digitized by Engauge, because each point is easily distinguished from its closest neighbors. Engauge will recognize the 22 points.

    The point graph on the right below cannot be automatically digitized by Engauge, because every point is connected to its neighbors. Even worse, some points are overlapping. In this case, Engauge will not be able to distinguish each curve point its neighbors, and from the curve line.

    Good graph points are separated

    Your point graph should look more like the left figure if you wish to use point graph mode.

    Image Size

    Point Matching involves a lot of mathematical calculations, and a lot of computer memory, especially for larger images.

    Engauge can easily handle a 2000x2000 pixel image, on a 512 megabyte Linux system. However, larger images and reduced memory may cause problems.

    engauge-digitizer-5.2/usermanual/pointmatchrequirements.png000066400000000000000000000220011222557406400244610ustar00rootroot00000000000000PNG  IHDRTt bKGDC pHYsHHFk>#oIDATxytSe-݋l,AGEPE:PA9JAEED6, N EvA[&$}ӣ{ 0XGva"I|]UU{z715Cw Djc{ܼp|STUm /`9g(x_9p(E_xs9>Q( o,S/<-荃]Ӛ?>Ο?>VZ.(ׅO*¦￯`^.(M4Ft7n֭[t:;p@s=ѣG3R}߅ۨyXdI!_~3g|t@ D08Buuu}[l٠ۯ_?̛7OCKIRG9rHoyj˒%KoΝ1giӦi0F\W'| +**s~/D>&O\i8uvڅZ۷O8YUU21_QQDМ]Jz07j%%%())iw\ضm{N:bx~sI٭WFllO[JJ n&@j<( ]8vX 2@8VUUa~o=z4 5 <XCa„ bz!L2EtD{}L=kG5)Ԧ'DQ 1^+YP:_~{FRR蒉(g|lrssn:m2dta c/FNNNl6fϞHDaoݻ3R`$"Zm߾˖-CeeO[eee/6(9r$ƍ(++֭[铗Ww" ܹs2mKIDӳo߾~6xǰm6%  3boFGG. :tٮ( zQcj[+~zmf#FhoHFҭ[7\}պ&^mK'"jr;v1o|Æ ]bN< m T*Λ7{7"">%֠AУG]OEFF6h, tjg5)Ss~oo[yy9***DDM*`nn.ۧoTTߛllM_~#˦ BDKj۶m tɍ'Oc=W^;Ckv"`s%rÇqa]}ѻwo_ 5@YY:`tmaԩBbdvо}{gt͗Jj`Xо}{믺Q9yyf]}/r]VtDt 9> ֭J)ffo[Æ Cp8|ڲzj%`Zj^xA!}'OzݗB_|7|g%~*n}=XXo۩SLF;v]FHJJ{{!U(K:$ ޽] ZN±ctOII fΜG}0w`[p(_3<~fflnVz~rrr>ĉq-n= c DDaȑ#Xz5Z_VVZ]4 Zϖ>磠s! D4MlKlذYYY'%%O>$ST?EEEX|9vލ3f0!QTTk>YeQ$ ,Cs'w}wr8L8Ǐ(Cݎ}ڮi*++} )) W\q6l؀ӧOOPPPz z]2 jȐ!K " J)))5k:vdXVZaҤIhݺ5^{5ٻw/ӑロO S H ׺uktIW_,׽@ttt@'eqqqӟ &Ff6q]wGx饗w^{].= /f͚uskѢ]H2wzf޽9s&?^g_шx@zDoĄ j]OetV’%KqF=zF˅={n{EEEᩧ˜1cD @"05c 'C=:>޽{ulA( DD!$;;+W/''dM7݄,Z6l]@"RTToalF۶m1g\uUXd ܔ䆿5hĸq0uf2'$"" @Q8::۷&oGѻCA(UVVO?W_}川.&$`rr2~ξkELDv;k4MCYYDB!Hxܵk t56lZngyFtDDF޽{uO{OQ|MdggaÆ.Qm޼oEBD͔H_bb":tkڊ$''.€iPUY6"Q3g|ڜN'JKK9E  5N:aѢEp\u$S P$ ̙(5k>|'NDii2`F'Ifs_g޽{f] !gMRܑX,bmX,$I{mڴֶ"**J@ VX,]}{聅 2R؉QбcGmNZk Q4h'" !(Ȅ%i" <HDD qqsQ$ e***DH!(HcŊT#11_QUUg]"@" cÆ \ڋwYk; ՇزeK$%%+\";<^udff̗iX E?\nݺiCjsiDFFl$ KF&<Λ7Ot DDbXvOlHKK?8ѥR32ydm6fϞo]tȄ@"pUYY?֭Tرc2Q1 g᭷o6f<補E@}݇~~VӧOǭ*z)%$$]vlٲ{D9pƏ_k{UUiii4i˼Zп1t-Rt:Q]]-z)͝;Wt D 1?>FuZRSS#D "FF(l@Zmf1pNPU,. 5+صkJJJt߳g`e,Y@">tݻw]5"{""" /cǎ. հ{n̝;G] 5^&"j%%%X`2Rn9/^ӧO⫯رca6E Q8qǎ;DBm0͘7omΝ;Q]]-Tj @"())Aff&.]'⮻f]*.ڵôi0`_ƞ={DI m۰zjscƌÇ_~՟}t:kٳQZZ DҶm[L6 YYY5ߏ9sW^A׮]EJo5믿VUSݻw].Qnݺ[nk#" }A>}DAD0դI-"İHDDD*??~ۊEfDDDl6.A5 ^{Zl)\""^|E8m .O?$D@"IIIHJJ]Q߿m A@"""0HDDDf 88N8NMzn' wfBrrC{)I( Ed5Mp\pPU"Q=QmѢĒ,AÅ{l]tAddd@>GeHӉ 9syyyǹspy8qN>4 X,w'7Ya4aZDlN89N\.\.܈ҥׯ:> h0`0( f3l6l6[>Nxy_~D#<OZZfϞ-zwBwtF3#""eHKK۶fl߾]tagϞ 5&""" 3 DDDDa(0QP:z(rss$~#`$""k.<Hֶm۰i&e4;-ZovDKD$رc1p@mDff& kl_bqw.`$jC.(t]vv 7 &&K,Ϟ=_~ո;`4EF%`""" fs|A3g`…׿Jѥ<@""" *CE߾}}`ҥؽ{C $>myyyx饗pAe4ĉηCԈn݊e˖{5 ==]tBH0 0 Pf6 6iTUEEE4M(p8 UU9& *~gΆ5ڻwg})))eG$Ȳ Y=chhC DM}Ѣm$I xDAHet3gDzz:[=''fٳ"ܐLDa(xo?8ڶmӶ~[ 9( 0ӦMCRROݷc$""7dC{./^ !̐HDDDAOQ|@BBB*\-BqqRC Aaȑ>cӦM]fc$""CaԨQ>KJJo㫯]bc$"")S 55RsFǏc̙رcg~cHDDD!UV2e KJJ-[pZ0QHJHHq5`ժU]fPRpDMuMLL;^ έNK駟Yfa:u*D. %@"~ߑSc`Ʉn /"f2 /QKIIٳquո'pO?Ō3'̠HDDDBn0amٲN<)̠4-),X'Nd˜1cA" o\s Ə ^YY͛7#//m۶[rr2F 2;v ''~6  `$ǣ+V@uu۷o,~`ѵkW@"J4ʉb!ł~VBIIMӴZܻ ’8g(v}߿?HDaye] Ñ-EQx@"""0Ç@!++ ǏiaD0 DDDDΝ;5kgk׮ DDDD͍ip8~۪DP( Q5j:L&tItDDA!99;wFEEOQXXMDB/"s7s5s۱cVX.HԌ9N?&ItDDo۩StOi߳nVU  Q3xb|^}Xd蒉ҡC0dȐZ۳EX/ Dؾ}PTTw}'\"t:uO@"""0KD4Mp\K!"AлwoTVVcKl4 D$I,ː$),#"_~ׯ߶.0Qr@UUEBD!j{EBBk`$"""j~GEEaĈ DDDD͍v0Qa$""" 3LԌڕa{`C 5/Fmڴɓ߫o(?'8qBs:p\8%Q1sLh4ԩS^$I~i6a`9p:Pt:t:*D"ѥK]$IBTT ۛfCzz:(5g:e3FF$"""j,o[EEI$""" 3 DDDDa(@"""z{n?|0Ziiƌ~]oߎ 66Ig$"""ra˖-$ iiiիg HDQPP|]}qehUU=PYY7bΝHOO 7܀F\@" +Wbݺu8ӧOG||zJĉH<̙3#F@ǎ=4Ʉ(:FXV@nn.JKKu}ѣGu/Qט!PUUѥܹsxte$߿?z-]H$DGG.(h 6 zs ϱeBB0Q ]QHu`ܥK 4*ߏ&A 9s`˚iժFɓ'd2~/Ҡ%`"˖-1̐e& Vhٲ%ƍ/\tDD׳gOX,]HԩSѯ_? :W]u>YTU$I,0 D$ٳgqFx`bAdd$㑔C1Q$IR&>p8+WF#l6ѡC\y7nRRRx ((8*Q@" Z>*8>5߮{@'O!Qc8p []]#;;NXuA.ȑ#1rz`0`0x~~ `0xݽn(1i ,k9?k׮Źsg܃lnGDDv;E XsOiZ>F"`xg- """ 9VdY>uQ5:"j & qqq0͞mAl6f!&&-Zѯ{|{}T99DL=x}  @́5Hj(IF#V+Zhx}V!vոZ!˲矊l6#&&0Ϳo.s)5Ӊ"TUUys`qqqZ0]O Be\.C Q0󻆰ArpTT, l8ไ&zTXtCommentxs.JM,IMQ(,PHUp R#epIENDB`engauge-digitizer-5.2/usermanual/tutorautolinegraph.html000066400000000000000000000063551222557406400240050ustar00rootroot00000000000000 Engauge Digitizer - Automatic Line Graph Tutorial

    Engauge Digitizer - Automatic Line Graph Tutorial


    Automatically Digitizing A Line Graph Image

    The following steps automatically digitize a linear cartesian graph with one curve./P>

    • Import the testcase.png case from the Samples directory, using File/Import as shown. Not shown are the other methods of importing: using the "-import" command line option, by copying and pasting, and by dragging and dropping

    • Click on the Axes Point button before entering axes points. These will define the coordinate system

    • Click on one of the axes to add the first axes point, then enter its graph coordinates

    • Click on one of the axes to add the second axes point, then enter its graph coordinates

    • Click on one of the axes to add the third axes point, then enter its graph coordinates

    • View the processed image by selecting the View/Processed Image menu option.

    • Tune the discretize settings using the Settings/Discretize menu option, so unwanted information in the image is removed. The dialog that appears is explained at Discretize Dialog.

    • Remove the grid lines from the original image using the Settings/Grid Removal menu option, so unwanted information in the image is removed. The dialog that appears is explained at Grid Removal Dialog.

    • Click on each segment of the curve to add regularly spaced curve points along that segment. Repeat until points have been created for all of the segments in the graph.

    • Export the curve points into a tabular text file using the File/Export As menu option as shown. Not shown are the other methods of exporting the curve points from the curve geometry window: copying and pasting, and dragging and dropping

    engauge-digitizer-5.2/usermanual/tutorautolinegraph1.png000066400000000000000000001436551222557406400237130ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATx}w|33[WuWlL1: = B =H%f:1\umwgǞN',˅|i5;-_jժ \vegu!_ \],n**}_i-#!%9Ȓx'N8qD)pڷkyN>dι} 5\C^veJ2lioy덷Lnj%PJ)aIBJgͤm]4  )`qH@& .@ 4 8uPGyPiB'29TNزO8ΠpOoT k|p9Pہ\R10'gtdMBR*+ thEᜃsQ^B Top w+ԻVmXC 1\A ۬GLxI[88*wd*K.YJ(! ѤVnI%*Tdf|>OaD%@eB! !*U%D4d< J2 *J( ^ˮ'*mmmsiK %TB npA JKwRRJiρ\X2葩q]a9N]=I@V0v tũa>7[D29&9^rl&RGxHO ae;cH}´g-2lZA/wQ7tPB 7z yiQӂ#|N-@Sepp.$ӄ8,o~7&Q\0Ä%|nR!̛ԴOWr.$oWHpѧ^opFd'59qi` pd+sapWްKُ;H|z-hz5dw5^YX܅<$]>JG{1hH[6ư!_٣Ȇ+lp O6w~sgUN ;MLs) O N^lx9 9bï uSr,.ܹz+4ʸB (PW{; R{ TW„ ;MDJebQJ3qlӡ*dW5UIIA$\kV@$Qj'rź.;U8uo4^ɏMa*P8&sϜ&hqqlNO(Aq/3w!$!_]ԑN盛]N=5..;ZV$&W_6\'鬪n.eO B~PL$7Y2EpbY!\8q҄[drmI5ˀJ{( jF4 20L" 0 4I](5dC] fֈlNz\EAgqK7 -A_nxHR3 &`u'nWQx}8+ q9 (\4IʄGZ>/>PJLGQ@MsLM5]΢\:42=i->o2:#yYTo2j<]m;w)[NCdgJI.sLGa ~4rcW3h£a(7F%`Q]GwQbVF}8NwrJF[,"p9-& w6q-_]OR)#~J5+(*]Mwnfdߣq ۼDm)'*(LT2RF4[nm+d)޼~{o7PPjL79o- 6k{J)?LF$](q][0LQ/>;zCzs( {FCɔHfSW8$#jek7Lgr]wD 6wHXBmTiwCYfD2=VY;O%0 26VZh1&Xҙ . բJUBB gQJ%ILh:_UJrͺή8cLPi 'S2e/Dzgni\ %_F$y+CWl;2%0pъ .+~v}/>[DJSTSZRyڮYk[ډS&O?aGnjvO_{߿?}5!aizeuw-8{ҨXWx񏗯Jwԣ %kg}0,5"|Ǐ*=n3/| ƍ r̔Fך3/jePR\Chvaꢟۏ[p!.DZCpQCSU>3zd%nL\a@뱦RGWxK$!E: U!ں6H:w94֠ Sh aDֶAJܴHP4 HeBSyԅm wp^T.p ) ovH(!HA׸ߍ^]=p9xwu} | V=.t];w!y2PWk,qnD=ִAp/r<ĝJAiɆpzE7|/wss]]Ey˸봹sr q;{\}F;wң!]/w2lq0nw 5Ghl;]sw0L$S wZ\~HAfw ~ )kĝR;^hi=yP 1j1e)uER0v;D勺vǛ?;m9V.Onpy?ūZ~_SE0)ccß|eww]N !Bw C$ ]A( O!ĺV0,85|h @.N1ec@W {aH$ Wx&L.~oQx0X<.8ttG;:9nºV i CC(v(?idp9u *C(h x]TtG)f?cnHX0ֵR}(Lé!@k;T Y!Dwf^74WC Wxk[(>rH}Ir8r]Www^"wrEzw8|nPR]+0˹k+ Og*p-qrFq(ε^l+WoRK" %J2;B ^⮵wm`wF0n&|Jy L3Hmw>wJ܅ џ;[tG#HdXFw ܹZ+㮨^ ](ZZh\.ԏrZ.O,: )4qƉBR **T.}foiXroO$PjRiI%Lz ?)F7tyMJʂiZREO Gz0*\|)@pL)Lm&J ٖ43=¢݉:GthWk֭%ގ*:@O 'OU*wp)mGH]]Q3LH(/~<:vLaP+@aLHiHaȔte5NO2C [sɅ(p8%O'qP]G^dvعQH"=0w}qg B:⿻>OhWTvmhl͚5ɲ29.tqEӃh.PQh*\G`r:le_}c󖩮Q8A0s5WuZ Ƹ]ܡ]sSB}.K5֍j4UEzH:pa MDRp:Rn"G* N]߃\< ]Pxul~Pt 8L XN'\*# y3pP Fs A6*C{t$ e{* @ (uQ½P:e5` Hr©#"E: znh<:>^J(7L^{庱 r(ڻspr Hlw!3 Hr.o-."wя;gܮzFz՛UJ=~ q]7s˝=ۈZ'^G?N+D߱6^:NzeY-=C|΅wU%j;)P$RfQ@J)y*޽Sovl(@\w:fr!ݢ>9,?8)_u.⻵PLa};<_3nmԒ6w,;;{:raEZψ& ZݖdNO7-{O_W((Qo ))` l7unus/?@Ȋ^{Nm?:dOX=p\uȑu;^wSޱ`- ֏jTOвPN$C3&I qq;L\i|0ij8n'bi7LCѓa1d4lu2>w̝rH+;wJ/wMbσ)n>͝@;(ǝ)vNGÝR;g%h5A1sYh.^B2YƝY;aqwt#Z+r^R0FyUe^{yʋ~JQf8AFԘc`i)*Q$0(=DBQC~"nw=šuDW?=)D,JBER ?g+@Uk#Kv>[;㯶ܰn~;2{OmT2sw=>x4GA}?)W^r:}xcOύD =: H}yq(.y+vmXCH11FŔq_zɟ.c9~b{'hQ?#^[Kɝ:4G²PӧtjaD{aJ$bEh!?2= &jCgCUMP_Sܭ`p:D9 A4Pi!Bm498PDqA$zGPH&@<.$P07u hpq#ehC$\^7D<)QDOyAi(ekHd¡C/0D8rnX [xWy,J5ON>8p/׏d`Pzk,N.+rG(Ý{qGʹUo>h <ܕ{aI$bQ&` h]) o,N zGĝQ]IihՅܹP DnX?wđ7NUrqA*% u5l*w4fJ${Ŋ5Vc !_Bٶ&4i+֞I@$)&qn;4( 0;LP"6il3s~е_w*LNvd„ ˗/oki#Dkf'Q)PBUEDT䒗\ږ#;>/%%nsm+ܞ1u2YR_l*Ӟ5op+s>MO66f2jL'.hSMfV&S~Lwt !PhXeyϿmifZL+oAmLB b! R] n3[־aC\g2Ln!GqLUʹ.]#|ZfzzV Kk:VCN'Hݞ 6fm<&5Mc;en>lĒLSH璛aR32Ph(w@gJNXktt\&` 4c*C>G a#Rq9)qMuΨnqc'rA9IeJe}\&hds,g^Z0ѓP!\W薀mD. iTTքͮ%BF*ryи#1MH4 0i(c V47WdMjB>d2j@:E4rB$&,U B^%dZ!PRj\>l$j@:wm+tGu"w%"jNt nn宱豹sr)&`vEŝ{kΩso9w=ei3%P"wMu>OTV/Of6O923#RG0"Ɍʸ w&qg.d,;B4˝֫2$ >i W%"w=>^k!lmȝe1e#r*ʹeΤ,ȝC^۶P3-NBdP줨ᠮ&LMў|)ӦԅLn2,r9)` hPMw{-Xm֜SN98UG{Ox.頎Cs$"+x*#TU;%,biL Y( PꝌ-W4LS d6i0uDSM[$v##HjҴ:#T':pݣw|n]',]+-ÔA#`H v fd/Wvno7gߐ## <|S97@}n" Iԇs+:th {aq3ƍ[Չd$L1bԸ#AI1 S210W2}W4!Y@2UC(՝4W@W =Kr]/V8ߟ $q׫p64wE2E+;sN(˝aEaU(t>U䮱X,wܱ~i ݃hd]{ y;jcUB+=.!"^k.q׫w^qrWV]Gb.dsZ[Yzr+.N-*SAIB~?Ԙ M v픧1 Esh.Ce'4"aD! Wb'PB!Icm B6Ԅ)TKg]&@JU2RU,jn=ȥ+:kیtv' xvٲkh ;>p ~Ų.YZ|8_]Ak[z:Z:&4;f~] CWscm; @" +[PxHf¥ >{7qB@Ss $+^'y$3p𻱪(Z B<]EUm^G1 Y Eu;Rb w3ÄtF);R>Px |Nis @]P\DWt>'vAe>u`m'T(F^^n_^;^T?wEv0^xY[[=;ޫwebk`h4]eܥzTtuqWjxudHe7^0S(. z+{4)Gcw^'T˝ -]wэgSTVkw"w^|:2YlSΝbrﵶ狏Feo)+S6PTk@ךU\/w>z̶+JpT$*SeqఓRB:9vA&tKZ3ʤ"UBD!RIJUAaR&,z1(S*``7Hssw"(xS*Uv|NP7rO?0aXi%$|4DOaSLIݩ^EU7=R,B  Dtr c,q"o`.'RyAph*TX(C, ŢF.@!ODž|cpHeAjㅛ Bw! 8ʠHg E" )k`X1$ǩCX1ta4A)^T<Bfrb&ۍ^W(YaWQEUTQEBH۶%'r)/^| {=^A߳ AJyGx|1PEUTQE_[A/|RJ**:Л*ιie CYr͝*TQEUTQE@0*"O !I$R-OlHlIUw JQL']EUTm]J~1( c,_wu˖-# J(s蚮(]]+c1F -+) S(- 2EYY*4MQcr/$ƛ[wcr lTLI=[2TEUOi}B(}|\.ˋ])_Ezg3ƶB*qTXapwX,RJmgx!e]S}Gs/8|}$@,ar>ӷr+{ԝzY?8飔vtw=wsϙ4ig>c=F:C>d:y_wuM Mc'O??իVSJ{|`oTl\7ޅ/4YSSsGs1^wpL2q[M#͟ww}C8Xll(s_Wgׅ^H]?'t~'pއO~* Nq!>M(K\uݬCfQnki|i)La=p]]?}>_I8;nmn*S.V0 \ēO$C Ip8B˲i{Q^x\۞=#RȕkWyfiY=pߴཔs9g)'~2e`\iڛ4BR.RH)UU%uuuw}y:OcڗK|f3#G.ww@(@d2` Qi-KXvd!$hf&!DUUιa1Ʋ٬7T\0;-k[0;H! ˲TUeU7怋e9` m91݀oGF~m7?n DB}G ?^mŪtv^{oܽr/Wjϙ{~ !&o3yI?^@A|OwO=Ԛ5kvϝwYV[rŗ\|'98N<4 {l&t>=У? ?sɛ-w7qCwҋx"N;9]To`"=俟2Ǝ L{Go.gKH:}7\aW\?3vqw\Z|i2\՚'|gg0^ۃg\9ݒ;s<_zUsSe&űx,.Z?}wp੧/vuv]yGy˯?%Ivut{챌K5?>ǯz&|ɥ_g6;Klyz|;r^fy;#GUT`X^0hݒN_{㵕kV .{m4~?{x?:G~dDes|>" ˮiǛgqҕ?0$~; [T}jZm(9bt}Pb~/owLf{ÏF='g?YsS槂*A*zgsE,jikBl{Lȇ}͛Nbјŭ/~{5q;`{_ywZfu[{ۥ^*U2-ιҮ`;><}/wر`~7~es]lEgW粥^_w}Tvm?3~_Aܹs#=/ x<.L{\e<W^}U+W?ݺ`}>˰/7~:|Ū---3 stq 3Μˌw{w xS3,\`ƢO-Z/|>oͲ,˲Sbd}u]眷wZj}ze .t]'zc8r !7^cwʤ3Gs;sp]wUsh@SO>yꔩ`(_ɢt:}ج Ӱ%!\r1GJ*C?4iKѵmkuHkkweWJ6pTnݺ`]v>\6xgҭ4eʔ׈ge#GT |UT7~UWWwN-JHd 2ifmFZFOH!Ŏwkjm gLnRrc (DRi%*y|MM@) ֭mw8x09B,x!gz_Rxb-hZO]r%[|U\ezjˮ @Phkkkmk]vy9_bǟ~9ꫯZKTN-}?asF4mi}7L_aq n SJ8YsL># / VAJi”&7c&7Gv:_9=믽{s,iu_WLalii5Ǝ+!G]W[g4(Y#+P5f*ǰˁ^ -n}rG<)kz:>cɓdy*{{')xʉ2J3fL0`ӳ~W׭]we}W^tŹp\Wnmmb-Z|y?|'|[SO7!ॗ_Zl9WLvМiC4MD;8nT2%P%)(BE !ඁ=#?3v|G$aFL} Ï )Olpnj;W_{K.1,cw' Ә>cz2o n KH%8q"|}M3'??cUWv]wuy3m\x./ʩ[a@M`u=HS-k%{?2ƦLbq*A5-zmJ肋ƯiZ#Go.:rs~pZw8v5cLӴ_|qsK.rɗB0 .K?xFp8.♻ͼyid:s;;~sonF{ꉧe\6a܄juwi8O9#;:}ѯo`(xwZ鄐l6J~7֛o'z:㮽뮻nםwh|`6w\pι4#N:>Ē֋/x y_w%W %n{,Yd; !va]ӷ'n?QFqOeYC[ ?Ən?ܳg&?f7D,=;l]7oWx_nk}̙3Uxu7⋼j*/an/0aEyw˾\ λ,غu/.hƎk .%RRD#T*e+rߧ3w]'YM,Ji[{%( 30b?uvOiQLab.@r hǿ_p{[ioW 􊫮x%*!_'᫑1v8sHH8]΀?@HA$b1.^SNxŗC>YYr(h0 ;]}R!E aOJ`PB^ܕ"d~KL&L%e ifAG(1}7z{rP]WQE[!]]xݏ/;/՗_Rx⎎SM749q{n[ȁq|>)'rءU|J)|3z0Q Y__?,76=G}tM7'~vXhkC c&QFPrťW\uU!?wvvv%_$m?{޻KWvu ~uAI'Ns;0G?r?7fL;9o޼ݖRn/7,{KKB~wNZ~Y__/4͍c* |_l: |)SR H$9stwwK"Dr .\.1GS:%L4?W>{V{mIE=s/0ˡ-.յttmME\T[SRHKXCaf)w{wt+VrއN:ү>_p8% ;)=eTwťWe'YVSOы=RN:6 T߫Wk?)TP0_|7ߴ,+~vv4fΜy '!D6 §zZBs-Z_8*%3U}9!'tɧ\B)}w}^7SJz N’^miځq{"] QyK8\cFrHXEUT B p8ϲj ǿϝ;_Xd QGO;OHaD<1c{ΝSӴg>"#X,H7rvqeFo&+gh!C4 9o2z˟nk=R;~o]퀲b|\Skuk~;k,;m؀Dzd钹'?/wY #tD,.LRH;=j_ 4 l{1wޱݴN>d;7-J'~ruB98 tttͼŭk3N?lu1ʘcv9)eK}s_.Gg:EQf͚5sLwm%e˖=CG}tyfL|O;f3חdXo/.8`5|G?|ᇹ6vp |nΔRor-M !$tM~)t}Gy7z羑~w l.{oXd,XUE >/{wީ~9W\ziŪhv;(? Ux5k.-G_;:v}/Oݤ~emnoZ{[ v|J yxܸqP˲,n=>윷\~ӧO}V]M]>?K ګk*E!LEUU*):W4MsiƴAT87limqt_1ă?eӶ6s$]]\ptDxOe@/L'M!'cZ&6kH)R|85RT:U+8Y,MT, ŋ/X>x=Lj8ӬL6JJs*@D7--a:t~ѼozA)]|_z.nK/NI,d~w^zťߤ λ믿7_+oW^e۩.ss=ߴ0.Zx;Q=ptIO>>7MvmM2SinpXDBe`߫bq5!2?sgYKZlơ;4%Jhy`Z\>OG"{rdAM[?_ʫ0QBtf 3ʦ}@0pbÊo֊B˼{7yD"/#iq+ / U^EE_RJks=1f$Xdc&n7fN:m ۪jW=z:zԈQ|{S5Y:ua6w\.xCC駟^[W iIŷl nX+ҒJK˲`Ap]ve֡ ,Zp+s^Yv͂E ^y%_.!H|-H$?ݕ8Nm-N Y:J4nRd̘1C-,Q xoQ{~7Nf` k@E *J(x)匝g~x|ʕ\A,/La!vK L%e2̶Smi,ky;}8e)R:eXv}謍UM({ocOmlhJ!W QpglM;Y:,kG14Uٳg-0nܸg|/\p6wiG0 `DK0l{d~ukJr~cǎb(D|EHa tp7o?v̸1#FE) nfp~q>b}?qKX+wK)]0o~8i$EWAT›oǸXq"Ln~ `~A&Yb@˴reY^Wa-/w}H<РiF[J阱cDbXr H `\2xZE Bի䰽& !tV'ښ>gxB7^!eY士/DRRJEAۺۊ |>ǝWhP(qz F!y4>*FO).kXIofL0QTQ~^RJyC}ӷ?Cn-HQ>쳥&( =uv)OkVH!<Dz,͡9ԭ N7yѽc̘1^ BqeAI)}^Av`M4▭;y!DP!H!-JnmV(m tDSO>_7_.WuuIHa ui~vvWW=)RhvN1bDǺ_EE'pYg{cp' pf̘qGvD|oCiLlg 4m}ZZx ..4{=R/D.{W;渾8*vIf[=wBvn=B.)X<+mheYZa d2e\Ňp9;!3ٌD068ĨQX"f_n ]]OUT09 Y<">}o?#TjH)GΤ?16jŒ/@RS[snoo4Mkk0zK-'DVZU(!^qW_}5@4;vwK7yCryI'x}޶ BJ'tzksJ]Jx:uCO >xgqiuuP(Lc)9j) Vak?0~5ힹL!]՗Rj?BM20EY<@y 8;Z;J \m]hllEߡ:z6܀3̒K(n0;@ Jי+Rno574gɓ'Sv֨wt7 nOmp?Y-;~x)}6h" ;ⰺBiRʑ#X]Cݘ1c:r܀Gp 0d0F4Mu48řF4)j'4LJi0nv7op1p,# !MMcFT[ |f2rvB\y c}9#'yT*UeY??^2fc9^XPInjsI^|zQ[2rϊVЏ|Vzf;z,|¸ ϛ_1M?'HPJe_1+}:n Zr!x7޲]_yñ۷_P3}{]`ҒŁWRl7m;57y`P(ta677wvvZ)BB#L:ӗ ٞ{ >G-Ƙ$3.Kr if&q:R)UUnw4ըkz)t( ҿ0G:#tKA/nUءh].ɥ.D֍;Fҋ/{쵇]ុYvI׬Ϸ~ of))ihh)ҟIH mgq!Gy&p|Pf''PBy|b8wvv}=ܭ>owf PJ?s 'NaM==z⠤s)$c5jTgGgP ~kC=$ zx4>b8 [ Baܹ7^KFԍ %}ߏΞ=+>6o^uQGCB@[ֶp ƙ).Bb*mY30 ՂU..0 /ARo,(M-iI%98#?sokkoSBuk+'MUG$qzS&LDkk)%7ȑlֲP(4fԘx$nְve߉&67}n"I]]] C Gscs{{eY&O2FW[\~\~Fݗ~_?DLf z! RC92j8[:F7x9-nx^DjVUjTU.'cE:ӡBa .7X@e & ZQb;]uU`HB;?:9g}.Sw1I@a'Mk8!ēO?9'gY駟Vj}TӷCAJ'y5h ;CG^%WjҠlg*T~VYfmkmR[BmTy3Oa`vNJH nýk;hyZe+z83/f3sٹ$$ $4QfQLO)E~<9KKݔ)dTH" p8鬑1kV). X^פ/5J(4mv wHI,-BJPJaѮhkY"JEzg#Ŕ OU3snࢪެ=Svlp_ECLm UZ׵]qw;4u̹{Yx{O>mhn`H" 8SsJ\j?eىc'~ ҋ/G}ނ"V2MP(T4r6FsP/L*idKw"{mlsnEŞs>闟^veD| Ҧ#etvG^|g\ )잛Ҕ,Hi޶1a*P=_F!I'rl7cO>dEj(뷻B{ĉRX뮷'X[J)kkk=X)&ұg ַbRR;1 >_H'oWWR n|n77$d)<=lLaoD[ |r9M(((.-_zyȜWt&$L&dn,>SN8.n*Pĕ]QcF-Y^F/ҖpmK/O&m]sCs[zu[[|BIumBu=k׬]bF}\r%ߴ75ӧOBSA0y y.-$0mK}KgC[(Pp{&L`ʆn !Ǝe z\cFX-D 'PfҙI?bĈ JR5kض`, /l2P%h4nN>}pJ˂u0 ϟIlVnnՀ*Qs;;;G%!e|z|}Ou8//\H)\sM-JeK>^#?2~x!_3:GiXڏ|Ox2\N_W_y>}z$Yt?O@͛79\d-ـst>KDz"ߴzںZ{ܾe괩'P1<.TlSԭMMt@.)a큢({wmMpd;G#K|)]f456 '1L&+^ͯo+8tn+^q衇s=b>fvuW!Dn[;~R̝;V!̘1TE  <Kn;(@x^!d!Gvu?xI^J!P'_.VUu䩶'6|;grW2t~ɧ<̳N鯿N83}(NF{;S|gS*qg; ya| ){wl4cҤIdLH(r='*n)Stvw~/*wSJEQ(C{go29t}_NA?8/|u()i MiP0 mƍ-jW-ZZZ~*رcs4iԩSHS1\ϥE1SaV]XO٠hӋQX_m^@6ita U m ?wtF2 : ;g+LuD6 l7='~HCh/d3٩S^q{* ?>:nW_jP` +{?S}lӎ0y2k\Œ/%*Uc(jjj\n3wɏB%5qIF@I^*'\Ha{>%Wb,_dspE*c?z7 (dŒ]d7M n3@xpڔR ;0 Ln}^~cJ, Wj3p@J$|/& BH&7S[}NISljըs>)d: f¤L~h3OG1|Ɏ%0 >w!"mZ,ilyiK'ǏO~_kaϽ}~;ē񼕧2L2* }MwEv /%g~F&0o_6K都Zx >!B1_E#s Fx}cBoOET_rQP\HB c/t|Nb {=]\&N#Ƒ^{o]#F?<4=9/T CuqǩD5ˮ.=1,S@dHw燙bY_2n3`!^N6->:UT9UEQ!#EvţeSա-PPGyXwG$ŽS[2c){\HA l x'҅B}ݗB$Yݺ8IvG\yo䦰)qG ͤ )'0~!<',o~RXbyf/mIxݡԁ)0GgwlUTQE ]: /+1D61Ы\*.kԘQQ*a%qʵ)48Ӏxa/~M+楪؁-"|G'+*rl cҒZ,3'?ɏasp*i"qmlju7V6־u[eYEUTtȿReи(Xnq2M[yiI. wll#?Xq\L4m6jt;0m6jt_sMߜUTQEUl:2{pp,lNv-CW.e^6f}Ezw$ܭy>FWfr?it& U5*z0pL€6q\kqc݄m|bn DtUTQV m*e]~p;b]@i<-!61=M# {|8K,<(ୢ*b+ņ',A@Bno"`>#ol$en3 ncs'sInr)%ܥN]%>9y34)O r,nesYPU2)!㡄 )xdFWEUTQVV6EH"ƢCi Eq:N-)j$'PBk[hiV}ހt9DLcZI~`|[M4B:f'$#[o`7D^@td!YfJd!,<ޡlo欢*bӱ)arW c`YLd3}EAJIT&6d!hvSThWwW*JP8TJl[{]@&;^>[*%wBy(BJDfcƌ 0MӀar TTM Oox2nww[%УUQEUl@[@{N O'v3JUF 1LiMD;{:4MZKӴP(;u_=- )l0 (?$&#,ϧsi)$˽}2HZU㯉G]] Lϫ)7HףdH:B yNZsb_H)D'f, & PH$uꬬE e RMUTQE6 eKnlPx4]%?vwUw!_p8zSUQU&SIZK5F$ɥr_[0G/JHEQ>G8P9#WSU5 PFJuMWUuܸqy(p57>a|+$lptg UTQEUl@܀± >-?6V-3LB)E|Na\ L4iqK䲐/pH KBP BX*UZ֊i +7xtC VB@nY Ղ,ySJUDH-L$(\㑶Z2$/ucQRWtEGCp1 `U3UQEUl+DӼ`(ISkJmNn4 k2.; 5g(PBSw<ϗ,BȫBDHU9+HbHb&) 8]ȰF%Y{{*CΞζNNmfBb$;ʶ[؋_(tf؄i>ڠ7JnSnηp>-مVKmLjkUV |UTQ֋ uk?[&\WC᫨*V ec=ؓ~KΛ*ܦ)} Glm6mt|?MߟUTQEUl"2t: U>gemMkS8/[?:I]rVQEUT1wa{.=^eNJiɆ> *%+yU^1[ut YEUTQŦcle0( ylv#|pv$|px ζʆ4T_誹諨*vlQg-_j/O6i_;`nU~m: iKCfiDK3#j*hR8 Ya0-sFg7gUTQEm30xsyawuP)ŕ%e4\Z>o Ro2 L9}Nsq/0+ =F 0:E:sTղ$ռ>/AK*$@0Դf՚_h"нJT 'yǣeZ]5MUTQ֎ D$+ PPщ'jfq˾RXwnݴ\6yMLgӪZp:\KB|>NSʧ7y,#p!: _?-R~E)D.5z/c˘E(|& *XE h*j)p 8~"Ȣ_6LkFMߜUTQEUl:b3˲r\!_R3rA=L&H$d===ѾL&\.W*% H|d"P 1I&ue9esڰ?$3FΐD*L1 Rh;HuG,t:]XO%r\.ITkTQEUr]CeU!/_+NqgH7tv9旋T+ץj豣a c#F0F4mu&)Z:ll)-]r]6䦢) Sjjk(K9jaDx<+kyb 3OK!Cua7}sVQEUT˖/-SPZfpiOt\:cY xgpLPQH7%T4ɤ4$!cMGUl8UlI&̘nrl/mSt֠sTRHHYl.+ёMa~9GSIDATgҔ~?TRǍ HCؕf]o欢*bӱa'ϼmJ&p;*/t4犉Љ)qͥ(*RIɔILJxrYՑ6B jCw XLaB0 ݁rw -nz> !|pJ|}MN5=i 7S$PZ,c; 2M$0ʚG5֭\6 J!ST,c CtŻ;G j\UTQV 8ٕfp PE#Z**4$MMeSN9r53qۯAZt<}5LOL"7nDZE$Q55ӓN7at?`_HbVɲUc^<)M P"(l•/$(d TRsiS'M5"P0dL6nhk'NS5 SSad@`R n˦% 576n ݩָܮ&3g2y Jh6 @ u+La`HT/d 4  $ٸ}7gUTQE {F5 @ww7W8SY) t"R)EQ\a B xFmIp4ߣk:ReYa/.<.p莤p|h guMCD%3Ƹ5EMNJ>N3XX8ξ#Is\,l誨*غ0_Zu:MM%R!4̘өxd#LBB)3ҔimW(&Sx7FiBۻ(^jzZjY-2 L , K 1ax $n X 0 bɳ-Z:qZrUwUuIrK]gGsoksxO:MBǷ;wx#vBٵY5`/ٮnh]mR R犓"C*RNӉx s璹xkԸz8)@^GtHnKyo>uwΤ`ztWvT<F1ɤ|rNv;GNkoȏ?@+?\:y΄M>{oW y#Ϯxfg/w.;4<ѾȾp )4..pǷpWy.}r]ſ'laN}r7lsK f2?hm8Nܫ;*h:vŭ~/#&dvat@~lyRz88|``GksA;~v;ڀer׃ X$xHfqavh7laĔ>o- #+&wi[3:^.gRb(zx"bz}ؐK:{tn$Զ80^;ӀjrWzďJL$;]OyT{ԝz}l:a32z\#IfƜmrf酞8řb!Uh/$3Xt}:BӕVRԮ.)>fv96}:| &7Ly6ZhЏˆD`qeYОUkδm9wz=m}]z~'?'VŶ gv\zwZlmzAte:ᓯ~r2 eԃV[egα0gԶ\&7Lmfgjr;jr}ꣴ*w0i_ɅBo2=9.%Jcj"=Q#%ٹYsB#T.)fWvruuutu:{5=SR.:z5kINkxzc&7s?i%]]8`q4M޲_~fFmav罶Cv0oO3VCZ +QJRd9'Mti9 ="1&PZ~GZJ)ʹRz2NRw,ctt!SkbeԼZئ=39E^m0JS=YGyosA;avv]8`QT[߽  &&ײ[t/8qs1#gUh6 YkxZUx"ۯd #7:|a55cm\SpGb"7㧏V a;I' 08d-] MCK%Cr vvN1SZ VO/޷{_k5(G:Sv0 nӧNa9a+i3̱GJ6m덺6Mn.W5irUB iVSl*O--/& {*?RYVB(Kis/?sޓ29mp]Wnv#ޤv%\2{:K < HJ#|6̈́z,LSd&c>k4tz(Zt.xbqa=3luO~O1WB &FB$;{zwޜ劧T`vjbVofgf3?0oyLz> 2  NͻfW֞եI6ZeR$p'8D22 Sk]^-:0)tZr#L2CPTV*J+[el6"18qeJ¢P"`ȵL\Z\"Mid(XȖR3]is{ޮ;I3$<E?Z5?F_ i"FE#_ uȉ+ֱ[Y˰dH&룊;g[]6]i[Y5~v&`GշZĒg:d ĉ[BgUA/O:ٵ]١<N78|0Mv_dW/;_Z/k4Ӎz̘YtZ5tt".8׼-霎?t.$ U6D&Aw_vޗf?;E ؋Igy)+NRX?O.rm2 Zja$( P+mK0&Y+h1T*)=dO":zGl* @F2RdK){*i%}ϷLK$9L%C? X@\rSVDٝ{2]/DmϮ} 2< B[]%L~;yB):bѐ]\^\p_ޒ6i TVI+iv^ .RJa0 QVZeM+JЕ 911FᅫB}{vuv0 |6'ND*RR1 ә[w*k*T԰ xNWZ=pelhUk]38{\*j֚0={jERD"Mgϑc+uEX,6]u%t&m&MΤTj߁}K Kk5np.Ҩ;L_)a2!i;k&d Fy+<17a5u2Vif[iz>NT29IRȏN JS%\]Y]̔f\ו\YYiN\j3튈)L)%\pߗn9HFB2u]ry4jv Qfß]n L3:k:FM| Nq jnM(ḎŬ/\T"lf U+Մ)$w UkMPZHFL34VG~{N,-n[N)W)+dٴG;qS8Tfm&0+jcQih(RZ2$I5ʥvrwjT$xXHYr=Zj5˴_?Ä  ^WՂ( ;5tT5jA+0i 'O=V=k[Of'C(d ai_Rl&~<ߙ~4BەWO=wvqF7`\ql;{G/N׿k▝a{1RD×jY+eu*OScYoJ)wM튢岹]3DVTDDDc0 "eXLn&jN)NsSIV,tyR*.QiDi5[KlI+% & ҕO{Ӧ1 \hp[F[+Rj2-"jKq$RxzKJɈ#lHQjZXյ 1F490VQ3j5[m۶,Qk-k 7T;;m9|wiKڟ6 ^p0eaئm24MCjOzf4a۶ikv}Rַev[\+9T/}Kmklkg)- bz,KxOQ^rKnb j{0~ޭ Ԋ]]U'Mv:lLF6DI۴7Bol'm6|K\a#̮Oz85JT7\/_<}4c3$$ 0L|jziozu.&6qlfo66/\f׾S; ''n/q7KnzɗKBZ× a0gΥ0mcaڌۢ_tK393qED"a[v̸5ia]tfVM{afLjqƉYсRʥ/6<>zQ JtnǷyY]]M$$G݋$a362L,eKV>P|PZkvDAQDK BKHqv:?W]|zs}mUo՝RJ:a%&|;Q'^do`}s˶ =>'VO795I;8Ӿv'FYzon_Se//]iy+bJս57чv8D'ID:7җGInn`q+_}9}r8jҍze, C|;'ވ!SzYIID*dbe|̚{{:e ;g3{y&mމ(YXq{ u_l_yoyOh/>rե./̤ZM M6)8B/.fru(0;U:]>mD2,pمdn "e8έ4)uF{R/3Zje'bxwܴ,608;8Ql֛>to`6]K %DR3-PJciHSWUzzQ+Wi_.$!]+z׬6Sxo%2 6_v8ϝ\8hg~nNr%fg|\2Z\!DH%o };Q.NgV|4Ǐәk$/Cӳvd ]m5Zv.6^~gmv=WIl6g'f]ǭ7ꂋzR_+RfJyg:k{lif`mW cL3=_i$ҪZ~6,M+eҪުH;< Nd29빮t٢aZoavx Yk]*^4kM4'{ o᪪BSB^^ZYZ_=+ YJZQ05;j ahoىl1[\2?p6ҹ2fvl'lj^y4#"y2JI;ID{Nl -5=2`\;h)B?+յj\T?D80 ӈ5< V:v|1#)?0 |um5HضQ2Z3l6QiVі_8ZZkҾ-WI PW0fL:cpczf:<~w TvJX]|7bON݀er"RJjID܀5LSڕlZІ6Zry) v¾{'Jagr Lx{#ғvO3vq~o瞴|ST:^n-/,K% nLNM&RGMci#)4J+)브L幡|m^"0m']v0>Ϳo~_~oannYm CMc^wZihdnRq~ndCYYZ%{[]Z+ Bebh#Q)_eBZ\[Ko<\Hv~;;3]Tp\_kM'Ldժai +Jǫ RWAFģBk~W>gI%׬590L2L`GLo:yd|I@"';q61+73fd-:ي?+8u'}4f)HH& Ul֛q$9wiP"{64)l윝&]*kvixZ;7fhOl>1TWh6ݙ.[AGje29"l&JKgh~-]ua;. ^4"O ("y>ۆkG|,zE*B )F7x\oyW+UZ3T!7bJLikSL]45n3m;6]۳R6Ms!8TNŵZ.j[u&&ݻ=z3T}kZKy#e0!ON݀er[q[FQUꪫV|/ nPHur[Q1Ʉm٭V˴M۴zL%IK-dNt |[L%MaaXq+\rIe Ӹ[՞>%Mfެ훛,MRD^qϩ<Ŵ$*r=BQmYef(A#_7Tiުǣ~vت`GLfrƗk + Jsä+]?!i҆TT[yzjbjem%gTR9|D+RQkAыŅ]>55uD$0%S#{-/? `P3⊇,4ѧː;_m/C "kkSS!YfbZ4T( q&;7=5ȱG&''"iNO/VT}ȶf'g0F7`/}Vu&~8R3 Sy9M9U2YTd*HI>37R*i&Yy4S*K X4Rd*Y[h6=#IZ]S&r|:l5ӉDa \b(%2flvzucg~0;9klRU4Jl2+]5aixAr]%Ziulg")li .d(-ӚnVq'd"1biL&T~34L2c[vDQ_jZ~}Zk{nb9( v'u J0+v^^>{-HvN/ U|ϥs/hs={\)$4iRTUB?lw1/(: 456MyqWmg:G[b&;fۻjҹ|.i&%?MV3mtt|[f7B ٵXwv~w|s_\{5 a4Q+{0~_pZQZq)u6[#'&~\g'Hxةd3wt&eT}ڴ_lavզ]mU-N7/5T/ƆWv6tv ]wt˻$] חZ1-`1]7f7Gh7Ç1L#f+_8/&#zLh;E޽R(I6,aQt߃Y’ZdL:3=5T2'NhEdhQ|۲ߠcfקm6 _Q!2D~"Ta%#͞:y*\+dpM, LnF7fQh_X\d>aV{3PAy-#65=5oԱS 9ZE 3Qq*Z}﮽`pޫ 3:mܦ\-]~ hzM+"vv#ַRGHE3"d̡ÇŽwjTeRC$vGioU}r}uxN#u2 Ӊd"a'gggnsJ RR *Ne"?!q?1_n{t]@F8pmk5bdYVV<\/˔̈́i۶jXLI o[FMiURT".IfvqF79>U0A|P(T锝Z)d YRST{Nb ~Azhg#<&?ٍ|(C?=sN|PTl/Og+ +]sLì,W>eR:Кi[_>\R-9+i;|DDv0?RLeYM/Isz.zݗT2U,}ϏZ{9T%zۜS=#41}_kyZiը4n3IrRZUk(9ya\Nk0g欔ed2KFn3;dtoÞ, %#(hu.ւ 0 닰_g}s-u0f©:Fq#d}-ST6]\ZLgLf$Z" kZ~a6}Wyެvk ˜0SjI Tf1$i"Nq]s& Ǵf7rƏJ$k#BƙI&cL1e23&L*)\hH.@FBktrLiq:Ssԑ޾٦}n{>3z>s3}s|8yG\Y]1L#O' Gܖk1Z*ŕVR0 ð ~(%S3$t}r/xu&-=gdթFA^[VʚLH$9Q!Um4ЁClUgd d0:xK䆿*K䆽`b׮]'&EQVɥs3\Qi0L#L9r$ 0}ǝO2L8ToivX&0ltӾ s=Xo"ėfl4}"5 `DF<|ya9kkQu@@*>#~vherh[\^lI;uYov>&ouf+j4# ~>9`t}s. uoǽhD;rH:> |+m.h1`'Ν:WNww^b{ھ^Mo# `;\η}[뜩\:Χ W_s_˸v Zt߾o= Q2Ks>_Й44|s|3&q8c}`< ΰ/CB׹0 qsȉш )ܰsAyܦO; s̮w<NY*Ba tJnw;{Y'xvg4:.F/f/nز݆qf 0 4M4LF\%8s 7jKFh3.80 ðLKBɴdU+}C06l?{;Fޜv XTiۿۆ0(;oygWߗ~z\:gm|׿xn6kgRΥ韽oٰ~G9K. Ϟ=4c_o7O~w8t@k4K$i8&ai=E/|Qv$peev}}4ssxWF=~/}KF*b . B_/Y/ca O@Νo?h=q@vp_ 7¤zEFaɷ]?xG0S}S{o}[ۙb7+-s~ ;Qۦs+x︽4w-wp--5 3ڟO}F&ٗ ?8rA˯~ q9Nv;]qꭏǿ$V"ErmiiiiyiyiӞo۷}궿?$-6z~M7]}o7y{Seٝ6qKu Ͼ%Mf*L+Hk7_|?zݫ_T^ħ>q~oF"VP eqk+:|EzӞ}ui5bC$sÛSP;23aM|R{d:JS<)7dl:84,ӊT$H|:ﺮzC.}r׃I d^c'NSSSI+vWRJr'90msў LffrG;L*#U>cLZ KSD:"M-}ѣwoV{q3^x ڳRoټwN<653مn LRl&HE:Zkcqtwsͯ?wximӎe]u;];v*^w?}˕r$SOu]Z=i&C/dqrܛ}s7e/Y:~O}G/FkwyCP M̮s DoÎ|*l5['R*+We׽uUW^(\~erỳ(nl6_/jv{^?O7mKNlΥSS׼/뾯r5yށ}.ѡKJl.L N\+8LKjd_rK~i?ߪo폞|UU]v)>kdP0^C%uR뭡ۦί:= ^41"M33_W'&&d$U"^P}cRWlC=9Cvt;eruJ$Zu#49uNߴ$"θ"ҺÖF=w+4njS? |?߼+_]?1;}I&]`|{ֳ |+eZ{\{ݵL~2N>GݷwG;#J'n/_Wp" C8Ym #7nwV9_]Y}s 0M0v}+1!ie1Ll `ŝl0>Lݕ8Ɏ1F<4'""FC|33ZmYWz?~ީ_}^yʟ''׽uG.?V^ 8}\}nڵkk_=19BO~'_J\!I>p>zRQo0~_~w[z_zTH{w?vw݇O>\(m08w~orwnVpW|_׼fN:rc_<=sz‰;W\}V/;o|?K~%a 0 `F>k^],ny-nn|kw^wպy'?7sı_|/f>}G{Z7ML:CDҶ{±uRk˲"n.?MZJyoy[;'&gzU-~_O$v Ϲ;/rM:$NA;WZ=V}/O/ͦ }{F~ i'ڴ\[v(HEJWczK_~xéTjzj;QVWW|g?s}W^)+W_}O۟ě~|39~~]Ba%4V{o>cglg?X(j7Ʃs???o)Rӓ{vy_}y_ݻv_q#9v'ݻWsg=h~v8g3B7Mwy筷V.9[1vѾV\ln+.ҕOb4iuz_.j~~>9yNʾQ\7׾R+h~'^|jj[Doߺ֏7隫yg[n൦6Lqmzuzo~3LuWH1lp^lgSMsW0ONN-o6L~7Yz֯0&7- Es{攒Pc۷ڟpq?!F{ݻ4sn={+/JX{m3 F)۟7>7\ƑK/?zT;V({͛kՖE_+糒Τ| g wprBl6/}?7$?w7/}֏;~o{GNHak.ջum"s`^<IDx H)Bo1ֈCo&- [)?GA~80G_Ij(/ p.(-nT.'4*JcJ/l6q-v^I^(KNi2?Hp':IKF$˃]0 _QTB@j"aI^p&JDHtYR)2a./BI(.%HJ@5>nӐDiD}i;"mDܷ/"Y}"4(2"ˈՐHDY"$W[A"VR!^CdB LIB_Bdi"KY"Ux{DFH,ԇN+D5D2"t4Ndr8'*U9*U *?~uMhrB %AFmPWX)D!D@=_v8Ƹ Bw(T<=iis)FpƦ-9/>yasN;-))I@QM/륫6}潔(`m F>t.  \)9HPPB 2K(hEexf"E;Q{jI5 <, WϚ9[7Sm]rjBT[t2}fq[;ֺp(VCW?15طyK LiӖB ޹|o۞=)lπW-Zg' >@`H2Z< "Etȯm7v_\Ɋ.GMdjVm*.+Y>)ҒI ,3)&SQtX^q*3ZX2M䕪\mair!,n"#F/@Uy=fnqH["KU&;[d 6 A~ben哖dDMZCdfHȌhO FaV$aFNdE:Y^IcD&'EԿW"=&jLT!jW-(mH ;Bd^)4hYH5"u4ZSdjHY]XdؠD`-yZt/D"3%*L*%7^rE͎*HjHdR[!B{TF + j"|j(B*"EwDrvj'E̼PMbjT=QPRJ5Ш*j؈E9u B#F5UUY(TSջ&G?~1p8z˽ӷf4 )fL9rUOmp&[ZqmN~.S\p"0S UMDH۶w2iW#:T$6MJ6P @rj6 x8b2Ɲ#D=5CaCPlb#F$j*]BaHqέ΅])wޙvsΩ'<~m;lɌ}V>!U%NZPR^.;mjbsvm&+ɣZ@03+r*ΣQ3:0LnjP3_y.|}3 x3y^~.R.:s:=ma*tB) "SSw_booU5ݦ* !0':LE( k٩$Vv̪Cd^"3cOdym%kɃn$qD(J|P+SEdaH"C"^d,(D8N$h]K$&E'2/"="æӁ$'r/m; P]dވ,lȤ+Jph &2_dB"(ZqTr QE @a!匁@Wt;SJ&46Fa ӠqpJ)WIL pi^~ͦh݆2@Q.LNIM"QݲwSgO9V?GrjxBFf)W()(,ܯ͞p5Pc*Q@!8PZZS2]͚5.Ye!)~eCg1)#,]-:Į:U;UOZ|U9>~Xo#4sSV :DYЮ-?_f8vpǵ3X8Sذac!,B! uߡ~Ziݦ%9f@a^zgtv4vΥ;WA(՛=ΌO9i<@ypv _YII'v/C#ͪ\ soZ,_Qp8/kBS-:&^ܮ؆5 Ek4_ͷ8ީFnW+K#cN0جp(`06nPtvi#ePv3sүg]Ƅu=9 Up$aˮxPJL/='+ A@tn}ctJ15yEBYb"Mp~ {u|=-g[6sO~_Y]kf륧.ܕضya PPEP_խ O^VΩsw]~G_rgX>Ȅ8Y&mw 6ۢ@m[>!dS/|{lc|صkm%E<ؾ<̚?O39z5k 6UѢ#b0/L>pĜ`Axp86 '|~#Hr(( zBBDG'NCSu!B(D4 aאBI9Qx JBQV[E6]ȢFt^Ed '_)R%_aWKd0|`Dk";QFL*-QE,hF4NV]$PTnvBp$WLpBn*"]+=HgH@JH.'r @8p"76|AHrAgJ-E&irH(BPN % )6FB(TQ92؄&-3-DPA!D#6ݴUҢi?*Go 'JO@G:_R( Lv9u$'Bg()0L%!Eyngy$D!A.D(0ᰣA0{#2kyDB"9EQ\VHg" XA"Td"m{D"ர\Ln"0"펚"vhD6WI*D:*D&zIL-H-HBHHOHw"/"@I#QnêTUp7i,s?m3f]*_aPPb*2Έ RAqͲӔPP!xR3SJ)&Y4xA9W^p嗌 * (aOԌP8\0HJȤ0ͦ9mnj*Btv}|ǞYpfZr&j̿0aW6U #??Οt'zn*֣SfY/7s`BvjMbj& am6ÏߺßNڕ?ފ8Pj7ѝA8ܤD1]o~3XzJJ* m[ 6m L.b#)b0ʄ&vn]xo3- S.3O9a{um[%pNGrF6ܷ}ŋ֟407nݺ -]s|;v@x,ַ*g$B A*5W]GZ"ABp:PV Df:HHFP\܇HIICq)4'HI/. 0L#@( v%` (.B߇H:ِ`AYvDL*@q#USpAKRH|>YHHZSd$V) DzjtU \4Ta Lw"+ F^A!B(/_+.^'nL!@)UJP2P"h"625 d:7J cܚN Y4s bD;\<'^0Kz :7lM%*Q0.(7Ǜaoܐo Ӳ &v痍~-۴I)Np=EMIKxpy;hJkw?:y疞0rSnaY[ѵV-(D[ڶnvl9/_G`Blؒ7v<丐Ѧy2!. &1hѦ]Pc^uܱ+w۶v0Kѧc6W ز5/1N.e>FLn?z;!׳>0p!`@޹M9 ۷olm1yEY!gɚ}Y %:2<ZAQKO`8%p`FVv6MKN\Fhvrn(<͚>=PeU=T0Yz LLCPZgbw)t ~JAN LIE ¦F^)4MΈ  m2T^⠋Lki t װȔEc]y LJh@dRrd"= LFn@:D JRӁ½r?E LO}Ef&V?>,iiRdz,l$sp0UQs4q|`6IQ  5[(:4RPb'6k:B@S} މX,3oP3VLPP;3NibSBkȀ(ѣMafQr9$‘pؘ1sEG6_-CXrן?w¨~Zviv°5Wu4g]y:A8 zK~u'(s߾-.LQO!%}?m .AEKSBޭ~uYNnNff@Ͽ^ppI@ ӓf-HھOq3Y5p p[Q)!dC9|Z^BTb&݁/^W[;/~^wM<40mvq]={%>,tw3Wuȿ:cѠ>mꘘ8}LA |ۂz 7}͜@Hpy lHtHKFA)Q8®b + ;L% T4 s!$BaH| 5 ~pEXb-BT!iؾP"3 ȄYPNRd9 ,DrZ"a*E4J$AC"7"w4 /E$ Cm@BDȢfؖ "S]]tCr"i "̈+YEdY:Ш&ҩ?Ic}$6F ;)6*UJU$73;cv`Đu դ5MPEs7_rӞ;~XO NvC7nܽk7!D#LS4Be U*P"w=2#gOK W(J<p 9=UlEEkݮV-:~IO>9ެ]t΢FBbKFY`;!#).JIivl%Lt3 _Pqڐhj*E$nnXHeE׉%T+.SR $̧8lHI4r 5"â ӎ$H${?DQu 6)Ifqb2Te%]CjH#I ЋHH )^L19It rАd.(Ab]"#$9`"]v$CDBFKM[%1H0HK쬨0D{Dj8.Y6mY7OhsmMQ4ESTpPDP5wJ;\BvP`v*T‰Py?{oA^!ġع5EFmPP@eaGǎ+PB{g?!D Ua Pb$r]5Ҍed7OrنХC?:cي-XĮ&e$t9) ga@Eǖig/[1WA iKr' A aT+%ӕEH2DVN2Nݳ<,#Qڗ_N &d'Y0$7",ؓRғR+dB=!СR"ZHwu%z=MghWI)[sNWmcx*'V&3)͙fOz)!I ( !UTv ٍDtn@NMfOjќTa5``;/Yp:%8BP{ ӍQհ6Mw :=`Epؙ˅( @ ׍ّS M]n67BA^l6FN L'%@#TSdqx" {S >͘Ȃ2lHw"=UEtCZ[DUvD>"uUi~8ƉȄƋTQOYD+>uLhH'6Pl"&O@"'H&U.cfdDBP B)%2@PaWJF8!0%"PX=SDPƹBW B,K]aYcަڬ81X ب (BpaV?rlɒ-b\l墕[7m.JH?gYM5{bݕh[qbMڹ666l-o0;٘x闾wSBm$Aj gh \v8(r@ 0Bax\(v@Sᶡ܏D7QP$l?KKK LO4 !+-c?p^ 6 nJ}HJ0Q2&R<X".v+E*)"HQP2&=0 :E&@,G@r68UVî J^T a"2 0 L \"QEMAn!x",cH>":DjDU,9"HϡE ԐHHPCyŀŰHNOST MPQSNU1QfSl7 U %*+v+ՊSQM"6N@B4RDR[̗^x[K(PLaV:SB|ErX|G(f0U4MsPUkճ0gb9m욻q-0 f!QUu6ޯx+z>n(݆PiCP ":$8@6@7 ]X15p[iG0G7p p!84 j2G&(r މDμ ! DlgdDyRT6M-RXQH@8 !-"׶ˁp@$)-+=aD_pn~1:\ %h4##v(DǞVѣ&Psq˭Ns?;y\rrrgI{LrV( ӵ?6e3CD"(rvp5zT (7|G|~֬YhTU5yT-Z*T"H$DUH4v[jY^^nQ9/*ECM-U"H$IcQTꏎYr{I$D"9L6C7PD"H+!RJiNjs!!ԓR! !XC@: vxh$ D"Hb,tI&՟Cw}״if̘QʓƝti0ƭZbUU;Gn[aBvsI$*2;3:[=jqBQEQ(3\l?Ìg7+.}';ʫnCJbz & .勗7+Ӊ! D,s NykPbcĮf 1Cpamb) FZ(i9V\T=`2I)UlM J(7=V";iIۓk;2M2ʈZLFj  .8窦rέTMufs(ҫO?SNVgM?e&SUժ'S7UMg{[n\r ;D"9 n 4husΗ,[bŊs=W^>/{챚'XhQyyUE]t!CvU;[[uŋ_{յUc#fDAm ߙ CRJ?[o5-=MQ!DvvmwǬ?xLn]tGHl^?Fz'\2%9zyIMM}+"|bSXtۭk֮)/0hfs܇}o7p^矽‹>䓉7O۷/*7hJk=vm-eqg_0Ϭʪ+..~'G=~?xcASO 6lUXTݷ:$2镹s斕AAf>h` YtN?:ԓLa>㧜|ʘ1cUWC@ ''{;3:,J荷לf1v\q7\} /0YqXǥyyA#aJmqXV˗/zt!zݿ""R_eN+[9T"9!DX\ Buii2ڷoo);w21MUanښ srr233"!5nC )QT1'‹-ZͣJԖ-[  ;vܵ]vmZAQUU|7OsƘd횵hd۶mi-[^tEpO?^rĉlEAvf,\PPP[bUzJ#@(yyy6l =++sK,iݪuVv֦MJJ{tt:A lZoN..,矞9uܩ&LPU5lٲ(G6{=ǎۡCkV}Q=~'9M6e/j2ӬYUVEhJJJN\NW\dgtmٴŝ&膾mݹn=y<nVsw1ʆ>n::gΜ֭Zoں ={LII)++[fMĈaM6:uڼy; HKKҹw ))}ׯ@8?bE%wޭ{ .@U՝;wAssrFo߾}vJ9߶mMfk.+3kÆ :tx=siݼC999e;W@$(8[jƦM=p8 *kv7oMvtJ/42\e2EQϟ_TTԲeK16|Wܹso6 W^ꫯ{O<1xFwsye`3 f|5r~ [w`_u>9ՉkUH@^{]v뎭/<9g+'?/ )q B޽{4+Wgef9snIY;Ӣyo /ݞWwM7O~cc]r%ɩɩwgjj|ιaFH${ι6n7k\|s̙1cFZZן&4?0~jS Xzm_~0?2 s5k֮yWe6{WˋwAa駟>j(Z{#f6ox==zcߋ[ө3zӭVv0׮^g}];wϜpf Xf W0a„x((Y?R !(֬{/~7'sׂƌ E‘pIAɦuzxeoj+"нKw} P|7Szvy5gBygw_~YYY_~%m߶*Pʳ2οg{vk׬cNɣh(pޅ^8rHi&lϙ9sT_vlޑ;q횝JA N=Ԯݺo3~p8?0uc&y'2KMOݱsGa~=,??C6A}m[=G"egLwW\rEK&`x (J֭;_zq9CryWK$#}2~a@Q?]Uiqnnp:ڈ# è ~|f͚9qLZJYfD"wlߺ߃@ms)gVZl58ή̬&z9qB | ͨG%y~sݺuApʔ)zTB >va=[7_ƌߧhr[u%mNjc8ŠQ`4sƹXH"h$J}w~wjj꼿Qcڴi۷7Mꪵ{Jq_x#GYj}u~N^n^aIo- :w 93 θEeVv}؈aYY07SA;tPYiitۛqg~;]נx.k媕+׿)O8vdge*wֵs\Ⲝ9z3!D0ܶk[֭SSS)zݔ{غ# s] |w'$ZB̜Lϗ;/ [\;Ba۶jۮMUW#a[xH$1N9u&^h hj6gΜncBȟDt]_`ȑ#Q69L(VYzV5L#-5cβJRZZ83=}{Ou" ;H08Ծq#cY. 6aiMSQ3e=5|ч?}?i!#1"3Rnx# nwv{Ԍ~?ݺwaيe6uNb`й.0 ٧nL0F(BݻwN""83L#"Q0Mny3~ʤa#Iz7*PMs\3R)QI6-[i1`š;}m\@@$%&-_q7"f4jFa.)̰fIl0P8d2+v$W^z[0OMK3fLwXRzRZO>rf矝<ļBS?Q+IKIk޲_}UVNxv-f8Lzԩ&8\^p7dfE9E|pvK$Jh3iRzYgmݺ2i>'pBFe-[n%6Z B>;3m4EzmڌP˶QO ݬ'3+ڂk\pr?l3Y+ߝ__T5߾x֭۶m۾mmۂ#)}ѷ~;Yg9P(TXX{W-<##a=S}Ψ|b 9a'3EEEEEwеcׅ/ݷ~Ξۼyty+l۾m҅>ukn/!3+k_}Քo}PU\p ɩ7oD#ظi]wu٥edfl߱ܯK.Ͻ\AqAIIIޮh4ZgΝ?wk׭c=61-qȈ!-9 Ng0,,*4M39)yh:qVpX!lN?wa6j+-3{c,###9%ٺ׌SNW.ӧL$k -۶x=/v߿PV٪էWUlٻvr bck~on򉽮_xE ~ܰ)Sgj 9vi_lŜ9s.wܗ +ߩNݸ~\LA8>n3Io?hsΚpV֭N=ԕkWvhew760h8:uotW^СCiqi}(o_^zɥϽ֥[ZZi7p3NOOڵkFZ w'5^3j_z7^}U:v[8dP,_zwNwz064;wqVa+W;gn-n_~%5%Giia2tq۶ij+?޻umKU4_~z뭷 4$fP?h}Ɖ't86"/7gמ >vi-Te&:xh7SN/_tE Lj#‘~ GO9=7/w̉czt:0f̘r9YATEBH6<1!Sv()_NZ ;u,ҫ/egf?Q'I$>$ ~Ttч#akvh4ڣgjZ3UM CB68\p\t,{‘pLC':tظqcnn|ɥ]Z^\.&y2/Oߝ_u2SZڷk?Q{7X㩎 ߰^Q=0L㜳I&BTc~7;*Rb\e\@)ݻw+b!1+PTĤDMӦ~3OϜv+Q}`eUCa\1wWUc{1fNw*Z X6ku8n-U/c:KHݽky|!sU(++f7sҬSs*0yڮ|ΚǒM vBH,Rz 0cÏ?:Ǭ`Vn[u¨=$bBBֽw>oϾihz䟌?Zhc玺ެGn(jժW^m= !H8c}Ν;[xT@_xɅSkh$ZRXRyt]BD#U=aXqUw:-0p"Y`&3%0 j;sFeԌ¡3I[6RJ .rݹW|P@D"WJoĽ- OþpRRҠ1գ&qf+.5Ckj]!גucl̸1^Ju(HH]zwӾKOIO] ;+sΞ7oޢE߿Mݼ{ߚV=Jķ'Q=ZGEnb-Ɔ1q"!*FrXQзoߞ;@ZZZN]bqR(CT.\2 6defYmF[Uh߮v-QJ ҒU^"TR͢r֭ٔz=VTCzՍW}]rQ}-d[Eioٮe`ur0P'3O+QB5jPx:t.D"9hk81B>&V-?Qhh.D"bynW3[ &H$%q&4T^?M"I7u6MEr-^x|nUPJ:4kLB Pk\ 6׎:J$~}yälÇ?nǝ\W3B '$&$JEUvlq{tq?6\uU\B{~lm?UPB}[]pC +U(Y:s^& z8L.9׭?S褴t_ni9r=jPUUuι?L#ׇfN=K/t,-["0&M޻q۵/v2go1B[ozT " _{-jB< 6)_[qT?:t=ʚCV6Oj{u!6lݻw-Cn/]/z56bR?1i#ߒ,_/2e}B|[6v PضM O6jRU;nk2_پE 5xYqO333oC,RO&49 ݠ ܮ{)LBH(r]U[_XX kBT1p(4n \5^ǖ!Bl态 MaX0ǍUGȞc߷`\ !@`m۶Ȍg 甾TJe2 J4mЇ//D",FE#M]%tVCbb[)pn_7^= ck(BH$oyy߸oU5i[H"lۺGܨփ~}ΙR%f8N .@ͦ߹>##R۶E[^,>f1)Mj땕+B/O^r9bP* .,,*,-4//[vsNg R*m?BȢEl2aM(._,dἅg{<>qZ$(!eg[]4@) nLǑK=jF}A) (D){<%%%%%%>~W :k8"2r 5= A܋& ?ӔRkL\WWJ)Z>W; E˯*0!e V)z? Z֏l{V_y7| WߐlLQVeWPJ5MSU*5}ix)pKpRO:uԨQ)))ϑ(^/(!LGhcUQ(B)uLlGwjg ፯hY㔄v5,xRUy rdMEeE$[gݑGMlU{t8J] D ꋗ^z0 BHqqq8~葇l߽F'9Uh~AW&pc9WYFO۶k| ,8R4|A0z0\s>_ճG6:e\k]LyY+UBBp([oAnVX/`sfƒő_m1K0!}3erJMkНf\oƝ2(ʪ-+ ?ފѷB@V,]) b:Anka@SԻޑ]cU֊֟EG#TrcuRemڵy7x~qwҪ~jc{W_ TL~sW'RPRz 7nX3Ǝ۵GWUZZZDQ(BI xEMܢEjCr~?ccb0 z V焠VviI}s=XFguP˖?/Y)'9a4#eqfU].n*am 蓳ݻ{nMl,+EQvC^Fue6N0f`E(7Œ*Dajh:1Jm{w6( XlGnVv8[cLXB8l{&W7Uc z3EFL۳ I&31Bw!D[yWr9i(o`$Mf81JR٧S$@p qk|zTB\veiϽ\3=UH$qEQEmOEQ>9gugą-獱ސz*dYV WÿQ6Ro7`V%ĂCp_j-w{@{ؾcOYǶ#ɭoŗ]O# gp( D†ih8 0L èܸs38cTeyUnUVڱGj];wծ1YXX}l Lf2j|*/*7pͶ2ZʫrK^~ޤIƞ4o@p1}c۱Sz4̘>c;u{E<gsee}Od}za"6E#Tvu]+ $%t/<Yu>B@X䦤L>= UVUBa)w7]۸J[nRxɿf JHnn~,- :&1Aj؀ªB+tYov{8=#=fE=y }镠vj,jMŎz7o4V[nZQ+o߾\uo>_o2s׎]rݷ[o[nZ\ؔyegyfaQU(}-кEvmmٺr[jjj]0cC) Co_xtjn]G>3n{jb#kwr71Tu.=%{g/X/ܛMIL C!_(`)ҒKK"唞qz w:C7rvjժ8A,Yiy5P%+%K0 #b4^ $zՇF-oIaIUXgUիFpXh٢Ek^UWܮCz_to{8;.11 /^|Ҳ7Cvlڲk~) HNLճ׊+*t8 =0f'ژDq3i۾-̬wMO)P֑Hᙧ*``w7A)e&CXfMOiB捛KJJjxB s[einub4:d]]wΙwya9uFU'um7ZhuΙ4k<ѱ'ˉ_>۞zvj\$6ѝm*?;/>t0؋(K/߷lknoӵ7'_ҵ cLU, (qVqryĖQ)` k.-=-jF++զ,?t.R  /o-.^8ћةK?9w~|ͳκ `&7M&7 nv@yoӦM^[,RIex&י:UĄrpf&'&|13233)K.;gnNKKK0sn> J(b>rMn:v3UV˖.?a|_lשSO=uwXGꪫpճ/ NSrOӹ ny̖3CUO8cgjVB|ӥ=Nv}7|v`Zhgk,Ϭ5a{?c46mڜ}?9sN: ˣ~;@.ɆYT[ʙ6(rǞa WƬKPvMuiK{cag5Y" LUٚ˩/9uرFGѺ:!jEQvcO9.0]uD5vr^~N;('pWQB&/CHlǦ2حwMrڶkڹm붕'Dˆ•r  HJLj׾_9|F5ە6fZrLĆ9DlD{o; dF=5+~ŕW>x;l[&̉ͷ7?7tj]{^vs@Fl6j%!L Zix!%%%naC7( `}FHOK1D(~f aNu Ejclﺣ5egwl1yv^n^( bQeJeG mvm-[,)9iͺ5zjۦQZZv.lH>8q:vYz7lP HUdu^0p1}ـŞuNwѮ-ڵE۶h[c|ƛ]vmA@B EQ8qŒEK>c_oOo߾=;vX+,X%]rokזTuuX/ ڴm~;j_*E{bm Vcݢz|caIsssoKGs9/"[hcz`ǟ\ۺY|B?(ľ -bM8nD$y-( \r괩[l;X|ًXB;Rڪe+2" ]Eiih䇃k`1f]rzivm_|-7\[m3'y'_|ѥ[j/dU+>l.+:VMTD4h6F 5MRU.tHDPvƙaEzz7B8N&3M,GVڛzT͈; 5OJE]q#"nkE߻Oo4~O>ƛnֽ)/Oj+۽S?A@P-sU[#FH}xm3H!Jճ/$.0-0G#A`τ ÌO?&TL]x1kvܙ1FK,f̨iFMPJáΊ֚u8j-2oϟs9-KNNR z4*!{Ĉ{?xn=o[neժU_Mg5(GY=JWزm  D5=> +|~-0~=Aq& [FSJjrYOF)B@h0~U4C f5}CoG-+/h1v!!'7ӻoC62JIE|_sO 7x93/)1-%)]js.HOdc3Bf!SBfhę+ҹ.)n/ͩy=^GWӂa'+)B Bu\^7d._.$x"H )"}ILL H$v&H0LHNp:_c L49Λ7鍊o*)+Qӻ=wx/ ''z⢋.:s̛=OӴ&iZ7ˮ8dАƼξDRF9FQ\\?Tg.\uo(qp*ViJ3Ɵyg]cVԳa];trQd#)1cǎ5n ʉj\6ۤΙ; ?ق`#{ٌB$''5n~΄s}ٜ93o董= pBbBU% @lݢ[>XM$t_{5THxA~mE[v6y Q!n- 69ܹgۢyiP ML61 HNLEQN}q%*@@a.'<^Omv[#22@WL~/^~#1U 1l戙U 5|wEQ.K.Қ죁w8#/N?!gK. BrraÎYtkD3ҏ?x=:vؿf!OgL8_ݴo 3&ϡޣG0M;[/ǟ2^O iYUH :9vAj.B Q1qzj B5b 9H)K.[wҹֽzh !TEp* h&+BK(%,H7qBT#n`H}j? .LӼ{*K9‹Ԙ V-5 UmgF/zOQV^p8Ki) ^8Fv[ZjDY+4o+[{rry\IiI%h1%)/zneSMqz>(:3 XU0Ѡ?i =cZnU 4u=l4<V0q"KM97NLj !ok4ךT#7 V6y9q{kTUoڴ[n ̫`c&ֽ3n :STݘVk[QYiht\+TmwUl9T tCDiY)r\.ԭ[¢b8P>M!ђJ(+/KJLc!~G6*RyKNN.(,׵ﱃFU (R;\-ٵk׵^[-o!3_?0HL3)))N믾~'Ѿڴi"7"=#}ĉÇ ?k|g3~ Q?#Leٲe8cff1HATL?Jn2( elԾDO2$S#. ,3r?cEfjf=  VOE֭ ڵiGy7~Fci0@N-2[42qw{׽< 1'9iIG| .zs]^;7O@;olKR+TYrUIqɑ/PJ}߆l4#?PJz .`}۰F*9:aEv>ҲR*56%G/jROj*իWi U~>%H$ D"57nlj IH/H${MIIISKH@xDe5AaM-A"ii%?EƵ3EnSˑHKcuW}z[SK_|%H$ D"DZ3w΢'D hj9q˚ZDK$ {3gsFA-!JܔAH$FO%M-Y"9]ė"jZDrx# D"9tsy&}Dt!@)f~H+ƥvxL !H/HW]{.}'S^ |vaѸƦ*H/HBX_z`#ѿD"4i|̞3IpF6uI$Gҋ^"4 Z0 i%4iG8 _! Y8U:I$E/HjGeO4$7NhE:*~# D"9|>J 72>u7Eҥ#+lH$3K$ɺuF >sSjXZ%KH i%ɡ<˜R 9UN"?H$-0p VF(RP`<vewKOO;h۶K"H/H$_/ǐ!7FW_~/:O:w~M-W"9r^"xL32\ݻo{ Atoa0CvK$i%ArxO@Q6 rYw`" D"9 g~]uH$i%Ao2aXݫ%I$G K$}Aױf (VX(:;ֱ%_:vZ+D"98H/HGc>$:u3s]PRy<}/65J=+rsqM]ExD{;g׼ڬaAx !$^pO{PǬZDr4"[d5G5ݛZDr" D"k^̜1cbΚ}A| cCN'{S!ySD"9r^" {''#1S~us #ȆNT OSkHJD"_T|s/Cou?EK$MlK$>}%h&ag*Hi%Y<6:2I# D"#( 5|tftFkZh$BxDM0wn{˖զ#Z˷PucM@؏ӦqM]CxDRe9]jq xn(IAN8&ʚ$Q>H$mٻ f~#+IS [l6pC,X !(&}W_Fw62NXG)>%%Т k&O|54 >H$ ^kϿ'@~3\.~;gj ݻCtRS @`H$HH$ Pսǟ}4Q*`Ie݁8h>Ed~UH$!%IcܤG _v=f4ZD/HR_]#y]GSjJV\$-x1{6#6d^5o}2q;J,!ޤp M-A"iقH^L9ľy&N9eeb}krn>#3i)nmjMw}$^"9z=߿|SG-޸z{Բ%Ic^"9ziTn-/aK;\!VjjH/Tĭ/QвJ$@:I$G/۷Cp/2 /P"%g|g"x'1bNSH$4 7‰%3Z'Z'H/̜SNU|^}6Fc?`hKSF" K$G24,"pxFX//%H${tHnn/^;ZאR :%^"[ĉHL b-x~Ƶoy~…@)K$Dxh{goqS_-VKYX ny5zDH/-TFմk7\tKk4xEK$G V_gzs)B"Vae%ɑlK$G ?4?0H1EI$4ض ƨQ(ƞ<Z7cpSkH$i%Û_ć@شj[u>™8m5pDrp^"94EEj1m(Ŏ<;Oz :#I$#i%#rF?Oİ(]smSH$E/\6v7è_p<=㦒$# قHmڀ1PM[Y|5y+ڊH}M^oS@"PH:uš5𧻓.*[2 ec昅9l*%ɡBvK$Gus~sʻg{@N3\f`^"fDr`kvx}ŊVo|wjSKH$M4`ͲWx69>ć %a좗H6mк5^y%ίs7z3'nzxZ+|x1.ؚZD"i"d ^"e B!Vzkw~V Î{4jDDOF$6D 7 i%4ɑ?b:qs|uSH$dDr0jN9!P)~t;޿{BPkM["4K$ C%čH.}/eΥnˏ?1UסH$GQ>Ui;/wЭ[S+>i޼yNNNSH:Eѫ@I5B!._!/ g ȟxKG#h%H$ pH[vom"K$,/С{U3x_x+׽^<Ŀp9)\FӑcIV _{ YYՖf4TL BߏD7uJz衦 44?ު #Ҽ4-k*HH/߂<='P'9xM-A"ii%N'u+ BMxBX Ӟy9"ڱ/9ӧ%H$ s$K D(Py Odv0({"@(K !㏣W/ݛZD"'![?]}ݑ{7~h|s6v#OM["^"a͈+]|o:z*Z\Q\RIDAT7DH/t> J/Muf`$կT˨*d/^"97>xM3/[HFZ\< jH$6H${|rH$PtEEHK!mK0j v HCH)&<݌+h Y D2sD"D:H$M'gƺ.3 yM-H" Drp:q0 P h K泛q,zi]+ʋaM-]"nH/:Sg-=&`q\V{%K/ |{D"i%CG?ݻo{{rw9.ֵǹcKf5Hg΄m4u$4~qx-P-hQU _y7Fغ9yKj={ ԅH$!K$Ey9f3M4Br^ ,߭ЦHi2H$#i%T,b֬8p-+oҞ7oF k6u$ɑ4Ɂ'P'6M(NM0GZD"9^"9=&_04\MhjAGx 3Wy-wXsG6 DrT Dr`h  ̞mRO9pթIXz,ŋqM^"qH/GQtԗRdgǾ{%vP!d7stj,D"D"SNAhW޹]zj;(m};ro&ֳK߾((@n. ѣG"H$ "[I}Tnw8'lsSW?SNLwDrȑ^"iV{kFW̙^ךM5/ʮn(V/H>HŖ-x?y, 7aP<Ԛ%ь4~8n.âק(I,%d?^"irp@0!EUo܋L  {v".D"9ʐ^I8(*»};QfheE(.GqI,),ĭ6zDr![ItQ| ^AWtיִ< ټ}+5|$! sѣKi÷?\5#s ڠdo6N=))NgSXrx'|V!ԇ4𒣚F8 +SUqw"? d qSqQJϞ=ZDKj*]_׭}hХG20GrO6 ŎM]IS/O W^"s%(G؉O'-jjo㚺H"07nEEqֽj>}zmkmU֎ZujEe* ! I=Z+J!9ssY,`Xp/z O!; Zm|O y/_,`X<BxK4s (GU13n9*(HOž=vmذaӦM= 0s&_)~X"z/϶: /5={,`Xpz'ٳP cy__bY$X3/ZƸ=]`>ruu,`Xpz𖧾? ކWz7W/,\NO̙Y.Z6suDZ76k @Sw<gأ`><}z/8Ka=FHMm{]WEb2Gz188ݿ#{iG$j{q{= ðC~Qp4QqE\<_WTiNSzawxw,p8zs_V1:Fr(>/0{ޝ?y?Ô3s6\{0a}<{qb @j k g{b<$[ȑ뇮/p ;@>F;h{a:8cƿA@c$ Wjއ~pvŋAAza؃;M. Ϡv ۫X aXraॗ`̘,Q3%tU.ax:zŴia)'@@x^Xt0 ,릌a֯d:@na={6I@ xeQ?.0aXgX8L͸~e3k``ٍk6;cO<3N츇I 4WDD>Sc׫ cѝ0}}i[mk5oCzc^Ųe0ӥ0 pGXfφٳڲd y@p.k~g=])a=xؽZ[Zmr>`aǭz^CmȐ! = \NNSaG@7~V9K/Y. oWDt6]6˅awtҞu^a~ P`۶ye6T N ;Zwgaޔ)Sӹ SJoN>7F^@\ePˡNߗ}`&8;t`ؽpɞu^ҡG=(Ӷ%BI`9T>5$\w?o9A*oOgúC22$d8l9ųc= 7Z R߼>|0@"a =-FXwO{` Vܔ <V o7ܚ'F0X{,ŊHV=1 {^Ele7Ώ,.ڽ%xΦ|l>0g|.$E?ZvǥR^xL 0a ..@`2{=ƺ+\7uSa!xyv1emo66B0Ȋ})QRxjW:βa=8_^B,٩S0th cʥK^wM Pt]5W{X\=L ND[R@1 ð{a ~y3SϧLӧFcǺ{$u+_{2$@ X560 9}M#o{wH DC5|.|Mv0u4 [BccY2^aJ}Ū%aaK<`pt 䆘u_q _|&,DEt`a8Bÿ63?l? Yrg?0 ì`rQwNEC5 k@f`d a?C߬ w܇R`^'hkn)d,_((@\X8r[a=Dp\$A@voFw/vh/n&KA꠶.Dhp 9i|߾ ~aC|iZV*Qx6D %ooIP Gbd@G߇O0 \_%MͳN>zԂH8;Qm]%g9hGs@Kأ?I@"ap`w[&j.8{ 0 {=p?k\r먬LЈ^,,}C,?Ǐwk?RiץIrs^ 0wQP䴽NO9snt2G p9}ė/FD'!&$X", D;@wRTEl@BPPkpW@6^'0 ðƌa n"Y%@Mhuw0AP(l:$@yT8ܞ2y/e@B^^{U_ 0 hk7De@Oۓ w\ΧGgi &')eu fu|p`˖O{>wz0 z>ߩ7\ۧV3vx#% ?,eL $$ [wwƻ/_{d 0a{jSi<11@`ka=p{:aXjV쁄Gaag |}`ao?xF@8'=bcaɓP] QQ= gW`.^~hL&`ֹނd#F`x]{^0 VL`MW°ރOLΒYGc{QapyX|tt @Q0Y_Hq]4eA"0 aMJeR }[wtsavqa aaa aa x(a;a{Ҁ :oKᇝ%SzZ0 b.cG.RbX^{ z Et0޸˙_ OaXOcz{z >t110eJǓ"RiOW aT}v4 k~~swz.8[8֛ 2 22O"ռYWٳ7m,N6 ,=nEx֛ W׋DQ1z^3@UUI9NF98:pܖ8sBr\ @In~A,jmetzE!1lx6nnn& ؓ;])͒6;k@,1 ck WO.l,w<[ii)2777Ke\օB]~r9::666t.;adVgM!N?k$՚G4mw2,lWMþ#/+컓e٪ʪ:WL&uJB!JbqxWH˳wIdws:פݶDŋζb?UR$s}}x<^ڽڲ-i5˯u|μ B;;?qtttpp5FDYYEQ᛹B&c]eyOnnvXd nߞ֟޾vkj!dz,%S]eIaRfvۮ ڷ1l{z]HP(ATK3(oZMEn枦J Pl/i[FD$rU=zҥK.\vhIed\nccӮUUgR}||[ 6\ADKKr-(jK"#Hr AP5/|gKKŶbH(*0?3#Ņ9s&Bnm]\*/..>s+ϳB$LkԴ:K0iu-):IѨo,o,1umII"))iՙYyN$r{۠iiu$I$I4ái(ZpYm48gsEQC*hiDEp2/\N$i-iv o:-_L>o4-HER4j-i9 7$tE%EzDdDvF^H(͡(fmӧ͹^u AM-Mg9ŋW]Z6e3LoѼ")n.PEq|Zsh/{~0v߾//***))y]7EQDGMCS4eV)*..޳kOi yKöq)jѶN3װoM;jnIOQ:.%=ߔҟlɼ%?n]oo o EEYrIeZZM'H\$Iiv0WD"ɍQgRϼ+cnjUշpn9\$}ߦ'I2 #F((?~h箝_oڜUV{W_y|v_LJN/_\p@]fLVvVzZ_jUAAIW\7lؠmZU'N|(j:''C+V$I=vtwwڵ~Ao.^s}:7/w=  >uTVFV]A\~C$In߹}99|*P ^MLL.P墜9 4M֮ݰoXyǾ_nذܹs:vf/;zlh4EUUUXbٲeF5],ݷ8p (0Zٵ@ d2v"ĂAf_x^a_][۶nEF1!@fZ=k,XV__yuCMmM>}ꆆ;[oCGfY#-LHyΞk5FDF<2;;Kުi ' ؤhbŎŪ/#'x 83 񪫯oٹ666s M[V[[GF ^q}]WKz<'Mfm}W)Rԍ꧟~ 륇nnn=cv>}V~20 SLIMKXjԉQZ4-GMOK7MSN4xuooշN2z}׌k(b=7)nlXB(z7GƌLLHTNtJgɓ' lj(*\x)Dt2夓3jW[ZZ{ⱂG~?Ҥmt>}UeYKeU徃 BӦN>|xvvٳg5}Q*;wlhl 7QhI^O:2h-t'N$''ƑcFƝI;S_X^^>|G|ꛢGF8ure.;s̐ƦGd谡"{#|{}pXp8rjj3e<}k$Iص_~N<O);_}aO8QYQLSusc_-\pʤ)zeXyHJozWOwϐАRtn흠S7=JOK$ /uԶjW]ԢfLqW?63iUնۧ?jl]n]AaAuw}}O:MPV$QQQۑ|}/_|C 1oz~^ޯWZ}>o ^z|h2pcF+\ĂACcnjݿ>" /֐-XE,bk3f :j?3oO.zju]s*߿oxaFmzzH$hѢ3N!hE3f 2S7-g%J6n8e'|r@|>3o/y;/鏤NINNnѷ]bY^E6oG#Gׯ[VQQYݽ{K?2?O?k;y>iiifM`@`HXȰ]jn\!J7X~0 x{{O6ܹzEޥ<?Geb'];v)...QC&LbB3{ .k,˚L&km6WW?Xb&4|mv-ڶzD #J صmGsS#G Fî]}dxdԤq_VU]u"Db|1cGއ׵n4uQF'gge{xgfYYrdIɔ7gu+W\շOߝwVWW2T1r/1$ (`G&J0q/5bbEZMQԆ v+80RޥIfKHԤ$<`g斌}"T*%hhhP:)I{ɓqT*nH _+--3g{WUY B_SWs)ĉ%2/VM} D^^|D$ 81>{$Og3P$oh6d_)?v_ FѼꆺ+W gccc`ooorD߈ĤիWA3!vi;k.XXw)!px6 F$tKH"1cEP4AOȫWקL^79eذఒ⒚ښ?NjQ'_3||b[q|D uz괩v 0\!H!z{y>x8 0瞫LIIE\.W,󹖕lxUU Ba©/.˳ege9y& :;rHEQ4EϚ:k℉"[C&E=vNfhl\_Y_TPdbL}#̙35u5VBawpobFnj3o9s[-:ٹ؝;wcr8s2P@@  "$$ K,L3meeNrqu1bDdD$'=AA|R)<,+U:*9wܠښZCh4.odߜ'4͚)'(% l--2[ШaaQ&o~7<Ó0_& ʚJ?//ǟׯ_vvvc ^ C8vbyIyr}eٳ"M(zx{mMMMٙٶB`Ljg'aQ#K KIdY6<(|y͍yyyA~A.i5''%GFFxdFؔz*?#CCڇ =k̝7Wɖ;IŵI'cN4ߐ0X, Hυ zóqoS^v `RӮ_ ($Mz BXsr8Ξ;ͭ>91ӓ'O{O騤&~@͎Ύ}>;H믽^]Sy~Ȅ_57zD4u/2@N۱c[doA̔S  vKF05 )?]}}ZgTݨfLD*aYVLF G#˲>ĚjkjF#_gY/3 餎RV[VVv{uZ]A*rm%bϖW7u:VLEQ<FQHXAvP@xVkd2" *4L&р(d"M.$" Dp- ~.buD|QmuV @q--i [1| yAh[GE,ۊCC"H$1 ƄLv,h&CrHɠ뛛ӳ5dkp,b h;4!k!tp86<P 2l߯ th71arHdml56564m0 &}D)DYb?BHppr(Xr:gx5zyxB"ES4摈 V Q\$ mޮz..C$ɒBȄ GKw^v݌i3{12hzIa7{"̵dCPj4 D54J ܲu!\3,|hR\D $X9ƪ ŎJ׮;DdRjWW b!!kۏ$IDL011o~5s}O2XutvmhЩjl̲FZZ[vI$T (B$B B,Idٴqŋ9[niCp F'xNת-##"-Z -|>eY zm]c.B().LBA9ɝZ z>\Vƍ'R;B"EQ ھs{fvöQQV!!˲,b9ihl8x ˲2{YP`I (J-m25ht-?T(Dbd25?QH$&t=Y̢!QgΜ:eWKMI_ ,Ŏ/Is.44$}I[RXr:%9>YkVWVg/[rY\766vҤI7l|7O&ÍnhrCst:XmR\юȺ:j)Zp9F`'iuM MugΤ3!^b4DAk ~"H 2L#\zUȘǞx?_u D^uيm F#Mzn55o4͍ƤĤPYiK嗃^}_}Ս_o̓ Ht굫 .|bU]ŵمk}>, FRI1ƌGjIl L&ՄLmHD Bww⥗_R(z!#3Cf+{WmKA!AJ}'Z֒eX`won Gf͞UzT9:8\+IE]"RӠ1~~~<^AQ22C)wEP(||҆ VW[WWUQ_  2pA|M#cDFbK2}=0$2B^xsi}5L...ާSN4jZbeh ~ԙ}Cc/XJ"t:$+ pqsN( !WJ[j%Ist Pܯ7~p ڹYFDF(UZiyaT*~6؊;Tל~>cƍYf8`ЀаçՇeYYބX#k&L_XN3a|˰,úddf6"D\>O>27ul[)Z^ a˰ LZaX 2dƍ~X,&ASeĚR+웛O:9vXshDUuuu1#cx<^hX]7GYxR Bf6fQ_.i#Gzzyr9ܳgD&9{().aka2O:ݯO?(*++ r]碆D^/7''[ /y`1ipâYgd2Ȝ8qBmn6E51&P0f옟4Enj3z˖-+Wi.=zh?2Uf{'{ɘ*SΤZ*##?GDDHReFcZzZtPPyr1?lA.756x<7o+V/R妲n̳ +H<bǎ3&H/?/OFQSzjBP(ܵg `Xa/rMÆ E ;[b\!_1#vرu@עȔԴTK5WN>i\Rd+يF9n¸?m|Rgݏ;v6,cbqtt  _yݺ?#BΟ~^Y^^2l@P@LLU===9$?V;d"L)0(0v|+}}>}~GNΥ%% ]0}#rG ?}tԠgRmr(D֛KAFE,5k<"<`wOVUVM0$Hvژ1 01d4 zj_bqQq|BԵj`aނyp真7w˲r!<,?}kW 2{v=EEek[+ʯ_>p@oow;Z$Y,H OIIQvvvӦO۾c{jZj©ӧ%K>>2G"%b_ |JOOlll<<4EkuZt3fERiDrQDАК7HR. bH(wsssvq" ;88xyy)Jʐ\`s2 X(JUnq2&鬬,O?XnAӴk``@ pqq ID>>> Ü]NQcddJK111O=!E.h+urtJ2shP\`;x`TrU Bw7wDT*R9A׮]KJJ8p`XHԩS%bH$)Z(5&jHV*J8P$T2ykk+sww8iNa=$HL*{%^1~zsss`` 8::FDFA "$$Dl+^^J'%2bVTergggg_  T*A|{{{/r ??ooor^^^-b7׆=jWUW߿>>J}yJ.;;uי{CCÆMbN6c"cɤo.?NHO>GemA ,AM|%և:\+T/W~ivni=wg2M.nѷy8 -5y5rsu:n}ɒglD.\űwvY[˯˥rX[~r!ːv=ͅw{Uw_[ Z^no{:%7;DP8vZ•l4;ytGwjʷOg]ѝIDYMٻ[]Wm'9uf3u@%U1s˛---sgύu.7f,~:?ts))H ||}.]ngYvw]%wھlھX%ɝ7/Oo/f7ΦmvԸQC m7?q'뽻&Ie ,~vڻE Y(ruCĠA4Myr,rfOjwJlɓ)rratcQ!@`p ͡;ɰg?K? +\9qƫ/avдJBwA,XE+G&=#k4pн]#A~/ǐCz3D@ puuuss%W߂vgWBh4!9:8n=[v .UT*wr'Hp8VyBU}gL[7b2.Jpxspʝ ${Eb,A"{^,P:*|Iׯ$ٛZ|N^5sNmz|}#}|Y⥪O-6b7@6jG. BR#S`J0 ð Iucՙ")'kjƨrXٟhV$Vc v|y\XOωaaX7X" !V&Ԫ-o0PY~Lj~|[{i]\ CZM `a)@-.<1hj 52+ ;ޯ;HC}O0 zڈ)>`h1 'IENDB`engauge-digitizer-5.2/usermanual/tutorautolinegraph11.png000066400000000000000000002232761222557406400237720ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATxw|ǟwRfEŊbE׮_`ٰ(Eltik .vwG Ǽ|%{ٙy mm4}}uu5jfu *xSK(J3~hK:'&$;wyg_9륏N;ߒT[l1%$Ca<5:FG?(d2 <~Ư;k͏/2Fu3 Y-s dn%UU|eW\֖=k'~Rk$66_ҹsN `"# 0!; cyw N>@3 f8 P$bP0ˀZM0>P  <~ $;( ̠GnO#Hf 鴂﯆DbP*7!f?үk_ki?d8bȆk!fP[@!dP4ɀhTTuVƘ BA!$$%%'ݵa)c $2a="2kkj %@!@$2e┩7Mܹjp :ӱ8` X@#@H` Dj^ BMy1(5?N\B`; ;PňAJ,pڙEID$z?Aq.FFLqpp.]iZ/F)4KaVhX JA)2DD{$0@XLin/FqTgY 5ݐ>c)) )y noH6 YVR7 {daCScgCCCaIC7.RkR6 c! uqH$ (k GZj0 -A  >$acȬBDHD d,3f!d<IH`" 0#d$c0`E\’HB& -6w-G)BAXH %qBB8`* !x%A`æL.sÚ !0lM7]zwK Bɝ]|WS@[Ǣk'b -_]f}IA=X* EPnEMb R]/AQ]$;xXTBĘW uƹ b%$! >V/$سKgڥ 88qDȲLx5YO) dIc&[GBJ )Lwte/Ac@ֿz³em,<`9X;EAY@̓F *lmu%fs*}r #;NSvx}t8W≍dgE{WȭlhA4v9SGdlVHAOU5cXL{e)};w}w0ްEtCLq~A}(D-Td3Sk%EnZ\e() (%LjaIu'ʤzJRUODVV0.RԲZYUJ1eUt*:C %Q-4Q qW%^,% 㐑V{$_$㐛Ut]8BF&JEbбb\zI2HW -5&Udy!އe *"%2M- AV +Af7@:@jT$i%d# Â0Q@:lZa2 0$jRg/;ZcÂZT`Ruc i672hB:`/cbJaID1'  Cx+`oaCϼ[F̈́qYm%Yn[u"MhԣOvj@{ U-Ndk@N~:e(_dV2*Ӏ$̱/oWLVV )2 uEBAad6ˊUTUZYF"96(6(nS]U)!f FtI2 HDPA*gnF3SvA?l^R@h~EF&l%\`t[P8}sG;=q .q.SI"f3 U"$63 #(gB VQQKXM׍r\΃j;ZE-Y3lذiSPD3MA"I&POOrwZooX͊I0], xwu-+ y$$":F(?W*\6e\בk5UHzQ I_Ѵx`,`ҳa0wq!'?>T?D - !55 Pb,P\PT[AAP^ Cn*X'0j=@d%"'B}d 7ion/$Hm i5C9Z@H,[25lL}YHGsqA&5@@NJ298nt r~@7}0dBf6!4@V M(}E)16B u-B"  MP\Y :k2uM!P?2!Rj+d͐@aYH/ ifb " k&bB1d)D"aFEt j,KMnr{|^5H0fHBPD9c"4W c AMG!T,guwR7n3`9+,[, K@3V* kGL2!d:~X#;|^qIq7>XiL ŷP0~t^fl>u;]?yxOxkӮ;Z8o1tt9'~N7$ FdKqi=j03[uSEי,}:e𬔑^7796[\v1d9{e ݺ%qbFNn]{,Ǖw0KNN*3yi{u+(`*?~puJ>RR7:Ì".Pº`o]srҝpÔs?zݻwv`.P}-&3tξX[n<`:8]ۜd0F7n.^y2l ȇKLtN7BANwtpډ]ˋ[~I` cq@l+B jJ*A!eU@)8@Tր@ܬ4<`2Ar@|~0ir$q@e-h*l` bPXBB@L Ĺ`O1 .$n7 ݀n?d b -U(up7@) 8@rP?aHii$^6Hh'dus%G 9yH_mC2ua"@ j iHh@XH] d*ZX72FءG !D %EU KNs:^WRR% Xgov.!c ~)v@jثF+Ge[.r/+G!L|̈́.9 ( 0xP~Jjt7[jAEb1UwLN~գN5p^uCMҽo}s2 Ք2FaUv%%;d_86yGϴq&:9˗z }@&nqQNv6{5Y~\ԗgl_kVoW6m@=+|}Oy';׎;fwU7N>;-^-.\]U6mlʊd>t@lϹB!DvFl8س}o5B  l[ؓf0Ig-us~߲_qԩy_}ky.S,fRj2Kwfeuys͕|Owp8mDi޺vy!b*U=a7 % !pX\VPV&`bm0TVE*kơ 63X-PR ఀ%HంXP^flVqB@U XM`Bi%NP){$iYy0yHgBZ\VMm클r0d-XM`4iiR9H+4z"HYs!T1 ȊÆY<6@ M\@ݟ mh cc%"q c]!! 6䌳}<~U#FXB27?HPa!(|.fFv]l`a8xg""0R6ƱE,$$ R hc(ehp̝Mq|V+O4o۾Η  W'`ʂ@`읳罬߰Sg#&@Y$N:LlLJE,r~u2 `l22eg6Q,r!`D*d5GUiZji#/e%1S,A:W6[Vm{a%_VƧ) !ds9} ;b;jB"0F*=~#dHW3 $Ы{ bJ,Y]zܜ+.9}ǞWL^j缷r@\W>'Y3&Sk{e;iM[JBNUW5,--E z6}OS!5QSG-f!)PQ\nD<> L (f@P8h jbYZ)$Ā??n`BApU, zʡL&MPU1jP@: m-@@Uj $;,ȪA҃ )V!|-C4p >rl@:tn?d% 'B Dːn/@ք!55ic!/H@z 5:50&Hxђ5{ $"1`v;] 1 @ `af$c2f bK/wa Pի|Z=! DV&@SE3G\&b&Y}/;W>bp t B ,&Y[Ӆ_ïe5b1c\ UZmJJ*jk8U fRLDBBR09  Hbc.8sM E_-޷@gb[q!Fa?|JfE.ۊ7U>ʅXNAH n#!kA}­~esߒ=8W)sX:*P&NsΨ/S1iݸ(3| bug._azR?") 25QWArbnAu `xp{ BL  @T Af3XeBb" & 58$' \TAcTbckPxܠi`@2)ԏ2HCm 6Bփt@2k4 j z$qTRjRk45Y2Z )8$&HtvHK2 C@ֶ $Xf|^]9\M[tD#lx#d]2 &"@a$a9 1p(N~ Be0bUӯb4c̰Ra!&acA\y:ei=oeQ M23V 4](4 *t׸}w7r7\bꐁiNLt):2ߘO.4zکub=TtYq%cU\E 1r}S/~_[$u-!WWXG~쩙"#y][ص[ErQ'w޼^]Rk! L7n_1Ig}2¶X{ 02;e*4@pV} ݺfmYt҈m{bN*Ux{e]jC"5TQK{秷r Z%.IrXZZV' '&:9:zUO];?#h{R2ӽClR2aXK^TpU04Ip F!3*= @8d(M8P.(CR xP+QHzfE p I~bxA0I:$@!%n`:Ă^?XL`6ADz!+ HAΠr2HJtH|Cf%By*8BCc2#!^H E@ i|@"<'j ii?dцt )dbs X0` w.%)+ql&*!q`#1IHKH6bM8;aW^<'ܼa;B Y`!@ |hŀBHBI"7Nsc % (lu d'PTTA BUUO}࣏/p_.Zs*0XrGyM㯛{^v93#vP` Jt%CtL\vKv`$P]灇?ۭ7| pBטv .)}jև}RVRuږ%q01o=S~ɪG_;gT;01n_}gAD˖aq^8{@-@D6-U1ٹUUŜ]`y>S]?*U$س@g˙f>_8CcYd6魗/]O|Fh.\uW tdBTLYY\X,۳00wt]1I A^YUj1 쬔¢z$iT#f]FY,q33[޽^}cY||AAbl6ZV$u:/4 IfuI8^^# u^bV ΥTCuc \J :Ǐ*rZbbU"CVʑnb!.F/1S&<>bQ ֥T'k7 A:8mɹp7tt: M2:iua9i7!U M^j@?$CNAGZD>i/Al颵$Yхt#Њ阃$l3d^^%ȪZA%!H @ٴeɎu"$#),&# $@1" 1Y싌 J\Rd$P$E` B1%@0`")eEe_,/A,HI.6V @ a Iƪa &?qu7R@iBX(DG,:< aÙ#"%wqZ:{BSez~Nm؅ [Lq΍rH+8bI+& XmJvJ7./Pb!+vbRj# Τ,H Md˭;|DP[cDKL`ָdk\JC 0;]f+q֮aDGLi Uh$A_jw˒j)"VskvF]F`KA  2r;:ͨ\"(12@[(28mcv&8bB mݦ 0fVZb*$bj/UEڠt9@lb6V@|`5 *Cd6 H Ԁ,kV+Tx Hy:PfAQ50bl16Wh;ݐ`H8j`13 :wEBւδH W  -M M47 I?RXj !$A9AY쐐EZnI;LHYdI- (HOs5@фUAZV’i 8Q#vĀHr # c.p)a$0̍*W ̔ *++g̘1C ~f9#3C1),L233`O+\(3 _8FQEUTQEB,.gfV#no$O5L_+Ƹ0Bܨ** !C3)ZjN1oGn9ӧO0GUTQEUT7+#tI#6+V*jBFr&Bq+ !8s8du蠥 <@$2/G &83SP$xUTQEUTǂBBE:d|V^z & <JJhcbb8#R+DzTkrzi `1 ?pΣ!@|9NdT}z!:Zn[[Zj)#Lb$B"g1fcǎw{o[궲rYrK`k01\5vDt]$iŲuB(\b L&Lpg=o,\ex8?48! D  "MdYw~$aDB1ƌO4 UH# Ji A iFcl4,!$ET[7Fc("9BR*˲qx5#()-bjVf~Va\0A$b!I8;s#*Rji9]Uղ7婪y /ЈZ!D^^ނ ozB;w6lXQQaGB޼e3W24R@t!3O'%'6W^S:9q;ʰFhp T"@ᡑܹkgƙj3&ysNjJj(@um'ߜ~|rHz7{޼eÏ<|%{8Bh˱c>>sB)j>ʿ*XIHI1Lf9#' .=?m{1Þϴ;{;w𓅣Fw^zE u뻯` /zjwIw޷~{~F=`W,_a6{7_~si[oҹ D^6C"!֬Y3kkfĈ1D~wfsqaG?߇|`Μ9oԧ2¯U0F F1^`{Sdgg-[W_}[nO5Oer*0RiZK^5]׍)RUU볲 缴1j1RSJ+**<Oǎ;p]]]EEEFFjU55A}Bt?#\}~w;3#s׎]F]wQRV;9%9=!D q9c|玝:+++ &;w?oy555!4];wvړO<훷w4x.(*)*S@)Աʕ+t=z-[;Քb;Ç/+-[{d5 ?05-U$ϻm6ǭiZLLLƌ_݂9oLjZjYY e СC].Wyy;4]KIIԱ(M tɒ%sq׻w ];vUTW(ҽ{wx\]^V~ "sn={%piE=0Y_pzw~w׎]>믾.9约7yϏ=fgvg돿gڹ~W S oٞku@`ժUγȖ}L믻wM?/$d;v̦^{ .-nҥN]9ga:۵}WqIߺek\l/ܻgo5W]s總?z~}4W}>`.{dgfˤ/@$'dddعӏ]֭_7p_[z{酗E22v춙m|_O\.^l:l){^kW|v}Soz[7SN^xaU0%"`_}?qVfdg\tE.jw;1jM2qD/eժU-N !:4}tdzy[Ξ=W^;x%{oBL&әٯ?؛NW]]奔 > 㞽z^4wxj%c/ճWB|cί?K'HǓ)sμܣ%K| 7;wẚ߷~7 2D2(8HJ玝}> J nںwޚ嫖_ Soصc >ֽ PS]s޸n'qͷzs kU˶.;nqV*/,T-;+[-l#7l+x<>hذacϿ0B={<鸓U+Wu.UTQ+c~=KgyF)SloK.~O4;'rEnԿC򊊊Ǟ( Lqwqcd+ワvôO~"dgz)%'"{뭷**j֬^S$ fg`87jSx/ron6 \c3֙!ƛoD .vkIqIIeɊV{ιCG ]âM[6#ZG!ЅwF AÌ}*S+**@@9*WUrU"gӀ`v1c#XWl\ 7݀+f$PyDIf)SnnCTV~Cg9򤑂 QLl 7mM*f JU ƙ1Mj@UUϯ&YL^^|.37[^fqjKJs9Bs?;)X* }QDPT(dAЫHί5}Ĥ~JSN:ed}n=$iAIcZB| R3RmqHI>g9#x^Ƙƴ t]U+",BӔ?cǎ^eLaXΚyb%I8q~rŋ}eر>FGHfۺ f\N9~XrSV\V[s uZ8PiiiAAAAA} #kj,\77m2vGuuuMmM7xVf'3Hz?am]myEyiQpeee:uy?G~gLh!㬬lݿoљ.СC._xO>駟& ټf۷mY/Bͺo߾>reuΫUUUUUeEe'W^e{ټu͛zꝚ:t oڲ9ʪʚd__T<\ō8g >Wܬ瞛ܚk\pŊjBpt8<1p]$Y2[.Е%믿^n> ɉo6lܰ|M[6(-.磌ZhbD?`"C8BƬ5\"WTTTTT~UUӓ9zw}VZn]zz {x`ŊN%*AݥKԤTll0`df6l0%^b5Yx OSN7xSbrb>@Æ7z?1.]Ll>줤$b׷驧o,[5-a5tEWU]0`bXL0wws~l3O0ig~fSRSLt'~霵 \p֯_;sg\L\FjPt _}Յ_h"ڷO_f6/ŋGݧO;yN;}?zrkov*eܹ23ÅRd%%9eo:l1?vv/1cKcaھkI#O3^zukciR_KcΛsT<ƇFBWUb\zxߧqv]i*@ء["[^oUrٙ7:nKVY 쪨 th # )Bf붭Y,:&'ȉ{6;ϴ1JIti>2teKhXlaM=Ф+'r) 3f]h M;nHːdotƽү[ uڡC^U sAD!Z!gSZs>3tF8!wZ B Ѧ5<>>^Rp# =]mſU+*+%QUTQS2llEIQE hj@pQ 1*2pdv w޴MSB!$BHӵknGkq!*?Nv3*)*i2ʒvLJ $\!# Hu]_\碊UӢ_TK4pe}qsn !/x0`&"@;wޜq|~h (ߟ/@yF6-#@<@;%Dl`KYۚQ:DX1/}wշOfpDϖd1lDk^q2~GBa?No9B6бÝwމ1Ƣ_p>kֺ))PLHTB)Μ=s䨑WdL %(P+_m?#  (!/a0  $@tA#}w -a^ac6a& i#@686lM[!-}띷}d͹o}ii zm6)P)^VW%%KƳBD=_yFVHM$dhāu㎹pRRڻ)p8tU6=gU0Ç3f/?{o!38;Fxٲe˖-۵{}պu!nwnn3΂4ب,cƌyӽ^+ZmIoڲSOs2dTǬ7a(TYmn7yp$Ko;c2JJKXǑHA `e qee#!.ao^"HVnؿ? ~1a甗UVUDNLNLNJ.+-Ә۟|ɡ:N&X4Ҙ5!O,%fp>iBO=Tn_[iO{۷o߂=gQaQ@ p1` 4݅v8  #!C3 qpmpBYhHЖK3H Oqee=wt8ٛGHtlJp* 5M#?RPP ߰^S5 H&7[$W(U+}~_MD$l"~j.eG? T6uZNvΡ <+W ?Ux KnqVYU3-rP<@Fv;E%5}l6ܸ̏5c)+.7zܶ۰SgÖ 7_}\K//LHLرs9gs7Y4M t ͝;w통v=%?.r9 h:la9M$&mB; F<k[ۯuYKOv4w.vQ 4[n;g9]s]NVgxVJ{ۄ6f9 غuf٣'cxb}ƴ'%$^8§}&Ť(ƮqGA>@1H8Ρ/ڴiE]#!Ynz+yǝw4a> H#$y,l5iTS ¢_2mڴ8h.Z՘?a9~b,f˰SRw4:׿_Nv~뮭E'\xPsNҧO,_ExuYoyBPaf `͸Np\FK/\v_MNL:wKA  \q2 Yi0f !_<Z^Uo!yw!#e,Ѫ_rHhd?3Πh/@.GN(=!@#1?#S^cZ2h"m:;w|饗žвϧkXHq $Ä۽ ^'SN"(fE`")x"_0FbRq"_WB3F;t5oh]g>o't2gW@XD0 &&B~p={$&UWU_5*BHb|j54Ciƴ*$"\_'7{Mb#TeBJ{0A0e~>u)I9S@`axi\ /81%,wDwSBE?<4ZM S`*Suva4v$!o[y\cp ʩJp;27iVgpPAL AW>ѭkE3|?ʕdרpâ 8pYH "BCT3"=_{{۝w7_/]pǮvSX`dB$""ǠI$[SHh0x]4NvJm9'ac6@SHi݆<hG{u!is(P.8 Ӆ-[n=.G^}v骘"8lH|8shSH{ܪx=G|carʑ?P_; [ 2%cgwk bŊIL޻{ ㏖U5< [pp_z~E_?o:@@=gK!DACie]dQ];R_  Dz7T^Zn;{M77?Gӵ=ՕaPFg+׸r&Q]xN{;ƌ/*-.}'VZ}/H g?:%=xσ iͮb%TPEL%YZ׼HF223L6fs1~oK˒|īz;nH׌:w돡9eA$[hB;g9y- Ծхo~ǝ3чMMܱsG]uEڵ+9)t=ڬ"V^Q.a)%-aw`؞-)RuUuMM OĂn͸WQsǜk,p/?6 aCЃdXe,{G_Τi+{K) -|pɅ" mhEo !T_A}Mbw u@,>w>K~X`Yκ;jꮘpńK&zj'Og?H NG뻊u=99<|0++Cv( 5 Ƹg* O>S $Uo~u@}B6^DD@xf, Y"zN8 / kDDVYQSqDdk5[K$$&8.=-LA0wLD"d\﫧k;e Q,٬6w["Y#/t)<߽{~G{SS5ul6>cߵKΝ;w7[u :EKꋯرct  =^eeduqӳOP^ jIPњs~gnټ^ .,][~-Bqv҉'ɲ~|@1-Ҙ&/ȝȣ3ntmis ] !h؂A h6dӽV"v oVMbs?%96.$\`=Yb+e_L>r.).93-6F! a9pca$szvּ۸n1?,Cn7xcߍe|E^z! .:-;묳g{OUUdeexlu ! 񪭭}nw_+n];xxƜNOSo33_7F (D&D!zͬj2AEe+岺unm2LD\eueLKJL8,aCr & HLJ@_kl&Xdg~ޭ{zZzuUui B vl6@nnϿt93323t >|޽?,aԩKZuSN?%w랝ݺя oO<]wߵsNp8?pq4>FGb꟡f a5Eј97vиss> ƙ`K{F &phdNBk\}X’$559mvkqmi4qMzс!?}}q}͞K6z6$8Ɯܜp0tW˒rs,귉̫Ɯ2< ׹΁h p1LNwq I zZnۿs9Wu>JNK6P~ qgul2exO:LP&uc9ջU뮦}"J!!wT #N[ZN55?L U*AtzO=6=^[_[[_k,V$IƪH  lZ8>w{2DY=O:舷5*LRԴb׷wߌ@ Jh"v8cD $B))7\TKJ^}=?&$^kINNn>tBkA3qԛJJJyO?= ¨7s%X4-`%Yc {7 z^tTms#)Q ¦mic̰1!s^yCPWrC' mYY\p1 -?pL`5( ΁!B&f40!@ MOKmo}^\\\8 .n/(.<3#b,tӧ0,9Y9cG%9gLjrjh/"@0N>>H^z1-nazk047 _ /'srsG(?X^ 5f$$ĩ8@,6B v9\LF=ilL,&B P͂  *ڕ$ғ⒒ijCP!@LFTPDKlݑh X,ݳwFjFaQn;tM7ܤ{vO.uXZ7W_:](u%8.! 2FWpw;z6$qmnydH6 +B6m.<8>ڹ{k)XtFF萇l_P0M{3 m"0]Xo`)_.Sas>[wOg͚5_|EiIjݱ}Ͽ;ogғ;ϝ;c111&i%E%ٙ1q1 !$:5֢xY}3ʄ. 2",ιvm?f/~^~_kC:޻yW_ 9م+*DLd^V1)؄ dIF1ʘƈD8  AU"bRC)F5u{ 'Ai\pjb ](`ň ]~m`Mo`z0hԥ.Ip5Isukו-fфg~믾K  >ԓwaϞ=9pyV2KPAey]>f׫';=~AIKd²F9~ܹs}xnyUUc\͛CӼ^eESVvB Nv]k)h>ںxb[wcB`;赀 s~o$g4lУ{O:5Ӳ;X{l~a|7KHN8~v(Q ƁdO5>+~WbZC($X>*n.cdAqǏ?Q'Ə7~\1ƌ7&ȅ_px7xc ih:<Ջ)):tDŬ`e˖Yg عSf0xU6jYd_ ìSV>7?e]U~ d60–[Rl\ |ңbbc^,Ks+d_ hA1NVe9_U7vgGZc ͈mq9k:Fnk )04xE-,QvM7&'% #F?x.dGz$b(PB!!DeM,eefd6eUU L=r6^?Kxk8MFB c}OB@]q|pbнHdÏVWלs9==-T|wmm} ֬Y~^E^t5ל1/"7;w232wy=.蒬ܬ~OjݵWLb\?g ?;yƏ3ܵ^3B;wIqeتP㺮Kre_p FI|箝Y9Y0 !0ƌ3j RZ^Qc'Mwι qJkG1jGX8L)t.QE-5I4AbC^"A wr1!a. 0`0eek֮w@~| Kh>:wyg>{ʕ5cnjOMK/[ǝ?nsޞGq_}ժ5&Nrŋau蠷f\ A b%,nJve i;,](Jh'\Mj-ץʊ<";v#On6 r#qƓx?_%5l'| k׮O<m>͛@ph16gΜ /=6P x<`ޣ@PF B1p&@1 |z@) LmSo7J.cm*We%J*Skov *o]4q)I);kҚS&O{5khFmTpG U6\͛3@6m.H噩,0 &ef ';Aa8L6{Mpg]d>m|Bł)?bd,_yٕԮp󿣄 !ElMew}wmy%ذqCd&jl1k׭-W/6c,&!k@AGh9֭[6]5XZ"!`q䉓#=6kZbZYyY}j2`Ao(6!ndWal?s}ú \p$ ?anB$$3L$IH 琏Ó. {][ ?f!G[m=07xބsΙ0aQU]Sx6nXUY~A/oA~kBGx=]T51Lz0q`"N$gUqHPMX<+/ש.x r g/[NwlK1cs{ dgp6lذalFmð1`u׹*+JJ:ut8\b$9[oRUu֋"MǏ8ُ]gPlذAޏ0y/^݉ngggTׄ4c- gCS=9%ٸ0Bk~8{ƜLHJ ٝSFRU]~-G\SO>7^|EWKUՑ'ܩk+ ?_(IR^^޹gsn$}M^z'ϝx/K.92)N8!:QE*)+>9իW!6q(JFFfZ1V__otWA|<h=oʹ]@N$#JKKvʵᘧ&fd[VHCt)=9='' ~ vq{AZrlygw8y}믽>6!'.>.=% ~mwfw̎L@Rece)@T߳{Oۃڣ#&cKQso֖@srLr`y|Bܻ{?H0@\p diiHIHTPHoL0G 9㯾N>} 3rjL! ;!fd%Ov" 1AC SNSR N:NɨIxMяįM|*c_f^T;QJqYTTyT6-)9k2t )WueƃnS 'n:1&o\q9#l B6m,Bdb2LVDLF8 >}Q8_ HHBIDR$H  K@}TQEձftФf D_b6<ጯXo3O}F7G-**ڿw?hD {c,A6pfhcX6im7:4ڄ"][D'<{? ̅cVoX]QQzjUU%$10`:1"SČ'>4t߷r5U{g_|E-|TQEձ&ȻhM%yzO=F>#xkҪRlSD%$ՔT;ٙ:֋zj9 q 2jKeFf[Ka6Uq#M'Ukk6qZ XW_s=+]uC VA:U+S#~q=3ﺛ2~~gϞ%%uUuwBCCFgQEUTǚoz84X8/]{W]q3։޷HB-;Xի^r%s:q1qǏe{ʪ$, ]4=huA-nMۄ#ånm67oڰ7^٧'cl70䄚ukۿǟڥ& 4\ JH*(+x>|CƙbA &u5uC]ˊMsuU >XQ[?|G0<OQQQ׼1\ahyovMf>3G~ݻw_1z.;ے\3[ZZ]/e pm=GnjYz3 1}&ORWStӍ7%$&B$K("+$IN9VZgrlRQVQPP`RS@u*:tfp?Q 0ƂF>nwlazt ?9;w>鸓xĸ۷ns} YZPJ|{(\ ! hgN8r!O׭k/9 =zpŻNug-Zpa޽eI2j죊*5%vV;,xlLlfNV 3\!3]Ulc*S%91;(*.~ݽswݚx"v]R8MhCCGG19  ԳwOǷ|O:3΁+, WDLfI#1.ꫮstJ\\q#蓏bmcǍ圷2DUTQEu-˺ᛆ-N=GݰzCAI+>â"\ NЄ/K?O;}kւ:;Ȃ~)B]ҘŤ*mo dMɮ%yHdFxr6o $[nCOc|4={kVC tQ\pJ) =9!9/?G^ѧg]:+fp!S^QZ=3~駮Y$ހ?$dt?^~=sw%=WE!$aܰaC޽#7x<|f^73#s٣:噉9>5;|_!\{UUO>dMuM\|ܔddb?7_~w޳-\~mo2P[K[ 1`̜̜=d6 7̓ΌOOLIɼnoYiYI1I: 'Vu豔Q! -{g]\ICNd[kԨQF'x֯_WE!$9=ofY/$XBzЏSFͲyks(HÇ8nBq8JM|q8À{=9aGOQ\e=ȯU[sx0NJU8i&#@:׍僙y"=zG:c=\yɌfp6 ,>3hF >Xa7pdj= 7 " <5)5++Kā3"C+UQv- @\᠃96 >XqCa%$ t8=zsQ)x1) .rmӖ65g*f~fMWSG(d6O:h]HQEUTQI*SJG[n{s:kT{eeeO<ē=3;z{!Qdzo\ 2҆1ee]wu??iiiU=/KX@-De 4aկ .8={LJH2̶2:*:t&.m%?(9ԩI1]ve>ԔT.1nܸ=G ʫlڴi}7_3ǼcN{ws:';+D:cr MZCSUS1?hh;SC&u?v|[#'/gvTk֯N (\ }&Xݰ)WZG1QvAF*5I*\\.rB;CFOr 1˗[w}1_{;b\1|왳847#xuA-ffO6-=95=; mP9_9dbẔt9h<ӯyTswL#;3w~u7iu`3qD2@S1-^q&X7iIiaC:G裊*AI&04ЖP/ kI q1O9a&+/cI!<.5^[W[V^cBbug~FAJYu|g -|ȷ&~_|\4˧bsnvBAh)ՖŇ_.m&$A<̳Fbqԛ|8Ĥ=&b2&l2[wEUTQ:jKޑ֑sF ɀ5F1:K<l߾}:,,p8M"Rv-2wxK1O?ٮWa/qc1d 6> Y t#-G$8pйw|{#$$ޛtEł6lbCD&HA4Qk Fzﹲ3?i8󕏟7{vf^7Ywv<`Cݩﺹ%&%T*k_`qarń#G;׮]pZA%+F(sx-$ɂ>_yՏ߿oJFxيeP#KrIi,oׇʍL!'̟?+`0 OHHeyԨQ7n0W)xyz)s};c c{ ,˲LP䄄⮅1%Yjl1X;FyyvJXFU]OAM~y믾0@pٯfe굫RUVZ駟l%$$f0'KKJJ:e˖իW[MWս{pBl46cFޭ2eY՗WCܪ5,ZЪE+JE)h4C:obPg+{Ll2#RRv5b'g' PV5~⸉D"Hq Xq%#ZPB('fB 5\ft.&&R*cɴɓ'@f>裆 [ Kp p_.Y$;;Hݻwv휝Ǐ[ud!:F!z5gw%.R?3#A٣犕+/Q0߯vvvڥkƍvlߡӜ>}⥋,Ֆ1Kb̳vտM7Q11c7/7nPAuC>1(k}iqj%?ϟ?OZ*++K9wȑ# _ԯ_=`0' ~O?ֶiӦAAAD(r+018֨ݟw-Y8[vMxPA; _rt||k֮INI:~ul46e'SNNڄΟ;ߤi‚滸4nXBY7!iҤIgϞݷoߜkn۶My'믿ڵk <`'c#\|97n\vvvp..mL2m붭.ۺy7 2k>vi^׺UW_yٳNk۱! Fj׺]5[4L)b M#EH쫵Pʒѣtu֬Y>3g$I˳ ājYR>UyCB mٴedD;FV+qNNm̈́ Fc "h4J) BW\g?߲v;))q3uO>}ǗC?Yr֪ " 䂍-#&&CZ:{˗M#8G'GggggggGGGBmFmӼe_WiAwz\]o#@bTQAD>uSNiiə)fK..㸼 TԴT^9g-gkQÏxoggn:s[[[k`0O v„ 7o...sεhBR;]:vy9Jr@)q76ol`8مx{y]^ؾ3v6!t Qw޽{G68x-:}\l}m~wpR;;;s'OtwuhAVf֙3g7kT:RڮC{vZNcy%E%>[]:u/|||7Κ(nƌ{RSϟGZnݳgOkxlرZ  Y3kk`nݗ._rsr{{aÇ &D^h\6ZnM@1 @mll\"K.Oy$,$L[8ֶy@adC''k߸ bd k׭MLLZasg9|OO^{}m۶dž^ _ŋ 8&Lp7##C|>O))*y7I'%%8qB}ɕ4P+۵W<ŧ( oMSJ:5Ţ#AN?QeJr"Q8xڹM(1 e]2Eϛ62:2F8N#@\^rEZjBH'77nnn/bddg>}c̟omm&++kҥӦY:7scG) Fb0V˗/_۷oIiɒEK,WM9s/HOO7 PJO:yI;\޽k/e%kSNʡ$9I&(&(Uռ-W7sk7D'rzV 9v)Szi4kx_x{nذ!nzرV/qc:!$?qt3,+iԩoFEkJVtߛ$naZٳg'NXnJ!*h~~~_|8?<_3GН;wZ[ :xc VYvbzB - A/ɑeb)SL2b~~~3?(T[DxjۗSsJauR\jA6PLJ-۩ v0e@q7T$" P G|rzriadUAob_}]w1 6.pjР̙3|$*I56ug<9HTPPbmE*f #^x_*9KJaU5+Wj/OI/N\O|"@Hkbo3x8:4hYb/i6y| TA9d*׈ ۑܡc(+Q.Y؉csmll4jbh)6& ԯ7A<2f'ʴH[o%Q#ʂO6O}k+R=zڊ0U HC,gҵKMcW\yq6G|zV xތ̌YfݭN _| 4 ~ ˘FՖ(;M]35^ `XdIFfٹsgBI%Emo/!TGDt\C91.">r2t Fu<9UGꔔ cFsCqÜ ܜ܃fd!R7,#93=skXN~Aի~thaЀAJ@k 'kNqQTJV('Ì=}/MwkR`07FRג?M\H3,c,_UlFg %vK{URZBq]A6%$T*rҒf̚o+_*j7y f(PSg%Ez, V&(2 ͮTV K˨q.\+`u{{~Z0QcSE:k*>F1MOIOgO5Hw' X-c `Ьy3&H(VIH:iӦ~zT_v|^@Ԝԛoa &*PO"E 1V58B* Ip#B@ =9n4)JjkoK3(2V+\mJ(7SQ$Z04wS췹Iv<(5X Fxk+` (Eb ܅s /w pW,4_]tEHHH^bF-ҽS'vlq34_}%+$!@z+Z1V^vD9jnI67Ș̹Id+J6gXHL XT:U(9pJ>wts 09s*rcʟUq?v왳zqCF ÜG&L>l8q<_ta ڶm~sg:p꓏?پ{ s _zWoY6 oKQ;/;oƗ3~GffJ /߰Qm0f˛4kҥsw|w>T!qas*" r֗GpLe%LeL2AITT6W5Qd$j,Vk˳JBe}p'`+סk3,ĢP! F+QHLke<|gbrsqN=NYg 8ۇPB2QF:tJNtRb|~&!A!.`@AA(,KD2͚tfboĮ\\x1555=-=7'w5Wcrr%Y2"JoBϿw;wpv횒Ւޛm>ea!ĒŲ ^ZT%"I SckOm:lM(;'''cM5xRlLHV T.;gF^_cg' ^^!!4^IkvB:Y1`%Y"h%y4 ??8~m#5re/+A`ܑ 3M"@0((h;m;v~:xyyT[rWIsϾHXb`Ȑ2+~+ jýt:wߦëY[]qA_# ).f#DY}lYqƑO='?~Ύ+Wu|л_{)$Hnۥ_|޿O:DA6`42U4t'UeDz7z-)OyDrճŔ~EbJ}9!#` ,7jhᒅ+W󈗑\7o%H3w63mI1AzcJ(Q-Y==vj,aeD*b0ʔ%e혟Kƀr\ʁJ%YHSIɯNbD(` @ 6M qD&JDLdPձsB X8JV)771pYxv$3 Úu's -O: ֊]=@ӿJεN24@U2wP^!oyzl%o];ܧᐰk?ɌPw߁!BWm#[# |۶m)nkaJVwocHOI&N\;82nURܲ}㱥f)"My+W07(j N7ɨ@dc\Tj.d1o^XԸj;SJ+7XIf ۷[ uV'37U0) _gwjɮX_%ZDP0PZwqRkX (T0%z)g-bELK܃O1@4n.dT#SWJbk("㉁`CbPUR,;q?j<ĸDV[PXs5z"aÇ>}_~X)*VOTyB4%<)\f7.7JT&˥V6%)T*UE%h7e[YUGW^0̙>OWWxy Gs~c p9DSmp3Tdi_H!0rvv.-4b- :W7W@ ZEt+3JSe* ꖤy7m2iK0:Gc._Wp!Bvv*A%b,WGW'7':N#hT*JIfՀn*|?{XpL\-) `0@!a#E0ƺj@]$0|/w/w]%N8NJ(N.՗::X[\X\!S9?/_gaiTKݛ XP~˘" eYRRPX&K@mmlAnZnX']sr59"@ SN'rsݽFX' o^RTJ)wWJ)zF5|= ́}ug05d'B23!-]&IBHIfA]Ģ.#+#(֑xRT j^=^9;ڻKz-&:FiܨqvVvZf(*MnL94/y/;*)KϹrӃ^@QvP ')!94080+# (ׂ ĔĈmV‚BQL#+#'-G'85,BMv35(sJZ6-'Te|||HQkuC Ԝڠ3! CC$\%ƓƝgMWCTcxa\l\_cӈ 6j!3s22ƌ\Sla}z1.utvxUjqC؀en`ckg%k |}5MN~8:5z/'/B!PT\)6]3d3^* 3?QIFegoǫxZ xggy9::;>.."-ADūT*ޠ5bW;WsC#*,6Oc?r,z^Y Ifؠ`0{yAtsrܹ}^FH~lmmFYYNڄ%= *:uyK z l(6#ET4%B Lbr>1o+[|wgHII[_(B*ƱQPT+x=C]gkm',p,WB#ݢ܁WOj ƷsfS?ZBUBX aú<4 @q^2\ǥ`Jޭ3fx|&d),mM3`XlkƇU5̗ٚV*S#ZE[%j4%F8;RJd}mOsgLS|9T?BSe)c0O(V܍Rwrk9ETM"y@.5nUÝUf\ @, !D3@dRZF6~x5TSJ,@T:p0mAiɭ? ,y 8! 9д) n0O| C9kj6J,=.F395kW @UH`na$dtZNR*(@#@* 4Ưg_=}.j+*PJKHJOYj#G򳐀|63/w7nnVc+QIŨD,)I$ffL2q@k ᡁzVӰ~CJz O5ã 48t3Cg?!qXRJR#@ٙI)ISߜ߽8`+e.ԭ ?P; b#'Po;Q#jRhڴvj1bI656Wfn+zh[zu_yĔO_xgɉ}LLL`PwFM] 1&LWwW/uA42+))8G|&M[j٬ܝ_|6<<@'PJ%īx P,8͵m BؽcJKFYǫ΋/mKyy GE])ɦk=uS^` pSI􃤴ԩSÆ " F0qG]]]\rf~=í[6k (f"zFFd(10~L1␃)y?}YnN&A~AafVֿ~'7oW۪dE==@"}梿ʯ$ō7.*(:p@}LRLxsrZ2<\v5HHMqQݮwW?O?O:`*ɦk=ۯ` !eEEE Fu`j&b4&CeQ̰BN~κ V]}⩴ѧҳdgg$\Wۮ];'?l0 nX6m,X ?'TW]T\D(7P\ fed]xQ4_ckk  ԛ>}9Z¬ٳ6H8r/"6!C\zo9(;+{e՛˘7Ws%E"F֍3̯g.]\eAK9i9" %(!D*Dtw lh˫Cru־[`````"ѻRk=8)? $qb4&jso5jM&-uCVmF!uHD:>%E%o{K|c0R)PGCa67Aa0C eyY`1^*f@QΜLjIH ֭0h@ w>~g^ǟ`0km_>!xE@  Y(+_-Q"ЭSĕ H O#c2U)d*YN殔(c̀^gr)%[k# i/і #`kw`TAͤE +ڊR )LU擽dLF|ؔe$h.c $+'SOdJr21`%KLIp 81ƾUT3[M;p.w@S)Y t_^FN)ӡ)4>2jLh02vPu%ʋRj82|SD]r00BIDr+䏂Imݽb@G) 2HT+%|9~oB(M 1֊`5f-^1 v(%Fm܄ڷk/P?32z-`9|WgOgLo +iad(r2$T,o]c玔NŅ y}}233UJd (ܵ3FX&2xGoOyÜ1olCo|+5Y[QqԘ7/Ry.z)94/+qd?W_u%Auܜ$^mެ!|AQʶPlD~ѣGqaFY])i^#\ҳ|)I\ՖgW>+ߜfƍok%2Q DB΁Br~^֪u+V{wy]vm;-w%We,zY g$ՓeAicW`bkw`XLx 뤙˘2ehh,!^{:^u_9V[l5ݩuCD_3j!Qn "ya J>; +%ͫUc-1Gw$KW/۳oᢅw&2*hTJfok~;s9Ѩwld" !61O?Zf=!wƮYf kH5J$((V-aA;EEI=x,1_iUhha[ousNL<{ln||}rr K [r<87 OhԸnj#߰Rr%MS&fIijVIhԅ(;{6-H8%s;GfdfȒ; JQZ\zmZ+f0!% (HAeR*!@v>^>NRQ666?|m UDI§m/bCp3I{xOO3&f)P"2)IJL~L1Oy ] y5(>}櫯^鬵IYI #5ݬS6mTKG $0@22CMzF B %YFj?gOC3<b\!lNЩue0(7Z&+>)2&wtdL1p BP*PdSI ""HD"A6 ;p[o-gWக r3OgjܪyXsRSҨ~Ǧ~٧;կ׮- ՉV%YRaxIy5ߩ]'f. T*Ld@WdŘ@lbKߦoT \+֝`2xJ-@_߫[>=ddgdgf/o6JT)!@$mwޭS7hÇ(g 2WR+_ѯ,+Iy:^9dA"12~[_8uAܷ| P>>/)//Kt?J]?U:]m[:lA6U(5fVN["cHZ$r a򟚧Y~x^Cr2D}WYǝ咱sPF ǪJ)ƙ5$FA~hLFE<d3[̚kxh5{^@K_`ZZ<4p[}BAcm%7oVMUOoT!G-x5R0Reϕ0@ {_K @d'1FlRR%<3)*Y.JrLluOOɣnD;g|p#oٍb0xC$wLn#1ת#Jy0 0Pcwu{V*2Pu*rdStOwuqmܰ1"(P֎rAܵ,LA6nov~h`z٣gPPqS\J>X&m}od-k]PGk`0$>s*ZM2m)~ݻvwru)/Q (;snΜ93>EQߧ[Թӌfgwi~ԩShVUjޭU+&ï4() !1=qժUoCmT6"E1igΦhƧ3?mպe0!#>1%y?Ν=HC\NqO~zk[#GTV0Y;tNY DI6E@n]PX (/`B,[8C;TXUC~b?V1e5WlԐCdҠi;._>՗Pe<!!ղuKv)P.>TdL11o7*%MYx-U'8nCjD%8*48t+z9kƬ>zw?!`Q.==x0`8uV2d!jF$&>sCJ&5M8+ٿb&|W `m@O_}3 kPˍMyzW㲮 G2R3(O1#{=wW^~mo_ @ `vT!JhsAee^CEo<cF)N"k^XG%8Ӓ3 ;,BdxdII BHeRVe*ٹQ[I _^ /xW80 +S3)nJ:喜epL>C%Bx2E{Wlt.&r ܃27{SP]V/RǝGPJE:^M^{l|쮝 SRSlZ7l`*r4uτհHW>ֆ`X_qTW@Rx ` o7jިYGG8AK#uW XLMޔ6ncy_\7X7zyɲ\px.tnf? RJݚ4nEoolB TXHd#ƨQЪ(6hy}yNiԹ, p ljm CrWY> ,wojrJ" tҤQQ߻*꣏??z?["HDGG/?+WL~eO5%Rjj,^M5%c@?]vg3>#8s<[\Tnݺ'LdBDB!2%Y% q\xpQ%YBT*d}?LqnAno{g1E%`ز?޲=mzp9v~kgC0fx\PBD?v|^}(< `(1+ۃGܹs99:;׀:ܯ犢nrm^pwWw(sJnݺ^h|Qyīm>^>9U/__{gATt|F/ ?\"gϮ\׷CjJ2K0%>9_t.HgҿC&N0' j!)swtU2wG(!h<11kXGgE" xzybRs|L&L- 973Wsss^eHE7W7WHEׂ oOo/!M1 B(^gFo! %B%C&-)u so#;Tdq#.._ܻwa0r͌$T6X&1S꒙{_+~ E҂1̘5}ADiJd"Z`jԸe$󹖓1a yqE\47w$;J*fi\GL 1} ɮ9l~8$ ڷNF̕&os`$,=fzkk`Tq1))Le*]UtYhr2JZErm*ch^ڤdU|NI(1};`%[wMg'mk3қҹ>xv<'Olm-j b2xaoM;nne~G? FˋBvsPUb0O3B 7s5v  @e0/lh`<òj8^G(֝`06g0*0aH` _3柆A`G>5{67wo@{e`0fJݺWϼ1X O,do b0xa0 3j7VfO4~knذr aY?RX ,q>]e(aaaւfO4lR}4;6L y\ ϸ0qp횵xdee^{Vf #IIT6f|?dD8/^ ;cyӌZG@@ Q̋ /Ͱa89-pkİ2!11Z0F 6m 8p>{ƃZYnv<w{˦Oyyyׯ>}a0xoرe^<}ëA 03o7VrSO=֞pQւf{d|ڴ)B==9Tg//k?@~M1,Wݓqւf֯7n? ݟ3?¼x-G"PX2?1888Z0 <ւqUSygn L>u1D*`TxAr2\ft34.y~56=Mtl$\`<0x":Nc,X mէ7X[aOg<|54=?!1|4 1 F < ï! <.6IK`OOHbO  z`ϮO11M?՛* yy-`%<0"I~>?nj ܰoEu!TpNY#(tоC%ǚɱR 1KoxV<.-93l4eՑ3e2 F +sƢW Nmcsρ , VG~D]m? *ߗy/v' FJR"H|4hpm_9FQpc0G=!RRmܞ6>"< ;`bj͒G￁Rd-̝jѡVPPP.\v v $ (WW|5oNbtK @B 9_(N4l` In޼Yn]k+`T EDӵ+LKY%ؾr6l|ჟ%ބ8\/@z ~Du'MKBB¸q?nmE*akO4*qB5k`͚j%ni>kk>'N FuR37@+HX9ZŋEb5vpuu}H |d8{}{|^@G:BC2k Tso/?`-_yQ%NΞ#G,>{k|Op ri&8-#BÕ+Щqt3gX[ : u_. $)|M+0P'R|`o+Wކ/ Qhm- ebcU!Q72 oWUS:Ϩ]Z0 c0cqaXvǠ  OCQ(_C{ ['` y0`"L&D?OK@!_2J׭ .?y^S-4.ꇅ=`0O,#AL q{* =P}DW\p>(9I7ҹ?3]t_+oVޔ`wv)Sd0 :|OOf@QիGk+tYg! &)x+\RnjA'bPxrSgi q5@zq[Nrrxvi)h=֭ kתk35(JKJ֭0h.^ }`_% 3{J!Zګ`0kZ'3~$iJZ GYzꚩnYiB֍4_΀=࿮ Z >֝`0/޺jBd/QS {턀@04 @dtKP'C`;d  0X"eT3`!q@A0r=yp ` R8~?| W`0/G.ݯU}h._EcJ>^rp|BٟG^K$ia`}L50f->cqm )Y |QI. o`0'^%kP>}WزmNAiXaUoGۉ0z4HU\l֭tkR򭄮{LL@0< \`;Bo%:Ӫ3  ;{k/8R$G~yE sޑ7 M< 1;<&pc(?aXZzñ Q[ռZԋP Ҭa3*X8[s͠alqb~~n[* Q(+s|3}zD\ֲAo[K@52`0ˣd75rVRN2''yw¤%yмUM\_ЭәK" &Jʦ 0_Ɛ }Ռk|}`0GGWlpmX'5?>_8 07le^j i8l1~WիS] cZ2 xsjW$.0, ks_c5*3wP=M x x, ƹ)?Lbh\g̀ a0'XH5 x`*LNv,'<`0M?Nxx@zqRc 0@`͌Z@P !7Rt펒!>*ʥlٺ!ĜBI=Ge/z=Z 4 AOFUV_~~~iiil !$PZ*jubVcWs^zqq+yq-njJ}jE\vrr( #dg_W QdC0QQQ!!*>|)xڤ2qwQP!iyK557ҮDCx?[[[K\S%%%Iɒ,5l˲,_v544Tˏģ`=uz]QaWa[/1yQӋN9țδ^tC222\835eެ!IRVz=ޕ*U*\M22kh4e3VU`m޹;<}=] JKK8111/_NII N%ڒ7nHy/ ׮_ (((dIk׮>><;9GV=s̹sn@ܶlr8'''GGO>sƍ:]dqppԓ'NFEEeeymiO>^9Vwv¯@dz _[_9^P =r.yB<ϛ7/5-Uy,<;q*t(`1湲vSJo\f#L57u0Jnŋ+P, (U}ٍ4{T6+My^/\0/?O⛾&rGR [QWS-۴lgQ.7H%(?QG]tiۮmrrCǎWwh|B#ϟ{<}… c. 7bopk׮m߱ :qj箝ϝ^˲ /pן?B/~vVo۳gsg-^ʕ+[ܲuVmc|#_|xb+n\;unK>ܲeSgN?yww4N(-:M0Ƹ}ZP\r5^0$.**{W zCQaW\`琑VTPf횄x 5m^ڴmS•;GG SfB 7\(Jb RΜ:cЦm~ p={;QF% 0-ZhШꕫ\&?^:xhz7n8u&>._~n.n+Vp89d*2$?'f͡ÆhlcD 8rs-[q.ݺdeeo-@8۽{7t厝:>hcڿҋ>$J׮]e/99OTT#$$Oū>董[jn:N222.\x_z!eǖÇ7nXGI&Ͽ^ޮ];W׵ t0`[̕6oP`nny¸;$j~>ޛ7nW^N/]&PXT38۱sǾJacڷo_B|T{#skڤiii8d0ҳkbA%p<7ogOIaC322֮]{= ϾP/ަc 0t./߽iu 6@o KLHTgO\8F٤iӥ8ʍ+[7mMJNruw}炃ccׯ_2_|EdddN~^V:?z肂;wuZVc{9-232<&OrUVIԭG7 Bhْez X׺uk{1.((믿Ξ?[\Xnݴ#F/?|J8n玝j^x™88//oQؤavuYmZ:ܒ_ŕگo=%}9!ЁFխG3>QZR`;:D8R:bWW>,%9e|MHʋTMZ4kxu{M*,*\rW_}ծmRm)=ٹs''|rw/W̘5}:*um_ ok[Xh߅ 'hG #?ن6mAdmۿ6#XZkǎ zSRSԔҒҹ?mݢ˽\BCB{ 7|чJZvŃ?viæVm[ d&$LD(ОOtrq/o^ڧ_.ݻ׮]Z@) }v".T*I!2AճzcǏQ^zeů+7hgݺu۶n׮]a!a:n6l*)*D7So*b]t ؾ#CG!@߻; &XIDAT!@Byϟ8ԩS_}ҡW,OH?N>^<̮= M qZ<ӿ.u] msfD޵sWDxs=#{=v̨1ƌ z?_2Q/I$I,Jd*pԄV-[\211Soܵsz}WYYwmZݧ~m[/\095+~'̰gN9}%ş}YPpаâ.Dw,} qNd[[rRws d~m>^BΝ˖B7nXh!j#|z6mh׮];w%&&'%sqƹ -Օn߱=22ٹS"v͛nj?neT~?3g?= >15oЬA$𘧔j5€;t@i۲텳̧ ,cOϞ=g>vIT=«xCToM4qrtB*pswsppUǯ"z "}]GwI?☞w#t{AHNIӿzjxzSGOyfHFU ַ_Q T7IJH:{lݠbrJ,bƌӵ[׌ N988[xzcƏ4pPJF`/?~ŋw29U#("(rё.Y[i9t'%=rYf۴nҨS!n."!ptttssst7 //(,ϞѣG_qxyJdlccÇ =jt2tz#Zh9riNqF٨Gӯ[n-۶ܴq'KuznjӲYtGWGZC) OћcM aaCF=v()utttqreıPǯq!!ҦM>zqŅD& 7>bxrjuC \x7ވPj[EEe ЦCX&&ڍ1c믺8[2A!$‚KQN.N#;:8O$"ڶn;rwϝ?ydxXx>tҬyrƜ?(2h͛7ut!$0DqFfNfdxdzXthߡqƑv]AaXQGG:ghR<]=.E]2vĄĩoNЮCm\8 /vlq`*,*Q<7 гKQCG]r5;+;N88y䑃Grr&<}m۷h4ulTNQJi=⣯D>s+((ȤIrRضCF 3'xyz{zZz~^o:u3HԺu#F?옫1O9^`?zÇvڣ[fMQCD2JJJܽWW汽=ڨm ` 1NJ)OyD@.tsfiV'ϧL =z0jѴ}-\pЀAoFAAANVΞ{(aa!!7psJD(*AdDEyz  P\R\-dիW ХkBHoJL1G9ч.)*<ǫwnˣy愖cPJ)R` qKQBkZ{[{aA/f>MfSP<ED=vt g3{έ&F( xAͫ9auIcsUURTRǯrquB?sqHtR*S?=ܲ%˾ꛗ_zy̸1">>HJJ 89!!vW<RJE#nooSR..vv:nν256F J %[wnR7orV"@:-Br*''Cҋ!ۯKxZ6k9)A溹:j4gg*ӂ‚00^#O=lzH"RJ9*3Þ8nɂ% 0vX"MY[x%J:wݕ _O_QKJK^ @YevpQ\W1r"h4$#ݜPY9;we98 8,<,%=ERyyyɲ\LV~ݽ5kz>8"zge٘"Z/k]L {twpq0S;~z{lU# gfgg^={!8;9s#C pʕUʴ[G]{ѢE|M`h`]0M6:ux{-X **jk`8BH4۾{9CCCce;{;{zrە:۹+W kܜ4SO=9d 0J\Y1a@t]N_wwr[oNNjZ_GH'(>[omŲ,ۨl#rjJg[1/M,--)j==LT:^u:`HOMߛNNof@@f'&|g[2I24 ?s柖/[Ja< HIM9w`p ao1III)i)%%<e1@Gt@F2BHĝ;vF9k$Iw9nFSZZj~Rճ!o;flxD' YڬܬeP""GN٥A())Q =+22. ZPbk3s2ApsqիגK6[nvj;I=UĀPH|-rssDf 1-: ԤFRo""#==<<80Ne6UP0`8񘏹coo}1:%=% 9jBD"7dj(^G9 ˖-[` F_p,**G7^_F+ֽ=m//N'$ #lzREe9::;&<2\eސ8~PNkrV/.*k_"ҋ;ⳋ-^2ɸ!|{dSD `v[_urq*-)5!,;sYfR[ۀkKIHqQՔR(EڰaCO/ω/L %Yם8u왳7*іjl (;wy@2G'GZ&30žmڵ?am8]ʾp6wwo_{^%$kl499Y\Rwwq ->!>8(K9(WW-::8::z *uaIW޼<W^s'Dqhwq&29?_~@ *!3+?"<atu?_?A(jӾMƑ7 7t.N./$$'V|Iruu{qw+iW+$[ڕjWoz?dD1M8BRh6) 4_{siOHBI ZhCHM &:@`lloiwkq5^>9g9gĵ+$v{g??K͝_Pe2cϟ8\K/̸~USsd˲5j,Y֮_P~劕yVޮheL)%P0şT*\_ܯ~ڏkWLgA~MTq[j wz$$'7zO/K !xNh]}󍍍l2ȬȜsvrP\ E644ٳSb9Y9(NoR-2ZxBYw^^s sVn<׈c6E9^De~ٝ# CCÖyvS'N4fLOxɰh7k帡 <\q7<8N#hF{Oo]rixn`LصH]ޔ<#ٴiC=EQ}V*r8Vh9b11o%G׮[{-Ƅ[6[N_jwpiP9WWW3ς]p<'$pÙW*%4O\&۔:9qXYt8p{yyye+Wt8rH:ټ<1&# @ܶ?l;w\0=8cƌ=W_}Gkikk۶m =}=X-'\Wy#050^]~\!o9ο%R@h V X4VwyNp5s˯V 67^ x̌PF+4CYtA2hJLiLU ķ%I0 Q NM'+AHY0wmhhhjlx.UZZVcǎW*0F>uzI8SkեKy띗^zIV+)STT\kr劘s]NZlijj꿦QydVd}/>uTsjbs9СCUO/y`6˗/Kssst2H_]va9|u{A ?<=Vw˖]=_U:pwYӨ3.ޢ.}fj9k5Xzz: ۶mvaO9k֬1  ege9. (:, Rt}N;QR\brrs6md -ZS_Ջ?xolycw╋``⤉|͇w4Z4A hT*++1syϳaN~=q+VxOfN\x?lzbŌ e^(ě%`VN|TPTT*GFT?п K^z*+'N,8wfW<AIoHZkՖpa UD"4\.Ж4_&EcT*ɓ/fm2S*(3mv8fLV` HեZi+˰fYJiB[9/z{:2+BQBRV:XˆCYY'Nȟr(| Ta2^Q5jEnPJ`@<LfXn70)sJʐb"M=8Ka)[:wX(_A j|>Jr+c4^8݆pe 0 Sl`xޔ/{`#(bٝN^צh D܎jv{A~B "B!%dS*F1%%d4)s0DTT6BDrƳ2&dg)CdHjj*ce RfϞ=!cVu\A?T*E3'.KXUah,QZVĔ j˅ai4 @$ nPAɌU*D*aYa B!t:29,SN3,eIeV$In6!2 T]f-4 tJ)jfh#iLUjpg AM*iFѨ5^W>/^Q C׻\.N^/,,DR__bƄ@(0lT*%jAP#G5  nivKRՊaXt0QQZV4qÁ^PPaLDQd4, A\.7 lHAP(j(&ݎ*P\U.R$If2d qC$i4B I!Z91j4E)p8WጕaY(ޞO. }MTh4 LznpQfjHM)Ix`YqMT*(v J@EHtn[Plƌi4'(eپMD?x$snKɤ̬L&Nt:өR "C29sf.ku%3KhAC,efL0|Legewvtv}Օ;1iZͲljjftZV׹n@5?͏V;hfH$]8iŤeZ6ܮgNܱsq%q?ݻwkcYf̘ @DQT* m1{}iӦ:h3] taRupQ2,=x1hU+Vuvvȣ0,38璑BMLzG'F}OT*>S $5򨜹Rj1 !gRcp"UCc8F.NvlS2o<]!M/eC,p#h#3ݟ<}ё8 9vW:|" كU"cgy~ɏq(p'aڌigyw:u1:6cdY*|$3tr`# ܎$%~ǎ۸q… #"38̍go=c7tFfiA}X >k {βlA^?Fe32 9"V+P(D޶`2yAMaہnFX,V#K=*P">81ErRe˖xp*_]hѤsw9sQP]sU^hYwH@E &oFbZ$a󑖑{ 8bݸRYwoݑŋ/}7oxg]߯#hOgk8{쳍mwzf0+@_I^*-r$H"$?|{_J(^m oAe$]G߆\=}%>MG<Ө$%ű=$L"$H"AK}ȝ币. vw4|!Unj:^Eotc½mcmoP7%'$H"$Z 06[vo~੓_4|91 L7J ;Ǒ3$H"$ KkƓBSfo/AJ 8IENDB`engauge-digitizer-5.2/usermanual/tutorautolinegraph2.png000066400000000000000000001746031222557406400237110ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATxwEUݓgsb" Q̈ Ĭy|t9ݝ9`V +)F$]6]gbs7ST=S/G 6l)݂v00)Dbќ4Mc?LJ)=OQW[֡=*++ ^9_n]MMW^~I'E_~n`MEHG尋Q:}:^ίZ#;$<ȝUN/R_z̠M?~c(w} w}W^uP!f3G>})Sh4Z[[+ZrJF5PPB)```BF* 1@m|.%{@XBBgp$B(&x p ߍ.(nc!T04h dra6E:)$t!a~tA6EjDdzu; BdE2 ߶D?ٵ")MD"5DI AuJE5_e;OdЋh#qUi._\AQJa0a)ЈFuZ]]-R :aRPR֗QJ%d2Y(h3KAe}z}&ӥaK/Բ,"Nu$Q"(Xz PJ -e+oG5H3 J)@ !;X p*ͯBQJL΅F[SdXR#@/=:'Tv G*#5UF@b9\*^ Pথ ^LN)A^$4B.F`*;*'+]PB hWh]dN 2c"3H xEfhEF;'2w"FuHv,NNc"; Jp3n)u@$i6EƛDs8q1DwL֚HK})yj,R"rE$ζO#m5I$! `İ-t!Ec3j-& ЙtbBl B"hD3aD#&5BR2I$+z-OZleTv@41%L*(S\RJɭRPiP J))mkB@((!JaȂ]3gRY. læ"{͕գJBXPB^tp+k?SnT#aΐC]H%L3)k#ץjjarpTcNUu-ah&w/tyKȺ'EF8aih{PRIdg uQqå:bqe!Ѹ x*RJG]D"=)TuiEV7p\ XBRU5~45IC3DMD2="E{"-2X/mSd&EK ["PmlPKmTѸ ~ Z#"]Dd(m XYӮvEֆUH AVɝ%Ҕ5[ !iz^7\Z3"Ȍ"ܺDRKiuK* %PPZQs2EQPd8qRTF5 r3󏧄R>5cqJJiӦoPE k.qƕ5gx/h4יҠsHK`^5ZQPB ZqPTъdEB# G6HX@0z(!:OoGٞ]vl\R0\vSƀLK|wW^9t^k:CZ@ ƒ}E@8UrӭhEo4TE9feXƉ.YVqz'TyzEK{筪{Z\e[INjÌRnW8GAV2cuU[^V'Ik1]hRgrUfsS ]] +t CH$lnrɲMH(HTLK8!(avv9V05DՋMVhH"Ҭ MEzDiuGDZ\"#IG 9"Y3QQdyMD"3;!e#Ң"H!SȬzs+vȸEZj"Kkd'D"/3I&2LvȞ͕.Rfԋi,ڕ4-",DdeH%Hd抔H E]T+SݶQF):-aTטWxeU]_Wy IG t``:5MC~"ƨiW_r/|;K XRw4(Ι=w>!s|s225>¥J/K%H(gd.\24]TT05k$ 0LG7t@Bzܚۭ%%iW2cqQq3Cg=I(y5Fe")@JdFg/_S|WB0_^\ Gs̘[kj%yےׯ/|{EÑ߹ySIQfOP Ѹ)dz$idK!AP% %{nPgN^7Ok+SH)KLy㏚{oF4qHrHbPIHp]7]97?:M 1B\9SL ȮjZUEqƔ ;]\ϡ>]Y]Dөp8eJĉVue3RZc螃r2 #.AlBx,TT">JA-!D,YIJ`QP yE$=ndx XER xf(%虏T,#_Ud^d"kb(oGd~"K!d{"ZF$\dq)L[$iEH:ЭUF"+Ey#yױHR/GnȜmiMd5ɷ$t`i' |>9/\+̝vhLOO{8OsQ_z㇟Tw+feu]1cϣu}"IQQ }njs^GcW\U;P)(kWld%/- =J~+1堾pnwcS_C1_ '_r??+/ /MeЃ+WJ֒-˫__ݢ2ix򃏗C^o.$˷|߫؆=l P(?8W63GYVI9U5I8&?XB|F&g{dDޫePgkkꢆ|m͙|t/oޗPXfBr*|_.|hؠ~qFy/M?e_xΝ6l{ŊP!DH)M3\%+{]F2~±':n'g?sn?sCaFVWާO<~ 0p㆟}=C.\ :n!}ޙw?)Ժuь4j/fUxh.cpA^fpBJITAn_LMc^a;7V/λ3&Ϝ55/<^]dee}{kxV~W\zʕ^|}^RbJ}4oRڣw~d=Ͽ^&Ozp=/}~{Q?HjhLe(Bߋ* 8G]>7^Tl4n7 FT@A/&"a=xPR]CЋH Ҽ UEuId*qEN)Q[YRm U¥זHdm2| ;&2 Ro!2غH#Bd4sD[ x"$G"EҶE:";*"6*uŖ (z~7<^Ck$2 ݍrZ-d֋ȀnJ`hx"GlE"+.KmHʘR%TBRB #F(Tň&RJP"5{.%*!:1&~Le=-J)B?sW4Vr[ < O6zUJ)cT*%~AWi)EF4.MKqKrfl^[&r빟#eт߆M%eifTNH ZÂ%LNS@At_KKsO>hX$Bh4A)RTXWQګwFmnb7p (!xR$JJ/-vo!(>y|4WI/iVҺxf-kK_izNπ߰$W >7 nJ J)2 xU 9L)}I%?]Gy9ف`KOx20ԓ'^)33߼_Dӳ HHn݂FbsI5ثWWԆYF?xdn]^=# Q^]2\i!+I5Qx WCH# A(hEY%\\nԆ7S7 *j`qd#D] >O}4/1D@T@.XiAp*]ئhΈ̴E;-td(m*RRTz"%jiSdiE$񛊬 !LUd,P z ۮȌP@\5JȦ"IHwȴ$I4Z&Ջ4kC$Gdi%H{"i")m?F5Vt4a[䑇ӫP<52v\9%TpF(B)Um;M Rǟg^~O׉# <!9b?NR}gv(b1B s+Wmxi]UD?R B tC>jFRf:m>[x!WRBpR(#BAr46%$ʪpUWՕs_ZwPID-MbHPIIe~}R5!mtKUVz0͗KTSrԤ_g,bZ ז^!q(3@,L(ʅشoh6F?c}6{߳n=A܆[^8m^o߭8J)Z]n}yvSOp$_(77l$J @~ 4D<uրs A,:AU5IU54 @(^u58rr CM5@^.B!@}H"#DU _O֞Ȭ"-TEʄ#"EGE6E !AbgEE" m.HezEmCdHo튬@̂G(-y9/XdбsD5Ր튴, @e`fn.lo47/JbjYL1E(4+*ԩ/QJvJoJ8vbD2@2RqK|tMiЈF42 fcǫVqmK).LߵGI@E} egJ8nji7I6oG =j7T. s7kӭ(DR-g"_N>cz|?-xJ\[:^G6nBQA>$+Hf=z(-UtЍK֯/o@M={e F~jnH"MG׃^cq>ǟ>H h2+~ fb=zhyQػ0r+Vz=ͮUq 2~Gd4n}t_0hv_z2Y- ~9o(T|ea%V ]94dŢ^(Kf%,g E$AptFE0@j|ϟ}OH)GUJ_5eH PզR)HK=Z|3P^xr餼 Ʀ2J.dC @,pTSYAR\d*XnBI%&|T!(Ɔ-,Uyd(`;D;%D"i\ߒ 2)r%RJԴ# C" %mW e5H$q+c["7"k,I+%K.֗@uMEni*һDzZ!D]M[4D*Hd%2]i~& Щrĸʚw|$5F~t3)ר4 {*e~gh849J(L=v]ruyy^UT14ّ>}Zj- +e2i* Z$QwsdbE7'3{SfTV.y3Ც ?^ijuu\9R$!-ZWp6ǝWffv-,Z[UZ)t2w=:'#F6qy`.D)Hup)s dMZ W= M=/g½ѲX<37ܑHe4RbeeODCu=s4KHRB㯮^e)k-U2Z0J4ݕ?T=M4ŬW2﾿LZf<,y<1@h4R&E0-+]ޚu'.חV=)E˽<]eʌk$$`a7-ٵ&RUSaIϗ fM"G>_^~/耍z׻]| 24B(҃"$8YU!#k#4IЫ4CTj.iVE.|RQUbniVI("iHz\HX[*u!#(1OҠGI*Bt H%wڐz޺]WRi@g:c:ә&ԈTE=wVGǍ5\[i 0.Z4"bk-/-'KjRgP54-5\۷o}~!ۺ7DBeQ;R's8ӌmܮ w03O^8=wk?sKK, ?YcAUٟ߮U%,b#ӛUi$RIsQB =u.i꯿sj@tw0|3sҳJ}4 '0;;TR̃T~*F\WVx<=S#h8{%[lOzV0H ICrUCAY^lF~$L랙Fq24|<3\]s )Q]6mÏ+QniJU%|>lfH8x<\ M3=>TGMJTǖbK-La *v `}ߋ `6H> ׇ JkaχjpeaJlYYA50;(ҋ<%!h,׊H_ 6Dj-EhJׇ"}Hw"&"9P%|>lH"mH" a,nWdU{" Hb}[vHdy .PH龝'RV+Rɔ!JsEW E* j@Qe2*A$!%"PlϮG$QTH(cvQ -ueMxC3<:0{D#v=(R %y#Fknb[ҟ,k[?W/\Z5>^۟TT^WX+xu~Ujձ2;0Q/J{JIWTomLL"7EI%"G,:r|HHͷg}USScq-+ǀ[CY5DЃx|nJ*.'0t Ԅ⨈m#3-aKt! #D.>U092EyACB""}.J z1lHd([WGU-,Pzh$2PR5vD@d"6DMDV6E"H$"mԛT6DPZ(}Y֮H $v4ӨtENuI%ը.tA { eh\v.[mDhTө4J') ZjhmYj}Ca{)o]Oc.6T"N(uM5#ViƥHЎ۪UP#R4ͭίkV'69##}3N)Ӡ;av,6;XßeU~WјH&|^_n]\.UPdlWKupppppp(Lc?:el.s B)&TJBI;{*TRIKɂmh6ަtq7O LL$'6?.n>\g͚5gΜy{{e2<׏&~-Ѡva,ȴ/YYYs^{:1B3w?weW˖/(9za\[n.HAQJ.]zw2^z钋/>|8oӰN&̄34k#s1^yPuUUUwyA4eʔ_xw޹>L2ƿm !=З_|Y[S .y]n#G4.YtYMuͨQ<> 3^8Cz>i${Ƈk&KP\\|ݵ}s %K/?-/+?/g]p=xߧ64jE"Ѡ#]O?tE>cC QJqsQ#*!5P,Ɇv]3O!$!ieRiڟ9s!Dmmm޽^;tӦMv!s4zZU[[[YYٽ{w{\4-..KOOO4kgH ly2ԈֵkWESVAqM7I.{գ{<1MnK.~K)J˖'gegu-zʩ_~qŗ\rرc~(+g> .(//B,yINfξ#] PJKKKW\iZf~~~~ݺ^f!g޼yzʙ;ê*>{7a%|ԩS5MK$k׮LI:d!ӧeK%Ur}?x=onba{vҥfɒ%I3ٯ_?۪>zzXh굾4!Ĵ֗l)B2(ҋ. WjA}&N>dr>}4M/wzj( 2433vٲe +a=zo͚57n=-޽{X d|JnYӴM6EQ%%{3Lnذaæ P!\~z_re>}_~QXPاoں}{r B4MX*ie^T)5d 0}'{^vM0-8p@x?9Lװcl]v=B'1afe~9看/زz7޸{>V՚W찋^bkAJ))mޘ~k^",sna*6ߏv] ȣ>Z\\\_y#F۸{;nqśJVX9bk3c~t|n=k~¢`}UZ^zE?'F}ک=s_ǞȺ~0WZ7RZe%-qǯ\ŗ^,RSOz_|Ŝ9sá|SL ͲK|Ȩkne˗-[쑇?RWY +ʏ:,)-ʫjE(1J)KZR2~'>˯&@'O*.<ƒ< ppSC:=R}ڵN:${|Xi!_"H;sϤIIk<{|q; <tM7z=v!)(L}QMMuW];c/Zc_~嘑c@KF0b'wҜ֛yyɇׅ}PuYǞr9}332?ܼgvFvv ̠2ںO>{^re_|f}Я_?e2Ec,fHȶuFY=dsN>h>5˶M0ѥ(JXhC8h^#Zj͜!7;w 3ħ|*[K.ڸicEY=Fv~memYYY} A}u]`@"uux=gvV,;ӦNjx ֽ Ǟpz;T;88lpM716cƌfwQJqΧM.裏ヨeHTWWӞU,L) O~/^wA~Ama灃?7'W*Y[U[x^#B)Eo^߽{,J!f;sC7XR^r/u邅 *+;]nJ).܏B-h'J?5~4&3gzZbI<)l`Ü r_|_^SSN1!䫯J$i.X`kGFsO@< 9rIlfq+;+{/ȷϤFH7o{\r%PJ}O:H %׻߄}'!} V$bVL@x܊[²5'EKOdR$F7zIG9~{7Y1+B ii^r!UT*r\.W'ߛAE|o{܊9]J@AAR[믿PB A(b%-[I*! XJPFN<̅ VUWQJ'8X瞵ݻw?b}-D#]{t-Q4rHfO? Ǟy wigPPi?-IH7iG~.+;kҤI^o^}ugeY*/xW;䰴ҪRRZRDLIe<)\P4D[ 3vCٙم] _}UFX̷gJ"zyUL5 W~ .9^QO>d;Ԏ >fs")!T( B^ pfi:8i&Ic9fݺu{p@_ٝRۑ^zij,Mn喧~z֬YpSN4/>mVvqV% ۣnI%v><܏5:%m}UEպuR7v/c}z'ڇBx;\r;[s"?Znivg}$>l%{+?'?՗cƌINW_{_~Æ ׅy{>l)Ӻuƍ->b_SNXbթ'JAeg=|W~깧n 8f1ݺw;#/_ܧw;a =Ba7Y[n{С>h>}jjcOJ'SO맟v= -_~w7+W^[]P(bƓ.3gs9Ǐ6tXQ̓䓞gƍdޞ=Mv{oiIЁC H ;f,xQa%Tbi?)'Rv߾D_NƓg~QURZ2I{1rҤIƎBsѣ~4:qic?3_u6n<y(tzrTvx"nZ /JQ'b!dr!W\u!gkǔRI+ dq"8y'r* F.vxJC'}YjUIIi/g^WU s?h8Zdͦn`{>I MT wW\:Z*[s\Z0 t븵2h;YEeŻeQJ튶{ k䈑,/Dͥn|ҹݲe c̾B!v#iizg֌WfJDRCirR_"!aܬ-ƍwq'Uj־[ sK *Q|>Zw j>n*ps;X1sNhֽ[8pk-)i$Ra c /0|poML8~mܴ7ƺu릔 5`"!$HL;j{}-32Ӧ|c7\Z$4!BD28P)eYv06jxd2Đ\zvsd^܌B.cvAd ƾeo*~&xzz董 H[>4¾M[^&R;bwRD3dmՒbIA_ާu[L;3ޝnNfNq w7|we3sĈ#&k|v% @{֝y}8R*3|Siu= ف:w Zim6#*eZ m4mƋ3k;ߦw޷xKn]{em%~ᣏ?z镗TaOl*ni8V4]tq<w\=˷_h[W^vjRZZ^4x4,Һ5oUj5Єs9u)^>nٮ"hW$ `ާ{}Ͽ<K dddۯKa!D$x`y~ w)'s=s`槟}Z^^~׿ۯmwP?=GٰJR&D0;|v͂ZwZq"xG^|E;]}衇#4miX()w׮]z!))O駟K.=j~?+swppbO\job˜7د!n 3f]tپGQtˇs?{Ϟ=/쒢"! u5!Ϧ{ޛ^"XzG}4uT;~Wר.F ox‰;8t! uݟBakvx)SiΫU6nx8d;^x"~o.z˭O&g}v<>#G]2B~nͺslN?kh>}¶ou? Hn;^xqߎL:VHԭ;PB_}U!5wo%N93gnGsk9qk֮ٽ턝gS n5ϩiW^k׆jw0u;PJn]׷yO.XV i%TӵX,$1k/xiw;Vҵک BI< rZzg< l޼?;FݢIm'v Ja9!ĎoBRJ~:HlܸqL^2e?/ٲ{h5W]@PJ-6l:dmy8҈2GJ5H$tҞ={f Q /FtS*e( $v_! ]H$(Y0$L2Į>_JO΁M M.k/+#B!'.._l)]:{ 6(Jw}uF"ɎLgq֌gm(kFY+B@) O^ɦ. y?P1ͮV~uUUQ&3kac1[Ln!%+'3/4;(S{><*k+ul,٘G˴$]"u4#h<=eB7x?nC[6`Ö ͜Ѳzԣ=FJ1Kno 7eRNg NdހI&yQX&$z3<5EE=`nB:欽B5:KXD*jkkyP]@ ֳî-Jxo W=x")h=@4@gf<3xifERAv5sqS\i(o\n^EܮH64U;8O%Py{U^H6+FmY4@9Sh$Dꇒ7s87^uvbiqhWR\zW^Q_b`?ޣ;flB+j5 Ŗw IB veMEܸL<8lumyd 3i*8㌬{ǎn?e,H&11fo}Ȱ!C _c7;FY˟KH1ۥOM>P8$d+RԶn?ngϠŹ{SeVzPjkjl[["j R9Ā=2.e_Bʸl;{Wq)ly[95L=λ8m@$ ,4iRw^ hYב4ҷ}?oiVx)]{uu9gY{ʫ8sThN.zF~c9332{[뢓ђH?Mys[ HK] m3ICW<3O?{Ͽ5赗)[h%$TѲKImFh?ySLIѦT6=;@lx6 Z?] -=s(1 \ĕQMY1z=ތ̌d2YkQת*.&y9yBⒼWfZf,,UQ]F~w,  ?$ mLU-()H8 E\%e%hد$SRVح{] n.3׷_~++*-i5nePEi߼>;+;Яo%Klܴ1+++--޲r~|iS7l>v}ֳG~~KХKxkoڿI+pZ#\h2V VDPJ )LiqUaHǞxv޼7lzk͚uەJɼܜێj,L*|FZ)~TҒV]|{VǀIӧ94@Z` sۤEd "ՃaSM5bT߾}Mi6O8ٳgwmяL2xv7\^zyWo>sSgY9҃śmi|B .%Jڑ,͋Bi/lXGƀ(ǟjYD|䢢[SI+/bUorx=z8c/⬳ׯR.S a_ ءL-VOaMLccƌ9-je 'k;^GrkT dg -MV1tS9dAdr-"S 2BUK8g7\V |!T 50(<"c0rjGDR蚾G#I"4p0 ͨ%<A|҈PFSB~%-K^zzzb{j/}$g}s^uUGY 4dH/_{ hߐ[Ѝ]P0aP#JƠ u1 BHuutǧ,e5"TVNvNCE%$Q)?3#0LjAx}ކMMdT/)ۻoAaAiIi,kHbi#s[ W6=#}/ˆ ֳGyͫXrL$9O>~駟|z 7\}FB ;*++9jhwh;NʗGYSf;QS@)҂ډ$RvBɏ?|GMݎ"##c{K7nWY˿+AggöƏ۴iӦ;osF$ *R gs-Y~n2c.): JK4ndχ^k> !ĶiyBfT-?cAz& x)4du]x{<8s\>bq+nkkk "=R龊Hu.((H|JکĔR\q "lAۃF"EC@kjJ.32M+.RXcwyG靷sfdDEXՀxk>F4{KK$>hKnqKX¥& P24C5%B Hx]u~EQJy|hQJ%eRgR(buΞn%M6 K4 n ;Z-,KӴ=_L0^[+w_|ڿ_k̳ 7GԠu:Ift|JޣGa|[[[pG!js_8fjԥt4O?^tjqR@Or cP(_mɔ&R|7;BȔæbͽ{q-nQFFFh0*Fdq%)|y睛6nt7fq̔cZYɣ֑O)[kׯE#NYx=ރ PJ5\ R/zU(,#1ҽkFFPfcMRuɬ ݙy⡓& F hAX5aZŠY1Fd8Y]]- >S3>w6~"Y1)KY1#p3#I$,hLKOOW~몪ۜ\Zbw %4u| J#E^~94M3<o{srDѭHR?J'N@8x=.)MEUL@MfC=P]H.$H6+kJ`01 @"Ә"^%--,R[. $3g%x o梋/f`O=7_~{^s5nO:e*vmwvr){FCzZ03>G5nZҊxGД+~fJ… JXǟG`Y[jr}ՠdfq4yՐd#=-o߾v0QndTTV|GM=j,hB(!yq;YKL=f``+^]U=A`U}xT$mefKͦx<k$n: C?`xr߱N I%rGѡ{:Ek!) z DhRjb.WFj}iWef;x@CIede4.Ysi9yy.zUJ).^ ZGEEmӠ! @Kם>|Tl?cnL}yֶfha<^msx'NvU0J)4eY.õȻH ۈAXn$ M^ɴ}{޼q3 Λ7o츱Sy)SQ_rXmܘ_S$Fi⦛~XЖ3Rz=qiii>onO)K/$e| u(<ӏ>.iIԨG}'i(!33!)G}=zzf[Q-U^V6O,4K<'RJ)S5/E]EyEL @v߮)BZr#!t菇5JI)i>㹧k5RjKИ&Qd/PJCU+ OӴ۽y;';gፃ%㖓|%n_1c+Wy,{999Re,k+ O"i&hK?zQZcGu]iΝQ ݳtJhzfF^ZZz0F)f({ܫyT9iE?,*/+-z΅vc罹[f ca ?ѱv+omM RJ9__bK4M9jAH 8awžTw7Þ{@0%U̙!PF*ZjՃ 6,,0WppS`/I)uzMJ)53ئrnFk@)Ϯ⤙.~UW^eYN4m鲥]zٚk-}\Y JkoЛCp/޽zyVrPp\-ޡp a\qׯ> ㎝_t駝qFO<^g#Vtp(N^MΡL6;mO>L2p@M x_|m=Ovp:8)v{߭[77p~;RlII̙3; &|>ߩO)ӃߕL6-HwyvܦMz꩓&M5jTJ?ܹs?X,fouQ7x31N8!77?~mbŊnW_=/={v{l֬Y_}V5j-2`]})PJ.L6s1U88!1Ga (y}9ZPPp_ɱD]|I'=`/(!l/d ! B aDq%՚ڣ3=x] H&d@/,vPRI1H(e.b !c ' B**L$^wWrphxnrbԶ7b7^+avZFh>NA !RʮݺviQ Iuppǒ1_յI' ܝ2{ ݲ,?|CޗU_UW\uWٟW,]qյ[tppp#}8wNg)@,WW1;ws=/)$moS49wŝv:&*kO~#[-N&``N]K(8Rd, 6k֬#yY'_r%κA0;o|>nqؘ̚5˲,v ޮ>/?5 (p$ _XTص{W;LıE[~eYRJ沷 9!ę 錁oq<<4';îIx;888888a71!wppppp q ncvCx;888888a71!wppppp q ncvCx;888888a71!wppppp q ncvC[xO@g J5FJٰǟ8N8[oe)8iqH(a2)xsTgB Gab]PM:c \w{7Oh4 GzIJz^ܽknH=}  C1FROFA)!Nu2R^VWԻ 8LujaCu-t37okO0Yf)L 1Mi8(C MJ5F (*y,a}l: &ttN!G70Jq O :!X "u{OItҒ\p0@סS0r ppphM3ܞt/(JE _qrE'Z  EމN !RJJ)!}nR @p.w+iP1Mg%K/[Jtäl:DKx8B5QX%guUe[i@*P  = j[x(!RJ((.ru:*W:WPR *iIMӄJ(14m05I!)7m|J!JwT+"/HpƱCZxӍw?b_|5X"7lOD}8N;x+ 9i+x/g ˕*i]WJD34C>d/_~cC 3D!FC(v/RrS}矙owv 01 `PQNmrpKZPUR(KH%):mO mbPJ\ YuppإH^a@rE P .:n=5=m eN="~t !R40t]'(KX1&s~-8,sZ/\Fxjڱz~=p6sih dx} 󪠎}wӉ0cL4b>-Vy?L3nrppbFg1fàP]YaUw ]c:\^+HK8e:A'%C -{q-R]qB)q~ɗ.;R'cP")uj$:@pₛI@%i q'I)/C+(.KO;n\7<B %AP]?Ҏq{ hLxyBh$+e~y]~[M!(79:N O(! 1#az3e:88 RA,j 5K~p޲#`([qpp dgŸn{[Cxʱ~P+%jR0^|/`*S);8aΌ2VkYL4*iFВP-\pەgfRcVi.q+IaQ*7$t_g҃y;sʊŵ79t'OÎD:88( EU->zC'?~yJY +p)pzWwC h왧> &%S~@)΄[1 f}}TG~dbKJ,Oణ8᷃u_|^s*?vg@*QBLI{W+upx'pTNk@0Uu3aD;88,t@ H\>RYoΟ>cIN\Ԁp`f ۏcvkRJS)sO-8srO;0Sp%UW $Fq\;NH JAMYVLǞy_DW_ QJFAP r88DxWwhRH&{^~i 7]UQ3{]:H)<zy98taDZ b(0-w{^|~9g{P AӔBH-@Rէ఻8vBP-&%$xN=t6jpp(tXwcv ) .)R~sቧ<ҽ0O?jhThbq;880a0H 텗/d󞃦7Z*݌: ;880DaRp乧L;rP.1@X`N'71; a À3pWE?ɓrniL;8F8a'L& ޛ ͚5g`2fp+ [y88v11N"* o(?3OM%.MJWrΊٽ,g(={.($$y$pw/O3~wf3/002ɤԳכ߫ߗDibunT2N6K޲x H)h 0c'-R@msRJ NKUy/;v]wښiu9c{e5 n1cPJA\\+ qnY;psSnD"Z}bg@iK|Gc6% ? J*c qmem1»|A2䢵aK(!:P!Z_ d643Ơa0Ό1h!h-8`LUJɸ(鯯%+S FnLY0^ql e5 HK\\Y:A߯qX\_xygss A@ꗜ@ΛiYMlC/+W9aHYEYY˲kɒ%#˲6! 1+/~u_e^zA4sk" fa Q{oGXVχy¥K,?y晹_9\nGj loY͙:Y I$_hW;HÀ`r4HuޥuL;YVsMD*RAIuH82UZկcf|؉0,Z$Ȱ1FQ<ǞN7޺cvPЄc@C'{go3J~d`eb p  ʤVAf%s֚sVՎ e5kZfd4ne-=xaews@% guֽЇ;kG)Hg}GQ rT/fV_L$0 vYVximt(adWE=nų'F"F0@Cm)  |d@o H4RQZچW^y[n~94uԡC}A[KA&x`q pG94`]ksgiY&~ckk "rhG^lv}Uu8$5nd 5Z-9؟c&NK:,TW8аD{p=[fNkh -)/x~x} d=I~Ky?W?l֖mCC=C+<ϳUsjh H$e nS[S[Z\0޲fj#LtSWWy !y!RRch$8`po|թ}s{m;F*]j˲~ɆQ<@h޲6;\Ƣ஻_Jᄍv@Ɛ%1RkNfYV33Cfd&I4cgWs1yuC;TfkTcx] M$fkcx9,&RI9h O-1 Wj}{{v*A*qO,Z˲  $0μgK-kbL"Кsÿ\_'ަվl 72B0[zem6Nsc-S @?=˫eFp١%]"w9uwjlKeh,Fe$׿[&d Ͳ6soY0 sAF#CyG bh;β6c6[F)D]|w_]^ZzMGwJIc4xڌoY,@s}pяĶ?ti"Ki ޲6k޲pI4\(Tc~~酯-Xz>/!$@#9K{_,P6[#܏1lDd2'0ƥ>Yg.>ީF%d,kK`em1.܀ÅɑL8'eO>}G9Q (ªnYf[C/SQp2qe>sq :O$`p߱ڬ ز\FgQĝ>saOT^=8r d f5xb:aа$RZe{u]OiSkc WA\"`I-"em1",&1a⹧\v5Uwc R֏H\&YxR(i|#k] a =bǬJ <> x5Zo8K9I--I0悯"oY֖mxi,H),P8wk ^'!\ i-`Cc14ihXH_2θ+I[eVe @i)0oڲNƒE^t ` G(h²&1:QA)enYFFZ30}Lz~ΏEbW]uyg(:w-ʛ 3~sg+Z_b1y>=֜18O>|)\uW\~JY׿ݲ? oOF`ŊyuGcx,kRPL^p]4_@)C* clx? #Gի1G#_~GyD}oeY`oyЉs/`ZeH3:.eYyq;o9-7 =䖈ӀI=w?oؓ| K#-±Ko2>f5]]jv턾+ (2~;NҩTwDOjŵ hZVH>&_N tz/IKj4 ]͚T0"\ꟸ,/?;|3曓O9^Ky c=w_x"#KQ|( b uf.H3]4;&r.w}Dʤ |412&:>[kl<*'D8w־Z8 r⢕uvCGLBj.\ S ceYxjjDre6rꙏ ~{8Jiȩ  skGIV,56[V2PdPiLykO>eʒ?ިN">$d Y!.eY?x䴂1`F%G 箷yOO=srBVcÁꌺ\N:oY֯޲6-j@Z;poի^n|hÏܡG*_I:Wcf[{oY92:+4$gg7:iЃGG _&=8,lHzˊ 7„H8}w/+c^y}[kda$a\)Q-}lhm" 㤳yx1ZMZ}z.///2\%IG&c1l&eY qु:|=w (,,(xe-+251/)X0 =`leY cьq 7@h{zMYa~{tRCz #N+h1i\N6m޲xڈR0h8Ť ._O'\7egZqEY4{dYxh8MҁQ>'-CxꩃsXemJ6[F6!g}̜2~փ] <v˲6)-kaKD0v>,^R{%q-J",jNcY1Hב }Sƌuyx_[d@2K޲M-k!˖M+;Gz>C4a6`L2G@x˲6!-)Hm\C`0g[<7Odž@q탷,k޲~:-31Jik@/66F4wwN #qW, oY!S)@.@+謳n~ik3č.S9وnYVS޲~OP2An, v5o1v-#?ȭ(q#)c|߲?"-1##X6]81|?E+6뿥D9KbҀӚ)-jj6[^4fL8>ĨN|Н:F۵g(4Hg1p!@_1b1kpv~}\-b j @*8A A|4sX0wV-xvH6 OeT?|Ӳ~Ն:c6U{'8Ec $omt&-@",:hrwBŲ_ƭE g%AR VvK;AcKR`HسwFXQY[ qtW^EEE`PHH$`"i6K%Xjrt#37Hi}+@.T&%Vx#OŴv(k`{o +a1qBoj69:uԿ_C;h@@kjҮaM1,1ޮ D}P?Tk(b(NMFf9μY˗:S{]'@ cnYfZ{!%P}'PxseiYb#K/kh]`!hQSR?x}FՕyT3HCw A?|h}n1@+2"3`pQߙoٻc$@7~Z"\M+'j64={P2\~GHDPtق^N]Tg84-`[$p•cCt莇wj]RY3EIC͇q\@,("1fgf7$ЙFdx}z ݤc?e \{߭?@J Ai9Og2rɈv"n5WceYR: U?){ɲ5};Rc9O)LO_r%8VFۇ^ Ή`że}"8N?7_`au^rd* nFu{š"1gRJt"Zc쓭/Ƴ̐&02ɘ㉢tz bTlCwhۺOj   {,˲~DOHP D Fh$>R2 Qy!P\I9e7O ׈YKvRC.u^ٲ,k3pnyqMnFs=RJױ#Gb|kPZ>zڏ˯ uχm}۶T,u"Cq%aW,kso[H$"$""aI`ĔT\G|f [c.pV=c{o}dp0 Pu Y-" r8 2DD6#)PA0:ug<1kf0g'Um \q13Q";Ͳﯗ;r?mt9(G ss[Z`M=S8 `05('N`Yf6 hLfYO_صs=w ҵC1OJp;eY[*ͅVH Y(©@1|yW㝥 #`I]Gw, 2x:[˲- f0Z( 2rqH"?c;rmZ*+{WtQV *(™(3"{[%8k5p\@#SǢE ƍ[I_m~;gj,<0N^)S|{5O9cw*8ȝ2٬!0š]fW?,͈_~yo|0r> ~Gr@n eml6Zs\h'€ȁݲrrԔC~1a"Q& p(L46{޲- 1& 3zӧ1`~ǽP )  @#0x˲x6[yfP%8& H2NhD 9Y VQZѳ wX6@`"N[ M"kUq{ZeFimLek^ԃ.2N~ huջmݽG֩QQP@7M,Ml6 Fܐr n>諮8]ׂN衴(q4s lt,ml6L&eU*߲Ͽ h }vV^c1?V)jYeF6[D<˨i垳YE`OפnP(( |pgJ׎甮ϐ,˲_6B;wnUu bXN^71& )w`de͖1_î& 0XCy`UL~n"ڽMEǟ:v>-pK! cBC"0] Ѱ5|~ՆI&{3 ;o Ig"R+9h@+MT1y2Z цKm"@ZSP0 &'St$vˍ~(>;Kj^X.GaB~Հ{kC<Ȯzv7F#"s ; <"Wpݛ5VI2d2p2@V Nhp p̘@'KMY@(5ofZqƉ:mh?ꨣJKKZ І \8(P`f|s`ngi#@\KɄK8VoL}2}Pr:O&Їٽee@`)"J6S)d8˭w8mj68pR ԅ7L*xrZkƘ2@&d#, umhb&LY_A6dd:""‡! 5jU/-7^8Qٳ6ե$"`ͮKRxax@cSVs^JID |T,Ӿs箛.\{*_t⒊Jfٮv @@ \$ Ƴb%Ϲ祖榣o@pzoXMUuIE̪jĥ\iL@I@Y(emT)m~V&[vT34X׆x!H$L%c2#]pĩӮ}RѰIc67.xg3.2O~yQ ҡG79o=o_> Z,%H0 D+3'ne5+?T*dFwib gO"W7"hC`@&O1@\J# ʀ Ο1sK޾_ D EѵWGw(r4u`K&rdcVv-8$;wy,]:FszqndnWNk V@1(4d`8gZgHM?Ss_~ saO^u߼Q.px4f$Y[82߅_^}3NqO;4 8ēc͂`%: RiDUZbP |w5=2} g߫W>}=nߖeY {tc(SQ^9 *u Aip4 c(Y_ ҉.|%oӭλOd<ջ,Nrc$-˲6'tҪUD"Ad ';cs D~;.p=P{m+F4Ӂ#^+7]^^0(SYem.6f%tF] 츑B;U@=l*ņ=4(T:T&W﮼l 7]Qj uHCI&Dl, l͚A%6Zpa --^n=zlU4}ASWb^Bkġ`)jm(fY1 )1h9ZZ?+ @EܬFTƕҌRߣM81-\W&3zʼn=:nC+czL0F h:='7Qk85߭eY`4koUuс җh C`2:Pi2 H H0^N >xkfh5kk@ 3~)Y.WNnW1xIqa1veYfĆ| ( )` )I8<=ŵ\+A2 L-˘, TqpJ%?5{Iim bZl,ڲk%C\8+4U2bC+PF+- p7oԿoxgl֝7w90wEM+ I䦑el8oGeY1D H@ˬRxŅPXΘ @CG&rU[9Mx1ws|Yk rp\hG~ݲ,B(pƵczX$@(7f !@[\QUF mj.:majr˨RӛZuG 8W^kLp~z Ā:@uj38nu?g"M>)Ь%c w8xB(Ժ᮷eY[ }<{n fɾhf*}:I@> /*\(tsa0߫֨~PH v~sHVǴ*)Kwkoѐ'XZU| =eY.PJ|eYeY@1p#wV˲,˲~ ƘbXmm- _gR˲,˲Ԇx-5g\kL& L 44[eY:w8T8c+qr4leYgazq_CSNW\qEȲ,˲ nGGqđGTTTp #˲,˲68Os3uԗ^y T*5mg{& wx)g~U/ufqЈ8=I'$i`gƘ|>_tф ؘͷ8``II #L(cs~k[?1,X0y[R/xZ$Fq%SԹg#dYdxM4}_jɈǞPWW7t|xCYksC믽ތXc<ȣ.zî^ziH4_o_?#.z4o]v.Ț ],ks. F!$((HF IPW~k3LH}Z2YI<6T@ihԏגf鴔R*Fb`3edVЍnXy*aQa%Y)(5 ee#LUې+9l}!븎p1 gY@'՗ e.p3B6`D$ &(ƙq? ݻwgļX~+ J)9] ^zi>Ks40i$a542D`ha4$14+O?t\R)2sC &M@J$1ƈeU@ ^*QJ1bц@h" k8g&Y֯[Rpኰzޞu%7T`o ^AŽmt.d00f2 u~sF~Ƈiv])UWWMg1JpF1FCHե .x> y(cfޖfCD A. ODp6٠&cYՆ8dH "B.35R!qTH1gNϓJ@c@c!9BZ{\o!W&Nؐ{jd%b0϶ f<6',h`c<>Zk s1 xYV5@ԁKZ 0YS@c;asL&cI)xSJi9 zns9 @*jp8(O"1T]ʋzuCYGBu]$5(12dVnMSPy+'.Rɂd~GCX֯໌H1΂ `&&jv5x!XTI% 8a#aFVXs&Sbq0yRZx~'F\{bXL`x3by?q8 yĺ| !9 q#tѲ~xpp.x4K&Z qT00[?#BK)y5x' )lGmcspCH朚FpH RO ÷5- g3~aidB0b2Yֺ6N;a>~22pc.1 s@El&AnM~{<2y TJ mTƒjg ҁV9qW*֘>]XS4ݩ˙00i`D r(|,FT F5TD& qaAnlaaunY PZ'ƙp;R *@MF3"F{@)%TRgYDv"eK2ape !oo#܍Up fk6ʨ'Mr05hs R !""rs؅j k1bh;M%2AcIFqj%s;a>2JJ .֞qƃL~qsƘyRJ 4'[8SxRpI05A#2Zi0(1n50ʨ?٬F3Ffq\A+.'P6e5գe4a(@*WX#G@Kerʚ&lFAE" ׆fe \2 @V)(7`aE˭}/P+|ljE88d"^.x, ǕAekarJUUr1G=駙?]r%qH氻[DR"llsqh:pgU+!ڬ~嗇K|]"-:Z鰆w]wC:vϾKJiӮͿpdĆfL.Ysg Gg}QqveC 9ÚW_PRR2tP#M<1B>{d>餓1#gyc{oaz`ǎәt,#I5Y1܈.h{x[nK/"ސ!C>xՌ4]mׯHJ9ӑsK%U"U]w(C„5.xn&Uw_?w0qs.̛SZ^jɤ3!6zt9d@ӪUdҩދ1x"W^Y)<ÝTmʋzMе~8#fÜ9s8~vFGї^ziٲe02̄)ӦL~_]wua6c!v3bMBmmiRq]wtcu7_4EjHG:u_^QQ/\0oU;CG8Zip>믏;#윹s v(o5Ma"ʴ,i=wqں:?o L>)wiʤ3n/D2` *@ 0@K=\#  p<ӌ6C;@II9#D#f G4eQx;zwn?^ @p@)%9R*h4Iu8g}SNn턗 "7.NU$XG6%i@ y_s.HN8Wi"̭$8Nj 1ƴ]<s*8|XH[խ@ &!|w>cL6kM Lӄ+bXND~駟ӎ;Si25#00A&nw/ 'ж][ܹs:,0]T2F%U1cr-D|!?6i#>{@I#<ȆoPZuM1!&X=W^y夓O:8{lcͺ{x7郚e(pJ Y<1YUc7v@g .}qsw\ƃppp'$FK, %  !54MӾ9 ,\x!yQo`G`!CM3IJ8s=xڒ#n ivod$ E)(LSO=u);ᄈҾ+=ܩSvڵ^~G7Ay5HQ %Վ;;@DG]w:thNcJˮ,,Yjn~-_m۶RIg} 7TVVo4NxO>d=6sbQCnFo۾-g]~Yy^8(Rzq5n qвeD2cW]zU6m}BFֻoxcƌ?lyfaw`ӭۭs5LIJR뎡 (6 k"5M9hWc Z5CfxA8N.i+ A6Rl٬81M55ιQ HY<7Ƥx|Ǟ\F`YW7^wc/_>'zruu/xUWn M ɏ ;/hs.YDw"/-5k3Mkr>UveYeml,˲- eY޲,˲@ jR-˲hDM43e5t_}ݦͲ,kq揶d5 ͞=n޲,k1V/`YT?;[zjPZuNndƘp!d˲,˲9"RJ˹F7,X.UZeYTWW5Vc$;Mms>-1Ƅ-favUcY_Jͤ?JRo&cwoԲ«qwiݺ/,;ܦu\JavuVZ MǞo &f7$ c~ ǟ`Y,w/|]J YPTTDDy^ PXPXPP𻷐 9gTPXM30ƴh"J ߅#jd)++fH4/(//Nӿf"Apr:\p@,Y:鼷V,8O2;,?׼ O+6|Z͏1Fks1| 69LD00aD{=YL$7EcQ.&csn^ᜯZL$k32|ŊΤkf 9+WL&;_JMCX"7|ߎ?>7~劕/eW]r&(j9K.!-ZvNɍzIDLD4>pY(щ,\r'W65\3ayl!TmjUخ݄~c)S:){ֹgvƏ3~1L4߄+ KN2ps#b-]1e]Doz뭽zx,~!m}Ç~ڵzfΘѣG2s=gϞ}N!HhwϣC502v(10 /{=1,U)NDSLhFLqEºz[/vS&׾հT:ﶩls4634|/5 Ș;õ֍9g ԥk%غ' 9㏓N$ą#8 oXo>#Fl=m/ q✇_l๒ƯǺwغ*W&4>#FNtߦKs Ϩ]fHir]pr7,pdM>%^Smc6O^n14u]N< ?0H$j1a<>3cv*--7wSO?wyZx"QGښڽ+ϙ3gأjWզR[wۺUy>`Ə38JҲN8aUͪQ_9m}?O8m붃ēO=6U{!lHGVڢ"Jiueƣq"zjS?U:VUѣp#kS:te]JK[λԥڷk;6[-Z_[0ޞ,+*+?sqc%%_Oԕ+cҒnJ  k6ݷ `w}3.gl7`G޵W㾪c=ҵ采>yiwe~{s' ~?p~℉ ,\xa~z3~1l0)Sλ7&M4j t}wp]!N6eԗVV,*(k:J>ɓ&s ;i/G-]d802ƦNg2mlÎ;b1>I=?]vޥW^s//Z\,cw+-)tM5g ˗/oٲ%q3fرc9[ne 3̚5W^dM4nrԗJD2ѲhAH)*PA(1Ǐanm&L8-doUխ[}|I UU*Z}ч#Gl<[[Wj۶w}72kάaO `=d/|=fʴ)V:t,L6^4mҔSnfo?S e'~&pwQעh$iY2Gue붕m>aEuرc~=ƛo3o_d2YRRҢ.|~g7~ҕ}R䉧8ibkjk}Vtбfg?SXTXYYV1"nm۶|Ĉj;55zk&)--QcGU/\p;s55a;|I![[ګܹsoqߎ[p᭷˯W^{믿?3f`M27\h]welqbmtqqˊ8ٴ~՗kkj?蓗_|fEm7߶bŊʊ/|;o76ѣ}YOx[fmF}>^O$c 7ސDW_b0naWַ~eK_~1Ǣ[ouʥO&l]9wE> /ֺ0YXTTvc163gμJKK_}U!:AЯ1Q,avܪ瞽lٲO>W^ҫ|I' 8 PFl}ƣ?Ͼׯ駝~wc{k׮zr5akۡm>HD ߶j>x;oչԥSضAuG٣̟f80HU |n]ک밡V,]l]yQT|5SO95|?oL&G}9N(.,qcEEv:бCGG87r7' vu^ ~xφʨ? `=v/)) WL;w|G2aǟ}/;d29s_xqN[m{TgtʈF=mD|vڵg6om0粫Vլ۶m;!Q/ݷ߽;tl߾m6,Ue֕[߯m>E-YY?3={7F9o1ϋthA)`~ryƘ=zlw۬.]t 3ݤ&s9N/}5nw\]v9ckjj. ?LǟSys'[ձSl:g_z$r9*+;hGkMJդ:tЦmٌ3:t|xA${02:wkg` d"Y[[d,\ 'ÇP5h谑`AjH"QYQR~?d%%~i6q+WL2 )v^{zۭܞޢvnpg}6cmoo_ꛯ<Ǜ8eb&0a1& իO:yvnص70:Jju[̚7k옱-J.[cX:nYҲMeuN|>fZl|왳XbxjS?pv = <'Z1Sk^}}~V]{vi{ǟz|%7?쳧yZluhc!"s|O>s΍\t~>}g_m<-veD]nߌfwZxI2<ݻw۴^tI=[ا]ۮ8N%ʊm٦fUMQaK.Kۯ}eesg͝;o.SN\zYD-Yd;u.mQpgw \f lժ"F:t3gN۶k|rֽ{X,6u^={h/jvbRk{~aE]v[mU8 K)UZVڥkq2FZֵ 1kƊ+Zj߮N;T]S={+Wlٲm"^UVW.{e-˲lmЮ]گXW^:nղ~L&λNYFڶ;DYyYi9,_Cu]Pmڷodl'+.)޺m:Y8aI͟WR\rq͝;w1}mjҦuY3gUUWy(,(UJjViۆ]H4~;vثge˖͙=fUM[Uih93Xly޽~h[ndr֬Y55۵X"߾x YЦm=zݶoʚYfUWWlӺMp_84.[Ig<;ȣ:vX^V^jժUp`2ڷk׮]ZN]v8Ǣ^z+@"oqV*ZW\EoeEe.ϛ?eʔt]{쵇y/j׶]DTWWgKuuރ fլVXQVZ֮m;up+++c -g}ʶqnUTV̛;oyFn]Ҳn]q{;H)KJKtN6a:uԮuy͟??ѣs-y+++0@CjR={LyֽZab>4}D6miP\\K/}ǧvZ<}IDAy֯S?'eSXբ]C^uUJƃ;z\p'^V^6~o+/׿_8\4N]ra2Y=ȵOᙌ׌ZލfixCCː;Np }C{lj|߿KnLUjժt:iѢ<]pX޽駝~þPֲu骅~J)n.z"4mҰeY;SNM7~6fR|xk4ِlmJ>;{?v~ѫGIY ZS۴ms,mQUZ߷wopE:7!m۶]]Q͵/wNkƺǮ{)5q 5kMYs´hbSx]D"q-7SO>dTa鑍߼f7HڵYm3F !bz-p-7y#c,c\]<Q6m*স2ҹv7\/%X:6x/_YU߈CEEE>̛oqUWn߿iv\;sMOXy;OIIzG3e !?οBP(_23yC p̄)l92p-a 12qJk=tԐNP(6b}25@i}{5};B $564?J*z&ݳ7}d/Gʕ+2KMӌ@@b⢂,:W,GJʊ_i!x,#@ 1# ˲ot@Ɯs2|9Y9[}P((`ޤ>\#wF:{ Ɔ옕>K_ummA+͟WYY$i䨑$auCYjռyg}< cUK,^Ѭz)X6[ZZi":2c0=g8sΝGO c,` vdu_ۣBl*-)uUK?X,.JI4}qp}Y"pܻۈ#zbW:팺]Hs~ظ gJt],YºQ 89_Y/>c'UlMj (U( ŖST$A Y_dL&_؈ Sܹs~˖0K)5"J؉R"b<7vkں?.tN,+a':9n{!RJ c_|EvNvС;!JU/^bEL&SI]׏>+/\JP);L).+^Uꫯ:i^p@4]dIcCcB$Daa~{D.^ܢQ,@ 1lIZThs+V~٧S'MT1ysf"i%͔{;aE튎Ύ{k{|e&N mfƌ3f̘p$p¶65jԨҲŋvD:uO'K%%X.kŪX j=zrQ{= K&\]UҬѣJˢE +3|@yʚHǻλ676_)-46e71`0|]nW̔ƴ!C I= >qY"ۮBGX;cMJY1,^b srss'L8kf[QGE:# Rv0ww)la۶]ktT*~T "&H( [miH8)^c v ufr\}%c뜀4Kkkjk>dx^~^{=2Z$h,T1>#leṹNm mf=Ri02LYHgYR:Eg|&[9.\w-->oеoD[,K&oii[Ulٖ"[j=Qi ?zugbxL AJY__VDWe%Ɋ ؼyr0mImi;Ns zz9K'FBG/DD2pB,.)vdp| Hd@Hҳs6Rʤ|kh'Nf1$A㳈eK}_Š bmN٩"봟kwYLaVUV;6'7y9?.}С0҇8+I;x}^x}|[[[C}UGy&[VjUC w =9#+la5]IvB  V-qi%s1iKn+n7ƌnMqG t[3\xɲ˺}͙gKKKIjr@ ayycƌ{k; !ZI@t: 02u+ڢ(XI+**.y}   Fb+e^]gzm_UR ˗lIdx2!#+2=i舆KQ6,L8 f464ܮ: $HW1āKpĝv KT;Fm[d P8˗HK2dvWU!֮*+*ZZVpiQiT@G[G7˗sXysB pvvvm}mbS>YEc !OM---ٙ 64.#8# $$I@6DQBHF i"Þ3{If1iAmxhvrGB Ak|׿XSSTTXTZZxh4jեťaA> YZZamZ؂I"pg_|?m4'I$$t֡rrsVկP:5֥ŘX4V ;+qRZqqq[G[UMՐAC\KcƵC2b,ApaÓΝ !:1`,$>oАA>7w3`Nn`fpOvH$ۛ% +U,8jԨ#FVUV_0q>l$锽g%SɕW62`#G>I5CDTQQQUSzkvᢅ!ß1lذP4T]SJ 4JKJ 4;4Xb媕Ǝ;l8nj ׻vuAnA͊h" t]9ddVv֔ S*;Rc՟E*P(롫3zL$FkH4}L1ΉD"`n4//KMg0v ?]ǎL&ϝ|mWZZBxx !/-!.R0dH2}[$Q ),G2Ɯ!CoVii (-JgZ;cΚ3"". e[z++*Nk":#ݝݚ|"r<`<0XqʌkLI ,]Rn옱ΘI?1|;D$tr8CtB'"Ml[\w NN0&\\^ _1 e2%I J kq39tZED HMJK0-X:6RHp@ aTuZs.:GN8MlljoX26rH[N ǎ[ӡ?i&WZD|n_[{ kb$&#=3WȹKgs_@ڲ1'/q2mX; )zt$Z y*{\M_;??%].r⅁rna,rϚyS0.t(vχW γa 7$BP#z0s%2KX@6:DRt/KIDH$0g#FD;SX4V__o&g<33hcR@@)e#l[Ƶ53ןj0 %v[+c&n~ۨ"B@d2vvF 8a"[{Xق%CS_} źǮ07BP(? [6?YJ+kKKK<?o~Š( BAĶzj=f2?6qĖի:l0g^P( ůD\zu4-,*?~|"/4R2Ɯ5x*n[ [P( ůDL ښf, BՀ>^4Q( bqH@|7|3NK+W\vؐ!C^X 1uԞx`y|X L$7fXoNT-e=I}4 J# 2D AQ(A?|7 .16gg{fv2lsssv.pbvi`/ev_iǿ1kn1='++D|ӭ7]zѥ+nd IP!tqy:7';zB0dNH'X>t9>KqߗB:c]e.UhHF#[)-3RJ!D_Kӝp?1Lw`I[TK 񻞆n+/2''g3{:KΖN``G͵V3!OIcwBCj?;;;=]wk]veGB̙3禛nҴ53oohǣ8*|7w޿q\`{dz> '}7mӴL7 \;U+k/0QiH8R]]}9̙7' tw'9O<ߡ " {g} bm /^skGW_02C6wܧx Ʈڅ]ӴxUUm&\Seku󆛙 7ޠ:I*)-9N)m^q^}ѣқuUW_~u-;5k̤Y1bW\vŬg91@ϛ?ꫯbXfv~iXpFά zYg_81ONO2=߇{̙]Z\TPpUW7.⌯^3O=c[Z iv}ޏ:~ۿCS˯k qܹwu^QQ&瀝y >f lmi;[iD%bX ( !˞bD"afwxS۶ ^ҶmMom{]_SO7.!UcvLg%xg[[sx|93Bu󂼂O?|@Ҫ<'Mzt̑<#,>r8Ԯ{nvьjmjM䧒T* 5Յ`= x2^{u]m_u]~ziy) VI2‚QCG{m=-͗^zC.B )8{h\4hmۡP$!`0d7 yǝG ϼ>ڕMMM!C4la]P$tg?/ҷ~{͵ה_zťLgX"@pv !‘p8BZ5`XKKK"Rfdgge+qРAO?tKKKqqqccW׭X1pf2m}ٷ#5^_[ ;M̴,g;+>---NMrsrd*;'3^0 {^ocD2;4[jokwt'MMMdBZAAA UeggB!ϗӭR(Y zΎcGuW_H7wꩧp^k'OD"v+/?:7_u4MXd3&zrq]zɥC̞-lNo"G|s?gZf{[ihnw¿^ BJY\\dcc#>W_}U!ya>/RAy%KF=gΜCF$5 /W^{eڔiW]yՐACU/O>v9ofSOq@2qKw-^vW;{ǭ7zɧyǝ{ؽֳV=:6"qkȑ3p֬YD*!,׾{Ͷen8 /ȼֿP(~l"·of=+ŷ~;裏~ǿ>'8qbycoYʟ%?c0Ils>|̻>󊲊A -z=|d:9/{d1/W_+U o]K&o:sHƑ5?Î<ȏf}̗=X4:ru1`pGî-}$M[TP9P[hы/3jɧ9cG=p[/8EK1β3=܋νoilk7gH$nq0~ǍaL}r2rN:}ݗW7z)yם>#xyn{]w5 |Y]\WW8bŊN< .%U_~e}}]UVZ6p@dX"vmw 2LغР/8bĈ/pf7zi Ǎ/2<W.;^}m?Aw GǣcƎV.CP4G=w}V5XK+x χuuu Y[KO<wqS>5zhM9q)eiY'<g ;+{X[Wj -Z#ԑL%[[8k3? ph܅gamug5~HvJm۽}hhjYQ/@EyE[k[͒^{5lذT.|>>!H}W_~eڌD"!Bض- &QFeU–RjL8aW_}uӭ7(?ƎڐRN8oΛl5/Xɓ]WrtA |Nܰjs=8J&Mlijyg;}K}>[Oc!51CDWU.|'‘p~N~3]j`0Ϟ=n`Z۶ cf+ b;"ψ #zuDD}- a̜9nڠw*۶--iD ņ<\cd'ђVNv1j($)+eٖ$)IҔ f_}%iKBCp 999m")f4%RZ2 m:;tޠwwpև^w¸ ^7e,$4]cM6mؐa)))ϝB S&|3ߚ9} _N{' %-m]vL$FҖiT2ԧ-l!EJ#Ywܻ|7}3b( ߾N#@fL4i KHa +%RDSPC줝$ -B,V8&Lf0t/zE7\+%?#4xPnAaþ\tEI+4)L!3XJZ$2ٳADTԒVNԀeeOߟv$3⛯˟2x]vek3%74g:Bfwr` kBhc]]nO3: ,{=2SKN4m%BHA@=],),4x˯i6dɧoom}v .w\Mn=w?c2~P6 XS,]bHE~+??kqp܅~n{zR);N9 P8ṯ?L6UxV(N?Τ<Zt2-J$C uTs)d*v&w\Ϝ!;SL&nn$ bvSSi)3dq,iծV3>cGTw4]w+鉚.ZzOgh۶ TVZ7N2|c_|eYK#Ιtrcu$/w݃ B8q9'IB aQ,c@c}W\z)']Ou{Q!GAD3θ$9V઺U+W4͉&BZ5nܸ&H ӟ=t.U38OjVԬZ \ p;M۩g:ZY: Iir" c;tv8̛?ϩ r>8p@NZ )O_6x-~`B[1-[u]!bMM͢EN?۶{Nqc|UW]y 7w[RdwXl޼ysޞ{O}Qw["Izh(3#sv% Q+a3{'KzhqQ:!EG z. ͧa19oni7x`YI,^>}ur rG S"ʞeX݄-ĆV}U-{{9?9>]*ϪUncx`Nf1,[cN9OWj`BKko޷Ҳ~3870w,}wJ{tyO͝?jIu` { ~s\Gau'_|H&I-+*Ыk'NQYYlmnYYYuݖZ]t" 鿱5yu`ȪWTkBf]CwGVn'ѥpi{3GL„ŠxdNa1|RZN6|prKZMKJKaoϓB̓NWP-OpWl᥄m-BP(6Իg^#JdȔxW( W"/=".YΐY)Kũ>B'nu.&47"v:`_KE?gΜum@H$jI&+5SFXN?݀N9vu-SϿ|> =zt9#Gl#h K/g"pևOӠg1dwe 7&/N]Yh]n{xVZ~DyQ0Ɩ-]%॔hLXȮ1:Q"l7xlz/|lV`Lۼ[.\SQQqw꺾qs?ik+0-Sa2/K[;ygZr(Wν=8V /g" w p䩦e.5~w@vɓx:AĪ/f!D:#3b ;c={K*w}E̞3ȰxDž?@)}"!0,wGMox$gHck]]+ht(`J C۲ H)Mׄ-4'4M)lr"y}-8@Dy}n1G9BRʜ~'qϸ9D<Oij1VyGug1VWWw衇:bv['>hU3=ѣGXX ⊺K*8[TU{pp16t[neY_>#k7AĺKcJo㞿p~ŀd2 r @StkKy YdUV$kB0jVdefedd]4lI$HRQ_ tZ >oS'Onwcǎ]YrHŐEϝ777/dpJp4-D^nt@[f Ι3gKnMFtgefҰԯ{9`{Qos,9}o9?v7>b}l|۰x< >TCnAmpqvt 2-dȀs׾Ϛ@ gx#/Z|m} L%K#9*k\OB$jxSw5QnǕ攮{9&Rx"2tQբi@NH|h#NJ-'\9蒋.2gJSTUU-7zIs駓!o_gϑJWU/<(//t}/24>hŗ~r.wYT ;0t]]+9l&xD|)f#{1xeVmMN'7|[x=sxƁ{c+~D$IS}Ksλc>uWIQ_]wu1Ggfgam[oz %Tayr_XZ2p$8ٙ\yUpөϵ^ J>>(//3kn?n\rIQaQ-tյWq_|ť%o櫯:|ɧUW_w7cs9)E!W(6NEq~-X1cbe)oʎKn/JJM47os=g&MXK?1B~"?9[BBo3K9|Z-˚̔JK7ffDD pc=ڋCeޗqEk1fnh̤qcmc/opΓ^5Q?\?bs^6|X~tgj Y"vw527t[حH4R k% ?%0΄kTܒX( H@¤ <ᰱBh#imk]UTQQQQ~Q[Dȃ~쬜lΙSιq;~ءf}F#MfBF7 %4GLJrH""cY!IdRHθS7н@w:327qvkRN8YHWo0Z?G9SVZ/tM>7xgefKq-p fW\vE݊ vN05`AV~HGg'bu߶Ŀ_\ze22|xx cE1ӓ: |wR=SZR{!z!Gg Bb z$71+9Yk7[:K^+c.X2'3v~#z|s^WSw駏?cԷ׾Zų;f?ݍ唎٫D D^>kKd5prscsU.+))zP</,,\]h r232Ae-j uԳ2&5f-z͑3d埦i9'ORhYֳO>glpsq?gbР520Wa\=+eI &b6g@v"w;\Hg]--D VUTTĢH!%dGCt].ÕC7xBpd*=*"I~???!'t?VRVWq[w y8#_d7xㇹ?(?#ƦD"nuG{㬵;n336Mť{Iq r;6PDK_^v@p{5egS;jI  2:lPG2hׯ Gc6 f=R]՗\> ?xmWmM2aÏgxM;SqA6ngsY;e1lhhjjr Mk}@:Gy;#׾Zs;""p"gLY`Lv^i$_8^ha7$I;8?3іv_S&X0h^{=؂e}Ji-k/]{5AhhhhjnZ+D4ga @ݏDRhI!-iQ$J=%%%sieu:/ci.K& Ww;&}_0[ڽ+zi i ),iA3Xg=Br{WP$iKz_`<_WUWw}CqmVZrᢅ{n - ++NiN)+ eچHHaI?Ȝ#jyIf^9L¶JPBXP@de K ,iY`~@h4H$:Ý'i%;ceE,Hr d4= J M $iQEEx< $,]-.j~ ufe͘8+݆ȊZXشLOcI@T,etZ%VdRmXGƸx= )$IS (ED#ADDLRʨlܖD 6JV7yyyƎK%S̀y_BfneGԳspVCu.IΚ5+0uʕmYu'}n` +^΢tzV 8uqcz=L{FKmZf3L$]P3E@1 0Эp!GF $D&70dy9M p-79 S=sC MYƌ̌#FZU) ^cSwq#[_h)px;Oyq;>BXbY)7?~[YqgıPD{8>$y D"l_3vS#;IҲ.3ϼ[f=cu *V2ujƕ3:#衇싶QkdZ7|uXgsKrcF?e_yb^+z1;bp6(0_/a)uuK`#C "%$ 0m٩iHHC AGhL'I\x\^WJ4nhM ( 0b u f\#}y~~Fܼ<8ZO?ۧNzZ| -:::tq-%S@s]5!W2 !LaZ) ݭ[1KL$Xl+9![)+D@n`>/(+V`M[pL$ZU]Zp]v麮k:8g>qF=y䧞~ꫮF -O<̬쬤Hj .6N&3?x\ iI^NZ:\FpVz 8{Q߷V3"Xtѿ;t]V:HI3;G/_>|p˕|Ik<.:_~G|dѷ6K)}m[=ߟY$lqֹg]ve.ӏɧiM h 2#7jP"e++j~+hj8#+Qc,p$ Lds._̓ ;z2ߍ2 eYy-+W'>g? C)Hr{cB/16~=` {s:dFv}QVm6G·jk{oxk.yךS)i`Ɔ(TO2x#FŽ_@d.,?(O`#t ݋JΖWqr;mI׺ܮp҉@AQA41s3){8C؈y_㎶ݿIMO5 9wqcz}^"BYYz 4:{͋K%kjH3l@@ uQw녞žuFzA#;\KUb336gΜ^I;?ydȈ!^# ?GC>Ѓk͵ʢPtSTRʝ|I'Q)+HHYߩd a׉-姝rw-{ss33 ]+ Ѿ|=}U(?/:=&L8m{fz~w}}w,Xpw<| b 9}lVi9fLwf8lWiw$L@] vp;93ƤB!{?~J΀sbR{=Ǝc9i&Jކۤ%Ҳz@:]x ֗kڰ)]~ӆ9[I)row: 5he6, E7kkb"-^G%z~)Rv3yYczyí1i;MKTӊ^BP(H4NAթYW ,s'"brKZ}(p(L/md޷) ],X׀z|Dx̓ė_>e˥UUxÆy'%3t[?GUA?bv5jTRX"d*$ۯŗ^&@ˀl> ݀.xDD8}vuc#חE- 8:cGD$` A8gFB_x'`b*pbmvsK'RHC3O[*޼%ے6]uNDhx]JJ?m= I񶴶N+\@裏.++;#vB\{tK}w4ocRGGw4v)+_|/#L`ٖeZ7rSiӦϞ҉GޘD=Ь, A^'jp$dNm.)mUxdkgM\].'p&N\Z x`!ioT#) D".2-7ٜDJf b4up& ۳1Jeez$" /(>a`mHsSD=63؃ z71RV 諆B}݉Tb22&Bpg~oz!pl/{}wNJ;xl;8+MG|>ߙgyGlߢ©;~Np^ e]U͸nFȶZ!NY8m6_۹^'ˊT1[mB 4}#O&"{o|uY}4l`Ey&$"ȹp_w}Lmߏ5^XXh[f!;æN1é_5dqam܆S>ѿ)KA~<ݬ Y(5LmX;;;-jii B?GӧO_Y''sBGGVm Ddy=ޭjmk2"z{H]KD z x*݁B5aIJ$*F&Y8`鲥hP(tnw~QϚ5KwҖ RT*@]+_(h\K#WlhjuuOHI""d(D@M@ ׃@D mMB_MPя7nwtMm۲QcGxt'AaD 0\v )$ L xB!c,J2eIضل᧴%Ә%,DRjh۶kq{'l pϞ=?k:"ru]?3I!վ bv10,=uLVnΚBN6Z0d@i=b%njN[jMÜ]tK{ WcLJg ^MAr!  .ObkcD:BP:A_fw' *z8n)%眀*T>cwuw^qijԮ bFݧ !cBL)sÄm#gjP(z|F[qܺh * -_ፙo}٫jV%I_{ҲҲK.@SH@/-GDĭ*m)4M iyn{ z lNmR(Fyٳg69V%bvsBAA lf:CI)XBC m$fB)E2`HKrwk*r H\L*<ݦϘ1#;7[ X" " wƉ9p9`CJ1`\sH E0= jr@@VЌ KAc#P"?0iy^9)mtqruvv.]Tzc^ðX*e4]\ y]2S(~`P<drr|C p0 $tE #H鉤-m5KQllI 8%<~J@c8z{e$E m6<^s Jj$1$Խ^HREPuw[3<7uH>@K^,3[ެeYD&2(Zj6v+z<89ia;wRHH`}` @nak.0#qW6eСP(GBԍ=vpQl2rHw/%gHPc0%2-LmW ,פ1HI3$*M`r %C'Ӧ @Fu(mФmD#"8HHd :򨬬¢ܼ9IRW(C<'nuswYY pǍ4v_0FB`$I)uon!Ln,kkHPl8!ױ[!7g>N5"[*M6Eم@p.-0d<BP@ @=d ze%g2>b ih BlB)2Yv!1iږTQ('^ش2tE8rB:B jPl`N@sǪ.})в,s"m{kHPl $YDkK>jq?q%]B86!J)280\ źA0L S>֧9l<4\8wxn byܥUc=xE`u {U(&ed! &x+s;+B48!t;b ơBpqm#qxkआ9gG.EsgRJ+ DJ )i46q=V,Lp6F o% /i-iyWr +'̦w D& !6^ o% /0?8f[7N6%h !lMgHR(6m"B`x"ut)gzq.836Sӕ^\W(OkH 0 AƵpJy Vwʎwy'jHvH8@@D㗺K FMeĉ?/N 6pX)HGQ([% # M!jq}ޥChuM&PNPl6āD2?SZ]pյzY@ؠi_% føe!"h. {zqe7>OJ)4HTl_ W([Dur^yn: B`iL+[R v3>:bf0hT-o%?+1J\BH`ƸBKy*z $"F@|V(~R08s6$@!clxE2*溩yrqL\+4'4M4(H)db@LAf&CB_,}ʵǺoT2E`# ׵KP,O-4Msf$Iij]_؞@$uw Q>^z)jku]_Jqޥn:+dB%\+z!s\h K-):hؙO?J$@ 6Oo$SIg$P_%cRHYB0bXe)si:Ry/`($ L Ă@ wUSn+'Ϙqp@w.uzv0d$$hhD v>YK!%ӻ4z4`,=B6Zdx[ lD{7nkq .,KGAC7zU%$p} { x` @1&:u,?iҤE]p)3u~wne U-aD+$`ABv  xy0M.}遬̂D[+FU/_^;lv)6Dlik-<9Ip8Ä$gX\¿_xn;(EÀ(|A ߧ6%õ{>Zr% b{ 4a_ l uDܝЊX$"zgN9!YiژyaDap?£P'Lr3DǴc|I7N<I'i1`gĝ/:¡jcSooD_389" i48rBr]-C 8!ڎ\(ҘV]S]װ웮zٗ~݊#$A4L hlP]:xv+qIuJHB!@pk0 nܰ\:TʴZ,cGhtww.0 d츱~zxp3&0 Ox Ƈh|4r%d<9&쵪 k]sRm͍:5ݥ۶.+Ae[0fpV!aG~C.k3`榚\:rgĈsQG KDa0L&Q'n-bnC-?'$`^Irs }I#^㲾M u:d$ sΡ"?U]BLҳ|ZE P܀Qg JrMJ![5ΠZỲd$!s(HU׺!'CIE9P^bv8sH8jN'NCJ|U3|R#ޕZJ]Ő3h\58p]O%Y&2D.ҹz]K  'S JKoY۩W | #O_vAw"떃g8F=tڱ8ΩB6K.Yd,N9wX0BH%I!?}k۶5Qӵֶe  ׊ڦ涎i QD $"BA7N_=ף]tվr]Dؐbɔ7M"6l N=ք)Kgb.v\zC4oAd k`sy*)DM!H̀W.V .fe*/ XS +3 I:a{^sIxquKhMKf9JյۙmA2IȚmؙP] L, dꀳd08:z$YxmW[Ѵ̌eYGa$ ̰.ƘDɁK&u3dIMjQ2C۬k$Q'.ڇǎe(+_^puw\8bpeY.%lQUgk=3Z!ۖgeyc Ptǝ~NI;Zq;`#2i# Ԋ_?%wuX4?ЙH$^+rs]skÎ</缱'_'?504=wѲ#%!2!dʲb ñ9{l)>jkms *(a bں|51;;XXTrM%'D|E(m\7ES)@0>`!6~;uk!ȲdUU=}rE O7S֫,v.ph#8va4tPΓJߞdO$B8junl D $Т{6DC 7- TJG4Z~hnYm6~D!gA?I7 eGIVcq-[eaNBUפA G Uרs Z v%[4c 2d5W+;cV7%!\/VYU翿^|H$.|ϗiD]D:>]D`9 Ӕ# 8тQ7ߺgwk:Am]EքnG@bgs<<)ik9_9Kt]{Yx,]_\F״{LJ)PZPQt=_̎Fc9&.l]u;cōA;3;qܘ jǦH8 @@~1|QTV~u:97j丱# %.j^ Ni=R60kYMǏwߞZZֵ)$s&;¡e+R a[52wpYҥm{\ˎE>9ݚ Ϡl_mZ>MVf%Y!C3/kn^ˀbm2 \-˗77< QL(mujnVq!.M-q+(ē\sA8fJfgixcI%;bd}Œ-Kdi@332 5Mok`~Cݭ813a<|'48h󤢝V=O@{ks;;H6RI; BL XlŲ9#QG2ٱQC;|n^ڶ, @ݪeٱSaP[KM}A@iW(i6oDC3%FNٺ#L/,̹Rg}< gQs9{39I dBTqs\@CkrV4xǏ^Yst)@HƣHn77,0m.O$I8 ^)/ufFcI@$3 ^Us__:GE+@‚%++WEr L ~vǍK}_YӊxEmC}SryGRW?g;t\FFr=eU-QNn?St{\&3rⱘgH"Q2eBFGK2.+I_&9jdE^~g * */a+rat 氰m`` R@EԵeAN,N@LXM@gt >hmCiwB,>x\aÀ|b^@͑;2!'NlXOB8y43tufd&Db`kL#†Q8 c|lfχqi%Mfq2:1& g;ߞc gSvD@:H_EP:l+zVJ ? ݿʎ@Yr%?2g2H.C?D S7l[}x32'dF咺B~r#m|-aD^ɕ+Rg}>&o[pD$aAKsgk[ 5/2S)a%AJ4tD3|s Hnp$l$v*g|K㝑|6׭[9t]&,]1YIqN"Zl"gZ ejݥ#Ԑt|?MzMzêe c9.Øڰ=i!eA{5YT )|82(΃ % lE M@#.'O>7"gCC+Lz@ Ƞ;q 0 ]w\ .4 iKM,]xfϗy=.b'Lgvá?}cW~Hx=2#I5 <.Hf*+:&x wN.p)f6'"FQП6@tYԹ?_reK9}wD`3@J! ]cr*@3bwԉ>yܘޔ kK%Jگ|cy5W|p ſ3#80\TYiQaNjjAqҖ95!=17<5i-%(Y.mҮq(A H,Io_um~}C5/n]W52CGW=}#yK;r|ZzI7>}783r}DY Q" /]YA?pvp鐝 uAmm@vg8DcqAFAP {$!+N^CvVW~k%BH䚆 IݡkcU]7-%qA3 ]??ٶ@9Y嫣ĊUF_']jljffw۔L H;!SiO28oBټh H0[r vNd$8Ә )KP[|=HKB:?dڊvV,(1,\2g~ 0ˊ3bx03fyÂNK#",\g RZ -Y\[_!UdBvLWԶ8ne![8@ BL$-d`.\V?|@ִ#[}.²'_.zLD5)Z#fGGC?67sΙ.im^rα@6M4셙Kx8i&u.8͝䝏>(nS*@+:P&0F<P^/v@„ >hlS@flmq @~_Zu +s h|p҉{|860 z+qě x>tZ鉲3' gC`@L3ZmIDH`&'E9CГ!wDi~k$"p>Z?>`iw'#!Ƅezj ~ a L5rgevk7(}n3ȑKH#ݑ%"ǟ~[2 (o 4;[^y>lX2Q{p[amM+Kf5Z+7߅viIDAT"0"=# Ro>?-\ÂK32ϯZ:`sv9_,_JbP;Z{7WcP^zP{EKVT5 .wktGj9E+ie9s9%O 9k \L˖VׯnYݔLW7~V"_\)B9EWѳjj\ Q1Xb f44 d 2o!}:B,eBv-L# hƤLJh|Ђ ('1O@'44d4) N)f)2l3&,q2$o씡>Թ =tIlnHM-0|pd1AXSu r 5|(Q2W0LA.)E.W$ok?ֶӜ@/t*Fc7ï'Z3]A'F! pF L;>"gf%@BUYO=+zvvSO=g׳,N={/X*BHݧ|{u\_zk2#毚6֓#ŅaayT׭TOyuVU^=I #% 1c)3j%қSJInDʈǽ9S2aZ&yAv IW_]R6k~']FJvSde'P È%`EgqiDga|?AF;@m{_oqUƟvl{l ZŃ#DWCOM7اK9yJj)NrOu}zzMoqRDcR1hn%ݮY~b{꩚6W/[~WWWSO<).sƝlun8 S i5MpWJLFROv=SLϡ280zv8 4@W0 ]rSKKo0y1 4h#CӴԸgjW!}&а<0˹\w::&s ;U[)K eq q.,+c܊UKn̫Lq`1? @{MUi.A2f q@XVǹ:>/.JMۛçi05m@@ 0 aYI"c}ߙʺ^XL 0=B8Ii,]v'bKc!Q8cZСau5{cdm(} l1V'k04,7Jd OSns_'k9l?+ & W1J9{f'EJ<6WQ*? \̓ r%=`ϸ*aq `0`_-&4mc\'6d[R.7 mҭw`!S]x+V8K/9,BaM7(kH߼$^1oڿ\+k`pbNn~niiŁj97C`SqE-_voS/|i{,iZۧLLOv F|qˊǍp8u]iE麺NsϭcAu e-rt]v:kl87Yw_7MG\sAL. mGL!4m^vD<9_0ٟ.eqc\wGO'2( a&[K\z"׭`N.ڞ1ض1sƪK.zfs.{m3WJpHpaXӴn'x KVmx97x: w0T]~q7~m3 ` 3,XFӴ[| %ʰvÎmn[=)19q%DgΌOxR_-G{Ko;-3````15mOѬj^6cXc1)eyyG)UZZZZZn%Kyؑ˗/nD@˲PƏ#:ÈI%S꯸ػo?'d.%8L/_i{fcŊ+/Y, 1cDQRx[(>y0bRo~2{0%4Ih미 q6lPVV֥[۴9:P [ hb_1Gӭ.".Tߗk*wSK D}emo͑Ӎew$̗z Ms5+\'+]W|%ظq' s2v ƿ4CQ+VwygZjR9Nk^9AaAaƊaÇDS _u4~W_{λ,PZx"xӦZ!kіe-]twe~?O!5kVUUUzzaC ~WٹٽzڵcA 3P%5$uVMWS8OŒ+.8*/wO%# N:t8V;"F'|?}EEEMz_ձ];N ١=ZPP G>u] WJfD"駟Zҋ/]b%'NiW Dus};Sr"gັ:$`K/Ϳ⚳nJLKXd.iIӬ3z)LevzG{Ͻ=xm-_o={|??أM$c4~b[aZ5rӾ_r-Xt3#)o';yc=G>Ê232)O:r칌c;&߅ HZyg.nyV?[˵LP3#QU-Jov%vKI1dBA!t]`ͺa78e,[L:2ȫgyeO2x &pjlKmmjsːpVM)o(бcc 1zjdߞ}SEѫ_jz7PP˙QVfV^}232rV\]VV/K%C"BR$1~\gd.\0=5T](BxMmH)b 'jC=7mM(@Y܁%Qc\C PwEqiѴ tmX:ٚ~/ZqdP~A?~y atyIfY֤o'xqϷ 6_6nNj\w냊HCoO c?W?أ?7SLDYDnúDu"=n&Ϭ- x"ܰ K.7|s$%FTUUqΉƊ}Yg5z{aAr9Va6cý[yxgAY>p2}S9eŸG8S/;l.ZfV.߯R%@ydK.SO y(BX]̈gzmL]c^pa7 7h<>5t KO.yʓ$)'#/#>FNnVnҲ~cA=c ˴f8z͚5//ѫ.4πDMPNZxU.E9.Z[1qLOT 0+N>)c{\Tuy@,al\kÚL H F>җMpϗI_2lH`G~l_{WJYQVA{wUo|n?}ݢ¢sxnJ4chDԡC?0%MJ):蠮] r n&_O>2%r'/]9gSv'w^ZdիKחZw38t~Qf-ZB1l8^V~OM8{쁩o}C6RA.-gkXR`;dI[if(6 #@Ig\)eY8җ21!XP!7`(@M!?}|Bw8E#9rוR]cL)RqM<6Ͽ $K>9N=Ԡ F?xy[c9KУ8>xECz%XmQT45.ߟ}?}_$&0"pa{_I 0j/iV9rY;8Ryl,˂ 髆sR0o'ii\`!4n,Xh9KJ>Ck i gqW.<ı;.';r<_`' {N¶g>ˌ` o.4홚u),(KW^$SL :0 Bc1Ns!,֮|<_MK*")w]|UiޜbG}f|#.9 p6|M?miYnM~@sssssszaZ1fnc!"{ȞvM6~Ap"(7@¶mE T'ޫC=N|mpl0 .u1vI}Eغ J-LH%VR;?xg`c bĤPkpd%4Mks%;LtaDΗlz7w_`^8R VgppivЍ0m(RҗP}?eim$im+ }0{o/_DϽ<{>~jVAscRܴL}v 4v6Y[!# !1W):aGf9Ro=zjn`aApvc4-^n]egz[f4cuu^JJHüҗ{tfA֫WF;t"cpH$d4t4W"-;=Sf?3) V`%Ӯ0yﲣaîTk0á"0&`O9[i/^-;| g&|_Ffܥ'+OJ++$Qe!Cm=#4Mu{02O /]uR*p뉇⊏zt }w\Ζ!TP԰io[ֲH2LeZ"Hw?jG;=rdQc0).X SA6twiֲ! B؞%?ˣYѧ8q="eaR8$ Smi^Z"vua[xr{w޼}Qd.߯Un:c`B18+i|̀YqW}\_K"‚DH80MXVDiƘ:{r =5@ :cC̈-Ϲ{bH 0%D5p8aiڎ^J疬-aS}v.#^HyoX8wHiÍ !F>pFZӹQMIk^ښکSgT8GQ׻yۿ?MYr`Э|GΜ4ݻ_tE.EHO SZW64]]ylgABBiZ^a{`= EeƪN=7qMsɕ8ئ}5MZ"|_|W]y_n8, Y҃W4i-D3nϞXA9>lC Ã44Ei-(;;O"" 1lCcz ^Ӵ|]Y Lmto|hvc\M;)7i@OQkHMb뚦!ǎ%4m R{ܒy @~OIof>}WX5yϾeY낋޳aÆ^cwԾ֯/`ٖݳS~}u%&N0a[ouӍ7&\[?{_X'Pm" H% B1L6?v˯< 73bu+nO>cO=֣GE <ƛnl(--W^Mq&!LCP}imJ8&6DÃs6=c;/hQMv>p8ysckK֔E"N<]^;o?&3O?tTZjZ߃Yc7lн[wi]6jDf 9s`W-j>~vs̕+ݟNi#̌zzǝ%$݀RJ)۲=\p˝|7pcd2߸q㒅K/Z|$PmKЂbS-%%ヒFRy?`Lk#CPKMmѥ] {XNf\=jQ.Q̮o`\Wi#fZ֦ ", z(Ce@ @x;^mG0bpm*xi}?M)+l~FwVغndM}x`?? 1 0UZ<-٥մ_Ьfu{PR; ``,6m` 1ˢ yk"+x  Epk Ή"VF?RwifR .R0QQY3zhL3 W5܂jDzVM hjjQB`Z2nu4͜ocT63GmeUTW\uUwS@]q?rnQd4=Hk,{G=֤Q!"St֦mw$pƹ}׫w^x!=5=himxE=%V؊ZRJ%wo'~H$B!n1֣{؞8 XNf4MkI;7E"9q%eX`$۶'zlj7S$٥HE5Mڰfq- Fc艨a[M4a842Ƅ횪iimnnkinHxM4M ii!5M4m7Y !o"RJit}~4M%^jժ+r Hzk޽wVLsS4>H\xW\uŞyEBxO5MZH@2clׯ߹s9eMvuyou\]֓S]ri֖A^8qI-8RS4-ۃ<G]Т4MkO5~v}YCQe'j ۃo _h ZRމ۪vV!jL EB?fKקiε9]tLl߮]A;)iӲv{%/k60)--]_"33}i7Ш6x{ɝQm>5MIR5k<ϏȰ5k cF9sz}nMgxo֛ٳ{ϋν(bGZkV{׽|ɔ)S>Gח_|>mvoM~{]o[RIOzx}j\{PW$$9ku,JKISP ,^ʍN}C}ɧp]c'd))xO>d^ǝ1._/ܱs}^9s H7??S4mڃ<Zb$iTUUuUIU[[H$aє_|őF뼶tr꓁ p.Vmq)6uԗ^~)I_2AK.YiYJCFU"V %HC6mss95MۥA$ɖ K.]wYt[ս{wCrHZdAzw=xw{/|Hhg`-D"~3}GC '|Ϗ;NwyW$g\)%IDsr.\X]SF܄ۭ{9? j{GD -]i;};iyg{vuU^LȌ̌?qvye$?܌}.{K%cC9gs/<7svjkH#32&N(gŵ?TB&^W~$-r^?xAaAĎq>w}T>/ܹ݄h-]i;[Rj`7jc5CFS:hJN BK-]|Y= E$vOK*YڧOݺ|| ; ?pp(,D"ƍ3zL4={vڒ2bpPFj̙3-[2zSҖS4=) [p6dkǮRb`e¼kb! ۰O=DsFJMڤf{ϓ"Ň}سgG㚖.gwpJ8.0a@3m/9μq׍v#y̬Nju}n>aI6N.-}g Aכim[~XYY|;_f-Tp-% C)p `X>Nf1cl}XR-;cE\@eE71߭72QĜmsBmb{Jh]7.zN=/33sgx];Pq.Bb>Z·bp]W9øH([n+MKfxyRj⤉of}mM$ ЯG_{q bY{zPUﰄdM_vu1Ǝ=QFB8"6 cgx];P{ Ѳ{j-b[$%L2Z[ir7uYs̩KH|a XQ}a4%#6 z4 ۓ}+"✷k׮ ڙ fZe%7ҴVrzwdc8k|Z$\@ק䞓.Yz秦~GqZZYg5M4MKfxQG9'RJ08LJiiZ5+w/ !im30PZN4MӴyAsI:e%c-jjN~_Ś~WӴ6Yi Y뛶 &,BaEjv7"j$T4֖,;"IMӒk'̂։:I?SbPJߖ=ڼԺxGF!/v"V~}.=k"V$-ߝ}]vMh;!'~K(oЉqpjV$/s˖2ɭm')iuHWʍ'n]圙o̞Kv5MۣSO=|=w4C)1 wZP:kۃ1>_Zg``w*gM/e4mO 38qpD10%k3WoݹoIvҙ-DU +cydZto.d]Ӵ=.q駟~~}70D붲"@s(,ל:וشKeك)""7l}E` (p4;n#Np""s94zMڂ];`p7xc 0m0ܸJ\0)]Ll,Rs -EZGڿ `Ӗ&?F'i{6&ZsHv~}ui/qM@JI@4 AP^7ކfdAZ  }!#srVцqoRpIm`< ,(#! bNi'*Q}?/7PgPjB <)99) ga`]xg̷nj[Aؗ17@PHܷsazIŏ8rDJ$\ =Oҍidxw`wA*=վq#Hڡz‚Kxlʵ@&`@C8QIF͍I;*q:Σ֯tٯ;.YJij,Gx`!S<،OgC1m6555oiJ83X2%H3sr98aELy!f+bcpAܳ:i2Rl ;0x8P`Σ<ܳ*Nz} p!-XTx̭J G$jXT4M~ER8lۆtD#QRW0]g$sNĢ"U Y眘Økf)MM~+^Ov}6 a\)43pu5n$ՏD` @OgxM4m;%5M"o07W ~€k}_",xGEJ~f̚og[{zkX,gmUwL3J2Khq1-S2# P877utt4MӶK7M: 0*MOD 2,(`?]ga- 0`hl93j& S+Bta%P(2漞idMo숁)M4M5ܗax\)e` SiiI֬|"D"sd>HO4MӴ$k49npNq5"D}Fi5{ӾK8}:i좟5k֛oe 7ܐ4M4 hf ~ʼnDK/ SXx7}7ba3d y f%4B5 mMsMFq]7iB6L1#)TJ)4|B6ʵylimUs+ !J\ <$@al揶'uGaFqy#")aK%m⇟s0 #(v,F@ i6Xk\#˛>폿cŊ_f^8Z8B!LA( `)" %-;1ǎ4ln8cAJ)CPKNܱ6g|"_k@)H$h[l*0% `ƍ* [C&\'4統k3 .ueZǙ;oC>-pW^Sq'_ɕ{JXB1gvm-0˜8iH1ƤSafoƈ#BRlX,tҁ+V\fef~L\PBɮ!M%;3?Y])0 } rɡOg?luΟ$1֭[w '~;yЃq/ddksθp.6ooЦOvb g?~| =Ï<<P_Shڙyvĕ29W)PRxtJ>*k/ J* Ɉ{276&dy83̤x3L 7ճm< y_RKxA'dGD$`$I{^$ƙn%H )7qEkZYxL)8!!L͔Ēصnr"bI+/ $yRswVYlsW37xr1o" 8b =MY<L0ƘHj'/Ҵ_Ӭ^ԱsΝ:uꫯ|97 1f&8c[y/Ԑ +H0{#Ɇ)0x 8oRIJ@2IcH*,)RTs&uhs !fCm}mraPJ^14Q:{oxeeefN8\᧓ILf+oRJ)eeZ`Сô%ILbG}G] %=s<mSԑ$)?%" =? qQr%IR*Ri$6zдF sʼng db!}JOKo .&a\p)iAOby|g!{ 32=#E V H$b`̳۴Bɥ#mmD1&RZK*|ň%7wiAzi$܇_ӚjṴ 0cBlMv Li3΂1F,@\pιx ,d"FLJ8^ 9R*xUE0ϰMk|'>8gғEU|]14mK ذ`"!瓖o\~=8\q7*5,% S܂R2΄!hk'I-%q!_\0θ~os~S(h30Β9 `&.T$CMke0 !#|Nu4pQ匙 ,adBMMMIJ{M(~CARJƘ -q]hsv;>L䌃5܎IRJ9 NXeYyLV)%kSRS{~2bu14@[8Z)XΏ;@C;VXP۶-,L`V+'Idz+quhj4 .H8f|!O0 y,'T`s"'ZcԴMs2HA5N/$If*ze g€ƽ-˒RK k>g7h3m0 "D5d-V .09}"p΃' !Ryi%!%=%1,CRJsM![)%I&ʦi^_;w.; A& )RRc ?pƊ$ Gg>L1VF\q_yAa?% !ѵks>GDCɖٰU hsb|'.*{jk|8CG[mY2 0 NI ^p;vl(@ҷm{Ogu1xJ6ZK/^W^z?LO`-nzt5+++{ &5ZT"Yw}UW]0'x}A^zUWW?4Ԟ7xKd{'z Cv3 v9q}n;Sw}٫g^^^ÈFkYꚫzݹK.]<K.uֳG޽{qSU![{tѵkN:庿 !fϙ=}^{ٳcqGAiZ{s}ŗztѳg޽z_xхd~_~٫W=zded]wu mL{g֯[߷O~Uxꩧۣyqqq=tHR)9֭]wg;0,/ӧO.;vo?{2tڎVjO68Ǚ9s?ŗ^<3M3XI/Dz2\j9b仾i߻^PP ])3g{챇v?|9RL0A;'LṞ%,cwg|7Hiঢ়vCץB/tGׯʙ4us?K?333[< }np˲**NO?;!~9(AGeX5k*:,\˞+V0Msܸq83r︽bgc7|sN><_y;kbPŖFDg#8d]I0k_ ~z嗯[aOkmC+D'۶-n%w ιcoښ+9ֈ!O~͵DC?_ga %U0[y yA 17 qla3c}4`F<'|T'*WVG4mZbآ2@J$|R#Zi*,.b7w3=?IBVr!Ҷ umۮPa0ydddxqϊX3N衇L.BpCYTqz5s_~ )p]ײ,񂞛ӴFԝ~CB4UW}Zg^{>_r %c"D" Ah j1E2N`,rUlJmY cVcYlawƊ|>= tşX䥈IMM ۸acVfV4ULqV+LnAU]}eY[5dȐ{ 1|74֜&' M)70t@"--͓=<$9hs6lPXX.ѣG^.uar[v"lL\dyN^N( jDC m 55m+7^sJ8"8耯&|dɒ 5xǟx .]ٰ5eTaHٰ(tb `#2(0bZ΂h8考Ξdɒ?ֵs<2-8 CK)|X YWҗ[mEy*Hw7?鞻 ByywvǢX`ߟ{0*\/W^y%)8(Xs:i5 ow{?eFcH%R~ -$I3?w'[">K@۳JۃV=CjJjuN& a7tBRX"(vCp-\ nB SRDIu]D[G0 &oѷLCۮ4E pB<^ =if0*B6oL!_0 ?/_k׮\y{U[ge??@fffeeaH1{>xk&8\c/>⋷r[c+L 沶x)mP(CYf-_|ƌf4g@H)5Z_bjX4@mbkp}/_ [²-وiK#h5 X~ސך`w^RR+y^5)ciZߧw`տ*Zu8p8C ?ᛆ7_٧vZ,XS#8[ yo ] &۶g7o8RR.kh-KL42zs?#F0m3o|RdfrS4m+m&"FRlBDzfiӦ͘5? $0Dj-x{ ' L0xnVJ!;{C ^e t*(y;[ak֮93oV4pu 7p.2dH(B46كIҌV*)}i0- 7.8^zXp^p=0`Y֩UVMnRc,'IuuuT˜ 5L4M!ķ~[Dsn[v45 wߩUa7kxq/ :w:RT]]x\p%a6h޽{*(d!i6Rwq9s9kE6Zk!̟ ZN護:̙ɧܥK 55!+dVҰ`6h  wuywџ.6t؋/G"!,۲bX$م8D"q)o FQ?{VO >la>lvvvOo߾u^)W^=tPux ˲W/[=rc96//F=x\2Zg(CYxq~~~N1gΜN?[o9m4T .Cya ~~wKR~h, khTABkZzZCp͈Ɉ5 fM%m3z]zt.9={61bܹsCX$)*. ١z97_ݻ4ӧ+DDB:>u|u4mbH)KJK¡pnnnsDTo V3MӰfElqXuPH1boFZbR_W}kVc/x?}ͬ=P(t?UUU\uMJJs~}¸KB>c:w#{-%'3 PvFvAʫ|oŜl9sr)Æ KIIQ**;O?t)ec^ ]нxӘgY s܃4Hv=hZ+))yL<9;3[n駞~`! 0o9_1"bqƱ|ڠ; -kcqq#<"i䭚3hѰEF.!&sJ+oV"gA}MUrpgϚ~1cDŽ#ai5x= tcqqsSsFآc\p&Bcssoju0hs.[ EB1aŇi%o l&FZ~ay?@^|Ů=tlӷ~Ф 4Lq0 8HfcMہ` 8y>}㮮ݻc[w)S,ZH⠃ٽu'M^v-1:ûŧϘ9$tsWqq1?~aд׳gϛos>nܸ_zɥ1!ėt}?_ti}9]|mڽ_]ֵۨQSW,]ŗ_]:gTJjJ廤dwKJJvC/גKfϜ=YYiBI(_9pLVNאs>gΜ%K0kx]?C܉?h}tm0yk7jԨQ~g#i$cҟ3gNoᆪnj^jͬY)..4paeeeǏ_xau}N+YS2e%աZTTjO?ԩw;;jߴxfI'2bcǎݻ3fΘ1cF<ճ~ɓ'Z`~޹; UW| o|oJJKv:5&NZl#6x}FnݺS&sܼC/b޽N.]O| ǞPܱxڴiՕo8Cڪ;wT~n~Muͻ[Q^1kp$Gh[Gp6co~~1擿rҵ=zR~']WSW_WODW~!&MꫯpaB08qϾ:yb劕/]!}<}%),^qxfԩwuGIiI}cy9yqֻn}'Mlځ\SW;q=a˗?3Jx"iS.^XSYswdddt)-3MB6^ycsν;̟p;yfُ>脯&̝7?!^|ŻzůeXH8'?'-=m)nvE,f0ys=N<';Oo^tw1{lmHHq>ϿK޹jjj_|Ec2c<fΘYܡ}A{I'=SNԩ eQ5%k~!D-#<|:̘=Oěޏf͞%= ,\/ڵoWQYq߽5ӧ !~z^ϫ_GbS /!f̘g& !#:СCeYVfffjZjnnnj6iʤe˗UTw}+o?p$|4F/]^\Tȣ3;;033 Fe&999>g4ߙƍpCF_r%6l}uꜗ_yE?5h: CEnuu_~eQQgr޷3;⭷sИtWi7W_yjc:u:W\={.( }73 !fLqM~?jԨv[.]wn cii'pp ?cIK.<GF9]:v9Gp¯'}-lq,/yŗ'≾dz?_o^A^ffC۷E WZUPP{ &%%ĉ-w5+׼܋g;#''Nݫwݝ٭G7CB!0FqQG߰~ݺuSO2mY睕M>{f@((/+/ֽۀPS[_+jwgeedh:tС3X^veW\8SPeK}W7|svKO9}Eō9显}N>O?+Qa+)';N|VZM4ЕO>9wܑ >͙~gs~4miӯP(4jԨE\$b!Ç+kΛ9ϾzG323V._9g=f;/bk=8ڵ-Yt7 ;;w|õ7./]jن V^]VZFDC*Xp]uG*Y___^^޳W _ln7hΟ7?|G[9 Q"ڱk~NiPXP5ɕUn+YWW\Uݣwӝ[g aTVUJ_}Q?chJ4^|G~걧=/<=.?777=']ZnEyYyNvNVZ8:u 6,hѐCRSSS)$#"\P[ow=.;z/[ [|. DDy$ѻOH4bd]I,{פ/~i B1~., s= 7o\^=z{޹Pu;/?.f|?0H$R[S+}d0^{c`ŽD8N]]]zFz0WOv{.ƿHB*4"2u=#+WJ?c! _*^tښ^xO>G;AfϞfQFvEC߁Gg;?4 ƍ"1M0nUeicɂ%k֬JKK[riDQq/]/RQZJE_te˷yG*==q(ڴ+VTVUYkǮqb-X (Tz_ؾRujQJooz__k9+׬XoF8[ϝͷojߡ}8K5q֕ϰ>lݚu>+&|9Ad)R1VQQavjjVx.5`r͞=3.kw _wuo3ӱm[؆0nbC1,Zw_|qjJjI\ܜD}q /\v_+h_gHS6:b6/坻t&E0)emULkKJ.Ɗi:zBC˗/Kו>C~?ݡ)ҽKVz%K_ug?.qȰ!_~/|r%Unnnx;HԜ6u|pwU-H`69]'BuWTGk7x{{oUAnA,skKW,_N6~v%]2~ߟ{+"PO̫kZH|?xcF޻~=3g;k2RoNW$uiʌ)CZl 2s2וk^BK>C{/{ -xW^~CcIeeem0wQ|ғ Ծgٹ EBbӾ/__Q;ojjs?vcSRSO믗o,le[tm{5V,Pءx{WVWX]AP(Ԯ]ڍ26;'ۉ9EÇ /P\\\\UQw@_C]:w]h% 3jԨ}G8svh}Ygj媊<1b tH$FSԱl]YBvh޼yk׬MMI=***E>};vp}g)hWÎ3fR*5=O>9<3-=۲;w}D;wjV._YYYߡaX kqFSwh_XXXRRl]anar܄[r+T$}ٽW:tԹ~Ģ6VwɶRTU5U>XēN۷o^V)2xH>jjkoF"?Xzro:qÆЭ[vۯ_4O:hJtfefdzRRS"I2x|ةcZjUG)i H$ҵSUW>lx=;wں>/G[nx|舡)o׽G%.]Z:3+{_jy:w٣5;uԵoieddԬZ*$zeee6l߿ ==f//⊊NSN+?|~s>.fgg7f«z~c5W5]lhڞ X7)-՗Xh4:nffK/4I4G>q?,Y{!}jŪ?.f/r]ceeA/X}ܦi0zQa[m@rs++]OY&~3qѲE(7'/clxeY4M4%5u5裏>W&㻦i4X(|sͷ_h… 뛙{? 4\(+Q4nċKBMzBW"Ha몳ӳQt{l# !5V"gfd .zDDB+ $@zn%6n2hHZz m۶m+6j(ׇɢ/_^[_ZC%,Z9Ҍ2߻wjJ*|붭yyٹ]) 6D"\r˶E[,V^է__b捛h<vG#b8VqY%[ΊZzI.H$;" .^8 wUǍOIMIfpҲRC ٳeK׭[G)EBe=  hll}ǎ+P$:ֿE@ nąPh0 DUլ̬`0pʲc9R5y;w}z2xs䟜.mc# -DTU57;ۑH$#nCѶ-lnj6 #1PZӚ5k0p$ ![q9!ĈGÂ1`Zf̊)0 A`W=@>x<yyy#FPu˶-֭L447X"QFاoX<'o̘1s[ZRz' [lܴq˖-q37ℑ3N>#mظDӻϠA:\ӴEK\2%5UkW\QPFz˖q>L8@UUDȹͩ|Վ`ZJZ0-Tnƣ.o+ֻooǟ~Ys䰑VZn%,EQiںV[%P&GmUWXb_8aYeY̎m,޸y桃UkVeey=^S2D(v\H x}ZƣV-9laH/r(P_^Z>xE=m^6= zdl޼yæ 9Q;x歛i^fuN~N̊547 ܼ\`XFR啊ddŭR$aFq&7vVZVJ ŌS'M\a9ukef1V]٧_Jj­r-Y$5-u8#vfnfAaA$Y㢵[׎Xi]yU#RRSP!UW?`ի׮nS۸oH$ -a%]ZoTB޽nO˒?°u]?p~mҬR:yd9`rQ#XbU<:y >bm LuuWuՏ~ vښZTXejCٴLׁNS@06xC]"6M۴lWB PJ ! YH$ GR4:>$BUA@PB[ e4 Ueg,LCimպ\.BHž={ uZQUYnú>}ٳUו2 nG)c*jkkQ`4u^´p(\ZR$ GF6hX0-t" Z`jh AHz> `$ijj"455@Vzք ;&5WYSlɲF ;t[iIYWRuq"V#GYE0`@~PlXjMVNVfFfSCS]M]cscqYa: z`oZiŪѠ?ؿ_wD"1-#͝F '.[333C_}n%P_%N8p9Çu=|;[UQ dU^$BptM:f1g/16Kkj=P\pMKc:^[p9P"sr#O}g=!?F8u`9bj [8os*L_2Fv., -(ksN7s !Ho2hHaaKN([l=:ȝK8f@vEeEYYY7C~୻}Ҿs:;Gcэ6r=&&+$Rs痄I)8緫Hn3ɓ[\.ז--?Ycėgfd%'j$ : mˌb6MەJXZH$+KdKX :` +BJŭX \Gr[kRE\832yP*ݣc=bFIqI܈SB@N^*;rhyYa`JN~#D [`j]J[C2"ުI2(ޭD" xr튴"=j4yw{mjmW)$DpΓ^ 'l@=^zB6oެiڰalwD"H!?d!C 1M믾V n{e$D"jBJJK"Hn^Q#cؼH Ax<.cI$D?!$nƓ+ϓUD"/AfH$D-&%Lr휼ҜIgh@N$D"H$HCK̃:hĉ/rEEŎϜ1cF^7u]?`m*]ag"l'l=e/\Fb v"1D" %?^jE}w04QJ͟N4O>k:;>?Q}xҤI;|!htႅÇ Ol-)\=u|͛{QF9ȎQx_W4Ji";69ߟ}&Bض$R;jnΜ`s;9ԜQ^MFKk4QX`".%Α-ÜBeC:u nq{Jme3ds'ʨsd`09/|_w9wbI&k1}}=35k~hs{tMB y睊BѣG|uu?g\bs=W]]6 I<̪ n$#BNWU)2zG>Bd ?.R'ݳݷ :wY2!䃏>x}YϏ'|2 ?` W_^@`bҤI@00o9=rx UQ/doKz`0rÇWU_ywͺQδ Dfׁ/}il䰑? =smaKUnh[n:Szp;UT BӧϘ1Ï+|(P䆛n3jc=6NC!K~ZRS_cF"#@y6Q:qsϤ EQN>SO:SOn[8EZ^]l2KXmtH$)8pKXpB"H,DD"XRR߷+X,`ZfrG߲h44M;[lv& ;IwǬ'QeY/)Sik*k?RFt&#nTVTr.wFF#۶0) .pB777 /pq'xچ/:_uԃ`N4{?wG-\t֙g2+/c 3m!#bff555険[߲eKHLBH4#3~! P?Æ+Z?أx;mʨe[6m|ٙii?ÕW^C 4OSvNvsR-z쩪j8{}tGUUӏ?ϟ|747^Z@s^WWF!;;[UէyW\=g3jYgէO͛7!bnN2 JavJJJzzzCcCCCddfe.=??3Nasϛ;Yzet䈑oTH, ؠZaa!9\P(3-(P$TWWgsggegfdz DWW~eڲ-)aF~?;;;1d 0M3''q H$UK %[W\oEQ.Y]|0jԨP(t-o#M8ݰk-;%Ònٳg'#y=PTϞ4qR׽Т\p'g jժ^x\a 4_yA¡W^|EGL"-bJZʴiӞ{GMg-^8,\~5W_sWZ/Z1Ϡ>3߯i6y>Zr^2-y^Am߶h~wQoFg<=벳z_o뭷*+z#gyv[񶧞yf͚H$=#kWBx/|`g3ȑ E ,Z7hhjȱ#1}ŕz4X,kW_yGqwigXӏ~镗avՕWr-͍ t޹t":|W_{Tc?çv܌P$tWvi .|j/?񩧟Zf땕Hc]㿟34UowC]wuM|ox<>1FTQF)65>ȃ6n\or(M~u_D"nhhs~ל_Qu]Θ1㩧3g_Ϗ5&ׁ.衛gxܲFB="A@R{{~ǿCF.:8K(PQ3(y??i>A(P3ϿۯǵcF6ﲣ3N>׎_z]QK,Ϋ±_˲y?}2~JzFz⦺~}HcO>^׶G& 4m?SBkk阣yo Q( U]ew! =#:6>}j٪7s~.;-ܾE};@VrȤC6Of*5n츑#F6763e:ؓO^WWwɟ/ /?G0|)P mu۬oʵ zѣF>zncRڧg-Y4v=^|-%}{ RԊ[[9.޸v㚍kVZuϬ{8|pp͝ww[o~G|^=z銾yh8eAp,w]2!ee~>K(k5_VzNqrfFK$uHk2nNTs=ב& l}NaYas=&MZuiE;hv'I5k֘qs9}]euevValo1G8Y) u [m=jQ@v2U+8Vx !߮]@ѯ_QcG=wQUM ǜSm۶5_u]۲۶646viϺ}%U;f]` Kt@۶nknh3ze[\i[sɯ#}'uM?3>ҥKcC42 /ȿʫVY~ 7|gq!_z%n:羶mֹ>w>45֠Ç m۩jzj9g[o~x|lٲe˗x쉃~f6;fzVޯtC6Ï(9ᘢ¢~m )L0m&GP!n9rlO0 ۑ*\|֯[t/?çmQ#5-o߾C ꝇh 08hF%,ADsYa hIJqP!R(̙3k|UW]N2K};=@t1-''PmۦeZvB;+<mgy=l̰O_~ tnyr?PBffd(XdQeuwA;wmnDA6njC(yg??xkV1tмK4wܧ~"4R@@WK{豣B)cMa.Yd}UeFo⌴CEWc0 ۶ EUBSt<ϱÇ+?J]u]iiĉ9]{^rEzzz0=&E@fVe[""GWєam޼y5Ͽ|yE9t̰1?,! ;z@lRTXtz󭼜?,.8iΏsIC64xP}#G\pB J)}w zqGȟȏcoEoaѢEWێC(9dv9s믿>{ɓ'Ϝ9裏>,Yɝddf(Х(q(\l!DzZh^~k岕8)Ͽ|$iWN]KJf۲;ss:Vq<z8tꡔPDUռ<Ξq̌cƌ9snZԣh𑓧NS&O),*xt"t0%q:s].G@;>:e.K8zh-999>osQcG-YGV?>h9>,s5e~чzQ#~w r0.S?i1_qqIIɔISK_|X4vΙs=+V]:y1EJ0%ͺs>ǟ;Z(mͺgȑ#ycG~߷N!2v1c уreddPB9y.u衇4Ή t.YfM6-/;z&M4rȞz;&;'{qӑa ! n yy>owt/|y̑su, <|(d#~3?R,󋋋J˜mź;kڤto׿"qò,g[݉Uu]۶nׯ_<W[oݴqӈ#N6rJE=ϐCBM!E;oN) \h&/9DD'3aqua.Fj[[۶Ӈ B'> $dWB;S|}|ĉD-c厉b࿌׎>bA?sH%lٲ%?-Py.)AgNmΡk3$* ;"¢#G#bEy!kmظ'h,;M۩aG]vcgAٲu~kj ;z,l6C! >/lv+<ݜJK;EJ&O,E"jD"-s;۹;v~Yw̺mݶ3.\/?;.6%5cj+;aG#MqF)m{T؁)I,Q;"v*ܵ U>pF(M~tonln{ÆovٵJ<֐ÿ<]WRZ]W%%ҝ\ L[!|l;*Dd^+ou_pȡtw#/Wcg5w\~hR,PtGKWgKwq[}pp6D" ĭ8ׯGNWZK$oDtkM柗H$Dxw8$V^^9"r%r +/Ou4J] Bihl.ufrfl_~>ii=!g\'~d鲥 }׿&> m (C B#a6ԾE]yŕH %%%<1r'x1RJw)ӑM'6;b /nJ3(ׯ5GZWBx,nWC43e^tE#Gy~b0~ Pp»koW/>CwSLϝ;wo7yᇜ-u0nį7vx JtVv132y7tcfF>}<̖-[ GyBJKy0ά6 쩧 ~ݣ(qw‰'@w\0Ʈ;K/+Ȼ_+WR/14MUUH1!@XTv .Ip#vXr)sM PUsE7,x譄 vtM4mNceDIRSJ @)l{ r4zzLDC (!J[7۶kkk bX5E)./^~],szgE):t-sRBX~z {E3=%ʫAx 'p ;5!d5V+)ٗi/Ͼq{^.x=IX% m4Clk5O 5L8p(9A&0JK+*}ڠAi"&r5֕z60 5H)-.)={S$BPQ\?ѿ?J>ds(h,Z^\e–bR]K v #?߯/|tQO(b+Wr. z:Dl舡zO<)lτQF]Yɟ82&bE˶p6q;n@}Ji& `"шk7h,3PBW_~uT9jFw:z8mA_bPKX$!»`}5ՉQ"vayyNzΗ$ TZlI-jVu@u/lۨ~ݷO?#=ҫg/`lx_͙C~զ=^xfq9Zұ$Yv'%>|qwqv;)~iUxqP|GM: |&jX"*Bxܨx`Dl?k{} lQk7:xVO7a˺-#4Lnwo a?J~6ʮ^@ۦ<ahtu3/L( EBm@gO?*-- ?ΆSj ե:jBE tҶ"|_gq]Aaysv‚BDys33oK AI "Zb[ʤ)\xAE;цp={?{-a9Ml",]q@QOoqޙ $tVҸ ne~j[l`ЙKXxۚ B вB2)2m@Ala;ϨӇN^ 3Bqv緑1V]Y˯̜9y7Tμj=S[ 6N':Ѵ6JG~6;R;.Fs_{dOG$ mV: I gDHNO>9++N}7;{h PUUc( !7.55ٶ_yz BWFݥwjӧO'ۺ:DH~w̱,X8_YnöTNVnbiNu}U7x7}j 547p#RvyH$qg+.vJm3i#K1c˻oW:*_(Ͽ7?s;GBPMuMNN-mۡ5N:M6k:~GG8aҘ7g][[{i]zɥg;⤓OyH$+/ &>i#fʷX Et<Hg0gc!W^y}0Ų,ƺH N(}]͝Hw_x@H$ `4U;;N RB5U.4MIk׮=hO>ƛPB cdӦN( A־–l+Vx7|Ie猨 . w>GO}(;twSh7F2W3Ӷ~oک)vh YwZqUVg^6pP!ϼ\QnQq4Ejkf;/*1vmێ Q ` cX$LhTX*ޗSv}k}rbHp{{103=FAH@@0nu鼅>B9Z؈mns$Qo9o)nWhijժ=^&N~R+]qH4Y+ѩnv~3WZ} 7p O> ] @lB,SH51#@CQb.\C@;\ޯ$sS~ {z6cL8RPJαhԈe48hh : `a@w̬XOG3bYYiiiem !F®L f!E,X Gݳ󾥦3.hS>Bgu';ȏo,HqJwIK+z?G_/m ˓a${X<jNMK1B0l歭 7UEU]jafUua Tիәn #B͗b99mTf.(H<,칭ta$ gA xMFj1[Kzi˦촴42x}޷y̌L>iQcQ_ lgOmش!==`&mU{˗/wz!i ҄^%v=Lmw60`CE'!77>@sߟ3߀Z5vKKs1%/zbvS+4M˲*>\}Șa$4u":fMMM >lJ)%wMO:}@A_]̊@'- KX6 xx >I)$(9u-6aq6H=q,)L+heqL*M͊XE5kƢ!+fbw"i !:$W766ffd64͚tQr22̄>\dye۶!lE;MgVd y:գ6<^O,711yms#,'੬d x=;Q 0(9n SsY ȱ!*m0Z at_i[YQG;hࠚP(D!e] ȓC U)y#Las{[s{ܱ٘>}CvPVfv{?Yh1s]wEbGBi{kġl͑w0fmwͺr&JS s3E@(Luu v Uhg !)i)zXR_v pmnw~#Awuꩧ.^xӦMmp e1K'4jږb]GDbv: ̬s>g mw{D;fAx(PDp H )xش)yq#s%h.+.gו(]˺H/qs'b ` @k`VC n\ ;2@S47ݚ&I *(PMM^WBa L#e)L!s 2PBs2r2R3 {r9] mGBh$23S~w޻⒙Wede$9]=~?T" ꉉpPA%@\Eq\@Q_SBx4nYVsC?No#GιȀ$ #Lg:#,#5CQCK|YnW^H؉Vxe6+zMӊ VXj 6 0gQ/>) nںwkzJJSO=էwOo{p{Tw~i{ܞ֠Od? ythww,elI'R ;RVpfv! gZ}2@0k."mۇO;믿袋6m^wuB ץKԤ߳s5#>< .زyˊe+0!jחr};(VQ[YEU sj>v7*QJ?Gy S.C;󮝗E(J&,RFCN\<ցRTnmv9w).Gxj*h“kn(4JEԤ`G 4 w+^Pkz>dmv6mQ.\w͗]Jj~nu5E=ƨ̻~7ܐ3s4*pS8Hj.<> XhYe! AbmZLˌƣm9Bڰ <,@r"F5MPA !H߻߽qy4UUƢtvs OV~4MS5xoLowyȿiN{c=VUUS2tg8>s>GUԋxz+< .5kp \pzJ>O:uuuixc 伛f_] HKKhEE=..X`={wG/]DǏ xu5KW6`'|]ӿesnw;n'3_ms{3 (.eY at'ܚctWJRId83T;͕-SS[*MLId i ft{gfg}շm'ܶѣG[)FSFN?hZFREWr\9Ɇ@Jj %T`~w @fNf3)@ [m͓G] -!p\C!~ꩧ 'pI'=2qĉ'&9ʙ35Ҋ^҉âb t)]وطO)SԲꚎ-̓ n va~rʓO>9-#-&糄N9-3'3FlLoݞwz70oɒ%5Y-ݶ(.Rhٳ/Qpɧkʤ&$&d:@J1(چRׂ1rХo R}{p!%@;h{7|sgu.$l0@:& ҾT#&f]QHQvw\{ϓsΛt!*q'Ŷ9vљ]֎;pe^'G P8iZ$QUu]%R H~S)[c~^ۥw°CG~=59ɫs'Bƌԭ[B[O9w25k_ 8 ظqlawQُD!2gdA ?ٳg~HV0yrc}y p =$Bh%~8bcO<ƹM)N ?S)'rR8"a8{ 6tm̳t\:Od5qzB 6p,m >Kr_s4bGJA]{(*+)ee>$#D 5ݟ"XtEG7ꪔ`Jcc#csTݛ #`eu%xJ۽Znm7t#!DaFrȉd8X֤il|m?;7%i; x}%%uUfIM^R26ضEouQrss?\89xns1ӳ2!ĭ8,]t鲥;-3=n4bf8޲uKsy> S4;]a :Mu?% JqI CX%PlظaIk֮ޮ#8N%ٟF"ƘBӴ]Cؕ7󵄸td{8QY4 !is"ç] <% zἓN{谂(F).zAa .>tW ӎ֧On䜧u4LH;g(s `NNα;~_Gp ͢NG_x{Q>ng%\̼j[ZZ {#.̛"هhMB8oH\Axk͟Gמ{&J>^ZqFM{1`=1Q)u4"1"qdfM;+34M:p.`'tE?yS&Mq"w?k].+E ذyݱwB~7]>DBBBP]}]9#@~1˯ 6gp9\veRׇxz7Ah,F@Yǽws457u0y_#cn Ў)7% әIyy9t钥Ͼl}CtIYK{1>NgA!a%n$Jl/]PB^_\@/n[WiGLƢO>d JiR){D"9!+ޕ mqᵵpXx%dRIB*89ښڶ xXb+fʷD"Hү/>g=+3nr@q{Di&g+"O0r·;p SK$oHv :ԛQJ$D"D"H$!RK$D"D"H$! meYhfbceo4M&O M.'H$&맋Hv x!hvMmsD4.x}]}cCcɖ۶b)b<@2))yV0D"W jv,)Y%+tWSJCП~[UU+nYSOM=d)>^sk Ze<"qg${DPv) ͥ$=c?,᠉֮Y믯X9!;; /lXR'@4MEU\7 S?zjD[A؂ 4atW[5`>gfd}mv\ (W&_"H}F>LwlNVΩ 6(Lq,3/B\UTM aUg(pvQJu]wn(P8_"H`Tiг}pbBnsK/ɧ$PFA$LeMMM#Fp.DTŶ x@*QeyDCpaxܞ~{ܱHM+ PyLax| W^q% U)@?-uW:gqvzz:H.Hh(K. "$ BJ) |7\sC^tҼ$'.]ӴjD"-r}!BAss3ABdX^^أwqM=ȶm#uD"G %>];apιmaB/| LaNZD"H-@gB ER]ӦM;# `v,s{{ED"H/)Qc z<M.BQmӦL:H$DOm0 9 U(|3D"H*^; ߟ#!Ti!/H$ɾTK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"H$!RK$D"D"2doW@")JwOD#Gtmݴ^,K/q!!DA)l ȀDmCg"*TN/$v( o3^t{e@Kx>OE,%?,㏖i@iq}WУGA^nW\  ,B  斄/C"me[1~ l4vI$;u=?j*D+WqOK:Gwi &#GD5$]oY1EQi0 Y!Biތu5nl/J$_x en xۉ_{FQ%N2-Ew>OwEU!! < .Bn9 xv$ɾOsjKT1le 3i)v4T):(}G'dߧ{@;n@ <3<Ӳ,UQidp8M0^?tAk^xA4a*DK삾 Ab1)KGe1yMvs$ɾ &x;{ZDmlѦC'?p/b*` KZ*"Mp%]mN(1b0z 0D+D3(MJw.@/zxeJ(g\/4qBo"gm)%E xDkB ~mɧ?Q]?aFF[P >F"F~FWBŲUޜe8B=mPnI$$ɯ sdzf=3ϑ@D3ZwK$r/H~%uƟ}zM. yiGP:nBս]Y)%nЁ .u@LQsι򚷚>z#dAߚ_b^"H/HvhQcKMb@嶐̀O?ѵ.>ѡ(E9"I${id'HvU<j"bڢN@\UY_7;hHӵ( VH$r,HvTLqr!{֬箻iQ^}# l;.OzC"ٳH/Hv@"?E̜?w!S!&-@v$ )%nB6QP4Uw{3bM0*rX9dO!'Dg836ۆOS=?eՏo&hqx<@Zl%CnzI$GpV x[Q|t 6/YAjZq^q/\K$ALS NAyq? /KH~[D"M TmSf?G=GY "a^"+xD QgmMA~'>sAnxI$_)%¹mtجy6Q? lŲAX.1W"ٟ,:D¬DuAmSQl$t rCP"UٍO8 ""@8[$H!&0s̀a&Chn-uӍ_f4w ʁQP@4ŢT ɯnxH4x<.h[nD"S.jb@X0[`yp8i@u:p'D"u*zD:i*MJ$ 0M(Ac"-=--#---m{-d(8`X ;s"[~\vӀa96!`J,LQI&HwDk֭fggWUU=q>_"q08;@R*=R4h(QTT"HA\{Q{k&R` ;;9AB) mhL! 86*J={"0{Krp@F| FHŷ֥>vʅVbbDɁKF9(p%-+ć&R* H_ q05SbUAx,?Ig{-[]c/:|BqI7闂8rۯ>S7 nؼwpZ!466TW8@Nfɖ.۰zɪJ$; iGL+(̙3@T۶m U3"P j15 l@7bՌ;3ʀ9Ep U(0€_8~+oV1&A"-D27gnj |s0|(-ޟ=o#'e[@Bp$7*ϿC}ѿ^= d|8޴i',u! ΑA39d)ܛ5^P {W${B@Q?1S'r!UUhPPB&P!DFWJ""|{uM=2J)P %5@R|`sǀMZ@ D7@az@TheA5yPU\m xPRӂHTJ(&  7 jӶ9>7*Lnە6RFԉءPR I!TUզ-%M*J},'(T!0ڿo qU Ug}}7n<@P83lUQUU,L'Qc2s jfMRP;j~ 1">o̰Î8̊[n" ED(epP@ABQ™YB A aS_2E/%BH t 5*#jlVPK\Arzx`sB/nLj [S| C wXؔk>ڢw1D<Up64x'g耴;/@ݞX &7 *\:z|J21-cͅxCy ^{o8Qi#B)!<9!驰()P 8wPu`FM#u037l]O;`Ԣs.SsS)Oc"!PN'[+DbbjW%vF*T7@ݤfdjσL!UE6bk4!F5F!0 טTB4Q61,*M5=_UU~濊Ɗz^~!{xŒ{HvyWYwRbČR%4g@@ks]Nm8-jʏK=;WŽiꇟϟ8~G`SVGJ_|S=b)~i]\UzC]mM$XfP4r<= R]:X2b mꚇ2{=n重ڊ8]Om[ȶzC'?iBrүOKWj[57le!n3Ngu"7ۗV T_J_ӘͿ_E1gY~z~Ό!Q++BMMM5d4qQBbQ P.P^ ` !xtC< xv0#P1[jPU#聆0  PS .7S644Ńn( FVq)n(-F7D#,@3J C&P(T$'aBpܥ5E"afzVެ0Ea0oAyRA'\얊~С/[ adWPbqɇWѹWQzgQxCI!" a#}{oA+,>ȡcGTV1i'L?h9 SVnVPilˇD@% )im7ֻR\p\.𸠡l 294 DbBe (~F `{ ))j@낦f0MHK˄PnpPWCzqG]Z )~ n@*SGJZ#B u{UTK(Bͼ]|Od&Q{^s#"KyvK[e۶墔 )dϢP ^<.ӯf]rnjp̳ `H:p`Ɯ+mmlP\WUms,B%5BVo6m\hkYe4 2 xss ]_~mWw+z/:/# [Gaĥ[&AS "@S6܂t@,AP5 8H0P C] 2`]B` !Ҡl Ӡ! (ܠ(P ܆PX Rԥ#T5d) #*љfQa6p TQBɱ9d6jT3@1rh%6&4{8zh6o9I}vK+La$@5v$BTڿ?P̫+ #@8}z~r3lF)h=zN7:oRS. y[ pCYxѺ9ﰪ?]|Ԟ)ۊ^{o-Us(` _QVCF9e/].hTMMlFm&dBx4,E|ADKp(䳚H)^Ueefns@ܲ@,UvS;zJF̶_|sጣ\y񌊪Gf Dwu$%=-ܬi5WsLĢyso|_:Gh`!)zS}^O$Gd'rէAB8>*S3o UYq Xh`A\*Q۲^z7#]T=cU/qin\BBX^=3TJ. B}$|`˜= \0A )9x~ZԣC&'6t}`/`yd̞d9M>4{%eՏ?\uy[?M9fz4j6(> Z"u (8!>/9]aH>@"- do ~|Gc!#@\qvBQM%'7-/МyO;}leU▲lͦ>{/XieWW6fEjb cY/ͯWN<5Dm-/+6_= .<:2kK7P3%TPi>Ǡ))AZ Ltԇ  n(UTCT@U 'ŕ` @4BV*l)Â2 }(ta[02P8x֡t`rSe6 yi>ˉ`cvh<)~ <ܜڢY벢.yƒ̌Ԕ?%*KoDҘ0@  d@yɞPBBBUEB8i(iJ5@P]_fVt\qނM3_}cRxPW,E9vp,?tG~ rlYyyy%;a%J,qQò\x?v)`ѯӲu iٰfF_&VgaE?#j 0JUJW,{ rV{>>lu# uuՍ=R~[_#'|F Y;5; WZp@Hcs/n3r@fjnpc<\~W#.J6[ UJ*1z]"%Q H nQii :65ј~(]E jeB)g5 ҄E*  nҦ0uIIAb4KxuZ\bPPFu B˪AW0BU!3q,eԱ#qQC\%j(LT5էW-Wߝ6YGcMH*@}]n;{o7H(P)H*8Kme)-rp[IoE͏u{rX-hfzJM]/ω(e-n; ^pϴm+Y[BܾòyHFs?f廳k95~xv,^vKBY4VsSuF.8ctaa՜ҷ_7w{d!.=w~maBE ֮\|oRֲa7s3#qIDATh$+}SDrVY)~)DSM[,^~+}Ə9p\o#hĩ FM0tWQp\D,Lu1{0X(C]K4!nЌXțЭKuMIJHf - 3 t4R.HfGʫ(%$ŋFc4 LᕵLS ` DbөF2i * B( piBf9JTx^F7I%*"EJEJa QF(A0D$(Ta!E( 0@@.lU4%] n9(ABLOnOpaSEn#}=LZ Lvt.ۻ0)ߪaY@0é`gΞg'P gEJ%6I]U?zX$,Pg驮+%|fnO .8tA C/bSe`0zί( ͟  n%72Cf*6ih4>?R3 + Xr<+D˫&~͆k2!LCy lg&>[RWA;ŏa$&[ ^/ %QD,T˅:M Fmn먨e4QkS؜g:@ ~!*b|GȌf Tj\TJK!83Q&$hAa[\J*5h  pMjBI% 8՘Q>&edDJ&5QJAA e ѥLRHS#KY?z !QU DB ' e5,$MTAQQBj""aB(J4mJv0l xtT¶,յDsC*k /QJFE , ~Xꃠ^T¶P ~62SP[p\ UհSQYӄ*QUtaYHK܆6 mw&dQFu;)jL!r0B(Ѥ&tƂv1b9)S^i&O\QV- 4 B=x%))Uܝ4ʖ 2 (EjPgI! J=4K>ll?xzBwL(>;f<+y;6#=q&?uȆ?IABLKRJ'{J۾a|!Ķm'l*4]\x5\j&NxS{o{)Ǩ}Y^^E)6$));P-x)S^i l۶-s.s&)q#t>m .T &TEQTWEQ (rR^QEQB*+(QHxEQE9 er$ !B1[BJ!cII.,Eف~cII1[B[oնxEQ q38UV`aÆcC9ʨ(N!R;ǻ,q DE;5NQ]I):w((TWEQ (r:@6VJRg6j{PEQ$ׂ_f،)Ƙi9Rc2'Ji.˽u];o믿юʹ04e॔mYܲ4 3R9+W#Bp]7r7~ۆ9i@mmO=٩S]m׶s_.]qF+h9/lќGcs]zmaF񮤃RQQQWW,,(/))R-'S !5tʼnOLLL\Pԩwֽ̿[^^g>٣牃Nds: !7m,+/#dl޼4VZ$&&>c.+??F駞n۶iRSK. ZB¢@]vn2Q/jס݈#Zn~ Hd5jѢE8.((ԩwU_r)=#n|f8=-;8E9Zx{WV]#,/X~ms^|O;onjj5]"BضM-[Œ\p'zy% WvϙMѽG=***˖-̘ԍK07` 8qwqǑׯ_gB A)Ľ{ 7^}O>{׵KxSQ8_d)3t{ۭiJĚRzu7>y4|Gq]]g>ʺ[wE""m֢u?=d'+V93O?s't9gwo@ /PKp;n# gffu]C)-W^nצ]FZF8&/\_?_i)'CUWW(MAtуFCc&!+E@h}~( [l9e)>Q2guii]vsi]1~/Og_й[gι` ׏@]/!1ZeG@7?쳖iʸ̓S7t*G॔SL4hКktifL䂻5UUmPZyvB]JWIXiX !H^~𚺚oyf:yss{uޥvwq׼ yRJHDdDneRJSΡlaض{c?{ *כR2lZU]USWv@(aĤۧ:֘4k^\\ 1 K`޽{Y&';ŻA͢6p FӔ$#(ЭIbRst6hX4rr}|e2џ8b؈_}}Ͳ)oWmرO?45߯)OXQwBz'; n!DR ;tw?h 븾]y^t믿>kƬ!,=9]K?x'|ҺuxW뾒RJ!^OM4if#F+]v7_}sggir8<$)P8q{LH<.۶ P9d(lN#6ĶAľI){ٳOOδmڎ|a$垓Bnᦛnjx|a>3<㼪G=zpvۭqB9u%/rC{@йz쟏qᄑ/r*{$pn8{Hs Lieٜ hI@@5I4iHʋ]n㨔ۼԹ}o8e)TR.yn=A@@Ks2c@l `K%jɼ(&d˃9]%O9T%TEQ(>*+(aEىRBڶ-lq%Qe*+!ĉNHb*UtސQQh*+2!!A'0UTŻ8qLTb*+9wAImrTWe7TS#&((G!EQ((TWEQ (rREى?/! ?GxEQvRZV~z4]iۦmf.,EفB)>c:s-Y }٥mذAd(G:Eىnǻ,q`-ŎrtPEٕctns^9:((G!EQ((TWEQE($!ę.ܯ ]^.PsE96lŤ/?8!oNOKۧ/clߏC).\@x3`߯b(GE-hM(ϟ9BiaRJ5M4&R?n*ԧo}z;oe.'%K9"Qe?RSi?LiOe~m}{)ѣ9 .`rܸqG6lg;}N|.{ ^r%^dK .Zx19هy8P{2޳,+Re_.z9ڥ_'yEkƎ~uxm jMMͽޫ{';vp(BHu4 ?{]tRyڶ!tg̜!|ȈwE'*+G!5W\/G>֐RdO9i=7w O>dx}ɿ- ۖGٻoon',]vwжM[6GH˥(ʾ:.z(v$l '|^l ?e_I)NN;fzKQιmn 2Ka[Jy+qumyյ =!`raTLjAI\hF(!ضiv<H AH h% 0@=)F4!.I)SRSZXlɧ +:uȩJw{ιeZ)I)^z민?\0-%[3 ͈wĎu֑p"-=m[鶔]].EQՁ9@@5B?yfJ)8 wU@כ $ܢ4bjS ?BQh$zW@n2Üf%WWw}?p^뼳>˲,e' !8K)%!_~Og(xG ~&lӺM&L ޽{xKQ}u-xJ'~'.v9jHOiiIhM=-K7/O> )z쑝]S]C(IHHϸ)gӄxt]u]Jv6ovz^nwݲExWILI) דz_}m?Ѓ*+>︾QF-t HD#4ƫs'r$Qז½cɑ@ 0X\k/XJt>K))#,BHAe!DR$&$&%&ԩ$v? >uNxGQpPc_+_ õO@rެ0j ub0=lq݈Fsgb.<űwU~b} Vv]EQā@ rʁ"H 9aʫ)YaPᒺ Sol؎W[ͥWMDY9I.(ʑj_Rp49g{SNrQJIvB[7l+ѡ%h^QQj65)@w~H9i i(n<a࿟ N8I%˖tM|Mtv?Ϗc/9%g 滢(ʁO%=:s矧&J)u]_jŕW^ Uv*+M61t& 8XO;Yh_&?` "&Pu}%!<.冷RiBHlVQ !a}6>!8pH0ɎQLx%H0(%tUk a:`z<4)kXuv( Gu]׽^n5P(%%E`0 ^>x!OJi@R2\dBH]x!Yئ(GxIMVCR3 (1䈇LLk/Fl2_SW,ٝwyιu]oV^y)Ӧ{Ͻ.xt}RJ~Lc[rg{Ygl2k~yySO>5uԲ2?La}х]K jÛT;Iٰq÷S뎻z۶m ٢U XlIɶ O뎻?{> xښK.W_^|I]^F`fzfӶnҥw?$-x[K*+dYQ1+_OlE۵ǠbK BfhujͲuCݻtPoֶu . U6wt3>nܲw+xJ tCRRR6o|l"k٦套\:zu-_?xW_pA@ V|2z/##q|LjF$6lݴ=/9֒i gJ]jR*clyyRJ!Dvz6aN%~zDCһ.TKᕣ a`.fV,0M4[6Vo)%].o/~0 @"d<%K. l„ ύ|<籟??‹/q^E(K\.[aw8R zc ׸k^ `ժU[6oiզď/832/& EN^=_1)S.[ryeegO !;䛖i0'ޘqǥ$\y1ǟ|?cMקG3<ù;$UqUf*+´RPJ@`3mzZ1{_?-EeHӜKgjU!DZJ#ae ) arĕC/j%##~RAߙث[>=4zBknhn3y}̇{Y.z3ԓO'S# ʡ2-ObB׻]>|o~uu&`rbkz)-rsRns&2\pNqi.=6m)%8%JHFyC? 98?ȧry j+'}[_z[%B?OzTұ] MS7 0lSӓ0J F3`F>l)Ӷ;VdTC%4bLcKW9l7MR*0:$}$чwDH>F Q[16,`U=_Hul&8c9($6~朦aQ3lK9ڵՓ8䜷k׮}>8(rP3!555=ГO> Æ6e. lnSJ{yg?ǻʏ>(pP^=O:H0t̆4ڊq xGBZ H7c\PF`[aCJ0O(Ƚ^] A .U_|aV:X3/Mhh@h/H7 `=yEoUlJlia7OS`޿'WA}C)UK}HJU&mZv뭷ŻGjjtQئ(( ": J +B4$(MH hH7 #b2Kbeɛo̢4ۿk7霳zvzg~Or.p9h3._{a-.ψ+H8XS[T]Uǝ ?d$Zn[ zx]QF8q*!::tyؔnM@t ЈkڦBˆ1p=>~uAU'oZ~;ꮝstYTNk &mSN.ۭu9vm{ݺ?,TW !(N k`>YJ,Qe冫wEC]vEٛ&ze?QjTp ֹt@PfSD$TZ&q==K\'ĀpmdZ`N~l A@2H x7o?).x)g$z"FӸW4.?aR0w|+P>,n1(!Rj%HHf598znk@TV) | !Vy<.~Yr c(Hm͊hnݾ  M?C]6m۴iyRS3!9_Ż,T5Eù`@a6y=!+}ziBD\k wrrG Nk,Sݫk BFtvnSTtWϡڌGi F57y=iԲ9 &BRF$ʷƢs%Pg+ WV ͥkI<"nG}@ ]ERnhoݗF R-B$xn@ڜ3] ׵Ӱ;(x^ٹ)onVۭk?J\ԴnK@Xp2!0ah] Bg:%@@oU[5 i'L[n ϻ~-=DPƸ?'e=C"E0]gѶ3`{*ZZ=~FEQS<rS˗􉷖.[ÐQ|.py1@pHLt%/|]VfJ߲ t²yenB&.9Eďߗ[ ez:&B&l+ܳg~vyvHh*mI#\QEi"tܼS8gvMGB>fr!7:IQ$6Ȋc\.&v`Bl۳ze5gc;OVJ.\΃mڤ7< I]!K) AǣEQW4u‰1-3 $".OL9Iuާ냟HƅeBLuR ŹЉ1b#O x@!,0dXjgC/LS ՄzL @@̢_[IL4t7``f$%$$IHxޝWـ ޯ((Gxa e׸,nA$Ji A/ p@Ի}эʿU|oqk4ю@ 4NLԄ\34M H%&5ȸߐ)(G I% P M4t0fs@g:懔NݏYНm3&l)#:B .%N$T -N5"u{`V]e)!̐ uB7ʙ(--B.%,[``P)LgA {l{˦~x&Sh. ?1 `d[ Ff |nw<{ ؾ f(k i2W@(aSm./mhTvTBMk|mǓj+(((GxIxEQ&O-aUX}FQ:߲hAAOYQ  ck 6mwQeob5?z4|rNڤAQ#װa3 wiebՂ׶I.zEQhɰZW!)^\;~ >EQEQ.XeY0Vۦ((:.&!˲!4ф-(ՁॐP˥id5Į((w nBّyMpGSEQ:O>Dc$nx((tї5.u?>EQEQ_YYx_|gzNΫ VM6v ۶)fxu@%n4.l_S#Y9vs1fc[+oA?Zc6IJ,]o5֠a{췹RqcF93V eB2ֆRTUEgYuk3X>z[6mgWg&vPp !;R6莝6"gxl{0=z|?omkH$Ӛf ϛiXDZ6ӌaӦukgF"(*Sڒ1l=֯KS8y3w搊D"El"Zˡk"E)n)eZ1hҖ@ DhDx*+[Ieʍל0lz9MA-L4pޒ:o}zr$!W]ٙo4!f:a 6c˖ۏs.f,jfaRHi5u<7u]o\wPiZԴԴJRam۶MHHh kLӴYfp B1(!IB|{S9Wxc@A!uAR"~so)~ ]wc>gΚ7eο3\-ZSO?>ٍϏLLJ-քPry:3όwAvu9SN.ndee͜?ߏK.%$u8%%м9.:d^۾װ=?"B(./Χ.'nSHnM-e>T5δLJ)# \pns).;6 8/PqΛ'Ͳ,Ml6܆-DJFYƸ;ߌtB 6*<3ƮWgprHM4 C~[+[ݳ2g8Fwa㏟4qcCC;?]n"-RsڛTq_k:"vE]NDɭr7:M:gI)mn뺮A͍WEo "!%S| >Twa\J!e AB$Rri[9\A ) `tBiyה.R Y3"muڵĄDnsgaM'F l!PE#_j(Mց_>+)$%ahLm An)e|%3ݥFLV' BInijiթBJiV$ijQ .rp߀9љƄ|ɸ@ 4#&(X@B%L% cR [[Ze)T11-p!v~/ aRZ+-=6"x1F)xE۲,!\Kt˴4MT:8l˦2;@yDʆ MӘR{#8e)!#A|R% A(%a.B6u B(V"F9#\pиB!Vt.8HkD I5Jaq޲,gсBpA&I#pF|3>]( ˸B}eOG!|ucqBIc 2ڗwch((ҒըFuMq,G!D&m\yB@@A8af1 )%%ԶlJ)CoY$00ˆ3^ɛ'@)"ը/*o! W:T:i;(Kc:؎>~mχdD8_PN_TRJ!+o ˀ_$(ݭ[{D;SGmv4)T LӔR:*lvpH5iLnJHɤ%bH $ԙ(i@s19o1#D'\p>?~(7xtvKdӘB8u%q~*BHJ|>ض-˫(MC< C!6[ۂ h0MӶlns۴^/B 띳eT 2(N$}2 hLsݶe[!˹j9ܚ6` ˲LӤRJi !̰%6 ɣ0ƜeC3ba#0\#d6 " eRq{ᓃRzLf"4pp !(/6(la;3E)]$0`((ԙm.5Y__OrmfoA4qeS\D$HAHhr\K! BnOs Pp=5K9ẮKKa)l֙.hh-9 S pqs ;FF):NcK*3E6h=۵|aV1!6#4Dp0m K k4"EeQ~gh%B"iG!:E(6=eI) Hi򸢵G`ɡ?O;?Ei"b>~=2zl3%I~Wg=w.˥TRd\q'uaǡkd1W_tԹ]v Y0':y׭q͙&XG ! !`öf@bܸq'|rvN6$SL6}ii7t`˜3M5:a 놞rw8ݏ~vZ#F8s%$0ƌh-.]\~ BțYYY؟uY' >2Q@C'x"8S2$:\p5g9aÆu ֒/awqG/QZ kX-II{ٲeKVzwwqgjj2A,cǎ:tʹλqD(RH.O_S_ӡc7kv.BA,pe4B):u7߼j*0-_>hݺu֭;ut-UE)CK؂HB%)(ad'co%B~Ö-[tҩKVZ\.Ji,SJźum۶m׾]  x7Kwرt̘1)BƛoTWTj٪} |Mco߾}~vm%$Jibg%wlɲ'¾;sss;0ugĬ 9wwyg6tҥcz{ժUo8ib۷o߲EK|59"1*(_}}o)XV_ԩS-ڷowJ[25Oʱ,הkJ)D(||Mm4Fٟ!LAu](Ld f4Ƭ鳾A! 's=$#laҜqȋ 2H}mÏ ;nm16x+˶mj`H7$ssmӮ5\DV\ys=3̼ r>ꫯ>Luӏ?]{CN૯ϯzdĈRȆ&r}}},}ѣ\lЋN<3 CpSO.8ԓcSBwL8q̘1Ζ\UV|hLkղUn9!Db2i?MK.PWWdْ^{=tR=Eg9Y].WUe#,2!GѣO(']ICnR"'0p@}nvͥEP;Ix,uݎǰm/9N%$be/[0H䒡ؖmsiLYs~}~.w1W0tWaZ МM~Q!м?Sy$!x| [ |1RJ™+`%PkxcV`pݺu@t (J)щ0Ol36-6_G4jI#aٖ,o1&ĴMCk91cS,"#`#11|ݹcI RTT^1[)DAq9?S*tF(ٰaÃ>7 yix!$x҉'xB-5I&C!!%  !&L9s+/@ށ"8xIdC6nn( bA$x=N  >Fe[6СC8S͈Qʨ4#]`0Cv.e\.MӤ-nNՆl$2JKLcDpaA pQ)1B)!np~c&\r XxݥK.c~+G[P>VrnpmfADםǦ| ^' %<™Y+i(nnq:v8uT vi~opAv6%'Rugky"Ȃ 4܆B P]i:bW W_9*0<F5z.pRHx<rF:ۥδ$:,]{MBaysƎ+4æy2FK %LcTs=@Q B xLs"fXp\nСW\A9rduUu x{3 tViiZƘ\pn 7B\.4y'kDgPPJacpp?a k cH![$ NUW]u 7|W^ye玝?|+,x#BIeee4c4 _5]KMMMMM]`ׄV]m޶jUkV@  !fD{Dt}3xiu%777333--m3Eu%s3۴~pO{?&xÍOXSS<]_M |oii=yiƩ1˲ oeYeRJCЬY5k<#YVte5ka48wr^JiZ5<^ш F5OnKKKi֬٫ d˖-ŋ;z~gM{BJmڔQ۴ O p8 \uuu "D#a,Ed?FwE#컭((ʾP^QEQB*+(QHxEQE9  !zEQÄ8ovE([hQw{SE9:PJK`wEŮr}4lp( geJi,3+nS:B뮼jTwEQEiln{\? .mvm*(O/ˆvi*(AqFۼ,EUEQeBn87'gerr0WIQRܿMMub4Ɏ`P((#LKOڥիm(LJثWE7ƥ ?`֭k֬!>8 !N<{NR:qZr`(Y,2{lBHFfZ(`eee-Zq|R6jFYv/ҩS 11_ўN\?sn(ʾu=%%rw+5(͚5۲e }?ƹ-Z(..&tΏK6lذB ڏSm; ig !D)unPra59_] wϜx\}5az(\PvY;^^Ha9Ҝ=CRWs@J䉉vñ-+-a55c?K8dN:1ƜuҚb;)uތ3bYtPJR]]](:c3&q.CJY[Wr_!N\!|77|cTK-[?Xb/J;1eKQR夔^qƏߣQJ>iҤߟu$|>~#+==rP8:QJSRr6k~ 7jETWBeeem+_qlncѐv>_PA X_k]  =X86MsÆ yy8iI{_.$c57op;ݥ;K! vm}]VBJӓ,)\?ܳyFq8|snbJwitM{sdM0O>:i`N.%jŪӢ=.ppȔR۶#fqt. YNw9hֵ{׆SJ͐)hPS`4 ݋/ywҹq.#q'RJ$rkyiae7~w櫯~ګ ÅE닄;thס~%J;[UxRȚ͚=+yn-ٳ۶mbr,K.Ç׻tb۶a(*&[ؽ{a͚5yC-%[@УGܜH(jժ[6s{蕓Ж"Zв.]T,YdȐ!\+V$wyLcuuK----wЩC 夔N2UVk׮ݺuKJI2Co +/-%v4! 32􌵅k]ksB>Ĵ+GYYpi.^xkVөcy ,xKtݷuc?~qg=ē]Ӓӊ .\I'M=M6ɃO~9s=gq%_g.//6/++?a|(JJVZeeffa&Oa++~n߮mס]]p˫[)?¡3[)O /$'%;R,/ҦMԴqM~jnwjjj W  N;3N=é^y/zPxBȌ3***n2eC?TRRl23h.Z|~sǶssse7k|3O/RZSSӻoꂕW_q]kwy_ ɸʜf9 -۴ԠC]<ǩZo*e/w~Ǘ_}h٢V[m޺yɒ%7x2kf͂ aj[믾Ix\/.))Xm۶}ǝtJLJ?|`{︷/z&K.d^JeET >!~?|հ}ߺmO=$$>@`@pU#ؕW_h/'͝wݵqgϚ]^VgdO?r4qUTUyv-ZlPXZe]vC/: 7[!/-- ՆnyΛ2uο|n+_`E>uڐRRSlGQdA7_/8m۵ѭǺ !()))/+{u%o3m^scޝ>{z9石hQ/JHc9{z<p]:7߸‹ӓ v:aYٻ&}ɧ/쯫Vz:?gz˭ :OC _>z/oXۼ**j_ۯ~N7% ^,غuG}4B˶$d= B畂eg E -y}9stڽajLJLkjK0C~1M$H8Okr~߁!?S;o¡^uU5k0(vmXM6_rsLm۶إignE??}I̝?w {n۶m:5kּʫy3 ̜3s%O?#={_'Gw>!@]cgu'''_tE;o{e;wCk׬ZpuMg}dŭںZ۶׮Y,3#3DN) ~[0}O8ry]p]\piZKnڸ;t,,ߺmkUEkoKs΍QJ͚Oߥ$+rfuY_fkv؀ V]' :q뗕2weUTUn]YZ\7i)iuܙ^l ]s5>7fd^^V^UYu\(hrj7JJKѳ-a9sssOKKo(Y;p{w !\{͵eʪN>dg BI>(%)e%y-aNUK+J?c6u !vӣONNƛ^UVU>2Q4Mg\SNY K*8C))ڴlz\ Wꞙyݵ׽3WHKKٷ?GSK0<Ȗ-[+BU!556 #Ym[232wֲ,M_]9Ff?%Dtf}C=ǟ٫ˆQJ!Q]_={zz30 -<ԣ&L\ٙL3k, E iݦ+" ׇ~4Ӵ] y4y$I'QVU,Y |th$ A@,X(4J'oVɆ. 999YYBPJ\J l뵷w~%Of[]EeYs~ w΋QXFgDiRBl-ݪM~'ؿdkɓO=ƫo|~$! 7‘2/;r_׋ 伵 =i ՙ Vq? 5=Pp>`hGD &ldSwsB2M2Ų,pP(mPiGJibbcޞ:uSOx]֮[| 6HS,Yd/s PO>Ņ'O~׷n*,>?sjvjVNr-?E ]9#D];rJKhBR)RLL|?͜¢e˗ٶ}'u)S /_\uR@rd E^5\|ɓVX!-)Lkҥ~l7ћ˲(:k9пo߾t﾿p)Shn-K-dl *&5FXbbbm%3g\Z4$B_RR6-ۜp cǎhԩS-nӛ .흮Bf9͖\RWWK%wԥt?_f҂77p[)?LYnm)i).}'p‹#_̟l岐T.]tɢ%+ VVTQP!Ġ&kVZb굫wY\YZYXX=nO=,nݰv%s5ML22\BJ"%rܲ-!DvVfMb/bƬ+ jkn23=s-e7lٰrʟyy 4`.\p+ViѷmƏޛ[NXb)C.}UV-_pm!KnIKR2ph"z ?nqmڌ~uʕ+W\j}hgϜ$cw}~JzhQJuCfϞxӍ>s؈#!`gOa'q$H)۵j 6o 7YӦO[zU}۶ox ӪEVpm3gӫxںs=SNjj̝ӳ[](Q1xE sssMVOLJJW>锓mۖ1p]CڵmKa3f(Zҽk?iOe:w꜒Wff&d.mܰs~O;=-5e4(Vvg]/9kf}7=;{G繦icƌٰ~æ͛NtoF>~3s>|۶m4hi[m0p۸qcm۴5Yu^+W|7s~ӡ]aKHLo z } ٣m۾`08|=oܸ}-Z6$!$3=s-Zx}^pv^N7wiӦYSNY͢%M6) zuι>׮]2eϮ=sgݶmgQYSx ѯ_̮ݻ._\lyvVv֭r}n޼`M 5u5_w}NIK.]|? !DJJJjF3_o׶].]i8^cZii=OUeUf;$''XfÜ˗,b /hղ߆|-m۴m֯_hmarzy3}s3}Ƭ۷u\;weӦN+((k|-'x6z~A'JHHزyKܖ;׿`iԩS/]ޥkܜ?My};ulնU~~|%Kvm [NBBB}}+7o>H8C~\ PSS˃R]'1y9r}:?_\W[KJÏ?B**RS:vx=N3q)l|԰q]V:1'O9kwݝ} $bHQb0Բ10`@~|2 KƪR X.(4h%a zgO:$۶#4{F]8p'L^K);uNv\@ (gaQ1v{:;-AemǑm6TR4BI'pl(UqL|~un>C,@o|T !vqθgÅwи_wM7N8@Cg_쒒 ';_3ٵlrƍfϪy}&-[7~Oy]=zt^=~~YU]v݌po.gDFO9锬,8*Cr%]vս&3uޚs~ֹgdD"]|.%1EWNpSlk_ R:dȐ;6x<+d`;/[)Wvq%]6rkmĹϪ{̝s3+}kFr=.sٚ{ !Űay^5B9BieRt*/J> ݐt;<[BZl @3(eJJJnnn[ )7o4!8GyTg_w>}+V^K?*99}UUUiii{8ʝ(*ҘRH nw ؊/u]*kiW3ղ,gt)55o~鴴;s@7xӋ^˼WhQ][vZ2sL2 ![Kk)^n ͪ8(Grh[Êr:ƿM.ճWM7J -"HHoѲEyUbdŅQ22`!dM:wV((OQ< ⏺CPiE){>qN J+J !7lLMK\EQE968!Č`hΜ9]vקޣ!CiL;;LEQ%6t]oժUaaអQXHA)]038L~jyeyeE%K|r'o^D̈mPEQ0c%&{ꢷmJIK)*,ZtIN=zyֹkg-yB@]EUEOGQEQ@0'TUWtI`p]UBT?IENDB`engauge-digitizer-5.2/usermanual/tutorautolinegraph5.png000066400000000000000000001413741222557406400237130ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATxw|^{!^E"(**{g/<vl>; {yao( Hovon/;3?rD |?{ggΙrTPP0r^{ vI8.-)@ a-[l-HiӦ@׬$Il @^ PCCCff&clsG0iiiݺuh ]#ΖeYפ_w}*'Bs) .t@BЮhk9=4zzޢQw2ARgqjv瞋VX:֭yۃMqc7mtDUVWFBݻ-۶0rg'WZA0H*c?ݝޥ ξ@piLlV !PSS*E !D]bEJJJQa!j*"=z28]Kf Fuuu6nݳwJj g`m۶rۀlV<+MJ`ҷo;s!hѢ@8L{nRu̜֜fosTph4LUSiFUnz wFqI1ɮOQ捛KKs,Fn{O<< ɒl],!iw[N] ."9dxvV%YJL+iB<^e݊ 8q,.dh61Xnnn0\n”>}e9#=t.X'`_k]P(4gޜ޽zWOWiKi39e9;3b ?(ALp#x1ߑ:Q,[|iyyy(JAH8bZ,(x,W_;f_B] (U"8@V܍1<{w~gX͛srr'Km[֭[bZLU&h^le4֣[q4/K 4yUUVzLc7mܲeKL1D٧F7lPYQ8+Zܳg6%7 %ʌEKZv}g] :\ix,ޫG_8~InXoh>g|ƵTwMX8SU5?+#b6llqe# 2br05+MЪ?Nl!kk_>jبں-[PF 86mڸi,ݧ լFmc`(*(*V~ʩw+Wljn€a^޽zt)z@ e4N{ހ G)L$I6ȭ[ZHU8Ǵ "Yc4cO*( p驃}%s.@jzW,_໯K:tPY9SQ02fb0ŕLq4#j;*uq? zu*S%Iէ`Xvu+3r3g@UB9USkWգWii 몣Ztc[6* FWgdX-VR'sYL1.fm6)TH,|FoQÏgc[SUӫg¼uq5eefm޼yæ Y-b歛z5krj91 q5u5u$edeԘ^R("!b1zz*1-#%p)e1uu{+_AYvUzZzqI1  ,[7oֵdZr;wX_ 1-=;= ? /cڭk۴_~.3gkVÆYf56l6ƴXK7D fCk*SSK.e}-_<9cŵxrFϿ$0ƣFo.Jb^:atj (GWQs e}֖mjl&On$MUiESTM4ylT1Bp7CwbFmoB,qXLp(NOM/,*Tq`PES멪"sJ,aȤ3D %%% UUVY,G CXO>^`0Ԥj*4r;u溚Lˌ`#i0‘p0-_1W/{ƸZZ냜T୽0;uCiCuuuID0ƲG+VOYf` Ç g%yyBhO*+ez֔ ]tAVC_gĪ9 i0M1Mzr:!q(Ec.+yqF9E!t: A<߶mJHB<΁c,28q%9爷2ƪnZXXXإ Һssss2s]U )bZz葚j2ihhhjlZbeNNNqIq"=GƵ V6[lr&[SQS[UҘ⩩ٙeh@ 8 B[+V\im|,kqJZrbFג!+Ǩ|M udKkeZ^^\JJʒ4|گ_?٢ut?<sO'ٿYlF1+ɟ յx9756٬6. ZL[[6 0NbkEMUM9  Ki&F-777B۶c1ú0&b-M&hBZ GjTMԬzO}m}VV,`l6R[d'ꐵ!m^~A2S$)%-%y3p22$󑐤1- Skkj͒9+= 8 15 g۬6O[q7p8v;Fq=Kz"8hn˒ 4US$) qfÚ,\ea*':z@j-TUVi󲌳-(0)ct6o 8ܼPHQ꼜0}yZzQ%"Y]u+qcj׹&<٧Hw3g2˙WWSS 6f1Dv۰eÚ56 lҷoƺF&s^YSY_`TPnNW*nj4{t8f͕l1[훝8cq `Uu 4!lʬV:EU@2^USL1bD^nh ƞ{2D~! #5cx]-dg<';nޭ{նJYKKJ%núX,2J{DͫݻwVfgs򌬌t|q%n$Ƃ܂¼B M6\;KKJ&kS+`lo'7 ᣆ [PߡEʡS~دٷht,}(Zp"臷/P;W]n&Xw6#k QM/[8vXȔQM1!^[$QF)ao=ruO}}=m/һ e j#.۽{n%AI e`_Hdi~F0I%e XFatmӴxܩ! ~={赤z#|MC&9L0g58l3H~]0n/)v{s;`[@ W(xK'u!yfЧOa;@ {B9޽{+ӏ?I={$b1ܯo?MJ@ ʪp$@h4:$ K/O',@ ':;*V lzS$z]wOz89ҀQ3 !ٸbF f7{ٲeNyᇏ1⭷ުuɓ'w>]_h42AtfvG4ݓ> iD*"B$~H)p̅@ hFZzenh0s}WGY\R-֣sJμ˗rO9rB(,}A>}[-,=َ~T5=܀L(<;U cι69eN' !lojסף1>OG`v+9l`מ1MFK.80 G3!`Ңk?o`-1nMEjaNzWLl! Ͽ%+JK2)a/?}OP=3<3tX,6ww}wAAc%)c{<^O?}9p _rk: x!Ï?g}vrFM1L;bZuÀ ]%IڮjU\UVVϿ+ׯɌx2-2 Bhgq,znc>fƌd ,RٗZ /˜2aϿxuvsNy饗Bаæ1l-^@`SPmuȑ#F#0p8麛^xYdtUlkg4tZo߾ o'gZBDցfwV&Y>b zNm65vE98h`(޻O?#:}J?'"@0[&L0ydгO?[oϒ$wO4`s=7|}֗dCBK.i6ƵxbGt:󮑑``0x~'|A&p:`Ef9hM.Y8}ٳg'7ߘ<@ y7rȎka}{(TWWƛqI9IFKϾH)U€Gs D5aE3>=iݚu] -[VXTЄ1~򩪪MOi'uaSR+U=.% 55VU:EЀ1f0F ߕv-754=#wqc'~G$1|8p1|أwMny9yk)7OVح} dHGȑ#;VFZ l23ƌFcrR4iU^^Ĕ_us232;[+%FѢbn4oݶ :NiɭZA£1Ng%%%x/I'F]@ m6_{@ׂfffnݶ|gK-ݍ5c;F8m[R524mKQ0ƚ^z%xigme˖ES"Hpss}W^~s>o555foI5Z[xjFڶl6{ܱ]tlJ\)_]5޷O_MtQSݩ}3_|5nQ-KsNL\|O>^ef<=chQע%%vXa~D@0P^^WXPQqF)]~+Uڳ`2r)r{Kݫr ;cv} h1Yc,Dʕ+}>ٳl))Mx;찒n%)?tm}mFzP I{xX6˙ӦMSF~8m4=rx<zs 1vPZ|Qzvkd4$cUrUjTF,Gι:nH9֘u)h\SN5)T*T+TQrz޹~y%158G`4f}ќc;&77j6gs8h'}yŵάFB ]ո``qX,>?(LLUx,ƙHfu؄b%I2ew}O=)gg =q4MQUKht}qM^'%5)))ѽh'ѝF#L0&8=-=?/ђEu u<B2ըf4~?BhyjT4hY(u8Qkeʸ/++ʡ޴qltGGug`[նo]|ȸKqo6_~s ^q¿jͪ7x .8x 0 >jj.X >#i1-[>?0'+'--m72J59ۼgEr"0`'|_TPG|}\,[h,Zh[weh4F}r#ήSLyfϞ=jԨ)Swq^x%K:LnxYgd4a[)a0LԔTl1X>|UW8|#FPx|Z}ceuS')ӧO>}N9^x'2i`H.fi:׶mK޵1c1,9998oɷtˠAο[ԘQv}:~$"#={@\xd/sspL?ǎHvv6N9laO=Ԗ[!~{ 4`%+e_~Æ?fW~j{1&$~z?={?k/vau t WUVV9捷ވFs>rʴ4H5Ga.ÑЃxr7_}3p@"У‹/qvV?|xiÆ=&5% { dC^^ըdJKKSJssrMFرc{}G{z_uC=4~̜nb9E] 9 f1 f"@996o[o5tc&o FpxgG>b?8NCOaAynnnEEEuUVa41mRSJ=^OIiIݻ^RZ9⪪zt2޶u[III,$iڴi6nׯeTUcxbһW?H$Rصp})z?(qZy䑉02\ ;t1Λ?Oֶ;z|X}_iM= $Ge0z6 0B'/aۆ )1-9h4̗jjnlЋ_]/& '0o'y{aTU}zPFF^={%'dlsk|bt4{?8G^` mo,A遤T r8_:Y?L(Uя1H1^dI8N&K3z0`+Dz섩wO]u]uqo_x}^ܼd 7_+e^כ}1zd>}'_~gwe+#<"K&xbkOMMM(#FH@$2Vh4Lڜۯo=z&˗,]Fx.'б®Bt`aA95=X4ݰqäɓ !m uXѣ-[|wf)L0٩b/fF$| ;ud'7euNUMUHѨQef^XThXFUG&>v? =3ضuۮRr3+zw:vⱭuw|(u0x"(ƭ2va kCvjrg{.a!Qν3/_][m4{ѯO?Ir:z?/[}^]i7%O-7x$$=ًA :L˴&Ƨ5>܋AMmE9Fi˾Fp3oNr4vL2C?[?e;q҉IUv[<E@ B15;ίgS$&+it*CkB^ U栔RCZV 8X8itj5.e_F<;ߍ?j>m H Ade#7Bȷ}{={w9G=jc83-*B*++y?cq OՆ3zERNߗ>946y|`U,XK/CUAx@0yeEcJLg= Q |e!qW GlAW]uرcq!Q駟:@;SO?npMǁ;޹qΖt1cFb*1?$i?Ί?)oDMysn{Wl\g{OBȃ>ѫW}Y!|yxINyJJJ 'D-]cC$Y-3փLOzfjp$W|{!iZSSS޽A<5X~]4kOg1nhh(++ս3+_@TYYYԥ(Օz7f3~'0iFo,_zuVv~Rp g;ۡCVTTXVCzKL3TUS76"oY `aAa"UTj" ={P R?=h{g1~M楗j<0If,˲& a{B Гһg hp$K IRcL})_O#|9GvH"|h$Xm^X3b.8琜`h38;@5}Y-Ƶז*[t!÷үw? J\ڞ-q8?'`?0}cl6H$n)OIq' O_VUU9γ9K_pr;&FU#/ZܳWe˗~8nawp9Y9$"6nǞ(/maO:<=>W^9bx廉diㆍwu$KƌӨ3:uHYs7o!(_>݀ zfΧl'0ƒ$=4V}]򎻶 vJV %K7uDr!?]Y#@'jU_j/NO{m1=uǝq:qhef՘jj냘a|ԩiiik_nxM [B}Y4uAOϞ=Jne&@/[ܫO 9YiI#p9.jL_`ES0`qW]1k֬{9n9f6n%>cV1tX3m:1s4tcuk9NGL3vPm7EAQQvC9U[;Ȫt6#MMMgqƵ\ C=T[[{ʩLaJ8~.X8|3:n+_" MB@Zj CГO<D$I{m; ` !J{QV9]#0 A6&MI✷Md[r]wu=9j98_9'|05dC#gDph@|'=eۙg\gWv@ˆ3ڸnutu=zv}%Ic6 ,/ s alUu)55,n٬iZ,K2@FKā#&*F1O cT%ml/~WYb 7#5xBH<?fܸ>#*,$y㑛x!ile(x)Дc!0Ƣh4-% 1 . c 8#T3.RCXF׮_Ɵpw)fuhc]>Dі[l zSO;uؐaOܵkמ{O8z3=#/7OY_:v뀁n~ )7M>;oU| Pe'-9 b̗fRӭν-#ayw9USXB&2o5_u[M~C T~,y&s.KnF`0%I҆uuQU Ѩ`,*,by}^US32CC9dətڜoo5y&N &)؅1nY32u VmUW_N_WptwGYU{ /_s?ޢϟ 6(s3 )Qbw{^\6)f9հUffdLh4  fCZZhXd65{cXfffeE%6by+EbƙnJ͒lpBNj`%")Ynr;NLJ0JSt֭[n?)XtR|ĉ)))sO1a/s#Mk{M6M1&)0"f)od2m 2|T'c(iu3+=BHƣ*EScxfiLmMOIڬ@l2L8*RUWkx]߼> ϛ;=dАX$q sC_$yQQ觞]c ߘjxI#>cƌ7h|(\S%nN^;]hLehz(4~)%-t<}8N (1í#̂)Lā\U%IdTMJ#HP r% kc ?7󥧥WQF\WzEiLc!jjj<0tYFm6[mk04[R~4)T{E([h(JE}X4gL<~TUU*HHbF=Qb)0Ed3L BrO82nV@Y|hή"ݺv٣gccc0D!ZnCQNM 1h#D"Rz{=^US_{NpK.7~li H?nEXBrۅyPPCa[%(lO`X̖^{544$zיY#qJ6^k6n;.۴i'|rw0O?U-YrO:{{yw%lټeÆ|oFAW+?YE\k]= w+vs.Ot 65eϧ*we`޵0} 5_A/@ȿDS;Pl4|f3LIWq-ujp“d7R8Şc9Xc(PA p@| KF1 *J cg2:d;kW]ٸt=ӧkI>sĺ~Sfdnew`7CHj&,6 pPW qq-ŹmV*XDT]Iǵ84 e#0P  `08qG\_#B#=^b.&;:oG A6e}>=bpEvѝr:gΜcGg}~g~F9dYV"d"ݶ' cKw/@Ўjҡ.w'bOuʲ3whXԻXLLc~xb *j$lFk׮3ޱ]rVFvqG3rzF5K/{瀱uk7]f*NkUF6c#;F٨#FM{ZfFq쯿zQݺv@%v#;PtH=J26vj#Kd"!ΙlifLӀ/G#o~"zc>}/rY;k_3I#h-W$ .9 t㍝PNcZ,nqYBɫB0ZN8j"Z8h\17 [0qwy˒|WM>)7s1\r u^yyŗ\t: /9Ӻw=Svsբ{2\}I|{KGsڵk[p κպ嗄O=.}3̠T80@ `w.R?srFc˜۞97lP5755x<Ԕ8Dt;:1r٘ ˮoZuOE.M8+U>x۷5=n}]‚y=nfj{k ZX~&( 0'`= o&e"nF_Jw=ݦbJݩXƮt)W{7oncӝ]R<㚖sMjM6ZWiՏ 9NSRJF)˔,8.HIg;f ΄8fl7'n HJOT&p8u -%ջC;Nlъ#8bUm29O?G&2i)Z1jĈQ#_8eʍSZݦVv~>,0Ɔ~mi0ƣGw+:z̘&vŁj K\w`~jSO=5%-%$3N;#=+=xt/Lov<|INAΒ%Kz䡇|HӘ6Rkvi=y#P1'HRq߱>hP;)@#B8I'KR(BbWa$Sp!@v,1HFICk$o$:e9=X~h֓|7pqAevP[]zp#  C8eӷ];R|btGFo;cq5޾ɠp 'pRsMj,ܽuРduVqu@jηZ;6Q`>lBȐ!C4uQ__ۄؙ]|6nܸٳgvDPV;C孷ߞ{KJt|4KGv[Bm#=@l$y(0#/䜻SN;mC0r={ vFkvιL6w|m/>O)dϵW#>} :T$@KD+lXʔҤݮ`):_^欮#\]Umjjk,6K=Au{{I,V :\}C|J)ʷz+́5|Z&oԝfivw!cq-ޱ#r )hj665Rz6}ZiIifvfSxTVtg)Hp?K(Lٖ?{E{>VvvIֹ2}G?|9aℌGB15˖/[|ns8sHE) l:9 At*) Ue4F9jhlHz _zE $ATMemظa䈑k{ۛB/{ fچ}V5Bc%y۟hÃ,yEQ!WF=9st8Ǎ+$`sN9v:xYS>k*UT?|QǕݯ}p&G/..=7))))m>w@frsuI8𬬬N8aɓ0]L:iRII>f9?3}Yo: /i&{;>)cUUUAg!e_ٲ vM1(Cظі7{)adٻt8TX 4nf'䥦!D79 s5AVZVvz^]dF6r/rcFxSGG?a=!ܬܛn plؼA"ln[^ %]J^ESPq9lA  'vH(w4|zo:?kzPcX,~ph$ y!@A_ixF5E;#xss3F햛CtATSS1^d٫^6{HzrvB˩20Ƅ;@U%t^O0V]sl F^z#x0%%.1O?5t;>Zs @ %[)$7!&MO~ScS;(xXrO @@ `Nh_߄F[ܒPnr8Æ c@2Yٵ!M7DpB U`SIMMeKgׁ@ tZ^ 'xǡW2c8=k@ 8SF@ /AP@ /AWc8cc)))]@  bW_}U̙3nj3r1c|']@  t^xy1B?iӦ{oʕ׌ɓ'N"ԃ@ ?{cXqq^g6K=}ɐFY%%*rp8FeMՀ1:FQs6!<(`14GijRGQf0&$ذW~)G+X4"@ 8`_ >;/ZWjV0s$[2ŏk=шrNqJ*Az%P. ܠ“*shnxɪKQ;̌%!՜s<붭(ߔѧO}r !9_n}s[ T{-X+F5e\Ԫw?:~±b qΙ [KVEtb1@ <~j6Q^T $=H(|H.;4zWSV7;ҜnN(&n pFd 7eA\Y<a0[@&S eP#ih B,%)v6x$͔<F=~n6SpV jk@C3D1=&0 s &=jf8oLoꍫnVY/Kշg_x1ug' A籿%q]|c>؇l07WVT72%2~[7y/㕧3"S`ԣ;h;k՚3WԞ{rYeMdcN~_rG)^ڸӯ^o0ŢԴg.)+q>UW>daG1*nE!y2rijkq 읱dy +ǏW*i0 (*ة ! >$RW_ޯ,3_PaCj>4w@,En,=,+=Ӝ}s\n?oRsX׼lrusRa;aTU?Ω(ʓ&Yb[k nZ܈fy}9Mw/8Ra_ X, ~PUHOa0"`6iF>(L"1Y4D>@XN*$ivKin!2 A(` #01 2R(BcL0oe/i~|GHS p/_XVu̘}|M[~`ODp`LcT`ИAt~W}~C-jZgyn/Rػ5}N0nlG}5KRu" `D3@(F1s -a4*+j)2.<ޡ֭grֹ=G ͊ERgeOP 6ltNWU_~ 6XY38 @mCLm7mj{ouGwJo(}q=rEM d}=cu}Ʉ˷JU_=~%C1(~ azjNc."оMKD,~1c!P8 nO< D%8g3-+64 qGZߧxꚸ TT(*3ܥgVC(q '%]vG|KY~ӧ_.z.eaE((cüEˮ?nlu*B`kuOs`KV#b=q#-(E8/p@[ )dUm,KI1ddP?3pT6AlfX 6 0bR2b Ꚁ1Hq@LPlf0"1i `n@QpYK&XMxRx`6^(:@f6!~$?sEO޼0SLnr~1iΣF\r;i/T?= n87ríןշg^= -&׍ƴ#+nl.ZڝZJ$jC1:"ѹ]WϮyԨ55Ƙ4(Kd,cbD F9H@s+j<^:fh䤻R~eKF;A (`1}`W׎֫:pi%~@8hL庂o;p1ny'T)~J/In n Yr}ZNz%@ 8)x1 УPD6٧%0Ld~QxIŜ_~5 X90%_y}>u5Mko)_WhذM~˽vR6cƢJ\ij 5T=8V"fEb:MVn3J!-yiOy2r} ~l?D#Q7:_֊-`vtNhal6ʄwܟ5Tk5p&v=M5UmG}VWO}c .양ljNOKݼ~[( k,z|WX]}/l [F7 E9a@ʼn7dFKnM@*s3Q5HOQA915BVجTb!#UX\6T a sR\H0 2iYR4Hsk0 FAf B`؉w:bgk$)hF0~c>A  1l숁6I†z4e@Yɴ.68|~a@ 85L 2'!dTۛcd  ib7WsJ^ ŀs`JM!54#91fǒ`UlͰj  dbNy bU$㱤`e 0bqJM5FWQ) VnUVSMu薺0q1 ({gv+ oŶʘ `uƸ8A5m Sq69)S9h 냔1 R#nPC9?4êȬFF[XNc1i K HQ&hZmq0ERkf `J\6մEx(,FiP8A!BLrUen0 0k;!F/L1@\4 EQj2-?UN HX / Kan`>ك9J$1WKDB!M@8ObȀ*Re"%A&#L 2CLƲT%#P 4 \mVBF@0"(H qr4X+m&11[W kj9p FRZW+?xٕc #ID HBp@@,K$v!@8 R S9؍ < aHwAUTMFhj RuV8#+OtZpaOO = AD saHsCqQ&2S(@tT ` 3a[ɃaE@Uœ 9L4B%F(b*2 @eѭ0`#LBa$,Qgg@ #1 sm6o lP*cY&D?*aIFEMi2|Nf@jcVYI @lL'7Y Q&pY n_(K`5,C >0I`2? V[̀(pm+:,3!>0C$2,C~0I`4Y_2LM q;dn3Ӌc{8޲iKe"SD% R ĠWI$mRSѦ!}2_Ʋ&c"j M0Mx<ُ@ Q-\0 ***\Nf;Gu+@Ybǟ~{!v8?bUTT)555uu @ o0N;zBȧg{j ht:,_.(1 ^Rc1F) ^ЉVGQ h @ B D(x@ B D(x@ B1VBx y@OD(x@m޲CO1cٙfeC(x@565V,Z ҋ/MIIF-@ B vO=}Ζ3uusT!Y/=}䟈j#/읂;wj߿uӦMfBqΧLr:8@?1c 7Rb/,Yr/X@x㍝]@ O{}-@tnݺg}OD|իW?n"oEvÞKJJzzd#N) "aOGcu8W&,˱Xl?"'/9|LtZx}}}vv^(@m۶H$ҳg233^ogK!슽3az8 ~wyc[my}}1 !Og  "^p4/&u<1VRRƦ9gYm0~BD8V +Vp  "η@ul?ckqfz+sg_xV6}m1ƺs 8:hlknݶuȑh4fffl$1Oi 1 ]9Ifk,Yd<=:[A… /䒊ekEv~ZM#8rnqq/s~ 4zlI/ *6W|G^Kĉn%;?tM6M~[28+VШ6o.$iE?S 2Wfⱳ<;ľ̬Ol's̙9s7|}޽}?wSgBs9Ehyt+yƎۣGV!YYxJjը%1n) qs;rrdYFY45|G]vʁsƁcӯ>O m\$?Ы0Eb!öiۦJplٲȲO{-@`E }Y#3S{+D"cƌlYm ^ O=TMfϞ]VVB >8SRRzc=6G}tg<ӧvZg#/Q6Yfwy&_<;[`30ƨF4u,Nd_k6eʔh4_s1-@p"/SNl2ȝ-/? woW_F s^ҭ$nݺe4l(l٢(7|sGw,AP݀j! =SN}駅vN y䑛oW^-@pH @ yoW^yeر-@pH ӧN9;[PA(x@7rw}0|}&@ ^ ]]Vhw+uva]rc7nɧXࡃg61bDSSSQQmXY57767ǻq+Q6d萞e=.]>}bN|GPܭX3'+o-`PWWw]w˃ lq:~aܸq-@+;vW^OqxD"kV_6 7nEdL;}ΖB 7m4a> !OL~uI/r@抜Xo=_~ֽdd\CJʨBJ~<̇)+ P#ۮlڸiN>I'M 1^xY{ΖYtig 솿QͽF8#̝=ιeG~:n?Ֆc"wM}. Sfزe u=V_hmZg{/X(-nE(t!wԪPF.ߧ#9.|sw=VV.qcƺZ***jǶ^g[4Gqqqvv6qٙ9?Dj.w^R|R_h&\>|eeeYYY ]/t {|t[h!uoӪU~e !._B=/Jϝ;ZȲm{ݻ#vOpն~w|'5޽sw޼y,zzzӢE VYuZ1& ,[lҥM6 @r8:86pmPX\XGG!aB˗/صkW6m.PUc!&999u4B)oVXQ~Ç7o\rTH]:k+WH$/_i|ʕ+i~ⅅ @%ɾ+V%&&Be Ylُ?y'''+T38D@]`իW7lpΝM6@oV^o>P-1E4MQuq,rWW4]ۓoRmJ000pFFFB)Zׯ_4iЅfӦM۷@i:55wBo` 1֎?իB)))fffBA/_\xљsg$е@P3Z= ;+ e%vر\._pUܹӪB=ܱG\81BOellܴqŲl|B>>vjԨA;P(JUq=RBo"\*y֬YgϞ-[ ]@M99±\#y_c̑Zbk׮J򋷷GաvZQQFXWOׯL&;x𠋋K@@Tk,WO_fE?x !)-[411z!+Vz#p-܋߼y3|pOOO+C9T߽f7onZ#+/k S&_dI֭"~ضk}>{[{BdcT? Ba>t/枫Qa~anN90XBF?@((.!o qMh Q0O_ [n֬YRtݝ;w:๚+K6o1lCK-=n|r8!$>| bbd򦤚S*DݻwԩcP&mX0I!?NJĢIc&m⥋i/F]mfִYEgϾ.xݬi .^(/SNap׶իWsεjJrg8Fjkԓ'c"hdg\ϸO>ݻw/]JxٳV~(X0Œp|{b%u+\jޡSJ*V# 31fi>?}KΟ;8vM_zK/ק;w9lذfM2aE\ߨ8';1 YUTq{k9M6}Jݻ79^5rBYY !d"5178\OW!*BH*]] M [k}ړ rlvNvzM%ll%+0GO~2b;;s&?KuͿE"B(77%rD,Hk= !dÆ 3g444s环4B>///:: ݮ];߅CnR#||ɕpUƫbBHj!57طS>}1j}ۓ(KԤ̴L8%׮^;vVj)-.,c#3Q"$ VΖZ[X0!DUiңK{)oׯ 1jaM6͜9ѣ|aa֭[8(ݻszs%(1hoܴqRrұ_8JtO:Zߩ7Bɵ}@'/qDW,ikzJSBSVqf΅ 9ҿ_s3YIFFD,-y~p8q1!]==NNM3gL(2|pYڵkU֯_?sLGG۷]@T>_zye<2JJM=Z&zzz1cBamZY .dXg]ڭ¨f'lUc7O/+br317ݣը66B9ΰ r V!cd,bбCRRҲ,-LͦN!y+Ν;J?_ bT}3ommk׮.]]@T>z[]b v<'pN.J['G'www}UWQUϨ^N]͟"jj0ڲ,ⷚ#b09X_+?0F`X~}]s_(G:իWyBo!}]E0֯wIeϜ>ӧg7K0gn߾ =۵kG9w\Ϟ=n @mtu!8AbYͭN'Ushݽ{YfW2e-}-{?hOzj׮]%ɲe m@v˗/o޼Y.o޼yBW w3f ?D; LMMz٪U++neBҹs.YnviT/@H 4055--- \j;Z=x0McBtB0V~h 0tԞ={zzz\R hZ zLJ.dBQ<8I1 /+o5İشL1EtIEǼKOO?tйsn߾=lذÇ mSk5v\,=?S܂h ȑӒֽZ ҥKN 󋌌JBo#@ղ͘1sƌBW@,^xVZOYtO:%'Lp…wV[f3g^>fӦM+,,4119x`@@ `K xqTTMӄXѣQF(>t0a]r%000!!0,,W*m۶FFF-Zz[ az/. <+,XpͫW">۷]xP'-_!djj;ܮ]ƍ277:@uʕq.[ Pw@tAr [W@ z'BBBr֭[ׯ߻wouŋ#GLIIINNF8p`ĈB€ڣYf ~+@ڭsαo߾]@x*))?jӦ'; ADYpO? pwwߺuX,.Yvmrr-[|}}>} ]hxP>|8$$$""BP ]h"xP;|酅w::: ]h(x 9311AaMLLΞ=۳gOХF.۷oϧ{6mVZ۫W/Hw(SZZzرχ wPA@\2%%eǎnݺmv֬YB <;w<~8B;((Yf0,T<ޕ+WMRTTz!D;T<LiiiAAA98NWWҥKzzzBȈiذ5q7޶m[ii駟~ Z?>88ܹs{zzB۳RRRۇ۷ҥK 0`EQ=.. ̟?_wϟgff~ݻŋS7mڴE1tbccl"sssBsafB2*3g~Py (**JKK9rD*ZZZ ]*uƍWZ%T}ƌh"aTvuBFFFzzzƍFFFnnnO<45^eddƊD/"##CGGm۶ ,]ƥ9RXX1xbHHpўs:%|DZ,)tY8AzuR)˲mccDT*t4 ӓ)Ba_r͛(""Bh: 7nv^9hӦuUD~d_S~嗲+B͛'tj ӧ]1p@UMuUw}Wؒعsf~LΟ?! lI5ۡD<t4]3ipilaH?h8` -h!xh6uu`H.N)d .QWϟ`x8^ 8Dh!5_r_EI$ŋ ;s"5JB(<<͍{Ǐ󷃂2ѣ;v^zg%XYYM>]BCCܹ2e p߾} !Zݛ1bpBu־}{nݺ,P˖-/ d.]|駂\._d {Ȑ!kRqq ,022<ӧ7nJJJڳg|Μ9fffBU{c͛Y꿝8qB.{xxׯ__rBŋcƌ022R'NſwޝJOO 嗻 7<<|ر|UYYYk֬QU;sLCQILL${0999]V [Ϟ=_g϶hB5[FFFffjowVa|'cܡCJ믿TǏ=9s9sFٱcGPDDDHH?5vʕ1ct !t'O9R;wܾ}C;wӧOhhǏ% BOHHh׮k U;}tVV+eذa6B׮]kҤ (,,|ᶷShΛ7O7u<Ƙh҅%7nkӦR$H4VO^4z5`tĉ2lРA 0 +Ha/Vqef-{nUj8pc]hdp!T7%%Eue١C^zeYattt),66vÆ Ni"M:ɮ0((aÆ;v,"H$5p-~V!Yii͛ݛ4iA dUq\ff& #''gС'NVa|<|FL&511100@ݿUVnnn^^^511?'ȫP9uz"//Ν;#>}:|pN=F=x`ss-Z٩3g 4o?? J_B(**ܼs-[H$777Jgvvvv'Ÿruu|0IBϺܶN< -h!x@ cBckݻmCѰgՀW( _@ x92@Ua)L 8> z,r=Ƙ(>E"/1 SZR8U̸. ZlqDz/òP-PzYY#/?QQ6b8)%a~:}zMzzzJebRdb#\QaI FX,K$*10Ey EQƦVV '@Hy$3;!Beee5nܸ{/'O|.\AQ#w4MStgJ+--=yd~A~VfܹsoV|y?[AAu/D\([Ƈ睗(P:rh T4MvᷤjuX,S40^ifΝ }d儅-Y*X EZXZ4pnоc{~mZnվ}{3sgϞݎ-Ąewhoff؇1YYqrssu}ݻϟ=kϡMY50m[ϰj#SSS323Krrs98:(ʔԔ$RЫ!+cE"[7ml }}hްeC#F#GS4X"xBOJF0&,AKͿuԍ7nָCGB{{z߽w7/7oڤi;v蘕T*^ >ҤIHJJ og7iazaa#FhѢ=~TZRs? #""3{Ύ;wte?zzy;7pVޭQ#޽{>}ߗ7 uF5}.RK闃|u?{>d#2,no֖e(A_~3+׮?zB:ej@;;C$" S4ML8nvvݺwkPKK\r{eg}14U.--502 ,g,)(qquaYX0,f9= K0y3 @Zzۭ飯_Ie% =½iGF(JBѣGZYfV&_̹3>{={ 2Tu8hdfIJlW/_YI0=z\qwCm[2gd,acp)MƧ{"~!SĸD_E})EB ]֡Ks=]=DP^AūWĜ&! ƘCXP?r|oBpi=DeBkYRYilllIqI̶ͬn(6!!AT+SI|x[ѷ 僇BO5ۼu{O8A8B8B|y>/XZIqMgge?~x-kIO^zy!7"~2t+c  !4ɛ84.9./?/1)ۅ>}@QԊWLQԝ\25% q7n,Yt eyw "H7n|)LL7out=Y%+Ϝ;sw׻_̽c#ի7Aw50oݶa<ߦn݊Ű̼x4Xr͑Go.ёtڹ[-C =z/>BGs!m۶mgΎi_cs0s}9۷;wXse˖XRZ2rȞ}{FDFȊd ôiƂ8 [iÃ=353!B atBC4bӧfH$YguڭK.iT዗.bsrLML==.aH$wOUqWXH-wmUX\pB~T MM骋}r/Ms2fUa%H̲*(W^ o٢Gstt|yԍ={Vv!ƸaǎƎH6nظI#F^p2u^b\{d8@W>ðX,4xi6W?F,V>&qήδFRuч<T*-sG_Uk[ߚ>u:-lҬYaㆸɉy.lllDK-VR"LaKKKk[k%Ҩ0q^17@/N>"Y !WĄW (;*/]h"1-^Ӫf͚ߘ=/^&/^311qsw377W_"WRR[INL&UÞ`{bQ R_fff/a93[O0q"O,-^NKׯ_W(̢" QWc"u;0:ODq/R_` S*3 #0G8!;/#QԤgX[}|^^@8.;=܋JKK3s2)zl٢#GxzyJt$9m͠2,E`rEiI[ [6kIiרSN5>bD$Eu b)99Cq;׮^gq䯑ٹٹ9}[XX+ iDV$!za[`jnr}[;[??[7o}Bb&Gœ7o|333y$'%M-r(fIENDB`engauge-digitizer-5.2/usermanual/tutorautolinegraph6.png000066400000000000000000002552731222557406400237200ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATx]wE~'͉sQs|pxꉧb8yz3+ EAv&vX摟g7O;}8wq? %kni8"," ^dÆiX\aÇuMJ>ݶ=-,fɧ9Gy/-7B:w萃NaD%@eB!|UJ*쨣V F 2 *J( >ͩK93tC\jTLA!0H!\rI Jf,.~RJkmzV H_[Z]i}J?Y>w;X, MS#m %aI:}` NH}DBI^I6BdG& jA4&:|EBDr8,i" Ȥ"4xd,AM\X, &}nQDSB&D !n7H畺Iu^8H k!pŒi2'Q rCܤ<02&Qx' c1Ic^.":I}p<09Mx"Rq=8y^(<XRoEMt#El ,Mnn{ y+rؤ׍`$2E!|N"h!4#2ED>-28|gV>|&MABeRՂ Km )0B(!0¬W4)TFTJ)) e "*Q@J#+D132EJH)aF$B38C;6۠2)T(cLQaJ"䒛\@ V$BA=U}&hV Pۇ ,Xa[Mt``eu@PrN5! )r )ɆxHK:qm{\3^]'!^GS zpE(x v\6E9q4㋅MdЩz*DB):e$*#)r^]'T"Fo[ӪQcJVJjA64Lq"Bt*kZ")}:j~YԒ, fӝQPt7uoXcBƠKH+IS^bi&JB' M5^Pt1-.dMF "0nz}O\_X!uY'8 M5\N^T)ɋGJ8J\v9SɋO\oRT6QcևxRIBaBM((quMnzcDťǙTa.9$E. OnV$*K)ʋJ0J\vn&t.Л"Z"W#>HY&ynm D U8DI%Le*\ #LPPR Fl5|r֊L \iם;p@7@!F5;򼯗J:|Ͼ۟3F q4\v]G+oz╧n6諳>ʇh?)s=6wn70YRXkjYB2S2WH)J' "eaRJkyAi)[JIԾ}s֮ >aaCȼUkݻb˦yeBXLmă߸[CY4=Q7ًBJb>X]LzE@}7 ׏}wu w?lQ]%W^0bGryGX(e!Rʃ=uR^8N+(!"9^: VB"!".UK.NdcEH3OP1{;Kp6Fpat/EeL< p4!$NCO@ؤyVye8m|vTFB44h+)nI  FyA>fq."rMρFѩ 2.; ѭUu2s Di;<LI|l͢\"2嚊'2N;\*jѵ5u2s L BG)kS@SD\Z FbfY&L^A7B\E)ѹ5fa1pEA y>2<ѥ2'4Fp,z L4#/A"&1S%d">E^W/c; @?  M`HcܮcOw.DV>O3 DBԴ1(*T*S %r 'QF)[1B[5Ui64B1AIL&LNJ~\C) "Wޚ[U( |&$a&l)ii&N;qܯ~x_oSJi<ИM$!`/u H)Q?(/~6lhL?d-/t`q0Eڒ4ۥݖ"/)h!L)D0 (U6P]Y>OU,7F ՘f %L2!Da e)M !T5s ( c.uDPQPn=‘X4Fk}~%RXecLC<ʜH4V|M%B~>tn00]&ׅ>紓'"D.[^U^Rs\չq҇s9ۿ_|Y_=6J7۽. rS/DyO@@8*9p/_YDBueS9{~ģ}Xץ0@ 6se}#D ϚR^۟>a7\}Jp(E _׮}7[c_=rϼ#ktєK>##&;bb?uiyPW줠PS7ֿΦmK; 񖸜{lVz:nڥhI$ ݴvM~.YxO}_=uꄣ-e3gUnM>/#[91_[_[ŸZ(όّkWsĸ+ ©Shg\tQ=:+ۢy9vk<=.3IƢe˅h ~7ꛠ'uAUQW*k LܐM5|]G( ~*P|De'!D^'frU&|nhlLWl|B!8cFFu Tir[ yM39,r?** EG60 4UP\O͆:h rɽ@v a?<F,NjjE(M6×AG6P‘R)>#ŐϬ|S+f%נ ʙPB%BrʥD.8 aܘr~7_y:TB2eDŃ)4Re%膑?|ABa9_)I0U!!2tA'_|/O2FQsEB( W8DRpmZRdtK4N`}jv%]Js‘m={76Y:CȘatni -mkWųyK͕TAN.;]$@,?C2)x$ 4u[\.vE"<@1d2a5FrYG 2J3v7B{8Я͑v)ԓR:ʡ-_]+S6S D7$ʅ4-D4E4iz.;NǦ%8('lź3qGl*7 THAcl6pҷesUAcZ.~EHnEU]%ŚT- DMrCBSn0Uu48\% 7nÉ:9^&ppB4P .'vlMG킢 M'B p^ir'ʫB4PNÅP4y-T fr:M^JWTCb P8E5lmy0ENtS@n *0 (qlV UÉ b9Cu=4NT7@7A O&d; "!k&J<Yn@DBvkXj!,rMa8p6{26TԤ&!xmp8\"ǽyyǽe3+D>H,FeTQWV"qEa !#'L!2c,{B\JA!(HF ըYws,\W-0NQB@ԢĐbs>*R yA_uZAJ!a2r_1&$pr6' *Q]3Ey>'D>c,nPT $@A@nἄ)Uo|ߺe+7sdAk6U"Rasj#@"R,44΅vCū;5T7_/[˅9@\GQ^wF%L]H鲫hxm FUb7&D,t! "8$0 A!Tţ)K/xŖ[pgwϘK5D! nx<\# >qQnz__\\7**{ZW% Hq7mް)XP&n"yJeuρh|^0:h<6BH$4P&rsa$]A}@NqDcpQ4"%ToO°a 7fҮR 7z\.jꠠbNk@"oCECGn.qD2)s"E,L^ U7M8j`!#7\GSsG4PXvDˆ'`+r;* r'l ߃x4yTk} :rr 2țaZ Dp:a%9HDF JS)j&-"yV>ʧ^*}wrFS0QܸͅꖫԹA 1URiY AQ( QHHFAB \ ?&NυH9@RI)!&(ƎUu\b NS(34%ׅ.!vQC zI))%U:-8I oZw~')gH<\I9|+(V4Tum o֝Uu0U(:Қ>rb//s8Î_] )R.Mp"”<5r0:r|EQ̭jnu95Փ__ u#:8[ah ѭd銚ǔi~\XݻbnTٳWwF .E[+>^{Dq\ qu)%Jh @\!Fq1=/Ba58lh QP\vh0 1x >'(C]RlO44iP'(mMϬ|jYO7ZTRFX)Q%+p̹^{*UF9 aTJ+b^eBI$T*B"8aI?̌[ǟ{2 +P Di#& ;7[T'&U(RU0A%BH)?0|UI)oU ` %SR/8_Ҧ@nl}C )_ˡN$$ePF)Ybܨ( Źu&^|uo.XUuX+󬉴,'{rTؼR{JJH.p.$tO>v{`sٓmvצ-Ͽ2k s5` 篜-[oǟ"m:rЩSd>+9NZ!rq>C c?=Ă?H>OM&nrYR&$ x\0%MEEoD@1(ׅ 9DænC}L<Kiehs D B,MEBG0Jw)E!MÆLy!L^Z&$ ]h!mDҀߋ`N!h!o#f7"a s"ANNyg^{ymOna^ߤ'WTT(AIA&%nSJ #(.HVL]'8zF( 68/EvpMۓ&`}rUA~<X"Avm&/aPk6P#wqي3McLUWirhn>7sƐ6hHUu8e2ڞk& ǘJQW,vy̚M!E7.vn K \(,Ыj4~#8لYRNp:x}SA3NjZ^Sp2 YYc 3&rfuF\#iM^5hLݦE[.$Ř!קW7P0’I W=I!䤃7y>H@ [#gJs E%>T6J!wԇ(PTZ{H4!v- J|aq b?9n!JR Jh؏͵P<%aG` >#pn\ BUQu 9nB!׃D86{P&"J܋ L K䠼$-!nCEP $NxlȋLuL^Q~Oehն ?W]eR")4qUJNF5(xWGOI^e*W fÓT*T!lټeނyrZ)@ e9#^s @1M3`PWEP**:TdYhKGst|~'%?mDyw2:oeGϾZw+=R94]E!6mid&)"͙-$250U4oNןIu#naWv! $BQ84]x\9Qiפ45VPThG< h <.c \ P3y\Bcpt *DžxdkH I>(CS6 r 3 /Mnˉݎu7܊I03<.4 G-xn;v7ASv!j;ۅP$AК7qDr DžXn;7BSv#GB EEc6nw 9!ͳlKx)ru P(͛j?s|u_(#FcUVVӧO>G $M ,"} BȶmۢhiiNeء !d4_NF2BXJ0)L ,",K@q*I~nͮu֛nL_2!8#N'~7EYdH;iB 5bԝɭd{RH=[YdE Bj=}ZoىWJ)R[wH O_l9A).E H$s4 >B _dEYd!>]x[3栃z7lٲ{l^TUU;tͦ3&boE1p9vD<ёCg #RȽ^XYɼB {M" !_xQ>}v򊠔.qK/˺bO ! {}: >=}/*K $U2jr5v͕tޭP 9 4e/M7ܔ Q=N(!5RêڛM?>BaFHX]CB%-@ lQfUsV)2;@Bţ J(X> i5 Lpw2y~~Ou)5GV2c֠3UYdE+PB׭_v?vB}7k֬kv%KL6MQRX1hР{ɧmXw-ffĿmv{ϿkJKJ*naC]y啌ms9'wr]Cݟoc}OKÉto?%-ݑ&뵗_z7|sQa![*p"t:3YeEY0i SJ#Hm!x4Rb1yee_,&]׭})iXLJ9WU54MSQBHSSS ^J TeBFPJYXTs :T׮4d(±pCCvJSbIOg=֞ scXŶ XQAߥk?1tZotpIdƘ55x\ӴX"'|B KK>mNd>{j$2/ח}|};;uh,Z__/0th@^~aO?tm]5\ӫk?]'QS[ (B )=z0M3BR|f7;޾~5+˹|KMM)]׫Lnm@(p县|oƷ~{-7w)rPFx,nR;uC`((0 k׮Һx<.mWBzՕVWW'Dmۺu6ƎtؤHSXeymlj =?/9։O]]]8V%?/sL$sre7/..zNv]P`0 0hNjjj≸”7P~@ rV,39e(k֬=n&K\s9关Aw/Κ5kԨQP~뭷^aÆށ}V92o][o:%{5!\n5W_ӫg@"24LKK)${uColhtUUsC>4c^}t><ս̴?Bv}̘1ʰ@ۯ5((άWx|ǯjLBē~a 1yx[n嘣:e*i_\Oȑ#G县\yoxO>ԿZrզ~_zn~}}ݷUUf5fM743gΜ<)/ :?ZjՋ/XWWg$n=Ui=ij6Քj]tҹO悀)BЫW_ZoO?ګ=SΝK/sHd{sj}j wfΜ0CcviʋGc \dI^͛z']kޚV]Mco^=zUTW۰Î}9SnEyX,#FTۺ nX8va5:zȡ>n$|De S!0+=ܹsgΘOƹ'N8IDHy3VZoeE4Bȡj#Fh6 ^fyF&?pտ+s ! O:$ JA ,a3kov;wo?<V\SO;)eqQQGH$GM9 .Y`KR뮼nY7\{C=Ln'RHm^w^qjk'w ǟ駟g~F}c}4d钉&2zvS~ M)!sKJjc QV\믿+ :e Q6ɇO+V^I^zW^z'}RW]w 7fǧ:|iSO=ACIZ|ygv3y䑂1SNwS|_~vn0n.2y3pUW\5W+++Ν:w ׮ƣ}_^N%ݑz]~}8_q[a톾V:_SBX0\jͽw̚9k㺍|SL}#SO>5hkt5+.H(' ;ǥ?0]vQkyE65<3|Щǟ:9e !:utκ[-ZԳ[\E,WߝlgV9?4MBh%%ol>ҒҼ>O+W,_QS]h 񺚺?+|cs[_P_jӶAK&hf ъW8>j/H(Dڕ%?O>\USi󦺆_@.=oRL8O>W._zǟ|_\|UUxr…_ur9V0!o- otB m(-.-((0)P2b NkZ]N?cB1zӆMN6P|rF9l1)={ܰi͍76g̻UU[mKPR\/Mn9^|3ޘp~nNnj5q S,1#l6lP߰fg}& !4ݼ^a6tneMԴ]dEci|-XW,E$_:MfϞ=mڴ]{'IiZ+7Iw॔:[1wܱ 8z4LCHI!.ty'1IBva9v\~yyy!!$I:#Ɉ$2i&7tCB7L;bw)d^^ޤ&}.k1zН02a˹ptܹkޞnƍf̜1I 4)p"0iZYS0nܸN7uI0I#'L74OuŐFye~w'xB܌ ͦ)K)'MTVZ~BHaietA?.ݷŽ'Yq{<~M] .$OJ)fQ)̈́1$aҐ:Շrumؼ?f5sGD6~={%/aɕ_0ipusFFwg7$dᄛ٣iVXTHo-^TF:zA !vDHa 0ᄑp80Ypi:,UU_ x:Y:+M cLq)x 2{r9>ݏ=5MΕ2=\r>*,~osܸqgR 1o7/Z~[`r),Laf[o |./7hĠw}71*0 uu^TةpN3 b1XwW1š ӰlPQ0Fj` \Jiso̝7_b US;@8'Y޾HuW^ n7'׮_;|p4Y\p.5]t͜w!EYqY=|1ƬYfSŦO8r??x<_~~)'JD.-:!4M!DY<㉇N,+hokBXB % +V8U!gE- "eIvza|w mz+0E ޖ3l믿W_3XA?xESg={}|EU迦?0}~17t~׭[N>?`黳q=_/RtO? )=+O>iҤ^z1'l%i7~E/QJ˶Ul[tO+:3f8lvM444qY#8`(Xa-1I/:#?RԷ_~[o?nu̅^x埮vG9>AԩS'0g^^&/Tf&6iU7\Å^򺘓X⡿?JaJ5GytͶ;L ٳgCy^za9N!i7pSz\*wvC&^|Ň|v:)Nsk7ޫ{qCۉ=LaVf/..vw~zc\oNCQai2 tIg}Ƙc~g "=$!֦nݺєv"uNvB1 #2y2d2LnY=ӧ;^!E"`M6iw )%Y1MFQ95zO$vsΟЍi=y_X:}ҠiڄptDjE+W mf=:w LT+J: !>; `}Vq9hj;&N9zXʏGGMJΡy`   ! ?-)s)${ݺtRFcQJ멮k&7, Ͽ|ue;jFٴiʕ+?&43zSJo~)zFF.]z%2X<O)㜇᝿ZeXR; VkVBc9t}ە9655sA{jjɓ;uj_wy][+79թ>VaBR߿W_~zͮZjy_nǟ~nĚ,,,3zL}vk]yuGvԹ]1FMj",,H)'N4}N8qw?_vZJ\r%]:upUW=c;}Gu.v{NRDj_F"R⃏>v4ٱqC1jW`(i9QTm`^<z#Gҥ ݻ"݇VӔ=85k~Xiy?0ǟ)N{uNw|ڟ,v]^-PB7lХ*YEYW.e q˴2^;lTUW5=oHn۵zs9]bCcGPF a$#p #oBzջ_tcz7zM2۫(T[, {&z}o,{<>(((׏E oSSSm}otEYd@@lhQ)s%ӯ7XEx,V ◄i%K?,b\􄐍6RBKzz{~ɇyy4=]SU#T@X1bn.rb[=/Jy4̕kW656_>Ď#}_t!)Єg;%K҅V7@)=ӎ9򘎼S)b!%eƊ[c`vߺmҩ &y~f~QȻ$7aI kbI,~gBgpy ۯSYR:pO׿o]n^[نit]oජje􍕈Yms3RMdԥm/}G>qEثvɭPC 9z .;حj9+W ڌi߃[ge}tu@0}e;/F8A2LP *U-bYN h7_ҩaJIYRTȟRd`f;sr_zIQ)Sʋ.GNnL!H۶-!aF(_bŊ}-8w~=3RBZ_}@z9z!oo!\ve !v^$+R:;0_3Aցn0IH̪c&<̳ ?S^r  ARPNLGoOg җk':RN֍ Qt^9Uǟ~|I'އKZ%P9Ebm993aɭ^)P62d[}- &|ǫ׬~9=uG}?,{&,*x;BKhNnɬwf͙3'Lu+ ̱uOLyTHsU%3f<KԘfw%T|nSm]t^AA]B≸ CHL$z)vE*aLaHp:DcIFqڝ66wSK" TR6L+i嚾R;!4nMvwޫEnPVTTL<_~u)>ߺeϬLO@LFceA\yكAJiz_mXw_~\w.M2kƢehMe+u=H"ӓ$MMoD%TUUBJKK)3g˯k5r3;SUT$@yD^g?풝njWUUs3n8M( QȪʪ;S~?o'K)!HZzHo\rs<`0Oܾ9WANH}e??3|̑Gičロ4qRc]c}n.-BtvO?NZ:Sm4kܴ$ɍ$ Zƴ]!{lt0H<cpw+ׯ;r,t%_Rf,څ0Ʈkbd2~N+vM h 6&풹Be?|"٫'YMx$Lnظ ` ]t eeenWGm3gδi{OӴG|3ev@@p+j* !r9nQB)k֭ƣK/]j}^_+oK9QЦ`ƍ'00b/siSF7<餓zokCA[o+Lim*I)rlYQYAR:jƎ۶};BkⷛMy`oފHk6̇|QXJi kJʾ]M vW iڴiӬ_*nkv5W\:lFJ|SNK]ӒP84t'M+E֮[ٴfBܮ|ߣ'I.H;/2y{xO w84[\V2Ux,_|]{õȶMlMUUƘuVtGs1Gu'X_W0hA@PFUJ!D:S؞K!3 <_>a ijib(i)0RZ4lذ⼕?1zĘc !L2)IٗշojuMuY4I~[kB/yDkuoX!?/}w+lJ$sJh۸V&L&E&T1b횵k׬]~}}}am%d]c]EyE)`rg+VDlK?~q#>}3ؼu3vcJ3Z. sʵ۶m\֮_[c/?5*++kktCߍA~ĬAKuB+U.!lNxg;W_{=`] 0oh\tEc{uUl?y睛lnw{_G^-]%*T]Kc*˜_@AdߍIˌ5e_bij׉R'/?o떦}˦ @Νt]ס/]_:4Amyk{wHHyN}㶂ڶI;\9mQDl)Lݮ ݡ9T:]<39ȋϻ8'/'&kv/ҰIQYw֓>9Ss9` x O9x b3t9Ⲳ xྃOzPCF|2jvN%5`wvK';wGNvUQDw$̡Hv-UO!A@ֺSJ (ԭBrPB!@$I (p^.nTPbk󩒒’Nz'{ŋrr0TJ{2c$"hK%qNHDhBi;JsML@Iy9D B 2z @@AR%j8;8b+v !Ĩv21;4Ǣx+\qIN_iqq{]~}<{7zk\qSJ=еk׶Hi+ݞ=o ;kӽG^|)mټλ$'^ z~91t/9ӏ%D@=ěo駟0 DZdrhﬥ]n׎,~arAbY/)(<ӧO Y֣)$p9Oڔ=% 4t۝i¤ͻƛnfJR$d㯔M7=^ה& D2;noJ3tN0] kEne#HIhcͧJHk5ʜNg)ŊoӜZ("}~.M{tAihhD# QD.*Qs|9x\ 5^?fQBMn(y# L=)!0[>_M]n`m c U_]u#;WޣGߝũ8g ģTennn'7M&Ya~CM$0'ד[W]',(, _{H)$,/I艦`f4[?'.83;x"iD2^I!.waaaUyv֭5$dH:ؾe˖Y9s-[ֵ[?\bÏ?t㏿kkmMMu]r}N-[2f!w.8hJviߑ) _ |՛@\XH3NB0ҫV @4lWBHMMM(j7j_JOCա$ɓ4dqX҄Hd3=sKH+G=Rx퇟~` )՗_=|p"ucz^,VVara~_{.yF{JٴNCHC:rHS,E##$R!Ki@(K튝4 xiY)lGJn(^oiIiUuiRU}47<‹Ͽ6폃:7 S{d#<8+ouaÅCw)eSH0\X,݄X, 2R^YZR wLk3йW6m4h :RH[ 8I#bA]BFѤTZg&LjDLJ%M4`5ŪcNt(bЅN |S)$Lz\BDDfc0٠CFйSmUۂ`AACdmm-,ִcC]DǙ0l.DDBU㒋.zT!ܹs lbM[<ȝKo 1t.I +/sEWm\V Ϋ7v%PG޿q`98|P$1n K)Ls谡g_`iG D<矽;\:K/4c`Zj/u HݺQH!6m^|_E+!Xk; c,OxvlMǛTMD8pD*qUSvfX3lHHO%//..և7)7r?"[ƛᇖnIsK{>JT՘&F('!A%4Ec Ӝ”P0$Lp9c&1`캡D|=cƎ٥<~ZڥySSjW$E*SU;'U)\纑44US5 USaDZ LH(b%*G aAA8qHʤJ#@JU`C0'h^ådӖvTUS5UQ 1쥗^kСC8j̨oꋯg^rռ]x99 PTi23N[vi!Z^zZh6 ȑ B hSUt1pWBuxʩ穪"+t:z,>.ڸqc~}m6[󼝏PZV:hH%dמqw.;]bie ՄٶW{Fd<[hDH$ͤ%K4 PM)uMMMQŔf̌ ""A @hBDh'h&m$ǟ0paQoA<iN=rj y_n2xNe~}W=j4S&pfRK)%q3NTb4Y\8ܮ@8v 8M] ÉXNli`ٙ=ǟ7LcfЬx<enqJinNnu4Nr CH.+U8}ΎgJ۽!s۽OFڼus87xO?u5W=owOK{Qz[nnn,{G/믿z/|Wo 7v(AjY2p囲qF]o$B6o޼ P2rDӥ C446"OOBBsssS!͞TyyyNve3)3Vt B#'\j1ɸ*Q98R-iMcu2\|Rj_NcTp+fTbrv❮B5QWSt8srחw*v(tWٹ|G*C~m2AyH!i"!!ncOK/Ok K ӿJ{Kerjɇ !v>(ܼ4w4_s)tNSJIN!!(nwxe޲іRє\r@Q'vQ9-{fi ';.O %K0xg|yW^qSO=c9꘎lG5{,hƞ=3j,)GnWJ!G *_Թ֛ܔLĵeظigkwكM$s m-ȞBzdO\lTIL>rTn5zbҲҚ\_nR$WZQ\T\\\YCʷXQF0opAQ;t}@w?v ϽpqS^{[oR'os%oHYkJb75s+ߦ'0GzEJkC>5h{:m]j.wEK oZKLJ+s8lv}qbٝg"4{ lIfd?x mI3ٶ 7e\xu;k[;:F&yfsMKJ@ BPK]*vD@(+W<#.#%_rKMl 4_r%[l7ƪk嶓hdХs^z^Q#Fu*@! ᥔV3#,echTVTW|9KUUg3s!#^wiAiaqBB K<Je͓RR*( 2TEBQjYeuJjB`9_B$ObrD] iXyc~CtNhĈe-z2556 89J,mr t1hZYz\&EwcDCŗ]\TT4y䶁%M;H(Zj^<` nݲ5 s;U I)}מ}٤bĈ[6k`W^Gyd^^16~`l֭;.b2:(d!'EΛBb!h%@AmX;ﺜ)GOݣŋ|2'O)G=狀vzO8 Rzv۴r5.ظilwf7PBUR ӈc7B~A[ kjjF׬]++2zSVxM3R$ B6 F!p+(oxr)B9E,:gf*'vRZ!v}옱~[oիooW^e GO9:zч8o|ۧoQ#Flc-[[Y~}M9b)ysb'L&r_Msx9Dzʩ,KQ9O0 Jg|>'C=hU}aSSyg,|۳'F+."M3ʈo=3_KeN>dÁ[]ܻ{ݞB_z雧kaio!p\^pqV֠viW.^8r9nܸ[SW~b=qS+,v2_ ފ/lr@Vq}h@[:L: V>ۨQVSS3'z!ټm3! SX}E7_q~MW叟}ow _%W]ռN2i?ߟY8ΛM}=vC*by?0dq ^l62P=蓎={ u O߮ثj˦&BI,;c9U<3} o:w*$$=Ϸ%Hەt*jqqi?I)uQc=AHQZ\zwG8ב{yr))ϟ'gFUQ3[R:v~!Aߘ-X- dW[m)RI  #H7O2ILB4d RLb658z~TƐo! 2db# m" F( |vo~&ǛөjSSq6ʉK@4y9Q=/}Gݺt{E D=B`Y 3k][9gؖ|sѷKnPBD]}epka~Խ%tDh>zRv8!tBBb1 %:HeFK@EWnRn]=gZ_sK&7,@Oꭂb3w&L$iRejT߸~s?x)y|v}UGt +1 KN)uݪ& |O*Rk\K.. w02YPXpЄ|0g[Ŷ: 㜛B 3>9b.v3=s1Ι3'i$<< #:ungwLJ 7iҤ駟NI!iV]S췞|I&X4=ߞ6\ )WZjժ 'tԥ[nO?tqaq Xr֭[ӥ9ӏ|wf/g^L'())ܹsT2H)Xf` =cǎ]ti:z頯te\ 2.87t׹iG5*/7o\'xRQaQ]OozAqwf}LӼlⲻN=^={E0L& npApW}>ښZJav\?Ν:_~?nǪ5(UO>(-)pz^vQG:MuKKJK.qن$W_uuN~oPBX~œ/(_gW=qYg^'i(٧֛~[ol%|k<.9į; :JBJU Q$͑2eDD"BMz)T: "خ9%TE@Xo.yK~u[$$!ĺźh%. "UUP;tRj2q :8Mn)u+&>mo3 ,nߟ~0E+KK]U% E*Hrޗ\_uULa\pKH%d)ME&oq20Zȥ4iTI?K %$H2AK]pUw޺Wq/>3lĈeEm}ظrr~凗'pIJWEsNEq[s8QNI^N'[*?]~Ȗn\?!ӹ3g>D6L,d~r;Bi_x͜9Ï?q5jr;q M65K?V{非mEnsK5y",K 8ӎ9TKgԃO=n{6sO>JE#:=rEYd/?aEqnn8m`wfo.Tl.S ${X/!,6(96f41fZ[ZvDO4EQf̷̘/]mww~c6{0vYdΑޯdG@qDA0EJyeWL=~SqNv ۼmy G %P)O8knےòWSQXh"+׬uQ&Y+?tLxWxN#?܊SbEYd/ >8δZH$b)׏QaYghΓOUڽԥ<%Үn[P8 F`vjow;hЦlv[0$]viB ޵왳1{W^{e_٘SxHJ1iTKDmw٫$ؾ,"}8ܴi?f͚t>?8,_|K.4yOgq s"W_{u]]ݻ{i LiҠMM/RAaԣv?peWz{aE^4kƬrAJ3=2~^^/*?YdE}솂:t(G}4+O70pm&5 ^H1e_oi2 o/!X)B nrUQH pUT!Ra J&T{ڡJKc4ՔT*Q2*hfQJK>cC=ZLH)c20V}Yd&vیLpM:˧Bg2x/| hMih8zw9`̄'%">f?8a$|gGw8|i YXVVuy!A(D~9IDATBe^m4aϤ F/ZL$?#G:JO_.2}2#FrpkR(*Sj+jk*k|r0t@21(cEo3n_32ےgMYʘ8q͛{uO6mGYd 090֮ZMۡnҋ;J8@ 9/++\er%hؒeKV_jwy*Zsuן?ׇzwM߯GiG>\wu\&* ‰ pD)Mym^" 59אK.4E|w\{o2x5_Saw.J^zKD-?n|4CbA~NFP.vVH]:\[i) 3f~k{E@r~Y^}pI']{JyyW\Գ DXbWgW6H@FlDy@bXX1V̛31HW?k6O0l+۱!?Uwr灑yѩ#""Ŀ ȑ#BbcGGG[\t:ݾĥ5Uv'lc6(ؔnS' :iɬqk'8dk?gGFFF慤cǎ111U$$$8(Zlegc^ 67-ú*nc~͏S* b `hNFFFƖTb3թgM=((]܁uV*Z;]Ic}W^Y';l5yedddʡS:(bpp#p 0 @%VY º_HGiNkҦ X0/RpyxEDjSZg&!w4`>ʨ(###SmW9ԓ+sѳʼ}Z(5;9;A-DvCRݶr!NILyW._D製t2HS: <{n /-!)\^?tk7C | h4Q@}>>~]7vX7w7@1fR4lаE% D A(ɠX%PB@"J ,d\<ʺW `ȲL5x)'{$B)=;Bh>>|L8emk{jԨE1.]~u#Q.g?yy~~}ͺrJ_1k֪}o ~x~~fMA{u0LJK ZWX*f-u`4m'];uU9+eN#Tcm,|(< ն5@ms۟T(< ݯFig``@KO{`4yx,ߨq#77MtwK;vQGFkEwpVev玝iwϞ=uٵg_>9)⥋^^7?q^aߩ}V0-"E,?22<@kNFFFƖT/R d0@ۉ 99 {׽Y^zUVEK.5kNexM(׭SM.]JMK!$8^z ^Qbb6f|̴i8KL_pᾃhT({9AW"#;#v}BBcmvص׵zֹ[nnk F[nne|{TӼcy%nVһ^FFS] y:%m,. C˺wŖ[*UĔ֫T)Ϝ=Ӱ~"uђ%KܜT꯿>c:2 ]آi #jxo Lͣo߾5k◆:rh^ bP$mӶUVֽg۫N{)vCutr@@]A%}+hS[|/###S=.^ܰ-3sxB!nmNۿZ٣ghPcvG7h qFQ0 S#ư7}yȏ9W^*Ne@עiWxՅwAEj LzH !d#P;V+dhyJ(qqv>}ooui؉^^Vtnm_Pe<|'(-\ޢ.^4ema{I ۶n?!>!V9r]vnҁ `ٽ[&LW"^Thx(C 0SۦqВ2:*9eq^Cj)G@d,b!BH!8@o]{tM[2uTMC.V^R,SxZUV88 %e##ʴ" 顃Tj7woӶH8wW.ZY3zv)5k\~ɷ޾; dܼ (JE;mD@J) 0LP>?.R/[MͺkN?dɒƌ  !7 k>s>wP8,[f̛#n"&owﶭ*JBHNݼ&;݈$2222(Bff&˲ǖCo߾ a͛7?:uj޽B9s}nnnyyyxZS5jqtJXmA$^%(PtF!(pX^K_d BB('|,R; D ~`ڱgqmK/ҿ'''k'&&N4y[k-rb47y굸nݻiuڟ\]bbbŏϟ߱cGppp`````m=GSX,J)%,"`1! m! MF`"X>b }`Ŏ%ЊjL&II8%U/I0 Fc,YVqg,Y$''ZTD%)FFF"TZd0ƍ'~l=vJ<3䏩SmɼBF"*رܹs}||w7-6DL~Dhbe~+:Vnfޱ*qy"m8wM4jBݺu-wJxB,!;tW^qƍ7l5Nil~۷oQQ#P^}f̘q҅߿ (Z%?1 IISNc>>p:bwn^}8jԨ/~qӧO?)(og7O>JJjrSk ~XCzu|>h0kGzr'>),(,(, Z%lkudd^lh*mQS|颥cGw}@ݺvx_Wz XNewܬ\Ak&p{n>x8_[Fٸ~(E{{{+UJ.\PXT֩ ",dEDLJy ,rPn3p'ٻX#FXaXbb͛6ߴeSnqbs|ڧΞq[h}%*{[T}" g:[?t2#--mܸqgΜiժѣGm Ou1=6~ﵬW׭[Ba8A䯿~< F ěB:Qcm3oެyaAW|`_zMlY&)F,b9Sl׶Uۯ>ϟ@"z'%'L  B1%:AGGJ):R@yP?SgN-Y.(./W9%C;rukcׯ߱CǓN,Hr" 8::?M8KǏg #PaĐR㧋/lsћ 7Op+9s޽{/]ȼ$T\cbrb-]%pe Wm ( ;?^3Q*..*^e&֐#SzxqKJ5MΎ&b2LEyE~~¢0<ǗX,H$ޡ y{xsv6̜L$i89;{yyJ![.jQ @ ./*(^er#FH@q9 8:j +_08 y4aaayyyFzY.gxeT@ T 6@JVFb X"eNJr,ŋ@Xp* 0 )fQ\* =D0b"[Is#!!Eu_vՑy٨.^4eY r rY^mMu bȒ* ϧ|sڵ!C >\22Ob%#Q蠔㺕K1WR'8g?uιqFLLٳgcbbVZekudd^NyZgy>tV9< Ժeyy9V yQ (bЮ?v5k,44T @))/P|ȥ u,rWm>KGƋZY/mN ~d,yf֭+[wg@u1R.zsk6-\- @ٟ֫sfϩYd2Jr((.8ߙZ:9::x(f3GSS7i .>QFX._S8(7hEHIq"j:utzݹF9hࠆ ߊ}붉"#"kh0ѣGCBZmF:oz^M YV)N֮`ҴWpk|KX ?o>}zРA ֺT Uۧ^~}1 ^d=[k\][݈#[E޻;vjًٙX{ߠqՐw\2)vFcMS^~coܸŃW36؉cnwp~T(GW7nJպykq^~^AA۷wQV-@KdJ XW||)cǎ?>--mΜ9g϶:22Ղb-r[؃!ɉ&jjؠ!&X"BBH57mڴkׯ;yEۧo.ai5kԤh%'&ǎ=0O6;9M:~)񻳳3@aZf̎;_8?i$7w}z7klڕ;ulP!bky_^*wM:Z-O?~[͛'ZBu1mŹth )1;8 hEQb:gᵃ7h|W.0>+# cW._1 ~ [- Xoo^#B?_]NIKS#DaDmoݪuC%M[6V&0 ;p;vΔ2[Wv>+^{.o??ܼyslL5xHX@nY Q X%a󆱣ǖO9!(c8#0R@ݻO~grH`Hڵt:oǏ6ib[ED<^ש]n ,`ˠ1LG{J vJ;1, Y DM dCΞ֨W]{8vy/BL .N{nA3gvyT/墷ƊX,g1N}5?4k p֍:5 n{ &RVLNjh_W  ԶӲo::; F!0$̓ ɹitӭ۶ܿƌse0`Bdƛbƙwzz:98r] 52W9LL% 26 ̞=[>wyTA1}JJ*v 7aQc9,FFyyx 0+={5bTP`d;t蠲SQJČ96hH EMys7n!]A&Aա}v)ֱ`D 'Lѵu-!4 TTX4q?R-޻wFtrΗFb+*gy+~t֜9so߾Yf͙3TGK=Z8%tb9%:(!bJE$qxQX_*3sJiɩbWSBәI0سCo;6nܸ۷o^u"r=xJu/!1H,XjS0 V;76R naIc.OsP[$#ؒb.mdE$ a ̬rOU  lU/RRRFܹsgϞ-؊BF#+V˰/gY)LO yy>[?tՈs5n0k֬O?P}DLǺK@Y *z[#bմBIq~rDE8A9UUvkGԿ6oL!2,٭KQ E& /n]Vx@BeZ!=*>3?8{lٺev̋c-[$$$eee=6^4r 7s|ϟ?T[pġW 0Lׯ?O\\\fߌGO3?{;;}Sv#,腢"BUdˀfdܽ}M9͉oNg?.޿mMW4gWR${puFb~&?g~󥧥YZcz[7ݻwj fϞ-[w%B"sǻ(Z3N3 U?SS8vyx&$7k,7/… :Ψ1r ."4b˅-KV-iմ~T}'&+Nl-:wQk vi @])>sũ} **(JB;tU㘱c5mItDL&d&BqQqTYE_5d9+2 .\p}O>d֬YV6>}QFJ֊Ȕcx,DaX<66:v_~*;RH01ꍂ^PS9xȡ:u4EH!˲ݻuwvv>q%7m<9 Dh0TTa1SABڵ|}nv` Bt$8x"Wa %͆>`R{|+v}LK2OֺN>]V-<y}1,\u֛7oΛ7:[w!kk-dd* {Fc߾}iQ,xzzO27n8\;yxov6L0Xڑo }'5=c+~uӦOcYy¸ ^jͤ&n7_׮Y{ێm(AAAO|ҭ{7 &S ~^~~ ~NE 77@ 1ߎƌ[c3iդC3c1\``LZZ☘D,ʹr>zz2O۷O<9'''&&ֺؘ 6֊Ȕcݺuǿ{񣗗WVVV]sss &b.7?ZrG%Q%!6 bX BZfZ͐Fl,..j Ġnn99JVT) nC$'/`4xfMzu2!+A,D]NJ9#.Eg4˚lXj^*\Z+?{+3_~^9ҵkW''uپ}Uy#خ];Fj*07opBr )Cq!9QdxԳKbMfMm`*  /sbX[?w/ w߿Joƍ}0ed^wӳgϞ={zBxʕq#)N2,`EEupq(*.X8S⊕ڟ'8*!vO?7aժU#G:222zlcB!lڴi1 x"~…NLOpOUxCc³m۶)SÇ:2225UՐJHH Xa@Ȉ(-̘8& >묿(u\Ͼ}Ǝn:ٺȼTHyMUVP1!0e/C 1r#Ő-AgQ Յc~LqQA;<1 5On]2RК⟪ptҐI墷.>ܽ{71TBvmT9ox߽wwa3ޝ)P k ,qC-bA ;w4b#9Pڽ7)`Y"a]n뎭b B #2Ebna8-m@9!.Pp)b_[)\|=cBru77N:ۯ\RyqgP`Xܜ_VI!6o':߸-"oC!1lև%SWݢ矶:9;=s637ѹ~NNNwP:Knno߶Sulq瞝_}Ƹgמj+z^ejҨ'%Z6?h̶-ܐXTyD}S]Zt`Va~^NLJ _N81~>죏>:222Ojj)W_{5))y5k43ߢm׶S'OKfdf3,$L -z ثaÆo|+Ƶ-zrssbG// 껻,16Q7}m䷼|%^.e #UYL}z믿~޽>޳:222OkLda͗}Rt2 lݶu}!>!+W=rC Bf9{GFE:9 TILROU1<T]V߱FyNtz[?b;o޽|lkuddd0u{JoJY V[A=MXREc,};߁RJE /'bPl/ u W;]jS厥XTyJ­h'S&7n\nn>sL[###1l?T*^eYs JZb,bJpE~,+E1-Me^%|!?K i>O/<ǎ0aBRR҂ d.#R- <G*{^Qnlj)q 0י5.},Ŏ[RG녗g޼cib2UeKƐg>TH_/^:thZZ_|ZE0?y|!.aɺ삵ȥ$=ɎOUx_,nnVDbbb֭z }222/kZ gV]jxHJJQ˲r6@u1~\  J'j™3guOd.#S.^*+:IrU?1hnEٱ6-WJ*&)@A8rȨQ .\ZgAu9|G1o/Qf*T^F8B( w m BKd><9r$&&Ν;ϗLJ>k6x-(,b8cŪ퍅p˲*Wv ;U_ 1h)o_WiW* ES߼w2[t2yķ&e-juCCC=<11qرsOlm.+LJP믭]gl7PTfUV7H gy___қ7n y/οv"2331Ʒn3,a {nW{mSJoV5nfLcgvvvI>~>˵ifͭ*=5[j0Hs]s,\zuܸq.\2e? Tg*G32QlݶaT 7΄`7&DFE2lر]w`yծ]QFޞ"c!ZA$F#ujֹq/.>!@]@(AQJT @H/U B0LqQqIiDO~@7!,buX,z⡾gݻwxO:u…uT/ŧU]A@)488'/?ElDTDQqѿu{۲UKH2r!ܼL,woݾUٹEڢuwEYH5[̬zTNo8x-EzTuï޼x+оCm6VW**.b#S,J"kG&Ny/~fgەr}x>+H睭g M6vK[k$##ccmnEDc Zjm ! 9qZ Q5ޛws-Ѐ %rquwiOQu7i7_~upͣ"4|_[nwNNK7ovu|kׯQL}|] 1]}?XrmmxgT~=k)z6eZZnγ>U/FX BSyz(޾ n]ծQ{옱EPD4d;]0\m.]sg3|4[k!#S֨Q#99֭[!!!8qGh葮>ޒiyCDpUN?)n|st_vG˗T*[+UILL%R%q ӇbFՖnЦM {{{SEon ݲXqm(A!RA$\4$ܸ.R AIThC4C.m8ŎODiQ ^X6߬rֹsWv}Ϟ=VZ#g~yy,/[Oe?)\۹lsr2[o{[ `rM6Eͅ)>.!e @QHsrrΙ{9V, xR%1I{6?h̶rWy>KkU\pׂѣG>}gϞ{:՝޽{;::Z x,';J-ֻj_>yz^NNNjzCҾ !D/y}$sJ)@zVzԶۂ `(R_br{ a$Bo##8{A$@@EID>J"VYQQFe`Z<)eF褦N8<);6<dH2Zg[PTrʚ58ެi:Zm1cwޑ׭]7??<&s[ov횽_oXR0p;_4͐!CN81x~ɀP{9nQrpp`x'!;wTT;w޾}',##c=եh$">P po0ج,?_?1-1-W;UP1L/LU<A !E,C`BxNKNC1JFip p DJP*UR@ycyJZNK]-^D,G~;wFDDZGzm^+ZxS^7 0BJ, >wܝwR+y% 0 8 9cYp˶-oFWSJ3 e0%$%(x?S-(;L~a? p3&!dæ ?s7h\rѼ¼=ddeތ-/h45j֩__~굒=`gFS֩[',$hbO.E("@ )N*~t=:ӦMۺuk֭wikuddd^H,ܰxSJ5+gF(T 2˱WG>y_~ 禂{i[Ԙ~;wv+rCGqɲ%Iw?RztΧ?X]Xlt\qRS رcF-VM"ڨ~]ZFNN*zk|-ژ; p̛7/>>~Æ :uZj5y!.^Bc&])m,\D dڷkjk /(.hll̏fzV3aƐ|ѺLm[bo,HHH8tx׍%,y5xJ:(^XIpP;WQ FDDLzsRq$/}PfYWoi"ӦMڵ[|y!edddx)LRwa $r"_?-:!1!Qkx}˖-җ^y 7h`ἅ&b2On~,W[Km3_[I0^5gVSI)_wI@} ℉bxp(@0HC.3bԩ/ڽ{wPP5y. @ Xꉞ<_oܴQ?BX]\q>1LR;ݘQc&OLiIvyao) Sd*'"%]3ƌVXvr XȦf9z%?@Zj5yPBt4O_p 2bJ'N^\B_obR2 Sb/ǖﱱ_5%Tww)fzR b&`r7ɎR:cƌŋ#1222ϋ#Xe ¬,mĐ@`!w_ڽ9!Ra)€Фy2 'XAJUhJi܁s͈m̅l&M#Nptt9rdtt!CB}CGX1cܻvZ:m^|UoN]'NjuFF;ֵ1#t2GOjW޾~T~9Q*Z6'+g鲥z}e/4>rH떭'M755n֔\]\A[fEOqƇ|fwE?,h5-[Z윋 [nú۶.[,qj4OOÆbO_TXx;q[7mY'JNy?6vZ/Oiӧ?F~[(P FW_}WWXqԩ-[h4wN:K.&Uܙ3gFuM… Mf鑑h4=00>*Bh߾}SN9xR\d٫^^{{;7k/..7Mt^aޝ;= ::9:u޽{gϷWggg_q%Y~~~_~{;a҄6m 8>ڳnڬ騡rrݻ\bޠ w;5%Gvvvq)߱m_߶m?X \m6K{NeQ3& p@굄KH 111GU֢Eݻh bbbn޼M0S"##S]x kYߑRn=:v(B ü:n]Q":{Q@!ıE`cb"m䪦6-4߀T)jEjڴ͸k~]7ӹjܸqR|Ҋ+ Ǝ7ԮTP*P0 bZmIߴP@)@ D$Bt{h2bFIk88zO>nnWiӦ{)Q\\<`TѺϙ3GTzdddok V[I&оC].!D)@N2QSPhPȚ֮c(sͬzE-~QzvzQA"j9'4,qnyyy)ɵk~u5j&N(**JNI ymk5oF։<]=6mryy`3hIEGy* $ddfiEM[6͸eۖW{_avxʕ ֮UAaW &LpUzJ4l7o|Ν+[wg̋m]]]ׯ!СC^{-++KWܑJ0qus=yd0~D8SJYWQgլ]o^{-~WtvwW}][6YÏ?LOK߰aC7_XP'L͛6GQF~v98܆Р7)Ҽ;ݸqm:Ц)6J˲c7W7ޑ'T*O/O1pN;ѫK;FFDN~s̙3Sn\``k~{Z5ZDk_ԭ[/زeݻW!!!ӧOwvvnڤ)1VDZ m([ #`:YLkqbyK P~@p7A׷lӲu!!!/v_Â܂5|"xı[4YiZlNC&'&D K{ :#AΝzj baPޑG6mwl4cƌ/0Ʈ ȔxJUF )[:ԴTQAahuZ^/X/7o%Ǐ13,,lɒ%&孌Lx <113hӖMǎ#@!/]pL9v#,pvr~E .UE&xzի_+ W,`H6J)C B6Y.@vZj#vdKSډgN 'i;7o+] 09{?kJ:uԉ(qvt۫h %Nk(݂'{m4===,Y2p-2?wС)ja͡ȃ5W 0P:=~Kg)ܹfdX/mҨIm ^ilakԨ1!O)_:.7r\_!6)J4gLDvZukܨXG|5apL7o.yHB}yJ?v5~x_ԨQCՙgS@F<1?a„)i,ڧ+Z , |hAزu6bKlvݽwcGz`6jب~.55o?9n7ꗔGɤn#E2))ɧr.-(,x#$$ݩ"zfAA 7Sl4-n8O3g|7OcbbȼXܺuK;99Zry2>&&fʕϳ7l?{ ۍL%ff~K/;AԌCnZg\qQFFb,6b#kӞ]z|!eҭkwg+:$~ =@r N]A&I|51# X#0>x5E(y5]Od.#2|pWWW[k!#SkM&Ӈm۶T-rEo2 rP^n}>^6M],d3ׯ_`}˖-  7-k_z{ߚ|1t} |7wme/ZV0 E`VWQB !%'R@:R$ %zyhooo4MFJ# ^Dz,0Ngooo2Ĝcloohx9d2ioM{mk e]ߥ, %x!0@PapȧPĻ#{Ufa9i@DөpBfԘQ._KIJt7klƴAW.\ǟ5kvn&'&Di1mҟز~hղUZJکΞ>nܿ^ڷ~{7w|7!_9rJbU*JP* B%WJRP A(MD d"&@!D9틻̜y=|D/ <3sݺuzyyQJgΜ9|ٺH[Uۜyf<֏`zz^U(fVV?#fI z(#F$%%߿VZM[aÆyxxZ  >77wɒ%;wܹ3t"j\RofO%ߴSHϟ?0 ;'ӦMC ,C -<0Q0J$R7 Q$*%J[ntjE:}Di A@̓RL_/=|7jȲ,$ V!6gwzv`D7ƍ'$>|XQnZz'*geT^eȘ?~LLٳgGu/=2/ :ZTDWiii/NHHXt)η~k,,,믿>.]Զ6w)m,]) :z7 ?A&zv<$N3~sp/q*եsD7NwzYkK BY<ʥ+ovD)Ҝ[_lΠֻ\ 6p.Vl-u떔D(1 Q ߍ2W&TTy>A9 ئjd1bā111|ds&NhkddA |Z#V y~׮]cƌyd/[mK һŒyO?_zW~U)8U:@MdLXF1 ҾٳgG& %h2I ЄM"`,&!,(lۓ.Y7ߨ^}-2*ϿШ5<7i$f]B0ٴeYuvqnz^#6&\O &˲tvpϿqƸ1T*k_ r5s6a:th5+V4aR-Ο?)~/sZ6eЗ#"E>$CpB׮]?p9JFF ɲe۷omofnnnyyyV{L s Zɕyet"CLDcPBAR(,`5Ŏl?O?=th3h *'5QITXPrT)"3?ŝa¢BİH[D0vW!JRTi0,bZVe!k&%RJV+)99ޮ:NJvHRns%|K'/vh|V!C~SOG{? !dѿ+BI&ǏW()yILL8i"VDh4n\kqqqݺw?/%+BJfMF"q]q[o޸P@ vc=;;; :^p !N,`A;;@E)9w'w fL B# FbT2JΉB 1,e1===]]bP*Q8DF ʊ7D^A@Z*Kz) ,0ׯoڴi[?2222O'fग़'b`9xѢ(GBX(Z!6`(`ayD>>Z5k>FX?NB(11q۷Qledd[䢷v3Oo^f t浛Wo\gܬY Hh"o^}v^Qx;'M5Z#o ޽{ۇak4G:x٥AT)pqp=bC\Y?%u_>9)O>CgGu1 =5jzxyyz{ n@G)%PJ!z`BBJ)!*t[rߓ!!.㔸FۤQBH,N!$~ !D`I29bn`Q@FeX}@)B^(f-kP8!@ iQdD$D}U+3,gϞu" 4H222Սb\qEJ˔naomסݔ S] % Ǥ-iѴifϝݥKuj>>Njذᄘ ή7n#Gu݈1jبz0۷aÆIBqAQ0Bsrs6nx%ø4jPT\;va= 7oݼxg쨱{^x~H]Դia߰~_;FĘ2 ._n=aX^V6mvB1 d\}:~ǟ͛+V4quk_<1A-V܍ TA!4mt옱~ddddl@žX"q  vڝ;wbFŸXȺ9j ;Ao@ :|jF֭Yҩg㧎 Fb^>Fqn5`?քeӒj׫222ڴi׾+ʛ={v].tCF(cFx勣GխU,u :c [xSgN'\ޢiaOEsb& b]k0F>ZԩWr;+W}=}$رvwܕHL3&LZVZfZfv^vbS(ҲThN?qkZmu"8tҦC7o0`[۴nòΤ;~xNF}FvS^z宲W+=<|W?}<4<;4W `=|XHQQ{yz>ux #kΑwx"b>]ߥ97⭩2C'###cK(@o 1!Ƙ"`˰ G|]_^FM%' ׯggg u&8.}/ǛB7=z4,,Ͽ&SܯO?7B}!XQSp$(#HiI$Ψ4]P^%6d$Pͽ~[Qׯ_M.YLc1:c(bc4@L#aQ"H,e |R^R Boydhmؒ#(Z) xw:u#kM{z@@4^:q,bEgΜFaEQ.]t/:٠^ÇvF `!$j!C}|}}ǟ~<|wc&;:9jVt+Igiu[wn5iD֊1VJmJWի'`A2d4K|(A u}] j5@yR?ŋb;OON (*.Uko߾z%g{`H>ox̛eq/edd9KF" 7PJUvOtɪ%_|1~ âԩ1cL0\vcG3!#wqu;;;__=zZEFDN; XrPٱv qvrӹٻݷ+}u 0..z_1Ƅ)&BSN>|}iҤI=kewB؞az,L)}`2 E %D &0ƔPHaŅ͛5_xAd󓒒~pMnEu"3漼fH2222ՖbE 6kl4)ZsdDBOjԨѺe w|#?ԐL0kA!Ab7Wגo^i?M5ILh4sqPPiBy;7 ˄0=gvQ^J>l8񜂃^3qv*;89bߌa`S͟=ӓ`2{ W x{{c`V3QHY  4qR5)cGurq253_ޮ7[R] +КCҺIT6S6 ( $8$@ ,`կ'nt;S@)К5# @ )Ak׏PhѲ""<"<"3NƘa5##"Œ*b`dȈ,`65#DSֱMG M7%@ Zl-ܠv;vm񄐨QPiZ+V-ZBh&Viۺ貮`u֍Q1Q6ήm۷LZnDLJ׫fI'X-.^ZU9 X T*g F`4.i#0#5/Z8a!BQyH$r QyQTZM xxM}{sǏ5@02Q=Wu 6j޻%Q'BrQ8PNaIX ) 9G|Aaӧ5: @΃+ ۪]RH@pqZxğ=1{lPQ+B*W!yZ fC'###cKȫ ";^-}|dxVLsS؉as-bAӦM7\r՝AFI5h|}|*hBjX*XogWt| }}}pE>qDx߳sO.Ot?6Q{)i)-?i&ҿ_WpB_?o :,(앞\+x8Ձw z~~&L89;k `a綝Nzcn{оm[qg¦9f^^5=ƍ ٹZ5kwӧ8oN^h䉓B0~:-]c1,"İe$4E ]zȑ#g?3?#EEEQQqQbJb5=)aA-_o3?YAJlN;X"f\3ǞWMjOgG5p°&|i,Ǐގg33ZFUvI1 ~mߞ}];^f _wHo߻wc[t;6d7hbCb,Y+ٓ$###S-.+x rd,{Pf5 88X 7pusIu6n`ZX\jФ5)6$'%2cF֎jR%"]jO;qX;. 3Wp((Xb5viL34SXbb 6 F{ݙ'&?ٷvf޼+.,V) I*a "XS[ɂOtuaÇeZM˗ˊ2iZfZAQA`WgW+UQak*J!W݃ ȱ\ZZZII ۚv!<WgאߒR;zlȡ7W7` [BR3RkjkEvCTWWWT!LdqBP= 4n`T5>!Va~$Bo  --,|FzvJ2v_lA~Ssw оMgߞ>ОCFPU[eڻ] $rk9xqVJ[KXT|Eb#>lxw1)Rz :pވ+ImMz#0`H$"1F6n81UiYi3 j݄%;5b bHC~0|Eb@D2 D@Op&7K`0Q(9y!zhdYVo{{ݴ2Km5! @ĈڴmSSjw5@J |BdQVSVYXIBF),.yGׄ k۶mEY XP\SYsڵ巍a h7f_Naszbԉ-Ž{.,xljWU^^H0!!޾{vsXZ~vRd%vvRi\D djjjxo{!uvrnm϶6A!ۓ#&XC4f<,`A,a :c#$Bq6\}iUsgV-__skY[^VNpӗNC͢NvƣPS ݽ{y$Oerl-^o:9 O/Opƌ>hŋ 2ùFYYfrruڥUғ1~'NX|5`Aph_}=]vPmm]!Vb 7TV9lܸqs$O,~ͭtLtttFFPdYX >>cǎ:td^^l˵)_Bxr@ oOh>lNB-P_ZZ:u7n==}666Gr/%IVX]f@ طoӧٳg=BP<<<%7n~Vݲe 2uԈHD( _Sx//7|UEg͚% /\V~ze;tT*- BP:4^V[^^Χ?~O,S_ BiЅ?C!0>>" ?C~[޽j5 j=Vεkת333_xhJÆ 3 Bi&wc00 Beee|zxx1 2ĴBP(4j(gdd~ݽ{wXXX*:::[X B j[ZV&BaÆs6!T(;rCP( 5'99yۄZ-:!doփPNP(-߽{sttٶm˲XΝ8C>}L[a=z[j BhYڹsg^zuٴy׮]ln1F>2G-ZI>@"s7m4'''s NP(1-ϙ3gȑ}o~IS77?D"1mҜ=ztƍTtnoq13fLMP(VL2=zgϾ˹)!))d8aQQQiicݻ$BM6)$BPk,BP(Lm۶:u: øܽ{$]_4y7B(_0 BgiA,--kqqP( E@Q( BP(V5 BBP( p B4}NP(DE(( X[ 4cߙ 0bkMP(M@p0 !!Byh{פ __>Z BPZ!S( BP(V5 BBP( W^@z-sWBP( OكOJJڻwX,D">0wu( B=_?T9;/^ї4BPuBzP(-BB0xy{HV@QQW<2`@4wP(* BP]} 1߂]3|,l@>i-pH3^OF@Z`-M*s ق'ʝ_ufBy8Z>sƌriNo0]֥KQ f![0 sugggR @ 8w\TT8ʕ+]vmQj!i׮] uRo65B;wZأAw-M9V8|de3ZW_9[lذaΝk΋>!k֬k)ӦM:ujttygϞ5Mرc T/]6&&܂<7x_~ h֫.]z@RpW, Ul m{_}ȟ oolh4+`hLF`0%J`F{ 5fi Ixer=~ 4†) O@` OՃ0`@rr!aϛ:Zcc-#kɲ[KE`[lJ D"7o'|!Fﮮ/_6ܶm[!۷o[гgݻ[vfJ oױBa-1ji;.hZػbPZ>P( B }Yyy9Ƙ2p{ʕ+c fl͚5wYbEuu5zCl~ üyǎ (++[z58c ww,77wݺuo񆽽= 99y!@ X`A vʕ@Oē'O˖-󳵵58dɒ~te˖b6nh.Mf<~i``y[o̙ }]zz:!6%.Y]pI{4%)))11>>>\ɻv 9s&qqq|ܹs_0M6mħ/_OPE6@qqĉ:+AAA?cbbPJ3/_ܽ{#G.^rW^yuɓ-}͛kmmmJ922q &5NN8Ѽ-w^%8x`IIG\\͛5ktftkl|Lua'Md)++2e 8k֬uݽ{W(uuuᦞ}sr̙cǎܹsڴiO?Zsύ5*//Oٱc+o޼BR(i!zBH?Z#Gܷo0-!o-H^Ɖ-֮]kmm8pcǎaY5ceff6i(ajNNNOn"8i&X\{w 1 &cƌ5Cp'O\":tw}wfϞmi}ݳgώ1н{!\fM3˓dɒ'NZ8${&kƸn2Ydo۷ ! }c>}M6oo9s~2ӧO=9 EEEw_Ǐ6oG~2\R,7o޼}vRRRvN_/[tآ CgѢEUUUC3^vvuFҼΞ={ї_~ e%$7o4Xˣؼy͛7M|ժUEEE<ͯf3gΌTTBcBL:~ISRR̻1E yyyrΛo١C>I?B7ٸy޽{gϞ?~^ھ}{Ks&- =}tAAI ޖO۷o_~tmƌ3f7hРv7ɃJK,Y2m4~KXXd%p޽{geeg}5 ܿ5V}RRRLׯ_|x:}S3; 2`ʃ@e'3vq) !##c"܂PZ'avNv7o޹soZv㺍9x BPZ%S( BP(V5 BBP( OQ(W)CY[7-) T@o#D41uu̦Q( o!D xkwc]c׎ivBx완K+W;zzeى'%%%?c3) }fg8:c/n}WmZPjjޝ{-^TP\wgfeB*sf+l&u/H8r^xG~6 u*^suu}JEKmM5-**~Y鼅~뭷Rk)q#LPp7?vs\h\*?tЭ[ZVĈozt>xUH |pdpEL &%K}uZ% 7eҔ/M={?O NKHLHRX^|09,4LV#bbbP*Y)Q(_~%>2}O"@w܉94zhVw-ڍF92}vחW{vBHNeefyy{ :;UUAAA [őGC5VaرZM[tTdJJJΝ?WW@߻˙3rsd炼SgO5VPz .^9; B ddgDFFv7Sn\t׫_~r\P0 sq{{wotf7vrdmtqBBFv ^8ޡ[njV[7oׯիmڮSNGUV9u&5-Ul!֡׸_3336Ү]=zT.vN!NW;;:wX[S{̬L Ett4˱6l|X&]KޣU~^~oIݢI$^o&_th48$АΝ;ܹ3//3QQNbXќ8zZ5x谡Rkiʝ /@.],q5)RÚ_!ٙ)wR&`-FlҁdQYՄ[)̞U]^ !Xܹs2A P={޽{-]kN'(`Rt .LHLٳ)Uרu@!1cph0bPvG 1z2aa9w\||aC9sAo7>G'99sߟT)_±_M4xXܔƌu֟.4pЭ[/)-Ie11r¢lsw}_8IS&5nN;~[sڝ .0 ?,^mhHF 0@D"V+N;vS? =5cȏȤ2;7o٦njMSzQS[s-O[mM^rrssr{-BC Cڇ޹_ svt^ZwCF45jovU:8e.;sTx^N^VV֠~AHhHQiQqY]] DQEE]Mi ٭Sg5Z͟BJv'7vz{tmʔ)5zhW׷fUVVv9MHii)wS=݇ 6j>}$$&6iѣGC]}^u?ًR(- 4~0 /WT:s5aaa:t*,.zi 6$4D,Gu":W_)))8~̄1 /DEGHm]9%T|n=Bۆ*dĤjjF=_~I Id!|IA^qc0~D:3+>*:jРA;7V:jԨoNx5Ѡ7Lynqc;w},ۙ"^9q#T!!!]vVV>d&>Q0Vmv성)eewxIܟyʄ)'L|vijAAA6tؘcF U]^t-`0tWZR>VtR=lmm;vP* BDG/xVf{̮̌p%嫷zyˣGvww77˱"چ9oϑH$x/BXV\B.\X_={tYl! EB(=#/'_z& ӵ%4捛*m !` |%&%^zq{XXZbaDbܪʖij5..ASE"FeSXZhr+++( T*j!$(o׿\e̶?‹666ԛԠ7T(d K%_xAYA1* c, o6"4a3+?_yfB vsv/yK?{q uN6m?]򩧷~PYh(++-.,&3 s혘k4Mii?L#q풓oݼ׮[:V/PZF`4=''''g'k5^[_ZVz m@K,%ύ )WWgGgddrS޾c9^>84Oknݾ`04LKO,,:9:^ޗe: [Ŋ%+ͱkwvrvpp1ҢҬ,++!M 6% 0Fjc!, `!'M^r˧N:vX!qkVgG;)_,dgf\]-d&kjkC TVT$R 2[-R;}?@FwqMqM]Mxp1cb$u1?w?z.b9633SRer~M1oۺÜԪ) R[b-A b0URRqBPN-UМ D bYvİN?]~ ~<=SN?[O?}Ν;K.6dmn}}hE@B0cee7s,Yr)S<_|w۱cGhPO/kIba߼J>G<791+E `F-:XPDZ|5H`=[/ ~3W/Ycv5Ξ3 PXD5ZF/B]uZ֠7̙3aGn޹v3 :! D&J^݉C!akkkTOo69heae0k-[f`?Y.\H( jkj9KJDBׇ;drР~b@h4vwߝޘոjb@vn6!ӭ8/3V.g3. 1!Dl!~秿<}޽_|E^}JKJW\Gv3r2xiF[P`мleYS9;Kדݜ8cYV[[[fzyjur%!DDxf CVv&jB}8ai2x'Oa{ 4' J eez==|>`4`gff<!Ï?T٩0YٻG4jMuUUBX\\l#lBFvjD  " pz!TRR"e2H "u*{T!-.-F \λ|"068fŕlٲeK><^ԣb^xcܰtRlٽ[of^^l}XP)s@@铧ܽ!,f1|Wπ L0&8Mpdȥ˖v !T*aaaz[lq"F$SBBC%͛{.GOMKIspvƬ9s|7/"R^Q~q K (UH]\T0 /|?qbdl<0r...)7S233u:]bRNUTP!zT'ddeƘanQݮ\W_?_mv0h͛+*+5xhT+Uh]vH.:hꕫ{-m۵o7hȠM[6#up~~aAN/_MC\tgϮ[.M-,011ĘkX=1;{ZjUX0%c[_q-ԴԞ{ ~o” }{}Q=e6lo' +3 !\lIvSM11[nR)eXQO믿&&$z{zصb8iԍlrҕ mܩs;1ʊ՟vqsyu櫥eדssG{뭫ם?V]LKBQF#$84X$5 GѣGqur'Ξ}{6ڪC9{/xk ;(-*=sLdర>,}hʝgg{{zBHX²,8 :qΑ)7Sv%K+++_^񒯏)^XZxp'G'C競} [ENna_(L|T(cbb>x wl4}t~UtB흝9үo?X.Xb!!x=B={ts#xxyTAL=EWT#;J%Ҽܼ'l !55zmրBi^$h9zc<՞^dR EN||nܜ\}> 0@.Aݜ<==mm}|}^5RD":UTegfWVU9عwQW̨S٩j.)R٩4:MMUMT(7Z:CwQqQhPZvwsOMOͼYU[չS=E ~#Ger_r\./-ѣǠ0z}@P@l! Q*;y9y"QώrU_lcc\RX קX,V٩ oqIqNNV7"39=&\tͨ| CcKe۶m-!a!wer/: Aff^trrw/*-rssS*NN>>>$pMeJ6R{yzu VKJKrsrj뼽BAXXB0Lb1}F1?3mpyyyVNVuM9'/;mpp`g'PGfS#F{'^IɖH$CmAV}v**++K$M}~\&7 CXhԦN(++*+*uVZZw:mΜ RTV߾s;n^8``dHF888=sVPHevaz><<ݣɊJ&ꕫYY#X5jגܵ3}cfvfMMĉ++* CP $((H ߿.48(;;[)W9݃/c,EbCV;wʝj&LRYY H$mj6A 4|rX* 7n p:t(*.ڲeˌ3Tvd&w!$mߖ+Xbc^V!zTQmE&>7 TSayC^rJK+gsMJP BV5o~՟,w/6M6^ sK krSzb 4zB,ѣw^|4!4բai8_7/ar{M0Ehq{4&?LDbhF5]# [<&-j{Fruk4eߘv.]jFLl^Ax ]$S@z HMKpuW7 XQ߸.}{  6 D"BQZZ"##*uw޵=JW2ٱc &!!ּC_hAVVs?()-A7w߾}ǔYbi$!~ !NGPݻw E4۲Q"ĖƶӠXXXsftӳ[Z}MRx^o > F(M{#G 8sBН񭫭ټO='y#f!G#ѦW^~EuʠRJ!AD(!T<~Ńkj@`UMǁpB@!S5@B0 6B xZ/:t Êp\vē`UA, x\G!Bh/ܮt@(N+: nE$n; pE*#j''p C!pۻ@4.P- (]tX`0 Pk`kJrpA7:Mljp Bw $w#RNrgA$ю;UIM@pY;͝w d5wwn;b w5: )D;q3]ʝ]ЙHzjB T"iI !@!%$)R(JRmL&D&$"QJA S(PPD&ioJR@uU5$T ID2 $?]r%7nxŗN8Q%N($  9S[ @@BHjs![/UBB@P{Y4!'SIU~%0@""R ͐v+wXJ XJ&l M,"/% ܢiEC,1n¢@JGy,]vHD4{xyL4GDq yx0-\HȇXnE-A3"sWED<żn0&Pxmnn 4HmP6q'DSNmϝ^VUtPo.2ꥀYMf 'wY…-D:vVqg"!J9,.5 ZpG;rrq)5wzQ1՛;.Ke0R)!x+wzz]"].]vζ=ف;]QI y6Bʂ JȐB*++Hvgp(']&2}˳pqS9,|KES8`uY2*J"/_ܿf)Dօ*C_r݃`􅇮ф.AfkL:k F+\@盙]V3L~ g[3!0l`'aV,/oxP8.P+՚-ZiU䊾%/inI絮d}Y:,6W:t] 8x|I˽.KCcy+ַnt੬ؿI}LIB:>f8NDzfSsz! u 1LhLz "3QRER8FmQUUj}lMF?Zx}@fzj,.<$.п,U` Q5"@nJp\Ʃ2èmVGdSH'f ʌYѢ2Dm E^=PJxF˟ ǤhZTncu-*oI1$Re%EԵJ6Zt]*@k4̼bp.Lr,Al*4UbIim7$rF!n$Ы8-@h8Je]FM8ʋRKհf٢i0H{! =H0"(-JU5Z %T4!EbTa48Iҁ& @'zA&w^wv;ѧ$T)ʎrgPLʼnŒ]i1]{܆wۨ͝iT;pgt]zEOh$J5GX8:p3FJseFq)ēakTv;ig̮ҮpW !͝EĞ.F'PKESRGSa9$a gZD@PŠ$$F, U8岐)D%HPArKp,{z&Xz0~ PEV u[Wl*0wɼX*m2A!=C9[eEd<3/gqV,]'ޑ)7 vͪ4C"XBuN X$E2 x4٬j<0VbɡpJ4͈uJͪ( d.IndO$ B??r p<ĢϿ{յqYlV RLToKr-k|t5k/_^eCapwôH$t]gLVYD7x2cNBp!$:!DpA(y9`'uٷ͍%f:4{=ҢFA%MB ~Ձ HN; jA޷[xh  @0YBTV(!D4n,]zRqv u D(Ŗm"^ZۯMBQCѫ ZZK6+6Tqg!hh]\GK;S^2ܹ۸kjBH"Ç XO?h.Y6ח|ccW\nJCzC|~1RR}xA ɤ!M˖\TuVIj))):\vJ8l{c> i=?x/;7m }.wڞ*2'?d%{ɯW 7C<_fmÅܿȥnּasÇs+@|@Kkdp4$+k.e!vYU# 4G3d8[n}>c|x8qtE}0{îw7%&㡆 GRoy3ǗHz}oo7S6='Fs|59EEVEۢ<jIX-!&( nlkp:!PU\ Bv!#Ր$x\EKfˎ .4p:*o¶:B% A<.$`Ɩ@l68ln^ ]YBC:@cӕXJq!@4^'Au9Dv;l4BQu  Ɩ*k V l6# 2CH&fAmzk9Nl֤=4N3;P.-MP;p'L ]"HUxzѴzv靸ڪ^hUo7yi̝{{ܵw6p isWD2VK[ ] voǝw6⮭kի(m]ܹ3krYA u02ܵt9w418 YmI;jzwi"љ;Ks7Q*b"Y2rD*!Dr"*טD瀊6+@%[,L2*$HO %BRtقB-w2x"M@(%S;KO:' B5tŔ?Pbx<TWil=GmlڴmK{ ;K/<ԕnpXݒmq{JMzX4hޗ߶BV * ^ǐ~MK/c D M}fe<Ѳe[י9X]&>V5u02=OzR[.*tԐH5떆‰W8ebه:les# fL=_O{GDcU1E`uB#G<&X8J hj 0|n Vi\v$jEMpH `UᰡZ`aGm#8ύHUx=$ m.9-9M . nÆF3-i͆\6CQQ I8@([78Fpۑi͆z[VF2Ac l*640s굡!ҜeՆz&w1!+iVv⎙;rQ=Nz .@,l"H$ufswr[&w4wYᰡ ;L,=.ڑp zqnaG].r#9QkLɝ]urȝ÷7.ga7}@)儫P$$T29DdjrIjMw WI8DPBe<&'D悛qBujSD) (fy9?rժ+I\f;(t*d"3\BPuSņ`>9kId$ Ơ6mx} !!tMxŒ,APe"; 2B _p1{go6e\06)}NT*;^7hi-ݷ, u /.M,kDY^$n-(EuCjyw[]*f\PP: LL=p5ksm_""QQ $Ýw*Y;ŝ,@;g*!u]z"mĝv6rW!ws8]љ;[WܑNyqg77wHP wR{iЌ6#A";W/LJmpgm.[V Qo6w c;Ý܉q87) ǟ es׬Wknz@$0PB $e!s#v RJ!PD&$ӛ}JLCOcL2!.IRvOz3\I[x[91Dbُ MY~X%=|nIiJaJ@`Z5]Hrsɝ9Av6fqgŝ wڸ94 {Ϛ(uo%%2Y~k0 /YރdgR PRIL !A@Tb\pNB Wg~7}'LW%,[GER"m͘;!KT:~AGOlȲ"UR͕PD FtXGc\7$bD2}2wEW^r^0rM_/ƻN?hÿn'O_UJi`7u⸃&t޷C h(q߽p;wʷK6\Uu* !q&NXXO^{sȒ;`ժ7noۼi^ &7x4uC o&1a܊M(Ljƿkn3qɟgAz≔%7;u~ -^-78ؼ/{́y9~56T tEij=m|oz'/~2i?bUTVo~0KבS_%~aE4F[caO* PCClVaQHC3PZm`edKpb?2{ E.i }kBR&Ux1փp:[}םΣIu9xVU8-( )  *ƖZp?-hdYIUzLasuďFt8r턖x{ܵ7'w]RCVBPᶵqW@2U]q;Nq=wzȝE8[՛;^Yܱ\CEAzoToOs\Ysp!fbdԛ]UkA2{.p@{.$@Y9[+NHю;G$Yv]CVqcĴ+/91 \9V;/ Y ^T{T|q"J qPU*$*QJ9=sqgxѳzM>U'}n}K%"3vB ~ڪZBBF") "$*IT2$C%ó֪śdlD!뽞bkl\ey+ʇzyk{o} U,lrftz Va O~pcSzïObw'D N$ݠp80:~gvP,J3'j ԁJ0 )*#%@nዾ,}zÏ鲔i35r]taW?RQ^,kڄYF(* R \N֒>J )"] 7bIjU^ Ev40 !.UT% 9B5Q 8VmY֬vYAM ED^ACju@3li4$ mPYl j1kzÅa0ۚ 9Hi[ IˁH6X-jN o"sDBm Bghja5'4!Iہ`dZxZ4й Ҫ^^y]0xZӁmnaOז6jZmܹ (PUƝ LZaa^{z{]ZQجT]$ɝ()jN殹K]q]:k3?w!{;H@U k.g̝]}+wfHs9s]2w,LhqWCtcivNrqsD_ w1 86N, jHD0hBe鸳D%.QB`Ѕ FBӴe !\"( _/ 'A2˧ *fyERel5*Uln.@e!  WH7%cXlw+׮sKLtp mWUc7}ڸ]$ ð ͹/`w MM}fe ;QGj)dq ҽKf ¢9MG̴*l8 Ha Dh|GDaymP%8U"Hj:, p.:QTXeԷsؐH! FH. q$p!MPvCC֚|.1-ʨkv$BPI˂HMx]@)^'8CcV6MA|.4DMjAbV͐ipTR: Lhlc(h/Ux,x.; ՍP6 x m 3zm2ZƝԦ^SYBm#T=w 6(w\#Hi:ssgZs箃z9=.C][ĝ4wՎz\6vok#NeO.Ԟ;uǸ˨7CuIiŝ5v.1 "+M'Le*(\*ȭB%JTnW* Q(S"}U$ITr%*TfSvS%޻#@@d@ 5/ōF #A(*=M潚FHX;0[:K " B%I(]V݃K;3!HദS0YpVD c Ha%IHjlG8͂X@3KPe$R]EBPdHpUp*\E,B`S` EBB$pکhFEXT0X4pIܪ$r (ZzNp"L;5lTM)pIr'IPv; q׵zwV/EjG:w˨[$wY(0 [<|b"4ߔPʬ%%lٺ8lθ'Fmd D$,G%s"YIEE󿮯$?6c˳9eiOڕ{S<#ॗ\إ7 θitMi*Qnp۰~岕=7gmLW}BɃ?.jQU3ɶޛ gNO ad1F(1s"5BGL)]J0c qȲ F(,nzNp3ڪK-ȉs. tJ)3PbsN1m0CnFl<gwq~;O$.+d*IT:B>C? |ycƌ ]-'Sɚښe˖oСwd}/rcSիcbƍ&L2w6R 7Z-nMNb)9U0ap#a$2͠;ӟ~Y!/_q.͛b^o裖,Y+QBKJMv'67 #h# _~[o5f̘G4LκrVz4CHC:$Xzӄp{x} r)'"Rk ulni/2ukcG-]裏667gnb0 O7G敌iD?}ʯz!ēO?yoG6lX${)~=P^V!l`v[-X(ɒt (D0d?c ι 1c/<|y/4457i\ӘSy,$!_04Mk9Udc,LbrcciG'{mhhB6rݞJ̏p6oB$I'O?YQQ!kInL~{m۶nW1RI.+"1&F˖-K$֯{>3u]7+p 6{g.k=ʭ+!˗.*֩M@IW\R~k֬)ׯrȑg޼y_WT$_.P _}݁`s;%IJR[ntЍqD.-oǍ ǝ0qT"~xiIH@nņޯ_x,bՊH8H% njҼfX"9Gsϫ NSO/+4M/FQ[[H&; |X_\YUձUUaݺu746ƾq͚5d_=b%K_RRnݺH$2bYY͸})[J,˒,e ,ɲLٰqeeeC5KQ[,Fc=G%g#$Iׯ_~/1 {}quu[ous='xbmmu]?<{G¹ <x 9O3 &~k#<M6=㊬p9]m<8.xWZY޻|BmzۙYe횵{na %Ç WUu…*Iҫ/}ёXW_ya`p7ԟxoWO??=\qs?*])p3@J,VԩSkj;\^U}_~y_̣zH2\j,Y'jkk̝3YÇ WVWи{yڙ$)V7mTZTڧOÆ֛6mPJևBWX,ju-[v3nbӳz=Gy 7>A-__glnjvy]^C'-RYYz* kjN5^3ɜ?HpK}`0X\TL@#=RS[N8_zC9ēKW,}걧dI}*]E)%YJLe3'c%t?$6^5*SPA_~ov{,[쀉\uUByh${濿+/j ,_Ҳ|u=C#GyK^]Bt2+VvbܸqGyIoFlgUU7\s*'yoN2\l۲{xiM#7 fPPHk׬}镗Ez_coF4ݺe᪪v_-(,.@Z=rS7\}g;>ȧZ,o<$Im&rWaf:t=3f]sޒ{~W#zXqa1缴Ԕ͛U?sBh,ڽaÇuQWYYbYv=ƌc94^8n[Tj^_.rM?hA>† ZB{w ^{yϝ[l DrXq94vRfhD~n1iYm9A3?/˿x$>DJJ4]\apOmU,W,Xpw۰駞=d"i. 1s3c1੽znYնp /?xc6l09O?|;K>{9Wd%SB׮Yj ʫqJkwp{ӷ['[{7yGc|fmv !l6YgJ裏}ٙaΗ̙f{WW9 |RO o猜Yk;&'C֘ǎ[޷ܜA:דZRsv1‹/4GHf3apc@ŀ L F$zFROF!$ )Ҙ8KKt@9ǰB_s>~~OIƙ"Ţ\Hપ=n*5fܘ9̙7ocO?]yS &`K/UX.5HH%S)# )2G%)#b)L0]苿]|w{ qB%zʩ 7s.ɒ0oLϼP?` K{_p|kpA ιذaoªZ}!+0RZ($IuAڴqͷ#|͙ dL|BȘ\{յcs'VuS^xpVBKpSF` B0\p Z$zFBKhL@,9[-ҷ_H<29WRVxuM%Dw as>jĨLd[MSZVzE+O IteEZ]ydș#٘1c%3|ЫWw:\{GNO)e3Θ3g΢E>YfY֣>:wn]5KHW sv̙yYaYza8c2יx]-((ϾliYiyEy}&3xVKioM:`7nܨj9nxUKe?.O=¢B!k^_~/>?YdB77mLm۶ove˖@K`Ȉ!}W[_ jkcfǥ9s]v5_|Ş#Z E_y@s}]}}u$IqFMӊVYDI!Ç r7wr>oox={XhF!Ġ4CK%SC ȣ\l0BpbgL<$x7ye˖q'ds^|ŕVΛSOu:_lوQ#Ə?9+vC$θ f:N:Ͻ\Km۶=S7pn?LOfZe8e|lRUUUUUuT*ջwfW_}%K/_޻w>n/^s߅YO)).3f%4 m'~2x~}1n/~_ s̪%N.+++/+' 7}fAl6}ƪ*i>c-16z¢Cyƙ/䉓g<H"?睛G[/H z@f~8K$=قp$L9N8E"|` 4h555,Kyz%,p{ݦKQ7Ec5C(z7%Ij+'зoiSeo' !2auys#!/__*s>iwXxYved,PĢZX ;3P6@,;3UU9VTNGNsdIv)}XxcJd2١ۤwmx71{~%#1rHf tU5j)x4+)yq'z7b ȪE >ƈvz9Lo︃) ۮɭ g%њ'q9mq5b6'BVYlŲ.,qCt4]hi"XvuCcL>} 8ʴ|z Tda׵CYyK$! 㗩dyB2+&Anuu7z9gs!w9O Ͻ+i\ˋK3#L9d&MPj"3lNmWDsOq# @H$KGg(I-t>gi~&%spUU^/\Yl#jK7L&]<#ܬ4kg3eiofFx"`! y1;7vLf=fM t/O?tQI}Gyǯ9;yZybwY>d"we:,,ܼzU/:"`(%oNməK4Db;.ч#a;:ҥ/,Ç "Qig6cvg:I'oRoZŞܸe~VLLXۑ^[Ѣŋ.2- 9S捝+K9J:Լ l] ?)fG8q.)TN]fn 2ș#aVovgOkc?sR<D/_7W"Ŗk?[n=`~x 9=({,0dC[cme((,|g?qM} ^vƎkj002s! 2#mUD$Q_[v~ S ]&2Z LO_,b6M@P\pJTC/ue2&?S+dʘw}'Mtox/BQQѮxJ9^{w/_|nzgR,Ga{޹+7T*sCkSOu]wu/\<~daRJTwDn!TR+_13Kkt;ȲkR KҚ)G[Dk+! уO^a=Uح`5~՗qܱǨ=o?4us q-^[]kwutK͖P0$ hU\uͷw"+mHSMSt4454M)w9]D.>~m4sun nPW_G@zK HTJ$Vi;7BH,[bЌҲ8%4H0/v/_I}wݷ]o_Zjc[?3x"NUU_o݆u04ØgIa=-M¶m*U$[vVoI}ݙ3gRB35pMZJߧ糦@0t:}hQ{657qƝVgW L~GקwvXﲐ$˒%ƍN*zLk~9cк]DW.v<=f116e)'~NQP,tz|RUd4y_/"FqF/tnԷoUmmv65\ppm[6lcO|ƍkkE~_}2y}?\UD"1iIGuO?vZN:Guʠu?cѺ SuE7R,y)L[vHߞ2~E As͜s(x4McYNb)=CuFa BD=H{ݒ5M֛)ssƯ*굳ea҉g |{kNl12|t^5]f횫f]:R([/**-ZGKVzѾKw`Yu9g_ve}{` (-ZTxUʆ U7ވښg̋ݔUT:zt]q_8tK\}7cV|}醛s=7͘1cg} 0}^yisM%*1 rtI7?ǟp|IqɒK.x"~||Y_x;Ѓ;g'|{.\pgqLisS  ǯ?5 L1fwٷush(JR.]l7ڐ.RHR^zuҒL&g]5[oGW6`[6f[񣔆";n|nγᚚX… ǟ\\X ~8WfHz'f+3ok"U#}:i_;F@x~GG0ӨnA>R5tIkW_O^>[nF4!$LOy @>son!9جz$YvMv}c4|pԹEfO)S,೮">xHo9c '<>z 4`H@ H5c / oWy]̰vrsy숻i*dԈQXrviUlxf *h49JSz0 IaZ$IdpCB,s`:@$D , [^5d";oejRJvdrʨbQ 0nqm~Ǹ/r!C6!9u*T]覃dg `{':,ћzsJ_fe4u, .X`%\#47z>h}Rg-u խn9!]ЌVJr-oڝMp3{@*2 O?M7d# $IN%TJc%Y護:jQG?ƛ?wJT4Qf˲ٜ;7$g R;;0a+ 6̧㬴nBd;sd*zD2S?6f 墤,O*GŽ;, σg{;! !8oW^ݲeM_|?,׈-[,\foq Ǎg|]s|^[SڛߧXq2xcVZOrpB  ,`qoin"EJMLfTCGܫϹ`f~ءG[_~ lr][PͷT@Z-dq z:8ٙ7v/Tlټ%LuE`eh{E N%|9j۶wOӵ_z+ i~tUeՊe+P5+H?CKsD⑺M6%ɞe{epǁ Ga/bz5:{!'YW̪P1)#_~gy'ly_zx|9ˠZ"H~≸ɅMes۹b36DcѓN:' Ѝ7Ӆzasmm|+7;7CsƄ*,,z$v,K}x08!)qcË! Hws. !^~e*kw@H@ء]crx~߫~߾-v˸=M<_菝{ᇢ褉.K~`$8eҔsrnʁJԫ|,|3Ѹ*҉8`bܽg_^veGqG}]=L>W?:~GsԼ]y !֮]+Є$ &P~!941;qL_}IԒR*+D%"a Նt+B1]=asweD֋D K+O:}O;U搨)'ȄzzEnM\vlܩZA]K]yiBOzR\A 3e-II`YeEkdCe 4MS-*!DtJ$KZJe!DQJ(pZ;d@PU]UW_!nw@ !o7'EcG8=&tnnæ [6myoyם{+k׭ݸnpwVx.pZd۷FUŗ^|j3vDeYˬ3阺nАA?L]h:b>䳆=^ 7^)' !0D=x3w9u/l 7^?h]Uk|-LHȕFv* /zv^Kwnʹg{WO9UlgM!0JyđG(S:Iq#8"g1l{G@L2yʔO\_^3~aN8?iD~U7e+:k֬1{}lc7ݼqC_}U}N[;/wPK9'`K|s]2^7 dvyY2_m/'!$}뮻zȃ~ewZf_kK􁖖P[o#~٥8s:Zm^!2jw«i}@@ ۧQ1B>ǟu쯎:6|6ig׃tp3Ψӗzkuuo׳5mn+Nx0t8d\R$*QH<*VF"as dI3d*ofg4np qklzա=x, DpF5x np΅n{ԨQ gs-k</깦& 2Ym,C `v{CC9[ooٶs~wl?I&<럡 vɧkSJ8NPʲ :zSUnL&bXH P.!PAII +U>% 0vi';\7Wl35ApݝEɔT"VN nd `Y@ `Cgf7(,H\"DyTj,Ƶ2!PdYvVs.ЄF8JUՒb)D#FjP!Kظͬ&4JnjGmQ- a l+׾8Qv8k'I%Y#-!>{3h /nhhUǥ?%\2W>CO<۷mݶ{'Y_2t'Hqjv2#̨-G|oo.#b@Jj< n2v}S b4OJ^xUM YLc6n5kҥK?L0AHo;BЯ[7 ` anA!/=SO4M7:ǻ's?lgEd_w-'ٿ|:\_@! ⴸZ)Dv?GWܧOYyY%V  !1vkϟr~H! _>s^guV=lD/ yjpRe( Ua$)ODQϫ%I`PW`hF*jil)..0bzQNAASpDJ8;# vA}P@crҎW^jࡃh,8jeW^9bԈX<NJx<5ּ޻_{O>٧O?qԞk೷;-gҫg{ZL#DG'w POC@@6n޽ٻ+P!W5H ^zKϘs_󖹟mllPWWWW_g4o>㌹[n#mi6t֥0d萫g^|ŋ. Od8Cg/ɧ"eVP H؁F; 5[k:D ٰ=k3fFUVk*9}26-06!53.82IC7'Vs̔ OIZRs kPEdasȊL: ,XڥlQvh-1.Iy1ș>iӾ]m"8CO=ӿ[]8o~7\mwRj pTЍ} -4I>|Ѕ] ("\g:$|پf3zkG'ΓO^{zn';3;ӘMD, %Y\G2Nv]g_}{{/ҋ/x@G n BdJa.Zӹu s}iݮ˯ 9 |gxiLoΫfl ݸ r. "eTZޯ< $ޚ@1 zI: aL9hJAa\ȝ]az F@>nF:x>f̘߰~È#r$b B}vHtәV0WW <^Z[:"J{9˘LvAYw.Ս6c] ‰ Lm^HT;wˣrjniB!;=v[r9]c董e6rqd\l۶A ң\n! 9fOj6#?@*+x\,Z[3g:ws6jjjx!C}VŚ#Nts'7\Ox: X)f*d:wi>g@lmA4gvyH:D4?ڍk[3Gζ@PJ͙/]<~a9u]WUuwW2]dRU5] '1HBh,SyN'}`0/ga-+V?w**,D^yu}M[Mv,X,ǭC̾ bͯc&Pޯ\Pb Jp)T!pe.k\s^~9Cvv'˯XrKScӯ;SpݰanώiS/IGwU;gL"+̜9sU :ؽhg2T˼@@ )etW%(),FP 4=,y?;c Κ߈aTWW.덮cgT7k3W$/'nܸqٚeX_PMw?r/[٧̝'^Kk\wu7o6 NOr sxd϶;ݺ+s pw{c*`qcpx7_{3[Ym 1q}#|WN{SJWXh/!y֭H? !3Oꚫ랝륅EoMM9an2n:o7_s. ǟpmZJ[rY0jW(..޲u˰A]5r#|)u/vv -tNo@ s%x,$]o߾BLY/?:lh"b'PB !-e/ >wW\vw?|xŋ?pEǙ3sk-~!G.))#v01캨<~[5董3;: .vw1! sns}`ժUDʿ^ =cWZfK.W^g1snw>o HPOuMuE%E}^[nфi|gЧO{d\'?_9\wnʤ'E"$_"yw .袋VwDo0 UQ [wI,CC8O !jQ_{ː~)H:%t7 6>Kq|f_;;]K/ )8š8T뾻n>>#WχY^V߮[{u7'~7y,s9ݛ9`7vDUfTZ\\ע?GvNk;XOsI_gw6v!QB)~!dA=s9 jC! ;Ѓ(` b3y_KxK%.#A$B8l{ٯun; KKKw7yf`QݵBҲ׻x~iI~gi;x N~0w9 gP1 m909\ܠ\7sq ps9י.ـ& Թ.fsv8\|׭ _́O~GyzE4?iڐvv˾hƝ+R' {My[@S Vb#Gy76=LֹO;'e~uغ!#<~Nd]GϙC+ː6s&h\ndWgm]v}y@S߉α΃02eR*QI%SYnnh=D[(eW #\2(gg[L%;g,.#:sV@KV\mSUV}\181~Vp2>>38b,PT\\$ẉm6[߾}_{53D-[|>CG'민e!ÆPްqìgQF]ګV_JꫩD!I'/o+h]Qw%] %<7Y*Sq#GT*vaq{}~cFH$Xv_0'tE%Esl7`45>ԣuuu6 d:9x(Jƒ[">rJ; Uޯ_za5U5W\wELzk׭}gR,E49C/,),,(dSme:ݡD,8.;/b[?o}wW*ʇxx㦍~iTY":c?t3]Zn>}'y+/^yꛯ n(P$IbYesft8CYmV.zԺNٙ{v7yF˖-3=Cwwc;i ܹs~wWN~e z*w=y(ve߰~;ӧ/f̙3-e_.=2tT2uigx bث~5H:ӹnLSgopsp+Ve=)**ಐ aԷ4˗#9_͙xDAߴ~Ӌ~EE 0 '|NʋjW[7o][)ᦦ+kRi]Gqݻ )E ZAPܽ8ŝ1" q?۝ylzIK|,s{ٻv3CE>B4'y"FQ׏-ߧhhhӜN;fgg5m,H~FD"H$zx/f>}F:mӧkSTUjTB M  `EV# 81 4 =Z* -Inz| B ` fcgWWa?~O !d73!(&̌3K˛(&ٳGдi %4# fUe8USemRJ# L0$vF1""5)iԩ;\uJeͫ7',Wލ9@"&bb"3*RDDJdK pRL69caw)kZW޽c>-(kVVMH[azOEPRzY;~7 k̰1>Ϟ:thzfyz߽w=z99"hKiQ?IN-|+Wlٱe˖-^j]=xi|պΫ^UOo(^";HY TV D""u[7oq` 0! b  @ tiǩ^^ ^/9Կ=Ǐݷwws._m6777߸EE꽫TWj>=(^U zw/+ĢJm@@7Bi&88تՉ '2222r2>zXXPkAv۹%_9V]} ^(^UTewwE"*t87;a}q! ߺw>x>47L諽nN4$P-k_gnӾM^ݶoΰhԩJxz)Կ9OsreOFw=+3˦_S?w”K ^}{ngoݻJu@f^}h=EQoTU]UU#-FFG.[굫7nHˈ^i+]]DHJm}mS3ӂq2aBHa~B8~YYRYPWB "," ֡ӌnɟTB ,`@u fiEQ M S^]hSR^"+k.0H 98:(䊅.466)erǏfegg+Y'&bd@D?~| 6"HDJ Y @N2u[lY4~y%[kdd4]WKW@_^./)-1663WR:WMNfE)_ب闗(ho|S<Gv:9<捞={jZ!mC"##\˵upK./DPYAJ& +by󼫓kZC1+mټ%y%V"DqNoբUfFfs#ܬ׮?n|@@o b7n8~/&99: ԽL;UVZyNtCQT}A?&ߢӿ4Q|ZJZm qSjo0aJZX{ܸqw035ױ`]=]s c&Eb-mBUn=eMRnݺOq5_һ oԞz;_Tq%ۯ/˰<ϳi2qD&Ϯc%>p@zzԯb\;Bɓ']j1oNMKݺn+Bo޺y`sC)*.ͶJA=tPv흝+5ްfj:D_k 8}t@@cCW:{͛7%Dع3,#a$XĈ-FĈ@@"a%,2 @R^8t`_Ev`ڴiaaau3ST6 qƪΝ{}sssssɓ'44TWWWerrrrrrΟ?PT/,}9. XLqg:th]ܛ5kvKW.-{ӧ-ie6 ĩMY߼smHۖ-ǯV5Mx2GAMLj˿-V6V37cjʌ)];vrCGCچ\ym܅C yfqQkYfZjݻw?g(zStI%`zjHbfq\LD$޹;9;@?_JWJ%)/!ęAA&&*j AVfVII ÜSbcffe5E,f1˲B}:^Ǐc!p|6{15k֒%K6o(~ /'n `e2auĐgIc ~6 Ֆ3 ^-i1y;]d }buut1BB!~UBxt:nɫV]~áz90U{k.&E8^T\)91' O|2 #%mi6JNj*\ϥ/o׾O޼}p!@+WYyA0X"--?^}+–vG߇}jiiݾ}KӱPT]\\322Xݿw'Fu-~ϗ駟^zUox/)*2.U_v1#q2 #1 "*&"Cgx Ya0XrU 1#.޳2m++F@)B$J0'""V̌ <3@ĬXE6DP$FNmTEU\RZm׶l۶_@*0ɓnnn>t8K}9tTäP(onek׵{ri|ä>}5_3,dX*+<%V8 0$Ps'B"HhJd J!Oxa$_,d`119 D s)y%+OYOxC 9 J9"H< 9/:mr5(77w'Ot8ՠ0V.WoUHzjNWyDoߦΫ.;Tz5%//oڴi{ 9}4]jo\UmEXbjۼ UۼhUۼ;ZaWSd2٤I۩SkZYYi:"jhW憩\M6w zGo ػwo۶mׯ_p( aR诿@<_gUۼo;:Dw oo;::j:jGUՋylijrjNNNjZj6!.^(178}8suuЮ+߮I]={k'N~4c ё^MRRX۵sW#C# 8UG)B5u<}ީ}Ĵ&WV2_E111}YráM 69yիʅdV  XD"ww]C7¢z졐*D999G/uĝ7ocKeee30 Ca#I[7owIc=8\`BZ~MYYof~wγX׷?,,\+L/2<,`@X$`@,tYX!%P _"7q\@@@LLLn80QT- azz:g# K 3@nߎ} ^4[7]{t\ﯴDAPTriCYyYŖ-R"x/++(JRv6,~6!J(@"Vء(E@T1JOG8T闷ӧσ>'Nh:0 ]}@ " qNNerٳ qν;Uk^ |gOggȒD:pqƍ7V')9=wmvmۉD,a1¢8<ݼ'O7Ν;]vٝjM B"B!|• e%eNx/sa:'<̴{VDRRRnܸwHQԛ bXF%!8p b(@:+R7kM|<< XFnr_b-Z @y+ +KQ#G mYp3!e*J3 G@`BBi@Lޮ];a4wG!!!9Yj sΜܜGlݺu_utuN>mdbFG_m۶bX,ku Fyҥ!C,]T___Qԇ&&))iڴi)ܼ4kl7k, [ U$PG_kJӼ#x+J(^4{5EBV$! s +A*^(j@4 hL=@uBZ.QOT߻{o嚕yyW鳧D߹s_($$$**_~˗/S_aB%KJKK9+..~Q͚/]TW2DYQU0V< r!JJͅuP m@)<6B P.6 5n*rE@ĊXwU@)"oO>bAN 1 1s̉}v dddƞ>}bgg믿ۗ" B|tk.---MCQ.뫜O8ҿ,kggjl @y~Ö w'wE8Bh@PHǐ;i;*"*''GTfgg ߢX[[=zPӽm]v޽ɓ'5E}hccc-ZtJdbbҶm[1pذa?!̚3+6:V_OsrAfffӦM>|Q4u-INN:wL;E4'N:tбcTI`hhػwoKKK//ѣG֮Yd Z27X0A-Gvvv\\\hhL&}jD֩S۷NQuʻ&QFnӧQ4rtvΝ7oܱc঒SJt%&&V=~U+W}x!U|ۂ R~E 9zDZ*MJLj.3+|ڧj~ހx`!'N矚&EDDt-44ST]CglN:N54?@Z;~2 c`hpЩf-edf۳ole˖,æd'+ -m-&&&ru IJ;^ YM&%%%ړBY0,7^xiB2}ĉ 8%4MkCچ|3@B,,-֞=kǢH_[Ȩ!79b}>NT :wܭkn$$wnYb/'^|]/ۈt5gΜ4hЊ+>عꄋP^]1c/^, [YYU۷oٲe…ULFWxSvvvqܤIj5R/&{Nty YYYvi0%]vf wlA1300q'%H|b &X,G99yΜ9u=nݺg_>11qƍ7~AN(q =׹KgaO>SNq Z4xX,./CD @Ba mƌ,b'$$@ȰE!ʥ[wl-)+7fڱ7ӿ! !hhW,i6nD-:˗/¯m۶:uzW5kӧ={k=zD#:]ߠ:::NNN)))U899 +o[nfffBBHhh}HHHNNNyyxFq~N~JrʕWƌS\P<\9 '/+ťv6vJN:ܺq~!%H$ҽKaAKJssrrX,LIKq2 0!clgں>>##e{8}bԨQׯ__yѣG,,,!䫯zIO?իxqӧOߺu8v &4nܸq]v^óeo7p3:ߤx¸9P'a\eyMxw# Ƙ1v &X]'<{!?Vb@PZȰLnQӲeK}oݺsβ2UK]]ݐ;N2E$ޫQF;|YшRT R(7mڽk|uz߻wo0iee5fM!={._i&z =w\߄%by'|L.۸qciis-޽wneeUTTرc&Nb MCQ몁!^zKxzzzzzmDZS%E ?YZZDO>d谡O&.JBۂnܸP*bbbRSS>tŊM4qpptj@RR###'O`ZVFQ]lѣǀ0+W\b9;.^8w\a;00p颥PYb9ʱ\DD @ 0 XQ<(@J,"xNՆBaJع(T;ڼhyT;лCX2 *SS̝#BB(99ڪFccYfS$999iQcd2Y۶mƏoh)~ ~cYt%K@G (//W*B]v !>^>swQ밀U@F aD r2 Ss0F@V ȁ\hʊ<ڹp]hSRjP\ "(C9!#d@&"/++-K.-}p3P%PDKD^^^Νҿ 5ںdk׮t8E1!p,xUVNUmTC6 +AFX BK!ZV|b|a^!;.1>%dffxD">&ȸW^E%E= 4322XRR2vX) 9^*џ8 ۇc ~}֍jKݺ#+2)1sXōB=̾jazP12^Ǐsrlݺ5,<X,ܱD[">ܩۼm; 7+6|:O+/_c BO>ݺuOf==JMxaÔcc5ܿ{䑓ânxБz7ޱuǹ紴L|r;?vX.Gݫ ׬nѲϳ~nڴCcČ5ͷSHvۭݰ6nL-"#x5mP) OP*.``J-*?UvW4wرc4ST@|$|QF~b.!A@F+Ziէ[=c=yyya7Ú7mcUR\2wC:ӂ₟ ~Ivvv}D~Ȁ!AP+OO'{'pEE=ϵ-L,lll޻ yxv@mvZfQa~!9V D ZjEjA|:7O>m׮]XXXNΝ;0 E}hoSO!U-USjwsKI[N> ҖhD@RYZ^*ђ0QJՄ 0"HGGg7\tT8P.//-+MNJNHJС'"X0H X ʤJH,B! .\|-adaia``L.۽{._"u@ B "#X겅҆ENh_MrrQnܸѹsPMCQTMj8U:![ an6T&V |>xnʗSKaDt1˽"іe U./ ypVZ߼>=3ШCO$ +-6n"\8cqs:wܴu wy, v7]WWAL}mlm01yxNX Pp1{.˃Z00z/yP떭/_642LH =cǼL.NڸQ{Ϲ9 ~[0s̐!R{QR?t~UkFIIɈ#.\',_HQUhoMjo1niS\1iL M_~rn&۶mi٦qƥelv vxsNOWOay++Hˤfff_2--M&1klgk,&W ?z8=7<q&TmXlv^s XqcsaADH!/S)a\Usb> @ Qw*C_M^^^Ϟ=ݻשS'ZUGQ [=^$:/pNԼjJ;U}e/[zŰ.:nܸ[nNQ M 43/:N__>E6qӧOw۶m&)'GĴ-xSjEm^A>?/?"2Bӯ),,=zthhP3o``(zhoJr-p_+-ݦXnvmԋk|;JJݭ:u~޽WXAWDCᇪJc C @ ~!/+&l ӽ6 mۨ?PNs7ԯH=歛k٤GgΝ15ҭ &,b[4o[7nϞ=!!! 8p#(J`#O7x4b#cSnjȮƦ^M gai!ܹs/ٻu èW-:Jp:::Zڭ#GSo޻YZVuVA5k&#.]_DV*J0*+6k㢕25+H\XTz. 蕽{s:^a7t={mڴiVVV(͠ aRE[^u2񬄵il1"i! EH$en#w_t'{u!D0@B&iSH@Bƶ;uB"MpCO51","==C,uܩgmڵqiai^]#F~('r[Smݳ7AFNńi_QwJ5U5UU)2lvMNN633tDEiM pY5']4 @beǖ<KWX !G8 1Htu d Y|tGoBiûW^HKӧt좣ٻOo[KkS<jI>QppqP@D$6~P^"ұK6m1N٧CHabn;4>yzrZ2!DK,Ĕ9BH !.ں: bt`wB7M4iҎ;ڶmn:{{{MCQT] ...FDFFΘ1&@ujg,X1MG8argddԻgoaJ;__DO*9jW¤up h׮]v `x0<Ϸknܸqw`u&L hCH=zK.`acƍAaA0&c!LuСCwݴi 6i:wMœ$>>>7ot(fVg*fV}7a\oכ!J'SsazPjӄ3Q T ˁ" {gǀ rc JU"(*~63{G{!p,8`aJdINUl_Wú2ݷ~{ȑ8GGcǎI)]6`B%Q @.l P.r\HfJQUy@05K;W @!"jwGv!"p""R ///B!'{smH-յMLLd4%K N@(j~pႻ{LLO:U.\($xRIoy n޾U/7M=\.?p9z<ӉwM~>4|Ç ?gdd 2DӽnbbHAF52$N7o޼y<==nJ F^PJނj?pB7mT|BBBTGU7@W)2L]ዢ~…vvv۷o]>}Jƍ-ZtDEWt .???Ν4S.r!!yyyyyy ?9rDӽZbŏ?(jԋ>(z?t=z5GrE1~H>Ei֩S\RRBw(zKY555~8 H4#zc }(əwPԛJJJOKJJ QFi:(Pc eY:/7UouuuٝEO} >/M9n8MEQUh>8 HNNwހN(jMdvtaښ(꽠 jxONN^bŒ%K>|(/੆oʕSN8qYQEw4S ޽{SRRfΜioo߷oÇNQ&xڹsĉMLL6nةS'MGDQU{hW/ﷵmѢ(U4S T*uss+---,,۷o(JQPPS##4mm%KB>MEQ4S^NNŋ{ieeP(꫌iӦi:.(MCT=T*7mtп{{%Kh:.(ͣ \йsnݺ;HAQE 4S… oܸqQAQE!4S'O(Jmm/j:(:&x~(,,LMMD"]]7nC5EQT]D詺.%%֭[e˖;v(((ٝ(El޼RD☘;;;D(+ZEOiRZZZDDE`` 0J...4SE zOiFVV֥K-[vuСCf̘() _|BxUVBBBo߮(mܸ!DWFwM۶m X|9 &&fNt( 8|pBB_-ڢE6m|7j^VbT ~V5=ydܹ,=z4++es׼ysMGGQK۶m5E»&7j/5!!!yyy¯7oh={  t B5VEP(ƌZ֬Yw! oooMz'sYz50O> 6lҥYYYi:4%)))\j,'$$T//~2d{MLTܱcGan֭^(JLLLh긚Iׯ_믿Ξ=ʖJc^Sƍ"hԩ6mph"???MHQ3fM@QP >44{t_qƲM6 [F9aMGGQEڻ&'N;600pĉ<M4Iӝ҅ Dzʕ+m: &bMHQEwM„1-:uIJG-Ν8YQEQo]Tm_ti=0vvv(U4JRX|B8cƌ͛77zzzB>QQQB](CF|]tm xxxBo hv(_'lڴagѣyWo0h g̙)%;;;[u3XiXffҥKU]&-^R yoSSEQ%KCܹsDc_lRa˗//]TztNNΥK._\u0L!w(z#u.:uJP?#&O|y7n033.?WBԩҥKk?'^r+œ,ݻw?Utȝ(Au.zTf-7o^aaaGGG]V8kBH.kiiL:U²,ֹOQE5u=TJ??YYYݺuS!/^466ԁ((uu=++MGAQEQW'EQE)( ( )(Oµ^NQEQڭ?}Z')Cv6^^;EQԛJeǁа&ҦM}f|`M(ed+~>u t(z;ZSUO|dEA4REQTDlm yY#4VSժ%wAzk(@o*BH=o 7Xӱ<:})uNLt}ѡJJj4_t? ֎B(66E<ewݳgO:D"ц ƎWu >|ߪU:j2 fggWR)˲7o9r$N oݻ7qaLKo?T >#..L)D`,PT[A^6qb-m۶%%%"իWh:ʎ9~zMGQ]v믚c>}͛7k:j'O~aE*|@2E}RS[݌J+Je 8Bl5XP zῦxoKaÆܹsڵ<73g~]\\xӧ{iTGgϞs! ٣ү_  1aBWWZ,::z˖-K0L>}Ξ= tvv0`XHңG0!VVV{,&&f?cJj/GEE͚5pƍtMBYYMKu[lYpjݻw5k&zڏ*))i…3fP_P8;;7mT+''G"xJKK'MHNNvwwNC5jbbbΝ233CCC]]];ߢU'O~~> <<\_j?Ҳ2՗WX8hR_uIؒ'ɒK.i0p[E_'͜9STB۵k7iҤ:.@ B?sL {8qf;qF.i\YYǏv qfJ#R"H[[QF>BωŪ2444??ye'OܵkZ)!!\N4s窮۷sΚpG.]JƍcYM&MSYrrS!>lĈ꥔FPܸqC$iiih='%%Eynݺ jggZ$$$lݺ>hNQSz]Pv Sv9s,ZHGK,Q .] 2eP¦Lݻw055o|}}U9{ؾ}{rrPtҩSj8Q+dz+TU&LPߢ?3FG>}?^u:qħOU#o߾ E.+m ]jر-[Ǝ;nܸq ?iED,~]=ܾ}[a;ꟼk,jBTI1b?y湺9RE=իT["##R)ܹs??k?w~ o'0I%%%_b1 77711QQQo^D"qwwt4w˗[j%~t+<|BHYn]![ B5pѢE]tT`FFFt;;%KO i߾}WF͚5 cpĉsN:>}zYRY4!H,Ž{Y?βklDz,jݢ5XbP\!kH_R(ߟ2ޔ)Sx)d"a*AZVem֧G  N) 0գ_Yu_PTlٲZt*Jˊ6l`ja:bk0{wmӦMƍ)^p [r_gT` ߲uK޽! 9!D(Tl`stiÜXh}綕ղ%2f͞uСJEoaH$R)P ܺ}R襩Ӧ޽}ҕK^bEoSۻ艣2}|UoZBq#etuҤI.;̌L0۷jW{͙=W^c>#U{W/9~f钥Ç8p@`ԘQݺtSdpJԩS;v(+/sprvN8RGiS988 ݴeSYyAM[_U=ܜ_KwI9/*JLHҢRC3φ֡}UkW&J9߄υ+002PgJJKwIRݷTA?lQڴbX&##cϳXdjlasWɕrG;_Nn?Ξ5[{WB(!1aݻϛ7*#59rHVJJKDgdX[defkh[KҘ䴬&MtueҰ-ySTUB8m43iӧI$ڵk &Qٹٍl7 eSRS ^^^v?<{͝+C9…8;&͍/בGFD888g5 l`0Lltl\BሩAУGryaaaP`BxI%l;[__akW?(돔Ԕ|lnnGrqqQϾOcb[{{{\p:+;+3#3%%ٸQcgB{::AAAfffEEKK M }}LL/haiQPXg\~Nd`TTm4i Aaqn揟<\A P0B??BHll,b }Z&+C B,+qq@@XرK.,&&&*9eZJMfdrYܣ }}}7V(C9&eGwh,=#k[n?-{mݶŪҥKдY .|w#Gza̓_trʗO9sǼDNzز*uuԱO>zzs{]LHݶcGw عcc};vqg6l6bXn>..^tw?|2G>b~ :y{5-))y{#G)S'OW}]}!Bf?--) c ;c捛Ϝ9s&^M دwaÇ/]T'23>yСC7o<#3#&&F*4~ҩ30_zήNԡ=<=$ZŲbgU={͛7ꕫ-Acǎ5+ffm[mo޾ZzZqIO8ˏ=~ Eu$!QO<)/,O3zL]fϞ#/'[朜;yt*N0+HJIrrvsuu557ݰ~CjrCrZ򣇏F7o;+3[65<~ѣ/]4QGG37'c]ZV*ykm߼t=ApՃZ["A!^zY ҢK/38//aiS]|#AA%QQQ;vxVV2SGLLΝ; M Ojo"z#""fNy0bEՓɟ%]<߻woHs9HG}>STZo>'x!~~ZZZ bO-fEEqq Yp3d-ZvhaʕBjJ_OSHU+WuЩCFFuXlogz{zpnࠁ>JY̒e4iР{lgBBfffXX"ӧ2]]fme]ZRخ 'i&WPPƚvɳ#Fv$"sϝ+#G<~8b,R*YIDATekUWScS;tش~L&ce窌wT_[n}"wǏѣGm"Eܵ_~AV{nA~C;tO$޹{W.FD:}e˖ƴ#8[Q[[W^NNzѥ D9~ȱ[h)dz~{{y9rDG[㼼$>>>a䩓YeXF P*Fzzc k$γf+ږy##=ݷ>BH.oܼ1.:ϗ1 ?#+þ_177ߺm z|n/K.Ç753vƷ,a;ݽw(dF)9'Cb81|777V"0 w ۷oETg @ܜ\\LML &Ei[7lUR>1Fc#d Ƙ#[qZ?*--w ^QTT㢣KFefܻAT* !MڱkʥO &&3ضe5;p@CCY'g'FL&KLI012ax-TCZXZXa&`,۱cǴԴo S]@Eݿ̉3zzOjJoOݴa!M)S.C$$`[jE0,D%$'HR/o/}#¢r" aXɵMosyy\WGQ# @?TC<3:..¼m;i땖Bʊ˲&>,*)cBC y6`bl1.(*x4#=cӆM`w7¢4OCT*^I˥Y˃a]v挙AMT@S/]4k,7[n3/0{l:ֽ[ǏOOOGcƎz۽jvt+ itң~՗6- $! @"H,cR̈ È$"L09)9%˲BmP-_<,"\^ceXD"!Y@E ^lM=vlߑ4[Z&vL&Z`/'6iTQg %y^gb@ VBطg޽{JJJrrrtut'Mdieq}ݻ"@Bxl-O?ww#TO/w7o^-8t`ry7|ӽkؽgkY1 9SiЁC7no֎T T>F!@ˊchlhd/obX}@"!`0 @E@k+k}cZK1fYڭk&&~y1bXH~%%64xs'!LNHuqv9uTN]E@$"Bh舡u5mlmz_HD"sm]R(R! 9sJJJloΞ?+$xaJzʬg޻[GSPP \$h!-Db`dħɸ1C:,S#SIfz1ТDO[O,B7737526sp0#FbYZX߄CB0ٯ;t S EBe k l>ӑ]۷nC!$MA>tźm\1aBHYiJ0( bBq"}5os|II.PA0sέeK˜p)#fKJv Y%֚1cF; H$io]aNĿ/p!bX. g!:iԨӽT5 b<=vNNIvvvNNLvuruqw2S2]=~dbߤINΥ$&:9:r rut-30/ȷ0pptpBAnedtw7Xx #›5k-./+z 3364ܑ޹oX/y"ء뷊M-MD? PP0:*YP\c[6i0=8qDK+KB'$CxW!mSOffSag ^Hy{|r%ЮM[o߻8ql\lNvȰQ%e%Cݸvc_+X=x8:9.[Q HaR!"IaGMLLMJS=cliaS^^Na0#/Bap<曷jnoc|ظظM[6\je\\\l\lB|^#Bɑnߓ|pS% +#iikSkH5aznztlڵi߮UGqBυ^v ?&@#vvqq99aa7o345T ^3y^OӊK r,721j߾O:4]u5q׮|>=35?p5=u cLga۶okfmaG񞁞 _xճBbbee2ƸcONX !V^^^/^p 4 irڵ>I|!!y=ދwԩǏGDFGED9}毅er%P޸ucaBsLT 0YObcxaZjZA^ʕ+Lf]z-:.!mW.++kl'IwyA b}aaW\ 22523734)))1s;BO>y>IZjj*!$~;7ܽs-Zm՚Ur''7{^|ę#>ѸQc{v^||O|ȶQ;._|AL= կwfnXtы.^|> uޯ z#G\j[wNrrv vuu]zyDdĵ=DH@;D"QP`cg/u޽;wlj fݚkw<{5/P$ ŭϜ zjaIL^!$s9XZZ0^WWOhi,-υ :q`r]o???-˲S9|ћod k%?IիWYIN=ulng$IQiѴM#<FFEK䁁bPTU(ǝpK.㬬, k&M::^bÇ:535tSRR||LLMT;424}#汑0III!mCdrGmmfME?>{lDd[떭#"ϟ;enb fDEGW+S--,۴nldl(!?ɓϜNMN i׾X\ׄsΩRS ϜȮH,z!<"|u05>>e󖦦H|}}-l-ݸfؾȡ#ׯ^y_XY>zu$:gΝ$-ZHIIqqqخ/^gll,Th gϝ GmG.پm{éƟZ|w+!h/,|c4V*7֍d#exB{P>(#_6Ϙ0>D D_T !p|ul+5]4tkKJ$IĆ\,v֐T\dPQǷˬl@,~ݰaCnsGҫ*ay KfZ W3wrɱ> (m0NHJ7 F`ɚe'n"I/dlCWC!b0 cO/q Doܐ|\|6E~51%MU#f.s |># `$ KҰStľB$H#[o8cݶ/E/g^NgcA!tV `L8їwE1B#0qok=;eo K _73=oW8ݧԩs1G_wq^{-? ٢5rcUYdEYd<;筻 Ӱ~ݲ2o3o߾RmTn\#:sG\ϿcHyyuCTPP@aB@1 L2F^~1J̢'ہhT 0H4b pؠBUOˎxRBa .@)_n=9cP[$.a@nG4Jw W!DeC"`@Zmu F(mt_N iJspJ4ʊdr";n|fO!ʢ/0B)U2 J)M)SJ! UJg={=vד:a0 (U*Ytӫ7WQBB2$>Osj P?x%`P"  RH*)\$?<ҚZᯖuKz=J?bIhp^nSX, MEבKpڅE&r|&J nH"=2aPÄ-&4 E(ב㔤}."#ǹ`IL@dG&<#c jrzbI5sP$60&}\Xu@w;&n#$)Bs1EUm"=i㜷PV>g PF-U-Զ@JJ#"#DRLeAeRP J R UH4B8*SF(aI"9x%o?kv*SBUH* 2P0&J$H.iEB!S3)@j >zxMb]%][4 @BU{UEԌmV>C9kq#5/:`gA0BN">7RUᶋP$Ar)(6l9 rC;ei?kI#$\kV! TUU3o ]Jr SW?ZʻQCȸa{([I,/ Gt@XMc$ M5On{tC-gRQP`)zx (Z<) !XC,E(/K((quR^DEvENIM3icLxPa(^@Dƥ۩+@KQy3exCPI(c U 1-nimMyfj6ɧax(Eړg3+|$@Qjpʉ$JFTN"FB $+W7gj)߭Sk(DѨz\S'=;/>1"9zL튄G~/w/g|딀R'4fOfRʊs:`Ĉ\{~\pӝо un#RPUG˿>QSp-oO-W\pS-a O8zElb7}L|%z}k}^z._}=v+KN?q̰~{5/^֧Oޡ W E7[ݢۄ+s=UUHƦ4:١X+0mFuIPzɽ͢{K7]C2/Y97wW9疌Vb$V. B,ǫYgwjǟo=o]tsu7nx IJ\$v鴣 $Uu&NIZzbC5 HD dI6>DbĠ2׋ 9h n;Pט"a Cc3(CY*!%|irB` %X z#ʼ4M!ۤ˙"/Cut.T46'-A81(:|?C%`I5 Em@Ҁ!5 $Q(, oIPBPf$u8-䒠9PZ GY:<DiFu+y}3:iPJn%AҎ`Ly|u&i%K-E^R&BW&`LQD)nE>UU jL\%Tce'0c)L6&PfTϝ&$I@Sl-BFBg<‘X4F뭅1J((D˾{N4 DƦ\P"2S]s2!.̄=G1p!rɲM-zQ*:M*Ww>S>{/o@麟V@Ko>gEZ $њ>q;^ws_,X[7GB %|ZEo?oug& ;!*(M?ErO>D3Nܯ{ї^pdگc4u;Tk_ܟZSYS?ّe~<`vΉX%/=ox0xӿ^& o/,d3ozrvs4/ne#XTpP[Fc $.*aSCu R%Tm!{æ(>"Dcp o CM= S6> Z{Q8mQ[FsF^JN&܏MՀ D"j3χh܃Z |.'ufC}4974uQ45æf{`h+F"Cqpd7u145 Ǐ5>8G0ll%'iϋv5@c{= Cc{rB ]C?Ek%w ӁVJ>leQE2pMT b1d3+|uf%נ ʙPB%BrʥD.8 aoڎWw TB2eDŝ*4Re%膑}O=NBa9_)=I0U!!2nG}7O2Fc|B( W8DRpmZR4d2'nał=6wyIҜpdsM+;{?!2fv{a6Urna^Woφʪ aTAN,;]MqMIX~)eRH2 @rizN/]DyrbȔdqhh䔍d04qq^~]NÑ!6GۥxfROc999I)t:=ܿ?\S`PR@jNeŽJX$]]6ɝP.im$(Iӛ_\1$2w:U7T눜ܲL7&2vsuϾ8n~Ny;l Uu᤯rCMAv[:f~e"$7뭪bfoV- DMrCTE݅0 ` jipRS`hl 0rM4@U-Džh\Nؘ& EEuT [O`H0NTDžh(8)r "iz^$Am& )"T x\%LWCQp"m%װ9!mfӉF~LF^U ]'3k(NrBas=T'Y lp8QDN3Nb1(>_<+ D(P!o*S1*8sP !0'0QB5``\/^W-xB8!D! QRCG͡z\H)G\r>*)`I`rbD Rx|ń0i˱ۜ DUvTEJ'6&mdXn:/BJ  BMuDe6%4M}gC(@L H&(r}ڽ_!*U6Z7<ҡ BX!ŲMH,/tψUk7'>oSs MU\~՗Pt*a (Q SR{5$_ZxK*1u DwHƛF"sszDb hєE |6/rceU<Lw]"iu Q%<Oe4g?|ڰ#y$i !D@cv;ZZ`ͅ@8 vM99HFQJ FP۞ 4a%@n]AS@n81\15@A"W!&7 N =E&\$dSD,XopԷf[C ]GnH9i%wC툄Omv8T45NA(i ^;"(@-r nA$u@d4ôDtnKs" "-Bm""S"J["dE+|f7Oa}~A U(}`$ӣ nc͕矠sJAmxҲs)(0P& 2(T%?g^1ʹ@j ko:M.\S$R#4E7l//ŷ":9X_ߒvXvSX\5} 1׭?¦Bͼwƪ@pЀ^yЃT"ոh.Zc8 B~4EH .8D 064a(A(h.;4 MaC<!)ړM-uǑSS=08ah .,r?b:Ks!%I|H$ C#0(l%w`uE܁\"FnZց(#nk41P4 r'AC"h !W"P(\yh#9AiG|f7|r2闋[UQ2 /9wE'ReY*SFA)MLDN̫LU"TR%Th۟BS6f;=6}{2 $Ё9ޢb?1B *BJ($[NSU nmP0%EF}[h-YZY{Zոƾ¸W%r`O|oXpD#7g/&{9}v׆MϾY H8 %ÆR[fl6|"E55 &a! )0Jɒ&/E'DŽ@QXշ_.(N9y s\ _yM3TUuuO0Hrbq!*tGpEQ~ 5SRBBps!\|8w{=]{c3Nfwl|}so˭_XZ yOі}:h?{2|`Go윓wZW9pw>{ )4%2~݅/y/oˏ͙|Μ@Sys\IL` DQ4CLG8u1D~QDi(AĒpA%oA€.h(K{R]hhIc`డ1DaC%ഃ n뛑4"i"Sy~cĠp8țˆ&ఃHp;!HW@AO;hmT4Hp;f뫗&m%#G(UˁLh MES&GIp9 y`Ð@a-rbI"Ph @@gyi2ɃV>Š0]),r 6[( Aēp:@2D(+Y3lA)Tw֡k6ToXs£WK)eI4JUn>ęt{OipjpƘ=O(Ts댓gܾˎ#.?ʏ>z~%'Q0kN@iu5uRa cL2@RZ;Ԙ~l vft[Jn6oX4FzR7?ehSo)5*k=wzH2VÛGI`aFZ">},_oH7%:e~iv˙"PHA5x>TcXrc`8i\Mn^S\Q>Ñx8W8%f/s-$AlK3Ja) J99c`l5RHEeM+DX p;ι8;M(~׬Q= V+JWǪzX _͖p fRRMQ.O)#f8\r 9l\A44PaꏆC`Qz- H~h(yD wU}}-[4*[ %()HV7ؤmJ`Taz$g<^Ө EY"Avqfi=mF&WsP%nV<)u;f~i$cAcDc,vyE7ݠnDS\iЄ)P{ri$c*EA^&xm14BPݠNpعE^6iBtA.Vr@Xf6r#fI:-)&:9SdKu m{MI(du"'h,lM s@#yQФn'W3E"wB"m oƓ$c\^*BK&.\V|fx\TM3[HhF($UBB]JU/>]&]~C  Ԩ"! 4N pl4mr]ýf*C͡j 6j'"6r8$ E*\ FLbZp %*U9@cwqV~d2i& WQأ̞_Xх~ˌ&rj9OA}Kd̐R{ ,kp:g2ZUmnq{1C~aO'L ep˨C[_I{69Bȩ=xaF2~-GmښY+E%P,F$u 99(z{H4!)q-́_|OMJ|aqb?j[9n!J@pD`Pdžz( yĒ#ύM` >#p\hBUQ 9nF^YƐA"p=JGOWCEE]&KrPBw6rʐJn"WPA(Xn'vT7CQQE}&k%~O_w+(CK6 r 3 /MnˉvnGʺInI03<.4 G3xn;v4@Sv!j;ۅP$A7ZqDr DžXn;46CSv#GB EEs6nw9!lKx)r MP(ɚu˾Hs}3ˆLURI%*kLv%1)P 3RF)*>ȣBUTJB%*$كyd@@>pXrMa2ʬ!#Og377mnyɥndHA\ѓȯ\& !Kٶ#jl#B$((S6Rȴ?u!R8@, !lj*ےh*V4]ЍN&Lˁx+]Ke8CJ ޞ\@Gr !p;n%O$\S6FgrQmJ{IN䶐S G+ۉXB@Q)hGNԻ'w":I#Erj3hj6p-Pw1+(Dޝm|v#BYo*$m:=UdUR& e2.^W^NSrHbJH@0aÆ#G&IkQ&)?9RF(d…@Rdɒrٽ^I'My V+so輳"k/K%C>1K%MHd+:2t]<,;nvGZGBf͚n>LO~;1V]]=hРAYY S_2;w",Aټys4---3fL<ꋯRv(B)e,3 VPJgRBY",@q2I+eO BɩZ\T, #8shfV",~-.w'/;bPB].?M{] BY", P+x~z+,RJJƼG#+<}Tk[i@"3\p{W%&odEYZ Hȏ?x…[.9qvW^r/Hj6xFRj/$ V9睕bft8VߔPB |@'CR1oa ~EL!RHkZe~±'adVgE@ ]f>pe!Do{뭷.Çs-Ztu)JJ !Fq774?أu8X3['(=ӹcI_uS ]#[RʄHB*7VN2E46- ֮]{Yg-Z( \B[P2ʞ|[nEQɥt:gqM%˖ǻϺ+2d7_3zh%3%ae&EU=ܝ&֬YsӍ7 !ں,+Az^ W_{RȲ^eMOMK.+ W_xÍu^ѿb%\tOZ >~L(HWRt;ϾF9y9pȌfMq2}>o̰1<檖斡cN:fKH3wC;l?JI'2{/‹.,-)F}y16o|'q M )ָ/^8Mw{ܞz+?vm7|sEE[@eN/[op_뙓",4)H2h<FH)c缺,FxKK֎4X,&䜫B( !G/A*3!q!(,,*5k֨QHf՚;E8njj\b8e4i&ɸED2LX~mqQ멩q\.!$1en-ח{M7}7ri֫w/DcF!EEi< ^x>ν\QW_ (B )3M3BR|כ7#h+GK.uuv'՛Mn:`0x 'Mk Ͽ`믽oyky(P(RF[ZZgޜ@  Mnٯo?кX4&ͳ *~= s>Cټisߊ3{Sia z-ͺ~02ihhGŠsΓdn^.lͺ5^t. D<  n475[x"0(J֬^\.W^^^jEYB!.sD)]re}}z[r|m^{>[o?> tM/{Is%_qy)8e)7^ ǝp77miNzI]9nܸk {W?>tleMO1ÆjUC okkz_~Svo|rgnj>lCC4{?VT% Àp^}_xᅷ{jTcM`goO.]+/N}38أ?O=1tХ˗lykjڼFnvIⰃ;M!D~NO+>lE OoX߯_O|rk u &Lv굫5ҋ/Ofg` ,|r֓X NkW_veplvO:[ou=w}{=^6I,kLa !fg;woOƹL2uϩDH뮻\-oeE3h=7ް~XpvofaO|WSO=5v.o`xkgD#GcC /0p "Ȓ9'z_p}1򊮣@`ŊO=H<Ѓ~g}嗷q+RJA/>|ҋ.Wf}-8cxj¯:,%e55=#!2oWgzġG467F#9:p%K6MDAGLiJ _RTPSbŊ_~g_1lĉ(c`CG uΊVPFs}3Θqތ|2K~7_7:>訃)tm;S^|;`䈑OӧϺurO>=xy޾ۯq=.O^_rc`Гu8+/r+Z7_UmIVXN(IǂEuy O_ [vkG¯( , q孷w߼[V{o?koH0أ9s/ZrM7Իw "d?,a {ݧVZO\.BȦM(M MO>nv!G}=k֘2Ʉ{x܉3`}2dE1/vi-cE5kVL! ø馛TU=S]w4.oZoO1kS;6%tűp?BRBѨ[N0;MVmjjhusRB !b 3cy+*.sg~w_~QPXE[j@S5p 80tUSD#iW.}aG5u57ohjxThjl,!ϐC-[twΜ\ "O7mܔϵɹdL7p&4Oa%вUEEE0!` 7nܼ]:޽{tIcF7Nkkjׯ]uLm[f;_׮_krsݺuM.eM}g̘|An u `g+_|EnNnA~2,(LČb@zsScʟV>ԓP00zcQG-[UUemm%, R" Xޥ7puYӴٳg_wu[uN&LӴfݡ7I·॔:ۜ1w>jIH!HBSM{WnNK?mA|sL^^EHx'9H2"LI! M=i&s8Νw8]18Τ4LK etҤI R8쎲3aǟ}<ٻ쾋J.`&7 aPB몛&OM]R)LzH&  ?-I!ꪇxvh܌ ͦRNwjYiY#,QD۷>oo}3.AˁTMQP"LA m HSBv ܰvo;K>Bs='[B-O;a?ù~gɓ<~Ow 7ٿ_:w.X*t„ #FB8BF'! '0=EHEc؉'af d- ByKO)UUK/}_|>/{v} RlGGńm.4M- -\H!ZXܜ˄ăpG 3wJ!K)?}ᇤ N) G GQǿʋ裏 uju~{챇mnhB :;~ɼc=Fpɭp~@ɓ'~kb5 5~%вpvjMd2i5I$Z0<s}cG;d|aն"^[[;}0jGht;wwg_ve h"( |DLGK.y#G7.r)q:yjSWY/F Tzܞܜ\Ŕޥtyꙇq8c n)^1eBҡ3+fuk/)dnjSVVz RYTTt:_~qa\{յs[an>}R5aª *TH*,,d zmb}7=ȃpbŽ;긢"M$d 8 ?&f?[21zxkPA&7, y[nuiYicccw!ׯ_bibfךXtJo^ve~ꫯ>#ZSF/>G,{ǔ.q?[" )~l;s]hbY5u5ߞ9YHqv[J}:/ dn t8. ]|}-/+O?~.kMECtmi|˻?ol<77snj[:#Ht˝e?ܜ\iիWG]X'L 0̝tet 8ACcy{^]?~hgU{YdaAJ9eʔO)Snzp[*)qݫ7?2>}VV{^w^lԪ<-ZgmGWlnס-RAow=y\3D7wQ\p/=Ԁ&ъ~iW,o ((*n %l.[ >U.Zfn,.]^-PBnXۻ*YEYO.e dk8L?KPS[s-7)7e)] HR$u]^J~Bܞt0q+vsQubFl;ɓm):דFRZV ", $گ;-_86@n}+a;7v?hHj{|+R޻]ܛ?3y*7dYdˎK62WJhVYa-of_!$'q?_0^YdAkv ~uP#idW]-[!Xho[RО.f፝X;oG~U-4tR=Y&H6:-hAog_hQwV BkV7WZ9ha !LӴN7H4 TT) Im e-%,3ko\vՖDfclާvۮwE~|Ci>(ÇZK)?!CA> SO4Msj"vVlT_VMP_xyo ئl]9+V!:iƍ=X+Z],~kPJWZ W)x!D4Fɮ B"ш ]D ]pӧO*n϶{].=aA!$2Gp"ILPJg? /ۻoԇD2nD$O_\Ȼo,`݆uD_QQqͷ3RB._z5 -p%9c]ҹꫯ+w5{:[7t˒{%ýDˋꨣ.K 'pέ]df´((WpT"22oYK/1QZPzASSZ7J +>EB5іb@S99ē~mMiO{Z(ճ]= ._=@S$;JatdT?'RqF!.#H.uLj ZRO*M(]<[(ʧvRjyXz4ӺMAPPJ˯|w^s5!P"apL5&"2n Li&Ma08%Ԯ٧>S&[app5{̈q3,NnW]{p3 #'NS:$,pK)Uyt[ɜsXMlhIߘoMՆ1ׁry+7D Y]]=|d$V 6'gg ҁp ׮+9d+/r&BȦMVEc!b[I;K/SH$@Q^,:M^{; iTH˔s9>,@ #K6B-8@_+r,[0q}7r*tn:c?䗕m}.Sqxqc$4V6yArREZg1m],gljizW:O=]I%-T(!;ݧxZO#ϴG19>Î9l ;׶}sYx1,L$ījGu'6yor}qwکx/\\oϟq~4]rÏ>mS%p·z̫׮[{777B?CO:$i";s,Í BČX~Gp 1 ~Ńx[NpbP0MnGB?p1G:췯d(R![!b[E,zk d1kz*'e>GwL7:^o+2K}Y݄׵qj@){4M묚[;v)Lw+呲MJ,,;a7_ws)Xzuw֬7]}5/(:]n!gjw"K:=[jm޼~]vDBڏ 4n+iK/bYikf^tEx}GN^{!謒ҒH!U*Da567.aѵ3ټ.<"|İ}ф>[nYOxs/>jժnIQ=a~#Ƚw[ѷ"| Mաə.ot֖7eA@mZ>=L'x, 0pŚM΄PJݖY>.l=.8.\9bX2\f ݀`sBOF駟NTk[[ԗ$L] `{eeen筰r?c}B_8%|]O:a|޽GI6[{4^1tm񄰺:Y\9ؔ)1XuSjLttvƩ{MÈa#^zom]Ci <04758C5aCX83aC2dK Bp QXqk;.b؏ 4>!$ 뛇 sǝwT w}aסəŞWG|[{梮a|ȷ m&4Һ{Bxȯ3?5:*xvW iu]gZvK\x% !M`$PJ~^ThڦP84jԨ}웙B$YzfӾ^ufr=!/=z^&Lif[ bI$'~*ʦ+v 76Yᇫ6/`JòF.x.lyf vOw=xFmoɼ;zw&uCCq&iJ"U(LajФLK)5f S7u(P*RsB ' ` xwL?aؠaz,jSssswb옱*_~Z>o[nGkFIAt;4y}Y0 K:6~*!#L[O>似<)%c_:tcLNCn׹f3As_xB +oӺ+g/84;,t\2Ux,':K/Dv.%'hfl2,1mڴ8`va՛y` (6!DԪSo4i”f'8#>=rd>@\+$;~bloՄ0tw߻[mXmt>FO-znMi{uf6[${ oG p$?|gEEsy]kQ|-ɓ/v:\r-Ul0 NR0-5ll 6-_|Ȁ!e}Bi5 qƵ.&<.D!NSc! jn]VRv聇{ѹC8q|އ|[V^n{Eo^uUa3|BϻXꆧg=ݻWAÆ c=֭Y 4h Nv2};8䧝^ iBBHP +/Ʀƍ6v؟*)))),I}t!B?g 2F1R:pxܹ|~at!Ғȸ:=nD4&)e;G롛ԋL@Iy9D B 2ԋiHo(HCD G{lǎGޚVUU94ǂ/zҩ֕9W/| =^}?G?_oꫯÏf5^K6mt?4=sժUm-Rb gwA^cKe*U;NR{pp"Ћ.K/7`0 ϽPJIA=XE*4=?TPD܁B&dĨey88l>S;MJ9,;(UL5hD! ][%j/'+B&waPi(J~^EcmnPBa~ϋ>H˙g^"XHXSM_o]zW*kgĝw<v _wƌ#HoK)Z!fsb[wJbXA^A 0 Qj<O46457󊔢`}8v{ܑPc1)$\Ri B\׹^ZT(+*+rih0 H i_nU$ &LF}Cv5q+~Zٴ eeeMMM?,AQ~(-) hν 7g{hpŊ jZ!\>3't|`iĈO<導GyCd롣%O;X0٥K)0;{RA `}歷4aaBJW^|jw?]%-&К\p( Cd+"u0p4|şi}'t]JRWݖ nf9Gߊ3Jo."J eQf`.~blw__'M|Gh4̦P*M1T:{^!EM]ra%%X,e PJӪ%upu]r{{Um};v,RH[ 8I#bA]BFѤThd&LjDLJ%M4`5jcNt(b{tSB%dR&%"Lz\BDDfc0٠]FPޫ|s`0XPP0jd"Y__*i;hXr:΄Iek^"J- ᜟuYpbܹŅMin\ql_B7K.o;[n-)/I ֔؞s[AlƎ 8Œ?o}a'춮9%  `mi˯fۻuNHaE]tgxMMM YpG! /4MXԳu !c3Og=_~eSSSNNίjO=꘣~f,X 6-ɓ K0$_j*!=.fS۴{'Bݞl~}K-__P !ƞ|쳻oyIgz|d(xJ]ڹvUaJR$!2UQιSqRruICS5ծQCH P5MDɐ)̤"Cnpt9!I"ZcUI@m[Lc`ROJ؀t.%{htA d=E^OG5|zz]:$??+~?o EUV)v ުd?裎 #@BE'tRDΊ[a!M셔ѕ#wޭv;%%8ȣOUatpH)zBbB͡u 2f*+#Zd'+6ߛ~W_yu'p4 KK]2[G2:wd' M~3/:V|٧˗.駮y]/BQA:K*Tz:CAӡwHyˤ.ˠN޿ߎZuhr2A U4Ms6As"A8.,*; )Ӕls_x%tו#GUKJ*{YʄͤNU%TF)%q3NTb4Y\8ܮ@8PY_ ES>bWp"9l5Edvf8Ә4kkk=EnqJinNnmNr744CH.7m9)@݇+鶅W){"?~磏=0lO5۵%,Z=&z!Γv>;(J[RȱGIH;]*/yR.VN9li '1s6A󍙯G{<أx1cLwinj7Ppҿ_BkީS~ч˖-[硭+xB 0:+ӴϙcꥏQayˤwB6՞/vGyos ꖔ"ӓYa=w"<f6lKk:qWsu5_{]eRZѰfڽwUf[ڒEiS]1 Rr 4s}ٌv1Cck]Ӥ$Omk Y `@(VѶ~ atic+;!6ѹ A)lLl듩%?+ڪUyp]>tlC`vt2RJ?xe+qn;V˔-=yVoLf_(ݥ]`m )fgfI1L#Y& A@tCo.ʼ:1dž#ᕫV Zfkm1uk4#e񻠋@7Pfù?g)2Ln!MB"шnN3;쎞(UޫWy/HtWׂR%%睗{qctSeǩ BE3f'LqG[zZ&}-]wW8>l+ 4:b$$H"UJ"RJ*``qauy]U`j2}㶒>8 %%\zM:Br8>*N;X&踉 n{?{1Gr-#8-Li!q;%e w8< ,!N/?ӷޥ `K-n+$d,MP?( Oww~Ϻ\`x !}wVNB{ÏHg>rJi~a^Ӗ7_a”ˮl};g9ys u9Gu]W2fԘGzdIcw۷w_A,g>].33;;;oyl@'IĀfX W\ph0pŌMPJGi,늪d@N }w+Ut>Te++++,/dow_x}Ӥ]dlLXRL73}{NnnG)1HHk֦sBL4iB-{eDŽgn [@,^31iI%Ku]?G:_>} >RH$bWyWsŊLeEÆ Za;4`P~:5iuf J)Y8q<`8ē3wV>b<.9~*YdBk,fيMeeW_ 6ny̥?.{?_{{AQwqɻ?S5 -3~e.#nwϽ3ɹN>#q}8J͍<ϑ #YEA\̪,~%p/>†<4m̘1|fW_; A azvqc r LiP^]N@#wp;ƍt9US2jh"s.& Un}s{1c O?tQNQ:y!;lw ~p;_yd}߲`rs.H]L6a:{/a;;Kr:gcdL.IX(OY_W@n]d'.JH")MkVRҴ>a\r*! "S()M*E"&5@|w\.']wInTYd~Soҝ{X&7v.Uɷ{l",zczAZ]",#5mo\LLM=o=YdE=BV5euO=۶nTXlt $䲛 Q$V̾H߸$[mutZyvAEY)UA23u8e((!K%CP%ܒL$33U~;r+WL?ѐF\@x4l"-X, Ijչ~p3d:mKȳNvYdşϧ⏆{\g2Cbs^ʺJ.k]8c 8JTX)%UHXROjLӥT icl)+ 3O?s=䌫PeRHB5a*DE$3'"[> >,7T(NpN>32#fRc13ASuVV%~m0cƌ)--]nWQTX4j(P!Lfkr0d.RORFgsGnM7܏Ǎ]| {>lh4:jQv;0g62 ,",EWBUy+R?o܈n@wa> 3g{/nbށܺhSl+W/_|!GiOÆ*JJXnH(7N=>۪uTan!x;uGnnn:!p8wCHtڦںo;wÌfLgqj3`wM{Ydg/oGŪq[*pYKa ;Οq9viӦ 8xÆ /c<6a TR λ|W_}`?>S,\p}-K迋6o\\Tߴ\Nb֬]s5)L;MTUıt=YdE=r>gy˱A-2|ȹ4l^9^{ݵW^zeCKC<X 0-^4~5njBJȤz')t8'2퐖O}/viyu9\6mrpͦ9pp- ypl!{wMW[&gn0bʔ)O=^{ugkɿwbKfH$4M6kuJH &%<͢]c "4pPV(kn*)+ 6\r%)rIL37|𫯼nK.Bd U .shМ79dٲeh8Xj}xꫯVn<9UW]uG?bƙ38!6rrȷd7dsee6+k;eY}Xa[VcoO>G޽f5c옱*QΧ|g))(;lQ;\xÆy}4t"Ȱ.>ykѷnIǝ}B)MYlKD;܁} Up o?5?xP "`PjIajtH-3C{l",z?|zȝnxB)RJ%3IҺ*:c=b8#@ )c'N4iR[֝5W]CYj'WrZRJB/!} H* !3\&gCfEyd_JyM.#䜧g:K! atwcr.9ӅKn`Vj|~YdEdC5K`9];t Vu",* Nv۝%7EIDAT]C`J6۝!&gWYdşYe]yLn[t9V7v%}%ȷ|Yd@Vaa2YwN ;im@}+-dͮ"?Nvqā2J&[qbm"{H",zPg2Lg&# իWɇ*7.wٴ.S[2=)scYdV\|1x!JŞy ϹwQIu]{ܞ={2|Ȭf54Θ1ΞSM\A\)M9S8_/ 7_ARJkjj>` wQmgfZ;IH Ыt&ł" RDRDT K ^|l<$@@x>Oٝ{f褄$0)'Nl  'C! Y}u,ˮ[nE_ܵkk‚ Ty8 HT5o?zQ$SXRG kom?rݻv HN>Z̊_V|1 { >"Q'EϞ=[胕?)Mbo|_[hHf\T.[*^xrrچ_|E^I-bBk.o7oCwSO e3\6$$UVdmaNN<7KKLquQAK}*74^oA>S ͐aׇNGb嬧a&vJ)#0*@@C @@qbӗ# pbiRjR܍;*,R$Q]ɏx xЃ<+ 'C/xКpYV"EE+[ٿw%cXH,sKKK---)\G99;[_֫Ur%Y_FFFxyđGDeG~ԣw/)_7+<;ճ";3yK0]88o6lb zꕿIew ՜+:v0ށaa-9txԡ]O;a`;vX/7-ZKeR>=غlzu[{[(,ڷk߹kgD!"` ƘP &A\Z!Ԫ7k 9cYC[m>b;6mdë(())!;cBDlA RJ_ҲRF┙E&N"ٓ(ɳQD iAN)c0P `U< clAܧljs+f˖-] <~T윜wHטQcʫ#=7NQ=zF܊+<<w:22R.׭ro)׭Gw_ԯstm۶_5jdpo:.1Zcju^+3cG<^~RWI +aRD"aXWH0,J%RT"KXVQY2,nݺu4Muץ$`T"bFNfa CeſRL &RV*Jd \wD\oo4k\8p`DDĆ BBBL *HfH G~o&aL1ѱG.^r@h@BjSǎ6j܄qׯ^-_)W.]b [عKcG}>u}2퓛q7Ywvq[+e׮^p`fڼm;95ߞ8}b\_wޤy?b*N}m۵}w$քt]+Ph|Jkvvv>>>g$x3$.3Cu:⪸Ըs)]vHOߡKGOm\\T,#3_:wqBCH"VD ۴WZ)O8I7**[lRbmnĩ|􉓣ӊ%+e;vz W}鏟8|=܌!Z /7>PVA>t֭[>}cǎG1u8<2&WwS԰r kH {t/#nz}#,f5k6`Ѐ`DƫyNl\zTZ;p}9%&VTUP=u]cm\`.G0++kܸqW2u83Hfjr%qIQB~fq1q3G6+c10ba$ ,aa% XebVb1f0#`AS1KXP 3`A2F&Ŭ!Z7.}7ާ){`Ѓ/nݺz5"c͓)ZWeᄰ kkcq 8ݼ~3?7!$ce>Ǐyf¼Bւm5+;+zLyyL&kM;WtjE=5kXq9}СC98pc -Cw/ 7l_~G),.Q\<ƆRd[ev9c K 323ܶK-Z25VϞ=;dcͪ_WjԷ{٪U W/$&%z{xge_tڴySNn;aN!qA۸_g=k֬3g: p5d<壢TJgdgXXZ?}tZ|Z~\^T~V^{;>=#ZS]QZԲY7'ٷw_+K+D&0CN߹S֭[8z"?O>]t9|RRRbB"0~C4th>C8}aÎ;6{l<1Ѓ7OWךs#02o߹Vc$%W"xFϭ7nސҢ"BI`G|eƎۧw,b9),*uqY_uT"=jo~1zDz-/N_-[⒵nݺ5dȐٳg'$x3$=\}e+k[nͺΝ:;; T829)+=tЎ];V.[YVZv3zUھ[ߘkK7oW!*TTUp ƘaDeze+v`^ˤ2P*K+?E g^(B$E*m\" ,by P0]|b{h\s?pf͚_:/͐a.zl涺) (&?X|b-#t{:ꫧϝkvV65WфW'p[nc^)%={#'dǟThبW^EE;Oy_/``SF`0b!b#^$.}2ToX׹s^z%g}6k,Sփ7C%%%%?dGc,K)5(@)B0ƔjvMX1ƈ"A*`1(\>(ˆBۧY!b5of'Bbnzv &$&&~3f0u8 փ~n3l1,V>kaL 8y@xx;)v}On]tשS^{ٳgCv !B2 aBQd2$WmGwt]ܧVuI/bmp` mUH_oT;exi+&&fĈsM5Hf(#3ٟ\3VA;612d}_Szzz֭jYO.s $x3l<|!Ν?rJT;pჇX"j,"{ѷ.]4{lO/. ;X +:dheueqa-ybR"qcFY܂+׮ރ{wKBׯ_?0id݃7L_kSO͛c69s&22R.: y2/֗2l>aq,`P^WUF 򳿜S<=~KWexDxyY9"qߘ2q_hޤM3gww?|CTb.ZRO;:/ o劕Çӣν;W6]\\0O}uہ~mMo׮]y̙3 <InBL"c(0s}5+/?xܼuǧq,qs`F"k.1!ZW}-Z­\RL0aX1k=̛1I&Μ,LINYi}Iq^Ie"PAt}m۶ɓ''svG1 S$xdt>\9ET4aDF89%V"eZz$ٳ_uUey%FҲ)oM,*,Zfw+%5e+mW&$QJcoRJE?-*))IL3!<99Y.3Wr䈑/xw<#] !s5;vœ'O6u,&aÆ~ؘ:  ĐQy=Ev3J((C̰,+9+g5݇v]69%9.>8Yb|YYYiYiNJKtzsg >}ZCZzBݲ ?;qFeffO9RpQ`P/7g=_GuGωO8 /9rd̘1k֬qqq1u8&c777SG@7C~ 9b:gS\ZSx%D{oZZX5$5\ uֳ WpG2 f͙u-7֭[ouQJWYzjV2|b6)=*ѣ=zPT-.ڱcC> !TRRZrR)ȒK { 4mҴQp#6vb'NTJ֍oZ#* j weZ^=>!LY !u2IJMmo%%0ǎBu9 oXofB*jРAf<ݻhaap &:@C)::#juZjZʻ0L:wLJeuocSD@AFbFCߺnNgS $,aW2##Ι#GT*U>}5kpgtڶm믿qܪU^ySxy_|E^^!Z̵""ck@ Z޿޷Y)vOq1Ha؇%a7T~xUUU˖-CBmj֬,EEE֭=z<Hϰ_JIIw[ۥ?- A!d2T*/oSDEձb1#Dw`={^fΜYPP +µk׮]ڿ͛4ƁƏ_VVvZ< ?{*++7m4gΜZJ%0RkALxD"GRva95`ql4ܣFn%TTo믿N)%mƍFVZ͛7BNjܸEL4PIIɕ+WzIy]%qqq.\1cq/F%JXi=˰H@rqxJν;Ͽp_qZnݺu5kօ u:Bڵk;v=zud<ԩSC A+QQQBB3noo?xΝ;?!Vi9{G{DF wસ7{yzL!% !j1lGt+gfd~5`FTUW幺r7k,̴3 skV9sf MY9mԌf(I)I|kKIKYjuJFJ_#/^k.+Հ=wKƌڵF9~;ڵh7rȟ~cQQQҹs8c-gΟ٫u]mmm|>}ļiiiW~ ɓ''N4wӧ:#!=3 1ݺu{!NOO?G cXQd<Oo(V\ii^735"SX*}0˗8iıuUEEvb g'G'J䉓[4oݢ磌%X#ӯ_? EEEׯ6LӦM3u8G3p1WƨC|w<_UYUQY("(^Ԯ];\N9qDjr}ЪU+g2f[@O?|k t .t:K+=5xTCe|r8;}洵#;u47|ثiYik߱M]CCB#FqKK˫W"kUDVBB?xΜ9p3 _[XX?+/.~T(^ޑ+֬xFBmEFF2 0QG_yIy~n~zZzzz:;揣Tht=v nw/?n3ETO<$H`ܬ\=pBӈNNNAAV y铩i,f166zHHΐAP"Ά۬y{^:(0.eSGeG> X7/< ڞx_[X_z郩KW-b_GGkUUml-VrvrR Κ[RV2iM^Xbjܹ5yfttteeŋ !ǍשS'ב#G&LPTT4o޼O?=Hϒz_~[nݺuɓ'O<0̮]YdEդ/BDx/<+DzwquJ>(Nip˜1mZquvH$QJG A*Ecnj 0nBhhhFfY/o/\_I$uz4i/y\t\n۷m|T?-oҸL.CEҒҐАZVVVxzz еsWF#m_  %LVwE6}LBH||s猋$'MԩS'q|رc'NLII3gdw8.//eCmݶu;vشaRPP=z_mll,,,<=<O8Q\\l K,YdI\i"Gw%Ao?4o־הּ㢢3gΨzaT]]ݐU*ݻwk -Zd:sLII Bhƌ0WHfvʼnp[t[7Ş+&xݙYW^d ,,{<  " ƆSw ;wgqqQ񭛷***$lѲiӦRIAQA?x/qcfffB<HfHӉ}5C !۷No6UWRRܐ|||E!dHɆl0c]}x:ܵ$X>]CԱS}*'8YH,› ڭk7m|¯m۶L <0<@ްK.S1u5.,s'EE%HcC:?njjjjjruuT/_/ xij E ~uz(C";w??>3sILQ b4V)S=XlH40y pc1,bTy[-ҊOԯpC%''w֭rΜ9ӦM{ڦϛE,ŴdOޢI  ,fcj9kFH͟sN_?_a 8l0[{g|e +bj谎`ZWiZNc0:0PZ1rqkMFD1r* 0|W0{7o۷orr203g΄ y=b3@ư>anX{~&J"%%&9!ؽɥ1('3?U1N.NtH0˰ t +YbOK~֔&D՞LFZiF-(*?t𐫫krjrp`p-į)ܜ/m;Bn݌ligo>wN]4k{W^?~|rr`8[Fǎ6dX玝eRڶEJM߼usZz{y_K/ {RZ⦍xyDVn7n٨j]zjV |yU94??/X ;'f7 %գG/%%7l{a[ׯu'Lpҥ7|sŊxA<.c6\6.v KB&<aQD'zֽ[DxđG0bN?~[j.##2qz\GG ZfC)-+MOOܶu[e1Y(mz01b SQ}򙝋ݥKڵۻwoNřg4k{W/rll;3w\(9=x3$:3È5,nueY +*9 b>к]ȰK1$XP(BBB 9!l̍;@1cM"3QNH Z7obg~9W^XJB*A0$9)O?ZNkiiټi7of>pq z =eT]yqb~yq\-bcc'N_w+ϳ noͼqnÍSa~>~^^m\׮^AuT@)OySVUY])jMFJ8I0T Uk/\ J|}}E*Dy׿[]AiI ! aJKK9Ƚi)ť?.yD }i(QԮM¼Ÿܤy?7? :NS/Ң"A/B5Nx(X{o c\t+))W\)M[A[XY?}3s̮Z,35 5+a7k.UJBbqY@_"T T e;}LHcnĜ={v!kxMZlZBbWYU\"/E%e%gΝ͵u jT|Q(x.jo^  ܼ~[`g7n1 ?|y˽ڸqcAI{Sޓ)d J`{tWTcGk_9={}bBbXpXW@ȦT#3BRTaD=N[W_kUloW^7n\jjI-[fpOq\^^˲ںmwرi&S^EIEII*[AwHaIYq7 X.6b8C'PBB”Yˋ;!j?Ƒc_ K"L)5^$^<1Bbnlٲeׯ_7nŋL?w==`*ɓߘ,JM0O:n㚍c^Bz+o"Gzu Hh) Ӻo6n8VΎcnj ^usxe+J @Ӹx`}FOCoٲell,BhҤI{W7?GMwD|۶m> %[~~Kℯsd bu wڀ/ 9H\TjuVbcc{o>FKNN]DӧM}O-aLr`MYYYC~zϞ=!#)ూKF*.i^JJʤIΜ9ӻw{:]߾}J^0g@ffɓ<8lذ 6:<Ӯ|Ĉ'O>|okkkH${.**ƍ!ԣGS}%&R W&%%%umǎ =xF%%%ڞ={M=x:EEE۶m{Sx&A˗_~aÆ]ZIx{=Bcǎ˗/1uDg$xΏ?{nggg///SGxA(SN|MJJ2uDg`J<ŋ@v<0~?}饗> # \46nܘ6}too˗hG <&vڷ~v]t1uDs 'mӦM^yyΝ;ݛ7onf<Oεk׺w^QQhvK/:"ق";+W4iҤ;q<իW ^xL6o޼S:"uܹc޺u !`{ x.]kݺu?4i#S": P0'''J駟~:g୷4u G\\ܘ1cRRR䓴͛7weРACx@fo9xB͛7_}||L$x`>-[6}tBrAi@ϼK.!diiyƍ:(01HvƍN:!lll6m:c gו+WFz[jꫯ:(xZ@ϞE;v,66{뭷L<] gsssϞ=:uܹsr$xx7:۷~ <튊V^=m4J qㆩ$x|rrr!CB;vU! ѹsLRYYioo߷oW^yk׮ %))_ݵkWLL Bh޼y/g $xoܸ/Ht"BppAW*݁СCrr^Ǐ/]p}z4iC޽;O9H?+++oܸfРAOnx͛gH!mذѣ :;O>+x,X`ҤIvvvLvvСC%ILLLqq1BԩSyyy::;w1==H$ɜMG^ddd1c|)JD")ݻ{yyAv=x3w岲#;wM*//߰a!_fff"\\\ 0f̘mۚ:@$xiӦBrss7l`>sLJ߿S lt `!tiqrxP-fϞ-#- sʕ  ,1܂{m6C`'$ӕk3ڸqqݭ0{||Rt҉'*kK'SR(k^^ 0` f<` f<``}z:@#l0Pxஞ`uoB5m._6CY }QwUD/936}xn=x A$x A$x A$x =o< H.<#iuqA2Y"|^ M+w/V^O?ψ<H!H!H'R(g K"A2bY՚: &ML}z-S%z A$x A$x A$x A$x A$x A$x A$x A$x Փ1Ʀ >Wݤ7by7ul(+3\ z|eERJMB$xoITxQ@yN XXX|T<ª R^\L0./œ/D43@CBx}G %%g 8?/x [b' fR*~f`~ osؽxaL'aK";Bȶ ұC˗/'&%:"%CK.[m%٣ZJ@ӧO3 gcckkn)ݑRaX"nZכxXuppCEDD M 1~sɩ\Q+,gD"G5j(Qy릔zyyedd4t0F %"X;8BF$dtp)3 S\\Va7<AۘRJ)))QTڲV6)>hӻE[TR V˲,0 /kjS7ئS9kmd1ɼ*61~xclaa)賀!b"YDILJ8ΰE???3Q}߱cNKy*iz_{[]$'4i?QtZ]\|\xxx? h ųXq^W(蛔?OVV B|||,--!JCCCaEEEIi ܥ2)8;;!dmm,Ɍ/++:GG777A˳9wwsuCWdh9݆_?0Eȱ#Ju 8;xVWW[)\r^Ȩ vtptppO333S# pG/TUU)JwWwL!#3RlfzfQI&5@JٹKgM"+\%-۽ 8cZ]YLL̈#Zliee%腼ҼĜps:zkZ {yE=<<}}}SR;v옘x-;$B\xbEew{3h5ڐPUUծݻBB !k׮ޣx ʿUTPtU0(@tAQkSS;(Zi-;w]|<**Yf,.P٨v^V^v|W1NJJJIJye+ ԉSYBg{gJ29vXZZJbVWTT|^Ç3 ӥK0FffxSJ=====7bj}WǪ+s̹xb.] ;_v܅sL $()oZ:QFΦ7ucoVDD'~e M8~S^Ok_a]tuquٰiCzF?w?n}F)^5~W25޵;i_;ٻgܸyc*Z੓Ӓ?c''߿wWF4,nG o 閍[rq sgϽqF6-;t勾Y "/^{K8gd<>(_WWVUVQJ]\33_=2NڲeBpswCi#G9CԴ [6Ժ)f8+<ϋץWee#9ZUU`2ggCGEq:\nccccmF߻j'OΟ?m#wQG'GNxҲ迣:hoo0ZpAee3FENNu%&&*UͿo޵gו+W?.Bqq9=wǏ{zx 莏1%%%l>~8A?xf_59s:tH猌 'G'IJ-aZS^VR6ഴ^|A/pz;h5^tB//aF7n\R8;oJOK?X)b_W ٳ;wRZYXZ|5+W䧒wOwFư,k`gee,HBǝ:}j~BHZf k  *,~ѥ˗=mmmY :᧟~JIMtҖm[ \hx"06m;gnUYUbR-J*KVY}5O5VWo޼<\=B!%)Eyyy<$ǏR* tT"5_zS}qww1q\QQmdHFw Ji||{333SJD4%`)yy篜,nѢa^x+600Paڭ=nݴVZ){vyp$ EMUN;<|9&6F.$U=zs7nqwwmӲͩ sdfdgtѝeو윲Ҳfo}ΝgOtsq[d~kzշnpswiۺ' ggهeو&yy˖.ۯ/C.7;k!!/tUU1vppXlih㢷&W.+ݺv2dLJS?,,,p[Sb#^|=clG1_dA@1˲xYY۳k+^| K #Ģ mRYȴZNJN+V<9L"PZ) &2,#;D(BHt%j9DJJv{5K+K0R,N#Ius><|<-_6y15aD m҈˖,k[PYYimc2O1:1rQX*}2MNg1Sx R"(_W X88:4kl+crN+;vXHTȄrVK۵cɉ?ʌ 1۾K9:x`)"ApptɴiL[tg<Ӹ\c,cdUUE^^^ ">)?\(l,m #Cxj0c 5mt5_|֭[?N}9y9~mbBxL"R (j;T⚜XIe^n^W])/+IHI LqjJh2iTJNSW_\PP`oo֨VJ13BRe~~} 1y)x̻y),oO~Id1rETlSDؚBJW:w1 xONIf +2lll"Ly+VUURd#!IXT.^B2y^}'leVTOR+WmZ4Djgm.S[VVfmm-JkR 1O05jB䠲SB $uFb3}||.ܱCǀNdgd{ytTǨFAE^zej޾ޑyy..~~KJ/]Ԥe2[k۠ [+3ءcZJsUEUjzjȦֶcGMK^vi@k֌Yֶ999r R s╋Z24hgmw ;vLOK}} CwY*eEEJpP(%%%tթ! 0,h񢔔.͙1[gQϯxy'Mw}ǟ;~!xyPY%%&mݾ57'|3f͏=~Npttlŷڹٳg <'pR-QF/t~aWs;v(%Rk[͚Z(,п3Lp֭[bo#,{t{n]]\E6ֵΝ;j" !q{MLYYY⥋;z @Ƽ j9OzzBݤqg~ۋ9Ç +G]|/Ǔ㹚"vDŊqArL"|2ߔ?RFnh#TlݺU[dч\o-B7)+RZ5iFeR(:v|+BBC*yE._ڸaٓg'68 '"T*tnͺU+Wyx&MDuӅ+iqc)JVwUL[Ȉ?ѷw_) yAקK~ѽ\"hѪ SDxF Ikyx -7?W&Fl-^@ڵk;o#>R$\*L =ydJbJii;;98>~EljJ*Id5 m:vXH@a^'PG|^^ŋ9wQFĘ1A_4!!aZDx'%WWVNNɩY9Yi陙 f s=۴ij%I[4o(rvqvw$[.((yfnv+c_QY eٟ~N&uѽM6,F6,/Ltsw'CmZSJrExxL&jM5qsuc,YYY-[ҥ!388:<_\TܼYaKJK"#Ļ2,22R IE޾R{˧ 77Fe`VTXԵ[>/x*,,L&tͭ\ݳ2232y  +- ; (hNANzfCjMb+5j&wlԬe3F`KK}}}1yʻk፝xWZ)hB*&'[XY5 +---+/ׯk&M BrG\=8``zFzqAq``ss4[['ggΧeYZZ4f&ɩ^^^{\:.IuUUU՘ԴaÇ,}ْҒ&M yB(((8rH'LNK VWT*//[q⓴Z틽_jŰLzzsF*#'7`Ƞ!-Z]-),y饗ڴicia]_PPPл_Qϝ;:p@K<0 lnѬKJZJyyQKKt:]hXehhh*=#=qx^7MKK4hؾ !B2];,dmڴquqMKK,9jdDxDIIV lڸ*+-+4,/*s+F$Hbbb%Dҷo͛YfɎں˲7OIMy7YڷbRiU0&Y k}zNCΡ?"j.\PL4Y7_eoX.V}~5;x4vZ[  yP1-ڬRHD/GO_`ؙ2~,9V:8{{{$d'5iD2脐JD\&xj'6׷vk4ΏuH//Բw-Rq)G2bGǯ~uƍE.*((X/1bVWU>i{*]B&eCz9۹!L?GFTH5wm}*MStv7?s̗f>ֵ#]mbb7&7OfSF-/KFv+)EX{$opOW"e0xq{⪇",~)eI* kjM nd9nx‘ɽ 㼼zYZJ!Fjp++qDYπrJ]1QW_ u?{'7YTTg%ʳJ9=L)<^-9]ie6E:^SixРAIy!=<|ZM#FB ",H/{oM23?w\^ldwd2AP,&&tBh  6T( }+x|8$eSeH TZeH څ Մ4!1LgVR` !#Pt!MFuHZSH) Y>!XN+yH k ?&PsfWLWٹ 鰀THJ]EQǁc "DD S$,|hFZF^nL"H1C, }#HpJ-0zЁRLL̘cUA Xf!&s Ы;s ]LGsP\?*ޏ* K8p9!t+dq#(Mn4_PB3D1%H&M23 Hq Xn"F񑚢Jna#(#5O@B"l(cqA1PmHZy处`XEH j2F ␑!2Tr!Yg21R fȘj2!1 #].9,U$ B3C˅!=~d$<:|!jR,P(M-"O,lUB̰ -2ZHH }A#@A&2!BGIHR@ M$#6rIXBQ0XB& s`1cm&EDD~cXb}@$"FqF0ခi9眝%g]9gL !Ρg sU|Zzo:(;кyT61Ii8p9B5,pF?ЉHd?V=fGdN+x@AY`1BP4 n/s 2RH Ұ Z^ױ;+rsF:AX$Ń yF!Uhpy sE 0HT2$Z6dn<a blf(]H|! "LH$$.dQ!!I![:d!R)$R^XuHtU i1$z!BJBF4 c._!"} ڐՆ,ts8̧BUHxA( IV@ y*v!#$30g SoW0Ca)P` 3'"!ā#@72C,ab@&1 <%}#""$@,mS^hʒd5XƌU d 1@x;ǀFz8/{TERғ[AT2;ď1c@yئY+6=szct圕!`0K@ܬq=I>t5B7>!CʥC\7&p!wi9F i j U bikP!dlqHR.x|h,2!]Pq!N#dZQ& =CJ"!C@Bl05B"2@FH z䜅tcidCsIb05ר<N58daqHsƠY 'n/2!s]/R!SsB! `F'xP] 9N`N{$SF˻{n3 yVvݴQ,n:>v_L]Xmv.+gt͟X/U|Ҋ\~5=;qf_~ݝ~vw͆ÛgIKvX,"KjnҴy܆~BS}8h4Ӕ[^޲[hjz6]yW%yTJW=i5-c2 ;72jOvheFl08~e˱91qiaH{$8 FyƌKI2Yo4@6 8`2BN!C|~0jldCfh*ج p<Bc18&8D;B V  Hf!]HYt[MHr CD!2iUԠ]sH;E5p Si1DT)JBfUYUH9 [i?̬]H{mC !B N;BBZ*t y,& dŐBiҦDLF8tr Kq0A0HXiua aЮM^|9F+p3%Lz}X/ %sv~EJB <BoC̥@ԇi3gƎ*G8甪iЪepb K LNl3/:!]ֻG/=ȉ3_rfe]%Gl&'Ӷu]jMmٹ)Tͽq xY}ov~DG i1a28܀1Fi5Z F+z[SǏnyݽ.Osn.k mCja]sG h}?{i>pMv\Y^C%_fã,;tbU Y~C 4["@HtLm F9'9Z$GIؗWxJ:p8ew&L3HW `#OCz,770o/.., z~L"o׭Y̓#<6c dk+S9&@wu诿_jaF1&3ΩFgc.!Ic5iԣY8BvT8J),}UF obDJzVf3) <6ֵKo <9L?@ThsFn1gt#DHlaINi՗<xsAe4?*H7mY.:z4h7@FrAʃduR-u{.^- vY/W YsVD6 *8BP6 H^igl08 &eӂW _AU|W24mcw837XHλG<|Ե~Ԍ"Ј蘈|7":amѭk/Mŀ@<3;'5=Wunڨ徃nTt$ڨaEǼUnD #dLf(r/NhdCz>QzHi<'! d.a=!V\e 6< r! B򁵸Fڐ !T>re!%d+4tځPHCe!BR!lBڋCZ g23Pu!q vX KM[lsX&[ٍz'7OQ:5L~᪦as@28s2:cMWg?.=2=J <#~:p{` 0` BFE ΈzdAc!8lbAM󘻇uݻ %g ?QnBd4%AkظƀAVVڕ6ٜWYˈ2DCLшk_XJOm"9&(' Ve9UMcǀB &\tkҴI;v:r eY5yBòpZciv-4 ~/FEE#Eه]qRZFє雷kʴ\o4g6-#_IoH_}d6E:d2xN fA^>ph(rA  @&`7 DEL&PTV+ .搗A.!2y0f ]: y2!@=!eCC*CrA!A2^=$.iTEȂ3 ˆ*}Hg !CZʄty_m<rѠ)$3i)xam6܄4`(VmHU9p 8ɗsR3svl[OGāƘA#N(Q 'q .”2%ՌE? cD)/hϚ!ͼg{G rl S ! Ik\JݽwGGT~,kz(,ed^ݻِ!4N "e$$% $&n0+jFֿG.IjFݫm# ^Qu8=ӦE9aAJ9M%Yx-;v暾@9?x4sUMo>qHwIА #MU2dzhU 7keWCBjSSxP?E#6 eEZ`K!A5h۲i:4kh<@v{;tT$3ssӬjuF IM i-(,I/cΜ\i\wUz|y^]k1BLv%S"/ZUT1@lf r\(4PF i `nBԏ*>k .`4 i@Nq<@*y#t@zѧ2Ɛ&r2EPbfQ!#l5Azѹ i'$mH{M!#!8'*BZfH rN3d !S6f2Y*d^0q|S!I!`* rnC"dl6`@%"gH2rcwvy(ڀ hDMc1KA^΄MA9ET;!ԵcƎWnᜯ^C (*8A`2bUîg4J,Eb `2PЂ]mZ7D߯\/a%wFɕZm w]w`6m.%u|݆í[ջN}x;]ѣźۛ7xߙ[>NdF8ԠvB9ޯ[`"X ozl2[ =-=-^Fcìy^x416P/)^Nxى{ÇzvuL˷s~s`GqY#M& vs_04w 3B/z΋bg ue˚G?xkqe^`ɖCSzujtVHYo]n6,зov廒/ܽc5wFn6"^fGCws8leuf)q } 2wZQZ6@L$d?f7(;@B dj Љtv,hJynd6#қb!= X͡;Ab aB q(%8V" KBP Ɛ95d *S2V!2Q2㼅!dV`6qCM!O!5A527zqp<8T2lȌ!-.bHK!(rWQ)JCGq4 BWiEo@2G| r /^Cm(t[&745 K%)scnzsP_зWW+aML#L0M`̨G&m{l4Mx˓w:0ǜ@I';|С dLd^9D$'P4%i.%9PR0FlG&~vdD3L IՀ;+DbVGBQQ*n1 0lZ9lsOlPYI8臇;aEfs/hZcd[q#΁1.J3˜mv[8+?@mڨAbYe3^Gދ"z=9!hE-|WQ OnƘV/3 bBlٖjqC՚`w#I6&U_&(tŻӳTz "9IRPpLabu&IHx}l9^"WD!6t{ )1WPh&A VkcSR<~YҬ-ڎ}ޘ[DTjlH#K"D>?jUdC9,\2мB(CSɗq ]d(# vTLJFL A>b4'_2F±D$ jFD؅@2D9B1p$"rQ4f #8%!zN'M-KY2T2"o%!q n0܂0!Ȏ1>w!팳s%>ioɜ1 DbIH"P~?sK &.1#1 ``FHC`/Bvf6BDLb29p܀ @D$ Wj0B͋!ҫ{I~ U bmԡH3z2#MH`[Z,>[%ǻE؀i G[ 5"i`6Jp $[5`hW$kz)'Olv!n( 0 'rcnO\~l\$l|xf,CFdbBPE[&#X %8(6+(6 ")+ FHYV,Vq_ep`0(V+ƕ( NL _e!U82r\B! `eB i/ZIHk*BJCځPHR󁞿CZkHS! eBjyn0 )9 i8퐶ڇ0>BxT_mȼB*v!b_BoBf ;pT6$(sU&41a2 4G\S 1p%$ag@B)"8X38L_a ^+k$>έLd)ADaag\voЭ[z L&]w;|$Zya{=I &Y6HNb9VJDN_kdf =G=x,q\S+>n1Qo^9";#l0Gp,W?!,F0aH`>?- cHYPi` 2oڂUc<`6I| f s `jU &%-M(;! dp[@ZJD (UBP4B>t"iA0KS6Fy@JtX@"R!# $EBP5 P*2* i&dP 2dHr%!c~aBZZ WSHLHN!]EH#$"djC2eH#10L15~ @$ F2>~mET’e.Щtc}>>qlk%1|Qu뎓>mo69pU5HqDeT=g4&k{J+-TU}QD$$xU5z.J#0l ! (6x  j혌20@h>! K g KK9(` <@pz!!+μ 044caߧՐRچ jJkQ@!KDWDCq ]0 qqqT'w8ݻwkN (N@a1@`2|Il2'++_78223ӾLIrݡ4J<%,g( \B7( p'?1\wun{Ŋ`Pd~R}L$I!))jנ  CbmаAQQhsp_  pr9AA.Re=HLTA.*!1ƸNj190fJ9gq9ǒ/s*;^edh6Vw2Uh0AA{m&M~f3nK,~k_{Í7Tz'$[o*-`US稂Zw;'}%(#_ ]* _W n qθh999'M|!tرW2d3>9'B0>uR-^x%{zjf g}*` ps_ρ3s-;j_ !S8͜{ǯZtt<02R85]e/8 q!J)U)&dgi8dIJSiLD(z-ј#,>H;kԔkbmG\Q}%PbFqƘ$K1O,)b0yB.x٬fHnq{uT$ )$K>xM6Fs*B]ֽ{c[oݹs#.2xz!˧43L7o.**:~锈m۶^zV,:vؖ-[yjqͯK^c‹7r-܂~'֭^j*Ւ}?}ъVD] 83'ӫz4PW w'e68_iۺgwӁhU4XߩV\V*8P1(JUs(iQJ 5kcSRRhWUU-,,mԨ~MKKfW,!FD" >NJJқ̓ p ғ'O05MnڸQZ!$?~옱=cR9/߷w_ 8~xtLtw}]v;gϞ~$'^ʍ6fgg'SJw۷w_S~=qffUIHHh٢֭[5lp‚vmۙ+WvlLN/k[?0n|СC%I G *Aؾ]A%''ٻ?/'ȃf55.(,g?a*eeիWPP{jѢllݲ3ں|ZV*ǏOHginϘ9cO=n8i+ 4899YիW7j}QQQ{ ů4nܸEG9y򤪩111Z2͕E ""YfÆ [6-m[mӶȑ#%IJIIz'$&tc0|83+sޮm;ȟ٬i#G8֭ZfQWJ&#lذ!77Az ]t)<׬YK/=cƌQUuĉ|p5TZxjD.`9gQ9ӯs8ڿwLUi9}Yߏ ވޫQӾvگ*:2_\t,U^cLUU58x3׫oyի,Yvl'f͚5tP oϾgϞ=Aݺv[vj{ݻog?_?+-ڭ97tӀp+ Fxa߮];0yfů,\Oh4joϾĄğ~i-[lC~'-[x6mdd:׽N9]"c?`0f;q /|5i3O_INZdYzfgU78B 9W1F6l0o<.[:q#@69*]fyV7[~}=ӻWoǃ&ؾc˧}=-ۯ]m\7_gv97)~cIQaќ_oчu{ܿ]I/* go} 7kyW;ЭSΘ9cwrkVѵa/t[Xh____.Zh1`ToTdԈ[F߽~ EE q ?rȾf̘t-Z0A׷~;S_~fN0iܨqL;|W8ydVFV+e#FVZiݹk#,Yd2a|\L+\A)}}')'srv YYY͒ r'?v|;;硛(-\l1?~7QC <LiبmoWZ^jA3*ꫯ  :ܕ94mذaV7͓'O۷U5T~PSz- Bի71Q1z>A 8yc'phܠ~۷zP(gaÆafuJVt[mnݻM>-;/? vsaS g~vAڭK#ǎ[ni,[-VC]A~A^V^k FQif1c!_M.pDGG_^ ,`n֬iZ{jI;S_~iiiv쿟9~֛nLϙ:u*2eQFu2]ɬF}LO0YL9ts\cc|՗n6V[ ]wڱa?_:d5%&$ K&nݦuV-bgyi)i]:wqQι=zQF]69;?ydzv#g㦍]w]MQoԐsQm].WfFg-|?}Ӥa>[bgABFk*L;S?)ի~邂j#֮]Eٸqc~Q#@A-ȁX 4Hn=+s'$&KRPP@ըh ڭ:uX8Ym-PuGrhf-{T@@߯Uꙃ41MZP iTrݺ0e/[ۢT_@ PFMqF8#"qf4FcP .Zm-K~_R8p0sںuwlh " |>Ԍ P(h#TA-QMƴ%/Yd񤉓KĘ'ƙl-K@ [XfIAIvJLommfW^8gĎ=;(xP 48ӸRMҐ4]nb$yݸ~iO8p`}o؈13g4YLѪ&&$4]vfeR*G\J@ @Ak. !DJ&w{hwDoP/" 4ܭysbIM9V;:wܢE ը4 `:u4zW;j PZ0p|.*A.vq-r1k^uU垥_OΥV$_o,Xv.I~骎6+i (˶VVCO=V|,p8ӏ,V˕l6|оRee]qNJ(ewڿ܂܌ hݼ6uԡ[nkV_~lD,c$>~m^[m_:W_K\b }ȑ@0׋C{nܽw ݹgVmZ}y`r^gfÚ#Gۿo5=zp8{n㺵ֺ=\zsrs4Ml7i&&&FS1}ﱱ[;tP۶m_?1~|}٫*AWRo~L %[aݷ_[TTd5[;wCh6 n]ڹk5Ix?#:*]v11b0ʚ4n"Ib{ڴmӳWO",c_m^5W^ZoܴBs#2ׯ_w~?qE+(I0F{t8ܬ]ߕc2Ǡ?=tMءKܵKׁvٍQVrݻwl!$\is~̞v6jxwHnQ/g$'5Bz \8!_Q3(n! ۵os,>yP *sq yȑw䌻<.k(C1N:.I3"ι#Sxެs/\7;/֬iW л\4\G:x9b  qUSoV yk}Ȕ'Bc7 X_bNv%xK_rRW?/}yFF!DBKPJaJ8#,uw?~FRz}VV!o%)}CBzԟˁig/[zqQFEgfzUZ:B`rJO0 z;ƍuDbb$I.о]{edqwrJbc>)%k!pj 0?c`5l45q CmOީ}'M.hz =_LNJJ:r^oWkذ!UT2.'B( i_믷lr\ y|sԝEEEs~+;GGQ])`t@ιzOkX[TUI QLFCJq'3JvAN]%kFU|~_jLC\/:t8;+Q6 9@ Pݣ?QZIo].!O?2]]#@ Ռclؾb USkyvNNر5뒛%.BRZ[ykIQtCtס u{[[lTl9$&$u7o鈬f.]tES믾fF^+ujj*RhdU-tu߃{PW3-^|\|_)xsEUN8111Z zNww[d=hlܨqB|~,IW_j֖ ۤ# i pj;@+=%w-{~aAشi\ D$O'~7[lqݪ|giii`|L A5^[L8=ß{fio;5Mc4M )~|ۧ}7m떭qqqw_4AF\^⯂Q+Ui]̜NmڴydI^NJ3끁1[cbbΝr^̙3}^_^%I:KP]P&Y -t+Ż|:%crzꉏN\i%?;Fѻwo WٰFk(={Kyyy.p#?bwElv\TZO>q B]7rL2isU)"'N^3v]_ Ȭg;y|ccccs|ZB:9;m?|07bBao v7& 7s=gv0q{饗!];dܸqǏ/((裏^z\8N4o5m6{lxpkV?u~!PSJr#@aM4j1$Izg~?.tY[L&Yk?> R729S#,ɒZ.[a"|~jo^qKXUT0AFE1[Kxpc GpNֵ OwڥscFvo۶Mnz^`0W̜Rr%CrurׯUW͜9-ZK/!8Sݻ!rNKBRrH0/^l U0P0$p/y޹ogAA>f6x`Ͼ'}d.j`7lJn"PyΔ%96:t*]%ٵ '0w3'7''=G ^Ѝ<1Z hL+Y!yG:T*hh>62▫_լi#GMxg¤O'18G!Wbl8~po2 U*AJ;zzP ^ c̀AUdcccb o8 RxZȘ[HB GOWT>1o ,ˋϿ^2O h1H}H_šTPJ U]җ&3Tq1✿<~;wJx2}>ZfJݳ<0zz<2"XIA`uٵ,=sOXeI0) ANn΢%"Dqe 3f̟?QQQ4#D9}^/2~뎭GᜯYf붭w`'f`F>?4QNLlM˜sċP³'Gu,<$[p;y,~111P|QXzjX VM5< ?UUByyy~^yބj<'5c&MCoڣ{ƘDzq 8q`)se7^Zxi_c<!ǖ4kwv;`wnAwl+B?멈F?eXj[9hV-O? 9*Ԕsfi8[X^o9B]wu,|ͪ^Wc#G:N:1ʕSq@ kSbkZ] `uW(z7ɫ^^cp/nBOl WKgC%^ "#eR۳qSLy՗_}Uhw/-(*(O (ϿC=-cՔ&}6)Ɣ+B#+'C 裉QN+]?# \Sʭ1(3ŏ1*nh=mt]%< rio>BuGnR _ r.~B(P}1USg̘aU ' -96 9;pbe+!4?p-€޽gеCMt Ϟ8yޟԶz*ٸ^o}ޟ_۫2A_T9mD@j/TU-y0%Æܵ\^f%SOg޳;5%j9?rrrN;i,p(~JT>叕GJʜ4iҠkMj~3 {ѼE_~QjXpI^=hK/psrs^{a7{=.Zȩw#0YŭT%_& Uv⑲,VK۶m~#`чqн{>}GEG-\0+;aӆ7+? !US322Ǹ<)O>$h;qPzۖ_@)*>s{jÏڬuˇ+ck9k3SIԅ%#TE]z5` 61V**r{Gy`1hhyӲZש_\,fb|)'WԯyaKC)0ZIR7ovu4>zhFJdNMI5YL1Q1L9ٴIӜQaa!X|b|TDBcQQv 7;28vDĦH ms?OqF8)崛99&)*:JUԴԴ ? [@?F0IJnW5U , .T?awBj*RZ$%5HZx!'9߽cjݫۇzd4]qN;~qAa-Qhc~kufd tF^vd2] DQhnvBRm&M7&͚@|B'+ć4 rn% GT1TP|. zw#痫M73,fSc`^C=f?i7㏮TUrTuTÕv z/{^pP"Ucn\e]i`8BI"_MOп߀֭۫ym`![l_nW`P)mmKxhCZJR oK=w'oCj6Te*Bq;ri11A-XR ĠCgq1ƀv{ Ng?~W*زmlѪڍk׬_ƬXb䈑SihT*t~^|ÇxofES8%C˖,2_M஻߿E9` ={@Ӧk7~^W~Crr`a KfY+\yJ 7?h5F9|^_aad!DFGFc|njEڈD4YcToKWB9MMn;61ֈYn&HkbWjPAjZҗE-[UZuMmU(11Z4o{)'N[hѿ?W9t'OןÆ{M7iѢES׏ ի7=ܖ-[ >hP [_**M 3BKUdWcN 9eTaO@@_~ʕ OzH"[3Y|\O-qo߾Esj*8ӿ/ uS5ǀ0Rwyg׮]E;we[wyWd`AB02]h`0ڭK͛+L%}UFNA?cL s}TaJW2U2~\𓉟hT jrdCBv5_yo|d/Ŵ<ܱS{uԻQD^)CS`*$* Vf(tdFY YcPELN f(Pbg.ױC9ٶmۚk:wl2VW`Ƙhp*S1Œ3đr+WcZ{ѣGgdd|G(xƙ}aC TTD5j7$BHa .z{dBWu]>i\TF5a.qa.a$$1ĬNqVf%Y_( TđdBrݔQg~GI߈j;P>"(!!g"WQ-[hzB BW=k@TSX{~by^on^/vm .lبmۇ Ҷmj—ךh;ϸ;vk>?/J)GUٹLR~rPVJUgtIJt1V͠UfSV NJJ:hh9̟Wņ2)5nx~ի-ZpΊ V"UYL?.rɕ6%DzqUU-70\%b B--6ǩܡa(& !D%=g7y,m*_r27124|=iNEQpW&9G# f.q8tF P86%C/m,&KM֮]ڤQC#Da( 8f5hڬܹsglZbc8DFCn B9x9aQ[n|ޣN/b?i=\>;X:t2}{N/hպ<]p0 *11>8HT€m`6;#e"[VrUQ16$("TccbC( vfQd,V &X?bkؼY>dz)-,zj`lڤm #"#{e5id+ "##תe+0 @￿f5͓Wbş+Ə |YqNJi&~41++kj@-PAk/]Y!+  ߔ0g)[XA$9qqqz@m۶m}Coz_ȅYNӢ33CHNXr^]#9T2;1dN٩lV{ƬvjкlyTtd {0%/x 71AjXA<2ȆW??6Gڹh)sw@A6d3\W6(\.I/M`q8>g݅lf>G$ot:-f6~p1VG_OL~5;vsϿ[o=tPx?/Λo]w5bXj,VeVҰ!9רO|>ɠ2Zl9bIUA0Sj"{7٤Ofr~8-% EE/ca/yio/YO/Pz5A%}={nټ۷ҏ\}~π>}'{ԨG>ZB lקYK_̭¯U}eBMu+Ebb_ kܼK.TzrQշ[s6tcsЛ(ϡm׶]iڸg=S6m{CRmMw0țT&- %Bw^iX}y_Fy:\D#$.ܯDGJ9-A8H/iL {"!Oi٪e-{%!o0,|*vjS#ÔF!*7nN)-7==PukK1vw@+̪QmۘQnsR~.s^XTh2L&>"Pr)yUѳG^=9LޕIcZFfd 0}rLVӇ|H0INNV5)9ᷘ6mlۖm*{|Y :l@R(0㇪YnukI&<*]w_̂sޠA~XجV4lݲekfҭ۶nݶL֢u B˦=yTYW7eM[ Qv޿ʡ_JKF|݃>p@j]p&B*xsEQCmUU|8qS}!H;jj̔) s Jk8Oq\"F:g2V!w':u-C KT/P}nFRSSy2Ky˻$ɲ|wHdĉ{u+㢀8&bϳya |ޭ,OF ^5m5*AƘ$IV̆iL߀s!x]v<$juzoQ/wg?%60ȑ#Ϭs]^z{׭V6hزe}]; u4؞q &{l o2c< EٳgX?y}3OdLs|]>ҭرcBGɟCl޼G Ng2pCзOr)!W_ U_%%011K,UUl=zJMMݷ'tަm;QQ!D)-#Mi]j K(;3޲e%K~:m u BHfPJׯ]iZbb~9|!BH0ܱ}GVVHbb⡃SU)Y:Hd<+7^W5h4+縝 $ JR?BƗSoݼ7߼5M;W5{7{O^ϳ^tqCx YҨ觛5mWO.8Ƹξ""a„pܘIoKIIy뭷bbbs5@ pwcܱcy%$${v{Ηpq/8䪣^x^e8|Q,XpN|ĉ;Yoƹs&&&{􈞹…wo[[bO?~|^^ {nݺuff͚W_6n8*pSO?4//Ï>h׮]~7iӦ 'O^re!B~7ZnA8/3Vu̘1EEE'N ͛w1gΜ7.::ƙ{+VXb>n&Mj֬YQ! p.9?C>E@UՒ2o4vرcGYYG7n1G|%j׮޲e #p)^8ǜN\`߿}^G'뮻q]i4۶m0 \Fxlgǎ/Rvv6СCsP֭Vj}p/ ELxСŋ߿[JEGG7.)))ܑA [KZE%ÝBpN cT<% ǏCCr ^3 p;>?̩Ք}UQ#QAl\ءjkIs'¿ÇopZCN$5;#ݻwk׮?LЪrO#v G U~79ΡApASg͚?0ر#܉fgR?' h۶wG7 Bu&/8W+Ui^pAAAA8; B$  A B$  A B$  A+Jn. ¹rao{0p{A.~p/  \9xAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA:HxAADA8mcƌ wA( m 5^:t( pG/¿{e @ A*ѳgpG/¿mqy7CzEI wAlw w*| 5G 뤟Hߔ [V$;N%pG#xA]Op/ H EIxAE2NfԿ>l@Qጉ&zA-onL;Np~QN$1q/¿5kf0O £N$7QAիV?r# SGp'h!}_}1DusB fV{ī0Ÿ#u( U|~+X+p':B4 6lY!~]!QAe ] $@ pC B" asS_-N$u8/…hGg<Ap':H pAY;KL(]q/…s+^ /<aDPg#xA.³B}1#u( \ ?n ~H2D/…o}QP qɻ o p!|w'j"$΄#u( _?|؉f`pa/y4 `DpA8_f͙uۺ۬ecC ¥BxA΋_~wDHY05w"A/¹7ۙwSϼ 8/9ݗ=~F}]o[Q!,D\g>^2 N$(QA8g~<"܉% pn2[VߢbwnQ!Duί#)4 sE˼ ( YyLf+JQA8+O4TqwAA8s?LO.tN$B( OU]`_ExAĜ_9@ ԇN$B ս)4` w(A^vw} LY˛Bp'оpG&zANϧ>U_W i*L'<B 5G |h lu+^ښb^ 0!X8/ P3N_~ yHLt*vPD/BML6gh-K?PQA/& #t Cp' ~-^L|SS0:@!܉AQA҇oj(4f?eN$Bm/B&}0ըW`]+@p'4/B >'XYb$ZA/BٸU:6g,Mp1^So/:A{h?yAH/BȬf=r Qxt }% ?}SO^tY2f>N$Y^X˂G?6X k;Bp'l/--nPI6FQnC %mҥr-K+aegD  ¥kez| }/D 3 %j9Ps| w"A%q^.E~dړWv?\W; (pY˂1> 6N^.-.s al]*Qlɲ*腰t w"AN.! !43zBp<GpI㜴uFq0 w"A/Q5ccs ^f.+܉A8Do98Cp'^V\=B0; (Pg̸C$D@LhD \8 By. I7a`C pA/uV=NL&dQ$ )XGNp9|7; a [6ly`> n;܉AQH92_B /uBw7u`ZLhIDATHD ^.znxkXNp~./?m`HD/~Gt9|> F; ^.V[m}pɃaL] \|[7Y:4vP \#p/ \ܼEnʴfFGwA-`D A8szo׬UY$ /@a AjpA h7o^Y.Vv;"D.X#B D';A8߽ow4W wK+PN.SG}1GD{; @xAA~G<MUx%x  wKO<PQK)›uo. ,0Ƌ;; @δǔ=XKқfC pGo~2/?- a-vC p1^u2FwÕp|'N pDG?fڒK<}.^E~ n}x p$ ;px}[F0X \D0Sÿ m%EOxA'~2< p\7P  B8-YzBq0 w(AQ!=_Q4 ~JpN^.?}"018f{4D; u(plX=a>@D4%B$n6#Ȇ7C"$aqShP Y^λu+mk_Y `pP q qGGv`PP } y{~! w(A. Ҥ[ZkY_ƒN$%Dts(QF75&%~ _> ; q/RFJAtO;I3~C p)^Ι_|0M %%JxA87}w.\}8P \Ds{/! l8p4 *ܡA/gWޞ>p@K~ /gC+o/S'+ xl w,AQLO#WϠ4H%D " 勖g v|͡7͕peC 'Ӱx7 _~iz뭷Aj O?6 s "ܡh߾}#B  ,XjO@,7͢_>pG#xA+&6a3kpl… 5GPc);};hmЬ&D:t( B;twt8ѡB#߄7Gp-pG&zAG4<1%h"{T?sGҬf5iIޔ eOdE}ԟި AQ\ld( JK) g4MuP " y$7~ދo9`s*LI"C! 0#ƍ^h9xux;ڬYB -[(95&+!m!tg 9lUVzCBB&xgǞk?x` ~qwP!t`GP{v9{?^>g {ݡ!M ۹ќG/+.Ko^BY.Ϳw* !n2L$$(D7 IB >;.aG=\CucK>0ƍsa !nLzwѻiC2$Zк;(0e놭 `pw\!t[Hw͹aEÉ{O8_?O;(`Gw{ _/9 wDžBLNBSK[~<| @x Aa#C&xt>]_vϛjp$tw\!t[n_. ,||㆕X </DACC&xt;*P==gg`%@* ! mgiu$OBI0ȣ='sAgٹ07b!gaGnj_ݪWZV[Bp8!pwt!tG)?'=@'xfCB;&x'KBJ|C0o[aB'n/}ٸ,O| G(wB=&xtpi4ADBnvh08!n;7x`9y4D AHBnʚքy Z|GʗfA * nkMc4yyq0g!0"t 8Q t=ͱ|+@ ,ow0? O;4n~! 0  p??.8ToC@`GQIAɂ ƕU=Xr6B]wݵ}vwG`G#*lE6=?ıcB_҅XŒʲw7K‡8`za \9 , l`vG?Gw],X\TLe!`9ίFYK#BqIwYl+{ћ7/a6&08V;LB׃ ]/rsr=ڿ Hw,a01"!=cOpp%s` ɐ0B ђ&w _[ q牐A.tG!tSu_.zo!xr?:B )rs-0? 0`ڿ!M .޾m;=~8 0BG'x;FB7&e],"?%۷ί qx|wB 稿T$0y$H UE( `T },B&;kyzi%p{|Q8`! \wBhkrH GY ~}(A).`F!No? O;N) 8mC~`?8}.pS!ݡ#]`w‚BយIi4qp @ Q0X`,rw!nS]?ﵽF;̩3~@>H:_\gI@r N6 ac` ,0A$BnpTE莻5oݼ\C@+sr@:S:F+G!Пp%p8;W&ȄL Hǵݰ΄k>+ 8tH +U Ͱ9 wB7m⢺^| !aw\3}H -?[W t&6 !hfH 0|8Bsv K?Xsv!C @,C`'[ !vOJL~!r[}B[$I[Q0 ˲įB7?z,<.a1h4~xp܇|/eYL:oμ39ӏϪ 5뛷lғ60ӦNk?LԴxIX%Y,F1sk4Sϩ,z\nfM6g$/er@(ޒ00w)u8_<NgݽԵn\=}3EnloH9mj,_|Ns8]'˥{{S:/W?EUTTL.t$ê<˲: aצ}5KR?@@aMfnXX:>KkCIR&=y8MVJk݊R-A|_P 555id2 !a!ee B"/?!IPR$9|w9֤[["IW)SkJdn^nHpǻ}f;Z UUQQQ7rZ2f̘W^~E&)i58p 22>nJ=Ӑ$٬or\zFGFliqiIiU:X.{KD* j Ο?5u5Jj7XiVk[[r#GL/)m[͸𫿲lVWۍ-[GzZKtHw}K\\\N+/y<\H$(hGzigI$PRRBQTPpо.^RVVv9.H` .33377reD& ]pd:yA)xΝ:}… VU.4PPtX&ueeΝcYV"$sss/]!Jf;aO9 H|a8}&I, 8y&L}}\*>}ȈȮOH$mmmzw3cbcOW~uׯ]7.EQv7SdN?~6i~4]\v+nk}uep@f~L( u Uh>z董%"I$HWt[ gAq\aIkgS'O=̳Gp5)p9C-{=I.lۼ-%%ȑ#V,۳wf#Bߨ߻woVvVYiٞ={>Ӯ]ԃ?_]xpm?m䩓.^lggrΐ$y8ެYkj㏝Yz}^^^ii],Y5G$5_PxaӦM;vv>t_/ظy;::>oٶeQO?}]ATUUޱ;::$o޴9/?o͗kw姦~- vbI^Aw4M766X7^7V㎎ ?nUVeeeu]S>[ ?EQuuuK,yz(/-/,*,(*wua˲L&#:e9Ȏ  |cl|lSO>T(múDbUowY`sݻf3ϐe.\XfM!WYҲ~yc||_~e^{30sx%$\cVfjIHL{^^^ϯ߶bL4Q&](m۶60v1c|w]v#<ss=<\ND+/cF qʊZþbM6M=I߫8qC' (,,ܳ{\./P8"e16{VV֞{f̜nk7 EmڰIdd8^)Yv__XpQ7o>wnONN8azj5_j&O)ljh(bcEѱc>>>,|U:p}Efj 6mOZJm]]ۋ/,;uԡCfffZ{V7n9~xB:qСcim7l>rѣGm6Q'x*TÆOܖ<<#/rӧĴcv}Ƞ!11_VTUkBсCFZ?Y~߂^ Wsƭ[OGDq&; މ'Nŗ_47a픩Szf#Iw*Cayyq446\|yi^uW޲l?_=޿ے$M4AR544,zcQvVvcbcB#B"CYUx)ƍw:tiڇ~X">x#MӲ\=Sٽs;$Y9L6}];wLgO>uӎ}9oӷW|?<{e˖M꛴UѱUU]~ 5XxiNNμߎ5Z 9eIOH7q1 2,2JrԨQ\L֙ϛ;R٥YZ6<<<)>)yHtiH2}l6{0|Մd}H*rB7^esa91O=:~x_0bBU_)Zjզ7EGF/O$,pl[fnC,Xz A5k._1rI!F13;$%%"pњWZV:n8  n7?T)piBŜV ')!s6͹薦}{{xx(JbńԴ˗{b?v i=c6t=&|!˲qq\_ŘL AM M%%Æ #IG#/_oD=CMkj'N8Ɔ?K`ӏw:?͹XbO^ jL йV9v,&Μ13?Csf;[ʽ$Eƴ#iG;j줉'rB6,;sԱgwq$'?~}) d̨ yl@&b!l9ΔSfΞ뛏-( 94ǃscG>#V4$܊]^}h4|UΗ9\9,$H D&)/+/Gras( | fDdcǮ"h箰,K5 lZm֓'bŤ^I]շvD*aFV*a8|764l60 _w8fYLʫl2[r)15X"fYk65fl{ (3 G8Ƣ7xR^¢ EwM/دġ9:y\%IJP,ɲeXDŗ_lC=SOGn]nMcY' D&ޟ'-],VKk{k23 Cڤ8(dr|>eY|>ܑgh4 cF6T)h t$\X~ܜOk P,aX֖]{v1 #Sʢ"H8p8Zv^}C˞_C*&$&֊D"Xl܍B$ j\u8`ѣk]k2^~ןopnTDsFau'0_~Q֢Yqes9ܱcN4i/>cGahrCs̭fXd(.")I%Yl4E+.`0f)Au0Zgl7YD)lmmm"jJR׸ @$:qX!Gl)˞'O h*ES.]z{<ŞV`0D~WZ!fMV}kZjCY\Ƣgy&*:g3>n|Vr< H+],xɲVK$AREdS}ӑGHKKMcY_VZVjh3V+u8OI9DZǎOj@"h|5r$vSjnnݧwǎEEaayFGvv\aF5 J&j|uZCzH)6$E 6"`jJp(jnmjZժƏ) ;cp~N XW<>KUYYY[W{fw]N|[@9X+B. ߰^+=?2 @0VY>Vj,t1$ҒR0rrU*Uѹ(,^9-GcǏ:}ꖭ[>^Ke4X,...y~z>oRrV+JF5fHDdgNdYvpBb;,) *TFfשu!!!R4lvBbB}m#gfu.%I8:>*e+iG""#uX:rڙ3;v;A, ,sfٴ~Sn^#VyI%6Ǒ#GwYϕ0v] =/h[IStȔ)#׮]tR# qΓ/kD飴m'Oҗ},;;u?&$$HRal6[әBAaCW݃%ֶ'w}k֬ +\;Qv#H>O^bX( lp̙9gCCh2xH(x1_%K}  2lÆ +?]) dIWuK>iw,]T)y>fu߯pɇRo_ウ?p@L\JW_ ]3,ۧw__?x_TWWW3&"*"%%e偁>t.ʕRr9vإ˗z}?VWDG+2oiS5.;tÇ ؿo^nEEX¸'.YD<_p~EEEK.}'zȣlacUCUmemH\v]TD@ M:xv5RF 4O> yO:|\9}w޽;wzp杽w |}l/].,0p@PPc-뷔TT^o@H`ȿ׺UTWUU/88x #G E}5"ziSoX2d)Ӧ #zdw}7~ي&_;rHv8peuel79e, ,K۶m~}վ#G;TRR2|^o>c)SϜw}ƦƠРa`b80ﯸ\awf̞ٙ1q1:p8k׭x=G:(_gHDQ?|hI2YYcnjUz+e2H ;vl\Zʤ"(WbľAA!!!JR&T*?_pppHpD"K@,}ՁEyxxywm2xgԨQAAI%' D%VD1 DZ/ JeDDX, Ea:WD$ R*aaji:&.F2J孼0 XRRV;fL.I̙34o}\BӴ_dd@ h4"($$$44TTG+dZT*Ubb_jqJJO?bOs+rHOG.j׭& ʥJb622R(OVGGFKR`5r ._֯_)SHHJSP(5bԠĞАP???TpCCC"O+- 0iK=%HlT.虨y|UUhJL<A(EGG}!5OV2W# BaPpVuVHT*CB8U(a!arAAA[`78$xhPBկOBV}}}}}nAAASNq쬍}Y~BCBSRRbcHy\=zhFr;&.Fyɴ-2$r|.@QZVx+$~%JD4MƉb"bJUա!<O y{{t: $bI|~pPEQ>>>qqq|_ӑ$|||C=R48(XVT2[邃CBB8{,`ϛ""x\^tdbbU*UllX$(J")j:..N x#""<==U*U\B˓H$j:11Q$)NpCCCTL >x"&oݶ52$R 7GDGEFJJshOЧOcG4)򌈈ppR*@@\lDjRT*z{{P$54yJRվ3gf0H|2/HJJ4q J=@`p\.):11199Y((IJ<,Y,z)h6bXss~aʉ+76t8"O!CridjOǰV8a700PP{dx>>>qq.fРA"(8$X()#(rQRTiX;-p!D/!W׷wtg.h 1zwȕ{ǍW= ~}6c<Ѓ;tz^YZljT.6|akw%ȩn»\_ ^Rt߳\we+**Ne:ej!Wwխ.Wgm)$w(uyUEd׭m&\.7::z Σq^3ԮfeZ3W[fvخ?zu۔`2{AC͚9]O˸zv]c"q~]{/tr#G<{gMzW$]kEwwC8׆Ю:@Tpe>GՖ:|G-.)>qĴӜ:tz]]cGyƻܭ~o-9ܜܦƦ BWSTj {z+ƌ3w^z>[j25Nѳl}DXWeK_fhSz+g͝°5߫W?دkA_C **_z/)mFmE͇g4`31[;ڸ~j |wh.}g)^_`Y6$4dyB^7 L[w?{937^úzCayu 3W >F^OLӈ1#Y_שQy6'a"##?,<25Ƌ嚋'Aԟi uiuʩJT%~8yd.:\֔72+evё4NAxyy}әeK'09Ͻŋ"i\nдFղ Xp'향. ط_bD@ t=x} xo;7`Y:H孺[:jZV36sϨ'Hp8˖|\'˖kLg/B㏖onw&ΓA"ǧړ;+w2D,A"{F/ AjXBzغXXbgϞM;vnYM˯~ =C5V_lw _ 1&b5, WbvGӼi^G)DBvC잣ޭM::`Xx"Cﰙ 6y?N KD){@یcƎ3B!th 2 "?x"Mz SCVk; gO.{*IghamכLf!{?H@A_ #urIa7Hp#B=\IcBcuLPjm:f*IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph.html000066400000000000000000000110221222557406400241720ustar00rootroot00000000000000 Engauge Digitizer - Automatic Point Graph Tutorial

    Engauge Digitizer - Automatic Point Graph Tutorial


    Warning: Not all point graphs work well when automatically matching points in Engauge. Before going any further, you may want to read about point match requirements.

    Automatically Digitizing A Point Graph Image

    The following steps automatically digitize a linear cartesian graph with one curve.

    • Import the pointplot.bmp case from the Samples directory, using File/Import as shown. Not shown are the other methods of importing: using the "-import" command line option, by copying and pasting, and by dragging and dropping

    • Click on the Axes Point button before entering axes points. These will define the coordinate system

    • Click on one of the axes to add the first axes point, then enter its graph coordinates

    • Click on one of the axes to add the second axes point, then enter its graph coordinates

    • Click on one of the axes to add the third axes point, then enter its graph coordinates

    • View the processed image by selecting the View/Processed Image menu option.

    • Tune the discretize settings using the Settings/Discretize menu option, so unwanted information in the image is removed. The dialog that appears is explained at Discretize Dialog. For the PointPlot sample image shown here, the discretize settings are Intensity, from 90 to 99.

    • Remove the grid lines from the original image using the Settings/Grid Removal menu option, so unwanted information in the image is removed. The dialog that appears is explained at Grid Removal Dialog. Note that this step is unnecessary for the PointPlot sample image shown here.

    • Click on the point in the processed image that is the best example of the type of point you want. A blue box will appear around the candidate point that best matches the sample point you picked. In the example below, the leftmost point was chosen as the sample.

    • Mark the candidate image point as either Accepted or Rejected by pressing the Right Arrow or Space Bar, respectively. If you accept the candidate point then it will turn green, otherwise it will turn red. A new candidate point will then be displayed. To unmark the previously marked point, press the Left Arrow.

    • Leave Point Match mode to assign all accepted points to the current curve, by clicking on the Select button, or any Digitize toolbar button other than Point Match. If no points are acceptable, reject and/or unmark all points before leaving Point Match mode.

    • Export the curve points into a tabular text file using the File/Export As menu option as shown. Not shown are the other methods of exporting the curve points from the curve geometry window: copying and pasting, and dragging and dropping

    engauge-digitizer-5.2/usermanual/tutorautopointgraph1.png000066400000000000000000001202031222557406400240750ustar00rootroot00000000000000PNG  IHDRzx pHYs  #uIDATxwUi$&TERl _"E@t&$dIv2sݚM(IȼwwLs9)xGK/t}!@QD@@Dwԁ=) ⛗  ף>! {RBzc(w}}SSSMj1">?Z۔wW2w  UEJo~{7;]Jqc_D!b!(ADP 0pt,4 (%!By}49.倪A0-:Ќ!?T3\ ^fЀb @MD0mP()!EӲ 9jzmR AP.F$B50Kchdk@LtP` 92v1 &9-4H#5%*R4T(Y@(LD! ͪ^U*4ǹ4k륹5l#5fNǂrDE)$(Rbʥ2"U@L R@@AjP( VH"$ Uu$w>..e.DPRjQE" JRd eݿFwȑx E9'T6֖8g(YSFtQdEN@sXPwA$7`%C,!J֞g(GLmMqXd&Jn2bK(a- K5[ %k)Y$=M͍ h6)4ƨM4u4MMu6#88SfpºC5dYKci4c6%.J fȖ4e4́X 5͐+x n,<\5Yݰ^U5\OSiuQ[JڒRMa8Àd!Éfhn"lCUӒ!Ɇj&#J\,rBPMTm jM>p[}P jJ6,1Bibf] N4:ji'yL$ݏG6f6^31^35s6kGu5*Un)BT"%Ġkz@ j)D#1!AՀb躦뚪(PMS0]zX)WVw*)MMSJ"0ThZ8pM_xDSC h[H E ]M )9lJ_DQCRn3q&/XPtlL'5ヌ-,b, . F"IB]̓hY ')1ەK!rEZ&vbb$$PpP* h2lE&"JDhJ`V@cRHhJ` d ˦G㎦YDCf&Ya2&&x e#! RILD?+ VgٲQrqfOc^+FNVt}^xmΉƂesɵOoUkkBh_ 3O/ldo0p,}u 1rrB2.\]޿. DO/9NVBp.]]&\G!\9MI;m;GzF09D ]>㓧gi+O>Yf!XSDC\ ?bfPeаR k*2qz^6-!ӺSB,‹^@<,J s!tPT/.B5EDR*Hۛ\D r!>B3nT7ZTH&d"ʲEa)l !Xԇj*H5)TGݮ:rMlq}Hi$c2@<ƳۛF]ݏ"a{M".4-/C<Ʋ8A7CCnpfR#,5/ XVLP̖|Qv%),}XocV^50G8ROmo[5,Cلd  e9p rT~ )hNPh1/D:r]bl `V\Āf4̑CᐣQ4fӤC54M `P@"nMS@:(azRR'l@:(h6XT2B q(h&cȗ d@SЗQ44d4y`hH@y@4ӌ9Пp1MAp h2 \b/cP1! $ 'OCh@3`8A zSC5 Š0T39r@8f?֡7 q6HSP`P312ģ\UM!D ML$P(mTOM\Ȗ jfH Pp@"Ym>1M҂![HQRA$ZЬoC4j3ϮW3yb=yFitݐf]=ؘD@ R J*P 7\߀((Rc$TDP")) _}=r~{YTHyGE (HY,W^[_HwX,tޙG$R#Mmm&׮ͻq;ufW{{tvi/1쳾:{ھޯzd;]v *yy;n5;?w/ 紜pͻ.>̐0RpYy|_nu2h׾tn;m~}g;\v w.W7_ꃿ}++ko5џw<:x{}}w^ :tvoW.A>1iVP"Gd  iِLmBلX B!P2Y`ɀJ l$@" Z!AK d0hnB, -(W ![̀14%$NOX3R A%ÙVՌ!)48uP*eC"΀&Hf!B&6f&fa2֠f4(!`T iOSL\fN3́bY4=LQ4syj  !B&X2Y`W3fCT`Z3 R I" *w'Q.{tѹAUrHAЩ[oN;vwְ'7c\/AqP(p7P߸쯜v˕-:їTroj.@,@tq)%eĥ`Bl__ޚ4i>Narw;L1}AJWAN Âm{է{if.T̽]+ܰL+*K:=w9uwmӧLi|w}̞.]kGz/a ֚/ll?]ߔsR9f92bJ0!$|֦A 5)PUh^PhM^ Cc`:BE bapd Ԍ=PhMª^@ M#5#P4XX\Qդ0`MUsU(*y &`U BSqhBf@lBЀfuhCwf@ :M. ]P͠B26D*К^n jfP4-(T .!4-5ptgAx*=Mjq5{2HF 7p f0ZLaAM iB塚7A4 <NU5WhvU5פ@e([@ H, 5JW5ڒ~PZ⃚}Yjd $OM1X45ɚ&x]4#5A8MT,I 05 n+{ Z3OfA3 7kؘUQhB?+:#LU 3& R(shBdZGӈRTF^yu AJ o>QuJ QߧH" \3~7.{o-H9oH4JUQ@Jpm"/w%x+"w(h(JÈ9Ecy )@HD@U ) !BFLW@DJi"myoΧ ..%JY;\I҈JR@8T ޜpP"cX#SbW\q7P%I'MnjvKϿƛf.Ɠb`İ䤦G,\'1bDJE %A` {!k{A CWQR@$Bs R *&$P,C,@0{!`@hfBmA{4CJ[71 b1u HMB"F4,(!A(ZfД! yuHơR ؠ& ]=Uͮ^(DtYi\jGh `:M!:TӶ 90gkUGjEЌŀP(A8 CIi £jfAkrI4{S js]]Rb!ͧk>eMwdr[Y,L{A%55뛤9^316sR#hbq x|GFoG̻܎vUP+s3/8֒nPP-P(䄠@ RN$RE Bz_q"r.<_RtPQEDU.̩?<t ;Ι1 PEA)HpMvyۦYu+B Dxͺ{s{}zA.s>~ۭ[_sْzAB"2B˜Љ:gVRJ,Tݶl׮wum3/fq&8 .Q>wv;:z{\sUf|Skm&y~\p@;`Ԗ]܉~g%9}|1!7V!(GW (+rEX_ض5s]mэzw[T*G@0B_P˃A* h@8Оt liBsJ|AcbͼV5jʰf}! @Ook*u]=Ǟ~uR*P@ P:Gz<%T%K" %>RD?랻n{~G>9'R{C $fNӨM#% çTB .*eq=*{c)iٌ8њPwuKna+/V;@>L78O6G,[ؘT{5;|o4r.ϻ*cQG^km|XR Q(ڍM|XϾrӟ7(S*Sy+W?}"prժ._wS٬knn&=gҏ{ɫ=竇KI|e8 QٝRBcL46G4 U^|7)#e aiX@0 \ M*Ӡ(2¾4 d A6'$@cz3rH!]ˁx eX KB TOQdh@)=#4ߚfXJǩjJttMjfxͮ~ d `9@eOaACJILiB 'R@CRYp<"Xx*uSi@*L [ӆX&M%c/Adf$iͣjqG h꒐M B= \@rf4  J&|$PUiJM -Г!.$-ybaUS`>.)tU4cQnޭ^k>LX3;|Fiz]flg\͏+c6suy Q6Ņ7( L;#~X#H;k9_JUADu:G}no}PJ sv^! )ȋ/.`c(RH!-oJ(Z8ؤRLfy8;{^.S3_=;9' [=.$3cJ=Z i[x|Uɖ˩pLBM&E)2RjptjϕrӴ8A`)DDcA*iȀ@g(0*Xg Q c&t,UH",%\Fj$8fHJY&SYi"TAxT6IDeB! DTģ<[ 1 :.&t4I""]!eij:Kitx Ģ"cQQ2q&C0RY%A4z4s蚖(i<HxH?f$ɑM+(O(QQ6v0e$ÒIQ(X tV  Tf ϕ 瘈5BDDcA *ic )L/i`$ IeLT@ @, M{ kcj4L&Y$7fL~&RYe\fN!y$wLs*UEDhq)*(@K¢,PE5MJ T2J" 'BU;ﺳF4 Tdu&AGC*BE%JP@KP zIJ$.o5xd_DT.ڮcg#jTMAlHmLS[ҿi Hd0fo3W5 dHB!~?{"`zXB֬Y#`Սo0@(Uu X+)RJryA $󛗣o5ASq~o53 1tk;aXM G^jnh'H ^& |:# gŗ_J)XiSr)\xwi.aP^ x:)S444xntᢅ][[iPp~K@xAA ]۽ mmmSҋ/RӴ۱/_pөtT9cfXC%K,X`Kضv|./tmRX"6\\*CABH1_ ökmm:t]w媕mPж+VtttDQ)eggg47oިBK{޹7xSSc 7|sԩP\]ފ3g*Rt-Ǘx_=q>^Ha3{FOxЁGvD4B̝;w=ƛ.%TRBB@pf̮(>dRÏ8|T4bWz?'pB0yĎ\~ %6=Q<ýwx\! |L$-2mc;w^H=kY/Oҩ/KE! _ qAq=P2dq>}jR`[3:g)Aoqk.vwH~ÓxҾۯ{O8޾Kv܋K>8d»PT)2ɘd޾h{Qzҩ'g?c=@B:n2uJ0pט||||61acs8$>:kK|3yך\>G(Dt{Ͽ{4C;s,\0dv@|/z|7ߜ+SP*W@os 0nMV,_Q.wi秞~JT>wmU*#l2f_|[ѹ5y_ܭu߿!߾pS"JR}/z[1?o;cbطN?k?w^8+RJ)%H$HﳪVwW G~{[\0/>I.u1b8NwwkD</J=0Lygn~=k{xݍX܁nܾՑBMӒ_p9_;gO~+֛oy̚kN89W\`ovGks=7{D$^|‹.%ϻ𼋿sK/{?w}>{ E[^ 6ژ9;<w߲^}UK/tr}G_ye]vg}/45:C?{oq.Nf޼ ~4νޮy6l;Jԧ?Ą-x-ηs_nۏ<[nq)7p)' ^z%"ȫ/u.~gxÏ//>pSVro})dDP >3LW^9yh.[C^>p?W5^҃-r7.pm+/ ve3O=_{{[U|m1"Z,2ޮ^)e7E /_>cԙD z_9,{= }W7-Gzu\q/6駞|sksɣ?Z.zBvh,Z۶?LE8B,X༯+/sQ&@B,S55לmmmwx띷: н::=A=X,%T^WvMuJ)UEMHAYv믽ӿ j+PH$4]L<_fo~sWx/ig}pȈn eo~B DqqϘ2윿xp="͝wﯝ9{7 ljTS1٘L$?q]z/ p/ M<*(,e)%LH9g !\2F}^ ~f׿O?tT3wlWTRRguE^ˏ<:˭~[A xxUBxpHc.CD.xXR_W~駟}?t/=gk;vpf̜;[fL[v5Bavm.8CV2KhL(et#ArQTe?UN>n鎻:u.U߿x]wRvyYg"F")'8k֬wsK %X@`{瓏!EX}x;&Xtqlz^To|]v}&Ms:(%gy5S_K\.r{-Ф8]ۋyR9̛7+.?c I*tAP+`W |ßӥ(DS5UQAy_x3gTeR=ݳͶ<_<鋄MՐb043B#ܽ랻2?\mvFt=r츎QD[._xhCtwCiZ$Vճz qX*L0JiR )wg.s_O< /kL~[-;=}Q@42m+]{7}ϵv0޾stß%1}!}K[[3_ .r_f|]sKsWi}~G~Ic-} g~[o{NIǟt^hBav/sI't7|ϟ?BdC2sO;wqT{TC=C[tH0}Xb~) ̞\6{P($2eJCaw\lOG5?䒟p ;E]Φ?ӧ?D"N;Nn QQ FcQJ)H[۪!poe?Ϸ!g \j'1Wϝϖȧm\7{\{PJ5r; B#CkqwZ,@uffH~|1O$%c/~;qG@ B$H![n/c'wB"a1oͣ \j2^d#c'~-]=sޥu!wo}R$Ƙ;%(U Ko1lӮs·e|RJ %Tap{yxa;\C<Ƴ<jndڰr|{) c%u= EUO=ԣ:zBo TxS^Rd6A ssb"te4M˲Fa˵ˮ?BGH0{.Xlt/ldQ\u@5g툝$mA|2P?\=8 ^v??S4E7}TzJ" oK:wv͘1PUF&c Rc Gtxݮm6OD}7E';qٲeeYú{{<r)]$4 cwRrl۶]4 ;) @KNf(üp@l:{׭^ zzzr<֞I'4}ڳW7}g٣o?k uQGu԰_;?Tq鲥v˰u]}VUrSJ=x<.?I'z{Wy3QBPo~(We;KLtwuI-Z,u=WȽ%H)_{5+jk+ ;Sx7MӬmZ4mi V .| PæL|s~h6^ۑZlBSyǝ5=#OGoϯFq<^{ go|ٲe[o=o<θ_gBqƆAyo{'M.>pq0`p[랋.(or 'Xeڹ_1t#?(^Mt.9Et&9s8gWTt@QBi&PR[q.Β%KWɓ&o^.~+]vْ%Ky_~VwW^ "c̲`(8k[wq2\JYT RBlv777 8n5a' !_ʗKm boo_*?wm[6O7/^q[ {z7%jWz|8u]wq_ rgmK/_=>K.)Z0\tYcciSmݖ OĻ?:,z镗R} ;l7`-_/gW߁@psBDu>얆?OӦO^ݟ_d_>+{g=noLӼ;͝wE {Z̯ E} IRY۵TN6m u钥wg G7֬YsmwqH$>Y"A2%4N755 ~Ӄd2 PA N_o;QB=h<: "z;;;M0l>~駟ӟtؿ9<_w3H) %/8ڢE(KXhҤIǞpC\uUGd6wzg.O)x@8vf /o1sL!D{Gɓ}Y.x6匟{޹o­2H(7(Qaxq#`-R #x?7&uWXA$sC !$ Ʀ=ز!OqfbC!B#6'/)owix|2Ƭ^iADD74Xt`C۵?] ԛ@9MMM=k{M]]]=]{dzTUu3W|H$govWH,DkmXB D,UJ1sm`8[|wԩ tjcc^閛.օpw+şN$gqvSc>qAԳ;;;z`*3{6$F6o~8rŊ:W죪갆VBL(kg!֝B}iЌx'pc~,IGyy?өT*t}[9g.ymZHU+͍sN1}钥ӧO`р!d3]Rn6MͿd2L4 V}R 675_k]e.< P@H RJ)]۵koGQl68/Tt^8O=TgggbyGsTP߶~s6oyhz+uw1y2" ̍mUMgcX{z'pN}u]#dBdwߝ*tH7Qkdp 13,ۢFuܶm˴!P@QET\#pm˖ SQyL0ɇx^{˗/ooo62X 9qy7N)o}[SL=k]}wN9_=G溮'k|yD6a#~ktB0g}Mp녿?̃3­\zQdd%@ ?GWka?x1s ?~?~'bvH!_w !G/ ӧO?+gva1h-=" C#O>^/?GQ**(+6>۵%Ȯ.UU5U+d _ 6*[b~pqʔ)*Qêׁ0@@l;AbWcsc$w !vmwJK9 WZ))M~9]]국 e%rإr D#c )ShVrJB4]ڦ-HRfTuDЬ|hШڮYP'8_+{+BT*^x~;ɧ3{z oλ9/.Bq ^SD~'MN&x<^=D"@/;P0 B39| MMMMB¡ZBHCy{݃|wŰju8ysfNLF1jʲ}sEgm?wG\&g1∘ 'z;˧}9esX_ 4):k--W@To,Ӣ &JʍU/<)lsSbϩbcD }Ɣ֮,cN;dFw{D2lBHBQE4U(Jd6%@h>6Pe%3xwŻ^QMDjVSL~<r33ռMcٖ /ϺK)7 #`KCˬugؕ]ηw>w6&uL _Ā!  !P+pTR.I%,)P̋]P$H;ҼÎ;d3Y&({)]JGsǼ󚚚VwM_y'RD^ %H/(;w\[{[OO7Tjߜ@#Κ2} sX:.pM9MpBq/B@ Ƙ(qC3Rlc=kz&e3kf{sYsZ[[׬ZS6Gl>g,f6#2} E`%/Zە-dWXu_d2IXZfu>k /^*3>$[i\  ׁI(і]pMpuiz筝;'uLq׬^c&M ]Ju]  ^pGJq:*!$+"&`0G{ZlsH+r%ځ!,^XUUVc5kB, Cǝp\SSӚ5kVqf{PJ׮\[&#Cj€:۶][ @6+a s\$+-$sYXhH6$ZsKCo\(Wxzҏl˪{@O%s%K{1۶Wʕ+?lOm{QBT*5lO\\_B:v%z-9hxnяQn}Y' a'H^x_|ٛ5!@}ѧ~z_a"8ꨣޑ4$<ș3fz=bUB?wr|X(f(#/6lGO7Uʗ J<ȷO|ɖe1w=ŭl~P=>NwnP0$RȀ8Ww]X .7(˜qM*JO+ !$BdP(񆸪 hx{ڇn VWwwuKwXb=v'~QJY{Ƣ{fo.wB!c9dQF4 44ٖIe`W/ޗÖ6 QS2VEQ  cpBL(ym sfY\á}}BOQW{D"Q c@ RRJ!mHYԘ!nA_`P'pA oʕ>i缐K(i~|}ri'.= ^+y/0kPTL\|ٲ&~>'8pᜏtK\'aBQg)E9SO8M{@8 {{@cyJH)/~."*9.MJ9s̝wy??ifNJ9cO#uΫJ)}c vY8xl;sR ~۩eY7ع 2.w;K);;;c+\tlZ 9r\- >{>>!}d2K/l7yQ|w) ~oO/iz]>~ghXvV[m5}t49=aHI'-\a96s>l|,|r.ۈWSUս^3>P~zȡRʑsB u00]uP7P׫z 2Ll5_J9c =ZΝ7WӴlnt抡ss 2$ZVE*LL&cuXOp{}1i0c*N>fD͓Ž{(6R1~l.waKϦq|&ihl@@DJq_:_98 ](u TS#vww{ϽfB|fϼ++裎.JwΫ{~̚s=w~vΧ~ԃ?{0֛op {f}g" ]׽ (5~#>|薑hN[/7-s/RR{^ ^J9kά񽍼e4<MKKY3ƺj l>,eum.Aer"{R?n]4 "8c/;tIBs&<̋.HqϽl#".za?;l  DINoLQz+{s̾뽁#gsAU輙^}U6CС:k^ys=we޾gzf6 )C>{֋c=RT0D>|~~"=!봬wp-A\o|#?ɥfG׻?JR J|y۟C6EBI@J9s̀|Cǣ.p [o:6+TU1tM%.ArAu4wlrW} >>QQ0lիVO>m` c6{EN<6 ±%,<@U4 J2 }}S&MႣU=b!#4si(\*W*~׼~[jdri @%UPʫx탤d`qɉ$^j͋;GvðyқGL&jaAA2Hl\ >l6|]Dlhj7=e"ŕWVʕeuv qrWuբXoB|16kvD1;C{ZgT?,\pE?\xw]|W] M~'ܑ"H-EUo3䩳f:g#`RT*B)!AJ"y(^rb-X+ݟ>lUU~ P^E>P$x %HJմI0.O[tw[[ׯhv7.W~oચ%]]ߺ[ʓO:yǟp7\'.^{yռRuB믿>^Wc=vWFQ51LnsoLLho}6c-X=ϝ!E},(A4翍BJhm"-7F,r FJ9/:yj8ov?䧎` 햿5$$`KSw]/si0"=X46l~yT-қ7'av}|6.#3`KB7*0t\p/èA䠟y=^EڀRqO.`~[k[2 ^h(*Uo.WZnKc HF8 B .:Mв㳥18ޕ1BO8ēN!K~xIcCc}AFHUu}XͲ`Ta հ-c|||||6A᭯H;:8ck;\S'J6g-r0}=B`h0Ʊ.C-'x\>>>>>[pp>>>>[& Z;]1+6TJ0t*Ns[s_WIaxa^rM_},%=:T- 'R F$)rlKSÂ{ՐF`2($K żzcs>>>>[&cxa`fJ_^pe޼yp4Mr}}TRJqnQj8c;6UulLUTMYo"zWEBy Q0 %ewʹinkRS۶h!@#`BFԀ([eIGkGŬHW>>>>>X\N̵Jִ9%t>۴MG:h[v& #/ .sSЂ`(5P*ʅH8b:&sz}әfi9bIBTO/iMBñp_X,5j׽.cA/acb8砀RQjqmg#0_8y9RbB8R .\%@|#2BA )!`;vThlj$q3Tcq[ kQ/9p 1tU"qbɭM^11o^PDBdX1+Z'y`Bꖴgd ~BJ Qb8P,ڗ+"IWP% (B܏JGa"ʖ"ܚf-m] 障޾^)Y1_{5XCL+ݬ(;KRo_c9mۄ+^bqmg# Vth Eƙ7N*Z%K (kTNn\(zZ'Rd$g(ѱMvt>qKABOWO0DD&g\TDBIRJB(X읷qK-d H(U,D%p\({5{-PgKc\5Zkνo!i0ƈJx("twuGCQ QIRJL:C ul'ӟ!@$J]v٭jPN.sy8ۯ~|˅d$l A IlӞ3{BuMf&g!L:= K"$LIP84#*+Ry_/KP#SS4CD*L) SڦĒ1),2BjΙ=D5=ٔ+(P a,jA,tg%mm--reƺ BMBU3@cQS>@t:]*ClkG:,kDtcY:c{w}}ToW / h"Ze60z@~9-xTQBֻohjn`O#Q.9dP%}|||@FWY+ne }>|"RhL$'o;f>~֌Y_wSo,+6Gd/=1_=" xc>M!Ln$@\tx-uW˲NˉkcYS t,t2+"7u||||X>sJ 8p2B  䄐ͷ"];Nu]ӥHPbu5,bVhBP;e$h2Ѫw~|ϖɇ\wҩ4(Gh8%b˺(D/A"7\o`;Y6Usfa /JR&AhDS5={(RDёK.sp4#D6>s>>>>[,΁3r>r]o)A646PJ*iTkimg2S).wuG-:n, Ěcbqf12dt"{q~|Rf)Ӧ6:%5UKҥ|zD>{_vCF5j&  lL87myfYcQ5fYxC{{+,ۚ7D>,\fE@Uie288BT6Uv] nYY6#`(2ѽu||||T>sVqsQJGG!+Kҕ$15  H\ڮ N ,3^jo jZ*+K *B ܳ#bV$H "HR"XLZw;N4vm(Aڶ=87=qy[q+yq2L*3m|9K" wib>јBT{UP|{kU@mbM[~bA=hh+ߏEc!(l!tETg5E.7E*P!H)s79 H"}zq!` HeRRHom Gv#R!D"j̎探Y斶FȠ*R)T0Нn)E{k;sY\MWbt>$CTk)%c, qsƽ}d%Ju||||Xar yKXfK !PNjZU,"454i ˙*9)ZKsK0t*670,䊮ETM/,ˊG`Pm͍|S\Tmʔ)`.%(J '}lqb#ުhJmX5)2kjPR eضX hmO3^(uDƶWQDI%ϲP,xbPH:.`۱- {-ϖxs*Y0u~E(JނzuY4dYJC4qS ~,q%&Vsٮ\>>>>[,ې2Zmo?2Y7oDMy=~#Zּ&}||||4spKg#;GU0 1(,]準tt ,x-sD«;7ru* SӈJiMdPe&?6ϖGRwՠXJ,Jپl#sVɲ `9[:cZ&B" ё/;Ir}JEJo"%7ـrcf>>>>>\\*븵sC:&@juvyfɬ+PWOהSZ[^v\{ҕ|z֬YBT(ycx ۱ʅrhE*By}Ė\GPwe9_fםkIr9`ݹx%BʑsɥL^Q\KcK8R|6_aERp^t|1OTa-{-{y^/&X޽|||||4>sZwqZݹ(prTHm˖H5ECD9kI! !T.w͢i3!uL]׍9*mhjU=SdDsؐk0ag4c1#a!mHd2L6-JRAHOgΞiҖRAEQ˕b% !CS]3ѐBW *zu缽e7& a θk\r[Nű]&bX*$B+Y. -Kli| lR*T 6-nECFTfv$aȲl/ID:Z:)-*xs9b(s2JwMbkQICTS]rRr\N8cP0 Gc4rwg|?We!ם [hwwŪȀYwn)ee˶bSC`3Jݹx2N -e/~$Q55\b5$c;x,pG#hHI}8|u>>>>[w9ozl~\ϖG^wU  \rBH-bR "4i˺|s@dW~۸~.[-(P;Kļs(m\ϺsfT:S&3  F@@Ԁ2!bPM(_jR}MyZި|||||4>s RpJZ,ZZ[;W.]B;\bͱR8iRJhs_q+Ў)Q"$&ɔ2bbTR-ֆrhJ<s\D$ۣJŮ[}(6vÂ0[L6SfA5VJaIJH"R,9ݭZԶY6gΙ9oy-- ݥwgRTTf9ϛ;o63`4 լٳZ ‘Ps\"4yR* Q7hIz&>>>>>[A9f޴]_w9\\֝K$ H@Ns{s!S0Të;lJB\.ټ7D2)Z,gsY.e[l&۵+jPOJfi@&B֖Rp)xu>>>>>[A9֝՝sΐ%J R꘎I@ $.smv ukMQȵsC5TC5\cmZڊop#JT5"\G S2R2¤$Wa~m-]%@$JBI&6{ZϥsHDAܴ|1hLB!ս*B]\*ض՝^djPՉn;6܈teAUVfU14CQBjUb %-r>GD ,KZ,RWN>sї՝s9" b0%֖V4;;*v%o[[:ڪu(uTEEbJ 6mڴTmT,iZ2,fx$a6 @PC|mZJ褙Lt-7ăqB]"p+ ɨPםb٘uNjZU,"454i ٣ԝөl  $Hg\ CF K.hDQ Fvl `v(9s&pp\T)544#A۶ umGB u8YwΫeIEFkqqe)Wi."2żP4JR]G8yN EX$@yס,2m6_-mi2gK$(1_ȃ !c:!< 7-z-x۶XPڲUP@%q,^ge@ PFKTruTˉkNRPѓ푖d>,hZ3(,#-Yyݷq>;nlC764x􉄐`+32MGOj|l-ͲՔ_oƾ|||||>nFcBmVuղ-̶ θ)Dn6\PKlWy#-uAT*N2wX V-7ϝϖ2PK% ZJ477̅qt.dKVHDƲ,(q!2LK,'Enuԝ=\>WZ[Zaؕ|1*mOSn63% LSV*r@ Cd4i;@ 6 ys}BR%p$mǹo3x9p@2(jT+˲WکpI͙1(dRJ˴\-2B UT9* @;D5@ (P6 ]V?_[R{VpP$T+-ZڹtYT: G8zaeCn*mzPl.0(ܻes.ygɰju 9J)@-b]͚%4M)i6g}>q*%/z/W1+ XoW:l∋6lꬩH06UL,d  '< tdYމDNIJResVٲk{ll~.s9J^ā5*4*k{fYqF2) &( R@VJKC H0+f{{{ct등o(#+\p%HP(Zcs#hhok'VI`,D`8ݟZ՝.KL87=qX\=y?p8 ڒUVY5wwX G&uV^Mr'գj)#JI1t0uu3R)nqu]Gcme)tM€,QҴM[ڡ`X,Za+)R7Dg[s>>>>>3ϝ! u7KG{w߽bxK& @HG7vnGys(PT^t!*O4#'µlk}6|EFvaI.UAD)$D!sN) 4iR"x7vԎi==RH\Z5hT,y9߻_wgeq/BD қBBH8Ryx8|^H$@]Ο9_ښUk$\5A]LF].HL$U] GTQmN6WJB#b$՛ ^ $qS)v4Jed!5ʢ_wg<Ƌ~D@);lJFCцxC-P6pT5Kƒ Q@Ba$ɶ7$])˺MzHfdC4 U|3}KCz$1t)jR+X2F`3BP\5c!ĻԱc9^Wx0$ U(/q!^K㳥1\;ۏ o 93\/!Zt`֮Y[[ s7lMP:n.$H `j%2 ɍc2qR,*A3yD k{dn֨dq(Ê7^] V$gKc̹z)%JLb8zVcC,TViJ#o;(#j}ئY"2 깯C;Od8gda]aL6ٽ zҜȄæӷLo|||||4ƋC{Z~!H$JD>$(p4ˉkNR <[[-z-Z~~lB ZRƾ|||||6눜^LsyHB2)/|nTڋzݯ;Ųs*lEaKz` i8-sfJF;gqP(̙;'ӗUX)֖Vw}l֑vCŸ6cZGs)L˴@i^9 *U)AΩT;]:P#*J&+T@WhQR )IDAT¡R՝lܮt8h&Gԝ#@rY!x0:2YGݹ  "{{ev}ݹt&4sB4弮}YDlJ՚&*[.|ڶm@XZks[:54cÎ㴴9N5ULu ֝sDksV$ʾT_iE:m\>ek>>>>>[;kT-M-f\۽vmL1c9V\4eŒ1 \R>) G0`POR4qr pl'556±_;W,`r-M-^ݹvJh͕՝K4]@l )N87=qo~Yw%XTM - e+WDxX.{w%WYy{om]KKI:8(! 8#(?T] '8~Nq +?EPQ~aD',aI'kugԋyZ-7Ǜ+JZӡΏb<O*TZmTjG[ ԢE#C#۪3LZIg^5R-9Qe(hCYNE]PðZ>裞{+UJõZS+s;c0?}'Y;Ec&4Q߹MqaE:~gO8)O>n bAaP]ƢsAtu-15S +%Kn{aZ.XX0V66u޾OR#ّ]#dRI5iFV󽞾ox}R;vH_ܷ~߱mGڦw5uxS;ЄK- U֡ wm Frǯ8>;hI<3z·~S[SsYab^\ӓ5i<#,CC𛚛ZZZjRT,hv[Ie0/eW{WZG}'w騻Li'sBqAǂH~Sa=5o.1f[ ߱9+_yJyJj溺_.TSj8;ll4g'=yj+m{kZ2-Wb5% 嫸rT;KuAk)3gwqoG[Gn$WOBĚbt"T2fcJoo߹dSXZdT߹s]] Ų*saǂB+{Z 06V0SŤBŋoTV'ߺ[k pd9uiQyvpoph~`^yg&'K7WߎJ>yilWr.s^9h}l|80?sBJ{'}xTz1ϓ޴mFwONk\WR CmVҗ|O%Fz}&mZU( !MO5z魇uQ}bZ6lk 3_E9!k?#fjT3RJYU잱=dS)T(5uY'nlSNLzz{~|meQʨj9b]=]Bi4?Z*eL._gQHaD)-'_JYv/RaViB#'IMhr\E 傱!9)/DIo{:'u?m6MJ嫞 S_OSb5;,rcBjmVV/}^֫uX(H|.T.&YkkBիO=9/cr}yeuCF˥EUۢYVX_ZAT`B3u/w4bЄU}Sg*^)`zfX}W=jKFnnT>{])oj iƫ&d;S)vX)/w78fZ6zBO}DSnWN{pU )L?桙3>IqS^Õ;+T +xuI9q9%UA,bX|[,K%TJES#|+TRy~t6z.1δiwR_>rWMoF+x|6߶M[2-˖- `4?twZ*Py{?+P6ݺi/|ѱFGJR~<՗ۏ[{\PT, )w^JnL[c~,W}k_}oiSK'`ٮ-زG}eZcŠl5M~_醛~OMOmyj3[uϷ.cz_js{|J!s?Wr}J{3>s=\uUWN7+J4. _ٹ?ٷOIv%<+V0~yk ~> [7|:Z;Z\tE%Kf\>m$_tC*O?t,[jZm5\w^q? /jJ5I%?cX<O~Zf^)1k І5ƚPm䉯?1ٔ}xp Xd` u0$<Ω7E_7'T<%?{z 1d6$#G!֞tIRoҸ'Rlh}ϷzSVʏs܃>xI'=Cw}c=yC;~k?lͮ;uI9q߹h >_/koIߚUk[>u#x{㥑ˆP}}=tHvVdZo[3S7}{-{衇;h$"BD֥-;g~'\ڢ'0?{irb)mO|Z!\ؙd,h_إ̹+MT(<{<Xi9]۷tKd2!_ )=o&ih&H\ ^ڹ+>;ELzY 6ާo|_˺s[i*=}asw&1&4׮RJ@VZj'=mB f%ruQi2c^skB !P NzVqλyGl,@{g櫗D&F !BeR[RH#U+_6ڈ}& !<96*V +B->3prZkFtsua̸wOxUQm 3dRJkdr8~Е/3~H*J)|3=RoqC\.(qRV*6`!?tهQ9!G8fF8HtD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27Md<n"pxD&27S1a6xuhN}eoƷfZ|׾G u/S_x+=F$x|߹sg^GZ)RJJ)lG7km4* BSgBF3:cR>G35xvOP+`='Mo?ZZӀ):O8M//PJN^+988uK..\Pk.^N'ぃc㭭an1CtF/?miJK)JI!y~nܓBXa͙L栟ĩU>22bM%RLFktR"H&BA)ں͇H$mmkk+@J~<]T^,V(|ߏ6d5mk+>w.Giny ?;}t&EgxLO&ZkToRgqBoZu\|ɂV zB"z[眯Q`>i mo|cD,7rsϚk^x+dddhնgBaZN/^A69)x|>婡x,q$ZJiֈ𧻓E k md2L:oV)U+n妧>=\SV ~JUX忷d:K|ʛַ6MA//3߸T*U.׭_wg>'ȯ/_忷Zꄵ'KnahPRyr˓_˝]?~ǯ=ꩧ,X`&U&%U;c& 3g|{{G7l¶LoۑȷmJO>c?Z2-='j_оsVܴuO>}?L]verʅ{x`zkh U?]|΅}K'&&Fso3صs53ˏo}jJX~>Vwy V.m۶xx<'b7n\:>5:ڗY84Ƅ:Zc欿׿[|˧n ņ?sh{7oB<,O7i0\x׬ >a矿[_l |/wYsνwR{ cw}cSO9ʫ1ZAmےdsshviͷ<66ӭjϴ\2Ӓ1,Yd 59ਧJ%Soܸf͚+kk2^k}qc1RTSjʕѷVfEZO׶)Bt,Rܾ}Mn2cĪUđzpLi4l{F.eW\s5^/ӟ3 19U2>0jJe2C Hqw-cO7 dMQ5dp}C!z7m4M;x)o>?vuv]K7i:HLUxRX%δ!c44 ᬵBAJj*TS 8ZZ:kgg׀3Z|ߓRH) OwZ}[oT[ګ~Zk}Ƈ+\z/dLUURE3FkR+`.>4@䅬Q7Rke‰*Kx|tt4J={$db5kz\.;]zn|"ҩ/꿔]ɋM#0?I)D+SQ 9+r*BXnvۏ7_t/~˒-5]^%Kha#(ue"[PX[-?̯?xP(z~éͳp@صk+ny.9Q^6Q#?x7(IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph10.png000066400000000000000000001362201222557406400241630ustar00rootroot00000000000000PNG  IHDRzI}FbKGD pHYs  #utIME Hb_ IDATxwT0s,uE@AhbME1v%*6bW^mzqw- 639s}Nhܸq5j(E0?XPE.r\"" [1΃HEQTUu݇@=.B[m}kkj>EpB0BADӵqϞVwعE.r\o~=d 0DXc9!@1_{!)0ڹ椓NRU 0`8!Lr-555EyEºuwo"P aD0A!s#, ,:.Aȿqm:~u\m БEw fyn%Au@FE 6 biH`  ( 4}PE>hq - .K`@8/ACWj@,v+@0\8^@رYθ $h?$! p|pT 2CF@?O qBGǀnV Hq$21|74 B8 BnǛd.pDi5۳a$L퀀`cF5UEc5j0"A S0GEA CţqBX$`X,e!\S"mV^؊HJHF=t!}Cp B{w1*X68!4A@0ppncw noxۺ`Ov;vZ9*bptX<(~/Nzd|vxA6 nmc" )Ӧ`okCčvDxO)*վYGBE?]:7G@T0D]co-°~ mH/7U a.3pOjt:Ѷr'k997n_fu}.8缵ui_xۆ&=;u `@.HX]YD:_I,޺c)d%3$ 4M JcIqg)B\60m$6,!adY0(E GApB8T6~⹯`:X,+.}6f~=}uPqs9> $zQ]{%YƽxM wi_x O†"ygVy</٥ YK0NN+{;~Ĵjq'OaI>]%{O5GuoMj"A@1+|3aNg_\f&)0,ogמyg٤dF[v(߽7f5_4q!_+9k7 BXzj.E/)L^<^-[xaU߶F+8okOc׾;5?]ЯoaS8ɒG,I8{JÚr9ƔUmīo˜0F<3*F& A<Qʆ@ Y4"0u ʠP~@!"1P5x $vB ./8&\: N0/!lK -86x(aqo'vIHq8N8iơ ^-+]?<vk .G, 7La#(Hi!<ɂlxEPg(Yq 8p,p]c=,j8>3 D`N̬,aF1" #D$243 @'\a׫6o|3M?D$C #8ꃍjOu9L__3~<S™Ό pջggtG"kkie&+;ܱe]6U/gկzח{,KtpU/ff+)[ VRbq򗧽<"ӑm ^\uoز~l@sJĿF߳?9fL  l/+xO<.Ykw=oڜz pc=9?8_}YSc :봳N5ٳ}xWJwI[֯l= ӆBgo7%M>(/q23ض=!8gdvn \t=꛻<.?К1muL`)v'zG5+{V$ڸ|EMc{yğWNx)LipRe!,2C`aX$p;dp$y^hhp^7pp7@*&sD;\U\<ěq P6 耻B=n팻Nx<#nˆ{p-9FX$PwDy, ^nG"w3cē-@.-" <  1p@hŭGqW6  DB!`ˆי TxݐL$G[$, fSN-HEǀ""F#֙qI#0' p.oQD%$QJ9moK}C![qP͠b18>ݵ`0//>9rE 5jp$"Qd4tzϘ6[,XLc ^I#FFJJ壠lذ[ 7yE.W FЈa,VGYvGns2t޼"_eT04QNL_P4sW <%3:<L9bʙ]}-qߣ$N)ݻOͫpPf0.'?HMQ28-ΧDjZ'R\EKgMt%-W?vmHY9O(3+gpC O2}ꤪH>H]PWtϾf*8g8_{|Uֳ*SG/U2 ,H.)BIfiip9AIAc6D6Eu,6`C  qH@" wvx]#G{wãnj7,uY+N7dTu14nA:,<uDŽ'ӐȀJ+!mqIj>m⮶xʱ&nmƭp|n%!!.G>uFAHbxC+%iPg<%H .w g6\ʆw 9De/HC 3HD`SuCGQ #:5r `0HD|D":E4AL`6],0{*u[;X_qY?s#@&``.Zt lAV(f,UI zy./{ǎ{ ,- alJ(55>K;b,Vҩ9u[ZڰiƤ28*:,=61a(WqRw/ۼtXRQIN #I`3MT7若fp'K*Jup tEFDSP"YW@0t-ƚG .dևul@Ϥag$:wSuMF9⺆UEaEF&xP!P lVC`*@0v"a^gs#0"14χxT E8S! mDkN6,y ࡶ8B[<،C `p=\MC* wC(ܦRv<~np[w?oCyֺZ{m#<Kޒ05ıÆ Ǎ'߱ LjÖ?;c%Taits~CFC0VQ< 3NX'Oܲ+GLsH'0Ҥ}D截LgL8alŧ_n3T+_+yjD  GR̗_oL(5WMIŅ DĀ! 8ì0LcP :q=* P7~ˎHLW€ !LȺ5;w h)-{lc~֥ 6o޺u{}MmF$ƭn<ݰ7oپ; ~DFwa$}fd]]seيMUJBϷڝtY.S@A !sՂ6m{ z,_ #G};}ko.)[~SMm2R=vIo߾ x|⦍{t Khhùk-{X,u* gD0 :|q @N?d>^ٗ;Ҫc`I&~bk2}0˵I8k;kck}Y4nܸA@PDsA ` aZsN5F$KD! [,nt:?i={m3lu}}=L%¨*QjRC,)*?jν?^ॷ;=j1bA0;551BEr!Bt-hA*عw~_8λdg:XD55 IFVA30Fa/jR7* vQvYvH\9OP̆5Q}.yŗ?}K=heg8#IvɒFXx%9Z}T(5%֣Գ+nSKWs9y^W4%7# ă ܣĕR=tB5Κ='=ԛoأRHa8b$vۀ,6 XeN`Y:x$|7@PGR\QqVpRKep TLql+NX$V Rgp wwZAlK8㔢n%͸$p'<đ#7PH{ģi7e%ZC4n IDATH,qbIqj[%ǁ#zx3t(H+Ni?:<3,d}c,t­,񖭫/{,H ,H0 aE(|_}`PD $ IS0B DaǶ{4d&)E139 aD Ə/!FK $A2{ sN%;Er3әXs"n^oɲ !dy[03dkA6@;ӆL>t?J )5!B9E~UF ۈ5 xjWfsƨ ZE 3nwR vQi-To]gzP,nP#61+LFRO=[v:k9pHHq,1*INh.]Q@bh?߹*I(P }8|96G"Q0(yY*%qnmK>)wҪHs b)ȌcsEF:!ʡ |BàSyY87e UH+81!=Emg4HnCSVS"1D x< fHde'ydyW4}NJLj';ьS /0$!sX\6x3?7kV}Q'0s:Xn<Z+R볾CJ>\&EBn\"\͝IgGl&':ܚo۶m-?:G̝;Wp3gljjJҙfr\"O I&YnOVTeK\&cf}1MӒ$-s\"Ij޸5p\vE.r\?=:M\ E.r!̅pykf9@>l38瘘?!D00-3$r#6yr9w_\BQ2w|՗/r-Mc;T &_{Elgwsa)S 8-"|ݺL@sa͹y5Nݼys~^~qIYU9|Hk ?/>3zfo~..-,6oR53j3ޚq8l!qsi)Q1ogV ?t 6G}Z`lU^{#n}L(ڵc׸ ̻0"֒y'LSOvu }䈑,oݺsiҥK !#G~襗_OOm۶+sO>23t#~.xƙAD"bo`c%3fXxG|i'}ٔ"+`n5L$zꩣGn%ꚫym[M?(f(;o2d1Bŋ~05jԱ'xbؽkVD Ǐ?b؈7޹saPu?.+->|xMMMIiI x7 ٱc?>uo^0‘H̟O&D:0opڶl/~df͚/|]2`%/O:$|ͷ &sa&_|E:>SB ̛7ǧGYbn\`!E.~@9e)5#T*eXTU=x`CC̙3>駟6mڮ]JJ!t:db2{ % 1Lo"Ͽm֧wƘn|E%E!3̍teu_ 7"/7^߿oƸr" Jb~Alwٵp›ntvN m۷UWWۇDI+O?]1fs8YW2ۚfyڶMͿ;p47r[fu_wՕW 8ĝs ιŒoE@6BD볚5t8DO~J"hjh Y ?\/+W\p㥜rZv8筃:`šc€K/4sLx'vl1}=,]oc #ZeƘYH,bAShw:|C!YM0zT1#F((5{N$ k)w"asdsmݐ0ƒ$Y, &zf^hQsxK7pS~̘1㪫+VtMUUU:1}Ym#G6tT{:ίF&Oܫjo?˯ڿg>X{0 }7[6mɨ{O9iԓN6mɗK OvO4v9mʴxݟEU|2p'4o>LFC,\ɒK.'}=#EW,~|7|ч>N k7`|葇6l`.:ϖ|6~s>K/ѣ}wM77~YYOHo1Q @M7=cյ>ꫯ6-03fu¨e,߷vFs\|b1B\tR0G(u>+,,"m;_t:Y˖-oqƝ~L+̚lcZLŁ6)QusBQsܠƄIzg<[շJN8!0?k!Nvl3rZ>ah0 F9OӴM6?\չ[TP4u_z~抒Τ9ё',,,|V 0fQ#Fr- -Q/weVY8)G:;wݳW~玝}{<ƛok$5Df_fuQqp+++߳}&<~*+l Ox=^񺺺W_}՗::kj9ULǍ(;a ~oݳg۶ocQJwc'}埯g5`e˗SJ+zTtNqVV\&J.//_nm~nPnP 7``ww:p$I3X܂_yy.Q^է>P_QY1I4 /PB.`QjP00ƘbNs?f)bn/VXaۆ~ s\a6.BgϞ&L0 ðX,2r/^t^Ţ"];_B=_s_}չs۷geXyye]J4UP5 t9Szs8`"ܾFt8 &a y!ج޽z<$OEګE4OChBD )iEI+JFUVV'9z!Ç //ק_~^ȖRp clNӫOLbZ1`ޫgCGH$"IR^KK'Mv^)^?g &([-V=+|NU*IJKJ3xL*3lذ 7q{./(+PQ^QZRZYQ;yDh$ŝ.gEy$JV*KQ$>e 'uۿW^׷W_lq:=+z,YVVfۇj-v} pڝv= ~I$kIVZTXt,rp# 2xM~UcF:dh>}JJ:‚!C ?7fu> `nӷgAp;Æ2pHIaI]mQ z(-)_ {<3< das_W8}!@׭^7딙8eT:aY\0'VWW@0 ƌS^^L&JzMv}ι[W_7}~%d2rfΚiYәuk#aѸqꫦdm괛nqСCڮk> CA5Y!شy5^Ӻѐ'8{mo*;Qg>o5|4# b.rwP$#}ˮB]wFGI+i)~h41cof'L+鬓BSM[/ ]&z@k3,uN0mutv`Ch5B:okNmˠBv[X75<#wo/-./5tDۊY8L_%Q:yotՔt}JKJs`7[wzjG 1A ι0]}]/=kv}s/  v lٺ;I }'Mԧg\d:kjժ}{LiIjRFBFa0פxιff͚ed @߯<䬻="?|BbX)4-I&xAP 1$s ;jw}WiyS?Ŏj!d"~w}  7pI'eovChll|oXqss1j͖m[{MMM?@::{ҤI@e=&Pͫ糶[:.\a`^8 )S ?Աm{$>\vͧÓ0aZ1Ƌ-馛F_W__?sojsffwdSI! Zz" " UzDD,׊+"HGj ɖs?&,d 3gfs9$1&L$1!k"/>0R%??SNŔɸon1`\| !CßFJ$t&kG|wŻJT00bW,_|E'zTY3krIru$7HApn3dF?IB9q6-'OdggKDHsI8e;nVMA9ǖcۯ\RjW2\pF/P%++b+Li&*K=TDxX$siH >J]Ua.6Buv]$uz7$%U|࿎^y{平 ]&++Ka˱:B &4NҭO=O֮rdW;wyo.d&ݻw{dIv ۖcH4rq'}6I<5 yᅲ/29l7ޘ9lR˖v+\ 5k,::zժUԌ$=CZ6ZNIh>Sꇲt˥7 @<AoB|qɚUkJ=vVZ+윛! m%:,j۪{zO1s\Itkێ  74*칳u Q6Z-fK{Vd4kzIeĨ:?oPuS,e۲g1S1![m{-Q ٔ$橋YFYWiç?)'VI\yD=mG6cVr^9 ˮ7t:/K~@!s{P󶾃 I7NcBt4}"}KsB0׊9}hU.TqӟqB/kB)sMN^hI.[ʕ+#;~lSg̘!IRS#~i?i26ჲA_~-awݷ76.믿v 7*T"R:;p_dh:u`|ڿX1|Ѣ1es6Vb}/g51uk ɝ%\=o<4bML}ߟoyrVp: UA.F<+?E#.g%&:l'$w֯L93_XyAU;u,v2c1( [H%rhܑi1'GbX=EWIZ=DQ͑7Lo,_6j\L}iKw^p߃#нz c`[8 !nK;5V8pH} >_QABUS]7j +>׬wEé`PDLlL~BCBNgK-Մ$ˉˊl0.] Y9{7\~Rп@nFq&|Mk'lCCNKRF׈aW/tUܝq%M'|RbMTq^u%jiU'3)ʻ.աwf{;)8/ա:83.MJ9L"5kRO ij) 2{ IKtȱwW7gdf~w|ziXϭ,Q!#v~CY*eff%Mr\1t]gl۶!-[V% \f>uԌ ÉѨȡ#~#KϜP)Wn ׸k?=zB?};:K[xcNsĈ]t̐_jJI232.Zxɾ6oڜ>ٹ ?ڿ!IRNNi_[Q???k.JXg nmp믿yh|dɓ-}Ј1skO\ᆵ]b4c999@+s s5l^~yW&"OC99'bmA/ b{;VRMJɧo~ٞwe);vebɄo)^&1͙͡=}jR̯\f;&6doRPlWJ7: B ]… "txӧ2%TD}ccb-ZhA*Ie[ Zwl|{ݻNz ѹ_{6nrO>fp%Viyhyrm{jd2%$FXmG]ekM#QgE9hɩޚ3w 9pU/k j3-Y8x}:ڊ^|qwl^*ԏkkey8o. NO |d2, F۪D e՜9H[6/7\ ֮ewEy5i[s>^ft[QIBI~c!Ric-CB+2(]M^*<,",Ǚ*5FNT$ϺղEݺ=PBVNVg f͜@*UdWn׊4INT[l!mN6U6v8׌˭_xwűӏUAah[K_jyšß~k[;ɝvΈ14+W3f*&%''Ǧ2335,f۲- )C9{Me9RBBq֛;82Ο=o~M0$I"N[[HHSs=wV` [fq/ xbx (>x`-'&.Jǔ>}tJJիWO9ݱSǍlLIIyg;bu`4%4`1Κlx>}/ڵj]%x'wVb9j{]=96fSm dPqIZcǍ cLHi*=ڷ-1xbbھSTӟi99&)::նER%"Qs f\j١9r9Bʕ+w6m̜9j Ρr*Elق"+z|-T8sl^!((hmZB\EdjCmSm[}~=T[)Ȯs<|.q1;iӪk)!~/_0A-+r平K5Zܰ#UUOPIIɔRd.GIIr;\7s:c,<4k7䜫:z0R{OK_^]O)Drι,df'!@r52bP4ٮl`qmv r"_քve*TIH!!._:vleIIۥ !t0nČH9v3Ra$&e^l֤YzzztۅnZH Vr9QQF1r5z95*IR۶mgΙY-ڦM{~{ußܝykV0a̙3k֬p: 9уW=PKDS3N WUb9:tON^FBFɍ7p:HbҡC~Ð5P»۬Y/b˖-zbj/!$$ |yَy h46kl/{/\pqIo1h ')uM>VcC*1:zL̙sNҵ~׼oE}?{/b9͎5͟DpIs ˆ$Et/SD;2 Q%-Üu,_|u{[`psv;1ҜZݿ/Ә5^dDN]$&&9tdAcJgff*" Yf")2e!YrvIyw^oHO`ѣFCd#1\E?iٳ"׭3{izTnݿzd7_HoWdE4f2&I5ӖU%TA"C"}o{o\pdhB#5l"I$H8 [ /Ws+>EQ AoWf+":טc8?cvjҴ5Xڵ[dQʕ;~%\US$orBkL6OT(3HRύШbr]3F3h<>.$$;;D /dge,˟n4.6.(8yhGr"5OpQRs旋+7nIS&Xy?xt_bcCt,{{=߃ggWo|mۗ,]X#[;⤋2F6ULIDb?$I Ύ?wPo6^IKIM"Y[gy11#<_Ng$AtXFQ ƯJ66m4l4O2N:*Wگ\՜iX≓''e۳4l}^;wvg<;~"UipL\M3#yEK7o97[wX9 e /ϭf˭g!v.&nY]/ L gIbTLfc +&tEdͮJD2BU A&ٮ9*WU[f]=s ~ꕫCubV[=wUa8z=؋_lPAvylLMMMkV*ԋ/&OLD[>ױ^x"ҥU>v~ӛhZxOw?G_rEo)!рz"KQffѶ*?a⿭ր܊srrB5b0 . P󴁿WRBK9쎖-Zګ?qDTDa՟(X7jdWŻia?ә׌FcPPPn]ul?~]剌$6dЬDp?ҥ̜'z~*TEQʉKh tے$)T\$@~KSd_Մf ĬVƘUŨXL&0s o59Eۺ<}٩sf-͟3_og3=3>}!BCBFc5VnDԴyf-{Y OnZu(*@+Sk$IJn\|r<~B>z<Ϙ񲿟FOkݫnGrKM ܁/Lz"CMS]FvL-Zjժ`xJ ! $Ej֮ٿ M=zU,U*hBspGWYZѣG(n4\wKLSkݪKbcca'2*/2 0|G8T)gxFFƄ8W4ab7iڤqy.xn0qBh֮}zqrc$g\r*k1&qFJ<&p͖܍ޯ;wʩYSf &i4ui'Ϝ4Ӊd29Coj T^Ԋggg3~ CӢZ?qD@@Ln]d\W籖/yFV$9UTRJB^0s&Ԟ%H8Nk5##l1ߤ;ŋX-,T:+'L4bĊ&DYgυ>Ge+#J*9Tn_dQ+ ɩyc*,[rӿY:VZv~;(B={hB:-5M?~|v4i |t:9q~gYq*WuiTkB#s{ pm5ݷYf9n)s zY_Ol96EV*Ww7 WTM5é{bL?T-{d9gy/2QV i?H4Ƌ,\˗.ׇ-l55Mwgs>q^[m[yzt1f06lx,wdmZ IDAT'ԱӅϜnd\=_^BJgy>.3$Ia”H҇6?5"AV]rQ6ABX)ӂH%Mմ[I0yێm+VGIMM0]cǎ-]K.M5cMMUMSm$^'ݸG< WҌ1h6mwI'c@pu߯H! 1o߾%ĤSO]|IhB0\"bPN<=^ԪUQ ѝ8y]zՋ<_8 N}<'vtX=z֊$aaawp>|',ygČF/xsޮm;! ^?d҂rsPx(JmEcvxefm?5ͭ[&xABk箇{?|[}+~os^tr⥣G3%IӴuYWT|(/y:Zvvw}_ >++kSCzU/+rnݚ6!!=&kxB ^IW&rk;wԗL8a9N,dl $xnoodԩ{s*zSj_G^<4`4qQZؐHcL媃{~^ڍj)I;.## ,y[ Ge r3ƈ1$rG:(_<yꩧz~we/lק_Oi%%QHv$@qJ7Ӏ7_-5/]K= ~W{,O@ Y,C=;O{X${%nݨ[7/iv+-KHHHPĔ4(ӧOk'1ι7o^dd$%2ä(ྲྀmO?/6mZDD"%5QC~Gmdr epw1 ١Cf͚!,OƾK -[N8իWlY|DjjjPPкu @mڴ裏dYF(P{y ڵkשS\KnҤ -##'g;uPp;Vuو ]Z*gw"Xb5;%Ś5k6n蚍{ׯ_~F5kl޽Dԭ[Zjaw<ǎv>r>fQQQsΕeyǎLII{Up;aÆ?K7dȑ7vͶm6<<<$$})))Gƾ$x(YF!I=V{7駟6IS6 {޽(:u2޻!]v՛M:U!/rnݰ J۷> kԨ(%WLLL6m|`C,XТE SЊXH:t#̈́ $xzokVkz$xzVӧ˗/md2i&00u w]׶mϑJ;v; (OIMMEPǹs,X~ D'_~5;h *z{jժsѧ҂@$թS'!!Zlٯ_?|AZZZ }YD܃/4M;sp???D7̚5+==q ,gΜsVZuժU5kDd|CXXئM{PE_L05۽{wdw@z;vTׯ?dĤq8671$x=z :K.7wөS'܃/>/1bDPPPv>#PE_,lrܸqtxxxӦM]O}嗈OuV&@ nHؓ'Oݻ]vK`@+WTVFbUK>ڰanw_ҢERJ@&O 8w}+)) )n80~xlNU^cԨQ<>K.MIIy'z`0G$I&111 <ܶ7xСC{ٳgϾ}JBpRRR&MJ*-ZHn߾1c$xCoBCC;UfW_~/~a 3g"pߵnݺ}<<ܶ9s)Sqƈw1115ڵkBP W]IRڵ׭[nU^Y|ĉ$x((}<| 6 +56dD |SgCBBf3L&S6m/^SOnݺj4E G9BEEӴ~źYv-ڶm;x`" oܸ붨-[eʔ3g@e6l]'$$f> ĒMZ:uQcjJLLʕ[ti!TVmȑᡇBK M LII OLL|뭷} Yblݺ5** >hРAժU8>cu}YjUfͰK=z H%TrrrRR+'O^:v4}*wP9s:u$\rݺu% {QF7i$x;{l8*Tp͚_cǎ V?zMrr2; xP&MOGFF>È ڵk?3zwu+D ?0$xR(m^j޼y7ovVTi޼yH222kͦ!&HpO}kΆD?~ڵkݫϮ\@?]^}ĉrƍZ{y%$$_ӺukСC[hOt?m۶aaaVcǎ,#HpsÆ q@ jӦh$3g/_?* =ztjj* jĈ)S PTƎkX4h?J*m۶EH6S9k֬@q88羽˖-YfժU-[_%|"֭[˖-ۨQ#EAɻnݺ~n*Uk.xƮ@L2/nԨBqW 0}{M6EXbɲl0y("I1E+W\r6pѣGӕ+W[FsxRF$Nλ|ִqe*crk7o޿>۾}۽*[ $x5bĈAӓ'OF@#Gz䧟~]6"jWs ,Zw&113} gAAA6l(_|Æ 5[d6#""(222%%l6#,HYŊ-[VV-u޽yDԢEx(#+W\27n߾}cǎE(JV p+++ gԬY^z5kD(Ԃ VkJfΜiZ###oɉ'o߮o@/r^J*QsΈ J$""}=zѬ4k֬nݺY=lbdJKKC @2wh"׿UZ5 VCE#F>(V"""ZnװaCш ߆={ǻ:beʔ)ڵC(|LEeʔq=*p8KM/i2QQQSNEĎ;\BF/2-:tkaÆ~-7e4˗/vr_w{JDOv.[ng-^T\DDرc z4hFbd25۵k&M ,ૼ>#҈OKhѢ]v;vJ*AAA޽3g\K֭[3fQQQ G_M5j⺏=r vzQ7lP7۶m;tk6::k׮>]IIIO=/&M+jժh jH=z[lPx+V{,[lMk߾5k~"ӧOҥK.g~g 8i;;d/Bo&P._$ jޥ?7s̯ĉDTT֭[L$k֬gϞ]ǵG< SW,Ȳիǎφ͚5˽uX*UT6m.]JD6l`.^jѢE``kW.ofȐ!zerw/LBD<@ٲe}/ӦM{gp\<K,8}͛7ފk95t:]={%P md?deefcbb*W.~˗//IHHp/܊*UuILL`03lizz/$99v??BtA3f̙3% e@/a :DFF.^w횭QҥKY_>%&LQfsϞ=׮];gӍBٓYߑ#Gosڷo>;{lE_Ǻ;w\T[vzݳ ߹s_~Z2~xg3?#IIIk۷91cƠ};@(W)))"_|Qܰa *˗v6jd2鳟9СoۛO7m{ -\:uT;DjzCF.5)RB|"?VX&ѣGߗM8q"u ?_R EVH([dɒ;h{SJjҤI6mS_<۷ٳSO=E˖-4hP wwS~  @I7gΜGf6lػwo ۇ~sN}lٲÇGLܡ'J;vpM'''A8(;su_ҫW+\SC'x.{5hР1ƞ|wygĉVq@ĉྈ^r壏>JD%%%TR4}zJ*%G $; /ZJey#GDX=XjժWo߾RSS] .lݺ,C A50}t"jժUdd$}nݺ!%ݻ{?_z*br5jԨ~SLA(n]ЩS3gztʲ,If{7oރ>xGyz}Wz5k֠ %;ѣGaÆ:t0ѫ4l^?-[˗#@ C~gUT)9915JHHП@/Y}Y}:11I&HMMMJJ؇X,M4 ]z5c}݈yvM6/߿5u'0f3v/tR%-ZTR S@5$mݺ>p-?V8p`RRv9f[lPEYTTTZZdg;vx1սJD~V\pL^999 J%Ȉ#>-[ќ9s֯_BJJJtt4u0j֬YjTZW_ELnEv-_>%(99^z͛7cΝ=zѣǏ?_5jٳ'C6mP/qfϞk׮ZjUZts}:55\r |IWo(W\ӦMqx6TíZ`{ʕ{7oT|-[j@.==r=Ru{=,+ HP7>駟C!!!=믿~Y4`> ^znݺÑ!%xb0C#; ڵ 6lǪVZF I]1K/ر}I֭c]??;v8p{˖-ۼysԩSJK}~{LիWÆ {饗h@PEjԨ5q0"ݻw.]vP|INDQQQ)))x{UX?@( wiiiDԮ]N:! EH7{%„ ㏑#G"^Xf3#F"7kBカN1_խ[N:5j@(Ƶ~`.7!x.%xYP1F<j&4&sĝ̬%x֐ Xgfe2bsh\BL&4V,WX1J uIII/2ɲ\V*U`xLJgvuϞ=%M6ݾ}$djذa\\-X%x"&&fСKL]׾}aÆa_PtܹsΛ6m"C֪U=O>$<ݻw=qD/ߴiӾ}v횚K4M~w%qqqV5jgϞO CbbWl]͚5]eĉ n߾= veBBBݺu>cܡ̬_|Qp%KL GEEM>+y旯Tҭgw"[|yڵǎK:qGڿ?x$x()Fc,  -[㚝;w رl]DDܹsHmۖھ}{}"''?~?ҥK8iժՈ#vړ&Mj5jԘ:u bbbeE[nŊ6mZvk2e|M1c7n JWPᦽծ]ۻ6-%%cǎSN-N:)))DЦM%ZїPiiie˖ݻwy]v׍9d>Xvo|5q%Ѷm|unԪ$?/駟(PEk 'Nf˕+״iu֝={ϟ ̛75vjݰaC=fΜy:x7Fv/^^t͛њ5k Crrr\\BHǕԉhӦMD\\ܘ1c&L<6m;<<\_זx,[э;C(ބ*5xиiGWITVp9cL6$IB+C_DӧOo۶-#3cepz[_%K/tgE(?xV8ӿ(FB&ԇ{=:U ߧF#< y-xLUU1 aLv4g~kB&<Ge0r[>B7 xvv#QMzwa49bMQ~EEDDK֭[9//z$xM#͡lrD԰Aùk U^sF dT!x%ƘCs84JAAD_xF$EQ._1;N HP"pUMBxo]ӴcǚL&yDIN?i %x!˫vUS5Qc=<2t 959v@+af2Aq^ lӏfgG !q0C\~vK͸yWaDlFC}}+=sݯRŵu_1BJAv"j!`\h^=n NFZQ9A %o2D‡Q} aD"OY& % })((o8Lð TZZodTVXXhh^]YAу@:Y\\aVbyy9tsskKCA4Ł~II~'~$#;>7#8 O't:30nl 0 ;vQ9"eHs#IR=;3XCDMMvDhPr&cxڹs< ..%%%//"ϝ;wՇ'CɩY4EEϜ..* l;333=3Ⴧ2vo/%[P :;{W߂!XtNC}kkkO:mmEFFFeE% JR(FOPu0  BkE{CQy'#hnCw#s9}!M[JAh4;+xX8 ҍDT*{4*BPEt4DQT:$TϳOgKA)~8a!(J]] (5a;M8Ri8BP ;$E)4 Jq\/|Qnt7U|TZ^sI[.#(@vqn^}}[F=" _!WZ_)}rRQFX; "(JC4c$=>|xq܂(jgN̓v>/M<r6;nvCye9BnH aFaԑȮ y睐:;MyRT@iCqLfl ݽ{(z6lZjB8z҅Kv=ѱ{nHѣWMA)t:A.WǮ\#9rȝwkiהݳj} +9~~~."kە!ʚo7|+ 0 s(+ ;w F 0}!ĩ ?ťK232[[[كY`t1Uu_{㡱qΝ(--mQdN>}>Sٹ<ضCբRZ۾+E߳gCRRRrЈМ6c9L&AtQ;1˙J__xQxxxFfƱCV}xpO(JvZ]Sk׮"/`QB|˜c|}}}.]R(h4ڠۯjQ9u|e#F|ljzmvu- NOM6%&&+vқjW'Nw,`7닋qONvܼc*2}}]z P7vJ#q.mHhW={_ϧYo9jdfF澽zWM%e%v L&6lX~ܽ3k,Bq̙٦%a$ݵ.Y$""bԨQq._pر}Gœ766UVTN{{} F)So322LVSSM>+r1̽޺} Sf }{_~eggT,]rm[JKJzGK>" -_\.yq[[Zϟ?hc^˻w޺:_˿ח/]6a?8-%-55`4 Osy7EBѾ}~B֌aׯ]߲ybwav9p¾\Q/^k.^ҏ/\?]999{'ħeݻw>jӴxN]gdD{UwTu899DD&Fӡnw7ݧW\u}E&-p1[bE3f^V{kW׺O}f% MHONojlE ,pww߷_|f{k[FV=6}>[UkΥ2i޽{gN6l2̮L ;(ͻqq|IuMޝ{=' LBO:1aℹs熆i5o6|iL7ͺoԍj*GF􊰇"_|-bm`ʌ)En_m-S&O9j͛6W\Uzȡ.=)Ӧo7JCMfСCSSjj$^ /p>r8\l}7~̬ǏϞ9@@}oc2t[<%K.o޺i&X̙ܽ3Ν;7n}͚1kǮm.NKؿnnj0f¤ɓ nݸYu/8jjjf=̟4yNo׶9|4t/HHH0cǎ|c$agΘ+yz1 __NO"v9gmCGoLH %q 4:ͅF_iŬTuT kB 4dᢅoM{ }6) ɓ'VR,)+xl.;???/?o҄I ?3n̨`>@(Pf=0 <,HL1fe~uwݵޜd>쓂C!Br,:&ZR皹nݼIEIa݂ rJ2a/Y&L䉓l77I&0-)*ٶcJ*,(?44G7nX@ץg?.}sS'NWUk^;o3e[UFBm|eEVe޳;PاO|8vz{Xwn(z}6kǮ'%m M;6mnӲҲ=,dS˟l6 ]}W뾚-lϦv״ƎzmysQޙNtAd~-۷wn lƆC}sYfu?+W~ӫAQʊZ?c}_ZZf͚E.JIO f<򚪮o0$?465]vNy{wlyY~}\sΫW{ YlE~2eڙSgVXoXwB [6mݔw%Q٣j雷nnjiʿo竅/߯˸U{+yMMz~gΜQ*씞~捼y_|ŪXh{ӖMGtjkGm[vڕ1sLbٮ\C!XjEJrJC]ñc`N1yIVVEѺʚ93b,GeQN۴u@`@ݻvQ[]۪n5MK,v_tjh:!6z˽2Ҷy+yW6lܰe߼qJ_0Sө?oB"Bvd12ܽ5&M>lx"`+`0!~a+׃y]'NMʕ+h fI?m Mߙ󎧗璏}FAWc?F6O M;b劯}gϞM6 KMO3z ]_YY PqIwU3fJaԫ~/+,kinI>GqHG^^Q!% [?݊ H2h'KVY+QvhX"n״U{S*++Q:r=9<UHm6ZWb&466556Բ~xf' ‰R4,ν;U*7W7̆.qq}c=%!+3 75r88Q#4w\npQQ"׾}k:4N]* " ⢆ǏFyQ,&4c6 pHOOϐАGeBw5f`vj<#MMM #Vx𡫋kxxqXI _15U5 ǎ3L<h4ۗ qА_^\XlcŐ'M7FvM3vPf3[$U4Ffddܸ~ck%hZ YV'n@@ lX}u}g[7޺ SgoF2IOT;(0# JRCCլ UOpHөCbR?jugNc،pW_~Kn⪚*@T*5n`ܱc-\40~7ưO,v@E A/zTTQ^1q*Wӡ,v=rB`2dc6 1EEtҐf.Ss)Z[ȇeDHĞ{ښN*|$HCqgX0]` un~]UU:_~dKq]S[[Lhz*?̐!׮_t>,lkmKMN6Q飦 _7@FQ)Tfkoo?r􈯯c[[[_X-"7ѼyW)HO蹼 3қ}.^=TګO Y >:uB̚9 0* _Zj #6}:=;YD<{ݼu˵_5(nٜS ¨ d@j:4.(v4d2YmVrg-]$B]* `ш"`0 ( [jUaÆOΤ1Meq1sb9aXFFFٓwk[ۚn&BB#Bttvw^KgN=M}޸q#%5ek8<$.Bsޝ.ͣ oN9XN]`ܿo_X, l…mmm>_Lx0YV͊aRTrv>_z9 aK?fiZ͆"(A@.cFPLv~}_u~ vj) ͅ OMfcGiTڸ1IFi(T40nVNs0Bwʔ) : a;qD@@x{0ڊhMFr-`?vC @`8֡oFx `C8qfAop8YV+:N~~3gD`AҲRj- X,;::  !V԰8,r\ `FB%@0޻{nD>GG0J!ɠFHݥ="o!@Q*K(RLs``8b23Ri3SljcvIÒo߸ `Щ﬩q=(|aD@A\^Qi&&9n8 BJ8; hLΠ# l1S(yJy6M7B F@תT-[ھkŊ]sЮ[n9yO===NJ :qwt:'ÛYld28,* ABCH2"tN3a N?qh2eZɭ!0sOЁ|d>RԮ7pbV#&b+T:c 2G( C]]`V* DSS@- ll6 zR^V4һotd1Y-}{)S0h kIIG}]GFjET-?SW+x{g!05(4N)9[Π+H$ %Q*|||rszޠ7ڌBԔCggg'u81X Ѯmw;jP9`dfe}=aH:>|p'p !_}UZj̛|>^^^(gB._9pF޶m[HxHjZssrI L! 1ƝR?iB@&@(7R1\ pSz&q\*-t=*R(a8f'#0|}dFj(:`̬S'O@Dj(?*,S_p@5C{^䰾aDM#BC>r<@X,W)1Q1iii  28R]JVJZV+nOϙG^EmzCJZ* ?߆KgϞλ>}`8fŭ`Dת8uGC}MMN=ydpX0yhH}Go߸ -R} 'B&(ƆƪN~{vZFH ?q|233ߚ8`Qϥ;x䠺UOaP.\mO?csVuԤITjl,Yd옱C3cζے.\޻]r5+3k¢;wpy\g󗫾3fL^ND@oyC᯸}Q*PEBN۲a;{bE Z,g7?'YPxxb~VTN0qo?yѬYcǎuo Bg!Bq\v=;+E_pN-:t3`E1m4\s9ĩF͍.\pı99966yCn߾ee.EQQ* #|sV:||&:h p\}呯 ,6kRi(.)nhhV' ObzkښZqyvbh4Q#F4燇3 ACk3PSS:j(?V.8 ePPW!^r\>QJ]* 9q ()-b1Y&Mr;eYl8N XR]U&ۧӫF1aP[ؤr7wЈPfAJ/o/qY{[@(psw۹cD*>u:xI%R2 bw^cxbb"Ar܉IQQݫwPhF(X,~z8BhtZDTF2[2իW}}}4L&h6666 p&iOTaa+4*W* ~HhD"iljv:FSAAvMKKက>ð[T|euu &?<,R+!Zx>}$D""ZZZTͪC)(E. B& "C J%Juz]YYޠOLL rt4ܜA8(q6 B(B m+*:S"rŌ`b1Y!!!*A(8XҲ,0[9:h,ǗX9v֎jfeWldBc=y߱'y[SɱDZ O@Kz^jk8/aMRF=r\.p B]HArG!C3llp20 r)_x˽g͘խ4cy_yb[%\\\Z[[WYjŪƦ+yWnlM9_,`zj) ?6iW֭nJypdnKgEEEaiaBlɴ*>_UkrFMRҭnEi/ӕrVI&ݨAB7M( JNIT*|puuptQ899e>qĪW546lݶO?asd|[gYv)}9pb !d\2yde_`^f7BL׫?[=(nP2etK58H>ܯ ?A xJ=eb8?l6۸|}ɀ~I@*yE='Nt-jzj~ NPRt/[ cw{0vXsIƹ/VQUYu>fmܼ8@ @b|.o D";o^O& ih^|vF~1x<ޯtԈQR=|gggǺ*fDxWb& WFI 0Sƹ .>X>>oRbIk83 -BQ8N]4P =_) 6ÿz8n7t-l6;7/ET߸yN޿lnvfΨU]X~ufhI&1Or_2f˗ц===!a; fi~۵dh@9 (4Ѣ5Z:^2j Ǽ@@@0UymV٨oAz 5tFFxy0 z===N&EqN]ΚoN?oXV(;;S{20IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph11.png000066400000000000000000001425141222557406400241670ustar00rootroot00000000000000PNG  IHDRzI}FbKGD pHYs  d_tIME Q> IDATxwT0s}Y" U"`I,%&&1vcK B4V]+* H.ۦ9ww2 i>;3w~d2lB7pQ 1G>|G8ؿcԓ766䑊v0]׮]ۻw!N766^zq pB0BADӵg_zwk'zV|#G>c[K>yt* ",p1s /|`/`Pw)0ٽNSU 0`8A(V;B2 nx4&F10¢ ;gϢ듄gxߨx۷Q7ծ`]`Yx t ^dUPtpڀ1H+`!V )x(AS Q샦(p@rv D `Z"4v{) `B$cE^ƀ(ݐLMY '8@ :dUpX$# h:xp wX!|\x.lwA2ScXx 8О6{{ hSYPIel6{`HD3 "#1F HT-X@,tL1 Z__%!c$b L@"0O56l/x8.a1D401 0ǀEx[BExL!aYS d &"~oHzpkIRvLj$ǓQK02 Q{l dqiEՃu`J#ХRVO)W 7J `L  F"I0CI#DEqpHU:>>(^ @u DyN"Eb1:6w'#f(N 0tnp6o6q[pnqD'N=1GE#yt#Wn/̅ mL<%v;e,Mws(oO$r;8І'r^'wɴDpLa׳8JvRpĕ /1DIH 97s6DVb1(2 n D@A  Dd&2Բ@` (IVˆV3 >lRuxѬJW郞իdV+D8:U&*!d4t6Yߔv0bp%ӡHË,zvMM#BwH!7zZMSygUɂVC+pلr!e`]"W6?8z۶?V&x>ubQ=7UЩ`!M( `(X$&CVWm[eeG,*e%M1?^S7TES8Pʀ4VMp}jŵAh-t@M"q@]WdpL JdA ??=M{ǎuW nX%k:ESʑ7 "^}{Bi0|x@@UTKoXvƘ1H $!0?s`-}f!n,oiOFa![G%8"nH41t`*?M g^b͚h"&eq7oE$ޅLW6YM~K)](ce!9g,YBιRqKxf2!OmXș9h4ww슖V8Yq@ ιy8rSÆukUuq9me_664عHB8(xCVE1"J ϾWB"RiʒTShsl `$v+Hm bYB5&PQ<"?'yFE>ކg24!~7*ÝƮxx&]W4\ o qE⠨_ aÍ<<ٞ@CitdZp{t›Ba䰰P(/'o a ܠA v!uI>;ܱ.u }cJA>d$WXѧ[q`sfq:%A =ye{C`(ڊSbY3 ]89z}˜zY,DV{sgUl_:X~̊yzesU"2)±qƕ5㵷>j_l(pHs;{XtE8gF q@ __^ujc]VS#Kfއm{S4:p̰;œǔeY{9ݳ>K~ƌ4_I|ƖD .V:ur°n}Ӛ{\NqEvU+{0&!H$yVf 04Ha3@$V UpNDb@!ʠ8:,U/K$B*nk숋_+.¥ r)*q$@8Њ#jvh;hGXg<+qE~(rq`~1R\( 0S@"f`#00BID2{h)AOpQ91yuvf{s07VOZ]\vSZ"$+-&8\s|{i莟𳆦Ϯm۸u_a6a]W%?P;7%+ w;w{WbCeڲ5k/xLC?{pXkn| 2nM[7}xs.8w})=ܥE˾ضq`M1+U%_~%hfEE唙v s93$ne}>ԽcluF/^vMs?@c/s%Uj)mlw/cr.ƚVm q= *4T4{\B&nP @0#`EP8n'46,@A"Pf DuC" ' {s on6'ItU=cA@7 !%'nBN+7J+(;֮;ꂧ@Qӆ;:\]h E@ ce&p<;A< jURpn퀦18gBn=6r8m M[.Ľ=]'T :>"a1s`rjA2,J 8$0 1aΌOu~9,.~"*!\ǎSΜ6;~rA8WAl9F|7\ٽ́\5QNF @DDJ2%c\çmۢe3g18uy'v.0(er~$d#efsSlVQP6m+ZJ≂b+hԈAL^+l9g:oY2*(\W&5``A8ٽ ZRYqR &D @q9. ?L> 8Ӈ UT\r E^T:(3noM{䟲Dep1[dzՆ:'R|fKW>cL'JF/.Xט3jS`V >SDfiwa5}2gkU ΀q>@׵7wu,Yk8eX\SR3*$2rN!8m d n ꃀ Xlb` 4>DQdRYhí& NoYꌳ6=nȪch tT*A< \ |8As所 ʞ{C8A0/;HD`SuCGQ #:5r `0HDdm 8Ze)C01"X`S>|!9ŕ\q,# n ͛>tUH rX @qXlV&"0[{=]& 38ٔVfQ39jn g+Z8X3SsUU_صiIepUtXd{m7'c9Q:7~/[uGӟLQ| EQե85t$!1Μ6 GS%e@3/߮(IC 90 `Pud}MPCdq^aеLkg &~@ Yb^ױMMG"9X(It0Tsu  ʊlgB" .' 8ج !"UP$2D#ΖFFQq4 U@$g*Drq\a^Xp "ۜTę __sa,-9-'% a)fua d6S`ʂ)e55 vB0`?rGgQtW^]E1L qz'Hۡ$2j:jHC$ 6 4FAj`8u!@J}PnAd ua0px)F< Vnn1WkS#L;suAn(:S h/qatd]ǁ"x'va~/hg[>PB,+𮸭gx# Ȫs6(Gxvxs vSK҉<=.KA #1s&q!b@P {4˔9yOWV^ZДZD}3Fڽa\V)'aaF($fQ(V9,9\6h Λ#@8wy$ q%Rmg,d`R)pY6̅pq+jjśzgZdn*4v8PCfi% %sqW׎e&vVh 8c=]9t;<}pfpO7x2 "#Xx=t\x876~zg\"sZ WZpG EO Ot;q=x+V2 "pPW9*[8 |gOPi-7]e׆{n&n'<G^:-y%[L9ZsNo^O &|gD Ӎ'_\LmM6B ^" lbqc,e2_I9?m;qXU" 6USjCReUܽ3o?FLT]M0"X,^"f缦U5BAH.De-9d`u>4 pե3{MQIvfaMYSS$a`D9pn`BʘtC`eG&e$9~L&B lX,`˶}=j×==pɲG񬒠za$.Y28gVOSj6[{y+UBXUJRVk&KJi2vRm"h,`Y$e6I! 40nI"/$,B758 m&Th@8J#pv)E=K[pIb.x4#GS_3nBO+׈2< n0ωK`Xn/q IDAT,q)q[%uā#7yx+L8h_+Ni?>A<g'wǍ2uĥ.xyx4٣r񦓁s`ZO =N,1,t,8L5 Qh Nxh8mݶ\1G4ECԐ.I"Ԝ1Fm)kLcChvra$A"€"1&#F/&"y- b@D$3gQD~ê/&9sh h#jZcn87#iFBfKVqm0w\QL6!Hv+Q'q=jF-fܠeH 8 0N;(*ح`PP5Ȁ2*H"pBax "IhOuʀdHj.v oe]w'x.?n ^7cHgsG=^'Rq87c .Ďmó@i.\|# hh'CJ9.`!q4-Nf9eӎjkkTPjx 1Qͬ% /dƼ틹mm~İ@"0HDℛq矏`D"iZ͡SƜ`9vSG#{k{˴d6jy;Im )$R';PK N>|_sy7w&eז${7#tkcǎm[}ٺ.X@pݳfjnnN&Yg|#O I6ݰagʊVL1c2)[#G> Quռq k =잏|#zth?:@>|#3$B P7̎s|gq11~$B`i8?Wg H8J5Uˤ2~k˿,_sS"j42T*?O?9#n5o۩*`^6뮓-?M6m(eZm;q֭[r0 8ɇ8n8*\[CێYl_jf,g-W;áp9;B*.S\c,Wm|ApRd媕Ճ N%Fgp$gמ &waG>o%N<QeY޾};\Ӵ+VBG?ps?|۱cGwOӻ_8ә1g5oqf헔̜9sٲe?Ozg~Rv심nMt3KtYg;%__OؾcI`(g]DQ^mذaC eB-[CP 0f̘O#{׬M8qԈQn޻{܋2v$s{94 + ٵkB}9ko^0hRL2SPTձH쬳j_ '+>fgV|g+x%tcO^ZZcow N0?8ɜy!A.\sUޫE17˂,{k C||rW%gD#tbzYf?>cƌ={B8LL=-w!dש G7>fיD~o_~1KBghnDyna`3qiE)!D=A@a@{Yd7t: ؎;jjjGdǟx?9mqܬ+mM<ۦ]eP$Yβ[n]k .ps9f\@os-2|(iI!mjY!H%R7gqƙg&#ik3òw%~|kXku㥜rZv8m:m`Zc€s?7k,xGvu3zUZbƏ/X8 hcf!Q ZN#NCӧc1%O/5jTYeً`v"e -^kIz-'G>#[hv41$bL4n33ҥK[z[۞o{̙\s ^o?~uuu:=1YmG1|{?|XT|k̽ˮIY,ѣF9\C/Y/SFSŋ+(zfDYdˌ3\`CCCe,(()-YV\:O>w.ZhI}} /pwʲn{ѽ+{O>,OWyo,{㩥OlgK,`>em˖-ڭw=0y?wB`sݷ-*,z6n܈_K.8ENڧjo/ x/~Gß-۲jN63fXrC3={DZ!+lď;vԩ];OQ'Λ7﮻>|i9:Ż;N?jh="@cF)+/#aXLg?ŏf6"G)RaŇ+c%guV,{=hѣƎB !@}=nuXyhؠacˊ֬Y3~xٹuo_]_&&c[Sh(cˎ~-v0w`9g?8P(=hԈQfO#`ug+?;0^QZk[o?} =2~JaaaCTQ\/RT\Ի S R__J.h#7hG7?8H ֥-`~g*++z_~77صcKk:(^+]z괒?f o1qF8R=S964c_zE\tݷ{=ܳ`)1 C3^u.\8xkV6nY&RJU*PZ.b8Τ3Ͽ|UUnâ%z _kn:yG> t _-m۶ wνwҥW_}… yi6 tS^' PP^Z΁;]N] [n C>,2L 1+av}H0ڬfasν^)_x1 Gsm+m[c /)UvZW[L{_r%GmAG%#9Pf!ekHc5Z[}zמ].k歇^xq6-*(J9GF.Sǟo߾۷~d[2|79n; QJAA0YTq3zW kN<aD)圗6o跿mUUUi)㧬XbL;mfYرc%Yj;wwawt6Mѕ,j0_~sΝ${nDŽuη8 ]Oѕᘏ|#=mr }k]sTVT,Sƞz:.//::?ouiS= &0N}/v#Ȏ;gRszaq.I_ j|cƌ9\sx媕Wewg%$@ \QQ~ ݠ75)4`.СC$͜6sS׷WEu`CeUmʢŋ.R QFA c j89g+V(V܀!G^f9(#GÜm&]P޽'MdvaX1d.^l4(źw"zn/眿 ,8p@U+2NkV[[;zP6rF7p D}>pL0 Æ Ym}-+.6tX:FVOUlih%AR2QR/ׯ_4;z찡FY(o@ qy, #I7iSYV nݧdQd:JԷOҒҊ)n;uT,V`+zUyߛW=ZҲ~} 24Ύ1bM]p^eYe>} *+*J˪*vL$d>}+J*嬬D;B*[eIVJ*{ӦLÀOyPDC}ٻwv}bه>h iLS'Q2cSir-^/G(BgL_O C&~@[3,uN0mtu`Cx5BnkNmˠBvX77>;,+)~<|FY8l_~뽷$Q:s?|A,FauyzV9lqG>EͤMZ9w|9"L-{ѣn]sotݔNt+ѯ{`sv3~|?L|#70Ly zZ;?'|#G>c|KG?&444X"OG>t,vO+# N;$xJj͹J%W|ܯ_ҲW?MĶ'B_vLF<̥.}W1~ꙧ̞u|_ HhC///3gEp)S//I׿Zf>@6oZ9Z; a`5)snY~ٳgYPj9b֛O?=n7x4Eh24MKg ^Ca|]wUVQUy!L}yw}wccaG}7vi=ヘ6w,2;w_UW;h6ڶM# Gwut*)Sy{>M~ZVluu]Ož_q@0Sc{Ij{쾇O1'O`jb.]z7;ׯa֬Y%x_|ѻwGy昤R1c9kcLZ?^S+X30C3UGǿO IDATu7lvz=^VSSӧO[N-ikoolZѕ"] ܖ̍#DwQTowf&!zH& "**Ҥ ?&MiRDA, * @@JO脄lcMHB(s8̝̽s $&*<|ic7L&ӥKJ$eE IH:st8vG1(g]x!##C$@鑚q˼p6mLF;KNIU$/tiiiV srj27U%Ͽ:{AAZs,GHQ- 񈐥olϒ=U(.rj{o"?Ϸ[Xvc l媣#F튌(q.&g ߉6MZZawx;BL &7i֤K.Æ3w$[|;vH>7/R0F29rYeOtFL4lJx!8dAbҙg' )[es9\s[;nKWt+nzjٲehhG}N 8 Y Mzy"qE#bP;܂Yv]xvڠ11u)Mr: mlj%sFdM6=zzMMM|CCBsv=ݞ$I:q}>۵s 9?bw-kٻf 6_Śssbv5o񖖓\vV*N'z7޲e)Ñ1ogk,P}D n՝.^_iՙUèWQQC#]>gӧzm}KrSq\p﹔׫ʌ89L' TdRL$t¯m$&1Ϙ=WHr& S.us3rWI3f>umx̃v#렠ڔׯ0rMG!-zn՝ɭ66R|BJ9xOnyzZz t:]'mظ!yeM.p^g66`ƏUBvNZޙ:Yw5۝mtmGF&DiSl6C@)Zj ޲oۄ)[A4sڇgMV~å83.mr9LhiG Id$)l캏e_JjJ``}ޭ{va-G lOmcym~|Y7IUU___!|˛v ϭZjTUιotҜ9zC̜1thi;`>|x.]i^z5mtԩ)˖/{-|7qqO=T^C$ݮjt&IjBre{exsÇ{`HJNe.pUPTJ㞒9T}uԵZ!H1f}m/ Z+#_[eJ:}aw:<^vN/?7l>VծU`0>sڠ7Şx"jTU9j7Tz{jdǡ?JQ㛶tN,_yiw,\ 8繼jUfg^=o3+ǜgsY {kT/ޒB qͫ9e7q\K,g[?iyWE}A)s"|U@ΑJV:u7u 흷ϪTHB!ϝ7w]cS+,j໽Yc}KJH7Ḅs Q' SқȒ,7g^(Rs^1"cܹsSN]r6j䨭o5kV F̹3K, Z&M(h)){~3f䘖<`9}vK{*ve[3;wgc ^d?,۶~|s[>pŊ=~ɺק/cߜd |z3,FKFzdV ܠ309 .`0CA+MVeK$\. ɒl ^|5L/]T\9ewIp|}}}VkbJ"zF !A!\%qEBrz ի_/`YǎZ}HU+T͎=ܱ`4t};<رcϮXv~sĈn[@9:wߧ{ک+TO~B`Z+-uBKKQQQӧڀg@_%YZlݡ0Ο?b0ƢEzY&k+W/IR*M[:Զ*hsɤ䤷gݥcȈ8gːO9X2{sZ0qZjݣ{QGpi+Wkׯ==wѭRJNũ ɝN5Kt̙3݊{ڵk7sL(;U',[5ҝ\nMٱ5k! VKQ{ֲ2!~Asá8CpI"!~Uہ!~*Yo3F144[EF vŞ3:]k VEDD<ͳlB|p*2·Bp}#C@dV})[ >+v=[+͙76 !r.%KSqjIPYx5z*k8-8U])%5spr {z}FW^ըITGjO$ SqRZ&vjT*{`"ݙu [l,>B i}QcAA)I)7nld II.Ɍ3yJh-_lղd@r\r¥-l*o۪d . y:.[W^*_d \Q˅2a5mLoJ\a?Ϙh}wVllWsYN xzО\ ̠T:TG;$'%N6˪P⓴:P$!t#66V6AA$ːʅ,zBA*v1锘 jSo-80XbRjzj-o$j:_Bd{Jq40 awhVN{ CJR-)%g$]v\̫QƗ_~ٻW}sKLι`qf7l4iҼyj׮r9U'E2k&3$GM8F"WjN̐|Ap4lrHL:ul>CjWy ֭[ײe;vl߾}XZT7KcWj0Zjy#cKM}vwm81mmV\Tb}59Yr%.rDyl7f-2k[ l<$h=00L‘(d{![ZR=4p՛?ܽ[wqN [MK{l2ե6{ٲ˄$tc>sJd,d:I'3Y.!R9$,wg$LA01rs&{4cuϜ Bt'_o͛Ǽd2Nyʨjf l0'ƛ-fB0F7wJrvJ OKI@WN"*UB񼖒 ΠLRoJ行 *X>|RBRbBeV&Pq Lt:^*ծ]{;$8\̹1ǜu͚5-?t,幾繿g`W~vlCCJUVxV. SX" G]V*[Lrĸ Bݘ.绒`7'KʚfGewGV2=_c9DJ>[m.Y/G}ae{HJ3]VnGR%+Vx5g836jxrO{m_ݽ؟^Rs/ȼL*Eyb-|ett+ι`vۚ#&L,Wb6O=c.rN$j:UGכTǵktF1v5Yg6JƄT($A"N7eN9Wl5__7-&KzrR\ڬ2e}EW3-{3&Lа^Î;65lhڴ#  0a۾4m4ۿ~.ܸҥ9<ēyw/Ѳ&&899YY^!>k FjM}ol>v٬3贛1̾6_$&șC?~֭ZǏpB!\s(Yn<Jv9j,f Ͼ|q?G`02 퍇RukF#֯ң$YM@ZߝVt __qy?*Kkn"Oްni ޲9CB+IIP!|oڝT6IM6it8Uuz___0oV TUUf)9dqoް(FqĨ75l2dȭ.$5io:Yrp^C&OJ#~4aLtwc$E7ʭ+-+Jg2.x!jԬqYW=[tޯ^)z {F8<[.1&KA'1Ty09|EG Ƙĥ[=*L͹9x_7wg#YNNE&JŤmP/^h0FwiUmECQ T<##;%E1s/\vo$fklzݴ?z<%-%$9*VXr%!9ZhOHngKIIX-b 53f4k7Soni 􀌈-gN^Po7nzSyP6:U+o;!C_B=rHSl׹ :5xMV#2W3_zg,7 SN Tln@ ojV )3z̔)S (\K5{vرCq+/<64 !"1b=9&OZx[ۂMSi!rB ^{˲*Kf \nעEBBB(q}|p t:( EwBH8to|3$Ewx"uoxՆ C1)N4HCzO!ޝ{7:YN)C!<)L0$oP@m6Thw #^ޑjUd &LhV٘!cf;gKB(N켮eueu["v,).9m;t]uٲe( GZj |!ޥMO-׌(WʶFZloߊq<8צ3 w7QM7;Ϳt ! բ'i͛lf͚)S$X,Z |B(O;|3Ew:w n03;#SKOH7tЬ !<)nn jQƭE}#IB(tΘ1c֭؅ QQQ.t !I"^{ye<ʼ-a !<)b.|ňoGx!`ѢE]}j0SBBHfrޙa׾Ym׵wc۰-tB("G+W;v,% ؐdJBxRƇzҁB(B!<)fa%!P'7IF5\+һ8FEEl?jժ˗߹s' !Q3Bdïb;&"OKV)yѣ8 :D!ҊB"J)P鷞}kСHE#th4 " Eg}_4dݲuޖXg,P'yZ:[ͨwx/:{c&n?V!Vj4 Z,֭[תUnݺ#8BW.!m/ޏg3U};C֯#}8o&u]]'*W\6k׮iZitB(3'N{bxm_q߉5M +=LkZKJ4'BN׸qWlb&fPm:4auB%,Xs{,}1ҥSS/F-!E EO 6kz٫u/(p:?/C.<<C?gϞ{ްaC:uڴioyKɝz}֬YY{b|5#F):Uχ氯# ᶹ?l00Ҋ 6JT)~pLf?C>;j3ːz1Ku#AP:%CHBЛx*v)qAE˸Lu#OXGĐQ%YtY 6L0e28Ï20ªX@iExr0.¬s~^sȸ0pśӐǦb*ʹ^: O/j%JҚ{'_p6͚7pH'%!I>l-Zx OQRȑ#wxpËw/ ۷'@$<q.tEWJ RX+`+k֬r(7em۶jժr1c.1gJ:B('q"A*rp_EG;w @J U$op!FOTAOiEx% ƍwBx_S0.!PSYk֬q/f_[%;q)۝|*T;9,,Ϗr_IoիWꫯ{}IJB[);ލn4ރ#1#WJS4-x7!\ E(ÃcFomzCc;uteҕeP ꓐt(B;$,dڰiCC7°yp *BjF?"(]G5rW^yNXaCe5֨԰ea~إt{?ҍB8oGle,3  daTL-ri^զ68xE@2eW˰ @ ȻQM=WN_%zKRFI+T3 䞎Num{ay??? `M~nСCScʈ)`վ>;[S B܅ dtDGχ0$oH60:; ш`+|EiEV *!3]_閟,JVzWۺu8pJaB(`eve~k87n,D}JM4wĿ $L4Gz޽{-K= ><>>ס2o`ⷧK~~=eQvЙCeYo˪ pP IF|/]m֭u<:DB)_Z R-G\x pY\¸q l?!իKUU}?@ӟ9{r gǚM&3<4ƍQʡZ$haP!iᖏzQꆐb֬Y> .8ct6lؐ<)2fbDL,rҥt~ 0M,oVIRqEQJJz c * T2ׯh3jªaOŷVGʔ)3o<:!c}}o߾#G-sGVhذaZe@R"?=z؊>g}z9!h϶loP[Rv>h3z %!<>‘iX%I/Rk_K[1c`2dm}'s#?ǂ QJO):TU1% eEϘ xb#6q!hx?ev)aj-_?IeR`{챣Վ 'IAkFG"೉إfÚtD ;v-E784'VI3ڵkkNGDD,Zw/#o\8!#=#&&&EK*Rӑ^vtd )9xvl?3=kES]vCx:ݾwEd|,E !~Pa]||W_}jkY`L;amzر֦Uֹ3u{Ґ2^֦c`5`-uB,"^eQ,n۶m؅AӧLT .f`lch{`e x>D`A%K'ͦPFl4Lmz*?B lٲ+Rͣ*vBɐM:<Buk*+SE{!A@w~x񀔀=KE*t[.]z8]HNp<Ƕ5֯__ћ8BoVZj]uiG8;vaՅ))w}_߷jժEqG.<@U`=!EYcBBBLLLz͛t߸BJg!\7O:u?r*G;vOo~ēOիW"wh̘1uvܹqƄr g>3ʕCgv!냃.\xxO~]I,+_L,TS}&@tLs zyG ;OV^vݿYm-Z5lIka/Ԃaa]u{pfy<=q̶„r(uVW{/Kg_g;\O bcoP%yB(ߎ$Iݺu[yhW Ѷ IDAT;vEP<ׯ_߳}s6t&N0⽏m۶ [vj.]z1M68P#F#E"w}=Ea][#NHAl) '7֧O W^"ҁ g25 _:II@oV˧]t)..;AiH{ 5@s㰷=FՇhA1)jL{qe˖wqҥϧ4$<=m¦x۬?XF`ǤH;s0a< H#X?\x9< Z+;BxBHᒖr]=͜v9h陮o}*:eE=P#BU#˗o^3gOJڿOĚ`*wfY$rXIvpʍJHOJ@mԮjy $"1e!#Qq~~)!)gJŒQDbHbbq iY#rw g R_`l束\J!fȑmkS)HiֱY` 6n. DOJ+B(CH;#ҩ~`SU5..Dft9)wuү ]G[B(Xvnx_>O*}?wܒ: !ni<kqK~7ƏoP  !ҁ W- BP<0~<&L@7pWďY,|j'v;hN'}uwzI&-[ ÿP:O6<9ND˓_/`= "%t&E͛7oѢɓ~c Q? I Ty{?:sO">=Q2Yf *nq<!:P'8zM9|6즿6YfTTTŌF ~4nMD /@\˸M?lcpB?~يgQjVrTD+}]ӧϓO>ٮ];JB9HઊTsD:FD)`0".ptRSP_LǪM[C|0JNg9 q8~~~F# JL}߅]M_?ٙ=elD=:=z *UyJT}8<M?uX=C}zg?sec ]]1cƼd6#B44@c@'_?+9ȣ y3944!9o7"  StY5n0#D]BcRygς~%!fHXX؝;wrrR;7ϟB o><ߌm]6fN7l×qqIi( EaG}0112ԇu>`W4_ Z + Bހ70BhSTKBvv"yw#?m۶~z!8~}it—|+-#- f3@ˣ_. N$8Igeee˖o}/cn 0?`lOn|ڄ; K+Ja~~G,/@`ff~#0@a>|oDڞ`ӂjfo>}k p$A֖?^__3dUA"ȋ`ŰXQDEEc5x 3!W]D<C T( B HMe|2"00 A!O CqBЏjJJI1bQA|c> @gW5xxVG: !PF3tgW'ЏP40@ Nv Z2@Y`p Ps`Qt\Y`T*2'hfTBZAP:ɕr 0#B 0 EccGC/pWЋk=|6ۀHѣG'ofŋ6 w4B~r듭[,r-.]A`';=8򊊊:m_]] H׼y`߾}x#0ǵ@˫p ܃{"/LfQsQ^Y'&bT 7xyya 9 A$Hza <` ,8Ig~e 3uǏ{nlT~7}ȑg~7nm<B_,RFA )BB DhѓI09|u V"""hȘ١WBr{>>G?7w@} ,jjjǃ!5x3g!М]еX렠 s Fnchh~L2XnjH.T]puٰ`ޡ2M篞@+DGF/W, B >~/޽{ngϗ.]Z +zzzAAA{xx i a8E_Q7K? &oᑏYr=~~9D@bX&'';wꀎ!AN4_—sBk/.5P3irq~\p0BXG%**J$]pA$۷c al</v-/n_G\>/jxBL#D1'iw!x1w9ݒ<3l0Bh{/7VV="[w7B(2qG"rba';bV=+cc Ns͏WA:kcF" _Aee3T Ǐ?/0?W0yrn}1h+`j{]5 @@@_)=>wwB試M > s'|u}12\D.}!ѣa辿{QԄի1ЋG jh|aG!xB!PF>N:? !ЀB$mh`hJ9I}Fy !P $u1J&]Mrkkk߻+M+B&68 ]' 7M0atG+K/Q0bfT&,,yaÆ1 AM!@CA$C24A?2AX!@BdmmmBBBGgG(䊁6=B! bB~aK4grׯB $4M-@Pkk|>l!P5x`hH%} NIRė BAz )b`9xBhHXz(3P(} :=xB)eR~_sww*JJ_B~asF}1=xBSƎ;xiw~M)lG!0wo֝,P%֢!Sr9%PXW =+|7P%Hl5N#-MӪ]SYYifbFrHUB[36^ZGkyeYJcs+8KĆ $*-T[{eDBل ݻ'}||[_tRcc߿u֌3~^Ÿ--1c888<ǕEDD7a„',Ξ=/?gmssGjժ'LJJbKC 0yyyׯ_Jzzzƍ{r{xx Wk׮͚5|۵kWf9s>}W^177qʕYf8P(<~~Ĉkoz뭷|>?$$o`111ƍرɃO?%Iy֬YgU .D ιsδ:3kk处/.&]]]_hjn 522bF&yx_|2 (@GGG%q!qcP`xa|B|KsŚ0 #Y|i[{[AAAEeE=]= DU q'Ollhx$ ;Yws.\Aҵ$JI9;5{ xf\8 ɒnɨѣ@#32^sVVVGh8w\eUSP`˻u(((+%e%jA6v6JJfd`X\X|/ޔiSxH t-yRCC6 ryW{W}A\]]]RRԩS333blNNN'N(**3,//MJSUUU8oSuσ?i;mmmGfFC8Iw?)&n)+;I$I޼y/>y&[3ps+!9ydT['I L{W't IDATr4s$| 6.:̵273琜˗/?Y&hmiMOuvvH$eOR$~111rR mU䯾*33wC]]ݾ}L.&vqW"FFMU}E{mlhljnrsukin/\{473/,,HTzzz8pի۷oW]QFgɓ'kjjlll.\XVVAtPP V\YTTZ[[/_. /_:hH$zzzl^b8??mѢE2,,,qJڵkgܹzzz'Ntqq={6U#EQ555 H444.\{%ooN)SPuɂH4tа͛7?yΜ99|Ш>,77WOOoԩ}N;99dyyO?1lذ3f?A&M4ŋofLL͛79Ό3#""֮]K?0}7or3f :&_BonnfQFFƕ+WzzzURXkeeeEFF4=jԨ XꚖVQQ|SNI$'' 2*11155aɓ'ݻw ä_z #Gܹ|>ې#F,ZСC BGG履~b|ڴi]]]ǎkhh022ZbWJZZZ\\\WW׊+3}t>8eʔ8D /^Qغuqaa1cMV^^?d2OO3fd2==/177wԩ|>?,,nNb&00p=O>cc m۶ϟ?&--ȑ#\.>H$6m"IٳZZZ/622brH >|#Gjjj tRE?999%%ɓ'7EEE[nr֭r111okll#xli0[B?FDiiiSsKaqaUE{k)?̟;(Dv/Ϝ6uIaG$s9f)Bmx`30nB?gT.᦬{Y ߲uD"9ziSI5rmm^Y5/DS4u5g}׳fpz:jKcSS3]~m~P>j[ٴiڵk-Z㺺{XbeeeAʕ+Ϝ9dɒ{mŷ~ޞ0wtԴiӦs>hҤI7n:q0֭vZ{{{rrq<bee5wޅkXnݺowٽ{7[ͭ_r+W\_{g@IIݻ-ZaKK={ۯY&999'''**J{J$Dlذ!22wa7nXnӧJe~~D"ٽ{իϟ?_ZZ Yx3e2ٞ={f͚OOϕ+W:;;Vmۭ[ !!aӦMׯ1b\.߳g5k._\XXXSSSPP0o޼Ɣ3g&&&?~_?3PzTrʑ#Gٳ籍trr={͛׬YsĉnDk׮zk׮]I^.ׯ_O>)Slܸ_u񱳳?w}f͚dU_`wܩ7߄(ʢÇ/YDrﷶ;vnnnl;v]2%%Es++UV\tI,? 6l0lcѣ׭[(Ξ)۾}رcy睫W\. ]xKׯ_d~ddÇ}aÕJebb1cTYk 3g666%$$_;wNSN[G͞={ƍl9olW޾9s̞={ǎΞ=:!!$I// 6ݿa$kkia{ajj*{vww+ RYPP@QԩSׯ_ogg7~x[[ۗ_~YU3gNeeebb[RSS׭[I}ݻwn޼Ȉp@v;n… 8//W_ͽ3g֭[|լA\B-457w***;œ \Qh._o߾ /eeGŽlzw%rH099w.,*1co5>lnvuthƮ~jl.///?PTzzzt~NGQC2@ʖƖ#aG]b)MӦ榭ml9+//qbqiq6Il &'r#"#>QO%E%'Nl`PBNpeezzZjjjB&vmmm.N.4M[[YD"HZ\nww۷%ݒj ; $uu{{zzz,,KF--+W{섑Ѻu޽{ĉ޷***tttؒ/PE~~~l5b4rϟ?7k֬W^ytuuy{{ BQPP JUe<==}||(x<IH3~ӧOYfϞ="hҤIC 155eٳ$Ivtt---777RZZ*Hrrrtuu9ΤITw9NmmP(\n]YYَ;n;wUyyy||[LMMITeFCn{{{YY0FFF$I]ՄB!I:::7nT5|__UVwvvx2233r(:99VHgfffkk+ɺ=z+W ߷oMOޱ͛;wnIIɁrssx㍪g B'''U KJJثYWWWwwy<c2%I?-/;><<x1PRQQZóWGGgĉl?#$ǎ ###X8]]]]\\承XX@ hjjbYdѣG|Mwwwv^HHfuuuUU?r69`۷oN:}ΞIOi`>OrHn5 WMM~>n.,, h3H^ ^?*)%tOO?|evR|9Kll,ĚMQe㍭-EQmmm+V`Ϸ{) Dokk˶RMMMuQ.ZXX 7n)RiCCC[[Itt\. xbggagggII>Mvvv3gΤiZMM-..llll g{}~;w/_ X[[{{{O4I.khh 2$&&V D"^]]MQUlM$xyyMLxzz>;:*ʆUKK?˧OްaRT(L&+//jjjtX[GW^ E _Yr]~P=a8>ZX]Κ%ΝA7nݺ5yd015s s=<<*T89:QP(ACC޽{&Op544;䩓 ðw9$GuG\KKk|x >-[ttt4mod2MLˊrZZ5ŚM.C]r9]$ ٩ʪRfddDpe+-]Cp~G>wuweFP66 :drYH!W$add[7ʯ&nIwGW_Bԅ{֯]KӴiui5M---BuP(lh~%F(^rLę>֭[M-g=v4&͕bl„ $I]pҲ$QFQ/;::L/CCCI]dĉ}}}_nkkﯣcffvWWׯ_r.<<<--$ɓ'߹s'...==@T=zD",YDGG'++K"\|J$C%%%%$$/]."";z耀v$zWWo߾mdd4v\___x{{K۷oϜ9 kk넄MM#F?֭[ ؜;wnܹW^MLL,,,wss+..x{\\\_>vXvO޼y l%...))N&֎3֭[lնÇ\\\5:mmm'';wfdd̞=[*FEE/ZY$egg;883FKKKMM-222--kӦMvvv徾ѣIIIMMM:cccܲ}||o߾]\\8Sll;[n*((Xdӧϟ^vTTTjjjMMYbbeˌ &LPSSsݐ\޼;v,\뫫TTTdooommmcc;Ͻӯ^Um3wqvvNIIYly\\kvv ~ǘΘ1CUa[333gΜ9rH++155iڴi< I&L(**?~ )b\͍-OXZZ޺uҥK_Diii&LP=UUUifffccS__۷ox- %&&Cp|ss󢢢#GN8sɒ%/f.䔙ikkXQQb``2a„_pfʔ)6664Mwy ];gSSӎsݺu95r55ӧOwwwwuuK7odƽ{&Nljj?>^ͽt۷uuu=<4?/׎]..4CG]suL~t AAIIIB'9 qu'8 ~DdR]|Eyyy0a1cbccJJdRXWPVZp5xw2/\`dfw8g;wjjjϛϖSID===R qvu611ͽ~EyŃ^{;v477S<I+&Nuڵi7&Mdk`h`1fi7Ï{ ӿ~0kΜ9[m%HمE)bW_y%zZsksNVC0>}]gG{GN^P(P*n^iie9v؋1ݜ݆e2H${9v+++IK$g- knJSI@?m}}CIRLIIxE7a„ZlJ.WVV~'=ffffee:+諯e˖7puuu}[n}A_dGaSSӶOGѷw#mX3gdvAAA[kHI'2tD,tBPMְd wmuRoH]Ucfϝ+GoxXTT5uԜ7oAєPw1~?Etvv 004KMIʤIx5rcG;;;&M?v0??8p)+*+%Sr* 0ԩSFTbKˠ 0;;[b8tb6$Is9)IDAT߸q7o644,..~: =|PÇ (*:&.`l/̿qHM###R)׭[w07 ޵{׻ᆱ>+ohh.kt|rtl5k:fMu-Ę8߿q޼yUUUO>͢g3]nngϞ;GOCc<Ç Mߧao9w o``o۲.5%uҤI"-⽫ $Aώ 1DaHWjkoV5LFރ z߿W$p8zzz---[mtۧ5))3fPGylP'a{܂s 'a1͓K_8h~gҊәmV[W{?~VR{ƵC56[0+ɵs#mmmg$;a\VSSǟ~ŧ_Q|.؍W%aſU=|+|,Em0VU 1[>Aر+}!6G$ԛ &D>ގ)ϥ9d$I䫭=(_6R$I___mm>{*$C0Zb^uMyg5A0;f73%u-< @$!dھq)F!{TUTM" 334i$HU jHN4w_}M5Kʍ{)6DF 2C5GAaZ(!w#=ɿIBL@5 #{kYTީwN\]ry.ݝ}?~Y# ojhmݕOlQTʻ;[kM5Zb-+󆬴BEkbc.J"FM`&fH@ d 77n'''bٲe@@{{{{kGFfKjG!jR=FC9;;d"NkIENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph12.png000066400000000000000000001463551222557406400241770ustar00rootroot00000000000000PNG  IHDRzI}FbKGD pHYs  d_tIME +w$[ IDATxw|V9gVA@@ Ejl}E\]UWj먊ԭ m݊a$d={uyCƓmI<;r{ιh„ 3f(M0;PTNSE.r\""X1͛{NEQTUu=M Bnt5[y{r q@t߯߱_عE.r\w|]D0DXc9!@1^`fB vYW_w ' D0qJnbaݺu{wOh00" @E9'yQ_˨Wr+B^4MN뀴 N0Il1DS`*A8@>h7>hq - .K`@(/ASw#j@4 v+b@0\?^ؑYͮx оOC2 6D;\ + MTnA + c% pqӽ174 /B( ^ZDnpD)5Nݽa$L퀀`cF5UFu0"A S0GEA 644"1BX$`X,w}xK1 K`A$A 1`9 (p3 s2! ]L jNgNI36s$b# 9쐲"H"ƵK02 Q{l qiE}`JBХRVÄ%?"^#'|M%8k qX]-a*ċ2OoO @Iyh*>A\8x!N ;D,b;3NGq7MP 0tnp6o1q[/pnqX'N1GE#3&v wJ=xvC `pC%n1]Ny&9LKq^ oɀv]2m>4&θ\9*qeFSbV4A,p,p͜M0D  0sX "Ldc H B~ s" "XEK8vd(ep*Z)p±zWZ9rx?]=+w?o/z#FTʨjẃoق1f x.v9p@9qk[YGalր3UR# ! s#p] ιz [v[(;f*? gW_v&`Rf篾u/C 5JI{e'61Zo} 8猛0K97k#yiwk*:fB?0fnA <.y潚r'k97774[Mc.8ˌ# 3Nu`nîG)b쒱[ 8=LIힿ>iJQ ~Gū;e5k75{\t*S}gpѳQXn |n0u^_mqMT"R s낑qeƕ%5w?c}6)־\Wg_n/8m u BXC.EϾ)HY2*B-o[Յc c-<쳯Ow=cO<;Kk~{o?Օ>}ͻ  *u}q*[[Y :G_~wwy/MSͼs4ÏͿv,k~ܲyG>??ƌx֜T.-X[?BĔW,+MX//m6Q]NfwΙ! PFu+߬S5P/`Զ3u=ҫ;=.OyA힯 O1bD?P@lpMPvOhH] eݞ3F[8&96gg }7TC7g#ͫV5 ȸ 4W4{\NC*nP @0C`E@8n'45,@Ah@Z @( bqT8j8@7@2 D\U\<[qqP6  B#n튻.x<e=!r@,x$ ᐸ0pYo;Agv-G'pUD'\[Dp;xt=;Dಁl8@(N` o0qo/pQ5!l5H$HX@̼N9 L%b 0FXgƉ'OĜpFD) rWύM!s>t`ŽB5"<K a_\xsO儋 kdID4ģH< 9|G-9cC=>׷2pY셀F(/J73Ǭn*eÆ]D!/vR F;bunmNƙ[G䫌 3)וI vuz`ADZg'>9hT9ctjp>g}\nA= 'ecc#*;JTf%4OZWpsQTJ9/OSt%%w oJ](L0/ 8SñXjIwa5֊{S?=" b|pukoYYHT=┩h`ArNI0 >OK :pvC` B-p,2h&`A8\AJ<SH pGvA>L7(9bd328͂{ܐV! Gcg*rq\a^H/p BV<{%oq;<'w8@hZP N")Hnsڕ\ʎGzwe#QP5((h5 !E5.CZwkJ#.pKx~ph6=o[:!Pg\ˊ^/hY X!ȆSy AA>DL8 rg]8sۖQVow_iTĢL0BB0 9I 0A1yk޵h<6 Mw-Ϳu eD U%KuiS.>%"%"\W  y37BP?~S=`@3h`Cc3W:(3Ule>"H6-Ti7u~JsO:~r$PvkXS?zʹ-߸_a \# m"7BڰeNqE?!)(3 OX'N޲3Ǝ>6OaI{$a-U3O1t?0w)V?WXkN92-p)3*W@E߂sjO?Wę?\qV$)9-~0p ra JV`萊)}jklߏa/N鴉b$N?$%0Cd  (Plh $M!9@0!(Ab4R(pC0 >ēThoiśC`t x2 .v 4q3ڪquTtgܙ (w;@!As7xG< n#`Aw.e vA<=nݡHV]q[bVlP&q? %po;\N6#x{\9 >4c(qgG;B6 #  -02;e<@[8ch~EHd`׈&iS\sow;~O$SiEnAF~S"H@lYtؑC! b\c{(e{l<Լ_0ϻf ɒ͛nXWq.C[,O.@7>[ | 3z͕I_ٺ6\YzSҠ?-;wu=UVlKt=$2PvȜ`jMw>xٞ}Vmn0G_4ol*-_~S]}"T=vE w z}⦍t۶& HHpǶ:ùsm-{h4u* GD0 :}q @N9x?cw_ѧSc@i&ᄋzk2 W~<j[Fuu媵FbeE{4c$ ^z]>uv6O9zVRVZ؜ŒZD}֖3ݾcO͎a\V)aaF0$fQ V9,%\6h [B@8wy( qmg4J` pY6φpwϸ5ͽSmx<;npxixpw;(F!3Y(pچ;2N+4w}K耧^㮬x hoNA|^gIaMW] o;gǛ`?Sh„ ySS")"]S/|mY 4lɌF$KD!Y,nTʟ+8a҈{jm糶ly=t)JQU-`S((;t-QZgm;YS__4UWc8IU"D- k)E\=pǞ}C\:ow.Y!,T:h kjBS1(! "^HՄn(TH$9܏sJkE009]~7m}C=|s/|,,{DO+1F%0FXx%9Z}T)5%ڷg#WrXHRn TGd "i@o+Ji{j9gMyW_ggYG4^;p" Y8m,Dz %upEnJ'"/,B7$5L|8 1l*NX8V RWpq#pv)E'[qIb.x8#1nBOwGR< n0b[ IDAT͊K`H ܐY20EJ`G/`W\ea8S~xxZg8,t8x8 YZɂ@ƱX[Y8-I-[Y? $" 1,`")L{W@$AjMa0C\5w>a tB c1f%,r"ˆ L8Qs=C#1@2Id02Jv8o35c?٧ u[#O&.m{|caNN0yÍ3A* mIVQłl#d98nYvly1*VQ ̏`.L9A8Ճeqgҟ_X"\ؒ|ʵY^57dَd{;ɲ2N,[~j|ȇajsA8e>/K&%έ_|][1+?wؘ 8681Q@1a|-a)Ast >/ EAf4$v سQ`'0duygt X$zC]0hFB<gGwǍV2tĥ.xyx8qx90 m @:HDvK(@8b'<Nۦ-1q t5KDH15{Q&ptlXs[#0#Hdc@C\D"a89ȑ#_zX(:2uD,Ȑd,;[<$st7Ma$Ym^yȩbR-P yvX(W%#jf|dQ})ceo7Y/7ajB{( (0N;(*ح`PP5ȀR*H"OqBahBqhOu nE[e@R X$ T5a; D 2.Ec<nyn ^7DbcH=nj"C{1 "}Ng4P @ .CŜ6K FPXpc5E f3E9` 7k 38 :tciks3eMa Y坞2)(RG;Pk e{N.r\_sz7g&eΗIIOPLJuz4 ٲyˏNuuunٳZZZ8tYjvQ.r\".A0I֭;UY 01ƘyiTAE.r\$xBT]5\Zk @."E.r]:yqME.r\"{D#s ߚp<129&永DL:ϖp9z(jD+[;Z.5QR\"':m>d?s~7t)`0-G?;{ЦMvc#BiZ+6ۜOP͛7*=dPo9L>qcm֥ts6ImOl;ؼ-ͥYTLj/w*FM},mvƭ7OLci>Cg4hFpRe`r!^{]n3 ;0i\"j2=ܤɓ{κ5Z[r5M[b!$S=zt^^ xӟ>555i}ޯ/u q3C43 jd뮿qf/)-9se~_=C'83΢'Y 7rfR$SN;vlk.'Z3i?XT\ZDQx} ;1FYlY^^^ (/3f̑'xwm^M8qԱ6n޸kǮ9[Oȑ#JW^y/lّ۷@ X5p)sگ F83%T<_ՑPҾlGOW|NgϞ x玝@/O>4xˍI&qa&|I*:B ,\ǧoYf7eo/3Xn`H.r10PNc d#p(LZ,UU84k֬y'f̘sRB_qi1B0p 1s"@|F矽k8RNBĜ_DI,(,;,Yr 78ή!VvD JJy'1k%i} EB]vM7ܾo|s͵\qÇw9qEs. !/?Eo{@Z6BES:m"Xk>餓N>x:<>OZ ]._~W_uzSy@@ۭyNfM &YvYsfO>fI3O[w{?~`8 #3Bb itzS!@00c x3KFէي`6"e ^[IUN.r\#[h6o41$bL4o63ҥK[[ۚ3O~2s+V^} 7{]$tJ!{=c o9dF}cͬv]wugJ%R,|`5];3/ࢬb=j董͡{1h/2e)H,^+x`+>YA[l6['"[f̘+V,tyyҒO/\=ܿrJM~)٧[|EK-Y_eYZN=z~N`]U'x|z7>_%K?\q۲u˲eˬv'NQ-y衇Z~=|y]ZNZUYe3_|EUUWw?/b˦-i5]\\oϾi'L~3f,t];}&ӎ;fLqljiRT嚫ug| z_D$))*YŪ,‹z oܻk ,,.\zՏ뮽}toX#|>avy|'}\|A߾}o~℉z@b$("lڼy|W^yg9sƬbn;wW>w0#+V?vةSvwzN?tEQ&N8w;cĈeiz#}'@E_x>3zL>sP}nŧ+޷b 3˳B"xW|1VZRz)D"'bSF=j( n&(뚇:~OQj"m7~=. _̻Wx$ud"k6 0n593(x`t@wޱE5m48|[o5 r L4ekׯ=znʒGUS갡̲ev c̠FkpkpŋөtQ~Q2zgd޼yǏ?~ݛn_d[<뭷8n;PJAA07YTq+U  M<aD)圗0n菿ceeei)㧬XbL;afY—^}iر,e ;vl8ݹ}g:>uC*Rfv_y? k78ib+ +?_i;u/t|:ҒR@ $HX> .|haSSS߾}3g91Oq}u)O.r)כ 1ciCݖk6??L lnnħRT*`t{6LW C$xʩjd :iC"jj9犮L W+[v//θjU k7rә>m3JHZ2ÉaШF2C֎(9{%>as*QMZYQYQIſfQJ.gO>d~G w1i=&4*Unzۿ~5W˯ _Ud,qM gʀTO~WR^ӾB_H6b(헎QF5U+,?|.=a8-۷膮2UgNu*SN]Si-M95AD ñp: 믍'K]rW giPbd~tQQO>1z@qcǍ5榛oZtqҾ3NauCzޭZm~sѼΛ{dٿYMqI1p;+++w۽mS&8o短(YlǍ=t744Kթ^Pg?m L7QvݻwP0TqF)57;3p9O?^[Ï>3f́+W,(*Vn:㬬LD]PP\^^vAՃ ݠl74Lʆ 2t;p߿_f.~z /o-PoMYxѼ Xބ2J jSlPt9e?^جbEQ B|իmvȑ#`b.r\>~fEoҤIfSa% s e˜NEQ,..u !O_{^x!^?޽{+Uf_r%dRS!Cɴ Nқ @#,78I0 X>lj_տOq OƒPjVUVYdKk7/HD. R#ᱣ?fcG0 XdK>Nx5jMfZ1`^կdԈQx2KԿiIiyySN:mj73njU,Xpd{zӦM| "TW)SYQ;x<_տ|!p$9]Ί I:V*KV6m4  t8_AėX5"[g~nj>C qڝv< …s6jf@D0%_ՔS*+*q3n{.h@Q|yÏ>rHzP1F 1`>} <̢¢Ç<$//OI,NK7/9,mO n:AI+E})S=gx<%E%gqFYY0r_QB֯[yhUUɳNyL3gTRQW^~j=n$? 7q;KhsOSSF9u]w 'dBhnnoXgmjpK͖{[WW4{nNŞ2e7xK-AZ4u[w9yF@0B~B(~B^W_33aG{8Bp6f,Zn;v̟_ccY#K/_ IDAT~>6I$cƌsƘF;c |鯼֢pҌ z~;w8<<.fm۾lڪ~oZd:JQ~g9wQmN B/"cRlKW@DEi *BQ@:*M{Pz $RHDž;SSyĘ,3Ifl i¢lll-x8LrUcv._K1|Ȏ!ɋ`eYZj&M͛7q'H§9KĤ[OLnLq3g<Ǭ1U|ٲdHLveY)YB(1wӓjmhe{р2)?)főX'$-8:9dReLfWn9T"0(7șO2XCD[|D~TKԲMˮ]Z>Β4" +W?|exoWFSb+W%dҔ=kY5sbxަ.QB {= ˾̖ed2YN`K!?j#7oue,-iMˉ>fL;i5NgN\r1pG(Q3ن16޵MX F30MVrzB|ל+ XNpdTAcw" *TIUs D+WvAS:c I5I ,<:ᓇ+ݻwwYh8SV]v͓=k2.\PXC%4y׮UΤRvGP:pp/^XN:U0>Sez,^ܬQD1fUd>MU9eI̓#c5"8h@u';aNL5j6,;daCb8sNfۈdĨ/])K#kfpX|$))SN5̸ZnaMcX0,Y`D?10 ^r@Wu+e&GTS4`Lb n_ EZ$&1şٓu眞3I,#o8Ț[(Ur\p 'X}=[rBH|rjOyV1VB: !5^pj~ѵMr6>P* sSNmF>k֮IV-Cɬ(\§f6׭]h΢˖BMrpY#kuZYl6ni,Q< Ă\NÇnYHQR!l,S=l!XLf["^c%?3o/&1ŤL9R_W5]b;bJ*W-iEݕ3x)]M";)U5ҒZ_A_}ȨHww^{u%D5/^[YrQ!;|Ν;l 5ğH~ƾ}{lٲ +pe&]3f^$&/iy۶6^^V(_!dr,YltCf<\-N$J%'/Bk.nڲ)0(pSxؽkLfyȑ: C?zՆ N4)*2jEfMk_O>xa$ UUFQjv!DxDb%äw_wtg2-7ܿpҏy\c<~fNʝ>u5Ĕ&c`08:9~5p…b޺eܼ{q]TR 3Sj3 ?>g"ސM`iŦ# UH~q "kl&{%I_Nwڵ, 5YTTҸeSMǞ_z]+0Yfc*&"QZqysO˅kJ PodIQƢE {u!`3^roh4'ש]vvv^NpK >T^\ŝT`SА*ժ$=x`xE7F9Z{%˯Npqu/Q)h22bfstT433.L&Y1˒dY6MfYz(Fs.˲^m$)2&1gk&IQt}oq]rd2%ET,_!I'&qk~[ f3B}Oŋ*UjŃ yϕ+T_VZ5G:ujv11rĶҧOٳfqD~'ZIIW^-[ԷX\'کV^.^~!m%-Ԫ>7Ke5kj `ɒ1ǹ_\,fd6OQ Y+&iႅ<`^O  ' Tmz4PJ( ?AN=<:un&TB$ Az IH2䙳f 9`Uf^m]_Nh祥R{_BZ%D9@&OSz $nХDHt)cq蠡 s˖,sΤIV,Y4[7o6mVp'`ႅ˖.kа(+]42*ȡ#yFMڝݵkĥT&ۺmkŷ;lfYx ,ܺm٪|;7/Gkd͓𰐯7o1s΋ś $fU \1EFF:Y5:5&* MѲ"{ 4LN%Y'TI}qbdOC*ldF$$s><2Le~􉛛OQhyB]K&C5Zo&>,K5kԔ5r2v#{vu]̞3A.]qe˔y枽{F 9гkqusԱx~ȇxS5-絚E # KUTSŊOLr'O~h%Y.0޽S$^Xb-lJ˗T]d,Y4-ؓUKlzIygij?NWdtS~̣{^*j(fJ`Ih/hۥ)$i4ھ}jVz'Ч rwӾb[Ϫo0K$ٕZ-u0WZ[e7nzpt7 #`ˌ0qƣc[4oѵKџe6D-Wv!'gܵoY_bTjF5$4uTb޵k6mL6UF8KfFgWcPjpsҼyc=]vF|Ӽ<37U#c\E=u5!NRh[{[ 4&~pm@&[L9!snkckcgbgogcg)ёZ$I\d2\]]ͪ9I͚o!HSYHHàA.:Nr=!SÇ4h;lݾA֬*YoiӬ\B5&iK>},?Z5,5O&x37kM4bŐxLȩWhy%V CIƘmUCh|8*?UU N_H˿aa !M`6X ˖*Yd```֭g͚TxbFXl)\1 4[+8;;Ϙ5uB7' KQ1Z9NK{H}!rT- *O.I|{888osEM`6KC1w<ꕲ?ysm &b1iZehP͸4PVkeaăh/T[tƘGdDdXhSB8BB&If2s^\g&Mظin%xу{6UVv6vs"8Ϛ]gsGGE  1|s+@K"0🳧mH8;x4@w s. ٨^cNըBsqscq8cE<l+BxaQW" 5,",((H$ːʅ,,vBN*d61htqStt=gٺb0 {tN.NNN$iӆ|*l۶GgΞٴiS^=Ӝ#sY7nx횵Ǐ5kVMf#9'#z"_S$m4y80?Uʳ BzծSd6tM[[׮ *iWy2eV^ݴiݻwڵ+e OZ*BRYW6oz O>tW$cLXZ8TmU4Uvv@]=6=ъE &A_svbmvW`9o#ώ ƌ!CFZj,ͩ8LH4/f˖oXK..O<5`Pj𣗎Z:@`*SMjF-Y$$O4+V}}4Fd, ռ˥E*yxKO`>93apۧhQ.F#cg96l|\k1I:[vY#`*fnvwv$Ij9m(\0WxtdP\1hgk'*7DTB_uFl$7G7X:Pa]:^dЈy,˜@j7{L4VU^}n\*u'}~捍nׯߑGj呵k:98mvž|ß?EBQu߳_Մy'XOކ\e iOG/T-?cūՕy*iX,ܱXb.H.mq9࢜oK+՘&Mb Um*Ju {Oו3gk_ڴNV..gvބI,&qc/gIfm;pzq섳DZ,+`aC( |d,<ps$ܜ_C7oSYsȠ![wn=p耬mm[n]V;ݤ)jYSJ1FjVq=˖-{U+cԭs_JՔ*QW^;v8z+>q_ɲZ4xQM*Eb~^wf͚su:GV5v|$/fg$LF(z7F]k ~ N3?}lKЈPjT($A"F4V!U#\"[{ۘGG6Z;g18bRL&2k$8*UzRE-ݸ֯yN kذaƍ y;v쎝;$&M2/8GE(z7=}ܨ3t@̚ '̲ٳgP0~n ;dn*($?Rz' [[[Nci,['G{{{&1EA3n *Vd4h|R@Fv)UUp/lx3g>t;ҙ`g$9HI,_4,u@@iY@WR8TqV$k:,֬^ꢪ8O6Zxs7&?Ac5xޒZMk٦eFuqFZQ͚;d498wmNNN W`NVQ'jvrr㏢Tt:ggN]:ֲO#\{WdI2E 2,:6`&R {{Ϛ$yySjTh4GGG,yqpIֶ$Ir-$2蠳 ɲΆI͉1pE88%%q;-,6̒=I:i6o:LOox}#psutժW[zhsqqФY-Z{}{, * gr~>Ad}3%vc>I׭r((]d-ޓ&|ƌmmim*~allmBh_OHmwB#Rd)jL2;7Ξ'" k6PE׏=j7XڴIS/O-$5Q^u778ꋑQf3Tł*U>29WU5:/d'Y5z}Յ "H: `H⻆% Bpdylstz#a 9!vxBь36acGz)\xHLz{,,(~f"sHβ̿-F3ĩh[urrrJz>VLbvv3˔iA+D>x_ɜŸS#%;Œ ּy-[:,Hvר8qteJ=VFRjJU*}gZi߽8yBMj魛)yO-QjhѢ&h/z~=pش)þ z%.%Z$I#IzFfLl4$ {_ǧGUն֪U+m'S1>YS9UVm,G7ɾ?XQL !QRoe-`*YPt_ׅG&n(4,g-e<GӒZ"? <ރ{f9<,=֗.ygϒM:˗$>Z <2:2-[e}B$x?LX=:6Z@f'gH;{T/;ڧsPoǏ9r[U@ cK#$ Sy߾}͛7BWqEzʕS*\Q"a9oɲ%덚o$x%6*6Es~[Me3h6&+pwQ+"V sY*\ꅋ6kzʥ:seJe/  q8\(\iu[6ޤOئ]x>n PTE+k&Fd쮋1OMQ{9Kclz UeuS2"˲,ˍ5B^UUupp-Kœ~5~itDsUU- .f8cx,|iFV3Re?𕲲cOCj [o$.!?믿^" oI)/]> "i4L  IDAT Y5kf %lA~}mc_/Uc]v) .:uuֲW%fnBFNBbV5{J" )~R3@`5ibL3tZ]xq4qR, # !3.^xuc.T~%&=x ,"LBϘ>#ٕgP1F{Gԃo¥ iV$&ݻ?䣖GbR$DӲך-!!!: $GXGY&000w%{Aw0@X^v $@Nd7 L׮t: cs8 ҅s޶M[֡TRd5jl5߰AKd8EwRw "$&i4'!O"##SRgg)iӑA*ѣc?H@ܹsF ʓAa{tWU:fni],dR3ԝ Ȥj2xjjG // H@I Lc6ϡlƜ9WI wn |JN_I 4I 6CA$AAAAOA ŵkT~{SUT WWH Kc izAIAiT9AA>4}c T)p=f3( " |.%T߾MYEA'[L=AauOA  Z'cp;;٩S޻gGNAOX2  H-l'jCr(VL}+'j܁ \a:48fm AڵMWW]C AOXxpp+Wb /ݻk0fL߻wԱܩ=<|1qbS{jj6kǍܵk6mƹ-[ڵ=4 M>xiL V~Df*VA x9K$nw?}pۻT>GO-ZxܸQkqrtOkh4t( r';wPH+#FZ 89]v$fo X ԭ[QJq㺀VQR Bܹ֬8|8] M%KN?7WǏcѢ@w,X6v,q: H cB uGG.]zB[ףG|w xx$\:8JA$u>Ω:pО=+JvvQM6h3*AVΝ0ӥWڴbut|dI]7#8A$л7@ӯ^^^=Sb{Oƨ8AOs{oeKFFb֬YkN5kзoM%_WćR ϘL]rn<{-(Z(U >B'hAOg ; zzv\}, y5i݋v2kP ȷ8;c //F>W/v>3hPXyx]TA 0bDfoοCCٲY\AOs^J۷Gt4NʗL;w/;A Kd1/v헸_0_' T&i׮7n~Ν 4j <AO,Q8#DGcf>!;j;tިQڵ$A|IES|/Сcprl'"5x"5U˥Kpt3wFƍxԝ hQ֗ǂZ!frLO |dROB"d. .RRA_pt+T/^ۻ/PƣGk_zr/;) t r2ك (޼~NddZݱ*ʕ|AA ֽ..PU*A ѣU}{`2QEٳ(% 'ҠGlR8 tt4lFG>Np0C߾&O' 4Z&|UÆ ~fQ'J1 >}sS9[7ܼiq\rś7eL&_ݿӧ.^t'țq 0hѢ%_7߄3vJ@DCk𹆪Bs4]ڍq1P0o9Sjnn>UԨalܸCC~=L4'Rc kUV3 &MpL{`'{^PRʥJU,sn2ŅFd~ BBI'J?>ԭzx_˕{v90|}qn4㏵޴7Ic|Fu H<~ ݾ}ۄ1cpI͙3'G㏯Bm}T5z] [^޽e ""YwקH߀ @m7L$D2, ӝR ǎiӭ>Yݽ:tp̳~=巚fͰjUO'Or%VB HDܿӻatX108kOûtЂvAPVDddM`- J֬I CyƍشС@6mׁY/bEھ~H$?'O0g>u[H__޽;Y( hOn̘;}ݶ ޞ,SLɓǧ:; DEbE?Zkִ+Y&Qf <??ݛٛ;uj TV"yK_ѭ_ /`z8ʏ{xx&6uܵG޿=%kƷE eF Hi<&agErh.׻tyî\Aa_ܽ{/ ܿ2D$P{~8hB8zʕ_B&Oƴi6<0XRkѻLʪJ Av.́|{wLvyn7~4yK4Z*5|}ؘJA[#gΠI D \G\}}{{Kn}rƍ=_2ΡC^?]VD6 '8#F^?˗#/ъL4IQbϞUA|}}Īj(PuC$K (E)_r <=Q&?L68P;ۣHO.]A,QmP%W1&˲VUr $ > Oc6>|66L\A8>b7b.f /]ʖS 11h`oePc@˷mۦ&6[eFp;F9ʌ1!k4yYa4{wE ٿ}^Ȏi4c#O޽..x#KW~j=~A(ӦM۷o\pcFN:>KFv5\MM ۻC 4JWQ#\FO \QŨ?   $888q7###!H೟؈ЫWLQQ111Y֭a6[o5 {罁N 4j|a %H9H~g1Cգ{~~ y^"k_!CHP\o[/n[^hǏS@g%Oĉur7igbӧ'cֽ;~3g1nDvY򧟢R(*A>)]kִ,R7/Ԭi1K͙֨3Vj]zm:ڷo"'QD-AZp:@eʄկK̖DPPn4WU=YMH )0:MVk֋'% HsEuٲUٔC`" )2K P ӽ֜?\.'ֹkfM6΢Ӿ Ojjٛy֛{ժ۶"_9 O9B;o Ȯб# yA}4}ÇܹOtu:ԫٹܰa7ƣG(^! zˣkW=KA$/9/}OǎOVkgf^l/ڿ-P9ǂ{I4ko߾#vܷvΝ rMׯspȑF,\ر6 'ۧL+9%ڴ(ysqzt̞1q>Xbj| F?.\bһwo̝hѢEy᫴ڜxKX [MZ ,5x8l۔ݻ%z1 Uj<8wol@*VoGr KoE\O !Cf{nM HӦbE:%KN5k1St3pv@~xqaV8JƗ_?M_jyy*VSA: w5 |5XӅ Qqذ߯޿֭[ؗXFP|Fw9dgЏY:o$^WByن sbE >inz=Ú5'~ٯho_\sKFh˗۲˗aŊ/D2;u֭I/ݨћṖMԪE>QP9rqqO-[<%ƍ+E.֝=;Z57QdcƠR^w⣏r~=G};`įmm.6k6{Tf IDAT3+P|9;wp4}73O !I׀@gÇǺvz"U|Lh(>ER9:>p !C(doz+0ݽFYO?*TivXjg9jppȹV5lYn2i|}[ z'$eTjQG!9F#$$¿wwܵo&MsN.e_ AOu֟9Qh2F}l%Q׹[a09ƲeQ(ɮ>}8bwif;mhn6 }\Mw ϷWVu~9v_oĨj/ŊrfaPs:Flش^Fu?~c|]ߏl&~C  66nW_aY:{JoTJVv |>KrsNm(Gm*W?XmċN2;o_n=&"HEHߣL/{ ܽ~^*Orم ŀ%K~駟oߞM2plj6*9_??lۖލ]}ж-e/V0/T؈c8u*&OS׾'B7Ɯ9x$ 9Gtq|sGŲe~:M~fӦ QT r…(S7L <qX+SOޚ@UUŖ-!w"X:z3G߾pqɡם:nݪEDm"[_ZK=}\Id77DEdz&N˗cƌA8|Dr$&`$:ݻfqTzoMeN2M6(ԩ lΡf͜xWh(˹խkqkl0||z^E)ܦ =rn''̚Q^٣Ga.)acW`.2ڷ ~#?x~/ ݻw,Ҩ3g<<uܿƍs!Æ3לl ti&~ʝ'O_o߾}Ŋ3x` !2n!4C;Z %' Bs` 3U0._dkwY۴iZܸ۷zbc7n`+TF'9kyXN~N9:Ρ(3yqG߿V/%v!0F)WϨD<ֿ;RbYz< S>Vj4W s LޣlAN}pD<~kר''W/9{&>}fMGJU -a1cp<6Tr7߬xـ[oQaǎmA+˲.^D2)x3//\шWӼ\bClVQ>(^ۯ H୊1.+ ?<#t_~޷^x݋֭svŦM>8q͚d]؁k0aB=c 02R1eA/93v$;)X nóVp޷l݊vr3#U1|yUlxd#b9ԱcSٓ6\;{E6r5{$$DHMD)TQҋTPCIQSIvuw?.1*.G.w{73`"* RSatr7tBUTT`N#MAEWK**.^䊊d117O]P;Ay9®]VKXT^'Jn>uwOOG s^i YY`eހtNZP ន'kCӐ9`߾{#G$T!-'LN,ZՌ9{\]rkjj - 4zŋ/O{aZSsÆy3dd0#Gʇ S9t 3?g! Mڼy<@[55uy06|Ak˖5q@&97ٳ)f~D&&]1cѣprg:a! ϵ`AAV8UW{$%!/3>jZ"jn.88~ ofo >lǣw DqpN a̘MB`5&5IZlС2yn xW4 G|sbdp eIyz׮@7%Y][= <6lpÿ;,ׯ;w}ޜ9Jprr2eJeVss8qh4 Bja]vQYYSf^.s-oj, ,T.AFy{| Fc}ɰ}H-**b -fܹBy^,Y}Ny` K_Տ7up̹"_ ,ŋaF|}e0ҥ #-YpÏ>`xݷs8ѴmL >f>p32(Gha!l7'FF&g7_SE̙}ִ~VUnA׮{'Lʎxy}񦚡fd<;7 88֭FJw^$&3::_XZгܺ5t;WxJE'$:vTl"i43*/~mڀT v&ssKaG4pot 0uH4rǎ02g y'fdd|_%2Y٪UK.]Z]][ظkB >dg( (nd2((0:tŋ]V._>% >z Q\Ńt6m5;"ߜh1JKv\/ mðs,?Ā55СMRNhqСnZ03krg0!lWw78}8֭4^@ vմf12KQ.ogZ9/?nBa ݾ}$ {ݑ111 ,[ٷ/9*> ;:V:cFao>np{Aӑ%p(C{x0Éb֭%psp$#ׂ M7rf&PRƂR X9cpi_`o.\\OYX,E!/?t+ѣxPsnbHldd\Db*Dij+9>dg {]7p~vmM?iyӱ\,9qppmg, r98:6d> g;**^'-=)׏ `k 1Gbo^VA s 25 Mnxf1Z- Cj+j4|9$$`@HqPU]t $w1F~wk^cwD0[U]EMɰ q9aG?jj^yj05=ޣ(ˇ ]8c9J9-GG'Y- 5\ZFk;wk߾iЇz=ڟ Cu,r ͎tv矿Al9Apo# L0u٩4*c Gzl0ػ!d88yMx T4+ |}sho= ={&A~п!ƍW^qؿL32 !BaGˀJGPV!!xyS?: 0#}? "vl{Fk_h5qT/;uvuu\v g0#CӲ%ܺj~ڵjMOW^^n@ߤI~BC}⮽W~Աcg=ڏmtmɿ?j5yf"8Xڶ-0Ow<?uZZ:\_B޼)QoiZeV4 ֮OۛK $Μ S~7o'XB3g /o}FLN`ZggHH;.t3yz1zbCt/}̜?}S;%KXm /o#07 mDLaff5˗hdGUWnz9:GG aIn19KU/S?ѽ1}x~;yfA*=!6SG.ѣ۴r9$'Å ۷;w%ʾ]b9С>0 c"L |xzoߺxv 豕 l Lf]^29f="XxG.]#07nn^#FO`aý{!={>&pbeϞpH۳Bd4̙ #07;Ƿaǎ}4j|qWxɊ 8p>6{=d{c!GaoM&LstHJ3d/XL2H oܡP%rn`8ra>֭3Dl $ ׮5:u>>XB6bص fVŋF^܌|9䚝pR̻qCFyzpY4;;(,|2!-xdpxcmv=s!)S`:P(p'#v];4k@_6n.IU֬>"<2\={i3ؼy!EÇog~zt;!2}vv-[6T@V!BD @;Z?*j޽anܹ+ƘI! 镵k'5`9P##X\]g/]Z2cWO!!}ӵ+kC{Ň_P >")8:I!0#||ǥ1cBCiqc vq>fBE0# o3y7ٯl#k4{[x[@t]4F<^]z>}HBv6Z`j G[[EK!tV]71)S0P9 IDATBa^4z! !BYB5i>ē7`G! I4MWTVTUWp2,*$F<xBxܾ}?(ƛ4h; l#=\Bt#P6H??5Onz#I۶Сk۶m\!!!pzՂGN*8QJRT=)A61#BM>kX PE$0 ò,Ap3&]K!P@0 tQ~Ur tFi4|l!ҫֆqeY$H$յAK!#+**Baרe^WM^e^2_} A뺯)*..?E 4M[XX$ W-A r,2 qtzVs, 5[c ੫ AAחrb,˲,-$I?G8NPܿϏ,T&99_7c,Q{$$ RSS꧚$ɜܜǏxXZZmN݊iiibNT8)+y,GWt;][Mtoڜ#|n#,6D嵫( D"atki4y]]tki7< gRm߂n$Ij?ե+vw$)Rb_,NX\ZNӔ޿VbV+I"Ko AIشi'FZM TP;;[[ی; 8{rr_2dHR[S[[SkamA>rՌTVV.^Xw0o`@^a F)+-U~?o:d7bVVV\\СCڪ*+++iAEd^neUU7 am,^2^I,]"tСcǾ|=<<ƍk#A$%&ݸuO>EsI}LMjogߣGXdf]|ݻc)))7oyyΜ+/+E,>PTP oAƞ-+-svu֭Iaa#(O/ϲwfegu²zݺupHAv6O8qFjRロy9FDEEy{ykA˝>{noEellq…ښZ\q)'Wi~ddY߳gFEF<:%%b8**䉓 Fuut0 y62*wnէ׫n Ip Hcc$Tղꂪ"^ɉ=㛕/oݺ% B>EQEx<@i}?77wú J/ Di-ǣ($I|m}|>M_HԾiZv/ YU}*OޡhGu_jwީV_2um۶ݿ?-۴iIA<>OWT] !I277wͺ55*ʢ-%Ih>@AyO h@tOJJڻk/biuY$骪]WWIFEͫwx+~XFEQ$ S?7t?H2&7.((Hh0OtG!K|}}HY,L4 n|ϛ[li1cR[++UTTf3i4t~~j?TTT*eb84$׽8qB#(K/{ܵF&2pj'ms$&p [|Ybc 2eY >ͷssH}W>ݼaH&_$0 lɒ%4M߹}gNN۵sW/!ccX p\]eƓr 2""&::zW,[.ewu'8)WɓR6pqK3˟9t, lm:2EJ53k7m0P$;flt+X)9;:^z3?yc1,fذaR?۷_RR5vssmٴ~}+s!!!TQ%2>!>s_~~w%Q#G{ 8Éxeӏwnߩ?{>/[Eo>Cqw9M6sͽmujǧ?^%b鲥gNQ2'TlڰK_/)Ҩ5Qݢb:N1lĖ-[oݺcIixxx.n݌/lr+閥F} :d„ -[\prVJLLU1x%%|gC[E>{mۋ||}Ι1zDJbJ1|D>uyp~LL?/;9{%؞=G1i$77Z@gff+nݺ>tqcW'ɓ&;عcjo߾ޞ'Nx@TTO8a]u͚9Kb"[V\%WSRƍaӆoܸrჇ1Ǭ߸,-+-##FEDmݺ… bH!ÆKf‡i?{71Æ ;w쬞PmSNuqvĺ;T.]< xi-&&FK峩I0NͿl^-JKnھc{a/w/ooPp;Vnݮ]h"5>pbbbp?o< Gh*5)܅s~aYqiS.NaI ˜=߯o?OOe˖ 0 80~~~J 8vM/gާX`Yj*#3c8aJ֭]ܯ~; I*iӦu 8k,Rtrۺyݻ#""}]X|ZyU+}=2LMs;hĠc1ǖL(2,é98SU4~aPUkVݾ}VVH)g_jjj~V[[;id?|Ǐw%{wwl/*)RMfg{ EQN1c{g_`fEw3eY{E~~~֬xw|Qǂ+ ɴ):v8{l}M/],,,,-]BfS Ә1_|oY0gM[su[sr[zέ;+*gOUڸq}"TJFt钷Xnu$e2Gǹ >t8/'oϞ=$MаvlQRRViy`E7W^3>Q]Yjͪnݮ"߸i g=.-)U?1jկ/71/nnG]qˍ.^Zr5O=w=.q_4yRUUUEUŤ' (4hb#c'oܼq 6=|ϛ'gڥk~fcB6)S;z,,,LŨb~ajv{qǹl\)(3>މ&&Isnw7oNMM]bUD׈#1GehgddBZ"?sĞ={>I726zr8kP$L>@U!PUt_~>>bXlhe|}g͚4zh[+ۺ#5ITTUw((*,Ҿ)n޺l}*ֶ^TOi4MMurtrqvQ(vιs-,H|;'%'XYZM"eY###e4aG$AnmǶ-U̬;hTTl߶Xl+t]굫 YrRrYiّCG4I5DUU/FS^^sN//fgg3oM<E~?aڝ;>h۪SRSSǎkbj999l8pߞ"9Н-RwɷK|}j|ӇbaO?mif0 'IޝH^̣@V989L<)1)qKoݹx{v]Gg^}4Ik6y a#GT*>˲4Eו֥BPk{S":}hY3g+yQ'#8 'J2%XR(Jtڟ=){P(F?&i"D"M%e% a"§po|{֭nFQebl?iɥ ŲZ166@[J9P@L hmR/;GvΰX1ggѣFx<GaoG&\O H*;7.19Q{UXUVֿA(55,˚Z Ăj8JzrX` oP  KWYqƹs6YEKǏocos'909RrIL%{BЗ՞7) Rɲl/k*l/EoGݮ];eBc ymMZ֞jP@=xx{۶nspwvr5 èj@PTT~V[S;*eՕ'OFtw333mᩮfYd:8:^Q{wTrՀ=zcǎӧOs,T tEI{ﵰ051516 ўP)\9SVR&;vXw+.(4̄eY;uf Xظ2A&Nh&17gއ? :ioզFACP_; ˲ 0q2..{ve/ݺwcY900PP(p)>>> 0,ȯdI{;={;rGH ?qāJkS2*Օ /~xLJ n'Wȯ\")enin$6߀PT/].++iߪ}anѣGEF۷o li%~5~52d="ྵfvݵ VpLx{[q׽ `Y\p}|} {{=z^ܥsD爋W.߻hUֶnz Xc9VZZ<4!ȡ#\-JFwquupL{;&84xw+=\xxK0> 2IDATW\ajjz/Pݻw߼yBm۶ ˨Y5R WHGB:@e=<[.7o --[n/|uO=z쨝]dȞ{nܰuo]Mtع{Jfaeoۇr劆Ӽ;t;@p?oАf?[]Ǐv؉M|'~2yyx>>;vﰱ4\N/JC yZkuwFv(x׮^;uO==KHL%!!!խ[=F7z붭EN5rs'IL$&O0t5fݺu[n>H}2MjJjx|hDSO?y|Y;vH/@'W84Qmv٨(\^YUYQZ6j(7W7"=<<|d6$\O1bH("iN,x...YEŦSWi/I[V*yB00(Ғ &) BCB>ES;V'WiJˬR4zjk;;wGk.1wqu115y𡃽àll$T @ I޾nn B;;ʪJT*J$fsc,4:M|Ry.,4ݢE S>cciͧVZD"o_o3s3ooo3{UUTyx4- M^gg炂$KDڲUV^^nnnZ/O/cАВ{tl߱CF$MkVqu9rLjfbv=;{A[KR$MIwp'B(J,$wS ]\Hh$2rvu.-ȃͼLLM rsr|69&F&YAzydgg+!C, 3{x޻OV!  (-)-.-vqvqqqqsu+*,rwsH"qNNL&;nlB0 ;+٭e!-Bg>.,*453uqq EB[Eb## ] *,.! ?44H"?ܬR* z722=|tttNN\(4BFєT* zRr5+;<薡-"1ʐ@$k++ͼ=jkm/S]оFiRF͈"R^!055νte&VMLL*e!!>>>UWW:|sbX.pW^Vxz{(#F:99999=J mڭ[7+s+g',{[yBnggc7d'<;[;_o_rrr:wԩsVf񠁃LLMBrUUaaa6vv>pqqӧOyyF;BwHT6tc'}2[N~8{-Cߠ5HEAiR'M6dH$zj_?glP)CR/Gd(LMMO>oY/"[IAeUY겳1sFR6~C-[V\TӪ"VڠS,Bիr-Ck]]y՟UH~Fo,*648t5oh=z4~FQoVjAѽGE/"Iо>IhӫO*X_R$I2m^T($ILz"8ccbϜ5:y Ap+\%ܬ/wQewVT>fYVDU:ۑ]k,9XWV$d(pbԬh}v74$YVT_xZ* w](sRnۦUID&+sw'ZPT,c$4%Ջx4GCBoqIk UF]ō3?Ly[[(ΤXdʲt:( !п`YuEM'B#Rksri__o3eœaAE.^&I!rBi.x$씕e{[޽?f씗&@!k+#V|r v Ks˾(fa,IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph13.png000066400000000000000000002117761222557406400242000ustar00rootroot00000000000000PNG  IHDRzxbKGD pHYs  #utIME (!>S IDATxwU?9gmsM!WZHT# PDiه444R'&*t:C(Adh{è~Hm Ž QkbKL{bJ !*.8GC"k- cP(m(AنQØg `~r^o}@q`;0uPZ5}: P}1+A6J(J{o*A4th "Wz_sPX܇@>`HOH$R"sslGG'(%T':aJ) 0|.Oioo/1FFkU0#F(41r9{STiTjL5PyK ,7\]23:!Q(QD*I'D{׀xQ҅tbb-{ ?RJ +J*1Dن~c#6!.Q< U lnCF6Q:V3ʛ)nC$ [*Bpxs'ׇmV3M![~'d:@in]8%6cK]E No9!!Rh͌،D@ eƫfkƚYkSs~M7lWglo z?oѐuͭJqBxKrjZ}pxX~>ÍlT͊R`h4㖭S(:~!As>SL!3"v>S)Q!Rvg&x A d7/K [gL' 4kKꕳuxKIna*nn7%@9V]}XpH~?)ͭ4o[}i[˽93  5FtB!^5LjD#|i~=|i>571@Nt3M4 ]eLk&8׎9]v1fЌ)MR|yS} :QBȊeFBxJY]cDP\Rm=KtRLgMWO͛`J) C+dAVsZO9q]xM3̽.)gϘɔVk'V1r U  ii}|hMfC Ү"mRphwQsg_ގD*K+ZPB,r8>C:N1 ĭJ(xct"Q<3IU "ØrGT&-aUXry+JCtf}$5rEDê\A$YϤ(S̎C*UP, +P3}Ch6QғU+aɣ\KU*{ߧ(E"M ]LҝR &))g&qEl(SJS:EO >ˣTK6%̬g t~ҝR"3; 7IGRI"b)AHBAi)]'=i I@!F:J gP* kٓ&~ VM>67IwRq$SgK4IO,?M>3>QK=3f~fO=͔|ߜ?P0!8c5\SqU|sLNK2N;]Xj?3ji<3ݠ )B\8\\p!+)%sO!.)P..TBJ!ʫ.OO"7zAc{rn[G65wn}{|KdI?1c'{ĸm=^(+Å˽ő-E-ZP?yveۻJr?.^wW2\.XW...e,nn;; _n].;j~oUI"MCݙ"&[p>w׵;>Jd̲w' iSknK?h +߼(T0#'C>inW i2w'T4'ZnwJqa˲ŋe/!>݄af*j 0%D-p 4 +IL]vG4ٻ a*6tZSL3I ]zZM@UrRJ1tYKMsS4eoCVtww dV."ȗDhWOjz pnKT]]-̜2C!&3Ϭ(E5%<_B䃤`sPˡ'}>yOs]W_*+iRF1ij1d}]=$K?˅m;~^y'?1y5_ymёHga_vy?}L(BjşY^,W6m[7>1ݰqKUPܖ\r_h}+Klo4ao}3'N>4~=W=?qS?ycG5tCo>y~1@BzWLWH RJcWq);{ivR`040NksKأpZ aq4ccr3MÈZi\JYXj4ܱ+ƚN]G/L[ %D5}]? ^}cC$8tTDr))3&4w>iۮܚuBjjJ*@05Z>;U9nݻ=we>yCj*S+MT=zl] HW1/>sZb7tv'Q+|'kDvW);"踶 " p @W~ L@gNȇd D:?2YpWEQȣ\A]2 %"pm2YE0G d &Cw_3>jf6 n˺5aᙑ`=OCW0]3zL cEʨ.#_B<,x I"X3>'`+ShDhkf4,LVP02SsB&Ш#P޷}f74! EDBUS#H$;fX>t%e,\vEP*XF`7Os l_0iN;I} 1LLF7 PDQP) !JhLS PPIJ>1oԲ7ZƘTG~McHhJE-^a[XZ^{;!l˶"JURB)JZZFE)ik˺s@֮oom =1w'M|Kx4Oۓh>x'6=xd7w;sib7/ʧ>owsZ|.O;WvȄ#A5J γi<|\_}{Ьxҷ.8uZ| 7u3NԬ?/y6)Xvu]qo֞y-ucEgY'->hVO<عɮ\Idnd Pj 6 #V)vECQT^T5)@SN݀2o6-_f2;ciǮʑ ܩ=?1crlqbS'uB~ V=Ň^o6[3ouϝrӗ|39moR`sJ'_ZaJpv EY)R)L R(RP u1$pJhjB: <*6b18KXB:`:C*10l@: "ʕ>3l(3$=D*3Ek5͚ HL!03YMApD"E !i P3#AÛuu(Q -oofKzz1(QgZ!Pt~LTjFCHZѓ,TF4 W#5SG* CGЇt Ѫ܌^rt+ >v2iVM]GЏt FJ\ϬG.xv2"53HSjflٛ>}f >jJH5%=S5b1lZ4?rڡ 4$PB .zi`I(( iJ`J/ gP f&*%R фG={Ԯ]V=ܫ,3+F4B)oLw}¯gۮ.18w^ ,AU_>Iϟ˕4P ŋ˾pyg)l>[m7>8RfDc+FHg]((V BI.Ugظv˟{\'wB1ΦmcG(BDPG'(fPj||r@!ޑCu(6MtG=.F^}OchPU@IQv=EoEĢ9;vGc.͡Ί~{p\T)DE_]xnھ3}(_tw4sַ~w758vv#&LsYҕmݹ+]G:'GBʕH 1tatDvv4D.PF*b"ATM?L~^.!Ṭl#<~h53:&/7Dt%Ϭ WB8`j6=:όZ(ULTMfFkf^4\LebC׫f<]m}aKW Ք&Af;:.({ D?B|  iN):{<*}is4-I}\ЩITՓ25SCWDIH(ƘF5!A :nT)bJҙA\Y)hF c(5֩ƈFuQTHiE7~A՟~H"5 J!e6?G̈́@7`tteut6 8p)67˞ p$ "D ((0JLFA_5&?X,>|DudfjpRD)E2q(v$! ƘFCyH"uRW9go鯋d옦&5kouJ@% \[J55r֧gm~o'zko׆m]?BpfXf B"ت>> k4 RJ] 'PeRʶFBV0F@WDJN;0n%xjV N TU;3.()sR.֨ BA =Am]0 LwC': ER( )@*`:Awb0` ifL^A" lLm0fO #ZWGL;~U es5(f~ٕߏ@?vZm4Rmil&!X͌Dm @z<~?vwg"4t6S5Y?fg&3.dP(!t- Ӄ@fm5 R1o\5 oWN gSVCavC'=Y2ED,TS2f%%= 2)!\ kH:\yG;B֝M^|mB.4>p2h%4ID%! Љҡ)Fzo([ںGBc쫄^yfB':!D]JNدN@M?FH1M#aPPt%s=aD@ؾ#)$h;2?s,j^~[}AΨ๧/<1ˉd.>}ap.~ ~(HJIfϞOz{{k>3:ҩ|&[:Y'vVf0.UQvy3׬'c?-ݝiVBSM*pp!>Њ?֦+ Tf!đR(ӹ8x]GDO;Z8ii-UooD(% `ܸf$fweŸnGN9MUl{$N,k.! DDC. 4cdjL}40@"~f ӕ YLh20J̌GQXBI^s<|CǾyɭåGg@L$p׻ ]^^g7Tޫ;Vs4HHPBtS ƼjQSݫU'|P*B>}£tŷ~I ydʯ]vv?J)U{CA(!N0_}`z8 0ʼӔTRR½3ttoeYYFHSf]sL?| n:xf3|vqj 1zQj~wX6 Ls>3]RY~CSO9_??])I>qQ]R܌2Eյ_?+ Y~ Kg6( vz=Tg:)^-w{sTb% ZM\v7dʤY-tv'/^p7QbmgtÂP2唓Jw݂2iFI;N&-m;O!`J*ץO5#h0QT*%O45,کKxN?{uͳ Nܩ ?nWJ9]*&@)[)څ)eVUQ*vSy\$6 9^J'j|*5{0Vx\廤g?d5z@Imx*4C`S&1#lN)~3O:ʮcYMM=R=(BA3Z K"if+z/h4Me~?Ik Ni>HD:GdD\Dòl\1KBK4T2gnjѰH(eD²\1KR4L~߄">3JHXq4DZxW0F6+JUS,"g!?̏`4> 2-ޕL ѰHfBXXvH,*\4R\\Efy2L<ƴDH 1K+L\EHgY_ms!ޝ KU3[3m6TEbBJBf?cX"W%K50dHLkZ2W"fŦr1taYQh*LY~> {3J^å$OMs`i 4ov'N?T6CuD EA #~}u;pbh0tFb0 gT *uM_CjPC壦T'$>I D 40;2Z{(W.!ZibPҊ ]gMm=i j0 *w5޿mJ.*n Fo6WjxT$8DEGO|g0%53([~+] G{E:_RǒZMo>@u-2\ ȸ®Ͻ/MS%P%[Z• J"H|?+:gk_^4jj8(M$#FתjTD,ɣ㮇yw?uR]MCg:S5}@BZ$󰹬 [DF]2 ¢"[B\"G( CW L42Ha.ϬPhlokЕ<*!WDF/_"(AB:ff8kam6Ő*쓙/"P3ufB0E5#(VPh\ lˏt n!h#޴Q ȗ: V<#V@10wI;WB@a"WfA}E A5½f0fluaP[7JD&CX3`V<7BCSGDF !#HT4t= b!RkAgPJz澧yoJ1h#OKXn/-ˊ)jO jH&F!kfse4U}45_ghě<2w\˴  &D Z_B@)=f&ݣ$RWU}_u*͵/oQţRJڳq6Vmnĵ))wR3<۶3 cwݕ_b]d2A9 f>)RB>途RJ9k:^ڀRB&kw}{wqg>tAAA }5.!u/>316RHH {)^Sy/]J*OYvaxp `@*zCPGb$Fb$Fb$W)+7Rb]b^s9w>t+SM+x7};U!WPMsd%QK޷60TPC` ;{ }gɼC}{,Z>ڇn-}`2BܾCm B x&:#1#axF/o]-!Đ-oBH:^x?.cB7|UWYfwK.d'c[omnjJK5-ɤwURM29ͅ#^~S}j/u|Ji[[[gG'H ӦMwPr˭t%LSSNr~2:xi !T*ٓ2e׿n{{{.cǎYfy>5kok~BcF1L564Zտ<7n9sB ޮ:CR.H]EcڀAh\ҙ]A`Ʈ]>}CG9-C[[!I&( JѣG|W}:CoJh2cǎlƍ h$ lxsZڏGb$Fb$>thÆ sٶmېu++JL.swzeU2<~8~Ծg}sy^L2sWA073hllTϱzN:o'y0>577/ZoJozyQ޻C.>Ut_lxgm 7zX<'F>GVNoGiL@jkfz-JcK[~zS(ҩ~Wy=S" H"HH/׾}lҤIRJJ=嵹:;;zN8a„ ^|իW_ve԰װc]pRHTRYrV+oJig[t6}ǜs9 yঔp }:!|?/oڸ铟+|!lͷҗ4w-͏#˖-;'BVjƴ LFӴT}ukLr{=Yf}-㏻;_piS,'cηST6nx7j.KRH)˟~t&Tt=۷wt"1q6nxÏoPJ)]wޕL%Z֤=ܦƦUm[m\. !+Vx+yg[~yK$9|>ŗ(K!n3OΙ=璋.I{lߒMgO>c9T_җa„#8׿\p> ?翄Ƙ4J71iZTZ%/Rc]g?YJ)(VZǟHdwy;v, !;e˖ y2 c??iӦ/xRpCqu';wܹswr˾pï5>믽>*5{Ewo߽sJm~wwI'DI&o{:/8hA\SϺݢ+l'~q7xCHRWl2%Tm}w _3+^rJq8OlzgS.[vݯ3?sU_jSohQNZ|;wn9~^yte,S;7bwN7_O=T>#>͗؝7/E^wmc]3O?sN?9->~ǎ[;;o k7uYwm?Ƕm5jӻ^{+W\wƵ# .t̩3Az_|qgNok9h5k˹rґX?)ёʗ2eʔ|'S'M%<YzEW̟;ݼ::??])T^])6&pA+]m]m@G׾|ٗ[ZRD!Yn=c-[lٳ 0ܖyF^#kGB}T*{\gٲepb&MZ`^qC Waa傋 &??o l|R:^ <ӻB(5--VĪT" c,9dr'}/rT0a”S6nH@ݫW>s+/R+m;f:Fgv^}%2+(`YpArƺ9dYdИ `8VJ0X4q^oN:_+ՉD#soXsO~ׯܼyCfuᄍskŅsZc~hz{lYhXAJ!g>3R?7lryhfFRy՗wȌf=ֱO,} otAۖn[vPb옱Î^yo]-Bi6l(/zd|L&Oө4jO<3O>o]nݿ-aoegۓ7 y1tԩ+Vp]Rd _}I&x≺{[/!ܗVrW>%RR-Rx$ ?wԩS{ {z"PϜzW{}R]vU aNŭ)\*\*\rɇG_C>͛7ǗvmG8 J*I Hp [ZZoW^{_ƪ~pƬivз$JRIu筵oM6%%\O&%WPp\pB\e/kWbw1B󛛛No 9>7^G׏41_KcƍJ.\J)s!P.5m+\%Pvr&Nk^~M[6]veCT\͝?Wy┉b}/ŎH%pu.Kb%mDz<Ub℉b:`zWkyETrѢE7F˲4M;䓄2 Nz>~+\rQ8#uHHsI[1~U*kmmG9wǶm缧 / ؋/x_x۷oK]VڜRr]BI%I?K.6[½u<$Rx򤒑hW^jln|b /+(;򹽜J_xwgLw#RZ1k[o Ȧf>y'FC^Jz˗H%w}痷_:s}|ŪK\BN\ႢbW\ TW릛o}lѺiޥ^3}T[3{nڰiknl\prO;c71_ %(RUTҫԽxgHh]c#=ҙ|'O=ΆƆK/rʋ/xu+4uҖ;:` Uػ(r)$$! !4R / El4E(JU }A /Mj@zBIvg%$T_%ݻ<;7[.SJe)L*V=dd=wVq5oΞ#WǾ+zKWT*rb t:DGj֯y渚q#+d$]I*80HMO=uT'{<4hxo/B?w=ǫU6|[eBZj5bĈs"D"f96&`4lXa~_߱CǛ8Z[7s9pu/f8qіZ̖ѪK, S)@akN50 2A_f kt'{>Idҳ{ϧzkD&!!!mm{䱘NK"bŊmnYl6WXd4խS}Sߞ@#' 5`5klߞ}}XHcl}|狖,2 ߬f̋c}wǻ?t zCe1Yݻlܰa#ѩC'"3~3ό5~zÏ>SN玝oDDD-8T.FրƽwSSԫ3^:sܼ Q}]фa!aOxI&6 j߶}hP՚S5F~&J+a$WZ5";w\`<ʌ:NBX.8 J| .ر#7/nv4Է222/[^r\մ[XZ9""J9lKz>,47sn(НfZ0_bx٠7<[ Y gYm ʕ3|eJ._co( *v97qέV-̓ tE.pmƬڴyӊnWРAcl䈑и~*Ν;ϟ/^=73ծQ1t IPN~VK=;R_Ǐ2ƺv*kA;KqRbPguFb06q"\NW^abHVbF[Ϗ:]N`ᯟ{Ci-kРĭ_zP̭FӏiӧSF]F"""+3nqF e#;N(mfr[oދ|9 \^ 3$IR*c7%hKg2.n /~X HoAlػNp$2.fTbd$s(B9eI "@ Pv0 $LlPJ$Iz$12myK|x4 wVEHixPT5 ege7Zߖk0!.┫b=TUP˗+U!\0&hFǀ]ߍ;_" B"Zh/pч 9B|T7?Wrjxp&qhpQ@{3߻pRA aiАA}oUVҼņ˸&YN <{ tU*U/^Oۻ/rJ^G8r҄IAhղ޼{9H:I'0`#[m…N+p|0l6(ĀyxA0΀T,BoKĀ9fIC;x$1@ʩ(ǀ&.Ӧ7) W|0=pgU5rxa?q<3#s@ !D)}90=~^ժU{V0)))/4'>,cLu7 Ns3;%KRJEѨEBx-[靄& p+8yy*Vx?7xw)-laS'LX-^w>"'^I?qO\<x}@&N{v%IQy+^J Xޤn*rle1Brx!rr >]@(P=Own8<#GLN;o?%Ƅc u0-Ou{ #oXևrŋ=tiB0 )/|h{E0=`` XfK՞#$=ŋAK Pv8^'%%ڲNG :$ $,a|C,]:7oh07n\qBR⥱vZj?qc}GK ~٩?`_ڻ Zj~A~^nX{-pًqI={j݊qFiXaVf*-((8|Kڴl(tuzߵ{S(^=# nxѧV^'O^|!B/[~h߰_~Dm٢VZ7NIʕ_g:GāgUaB!Z0.pP !v€ss\|RT%@p5jvnۓ{t:].[uj22h. o4o0q%*Z-*Mzԫ׫߱$"D7?q $ܷ3/?_1t:ahƽV3fGU^6bb<%9㌇ {# U*U4l0&Xt: t:L0ˆW@[\!?‹Dv^'L7oN߮?ܚ3%owOwjr[PlՈT$eR`嫐S^3Di]$w"2Dz'܍Avakʞo|Μ;k2jt,kZ%.قaaa~f?*Wcbcl6S)'/pYVťXٙhYU*LAFh$"ty%).ՅZVT t݆u}Ytү7_ ຋Nkq\1F tgck?#]M2Bw QyG=\vI<7}\㩵xs\=Uy~9œqDiQVq}U+VըUb%j!dĉIIIDK;tgpc޹Jb%<{_ ^u6ιmzjppE4V.rաfdg;x˕r9y*GE2+(j]Uu#̚9M6:u䉓ΙU^7&dR_}ըG$Xb #Rӧ=s{5czz5%^CٴճbAиS'j8-yVVo,^Sot•zUV,W ?Zmmۨq#Jiv4o8[nzh2bF+((d^*B)}g{>o\\ԠF4Le!I',5kXF-EQ,F!CG! UV@9ŀc?V?~Oqat8`*CPTtig^msȘб }sg*;$)Ã8s!F]$!@1@NlgEQ(:?x*vxâO[Nq)[o 2eJߘܐ֭[i&ѷw4oڸa/!1 T?v|{|ؾ>s(zB3F?\S'~QWF\UU`;3ir|a3 unQgȱX,PvzdE!dferM&SHHζ;섐r!55Q)~٤7٬t`` H"˲beef#s``Q6l$ʨގ89e9#P7$QNJ}Kg[ 77G:&L#Ꮥ߬cbbN:_bkTa>kqcEUp)HDʜ>yz[}ؼi"WS$[67/UL]v^:wiת^K|) #(_/`XƶJU#A UU+GUZjPPqDz < 1YCBE2/HI(vPBC0"^0l4s*W1`aF1`[}١h~|(7rn䍍CE={|b3NT\w^Rd0H~ڐ2<# =?Yf U) 挧gSF9錱ĤĤKI.'FFD?QF)R>]'}g0h@M*EW&*W)f)_.ݻ:tH'M8pX;B?tՏ?79s4pSO57fԷǿu, Đ? ^\gR(ԫ*WRW@WB%@9(r(s: .^PHIN1z ܀A_9r$1Vk|x˩J8)f/b+N#:qϳ-[ )*޽{u.&&ԮoMykѢEnճGԥ[LB""o3q8'{?sNǿ>b+hPPo*ݞƐwg*SU"Gmۖ,d*W{}{[AɆ뻫LU9+߂jgނk)l*U1PE* S wLuSnS yn߁}yy?#Z>kQL8|cǎݱco1!v]ВS*b8 @u?xZS.۝v#"PnIe z0T99qqЈBTlSSdIX-z1B(C:Yg0<*c U;1ĀKLd  Ol2׫jzF'-xQVrD1R~3gt8۶mXⱣ.]{f3"K*T6$) ?\WQFҋv3dqAÃţ("Zaos3`0D#%q@_O{O WeR7{9}VM$h-ԳP'}NIL /G>5]\VEUU8!j(D> 庪n~]zWծQ;55ѣ 7 #L38,37[w۾}{ !F18 GʅcbkIO0;knJJJݺuUzM11ΟqNW,B?O?m{'mfx=QS@D00,n;80ta1*R-& f6Fyyy\fCrPF %!!ᑘa0R=O(P1%̈ qvDa/n1YVL3gEbs3vD1d4+DV8<Bש_h/vZXX؅*GWzΏu>kǮ_=1) ]26ݙ#]yD2`/,͘/,Z!zBgj1zYOeY. $]b¼vv#Q/{_:RvnÁg~U^OBPkE\tݻ;=*SNz~Æ iiB2` SUz-ZhgK(-Z|ؼis.K2fiiiNzfUT@ιw,*d<}x}*!d_~ _.JQ58c"cHD"a8:΢de[nōv`tțv)_*/4"q3Ly|?ǜC9cLfzGpkB.'^}sc]w{Wp3gΤۿu]u}6nxȱqM6ѳߡ}n߬fz>"*}SL~[Eq5Vk:uzfhsʰ?}nu70B]']KuclXbrrs:e Z7L7tA7b- X;uHwɾ^0Y;CHW0ƀZʾףɝ^G:*($#͉ n3wlo47m42"Ү}T.T 1oO~{֭7 8uԡ:tsN@uki=t!| 0ʸ'Mz{¤ )WR(K >R\EGD*@q費 d4  nMrv;b8Sgԩj!-X-!7s7u\5\WvA6ȄM.rF}=_uzH+͛7\IWmw4h8QA'O/u⤉5kSN}mި'oe[mVŐְ5pjPF8&YN;ۡC_{!0$¹HIbڵk7k am۶zu]t)##]gcrߺ۾se.MҊ"M?_vzB, oUXULJc)7%θرcΝ:.*xn ԫ_v*?PGquyfu 4rʕ+Z}Շf|q\tR9xjU"Z0;oN$n9ۋ1k(c/u&.RSlel3r%$9Xʇ?rlx"cQF~f?Q^{xnoڴIU kCq(V܌nM4afT3N:޷C ,J\RpTE vj7o.TDUA0*UUQ &.8+((%#-1+L9%33!8Wvj!N/ܐ'9=u=%(߳sOL^=z! Uҋ/RoVp8~gO}j֮9wJьxogVh/GthߡD H{$W.1~_%{q"cV$h|||vnݺzwY*U=m۶k׬]aC5omׯ!K (t,#F댱AjJHׂ4 6@mQg[d2~̫ BUzZsR ?[XPJ'R#[9#0R1cތv\8aN3jGO:sQgZ=KBZb-xcVZ۷o6aphѼEnCV1H84phѬEGn;cqשo{h|*Uubw xz@=y Ȳ,B(:`𭡋~"{sgk, p Zjaa!@iT{ĉqqqFq_¾8[m{bRbq9?_mŷw}GCj{h_27lYӽf4hKkղo٤qۺc+ Bٙ s_ht\])UZ^vu.F?^ ز>;v#Zn7z}rRU*cL”ĤiN􈈈I'My{J-_7ǿ١c-MnΙ֭[kAL9C{d<$+qUU&o]y~-iii/^$yc\ˎ] "Ξ;!a I޸z+yZoO]cn2~YHOxb&l23^J~~U=[l~gS:tzEm6&xꕫ{/,,L87d(iРApfV&e؟r\[&Bt|Ŋ;I'U\g @ժw91EJӈ"*Sl.0pԸQbo_.\HPHhP(cC I(B g S {Fww.<<ӏ?^ 4hxСSY'cӴISNW"#!gϜTv/RTNŹ;Noc*a zU&u8ԴTHVTrx{ϒ"] ӠAYeW眯\`-M&Zj۶mo^{UZWsA ߒvZ?wN 4<`wnNn1ny9 0z׻+p[Io-$}4hРAb`kn`nnyif."FXKif 5hРAà c˓'MСëc_u݄o+CQ/L$D%ΠeYFmZDe#D$I:^dI" uon|},a cHHD?zkРAŃUI>sXG1}>Շ指 >⹋:cN84O͠3Of]3@~~߶٣UV3BH: 2N'UiAAC,]ҦeGC ݻ&'* GO-_[qnzo;:F)4n[V{4hРS3O?mc }yB҅p2*؝r8x_y酗bĬ^re٣{} )k߮.vhۡM68t9xxB{ZZZL\ Ƙs8㌇ {# U*U4l0&Xt: t:Dhos΋/Bz<'O,((5n4hРAV]v: vݩ:R%K CZ`(X>;#tHXBq%$QD, K#óFDXDgqxbbbVZVFjwqݏ=4[AJғ)!GTf2j5[UP)uuqΜ9f֭ۚke;v޼u֬ڹ}g}\NmI/qK<4[ 4<@!\nW\.%/[[]VGtM5=o?XLjD._& @QQNT9vX*U$Yzmk?jܨǏՈ Ub_LM]f5j_Nt&~q$Z @zճ׊+0( N:yyܾ3"zd"3 iРAÃ͟??)%5H=CI.b=͊Acmּ3Ϭ߰~ͷk0Ɓz3`rel 5~G jתIeI *Uz7YhV[iσ 4h7&"x &%ڽg64hРq<02R3U&!FawhA  Do[yB}K4Tif5hРggw{W/$ @1"LD=bw~̛yːhCKXo\oYhy Kb>%"!$$9xIg-^ 4=biiȓfmRn>&$=3=@$RFq'OܨN#QϏ{âŋE0~Bcbwٕ%R)0Ȩu.ӠAKĽJ8w`@~fl uE@LyF("B_8a2w_taއ !|4ߞqQԵkW9B:Fpx9Ϛ=+:2:zNwWx 4h88uY7CU5 8v} xfƍyyzmظo?֣kZjCÇ01/ܱ3HKǍW^}ʩ1" "N2€ _%SF)wx usrsϜo 1?=|q!wjI*FaԱ{Ǟ]{r)2z{ղՠAKc4X~k.(8p_JdDdxXx7'$0dG8Z1x;liÑ?jͶy睗_x5v}7'{m܀$IJ8 qIU "񻍋,'`}sܛ5392qeݳCWSuZ\& t~%2bЈK׋.uSH|BJ"1\{9pZukz 4h8po}\J?H1ֹ[dDdM7z7NR%9]NΫ:wܳgΆ,]4B#yݦMm> OtnNo-s `0Fi >t`2, $*gߞ#Gسsۿct:֫81!d݉CJ*tz^ 4/ ;pzDFcYeYnиw ~?KSW^h#/R믿?=~#WN6UdņoK;|ޏ?gpL Sŗ׭ZjjNZ`An=c3PR <efנAo X.h_F2Gpzf0SD889N޵1Sbߘf^/,,t]`1[5mvş.`a kެ9"sLM8 R`@ g;G0iެ9uQ _!vΨZ#%"Y-TyyRlʲv;9 ?Ϟ, cƌt&Pbŷ&U1"qD$,2gsOfנA}q##ӧO;cSL+q,a0ZhM$"XI&QQ0йMwn ߷ZG&4oA+" xGK$UVi;FVf7&[n:>73-?){Zڵ.]L41;; . npvV=kU򨗁yRbbccg 4hРq< $Ic֟JB{=v-v ݩJ+FU>m:,MNK)u9]O|'E61}ݻtSF'gϷҋGD\IJw(RQ\)`9p8, :)]ߓ#Κ[A-9{<n굫O6|c6jdxǃ‚DZ 4hL,XԴ$ߙNX0 8: (Pd)LB[qsʅK`[0^pzΞWN8p@ $KK~{@$qR$!8RAEHTnv1ǝ:v1=f̙v}?޸qRXXحK.]h 4 .dff6ܹsŏ%Iz-K. WʨT0Tpd DE ?qƁK Q32s҅#Op"2J {IDuHg9p Iԥ[ I*˗/j*Q`]rt[N+˲hРAѣG?b F2IVjժ8 scix1 W2Llr)!s <8$x[Skժ])3.jsZ jKik/^s9s@:u:w5-= !"t:N/K2Xz[ 4hcƌV͛7]V 4h(z|nn.;C+W׬]s+lA3Ƙr=ܚodde6W^-Z Ͽ|uօy饗Z6k9da ϝ=7y񍽧wp_Le.([ݺÅiiW;SL1LD{'hӠ`ݻvޕ,Z߭_$iG|o=dFg9yyyLa:./?V7\21#@qKHIB fwTdTŨg<;{3g̚1fF,-= _vqܴiŋo^PPO?t>}FER; >ʴi}´իW_jU- ;;/ܹsHHHݳBc:xs(t\N(ʯE\%_@H^z0-o]=yb#8KDUU @p…gOנ>gԈQ.43#mmv8)oM+)9awL?;ߙ=齐B-QzQTPDTTHB/!~iRR/чg;wgΙS&yA}xgO5RHLL~|||eU7id©^ xMڵ.%`[oٵ+WAѭ/Z(7NFFFFF֭[===8[~Rj! \k|(>ANyƦ6=!!k 7x׎:ZnӦ̚9Kg["䩓8>( ]vz^ѣF}g$%&j]elrέo8:N DժyRxŊ_}5^Aa߬VkBBV5sV%d2 4BXV6iZjUСCr0^]KT"4gZ tZ]~CEQX 8ԗwڔڈdG\ݧTUVu#jx0E5%O'TҨwF)La`zRJPB8rJAdyWF\w7V2y5j'W!1FUZlraj7ֲeKuɮ!?_f'pƓSEٵk׽}ܯ^=|9˄II4 4 qf2\\+] ^ZU$$59jr~bFw'.7C@^!III1lxzz+kU+VUP?lB dkw@ƍ{\z@Pu+y\29c$tB%z'_Eb\yiִAFEG:uJ{Tk֨onp0V/DBA䗤D鳦G^̯LGDD8eTI+8\2sbW 穞Aݗ./I',{tttѷgN]豣y9)6~t4Q}\xynf88.fبXEQT;k֮ދ/߉]&L@`@D=rNF W}Ξ+2'&'?~F􍈈ظ_̌eͶ~2K/ivgϜ>C ͽ仮=}]*Vy V!!+7կeOK9r/wwԩ~~޾UN) 8ڋ#4TL5u¿R9zy3¦|6Eh?n|zrz]jD8psgkת1sRA>SA۽CwrwFh`4Ȋư7v]| d2M[mT2l0J騑֭Y7Ikܸq [HJj6l&\({nn'~;- IF u7Mtɯƀ0uE~͚t.. ɓ^]3a&DrU,bOLL}kQRgIB2cn_vʍ+16&e$<ӒkmVVԭ[o]y-&:&˒W5 |E^=Bd'6m&3y2&OS@ (Vo]ͽPB)cW3kԬYX%+yFV]1f]s,[Icbda:N"R^+&YYwT(_SrFZh.޼Z??+ S# W8((WxL\LPHP)Rfd[dge+Rhuz4h$Mw=+Z-Nј1DT0&˗T#J:>`/Y]M<iZZ, Q`@bZbLLLvJvvVne2˲d)TIKMKggg''$kZx\lYge k.st^ǃ#-3/55>5!&mOLeppWlJl\ljFV6)sY9DC !&.&>.>+#bܛpZo ;yD#XN6DxuH9vXfV"+vn,+r,UkWA#i߉MΖeYz{x{{z&HfoUtlKhtwqOOMwquuu86F3vWjJj=p(SX0V~Efpqqit\$/K%:6vt< OڶgR bcOl# SP5>so FU0,ɴzjUݭNEG $.&.)1t`4KZrB2$ج6WOWgVMHLX,J%g$g+JjpMHUJ)f#6{EjϴgLvٞetѱ,''`2)[B<ܸ ӯ>wuSBP0JK9v U<' VL;$xU7(P8!9>Y]Iin]e7"˲ ;Vgz7}lT>[8s1$'Fg焄mv6ӛ1b||ʶέ*p5TC +vpPJNf^: vedfK4ALv5&&.Yw?BF3:9 x{ѹvAI;189Q[prs"9βf[miq YY/^V9&ɨ7ޱ-ad6%$&8NEKz7ݳ3$ޑm2<c>Y3#,Ys瑚5# $f@Pu)&1&5=uAf'szB:gyy ʔ2ߕ fݬ3!h659l6z\M,KK\B\2^~^DtgjfY2&Fqss4FZhVH)yzR:8+LqssfY9d*P(YRFӒyX搜WVe ><˗ܣ]rѩS駟zx3fzAq2doVD߈,1k0A[=2rVyԊ϶eg%d333UO@ajyjF*;e=)ar!3 d[)K]059i&9!YOOOisQ0%$;ƦNQ Ҿ=>G cOAe.ge7Ԛy D"U+Tuvq&䭛"dmm G{OظpUNN~b}/SU౒Z-ք; w$'''ǧħ޷_$V{7d%K֖C>)@Pt Y5[*[2HNPBanGnʳB!o[K31x\QNi>p.AIh[?:gAIKDQ>}y1> h^bML 8#jnj1m@P4:>W1kQB5^t:N53[wPJuZ^:RJ}8۵g׎];rjP"Iz? GV䤥o_ $ :^ OG*!իW}WrFW]uf.984)/Ϳ8Wn"|d D%ze˖<)+6zhN;[ WΜ8cYڵiG?*<[3WPW^ZIs{?)aV+6x 4VX7T웾tyz^v%5-UK%vTfFF)Z&--fp/\P*V};-5Mo &+:.>NƙgH`Hzz7V^R*@)u[l1c|]9{Fa/4Q#Fk22l$H Q{Su5귝]rUV~xx\/bN__Pׯ?^g7n {1hv@ʏU/EUʼn Z3~MG2e,y1c-9)칳={ݻv7))Wsy͛\[4iѹsP?y(Ųe[֣kS8ڱcG.yƘF[ntltTTl#/EFF[.|/o/t$+$*mݹu'8uTۀfݹt5 FP=+ IDATMw/P۰{iD SH{:P/+^>;pͳvګ6^=t(OK00RP+(ݻtٵ窵$Iz 6ٖ󶟷mV& ۸n6;5>W|'Oe&%Mכ9R35mBzb[܃<|\:hӺ_߶&~>VRڮUIS&ewOB;dL}.4.\Q}1#5ܦ'x l"&@Pu^[Q6oܼRJٙQh6۶n[\yp;w:W-[ev1 :pTZ}̘1 q 2==<R;I>={vnr2 dv3q?i2ƏwP0%0 ޿}ݚe%88<m4p0Κ4hqFAV:ñ:qp%V39Uw Xv-@yx8fghTo%A+%h;ʕ*^^*[@!- &Oj<<|آ[Ϲ]׮^{xp0rʹ:ƘP% '[NU}EL&'*@ptT 'FV\M0P !C6n\cʀVG^(cFӖ*Uٜ/?ιȑ v{L*8W+$H:x%@=+ ˽+PB?'S>ɍS1{P G|յNA!vJSY|ʭY)$d##,#F/qF =Tpd_#/G޳EԲe_[Ql̮]6,^K~mHWk39,nͭu7ݽ&H/y7=KR*|ޕ{./\]8vʸbF|wM`V{CLA橶`98%D-yFr8qރ!~~* $SR}x'_Ѻ5L|x"Eeb˒%O?iyza&qWw-=g;(%Rڟw[@%B)%.IBrI)uqv)SL*U8QkVyYfg ݼ*U&QIMmuRcUˑL~HJ*WNNcԬ;c{.t^lt͞=O p';4h`֌Y^^1q&$Bgsd^5_97cϷy^6P00δZ-D-xL){Gh;ûtcLa#lƧe9g̘+8r;wv\,EQ7QsP(P400ιQgsw\;m:Xxq;?D2Hr?+]Mlg|31ZD݇3r$*W:^ pOIHf6.5Ш{Tzѫ %fQBDJJJ7+fnSۦOIW:>R!9^'n8^oB֭ڵ-dghS@PvmLeq\*UTL΄Ry3 K 2~3?޷#FoxJߧBJhIloLx@HR0!KS/lڴi]@5}wǔ)Sv@ :'%3;l[*&o7%TWUb<v2o"ѣ}_ SǼ&oT)؁6mď,uZwSwN{k%N?DrMv@VL&1 %YI>vxΜ98cjX Qs;kڬ(FF=(DםD%z굫R!C^t<|w4HM:^ (:^́%X8ƻ1@ꑚJ)u3fF֩ xxz <`4!%}%9O_b~vKVuF!oHZfVYf2!D"BKhRB}nxl>r Dԑ#|s{׬uPjƊbJºsDkMڀW7W8cb,Y$&.f¸ U\uΘ9^zrr۵k6K,67mtj+^ytKŰYYYl6M~~ LC4Fy2o}wڷi+]kW7~J*FQߺs ǎEVV:kPǸ_z#QQ=Mğ~ba{S@P4sӾ?iݹOO2q̘1ݻwIIsILLܹ3DJ+5ߠo:txx%!iiinߪQ {'(L)_|FM{ٵKWj?aR4AktFTN]EVE5#߸)(c|nF^hnnO–-v훚:}]ӧºs448SNN2)#f}9k튵nnwbp 3ٮ9㹻%4!p 0c`Pbgv0(\PB_")LaˢcA|Tzu-*壄f۳ZjmuIR}7;?@p`}b:qkºs g/Z"׫vכ5moՂ -Fh&( W|<}jլ|fԔ̬L-JaSH W4\CAw֟G9f̘_ګo!+XšmPMlb;m馦/s/sA+X/sa*@R.u5kTDS8BdF(xD㟬 _^ Lcc;˄p􇃆 iOժV3ٷ!!j&w$={܎єʄlz ˗/+\QWعd4QJ6+cLя>z쩟⥋kϮZI+u Mw/{$is ~e@ff:w~&Mpָ&F] wW (:A cծU{ȑpʩLNM7 Tp駲,w?h0I'Hdםc\riP//_آY::A2נ~֖eb&Li϶&^|qշzvjzWl[{pqqػ7fDv04 ^ѣ^~{&O'opΜ9}/W@C?o%_.P$' C^B)U2&LЦElhתE]ė0I*LqtoѤEN+z]vV%ʅqp)̓˄BJ**Qu7:ƠJ_}.E^HQYQ^Z:>0={CL^MhV>=T m[l~f1P*fZx ؈-' VUis.s9wcq7SUPij3ӻzoZTzs#>>m|sYZceʖ/%䁽I/z6l}&.h~-<8pH (i:^r_}E.yB,OP&؁-ZܹS.4 4͚?nݦK.=#W|k1Ao~cbw/9IU R3i2j+?p8G?߶w ڵkaeǏ?6̷ƎŰaG1%O9SFiOp$"=ٳg'.[ pVƜ9qh -[V*W.7K":z'pCu0bDU ΜAEО?@\*& HBvzA+4q8s@Ze( w/`ѣ-E*s=zi U0`x's~`׻E@@RR4n"t|!׈3f̸/Й3?wx]T,t@T0lv[fzMnQݱ/]*Z;wٽ[X4ɘ163q?ckuI<͐D5?(2J|VggWvu_?ۅb\Nii8v(/??_btOF:rݺ8}Z A t|~2o@ `0G]iB.^Dfka-Z4oժ.X7(~sA :Ӻ5֬|D׿`A-Ҥ$ܼ*]tq}y [7Htƚ/Q _XYx2XÆsw'Nffz=uJJM.9܉N}AqC?:k֜bѢmU@DGh 7dv/+ݢ]^b)/u0`Y[Ĕ/͞z'^;l>OO0n3qÏ; HM@ tc\V  ./)h#"Z΅yq4ʔAL ""C- n..'sСp<Qh-@cX-8d׮rj?--m|֍7nLNN] (J~#ZvI699wҭeQq' /uзo\ i-ۋ]kݻ IDATK:u ?k"_@17'իsĀ"(l;OLNN;wp @۶X9ۭ[8pP8 W7oW (pJ~@/π@7 lv"̉ҧVU>q+Rxz"*1U͗\]#Sf 6y l@|9il Xв/'NVgH D>ĕn܈޽ ]mnB^%xx"-_ǜ{8/kW;mfΜ_ ? ީ>4}`2^w/'q%Zԫ׿_?|UCJ >'NFchbip0'ǣ|>>sǏ_[/yyۣ0O&6lذa˖gϦovZİ`;P EF Fc]cz:5ՊJ/xVp\cƌUlAd8@^JMN.0}(}r6ׯ[׭ P~ѨV@ddagY Æ^w5jAܸt޽ׯc|Tm))[Ν/9XǗ0joӀ6&ӡ~Th᭷ I>ѣ8'._ѽ{+Wyx&l7gtide֭?tiq/]:`L}z}@_ B8{v9p iӪڵ_H_R z Bq$k /==Y-#.8zͦd$&Eٲ(MW9סCW9qͧ¼PL[^T0OOF;;8SL/rFxx7|gl>0ЫfUpBwP (;h@5Pm>>M}7<1wʚٰ ~ , @o@Ϟ/''O>cP?1)T#^ J3f̕+._ Ŀ7oc Jȑ=;[޶ k׾̘ w8_oAzСPK6BłKaP9n߆FbվھTurxЪ \Kv6o?~!6p_~6;Fc!]ix-[""iiϕ/c呑W֭[wl{vsSdr덮8Ӧ9װ!([,Lb#Vumpsܺu~z[투Yrvˀ7׏9_ ɓosンgQ_]G=Nwϛ@xfMdgfر.ppL^xTe!?lԩ;uݳg-[6u_y7w_VgtV g^_cj\>B]CCY^L~áZq&BC Ǐc,89'N - [^m8]d׮rF;}饹_~g9ϟ@ӼhXkw5Y _`H;W^). 3B++ A% PATyoc@_z{v(&)aT?hDAbbA;,;qNDf&q /nV "㯿[3gNϙ ~;_ZNNN^dшWnX2wdGM 7bkak>0w\uȑHr9^^MBwa@4kVT/3 4[hsZfk׮__@CBVB e01 wt~/g|С1K[˘GHI=b&Lx0͟?'69#cbdg~A 7< 7xm}`Em1e1@ʴiSK/X3̝_54`YxioF5P8f4^[njqrˁԍlGLp+T\Bv{n"s"8fs+\̂~׮_H :5ÍƏ?^Zٳi)l~.0C"P룏_Xx꣢0l^[j4~ K4zL+TcB{MLN.yY.{?hٳvM_5rЫ?!"B<3U&L|NѬ-[ m۹0/*8۷c&g8?w!lQ{ j(j]Gպ{պ{キZk#$$ȍjOϷO?ܽރkm.9qB._*cǠgOlx[!#|Nua>KxscǁNeP(>p ڵ?I8ЬI#R}%7˜1a}24i'O͚El~Y *BW_<  }/0:+ %%o:t(L6~. #Cc|[[4üMhԨ\dE i8wC6'vrK?8EAzϞ?͛W/PXǏ  s:&۱c4Bq1tVCQ>y`ԇU1c`O*U^?n V5k??{=zM^Z~zcǥ'NGc|a0'nn @|^?!j$ g%BB>[hIxx}!':t0` Gē6BѨ7@^zm-lm|5kB|GA9~ 58rG?E*oD]|prӧwzzJ%BBc[7nTʊXyi)P*VO{w8ytb?yrgWޘ;wÊ *djpmkN؀HTak9y]h)7Y Ws|||\2Tgj&d8ؾWIa o ͪUkՍBc|1w.̛|ٳ6Xeɏx[aa=B+֭=<nz66Х \&O5Z9|A#t|gB%$6 j֬ȥ׳':G}P'!ɢE {&Z^R)k?_/c0fLŬAq\k lp"?*>/SRb!.w KO@s7EE ڽ{WtcDD+ہ0߸q7gx#ʢaF:`ǎҡ= M޻7g[7 rpZE~3gHQ>J _'Rh NH$0o @Z6)oTBaxѥ^'N@x{_Ç7`BTQv%-\nդQ牫W+~ OtZS}~@>{ܭۧ?̘1IKK%X:vE]e?pW~ռ H<6n܆;Bkg+UVYX7=1q̙Ri9ټ>p|xE7 52m bb@.k֬YdJd:[[ Ķ7-s!!ڏ?60aaG4(*OmR]ig,WOXN;ªU|W޿Z[[ݼ4&vzz{'3gVvaGfSsPC<<u{EsІ߿{z .]_BQE@Q0zH',}jF6>ŭ8 `Ç#0#qJ4΁FΦi$h0ڄ/9}%8Q2woy3p`mvU=S?.!Ȝ?qrr9xЅclm]Ϩ@~>h&5e@"'ooW}gH@ x@$!Ȝ͟ `@ ˖4SoK搒II|֯,2Vlx#GL@y`˙3Lm&8\>PW4 <=S }ѣxp Tۉ Pօu#}۶i۴ie7%ThڴR +;A{p>7 olZ쫯z#bT1c` ʂ8@34Ô2L)Ô0E"N0؎d\6l`a)@۶7pfe١0g;8m>5P!mwS}^!_xyIG;7^W*[C^X~UyyII@ng9NRlWF8[*Ϸ$!ކԉ pze8sU1n=x};ԁsEhֺp\]!43BAnnnbJ"O gϾ=uf4ݟ}ϟCժZ bqyϩR*WBjNM79x];oVp]o.OP>!qq ?dY.^mWeK c|E6k,] %%b6pl(|3MdvT*/_YXZ>ﲳ 2r9naÆQxOX\XY.:uÇe5k,Y4#)iÇ*7Vw[%* [;9 hPfŊo@@c6me4hU&zjt+ BQy3  EM Ν{UXֹ~GDkڃ?W,6S le֭n>+$UZ\sn @`\@P\z7 RSvԸz5`03֭\nioơ?WA `mQEN$Y'{8:-xеG'OAg}u9[ڵDŽ ̓' u+#1UpPlm5`.sluj{b(~~ Zq5jlJK}[V-!1`bHK{6WA׮ΙӠnz撵K. Xfݒ%cccrE޽۸qyʽ{=g=z޽XBep]׻wτ=a[XFEٳ׋ ®]8qY0kV=~=hʔfW ƍdv{aĈjhF-[`V< `&pqñ#_i¡CލP=ϗoH}Ӿzu}Jng\}gGAwrmfd\m_1) ll yV 7oii;r$({i<7:]daGa;XS/^@M=0A"I6֮Y3Aoݑ#|loYOaۥK[Bኾ}3X 7oǗ!/=aɓ &ᙟ}֤QfA? hm|A<~ xoxr!HdצMG`/_ƍ0h|]jVZü27Ccٷ]fM߳NNfMfͲD|m[D۶XB+&%eW0ej APs0Թ6l8!(H-]s"ԯW,qrP^=`ձ#0W2mD*oo>gYX A3ʕl7>v vP;o߯<<֮]9Bc|eԯWNN΁п?̚|8= ڙ}0K6o+Ν8qPHύc=GaԂ@cw{i[[ömq-mKٹhҤ:vlGUW6|YZF/ܸQF!1iR֭3Η2x8c _odipVP}Ά  \ȸ~^ ]sHL!xd~C4}6)+Hгt.T<!(_*R""__ЫX[GaGǐ!c 'NHv~Q< OQy``Jew>Bc<袢V|m W@/~ hЦ yPe}YƎ}Kh;x^@wXX` 0#dueˠW/j~X,$ڜ9AM>BcmԨ9GaG Æ֮p{"QKWo "BU8U@={`~iHdo0* !x\-mk%P3p BþzBcKNERg;kV1+BWW, d4`{[x\v3fB__,d8i@S`Am:˲ox\V9#(1eY4n"J9Bc/U*^\KX,ǒY^u!f /ɳÊB5ARz5Ap@$+;Xa *ϗ/ ^YxN7+\xg|ggu, ^ʰLf>7wy)_@S5..*>vXM5Ξۈ6l =ڸI9{R}ٳgڷo?a?Eiuڧϟ֫]˗2eϲ,W6;ʿ^5M/27bDGLlLӴ i| ^.iB)צ x4>˲+'?yC 1 M3eߘ)k^aY}Vys88...$$Q~ftцɚyZ,Oe'3$[l٢E-垃{ʼn} h ~>ڵk)zXWRd 88}i2y߾7_P]8ؗQOip؋ZtY[hޱcї/?M|j9$IT9*wػ/RU^]o/ٳ#G>71'ǎ[~KSVe:nӽzK_7#F~RRRjmp2[Cϸxi3LI^ gff_1E]t7?"+(i  Ŏ;}?.%%iz媕]"K4M޽yaaa-ZءG.0cƌ=$>f䘮޽M7M2U!Gv2-c?777%%%;;XsMccH%YY"(>>^Ֆ,P*a&===M-ZYY"";;;%%%KE!d)2YYY4M`J뭭M aRR,--IӴZ=! }||?q\, nٲe\T]d)23TyV"+S; ,Eٖ*,H$ϓd*Jd)ZM˲ii2L(*///%%%;'㋭)))z^RK 233S./Y[Y a=zFvZz=I ͤRmJ c3ү\"u֩SGTRsrsD"V]fu-kԬ!VZ4;'P](KQkVfG^p۴1u㜹s?o԰ѩSU6nFyu0`_J,./-.}zeX%FhcGaݘ׬ӿܺv'{vi)|4cVu߆Ӣ"#"{ügΝ?K./&XGtZys²sGll[Eb]m9t/oСwo?qēOĶc7n#\l˲͝gL$ɓ'O|ժRرcǵ*2v9ܻkGݨQ,߷O;wUi4M KC`0n\bog߾]}VMOKwsu{n|>_V^ nמ.3ޏJEK$EUe'5(GR4***?$Iksusqkס]V-]z/'OEr'WsfO6:I(c%%%oԠѓO=zZ'4ItʕzGO➼؝hoo?v-Dǟرcg8ȡ#|xH׷o~) ժTsuuW!xKǭߺ-D'MlҸIRRדz˞/]dƃ6?z:ujָ-ÿޥsK%;wvv?wܗ=ׯ_,%zS<]={]ſJhVkwmۮf>A;{>Q+J$ubY=S KQԑeYW`.\-6jjZ;ޞ")1""}D^NިQ|}}'gJūg.qrp*;=\ݔʔ䔽{ ]V}UvX+s!uBHxINNcNN eiaɲlHrnݺ%Ɋr;;;???a8`Y6((#w܉m6ӑ֨Vp 0dɳ22v Ԫ]O#';5%a eN;qy{{34PjJ(, $G&p}=˱, R\zeئMN0siP`֭N޽z7۴l24XjY,ZOWZ왳۶nJ]vXX_, Eޠ8 K+KzBTRR"NhѲEzMv{u߼yU)Z`-;,D%%%` $F޿l岃mEcfiGI^ޝ;wnѢ](((3{B/]W^Ç-;X>qD`#:Exxx\u-I"SgժQSGv"AZ@];w?>$$TDŽB+a(5b6[Y[1 SJ|=diuZ JKJŖbx;}?VZt+YYZѥGp,V5,ECmԨQ}ĝW^N$P<*77s..F, <}Rj(MHHAzZ/$9߸~ĉi32 4x`?_bӡk!ppm_^Т+IDAT maaWPXS\\ p05?c-4i&?P$ _4fGhN%zys,,񙷟)CXcea8FX⥦"K}Tyjg\2~{[#U}||ƌ+_<0EHc7o7{{WRU_itn\suvP>/.u21wc7?䩓1lش!A줩>oyp࿝H"Yo_Gg|<}RR=]<9 cË#9 X ,8:L0qꔩÆ ;rȤIf+/ay&Ƒwyz(ƎTkD"s󎏇1xzy>%Bl&mr,xr͵~OQRRsg ~~BIRVTكRgeKի`0.y|BH{W :~xgHg!q84y{z;88 ?jժ.((|rvvvᣇG<\s'KիΟ;ب8mdHqO]\]Vׯ/K}7"( J 뷬 3 E )!ER֞U BX/  u=yXan4kڬl4G9{칻mzݸyYfleۻP$RM^~^^^^fVYҡkQFnۡm,M DI<>O$I(r?ǚBMPPйtE" H(O -..:Nl%vvqfFWcYQK$.gWTggg+'? ;:8S>Ν;\çσ!C6mԻw!,#~~5j(**JxT VX\뗜ܽ{Rڍk>YfbB {0ϵK>o;6)Ԕkm486}ZXN.RyJ^YYb-]J5ŧh:J;Ft\bUT*ţ9eYk8tPY۷w_Nfα#N;2YXVmZ͟?Jdխk@iuNhҬ%CBBJKKaae%Nj~w '04ئm;88,E= 3]~^~;tb 8+'k![6maa-кtܾm;_ȟ2e'~NLN\hѕ+W._uji,X qT oBN:2,˰k>rȴ^|L\"m׺ʕ+34M5 ~usuѭw ~wp~*u% G-[ܻ"S"OM8yQ-?Uaaanjժqp ǝtzFuwjߺU)S >AՃ&O ,\0#3SL5A˖/l%ݻڳkB0fp)jWvn⮝^~⥋Jr]u]&MԨIoٵEE_t◓<{`ނG;~L@ÚI$͚5,;'}zWjͪٳfu[N1sLOedd zq1wbׯ/L~232kX0w˰}vVO#={j- 0 )%i|_&0xX$ӧO>mkk[5߳'fϚ-Evt8Kc[6lyXӷϥKn\0#G֯ۯoԪmQذqC\b:_;w0Oϖ-7`!prkauwޗ/_z*ǏUր 9|˖-ףTyFȬDVy)Ԭ\288_,]ؿRL9%.7? HPwjҸJ2^BZXXH,EVf”pu-hҼI'3#@]\+8svsvsqjrX_,D"`]Bi;萚R;ILLL4^ ,[vmcqOhmLzAe)rrr \]\McJ %i)iz^"+,kWd-۶  7Ƃ}qɌ m6 0@VNNN...</?/?##fhXCBζHqc$O]^~}Νk4vx} _}[~޾+'{]6 `0l_{Eyw]%R&J/DI&itVi~ baDozaЋ $/4H~kꕑסy033|ghh6:jb}YX2Kq'rӑS??ߎ]XZL%}Iɶ'v](1ņOԳ6 h&i}Sh$/7/,  suꕫ|-U0Vc﷡.3yE88%˪Bwcv&"9@vv83 jik)Snw:m6ww|¸yk7tO*01h57cZV*(,HCڎb(+3٬y<1Vz~u(1,mڤ[V/ 3 K A2zJ%ѲeqZVkC;::VHrhXi@U:̲ +Z^oX&$MN_iIieEeOoyDT=_o྽8ԞؚZ; >ms52Jim "=/\.XAzasxd2߷_>],&BDqA~X|^BNd)1mۚWWw̌sg߼jm=va`K"q² 2pa9M47@ѻ*tqࣆɯBeYVT>eU*qjn{0Ǒ8ܸic/u 1\ ?0sdgvpLP(J sG@# co 8KqDWMu룈9̬[vkiP( %9>D'q'/0g>}mrCu3JF HdP( %xy'u$/ ^lr_JBt9V!IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph2.png000066400000000000000000002317571222557406400241170ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATxw|Eǟw !BM@z*VT^;.6DTTl MWE@ "B%3R H|${ggAPH-DQ2`8u.>6磠S9Μ:1F9===!!"{@ p8MQm۶i#_~-?cNpB0BADVy߬V+ ɏ?^#",p1s O7vF j#GϦرc " @8`{ox~۾}-oho:s9# DᘋX aQiw4!c ~G?ͨ-W\aC=W i8 H+WfD ^0J`@ EAF.@(8_(pEe˥$! x|% y[@ "XL[C.& Yy.WT͒pA<>0@x2XM\q/ DX 7 @ K"BrVX._E1Xd\L<6rV\ 9܂2Mq{>#iDFc0%,bE, ` !c$b L@"G+۷oZh;HD#A c s QDU*90K!j=>&*T,"nrpi\.RvQeQD`6dDafq'& bT* $er#JjvQ"Dq킸p}QicLbVf F1LQ8!]wPQ W@*Q(n 2x&nx_(.S\Dϩ8(>Bu/##Ig_ORsJ..QqqyX fN(@&^C(M\-".^ nO(M|HtHZ\n#N]n+>5qq+" 4g: I88&"h6D*eynT 1v̉ @`.׭*ƪ"zn =>hݺu(Ó PyuVGA2'DG7nX# pNo,fЩ Ф~4~KMdz㬏=s3a\3 v>䗳!o) (f0Y#+PYdY%_=Z(on6|SnyLQWCI;֬~ěc !d3K^ e2q֐+W:}d?MnAґAFԸqu@@4bsƵbh%k=uv>adnsHl$x%hDX3$v3g $fda"KF#e"JQA@<Ž~C^/-h( O/)xH q2N(MWxF1Pxd௉gcI,E<6;@3 )*. #(.xF6BY, Hw%3Jq\U, + ʊb⸨)\P**.^^rZxz9y*k!.ML03?(NU&n-&UaH2ĔTqq- 0 kjqL0`4m /_~&$ <sy/شq- #akω=O7]6%{UjRUS ڰe/C^~g©×cE3gR368U&L-ϥͨv?8t,Rm`zQF#nؕz Tܱ7}k]p|պ һ& 9|4gWlaܱ7{՚h ?iFكl{S׸o]~t6MiӢRvUF"Iu'~^soUL'z:I1ի[+auvڵJj*#?tw52KnYwZn5/& G q@ Q՞|czj=h0_ߛlZW2:iq-9xZ6Ih"iß7urdGzwҸa+ ?нkGk׊uȹEة}2°}GGv-G1&!XZD9T>pTUX*A8 & r0!7(hre (͜!& (6UUT\Bq%.#N!>4q7EpK$#jqRxd qK1qg8PrEţ!7 ^M_\."8 Cx|4^xNQqs("P\ nH.!j"Q-MU Ryiq̙q,/[TB& #,]qq{y`nOPyV9~ݪUʔ˓o:X{hŚ+p:TֽmPNŔџhΜڵp)fޓ^73#s7ξuNEZwId)xi?""zU?ժR*^WAfTOsQ$':6S98pTIs{Gצ;w:w΅ p;L. 瞼әiٌZR?h|tL2mGv n!',F0 ;LX-F 6Hp.$1 At:bёえij/.I "ij񠸪B\.*nB.g.e ⦒ijK4"bxeۭF"!=$b!K7&~>\D,qEō).]L\("na 灢. BHtqrfQ0\x&Yq;WT\H=2ݗ&n6N95"Ap H "` @(bf/0a:60' p.-Y?PD%$QJQ>~#OE8kUS~*TA 3#@Q^q_9JU>-ޢ0 AR9$Qߕs(9l}פ{tmrjQҒ0-qLh ݻ$` PzSGQ}L4V/I;"l'j֤dMlq8b1`TPeQNפj׉=r-&$(} W% 琟 ̄O 8@fe :\^p ĭ!qS 0\xdJ!]x&,$NKp/1dTxCxeA!qyEŢ|ln/G'5US 3 zr9_޷CpUĢDUxԮ]]MVBptήar;)zc8 6qդ(b$ܠA^z[߶}m>p40T1c2Lm޸lʹki?3ePM45iU,,4O{{W (Z|Cjzv~ȆbBFxM ""Y9]Z6<,$e/G49c۵zo2#.ς r X4J0cPJwȾq^z€ [{ћ(aQs4Ei]H` > <`3ҝ `2Bz.`p.0J Ab !sRu@N>e?8ma30K gZB퇈邸X(n1 f]YYmf +[and!^^T q5L<_(B -/DŽ7T xIqsxne+P^T<0)*A0o߁ΟMDs*Ys~QTS\e߾e wUrҍIn?p;-s-{N[|MJ0Z$zЉ  l5pɈ;:ej$شeGF&df8+ٽ}m<c޳@x ]nz#bED{ΠGQBTsYvC%0)gso_Kb0 p @nQgӖ}F|y?ڲvaozxvb,Vܲ|5)aڸy_|lڰiWddU7e[~^ARݻ6E.(%;8o%mܟx>Ë5]69|#NU5MS_V#0uYbFeIdV#fHsgaN;,T!"L v4q3*M\)MQ egTP[(*]$Kw,CD#L( P\BY9%9JN e.n10Y/njq_iy* \1q2]. (7bpqq4Ź/ATT 2 C9S?(#'^P\Gbs#=Ϋ[JZIuj&׭YvQ#6sA~{m>f]{m{x箣vv}'H AF""3naAΩדHb$/ht`,yY1Q5>~ O?k~#ߗǁbd4 FQ0Ąm[=tD\'oq-,@c !IAsO B`EeW:ukU;rTڱ[v;%1D0pIR`Dϓ˹BDZ(cJ~* `z $Y~s7~cMhƕ>Mn1̛L4_=qrn0D1Pŋ0 vmqb ?sf2EɁJe9RϯR9b3uݖv)&Ҟ1W Q0IAvh$Gzg 0i?|4RDRGZ#39&uaV3u# (ʝ`:xdUNp|$|q1vPbΐx68a0J\7\D<\"vL UP1GZpP\Xn qGvt_eqEGr*y qR%0+"y^.<ޫ,nXGX7I`.*E]SR"eX G %MYPx?m/YN@  0#Lf!.b"J05^( H @(>xvtHXDc1.aFm۶y"bD q6iO${Hs(!j+%93)cCj6xЙI~0!9pwf$c6G^ *[$uK#ɪ{~ SB9I~IL0` 3@ _ Sgâ2 09cTMhAXcBR* ,2fs Pg4E/+- |S33=Sgؽh49p*` %L `J e2 b;#q1QRnPp3c`|lgEE2GܴσkU`x˭f0881Ql'b&d9r,' hBT$V Rť+*qMCtq7E}2@ ,* F o$Epy9!`5AH+ \/ x `+# (M| +@OYv/[&n_DD,Ut@^cJ/#m.]lw1.&egH&.@\AAp/".`6@_WAK'`6^?P 6 :{O_}Pp6(Uf7wyՖ}֖bOMKKkҨ9 8Zo w܁ׯ?z肂YϜ>sCVcp ֩G|4(X&E \_IȚ#/Ɋ'T祽1ܿoͷܬ(ٳgG-8^{eff \^{zWNE!|;wvuhcLko0&˲FP^P%, Yo ׭?A^Rz@GGGGG46] L0*#nMs׃/u;(cM+}Op~i V_ז(+s]f7N:::~Fn{#oX_>󷆿-[):u4dѰv?Ν;70\iZܹplW \[ASF[)T)M$Ba@0YV-[Y̖YjH̀+LJN+6/2 ֊٪pb(Ru.cYZ#06 /TOD_]u2(xӵJa5\T!&7m[ndDeb#~C=|M6*L::::мyڵo7eꔲ޺4o`08ps.u sc5o<::z츱_{:mR+YO673)_8S2$"LۯXG˗/'Nحkd, {"+Q$馛njٲeЖ>}۵m_j[F5lА1FY|ytttvvvlLl-.#'h m6klϾ=ǎww?.XnEQVZT9iӦgϞMxg~"R BÇ^svv6"VZ}n~-aTv.oL|̖?tMe<0׭|{_zчy:wܚ_`t钘Xj c=wnצe`oyޞ={"A0a­ܚT%)tR=;>򟖫Ls @9e#rh4sΥ+|iӦuѣ ιLOpXBZxMaJH /~5j2,KTTTBbB0p 1-pbA^zZugD)Bh9AظXpٳg6``ɇޣ{U֬[s֭[ F#Bʌ1XĂ(G"TnA 9]ucݬYU+k^͉0’VNy]#ܩ1$h4kn3gN3^rm-[曣F[n5Z lyql27oּI&U8}G~twhc'ݲyw,I͚7o\Cf͞h"hzz5k??vuf`ڵ ϟ?_J5$WNXiYuԭU֘qc6n(or| 7K,9g왳,X Rp87k^jN]:EDG;ڴaSn=._:w\o}9׬ _|b;ƍ׾m>xYY+^?񋉻v€7,y^g333SNS[LoY0A Ss>7msr97o޿w/KHH8uT玝tҵk5רˊ_;:y#GtW^}3C^ճWɇ3޾c?|y۝W)Ҧ͛RRR8eⰸa'?n|\Bܦ-n7^cPesƎ{n|׮Y۶}~wT'}sh6m{]qp$("ݷ_I= /h_ p=ZbujO>*s% w}߲֭eN:;v۶m;p#G6nX{g0B6B~A]jѼEʜsPwn۹n M` {G{t쑜\J)[1X)n˛6u37nެe3zWGodex3ި^#ɺ+oݺu"rhߡ?-T`W^|%+'˕:qf;=XfMѢ%眩c\V}g@G~8r攙͚4ܻ3AF⫿oapɉɓORdo՗L8yI:W{F}_jm:4h --1M7RlA r9]:deK]Зrpp`3uΝ۩}'sԱm7|#>1_KII)5<1֡uuM; ',~a˖-%z7߲eKg>nTT2;ؼisR-ʵ^7mݎ;ڶk8m-KbϧfK$Q ljNn΄ӫTjqӼq O=u[GGG1ck9|J믿 J֪U+##cذaeu^(WP^SNj @*2L;v_>e!tι_+LQT%*6*JÏ=l49&)Jk:]:wiԸQRzdO9NUUj@eLe qWF / G3gϜٚW2e*''Wч&3f%H>wz5nz#'iXǧJF8@aʨ}uT e**SeUfԀJiԽ~1™sgDjթ~@pW&QF倜\V.ݺ 1|Ś|l5`#BUUź~EU,0EU?>ʩJT"g 2ׇrf5{!󿚯JɻOiݩi6kT5IE3Ǎ x(2eU2_UT<^Rf93/ӫxs=*SW}k~[sol}㜯n0;KLYf}0’$}ɇ amӶͭ9qm8Cedy(⿌G "p!)Bh3f:劢]6>>>|bW)))ͳl 7n8xCiӦo߾>+Ɨ҃VxO*03jzr:f̚QV]QoؒS׻U.^z-lcƍQU5?/_UUF'޽{۴mM*,!.K._~Gy9766}Z"j٪Eo k֜YU7⽮ݺZLEQJpFYfV投+lcG8~=rcF:lhtttT Z0 _u{?޴YSs{l| 6kn 刺 6`ӨA#\z 5l)8s&zJu C(AD- ~ccRRRj֬sl޲QFM4]vlLl=h0VT#\L c^լ^N:;u6Ll^zJ7I&;RԭSwʕ֭[l_^t>۶o駟vyݻvjJE,wݘ7ܡ3|CYURVժDjUe4mV[ժ%WKJJX,66qj׳Yl%6.6Nr:b;d2-_A2TVC)USLSB|nlX@Qv_3(Qэ6jڸiVfVu[hոQ5kVNv>-!6oԨQ:+WܺMk\@lUV*"94nҨ~Ĵ4ϟP%Ju/#""*W;A)?WڵsWtttdTd~A~{٣g ƙ-6Mw̙쬬쬜VZ%''n߻w^R~%K}iӺ^vmvv{޽Lfݱs3yo{UU=}+P6m6lؐ.po}ߑc2*%U* ܙ陡^}iϞ=Д'{~wk†G(d荡ol߹B*>џnڤip6u }rO?=j ~hAE/ ) {r\g.alMi?E?رc{цLBԨ^c#k1?zӦMŚl68``zz+^?W_ٽUxY۴Fb{=޷}GyOy0NI#?moZ"sڥo8+^u¿qN.܂`RCݷ!/ ig |I,;QhB@5se@8sƎ~B*Fx^c9/Onz؛"#)SxRB]v[3>^(e]@Ay׵HI ++!%j8 Z+d1 _L8tP*}oojZjݺv}%+A · \ǎ GDFL2cZ݆Q?-ZӪ$Q۷!Eup!%|BHWuyp>}o.!dmuk5[8k8`VZRwF)!__&|>kD7e;s1W>Q@ڱbG~82?/s Y*Uׯwujסw(fܥΝ;ǍvwG۹soOHHYXr>0_a:? |/U0Fp(RUVV-1v'OkמOJJӧ" D8uTjVyiS;v\F #(ҽQCS˺1 ?vm͛6fӚD@4sn2(0RUoi.N̦wުO .z`4[nf{ѹBߗ0ρ1&˲nW1}IoaAm\rJZDT vHtmN>M2H+ N_+*pȺh#Da8Fy0;'/ HusUN\_S4yZ`ႅG~j@-bDi B*][×WڧGgL2?Έc'}9˒{b 0`@fϚU+VYQ &DT-qfJ6[8lvcͥw;R#;0Ǘ?;c,}!t6n7"MjĐ.wt}~_ /첒M(n9 nbS+"ah GVC)|Qr\a%aMpZ䀖$?к-a~eB˿T8y*;kjϮjv9~?d8 Hmo}믿^@^*-h!Eӈ/H[VPۤsХ̚9wWpzȞ={N0QQC^|SZ sCF[n3#/?Uw͚9>Co(IC9:[b& ֚[h(e%{Ez lvۖm[jԐ955I&c|M^"wu::s?w={u;m˕R-'_T <>+c|[-޽z3g1p1Τ-w.fY̖ 6̙; >c[/Kz |}˛7-Z_g:۬{Fxϧ eY 1<#J+ rR={Zݻnݺ~`TZYn>>Y@M0M6tuZVݑFZ]c%ՇRf 6pU[WD )zy U`fK2i'hh'9qmed]52^4_G'rJH6x*2jժs菚5cNRy|n0Z!T,)TaJ1a#zOu5jTA݀(V0 3SZ@߾K_"/ * S..x7n'|욗F(څJCAy"q /S Z$ɡZ[ے7L^tNjk/ i@frGlY֯RȜ"38C\wCBΡkbk=oE DX㒪)Uo85bK0Ĵ~Wց+rBgA̽Up8Sr?R-} sr*+Uzce 8`Ş{kȊ2QL&TyРAQQ,\p)3fΠ+ (ZFDDFZ W &&~12:bveW?* +иqE(bNfYM*S`06j^?%ԪEEMh|ҥzY;;e]XRPR5j|L|FvFfz&L&npQ2p"/NEx,f2مc1 zbhGOڛՎ9Ponۜ>Uحj:\Qf1g[H-R%tFMvUVy~?Q6\n xy"@TRs"@a׬Y͜9n1Ȃϝ?7jԧ(]L|,A;&)>1^T9si֩\qcy^pX֋QZ/X'@,1S5ܻ{:}?H~^5zhEQn=̓l׶ݻ*pM:%t}ץSXӊ+\c(h4RFq!:zxTZؐaрݻw8@<ց!55m挧3 4z!qVvlmִb 3C'*lv[;-ɓ'7'(:mooQ= ]P(-! \fs豘 ClXv-saq1jdh{Yo׫Sf-fqzlY;0|{OG}IN2uǞxlI 6-]v}6n.~kn钥 0`gc:J/nh-aooPޣ`hӶMxwp@Zݽ{h6pxsS~1n81VP+- +psN2V?-"3O>eΞ}`Ѝ $L%6]0%o|O } CYVxB(VU}4MHp_I'Yf %*!*Mٛw}o}^JyB) cdg7f'UcBKω|fQSsOj`` oDP1C8 @nQ-"S.Q",˙3CZjZYD"H ȁ*IU0YV3)Qac#L>}^Zzr @bbrr5KNNJBKΜ;Mzr⯦M۰z L B37wo;=7ad6hnH(D"T$EFEz\P-J$Ȳ%L0D1MOKOIN!"9w\U:l >KX+6fY,g8 Z*фIN7cFx-5Q eۻb4o֜nVڰ~/~ 1f옶۷1֬Q᣿_j;p] ۀutdI-%=t($TJ2"e*mean߲}A1!Ŋ~iBgΜΆ>NBի_2kgשsonLd5G*6J0yy|ɭ7ߚR-%Үl<B]/@%V\Y' c +/}3N:)EʩE[0;:7f>bXU*400AC,od"2ė{h pB249&h@`mљ.KE+XĹ\Y-6 $;'`5$Le ;+$'\-/'VJlҨIvvVbaeOF!*Ǯ]A{PXsO10%@b2*|Wfry\A|~r(Pg~mM ~wn(GG! -Lf 2c&h6fed-f٨wh13J3P%#3snXoh~Cɾ"cD%8kNvD8$98|﫜\+'mO,[Ҷm۹VKַo_Q*sDr*S!ܭi }4wfMΕW"…p_'c~WEU"xsrƛK!8@Ux^ '*'UݰvJ/|g J3HPrФ\g.T_2 @5@"S٧aD+UjN:ճg>nsN=RVR{9pZR>>WÕ" cgzv9/s=/)>G0 vT\(|c4S}=x6!|oEoˆ;f͚ycV.ڋ8ϝ7~̄Νl&~X=G@Q0"ڧ|T}O@ ,u@qzx!Ct`[.I`ZPb7 #&3&3O"0;0`g 83BɉɩI&"k =قuŔ҃/\ARx~{o"C4F GO4zxs޺M떭Zʊ GLÇs)U zFY5Ν;ZPQՉ4bP)Spdg|3`t/ -)8T(vz$iBj&dy9G̅(*J1S,̴jX5/GfWq߂b?ob^76L@(,nH[c *}ATUw;N8@9Ւ4pef* 9U-v` *H!$rTv]l{aw(p4dȸѣO?u fOTNJb 5ǎWƎ3R;QՂf$,$S3d6 D# ”hG4Ƙ2W>/!!]*ҳހd3|>)a)"AG٢8 wB.zիUs8N5t!2Zˬ4ADA4i2kCGƟ\xwgϞݥSؘeKNM+))֛^(yc1xhTY5{,+WӫOb|b ۿ8ʐn*L+@0anyw"3lU `.lx33+ G1G r qPgv奷^\rᨅU>GG~5r cB0XVs1¢I4I&(+7Kb$P(D% x^EV22##"p%{dxTgb5ᔫ3'4ӻt$i s^:,j" E6BA %@Z]4~?#;8`0B&d *\!;'[D$@1*WM9;Q4͞|UYebŤbuRD}Ezᇆ9 n}󫯿*]v;:tOxo瓧Op뭷~:S, \tjFhb'a>RUDyn8G{ǂU$? Շ n}E}>d$A{id, ˆ3^Z$0WlTllTu߿왳 q= /+ȮD=4&:՗^]~K~ݺuuӿx"ArE.`o!pFF`[ѺoAh#^Ɓ۶>o6 <*f%/I!~gq',#"#(w҆vV@΁z_`."\ c0DCzFmצ],&DPDLDlppD:!ln@8Yl3UK W|DҀѓOTn$@gfHԢ]-K%B4lח1F)-.pJ1BD0Ju#T -Cx U1s"n@0kߵb j^8 }mhhbiq̅ &, WG+(qa ^.ttMK)秔 |3nۋ~DQ+b.Btt4\]X8߁_HX7I'Ԃ슭b8ڵkK[H 4iugsO:P4*W(2K~p~C %QrxX_T( _M,/l\u XaV]sFb0Gr>9rDذuٳ7sXXtIzz:DEEd_:, b+((6|c*BPaáguԱCENWWnaǣQJ{ݢE3Ά SU)-ǰbRX-zjn0%>f&9 S'a-9TZ&;S|N?mPS%s`ڨ+zҴzZ <칳VUg3:*XK. |2eQ` JŠfj@ILE;fdkʆ:dn Xx#sqqzmy, ~3T-D4m4w}'.2KMYS˯v$iWU7}޵͛;\ ]^Wc\ Ν;Ԯs3SP (˛dŀL=q3'/qSNc 1T>Erg]:;9*d9p7YESGTJ}~q(`mM9T "YPN=0{|rY_ʧ>Mz%i "S'I ĐbpYc92w$$a3~x M6_>Ef͚1K[ⶼ8Yg1ao m9r8g|ԧ|6f`/O5=%BȊ++^:[n%;+ޗr@fLd-H__o=e)Ey};K:V < -m٥@Eʚ5k;ƌ3qP[w9yUpAKп?,ZJKO~ ]k @Bƕ doAxGcbU^+$@ u Tb_905PJU9h;,Gz_S'ZK!$l.v]Lfo pB) !wMRK;)"+j:|谢(l#"k&x횵1nWf-@Z!WXMR;O{:P0gS~cr&|1رcFǚЬ :::pΣc-d#?7o|sQ_3B9N* ebL)vᷱJ!ns ׭_~v*R1r3g ==}mZЊhsN2yE'NQQ> A::s^f] k? n?yo{ZZwѱ]GO f[ cL˛vRQB={]\.Wjj}?ȣ]:wXjժڥO)33S~^$I=;o( eLg:::E30=?v_OP^p=r: pΓ$׮^[&RsNz^zS2Nҵ]z?W:yS'7oּkqwqh /[û^vMa۵m׳G;3;::) ԩC'}(((Px]+6tA[j嬌\Uջ[nw 6Ih;v0M}xvtݷW[>D*UNݺu+'Vg93ttk8kq\3BgΞ=v.UP DۻvSϨ h+m,ؚk&Ms>}empߠ8pSGђ9X?JZN_aUTE}'B7W [n̬'}^WP!&I&ê2u\>w_Zaea*?mk66OFEF3rfhK_]6||sϕ3C^7S~KAV6 Ң1x*RQSRRȹ* fZ mEֹ TʬyӲ~::::5!(pќm;={K~MNXvLvnaA22ϥ+z.us%{::::ׂj5?cCZB7ډ?v]w7jب?<~x)vIuw>a]g:z; ! 8pR U!Dyݻusv1#-kk{ӲEK0 - !|WK.Y"Y1#1ir9ȏZnwx!!h6vԅ9g!08xu4?xQJCim( S8HxR=0::::Wҕ?:z1Ƣ ~r'~rӵէ\nW O}'~g|'TUA O@1ƀCǟz|0Ƌ_<#5S|9K-Qq_fO NH'L>˼s 2evKxBZvڏt1ֈx~Ļ*R7{G߸Æ޵{߾}9y{AUV۷'[v._O uN8Y[Xb}23c[ܲU⌱=z90O=,\+~{{_Q_lcMKCw\BS]6PiaSC^0L@efdVN<ъlݼUkmU',nsNJJE~w9sFŜJi\\֛;{s/>MVuㆍMq=n0Ghᢨ(عc~{uttt ]f ?KUr 84rḋ _{GO9[o=?qh<-֜s7EDF߿![gnn./dYYYknժ^C7::::WytT7V?B÷MRgO:ӦO+_XQvv˯moH64Ν6eZTT3\Z}]onuttt1qǟig+˛sݳ{uAUZքx&X3I'W2κvBi),[ygvͿgfgbR8(>.QFgϞ Ƙ@qǥ}7 7Xl TO}B[::::WƘɇ#F~gjlWeJ1`>};q^x~ݺv FwASJ.O &Йgf͞5*'V3j <2m^;d;5jԺuk9 h߾}f`~Yׇ&'%>m۶ 6T7,LTs)IR9{) bccw \]ck~4grTdd9}سgC)6?ZVJb-1b61(y_{hxw96m\z+=!&ii<́ڵmrpUxŊ(Ms^V{#r0ʣ7իW?Scǎ% 4v(~g%ҥK.]B֬YW^{ 2Zr&lRww@i`Ќ7Bh^Z8:7߱c$%%Bn\RJǎ^z_οx(c:xtL4yg5k,5?d %Fe*Yx]wݕR((JHѹl8İR>:G5mtРA?駟>v!d}]zׯC>}|>_pp'Qѹlg))) .ѹv%9OHHRJ9vؾ}06m?5͡ϟj)oѨA67C|N:d2=ܓ _jƸiӦ111%߲e f^GGGGG* hׯ߬Y(5j@ڵkСC^oׯ,_?z~f͚-[ޕo/xBcsն#F([x3f/Z^zջޕw$b,h@ m\[b3SUcE1@ N:i$O)-96Ba(mw9g0sgתUK[ݵ=  C"##C3B,8y"rj ]*+\,BHZppq("::::&Olܴ!80[1$ TU1_/z媕_fy222V\ѫgki<?8*:j̨13?S&MiҸ8;;{鲥]vXY׆^Fk .*)jr ~Vgj ?+gA09s挫5eGD9{"=Έw> r=P㜏7Jrm۷ D% ~wӧLoެf|'{٧;ڸ5 uttttJTKiڴi[h eBdȐǍP 7HJJR(x<6 ByRA)E!ۿc.K$]nݎ*/;^WK+-1r4[k(L<OhYmOel6B(//l6Kdcb_VR)!G:y'#?Y޵{[߿"W{::::W{0 @ϝ;SOTIa ?֯W_^Ӓ&74>c D ܩ{'R2Gdddjܬ n-ncˡCh2-ZhشafL2uF5lڰyZp@Nܰa_eիW'i3 8W_oqC?pɯy|<쾷]g7ljR zvM>M3gw81h ~5s΍|odCxaBRkѹPJqÏzx{ٽ{ @\]UT=ppsvvƐ?_7*kOK׫9G @mzZkժYk:w+&!K@*U1G 4ѦM˖t<#=0Fa U0U8;N?vZ7+/- mzwK+sgϝأ~|cϜ93mƴ{\U^BSo}={yuȉ'Bxnw˖-ǍKhT8_xY cqV%u",G̻Eutyp`=Ӣ١}Z2+rxEQ6_|酗^zN}v"N9uԱcڵme{=f4AEǐ=^~ƍ9˺u>a0|gἅyiH5.2C0$ EQTWnJM^5B]{vҹ9c1@Vr>]:kcb̛3O";SmF~4>.Yd۶m+_|y֭w}ׁ=`EAA>{w-1z7J̮9CgRʨ汏LK/#qc Æڴn#}#A)v՟!/ AzԳUTQbtw˯Z wSN IcvmZp߀+Wר^C׼{&,XgϞSkNHJ靷ߩ*$'%?S?P77V7j_@Jݯ8PJ7jܤq@vM7CaR޻St5qUUzg^xf۷眷o׾CNWѹR <37~Z>w|2cb*0jլٸaI=@vo97d lȖ[ Pfٰ㡬yۋҗ}TiGa6iUBxL4u-?;qřpb xWj׬_a80v{IDAT6hqRw74!D(z::1ʰà4>{p+^±dž[w`~oxHd5 `YQ8kִY3NJ7=JRp(**juspVe=sIIߟA@1R_P0xfCYuῘlQf>zpv7:Wkj t(,5X y5sO_޳J4h[WY`fj"*y۴ik0ZvS:-vҹ AgB /ur_Xfu#+/=SVE aUì 1չJh9)͛5R'6çOoټl%($|ͧS7? AO5Nsqz[OVd2췎e@0ymk'Ooq۱nN37'7>./.6S (2͚4+kmnݺ)j#,6&d2ȵo`K Zu#cݺv?s&M$Vmޝ{뭷d\*!mFQF86 c|ͮABh  $<FA=K9#PaǼxNABHH%7^@ c|[neO+cTBa~TZuG#Ep(|{&~tSgUopMz9csN+~^ץK+{n@^س[wƨ>Rs`54p@J4eRn=4ikp1_Ӳ|822nw.k#Zoo#Ѓ-Yࡃc7p{S&k3rR{SJ ֻ͘W r׿܋cJ]w{.6"c,”S U鐗0` N2+/ g,aUvB1ѯjժ>s3F cƍiܨqc'NXVT -~ c_\?c}z]`%mצ?1 s޹se˶pđ#'=ʨJ`{w3wзj gn Emc3t>c(oN:c?}?qc?ٰ~]]ƍEAgefu]/bTd >pQЯvO>Dk7 ƌ6QwqQlmΙݥ DTVkw{  Eݙs?& |gosZliLLX5xlpY͛TBH555eLL\.8Z#o%Nlw<c=}}{8w~Ç1v!@-SоCsЁC~nݺնuf-uhסk`W0ŋsh׭~];"##Ϝ:qpATj`{퐹!իW?ϩ~%&$"犥+$ J;<{ cleex!Æɓ6l]ۯYwގ HtҦMm۶U\Y5>:mԭ`}!BmG߻,ߒ7D_歛gN)%cF>=|(PBH>:v_.5Y'=N)vƎO(JOm۴=}3/Y騌b_25oRjh`tAvJh߾}]J|S ֬ڴ~})˗/755A. (,0]g)7ѭP-J@jZj],ZRL9]=jJo߽ݹcg''%WMMmpl( SOW@̝e+U637[z}Â-[LYvm2͚6+VV=?i|Zz.(֭SwmmVZRl2qn׮[{H$UV zfpn:GNթ7`,Yx7n޸}ٜٯɕ#ʖ-ۭ[?CժU6m d2L&SSc` <=<6ngSS[׮a$\(ZPXi[== ym-^t]rޖ%-+#<:]^ާeIˍ6 R XoBsS3R#p¢%`ʤ)ƌp~L׬Xoh`WoZZRt˖,y_Nn޲9ѣFS>܅s RSWKHH8v䘫@W^ 'O|^z3͐H$8S`'D*[w @4շ׫W,{iFL~MRjbbbnn~QF~~~gΜ橲e˦f'DGGkiiiiiY ++-Zxή߰ 3 RӧO~Wa-SSS5ttpZlٲeKsD @a綝RA_8|QAx)'z=}T"!loTB ԡmgL* <@uuqvqv+䢩w\n`0"7T*:*"*3 O|!![[ZiPg굦Ʀ^RSS]O5w=oKWH9)Ӆ_[ٳgaaaǏ;v(JO8w_Ř1c<<+WNdAc<g\VŕmEv!H$̵-q Ų%t5JXF6Ys!Bq)>Rq\fL%3zs9<ō:|S짝vf8،fgu 2a@6/ ׮йÆ  9bĎx #F?w~@@ߐ[ɓ'Α7mTSSsY2~\.L ^=zUXaMr8G}O>C)%)X B`@+U_?#G[|"J_)D(YtE5U=sg% \.[nBB?w %#QRb\@)@122b'F T;fJ55@0u&xqZZZСCX???q}!|}}߽{שSgώ?{bblR͟W p>{KX!#(_Ҿ֘S* x ;n޼yKKKЭ[L,nмysسgO/^x)y~Ĉmڴ)_ǁ+ rG_rS9--me`0 9x Ŏ;Gƌ3f̘o6˚ӧOxFcϜ9pgݴIYzWm--۷o߾fNi۶m۶m} FBqqv9qzϧOFF/ތz"\a0icĮ o LJ(PJyV۰СNSbEF1H$*/! xe'A _c1”S(Q"ZB_[¢_yԉ1}/Ĥ[iUGbielCT&ʧYfk֬:ĺNi*4F@)-fnTݽͥsט^qQ"Ruuue[*0W2R--5j޹Zi~[˲Nʎ %,vׄf%P2:x+ zaŠM`02`|!cFiشjhh%77ێ-֬BS~##JHlll~rJW |;o0W0ƙ%RJ{v4o޺C" ʶAbAZʿr1TW.F(=dVf0 |~<&x]N@!ߺ~Go'''ܿT---.)˗xd~9PA+y "ܽyfŋ|ɹs7 [v^P(XBڵm۰I.]ꫫk@bb򺵧B jY]/(۷ZBhҸ=ׇEPTftp'ԾC*qNlJ@ ?v\P< ?vǶc08;ZJ^v=nѹCWSC/[ճ ǒ(0W!kVZ#s~x 8BRTܼi<Bȡ}U~ ԮtoEE @[F55-jLUK2N Zj8-e`0~ x@Щ}Gq=S /?r2@( K+25niEhy@@ҢyKԨ᫣{6s (`,L.Rc55w#J(@PFA|3C uPiE/KwՂPbYˏ<p>ⓧgd0 ,^!6b%;~\UjRD|Slj$8 W)@-j׬M)UBH58/4% 2 UJ(AçM[6f̀3/[RI$]ծK ow#| e@A!92٫zF6%K ; ^E!TVG5jj+7餫'gOixəfL .>Y{"@kkץK ¨eB[o]j:Cx!%%m&ͮ^㈡c bcc1rb$ ^Ed] ~sB=w2΍6]+{!-TRASB> +#1kfn 6F&:۷-9_ѯwo{vױ}Ǵ彪WI8}z9l`0Wa!VVK-9.u R,=s+I(].n>Jzt!8]kc{0֫[׻7[E/PJԮӡvkZXy[6QFFF}^" _[@@%1@pqte`Av* ZX +`4yt|HO@kUy"|cӧOq={Wï[n=+oX޽{9F"L3>((DlǎTB B/"?u~< U _D V|q7BZRJblh\[y|"`ms@ 1Eھv,pȏ3 M7IMґpJ|*W*WiW 888$%{S'[V񯒚9.>ήj0*AL߿?&&RڠA;;nzԩAI$yazj*%c(n}s4M0|Ȱ:܉M.YW(\tUnӠRJ(xuoo1lWgO^]@0~ܔӭBcS;re]v^=].ieej"Kn=f͚o>((hРA-ZHHHCm֬Y֭ @ #^ݽܽ4ݽZJOW/{ %%{]p{ʖ-ܾ};%%UVq!_ ֬QپEm6h۶A۶ +ahPoy_Aj0 mU>̠ Dؽ}W: I~aEߊWeT(ɬJڷmÏZf*=5[a0T\I,B(==}ԩu5228pŋ###۴i\pĉb?Bc)3c׍P@+V ܶyOgT|-A :ȠxjVoedl̮ Ji93KbhhPNSg0P)r%3f̀ٿssߺEB_;w_~:tfeo`\߿NLQϗ  yvwuq&CL"!^v0f`3 J7w=NVW18yBmgݪTB(;G9οwBCڥ!#ƓMգ߾B...V*Q@ r=|FPO)-m{ݺuG]r%A"DGGԥRi= %_G쇮߸W!x/9Ft=܀T;B0xgtxWxx YM \!}WBe`dr<8qbbb tPpjկ]:|pvtHv޹ľ5zn?3>j׮_FKMk (cl[GݹDO"VZNE8-[(9|-=ݒV4%(VVLE\ ]yy^PtRzhNYu Q/dKѫVY)?R}Onw8^EaUkvu#@BC#ejzsW|UR*BVh~;UlԮ TaACm{{}v8̺K`S)!{lL~@k `(\Mkkk/]_~*TW^>}: @`ݺuPNƍ \\\B ԩS٩`_t5i&BC gP]:v!#:uWQh"T BIݜ+y _a (A2(T&) #m\߾}7lҕ+WVZ5Y???y#FFFPJy8NrK[BD<[.xgx* ]3C: $}``}B ѭZr9~~n=#;PJEW sO_oVB) Zucc#/!ov9j.0h#G][ @v5A`Y sBPB~#?0ES D|LZAE /\2cL)Yr~6ǙQF6{P1ȑS֖&a0&/<cTOOD `SSB|J)tjRL|Y___,YZ]]*1Z@^|٩kB6l~lRa .(ۺ;Lⴴ%3\y3ͮT9Ib=5gzٱǦr/,8{(R4 ƹs4e2͛Uojj[(JfƝ yٍ1W[H<jaaѩC&}}}n܌lצ]!sK]0)PŐ)ġҿLam~)]J;t?^ {5jT1/'iU !..FEE-]} @@<-mmwn?PB6/\rmIwwOzMИ)U,#!@Bg<=bݑ/]YV_]R>#߾}Q^ֽB~-V yuj ,i-J9%ZOy㉏g0 6[ׯF(RQQ)Ѵ,K!qwYuD?k{깓fL5n4=PMvcYw2=(+ӨK̙5kyl/F>E,F cOzzRsϟ: cI(6t)vmMX Cy0`@)%4nh˖UկB*'q.4zn'JEڨ̺ѳ^:c8_ILZj Ba gΞ7F ScF]|7_ݭwo?<--]CW x~Zѥ0%aܘc;DsQoASv3[镳v t捃SPW5%j֍pQ?~F;YY\q _4B&y wy;{jjm޼wᚚy&~|˗&t lն̩s !2)'p@2.H$H1a1xķnX`ٴE UP)!w8~n sX559UZ׸J ~qM9JMKMڮ%  W3Mjը)KW [+T @Ԥ^zk@1+cCc (ppܬi:z_ގPbiiyE}H>|$T"z)zY ?ƪf[IBu ;w%sg,.gt(@i= [>(>܋{Uj׵f֭(r4% Kг{OJ(!ICGsY'p ._%NZLJмQ>gϟ zrT*JN:ypR⩳7nI$yu8> 9YP(ӧO {= z_~K 9sd '6f>v)9%%G/c^VXrjjVծRG$ %T\1pJZj]>蘕6(is'aTp h ?2L~W!Dڹ+bwZWS/++K7mys0%&%Эj^ɥퟲԒ8A)v;'$&%95s@Wd@! q1BWyeN:L9Ś*j:1Crk+O->}^Ġo޽U{9!acׯX1'~1}x<Ƭ"!W`S`mig5td@};l\೽Iɝ 522g{ɏ~;si㦚y2%BR2PF9 HS>!Q!W(u;OB_8)$%'͘=#Li\QJ4hP޻< 6ox@<͜1&/' )+U޻oOryFDyF'x$AY:A@S M>C 4m[n }cyfϙ៿=[?pmOޔfTyq̋b0T"vN2* jբiBsi稧|X>^>>3[QJٺ5~<~]ztyWiPbYR&Mb7KB 4~hk6!#'>,y~3S;ky7J[4|Xz
    S)*V|xoQc)PbqW?ĥ&VO.SN2 i-XUL1]aP(VjbP |b%󼖦o&|LMĀ^$}<s+J)(x_~x:VkO۰ef"ѐQҀ@_M%@MQS^DHII9} 8 Fa!DCM]":wh={ׯB*vv-K/EJu O{2o_R^~}X·*Hm8_#Ĺ;,\3f,8At?x ʗ7qĒSu-(TGn:g/Qhe/jP HHJھ8@ї/=tT.QJKp.HSSCoKy€ҒX%6v)e$6`1 j=x8RT,#ZPbme3s>> jijݴo@)f^֚E!W\Jҕ+䭣/Pd-Fc*U;wnXjS#c'5PA_OO5M7qėS4>;SAW[g o߿[cݚuwm!zu~斣,5QFUAPOɟtٹes1A`SR珟f6j uuR*%%Ҫ_={e|Iit M69~𨢆enS!8|`19E AvO>۷/BXb6lJ_dIbb=g&H"Z% @O@qdڬ隧P5>V ?vb9 7vx8N;滑 '}<+yq wgw-M-e*~CR-i[3{mO#Fo _}_S﬘q~A֋tws#r[Kp8=wW-3[ FޒjժEFFbO:~z ?BȚ4h9fLgC}+=ƦI8q3g#-d >93%g%d*rݸyC>vCWD&V?뗜p f1{֬M܎%Z5V:oe7kkA dyYJ$] 3a#@!.=5'8[ЧH(2Y *<|9k9K0 E<|\Reݩg`D U #_~̘1ݛ3gΰaSN7oZJ[[vHpw+٩|>y~h8O+9sڕCh@ū3B/]0oyYʶ.;/MNZ;@'exdloOwa,W(]vE)#@PR;ժȤ2k?[tsdʕ <n߹mcmkh`<ԿF_uJ] VjkV|B2 =zbf>b F綜߈q޽A>$qn3( Ϸb0BJRV^ݥK۷>" aeY_ Bj = HPlܴi<ϳ\ҴISRN۷۱c!;5k떭lmZϤw0t^@Qz k@fMʝ*cdCRJ=dgfNk+~/,t%ƌ˓EGk>O{_SFF/)$d_3̓M̒HJ53w98yի>VfMIϠjhWXIY{P]D)y~x>u5CC #8.-=o'QBѭdk"~;v8<{{hԴYXTE:)A&q11(BַoUVP͐%.c;=rt[[~J;6j(`t}_@},)k~n@jjjzZzZן%ٮwﶽ{޽U}g~o>!!!55'냿J$D"J)ҕ+U~ơC5q>kKwwAx!ϟ>gS~lRg6?~\̮;x>'  YniAAexYf [OКC8T/++~D[9 y D3 4i4F|84x1&F?sy3+&~r,Kq PJ!ԲU6M=fI;wo{zx~sZB[9 ~ʤRɅ C}444 ݺMXj_C(kzc $SNl <͛Q/t*Vܶxb<~5"VyC}6ӎ Yf}XPHٴrdᓦLMUcO6Z?jy;%*1"@VS/.qܴ}KhKM9yߘBx-aY@EV&,8S\1 a$82j&K&Ա+F y*1Ƙv1i "9 w@ \}CƖ,av;;xX_0__fj?xnjjSXd0R65 ࿆`$225ەJT?iʤ?( =+!N"Yfs&7֒j_)E[x{._jBr}wGk_PCBX旗g^*L!TѾ(QkC(y %y'yb {w'O_L/XiZn0*Ǜ.w֥U7{ ׫ow:,y󁝝5zl2޽w//Y`'ׂիgn+U~+# ڽcLVhU@ DؼnciE%0ٵylZm;N[~߿O M8c=iJeqͽw/_"zfs)B/^>c__vje|zre=zF~f B(5-q{RzaƵ-C=~8ߗ=8 4 $ O#vo0>ڥj.cPUsgQwUIEUسw*U+f㇨ȏGSJ;zvWMe0TxGGRJEDDd}˷Ա f֢K TԈ|]/E8ɋG|Z(Zyꔩ{X:c!Px6-\H 98c|_6;ɓ?9Bf\+~ٳ.}Qqsŕj7v޼MS&uu #(\g&XI9)Pi]:u·H /HSq*!rsf[r_С˽{8qeC:3g,9sƌj'R{zz֬Y3Ņ@7d^0044m3ƛh!@.S'R*[nzd"#CuSREh'GrOu礒ɣH%K'ʉGz$|JXɻ?޹Kz zYX޽5n7KťݸV \2?7OqsuvҥOambhhOkW}aw:Vٽ_J떭454O\٤D9Sz҃SƛPJŊJi玝k֭ZX8ºk5j2*Bkjj@f͒bbbn߾=gΜҥKCe1mQkN}GoB)YyӎkN ﮎX=;DৡM#аACYGoH1}I݁!֫of-|ȤO*[c&OۻWhΟDtRScݏ«W##?:99>k \HCݾu+@;qX;22&2*F  yA+bq̙;ѵHջt]#{zkq" q$IqC}/_ɵk'$$&$~YHȿJwmm4NA6hg(8kݬY.\Y.$$dG@%I%{~mhX(B8.Ov]pFo5~z٥@nm:i°ssw-4ST[8vN(4pP&׫k<#8ݧOnlqO'gr>4! 2~u/0R(C&' =BW[bbdp]{vu[r^? Abb╫WPJx155ikAJFM+@8x/qv*ժ}znFj3Vuf򕥝Jwԣ{ntdb}gE_`׳gϿvG3=9;MJRRҼ!x+f1޸񰃽anrs獟b8ZJxPJ `$wmڨi_D]~mﴥO K9%4yj2|LlUyWTbr66K9rssVo5{8u͟֋ -a[ڹ<nzY==ʋ7F޹<;\1cf98::df{V\\\hyGo(B.ӱ7F832Ɋ{dO%@mtJJ=xh|BB.CLAݣײe_ğgN8U ٺ?TFϚ(^8w^;}$Ƙ܋藕˼~Eax I]ݸq|Yr?qGA6ڻX0ٳW.Dկ[?f !FO<pMc۞Pa"&YΟ5CMڳ}7rۍP"];;yCNڻ}@׭=Qt?@ i۪c:<ŀ0KOwع '_ts M|a$FvDFFj9)Ќ|VZ̧7_v(֩Uk޶pMa>ZKDb5BϦ=92}|&XzT*!A.((rTo9YztNHޤ Dٽ׬0ḓ=z @+ݻa8*R" c;Ny5DtB.>nL]]rsB+ʕ){=vpOoӥz(&>:{k`%Ɍ3F+Vn7yL`GHdIÜs?Ci߶ݒ%8ɴikӻ"]fͯD0M裡~b֚zzmtMxq闯_1fZtU.(~$?p4"⭗W] USv?k/oxO}%o{_zIz}WmH]m7̀'>}Ӭ6qZzZZzZf!DG[5 4<<z쨋Zw0$K_sOBH|+U7v I/YQin2wy3!K7Neο'z6{`~3:5c|(ԚS(T@5vmf.Fm̽OYrܑK7O Z^x6¹!AP4H{~cCf*C1RJڷ화dkmKjY"ػo7!D) &uTu':.?nÞJjՖZF^Ů;v?T+u5||'<佊ǽn6a!Dk=ty.O PT6$_kf7`gM+YLe]ܮ^ S]ֽBJZ:#툱xߧj|5>ʠk ӧIe>- F~P$B~v69 Ch <_ٿreE[[(6){ϟ,\dK6Oi?apU$!4sdqb&¨Y lMNIiѤyFPGtxn4 5>~+Vnբg;v,(޶}si?utKPPe؄s6={}M>IB+Vz^!5{>]P$.(5R*W';$ZfmA[#^_%dQFWyZ j)@H"f{DLXfUD*`VA8eC(quq sMJ8;i}U_iǏ_P{vdL_SRBO,,$]sg wEmeitVj֐Un%LJO=GTs?l$ (Y"OdQɱ%b3!-Zkl )!7lѣkk{L`_*&s|n}J9:BA(iY0a1"'@0nR$!p|K)PJ /TphVgs@-JF 6*nhX\lJExh-f/ w#^ ڶhE BU<Zn}nt˗%&%D<~R_C)Zk"-MyGS'O\sޣEN t VB!i)S1h`ҸI>ݛn``Q |ݣkL9k 5f0bȨHBJ(ҪeB=~߃WR *Q@)R. xշwvn:19*潑ٹ*hJ) pws~X>n*) y_|pu}99VA&ӗ-ILJT&-]}$X[Y\F?8!RP i۲T*εVs=|xѣÏ~pH5/ZCSr2)V=vɫtY:;dV!GMY25V#j\\2D*~_?*Q Dܰ>Jf?[oϜ=}x;r%T ”ISeQD(Wlok_ZE.mtA0™@b֭Z/^:+wn*;44400Pزeˤ_l͛#9cjhhZXX $$U/n~x/44?xȨK y꾋L8v/@$9S9rr:v<\Go_jұr~}1I0%ŋ+`µ|Y;WWmtyz kYSJ^sQnbɕbŊ>})S>|صk5k~׮]۴iS>0[YPB7m֥kͪXY͛~  8~i )]5Y>oBI- KݛSV7( 28Nnn.j%=344ZdW-tu =j ~zE&OYmUc0\ ]\\cccyfo[V-;;+#eˁpڶm5n)W iI L>Kc2)M,TSK6^9z!$Ry떘w?'| ԭ_#B)Ro^ uww۲$B!]cb0"FRWdI\n] =)SUV BG-yth? };ݭG٫9o1CO:x@P93B+KK6zq}?~JOJ BȳX%K'(BƏׯ'677+:Ϡk<~ ܠ5+Waf0&wիWK" stYH$D*uLMM],%NQfB)g~sEoWVQ[462ں{'P vlܽ'/8*-ְ} <:ablTm'y,,A6mܨvh,,,x^aNṞO h/^[  4H.g'?֍[G1NKO_~۷oT/ , R: .l83ՋwÚ4\8|zr|nժg^ hh URZ/^S_T Sܢx\;g0L~ٲe<ϯYfϞ={n]]ݬd_|ڵkgϞ-x+{:3ݪe5ݻeM&Yonwo*WC)%DWݻU=zQAd0@!p  1<ٽ{d>2eʔAed*$Bbc?_0iaJ>REK[ڳg>O(,J;]!Ŀ;ڎ7reN>-,ѿw w#r.VSSO}?naaaaaCW0߽#TDg_f%Dftl_X {neig}R^mlmXl@9# Rs~&ME~ڑnOqqK&Zob=҆%կĬ7imt !͘@4ɕM0B!رcw(kjjjijiigihhBJr3~PXVR+/= KOܡs#%NGĵkV>4rĈ" !B]XnQp7Z)L"Q×dKćާſWO~蘚 *'w7w^`q 0J9!dL/PQJff!1LxwxkdR_vBڶn:F2w !`0C!1)11)11%1151151U*Wt7@R6-)Es`*ʻbz[`.7S oJ zQ_~1PJA+﫽hM;ֈ- Q88b)P\ٳ ߇ nnn֭~t +xvZFRX TGKGMW1(0]g0 ƟqB ;9/}gb`0 jCRJ)͌~*E3 Qa{<͠j<+D ;FsX*?2L" BH K"jլ)Q`<(˗mZf,TFj*G P{SJ Lܻ̝; A9X!QĠweKCFYgܹ+;Ue?`}_HB RG)X*1FGXZZ{7;q C FQ <(Ab:˖='P޳Ξn.gO?}l 0F@555;u;B 8p`ʕ͇} C 5xFт]utϚ*`Vu?d݆ z)_[؉xSS2[ mT9Sw<OlvRjaQ,!`o|1reʖrtU>@ ޶kdz Ξ_aFM`pO>ԡQjK'Lq0BbmlmRڢY/ AA](#3VsB-+||Tgmc#*g jjjvׯ߫^>)l"|/j& #իW/_ŋ[[[b/^~Zl!BJ}9c|֍Vw!i@L716Ϊ!qn\[sL urS` JT 8yCxzzfq QWٱ[i#nVB۽:A)԰ ر m6U6eW8JhGv李gضիB(#ЛÜe0J&WO9sÇ_vrpp[ |$$$dl0wq7K@]MI3&620$_~c;}+VVۢ.Ծ+_r={.xzr >uˍ@quut/_/_UW*`~Bu  #FOݽ+cR9+++!;rA*ɔ D6m[~?f4KUS3Ԙ3E\ |.]6oܮ] &DFF0I&W\~۷o{xx̚5R*H B1cG[\|_КP f\ڲIs PKۑ Dk^Yjw'NUϜ:?@qqwכ2)M(\vG\,S8ϰ"X[x8qN){;;qf/W!К5j\]BD>cCC ܬY t555u`0 5ʃpBjնnZNZ*""ifڵuԩ[n͚5˕+G)}G :"} OAoS^>$S_F4y~(eDcTNцNR͢w`Nn|Ԓm N2g\t-VJTvr>%J>x )Ƞpw=O@Bt:u@qVk{ߺu+!!A*f>ңG-[&$$p{DuΝ;K_ =]])%j+ 1u5ɻE^(קY5f@tuu,BC^x[KK{ hjj+[Gn+@)m԰Ky4{֞~m?-MMw2/^gΟs`06>Ep/_|s=%d2eB˱L&djjjʿp#(]ʩ1GMԦI^ HNPU*253[O޴qS9E[ >m2Tq?0cD²cR9VQ X*n޼^󼥥 ylٲI$ZZZZZZ1b-^b5B={,A7BwÿC͛jbԴԴty1?N'NL6Iy͍) yrׯo?g'Vb?Rjccsie`k׮"(qYN2))O>/_|䉚7޹s'cƌt\*<W6tНwD> i_UJ"+e%ߺ2bj8s'tr @4^3*l+|%ߺu똘%Jܹu9z˞={FDD?~{u\.UE}-#puquuqMOKW52!)aŊcJOԭS]eǙcT(_>1)VN5Q:R"6K(RdWwܙՃYF֭ˑgΜQb]{w9xyxf$p1 5 \!SkѪ5}CBy+@F@P f{dW9lٲҥKY'{|={*+~9!9w!;GmZ_DM]cj|i?y ͩ)R`0~H&(ϟ?ܸq?ӪU+\R,rޯ_͛7hBه7/\ܽkʋzqqܔڵj߾&,,iWc̤`0 J1cFZl֭-&Mt޽TP!..nÆ ;w,%B*UԧOeB}WnX,A 4O_F#T֏+onm׸Gxmv` r%۷W({knҥlԴ!$JRS2W !?S﫮RВ;%P?Rlӧ%t8be/``0An btҥK.?|ܹsrel^RF7nl`0 ՟@)x[-ً_|'Pݽj*DU3!p\zzvz0 F "j|6Mncgݵg 2<.3IDATWbqTWN`1LJ ښZgL+*V*JLN|B(KUD)(fald4`bQ TPJE 9ڵ닗ͨTɋERSdbc_ce[`0&Bcك!\ާ|ēԶ'ľ|1UBl /QxظecfV$.:_Ek+5j8l5< `(šx2 7s~ժUߴ"dG?޾}{MMAzKe(P`FQ!$ݛ3fժU%$$L6SNFFFl=H$IIIqqqh!) f63 :q:ʶ?+gΜIJJBQJWc쿙e1 &zyye&000--MH$ׯ? + 4~BP(Sp͖ʶ-W \./p^@?`+Ge`0բyӧaaa۷o?w\Cm۶s^pᇯ=qDjjo !񾛙+ۄ?RZ,gB7-j֬Y˖-]\\( 3gν{ PJr̙39=wa~mkkl+rڬYmşxbe' 4}N̂mşP@?$ +oڴ={zu%JiCBB2%@366;tݺuիWaQ۬){333333e[c0UVUB͚5mŸPlYec444|}}mşP@?$ {crMy͛7SǏgƍ?Ab0 H$_$&%P PcCσv `07:|(==H$7oЏg`0 r?{a `=(6lӓa2`0 E BHOK(B(M̧O~L Pm"r BB:%+W^m+ls~!YRJRiŕmڏyŋ%KTSS/^eccj}6###ɱfZ<{LL%| ߷XT111 ԲVSBBBB iii)j;cVҀxF~,rq˖/[vkjhRJTw Cqwws玲- QQQYQ697nذaѣΜ9ͳaaa6m[p˗֭[~ôiӲ>P(|e d;;;*[[-Z{.6lh۶mz[+sq ,W\hhh#G:vvv6mR/-Zuɬܺukڵ۲eMf0~@@ n ;v6bXbJ"^*oܸ[nk׮jjeʔQi?EtN:?*ʕ+ׯ_?|pOxxxV"""-[lٲd}*jxbnF R4S7jԨiӦmL3k.)ٳgY0fjӦɓ'ʼnѣGϘ1VZk׮}۶m{1rfϞ=uT8.00M6vkOiӦf9 B$AO5xر-ZذaXΝ;ZzڵkBf $tIن3Bƒ)>u4yʕ+**gϞE]z5jTzpWjUտX̘1#88sׯ_GDD_^)аaCdݻ+f͚-[y?ܠlٲ"oߞ5kօ r({-[}mD2zh??Ǐ++W(Q"/^d-.ٱcG=......֫WիGFFx5urr޽f-m;+޼}qN =}4JNlj 6\r/_xWu333GG͛7!ҵG( rrvv+ uUOMJJJ\5jT```TT-U_u5D{YXXBW Ư< wocc~z)*" "?V8p̙3߬+}ٻw3mE~F.Yn3gL0AVwϜ9͛7ߜB~,5d2eŋmO9}t@@Azݻw3g(X9F4yZrjrbrbOJZJ"]j^ ݰa C|СC?~b WWWeەđرm_p… q&M^1,`ĉ:::u-[lEf*W,P(`NNN֛7oVL8̙3$<<|~~~ula)AZ~~~6!g8::* ~ҥu뺹=~I٦@mEΐdr\"PJ###+TPF'O֪UK٦GTTTʕgΜ9rȬ]`lllժU[lk׮WZrJBgϞk֬INN޸qx\>tuuG1Z\\\Օm#]0o޼9sLBbFqB(`wuPɌH߳gOǎ7nlr?|`jjlCr׍rttr*L#[ ƍgUEWƏ_>+uuqqy rѣG}]r尰gg… 2y֭U46122R PĔğ<_ʹkn޽С۷v244Ti?%..nڴigϞ _bz7o`ժUOV([vttTҸq1M65iDV7n(>}P(ʕ+׺ukBȰa2ݹs… 6&Mjmm}OB1sLLC ݻw֭(wiԨ֭[ko޼˗QFs t֭tp+WYbI8gg+{ڵk{ͼm]jX&KL2^^^ cmm[֨QCن3!. RDì_N'Nyׯ_R]Ç!!!vy+VT]?СCׯ .Y]jԨ1w\ݻw{͛'~ƍ7n@-Zn-ϟeZ\ ~bǏNqƉ߫WCSzu)=AHII2eJ}}}E?x`D֓'O۫B㖫Wf~H`Ŋ+VSpttJf0 C$Ijj=B,֝1&1_{gű-ff@Ev]Q#nFcw5jY&FoF3q7 PQ6E@az4#!I$IOUuNuUX#5ٱoq3SLvY X  BJyxЍ7Z->cc[W_ر =hmm0]<\²|Tdԯ !lGlHBly;v< cJ !(*)jwl6'$$?y7O ,Yr cBpsvuFY\ih~MiuŅ033"  (iZ$)\/++ۺy+cdDb-I$)i)"!DH$ P$$I<ID-dMfABHfBHHIQIEmE"p]$>t8\Bޔyܼy$&&&((H*R$Emj[s}h&!foPB(e{HB$$a+jɂ9ek$I!l펢(VYmh6ԢmigZCI\tiiy)EQE>/xZh" H $ .kk ?>lFl$Ia.]o[e"3Dib5_HD ekUc\YQozxg:hiEоNR@qۈa-Bh *XR5bĈU+V^zAMM۳o飧fc֝<|uigx9rHth¥ kk몍-sߞk5nKv7X"ԿתցӨo=oμ5k֨Ԫ^{mM~~a!avMI{{AأGgpn4iRXdحy/}5kjkf͚=v~{^ 0/Rߨ8_쪱 ƸJ̙3JrСiN?Uʗ_MymJڙ;yw2[S٫/w;y5tA,0;'/󍟯߰>++ԉSs=bݪu9QaQ/~ s=i˗ 7v\thtrbWZ N֝~tȱTqeJJJ86m#=;Bj['Ʉ'<;ѣGu0a9z$--jΜ9W~k+/oeނ$2yиX۶m;s cf8錉IܞSӸgRDl^xe ȹC be%e.N.Ç &tvc yhf2hްvCMyMeieCCCv^G?z*o߾}y9y;عÅ׮>x`q'… اʼ7$gݚumk$A2fc};aˆ/w~-uJd21% ooݽuքN9Ř jk}Ae]zo{QQQgY63#sП>;rnnlޙs{-++ 7~ERϏMX/p%K}2~{`Sw䝵MMM̃Κ5K =}t֭MmJݟ:l0ٳjŪiIo8aKEyiÃ,$$<䍩oq[biE1/ ҬG<7"00ɉ119r*|d4)M>}`c ޾ !Ϝ=sysJ+-}S<C,|bL(& blaL *†Χ:{j5&!,,lkID" ;aE+XP!@UU`Po߼ݿ_L`IǍ'm *(DH}^D %MzfZJ /`ER¶!cyD,ˊD"b?+C8X(b \?i$EQyw2K^r8rg cٓK^,zlu݂$Ws].!!vժU;vx `ʘ77}`0rbC D"q@*.Xn $0f@T42%RIsk38kGPDڭ)RZ L(d)N "h}v &N8bĈ.@`0f0j>IXr9oC77F3e%1o( $c::9^zSg,**,+<C 1bVvվ:U!B~˳bbLf#,@vD"9uԾ,^RV^oMQƸw) u#^8q=eK,$llh$,4Msw'f1Ƹp~QqjjJ7቟'={VR4`XK8;|aqap࿿ Q(b45\r- l((( CM7;UxF^!^8Y..{%(zVc+P"Qy;s`a͌9Jƃ{*+*̙'E"s9::FEE41 tT8nܺbTUW98 {vCGeN2X"w`lG"?a ̏?9|įt뷒b2/?aN͜=S,l13'O\]EtmI%8|cwu=7C1MƺFvZ-"ϯN+'NtSTjD,A$h*T"(24<ۻF&yx cSY߿oz;&&G"J=5r<,,"77a#F 1–ĤDwwwVʤWĴ8[h,-) ;vX,BEFDb$#"|͆fwwwJD 2f44BBB;v~+r9JzDDMAhO.K 9ɼ}=<<<==5uuu2gVۻwQ"bdYv䈑)ݫwXX u pѣGD"A=$SRR ]]^|EV˾~_Z !xj$2 +;7TᬘDgk׫ʫ6- ե~/إK "DZP^^5>>>2'YPHB@u oIiIeyMPIII|scnjjj7oeUe7PVKJCBzɘ???F- ]%b Vc`2Ґm4h=[L&KOOok0p5 !PպvCߤ0`N0 999z{iZP !F8QAOZu^}]KE@"ttohhpUziRixDD,q9Au.!_]@iyiyyX" _x_뫍 'H|PHPOd:::LrKX\0w36mFO. dWQQnɓ& CO:`Ӫk~Jv]@|,NV!|8~kQF-\W^ϵ;_je<#v$p*-ʴ]Ӽڔ̟CX>v/lģmKDmz[ c֠+iWqc F1uhVQl?Gڂ744\vg{;a%^_h[,/7)Rzl^dgΞٻo+7na<x*͋bɟyؖ+Wxl=-ƁpW/x1scxXEğ,'! O2cOof} _Iع}_9fveݍ)+ دPE=C M'N8vؒK va};iL d'NO;wf=ؕ޻3!k׭~7fVLT{hONk,y^B4y#붻y{5c/;v>܉kSݔn!!/i:""͛3{m\o1fܱ Az5h< VE3YS`'),;vرcBr3?=4z{gI5Wgi|{DRd4!K۱cǎ;vL y{wVcSYPfЗ:j{r/cǎ;vyxLJo]J_W\Ul"Dʝ=5ػw;vرci΁g_Mo, IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph3.png000066400000000000000000002175331222557406400241140ustar00rootroot00000000000000PNG  IHDRzx pHYs  #uIDATxuxGߙ\܈$wwkqhq(AKmRP -i/--Z,Nvgc/G )̬#|?x-Gs+V`` pl ( ￟y1bJ*[m$<'p89 :;;3V`_>cJ>9!s?(+ X!d]uz#/!k{ېSN!41_p8!:9:SV@sfj @9cWQfFF& cV HJVX,>9FyCbV&!ADQD.]D,F Appp:u5 # (##܅s˹?U$D%cR#,BB]tɱeO.Йgt] H*`!|h*|gTҧg_t199z>3p87BIjzD!;w.6.8~+T1YBH:98ըYCѧϜR_q?ƘNLHȿF{c: ddd<}2-5I&BΝ;w/"]]]kרmgWA\z8YjF@M)BرcN$k*U<=vFJRp4А%*F9nr7WظX"k=<R c\\$YV%e% TJŇ WnNn nTafV WgW'G'E|lSH)P#0">0"!|i\S*p816eOq''>h箝ǎ{LQ}B =ǎ?2%8\КZ, khGȲU:Rbˏ1 1B{>_91[Xs_/([mm_y3~9) L3ݖZ羅|-l!`CGB3_׷kR<63̔})y`9|3!μBIII 50`#@Al~B!1hѢiӦ]|9A#aҥ#ye<:9,ܻs/19}*]*-5S+Wܵ}GFFF?d[\r֐q-Y$&.fIe˖MMMiuX(!oHf)**944RJOS3*2Ao;;;_o_F}/䞻-,AAA+V,DEEE1Ƽؘؘ,!8*& bKT *Fe2F\\ ^L!///(2*2### ӣe>>>ZQ2LߴM>U'$$ AAAnnnNN27nʥ+s9Apƍ5k޿@1sNPPh7LK.?~4qqn\#$%% ,Rm_t5%B.O5'{LcYViOKNNPXO>׮^+[,C a$,3YBP 4.豣գ2`~ʔb)XH@8x~{7, !t噳fٵG!.^UG^~y%J} ?쐂 ,]ࡃuֵ-II#FמMW(_wVcɩk7rΗ'OLHHhӮ-Kn0ef[!<AXdKI={tww.(c,~e֭W5&M>zӳYfYJl{EVH)ZpS2u7o|;Cw'g?ȱ#>^>=zgQ1 D%tQ6Sz#O]{v7 SaՄص{WW,$ rj=p8W"HY~;'WyAP-[ bׯ_`EGGm۶-U?~ŋGe+VFQD=ZtYRrR{RG)m۶P SR7ԹSA[v߯p˜1cjժzu9;uj70\`FVZ}:S4bOo̬LJ(СCKJNpx)qq - qrpX,AAAsa1:+HHL˦KW/x==ػ޿{.驩ǎn߾d2hg\lC=~[ZZڄ22- !d7J,k֨9r?r'%)K.-y]d3J*4nxf9=#vmvZN<ٸAW.3`w=~DSOuڵCaa˖.M|2HwG8w\R5jj*J5x;w6jX@pAc bffm[O:>p@1 Yh0=~dɒpppb)0 5ZҿR׮]۽{ۃǎۧOMѹ{dЈёѲI )]7~\u'kK/a ȀJIMfJ7fts:JK~z: \B0wޛ7m2$b&{ۦUS3?QJB߷&>tGټesr\铧u]a" TPͻmGԤԫWZW^&M;ĸ;;7kҬYfu +WrsgNI%l劕qqqN0#5c-I2et:ٳOZrA+j"|9GLw+ޣoujiצ]&-޾-oƕ^Ȑȹ>;VSg;:mҴg~_(V,[0\x5ԨXsҲ\Rj+df=x՗_Q m֨Ɵ7=4qR``/ (g?{0|BZ-\t+:2Ck׭5ΜVޱ왳GO~i!D勗~UV}=v׳APTF#t1"HRȲ,J#J;fL#-,Q_t?ԙS?)NQ 4`2U=y,)eӚkF a,QBD$VELfdf(?Ӓ\De?^&$BIR322=\rz7$ WwW!Fm֬ټFQ;wL( 6lPU3Ɣ;DՙdLe,bɘrp^.}VMd2c>#eYV r||СC 4 cǎ:thHHȑ#W\?e^?w EY3MJmIH5BO)b"b"$[tEB-(JEhʨ'=Gze"3`"ԴnjKF 5LNWBylQ F'c1bZNILQiTPTtkr~XC붭lc\ K}7o\tْKd"Xvv؈# [H@ـ;88::pիe3T2R*QI۷/8s")9)vJTU([xLoob'NرZPO:yKdHd6ajȂZP޿PO䰨0ĀA7wힿo9#PZzbr8|AR)3~A7n4`oX`۹wΡbŊ) 0G OL@xzxTb998)xk899x\j+@)Y毧r1.yfF6bzz'kO\@vww9J gp喒aÆWAKQP=CLc^+l谀yz}hK{)nXpr8΋R:jĨ;v֮VQu:]֭/_|GgvRJǤD%%˖$<><4ܚQz+Fy&;m򟹨fq'M洌4`R>Q?ٙ!#=d6azV4@^M}~-aر$B$Iz,Fol #ojf(pjZj\|ܬOf swwoѼLd29?-}ev’eKը6ik1@`]\qQcyJi3):Lkc]؜dobI G&ߤ-&Z(-+l1{&ںUHJOw([ƣ %{A? 'OhGNg,_ s1>Kw͛7oP! #_Ze@@ 4pkW5iVosj0`(lݾ5˔|r''ǝLOW/d?Ӯö:*ewgY)Wi׆RRR|0 Ba ?<@ NH09CbZA1n!~vjk=QGXH7xS(vA4)iPƘ eˮ#9y,ժTSU/]7w^Mϟ;3欏g-\01)jժU?۷570nBDX/~5z\G3gNpPǤnݺuؑO9 yu>fyqRJFj1HF }&;mǖoѪzTS}n{ݭ[7VC {"]T0w!QU ~s$ݻ[ɎI|Y[}sjfbO\-~`0z) <ń%$!> iہ !4ܭ_C >Qoqq7Y,iR&PZم ⹳fϛie_aiݚIzav`%Í^ U( @6}CٜYӨ7ZWJ0߻R,^2%)E8Z69-Ydgg䴔N'Qc4ji i*Y S)%s dde'n^컺'Fό5zΗ_k:f;!$3٠7$'F().AB2JOOOHL`z777ٜ)VIJg:;FE5z'8RФ$ĐYa aQ~J4%-q1Rܜc>$"i]sS`ܹ}ҽ{5lذk׮͘1˿n? y暟`/Wh08|#3=syS&M{RuI nݸϾrXn}9^]vPlY7^7"T@ cϿ\\\|Z+ne#t]PS.عb]pư眨Xm50AȞq>9zk;-j1d5+J6-`M{ Ta>H$$(@R$bffFrRFZ**#=CEIDG1==$-% T%,& YQ#y >Q))+T}b Kʓ$`GGY{{ϼW1)-"2Ӕ7ꁁ@-a^-PB2ӈL3e K20,[DFШ2:5j HZ*V("Δ3A" L*z^u^^zZj,Ylڂ) 1mtA9t$Zjse:p@ů^zp/55< JK-:e}&L0fLs& q!.E()0ŏ*B7'T^%^7`S@Q[J^CڃM'/TV)2M' b@Ο0,o~Ŋ'NصklVПv@Yd* i*scyn<=e-y\9ڷ?hN=b-$ /\n3嵿h7J?nHR^gΞ] FAA5zk۱Y2?n@42c2`H8 Y7 |{;Y΄K=Oց fɜarKd""1$Q  D* z>>5>=5]%$  Cݻl`Y77("Y^bݎO8yoN9MkJ9|}G#svuV*X5ىuqS02j11l2c12z#jgg0JMMe%ܜdYLˌc%2 a"ހ쐀K = fK/WO q x6٢[Q k!@:"B223===ݿWDIpppv{wM֬YcGM>=4,12( .JisG Ub%d}M0"p$O#r Kf ׌ޠm߁ŕOqP!y K!蔙uܹ%ZRgWJhҥO?Qj5pʕ1"Ӷmwi}_aOn`AR~]p`09ys2e>=9ʱP7;8K S;!^dB)8(}Aemq$ K~Cǿ?}D&4H:V+BQ+<& VMfKNLNOIOJKOKOH 22$>=%0f FJ0defQBLeI6`2a~}ɜK%T7|駁Hl:v^^qy$`8ҹRI*W0zX0p|$ia*(xB)ܽ{r欓 J=4Zsb͜1!2)m)e)rswcYwneyPmvwݻ ?o` _1^~s(#Rvqc9; 6t񷋗,YvyRx^/.:jwɹ{'[V5i˚_ %,jݮeZRL!~xoԥcw%]:={$n@#foLf;#J 4:Xv,)KhA+QIP H@&bQo1YdAe2333͙#AO$b6uzF:eTԼ? !QBftQ,$I d%Fdw9R}^CcN"fj6:1`H BsЙ3II`g4j Zd!1̙#h"&N-g$`DYEZEfQo2''!Xo,FILS3Fyfl#/]=mZZ@iH3c wwxŻ۶m  >ZWO #D F qŞbF@jZܴyƊg$QTec˗wc@C͔f5[/J4gϛSx z=sLch@"NJPkjCqA%E 1BG?źcVwnfh戢(zՎ֞59Va;G;W@`0Z**^w9T6O0!OM7ne)9tw*U4xq2yy%YBormA͘6=Rc..NXf`0huVQR̬h@U;;;;qtd`HNH(X(,VZ'<2<<"^'6t/S3U\Y+[}+_fZ@ަc JȈK$øܹG   $9:61yEJ^U\lF7cqgg&.."2 1ych4*V7/WQ@e< %jF0RdI-`<"`V1()b&9D! !;88HTR4l;D'Rnk`&/dyҴ4FL䇮 NIkM2: x)q5HJ 埾=y @&%-$ (aaBI_eW*`@(PfRYrk"`M61q1gΒrc,۰_%X^|EX|GDSS |٪5>>Y3{S [$ R'Of̜ѷo<ٕk]Z};K,!Lh6D~"",}\n-owXe&Pd fLMOOWK/WA6нJtWy㓒vƄ-\[x*)( 3\]cbb)0Ro4SSS@Ó`@)͵œ6eKbff SSTFH޺Uy3y@ܞ3=dѩiyJj֪s(:t(SLx6fUVv x|vhRmeyo} "B~EQ]Di^v^ jb{}tĈӧO®i.B+UwCo F0?xןg뇜yjYnZT3+J6ZI콮=QaHU 7lܰ1<QFrC6nR&30V>5%Me+UN{vs| [\%%$㛁JR64jV0;c #ܱmGow"x0+<GQ޾s;*2ꍙ< Xdcb^T!{:uXjv>* 8y@ \y$%%%&%>ϥDv;^$H@ᡙ9#F*{ 9%Ye H 3Dȵl6U*Ղ _:_5,dB/p0~1}^8{F!Jխ[7rƍ޵{ mxVSΛp8/ e!++oiuI`ɲ0~P3`F;cllEQ,AxC5s8$B8pBb_lлWo}I5㙥J*Fo~ҕ2yF`{yv=8;Q*xR#|ujx9xp^+VX4Tc>pp8k߷bR*Qp8o9=[NY.Xaz.9!kk% cbrJI$FX&hg̙?J@!#sp8 \L2M7aqc6zKW8;766vG?͚4(i}{Eŋ" v؇@D.90*>epBhWs:uԴqS\nO2DՏk釟*WLd`˅X|?ذACZe 1^ڰ{(W.ӧP@!0 2,A8 g2p^ SƔ1fˋ8y#L3Tj菝 08;?~bA2|իW[hXB111F{A3MI@L@Į=OaehQ@FfFjj'_0ƚ4mH "[>p^.#AI0G^zUIp̩UWiN]aCzN/[jӧjխUNj]Vwnߺui㦄XfffuN 5w= W\Qco݊~Zn?8#3CW~_aηy<F ֜xy Qf71Ao9[ >VzĄwUvr\s8B =E{obZ_t矯YY̶ eNڲyKһgoJ)e,WܐC zJq,`B,>2GVpBԊ6#cܹcg_7c'ٟ&9%k]载 N T64FGSJwn۩j݊}1 /ܽ{W`'˲LdJiI(vz5jļڵj;;;8XRL&c횵_޷Z5kqze^ޏYNNIIKKKNI.S OuFƌSR常nEFE6idؿ  NHH(Y_|^vΎPB)zjrJrX we׹p8 c xyL<+U'Xx B tR5!._8~#sJpeX)g2d"tfMSӦ.[v>hG׭_:(]h$`kT1~x|e˗[߿Do\=ntMz}a(iy2ɓ6mBUZuIy~MWRJNS=p8J)S!C7s:v6d$Kf|8L2RJ)SRSN*V JMwѱCGF͂o:u$2BZjSLupܾaBxe2Y)nn-nܠqjZy]x^_Zȸ8h4:gϞ~z۶mSSSmGv}޽yE0:k+:z@$1F6d@Q#F)*7mԴi,_>l(nպ},32eBgϝ>r4 T] %YfJi Xj5jTlvGrڏV˗gΜrwwիʕ+ L\B͊+BCC+VX=p8EeDeY))2fu_cs}' t%߱00ƦO RZ\@x.RV:vXj\#&#j׮ip8΋EʷzUV ycjTѯo?e~eK=>7lpuES!00UVW\y+WJ(4(Q-|S.XSNs-0͛]M58yI<~Ç7n8󫯾6m'v%˲r 6EB**p8sx{{WN0c_4ׯO_h46mTRtذaڵ+s8NF!d2W@!@-Ve>%z;v()Sԙ/Yݻ @aDityϝ?uI'<, +֮[8e>td"`?PB׮]m+s8Kd-!D)c zG pM`o)CN:ݖys|0dڔiQJ(` ϾOJTuԡnݺS&O!Jpp8/:#|}L?x6l7h"Anz%.D1d+PAd8д ֵJ)D`pbl`)(n1 dF+]keŲPlLlsM:Eܺu #LW7Op8cҼiMf3@0aq9H 'XDDĊ+,`9zj%tgߡ]moڼ鯽1NIIc+V|V^yU+XZ ˿_b>vrϯXBIۖFHd޿DAͿ)mWF55pr!sTի#Fܡ/l}ˆuy;tвBCC[1^l{kV\nwSRSn:|pNgm B!DB|xy(zp?|S0 W.VBo?JN zC*U)qcGzjBB[={ޭo.8Yn]v _YG%صm״ӆ>s;wdg董yʚ,O?[3w^ZzZBBBxDx Q(yŋ;Xjf}kߦq,KWZh'$&4mT&,˝:vpdlׯ_ӯO>=MfC{kАA}A y2&MHN4j3] 1uYIhڬsBmO mѼŢ%VYݿoF թ]hGa|̏f>rxk4nnmLd/I'''NwI{{{o].]5m΀QJW\%Y\O8y{ 233cFRUce4{n1F81)W^|O&2P:B zt۲ietg[/!v<޺Y,plB=Ax&L|g/ JŬ `/~ܱ`2y}*<<<"44*#|[bRk4VJ_g@qެI3{ [F-Rڮm;QLO;͛4ۏ_l;5N;P% xNQQTرsncnY^|+U.eu@888t/W\p^6bOk^(qEKSJ KZ)Mc2.z{<Ω$N8aBDADbY͐+(Ir*H#M^@`(4;==< m@()[O'/8yYN·_&2}ޢY;vl;DuNSM]lN{s2Y~HDě7o}4/Lc.hTn^ż=y(WczNc]ZhTjJfgATjFU  =nt-:=fpJf :l'?o 23fZ P*}hC^57Jiʕ09r=֠^Sw7w6's(`8(>MY4߸qcѽǙgZjyeQ,|7;wq~޽{y6tUmڴEKD5 F(vԱYfiޱKGEcwyѷTJK܅s۩^tI%0!Q5jhբŻ-l~YJT-niV-[jѲU΋*ךlެef4;.FX[n)~VQMvY><\s^5e+'$_:{yyvx`켊r>[asjժB&LNeIeJ޴yśsD&p60nſ[]*Uc9]+W,[1~ƞ;uA]!C-˶߶1`2s2:~x~xW>~޽_b4i$00;cIf~4s}4~Rʕ !  s=~t||e+|)y6mܹ} 7oԩ]`6m%&&5ĉ-[,!֬ܢuf4T>-[7._s$f>{Zp%uj׉33oU)0(Q董_>o<ŋٺms-ZBl\o6h9ϹsmqaZ=dyԨQ/xVɹnzj#Y1A~g #J˕+l2o+W(VvJkTX6HLLy1{R~x9Ev-Z<]}._1Ư ynB䩓]]]Ǎ5zt8wʔ)R칳k֮ W7_3nL{wH{:lc2k߹2 p#G_;-quqMH9f5U&`a7CCC;`Xc];w]laC\]]c2:hb}v#njLNN޲i !cBBC|'[n6msC?ڲEk АWXL7j coLd''5>|R^Ti꽻|9wWwE_DV.UYӦNKII9w6u͚?4pPҥ{I!իU/Qt칿EQ )UOp~)5wޱq=~xVTfMYE*z~^3(YbO5na={VC,QRH%KPcLk׮{63@ _$IÆ sΑ#Gt{چے$EEEmݶq#N] G?PrESJ}5!V=(;Ю!0j֨YFMYcȤ &M$_~WPBG (!;,3$Yl,`e49ȀQJ~T$J) V} 9%yii;"Z]i45Ĥǎ;!eYQPb=,5;aZ6t1@1#2ٶeG5r℉,?𫯾OY tʕ;wY.]t55558(/25cܼY6mԨ_q%XNcUصxZ_RB)P@ #a Ѣ/0!rN&2׶{".g͚F^~QGq<缦04Ɵ7[ :wa$Ŀ`EZ  F,|իJ d:v*Y+1&¸1oWwD͜>lZmMia1fu \>/~̄~l |sw)JJ'+;h.\PUpN!^w(*Jz,٫VVT|jQ*+]eߕ+W!><(bՏ;;dYnަƘчC^={4 BT| 2PF/]1y=QRN9-GG *s>{a׼y(Њz>b< bHogD7lXMQ-+Gsɚ5ˇ$ի]Oɢ wvԙ;p8E._):nN͚5![N0a_v ;wt3v̈2yԲ]t X@/^ W_c-9NܽR(5cNpuȒnͺQ#|6ȶBHLlL\|\l\#K2 _|oJJ26mGӾI<)y+1V?}fÆC>RBSrߪw8xˍRĐ?Z]b®FޠTg6(eRڽ[6ۍCS %fzIQ,+T٣g<[ ;vrgU&pJmx' }Fc絃տjcE ݻ (UGvf)® g=YYIDHܯ78R,eiS?޽BN(+Z{(Y9Ъ*Aʖ Ҳ))ҭ[kTn/F(1F}Fb z׫/j!i͚`UJB֨!_vǼyv9Np_05u|;)gSCoݺeSR>O>F®P_l֭]з}#D.d#EZm;Ggp֍FޓΛk`ٿ{V `GRujQ])0\lFoc%}(={lnQz X&he|3T_1}=oǎ EF% cggL %j]fVyȷMM,Y_i W\r1a|4Y]c/R{{cR;oԵK(Ɩ>Ƙ۠^2B)uvvK¿^)_F)p_N?\Ln)>/dKDZa g@(_^&M"@ X\#GOo~߾|eZ}QRjgk׺O?m<ΝG'4e}6fӺT\111jgp^}:Ng<&[Q X9i4%+9su횝˗.g_CR<K/ Jt @~Ft }|ݦΟ{߷[eY(WsX_qJr; q^رÏ?_|R!ATxxB[NҒ%J:::)t/PFԮ}~W_A׮][vF`h)ӿRjqZ]jUKd_!18NQ܋kAZ)jصۈQJխa۶9O Ptt3wW,[X-p8\YPJ;w*_k׊/b^ŒS۴-_vEJ)9r0OZT˜i222+F)E5if7߰X*OM}1 ѣ?]r^KPJG'3o 4~N7BIm?b|Vi1oYDh\kժU|̙3cYYYzZrsm߾r޾07׮YGUJ:UԩRVe{VvvvϰaI)*+ȵZ7wwkc;_wbb\rE7 ʨ8Di[쌲bZ6mE``9 !KЪTU;Z}*W.:`\PbS6l8ԻW/R**p8\v틪MӦM6mjr`1Ƽ2bApuuya$aC oDc|jkP̻yԖ'XP;uXƞ25 xg;sU|1}Va@mƟ7(ec]ܻkR]x_ls,˅A/ gg'7a4w\ "Xm|Ii^xS$8z8ۖ]Tv-SGr\Bݺt6QFd2y3^4E'D55tg3UX"C@ؽ`1H"'Ggp8/E_~...ꫯfΜzĉ]v9rĖ~pppӧ888L>;(;ХZ9vZb'SJ :C>]`kkwlə 8a󯿵l9;JSTo$ 86&6.>.6..6.Vfg؍<4<ΝիW'L1fկ_ԩ_ׯO_툷w&MDI !K.N(0DQ0yPNcD&Fݚz 6B\]cc,A\)@ZVyOݻ}9={v9ի߱cG?M2eʔ)9k׮]vF{3qNJJ:p`nF^ XB4ePT?}/]9 0X6Ӏ~,K!y;)ZGa SqxA%N9X<7oݖ$W׼݄wwwW-@{1fQ@UиQOg~Bi+PJ9rg-[bvᷲ,7*S25aR^ħwvv~ޞ̌ok뢷lcݳ50 \~|rtm1'AqPf-1N R"]u55\ QKD?Jib!֯?fXֿͻ'o={59BAv_`0>YX\7-z cO#<p҅Uæo33־ʙEۤ!5:&cz,0s[.'A˖Uq|RJ[ HLJ1YK+Vp{Jwt,Y_Umn[V@k =d Hƍkh@#S%KN~bׯO6B-IRM +;k4׳ /lgB GPɋ8@T$/ͼyQQϣ2 FI|D RJ>g_qVzwe]`夯=rSB !#qF@Iz'+`G0<+ ғ;9D%^pt<85=mIEKl߹c ʢ; ;H{yz*Uʜv-SL՞./ "=Z&+TDOy:ةGtcݾ& "|\x;M/T)lܙ3a.zdo_JQԣA_ӼAD"%Iܱ39 FNc\חa:f[0mǷZmĜhc$D^4a2e7f!0wec~Xb!( 5OA__-Ha$)RN_=+B(L?iO+"T^]ujU)eJԤQ%M{b@a/5/^dI#}Β3pEx) `G(';._PJjJj՟?Ɯf= K_]kϿ5ByRzB9J)-XVZoNaqLOcWH3Z2klAr;0^? c~兏YPI{~S~R~qϽB:w49AsƎ}.#x0uhDX͜&D<|8%b4nZ\59>-=yaQ~fBl͔fJ{{p>u0JIKuh5ް~b%C4Zړ~V#tb}?ROy渤A1{i tǵE1ǩyIRG 8zN#B8siG0^ʘq3sM0:}FH0 ':~b{=]VUS\ N\90o L4رcn5ĤD'if0oH͟7L8*J0WXז?ުqcKXخaa;ns眦q->@n Uϯeu [F%)BTJZ!Oja;tЦ᳚CxrDą?XM!>> =|rƴX̋~Λ@T">$˕e$rMa3([5pʱqU8;w\8yq/ڬ9ꉓKx9uɛE?p❵=kˆS||Y3x7W/tỏ1^xa>|!JsÀIT~1IƎxZ5kի[R1޾똿:E@+ږ1h/w!/+ܸ0;(OoD"4W^)?GRΝ oU*ڒt6lDnVQi&,LYr_^ǝ:sz˔ [G^pN:fAA8 5gBB tNf+H*$P+,6P(@Ɂ 2&ڔ$VB`%61,9N=ArFYq#17M{3]v'߂(! r%2cT5޽ɠ^8N;JƦ$='Y欭U߷EĽx&DD6mj|EDS'o )z+jOucSN4[ylgp .cTdQASZ(Z8;ϰW(m>4Jw.z1*dda'&3vv"fMI P)!wωy5UGJ l+J0ćOL਄,m1hj`9BS900sT1歍x02qrž Fh_jT(褵* K& 8_rU?:lsBc@E<޶e˱ky*B#Q1G J/xⰊI Hȸw'jޢQj"+ܳ%8TNN=*b#@.I?Ζ+]&g&f0r R@zzƎәRX PDCqQ;}uܵ'\x^WrE /T;8?|3Xvq7n5[XQJm0z8x BF{.G["A$zs7˿Aԩ K#O:s1(43(@_(qKxJ;v摫Aݦi@tljFFD*AwBx\n( <{C;-f[MekoaE`ptj؜4@\ f l 0:`Tu" :MAlǰa ԑP#ID3]B)WlEyJ@@4Szß*YS 8֭QW 6)pcǑN<0lR} ِd@Mf!=C?_~Ji\Ov% SZ̓)`-^ĭ[5 jY`ƶ !))9W/_shMFlVjm"XAddj$IUlT[jkyhxu"Ux>_kP/%ܜ?Ѩ-%i8s[4.T8@ Swo h1j)᜘`R`N6T)υ+8׬ꕞ.K7ҨRP5%fܜm6KŖl0\6S-=fl[jM!jKN9l ΖhS6ҖhڒmTm϶i2L6W-dKK6bKN6 VJ)*8ya0F<0G)O)Zl<$ԬXrΔRBMWگBUU6u~ǣ :s[kelzmB(ZݭHo/e)37spԉ۷a]yӜl1aF^0˞ݾ1c1ء}Cqvh"fҭ;ϐ&V":BBAr1$Wx m @$I"PQUQ+Qr-,<>1䳪 |+DJ3DѷAR  *hOO_ۥB_)`ƴ RdJI` \x@J,D4jV+oڶ ޱBkv6*OYrta$I0)vQ^8fxTAa&bhhB-DL$`!fsVr~EU(oM[w^?x:~H j#"ưfFM~/B^D\d Pjn,:.Fm&6Q/&fQMf1>]TiD1"1y^M}/[ݹh+8`jЋ )8%0 xK%s<Ͻ]oBJ)H+㧉ժe''kW/\WA飐"@h|nKq' 7nx{,]f{̡[ev ONN@ii.\PI"R@@qzGsVl=gNHnxro!(, 'EnBW =rdZlS^b*F(mZa¨E r,4*) )rjJ*59\^p%;+$-YWR /ܝ6gBxZAgxMR@@ !"J%"|k{v3SMk B ғ4-IZ%l6 $8 b'% .P@ &" $&xl\]ҁpqTl@ON@HJ''& hS:d`Mw 1@ 6Z( *4jpPBd4(ਂXP pTÿm`2dD @Hd0”倣ھm1PPz5gu+P IJ ; ?AIOSw7+()^FfA|VPJ%gKDuV Ib6!B:Mi?+-yViE;I(48tv<פqǁ"{SgN)7bb|b|d0r2oO)={)SdfJJ=zd4 $X ܵ1?yx#%JK;j$!X!qOyJJbRE_B z+NY_d;Ԫ\͜aKNa\/˚Lҥ;ur.FMb P;#͚VVrÇu~۔aMJJBR #d I}0㷻|QYQ $A" TR__ױC$-^#)]藿4($+]lJ2)1oq ɢG WJ{?p[\j.Yd֘@BIqEI|Q')/@~ml fw!pbTTu[p P(fϚmZm.] o:|ٲe˔)s1VaÆnݺ999۷/$$䅇$&&6nx6;`:0A;O *O/J+BmKsmszJSiRBi)!#=Fut|8%1՚ ~&s"hujB !ɉw:7IX T"I1%sC2BRR"xFR"9c[KhG#" 9 rYs+WoovgGjc>Bi%%#-Q`6'3mT)/1--RƜ*afu^nZsR,$LjqtrtKTa<0vS9 dQOV0[ё Ki*1!wPF#'8:Z N:).1RR*$݌l6d Wค7a5 U# 8D9KKJn⌘d9۫ * RS( >2?rځSWRA",^j^z|~ +*O ~c/0#ג?i=gA;n)P"kǗ+[ͳ "9Fܼ䍔ҠeʔxŰuUT"`:;w5*M<}HV Qtޝ{\qf0s k׬xx`ԨQZڶmT*[j?/\0{mRJթ9̈́)F<"%/x)8T0PJ$$j@ O T΀d Ds8 *Ah@Oӽg9 9; > _ht.p d'ڒ.\Pd8]\)J J^x:?trr]Zcwr0xxbBӈNKz4PDʁpJЩ 60/8ys}`9%h\ nt3Y prDi :jW@t"R щ9Ad @ ! q1B 餗,$gQSAK0щQ  b H`6,b 8/qCLH2r8@EH&`ߐ<2gm{TДs\ FuܹN:ȑ#NzRXt7Bl6v`bbbLL̙ԫ_բf ǭ_~谡˗-^hkcl⯿Zu4Cy?!D*VPN1T~!-BD^q?4 2FOנ^0B'ED廚z4JP`7s\REϝ;ʕ˗.>)1ġ1>sLhhubݼy/&qK}?[f%.YF?sh|}^Ma7$IEQz w$\*מ2/[} JY9ڗ*(A,$ۓ  4$oWx֮_װQriWǎsY^jˆQ#GrVb;mZL핯\鲲-[ȵ%,Xܢz |[.\ѣ??oOw^”).ufz|8iG ,[nƍ_Cɒ%K,699y劕͛5_ B(1)/O ../;35t9@. @#w7O(U1VP8zBƣqqv~ŃqoܨPp5$r9Ԩ/x)]+;zIʮAEuv:Wg `޻mҹjqvJ/)9Jkk(%%iVoڴ)fZZ#t|͚5=j69FHb7Ԑsg3~^:ZVCPhZ5kctč g.իO~ ~~}֮'I(:B#kֺ{샶oEJ*Q_qԘ _ vGlG:~s ^%lOsi$IX+ e_,R򯿮eOǒ%Kf-Z,9%#"[a٥uINֹ ;o _5*o(" !'Oꈂ {%_߾2dp77vDIxwI8x5{Jt?Br0aʔY&_>\OJ*2i(Oȹ! >a:aAhտk˖-> F=  JKK^oԨQ#; ~-7S!’߷#U$" mq^ @֯^$zIѨ5ԕ8W<ǽ@"6ڬX;?bĬ'#ru^Ъ#-)=Kn /|?-0ZT)Wz ZVywvqSYCʖ}J-2OǗ-[v˖-z^v 0o BsxuX[!P+8l떭o)>5[Ϛ=uύ?)c|҅ow.s f4i[}8H"/pPE1զAn ׫kĭˊ*"}|(2*.^8ww… /pWݑ!zԹOح=*`m*UHRcb/8滉UVD@v%\GkժUFFƹsaÆٻWaX2y{R^ewttT*ou BhӖgonS "9c q&BP I|IDˆ㹅^v8ԣލzhG4!^=Z~%h 8`l T,I$=vkׯ v`M2aӣe+^},!Dqs_~7oX9`CBjb>K,Qw>owJ*JGM`4>v\N:ud^3^B(ݔcccRZzZjI[/*rړR[6ĨT굗<|m-V؋ hN#E%@tnj]:xo?a1Y)PQk^88=|5ۦ,W$Q2WF_`, :tJr1Ư]'P$_|e ;xD) V9F*'09+>GFFN6]R[$HJ2Ò.=44Β~7H?i7/]JuC"D}+,bU~^2}gVG`9.Dk&k  17o:uqk MxKg)RoSQvZ!}HJ.9-d%"M2ha:>v-^[r3N?|{^<(P;>tje..O`L3^P(-ȇ*lz)%Tvz_t}⛵$fcZ;zL:vtԽ"eB\.?_6ȸwWc5&ߖ8 )T*Lğ/FI9^syG) @˫*(yɬq̉D\]]\}/]^DaI.]_80oj#]?󨰓7n3Ls}(~TdHZuΞ?+aaMq`0ryyySR>RJ%Ql۲g͖96ԻWG+HD*m8SqMlC @'N0~9sxG/Ƅ1ڽo+]M~ͩ;[eey}. lSRw8Ӱa79o{tSkjLoE61]XbY=mPK>0@-RjZf[gB$Ҫyf}S(HD*Q7g/R!q_ሉ&gR۷o`0r>L3o ƘSթKBbbf\f;~ڡ )-,ܸustn!:nϽi&YlVÄIK.@SF _;СCF.6LNNF/ (ږ`E9<߽O/l\RXMnKTd+S t1SN}?}a0r0l=]cE yy~ʥus;J'NRwޒ"I'OuܾA)M s)=x;R-"bzt%%:T2feAgϓDޔ͛oظqo`uݯi4K)zZn_uQBWm[R:_ p<.̥S*8Udž}tΧ58Pͽ1 BBP(ƍ(AOwD؝[NXss@MscSgN8>'N`@!c H /V[`g89[([ΤH\5?ʙ hQF#ppccJ.*V0\/+M ÷=m*ѫ| Lh͠ލg|"|Z1lw#+VH)]n]lLl^'O*cd*%I1vpp(X`̘1GСY V\WBejÝd-KjZ*zǟi#jp4ν?/1.nP!Eݰih}Ċc%%%}[Aq'_W  5,| ?+RLz/s0}v$ʝڵBѬiMWPgq?/\D$Q&@IΜCNKI.:Б,SӺY9gΘ8c&֨iBf?{>5-եTRi>HKM+Vi&B1aBB'%$"}$q1OcBh"  RJ6m'+3fJ)"иi5%;Zz뎭ÿa_x|Z:^M[_tu6m!J([ҕ"EvѰaCGIWo0d ~l69CfݶsЁCk]{֝?T0 $$'&[m֛7o? ^v5 ʹ:o߾~]Kg͙UZBA-&`.4rJ_ëNR}2jw(pK $JHкMQNKs͸98qR@ᏔkMWnZ&\pȤ|VuU !"o!RbEm?0 ʹ(/JLą5ʧ)J]vC_~HHHfPB\†6[0xlܸvc^]ܻ}96eW\gO}ۇv1Ԫ^wɓ͚53 jnֵ!|ѿfxb CPPHxTRΝ8nUB|;@z8+$IQT䫗..E0}Z5j;D__? h˖-W5+U*/gXҺvW_TA$22Rrb܀Wy2>Arvyǎzxsgf-3' I ))~~~Q B虹-aq\ŝtN*!RJ'PDm6?x`4@P) $IRrZr@Rjo>8 àˊ_F]nQ2Y4I *RV򮮮5ՐsQJ57! H'L]nحuwٳ7:g_Uoow9u.HM[ԯ..^FTȝ|Z:c|̜9mO2insjUu}}viZ LKO6y#&t7$] Y(PJ$J[4mIk>9Zn믻:ujzt6eĔ Æ8|XBV-Z衿DIP29 atM[wپc{R|rR^߷_˗wS={AgL|I,E-o3A5ibn_Z*%9hVX-A ڵk9i&`^w> lٲ.~BPv@ʩjF )!g9D$һGiVsգR®l¬k; BǍGȻVc0<<>P30(:hf͙%IZ:-SV$Ba0l6[uY40-r۶mFg$Ik֬q;*ߏ0gPBjìٳDQ4 s0gt}z!T*A޶rG>|٢u wWX}( .tx6 xT$L.'\ߐryY#` ?T*Իws(\p1Wt<PTh1x(Liռo~;ىc09 l䯥ྃGl` t}匶 `zK#,& tC xR0^lt<%~?VuМ[,`0 /- '׀g0t<50{Aq1~G$HDb|ͻ;wnco߾79aÆ 3g`}/YyHza!G&t>e?!__ݻw߾}g0> aw{~{oS?.,4 F':~̙_`Ϟ=;|'Ov166{{{^^^`|-[Z~3`c嫾yە` O~;}tBȬY߿ދ-QkSA4hT}f:u^ *Xx#ϓMgϞsf݂^Yc$ qǽ*!B"}ɧ٫OŜ h?Ҥҍ..\?,H MoZEQVZ֍iҥKׯ_ϼccc]W2l6͆p^X9sFW^ ^{*LB_r)..R:Ao>԰ʖ^`0>W?+MRRRDDBfQx!< (e˖Zkh^{*PTJYW.kӪՃGgo9sYF^ p1y{:תUVZoSRR8دOĤ!Ç|ܡ`o߾=d"&%0JOOտocs8B'1Fifwzڧf{{[ 㣒yPeʔ3<)vCIvR\(X̓PB%QJHJx8PB_{*/8kۡml\B'G)9`4ѦFc8( tuKppp%._u#syicFM .)=zt17gea7W=g"}?{4>>))#`8(3v: paa9xyz@ȱd߯~ܸq6mԩ3f 6L~m2RRRNΞ=[bE={ *T(,,ރ`8!!EG\`0;M2Y hzQhhYZmϜ93k2cVN#O[-9YP2$0w?ƇRlt)RiG~"}o #ۼkݹ!C^VTRJe6tP¥ /2k;B• {ӣ{٨ *Y7k cL;իשs'G'<Bj^tҥ$l`0 xe _tYw_EUR)s!DsΕWݿG 5e"D eJ7PJDV'Ϛ?=H~b̟;RJիW_˲_sϩPBRz쑔,R`tطg?!\`|`2ʧ*JzEw.!z0p=ݿWtj{D?(QvF?HP>}/_ޓ$FwGbٰqÀ\ .왳_v]Fz˔*SlYN; 8;^ 7!{pSj&& &wroٺ⅋gϝJ!rW,Sq5SN*w2"#FVVkzu˗/hww>Y/.]W d0zܺu+Sǻ>=vXٲe]\-u1L( ";MQڗjOKǃ\F-[nZ珞G E  \|BSԓw:th~=0[Zy/F@)MII1 "&1 a+xZ$H3f8|FM-7`5Zʲ/KaxJ)JI􌗲덛7*xB$$8ltt=tiSK/Yz.Ofe/G:Rh1?WRBEQ V^(Ysf]tk5 HLJqe|r:䀷gb(K.K,q] @n"E[!z'IEɛEQ4pࠁ[Μ=#9cc0`(QBFj[ (b }ZU]a0 '}J_=}R:A1`0z`0>%g!{@u8kd<ȥ0x)RJlE4Ϫz*QSǎ JܹkܩS*Ϡ  Ƨ39(&&&bɺH1Jv ] mh7n7:y Q`|0`<|\]վr\B(11֭KZZL=)ZmRkVڹүV/f0\@Bw\͵YΝ;+T|Ɵҿ_rM8<OONǿ,XAz.xRZD$uV?̚TFY ѣV3Ug(DV-_YX1fg0>e>!_|Y<(...fq۷SSSpyzz˗/{QB=<>>SD$2wzSw՚mMo~wl왳m----BnnJD0nBv@2-`0>߸qcN7j'mDŽ._uwrrz1>x`bw> sƈ#n޼u<%bҷ9sV;ϚX$0;sεj cvy6m뻔Ç9c3K?2f9QV+Bv욬 sz$I*T5OwTj63Y9#է7=-,?׮]kРA|||Æ 1[nVڶm?&Mz622rԨQ ;.ݶYl6._AfEh1[^ :P-h=))dsg;vbӜ9cd: ק_< ے}|͛7nΝ;xmnٲWZձcG]4i2n8{xJw#^HTsJ!$1wٴ%"+WDQDŃhYWKrY ":^P`РA 1/ ֭۩S_n&Og>y !< ( ))x6\4<;o޼WxaW?Y۶m9s35& { ϿJNqo*%8d_rNDR]'rި_!kOŏ= 4mvjssw´1F[Ƭ<#7,&ҪUw9e˖l?rȩSdm_x j^2o%*YEwB10'ZJ$Iid}c7+w.1X wj߷J*..2p -x8Ws55eS'eTT!w-#7NQFe(Xp!ȸsN2ejf.7Ot'M>{lMbcէW-]߸i93p{/XT){YFM T$ bo`0>5_B:>--O>N͚5@s@O, $$u)P(({iۦ-4D>^ʎBq"O kW[mWn)]Ij^n^<|ЮM;B+ݛw׭\'ߔax.]& C&$ .;wɓ[J`Μ9!N'\\0ysΝ;w6T"y(P pPbr⁣,Kttm[1˖-*UTmΟ;s`ϸ8x]#IRU(_a}/_EM^3v؊*?PO?Jz ,` ݰg.eye%^'!`|hW?p@_Lyʕ+۶m+{Y_~Y HDc0a7â.\бC%JSJEQl׮JZlN2h"p!ըv= 1fNWC.Y8:&.vmB  Qy%_+~YXFbA O:W֔,YH"Z,]΢`g0NsSJU*UF2?jڴZΚ5+))%BH"å˗RSR5mTxq|f"888;@h6THB yy{J>y?n8WwWB1}|| *CR䕃~drpp瓯O>>>M`0^ʻ&zYB̷s@7oxՍS𳆒$a1M>k"e|xDѻ + R JUԨR$TR5b yn#Ύ+W w. Tx1qn A9cq1ؕ عyFg%  >H;99Wƈsc`0ryD֝MI04ޛ;sa=0 ; "Rr={3MAR2| TKjA@ IsDɳ$9"-+`yDqdNΈlNT-˩lj_#JTkFԸ8 #OwtLf瑭я5O&?^*B(PGL&M"/1`;͹> ^z͝7wܹy,WeZ;yJiwPJp)^T)̜`=>-_L9"J`PRPI&JkN1'@$gg< -WH{v!NNNl #ixf}+p1 F.%5i `dg0 #ot<`0y@^wc|p`0r;yfq C MKHtH?٧B$"}9^EY F"/x TP-쟔ת9Kai/⥩,im>W[v@1ɺW-gH" 1WV1E^@AsE*Z4zT/?;7cO5؇1$o2!m5b0y)B7YZ'TTsqq+sLVHY322Ly3G+`M -;"B)KL-"eK; #Wu{ܽ{L .u;͜6nAׯ+!wVjQDK꫞(9#4i&y92ȓ`?la۶ɛ6Z{}t"0kƜ -į;0'O2W#h4rX$Iu`?`pBS|uGbfg0㳋-`0v&oa0 t<`0yww)UT2eׯ=oݺ%)~z{`0Lu|TTT0WR%>>ejJ~JJJСÒ%K}`0,3gμ Ο?Ço̙f~$±co/DO8߸qc/_gϾD. )rwBRsaÆ7wݻ×/_>m4Q-[|gΜ-[xG!Wq4hPd\tz@jjәg|Rdg9(S̛_jB e&%%͘1ʖ}O^@R/EPNj\]]˔)?~{ vFQr*B $իʕ oW3/Bjjjz(a0ޝ7 `>Wq+!D@zdB^`0#~Jo:iSJ|y{`0 =ٳFF 0w?:sgB0 ag$Q6m20|$x`0RQSe(IPdT 3@n`0>E(PJF)-::cLUɝr<~ҤI ҡC[ݻ7g$IM6[E{1ϟ_&L  8Ny|>}]b:vu#VkA̙T*-/̙3!Jh3Bfl618Jy-]tR't=$$$ѰlE[jy}||IHH8q"XN22ocR 7`Ǯk^zV䥊>-[L2ŋ۝;w޻wB{l4 9PԩS񑑑|FO|E8|ΝU*۶m?j}I&]Ϙ1cĈY8iҤ̷Æ ?nܸ!5L˖-Tv-[nvZfb >TN#G٘Uȑ#oߖZYf[j5PJXѽWvCul}vQ_9gd.\ЦMJO?G[W!8qz1 1c 1ܹ3o4-/BܹUɓ'gNg̘1k,???ӯz_|EZZ}Ŧv)S FFFggȐ! }e>}zV/>lذkʟ>|ٲe*T?mܸٳwn6-8(Ёm}#Gn8Saϙ3G@^(}2eJ.ʹ`͚5$Ms5K,ٲeK+v2e^ /{DəeG_=wL+3r͛7k׮Ev9lٲ< `G ߐ͛7.\8PL}͛/_SN5j԰ +!PzMVd!B˓D߿o޽{' v/#ȑ#,Y?<3yqf޽tRSˈ#lْRSSӟ٘+_~t/^aÆrׯ_]vg0獛6jJ!"yL>'G8N[C֋...{DoMZZ˗U*U]nN)]vcbcc322-ы?@.g 03ܸq#&&L[?h|rllbذa۷m۶y޽u4 OJEdX3i4/ݜaͰB_|}6iR!!!M6GEE)R$>>ԩS+V\o씾dɒ [e˖f? 6\zuN%zYuO|9oLgϖ*Uرc4i}dPӦM;wܥK2eȟ3)ܨQbbc^875k4k,iLj׮}J*8q"bu ^X,9D_~EC ZQV6}QF?O.]Ξ={ oo1EQ-uСRJ:C9?x׆Ծ&MN\/\prrr||y'J(OmJum57")J9+׋+6iҤѣGgݮ<<<>|. iii[>rHDDV}vdɒ46 ...ϺCn<TJ^YO-[/[Bn;3m4x/b ȅ~I9g;VFr+&zZ r ЧO[f3J*z$Ix$Y-Sӏ8 ✨iӦeFϘ1ӳw-o!g8d#3i8p`斩SV\A?:j޽{+WDLN<١CŋpyEfѢE 4\}%ҥڵkRJvK.m޼پ yl3y &lVjݺuų G(RQ^K,9gΜ{{{BB޽bo^ɓgΜ9!C5k,VhѢő#Gl6,Y!$Ν;kժթSӧO/]U$Pɒ%8L]8qD jd_w%bjv)))r~-3񪽈x!4j(3ߤ$Ifѣ 8VڹstbŊɯTb6eeSD &[^??M>yWEJڰaF37@qMo޼3Y(Yj֬29Jߏ~UY7֯WƗ.!P(fϚmZm.] ۻ/ `֯R-Eu۷n'z葙cMV/[>v7=߸39xk`0WCZm2Y>Kg0 #@*YUHmV-" 73 x ؄ZlJ)Beeg0 #@%2t&v`0!$'*y-ѣGa^|x 䮤r `<TrWg cF3:lzuQ"?;mB(UTuww2`0Bh\o܍7؇`u0p@Ogu0 deOt< $Q `0q(fwO"8CR FnAnvA1Hl+Zξegd_tr[!W#A(޵{ddIDAT{]P ;@)-_|*U-_fY($_я"ۿqEt_ӧVV=?#K`%(nnn$%&%ժQx#{PJU*`EᣇCpWtRRR@5>M)2Loz͐y9"strrф qvvjZ''3m}obyt\{՗ Aao5b!9U&55cl0A2d^j+#@)5oLQiG=sNO4ifggg cU*JR*,dmH>dⅻ {x-EJRBP(sg}U 3{g^aQ ߯ReERRZF-eYTdԇ ~~֬\~?#2mʍ7:tG?2Ig!' KEdpzݻw%INz'V(Sw{qڵCCCkh۾ڍk;}OC~_hqW]5MwENUW !F/"-%m)/_~f3?=DZ}MgZy굫M`PʼjԨQVZj5lkW3! e`O?=~~u lDi굛6mz}"##c_k̼-Bn޼)sׯ7>XI3dul}iii/p<~W?Uq$HYM7Lo2G<Pv >a8칳ΟCA877Ww׊+ š%'%Y&8(SMxb>k6AjY}}}*MoNZ|McÓFoooĤĨ("///WW̵i24Zj{PBf9**߿J*^DD>!>q44w>'Sæ Je\|j-iii~Vsγ̮\Zȳ|;>ԩSgqnn=A Z!q\dT$I]]]m6ۃL&GBt}()1 (w tppt28y{\h>>7 y.###?@稳lwݵڬ:./ tBy!6:~pquۯN{bV~~_G!QݽgXfsbB)jB._v~Vjut-I ڬ>JOOw9x{{+J"F$%%QB======%ILHHyO=|099RqH>~P(|}|Zm`r3YL׮^S* !=JOKW(~~z[jZ|8oqLl T(==zFtRB*k ÇVUsNn]g͜U|yB!K\Qk ,(bԣdJV3eZ'TA)}ajrRwG><fX2N я !>>>΢ F<0b32r& B$(J"H!R*dࠁMwZWaFFM/xĽN:y3D7&ORᣇNO{n2i?\vVح~]W^Qʨq׬yŊʢbMF 4\jBq\͟gڰ+Yfsfiմ՞{Gp7֪]+@sg.e7(ȈM dt͗V[F8pѣG"8:wK,oٺv!&2fokV:m4G#V"A-T*r aaaQƭ{nЧwmvQwȨm۟;wNQ)USNM>ot'?~}3ftt\\]\]\5mL9mݲСCѝw%q 7_`@ \r%)9sKNIIɩw'{5*&e5jԐM35`5jxyy8qbnn:UV߷w ӧP@ݸyc͚5Z659x:vܿ[SBE<6zߞ{oܺѤq:o@E˔+ӢY FyBhݺua,Y2Üv3l5Ck~{OK /h))ϟ/\b$i-&)AĂy 6olt2%UREOi׬vGll,B셳6mpѻWZ;gNv7mrJ|\Ңe͚ϝ;!$ߏ>z讝<==_`難v(y?+QDV (Ьuݰ*W~;HҮ];jݶu9ω'!C:wz!Ԫe[nͣkXdYBȗg/*WjmZQ)Ucu;ᄑ7n,_O>'L^իcq\ZJZre&OK/yϫW~]s=7zn-.>nٲez4qR5׬^CQ 7m׶m[gQrNcǎA;qd&JWn]Q:({٭g7wwfMKxS'O޵}מ={tz]m.~dK#Enm'NhXwwj׮]29T^]77/ZaÜl߷~wܹxs۶k۩CS'O>}z 6?q|hh(7#[`EIBAt:]G8@>}-N)x$'&'''J$$(;mBEɵDQ_Ϝ=xbW$*QJ+3֝[mjW]uww֪^kM[5 0LPb[a{fwc4"QJK*fZ\bcb3 Ńo޼)J"D"HgmٸR|ٴ J(p3xj\rv;G-?(:Juu`}E !D =~G?+$I~\]]uV ٜoXm.ӧL/w^z/߾}[Ju} 2y䟖h᢬2s .-%-1!L2jԙSq q, @d R = R*Xão%>1T^N_Kd1[x/FDD;wD܎81HGUEצ Kmo͛<2"Xcͫ 9\Rx[wnOd_>>Oe.FpڕJ !?Q{O0'Ԣ@FRDSt]RJ-OVYf:tڸi칳wvܙJ+ qܵk׎?~뗮=sVD\P sߍNoЛL&q$Ds$L~’_ܻu8E{9::efȿ&€6ϝ;aΐ?m괨Q >ydz1@S!+yA"E+].11Aj5Zs8 R$ĸظ SFrrFkZl2;88 GCJR $*{xyb>c)'T*F]F&L6%( (xBH\\܏~t286x7%Žq?p <NjT$R,dM6&ILJ\n}\Tܶ-vlQv5ש_gԩFg֡UVAAA󼯟޽{l5qĕ+W.y1cd#KwܩVcרU`9֪˖/r8~9^r7JDE@`M6u} _YfsfϩPW]ZbR1b>F^I2r~̷g#$I( 5i$Vۢu_mo7D*]tqNq:qjX.]zVmZ)99sFp'%%Y&)5ɜ4չdZX fZ q'nxp)n h`lJ@. N iȇ@KLpLJC,yג"K{ʼnc()jg^y8swO3M6m M;a<}O~* Eȉ,:ujg>V*ny|ݻkWʍiնs:e۶oesx[)IaͷA|㦍] J]z93th4L |68qbo^^y2sX^r".{6}mh`1[//Z|l?_nooWkϋ(Hȑ#+~!-+?MA+^`0xe˗M妲So3AmV(jY8-[*Y\.W, :qDk[+˃חJT/_U%c S544|d/7(?2y cf'K+me:7oņPK_*_Z>ZdYr㩎O]|қ9QT.s{:h2:}q \pλ|՚U5,JVkw-fKn* G8 5:ͱٚ5$GQNfH j8Ec(Z-VeBxRp|8XEcX4&V(ðʵkZmV͆Bauz/UUUy۝dRI4Mr9z{{aE"\~7@$ &:8I*T!F:nqAl6` PcDBVIj1f nuڝ0 Ѿdt TtBf3 Qf87ZEsεw7jv9]$IbjP( x Nd"@JKj4`0/Ñ0%sHbD$$zeMP]H)C")=̉H4@ԅ ,Y"_HV̌2rx+ y<=Lؔ S$x_+W`Y/''')0lM$x7Gn0( JjL]ZRt9%@D2y}h8y\Ci0f4m0, 3,Kd"It*MBMf$PD"$z=bJΞ;ZAr$IJ$dB2 OB1f3q$ID2L$EQ,++x=? .]ZbE4EQt2 f^/7TnJQ~J,Z &N3SO=FBj$b8خ*++zG}n7smFhd r:9bY}b4Ñ{キm?/jq2j"蚉iWpf\7UBx…^nkk3%xs{ DTY$Io>Q9bWnnh}BM&Sc^Aaё Nk2nW{=}>͏5fCV@ _4Z"(AM掚=;h<)Wxյcwb G P,$e2@-›A)Qk^hvB!MHP͛6 jF"(Zt:-O nr{M&ӣ?z^صk. \_>%IّtԋNsS_SoLoiOb)flt* O%Zcz7&G:-U˫Xx'կu:N#eֹ&܄Rf)(((((,$S)&<6>\k=$Ò(%ɖ~>/ea`?')R ly*`Nl1L&Ͼÿyt~cJ>9!s?(+ X!d]uz#/!k{ېSN!41_p8!:9:SV@sfj @9cWQfFF& cV HJVX,>9FyCbV&!ADQD.]D,F Appp:u5 # (##܅s˹?U$D%cR#,BB]tɱeO.Йgt] H*`!|h*|gTҧg_t199z>3p87BIjzD!;w.6.8~+T1YBH:98ըYCѧϜR_q?ƘNLHȿF{c: ddd<}2-5I&BΝ;w/"]]]kרmgWA\z8YjF@M)BرcN$k*U<=vFJRp4А%*F9nr7WظX"k=<R c\\$YV%e% TJŇ WnNn nTafV WgW'G'E|lSH)P#0">0"!|i\S*p816eOq''>h箝ǎ{LQ}B =ǎ?2%8\КZ, khGȲU:Rbˏ1 1B{>_91[Xs_/([mm_y3~9) L3ݖZ羅|-l!`CGB3_׷kR<63̔})y`9|3!μBIII 50`#@Al~B!1hѢiӦ]|9A#aҥ#ye<:9,ܻs/19}*]*-5S+Wܵ}GFFF?d[\r֐q-Y$&.fIe˖MMMiuX(!oHf)**944RJOS3*2Ao;;;_o_F}/䞻-,AAA+V,DEEE1Ƽؘؘ,!8*& bKT *Fe2F\\ ^L!///(2*2### ӣe>>>ZQ2LߴM>U'$$ AAAnnnNN27nʥ+s9Apƍ5k޿@1sNPPh7LK.?~4qqn\#$%% ,Rm_t5%B.O5'{LcYViOKNNPXO>׮^+[,C a$,3YBP 4.豣գ2`~ʔb)XH@8x~{7, !t噳fٵG!.^UG^~y%J} ?쐂 ,]ࡃuֵ-II#FמMW(_wVcɩk7rΗ'OLHHhӮ-Kn0ef[!<AXdKI={tww.(c,~e֭W5&M>zӳYfYJl{EVH)ZpS2u7o|;Cw'g?ȱ#>^>=zgQ1 D%tQ6Sz#O]{v7 SaՄص{WW,$ rj=p8W"HY~;'WyAP-[ bׯ_`EGGm۶-U?~ŋGe+VFQD=ZtYRrR{RG)m۶P SR7ԹSA[v߯p˜1cjժzu9;uj70\`FVZ}:S4bOo̬LJ(СCKJNpx)qq - qrpX,AAAsa1:+HHL˦KW/x==ػ޿{.驩ǎn߾d2hg\lC=~[ZZڄ22- !d7J,k֨9r?r'%)K.-y]d3J*4nxf9=#vmvZN<ٸAW.3`w=~DSOuڵCaa˖.M|2HwG8w\R5jj*J5x;w6jX@pAc bffm[O:>p@1 Yh0=~dɒpppb)0 5ZҿR׮]۽{ۃǎۧOMѹ{dЈёѲI )]7~\u'kK/a ȀJIMfJ7fts:JK~z: \B0wޛ7m2$b&{ۦUS3?QJB߷&>tGټesr\铧u]a" TPͻmGԤԫWZW^&M;ĸ;;7kҬYfu +WrsgNI%l劕qqqN0#5c-I2et:ٳOZrA+j"|9GLw+ޣoujiצ]&-޾-oƕ^Ȑȹ>;VSg;:mҴg~_(V,[0\x5ԨXsҲ\Rj+df=x՗_Q m֨Ɵ7=4qR``/ (g?{0|BZ-\t+:2Ck׭5ΜVޱ왳GO~i!D勗~UV}=v׳APTF#t1"HRȲ,J#J;fL#-,Q_t?ԙS?)NQ 4`2U=y,)eӚkF a,QBD$VELfdf(?Ӓ\De?^&$BIR322=\rz7$ WwW!Fm֬ټFQ;wL( 6lPU3Ɣ;DՙdLe,bɘrp^.}VMd2c>#eYV r||СC 4 cǎ:thHHȑ#W\?e^?w EY3MJmIH5BO)b"b"$[tEB-(JEhʨ'=Gze"3`"ԴnjKF 5LNWBylQ F'c1bZNILQiTPTtkr~XC붭lc\ K}7o\tْKd"Xvv؈# [H@ـ;88::pիe3T2R*QI۷/8s")9)vJTU([xLoob'NرZPO:yKdHd6ajȂZP޿PO䰨0ĀA7wힿo9#PZzbr8|AR)3~A7n4`oX`۹wΡbŊ) 0G OL@xzxTb998)xk899x\j+@)Y毧r1.yfF6bzz'kO\@vww9J gp喒aÆWAKQP=CLc^+l谀yz}hK{)nXpr8΋R:jĨ;v֮VQu:]֭/_|GgvRJǤD%%˖$<><4ܚQz+Fy&;m򟹨fq'M洌4`R>Q?ٙ!#=d6azV4@^M}~-aر$B$Iz,Fol #ojf(pjZj\|ܬOf swwoѼLd29?-}ev’eKը6ik1@`]\qQcyJi3):Lkc]؜dobI G&ߤ-&Z(-+l1{&ںUHJOw([ƣ %{A? 'OhGNg,_ s1>Kw͛7oP! #_Ze@@ 4pkW5iVosj0`(lݾ5˔|r''ǝLOW/d?Ӯö:*ewgY)Wi׆RRR|0 Ba ?<@ NH09CbZA1n!~vjk=QGXH7xS(vA4)iPƘ eˮ#9y,ժTSU/]7w^Mϟ;3欏g-\01)jժU?۷570nBDX/~5z\G3gNpPǤnݺuؑO9 yu>fyqRJFj1HF }&;mǖoѪzTS}n{ݭ[7VC {"]T0w!QU ~s$ݻ[ɎI|Y[}sjfbO\-~`0z) <ń%$!> iہ !4ܭ_C >Qoqq7Y,iR&PZم ⹳fϛie_aiݚIzav`%Í^ U( @6}CٜYӨ7ZWJ0߻R,^2%)E8Z69-Ydgg䴔N'Qc4ji i*Y S)%s dde'n^컺'Fό5zΗ_k:f;!$3٠7$'F().AB2JOOOHL`z777ٜ)VIJg:;FE5z'8RФ$ĐYa aQ~J4%-q1Rܜc>$"i]sS`ܹ}ҽ{5lذk׮͘1˿n? y暟`/Wh08|#3=syS&M{RuI nݸϾrXn}9^]vPlY7^7"T@ cϿ\\\|Z+ne#t]PS.عb]pư眨Xm50AȞq>9zk;-j1d5+J6-`M{ Ta>H$$(@R$bffFrRFZ**#=CEIDG1==$-% T%,& YQ#y >Q))+T}b Kʓ$`GGY{{ϼW1)-"2Ӕ7ꁁ@-a^-PB2ӈL3e K20,[DFШ2:5j HZ*V("Δ3A" L*z^u^^zZj,Ylڂ) 1mtA9t$Zjse:p@ů^zp/55< JK-:e}&L0fLs& q!.E()0ŏ*B7'T^%^7`S@Q[J^CڃM'/TV)2M' b@Ο0,o~Ŋ'NصklVПv@Yd* i*scyn<=e-y\9ڷ?hN=b-$ /\n3嵿h7J?nHR^gΞ] FAA5zk۱Y2?n@42c2`H8 Y7 |{;Y΄K=Oց fɜarKd""1$Q  D* z>>5>=5]%$  Cݻl`Y77("Y^bݎO8yoN9MkJ9|}G#svuV*X5ىuqS02j11l2c12z#jgg0JMMe%ܜdYLˌc%2 a"ހ쐀K = fK/WO q x6٢[Q k!@:"B223===ݿWDIpppv{wM֬YcGM>=4,12( .JisG Ub%d}M0"p$O#r Kf ׌ޠm߁ŕOqP!y K!蔙uܹ%ZRgWJhҥO?Qj5pʕ1"Ӷmwi}_aOn`AR~]p`09ys2e>=9ʱP7;8K S;!^dB)8(}Aemq$ K~Cǿ?}D&4H:V+BQ+<& VMfKNLNOIOJKOKOH 22$>=%0f FJ0defQBLeI6`2a~}ɜK%T7|駁Hl:v^^qy$`8ҹRI*W0zX0p|$ia*(xB)ܽ{r欓 J=4Zsb͜1!2)m)e)rswcYwneyPmvwݻ ?o` _1^~s(#Rvqc9; 6t񷋗,YvyRx^/.:jwɹ{'[V5i˚_ %,jݮeZRL!~xoԥcw%]:={$n@#foLf;#J 4:Xv,)KhA+QIP H@&bQo1YdAe2333͙#AO$b6uzF:eTԼ? !QBftQ,$I d%Fdw9R}^CcN"fj6:1`H BsЙ3II`g4j Zd!1̙#h"&N-g$`DYEZEfQo2''!Xo,FILS3Fyfl#/]=mZZ@iH3c wwxŻ۶m  >ZWO #D F qŞbF@jZܴyƊg$QTec˗wc@C͔f5[/J4gϛSx z=sLch@"NJPkjCqA%E 1BG?źcVwnfh戢(zՎ֞59Va;G;W@`0Z**^w9T6O0!OM7ne)9tw*U4xq2yy%YBormA͘6=Rc..NXf`0huVQR̬h@U;;;;qtd`HNH(X(,VZ'<2<<"^'6t/S3U\Y+[}+_fZ@ަc JȈK$øܹG   $9:61yEJ^U\lF7cqgg&.."2 1ych4*V7/WQ@e< %jF0RdI-`<"`V1()b&9D! !;88HTR4l;D'Rnk`&/dyҴ4FL䇮 NIkM2: x)q5HJ 埾=y @&%-$ (aaBI_eW*`@(PfRYrk"`M61q1gΒrc,۰_%X^|EX|GDSS |٪5>>Y3{S [$ R'Of̜ѷo<ٕk]Z};K,!Lh6D~"",}\n-owXe&Pd fLMOOWK/WA6нJtWy㓒vƄ-\[x*)( 3\]cbb)0Ro4SSS@Ó`@)͵œ6eKbff SSTFH޺Uy3y@ܞ3=dѩiyJj֪s(:t(SLx6fUVv x|vhRmeyo} "B~EQ]Di^v^ jb{}tĈӧO®i.B+UwCo F0?xןg뇜yjYnZT3+J6ZI콮=QaHU 7lܰ1<QFrC6nR&30V>5%Me+UN{vs| [\%%$㛁JR64jV0;c #ܱmGow"x0+<GQ޾s;*2ꍙ< Xdcb^T!{:uXjv>* 8y@ \y$%%%&%>ϥDv;^$H@ᡙ9#F*{ 9%Ye H 3Dȵl6U*Ղ _:_5,dB/p0~1}^8{F!Jխ[7rƍ޵{ mxVSΛp8/ e!++oiuI`ɲ0~P3`F;cllEQ,AxC5s8$B8pBb_lлWo}I5㙥J*Fo~ҕ2yF`{yv=8;Q*xR#|ujx9xp^+VX4Tc>pp8k߷bR*Qp8o9=[NY.Xaz.9!kk% cbrJI$FX&hg̙?J@!#sp8 \L2M7aqc6zKW8;766vG?͚4(i}{Eŋ" v؇@D.90*>epBhWs:uԴqS\nO2DՏk釟*WLd`˅X|?ذACZe 1^ڰ{(W.ӧP@!0 2,A8 g2p^ SƔ1fˋ8y#L3Tj菝 08;?~bA2|իW[hXB111F{A3MI@L@Į=OaehQ@FfFjj'_0ƚ4mH "[>p^.#AI0G^zUIp̩UWiN]aCzN/[jӧjխUNj]Vwnߺui㦄XfffuN 5w= W\Qco݊~Zn?8#3CW~_aηy<F ֜xy Qf71Ao9[ >VzĄwUvr\s8B =E{obZ_t矯YY̶ eNڲyKһgoJ)e,WܐC zJq,`B,>2GVpBԊ6#cܹcg_7c'ٟ&9%k]载 N T64FGSJwn۩j݊}1 /ܽ{W`'˲LdJiI(vz5jļڵj;;;8XRL&c횵_޷Z5kqze^ޏYNNIIKKKNI.S OuFƌSR常nEFE6idؿ  NHH(Y_|^vΎPB)zjrJrX we׹p8 c xyL<+U'Xx B tR5!._8~#sJpeX)g2d"tfMSӦ.[v>hG׭_:(]h$`kT1~x|e˗[߿Do\=ntMz}a(iy2ɓ6mBUZuIy~MWRJNS=p8J)S!C7s:v6d$Kf|8L2RJ)SRSN*V JMwѱCGF͂o:u$2BZjSLupܾaBxe2Y)nn-nܠqjZy]x^_Zȸ8h4:gϞ~z۶mSSSmGv}޽yE0:k+:z@$1F6d@Q#F)*7mԴi,_>l(nպ},32eBgϝ>r4 T] %YfJi Xj5jTlvGrڏV˗gΜrwwիʕ+ L\B͊+BCC+VX=p8EeDeY))2fu_cs}' t%߱00ƦO RZ\@x.RV:vXj\#&#j׮ip8΋EʷzUV ycjTѯo?e~eK=>7lpuES!00UVW\y+WJ(4(Q-|S.XSNs-0͛]M58yI<~Ç7n8󫯾6m'v%˲r 6EB**p8sx{{WN0c_4ׯO_h46mTRtذaڵ+s8NF!d2W@!@-Ve>%z;v()Sԙ/Yݻ @aDityϝ?uI'<, +֮[8e>td"`?PB׮]m+s8Kd-!D)c zG pM`o)CN:ݖys|0dڔiQJ(` ϾOJTuԡnݺS&O!Jpp8/:#|}L?x6l7h"Anz%.D1d+PAd8д ֵJ)D`pbl`)(n1 dF+]keŲPlLlsM:Eܺu #LW7Op8cҼiMf3@0aq9H 'XDDĊ+,`9zj%tgߡ]moڼ鯽1NIIc+V|V^yU+XZ ˿_b>vrϯXBIۖFHd޿DAͿ)mWF55pr!sTի#Fܡ/l}ˆuy;tвBCC[1^l{kV\nwSRSn:|pNgm B!DB|xy(zp?|S0 W.VBo?JN zC*U)qcGzjBB[={ޭo.8Yn]v _YG%صm״ӆ>s;wdg董yʚ,O?[3w^ZzZBBBxDx Q(yŋ;Xjf}kߦq,KWZh'$&4mT&,˝:vpdlׯ_ӯO>=MfC{kАA}A y2&MHN4j3] 1uYIhڬsBmO mѼŢ%VYݿoF թ]hGa|̏f>rxk4nnmLd/I'''NwI{{{o].]5m΀QJW\%Y\O8y{ 233cFRUce4{n1F81)W^|O&2P:B zt۲ietg[/!v<޺Y,plB=Ax&L|g/ JŬ `/~ܱ`2y}*<<<"44*#|[bRk4VJ_g@qެI3{ [F-Rڮm;QLO;͛4ۏ_l;5N;P% xNQQTرsncnY^|+U.eu@888t/W\p^6bOk^(qEKSJ KZ)Mc2.z{<Ω$N8aBDADbY͐+(Ir*H#M^@`(4;==< m@()[O'/8yYN·_&2}ޢY;vl;DuNSM]lN{s2Y~HDě7o}4/Lc.hTn^ż=y(WczNc]ZhTjJfgATjFU  =nt-:=fpJf :l'?o 23fZ P*}hC^57Jiʕ09r=֠^Sw7w6's(`8(>MY4߸qcѽǙgZjyeQ,|7;wq~޽{y6tUmڴEKD5 F(vԱYfiޱKGEcwyѷTJK܅s۩^tI%0!Q5jhբŻ-l~YJT-niV-[jѲU΋*ךlެef4;.FX[n)~VQMvY><\s^5e+'$_:{yyvx`켊r>[asjժB&LNeIeJ޴yśsD&p60nſ[]*Uc9]+W,[1~ƞ;uA]!C-˶߶1`2s2:~x~xW>~޽_b4i$00;cIf~4s}4~Rʕ !  s=~t||e+|)y6mܹ} 7oԩ]`6m%&&5ĉ-[,!֬ܢuf4T>-[7._s$f>{Zp%uj׉33oU)0(Q董_>o<ŋٺms-ZBl\o6h9ϹsmqaZ=dyԨQ/xVɹnzj#Y1A~g #J˕+l2o+W(VvJkTX6HLLy1{R~x9Ev-Z<]}._1Ư ynB䩓]]]Ǎ5zt8wʔ)R칳k֮ W7_3nL{wH{:lc2k߹2 p#G_;-quqMH9f5U&`a7CCC;`Xc];w]laC\]]c2:hb}v#njLNN޲i !cBBC|'[n6msC?ڲEk АWXL7j coLd''5>|R^Ti꽻|9wWwE_DV.UYӦNKII9w6u͚?4pPҥ{I!իU/Qt칿EQ )UOp~)5wޱq=~xVTfMYE*z~^3(YbO5na={VC,QRH%KPcLk׮{63@ _$IÆ sΑ#Gt{چے$EEEmݶq#N] G?PrESJ}5!V=(;Ю!0j֨YFMYcȤ &M$_~WPBG (!;,3$Yl,`e49ȀQJ~T$J) V} 9%yii;"Z]i45Ĥǎ;!eYQPb=,5;aZ6t1@1#2ٶeG5r℉,?𫯾OY tʕ;wY.]t55558(/25cܼY6mԨ_q%XNcUصxZ_RB)P@ #a Ѣ/0!rN&2׶{".g͚F^~QGq<缦04Ɵ7[ :wa$Ŀ`EZ  F,|իJ d:v*Y+1&¸1oWwD͜>lZmMia1fu \>/~̄~l |sw)JJ'+;h.\PUpN!^w(*Jz,٫VVT|jQ*+]eߕ+W!><(bՏ;;dYnަƘчC^={4 BT| 2PF/]1y=QRN9-GG *s>{a׼y(Њz>b< bHogD7lXMQ-+Gsɚ5ˇ$ի]Oɢ wvԙ;p8E._):nN͚5![N0a_v ;wt3v̈2yԲ]t X@/^ W_c-9NܽR(5cNpuȒnͺQ#|6ȶBHLlL\|\l\#K2 _|oJJ26mGӾI<)y+1V?}fÆC>RBSrߪw8xˍRĐ?Z]b®FޠTg6(eRڽ[6ۍCS %fzIQ,+T٣g<[ ;vrgU&pJmx' }Fc絃տjcE ݻ (UGvf)® g=YYIDHܯ78R,eiS?޽BN(+Z{(Y9Ъ*Aʖ Ҳ))ҭ[kTn/F(1F}Fb z׫/j!i͚`UJB֨!_vǼyv9Np_05u|;)gSCoݺeSR>O>F®P_l֭]з}#D.d#EZm;Ggp֍FޓΛk`ٿ{V `GRujQ])0\lFoc%}(={lnQz X&he|3T_1}=oǎ EF% cggL %j]fVyȷMM,Y_i W\r1a|4Y]c/R{{cR;oԵK(Ɩ>Ƙ۠^2B)uvvK¿^)_F)p_N?\Ln)>/dKDZa g@(_^&M"@ X\#GOo~߾|eZ}QRjgk׺O?m<ΝG'4e}6fӺT\111jgp^}:Ng<&[Q X9i4%+9su횝˗.g_CR<K/ Jt @~Ft }|ݦΟ{߷[eY(WsX_qJr; q^رÏ?_|R!ATxxB[NҒ%J:::)t/PFԮ}~W_A׮][vF`h)ӿRjqZ]jUKd_!18NQ܋kAZ)jصۈQJխa۶9O Ptt3wW,[X-p8\YPJ;w*_k׊/b^ŒS۴-_vEJ)9r0OZT˜i222+F)E5if7߰X*OM}1 ѣ?]r^KPJG'3o 4~N7BIm?b|Vi1oYDh\kժU|̙3cYYYzZrsm߾r޾07׮YGUJ:UԩRVe{VvvvϰaI)*+ȵZ7wwkc;_wbb\rE7 ʨ8Di[쌲bZ6mE``9 !KЪTU;Z}*W.:`\PbS6l8ԻW/R**p8\v틪MӦM6mjr`1Ƽ2bApuuya$aC oDc|jkP̻yԖ'XP;uXƞ25 xg;sU|1}Va@mƟ7(ec]ܻkR]x_ls,˅A/ gg'7a4w\ "Xm|Ii^xS$8z8ۖ]Tv-SGr\Bݺt6QFd2y3^4E'D55tg3UX"C@ؽ`1H"'Ggp8/E_~...ꫯfΜzĉ]v9rĖ~pppӧ888L>;(;ХZ9vZb'SJ :C>]`kkwlə 8a󯿵l9;JSTo$ 86&6.>.6..6.Vfg؍<4<ΝիW'L1fկ_ԩ_ׯO_툷w&MDI !K.N(0DQ0yPNcD&Fݚz 6B\]cc,A\)@ZVyOݻ}9={v9ի߱cG?M2eʔ)9k׮]vF{3qNJJ:p`nF^ XB4ePT?}/]9 0X6Ӏ~,K!y;)ZGa SqxA%N9X<7oݖ$W׼݄wwwW-@{1fQ@UиQOg~Bi+PJ9rg-[bvᷲ,7*S25aR^ħwvv~ޞ̌ok뢷lcݳ50 \~|rvy~TLȤI?:H˜!!F\BE^(I%0 {y׭S:NR"~`uE!X( D(lY̙fPͻ'0pu}d|M!#"'~*PJ=}"F-R daŹ/p O*_Z>4K5pkڴ+?stG5kߕwA1]O %˃z{'z220˲ |#T ͝4Tـ];̠,JE.C e㖏8gϟ;;9)-_|>m[x9@hz\Z[*!c3ӓ\)!azO_oq"BI>kzQv raó§**#xq̹דjo' H| 9f!`05RfȨ  5OAN:n[wS3xEO#M]'!&)x}Өg|^̦~gRz K׶K7,Rf7cFo4WƮ:ife?ʃ!IJBPqa>RouܝLTL_fUN63o|e.@R;2yPHfuq'c("/GH gm2i"2!]tYhuذ~s.#X}&KԮU F8ma~.f6whզF rū%X 03N;{,0[#`&1)a@IeddrH_;v$9R̔P؟WB|Gӻgo/Ov >|04o h_Qny ]WV-^NOQ** @Ծ sԉ5c9Vi{籚B\h50~匩^{RJJR;F铥J Rf/\lL?{<.j0nѱ^W0 suPF22__zG8޾>Ù(E}.>r,/BD^ h90 ܼu‰3F?~BGGgSUHbJ޽{ժT^&/ZwnҲk4'?`vD:;vKfAزꢝ`:u,Z1EMWF ]!dc46"P@˪jqk'+}Ul={fҕ3[0\+WBO׮gߞO1Ea٬yWb|Os˷SkjnTMLAEBHzߤ֮Y7L1] |칳A]Ǯ6k޲yroҍLԽ>}PJ13f{e O~3Ŗ>Z+?%/hɜ9M*ziС"x/y7]Bb.^GEIi%M(mQ,:J2Cw^Pu"#W,?"R 0MY&*n]iZYȼd09?o~>CŊZ0ĦMھh4yGdQ)$a֭_] ]FՖU*W$~?\I,e&=1dɪK]},1 X{TTZj&˹ێTWq%,B#@>&9r1.mz5ޑ>~?)&+@<\ɳbl^e$"=~jժfZk}?|}|UcOoOS hаR4c|'!OJQ09( yһWsy9z-wZƁE4BI4K#Ir_A)^ }MFޜ].Aܩc9[[ZY*@ V!!!2lJ5X3cI$Ⱦ@aAxb }5lɥH/H i›/M@XceYn@Iog81 D,r (8!%{Wvg,0 01puj9~5kzUM822Px!!!,k4m 4o܄QBjub%nj"%xyyY3o95NV 홸uw,_Jfr0Ʒn*^(TO3 %V P {ZިS+3$\%0%fJA8^ZmZiT^^fdYa`#00p `ƘALtpe9tFc8|T0 *ޗ)hy<ZZuWWQz x\9zk2G~?Q+WdhϟS*{4_"KHOD Su'p,bhHh5*8?_`ZI92%lhC @z买7b^.`H;QV(kLBERZͅF`Y7!VVxV dM(_g +nu(d}Rsq0"'4/@)oCNR FdOI2 B5 DcХ?zTv Wn$'gp ֨RD!\NTuw2F+u1 #n6L6SlzcKs(: kTF U*12E Z̈́Ter)l4c1K倣 e1& ZX)EXt[bB_6oVn<$Ү (PLAPx ?ST?ժVBh &*-,yǙNcGM\눮V;t'|kᝳ(O )XZGKoMDVVsÒ-̕fETL  W%l )I7Ijf&.֡SW5N6*5$N/֞ ~(jaXd20 g/?۬P*RӃ%zqi:K U^HHԉ"Ukhr>9@=È7Z JM4XR )F=62Dlm4Sų@h%^ܴo@)!CFeq@+Iڢtr*B<'>Pb1.Ab~5SΚu.ǎR3<<9]+[מ]\JF'/ck P6!=1~(ok< II1i FÑ|z!'"`쨮F~[}9y#;wZ 57yGei4bz NN>׹t` KhިOD/D*pu[կ9v,xD 6i)@3_(9*]Qȭϓ`R2j\v~NjyٲLV57#sܺlq_>6/23 ϟ=v(E4&YV q@ &d !9]H 6BJ)XiBr`*h!.EP)$'& 4*!.UlS'fk3]'d`100Pp*BQ)5FV(Y%, f1 Dks,0WwJlKɁCFFm :v??|;/QZjNCe[F{;{$ZB((|!g]D @EV ^_ŠkE&UY%^MWފ̴w)kۢ#JJ4z544N P" pШȸl,' 9wx8ihH0ץQJy1S(T0$&G2#R2VVnY_$FxpY0NJI}hgt`0vpPFSD_SfR?03L <63[7-Z s@(w`).ȨH xWR S++9M `oQ@l *%kKHN,!S:0Ӏ@!% TJ $$ǁJ q 0'k HI!l&0ucȳȬJ4ԱȊ @m )F ߻=!cSkJg>k<*ʕ ?ƍQF/_ٳf=z(]?KLawrsiѬWzYJW^x8\r9Sy{4eRf5Aa 7l]x::1Q2%N;y蘄ݛB$cV*RӉSu*5_\yEe^륖Hg.S;nH ZH&"k 3BnN,(~/X(픜*mpK.R1R4D"0טaQ/B@ԂBqvt4 I ˖q/[i/$?E,e}#-RcZ[.3#3=!zP{Q;W $`ATYZͱBRaBJ- 60kKK" 144 !*P)!.4J0@t,`nQѠbë6֦22h `8 rWse".\rR ]0Ac-q,1=z<,rЃkwO (zc !vI)SRS|ySX22yKxʸq4 o^Pifʕ˖-]o73hlؠ?TRFrb6 }A6Xh z}ǖߺuM]]r AA ERٿį#xס}=Q(eX@)ZٮOBSrR߷=N]R"[(c1Ɇ#GOf9(0VP4aޫ.:E{y`0@6 PknTy'Ͽ0"PPQ$D$xQ-Nqqdj4׮?rփ-U"%g7R *5%OF 35f@l,!Ci:`nDZWATU) :8*IRC|2XMER1PFgoD&w}QX=˰ AhJ088YխUٛzۭŵۏN^iF`P{;44tƥ]6EyCqL:~ [n b@4DQVڄI&郮<= /7cށT9w}j$zUΓ@Y`E`T,YriAQLX"@ qV~$BkU$KIKÄ2RENj#|^Ag qqjs7(Zؠakc)  Rzܳ[IЧ%,琒`:zÇ7Xc؝`7ag7X݋gqϯݻz'-yBqq`go9H *S-1NN=ٷիT6#1A b\/}FÉXT``D*j<@`KxPz0Oj!5P:}>. v%tD5f9t!Q0fE qpgE4 g9JLMls`D(MHMUp#Z.]u1&:3ihTt`!&"J Ekit4NX93Rc /SllF穼# Xg:ct[3K[s$ 6Um3b:VMJJH=9YCx[BL y$gBAԂNtB Ct*hTPBdp x'Km@jhSzR y -2灂QB1ż1  83,#yY[Ys 'd0C)Řë:F˭\j6HS12"aPݺza\w>2(#ڵk߳éS.]$ PffϗsβlTTszCtLeK_+D TBG{N)!|l#%KΘ1aK-$crGa)+5YQ 9a0 a$*e=s8W=}U0i,'Y,pT|۷S(8l-qNbfdxRAD!> Tj%h`X *KKsHI|&XjAj@\2hT`^P*@8hR I `6HMDqc8*+DVdK) ,3VIAJVI0000DR=Ks?y˗/Vڲej|?LYdw5==ϟS| g>==]V\cߖ-%$ 04 *#e.&0{LWoQG5RDD.0ET21~♣.)Zi}KET`)/)pJۥJrqviݪ~ p K)La{oѢ/|"_uҥK4hдiw699y-[ymY vl)k֪EOTEaՊZb^,X5\s, ك'$aέPވo!?7)8xN(})$ԩ[G(T(mPꕥ#|777W7ϞGEGٻjPV$=~=sZsزmΝ,-}ԩm'OשS:.) I?d$BS.#/N!Ǯf]H 3*O+K*~ؽKg8\kff&9Xq N.&k0 BV+UJfEbii]ժV {i׮@y֗,YE|r%"74iؿL8OF'¿LxIC?RJصkWRCd ^M(#9^CaGLرSIFnԲ5aÆI[6n1nܸ<ƬV'|Ǜ'DQXE׆E"B׆hrsEҼIF:HĆ ֨^CV2yf0q*JR,kckSn6mGT(_-kNTI22_gPݻtbaa!m ͻox-1ͶXXXxJg0eg~j!JYTnx1gjMAr{,(E}cr!.n9Ojkckgk'x!H`𑿎)SjԨY#_2_!sצMk׮!!Fӯ3 W++1:[w|bϟ`fW!^!A\>w\^$B(9)ymAƘRRd:uOaSEŭ߬qQ >wPJ2y ¨Odv.U+W9ǥWM~uҥK.]Z3mLH<;xԑ#b˔>ݷeɒ«@fE'L}{Q~EB(E,3{ 98E\@9!䇠L!)C?rT#RD-%K !u/_ W>RH>ɖN)Daܘ)GLxQK>{f5?e mԠ5 ߸C -P6G6IMV " %_HrVC4[ÿm/RBYD Vv0{BBȧ+6"ϳHWWg4aŠ U(|X >\Lha~V_ [7^i RXZXC ]dOkL[c˙D_-kU6)KZ[Zdd/Y!Ѱa.]Q'mؽƻh|ȧܱ}gxxtbGVB)$''תQ э_i/^?(1t:<,<+yV7Fo4Nj{gFf&SL~x)V~%]_s s3Ϧ@(i٬E36 g@ınj9Oc@<_H1}lԲ!ωm<{ꢝZRZݾ/'mFeGJY]ر֭[M}r22yΗ/!DgN;s*CQRB,siꔝcF!#V'i///E֤&_lI<a "Zty s̊RvV~͚6lR.pK1(Eࡵ3} SLx@ٱmGZ5>{;Bȸ?Y&,ݖ8)%̹3ar)"Κ1{¯k+WLhrbXfKMz-HV2' F/>lަbc)2Bz.gF,L KجqnǦ8sS+=ƘI~VEerJE5DQȝYT*W\]zc 6PzmT5}re |* 1N^c0sl__ fVC2TÒ=Ԓ_<^%Hϋi.!vڢ948CѷGQ"ˆMz"S U gr ` F㭠EY[ Y=mv/B1aO\)tQlҴY_{9tٳ_B sg> ~cjedE5z M5vbJ;¹ Z}0wq.۹6g/>fƚUsʟM:ƭ99/ #GgpeW,˲lDD{wuk,(@h 0 %banbF^F̌^ieٱ9%VټՠIc21ɘwG1qbW_C?##ju!e B`_q0xmڴiѢÇ+Vضmے%JbXT(0 p'8_9bFj_j3Y49d̸1*UWޮݻ-[RNn?u{+(R嫛ᇋ/EAG>@?0B?^ؾB{HY|h<0i rk9ͻڵƷG !6֋֮ӷヸGQswqqSO?< 4dLz4#ׯ]eĠz ޣӏxٙ Jd 9vkW;uԻWﭛ>|ķon=%6.RZfe+=}Tmv朙^^&irNgϘ}];wl۾_-YfogojeddL@!|^VQêouޡ{ݽ{xQ}z|qˢЭsדG /gy4{Ko"C Kg5U…%@n ի+Gya%]v9F ~鲥M4qqvɚ{!@/]|+,Zpkׯ%'zx^<"J"dy*Fviwn ٸqq,Xp (4o?viZj/\D͟34?];)1)2*fpz666kVOO1222B4fٻ` (lَ&FSJEAgO6ĸĉS&޹gĐ!:&j`an!^7222O7ϷlYcʗ~ׄY? 3hJ wnj}BvgeiEr7wQ|!AoURo5)R\956.6NzZE)ۃ"54ڽ ZsשHAس{ORbR}^ 6m?wO5qjZA䚪22_-_RZ/^Xp &--SPa_ҮPe vZEw y癣={ҒeuhߡvڵZlY\|)BZjiilcJNY.(^]e5R"IRTߎ8~a/>y"R }z񰈰11[6nO7/S---}<|bc)S̅F㓐'669 L(sϋTʥwsT"O$5k&kI¶`B @2{kV!9*"um)%NNʕ0@k>k=[ķo^W`Š!<<t/#I |۶m፥P+VXb ֶZl>ڷС¯o CunݺedfUjPHSxa6+RqPFF4|:^*rԯsS\oU7Zm @SDGS똏Qf!07n^uh\ɯG o5 $vG)]k[L-%!mZn߿3]wǎxkן͛6H{};BaN;v^_sxqq'ϜJz22222T(RoW "4lH\\goգ+`͜.{;u1 ɿ_3מ:}Ԣ|:^2#@iiqCf%zyye#i~PRNF Dد jՐbJ# B1YUΣrʦ_FFFF+]BhF>NHt3g󗗧6 "Ξ[a+WOJ4VPK-e0.Кmݫt}snn.\Pb%J5uZujMG ~JxT53f('(P)(*r>@(a@%_N:<0uPɻ_ sU{;PIj~lqߪ%K|7~ZtQkK6#2VN7Θ:wʷ NDҫg8,5'MUVɩgJLe!P(PHBFKSu|HHH۶m1vvvONiܸq%,X`s ԯW7SN {vvvMPJ|læ'tO_*jמ@UbR9ɈiV7N_Pݹ0ow3Ō Ji%,-b ~tIȽYgʕ+1>vX8`gg\RJ77\SvgzNXw0`KEI#нxz J/VJ*8juf~(ޭ9ǬN*Rr#V?Kҭ[VOZ Jrˑ22#>ws}ҥK_4z/v966ɓꎕ $sşճ㍛=zYw9rdyVm5lDD"(PL_$ӌNC&(H1@%’3D"l)p~/%8pv֬Yy={-7\]]/_P)kUf߾-[~NSM췔ɤ3v9sK? E)Q ]WV6nI0·@^E^earKL%#G,\0PZ͛f uR3 ׶}Jw= ieX=ʛS/ U۱flYվU*fhkxR<0RN{<!$=+c#&B.u`f͚7~֭[Ϻccc|'O^lf46Wz.e5[}GtփUz~3 yү{yuZmѣGrbgYy@#:|LL/Ȳ֪Udh]x&)))44TRLN:^T\%2*`^d10AJVEQܶcÈ]AxXL (Wseٌ SNllJz.ȑ_`M5gϞYݺu֭6%%?0t|vFM^ܫMu ͟+Yu>7@3ϙFsn%]ʺ%Hˌx([Z{t<'$#fu˕/_>O+MKdXsycⳣR{t1vYФgkV/n4s#G~~zBB극PR.jQJuFF&ɑ>|óo)^x2en߾}s QEq哆"3f.aB߄].<YΛ7Odm)RܹsYoۛ \ ʱlD1OPA6n}ѓdY6w=#tp09ç&"1b[-[lٲٷۏ9盿 )u EqW89Q{BH:7n^о}S O d\ ThӲ_FFFB_'|LttLǦ5j,YOuwmCLl,fgj&,Qoի0}*)~@i?Oe#ۏjAT,˲3.0œ՟S*I.+/B<өDY ,4"-a/L!įtA'''^j%xh4?¼B !TR.9[:s̽{#lnn^/&##5`0S{ӋܻyRbTJ#h6 g͔J2/PRb;w"<}qzaa.bz?bF2^Ku޹nmk}sg,+7*&NC-_=sTdT![n=lذаPSK)##(/(E(13#3##=!벎+(L⩏ק"@P>vq4vd;[>:D!3u#๎}P/[B䅼B,-,/YWRjnaޫ_Cg:֮^;Hs'ΜXxΠe/=pwqٷ\+zx=.uэҹSgZesRҶlrIO߷_~}N]ZmrSSSZ% IOBx5o';=:>o!/L;{a&O /-D,YdM<-[*Es.CggoΰLͬRRR"##ט_hR q q:x }&OklzkL-LnsCeM~D"RJ"<bme51 Z« %JОк 쟨x( bSBgWޔ+8Iȓ!Cs6mgt@sa#)8EvRϞ߯7o}LoU!08^bE ]+AWYb BH^y ?==y塠Xon=Fc%1))~_l_<0ϝ>2w"{Z `B5omie۶Yz* otѾF/]1DQ,Uՠo*S`7rHA3 e;I+ ~U|=%)|ONNvZ6m0ׯ_73{gcǎ}!tcǎ-,'`uZ-J[g'upF'G<a\}~ 37clZc5O(QT*@~-ؿt=a$(vvv*ʔ)22R^}4zx ^S`BΝ;W~1oīc| &|vrttռL.Ƚw^F7n1޳gO͚5[Hw5kLƍy~„  5-u% ֖S1ca QJ%ɵ ZucmM)nk>|p#G'+kT!oBɠl޼Ymڼwi'"䧪Eۿo***߸ycׯK!?ڳK~"PbRbN:%x\{vڈ]vm.\8|޽7lйsgC5k6q¡x7+@Cq))Y;wpB1"osGf_'OY4&S$`LZa7E+ iE-1PB {hѶo`_!%aJcU):O0ƔR"ަ>">>>!)>Gw|^saÆi$$Yc6GWBHzP$dBr;%֦MO9u֯m?uԥK;B(33~[.0JywcL… ޜ9a{-x~EK ?E:W]diXAA6$"2vɲ% }?aRx;"aY{˛V B쯗5t?soе1UZ9O-'͏Ǎt:ĉ5kּgp;==]V۸_T߭{+vl^֚jr#*Bȵ+BNB^,k1cH^C&CX/"x5D p:}##H/K.T ϟ?GGGW\oӦMJO&''_e9˛YB5k԰К4B<'&%a(,Jlm8ˋ qZ գW@iZR'jdP&/FRzQ FCfZͧ8o"D#Ji5V~[ۧL#G:ۻnݺy^PH&M|Գٳg[.UΝ;sV6#<}*N]BHVoXha=~rstv#B1u socL=Bb332ݻ*e%z sNڵ,-,o޼W/By}b˒^gO3329rO={|rdѡ~0-j22Ot|ݻw}Krjժuӱc%Jlذgy{-3k.P+/}|_:0+ / }dŋ {#RmXvZO[.(:c֌1sƊ+Tj/~)Q)W--k:u0bXБA4^^6C1~DQҹYk(P((,#.|n|ƭ+[nԨQ>>G=:qf;w=ûW^66PBR+W!1{;vIuzQ5޵{z^ߦe=pB\­<>dx`+A-~J*͊moWo^-_nЀA0HZQIFF&!sNBHBBBllm۪V ,1bYzz:TX188X_~]҂ TR=$}L_ʭ" T9`;vZ !..͛+.sԨuD̙t3#@NFQ`%k͵-[\bE6l+7d??:^vu2yf΃1t)19M6t8%};{ѣG5?}xqǵh"5)5)#i⌉m\p?6t!0"-0NBHu!C4hP-ׯo߾Zz@gY%u֭[fo`߁'gmh^ "u{^c۵kWK$s-nђPdo} FD4J 9X`V@hLCD)ev| JMKLĀ5UVFJƣG7oj;m"GFE=PZغ#-1F@?hdd ;7p@ggg)RlҤIG͛7wwwJ<>o޼מ'".٥J~@Ԣ}J(? [~|x@%RJ9p?-5w…sguuqͣe7VO)-YT+TV]$"P@%͞1kZVP"HU*% 0`B J ,b9+Zh2eLCHs:?#\Juj?w%K}zG@JUpv}ׯ^j(\ {T (K)ɰ̊+6lTbr˝|J*"(b222ّ; (TRBPk+[p7 ltJoa s+WBɓw~饿-Uj'NlִY)RTjղᣵZ}{Aȋm(!d!]w9w938T+K.ٹkuץg{vxyy ~~~f*sgΙ3 zԬ^s3g demUbO4|UedS/Pgvh,PKR\W898~4;4bA/#Rڵj aZ5iEDBEZ ş`@Ĵlܲu[)9cN]c>re˕+[J/5s̗sws)Rh /Bc22e%/#&B+7pJRi͐uWFȗIK|O>1(P@!D7/#X?}<}Z:#b䨪B %teui︤ǜBI=-=sN^}r`WB0u~Q@!Yש]5j<>ӑIFYݻ yC\BEҢyw[{("9ĠKOwEyl 7#cAR|+ ۧ+W; +B>?xlc\_8hEKߴLv>ߟBHH}TV_Ӹ_]J̇2%?]pR5^=Q#Y|U`/A ݩNxb]A!Q JJ_$#խ \GWD^+C2%1_vuO#K]"!BD"WF:^&_˦BFFFSs-[| 6|=غu]FFFFFK&:>22hѢccǪW۴i#@%%%uiժU>}/s>{lҥׯ_ =zŋ;wܹsׯ_vرc}5|~=88pv֬Yy={|wnzh/e,Kʬ٠ E$ xB ␑Rɥ?r… oAժUk޼y6u9s,-{` KVFd bQ;v)ddr(D$oɥ5CJ 5(CF3Ko0AYfO;zQeGٲe˹˗ tN֏4V ]F놰KMpXY"ےعŋ|kwwѣGurD#?3z$#XI6Jie:;<@I To7%,'CF3#`M6I#Ϟ=+m4&eʔ|20pرM: z\,ǎ ݺ!C(ȲQ ^ϟ?_v̙3A08˲z;wV5,B͛ǎ3fXƩaYf5j( \ބa\\OjRY|af5(_|orJUreu ̙*/ܠlٷf{?vvv˗/R8mmm+G)XYYU\Ԃ|(޽{bŊpvvϺ =Z}L-L#?|ÇgRx2eܾ};ƜxeaC_> %3b yN YNvore||ɒ%[233'N9:2rqIaԔ]B22 4HJJJHHx7f͚%YV^meeUxcbbv1w\Je+>ʪQ@`&kPakkkjrq⣱cprW?qD8cƌ,0gΜQFI322RRRy[ZZ6kl>bڵ!7XR={ZPrf̘ajdddr'M>F>}d}8ow^!DOzY{˃WFFFFF泂0WW(JL-La&kP;dO>jԂ#G]kWS !##SivrR CF" ̙3-ߥ㟇=xB"PؒNdR*BrjTLVxk-#####5BR0JNIh1*S&$$PJGnjq>Ç=ݳQ͛7hԢׯ'O{3 #E Z>tҝ;wξq̘1!{ ,P(,X ZN7fa(-2/wի_ҫW/??O $Efa4/_nj^=:wss{3'!!aʔ)cF3}tS+#3s}͛7|Ν[tk ۷K#"" 򚎟6mΝ;ܹ# ?M-2׻vT*_޾}tŋ kL::~Μ9cƌɾESf5jÇAޕa`$nܸ'$$PJWX OOpS><LbjNb̙oTWB!?t}5l0))"dݺuHPq׮]_kkkS "M6-k>gΜyyxxHvmڵ?CZZiŦv%Ke˖EDDxzzfgĈuie5kVvGyfѣGYrҧM6?~^t:aCnۚSmos}AK,X`aa}4jAcʕiӦ7?:Νۅ tUV޽W^|wޅw="̲cǎ[n .̲rׯOOOߵkWZjeBmlln+TP/ evUDAY*߾}-[\vm.]j׮mjaed :p˚BJw'):~РAg׿*\yI//>>>..}4iiioV*ٟwR8t666gϞ4Do篿C||Ç_+X@,ޯ2m-Y۱z2GBBB|||bbbƍ_>`@DDӧOрs|PJ>ӐKOӥILC˸ ЬY3SKq5ocYdK.URr}SU-jjY>֭[t:Bٳ>ܸq75d!/^ܣGxv*~!###((lٲgϞجY3e !#G]xbZ6knݺ`̚5+##B͛7ڵk˗//}ZHpeƍ0ƅIoڴEN;fQ^jժ.\(tg1~arJ^_@t[j5bĈ%eӿڵkt=((… ocrJAmfja_?޾SNUV:u*22ڷ֤)%JHNN7 D2emT*]]]###F_$B!Ey~ҥN:~۵ZcXXXv"3mԩSR;xu[YY>{, ڠVϒxq޽۳g6 [yR773g«XuA!K*8ڵkWXq}Tti)=N}Æ P:ٳ'+`իW۷oOEQ]~=#>?xbN~ utH,_QFժU3ݻw߼ysnʖ-oݺk. .ͺ5jh4nذm۶| PA>. ,>|$4!ɓ'}L6mܹY2P-%VZ:uh4@@@B֭[K./_^z(Ǐnd.\ШQ#J:tH5k:tRRR=D۶mJj*BCCI&Y&EQ7o^޽`Ȑ!ׯ_߰aW޾}^ oعs !=vȲH.brzcN b`ҤIoߞ7o޺u!VZmٲ9ed>&85-UR4PNZ|aÆ!N>"̛7+x(Zhݺu(6l(Qeʔf IqܪUT*TCE?,XZYYխ[7!tիt:Iٔ)SfɦãyeMzT*o߮VP@\[lZV;Ji1S:uX:Fo}1%K .ZQߟSZmV5ᣌLDݰqC is;Ԑ`8n FS+ns 4h@TZ܃1>sG… {ʱR֬Y> ~ػgsy1?R lIDATy?5jݻ7k˦M[H222222SQ/.~R%Kݵ7Vi=^FFFFFF5"o};N)Rл:^FFFFF@^%EeKe M윌RS|i(;H-otOE"•TNFFFFFMj?kV!dca_P"v !(Ԩ^*xBhʤ)\9>C޲:jȰ!NN됑)de/u< DA 52222222aA7@B l )‚ %#dM`Z&\FM6Ν?wM(l\ed ^?8z(7'@)TR׬]7)1$LqGkʹ~GjT"Vf-/O|^FKRjoo/bbRGue/#;(JJG \UV|)9=fDEF1,#V@͵斖:PFSJ5*eJYX޾+Y%e]-WO'XΪQ=&R.QJVSSS1VVV< YwJz(9Y&P+QQqq!!!81>Qӥlll(`YU*JR)ސt IH[w>.z,"XU(WpqÇ]U3wg(}x⥉WPJ.))]-#&2"2]xŊ1¦?{vsϜ჏z"N8qyx$OZ?ny@-,ß`0u4wwеK WZMRgb:d~{ҥ/Yc|#GKR?{ !dee0LDd(.vvvFE؋ s+qYνII@NNNfffVk3,--យ)effzyzi͵F'Azyx8e[YXFǚ99;͞=vZ6,,LשT*w7# O<枞:.1!1#3] nݾ5tЙg֪Q 0$$$KRԾ>!<,<==LkP(sg0D urrrrrE1"""!!eYVL)DB &QQ ǹk4d0ϸwB,I OOKţǏTJ(.. /8&6MOTp Gpe=<*۷+Rݻ|XXAoИi<:mƴZ]8b6#=ciJRz>wb|ⓧOw>|3g߻wQCnްoeyxz0 ӢeRKIbgΜI eLjBĉm-^d41XѢusiG9\h֭WWkAJ/lF˄*/!FVS?w^]Uֽ{J+h(EIN8--ccb}߮ZjRǏ}acg?Zݳu˖,ԵSLDmkԬ1sLs9oI[+8BppkשF{O:ٱ}k׮)ewܥw͒B̚=+*:*:6a賧ڵhg0g'N9EGGwE <ܹtre˥sOrj'۶o;l"c"[j]vmٴqPJk׮|…6;k56m)RcDEF=y׷@!M6iTR:w}QBCGq# =hִُ]8x`W,ߪE+ZuBh˖---^<{ ~<|:uzujŪ+WܸyUVNIN~z%mEQܽgw.#EEKvmemiWzVZe6nx=GgXPЍ;Z׬Qa׮Μ;vs뎋˝wZnղE˅ "D9ʍuSj%g)-xyyM4jKW.EFDy츟ED_paa нG:> ~ҨA#{;*@ԪFVωH!:t6>sLmtrڕ .O?9?}76Bi_ѻǕWc׬ZSԧ_i? Fr;vيe} ecs΃:֮Yۿ)ԪYkƍaIKI+_iӒ,4e|Zk=yLXD[fM߾}NZVM7BJ===ppphѼGvlm_'egLzhߡ#Gh-;/dK##o>z)x{{􆿏mia١C'NhM{{`^4a!!!7ݼyftr˗/o߱qƓL ZaA-YT̷V4 H^( 91999]E^ i(bDF}'tY]p--1XLYG!oٮh޻@)[ i啑A 5x_U'<_,#L2NN6v6 q iv>6&6PQܿÇQ D'*l ,V@)\Fѥ(P"E\|%9)yϮ=(V(W!SrgOeffg]D$k6eY63#J(]֬R("`ii9qĵ֮]u]~UC𰷵OH}_!~rҞ~~vրyB ˲uc{.Wr!nnY-K/1E7߈tttpd1+tJ!TRsy26 )%))!/^:tYS{;1?YbsWR~ϰ (BȠ7^:.)F#D~dm+}C)Tۣ;#W^{{{iٻ)R-@sDJ4TjVVV*3Q4P@QJBS7vСj 60DA$bg˰+T~14.&n͆5@K/%BѢEѐɰIoЗ*^ B_srr273?{nBHJRRR|J( 0l/,Qk[ZN: 0,1W7W'g'*yǏ=mŪ˗-.31i)i ˕W)U^KcY6:!: MR (}A"0 bcgckgSV" !*|.ITD/(`|9::=Ko'pZ5u&^g9Vi ݿgB=sV$鳧9WT} 8D7y/WܶN:9I[6}9eDqc1{];;b,,ܿ(䑛A.~Rf5˲ ~C zu777s2ֶVVVw (Fa}^`F*E"("ksk7'7r?T`4hڢK.;vp^ZZU^wީnzA( @ f|2yVw'bQq+"?ɫ~_ӗK!>{jnnnog}!T6"LOKvZ.S3#"~ņ4ڠ!V<Z\Dw7Æj]a Rjik)ظ̌dJ<|pFЙ !TZ "/ؿwwN8,Yy#s7w7c P(2N:͚4>so֧o񄐸%XZY FXSOcQpuhڤEKJ*2@B ~vٴqS"Ĥĭ[EݽuխUVg̘amcm1kӪ/,~ĸD;&4}76i?؀吞,GJ(Rt@@m8 آ7J練\z0:GSuDRJ?&iӤ&Ͷi5J{inv}}ygcg8_[$hU*Zvd8~_ri^~B8A%oia_8ەu{/o}/Ȗ?5;wu L8(3,+zi[,_}4\lx['._Vݻ눣()oP׭_'֟9spcXl,?/q? GEeEm_歛<%04ṀS2˙ںΥ.?"BΆعc ƴNl|8\V,+P%{oٲe"1hfh4 ]_-:.E%paG\heQǑgji5k4jrߧrƍ]]ZT><04K:9iZ.7if"(⶝N//X`<>u׈iuv܎ FyM7qU2˰xoh4"%%a"tiW.Tf9VNOOgY6˞`ij Eң.Tf9֖qYƍaL.p~uթ5j5^5EGg{[=[ .{7&B0JF>S`AJ%SS-r\{ϱcK B׮Jz^n;77$IWK"4ڰW+ $}b鉍@2l0###\Xeer@ I"hB},5 Ey=^2)""'':A/w\H$%a |>_<qh0 \T)U&@c8ߏ,k6 8r$IߏB=L&~fhNp8"qt$X,pL*!hZ #ꌍƌFcP(FaooZF 2H 8&E`4hڔCʹsjjU& DbQ2N'4ð@0l1͟?_";D2r0,˪Uj(ɫW(*. gb]}W"Mc8IVuDc ݈͛V@Ә &*:;;ɤH$ڬ*(_/ EB P3͡PMCGGGqD`` @єRZ\ AYȊEt-YORI 3mn(xaG(WC}>H$t>OPh4^7 -` H8 BUjhFv3,cR=wV P*dbY6a322f3iPPhj$1 e` 2 aY/~styyѢEAHD,lenǹϒ%bBPTv=0W$ry4}ٽu{g?U=2h,W ,l6;p (>{'Uޱv__%Cp GP3_(UJcwS̾]5q5! WkR' ݻvSTPb6>zaL& >2J*,e䃓Ee .zMMU^H9t֭[R'^O9׵}mꭧ$3 |BV6vJo Y6&|. )< 0%T*U(\_W[7'qXY\TS S!ܹcJJy94!IU* 8 w[b,{#7sPT75qx\9сېJ ,(-)}%PHEF'Rs.+4 7V(e\{@ib ²l4dߚ !,e*bؖix] 97!$L&  4MϾ5]eX4˲H5&;OR=~m۶T|c1xIӞaH$r{cXLtdLs̾se:NEpxMC1$b08(IQ]"C4E?wݞw '26C;]aX3_f&q"@$:>-Wk<$},]`߾}Tw:4AB$IBv|m5}ȑN;z"tn߹qr )TA0ƲN>D8ub>B[wl5͛5%18|v+׬lӲMB|B͌jrWݻJJJڴle]grfg(۷P'NfM1ƕKC)zj޶][IrslҲE˄: BȨаPIM]TXY;v6t:7mT(ޭ{HHH۷H? m;&UP1ENO+P{.?!~X?ΨK9"hܸS'ʛ7kS|ŔSuքܜ|^g6 nw+//ߵwۯ3_aד^(e !:c\'ۿEٳFC֭z˃cbc8穧RfnXщ `N ;j :YW^^3KJB! tŧƼ(v(ЩS8بآȨeˌ(*)ڽ7\'𤡡@2!Da&X`S!F#L9EՉᔟL=y2$X$D9 BaJf E߰~8@t5Rcln[V|2NegffgGۿi^ݳ{O||uKG`@]@)\/󖖕ݿ744qeg zǹ{8ūnKmߦ}HhsB݄NjBBsr:I&vx߁}%e%9.8pS3Rw/s{j6F$Ng4\@[44444.s.8s/^!GqΛ4m^Y,=5s bu}Z}GFFvaӆMUkޢ9 2ZR0̽^:YV^k6~Nߡ炫e[֫zbB:tp)>/#3h2FEcdC$J _G9 [Ptl4U(1΁[-VŔk1[*V0&IppYYYvVvXXXdldiY)FXV+&8,*!&8$<$-#n'7Jv:233-A֠4HKLMkܰqlX&Xr{CCB4iW;teu4j @+* 8Kn VYp:9n06o9駟3vu Dta=陒N2 hf͋E6orz^=KA/[j!%d_J!uиTǿ=ABV _bW /+8RZ@+0BȒܮC;w:JdkզN VQ\A)_~'CI$8c #Kcbcru<" ιA9x=9,ɒ\5˲l4L0.8FcUX\ئUDBQZV+Ѕ]/~XV^vAٜ8H$&ԩC'tpuS ",09G:umHDۚ;L0UuppLwvHo#x|=V~񚌦6ڄC `9?1PNv;O!23A &J @Znm6hժU9贀5b`l VEjI Y̖S'Os΁CNnnD'Ey}2G-)*2MSA~c3ա@=00)6I U&  s P[(B8xcG &Wl0YNw|T<M0VLсJK#C#KsKu:]pHp@ ⿜1|^a4u.<<<-#-/+BvA+F!ip Brw~ndI:5"2<ĩʔY1&=~477t:X讲^&zs^V^&IࡃҀ*Їvj ϢW#G4jblׇܴU)L5VPjz];oub\",SR[}vhι6ꍪ-tM"RJ2F}ਉB]oyfMzX[ |€qC DG|w\ь̌‰WI#Pr(ʩS2f˼y=>1^a HTt"K3F:9*:*\nWR$ͨpEkhhh\Z\pՀ휉scL;w8B ñ IhP /i'ιApqEsFCCCCbBPJߠ ެI34ݙNcwI|U[8O.S SƥJ1x꣥RzKJJ!}< \3иAky=ק^XX_H@)IKCCCCCCEd5\R埅L0͍5\MKR @ޮE!0gNp(1>4WrX,)1Ƶt>LV49]+{W/cϞeqnO<ZnYλ6k gL1NnjI% !Nw T[~10H0~5qFů_)zEjZ'PՔ~L\{ :?AնԲrq'=chQ7:2.*T] Y`Kihhh\N0?/<u*..z}QF=2 B~cLN4iϞ=}L/OBٳ"Gxw~*oLN;QTR{7_(6o~0ƙ99rl67n2Yg>1F9I-‚du}C*YYY!!͛7?YY9gN:%BҬY3ŧ0ΌFcVV"6&1U P=4:&Z"RKv]2eu{NKOO7aao^&PLL t:<''Gpg0$owäg&クFQ&)))`{LCy{/rkhhh\ <خ]'O*1NKIIZgӧO&333 bٜv qTx.c|B%$MzaRIIIӦMU:wy}5n$@QTPu AU ~ou;w  BXˆi'W^\ޟ-_sڳϔF!kﮏ?xc꫷zq֧֩[2{kVw''%yd̯ڭ{MBΊQ27i˦›ܴe7bB$.B<=iѬ}W/ޭ_2QXH|5Թ+u{t_nmTTTϞ=ճ)NRx|๗;u~㷿7rȸ~c D0+좸mF͟0?ּ;E{ϽF S{UCq/P󏆆e1aS%]e.$bhϮ=ߟݷOիW^jڟ]ʿ6EGZĉׯ_rcΔn{III]t5jԃ>8~ZG5/nް1VNwߵo߾[n5.wv]7۔Sӧw͛4  Fm:֢Ң~scǎ$:dzq64m44,?$/hղ_O߻ pFJ-[<!I:VAE?ATtT.>1q0E6 1(t9UԋSF0ot:׮[ۼEΝ;{DPXDj'eZ%IzPh0̍4tBCz(XTP5Bj111=P5M)UB(>`fA 6<>SyyLYx*qQ%*gq3r3>rUBW/80TEh.-qƈ_~K.QG}Nr92.AuuSFcM|ԧAvk& :6f+-*2ִqӏ>_~HB1Jpe,p9̚92ڨYe-[iE`Ma `x= S0!Dna;C4np"ģ>jT#=~SNQQ&2h߂r*^=zB0e2&&r)BQR_aa?cN~1bĈG}"~1cڷLFINKی&d޴yS6m928 Wu`֍%G%ic-#9bbcc7n8x`=SO<ޠ$0y,aNG%:Ҵu,oԴQ:%%iYi0ER6fjhhh\r'l'|'''?"˲:'tm̘15gG?~|YYo[B5;Ztg^TM&ACIHHlF^z0W2zGѳG!_?1mAo|3qߝ~ Zuե 7vܧ~\ B6ٷI&374mBygXŰÈLz뭷?$<wy fCM8;v޲q/9߲aBO>dާ FNxl—_9bAovPQVu_~eiiiTtԘ/Ȍi3>iS%$&L8[o[;ƆC@@F%"1ʚ4nl ~f3oL}##=E:.;;{J o编˄F8*6;!EQ6lo>dX ^oAA$I}ل 2R3^zgc'oؿ~"22r䈑ԭQVM-ROIXB}' iw+6`UJCh媕GQ;*6?7))Idπojɵ35#uj=d:Btkuo˿\}.KrTN#LιApE#UcwߖUByv]P\m]V\X+/䂫6B~[S~nܨw XX5ԧ%@3)//_͂I w0AT+*22nxkظʫ\pAxתp>% c ,\c#K;Y;rDDl|pΉDgʭtC թ[m붪Cs@Xh`0iBl\0t*dmtԥS:>7ƥsG;ühׯߞ={?~FBtl07oqt;-JSGտbT?~`BCV+t/nwz-sYm6\s6"38˝l2 swB]"` k3x _PI@-{EsFyק^|? 37W~,^e*B(-=7ި[?#=1_JD@1|]w]\J?1[n<gdd{bܕnǥ$$${S/U]AHxܞ;Srysk ?8U(cLQ̢oC˖ Y5 qL ~s DQ/fgBDDD՛2Vr4 E=к Θ̚3upmߞ=Pr \?0!;`ЀTʿJ4a}s]z"88YZ.yܼ+ہgP¢`[f khZ*.- <AR 9@t D)x=V~!B5BBJ8Nd.Ba2v0[j1޹sgZzڰZ}R9\p}7fΓ.@XᲲ2j 7BBY9Y'O{ҽI0),, w9t. ㍛7N0 ca~a-xѢEO<=G~4(8,iB'O4 R!Ue<OKK=xN]սe[D!tԩ:quJ]!Fx֜Y}\!?up.Ld 1&/yAoHKKkԸ̑۸~O2ጟѸ\Tt*$> 9%!E3/55Ay'$Y|HO|LjcoYBL0؅:̯U BQ0)99 ;7_T Sȣ*c1: S3 ԕ]snJV@0Yd]+EQ璌}GGIz={֮V3!TXX믝L=ԷfY|C^{ Q <8,T$Iኆ!HZz)0yI] ;|y䒂o;!ΔW6J `]{nƤ+w" "BHq, -jN+/mU4}HBe2WV0k҂N54fxT}zq h ''ȑ#O>g'ۃk){SVbw1k,{UPPеCWVu^˲.]b: Pw}ٽg-篬U @,^q0=eǞz:uG"l!oM:`В V+xZڮ_-(--ά`[p)0>y"б rs0kwPoyGN+՚Z1޾uO۱ r]V~ޫ](D &8Tjo5*=vfx>(_JB c(JjZj ;999l?SЇM4_*_P"U&:p>֪MƵBu_\2neрi^N^ngϝcjsչnW}=rE-vG~Uu*6d"S@ ney\0Mpo~Ow0gN7>”v >X(B jR˪/"e?/۞TtTt-a8Rr:e~& KWA`+x c|:$۵ٲ@BHH[o&7(U0~$i埫ޛ^ǦԎ5sD⩶.?^{o't'#3#bQ!/=^ 02MzK)^1f2.BMGA!jWvR-a޹s7|C%@̞=[WT]7q;!vu(7 f>Fb<?> t (dJO=74$SN$6lb %~]V\TܱS;nܼQ0ѵkPػghLjtq^|jqx l&иʩjuy`_kT3}kےQޫN U^>r?gd·ݻ4glWRR0WΣ5{N .#|&y _8Æ:tz)d3Xr;צ|>wH^ɼO)?{ _SEұU4k$2!$UNWE>`10<l%$9 #.񔕔ԉd2Azf=$ SAJŘd#00ǎL~vs(gV"p;u.$p\YaaaVU`Q+zٕU1P| uӂx>2fdfT Q~=JpVL7mD)mݲlִzcCG‹3ޞQT\ԪUӏ?]bcL/ge|G>z>0SN=rDcRM5U̪-*O]AoCL|ҏ`|Cテ87wаCoÇ zxjCID J-sJ?*ZlY3BsX^/5$h!;r}3ޜa6Q󘐟>_p}; APZIOkIDJ;6p'Ǐ[).6+ i~3GJĞx2!Fԯ$ <]"μk'I  zޒ’(_) 8yd\l,)SթWZ\*_/a)**ʠ3PRA#f٪Z ֲ2ʗjo8=e+ d,S܇Xs6g~'edSJ &Gʔvl}ѱS`QjhiBTP\RPbZbɆB !L&Sxx-..v]ȈH[.Lgg&͞_mY,۬6xqi1benJ+LcI#Ҳ@a!,܂ӏ')z?} hqwaYZڽ[3z?{vv᷿[RRҡC>sLpMf]宷5qĄĄsU]:u?J~Ƶ@糖s-f?4Dתp'x%%@}\ 4xe VɌmmyQ2qPk6 tAT’`f{8 b˼^:bb 7&rZuGKDJH5%g⒭6 xqMbcbsT >e'dAɲji*$2D&!$<;7]#1>$0q&`p=nb5HS@Fz``tޠP/-3Mڷkz(P"H YGT?!}>r_1 ݼyN%%%@-W^7oؿdظسԖ N"_/z؈a֭SzvҳcƌQ[QGx-p.Gs0*x%$D񉓎3FȅpcG禦5+/1FV *s !~ƍ3(Go^'IǏoZ}>_թэ%dTʪ fe0dȐ:uPN+LOQ0 L` Sz j1VeD9U(j˼[ouĉnl?8k#"rժO?.;`'6h 9S S*8d-Z)/ANj:]peJ! CPF* TM2`^L!d:,dgS$EQ`QVVZ ѿfwQ ,u6k,>.>;'!TKʩ @88: ~~5v{YF2YM pjur֛EEFѠ7gU(+q.0Nӈn[^|z rF~,VUs}S8O' &C#˽2ϧW&cLTLzfdjݪ54 ߯UV?(H C+KDeu7qZN:;a>p83UqWapeOO|zŊǏ\^\qƿGu?w՞(Ye9>Pd<P:&Ys&P/~?Bs!SDdD@d2{*W˳qF.x-2!T 3P%>>~sݸq?ze P\G.$rͫ>UWS;cb|W-} -ߌ nRLN_2 ~c9M~]1n6ܬS"SutlC_BPP0W̓E$Urd|.IH!$L:SQ. HB$" !8\:$b#b%7 JR|e '97:su~~c:gz+$,D#5ٙqs0>/,$bQʁ[,YܒqF  \q1qc1q&B`fMfb Գ+ a5YiP7ha~3^@ `8} ՍU=8h4?yJJ ![v999QQQ'NWl?q|ӓz>ljZYd8x=@|.ۍ! 3L*/+w9 .Τ3SYYSUd.<>EQη[#dffRvy3u٩KÇnٺEp1`}E-jԸQN ;sŚk~a8|oNzj^Mݴel9K*˹(6EվF}@xVuW,W_T.㛦k'e[t)/0F9؊Sr.Ojչ .;o޿oe=-uً/{i*HN L_/VԹ\0kߡك~p{3g͚5rX/.?:GѪSs׾2ߚ:[ݮUZr&Vz+DGA(R\.B&0׫ʝ\pI/GAo;3.2x].jzGgQ'u2fE`4 j 6yb u{F}L'tz=T93,_<#+#QiӦCOu(^/~)/4m:3OzxW\6>K|as\塆v#c$]vSjI/#_jO[ׁjvҩkllÂ[h)@[% ڿ޽~_W^jpqqOz>"4n}%KY>=TQO@b #$;SE8}C@=x{tڬ1{eRBZFѤIG16kջgqbGu<8+wPͼd2f*%c^_-VD&:rQW!clpدoFMs8z9$IAU`]g@&]el ?ߕeȞHDg]1խǏ[nݺw |  nvssf͛7k~>8?dP9.\2f3Sm BIGDDT_j"4$tn!fA{dDdM.wNf bdڅ͢qyV-b33YuBC=BҢE uҸQp?ݳw To:P^ g~~*#uMӯ[]*\(4'/_ӗFɫ kΠUق1fu B՜מ\B!t նzj~7WՀV])2tz]6mg^zX8E bWL%s\)'Od !N9oӠ<wVˮ^[= }o5kcL崨롌^RU*m e>ojq)M U(K\rYw}yb_U8Gѕ.d \{B58ݮeOM|p Nc:v_Pn%Us^֐jRj41>tZ V5//ɓ$]AxUPPjи( @D"Wͦq| ^/ggrm'IZ2=)տҍ(--8`T?eLpLB̕7Ⱥ tu޸act:]b!D9r[obV]ƫ&WE~Xj0G ϡ_W]~~-v49zy_ѭ_=53ζnjX.ιO񕖔?؉czdƥSkWzD!IҐaC.ˏBu+r<0fcnF9^?E.0X~qʋ|#̚ř}k2^CCCCCG*!)'G>R#9՚ISBи 8^yY~}Zhx ku/&X'O:Mkhhhhh\pu]yObspm?^CCC]X^Z"'Lиf@Z}֤[/^HHH-IInlX+'gѸ, F^B5q@ v]I_qZZqcΞR{|޼g'?s/٫A9~q9Nja4s̴!x +W <^NBSߜ:dАzTq{i7XOGhނ1O) Jj4y~u]ur H.x.@Uri1}c,A ; _ea@[jfdc8'>6~0&/`yyc!v/?gdۂlAAA9!yXhƘ۷o[3|>B(777d2$""84LjXTR4lߖy #-\cX 8]N_~{txP aĘkhhh D KҌ/}!gB0ټuǟ||c'=7C~P2prum޲}:йKtÇփq&p\vz|ㅅuO?/>p޽jq99}/$|8uv:W;?:㜳3 x<^CCC_aD$静䦤9I |坻oղfg}8>ٽ 4[A$IkdYdY,]ƎNZ u`02E?,:t,K,ӧODd!gef}'3ߝG-Ym۶q}oƎ[TXraÆ+ݣZ3dF`\[иP{Og:`)(6(L]<'cQdaa}z|z;看ZR6n0̲,!i_k=`xsR.xxXwgvMխ[7^ѸVXߺu|F[o5p8G-[vĉ+ q6:zWEh5ȣcUU q}PgW^z OHԯoRJDrm۷=9$ϟ~) l{ m[mۺy;R|֭[ٳgʔ)Bqm͛7M6---̝;755YfW4444:ԅwFR? 9\?claz_T@@gՁpΛ6n I]5&-.J˲ܪU Ê+Zh1f̘;f̘v; Z ~KPA:O"k Q}oۯoZmm}8sf9#}k __`TmO}ݻ|{U9*4Clܨ~.k'ؾBBи_FB }q*#j46=.\ܹrEFFV>x[8BȊ+{1+7-:tGRtGRj]~NA>Q+aܥ xeΜ9O?䫯.ҁ]VF3&Tkhh!D޽^z+] eӧozJZp%2r)Ps".Igkzt {X7#nƹGG_Zhh\V.V{?ĭZjժo֣Ǒȉc֞zU{:t,yh :YyP85=khp(IҞ={*< 1E`v9Py …l֭[WNڴiPUCCCCCqQWC}}mذW^QC 6mZy.\~TCCCCCC_׮]{w7N5|7'MqƟRٳgu]'I3"dY￯thhhhhh7(o߾c]t @.]c]tQZ=zȲ ѣG0aj4.jh\I`B(sW!v*E Q\^}bb?XO'N8qbkz-[vikcMVTTtd#51sAWã末944.X5+j3GGx틗,3ލ&e9h)?M0y՗6i:lذ@1@{ٸn3ݯ0?3gΚ~0Fc1ޑG948)c?YJlم~;ﺓ3EϐСC{uTu-TC ~[!8C0Ffyҟ$BC kYNtc/?&NsLsş֏` %yАA:uDƵ'rp xQ3޽{ڿ.m9@B!& " ` X[aM@0A$`UR NrƢY&P t21!q{֭OdA@& B0AL^{Gc_y KX`$, ,$,!@ӤFBCB 0t`JJ6z;gB/Yk׮Y͢0Bb%\HB]K8д*j)_TX!@j9[{0YP3_4h'|s Ar?l6|7>fU,x?[nC^o17馛(X`L0\F2\ !@!8pB.|<4˹袭.(?Q,#uAQFA ! %ɣ [ ( fA9E  YI 4X91fc.Q ",L/O1XLbD92s^(,E!VQR2m]Q&' 2ՌBpB⒄$J;'p2p@Blj g!0t #GUyRC!`뻅+x/z/!2~ ?$#I?5~a{ff_ 24&:c=Tݳ4` :p@XIi~}C>î椦 !z0}1f=xmǶ۶Bg ;wlݺLF .4Lbۂe/}ݣߤIQۮ6]vۨ7։=w%*DQZ1ƿ_<$d@XȲL$+ & 80qBj QNPJukv# oPE5m$پCaQq,wbMb,\9fo:wfZm|Ap, (/,cZD.ݏuB/"I d1"k߯NQ{ٟi2 ١ŝnb92n1xA3^2 d@%QL //urŠ2Qt !@A $, Ip K  !>{Dzw ;g?7わ=aÆr=8緌OOpr:-$1ox+4,#ǎL>ÏaK|XM/1f̜(u0ΆZTX4v=11qirXdIllիӝ:yjڛ۷o1C E?,Z5k`Njjo19gfDxĠA@@XXm6wX(]xã6`1U-BH@[oI般xO3 X&rsn{Dpäs6pHK;tpFPe/gMNs&P/E.,}g#Fw۷xlt]ϠA0ٰqdnղA]~vaa歛W^dUB>cΝ; r=w:G3򬬬9o~K_}vb|7MQw~^sxXN65g>26hڿֺiӧ|/>x^pЉ' 3һvJ$¨ e C dxOK?j9{d<}~ʱ)IuG8#bA^\`a{QTyðOFFLX7&f*.;SH J'Ab' )hϞ qAbwZCb`3FeՉ r:͓">U_(DP8)D{iIMs&)>d9]JZFiS)wV9$z[%nI2'Kt2z>{yFlD1e0Hq8aSRDv;tkE?zӭ[Sx:Oh0./@,٨$+!' zblX2cj\ؠmP^NUi,F(9`0 @:HL8Ა9 1*.0騌taF.Xj!qBLɢD>q`EGE!GoذG׮9'Y\t#8.@ yns[n7_0+T!lܴ0{O>QwYV|>c;s ]FQMY^x={g_%yϝomjR:9UTƁ\p͒rx Iȡ'yYD%%vЄ-.ZSzwعw51N [حC[<-ZqRZޗeoB ت1%X+0ЕQ׵%^!~S͛nߑzwmоM)M{ǃmƉz7ǻs2Km~ݶG A ͺ{FRRr6ް_#H,]۵ߗ2b`'~X#3YtPcnvy ]` Pd dr r @jBlV(qAH !vp{0(Je^E/0B 5yL@ݣAfe. tDǹܷ ηDsbbBC F-X뫯N|#g#xclGxs0{^WoРA.]gΞ7*?p7c10@09~.@?q6s~}EFDZիWZKWi׶M`ߥ.eI cPXƑuo>r=XJݓ ܚy9m&͗z|&#' 83A|'_nغK8d`?} NOϥác^S­6e#5aIC)'ڷ)/;dd;mᄡdWaA.Xs= PTNK\fN-*f3UwP"LJ(NGJ)Gda48;Sv_J<4N MClIKfN-*fU/LHK" Do0,&Ѥ7[fQg:Aa2*F=DȠ>+Kc'D!WO9ܱSQ!ٷo߲:x݆up4PC}1?|0_;.-#n1|D6m?a1k^ ;wt9jR)5n4|Æ6^zWW'+s"#n4[q1lx30#HRoqqy>(8X ~㐙c[v}MO91U7JF˔#%_.VTT Ce >=8z,=$\i,8 @UNj G}@@1,v߱e,,09pʐ`n8~6Mz+dNe`Z^O3SO}z2ԩ >@P$bIr?pV)0DL2"t:JcV(b'P .Ai9M@0&N Ipe$C s!ANPAPlApLjeڃ #t: K{&4ϯ(_̙ܩ]*tw2M발UP0ᅹ2elYƏBdkⶣs9ONJ󛷁 7˿V5[mzkom۶FqFNsAO>dii/G3n'PNNNBBBOBZPPW_~hΝ;Fz !B!:bXV6&BDGFDj.9<*TSF1Azucfh. X&[ͺf ž}'x`cǶud/ADSI"(=w=ZEG<^2JB8ʉL#ZGs(u={`%@N]X8l!2ݞRt'c ::,:Қv{rs[H i8.7k*LV$  |: 5> ܿG*9e-7B[4+.(,c YEσԫ2j5QH4dj|HsDDs (j5b8 22Q:ݴILej+plL3XutD~mN2u` :N~XDa XD"_*53h0[n$ !6׸puߔ ι8{oZJݺKHߺ}k=?_~e{3$IBzt!IA0am۴w9_ ۷sYj%Txپs{jz~ c JKJ ON_UV{?*ɲ,2!"K$It^& yo@ vs_;u# J\mJJPoݓX7ލKz lh"S$0Baʤ۵i_v^(,IBLٺe;]]e%~B08BJ̺sDRE= M鍗GX>WhK OY ~ROՙD@$6l;֤~:2ŅV ߂lV u&EЯˮ}nG/9Jq 5hA5@4ʲ_*cBu:_LPPB-VZN7 rZ6+u8ii RPRA A_|L}EFZXL1=DQWx}꟢Ч BNX t]d=!6IMzgSn#!6B"иBPJ~Uk>#K.%ata2Цu֭[p.DzsGݮƌr$e˶-ꠟRRuZSTR5$Kc~W_u̙ nӪ'+4p>o!AAA_XTۣ{(t!;wT|J`|;;nx=׬{@J [PP g8=Nt}'7L(**8`VBρ1ªvLd! YHD5&/ۺda;T%Νb**̵&뉻R`YY-$\t1URs΃‚nlNBpe"SR,6khy3s bc[^Ӓ`GF扰fFFNFo =r˅G;kǺG>u#[mCRCu&sAo6GA 6]Fa.6"<$+&a6[7_}4:*G_" ufeegEEB|.uaNwDzNG7 W׾+sl'1N%ɠ&+.% v_,cav_^ u\@])vȔݦAԧ LDCĊeujE:vm8+#`"#9QtA C1& 2IEĉO `/p$nd.lVEEF2ңI[ &kqu.É5j`O<9pg~;QY8Qz'OuС\_ l!D^^n7MYAAAfYyJK"""TwŔшXQbu=" F'zPJ= n+9.m (OBp( ]#gf#/70r7`w{ V ]:k]p*.֠H+!U(d,<(Ƃj"%A\e^ 5lҵcNΤg lT$ rJ#dNǂ-Z:[!0Z!X!^pVp+P dT$_U.%5`da1BX !! 0}"Rdb0{0B 0 LN]qׯ_y}kח$I][,}7꾮]pCBBlPdd$PFL @We:,S|fl1SFM&SƘ=ĮV\oN}S_>{z٧?|C KrTdT J#Ǹe@'~$$NedA`JD$N 2 D D"X +X|wfXxXuMuXJ_ <z^Z~]U{K) X p)ޛmɵ+-sg;ta#T7$N$’:kmpi:9KN@]쳢@ ,2`E`: 2t(A'A tR `€`!*eb|2jY] n{^a^sy`tkq2Ucz Aq{οSUG{X]<:C\pΘVP]jD|\||\:*'wK,>bY'U_k"^l5=$ϒ{?,UCt??=[/" 97?jJsq> 6qe<1*hѾ5.U1΍?Ŀ;PIAa4i~m~ JM=9kOv"5444.׶иR @/Rj)*V$":txo1u< 11jm K:Se'gEsWA>xgy4" G-Y:_E_{޼]@sv=ܭEи`//ZH×y{8Swgۺ}k5Τdƅ9 o֤evvADDDddXddxhhO;fҳ֬ѬIKtSإ%hL:uޛ^NNgG@09zh=y)SO>5dȐ6JDԨ/3и@BC:oeSX7 [D;ʫ}QMX@r,I>dGy"I!,$IX^/ɒzPt:5M\cIz^eF,#ՙ$IY.]m߆1%yӻo>}عC$}N?W^=yCiӧa !999VagΙpu|@$2aoH4I۶mӦgGU`y<z=F:3B]gモ?4kݺcl'o=Qrcmq qɲ|cǏUO?B7x=;ܼ#){wW}n߱="&io"|>߻/q⤉{!v:l(z_Bvܑp֩4d&e1 1o2ޝZ,ン>c:Bh挙ne xߨ֭]p:nֱM#ʲ|ĉ o]wE &*IDAT1|@ЮÃ<|DP/?/b׮]o?I U r2~СNIIݾ`ךĉ7|'G/^aÆ+U@9rW^aU1\dQS|7ϩ19W95BãӷϘcG3JΕg>C1y=ׯ?׻{CBB#ˇF?zuR zFXVsCCnIN*)-IJJգ(5k0ԶU֭Z{}^5B`ofXXޭ{rr0 UL2v;G9 -Z` Q:aic[PP0w\i \馛/_SOmܸ1//uC _[3馛^y!!^飮h\% @Dbct]E/(Y7Gs9l4.֭;}އ!j5w $ oѧG\L +'vQݢcvy쑌 O lB 7`Ŋ׬k_B3պ#[ ?)$g;3zG#GHW_qsf͉;ojeVmɍ5.|~ժUEEEqqq!sWsVϳD=._|yaw]vzM4-ZЯ~U\ ._e{{=4jڈaqcq<7bԈ-ZX[ N0lɻ>}}mll^xuϟCBB2C>z(=X,V; VD#g{Q#){{{EK<X.O/X޶-B7b*-= O0p^ 4ؼes^֯Y/<ϻVv512!@X煃nݼo_G".G+ˏ- I#ÇׯÇgϞ|ݖ塡!+"hAȯdHR9RF5##K0(BȷoEc.a-S]pY$5oռE<[7*nBxnj3fztѳ[Oj [ǼPr˂"sgeXFx/ UWrreʗ/\ظر>c3|9WfFyc^NÇ9|$BHXqqd<3Nq\*G H$9l${<9xeثׯ2xrNNEL~uI|}}sK޽={vЦM6md~݂ ~7רOzꞽzs(/^zj}8Bj˖d{K%“x 444RRR4449oy[IJaÇlRB)1y y:~q&ЈRloݴU**jJXXݵW[[b؄nU<2c uUuIA]O>ԩSY__| gϞQ0{?YfUܫdu֞{¤;XY[9eݺרUtttD"LP*D"8~xض>^Z&mٲ%&>塥Ç];vR 9vX|TB_y}jjE !t{voZ)!>a 666+TT\ (44C!=H0TT߼R(`*:MAƯC= 󺺺ƪ`55Z|rӧ3g_޽{̙ _w1|-[_k׮={e !<:Çɩɍ5c7oܤ;0SR{UZլp&U7gw/_:q[?sf#FX[UV͙7kׄgg羽e'铧vvv^RLŒԴֿp={*ƽO?ܺ{…B|5o߾ru֖>hРe2 ?~ѣM6۷/8pnܸ.B[؍DƤ>|CRTtTphpʕ>08bnjnog/~2eB{733di)i>~zuSSS RRx8J7v ˲D"QQUWPĮs~-+(&&ÐmSK=B)l޽{ױcG?K.-\koo(|uvvfy~aρk֬ٸiN8qͺ5Bޗ_B!aFHτ^J":yjZjD*At>i-[dO i(;! @zz89'WUUnÃrB <~t`N؇f/dEape%/9x}bw K$ER1ocm3}挩әͣG-AJaXe_ A9N[zկ)JQAu~0wh;BQRvTtT V\D8`CjiL7yLp( R|:8+U5\.]|PKR"EBPrE/L#GO{Z֖ԍB(3TS( c~ԓ'n x!?gdbeYA('VOg=!):B=z Jd0/^|qP(@u< !/5iѴz!=23yjsZZBdS(?1Աӊr46VNg΂B)^POByc9Z5Ws+c<{͚9 xAmOa||| &VRU**ZXWW7""@׮=+XA*4BQVBӧκں%Uc͍bcc-Kq(Xuj,_~ڥ4PO![MJ4'Br4]-]@R]ov|BԇBH/L #`Ls .,0ObYիO*U>uΟ8gShX/!aAc֦ؔ=L()J6ݻQF /|McF'>ry''[5VVt (  0Ɲ:v9{du8treݴ8kܰ1<ߴq/  VS>}tSrZBQhBw6k`>`eUV&L0666QQ?|8_œ'LRBQfJgPFKB bribYV,bHIJ,uԢxBv_b_={ݴI `W,]ѱzN 555J?R([;wߏrqqի8nȑ۷*~ rБn=@dtkٲ_eiӦ ^ZVRBƍiQ"J \խꑣG߾ ܻb-11 wmۡ޽; <__r吐J***:u?>xʪhtޫwnX;}tܶĠ0<ӟ\ zecǎ͘:L2C>oٲҹDYC-]"S4iRj3nظa"Vԥk~I$EK)`2sƴׯƌe7cq㦳LII{ )!_ʕ+?}tڴiCCΝ;oذ!罎= ht;W=}ةc>>J, k=ֿOVM[u޿kֺYϞ=/] BR\r1/;X4(b-[2a܄S&y&smFܹe۷~ ha)&ܜeԯ^qS#f{LK_hb@&]pRJ ]tyQQcѫo=rt,b3MɩׯQM6Y~='""{]ۣvA?| iyz{B.^jj\b6^UU!  j{֮\iӫUZ*ƉD%S#5Կ&|N3"fϸ[wn6kJZ? $\R <]E ٳ(ӧO_zy+&&&;~L.G$A*r糾Btu4mȰ[nj `CS11p ˝]x۸Zw.PRyaaa1e˖}nbBujjjZj-,Ǐ 4 H Jm݅K:u(Z PahLLLPPJNNNII  kT*u40s&&&us{?4csXT`hղUddD",>w :r#GDۍ޳c0fVfB)R㭭E"ӧO.,pwQͲ䠉3U_KBu+T\,|QE["!ԮM۱>>j=ts>OIAVVVrt>R E?|ʕ+gUꁁwQt(F[wXf`Y.BPL^l9{={ϟ?u֬Y/nժ… KBC6&-7ߵ{e7Wmm= Uh EK_zU$COOOWWgϞӦM޾}ĉׯ_~ƍZZZ0qD===--'*("EȚ2b  .EDFG'%&JNJѓ/;MMϟ5aBH͚5}||2֬Y5kf.133[nV_t #xr󸤺(_߽Mѵ_S8tׯAUؓ'oΟ;K.B)uׯرcٮ7nܸq.i֬YfdJN`yсa9X"$Eyæ>ZϭaXe؟\c\͞9¥]V *dxBJfx7%ϨVvMJNJLJ,x@qX1󆆆 /]ٱs'a&f1s 64ؾ/^_&g%9+PO+*ZR=C}ñƦqFy֎mwsՋAUFR|yZTBQ4`B)𘷶 I  wތi3sO0i׶c_F,֫(Jqx CT!,49 `-4|(LpnYC͞g"V'#(R oɬ;'0Ɠ'N6l#޻Z8OeyWuYЫW45 tttdJB)x %{2;&8  Us724*yJ c\w>|SF #<&%1~;v1"o/  @x %{&TT4<~jǏ-Wac~֌͚ Nrq/9aذ  PJ9%/ZK<1'0B =ښFH@^.v)Jf I_yE'`'L}u[[WZeH4DĈD"D pbE< ElUJg&44tĉ>|( PӦMGf"ϟΝ]UV:u~[}=SMMM $&'ƚY5`޺:`cX<߳{Or(ec1ŒaJpڴiSf;vXRԴg{zzSǟ={,*euם8q_~;s8N^0R0a5G p/ <99'O+AR252-0 &%0]FwDAAÆ\l{ǎ\G?0^c KvCji񄨋Uj8DE:|~= ˰6@ vQ( %cBwK1"O)yBAOy̧Lϻ@ zFCqKMMYxz6|z+?]XtiL 'Gӏ[ljɬծQ S5eهO1|ጪU0 e;wJ%u*BQ,)v0y<gvU8I>ct: `''$d[Un0:!(<5Ilsv_u#Vx)X޾[\q-eE{fXX$!B).xRx%F|ˇp1\x~>Y{;jii:1Q6~玚7ke`Hive&jU#BxK˜_֝[ [ YD?}6mqmD[EÃ흵>m؃i 1wH$6Bd'|PM8{ ߧI!g$ܦp.[|B:::ZZ9߻BtuTTTmbXfJOgzxx,^ LMM8֪^`fC:12msTKka}tӍoܼ}պkMl{h.V ЧY{cPDf?VMEUe R)E:P@2l`@kWԣefM%%&;~]:J@%t2`&.6ҨY]~tsRr"64iҤHq*a+mfs<ߦկ^Yqʥ+89G̞1k>3{72Ї"Ks)sxBa/tRK}gK@0']nyB0!Ń+V%gxL&-KR(4xa"@!˲ϟ>>{ky֭[O4e%VV?&&WL(f!@oGM)O݅ZlqBlB5ĪA 6 kGn} ¤u?F1fe asRSewf٦1HCrk7o3:qܨcŠ^N k3wDk\tx%;hbx0[W4pDAQ>$$Օ̧|<ݏgtu0_T?RB):BAKO+Yέ;3lڤvnYBEHMK]z'Pϫ*ܨB|X굫^[gooHXX굫Eq׻o5j;s cgy|۶m/K lѬS'wٕݿWDzjtÍ'B+ŕ=Wj*I&tQKE=xy;t8&:W߾ (;:07o\;6cu3'1+@,u#S_R˵SO;܉zWuq;hcd*c|?) iݭ+IN]O]<"HPJׯre1ƥ|zOS{1b$Už ׮YosLeoܼe,]:]*99:mܻw_ztl۷GݎJH ѰA}LxB5`ŲQF}-.~}pԨH KKZ B-Ssϰ&c\ٵE =#q}o`[ֶc)))jG%\ TީƹPޤ%@MvgOmcL᠙%b&`E~ҋܤZ'̞~.uPR7ow…`<b$QNxęK0ƀA&j'2d(pTHs>, cAcPNb gml,zq}a0}ϭr*U$bILtt~}Y >#b熫]֕s^[%0-Jϣs%426ebcoDFq|v`[[Z XI !IhhKCHfE+R ):cWW7n߿o߾NNNϟPBގ"%2",=]&|*ZJz `S%RHz$H= {]=t /_̭ `.&!Զ}{ {dx[U/kBkV:K x9)9!pxْ3ZjUNQSVpl`',_sIWtR>B W^AA L e\]](Qt:^$ɓUUUs]vׯ_zuDE˷ OM#7㝏aTt<@|ݶ&,JsOxsO>yuV0M[)#|x_$ HwAWܴa5U/J519/m!B铧oIL2OI0AFEEVȠ;Vٜ7@@,fg~"& Eqر#~m۶HĪjgrp z]HV2uVeX#An[ڸ|.WGv伋]0Bxv:ںaX;kK-vXzC K->bߩ\S 2o]':udf_~>YV?Rp̔PXRb:8;[ԫW0֭ (t۷outttusqJ(۵1Gsp(b|̬\j݉kˆߋ.Դ+nXӮQ3?k{y9,b˗/~j&0lڰq.gLMM 50*\ (%H{Y^6zݻw3%''^Z.&["9Ƹf͚7n4xP2% y:::~z̘1%&5k̹UkVs~a-\y}IpW./ J!U22 ZS*!aB2D99Z"! 5}ށ1d*-RÇ6ϟ?{DpC,zsY0̃3aTeo޼qZmeeqݺ K\ EPx++q@bbtB6l"r3;ƸJ*,T/`nn`k573ϕPvQD2B9 L0!1$xs3t<˲iڬPڕe7~xԸQߝQ|U'-T_jU7o 3nۺu\J%g,VZ%[ce$S+k0*UrqqQt a"ۨT۴jYAeÿ YC Cʉ㸭,}{?jFb_=N>~n/,˾zڽj 9mtJwM`fy} k8he˫b*O,ڸ̩X&Bl_#Wصb0G]:u{yܖgߎNhi[ףPuֽvZJJ̎}aT_RR&DsFr۳ yzԩ1Ƙ׏< 4hax:̡<ɹN 8ab]/Ϗ<w$I9a+zeJғoBϞ_ ~*XKkikVf-xҴ-իzy 8Ю6kn(O)=_rsֻk͚5@ "۽C": dvqƌm[Vԭk[#ڹ@rދ`acWԶBc͙>AF~!x Tϫ1 TTevj۶MQHK(E>+̩=:!!AXcKKɓ'+( (rZ;}"Uxjs<'_"XEҠ^}{;eEbш1#Ebf#qvn= 0a)spab[XG[>WZUsjը\:ecbAT">'n@7CPRDZz:dۮ޾Td2H$ӭ٪]U\kd6_& Jt|*U:)  233St'P(!İ{-f+I꩕4sCs !^u/^Eޞ﻾y&FO0LJjʣu))?Y !sg.k~hXXc6 Шٛwwe jkM|S#@!!?zGG?~G 鉄1Tטl+7[qm6Da}||| % :`3!1E;iݢU.4Bz~.b+bW/Y/V[^*8sH7fB!avL#w5f<7Ok=xQ#oDgFenښc YfؠaVq/ pRL͌ W9ZR)ع=zѣ00H$b0~"@|D"$_6,~ʘbo% kIS r+!z;v?Khȷo_Ӝ;e_%9{֥e<1"A_5ϧ>͚:qjV}|劕*2l,˾z*u[#: kd9ЬI+VZ5AFIvܸyZ3 }1ױcjUWOx2;503~qMG+>>W`uuRFD~eM>MH:qW>Q$橚/m if@azJNihWԔx}=E$Bb~4]U-'Kx`Ւ5k bjf۠ӷoZ=oe :eƪb$QzK~0&k4Hİ0?4~ܦ;diPX<^tϴNJb%Z2+DwEDBQA1S:B>=)֕7i1{{kъ+ivejz54scc}{7;VT#2-J}t*J$hjmZ\`H.6۲~[`[<}ʹR9?}PΡH$m)Ly rGuܩ=ee⚉FdߙXA>lj5&\w7L91ii?X}<_Ebr v y ߹wg׌eC6$ h*X_|]Aȥ!|%~2{ȹP®uCSNOkT%y+`Ҧu;o8"vٕHG dO8!4yG[[oz^}X0쨖ƏWD:^ `뫧פQ7͙=0 ’t\z< G[z]MYݴ}sKu&ۦ;eS D7_L릛휶R99Y}ÎY#&z$EoCݘ;gOa]/dSN01Tm^;ڦ4i{$`BuutB:@v w[fsPKe#7ĸ ڤ'Q3\{A,î7%~HVgWqҜ*xJ)fLVG{XaR[;Lf號?竐+˰իUP3BAȫ, ä?TF)U9HȄ$0 ӳK{:bD4$޼!>|C59M4F~M}{b1u^mؼAm-HGeM 9},ꙜL8QeUԶ@0"CL~ Hk2)B4n_U7B}wɼ+/GAFWY;V-vشS&7;w|-Noصv1_xV .>S'(PҢ \=0,`〉R}D$67o(j>~3 ٳ<X=I4S!@T>5fe틶PUl*c%@QK7[m3{b+EF%f $6Hܴ~ݢCym-g ґݸc[Juʨd$!`ȪԮ_yI1֦ƦH 0o߾?qO8vǏ8qĉ>exBtu5ILL~2B-[ :eYn'M9c.Rzd\VwmSHWHtݳ?|8ojsqRF a`Rg11lO2gp7 iLPlu}=uԷp͸/X}}?3ܐq qC'aA)T0sry^{̘3ۥsO;!{5gzOeX?i™E֮[7|s%{*ƽO?{pS?4NNQ|`+e "eN4`M;e u$F-w8}xyӷ,03<Mk})kU;V c Ur*߻oѮ>}d*KW.][olہ' oߖ%AFe쪸j-=SR+i CF9sB 7Nլ^CwO'OgTOON!maas-?RV^U|Ч^JYe㐐oO"F υk R(OбK;TPFbX}軗0#AπTn/Q?}XqjiU$IHN\6oŃY\qT n*[.Wjc|(7yˏGaa1ؾ׈o܏n|Bȅs_Ū&.Z;cSƎ.d ^AʂU~wu ]yy#3ck\McAέ\r׮]=v=[AynkCB;s6t`[#`@7wl!4}f9f i~TD۷ߵTЀ̏{3@{#0۵i3eks\]I(5k>cZȑrtn۶Xdd!G.;eRc\ZI!HFy6Hgf1f۫g}+<4 y'/B"0 8OUӳ!M:XD&UR2c dE ~&n-[mЀ]\޾} _췻{nrN޿g` xJtxDe?yc9mAWz\X]MR gXfN/<%.z8_xH~+,5>I&Ov#4%bE&ܴHdBO0gZ˨}0O]`|g8ޣ_PHo//A؄dD0L+ڂy˯DFy"2ҍZZE:2@Z5o;|5)i~ԋ[dS{QTT1ԂyU4433y~}6ࠠ/@T3K$ xB|&M>QǏ1-6 ˰ +W0u`H001p'jרE Dg.!㸞]{DD?ڽɴKTY3EV7w||ټRBXYY[N* vx-[S,f +JLpjg̞٫w/q9@>~o`1gsa-Z6B *nXSCӳg.2#`Yѣ'x޻g/1sqecܤqO^c1߮Mۿ)Iؖ)il޲xPAbXko[iWN< *SڿǼiW_v?CNF1o[v萡EK Jc>3'OS<ׯwƇYpG0,#DqhVwkW Il~z cmYʕ n + JL"R^Q P|BBxD¿ yEuR" ͝_QR>w8>l _MZ*U5lCqBNIUt^0 g gY@N1nѼW&ǸM7P(J, |ƏKG t2ׯ?:v?k+A<kX-1UlJ1ؼfM{[T2v _hBܮVUE&3^u*.8|_ 7jeoԨ0a||P 'dRߺBP Ү[nnϙ3*3G=07^yCs/ @+W-O>pc mZВs]r 3V6iֶ9sZ!)x=s'Nl0{ؙN5 0 1J@A E~(:L EVWW׆ .M63fƸw_x9~pT"@&H$fMZ|ݵK_SE|HֈIߪ׭#ym/..: l[p؄q"-$1fYmkl+5kUv kYCYg]oOZFB)}Zv퀀ʕ+3 s…5k8qB__?߿_Z5ssC?BG{] ?5tBSSm;V"Gsuׯ0U\|v/@RF]r)E=,-t2w^ѫWfO`nNLWWڶ퐅[K5>d#G߾;`"#Cg^ P(%/~~~Vz葿ܹӽ{l7332dȕ+WLLLc쩓wۿ_O_q/={vM65ly%Iʕ\N|n-Ƒ3x RMOrotTy/,}&..iW>LIIzkJ5%e۶mwaig(M)Cxb1 6L`qƝ;w. {(335kq hhרرsm͙w·ׯv=Ϫo|}ޓnM󼗇gYÏt9wD!d-4Dr 1nժ#w?RͽZIu{,@x:hȼy[2~:`}$:B)}e˖e]Sŋ 3Bxe ۶/9T|Ά@M66)eY}lY-bU; ` ۴f@!(-:٤SdRi Pri;M߿BeeGa4aiV̙3:HOT~/GR\ȣOKK8vYW^eފǎ !a.]z}ʝ o3,siɶ2-7km1ɜLaYfiGN;p#6sXaM̘uڵJgRVB=N̟oG--F,TqSP|ZWXQ !\:^8]ujݫF΋"ҸRby~߿ǎ3c֖U䌜+@Az TR<RIJ'ϟ}ЮR{B)RJ/]tΝZ.߸qCX^s_.]4lȰ"YA jyltk2% 7XYXOJjʽƌv5.mҨii3*aq&!|FL;[OCP,̥O_a3+3EKA)ygV wuu-T,,LCDI1xI0rN^JeRNp$&&: vMRXXܭsxDX" C\<{QG['70PQѾ| qV+Z +?f̘888TTٳgY[+V9']S^C`aVʚ-֋0;pKW37+/T]J)'񎎎 4Ȫ㓓g̘% 1IgMRA,}`͕'R.%Y'LDL]k1`@'!wA5WKPHGP~Ǐ/X6nܨ=۷o!\-džvELqT~cz=*TէWEc:uۛ*b`OKR( prx>y>ONJNJJ! BEsƏ/gw,UBI}Oc;wT-AH0? ޽ ۸nc*[LTT+VpٹOwmq\OLP3TSJ#òU:rDOo4ԕyk_־G5jj ÇWTͽgc<|pjnsg+}B2ԯ>%ebT&fE&H$"Hy] _@ cO תYKg <߾]ݻ| S&o ?L0o߼QFJ. Rq|.@a?|/k5f0A BB0cyJrJ/D++,z4{]{( 94/DFE"2s!N$RIn䄐.;3ӧ ,4y###M OzzUWɤ)ǼC9;=R:oA"m[:{Wgl"0i0yX4B*t钶CRRR_pA[[[GGGWWWGG׷=IMK{aYL[n6߾,C8ݿwweUNNIf8= ʕ+_۽c:6رiv *8{{y,!27IJ]ZϜs;5 pi5UE1pZ{&Gx^ݗo]ݪת^^#<;;۰NђR( ˗*Th֬wj׮4iɓ'ϙ3G;'/5@Ee jM:g;BeEY?|F{]Hl,Ӯ,6+:&F1j[7nWo0[QZ5kaņ >lSRΚ@37402z-Sȱ#uJNgc\qB;_ɩs%eKwZSoߞ|۷^>ebd2l0EKJP͛7޽ȑ#Zt'O:w˗l߾}ѣG9rS3E.'JY1@Ɯ6*fnsC3Vv1F FFOb͒+hcLn۪'N߰Ab `o}?74(cddX FD"Ql9 b Wby77 sܜ`ϟ/Y?h WI R]Njbh߾u .~XXXw=s{PRl 7bg\dj<\S{.Q#SY/_$ w=UD Eثn'x^~˪nnY񙛵jbO1)Jc"O׺wԨS&N)&`1624o|`f۵|I wȑ#~~~?-tppgٳgwD D`dhiώ}ztmy.<<1ӝnbn(H :K]xZ%P׎,} D lݴ߃|y^y#DG[¬̫Wʖ-rE9@=AcGܭС|`*R)=Iui׮]~vo۶O˯^zkW F!WwSB)k|*qڲD\YK3 ye ФAI>/-S{+ -R:uUq\``ׯ=_bb{ v)JZ566vm[VL,fCծUKS]CL!\0̓auutbq)Tal۹xb55U a̭-R4\.,d٬Y\=Pڶm[|c!E,{UY=55@F}[h/_ <}ft?//bd/g0{<( }BJݻwYT\N:7nȺ0go߾uڵ\r۷oWt A:~ҳkTRup|rIbj/5PBP ϱsVVVY$$$ 2~?x[ݻw۶m8bEsZgPddѽe㿗/޾ HJDfuBBP(ّw; Pٲe81 ߷o_`ҥcǎUSSKLL77o G ]U ?~yۘBuEvS]{tVA'oݝpJJOrx B)I]Ǐ9eÇ Kmֹsg0ʹ :o޽{zՅǯ,֢*F@A jl|fV,ԩ2ǼBMj~}ٳ翶Zcәx B)a+vnذa&&& BRif2WlB& _/^[y"򀾾~<b!Phа!)5Q!ve˸?ҒfMP(_yܯWu)mcʮ׬356Q8eYa~$`yL](J |A9m-B.Tڳ]l bB!H|uu{E[N2=-=MS(JBu<{¥ b0!@bY6s' ǎm԰ )/BRrPSSt钮ARUw*:nUiS[z/! jվzn 4@banZٵzJxoϝn>|X|[&ݴuP(:1mF  />(Po''}hkk( :Rr `?p"f 8n]N +*m @u0%,BP~(!dș]XX<ƘŠ[WoA@P(?By3SǏy`<<S(SJ455BP(%Ήb6luŋ漯]&M>}hH_@ǡP((/Q)R@uٳg-[u BN:/f?ݻh"d@lQw Rbta)(Ra6&q|64%%e|!.l`dvP(Lu|ZZqkκ0:ΝDƍkݺߚ5`bs6%%UDЗt tE"ӾE9Q0ME)a+݊+~7otQlaa1~2>$0pq,r/ pq306BH*i:^ R˛gb)JW:~ҥ;wGrƍr[RJcY.\мys gK>>pȑЫd 1IdGH3tP  ܼy/q'D+Z\zɅ &L+{j,`F9;;+Y]QjR8>s7L&sww>WR%&&fѢEPow`n..nPCA3666$wUGQV544-Hyŋnnn$wTX1vV޼-[_?V1E Jnj3f̘K*Uٳ .?2f)%VYi^'LL'l(K4huIrr3/,-GMY%/vЮP yρ#Eׯ 7jkk;88dn۷ȨO&)vJ˲S$ ===Eb5Bz ݯ~ƌ ->'%%e5gjѢŒ%Kb͊!/٭[NRÇ+Zt-B+;7o<]]]ꮢ2pU^^^/VUU\'boo߬Y3EBP(bB(BL #wan0vl ?n8EBP(a,a0$l L߽KP(JdߩX XǷl ff@ThQ(Jq&sP;Q(Y8p dԂesgFu|ϞгP(şMA@o dP(J񾾾:Z:_w5J) @tB !XA#( HV 6qEP( 4B{葯_2 C TJ=3gNTT!dܸq>}ܹsY=yoٲe-Z| Izz5k-5GDEE͞=aUUy)Z^ a16ĩ{vQUU%^IuC͛ɓ'?}h͛7WZBmmm% {ndddHHȑ#s=pυ_|9zExQϞ=RG:w_bEZZO̙3G:~ѢE&LȺ9sd~9}ׯIII6mR/_L̷z_R?qą 00`իW߿/|MKK[xP!Dr1#?S']w9vq0\3Ǐw!***..nݺϟ?[YY+ZFGfϞh~ѢEK%-[L6M"5رc 6QlݺUUUHPazS(Z^!Hs/ZhŖ^zm޼cǎ ңGLW^beeucንY`YEXݻǏߴiyK,߿JJP2rȽf.zjs0+8^HtRMMM4h!dȐ!+VΝ;]%t˖-KIIٰaáCX]]]_x{1Vβ'NW^˖-˴r۶mKLL|8X|vC QYίA}&Ⱥjĉ6lP}a~VN2Ǎ7o-&L8tRu8'&&Xta{?ydYײ,;lذSN)[S(9ܼIZ"p<"@0Ƙÿ+e}UeUTT-H####""-QIHHxT*+. !wսqFxxxrr%ʞRo޼X߾})ʕ+utt={hOTTTdddtttӦM=z4tΝ;@HHȧOрsSJ9TyjrZrbJbBJ𗘒*O$XI_ÇڢE EK;*TвeKaBCC###޽[Z5E˕  6)SFѲ䚶mۦ`.\xMر#ېZbE߾}{_|e˖ZڻwE9#{tx>|My/|غu+C$7nxxx :UNNNBzWA :\.2Ùq}9<`5k4hPֵ< p %xOKMKKLK/1>[+n}}}3]-Zdllyҥcƌ133QOOOѢܹs2dVZe>J6m\z5==Brɓ=zwƍyG9;;_xp#pFd]v:uڵk:u -DL(|͚57ŋ #G|O<)tc~ +zΜ98y$XݻwÅ]΀_N C b`̙Ϟ=[x֭[16mٳG9)?`&>!>%9%SLR^qW=z4Bڵk!ŋ\@2e<==۷oWڀJ*Bڇ96ldB =$ڞY}0NNN5kʦRJfR-[).qgT~!s3(kz֭jGTn]H$txZ~(Ǐg]r̙ /.&|PfL۾c{օ 4((HbR( B ,rx!IJ,BHiKHQ( E̻ W Xw}?&i[7<}ŭ+l`r97!UTY͛RS V$!/Ej۽DD˗/ujױ.b)!hKKKOO)AJ} 2n̸˼cbb=xM111IJJno߾"V(HhkhiihB EFFFBTeZZZY+gVz햬N]4]B әՁsc.pd2xaryːyGd"7*Rа>0ё))) )DRT*Je,d=p EEPHc1H$I$wbX,>}C:ycm۹S0 jŪU*Ąĭ[M[6vKLYno_suva7\=B/_ux~AA-VppǏyg4Īb}wgˣsλݝ!Ð!C1!t5kְ,勤a{fUO2!ĠHK7{޳g~Z?-Ϻ$,}QvleY=,RX`Y@@PZj"qrJ2˰YݹgCYW_a#5nXĊ?}NKOKKOpw416ק+Vؼesacc0fffFFF1ѡ&&&s!!!III**VVia_SRRBCCj֭ibjy9sBbBJCSCxb& @EE%"*BS]L$EFE~ J153jڲD"HKKKMIMHHHKK٣璥KjT!PJ,Fjܸݻw,YrJCawa۴4kkkJ@@BH[[eِL?afn&3{CccV``ZHH+b¿~0knfpONN钓5?~nmi]rX,^y5\MCx…zzC UWUKJjL&>Bq|ӷbUVł$ :!*2;;;BCcb%RL&˔9---  &bBȗ/*44ӧO&FFM[5D߾}CS---4}rr.KPRbRDx-}Tr"yGdE=}Vxc#*T9z?\z]N>y=3sؾD-LLLXShᢖZ>ygѱΜ;n6!D()1iRTz9sLtdO{maa1f옅 _|a#޾{АA+V[ZY,۪uNQ%*l|T3 XΈ #iնEK۵lwgO;qxMrrCʙ(L&8y<]. i5޹>/{YýF޽Wmժŋ I#3gμ|+t¿wЩF‘B/^ YW_wҤI6lj۾ꕫ-}kծWCE3e˶mV"Gx-[vȐ!@!;wW,_[n  C&A>S|,-Ϟ9[a#w(ڦU̽B{y)o߼3zL]{`A7pOigqq=rtpÇR>Z*"*:Z:Q5klӦM[ڎ;^xidb~=Mڵj"61!G2 ?_.{O>M6[^lB^LSMvک_zemi軇;bq\\+9V꿝CCeSSw߿:w?q|],ˊB~]vcFUMM6s556mܴW=^޺qs]{t}٫W :yd;[>TTy澾\ڽ3 ڲmK)>r sgy!'MzhzvoEyzB]vӦM;{ sM6+Spkt˘c: H3wgF]C{Ç ?w뷯7ov۷ϪfTƏoia ƍggg,2, ^M<៿{.Q 6Zҩ^b736;uٳg5;w\rū׮ ' ٿogϚmkkv-M.]Ttx tl̜eXaSSR !Cmب<|]:MΜ=ˋ(jꛒ'p<|r˳OӏpRV,@ltlllrNq NcD˳B;v5k~pQ]*HDsn/^044$xܽ}wv-0@VZ޾6mIӝ*8e!\*FED%'$ 4T8Tt033{ s`~D_` !.)){ccb<|USbݽ1 99bŊ3CE"QrR28suֆM$ <hii͘7c͛7lnۦmzdq,-- >UtݶusegaK - tucD.ڹk@GinaydCLTLlll ؖݱmBHĈ.L0ƘQb%=]=@_>s)S@`¤ ׭[7xUFDDth߁#Դ6FD;(t[UW;i a ` A!8s"[ "oCa{p!dO't:%Yz 8`Sխ-@$ lmpٳGlWM =!pbD\12!v~Qfz&!" @  :}.P8 10bF,;)gKK>~80y`'5-A B8r?A_QF͙=37h%'př/FI$ǻzj$7Lč CTyBĠ_?y :-MӦTBXh5:007ƇCO̦v۬Ÿ85z+UW=|./Xo2<y}sMDsذa5 0ϝ=G3W9'O\RV7dž9zO_tC锟OcSF! E-M"T_ɩk3X 6A *7-[^pQuu`c2dTZ]S=_6a@ĺ~P 1& C  B{#&=7wܣǎn}w+5ʋG8|yÇ_ꥋ(np _fm4M1 Nєe>(-P?w75LBbR<`&kÆ Ɩ쭬m6lXbtoB .F#|>`\2@8?8!$Krwww Q5h/_. D"@"XK-@FtzzZ^xd ȁ.Jj7g ͊F--!(r'M.RnޥgvؾC"P xA1)RU&ؾchPK(a(>vؤ}w>qG'>c .ؼys,Y$M:f0 T^<6߿箝%%%"AwU|9vC8|s|!?7/Wpo\V54M3 e(:zıEm*?m'򞘷`sW^_eFfh(jm ,S-W ©OŬ_9zzuDv"NH ڼis%`{ill>c:ݶuŋ ??ͻmoyޙ3gZE;SVw8?W jK=jtss7~Cedd`{}V Ev-ssC!9Dq8RB~'͋UM M3gݡ׹7gXNѳEl۳k.{J2Œ\)C^%#BrË&==-YKT[ꤢIIIIԔcFYƚbr8 H)r;^?!f3I :bbp8tQ4%H z;`qj!.$Nh5zt.ښBݻp_˅lap8JpD"\hsg[[u].K &Iu--- bc\˕|q0TjB.B JNNtA1 y}C&A, \].W0k6 XW_7lذV57ޠ<%~b&Ri}}}JJJ<ai@  @76mz9pnާ z]Bh4 V b$I⵬W_}u鲥*j?;=֖Ɩ#6j%9z.^H%-gΜX1Śո1u4p+ž3x_opVN ֭]WLARfY|HboCz&^v 2@T(rvaP87APј X&w9 KJRwC{=>O(HI4E_|>{ dŽBzzNKY $H $ {\e{xd1ٵfX^^NEi*#I-D A 칳2 wyC.%III/;A $xrDX ;^ªUIENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph6.png000066400000000000000000002723701222557406400241170ustar00rootroot00000000000000PNG  IHDRzx pHYs  #uIDATxwևOUu<]"A*`UD^5G׀( e49vM" ͏}x&T]է+s9ٲ}C=t'bB8!7{QFeQF5p${ޫ Ӣ^!9kVbcF8u ϝ3P #~YA3a-?{ "#Hě&,nN:g/Zp nx( :]EHh @0Xd!pZ!r!p l2-W̴*pUhP``RP4O~0v:Xea&`K14´B$0S#  MF`4L?LX)T%TT d0N2" 5&j$CBY!ViPX( zSACLȬ|ل&MlOG +HDa1@@D@¡0"4B"6!"A@H(Bmߺc.`#,\MG K,9=:X,!Y!D0q8C@` >Ljb~ `:0 _AW,GēΨiuk|cRr\*B:ǮJΙnSTETVIwYU YԳ*F; =(NPj nx9NT3eACpX40%QvFF~ͲͲ̴+]L kfTu wm&LYIfajfvidAiрYw2 3$@7B)1Hۮr0DAqͲծgvM=LG "i 9,HǮB@0Өr"76"i \ Qs\5LVͤ,c\Z$&熀\Wc&4&JghI0ljYUtHcZeiUXY}f= gM,Y&|j3 < Z}7ʔy7Ƭ$;fl\i9_376sI@H$!20"c, !! QdY-bUIEEDI6 c @DEPdYeI $L0AZB3T㡇g"@8"Id.0QzɦJXDRpȒ(  pTCWƹ* qH7h4aDcnpY-#$&xW3#OPQS AӘ>b!c ƨZTb:Pymf~FUA4a' d #1J?DnQcn'qϪaz\ө!&c#E U~$ܪ1f( u9B8&3h2QUD­TU,rF~(8#EUAՂk3s=ycQYGiK2O-&F^rn VP$H$*?wXPI0+93t%nLәHiL+Jou>ns3?aHf?G lHD1B`11a Q$ JPUas sͥgq!x D‰؍ۮXWmyw3NH >}pt}Lyaowp(Uxצl炂l dъʉ0sQګW7V Q tj jPfi[ 2?k[1F) L72Ni:rulۼڿyU!}ᅠ-޶~5`L-Z?qP]{ jE?5l pY͠a)3锏j9 z`iyAzuti{{ +\ݠuΕn0Hn0Oeʍ[I[K;i2կkUI0Yb$|x1}>O28ԒJ;mj玭 rmvd)ǭ;\vCӨ?vEH dQ/!Yd6ZZyjI%w;Jz?*F41p ͠paap3 fJz"Y}UHX]-@pOmnp A5fL2/DfOcI180*0r DɴRLJ-ÚQ7j U3_vkǴ;uV[qs3V߾c׾J r}O+ǝ9n0I0h<Ǟ Dxw7lO?4c2FB|ݝS 6O,@qܭ;VjQĞ]ڵB_] ,W- m+x7[O߲> vԻu+G}Fnr:vEp1w)wjYwfbsl4sg@%ɚz"7D$"gt6C%# pؤzv L[{1]m#%لE˱ .W^#f0ھx-o9Ǟe7;|՚;q!myEEu^jC[no]y˂{|vVUC^4VΞW.3Ni# +0БQw<"حD "Ay%X$.CY%D+b :vC$ d!H <.Uh D\l7D"Y.#S\͔ TTUI24S_53CeV3&IMN ح"@y%X*AE5 j&PrA0Js<B,nPA$U^U3-fd62 BYLR p(A 1@4 `i_࠘bͱ0+@AfQp;)ӓLAl͒άY {A@Ly 9E!,W tGab>4`:rCfj L 8l`5  j&Yv j=&JRɔRL1=A4jNdF$k3flC͜4QiBB8p #L$"`f'\G cs0 !! 1>nK$o͂_BG r:-@(b@@ahԚ ;ؚ;ne;J0q,3ՀSDHnfEͻc ѧGEk֕:ՃV̮kᬏ [QUKOF/6U,M: 1r̃OۭCzw8sz|1qǶ}`PFЯ+GuݤV9zq,%]v }~ t!?8QXfUUɞQ_;JY6:g[qY~1i'h+5zm+h Uj\W7-wݜsMJkD90,˘3mdu^ݳJKhV0~t8wy%$zn_ }JuZtj롹pGyyg:n: ѵs˥sof.x9]^{IeUD5][ U-.p ج b@"|>=N |^ 4rr  h "!fn=f. (5LV xM >@ hZ (8bLsAB^^@L]Hv@ AZA",鲁ƙB<n7PcWlUU0 Xa2dlJ鶃fPU838]4Ea" `Sp̂fz3/AP5ʂDcL9EYvn1s  YY!W5ӞTD@`fz1Sͧl>d@@&i2>o4f[i 0p0E" Ccg$g@09Ը꒑zw@"%t s88H ;[}MwӆryU"A@0&Z|ڽW}U;慹3^RxfL,Q  !^u;!Qv_X`ʼ$J)ܠDrf0nzY7ot-ԳwA$ݸeGmi`)UC!0쮊И&4еGҥ.٫e v = ¦UzOߥk歿oQ1:, ` oořf-/8ǖM^}cuA+~ޜ St @!xwqU?eX]{J잵jj@X"0UV]uCwrʼn{nٹe~_)ՌVZ۳W?m߶-{ULg{+BUAD!Fe:_V A@IHd9`w"4s2(2@rݰ N!Aqe$D}>eX,}jf*xҘ7 6 L!UI(y-j0LfB1pڀrk6kbfe` v@,A IXtW3 ,n@0$3 {1war\Cfr X$(56Sd*f&%Xmf p!A0 p2?X%(&% eR k~Pk3U QpX&1w&5T AQf2AR/B 3 {+2qBed15apXU3zzfAYe6'cNlI  ʒ亡 (Mc: p \H5s,̽;jQeͼ6idQ(%_(R^"GfUڷiB,PJ%,1" tl9H$rVAD:"}G9\'޺m/pީ}yi 砫X0>@e5@\v:Pf:W, ,ȓĩ8p 1lK@B< }:Uv7'H S#ΩAv-tU"@ D3[H`:0(:6}Ziz7dKۚl_ܾ?]Ma(/M2ƛ;ޝ;_}} UPgD"q Ce#ʀQ 4dFc萐!r6  drj儳wF>8H) 9 d' X6;ʪBUPn).DbM5"`U8Gfe8D5L03@4?$rYD^@ۛ .D #`Q8tQx^hzCLK5SW3$@$ 8@^UeUC,IQ0c>EȨ s/冪:xLK$`>Dnf1s< 0CQ%iqEb`pZLdfTV g U? )1mK(+ft Yn tعP g>%.MeY4OpbfԒT3Aͼ7 / s €Q׮rp:kq0KcQC1^oΘ9C ~~+`afZn .{Sen|S=ys=`BUUVa")(?1 blZ6͌F9 C]` ƨcTJw㯾VVj@(pfwiqo4W](ch.|镏: U c`k͞ 8CUzsH ݚ+[ܜsw=cN_YTMrTcMx {$\6EʸK,5u['X`-\-7'bRJUVHE+D0W7cdu[m gu]ޟ/]S=k^6ϯ [EK#5/0sk4zU5z|޷4g>X27!H/ X*`n3*|"N+D$rP EbHב*:v8`D?SvRG.'Đ#5DZuQ`j2%1-28L.g 3Ɯ!EHӚƔj5*E(fVA 3ĒL 0[@hgg* ++ I8Y4T yWE':s(%7 9r%g.XxA !U\Ȣ#̭<+37ӹ4e5d\gaC۵?fH7DmG3y GFR(A9-Q. @y}, YڧW@g4$%@z"go?l G#YF:+fi1rÕ|p7 "I6q E6zvMW p;! jn+io{嵏6na)rX- @dY%(&@y0aP `b*d!HD&JZ<@=k1[\3n0(AVsS6(j=Vp Q*8gs4ἺH#n\dխgߦ37nxڵyu?:w<&f)+7[ &cnKeQF_uUw}7B4/BI)R3<3eʔիW+yBNZ_g5 OLTmPt-y٫'p:0޻woپ2@Ie:wln0z~_sԩS((LYHzUUU;w6O{Kfn߱WqM9dq}evEQ Iܞp8Ͼ7o֭QRZZ9/*,j9*++uUGd7+l&!'1,qHgbτ*,,DF۷H$RVVo޼(O=ymSzg u^7 lL6oޜq{RLhㆍ]pޚ2(^6lЧO;v4h1ƿo}u։DbԩOev_W^[M{jo3NB9STy822 _пM'^=qWsܵKWYBiN]|=mi]iس*>'[VVG9m۶xUV]s5)T +i$;.2O$+5Ƹt_ S_qDs&gȑ{e8¡Y3f-eٖ[N=THx ^~啿D"qE9_xr?Yn!iF)}gis~ݧw[?8z[oZ3>y=z683xYRU5lݼU$ t^߶mEu/[l̘1g:c/L}Wzj߸]'\/mvРA{(^ve}f?a FcsI !DX,6K-λK0ƀcִ6 ۴isE\((a/]v9EQ(]tт YInݺ9s|'[lk?ޙk&TǨ*ٳcO2#al޴( @zDӵ7}>~ S\`8 %JJvޱ;I+mܼ?kY"ow'wBQae_Vܵ8P=9e . M :H,l2C7y@ =|3govM~팙3>~[ N9 GrsزqKZf^߹g;)믿f9 6lȰF{;wi{<W/ZYYywDCg}'C塇f7@es)RYRw.֥۸.wq}uڨm붲2C5~ k67ioLۻsc?OQQіM[~^E 4{hݬ52P:0u 0ZjŽ{֥_V5)fx(d#}ilؠa^ʛncǎO@)O)(_reN/['JKJՄjZks[rλFwE'߿k.đBҒRYNpv`7o> ]t[nݺO?t^^fMfΜٷo'2tҲN<)F?{N7#{Y\Ad)H,Yv5;',b7/YcukQN[hJ˗u]!A6l/]Sc+]{3Fmڵk5_dQF2'+Sw'C;upB]1Ƴg6M~7aιf+۟q(|<05P fFP1Ü󫮼.2Ƣ(rj$`b*?}5br:wy's8۳gOBK 4CK ʨtιNuιnK8LθԺ}kB(16-ZRTg0 2J9թN%*L:rjj<:m۵λX;on}5i!/RAvŢoOtqFթ.*"EԠEMbhйNm׶]4a{t0`ѩ^sgÆ { g>2J0(֩K )ܼB,%a$ f`,c3(V&<裉D8煅W^yemiB è+t ",^k+vyW꫅K֍sw61D5t#1-i(6o֢YIyɥ]jhF$1-t](0 g.+/'o%yy_5C$!K~ͱDaar]{t;dtmz$Jo@xYiYa~aq'_xrYcAH=4g&ygf^J_G>ڸi S_x jtiΗs.]8٘caM:`H ([3O_~w]vl4i"+~|H?=-lݶyVՠԣo" :< B0hr b:gQ7+cw;;/?-,ǎ[VV;i$.8qb}oy.bج˖{챪2 fPFc:-Z%+-[صSׯ|=qlEE͊,]K"ͷ|ˊzLu":iBM`KdPHkשkV[ݥ@: +7n8v62萋0^F뚖?ޱcǫnyBDQ4{O8~!nݺ. 7oѣGX9[sהz^vm<BH˖-].E9"*^3QEvҵC #Q˖-?o ]Nx4,+'awC77x#+;cZc1;3f(ңGLwk0HǏxgy"+ F6rUݺt[ô-[|[lv{Vk=O: moMҹ clq/Yŗ_0Ɩ/^o*eY7Mi{ǎ1:Y:e˖M{z0,hV0#NAcOK=X-2 =8S~(˓:w,K.n[n-SңdؓC-[OE//pAn3wq:iIy.+o^DֺUk Xv=wsאC?xvYgzy\[ocg~u۶kۦU={ק[mVDA0:td:u믻^Uաx҉:vbO=1٣N5tFeQFN%o4s7oL1@)STU3$ 3|j!z֮]k-?0VCVUU otM%JM6wB߬[nE)7'y~~Dh1"RNY#ܵ_ z lr䈑8pθWn2Ù' ?^b7n$ x38sƘ`bFIwK=5D&%;J k[% bI:a28p>E3g#t/D0.8ǓwWJ4uuCC99~{F:ʬ$#|9goޔǝY7uN~"O$ ] o:?P'"Ȼᅴکt\x)Db37|ñ}Ee Bȋhٶn`"2ㅅP0HB̛̯yoDQy۷o駟`,kZޝnþs*SGZ͚53pnėE +rA~Ab(ι1zR fggl2}Ԃ1XTx5Ƙd%Wd~=ce嬏gq9WLA8gYӯe Bw}w햵VǴݫP!';S깴q].~~<tf~V5=RY[5oi!rQFeԘc&NXyrꩧ^z۶mƫ_~6ֽKw~J"အ՘=$7nV5֩PK/g[txWs ұCG@Y:?Cq2޽cw2A $!&P4%r:@T'e<&f)$Deؙ4wsh gQFY+uS_V4!W^DzѸ?Z vP2 CI93:Ҁh%k95衪dpGfQF`ŚO@0tljUWx>uɇz:CG酝QFeDw{]'c" (d3 1%xZ4oY˙"jJ56ޓyGw 8np5kKkfK"9pg/Y9b.D̃(yXv_玝|}Ie7i%{K>]?I's=QF0L'6iS~A(U")Vg1lOQҭqw~鵗}Qf03c ֋23R@K0`@gϞS~tf-^# &8[uUɇ(r`)#θF5 tFX|O7ޜmӭO iݣ5QUDe󖀠1x덖-.ᜇ#d{출X,tSe90:hPςCsP7W'N&^SL!G8ft1u}]ڵ3S씕)q{KqME!/5ԥqDjuꜨG &v_2˖NRKA"ҊG"/O_~ݸewԓO;1|J, Pwߟtͤ ~ᇷlbN׿gtͬp8>i$EV*+&}~7|->qYBD9;>[VdFYjT4w!"Am#kg>-7b:7a [O>_~]:wi1fqtic.tMJ`;~c%r @{4hwؑ>Y8 ,bQV{^A{c /fnϻ5q]2V f#9RʁScEEQܼmsVmbeRBAA")pЍp   nylCv8G Pm#@h" 2jٲEC3 /L}ak^x7T3 `6so_W\?隇XfT_F-ܰYm@~Յ(BD"^snZsssUUx(Jyyy$丝{T+.)-Ep1A?geeYDcM?1Taι(ܪ* 5-]k$QNAw}yz}9euu]W1kƗ_~پ}7[.8l ?lEb?-7ҲuUhӆM&e3:TghQgf/4kpH),Bq jlsۗ_5X-c\?K.BhB 70p?} gx<晗%qPHsDP>#DPMQvgcETUu5 ^o<GcQ3b>/Y@%lE Ɍ)?vǴۼms4q] *+K/پeK/{;cp_}n??;.gz 3c' @!$IZmV+עPZRjوHsI}HB-Z0)grʁ,O8EPvlѬ(SbQ,"PSNmZٽw9rPF)$Iӿ.o}ˠA0yyn,[L@=>s߫Q~G>RԼh?e`r{1c,\)O843$d YM}N9cLdи i!d﮽sROu#^'شi͛+ʗX>dȐQz俏|>󵿭Թq;3~O:߿KiY3f=,,Z|)f`V1rz)\FGͯ[(@.mKw xM$߷Co=M ƍzSq,Q6Y!(7/ל[;wx%dmӘIyf&R7V݊D"Dl59쎸YEg:"(A`uXf0 p]X,FVTUUI"L\BքcqswsWIiI"N([E],;(*S.S q#nqYԘnZXřbS4]:Uj,C9MHɈQu!iEѨfp궪q#تWe%.Ɋ|6;Wg\A}޼y%%;uӏ=~}xÍs˲|]5o{ڥ+lܸn-2{}AC;w輟*iLK}283U8qYKeB~)7OiB6\ZLˈ\Ft-TT6 (++{'}g}hO<Աio9b_'jk/A2`.o+ɒ$KXvW8dQEsJ靷߹vTSG:vXv)TP$˲y8 Z -g$JimO6G+b=SR1ͩzko: 2xٹٷ|KzcF^wֽ{MƁ- uK~.HA5宼Cmgge/[ cRרrnK2Ay]we{Usݎ1.[f68ͦ)yfΘi$IjѺ_޵3v4p32jTԡbi@| ѼsƎe-y_tMOW_}uFGh,V]u~LcJ㏳=#Oo-Yֶ}2lȨ8:2n$i`0}VֵSϾlI#{盵hF)W2Uo6}w_4uׅ 6|/<´iv}Ґ:wlXd7K2`ÇϘ1c,lMn@s=/v($IN1 O0M8og}1]ZBuޭ2.#Y56>i?:Z]S頛m0;u͛KDZxA$겫j>`ѳ;=hРUkWq[x%|7O~{ 4_ânI_bf+*fΜハ?xk[g$"nuH;Zv-F\кM)7L/|9s3zH˖.!XG^x)"u]׎s!xqbd C[Z$pytLϐ(d,ɊRs}/HFOIbҽGi1fY=Ѽs2(Bs\ZRڬe3QnV,J$1op)T`]++)-#W/,C = 85^-Q? [VZ۳Wηl 9ҩi/)U= 7};HdB zSUuD Y9Y:>ό"s~#O-[ v,E@ 0 ct2KefH75@(p7(W]uU떭k;a G%K/7pG8jٺߖܹ,&@{@^}'8e&☼y7^w#B()Zo\(_}աQFBg-︣t0:֩;79ׯ ;k,f~}>ɓ'w+&b2ʎiu~݂ j~nsi&I LxW'\:AN8aEYLWs(3Gn{ޘ>ڴ[f7 wN)2>}ehgo&_?߱03>a0\XiCpD5\!Cdf:3:eN1̅zDIސGtq0,VKzD/jUU(O=T4ٱc }(9zyyyMI7vi'v+_~8Ԩ"H$)$I9l"}aZt-eeS 8p"p0 \99x,GGVbLh<颜b/cp:,Dch,J؜6Q^; dZ Áfh6M".Hfeg}yQ&EwFe')!UUe{D@9?q7yw[w]}<{ڶi{  7W^k&LgwjlI n\.勷mf۾SGjwٹsF\gN*KRʹbld`jPEQs Eή3EZ ͓Yv#O<"`0ƞ|fTdŜGi9λtO 02''R'/Yq%IjМ_lrsjյ> skN١m[O;}萡0& Ri| T4{O8ѣǬgՌL0New~3(C%ukq2#xjLyY>:y8o׶]8p̱ToFf~z;wTƌ29rݻ3+F0ƌ+V?O;Bt->IO}5x}޹dX Ӂz’pŲ5C(^w^nktIC_qcoXߡ}7nP<OuG`90BaD01nG!)QFG2=î9x=|ɷ|'uf/\A%Y%EV$I"mz!$"),+Ȋ(Lo y򑲊uk׽D,dΝKQFeTW np|>&s)--dBD UUUxu90ũ 4dqױ[ǯ#B`"f,1N4X'9~O߹{ ?yDeG g-U;J%ĂMNibS/ _iΒ2(:24}>l>IWI||5='k fxw_~޵GW}߷. bΝ /{ۻ4 WFuhuVC7zp80[{oZ?)jAag\ԍ7ݻw%ǓSZVaMڵkxF 1_~Ei]uiQb׮]7o䌷nٺsΥ{K>ݳi߿:zeeQF CF<2־mt6y瀃U~ه]zY[l-`k)[֦M͜I;w>Y뚖[,\p_8fJd麮ꪪ#O>ٵ]e^OZmܼٟ;6_zu~^ʿwy-wڹt[5cECҵCW~ ɒ~|FeQ}1M8oE\ncLg56y0`5O>٧wo%Y~owӺek i487?˯~x%\s5xxێmaT#p(˯ҋ/]b#O>Ҧmֿ3흜)M<&'/?ﲋ/k;c] 1bĆM ̱ _}lC'\FeQFuA5A5vk8][UDP}f,6CsHsNUU5oZ$4/lnlMR\q5^gܴ" S˫[ d{D ŖO)/Xa 0 ,l {0ۼesvVv!F,liuZ1 Axwp_8eOiKrrr,׮]۽{wq+dR5otsa?_B"RuܺM+~G׭Y׫G֥ f0`@)5RBcOl[~[IOڹ{eХÇ[lymMc. pg̘19u#N"sX;`ߡ.neQ}=3ݺu;Xr۶msٳ񥥥_~O?}ijف@/?܇].c7ps?ٶ}۔ck>l͛oF@лOaCS+bƃw=ݢ fPJ4!`QfP28KB3̈fWl7vkovٕ1F1o߾|_lOigeR.?Pq={l۱'#+/kSr()tgkrɌ2h?馛.gyfܹōرg}SOr)n߾=c!@s7Ϙ1c?pwYfΜ96mZ8Q]/DQ|ꩧ$Izo뮻wٺuƍK/}뭷V^ݧO~_WQQQ k׮zjӧp mڴ=z[ouw_|H@FGhdI @c.;%!w.z=w_z7kӦMgq?\PP  \rIceo&EQ`ʕ+W1^_qsεZӧOw:o1&&Lp\ӦMK$Ǐw/lGGۛ_wH>%!w.b}Ǐs|IIIܹsGCn׭[7f̘ &z~ysJmvg67nܭ޺cs1AFG#lXq!Ç76ܶc"Y0ˆ> a "f%B@`x<#egv䐀1(5M_-YWQFGF]QQq}Ν{@9_QQx }}[VVd͚5v1b?_|1U4Сe_S;矫ƍ駟N:>:'2?#x>Pykoֺu맞z 3sN<<Ӳ(tM֯ V؞ۻڛ}Nq_8O?fݚp0lY{`wٽeӖb׷nh0qâXX,>1778I73G*77倫>M)i-_g-[馛̯ ÀzbJ$IF2d ]z~'+޹sgsGC 1'B[`ӦM?~ۺu֭[_wusN$?C`.]:sLPqq~ŋ?sY&c[om޼_zxM;Gޱ{5u־]{XEeE<Z8oڴIKh/:g9͛5{#ǣСCSL0!5k~}=cZ,wygرW 0[~ͯz½f͚Æ 3ߎ9jf]6W^{Y-,~#GB's11:5="+ќq_7|O,,,ҡKnNn޽N/蒄ܽsyO9唼<Bc A?0tΝ:ˊ<ԑǟߥCoĻsΊ 9^гGOH*Gg_z=dQIo|12eJW#F1bD /p狢xg7.y.]t+V83~YͯfΜ_].Wz;;g%??5߫WիWs=xuJ;O~>nS~\Ӝkf3x卲}e]u:1˖/k|UkVLGq"00NJ\vezϽ 6DVk\W~~Ï?\y/҆M n 8"f`u^ԙP%!̌g!ѹg=c'[RkpWewwNS[6ٽG͛?0r%AbkoC|[Νe3Lb++ j}ٳL1'⥻J[n 2koӶ 3Ɓs!D’2:T:3:ƾ߿W_̙3w3::x_CO:v8bĈa3fY~.0nԏIG,Y|[d ԏ9n O?4=i?-i+ñEpҩo~\v:[x.[i{=o' <̠F\n_AاO?ҵIN(ތ_UϾldu-Q#(QFeqIDAT!+Wbe D("̟?ɒ2>{Z֮mکSwc]7wrN&杓$ġ'>~Qmvw?˙իaC "MF9'~vyǝHn0dis28G:.ѣGK$R4ʙO={l>JfTUU0 qF5]f궬]2t6\>o޼o /.0a„yПyݹ}K.1m<+.{5F;a<.`#qg{M7gv(';4pNbA,EpcL3VZ%iTE1/;!)frɴ9o$n7%͑ 7\z饦PFqdߧ?Nz' !Yf7~szz 曰jg'CC]yy_~'LgM;(DQ;|p3(cdhMKfƸױx]2([_r%ӦMkbT.;oС[o暆K/^C6q?pևR6 yogJ%BÆˌgQFyoݺ WN5y=//i'FK~~o8jiWZ9eQFu6k}wgLwܹtҦ@t1ܗ1G0jB=ܵ(2'Oq{|vŋ?1>gyc=ඳfZn} )."DGZɿ/2|?PTTt^wujGy$[qɒ%a'W>6!QC~H [΁D%Znf"YUtq|fݝJ7(bc#ݭ(v?cba'v+e  AET i跧U1&j 8/xEEŰ)SrqqaS...4M [aF٥KqITHWqpp W*<;/--}♓t$Affe*)*$qppppWoll|̙~4c 2?|M^ۏaO3{lyk׫W@@ A 2͙3gAjYYw<`0_LJ#:,2ZAACB$In޼yQFF0 @giKnXBCCuoߞeiӦ5h`РA=k`x6 Yp|V_E4HWd2aa&MRRRvl?¶i._;zhqi ںu֞}{223974v2V>h s3sJLmܲ144C=~xϞ=}tj)"2KqDXDȽ i͘ \F qpE.^?K!//ѣRfqqqݻw l߾}׮]AAAH{nժ})co;K=:OyA -HH Һ]kmm&k}GկOq붯۾iPk澭۷<[neee$$ E∰7gOKLvUIYiݖumv횃~%G-[LKK=*,,l֬Y'Nx) `ʔ)qaE4ݧO9s樨Ϟ=,55pCC .ãvڅ_~cӦMۻw[/\bŊtRmm>}TTTF۳gϜ̞=[VVˋJX0i#kӦȑ#gٛ7o }EVVVnnn˖-\vemm5kL:uӦMo߾̟?gϞ/^(jƌeeeGAezzǏ۶m[۷?|s\RYQAqwrrrptxⱲrv7of#'\ b`lЯw=|G/KQc$hR$'bh+k/Z}}Zj(hk7rhHԲYK>?~wnkhjݿoactp}םG5{ss󰰰ϟPA,[Ν;vvv7nlҤ BĠ…v)***((޽ Ο?G)**ݻvqJ3 :~DDAAA<]v[n~0؆ n)x'kի7(Hf튵-&Ǝ lmV;?VV|p%'+Kɹq@13gC4ll2ӧOwtwf3S+[jQ =z_|3cƌݻxB:3y[v-]t޽VX'ֲyttƍBAy§ .\dߖ˗/0̠AZlYQly()a̎_`Y( %$4M4-) EӴtLb>; ĔMCh%L ES8SWTj-z:+EQڵN]x]tt4! bߦ`K.hE:ۻy .^xAnnt;x{{XXXN4 S+3M9$ :M lݺÇrrr!!!8~w޵6 44iҔ)S}=|p77: PPP|r}}}}}S>|]v_^)IKdz;͜eU,9OQ4iR}<`Μ9¯q;ٹYfVM6t[nٳg^YBBBp̝S*2~*K$#>?gΜk׮M4iѢE^^^͚53f ((o߾ڵkQɝ;woX^ׯ;vؽ{]|=OtDEEE߾OIKAX0蛉ǰ̑FnݴqZHރҲH|}|CBK._$J@Tl)D2 s3sIt88^LMMϝ;ѦMKKK$7/^L2E:]ZBf/BPII~ZNNNL]]ܹsǎm&'t2lذ'Nx<9j:Y~hO>573H6 $x.C>A8| # xP'%b嚕 lmSR·n۪!ĉ8$^ D M=}j%%^uЩl]IIIDDTtOu6o?f>@GXٺ"sp=z[RAAvG8yd>,ǎ{n펍ӝ+**k[W>4CB! :|9XAUaΔ966{wvC33g̴,..>zkוLbie)%  ңG7n9m:IIO{6mڌ9*&:&rpLL̸lmmZCMLʨwIʞ=kϮܜwo6kiװwnK$wB?|>szNvnz¨ "9t88*ݿqv>t{{porRrե)z֍1q1gNa :N7+,dCŋO=ݼqgW]qFEG:>6\riܩHtuuo\Rܤɓ蓒r ~͍^L~Qq7n߿I~ɜs֬^coo?`ȀRIivF];,^2~}߷ǶK-շתe;7.+) yowܹ^#A߿~Fj{twAN(k Э[73 wv7ރE"!ܬwߥ@yyn^sҳE2|e%e ijW2s22J[Ow|!µ RI~A> ikԸQ Bv9=?/ꕫJJcƌiռՃ5h$;7%I$DM4ԾSzjD,4C32Zp۸jy̙sϟ-qqqO#:YЏAdaiame]TTt]wmӖ  %DGmٹe4 H @|- -G'GgPw+.)^f݋.^fED"roc z:z275 `2 oBA b|> ~U%! Ǐ~ѽ5l۠8ݹ_gBvBCC͛&5ݽ{WMM6`~O;so?MOOOMNWSQkҤAYYYYY4M"Z$IS4qӳ⣢H,.,&FӴLBD'( #)JR*z̃W/G~A( G"Ѐiwoկ_ߥK)UZ".t窑 :t>O/\0a„)G 55f&ӱco}|r,]A}:$]i xDl(>#+`+a壄d᧙0~!-[W~Q\ްnCmnٲ=uԻwFiӦ!C3""QX[[GFF 4xŊrfsLLǪU*G)((?~K._~vOGm ޽{/%`;*M$oߴӲb$ebh b$PEQ $ b8MbJLI(p9$ebX"H( vM-$XNBK7?'T()l#-_P ES,bX"^߲VpvvVQQ o/]ԱcG555Hk׮ _ѣ{_b={" S;;/^ƥKbQ!&&ɩAx˗/pM988͚5c-={fcc#ח}hkk*֬Zɓ'_[`nLLL|5;YjtNJ-%Ν;-Aqs5lzdʪaÆӇ 8uVedd$Bk׮˗/ibbbÆ )˻~YY 99944~B$ݻ!9s&Aeee-~\5jVXX؀>|تU+܎-w ~bb";===P-SNA7o,++|9ؤI4h`ɡl=aZj5|vvNijgϚ5ky;??ha?>,,33]Vbz vxРACLӝ9 vuÇҢ7oqܹS,|2>>~w1b ???=====SN Ô޾}|R[jܹsEEEnݺu||ٳgݻ֭[W^ݻe";vKfffǏwrr/\ziUUSN 8_~ $[l9rH[K9se˖ׯ_Ϝ9sԩƪ >gϞo߾}@EE% [(?~#rԩk0-:ObŊ1cB,Q]̚5###C@jjg͚߶ijȑVVV&M.>Peiiٺuk >U$BX$Ae$ [N_Viڴiaa&?b/^8x ۘ{V0Q߾}gwy+PZZڥKkkkGGǨ(Oӽ{{UaKGwȑ#7nիСCh+k׮e˖zq_gff:99[^zu?&GGGia-ZgddT%@$AffgFGCzWI>@$,,55eukcCcu uF H,y9y_sgtj6쎃ٴiuuu{ʽ_|ǧ_~wuֲe:Njժ/2 gG%%%SN%Ir~~=:ѣG~~>M4BtҌ3N:b]~~G-q/QQQDڪZ!ҕK/^!ݻwB$e尺 '8ty|#s8 gΘٳٷ? >/ Hz./?$H$v>wޘ "wYuxԩSݏ=w^8ydi/uI)WSRR;u]vEFF^vMS@0m4z޼y BX]E'tHH&g% 6l C1 dd|aBrBqY1e%$& :zE ^~ޞ_~jc%-[ƿ_seWСCCCCϞ=OJJb VI私HBHIQI[W;~{w$BS!X!RH@0B$x$e',݋'0gSc%e%@J*J'Nl`0kϔ#HKh y|C v!<gOM>~ysYj?`/Z,--׭]W ?pD")ErrrBBBPPni׮ݹs 4iҤ8p`ܹCå/]$X6D"4hǏ=zdbbSH$`RPVNO>>^u}XDXxDDQWzj Dp`nATT455T՚4n%---2CшZBQeF XXX:}}k7wtg@I(DhD:ʊ)I)999QhNdYQ:Pir_?ŋk7 Y\\\?~Ol¦sT-ZtJ8 ǍwᔔjHDiFS[cׯ'yZN]WcF$ DV-EBP&&ރ][**03T굫Itm㪧'"D -qk& +-˗]zwԡS>bXYMYI^y؈/af8/SK.mG]tiرӃ>{qÇ8qbȐ!5Ci] b-W,]A@ F]Y}ߺ#,]<|_7DkCؓ4mifvZ!U~ߦO_,Yť ۇځ?2-%%%͛7744Ŀ$?~0cƌG|ѣG--- `bbJOO3fƍgϞ ܹ3'Nܽ{q8 !dee%Q-R$Dڒ b F3D)O@wn!(|L˳1c |M^ir_g oann޸q#F8::7ohjZXXO,v;88XYY 6TQQҜ\-ձ ?3`gj{\u_733PۈW&ѫWj撤#j=3W9vXSLae98888~+uYi,bY$-̍x򠬤[::66[ْz K,;)!${FΟ=_<4vSG͙È7{ݫ\XZ'+]ߤZ={Μ9SAٹ橃>BP-1**7oɈڵiG#'O0 daiCTrr) vZkK{((7!A I{k{Vo\/**rau ]=&M(P#yZ:Z~~~AQoK I'[C`<!ÝTT2B%!zj[P;ߺߜNj566-4hPmAς~D xztuVHxK.ADr|!YO_@@SSso"/^!z"!PYI!D$$HVV^ ФqFkզ@A,,y -ls,. ?A-,.\fg̞>wwf,Ledd^xx___.ӝOUUН#A#@5 Im m]}] dCC pMMUeՒd!OH̬LΎII!%7ߜ8{F iDSB4jԬbbb)bώ$eTD"iZH4jpn( шUr%DJ$Y9YIqIyyM7O?Rw%222~Tuw3{f͚C5Od:CZX[hjikhZJFVFQV^zBY#G/6a>^}=ӧoϞd>v8 OM]mEE 8p}JJ|+)5oҜ)-Y$x+ FTVV.?Iy:wieM6$T *4M7tlho`jfjfn3 tt̚ Gk= sN頳g6hРP 7yf)233qpppT,++׭/*-6tEm {ƍ".V.cay&hy? vP.F r9'Da!du+p&B1m ]x;w^zum+Ο??%%eڴi=ӮC;VHo w9|DEE!hw5%J QcGE6cZVVV:8'! j@qm4I@zn~]}_#L!JLM>ٮ>OziUA9@ƍ&O\?~'N5ODTl Ivة4~A {R@b~XX?- H1JJڵk:;vرcmҥ˻wB!Ddxxx||Am+9-۷iݦ* BXXuN߾}ǎ˶y***=4S|… =4Ssh M M#Zz'DBaEStqYqa~!Il\@>'I CUyՀ%4Zr?'Oe^~ۧO7k!`3 =vƬᑼ篞3@DAn3F 1ٳg[6ot<4"Pߐb(v x-@ŠB$=H?G-XNwGPWW߿k{Pߤyo\OdN04^2!!AKƑ< $bWo^O}9_?ߜ#y/x$A&&%&&%BH,<>Kw% G<>_RU;[W-yr&MBBB۶m1bDm2<gcAȅnݾu9*7`@@x%× 3o cin5k玝y..vm{ILMM´589A(:88<~x'Oppp|!1uT&G>k[7j,]d.f qk熽 h>_1z{6lF utGծc;??~| b9vdhe+ 2v+)+ 3wg "589ok:Hh֬'Mt-ʄK91 cnnZWQ}{jbhr4-]- )a4;q qI4l԰{Y1ۻmDm]h1(zy|^Aqb'VZѲe.<~ gUcWe)=6Zdʔ)M4k. a5~ԩS>1{ٳgnڵURTb l 7zVn RRRnܾ1h vm,SGh; ub 4TBHp| EB1XE$HuwgG՘%ǟѣY…&MTxػwx___999իѱ@cckk[:qJWOiG ɴ7o<=uֽ[woAT)EZ$$"٪ `B4CC< - 07jҰɡC۷k/HhDCiɐiߓ$UUM5375Pj;MZVo@YYY izFGG-&LX~}m:B4E(ܸzC^^ 3EWYXZ14CQC\r\M45ttlmi/aZ’38(`鲥+W=nvk-#hk+}e#^'$oݱuEv6vUۻPb6ChڴwN81`o?6lĉk{U䔔bB~}ѣVϔdzHH2\\A$"< S%@I@Zv b ]yOjV i;, ɯ:e?m ~[z-qjap͛8q۷o׭[->}̙3~;99~z'N,--577߿nnѣ+9*(( |vB3fΈIt:EEE+ԑ vɒoFK֠z- @I~o'ӓFSSsÇw^m?'NDk׮w̘1^^^^^^znܸ!_9Us$BMMgkcffdkk[ۃ?""" ;V~`UT_^ k4.<.*oX]hY!R,!_>j޾~ǿx񢸸XKKKJ+U$/kW(/?.7Z?-AZ­pppp:?_˗/Wh^~n&''>}Z"< 8:9H{s%H\& E8fx4Dzjz``^-'vSj!۪UGgչɉ EEEqqqb"ׯI*s 0sbZ$,C a4Ul㖍FSRRMg$A415quڵr\iii\\E}Cӂm$GU+a x?/W>>>ѴnݺuۼGM:=KxK~ؾ>훷Ġ䄜@@^FBO𳲲:bcc|%xʕVVFFiIi iji2& Ɛ@$A$(*IDzBX0*'$&)Nԇ(Eu$)PRUJMN ii::z%e%$eBߥ;W9rgϜ>|is'K؇ 4x 8`keۤQrك#hjdd999 $ LD!*# @@QAx12s?C{y264&!k箑F_vzzW^q޵KWQ> zvZnV\nAsqot2f옖-Z&&lrٻjj0ʵWpsMN._}رc>\#ਃZ=EQo޼9|aaa_t)tݺuwuqq={QXւkC?~I&ZZ771 :`0nԸ;wlܺK.ڸ^Nvκ |AFfƄ445ݻwWRRzKKO>aie9c @L"9:8;;gfe=vtԨQ%C $xOYOBI$IҎ:֫Wkכo<ʯail\;;WxzzZ[[/XڵX988~Tl<ojjjC Yz… <8w\HHk{n%%%9sԔO 1pܢ%%%ɩɖAiQeۧ4eҁ=zD#:?`̩'O5iЄA$&9)9uf3'%4E3adh򵵵!%% Gw$ B"0i)iE4MC,wԶ\HHH6mmll~4G%%%%======o|-~i6e B...3gd?uqqiŅmsuumiԴz/pEU #16ٶm[jzۨmZIJMS y@0jZyO^<:| nݾ%'yasF HذM6TTR #F74pj@bTeieܼfxG"D JLOTWHNKѧ^;4Z RSSQ#&&QFl#ǻpݻGYۣWꍍϜ9Տf̘1c .]tҥƮҺA Yp͚4{ihxPgGh~FvFTTp3bPvV捛UT -[fll̗_ˮ-̒Uݻ 0;wN޺eszt{n3+ O@ES4M5nw,PN=/% -%  MӴ~]V.[Y~ b͠߾}[ۣNvn۶MޞsB-#Gc# GաcEfMD#}#@N8I@"Ȑ_߱yGNavΝozf'062ݵmR2~^5jjjFFkWUQV|8}x1%۷oMdd &׮Z ؽs豣bddzs*|B[sΡ5tXchkkkkk(@fffVj~ 2;vܰaueccuڵsE8GH5l(()8(90 (ܕ8;9hD # ;HO_)(d-9-15qrB9Sd-ΏiZQ^FZWﱰ*+))y#gW~L%-,,;fvk׮(accS?M6޻wٳ?ڕP(455}M6mHLJJϷK? ut?'~ ,פG'K b ?喀 h/p+/Hܾ0yd+S+?1O} [VA ^ʵWpB铧gi׮σ]]]_^?:YVVVZZ2j(??իիWKppp0udz;,zdӧ7tnHA8kղqqq 6lXVV֐!Cn޼Y?}NNNLL ~f͚Eto .\bŋ/TTT8YZɁ*'VKC3bJP 04kxj UV<۷o)))]vEp`XS77I&o޼PVV+WpiН# T4oYBٳ!ӧ蒒K޸qBYYY׮]1hl#!ԪU+5kvΝϟ{zzVQΟ?uyeqp_S}<ˏ.#pnRrؒSB?}~W{ܢ¢'{TSQ,y W,ט%ݻwׯ]5kVIIɉ'?naa1v]>o{zz߿wrb]p|!I.\x֭:uj+sp:u I$B_nݹ5.6NKCۻ]vblvV˧MfkA@ .)(( yB zVteL9pD222wVTTܸq%KƎ~E ,hӦMJϟ?ӫާL HNNvqqv횙ﻴ3fLmMט *ߒ>'tŅŗ._ճ[+7a5F}fߍ-' ![ OPY@@"69O 6degwu/.*>sܜQs?z`S1W_/D"B鼼b<  }捘'A1O>[7J/JJFa_f&fc?hDtvvNMIsiœN zw6|{vQVVܭsrFO۷nm;zY36iڵK7unjhll鲃~8y[oߵO>=zEOe2?%jރEW?|1(++[ᓇ:}%M[[{ҕfv2".-E"Db(/w+d+TΕ+Wp[̫Wdll,:tPeeeӧO߾}tcpvv :u-[lr-ZTjrF?vrr=:II!OIIa CB24,e6:t:|p/^"RmزETU'=O:UOWYf:u/_dEzJJKeeRqiiiiiiYiYiiiQiQAzO~}Iqɥzh ֿ_'N޽w;5rұ =3kNU'0-=⥋ť>qA2SSS." z졤B5kҬgxe޿?i$F d~ɡCJ޽{;ydu5jݻw!/=|޽8߶hѣ4Moڴ xxx8pySRRzвeKؿ=zlٲQ7k>^ȉ ׭_wE$$Ih*?|Z>J0إшVܥY=3H@OOϢ4#3׷T=؛'Qse2]u֕蹶vUSlPS[7~z---)ر};ivpp]+ >C|d2 YY:׬NKKSSW}㶼|[׶ffٹMmMY5шBPtԔ +bJܥk.1CW֯_SƊ%'OoO>uVHMEmm[  O@):tŋN6mRTT$}ƍB.]:v쨦]hbϞ=b8((… 5*((8uꔅE``V۶mYLoo .>|лwd@|||~ܹ# q֭[eee}}}k{u:!lro|S3S>)}{7z@;*1CH/2 `nb.a$?.,**lRYYYIA*ՃR4-,P(w`SB%-vv4MZZ)b:Z:oC4vռUse-e@ccdp;X֝ie.; HSҏ"GGǑFBb}<@NvμE޽{ ~/w/g̘NӴP(~UVJ >|- ]sLu=1޽g ܼy 355>|C 9t`ƌ gee/<tPӦMk{U[  0UUU ?ISTT?~|m_8wMMMG7 48uTddd^;wܳgϨ(=z:tM6}M1߻w+o۶͛MLL^x1y䊦7;z \?p˶-)yݡJ˧|}a͜9_~ݻݻwg̘5q]vU2;x𠹹yfjR˫9r:9vظq$ 2}tfm8`UUΝ\})**Yfoڴ o[[[_p~VVVaaa}qp5>Bx?{:22ۜ:u*,,lɢ%J+$ѽc/}?5-5=-dblTRV1X"f@aiiwoql޼yֵ;ٽu@II۷;tpݻw!!! qZ߿۷LMM522kK;|cԅ 2b?Ξ=i+}W2QRP.޸uC]Y=9%y-5kֻw+VT"ZϮ`0 !!VzYwww* Ϝ93p@QUU+W 1bSZhq,,, x5UUU{{/ڳgOfff=dddΞ=˶ϙ3ݻǏ711+?ztmvv6lE8p܊;wF```fV摣G۬iM7ݸzåˏ()z͛8}M4}sߪ4U.^8tݻi-Z#6>6&6f޽C5k,#-!Di^PVV6o&#JJIb!|ՁTTDqm!PNH܂WoxB\*sPXX#FDGG-,,*\xq.lƌ}^|ӳ" V 7nܸ1OOOrڷo߹sg޽{7nܸeKKK߿_PPPݗ0[v-~ի8sp5_|9s ܽ{WVVرcÇzw#k,XȑK.ihh=}VVVNNN_gh" %YqmNIo#dd ʧ !/ bĥԴT0|lȩфEEE>çLu%˖vmmffv1trdee`m-1F* SyjT.قņ4 (,,ܻoo-MӴNvfǏ?~,jjhuֽW1EE$A|OsNnnի}Ç3EQf͒.hܸqHHȏ^f~~ŋ 2233kРA 1|<̛7OVVYyzzڵk۶m=|6m*..izǎ;vpttl߾/pfΗj˖,3512xH%A M!)ݺt۱kԙS[hձC,65\tA&L$5hv="QZZZ.] #ff::&=9cvoݺu:sERrPl| H.]ޭq#--@hjh:P[n͚vֽ5 $I@rɜ"7zzz۶mԩW>|@ 2d~Q O>|QKf͚xqX3f &|c֯__>IOOJwêU?p_t3gj^qp05 Iš:U4222s5k֥KpW^z% ۴i`v Gv!JByH$D3 3qDN6c'M$ -NOO J Jf󱴬TQA!¥E=ziii$44UUTNI(ojj*w鞝 %bἅIIe2y}]3FVRR8`;ګ# VSS;(; 董;(UTT223tuvmەy5%%;Z[dee|yr@H@$q%3AgOb3ҿ~U^|8~ƍU(\-ubxǺO>wܩ|%w0}uUW`׮]E?~mV ԾrJěKsD"P}7_(GUrD"ٹsU yB!IIInݪ$]屴LTvQUV3f̠([K8l9H|[u {SN:UVVFQM L>}8$/_>|D"}v$ܹӦM#Goo;vt_&rpUx###gaa!.R 7n^8jTkkkHy_WT)A)eelڶ}Ly AHD'3I$:*M>|xU%zHO>l8EQ V;:tذaxׄ@ag_@ 022y$ɝ;wn$ɐ4OOoB؝8eʔ-ZTH8$uݻwNVVSǏDׯrrr"(<<\AA^~ݸq;'N8|0ϯy}uɅ ֌&PLLСC[ߑ#GVHqwwwwwm۶8qBIIsPs>Ν;XUYENN0][vAB @emݲ5&. ))),< !Ta#iKGqc!@0)s贵6jJ#D-Z? 0a1[]}Ϫ[^9nEEO_T嘛E A'O|7|ٳg8p+W=*-A[ ˗/}ڵ TVJNN>x bddt[xqE>}Z<|Yf[:3g 5C-[888H±B9a1#f-\!sT 'OW_3[27ԩ0MbϾs_PyM6nnLSbcc!8N߳/23_^XTU/.M=zC;wg KJK*viw]v#Gt+O:Cx-ͫaº[|BJD_n 2СC:dӧO5k֭[x"UUՕ+WΟ?p/K VHܶmX,>z(nѣlsNWWW6^UUo߾z fxў 6 EEEVVV?w3،gg &|u;gΜom 4(66ɓє)S~徽|LJAܸqDz] v233HQV^Ƚ:xxx$ܳ37;ץ˜sr rVVP:|9/_PN _AΟ~zKcRۧO3|@8nQ(]dN~NAn 32uoĄ9 ڎ? !wC._?mڴqcǩ%bZBI(h ЀLf>yū#'ϟ=Peeecǎ:Z;.Z(/7OBKĔvY&~O8p'䎌 -;O_.-",q^$m۶UD/^pvv۷oEuuu\竩ݺuևuuu|ΝsC7o|FyyoE}7obcc[n]]*8\xQII _2 ӦM8v˥ۣ=<<1ϧ?%૰Wϟ>I4M8Ɗetٓ{O?-#2ɀWo/VEE"߽}V\"~)򢣢SO<# >71$$BMC?H|ꠁ,Aޓ$!I I0>6LVzA͐Wtt[ZVl$͛7O:UVVСCYYY&&&չ{FFH$ڰaCffN4I&222?׃rxxtWkkp%%%Ç^fٲeEEE-˖-]~@txxгytIDATx*rJizsݻhѢ˗߼yKgg3gx{{UUppA/@545>} $"??7m$AH$b׾-(- y$Rqiy}=/g$)*(yjֺeӖӦLW϶!=<  bԩӸ ~ܹC@H0"H H0""b뮭ؗCtnii)#'S&]) DfOw &zWsrQ022:z(vǎ߿*?<)) WV0`@@@@u46J 77ڵk={~g=î@,Z#88xƍص;vlذau8uh/{{3AG ][6m G2D F4 AFFFiۺSH0o2i$3S7oqe!)xiiik}d\"Q*5=~**Q1Q$xxO>8QFEE6Ʋ%e%v {zﳬ޸z_P-*FFFvvv>}$&&nܸr777c]]N8[:‹ k}>yWߎ;޼zs@4M[ ef=--g(ʴqmcciS߬>>t7귱Z,넞%))8**G nٲennn 166566DEEV\9i$(?~<^~/**ӧ.zUyyǏ2 6d^PX~HQw۶m ={t9jP(##-}ȑ#G*L>~"YYaCYhioշo7nTq8-%G /I>" C!5nҸQFz|.5 B8\UR8wrH$A$!Lzi->)>7h D`=z4Mw VxuK,qttgW.oX%**jO>5008qDӦMrԋ/ݻ7c DѪU_"BBBeI]D~_'?? t'&NX[~[߿]7rJK!"Nȇ2B1%%\˨21zQo"~k͘p(ҝWEBFV@߀$H P$ 4ITW K `g)!>aD K^FPl{lI!Hh޲~b ?S@BB AN>moo_!>|bDPPPPPPvvvu&TTT {w̆ Ə_$I = 3iӦ+VA>BU&O\?.<<^zeee8N^EE%''G&???&&f„ ۷og+#={Ʀtr=zdEQΞ=e߾}ifjժ9sppuz'wR K,)..n)**Z|ɗܼyk׮o߾n?1YYYW^ܹ̙3{#msÇ+++X䤯_c#LII ^NNN[%%ZjѢE>ohh>=ydݺusέuꠏ1y$t Vj !YnKg/رc#F8|0[h~ի͛=z޽M6mҥ{*:tؿǎB޽SSSG"߿C:tyǫG^-[A&&&͓$߳uj1 4x)'a̬Lgbbo[VxD3@.P7G7VK %HD"; }v n޼9|p}}Qnnn׮]i~˗JKKNʦl-th޼[=zϝ;Ү[.==[D[hѷo_]II\#166.++KLLdÇ?H]B!X+L]:i:i f$ un~sײBASSSg͚5j(c###Fqŝ;w7lذr"H[[[6H$aٸq}hh(~ŋk׮(z!EQ׮]kذYkFrp5~Vw '$X bX5<}Κz2S6-qrݧ̺@/_ {ܵ^zl>^ X ŋ묅;::Vg@@Y~k]eСʼGå ݻ׻2dŋ+Fppp|I,?EB cbHo\АAgK@"@O(d Ɏ# %ݺr;$)=I(]cB}}]A" QPTODgس!/--' -ȥ$#I$ W[&rff9@H b&+/>(PXZH1|qI1%T<>C3yBP^AWgΚim!Iddd YJAЀw^J%aXEQL\3{lyy4M|E}.XaC*?d ~[-oPFUUUӜlݺuҤIYYY~~~jjj1b?kpppTBu_:~PIQ']\x 00$\x ;?qDOOO;覍\2?7؈av=~8EQ4Cx4iք &)칳sw@ ׳' m۶̌L %i`ԈQ7n8pKdel㶍FzFo"޴l28٣gS&Mޣ ._gO}Gwr4~&?|жMdde5r箝jQy(|eU ]2%%dIM'O EBaMfocO3|YZ=ĉ/^Ҟ>>kռն} ƍ׵k篟O;gwMLg?C;k.]J?|-Z>b8AC[۷n7h@O[Hy$ Q&.KMK3jLxDCG%/'y)g{%H矧;W9ƍk֬Y``` Oy>}XYY߿O>]v=qDm ccSN9;;-sݸq6mZ˨J+ɏ*Fe1$ 54- 4?z|v#iҤ/_vλ:߿?u&A@G 3 #)cኅ Q,.wa ޾{kcoioF 4XfU֭|an]OHJI ۴j# J S&O9ṡT5Uť̂L׺y֕W֡_~vzՠ2C 4u4f6RQT)/xBA  džvo8p I82@1d ~!a$ |:}]oݺմgOܹ| bbc;w\fΘiemQ5' ***ϟ?_1g̸ ?G,?0&M-^VXPHBMSP]U]KGKAV{gETBz7o764!nzzzqCCC3== K 4v`0g+]=fh Kv9F ϤMd (",D#ooִD!8~lNѬ%~|}|IHQ NN] Z4k"hmmmcmtqqquqehřh84);WߴqS%J9i '??`6iT`Fgiڨ+ (< HwSAPW8~ڴi7nꫯXg5B$Ϟ=h>Tx3v`0g|m]5%'O-P_'MR5kܻwÇhX `??>))^z!!!m۶}K:t0f̘W$;ZV9VY= R%aÆ/Gk5σŋԩS,%:>''ӳVZAqܹMJҗ믿 ...NJLLxE" )̜p+!H.(((##CPlRnݏא>HpҥZj[4 ywxիW߽{Ǐ? PPPPe~''#G^t xq< IlΊ$I@ j!qy\.!PeR8$HH@ *݊L&{p禎ػ~qF!!!婩0믿޽{aʴin4 Ku<5`qƝ9s&55NNNk֬~_Z&!A_*WC!fN#!ac2!ah#!dötΟ,2'$SR/?{AVW3A\U^ +u@PZ̓_[GP 00,_|ԩqBB`0wh4E5o0QqǏRs!Nk\1B.v8xO><>cڊ5+Y͜6QiTqqqnn?A(23VOvѽ\faeѾMGxy{_׳3)$@jzݡB~3@!tCrH.vl_mCG|!<1 xᢇnj3o^/5:MdxmbR⎭;G/]/gdf04~z[kەrӣ@BAܨQm۴MHL_dWjMC=<zZYYI$mT7HǏ3__ߠ&~@k10cl 2!|4n2gW/WҤEΎW.]K[zX"NIM eWSu:i9o̚?$%%e`߁P 5k7~͚5jک^@=btaYaak֬YxEmO:–awww_䄉&"_9Ci 0N@[߼u_W(>>FӦM3go߾[n+U71߰pCзo_N7tP}ҥK=<𢝔of={F|~T(B(nLʕr~РA> ڶllT/HQ{xy tT~j׮mic&fOfgB܄G)\bG9e棧JKJt1^zyyH 8ӏLNI$ 1c3!f͞cGZ[[Lx?SrbFƎCj!HYXZ B! W-YZ4o=Msgutvb9*%=z>>}t"TU7bbbj׮񉉉Ɩ $E,Zn~aݻ`F6l0~x;;6?0BrN#IΑ Yvm6%ӻ7QH"U.#Bb&qtpdY˧VvhlڴiStĐlܸ1`kV6n>]f-v"(D5n9O/ bUVlAZlԴql<:wWww7orI@y~~z: b.\iEx "2BVmZi:,<=hڈ;q@o={&-I>}V7o%hѢ8L.޾}qӧ% G Pdǁn@$ Xn sA"F0 }~;zpα|~+}8}:6n?+m"U]<;Wa 0k,'G'D##wm!9 b( 043%<(kJ5 8wqss&LQ1^;IΝkiiɺÆ ӟXdP(ԧxxx,^p BÖ$Yz-/1V*ק?jN{gp@Cyfݷm1tĉ7nTr6?"`0jF)*-7؅%/7}DAusss@ڸqĤg϶ku`0BQ4EZҴ./+/++{Ŗu<߿W^'N'c׮]&&&7n۷?}4[n4v1 !)*.JNOv֤e`)ػw\ۍ- `j$VVVֶB,BrTVu)?fff7of}[ HRiRjR Zq6 H$:AB< Zfݪq<`052;`0  |z EEEYe֭-q<?lذ̴ddddff[4 c8|߿ *E4h|q<YqƑ#Gfee[. c8űj*F0> 33aÆ[X,NNN̝;w <|q,Yݝ=^p0XXXܹspMc `c89aÆuSϜ9cl^EQR J XZZx>>#Gڵ>;v쨤Y&LvZc ` ^|g߿P(Zjel^kbcGDD=zdffu1 `v/K,9|ppp+>}y"ȸ޸qڵkcS BH;wf2EYnݺ5hР!CPTEE$O8ڿK=z۷o(oʲej׮c@^ yXǿW3f EQ;v옏O.]_7mrڵf]$}v???w&88… ߯[.?̝;׸¿޽{Ϟ={7nۿR^zZMtR++ѣG[ Sy .H$KKK__߲Wd>wD"?.Mӗ/_f 4(((x1;uTPPpȑ^zi4#9={SNN lVVV$!!T*ݻfDߐ3gtAon=wڵpcܹӬY3ooo''ϩSՒ%K-&8ѣGڵJ:t ͛7?t萇G۷o߹sgv8;;{ҤI:nڴiƮ7BP=СC)AAAOW>ƍ͛7{lTTTƎbŊwzyyUz  ؼy3pYf;w O-YdĉTr={dO .믿rss?`q֭h첿۷ooӦa  \ٽxm۶m~:w|1EQ7olҤIzsxGGI&B֭[ƍ[tىDOSlml0LuuϡC/^\)Qf2N>cǎfp8Nu 8{lnLMM݋2888<|A33ݻw6?""b֭5q+r;w.;;WB(z{{?yeD1?m #G| |9e]}.޽{˗/߼y%@/_j]Qbܻw/;;{ѢE/ $ߋeccWeO AW^xYYY˖-tUfcM%|ŋV@I\z7|S$ p8m۶篿"… 5˚O=b0_5J4i;\RO޻w7V:eaa榟V*Bej!d3vС 0ޞa0`A}yAwBhѢ]) &Nݲe/ lmm-Iy#?eʔիW46=//mT*5j}vJg֭ߢ ())ٻwOV̌-E e@#NrdS _m;`dH{yy:cǎo5rJMM޽{ڵ&iiUz*%K+mWq@.퍈[fl2`>K׋xyyyyyFDDk׮:$I -[vt3-Z?СC7mdlY0 QRx| 7o.JWZ͛WXXF x{{7iʕ+_W B.k.Ç7 oMhhC-`> Xj[NNNN֭ {x%I!Թs[: `x-[\xH$'a`|>bcqwwwwwwsssww_233<+W-)| 8ܴiа06%''رcmڴIJJrqqYbŷ~kaaalI1 Sux1~+WϏL0_~*~`>Xc>7 }v@llƍā>|p̘1Ɩ`>xAҥKp֭&BSRR-|R8ѣ޽{n`0/ <|xxx۷O"[ 1&Xc>O-O`0 }u|RRRzBBBڶmϞ=cs޽e`0 su|NNgZ ܹsM6J/ߣGBX\\ܿ |_xqjjի޽{ (((2?;w;wnݺÇ7v1 lywrFb.X`ܸqgΜIMM}۷M&9.ص`0Lǟ>}z)-Z,Yxw^hT @II)`|00  .1Lt$ c@rvv.yGh(j޼a"B9sᔔ7k׮׬XY(+vs`X ܺ<g.Sy/?w+W|O>ݻ7{2~xO{>+9y$E}Zz; BCAV)xq]6c_lNz* uIsu/s 4b.+0D5>r8ťf}6m4|u^ :tEbq p ݻwܹ'֠ p8o׮]zg83gK ~|f8^? yO*oԨ{\~E_zeŁ3W,^M=<<-aiiimmݠAc H$ƍbc v4ѣWᎎAAA׹KOm tG[P F:~̘1cƌ1L zaXy@{9#3U![]50FvUZa0/w߿M6)ӧOUMCTKj8pUc05w΋nݺX&ݻwo ކ $>~~T*J2l޽/.B"լF5$IKI" \.R5V`05w>}V7o^+,Z(..=.++zV;w^tشiEx׮]kl)ޅ[wQFnU 7oE`0o{흛;w%;. ?dPOYx1 |||:vhc0 ScV?&& @@˶;z1q]? <ر?d @1*WD{5˂`0 $\?N`NN!аE`05`*1l0PIgNyL5A-tQ AS--^2Nԋg`0iN'1CBE:B Y0;'J5o7`0_" K%#Wٳgd2иq\\\-k8y3g -ijݺEwn޼y̙/HizŊ͟?0` &h4 $:nٲe<e˖edd@BGHCT*Մ HDXVѣ 6}a ?;zhv7VfcK O[/ndf"B(Ν;b0oB~8vXddmB!b^諩?pܹsٟǏOII1PڵkW(H>|͛7Rivvvlll%?gΜ}?Ç{ALLL޽۷oJ:~ʕ%g6_hф  S(={g\\ɓ'>7xWɓ'|YYK{W8 h֨5JR!WOY~zg7Ο?_oh"{{#F[NbWrV~ll>e޼yڵ3ջRRR~7?2_2[lkaYfMvBCC+yLLΝ;\^f+`V cjڭ[ٳN: 擀E!F]֭lٲ1c899B3 leeel^Ŝ9s/^AtT+uveV [.P?~<<<|nڰa5Mºu?v#pƍv;v8q͛8q.ٜ={L@ǎ&i^dСCwݺu PidR"1 7mTR&((h̙Ɩ\]]*yޥ(ٙ=611PMLӻvZɫBȰԲeKVxf^b,#""FKѣG SNٓ*>b0SOݺmab6m}h4R.]L]& e`0 кmkcKǕ?%nܸ1tP5>qƯiӡ }1`cƍd;3 `0af͚:tH}f^jxu<`05Ck(EԤx `0 꼼Ο;Rk!b`0L yD+ CWca0 `:*y-=+++YB-Ug:T`06 mjYSX/ӦUD#H'ÿffM"a`0p֌Y߸o"ۿ:^b.)ξ `0>9M_@Ӎ-&`0w$I?# $IBm) cZp|i|,}˩tkAM  b~;4337~̗BKT3=;!?Fgdf;|.oT4o{@`{;lѼ|"B6664Mˊena->/Z8C</33CpP UFd- hCYYٛd$u7XK @Ebss/!R  dK2@^ׄDSoBD"x~ٱ?OCT+AlHb[; umXj7|;`>oBpxڲeKЛjćо&F7솲.Qʟ&|LUö9 /TB!W̝5+]^)0% ᆬi8GuZgcy/_ޡSW._rᣇ6^Ҙ )p8@Vټ _^gFz{^j<|r͚5@DAaANv>|ŝKxQjoR$RX\H]f/믿X#Û$n:bܸq/>JaH̸r @ B@f+ 40[*uv5:v4ͪիZ oѡSoIJOĆ޽GcƤ;™fv!_3gHD ڷ_>}zsNVӘoY_^^>k-[iרii AAMNV_Kr5Z칳F-\PP "^ow叫p8Њ+č/gw܍),.GuZpTnxcڣ?p8-p^TרKFѡc &p8V5i¤.ݺ\^t鍶ſIb[[Q󑊲ь}=<eʔ:}tW'WDRۿvר]v~?{^,;9;rotFFBūm۵]hJZr E;Q?e!36nl`]{vkY8LlFzLElXdT|K.ߏ gAAi!_iOdժU.^߲i:cG_pmڶ:i9[,/mz ??X>ܼY. sRE)֪J uC34C3z?Κ>;kY#o]tz- <{)JT޺sk]pQTǨyPTRtԙ9tuŐS,3w yQ^^~?_?ch(JQ:JKiu:Nc?n$'$?nwCW\pԔ1?q@aaa^n^IiIJr ݛ m۷:tm"KKKI)-\'ZeRYV۷o굫O>R+W޳1hVԹr՝n"yTڵsW!d}mUԴԆ 'NxcǏiצTVӖZ9Yfewooٲ%-=-/?$'%8pAl*߽{kŅťҕ+V޺uUxxwԩS\LUg o}998Iyy$I$5 ЁocD''$kv@gggc_j5o<99ڭk)}o gRﻷw@`@Ν6k ߏ[Tg)4Ek4NQ\\Ο9߷oA^qN8 ?J}"m۶N>b-$$PAht؟lnf @س[93ɧ OwѭkY3go~]< HTYۯ3IHjڦM#;퐙QiDǍBظQSgiL^^V(&'%eҩ;wtq޼yƍsN^^IOw-e28$xРAӫϵ?Dwz}7ĉΝ۵G׀ooݻ7lؐmeee^kfffJ+-۽K.f o qFAnAݺttk>}}ىY:mFxcG3t^~83..3ǧ`eܜ\Gj[7ׯ=vTR_$Ab gNpM4nbmi(S$>KFQ+طCVJm EZVTk.[w啓j٪ŋ)KRtE7B̉3u@40iu%IER7g7y\Urpq`ƶ0Pe&63#l,l&(ܜ\07mNMIݽswHfa.H?UVZRZ,wpv`20O̜LH$K{&%%)JWGWal+NDRRw۷oqaFqtvi*'7̌gKIOy# VZST$3HJJJJJ\\\hQ: (UDI6EQ;߿Zb}E4M ;,~ =E߹ugT(ww22f=Kx6uT`]PP {{KkKY\Qneeecmhll 4u|>}J)d^ jA)ABlBճEefgee۳fM#@/haE|CĢZj%&'ˋ>Ќ_-?N_]*/UU>>.("p |!HVp :ym[|>(l℉m硞ڷo"[Y[yzyZYU99"i@K~N>EP nlemE$cBo^Z(X'wqcyyU@._r\R[&eeg%'ڹKCk7; ʋ7j p8$I>Kyfiaiii֪,  AEMLTTP`PjZ'h ١ чnuK7mFIK| ÐLMMMH߻s/M 4M3aoꖙh_(;r0ή\iݺ5τ `z0a+BHKϞ>;ev !,--=qģG.vעE{>o˳=h͛6B3!` 8DtVXv# Ɲ?rȱc̝v51 HV7f֭[1' +bTЀ$ɤ$KkK+kHdkg !trv_& ` / @@!*/mj%-d dM B!~ü|Zm[X~?{.*W\}lvNo;vX^Aʛ6okϮ?OB.hZ7lomZ  ЗIO%//kKGOd:ڲ6JA P$AV,jǍ7~QFۿoϓ,]tᄑy&$D/;;;nLuyY9}ƵNNr_㢢"@Y!LI3suV}< %)54 rt]ryM,-uQP(p9yy"SQffobj1cmj ~G;("WWk_irK ? Hē'NNfbE"]VVVm/^ܿwE-- O\\\6n؈ r?غ]pVlpgWgH!# }}B~>~]vi66b8iRtpr/ר5~ή]ty󦫋+

    YBbccuMO7)TDOϔĔ={j)׼ ~> GӴKZk5hҠTQj<<<^ۜxw4)ë[nAAsͱnw'Otswc+ }S'M5кU{xdfd6߰I&nߚ:cSi=l=4MӴ[ttE mml9$G-[޳;+++?''!&N?le&͞ᆅvN?4w\} ğ'L81@1HЈNNJw^pHnܸ1/?p<ޮݻ4͌3ڷmfY3f۴C7!E+V(*'/O><^dD#GRSU*UpppP͚ϝ?Crt"6߿s+`7L);udk1111Ŭ_aCT>`O.YdΎ-Z]/⻸tmDb;Hj [k/zpu=Jz$/,ق On:2ú%ʋ|իW):|pp_~6mrJRLίTQrʀݺ/]Bb~CXIS $hEڊE]~۶Yf25vVVj:-5N: "5)D`_#G4 k(SdKSRRAvvJ233SVL\\9BIT&EA8;;gf򮕙iggGQTfF&M|ݝ%r}]@@@dd IR4//!v%|U$%%%YYZI,$4MJ Bkk{y<';GX[XdfeȤ2[[[33 .ݻwDq$BTde|X,rss) Enn|>?99CRj4,OOOSRST*I\7##CZ[Xkt77ﻺ>h4Noɓ}=̬ b31B TDzeIKO_a !LNI.SD"ww.{G ?Oi|WW>!H?yUky|TfdKx\XtpJKK3҃4Mӧp҉zZ 1}FOqniif..j:-=S (,squiu))jƦbDLÇ}}}MLL~]+ϔohNOO/J%N.Ne4:JRv&ÃALrRrRbiogg{5 cH$iOF1vBܸ㎉ӕ*t|Mņtd6?~ڔi ˊ Xy>F PʟÙVZ oU=x1Jw5uż3R"[y5nl*zm "1y eR٤ɓ-gma];r^,KkC|U wWY.1xzuZ--,W Qo[/៸f}4:N:LT}o֣3[JyKbe{G w_bɟ GxE&ekׯT6deeIuTE^J bk{eeaeXoxO:7JPT5iD?3ruu5\.qǵ kٽ[i3w+V.穵_"yRzvPh*477^ěLgLh#AL?A"L e{(miii!_7!$4 B㚙DΝ:W+¯|K|"@{v T{A'<E$ ۰Pږ&bՊf:wd;[nu좕>: `dDK;^, ˵ri `Ww!z琜Ъ?Ay6|Hpk6QemmݦUJgߟ1|7PUJ./pH?z ?͙?b/\@t\ܘ*<|U5]0SB v4\&1}1 DM3e !(ZS9DIIH$211dBP$|X,(E Cr]o-QdxHhNaC2Ea `j7@ BPafJY Ui 7{ ltyQi+t|X&L`0 !P*iH:#@H,LM1tΜE6h| _g04Uۛٞ1 qK 4EΦQ+n][7S? ݦ9"IENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph7.png000066400000000000000000002455161222557406400241220ustar00rootroot00000000000000PNG  IHDRzx pHYs  #uIDATx]uU~93{ݥY;TPlEQ1Q,D  ievNs?ݻKܙ3Ϝ93'@^|38@ @3_~uC )B )P77oPU @4 Bsׯ[DzK.qī^0A322T5 #~S&7n$l߽}gsU9D0Aa0x͗(nܣR!,&ƀ20A(`dE D$ zE!B尀/`3CP4BT:< (9:‡@e` SkCp"8X S@Uj N Cup S * ^p 04@R@UVU+Tq 599H2E8i!b@}8c qN!&^!R9#1 zUP8u"Gi@a9kH9!GYO1rw1PZ J/**HDa1@@D@ "0 B"P!"A@ё@ ڽc7\FX  a$=.]ǟPTs, /" s8b!"PO7_h{ L ^Ka$xz6*g ԭuHJK)NA2pդS& qU/*iVs`5cLeaPU(UW1UtD*8j5 Pɩ4bfU(-ƨuxNAe*'*Fj+tTp%UGUN8U'sTldVp%8Ͳ^A4T^[sf'$sqNEb'FHTQPm*Bj#WLgZiUAeՠS 1UsU9]VI ,u2լUQP한83R%'i\aĉ9AeNPzfy'jfr=>FQ!>.H4eIBŪw3nNM$j\Ջ+!S3z:1OuqVIos %R%PbVs @ 0#됀D""BFa$  D@ zNo-FEA'Za1H4 ^DA t' 9& ~=}N',AQ%fQLuXDRu8 aa^V(#Ee0_$|ܭ(&Ws޹}͘. tcǞGG6?97N'`HD { eotC7cQ|"P0GA,&(<Brja~|ηc5GHp gR/;tWnѬ}[w+qL+E V3UӠzzn1HIw7P2Sf:Q*uٹ7uq N>iR7GupyRC1Ge 29F!ćLw2og1h Bj5sJq$N`qqV#1GTiӊJrf%8lhڭ<VO 28PE:1 z8@SrUr\V6NDF1{(r8AĨ% d8'*HɈJ=cp+9BEnΨHڭ\!F3^d4pQD^n2NT.DZ܋JNsSIwVd\tR7W@U8e*Eҋ zQ[(!eiq+jf$sAiBb^U ?,zݑ7ss @NŪc,p.ṕFCCT^ڍ0F9Oyq!x c;<[FLª- PJ駟N|p0kw-m=MzQW\`ALJ?VxE籣fH:Zuح|m`R222ʸJRYJUʴ?2YɘJ!m'\N>1JREeqeLVؽ7dX˼FlP߼^]E~CצvL*T* ZԸI6w<fᅦU3(_VjT(c C7?_w瀾DīWOQYfv|hn`PTZ)j9]lQ38䤶UTּ~MW?P(:& R7z"{ 1U*(,k4;üo_Kw=۱'LnQezC`1Sr2^TJ.NgwPdv*c`e{f]9}ԿZt? a8^WX=ݬ+Wo3k`11E[7ٽ}=6Sڨys'|{q!a4^]3&m|5+O+/*kg޲2zčNuťe^v-D)d%F ReȔ`PI(-Q6ꠤ :٢2l1v#*, DchBpA^ 2Ks@(Te*?6 ze`29 I6x*8~P%pgLQnA,& @I I% Tpev; K4 0D) lT'(whM:()X 2U9]2B`5Sj, [PRmFSJRY+g ap(S271 l5@T2Ab4 0WrXTL,>0Vp1heAYyE=KMz(, KsBN'2U㯺ƩKpr^3 #Y( \5NR'Qd/֫[.3vl۳]W?nnvlu3p@3/7 ҬgTU^-\)];,Ƭ/5~)=ǧk{ӞxN k  5S󯍍Х1hq|Ϙv?;$F__{]-3%p_$3@`,\88kkD90lq6o5Y-n\7uqE8+G}b7ۿ_o8Ck͚9۶=P Z[fF%CݨNvhk{B6߫c_Eo<$u/'mNHr(V~0@AFx< `! n7(Y,AV!=BAItpV^/M x3gx 0Dc6+ ^/L pkzx@@,'q:@![E= N F!3N 0,x`2z*8fxA]7gZDT lup H F xܠls:,JQ6Hv`2`A"xܠlsfg N! F{ff .9EFz8qz@Q8!.HQG^iI4RJN'H"i1"q NN'x&q&\rToxr];vzѲZTr^ *e_չckŞ9"xT+ #SƬvԇo;v7}dVb"c~p9כ"z- LM4Áqûdg/8%#Sq@03zQ!鴝ҳmY k~wkXqNUjHrY!!Fhщ9 T"ϫcUسI&S&ԤqV+VmظK`((3`Eb ppoGbhE L{@(TUi2*B#UY\P cL:dDG8G(.I\@ى!#("U(YW"ʭ&KX6 c>E(%:QEjCONzt,)ZDeТiW7ӥ6n-I[,rekS*pz b2@첋6ʱ,^^س_WEnQDBq= dP(׮*\W{L(Y/NAR?@2T!YJ@,ZSa=@_Hf^uDb *'8!c:?K̅jbE=bnCb9A7uf*)b/٭HD0# L".""qX (gX4k>m4feAC`lUWѱm}{7dY$;;O{X[Myp܆m/{38ۆQe}*+qR`eX :4z@5kYdVwN(e1@R\ԙ|ko +.;yy~d5b`c$U 0F!c o^soMWjݎ cǜJyo~}cn_}fEG^yCQդz' Xf *uBgPa9p4hSv & c`1qYE β9Vr *g9piN(q!&S'r܀ԃioحB8 fWUq NgYXWp6+*uǩˁd(W N"1i`sL zTYYtr@$64N8'C~? rcg@"1YxTBVp PoN?H 8jp1,w g$$Nsrj,BwbIV $ :."i嵬'i`"Hq΄G%W1/uB< u/կ(>GMƷ]wHDY|2G ?u[{BA0XƨM~'J<ÆxhnsRI:+0 Ylry tE  6a'XxnwO URI b`FSْ8Cy&mJ :)Cotp=M~[8,yn~h#>),VԈBcP1W%GX !ќa2gĔX$PH1s(pAnP@d23jg=xoϻ'7l-V[ EK$:ŚMRgќn4<]zlYs$98^;Kܲj*ꏄ M#)Z 17'sS8%)ܿo{ -YYft' `4^Y--KDv+0[Y(9l,*A4VP`f Aԫ08lB$+icQQr`;j:N4q `Ur3dPr8`2e^E-,js`8̀0c G&V-pبGp'eic(dQp@MIQu{fS˜R䴲p'@ME Ӣzv+0V5N $ ;-P7\!>Ő$gC򷈹\W bӬ0@ sF9 B!c p$huŬG G @ sD@q9m4π#TN m30G"+hqa"9"*!X_@zf1 3o4y%,XDVA/qr$h8zlfA2dcA<9P5FMG$4'B+Лod2BL (X\Ui `FN|aVrt@-aeȰC0Vf@0D03 P8a0Up"X9@YNv Z!D0"X Bಂ'B 9%a )?"A@.xjX3 :8%@L"PoN$m!(i@[@G@!zs@Z2g23*C$v3'@3  #A ^|a ]N"Z8u"5Nv+x9;LdN@,4!gj yٞ`{nZRՖZA;|3fr;0́ln׮v.W^.)+-x=m۶ F\nB]nӦ6HJaa+͵o߾N:է>g¢"mb4mvݝiZ*m:v eh4rssrY@i"I!iܼ\ɏ #uD'h4u3G9pcB @ |BŜƍ\iӫxƙD%882}^סC/۸acvm9#TfWky_~2Yf-[kX=/M!m\-h2"֮_;or-f͚:u*eTϡµ /~۷,^M~oqw 6CP9|3?O.[v7WȲ<*$qVrq0uq{w{`4IZh9qYYY}qgwm׵_/ڢ l*PU#́s/Z2UR%xs7o<pϝ.?|92///ٕS{1@UKs^hZa-E?b8 W]yõVN"b뗨ɱ⤐B )"moN~-ϪN;3cYfi.(y?2dH˖-`ɒ%k׮[T Zs٘Wrc+YѮ1.,*|W>oG)x 2ɔQf2{˷o~*T ,7^_ך[oW^5g ]ZtYv232}> O?tm\9?3ԩӣ?ڿos;8)mڵUB9)Ob۶os#1hѢ?/YYc˦0m޽%%NSm۶=sNhzsƛnӏ?k_ǎUk׮۶Op0vТE>Inj49v?0{qhDeEQ|-[7Kg;cϞ=e.Ϟq{tx8h9%I C;q/[l֯wڵ% UX>| ^W_ySn:(_Dž?:qc-[j0(W^y/RJmܸq_~o.v*4;Qqz 9P|X۶n++) Rn}{;͟0TG`_Aނ{B1UR|-۶L}tEC.Bܛ6l:)9ǍڡkMpcFl%P~s^(Zz5x7 ][wsf|+0ꍵVTSJUY%@:w|}[ 7[/}.m̳zj5O|ЋۿMZ<3M|)trx}FYYw̞Ĕ+V]vz~Im0`GdecwΝ;_yW]yU_4sݾs{aQ!e駟ް~5W^۷oʓSdY~'4im۶+WoSOl޲g Lfv k׮]dI.=:5`t=\n}4-*(zɧ:?*+*;۴ic϶o(q X0 z{a ;/ifBV2'<Gh`IbYZ[y7"QnWrΙ/ PɦR+:Bx3R~7o^l0BcԈQٟYfΝ/NbKW.޷{>yNo|i]Yg&iS bŊ|!$͛eK"Rd5>/ z=^8z/x_7lp 0P )XhʴmvŊ`ΝZ57l6_?s~~\ ήSY-jBej⋏p G)e#aTq6fC52??_jC QNG\2bҤI2919U9( S8 U8犪L=8 b zy;v%Eَ!fnpFeff+V7nܲ|9C:NJ-!fXk+M6>r PF}PBʨJUEU(3~_^. BLFa7_vv6UjVyZFڵ]{5,[쁇h׶^c\iU~uy~Eh4ιfTb&]vStҷ}{h[ʩ”xoCzײej*|޻eEfQF"R Gš!j*UPF[l]kΝ!3q>=j pQF &Fl3mSOts 1152 X*f)B ) $>„~:<''믯UUeY3VUk-dɒnkݻwM74cƌ%ǹ; EhLjѼy7*()ʫUY BNʀ1 (9gg.]43;_*.!%<4!ؾC{Y.imվν;oF{^D 3;[o;\$D (0δ|egeW_y^Vڶc_l9s1ZgM `I1*(] _3{#Ѫ]v|rt<lܴqzzVvd*#2gsAo A9 &AtΧoǎ[TVs]wUy84)mwޙ$MFɼlݻKSJe)LѶ7m KW.wlC?KGnپ%"Errs.] /]7k}qEUBcR XөT%:ҡ[mMܾ@  JJl2bDۦB )} $Bo,Üin^Q?!d7xc9BhƍǏ&L 'Lp\bsWz^V-[eefBH&Mv`lѼA4̜1'zPQͷ <GM4lg6~|?³6m|`Wj6o\Uowq䷩!Lp|Nv FLoзО ry_4 .5j!CH222N|9ӋI&Ͽ7{=9Yf&K.gqSlh߮=c_~+o3c+PTޞ 0wz}0b\81! ,6o6>/+7k„ Æ#y뵷=:\uUSNٽay?-lܸqFzSN PJtLw>:&ݷwn=-NylnռSx!pvFat:3O?3+3nVN4͚6ÀEAlժUnN>C6}-a $i5v;&os۸e-ҥK=iIHhٲAn:͙6ܡ"w$I4pgѶM[F<;ٹ_zA6RHFQm!ڌ,T$ $E޽{k^Hp˭b1-|)BnzÆ h|뭷@em]\_rA};S`_h޳sO"MXG͉s5rjniRDMx=ݷ?PJ4m2!څ4.2 L#?m߱]kPX8sJ& h[\cV羂}VOYfC 圻n`Yfޛx6I5&cOp >Z,w}']*rצ&#-yV֨Q"v"+/3#]c_tk^, ,A ~? h0 &mmϨ+Rp)'\Q] >E zeW$\1D"NkB^]6NQ\ )π2}tټc׎Z}Xb1ʴo#BtҤIw$ 84m2~asEwc&QFaw4(8LJz>;+;s;5#kZN3/7/yւq7Zljthc͟kf1[5EAZ'+ցsm6c"eG x=o_mݗbsQ 6ιn?Yɣ@ iS7Lٖ*[Ծ6k*rCI!`|_un0o4=uڵxl0wj 1t!_Чʕ8ҪOǯ\=h#jGMŵ6;D=@Ip8h=ȓњ7ut@ JQb1ufA'xހ?yK[2GW3Ҭe !EQ0D | )O.e@tkFt'eOTc"l3U%>ԩS@8`1Գ$Iw&@jDt&](G ) ATXSNI17}SeJ&6n7ՏKMFŬWH!RWBɚ"HHO(PFA4 EB *m` P'BI nؒh,o=\QjqF6Hs^Lڵe˖8K3VXpΩJ_~eT*R1`La*8,M$6- J*T@€9#-h$@"RDQgRs' B@PKYbw8qʖ3p=+=+!J:r>S ]Æǭ˯wڵkGzubbFR6Yۓ7ST g/Ā1S8xR8rX`%\9b|=ѹf%~u|EQTBhO>d͏pDŽ/~ 6l6@Scxb#$q=eR O2kix_]WkԳwtD%=k6$A1x>qAAar]uU1URP pcW\gSnSR(J=OI!/LX/dzS> #lL-0M%64ݖPZ00x%+>:3^6b` ")P#0( g~)}O& gq_oϞ=u zLˈC9EaTY*wTFj|D%  }ѦM6G1ή6ڤ4ꫯ/8"JJJ^0_R"RQA_:O?%9E sÁ>3Brs=%% ۀ)phTEq;h4J5L'Ѱ!{33Gy~v"Z5trզjLY֚Jĭ;S8`kns@Zq҉?rXu^Sc'ݝfM{qڋ9MsJzKE֮[r:wLu}̶;W :rmu֩T GFO>y-[ F}{[4iѮ}‚[6˲өCO~`wO'}ҶSۃWYuՕW]wu}^;o舮y,GWTw) =\I>ؽk=?xSC$I@`K_jټeD,u=w/gfd6m dYVSNB!G0DIu`>OJFFFfM";)Lb$I* BHIB A*8fti{ܿ煉;t|@Z, =xqxsډǃ'ǃ3.+@0ܵkz(1A3Z46_4,+֭/Qi5*8%fBv?c{T|5|:G6sǐcnC0Uzj+0 ػolJ&1_hќsrryoMYm]ztW^3O]tEzQ?fɺbo&#+c֬Yڢ>`unZ4kq>zꩅ opSD 0pgyy JK'Nk۶7idԨQvX|7R[$ !ڐ>N!\Kh yT \ߴVq2Ѡ$KٙM'U(SNqM )Uu<>M*mǶ?۷o;&7tͫ~.x/2l駟^^^>ٞ9f~g?Sh`]}6n|`EaRqddskt:?6m+2ٕC//.nVSUkFq>/?4VDa +5AeZ^X2U,/)gfe"Z5m?lڲe^KHrTܿ6e42T2c0rՕj`4LT9\233+ UGEeE rK.$;7{ ӦO~E0ྻ3[͉і$47\[?Ez-2Z%S=TqGS2c*' (kժb`08κ>$|\wdAw;qld#Re@PԕZ~3liXqҫLAjˆtP_[Fc5vF -ܮڱ}'~7xSR~=I9mm.W 3Ù8"*QXF3kbTLoO~턻& 1xՁ1E2~0W¨ʁ3ƪ)uVE ),ͷ;wyWF$cHJ2̟++;;Q,V)#.㜷m6#+㵷^nuYgBo޶u?WٻWo_q-k3s JJ šQ|9F<G} /YLU+WŔ'Ү._ko޴y0TT3Oa5LܵsW۶mF6lhۦf]by6#>=:m/SYUUU$Rj2r< TZ&! Ͻܚ5k>cȬgmڴW^oTbx!cX8vZW!TVVf0,qjPUUdRŜ$s\K4)y7OsWDXfeK\NYg/xӻWo۽tRN`F1u*Sc≴J!U>m +7:t(ۯW^ydַoذi@*m]_6$~Tu_X͛6ZJW_}E)}7N;,39!WELGjg~rj4^bҡ# S&iz;'Z}c>X xp=ca\*UUUm߮SN7~s(UJUJ)q na2zv:up81_:ֹK{h06m|-iѶg]vq\۶n{vڳO>^Oyl>ޱC'?) hҜkoxx\[o$_g55NY?Q(4\壌(~5|v0ѳGѨTLx/bƘIo-Y,Ǟ EC:AgZ0o֬d'~m~~-[{=Lpvf_7GBNλ4krRa?.1`z| 'g-Flؚ%o`(4zQwC,"'"yoiZ򅵰gڵsBVW_ϓei>hO,!C6= uk /,Ӟv:4?rF Ai4ڜrh6-fQLs`4MF0j#iNιIo2 9|#ɁQ]i'`V-%L5.Mb(-# Ҍš@AH Q/MJ`9W/赪2(?n󮭚ڶk[8qvssrJ(j?kM{{kMVKIcpX4jTϻ|)snK~'51d!8t"&5n f"4WZ(*) 4k sʙ(r(EcV mܨ1(8P`4=1T-pg{b*W >8t:B_D~ꩧb332UE]|N@NɏL1cLK.dkӇ?w{(YLqÏxb}w7jwQN )xڋ0$9kiƘBUlR \ܻ{Oi!A߱9T=H>!Ɓ!sݷߵk׎r2zǽՓV%k V,ˡh'kgsfd@4V\1hҤɰaÚ6m25yf#B`"hp,5ѕYڞCc@p4Չ?(dlOPN=~k,<;v8qQq,!Re&)P; \u:#jM[h*S1zF`$HU 86bc4UIYOA,(+juzƘ B(CLfNL8UDb$R>b4ss<`2ujYyYܪ.a-Xc^[#+(ɖ ݺv{g?ܴi 76c/{ƔѸ )Ļ'.\p„ vkDpq߇qIe4Y?ajJLtc(bܧhychx#BJ73+ڹZ4tYJmb%Kgxbɇ0Ŋ4nח.]:obEΞ:A^\m>!yy,=ft|mЕUV/w}g6ׯ_}&P2=;K/m?.N^Mگ;'yʩ\U^0ĺaHp8T̍@qq3>c[C48!bz>9 ñaB@\y|j22)Sqc993?*!䕗_xYVN3p /ˀ1ΈHH"0`qAg[h ˊI1P0DN! QLpDA! [LmՆq3LS04qRc"zOrpx@3-jFrH[n۶dv>S׆gEÞI(fˡBJ}*.;w)߹NXUůO(VPK.]zxـ xP9Te*j8-,: @ !@s`5I]C>6!ϟ`>rJMSTx3Neګwois^{ݵ//Ѓw-[u]z~yЩڵnw*LaǸB j9䋭95h0&$믿{׽lv(+[vtuwK׉j??--oɦ|/p8t;O$~u7ׂowL0쨺yy@fZ&}_|m3Y%dz2!Z0Bx(Ċ`m2o+O4W([^D$:.ݏ8SJ'7iæ s#&a&R$zv; *9 3%>aIfk|+brϞDg8M1&LvX\m[,qbs<.]8x@ZˢJ]I5btY룴k!|g$Wc зeeEU*F?~}['ڂfӺo [2w(`*bjZ EʨNѽeTshѢ$ 'Kq5[L;B={PJ9{ S4 mbHӮM ;>.3)𷢊gA^F`"q (Z,icj9@VW"Jsi7ALz"_a)Q%ZdW8PFN$1tQ5zL;8ϟvGɳc Ь :eArz+x<ڵx^;UIH7?nX⣏>zvڳ ^|Sƻo_Z馛e7z.](ʭzYc淆- 0ݕް.yV-:ѻ+p;tN-uz2;#| s3sO yyy.?J ~^9<3z>݊5doޢҢxϿztS< =ܘ{ [og{ohvFVS55y/:aw|z=^ϱ4Bii {;# Gߟ BtWCױv>UU1L!Zvd%^9|wuGCװ915DE1>3t`ܚHVkC$aC-_|ƍsż/>l^wu׏7vi{zݚ;E%E!ÙѼIg{]vafV=Jj>x| uA~9j8)p ` 󓙛lѽGQiT eT ۸i>=t=7o³/yuTnr(:GC?UЖhxB^ސ'wqUU&crDJρ[-={Z$۝_NLUJSԮ zj Y_m֢G|Դ9͹tҳ<;M&+{.ݺ9s .yO :xc/_fݟk3fdcNzm[EAl:Rv{)!IeM" =YfŪGч|e }S~ȑofCWQ殞w\D=kV/c?@:ْ,]ve&i괩NtZ>_sν>/e%e%`4XRVTnr5Kjy8OeǑ-ǧ#5op+<̱ŇzΚxD9"N'}MBwr sk]e?Ғ)B '78\?o6|6['1er'Kpj% "cLEJLJLq#8 &5g#BHp,Y RRHᤇ8/bbgs>KǟдQ;v#aLpvfv۶mMF!BV.{f3}Ԛ% P$?chݮufF&f'h޹~z)B 6izY`@[b2OhH'h4c5s$Yڳ{OzFzM1˜`c 1f!1&`5NF8%%%N~𲑗-j֛o5Zy-[B0Ѳ1p?RHdS1ci1|Jǟe` [6<3홬,ERAon_yy]w}ns7m|7vٹ}o N}fjQIѠSfhf捛z|^|ż/bt[3.[Jr{̳8}{r-;B )prJAKMcHL;W[zOeCz=| 1E7:eҝS&MP(xb9C|Cy7WmXh"mT+xžM[7}5|TFFQoKc K-c7|u7r %s),K.-//@0\ti0l蚦p F,'I2kS ߰#.UP~K矿.np pr \vp "Yz")>*ƀ-n۹m~yAaA}NhTP0$Ţ[;/,Qv#-\8ԥ) /t:l]v]zsMOO@aa5\ϟwy͝;]s5 }) ^zk_D !Oz]52!u^Qa}?՛s0ŀ qEQ>ڬ AulnK޵{vvvP_{}&'|yμ233@z0Ƶ֓q85sK!;/,Xеk׺ i믿6mgMH_|q)5oxոB XQĔ?9pty0ཻۯݻuON=jTة>cEC/*qtܥhQ^NΠ 2qq֢E.ݻ,_|29b<*KryI9tǮހ/-+ ,6Kyy"+3)/樊z٘~{ru\-ƿ;\C?R#]|NNNN=O)..&pu:yڵѢ"a4KKKC#F?|j%@$Ǔjݺuyyy߾}WZ|]ҥKvNH$5jЭ_A9NHDQB9` `9<1r ?4;ޙ4iko6z?ߨ7 %%O>_X̖F<_]zKSB0yzfGyޚXmM{iڤ'-qkwЩO>]:wyڶo۽W˗7 +=q|~=^U)&=nʚSlS8Aznjwm-xg}CǏ:ݺu L:uٲeYYYYYY/2رcC NJ5v|uVܹs֭[; <Off7F駟 ݐEhٿ 3^k8dQ8e:3ovQ1- [~gz!gѧoYÇ tF;FƘ6ٙaq8]z׃>U3F1 3>l0 8e)uk޹~n)O>ʕ+k(--5j'|rYt4iϟ?p3gZ!Q@]oDQ6mN{o}֬Y;vزeVh4^}޺uz_xᅹ }M6>~~rJ-.{oҤI(Λ7oܸqL@ ' Nhz5t-N]9sP%V Kڬv*N9/J<\cZ8KԪڍ$\SyRlcϱc3gbQFK:uzדp~Z_a.{x醮J#9?Hu–Lէа/z꩚ZxbWZcǎZ5iDSpt8SO-,,l߾:3/\G*lv38SOM O::>1')T޹T޹NV >|̙f38cѢE>wѢEzk$0`駟^,NC]Hjk׮yyyNSO=D1BHNZlׯ_ZZZnnn=-S8b>'s)Ѐ9rY 4>8`ZCZZ+K/} ,}߸qǎz{zS(sϰa4o9rĉ{ь R8')-F##L"4\T޹KKK'O [`a^oiii4F:uCիWqqqbw9X믿>}zP8nݺe[zuBV*//9rW_}+| ݐ)Nh8s;w<@8,yMhմ㉐#.w.1222LB)}S[bEc˗/GN821NB)vtCviwH$rWϙ3_~s]{~zv viڢ>Bh'N[>?Sf͚5kv_z饡PC ',_l٧~ڵ!?`ɒ%}f8qb^^^CɁ;׭[jH-()1 ǕWqEP!BuNiT޹NdSw߽~M*/[oUwt:O?=hР)cǎMOc[[5@$\*\ n$Tr5q{M>t9s9e]&aF߾}ʕ+ 6e^Omn'DZӧO>}UR82֭ۺu^zn-nz>nYC~?7޸[:vqƆnyؕ vZ^rAoPbt:%Y"lڲ)ںk ^}sf~tE{_ue.m|8Î:Ԙ-?ƸX)p1zhx{س>{M7%tڵUV ]iRŮ]vm`0.\عso>x=AqpRFGwEY" F&Btԩkk7---]~7m Wߺ\e=zXj3qO>YiaH5KƷ{.8f 9q5Λ7Ƣmٻ'\W״;8-Πwjiޗ~^hѢEYy^޹;Ǽ{[۴s3ޞ7kɓ'믹~ .}=e)8*E H,eeHje-S8)_o߾SLi芤?t3|!ٳg5V=5 ڵ\gU|>@.DpTNeqN7򒑣/knF=z4t9g9CESrJxF8Ji˦-}Q́s޾}K.h+/*S_|E`=Y4Cf̘rL!k8VUW͜9vȥ8f̘mʺ[j/dI\ǟvv[C7TCs^mȼ8r, 51`i";VXlr &j;mǘB )O5k&ºuw߲)33fC̝&Y.:w.w.RHq:n֭[R߻weϐ2u?ΩsGZ26R>nٲ壏>~nذaɒ%<6l3RX5kW_z?[h1ߓ!@hkJsIgb1gX"04K~1nx: $%cΝ۪uAqƵh'BR8Ilٲ3g> ]1}ݻ;+  >ar[r y߰e3ӞJR$%,cƛ3bKF9v[6n*.)>G|47'w/ u|ֻ֬jۺ 7ސڵkwginw|g}[z7X~z)O|CEU^uomO?p,?8S'1qC>;|O?t^rKKa1bĈ.]|Mp-CEttt8hXXa;ww͛7Z/[V\\36l &&ꪡr˗ݻGݞ|8>>ʊzXv?~,++{޽ݻw={cYYYJNj-\}ʔ)ŗ/_vuuh)1:NV3-Xocs:=5… ocr lY)YCcCY9wzw?~[< Hd, G$D%''+# H'q XKPP0G~IiBB ./-eݳš(zرϟ#H#򠱔6քkݻwMF&&&7qKxx>u:f̘[}Ǐ~~~{Νxq*… ΝKM333}||=XXRR2dȐM߿͚5GSYY`SL>vvv Af^^ׯ_G!QYWyBiqhѼm6Q!E9yyyEEF :0s||B#q\RBYgq d3b#G ͘>˗/Y ?܂3C]^^^Uu 3y  ..MMEwS}}}+++OOSݻgii),,,$$5l޼<{ʴK40L999XBB/((`XZZ$c p)Su|WNebNK(6ۍJТ3 Am]mAA*k*wݭ+ (sN؎;pظ~#f2gX̴vq޽{HH013uT u' 'uݻA;gs//ɓwغv'MZUUEZZZر['ղyJJ' T֭[o>m4, BQ ;;!CC]V#IAMel劊 ?_(0615bAQ 6nqF:y6lBBB8кF?NIIР  |編}6mnnnaab ݻw#""8+ܿ]RR"$$DSvTSP355v#Pw 8εaXe1kVY(` @iElZ= $$hhhj)nNNgɖ-[?:hРѣG(y樨(NMMɮ] }}}Wl55~>yǏ'N9s&}$I)))>>>aazٳM AIyb5<yXlͦ|~˩Sddd""",,,ّǏbZ[[(gرcT /_0`eYYٸq455)!5~qy&%%eW\;w.ɤ˃vڥf͚k׮YZZ6)a\q;A6lz*uLN;p{R֮]K[:tΝ;GFFR6wu@R%&aÆ0'''777[[ہ.YdmmMų6m㐟;n8tuuutGG=iҤ &t|44Q'FΑ@PF"$ H͹M5 'q D9k6ĘKK"k02qD777SSe˖5jذaԥ3gxzz>{ȑ#cƌoy^SS377W\\'77^Bwpp0a,u̹}{5k֠(ȑ#+**7o Cʆ:eEEE꒺(uuu/_a.B$t<>???((O>QQQ&M%=y@L|?888Ν;w" lڷoIt?Cb'J~IrݚA?z$_$BVUUUUUkjhɩi{kµzHE]]=88xӦM>}b2 IKKWTT^3u rrr999z>+''GOEEE90LZZZRRze')))&&7nѣO8)_Ϟ=͛G2 999iii))))))iii=Үt?68ud@xx3ӺsC;MNNNrJ罽kjQ e2|pɪJ\xnCGDQDIees s `|. SˮoȑG ʧϘDηhHqFy9y,\y NƎK****** g!!!@<Ν;$BBB-ohe9P,ˇ/_|x'!([㏜9_WUWZUz%>;e1~B >|N$ h:߶N?5qE r{7|o0DqIqʗm[E#hι#/zzz<<MEyE!0џ0vfհpgYN)p3k(TBRbȐ!/BT(VV ..).++CY߽7|p$z$644eUxW;aÆ[n%gϞm2 N444nܸ1a„T Cr[Һk"W.c؇$H6iGjg(`0# g;$R$&'Lwpg$ ˊ߿` &( ?mh@ɉ"(?EPCIdwڼsVJIIAf0 6m$$$y nwqqqC {<=;@HIGlv-I {KH|My *A<`lŅſggձ(4QE؈2 J?J~e  vFvP2Cx_ @$A $r ͊=u$=5cylْq+W\7oTWWrssݻG@ږ߿ws333hvbƌG]vQt!xPdddpos~U,e>\@X X`s 1!q߁}#Fpo/.).$ 4l0@,y,Z6mzF:P@ԴD޳~zQ!QeJ/^$ ; ƌh{\K =p1tHYyُ5? ~6gP~lLMM}&---######!!1k֬]vC!?STTT̍=A׮]kҬ۴M>IBBBǏoxtQ]UEѨ׮$ ;,8YtǤu^[XXsէWO$N?9/ Il6bQITB p' q6&p' $A$H?OM cױ,q6u/&u:6 Cq6Cp+&&I>x`|||Æ ;s 8.ŋONr$9o޼7oR;v젒ʟ={0--Ą sEt׮]5`}}}CCC333ptͷo|:uwwi @{~~||-[xzw^*;?}۟Rgg9vemTٮyTUUɺv>}7o1c i(Pad>~H/9s&44fggӇf>ЫW/A0 { ׯGQ͍uaѢE222߿5k֋/h3dٴ$I<: @ѣt˗/_޼y3uɪUDEEB yfzv۷oHKKe044}Ν;EZ:1 11PUUu޽aÆ̞={̙YYY Æ pB0[φ P=vX||׬YC/-P}l~ɟ)S|1,&&M_ZYY}. x9Gk@kI옼sw^d /// i+\\\zmeeOC>BZXXhkk/\P[[ɉSSl6wÇ%DDD͛WPP3r&8p i~EŽ>|>mpȑ3fXYYڵKOOApuu1ct1 hرwܙ0aBaaaRRRuuɓ>|h岲c-[,::siμs%vT9EXr$ Qe !0L'1p PQQDn͛ccc\B}3?7A֜ӻ$IrrRSS3~x]]]###*͌3&M3&l3lNq]~=<<|ԩsE[3g$''ܹSHHkFt|AAC{##'NHHHPي,$$> ~.i@iiߦ緝_Iws9rҥK={:u*]8sLϖT>b޽OLLw444Kk֬IOO0޾ލzN1ɓss˗/_x>>ɷnݲ|rIIIAs.|k֬9sǏeYv-uiӦ踸8 222ӦMvZQQɓ'߿oT%s楥mhV^mhh秬N#bff-[:><< W|:hqttkǫxC윜`HYYٱǦΜvL:y䱾|1&.ݢFyufffum% ~@1qcηK/]|aamsηZP{ɓǍ x h~ d۷:-p@UUu߾}TW^=zCRRҥK|||Ԧ{9.Ij%G8994u#FXYY͝;mt~={ZYYQsIMM0aB>}LLL &LS ?N6-77חeFFF;90{cǎx񂪶o߾˗/=~s֭%333 iZosGhǷlUUU&333''AJKKKKKcccا!by稰2u԰^D>xw拉UTI6yߺ{̩3{vӧ,Y޾Zz洙n^3008y ($I& $ 2f5W ~uť>}$$$ʮ]%YNV/ys%=M/+-cvhjk G'IREEe \!ϸ=$hy<{L& I]HӋ* àAx)]Hm۶m۶/^xbRK_7}*//3gNii)e-O3vFoڴiӦM ˛0033srrcP<{ ԷsL7nH5s&$$ܹs(++ɡBTFG2!`0 $^x>L:u/^`l!5kפgn۱zhjj* G; > K]{]pHK$+%min8Ǒ$HM?wI,:)**r@Esܬnbiilggh˗/oܸWW!^S&Xz8qă>YBZ( A8SRdeeEGGoK4}QWW`.$w@<m1: Z=m/_>x`ҥ+W}h988r]P +W| E{6}cMMMU}>}27pga Ͷb(f5jiwwFaSS]Cլ3f̸q~ރ Ǐ_xQ]WM;cɪ6ӧjÇ'lUN~!>W]]>h %%%J~ ^zE Hwt7z=k,555$,YI]sNPPиq(255NI44 ||lk]&&&"ZYUh}aa'$d%P"$B4NF5 XuVqcPoT"8&U'p@;[-'m$p69`ZQ9m5+!/w▖Ԕc ~|L>DSStFFFTIQQQRRܹs"V勵5A$I8pihhM2 $h)//OKK9ee +0yW\1b:8J8Sz1 80qSmvsjگ& fN"0#xhϣEEE,6%O|` 7XYYWΞ=˙P۷\VA nßkhhԋmD4;w3<> jP-/-OOOXׯ߻wF0\\\mllw/0:'a0j 3vؘ1// ʟ{bbbs564#I$I Υ qY EeEG=?'}+...++󋉉6lX-ݻ_>-- Ik~`oHۂ߹-Egx8~FJJ U=vX(fh(( 矯_Nbcc-ϐ!C"""hCc ESvU9/gB;(JywY ':gϾxb߿|!<<|Ĉ t#0gϞJmv=Za 715z9ʪԴ3QVIJ _ T5*GQ6c-XEQ}K7*޽k.ã7#GB߾}Ը= I/_0_R(~޽UTT}έ;I..Ϟ=}ԙ+Qe (dggX22**)))rYYª*O"lں*J*S&NSMu "lmd`d2sss 0 SQU<}eeKII7?sn߾]/U߾}W^A H@ߡչ L׹Ga}A0䗴3;ꅫbA]]WsN1 jC?~(-)---9s N((D{(a|۷G9𘚚=d65^^^SSӈAl v@Yb *1_VV͛7IǺu\4dAAA* oGDaQ>}: kVqϵɟ SNhHg)Y>F}.Z8,}ų/2liS TUV%p"CGױW;5611qʊ3m]6XO0w}::ή^缪j<6ײ A1eeLK/͸qN:%''7oެyfee@ ȟuo߾@ Hˀ:;hiiUWWEKKrLw~}]]wq&ώ;d0UU)u~}\7X />@IIIYIBđJlvom@4 @EEEUEg3h\Сu$$%$P (yzkTUUGs ? ?##'8nEEE o[nɓ=zѣ;[?~ϟyyyi 333-iƮ]8RhhhBB0  xzx8qƍ|ZnfQ?BBvvv‚?#w?5:q^MU-߿ ˀ7ϟ?b매Y (UUUK.K\A 㹆ʕ+t())8㸰ujZ@ZTPaAσ>}]qڍk)s$I3f80 Pe, J֎@#1$ Qm&H@&` EQ&ʤ$2$$$v ^[[:mO=49!8z芲 ϓ]S1gN=AA?h#Ps !!~5zŋǏ)]RU[UY^ 0t @"fjjkP uss|s5E%El6;44@~~~N=;{loEDpG娉H@4]XuuueuDaPoO'~^+*+hQQm8PSƯ_q/CRL'p$jk*at6nݺeggOOOa AAAgϞQu$IRSa l=Q=}4e ().8ꑞ5FKHHͩ{nB6 H[W55^HDBJ'i iI8NB"Zꭂ~:M?nll"C@Iٷoѣ?NRfk$ M韧$8 j=ܶѡpQ@(I=y2\yk\!ÆNP ן%ѫw/(u@nh###z @Itttxy󨬲Y &@Lك嫝QyȓM СC׻#׭^G 8ssr7m>v옴4 ]&I@Z252M?̿^^^CCW^]t֭[;/zzz<ҊO*Z;TZʰɵw-*)SPV 0116NMKe,f{[{RҖZuK/nٺ}v!fyyIR%,**/#WDXD\L|8pϝK.}A MMMqqqn@߉8p;wTUUyxxA5=g z~|zfz+ \LTlİi_ΟkHEQ%iq>}Sׯ_ Q]S85u5u:8q#222=[WW'!"yMťūʪJJL$$UmݶUDLj>>>663|љSgH4qno{%%'5f wkܠ&ǷիWߟ3ՙ3g֭\r%$$DWWՈ @:Pwj흝QzUhZ ]A_2xZ8c0@٠>~Nee哨'W._9~O>$FrOI83ՓO ym˶훶ZgkV*()XO޹wgAQAZVZJJʉc'ZZXZXQS5AA$8.xb\lHˑ_=j~Մŋϙ3߿? oeeER{A{ٳFFFu|'GWW@YsnsnH7\kb߃`%bbֶYYO)SZZZYE9%%!ozi"H 0~z/ͮee:-EITH@(#=[淀kDE>AHPPHH17e03e$e[QVnwU{R%-)-lK^PH@Rb ( +./޲y!(@ 6 2???3=DYiY46ήNNN8Lu@ZA޽Q^^͛F_t֖:~qK3/^ܼyA###GGg٫V>}9߾|(rfN׮]ۊ̤ /\~V f޾n;z_/C)3 Sa1n;UտN /Iٯ_g'Ϝܶe[wl1cT$NIod`K}{| 1 aiik(+ ھc{iiocHp ŋ;w޹;#3豣۷nIi ߬Y~Umʕ+-5?999TX ^^^~~3g7 HLLTVVubqqAOyE###߿߳g5Uo>tuA 7SXXX][WTT}0[d̯‚3$~NIRYA@NK~ʮ_>7']#( ().}/?>wU%UC]]%}VG)*K$qiEED  fzYMx"G633gOEUELTŵgϞݯ|9=` ?aӦM+WӡC~Ugƌ6l඼#ollѕ+Whjjؔ,^4448-1BBBÆ 755 J(5ᚽMUBȢJSԵ0AL[Cf \'6cԡBITB\B\\(KP-u-J($8U  Vp~&vomj]BBTNVVV ),(3]|1?A^^^@@X7ϟ?gϸ-/?H3L###* _XX%K~mmmmmm˹cҥc0WFFF P!fe ~UW&*k[6Y͆~+oD?CZi444-,?Z}||>|Ihii=J8޽Urvv>r`ӦMki $$&ܹ{g |u 5QW"@ Fh,4.s0 ð.4lذ[Ԑ$p߻y>}L:H[GE*?^X:(..>ydw@ z^Sr!?~+**rssK0l„ ˗/oJaqqqb]m^WW54+/uu!$,w@Ӱ$ٳgϡCr[\1p322;A*++222-Z롂x+(( b~q X,D~*F6ǩ;o;EQ͛7#F0 +,,_hQۮA8!I2@wtt|r[I3|Çӧ/_\f wƦM)((@QAg̘y̼srt"]=e O5iP"(zF"$ HD @$"(㵩BX|$t6yM$.\oOn޼իW%3g WRRh䯢*** #>>m l6д-W۶m,B6 iG~]G0!򓒒ľy/_j(+t |DПg |r> ? HvM웘OEEdeP/ _RiuM `TnÇo߾NSSSq 9ǯ\ۛSx=رc۷oKj+!(˛7y< AD-^|r--- Ps'&d0 &dfe[XZ T.Ç4!$BOPIH1($I P E1Q*=IT2x `;`I(\W;7f̘о}.]z5nK@Bhf'%%]vm?|ǎCEEErE`2{f۶mGRc4ʚ3z"UuUyyRbR7oެc WTT00FnAY9/_4pFM7))xv=5{)"QR]]15%%$oᡣ3tPiIiV`v޽{w<`ӨJ.^xNDDu+/?/0n݌y3lȰ% kikJ:::?wz&޹sgԈQ:c,h u fkjjF9911q|(_U;vTϞ=sNKUWWOJJ0,''L__]@)Pw Z9$H^YHE/  @ 160620b؃7A HB$8EQÍ $n> };eAEa63wla!*,zy6=n c'P}Yp) ȯ_IywfH`ggZnQ<󠡡:ŢEN)+lmm'L0m4yy}q@ 8}M6`׋K ~^ @B$IجzrVu$ 6`2,GY IG$:!gΜIKKtZ֭[w޽pB111p"Pw!AT;JѦnF,nNMw\51KMԬ%j I}%i& dOo&FblG󺺺7o8::~QJJJTT=@/Pw?CEC25'a "T<$I iO(w $ߦAQEh ¨=N9I:tǬ]ѣ>}3mڴzi[ݻw?i&nw @q0U%պ^g;oŊLF }̙ 1L8)777n Iȑ# 򧷱2ho!((!)|Μ9`hhA0 w6m8tP=֬Y3iҤ?lJHH*x@UWW={Ǐ /i=r qqq7} ̟7񖖖jjjS{O2=D4448q"]Ç?~5־>|ݻw02ҩ@`0yTG((@*HIeeb nK]]]g̘{:accc%KTWWӅ P w9OO۷/]ڲeŠAH111BBBmꂂ:mnnYXXFui,Y­GC &Xf-Q dyo;f/_+""boom~[ע>lmm=qݻwsP[[}e-ZhCɭ[0((hҤImח~8|pLڵko޼6{쌌 ggI& H$"iҲ!4xr ud5o;;{QQQmP!UWY^YǮװj(Wɍ' biUUՒ%KZ-N8!))ÁVMLL ێ;~kL#G~2s̒ϯ\mE^hQ]]ׯ0,k׮=pukJPV ۥ)((_ Ԣs@Ο?Yb;עvVX۷oO:3^Gԯ_ ۷o޼Ed_Ç'LPSSC{ ߨQ?Vm֮Zӓ۷5k;6jԨgϞaBLL7o8 _zUWWm ի߿PPtKZv;gӧgΜ,nîr|sx ,Y|e˖-˗/]ݻt[nsc{̙3}VHHH׏WIIqF93xࠠ Ǐ9BXYY w0/^1cƷoߦOEZ[[N @`r@@@|^JFGG 8Xemկ43gɓ'`ݛٰEQmmy͙3gΜ9f 460`X{MMMiK6a-p>>>Ϟ=8w{|(((د_?$/_, qqq۶mۼyr\\\Ù!C 0` :TVVE{<<>>{T+Wp|MD=xU۷o_~][[۽==rpp>{|ᯐ훍uYY @,Z("""00s~[l/ }vn]0aEBWWz999$I :Wm?|\#<|pŊtI]]7~{/avrrzɓ$.]:'OgIpp0ڵk?}TZzARRR|||߾}oyǏ#ƆANNNLLL>}!kU񥥥˖-K 33hf))սv횊 O>$g̟9u.]ļy m[Ϝ9sSqqV?>uiӦ'Ors LCp…@mm퀀7nhii޽{ܸqSLINNo}taaRG uttݻ׫W*mms@oO@ Uu< 66VGGǏiPPgT.zzz: DDD {'NP1ZZZJJJT0qqqM;w.22lĈA6l0mڴT.vpA/^jʔ)G;{l@UUՋ/c \p3z~~ӧ;^ϝ;Wq[oݺEo?{Gs޽ٳgsr˳y9///m::u322hSHJJz{{_r4ٶmۑ#GbbbO^\\B ]['I{䔖egg7 G|9zjEEE>>>A*J#A222͏ܿժU*YRR 4Ahhijjj\G%mLMMMMMLf^^^=c0rqy{{sN>Դ^^zP|իu@ĦMh/wedd 8~z(7oΟ?_WWѣGADWWÇ&Mz3 @W yTʕ+Ǐf(󨨨c5nܸG:99jСC#""8%$$dee)**#8PXo~{հ߿S%6lU觋/[ڵkif cjjnݿEQS$544/䯧6mx{{g9Ǐ9t`ԩ7oޤ/DDD=|r==w>x߽{Sj?g())Kv xb̙m!...3f̈rB'[bEӱV ɝ--{Ƞl-ZTZZʕ@:SIKN hϠA-[FWWWŵm̅ -ZDyFFFFDDr޾2kZ055(//,۷o7oRΘ1ӧK'[:;;znxxxΜ9f}}}qƵ)cc9sZZZ҅/^477@:YLLE 5o>СCa &(**jQ}R?|j3^lٵk^~s iiiصkױcq,kŊ{Nsss5448#ɴUUUӧOزe˙3g6㟠͛7I400Tl=?.--}O>8N166NLLlQ@: 0bĈ&*fdd:u^СC\3$iTꏎ.Ս #>>> f8ND 2aϟ? ayft Þ>}jaaquIIIs9uĉ?ޥ&B -sSVV8+**!(_ۻhǎuAQdn޼ٳlv?=ztΝq0tִ4*7// 2wy$|=iݗGYYW( N>=|p---EFFcڴiz( <<<N`ՃnUQRR233|5mizj'''%rΜ9;3}9s& `'-ҩPqKKKz!iII/m"Μ9#$$4{]WaΝs%!!ͭ9%%%%''={9Q|}}޽DW{[L&=z%&& 5}W||)mZTTw5&]6mgju֭[;&'PZZܹs9K.^pzcǎ;vldd$$==}ڴi'Ny144ؘtҹ N횚s̱3gΜ9sNGꚗ7k, *x]aaa&&&M+x޽{̙YaImV%i=_x>|8ܾ}Q__|!B}׏;ߊʚծzܺuKUUPUU֭[+(MrJfV_z5}jnnRS?ӦM mƯ\bee'6;v찱 \CBBw/\p#G6[l]Nv߽ 8Tdee}||:2 Kd̞=ƍ kڵk֭=6m " ݊uAq:S_f &~%%M6q{}-Ee9sfI7nܐ.|vȌ ]]F$"""6S8훙كA0VFjݠeee(J]RSm ~ XPPΝuֆ ~JWqÇǏ[nN.N6*&& uN[l)**233~MPse6(t`{yyqPR: ONNtᖂ7o^ѣƌ=C1g>>>*S˫n. 22o߾+Vht޳g 6jC=--.==֭[K+uttꆇqk3ghhhZJZZ`֭TM&#####I C \E)y??Ӈ8V^M V\U͍ymorss]\\p Ʋe˚Q &)))Y`4,lz=iEk)--m]'N߿^/[Q߿kI&ihhԓsڵ-ZH_n֖3rVVVVV\@hr|:-//mǏ_v-}ZUU/]՝5kͶ9s̙3G lpw ʓ:m9r%%%)&)!!֭ٓd~eƍlH6mW(((+ _G$%%q:>=~3EDD~Pߐ͛7ggg+\vm~~͛7wYbeeZ__ 1mfն[jjjA?1nnn6m0z:ȑ#?>`v5k\zPMM;vl~~;GAA[ݚS[ׂhbb]HxEܹjΝm2nT+]DCCVٳ3K=@EE%88ٳgnnnv6{9sl4_.]|ROOMi)=zlCsbiiÇ,ƌ|Dž )uΟ?bŊ?ojƍ [7(5sM*ϭu>''oozjfiAJJJk>geddnܸF@YYYxzzR͛k^@ _n޼ioo[55+¬YRRRLfϞ=;k7n<}t Bhlllگ񶊹&*!!!!!!Grr3===lĽ掎 ԩS񠆆۷oO>݆/K.=}trww#""}kl޼y|0F-t|޽_|ض-KHH?m"TTTxxx<== Fs;$nTx2dȐn)TTTUTTɚ߾}.ٳɉf˗S3f \ZZ:lذG :88|O>k۫W?8p]]]O8ceeʹe_/כNut4GdddTTT{{nj2"JJJ޼yӢdrŞ={GZDž ܂:~rrٳ322FL3gϞ9;;Xy ::Ȇ;Ǐ $ɯ_s֙0aB`` \N^tŋͬY*(ʕ+/_NW۶miC{pi8p@{B n1rӜ;wn-ٳgt~~;w5zR/_kggn8111o޼dee%$$T[[UVQ֬YD>\DLLѴG9ruк0))oܹ=`sxb^TTTTTTzիWF}蘻۷o_v1ɶm۠t<]i\ÇԽ?VRRj|޵޽4NMM533{]+ +!!A%'&&RvbbbŜuVXqI:n۷ouuu-1~[nM<hѢ;w4immxJJ m|p?&$$ݻ!2<ҙUkjj(ezmo^lg ##nؾ};pHQYYYϗ! &6oܙ00wiGʰhѢE9::FGGqWb jsss__MN8i<Ԅ9%&&իiӦtuOӮqZܹs^Je]xٳg9?wm۶O>q[dㅄ,--ni'O޼y.`i4O??ȶI`Ro߶oN waaFCzc3]à CjժFB zt;a||<xѣG743zr!g777ZPPPII͛7Na޵ʪ^VcrAڜǏ;99 6LBBB@@ ,ky(;t<`ԨQr83CQtǎyyy&LyAFF V\9f̘'QfΜy [[[ި72ܱc֭[鼼\y@4n?bƌ999cƌ8/_<ۂt4˖-KLL2e?}%6]]]݆)!MZwƍT:[Y@ A999͚5+??W$''O<EQ:P6aA6ūk!""Ҋ6qqq_nE4ĉ]]]7nx={FGG+**Ξ=fĸ-cw W޶mE@TbbbtuuPEQKKKwwwoR#66O>#Fq[VBSቜrݹΗ/_ ~< 9n͚5=2O3؛7oBBBz3g8n[vA+xs]|9""f唝,X?~΀O<G 2C@ ?ݏOII1222115jT3o7nڵk5jԭ[8K^~٣Gsrr,Ymۗc6,4i);vP ϟȑٳg;v]EBd'NKܹ Ouuuu8hiի(5)(**>x 99?^xannN'$$XY____TUULfHHMqv[SSǏ$_zUVVXjWa;a``Y^^x񢉉!~z ޿Ǐkhhp[4^Ι3gܖ022~:RTSS3##cСBBB;L$~~'OTUUۗۃ53g9Kܠ7hg2#Ç///Iuu$`Ǎr劇G\\ܧOƏ?mڴÇ\bv4rrr'OnG !!ӑ"͞=;$$$---))̌#5Xnݻ/^HIIz;JY eE%xn0 4EMLLƎK?z۷oɓn񣾾^bb Ae˖?QCSSΎ3xzzR]?JZ6]/y w눏#PQQbu(/^3 xjQQQQQј1c-[xJI7SEQ Ο?u___ #G;EObŊAϟ?GGG$y۷lׂ$ɞ={r@nwѣm+MqqqFF`Ȩk@dÇΦ]Byyyzzz7,ɓ eVk׮[ׯ$I&''w@Qtթ\yzWA~~~ â>|n8z$I֋4qUjzb67,}ZZZ5ktښP6ee;wPhn:dϞ=>>>&LhV2w\;w4@2ZwN$gbbҮ±lnٓJPSSKOO> d2nJ/**9"Gե=EEE [נhgs[@ Jk׮FKK !! :'N ,\W^?RTTWQQPh"ênPZ餢UUUTpӿfðK.]~]II۲p*чUlܹs9B&''mܖ t%Z?XZZŹDEEA񣬬 AUZZZPPБTZL=h" ΨRRR&Mj]nnnǏq\YYvܸqcܹ/_-Jt۶muuu{J8@,--}mPQQQ& xyyzv:tׯ߂ ӹݹ2??ZZkbb"%@ ]?$ٳg8%ssCq0WUU=x IRRR˗L&k'n޼iccCZXXP [:r 4}6 7o8ޢUqHII9;;s!77wԩ(o?~ݻiss?tqȱp2~;vxzzvx5Y4WYwB~///۷II>=U.1JIDAT}*mϟ3tP///W4"""IIIpABBB:@ڒԌT= n:#g2W^,HHHHJK" $ɚsMA _pEQ΀4z$ %m)ڌ NS󤤤SN-]o߾!B+ljؘ{Ν$$$iii))wޙ>| ,,,//p[Ɖ':dllD rWgϞQ*AAׯ_a'22rΝ23+xW.\f̳aؽ{~P7Ν;wy-\<<~1cu@ pkײl[[`MMF=~xΜ9fffAAAX\\;w1 zj޽QmccxCCCiϞ=X[[ڵtItt>z̘1wޜ]77ÇKHH\۲@ ǗkiiUVV6Q9,,LTTTLLL\\\LLl߾}^@ǟa„۷oϘ12bL>]__„ $$$DEE?LVTT :77>ٳg={6|pnwe >͛7111 RWW}}} Cq[L)h<ÇG.((7n TUUmرc'NHlڴbq{Eyyʕ+9K BCCӧxyyrK@zuJdC:p'/Zˋ[999YYُ?|5,,3-A]reQQoܸYٙbB NAϟ xMVVV/_em۸b . mq:AAO>%/^5k@ V+<87zEhho1 X=zʪG$IrK _~Q/_655nfXXXNNN'7zRR//b6nxʕ|e˚g@ԠմiS+˗/A*++====P?6119p@CA ÆJbIII}њ QQQ<<<,j"0Z W\9sׯQ Z֬I#YMZqWuum۬ϝ;W2]QQ! + B%(Ϩr``dee ?vvv(Μ9 ;At.I7lؠ>lذ|HH,e˖ǏSfS߿o***LMM^[瑱! ())m81BXXR4IT2 9gtBO:uʕS;,6|pjbPa-9M:UGGϯ9qqC{:$$$7NFFFNNN_wΝ;7vXn i 'O,?wܹsr2$**i?~̚5wޗ/_v__߅ zzzΟ?۲CCùsZXXXXXЅΝ!/vʦ%˖-j=lذ/_N:oZN{ŋWZmqŊ+Μ9i'6m ҖNQQA ??? nܸA_{xx[G}~R+l6s ޾tܖ7ʊ{zKL _|m ƴ^ǯZ ð+WP%.])-zRׯ_~:g#]߿a+VuE3gn]ֵA ܊+P%IwI&)**i:T\\\lxĵFCdee-ZX~ɓ'/_SB _ɟFU555555ܜ=mc()SX, .^ә2dȾ}-Ztyn@ vh\PPp1>>{SB xi7 @ ݄ d!!ٳgs[3p@999n @ v6+*xEhwrss---Q#bFĉm }:73lذ ҅PC 񐿇`у$I*%]~~˗WXAչ}v%B HA PQQQQQQVVVQQ9qDVVUѣNNNܖ@:8=((( 8pСTInnnppȑ#SRR92|111nK @ 񐿊!&&&V}uaa!C-#tprQx߾}VVWWӇB Hu|t@ CBTUUDEE-p!'{eZ=@ 'PC wҹu<sK@ HgkЯ_rPTmQ ztbEOΝܖtY@X@Q L4Hщu<_r=3 u<['Hx@N@ Ou|JJɨQ&׹w@fZsss{ꥡ(aaafff?m4Aٳg={݇@ 䯥:iiiǏ}ˋ/wĄ.Y݇@ 䯥:dVXA;;;?|0--;7h9&ۣ@ Hף񡡡% 2СCh3ٯ_~> %x %%?l_ x@:%%R@yc qpHJ_[[fYHd=|`8;;O2ɓ@N_an!Ř1ի J"@ ]?swW铵5uKVNMݹr%f( A :7 IMu6w$s ii7nic=<<^JX(iɟW0 M0ANQ1_׃0X 8:oXK  d c˗/WTTZϟ߷o65 XhсЀ(aÆ.4 c߾}G6220m.$ >>SSSO>}q Ȩ*qiFJJO>eKJJۗۂQQ q[܀s,|K. `dp6@:fk׮]DKK !!9v4o]gfٻ3i]hHu']LlȮQk;凌s#G,ڶmolQ!L)銚KC tZOZZZŹS+x^^^ZZZt?~t=Y$`5j:m/@ m "R /z ;4 q[ҕ' ]'Rŋ FZЇ tb-nҬHgOJpA+XC H ZI$lvIY `4pC !I~EQ4SwUXXH" !!!>lq|ҤIqbcc/\cIIɆW0 qȑ#-ƍuuu8 ]]]kkk9HX,$)&&FE䤺0$9my///'b…zzzՕ+WRް4uuu'OA BC;w(* gn 46@Q0V8 v嚀IRwRgϞwQw+ Ϟ=;~xBQQN,Y˂UVw{=um 66766Ʀ?zhmmm[vuWWW6k.t!!!IIIiees+3"#[@@|'NhxWg6lؿBN5hѢ'O$''So IXLp{[;۷o_E\33f$yLeeln vmGSSA& .lݺշo5jTqq1Eŋz(Poĸ-/ "%%Sݻwӓ:tHIIxykkrM=-'rrr9[ހsWf wwwNׯ_C]uqq9w)uu„ ^pauu5@~ UkV]q.yӛXx*0`ɒ%$I.[lϞ=]4jg̙3W6D uY]]}Y rWlDGAt,6l%j1 w]%S8I>>>QQQyyyUUUܖq߿R9|^N]?~ԋu111nEEEƍ]| ''ׯy4@C9$Iְjj*+ʫ˩*+jjX5׸/_|ĉܖeM4 E\mm킂/_ߟr(ٳz,-fԩA߿?$$dܸqW\ie}AGΟ?;n vMPYY[##(pĉ  gg簰3gzyyQk\GSS:~ɰaècjù- 20WgKWtR5k֬Y㈈I&M<etyov}t3gwLO>9s֭[-Kppp  kkk; {ee%AI&988̝;ĄE 6m#ǯ*(ڕtիW'O#Exx\/6oTJJj uٳ;/.Rߺ3ohnisH^@[zp h}Z(@AET<AnC|Q.AFD}mz'i$miҜ;?%Ǐ}fyffygٳQ< {|HVoj,%Jj)j5cyʒgQhx=hj3lNK䄇/]ןf֭ Kzv… iii۷)11X۷m z'N}ϳSsof_IW? 1$vVj{?{KT,ۥKF!!!ovAObI&,Y$55o߾O[?H][eee_}xN&?ѣfƍpZ[h6lзoԧ+qv1v֭[i⼼ (i]ӦMx<۶m>|xrr_|?@"D|?>~ZZjՔ)S -4EQi8-Z|rp"++ٳЪU+=rHFFK/t?\*$ !lժUNN}ۍ /_۷/é߾}ѣG ڵѣGQQQVNI*߽{/BhZ}&I\bń &Muֶmێ9BWx=Ǐݻȑ#Eђd":H$Nԙ0až={hK'{Ͽ}+nJQ0++kΝO=? Fau:hl$PҔC'O ! B"rμ9۾b}yC nd2WXYx{5E.?~7ЫO/6`vb˗'Lpׯ` w,_|)fy7;3?~(K.]oGR\xǏ&"EƝ?seBޭ;"4%?~>x=f9'sB. !!|>ޏ?~iP"KؕMCdǏ?E=ˡJ]>4?^"TΏ?~y`.! ͞54{F$^lҹ\.G~㧩!\8!ĞXO\'HC=$}8@n\w_??zC  mڶyBOB]ucBjw}ج ߾}~W UƿF}90;^"ի222w1`Ѐ^8w!NO#0V37F]C՛1v[TEwy1v48aÆr0J_%crAy'!cBxRMx9Lr5zQq߼i3O N:?T˵Μ#<h@)H-_g^һk_|qvx<4sNϙ;gnpܹѣGdْjS5RgHk׮aYæLV}Tႅ  =*ĉ^ggw}.]KOOOOOիƍKJl޲`!޶sڲi g=9$s٧l6O rp` ֬_9eڔʪJEߺykܸqՖ3Ǡ,_Y癗7qC 9wP%˖dd'uֺ·ykӧO2 9sY׮[KD~~3gh[ dNWQܵ{EGGϿ|ʤ)ח7oLMMIIGR }xaD|L|HDIlh*ueU`q\(Zj-eJ|o r4V éh$,//ʤG6Ghj.}UVn\rB!LUUU`2dsjL&Vkkk 2!$$I@# VСŋ޹/'>!&&ɓ`)bL&ZUUUr9c٥wܡ,X6+**BTYi҈ $ʵvTBXUURF#*3 ^+2y̤sMii`pBʐ$YTTp8<>%IRVkuZ. A E+ )Dj" ]6TNB>R:LO6R\Zl4ID6`0x<ŢVMfU(FVkjjD"[̖2UYuu5*tZj,rVUVq}^;|>ɬ+S: 1 {mv[DDąKڷkx y\Ieeetm@ITΟhӾMuu5-'dz7l#U Îx<:Fq\$2c(HDhTkUU{voZ1jkkKJz`3ẕUWte~CAAAtM+uiL&go>a'O<|yEGx?];W]}S-=o믽>qL e;]צ6vL Ef7w{a/ukW9u&7/7-!ϪYsgꫯ䩓mmmuΜ>9=)9I^8uҥK3sD"x{vX-R=/ =~ d2rΔqN㬥H I&Mp›7nnlӰaGz"\q/+9(n_y)b~́roz,5d吂 Qo_xͦ_V=SMiY鸱"""|0eew)*,zg;;xsz)#82ebˆZưK" \\7o! ^/%*C3f9saywu溂.oM|K.nlݺUQ+t߾}aB0spflLoh~֭W.Z-uk^zu5k,khǙ,f><4|}?w&Ǝ؆n78ޤf˂[nuEHHLe\E$W ֡CU+WU%ɉ۷7L&L@7oܬyx`kV?!򂢂6)mzg>cX#"$mfڍk7mnRR[.mJiqilL쌙3>sqOf@(t"OB):|=( Vh/|$''|620sn}6g4tT /+-it^»]tJ._~I.ڵkwvE*#&l\@`@ Zkoz~9CI0 .Bd!yyڷ\^{W[j-.]X@ԽgWf/+.hצP$LLJ 99DΉׯN9](fXb9s12$2Il1p~wŁ#Gr]Xh:ΘLj]aMmmsIpGOG8<. {^‡3>LOKq1 bae-xQXHX~K.92޽뫦Ȩz{b 8hҥϜęA VTU̡fMKI_x+׮+3>1Jϗqq `kGdW.3Y\w괩];w---xL5r1t'JM͚5KLJ]:xoUVTF9("2"Dȑ#_JtұBecFi֢ٳgv;Da>}f͙[o5:nATyףc'0yY-Xtc۷op}f' gA 8no`sj ЖkNwiN !\sLhzަm_~11#^q-d(B.p[f̘x!Æ$&&6klС:t>}v}}NuKD]{pŒn/WFfu&LttR9bdf,A/yyyJKOp"B`l h{ݠ72@-4j͚5kVX٪U+z^jIINQ0L.v\0ya=n_aU~i铧8s8zhvE^q 5S)2N E,PVXPh z/RUڵcWi]L‘oawR$ 2V}yjZ@ rHKv$) zHb4eO8| FĚukZ4o|!8o 3L@mMmmmmDDI^ $[I> _q}ㆍR囶ہ}HlҚ}R۝x;r!-cǶ2)HtRTX4g.;I]N C"Ȥ2-Ȫ*|N8BQPP@(" oy-h: J̧6ϵJ UNۻ{/ER]:uAH(D$p/E ͛[}Q$Q,ղ!oϵznW 1(I^g^FcHpglv{ /lXٍӦ;zlͽz0LQܵs\.!t:wնcȈHkEa(0&|$IRpd3qp8 ү/%8w..Kj#¯]{n>aӆ{?=1116MOYA-=/$!ҦMV`0|.|ADA I`0<.ͷLMM}y;GL9'ነ@$`wx=p% ] BDK//z=B(<<|\|Yl۹mKKl2bԈ)IT(QQQ\շ׵wj_gs{N,f͚=+=-/Zl5>uk`q&N\"4pк5[ƛMf AQAII{4`ER5];wUxһsɒ%A|Xְ͛ F2ĉ55N捛ߧ7.XW_mܼqh=7/ȑ#6Xi֭]_piסͿO|3qySj=У94Aݿ__p_D"`86b䈬Y[:}tײe<ϗH.\V 6XjҺ'Ϟ=3`EQuֺow[QQAxqqYJJ.[jg=f̘|g]nˣ- I$IIQo9W^;^8M߷rܖ-,^"۾s{BBIIt%vysŁϸW^~en9SN/]x8>~zD!=H"/ص`j*=#=Mʢ%BCbƿ1>))cQts8~934ګg-D֖k;Щs7Ι?' @!S }q(郮'I$##"}L.3pư!3wޥ*, !4c{gO[3̴oۯgϞ((-p;uxN(N?a]RWZ Ն%,^zY<>/UJ"sjEKa86|pX~z=}oشazk޽_6}Z֬]CިJnݺ5'A9rBaaӧN_|7[ndȘؘʁ[`tqƍ?n˦-Vu1+V7w^xXxn6l8 _?  D!Cg-]ֳoQcǍݼe;VuT¢O2o=6oqJEzZzhxMѣΞ={";Ц]}ݷs՘kޛZ FnڵC\2PH!4ݏ,ebM_}M]f3!prIvUdͦ*Q썛6vڽKZ[-**J_* FPVVwÂBvVul[qyfӖkqJ&I `nX* ͛5זk ЖkIp9QQQ,.9?~|bbb=2L&1d2F=H,*,JNN bDFFt:UXX" ݻ{O  -++AL.:^={l6i4' EQaaaVp\eҷfԘf{m\\8]Zb H$QQQ;wx=^z')1RkW12\aXmmNFD _x$I:QF(9NnnnttX,{aqXH%˯׫5x{[VаPD!`{Ry.:Y\nW6mϛ?m0J]WW PF.Frm6NeDP`-S\`86qFWIh4u:qXp;ݏӗR$)Õ&ޢIUZRp9A!!wC"""Zmc<1@0ɉΤ'Ӧ?@Ҿƪ;uD;e6o\ PU999sgύn6cpl4NА'j8 (|X<)1=d|c>˄LK/9=zkAmlm> c(Gu=7_!ߗwd9keK҇yԍAEЇj-niD_z=-_n 5rTa(a7Fްo\|+>nвa'jzhZ'oXb̘Q. |IK}BiS>@!.z"H VC}0IRb?DS_BA >p[!jk-ff'8P( "_aXx!t'9肰VQ?a?~I!}N# Ks$PMrUa>c+_+ QSyL_oyf3Ǐ?5 v;t8'ժƿ-/w&#|3(hٌ6~O!.Pqݎ'slW/n0ٳ??$Қ,بIENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph8.png000066400000000000000000001671331222557406400241210ustar00rootroot00000000000000PNG  IHDRzx pHYs  #uIDATxuUǟsMvf鐔%Q_ [P1@lAEPPf{vNs?ݻ,.|_>w=3q3N9cÖ =ѣ1`!N?f>00000005h8Y=k EHBsWX ,q3{NrrrR #~{ﻷU~+aÖ 3?jm; "#H:mgEbVgϠ;.9حHe`5JAU,$E e ,&&!pZ!'C0 AD״@B޳ 8 m5 krp;Lʠ1RwhF8͐TAjʚliM;дB4ѴI ! IX0eVfYM X34RuP^V5 +`㔦Yh0Lc`349&xM+c{֌'2@@ДDJ=j6j>lF+f6ƚfG]VTv+1"Aa1@"H8*++EckM0A#`@$A[6n X Dת#4 :O~hcDLHT!AHDXc q x?p WS7QX 2~T}?f5TFUN[wu *%#"y$6leUR]Vq$Ys`-ϝdLcSMd%)=I5ĵlLj5M(vP)jS0j7ldTC\kݳݬM R_s #-ϛdtjdU5w}M5m2M4 j?jf5mIP@״(4Iuj{Sdjj)MUҚb&hIue(Ns !7Yzf3ӴH pfV@3K.CJ3ɹiM!XE\s l\5Uj5)K],]3%iF:M59$k(S4EH f3)N34 r3YuȒBդ82$׬=Rԛ$@k&Qdf󩯙I[}D3Ҭ$տ;fjw\k5sf5l@ 02!%$ !nAc !D06$,b5%I4%Qch&d2I L%IL$Mz!aԨQ;$"F$HvQ,"(%&IB$ +a8pj43O, >s U}aEӦ'A HnsݸqkMD Rkkбdgɗ~$OcOLD~aT٭HUy8V5A*|CxEpaÕ~A~AUvKݡ][׌Om^BC,A6h"kY&UnJ?HJPs=SzPkx DfSJaGU>vYF.@Bn'&!vW(D"j/$1wAՁZ($$DaBH~,)MǓSVܔUKkQM*:y0$u9x2  Bd1s:$[M1U9@ZSiB\Q)M A31(ry4'e"qd5C& HՂcp4+|E>Ψx\V Cv|d1sQD5n9T|Wq'fMYLuɸEU>Q-ˍaTi**52$wXPIiVs7]ӕt;xD״q5S3Re6~i4fn"lf؟G4ID1B`11a Qd MgVoƌp's!x D" wO+n_xg6<;W_| G RJGEX$yKշ>xtv&Q /=gpnY&U/8}{:۲Q222ʸFQEF5*e'ce?_Rʕ̭U52N)*Ա1h!mjjiy6U[Vo=)L+゚׺M$fR~fcӅ+U5pJeLmG3lp8TS5֡"De_(bmpTZUy kX.JƹU5־!mܙQ4L$?3FK#ݺϱm^cFvyO(욢@6ZD33jDfe5H.T#pS-ۡVƸ۩",!ۡ,]S44C Aiۡ) kJjDf5H.T!DqC 54*F1Rlbf\Ò;Ӛ5svhյrh$ iՁzk35k8ܕcdJ3TfӴ4^ !=ܷKDZ5Y@%שּׁӤ4cN;՘BV)$9lrY5"{I9w;WTrh&В2 FaiP=MI.kYRsCsɘ ! ZG&Z$ aOk%UqjUp9h$Nqp۵R_1itjDr%ef%Up7Ҵ)D37qO͇F4$fkoycF͜5,5W}3En5GGF7O 1&`!D BH!q >zR5*JRV.[GB6nض][qQ'??l^^Dn%YVy',2A 6/HnTB=Κco~͓]1G\F-w.Ycj2C׺,xH[,/>=r;uB_~dϷXD@eѶ@H3Iijx6[k?_RڳsvYᨲhIk1}gݩ˅ 9clҝ1iyl PʩKJ T9F?9^6$<YN;(VM:AnmG mv۟6#%+J><{X_%k\ܦ4GLc c٣!lRݽ[֝*(=UJ8"BVbu*gUj 3!yјxqqVMyUQm;۷UWTC>4|g7ORKWTTU c:rdb0T)ԝ2i/v"EHPY IDbh*rC4$d!h<.Pehf ²*Nq@U5X)Ms ZP4ey V5Tt)aPU1 PY VbVZMPf{ x ' j$5>jZ̊Uj05)s \_[vR@0 %)0  `ip4źcӬ4=Mj&!25) ͢X25$(3T@@!9I=A,^W&F ͊ƚ~ 8- S ZDI!MTֳ &jZ*?ZM&Ӕibou1uRZ+FYH!ON@&M$&٢ܳP4Άh2x<$!C 6+~0KMi4́@ DN!D>]~?hO!P M7h DbଭgZT/HQmB3@4N; X $Ve4 ʂx Ipywf^H  &~DSn;Qh5ջ֌C<n01p؁ZM>D!pSۍfVSp6 {lt>ss Y44ElkA24! ^/ %Ui4^in>uJ5I jlMGfG` a8C"!13`H3 R]~qC@"%39 s R6|`n& ǎxuLVS ˜m\rJk;E9O29(fE ?c8.H4v ^};,ا[}xN!T-$S&ia{EJsG% 9n(J34I@$.9Pn澿M5sAMf7k(K@Ģ &,I0iXA۬pBJ%&P]a~.0'\`.9&#B0}<c,,b}}ǀ)ce=6n.λ N 08UBȸstd 1UMNg Lf$  5i9 ĩ8p b.(B8еlӪe\Z@@9GS&ZR]C@g`%>Tđ QDquihӡkʔL,ՋiwHqEZYc(7lUfƝԣt۶iFb@ JV>h2hDrlY2B#MEBP cL j"#`e. Ac@Ijj2RZ*!a+'{a8ڱXE 3(q6W:7UA(P~YQԯ_eͺ }{c>N=yUE]~ u۸=;+Y9>Q/<׋jdRRv? I\!+ Gj$Ь޵fb:MB5Ѭ Pt$iJ"7p{34=.D !`rMC(X7tQxnAPԦ4-&qt:P/%UQ 5@xi:OBTפ(c|~En6j ̝:(j qB kx4 l [j5]4=MhcO2fVS5fk@VHjጡ`foo4 +Ք24m[mB*|aHfh:\Q8V3g~0I\j۲NSo>iMDbכL7sq_k]3B< NQCN4 ;~__sB1h~f&psv OwO~}5gey0!YE,RLQ~A"&X򋖭ʏ`z4@#IrvA0P ƨKq/F+%'7CvJT)Ūd9(J`8; / ٪5]{$bAG U&U,l=p?!},HvkvoAEL_u. @V~hB^oMI\S%WNvD Fc-jIxRcPD*=&AUo+E##jir]=c|=N9{3~uW\:'!H?(`h5jM f \vZ ",GN!W)ı`8, k Ncd8RTq8x$6LuMɤ24-&pu ,@=$D$ I &E i c(3?9h Kq36qF LD" @CD@8#Lpm = ׸Txxj?sxZjsEҧoAfiƇ?VgԆ$G !m8L0a3!*!cdQVgꛩ\MQ5WiBViN퇘?L64#q D-bwّevf!@i)AmP.s{ @y}, VřPM8_hPMFwVq]$uAH.o+Ӣq0rew Vp$ONfyҼ®NEc5+f0Z$in+ig{׮j+~ZTA L(A0QMf 氂/Ʋ\A\,7DMI*rPA v+C*`5~0IMiYeY $D5fEJiM+TR$p b2xKB$.'MN)lV TbV * dQMVʙ$MKkaxq%ӔU)6yJd5!Y*JPWϔ&e^FLwc &,u`J&\_ӝ֤I]iv1 1ˬtѸQPkz0Q%D pV6]uec]6fjکJ!m>՜$Pzi̭KM7s_+fW?a,rUC  H@Y M0 "RszoGi h?fa0 UQ8 3D.rE,$oC菵w=4 i7[͌@"Vd,Em$sE,X܂hޗz6AFjlgcAL3&E-\}ρ$#9-AMMy E7DcB4 4&Vb6#q, `3C00PnhB39.$i:1A I5<6K3k(=S39X5p&@a@ ZSDv "" p u?~kz M}J; Q@b $4"M!LkޅBqrBٚYL(O,I ՌA(|59pc`j` a.5GSx MI@8l.5M&@8v3zi$u7t܍{tM ^mc mO7@4@(B{oE_ ϾsƘx30008`QQcLBϜswlatUmvXTs~ذl~^~6q39mO0ٲi?=jN#ߦM6Yz=KKK++f֭-hS++zߵkp8l1[0!}5.]y۷oիWs곛zWv{֒IڲmKnNȬjׯٳQRVV9/,(lfjݧ}*+++eY&dy E"f^2p,$D"L-Knn>x\~BPiYi,+..h4ZQQ/**2ͻGsԭ:|0>/iL֯_q{Қ5kǝ;nr#֬Y3`[6i1ƛlZ~h׮]2|g25ի׬֮]D"5 Wf7gg2aOpE$z׭`G?9瞳zݺrFh)}_ >=C aqڴع#\Fmݱ?_|3hݦu^BhwsYs,V BheW]=})SPF+27;oY ]\qssjgV8pw|xÿ.;EK)ri*='2Oǜo_wӭ7Yh5cΛGp꽏31C2x|n#FX¼1G:v ,XlW_J s]tEQx2\h0ee=\ :tg)Mu;{﹗2 #6p1ǨTD#s}._z5 8ڐCsp _ڣ[ܜ`0(B>Xze.O8=zt^x聡}/aCҭKrGw}drW\uE~a~<g1͛5O<Ķm*k*=.(ׯd9j!r4ݸ~HkV1_=|+V7o޼*U[۩zvܳUV\0RUٟݷn{ GǎʫxE}v5~EB"`r,$g~2so sr/1 c:tpey 矿}va6)ܹs|XIzٳg6lk9眦eӚQ?@d{έ;+J+~jQv̱_b @xU٧}덷iڿd;#yؓwl߱cێm:TXKNL67_F"e6KKJ猿o޽{CN=c>fæ eeG}tU /}OQzM6ׯ_xO?t]=:ю;ֻ @Ѐ)gמaٲe ,ߧ=4I\r!VX'KyGֻ7pc.]]Ev's&^>q!O=uҊy{7_3'M\GDBQ0ٿ/o(+xŗ8Qbيg#;w]]Yg۟튎~-[~~ӦM*x~CN0K.8qbomoҶm{6YfㆍhdefnͺC+n綝R]wޕ7\wCV#YDf#x<:cl옱ooG;vإs#@UU˖-޳%dn3~_{V88-_~%7+w@Pj="ج6t:H2$yܞ?P[rҥv^ۢd"YVR&'e՚:vzf^P44t/?|[3$",iLn[p:CFPۢ_pq^]/[_˷P~n~\52&ǾYfvr#P:,.[iӦοH$%ɅܯGYYMss͟9d뜭Wifk*-Zt]w"AXfM"X낸_di0"j?}٧p+WZu[0}2'CڵUUϜ9S7MZnιf~N8AE=]X1- s/ O2brєt";u&L_?zH&Ij!fX?W U\ޥ[?H9U(pP?QJUʨF5US)3lOs4֛om!j!Æc1Xegd]r%_|zwv$0Y,ٝ٩Szuyݤ~Ebιb֨L&knݦ<4e… &4)}n)*SSo8d /*SNXo^ 2RU4Qj X,m\Qרr2کcX,{5dȐ?R3F9)CO92J0-6k ?L2Ks-I-1 Xf700{!„G}4L缠.k`5MSE_RiZMM%\Ҥ[!d^{%\m۶+rڴiK6s61DT--n(EZnURYrj Gu Pc PF`3ەp/|1tPj)$#ݼ v}w[,=+8sSQkϮ=3?9_TTJr+}O>]Ppg;ue疫l2^aݨ:kqcHrrrFjͪbNwEئu{?,A}Gv]vVO>G>8sYnwrE }9E N{mbw>1'psƙM+;?ӴW¼'4$"W^x'[:w.)S 7ओN֭[dp{%O>l=pm۾o6tg} :'뽇^tF8?'ԓN=C=t#r\.W$)T,Jjk׶, bN '?0λrt.]etǎ5bRUU9ׯ'#REQ2ȲH$ {!\L&u3ڹsUVW^EQnv,kx%KCM[ӡoVݜ8yyyg~f4}*SVmw~ i渣wwxuV8ob~ ɏ:Xd:΀z?uhM^믿knqc9羀,N_~x Q&:fdqi7(<_ );)^r%Y, HOW4l(SFU`80SN>SNսY*A*X P( 0٥%i?ꟻv:zڱzuZTE^%)} j|bDw{'S8.zg"'4~Ι;g``@y~6mM&I*3^PP $!Dq(ӟ!;c˖-?s(Rm 555NӾsUUwcVUVr7^P*LfS~^~b(ι"xM^_}fs@&1z$2FieuM]G5B/==4&ф0A6 /LX̒D"U: D$FUEi"iPB P/LMSzXq6j0̷X-6M````D"eS1`(( IDQD ?` P0ܲ%)d2ŗ_s1n#oI/50hq]nA_cy;YbƳ{sN5:רF5a n48p XYI $4(@Jdz-XqUUߛ$IXB((upKM[6r tSi<\wsS˖-v+/JbzFR >g~hNK_P8qpI c|.'n goJJKN;^s5W}b`w1)vBzQ5Uۿ!c率~}{xOg~ m?n8̒0ǵGQJ):7S|}^|ms9&9lUI%^ ТL~>qIIu_ײGz\pcL5=tx2 #k 9繹zHh1`%Km[ڜgZPUY{o.^y#:r9.;FbN8p@ ")0#8ǹcO[5QN g`up֭2 &LψC9EaTWzG@ yJ <m۴mAb]ve]uAiŗ^gQ_qDUVV=a3O?RU_Q8S?EVdnn[nlh`{E]D"AQ!rs2{y~2D!ݱ1^x hkA4-)'6G})0ur9 z8vDA?Gsc9ˑO-* Tf1 /[,LݛtݺuK;m=ſ-$VhTcrhCZ%kך-m۷uhӡ[n%e%k֮QW^|Μ9n4;vزe ާw%.& Zы$@cofI 39vG["SE&>/'''ԁ_0 [ Z Ws}m˧U_t;wS!TY]uV|=! Է Liǎ>H&Z絖$)TЛt$d Bh۶mmچ`FxsSZ=C `aٖ-a@.D)fyǎ]u G•U:vkؒTTU}NAt&G7\\bu!U]?ozg9Bhæ ֮۴k/oUЊcȔGTY-**ь) ]{u--)}W_z̘cN<ė^{I"REIȉfvt ګ9Y}i/L۲y˖[|5}oʣSѨ,pؾc\q-72uܜ\ɀuU>ThJx)B1t_n(ôB_p0TSQZѮM;@P^YJdReESvS!Ǥjg`UI1KK7~]:(z=z-У6KE'1$iTl2^?!© SA&Pk!de˦5]UUΘ i_ZN>XYg Rਉ!Cnݾu)6m7f>ss7>4  ^{-jƂ\57o0cm۷ضc[ʨ>ޱsǼy>Qa^cO?+;>\q/9MiܙVǢ􋜼ӧDNЮ' Exv]9ʸ?|۶n;#̚SUQuE* e6oؼa6mۜuY. XjcCn$ !ڒ>N!w9& fӔZ!*LA$""VZi>-XuJp@k @}v/RA3 ߸dgg@EEņ n;nq7kr̷]%K>3Ɲ3nԨQ555 s\3/f:ͷ_te^pիF1Rsd3 Ͻ?I߶mjA6;'|''zsBONuMo,"0vƚΡ )/ט{OTpsrFvo:ر#`vg+ %$,6KaaU-6KVNF5c &@4y [-fi&ѻ/---%\U8*.Ys35viO.TnЗї51ԥ_~ě&>S1xÓ~yw-`rQg502m84RY<̞5vtM[5!u˜G/hcn%͹N[2y]sr^xK/47/ClBȆvǒ? dMKW/ym%lvlCq heyeiyi,ӗ9p1`&)Jw7d2EcGFUWWfݾ)B5j2_Nҧs\hRZ/[V2˛5x`Q`e ~]x:ܜP04{?pC S>lذ,Xbb)\cɩwtLЃS{5ѭS?sرO?V-xժ?.<B.@f|ǝt\jGHwcUQftW|g'|#:( {neyypͨC3z2ƞaұӽ SV}Wnt#Caw 6?noҺ';y7g9]nO<D};n8Py{ēd2 F 7`gNUaggeىT!A>Ԃ?;.Bc,`i;ng4mJh\%9+lágHW4vAS*j596^Ғz]v;tr]I(L]i}+<6eĨKXv{=9W^(&4Xw޻꫚sƬp2<ǝ3N3M;bui!$A$"MJԫٳ FO}"c*{KSSQ+;(N7>6C5ЬPjox#@{tO$$,fr O9Ƙdy,& vAf͜bxH,bٯJ5ņ ~7< 쬻;K 4UxY,Wt݂(xo/uD5 Bա` q-דk&"&m(K"uBmڴ)Zqicg[ϕ=?U%嚦L)Zf%uG9wxGi\Ym@Յ(BF>snZsrrdYDg6+++(<;;tVZMVSnDE( #z- ڞ_BP:!\ONMeM]DRMumS̖xs.~ޯM^z;sx/,..^v ޭXx4>)7xsvmT]@*҃<[qࡩ1op0P}6fǞ0Z=תwC2١itE`gl_~{i'ae#yfP ۟}>KQxww<0yay84Q ]^gs'٭'{bj{?r[,՚ AY,ڜrb6}#ȓNbX-`X0`åN9Gy HƓ ,d5ae)V5u/pYfɲ,/O@Me@"Fy\1n =܂~؍K,~w 3=*&?gKNdX@ >9gW @(-ڥkNNN2UQSw/Ȱ7O&ݼڱ0ᥗF,)S^}a$VcFRQlo1Øc ip8UnwB2J(hk*k 0Øa!(g(p΁j ͎|>autj۩M6}x递ބqN:8b.jyfEBⱊ-[th\.U7o|[GϿvmwl]HKٹs\v_=+S SN'<ȣ͝‹/f?=n2 W;)߹2\.W޽@w|<ņsޅ3ؼ׻u`E`i}(՘Ƹh*N/xCPNnXAƫFO'G;׸g\|%e%]vO7h&09yyy.`27~�ztk׮閛Ls=?|È#u*)LIߧ?C8u3:b[&![( P]9Y o%O]c玬Cg.+,,=X[JJvW8d2>9Xtc>SOYm{LZJv3L 85p?H Uf>mO lTW7{"ɼOJԧ6]8qbM?Ï83a[Bwzgnnná6γY- c06lI 4=/7Gx6  <XC,ݹd'eQ^WFjιaݻҭk;ŗ^|7FY1D_*UWU׫X0ncw~j:@m]}:-+8}ZeKP[̐Cm,[t5HLR~)+D cd8^JAbf2qUnݶR9ߺuR4 =ceogEb$% \Z])HI-ل HϫQGR+2MH(%ܐP0”фhdW8PFc$I,3$AJhׄ`rVVW>C 5Qo]=IZS>}n$uweP봳oy)_#Ȳe˺u閟O/0FXVeYEmvBK5RL銦; L^~I4T`"k2,|&Um=^nC~| p>!8v]VьVĶfWVV}jž`w*dT֟YPG/j\pP#Iycj +nc}1狖i=B={6T7}~釿o!skqDZ\~n W{UU+G]wuE-zwҒ_y񩇟WKXޭs+U~G… UUk=ؿeKcOflsޱSGdww|wnnzQ8d2ұs1'wban>9/..~Z"#eBLc7m,+-B)7o,_!y衇^ԭMo}d6%"}&lV^U~ϝp _'HLG1Ԓ/L}l7ګ[51s39y9ZR>X.˛m.W M!ղGAmظ}x,~Fhf{[M 5M7{oE.ipnh0MnJ;_Gg|\}M:Za^v aV^=ә\d̘1IO?򈑃붭+,(rٜiߦ{[n'bn^;=J/(oFx]g~j7_8Ug1Eti_(L{T(99쳳YxfW{5RF@۶>s]EE=К5ku=S;G7ݔD5v4WO1$ Yސ{:θi%3WvGUU֭[A0֋ PRԽ]WOYxŋοL]t?خCw~'y>K/tġ#.Y81Y,EUnUS^U">3KKK+XǸqV'v 3֭_' qW>,ˌݽM" ;{\25\WH$:Aԣfw.cRJ9c,]/9aqpwc G8b`~0ʹ{8`2"JQ$d}7%sL.** ```prGR'`.X8$5iB 7}|xEȠ鋺NeN;4 8za險ٳgϞgqָgOag1/(|G>Cq&c]m`e#.kWe*+*G9F~X}s}'%fꦴyݔ6LZZNy;͔:@LK00008a) d&FBmڲa:4wj!ӷ-9%[Ō@MB!c*݌a׻l?J%~ c}QG5IJ\!4L;8H9ܺi<`g k;_g~xk8]-7lAjʼptf% "cLEXM)/LWOk"!"ٸd5)>RW}z/?˯|7O9cn!ŭ;nڸ)asvjXw~uMy/Ҙָ$G0 p;ݝu;W`mGu4&8 dcn+ p[FC>TԺțy떭9m[cB1LF@BƘ`1p2G޻9ʹvN]:]s56M/gU&z=X 07sLc*ە7lA8.;*vZ'Se5 Mf+Vm;=~鵗6mԻ{뮻 gSmcS+G6bl $o /*j]G~2d"I)ʴ.$uҭC }<mۯlov 30008 kr v31{]ơ[ntä|kLc&.ңz X';蝏9 P4tՍW7_yUϛ7Oc*u~W}֩gXLN>>'<)‚_/W^un):= Ba$+rdYfmя?8طsڣ>:??/NN;4D$,Re5 Rb;Ձ(9/)+I B?YmeYFI,,_v19E8s[̵`93s{xcOUݧ|GyQAd¡p:lduСO>- )T"+55ҍ7*\;5550Tb}j;ݱmDŽ',Yxwkg```17*U) ,|ч74l>睳yl1%Bi={GydzO֫?pÆ ;ygEPÆF0yG_|_4zJQ"}NU~'yq涻/^=zEe/{WN:J_2,/;qMab?׸&'eߧPtjڿ)\K_=+SJ6i:%,555(>'bɘj‹tGdP8q%I:3>l}L^v;묳>lhcS6aC;lazF8JiǶtݻvizb:=ܳ< Ӟ~i`M~p2+Zܡp3006wӂ)p-\ϖXyqk\Mictw 3z2ӽs~`!#A-/= F9#rx F޹-i d3%?8KycE,nlrF9=k >uM71Lp~n~׮](bE;g```o6`!@D*j]ʊu춭b1IeX"087FgRi$vs19sfΝF>3G=29m< ?s;*vZ'Se5 Mf˴%3O;3|ʟ8c/>~]xхQ_Y_tEZUM민߻vz}ݺu|CrԨ^|Ew޶k/}ŝv[,C]K_= CJ˓w]ơ[ntä|kLc&TQ]qx?3=n/NUd߼` Sf|4#7+w…&?ٛ=syUS_|Eثr5X2;oUTWL~x3r s6| s|УgO>G-jURuF,[VZرe/?0rҒt6loU+6nx "z9pQaG l)'B[xeeVѪjmN?nݺ!@JBTؿo/ :tPg .?'|M6-]/97hľ^[Ǎ9أ-/+۾} 7p~>s@$s fb`BH붭׻oom&$q3('pbn].Y:iFPg`вr-6~ȑGnJ9 2Ȍe vkPmۼ^[ҝ;jߧoVW//hUΖlRn=Y_O$g1ιU3c Q:#VXi 312nWWVC;Æt9#O~xG[lxԩ ,HuXj}w0+e[9yl1%Bi={Gydz'={u;ܗ]uǿ?a"E"1l2{чfge:Pαyl?#G=ff3G9,3N?c;7lذcovaFPWUUO&3y zٱc͛7wuʔ)-]H嚚Qdj^tE]:wi9>8a1ƺ#1B8Ȋ\SS͊%c=P^=.a#8p, LJZ?!r;N^~]vu20wuɓ_ /1GLž1?{x8@A>T0tٕYo;F?`qU"ڨ$th4{з_10GrTciTkrq x\sG}tytE +6 3\xuԕ=.&p 480Э߱1Vop@~y(5ǽ:`Kx,;g3000[ py8!`4wAqq#3$sT^ G5(6վjM8y #X_;ٜπa֭[vN6fufR䕫V)jxD*Roܰqݺucƌ1Lo۵kץKLMx<m6[&N:~SNy .DФ'便7m|WO.eL((M7! !$(歛@B8Ad֬YW]w.ynK>S`IR ys͟&D0&A!"9&$"d;g```L~Fvqg(|~i"ش}39IF9a2wU?7hVRU?l86뮿;>d_KOWWU+q%Kw~=3ƉGn4T)Mw~ܜxcaؐACwKoK~䄱'Hϙ/b3S86mtNxš-kC?vѢEjYo>77 "?8طszX0vKECw g<q ʹƴӏ?믎y$c=.,,DA_9G0T]B0fYO{#&z\j7zE&OM w;cǎ#F9^7ռs( ` Dw=%8:u y/%Nƴa(&>1#߲ۚ$;O7sMMߤ%˖dgeSU,e/J(FHЏa8f04EKD*aF30M 4-a$4M3aF"J #_yA o<^=DYr'M))) `ٸ&lpشӢ1>a}>ZB?=:6reG?ʤhjGSS_~6}ZdTK 7J\Ê>}tSYus?.jeVnn%;vHINiO |lڰྃsg~jzǮ>>>'~;ݢhD?ySsZ#G?vشϦ;m;9~;֢U a4Y:Խy|9B0=HB0($(>!Bfpa^ajRܤ(9>Y3M6FhD_vuk "#G8sSɍlM2S32Иo{e(nݺ;6m*+.{ꡮPgunОw YФsaWZWiۆnݺ6iҤ,44Ӹw2l["8(8,,l!?mcG ?p􀣃')Li6-PsC*k֤ F/[Ф}~/733o8XҼ u#a0ﻰOʻ˜”0 "HjYüscŊ)))cBq͚53fXPy:^7PBј'\j/Ј& `9ϒ$Bbb+텊]ؕZB4%Yj._T{oW߯obI4E$uǏ &&&!8?1!ǼI8DhJ#ZBW$BFt5xw%l%UH%H8=TXS ȧ<^F&1{XXءCB{;@]9^7wLcZ:ZӤ\ޤ\(%+5ŒyfΜyСiӦ _#,'YVmlljEiq=+݇~]KzjfI%%" \`A@@ ={Ԭ6hvvvGV w{Gjf2EQ_~Q4iҾ}{9sSF!f(S”(s kGGǠ aW^}TǫhK.۵io@;%$$L0WuG45ӿ"(L ̈́>#(Z~q<|i4UQ@#@Aƫ r|MhѢm"_lI(INVΆU.h3̜3 ҳOO >zz'Nl|,r¼¨3S3iNHJLό)//OOx>fftVՏ>z^Ľ{X!.#3#**GRpAo?}x\~BU94MO2!4dȐwvM|9L8©8Gq 49c/f]~}ӏzt3S3 L ]KKJM,Lw_x@#7? 0HKK3ẓG nڼ)$8#ccvTQqFFEE^>C)#at:M6IIIa>U Njȑ#˖-Ӭ_^X0aի _5)[4ESjZOOOBIbc=<=&NhdbΜ{bo|cniR_~Og̞<¢BVΛ7/'/'9%/'?3W]eLXﰾ}BhO q|mKJJLMM\ҠA33GQJϟ'Zfy>~ep˛7o:9:|oc_SsSU*%-' BPm9~+=y Z"4ô'<","z_w… ͛7T/+˲ 0C1Ma)ھc'1ףeAy5׷_A^yK K;[;DܼԔT%ttP( .tsR!-C\ܲhLؚ/z/_fuC<9O253#Sͩf.;ﴳ :vx?É Vj֮̅][V^}P~v"`{ OGԼxL0 ;;;PcAM͟*tRLL֭[ kӺ{=wLnnnB+69SU!h4՚hniDWjL wޭk&YaSO=hQbbOS&>| Y~uiI0EQ‚fok+(\b[@Aa[)mL,JeaÇ[ZxÇ;v/\]]5ka;ɓ'wލݾ}{Ν MAW322O49K.۷˅FA/&aB<ߺu] bh`ȱ\QAiiiivomggggkHZJ\Ы!'jO.26zFF [ZΖ4&4mjllLӴ3Cu|l-s sR&=-}u,fe41{^ߠfow73~!dccbksvQmԬY3ХKfΜ)F??#c5deecs1"dlbL(* --]]̙7oz7_/駥KsG<Vϭ(33SP&&'::0Cݸyy ?y<8ﻅujIGN7+3+.6c\PPq\Yiٳ'ϔJS4uʕٳg_&MlRMGQT֭ ^6&#z>0B($$Da! NjaÆ=z,_GB| Aϧ8nּY9r#xaѹg3fXfMzz:˱µ2AyАP&߭iO>]Ê*%$$DYrnnn^_>յQF֭322;rM]:u0ƈԌlJMє+&86>ӳ<))ɷon^n\\Z60 1V*11חJ㜜ԴT¤$Vz{888<{ՍaĤDk\Bx`mcM!*:&SP*bbbԬ1##*3#YfIII% ddfxyz'$$ԯ__&^GQMӅEM>sJҌ߼y'OZXX}j膇6ne\>CU>>>>>>jzȐ![l߄NjϘ.Jܽ~z0 s{/) 'u^^V wҥYf#xqCQy7*,,ܸy#| ǪU_L&dZqBhe/_9>AxZZ!Dhy3aVNNN_b(E(Ġ&M\\\8isx"fv,"wX4EӘ& B#:)9)<*yТe^5 w38y^YT+$88X"ٶ3gxǥ/_ES[%''Oc߆4l԰!A^}}||y_{ȲU^k $Ƙh׎1:zhiq)xaW^/8|8CgB> }ڶk+̊T(69:tE>8oV m&,'(UJR"EHpSC#1Ob,^8+;҆W_zj9bbjI܌f$#G!F4xZ]ʒ%aȞ{U/(0)9u kKsf7llblR~=L0KXR%K s)D j3gl޼Y(DxJTBBurqr.BlڴAC11^f͑cG "9ٹ9Bc$wSE9FSSgggB߿0٣紩O'#, exs*NUkCA ,hϯSslڴ͛´΁bG [S#^Ӆ!U0x℉04C_|e}R鲲;;;33aLxap++;wܻE@@@ϛ Wܘ' l7L4_qԄ<_^V5>@k׮b lFQsjF% ]ХkÆ[Xrrs-KKݫR򄄄^|qi I <G[6G<0'haaA!ԙS۴jɣI&ԱcT*U6mxƭǏgdg?vXL 7,Y_VZfcm3b؈v4k֬Up+R~0 qHP޸ϦNڭ[`cNupZZۄLYД1GZ_Oޑ z&[[X;z|m2p/{7ӣ˱#tjQ ^xA!A+V8akkrst+-+=}Ws:}tnAn^vٷW_OϾo~ȧC1qF̳c1B! %kf]nݲ;@9^7h_ΫLܢ\ܐ'<ȱ?qjUV<<MIKZh̀ <ӘVjg9Ssj029D"qqq-9!mݶsΌٷ_n\KO_A{{mnf>i$}}}^G޶}-{uREo#_7O]#!]#w4JNŒ5F㏱7ۏyHH0ޑm˖->2.?^B r JKެֹb9b9yR{WøbnV!!azShƒǘ(ݿ>z蛹H5!aL7 Af244cJU:FaoaJ6ouIa`-䕾IcBL+J"uԙa5QSW$MhU^tE\Ntǎ歾:w}Liu@YYٙ?Ϥf ø|Mܥf(*??{FFF: 򿲰ؽ{@]9^pGӴEQ?Zrix5:0NNu-[DFF !,vԩO>bлuȑ(T:@.8PXڥϦd2mjjZXX(iNuԴ0ƚJ͌$I[AFvZaY{wx!׮^361SaQaV_r</5k,!ǯXBXu*TŪBj(:.ʡD`j%33eٷ-ڵk)}3jaTJOf666ګ...Ǐ;.|}} gp_fϞ:n8H:-44;( W#Gj7o>a#U?sӦMŎt WFmٲeܸqգ(ӧ BX:֫WO&bǢƌӦMĎt ׼ysm,X JB}wbo95'@5o.11M6b:r; \pa֬Y#F;把N>MQTO<|ǎĎ Os)S4s׷oۋNfff].z٠ABÆ &rJHHqPv_f ZĤgϞbGފԩSW\)$?8 @t]ddfW^uaOtT*mٲ\.GlROOOt;[ZZn!0LXX6`]"ڵk7l0occ3x`L&=z^j֬Y_~؁PxЄ ?pBa@V B$ 4q&1xt>3 Ӯ];):twَ;={VkK$!e@777:㯿;3gjΝۿaY*N:UjB!ݻWw/_޻wD"jT* 6xm-R) Zd2ڵk?Sa[w5zv-ºu|@VrJ;v@no a^ 0\sTCܹsb̙3)Oϙ3G젪ȑ#̙*nذAXXr{"v'0#ƏT/ooΝ;x+<8}ljj*2[k\p~!CCÎ; vܹwޟS;FT9ra),O*W?4{add${Pܹuѣb{eC 0 ,,,,,lG;'OV\)P꫶m  5:( .\J7ڵV@xjA}g3_1 _ JDDf,66VX611ڮ^zMmND- SBj3-x3,",--۶m~^qb+4۴i9yd&Mܛ7o֫WO9СC?fuյ3fh?2wϞ=f ÚMs&Mta[[ۺ0>c… ,kwsrrkV,Y ,իwiVq篣m۶zzzG9tÇϝ;[iwQFΝ;̙3N:i:.?kZuV;;jy@@f_}U-I$;jZf:uul^^^|EuYPjG}7@}uСCBڵ?' ?2:u8;;O8!ddd4}tv9!m6___j%K]]]5k&ʡ lٲz(x׆ުU={V]G駟Şv}s=kҤĉϟ/V33j]h@jk._]OOoƍb w r<@gܹsgB=U*/R+Z@茼'NhY<PWjΝ;kqvv{\jUV%$$#E,۸qǿXo߾{IJJٳgppQPA;wwѣ* Ν+vtu1?~i!eYf qݽ{W3C-RSS5JQ%i֭Çôrϟ?߷o_jhh#GĎ nذawFGvZlի5N8Q3oVu]HHH޽5&L@M L'XZZ"&N=6ySsePPtZMoӦM6l؁!""b'O\TT$vD§~ڭ[7Mfee*v F;sL777˖-3gQnG=~ 8p@OOkaYV#i޽>~ݺu3fx+Qj;wo&&&mڴJbUܻw8aEfbག6wूBѣ9[nm޼y@@@@@@͗.]*vD9ȚN*v,uѼy4Ďc *̜粲X}9rI&bY]dkki&aaÆ 6;"_<~9?mvhll_}Xu0Ŏ{]4` ;vKpּysh xck\޵kWM ;(Vf͚F¯zk?p̘1N:͟?_prqq; (LIIh~&p_ uӔJe^QaBJM:8pq@!jc9Nq*Sreeǽl.^(vk݁' e*7_;lP&"v!k˗6˅ KkK1"p}@4AcmmݥK)ShٺukI]v988j.uxP:99%''#Ďܸq#55U~ o߾ʒcǎ &. ի׆ Blڴ :uJQ,"|||N*v,kӦM&&&~M5\JOOOII*Bz6o|`cy]ϟGyzzzxxFBhݺu/~;{/_.H9ԩS&M^s1c̘1C#okmm-, _ 4eY1BeaÆ }z#JB6lpss;ruu]v}8qzjlmmŎP@l&O3fmٲ!|BHVwY}P@ry׮]޽{#6lsÛ?Yfu vQF_'|#Fx髋5h@3e-tejwKKKК5kP@+:w=|J-a Z4bGGGHJ]}]1rHC̙3={[ )\v)v+Wdffj/8QFͳ177;@9.3gvyGGjuuю;wAAAbA4HҿKT?u5j+uqBM]%ڶmS@m96l!x xP˝8qk;(x ǃZGcƌ^544;(xmLDQ!e:|ǎKIIAM4I*#Am~%af޽OII㏻u&v@]=m.^YٳBRe˖l{P&M$,ZJm`H@9BC A-[H $x@]A-uVPAv9 xvNکCyyllĎ158OFŋќ9bGYgE!77Է/< ._Fӧ#P.AMW^nN r<P;Aj'@Ts˜^]ͫBQbyzH'<tUkptq[zu>_|޽" @i.`dL&LoKMѧ8358ǏF;80FvvbXnɒ%f&f/ NzZ!77BX-(*r<ancSRIUA9@D.(,8tPFFEQj(X.`E( Ld1cʊhB#,Cj:B EMw1燎J(db L:eݚG.\0`WTC;@M6JR1B<{x"9<ֳwU\Kyg]Cj:BB)xRVVVe2Q#՜t!!!#h$#awI~OAH$ 'vc(歛jAiPCab S (J`1 T UxJ|E&*OAi^BxD(R"GpKgyQ\q?|t?RALiJ0UqEo߾]vݻt_Ҝ@!0/8aޣ(QbYrehhh۶m۵k׶m=_xˑQE%''e1 qmu"l*=^&?*r/>rWEQYYiiš[y3~x~T?UZY5{W46uH{4Moڸl驩/z4t񯋬E:cc~4C9 6 l*J(r3Qw" :|pMRӦN޽a#o߹Icġݻwڌi 1f7ݻw6tӧ)*,nw}ݼqsiO޽#oݾE9!Æ ۳kJe/8 捛%DR~}{/]X;y>\|aBȪz=mƴ̬L}1cdgs 8%{ 11}x"0*^x}{¢O'}2{f*/`\UŬ/zjc###M&V.OxLŖi~4]_a+W78qM?z0/7鲒gOE<8GQF 232\lԩ/_lĩ4M(,:QTYypNNNԣȨHoEmݺ5''iqqqE4MGGG'&&fee?~aÌ 9KJJz066VRi珬ddf<)gjeڹGga """2pɓ4|\\܃bccYh a$1199=zJqV,KLNT111?~}#c Aă!'''?y򤬬,+++**G%<߿ѣGJQ(/7/******//0 II 鱱ee #j5EQEE?~JrJqQܹs۟WLt||=|lls<,=Jc-YZZ``СSS30 SZ^Ȍ %"D# {Pu)39s&'#g?,™f={<|p}Mӿ[ݜtʧ'N7W>wٟo͚59rߏO?ۅR}vTϿ<|СC4M2'O [B SήoXң޾};4$4%1/tC=<<z{A;{;wiݻwƕիV߼ysݚu:uJ":9ohJgvhM_^TJ$D)|1 +&M\v ߾oin?``efaػq@@@NNNpF> M<{L0'˗/_r!BaǙ?Μ:cmk?_uI2ES3frttܴqS׬^76:{_srd˖W#QJJ_`ytRvy731KNMrJjܸPL_O߯ "ݛ\?~ؼeE9:8fed4h MPܿM6O761186,//OIIi׶Y3f>,//wwٴES)*/+7y6"2?qYGW]_.662nס+K<.:_n,>}͛7sN''#y:o,7m#dRѰQCa\23j*66+qC1tę?$'>={l!d 3xz{DZRٻӹQ|bkWO=p>%5E=z,^x鶶wȘܙffddܼyįߨQ̸8ʥ+ <f`{۷o 7{E#,,,00PܹJKKX{{-a$yQQQj:66vǎ_zK֖^h663NMJվ+/rrr\] Kx܂IIK1M!VfVO<-).IOKO?uwBCB Ch(*(*+)sy<#;Cd###SϘg{g-+^wo2$?;_T;sgacfll,Փ%ƽG S,ǮZʳaͧNYJUf&f7+o<64?t𐑙Qtt4"gVVV Zn}-m>(DiB6ojii)XMOMIIٿg?!A! !iի'yϋ]451NtrrIIMN.% ԝh!0 M➙+T 3,c}ܼ{%&'嬯o|B;G8=FOLCAaDn};tͿ.O?k:7lyFt|||bR_q08'+KrR2HfFfiqcGxwtv`IZZZǎzRBY}ҝ/ _r i9xݻwٹE6Bm۶6 VZVnںX]:͙3go^p J%BHͪ) %4|#`Ϙ~6vԹ[:o $$UNq&= eeecR'Cۖ YUsjBPG|^=oݼuܹ=߸'̛5s;BHO'TYa*u ǩXD*Qp StizIiFFleϧ$0 SZVjoȪXC!sO>d_BmVV+߷doܸA811 n 55uƴ֖ee]j+e2}7wGrrmlm[DCFƎM;Rܻs`߁O+).~pJ#"XXY8;\2( \300`$LFVQrrWiӦYZ[*= B ?P&NΖ|AC*_33J""#0)zXGӼMJJ[b\bƍsgO;dիV9 0”%5-UR+ ES2?NQrttl[]wIJH2O~>eee ή 6(./vws0`U]vţG~cc6oصs׽{drٸݾz>y5k Ox9'~듧OI&mڶ]xG>9qdfMݷ/mggױCk6y%'% y411qrҫx4qeذaK-fhmڶٽgwJJJfZ@J=kɓ; )޹}k:t8|'2er|GgϞmbarTt^={m߶}W Jե#@q3fhݪիXMHydQQL_֦]BE↎sᜬ_7>33GB[HbK.ϝ3f̘l޸9idaN#9aիW{{{ L̈́tNTN~WjYmw )..vwwG$$q10ڪ\QsL&OHH024 ^^^)))EYYYY[YW qvvA+{;{WwWeĄĒCBE5""G=}G98c(JKM8^H+pfzfzf!DT:8:` qg`h$Jx8KJJ*,,JՓJyyy!{;{kkHggg## s S3S3ss0ƖVvvEiiJե 9%)7'?ܷoߒ%KLMM5_E'%$e!\nmmβKllL&uss+//wvvV*)))Ǖ&JT*Rtqqpvv~ݚbnnT*Oqj_ḃc{H%RccQ4-47kLͩS LLMibYV& IC=z:gS]/svrdnnn?R)TRP߰()) dgognn~ùQJHHZBׯڵ~­' __ϟ1u}B|BQQ\ Y\\fNNfj:.>NPXYU\4奧at%&&:89(˕/ۧsNN'E͍'|lLlv=aaa{@NNN'6~>O>kkY36㘑E@^abInB9>E0|Njb5gFUSLf#u;;׮uhAs)G@0vJ'yG^,kHhL^fܜ/~xbK3J/cQkiX7C_|s C½x>cWԼjzϛ̇Zq`*}jv[_q 'ܾsu֚/}}JQԑG} *zbTB϶mGi>'+:vJIIiݸʃz+VyEmܰqf_Ow~A BvH$M9Mh~a_Z' z&&^}h`h`bbR-UkݜݴPBx===SSZ0d7BH./]ɩpc˲Æ 377735ӭD+BR$Hccc##^={U0@h/c<J?2}qÆ QϞ3w"SSS;;JZ&jͪ^=zaGc?ڴyP)w(ܾ];;x\ՐO<.ccccccl!EEE 24N}(rqwAvY6hvsuCՎ_iGii)˲:t T+νwyxzk>э6bDTUXX04?v W彺RQ|ʦ7o= BIENDB`engauge-digitizer-5.2/usermanual/tutorautopointgraph9.png000066400000000000000000001443531222557406400241210ustar00rootroot00000000000000PNG  IHDRzI}F pHYs  #uIDATxw|]h'RTQC \T{ҝ6;qmH۴,-/_I|M{O=t:v{fV,P B3c"R0 0U\5^$Qy[{z<k6˾(;vQF\\t:ӣ/_n3SDB0B8[5ne+_ 0 S`̭eц_s: P}4HsCa1ˆGl8w_S͋Šleh2Tnt-/[ƶN'j]G#5lKzSdBFP08 [{Z|ժEIGjUFܽ[oΌ Q#:#Ã.OOPkDF1\xO.d#0#ʹb$; ý2g ו _Mۋ_,;b6-f^!\A3: UJDpg):*)hx޵gV-l:3=f# B*i9H&f])Ty%%`.ph4g! aOHs/v ,X?^"<=X8:KLpN@^SlЩE]pSp \ח+<ۆe}8XLӸx, QsSC%@%{|H!<[O7lP`s<p2糳}S?x{♗?j,/>mUiN'X@ϛ5FDE[S>:>&b⸇4d"{Gkt1Ҏ1Ƅ3ݦWR(͟RJ)BcPƚM`Ty0BP(!\WRj>xoÝZmձyVMdrm۶ZpjO2a@( [ DF#/^PrW:r"'.8|H}KÜ񖞝j6vXJ-tW޵?O7s{ZF繣s|768l`JXf%@ +9+l=Gؽ;<|خU\4N׮?fݩ;6=u٥],#ǛIg_y`H!_;'ݡMb6NOf 4\r}[w_8u68sY[|`ᎾӖF4@wQ@|XxFMkhZ˯;\QC?~㓛Dj\ih4cč/VUۥZFa/Ŧ.PuOOOkcݱ{,l5K$a箌mmcc^_o?1GEelvBYrQ|`sA'!<Ъ%+I+ ,u2ȲL &rA!*XH ١ {pẆ+G_Spb";).Q$\CNp$s n)/n ٤\k+nwK E+C@xL^kxNp]|ū w^[ qpMpk xQ 4XxtOzH#ȵ&Xxn*+\}ma, eZ9J 9`QN'L8qsF#RFheB(/P"b:عm2~wiױ}cD$^naDт/~mgg j˜^}e'Z4sG=vϿohOsg<l._yRƅKy{yA{̞o~uz¸{232Qog+Z5;_┙ǓkcTVo=g qKpRfb2Do6D"OP@)T,yZ46{v>yg'Z.Xx͹̬Ożo~8fR%$E;-&MDde?s1wom^SvXr1sm%_zuo{JiI nٜU^3AּȮ#>Lp{l &eCN.5QCvhU`CfhT`6Bzy !\+X` a J Ͼrxf2IH W D % ,f4\w9, quQvT "@1 /0aH=:71(PŴ(#YTqLQ6񉡏})=!6[}>I<Pxq+3c'.p@%I~G]$2*R,QjdǞȳD)lܼ{uo%Q&VjgJ%XKP67l֬.g&ט!k2[TVԼi}֐u4G3JDZpDȼLe*zz9yǎ3 nPHD4&R l͘SԪIذ^DWiDYO񜕖FHPI}睍ΜO?Am (שmv?/ (Gdyeغ**\%z\*5^z]ZԜ5)$J`E=)jdsl~^붾5j/%@()lLm,߶Qx%E!@y)D]^dQz2rA^KYՀZ3@Ҳs,4zp先0p3 7õE2@}ᖀpIwᙠV'p9Hx^/!#ZUeg_K8]Sv7W$\(R\K%\[-.A,.B|htEn \W%XwKH!QJ B8F%/hT#,IeB Ǜ  pJu(\TPLY^J}둁RCb%lN0ɐ:-dF Zs@Ń^ \cFFLX烨(녨Hp8A '^:dE J8 k^9}(-x9+/ 9 7 .Q yWuap 9'}`yATTAfT$;\pM@}j! \Szxd¡ \]) <* Qn/hxhK'"2g )DE\ev0N *iN>ExRB]tHvku%_o T Q@z@jQC6{^ƎT, *a@e#1{].ܭc='Р~N ]:x,ڦ26u?ǂg54ZڥַEO౹N75:)At+j =0C\\ >gB e| v'8=`6~ȱ]MxfAxF.H%k/ z \*GÕ6f*.e+8*x1H,ѥ !F-RLe[AJ @ApU X-Szx.dsA d|y7"<n/ 7( +A\@xfᖀpQ JupgjdX \i1ę_z-|p *!I|f) Af]@(! *AΝ˒@Va0 Y0P* KJFrzRؿӸMxڭvDžGqIII>Buwjݬ> s}91H:LGt4;=[te箽Ӝq1:t n;thP5y%mtGNdHs&QO0Rmy9GZ SϦ-Ssu (c5z|ȩ ' arXj?_ԙjeWF&dfXgǦ;v9|,7>6rמ/8sazi˷;ӧO;~1&:,2\ؿdv|HńbTcG 'O9rI2T>??jNb *߫?[edߓmyk~熣.xNۖտ-fcnN֦D%\Xeѻ]>1?ϖc:{loبp>l'g1صr&_pa"kݛ=v1$LZ( 1ʵNE4@  jt f=RZjI>0ˍ\n39`Ғ Ѭ`bpsZQQpWa=xV@YWnw   |0 PVpOAʅRu׫P"ܨk7pH;Xx^MAÝ ' +%nc`8rs/kn  fp=᪢j .E=Ra8"zmr WNh_mqл[켔Ւ&֫Rzrݤio=Uk(~=^H1o5Gڵۼqszz:x 'Ȝ,E90pG|lB6)G>˾\lcX6BD5 zBaWkT&qK[+ة3F5E[ZUj˝ј9^:|^J&I̥T!7eBDC<R *A9܏RrʒGٰ氠3D?LW/'?XOLju h nM]#ڤV)X1jMǓG)j}^,tHY}frdFZLyN5P &j gsMNaZ+ z}>5¼lwb("yl'k>i@&v#Y "(3uχ©I=^c<8 Nqq 2Q?܆u ՆZT%ivO  W`,.(b*-nubVuPtXaZ]1z;;0cTʁy0*h߾=(STJcJLdcuHikrGC9jBHݠt>&L9F𩭒ޘk-a#e8A~* @d̫u xo{Y柭G} "(!2/hA *\y鏒 Z/6ERIia‚`C!/_~s2sܵw`j#(PIZGj}@R@Rf=/e"BMO.c'Mё<) 9(!hBQ)!]}<"n؝EQp}Q õD!Ad[" >H v7sW摅/{|`+#<Tzx1Q2TL90\*  WV~[HpeQH CnRx *Zn0WZ"X@(n-+\.\D9b@$D cY1 -8'%2| fa &*"pH b@AT@Qkf͚}7\[y @$Rz5g$RJDjgHY#JD:}J.GYHx^jEUeM[ T&D T%I&Ds"̐f <^%kA *i(ǁA @,ȵC`T u ת!py@A *&,Awf8\ pxM_z  ׀D"L|]-fȳb8;Xx/y: P 1twp#Xn`* :WzpxS?K @pe0ggLq!sp@ݥEY6H Fp҅<> XU@W85h`6;{eDV1BܫL+@F-(O-PВ+0࿗80 ÄVʤ^#@/7'TnOc>|nMO>7}̴,GJ~a)/sn{=zx=Zar| 9\Jga&8^%.P|k㬻3 0̭$/ ^( 0 0 p5aR)zesȄR9尸Dq+;?X'xPF>pזY`Ƅ !i~%0p[6n(>;x]9ilW]^|EF?}2ҺvڨARBe WrvAD>p@TdT\|QlJ Q 6u*)OYN)Ɵ FX)U(Q`/;Bわ_Nc |F?tEpѪ8mgSJK{%F8gONnuha@-]Cw]Q[4oV:D)|ׯ縂!-Z1sƲ}s9|pii?~{'7o^aP"ɒXxue~\|\^V^ēO|'=tC9Y911A?x8yda ^"&G&!x7ԮC!@DtLdb8}WƿRn=B 8>)^2BSyA%DEG'/Z^3%[AΝSsgߙLuQ Tlk*n*/] O7عc+FݸAcs"JUF4(<#"#t&]#›Mb8!D Up\CxiK={ݳmL oB_Wlܺm_8~g~~ر]{i/zƽ8O>%(;w|/9f͚XЃ}''>qEF xWOf"]{1/\ь{t{u~!<@jզN:۵ۯo_H N1xx?.  3fgիW6^zSޟb6^yawRߺu.]65cƌo~'OnҤ+y \8 =Z|[W˾sP( ޽c g}0gչWRRRep8_?B7whҢy 4n8D민n\|ڸ~cְk뮄m۶ XpG闟|uԬg>qz3;v.%&=L &6FujذaZZ~OF<:n2,+7k5 Xxğ;NkY_YfiN֯_jvif}2iݺJZ7hԠu<,Ǐwm[%Q&9|pf-z}>ɗ\?yjߡ}i6oŦ4q@%Tf]8!'7g'ӫUpF)׷_&-bΜ? u_oakS!tBxY_yH5ԭ[7##c„ mĻ\.999Pbڻ_/+y|/S+yZm]4h !t9JGD%1<*:$y%D$A&x$FL/ ˸W^ -Xb=>}11q1?Neh2&4oɼk4nxk>VQ=aDAt9]lNiLeQ"OJ<+y ݰqÒK>A\R[tG׫W'ST@Az$OwGd"I֣o_Π0s$Iу$zW$(#JLe衔 }n'qcYϟ=O 5ze+v}ї^W_~%J".Ks?mּYbDAB -L)G|>|<H/y$ty\nbj 3fgDe%@ԭ㕼^ڦ]Ԏ:#zJde%"թ]0*)]vn@)xaoaerzas 3aʉӧϟ?_(E? W5k\th Ҁ0޴iȑ#Ǐ߮];v5*hxZ(PLdȢ$D"d"+L%YЩÏ8)/l2*&dLe>zXySjʨ5~8CI%I"2Q|kN9XBIltlnݾX *vQDnѶELLys49M6z.^X-oݽGwV/b'Ndo-N:yQ;zRnꏟ0>"" wzk[juMlezN(IKTlȲ$K12dh4o+@Fz<efe^׬Yk8@ayJEըQCP$Iߏ @իWF +b7@В%K^y|R7L>5k,Y#8Nw)N7Fꕅn 9>޲EKa#c>2"q:v 5vڜ\VUF)P!$p^W*qy{ 8]Nwku;w\VvVVvVNNN6mڿo^oРUv)gvpL>}huZ۵k.kaHt_knƍ k`NVVK+;lL۷!?ǟ:daGEQNѫ_ݹ{(Ȳ<}fMܠ:ۖer)%իU_8oaTᅱzJgn,Oz>;7;7+fݚg?~N <j,h72PBd{-u6%?yΟ=rޜf>twӧKAM<+9ݺk'6f7_|Enn|BucccG=;uց'NW//4|[Nyo(;AoĉRZZa(ǚ3o(m Bhܸq>qaAQ RۤNxm%²b?q$ֽ[Jݔg{qo{Ø1c7"'Pخc)oʼ"%s zXi3q\e{ 0hb?ёG&TQ׸P5>v_~E%㎁9A<ܹsvl{o{ z|zɁKηmǏIHz|Ҧ΅ףBw^@QqQ&MRo}X;UG<8 ?x凕Qs{wmVpBmڴiܤq:u^ei,ϞzX?O:ǎ4tbcc/7龎!'SI&Pg0 S!*|O{ʤVd)p:Z*t.9q'O۷+$%%{y\F e";܎2ZM6͛7jJrJ t[U*[a$ X<*D5xjaO<˯߿^z饮]:"Y.O;( %TrJJJrŒ/>#I~GBon2Xg) y-ҥm.5dY[~B5Ν@УGȈ=\+1n٢e͕UV9O+[ԭU6SY!N>Ulvv/˲V z1{uIO`,ҴoY:<ƾ 7VdSڂez78?377q/[o_TZ!\#f}%_.׷_u&O#>" >11_~E93:uSk1>yW_xbcޛް{ `wٟmۮ63<vi)W'MtH +'agV/^^kݺr_xYnݺ}7u@.]ӧϿ{m cu5j|g~*pjժ_~\|<>h.ݾ_Rڳ{Ϩ訲&OTN|\7y@HF _*̏((XAYFޞoW8wKZaÆo۷_[h#!t1) Bλ\.1PGjDr^>gϞ7fCq{o.mqIoR^ׂ6ߞhi9htTtdD$!d+GoTG_ S䓼>H~AB^ݏ߽ʹ0Bмᯚ5N<( :!+gq8RSpq;0p3O>Q[m).XPl@q]v[lYwjςf .M?J)ܩafϞ5]uxV^CY ,$|s|Ol-P0[vl]O]pi@c|f͚ݘ^y5D&Ǘ^}z4Hdk֨Onv^0G=xAoۧ/Pi,vjTBȹ :}FfFػlRq*ɨK[xuav,V%CϿG˗|AGLj4psq}0JS#2 O?t.X{?Nq5wݰka mڐEVGk[0 z!0ֆZXdo1|([_7/ S վ T(P`}zz_~ywu]zAJm3W(  eIJ(ETI&PJQܤs&P/S"5xzMի/^Xz䩳NzwҴi0ޒ ÚpܹkVWKy< \Vw^>o}IׯQBկ׺UkAhITJwDμ9J4iEd{[ԉ3[Bȕ:*Rd*#-k*SY$bEpa5k,0zhD<֌|&}p9 Q: ܳc%OQ0SXyPH5)PJ N:$B%%ߥvUc;^`#' g >sW,|NSIRNSpΞ->T8΄+O'U+WUYaޙ+C@D)Ϭ4 <^|Pɵ#ԯ^7Q/o0 }-*)I܄ٺMk~W_U^4}$AZ-MHL1bD%\o_0_r7Y9A%(Ko9>##CbK@P~yoD&[oi25{}7iwGd C2PR&H{-6eZ5rH$%zrcI$WNA9Xye!@rS~4DŽ0JJyz78 ,HB7_]tqڴ:/*T~:~J(#U\kڥz)? Gw9\f`."Y_yCVS߻ߟ9{f;5O9]ѣG9NԳO>zC'N ?t._~|zv'nYy^D.07 +˰脻{7>J!NـÅ i ?kkaH%mּYs^_pnen-g}&I⪕ )ϡ9sڵ"* A^+}w&=exD fc jwbť];< W\7E_G7o%QDT.^[櫜#I}E/-n,.|X0 ` ?s =*A;"9jMZ|WM5ys捸oĉ'5m7i豣Sfi**Ap /F O2sJ9Y94*v{c/^!s焙u&p 4zCZj^}Y,Nϋ8=:NE݁D|>|$rSTD)*JVKz !ǩjkcf=>2">'* Լ. &_y<8t*",]A.zK'BhؽzV۵or]_tg{wpwvG̻3?IBZQd_tӗ_.h޼@`ڔʋ?~S~-*\rak)VL>3 cORh"j U?+"?z~S_,ĉ??׃Ȳ7rpa b~z_Qo}凔9C <G?TλȘ[mO|2.&.6:6=3=+3+|ĉ[d2^ªWM<9֪O>'EFD.}$hVb|n۸~Kc_ڱN5k`pd1`O7qfIHpGqU?-X|>w9wƵ%#ph5:MVFN4G9lFJh9_7"bFfԠ7l}"iO%Q!lYsYVQJŽ< >!>--}N3Rm߶U۷_Ւ5A%VLeC!:wOҒK7k@٨o"O%wXAB<#yo@W4{V,9X}$ $˲Vqqq-sj@9sn#RU5Μ9ӻw>d2Q*/Yrf cDqQ<+ӗz6W0>ֻgoJi;qJ^Hg}ETٍn )X@OP^Td+`%=WF.\ж}^' Iq#gh폂ڵ$9 RcwA kQ#"#myܜ\KZR5oEb}Aɵa.]/]wXK_Lzu!P@%JHuF1s#2O!$Ao/&;عMd/m ͗q{V^wltJLa<[lӇ䃙4j觟~:dۿ{SZ,T9 Ա_}=a„>iӦ>ѧ|!TbAn3.=1^tu|GQ+F O5~d E@)MmںMkǵZ#G)+m#^$2]_|ѵk}͚5 j$|ĈzQ(HCATVT]wݷg_vv0|Ѯ` z:Wbe%Μ\Ǘ.efpgeywQ?vb/W gc|ń$}Bm&DYKr9mZY`oV 4ؿ HekuӁM@% dܩc}N1p?u=oy(!<8rf `, )4PDǾӭ<}'O%$&Jyuf|bK3fj4Yѩ1*RU&ͨJf[:-R$#Z-11=n;66HasPK 1t˫(D&n[2H8ǫxp|8r aUV^N5Z0.O&\G` M.\ȱ#1Q1Ϝ~ŗ?=7lܥ򐯿d0wμ9u9{ƚo-H/X@%YjצݟI)<gn %<} {`<{T:!ȳ zUBDd7!$;+pqYd3 p.. F(u?qķ'.Z[nQ?:3wU\y}$>xyn/O65/>&Ik9yN*GlU{^{CՀpefP}0\XLQnu4_a'/'|A'l"¥?/Cͱ OZjCjķ'hB"딈$GDFשS 7ty]mڶٿw_f_6mtЁ1/y'q׿$?*SI}v4xO?yhμnݺBT* M??~B.OkߜC+{9 &jF6ޤPyggdf@.E˖.nwGyǿ6M6m+TC;u?~/[5Ϟ~e+0`ӦJT>lxJ;ъ&fS0q)e9??_R"XRzl=!& "ք73 }EnV˫xMMjFQ#(%Ṕ/\+*<**<=xsccF=чs*2yIv%f˲9n8VcO|70aeK A8;MTF< (P~=;6 2¨M5V+?aNVo] /7~mvJU|Fi L X7UI&z1U 6ڵ ,ã  M&D$D;o#Ided2=3v]&J2wm}##"!+" 0zɧ.'|Ql|>X,,\j@dRZ;3 cܮm(jHmy̹bdڴ7uiG=z駟h599GS:phզ֨/x{H5ߞ˯~_y @N%NK9覈KS5jSʺC?.8h] q^J `S*D:おPhG@;T1} Pɬ쯉P(PR"ՑPl6!<%/&_\(UP)@˿0rg|ZYpgZbqH #DWhXׁRewk2L"xKDxDU^|DD\Q3dJvDV*,ɟ~iG &{gGu޽gϞ%SeƋH 4mrgM2=sd3/SG|%*RA/|7 A/ Z+ИdQճ׼y΅(z悽@)KzBl[$ ԩ[nr]JWH*rP(&ͦ0ݝb;wbeܙJ;&s'i##3grQ¶,%I>;gޜ(hvP*g盷`^gdϝ?5&>Yf +8)ҝ;wv]&,k},{z|3tys6U t݉HxEdEHD:use T ҇Dd*ۿkA]GEa*1DO T/rMo%ϔZD2-@%DsWBH9o$:t2( >xP *L*D& /TNq[(eȮ_Bȫ_a[8nĉ ,0 Ǐ~pY )x8ETYN#Ah۶ NZ,8"ILzgp"qܱǔ+_n~E8~-83գ~Y?pJAϝUT_NJK/o~7W+E}*'3dc#G\օs80zrA%-Av-WD9@Y‘pǺuaPޅ90ڶ[E)'СCsE9{1@HN0!Ǐ?#Ο3ӧNOmz ʲ,y$Lq礫B%?c/T$R *NWy+xP{C]ÔrG߿艣^]_LKeJ-9B#m6ۦMfΚT-v^mZٳys[lpDFF߸~7Նs 0/NgI`x)3Pp>AE|VVfUU.5d̙3m\1NNNޱc]zu=xtȫMrQ"@*joDL%Fۧr_Pǎaf} |2!Աcǝ;wRJm6[JrJ\|L Vhشa[!+j96lMNy߸ w\ݳW::W^KE<J)ݸa5ҙ* &'<ݻwd? bAW*8Kĉuz;'70eo߱-y\!{̙3-˲QQQ×C?ϋeKlٲ'Om?oo1k֬+۷C\[*/!SO#ٳggueҥ~ 5 &UKJt:{ 4oՁ ҭ[y5lΝ;'QIW*3#TmΞ=[9ӧnje˖_O81''7oGըQ#Oa#2p8Ր!Cf2[e5xty͚5͛7ÇwҥCv:Wr>\EP~֮]0 Pjۿʫ̘9HwAU:{~ȑ#>o͍56lX޽###o2v'3{[o߿g}'0 "^<;6nPn{8kLKMM׭[7uTMYlٲeL&СCF]lݻw/^V \Lb|GZJLL b 矁L4iԨQe!3+fg aanR^xd6 Px"M <ϟ>}:cYgaO<1dY2N&HD ?0<YgaTeWZ!Aڱab aa*x^ᥗ@@aƌPW0 0ϜYp5xa7=B=aa3 0 sXgaJ5xaXgaJ5xanoaೳ _x._޼9Qs g0 07P7_~:t(K˗С!~ 0 s 0xm0 0NzHH>X3kBGA S`aO0p`/Tda[JaU aak<0 TB3 0L%<0 TB3 0L%<0 TB> |2עg7.-- BDQ5kVLLLKc* p$Zjݢ ~s_h4'Nh4k֬9x`֭B]#0Uτ+k;ߥK8ҹs&ML:52 Suτ@ddq#Fu9rbʅٳg?.a*5x&,ː!C@aÆP.K۟yP0L<#G8pmB]Hؼy3]vy6akL+666UTy?ԅ0 \68yꩧB]BHLL|C]0L3i͚5=,cJ;r`u] 0Ug*R~s̙SN>}ba" 6hР(ԩSju+bXg*X=o>0 TQ3o޽Ю];Za(sυa5x7n\K`XgaJ0ח矕Ul)$u1&&&u1 Sɱ0WvvWSSS7o=\_qqqojNjժXg !ԱcG۷2eJ+bJ` anݺ0|P0LU<O6lc:4!!AoPȔO?U.̞=;Ե0 ÔmNܹ%K|>߀ƌR۶mC]]h\t"룣C]T={4 ={a#FXrw}g c~^:EQziӦ Za†C瞋=zt );Z_uEܹsC]0-ҥKRRRlO>j@xxԯ_?%!DEO BHP0Lpl >on";w,v,_l6T*AAP/RbTl &jժ[<xRlll=z=;4lذK[f̘)k7 <䓗.]R&&&VѿhNZN_9N7o^a,ߤԩӦM+W*Wn1c(wSJJrGDDD׮]C]0eao^?rW^Ud?i)9|wj׮Z) k75eӋ/gnoFƍ{B6DS0`ac̍r$Ic !!aڵ7: b ֱcǎ; *'Lڴi={sss7ncE^ziP0 k k͜93++K+>}ƍ>|8%%%Ե3 3Ň~تUvڵo>55;uELE/ VIII;ǍWNPW0LkBlnݺr""@yy{ FcǎL Xgx u9LE23fhٲelllw2d < 0M}ܾٳgEѿ|M%0f̘Ǝk2B]SڵkW_%$$q#G=\e௻K.F*ʕ+޽{+T1I9O{cvl;u >uկ_} u!LȰ07!o~X߿͚5C]N[?*a"Xz4.]DEEac 9x`޽ǍBa*MAAP&b9sJ$I:uԩSbRa j#G ubܸqJC"a*6D0!6\V֭lXgHLLlӦ `.]rXgX,ode@3Lhu]wu=B$; ?n:9dYnԨ[aB5xa*ٳg- ,` 2LH!za*N{wW!0<0`ZB*JV \[T=F#`۶m'0Ue;vݔ$uQL%v+W^z][Tjj1c~7|3όa.o<ϟ?۶m[z!J꺘@V JOLL|Kw߽dɒzan<6D˨U4bɒ%3O>>(ԪUE%QFuԹ;CJc V2k֬:u@5[0#Bǎ9[~O[vw0!o1F5j#<ҰaPRM8"Lz܋?CPW0L` c}'5[7FDDȱvڱ('O~衇N(!z_b a3͏>zP0LUD($IJ6 !2I>PVVfSn,5 r<M)%h4^꺘kq=Zjݺu;v u- T]2-!@`>86[FaX,KxxxTTԒ%KB]sAܹ}B]0Uc =5%%婧 uQ̵{gB]0UcC{fj*WPWt,YqPJ׬YanWcǎ)֪UI&.VqG_Oa&6D_09.\XlZS~Fjڴ7|an%l qO#7nZnm3gСf90 JX.z٥KVBnm۷7L.wlyau<;V?KO?96mڜ?>---%% an[ _|J),g.HիW2dH`{,33m۶'O~')v߳gx {dbbb9*M6[nwy'1Lpk|VcPF˝;w uE S% nZ ݺuu9 j?ܹsC]Tt:뮻X.ܜڷow.a[{b˖-cƌ5j|s),5k_e&$,K۶m{B >::w-[t%c T bBRIRSS6lꢘ[kj >,,l̘1Fu]?rYf <y ,_<1:u7AY+Iɓ''&&.n}ńn`0~_n֬|gn~ժUYhт ,X_O0[e؂/f̘1֭~8T*͚5]ɓ'###.]r:t8;l[xbs=.Q?2M%==駟իWϞ={ٯ_?8p`N~ڵ u sT?to=ԅTBCMMM]`A a;tеk׮]v955ҥK.bn:p?X0eJըQf͚FA*bϞ=.rnݺuǎC]sDQܿnW.X ...EU+VťGDDt]^zgB*6xJ*>(%T6;wܲeϱ,ժU~CP۷=z&|rrr&MBT>0aB7Ne6x3f8q_u]޻|cǎuڵe˖~*믿o?ԅ0L(07]^ؠAd7mڴP?~zv5SUIv sYbFQ.?7;O 0~n۶mNuݺu S)cǎA,IҽۦM >}zzzߴÙF$8p ;̙3CL={(KQJW^Cŋ֭땫NѣGH܄*Eqƌ{SNEgM{UWtĉC qTŅ V SUҥK;ު.+VZYfxuȑ~f sC*?_Ν;WTc+<ԩo߾}˖-[n*HIDAT={ WW\8{PW0PoPzVZ@5*V˄ nSkٲ`ܸqlVZz+U #FP. :4Ե0LT%|͚5+<|رʅ~EmڴQv7klȐ!76r_u- S9UƍׯK.cǎU} S7o^lll&MjժDDD|駯Z; anUk4իWu~EZ_xqH;\&Mn:U0LUg!߉8uP sڷo2c a[kڴJB)N중 S5 DQxanu ̙3Gl6Ywg-xaBロ3g 2Bh͚5%֢ECX"&&ƿ0A0L]\ݰaCлuaŊ7ou s t8Ib$IW^jjjb_[hQnݜY٦WN0x`4z|fWE>{Erxxʕ+C]TuG߼^>?C:tРA7x#2-N ܽWF;"wn2z@O1wmP0*SRR4h\޹sga;v4 BǎM&`c[Lm OO) u9Lo߾.^8~G(""7_{RSSu:pa ڴi3xw}WjTe 2… ;tPTTTbL aRE'lNMMԩSr!8e ЫWO>VZ$=.hڴ޽{C]ܒ<m۶-GU^䔔vʤO>=(ڵ{C]sV u sK j;mڴB]S~.aڴiK/)5kVVPWT-ZԬYW^.aT}cܮ]0^矇P4X;A&&&5=駟#%WE/K !(Nu!u6juօ"an/KJJzz)#<Ҙ~PWqꫯ~GӸqP0̍/&Lu s]GGGanw(ǡB$IZxq-B]sFy+ԅ0 s1MKKS{ҒwRXg^U־}PWT>}oXgy`0.an3߿ǎ7m԰aN:h4→V2l0)?6Ɏ)UBBB˖-u:Z.]p\OW-fٲeEIeYnݺ9,jƌFфiUEcǎ]r jԨѼyP0-5fWL?yBqmذo߾m۶ u- b}e_/wM%ܢnz曡.a[kM֭U.](2#GƆ aB vU.5ʦVZʘba[~ 0:Ph6MfV[Y>JhРAK,Q&eanu2wU:W%-Zڵk aa*pJ1yId*#223J{kg}a B܂Ǩ3 0MPbw D2&ٱ0 075$#"J }SJ{k 0 sS$"@@ATG@zZ.Q3 0M㸦"@.d|2<0 (PJ)YWS-t0 0k 0 S 0 0k S< IIIguQ Äk Sddd]tVZO?tb&XgJW_5GuE Äk S,[yРA.a` rOшt-EU6m$$$CB] 0!zt<^ѝ7߄?3aXg໾w}%Ʉ ڝm&66ãsH\\\I&::G^z3k֬ɩgϞRym}Gð'OHHHllCf6l/CBB::#%..=zta7?<<<&L/2Mӟ}YGgxZF~aVVO?`։xD"QGeر3lذq=^1 B$EDDttF0 \pǰǞsa<D?cJJ +&iȐ!.aXW?j5a] T$9sfppwt0 ðOy晧̙0 f8?FvժUa=pr9r9223apryxxlٲ0 SO.JR::a0 ð._c]\VVVvv6EQBP(|;:Sas8c]T*駟ܹ)Hp0I#::a౮^'D"I& :t; ðXWf@dd;aXXؾ}RiG0<uMVoܸ3aapǺ]v9;;wtF0 : ~뚢:: a _caXx 0 { @@Ɔ&K0 8cX!דBeO. Mlo!HeYm/#b ˰0 Oƌ{ zj<bQ'1u:n޽|Y*)+gdccJKKSNeee:uܹsr|钥 At.UUUK , @/\p5//?`ؿH$<2kQZ^J (\aO;ǏxVTT=`k+kU>{ p]ZyizȑÆJ]Bheej?x)S{7oxz{JDR?NR_t)҉'h-w 464(]@yv}䩖ggBĠ);9ڨi#(ؽgѣG*TjD,YzuFFɓ']-۹36oٜu9O/ϻw:\YU?U骴1oPD2gKw׳Μ ),*ܕܹsR;\.7]ġRTn*Ht={"3PӧKkѵ8;9[筛vrL&7 8{I^ݕZ5\nmc}}]|Ef'9Xx=; :99^ɽ~yAVVVq]$ /!d2uiY`4676W4i̕$#=ϿNzEH( H$IiP((?/--]tAgB(BP(i$I (|(7AE?g ~&M[r"iR i]hi|MFy|n- O94/˼^APdl[IhH`.Xm֚רI4e4o "KS4ER|S0g>`)ZreΕ>疥D$MBZHDHT"MBвxy0'H@²nP4Z,/UTWuZZݽ{w++"##e2$ AZjLիs.P4 )M 1^kᐤeby ݂ܲ$HZDM-5g%IS4_W 4Mo,l-Jrskǧl^vW$6BmkhnRQQZj=BP,+e! IU*(pss{(E i>{o͙'IR@ I53 vիWSK/{S~ˑ#Զhsnټ%r!AgΜjWgΞA8R<ܒs.-۶8ys㦍F!-طw_T6ߠvS{zBX80 sц٧3ҏf8N$ m`}]Zv:jJ Cw$9r@ځUV&6$ c'}7.\lx(//_|9ERaO|ڽP!_vd*-.]|ĪqْeU55!!uu_5EQr.Zƍ6n ͷ ɯN3khyw_=<<_+$Ϟ;۷OO>peׯ^ʤ$Jvl1_x#Ǐ4i]ʹj^|ůB,Qs.XZ|MFukewyǼ^ώ{6 $ ~~g6 6;uZ`=tааֿ+=+3gLIIٱsh2_h\\\>/7ަ!6l8qܐC%%%|A\\"޼q1O#}';C'MXwk\v޼y"D {ڴeƌnn?/t麦_y}ݙ2?c/%?/r튃ǟ|,w5-\0TVotzFz։,ĞK4q]v2 sꕤ`elݺuΜҷY#O}m۷ ȨW_z5%%ûlŪrYg V3225LڕkL_u obq֩}r%//o ʾU``+N9 8qO~*ݻ322LFdKf}<+ $wrpp6hXM]Mơ Q?tW^}ʕ+V*,uws<bxϘ|h4֯;~Qg$ѣGWX5iCC^ʲe**+<= 5->}ޫWG[Z^Vk .w|{Mc8 ç Ewʊ^y{ƋDzMƤw6nzo{3M[6==iQj'}_}Xnͫׯ.ς=znOާwz>##G4XUUUך\\p9A]3>1icbBbdd'>ILL\r-SX?P[U'3 ¦ƦӧO~fo_ ,^gؾ"h>fYnӼ|RSS*/^٧$TWnڶeY`ΎN8sson۵z~qqksל_Ogd̟7+׬,(3;wTTiӇ ȹ39;{`ußNڔ4{y9˗/l2Ht 퀹cǏMޕ<6z{y7E?ܽSVyxe|Oʞ e;EwyQ)))?ٹ11I7P1 sn~'O~5_=?nMVjk.(Hҋ/ڹߞ鲒2^}6ǮXAʿ&iʹO7^}l]w_e^~nan1rf͜ݷ%oN{mE**--m垞Oy?gܬgI=o޼Y[S{+V/\O=42"V"_o_{=BH,V   onif9eYst$O tQq7+jO(S! 0x`nݶ%o پ}{ܔ_Rf}:mJR*&Kw^t!} 8ckjko7=!w N ˘Bt7 Fxu-c1b##~:I݂0<,4Mih470+ո֯_#eǘc&$o2O* kzٵ,ۺB 𱷷ooܺw~Ŧ_RB.eeeׯ^//+ok;Y[B/_L%YӬkZfձ#ǾkPd#F~=\thlGEG75lLژw5h4vNd=&d2LZ1ݳ7@БC .:|IyIEe^?0d/],(.sqv1|\L ʶob_CB׬^ ۭ[7Vv:UPg\\\n߹]T\ګ$!sAwqs ?M(X٘.]P(ީ=v8+UCme:OvC DkԮ^]~eˇ,b6z`SSP e7n31rʢnzIN{m$^ǯ\RVVz0A[eo4`PDa>mv}?.qݚu$I677/^^98k=ׇߴh4 (@ˏɨtS޻\o.^}6?s pj 4a Iዝ4)eoqGGK )^obLBT*=~(u_Ӧ()UB 6s4 -ږ]Ao@O,rO2eH?`R뭬u6IA$GwX,(ɹ FHeY /)@ 6hڵ^^M"I&00p1lm]g$F P(kΠ$]49Cyxx̙;fҥ,|U@Aiш$"Doo@ྪ"^g4meYϿ݈) ͳY H 83 !)lnig- $V`0-7eHl%F :+UVb˧6BP9!g8^ݸa|]ZRzA!@  !D!ğ bh0f^o!DԬiۈe2e zZlmcل/s~ M0xN,^8(0d2 d @pU~I{[66&MBG1B5`$2$" 8θsё hyq$"XTX9 )r{S80cT@ Hh4Ьkkjng&i҈CA0$E3ogΜYr_5+3wεrrrZ#E hP`ȈHcE ~)ֶFEj+eF BآmCE@"(HQrwe&L!^/ @5o) I~z3c?Y>HӴܑ$kd!MuMRk!-3nZʱT*ݽg7 [nJ@!H!iekշW~!HgcBA͛C(]gzѴf;{ &bGGƍ%^^#5 ( E_^{v﩯TTu 2B'eennEE" Rp_y7o`4"_n4k FCd4A:99޸+WQQSZZZZ-:F's>H&qtUpWWW'zM^&A$P,8x`_~eiYqvvR6ҧ?uVLfkckcmΟ@FSj"#JҤ"p\.Z;3@Z[[k47nݔ;ʭd2^tQ>=k3ac8!8Nr ES=UnKnO^X/H[8dB&>F?go7O8U]]`bM,pɔjliѳGgOTfy2s.$$&HqqqSN/CA[4!AϞ?Pkju^10 @ g,$ @!?uh+l%hll?7XA~AjZ3gFrJoK^0iКSUTV~`mk?=yŋ2G̏gA!ts 8uXc~?7e/(,4z!8kmg88ıU6o g6dv3 C!<"-gϟiX=}[?|êʪM6!**:"SB 6Rt(`Zơ?݂0eg ˰"Lɟٸa ~ ¡Ç>8iCRYyYzF1#XevSoٲ%<x"Plog#j׎]׭/-*+ϋ~Ͽcོݻ;'<95-)g';+Iޝ>++K^^!!N$It8IӴ߆va4b۴9S_{%?/u:6&$Ҳ={L` I,qɛ7o6ir*FM9y=isA; zvܳc5vA<|p̘1Q='mN*-+MLH  IR.4hx:~05<,p-۶@JmxC}׮[[]Uv0m󓼼2f&HitR?1 zhZP*caemU8) *wo[[[Z}QӢJ''^xA* hgQqΠ?v|@`ڳݝǢ7茺H\WWW\T|7`o_ 0aʊJ777777ww+#"  Tw ]\<3FDs}MT*KJJe;;;{xzzܸqnJ2~G*))߻w*wUBkkgP$Djhhh48*]o޺VGQ__,؄w&'J3}0kNy=ɦY36Fݝ[G-rj YUj}3a̙eVTVtZ?}~ q`YZ {c r.4AϘI|<}qiN~ p6i:tsf(-WG[6o៲~03ی$YRRRaqfyw=dr5o]y~іIUT642(uw+VTL>ok3D Ǭhiн]\\jkk4MZ>YnXVa.64ob lY]TEW9'99RΥٳg Dur6 :betp"ÌXCvUb)7?쳫֬Ra-nNz.j(@ݕ {6WǏ/ۭ״IwlS B)F& [[C釒'ϝ=%?tEn5ٶ_^I,"͟?ZiOB{W釟]'D<$߻Xc!RFi6 ?|CuuMtRDW!L!CU,-U"{hScQ_VkbϷ~~@vSt}g-Oh(sB?9%qj ~~~|0B @QMsϙuqbb$7 cFL?FY# K/޹.i݌Og0&E?0ྞu9 A\le$aܧB :z$!-y1J*_?!!)))+3ˋ{{>o= M]U2,8$Y?`0#ή Tvz bbb"Idcc_CO^RZy@~\~΢9J9uljIʙݝrR:6 a]y $Jޅτ:Bꛫ?(w 9}F$^t`4US/m fh,8p/8^q^$xظuECSCb 0 B`wUߙi zccl9{lP2DSW )Z!L8ca ǙZ"4 T_榴 lnU9!h?X $'$0 0 78>62B™nJE?'O4666k_{%&1 0 p5RkˍIENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph.html000066400000000000000000000053451222557406400236060ustar00rootroot00000000000000 Engauge Digitizer - Manual Line Graph Tutorial


    Manually Digitizing A Line Graph Image

    The following steps manually digitize a linear cartesian graph with one curve. These steps are essentially the same as the steps involved in manually digitizing a point graph.

    • Import the testcase.png case from the Samples directory, using File/Import as shown. Not shown are the other methods of importing: using the "-import" command line option, by copying and pasting, and by dragging and dropping

    • Click on the Axes Point button before entering axes points. These will define the coordinate system

    • Click on one of the axes to add the first axes point, then enter its graph coordinates

    • Click on one of the axes to add the second axes point, then enter its graph coordinates

    • Click on one of the axes to add the third axes point, then enter its graph coordinates

    • Click on the Curve Points button before entering curve points. These will contain the digitized graph data

    • Click on the curve to add a curve point. Repeat until the graph is covered with a sufficient number of curve points. If this step is too slow and tedious, you can first automatically digitize entire segments at a time using segment fill

    • Export the curve points into a tabular text file using the File/Export As menu option as shown. Not shown are the other methods of exporting the curve points from the curve geometry window: copying and pasting, and dragging and dropping

    engauge-digitizer-5.2/usermanual/tutormanlinegraph1.png000066400000000000000000001355771222557406400235220ustar00rootroot00000000000000PNG  IHDR zw pHYs  @AIDATx}w#M^nwC$I _BKJB~m/Ӥ9ﭯg?|vuHzfptuuqTQEUTQEġ뮻>Xrgp%AX(f& ]EUT A24Pvۭ Pk}zo6nS((|ڕwygަ(X3Տ+|v$'dGyvmv:=G L*aK%_S2ч*ULR֯7D%O:oPȤ`l5TԟmFB_C.zˏ'Yސ$ͷ_;arWÝyGN9石j+;x䁕+V/Z n8(Ԗ Ljwϥ+;^$8SJFQI>8Gfql66]m#G&7c%lg?](h'q.}f3 p`t|0&LQD{4"Ad}qbyZ͘ۆ}M4բd F㋝֌jC kbةXFK-%s9XαlF_E 0$TjgAE_f|>>ebusтN ."At̟WfQ;碭MpE"ED\4b0|a)E.*zWbq-S<̅lmgwJ.\IpBo k?nf{x\T^}qÅ,cj'E&/ZHCUKäo=O]R+DIH)%hS%8 HD!mև(˒Kq %s.Q R3ƸHhc ;o#*W0dQ6mK$)"D`" jw}_$ǫD͸m0BN8J0lbïT D%ү ʶi2dsB T(\P-0J+Z@IkB.-ue9c64c UCɬB1E"+X٣zU2E{*P6N{cqLkSI,Ja~ɯbZ*-cnR%bj+6mZv K*բ}Buɘբ/oW:35D\dbw&m5vŭ`nr%bz%H6G-BV \٣xj>\ejїTd)f|2Ch1 )AKxXK8mXdhsZO+2z36 -[d,B>4O;9+TI洹*0>ɫbVm+TbJ9/P6Gl,">ؖa`f, arag?^}4MvE!h3SIjSp1`n2U1${-."ns\ QVj≹h4b8R\BrBQ(ԛhcĆCqkKC/e.|*fk⃱\\ysNS(4F ɧb\8bѦQ*k|,Z~ܚiї~F ":Y KsZ+e8!HDdB˶ @$J)eIV%Be*R]$j`5(Z% ]US4"ˢ((ǟ 9o LdPСxxNS?rWX#lWQ3}m-3~g0`N7lqO}ZEapP<,Y\gt1&uM}XzA5Uho]U?ε51Qy8hzݬ&8e5EY2+dM)@4d*3 ig?UDVa񤨙hyMNf5@A >> ѾA1"L)@]Ȕ~+䧝}TQX]Ri1jd59FS y$hbGb XC e|uFQR4"z-y!%MX5푻Ze 6Z댂.%R$ i{u+6m:m5L.∆ U]#6H{ EMCsQD 8\8b{͢c5t['"%j%4׍"Knf2\8+vEK1\tRյ\P3EQ\8o<H!bVkEw?.ֈͪ Ѿ8|.y$VfhLv~E{{)WWԣأkȔLUTmj $*٢-[2"+Bo93?]M?v׽ψ\L{|~ښc>o[Ww;oqD&?8sŭ\q?/~8N^?B ix}7 n)%$΋ULb$.Rbvd"%Y ӶmF ٜѲYhtsV%* ")MݰEݒRٜES΋'6tM_>+]K| ?̲B4 RqKɮt;{oAs?lOw=C.IHQJ% Tu)Zkj6Agqv[gnlYs{D7x[7n1748l{_>,$IUlE}vo? %aN%T^ڈbH>!>行Z{`9+FK-l#K2WuJY>"vz#ry3B}T0;K|A{ lj剴Ȣi %-Eaӏ.j γ3}F,t&y7|δ3<.nmxw~r<+ֺK/ ~. RP\H$+fZ48[k"{.lew(z`S"@ow>{46O]T,՞s"-/JY?;ދ<n[%oE prGfS׾矹[sO{nU2+ꎾz;/\f:;l-uv;oђŻg. 55Qa}sր>tjbk.Oшߖ% REda4٬7C)d>bbIWm}pڀ&f=15Zo i$hKf zFL ۴OҠQ ZkwA71DQC[-`(MA QlG؜胦cFBHn AV3HEZtv mv2TFC68ze駶f;BH#!eat@71kӇkօl1^1MmA(.b  WrAo?Al'RHu #\y5\(2Gq<Au ֍梵1 sQ!vfKZ\5\8PFC6bh.r)pX..|kQbIs_c5\:8\4: ̢t`ElOo)P J6e&ے-R*ڢE-Q)A(qSBWOJçC"Dqd "IcN$Z|ݮPBKH@lynE(c̥Ȣ(w^|D)'67 vq3opVklK;>k׻-n3zbq%%_Yד_qvMx.ɳ-_O {Ak_}矽om^zm;eL ™Q  Bh+铎^{c7{nw˵z <|#%n>Ϳmuh]Sr/vj;p/W߿xws-n/q3矾`~"%ݟϧ3ٚi-5n[Jyfۊ+W8 udv=w? ١.LVfnS[t9m텮1R jPUt W@0+Wr6 @>CЍH1"VFtXbC)DPtBJPQ"G{'< [t؎nX&k!F]Ta*$̜+!LiB"Mۊe+HьN0:2H C_E]+W`,]IĔFC/! ]G<>:UԄe+JތGs-R)dF RF4fЦPD5Vp!@$.FĶbjYE&B .4 % BUPܰ6@kZ\"梥KW s Dc-y$S Z00BJp1흰m4#C:D=}𩨏Ec 8"~|GA(Sb,gpP7X!JX  >^ Յp+;a55L!Q@}BAX >]*#BH0F4 *bU?~x%Ta,! ZR4Fb].,׍`(#F{? GЏ3h*"1 EnxJH^'E z.n͠M@^ 9UpbI;P<Ţ<+p1Lq|^.BVŮ" k4 .:ŎÅbY;쵹L%rⓕk(.sQtVr6e.%m,v3i.A|.HxͰzshg' DD>lEW$*1$a/%"0|"KrF*Dol4XLs<! ̼‹T.'O<~K]3&"YD*w9E$Y_8oV4mS%@IJ& .zEI8RVM zMeB(½`6nm>jۣNVllؒ[%bp@! Ί ,+ҩtt}i z*5-@W^vCd8'6#6@ 2m)tM ibP#,n[H\q\~eD0z[-\(BWw/Llcm촟W vqhD<6KV$ֈB,#n h">MC[+2Ihm/ T*zfrtt#KD|dRHRBlG7| "hjF"fHeV:bO6>7hG,CniE$Ҩ CF}}8jCڌ\zxиDpGBcHQpAЅn@ctXfdbb`\8\)_ .`yX5VU!MP#\ПDM*x\8pEKtZ\:\"G:J.:G06R!օnHqas8\Hz1ĔV'b㦯q.d5\47CS 4TܢD'=6Wt|ձ\ODcݔ/u䷍!SH\S.L%2NB z>[U(r+V>r%KD"܂]ES \q})lːEQ,),FQ Te4ٲUk<#v^%2^ΥVsi~qȂ dy;_z،o@Y۷ZiĠQb: Av[C wGy;~}PvF"& I:LwZBiN9s?dEwov-oiM~5w%PT D_٫I~[ PR]u W񒡇`Ʋ[<|{OObzO S* A4CVPA6 iBOkP0B Յ8@0]aZ2 Q AUclM}0tmEgZ눥B{"AC~:f4a(Ta x\b^:浢}ڢJ#⃨=IB]+`?ՈX,ð$.hfج1 VP*aj-R h$!6f ͣ$nx舁qlڈ=VZ HhCQPƊa.>p^ 7T7:c\6ED0=q X&B(&S.GE`-. VpQXV(f fɡ> ̅=ż)XCZJC>4M#\X&ET@ y|.ȖH"cZ=y*8Tusa!A.J. &X9)Xafͣ% 7IDXK6a%f={z#-S ́IL[Hm(,3,jQA~G]l܃+>((©s0" 2̙)v>Mim6 RQڀHlR޻-#9uOYtn-dݝ'|M/E;͹;(t%O%;fJgr;-{ov_ix,}0{(n镟WnS=uElgvD4Dg%kMd]P"O/Y,vǍgF˴f6t^ۿ=˾[J7co9oϊ'+2VdZjJmyWpiq$;3wυ1Vc~sMe;ab v3Ip^:XS` p9L5GXw >Ob!:!lZ>Y)lY'B,Bra/{"!e!lf#>\Տb>00|.l)ux9Φճajh C{hh&|\c5lu/X^C|2::!۬ajh!2Fo< `Epk?X^blE7J9Y.x.>] AgAD6M#+!lF#>Z shTC,EYrXqVpP2 ͬ_Cq G>i%O5\,+sBbm.BX6mks10| ;lJ >]668j<[`2M#\^E5\qh2e.5\D*X KcaCv".QVE\\(hpp5\4F?n5\g3Y;Z"w >{\z/C!o <'xKp'6p>rd܉v;$KX4DA,Zg5aCx.Fo @!a .]]QF*۲IMETD*ڢ- 2w~IgBHEc>OS=2:{zle-oS5E(ֲi'RR] *!/~s@H )hcΖX:#50f,DpF(h҆ϢP[XA!"}1%CЯ)n!?)6mX"y9LfdžhRdJk#Pjr:Oe9SB>zgu&h'hc* kxBzπt#Ի$Ey'3Rc1+?5bf_\6E*IϏ4nkca.E*yLe4k-B>ͣx,ţX6-qae.(L%cP+ kp(M_e.ֈE`bhʣ!b6FXU#/d¡x>*Iۇ).spb<.fDjpjb.Rjvk]n/lf;3fR>U$"8? g&7XHq%QbTD"r ]3 TdYTJ zI qRNn`L"se{_yp?sC=;*6eeU|z2y'->};t" ל|YS2rkfc kI@euxr%Sla*㲡$InRjfQ+V +,Kj?x72$+̞6uڵ_xek=#c^/ڟGc!˲04M\ve6.%hFuW7[o~|~4 n niT <+Jl&[ԊߞK/tzKZi|*7?]raEx5]U'@/QTǞJjJVT%u=w+F- ?\NEA_{ڈrXkkkGGG0 sC7H%A2LCBPa8B<> \˹_mY(LgbѶ`.#O'2_df͙Ϙ1Y᜛iEQm |-J;'iS]Knv< ;q9劬pp˲t]rBeChQEA4L1f眒ጻ 9v-qQKO>--_u]o$ك $\ ].mN{*`u]/,(Ṯd2ϧR)JiP hoval,~3 Ø;wVT^n"Q~hGR|E{/*˙|F K!<#}^&zR<JhI{f;o믿Rx{}T*=[ne8w?{;ol岦E}ᇍ >yq.Yw~5Ms~AӴ^{m…ftMZ_yP(hLvie]}??^|G]wu/ҒϖA]hԩX657MôL @ 7ﶻēNMG?J'xRQ^|a:?בMgj=xwϷa6ulD) p}J<IefΘʫwXlM%駟}.\xءzxegzVUՀ?{]gҙ=#~wA?h-7kﲸn.rM@8DIUhMy%롂Vn*" /|z٧l=ϗCTQ7 q 8Ϭ3<ÉDbܹwuW6+Vx饗J*'vB.o۱k˿*1: `7j]HRwz?G /{7r3 Kv>}U {s8j2P 7#~rVuws{W_{uǭw>^V =pg;oO_|6cm2s|K/~EA<?]sfnVWSkVw҅Xos9s>E/pӅ]}Y5u̘ !^{nim9vq筷z݃ ˮs?^(>|_Wcx_r%y?'t_+/n{|_zRYq-ۮ\|g;\0we[˖.9c^=s!KQGuC;Ck뎟sW2K䐃 ;~bԪ@ c7/<c["}>ߔ)[_[A;`j8Uݲ(;7^V9<}u{Ԍ7Ĩ/_|Xp0.h̙wSO=u=マ>h*[y"q=FpZK[neםw=)guVY!! 9_]_s~'r/:"d fEQlseB%w~:ERBЧ}T}}OrO`rj7y)-lɷmIeKlV*H $^(_sŋ.QG<@C:PC~H%GvU^xgٟKϽt7xeob0qɅ\y啎('s#f|tE454_ ?-w_W~Ƕ7x睯_q zív[T(>Ygp_ b5d̛3i,K^+n7ޫ͚6nfכڗ_s5_tG.{ vgsGbC?Z5oySOጏmG.Զx_y{ղU'=zJw<$J>Ȝy{쾇@_z*i%TQa!նq?C]9 f Δ2 N:/~qg2Qqe"as{ʋO^LD,Cuivɧ@{WWWGXYBaUUAӻj٪i.c9Y`lVvLֲ-GE >ouU^\u i o ;EzСG}}7{7vWԊlPsH`YW_$' 18mJ|TK'to\,2z{z\zxyfMt44R*+Mg{|dom7wqw #b!rZ0M4]m4= zN:>oء }{u[=t3>3~c68e<O~XUJ <1kd*ϞxKW,}wkߟv f0g?8!nqW_? ϻp01;75GfMcFF/tBвe˂ !ĶB0}B0ڂ $cT*}o~3vMEp+bΜ9acOe+ |㗒V4JQF]r-hkioޫzѣ;+r؜sW\[0ѧ_zx,9iR(f3Οy‘zIe.Lh/BSfO{ EIjjk.+/r9?;g͍-Zbuk5O՘v}Zk}'Z~|]@ۯ ˶4S+Edt_`M6/Os$y=_zDap`{Fs=._mR~;VXzi3;ӦO6=؉?>n(K8l:.]l3/<{p k`0#l-N?}[m}ՕW=Sdnꚡ+B9(|v3\ɜoF(}M,=> v>?\ir-խ&|1ł-Zv8WQW&.k:v4m" hyP(F(>3avw_s5'tRT:c'=wdXQSiR'j`:NZje./ï(X쨣 /Rw_w>>cC<_v]wiA_m`7ˁ8֤p 'Gy 'p202gyom7wY|%-q}ܷMPr#Mqo]w5 )o~[ w[*--s YJәLq& ⩧zGJ o/{ྙT 9_3~zOj x䟟lڦ^W/\Qk 8~p~_Hti͝x.}u/]}{.k]zs, _b'}^_**rRmٛm#~pDQ+Λ?`ΞNt:QeeA?>'[:I?g}B`rUE/ \,jf[<( ^fv>O$55't 7W~ѹ%IYy%hE3MsDWQBQI>N1&˲,Paxb!)g@ 0ʂVB/JratZeW@ onn>ǝX?qI_0Qʕ\}9B($148ٵV[%S5(gLer+W ElsSmL&;:!h@_W_ck#bHyw7bRL%3,ڜN䴩dQZJi(3UUsl()n[0G664T*eFKsdHM$twy'Kf˗3P(}Fci8P,BLۤ_q+|6vMMM;/P">}eg͞eFWg׬ٳn}v[ҖiutuljpB,w>S3VaVݪOohkp۶Q0>ӦM=o[onY@mij)饾>۲UiilawC`(MuݲƪD$QJ&MmMN|hbd2miӧNOgӖel!Gkkn.UQmm"p?]s\.+JRɶmIZZc~l1EA$ ;c2e_:3zzz!+~eJ%YeY`[6IS]y:ߟeUW\n[}>_6\չ❺MMM\.s/.rSԚHMW{,'rc?6jlc~6Z4f2Shin1vs뺳0<[&sUUC۶sٜ(Zg VDZ_~QŻ.}rOo1?j t: !ZQ2eJ"#3BBι1 f-[F]'g!F9c,΄!\VƆƒVjnn.Ɔ\.>gz*Y /||L65ι~Bȟ/.;yKS Nt߻KZ756隮3ffuuu~?ID)63ٌtPPJ9%=[n6555xZrݜ[j566iq**dxq}*QJwy纫PrЍt&^>;S:z0MSuMӜ[v'd=sfzUں=v1"D3 p{ݚ)"!侻SKR6uQr).K^&l6umˮ d[y8l\(wGo2uLZVfkcgʎWUYL=lDA\cJt; DDWQWI$r&7Ĺ@5M;ÏP[dC~.zM_G7}g8( c-wxz[DŽɉ1tIZGto"QP]DbI/U~}&nUubXJ6eYy}' \qA_ʫ裏?3gΔ)Om{Yc8xluui55SMb-x UQiͣz@8~׎;V0#Г~r%]iZ5RU|N7W-I$I~[mաݽ{յWHpu][Ԫiy0 s񮋽A IcOcDQ:O]zx01oD"Uw_R%B URGZ9ȾC,fգ7xn '/ZKUG";&ɉ6z뭱oƛoL˖-rՃ* #w7ݜΤ-7( ~'B>S<[7!t[~G#G wa'Drb᝷(α{'~\P*F2(:qMԹ+1OEQaS e9O·5.P PFt:ߝ:&smZi[n{W&Ky_V<6[o|%ȥr?8ʢkn~zO_G gB,ʎƑ"A_rg}9G$Uzn{EQKHPi|&I\R"D o ge~Hs/ }e9I^z-t<-6%$l1+ix<.̈́sɥ,tO<C+id̅m6+=UU LyJ)bQUUEVȿ Omkni.$f2R4nP([-b*#k)u 6pw/8;OT2R]'%] %| '_7y9>%۱ rZy_OMiCcaY&s69'S+ݪ;{<_0 ǛJ;5W_ Y~j]v`0c$r*k4_&Sry%aLf:7N~_m0~ ycG󞣎9+/Wz]n^|_nsў?u7x G?3y )DY-w(څ >?_sgyͷ%g{Yy 0FĈoy&dJ$е~lɬxlqE?'3`1+Z-c#nVB%>44$K2%t8 Άx{ṧ(248dP:>iʒlFY]1KR d3x<=}=\.d]1ڙιs5kouo$Q@(Kh˭?;n~Emmϻ[>蓋-Zl( hiid2lc̥DA4-s='kGq1ͬ $̈́i5M5[mշֳO?`=[u98ANlniko>;n+7u\8aš&٣ˊƛotvu:%lIk[k:%i,mlnm4UQ?^L Zٖbxی`lmX|i.ٕK.KuMdMSQe+ɒ<pP&H%&4. y̝ww}wd2;KdZG6nۭO=8gqV';r-D:nnU.f78U1?s,OWz;)!DUB+<䓕'J wۍṀ S[&3I|0p8p['F0| !^$ h3mm;[l^>*,ְvr@U^Zܚ6u:L&c[c=g-#  !İ )yogFԴi3PŌ$Hy&Z_ |5fȂL eDWg6%1mڶe767B86iOo/K.i"R8Mni3._jis7M㱸n%}sPH`u3}=}V\^?G8뮿@l0V-=ILw&L Q.A`Ö 0*HD90%H ll#\>rS׳>ŗ'n8x|׫({V".rI+!ƅSmqk;,M:uT0R>{cVgg'"ƙ sM믺_@%mZ뻵u6* 3,&>C3bhֺNѰŲ-խΛ;ﭷߚ7oަ6 Ʋ ٝ"8+Q f!}.ʦN9ʺuu>3sQj![J 4`L j 0iD&L Z., krG0"ˍ';^WWދbE6}rJ'*/~=wL6iaz3r^6Z#M$ 79t4OkM}y P Ja!C9y_ӁmRQ:r\((}eY(1Ej#L&md&s+nǮ2t2 ݈F{{cySeE{F"x.pB \ǘEbx%rN&HCY3g\x΅v]/:5Cqю{v[nlyP_٭ly__\ߋbevL:u٧罿?n  2dURϡm$@1Z &39K,Gmθ$B,M<; (.UF 56+Z^FEYqw@#vC@a i% +ʢi"{UU]bs1V{lJP,nC` 섊k! ^ y?W\|ŪUO=SO>{o3inhrB`.uވ0t ֨U<_دU/CH ~gEmǪK߿λ\ݾ:14{gwvwy Q"|P|ߏ9㺭|kMl l;Jؠ5m1fD)~B8$^+jP4D( a_FZ} s.ʢP)sʉg:Q? TO(.EQ5dVMһF!D#y[o}!!qݞyh}7͝;;| `u G{ON:י^W[ɜMXYڂ Z~g>oЊt,=s̚H /rOv ƚv3drw#|\ Ny@ (.ER$Qyp znp,ٿqc. _̧Sx"d\.D}ׁ1U4čy#?g R&1iZ;fNwTy6*O+;V*{EkK/3Ƹ͇*8q(P^>h3ש?"׻ @ubt?MlnSBIW&;x8s _ TW"J7ŗ_|xͷ??ct۝vmH8rU˼d.Yy믽~ٕ=Smݫ/;r- |8S*#QmC[Yqb+p.z `?xYF}GuwJ˔뮿nm^bO|X,N^`PBfZQKR,LƙG)4^b4&/oлyJȊkJL:S(&?l,mdT9 TSʩsvm-/ur>Q'{VI҅\:98A$i˵{4L&;Ktmgz_=ث&. d=D᭷J'p;ϻ<۶EIq`lb;ovy<@ w=^|n;9\ْus4{imVzOX* xlqoO>mێ3es65swd&wsΝHהl"{_$a_LH͚9. 7wny'oZPB6/W 0l5P?9'R8F9&g}V(,, |ĥD,N%եʒ ]mŽ IJ!#˯=s3R:vve']5xC:tsƟ|IscKi'NmZ QvɦjLV>7aeZm| H )Ws.{%{G}ݟ{p̊l(3TL)bA˰aS,hƌ6 +5Kfg{=R:m4 b$H^44 KX?>O_1ciZlW?Ͽ#"H{W|M߻b QN3p8iReF#b uMus:a\+1lOa#_n) 6Ba۫zeQ(7;"M׀1{g^h1/L@*o36+Clwnhԧ>D/oF̯i<7BeK}^B:, vKe]W\yM?xM|b}>Q%W@ 8Gec ,.}Cqs;s6z'N]EȲ[b06’⫅Vjy{2'GY2HH$r^/۴s'G ts/̴\F 3ΜٽcyGʦ"u ytΦϞ>/^p?8R>VzBbϿwYGb3>so)Kc5W/ |-u/Oe^Krw󝚺TEJE1(ZNy+ N>uUT`6G%g}6V ;8VݚЙ.oO8RK2ԛ0 U4ZM$"ذ'm=VUW];6mf<Β 閞j޾8sh|WDL;O<]J&LVbǥ,ݲ`9N'ݝݔɫ=_ws*c&}}}_uƁix +yc/mYsC`09ml"9Ň(JljijOmvB hƨ9.3% 2A9 r-|HAPgl͜XnhsϚ5멧L^ux.f&ǻpH$HpUT?r ¾{|@e  ^e˯iDDQa8;Iy0l1A>7 qZ|գUnsp6i(D6l "t=UI'DB=;* (W݄qiڸi&\$*g/8.LL:J& EP-7"+9ƏYZ.Ua(Ofp6|]UߊUTQ"N8eȐ/9aXi\6]&)vl33 A QިP2dU*bRЪI .("e ʢ BoƜ-3[jCޠ7NxAQQEQT$<ƙHE"V2rL*+l*>[Gk*bp'at5dg Й1{i҉tX xc▖b}-*- ͢Wַ+- 0@mCWXiju'\gzWwלsNI%-r{F4cffT.%XE-# Bwws n(TQFH dD.f4۴K(9*DUT91NB77d ou]:-ݓN%Sb1K`D׎;;ۦ]ʔtڽ{P7NʪUo{nY[t[o %ҭS=l* bD *;lVRj_9D BJɦ\27mĄ)R1Ky_}T/*'QEUL2u& =pl)+"B)SȄaIY--]]/T mC\&o.i}FR{5Pz dX6]JChZr%;-2< &1ubqΙ%Tܥ p $$Dm!B[cW|eZ Dj`7e.@!$;M0R*Lxj(cN<'rQ0w>J9;ZW+e fp7ұD̲,#ck ɂfi SM|~_Sm[t/\ēdO{O''ySU>^T,WD[\#x>zT:rD{zA` Cs0D& - >AVPgG[bykk+ D&aV.g@1n/*'QEULW0(WuQ"Ll7ԤDEQ;cwnjnZҡ%4X4Fl˴T2 Q2&b3EO>ĸpkfK}3C BA hT+ϟW. ^+$QB)̒,Ȗ`p$T lٲ(3' !3ŌPQ8 $IrUTQ7.ETp@1a D&L;sWa!J%LÆ-q)_VE 9 )ISBuĺ2S$C6a:^ Zy9]C 9+-W^n(_9зaܨ^+v\p9_0=:t܆Bu ^N ZypNu1& VQEUi lmXKZ倬_%Fɬܗ$K#P~mhR*OLH<_u۪JUTQ7.+MT<sc2|U{!@e9WʍJ[EUT1.&\$\U8:XcI9l*wRf^+-HleuUr_^ITZbː9zѽ@D9TcR$& I4n9A!"$I"V"%VK UODJ|9-G$*D".%l@O*p|$ALۜsnsD#Ql'[pS'9!H0Bat||*_֍'Ai M8 c:^T$Ib]DúC$cM6ۤ6R G0%pGK"0bqKHE6aĹLe.T:Vm/%җiT DggVˬ͆eXyKR@S,$HT^7 dWgi2sD& [uF:Zj*bI00gi ^ &3dowoC] zXfp[Xdb"cP(4~ڒ%A1X '3o\>z|r'DGOǦmҖJGcwЎzZj",-A'Q4]]sfѹ".>ϣzɸEdZԢ&HTQEĄOb!* !+ekvQ+RN_ZUI lx$Da)(ANt^M Mz{"0$4}tn򁡁`4R,PCщI趞J %uG-ql>oڦVЖ|+4455dd,Ay|z{Q]$I 'Qc2M%d'0H%:9' 0ҙ. 2$2N""P|:oY 旡0 K䓈%bN> GOB ']OB6OO5s=/8 L>5 \`KE'dZ SUTQź瓀\2sCx2.0auM7ٴ}U"9Me%.|>םerPq(W">۶9` k,&bI+ObbGhhjST%ޓ :Y0EI5$$ƴb(QSށ^KeP~0>m1l擨*6_|>  zWtkL#Xˣz̙ӧ*DvFX%nUM.s(/Ld,91R\$&C|jjo 9- zkjj f\5m4w'Alb"3\DV,?[Y.De546[gd)U?*bI XzM@8猳Yjkn'n64BVey3 0R7UZCC۴UE9sfbi9A)p6DQY>y'1uTem1ϫE(H$(29 , 464A"D[<KF&ًDUT1Ikp =ٗy) 84R͢OE"jk(Մklfi&QQfXPbZ"9t B.!J%( ;~mJ !NH>t ˑd&+x,Q D-0!$IkX*X|1~#MƴrT+l\"st ؒMN."#S).C帰^?u;.5R$F:*HF20 ҰD$q~-k*ׯITQE_ &T\;~\Hd9Xeiv9չMeD3]wq5UXkj^+Eت lUT1I|1~s /d Dk`V[]$IbDPbcAB9B'QL=6Hb2b~UTQ$.?q ܐ4|dQa^6 aݮOK@3_~UTQņc]~2dLҘP%~_GE5^C7$"|DO &7%H +PLn::[NKpyy(E eDp TX(յ%`)21 ,ǒɤ@׬נۺiL^ɂ-X!wI.[ڻ9^[[lh,[A`bc# fO^K~1 <^^lHp͒ ɒ-}4꭪?J%lI$\wj usZl $y*ˠǖν+FQ$`'qZ)O+{m'4:6b UkUR$XeS@eY6`B[1bʑV"CG9)DZ)%%{1?V*f3ýL:`AXƈea]$6(\_^~b.>?1O=~D;R54ijz艱ccc#c4ƧMf^ tHQ.KƓr]ys<[I2ĩ+nۻvm|.^fZޮs[VQ_׵+0;~@p%퀤}{=+|s΅#֯Z_,unt+r[w)!"tim+ߵG)+? bqR-.|$A\Wn912;FHR_O߉҉B<ƹ㴄g+?GAE a2ڵ;vX~ٔz{RN>]d%zˉ;? }϶DT)W+cl:zxu6-ڕҲ˞vY`?5D&A>)O'JSK6_aӆj:?4~PUo۰.Jw.i 0i |D őGEE*/DDJU->rhDBLOM@jMnvαc\qImG %*Jm&I .8qOzG%"Flrzd#- 24ӂ [GĉѰ\(W+I]' @,I܌xȈ_^1L&H)L4{ is8q2_O{/Ϲgvˠ'F`qIs^$s"Ej yzC$`"OlCt-X3ڌXiCQPgveP'K7_?ŷL{2&:1yIDjW(掟~+rs-He ι O& 4i2o69(69gRJ+=B'M`qIu[uu[{=k`'{2f:lyNMd({o$p6$Hi0S(v[idW2,C3mSIiJY)ig$$Z: Cz}n<LMJSZ ~3f|'[)֡mn߉xS5ee̮`sXWL.Lr\^$ڲ#tCF 9SV5a%4HpK$'iY$|Dxynj4Uj EJhccTWj|t|<޷}+]NRq$۲嵄RNj0U FDbxpY1ad&yKƦ Sa^yŕf۩Զ˶zpuk 4{`om:e%}泟v?ӀkHnoi5* $?Zc}Z'h0Xp|EXDx~YR;#?П5i8cc#S)LMO=YnuZV 4|VS)8̎٫V \.gRUo1|W>ccZ)eHm5 a\2\OzBH{$`"DIs K%31N<*Pat:`q.%keY#4ȎEQArrF?'ToD,a:NY xJVZ͈),"MĈ)O)ҹte8`fGvJSRe|w>.IIZ%,lg4M0≸Џ-J9rYOV~ ODj!OLl<۴dѤ[~+f$$)ҭWLmxi4~>I0?Vq+W^~e7P.0p%n SĭxQ4c:\qeTվ~᯾ljfi1kff$`O"II6' L?1^-W(ЁIի&SL1cjtuÂvPUZV܉OSkVզۼKCwܡjrl2fŚtj*bԇt#hLMO]k2̉N'fǨAnٵ5eC>ovXO~vu-fI%cXVVi<b>śopF,o^!]ǖR~+_)tF "21<<|Z&HVI'RCѾ8N2Ⱦl&;59?NzZ{1$K\yM{pyl*[)~`rSҲ,3intkOOρ4vӦNMT& a!HtuuuuwԕrÇ&);1~pn'av >v[1ƘmmNөq5\6 kU=DVu5w `:V*W~_;ܿ֩98 K 'PfDP .x}!"uuZmV]Zg4J^{յA;^3\h Dti1kztn㺍 '!6F!'Jk{aلeXq#ѝv5~ !dI.cFB@r]Zð ّf!a'֕R3⊗e4Wܶl4<0Ѩ5JSLs}rvI B %nQ4yr_͠[597`vګ ti'[x\R-Mdf@W\Ԍ$4Ӛ.P` %ݓN6`\P;LjO+Ri Oyvӽצ"M%$`W'aR\ێE4;}EիRJC#g^3>fغ\3b.1:0"*=apw:-qDRp#٭[g,,Pe@na sI-3 o: ?sbggO4stL`5ܹO{яb6@)2Hؙ]9wv3.I\ ! a(¼"ƞvYW?-3SB[Zh[abXq$ጇMMˈTL\ IE.7MR{)E .Z~+h͠)0 H1#nUE' <LN< mLiyp``&*OG HzבA=X'#vl᭛6fYuNo? npCqݖ`  .N&3%A'h-n)ϔ7l.v(uh XF)@Dzd:a%ZA.eA)d>?6vl몭GK3y<֩=umk eZ/[wC?Kw]2$"Xa_'!m7V&+zFJvmdkOȡ'|ƕNktrb rc&UëF$@ s?-_ B,uԄV6l$+ n͝lMY%m3b{Uw6}ȣ)[֚5DT'уgҒ< LfAD {4f a(vҞ$)RRT,uu'6fdTSloN[j,kߌ(ڡm??61OPPOd&1;zLJ9~-3X.iͦvt%Lfj\O.#Ejph/礜Ҕ$i0#\MopΉSXQ8-ֶku˴83c'8 &S`$9v^3#f6[MOp'߸ޮ{SuVNMY.^bXH˰r?7V#;LǵNiD.F`ImF̗~H82OxWkzW@& -%r[.clrjR(fN"fr0$B5=#Fhq;ʤfٽ[)JW'd<oI/;UNV|$rIvЩwFFG&3X&]f\׳nM\ӵrsLep͠tS63zc=-ĝuי1#ST&)mML=`hcZnZViVV])ozfz{v+f+嵙dVK~bŶJjapCQhЃ]x߻[;ؖnmOy-KdSVUۆgu5LLĄ%t'ڲ-HD B,JIhns{o);^37nt^襛/vgӆ6$t&ݿ?LG[tA0h7*ng'z Ofto/MDZt1H33;gUOPټiкtB V'qfڃuX'NYƌDD*J.[z+oMYSd]uu%WwLǬj7Pk75LV{a  UjIʚع% Vh^ؑcJ)" ˉ9Z)5urQ4uNkU8kҦi CT-7;M䌱z^ǎ??|<|R'qIDLZ?4Y B>X,"ijf,ɱIF$`D\>Me,+DK-4c̷J泫&~W(.ִ/W"Èyy0 Zk=SWͰT׽uZ,,2Hݽb78_܆{"ġ OAm7FI &ä.KyX va ?W(Ld> k wI0iq06ɻi%&3cɹO7c$Ixxq< s~$N>̋krAHR-Fv,sb*@hQmVfDqOgF_p̂Zt‚G:y?OgȢl_(Fްw '1k{=NϏ(8qZƜŬD.lta1~xvjVVB & s'qtklz$<2vq 9n˭uj)IP\sUzJ&b3LZC{XnE:%xAB0QWf3Sx׾q˅rGwڍؑbRD$q/)5& KZjǯ}3ͮuc;v;AޙHeKmS5teRWR ̘] eLZZpQ-"vKQ$CӕH,JeSJܵ N w 'kvi4>:>39S>ٟ|% -)fjofqxvȗn_i~NCjsOL $g~O"H8±rV7+\q QiĽOv Ex'`8qGۚ,f ۈqb0ahMajAr,Y[,2Jq߉}&3D8ioN6 OML=rG1rcfͭ(erLR+m0Fp? ZbAAd{9#"u*b w516GƉ#hP^O_}bfzV͝Vq'[7MvWhCZGNnI̎IzOFhH_R\.x:fm?x܊[{zY˝:Ŕe,ZFL_ _~3ř߾j7ߟΧD"(P-}ч>~K_o~unћ}{v3a'/};_׿g=$} 7tMknQ(E B<<{~Vv]տW?O~?nRn޼7o?;>)r^n6VEluӚy%>tJߺWG/]J-4sUUɢtr/^̫Y)Tʕ7ޘL' ;A'+j%I]ʸۜ6܎׾e[|O+oogG4Sj^[˭``1ss]H#w8U+ՙ 1ŮTh1>:;?[p G#;kv]]N1A,j5Z![ Rs޽{9:22fd6m[phNQ1#_neQ_Sx 7ѷ==X,Kq"2~Y PZ)||:N W\y+J:NG)< ޴ b׾ty-BIT3ffl>{{n}>|[n>v̓5i5i,fǗn3Rnh_|_;H6束e"$ZZ׬~ǻ{ux;n7{⥯8rȭrk<o-mk=1G~xM,NBz҉;W\u~pL___׮}ɵ7coM>ˮHxIH)w{^5M"z^vot;o}+^~Wru:N\m_s[q˵-w]ӟm͌Dԕw%cШuj-zihߞ}Ck/"kǶd[v^۬5U2^ntAfkJN[~2^kZ/-e0 7鍤׽dh48쨊ڰfý~/omz׻K4od5$`Vxݭܩ,1cEV@Aјbu0|WlV5wZ)e^1v:O~\$`I$}xNuMKXqKX?N}_˞s|bӴx/3HQwww_w\:xzK3X0P- :=HfD|˰py g3Y!Yw 8Ξ{>~v#LtlǶF ž/ 4;=Hy) DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ DBH A"!H@$ $ q\ZYp*HH)}o@`卞6̙㧂D^ u΃,Y_җ/QE8Thb\.ϿnOFLf1Lz*Hpbi!TŢINwbmZ.Mjybd==R.lA ?^.QJ*>L ~ TԿ~_;~SOL63妾<7pb{ >"/*۱[<׿A5EA6xz[|kGfRe|{'O-"E۳/6[R/}߹|%X,Ʒqo7/ph5d!&boxoj=Wai>E~G>О}4r'fY)T<{oW>vC&ٶs_}k탷/| ;M[6U'[y^}o7I-cؽyomy?8!ԧZ*R$J{/i綝۶o-7WU۶7o?xoʃGn߹ B_o^WF!xͫ^/$.<]>ϟ//}KYԶZ~0zx*eӖ/D~&^. ;4Sڹ}Ju7MD17ܔN'& /v)'.:4>ѭCTf^skC93HJerjbqx0t2$GDRrf<iҩLP(t)6miwȽ߾wʥ](b>5Y*KI%rxjPJm۴VZ*Zw?އN^k/λz5>:ӂtSw~_*ʯƯ}ܶm Eg=GAdڋùBݖctid2_~ywO7_#rW=mg=I k*cC|G?~Z5w7Uw/ YvJI㶛^w[tǪ` `cB!Z)Sӟ`2]>xۻڽQwoշ݇`k^7w_VD;C@=B3;^t _79rȱd2PJiB%&9Juvh/:^믿4%1nGȓ'OIfiQ3Yh)i,YdQzV߰|_6nN) !'MXѧW[4yB|GSZ\\#n8o{֖pH%F7Ͽ}??c*Efw_O>}qJ+.EKWW.Y*/JJK 3ALe!*LbU=leÜKK 2b p!B(e?.g PJ$J~sV9Q&Hz~~ "cxEЋ BbP/R`P V6PQh!?5CVзj҇`i, UHeM խP.Ţ:`D[{c*0RRPKEC+\nƂZp^H"Fa2ES;.TbiZ}G*0(ES;.by@T,J#-zPŠ}Ue 1=WAB>6A0 V ؼ+bU+Z["hҥdEʒL)%Ȳ(sI.A=^WWgTUqi.I !R\D.*/ZU YsdMi^N*(&CD$.Py7j(oy͛d敼# 0L"˭i6&The2]X6jXU*2M`LX6,θ D@К&\Hۘ VPrƔꒄ MJ -2¶(eJ(9DRJ[UAUYe [ A@HnT?.<Wg.qd2T2;+"\#] zQU/X./pl~5dԔX6u2ΚJ؏ʐ10*;wۥbPp*Z$aҪ'JďҠp0*;K~.Z$jSq0"x0";oۣbPM[n54JUE63NAvYK5]5>VjIf62&zٹn}+U,huMHɥ< e J>=*d.ve4VRAJTFF./hU.?mLE?&`@tXT\BBTEj^PYhT PJ!A*[qBJU)1&!bئpFE6eVgaU(\kW2]::`P%4|}kF~ŭS7f㖽JKmn.hUs"$He; HYuH?YId _M`ȠBPm\ڒM?OڛެkBti[:{ 5်)㘊Szŵ5ł= TM(vWjWӪBi"!J1cO-Tƣ?~2~T[o\ dsa1 yiېe[' y+$IK"|y1#GQVs.kP-뎁mG#}Ѵ8k%fkR툳MԺ& f|^$Dt2IQ_\/[Y^d&(/6-60xLT$-nMq)fVͭ( nu~- 2T\zQ_%3E!*RZJs;º H( 7K$K/kePGDJTIKimGIN^:~DdjYQ]b&Jk%]REEA  йK%G/,Nr*kWEIDA27"'Ss;635ܲQf32$*)Ta2Sm˜QPEA˾,K}ieMD ;Msp7q{CwMǎ8v}W.[gѬuͣ蜵Owa(\?~;pn x23a>}_>5M49!ݲ,Sð4!Ynp[mnh Y3v(4ۺnSJ, sfŏ'=n{JGmG>[( C:}kle=% khB*TݑPz"(J:|kULAUݎH(#!בI7BץUGSo9)9"a\HnZJVdv-_hi[)I5"p۪kA$b-[e5ZgaYR c޿R+"EA(TY%Be*IAшaϾ0o*U]3S_aN)RrsTќ\thE*Ig&!*_{Dž+8y3ξnU[[;ޛա(1ئX<;MyJ]6GO͝rUuؔyl&K_tg睶 Lx3/}o3c?իOܔ8*K7L߻ogcZvo}>63Y ){n3;|B_qɁõs|թ'p0?.}G8hq'ڪSx K.9wk+\NAvInM{v⦇RϽ}m}Q?Z_~ʖQ`,ۣ⾻ǎY^قq!qBD TUm W71зFK"fhmaső#oeQ߀~U ,b( j*+ )'լ ,aiQ 1EBC,D}3e6+PZҪb̠5JBJhh>+[K_NU,B[XB}.𢡙 ΫK 5lu32:jJY"- 34ҀhhT"V+rG"7*BD$B #L*SLd"Jdڲ,SJ%*APB%ndҫꛭ3 M)/5 > ,KE>jm=ШfK6KV7m#.Me2 Mm=A˥y?trf!7Sλv8PU'/Yxu%ă>}v3F>7NusaΫf\l}%|g7|hYy>s(}9'we|7\?M:C{ٹ>;R*&@Ϝ8)e; ޭ'Wμ^{_XC=QT9j;.\ӻ}x-W^q+?]臛j[VU?vϖDB6ga`21IT(,<pUtune .) x=D1N8rvomۨ G}=꒩ם<>Ϟ{B!sR{:99g8x@g{c+ޘotA{{7,K]S֋0QĤo?}^x47t:ɅcwkK*kԔ=w[k{<6km瘇i321AàʊUy28b}vvVo F"Fk0ؑҷ@}lRlF+¡3T yȨ*PSTj%5ih@1`ͬ8 gRLS +uA-M264A㝂3-RR Jnㄲ^Xcv[EY$|8}11tVD809F .Hg̒YglLu<3fЭ7E  Yh4ub:3cQ[}Yߞ9g޻3f}'?%mؕWHξ>w-kvf5V.^4bDW5/g4`(*J+SYח~,X _$&#H%l&`%|D 2*B,[@EI&;[ ŢZ<(,OKsKV(BK IQߎpnC$BSQZ@E!ZhlyU:|(pPƢZ2 Ԏh%Șh@8U9FA ;W!)MQD ~X 0w[0Q^DMQA%,oD P?-Ǎp?d )ňGQ_R B$iZ l*1I:pg9$ӆ&־:$&SCXUi")nJe?grSRn$ R[:6jA=刓& :སy&lnf%{9h^^ W ,:.PT̆a/nKXt1mpF $np!D2W{n/iUhDeKгF%Z]fz4P9 #B .q%l[GmC|sQɀ"_1Holhh](eC@L D8gL{P]W{Y#4xp/g$d{h#3mi:J8q192'5֮?ed3O~ߝ]p3- `Iϼޤ#a}V1iohvK^yΘͪxidZ Ze7!Gƪ:5Dha(D{YTW"@4 NWQFm.xQ_-fQUd *JL4t0 z@iZ`dQSxJaeEqZ*EI-|59y##(V!{hii $R)G6J#P(V!CPC#_h;%Uupae|hl3P)_YLʊ@V#OZx<,TU̚-+,+"AO[3oYV۠:sC)}{R(BTP!\a Ls9IȐC!a'^gs=n=@G~gɲ}V1BrwӶxl->|> tlBF5] {pfqGw#{qaY%|WX0;^7VazGiOu'3^|%{ٗvtSλ.e`ko||;U׾'n{1֫n~9 ITHfVx핛̙aQ˱tK_|y^zi:vcYH )|kاD*.cveLs[=x5p7H_OFnE:\&|h>W]yU>4~_` {9uۭo)8ˍ``[Lx깙#3WLLsy_y鵋G ,9^~)2_\pcH#pQ6 gܱ# v#KO=ze-~k}}wcmxa?]kKHO]\7danZ?ڜP$ޯ<'_UWdEa봥?Z5^]Fexe1V5tEiK;BVZ4^QD."tPkf(Tu LWep%\%_嫩n$iށp]U颕$ާ]R,""!.ZWZh SN-*eX\K-oҎ Cz5<^^V(X,ZEmE&R( qhc|EOTDAW Dwoj>[؜?ꭗne\.dSNGDA$Knekkn{9;<;2[̛ HJ!s9իWkB2唫Te2SrL5A*KL#ڱ.p;ږe2qFJ~inV lkJftn&KWU@%+ 7 խ-m d2reO۬=A4Y  υkuDh|V,iǔPhh">F"*"?]:N9PMե-So+V׭*Pzmv:瞭_UjQQә,ɚǝy.q Ȝ9s?P*\d"O.qȔPa&O*"9=a!  [eۼW|c>๕k֭9 Үd΅/Ϫ7 &D"DLp&!R.3crtB- qZU1˒8R\ Ae BD(]2"*\B8;sUXCEۿ[dB 䬈 T%3NjJ]A`EӼ9!%v׷BUIiE1xE ŐЪrEݩ6w)_]QR%a4b,E,XեfЖ@q PߎP!7[i( "ɷ&P$Ё|nԷ)ʋgRhK( B)o׍HM@ycHfѫDNcU~/">4SGށ^H$БBy |A)JБAE l1-aU+>xJPAkY՝%hNA}{NNFPY0: *W>+b󮈦e;l^L%*SYHB2$"QJTTD;o+(6\ ֆS.\~G?MuMT KT *TJD$9%qƙg̚9 a5.o (87vx6+Śv'\hI J=6\HeƘiՔl(fLCUU#+o.3 )h¥!GC8Gr7ôзۡ*A"X!3 #%Şָ,8)E}+ +QߚL(AׅM@U ZaY)_S$(;+KPM>kO)ZHePG-(*"oɯjiw)dPiÑ,46(A$6XZ;(/B@4H( "!4[U]]GE2:(ܘP!hë!GS%L/;u ~~]wuYR3ϼ{`5۰Ȝ9sFuє$ɢ"]+ռnvq.@)$'twJ*@(@@cq<J/a ZF t; (AAr.f_獄sb|ԙYww#3oނ%M~m\nlEtw=8 ʚn:-$ӻYjd憅nθȺBrE ˖-sEEmUUTƌs7OkCɓ'O͌9pۭz˭2d2 5moo(yɓI(J%SLiX(&%ɓAEAg.c'zeyɓ珆P\6G[ ˲چ扙 0-SS5MӨ1*YGI8 Kgh6@ɓ'oƓ뮹N~iqv -駟v"(,(<3$H^q0#Gs{J *{If~q A(y}TPNy:vdYx<۶3Fo篇4 aދR wfkx8 Rv)]w۵lС@09z"d3MM_zA4zh=?AB56Cw\gNįk{4|zeOgzqq320~j=Y*\o?onzVlf=w!x^%AH\.ͭ弉lNӿ%I}=ڀ0pV3$I #c@*Qdi{wEU<>O-D4JJT:{Yf0G =\.(`e-θќ S$*u}ꩧVUU]tEefdףff`(@&1Yilj]c3_:O3_,✳s=/EBd2٫WR9!$qGy䫯zgvmګjYҹ۶mIOByƙیf]֛RT% eUN=x۝vO|x"tRKXUUBaz-STM՚ۚ ax[K-3o董}icz=AebƏ{Ͻ{jg5E;;| 7-]",[9S v:UUY5: 7ts:5ri04USUqV|w/x5bxïjʊpJ1(s0hGx .uĜ\sga ZƘ&MTT\cOnV}k<ci !TUUUdP4 XWSJ-A]wuvZ4-|O?4#^0?xeJK%꼝exy(KS3Rt/B]>eoA-GU)3TG~#p nb$I1'?'EA`Ŋrhrƪ#JEQJi:&dٳgy䑍wjhhH$ƍ~i<8;gFXBHBoK =5E55ko>SY^LkI@BmvSN3f,[/ [3p9gqm׳%%^Cqϗ%?oׯ_<wix">iDwxУhliL&G~<Nt-=S'wRQIQG{{HʎX3,Zu{kHA$t#Ig.bђE@p[h_4'۞s=röO>?H82؉D/XY2Nua}ŗOŇ $*pg {w}\--jkkpQxS.2nqU˖-[||4~h4ګ_UEK}'=3~^5Ş{i[O?yUTVr-N)묙w# {=d"7+-)y}=.τ'^sCsFϴ4 ߗdD~p/F;1:믿>xg}6H%K|XI'<~c=v '̘1cqx܍57=T3yHnսwnc]L䣻}7XOH }oۆk%MUW]7޹kcx+.!Sе URkkz~`JW^z妛nJt$^}k mI%:;_|?zM< /W\}-x`[K[-vmX 'ofx '~A]wuac>;r).;3M'ӪqG{76{O?W]%>xs>/dהT׺pMJJJ:/:.v~{/+ҥ _om$'|)Sϟ[?~-d2Ί!nO<ꨣn}O>a }3sܿ2.|M[oV]>S\S.r?z=%t:!vi]I&Sɻأʫ^yᕃ?xW3f̜qG~v#Fz+6L2S^R"]>]pNz C =#Ǝ*jս8 Ms:}~]pGvorJJ0Pg^*9j$!NYN8yGrr!oA3ve}cǍyg3Xh?p\veSΛrd*w6tS9/D8Q ˰ e3}wǭw fSӻɪz][g_^|ي%+Ͻ?2?Kiiݐ$IUUw'wb޼y_}ٳWZr zꩧ+?ol&Gx5 o;Bo6sqWjޤɓy־ԻuYɅW70@*]vdM۶MbINp~\pJi[[n)fl^vy OdΟn6g5_"QIԶh\I' N5!oճTmLs]/r鮻64H&gI-l6[Y]=C+8~wk]|u2u]s9I&$Igsա0dsNcM+Z(O4؉}w?!Kvaf~3?Sv {Lbs}N98:,gDZSA@uI'}{?~Ǟ´=WI|ktuS !enN<.T=eYTi`x"j9OME8^hQ("0t߾}u>|xGG缰Pʔ)eY|0!;4h'l溃( .xh]Ӷk2v&cdD{G{:f6ߞ_}UhGZOzzlۦ6I\i-^;#Q)m H@(3a75+nˎeeǜt[2NěŬBP\tEۍ52FfUo|꺫.էvw;)lapéB_[W;Æ EB@(Ō/w{d,NV?)Mayay|}[T,Iw4 ߻:c>xjjH``:}H'Q @xDqUs>#4MUQۍjjjv~+RSuuG ##1z#D;>jKũJuSOdN<-.(qC 2dHc[cCKCyq?nq5jθw}a7t?;%t[_gL:њ^z01pPeŧ_tĚrɪ UԺO'&r=l6^̂. HӺ":#<瞻{N=T]O8< ;qmYV"lV4Nhh?蠃|́| ϽwNXJνܧ=P?:oƏxUBfG~a\s^λwz1&SOʫ۶m'hGM7taWV1pȤɓJ#[=}7tPf1ttǩ;a`n2/>]9+cÏyD"=PB`0$*r^{9_57}m1/FmnTgтE*_j˭%=Rv(((yˋXYwޙ0aB,[xI(zǖ/|>S__?o޼#G656D ]+:K(--mjjBԯgq].Wa0g3L:EaDv%M ÇohhXrѣݼFY[[Dk}{,ˋ.RUu9>toԚt&cJ 0勗9ܡ5oM0~C5k.;~wťsݻwe+1UTT/NϞ={qۺ4ע w~wUݪ| k !|ȣwOgZZ[7\ HcMq~_.`-==MTJ{\wyv{GG߀vC~} 0O<U'x7^}grɔ}{@U`0 =o0x<tC\C""{&MJ$0S'}AM:m ά$g#q!o|U';Jn˺|zg?'xN)=vcӕSO>䓝w741;t_&knj>7uF~#/IF O?k) θZ֚IF --5ɒlٖIHH;YpeY~9sk_}ݿrizzipB(J\PJ)lj@$qe*3$E&ņ!0)b۶"+i󾟗5Bm~!=z Os(J^ReY$\Qu΅߹/XǦ1Bg# Tn)N5NͶb ۶ Èb:;Κdg k3B*YS΂2g(?e\aa_X7t+ Xw9vav8.3/x/>`+P8+ `A nw֬YNڕ\y聇06p-![}wO6EV/Id M0R iк\7 .dEvnVUUA 4E&w> (g2:@޽ZTTt饗Ks%Kul4t] }n\}{g2LRNU, [@8 ZtP[n1MS4UQmv7m9 9Q}7p)*z^Hs2o3Y^@ paC?'c߬Λ[]UM)]YrPA3%AI<uCڼɱsλXTI: ۈ'\aÆ [bRe:QTeU&7h'Hc{y%i/L[dsOp RQyH)+gBer|=Ox$۶wy>}̟~֯z$HTW_WVZ&r]}C-f:Km?i !Tu9NRGr{nwm}|UL*cBNE)E;wd jDEnOfLBgm!. hvL:u6,)I3J )LLB 0Œ-DdɴL(Uv~gؿ,BYni.%'~SDBExmȑ9s |_}-7g>B<lf~sg[h S3~N;H$l`قX[,$I7O?z嗗qpILה \}'N?S2mm 'p`N[~}Jtwĉ.<ݟ|`e]uիی{v'[c10[&3mjSP jR`_p Ͽ&N\^YU`r6dڼV}|6Nl۱Js59&#jN#@eRmTҹӷU[箵L [g^׶mv4 4%ۯ_1,ږS{tFva30Fٚ.B*(L9Djf<-wqI)^YV9~Ѝ]R 0Br"&lXGd&\e0#7O X"(T$IAO-f\Qw,l/PFڪF4pPlFD!C 'b63p7}֣$g&İ&gE nܸ3f8ퟧ[2Q!ıt gq,LS\*@pgL B̝[p 6 n$!7/?,*~Lnm˝ 7aJ0Uj&p獲OQ ǟ>@W][! yTEuS̞Ǟi0Ў-/7K.VUa=v:خ%`?B O^rp[8i\o}MCD:$`MBMarswLn:ٰs49|b{6͆ ݸzh^']20az[oAPL:}Q *YJ>:p=s6M"kMfIwCgi*UL L`Vk%N=YYAe6lmw. r!\Z gu2DEݖXf+lVrט*ԄI(QԎl{;J"{S_OSN9t}TN (6j%ZŒ{(F5k*?,Uq09̡Ӗ[G38f=%Y. n&5&%Աk7x7> (j͜=#R)p+;חƬyM>wb by}NRd2}JJ?gSBȹ9\nݜyƣ } '7=VԮfÆ s wo{f# 02F[RRRaqa1 N eY%'b ;1)^kqu>sϼ[UU vmOc{G|ٗGwD:~~{ .~;ncOض}7BY EQ ̎Yo.oBȴ&УcgϜ]TXtN$&vɮǎlol Gᆑ+O>\d+c\[p*#gJTdMC|X X֮kY0K+y!g?x|*:sң[, fP@\yՕޠ׬ 3)t,bJǶm6l۶UYuTY5mS2]y(npf&WdYGAxs@Zw|dZ=!,V} XƙTԛsֲp5  m7#F5njm+)IdMU/IB֨& Y@ȲV;qEn_< pr #\pSkYSNb`]vjW>5dؐϿ< H%S>@6uΖ͍e%e8t~O?4v /m8}A.~ǵ^WJ-J%SDB(o^Kl|{i{uTD4 ~t퐡Q΀E{xRJu]Og` H@bX4$1͜؝0f pvɝa ́,;M֨DRmm.k2眀HDWZ6TH8[SJ~ZS.<8@˴tUW΀ӅаՐ.{s ;\YYi֣˯ʃ=_6x?vqӦM[K/Ǟ{vXiO;{]qy?kY#Y:a[л_ﬞ]֧ R)%{%W@.]~˲ PŲq !nvemYkiKl:kXkc/QǾ+_=hz2N[pL^sYo bcϡ;ȳL9Kv4556(//?#|ˎ;;p gqΞ1{qKxCSɓNd3dNKO>X]5c֌B.hPA<Ȭ&03T 83))]yg|uکw}m-mt; Y6 jzp!}DYDq(4s.ĸm 1I:5 EZY=K)O@7unDGbD,\L'@MUjjljikm-l-F8mJ$QyȲ9ԫohsTS>eTru@8 +=gׯKm˶mfQb1& vIгWN[4KD2dH<h~os}/Eph曮g{f@+ᘛ Ab39yITd u/8/ LӞ{}y2ٻ. dpJ6rWekYܒevtMt pŗpj;p&cR;m8묳> ,\fSn7K㉌l8s!qY3IK;儧iSӞ]Q;tˡ%یm:yQG%;/Vw-lg52zSJGuB#}\nULX-giL2l[aY_PCPpnh>k+TqQM;}yp7$-^a;w;BznD%IH˜ )R"3g<ēg,]-{b ZVuYgw_s5'xwlhsۙf tA cNĉ_闶i\:9L%YA6ls) "LaBƶ[ zC}BPkqFv9\bO!DǞiW^j1 % ?rr֬uY,˲,uuuK/kgw̙Z\$ɾN:u}^`o}g3ˢÆ8~9&N&k=\zڣy&0Ϯ}zMMzp}.(尫=U%WZXDrI3 تP#D"IGtti1*뼖+dqΝpY`F?Q%w߮Y^_xXJgym_4*QKX*TivGܠ*] .BP3o-l؜'v:;_00?]&GI4(Zf6W_s5^}z]w]w߿a|Ml[u;~iJBM8;ҚXK̙щ޴.tLew0x\D ,݂0p@y[os .vuW\ܲJlbvXD#SfL6S^YkJ,<䝳 s-g<|v&yw!}^q'ܙLK %8cvCnޢUgW%b-nGf6km'+çrEdVYʂgTS}&RTazi`ɶ%˨ev !:V f0aspgP cn-X w`v Hd *, 6`@@Ks kT*D"+^:cm{4p964g%gTrי%pͷvi}ިZZw߻-O;=0yİ Mю=س<[4m} 'PVWWKB:أgΜɧⱻc*.,?$\(9k9; վmٌ}O<FQ64h $(PY{փ_x۟ =mۊP|0cK"+VCf~VRO673i˲lG#7㥩/NY2h{IϬ`p,Eר7fϏ;wFV>ui5tYb… q{رcoC:)Nsw^]S=hР:F֘4y/_!Ç[uuwU,-uZ-cm͹Gmaof8qG6tò߮2s?ŗ.'EwLݴ̉'_v`Nvu緶֥3)ƙ/ݖy?̋D"L<< }g;3z2ODZu9;^|œO:p A*eRֆR#kA'PgmbF8K/5#%"9=5Iulho7,VzLp.Cv~Qw*'O>$Sɫ/g%ឹZۯY]!!t8H9=sU2 jW:9'@b Ӳ,a59}+{uSgYH5@JtNS~|U+a{ _?;敗_ӿn \pn?n{';W_u޼yÇ4m%TbʅS,[~%a3[tYlEk7Ht:C\ZDvҒJSt ]Qn9eePFVd!D eYՕv9x 'F(+T1lC%S7AP\\i {H "c'SIp-bX9 [Y+}%M\Wdeu^Dя?OeSK-;vy,^p7~yGz5;t:};)7|c:vw@quB>oHr%lX;Stl:;iMMMB{V[oeV μXJ\=f #v-SLe.xW(pd124HD ͘d4հZIqǮ%ru_x,~g;V\9}Og<1tc 9OgB$*ekCd ~_ 7tM(ՅI N'x7~ SΜy&e阗_,f.-/7= :@Mu:d!;,j9pC4)zfzv[I9@ LP6#tz`g)_vаڲ%Q P"psɸ,͛]%mm{}-w?s O?}jF5jM;jbJA%Ib`dKvX &S*Q ub: pIƘw%H.42-֊=ώ{c#%:Ҽ" \e!`x|J)~X״3N %|-?z뭷¤IkoYUe\L@^g3ٰ=34h5i$lU>(/Ƙm+*ْ^c)=j۶b%dQ4!芺bk@47R@ΦT5v6Tjhl'u@ue8 i+-2\n銤8榮u c?&M{fZYYMX!Փ2Sm Ys>QV԰]δV% 2Μ.Vl7jH,Aٕ{b:iMMNR6 ې 1ƨD!Z{lUR-aqpu%Z㙜13.ٵN{/6oXr9\NMjj\3YT\6ۤ̔i{iOŇTLk13.SٙxL#GX6Y(2%{PFIr^`CTN'YLa.؞vN8{Ƀ]/֜k}ҙZ.6gϵ$R)TɅauuuᄑ0 ?9DT/TӹId2o&<ιa~ kݮ\g Ha"i˲z(e <:3|+NI2L%}>_:VTE@H!Vd9hiO{w/F5g%Y`?'oR*R hvPK ps5r̔ PNT6~ X%ىS`k͝D%۴)-Ǐhs~#H* bdrI YdђHQ:PXP(__ gfM#cBTS{}O]}]L % Q=QPQ%Ј(aFJx wy]~,Y9~wg s^"Ew#BS4g9dPr kvܣ2\CXceis=eYv`ϗPPl60ΒiLӼ6GIOϤ2`zP\u D%0@ OxÍs?.شB^q'O ,KwS~wǝww?]ӢNH$6u^V$JjϽvߝa3U$EDu[~(lq9:J^{ /-|>EQ*}?V@^bfQqQx~a[5IӼj1&t-\w*ϥ#ə)/-PYUJ>ģoW^\ <~\<([ݸ]3PF觟zzMU 7nͨ=Uf0feeϾqʦZ@S5Ji,w0H$@V /2̠s?Yq7|ܣ<5ӹcE7bL9v# JKKxPgy~Jc,4²D<8  Ӧg3#1~xEQ6:O/3]׿:aFSSӉ'ȻMT˛9lfb 'Q?3=O&imm=XEb4s&X|ɓǛ zߟ˲Z[['O ={f|>cSyı&?SA!C8o,O+;Sq]x&IǾ?:zf)1d2Ypa7n\^C{m۶dnYBѹlkjj]r%[lEי>lS?S<oE]~jzW_9z1v4\XSS3dȐo 'tϓ'A^Il꫾}:x|ժU;8BȪUS#FB0o>{}d >JroGΓ'<Թ۳JB$Ͻ_~[5`y`͍EdQ!dlŎ3n9ccͭa5Ux+_t5D<Un?]hZn_~p?*\cZ;-Lb I7/6BI@@H`YxX" D1 }OSAMB9&b¡7[YhIDATXv;+7c]V[ޱ<\IVf3(ÂB] T4w-_݃T RD) Bۂ'Q֧u0lDHVA@laGƹ M$GYbG8^ڊX<3wzުuC i6@V ! jՄ ^h讕zY9: &lטDfV!mm((uB&@40@FO0g ŠܤfHNTZTPnP(6Y,L0bj u> 1 W|ABi#9)== .jq@ ̸&wY7G(JݤPlH M0`̝_|,[ǥQ;s nh;Q~%#F bӅnnO`-Ө|A bS%pY `=!u;! aP bɰT>ĬBY'85A8EFQMPlxK>O3i|'hȍ?'QIDRFl3?x2#J7AV(XI< \O C KKrdꡧ M5דX@Nd̟!8sCA@NS٬V#] DEEEf4~H""AA}ף|Eߢ h Xy*B4Q­j$@&V)ǿ9b-[\$ RJR39^Rz$VKHl֝:ukjjnușC@<2[0âd-UɘȬj5H. dl!";%@y⭵sQAWR Xr5]k< R]zq brҠ&P;Bjt  |A lN$G|KH|SNrܗN:a| |S0˯y&ϣ:r h.ZkfRz|eBdK5n|tê(JG@$kA8#|!wD M6]tduw6`6B^-n qlvSRr!i@V19t(Y$t~;#> eq-<7[> :-wj9 a_acRBt0xN5jjl UMJlNs(#/!OKJ~'>gai`43[n&\#N Yu~!u~q~ KAV}ݻW1 @Em~4x_耆V@^B{/>a`u !)ͮp6Ͷ2PlHx?ua.QLc?B| GA3=Ƃ_$t6˷U6S:|HbCfcfF{xOA,@Yxjh$0ۼ A;e8YKIUZWaEBi˾Ѹ }⍅f>xQ$ BBBt Pf"U!Xz Q^ye{㪠v3#SZ*DAȯ %@RH P>F}(%Q {aɘR6 f*DA7,$HcZIؔcw v xu"Hk0p 0DF'QiBi P A ZćàŁ@J= Xf&L(x^¸~ 5`ѠC0͆wnuJ'lȍ ؄*DAPrVpҷLA2d³mK*TQBU>Pؠ ` QxkvصlK~l2Ib#gjb+x}:?CHp&٥XoP(6$(nuuǧU#ad:sƤ&JY/6۴-'5@.uD0~\nO:rW OO&Mr7JH(mMǙs@p,~x.ȷD,@7(wZ0 fVpH(Jd]+*|A $pu ay >ޚ  AFq2O4W6 |B M !ElulrqL%h쩹/E 7yT>PhpAc$A]^hW4l &$(!P $|bhd3pgZ /E-v"J*mhJƶW @>p:g PzPB&hh` Hů_@!<7|A B&ǍECD|@K߇225O>  @TqO1iWB\OT>PkV8iQ(M.Ғ4@dðx bDoP$ AVهX34%!u4`I)A` 1acO$Q P$ B+?Lsk׮C tMJIԺXX seZ#)w 8|O{  4BS#@(yم^s5X"g͞Ĩ'}; E[F%4bb._V r!T%JbEN+oι Uⷡ Qd ('`BTyf)r3–nˍb[W: :qy#x] Qb^3!piLuzUM'" ֑i0I^;w[ꜴsǞ]y62f< }<(B/vkނqRa3N@w@fòH`!4U.ba`viVэUNbg:z0 eެ{AÑF\w &]ض!!T"?M@HeȗְSPa^ tJh9t+c =43qg \ϪLHA( QxT>\?N5c"jEQ]o8G< p x !WRMBw'QT*x$*Qƣ~zNq |. 8 o7{:|Ah?vINӈ/']s.GI-.A|<\ZdO6aD(JH(3jH7ڀOuZPÄҜ-4;0Ox£;`ƆFRL ;<*q--'QJBcHhh%4vIl{{:(8q"^EtdfejsbA v`Dǎg%6&NĤ {HG84i$ V@(JH(]ϋڶ<5 )&5.`: 7-Kt+\!)_P!(eT7" ;? >pN@Bp`ŵwTT *TxިBG\0F87|_㫽>0p\cMa]yB4f8ݿo>й$Y YNtB#L%~/ \pܔ?jP*"#]Ǐ>;^yh @ӘA;B`閒BPFQ+ b Aa¹Ճ_xnŭýKaDj|+spF xiw=8zkP JH(e'e_bW쁽u^*F'A1B&$h'Nw{|ÿ0xvMT>B~zo|e^z>l@x2mp?  P9VW!v=(m>F%MO5(Ihøp]PlZ8N@5ͨ ӈpôfhoٻ؝CG#(%,(m *@ [JBiaiZШiQ&WlUW28fV*DAP-ش'Ҏs؀GyxFG:sD5]Wk O (!ش`AmJ`@d?OO|qMUr9`\ 4MePlZ>@t-Knԩ]s_}N.Y5R*I^ O yk`Qy( L8_eP$$MGO>x@J~@ $|P7||$d=$$XBPJW ZVTPdB)Wx8hvV[('l(.h G" Ȕ$e@:/_;7~ `#4  9]uDџ\96h."8mRPM^k1T*ygdΛk})NV~r4;OcIXma^EBO!!2fT+Y;2Uڦk%A5MDmY?zlcDUH&~}h0] &p0AfWxL \>?_̝j"짹yV,w~jW=Z|wuzV'27`> c{/-,9 3.a:DԕJzb슫8J?5}$a[63 }iFBCp4ШF*E砜e:`f! C(Eby|H '!!eWO`qv7K^++V.uK7]:oNtBIcyGS4%hZɺɂMj~cm'-4H NtD0*RD: EK xǷMi;.DԜ_@ MiH/d:DQC(s NL+=Z~BI:VuҞ}3{*gKnz?O'J4j&J C RBrj|6$;  K_y\_nZUunU`A "$ PQ  D@e49Ub !DƢDs6{ՕW}ݙ?Ň2`DZ  -J1 EҤ{9>ڧ!$31*' UH7•3J07'$"#MRSjlڭ\æNR4r\奱4@σ#U\7Pcȏ皆z,/ЙNYi(MCE^T xXmc$ UT;zr$F`FPC&'QOHhBJe3¨ȃ:j)(,"s\ΨLCɭNygl-?> 7TkM & f1;xMEJ#aPkbQC|cHA~~,J"Axcopڷ!(6FT>g[@FBd/{>lQ( GHX^ `. J*%a+&+\/>膊h|HCrt ?zr^'6gB`D0h}'VG-$FWy "2#Es/<#}s0r\'QPy0 AFB|zjgݧ`J/ _GYE'jr捭}v^-D>o fbPk"P#\&TlH~ Q<8Y~7N~ .X](+iP&6tXN/?B _7C#&PՐjD(!(.`JA'>%@ =1!q3sSli$b (]I(!(S0i=#pN@7_iW{xq8B~! '+-vmMhj%?JH(R0b1@W-aN)E`X1X4Vl%$CoƕK`%ٺM?+6#>ߞl^;؞֌2ֳJt+~Ůƀ! r`%A96GB0ǩ]i0L2{`.ՠ*uSxdG1oᄈDwCߕXd2[Q a&{<{!SIŚT8 ZI(Z MS9Om)ɋqs-;#A c1 EPABs,JH(Zb%~C@Mt ԢXę TrnQv./t )UJ{(uS(!h|N`2u_70+nQ d8ڡ|HԓO T:`.@uA;o dچA.rO*C(jh1' ߥ~|ÿs?n=J xD6IQ48oP0K~_1PqnfP$}FL5t sroUIT>OHH t=RJBV@99C buhp~@XDבNH:>) D(4*DAPbVH.'BKI7y[7C?B_R | _!㏟}vc NȔLNhp+afx EA~iQ8VWQfH -&h EJ7_3f')-Ej%$ƎSOI)|;ӏ?97tl404*5ʄ;#IpNJZ$>I2 Xˀ Յ7Z~}޽q/D.dzZ+٠hM'< J'y > #\,-0f1.9ˬ*|+.(@r==NujRP" '-^k1v{d߂@K2-(85)_;=wVK{m@@r<)3nw)AܷZ !j }ng~YaJUZ%_}oM7Q.¹/A`&Ck#(B6>01wqX '>HC >!C-t9$ĺPOTVC.AE%ʻ`!gJ#~a8E77zχMuXY;&V2ԃ2,mmO7bA| uL: %mӵ˘[{KH0cҵܮ};0@$Y5a jדBT@XVvS@>N;nq!(` vͮ`RS UDQ~G犊~7 p`o@\0Vmf( o2Q<@˺ Ko,lOp(IAy!#Q| CPX @HmKy_} I̦aCo*O<^XLheFlS@'q^=$U{q8.smc3?E.hKeKHL2w= ēO(VD3%ZfH 04h6\,9;lH7'}y4  ~]TXjo)(Ĥ&!j/y ^z$RD@WDe0So%A9m||svшJ6/(G(%fj58QvV$Q MÌp2W#k˰\X?,7^[LZŎ]@B&A*bcB( ˆ]h-L==onIhd=0cb^oD!%6@ AyAIuB3BI: "GοI=>>_euJ@2:.,Sy(6BT>̟Pn3c2Y>$t$$I#v:8 ZD kmR"!@\r@G@C5/L^ Gi2d8T&2 iP{O L=$ڑ]|ΉR3NxAk$Z#J$7 RZZ?.yC-uxH%Zgu[2!)6VT>l-$\چR+.@@4@D5 ,V .W֛_J-xw|l9Я<|_1p/ p##sLPl|@ K!OL7)<+5=0 4`G[.Ndg^ B)P|^X)7 |i S(6| JH$K F KPX1 x'ā@f 8a  >oq ݒY@*b MDK2x"˖`qDz: v D%۠=J58$/'Lә x @FMj ?EFAƿӋ]JB :=V?;YM=0CsXu XF9}٥.+^5f*.~f@JMhB \. f wP@'D\!4UqZ~p]&C 2c}p'vi:a 5` DydN?"!rWJG't ,;˃0hyJX2E#ڳ6%  si;7vl-ma0h8Lc]QD9*6m)o&$_>g/|ľ0׷a@:ɚ-7֯\3!8v >b@ ]:C-YKCx6xz@1˩U/!%$qA#A |VVHlU B`!b9 Quقl. 0?sܧ4 (-A#jg`a%~#`pḞ)>( ?.sx,H9mK a55h H@ҋ0bνAB>gR3V \d rCpZKf sEc LsS Qʥˎ3[}4) EaP )a(#iťPpSia!  4[`]}.kzl`19 :OZX $SH4)H)R`\`@!PfgԤJJMQ[gZL@: /H MRY8"k8wJ6w̓?\N%d ;4 CƖڴPٞYQF4`MVB~ԬPO oj*,mgٸvP\ cإٿkl#_Y{M3\'*$P(ZO &T('*DAPBBPl|A BqIՄ bD(JH(O  v "'Q $y %)WݻP(-'QRJxG~iBYP(Nu/kAL"P[P \ țv\Jf I(yZk%B:tP{Q(&LIZ/7nRJg瞙VE7l6P5h#XWBljlexk6" nɻ| /!aYV:yO0*MP;򖷍 렀 ,rn.kX~ "8ױrtL?l.V}$"Oɇ qP7E0&vգWwM'1Ċ8Nw*E!D{!I31 f6"s``<# THPv6t!S-gӷ>Ɩ 2 kX TVնD>a >;%% (Vt\cD)+RU^' x|{}SP9|w|@VS)\ƭ]JHE/%eZvV8 )b!Q_@j܏2K 5#H :\W:l}P[W[^^ʿָHFgSk>a休1#Sbٍ$ҩtnr0y\8D}} XKߖFg:8@J"v$0XQSIf&wnȑ1#!xF6f}a'4wr Lc.Ow[> K[[BGцeMe ʸ^ܚtM[hSEq=8bG,\pa6x]p ky5!N+yMpkWԶH6%14ںܔKB4"* EcA*CZ/Ai磖!Ezt 2A9k)4K XG> ("V$tLbԁeꚂ߀X +"l$ <Ӵ͌u_$G0C`:5bFѴ> 2:JrK-Htnk5ѵ% /!Ř4Ӎm9bm]HD8YOUHRW7LqJI0 ޥI4E2 %=MׄgAd\pܔFt"tM:SoЯolldK'n tKo׮缱1\ +j )|7lZ `hFԎ"mc, aLEِnYVO$paV aL7&txEZT#.aA{efQl tM5'%&7p9/Lh4Jn|x)PFGfO-8̈@fjj^:Ce0p0r l)s4NJ!VQ5QJA2MСJ n2Z< as< f0BlbSs{~fj!ZLL5H!/k ںF>ހhk6=T;t3t.$z+ h%,2&ap3&8fH 2AԹ˹@,bX4\#, kJh@.rc_- H-ĚىH@B#bdB$eG{,O13niO O˖-#hF 5 zT'kTόoRfM>h=ݷ6[ƣ]8SdݭwNtK)EJPl8e66jR .ֽ[~;[H$>̌еN9 +VTVVeg>Cj&H.7HT&5B&~гw:o믿F~ײn̚=k<ݺuڵ+ |3⹞a}M%ܴkjfKXt'tةW̆Ƿy2-ux$RHL,qΜ91nn;tn,ZW[WRVҡC.xx<@ |͘s<#zi}pC5W㾺{ M{n* owyC͜n-^zyIƔayg~˳ iS^[]{=ocq7tC/MB ) drk;皆9{ɧ;Vnup[|%>Q9O?t":tyv|كnjdSr?nuˆp:eʔG /‹ Rږ=Gu%^_ӍiiC=+ BYZSu_uU}hɢ<䓪WTo 4M-{/R>}z2Ec=$B?#>̳\}՟|IQkғ hgsEp-RH o;}?,_p/~?ؓ=3\5Y^ L&XNo\@<tڠ{>%X]]]IIK9 pÍ7@CO:=xױcǖiٳ#<ƼnFcу/јj,h_"՘o'x∣xs^zEZѾ_OH,S^~fI@7u e_e]rۛ7=o iAVTu۶[q߯l.!lTVf{w5ɗ_ͼKm&8aE@: /BnHD(wii%\Е4hвeVb<o&zwe`Ɠ5Iק[|2*FRYVp(W/q7iWSN9帣 uSF.̊g01:w'9ByΙg{*MZLbpy捊F(oVX1ߣe^z ٗ%e֒D VyɛBZPI]ear1t)--]˗Z=hQKs]DCTJ虢jR kzNɶtmw8!2qDD։BaF&}_4}ݧ5~rRF د5ji; I9L|'@3.j$ ,إ.k|+ ~i-!ޥRka(|dZEs24J0+տwB]wL9BZ5ߣٖu5J4i' ;7sd\ɓ'Ov 57[sL[a'w~w;VuOPyϝ?y]p7e_~i_ WCʹ;dcO߮t* e嫼-n/1A=S#7BzsnPJrsяx?GYkSR,FM `ԨQ'zr:#6UͶ՞54L2dia'/L0`}y&nb8[;2Mp! >խD iGlq& V};vKkhD·B( i;j :ٲ0"*Qf3T|͗^x酗^ =Ym2g Xx-\tpLjeگ50 nc§2V,\L!L$\pk]]Z$^un/ƍG)M]Z[RphWSS3 Ӎ7ֆJ.!@iɠ:ekS.5,O&;ȣ˩N)TVx/02$s1uf˯#|p׽w5&zo?z/ҥKW^~EkiZ ͘Oxd}r#99s/)(߿?9!ݚ-G>}z 7H): Jb-Z 4M'8ܯ}~~𨣎F9id\ <^b d]A1dgx`cVϝ=H jٍ 2q3wܴP(GP)e:ޥ.Ɇ5]+ znʎ%%b&ݤyׯ_d2Y)6z~麦:cWϏb$޽{7cǎp?\p˲vo?#v re)%裎޹dPYY*E2a o)9/))qzE{$&-8MlSo럫LSBBj{w몉"H h0?/+L+3_ɚ BbW3ƂKgH&fJscTcx5M1 @:? uH}FY]}]f^AR{( ];r&sDžIkB\Ӵ7ix;v$ d2~5i44J\n*--Lkk>LEh4?L1BHIIRАVXD"zy tPBt:~c W朇o(缹ax3nɪ{)4trcz~ۜ4i&N8m~UUiX,a& Lc ɆO:uӧO턹s.Y?3Əo3'BN͛WUUz‡?U2Bj빕/&}Wѩd]񊊊^~!9&mR)0sFh4s7teY"4+++2b.b/:h^RJ***ΛIyaH)5Mh,Q^{> zor@ӴӧuQݺw<{J)#!$J9FizjL9cf4m{-\Y^^.p]W3V:.VѢ̘>_tڢSItݺk<olluz4#eZ566p2hfxqBHT}4#ш8‹/}ǡCD*Mŋ9FTcOu]D"v& T*Bm~{8N,7oދ^_^Rt:-D"iLaCifGh41q lˎD#t:MD#ax(eoF'4 [oپCdC2N !lێ.x*uԈaƎ;긣_n׮ݜs.3-׾}ʺN;if81vW~ͷxBӴs>cC8BzرƼ3"=7|w3?C2wGG=:`?ر㊕+<̾btCчg}' %~^OǼ7(KٖH$.^x޽_79򙧟9/'^4ڊ3g߁ۗD"X,vEu̹mll‹.[okf=S?|͵ii{G~ԡ[oo~㣟~_aagsW\J|·0˃ w=g_h8&b>j;yC-_'O 'cyMӜ1u{ dL7s_xi8`ւ;n9Ckj!7a}}?:>ɃNyϫeee]pыϿ8O?/%:ɲÏ8<'MtI'N7oޝwλ5|e[S~s~ӡCq_;c=Ч{4MMl~8D"_~}+꯼J7t㬟fQFc}˯|̘1:uZ`'~eYv~~jUB ѥK_2sE!Oq]cݎ;'xCϾ;.7y~ߦeۧSN<@yKus?WRZٸ>v"]r]'M^\xŊա~<Ƽwva]wuQ ;gtz /ۯ^,n=wO>x߃s͝5k_z:mЋ/ 'p@;O>ygG?56l ˲E^t'_}{η}W/>O8]۶ ҩ%\{aeÏ>cx'B~ /𨣏jWn͛}镗|<~\i]|♧ѣF_uU3$.1w\_}չ>~u]ғG 8#y|ӧN~^?lȰ;6wɧiMټtmɆd<'~#ԋO7Lc¥=z +;._|朙˪١$QgeǏߐl릻1J״Vխ 4ۖy] 2kg 93~tS_8a*ZbϽ:e?R{9%i#^}+bGnA,KA-Pv%?aC1TiYٳf/^8Q\6c6[lӹS7|S#ڣ<w~AsǝvTVlVj_};aFi?L[dInM y /{7ʏD$seJ{ /p,cƎ o =s/}gsO=V!hQ   \p#^gjMr !/}p~z3>w#Q,+TBI]ci\BjVA5 =F9>bQ=>Z/YdO3m~RR9kop耙3g+5)!]圃8s?>TF ]h̟f_x%%h)B?xw|;A24xXejJ@𸮮N8"l rC7F{_O_En:n"F5̙7g)W\vE3eZi$!<`?}g̳'xhDHjL@hL`ӧ|X.nә޼s7>B [oQJ6SHAP0oT*uov·u衇8omyxb-fm̝?w.Uѱ}ǽ/|`011_~esbS |E-B%%Ͼ}L˼KoCc=JJJulwmyם?(.!dEs}lcGxdxO?t#Gc 1ޑ{c7nF9dO?>/s1)5+45sذa_v%nqλLј؏2Q)w~:!gmu!ÆXZ@8g9 .ko؍(5> <:SN3gͼx;C]}!wp64']y5U51=U+WVJjjWԬ6,Cz[`\pIX s?xҤIRTmmU]e.5W\ӥKo} ǟҴ>'nĿ =؇o~y9,_@eUkkkkjjkkXA{ŗxX}NXBF؜XY.~~Zgs}uw%yL8qr_,\4e7nNnRCCC %}MBU 8$bx BHϕRR)J#^{5 ÈFУCqAN<ϫ?I 7|2ʄOmۮ .A<-@KM)bQdu]BH</Ihzd2I(ј 5MBb1dCҥ>sI\wuAbXx!t]Ej&dj@}}eZ~xʔ)PUUxŽBJ!2٘ c,ٶ J뺙!R~$ 9S__nNm;H/ ᝆo븮26BOYDhuҙk )yut*^!2uǡ0y/+- ۧ$BcRJ渰g !BhQJdx/D#e9d2۶8)d]}]841ƢhI$wp/g, Kҩ4=J(nF)eN.|E8dbu뭷tڠxPӴna.]g̛3.*frXUUUSRJ];t~6j~߃㗮Ѱ|ڵl﹮dɒ fwxϜ:}׵SA9CcJ*bŊ'XSl-UWWWWWSͻlK, K5Ѩ8ںܒ󼺺y`VZr -[N%a߁%uj'Ԭi^ڦh^|ѥK ) R0,GHfHj|h-rv'|bz#>rԣzq@N}w !A [YpNtl_>TVAaTWWK)Ƣ??-i=X,veeey߮<6>(]v 79'|wNWۄB8cG튊a!׳gyȷ|A<9^{{1=ozC!z1& |_i#CeZ 7h8cF׭>xZ9 $ D>mN-yDGbjf t裎D ,ࣕN5MlYj}46$O멣{<raW=R 1c~|x%\{> Bh}ݽG]J #?}z x(6B}? T/N(JWE}Οcf,g .$$T ;~b}ji!R>m<^߀Ar)eImuTR?r[3 BQ@Μ:I%+fz7/sO?7>NujKH([%Qt+υR( EХKW̰l7"QFaOyN9f,Ydͧ565nr 9O?Rn閛RԯC?H!7vL(lu¢BቍRyIIIvn->}ȑ#_}zuC<@)勡!Gh$((.P(rJ% !(RJuZiTkz%QBۍ@YC&wq!D>߬L[иfu]۱8h@_J빊(ꂮ `!qlǶ| PJ `I%:Tx¶v{9dRTy+VhlJFQƙz0$$9#q۲=J) q?BgٖM! ѐb-?8考***ʇOok:TBG6LRJ !RJq4]c+cLI2P E$k~svu]]45\RHu+Ō3>x`D@ \V(.ƍw߶$l>3Ѩ 0tconN;G~=tq~! 5}츱ߎv!{n茲QJ^\T:ON۵kW۲cOt('19 6FIs" @^9sJ'<_c)"l~i.],"w]w.+-8x`Aq唂ePPi\޵{]6 Wϩ5k~W^Q>h" !qy~9;b PJRH!R2:gΜKϜ9s]vުVB ٦͘6yd5;dEך[7t#d>;ôΝLkI)WsR4njӿOҲR!c"B 5_sTθۍ8_ė VL&w}eYo橧8NĄ 8dDo+Ϛ1kA[)S}+ݯhΜ9~`/RjvcW34E‘DY'JTk1j,\Ыg)SD>}DBe˖͜93cgŅ;l_.]q־C]3>z>#;lCN8iyry_hѢEc})H s bǍ8ζ'JȭmU_/]67_<ߵ\;DzɼRe{l6;~l& O>:tX`… #}-,($ RHBYCQ|5B83`+]H"Tm/x.%1A-m!Ra20 d\~mvUJ#?bO؞}|wFȘ={Τ3 ‚!<TyU.!$Ji"յգ`"IҢvUoveY6mǟ .]2[Xa{!.U (-ߪ3&Ϙ\ٹӃܡ{dN4me;C4b:tj40懞}zֳiԘQ@%)Nv[{'B,^L&cnݻEQv"׷c:\'O2k:g25ZSiy]:wٷg*Ξ1g.-,(RJ% ;skͳLwݺw3B5Bp$(L(6g_w=~7kcS9sKKK{u5oYf fw{f빾 =H"eiq K8[boQ^Vn _L)%p #2J'c;#:-֕ -]4((**/RR@zP8bἅeҩXQ.n{LvƴfT⌯Xb„ )#553\pJ վEjNT0L5S&R{k ]]0wA*,@+$IFa)ڣJYP(.{d3YTXLjxsnPñG}mRuӦNm i,}nGq 6ۯ ҕL1OyL4LNX6ufփl5O>hР!W2)eYݻvX, [J a 3k5='[etCw?y 2(4{;u'LܮsNg͚e KXt֯oDZ?ŊBZH{ u _|G҂mۦe5f_yBHhםwm׮ݢEef2ʊڏ8ftrLZY+cUUDw~_~eZUP3s9sTV 2y?ѪU=bY3kfMZP/b++>ӟ&N{ndeeysW4/Tgqvl PI+۷o'p3wyGqUYZ;4駥K98d;2ڷo՗_^UF~=Fdûv:j%%E%sgӭkW.Uzu՗_ ݾ`!hUv:o޼( aTgXgEPL(o737n܏~5=in\i"p %2J빜s뺾qtMzg Ͻ\ye JcB9RB4M󕷜su5M 顱cǎ0c`ǗH!qēR+K| qP([vaݠcO?ֽ{=w4M_xWu4 0|QJ)("J]L)k_EJ~cleD"piz7h `AW\yESSŋG}m* 8|[ow}p2-dv|lAL:N{#eNj{}9?d2.>GאW0o?o;+Um4{ Bw}8m۞ݷ9C)%8e]ݵ{ /UvtMM3e^tE߱#ZH,K,^O>=o+yi]O[8oࠁH4̳<̚rAO:N.5N{Ι3gδ9Ң.wާr'59GQRWт鳧|͟~9:vk<@sZKľ!C b~Ю]8>k9,"Z9ǥPVH3<3w}wOy{ܮ;zyg{/<_|FܠE4c[a~=vۣCUN:=c< 97q>ҋ}EG8:$ t]8i➻ٽwH$ҩsƽڻs=N;崩ƌX>mH ח-_ְa<-9F=q9wqt𴟧 Gp m])_PXXx)]Kz!6Y)W)sp}{}9sUt& s9dSwo'8n¸̀m HpweJ|J(әLn0[]tE'py {Ҋ ݺv{ϽKyi4{Rii6[oswx聇ްGyk2ZI[zG{N)Q?>Ãz.DžP4ε;\`ټeq6mS=+.)L7fR*\xv;,^b{3'Ϝ9yƵACں민~ԙ?|C?g_^TӔ^xiUTÏ?,,)T胏eϟĎU+;T-<]xsW^ WhXЃ-[̿D:5W]sݷiJlo~>SO=SNK ())گ; VXᇣ^5Mb5{nBHiYVʦD"Q61O2ēOljj(YVS^QkI:Tu(/+ԱyfWeԕ.׸co f~ScS}C=u}/~ ޡ}N?/S2eJ2m_~I>z3k΄&{u6+4aEC.]83i_frQ,)/*?{gUתvMԘjLDk$ XEF566j2?|Ĉj̙-2 c J o;e˩M:A}qmږm̴6KJwc}*NgL8ؙZ׸;S88N]]]Fflgkqr )liҶWF4Cw#((.*\0ȸ9wRJ_E cj"|cj~p Ͽ';s[c[vqtI{xۍ˖.ys3qh6F_dx0]a6YP}U}avŕWֻ̮kzYTҲNIRx#`9VaI!r=SiBH.#`ye쥳#$fh܀u <0Mӟ𵡱QJYRR`ɒ%TjUP(UVV.[СC&EcYvMhB$lnyRȘݍ/JeRGx_;nc&W\5jTϾ=өЃ=xnk\tI.ݒɤ|w͟WRTA±v۝tI?.h,ˤ3Dto˲Ďa?=\|U*_~e8W_?wsgyE`谡'qigv߃ ?hx0SN~mZWRS&s=zu#:kC];u!}utKKR.lWԳOFr-u!q4hPn>Ï<2o57^SۻvZ=w~CP0k{']wcv]wϽ<ӕR1k-۴L۲zݣw]O<vOӻܫj[ƫ4펇{KUSfXqٲe-zL~E}*Zbo19#<.ݺKآsUg|E|]̈cʗ-_}߁߳SJ]׍㚦1D=MTJUVV(..mu6n駟l25jԠAz=}Uq jvEΓk6Hx1|Ȟz}ܱe2#F@bp?/->~wqWcmYg<ࢋ.'Ma޽vi篿?o6l؈GDYo2vml5 _>Cz筰s>Y'㯿z:qwsg|ooi7\}=mʴ>O>t i!v>̤9gƜoMDϘ2laf:oJi֐n03'\cgݮ]<.=˾~?[mI]No@aYw~^pMMM€?P(dvŲiVg~ǝwض Gs4S$i=u_|mN&htҤIͨlŖ{M5zT]]ҥKsh*sk#+Rmwڶ SJi90|{H$i OBz~ )i]Iҿ(K)f~M\|!`=viםndS2q?+4麮٬i#a̖ieͬ-;ﹳX5idgϞoT2B,r\wؒB(cu]!TH|]v -Js5Md3L y?_ic`2fYZg Jy)vΤ;u5j]x-Oilh4Ms-w:MNSS o[/=B\Mgk>wU(Tګ}>h)Τ$(.,~wTe[ťlֲSHj;WsKA.˯E-r9!m٩t)R(wٹK.k; H&W]z!wH85K"4wiں#=Ѝ&SJAW^/;Sl5ğ}6h$z珐qƝqǏoYIuάY8k{;Պw@rB4%{-OV[|<ᭃ1rkX3 ?sd8NX1ɤi3ZCE YI"ƣ 3v2̚*GsG„g|-+$Տ!65f߬\4-cʡӶ;xˍVB,ae,WY_@hhuMu7"b]d[ FL>>TJ^peDh&&9~5WhVPPCKD*yD7Ck/(Wx_3ߔIDa#[=G{'1f0H$od8 B!#Z뺖eY c[KufPC3fգ`3" #[8KqI'lrn*>_|z qպxM<~60 +n󶫯zcdq翫'a+M646hoBX.]@ծrE}] n4N];Y{kRa\}՟yaqy||Db)x>#j+G )`U!t[s~8 o.ɽjBH$whm,_ܶ%KlnJKK[/8ZY?K%lx-6_ [lNG@tԠtt )LaI0 C†M 5ѻo)%ᤡaߍPi HIoBDAgϞMEeEh~>4%0!RlikL:ġ0p끭 esuM6Y[Z\*% S1i0 B=Z_es^mLdE.AMAR& 'N8dmx:Vu\`A(2f:3kƵ_k Ǽ ҥK4J& !EV`b!j= Up¢] OӭєjF4M#DxBip^>&/}CYfc¶<hhF2,*(Jgפ2%<3BI.ݑ*+q/>|DoM}Ts{t,oGRN9W@pC<ԺA %ғ豣7q83k5GtB .PPP3! :n̸ǟz|ï m0GXթjk '|ӆv&B2c "u^'j\3v V;NPJWNC- +cI)=1A)ZJfW}JͷPcf<:W*=p /yj>dɤsyomE(c 0`P8԰_⋈N8p(ͅ+!#DZ);N `ȿ.ϵ\Ŵ8X{D*F& 8-eGA0Z#Ãqhg'ibGۻ6uR> 0`x:t_B2a$u30KLحvEx"^mO>d7dZVSED10^8qt[8om#DKϿ3ovl˶<& 'o-F;찑ߌϿ?\s?w}[Jt+gUsS-_x,{}QϷ,ms?waG<]cG^p~ [_g2_J^{̙1[n﮼M^p?'>~m((B HH g֋/XեꔓOVXѮ1')^Kn{6Ә);7rڗϘ9W^s5in3 x/ h9w5NZOZZ< ~[oumwҭK*b5`p3n&m-RxuU0}Qa\ .<{<ӹG ҹvrY7vҞJ,jaeҨFMA",\e b0鴓nݸ.\FXW?E5Lqv7"cY2=uz*-?7TֱVʇ1[!Ҡʍ#Q]VW;Y'\pɷ:?̚0/Qk<@NiG8x$:aV4<`PAq9!\la|>VNq3p h]Kwd=_eE AoMek6tY“-jXwG(iÏi>sEŋ.zꩧ?62'Yo}](??4͒>|mҕqy!guV8޻{H,?Xc|޽zϜ5頃>'ge2^aAh95ȇ&mo*נ'HЄ#[nξ)Oz4"#~0܌sDCTG:}4)M¦J uu7Z5 BHq#,!}/K"&NߺU /npO=_7fTu2-e;zb˴SOS3 %ԓA G:.ܸJ~~@UnPY&|g׺H0ql۶3Z(;?BmB|iGqSP7kylCԋT?M<_{]vy d#L@Ҡ>nQt]ACtSB]̌t:niiA7ԇCP( %T*bȚ̝=eTƿ_.)o ]C5o_<駟kvlL~Ǯ6$͎=Jc.̞5[J٫w5ܩP"e8ጲh4DZ.{d2lVy5.ݶ@ې;=^K)g\o8<|ܖ[zޔfH1>#.į?t-l9l*w1dcP ޛ^lkntrΪ9+*鯩 -n‚L&㗁b:94% l)i9YCi~Cwmt +UDXt~3WYTҨ6]3-W iD(u5O裖4)>5V/UJ YQz{N'ϠAP0ׁz"8ԡ}!j3QFjW#qA߿kk:Tן4RI)dRJ(xPHST6ezI ]@Ҝe52LÒRr;UufLѫO//>7\_s5/>~I'*ʋ뎟'| 7$ M˛N{EZY .kE!#4gkşŋ_yRh#|8>!ʃ [:]}]W^q븫&}| ?xI[Oy|BzI"W WFhn0 J(y2`ld2v̜ ?|7o, w۳ÊeFKWKV\Q14 6+ ?qeW2yӡ{Գ?uE )F* ~EǐWG,Ɨŧ>2%#jTRK.Rh@a+1~,|KkKB5C׉ANr‚\eҦ & ++zjՆ0ڴ!Ąfx}jNӛP}pӕ7rnFƤ&%禬V.!|ҥŕ xy;XlEA7HeRՋ eeeEEm,2gCEAiEҚBH4ҮC;2on]I/۔oO79坪:ia-#Too@nJϝ?7d(Pp]7Nˮ,6mYYwan!,O8of]v+**+|ߏ6;vϾoF~3m;avUl~ ᗟyjHB|n1G}F[D1j+lUD~pV#Ud(,_5)ݻRW%{]|鐞C\m# W^~%!ˮ9Qbnj++D"lWi'mN+]W >ߟ*W:Mc /Y.^x΀x+@N}Lr&={;iz8g>p%RApG@r: ETUeKjPFtI,%h!DZo9tSn^s5}>}4| ѡc-=#rq'n;v#7$'=عs^{C7رc]mo67fw⹝D2?6(,ʸ>6'cO]{gq0∡y:hjsqv}l&w~G~5@F-w-l/Y}Ο?߶jɶSCk,]6]fDsXB2)I%" =~÷;u~7e pߺQ\2%ֵ-li5li$͍.u37]3e]ϥ9˛]" EU9qJ`8k^D' Ha~Iˎ8xqt@H2( NTqd܌+Ca7GavF\޹_UMc 9&PZ!Λʋ˹-^dTJIgTCc비6}1#@@.x2lɚEq}aS+$lAu" i_~~EEUc;ӡ^52G5CKӎpEqE<SHq2R!-Ԕn*))\KyTR˳B4Ė.[j$h86¾M`\BiW.ջmH68C1-3eEu=WAA ֡c{81scxmG:faq[:X" i'H"tң<H?(.)V:3_^RZkuՈIe5_c osx5ՎHhOfE^tӍ7忯*M˽WݯŢ S).>~B`X#GU};olZiog||{Q]r-vk{cS#?4iҤaÆuuKu;l_i4he TQt}.KXiz^G4i={3*. m9& mqTBrp 6xaK'BAIPZzT6kBWhwbk.~~߃צ|<-]Pcvh(\է>Uo M>JX(̚`]u$ԟJHA`yr"HiIJHA(a^QQn>w Q-S{)']zԠlӮ^Pqݵnw܈n{{͵C6 I%T8GLoCaշ̟t'kueTp8떕%‰t2]T*IDv%ݔN u ;w#Jl&${*el*_@LԤש}'FX94:&y@G8kWc6{Z8۳9Jo0X$O?O<gYg矍1bMM,o].jH)0L\cPOyk-^C0muyhRD$TW^ӯϘ1czG1cfc!JW+R{H) %Qgמ7xCE _Y2{x3"p[i;(q4fˤ[@J[:ԁC)5_7/SJu6ƹ?ZI$!D>PPT^#nCv$RJ"6JuJ^/*0cg/i,UǼ|J㠡s֖}uJʈ-He2eǜò' .uyRP9݆#s$RR٦q )H*TQ6}`ߔr,^"%!9Z6Q}A𙧟K%)3h"sVUeJvUj?O][)%TJJJۗVt@G2(EhwTy3]TJ9ptIvt+/Z9s!EH%}/RSN9ᔵjbW߼B$&$\h7gI8'z8ҲT*JV++㫆1f&d3Q# })).9cyLlH5AF_\:[;g "#eqze;v4}+E" rlaK)%ysכJL23d!OX`I+ R?){iLuڧ>8m?4'_jKw~?ɒ+$MW!?RRIHxMI1-|͙V=(!ڷoQGyH$$שjǷVBtcn]}֭:<& j=ll˝NӶfί [͓^ާ8?*-m%sݽ_S-^͟;kj*WeB9]h$5jh)H$xҭ? dk--G;$D~sڞݺw3n*ZlZ^Ou+#Zt1}Rh %<B'=Jz =H)5M3kfW}%\/ݍj(Mݾ՟{iM<}3Yu۲ +\G8;(WoD& *|1`H@듬 ҥ^xt( /T&CBڰ5h2(CwӺq%$$4|ͷk<&tkCBՈFAmi3θ-X(:i=(RP[n:{0!tEs>֘F=j✇h/O.%DJ6iU  70sٮt=o S¥ ABsY#̳M ߬%ιUϏM&h,B BZjBh_+<~GM0clU(u:4u\:c;vyL4Ey۷k?k֬H4b!ğ;|5nCa!SqMA(m7?lAmcg/}&t{0`x\!$ =lt"8't]ոHGBjTs@pt{'pznE Kפ J+]~Oz.6=[@pm|4I!]p}oL1)*7XO/\K.j7iY`/>U븷\˹{Alb*-_mRlV$8x<UVV?QX\i׮]k߂ M~\|IaaR0KTuJ@T޹aÎFW߄RQQ,WBL(\ߜ@Ͳ}Ku] iݺv /.㯒If6ZHg}6qT&nXĢdS_xqgtCA)ℓ_~PҢ\kܛf|!~@c2euV47o^ݑomXVVfFN6vq~l6>v^\=}tFYέ_?ާ}*QiڠA~SZ<,YXp sMkwHGTA|}nꊢ)NgRJ@;*L:' xPJ 0 cCkQm6"S!E2,,*4XuǹN9]쀀?]_}բ¢]eYڵ{ߏc/rh:36v ̬_d2{u +oX:-dc)V[ @@@@@L0H*:"qx<)BO?_I "mmq ƛw@@@F Bty|vB\}뭷Oyҿ.׿.}wއ?Q.ݔ ˣ}@@@D :"T2'u]#W]uU***jknV 8GҡP0#XLl((k %-'ӦO[p^|Ǽh'0-  MeA > `@߳.yXhH[$XI?rgc# ` ,kc# `C% MO 2ѨpOP[&7vA" `%774 jP̃ݨ"gIaK;po21 s9Xli4%q(Nmbl`xX7lyh26{  呂- ly$68eBhOb@hz pQߎEc ;] FCò?0uԩ]v٥^3ϵ$fKpK<7AQ/&-li3d2??Ϛ>kکkeiӧ}qkG'Xlyx) @|s+@޴PkM7pyK BVOزKBz{@ .`-*?&7'+C<;{S(s>iZT~#' .iN^됓R>qx^$XŇ~l@ c;MdS6n@"7?? `%34Mz3N(RjQp!6I5xOPkD$֨g3,ZYY7 bfu k".tϾ٩?;<8 'CΦ*z&€5/o ٮ< 5SgSlڀ?UJ@)gzꩣBœ2M Wi ـ,.X@~Bȩˀp&9BT=Ta@_ (4@^>)TBzP.}뽪Dc\Q6v|'$0`C.4Å*qw;-(]8h% TObhvhᒿ:,p?}qh`pl[=?e?}@@_f/KߙLx ^m]HԎm :t+~7\ lrMu}?`͞}Z PYvnץs<" `/-ߠWWfo}[eRR! E8bzW,Br[OlP   C0Ez;\HaaBY&hx4?8^ z B v$zL$Q() DJL [ׁ߽ bD ٬t:2aZdXl"_A h:uW^WQFQ H\!P?jKOb?Phc;W^!tsط(ZyBR>޿:1@H0X;[xl2i.ZxM7ݳkՂ 瞍};4 [)PF}'_t8z fK(= ݻJ d6;V4V[IrYgu?.8zoF_$!ܕlp2"p `ă?^M>_6DhͶ'O\<=I7n:G&b*ѕ4SC<@Y@n& 0 N(3/8zRC~FZ WKlB}Ѻ <aXZ`Gv޽{LM M~:H"9\:ҋ.C\g*|Շ/E%900pG~u>NB!6(B,1^o8QѠ-~lhqئu#8m`LzRBqsI25HH)P74]+,--&|U5aPFɋ"D$0(y19o\XX]6kSACl. ! TtД][띙n?D[krP\˽ucC%G,&i3`L`g͞5k_~ı:N; Ņ= @rKB Y4e`v9آ *f#s{#k7%~7:}֐>hͥ!sۮczv iˈllBhr@pA9!^&-.,௿c!BdnG9 i!0`Zf8B)ѕ,-8Y)/5alk>qsO+߼*vmS|'^)ow:<F8Qjp4ߓL. ݴ;s];tPR^}J"̜sCF<#b")6}gF@@@[ <8p8y5f:T@ܴ&z&'g̘A׊3gPXŸ/`KJJg~㺿=yt]Owh>`ܢa nX'G!04_r%g}.F K,9s̜[`QJkuRDDj˃N3rѹ5%3]`$}H&S"֏MRwܹ߿o5 @}}@9B#L Gr50WWv* 3OЛ%dٍ]ve^ܿ[nL\Ub[/BJ=Ҝ6Z)٪ڤ_h WoPo{i3QE)(~ʚ*}.w}5Xщ4=e̘1&L8}эv+vDc,p@Gr)ko,@5 FfӒ]6663+L]`J30ι3ҕpQ~PJ "7BI0JM/<)pFzIHّLYqճ#,%Ke֤u(-0!]vmG&͖ȁ=DѻUUHdE#)/a,XHHunG̓~]Yqէ +TJ4ICHC'jedpM3է f. BX"MRQ$9%uGU2}aЍO:LEtIB 8qF)%5Kw.kXV5")DRuF0*(:U~|6(9bB (n$ܐ~R;=AAov_dO1AS ئ (I7\+ʋKba0+..HFѨ8@+4'EֵSq#4)[mWi@͸i\af-/RWͺCzw,*GiB1ORW0OrV{!M*azv۶}+L`??g .rbB%4իe +Yst*vW ;UqDF0гܚ1WT8bXʼne˄k}P۰%Qh80н̚1 Q9K acp3nS="а/F@kDTg [Z(q (8,E@"k\DzWZSg/ Y4] c`膡\㚮qΉFts08RU{ԠP1;z촪ʊ‚ҊN6T&վ]FuWl~U"@"ϡˏw?>chyyU0B m輹bga6(/{EQCӠʒɿ̿ (w*;meK+FtiJUv?G{S6OT 9߹glu?gΡqUlawfhL.m噖kh/ee;iua%K~.-,ZCz/MGT #X~BfQqfb+4AHveɤ--Wei$$ 23S9WQ'a=ꁃR* A:D'\PP՘uSMjPl'_t1_ԫ+7qQp1|јX$;uO] (?b4b f^0B"XH7ߏ{YIQ~ۃvD/^z옫o.%ygqJ !8c޵gמ9˿oݺ{ˣd¤#IB\?^~u䎛z_qEEEW\oEYcYrW-\MVgŪșY!?=Qnit_߂#(+a0Z&Opq_O8=c/ƴ3w+ 1M)7K/~yZYo}qڐyEK.Cۮ^t^y9οqWL㞌i_{}h8Eyp bj>-֮|T+ՖDYqK+6iYVVeO[N P-?G[BӖԸh%eZ"km,2Oъgidhmh9Zq%t-iZXtऩPZI f>C dKB[S(,Kn~ѣ*-@ޖq  _T,OB0ԩ}P^u32LCGgWEV[d4n3ӘnXWehӱCwmѩ~W7K|uh]{ fO:H>#`҂VXU|ُyU~1KsUBb֔4GRt5XTF8K:QGAq9!)X B!pVpPJP@q%2A%,_p/d1!nyٰbNL#dYNO !$HXkF "M a,ƙ@~^hclA;#϶p GD$|O8׶aꆬz]@b^,XꔉnEē^Io@}[r ̸.P fT-'+Mlbթbg9wU~{4g@tҒWYPG;<~*ѧPæ8[:u>ԈTn߾U{@ӃA`jDb9$r  R"KϞmgMFD"8Dp!nX_$ [dun긑N9ˑ,)t #-3#O-th.]u]z]ŗ|zƏto.\6w[/MhMֆ2pN"Qdl:Rb6QZ MGv(/G$6`$PV,HuGQ1(C(]CZCKYGbH@(@Qy(&Hg*O^sc=x N T7-$hXENH-a7q]3OAx!QSN@ 6#s(FL! D %)'3?j&O(EQ1{<ѿUyI ~UQ~x졷x YPIT"Ul)b8df̹?a WW]4Ҳ-WeV.,\"+=P!d]1lZ8&&,BLNL8&LGam׍ZWvaVtt+'Rexs Ct}_wn/U!¾CO$eN'ދvO+᪳2dcw.+6z!v%%6 b5Q oI-'g+ y ~U74),U눏Vdr"9C._!:oז-BrC\K H"Y/L'W$/#J<'7tEf.'("헏vֶ>mҺ[vvnۧ>&2I3OY}Mؽk>㇝{OxaPl&H,+N9@],kvN  J xbhȘco)++3 !珺dǼ?b5xhM *TS0UAu#RQ-*UHնcWDZIvN{IV-4lJ.XihUQp-'w"JP(=+0$`ik]]F$u̱p ө(_'eddMZƥVπ \.Pӵ:NXa랢D6n,=E];g=g3XjY"pfHh\X0 .XU(NK *ʋ 44*"% UmV JD%IYk׾_K7hZufp!=վ]|k+fY\?WN{xQ$Pd90Hl^6  RnDJ#3l)yNi5 6W:"Ɂr jJA%"!/Y_I1V n[+tJ2Fo}ʗ\( i{mؔR*s>oeaL9m*6ɡ`"Fu%94uSe|dC7}[bE!(O,xO:;:,A-~4I39vdYcIIɀ:t"ʪ;ƛn0tЗ_}ٴiSSVC(PA\dFLdFU3 *D i]8iۜ@m;K@9Pj}Z#.U~@ܱl @ 2c"ɩ ң]>^KJ88lgDor啕Z*'CFV@8#!sB sp#A'@v+9'+=zd#rr޺]NTY|r_ws_N|~km5]W"gZQ9 +hfK8VR;9(*GL۔0ω(Yn=ŇC:PCa1PZA3Fn=Ň%԰2-nGcKQ&BS.Zi(2-E@Ӊp&0I$ CUDšL)Z;3&`H9߯۵egf"?Bx4RpLM?-1 R*+h|wfŌ#mC 1t*OkVyXWh Y騪DYTϛWvTۧ5F\[X9iT<RP 7eHЮk!Gn&*PAcyDo r3Qt+(";&#N@VFЭ &_MjvENY!QRqr4*[PU@}4`ҳÆɕ\vo?ATE˲\O 1S  .]SN ^/ =qg=L Um͏!;tn܇TwUvszb^VM76[62:u~olXS[?bsJ SO0fLA{a%D%/_Q?~,g}&@%볐0MS/|#bXȣ堨s>/((o2_z%EnJR9p%P֭j 'Ɲq!ڶHifs0 f0o*Qo-v믽4FII>1vmivV[UUUbTWGWUVjv$1Mi4ـHUn=xJAEX b%OFԛz 3v _~ecNV]xx47j:7p!`; HB'/~ BjP?;um97( -0CK=KOD! "SH=c/IȒ<9cǍZ0p۰EQtN Vy~+S ݈C$@֩ J-t"(y8 l;ݍ* $CLXJ(C=[W-\1ؓFq.G FRοŅRNƷ F:s.;  ڶ1Vxϣ^B¶m۱x -xŮpr,w!(>ATe%qEDA$`aD0ր+-<z ߐ@E5L pEPRsP0"(to^P0 ntt Y['V<ww?"8HB>67%$8Qr?Ǵc'wR ܰ EVJmǍ~H-n^&ŵ=#'2+"7JYOJnwWFO}i7 (jPk>DE穛Kzj-YzrM"+J5%K'a^ƄB)uGo@N0n8D >:j_[:|RiwqE|މ:@QARh1]ʮ=Q*kl~S@]OW; t·AꮻKIRzmڷ{GFbCs<  o-&t/UT B,֮]syK1S}G!pp|u߇Q 7/_xB%J8,3`'l*}7+ɕ|`/r5fw^BUAo޶ݵscFPmڠdppsΫj uܿ= BUYxq~~~j5"\r]/_ۛ@qŕ,N8c3$S&hou@ 77ջw[TD˰£;q}MuY9 z N D-@"G4x+6K~ pHDL+W? "@Z ';'=K P% H$dY~ 48Fmvwuɷ(5P4[=I'B!p8& Ap@X#+%ݻ@/?iL P"6D77{^RJGuiMj7n֑cF}ɡ=A8^b .z 7vGB7<}={|z^={Id[IԺ'}_w_v޷sNV'G F\0)*Rf8NH9r=Si*w駟^Q^1|O:yթ.ԞC!PJM\%ا->`57ǀYeSGP]\scϫA4 <`'y2Q83_xᅥ+NoJuuۯf<N}ʪ{;Q(^2sN>HI|ӧO?F\4b.Ԟ8m1GD1Ci'r @ޟyˠiQТ Y4Nmk8ef4$]: .`D(Z59,YŒE90E*JWs>SߢW^ LYȒ?k0/Hu (IMN#xy,pt'>3z dXX_Te{`P'+?-2qĹ? B!q&0؜p4 cKs]/&0¾0]9"HU]wuԀ\*I1׮X[+8{,qɼ/(Rc;ȥ=~wr. >N]0siso-y{4{ (>e%6a„oqTem={o >ip:b9ͶE1ٮOq˶t]ӏ8,;v„ YYD 6lI|⤉YyY+Ѹ(`Yo|.Ԟ) λчgˢ9sp*,TqL H$ITwСugav҉'%ͷ\h3,`6[3ߺhEO?tyyyP f4m!C7cDB%ȉD1FAE*#F g_KǍ7\焐%&p]#6a:vx]wq{S]cd#.:y=z_> $QpDy詹aS{{+hfYV\WWU3H肢nɣ!Q Wa Ƙj] #Cqt|{NztDa;? r?0uƥ̛J1'T{iʲJ0U.a^pXu@K6dhGu n oSdDüUR/_WL *LIg[ӁVzynI$&x#=o?{ F R낶Sћ<}W:c``́H۶='=o"Qo}YnmN"ڥ_V竛4%9YM'4vŨz 95H_ԛJZVV&I9}YgW܈Z $mƔLnɰe8 H L4 G: ?0j:ǝۥ||b-ͯoaٽ[N~}j"@7)0Mފ#.kMS7i̙306LLmCU@w YT!DEQ%Qj 9mۖi9C#H6Ye[@ң±˲"N<<<<o?د.`i@)zT`ǞLsH@EB ѫt!]o[oh(51p9NADQt1sqq]'MBM˶ۯmӦcK R$I 4Lι uqP(?p0l2j/2$g]6s֛ՕՇ~X=R](ƁboԽ1999132ι(7tCvF> f̘;aIiD0,--?n)'r=)fG=2񲉿k]q횵JO:^xAQ1c-xC.'}bˏdEUE (Hn⤉JXooqĘ9uO%ʊ~wIgҩKNZNod 3ӟ))+mo7\w?ryx4o?-yq(FKLO?ԩbڷ.l**/D*[-Y^7<>qDOHxHlj{vCKJKR]]4͘9n$D"܏k:Q-|CEZBkZl1|ݓ_xuŜqpXgMv Ji$&`4Mu<<Z!DcG[.榁8]t_KX<9[((ׯ[^263=sjPݸqHEAܓVZo{:>PN{!ěIJE Hy[-߳m;-68OY&VKDUUXL “O<9YO>d?Sr)J(fpߔTãQUxXtOm}ѫVT0n܄q$:#b}:|ɲ,' 7[uuUp<7MA}22>lQ-Ŷ-׵uQUNl¹眛Byx4 QOTDYXi:aiB!U2lˮ슖䔢 eln6 $ӫOG Gn?{ʆ9ֵVx.- yOzxx\S]fA؃meYG" %j !` L7 nz/bn?+ m A]9RxF7?N56h-OzxxL8$OHxxxL$ =< f3,Ѡ* Uض]VV@(>0TVcVBKx1MbZj-rgjVh7x#ιmؒ u@ 8ִLY-AG ;Ur.`$:EQj }5c*Xj&CLh JvXlYQQш#,kInčADIHTiƣpCJiaiC,#4O%zǽQ[ "!*PS"n(탏=ys?G*#Hc*pb* o~_u6 B@ZsXc9pJCr'7J La @\'#ؾmH,Ba5+S2;4h;vQB!p%1 JJ!"wB!`SKV7t;H' Y .TnSkC @mpPS!B!Yw`B@yYy+WLR(DU1M\<@Z߮j8 `vc;Ų,’2MqumWUWYfmn$ ۱pEVB$m]ce~=h9;$GL ˯= ꨲ:OX_sp裏.-/m߮C݅}@`${1dIy`3O=CktM?!=q5I~*@>Q[?N֧BPVfVzZO)*j8NOKO fgdef!YeICP8(Rrgq8TEyϷ}g_h{t഍;' GiClBhC}gs^y{wL՗_`DW/Ï&!vYGFlB93%'=2ƬS>?* R2>٫֮R}Yyί7ǢC/Y>Pc#.Fg<{?r:㬠Lϩ]kW,.TE`xؾ]{0v`1#BPBKX9h=e fPT7JLf~Gt!Ț6uڬwf|c}%.p؅yyq;4hE`B# f^QU/ѣO8RqZi-š5kX/{7}0 G?bƋ3aN=¶}S\Z,C?_;ؗ|y#.^dƨ4uX*iiiwq v" .[Cihea~aFzF"X|)yͻ꺫3ҍa2sId3;%E(h4]ze.3#'{%>^I:pu,kЉ?5jΊU+~C8-/zG\0bԅ̄7dxlm-ذ=MI/e04C+8MJlBXCzsJ$Ij5~o[v*%4N;kń^yuDiIvp͡ jnfKE&*Pc?.hueZt(nsXtEvfvnnnp*c̗g/XbkQ^Qbh_ W78#"mMvl9 g;6c3+ZcO")i JV[ob{["O Ҳ΃`Z?,ر 4Ϋ,jӦ̓>p-hy0Y4hPUuUJGHM±i㉌t`BsH$~߂XUQQQ|\cX,/?ύؚj\\deU快<lj{:!a y|GƘa|ū7 LNΊih`7?BM*mã!Tʉ$H~ 7hHT՟f# *##ִXx47@#PN ǶW>)$ M%MDǹj\K8DNƄj(ʭyb vYBtݎGsǓiDv7rEͽ7>*gg D5w^ׯI£YbqٺCVMîk)0~UקD`Bsmdݷ+^30|撕̬ :VV=mCHnzh+%N:Yl/~$Q p^UFlFfJa@w2/?Ok̵ݙ{42D[H8z(2;w'<`SԔGaСwsν h\-z 9pAY 5MMpA!%~{L].GS`F|~o^BBߴN7dxQIRSU){&;Y$ރDP_u?ߌ_2t7-mSf2-nv @S Ԕ$M4Ș(I4 gS-K  wЯ_طKm @OL+M4wWehf۶iQ"UۧE'ZLkv?Pq=n$ $4|B ˲0Sr]@ 00-qzŊ Ҍanb"ι(aS U K9v|l_c7)[qֶMaÆ8ō{ŝUaaÆ2b~ɂk]z_z饢-,,>|/XijpRPX0/RQQQjv--~;-j-(,`O=T$q4 ru7qi;}THĢX{g46lذÚ;,ϐCR]$/>tTNy6< m>3qk6ե/sT"=c5 K $`,pqu9pFtتUڿkfԏ-5eZQ3]TT&m[UUUjd3,sSwl^3[MW_5hݺuvv}pdة*㨢,](x].!Hx R L2!vCse[D"5w8#L9@DF-Hm"ɛ ֒*9hS7 `ٖ$Jʸ/Zju=w' r:4a"5g7͚{SSq`ʝSRtO^T)R6íIaS2@޻E(#O<$K;HǞjժU+f6߭~ N; J-%p6:5 @VY BHTk MulFrj[V*|%D%n]}D9E͘!{c+@L|K0PAN<-X`ȰbۣfimX+AR1c&-Ϛb`|(|Y8}2mdžV" ReY%HjrPB 80-13n$ 0hUS ;xc7٣|TkWUڏJޱq ;L5 m Lql-P@ ]As¶2c\K8,#''kkFL?HDܔ %0|QNM ;]i OH#!p à:aq RC X堌3h. 8!Jmة 74;`" x3n@ K2aDSa5vmZ0S3S#5ehF;@e$s[} `pwéXm۪@Vm: %*LL>D$2θa8p j^_P;@D ;b+P!:R nrϷK8,(X4D۫nWi$/E@C”ݲpL2Jrd p (LÔI%5D "Dɸ퀡!} IMW""iP@Ito;?!D)D B72h?:tP! qK"&(fAEd )Q~PHp[$KUnRlNz b8˶6M֝qnͫ / np덷 PdATD}zPtdE& 3ᖪs$+hï>G"׿&4Õ}^vyܔVr{qMӶ z\oAil[nDU[9U@iĉtj֬YI9Q|1u}c%EE<$PPYYygYpI]GSN2e{oݔm۶q!n|:ws/PS?Mtהp7vykw}!F.*vԩZLs/}Gߕd$+gM1[Nf?3aif%׺ YE;MS $K"escO:~84Sn?1Ԁ6`Fc$Hݠ<=ztWE0 /phT~ eAdjKDF79tڹcn$=vf9{͖:' }ա] nsS֩cu?[rk୏ڢrDU8dUOvql)4E(rwJ"HA믿>}trA]s5@!I Ȣ o^bmE4\1f$D$H"(#S@@BW_}u,7tӘc^|E;o|U'U̝̍Lf6h,MlqĤ~MɄ8pK_{5n?@ hs`>q?7XGM<>vzJmB p;߱=jYg|W_}U[<" Ԭ裏|ͪ_^40-4^N ZBo#G;ܙ霩S^q lޘ YDEص` iAxHȎP2G/@Gu5Tv]~ed/\\RY Y`Ȓf͚>s3\|ťEC;wnr]c/Ao*vu鲥ч?xLܼΝ;/[U$6m(Uڵko:X*yBH~1"(381bĈ#ܔk~TE؞W$w:e3vC1nھfv'{IC 4rQ סhs Z;(((h.K.\HwunO?}C0cǍ}qƋɟ6ʨWkK|w{mZ¶|r ـy` -m۶ZQwIy?chǶZї ;w ࡩ!$v&2@ wDVeXxI믿=b_iSņe&ZD"㔔$nnLN4uNw?_O>$[Ts}/~i&')Az8=8a13 g{{~ ~w~lg&?oC'PVYg%+i7>qW_n'H4 a%*+cز\vezDbh uӍxꩧ`}U^4^Eq᧟OvCzTQbcWIMDxP}~MZnR&=q[U!TpqtM,Paı~8peCvvs>oRPBMt)/@ TMrD_nR9T|>θi["~mrTE[4 [ _ .\XVVfCuɨyl |[#PMdQvRums4eY޿ppθm2<X< 7}g%^95Y]?N aມ|4RVgPAHMHQSD!JkPUmYk[Ob`0ْc21SnْKJJ СCJeU ǝpM7:d˯lZ洩Ňyܾ@h\Ry5% 6]d$6m5QjQ lpFA@j%Dm+RmM'vxBP[i sײeynǛtyxxxxlOHxxxxxlOHxxxxxlOHxxxxxlShdfd62=Bw}2ã#IiMqO߅D8TãѡJG .$$Iq=<<<DDQf_')yB !8p8 [9(jه=m8}M$&s OY9Ym۶q4!$##t ۱۩M犕+?t۶ ɂٳg>namq0\ VeYsLL$xA8,˂ 0voU꣏>ZbW_EgOO9~GDQD"#F5j/yZ+wH0袋f7SV<tG9jԨ1s!CqUѪQFBm C2ok0\b$JMx ^xw|G՞'N?'Nl;yBwqEm-ι؊z};"q6-^XuWNXd̙wqgZFڢ??f駞|*p( x,OAC$;F m۵mۺmff&!$%\7x<O֣Q8СC޽zi&hӱMP n&, ڎ B(ahD4EQ(GD"UQCP0kɩ-wǝ|5fffb`((8H$=¡0!IJH$bCR0- ,4ݾնmQy+WvmDAepD"H4&ǽP(Yx,nٖ7hx<ϛ7iOa[9uH 2BʈD"x% ÈD"m7EӵD/Hĝ&nQdIeu@RUl{K223>Aff&߯*gx? / !w%$ 4fZn} T)6%$!Hǵ̬\j ݰx{/Zܭko~s~i'?̣7gw=MN;yoW;uS] cLuCOj~͘3+^`ޯ?rJ˱y_zՀ~iιO8D|3^wZzړ< #/oq+]-p4LXuU˫s9SL2d'2ٱ{ ZH(29O}x% -ăOzkʕ+_{_~>BYo__ŵ8/.)^f[n9t*aY sҥoo9w(=1oC~TWU]9`w|jȄhuMޔ~s̞sǍwXb[z͊-e|+ǿ(TF+Rq]wusΗ_}=HSOO>W/.ki=?fUGٷj媜윥K8D=>cק/Y^|h,*8>W9z mI4rmxׯOHo}99kWuEQ*MϦISQu܉ 9Ƚ۩SVyؑvQ:vб HTD*H)%\yŕ]:w9~|ͷ O3iC }IBeeXBg9Q98qD{ײ,WzOWOmaۢ"ƘiHdÆ HfV&1XjѪʌʫz_PQV s9W_{SN?~?WN;$Z%K!kVɗĤ)qLaW_s Vֹn>]?G|K^՗_UTV!cnjڵkqIGT7tӲ?I+$$ N8G=ߟr)'w8|Ş3>I:w8p/|63Ͼl$Ǽ?ڵo@O?A}ڴoXxeҿ^yK,qӣ$ 7 OtCc>W_yՁxV%^9W%33ʫ,//rΗO?t3կcFirjzV:rC灇{\sMvm-ryDdֹ[nf#>(;7VntڿTWGÐM_,9(uN).9bkLYwTA~;T1V;댳^jʸ-"&u~[ǂ'^ou1LC bV̯i4qM"av8;Cy <#,j[583N 5tCPMu#A+Dz >ap#|Y({~ɜqǵjJɜqpHS.nݮ(OK}{=qqxz(=3+ȶmW  ǕW_ԣOEQ7e[Tm Ԛ0]8xBOְ5 #ɩHśyp2rH(4t5 0-Sdէ8+=>=Ny<M r!]~99^MӔaړo,߿^&MH 2ȲDIl]khժՈQ#*+*}/Lc:4L=/D"zm6؁\牃NS۴jӵK}3Y{\UE}X2;Luxwވ>l}D% th }FHUՠ >{x#?/ŵ5e]SКnA>m^laH x/ ؓ=㵢˲^pɼD"fJq*!2M|սsPW`ٖ;-)+Yh)'r*R\\|1G;yg;?cv~~[n]EUO^a>i=N|ran!ym?NI#if7 j( z7 L'cXf>jPtlZ{;GWrGïE.u)i=\K\; Yϻ;qޗmJtz,kӺ{x3YGs>}턐V+׬7q~zg+N?iIof}rB9* b1>9_*5蘦Ll1fYV6m4ScT_E0u~uu _uU}ӗr9g+ZZB |ꅧLtW'|' :UV'{G >w_vnvVVQv1QeT?Uh$K? ٟ&M] w۝ ]vi9ieYvMefeZbaiv PXX(W]|ۡ;Dwlg6ڼS7% 瞻ȸy >y/-= S; ;3[R+:J4W^'=sέ;O>.ݻ3ukW_uuvrYlO<]QYQ;A1MSQߗH$?tܠ9SOɎg}6 f{sEcg>;t밮tݝ)/>)wB:_G=]wӻO~Afiޘ[z]=eeePHwt*kEEԵnٳ"dfg[=A:tУovŭǟܯS>5 0v…_//T\ix$ T%QuOuX‰uևz)gr 7h4j۶B$% ˴᜻ܽ;B,/)+ iEX1wޮg0 Cn 8zjN(/&8%&q5Pn\l"Fsp ΩX,s\'D"iֶi$mB`@"D#;dQNLD"!P! &,Vofވ{-~cܝ ݅w='FJq{D<ETTx"|҈DD,LȱH4lvO ޣ8@x,8,+'dL-!aB(X,f;,QJ Bt-iTǎ#CkYLڵkII_}.98 %vܜkov/4̄ P =Raq˲f lR訋al?UUh,X>Ah~~k۶mEEEN~;nN***Nu}#WKҲҺ6Yá-r5ۢݎiե(囜Ekmlv\tcYYr}j۶mV=Ƙm۵Z;qcxG%%?[{l!5qpUUw)Ï? hDcQ9p8 6Tip~d۶mS}[MDNS]f+tgDq$J+?ߚ\h]8iZ_=~y3t#V;C5Ms'm}0ZS+un-B(~]P,5ʟTcD?w.VRYif$$ssD^Nsӟ{:0qsm\!]׻^\Z,K/D8vF]2j}z۱Bi>շ kV٧>z=3a.Yd9%e%`qƍo6m)e*+[jݶޢh!8X|a-`=QG{IENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph4.png000066400000000000000000001730311222557406400235100ustar00rootroot00000000000000PNG  IHDR zw pHYs  #uIDATxw?3=;(^{h콣gQ5$k(*EQ@Cv}˔{Ryη:ꫯ󋧬w4~8eʔz4p .6w}|||M(TҶr)fi۷N;t饗ԇ~TW_7++6K}|||~!؎把6c}w»+V J[ovU-ݒH$,PBRnA! Z'iI)M B\po)[O{kս3!kp|||ւR4ӔF$/@8 뺔2jL+|8NYYYg6iֶVf H&%%L[_~\pBȂ zDǡ B 夔tne]K{ !DNw, MZjcRh8ZUY ._o;|\uU5l>nmi=3l6-Y os1B$rT{8z+h=S[W2MguO-z3OX`J[hq]!hfM$ #23g=xN;/>>?7p 8PJ95s4m"aQׯ_^Pi|>ɓ'1␃;ݙ3g9r{َbيnݻi>af7__dI^=16RJ,\CAJٿ_۱9@A)՘q\וRjf膦i!!Dt.w]ץ2ʼG`o뺡u]BhVs͆Lc.I.l4^zGCV(t0 iJ)uc{춇pxO׷ߑYU]eeTt)8뺦iBu0ƼsιRP2g֖֜ >Ë{gAYlimC˗/QcacֳHnƨ]Fs>?weh&]cn('ߟ董w.`QJ9ަJuBЍOGJ靎RsQ5gޜn5㳩 Y-y& Rq)).ض=) αi79V[dɇ>~X|c\ Ԝuj+g_pܹs'2YcZ.vzu];4M X(v1ǧR))ڔҥKΞ={w^*;nl"Zw{YiL3{ά9L=zteee~bi#p!)ΟN>}a>4ȱݪ-X`Z3J~wqjon6sŋ{=w?:zќ^x*k1crO&/]rw,|WcEt6ӈ!pοƠ̓:,ӿ>vXX~ J* YP?iW,?O9`LMMc董+**oN@esYհqּYL4cu삅 f~=S(ѳW}' }m6g͚5{l^{UUUИ"J@% EF s]N;(QNRa#%wClrQGL`R X|9]m>b+cKTR7vܻ y뵷әR{e3/?pMMMk755I.q[-pnk?چƌ /_>%%i7'7h8'3_x΋=zLD4IvӖcy]UZ[Z{%2NX6ģqo;PBI* unM_M6y7s>?xg>^%r;!!g>#XF>[ndɆc;/=1G9 ]j3<ȅKNpGI "J 8BJRBzMZ)_ 崓an ՔR{GnVtV2Unuݻ.B:,%(Mq*H((;=BӋ_EGa4>xU+Vi<( /H&ck7|c"*[eeGvcO<6dȐ=Ն p\,\f9۽JJ))])6,65ceKDQEQ%@.S\%ےЈdْ[l*#f$~OpTwUTwNtH(W)W1_eҙÇYkCuYE l\ŕRInq‰+ںZ2TkjW  FڛۋťťK,QXerzU(,D %R&3)4[[[|C>q劕vպ5J wYu咛aiK*ŭu09nKWv,^VWW|r(BȊU \ŧ_ =96mmg`l:9{U_|9xԦ*mo9!zƦX,V0XRJe2??+@BQ%A atB\]]dH͹r(awa̭s’Þy &s9VbR{߿r2YQW_ךh]3{ny ,@&ijj2dc;˗/۫ouU5 UjM=w3̭"`GԠ--}IP 4hXIIAu/شN;f̞={v**2 3jmio_`A]m]YyفXZ\ڞh_jՀ*+`bUn\+ 7`1dHgӋ,ǚ ВhYtQ{}7[[ Գ{O ԯ.\pRUY5Eݻu/XRB'~2O?a[|y4}446ry[|َ;WjW{UTWBd۲viעHYk89j L2wX4vȾD伹vCYe٢fjjiq@`޼y\Ғ6sE;4^:fٳSTnx|WSv[RV`! 0 RUYeD"3iZ(~G<;* GšKӾ_y_LSOSJ )VeÆ [d{ݯoX,VRRRPw¯Nu r[56mڹ;})L BxgL:+Yp"c;ʒJv{幁>j乭Do7\k[k,3O,]r 'EcJ%R;٭J)=CO֓Xʤʋ˭K0t=FyY}>iLJp+S0%@)u+fPْRxg*(uq]\ޢ[yI.ҳ'kgYz,] !\pu=$MiH yP{b(O|IW%g1X)d-_ o2A9\4|||69۵@гhu] cyNu.RRfy7ELR %!4((])T2Ǯ([ڞzPJIH*%DIAp((;%THYQVZ^IlBy07|?s/{EPL`uӧ~z7]IASTEEzг]_LmXd!J3:d^Ge'Ǜ7L/^ ʫʭURZs=o+Vxǧv!=l_{ZZZZmg(JgY^:?xxkPwI<'K!X Jf4M~(Ԇ>cmێ똆ifkchFg_.mםw}䯏tj̀Xh.[O}||||~4H8J~흝 ϝOvXUVR6~xfƍ7޸AQ<m$H.hT G?l* BI$J*3tj SJKJ4Ms^#-NBڳuؘ93u J&]w޵h"ah(.xxo(]jFʹw[ݡw]wg]wq[٦ayi|'콏R7^ӻ;pǎ6[nѨEzFaֶmmk%p_וW^[_2+^" y^yE?N;C=c."P8R0 0!^3%S8mSJ!/¶L[IqɱO "͕s͝ᤥ˖aʨwu5MuuD'IInSÕ,dtiI0aWi'ㄐ'tu$҅ysuCRz}|8ދ%KΘG)t:d2\.7uOdCL`@P0TTTt#xB+Mf 3p#^ǣ%)?]pcCbʔ).tX|;_r%.RC=4z3)!UUWD"$ۓs{0`@"D2^hOy_~ >laFzת郞nJ\2j_viOx^k~]c]*ms\wΐ<>֖~1NoϦ|V3& r!%L,^uU~/0f~[-`lؓ?<x,~#k\wu);uaGq9衿*-.=Ӓɓ.[Τs:ө_LMÇ of;A)-.+s3f@cS#e˖ϝ?+5zT/^%/r=omn 4 c}Q3j>L2y!c˟|={>O|F8^S*L0a@hE{!kewL$2kmg#;{45խQsڙI4hkTRxN6tmW y+.]^hNXdC=6KU++gᄉ 3͌#ӾF{ou].w~'՚Lr]׳ νkp-̚1kMPR-]4L4Ŵ?<r-zЙD{o76oonO%R\}7 ߹[~nAFA85 f7ߚ1} q5^y镻+ٚ|Wo6(iInqƘrUkK}oGq|뗟yiCW^Z[--G}tscs{se!v'I8_M:hh2\rĜo <[o69w=\7\-tw'.=S~n-ٞ|}\}M 1 @48a-6^{-нkG;޾+o馀 s?o3@9眫zܹ;>;fY JG9묳N:ѣGq}:c}{%?7,xFP`S<%5yW_˾73QCG=D /PJ|SO:?9ːjq;cSؚv>d}OwܱX'z4}+/7r NbʔϦx쉓?̓<^uug6Ϧ* 2/7_yŕs^8.xLJ =rHC7Lշ#>r!GE&9C\yɕ'{oۥkJϼس[]v݅rgɜ$<dž0^qǽ߷ `E;`q#G4u3ȏ^3X2ɣ|#믾@0Qea׳_ᄑhf0#?ˋ]dᒇO?W|>ÚE5<G1pQX⭷oࢅ&3q#Ѡ껮/pΟx}z\+N;~oɂ%މCួz|'^xvQ10N-̙3⋩S._<x&!]m .xWwof"ePw!#lI{HK\r3;D2q5][5KHG*V5j2ht62Әc9k\=5'}8 677λr\g7vW\{g_vݻ7wo/a@~`-~d2ZL:owuW_w65ϝ3S4v_rz_X2ɧhklªoWҩ<0ߒT@*6RLwnUo Y9EsJb%F0>ߧO= r-vʆ\"K/~Bwy鳦~tbرTϟ뺃fS qәtɺ-Vkv9;kg7,jWݺw;o+҈-kk5W!FX 1+PT^4yFl7qP^z٥|  нGGzț~HY)id aGLTHUrڗ'z /`FCcîwߧw}o&0][*-+aο~u_W[k۫Ͽ Xc%I tmC:th]s]mcmn}ި=F{U>#?̚5kCkN6wi!d3ɦd57; .Q/z ;ӻO8N; e9[#\n%%%UavVM&Nx1ǜx=C=tXugf⩮D~׮&D"R @ә4֖c9ͷX$VYYy; LwWbzAT!a\p7Ѓq9T ]YS(qܸ;*3h=o۰ WÄ3Fl.}݅gs;xW/_;,bs?C=4Ng?y[m175Lb{UW1,47MeUePJ퉿>YgiD D\xW;0 ca}m_|niҙt: 9ӹO:Ͽ>aXxo.B.N#vz OviLf]vL$X$vŷT*Je*K+;=Fq>,]yw{2&xŋۚێ;鸒⒖0umۉd"HضL%O;.'_t @yyriUUT 7gx{キۮܴtl.  4%izv_Yo[B(2hNLj^=z H$8N8V͹θq.XXTTGx>:W\9s]v٥vUm(nseYa\UXrJqE}輕 ee9+f3FX<ޛ}9K+cweeelNjˊ|~y[Z͠#'L>{խ\rذa>?mƬUUR`(طo߆K Wt}@Lfԩ{#`̷6Hޣ8^ kۗ6gޜWx2dА?[y`88@eB^ɔRs͍F@ x^,˲,Kz|{or JckZ[[ W\%\hA,9,˳z ^[n!~h-OW/^h@(гO _EuE8>3~}үoD2Qɚϩ&d"î;|urgs=cK5^]+҂K\]됼qYg>]ן7|6fsYZBX,_<3㺎+_};=\1+g=wz@sk+o)n"s>C] 愈1Ml4h,E"H$?A4x,w2N"dwta'5_)GymȨX,fD2NG}͉oNJO9SN<ŵ]4a'LÌbx8dоr]'|zW's.[_cdD2S0t#E.&{nM$Zk$2 ˏ⳥(x ߝS9*A! <D:bx|wԸaCyEbڴisΌ3 py>?BaP8 )2L6u\g}T%0 # B!5v-y0H%eңGnjknoаfjBWܕzl NIgf͹\-?p]U NU^ Eb NM X#kVx[0/X7,x*t.P)ܐ[0=xs/ /,OӊXqq]RRr{[[[|aƋE@ #*rD"HlÚ_&556w^2ܺ2`zO/8[/<šoj G4\>^bw86w;qGIg=ꈣ~=s=w 'nIioioo8c7wC~$/ֶ_:4&LRHρIyMiLsS )Yx/<`Buy ;gE//lV sEm92n ?U@JH"ѵ RQJ!! 0 s ƘRL:믇("M}zeJ6lz cl… O"uO>tZpAu]Wcw ^\G!Rʳ;|nh.IcRhijoii) LfT .n;ιm훻9?/ޡyA֕œzR?~JVPyyot]5{,(ǶHe[:p;ᄈʋn}Pm e PUDJ*% \PӷO}M4t,vQ[SbJA%]@@4h.\l}lɦkys=qv„Ypz #G\]=wv=60'p. 6l{CI/䒉'J)ƶtl۱-˲lkfaTVVr-cƌI%Stzac uC H,{'q`swr%e2Z/:bz ~9g#p=?Gb?iOpBBXlz.]tȀ!["AI"DVWXUH H);X *HGy`xVͬC/Y$ (iJ j~:,#!0ދBtUL1H@H"t\GHjXi>_p&tn020P u>}]%kMt ;t BBPJeL>8vTt٧  4U%.0t]L|ǧxzl0`0. !zRB=?Rjʕ>?&+d9s?;pءE4ifuv,nM1ہ:{{֙x B_ )Ny5jh駞><? ׿6K/ސ[>ڃ}s)*؊+5M[rŰ\z GZ.w:W{7y'zBes)odYH>v!=GߢfY˻[YsD5~ޛ@fMKMeB`RDj7c3hZjםwmnmbQ3 DY NT7zhޣ}.s KJ)x"*Xcf~wLMTRA 6Li:P"C$$k#RB2ʺF3@eC QAQF\ɳ,ߌN(F0B5ڹ /-ѨQMIeRSA)Z?/ߓ[*RD{sB}5-wPB@B*wlz :w&{vnT4cmBЪU (($SP(\}/Τ:edҙ mދwB.s__tauYާOe˖u>t޽{b1.8YP t{{R~vƶlKt0ֶ?˶x]]]yYv3/-%d N|/yBqݺܺS~_BnRWGF PB`$HBZu\ h[o(*/2҆R涩DiuV=BޘP2Snyى'h`hjsN5M B\Wd.te*)jIM6ذ `& \G`OE5ʥtAtGY gxwBԩe_ "=]әbR Kjԕn p RL*J,I)Jʊ;? 2drs23\~o'ƘTԀ@QNH ),eBw iq.+^-k`q"EE} tڴiG= H/{~SH'wW7~[A٧amS?W\t>2pG~tK&\N0j47L{֜Yap ݪ'=A` kLgѫʫKM&t&{l6JJB oޑfi4邏~cخ{ͯ>ٙߜNx;wPB(! p8:ԑDWsŕW$yҲ,)͑gOW@(dγN7馃nhLCgע+\BB" W73yN!)!]~o2z""2 j3Qt|w7 kI:dF>k=b!;Ç5M8e* ܦ_|SARl&H$c@RZɂP'}h4I,. =]t&C1yd`u*5*'\4jSA7y?5yzPHI8s4 p$#s^t Nm̈́ʵe kTpPMӘ:+DypQۭ; UuO>3=konpA}#ݖucWuABj͡ޣNd0 W6:y(Č0.M@qͦ\.1zqrßD'DȎoկVc /uA [IqwH_r٥oqo4V8&5csdsee2pʕR@Hq8ې7"3%݊% v%U2|T.տ~f?iL.C)uk0RXP9n۶ gAa:#\$kJa 朇#{ BDgloKL i?-F ²#o:,X^ty.VR˲2LK[K<' D[4e %^&vυEp/;M4Lͤr`09'H.5S\H) !$˳@dE O^RSJkkk)J)vw:tڝtkϏߣGrwun_;|Ѣhk[_xy]wuO=g|sϿ;xBљ/|] ,]4ye6zڒВdW-ZHn=e8@}sVnOuB_?|p exu]۱u]w9n3!$ .[isUTѺafzp,yO:ݗ__!=J27RA/OgtMYov5VWu';qah&СnItnK)]DRJj!S*dm?%Ppbq" 8oŗq!laL7#LR:F2j}GC9 G/*+w324pyHAo ӏǻE-䔭ڲ-*(pb#'ڷn;4Cn̘6cȠ!HlH|N͜x$$Kb%\,^xD!EQqQyYyIImhg  2/$ o$[gem9v0:q+ )L߄%6'ӯ_.h]v6㦕|W ҙ*&83]q'%4`y_C8+߹R=&= Rʄb#r)G8P8HӂcxGQU]칰f`P T\2CU=d]m](iguI"B\++Ah"&m;]Z&>ppKzůoܥK㺞m¤Aٲ2uU;OBoIodKJښrV3*bcIW&[DWʤbX@}]}cscwڽ9Ѽ]%a"cQ]>5Yݯ:NZ*VtMIj7p#Ȁ}s޻wwݽK'_AקrHpix_iiY~СTb1TOk-*.{ػn~g۞ V#v1e>ț0;ۆ r{o D=]k_|x'T@.C_/lg +]Mӂ]ܕdi]x#IPpz p饗555ͻ;rt0HfͺNID2w!vn!D WHA$)SPId&p=S˖,d: נ%1+]OB(Jia~7j.܀!\-nF4ot2'f֪1AA((etaiTRrZӍW0۟QƄPsTBQK%f |\rl"'DE]Of29OBAuЈj[K.T/z#eF tH&lEQ+ܬu]Y! Blr#E̻7\-+/s[3f8`+,b{k!-lb3쾇:,uMQ~2 LJ 2M|ah1\Dö'5 H0bg쬕-+/Y9\ZpQP'`)8DH.8#W^uu 0b%4mm^b4M!opg*x424䳩[!c$_kĕP 3}\]H98x4}vm?锓O}ݿfE(ܭkӈ/}9tw{IHAͮ~jcǾ۫>%q]>N 4CW^u->4-1h>8k.֬uP}^b#}+dy Y=JT&@xyo\6p>{w+TW;ffldL ;jo˞^t}C}A+]dTG ꖻ L!4QkTsC3Ќ^ Dh*PaTg^.s= I+\m5Ƌ̰en۽]Y`>D6?dlRI&eUΨLqD5w~y_gj* iJ0a*r"ץT8Pcscqq+5OIE܎(,D)% ̠YRZBaAW^J)xyU߃babűUVY[cqIx/ND KW9tǬu[xb m)v=յ^?\t2}R{BHeY+$ݻuW^R!ҿ֦l]VUVZVUVe/Z F͠VHGR<, Gɵ:^R^DX}QlI656T'!kբfq3aE"s_%9RHK{RUabK(\И 'ST(⩦PC`$H5JJKjjaH4N9oknG6JwmְPBy6/'.K幬e>P",-/kK6a&Co-vWCa`"]7)\7ujX$!EK.) .ᨫܔjhid3Rd'6L0 ƪU҄%׭ӘD#L9㶵E}')_K MMxCӈ+^|*+Q謏Ydɼyw}c3r{c{￷W^C Kh?/g:b[oaX(+Cj!hhnN\4rɏ6"难tݬyʶe貲2X_ko <{Y9~W45dB !̜5NgD ,.*>C.YjT2NH=_v}W^<쳻w/[0dBN鴻=8's hkk뮿IB2s()hs֨X>њi,y#taR^wbǝ Hէ~ݺx@=򨖣QoNqJŌB=P:tG9*[]*i>gv;fb2~g=ƪف,8'gtG"PTTWٻG(({u"P)e(V- ]8Rs{H_gc#jM*R$ɒYT ]RVpʤQ*fK!Az5]SJb1H۫G˶$dJJJ$vή(Щnsi̱TTT jx3)-)eBxJlLq啮J)psn.v/uȐ$>ޅ5/ڶIO+ҹ GyeGњ5{歱*O!Tf D,))]V fӧ}Tx,5MTP"ywy.5wyV|̳,ӫ%^LX TA-׳o~u/!wykGe5WٽGkBB9.|Bh.YD"Yx *ЖoՕc$㹴c sE%EuQ)e2\;T1tVɸѤ-Y;tG%zE ՜^nP ]K( ͥ%,ORIHt3D?>^{Nuܬ-mPF !mn0U @I;^hY'we_q]2n#K-DR:4Wi'ݹ5eLX5j'K[6:qKUnEeHSpg΢H)5c-Tễt4MiZ?mXy%([I:g1U2ӥԚ}bAGu&!DI 7R[qdŊKv~ITQ]kYmObCD#l6:#5 G%d+OJi;dtL|o& Lc/Eg4n| ڼ{\3 KfRT$d2+(0[sDRJ*HMf91ݻw"``D.URy@yS9IG^by/g]۞\I4ljSEKX.ou>1Qi%Xtt^y%$$ߘ5ZryUhf0K\]鞎8rwH@(^y͕nx2OG5)A؎7ҁr[@@ "`  PhЈ$5@EYG8Ҡ "wOr˶-@`i߻kLL- T\cqSJg֟'!1VTVc pֱH0_X^ZIf) ."s] *n}ȼԸnE]iQ鲥˂FPqo jPʸs0e=x)W\qxA)t%$ µR ݰ6B& ji7׶NJx ( 0æPQ)6HJHF⪳W)eꦗ$NI9iT"L~Oթ2Lcz jPB+\  32u#| hՓjO|{87vslE0ŢϿ8BJ @]Qm̿eA Dwa^,z{+O?D2*/^{}Ԣ[y.p\$cn l?mt5h~VguDur. PKoc(# * VㅗhD*Q-(8{')ɥs L0۔PJG5*іЈzaY<1R Vֺ{ lw;J]w3F4]({wXmm햙Ï8w!5V0)0mY~zl.--zzoB 5r%_1swqλL% r3:q!WJL$Ec6Km쳏?-ꚮ\z J8hvCiJJL\;缋wo x'.&`̀re$;`@rKؿ[[UC u])㏹e.4mȐ!V'tJӧzjg5 ]áQ8pg!,_?閆gy`캗w\g_Lbɒ%^$"mϚ ¡ݖ͉MMMw>DutfOl6w~!L6s!G=r,:uh)眻K҄_\ni֭uB~Xwi_$||||| kk}o^<6Hk U6*y: nKK)* jCԱNB!RtXt?mhiJ_}C>8/PVT֞h'Brl* 0 e OLD!͖"vJN8]«w,>Ϧ|et꧇~: H!ʊ\Bk>>>? ")cȇ?74DoZbc톞6v9("JI:.TP]!וZg#!5]]g#7|󆇪S#:ܳ4 `QF) C n lA}||<-)YgL v _wu+m4+`}vg$?B&V[o8щ/td8 DL.Hgҙ;tslF?(RSk^~CeYtAtr 7lSE? G›[=< ]~;o߯Gv}||~.#ﴵvx7ݜ3oM|||eo#E=Xi/;n*qܱm)m>>[TR_О}z MNu_ܴP}||Elio&l d[2>>>>[i^wnϦǤ&ic_}q϶-sgPTjs7'Hl4~lԤ=mJ7m<"m"gBm]꛻ @,$6 N钆g'I?6w||||6=~>M EBdrs7g$P纏϶Ob@]m8$6 ?ѩI6zm !6w3||||61h(L&6Il(n&'IK,ӗl푿; m I֙OS W\o>>ŕO~_P>J)mBo+/Rbca=8jQ5)IC (g2L0/u":n6^30o mP4D c!=2hkxnvFk- . C: srpA>.|q:Wu8zp j+:s'os% H(F@HP:8 7@h. @:r\-7IH_ԚKܳV'~w(?!PJ_%X$)u6d"a^; ;tȞr(Q:ncl k?lQhy kZ\Z R R\_As CAU-dg,gKwu-*rO;@)0mʒ͢?߶w\A~lX0Bd{(d u8k הTjk;@Y"P#y-5Bm_xr$}fS 0'haxb&;l@{zʩ*b=7lr$@ Xv[0p 1zaRlNűOb@2#=\O"B붏϶FȀY ڮruw}:6@Ûq$eVZgo-nu6/.qA3+ogh~"@ I1}ł϶Gx!mO^?L6#b!%X$6 ?dRq#.:,B'A¥1e}|)8U( Y Yya^`A@lvQDe1F 0A 㳭!\)8 m,8X:l "V5!R,] %-S$lyE![&lw<[=lOJ?&ߌG&(Zá?a Ԗ,gBEޙ3gaE)@/yt#yG|7_>0_,>z`}8м:܂3((_ܴ/Ḣ ځrڀPZ> u}̀aXl s}Y/>>XLѽU%Vg+ >iGF Q=68kό&5'묏/ 8^v@H" 7<{ APAvK3җl0 +0セȱPp2Lv~-y[ Z6D">>>??`KCAKA흉~@8]~p3 =T3mTR_ܴA}̈́/@&A1+0'3C.ʛ_VqH[AU?&5_$||~(e@7r sYZ8p0-˺3~>M6(36Rp-4ȭo6cݿJAhy tDl9QփFl4 9=Ƥ; 3I^!?&A_*܂xf=}D 3ȹ@ȖocIl4ilfh.1xw=>g.V7_b+ h7xC %B ߛu?E? @BCnl~>M ]PPZ?ReRQl ,~>M֭[6ݘ*(|8miJT^9hKRٚ'ݔw)i.W ͋{r P1΃fݹ{!7>Q'gS ,^=爭?&aY%9c 8g")`C)8 Ix뵯:@E>xn@\[AͷjG?&A= %Z@Wk[/P K/Vy@K݊TQD)UR$6 9sCЏ~scٳ jDK#Fܧ( 0J}>MoTR)۲C%/97t$~0qA\嬻{° 3@!;D9u[!$6 /̭io$g>s(`(t$ꋏKP$S%g 8toϠ䍦:( AeNbX? [KqEd6u~2d>>  "(MK0LvōO ڮ@@"w_v6Ad-1(TYYYuE g~^{BK ڮ'A$A4Z}l p\oi}Yh¡DZ(!13Л&X@Yݴ;bA$lH.V}u'I@R \IFEKZUC Qk}~HۯiO3 qt7z]Jh@9z1jP BA<$ui'KuhҀ;pSbu6VIWy97U&ե`@MH%t\pWstyJ 1hTL}3g͜df:s~>.̐\ht/3D)ya @cwȨN^=*Ɨ/pqmOݱ@lpPWg'cw 3C\Dy}wf'vbnt+6BОz)~n1&x[[Jԃ`²` hgmS3RQN9l+G@A'޷GgY\NjMX~=_۰( 04\}u=@5qiv,jV: k>kBttsYlL8 }8X4^]3}{Mt\ 4M+m%Ą$oGVX|ߋ-~.t??PSBwwYg^P\!#kzvCtrF.|~0T*㾼ݐ.e.3>Ŀ((JA;օ̬Msk5{\ ^k{nG]xcG9/&آ͖~ Z@ѭX-CzC oٚt3<=|ꚫ_5sCz6P{nt .̭ pbc 7Bȑ>(-kV@|_߾q…⿈'I85Css.8Bj"P@:p^2zJ e: ] ks'I~@z(@▦4jUχ/Swŵt/oܿl J`$h ?:Tg& 69"}#Ɯ TG|3pEpQ4kx!by|:l06# 4Mta+poZ1 ݼe۹_gT'A 5EۨNIl (C܏ߜB)V Сfڪ;V-[D3!<~$6 ϺփRPnd|#F|U=K/@ah/go|7 #b.\_ʱhB]N|~&{gsb[7w}ٓN:)FBIzcx I||6_]Pj}emkU\*3ƨ:#@4SRq!љt{x/+'r'\3f!&5)7Vvw?~s7g稣o_34E4& >7eir .E} P^$D<W k#`ԑHQFјºG`lM ,EqZM ( EcHe#{W ( kv @Hf1hMQmP"e0өd341$f*4J#U.9ԩGRrE VjM#S]1A#D"gyg%(Ah4tzs7g7[CKC=L'LMTJ10AkR)© eM'iBeBJ w=5uYgm#G0 f? 29 `G(!IrGH4HyXTե|eAkMvK4 p6m:LiPFy*iL͆i`H/4 m *vB-!(cy3tշ(ؚ/o9i x壢44T|ZM@nv2MJC2$*hJ:65,JנBc(LaB#S,6̠Y)EDUZK22F5ռOe矏D"R[7CIzB(PwT]ұTRZ`yVhlUY ˑm31ι+KV+/@]Lfrd*Aװ1ʊnzaULgdSUΰ1uE.bE-r5Vt^TJ6[%E +띐VAsRQ:`p j5)d]sm($>}ʽϾ5NN=뮻 .0Dc=͢eux"寯\~?|IfA5)[,w^1T)9svg&>mqBpR*]gF !Y=ߩ*4cNeLi2Z_~gw>u!J0qmgVe"ak3Ҟ`i]NBw|{Y՘3t&kTөRp]rH6=dFsc PJshnz~DUt)ibYkK՚t[1K4/y1`0ٿ5k >֊F̲nen֑Mziy zu\ 3͢ tԳt(sӎmˋD `[ѫ";sq(hb@܌AoNKX ;E}^Y, YŒPU841_2 0rXRJ)PBf姟vSlȨzgˣ/;;x\ֶaû@R⦍E[be8||zfъxn{4_Ϣ=Ǐ񂳏r {o,7kU7cv_<foiK|Kjah0k_L%@V- W*3vtt#n;Q$e)ng.k Jv+5\r|}xAc.hi1"ZY-^_9~옊ݭ&vQtyA}z!c%->K96lpUEEHc7sVBX}mN8*^}wR崬ۗԫo/YI۳1e4%f׏6 NnyZ*L .m@YLh)aаnUa Bխ H'du &"(lUf VU .#nhmE:v+w&%PQM[ ~k*E*4K ﭦ4NuQ)Xu YU>]-EB{1Hk{ꢳʨ)x>G|&No!V4^|_n7o隦4Dܶw7nd[k>kI'lWS3Fw ksPSYI4Q..QZXqnť{nkƫ(V67wzfkka?=gNCQ Va&\;H7Էն&Rܶtt !Ք ^W,㺽2-; 7⡖eRV.V^~矵CyQ{v9y?SЯWߞgm7>_ֻG`aCM}|^{A>RǞGX&r=ŵ CU$ų=XNx{ҊN?g΂3ν%|oBE.^b+cN'.[G_Mrҫt(.(7{QQQA޻"Dzo }vʭǝ]Yy|p6INNΉgYuxqWv)q3kݚ6ҽOy}uTiZi֭3o|AJK __pMn:vjsN?8 J|gm޺Q&柿9{Gsr$F$-DX\tj"G2Qۊ`}d XD6X.ͱZd#a[ 2C$UAVV6ѣ :[&AY%  Qš|X6zN$Gم93ݕŅ2BoO}]>c[rףȥRqX+/oM^$?wkng6 `K6  -ˊ3J` jku]!4E1㧅ּEQ霝Պ1a),[nץܥ%4Ż|x ?uR8?k7,(r>vl )m;3})K|7k5G:{HSJ6 Iyyq4ʄa[BX^/gaj*Z75@lG\Cv&q - ^7E ,] M*0XLGQT46n׋XMp$9XpAPAi_tw«B =ۏ_0Ⅎ2<ʣfA&=i!,eIj);Կ˦yO+df!~9]EL}˞}F9⪏VN(-%eQXp!򶉌M"Yb:H";]l3EI(+ӄmB^X_zDvؘ'Ea(4ab[ Gl,>!W_+9颰DGmJ&1?xkѹkuvPm51l k{f,92K/K.'Ug&.贌F-|PA3l>$UK.>O y{n[ r(`J&l # `M.xXq&Iu3DPXو+EfudžiR6MQAq9 ck)2 r KQCٓDnЕ?9" K$t.sIvϺฏzS7tC;?&<{ĺƑvq}(phcwŽQ+HJU*QBz/6o$((e[Ll_;o¿6nӫW-^8oѢ;t۶.Xܠ4jڍ+]99˗ֵ+! AkQWHl₨ljrY]VҬW/~ڷ6lx#/Bkd5]NHD- 2-ˆ_6Xh/zb Bޤq?URеxTj?>|իircč yw**22ڮ[Cn~vC~ǣ1?o߮\ J4N!e%Eye [dUƦ-eckm}G7qPspZ#ͳu3!̐'|ka"'hlΫȿ٣RhRa)^d,+Iߡe'EGDcGֱEDV `SЂB,0;e|Qmu=L~ev[J{ETwH$?|˾<6lHTJ*UiBn)7N )#Bx›nhv= @:@^9ixFn9NOv3hڦq  Av9ل۶n>u-r:n\jt0Zeٮ1خMI/GCi?}nj/5@]"%L)q|p° pe@;anrѱeQRGލd"VmtxU.\.MftnFl#]:蘣Κ5WPFL"b <Ѿ GjEkQ7@Ɩ"+=+57¢ PC+,X&X_r-, JT/V5Z7Q`=$kk!nĚf\ֲ31UcF9c[ȠaСTJ`IP fD6-X:ׅCO i0` SfCRNݍ#{pҳ!@(٭*y`۴гC89Fa82Pbu3AW^nߔScw g儂a!VƶweePͅI&KQR4p @HKVEXkdչvY5ǎ:vh%BWƲuxU}XLl-BY9ۧTN~Md"eQ#@ao@П̯Haz+@$ƙPX`@vf`2%uV?#-E>MқX%IʎFN&@@eJuj•R^|ҢRI`LA@%ˆAaِɁ+HWi  5< 30v!Aq1 !HB >D) +D$0V\b"Ȫ/@`ǡ2"G !@ECA'9"! " x3ՂOсB *G,C,okL\H!FSA!D#W\&QZ#A%dfGp9%>OF>gΜS.k1Meg.yAnn?r_t1B$Ce鿾Y33z1L4mӲt|$I0Ƙm[iۜ;رurssW^}yž¤nw\$z5Mn1BAR$WB@ I mҴm~u5}ZQ]ӷon @p!1C=SPa ,{ѧ~jf֭G-ɒ5r-aXe[m٦eB¥ XUy @OTKnɽ[CPP \ɯv\\\\\jjۜ9En_sGn(VشIO8ޣz hN{=gUUKJJڴmyf`>7_~쟗{oq]vv#=2aPwy3l2J!}|~a[cUH=d8{5W"RyT׮NqIp/}w9g1b骥?///@)M7k!' 8ie oѣG5+F]X,ż^o~~~Yiن `д?NئK[x+aqZ4 c?Æn}Lr7o@Ylڴmi:׵k=TW.gW^wve^W-77י3m2Ig۷!~~n٪ڨTٽr6o4hܿ~͗sgO{7đ#Gӂw_(Zv՗0a#$z)|ŧNXW^N{Μ9?%$<Ɠ>p/8[ׯ~뽷zk>pZ؊XBJhIQ Czbf-8FQaݲ:nε )gKKӽݺurahZ6풵!YuMY/Ⲯ<礗&Gl-ݚ Sٕh\kWHE=m:m#\tEI$&9OSX,SiiiF(㋙_y䑿;N>c3d(,)ݫwYJ*ڸk1)i 7ܠ&̚3 bvz8чꊫ7 sOaa!h4wG"Hsnf$)++EcHD/裏;={wiڽKгG'z7{=#=>e˖o7|ӳ<;x,ZșM/X`i"Cnj$\ BN8n1ZhQPPЦu3f*"1&,Rv?i]vo}Rض}A}7-Z0MSѣFs9ю:~;[YGעi-Zh֬3~eqNY͊cmڴhE }x<BX,V碿q~p#HuM[qSqK}4Fʣsn-[,nYV۶mcmks{`5ڵeYs]CP(c]:;Rm[e !lێFmڵPRRҲuKg !`*6mZ'|'HuRՕTWH8Umۮuω;!,ꟻݽǥA"qw|\9G(*]\\\u5-))e9pqq S}ƓeK93]\\D ۰]^{VʮBHw?8upqq ҹa o޲ۨ&b..0B.1)5!9$jWH8/x5+f]\\\\+$\\\&*UxէF[PaOS! LtITIKBl#`=sJ)* @28:NJ]2(镏K{LP x+_br2*DJ"L`1(΁yH(CM*2T#Rx7Kss"uѶ]"Xm>R^^~u$DNWX+ glE(-DdU`` $@t*D !y*Tt{~ x+.4_2U毼qډ{v̯O7.|vO}u٣c8FM+V$U FZl9);Q>Қuks=7ACfϞ }"%Eq/S+ԨGx*BjE=V|rwIݰߥ%Y99<^u!b˖,[fͿ(G(!..XM!|oN?dqbC^Ltk 3h\ϵrqw$IGe)O91d)G{[awqqaMos$Tu^&M[nIqFc[0,H-;شt.CCtXe' (..Nu-Dyܫa_ʍ4@N+}#%V-yQ~^zbº7fUBB@H bY Tv;24ZjFpqcHWkNmkn_]:sQ@`5U=|ƏKQ|1T]\\4B+ap]Ti˖-B C1BHRB%.t6$tC H0uS7tneHh K}'Q#H[{qF,ˌ0*I3 @eBݥj0FeYzDӵD"~CP88G s?3\`x5M ܟyק*T+Ӓv,5WHл;l UUN9JB(@ --- lj1 dY&Ux3ҝ{pI47/wvlUS`-lwOe۷oSOCol[G|2o%(?N>}ɒ%poBk}w .@_vm{Plޒ:kPٟX%;M$I RKT'}27ꫯ>x\A)M =|U5qU۷ S}H<Έ#&O<ѩTQRB\mSJ[eYm۵}w(U/H\}GFp8ܥK觟|N D">G[վ}yťŪGg-5ǙG : o߾sHuR wITisf7KmBȀbNeaضݵ{WƘmۦiġ}5LRD"}:%={de7WݷhhsxRb_媛ds=oRBi(BXϛ;}k[u($Ѐ...Y(\ mBA]$5+$\\ uٗ㞐pq967 CKhl!oBb-md* @:v ء!hvF ۨ:wIp%Z& !Dnj `骛+$\j&&hursI#N!{)$x5+$\jݖԆ.'RRpIu5MH[Gmкrz;U ]j-]ޮ ƥ~Ɠ\u~ f   !h<@9R]a"n<.0Ł8 0+%7#ګSE/p5g(,wuJi( (XeG"Ou%Ir`cF$)//ߛn<῍.50̈]μ ] arm^vB" fdd눥K6nܸ:PJO?TPmND"Ӎ'QHis.{ Q 2)I GyV!d@,ua{gi P"+*w҅s^M!A)))9gϙiZvAQeYO%n<A tI(袥 B?}G>z8<=t[Phۜ1L gҭk?ꛬumCMx駔 o`2VOF}=j0p| (;t2cnm@4emR%`VSӴ?hxlJ)-li(b0ۍ1V %n<AJ /e]>Ν37*؀\<6Pyʰ8 Ǔ{ocfQ"&#*QTo^ /Z9]z0\I@M ,Mt1Aep5t TݯtJep}=;?[.s1Lp ԂD!$ʦDN ضv-O7mt@=wWs;69D"`zA!ԓj& PbhDUѰkₛϷ"Hꬃ_׆KZ2හEWIϻ}LӌD"{d*otxU4lc/KnPh?{qcH&l X(ib0ޙmzm$iQϰvcaTu`h~0fTeOBX=^P@6@jBte, /[lQ ,pO9)/O-СÈ F7\3>3foPRrBkm$pY}>ߌ3 ;qۭ7eY\a6!Ddgbe[1EVL4MsȊ$KsJi"(**%RKGBH2j"1xO1K/2,e,ɔ+S9Mz= +0j5mq&Q @xQ$5g*?[tp Ldٖ` C@(@m, '$5'JjƼG54[ {^}maK-`/>̳ 6SϦ׊ꆂص'?•x=ޟN;'$_%%%T=wK b:u4k֬kVn+6ڶۚY?+弳3׬[СC{bVo3^֮V}B͵7Xlg}hɢARv@;Ni]Kj`&R)6@8 PIHmD~xھ/+ps߹yG>u) c#݈*I/h؆͚ryB3~ahi'6|[>==K=[hպ,۶kcq&Hܠ!$(Czr޴Yf͛O_ 8i⢿=ȃ0x?^t߼G 1{no[sip:irsU=s";ߧ|/\gϞ?6֨KF+ u^")YoU>$ y X x,];}e@+<ȏ?ЯO?gpQKoh<*xOmصtN`?V\p|7xç}:a6nh\ܿˊ,XлwoYcwǬ?zypZ[nwzw:mݶ`j,XtOFp9ݛи.XPF=oZ~}ђˀ`/޸ecjZ ]R$:8B5Vդu Cmڵ93DJf:j6a}n<z:I!E5IܐuCb/]q^|l:wDt}PC a(O `txzg=@!^za[lEYYِcm۶GǞx,*|M,E?PS~JG#߅[ {VljYVҭK~n4=aG}D|AI詧zXÌs͛?/3ѳG)SZJӴOzifhkpI՝Jtj@u XE>dԲ=0!8*fBBD9d`!A Z  cXTtJP"PU$+LV=J7t&ܫK/B2,˲u |B˲,"zJ !|?r`zPz˶,ӊqЯg?.lێŲC١HaD"R>ceis8q !m㘣Ea*lݑ};ƓjL=J#l Jdh@;c:` @TY]cu$?spصa'jZnr~g6@@Q+R nZsM,gWa z$?9|&17D!6Bvm nK4PZ^ raQ~Uo#gO֮2y tr,@=G 08@J$lׇe"ჯVo^3/-XdR&y3lCt&R_ڀVNxi(ogAŞ[ʌߣD#={pIe[phq4J jP<RYtM[xJǸ?%@n|)7[UC^Sob Z=$DR_VnA<]O~B6M``T( R`*OH+P9HՀwo~U@>$[g{`'7% P^2?4烰2( uLF0;Lw@@Aa';;˰cm[ܤ ڄ%ŀD޴j ̓ x ߀bt:c x97&6"B &`3eL _S[6ԝ @0i_O(PJOI!LD;'q@3Zp!86Trf)) FA~]7Wo g?ٰ (|ƽ^=on:풋OKq `1Xe+Et=; R?e?q[V|M81@:BTE=S5MfQBؠAz:!f+(,;vo"]@ܥ& a훯|  *%|)3_ޭ:dJU?ιAd tn S" @4mڜZ[ (lл-ʊߓ$=t:IUC=RVV6I~cTݰuO/++f9/_|qƌt|@i_\RRj2!Xe2^x^A@0!O^`+ 1[oظHŇAs/өDv:|RT4ly: 󣯼խ"[md8H$,y晒T?WB5eYa8 @O/iEEE{ni˺$Jrgf2z-EmID =Ekc6ୈT8Tz ;:@"ۮȀ}7 ]Kbi'd IkZ]Ը조 HBZmspYisEa~9uѹTENH8d4]iF4 M.lUe?0qOҼA/<&,A, \SaAX ߂`^lR&ֲ{3`fBb~T7⪔ƹLelgIqq܅DIa(# n ի( {D8E, kUk2dZIؓƣMAUX6 W _iR@jCKRڂvŮ&Ay@2 2d=FxUS33"Kiwʿ~t磀1h W Sy P٠ *?#,0F7a[!ِb~jvqϸ$jMZx'e@_RƳ7Kw2$^Hwt ߷ MM6s Ys N\\\jƓ!\͆K"8WU>c<) '.X J?"Ud*2sP$jWHfJsIcn|/1uEX}Rbu(_BITU5K%%O/$+$\ P٦-ᦙ, K||K`[22{ ' s 5oX'fOyun>u+$[N>-Kxml-OBBś.)& ֲ $"Kmzg3-~ewԕx]];?ѦMoܥYdG~?wg=*k&)-ْEs@'=}zTq\) z/9W}h]81!!0MSQz sNpםM~q/38K6oovkr@qG~ݛC9y[p}|?|5 $"$&'?\()GVT%qiTHumlK /hM0JCrl]m% XjHm-ťP-uDۀy\.... ~BHNNNť_7!bƌ ǬU7R$vW''SÃYPM֨Z!PTΙ?_K5M'H8XzçpJl&>= !Cjv @`ճȞ{*|h_؂^$ xR':OU7`^+6ci۰LImG]L$p-hdDUŶmܼ*u((3Ϥ j0](g[oK7]U.DRܑ;5Ez$9w\ߔH~xR$E]rf@Nm_&UL(x`ݤBbўUϕ|S...j2K-RB"COOsS_wNɘ^է^Uէ^UUV6mHu-CvnJ6hhhGpHOERK7,dgn]2ۈf2ᆲ ^w+ ͐zkЄ-Io,dT刔 %5" P]guBp3 MY7nLA[۲)(hMfO'& ;I5iyp#pbcx{5{fڣgJ(SP?*Q8O,"2a45& Uv6!)̱U@ZcW(::^:/Ӊ# 4 -pi`ԿC99'ѿ_?f P&asjhX6E}^ (-+_KdJ2`Kh ۈUY #KT>կbjYCT5dmͺ,,orW &8EE-o75H`sNcqT%edG!I&1ůTVFT6+_X$4J56+I,5v05Gu}7ٺm pNvaVyY 8ln֗H (-)ݞI`'HRf:OM@@Fc&-B@U*XV܂m¬X!lV2xN>JCQ/aP=!A@)e2s$&7mf画F*0FGILLVIMEXkxR"U < .0 +SUpN]qN0&3"ՋNL`2UJ̊s9K0$2u5ɒ[1QŚ\Ow^܈%bGk >kT!;_$QTEKQ]Q=SNUU%I*Q#jH974#5 X`*mn[Ee(I$Y#W$(Ǟ́K Y89ӓi۶i~[W{-[HfH)(exj@u,tI*vm<3 B<=^zD z' 0@T :䗈N*o &f40sla ,A@kjX[ĤxqLm@nތ::uJuTOHP-0ڤI/PH`%ے-bQ* lîvqf~36%KRLbĪrpǪv)pfB|yEv/&b 9i6mJ֭[ %$QBUE~zdL(I$YJ Q&e_zɲ%6lA:j*%;~r,\WQ+ڳSϜ9D&2<Ωڀ\K7v2,YKKK̚CdF€$KOx\ ԅx7N9锋/-2), COp8z>Y>z'i*9s7߼~֭\w9]xᅺTDA F@@0qz"XYYY8!pw=tCC `1C/ZܽK-Xf-07n\Bl?򔗻w~އ~w+cl/3~-/>W^vg'>[iKy_+TYI.j?ìFY/PN#ݺUʆn(jb7W^>#U絷^le/ !O*# :"4 iӦegeW@=Nlђ&%իF#Qfis S@D*۰/]pL#Flݺu u }tLI,$'IdQk&N$a@=n9|^_Ga;O9,rʽ~'܇L͉մeD4cs( &.Ï<N_tE_q_tSWw1& NQ~)mBaa&3!=zpAVlup,Ca%wC "5Q(#l۶MQg'y_ @VFZFA/iǹL:8q-pveITo?A ז@/Os늕+8bA (3 @kdL>*k^ZBT&ٸqcnv%gʮ7BH*,#%-dzNfm!Ľ{HZ:nܱ3ihڔV<*$K@2qJw}n!{])KS^j֪Y֭x&0%ĵ[ 4ysvi0Tl׶_lfϞmZ%je˖DBP-*L8I& ,i[7oӧ쬹BiC7dY&Ը:4ͨMlkN;͚=+Vn^qu>PBk7~=`ԨQ'pBJn\ww{t2M6l*Qպ GI&7l簻nM0nSRF)uгnj| 8QFSO=PugxxX4)thۡCSL !-[j$Ye؆")sg=gLϣ{̱Ǭ^NJ:t(۶ !gvj{p]WHWH :!RP5cev/ iez....k֭ H=eB>ťC) ~?^HF9uFť>\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\+$\\\\\TQARiߍ6/)- =vqqqq bXqQ; ιnE-oS]gÞa];wp䀗'ꊹBIVi𾇗z5999?wV7E"H$(]p9(s. !\AR%9 .ln۶I= @ |rm^Uti][leYKcٖGty5 - ADW^膍$YAX7ٍi}1w|neʫ2dH44x8,9RQGqnqiXճg=zw}7f9 csY̚4i!%)YA(9SJTU "(EU&<9:/yUA䞷/`v84w޻.]eoJWoUfOW ڧS圇B!]eY~G@M--JKK+++S3{ؚi9u-{㦍Y!IEVkVwΗԴISnFfsnٖmٶmecRu=o,1feYiH$WID"55 Bcmm_ FcQRYxI2 !PȶmXyy޿e{Ĥ?h6UiiinB!g\Fie J~gu]v>1fsw{ټp8l۶$Ieee=g( 0D"QSB0D"aZf,+---))mvP93<++ذf|@4nr^{͵gu(4o޼E_0EE @]vO{)Xy|֬Y-Zdɒ%K̙f횼yYY7mfUWv Ξ5v"!Jt,W6%YJc2,cFvvkj|ßI%f5 { ?ӝnXܣx*o;nw4{!DUիV;ts!G>h֬Y~/t&oQ!!m;=-އ !|>!$OhFuMWT{ަ-6o<3#s,Ϋ%4gޥtұ7UT_~iբ8di!_()x=(mSQ'˲iN3Sd%{`"aYn6!D’niE>dLRUUpBeYx4MUU 隡{]:vxŪ|>eӏ?u(˲e^2X<wKʲika~ᇷy{ZZVm[e2h"p^4cf<O$NCI>?iX̲,%IJ$DE1 C Rx}~2dLQF999h4sν^볹Mäz^˶ èQ%^IJD" \pJ(aBx^Y5M-;--mԅ&O Ѩm~?h֪YFFDU>t ,|? @ (SE7tW)wSyXUVYxEBhi󤒭Op}>_0tQfNXYPffdJT2 | 6dggo-:|c?v鲥k\ǜ? +*(.p-k*N\ O1 *=g6,a&/Z|{n|ǿG_#1ʍ~u5i_;S|o$xϿ|CO8A_鄓>wyGܱSzns<ŋ\?xq{o<]qݗ_}?1_xC6Yh^q׍n~W]qygCA^{ɨK\3#:ռ¼_|zSLmԴѝ9w KKJ __q9eeNֱ}/M>!s{e++xw*_{|͚5/$KO>RB!Cm+ҥs/N>e).E˯n{';3~qsҩ'=5͛7X’%yޟE{}>kn&겫tMw,W0+*)r& ^wE7.qфbdO}}^~oe. V/_ _|A_Ǯ'>=QpqOAW]yթ'w`>z?apAZ6oW۶wz`_r1 k7|ŋ nXbӦM}4zy˖/k޲y&_}&NثwZ]vQJV[4/ӛ/{z,YW&6\7k xN=;% ^veW^sVA?co,7~sȑpddȁ+o2{&͛d3C:L믹+n=o+Sa 6nϿvzyc:w}Ν;X|~nӼ͟ Am`({.~qA~?m۶ZXBH_~ko֣oQ#GujҌ!rrr&O􄧗,ZRU.Y8vt |yxb7诛nGQ?KT+ܶީ{f0>XqչgiU=}w9*8[%;zLӔdI%bEչyyw?pw&lݰh٢c3Q%ÎiK~$ٺykG~n%˿{~aAo3Z9h&%,JvPm3/3DwN&'̄fj >/kqC{x*z5%L%nr4eUGιmۚli0))#l[+17p*!|޷o{wС˗/+BtͶmBɤg']{ŵӾ~zJ)U* l۶n@F C#{֯_?a  +{quvR:1Ѥ=["M;yd_r?Ka3y%K,dׯ^hɵcuH/RZXTlߋDPAs.Y._r%'k7 lanje5k/Y~޹p h? @< )[68 ѢEO}W?󂂂{{emX!?xsΝ=1yƍעqo_~wyGln 6lXlMmn49!W\uŅ_EQ7~q6\<;8R{{B.!G8RV|+>d5i؃=6&"dڵW4yg$4u=cWj>o_EK]y݌g0O>i}?cIgFEY۰=GGqK/z<g8}iG=r[ .fΞ^xb'\*$gpp萞~ǟ9bw@|r“s-YnLjZNVΖ-gp q[-qٽgv=Lx|#.)rp3/>Gg~f !dIޘÏ?,kchg.8a`y[}YXLu]K. Ϋl[_Y(P\ly-?xC?3-[;4{n:0fM=tCw+S!dJ& G:w=>viՊU1I|i?Lᷙ5!r_{gSN9 ˲KG#Hݯ׏Ͻ;{:ף5qDY~W_~]tE[KD "NvK.\@qޞqyvB8晖9w~`}/8E_&tqc?zn?tMq- ;W$PrݷM6O?n֖>rxn~. M 2!0n0wpXy7BȋFz;~BXG7nXyn]317OiABwOxG>'9>lܤ1eGyΙ[l))+ bfFyGqF%Q|qiͷ\PR'fg..->s !PuڵK.W_} '@9댳1Î۽o)Lq끻mXy'm޲)0 48+nƞD"/>__ZZdi3sݘ۶V΃/+KKKKJJEx<w? kJ`pF8|4oQFo֘4o:&/Yjvgc,@D}\qI|EEEXZZZPZPRVRZZeo'\sOqk7%x;3կWCwy/3~5ƍn"~sf_8?HDK/_^^nYVyy$K`1c ] %/icmOҧ&<5in芢8{tX4\j ˲4ibF,rW~x ee6Crn۶i`(t$0b4:6hQ }׶wj$IrEQ+UIYYYYYY>JKKw}@N픾m۶?wNԠ['<#]S9JrW_ʔ/?SNnݺꋯvGWK MTUm۶m5k,EUL-hs(JQQR_SH¤T򇲳_S-7߂]7VQ4 kʓJҸsMӼ~oVVsʲ8gYYv!| OMq+S^٣gzrKvyMq%bq~J4+; i)Rh(J6}Y8mP5!睺aB_x1QS3x8>S,n !jk9iaEvvoq.0;'ybQ{uYgvm>,dҥ^+*-l+K~\ʩP2nGe_@8`/$Js]/VJ(BpQ|֮X*j`܆sgb͊@ !>]zւ&¡=M6miZ~.....5M7?yr/_l-+b7NnѪENuw޽gwrW....Mt([dYVde[޶ɓ'~6l5MtKe涕ˁ=ޜ_w&O|UW3N֜ŁIENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph5.png000066400000000000000000001717401222557406400235160ustar00rootroot00000000000000PNG  IHDR zw pHYs  #uIDATxwE =qgsb%GϜgNg3s9`VDP@2.lN;Ua6$EczzR\2A$I$ۓնm[~wy-[4WB$I$I= & d{WM6y֙]v{332wpX8I$I!݇mX|wWZZϟ.[ZW[g膐 .Bɶ[ B v\?k6 -B!A$IB  c0Ɖ -w!v>8;8^i;v8p 8py֭Z9OLOcsBBH:9\}3a8UQkj]nKu1Z <) Tuwcc X\p~G !+#˲-;9;o?96'D${BH07. @ BXeYa%@pBRRR!9B;:n詩-5M4Mׯ_,BH8.\ v ! EB )c1B lvLE̶mR"YpE0[rtV6X4_wVn$*5tT^==>--*4mYԮc͉џ4xܜ LHMMu] m[%RJAl9!đ1j%KA];w5-kz\ʪJ˰>0|9Y9p)_V5T )l˾.^h".x~=ܟNO3~Z+.",`Ŋa+,s>=lܴq֬Yzѿo]ץUQ5MoP*++?9te{v9bĈX} etMO>M^g/]t捓i3+uPE(w`q}^ߚ5k-^$9bd,XPRRc>@ZRQ0 2F625%\pӍ)%F$0Ae銥l:iI_չp•+WQԮ]⥋czh{̫R):thAo6F4ım۶q@/hGpܠ΅$IdQ0MH"68e[v$i6S֙.^KX1dOiXE1 c3b 䦐".$lfqoie[UyO;X4&(itR*mgddGȪ `=/vXz/~￶<ǎvy\oV<`$&p£Fc`т_'۟ fԙu|ΈCG}!ƘsN5mSb!#JquDhuMu lF6|W Xݗ.\:zWSjc?,o4&tԟ=jlUu}}gTW\RPѡCf6sv\> V8bEMk֦)^%dc,Inͭ493[nK.;jlzns=7|pwn_ZZ:c֌Ï80fgfggQL{ugz#:"zܞ5W^VެY>/|Mg|7|o6%#K.3B:%/I-c[@%R`ll^tb3v&-잽{NS˰"zأI, mfs!&I1UF>=2BRJ(c%H*ҖRJ@FDj uر9 i鎱BȖv6$#'&zJiEyŒeK 8H:,ٙGyTzZqfI˲--$ZEUJL8˖,[jOLM[dn~\"٢mBa=;7=-c\t+'N1F9Rs8!d˖,{Xac.[۳wOL@Bj?45hJ%Id/ÁR]VcXS!1f6+**r@$oZO\w}WQ^A)u1k֬ CG}43S~ ln]1GO`c(n7^JM[\nAB f'|+d6[WX1]v`BpL"X1i [XQS(j[c:wu0  AZc G*+*.Xv!PD୶AZRRHML땵,RXbiECu!ߩ˥)Ͱig\!-BTTR|J 6o޼ZymFf'9 -E 0@ @ZR!TV]֯W?duS, F;?zE*52S)33| ]L҄--uı?Nq:kcҒN kIIa Bh4ZJ$[#R]5Z7)Xa7DYbe u}!\GDžl.L^U>}r!m|n-[oZbUWX"=5o,nW.--m99EM[6}~__W?j($ڵkcf0&5%5#7"xSpoG-[\}YYu().YdQɦ#D,Zq}YEBF ѥshيea萡UUU];w5֤S*r2r)k릾lիWdeZjɒ%uum4B އ-{똢 7|:Ә Sop,jêuegoϮZSSSWSץKV\5ߠ6:^]h2ss ׇܥC@z`}zЀuKoش!ֻ͛[<˴lV4%qwޭK ~_xC@ ɯҥ iNj$I.R)@#aǭ!';稣m[HX#RRR8~,\̝?sj>!={,Tћb'ƎRJE*6 f…؜sL$ׯ_0l羝uk֭(X,֥s@ 3cBhnmBڰذS802yVVV}1M1葜qYr%$^IX5t[Iy¹RȝERJBJC٬fGܔ +E\.b{^;'`5(TqL" 0馎B\.Ňmw8Dlx(AD%eD${GJ\xM;*U_"@ 0 sΨK._rY?eSɦE讜iW.E]Cx >"6$I$ߐ{,4+ +~Gu#$I$>c t 7=P|O"//qk#I$IMHMK CzLn[h{I$IEz) ;c$I$_Xsi.͵Vl*θimiiڎuE6iMH ty];%02 qg:EI$Ixas:Yhɇ~bdNVE]DhTw`7 4NkBIzU۲;VUJieY~px5fM[1UUvY}[$ˠnz?HUUqFjQ#;е[W˲@ %goC76OaEV% FXj+ӫOc3pځޥm ٘RMnع{HCJgYc4Z~ ;ab``[.Զm[5Ms] L !>xä-CП@ -Dܪ2&|F> o3BHu ApwcC\`zLo:BBȲc`ȸmv:DؖZ(Btcizjq! EMnvyN矚ƮR&IXpLlAR*@\yڶƛW^999 sM8w޼}_}՗S,KUUؚ:c+]zِCϲ#Vs ;nDZlv͙6gcMHꙧ&2YJfÚ̜LAL4eYNm%nru?CMy=z h\Ɗ9wڥgvi6-_O>$gN=N}'OI6Mi:QF5GHGv>)m5f%дsӳ~r!oAA:q2J*J'8m>3~CGH)TUuLi6!d}rʪ:_faO=TAAAX۶,fյ~i\p Y:AsPJqR:ڝ_l/Uy7֛ EcAqiq|Yf1TUu:ֲ,ι*Θ,(33G$Bp[w?~7uu%K bB,ʪV]9C\~ҍ&C·7:Z\q8FX c͛7q5BÇ744+VضݣG!#,'¶sTUt 7siO(3fѧO=a%IMK}hX˶͖/_>k֬LܾW\9x{{Ͻw;a b'9{L:}'p9C Uu+Wy|'pªtC?Νjqb}CԩSp|bږy ?PO<ĸ-nۧoXpE M$\tEW_uu͊G4~ҥ_ NUubsl߾}WX4[lӪ`(b@J`ڵα9by}ٳn缗\z FxE~[]mݱۥS5k̘>VUee_&/7Wl&?mO@SgvꩧǍ?'TU/r䈑?,YSvUVege=z:קJ$9~3g͌"6=Ê,UUABFZiFxͷczK.q2ԾۣGyڏ50V_\$ٷ8yK 4_ B3g\~=4QW^ywN=3f5#裏mGSZh|{ 9@қ6nz酗xO:~˪6WM8-(D-na `i3>~-u`i{S7U`'x"ߣ]xQUe+/_O ~-G|3ΌEcϺUԭTVVfeY7tCZVڃ>xm޴dSeW\veKoD\O@C]֧O~-._cӾLfgfjm]m %0x@hcOoF5$mؒyy;uį/#&4_~aλ֭\ƫooy>g6T7U%ncW\q^_+WtQW룜I쓟Ͽ͛׷oߑ#GCV7ބ>O?=ySO=uԨQ?j&];[Knt='QRS+.[n&=?D~qw2w}jzYfg\p)ޔh#07Ֆ׮^: uQt Z.ɧNvʷ={pXfȜ9{ ܚ&~^`pUU --탏?0b<}W@fzkle9x߆uN=uvWa=gc yq}7Æ`eÑ9.]?;ԌXUċy~.JɟϾi!ıpps̙3gNIIIOOo8J`fUU%\{{]w[5ln經dꄔ[ӮJ*>70 UU k7\[]]=x`ͫl233cؿ;c()))׿B=Pn| mX`gU !.| Z0 "fD8\Fmm`FZjڿN}޷b?6bSw;[/W^} ɨF{Eg]{:ukBP=wNk~M~fŚG~dʔ)3ұg)Omo`C6Hd{gZҘ0|NJ#Zb!D^>O4餦?|$kq^˶zLf\oߣ=TUUm. Q+*x_~ }/v>bO|A8~7L41" P4\ wʟĘz¢ϾlK.!.&[ w^1U;[YQTm-T>tovw{w=l/hZ$I9.kذaMb H|RF"mEoN:3<^{=\4'O-Sl\NDBH$H"!$pm]mnn 铝m2n|mwc͢_}p$ fgg3=pW]yd[!8b>CaML~{W_u^=o]&yϝ#F(.Xj BN+ȋ1#j} w̸;ᄈ[nym>pؼeUW]Ne˖+i_B̜ijOhnM*`hۦakWԮpQۢ3f>scFiz^GNWD‘ڮgwqN^xwʬ꒫sTՇ'ǎpSй ÑpfpW^yi555ڬ z< ͛?W^e͊5tqK6vO)TҶcDn)S7~w1 Y&ZӳZBrsr[6oQUIFwN;wnu]u,]2lysr-} QHۦy}@@PSQ $޶/cEbU%%%m^=zxF?w!#5n; wMa9433yݻuśu~څsvi***?w>w\9< wܹ}Hd}R5Ōm'mKTVV\9vPAK]hQNNN.\ٿM4iPAC-TRV^޾4ҍؚuk0iN: !LܶՄ04_Y6۸qQO .\ծ]eK9cE;֮Y[U[:uꔑzH8ҫW/USh$moZpI_^kHlܹHv.0y8BgڱkVNVvVI$E튰+W.*0 0 ιR r &Oo63 (Æi_=Уk֬qrY&%%cal]pEmr,z[@]v|ťm;k@jzNzx])%F*`gmkNYtɄI=]6D0!?#!OUA|mksXSJ$8Xtlv2h#?c)ԭwݿn˺^^QT\H!1TﴯRSSӳӷm~1@'}DF2. @Qek_߰~#<" YQ^; vvO:gnV #6q&NW8(tRJ!mf'V gs|>_~al;B^Pp!B"͜9Gh4q&I>kެc=vŤ=\2iKUꆞ fv];Buu!d튵;xf0Ƙ`IbkMh0l@+@x[B#)mB &L գѫy-dE-+zkۜ쯭 ۭ٩;7`PJ'6mW^?|C]]]D%_wW s` c W_?ڹ ;{w?nMǮUzk&pB퍵)~.]$qVi+IC8>xaS)c؅\xUW H`0XMIIieh T 9%H\]_]]_z^WT^ ՅTm-V0_)cǏt$*Gcp4zXoIVعi?iff4 ִj7[ݱi߯)Mfd$!b5]+wN獂kX[ $۲uKm e!>T۱$>B!DIb$I$Ir0q{4uBj"$0wr6Q(l:Aus${A u69#`UEE.X ojLdYVLd`w_x񅣏::;+/fP 5Hulvy(j6D‘d$n_~ G*?;S"zd_7g0y\rYY'LRJ  "B \Jp,@-W^˖-%̦:6 @N" "LB! @b׃1zH(f.f999>/=~$7퇄kH-Tgux@† q;pBdg_Wk " zׯO2m;6446Ҧ^B'JJ)8l '?Pu0”Do81 k7`HURN϶ ˒D` &A K ?PuᩩّH$*Ճ#L Ι`Sh *h;?ȣΐ`UUmP0`V۠"@`nefg6`d+gϝݭGTorr/^|uוL/!;NЋr{ܽ /=nPFٴP`{M>q{8sr].[ML4 0*t)7?M՚>磏?{#4&sA1Lpj u⤉;Y;Ph _دw%1~_ӴKMYz~"'8"8an}&hش,K Bn,ޫVj_Ԟ 0RB\DUU/x9ෟx[nT\pq \ !# c̴5 !!B[ś# TP-@JݜH (шRuf7[mW/x#V$J%F(g;twg-: /_>qγ2vЮ} 7q'.fC~ jo)\vwg@ X/ܕzۈcmgfej;PQAYYJTDpac/p胏>2d~nH#̪I3-=Ks"u;Nf3:iׁ uu#l{x<-[k39Q=5nC4-K}`ts .ࠩxPXP1q(I UtSw\ecGU: mO[UiI)6@z@F4r=ЧP;&\z ]h"8gOE( (*UMfzU~cG;#td`& *Lx7vF(x G#)3( cLPPB*Ԩl) Sah P0EA LnjDlU؊B[AO:'#$Z #7˯ Fg{%r冕M|>=O?W| |BH|qbLraGaDBK0enҍNUE\ 1nm33jzӮb²OS5$w N0q^11΅K)1{ف2-f0BȎG1t`K<[&3ᄳ.RZ[S1}/8 ]xX uy\mۤDqyr֯]v_xB_avSRIev~vFfi H$T˶]I8Bd&mrέzQcF-\4Ǘw5Tpf\6H.2y3%7i1KH8C51(X`{rs"@3` [0Hz `f0l%M TG%[`9WL8oYL2I$Nr!q 36~0r ,r0,1h~MYg@@*ٵa=_|G)S u\[ (r0n'iZ%D(șmntܺZ_~9-3sk_4g}>qشMdwޢ׸:ycd V]s')la d,#$PGe/RaC67ׯߕW\b9ig_:3sϝ??eijש]pЍ-Zt#3QkY,wF V\WPWÌ1q%L!nw s?t;֟fgPIB,JKVM:Թcn}!.)_&D6nعSgEQZl87M;dǛ$B(\ yv |@Hs'uB;݅.% D%4Wޛ퓏>IKMPmh1c._z{ϽΛ\pnfΚy KMI|wGuԎ.VJ M2[R4,n%f˃քD &eo|,32?h8|;3^ GG;_^ݾCAZӿ^p%|e[B1u5_MsL(!4Sy#((>/\m[[h5Mmri9%cOVLj* puӚngSD kX`gE8?xq0}@b".F61t -,l5n\c0 Ռ P8\r-mrI)-Me!dibSTJ aqSQ3۩QՀ(nCD1 絽zu}t @9ל~湷ckYLwt[ޭ7#6yms ūhHbCE 2tK)g\´͢E))`SNյ (lW(JfffMm Ԁʉ"N&+˲RRS:wl-f3 ["k ˷W?_~P4T_W/,/|׬4 OTVWѾw>ϥ4V_[ 9Y9/;;"vޟ<> @چZ &Xpa3[neˀm}\#-&/wkేkN;9*8#2ϟ5}E_w> 0P:e;$*76mv p-"0fY`ˬٟ_Q.>C/Zo[z옱MMUGixc.O?T_W[!<98;v^~`G)zXnEYȶm)%L[ 6դ-l`FX*Umf_pG ?k M764[sk1-v:Ok[D|P,T5%?׏-߇0$l5jfVWY;!6)P c=YYa!'Oey]^ Sm&0T iVѰz/{-7yS@߾NmB "$Zgn=&Ƃ= Εcإ BBѢEe1#S` #Vv +xÆ ٙBzgÿpCŭ˫l4nxBͦ0`hktM TTM|ڪ}0J*5`*_.,\p iNKsf,nm뚏y|+V1tRzzO=TUUU4zɺum1Esn~ń-` RHJ)nX=Ž/6bXIY`+$dNX}N0Ѥs*Fu0Ub-0>m^ߧ~U*E*f.G4RL}O`Z0̴1kY1ӵ/?V@:e= ,gOE=qU.OhfM/9W"x8X|OB" l!H,$HoK1uݵRh}GALq++8る1 G}׬.(;g@b.U"3Wg}_ru/}zrM3^~EӟY.8~}?z\Xl+$$H!D'qT][ݶmۺHB(覾lJ.cL#1,1 w`6NpLr=SJ@QFMF'gV/;t>|SOݫ{5u5۷w:o[]]!8v5fMn ;|N'i?5!bXV4~VV[u5cs}n̫^y^|M…v3~2MisMn̊ZN d#}^7cU{oM#p]SN>@ `[67۾xSƈa;Ro TacI"GxԔz~ǜst_q4P=8 !( P܈s c PrBh vāNk/G!n7Mijؽ=J=(eܶ9@`[#$)pu@J@,Ksk>@I)q D!W\թO'ι9׭OOK眻UUB5!0bX^;9qj쟯^R,9pHHrQ2,n|SKqj7 (Q3_WZZl$x㌗WWM4L,@M`s.m]?N1{xyfنiɶm{>Nh-t^*EjjkJJ8 Jhb7-I' :x}DvE|GvPs9>f6{N礏?Pm0.A )ב=tj{bÏa!+!zt*]эs\.Rc3;-3 H.%iRg )kkj  4& ==5 be;7Bo7"ր%DibK ƹm2wF 8O8o&Ѳ-zrSMi h9in ޮoJ<<7'1^jS&  7s#a9T7tQAƘq֦M8R)r32.@ r F.d;q`9ffM6_Xf[Ûݴ[ʶ:k|sn][O<ĺ>Yzj:~n~ah\333=FrY4!\k ;YP]SQC06ERzL?vB|顇8ab]]&ĉ DNaGԸO AnӶ rVb_! SYHD9l;3nZbe\A ˈe]*F}ı  dxo# Q'Bu> 6cjUe٤ETZ'5 ޵Gޙ+*_C3pmnJ=>wT VԀ)㎁iΈdH)yGqr\.<=3y-uq"69k !sO9PDC"fc i.&*U!EĎhXÀu7\.R49B(3=Y9Yւv{<lrss#$PNW*}>t[KNG,aӞt1 {<'N8Ȁ zuo{~sEq8prBӛ6&$,i5vLHXX̝>Úڤkە-XLєzm%`" :jGy8;\zN9H)kõ @dĎ(T@n6kf[v].b z܎CuEhhkI+lmfLV>gɈ&{ׇHd_AzK%8Bu;x/?2gOV!tCG/;dBzſ ` +f"V$iXOm 1"Vi.iZG>veX6bll;}kb 1\ؕ6z,:b˖/@I R=.eJ3v+74D[86F zxvIĘÀ[.w0$!D$B(jG#VĴLs8Fe;M@7"nt׶0I4vʷ9DZLpI8!La[0yaZr""\#DE(cY.0n ~?RJFҦ3Ҳ-mm9w\~Pq;-ELZ Bq^$[pN9wV>O_e "Xb@`0E0PL,,,|W]9#%E67^r-3T1pH Q nw;KoQזrOb$$@2hmP@!@ fIvq'l>bcƍqa3 v" *# t3 !0{rĈatޖcEUTEurH$ &+qiz/m;#;։qB]g5gc[ N %0 J-[^_[_WW7!$i#J  إ{ZYIfnڸI! L(qL ٥%NV Nl\1݉NxcnV`y"x ҏ΋< ,rQF5Z%ۦ~?tQwoU%1`j˳Uҷfܶ9 7 n!sjH~췙ML9$TM -DD=sb*@`=f<}њ7|1K;@j>} ŀT*\^vĒIp̸cLtD qǍ"TiI'+C4'cR4owizwN(m34;U%JgC<UlQJB:*udsF6m|<iS;em Q,ݢ"\oLTaCrk͛f>}deg"1QLA+Xџy?Mmp )*3 )FiG$2tȣO<gh!vdŬ2r#[;H8 ?kV;F)1{H=Bp$ܩSnݺI0sƘFJMTeرY)%t BI@H0h 'ɾnlYr{$sÏSeڢ+[VФH$7?ɟc7eYW8R§_F춧Ӗ.׽$I3iˏ0 : !,]]v;TFH$Aŵ]p0;a9Dٰu~{.^pHhv o_i,`YI$I{0& 쎐hZĢ}O>٫`ʔ)B vH쾤@5 \FeC|7HeMk nK"IJ,)H k>f.XZUu'/eB.Dm*E(Bu=LLP aSH/&z.jP̂D@vb;sV51ZY6]޶]ۧ9oES9W)&`Am;?VHr`'r vYHldJvZ&7~Zyf # Oq$$U$8SA(q&%f\)^W8b*JSqɘB"!Rjq-:4"C)_mL`3.TUhCbn$fU`3IOfu57E= nC:6U,;eTR#@h夣H kاpDRbf.XtRUFw)))^oM!+=ݴ-*XJJ1t+k2֓`7`tb~> ! }ZYYޅk,YYOw) gEcƴRxW{,.A7(Ѭ=;h="7B}X ju~LSL:8_@z:2ئc:7ˁXN$c4&`"mKc?u{mW^;.vT"Cs1ӊ:%~Q kCffFvIE}>sUtхkh^vtY 0͈V˚2;nwWSn{+DKrB>hc[#` n6 0¹uIUy{Jn']{)ހv=i7g>NMI۱'#711ǜ>}{E\^PcF,]vSgKynاIuǟ<۶mBBH7Jk*;uݰ9Jni#Yck;nkV,ez1eLii&'ԥ`|WrE-VFZŘ@ 5!/5sPzVDo8j#∣oew!/ nj\H֨K@7a0)%X77mVVgܲHQha666lmr:-H)s[#0`tCΧ. 8>_.;6UN (fۛ4pS ~jfOi ,wnA^_uAy-NKnJ˰GiʃD)%FI"ĭ"*@iTuȳ)1S7r+)~4 |^wm] QJD8H;2N2#7zx˶a36eˊJ ! PI$غ /8vl/=T`$USo_;d'w-{4o?k}7fѺ[/?w%}Ng|zoSΟ|͛ˮbmjqNW[3x/6czH BPa^D޵HT(WՃA=7U^YG߼Y\o1@(|K(MyTf(v@ V/- TP{ŧ=ؕyRʷN" 7q& /Bf\Ja}zt,[Q\Uij׻eT$*0pxqOZ::t`]uq}3:>(`f̆ûMb &1$ L)/zBV]}݃ }<Ӧb0 scydZ<N❯8ZUb>H/|7;d0q?hǮ4tjn(!/^+,"rR25SVeEH%ZLURd~\V9IC)zY9sZxe~_qscf?E@]^USݚKfʦ֪5@STfǒ\$oMcQ6}g^y)%^'o;چmzTfXV2O^醍wp\{PײX tf0ƕ%\~Gezv?& '|C``> +R #!@];  PfiV_[AT#"S))!;Yb;orpU7MSySJ@aA@H٥]߀KM<Նv4dlp%zw` EPT~Ölo/_?a*[fUW!y&BfxX[ /~rS._Ua! {/M4MQq\ XnXTyGS{=3C葘mP`DG wwgY}Cu+dmYEUg6On%ïж]be)ڰZе_ۮd7g\pP3ou,A &8PJ{|OvƶM3vmХɀ -0ݣp'n~wt~HGwjŷ"HqCw7_6)] my+/~HqAŖߣ:qyU(=;#? Ļ@A~V&;';/TQ 8zf QW{KQS|{)+Ͻ.o^ 4H*fWˎZaA9:{Oq//{8!]ojL?:zԈ|y}-SOK{nlMsV?k[LR@J[E8{Trݭ_}gw<仟~>/7L)@Z_ ܡ%e{bǟ+ pd -I$YUehK.>F}Av1G~KZ~ots'=GO^~x>y鿭׻]ןv,X^{ūN|mZ~c=L̀XU,=҉`$IrP!lo˶ IH#J$I$9|{H$AJ2ߞ )$$Irp )$$Irp'G_6ER:'&i$n$ $d䌛1ڒ$IB`FUXcڱA,9rdn=uS/$IB`FQ`Ì3N)ph_7/!7v\⿛-v9{8Aa:smKضsI$-jMk7 6ቒۊ{y,׭QLnV&c3`ҥK] W|4MC)H>1?9p̠ ̓ ˲ J$8(j垃7 i㤐솺_\xY 0=BHJ @'\+)/|hAUUnr%yA/I!1W6I$ B0&Tu{3J}``_L"' I{G$>k! gc6Rk2b㲡1ATDnƘR sgfιص=REQEI9!IJ,4n*9H7H {v5KER3{YY[F p6' !!@( T۶UEݯ5kRg,s-(CrfUQ7l*(?laL0BȊ+E)**,k#ٳgz^" 9^6cgW515RS-+r1ۀ%l sLHiS]^ѩ9MK|@ 1΋M[ [)$uzt1J!İ0!!d @R}AUTXzuBG`W^~?Opޥ_zE&*x<>O40t] ] claQ=:}=̟?QI&|yeb1]x}^EQbz`dӣ=z|>zd45M!m4B~<3kׯ8`iOm s]{dA~b`o:STbnZ=@RBY`Yzi. ABN=λ%qƝvi>Ƕ %]rYgcwwL6N|ӧO?vu7^׳Kwy'//ч[n%q/9gSUUuuԡK.{i/]FǟxxǝwKMA4}T i&*p;~A<U!a۶7UvP*xm[qR}٩Ի n6JR<)֭c~:\}%#z܂чRY___UUUSS (oԳN~/}?)_~?Oy u]wrUO8LJw_~qizӭW_qnT ^' Fȑ[kn=㱭Cd= EQ|1(\[e544LR)o0}vf6yfz&Ƹ!}*6WhZ|ܵ{#sRk0rp8B7f";H4P1*K !z8ܔ`00Iz\v[ݴd [0QЦ@n/ 1?~[/:~ǃ"8a-[ RJ.e[ʶl5M3 &P=yd2mnK$~ԱGÏ%%%αBιW_MA$;CZ@ ,S&r_gı}@mYL'e!!$ eL"6@P.>0iҤ_ׅ]X^Yrc*Wm6q-B8: ns .lG@ ko-={`KKk+jC;2j4U,8_#,Y[䀣b^[춑;_"P}L2D˞`RHZrUUE x@k>Y¡=?r#zLg$0uԋϿ!߾[e["zToD"8aؖ8p3.3sΕW]z@ Q=zjvJW odx2F>_˃>]qO8i$x/}ݨ$ 5%yotY55mܺy0I#輎ys 8pa K˲4/Q !z)ahnn5kH0 )e0ׯ_TBch!TQ]9wcl p8lm݆b <RWSlGQ!DZŸy9g\e~}ل |)_O>nT (t4V1~Crd̴;,~ߑ'G#F6GcB!k(rOsаzb_M4Vх[LD &HDΜ|Y'OpmlFx3XI$!0&*/7(@<, &a?'GH $I"(wg~RZSRfyJ#$cI$.Q&O Kʥ_JB` I=@RH tU߆(R< t߸d6cܖ@%엾͊Lꦃ.x4 YSsIDATׇƘQqf4xg3 g{\`0prtsK8]B`ƶއ=N+’l @ Ȍކrw?~9RpЈڸB__0;3ew}Æ m<$>\>;JPdpW<mv q$px3HZ(|w9gqh* 8p!<: I=@r%$ߖX<.S|C`&Lr%lVl#NiCwӐ˱͂"!HoO"!<U³S_jxD*2Ю GH $IH `I8m{Z9 c$@<u H$7, pλ>dӜ*Z&?kj~/B`R1VU`9,Ir 9*l/fV~P1Iu!)$fEiO7o&`@bzlA7jv_`܅਽sU Ğ %RzG nPupGE D}]Fp@g@AOAŕ)Id P c.EU`-=s!7+w<5=5نv¥rE0*{)Id8sf{ 6` }b:z&_J} N$λuݒXIS yx]fM!! BmB宗|Y3m#{oyڙ ~_иicq.`-9OcO׫hUr`rYDtBp}ܬ}´?3ဦP;u@Ԭz: qtmE7BVlu1 DEx,!W\qh.l@KϽdRO2pnu]vy͚5ƛowy~afMbBpMXnM<?cO9}vqIP]/LmJrߐUhY+ u<;*PvYm>vHA@\wjA0]Y]r ˔r 毢dZ"i&F]Ec.S*? wu lc꺮*}O>oWWXn$.(Nq2jԨܼ;nc欙zt|ભj  ԭW?}a肹 M)vra,[_VfEYNRd 5xvK^ᵬe$QB<ҴIS"`L4tDƵBwCBҵKqqqaQat!Dqqqϡz !EEEb1b%%%Fx!Y8oaIaIMoP]j‡]:We9ٳ9~tp  ՚Rݺ`; 6aV5!̥ P!!j٪}꺞)8猲lJ_Iu vUaaaaa?e2c/aڴi٣5]S݅TV0xt0Ky]PV-X$=ʤBB"''租*3=Y-O"(u ?p'k$cJ waO"#TH Oإ6bVIB#..^L|,^4nxB+ ˆ~}ts*Yn& ~J.#xb SL&Cz4̀&5šS:ާ3YYYުުd@afJ|o?DB6@5;a aZR#HzRݔj3 w}E%EFp=֬뺕¡[ e|UUbp/r/h'cq@-=sNmjR늮+{մue6OYog\ |w{-m]T`*"Id$$14ÊY{~,Tjv$;z 89xr2pԊ%CIj n@F Kj Id$$|NsGv  gV\AB*x-}H!ކ6lrSmq?]Q$2BD*(#G;z.Yo5;aF^}O6|$V ('EԾR*pB8#&h5޶)KN8T^U {FM×?3'sk'G@OHXznexf1)L!p=C;svz,cLQ|ԳUfe")#Ԃ=wsU,uuگytrᇍ5:+'kڏ^xܺ^» ;V3To:W#Ϙ9#+EIkfU ~qޞr+EJ P82^\T|r-1F>#q=څ]8a„~?gl./YYq7^]?]^IJ[T4>6n6YHnPN詡O͙5kϘ#r-|{޹Gpb(O=TIAINݜiM#G .y #k&dE(T^U ~t_:̳1!#TR ?Pd7י zz4Bp)ϤR׊CKh:X `s~kֲYIic:4o3Rt 5FEEJ)ӷc;?uB?'{ro֌Y3~wa/feg13=viS)L |-To!&c%!abppuv#e q|AESJKK|I- .2;5C^[t 7Y@t: ۷g?ԩgzW)%t("nvGLa͆I&P0X81}[~ԕEq @tUX|ŅEpAev+2G$5Qpހso / a@@'d !bxBÏ8<'A^+. [63(V ]Mמ{_fW?mjcc%wڼx1ln[DVފbEǝpͷzKAqAzu^op5#<餓 ˳,n9ӴES?p$7fRCYӏr-0Yc-%Fuʇ3?j_j@s qn;z MB+_g:{l3!dĘU0srfԣY,kOzξK.-[d, >C vdQFbϡJ1ɨHmZ7{x?떻qyT7o.\ a&L˜ij87_뤾'd_p`İx0i'+i2P)̛ē15E2#`QމT7e I,cAH me**ѽ!"kǓQGU(qs] 聺uYf5xnڛ֯Y4~12tҬ*Po%>93 2R%%%OؙIܮGt]~yTx"nF</--u'1|S46np]7VH}V^emú4h"n:L#@HmڇĨt**$x7x#G^=+.:w@K7}%WTpѱ[) hu "RD*Da w򵄒`ź@ +EHJs/Qzs],*T-PPDI"]3PoGZ L LΉ+mVZqx}7ͶJ/Ϟ9( +N( n]e޵TU .{@X" eAi #`([| 4mЬq6]άuVxRip5Q)b^o?כ +TNnۇ") I?K`Rf~pYcXo륎M/ϞL@(f%o;&(66GU Dep/Ӿ m%olo?NfW/ZWjp"H<\o">NOQI7_p`]Ͽ"8jvօ@Fף Q'f5\?l %M7eَ vF-MO d;;z#ٿ `[pT؋MQ9cyA17}oil@k6|vM t?>w\P԰@ WHgOJA  0ty$THHt; Ͼ+O9\34QF)`(3<Pjڥbo@jtMGeƨ.e4Yo(qn"U-:rLkV,ز?{dP9ϣa0XvX f{E:/z[*M(8$BB/~GŠ7;]qm7%x c@(ސiiX&(h0 VPX(zVs{OMޔo8g t 8P HC?f&Q˨u6GwSz,tq쎷MMy䑜hNUT#z\lY"PrG 0`;ܷg-e0t aCii!Id.+?yݽylQQѠA\5R񢢢#RJRxgS#\;@Hz&BNB>r aHjD@<3maSaƍYo $] USu|{cq1*@XT 2DFBB"0A%q B>Z`ъ;ouchTW 2DFBB"Md0`J3yA#qL~<ę$UvL DS44 Gu{鋏u_p̳DiNwM*IS e)$$]c[(@џ~o۷;˯p*A8@@2Uu()C d`{tq*4qʩBO>m=4vqS0[=~JMF .@ h\8.u ^ U<h!(U؝=Hʣ\2 g>w#cwd D)ꮦ PBb-ZK(Zײv8weLyO/.vA1wU+:T~M u-r;7Rض00''G)Sx@b(][!(C2B ?m HuCA?W^n+!vjq5ì%+W'6-P` حńi s8k {7U +Ah<+ejD2A W]y[ࣲ5v=g{\mۮKM=02J] 7oW/ݿ%f>ye4;0…88TT@JBb/_q#f:t%<0zċ%%RHފ'8E? ΝW^#vV4Bṇx%8d~&\'*=5ɥD\"B)_}~y|% =PU ppp#Id)$${!ŀ߈w':ٗ_@zwWpyL!aBABk2DFBBwy,R((,@w_| '\ hn eEF-RDnFl&BBw3;-@=w'p  qpF:Zې$2 $nCV8aWM h腫nk޸ U%YjE;/#H!!ٻ0rॠ*!pݥO|W 6v7n8ʨhvrQ;F@ E"`0L 0 q0pt(Da pI}SmCƓbv K2vmKA[χ~!!O+g]pB@HZB$1%cVw*\GP=%i<10* h`咽Ԍ.A+Bǀpy#1j, =:Aq@y32@9JsBB—ws7&1 u5]xEvn6 e˹G5c\@(!uFG+? 6(*P(PTHG{D#Bר l\JBp`<@J8<Ғ*q=?˟]a[SU벣uZ E0{S(J(k巟H*á:VU @b}͗@REr@P 06<Aд0SDh gg4r!$94UݤV M`!ih%*JS.=1@'~k\ !1 @H!<Q[8`i7+*$EFo'w8bEjkanepE \4hZȷЦ2]$][ @5% a0*B9SY3ο\~퀻[ ) {3T \WGṠ=L&p !Boެ_Iv $줭*񽛵mvu]SںGŘڶ,7)k]~QM2}t>!ՊP(&r/=w!_{ҐdfP}\@-O"dG7ҭ5pFޘ6h!X%5'c\g =o;v}ZJQ鼪4X2( E'@!-~siQTS:-]evi[!T +BcVT**ut*# $Fm X+Ͻ8}Z}=ɞ%WbV#:tDU$EE8W8  %)K|yu^xs.t|닧ϝvy$h^"O&ؘN@" )C.' 4[~3' rzq๮g2&‚ AdOCƓS7Q {n'm= UTuʤe@E+Ǯ_Q] qAhJ M5"B۞dCƓ۸mX]bGC"`(P.UB (D 9(, -2?cGyaq@Sd+Ϻ=4C h܊*t 5=O"#dFCDAMA`uAT;CM8 smKAK^.LP(SD=di4 yS낁N;-?mݗܕ G %Id< + v@2]@P3AhUSY\wȼ}5wX&@費:wC[QwDRT["Id)$*b&,B āPh O33g%AN/X|l~YЌ痖$uãmmu(8BH!Q8 A@@`H[*ϼ:\`P(L _e| `-`:)(BT\FHf(6@ D N͔wn(}q@# [&C9+K7ٿ-}, ITR!(#hX@(#GZR9I)$<`*,˺QuU5dwmR#(ZՎ|,1]-# b4.ݴ /'t#ű=O-ȂKpUU RBH-@@I{2J!!k O\gjfz:+G 8 Fm׮Q'!篿O(x/`وzw/n}ֹ955 g lѢ?R3=HHPRiX@׶cvD+nѽO`jG_t/s; 8G&@(@ڢwr\KWؖS#[@ tlĀE]B@rʘI`2n6!Aq]G PE]ؿ矟8a$vzVoDTiBQg!' G[ib-DE84szޏTn߱L qlpHy˗aR׈(pT [3EQu3n!$$duaO13iA۱(RŅA4h9x{AFAx BQpXPt؀ \̓ Awt= )T-u Pi|7]~z:QN`xԆGݤNB$IŐM@Rzp8lzP\ؔ6m]p=2826w3Zm;= kNihP)# }Oepb.L=Ԕ=8:*,K  C 8t34pBW{몑[Ing[7bn=0,4!)EJ{ eQ;7Z`l)" zY> U)ܠ@FqH*,%ɞ'H${&2DFBB"xA Dg"[E'xY4mSOH${4cҤ_}n]{9T 3niQn{&H*i1U9&˴f]u]9'Y"1'sTHHpLPBUMڜI$ɞC빜q5AI$D$4cQaytE"H0*H]K$H$ ={4$'|g{vdyRŨlㆱy5$^̛+AFF.fD|{D쵆 YY*_~ߛ5eMѻO?Xa5<Ǐw= /x75\e#Ul ,,Yı gY1pXx܃cl_K,Y4U: Bڔo;.FJ=N=Z7*1\rɶ{r7{u :myaG`wV]Oj*9۳=UW1R*P*~ |˘ӣnS!)Spu) Uͅe xupLD!q3^-!?Ǔqߖ*,s=q=j#~|*$DjF@<)FM`lr,Zāu붤V*{ϣBƾ}Uh yN6NA/X`ac{@ty"HՇ(=ЃUwlEYyFh5zXp`,X@pAh-!a۶i~y4MP5&@]FޤpDJY,)r K鸍(pK K|SC ^眧jWGl,˲ꮗ->V{LIQ^yٮp.jF+( \q5]-Ӳ*LUtɵ{8@Pa{ĿXJ4ZV쪦ږCUIQ@ኢ֘= ESCq۶~L)fGSҨDPF!%)(( PMti6 51B /T (Wn%QjRP Ǚ̸Y .4U^fjXI.(\&$wy "/p׵]$_a"E2d T!.*(MTC1/%vQ?el\N&vj90P4%Nwl[GF ͬ} S%a P6@U`,ՠNM9J8^#"J¶E@@a[z@ 5V44{< V}1v8e!iF Zyy^n.DZꮛMń {a9$ws2ZWkoY2QF@|VĻ*-9zPٌ[߅'<дj#먬zzXU41Qlp@H9XjUpru\ESH:j0RҮG)!ó=10ʗu*ө'míy.yjxcmM^x9ǫу&vl)%๞xٶ `p^\(%~2<Meh'Rj15&S9|e\~xJ(k=7Te)kרFS"jRKUU% f"7c zjlVg궰0rXP6m<NjqL:U D md'`pS}Zua#LІf: Gʖ?Sii)a]rrr4JzL,**Rҵ{אqVC244#5jWbRrz _L|J@ ē'N֪TH$t׶m*]pygU0'F~)NV[ݼeGuWU\@Qq' kȯ5f8'kO84ۍnҡWK^Ҷ]s֏_tqAAAikmW%Pp .L\do0a„7'pZq2`27l=9)y~i@hk&9 )Z 7q 5g%-5XϤI^u.x9ji^~Terw[o>u3p}e쫯Gy߃|%%%vZԀK\T[|ŋଳr]8̙=RBbٲe\FBnM#d:տ]>G/$L8Q@pW7P83>Lg0E,KQ&+ :UqO?QF:tlٲvUb19P>W^/x4"|o}оvbͭUfw ;ЩCUkWiFOˮDBz0uD>|k[_߽ܛJ]҅iey׮4,e˖Zi} R ST%p*2&LcHj_e[A=`0Nvzw~6n 3mr*UkVmB)XS J/oXzŒ~etBP̜suRFegm~^Vp#hMxԩS_F@JwJxqs=|w&nE9;';)[]*2oq9Y9Wm>H:y٨HUkP"Hs~8}2 }3!R{~-]r%+2Dqb ۷or,#+J?G AhOcl ???AUV=x~{ܱ%%XT/!}ݹt:uضyYX/| w~[zMݼqi!~/N]+aW_~aBtدqk+Lʒ[TP( \~ 6 !]v`{"8p\{Wnmw"w۳75\=jfoY3U+7 `ЮCղA22LpիW|~;ЧW%~~np *_ҤG'׫ 3vL2BSO?H[8 Kz`H$^{; QFMiZJ|EU4)UOnsEو#4a`%K K ^/+pETsTЂT _0lJi[^sKz՝FT[P55U*=PUG>gT1T5yT~{I{x}yˆn<#?ZEW ]2!0ѣ} yg/]#vov=s?P"YxRCU/rxEgEDS #jPzB !Rp%˗-ۯp@W}ʞD$U/k/3,믿qt_'Nu<19Pw,KxU/Vz 0ۼЪ,go~f=ϣ#F}￿gꮭꤰ ༳{cc?791*$Rd埗ᩋkXjoOqz$jGHȕfS^VPqSC:D"Hj"RHH$dH!!H$!0E׫4D"T=WѮd-dPxߋ5mVf5/H${*`hu@z_ؑ/By3H$jCQP( 5@  UfPD"N"H$;E D")$$DSH$NBB"H$;E D")$$DSH$NBB"H$;E D")$$DSH$NBB"H$;E D")$$DSH$NBB"H$;E D")$$DSH$NBB"H$;E D")$$DS !DuM"H$UB`B^qI 缺-H$ mڼimEEE6?{b(D"HPhOۧouJ"H$!VB"7'oŖe= D" _>c-B 0X1V^H$=n!ۏdFyB m\p2B3y0 cBB@QqQińd<ڡC+W#كq\'n?gGH&;M6۰NaJ2m70SJwn({l׼$2i:H<;x5WX,= ]t/v,+31v'=mJHdegBEi-ҺUk۶w@奐N%ضH$v~d*rv%vv0mԞt;Sa穪:z^ 39<ڶf͚X@rsZl ?p]\]bFa"f'|!aYycIӲS t]@@D&GC)|7_.!S,C] èbA P8pBU`((K$x̪;  ]׵,+HB#wlgՆUxU]u]u!<_{>h}:뺢(e[5!DP(d:]5M_o1cǎN[/nM4-;LISQP0TV'e  x"LP0 xܶmUUCc,LDBP0 o<zfͭ[ZZWlm' .t]m۶m4&R] 9JB`/իV{a=Ca _/moÆ KKKy;lMӂ`vvvQqQ43B*NJ J9EU8fҴmτPL&!,H4 ([hͥ:SZR2hj|Λp^h4aㆳ:czGD"cƌYbg}1G> S[oջw9z/Y~.Ydxg,cZu}w\2C}ڣ[m;y˝%E%e /77_~/wo^z}e1=9q3~ѰQ`((ʴƾ>G8#ߛއS>|wN;o~旙z:;.]}6<ZTn/'~$!di=p)2 +By葇z?lԠgv֑=|'}=_99=ݏhۮSC iƍ޽ꫯu{G}Pr<z{[wŊ<O?EKի_؛oyM[(ʦM=tO<ܣg?N;vGM<_Prk]}^^eW]/ ~P>_}՞E"M5^xᅷ|Ͽ :v>zxμL]o|~;qgq&n#+xڵiW t䦂Mmܸ88c p=z1xwֳ͜GjĉpG;{O"׿ߤ%Oڥ몥~ɢ% 4Xi?LsO=ԛo9F`IU?O/:xݠTUO8`5gOג:כlq{Gܱm֣k`5mSP;O`Þω:V?}XU.mhsɥz⩄>L]:?Iٯg> _}U @ ]j=>Ǎ?79^6١۷'y;z~WV4Wl?ϳO>S0 N7IMO0z藞 p_16o=ؾc}6mԶc][/R3X,K6s9O }ͷ<5W\iڵ]['|>xq7)F[|q= !P` Æ {o&G=Ǽ4 oOꛯ.]/B9gzV]ϙ8~"N;崋.hCDiI<݋j^0R״WaHqqW_z٥:fŚ~c XrEfXcڗ_koI;(?S>7Y)_Nm+(ܰz=77 -=㋖,joh4d_|E~}i'6 ο /̟k(]v}GWlǖ}mkk㦍m\r{#=yϾgKÏv4%up84-0töû>W\~EaaOiy ,TUuSv rs~etQu֮ƛ]|KtAڵp usKI!TQ('>)[@ }~|^ס}:4klG>E)N)U5U3=Ax /05=G uD{բE C7Zl+zf^]|œ>wS /S-'s99cp1cڌ K64id7v15kL T댰+ӫO` rJ : ޞp9?Zq{!ׯ?|g$$VY-_zBc}93 ʘY`6B<dz\ 1͞;sL$i; (☦t[:k]paߓz橰//Zk' 0M8K/~^[oNޘޣS9{N+qzв/3I Bɘac8~1=4-agH=2C,s]gIIeifZf<.KV.YpA~N;2Sh$ǟm.O;p8q.w-g?|o0Bg۷_SN>e!ES#w߹ ޟҥK˪.$cߏRGn8^\w޹4j(JcIeY|I;{ŋ,[ Ͽ{ݿeCGY6;c-Y֦M 6jժ|aix:v>u:<߰~ՆU[5/+0\p2f'mr!i_fvb~SN:a&v^:Lzk'?9ܨ4<<; F=0EQ&9VڲyK[{ Vwha›>ޠɭ|r4[,y`HJfkٮ6o@&mN$׬,q^c3~qx]wߵK\_@ _|eYO_TTT_]ӝ_CZXPPg̸1˖.o֯[ jA*)ˡn^]gvDn]9=K.wlryJEt+%KW.&FBvΑݎ|’͛.`N8gرmkӾsx|6ĵ}{yؔ}ٷ][5;^I㦍x9ǿq:!2!tRBStMwqǠAmeYEv.ٹٮ9+r횵]9Ŵ7J}]-*,ߜw F~V]w}G:ēOܧ> Ne?k1 O9j$!lԩ'|/?r_~ƌO ,]ZիI<5UخK.D:}ٝ_STTpSqq͛۸O~L oMC=C<{'sP<3_5!.랻< Fxgߞ=;STTTX\+LpLRy䞲Y5˛4oB}| ._`67~ŗ7n@ztAk7mߝco։ɭ^guv#53fÏ/\O }ɧ5uB˵  ۵zy…/=3g;]-(,/Lf(Wo\Cw__r%ߛH)J Ǿ\]RcǍOXι; ءys?p$bWMpJ~A~Gv|eהv[!O:u4mڴE .\mƟS([hۮ;v#x({ |ͨڎ?kٖ^EDs4֩_?8sMӊœ1q/}ٯZ۶mO=s9wהR}O|7w'N %]8dy^Vv˲&WL&?>ض]3 <۷mьd gyu]o։4͜=_UU1}[Vvnݺc^sw;'vDNw:snr7u>'=%d2[( w!"ؘfŸ4SvA{ZB@@(~fO}k1Ir期tI, P8(3R_Pr),#}5ky7u?ώf7`g~BI<'w7!H$ bŚ%?3 l(I~~M7ԺU۷lӲSJc1tO:夲M?D"|(_jm9rd#!ĦM/{.n#H$IuNV֭[7rȫ?U׭jIENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph6.png000066400000000000000000001630001222557406400235050ustar00rootroot00000000000000PNG  IHDR zw pHYs  #uIDATxw|E?3ۮ%B)ҫbǎX@w+".a/vJ-^m{'}wg̛7...... Aegض- @ ǣ.X(';z=ewȲRU]y]?LMgcѸg*p8q޽{R@ρ@`sD(BVUuEggGkTEE-\߻G{.NOw7o!-wU_8k^OO?=,|w-V]^Ǽ?\>Fzeo\䦪 (D&P$Gms,kak\8G  4.1 %pAGXZ碸Rr=N[[ W EۦD {[[-m~k7/.J/.HںXUTP(B!Ȳ(HAZ`SѦ|=/[LU*B*923s37o0ooѪWW]UIgP5RQo~Z,qI&COh\i4Wo,\ݷ˟{kuJ0sb#[a~T+fwң{ T}AIs8RY~֔R2HbH7'8+ܴW~U,seףjIy둜/KQs̐!;]uV Ւ߫gczv&\"UFdxj{5_|^w˻w[^Qb$ -kfIF5&3۶!CJUKTr3D*;tݯ}4gYUj^"]bCYZUDo E{wLys\¸۞yOo+2'y<C֯=us.UI]bݘ -["6oPU Hc۴Om?bѨD!yGaZLHxaYDHd**40CK/Wl*dik5k&Y$=lC8&uh&슰*UTtPX[-ߗ]6 p BB\2LeB! B**ܶMj+*Ca(uN-}3c>Jm&?8NJ4U<5wԤ>W(UλU1-57?H[f,j; U?"isv~٭Ԭ%+N9)esnzu۴54}7p'avt|KgZ׫9Uu%)~x `1<,csSNV_|=k.ח'y^|B ǟAA [qvȐxUwۄgwZyZVIO,m Gk߶=rϑyam2ԣynЬMW' 漢 %jX_iA2k ւ#ͳX4 $ Eԧ nyJYBBe2S*dAe*[-*Q!AR$$I2^#7ٺ_zr 26}.xFzyҊO>yL0DzئeyAYEuU(,Moj;0`7ÂF]8U^XmŽeffw#{HigmڬӕO?pم ŔG<+?޸o>iP6}|~/?}sOym~y_i4qg+WOŠ* e B+T07kç> 4nݎ7V8i|ҿ1 nW?fN̤[a'Nz{c//=;)p{Ŋɇ_3MowI[OzՏ?<'+KO c.ֲE?qUGO9K7>݉ҿVqRj#lV(rPP#9,^ ny[~_ʷl~Bd"k5=-8wu ^El ,|9 E9GUE.+bLASR*CJQH3?8zƜS=1nJ\IDF2o>}'-ZBnS5#3μ4m8?wZG%^K z  d9FAw }_O>5!afXVL "@s,DbK͜v-bjKɫIEM iPi7ӵS.p96`K-g @ulۛanq1a܎L aۜ1?g;!ڦrGCU,tpq~_2vJ5,ܲk75kG BY7XfjBHFlmiE3TT:QVt(@#J[-ߗvH*,a') ]<,9+H6g$mg56l*T.\ Se*U<>`':{ףUe巾Zn<̣F4BjMm<PNfL"Bj(`ȐA&)^jY(B<^eC~)qWjzV*_J3Zg2)Ҳ0vQyl[PxL?w Uжm[~“բ1[Vńð%@V- f^sňy xh!qZwn1WMCWv}dq9d@&? jp?9HaG6g6c5„e/2ٔyvEK6jw҈ӗ-ߖT $!$BeOj !q=& 6Դe@?q+vm[՜ Eey̾ RXl4L-3jOֹBQY999 lܰ`.X~nXг[7XznfY6@1Z6Wl ]ZbMtPCiR Uĺb0Zbeny  d_ׯؤEM,6ےo~=,Bpp0ۀL)@334YK,7&_xr?$Aî4?bԩB"a##Rˢ_&%!CL$B()aMۭ, Ӓ"HUU;?mç~Y4׫q~nܿc} 5Ì~ŗZ0oSz<ԻIqzjڋcsZϲ"aarjC%2k>o{;k^8݌U?ATBmeIxyv1Gt|KozPWE|`>ӂ$)Ϳa{7$ňl\ {?x}z$0db \蜛\ܴlk~w3V]r=Z.ݺ'w^5໏~S3~;^x1Lq [{f>m+^|+S>y GY]Z%iFM&"#/\-oC!;WP )>.K؜I:VmdvXny[~_{y #{,n_;;,%5L??c~@ᕽ((OÆz~r4M=JJ9)GpkbkIOM8ח<,) HD!k޼y[6oS6=RN=C$Bd"IݮǤ)[VUV8^^hzNBMsƋ69Wn3e~kvSsN{ha2(J"J)R UlML#*//d%W^uߊ^ETVKL|^X$joVR$W edTD؆Sz;ta5oޯbs(={8&55Җ sA$W&y[<"WUIIͫTUjѼ;c&fh.(\[QO4M!ݤGI<)#x<[y T Gyޟ#O-刕ofYzvH<_"?lS*)-"SLIKIk&+II%"8Jh|Ff6&kQ3%kUR]y[TӤ6yUKt币kXF ;{irbQTY0'\TąĶmTr%*QB Qd*CT"ֽxX!R"\DErrLǿUނwĕwy;;jփK?\z!H D.R1 `\0!! g"C%B &8!4q脋ӌ]jY@Ľiyۭ[dČ^ۼuB[:ˎGS||KM2HYZ4Uը9-i+R2Ɇ[> ,.:UW0r! V"=~KGze9(+G@\TW-wK u=:rGQTP D)U%QJ JxohKeI&@ YNLeJ(T9w٣1R#$ {Bnw5mm1.a씤E蕡*v3 GU|3azSҲ@E{m؏0.,baiKJBBlK믽'ψG[nSmEM4)//P^VpqqqqWREcLDRrP/9N4bw BD.....JfN{gOs|\״g{fԹׯ2i!4M4m!yoy#Sn;u$ɒTmܶnkǟ="an~駙*]U_eO?Ygeٖ! UUE3y# |v -q,vnZfڴק۳K.of>DTU$sy޽{'Ns~iX > `ӎtϿܪez祗^Ș9suRJ_}'|w9r䯿:hР?>rV;Ґ{ 0wnغM7;xI+glӾ{׮Xko‹P7cWQW^-^aÆhu92cgG9{'\tE^x̙39)).{M/X]V[o{y_zw՗^|v։Ѭi@RRRRӜ@ ՟z%efeIu[buǏb?~WxdOWs^rO8qܹݻw8p`NbX7c=ώ5jȑ >|?X!'CQSGh8J$Gboݧ%5E[|͆Un-}2kwO1A~'Re_w4w}w4Yy|$_zѥic.Oˉ:Fx>²U+WUUW 9i3\xf¸ Fo? 0uQmcaüwM՜ x,з[`R055?У={Hm|L&Nx뤇&_~9#/83L<{Gy$#=K.?S 9?F" \xɧ :f/uArλwԗsU-[j7zkU}=3I&u t^o)&O3{Yi 0^O<9gocqkZUUcNq¤'Mo{wi'o6l0f2G 8J..Gfvs6Uuɲ%?{ӵ7Ǫ&^D.s?|,}Q= $96" ̙3gΜ͛7| G (..ꪫ{{鍊n>}zeee4րpxQGN7*<>OyQ7 'JRJׯYn,))ۻ)W,УP.XڲYa& EBX ހF4֧[ZN73yykG /Z|AՑ?!'@VW]ŷ_|:?<@/ ~zER/_]9tSO\玮xAr3f츱1'z￯J}%UEcp;ms-M69>l3jK !x8j{}[lqX͛9E+^Pm[ 7+ܳϽ?N>n隥/?rIYu}#s~^<V?Qa︻XQև.,OzD#dfKTjtq蠟/Y$33l޼kٲe F?;&rrrr~~yG2eJ.B˴S@DhZzLm;e!bD`K 9 LnƌX~ @@yYyvQ ?p.qy}7f͟ l9c,ZEwT1=5%3ϛKOlzYyY;vҡۯ 6lY~؋nm[0N];b:-%i1oW/_#~a#6_|EEE?fйYmu[5o ϿPVV&r45nJ k7p;wH˟~N;k[ئ0mb;iXWJA}O[կwmr0~ 6թ~&pBR8s}Ff-}g}]f䑚4mB$ۯO}q]>>6+/$a6#EۊT ,m<кEk}ܗh*il*4XeĎ߿h4,;Z)7ߜuY^x믿O^z饆a5*f_j@q]Oű3b:i p8 pB" 6[nYYmLmb#-;/}lsD^Qgz׺֭K7 ápUuUVVmړ< ,($e >vÓd*S0^z7_ߩs'߾]o#=:/+oʕ{:b,>I^h,GIS&ӧN{:tpI'ph>p̠clٺe„ 5l֭Ǐ wW$͙9ҼJUP4oGh٢Lze3;nٲ=|ེ}/_~y9]=/>oݮ C/Д5Lnx?~#K%^x{t歛jjG?ỶyTUU\(ۯ-c.S^QhѣAЬEA2 ÍZr,.p ,4MQEU5p';MiiiΖP(ZomJQH$2v>]{ajmk2mҤI/7^]|5ccn-rym' 0}=uIIImZZzu$1m4V\-[UU,K@D";Js;gn;y<-UVzB"Aէ(V[gO`pY-ZXdsMGXzMqYqh۶mzzի¡pΝUMo{)72d.^kϮjߩ}4?Ŭus1}ٙYYXut9ph٢%UbŪIII뺮:cLy9yF6mg_|F @d*k_=6իWB׮NNN`۶몪: f3"Mʹ'{!!l5?l'!߲,=4%V1qm;*+D%ƙm;Kxa pUeUpRJq3"T @Vn֎9mseYe٩1V7 ;%T@86;VzuZo~B~AmڭkWB*D.D $Km1۾JIIIJ۱Uy %ξN/ŏ%DbWT%5%UұmJ |Uz/x?UeUUUUx7 'kF]~=acF۵kZVmnI螎E{TjF^^^4X[ "eZ13VVYRҲc=6̨,.+ E= 7p.<]|r:3baXrq9TUVHB(:Ɂ]u9Ω_#D">߭hn܄ 2eW>EV:!TTU|w+tfEqTNݜFCӴ{{gyi ! iii>\l|M8rq$;Vp(J pE u a[n2M3&'SoOJNu]]>)ջ)CP(JJM $R) XuuueUe83O- C={=깩ϙIqp QB̟7sK.-+/D( &IG/6lPZT*$Q(|s}^.ϟsdy<' a놾 7~m6'7璋/Zݧؗp8(Il+缋b}Fg`*)=ظy#4ɗiKeѧ"1+r#pL9xǧ}&#2LP2ժnܼk+WlղmB")GRU?JtSnVţxtxذUjRM%J8I<$)[vxȆ˲4^x"Y$գqߌ|`S_2KS p14JJKL|oj'$H6l*TfЮ];Y Ⱦ$߬gW_:u#O<Ţh\a""Q#sK$}2!:tnѪuu8KIzUJl[o%Xfݬ?g΀h˯ؓsۧq^||˖/z?x˴F;29G ?ӀPTeS~}UVVRQ=AM4_oǽ•u69.go ('uHlt$"-W7ꭢ)[4߼isZUYd͗t?\Y>gtDUL3b{.,*l۲mp8fspB'M2o20%I K OAq 7h{D+&L 6eYm=gо$[ooq[6]!D͚ψD"4Y9)7mG},~C v60HD%by8O>CN|B"+ ER)(\$g]m6 Ƹ?((cz ^j@EAAA*$θwvb r=P/Ku>ׯna9ȬI35-ux48$.9Pǁ|Eu T+ %Λ|[m"̆秎uYz;@{[ouu˿_zq*t۹9u5Unٺ@fh,J)%Ix\ެY*cn̯x`w]a z{p̨( ŮԦD&&g3ۖm&G^kFĨ\F,d-D4]c;έdšbRBBPLaں-IҮ2-x&3 H\'ukYiYzF/rWVGscR{IZ2l sj[ yԌoW/ϙwyǞyay;As"^M9}cD kZsW8?'L@FFO<1z}ۦkgd#(,[{SC}ƆUZKkOLˌbGl`UeT%I_'(B yҚsj͛eoTJO8h܈(SsL@ʪVxssw_9J*QFm2M&uZ"Y  a(jڦLe j6\&ae~6oّe$$"5iфxthRQֹ,W8k<ٌ_PԪ)*TM f8昶;Ii+֙׻O%)fة"uSTۯm|Gw?ڀ["TE+u] h3B͟;wW\}3x͘1Y.**iӦ-Z0$"EE’X"x=^EVbz̧V,YazۣyvXoYgz<$ĉz6m9 =( ,MAykktהMرCY? $IpXhii9beueeHdٖB@(B(a9͜$94i( cLp!+QjnJ$l!mNz"BMD32v=Kp|A i kȶm{l4N@P `͚5C }dUV~B8p [7o;kWT 8ȶ)L6+~6o|7A4Ew4^B83C,SzCBK\mm?дYSq<6q6`_ }:LoZZZUUL%Yǝ4M[jaT}eHVd4Lhg'Yh2̩@ӭGfiQ,=j1~[׭F-kT: zL>㓇s]*Dpe*םID`D";T2WPJ-^c;ϭ!JdE- # I * QhRxll/S^,YĽ=dugR4B==?ɬBi\(RR2%ιPJ ]zZ̉f|q'n1qrp׻jC~qTζjp-f9KT0aj$HaPeղ1W<`p+++U)Tθ9S" *P{n=TP۴m"3$jRG\qAHtkz:I,X`]l$!BDrox8TIos&sf9Wњ8 Y+K!6-fAqmO>k2x9jѯҕ()ij28T`qyqɈFl@$VmZ !,YL SJ׮YkFHTHEYz-V =ɷMnpo햔~ͣ9#K/d掮U&7랎eY8q]w3G"_Z9PE%GQ[p\p!2MǝجMK?͜sJ;'vݰN=2d.8!Qhv^=fn+sW*B% L !mJJ~rfJ(J02,J؞;WܑO^Yol&b2C)-X1]RבX%[gP*&aɪr%ʼ( "8ݮ(m/fg !j*cm۶k63y*.KNN atqkV˲dY:c-fi_~UnԵe ;װL2Hzg/ϭX1ݣ1'wsK.,,$4o޼<\N G1#`+ &,m6捄#GrvneM8 tBS6uS/,mۣx7r 0L+=-ne/[wwZ5R:Wέݵv&"U6Bn$YJHs#Hv_uǏK;cKS#BSB˴o=c,Zг{V[}ч\Օ\pY5Y/48Zn e?${#q(b[>~s{(Ρu]iyfgcr0k?uةmٶݠ9]bi,?PRRE-ӲH۶oGw;Ep"0J LUVluSNO?E^5MaRF.0u-z …xA)8OC(P ð j ӼI0ʺBV )sUkTlW鼶0r +ٖMN:H~*Dnޔz-y߻⨞&*u$Ω$"ͫMs8 +np&L V|U5K O~AS5g1eZː\p)' 33ެw$'%'%% &IpRrKM4tk)5nSEMk'=R6YCoM fEE5S2i}qΈk:v>K+QӴ|~?ɟvZJ\!TEr-!\27+79#dz,(%%oȈI, ]@Dgdd21@0QJ %dW!78p۲Z:%-00ɲL8!2DH2j{"u;M6*++SRR#Gww߽ (-/mժS<~7}BHFIWfRCE* 9|N'4}u А7OՂ&7^X5J͜kxy M ͓ɨ] Qf0mfrA,c@Om ڛՌVkM#ʪJ KCs=>eZL8V6?<~ `m/5YMPpː9  a'>2X]v/_=ڶIh^I,ιF5B/)峏KOJen=qI)30bz`1 ;M!1,&1I.ߔr͸no?8Nu$p8|xÇ ٧͝?W!J^a)ap qV^Umq9 K,e._>󌠂Uzs .C.ǝwFNҹ+ ƙMemZqtьԔʊʭ[=")D$R\YlS0  d:O ]3^P|i%Բ$$ F 纾u a5%h=7^}K` Б8;A .zՏ>(''Yfurr [2t#\g͜g̙3[nxJJ0^_fpۭjIxm[8_ygve}>s̱cN-\4(fňJ$!Lp6ca{ӓ%H6c u4-S}MrR apC?h8k²drm}>,';1^j״Zu*Q*ܜ܊ fP88$ym~qM"!.xd"3S( ӽxeEfe[ }Y2;J`3 nҡ}xZqg_|୷zwsz׭JlFFƅ_/Ļ&:r;mcVl~\|He܍33뤄&ic/{d#YIĊqMƢz>i^zy=ɖk֮UZFR4N 5"x4ϱ۬E g6TxG+D*V*QiI  㯱haqӔ)SF Q^^;$qbԳnr)PgRٚA h\6o 뎻L 4,QJ=ť97\&=vo1J6i⯑ӿsu M AIB/YP{XeU:poL6GN&떪u׏jZmB4TúJ"6 צж! O{}ږ-[ȲN(l"}]3_$j M9s=ܺĉs9ZlC-|W:eʔ}ݗ!9AO&r5Cmj\#T.x kT1_a0932TMtT B#>999k1&RjF:MM;R$5l;[5Ed"nO:*DxJiwĈ#Fn Ndv~u\16`^{KXRMզ)̺`Ċ@bQock GkYEEF){uQ9m:\̯#Vd;/G#`嫖; ;!DY "hPApVT7!-[4UL<\6^ǡ:bGdfY%Q)bFcУN~7w! V]^or%╪>+sAwhrrmjK\65ENj k"fLۮU\ט'6l&Ry<#3cK7xr*a39ф҂5n#Y"2a6sTG n睱m˶|ީt底iPma; A&M|h8%"LdsTEn8-|ͷNC\vIuunKPGH8gC<2eYVdEhM{g;P4O)2Lz ~^=OpW(hfZ8B՗_䭛FQ1`0ћtu]3fTvړ:w\u]-?ߑw%oٲ Zql֭[fVf4%}ՙP =s3~Q9@p]P\`F/) GEL;"x#=c!vR=^I̮'1m3990-X9p E { vPϮ8 B׍n}QiY/.鱹shbcv^1!(yίS&OҹKqII Cm۶СÁom;%2LCQN8K` eykgpI\>}Ȳ|&[f|0b N[rʶ53iT\\|7nhF4wHNJg0BРc#aJ㜯\2Qgx.m3Xa wa#ݷx& A]G;裎]TYYY_tqyY9clղU<@jj^yͣUTTq׀?0idC7vr`3[,a ]|uÚm'$cMs~G]=K]RRR!XG:l֭[+*+}'6m/LG?wqitUINJ&-ib,vB f͚ 9p9u 9ٰ2+hժUWwgƍw޽{={13z#8k=3gϞ6mZbKrrr..,\??h SG,y+$zeFjڴiӦM{y睮]a%/5jԲeU BXl]\\ !Q' RR)lZlYnݰg&BeG)O%ꫯ߿OZwkԭgzZ|;swq9d˙h߈#zeu6}jӮ]dq Gt!jB‘!_O~V-[A"C*eipi6RRRw|^hn˞A ΋Ri{۬>Æ 5nۧ@jV vqqd+k#WB3{1XboVWW9n8& 6ےi!Tt{֭_n1M8qwANbjO]}d/Ę1cmÖ5ꨉ7/(z,_[n_"BťѠuu7BHpQT^# -g_Ж,߽rBz05XYZI" /uгBbtuuDkڵj%{j4Y&?׍ˎxӍ {'Ȇ=ٳ~G}$$;?{w\uJKk &ecn¡e D#O>o Si`6mjGYK٩*xx|]Ůg>e$^nr$%M&r#$$a3LD"ib....Zpc^RȚ V+b(TMu%ˁk7P`"Yݖ~F)+kNE~85a\\\\_QG;'N:/|]\\-0w阋! *\\!r╼ pqq94ؾW Cwxk ^tqq94Ѡ{%.pqq941kB]\\Mt+$\\\M|+$\\\M|+$\\\M|+$\\\M|+$\\\M|+$\\\Q+$\\\M4z\7pqq94qI4 pqq9DqWH$WH$WH[cˡOQk!a{a0 P?p#n#XukNH,YģyP^qɚB/b, FlM2++\\18ͱl +$ҋ/-\, z뭉"8$I'S[_]\\ fۄYD iAcNjD YIis>[ND4TUeTgC ITU?>n o21{1^<8Yj,V`XQ&68F %zTMaՄ}... w0(ԾVHtGEʊʔ`eYvm)@&͙õtI\1GP @<n?PKMK imOToZP:B` ;.5kCi\ШU.`:Zܵ'FH@j?R**իV%JB#5㤺U5z&Hp'..%˫wDQOiIIPOAO:CTblZu\k?3f~w;HHgl5...*umC@F˜i޷cO@`:?:dӑٲի6\lW$I #T(  k\\\L{!!$غc w YU'[bNS!({m Go'5...*T VAm;|~=:9?^YRaU6C\F`xn KyMD `qqqid8t[EsG, @C$=0b4!@eW!;-Cy{qX'r6PEcqI4{|!9 yu%I*?C vZ>g[~yJJM˄Q^/$|_H)^I&mōUm0M@{ @86P aa;V~rdf (Ѡi;|ߑs2Y2Bj"C+$?9 c0L 3OCWK$P**$? zL~\ J`+OQp.j$;_}wlaDSRIݧ#hND64P4j@K_J")lb\r͛WH! ^vSfƍwh[,YmVM...;R@-+jHYuȞ}; NM}..Z{d@[2jxmM/0p6kZktF%7D#.7k FZ@qt*:40̀H`Tm@FL;5Lߌcj QxmH.ϓk%q>@sYA+i]\\ đe@~[3o{g pUg`1ǡZɂk3 -x\B9ji-y)*F..RD1??vtT*?;5 n/K,nt;[>c8PÀ n>Ft7sqqq<|zBW ,$'(Ls9u!Ȱ..2 0Ԩl1Qk)p5<3 TBMrp 'H쫐`3b<`3w4 %!RlKdIc.}gֵi> 5AM8&_2AH'(쓐У,ɲ$@Žْ|NKpF0cA1% OxWysaQS'|>M)=>EVJ+]\((m0Dܻn'rβ`<0vyAitI4 7'%% ǟ@BЛaZHꇧ> Y֛s| $A-!h$IH\phD |t\\\`@¹$k W5um:v3(%>C5 8'(L;j:[wM(]JS؀D@(ȭ~{=f{: N :*9 dlh W!AB=A^|5y YDa Bd)ˇLpuw,ʀyk)=4N4 (r<^ le$$232lܲ`W0j@AlӖUyCպ槭urvъDeX\%b%˾CjE!$%dU8*x W܋0` lX`庋3ݮP¦\F@v> ;o_aump6mJ%5{ZK a lmvK w{P=Rh,tffB7N1mzʒ_ƬW vN@qYMYm-U+$}O?t]W\ GM&'zH:: jn E,w˻w(`؉~Y/8#Lc; ۿ')3"5c\g{j@VL)1k6J6|uLȴp ^S#Lί;~p˻bUa{__H,"ހlaPwG쓐WVF7k@@x=^=3˶m/I5vN?a1[R^ `IT"л 1lϿ XPb\OEYe#pԘVrw1ا!;55$2Iu繸y:w|Ç7}ubapgn>FaD` @\%y$׊KTY Ǘ<}ݴzպ<}N)_4n$}I^LR%aYy\\B"y܅[=/nolqC7Do7 <5^5Ivqlj>?p GW#!l"RopI4vy|W8Լߩ1t5_<xAԉj`a2˜OQW!Aq[4 <mAV 4p = U㕼^+$\\8dz5ֆr5<4@VW64+8,&L\Q& B@I1ml#$͸u;S_x,[v=^eI{k..NSH%^ H q{~(Q|56 KPE;]njܙˁ32 H y%wŇ>E+!1[xv OaO F..&# ڧQ{ h ;; @-r @w||'zy릋 .@DA|r X :9N[n)Ӂ=cDdJr J7D 3̄HΖ xѯ;5#bQ Y+%+$\\?3ODuRc 3;4?q[u#2%D1p%R @3Ct≅^ew$w&1 f_9e1 )A5M\ W$w&4߭6K"Ffa0Ӻw(q4eX8  @Kt-b)G-THP\ ;r4ƝW6mkGFp0@f9BBmԍ^ s4h1;n>FafGyDjRJԜ+.p..FBp4(_}>gȈN<ҹc+ 87-Bܗ}]nj i&`ނs; !/";e7(-:b"P?b+xkMB#XWBԙD7xKCa5r-@{!"A8>D"W!q}N6-YK\1m2d'S=U]Um;9oR * `T3K5_vsNL[mԱ-Qv8(7͕T@p?3%pJ@EԈJZ'κ쫐nGHGÁ`6"U$g߂ 0ɩE♵p@&5~pngpH^s_`ݪ>s{W<&vq} 5+ t kTdoq&Q뮩|tka+]-XJ ػtؠDzz\FW4;WY9& @8uPj$%` Dk# p1պM1';[aЁy{-W`-C}z0pO<rYg`3dYRD*((* D ,HS#+V:"]zY`ݽejs4fsdLNrɉm۲*˪ Uϫj*$@dH]cb'g<{ϻ;7ڴ0ɶ:T3:.zGLĀ,r^3f?~cvN̬ٟ *"(Hl]XmӰX@  rm"w;aq?jssΒkALfG78):8%$E1jıwt"su"wߜsGf6D RiB:5{ɑkQx .sΌ"(ʢ.t\a۲0A@L$=$@uhxƎت[7gi ++M'p QPJKSKlFR$HLIv3A [7y;fؘA;B](RR(p%.U1lAH!`P o.mIذeYˆ,sUy(p%`w b23Uԫyr׳ / _BY%οwQJreW-?, 0Єی TW_Y\Hp8F,P(x&͗#ܨal %]qI f*ܗ,[|? ԰[A dEM-W|Q@Z+:,^$ L>%JK2;7\Hp8i `:6*P3wzД=[M wW7\Hp8(BuQsssl`o\hmS"pn8SBeݲukvxc_Um~͵{0 *ʂ(C 0<[I0sP`ڝIKV-ްiQGE1mm||AJ s*X  l 0r3''+,[lݲ@$d丄䒥vI\T>6߾18LgXlJf&"6,GBj-U%4%D9b |5] s7 1|FZG i$~9+Z+,r⚒"s,zD@7,~g3s%%ع90vT|cNK.$8c9"ƾA1$J.$8`3h~[=L/˒¿ T͜9B1u҂eW]_،$l|ъODB$P8;QQYcrMk.@g|? Hb`z8ORĢ }^Osp'0c˕YL#R#lIE|[Ѓ} WHHD_~ӵ \hM`~5A7 Gn=I\Hp[聠U]hzۣרpXE{]fD8-g<_翅]*A7݌ '7N=W6eDpQIE([5v s֌n> D"  f2S DpƢd |#xNXDn7sC r{~ X(D@IPy&4¹$͘4m Tmn(G/ 8@`Bd+:t~t1؅B$ЀwjkwarQgX8D% <:u+HH|iL#6# $$jZ, HbiH";<)?})P?("dzu˵ ~xu~|&z bn}y:bᘙ$$J3xgO>iiʊ `P#m.J.g P$xDW(  @a( I)`D ƾ4msVNsGB(4TqF6&l |F1i2L ׃ ع Ͽ.vEn$͈'!.:B"=%B,OA7?IAAvfT$]dOtȨ  FBPφ,Z$L0a2 An,HH_~c_JlȒ FqC h9#$V% ΘDrƠXqǍ .VSk oB!> &D25g 6b5@Q])/Dۙ}5Ɂ]: ~D(NCHH1-3 <>"JcCnpJv d(ƿ9Wnٽ8ػgﱯvr- ʪ QlO o9!Ad@E q'A l؄)iHt L@ty+w|H.j_LxG0P];$J8Ի `63 SR`SHhpع=#c?wwu˯o+Xj!R $puD1 .!8%,$,B% K?=cK/ڵ5ugauYB9g7|B3Ň%/DNavvDHO֭77^Qtv`˂n8<D PsoaI3l7~8x^zE 0 AD79A¹%fMdp%)+V 3'\sC@BS~طF6״:`>ÆH$f!Ʉs$]`K.$8 j`Y!+~/- {_.VQW "`۲P__'Q"p!) DI#Y2-XQw~c1/RZ*"(3#]s $:;N)P@*$ Y7^KMӦ/ٗ7lSi5<*҉pNDgRA!Q*Ç ww*U.OK+\ K%-6!ip=9gW"p!)%MC"J[ rë FnkRBI6)..!8g W\HpJDn}/ 3sYӦuTvβl`J!5(ѝqpNDt)M11vds<{ ~ {Ȃ0mA7") J `TLILx,B$Yg߾;mb0xNsZH{3J.$80` (D|hYr]sD0eW)2 6}ցO kvI {XUGkd 8eu 㓪@cm\PS@C``{øot&Y"%l0p.0 ʀWרz~Ki@WWgV_tnQ I5e xB[|4TI9-Y~p`;o>֬zeD7Mq2`Ԕ=Dx$GApJDpFBb޽iii1cfT_) UV0K$I:.)$%PQw}+AHt_tiUml5|PNFf 1&"@XMeXRQSDZZZL6BbǡPsÀT7pd. V|˂]D)APBT%a\ 91]OMěRT〣yQIgHܨqF!QڈnA% (|w4MO6,mX<p[&?2o>H6qڗb@P rVN!]O;Og4X0EQ f3*R j /s); $AW +* !+5]ސ8 ]۪Mou.5D8b@E\W7g$$"R4yDyyIeʐk׭k.0)Vg._(;D DflI!Rron޵hԱuKץu=*°Tp$8>1FDM@u__9ym+R>LӊK , s Dpf&@aٖa]qq%`BIQ  س'iP}˞Iue ؀ K1"6,z[SYams(p 2 n("'pHL %G;}$=zzSF@/QP@@s 9I%!"N An7jHzaPdg6 Uwh`UY*D*Gv\)\̜8]0i‘(͐ @̰ Y ]w($)$, !H4퉾理6d4/7hP]e@˶t#"5DmҬxksEہvԡĀ 8bj@.\MS6)%TˏDYj\Hph+Kr0VgO] p{K V7a:Pc!:Xn HnZQ(zz'z 9Su‘0ţi'Zw8!_>8#!a"(Ԣ`J$s39w8#!aZ-ؒ[lXrp8gd#KB98/B8kx\"9{8#!qUW"NN9}KbDQ9& cylvfU{Ʋ,XEX>'9g3%N'A((aѢ#',[& 'HOEQ-T-l@p6( rE6˴@ e]yi6-~hr˰ @BE3ؖM)x^\]Zl؀ItT1}ҥ0hwOǣE,&$)׼QT\ WGܻ蹂\8Fm,Ev>'=*Ê<6 n>eJz:a"8zo=Ra C)dm[*l9PTe,! @,@|0 O+Ǒ$J`ABtURF-6ic!wsڶE]W ׫67˰ h{uĤ2DW|k۝u9?Z* چݲU˸Ҏ hϛ?qu9o۵m_>C/o^jD#dHTrbٲe6/eLK`\hQ^^HŖ[zDM_+ԍp0j.ŜEMoLw|%`.QnNJ]HB^z:e۽βeB@֮[}ϫ֒$٦xZ(pH<_C1g!ȡ#XG$&x?3fFvէgաHOtWޠa k64h m{<#;;e떺%@s"zd>}O۶]Lw?4jō/{`^(ʸ=abVioձckf~|Y3gaEM\\tʔe9fw`_9x;c="}ؽ%1p,XpA(M܊6n7l\ٳfhCiu] ?j)}{L !${#$EJ='Npcc3n)YRTٰ}֯]\)mխjŋF@ A`}=\K͘=995ʢkEKK0rAMXINJvF-_e41vԒbߵhKw|v](qsv܄H h6lо}{`ePrug`ύ5#R_G`1 n^6\9ޝ{GN2(GB̙;g]i5Rt](L/  1{֨T#%1%pΒ%K\.!$55u֭R30c/hԎ YD=9L HQ@{geg1c-[[:+86`0 *~q2r~-0]?VD k6lf*@_)#( κkf t?p o8ƾ /VNUն`(+\v84_~9RNINp҇p1?o (a`&3po߾sfIX5jZgZſ2 [E6,#/W.i,0 QER"ZD%jY*Z+ Ho[(W )G&hwc#Z"p$NW)R3gvUUK=$ #۶Mlo/첋.@+ZN $IvC* W>999|+ThLw͚4c\~Ƀ=ShM0aC7F) `ƍ'N@n 5i'aU+6>"m[fі!eE,(8KgJ[ EQn5qkAh>$LX 5I`jaD˗-¾_Zմ2.$j|~CP^^ef]{>FYN흟(nyJ[]Q0lC%P~aSݵ򨞐鷟2TZagX*Uɓ&gά9ڴi|_ώ~ Nڕm|}>}:ѣG׮Ji" D ;w~ sors#G^G` i~~No޼9Ge:i=5w\3O'&%" /~qС8>lէFH0]>t RJ^z9礯M;\qw#6U(L:K/]jվ}W~u74nxᄑǍOJN*5e `vCOyb,Yz약X-*FY000٧h9B2UD+,R 9)Dpܜ~'=QZ.$77s΃ ޻6cno{E, wrL/(*Or~H"#BF=VPO(9SBp8' ᜔ Q|V3p8N٣JY%BN`z[Z+VkpU(!z^^^*Uׯ^/ޛp8(GIߵK믻sp8r;>JH$&$^qIMM!!a3;  P\p*&1˲B*`6l % H۲mf@i9hY?NTU= ەWPX@@dc;6m 8%uJjժZrYޙ*f,]첬C W~? &|M] qSn}E]hG\1&B.]֭{ǝwG (L:e~1awΈX=6t JdY~ϯ{j$IUU˲$IڸcD)N %Jd'"><=mXNW_y5 Wdb{#0$Ywz(VEq~ , |nO@p$, 4M˲ĴWN:%QvEWĴd+mVURJi9%cy,!BAAO c+mRZPPPJk3Ǵ⬮cJ(WF*%ʪL1M3 ^SEv-2 éSDEU\1v=-+ںnw8C0 jAuZ?0Q\bfNuSJĝDdcLEQp.7MG)umۖeQJEQt2\;y(R۲-ۊ59˲,Ӳ-+gV4@p8lfYXPPP,Ԡ)Lm[<)ƜRJ"bp||-^̴be)C˲A,KM,*^ί$'W 3w]=2[GD휔r 6Yfㆍy~ߥ,]xjP%K2nwfV֭[UU-͏L!Pع#p$IuI Ytu6lذaÆ?#==ݥWۄ(NݩtҔÇSZZ&X9-Ρs\PXU];wVMKE}^_VVֺuvM)U9_$Ϸc׎`vݺG{ ={Ȫ|%YnT<^w׮]\.,.EE6}(Y&===##CUԱ]x?1& &.\xQ@aH۵" Nu]*ahC Mi.v;BྃO?]w?l߻ǞŋO<9\.BI$ B+vmfC`(H9B,nrlD#8brYD3 0TUUUaGf*"˲&$:2 CQ#"Zdճhny(߳{σ= HL{ҧߓ%+VдiӤK] jJ*U`86 SUUl BiR]*Wu{kT!r(2 9*˲iPH4E~oHIq>N{<0a2ΘNĜ9۳k3QEP0 Jz>ԓٌPvM z乡mۢ(*bCId)EHq\GUUMӂa·@@Bab`N,˶mB(1q x\.3^|=1)5ktzm6 ڶ,!DQϫ}q~۶UE%hnڹs_ӏ_~H)uѶp$rɏ(8QFd N$I2tc쨱={ܼms{T }v_~Et[ߛ^Cfi3ọ[6.u= FZToߝCok.hJ?|U&MZlyZʹ`aǟ|;vhڬ?Ai7|sͺ5Vڳc} ˹_pH M8vW?sf|5ϫ9eoozn)pݛ7mWYONJ@v>oH . `[޺+ǿ9>}}z0<`'FFƵ5 s9vv׬Yy޻w~X+o^wuw{g1UV/?3h̘}00GG#7p䰑q8۽}v״kzI˚_PYkfUq8GNʲLE'mӶ%>Qbb⭷޺kѣF/zAAAC}f3Z~ۖ=w߳}vO[o߯~^~rrM+b #R=X}.>`nan}Tq^0Ms˗/رS?ErR2o@5{V;n%~8p!(B2I۶7~\rJԩSgLѽ{vo޲}Kʕf[kK86Xoke6-ޟ>d谡?:{M]Kv@.mz\f%%Q n㦍^w6Ms.o֠ao&6n߾^\;cǎ a ۱kǠZkOfdF^0{EuSFF:]ߩŕ-fϙ]RO}2e=zO>}ܛ[6N:ݪWZ^~&7͕[/7n:'{ |f붭>Ci].3٨F]ʡ# /]ܵkv}YY#ƌrޗ%r+2hРKywqG(zf͊gʩM9|d6F)Гv~MիV }to?b -^$ri׾SO=u̚ ś^};aÇw}ޱBM((M`ҒK&MW('!هׯ_?k%˖s=knpa\?XEڥEK?xĔc=J)ƌ&+W8d>v,u]Ϗ~~劕]t9ri6l;ke+E1z>ڳcU+U}LYy+/r\rL vEVzcK--Gvݟ~i֡Xw}]w쏵VQUUOk׮vy]8v$DZZܹx=#y;فl2mo|4f|6hР~rm[QJo-? mXhqݺu_i6juV߷#_9hȠa#uS0tt.kPѯnش!!dѢEz ~mf6m <ٵg޼y.jwkrixk͝OUUmۮm қSߛ;omL߸uV3?w}Ld}z9+d>|١vqKW,^iӦ_|q#[AITVͩyRPPf͚=>lC~wkШtrK[{3/\Й:->RyOOHLHRmQY9YnԤQap玝&Nh3_bʕc}ºخc }IL;_{onwOxI q MɔO ^2>7^֛G]PXO>< lQ\[}Ri>-]nye+zxѯZc<֭{;w::8#1jD:`o_lk n?.q)[rBn|`q=Gt{o-۶,ZI;ˢ_ 6yï!#Fѩs'FؐgS&N;7 BɒK'y|JhBBM[7թQ4͔Fb6 C7oPZ] ?οy3gya &3*n3sN%A:FeoFjRRP:5Z}crZFus[ۦOϿ>:>>2هzRJ+/"Q/SJ/npqa^mY)~+ ZX駟w랕dnͶ6ݵW^ }{zX:]Rj%}O6yҥ^7b؈ ^8l0AZ|Q{ڶݬI{o#=4׭_7g1ϏA0uoV'뮳,SN~-a$6{$IJKKp҇#F/ .lMIIK#Z5cV\F1ʼINNy}ժVcs/߱m}駟֪UkSFn^nVvEQJ)`ջwmiXsCTEu.UUE1rěٱeɓͲg|&l޴9bFgQc(J4Oyo?⥋+/j{nsI)IoѽgwyYyS|I>s} Rq{׃ֻpsg33MW-w w(:ui /y[n #$8K._ nSf{'MΔ)6nUy9  (ru׹JWQfaf*?/$$֩^'地tK_w+Wj֪߹{?%ԩU1W87?6mΫ{ޞ{iS]TrʫXPe!.}}-ڵk?gU״k?߿7]xl{>?o޼H0 Llw-NJH|Ԭ#hu] Yw^}|QŝvΝ=߮SN՚Uusc޳,QKIM IpF  g~2Syٙ0kڬ?L'uh$sj((f|`~h{}8QCa20iue믿m˲XGaPeQ4$ 3m0?R*I҂ yYgAP0t}JQ% xz@֭[?\m\C%ꕫkwa6lG_@Rp$x{~5knݱG;YB. W\M4#asDE GŽ:up V.+(,0 c葯엓ML\ tMxod[G '$D": ¼¼@^ r`Yalΐp]7qO>񪎖iY,nٹes!Æ4icfD87TD˴lءp@֭M|0ThYVNnN {-9[˶(fڜOiAZrG?*FYČX%JREQTű|*&Jb3+w)1fv~ ~OTZmĉld̨Sάٳv^{kӖMqqqN=Á@@˯[cоC(r.q|͒KH`ᄑ{><5՜D .{A > ҭJN-mq\\-y|xVZU9Y9^w߁}V,_j}pAK~駇zf8;m'$mۺrn9R l׷~kԞż{_k_~3gE^V[/?GBԨQ?2uWA:v(?LUEmyysggH' f=,[lp}yԣmZq)C}ilq,`E/jܲEKVNtJ[: `vLA@rlt꧁@rR`Y3fm\bodY$СKqu c_4hPrd'-3j.}*gZ\q{ 2qxeԮ]{ _z+Z^nܶ{[ }| 37ŗ_֭۞{bH^cV1*%U][XrםeYEtSy_}ѭ0 c 6m:tдZi1jf*6R\ǽ<[nwݖeժS ϿBm^}{۽?ڲe˘Sne*=3f̓lذaMƽ2vJbόw׫iӦ*Wڥ# pm%V25Ͽd`mڵкM/~Wj9z @,?/}a/l2C3Ι+fȈb-A&1>}FټysXŽZ[oy^BIJJǧTRZj)))>/}}U+{ӦMpnM}djԬYӹUkծ51 ̙=oXV8e8g֜vWԂaʲ,º5nyN*b!&Mޝ9cfvfvo*>>pW^~[\f *ƍ/mQrrrss̙Ï?|Όi޷\j5BHԪ+Wm1f}NR3~e+ft-] Pf S7 7u~i}TVe ZnkC@BBn+̐g_ޜy汯ݽww-=;+98@z ~'| ՚U>|O>ISe/^jC9NcVnnhs]\2!ğ_zM=ܩ}j-vgeekhGEY$B\ \p;1VN=Ǿ~ݫz)=qh!kD VЍoS]!CZ^nOƞ:ď_DySzD*$Qݕ!DR+~>syy 7^闟}YS $Կڴji!͛7@=lZf^^^nNnfff*Ub_qÆ k|IW]}… |>7PpeY zo߾5j8t@q)G oެ.;;;7;7///';'77yߜh8q+'59uۖm ~cU64#7?71rނyǴ.ƘZmm߶}͝;w˖--[$TZim>_9.XzF֭[w]*=ܜ{83pV0Otk `TןxG?T)_0Pơt'$$'a֌Y}pUfM@w~BXUQ̥^>/֪S1+m#G6j#G0!d䰑C7< }Ǐ',\p!-/m٤IC9|peefeddkǮݻg& F;ڶiG<$>>|1񄐟y!Yٱ2ܽ{w 6r U*U袋v `GS{GY+!&M.]Ќ{gk㊫HjF  \5=1x ο v'˲lQu]wg~6s쨱kׯ-,,thٖm٪1YAAnV4M3??? :b<O?ѢTgi۶N˲SUն@ i)d58Ni5Ӛ7k~׽w=]ihZ%ɒiD;8B(θ)g0-2_\\\@`0H DŅ#a'$,ɏ#ijlּٽw@Qw :*EV@ P(pƉ,9`$Ik0*%@( H1&cug$q^ݝ D5?2V`xq~~H$b04MS>}޳wOl#˲dq v ډkZl͔{MQ-MG\nW잢 :k󜖐vŚk}Pnh;b,+066ap(!i1j֬y-7{۽W_ 6TH 杖e#af1JnNri`pj3H$Snp(@lu /Ș\EVe.k:]*N[$(8 DQ4M1X;?AJuj!11.tMuyGG'p@~0XhYV uMx[srsNiZNNΩŖǮ;@~vZm桃bv@ q8Z mvFfee 8HOFlpdgggggkԬ!cJ ÈOaaXqUpࡃ[ 7Jn꛶oz3F]ב:NOd3y2<ς‚c~Zibǜz! yZ 9E(p"N4q'd)((8;LLԢE;4d-wǿ[@8f`Mxo) /|s&|Р^R@n'H8)))--Xhk׮Wf[6xWf8 [zII坝Ʃf45]D"ԩS3Ub8~r%''wvBfNYf-m˲iTHG)(N0eZ dhܸq 1΁mۑH$)16I`R}GA~vztV;v)S /;랻>Q nzKn~q(UyO>-)@#㣬TboGygT,rmܴqƧ88+/ i5+ԻxlҠas '$)!!s?{*ڲ*&͟7yȳC\%;p.7k-}wywχK-q8[Hby93oEwn6tݜIٕs/m) @ @hЋ½q:[ ^[皃;7ܪc- PJfBٻ{@owgc.5NR"м˚Dzw_p8kj;RUNb,#k$?QnK$G\lKH 0+Pp8,14dmt/JEEZCQ5;A=Wva,5IvPr8q?VL ru=9l IENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph7.png000066400000000000000000001574521222557406400235240ustar00rootroot00000000000000PNG  IHDR zw pHYs  #uIDATxuEƟj[]B !pA.{s,p8ABTGJ<2!=LOOuu%oK;쀵S[deQxxxxxضQT!;n=gϞ _~}zof-e^>ed{v"SrKAaE z97d9 ;s׻13wܹU>7tӒKF5P0eRф"h< sJ-]z %@R,Qf ˼'<^o?W %T6FG.\\5K"aT2J)aD!JaqLU\ZQע|DQ*Ԩ& B=mvٯ);ýwK A  T[ؒIn*JGBRXF c {m&8\@)a8\&ض# U>CRڎXpNJ{rDZ %pqS~1Ҷ'gIKKh<%[X<'j ɵH>}Kf8yuQ5Dfc'l o*7h t36a5v5A=  "*-2+6Z eU$|Eit>Ͽe:5t#T Jj+TPF a0QJZ%+odAԶ7U\@1P^AnE> D͘䈸K_y% A~leC]E~C~_bԀ1-,dsˆc갡qEAd4fvܰqk~_v6?w~ jJ%q'v)) ?s(0TC5 HH>u .m4DTUQ5cˏ ~LjʈiqUeXK !mG 5n:B puͼKhӆXh8bTiEy>$j%䋦mh%m1F&´1K7UDhcxsExEm͑h"L[)^(m/i8ѢfsƍU4GEPTE40Q]7Pn(xkX^$ƒ,i$H"InRSg:qf+ PH)uֲl<ǞzhJviL{.k6 ХgəWvaA;d[ϟ>X܊P(zu 'oϸU(}'PJrSsm zyLģ-6y]Gu-K%13 Dz'؜ G- GvS۶#,[DvR:%c<mIʗ،ww xYT5܋kh7Iێa3tG&M'["e RrDA~)O:t`g_ l's`q;d!K5-YQsp鯪6~C?٧Գ{-FV8jYB&MX-f4fVA~cG}pDvSKjh!49dx"6op kV"[^)C˯畖,xկ߼i҂l iЂ6!UQG ru(W5ڌ9RuKe--̕jiatIVU--̕N|iVe/LU[HVF :Z^Xvu#-0aՍ' pEEO$ZEXҮM ^@6Jhlh,Muaᖸ)(I*)Q;>s/o] s sr{ڽ~Pеh̸rw}Κ2焝bɄ?1cUU=x3y=wuʉ=w?rNx%m%c9vwr4螻z/j(ꎹy~B͏?IGۮ_^sy*~1 >hʠ}'?w 0`Ĉ~{#7x`܅P:ǎz3:1Cu>Eq 6BӔSy;7dk'1 7mt<?Щ 68O8v<?vN+jcvYW܇giDJL$x瓉ckl߻[6᧊'zkLrCXC3J fc yiYA78'w B5o/;hȌ1lX_gx}3a'n'Cu)M4K~VV]?fGOwW߾zu C=oybw/)g,\p9Y!VȟH {fa}ñ&F"Ly!u)xY/ +}4fod]yC 4ɏV(#&<\bDNL.-}ͨu9%QD3~_9W^QcG@0{EX>Pط{^QØQ+ꋗݙw;܇y~է_D]Vo"aK5!G$(17hHkU: _\ɱ·.E՜ ?ĒMsWsnalfj|EpjEh-P)OՅ1ujqyE6' zsEesIĊ:Bnf)9RtݧI)i#H( nI("KwRܵ{ai.EElb(a4] TVU )Z)LZX3)xk 7\# -;Rr;QJ6LaiBbv7QAY~' |p n޻_d574uW:I3-%;>nC%RP 0Jj[~IVXT4! t]qA=rgbq*9r5i1Db+{j7z(}~Sڦ8wq<'hܮ2wy˘@$5;&t%j%n9QtH|ŋcťYT0d‰ !8Mn5p+i[?qw=1CK,7G0URIh0ȿ=RaVRXDq-ʯ嵮Ņ1;0`@ֽѬ8u{<4YCqJчosGf|| U-|t3?oA=|leȰBke3 `e5|AXQ W#C`C,+*VQ ++; +k6TuAhMбٛC,A@T#/>Q[YW +Uo\UV۷wWyG }pE*>C#L/6::pX{XG7|m3^w\p+O; BrlɼO>b-KB:Q=lbمy!X|;|x"Ԥ2rΜ>Un:!^sB,-t\z?ȗןw,78wdNV+/fXY4dΞ{+/M*//-G 5?/0OK۳ے zv+cqS/xw.qtHx˃zNx㽹b!D՝Ja 5p6*Q^Ae @Q dcU5iKdel}"A7YVAl(d6B ?&|"| T@S3&teUU "8qo}%#Vn@nRw>MM RRʦ.c `nnMSzrƝcv_rBW^p,$lf30dĉ}YYYNtJ)QkRz :m֘[I_FuRʨP^ECV,;oA~ŋ?ۣvU]fkui^rʌPȊWm1*@ _b???;9jlcoq\q1lnMUUtgiKXNuWyqk~~;t`ELh75WZ5+NU`.¶㡀CNnE frs*~8`|П)81./_]1@Cݷ_w_lp~{] c5V7f#iis‚k0  \j~nav<p۷i6xXtqQ^v8ciA7"ê,/y0t{Mĕ{Æ Z^ҧQ,&sE[P&b(I,]W :Jx"Elkᘱ/9ʊ.|%[K"!`;NcYyO ۱TUvG||EoC'#~5j,K &MJ*La M$BBTNF5hxngeDR~?yDjbB3&o׿Ԓk/ا}(eR ! RUnpTEg5oCHi/RB(!RJPHt % ! R ${J֣'B{ )!5Nnl}ys_ZtGR褛7)[>0HɅnA4Z+F)KDy%=XYॹzѕ5F>+ G]V〢[>ՉUu )jmk.Vby-r,-ji薋5P5t?SVqbYNnXZ }/ duQÇnyH,`P~a/9)2(P*ФJPBé:ըB% "PBc M>i>huY5eTg`BJ U  P@mg$!7蚳}#_` 3`I÷/gtue},~5snnQ_ 7 Οi:Ҹ).%T DB40#ÈDEn0re1+`&Ei!ðLQԅaoYa4D3l%QK>Vu͐E(h(B0u6]44eg2iC щ/[nِ7]q7i[Z&M";,^¶m۱! d`\rJRTùmX"F5Mf!ܟp!lKͤpLM çj}hat} XGɬLeU$lPl04t(tE&,A6W[RPl3 ebe[wm{џ}ŋIsFBUժڪݺs)KٛՌg5c]aJ#E`%I3);PdR?_,q0tCB;9׹&?qD~i@ VbX"R2gy뭷n5H 0pci58GmM@PE/xSug4:m4cf" <ȇx( O2i&9RJ;؎c>ç m۱xl.9 )h}AiMTEt Gg5!%(o7Q־UG "M|H&*D<4 xh y /bnu޼p9`J^Ndeg]8ΜL]%O7߳͝Oϟ~ &LxbDB!#PAqr3>ItgZ5nqSN=30y_|~73%d{Ta (^99&MHRJ){=U)Fŗyy==ySN?5P`'{{p0ܓu$,X(㊢X<3gΝw~￿RX,V__oc,Lᬬ,08犢F(re+.Zͷ߸9G~Խw ULetl[}]UW èljiпo+.b >3zҕKu]o.Zݏ=+R7tUW,}UUYY(,izUM]r/ZUܜ~M QP_UUd]O;c;ne/wxuWdْVTVV.]4 _3e+}>6oH˲?𱻎RZ5O bU*˲ 8zw{eYǟt^Wt׏9RH&芕+@mVEUEYEYeUe~~i+V_<9ܬk.QۏzE{|M,nii9C/b]׫jʫkj}C}um-PvHX"leeMeVvVm}-p (,,\tPZ]U( )lh54ZZӵP(3|VZq/=<~o]&Ea ];xOOwjo]ܑ .766ٳ{vg7Fz t'=`"8:, ߲ˎzs8m^SQ ;nyם>СC?yo+/RY^O]mq_uW_}ǿi'O;SoPS5:qS={#>ruWT׼ | Ͼ>7p[);?w%s=^u;or-zvڲUe<cylw^:̳L˜\_{}>_MCͫ/ڿ_X[H" /}s8}T}{ႅՃmoe+&:gϞ}y3?}?pSv9?ͩ>MǬov9{n&C9r,_bZ4٧tꑇ9|#=bY.R[_vy޽,Z|+.H~ǾYxi~}!:@[/[OJ@D7_ss!}[Zuu&No/[ޫc$ #`ئ$‰%c? ͈G.RA1n7kO9픃: Bs3|]aV1.2z]pOuۯ}ǜ6#!}]u-׏e\׮]?N9Xbe4H}=`Nvo}~᧞tjv([Jcsӏ=ҫ/}g~ۖ햶 ݬcFF8jw3V.YcO}w՗.PO{a̋HZQuՕWp ǟp]&DԌ>/9oq ߮X]˪;xD%&O f~;Nzlc}}~\y͋Ͼx۾Guf*,>xFcboyyy٫L&y4O<ĩSN>: s1 .J;!wiv~޽zH%ϙ=/)V*RH&|~tBɓoX,Vԥ~Ч_}(m;777'I۶W N&}.3O?BQ&snsSꌱ%,)_2_zίsN:$˴% cqKdU|b1?=$B=c@G~tժ?Ͼ`FNH&vuW^xe3yY4Ǿ9,[UD475as*;K.`2y?+). rrsnT os?]7H)U8|O?oOz'_||UӅAj҄Inipg:{;ۻoyU^{u5WKG~x>paGj-vPJݳ>A~!1o~n=^lɮjvs=Kz(,2`mۛyxd9.x<tsI$>/pVR̘1O?=c ]8͢sK"ģV4vVԦǯ ݰlk6_qfϠ>zWD" G:yڹI;9Q;eqѺ%-1+9[qpN2ɓG.[oiOp$ 'w i01'}➓g}nԭTF~\r葫VL$Sc$nʊʏ?X[op9ODj]K]n~Ǝml2Nw @(I w{̊͸hB$|5+Mx;t?˶=MjtҴv3#>ⴳOQ;zy3u&դEp}m]ҵdʅ!F e/q3~w)랻mmKGנQ@(N{9d!w~K/' ‰귇օ{;WO=>O\ !QGϯ|iZsss^^ވ#~ѣGB-[ֽ{Sݔfv455E"D4r㏣J!;ec;m;]uYQ?9sFN;N~.^B⎝zmKyyyeW_yŕ~76\s5zʴ3xI39rؽq)--sOKo?s'L=!7?w~SF}bǟܷo7^㌳4x}6-3D"4DeםwEc_$Ame Pڭt g tFl7!b=& [tUH$H`Ρ:i{wx,~!wq\wgOcrn^nH "e~t&$|hc;v걖iAD[G㎽zXyxlڿQ#Gu@m]AUUヨ]4'qΣ) S^{nݺϜ{%\zcN㍍pp$>c٭WB=<òrrss wnvTmԈQ qԎe]umjm ) ѣh隞;z]dI& 8h 1{>×ӫG/v@ЌܼݻOyygF0/'oܸqvd%:;cnjӫi|H0dvaY,˴ڧa^zt+zu'eMcC#vXYr성cۯo>3ʶ]^}믩ZnNnMUMScĉG]Z\|D21l谒AUE-).o@AnܬӦvܱc=bXmeۏ70zHsd=qAW^VڧOc>IvI'W\qŋW.[YWpW3iv:` ?hР}N;}c,/7og~V(+ݺv˸D,1~~NڻMmܘq--}z=z䈑{_tI;ܜҒ=ܣO>EEC2zѶe"Q C]J^{dc ;vN;4+VFZ"2dH^w_?h={^veΧy[_nv7\uEbݺ}{{iY%뎻 qCh4GڳgO۱)zu]3r!e.{n"hnipy{*!EeE_o*P]]ݒ%K?++K{Cu-tM ݸ꺫xߞyƙ7^wv$RUU)i&ͤ=”/tsuW_WŶlض-tGDO5t }W:%;9qim)}ׄZ4EQ>SN;K.K.&e]/\>dĐ}ԈQxP@ PTRf&M\膮L$;g}F^|ŗ^|)DS5۱m˖za sGۻijU?ޗ{[ۏE"EU8d4]΂`qb}]^%LJݳVm[j"B y8YtJ?+UXZU1H$t]c;\pqJB~z#5VGA~mvӿoZ>7t ֱ\p]wi!rʵ֧oӧKBÏGstg#1e)UUyju5\O[a iD}l`)(M BfL0t]7MƢ布vU m1ɤeZd.}w(7xӴ?*@PQO-sfk_1G7CP$\ׯ(PpFh4D#p͕u=T՝tnR[Bz9XiZ0Tuq[2RJ}lˎ㪢ְ'ü;>*5$F׺ Z'ʺ#d6#h<Ѓgu`gx@(U7."HqQq}]}nn khlO+hDs$A j DN&9Z͌ƴhSn^n]]P۶cXueuYyeTA8OI U@p𴀃#FVBUkW_]Pr we[ S (TTP A[0)uK/~T7Bw?o20_$#1! UJ[9q!t&Q #L{8ӫ2I!zFb J)UW]mcLH([l ͍RKI$k\mu!<OG% :ۭùuضѽC=#qJ\ n,_X1kR1V,[QTT<|SN:'cqj){?;~._9^Qn| M*+ ._ڥOAܶT2IUCby'͆MAuiTN$X^묳 qs JA]v I$lxA WX IC]uM74v#u_i@UݦT*,6Ά9(J;kõJ(qg~,3#=H)qs~7tkC.MࠌL\o^~K Ѓݫ: _}K=@0I%]{9x۴ױ jl1;fm.v=SJ #鷌?G-#2GB&N֠”%# e[5]c1eZe94URJ(~m۞ B`{?ᇟqؾ>׿;𣇷;nͬ TRJČ3{aÇZb3Tulw6x.l.t P;BƙHłAQ>BeT(3aP%L?OTTrտ^M!n QA ӠY(P"}!-K5C1qk(S_# .400WSF5h U4A#MP׈&t "![Sq)Ut-Lga mdba˘c̞3{1wd;Xk]DPA(qKu+bMF[gh°hyĈf?C{9C7:ɣ.)[r: @ӵH8r@`w/?qļP^RWkϼk܍m 0w (R9r%_r0~霜>@;7>}ˇC c4zHos(4Ƙ-,p5?2,D CwTwJ*Y.'#|)`3KN@V/aqPP;X-i stő֯&lnlq՗.>|{5 cL n)Mn:! 682ʨOW^ѴϽ[0(ءx7>|]R(2L.6יޡVčB$q# T(!R qPŁ#i@^״d2$/!LŰ \uJHS}A_Pu9nlND[Rw H4'֕aBYӡKl}V܉ǜ  _:hKKk] t+VXP |7}忯TWMg~#Og<u@ЭW?JNvN~A>K?~ ׋+5w=:s,aIȤfHNt3)ˑ Ղ%x+."pݯ}l-C LdI"Ѥ@q``;#ӘsdHbf2k"$$mei2(Rìӏ!(BV_lkK x܉TB*PPFsvku١G}uGϑC~Z3xߤ1˱k._J)Smg^H _{eỏ9Qu&>[o鄩DnK@?{f0%D̎ŝxIk'^RH YOjT=oH9lPHZKQ逦wIWמ%%O?}i70s/vO8c5y7sM ]yJ$S\ҡ}3{띕թ'vSK*-2|xK/;'>R`k7voT-w~ Nqp961q݌B`СMh:/ }->G: "qv! Q [B)}#\v-+u^so'ӕ~I:)!T-hs>|#w8>] qF8 -67X؂i$`Yq%)DYYMu(LX$''G?2oѝy+!]S꒾6˳SBE{YjpӲg(BqHH*˗<*x^ۍKŊiwb>)K) |>ߟ1VA1fs9 tqc:5*ap$$ݚSkPtM\p]v ,qeTVVwyƎpϚ=k{L;uZ2|ч̨9iy^yثwuc "4Mro;[¦c*tCʷeV+NDStޣF>hQ#~in[oy)s+/=/Ր#@0kUکl Sv֌@u%pQ'}sX(2a=w7\2Щ PAc`&ldsږok;S]c*T , pֱ wzmHqwx7m0mڧ;:.yɇ%YaZ@B@8q$G,S-5=ŻRp)8 J-{..;yq0a;o˰#BAl6x0Vx$tҒ@>ĴMILC;ĭ:ҷݝ8N2lhh0pn[р*?SL#Gd [o$`g_|p7ApUڲj)wguݽ3c`HwSJ#HEUE^^^nN2,[  R*!,BH)fI}WwS@bx8I X).L߯VVV{?83Ywq#:Ri'M=iIf|~xhmfϚ-9`o|뀃XW[>+ iڴi7|S,ې( b%m:>ww'N< .jwvɷ߼8 HGU\Rǹ]a$?=E 3*-Nԡ :08:Czw?8$l}V‚ӨfJO_.Gz[ndTQ-x[JITNu%,LaMDyITCE1/(֡K*-auRo8s:(W\X \r%}z.L#D"QVV2[ti!8W,̈́cLB I)?{Y9Ry}kC'nlit"# @#9i!.{.uoR:$Dp ȔkDQ۶ v#[|d2jkו2 R8` k;}N2B=&!t8poUns[9`{zSu j:}ѯ74Cn7 %BtGW][KtU-;; lCmTW X_ػgh8x=zVW 7З\DnQ,2h U$aC["-|RU$DJqonojn#lnBPK} 45wiɄxVW>xj&p~G{˯|UW_tEsۂ u虄G:4nůJ˱n WtOc] ѹ%a9Uh6m'Ukk%Nd۱:S]q)ߏQƋ$3;a:fߚ(֭~ !ئo;ܩ#BvRm'sssG駟xz(`7vQ́{D.9mmI1$$` _Q7uI'TZ(]R'>bi_2Җ*fS p%d2!MvTΪ2c矽DhXo{%Սz1gL٣>ahU}epɓNRwtG8m#>"Շ )eA~O}?PX"f 4M(1L)jr(ҿO Ĭ^R5u鲥tLIk}VBWn7sYf?EyЅ閄h5/׫/sc&SRi;_J@ΉD4@DN;\UUE<ollT U *+*i=!c|ښZ6++mV8;~ս2էwEKUUUM}raA᪲Ucj ;vH55SZnQrgPM>?_yᕒҒys=ck0Ҍv} /]gG&JwbA6i ״c!yyW\t%>ydUË5nH)eJYYhlnd^}-;;;//q]Ivu?w駟^wuzh8/:Pr; &~$N``\h2 ϟꊝvIRv':顀bdEI0E! KCo'I-2DSdՊ+tMDXtr7H-J(c ̮ rK#e0W*D AAŠ \{*jyYy>Idqb;GeBYKPTt$U쐵O n%awޣ//[^f[68}H*LI_ [ګ'i;[iƹN?q/_޻w?߷շ|_?￿89080 MVsqkDjBxbVw;n々,L BkN1'WN9@\}9TW'OاO\n0!0؎F]y(YYYK^v84e':(jC+(-(y+j+MMUQ jd6'/GH.]TuM' -g۶ck4)$D1B0pSErI%p&(m- Zjv%\r/b(ṡxUho gΜ ,+0g15HD.Rh8~6yu_ێM(yGvyH@˱@?|?XQDsq56e@K]ry~AࡃÙ(B~} <@S5RrWt)9zfOh~pDszUyI!#%/'˯ ?;M G:BLn$-}7kɜ_!#uKB3*PMKwSO}|#j+}8oqc^[R.Bi3<[oiQ4R ڧ]iJ(aL) oSN u\fJѪ{ۥmZ4k*%}mU>&5!Aמ]DU hI c<=<礙\c%;<>t{8IpCPNw"!2'7'7/ Hiq)Z//9Rrܬ&7!*XV~wp_2FS;ÅBߢ|xˮ,?prWZ2n:\H'Vؚ8y)A2jފX;qvBi1ƘRD%.]Dъ*H!7ܴ8ܑDJ://'&g<3CQCĬX*}pܑ' Jw"* 5e;^xO>9dHPP ZQw%۱d 8dBPI)HTRS!#(1;\+Prs^KsJhIG=ms7lEpp& [!_h3{P&dv({MPk+ nǜj mʒ5S7_kyؔёi4J793jR A8#q6K4n``q;.pl'UC'jIfooӳ݂m!J^tLeGc8>:`˶TU]xQN^HM-x'C)UyyyMBk/ݔ\h۶mn7z٨pɥH8=:;[p!lnnxB؎tG@@Rj))nyzة˞HOoKVzs^eɭwt>5'$,*RV^:p=[+|!JUF%aC(D!qӧI@s5DD֠.D̎QmE0|a#4̄S8w0#Jh2ڵ2|!_ ; "!A$# 4u*Q]e )$BHa[vAAqUi Q4eAۣ0h$Ѩ(H$bh\:o9ÄPJr\A)54)lComtn._\QKJWgn "Zu%5ʶl۲s"SBMe˖r΃[;SXI{a>4hD[4_؎Vڈ$L3fSo$"mM jxoCr%9oRR0qݱu;tp# 5Fb\p1EզҝN"†D4U*!"F! U@2  ʋMsk8oy KS9%ӘQܥd^HM&\|p,<_~ŶmyKo`D"N4D[#Fd2>kMryΦmfng AiaM&Ѷæu48!8vHH'I9999C ؄CĊ[ҖYZPҞ %5] !\ 6UJ)v)3mDL)CƦf֔DofgRʬo|YS*$O?[/(jjYJ_xk6ME"?:3H躞_Хgxc|]KOӴiӦ}÷ 3!_7;#=R\\rˣ}2.!L(2eʔl~sXl7?گW'dsdyNX߉[b767_~ǢQF:IZ>s[lf kemIo 6"%4 `lxņk@:oۻ2fC{85|-3 5㴅q$QR~,^vx-][۾/mz-)lH[i `W 60չ}ɁnB-l| J}s<@",̝]v"GJ{}ixm86Hf!fΜG,5py)[d=<<2"ݶƦ%?e]n`!+ֶ骪-}M6 nI"0whJZZso86d,90+ҁfxq=<<(*St<:aF"f`0cC`"5 8yxx1Lin,xtfúVLR 'ӷs=3Npsǟh&4eKGFc-F{!e~H'$xbKg3/AxMwM<<<2[: 񌄇G`so2] LA0Ͻ)GJo2] LA / Y LaΖ΂Gg<#)(|G@O"Gœ@<#)x$2xxxd ^< 3O"񌄇GM<<#)x$2Hxxxd ^< 3B8-]8P|[!!-G eZvwVbw xxdZUꀢeh7VxUɌcZvl+jDQi] j]|U=wp`Bd*  *zrnnn}"J8\8\XMr e &`#uDQok@ w{}M}κŃǟ@ w?xxd2SwV⟺!İB [F>p閣i:2mYGc3ʔ3@ I5ۯҫ0|8= $f(+ksjz ed$8RJEiى:@j|AӴOBQ6 D_ECh}?;߅_|Q P-^xrdcCum۝'=q-}"kGFR}84n.qhoO"PXB)<{9w?uyxd$6`}7+ /SN c4l9?T/DaFB0LHe[1 <<25>r'|m.{YY C8[,:A_ zЉBF4jdxxxdk`3}o\p$ mH&qxȆ PJ mdž H(DIZI *I&E<<2dzߎ>r3t{3؋'l\AZ]\ZL[#p+"()~J -[/DFڕ: l}ҝR]  V2`N; _}ҹTœ8<#Ԡi}ng>;NY^< $o s /=й)AӘ@T"/DIxx=POoeh,OԿBWk<<#bjkB7Ug TA< ְO"񌄇 whN<h +K0mcҹ0xg$<B u檲;a-҂C3x-5O"K" B>I:FF-Kw@`򠃴X )N>'f8\z?9ЭKً'lB a)L [U}ckA@qvhO=i}ݚsl쌝 afހf}W]}(-rN{䞓g<>c@j 6Y/!rAm;K@Bhr1f|1Oܞ("u뫕_ƱF>*.,RJ)u]/`'']Ŝ`>$a0.6ATDNHBmHN,oc" OU-[UԶ6.鰎XA* ŭmuS}<<"#0 P>޻n]~^~Jz7|ib?%(@tǦz77ZTD$gjPF譾xS7mcm0f(:^V~!j_5T[277:9?M41_'832OrP(`~m!Cآ^wa6%LC`k\xP^ Nлi7*|Uf߭|1MϿk (PivqεCGS (09 $9Qm ,eX} Z 6H|xLJ Ï'6Q˴G巹w&`Ot n4'lO({ eΟ-i&z>`ܹ= OBS_flM 6ӂteHV7BI @(Ts86v=޳;Ob䈑wKAfGGU(_ \a\+HZ8us4aWW%**dEf϶ ?M ^Ed+gg\tM7xS#̋Oᱱ =@4t մ(^ 2q}ة%ҞMSsx߼b!sq6H8I# џF|勯Bu`z}O"_Ani)T:|{__߻PF_I/D f;ؿ=%Wұ fpLeeP^3ͳIO?0  ~@,-׿2HxxlF5N @Sks*D`>io}I!j0F~?^2c3"Oɶ-] _&OU @J00C`d~$Lk@,"Bq:Xy;.IZzkmtu Oc % );ጒn%@V_4 .lM81 ͈C"A~ H ÆBѥ+ G&/'oŶbHTC\_mͦ8<#{9sVoӻq48G?P O].egQPͶ'x7pG?楴jYYRU _kv~OM誊F-xwI<<!Cv'U$tɯϚuWI[:[*$2Hxx!4g{}&=U[:[&-xc0ozCޝcxg$<<6# Y35k)lФFW(xn|m6_Y.+V#׵~xq[֖>-Zl?t>zMj*cFBBZqKսVmTpdg{ߗU ק(Hֶgc*TTlƆhKt?os睷}`@&MMœ@6H(B~דfrZoRdl m)D#W\9tÏ|HH b.cJגntP|0@x< s:9 畾.2 rt&ȖF!("p!47(uqlK)}_~mapMW/BڵeL6|COoA ` WS(#p((1%_~sv܏ !bgYUG'IA $lP'meYU@=<O>CZjtC0=>hK LAgT(=_S[YySh-3Sz.ǟ8{6#sûWFz% TX,mGId^E_@U)o!e +_zå(b@BWRdۚ_^IDAT_‹'xFBFh1(_>n@ Ųt=>/D8Bq]\{|Ay#ޢ4'ƐCsHnh]g_m[lR?Hxli!u2%Nn1qg=xbMMփhTh[2cBk77(sB7s+p +Զǟ"7R]mPcv8 8Mg-Z\"*NR\,3({^\7e=nz;AGG Kz<󜜁 wo(>{j:jBM*/"XUQD,(zXA( بrBB =9mI"rɞ-30.*I0j,D-I0B@ (.K.fT=m@u9tf3%֒۶mc[/8b`DZ"00Ot}<;wдykذ 6b%A΂ R]l8IPPͮ~yB bL 9DyD&hPu( (UO4yք?>I/{hB@/p-h ^Eum[hG-,,ܻkon@yi78l@xPSHTth <@ O[Ԯ6T3 AC%@E7U<O&L@rȁ!"k'?P=*-G}ْ,ViN L> YCu"֎c&MFj* ödD^U5᚛ pmFF1X͗ЫC}\^mF@%3aPQ9! hn$3%Ç?w8e.RinABY hZ@% A "qmUA9 fS.ysSE];19mN6@+ft$@ErSL⚫yeI0aa?IZ p; 'O$a 8$aaWJ@t\0m=X,A aъ)"h "-;&D `Y7:NRHX% Rm0  0 *'аMmȁ`IZa"U'XoHߐJi[b Wu+ kO߷+nP}^tB ԑm)e* &lR[J7O(E!mȠ"ta")`$ͽ0 J0t[d"x$& lmz'.i dgcܚ7#x&$ɱdUtta&>*À:3fQ`;)AȱCI.z4k`c5:`bRSM}5`"0w5 ;PJsbTf7@ns.qm$\zߠ899_` 6AGیxbD]B2!d2hɩ ^\[+@)0*/cp_ „#* ~J-p tn !tS,ۨuWˆ'!( ~(XD} {|C\>(Lc@Y3u#,y ϼXx!7.Z'n]b1(Z`BqAK9?-bKCl FT)܄>qGJ ۈҏ; @x@P9PI#*,kLH0o8p4 }sUgf+ b>~[f,D- 0` Œ!"RcU콖bX`2v$'Dr2 $*>)-+{܈xMضU.gCI ڶ0j12F &$gQxWF=H8kz%!qmyYe @VY dBuSzsĖ"-Gqqѧ[Yy)r^?`b3Pǽ(…_I??Gz_|Y[D59ƑZ"M&ehw'oլĈeǬW- 9(< MaGœ0!NH,ۆ 5,ˉ@x/Ty+ L8 ,D- 5 'J !D~Ze5 ׾٬eND5]Ji'Q aoǞp5 Hbs0a :O?=Ϸ}iB`ti-,D- ]e֬X2\uR@p;G8{@qοz4n| Ʊ`$j!LH0!)E@"䰾TA={28X}vK4Hj-E|`qxy;wʣvZPá~m> ˈkʑ|U7:m 4@>͖%*̊ zէ9t?'Щo8iݺulQ +jРA.]DBŭ U1t$8fXmp@Klb#x%S| `ϹXvڽ&DB;y[JdΰIBtg TLwNF uLRj6/]gBKp{nQ~zn(%S4e(,l 8?%wef ۼ mXPFG`$j')$ϙ;Y\\\a}b3=19|_M7Ky3WN"eg yؼU6:Yt0''Q 9I!!Sӄ7XX?ke7,NhE喁o|:#:w" LsE>9T; F) : @>(+m@'QI3n} uQڅE IH|a*[꥝sAQ#,p=}HL`c^T.a,6o& 0(4jRN*p viN@fZGu# +7(s\bnP ⌓M@t؟{-Oy[{%AxLrVD!))8\n*P]H3ը'Y +/pT?r`yfT^uS U*vEGߚTMӔx"P;BDbBb fʕHKsk!N; Gbi\:t9rCceQY,3eYyUeE6msDv%Â.`,Dz5 {Άq%@,~Vl+WY3Y*qs aJ)߶!(`VĦQ$P]&MxeH#  r2a$j!վp}O@ DR6|2G_R G]{@q1 y\uLAP_Q̝+dcXr'B+[t?!H(5yvIB+ӧ`nXqOU L1cÀ5!F$$|^s FvII0}o?wɇ3SJyzWMOe2ˋm=ڶ5kq !a㤷_Qв2Rld6X)!sZhQUѵK/|٨a#Kx; K/~lc5P~3ھk҉sA7 ?RJ H&%OjqbDQ!֥8lqz};ulQY9mܷ/!#','P}ёG̈"Լɲi.$DE`*W|yuF"C^8 5]pv#'ѓZs]5]C_NRHXvG.|Vo~u<@uj`$ÌѰq i r5e̲-y&-;^Ă7,Xb]2f͛i}5>(ٲeM6]o*q6dIx6kfw¡B!˶@R7Q"+GDm6L0/nmێR(%@@AKS7jj6 \uF[=C[7d8^4GyP૪j8@Ypؗ3"5>ׂ?o*Qѷ,2L" ݐ$I7j8m.ťux yLH0R&bAtCxf_/a:5`vu+߸݅Uڷ7dL ؐB!۶qR2V¼ͫJ"mW&GtjTp'4(QIe!?<(s<1In6D$ P(^~SN c-<\p0,k/qOKIsVUY]jYuxp<lR:zh^&@q[Jt 79/Nrdcƌ`SQԶu"L˴EuzwKΩ[iE G7s<\uUNuMG#zsͼW^eeC)iP'^^|[ny7}_~pȷ}.QYԘ1cӧG奢(%2,Uiqbڔi>ٟ `붭v2pNsfϚ &+(j챴T۸Q?ZHHHw~'vԉ^G @lgT7x㖍[$;>hD8T QDCdLh M7!̓PJc15P@bJb,L" ru5ɰkU]5tЪO|Gm7oe. S'ʫMhw:JInu 8VZ2gl^?]cu!\ p Ÿ],{4iy"PMm~/B65J<$l;mE4@>}ɓ6@DD'ۂM-Ri_A,ȉ[uU;<%ͅ-c=bZURPƦ8q*;vV=0?an-QP˰,2-@FKJs9hԸOcD])-)u~LNL۲mގm#pͷ^~rQE9kfKxZY \~u{ؚ- eXQXF G!q\hIYI5G6M@LPVR&EV,҉6YXZE\_5qS8d )Ʈ_tMHjjj*SȊL@( {gww]}0-X1?Wq1_TN(JBJcAqA\0*C"RJM| }XnݢYfLeKmĉ}ېۊKG=1jؐaK/55S!+83ApM3bıE9+zpQӑj,3Wr@4"(.Q>ucEs`#`^ݺuzǭα]s`d砬&Qq&ѯo&8`ݻuٳgu̶mŭe/N:0@q? <ϋhq6m3c '?Ozg)PPŧ^n=%9*BH~A4y9Dqƫ׬vۯoSߟ:958bZ&x.4C:_6tQq%Kccj!!)))'u7`Q0`0  8&LH0 0!`0c„`0  8&LH0 0!`0c„`0  8&LH0 0!`0c„`0  8&LH0 0!`0c„`0  8&LH0 0!`0c„`0  8&LH0 0!`0c"ieE"`0yeGm[UXX,W3 G5g`T򴔴#W M} t QMx}>!$vRH>.뺦i5a`T7^7]Hw `0 Jiծ4Rz` 8 OP$Eumtq5eZHD.EA=LÌD"(p. ݈mّH9J-; H.$EILI~V@0PӅbT;>t j:O 4G>ѢE`(Xy:ٺmN˃0 SNg/ TOI,^Z8i5](FuC)m[e۲/X̚ġ6y9۶uhh3hvMTUuŖeҦb޽?%eEQimpVa999BR^30P322‘p(2 s_ξد((B@ ÈD"'=nA˲j|gEQ8adq@ S&s_:N~W inHr~EQEǓ\.ӏ?χrbU'|>䤤$HF<ٟCqmCn ei)i~_UUm&$$~EQW|rr[oe$IT_lTUUyT ^,˱s<)))!!v\.EQEeYQZڵKUUϟCrB,>OUh3<OaaafM| >ϟxis"z^orrrBBN2\ĤDdnWKI v (N9*r|Upn %I|~?99~[lEjJj0dYS9M%QJ8NQ,!- '.թyכt?zӦMs\n;1!]nI/: Y}>*+[2m^~sZ$I~ڵk 0ѹ-tN蓏>Kuo)2qz/?<σãDA^M Hߛo٭{+wԵO>~oؠ!C S,m/Zg-Z;~|y9y> /)Dzzm M[3gxw]뫹_oW_uu6VZb B5\S^`0(ڟ׎{a\iW^+{ק_}K>|_~!Bξ~}7ﻼy-[p0-\qƺu_U՘/mޱYUA7tcOhܨ-[x}ㆍsrs>âs>ꫮ:thͶ~vd 2tO?2h_~s0 tMҝ$IVq͏6/{Ʌ^8Y.+/7.7g^AaA6k۶eY ʒzUWY-[mKmؗ䜞L4)%%%%9eIIInaÆs/sI2v<xr̓[lI+5{V:tP_<۹W]snw9sTj>.)+i׾__nXwm۷%|uXw` ~m8pɀ.gu),-hGPPX ұ8.^89!y~^zGJKeQ޶m[n]gKJ%Z؆Ìg\ɓ&?χW^yşzY⋇ KhP__⪆:$m۲m挙;v(:X4]0]ɻvJIMacذaM6y6oܦEN়?岫/{;woݺ̛7oıd㞟;gSˆP 4iҤ⢏g|_QBcc=69>6.]|$J< ޘF XdI>SMJNߟ~$I"HŐM7Icێ=ύ{tM֮ZG+Kg½dɒ;n_G۲J~Y˔dy1Q4oܶJp'sim֯[_b 9L(/kiPAfUړ%m`XVdUV{ z]pV׳I;w/;Z6o ]v˗/ONIvy]a{I5o| Zh-Pa} 'kK/y矷x\>~|9ˉ/NjWm>R 5m6bEe(B֮,.?zi݄qZo1tP[Mפy ֭[WnTdD>yQo_> ,_ع 7SL۝ݷ߭ݰ֧&<;a҅*g3?knF>\p=?-.)NnΨQRZ{?~ B~>xo]}v :O?6{t'4j-ݒ c}Iw}7%#"*)uhhE v%ƛ%%%(~>zK[߰qg}o/ٷ>w'}rW1cFvƿ~\c~}7sD! `3c\O>ln^y]w}ɧl@am۶΢^{uR_ϕrNƏ<Ȫ{˗,oּY RUUnK/Lϴ/ػkskoY)Rx[2i~]P\01?~ϝd6͔9)5-$߸$I 4{{+Qi.Wxm۶]>}{^biqi^="D^w_~˯|~iiiyyyDMת.15oI;/??M67,/+6kX5c*+WT*/>yt[t[~/ XEA,(,+4g"J)[mJ;oc+if m[(iiY; )0 7p@ѪY+8ˊG8 ;u^G͛7_kf1>`Kg~2Yv\[n}^z zoės i}7 饉/Yf8 â(RJT˲7Xb5(,˲-:f81CVR\x6/K.=3n\vIrRr4KQx7`HIN)))m6d^Wj7\QqQ&zwhYқӏp oOz[DjWQz[۰m&q_)T9T*-+}7|MV.uWN:^߿VŻㆄpiiό}fkvGC٣\lwninѢŭoݕ۬i38/qv5M;׹g}'lg}XĤ@Y]u@/@=5md֯kظc Y4r\̲iڸ];/^˲{M7%''W&޴ya1N-e nT73ϟԭSumKAma#NtϨ[̛`т+Ng]􏋾e 5J$yyy/~ĝ#I01֬X uݢ[E)UdeKb #Kx[AmG{sۦ:l~\ j~)!$''۹߮u_v$B o9_YdqK9c#^vd˴ILc玹sK%P0(/nTtn|y瞗<~?EDQ%I0MSu=z  *l+I4+ o__xmnS0`mVԶ_tg8J J???ú βpeC8]v{Nm[Ғ@ "K:FG ª>WpMoλ&5)<ѣs~6~yxXf5*5Mqv̧ܽmӦK]-r]B(pyÚԔXBTċ/RZ_ԽcL h׺]v][4oqEkZlu5W.7&V?Aq϶jj^o׹]fRRϿP ԡcʥzM ]:wyn.8oРA_{}fͯ|oY֓?yڶ}V[ a?:wG`YYفmݶu֒_zύ־C}كxMo X5Qrk]ڶn۽[͛7 8K.{Nm۶mevm㇃F}왳/?u+Ur61ޅ;w-), z}Wo~qF=.i㦆mٹ'Ll߾Ν;ׯz zf4 ّp$11iӦd6$XAɌ-[$'%>۶srs%h"77Wh[^dI׮]eY^fMs{??''e˖{aQԩS'CPΝlpe˖L .w%˃ڟ׶iՆrJJKZ4o_\Rܦu}t]9==Զms`a~a׮]׬YӮ};۳zs=w>/))o߾247_7uCOHHZ0 Uk.2f6ݳgD"[.((رkG]}'n$Ie5nxղGnؠvڝeZfJRJfF暟tee- Zڸq(iii[m8AVƍ,%%M28p -5-??18.;;4z y^]AP`A۶7jKJJ^/~~X֮C:tsa9{rBzؤy檢ڹ+ ڶݾ}ٶu[̦Efdd|OyzOkB3rj۾-OwA0h `7oݜ7nخ];0lҥKp8wސ"iFwK/((lYZ\/w_m] t\v/{nK.vrz %e%۷nw{݉iudQ^rE6UqFllӦM p\yyy5n8koV,q3`7,n_~QF{q\P(w.iԨQrJhٲeRr;Aנ^(RUu߾}媬7Hw%%%{8qƩuR_=/R(,نV^^~unQ"q//8~)-nݦ kϞ=5l0%%% ٹǰ Y3fh۷o/;|՗6hBUP$$.\m^0=Y~} ].׾}dEN?o~=\qYw:غukLs|zu-Zt=wnۼu2=;.\\E 'szr|v6ضW`۶SHgq\lmێY.!$'iTe٠aǷlͲ:/9?z[疠XHt?!R2Ѷmgfff8ݧ%rssl+6#Ju;AM48۲cnT8fǁy9WY4Nۈe Ĝ"866F -۴LZA`Ϟ=oX/ms'eY}Xc98Ϊ V9s2 &r9ٹ$8,I8bm4qs+GmTB8b6(DI|7OT+BUkɰFbpp k[Qc\[OuZջoW;}nٖXN w~rt'N6b:?<9ثu&svN&. w(6Mg&z6m˯ysBӦieZmg9ׇ{ڊW Ν;?G>nKq؝&þ UUۇ~X)!\'+3-..u^r-8rږ G7$%۷joSXp5"M4 CQĚq\:uHVA!DF>ְQCUSVJ3J5L1y|s/Ss׹sΝ;۶}j7Ƌx}0DvBic/Da)qN=-:p^1a\^[61|'3M|0Mn=˪ުRH|^ / ~CzΌS}cx6jgϞpgaTr<;}R 7OOE"ɞ;7 ~˷f^q495+/;;_pLHg5۶}L;ӢPؠmChMp{ՂƬKL(_+1V83g{ Ji ,Ö;.^iZξ}g-?={cݻ JSKD=V ٱװl˦uZK5@9PX|5jk M?r<twvq~Ig p6d%xM-MJ,ܻ3秖G`0@ц`/\p Hyy ضبNvy4~ h[=B!V`0N'dޙdyKHDuբWl**BLHI%g`XT2 B(x0o-xo^L pIENDB`engauge-digitizer-5.2/usermanual/tutormanlinegraph8.png000066400000000000000000002156641222557406400235250ustar00rootroot00000000000000PNG  IHDR zw pHYs  #uIDATxwևOUɳ9IQAT(^U1GT**b9`DDT@Aresޝر?z, ꞞS' XQQQQQUW]èZxNTQEUTQP0)+4MuՒ͖7NnvEEEW\yŦ {H}-'EU#+Y[2%t=:uh ]xk_|䘑ӦNwڥmݳW k<8sg")OCnJ}ƀPHMjЌAZ<)qP<_ AP 4H;,$Łp!P@Q!) $@X -E`THᣃx-8`Pk! fXO-P Bؑ Pu!P0nG"mQr_ P,8 P${rrwVUW?h2*b0xv8mr9]EE$K 1 91ؤ;w$8ku}$8w _z饥˖VVWTr;]vms%9$(E c#"rT֗ WSSW5]ըi<2a-2 G90ìܒSα[or`bfr`4 F(TWԐx*`Wo5c h b#`DIH5m hӂ>%lxM(t:",kGXJc1Z@%]czAnjI c:fSꃫ0ׁD(w(enR.詁$NZuFљ15r@L )1ju4 lMAJZVOU|-G ÂK& 1$!hG6I1D$ƑQkjG@dmSڥz`Y4Uk dOSTr%)9]nvYEQE^NIq619liqI3wmߡK6۴i&mFJZiYD1 $!՛6#=33%=9'ydnhw0,\&'LdZTR!:^ĈC.Ɖ^SsHу$AB JIZ% IqS =/jt͟<,>y씐p8?2!ZVQo>7Hi(,5I+n  )O[X޼޴Zh޼tD&'3x!a'<c Suf+srg b16k# Ye@_(j{^917vaF. 'Θ f1q?ɷ ?~,13.ֹ>rP~=}AC QuJ(TR0*ꀡhTHP!>=24 (fH1C*^tUjҧ+MM #a`P4x3sic옑S}<>Ku@l'ͤsS'u}? &聂_}שZi!&L =&:aNa:: P _pNi5*VyA>sj8ǎ预-(&34xU#g^y{֘Fw_b+12|CѩIA5/hTtM]^woN^3ˈ$Rܰ R H$!a;yTv8nEtj'.|-:fKݝ8,ޭ_se'%a3Z%\60A}3Z$Ê(e3_H{:˘~yożx[<9Oa}auڵ]zaN+9(s;(گ#! Ͽq.:.o` wOϼp|iݧw%+C?"G|:c $p(.o!;w enQ駞Қ2jw7CZƵkg9o}ڦJz+w=|zR0d|۞{==ݯ|{Y3Iw?ގnimVjUΞf2qW1TMl'Ŝj2t$p?F\:/3*+{ӖϾ%x̰%/L3N;&O>WǾkws zUƫlE"+ѿU$-UPw’klڶd%$mfC)@NIu@ : Kź ;ׅ|䐵xg- Żj c|x!@N!(ވ@n!F|}x#EPXx0,@FRa1dAi#Fb#HRĈL#% JJӌ()GLoRShU h ʚBYVNk@;*MI0@x*` a8\z(1 H8mwźF{{`S/̢ſUFcxN95`ަJx()Ye%w/|zK߽klήcfc Jǎȸxr Q#)k~*y䨁&^ZP θ&j(/,.WMUDGUb ܹcU^-:?/n\Ѻ~>K#U_[w0Qo,yn*t;K^76IijO?бWW4yjh Z-+hHG"4 'iEu@S"(ZzVzJ4Oh%ŇZXLQK }&U-)RAX+GTUjF!5 XTZ*A5)(; d-FpORJ԰PZjv!xZv+ (U!'LB2;dY%A q "Mb28B|knٶz?iK;ּeiRvf0 v?xn]lvmاgO>u蚉 fjͺ|y7P`{B(<t""] V>s`[2tdվN]mQ쌱cgۢ?IT5eOW;vnA@EeIP# s\SVy9', *!JB?dx%EV *)(xUJ&TVX**.ܛ_n@uUጌ/.v#e{W|gv7U cA TYABt2iW^~괳myw.|; }|%~zNs;r^]Kr<ܳ+->?!N;v-9KOe[rXhU=2y$5A+ia muͱAq-%dօ-RZmGu`S`l!yF`4_c>M:i;U5iu`A2YZJ`_2YJ @YA$6DIeFʫ쐰ENddAEAQv)YYmR3ZJ/v;Ƽ($a-SQQu嗏 (Rl}Nz& tJN4GBjOYؘ94Νl6V )p0.u1c&540rDce,8>1L?m;lB||❷LV}߷vuƨ b@Ɛ؛ 2hރ $ׁ<\$H >O )r#PydLH Z`BJC GAJRSP LP!Y(*fAi (G.$4u@pKTjHMZR U!dcdet~sϹ V`կ׍G<00iQi@`ȼqIaIȓCsf?vj:c߶Mr;/KCj 1Wڋ-x|ɜ;|]QMB%^0@u봡 غL$9PqY&3gk(/W;{~u]e%${Bӯ=l`&h: ;-}OɠS}}Jv҈à<{=^<vBS7n> <ӪGBF!P!an_⴪[y'66VVʵoZr5ۦY7n;TOso<$UJbz'f܈}0%ڜ^ⱑ5+ ̀6)PPAV  Pڤ@Q Av]:< Bvj}PJ|l~Mңa MviPR"N&CY|u ;<AE *PURd%Bu] N@=JDPQz,H'515%P;Wr= ǖa کPI@@M ]/ޝ{m}`0_nϥ3Aa0Lè}%3L0U 72- M .OqwOc൉Bl<;o| z ͺ_>P)3x &!XJwv]t=gO~#v[ !`P7?m;o~ao7ߟSvg]^*yo2RGgt wUMhשwp|3~`x`RTUu՟ UzP 5 *B5Pu|!| W7 BCƌB_Eu1Е|yN1·|ѥ3[@)eb"?tU`u5"z0iʨ__%q)N딐9<hȐ!+W˓1F LRe$KaMeY^_ceZ[)IiFR23{޾"wϦ7ʊϚh.9k^o/&t9.'WILu8P0رӰm{~U}^מyu3 |zjO|1I UV$(\ԤSǪʷWTu<}\y㬉6|S P50,/q}%r:d$Ym, 6sjպW|L*cRP4 gz` fw׷UVS<9'&=3TFME%w^2,lr:][ =1M+/.݋q9/nWVܣE-$j~NUk@SԖAST>0VV 5Qn>5)FuC ̧&աP ħ&pӐ`>9>DՃ gq!݀j4P8 X:9&TaBBUkGIY3PQ-$JYYk2 &VV-$yM `VV)$xM$|G~~TX7$HhПp"c㎭wyx[,l0ɋ53YQJ 0t $$,aSLe^&@x#xX}k0js0$46ų}m(jB!\9wMs,o]eu˨1ǀ2F%1B4c`&F BC1J#Q89c1"9x0 `F)Bؚ"6$|~庫F m-p +e@B!ecCxT/ 4@U !5 TD0;vjsӌ^?gm۩6  T끦@Z]X  Jf! -xcdBQ5;6 MA,`JH bDS I 7 5 M$`!eǟr+ N5npJ @\-7x%8P]k(*R 0y# <088۾y]&;X3C<$$Nxb*s &y &2E, #c߇Ғ=l&FfZ0b)aN(3FL3;3G߷pxZ\1V7R1LMzbN^rs͙vb:Q5RUO4\3uTBN'TVCZ-v]{v$hFMʀ1`0C Gv;1n/CcAŏ(%fshs4TiXU(l6 tJ)5  Se=p @Q`gc`AXÎ*@v ?aY0`@́,nm1h&Htr n#`ĕVҳZ03Bqs|H PB\Z#/`m۶mڵk:8r}ds넑:AZ*ٳ'@ι{;Ĩ*)z^{V@(ygx1(z8/&0ƒ$qi$MӚGUTQEq*!E40 6Q5SCVpghƱ5EQ!1)l-QEUTQ%2dZV&-FP3S#ѽkwE9XbeIds7ٴf}}]Fvшai2ƨ-x!p!dm<#1 D^7Fcp8LE dkcYcPmhk2! YwDQ9TˏY(ʒ V/oiJI00T$iÆ ?kf]awXwFPl6kQ`JX5{֒K4o4ED}JBO=wΝ;jjܸq:W^qkg50i׮Yo@!Lf:ÆNO>= ŗ_LJ޳;DhJe&*q ?~뭷Fv1A~Nuɧ:r]51g={֭]{t͆(k׬֛Z &F`~Ϝ1s=B2˃1h}&Wϼ81j cc{=^j*%-_/XnݵuѹsM01Rj=Ha!lKJsozBb‚3QX^Qtֹ]vpMFٳg̰o!1[{0B5~۷/Z̽iŗ_ܻ￿wޚb-cs뎭__|̫ 0+RF{ts!7_‹u֯~%K6:,?^6f3Mܷo_ʏHeEWj~\pnO۸icw< y<MӤݷWjRFh WZgYM VGnl[aEU4Ul(q(d BUU>\&鴜Gz+rm휉HݳO?v˚_J K}֭*ɒnWUUQhll?wn.^m lI_@J鎭;mڶa=LA)M= 0q3gamٹ{s+B )!>qҰ4f<_o0~/-((XpyfiRBQ۽sncwޚu,+Fv5UmP!#˲(i8ݦh/ !^#Ymo_c?2>(/7OOtnQ ð;ӛry\ Mb:]NQU Nx4L4L#!1!18c۷o<~[DAQ`((ɒ.'4l6n&1NˆE?\(eԚ曒 6B! Ƙeqyx#m۶u:n;==_w:+W㸺$S81)1ʩ5$9^}{ug_~ Uq[Cuڝ ]w޳{(Rn{һP + <&zgϙ}d, ]pkr̹v4xAmvi۷km˶?~c䰑D#V8YGjJHI鶛M 6o=))_߿?B;vԵNUqq1 0O>y晱c6^ќ0k4qWϾ:-=bҹf^73읠ܻkOW\vekƛ~S`JYyYxu3XAC%'&K6 >wx7 j _{䲼2ۆ.xA^~M7ߴCHط{_V@Ei]G)..P52jILU4yQ9r❲ss uk.xz'&Ɯ`V^ g;;;+;!1ᖛnԵӛyw[cA 1aYy˙LJK:s_>0w}'/={nuc?`}w}хl.A+~2dVT=Cee!hO[oj7[1)ƉmW|`Eʫ׭Y׻KoѵSךs;߯M;sJr6{>g*+}w*K*cc:8x]{wI&m޴xۧ/"nG8xO#dĶqj^,}_} 6GmEɬt5o޼rdz`&]` (++߿9眳dɒ/ؚws5GtKm|}[^^ޥcKv_uS?NOf1!@uaʔ)@ 1! PRu= UVTB!MӬ{4-)=)m֛޴INd4Ltka'xbj_0lv߮}_]w޵u_?7*aI@1.lW\v>4B0`0HZ7޼eWLؼisQyфvٮ};]F㝦i:wxͷm믿>ck֭yqEE.Zڒ|.WTT@eeeUeFѰax7o>Oޗe{gεs.}[[sޜ -NhAj1v,ɪ}O U*Fن-6{Lb dg&SO?uǾ_|EB|BrR2!Q#uZ5?Y~=̘12;3Z2 HB]:uپs{]TQ0qlqqqTzZUUe[ou]͛75v.1yyy{o/yqV#ZH9vF=_C]GwPߚ}سZVJM L@T]UMGg}NL`&󪩪S]5TPT bhz-_k]=PeEV!^tv`0t:+B?~N8wܹ߮/>(hIC&6e,P(G,xv_i/(}9Ga#l7Ͽ|ڹ+656ҒF=чt-@8fu&uIWaܾK MXмN{z(;>_ 3 F5kZtxg׭5.< wÓxYUٹSϝ.=j%؅TX(haS6d\a%l2G|^iޅ/ʼ;y4eMs.{ʊÅ4߀~aƱ/"UyʨVs5ꆎy EeE]ua=$?[.jݒ$]xqda d|0`pfUVVveΜ9< B/^$4~`:kp]^VJ@EQSHC+**N3O{wyy0IL]7i\)tuw:pH +c%g 8 FK0<3jVKgϞ1;q];vݱuǵЮW+ޣ]glcŹ%-lSL}l4O+r+bclÇkΟ4hm;}⋩Nrnp]n=tzE`ˋ^y`穽Nu.wԘQ/vf vٻy渄}mݺMUU jr&dˎO9rdrr2~^iVɲ,n rs:,Z2ZmپZGUUEU Eg_twqރ:uԯ{o1uzQYѠA6gYҢyϻ׭5̇**+0UU\6e`={Z u _X7n8ESZbɍ*Z,BH^={m޼v3ʬkΨ>Gz޵kΘ1rf#y~ҤIgu3<k׮p$mmC/փ+/2vXl`7f벳㗿|Ż>տ_ƱA8N+/2cM!^W7xO&xÍ)&OЮCb|`!=6։r^7$×|z.7tU3A?8]J9c5zhv|4<~,_p1fx}wq9s#P:iR0f̘%ܣkW/]9]=ꊲ+._TVV3f숱qǟ:tPD1 JӮd%JnەH]8a}{ 0h xXS70xW_yuo7ɋ78]'y21>QQ $=nñ%]u^XI_1M)ڴuܹO>3֗\RZ%˗d|VΟ$BJBJjLiƆWzGG :`ܘq`v,~/n=NԺzys=*j4KTt f=J3{, +aDJYJXǹ!RA~X]{*T7tViVF֬):TVVoテ300Uht8}~[w2=أw̽C#R,>PN {컶E=3 R7cy#:00L# 4]k`DiK~r7_{s13`6MdQ+j1Ƙ5jc\R\V !œ/^`ٳy0+a0$ #iȒ,2 PUQ1OrDQdi ƞ97,QBUMeN 8$&Ƙn@8.|ŷ#ǎ4# *jxNl-yw黂 X:?#W͸ZY&TAxgJ)0'BHUUC78C%-Հa"$?C-z8ˮjEx|{ty0e%'C4_ZYj95Vcj`Raտ PwMkaJ|A@H ZmTQ)V4'p@3_VYF)U4EH>rJΠᜄn誩6h hmڷ2l*Ħ L/]G.zBS@ ʪ` /əhMDw2zA2s<|IJ9ܢ0JMH# Ҷ6oܿ&]袊*9\$A@1am7r(aM SBAzX` L0.-hKrq}9dFE:>cF2H8!X4#$P2F37o/}!y}X"jnᐻjD{XiƎ+))1}ƂJZp ur돿fL8ˆ l aD$"a;e$&gr('paR0 DY4s+4ZdKZM9\V^{y9yo K [nժ*6f8 `i.z~ 1ja4qrc0@a @֭Z'G0ssUҜYf4IL<`ۇ1fs=6￷D <`j*~9Yņly:u$9>4i0Ȃ\oPAtP "a4C(PCb H\ <_WN/(-pڜ zI+`cU?@QaѪW`BB–[JK~|e |W6n9Qvپgk&M˚_E}ܡ%]sGy˯>[oQ/-<=Rwm݅!<߬&S> vG` c6頛`ڑ1TEa#;8BfjO>]DБ.pFr߽".MsfxLdHA?"L Y$C9n9zҷ@ }Qw}.z ל4ieI5zeee99Ç߻go}Y3p:"KN=!XlRXuwν040t ξ`?S7o߾_[ys9M6՜ZQUaucslMe<l0ど 3AAEfmUk @&81 32뿑9vCFap(PȒYsh#8<7eȨW?cܹppaNID#袋zt8U c̺JzjR" sc^@0:9=Lx<4sNÉȴ[vlخcN^+Bpƫ|IKw t]gfXjFGG #jH@[/]tE zj0 j @ L.҈mEE`l6R(2b!vٽ窫Ym+}:q)n(.=qT>%Ċ ȋRp0 A5>i_g@BlݶU 0H3,3` f\yMV,0sNeQ aC :ZPb`!<|Z`N}-U0 *r[kc ĺ#b jHX@0ڼ|+vY =S=dBzH4ĺؚ:@T}lqee3? pj֡,> & l↟ޘ?o֔Pk0PnѱguPPOݣP8'B6B^ 1@50F(gnu֍cou9-J%oRTWU[н.}tr;oͿm*@P *U\\Gc? LMץc 8 <ӽzZpI`U*@ai!T^7F 18:XQ< A3VAWٟScU8\1$,`mʊt=ZD"ilӺ鶶9 pq[G{#Ih?`SVwFfk0W{OJIp(d&˥?s9Æݷ)=ep5-ڻDY5r|Qqv\sՁjMӒ TUUUWcVqkR 2TZ$ 3koO Z3 fYYYO?1i$?c23 se/-~v+vÏ?thaذa?OnLj*qnw9] JC` Jsƨ s@IKְ$w8JOOw:j:&rÏ><}OL1=I5:<mO9[n%T6d؂glڵiiFIY"ģ^z-"O ꖀ* K^_EE['g}ݟLUԧ]v<_\b\|%4 ְj1ctRSO(n)P$0J e:wJ):UJ z{;,Q9b>-X 3q`XhzVz$D#&1EAdunVk cd=gXDch B/`2p2?{0ee;aqqIIJ DKCn+.L&Gypم½`7?SrbbaG EE&2,/B pI&A)VsΚ9iub5:a=06[F!۶o䣦2:wLLRtHGFLD|ͪV{>PSNz?NM VCQ,w8nTiUu $B- X:[3(c \j%c8ĔL@T0 gurQF bX"Uw-ݓW 2_!CE:c> XRZBBv]$ì[qiZ;uUB>P6 c\URյkW;v֩[1x୻lIQFJB&1{v١}| (ާ&A0Z Q# a JUS4(rWp0܂6Ymd?bcc%YЮwT`FSi權X?%MF}93Ǧ훼^ DLdi=N۾w;B<ϘQcb]$;EVZ"Bs$fTƌ;v,.*ꛯd%mܸvisG?xeUelLl3mʦ! Ei|ܹKJhIj8'J2JUQ34V<>:BPa !```f$Ib#:p&E,01A%Ɛ5~&3yLx芩DRL0L˗N].-(+aDD1l,b(lMӴuXKz \rFn ťŌp   %VI4M$#PRB%%mtܥKRLjS +#VN涉`m/oڰ6i!lQuy0LC5Uw44Mm-]ҪEuKrZ#O( e,5)t]pPP8䕽-!j JT˖sN=zhEQ xL֜Pj#LzY̠5c3`5"/,{[+]?/}0^xᅳƟWgptNj$Qwr XY:P8Ϊnf]m(;\,c0! CaJkRБߚ;ŀKY.~;EAB]* (2\✒a\P x+ ,`PIڈ2c)-+ea\s'k-Ea F%9QDEQ(.0 GH>Dc|?6!Vk|7Zgeh۶miqq\tc4;;}7޲߬LT{F޻JN0g19QJ. $10`vLdY^YnhFl|,s /3ZQXTL֪u+ʱERSaw,ɲ$t"(IXOlǶvJ RWQnu$t70Guҥ˶r9Oa~Wx@nέ[  fMm;tŎ];f\>M(jn:YH?kexr`ز=w΂$z rrJ%0`˂t2X)70 %U!VTx^&  `H_]R+; Lqc P-fw@QAy *Te^U"Pc_l+%38ƅHS\:-04vU]l&1g?p [ " 999ZXKI.). 91łShݺ51Ib|bĔDeR&٬NmVۃZIoSݱ79%=Lv Aa(8c 4:OH-7ӧOWE[l1b<89|wƏ"o¾+L_0뮿܉.ymI3ߣfh~CMB4Nj݄~j5E5b }˖/9I¯k7YMf8}'L4->>~k@D@fqYNX]5O;}('I_'| "Vz0I&zb㬠%A!WJЖQNIIx| !2/Nk,OJm;1`5vܦi2%Ch۱-Fغcm2gQJ !MDCuwQGu>, D@N TB5aҡC1i ugfgZ^ lݬҵKı4Ĵd ^dBB(=+f;@B\B 9\\Q3&dPd//\ӯ>?{ګ,c-v/>7ƴ7F^}IT ֟&1f &OrkZm ع]>8N0t/iҡ] xyWzxw1O)6pfANSvd@&tMo-? L1 !#dgD%oP{LW &\tB+ jdMv4.ȔU]#b4߼(>/!FM IM(56<4:c1HP-۩{ެIǦ!L͟ATE%E2 15G%CG]#OdFC5e#AJ m*Bx=kƯ~ȋK2ҳZ44Ml\x&{IH'N8o޼Gxt_cvǷy;9>;xg]?d.]L`ƒ>8nPTGGS񂖸ZqG >j4IX A-DQ{L0'?ɋ'xcz68mN+aC~A**cd&Hd*_8BH; *I-?Q $0ws|rrΝ;3Ze0: I&)R.J:]T*M I O*?U$DQz 25atxٮ-< I*y0=z{ZbwRڧoV}xa)ԤN;}v.8j./Iat]?9+lyr%$$gǍ6r'Џ¡g+_ y}4M3gvm$@O̟ϣͨve{-WfiZVVK^(1q3f;5!'WUYj2bեs&gLbW_uuVS1~ׇ~8>%'j5"+o_kS9{f3S/|ޱ]K&_reeg;> $:h f)˯gGRG՟f;sơ'Abbcܞhk4n/$$Iv{vvf{4Ɉ{~nvvA$a5}?`dM[oBf͚'`X_~+5nTcOtQ3.[LE@AFْ%KzyK>~3.|{׫_cǟ88_}q< d^8BjBm2`Nqkƾҋ{G?׋2?1-];Xy.g͞gBU Ii`1Sz7X0vyUۥ` 䲪P ?e 1 ?8AD *@Zz0ug{VB~\LŤSF}U2ݾn:Ji(Z:C׭p( 8" ifddѣ:NBɲll6I5/P0y~Yțn! 4++4McAVz?Zs a%lCq8hĉeť5yO +{ʫʪ"UTT4?^v5?K r eM XqquMЍNJL4pPK6QM`%Fp ݸtɁ0@&31>OS7VL '>D_QEux=HʺSo5$(-5>PAIN J \ XDP$`x8I&['aAL[]GI&M?T?' Vf5^N#*WUTQ?IS`m뺪'9'^14 ⭢* o*x.{,ֆ=35׼走;N`A&\.얭L+z8։NMJ eᡣ~ BSPhM=6槈NUTQt4X:e߿maըDuuEuq~is8]v(MH&Ar'tb$ ak&̓M/=v<8܎;~ܼ\%wܳw1a0A$PHHIObݱ_Zt~p;bb@f/.NN4Qժ!&4߰D8k8qn=1q1E?|A07|Ņ/nܶ1))${b|(/.X `E V~!N/bus1+OWLﹿ(hͿoϿ#q畷_<pl|}Nݷo g|p91XI֚8^TQ:RK ˑ`挙G+Qm^^Srw*73ze%eWLbÖ x@ $_I˗/_산[ l,{ޛx &\PVTVQ^ѵk״4`RS̝6mڎ;"wveg?hРm}pهgM8! տOS3zr(M#X"DwlғikF y_~z7{6)m[ޞ{Z[s巗w@9Wi߹{BN練5%`)޽}wϞ= ES4CT--#cLuvkEQ.ࢻK$ÓbCjjM+wOn:->螽{+J:PQ8Љ t@ !T^'Z̚5ŗ^<HXDj/Ji;e' 2/k0;s1^HHɭ]v+֟?|snWO?{gY|A/UMKH$/=?yzX?vO?.A k o(Boš믴jZaJI# 7uzݨjAn"ģC>8 %9sf^}եE!-9S ?|3l>'wIM63]+#=W׿w9Q*p2DE(vvag3=3}sGt:[^RZ$J_|ERr3?W P`x hu?ݻk|*-kܱ3GEN($cՅEARK #:`ԍhI hݪu~a~WTdeeTHԫg/Wgh߱=aD7p M6 ׁ f$_K򾐏 3/E~`mߖT7Fvz?췶B$*_ILHO:=b= 8BH|bt:':**hZM-" `8?6~b[Ҙ)[)0hv}ALg_ 6pڶ:5OTxی3F9jSU!5=0zSO mڨaރΙpNJ @8ƀ fEQtʳVDUOjA&۔dADNdY^UsȋX/7\ [vliAk+L%Mn?rkg\{M7ڵ뉧xއ*+*/o F+Lw#L,+$&99".D,E{zY1lB\j`}zo=3DH 0pmsnCϜ9u֫[=I/" n޺;N<3ln[zT'fшMjh0q l]6s W~BN*\#xW^?s']0C}[6y|ۤ(.( Uqk>4*)PqT`y f" 5.BN֣i7ܹs,,2Bazk@\B\EYu>nSOQ c,IlR^Q ־tۭ6z#̸rF^Ol3s鳦N`={/:"`53/rA=V%|ҳ.Zx1L#$jxS֬Y3ii<§r)=иU+ՕՔѼ<ݢhlݺuG OMr3OKYjP!$pޜ~>yUUU\.߿Z*#)zO b$d̀θr~ol/=1!9b<1v]d X] ;߲yS^^$2B1&S ̺zV箝rW 0as&7!>&>99ZXtVESbbc^YʆJ0ow~1xt}ݸ8BH xz9$'ptF(щ^]ZywK!.J35 Mf5;v|)+X;iii˖-D8ѭ s܁Pp+xoW^pHIԠ,c뎭 ֬,ԈVXRسS}a\q.->c+eΠ@Á$J#G w8g)x?3`@ T63a<'  kT ]w (Hll섉DN$@0f0EWL BH! w/PD67tz^roQ+ؼy͛'|rg3NId:A"ܹ^[X#o)I31޲}Kӛ1OZ% s3r / rwp#  nȚeH9!h c7^7AC;vxWoݺu?!m6Ji.]N Y>'QQ/?뽋As&賏Ayy|OL'gEм{&&tqѢEO?}111dɒ}ǰ꟫$xqܷ+]ڢwzDBTG/pc3gΜ9sCw#G۷5'q?{xƌ/"<ztm c)hFQ? 0@=brTb`lu#]v۷O>չ۷oLnGAwɦ 999sϵFВ8:efCirwwml(UVUR&$&(~W(;;?:t(N4/8э߫I Ws/YuKytUSeMOa[wp 2Ȫr<'fvm(iFs ^~劢|ݜ֓8 utG׮]׎o֋]|+JOgsƍq_K&_Zbࡴu>}K/4 Ny;Bǟ2B;w,+-BZݭ _ZTGCz<݊֓8 բ'ȭwQYY lԪ_*O}[omlqZˮlW\{Ezu]3̜xOV۬1O=``;v꘻7{7^pM1uZIII6UT* qEDffرc?sx'ZcwEXRY++GխG7oO67^ܱ^wu,} gΙ W]yW]_pɢ:tDze"op9^y}6Q[h/,!ۯm\q]7z5Lb.}{il|lb IDAT^=z~;jvyEb(t8J_M6y<)sKrU~pބctVΫ '^ 秦"qk%KDG\݂C֓8 ut'NoE-{wٶ۶oImN1U50{3g~-^dI}~֬iO.+Uo7spoݴu;Kk+= =[nwaTRPO>-)*OWǟ0D'@uG`0}nݺ(}~ɓOt{ QLw騣g-[aÆzkÆ Vޜ4yϹ>M)Sbb#:!VL:O& U,0TCpYYtk(tu~0Uc*>۶$" RD AQ_E` *ǂ]^TbQ) (C(eۭq7KdG[93sͰyҩ'{Ͻ`sE"T^bE&M4hРYf>󂂂~z{l9r;EPQ"88%ᚯO8N8@=~ƾn8&$U+c߰^Un]KF0ar{=ޮݻذЍ@8`x4Y=w+8p8xU'܁Q<۷og? u]{lL KR$'wJJJJ4M~Qr71bĎm;RSǽ>n6OO/bEH hTîm@( 0Ƽ^o?iXdSaB(HgL4{ѫ˛>D1ahǗkqHL&%f7%U~*GOTM!hH$ I=UM}4 ۾c;OMjGǒ/|aE,Nlꫮ^VVfցp ۔" B%]B܉n:lذmy$*\S5J&~>1 R{O\ޙ0=(U,E ޫ( [!ȾO,1`ZsV fb lQ4NÁv&*>*˰,***zsn۽g+-,*|/[\q.h%ǽ6nk}+_}L\s5ad9|7zȲ\R^jw٭{/>[ 87ԃ2!BjZ`~$6@H$rP7|o"m oȑYkq-P=6ZW.́g\%`[`qR7]Q0V KU\õ*{̘Kv?䣡W>kIԢmC듏<پ]{+_ч{:۲u m}7ݼq@^`zP=\|ݎܸ7x?7W_CwtMt_wuEk6}on^}xw߻O=ymX=ɺ;pd6} IiIn`ltL00c\-Cy<_--[֭q- *T :whc9ݍ4n ABUIpu֎@C?xׅ0SYS{=7ƿ*VL ۙepТEm)P7i \.-+ CEEiĈ;GlڴvhawK_x[M5٣IP/ը&P)an՚XdglI[{嘎IA] <LXΎm;L<>?U8;%8 3)I07I)_l[:YÊS9>urѓH4<8`r.sQwa?ر&NPJ~͵W];aNiVйSg3g(<ēO, @$ $%Ko8hڴknݐ0;55n8yӿң3ހH 2m4qC$IwפIӧU=3\aΌ9[wl5,#¡`8x`!A#ba;kqo)?U {mS'-gݤ~cw_)CVMB-U) r4gáԥSf-6jՔtǿ=8P<16'rbϳzgW}nSN_|ŘGn-)+Ƕ|~kM{_t~M[nؓ=~KM6[4Ė-ZNrno{aⲲ2C7<'zr}#Aq٠fN)K!O.IR!O.|؀ /2mjY:<ppk3'qPz>gΜ_c::׍q\Z2ɗmw)VY5c%GF'QBU,Ch`,yD ӃL^&}SP3X?Ƕa,Dzms{[[rLc|i>3bGAѤAPXUZPy=!4oٜqfZmbUS7/Sفcٖ"N Fldž=7oٜ#DM%Zi5 `v8; wvjɁW a#uQמizE ad`!I@c: l= %&qPF F(i"'--jܢc9LS&gdYwus8@ I&J E01Fl˱Ǽ q# HM"TI$52/"0'g(:H0-ÿ7 'U>ƍ㘄EMG$IZ [\8I>/6~oYYp61;W & "Ξ*|, hug" XPej4@D(<)I)x<Fm~aQEV4Ec2c1q ŁFd&3MTEu <2p¹׬[6„ʻspJ$K)$I8(x{#~pJEvZ/ kZhK.iX2eR]' 5z  tq,kZ(Rp F $%edJ@ Wq#Cvذe`BNmKQC.XbUd㎍~!mҤI$|G8ܑ0' lr Lb2d \JQ-/BlRHwQZ`Пi)@*!]un>T ؎ݔpHI&iPYڭy"2Ye.Wn;6ˋ}$a#cEE L4†IdO2%4(/39$G= ]@~6E,u֮˩g8UbYZ`.7Ko8տ$*Kg;Ý򔴔z(*-Jő`G& i;pEҔ) C?τ;yǺ /8w%pH04/dA/'jJ/3Yy捫7 eA2- = ` FũY[wlm^NørpVʨ. A)eٰ EZӲɱMH%*R71XjJjZrm[Y[ñaRD~5rwf-72yRnJ&_@y) NPw刨bEņ10ƿZ۲)6,NjvvFvl[|͎/sS}Px5*%@ MܴuS$i4۴]E\ "-`_ b"jDf2%ԂUD,4a;,JF92ʊf4$+ 4diժU6ljնU(r$L"HΑ؄~wͫpV@ H.KHD>FJ‚BaB!Y$ռ?i⤉/>b$1`ubԍLvtG! }d_rWZm8{<ţe"7?_sۆ](@URx7nئQ.spKLbk$"qp 3!<׶A[z-MKRʨO4wfdcwv"C#N?p,zOK[Xd,ӑd (8x ~F%a$Ɋ,),˔Ҵ44͝Jy a; 6 ))^JlἅiZ{G.T޲sK#`JrrrZstꧥbP)ca$8S/MâV|I+V4lҐXınsP֍[#VkdY.)+"e0\oܺ1hUϞ !0{=kZ*w$E[O<'wi'5R l통E/}٩Sn'uzNE DN&eJIO9!;͗֠UtY ˒3ln9Mrl(Iq.+2e4G2"kes[bRvfQRӸAA j9O!;=#0RخM;!M4A,3eefyzR|)P#T%k:`rlhuJRGi'4,GFl GrRJ-X%kN\=r K/ ppvl۱OzzX2SNu[ߴ~u(tK=vlHP=~HL`w8sC8 J9[7l2!ס27o ʩ+&7)UC"h ?#; L  f3D>fMF숹$8ġRPGYa{7۷mߠI=XΖM[(XE8bQPI * @,l pkma`mbK$jOwX\B`<-w8<JKnrpu.@E>ģ F! #J?9cKqgڍ#BrTX'u8kކT;>KI| HM$*@TQdYTYeTf;w](PW~F(`eNBG$5z\~&jfO ٣)UDq`'0@#͘@ԤݭG?`rn<88d*êġFJ„?zF97JMMe ύ /]@y oX?;#0L;pd"F&5%{,՟K)WKCI> p`0<VH^ <%^>rv"|'cm/AP#M@\ϬtBRf~7sĉ[rg\z饪3fP{a$%9e[y|Œ6{ 4O6 pd-N9zٶq>kqeԱ*]&Q98+ w}I^RVr=p!$#v쐚5i®8 Uk7W;1b$ޥFM$*7Uş@B{(-)5,cm_sL:})9p(uKyY͗XFqذa;v4noӵoٲ'w;[bIPB=gi)iS?PDz1)_~9O?>ݞ= 柔ESQ( )^eΌ99s>L|PοIDC)A8Qwk:5bdJ })Um8܆`Hi35\s['ě?-..(S96l؄'s=SN:аiL4sh_~EQ7Q\9\|͂ ;O;4F6kO8.4K/*,\ܾ'p—~9ʁ[nݑc̙J!GȪTK#n"EM;Opɱu@0>GXߵ{]h R7ֆmTpёH0j:jys=m.O2}Olg__-sIZFZV-4U[x髯6P*崯&~%dW/K[ziݺu|\.=oѫy~ ' VM@QqQaQ!]o-ngy8P6C蘭[}5-PйhM74'!QxEvu8<mns/;ŠR"7nO!zy ,"/EM$<#$oA^9p-w{_'oݾj*W\~c?9mڼ W_< nҰc;pJ3=9vĵo|'̘9cꍷy[Č<2 yAny ,T5\r:M:GOOO,m_)B `LdGw8>wv߳UM}w򪢂̌Ͽ̞gzP{Ɂ2_r@Q1ЊWq\ I$aFCdxϝ|XP$f B@OZ줻'G6M bغ0FTKCLMI;(DY`g}6x-Z,Xt̜1 uFK/KI&{t~߳F(.(iYq}eykW]M[6uY;߸}#SX~K.i]G=.yZϻSN X7*pGmؕIĊ4g?ͷ,WӾk2Җ\@-@ z4B3{YW2C~as9aOSJM۬J> cq,Be=^p?y7 'q lGn\qA]ڙĜ#~Z4+++vð;?coFƍ_xхCB)3gNzkC DfOmV:+8uҲyW_{_c۶n:lh6ßy8Xy48[7n5C {uFȨ3? w*]vY0 |vn߸董< IlR(u4 ףK҂y;zٮ}e,C$`;a@H@\^_l@2Xᠣ0\u u,t@ |B8 gq?( gp 8dnn $w1ɐmغ0 v?zȪC6?G`r?Zr{Ż5T h$5ꮾ=W@˪Rv9TWPvaĻܵ$)|*TQw8C(,:c{ګ ^{ p]꣬u}Df$g7n65'p d\amؔд4" tN:=W0l;j+ B0d ;&Ȑr!y !,nqί ^B p@HD!ہ F.-ÖRI/qsEdz6?#{UC‘p0$: ~ ːJa)8*T˱,^(`B^+2S7z0 ƙ؜sLf6ۉ2U^WUeZp$ D>ml EFv>=[&/r@∌h:&L,:_ռzDTmW_}u7)L:4db{ˮ2[<pP|$''/[΁ӨiۆV^^57L`hȕC.^U9+Bemrҩ']uUE1?ϩwTc;:'0e(N8ϻopBضh,f_2peh"AWILҪu>i۶ƽ; 4jժyz22237oܸYFK~ܢ EVjޯKA͹}/˯t9Kܾ3d+f7ή߸~M|QJ~dU^of|ӧO3O=SR\6ʒ\|uOh+W[%hs!8@L3ōnxB5zxD5P{ kX5]vOMڲEKN_ۨyW}N?Q#G]N֛owy4T(~P{Gͧ|8EimZ!ky|'~|͗2#A\$ e2&unpo雯etO"1ٺDbi:O:u3n}O? A46 $) 23-]>Ag믿Ι3@qaÝmyd54hg_w)og^C ]Uw3;9Lbw 'c+d|LH0ckDX!πۋ!#innR#%䓈 7{9Ms   iK&:RBzB+C|ЩKovCcRSRMۤL KOBd{%%Zur%L#H(RV^9J1hʼnr=w'ҵ~v F刣k @p$8HhJ =7bf,>֝[v-++ ;lMӄ ˰"a# @0)%iU$L=X*jOp,IĎ\3?s CoY%wKc/^n:ca"vs?i@. BVQIQQaۋ Be{ &LaʀhV{?f̘yT:b#N?sYcǎt^Œ7;XS/P8%%ʃ`؟о;~.$jd  6[%/:37s}fQm@wˣbDBXI&$5nrkeGڵCmP`0'~1 zUWqCKW().Yl,.w盦 cMDpwaŅmm쟨J!#M7I4a7YC`y@D 0ˮ0Mp*;q DVXKG=!=ͻ#f 8 GܿA8hQPPPr0ymب!*"H$#|^TW[`Y,vЎ"Rn-:CPvs E@^;ң64;RvFJXUE^0 Z㸂k%`¤4IԣuemjUM7֭<~ӊ%moR^ ]QPь&5nzǗ-_/>!dffj*9"ٷ *kΝRŽ&<$^ 'Q`ԏ1fb/fld8lXwOp УSI| HIlٸűNxMZ$=h!iIi=$%{; A=K6P!$J8 \a{$`},pmf.{ө,⩧ܔXj Bl]8(.bUG="DR.~U'iRjEH(:h!NH*Tv8(JJ 2MSqʲ"}~{Dxۼr(:jD&FAM#AE>ڡ V[:w4 +6^p1b)^D$u_Ge&p 6݆Vw^e˖K i$¢?pMCZ^^x(]p.~v}6v-H'{7mHӷ N(--*Ԋw ˻rG<pϽ97`SOڡ]aN0j@buM#;͛7iҤQF))iiidZZZrJLc>x\4 jm//2)%IeKe<˳egeeoTq^͛L)|U(h ={vzF/9zvPU /{s=O/{P ]UD>8X35} aaMT^\>iʤF= o7+]9kY3gc|)2&-%)\(i)iD&Lf%C22 ~}׮]wS-I & GGw_ƛG BwMX ]S.r$q'/ː K ۸I6|W^{_ -]nV\T\_RVVi$U,![ cqa@qqq~Q>۴99q0zH8rw))Բ-˲<阔P&0V8T"Q~M^Gcax9!!TE܆~95a,B!C7BPy6욝I@9&krpI:u9swL$bE 9Π4ƻ]Jͣ(fGtG`rȕ7xPN_Ͽ{e\Jjʯ~۞z꩔ڹ$jR!P ~}_uVr~WZfߚ@B.\F]-I&n*wޞ2u<ܳF3?e;+; ~s~I#p0$,XeF>gaÆ 76}ZjVã~d#kӼM\VZvlcUTZ, q`qyq4oAdrI{}[PPE䓨 G*0J@HjK}8A$I!E]VZ =+ۂ~_$=˶aՆ^qi+Ŀ (*.j߾_ r6p߾}K JdYbn>qP((w}5,u+Y 7n|`;wԈQ}#$# TK4`(+++s]T+HIN#C)c#B:r-eeee_믾b4FؿN^( UwШ1LTC| p6 %Cp( V6C`xܯ(h$5POM ' * [n靫p r9!0jԨgէ6uw+C]!~i499"]/3 {WjPK$|"gqF8v.^FpLZsڄ ЉH&ÝK7`ܿ!Q 8p@+je1&RJ$շIL8y%b ɫ.ٽ% h[I>~PȢ} $h6bvSbQ};FviN q,˲Xb#󁟇 8dM8LΣs1Q3'pXĶuI  <)VWyUm0ןN>4w$ ºuՄbP0T Rfa盛2Ox嬓NP z@U@6ǻG "D"@2 (ɓ_NjM,3E) jL& +z| 8wt^ڶUJ̦oʱn5 r@v0x O"JBpTln+Gm5nddrv@p਄G=۴=<5DH@pCSN878spnm^n༄Q&$%"D"`jfώ4L.knyŠkY >+n-@ j} GTb <CpTsxM(/U@z6̘ޫK];r7$\ jHh 3+~M(bГ+W\xN_A zX/+qt tD!z$}1}vOdNɀ/aףG"_!z{/`.N^BwQnhg#2:c)PNv1mN].R<@LCFph o%y@0_ځܾ-ZĻG "_"hPEn)`/nǴD@xFdž-%Bi 4.lp,!qCI I(}yy*"3_- bQe }%dfWC 쉇P#ѣ] j* ˴lǖ Mj|ѧXTCGdU [O6m7@<8L)*&(NH5wu/+^F(NMKڱSD)| /sB =@_11XTSIH$?K TJ))VDikLPx_t!aw.]m :yREw@cǪcF;񾮣Y0G6߬Xs ?:"pӌogL 5H'c΂Ⱥ>qS`FαmP1>R-LV,UV[~o=)~\˜ @N;h9~.-$pjRsm{@0/ג?.M?v?a#SZŞEI@rW=6-(C TMVKH8V:pJ Xxf"JJ"QU%aD &1@uFEL.;Ʉt9XAB_|: a  <|w |]=wmm"6Àx^P3\[SXb lbQU%dF9/y۹vڼmyY }-S`G%hp І,X.?s~zs;X`O*H(#|W*+cL664b!QKUUQviӾ 555"8V;E,\>K9]CwUY/# .Ѩ&$IL`FLէ@2-I ڞ HHvucX/^p7?Itc7| })C%jID5_:!M'6%z\zo6߮XR.1u`sТ"t+"D>OEP-$Þf3 зYݡe+T =g+rI"A]sE G#?=6:UyUyg-}D>D( q_^V6lk9ox#p]ѣ1p$"mz0h'b0,_&CbJJЭ[J 8*JBP[$%{y6h&*^Me*v,G#2k~E|bW7" D`˖=W&}2ls~wNmwWr"Ac:B$;bP( @MѬ@ S]0/  5; ؇@4\ $u- 6 y*7tm:.)#RRfQ txB0zQ̝n]}O%)#E Ȉwyǁ# ѓz<q蚕Imڕknj?둤HQBS.zx"5ovEvSeƋiaƎFRR#+> @qq-(8DH4DOBPM]'̌C?H7廗ophs,x0U8L %LHRnMΥ  %! o1s& `?ZűФ)x6$! >NLG3r.z P!X ddeSvdTױf |-`a"N(D㣇Mr⨆8D(DC( W9` S{ZGpu+3{yh`u H8;qEu}CA)B<@>n @.)T79|g~wۖvR WNpDDNJqGX`Q)p ʴ]~2l0 @rEnj`| h } Xy"dEx̘y9+k $gVhwYfFE>C<Ae8aSPJ8cf]4s^7_``J0 +0**3 ]B( A%lܒ(' i"D"хϷU|V!Tnb+٫olgz޼9tʻzVpa:ˑh%qtA(%@PLCp%6b2M! "--[^w8Ot^1IlV1s)h{ةq1)pB!yb 6,; n8ba=PZdcÈ:-rZYI8?EYhZP(FvMbTZEx݉bLYp0Tz?9E5ٳ0s޼yI_Nm3 JW841;p] 8gH}"d)M=M';JV\1ߔ74bX:ԁxj7uovpOQmnKvO/qvSC 5mer ?'z{{'Lv>zĺqG, K(U@ 0QK$TՋ2AMKk*I@QNtzAhx Ǥ鸴+ކb"{o._݁끠U|/Km;FHiTeD'PpqՁ[*iI$Tm[*o* |pILbTǬ_@&uSitnAmpTc\(;JeY^@`AVdVmLAz^h6@*X5JpT 9hO#`AkzW<NDAzw!x#\$M;ڶj;aUSM˔=T( ! Uls&3rux>s,>tʁ p7_0#BܵZܡ)!>!;h>.8 !&XT_I;zֿg0UTD̥*Nخ)2UiaTR[K{3nm Z_=oYJ63p 8bDQM%^m&%q1M!0#@%pT!B^}Bn^Fy3+`+cQM%ѵ[W{nq"FK[7AkDT Z (ч(_ pã/yp?R1q<̊ɆABc:&I,?dL[VG7M7ƒ%ռF NLMNf|6/? HҀ_meXss]Pt Pi@ T+ *Q j!9y2q$j!Dowsd?M+ S@) B@K@$"z2,v4gBUQVI[BA?C#pqwpϐ0 >֭,X d< XTR^TM9t&y6l/ѨT2xh.))5:oz\mݮؖ-tn[f8rɶR^ry *f& jtA#: *Aэ6to0@bppNax@,*ـ.v3/ 3W^ŏs܃n~,`!0ȩZmW޿nPZ@P07xJ" 8L`9ԁ2AR0J">0 -FO>CvX3뻗fe7?:BGX方˃ΕD6bHNSHL"hxvs10EUb\ 7s wh@ptyDiӮ`| HB(ntG$Kƻ'YIdgsx@ pN_KԎIAAK 8ڈ)F-+>«~arx">mھg[XVek@pH9y@N~[  5RJ2JNܼn~uEV??]lFaϭ#@ :͗vM"EKˑ5ILëxl6.Uu AR͊sM4AbS&Ba Lb($G5ɂjb(G @_ߟBׯeY@ z$ΝKs6l8c޼}oW^%9jǮ<@ǵ=Z0RE<ιj$$I XNwFws%HKBkƍX`N{X,!>EvlFX͏t(a-N:5ja2[R6c"$Z a36KOZ!4_?V%. g:W,׹w ُGZ F_:<]ޘAAoj\9BIP@U+IOGqqo@?ۿ_Uc7-Nۏ6hۦ튕+\k׮ [uk 6,?gΜy߽ŷ^Ԅ@mVXYg:]t{-DI㫯,(c GHM[o⭷۽~Lk]#Lc;myϵu 6*p͈( ֭[a݆x _~ݪut$TumfP`Pa$[6 m3QSipF֭[T9'O?EZb4i6mvmrn XB!4n߻tRM%aYE]U % x*t]wҬY_eTq!+Tǧ'D nx䭻8Y2,N?a@G4ٮDuzv5 a nu^= Oxc~#N=Id&gMZw*f@l/kֵ[|\C:;/ nUX^F N 55i4I*uVЬi3-!rE:ӳ=: 936T1;jQ#G~R_up7muz0kάhiuv^BHlhk`F\9su#`Lf׆g& UvE{ɿMe8焐@$Rs,@A5j-ͰF"u$ww N?pga"8 8܉ޝ:XqЃ`MVc, 0LN]# ĪۇaAd'eZ焝fQnX 'uGդ= I# ={v Up]u p@e%”$0âgTlET(mYyꮯ USeElNʠX˪ JR[Qw#HqϤ,/oF^,圫b-iS #ApDb;^G+[aq'#z@7pI,ե@@jm7C Ѓq ?:8]&4DBS݇-E7tƘD}4O:ټ^mkЪֳ pB|^43^P8&pkݯI`0Ivx<:Q%G ":E7-SdX Dq~DR%=3KބW+GKA @=ushsb6lr(^;nGlIK6M=ܾpx9I,j1@@@@w͈w'\ A)U;2m;pd `8k8# M EO(z^uQ9*pDeCX18mْT }*Ǿ{Q#s[^{j=p΍(舄"D$]k}k+ 0$&8QO.$pG0e@0Bx4a0b V YhEPB SXh0HDUfTMEJdVT7K ZRhe"(p`EzX' w.wa; `VQqC@Ħ39Q#QBjaĤ*A$$OyEQ9`BjMA${v0$(ԬڴRȊ:Be0."$b;iѝ` Z()R4*`TMƊ U j`BW!]%&SFp*<(I -4i9y=YΜsvùR=%N9~0 Z.ק~:h 8 yHI~}-ڲ KRCf*pdKlRVVvn# ##9O=RlZ򸗋#zGVo5w+GGKjB0ogؖݿ.]e/3gd7򾜜)$ayjf ãGh?7n>Ĥ& yX~)aLPVV39q;==ړ)++; PDը6 _\ve'~2R1-󉧞~ȵxG{۶m{'rr22ǾgsWWdorFzc_z ^xaUii&݌X޽{gee۰n܋ӧqƩ+Vp"]/8'''-+mǎ< O=Tz<&kP%{6/ۑࡇ2tCs9(&8Q?777ywˊ5+;:0‰K:n.*bu tiLfrެq33h* Ϝ F8=\$d>4NLePp{Oyͮ.F ^y&|бKGsiS0 qmީcمB믿j<m۶n˲F _}/?3qحw݈f~9?PW^sW{n=a$^g~zz筍6^#xL~T")Ν;nH4^Æ -g?&nXȠhܢY4iIsp2sVs;4 `m~i,6If͚Uhέ:tp֪tҽn/-rDDGhѢmy7nj媆Y ~JSfLfFn&nڅGt pYY;m [jQNY4$p۵k I~n=L2F-* ;HH'fmx ;<ؘzm lǦnL;!AiʙJ+^AUꥆ^кeGyJ"gD30`0(Ioƍ+]{R{TYTs^eAI rY˂`PMqSB;vأmhq<(6l8$ iuKn{Κ GE G $B b!&ki}/áoW߇CT7$t]wcYaui^z-ےdٖѫX{aǩưv?,@n!%Iz%R땖`{M!weP(*bY"+pش̪0Ƽ^o8x<`0vLLIID"a`0XZZsݑƌ1Y%IrMtWI9,˱ʨ,Ʉ۶Mܣ_K el$Ib碔J$w9cI;ܲ,۶cnIPaijfF$-; )+{q*-v.ιeFܶ%l;|+I^܊ڽ廲1+|$˲[߇K ; ۲+֮(Ǵꕜ~۶\E^@UTJub;GĔ!$ 1K$4M+**'*,o޼p㔔x"F?_4h ~cǎ7^ϲTʊAERRRR3OhC$EYv5n:Tckڶ}V}oSS-J7id^g2M_ĝ߹c?ЭS)yOG2}VUɌ+V<ڵkeY6,^}Vcu֔sN$i鲥e%enUV޽{Yf՜ǵOIK)).Yfѳ[liFeJqi;6lm-Phޢ^vp09z<5h׮]zfznn 5Mԩ'tҢ¢8N[oey2J)Svl^6n&mXAǵ9.)%B[VUp–-Z|{|>ulߒѦMkKyO=TH+Wܹs-Z[nռWS(ѝȾֲGPZZ1 H~Fd`<ȘGzW^We] !驩~_UUcYV(2 CS53LwMYw>c;aB!B42-BS{ߧ磄!۱}>os EB'x|eC`0V%lێo>O4ߋw8>﮻zG4m[S5Ji0 `y4s?p8 US !PJݶy( B1^iC`(H)|aŪiZl:eYJ[OB!۶=`ZFM7WDu۶ !|۶,+imۖ`޻_|E}1>쓅-,*)RUuɌ1˲TUݹsKJSw}GC3ԧV^|ͯs/>١c=_xy7Tmggv/n~z*--U0n6lhq[la׭ĘNr=W]}J,^okpLMk7=أw^II"+ťv֋}y76轏[teAQ!d?Ǎ7I7zcIƘz}*mcT¨L uɓ&p shѢ_Oҩ++{aߓ^I%3w*.*%8izG|tF3⅋z_>?c]5o6c9eY3C̝;w+222'w?y߰~r?|TzZl郣|7ǣyJ|5k$%9gګ5M|]rw;nռc_bEhI2f8Z'ϝ;u^zsj\aUU%*]}gO4e… ݉:Κ>+ɗ3ݐbŊ^{<S2gy]Wu٧|?#_>+\~/{!ٗLhIBHff?,غukl>f1+rB~{ߙ߸q9]6轏ȝy;Ix<.zݺzheou<}g> GƜd>﫯z~{-n=?~?NIN6lX? O?|uO=Ѯc;Nh SO} R"tD- o G 1f5#i \p͍׼=]yءcn]o^gyb̅/\fY3o>c9뜿5}?xa桇zrwؔRWޝpψ{~wv̔nm,aÆkY|΂/&5W6|ͷoV߳?~c4mS 6`[e|sg~#GǴlrЕƏ?{K/THʍNzUK_ݻ~8!E;^6M9sx'}2~Ҽi?~[.]45+֌w 70 [n6iM[?5+^7?Wܹu7\ࡇjѴFY&Lx '~:yrxW f?KԷ_o0ii.G|tm7 fz_r䉓ˊ> 6|ws/? @Ҍ@ xg-).iߦ}rrX1| s=wYk6iشaZ߼>';'-;~酗tSŶ[0vڥ%Զ4tlޢh csN@#uӼű-nX[T\ꛓO8ym~_TW!coo. 1iWrӧH(2]pszE[8wa:ZթC}>?W_u#է阮Ea))ϛ7/>.SbQ%u 5mq7?䓣|xg?78i۷o/)/؁1Kuﲏ'l>0iڤ<''.']v5+6HNM^xG̚1*;6+WKr7N</ܩ]N:נhٿ #Gݏ|ͭ}7t3>*+!q/ꊫJHJKjа>_5XQ:䃷z1.%Oaҿ9?&DM4E`۷o__<:~3lҥHpYk֮ ׮YX(Z'2xH6nӒ~]+lɲ%|A_~mit ɺ[eYx9犢l߱6lܐ)qoNx1ռޕGU]s6}#@b K4 KA0 6Q P@nEdh 4"he,CMfqRj|Lwsν﹏b鳦[ymāUUL(-fz_: @-K¤~;v{~kP\Y 3ͼUV63TE!/Tň¢dY6:ڄ* A5UUZ1 gηE/,RU5**?/6WV#""dYljAbqEeeCW:Oݱ}Xs_4?I$l5+4!2lΝ^}մ=;33|suRgF?c[UUp`ҔI;S EQ$zE4:sX8 D[n P;S cLcAHh-R0躎4D!jǎm۴]A,k2wq@#Cdē[߷릫Zaμmb BTUV@$jF#u{KKJc#bNZY(Q^*^ryTL_ѣYΙSgHc$AO9YИ:)zU7FrJ9Ѣ,"Kp}"|7V=4 o:AC-f@1478w'kENIR$#kDNn @`\dMӰ0`YUM%vycHp"Srָ,Q RdEU\+SN]fg3tD ZT X J4f͛E4hz$Q2;ͤ}tg'q˟ӼyV$oQh0յ9s;qDUUY5,džuN S]% {uO>NOmڶLh ޺}PHPCsl5^*q\uyX-K+JTZ֒%[7m=su䑼OL4c?͕ocl0B"B 9+YV_ȲlR$w0(gϞ2yi[6nq5z2od? rTykZJJjYyy_wX$DYx}F4L넴rlVm/Z4widd$2EQl&*Q.ut 855hڌiK-߿ztXbN+qTTV~Z'J;;6xؒKeX/w|m,^xӦM$b֥[>;r졤|>_`sڐEQ4UC]6oWsw'{{ⱩӦh00ƊuK#f(ҫH2x3YUQլY3ɺ}veyެck:0;wV4%gnβRtIrĉ_8,uz""*q̸18w̙.1X.1!ԩSST%wRYٹKsL`jnݷuL3t.]uΙwzյcW/춵-)*5]-.^ X,116-22_?dwyf͚ tM֭cGZA-Upt21<"h6tFEG8ù|й҈YmEJ鑒~ʕf _Wzk~vf4jrU ̅@0Ɯk׾.s~7l:lԵmts_k_2*<2~󄆇Ξ5#9p{?&G]Y۷ [`o37YԔԯuieW_~e>;vX<ظ~crrr Icl2AsÇ 1|ē#]t>D#S{=|:͛7<: {@s,2h1LXÇ>}QcRBhnWVR^]`yj,I,N8mL&SLx̔)S6ALIIɋ/յuVއ(dɒ2BK#hP>L& QZ=nV[!u]o{}􍌈\f 60ӂ Yc6m ^ZP[]۱-ziў̜1׽~+=($(k\ /p!;?޿՚[ A3Hŗ^ܿs u1 #6"vgOLIi Yi#ID_N߄,III555s͙4qRɁKdzH`jRtS!qf'y=,8dIl6 !)2|> |(HX+,˒Xe9y^91cx'vXMdYTP$ʛh$LVr.|x nZ(!5M4j4~Azß~ MJQEVT;Hen7 E1 ĔqfYeXI:f ۸qcZZ&0,cGyB((!bs%d2L 8bA Sux?11v붭a{~zӫ׬U_4MVdM0Ʋ,,P2ͤ˒,^cLK d~6kJ, m#Yo {@-qtKe ,dJDdYX-v!$…]11|t:F=yw&. B|simյ;ov88g]hԳfmT$ʕ7UUR3[ۺ~ƻFg7! _F\E;F{b_ݸvj5FNԄV}d_>>!_K1փqc]@v?c/nD#ш%^OxdX+Ұ.y?$%%uS4mhGcDUWVU8hD#Ӏc*)eU&A2힊ϏM 9CSwzl Engauge Digitizer - Manual Map Tutorial

    Engauge Digitizer - Manual Map Tutorial


    Engauge Digitizer is limited in its map capabilities. Before digitizing a map, you should review the map constraints.

    Digitizing A Map Image

    The following secion applies a Measure to a map, to get measurements. A Measure is used rather than a Curve, since Curves are drawn as single valued functions by default. However, Measures cannot be exported. If you want to export digitized map data, you will have to use Curves rather than Measures. This should not be a problem, since you can change a Curve's properties from "Single Valued Function" to "Contour". Contour Curves behave just like Measures, while also offering export capability.

    The following steps digitize a map that has a scale bar:

    Engauge Digitizer - Manual Line Graph Tutorial

    Engauge Digitizer - Discretizing