pax_global_header00006660000000000000000000000064131674075770014533gustar00rootroot0000000000000052 comment=1e30160e98e6659c1594b8bd0fcd0f139762d5bc engauge-digitizer-10.4+ds.1/000077500000000000000000000000001316740757700156235ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/.gitignore000066400000000000000000000006721316740757700176200ustar00rootroot00000000000000.DS_store .qmake.stash object_script.* \#* digit-exe-windows-* engauge engauge.log engauge.pro.user engauge.pro.user.markummitchell Makefile* object_script.engauge qrc_* make.exe.stackdump Engauge Digitizer Engauge Digitizer.app Engauge Digitizer.app.dSYM Engauge Digitizer.dmg Engauge Digitizer.pkg engauge.app engauge.dmg engauge.pkg engauge.app.dSYM fftw-3.3.4* log4cpp-1.1.1* log4cpp_null* poppler-qt5* transifex_downloads bin/engauge.ilkengauge-digitizer-10.4+ds.1/.travis.yml000066400000000000000000000036751316740757700177470ustar00rootroot00000000000000dist: trusty language: cpp matrix: include: - os: linux - os: linux env: BUILD_DEBUG="1" - os: osx env: ARCH="x86_64" compiler: "clang" - os: osx env: ARCH="x86_64" BUILD_DEBUG="1" compiler: "clang" before_script: - if [ `uname` = "Linux" ]; then export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start; sleep 3; fi before_install: - if [ `uname` = "Linux" ]; then sudo apt-get update -qq; sudo apt-get install --yes --no-install-recommends qtbase5-dev qttools5-dev qt5-default qttools5-dev-tools qt5-qmake liblog4cpp5-dev libfftw3-dev libqt5sql5-sqlite xvfb; elif [ `uname` = "Darwin" ]; then brew update; brew install homebrew/versions/qt55 fftw log4cpp; export QT5BREWHOME=`brew --prefix homebrew/versions/qt55`; fi script: - if [ `uname` = "Darwin" ]; then export CPPFLAGS="-I$QT5BREWHOME/include"; export LDFLAGS="-L$QT5BREWHOME/lib"; export PATH=$QT5BREWHOME/bin:$PATH; export FFTW_HOME="/usr/local/Cellar/fftw/3.3.6-pl2"; export LOG4CPP_HOME="/usr/local/Cellar/log4cpp/1.1.3"; fi - if [ "$BUILD_DEBUG" = "1" ]; then export BUILD_FLAGS="CONFIG+=debug"; fi - qmake $BUILD_FLAGS engauge.pro #hacks - if [ `uname` = "Darwin" ]; then sed -ibak '/^LIBS/s/-lQt5/-framework Qt/g' Makefile; sed -ibak2 's|-L/usr/local/Cellar|-F/usr/local/Cellar|g' Makefile; sed -ibak3 's|-F/usr/local/Cellar/log4cpp|-L/usr/local/Cellar/log4cpp|g' Makefile; fi - make - cd help && ./build && cd ..; - if [ `uname` = "Darwin" -a "$BUILD_DEBUG" = "1" ]; then cp $FFTW_HOME/lib/lib* src; cp $LOG4CPP_HOME/lib/lib* src; fi #no gui tests on OSX for release version - if [ `uname` != "Darwin" -o "$BUILD_DEBUG" = "1" ]; then cd src && ./build_and_run_all_gui_tests && cd ..; fi #no cli tests on OSX - if [ `uname` = "Linux" ]; then cd src && ./build_and_run_all_cli_tests && cd ..; fi after_success: - file bin/engauge* engauge-digitizer-10.4+ds.1/BUILD000066400000000000000000000212031316740757700164030ustar00rootroot00000000000000This file gives details for building Engauge from source code. ***************************************************************** * * * If you want to use Engauge immediately, and do not need to * * work with the source code, then you should refer to the * * instructions in the INSTALL file. The steps in the INSTALL * * file can take less than a few minutes, but the steps in * * this BUILD file can take hours. * * * ***************************************************************** Windows - Steps to build and run engauge executable: ---------------------------------------------------- These steps build and run, in Microsoft Windows, the standard engauge executable for digitizing data. Note that support for reading PDF files, using the Poppler library, has not been available in recent Engauge releases due to incompatibilities between recent libraries and the many software libraries required by the Poppler library. 1) Install the MinGW version of the Qt Open Source toolkit from http://www.qt.io. Since the default Qt Open Source download supports Microsoft Visual Studio rather than MinGW, careful navigation of the Qt website is required to find, and then download, the Qt installation package that explicitly targets the MinGW compiler. The MinGW compiler provides the correct header files and system functions (unlike Visual Studio). Note that the MinGW version of the Qt Open Source toolkit provides both Qt and MinGW. There is no need to install a standalone version of MinGW. Qt Open Source 5.2.1 and 5.5.1 have been tested with Engauge. Qt Versions 5.1 and older do not offer features, that were added in version 5.2, that are required to build Engauge. HINT - At this point, the MSYS shell is available by clicking on the msys.bat shortcut on the Windows desktop. The MSYS shell is preferred over the Cygwin shell (if you have installed Cygwin earlier). 2) Download and build log4cpp from http://log4cpp.sourceforge.net. Version 1.1 was tested with Engauge. The following minor changes were required for the code to compile: 2a) In config-MinGW32.h, comment out '#define int64_t __int64' to prevent 'long long long is too long for gcc' 2b) In DailyRollingFileAppender.cpp, insert '#include ' 2c) In DailyRollingFileAppender.cpp, replace 'time(X)' by 'time_t(X)' where X is the argument 2d) In DailyRollingFileAppender.cpp, replace 'localtime_s(X,Y)' by 'localtime(Y)' where X and Y are arguments Then following the normal configure, make and make install steps. 3) Download and build fftw from http://www.fftw.org. Version 3.3.4 was tested with Engauge. Then following the normal configure, make and make install steps. 4) Set LOG4CPP_HOME and FFTW_HOME environment variables to point to the installation directories of log4cpp and fftw in the previous steps. 5) Build engauge using either the command line approach, or qtcreator. The command line approach is run from the highest level Engauge directory: > qmake engauge.pro > make Alternately, you can use the qtcreator approach instead: > qtcreator > File / Open / open engauge.pro > Build / BuildAll > Run 6) Build the help file > cd help > build Linux - Steps to build and run engauge executable: -------------------------------------------------- These steps build and run, in Linux, the standard engauge executable for digitizing data. 1) Install open source version 5 of the Qt toolkit. This is probably available for your operating systems as a source tarball, or many packages. If there is a development version of qt5, that should be installed as a minimum --Package(s)-- --Comment-- *qt5-dev* Qt version 5 toolkit for building engauge 2) In a mixed Qt4 and Qt5 environment, you need to make sure that the environment points to the correct Qt version by using qtchooser and/or settings the environment variable QT_SELECT=qt5 3) Install package dependencies using your package manager. Different packages may be substituted, or additional packages added, according to the feedback supplied in step #3. The suggested list of packages for non-Debian and non-Ubuntu distributions is: --Package(s)-- --Comment-- libfftw3-dev For computing fourier transforms. Tested with 3.3.3-7 libjpeg-dev For reading jpeg image files (optional) liblog4cpp-dev For logging. Tested with 1.0.4. Alternately, use log4cpp_null at https://github.com/markummitchell/log4cpp_null libopenjpeg-dev For reading jpeg2000 image files (optional). Compiles with version 2.1.7 but not with version 2.1.3 libpng12-dev For reading png image files (optional) In Debian and Ubuntu distributions, the following packages are required for building Engauge for your own use: --Package(s)-- --Comment-- libfftw3-dev Required for all distributions libjpeg-dev Required for all distributions liblog4cpp5-dev Replaces liblog4cpp-dev that is suggested above. Alternately, use log4cpp_null at https://github.com/markummitchell/log4cpp_null libpng12-dev Required for all distributions libqt5sql5-sqlite qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools Optional packages that are manually downloaded and installed: poppler Works with version 0.44.0 and 0.45.0 4) Run qmake on this file to generate make files. The qmake executable will display what functionality will, and what functionality will not, be included in engauge as a function of the currently installed packages. Run one of these qmake commands in the highest level Engauge directory: > qmake engauge.pro (for release version) or > qmake CONFIG+=debug engauge.pro (for debug version) By default, the release version will be built by qmake. To build a debug version instead, add "CONFIG+=debug" to the qmake command line. 5) Build the executable using the make files from the previous step: > make 6) Generate the help files > ../help/build 7) Run engauge > ../bin/engauge |-----------------------------------------------------------------------------------------------------------| | Known Linux Issues | |-----------------------------------------------------------------------------------------------------------| |Error message: 'Cannot mix incompatible Qt library (version (0x#) with this library (version 0x#)' | |Description: Engauge is trying to use the plugins supplied by the operating system rather than | | the plugins supplied by the current Qt framework. This will not work since the | | two sets of plugins were built with different versions of Qt | |Solution (Kubuntu): Specify the current path of the correct plugins directory (under the root Qt | | directory) as: | | >export QT_PLUGIN_PATH=$QTDIR/plugins | |-----------------------------------------------------------------------------------------------------------| Linux - Steps to build engauge test executables and perform tests --------------------------------------------------------- These steps build and test engauge, in Linux. 1) Verify the standard version of engauge executable can be built and run 2) Run the command-line tests. Every line PASS/FAIL line should say PASS. If no PASS/FAIL lines appear then the build probably failed, in which case the build_and_run_all_cli_tests.log file can be examined to identify the build issues > cd src > ./build_and_run_all_cli_tests 3) Run the graphical user interface tests. > cd src (if not already in that directory) > ./build_and_run_all_gui_tests Steps to generate doxygen documentation --------------------------------------- This generates doxygen documentation 1) Run doxygen > cd src > doxygen 2) Open engauge6/doc/doxygen/html/index.html in your browser Steps to generate a software metrics report ------------------------------------------- This generates doxygen documentation 1) Run cccc > cd src > docccc 2) Open engauge6/doc/cccc/index.html in your browser engauge-digitizer-10.4+ds.1/INSTALL000066400000000000000000000035221316740757700166560ustar00rootroot00000000000000Engauge can be installed in three ways: Easy - Installing a Linux package that is bundled in most versions of Linux. Sample commands are: sudo apt-get install engauge-digitizer (Debian and Ubuntu) sudo yum install engauge-digitizer (Fedora and RedHat) Less Easy - By downloading pre-built binaries for Windows and Linux. The pre-built binaries are available from the engauge6 project on github.com, at: https://github.com/markummitchell/engauge-digitizer/releases *************************************************************************** * * * Special instructions for AppImage releases, which require 'fuse': * * 1) 'sudo apt-get install fuse' * * 2) 'sudo modprobe fuse' * * 3) 'sudo usermod -a -G fuse ' * * 4) Logout and then log back in. These steps are only performed once * * * *************************************************************************** Difficult - By downloading the source code and building Engauge according to the steps in the INSTALL file in the highest level directory. The initial build process can take as little as 15 minutes or as long as several hours, depending on the current compiler configuration, and the installed software packages (such as Qt, and libraries for graphics, fonts and math). WARNING - the source code is updated frequently, and may be less reliable than the releases (which receive more thorough testing) engauge-digitizer-10.4+ds.1/LICENSE000066400000000000000000000354451316740757700166430ustar00rootroot00000000000000 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-10.4+ds.1/README.md000066400000000000000000000014231316740757700171020ustar00rootroot00000000000000Links: ------ [Project page](http://markummitchell.github.io/engauge-digitizer) [![Join the chat at https://gitter.im/markummitchell/engauge-digitizer](https://badges.gitter.im/markummitchell/engauge-digitizer.svg)](https://gitter.im/markummitchell/engauge-digitizer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Travis build Status](https://travis-ci.org/markummitchell/engauge-digitizer.svg?branch=master)](https://travis-ci.org/markummitchell/engauge-digitizer) [![AppVeyor build status](https://ci.appveyor.com/api/projects/status/1o7p8iu8qxq0p7ri/branch/master?svg=true)](https://ci.appveyor.com/project/markummitchell/engauge-digitizer/branch/master) [![DOI](https://zenodo.org/badge/26443394.svg)](https://zenodo.org/badge/latestdoi/26443394) engauge-digitizer-10.4+ds.1/appveyor.yml000066400000000000000000000072361316740757700202230ustar00rootroot00000000000000environment: global: QTDIRS: bearer iconengines imageformats platforms printsupport sqldrivers QTLIBS: Qt5CLucene Qt5Core Qt5Gui Qt5Help Qt5Network Qt5PrintSupport Qt5Sql Qt5Widgets Qt5Xml matrix: - ENGAUGE_RELEASE: 1 BUILD_TYPE: X86 FFTW_VER: 'fftw-3.3.5-dll32' LOG4CPP_VER: 'log4cpp-1.1.2rc5' LOG4CPP_FILE: 'log4cpp-1.1.2rc5.zip' RESULTDIR: engauge-build VCLIBS: MSVCP140.dll VCRUNTIME140.dll - ENGAUGE_CONFIG: "debug" BUILD_TYPE: X86 FFTW_VER: 'fftw-3.3.5-dll32' LOG4CPP_VER: 'log4cpp-1.1.2rc5' LOG4CPP_FILE: 'log4cpp-debug-1.1.2rc5.zip' RESULTDIR: engauge-build-debug VCLIBS: MSVCP140D.dll VCRUNTIME140D.dll UCRTBASED.dll - ENGAUGE_RELEASE: 1 BUILD_TYPE: X64 FFTW_VER: 'fftw-3.3.5-dll64' LOG4CPP_VER: 'log4cpp-x64-1.1.2rc5' LOG4CPP_FILE: 'log4cpp-x64-1.1.2rc5.zip' RESULTDIR: engauge-build-x64 VCLIBS: MSVCP140.dll VCRUNTIME140.dll - ENGAUGE_CONFIG: "debug" BUILD_TYPE: X64 FFTW_VER: 'fftw-3.3.5-dll64' LOG4CPP_VER: 'log4cpp-x64-1.1.2rc5' LOG4CPP_FILE: 'log4cpp-x64-debug-1.1.2rc5.zip' RESULTDIR: engauge-build-x64-debug VCLIBS: MSVCP140D.dll VCRUNTIME140D.dll UCRTBASED.dll install: - C:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\VC\vcvarsall.bat %BUILD_TYPE% - IF %BUILD_TYPE% == X86 (set QTDIR=C:\Qt\5.8\msvc2015) ELSE (set QTDIR=C:\Qt\5.8\msvc2015_64) - set PATH=%PATH%;%QTDIR%\bin - cd %APPVEYOR_BUILD_FOLDER% - 7z x %APPVEYOR_BUILD_FOLDER%\dev\windows\appveyor\%LOG4CPP_FILE% -aoa - mkdir %FFTW_VER% - cd %FFTW_VER% - 7z x %APPVEYOR_BUILD_FOLDER%\dev\windows\appveyor\%FFTW_VER%.zip -aoa - lib /machine:%BUILD_TYPE% /def:libfftw3-3.def - lib /machine:%BUILD_TYPE% /def:libfftw3f-3.def - lib /machine:%BUILD_TYPE% /def:libfftw3l-3.def - mkdir include - mkdir lib - move fftw3.h include - move *dll lib - move *def lib - move *lib lib build_script: - cd %APPVEYOR_BUILD_FOLDER% - set LOG4CPP_HOME=%APPVEYOR_BUILD_FOLDER%\%LOG4CPP_VER% - set FFTW_HOME=%APPVEYOR_BUILD_FOLDER%\%FFTW_VER% - qmake engauge.pro "CONFIG+=%ENGAUGE_CONFIG%" - nmake after_build: - cd %APPVEYOR_BUILD_FOLDER% - mkdir %RESULTDIR% - mkdir %RESULTDIR%\documentation - for %%I in (%QTDIRS%) do mkdir %RESULTDIR%\%%I # - copy %QTDIR%\plugins\platforms\qwindows*.dll engauge-build\platforms - if defined ENGAUGE_RELEASE (for %%I in (%QTDIRS%) do copy %QTDIR%\plugins\%%I\*.dll %RESULTDIR%\%%I) - if defined ENGAUGE_RELEASE (for %%I in (%QTLIBS%) do copy %QTDIR%\bin\%%I.dll %RESULTDIR%) - if defined ENGAUGE_RELEASE (del /S *d.dll) # *d.* also includes PDB files # - if not defined ENGAUGE_RELEASE (for %%I in (%QTDIRS%) do copy %QTDIR%\plugins\%%I\*d.* %RESULTDIR%\%%I) # - if not defined ENGAUGE_RELEASE (for %%I in (%QTLIBS%) do copy %QTDIR%\bin\%%I*d.* %RESULTDIR%) - if not defined ENGAUGE_RELEASE (for %%I in (%QTDIRS%) do copy %QTDIR%\plugins\%%I\*d.dll %RESULTDIR%\%%I) - if not defined ENGAUGE_RELEASE (for %%I in (%QTLIBS%) do copy %QTDIR%\bin\%%I*d.dll %RESULTDIR%) - IF %BUILD_TYPE% == X86 (set VCLIBDIR=%WINDIR%\SysWOW64) ELSE (set VCLIBDIR=%WINDIR%\system32) - for %%I in (%VCLIBS%) do copy %VCLIBDIR%\%%I %RESULTDIR% - copy bin\engauge.exe %RESULTDIR% - copy %LOG4CPP_VER%\lib\log4cpp.dll %RESULTDIR% - copy %FFTW_VER%\lib\libfftw3-3.dll %RESULTDIR% - copy LICENSE %RESULTDIR% - cd %APPVEYOR_BUILD_FOLDER%\help - qcollectiongenerator engauge.qhcp -o engauge.qhc - move engauge.qch ..\%RESULTDIR%\documentation - move engauge.qhc ..\%RESULTDIR%\documentation - cd .. - 7z a %RESULTDIR%.7z %RESULTDIR% artifacts: - path: engauge-build*.7z name: engauge-build-result engauge-digitizer-10.4+ds.1/bin/000077500000000000000000000000001316740757700163735ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/bin/.gitignore000066400000000000000000000002741316740757700203660ustar00rootroot00000000000000*.dll digitizer.ico engauge engauge.exe engauge_error_report.xml engauge_test lib* *.log *.log.* *.pdb Test* bearer iconengines imageformats platforms printsupport sqldrivers translations engauge-digitizer-10.4+ds.1/bin/documentation/000077500000000000000000000000001316740757700212445ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/bin/documentation/.gitignore000066400000000000000000000000121316740757700232250ustar00rootroot00000000000000engauge.* engauge-digitizer-10.4+ds.1/contrib/000077500000000000000000000000001316740757700172635ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/contrib/autohotkey/000077500000000000000000000000001316740757700214575ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/contrib/autohotkey/script_for_version_6000066400000000000000000000013511316740757700255460ustar00rootroot00000000000000; Autohotkey script for version 6 of Engauge ; Copyright (C) 2016 np-8 ; Features: ; Zoom in/out with Ctrl+Mouse Wheel ; WASD keys for moving in the window ; Q/E for zoom in/out ; Use 1,2,3,4,5 & 6 to select tools instead of Shift-F2, ... etc. `#MaxHotkeysPerInterval 200 #HotkeyInterval 500 #IfWinActive, Engauge Digitizer ; Zoom in and out with control+mouse wheel ^WheelDown::Send {-} ^WheelUp::Send {+} ; WASD-keys for moving in the window ; and Q/E for zooming a::SendInput !{WheelUp} d::SendInput !{WheelDown} w::SendInput {WheelUp} s::SendInput {WheelDown} q::Send {-} e::Send {+} ; Shorcuts for the tools 1::SendInput +{F2} 2::SendInput +{F3} 3::SendInput +{F4} 4::SendInput +{F5} 5::SendInput +{F6} 6::SendInput +{F7}`engauge-digitizer-10.4+ds.1/contrib/python/000077500000000000000000000000001316740757700206045ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/contrib/python/.gitignore000066400000000000000000000000141316740757700225670ustar00rootroot00000000000000__pycache__ engauge-digitizer-10.4+ds.1/contrib/python/CurveFitting.py000077500000000000000000000035621316740757700236000ustar00rootroot00000000000000# Example script for using ParseDig class to extract curves and their points from Engauge DIG file, and apply # curve fitting # # Requirements: # 1) python3 (versus python2) # 2) numpy # 3) DefaultListOrderedDict.py from the Engauge scripts directory # 4) ParseDig.py from the Engauge scripts directory from ParseDig import ParseDig from numpy import poly1d from numpy import polyfit import sys defaultHighestOrder = 3 if len(sys.argv) < 2: print ("Usage: python3 CurveFitting.py []") print ("where:") print (" Version 6 or newer DIG file") print (" Highest order of polynomial to be fit to the data. Default is " + defaultHighestOrder) print ("Example: python3 CurveFitting.py samples/CurveFitting.dig") else: parseDig = ParseDig (sys.argv [1]) highestOrderUser = defaultHighestOrder if len(sys.argv) == 3: highestOrderUser = int (sys.argv [2]) curveNames = parseDig.curveNames() for curveName in curveNames: print () # Show (x,y) points as Nx2 matrix curve = parseDig.curve (curveName) # Show (x,y) points as 2 vectors xVector = [row [0] for row in curve] yVector = [row [1] for row in curve] # Fit linear and higher order polynomials. Highest order is less than number of points to prevent overfitting highestOrderNoOverfit = len (xVector) - 1 for order in range (0, 1 + min (highestOrderUser, highestOrderNoOverfit)): z = polyfit (xVector, yVector, order) p = poly1d (z) rmsError = 0 for i in range (0, len (xVector)): x = xVector [i] y = yVector [i] rmsError += (p (x) - y) * (p (x) - y) print ("Curve '" + curveName + "' with polynomial fit to order " + str (order) + " has rms error " + str (rmsError)) engauge-digitizer-10.4+ds.1/contrib/python/DefaultListOrderedDict.py000066400000000000000000000004101316740757700255020ustar00rootroot00000000000000# Dictionary that maintains key order like OrderedDict, and is able to store lists as values like defaultdict from collections import OrderedDict class DefaultListOrderedDict(OrderedDict): def __missing__(self,k): self[k] = [] return self[k] engauge-digitizer-10.4+ds.1/contrib/python/ExampleParseDig.py000077500000000000000000000017521316740757700242000ustar00rootroot00000000000000# Example script for using ParseDig class to extract curves and their points from Engauge DIG file. This # script can be converted to other uses by replacing the local print statements with new code to export # to a new format # # Requirements: # 1) python3 (versus python2) # 2) numpy # 3) DefaultListOrderedDict.py from the Engauge scripts directory # 4) ParseDig.py from the Engauge scripts directory from ParseDig import ParseDig import sys if len(sys.argv) < 2: print ("Usage: python3 ExampleParseDig.py ") else: parseDig = ParseDig (sys.argv [1]) curveNames = parseDig.curveNames() print ("Curve names = ", curveNames, "\n") for curveName in curveNames: # Show (x,y) points as Nx2 matrix curve = parseDig.curve (curveName) print ("Curve ", "'" + curveName + "'", " = ", curve, "\n"); # Show (x,y) points as 2 vectors x = [row [0] for row in curve] y = [row [1] for row in curve] print ("x=", x, "y=", y) engauge-digitizer-10.4+ds.1/contrib/python/InsertDerivedColumn.py000077500000000000000000000052231316740757700251100ustar00rootroot00000000000000#!/usr/bin/python # # Usage - python insert_derived_column.py # Purpose - This script reads in a table of (longitude,latitude) data points, and then # outputs a set of evenly spaced waypoints through those points assuming a constant # velocity (variable velocityMps) # Installation requirements - 1) sudo apt-get install python # 2) sudo apt-get install python-dev (or python-devel) # 3) sudo pip install numpy from datetime import datetime, timedelta import fileinput import math import numpy as np def is_number(s): try: float(s) return True except ValueError: return False try: import unicodedata unicodedata.numeric(s) return True except (TypeError, ValueError): return False def readFieldsWithCommas(line): return line.replace ("\n", "").split (",") def xyzFromLatLonAlt (latLonAlt): rearth = 6378160 pi = 3.1415926535 radians2degrees = pi / 180.0 lat = latLonAlt [0] * radians2degrees lon = latLonAlt [1] * radians2degrees radius = rearth + latLonAlt [2] x = radius * math.cos (lat) * math.cos (lon) y = radius * math.cos (lat) * math.sin (lon) z = radius * math.sin (lat) return np.array ([x, y, z]) # User inputs altitudeM = 5000 velocityMps = 69 # 69 m/s = 250 km/hr curDateTime = datetime (2015, 1, 1, 0, 0, 0) # Loop through input file lines isFirst = True xyzLast = np.array ([0, 0, 0]) for line in fileinput.input(): fields = readFieldsWithCommas (line) # Skip header which does not have numeric fields if is_number (fields [0]) and is_number (fields [1]): # Convert latitude and longitude to cartesian x,y,z coordinates lat = float (fields [1]) lon = float (fields [0]) latLonAlt = np.array ([lat, lon, altitudeM]) xyz = xyzFromLatLonAlt (latLonAlt) xyzDeltaMag = 0 if isFirst: isFirst = False else: xyzDelta = np.subtract (xyz, xyzLast) xyzDeltaMag = np.linalg.norm (xyzDelta) # Output timestamp = curDateTime.strftime ('"%j %Y %H:%M:%S.%f"') fields.insert (0, timestamp) # Use one of the following lines. The first is for python2, and the second is for python3 print ', '.join (str (x) for x in fields) #print (', '.join (str (x) for x in fields)) # Update for next iteration timeTraveledS = xyzDeltaMag / velocityMps curDateTime = curDateTime + timedelta(seconds = timeTraveledS) xyzLast = xyz engauge-digitizer-10.4+ds.1/contrib/python/ParseDig.py000066400000000000000000000076511316740757700226650ustar00rootroot00000000000000from xml.etree import ElementTree from DefaultListOrderedDict import DefaultListOrderedDict import numpy as np class ParseDig: curves = DefaultListOrderedDict () # Hash table of curve name to lists, with each list consisting of graph points def __init__(self, digFile): with open(digFile, 'rt') as f: tree = ElementTree.parse (f) # (xG1 xG2 xG3) = screen * (m11 m12 m13) # (yG1 yG2 yG3) = screen * (m21 m22 m23) # (1 1 1 ) = screen * (m31 m32 m33) # where # screen = (xS1 yS1 1) # (xS2 yS2 1) # (xS3 yS3 1) rowsGraph = 0 rowsScreen = 0 screen = np.empty(shape=(3, 3)) graphX = np.empty(shape=(3, 1)) graphY = np.empty(shape=(3, 1)) graph1 = np.empty(shape=(3, 1)) screenToGraph = np.array([]) for node in tree.iter(): # print (node.tag, '<->', node.attrib) if (node.tag == 'Curve'): curveName = node.attrib.get ('CurveName'); if (curveName == 'Axes'): for nodeAxes in node.iter(): if (nodeAxes.tag == 'Point'): for nodePoint in nodeAxes.iter(): if (nodePoint.tag == 'PositionScreen'): x = float (nodePoint.attrib.get ('X')) y = float (nodePoint.attrib.get ('Y')) screen [rowsScreen] [0] = x screen [rowsScreen] [1] = y screen [rowsScreen] [2] = 1 # print ('Input positionScreenAxes', x, y) rowsScreen = rowsScreen + 1; elif (nodePoint.tag == 'PositionGraph'): x = float (nodePoint.attrib.get ('X')) y = float (nodePoint.attrib.get ('Y')) graphX [rowsGraph] = x; graphY [rowsGraph] = y; graph1 [rowsGraph] = 1; # print ('Input positionGraphAxes', x, y) rowsGraph = rowsGraph + 1; screenToGraph = self.computeAffineTransformation(screen, graphX, graphY, graph1) else: for nodeGraph in node.iter(): if (nodeGraph.tag == 'Point'): for nodePoint in nodeGraph.iter(): if (nodePoint.tag == 'PositionScreen'): x = float (nodePoint.attrib.get ('X')) y = float (nodePoint.attrib.get ('Y')) # print ('Input positionScreen', x, y) vecScreen = np.array ([x, y, 1]) vecGraph = np.dot (screenToGraph, vecScreen) x = vecGraph [0] y = vecGraph [1] # print ('Computed positionGraph', x, y) self.curves [curveName].append ([x, y]); def computeAffineTransformation (self, screen, graphX, graphY, graph1): # Compute screen-to-graph affine transformation from screen and graph points in axes screenInverse = np.linalg.inv (screen) m1 = np.dot (screenInverse, graphX) m2 = np.dot (screenInverse, graphY) m3 = np.dot (screenInverse, graph1) screenToGraph = np.array ([m1.flatten(), m2.flatten(), m3.flatten()]) return screenToGraph def curve (self, curveName): return list (self.curves [curveName]); def curveNames (self): return list (self.curves.keys ()); engauge-digitizer-10.4+ds.1/contrib/python/README000066400000000000000000000015561316740757700214730ustar00rootroot00000000000000CurveFitting.py Python script that reads in a DIG file and performs polynomial curve fitting ExampleParseDig.py Python script that shows how to use ParseDig.py. This script dumps the DIG file specified in the command line. This code can serve as a starting point for other scripts that can process the information into other output formats - like SQL tables and NETCDF. InsertDerivedColumn.py Python script that reads in (longitude,latitude) points and output those points with a timestamp at each point that is computed assuming a constant speed through the points ParseDig.py Python class that reads Engauge Digitizer DIG files, and provides that information through a very simplie application programming interface (API) engauge-digitizer-10.4+ds.1/contrib/python/samples/000077500000000000000000000000001316740757700222505ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/contrib/python/samples/CurveFitting.dig000066400000000000000000001455411316740757700253600ustar00rootroot00000000000000 engauge-digitizer-10.4+ds.1/contrib/python/samples/CurveFittingWithAdditionalPoints.dig000066400000000000000000001633541316740757700314040ustar00rootroot00000000000000 engauge-digitizer-10.4+ds.1/dev/000077500000000000000000000000001316740757700164015ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/dev/.gitignore000066400000000000000000000000611316740757700203660ustar00rootroot00000000000000a.out *.png .~* engauge.pro.user.mmitchell.linux engauge-digitizer-10.4+ds.1/dev/engauge-digitizer.desktop000066400000000000000000000004171316740757700234010ustar00rootroot00000000000000[Desktop Entry] Name=Engauge Digitizer Type=Application Comment=Extracts data points from images of graphs TryExec=engauge Exec=engauge %F MimeType=text/plain; Categories=Education;Math;Science;DataVisualization; Icon=engauge-digitizer Keywords=Analog-Digital Converter; engauge-digitizer-10.4+ds.1/dev/gnome/000077500000000000000000000000001316740757700175065ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/dev/gnome/engauge-digitizer.appdata.xml000066400000000000000000000047251316740757700252540ustar00rootroot00000000000000 engauge-digitizer.desktop CC0 GPL-2.0+ Engauge Digitizer interactively convert a bitmap graph or map into numbers

The Engauge Digitizer tool assists in interactively extracting numbers from images of graphs. Conceptually, it is thus the opposite of a graphing tool that converts data points to graphs. It provides assistance in enhancing the image quality and matching the data points. Engauge Digitizer is used by individuals such as grad students and researchers as well as engineers and employees in large government and commercial organizations for processing single files but also managing databases of thousands of image files.

Features of Engauge Digitizer include:

  • Automatic grid line removal
  • Automatic point and axis matching
  • Automatic curve tracing
  • Image processing for separating important details from background information
  • A wizard providing an interactive tutorial to explain the basic steps
  • Multiple coordinate systems in the same image can be digitized in advanced mode
  • Cubic spline interpolation between points gives more accurate curves with fewer points
  • Handling of cartesian, polar, linear and logarithmic graphs
  • Support for drag-and-drop and copy-and-paste
  • Context-sensitive help, user manual and tutorials explaining every feature
  • Preview windows to give immediate feedback while modifying settings
  • Automated line and point extraction to rapidly digitize data
https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-points-save-as.png https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-axis-point.png https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-map-points.png http://markummitchell.github.io/engauge-digitizer/
engauge-digitizer-10.4+ds.1/dev/gnome/engauge-screenshots/000077500000000000000000000000001316740757700234575ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/dev/gnome/engauge-screenshots/engauge-screenshot-axis-point.png000066400000000000000000062354601316740757700320640ustar00rootroot00000000000000PNG  IHDR,lbKGD pHYs76vtIME  ?D IDATxl  %%%  IDAT&&&@}}ڝc&c     ڝڝ /,aT IDAT    @}}@}}b%b%%LL&  $%    !  $  %$%$ -..%%%   ((( GGGb IDAT%+1 684 #!      *5: 7<0 %!  ***  .-.mmm     !     -2/ $ $  &("# '#  '!   ! %$   #%!%$ $$  !!   """###%%%556445XXX,;;,,,)36  %<4$*( 4;< 8=1   (05 '1*  4>@" 8=1 (37 !-"    78.)-!*& 78.$) $+  ?8% 1" $ %&&...,-.  l8$ IDAT344 %#.! ,&-  !  !-     '+   '%" 445566,-. 000223 %b%c&c#-.   0"+* %  +/#) 455121"##&&'445445ooo  &&&5==&&&\[[ZYZ\[[655EEE665:9: """A@@/..RRQMLL;;;HHG767wvvKKK665:9:""#>>>#"#{zz566NNM??>yxx==>544r IDAT&'&IHH222JJIppp'''XXW! WWVono%%$<ZYYWWVonoBBBBBB+++ppp'''0//A@?VVVYYYfed;;;767ppp---<;;SSSba`/./eee [ZZdccGGGa`_???kjj`_^776'''^]]!!!"!"<;; """ 989EEF`_^776''''''##" 656877  ::9 POOJII `_^776'''766"#"/./666>>>YXX @?@GGG655877???l&&&GFF &&&GFFo IDAT  $$$0//+,+CBB ;::323<<<<<<qqp XXXEEE&&&GFF jjj 444 HGFjjj/./+,+'''..-767 :98jjj [ZZjii VUU ))( 543))) VUT +,+322     +** 433+++vߦ IDATWWVA@?uutNMM===aaa$%%TTSPOO000===aaa344>==WWVA@?////./###FFE ! ))) [ZZWWVA@?211%%$RQR=<<CDC&%&---==<ONN@@? 121$$$---(('=<<iii(((a``tssYYY''' (((] #, IDAT~~~~VUU"""DCB~~iii((('''A IDATl%`u IDATI IDAT Bǜ IDAT //0/cab!! so8cab!!  @}}~:98  (0)p= IDATJJI !!  !! '/($$$ޡHGVS*$## jii  ! !! !! !! !}A@ABA@YYY! !! !! !! !l! !! ! IDAT! !! !BA@GG ## $$*) *UR* 2DDC  E:8! !! !! !! !BA@  *   MMMBA@     000XWP9797  &%&%    4b IDAT}~}~}~}~ rrrIIIiiiIII A@@?110IHH86765ط322  &&!!!<;; ***~}~~}~XXW445443A@@)CCJ  QPPQQQ   $$$---"""~~~~ ! ! \\\ www+++SSSCCCZZZ+++SSS666\\\ ___RSS000 AAA>>>GGG===BBB ! ! A@@ *86  &&$$$555 %%%N[I IDAT ! ! ! ! ~~ ! ! NNNgffpppPOOwvvpppPOOddd###[[[RRR---}}}+++^^^rrr ~~~-,,!!!988 ! ! A@@:;.--5660//766&&&666  ! ! @}} ! ! ~~oonccc GGGOONABAccc GGGOON%%%%%$BAA00/333KJJ++*%%$...<;;EEEjii<<<,,+::9887A@? JTQ)  --,4559 8  ! ! GGG/// :::GGG GGG! ! A@AA@?110""";3 IDAT%%% ! ! @}}@}}! ! ! !  __^ __^ GGG222uutOOOOOO! ! *(110IHH <..-2339 8 +++! ! ! !  998WWW(('998WWW(('-,,666...,+, FFFTTSA@AA@?~A@?777JIH ..-455""!&&% l ##$zzzDDE666'''DDE666'''TTTRRR %%%111AAA^^^FFF _tC IDATA@A@??A@A@??$3"""    ,,, $$$ 111 """ oppvvvSSSaaaDDDDDDDDDDDD,,,,,,vvv555555{{{......GGGGGG  WWW @??@??@??1 $#65*)65>>=555 %%***999$$$$$$ ,,,<<< &&&+++A@A@??     110HGG     * IDAT %%%GGG @??@?? $#0/TQ)*(86<;;;;;HHHbaa(U(%%   jjj  A@A+0/;;;..-//.//.      @?>@?>  4141##"##" y: IDAT  HG繺 #$0/+HG ``_! ``_! @}} ``_``_  ~}  GF0/0/ ! ! ]B5 IDAT      l IDAT F IDAT &'(k/ IDATa IDATlб IDAT IDAT998% IDAT0 B IDATlD IDATʸ! IDAT8j IDAT}~rrrosummmӉ IDAT~  dij l5vH IDAT GMP??????ggggggggg:DG333:DG_ IDATA"J(J(H'  H's~< IDATA"!$&u9!$& .01  .01  .01  .01  .01  ;>?,-- ;>?,-- ;>?m IDAT,-- ;>?,-- ;>?,-- ^^^;>?????>>bbbJJJtß IDATIu@  C٪W 1W7-PH Ӵ/E~},КΡAK'  ˞@R ˻¤ *"ur   [<#tw4EEF^[Zda_abcLNNCCCLKL&)-mS,oC J\'+8# ܺ0x=EDD !(WxrVw 7!81eF6_<֮2vY1qu-MOT !-VU";;;dgh&)-+.1PMLdcd&)-DEF899&)-xvttpn`a`&)-LLL   KK((.y&E@T"%/L'.93Ycz\A_mfQ,`€C     $%%   ')-MKI   z~8::8::   :65YXW $U IDATnnnqqq@@@  ׺zSEHHNOdďJe;ڏ=n3         >>>\\\    #RH!ؽػ9Xң?ub|}0љѻ#GQҜRC#  {}         gjljmo  qqq ,-,++* |e\m7kwve#FH ":rgoj4l{ B2SY"$s.6{fMOMٳ.W~b.'9twtc0\T)dsHfvdN& ,-,++* ,-,++* ,-,o IDAT++* ++* iii'&&787J(!$&mnmnnn"##"#$   $& !$& "        !$&#&!$&  "##"#$ "##"#$ "##"#$ "##"#$  s'''iii'&&787J(!$&nmm>>>>>>           s'''l  i~_ IDAT        2m IDAT[; IDATN IDATli:3 IDAT IDAT; IDAT9;=MOQ(+-Z\^SUV9;=/13dfgF IDATTVW+.0/13OQSy{|8:<(+-CEGyvu@B=?A:=?OQS`^^\[Z"%'OQS|}~"%'FHJDCCwz{JIIwus]`a__^987~&%%RQQ} @?>211 LKJlurqba`"#":::npq|}~WYZDGI=}b``+,+ /.-UWY/24479xyz7:;/13ACE655a_^uwx"%'npqXZ[*,.Z\^vwy,/1GIKACE146vwyEHI/13Y[]/13FHJy{|DBBuwx"%'9;=CEG*-/XZ[+.0`bc69;9;=;>?468tvw/13FHJy{|755 IDATHGF+**!! ^[[rtvVUT|{nqrBAAmpqnlkLKKgjlSQP]\[///BAAZZYdghZYW}{uxxz}~432"!!vtslopsqpxutqtuecb###lji"! ONMyvvXZ\987=<;A@?qsujigoqsxuu##"`bc58:58:KJI RQQ YYX )((==<777#""dbaECC433IHH ba` oml fec**)???lji###YWWMLK><< XWVjig+**RQQ :::877--- &%%GEDzyw *+*??> ][[### !! kjhMLK/0/GEDQQP MLKb`^hff[YY222 fedca`%%%LJIca`###543654010GEDonm---QPOqooliica`NNN\`a CEG*))+*)uss443 <;:~ IDAT$##$## ,,,uts?=>xvt IGG    hfeKOQdba x{{  *)(^]\/0/ACEEDB987urq  @CE765887887y||%%$'&%LPR??>766 XWVXWV|%$$ lji987 NKKddc !!RQP ///rpo =;;WVU kno}ECC987JIINKKIGGHGF;99?>=BBAvts|}~kmn:98  ;:9GFE (('IHGVTTFHJgdc(('IHGWUU988N IDAT^]\JNP<@BqnmCAA/0/PNMSUWUWY'&&<<;8<=ilm:>@lnp*))"#"9=>urqIMOWY[<;:]\[utrJMNdgh876RPPIKMTVXfdc/13<@BADF?CE035/0/vtsYXW1//)))mkjPRTikl-,,8<>@CEjgfLKKnlk;;;DCBQUVNQRHGF[]_GKM fdcCCBwts}379MPQ0//XVU;;;DCBQUVNQR "! BFHdfhedc???ljh432^ac,/1aceTSQiii&&&787J(NQS_acb`^???ccbs'''GGF&%% }|!"!olk010!!!R+ IDAT!"!!"!\[[gggl  IDATosurrr W& IDATggggggr IDATgggggg IDATggglq3 IDATggg^^^ggg 1% W/ HJLfG IDAT qF-#|Y0gggHJL?@@qF&W;Xggg&%%ggg/& IDAT]_agggI IDAT[ZY DDD$$$ FFFZZZ _^]ggg111 QQQ222XXX@@@iiiyyy?>=ggggggl553NNN444WWW;;;ZZZk IDAT.--ggg! !uuu000BBB000##" }}}TTT ggg  IDAT BFHggg$$$433+++KKK @@@+++766 ggg:98bbbqqq777vvvddd===uwxZZZ```987CFG.01ggggggKKJ+ IDAT sss0// NNN@@@ LKKZYXttttttNNNNNNjii gggmkj~|{CFG.02P IDATggg l1Ss IDAT1CFG.02ggg % |}& "$%ggg W/X1& V.ggg&%%|` IDATZ0ggggggi5 IDATggggggggg刞 IDATgggl IDATggggggggg IDATgggggg5 IDATgggggg  IDATgggggglcT IDATgggggg%x IDATgggggggggJn IDAT1% b9 $%$ggggggK IDAT kAd:  DFH%%%gggR8T9;<<<>>ggglu; IDATgggggggggUWX011{xwqxA IDATgggwy{  !!z|~ddd&&&zzzggggggTVW\^`(((c IDATNKHOKI/00svw??@334IIIyyy ---WVVgffAAA)((988SSSYYY)((???ggg())?;8D@>#$%877PRTJII$##gggabb455gff555 ]\\|||GGG\\\gggUQNdgh~|cddlll UUTEDCJKKfed@@@zzzhhhhhhƷ IDATvrphhh9<<9;;fij#$$@BC?>=vwwmllKLLlPJHJMNjfdmheSUWICADFG A@@ddc@AB>?@(((`__]]\jjjiiiiiiU IDATIKLrnm*%#uqoNQSFIJ\]]^_`OPQBCCVUU$$$888*))WWXsst kkk KLLKLL,--fggfgg123lll u IDATooo qqq,  } IDAT,sss& lB((  KNN xxxf=#, ' d$())l< IDAT IDAT|||wwws IDATmmmeee.Kl IDAT^^^JJJl??? IDAT333 IDAT) IDAT  IDAT%  l 333333khS IDAT ??? JJJ))*P;5< IDATUUU^^^^^^ ))*moommmE IDATmmmrrr rqowww))*|||Y IDAT|||l~|~~|~~~~~~37Y IDATggg{{{{{{xxxggguuuE1 IDATqqqgggoon)T IDATooonnnlll  IDATjjjliii IDATiiihhh𭦯 IDAThhhggg~k IDATgggggghq= IDATgggggglggg* IDATggggggR IDATggggggx IDATggggggY IDATggggggl`a IDATgggggggggܟ IDATgggu IDATggggggggg IDATggglgggob IDATggggggL IDATggggggggg1Q IDATggggggggggggggggggJ IDATgggggggggggglggggggggg! IDATgggggggggggg IDATggggggggggggggggggggggggggg# IDATggg#Y? IDATgggggglggg|I IDATgggggg# IDATgggggg>~ IDATggggggj)7 IDATgggggglc8 IDATgggggggggKΛK IDATgggggg7 IDATgggggg) IDATggglgggR IDATgggggg)E IDATggggggggg M IDATggggggy IDATggglggg#* IDATgggggg* IDATggggggggg' IDATgggggg IDATggggggggglgggggggggIj IDATggggggp3 IDATgggggggggggggggV IDATggggggggggggggggggv1n IDATlgggggggggggg IDATgggggggggoT IDATgggggg8 IDATggggggm IDATggglgggggg:c IDATgggCCD IDATggggggggg_b IDATggggggggggggO IDATggggggggglggggggggg. IDATyHi IDAT+ ..۶.ܹd5 IDAT۶ܹw IDATlm IDAT9A IDATU36 IDAT׸ IDATl`k IDATggggggggg -" IDAT] IDAT/޽/޽޽ >>޽#"* * Y#"k IDAT"BBLLLLLL >>::ggggggggggggggggggggg >>l;;Ӧl??Ӧl??&& ??;;&& ??& IDATggg. IDATiii!! 998ҥ&&,WWҥ&&,WW '''`t IDAT$; IDATl) IDAT< IDAT IDATggg@ggggggggggggggggggggggggggggggggggggggggggggggggҥ0//\WWgggggggggggggggggggggggggggggggggggggggggggggMN IDATggggggggggggggggggggggggl&KK**gggggggE IDATggggggggg&KK\99gggggggggggg99gggggggggggggggggggggggggggvCt IDATggggggggggggggggggggg/P IDATgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggp IDATgggggggggliii 998 '''u-x IDATbj IDAT IDAT{.z IDATlxF IDAT" IDAT IDATP IDATl8U IDAT%I IDATV IDAT  )**)**788i IDAT())$$$())$$$l IDATuuurrrIIIKQd IDATFFF#""333 iii"!!(''‡=wwٳ ;;ɔ>zzXXW445NNNaaa""!%%$554333XW̚8nn 4ff-- $GG.[[\\\ MMM;;;...---555III$$$UUU <<<{{{666DDD TUU%%% AAA>>>www+++SSS,,,ZZZCCC333sss<<<xxx VVV ZYYDCC@AA%%%444$FF 33@ IDAT!!!988000xxx A@@hhhdccoooddd###lll! |{{^^^NNNgffpppPOO***mmmooo+++ZZZfeesss lkk{{{,-- 322!!!9887799 ܹ#FF""&&%HH >>ǐ;;22::ׯ+SSݼ &II ǐ447kkܹ#FF"" #FF ͝--88Т!@@ٳ ;;ٲ 0^^͜882277ܺ..!@@ɔ>zzǐ55(NNݻȒ5ggݼ==44oon::9887 hhg  DDD@@?<<<NMM ===%%%%%$BAA  '(( %%$...ccc GGGOONlll;;:===554FFF221 ===LLK RRQ::9887 ++&JJҥ%II**Ԫ4gg 3ccز߿$FF3cc ׮1``̛&JJ Ҧ99Ԫ*RR$$Ҧ7mm2ccҥ%II**Ԫ4gg 2bb ֬8oo*QQΞ"" >>9pp3cc͜ ݼ6jjҧ 992aaϡ..#EE.[[ز.YYGGG///GGG GGG     :::OOO CCC333    GGG GGG >>˗:: ++!!11-XX !??Ѥ$FF55 ??::    ))&&55''77 ++!!11++00   ??ԫ2cc  77 ../\\<<9966"".. @Ί IDAT OOOOOO 9::  GGG222 __^WXX%%$  iii  OOOOOO//%%ʖ װ   ʖ ..޽'' 11լ00!AA  -WWݻ #DD lTTSKKK*))TTS000[[[332000++*)))-,,666 998WWW(('""! %$$...ZZZ 666!!! %%%221TTS<<ʕ  ,VV+UU    ,VVڶ1`` ɕ۷$$!@@!@@ӧ **   .ZZױ6ii555 CBBKKK222;;</..###UUUTTTRRR %%%##$zzzDDE666''' UUU 666333MML100555***444XXXFFF111 22++**44ܺ)OO$$++00)) IDAT޿##!!++** 5hhر4gg  ߿%II+UU,,*SS.. $$ iii 010$$$010TSS[[[<<<hhh$$$788̚;;++Ȓ 4ffܻ %II 1199&&޾=wwǐ-XX ׯ 77,WWݼ %II ǐ-XX ܻ %II ݽ #DD ̙+UU֯(NNٳ ;;.."CC͜ ??9988۹.."AAɔ>zzǐ-XX 'MMԪ6jjӨ %HH  '''iii/00$$$/00GGG///;<<$$$788͜껌#|~$ʑ̣(%' ڴ'('\]]KKKlnnsttnnn~~~ڵ %%% ި.Qov\2Ш 8^|uHڟu}2XttW) nmV@krc6 㽚'Ftd, ޷?bwlH%IyLlEIeQ=Nڱ .Qy}XVQ\6uU/|uuQ=Jjj$kH5YtsR( 齒@r0 紈aFͼf75hg UFFxo!k, Їdf%̀b%[ɞB|o2 ơ">hm: 轕 "R_ ٯ32:$ǯ;<< 񁁁 ňwxxHHH YVU䦨 >>>bbbJJJDP꼋VƸ/#\ȹ<㦖    ٠/}Ⱦ] ՞CƸ3ٚQ>   ʕDżD  CԠB   #lԸ7 JiFଃ,}ýH+«x1 ׭8mH !'688/    ఛ mιl0 㯃kƮt֥%ȳ\%6V_?0S-B_V4EEGwxx}~~~~~󆇇ⅆ_`aLNNCCCLKLxUNLMNLMTn "R^)͹i}T  *PFݻC|l5  ޽EtZ"1``! ׶ U_+ĔuKw21rd/!Yj0 ԱNb(  7pO   ½.wuD  ٺJognF<;>>\\\$$$  8Iܣ &6ް"L9#Q@~~ǿȯygxB +M.믛!ؽϢ8{`FJƁ|ĸ#4轑5U+䪣+U6ʛ6'ǩ$BB ̜ !  ops      NOOTVV qqq ,-,++* ʆfIdSuwc 6%e|Myn[/\ Zntk 1Y.vg{h %rxxp %U^  ٔka':Of9 ?we5:rgoj4lpܹnHTg^zyeH|k0 @r{qe *ZB  7{Jrwe$FN Ü{Bo@fwyo` 㻓 %Mt1 Ba IDAT ,-,++* ,-,++* ,-,++* ,-,++* }})-/mnmnnn"##"#$ """ # ## hsn$  &"Ԧvo9C !! %'ʙnvX|5 #$   %$  & &  " ! "$ ۵h[ #"##"#$"##"#$"##"#$"##"#$  )-/nmm>>>>>> Ïy :]Vݣ})Kop8јz1Txd)崅} "CizE      )-/     "        IDAT  (_ IDATox IDATfhj046X[]fhjfhjfhjfhjGKM046fhjqonEDC --, KNP=<;fed--, --, KNP--, =AClih퇉WUT[ZYz|}!!!ecbDHI/..yvu򆄃;>@MLK~ MLK~  OMMޓXZ\      LKK"!!(('(('~ WVUfhjsvwfhjmpqDHIDHI322fhjGKM8<>X[]fhjmpqDHIDHI޳fhj=AC=AC=AC046svw==xz|##"pnmÿÿ IHHortPNMMKJɋA@?qsu543211110ortLKJGEDdba~{yxRQPҥ⵷z}~Ĵ432ϩѣ훝:>?:>?:>?usr\ZY:>?:>?:>?beg876987dba :98654_^]mpruss,+*usr\ZYBA@;:9[YY*))^\[534a`^544GFDIMNNQSusr\ZY][Y:99[YXigf %$$:>?:>?:>?JMOqooliiZYX]\ZA@?wutNQS%$$A@?wuttvx=;:QONNQS%$$IHG433pnmб211b``VTSfddfddmopNQS%$$+*)uss,+*A@?wutPSUx{{    IDATXVVxvu ONNhjkJHHBA@NKK\[Z534544+** a_^ 0/.y|| '&&-,,%$$"!!EDCikmXVUEDC%$$"!!10/}IHGVTT54332255410/𙜝%$$"!!HFFWUU񙚜IHGIMO9<>y|}157157157157~moqX[]*))gedSUW7:<-13@DF}('& };>@'''gedSUW7:<TWYADFADFIMO9<>y|}ONMNMM;:9wts}6:y|}SRQ7;=vxyfdc7:<LKJHFGUXYJNP543?CE8<>ljh432^ac48:aceLJJ[^`HLN$$#fdc>@B""!cfhADF(('A IDAT   DCB*.0*.0uxz%$$vyz:98ron*.0   $ IDAT*++r$V IDAT}}&&%)**&%%""h IDAT)**#$#!  mllkZ_^766amZ_^766 =93=93 NDE" |zy- IDAT 489 489LBC;==)(("(*55磡)((,< 51;:9)'*m*ֲ267,/0267,/0766766766766265mkma_^ 766766766766766766766766a_^梠QQQO OI '$*rqo-x|766766766766 IDATa_^66 66󓓈Ұ*-d51 nlk 766766---666kkk"""sssAAAvvvIII---666766766a_^J76OISQQoou߉[ )'&RP766766766766$(*$(*756756:;;zzzzzz756756a_^@44ӰRQPzyw ia--, 222&&&TTTmj877 cbb756756756756+**FFF%)+$(*%)+$(*WWW343VVUa_^*,dont & & 2򈇇)(===LLK--,$$#V3^ IDAT 888%)+%)+%)+%)+  001|||,,-99:++,##$kkl778hgh++,##$kkl001 yyz001WVWnno445ә%%&&%&99:,,-##$**+aab##$++,  amam 蒱 4i520)*+333Z_Z_SP|x<<<.-- #"#CBCާʢ驩'&'    #"#"!!%)+%)+}}766766ɼ kllɼ klldee;;;YZZKJJkllHHH %%%RRR433222kll^__0//STT!""JII777^^^766766a_^01NLJ)*+YYYQNM %$$[ZZ/// @??%%%紵[ZZ ###766766766766###%)+%)+www~~~"""wvuRSTmmlwvuRST>==>>=nml...PPOUTT||{GGF!!!>>=0/.MML110dcctsrѰeedIHG``_]]\a_^%!I>''&##"""!""" 221221665665<;;,-. srsPQR[ZZAAAsrsPQR[ZZAAA`aa ('(---ijk=<<RQQFGHnmm:;<###utt665665mkma_^mkma_^= z+/e 32/.)**988"RP'''211,++""!443JJJ<;;糴RRQ665665665665...987  OQQXYZ@?>  > IDAT;<<265265@?>)((acywOO('wv)((]`afuY3/0 XYYXWW"]`a^\c648:;)((  95/95/  8:;)((  @??HGGmkma_^0  3/'$;SQP]_`yvu ('/((665665mnn>==wwv665665a_^a_^ OO jidp OHh`8<>dbadbazwv*l(ׯ@RPli665665665665654654654654mkm i3ih100dba)((MKJONMONM)654654654654:t| IDATa_^a_^44&& ''f[f[((' :98:98)((yv(('    ,-,㠞bd OOji''㠞655655      !  '''((('''(((  84.84.  ;<<?>= IDAT  }} $$#""  ! "!!b폇 IDAT544@ABx IDAT0X IDAT8 IDAT}}10/%6dd<<v IDAT``\;;9__9 IDATaaaa2 IDATwwa##(('&&vv[FF//bb=% IDAT==OOmmPP<< ~}}dd--WWj˙P IDATww##w((B~~|ͥ//bbn!j IDAT==OO~~zzjj}}dd--WWWWPPBB44" IDATع0EE~~|bb! ~vJ IDAT ~}} $$ 4 IDAT%%~~rr00dd땕PPEEJJ||jj||bb F IDATH--u++oo 0pp |ل 1c0 IDATww''UU ''C==]]+f3 IDATww44__ppgg$$AAWWWW^^FFyyAA}}zz66..5 IDAT//MM,,<<{{W IDAT]]TTFF2++ssFF8++" IDAT;;~aaa22;; aaq/͟(()A IDAT'bb..WWmmZ aaa66 }}66XX+&&K IDATssVV WWPPVV<<22>><<&f IDATorkk\SSO55885f" IDAT99]]tt LL MMn IDATCCFF}} IDATVVQQnntt kkZZ66MM&""Oa IDAT::::&"";;LL22 HH wwahe IDATjjqq\\llM\\YY WW|x IDATPPRR))DD&&))GG22}} IDAT<<??<<==^FFpp^k IDATOOlljjkkjjo II8 IDATo;;]?;; $o IDAT%%77 IDAT}}LL z?eeii GGWW33 IDATKK%%""HH7$$MM7 IDATUUeMMe~~bbii~~ bb;y IDATWW55WWWWMM11((TTII [! IDAT}}ffppSS11SS99 IDATffffjj^^TT%--ooTT%h\2 IDATqqqqZZ}> IDAT..11vvBBxx\\>> BF IDAT44\\>>}}ccUU||00__UU11GUX IDATmm==pp gg++88rryyGG%%j_ IDATFF&䬬RRUUFF"(SSWWPP((BBw͍p IDATrr樨VVIIKKyyWWUU!!%%>!!@T IDAT~~a}} $$dW IDAT%%}}Qrr11ccm+FFII$[[11xj IDATjj((KK]xx##77//zô.~F IDAT$$zz.))kkZZmm \\&kk Pm IDAT++\\z xx }}XQ--[[WWPPmm''ZZ{{G~f IDAT{occ h**wwYY!!t88 ^^p IDATiiOOttNN``[iiaa""??IIE;@ IDATSS  N]]kk--__[ii``BBM ss}       Da##``  __aa==##aaaa$WW.==bojo IDATh66WWUU}}iiii``(uu 66VV!!haaaaaT1))k  1BB G EEzzKKiiph IDAT^^w %%  GG}633AABB?? ``haaaaa++]] ŭjjSOO7haac<<0088AA>>ii``))Siiaaaa%%aaab]+ IDAT``haSS_XX ii``WWWWCFG"#$iiiaaaWWPP2: IDATCFG"#$CFG"#$WWWWY IDAT }}׿ IDATWWPPWWPPr IDAT IDAT` IDAT}} IDAT IDATjI[ IDATӞ IDAT}}K;._ IDAT" IDAT֖{ IDATv( IDAT}}v IDAT IDAT 92 IDATLJ. IDAT}})4~ IDATL! IDAT?fU IDATZ IDAT}}s] IDATn} IDATz^ IDATJ IDAT}}L IDATRP IDATu IDAT" IDATJ2 IDAT}}jKO IDAT  IDATQ IDAT~i IDAT}}y IDAT IDAT{ IDAT#7< IDAT}} IDAT=2e IDAT!~K IDAT! IDAT}}N IDAT| IDATa( IDATr IDAT}}z IDATĊ) IDATؓ: IDAT! IDAT}} 05 IDATiDZ IDAT IDAT IDAT}} IDATLnj IDAT TB IDATn IDAT}}tn IDATF IDATM IDAT10/  M4> IDAT10/}}Zv IDATi$ IDAT[_ IDAT62,[' IDAT62,  }} DFH DFHZ]^;a IDATBDF;==BDF;==''''N IDAT+,,ijjNOO?@@ijjNOOVWW999 zzzAAAQPPVUUBBBPOO988CBBddWWW343xxxIII ¥787<=<WWVUUU000[[n~& IDAT001bab MLLnno%%&(()../!!"^^_(()<<=667001 yyzllmQQRhhi99:54599:,,-|||,,-99:++,##$kklGFG !iij;;<^^_889??@(()<<=667[[\##$RRSedeqpqMMN<<=NNO'&'##$=<<AA22 hhiiiiiiiiiiiiiiiiiiQPP}~~ǻjkkźdee_^^Âlmm ࠠ:;;ɼ􃃃FFFbaa#""z{{ժźIIIrssBAAfggͫ&&&iiiiiiiiiiiiiiiiiipp==--{{cc(( ppAA KK00::11**==-- 0033>>~~ddXX4477**ffzz77&&^^tt ..''www$%%$%%FGG``_]]\{zyqqpeed%%$ffe>==>>=nml554554BBA>>=&&%0/.MML}|{wvu110 uvucbaffeXWV vutRRQefe~~}.-,00/ ``_]]\%%VVFFkkZZ||SSQQ[[JJFFkkZZ''ooWW~~vv##??aa>>xwwvuv vuvTTU/01/01ijk789789\]^ABC:;< 9:;-./IJK  vuv vuv~~33XX<<CC ll vv ??@@00 TT>>MMkknn33XX<<CCXXaa))RR33pp]]zznnEE,,PX IDAT-,+  cddRRRPOOՅooo ζ^^((((((^^((((PP!!""   ((((((66 ]]FF''ccDDTTyy   @@}}}𳴴sstQPP摑SSRPPPDDD JII(('㶷^_^|}~缼=<>={{AAww AAwwjjkkII 99EE__YYX899789VVU}}|;;>[[dd$$xx ]]44ttqqpp\\$$00QQ NN((33   NOP=<;62,NOP )))[]]wvvONNmoo/..dcc =<;Z]^44655    ijk VWVKKJ 655*))%W IDAT$$655655 ,-,  ,-, 655655   10/655655655p IDAT10/655655655655655655655ń IDAT&    L$FUIDAT$A} hLIENDB`engauge-digitizer-10.4+ds.1/dev/gnome/engauge-screenshots/engauge-screenshot-points-save-as.png000066400000000000000000045534331316740757700326430ustar00rootroot00000000000000PNG  IHDR.q^* pHYs76vtIME $Sx@ IDATxo~ )-/      '() #%$ #%$ #%$ #%$ )-/255 IDAT344344344344XYX....00Ӑa\Ӑa\Ӑa\,+,sqr@==qoo+..,+,+..,+,+..,+,+..nmm¨~~τSNLMNLMNLMNLMdߥjNNLMNLMOWfy!I[[L( !I[[L( ӎbh!I[[L( mNLMNLMNLMNLMNXڭfQMNQeZrZrژdg {yymkkeeewww Nɲm' ;ȿ{Gl5Z];5Z]; 5Z];[ʹ;JU) ֢RT  ೞ" ɧ'('\]]KKKlnnsttnnn~~~ڵ %%% Ԛ~6ZsqS' 㽚'Ftd,쿈vbި IDAT #Efzj@ܚh~n{0 ؓfwp*ڱ .Qy}X"լ $Hixg= ,UkH<|: ֌Mpu-Ш 8^|uHیMpu&lQ BjMpncv0|6 լ $Hixg=آ'bQѓ7&޻BTStDpa&mz=\!ݕaPW] 5YtsR( ɞB|n'ݕaPW] ơ P] x*Oox`4潕 "Rb&޷?bwlH14Aǯ;<< 񁁁 ňwxxHHH YVU䦨 >>>bbbJJJ [´<㣑٠/}Ⱦ] >>\\\$$$  "L9//Ԫ +M.믛 -S5yûèy1sq18Iܣ#O~P -S5yû3!ᰊPGğϮGP 轑# FJƁ|ĸ$# GJϚ ! #Q@~~ǿ ops      NOOTVV qqq /..++* |e\L.vg{h E{nua CP(l[xyh Y^*Suwc 6JuXt}f@zmӹ_F"gP9czl1c}I 3 in~nh@qi!![sHvdNg1^zyeH|k+Ü{Bo@[sHvdNg1azye=xx{_|v_$M޻ %Mt1 rxxp %U^  ,-,++* ,-,++* ,-,++* ,-,++* )-/mnmnnn"##"#$ '!  %$&"Ԧvo9C    'ʙnvX|5   #& ## hsn$& &'  %%  $       !    # T IDAT"##"#$"##"#$"##"#$"##"#$o~)-/nmm>>>>>> ݣ})Kop8јz1Txd)Ïy :]V    )-/     "    2(; IDATPb1 'd IDATK)S) p7X[]fhjfhjfhjfhjGKM046fhj$ IDATuA Z2--, KNP=<;fed--, --, KNP--, =AClih퇉WUT[ZYz|}!!!ecbDHI/..yvu򆄃;>@낺MLK~  OMMޓXZ\      LKK"!!(('(('~ WVUK)S) L&j4e2^4GKM8<>fhjmpqDHIDHI322fhjGKM8<>X[]fhjmpqDHIDHI޳fhj=AC=AC=AC046svw==xz|##"pnmÿÿ IHHortPNMMKJɋA@?qsu543211110ortLKJGEDdba~{yxRQPҥ⵷z}~Ĵ432ϩѣ훝* IDATo~G(j5j5j5 # ) E&:>?:>?:>?beg876987dba :98654_^]mpruss,+*usr\ZYBA@;:9[YY*))^\[534a`^544GFDIMNNQSusr\ZY][Y:99[YXigf %$$:>?:>?:>?JMOqooliiZYX]\Z_/A@?wuttvx=;:QONNQS%$$IHG433pnmб211b``VTSfddfddmopNQS%$$+*)uss,+*A@?wutPSUx{{S XVVxvu ONNhjkJHHBA@NKK\[Z534544+** a_^ 0/.y|| '&&-,,q? ! - EDCikmXVUEDC%$$"!!10/}IHGVTT54332255410/𙜝%$$"!!HFFWUUڻ IDAT񙚜IHGs b1k6I$ 157157157157~moqX[]*))gedSUW7:<-13@DF}('& };>@'''gedSUW7:<TWYADFADFIMO9<>y|}ONMNMM;:9wts}6:y|}SRQ7;=vxyfdc7:<LKJHFGUXYJNP543?CE8<>ljh432^ac48:aceLJJ[^`HLN$$#fdcP 'ٰb1>@B""!cfhADF((' DCBs91*.0? IDATuxz%$$vyz:98ron*.0P 'ٰb1,# IDATdedy|}N IDATo~&&%)**&%%$$$888)**#$#000 b IDAT999 III```ppp```pppMMM <<<ՃZ_^766amehg433! "&(&*,a][ ÄUUUeee999uuu+++111jjjGGGQQQ~~~bbbwwwiiiRRRQQQFFFjjjtrrNDE"  489|||OOOPPP߼```OOOQQQQQQHHHJJJ 888XXX[[[(((xxx,< 51;:9&%'k'٦LBC;==267➀* IDAT,/0222WWW\\\ↆ MMMlllooo>>>MMMkkknnnnnnDDD^ab捌 766   aaaRRR||| OI '$*rqo -ܗ766766766766666111iii 󓓈Ұ*-d51 nlk WWWRRRDDD{{{tttwww񮮮gggRPPuiaia߉˒ gfgfw IDAT    $(*$(*$(*$(*756ZZZ<<<%%%+++zzzyyy yyyzzz荍˥ccc$$$###___ccc[[[koRQPzywiaia_-O,O"""TTTgegeAAAQPPGGG---756756756756΢$(*$(*dddddd$$$@@@pppHHHHHHOOOOOO444ttttttQQQQQQ%%%444*,dont & & 2򈇇 '&xxxIII ¥787 ``_M 888%)+%)+%)+%)+amam 蒱 4i520)*+333 d$fd$fMMݙtsbab MLLRRSCCD778hghWVW>>?GGH889212UTU    #"#"!!%)+%)+766U: IDAT01NLJ)*+YYYQNM QPPgggGGGQRROOO\]]777^^^766766766766###%)+%)+o~%!I>=]]\``_]]\$$# ""!RQP ,Z521**+987#    HHHTSS789789789vuv vuv    +*++*+665NG}RQPzxwS'%1NLJ**+TTT%"  ݘ'&-,+``` QQP?@?==<;;;rrs66566566566510/10/y IDAT Ŏ^\[{yx5134NLJWWW! 43}}}~EDE Ŀ++*YXX@??mmnNNMMMLLLK221= z+/e 32/.)**988"MMYYX}}~ 111poncbbjkk>?@:9:LLLuuuxyy///STT !...665665665665...987665>>OI+* hfeXWW"geGGGGGG vvu***8876656656656652112113/'$;SQP]_`yvu &%/'& [ IDATdp OHh`8<>dbadbazwv'k'ٲ@MMge665665665665654100dba)((MKJLKKLKK'654654654654f[f[((' :98:98(''sr&&%   444|||888|||LLLyyyppp6551# IDAT433 ,-,   000ppp``` 888SSS}}};;;qqq000hhh'''(((&%%'&&!    ,,,;;;000ZZZ 655 433"!!MMMfff (((є999,,,eee000:::111***mmmQQQ ***ꕕWWW---MMM333RRRHHH\\\mmmEEE+++<<<>>>+++CCC$$$rrrAAACCCNNNOOOߚhhh采QQQ[[[JJJٓbbb'''OOO===uuu䳳YYYMMMOOOjjjՊ$ IDAT999EEE```999tttMMMUUU[[[*** o~222WWW\\\ MMM$$$lllooojjj>>>MMMkkkPPPnnnTTTWWW jjjOOOfff###PPP ___)))\\\JJJqqq555bbb444mmm222pppݲBBBDDDwww""  !    FFFVVV;;; !!!""" NNN{{{~~~ ###ơ!!!"!!666,,,sss YYYyyyFFFDDD\\\nnn,,,}3 IDATAAAWWWRRR|||GGGDDD888111躺222sssWWWHHH```zzzVVVVVV}}}ZZZ333gggccc999444󺺺RRRRRR"""EEEJJJ{{{^^^'''{{{^^^'''544@ABZZZ<<>>PON```{fW IDAT ΢ IDAT IDAT10/o~__[כ9 IDAT$$$111ddd999 III```HHH IIIfffuuuBBB]]]^^^eeeXXX>>>777222===wwwZZZ(((잞\\\iiiCCC111DDDXXX\\\mmmEEE+++<<<wwwiiiRRR fff111***zzzMMMCCC}}};d/ IDATVVVPPPGGG]]]TTTĞ999XXX[[[TTTwwwVVVYYYXXXnnn΋ mmm\\\JJJnnnDDD,,,,,, aaaRRR||| 111CCC ޲nE IDAT111 CCCCCCvvvTTTccczzz<<<,,,(((ttt{{{tttwww񮮮ggg{{{fff<<< aaapppף&&&```荍ccc$$$###___ccc[[[000%%%&&&***y|}\\\444pppy|}8Ea IDAT10/o~{ IDATT IDAT IDAT111dddtttHHHjjjfffuuuBBBwwwAZ IDATwwwZZZ(((잞\\\iiiCCC111DDDXXX\\\mmmEEE+++<<<555999+++CCCXXX___+++CCC333###ttt ...fffo~VVVPPPGGG]]]TTTĞ999666tttMMMUUURRRdddtttMMMUUUŃ###???xxxXXXnnn΋ mmm\\\JJJ!!!222___XXXmmm222pppԑ===mmm222pppqqq...,,,,,, ooorrrơơ  dddOX IDAT111fffyyy ^^^\\\nnn\\\nnn///vvvTTTccczzz<<<,,,(((tttyyyggg򬬬,,,,,,pppggg򬬬///fff<<< aaapppף&&&```444999FFFeee***!!!FFFeee***BBB""" y|}\\\444pppѹ IDATy|}10/}Ӆ IDAT IDATo~G IDATddd$$$999 III999 III``` iii iiiddd IDAT]]]^^^eee]]]^^^eeeXXX222>>>wwwiiiRRR"""UUU&&&{{{cccwwwiiiRRR fff111***:::ZZZ>>>XXXaaaќ𺺺|||XXX[[[TTTwww>>><<<<<< mmm)))   nnnDDD???===777???#,gz IDAT+++|||ZZZ^^^((((((PPPaaaЦ--- 666=== """>>>111___ 111 777+++===>>>www񮮮gggYYYvvvKKK hhhqqq混www񮮮ggg>>>777<<<'''ccc$$$###___WWWlllGGGmmm~~~>>>??? BBBccc$$$###___ccc[[[???<<<<<<===t+] IDATy|}y|}10/o~'' IDATL IDAT<<<<<<s4 IDAT5"QQ IDAT$$$o~??? :::999 III```YYY ,,,JJJEEE}}}]]]^^^eeeXXXfff럟a]X IDATpppIII===>>>gggMMM333XXXwwwiiiRRR fff111***bbb 555XXXbbbΒYYYMMMTTTĞXXX[[[TTTwww;;;~~~nnnHHH)))AAAoooOOOPPP ΋ mmmnnnDDDTTT&&&,,,bbb]]]$$$sss NNN[[[,,,((((((aaaЦ--- zzzPPPPPPD~ IDATeeewww ⏏YYYDDD ޲111  sss~~~ޗ777&&& HHHzzzVVV,,,(((tttwww񮮮ggguuu톆### JJJ;;;888KKK666TTTZZZ&&&```ccc$$$###___ccc[[[ fff%%%϶y|}yή IDATy|}10/22vv'x IDATo~)-f IDAT< IDAT??? :::DDDJJJEEE}}} IDATpppIII===>>>gggMMM333XXXAAAaaa'''bbbΒYYYMMMTTTĞVVVVVVaaa>>>nnnHHH)))AAAoooOOOPPP ΋ mmmPPP"""///,,,fq* IDATbbb]]]$$$sss NNN[[[,,,((((((DDDVVV@@@eeefffwww YYYyyyFFFDDD 333999___o~~~~ޗ777&&& HHHzzzVVV,,,(((tttAAAtttttt JJJ;;;888KKK666TTTZZZ&&&```___lll荍荍˥3;x IDATy|}y|} 10/, IDATqq@@@@!!__b IDATqyK  'uMMm 9: IDATRPPUffXddo~c1- cdd^.& kN+G(kA$a6& H$uA Z27$ IDAT^^^޴P-uA 6L*# e9x낺a[[wB! ql<0 fO,G'  s@?$Q-E&+ X0 e2Vp=J)D&U/޹g3E& OdYY].Q-T/Y6e- R(Mp?R R)7i{G(k'  82^fVVwC!r? W IDAT{ܗT);!J)hb6 Y2g8 j5IG(>"giSS     % k<pmQQT. c7F'qQQn>{|\3) P,H(i;  c6P,S.  C%|E"n IDATsNN}E"}E"V҅J$J%X1tA stA b0i4IB%B%Z2`5uA M&l5zK)K)AwJJP 'Q->"qُ`{GG 10/{ GG IDATc::W22M**o~LLM **p1> IDAT9''`y|}<<<9/<<<17>>)E|.S. IDAT""@))J 11T?` IDATB99ll` $$$LL{x000XXX999 III```ppp >>>owww hhh]]]^^^eeeXXX^^^%%%UUUI ! IDATdd###YYY111***\\\mmmEEE+++<<<QQQ wwwiiiRRR fff111***jjj&&&uuu(((XXX[[[(((xxx llXXo~ooonnn\\\JJJnnnDDD XX IDATXXX aaaRRR||| NNN -$111   ,-66$tttwww񮮮ggg?LL {{{111荍˥ccc$$$###___ccc[[[2x IDATUff y|}y|}p{{10/aas II_7 IDAT@44,%"",,7@NN7TM IDAT<<<Wgg<<<pyyr``o~ r GGS IDAT P GG03..22LJJ IDAT HHH$$$mmnnmm000HHH666kkk 999 III```HHH III&&&MMM]]]^^^eeeXXX>>>777222===J JJmmmPPP{{{@@@HHHmmmQQQ wwwiiiRRR fff IDAT111***zzzMMMCCC}}}66.7..GG222***888XXX[[[(((xxxYYYfffZZ]mmm vvv[[[nnnDDDQQQUUU 444&&&ZZZaaaRRR||| kki IDAT 111 CCCEEEHxxx444JJJ333888qqqLLL <<<hhh)Kfff 222]]]sss222"""]]]yyyzzzccc$$$###___ccc[[[000%%%((("")7o~y|}:::]]]y|}HVN IDATW 10/'''FFW 777777ttjjF IDAThh//CFGuu kPON__[iio⚌ IDATFFJCFGBB''LLMYYVVRli IDATCFGub JJjPػ o~ * IDAT%%(//@@8ccYNNtW}}IC IDATOON774bkbHE IDAT77NC''LL4ޥ IDATbbs33E;;224__gg=o~* IDAT գm**+ UUZZ 8&&ӏcc C IDATUUYYqq&&JJ= __==xxG! IDATQQ''!!;nnyyGG!!;漼u[Qt IDAT=[Qss 2ee22277vo~ާ IDATz%::11-!!n 99??,,Fh I IDAT--5q--5賳a7+a5N IDATtt+Fbdd{BB=nf( tM IDATMMzYz611NNZZ0gxo~ IDAT CCtt__$$@__Ecc)~~mm)vv / IDAT3ww [[ssgg37MAr IDAT]]II:))+JdJm9} IDAT>>ll +//[Kddqrr99J]= IDATo~EE!n aaEE!:o ))2 IDATEE\\0 yzD %HYX IDAT[,/hh|8젠?((bccY+ IDAT;::3욚2u~^m@@--mhh WWO IDATo~oo'..^^ww**$$v IDATbߨ3JJ,!WW||u#lX IDATf}l]r̸C11~~!!w O6GG IDATU/xxx xxa%㙙!+ IDATo~ ffcc `11U? IDAT=11V4VJNNAEE$$9.88 [, IDAT## v m>>Qʧ36YY##º IDAT&&ff66^11 2_c IDAT 9Xzo~>>''u+@ m99 31 IDATtt*j ,\^Q||aa""Aj} IDAT  ttBB}66 `<<""'mMWW U IDATPPHH TT9#DD&&dk3 IDATo~QQ44U"444w"҄/ IDAT2UU..UUUU''."3VU""ׂ((--((6OUԂ,UU((--HH+pk IDATXK,,UUUU)),*KL<++VVUU))ې$$S IDAT33sAA EE0AA>͂11dd.A@?WWJJII77~~Q__oo3E IDATo~++## ()))*#334444WW;*))) 22444444$$WWV L IDAT\\TT ,  ))))0044''8  %%))))))))(( ++ 44))))$$ss55"" &&mml/S IDATrrw&&< PPGG-\6 IDATii1}!!\\!!kkqq IDATkko~1/$ IDATLR IDATT IDATG IDATo~nnssM.8 IDAT''__BBAAxxxx+# IDATxx ~~xx3QN__[10/ vv{ IDAT__[HHOOHHOO10/{z IDATo~Pm IDAT$l IDATZ IDATl IDATGPo~GGGOOO IDATTTottO ss sstt IDATn IDAT:c IDATo~>D IDAT:~ IDAT$ IDAT IDATo~} IDATCoTI IDATb IDAT62,62,͆= IDAT   DFH DFHZ]^o~BDF;==BDF;==''ϋ IDAT''ADFX[]GKM+,,ijjNOO?@@ijjNOOVWWQUV*.0*.0*.0*.0fhjfhjz|}z|}Eo IDATfhjlihDHIDHI999 zzzAAAQPPVUUBBBPOO988CBByyy~ɖMLK232VVUdeeYYX^__<=<..-WWVUUUnnnMMM=== MMMmmm### ...777 >>> DDDzzz 666qqqlop_bccfguwyTWYRVW=ACADFehivyzJMODHIPSU?CD7:=ACADF]`b7;=?CDfhjX[]7:<<@B;>@LOQ7:<MQR7:?:>?:>?vxyyvu)((543/..#""omlfec**)766dbaECC[YY*))^\[,,+RQP ,+*ca`**)766qoolii///10/<<;876987dba omlfec,,+RQP ,+*omlA??XVU543[YY*))^\[][Y:99MLK><<433A??ZXW PNM jig+**JHH211877{yx]`b;;:CBAwww$%%$%%FGG``_]]\{zyqqpeed%%$ffe>==>>=nml554554BBA>>=&&%0/.MML}|{wvu110 uvucbaffeXWV vutRRQefe~~}.-,00/ ``_]]\(((...LLL--- uuu$$$***mkjGFE ,+* KKJ$##uts?=>xvt б x{{   бKNP*)) IGGxwwNNNvuvz{{ vuv  ΈbaaijkABCoooUTT   vuvz{{ vuv׸'''mmmYYYZZZ```--- ~~~lllTTT$$$FFF%%%EEEigfEDB PNMPNM|}{zNKK\[Z '&&  NKK\[ZƢ@CE765ڪLJIrrs-,+```  cddwvvTTSsst***YZ[>=< ./0rrs KKK333 XXX 888SSSEEE㍐ᮯ=;;JIIꛜNKK VTTHGFհ(''WUUEDCJIIꛜNKKHGFհ(''VTTECC987HGFϵxz|nkj復}}}𳴴sstQPP摑SSRPPPDDD JII(('㶷^_^|}~缼=<>=h8 IDAT,,,...ZZZ!!!...,,,157157157SVXwz{a_^*))sqpwz{<<;8<=urqIMOWY[<;:]\[766<@BCGH8<>@CEjgfSRQ7;=vxy;:9wts}6:?MPR\ZYMQRdgh545ljh432^ac48:aceSRQ7;=vxy~moqX[]*))urqIMOWY[<;:]\[:>?MPR\ZYMQRdgh545;:9wts}6: RPPQTV\_afdc7:<<@BADFZYXYYX899789VVU}}|;;>>///ttt///CCCcccwwwggg###o~)))ߜwvv#"#\\\mmmllllll;;;/// ;;;///ZZZZZZtttttthhh655z IDAT ijk VWVKKJ 000000```655TRRTRR*))655655 ,-,  ,-, 655655A$ IDAT   10/65565565510/6556556556 IDAT655655655655* IDAT,1n9IDAT ܖFIENDB`engauge-digitizer-10.4+ds.1/doc/000077500000000000000000000000001316740757700163705ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/doc/.gitignore000066400000000000000000000000251316740757700203550ustar00rootroot00000000000000cccc doxygen .~lock* engauge-digitizer-10.4+ds.1/doc/Engauge2SoftwareDevelopmentFile.odt000066400000000000000000000543251316740757700252640ustar00rootroot00000000000000PK$%K^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK$%KilThumbnails/thumbnail.pngPNG  IHDR߃rZPLTE###,,,333<<k5(9_~E4Wk !d0vZomgC\F72VJR)ffa >XC"=jig=j{M_S`YO~v2m4PݽN;zjgw򾁇³FD=Lƽaed5,·I$lzVբ+ƤTkcV!4Y$SRZ@ƐiRZ 4VH!>!s| C4il=o{+ 4U۴A#{M{8mR#j"߇:_W`G!߄B>`Q⺧?1NX c ֓yĝOI+ dhUԒiCōk*!iYa ad^oZj:ĂX{9MyWڢxnQ˜pæ`7zQm -4V`Ÿ+[B/z?E_ThT!s;olgw~'<љEbZH'|^,zn:=D)$VVkXk/Ceb8)EPvĥ5x {+{밹R)nRʼnbOj YNγiA%/=cGn}x;9ʊ_2+wZ!y;0N. `R{^Pj /rˬxTk+8N1]UЪl}j1׻D?YcK*eC,B]bI _~Aio- 9{/SRARǠ=F.)&_|!åpY\x#K} !NDwm7D(>KЩJho Np0 \k.֓8m䯋1z$& 0pmqz۳򹳬,y盿xV_aN/ǩl"M` Q6g3Ђ 0XJO0[Z6g3\o:bGIi"Kފ~`f]߽;W.~;l9&d*A)>%)pejɽofNgWpaŗ9Zg1~YGwJga#,NlNjE0ژѹ8? Oq[qcrMR~thCkj1m(r1laZJ\'!Y$Cb-4u޳e!x8$-@p2x͊qr^=A_E#M),yger,.aɓ1n:$*v2\cp,堧yI5^73sԚ/RA^l.<v%}`ae"o6Z@V) r%H1\=w0v?On)6,͋U f@7COUlxPiTN,d)Y63, zkD2'[=&^PU{N[?(x'7_q:+Jo@ Jo'[Uu4Ј~3J4Fbv J @ս 4 |)åKjN!2p1NiSu$0{u@3?jZ RZ6OZq6ҽn]hZ-l+dk6԰*` u 94a]NR5G,a Q'+[ͯRm7q z^ ` ?FIC7&8)j#Sg8@xYwRGLG:{1,<_<,ꦹR sE4*{¹{yuO "O-$`dS 5%nYK*ЎYfzkN4cun:$My(Lc4H9~Czn}1'!Y8 vÁ(z?pfN3,T/JH:K1Ta XO8^-rs[H1ɰ~RjN7U@j8( /:@x;xkk m'i6,`c1 rR0͢Rи1<#z8KK0?Ί6bm3]9 "_|¡86*̥WW?ֽe߲y 4SΟrs[ʹsǢ?p*Z&/6*WۺWEDDo,@o- P{ $Va]E0^vNy`=>_X9y^z0}o/Z}J,vA/g/hmNJ=˞~[!NRђi ďw.^KA*`%\%H dc,>k}0sJ0!:Xd;I>$ᒧwVlMoO+׽?{Kعn!On@ ~ >^"RGr?]~ dK{I<;vȃ!#xNUƋ` hÎĩq6-E VN] Ѣ5 >XNF6ܵcY'${$a~ b .문'?9`B&Q `~!i[`[Yg9/A(!mhlSɲph |<JJ:"B]\Zߘ[9c7zL3 k }6}!68gѿn:INq$ǶmÅw0߬fٱ7<y~ .`֕HSrfČj1UyZ vړi狍Mw~bmF)!d[w1 6$-ZpۆE\' "^4mjSmo] n&)/$]cnw[+\Q vHb?]F#w*X;]ZUv ^D|qe ŵ1cٱ_6)8;lh;Se`s3 0t ai8eơD|-yp>j*}ŏ[c/;\yK=>ɡ5JX/n)[pZUL]MB=b xD-yTJP)(o<{nj@[iZ<9(4dJ}v k'"]6t9ȖHFGC}Ca#I`uɪJJydIzPj<(Bu|GFTP{F` ?bzo[*31}{|_<N`Pc]X`40}`?Ӡl)ېaj9 , UsW32#SځN-ٔp͡rFDBG`SO"čT:p=k]sbk.t\<P`}BHnr^PX@';d#` I1XJ}VmA;1@s z`/Po+)T 7>Ϫ`~'nx*0u21kO>&7|/{.D~Q);wj=;^pkKH@Nf*h_CLjͲGibwvxɒ./m3An Yp@ڎwX5Ē-^ɂsu"_IsARM%\.b`m͋8q}3DrWt91y螈"ˏi_) %Bu*p݀g~}B-vc;Q<WLE-qmJ2Srp^~_ bbbbbbb|=0:6uoqNXm8[:* KsgQC'^,ttN'_.ݺ\p3}gH+s >9ι)}D84񸬄.ƞzNxK9(2B1M3~̞"o(q'`q Ok4-/ʝʠY cAkXnK jNƇʺq"hu ߀( K48)'n[OS'>-\3p78JeTfNjn츿 ]@aG} d.2,gsrɳb_}7C|T1KXdIENDB`PK$%K layout-cachecd`d(e``e`28 ,0F5aPK$%K content.xml}nH|Ek2Ejgk+r!PdHbb0XVyf^aKvRmPNKO=l^Zˌ='?v2scgje xӃ kx\_ ye ێ,73u?c,Y*vʗ%Y|Omzn YoҠ"C >">Pe:i33[K3ČD iY˼ AL;jںAϞ-6nLsjSX&I73D}!Z\ԅ7J͹m1*yء6 lW@RWͻz-1ddR#(tڱH@: cRAaa}zOنC`f{|1EaL'IhD3u]Ƀ6R[7dRA1qG{7ݠbV=٧'oгG>Y]j#, '/|e=\Etg0bcԡ4߷|k؞Gݳ-X14g뻙koeq?UVл $.b0Q`'owdJ2WHW􎧻<@D;!{I'Q^` '5 ; VeRer8 S.H=NcqD LB=(j5pa:DȦI==L5މzV-(kZQ{[Wk 3ai;@g'2nKŧ\-xb1K& pjM$6- .e)o1#RN+'DEmrbu_|&1vOi={3+ yx̫{3gd@F Z]^ lU"mrzq=ͨ,NRp(KyX)6Rɲl2hK%!D1#/B Ƅ;aNG1aNS6dSNM+> f=Gdje/GDj3«Fh6#ciռD|-Q'! 0X{UǀM!AZ:QTYz[ЩoXSE-70zIRDLQ@ViÎ5̶YR #& R:URSHYu,ɕ+ 6_z ":#f+D( "VIPy$i -ۂ+ 6_{ k -ۂ B^lúk4zAuTBۦ("ɦ sMℑ~KbNakw^F:Oymf~ɤ> 7x-G/!u\&5lC(][H, G3`KM!` G+r}9XN/c%bD'ڎGj6̨iZSVJJ9kSi'Ƥsn:ukK`GsR3b ``|3t^(OR`7= f@'WOߛ5y搳{'H<=((bD`ҝ/F s{] 7>-ߕFz}#}jj$:*>3ydkovATqW wQo ·'t/zhhyE#?ZPSnV(#S"wC7_y#𝂤QٺG{In!z`ta su34 YM~LR\}#}KΝ炬l?ݞWⳁ sk@,%UUlPnFܸA. jT(+RXYO$l+JXTJ2-M,W2Zi3'HX'86@O۪m-siV$Yy3|iV&ʛQ6 }66l mFkPc BtLS&L( 6<PGzE$mȱ;e(EKCίlFXIɱJsju n(tǷyYƯr*%^UmZnI>&tHХ_ %1$ׂ}m==*ōHPnLz@u=gRQkGS+V5)Jm[( ,T.Jmk0'm?+zSUjP;gxV+ (sZ^i%TV̴$'k זc-3[ ӷ!$fey1G;Oieyni4lh pհjHkٔì&p}hdI[̧iq-3pt  ݶB_Hpp?T @?>q>q쵭p#ntg5?5wd+\ y o8|0\dD<%Z2mo0AE!wP@Jz ձYK?y=' ̈Z8< &f iQ1D8lR^~7/ p\ @vh9uX W{ } .*~dyC`ZKOtOͶM񶀝LZb`Xcʉ %>"y|dqDzr'N#sa˴ q\nSQWݧlե4guP# x \ p38xO `N[N'eg7a66v09գNBN=31c`Aw;tҡg)=O$l2@C(JK GIO5 ܒX?h Ā)؆]c<ಁ_?#5@_\@\DJ5_?Rh2$%,I~`WH([XyK7s`9{=A|j:~л;bZmz9|BN2u9!Jq ϕ /FUrEӦ`}|l,'z% ]S|H|ó\ԲMkVKۜm)e0G] (~+@#iȱ/$LX0M˅v ڀ٬3ϻp>ȥUvhE ٫[y kSQo (PaP~ht, !Ȧ>G?g2KĶW4F~ 4B/S3( ߂Gf= Du }rב񛌬D YpDiS=_]yA<+Eۣ%yg"'f O x A"UkJ\ڔ(*;>AhoaC+VbMTbV*i+5 2mu{% <ne\WA!ux2Gq#V).y6Iɯ!FK䤦g.#`O)?nbB"ĝ/A=-< Nuu˽7 Ou4^.jV.iiG\pDc[ƫ>헐K[M;Ѭd 3`5CK FFƾ+9=(?*'rQ ;dSBƎ;wG֓doԔa(~G, (|dc1=pSr$gW!S0@&M5u\=1A84oΏ?74aTo{?0-V~I hޡ<<#G?|:{K~aϿ?׌=Y(x"q@p/}C9@/ :&8$Q S; B1q|H>ޟBsI䈮o2"hj< ! CX&G3/_Df߂Pp|vN'VߣK O@ $S dy|z{@m<|>o7>U31&S2 ~1YfZ@opHY89=v^;J祒t\<)K  NOY)_Pt^*''8RI9j I='ՓR8X>=WS"UN4XIT:QjtZ;;O3"ˀwW%'E닢L Zi=i8G| kKG/Dq˹Ms#6r\PH <V{B&uE>R|7?|h#ctu`_Hi].Xϗ/%Gfh|Z)Jgz듣Uc<NdcWlb]7I yh )ʷ^|x3kXPo>u&i 7.2 Do[V]ݼ/6?x޼k|:?O%,oQBd,oó9yzywoH"jF ߽ɆuGNh8 吝c6~V “oq6lyA">".z3 XnX9[*yS&}n?Mb7S ҘBtxYKӛxgFK\k(/rZf]s ЧB(CM#׋Ҁ(<"^(իZQSJbM+4Rv骔kK@-h2bO3׳[_؊ew#2gP.xQʒQ?^5B A ߚl~ړL>}Zk<6Ө {cHX7Ͱ`HOe fʒ[Ŗ;B< M f6\Ũ xRC-Ff=< m۷oD DTH:[ VQ";wX (ˎ(L"\OAܑU7ypgX_^G<@;t}XPKa)j33 X,p6t^;iw;F.QܗY(,Ye7bTYedPDsFS*^m2ΥQ/:LڡV }J0jA8Gy(˱za` b32C ArOFك[ 5"_dSRAB.dfمx9IᒎTlɟjRxK}SeT [ݡ6FD^=<su(J@; 6E{<7&s&˜xՎl hNBzѸfPdf8ZHsL{&|wBP~Z}<49_,LOG)lCXTݎ!ω+xL=X^ d<:>UGBWWt^+zsB6,N[jF[d(W*תZ]){H7K~ߍM܎7tGrIijLYV,Juڭ=/9 Aȷm3L\amn/[?v睼euQ01qQԍwqydzOǍ3rw?7nϷg_}|uFϏ?Ƨw]7.O~&W|G7d[(A`tm˓{c-<}]ܴI8q ET EzK{Nx)rG#!1d< <Qg@!~h*͹ӁvW%XmP@s[sq=:r n&p_EXcn/95Kp"`  ZzAR y;eCX(%Rx˜K="& 5ߵ_D|/y [;p 7\8Qv n]hjs7Cs B8(ŭxmxg7M# |i՘iAYZ}Cɝn?Qjmj:Ry=9,-vocmo!PD^&j^,UE?z<<8Us4P /Abo)jjzߦIJ`3 K+ 2Y=yc^)o^++S r;"$bZ~6~[n^RO Dk %S}aqѲu``1Oy6||Zw)Er֋/1zq%o 0~K^ٰxkb9u8AeCKCNxRkҌ>eh'#({D)!hDZ}~e'ieי6]tyvlE9RIJV\֦^W]UYZGZe[VjXCH7x4C ˔CG|=L45ܓBbN+uʓp n/\ &<>" *V-JMj._$J?ŭԸK3Of.v1<.Km1i Ƶ͂i&Q ]"Xkc=](0؛&/&}4DWFHD"xv7s ~]~Qt>Z^6z``7eJfeC|4D-2I~rPK$~I$&PK$%K styles.xml[Y6~_a(Ⱦɶ>lgz]`&n<DܑE/I>2hdĬ*?3Nhq%q4EJ3R/gV$ŋ"c>/4.X(HąZ 5nQW̮{WXdѲȊٕ+}V8ʊ+KG8r0>Jn@}JE]b$БU㺷G<Фzbnw74seHl6>QS lw,ۂ*e=MSJkUPd<$ÞdOQֈӭ4KFG首I{1\R&jEV3k#y8$ղYyYAB =~$xCʜ 0@DN $L$UVL  ޗIB[zp,ti V%8ZO ǤǤ‘ne Χg$-G3hNv\QXW(qӜ3[<пwoaB,זD)A}5utz_hf_3QIOnx{O":(QF+3 Z]Kx 06#8J"RďO`_ %|e܁ }vhC%=ڰ^XZPh4ǩcbuYa},'5n9eN \s v7rdr1&$R?Lc0N땮lVP\:&π:+q5xuZm_"FTmFʅ(n;;O&&14Ddl{A_uiKdK^h}-v;%r/t_$hi{ex }QrmAxaU·r&oSq(afJz Q? 0:4}7tl |SڔUg/ea2[=woVT)d.9ϴt>[C:S¤vgʵ=ݠRޥ?>U4Ņ~ C,`eٙ%dv«E.]xC.R|ǦkWrkV%6Eg7=ui瘾El,:W^w+V/|b.K}쉛 `smo_SꬂekP]p,#|?nF$DFHif}%x|㑫iJ򼭏4̧UN\usmvVlO/;>zj{K1JQ,WxڐG{͎WOƯjiI ֜'ͭ#)QQ%rîǝ9)%+־.hw"ZllL%:-_U9,^$"g&@/M{Ƙ5dO' W~;:a|Ə[`|0 `|-0ygw<܏-0+/‰-Н/t|~oq2~g O O O r"_P9\YWE_M1ފR!oQ^ɗƦ rgꩱ+Sm,D[^" )H %"a7 f& 饁AH2,뜏OTo7' $il \u F0ok&s(mVTk- N2"33fL0DMw;-׳aEc{i[g>^bPLÄVB^xg(wvql4:oF|8W#'}ԣFS2s8 G?PKM& ?PK$%Kmeta.xmlOo0 `zzHJJu 62&l}_M=7&5J.*ܟ^>r,X߀4^:Uvd.n%QFT rm!{LFrSWcZ0 JWgYrqm A Cʎ 7#)6COvah^Js^wF&z/-1| SM哸h6o_irNbg[~3ֹ >^9gf2 2/O!&QB?fQr v^~?/q5^3̙tC/5xLI ވ2.^mwdiV׵R"maV pT@Rf4(*s{?VPKJPK$%K settings.xmlZQs8~_{ $&LBHiiI`0m&|Z$o%4%B+ob~RE(nƻw"0lpz}uE@; ASZ-]R)TڂŠ:hcbXm,Gb}㭴Nڵfy9rYk\]]ݭE|ّy [uvV7kI9:8^s;Fbk\#ոo,YE4r59R\{3P:ݯ8G VCVpM0ɖfW\PL>`c`:(dY36qze$H DBV0f+~8wg3ou+f;(I DNe1+xpdZ3Sۍw囘Sߴnvq"* g9I72̄U)  ,Qi/*G Z >ƉsClFqWYc>:x;W=qB\;ٕGaFSd}NuVYr `:ʱgsY"JC>GsD5pSJ)*'DWI0M5fi$ _"> uN3]gsc\L]͛h; ɴv\p貊S( bSjï EWELLRAͭÚh&3 (GNPEƓ3dt0X[\|DF@(k;>>rT%iD`nRC*%|'_S|]qciD}u OUhl'FSu6HU*^[솀J<~DoZMvM&KY (R.L#p-v Eۆ@F?NFDO$UJ.E[a},y-u`)wӦdEWi;"]=>oTh5@R^12j@g]N bWki{fȿ+ҳ1-kVRɎSb(++f}C j,LCڹ%ȃiNW=&; VI͊2 W?/PK4<)PK$%KConfigurations2/progressbar/PK$%KConfigurations2/toolbar/PK$%K'Configurations2/accelerator/current.xmlPKPK$%KConfigurations2/images/Bitmaps/PK$%KConfigurations2/popupmenu/PK$%KConfigurations2/menubar/PK$%KConfigurations2/floater/PK$%KConfigurations2/statusbar/PK$%KConfigurations2/toolpanel/PK$%K manifest.rdf͓n05a @layout-cachePK$%K$~I$& content.xmlPK$%KM& ? <styles.xmlPK$%KJFmeta.xmlPK$%K4<) Hsettings.xmlPK$%KOOConfigurations2/progressbar/PK$%KOConfigurations2/toolbar/PK$%K'OConfigurations2/accelerator/current.xmlPK$%KPConfigurations2/images/Bitmaps/PK$%KSPConfigurations2/popupmenu/PK$%KPConfigurations2/menubar/PK$%KPConfigurations2/floater/PK$%KPConfigurations2/statusbar/PK$%K/QConfigurations2/toolpanel/PK$%Kh gQmanifest.rdfPK$%KsXk,RMETA-INF/manifest.xmlPKTengauge-digitizer-10.4+ds.1/doc/EngaugeIForums.ods000066400000000000000000001774101316740757700217710ustar00rootroot00000000000000PK@iEl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK@iEfʉThumbnails/thumbnail.pngPNG  IHDRcIqIDATxwu'>"YY&dUey_@ЎlIЈ#3h3\#QE#ѵG5|U7Y 7"2MH]^^ɓb0y{~? 8' ?OX%zTߩ<aaQ Czޞ~ (Q( [y{;5Df4Z>kn W=:I_ט SVC*IIrj`pG2 uRgnt2΢Qo컬: ZJXfU T*Q ,yZvGXԑK񳧏_|]g`!YhkXfPS)Uvw6,&Ҍsd:]~pӎ>?[$/Oét;1;>HeisqJcnhopKT<o8@>tiui:^ bQ:}*~wG]( v ,#^Fd~)MP z$עʎr̦̀Կ?e^VG "hUT}wtqzBP3p @.)\F%: ...yvK:'S`@(Y=C/$$Vgh^>-.Gjԟ8)g `#)T/Q=/s[GZkäڍTI9~Il6NdFs8ڀtTg%T͢E}d٫߂BLLF>z`D*(JYZڱYd+irEtT)5jֵM(8^'t}-ײr?,T^u Re+T#ui[\x O 9'`H$`\'2y\WҺנuAIYEaBkk;|\ .l66In5f$Z׵ LTX^`)_Ns~pTV)mPA# f=טNSR(9WW4[9XR"f!Kd>[&&ΝslTMgkd%\.{-A;DjڨJɗZc5]e/V>l 'i$jVE$рjޗzrJ ñP -ݟ,?#Q_ws3v T FVOs( C?}t:[>z(>Y lui&νJ4qXߍ7[ڻHkG;ҔlMi]s@a|UŤ6v] (vcmsO||B6{(fhRisby.E7G7™vO{+;GwzD˂O_xKi^e޾H#]-"Bc˻G|zjGgG o8L@ǏJun_ypÓKMO62VґXԙ3l"ͮ<z|\悮Jzێ:fjvٗlu!xatw>8fnb*kSG\ inw8 Pʧ? 2b kG:K)-\ %]fmI`^<{C.ֆ?hrrbmq7x n% h6hF\ Oy nܦ@K=f\ r_) Js( fFE#ьQ.%&GH`kfyˠUnvf~nEhTjHY{M''#h,om9-eex.,<ѻ;AP27yT"XVS|; `L!he&z`8``p/d6- \Uc0˲\y~fjyyYHcx ^f0Eo[~NLy|79 Jlk};d9$ppݻb]*Lm:yr$iDw[ަƮA*wwwc*fձXJc*N?N!!V,S6*[f W^XkjrW7dSUw/$"%C-b +&YƦgs؃5&#˵87jn$c4gKT>5?epcq$: @mo1u=G3 .}A(K]Rc:|b&:?p7u)\%U[k5ފuÇ''2%Q3[T*KN/Zpy1PiJAWXN/C'Zդ:V4MqVd ɐƦ6 "ݻzhi6pvwviz~f  z=}Dl2RgeB?oM?~hm`S!6xftp ӯ3ZZ@_QJcc#pf&1ɓzͷP 57`$\6 ͗XVl6t-*&s0LъJ>**+*6!{=A446aG1]gj]%)jMh{#b.ɨj3tzBa KExh2`-:`FZ<y˜7مpykߌ;`N/?>T{"_0t4Ǔ*f6l Mea-<9!T2 fDX.wvvMD ө910 gD9:5']lP&}豣ѻnPg]8 ]3gx8i>F__&~PN[Km6{6N:d4kӷwJ^v:̮;N*ݾH(@P̑S/y?} |L{z;ll #h?Tҁ%>v F: 㣇e dno_u4* (Fb= aKFii/* | UNPkDÖf1TvT*;'F19 (`r[v*I1 J$_%Zew2Ijlln+ N(Z&Jqe} o-J M[L&ez鵷0OpP}V\*\5:}Scc;j%h68Ψ*2,:"ȹJif~mתv #h%IfJ tX*80D4֭'|r^9LJ_87fִ5{?Z"˿Z,̃ĹN+T\7~xe^KD.9Ʒh38LU]h7vWZe<\VCW|:r╉.?|dmni]mIX+YZDN,/e*b;ڼt۠c)\wakm)5skGlz|hRݕ 'յheO v~zWMInGZwE֌ ̷~ڰFGWAXVlX n\[^8G$*m&]bRT--w BgaZ_X^űjxg֚1;^9w T9ʦd}Wx VF Q{X&^zt1ZؚY.=U=LWvW(^6Xa^O[?z#/@ .yV@j`ܿ7puuK1*dD\i{bA!Io&4(ɶ^B[L,-Fmom?4\OR:+v_W,]< k'ꐔ6u5D \,bqQwtpqh^*`*J6P;jq ;KԀV/dҫ+:0-vZPj7^~a<67mD:QD3Zec}UR f'h\ .TAå(h [gk#kcϊ`B,i;Z&8@`:ܿ{NٱhKeV!$I{pE 7aM4(Д| ئT"* yQ[b=~±ÓbѣEC (*6 L.ҏǠށ!!"/szk!͍J7h&p\>y%MgH*K 1SkÅa|;^T͍0ʰTUVNB5:<}wX}`vx^| l:*J^7P2$:zy- 5X^*(+l\l؜kU?|ƲKi"G5R-}^#nЪc@I Qd O#BcP+AaϯR-Y.D.v?hB 2xXv90r>&NSH CV{g}ni5P^1XD./4 k4g-H4JTzV'.V+!~)KFA.j0p[p{±8NI꼂$0 T(|u>RRTT'"1Z.@+.8AD:)B.4EWJ5Exfâ ҩ܄;2hPq,$حTJ`,URdoq:CR! ;=髲rJ#N/$ԊEoX'TJ9H'U(4\ =9X^*u0|#7QNk0dBJ7!w=T }{d\_NWeHqIkS]NqO_JF/^jVnܞ`}mToZtxR+0Z0\lioM-/믎=&[Ho|MrXn]}1SmQ~p(rW;F\:tfU]8 ln}`!޴pkk =@x=鹉K JK'p'YD 70bL_:}]],"*p.[_{<@4+J3n7Zs˛o~?t%~qtdgŷ Y}g[4 8p-Vms :eF#0[\\4U U*HJ2NNCboRߋ!YXK JZ6Zt]wEm#ryR;I`T^o@B-)2Y&V˼zRgHu nu<)pEU{+f%M N6gS%F ,rpCBtem7gm gNk6 #Ohftt7W8越 ujWʯmIēͥbx`k}'_)bөigL:rdq;?%R 9ddY P:B Z !ǎdE@d8[ଘ&Iq&2ljg+V_fookR:\܊Ou7y I0 ZY͑4j2,xN&E@}9[ xeH s~j=x)z/|k[bIE/W8ٓ/V㦴J?:2JPuPl>ܯ5ه V0,}õ2]GrVB7wnErFHPL(ENK!oX> Ȧ'iutT*=*)#-}GzFgLI@_=rhG[GPRkBl`pX,ʥi Gv:$8+>78% by~FM: Bal+Zȼq4Lpy%#"|P:}n8j0nQ3=`4:&wkAi1ȇ’PNS+UJBTd4##jYyߪ>Ó-]wՒkRY#oˡO^~p"Uֵ-u{Y7tVm}*NvO%ޔ#T[s7Ia mul/ʹF=H\t_YG2|zA]Я:hɃA%w&|mO٠|A(KX}2SVJz Fj:Sjd~/,~ܕo\}vM۫&_tl{_7{>k{j̓@¥(c;t[.~= uOmBv4ϭO~m˿ |~ds* >*P^ U ڊי^Lgֺ LD ʜL|i 14+ϮG*@G8VVTai drɻזZQ*Fc>UTPdw$ۘJ,BctȚ BTPlPXQ4#&ݾ;~Ġ!k#D}pĉ7/oln.\o? ŗ}0<ط$1ozxӯ~+e\=^ijbńd`xR`ſ/_r"3.]kl򬮬L4rƧ csy.M靥P;\%h;3]P'>/:unuꖵc̈qqk~B4d0^xtJje He*/?;=>|xvfJ=3h:v4-ܻbhm5sa c\XF / Ow66G6.n寛::^5{4\b+Q+qT4GsNT49\?̓ǭB6h?yJWOp̕+W<l% e~yͷj0l>`z?[{QP }>/?]o?ԽkW,d䑡O淿ئ?[~Z6Z~lp)Kʠ DF%c}G[[bM.RpTjIDXXSb~7SN_@Xx;Qw{k.ۥHFt2[K;2TTX^a eu"ɣNwٻY7י͞F{qas(@u1]>,NJT`!Q,!k( ~`x 9Z% b4 E(UIQ,4bVx DwCA srD,,錦G4bemk$B!I MҌebVFpT5f0 .'Շh"I=qݨlgeM7N"2$_Ӱ74I6)Xzhtt{m(V$V,Woo'Zb[%m򻡀~;Wr+AґXh'٬C*>h*4a]o0 R._ <︴ZdsXT"&gƑۖzl"5qEgg ZaZҦYCY0+B&"n%%H3-Jg8ip$Er5zB.#ށr$ `}RqEt`:}Zuu-ZFP@FtBFEZC,"nQ,iˮa+Vvu:kߖ7gy8ђNN~NЊDz##c*VڑzЪ/ *oWZ*  l*E5#Ƀ9 x^6Khlo|^$@loj-NCbGp'PP+]WfQ1  o-ߙZ>s`dc]7n9yQe+XƲDdC`X'%6[-RgD Юd&fY 34Z {R, B9+,%%)|&qy$m&kW'FO_ZEʝH|...{[BnIn:WRHѯꂞH1х"8P`$"TD+y~8t`ʊp#| :HrPHH6_ cOFƱb!Gʹ7CⅣ֭ͥ@N`fg4VZ#UEr+Np k-mt2Wf#/ХrYT*pL1,mtdP*Ŏ9>x֣sQ0]Mgsj#XV.U"cx$.ō0)O蔼iPWa5BDY,0)br=\G[$)G}8 x@GC0^`;O#\bԫ̮p+}% 1[S--NN>yP+kۅ|xw{n]XҹeL?Jɧn/R]8r9RB .ڹy:ƨ ZM<{eZgfJ tf$ N}^Ӈ㹉7oZ\NK.ʍǞ޿)Rlˉ K[5h(-[0p;Q2͐d\*tT"ݕx'ϴ1.p{BSӇ74XuSSζ6ӕ$LO)[;qwJS+w-oљg}Od,3rh_%OP;,'rdvC|p7c66͛L*:>2>vKOΨީLК/~t?/OGe`]U~Z;ZHU|s7mnY6W3hQ?xՙ90llDrVX0>_7`ڏ##򐁡D@]fcR[oFO#;os PNO | Q(bV7v}CRRZtYD(˯0*,)`)7:?`*eK{QQw$$ŠB*mw&UW_{Ãk‰%X?Qg\02zd6WU@J׿}{d/Y0J}{xR.7u ip5~$ig`4 ^UQGs^HC_Jb65:lr Zik th\f& Efw𕢣kO|Cp188jYwP꭯|`p]j_| Vt4+"mz&ܢ28O@\k+I$aK 6Q\Ҩc4}n|w@kMFnh/|g6ut$AG&*{mE.P9Fk~k2mtLJU`Jq})R˽(jR980h-I.krj%.R:'h])s0i[qdTJZrX' K)gjOZJL2j5pZ#n(c_JB-ѣrz5:L"ju (zW(p6Sv qW+zAL Fj9Gx U[poGP+a#Y921T21WىEzJ TLa8PBBE[o='R:=-󃔣^T3-Mm]@jTOj5I?㽃H5Z#P30O}#Bzx _]d^RK(VkԾl6RVS྄v78+@rk bUTQiIS/Ajv5ήfv%ʟ^Q<^ZVs,,R?f_t¡Z.S.ٗ sCG\^Et)z zY6yDvCn-e-o@<@{TՁ ~ϱkz:#쿮@CYH # bӡU:ANvGi yu^Cuswbë_s{Zo5^Ռ}?kT:j^]jN6|<:ZaY׎|TITx:0v:R99PA33ڋz ^{FX{gBw2 >UkB\J~Ejg]&Jn`Xuj븚gdWMu\!K3Uf3Qp𔤝uikc%ځɭW 8j?k_CCS­%'Dq/KNE(iTӱTWUOa"o5ӹ"Ϧ팆Bf3Q* _)FDgS-WߪrDtmjl9͍M]H'B*yxct JR) ! l(YyFIF^ q nR," )Mnby^(˸zDvoV dXlIC1%VOlիDh5ɬѤ=T,1 ¢ۮD1ZD4[Zv0v;•roHYg Gw aHK$X̤6Mh,(CXcs7?/'_Z,ΐ|9U4WL*_ɕxAlJH?stCқ3O(i#\xk}736"zhlmmI7#ىB! Uk@@ṅ qlYЫ(%6gx|ۯrnyq -N,qjЉnj8 ZGb}]7 Yb{f>[޴[-  >8_XXT)[n9QZZeDM8fF^nsZ`G?=rꥎ&Gp}FYwuK^Ox`=+O~ЇsޞjM&엿u|,/)U2ݾyJӳ V/TO,&}<ݝy:w['{a=HEc(I뼪ꜻ:==ӓ.,!lhYc:>?>G`R$! !db6`sɩt9T$۲l<tWWwwcTc맗Vɞ>sTj,^#Wg˹ąsgKfVJ'OeH$~zisme_o}Ǧ#Ы/:gƅ3r;JʕB54'IKlK{'n\j{8g?37ѕy :^ס\:ysfXYz]j92{p}c_$F />sL0X-xX+H.O#2u*GGk_gj3I*_ WI8?ѹRVWCs^#NP#H%cWF;L?~̤ڮeG~6S5NdZ~qylX8'q< 6c29h#͂ཟ8R&k@vh\,Vش`YJg8`zsWiFc\:Wj@rrIZ%c\fufzV sqȰ"ܖ$OjrHIJJoI ܤ%RJ>/_,e\cN L$jP,6(Dcza0g&HdUʄ8J֬3)6k@Zv!őXRghTE{dv#|CQd 5(# OR)khPW&$Ǭ>R j=LC/6 qYjK \)caLBXFGkW3 0=Rv0ȬB8Oc.[&*xF M^(]DJ7Xlۉbr\cĤ!}Eh2MJ\6DqY1T09T*Tel]2k,OJMPsqP6e{gDқ`3SSllU+ H7؝^")lD#bt|Ĩ p0`q/?(+ G,RJ8bD_`csU}F|.]I;59JA* MmiJέ6:0wp`4Zh96l[DBDv@sK1$U6<#1wllIgњK8v -7w vm4H`dP6Wh Qe=i]NRh0Xӳs:P T߉hi ?Ux:% >dro32@70?s4?z@ʭoxA4 'I#33qJ yC!oku>svBqO ,]5oƴyw^'iX4`ԣ2m+q=oio[`2ж4:f6ms<ڒݡ!$pN,ed!4L`^ז`ϖ?dQ$Nţda߾K mr_/Y|)*lr9Px84E)N}9Kָv L&F*2@Ji,UP8!a·!D Q8hmmJcpDD^)[FْR̻vsGV dBHF,Gq@*3>>snt~FtrIѬ pwMs0(&S!GS$P bT&/qNX`}qi+1;3 dJu&dZ V:<ǀԱ\P:նgZZ_ح.]5'兛׸ V %r1/-ILW+67|Jr5 e, p<RLǥ:CWr@D{ ýF>G,Piq hAD,*+,q$ʢ0_8{V@DėΞz"@.\*B -&SMC0oF|hO>{vZq @YL| BR>+ :޸ySaYwU{Q94@wTq7 "W -Mkx ,H)6|zCǜfMpm&dgnll^/rCI6W\ԣK{#`1n^YXjE$-]t羱1Tl;~&O)M G~zy U^K Ƙ #-L!Gl5,Dֶ6Y۱`bmM,b`MH Pj|$*g._Uiw~")LH.cgoNܞ_y\K{޸|@-:$t'/; @<uHzXS,g?XdQDxkЙnelRNmwg5d on6 cnЂ'ѹin CJE l a`"Ko|;X(bR6`,V"b4-MPj;WXXYb?}c<+?0 T+e|=p(J G(dB!kޭ* CK|dbemTF_J$T6+dsj3S(5k+(zl8*uXG+J #4ޞfVx Z5dsPKK%o+,4jHS$B#V*D*,I5xn1AUpj |R@n*4$Ž, PB\&XlT|.5;%%EXSVJsFsT:Wd <6:J `QPu"ӕM"<15$G'xn-d|>JR cDsHzUzs!nOo8G{zF**u@Qȍf+97`Z-aRvTZ ٨ukL6k Ol`a%+PM\ j+9@wP.9Yx1}{-ZZS)rX &5QRH>rjcπ25('y82- GR'2E1+G 6m,tl?$%rěla6ꀀ !HDB~e3df& Bt *LJ@cVBa#5Z z3 EF#rcۛWo?Rē[ o5Ē @ҨU|`LC^2j)M(F)U3Hid#IB* G%.<6M|vj>IZU+$ݵ*SRɥSb ń"(-_L5x0VAi"7qƑN m6y"T,,PpzblRᡍw{;cZ#TxF_Y(ou&0|[*G %\2xr?kH#/>8>QH'tܞQ t$%fg y~Bo+X= NƹO LkqVX0~"33e-hߒJ}OMgwf;Rhޗ\FOnXz23#D QͿ$aV+ހcxO[k:Dh!wL!Nog`>f'Re2:a_l&[ >JԲ';+k^Z\{?q?jG22ZKK] >>ݿ|E (F)FKg?48Vl[ۛK+O}_M[kn1飉gif*}w$A!ڑ|J} @x ̙Mzj ?L9|7jY]*d aT{U[\J v>\By,'`ɝݷfPG|\ ?eSjs(f@"U(TфhUP@|szisl6ax2V Iƒ 9~:<M0P*ѴZ! lb}lfXk9HP+2JF-07i @)D4ezC":Mq&G|p@!dq-ܯZH3E:g eA5Yhk& wlyt}l4*mOKTYF K}sC&8>J*lRcKGNDITJF 'qFo˷76A+Er:c# Y*趟%f(N,b.D[ &ˡPF ThZ,JT$Z VJ4Xq\b2R tM8[ŒX$hT+B}ZyVĸ4ዤF6ĄzJ#TY###vwO:JF# l6*CjVb$RWMF3@P(3{@,nqI6x8.$l&/Lv%mJEgrz꧱)ѩ*ţ SЯӲSShvzqxxgBc&:@T>~mE3bqNТU[`FHiPvԣ Fk=CΠ`}G2؞лd%3Hƍb:{2jk.'"ps{[RȞ=cDWӧ6ZZ-S=כ,M O!XtZ5APٮ7 LFKKK8ˋ2i۷/LȔx7.oF3|Jnw&Y~x'hYb~+ +js%aVwo9[fVz=kKzo8}.oӳ|%ѠSǡ 6R. C#&JJׯoSJyś5fZǨ7ޘz/;1;Auji [ 6n yh2K6FFіQbRA9/BL"}yh,вcIgt,]ڸUaM2>cm"~{ϖMsW8k/4 BҵjPxx!TS.E$RYABa:xFM+swpĢ}u4 ٫/[GjXr~!ag.+dvzt+|G?|RLyLH`5tϹ1G2a\K}?yu+ͰʅoE&%3>^(i/кk26=6gchc}u)ez`4w쐃n,/,m2m$54(XXt:$982Zƅ!ʫ/?4ގMFOz5P0R,t֠e[f$B|I'CtrtmR'm*vjRn-~_GsK_*TkGQ" o6mFhTP2ǺUE}dzAmX[ϻ關+ha JڼP;1~7Ij4N2[Mq^WPB JjNXH=^pwGn'\,҈/#4 aznR^]43=z] ;&&Z\\73?>Om7Ņ)@LMXKKKE m_݄?/!e 9DVB^6-&X,J$cc#$H4I>ZؓO3yg?*ABmMMIHW1AgĹHia58<vGn',ZfLȝP Zz[.#RujZ-tc(U*tx.7 (Gk9Ft(v/%HAv8x#ī:䩑F"(*5OED@>lwM B¡!vh9\!- QuA=c~E JEH#dPa׺Uuǜ~pŢy^n;oЌg'$oJ8<4Ti7tc}{jWw]v$Ŷ1N՗C(RC!36=@_y[-ۊ:F y@&qɌNNSjz;g9P80pED(ixAp82E.orf֫eV@gӉb:/FʹT*BB㙒J½r4n,.MǷ"9pr)GlVr\/JnݲzGÏ/=p<VjTg\CRa_|t;DOZe<{&}kk6 haԐ3;l[, LLMd%|&xp|T:IĢdaz4RSC&_¨J0 dPuY`HU`UVzB,>=sFmg;׋G7*}td*b]E㩼Ϻqk~tr" Œ(8> IF99R{r??Vڎ &#EWխ:)BM\+%g>f<-e~.^< M\?{8SXue bO>~ΝW_ygǽ6zF1gUG+2mNέݸ9FkPT.~0s>461__י2˰[Gn_ zFg77&ff+˫dkO< *d՛؁hdf %ǎ+E?~Y-Aƪj~D~!k馨eJoj>M6$E Z$[[]J.>̓ gp([Kaݕ Bz@<¹ 2sL#4Օo36QKB\|JwM[L)Ҡas[߱R>GefQ)Jt|P ;bɢ%qsۯS\)|T- ({T&EtmAhDo)d LlG2F){"wBsmMPwчmlzsW~*Shk_|!RqmŧOPZ:O\{[ }>lap0jhM *S]W(1judt@Ř \*Tg_?Oco#1 H`R?A㓣&rr 19}=@ţaH }s@YTK=U*ljhh $EjMY"nW:E+*_2ij!k4S "Z/ڷR=BvK+b3Ř U&R'v4T:k bJ2һ+Ii")b%MMԜPǭK1th-iZ:J<_G1gi=PGn Sּѕ'2H]x-@78PhwGDGE>I'@зTw>|λ!!a _x+&FrUm4YPYP[X\R_ܣMxji+wV/3)IS0D&A1\l=k7]Hѿu;Qwm͑GMf+z'儷3Ю;N_w߰;s[EHY{JXt:+z XĠ]uhjw2D˰@_eLс>]W;lm[lz x`x}W.Pmgh=ؚ^bHkr!@£Ovpfeؐv~P1>(vY ֙:gw y6 NxIe+O*Iˢ\rsDD|r [Bj4h9$3E?=cN&,obI$Qَ_K@tHֵTz*M5R*~{s{W\6uQ2( Cu^4)[)4M@.b 6G爉Yְ֯\bJA- `6ApsF9(j4mmgxCAh# N؇/3Ok],b^ЧϞ$ŪsHoߠܡ^x~GqIAKj{wbp8acJ gd"SkBDhnaGYsF^ *8AkrͿSπz|X 3="bE!Q"lE }+J7B yWR 7NU_6MIl QMɝ(t˫Wyx=Cg?JEr\"}/ 6:싅ѮLm)Og9sE~Jdcf)K|Fhm58?u<̪LKM bgߙ؍y0MO9~Y@N"$bA%FO΢*M@@Ѓ9X#U =pAh{*%$ltn-%a̤uFuL/*͛Yqx05)QN]i8/xSm(uv=y;0t @LjԳ5k){SjFJUG);gw{,Z&X=ypiބCfjuљORpCA>1@S_xkKeR?5i{&оЭ&=Ju\dz :QF^zp^o_ PKz(7PK@iE content.xmlս{wF/Hf,DJlw=$tt;g2 <$1gGU8mձ$P~u]%eOǣO$4_>w/ϟ"%OŬY'y=yM?#z:ʷ>miWi4I=-6InO= [?w'Uz?΍ç0ڶ̍çe|aE _}ᢠU_o:M>]dTˣ'O[7kiʌ[gGIex4>뤎m!z&]ݔIEMh8: ieueg}θqy:W7%+uwmkfe=Mi>_*ÝA;_iAٝgq6s+^ڍ0‘w QHv]*YǾqۍi^qW&:ӳ2efџnMV:t[k,Φ4#"#tWir/-zyxrčBzz#qWrӢhYf)3~igRyZCЧIfM+: t6(7A/w.Nꮽ}mc7ӿl :r,HF.Y2'˟ƻ#~W)1 ^MFD:Ͷ>xSTi'~zԻq^5INLNb3WqJ~=M!m:Y֘n$=}đ?9?#F|B|<~?||F~6<$i<:1|r1蓓cCGFϞ<$|;&GH'N'y`>7=? 7|Dnz2:}2~HɃӓNI>y@c4~>y@~1ӓG|G;jR,]e]Dq3jzWuZ"D`DlDsꂺYDU3[y4/O$`ziNk#|u2f-}N'*-*5%-4Ŵ QZW2*Η *b2#w 䴀2Á/e˱EYX}4~XkuOZ t m#b4v/ěI)I%3bnkO*/ŢȲ1Qw_q08;l$*D:)M&{]xD<"h3(V`Mee5m)&ljEוMCP#LfO $ 뎫g* :D׫nXrmd\ZO 7i:q&O,rNǻc8.GJJ|Kw>"rߏOɄ' t*MSڍu*6K6̍%ZyB.YSWϣ[X zYNɊU*nɣ{X㓇[cK8z8uSd1Haq~tˆ?MIBgM=-//gNHN@>X QxEč](ݼ!$8 7<:WII?}hv1ci;W$ULYӬIȫחMorT"BH26(섿„R1/7̝M Ot[b ˢӘ[|oYI&h2x L&Ϡ_͔o< {,gM#-!I ˔kfBkk}~uy/sm3lXS$yX+`kBa,sA|(exD3p%;)9mkj£UKQ17#7_N:,ҒLrƦW +-l);W!J.ֳܵCEMsfu![UASl1W`h_Fq>x?ݬ3^(UFaOaٻ}AeY6f%)],92GNtcjg<,њܐ˷)Mi(}n±ۤg]|'뢽HLZK$-(6cVK?Dv՞( g. htcwE.K{*_0^^Lo5Dyț+g*aߤ$^&L刴^+] WЧb1N694wBQ:jUB$q!³0Qie>afoij8{?f>w~&./78<ऻ`pYͫk/HSQv:!r=&_P3̛5R/FѫbM&JiH E&%u]]V=r2'#7X@e5@O+;!.=wCL:;&]b$&)ҫHeO#*ԘqRaSƮU.L*$DX,{eH-& OUXZDȯ bն!&7i+5OAM.oU0{5L/0Giĕk*CCTJd2 y*5Xj)v^$U.؄6,"IJvvd.2vws,:yAypbq/u<6石jIMQFW).N9av'RNŗILiaq;: Ò(uG}'}Wk{h-jۆE6Y>Lh\Pܴؕ4V, ;w,FwYNxXLp7 gY3FjSwE,1 FbNI脱H-:r[ܪ-_|Y DrH.@K ^0YM,,@ /93зcՁ91YgbsZHCP"n\{ZHawuTIh!yq]' u<һKj7FKƳ~M@UHa_M9J4gAV'l3s&MmHv UѸN7x/j{6kmjC}f=EML$VJ3ϣ7eq^Y^72P#^\5K@"*^ zP|T⚮ Zy~).Y#f26X\q&FB赺*_G[\x?x)d]ۉ̲U[8>CMSq_pVHdeʡh@+yRe"ix3bF:pa-Y$TĶ=Ə4}̎?b3tE{DC=hn9XeQL& Vc]T;Bz@"RtJ39*$),$N,-TǦVEnúE t.S"λe5/iD ׉#vړ|U+٥7Jeɢ%AT'*dZ*heL6AzgCt3<OA㭷Ҁx']]E7$~᮳#VtshMKE)*U woiE5 -۔h&=.Ypo[ϰF_\i:~3U^1*~;H=U#6Am`||xtFHb=X %b%]@^%]LTc >QlF1m;Gv098!e\R9hURu6E}\iqo+.hV9(3mJ:K) N0IF[F?E$BђK%M̖Y]Uë5s$#擛,aVҽZ%JEmLl3UJw6n~@ӭ=h" 3}%A֒}Coa^LGaQ#M~h0\uxH@ IlE#cdō5,9"$(B\7kf,KWLY#r2塙˳s9͊Lw\-hY su:[gpP'g*B>P>L)FJB&/_ӹzxFvC[ Gxp`P&*8lMDJ6|6~;\&m0lBR\pEBZS fqc <" >)(Xf~1 aJDk1֤ݑ|1y.9F^oz'>O7谯lYNSЇkWoNŦJ>|t Px! mxLJ7hJVt˙b&nyەizs9XF/N|' 0>%?,[ ٖ:3S*ioʌ=P''ݦbE}m|`K lI_[:9E.ஜw1MSKEzETI :v$ JYO>2- N8QAʰF|Im+;0^I"ێ\ |g0[HNeؒ _"D4@~aкFї5T{݂דbf97g  SuML~iX5kD{Re9,\kY?%- V p. X\$1?Ƙ4d; b(QZ,E(6>-jXbX4ZpإƆ6 o ;VfFyx Θ8 ̖ÞR<8bKl⇞h s|p2 u<ȹzL4xF"6dh#*ĩJr$X{ٜL3:tWk0"oHuE*͛,IUC;U~33] J,yba%CeDâjgH_CoQNo.2Icr*K_9sQ^nɗPxoN~ǾVS%#o8Sg_}<\#jgy8_Ѯ!L/!bi$6#!Yu2&(?XDF8{()\h/R>&i"N[+ Yo>l /%d%J,u+i'ܗAy``v,wE7ZZ6G?=Is stK)J ~N7 Lq)$aLGe[-2wN' $(tG25n&wKk,.C5mg6+`ΡXK;^yd Z>)pbuO2e; B]z#)Z<g?1TR=@QbRV`}xVTwP!5r{\ZSy&JdZK_jb:a`ȶHzhp[ .$pjf;5MW,ٯgd^! 60~`hոf g:67νԄ";}h|~_O:=jĸ3Xop47ngc(4װW"|uT{XBI0R/^.A +4oJ|Dm*%U2mٚ63vC"ň,pX~$0G";@cD`4˔ae'*_Z]#]3]Rh١um3iWLM/拶ŻiRM'Uny FfCr%V䦰M+ؿ9u -{I-A97TGX$<(zW"&򒸠#mP(3h~^hvl*&tq>$.%B,O0Ʌ:(Ţ5oTGKon3gD?MR_HC) 5qdvic2")ʡ*S.VwKy"B9}@*M:爏ER§㽼WgސwXhnahd}*I+Z7E5/IBoTO#5'DWL#QԘ9m8&fTFNip+i|R7AH] 2Dt9=_ -?>+Աί0x ٱ^+yn)`i#|Y0GSPz1@aıᶓuLO9+LVw %{E' t_݋V1nGr[IG c WaT441 (Z!pVH.=ΎHD57Gϛ,5F_V,#:QPhxCl5mX-"fe3K>v:"q& 8S"VoCgXWŊwo ]n1fFeZE%:#$Ƴ%;{QZ^ 0 j;wkFBq С-4{}>+ak12xR2 oSoq(wO.:ɛ4,{Nep#*1hu~[7ȏ;өۊvρNE "yђH؃"g1|cbM pZ1@/o!7T/˞c.3iLAx`6p!~ XdXM݈`g +nΙo&*hE~Hb 9">vJ7 &|1xP&f+tDv^XL,  MrMȵZ H,l\% K3ޢs02tGq pe0xbM+)A 0HԧlH=:J.dVLHpijݷg0:=G$/x+7UKbA R _fva\̢ewh6r,ڐ }jB%}U#%*T&yi> ݢ#6$|n]V!&k5ieF +W*%7mS7 4z @R'%bYpΧ18^?x4+-0݇FLbi$t9(%yWxIi2**v Ah{Z$*Ÿn? Nrt`s;.;T)Sڸ&KbZ)JV_o .NAnf&rA жn}V:R9z uEFL7*BUd2C <,XCSY:r㲠p  q!֍;Bi&/,-ycA=G &D5< P})fc +{c$BաzΑ֔ ,=ړ-@!f)>nB} G9H.v]%䑝Rh::UܕΡA6m>CϨ h9<"/ -l)* XMg_7 Ee"&1-ӊ_j傁žJFXp뜠}ӓsҜ ~WZ 9J/fZ .j|M#XYkY̘By;w M$Hk,(_7Uke\(ZRȒZD/oFj};WQf܇xK@P769ŝzIб%%&W6A>t5o1围Hic"2n*Dc(*pkUsb>Ls#zRuQ[x}KerVUeP bJ:(F0󆧕i:wzJ&#q͌$6S4E\Kç|2Tq]A1):Bgn,'0,P0Nt6ނeO6CY:bwb84#FTk 6LZ60@!v\$_M$.K.gӌ}B K$n~EҴ`e99mB-.:?W늃_}ĚTOw|y?3lPV&#OaJO eɉπ 9D%Q/oA[:,x-iTSɁzEer"+(ҍ-!g ÇN݅ٓ3+]>@&JY6t s)tѤ[ VrM~+k9Х2vعdĕ @^ˢyS)Cu !S E-v'3ȽB 3:kڶ IŒ[o;5L/ ~$\[_}E~Q9[Y 6U]$ԒH-岲wo3򼴫"#WOUrQ N곁A1%  \>{I$u(4SɡaǣU*Pd tZ6OfM/t0ဋqh1)i[Z#e<.c i|MHuM6wŜHYX UJV/jyS)_$Nmk/bk_lŅ4KZn>I":TfT Q+VEawv<¢J(ƞ vEn" 8>l],5L2)YArKq/;v: ?ZH{owSUyfű$ 54h)s6> c٣н1V@q\x-IedJnլlf]Z - e7 Thw*oG2(cx95vO+]nFz!`e2hC<:\-2; @,P[#銚4+6(nϢyŁ{#{$Vz f%8iۻ{5ZRAZ{BWY]b]/r|KOJ>do$"~K WR4[!5Z!E^+ VgG~-I7#XŒ,D< 2A#4:<. y~4)[1ϞOwLcݦLٔpIkBU52ۻZm2Iv '|E-KU+!k&(mlwv)a뎱|mzKs^"Д;H7gdkw(iŖ5sTZ&IMFH۟nmssYe6 HfKVc//¼=36.$1,0[_l$'s\Ƚ1U7,fU,$:PQPQO*ͣ52̫lr;KPVW0Q/?)<"hؚsK]XrFX-N%zY{g h⚕UtGa# R&^wñL4>ܶwrNZoa/,2BHG²v`B"t #&)#f7 HŅ0|}k{hwq1I_ {XQbVRةwB3Uv.'Ik?/tbVKoxAlK="%Lxwࢺ%Fi1pYK6)\f~a:,eZa b;3|] ly.|D E NqCWjS$8ĥƻ`Ps)Ew07 *i/9h|`QE4+"ZP+xmRj'떭JDw0l㹗giQmibqC^.Жi2 LiU8\ _\]"^xtU.:Ǻ9V\oW$VH˽N~"|K 2EV {ѝ4JH^$9+9#B:1T j</̓kI? ^%#i0 n姉?卸dV0m7lɃCS`Y@"MEr{ptkNԯxIE=  ~ v&dt9b.j1*5 -ZU{i3"E ոjCsN% ܲ<bpz1bYNh蜖<$yt 2 c,a*¸ e=bÝfw\fEh8K! ԅVi_T*h}U,c2bfCzG/睺*y lhZܨ]}5؏! [_20:(~Bނ*E#aUxux@ =D#Xglj dA"K_ WYђh7 kshz89p!<7>~5$,͒y,<%CJܣK9w JbW{^#?M F<`Wqv)IQ{'8ZS_T9H(H|\kEbG:3Bz>o IKJIri9kHf^(6egQ.Lg[y4ɂgŁ'w\Ա*瑽Y4휥Ÿ$:6fۙ 'w8L)8r&\=dӕ~kyV-R+++:XA7j峮*[@s^,b޹Vb Ŗt򾷑RMdE`-Hm-V~,V:- )S E[YaZ)iHVL4`4#Sa2ɒlr>ir^jRRB^9L֥&m&`AfU WHuznPK⯣?})oa.'t~,wa]OS iІ,7%R}``1Uj^hS5DM9/,l22(}Ax`4!`CaW LspQtUYh . | %U6T’*dAU6ȕd[=K lu1)T>kJJ17Ơ( :-empEU?.聯AA?$`GlY J?0Valt&]51Aȅ |'gJ  NgtPxqؐc2fֳY]f_DgG5,z'3GP|#ocJ#2ڳ̐Qr:QLDZK`1u{a!.H,tp%ѰM)J[ %:?R^ XE jZҭaҦ#p}X(:h׫Ɨ$O1h>>&Ǥl8$7pB{V xptًA'#i'6Fe|b^"Wtz)F$_Dm^M9#>NCDOmRazbJGeQ8j4=S$ѷMFgsBexvG3 CNJDp{4mqraTښZZ:#8 lNb9gaޜB:;)GqG*h,_#SX^P|y6Z(|`sڇ$j. i3I?_n~0 =^ g؈|x< 'HւGFXaB;Ơ;_khwRhueU/Zj]+HA֟.=L2SE:;2OBIQ!r/%hjGZ8W@'Idڌt˄W-F$&(Yu҃s~Jp&ݽ4v)X,Ѝ A?dI@X8C4 cWΓE 2,'2${EvK@J|7@ʨfaS 6<"U#ɶw~kg>Yw<$r㷂NJ_u@^6 mFyqc&Ӕ`X~RKz@9l\z %A0T2 |O~9m:I09LC}v)K[GR?2W4 0QEHS`ICqWJoϏP/f]5b=1nD+MA؝ȑ@Ұ9txl 417*^FYq9Uhf16`ț[sbq!1|[B`Sm ɬYc"% Kɖ@&&qآ!A%lk'8C6/N &0a4VP jjm5T]anĪݡp6YȎ5QM(T": n/.|D#X$5! \}6.GW"}֭ʐ.0z vV"XG,Yb8קrK+VZQqLı2`TY*C][YB,N`Yإg;eН\f͋&ѱzTw*(|)@ T $p8r=$9ۀ杭䪱ENP9 ŴD_Y1F$Ӣ4e6@ م$2VcfH 7}xQn6ԛq9bn ax傫Dg~C>sm: 2cJf2wA/kKyu3xm 4-T;/g0h #ibA *6 N"fKZgr,*Lpk8j"i%S)MGQP3ᘅٮ^R.Ч_\tLbR$NkMlJkv2\'pD%+Ii:Y=KG;Rd8|jJ~}r("_2d. ƉU>puk^\u[ ɛLtf Y֞^BYm/R. x2DO&8}*kQ܂b5G#j8 ZHL&tq߳_,|@H W$bGrm&, Q@mh<ոb%ՑBD]HO'&s?CPe0J;[䉝ia]9r4xY)XҊfe+l B/S[;/u[l8yG[G9POٓ1_$Md٣Q^~XxȒxt_P!L*y nJ5)-~bqkP_K8sEo,FR^!{]`) 3C\ØEMRM]?-mzjN)+)TR:tX%uU ak.܍pJMk.CGUZs%U*r*#E:{DGbReCyۦL|=8IRIRcT7@Ox;;uV:3 B8# /ߖ(zUKy6zQu!yߑ:d 5Bb5ӏ 2̣!s=C7-XѪzXCzu(kg sL( 4ٙv"HYx,6ۣ^wIon\4b)/Oo6mp>A*\lE3%0-˳K:t4r;z@!W9xf>1sZӜNQO*dR3tc4 N0IBfaìٓ}]pD$:j0M򜛚#*, 60k<~SygrZ@赪[URj]]W=6"N=M<ߞH*p' ;rX*Gu1~̊vL1NZgb#E|L9.#)踽 2d>*D+h٤ĞwwsOUPwk<}7W;D 8:B]+C70a3i@N{sEɅaIRH<.<KAqPqen¯u%Um WDz|#Lj6PdSGQ8i:듽уv<>~|t^sj{>:m&FhvmCdtѸCddGv&6dGZd. PG3/8n )ε̂߮$aJ-k{YřyкEu9/Uu%(!K/s>KyLjfg&g}ء]cæbX 3X-0TvYGm7&VkE|7ZwK1ʊlՒi{rw$<l8|⾘4oMx3 #x 36kE|8T^|Aa!eXJ6$۶z+=p!Yֽo"˽*UdmZZKyR7U'EyT&L7*(x; wycqC-"1*^ɿN&A' /o暁^Mu_\SQc̲d` !CC)ś5ߤɦ .o2Pf֮X Y }+:#d18rVLz`;IDlV]ȻVXC]iN̪[.ƚ98|2}s h5~5y6,RWd\$ҼX ?(ن02,G`WG㠼7Ç ˀopL8Ypץ2j(yy׬ZF_"u0> BJ% Pj{/bK%R;l 4LNGwa u8A׬%nI-Yu@ȫ b&lMDcgH8T gfyxjoS0vY"'rse,=M \"|TnP`t屶,ŒŸu aJ]H_oiҪ]ї9nz{M]> 6ά'M-q]tPPE ~*֬RR$ )/xf#YJsHl5V@ ]uz]qJWylE}L!aZ!"mFGN'g'<:9ppSiq<:2UP'OѤ}Nw89~|F-Nλ[<9ᩜ [c'ƣ[y'ggMO>0'#n1vqj굩F?lAxqe'hqxt~wǴgw8 ֭sc|<:Xΰd4cR)8wn?uug1OƏ8N:w#ť<<!A qKX'C_%v6 %(!D4(;Qj`2o ЁU" 9WiVK-!;TUCq7Qg ^+zbZ%N⾦ 7&%Ne02 Zqf#)vfȸhb%+\\&*f_|~#ˊ s.{3vcθu6n,`oЯ 2 A,Y3R^'K>+~1"BR禋ECUL~yur|/ǽ œ)qn(HO>mwb{[>f"u.,6Γ({'9q ]f;xWa`AKgU`\ Y&s OZr^cVZ?pѕ2a̎1=dt"DyxF1C,aҾoZזV9\#lJni&fmlԑF8y @9>|8 @%ZG|Oq Bem r >v#-!Zo[pJc*ҰlLoZdh%FE‚|{͖@ Tbrڔ(/gA_Xqta)!#407o!/} q)\O]z$ѓeO.fSn >=+%n>RsKu^#Y,' /<2<( Ү+lB874㼺f! ;dv۪#bD#N8?yt:9GGYQ{69x-ۂ\hG/3syKdT"a239qxetkbQ}k IŽ@|2#V)tX 5V!> ~)HzpSZɯ`=C"VC}dxxŽVpiNz,N.i1bKj9tTPDI Zo3ִbḽZ#N*c^x)7EPF>z^Gs;!tikRTӗ~Hd[I{4y|w{Bij5$4,oY̆Ihn}LȘp}eݩ-OHZ bxOG/Y:fc,։*0g#P0Dsl㱹790<ݬ_VbN=R[X'=-cKPd~bG4N U$;,YoO'[RNf#Z&z^`4̓Qt~;#qZ"Oh]1 otle:*و^K*H=Xs_0%vY|J#=qS9x$& >CqX/ՙ$ŎA8(6tūԘq"IsqI21q5Xֽ`t`=A+(]eg&˔Y(bճo0MÎ4ߚdۃO#҃]|C4HN'?!N^& 4xgeԡ_\o~ 0Ċ'Bw,VBUZQI(\8!zE\јiձ g{6üNFt:Y/'7|]Cv2hٓw/x<~)B_|Ҭ@~c "gdA!kYJV:d/9]jKcyL\Y,mTp&m%.{*j2 kĦEK2poΥDW?D;93.7T&<#=.駈O@opqfi#w} 01ҿN&掱>Oݱ*[N"R;ɨwtHq&V%2F,kQta]" IrjIti&A 0~{ȯȺT*aNo*-K!u./Q(zzxu wq|HlVҜ"q]yR4UXʌ-EpMCfW s~ 籑NmQ`&fuC˙s-EgĊ;0`p]~rtv~G5d2: 3,.(E;nVPQꑳ*c3 yUZ7nW ˣ/^vXM\G2V寰̔9NL3"KPѰ7ѳ(}h:c6ǜ> /b!'rL2^&z Ҙ ndQ!`)l$ 4:M: i;MltR+l=nBfP9[&26.r5gȢӺ@mw2mX6j ]'N}}/yTbؓ3 p6hUs-0Ǽ |\Yjn/yjͥŨOcI:v.pyo$KY\Q}>r%OY\* ^U:hp K5A8G(-Y*֥ Fi y"bRqT6p.oWgN \}+s,>j>dTb9Gܷ7"  *Pl; \ /?00dKT٫8ޕb[KG7ơï GIe'8 wt@dLW~~̭ n#JI{/.{TA n<,&OK38X.ߴKj[t0.<=pEgV|~z*r߲yRҔX80)_KA<:2s+6|y5MFX> r"Lh9J%ueAZɨǟsAJu]YөbP ;܍`{9gEwp2!p8O.Mք_IPy'zXEj,79˫6>b.aF<ntlEs O`8r-@9N|{길A`{v .6[Pa ` Tm9Q1^1RO%fx>Ӑk1.4҆ l#U/t@d> nt`͸3O^3/S?S*GɈ!Βp` v5# F-QtbaJ&1;;h)S.{Vk|bl|D2c6t50*@:+ٔ@{J;Rn;k*`ff0: ܉:pF(Y ͒f*+2 *_1"H ʹ`V}.ZF /w, 3ƿ=8_$lJ[L6./<.ѭQSGՊnCͬE5frGgR ">AbjȨ_|͛לKc}ܶ"W$&ڍUVP4qF %i~ZvBr%Sk6P_ WSO6x/+KRp,[bܾIfno VߡTHg8t{~3:GZeR={nO獴Xa4p:&_TbM(Ia.[YSgC'WKu"wQ)͜" e6,bof|P| -ZK MNxwt3ԡ緟_l?Yb pai7ǖ2Y!ﮍTȣu9RX63zzN,?Ld͒G=#D6ޛ WBgjTF=u! pb: ξ,J02ÅC>CRT<'VPxC+o:i=0xN}f{F]ίx8W|58B apnbtPݠˣfEMMds3 _d]4Yj ǾYU*Rw&׼vZA(R=uV,'W4iq3\C<>46rUեj鋎|> bZFjX&N}YuOgo'zCgB6C_VVm{PKL"h|PK@iEmeta.xmlN0)"6%Vj$ttVHଫ+!q*盙FSZ5AX锶5/_vOOZWNv-ؘ,urmZA,;|Zup=ʗC~v~gqu }-A)Eq.dyhH$6'>H[6cn; s,x>t] ]1kF7HPɃP_3yҵ@0>𻐻*$9 H(?`-o1r5a"k 'aS *\S>/C\e[be+WO`/@w*DhjKXR~sge1;-(ݠlG<'NO.)'Z%^| ޑTV<\:N(6.zoRLwG&QuC| ' 3 >E T+?&UQ'nƌ:|B W؉{*6*t>ۉQGC4hKd^.ލX/+~ UO9"n,AKeՍYْ?? *8II{0ԏ`PK5\ EPK@iEl9..mimetypePK@iEfʉTThumbnails/thumbnail.pngPK@iEz(7 Xstyles.xmlPK@iEL"h| džcontent.xmlPK@iEg+|meta.xmlPK@iE#%  settings.xmlPK@iEh manifest.rdfPK@iEConfigurations2/menubar/PK@iE=Configurations2/toolpanel/PK@iEuConfigurations2/toolbar/PK@iEConfigurations2/floater/PK@iEConfigurations2/images/Bitmaps/PK@iEConfigurations2/statusbar/PK@iEVConfigurations2/popupmenu/PK@iEConfigurations2/progressbar/PK@iE'Configurations2/accelerator/current.xmlPK@iE5\ EMETA-INF/manifest.xmlPKpengauge-digitizer-10.4+ds.1/doc/EngaugeUserManual.odt000066400000000000000000000311571316740757700224570ustar00rootroot00000000000000PKwUF^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKwUFYThumbnails/thumbnail.pngPNG  IHDRg?IDATxyx}ٙ+ɲ,Y-[26e1!8mL$&B m?4@ICӄnJ@vbǀ,:lk>fZr_£fQQq?AR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$Į<)<˹( ]TdE0$%.?*\yRo>IjYC'2 \.ct8tjjG^N[^[X_[-[~l=lVj4URfb[d,:-Pa#66la'ŹUo.c)'Gz4lj{XE_޳G~:6Y*=%PиgO͎/oo^Rz/TfOslsy=ӎ<5N+n3|zCO&^r?5?}7oˏ;c궮om؎ÿ9V^juV]]0Ogpa烽g,'EKkyP(X7{o2 QhoZ??kǾ?ﱑt&Ld. {6?#/EOJ| 斔7e_^=׺ņг}lUKeE܏45[O66Nߝ \ɢeVoy=W?]jg;%+ZoѓOdCOXGWMt鵷'`v?HKsD} Yv}Ul> ._ޠOlߵЛ7m.mage((>nf𶚆6(f[6paޙ$"9uLP)>egRXmZ 5>YuBzҧ=M6׭wiWqOKsJ 7#6$6CYhބ -Vd?=Uxbqp KjLөt*w8)3K۰mz8eGmڵC8̫OFI}~X=Q? pKF/Taځ@}6-溕CÜ 66]c "6EQfD=%MMF="6gk$Iʯ瓉X:-;p@fޚXJ}c~;8O &c"\7DzE6xUwjkʗ+nt;Ew/lnn<|R|_jm]CԉNJ<=NM@UΜ'Z: -<i ptsMW^S``7I=#}7~0rѵ%q=Q1)6`(Yep$v%ΤlQYڇYClfIcu-;w|s? Ϫ5%]leÔbMk6\?xɨ~'tO>:sIJݏ3xHº-|JS2)67 E4ѽ m}r-M37ѷ-BcY/PelAm]f6G gt:L ȴ9>:۠䲲c,>&E }~h 77SnOM_ٷQ{&4=>m@5q:5@^;N=:Mg)+$^V%p܄ޓS.zkw߄+BZocޘiӏxR=M.v桤Y/"+m“*:ms}|_9{KΜ|eMK*ө4&'dlXCgDGTCDJ2ׯ[;>s],ƩW_Z׭N$ubMKɷf%ʆL&+IⱣկ;sxa}gL&52< ݡW/ N^=D"e2#Zw$*/9qVoT-m,2$1يBvGјLyA̤ك<INEp7D%M|^W*.YQ7a,uɩe16͢d`,,L:}yCaK؟?Qϓv9KX,!Y0++>2㡮;v/^-XON$+~QLN=U+VKT;aN}H*=#mMēKjYGJgcb%?OUڴaU$E~>=˥9gx,+ _hE'wr ~ }pxKM /iR;ŵկ97X FAN½ I-797ddl[(\\}MG(Z؜/)Z=[쑱Qbw[wzRyYOz`YtJ Zo:uwpdhttNǒTo[>0IaOGٟe4Gc.ÔKGBc56f)봹7:b2 .N앵XDooh,yUk#gDMSTI'L eǛIc̥T:8szhtlw(2MMd(&qsg$ EAoq.OEl8r䔜ˤd:˶WqA-Hx2Q^Y1t*PQ;LFrybdOwWofqxdSʍ"HFj4 CYTXeϤccFa$ft*LA=DeOkV7w^k\Mؘa *e +DsdDt}&^f/,ee^t;llv7nl+V?X$ B$2dLn%l VnOeDnV^HX-&:19XT+AuȴY7.^ihJ>/{dCGN'76M%GE0WG;oE)iUuzvdOIkc)Ų^۳ne-lc)rpiΝTm b4W,bl[Uld_ظW(oزwpedѨ6OǧW:X\;~w~Z ^R[ ;hӣޜL%yFlڭ%M[3{]V ?{l8 +LNyzV鿜bvA\n8ŢjuwyOLr62LFdEEq=Wr;a}fw[R?mC=/:lyw|.kĩ;귊9UR mR@)r+S1yz )V_WgUѾ<CQ*Q2R;?ȮRnyUs6Fy^Ja_6[٬~U4g2SVxMpڗ̔*,3_` ']Tg=ym}VV8 .K8S}2zaæO̼~8pY^ڍɯc? i3R^v3vNOaҍ:%}{9˖n{/k XWrD%W$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ I1$ĐCR@ IF=q @IENDB`PKwUF styles.xml[o6~Pq&۲G7ۇW`k-Q6o)Q 8޿CR(r$ 3C?~3R̻3:z\xp任UciJbIX\f8Gs1»!A&GoXskq7z(Ӣ;j]kPc۲E#ke:0Xyʆ? ,YV I:^@/FM6WfqI'(@gV^f?ԪxxUB >|!he ,NCOh%7O5S ,ITN)+sl(lee+Z-\DB!U8,xov xΤyd~+{(AֱJFZ=(a9L A( dOR`@?vMY8P(!W= N4i.pi@okOHG}@nQ=B%>:,yy0#wn7iSTҪ=WN8*$n;,8d. j"Br6L?7hTV٤Z Y!uL,T+G ;2| (ZE$ʏr {yEb(=+SYhGsjnGvz0Д)R8ȷp"R25$UD=h?#(aH,Dʹ%`Ny(-zx jc|%R ky`VW+jdR a׷#Tpv(s}[E\u$ZX9l 뻜-}4h N;o)$I:8bO|&e4{++քﳮu//to-_d- uקfY]RV+.q+QtյgkVJP.CC}YHt3C$b<{c/z0^1^\?7x0֏50yc/{0^1^^750^1=May|F@w;#< <yyB"I,(dWV-jAXSƤ[yhUP8\EJcSWj=y ;hW4f~S<ϝTY<ֽ5/gġK,7:N, 7A;wO723.9"SxZvͩ.N$G5+2Μ}=lf豞Rּ.lwx:]:8W@++JGNw`WA(Q, / [L;5js|Ei<))+ADG=Zըzj|{u}vFA PKwS\ M:PKwUF content.xmlW]o6}߯T/LކX]M Hɀ4EID)Q#)$mZr-G8﹟<-yR1Q-x2 Z*_`qu#EQN3Iؒj<6>T5ѥjf&( ) o<[b] zyz|AFε`w7?  pu/Ľ $ϸRq>JwGY,a IZT.{ydpM A-;=V/ Ef`,Gp.c܈\mN Zo|`DŽSa4*4D:n4@3Y;߱A Rm?"m6.<7TjFUu f{v$Yt1Ivb- IyDf?)47{)0n@x=q1K)S5ǻH4n4pQ5*c/>^gȝ{زWp*LOꎮ<x1lٽB_=P} -\Lڂ?vp_i2E0+Á,h pP]&{cG?4^PKEd{PKwUFmeta.xmln0} f  D"ty-Ș0}kd]߹NjU(k!UUz,?UrBe,\l7jɎ*@G-=MBr]-x`m*eY'wE߸7D B +;vM%Vh禧r$ <te e3w '\;QS3]0$~H|=G %J-'<9 N49CfY9^*i}ћ)W#`x ]ЋNe1E/8uƩpC*`}+$!SlXgjE334#,1\ ¦NǙsAG2M4hѥ#Ʃra|3Bjw&+È=`C  l: =u036Lm;&gcdZ8fo}8FIKS7jɐ'E8,t K;F(cf,>@|IM(S&H/}D-9-hC*/v토8W؜Th[JC%'\pNK\#l0Bna,c#ͣNu06"fvҷ(k;>hDQ7Zh^BŸ`mJ[ I-Si%#\jD z(:ΰ;jADc1JIP;B7C}ͨL#`lol ol. %icO;{2[j_Pfc:s(RX2LLV?q0NXH'*%ݾle뇷='S&﹨-}aO^x0Het}ſi@8O #SYC ĉRYMiFp@dL6+,"3VI}@+pm;MP ~9<%oۮ=V|}_ Z39L%5X+U[̽M,Bݪ5Ut;TMN[N6*Zfl1 #:-f ;ГN6*_K6Qpe|[}6t 7fԐyIXB ? u`?PKGh'PKwUF manifest.rdf͓n0O;;7;4INF0܊ҫhD JwY/Gw'`bk2~ne\12FwP1uhEL\`~\5NPM&]`jA U,z 1.Ő^=pg: tDy1?)C<:e5ccFJk]N!} z9Ą NPKf|>PKwUF^2 ''mimetypePKwUFYMThumbnails/thumbnail.pngPKwUFwS\ M: cstyles.xmlPKwUFEd{ content.xmlPKwUF t!meta.xmlPKwUFGh' #settings.xmlPKwUFh 4)manifest.rdfPKwUF's*Configurations2/accelerator/current.xmlPKwUF*Configurations2/progressbar/PKwUF+Configurations2/statusbar/PKwUF<+Configurations2/images/Bitmaps/PKwUFy+Configurations2/floater/PKwUF+Configurations2/toolbar/PKwUF+Configurations2/popupmenu/PKwUF,Configurations2/toolpanel/PKwUFU,Configurations2/menubar/PKwUFf|>,META-INF/manifest.xmlPKp-engauge-digitizer-10.4+ds.1/engauge.pro000077500000000000000000001062061316740757700177700ustar00rootroot00000000000000# engauge.pro : Builds make files for engauge executable # # Comments: # 1) Version numbers for the packages mentioned in the following comments are documented in the BUILD file # 2) This builds 'release' executables by default, to greatly reduce the chances of a 'debug' build getting deployed. # To get a 'debug' build, add 'CONFIG=debug' to the qmake command line: # qmake CONFIG=debug # 3) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires: # 1) previous installation of OpenJPEG development package # 2) OPENJPEG_INCLUDE environment variable pointing to directory with openjpeg.h # 3) OPENJPEG_LIB environment variable pointing to directory with libopenjp2.so # Sample command lines: # qmake CONFIG+=jpeg2000 # qmake "CONFIG+=debug jpeg2000" # At some point, Qt may provide its own support for this format, at which point this can be skipped # 4) Add 'pdf' to the qmake command line to include support for PDF input files. Requires # 1) Linux and Mac OSX builds only. Unfortunately, the old software libraries needed to support # PDF in Windows no longer compile and link correctly with newer Engauge builds. # 2) previous installation of the poppler-qt5 development package # 3) POPPLER_INCLUDE environment variable pointing to directory containing poppler-qt5.h # 4) POPPLER_LIB environment variable pointing to directory containing libpoppler-qt5.so # Sample command lines: # qmake CONFIG+=pdf # qmake "CONFIG+=debug pdf" # 5) Set environment variable HELPDIR to override the default directory for the help files. On the command line, use # qmake "DEFINES+=HELPDIR=". The is absolute or relative to the application executable directory # 6) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of # include/library files in an automated and platform-independent manner, so it will not be removed # 7) 'network' module of Qt is not included for Windows version since installation file gets blocked by Avast antivirus. # Likewise, it is not included for OSX since it is interpretted as a threat. # The network module can download files, which is what malware does to install bad things # 8) In OSX, QtHelp requires QtNetwork which is rejected by the operating system, so QtHelp is disabled # # More comments are in the INSTALL file, and below QT += core gui printsupport widgets xml !mac { QT += help HEADERS += src/Help/HelpBrowser.h \ src/Help/HelpWindow.h SOURCES += src/Help/HelpBrowser.cpp \ src/Help/HelpWindow.cpp } CONFIG(debug,debug|release){ # Debug version: } else { # Release version: # 1) Release version has warnings enabled so they can be removed as a convenience for downstream package maintainers # 2) Full coverage requires disabling of ENGAUGE_ASSERT by setting QT_NO_DEBUG # 3) -Wuninitialized requires O1, O2 or O3 optimization DEFINES += QT_NO_DEBUG *-g++* { QMAKE_CXXFLAGS_WARN_ON += -Wreturn-type -O1 -Wuninitialized -Wunused-variable } } OBJECTS_DIR = src/.objs MOC_DIR = src/.moc RCC_DIR = src/.rcc HEADERS += \ src/Background/BackgroundImage.h \ src/Background/BackgroundStateAbstractBase.h \ src/Background/BackgroundStateContext.h \ src/Background/BackgroundStateCurve.h \ src/Background/BackgroundStateNone.h \ src/Background/BackgroundStateOriginal.h \ src/Background/BackgroundStateUnloaded.h \ src/Callback/CallbackAddPointsInCurvesGraphs.h \ src/Callback/CallbackAxesCheckerFromAxesPoints.h \ src/Callback/CallbackAxisPointsAbstract.h \ src/Callback/CallbackBoundingRects.h \ src/Callback/CallbackCheckAddPointAxis.h \ src/Callback/CallbackCheckEditPointAxis.h \ src/Callback/CallbackDocumentHash.h \ src/Callback/CallbackGatherXThetaValuesFunctions.h \ src/Callback/CallbackNextOrdinal.h \ src/Callback/CallbackPointOrdinal.h \ src/Callback/CallbackRemovePointsInCurvesGraphs.h \ src/Callback/CallbackScaleBar.h \ src/Callback/CallbackSceneUpdateAfterCommand.h \ src/Callback/CallbackSearchReturn.h \ src/Callback/CallbackUpdateTransform.h \ src/Checker/Checker.h \ src/Checker/CheckerMode.h \ src/Checklist/ChecklistGuide.h \ src/Checklist/ChecklistGuideBrowser.h \ src/Checklist/ChecklistGuidePage.h \ src/Checklist/ChecklistGuidePageConclusion.h \ src/Checklist/ChecklistGuidePageCurves.h \ src/Checklist/ChecklistGuidePageIntro.h \ src/Checklist/ChecklistGuideWizard.h \ src/Checklist/ChecklistLineEdit.h \ src/Checklist/ChecklistTemplate.h \ src/Cmd/CmdAbstract.h \ src/Cmd/CmdAddPointAxis.h \ src/Cmd/CmdAddPointGraph.h \ src/Cmd/CmdAddPointsGraph.h \ src/Cmd/CmdAddScale.h \ src/Cmd/CmdCopy.h \ src/Cmd/CmdCut.h \ src/Cmd/CmdDelete.h \ src/Cmd/CmdEditPointAxis.h \ src/Cmd/CmdEditPointGraph.h \ src/Cmd/CmdFactory.h \ src/Cmd/CmdMediator.h \ src/Cmd/CmdMoveBy.h \ src/Cmd/CmdPointChangeBase.h \ src/Cmd/CmdRedoForTest.h \ src/Cmd/CmdSelectCoordSystem.h \ src/Cmd/CmdSettingsAxesChecker.h \ src/Cmd/CmdSettingsColorFilter.h \ src/Cmd/CmdSettingsCoords.h \ src/Cmd/CmdSettingsCurveAddRemove.h \ src/Cmd/CmdSettingsCurveProperties.h \ src/Cmd/CmdSettingsDigitizeCurve.h \ src/Cmd/CmdSettingsExportFormat.h \ src/Cmd/CmdSettingsGeneral.h \ src/Cmd/CmdSettingsGridDisplay.h \ src/Cmd/CmdSettingsGridRemoval.h \ src/Cmd/CmdSettingsPointMatch.h \ src/Cmd/CmdSettingsSegments.h \ src/Cmd/CmdStackShadow.h \ src/Cmd/CmdUndoForTest.h \ src/Color/ColorConstants.h \ src/Color/ColorFilter.h \ src/Color/ColorFilterEntry.h \ src/Color/ColorFilterHistogram.h \ src/Color/ColorFilterMode.h \ src/Color/ColorFilterSettings.h \ src/Color/ColorFilterSettingsStrategyAbstractBase.h \ src/Color/ColorFilterSettingsStrategyForeground.h \ src/Color/ColorFilterSettingsStrategyHue.h \ src/Color/ColorFilterSettingsStrategyIntensity.h \ src/Color/ColorFilterSettingsStrategySaturation.h \ src/Color/ColorFilterSettingsStrategyValue.h \ src/Color/ColorFilterStrategyAbstractBase.h \ src/Color/ColorFilterStrategyForeground.h \ src/Color/ColorFilterStrategyHue.h \ src/Color/ColorFilterStrategyIntensity.h \ src/Color/ColorFilterStrategySaturation.h \ src/Color/ColorFilterStrategyValue.h \ src/Color/ColorPalette.h \ src/Coord/CoordScale.h \ src/Coord/CoordsType.h \ src/Coord/CoordSymbol.h \ src/CoordSystem/CoordSystem.h \ src/CoordSystem/CoordSystemContext.h \ src/CoordSystem/CoordSystemIndex.h \ src/CoordSystem/CoordSystemInterface.h \ src/Coord/CoordUnitsDate.h \ src/Coord/CoordUnitsNonPolarTheta.h \ src/Coord/CoordUnitsPolarTheta.h \ src/Coord/CoordUnitsTime.h \ src/Correlation/Correlation.h \ src/Cursor/CursorFactory.h \ src/Cursor/CursorSize.h \ src/Curve/Curve.h \ src/Curve/CurveConnectAs.h \ src/Curve/CurveNameList.h \ src/Curve/CurveSettingsInt.h \ src/Curve/CurvesGraphs.h \ src/Curve/CurveStyle.h \ src/Curve/CurveStyles.h \ src/util/DataKey.h \ src/DigitizeState/DigitizeStateAbstractBase.h \ src/DigitizeState/DigitizeStateAxis.h \ src/DigitizeState/DigitizeStateColorPicker.h \ src/DigitizeState/DigitizeStateContext.h \ src/DigitizeState/DigitizeStateCurve.h \ src/DigitizeState/DigitizeStateEmpty.h \ src/DigitizeState/DigitizeStatePointMatch.h \ src/DigitizeState/DigitizeStateScale.h \ src/DigitizeState/DigitizeStateSegment.h \ src/DigitizeState/DigitizeStateSelect.h \ src/Dlg/DlgAbout.h \ src/Dlg/DlgEditPointAxis.h \ src/Dlg/DlgEditPointGraph.h \ src/Dlg/DlgEditPointGraphLineEdit.h \ src/Dlg/DlgEditScale.h \ src/Dlg/DlgErrorReportAbstractBase.h \ src/Dlg/DlgErrorReportLocal.h \ src/Dlg/DlgErrorReportNetworking.h \ src/Dlg/DlgFilterCommand.h \ src/Dlg/DlgFilterThread.h \ src/Dlg/DlgFilterWorker.h \ src/Dlg/DlgImportAdvanced.h \ src/Dlg/DlgImportCroppingNonPdf.h \ src/Dlg/DlgRequiresTransform.h \ src/Dlg/DlgSettingsAbstractBase.h \ src/Dlg/DlgSettingsAxesChecker.h \ src/Dlg/DlgSettingsColorFilter.h \ src/Dlg/DlgSettingsCoords.h \ src/Dlg/DlgSettingsCurveAddRemove.h \ src/Dlg/DlgSettingsCurveProperties.h \ src/Dlg/DlgSettingsDigitizeCurve.h \ src/Dlg/DlgSettingsExportFormat.h \ src/Dlg/DlgSettingsGeneral.h \ src/Dlg/DlgSettingsGridDisplay.h \ src/Dlg/DlgSettingsGridRemoval.h \ src/Dlg/DlgSettingsMainWindow.h \ src/Dlg/DlgSettingsPointMatch.h \ src/Dlg/DlgSettingsSegments.h \ src/Dlg/DlgValidatorAboveZero.h \ src/Dlg/DlgValidatorAbstract.h \ src/Dlg/DlgValidatorDateTime.h \ src/Dlg/DlgValidatorDegreesMinutesSeconds.h \ src/Dlg/DlgValidatorFactory.h \ src/Dlg/DlgValidatorNumber.h \ src/Document/Document.h \ src/Document/DocumentAxesPointsRequired.h \ src/Document/DocumentHash.h \ src/Document/DocumentHashGenerator.h \ src/Document/DocumentModelAbstractBase.h \ src/Document/DocumentModelAxesChecker.h \ src/Document/DocumentModelColorFilter.h \ src/Document/DocumentModelCoords.h \ src/Document/DocumentModelDigitizeCurve.h \ src/Document/DocumentModelExportFormat.h \ src/Document/DocumentModelGeneral.h \ src/Document/DocumentModelGridDisplay.h \ src/Document/DocumentModelGridRemoval.h \ src/Document/DocumentModelPointMatch.h \ src/Document/DocumentModelSegments.h \ src/Document/DocumentSerialize.h \ src/include/EngaugeAssert.h \ src/util/EnumsToQt.h \ src/Export/ExportAlignLinear.h \ src/Export/ExportAlignLog.h \ src/Export/ExportDelimiter.h \ src/Export/ExportImageForRegression.h \ src/Export/ExportLayoutFunctions.h \ src/Export/ExportPointsIntervalUnits.h \ src/Export/ExportPointsSelectionFunctions.h \ src/Export/ExportPointsSelectionRelations.h \ src/Export/ExportDelimiter.h \ src/Export/ExportFileAbstractBase.h \ src/Export/ExportFileFunctions.h \ src/Export/ExportFileRelations.h \ src/Export/ExportHeader.h \ src/Export/ExportOrdinalsSmooth.h \ src/Export/ExportOrdinalsStraight.h \ src/Export/ExportToClipboard.h \ src/Export/ExportToFile.h \ src/Export/ExportValuesOrdinal.h \ src/Export/ExportValuesXOrY.h \ src/Export/ExportXThetaValuesMergedFunctions.h \ src/FileCmd/FileCmdAbstract.h \ src/FileCmd/FileCmdClose.h \ src/FileCmd/FileCmdExport.h \ src/FileCmd/FileCmdFactory.h \ src/FileCmd/FileCmdImport.h \ src/FileCmd/FileCmdOpen.h \ src/FileCmd/FileCmdScript.h \ src/FileCmd/FileCmdSerialize.h \ src/Filter/FilterImage.h \ src/Fitting/FittingCurve.h \ src/Fitting/FittingCurveCoefficients.h \ src/Fitting/FittingModel.h \ src/Fitting/FittingPointsConvenient.h \ src/Fitting/FittingStatistics.h \ src/Fitting/FittingWindow.h \ src/Format/FormatCoordsUnits.h \ src/Format/FormatCoordsUnitsStrategyAbstractBase.h \ src/Format/FormatCoordsUnitsStrategyNonPolarTheta.h \ src/Format/FormatCoordsUnitsStrategyPolarTheta.h \ src/Format/FormatDateTime.h \ src/Format/FormatDegreesMinutesSecondsBase.h \ src/Format/FormatDegreesMinutesSecondsNonPolarTheta.h \ src/Format/FormatDegreesMinutesSecondsPolarTheta.h \ src/Callback/functor.h \ src/Geometry/GeometryModel.h \ src/Geometry/GeometryStrategyAbstractBase.h \ src/Geometry/GeometryStrategyContext.h \ src/Geometry/GeometryStrategyFunctionSmooth.h \ src/Geometry/GeometryStrategyFunctionStraight.h \ src/Geometry/GeometryStrategyRelationSmooth.h \ src/Geometry/GeometryStrategyRelationStraight.h \ src/Geometry/GeometryWindow.h \ src/Ghosts/GhostEllipse.h \ src/Ghosts/GhostPath.h \ src/Ghosts/GhostPolygon.h \ src/Ghosts/Ghosts.h \ src/Graphics/GraphicsArcItem.h \ src/Graphics/GraphicsItemsExtractor.h \ src/Graphics/GraphicsItemType.h \ src/Graphics/GraphicsLinesForCurve.h \ src/Graphics/GraphicsLinesForCurves.h \ src/Graphics/GraphicsPoint.h \ src/Graphics/GraphicsPointAbstractBase.h \ src/Graphics/GraphicsPointEllipse.h \ src/Graphics/GraphicsPointFactory.h \ src/Graphics/GraphicsPointPolygon.h \ src/Graphics/GraphicsScene.h \ src/Graphics/GraphicsView.h \ src/Grid/GridClassifier.h \ src/Grid/GridCoordDisable.h \ src/Grid/GridHealer.h \ src/Grid/GridInitializer.h \ src/Grid/GridLine.h \ src/Grid/GridLineFactory.h \ src/Grid/GridLineLimiter.h \ src/Grid/GridLines.h \ src/Grid/GridLineStyle.h \ src/Grid/GridRemoval.h \ src/Import/ImportCropping.h \ src/Import/ImportCroppingUtilBase.h \ src/Import/ImportCroppingUtilNonPdf.h \ src/util/LinearToLog.h \ src/Line/LineStyle.h \ src/Load/LoadFileInfo.h \ src/Logger/Logger.h \ src/Logger/LoggerUpload.h \ src/Matrix/Matrix.h \ src/main/MainTitleBarFormat.h \ src/main/MainWindow.h \ src/main/MainWindowModel.h \ src/util/MigrateToVersion6.h \ src/Mime/MimePointsDetector.h \ src/Mime/MimePointsExport.h \ src/Mime/MimePointsImport.h \ src/util/mmsubs.h \ src/NonPdf/NonPdf.h \ src/NonPdf/NonPdfCropping.h \ src/NonPdf/NonPdfFrameHandle.h \ src/Ordinal/OrdinalGenerator.h \ src/Ordinal/OrdinalToGraphicsPoint.h \ src/Pdf/PdfResolution.h \ src/Point/Point.h \ src/Point/PointComparator.h \ src/Point/PointIdentifiers.h \ src/Point/PointMatchAlgorithm.h \ src/Point/PointMatchPixel.h \ src/Point/PointMatchTriplet.h \ src/Point/Points.h \ src/Point/PointShape.h \ src/Point/PointStyle.h \ src/util/QtToString.h \ src/ScaleBar/ScaleBarAxisPointsUnite.h \ src/Segment/Segment.h \ src/Segment/SegmentFactory.h \ src/Segment/SegmentLine.h \ src/Settings/Settings.h \ src/Settings/SettingsForGraph.h \ src/Spline/Spline.h \ src/Spline/SplineCoeff.h \ src/Spline/SplinePair.h \ src/StatusBar/StatusBar.h \ src/StatusBar/StatusBarMode.h \ src/Transformation/Transformation.h \ src/Transformation/TransformationStateAbstractBase.h \ src/Transformation/TransformationStateContext.h \ src/Transformation/TransformationStateDefined.h \ src/Transformation/TransformationStateUndefined.h \ src/Translator/TranslatorContainer.h \ src/Tutorial/TutorialButton.h \ src/Tutorial/TutorialButtonRect.h \ src/Tutorial/TutorialButtonText.h \ src/Tutorial/TutorialDlg.h \ src/Tutorial/TutorialStateAbstractBase.h \ src/Tutorial/TutorialStateAxisPoints.h \ src/Tutorial/TutorialStateChecklistWizardAbstract.h \ src/Tutorial/TutorialStateChecklistWizardLines.h \ src/Tutorial/TutorialStateChecklistWizardPoints.h \ src/Tutorial/TutorialStateColorFilter.h \ src/Tutorial/TutorialStateContext.h \ src/Tutorial/TutorialStateCurveSelection.h \ src/Tutorial/TutorialStateCurveType.h \ src/Tutorial/TutorialStateIntroduction.h \ src/Tutorial/TutorialStatePointMatch.h \ src/Tutorial/TutorialStateSegmentFill.h \ src/include/ValuesVectorXOrY.h \ src/util/Version.h \ src/View/ViewPointStyle.h \ src/View/ViewPreview.h \ src/View/ViewProfile.h \ src/View/ViewProfileDivider.h \ src/View/ViewProfileParameters.h \ src/View/ViewProfileScale.h \ src/View/ViewSegmentFilter.h \ src/Window/WindowAbstractBase.h \ src/Window/WindowModelBase.h \ src/Window/WindowTable.h \ src/util/Xml.h \ src/Zoom/ZoomControl.h \ src/Zoom/ZoomFactor.h \ src/Zoom/ZoomFactorInitial.h \ src/Zoom/ZoomLabels.h \ src/Zoom/ZoomTransition.h \ src/util/ZValues.h SOURCES += \ src/Background/BackgroundImage.cpp \ src/Background/BackgroundStateAbstractBase.cpp \ src/Background/BackgroundStateContext.cpp \ src/Background/BackgroundStateCurve.cpp \ src/Background/BackgroundStateNone.cpp \ src/Background/BackgroundStateOriginal.cpp \ src/Background/BackgroundStateUnloaded.cpp \ src/Callback/CallbackAddPointsInCurvesGraphs.cpp \ src/Callback/CallbackAxesCheckerFromAxesPoints.cpp \ src/Callback/CallbackAxisPointsAbstract.cpp \ src/Callback/CallbackBoundingRects.cpp \ src/Callback/CallbackCheckAddPointAxis.cpp \ src/Callback/CallbackCheckEditPointAxis.cpp \ src/Callback/CallbackDocumentHash.cpp \ src/Callback/CallbackGatherXThetaValuesFunctions.cpp \ src/Callback/CallbackNextOrdinal.cpp \ src/Callback/CallbackPointOrdinal.cpp \ src/Callback/CallbackRemovePointsInCurvesGraphs.cpp \ src/Callback/CallbackScaleBar.cpp \ src/Callback/CallbackSceneUpdateAfterCommand.cpp \ src/Callback/CallbackUpdateTransform.cpp \ src/Checker/Checker.cpp \ src/Checker/CheckerMode.cpp \ src/Checklist/ChecklistGuide.cpp \ src/Checklist/ChecklistGuideBrowser.cpp \ src/Checklist/ChecklistGuidePage.cpp \ src/Checklist/ChecklistGuidePageConclusion.cpp \ src/Checklist/ChecklistGuidePageCurves.cpp \ src/Checklist/ChecklistGuidePageIntro.cpp \ src/Checklist/ChecklistGuideWizard.cpp \ src/Checklist/ChecklistLineEdit.cpp \ src/Checklist/ChecklistTemplate.cpp \ src/Cmd/CmdAbstract.cpp \ src/Cmd/CmdAddPointAxis.cpp \ src/Cmd/CmdAddPointGraph.cpp \ src/Cmd/CmdAddPointsGraph.cpp \ src/Cmd/CmdAddScale.cpp \ src/Cmd/CmdCopy.cpp \ src/Cmd/CmdCut.cpp \ src/Cmd/CmdDelete.cpp \ src/Cmd/CmdEditPointAxis.cpp \ src/Cmd/CmdEditPointGraph.cpp \ src/Cmd/CmdFactory.cpp \ src/Cmd/CmdMediator.cpp \ src/Cmd/CmdMoveBy.cpp \ src/Cmd/CmdRedoForTest.cpp \ src/Cmd/CmdPointChangeBase.cpp \ src/Cmd/CmdSelectCoordSystem.cpp \ src/Cmd/CmdSettingsAxesChecker.cpp \ src/Cmd/CmdSettingsColorFilter.cpp \ src/Cmd/CmdSettingsCoords.cpp \ src/Cmd/CmdSettingsCurveAddRemove.cpp \ src/Cmd/CmdSettingsCurveProperties.cpp \ src/Cmd/CmdSettingsDigitizeCurve.cpp \ src/Cmd/CmdSettingsExportFormat.cpp \ src/Cmd/CmdSettingsGeneral.cpp \ src/Cmd/CmdSettingsGridDisplay.cpp \ src/Cmd/CmdSettingsGridRemoval.cpp \ src/Cmd/CmdSettingsPointMatch.cpp \ src/Cmd/CmdSettingsSegments.cpp \ src/Cmd/CmdStackShadow.cpp \ src/Cmd/CmdUndoForTest.cpp \ src/Color/ColorFilter.cpp \ src/Color/ColorFilterHistogram.cpp \ src/Color/ColorFilterMode.cpp \ src/Color/ColorFilterSettings.cpp \ src/Color/ColorFilterSettingsStrategyAbstractBase.cpp \ src/Color/ColorFilterSettingsStrategyForeground.cpp \ src/Color/ColorFilterSettingsStrategyHue.cpp \ src/Color/ColorFilterSettingsStrategyIntensity.cpp \ src/Color/ColorFilterSettingsStrategySaturation.cpp \ src/Color/ColorFilterSettingsStrategyValue.cpp \ src/Color/ColorFilterStrategyAbstractBase.cpp \ src/Color/ColorFilterStrategyForeground.cpp \ src/Color/ColorFilterStrategyHue.cpp \ src/Color/ColorFilterStrategyIntensity.cpp \ src/Color/ColorFilterStrategySaturation.cpp \ src/Color/ColorFilterStrategyValue.cpp \ src/Color/ColorPalette.cpp \ src/Coord/CoordScale.cpp \ src/Coord/CoordsType.cpp \ src/Coord/CoordSymbol.cpp \ src/CoordSystem/CoordSystem.cpp \ src/CoordSystem/CoordSystemContext.cpp \ src/CoordSystem/CoordSystemInterface.cpp \ src/Coord/CoordUnitsDate.cpp \ src/Coord/CoordUnitsNonPolarTheta.cpp \ src/Coord/CoordUnitsPolarTheta.cpp \ src/Coord/CoordUnitsTime.cpp \ src/Correlation/Correlation.cpp \ src/Cursor/CursorFactory.cpp \ src/Cursor/CursorSize.cpp \ src/Curve/Curve.cpp \ src/Curve/CurveConnectAs.cpp \ src/Curve/CurveNameList.cpp \ src/Curve/CurveSettingsInt.cpp \ src/Curve/CurvesGraphs.cpp \ src/Curve/CurveStyle.cpp \ src/Curve/CurveStyles.cpp \ src/util/DataKey.cpp \ src/DigitizeState/DigitizeStateAbstractBase.cpp \ src/DigitizeState/DigitizeStateAxis.cpp \ src/DigitizeState/DigitizeStateColorPicker.cpp \ src/DigitizeState/DigitizeStateContext.cpp \ src/DigitizeState/DigitizeStateCurve.cpp \ src/DigitizeState/DigitizeStateEmpty.cpp \ src/DigitizeState/DigitizeStatePointMatch.cpp \ src/DigitizeState/DigitizeStateScale.cpp \ src/DigitizeState/DigitizeStateSegment.cpp \ src/DigitizeState/DigitizeStateSelect.cpp \ src/Dlg/DlgAbout.cpp \ src/Dlg/DlgEditPointAxis.cpp \ src/Dlg/DlgEditPointGraph.cpp \ src/Dlg/DlgEditPointGraphLineEdit.cpp \ src/Dlg/DlgEditScale.cpp \ src/Dlg/DlgErrorReportAbstractBase.cpp \ src/Dlg/DlgErrorReportLocal.cpp \ src/Dlg/DlgErrorReportNetworking.cpp \ src/Dlg/DlgFilterCommand.cpp \ src/Dlg/DlgFilterThread.cpp \ src/Dlg/DlgFilterWorker.cpp \ src/Dlg/DlgImportAdvanced.cpp \ src/Dlg/DlgImportCroppingNonPdf.cpp \ src/Dlg/DlgRequiresTransform.cpp \ src/Dlg/DlgSettingsAbstractBase.cpp \ src/Dlg/DlgSettingsAxesChecker.cpp \ src/Dlg/DlgSettingsColorFilter.cpp \ src/Dlg/DlgSettingsCoords.cpp \ src/Dlg/DlgSettingsCurveAddRemove.cpp \ src/Dlg/DlgSettingsCurveProperties.cpp \ src/Dlg/DlgSettingsDigitizeCurve.cpp \ src/Dlg/DlgSettingsExportFormat.cpp \ src/Dlg/DlgSettingsGeneral.cpp \ src/Dlg/DlgSettingsGridDisplay.cpp \ src/Dlg/DlgSettingsGridRemoval.cpp \ src/Dlg/DlgSettingsMainWindow.cpp \ src/Dlg/DlgSettingsPointMatch.cpp \ src/Dlg/DlgSettingsSegments.cpp \ src/Dlg/DlgValidatorAboveZero.cpp \ src/Dlg/DlgValidatorAbstract.cpp \ src/Dlg/DlgValidatorDateTime.cpp \ src/Dlg/DlgValidatorDegreesMinutesSeconds.cpp \ src/Dlg/DlgValidatorFactory.cpp \ src/Dlg/DlgValidatorNumber.cpp \ src/Document/Document.cpp \ src/Document/DocumentHashGenerator.cpp \ src/Document/DocumentModelAbstractBase.cpp \ src/Document/DocumentModelAxesChecker.cpp \ src/Document/DocumentModelColorFilter.cpp \ src/Document/DocumentModelCoords.cpp \ src/Document/DocumentModelDigitizeCurve.cpp \ src/Document/DocumentModelExportFormat.cpp \ src/Document/DocumentModelGeneral.cpp \ src/Document/DocumentModelGridDisplay.cpp \ src/Document/DocumentModelGridRemoval.cpp \ src/Document/DocumentModelPointMatch.cpp \ src/Document/DocumentModelSegments.cpp \ src/Document/DocumentSerialize.cpp \ src/util/EnumsToQt.cpp \ src/Export/ExportAlignLinear.cpp \ src/Export/ExportAlignLog.cpp \ src/Export/ExportDelimiter.cpp \ src/Export/ExportFileAbstractBase.cpp \ src/Export/ExportFileFunctions.cpp \ src/Export/ExportFileRelations.cpp \ src/Export/ExportHeader.cpp \ src/Export/ExportImageForRegression.cpp \ src/Export/ExportLayoutFunctions.cpp \ src/Export/ExportOrdinalsSmooth.cpp \ src/Export/ExportOrdinalsStraight.cpp \ src/Export/ExportPointsIntervalUnits.cpp \ src/Export/ExportPointsSelectionFunctions.cpp \ src/Export/ExportPointsSelectionRelations.cpp \ src/Export/ExportToClipboard.cpp \ src/Export/ExportToFile.cpp \ src/Export/ExportXThetaValuesMergedFunctions.cpp \ src/FileCmd/FileCmdAbstract.cpp \ src/FileCmd/FileCmdClose.cpp \ src/FileCmd/FileCmdExport.cpp \ src/FileCmd/FileCmdFactory.cpp \ src/FileCmd/FileCmdImport.cpp \ src/FileCmd/FileCmdOpen.cpp \ src/FileCmd/FileCmdScript.cpp \ src/FileCmd/FileCmdSerialize.cpp \ src/Filter/FilterImage.cpp \ src/Fitting/FittingCurve.cpp \ src/Fitting/FittingModel.cpp \ src/Fitting/FittingStatistics.cpp \ src/Fitting/FittingWindow.cpp \ src/Format/FormatCoordsUnits.cpp \ src/Format/FormatCoordsUnitsStrategyAbstractBase.cpp \ src/Format/FormatCoordsUnitsStrategyNonPolarTheta.cpp \ src/Format/FormatCoordsUnitsStrategyPolarTheta.cpp \ src/Format/FormatDateTime.cpp \ src/Format/FormatDegreesMinutesSecondsBase.cpp \ src/Format/FormatDegreesMinutesSecondsNonPolarTheta.cpp \ src/Format/FormatDegreesMinutesSecondsPolarTheta.cpp \ src/Geometry/GeometryModel.cpp \ src/Geometry/GeometryStrategyAbstractBase.cpp \ src/Geometry/GeometryStrategyContext.cpp \ src/Geometry/GeometryStrategyFunctionSmooth.cpp \ src/Geometry/GeometryStrategyFunctionStraight.cpp \ src/Geometry/GeometryStrategyRelationSmooth.cpp \ src/Geometry/GeometryStrategyRelationStraight.cpp \ src/Geometry/GeometryWindow.cpp \ src/Ghosts/GhostEllipse.cpp \ src/Ghosts/GhostPath.cpp \ src/Ghosts/GhostPolygon.cpp \ src/Ghosts/Ghosts.cpp \ src/Graphics/GraphicsArcItem.cpp \ src/Graphics/GraphicsItemsExtractor.cpp \ src/Graphics/GraphicsLinesForCurve.cpp \ src/Graphics/GraphicsLinesForCurves.cpp \ src/Graphics/GraphicsPoint.cpp \ src/Graphics/GraphicsPointAbstractBase.cpp \ src/Graphics/GraphicsPointEllipse.cpp \ src/Graphics/GraphicsPointFactory.cpp \ src/Graphics/GraphicsPointPolygon.cpp \ src/Graphics/GraphicsScene.cpp \ src/Graphics/GraphicsView.cpp \ src/Grid/GridClassifier.cpp \ src/Grid/GridCoordDisable.cpp \ src/Grid/GridHealer.cpp \ src/Grid/GridInitializer.cpp \ src/Grid/GridLine.cpp \ src/Grid/GridLineFactory.cpp \ src/Grid/GridLineLimiter.cpp \ src/Grid/GridLines.cpp \ src/Grid/GridRemoval.cpp \ src/Import/ImportCroppingUtilBase.cpp \ src/Import/ImportCroppingUtilNonPdf.cpp \ src/util/LinearToLog.cpp \ src/Line/LineStyle.cpp \ src/Load/LoadFileInfo.cpp \ src/Logger/Logger.cpp \ src/Logger/LoggerUpload.cpp \ src/Matrix/Matrix.cpp \ src/main/main.cpp \ src/main/MainWindow.cpp \ src/main/MainWindowModel.cpp \ src/util/MigrateToVersion6.cpp \ src/Mime/MimePointsDetector.cpp \ src/Mime/MimePointsExport.cpp \ src/Mime/MimePointsImport.cpp \ src/util/mmsubs.cpp \ src/NonPdf/NonPdf.cpp \ src/NonPdf/NonPdfCropping.cpp \ src/NonPdf/NonPdfFrameHandle.cpp \ src/Ordinal/OrdinalGenerator.cpp \ src/Pdf/PdfResolution.cpp \ src/Point/Point.cpp \ src/Point/PointIdentifiers.cpp \ src/Point/PointMatchAlgorithm.cpp \ src/Point/PointMatchPixel.cpp \ src/Point/PointMatchTriplet.cpp \ src/Point/PointShape.cpp \ src/Point/PointStyle.cpp \ src/util/QtToString.cpp \ src/ScaleBar/ScaleBarAxisPointsUnite.cpp \ src/Segment/Segment.cpp \ src/Segment/SegmentFactory.cpp \ src/Segment/SegmentLine.cpp \ src/Settings/Settings.cpp \ src/Settings/SettingsForGraph.cpp \ src/Spline/Spline.cpp \ src/Spline/SplineCoeff.cpp \ src/Spline/SplinePair.cpp \ src/StatusBar/StatusBar.cpp \ src/Transformation/Transformation.cpp \ src/Transformation/TransformationStateAbstractBase.cpp \ src/Transformation/TransformationStateContext.cpp \ src/Transformation/TransformationStateDefined.cpp \ src/Transformation/TransformationStateUndefined.cpp \ src/Translator/TranslatorContainer.cpp \ src/Tutorial/TutorialButton.cpp \ src/Tutorial/TutorialButtonRect.cpp \ src/Tutorial/TutorialButtonText.cpp \ src/Tutorial/TutorialDlg.cpp \ src/Tutorial/TutorialStateAbstractBase.cpp \ src/Tutorial/TutorialStateAxisPoints.cpp \ src/Tutorial/TutorialStateChecklistWizardAbstract.cpp \ src/Tutorial/TutorialStateChecklistWizardLines.cpp \ src/Tutorial/TutorialStateChecklistWizardPoints.cpp \ src/Tutorial/TutorialStateColorFilter.cpp \ src/Tutorial/TutorialStateContext.cpp \ src/Tutorial/TutorialStateCurveSelection.cpp \ src/Tutorial/TutorialStateCurveType.cpp \ src/Tutorial/TutorialStateIntroduction.cpp \ src/Tutorial/TutorialStatePointMatch.cpp \ src/Tutorial/TutorialStateSegmentFill.cpp \ src/util/Version.cpp \ src/View/ViewPointStyle.cpp \ src/View/ViewPreview.cpp \ src/View/ViewProfile.cpp \ src/View/ViewProfileDivider.cpp \ src/View/ViewProfileParameters.cpp \ src/View/ViewProfileScale.cpp \ src/View/ViewSegmentFilter.cpp \ src/Window/WindowAbstractBase.cpp \ src/Window/WindowModelBase.cpp \ src/Window/WindowTable.cpp \ src/util/Xml.cpp \ src/Zoom/ZoomLabels.cpp \ src/Zoom/ZoomTransition.cpp \ src/util/ZValues.cpp macx-* { CONFIG(debug,debug|release){ CONFIG -= app_bundle TARGET = engauge DESTDIR = bin QMAKE_CXXFLAGS += "-DOSX_DEBUG -stdlib=libc++ -gdwarf-2" } else { CONFIG += app_bundle TARGET = "Engauge Digitizer" QMAKE_CXXFLAGS += "-DOSX_RELEASE -stdlib=libc++ -gdwarf-2" } QMAKE_LFLAGS += "-stdlib=libc++ -gdwarf-2" # /usr/local/Cellar path below is for Travis builds INCLUDEPATH += $$(FFTW_HOME)/include \ $$(LOG4CPP_HOME)/include \ /usr/local/Cellar/qt5/5.5.1_2/lib/QtCore.framework/Versions/5/Headers \ /usr/local/Cellar/qt5/5.5.1_2/lib/QtPrintSupport.framework/Versions/5/Headers \ /usr/local/Cellar/qt5/5.5.1_2/lib/QtWidgets.framework/Versions/5/Headers \ /usr/local/Cellar/qt5/5.5.1_2/lib/QtXml.framework/Versions/5/Headers LIBS += -L/$$(FFTW_HOME)/lib -L$$(LOG4CPP_HOME)/lib -framework CoreFoundation } else { CONFIG += qt warn_on thread TEMPLATE = app TARGET = engauge DESTDIR = bin } win32-* { CONFIG += windows } win32-msvc* { QMAKE_CXXFLAGS += -EHsc /F 32000000 LIBS += $$(FFTW_HOME)/lib/libfftw3-3.lib $$(LOG4CPP_HOME)/lib/log4cpp.lib shell32.lib } else { win32-g++* { LIBS += -L$$(LOG4CPP_HOME)/lib -L$$(FFTW_HOME)/lib QMAKE_LFLAGS += -Wl,--stack,32000000 } LIBS += -lfftw3 -llog4cpp } linux-* { QT += network DEFINES += "NETWORKING" HEADERS += src/Load/LoadImageFromUrl.h \ src/Network/NetworkClient.h SOURCES += src/Load/LoadImageFromUrl.cpp \ src/Network/NetworkClient.cpp INCLUDEPATH += $$(FFTW_HOME)/include \ $$(LOG4CPP_HOME)/include LIBS += -L/$$(FFTW_HOME)/lib -L$$(LOG4CPP_HOME)/lib } INCLUDEPATH += src \ src/Background \ src/Callback \ src/Checker \ src/Checklist \ src/Cmd \ src/Color \ src/Coord \ src/CoordSystem \ src/Correlation \ src/Cursor \ src/Curve \ src/DigitizeState \ src/Dlg \ src/Document \ src/Export \ src/FileCmd \ src/Filter \ src/Fitting \ src/Format \ src/Geometry \ src/Ghosts \ src/Graphics \ src/Grid \ src/Help \ src/img \ src/Import \ src/include \ src/Line \ src/Load \ src/Logger \ src/main \ src/Matrix \ src/Mime \ src/Network \ src/NonPdf \ src/Ordinal \ src/Pdf \ src/Plot \ src/Point \ src/ScaleBar \ src/Segment \ src/Settings \ src/Spline \ src/StatusBar \ src/Transformation \ src/Translator \ src/Tutorial \ src/util \ src/View \ src/Window \ src/Zoom win32-* { INCLUDEPATH += $$(FFTW_HOME)/include \ $$(LOG4CPP_HOME)/include } RESOURCES += src/engauge.qrc CONFIG(debug,debug|release) { message("Build type: debug") } else { message("Build type: release") } jpeg2000 { message("JPEG2000 support: yes") _OPENJPEG_INCLUDE = $$(OPENJPEG_INCLUDE) _OPENJPEG_LIB = $$(OPENJPEG_LIB) isEmpty(_OPENJPEG_INCLUDE) { error("OPENJPEG_INCLUDE and OPENJPEG_LIB environment variables must be defined") } else { isEmpty(_OPENJPEG_LIB) { error("OPENJPEG_INCLUDE and OPENJPEG_LIB environment variables must be defined") } } DEFINES += "ENGAUGE_JPEG2000" INCLUDEPATH += $$(OPENJPEG_INCLUDE) \ src/Jpeg2000 LIBS += -L$$(OPENJPEG_LIB) -lopenjp2 HEADERS += src/Jpeg2000/Jpeg2000.h \ src/Jpeg2000/Jpeg2000Callbacks.h \ src/Jpeg2000/Jpeg2000Color.h \ src/Jpeg2000/Jpeg2000Convert.h \ src/Jpeg2000/Jpeg2000FormatDefs.h SOURCES += src/Jpeg2000/Jpeg2000.cpp \ src/Jpeg2000/Jpeg2000Callbacks.cpp \ src/Jpeg2000/Jpeg2000Color.cpp \ src/Jpeg2000/Jpeg2000Convert.cpp QMAKE_LFLAGS += -Wl,-rpath=\'\$\$ORIGIN\' QMAKE_POST_LINK += cp $$(OPENJPEG_LIB)/libopenjp2.so.7 bin } else { message("JPEG2000 support: no") } pdf { message("PDF support: yes") _POPPLER_INCLUDE = $$(POPPLER_INCLUDE) _POPPLER_LIB = $$(POPPLER_LIB) isEmpty(_POPPLER_INCLUDE) { error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined") } else { isEmpty(_POPPLER_LIB) { error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined") } } DEFINES += "ENGAUGE_PDF" LIBS += -L$$(POPPLER_LIB) -lpoppler-qt5 INCLUDEPATH += $$(POPPLER_INCLUDE) HEADERS += src/Dlg/DlgImportCroppingPdf.h \ src/Import/ImportCroppingUtilPdf.h \ src/Pdf/Pdf.h \ src/Pdf/PdfCropping.h \ src/Pdf/PdfFrameHandle.h SOURCES += src/Dlg/DlgImportCroppingPdf.cpp \ src/Import/ImportCroppingUtilPdf.cpp \ src/Pdf/Pdf.cpp \ src/Pdf/PdfCropping.cpp \ src/Pdf/PdfFrameHandle.cpp } else { message("PDF support: no") } # People interested in translating a language can contact the developers for help. # # Translation file names are 'engauge_XX_YY' or 'engauge_XX' where: # XX = two letter language codes in column '639-1' at https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes # YY = two letter country codes in column 'ISO 3166-2' at https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 # where XX and YY are: # ar = Arabic Egypt=_eg # cs = Czech Czech Republic=_cs # de = German Germany=_de # en = English USA=us # es = Spanish Spain=_es # fr = French France=_fr # hi = Hindi India=_in # it = Italian Italy=_it # ja = Japanese Japan=_jp # kk = Kazakh Kazakhstan=_kz # ko = Korean SouthKorea=_kr # pt = Portuguese Brazil=_br # ru = Russian Federation=_ru # zh = Chinese China=_cn # When the user picks an (XX_YY) locale in Settings / Main Window and restarts Engauge, Engauge follows these steps to load: # 1) 'engauge_XX_YY' is loaded if it exists and locale loading finishes # 2) 'engauge_XX' is loaded if it exists and step 1 failed, and locale loading finishes # 3) the default locale is loaded and steps 1 and 2 failed # In other words, translations specific to a country are loaded if available, otherwise translations for a language # (which often apply to multiple countries) are loaded. TRANSLATIONS = translations/engauge_ar.ts \ translations/engauge_cs.ts \ translations/engauge_de.ts \ translations/engauge_en.ts \ translations/engauge_es.ts \ translations/engauge_fr.ts \ translations/engauge_hi.ts \ translations/engauge_it.ts \ translations/engauge_ja.ts \ translations/engauge_kk.ts \ translations/engauge_ko.ts \ translations/engauge_pt.ts \ translations/engauge_ru.ts \ translations/engauge_zh.ts engauge-digitizer-10.4+ds.1/help/000077500000000000000000000000001316740757700165535ustar00rootroot00000000000000engauge-digitizer-10.4+ds.1/help/.gitignore000066400000000000000000000000131316740757700205350ustar00rootroot00000000000000engauge.qchengauge-digitizer-10.4+ds.1/help/animation.png000066400000000000000000000006661316740757700212500ustar00rootroot00000000000000PNG  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-10.4+ds.1/help/answerdiscretizing.html000066400000000000000000000070221316740757700233600ustar00rootroot00000000000000 Engauge Digitizer - Discretizing

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-10.4+ds.1/help/answerfloatingaxes.html000066400000000000000000000020121316740757700233400ustar00rootroot00000000000000 Engauge Digitizer - Floating Axes

Engauge Digitizer - Floating Axes

A graph with floating axes (i.e. one or both axes has an unknown coordinate) can be digitized in Engauge.

The following steps digitize a graph with floating axes:

  • Obtain an image file (bitmap, jpeg or other) with floating axes
  • Import the file using the Import(Advanced) menu option:
    • File/Import(Advanced) menu option
    • For the axes point count, select 4 points.
    • Click on Ok
  • Create four axes points, and specify one coordinate value for each of those axes points.
engauge-digitizer-10.4+ds.1/help/answerlinegraph.html000066400000000000000000000066361316740757700226450ustar00rootroot00000000000000 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/Background/Show Filtered 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-10.4+ds.1/help/answermeasuring.html000066400000000000000000000020341316740757700226520ustar00rootroot00000000000000 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-10.4+ds.1/help/answermultiplecoordsystems.html000066400000000000000000000024401316740757700251730ustar00rootroot00000000000000 Engauge Digitizer - Multiple Coordinate Systems In One Graph

Engauge Digitizer - Multiple Coordinate Systems In One Graph

A graph with multiple coordinate systems, each defined by a pair of x/y axes, can be digitized in Engauge.

The following steps digitize a graph with multiple coordinate systems:

  • Obtain an image file (bitmap, jpeg or other) showing multiple coordinate systems
  • Import the file using the Import(Advanced) menu option:
    • File/Import(Advanced) menu option
    • Select the coordinate system count
    • Click on Ok
  • Select a coordinate system using the dropdown list in the Coordinate System Toolbar.
  • Digitize the currently selected coordinate system using the same steps used for a a single coordinate system
  • Repeat the previous two steps for each coordinate system
engauge-digitizer-10.4+ds.1/help/answerother.html000066400000000000000000000024431316740757700220050ustar00rootroot00000000000000 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-10.4+ds.1/help/answerout.html000066400000000000000000000036651316740757700215020ustar00rootroot00000000000000 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-10.4+ds.1/help/answerpointgraph.html000066400000000000000000000073571316740757700230500ustar00rootroot00000000000000 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/Background/Show Filtered 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-10.4+ds.1/help/answerselecting.html000066400000000000000000000030001316740757700226270ustar00rootroot00000000000000 Engauge Digitizer - Discretizing

Engauge Digitizer - Selecting Points


Selecting one or more points

To select one or more axis or graph points using the Select Tool, either one of the following options can be used:

  1. Option 1 - Left click on one axis or curve point, and then release the mouse button
  2. Option 2- Left click and then drag to select all curve points within the rectangular box, and then release the mouse button

If successful, the result should be one or more selected points. Each selected point will have a dashed square around it.

Editing one or more points

To edit one or more axis or graph points, the following steps are required:

  1. Step 1 - Select the desired point(s) using the Select Tool (see above)
  2. Step 2 - Right click on one of the selected points

Note: