ktikz-0.12/000077500000000000000000000000001325124551100125675ustar00rootroot00000000000000ktikz-0.12/.travis.yml000066400000000000000000000012041325124551100146750ustar00rootroot00000000000000env: global: - MAKEFLAGS="-j 2" language: cpp dist: xenial before_install: - sudo apt-get -qq update - sudo apt-get install -y build-essential preview-latex-style - sudo apt-get install -y qtbase5-dev qttools5-dev qttools5-dev-tools libpoppler-qt5-dev - sudo apt-get install -y cmake extra-cmake-modules kdoctools-dev libkf5iconthemes-dev libkf5kdelibs4support-dev libkf5parts-dev libkf5texteditor-dev libkf5xmlgui-dev libpoppler-qt5-dev libqt5sql5-sqlite pkg-config script: - mkdir buildqt && cd buildqt && QT_SELECT=5 qmake ../qtikz.pro && QT_SELECT=5 make && cd .. - mkdir build && cd build && cmake .. && make && cd .. ktikz-0.12/CMakeLists.txt000066400000000000000000000031651325124551100153340ustar00rootroot00000000000000project(ktikz) cmake_minimum_required(VERSION 2.8.12) set(KTIKZ_VERSION "0.12") add_definitions(-DORGNAME=\"Florian_Hackenberger\" -DAPPNAME=\"ktikz\") add_definitions(-DAPPVERSION=\"${KTIKZ_VERSION}\") add_definitions(-DKTIKZ_USE_DESKTOP_ICONS) add_definitions(-DKTIKZ_USE_KDE) add_definitions(-DKTIKZ_TIKZ_DOCUMENTATION_DEFAULT=\"/usr/share/doc/texmf/pgf/pgfmanual.pdf.gz\") find_package(ECM 1.1.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}) include(ECMSetupVersion) include(ECMAddAppIcon) include(ECMInstallIcons) find_package(Qt5 5.2 CONFIG REQUIRED Core Gui Widgets Xml PrintSupport LinguistTools ) find_package(KF5 5.0 REQUIRED DocTools XmlGui TextEditor Parts IconThemes ) include(KDEInstallDirs) include(KDECompilerSettings) include(KDECMakeSettings) include(FeatureSummary) # include(KDEFrameworkCompilerSettings) find_package(Poppler "0.12.1" REQUIRED Qt5 Core) set_package_properties("Poppler-Qt5" PROPERTIES DESCRIPTION "A PDF rendering library" URL "http://poppler.freedesktop.org" TYPE REQUIRED PURPOSE "Support for PDF files in KTikZ.") include_directories( ${Poppler_INCLUDE_DIRS} ) add_subdirectory(app) add_subdirectory(part) add_subdirectory(doc) add_subdirectory(translations) add_subdirectory(data) # Remove directories add_custom_target(uninstalldirs) # add_dependencies(uninstalldirs uninstalldirs_app uninstalldirs_part uninstalldirs_doc) add_dependencies(uninstalldirs uninstalldirs_app uninstalldirs_doc) # Make packages include(KtikzCPackOptions.cmake) include(CPack) add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) ktikz-0.12/Changelog000066400000000000000000000443611325124551100144110ustar00rootroot00000000000000version 0.12: - port to kde frameworks and remove unused classes - "Edit template" button now uses the default text editor instead of the one selected in settings version 0.11: - show in the statusbar the x- and y-coordinates of the mouse cursor according to the tikzpicture's coordinate system - add the directory in which the pgf file is located to TEXINPUTS - add Czech translation (by Pavel Fric) - add JPEG, TIFF, BMP to the Export menu - in multiple images mode, export to EPS now exports the currently visible image (instead of giving an error) - add printing of the preview image - in multiple image mode, the export dialog automatically appends the number of the current image to the file name - let the built-in template also work with xelatex - check whether the file has been modified by another program when ktikz gets the focus or when the user saves or closes the file (similar to kwrite) - rearrange "Insert" menu - improve syntax highlighting (now path commands such as ".. controls", "parabola", ... are highlighted too) - remove bug in the Qt-only version which caused in the config dialog the "TikZ documentation" to contain the list of all occurrences of pgfmanual.* when more than one was found in the LaTeX trees, now only the first occurrence is shown - in the "Insert" menu, show the description of the currently highlighted item at the bottom of the current submenu (instead of only showing it in the statusbar which could be covered by those submenus) - sort the entries in the completion box - correct tab order so that pressing the Tab-key when the "Edit template" button is focussed, switches the focus to the editor (instead of the preview) - abort still running process before starting a new one (without this, if a LaTeX compilation process hangs, all subsequently started processes are executed one after the other when the user aborts the hanging process) - update list of tikz commands in the "Insert" menu - let the mouse "back" and "forward" button (the buttons on the sides of the mouse) switch the image in multiple image mode (if these buttons exist) - remove bug which caused the preview to slightly move to the left/top each time it was generated until the left/top edge is reached (this happened when the width/height of the preview window is an odd integer) - remove bugs which caused incorrect recentering of the preview when zooming - the text box showing the messages in the preview is now centered correctly - remove bug in preview rendering: remove flicker while zooming fast - don't show the "Reload" and "Edit" button in the template widget in the kpart (the purpose of the kpart is viewing, not editing, and there is already a "Reload" action in Konqueror) - remove bug: if non-Latin UTF-8 characters are used in the editor then they are not correctly written to the file when the file is saved - add an "About KtikZ Viewer" item in Konqueror's "Help" menu (when the kpart is used) - let the actions of the kpart go in a separate section labeled "KtikZ Viewer" in the "Configure Shortcuts" dialog - update code snippets for circle, ellipse and arc to TikZ v2.10 - remove bug: searching a string doesn't find the very first word of the document if it matches - remove bug: replacing a string and pressing "Ctrl+F" again when the "Replace ... by ...?" box is visible doesn't hide that box, so both that box and the "Search and Replace" box are visible - remove bug: sometimes when indenting a highlighted text consisting of several lines, the last line is not indented - replace the "Indent" dialog by an "Indent" box (similar to the "Find and Replace" box) - when the Tab key is pressed when the cursor is in the white space at the beginning of the line or when more than one line is selected, the corresponding lines are indented using the indentation character and the number of indentations last specified in the "Indent" box - add an "Unindent" action; pressing the Shift+Tab key has a similar effect as pressing the Tab key described above, but for unindenting - make sure that the temporary files are also deleted when a session in the desktop environment ends - add menu with user defined code snippets - remove bug: in the Qt-only version, when an empty window is opened and a new window is opened and closed, then the temporary directory is removed, so in the first window no preview can be successfully generated - allow multiple files to be opened from the command line - in session management the line number in which the text cursor is, is remembered during startup of the new session - add line number area to the left of the editor - add bookmark functionality - display error message when export to EPS, JPEG, ... fails - have more sensible sizes for the main window and the preview panel on first run (for screens larger than 1024x768) - remove bug in syntax highlighting: \filldraw is incorrectly highlighted - allow configuring the current line highlight - remove bug: the scrollbars in the preview remain visible after closing the file - add support for Qt5 version 0.10 (2010-08-26): - KDE integration (the possibility to compile Qt-only still exists) - template files on remote machines can be used using KIO (only in the KDE version) - TikZ source files on remote machines can be loaded, saved and exported using KIO (only in the KDE version) - error messages while generating the preview are shown in the preview window itself - zooming is done in a separate thread now, so the interface is not blocked when zooming at large sizes - a kpart is available that can be used to view TikZ source files in konqueror (the kpart opens files having the text/x-pgf mimetype) - update list of tikz commands - remove bug which causes ktikz to hang (since Qt 4.6) when typesetting a picture - remove bug: cannot find TikZ documentation when selecting "TikZ Manual" in the Help menu, even if configured correctly - display description of a newly inserted tikz command (using command completion or menu) in the statusbar, so that the user still sees the usage of a command after it is inserted - add option to compile the TikZ code only when pushing a "Build" button - add reload button - add shell script and ktikz template to the examples directory which can be used to generate the preview with the latex; dvips; ps2pdf sequence instead of pdflatex (the usage is described in the shell script code) - check whether the file has changed when ktikz gets the focus (similar to kwrite) - in the kpart check for file changes and reload if there are any (similar as in okular) - the zoom percentage field is now displayed and edited in the user's locale - added documentation - remove bug: when the error box is larger than the preview and the next compilation does not give errors, the error box is still visible outside the area covered by the preview - try to find or use the default hard-coded (configurable in conf.pri and CMakeLists.txt) path to the TikZ documentation when an empty path is stored in the local settings (this is the case e.g. when ktikz is run for the first time) - when inserting code using code-completion, the arguments and options that must be filled in are marked by a bullet, the bullets can be browsed with the Tab-key - now also an URL to an online version of the TikZ documentation can be specified in the configuration dialog - an icon for Windows and an NSIS Windows Installer script are now available - the "Insert" menu is now also translated version 0.9 (2009-09-10): - remove bug that on startup the item selected in the template combobox did not correspond to the text in the lineedit of the combobox - correct the height of the lineedits in the configuration dialog - the path to the TikZ documentation must now be set in the configuration dialog - don't wait one second before generating the preview when a file is loaded, the template is changed or shell escaping is toggled - only files are used now as a template file (previously directories and everything with a valid path was used), otherwise the default template is used - if the replacement text is empty, then the default template is used instead of giving non-informative errors - when the commands dock is visible (instead of the menu), the code that will be inserted is visible in the status bar on hovering the item in the list - clicking on an item in the commands dock only includes the corresponding code once (instead of twice) - added file name completion to the template line edit and the line edits in the configuration dialog - space and tab markers resize according to the font size of the main text - the color of the space and tab markers can be changed in the configuration dialog - white space and tabulator settings are separate now - scrolling in the text edit with the arrow keys is faster now - better completion of \begin{... and \end{... - allow to use the icons set in KDE4 when the appropriate variable in conf.pri is set - remove bug that the "Next Image" and "Previous Image" buttons remained visible when emptying the code text area - remove bug: statustip of the toggle view actions in the Settings menu is not shown when a toolbar or sidebar is hidden on startup - add support for session management (open windows will be reopened after logging out and logging in again) - added option in the config dialog to enable/disable completion of the tikz commands - trying to open a file from the "Open Recent" menu that does not exist anymore does not cause an empty window to be opened anymore, furthermore the file is removed from the "Open Recent" list Version 0.8 (2009-05-25): - allow text under icons in toolbar - remove bug: when a second ktikz window is closed while typesetting, the cursor is not restored from busy to normal - remove bug: when the document is untitled and not yet saved, then opening a file opens the file in the current window, destroying the unsaved text - added some tikz commands to the list of commands - disable "Save" and "Save As" actions when the file in the text editor is the same as on disk - replace the "Replace this occurrence" dialog by a widget shown at the bottom of the text editor - added filter "PGF files" in "Open File" dialog - the previously selected templates can now be selected from a combobox - added "Clear" button to each line edit - remove bug: the size of the default font did not change after setting a new font size in the config dialog - new way of writing the temporary latex and pgf files, this also solves the bug in which the line numbers in the log window did not correspond to the line numbers in the editor - each time the template is changed a new QTemporaryFile is used, this avoids the bug that if the template contains less characters, then the bottom of the old template is still there in the file (luckily latex stops parsing at the first \end{document}, so this bug was not visible) - allow to use KDE4 file dialogs when the appropriate variable in conf.pri is set - remove bug (I hope) that caused ktikz to crash when zooming while ktikz is typesetting Version 0.7 (2008-08-26): - disable previous image button if the first image is shown, disable next image button if the last image is shown - the first time that the End button is pressed the cursor is moved to the end of the line (on screen), the second time the cursor is moved to the end of the block (end of the line in the file) - don't run latex on startup when no document is loaded from the command line - adjust size of the viewport in which the preview is displayed when new items are added to the tikz picture - added completion of the tikz commands - the tikz commands are now loaded from an XML file - corrected the size of the colored background around the highlighted brackets - remove bug in ConfigDialog::selectFont() (replace "if (&ok)" by "if (ok)") - the command "New" in the "File" menu now opens a new empty window, the commands "Open" and "Open Recent" open the selected file in a new window, a "Close" command is added which empties the current window - the (empty) document is not typesetted anymore when the "Close" command (which has the same behavior as the old "New" command) is executed - add the directory in which the template file is located to the $TEXINPUTS environment variable (useful if the template \inputs other files) - layout changes in the configuration dialog Version 0.6 (2008-02-25): - added find and replace - added go to line - added indent selected paragraph - remove crash when first character of the document is '\' - allow usage of -shell-escape, so that functions can be plotted using gnuplot from within tikz - added highlighting of the current line in code editor - added show white spaces - added show matching brackets - allow scrolling of code editor without moving the cursor with Ctrl+Up and Ctrl+Down - added template support for the LaTeX file in which the PGF picture is included - updated the icons to the latest version of Oxygen (now available at svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase/runtime/pics/oxygen/) Version 0.5 (2007-10-02): - removed memory leaks - added Qt logo to the "About Qt" item in the Help menu - zooming now keeps the same object in the center of the visible area that was previously in the center (instead of scrolling to position (0,0)) - the tikz commands can be inserted from either a menu or a dockwidget - more tikz commands are added to the menu/dockwidget - put the preview area in a dock widget which allows more flexibility than a splitter - added an item in the "Help" menu for opening the file pgfmanual.pdf in the PDF viewer configured in the system (if that file is located somewhere in the LaTeX texmf tree) - switched to poppler version 0.6 - removed bug in the config dialog which caused the table items to not be shown as disabled upon opening the config dialog when the highlighting is set to standard - added a What's This button in the configuration dialog - remove crash when zooming at startup before loading or editing tikz code - ktikz now remembers the zoom factor from the previous session - the application icon is now also installed and is referred to in the desktop file (so the icon also appears in the KMenu) - the build files (*.o *.ui moc_* qrc_*) are now put in a separate build directory (when building), leaving the source directory clean Version 0.4 (2007-08-13): - added German translation - show status tip for the "Open Recent" and "Export" submenus - it is now possible to have more than one image in one document: just put the different tikzpictures one below the other in the code and then press the "Show previous image" and "Show next image" button to browse between the previews (but it is not possible to save or export them separately) - the previous picture is not displayed anymore in the preview when the text edit becomes empty (or when the user starts a new document) - the document modification status is shown correctly now in the title bar - the preview can be scrolled by dragging the image - added undo, redo and select all to the Edit menu and to the toolbar - added comment/uncomment of the current line or selection - the scrollbars will disappear if the image becomes smaller than the view when zooming out - added a menu with tikz commands - a better highlighting of the tikz code is implemented based on the contents of the tikz commands menu - made an application icon (I just took the kate icon from oxygen and added the text "KTikZ", the text in the icon is in the Fertigo font from http://www.josbuivenga.demon.nl/fertigo.html) - added What's This texts for most widgets and icons - added a configuration dialog (the highlighting colors and fonts, the number of entries in the "Open Recent" menu and the path to pdflatex and pdftops can be set) - messages on standard output are only shown when compiled in debug mode - in the log box short messages are shown instead of the contents of the log file; the contents of the log file can be viewed by pressing the "View Log" button - added an "Abort typesetting" button; for example, typesetting the following code never exits: \begin{tikzpicture}[x=1cm,y=1cm % note the missing ] \draw[->] (0,0) -- (4,0); \end{tikzpicture} - added a context menu to the preview area - more sensible default sizes for the different widgets in the main window on first startup Version 0.3 (2007-08-06): - show in the statusbar the position of the cursor in the text edit - the preview image (in PDF format) is displayed using poppler instead of converting the PDF file to PNG first and displaying the PNG file (poppler version 0.5.4 is used) - added zooming of the image (using poppler) - export to PNG is done directly in Qt now; as a consequence (of this and of using poppler to display the preview image) ktikz no longer depends on ImageMagick - added "Open Recent" menu - if ktikz is run on the command line, then it loads the first argument (if it is a valid file name) - the open/save file dialog remembers the last directory in which a PGF source file was opened/saved - loading of translations if available - added French translation - changed qmake files so that the files will be installed in the correct place (the installation prefix can be configured in the file conf.pri) - the wait cursor is displayed while typesetting the PGF picture to PDF Version 0.2 (2007-08-02): - replaced the icons in XPM format by icons in PNG format from KDE4's Oxygen theme (obtained from svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs/pics/oxygen) - placed the text edit and the preview area in a splitter so that their relative width can be changed by the user - placed the log text edit in a dockwidget (which can be hidden) - temporary files are now put in QDir::tempPath() + "/ktikz" (on Linux this is /tmp/ktikz), so your working directory remains clean - closing the application now removes all temporary files and stops the thread - the first time that the thread (generating the output image) is executed is not on startup anymore, but when the user actually changes the text or loads a file - images can now be exported to EPS, PDF and PNG - for some standard actions, the standard key sequence is used (e.g. QKeySequence::Open instead of Ctrl+O) - the toolbars can be hidden - corrected typo "TiKz" to "TikZ" - a function runProcess is used which makes the code of generatePdfFile and generatePngFile easier (in tikzpngpreviewer.cpp) - made a better about dialog ktikz-0.12/Doxyfile000066400000000000000000000244441325124551100143050ustar00rootroot00000000000000# Doxyfile 1.5.1-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = ktikz PROJECT_NUMBER = 0.11 OUTPUT_DIRECTORY = apidocs CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES #STRIP_FROM_PATH = /home/hacki/Documents/projects/autonomous_flying/ufo2/src/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO BUILTIN_STL_SUPPORT = NO DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- #INPUT = /home/hacki/Documents/sandbox/master_thesis/trunk/figures_source/backup_diagram/ktikz FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.PY \ *.C \ *.H \ *.tlh \ *.diff \ *.patch \ *.moc \ *.xpm \ *.dox RECURSIVE = yes EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */build/* */buildqt/* EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = YES LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = yes XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ktikz.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO ktikz-0.12/FindPoppler.cmake000066400000000000000000000134311325124551100160150ustar00rootroot00000000000000#.rst: # FindPoppler # ----------- # # Try to find Poppler. # # This is a component-based find module, which makes use of the COMPONENTS # and OPTIONAL_COMPONENTS arguments to find_module. The following components # are available:: # # Core Cpp Qt5 Qt4 Glib # # If no components are specified, this module will act as though all components # were passed to OPTIONAL_COMPONENTS. # # This module will define the following variables, independently of the # components searched for or found: # # ``Poppler_FOUND`` # TRUE if (the requested version of) Poppler is available # ``Poppler_VERSION`` # Found Poppler version # ``Poppler_TARGETS`` # A list of all targets imported by this module (note that there may be more # than the components that were requested) # ``Poppler_LIBRARIES`` # This can be passed to target_link_libraries() instead of the imported # targets # ``Poppler_INCLUDE_DIRS`` # This should be passed to target_include_directories() if the targets are # not used for linking # ``Poppler_DEFINITIONS`` # This should be passed to target_compile_options() if the targets are not # used for linking # # For each searched-for components, ``Poppler__FOUND`` will be set to # TRUE if the corresponding Poppler library was found, and FALSE otherwise. If # ``Poppler__FOUND`` is TRUE, the imported target # ``Poppler::`` will be defined. This module will also attempt to # determine ``Poppler_*_VERSION`` variables for each imported target, although # ``Poppler_VERSION`` should normally be sufficient. # # In general we recommend using the imported targets, as they are easier to use # and provide more control. Bear in mind, however, that if any target is in the # link interface of an exported library, it must be made available by the # package config file. # # Since 5.19 #============================================================================= # Copyright 2015 Alex Richardson # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= include(/usr/share/ECM/modules/ECMFindModuleHelpers.cmake) ecm_find_package_version_check(Poppler) set(Poppler_known_components Cpp Qt4 Qt5 Glib ) foreach(_comp ${Poppler_known_components}) string(TOLOWER "${_comp}" _lc_comp) set(Poppler_${_comp}_component_deps "Core") set(Poppler_${_comp}_pkg_config "poppler-${_lc_comp}") set(Poppler_${_comp}_lib "poppler-${_lc_comp}") set(Poppler_${_comp}_header_subdir "poppler/${_lc_comp}") endforeach() set(Poppler_known_components Core ${Poppler_known_components}) set(Poppler_Core_component_deps "") set(Poppler_Core_pkg_config "poppler") # poppler-config.h header is only installed with --enable-xpdf-headers # fall back to using any header from a submodule with a path to make it work in that case too set(Poppler_Core_header "poppler-config.h" "cpp/poppler-version.h" "qt5/poppler-qt5.h" "qt4/poppler-qt4.h" "glib/poppler.h") set(Poppler_Core_header_subdir "poppler") set(Poppler_Core_lib "poppler") set(Poppler_Cpp_header "poppler-version.h") set(Poppler_Qt5_header "poppler-qt5.h") set(Poppler_Qt4_header "poppler-qt4.h") set(Poppler_Glib_header "poppler.h") ecm_find_package_parse_components(Poppler RESULT_VAR Poppler_components KNOWN_COMPONENTS ${Poppler_known_components} ) ecm_find_package_handle_library_components(Poppler COMPONENTS ${Poppler_components} ) # If pkg-config didn't provide us with version information, # try to extract it from poppler-version.h or poppler-config.h if(NOT Poppler_VERSION) find_file(Poppler_VERSION_HEADER NAMES "poppler-config.h" "cpp/poppler-version.h" HINTS ${Poppler_INCLUDE_DIRS} PATH_SUFFIXES ${Poppler_Core_header_subdir} ) mark_as_advanced(Poppler_VERSION_HEADER) if(Poppler_VERSION_HEADER) file(READ ${Poppler_VERSION_HEADER} _poppler_version_header_contents) string(REGEX REPLACE "^.*[ \t]+POPPLER_VERSION[ \t]+\"([0-9d.]*)\".*$" "\\1" Poppler_VERSION "${_poppler_version_header_contents}" ) unset(_poppler_version_header_contents) endif() endif() find_package_handle_standard_args(Poppler FOUND_VAR Poppler_FOUND REQUIRED_VARS Poppler_LIBRARIES VERSION_VAR Poppler_VERSION HANDLE_COMPONENTS ) include(FeatureSummary) set_package_properties(Poppler PROPERTIES DESCRIPTION "A PDF rendering library" URL "http://poppler.freedesktop.org" ) ktikz-0.12/HACKING000066400000000000000000000044501325124551100135610ustar00rootroot00000000000000This file contains notes for developers of ktikz. Translation: ------------ The translation specific issues are described in translations/README Generating the documentation: ----------------------------- For the KDE version, all you need to do is edit the doc/*.docbook files. For the Qt-only version, the procedure is more complicated. After you have edited the *.docbook files, you must run ./generate-qt-doc.sh in the doc directory in order to regenerate the file doc/index.html. However, if the documentation is edited or if some features are added, then it might be necessary to change the "sed" lines in generate-qt-doc.sh before running this script. After generating the documentation, they will be compiled and installed when you run (both for the Qt-only and the KDE version): make sudo make install Generating the icons: --------------------- The app/icons/qtikz.svg and app/icons/ktikz.svg icons are derived from the accessories-text-editor icon in KDE's Oxygen icon set, in Inkscape the "Lorem ipsum..." text is removed and the QtikZ/KtikZ text is added using the Prociono font (http://www.fontsquirrel.com/fonts/Prociono). The PNG versions of these icons in different sizes are all obtained by opening the SVG versions in the GIMP, selecting the appropriate size when the SVG file is opened and saving the file as PNG. The Windows qtikz.ico version is obtained by converting qtikz.svg online at http://www.convertico.com (the free png2ico does not give a result of similar quality). The other icons (except qt-logo-22.png which is obtained from Qt) are obtained from KDE's Oxygen icon set. Performance: ------------ - Use the QWidget's palette() function to obtain the current palette (which is the default palette if the QWidget's palette has not yet been changed) or QApplication::palette() instead of QApplication::style()->standardPalette() which is significantly slower. - In order to measure the execution speed, put #include #include and use QTime t = QTime::currentTime(); and qCritical() << t.msecsTo(QTime::currentTime()); to calculate the time spent between these two commands. Running valgrind --tool=callgrind qtikz on the command line and using kcachegrind to visualize the output generated by valgrind also shows where time is spent during execution of the program. ktikz-0.12/INSTALL000066400000000000000000000053071325124551100136250ustar00rootroot00000000000000The following are required for compilation: - an ordinary C++ development environment (g++, make, C++ libraries and headers, ...) - cmake (if you want to install the KPart) - a standard LaTeX environment - a Qt 4 development environment (libraries, headers, qmake, ...): only QtCore, QtGui and QtXml are required, at least in version 4.6 - the poppler-qt4 libraries and headers, at least in version 0.6 - the kdelibs development environment (only if you want KDE integration and the KPart), at least in version 4.3 - the LaTeX pgf package (which includes TikZ) - the LaTeX preview package In Ubuntu you would obtain those by installing the following packages: - build-essential - cmake (if you want to install the KDE version) - libqt4-dev - qt4-dev-tools - libpoppler-qt4-dev - kdelibs5-dev (only if you want KDE integration and the KPart) - pgf - preview-latex-style Install the Qt-only (qtikz) application (using qmake): ------------------------------------------------------ 1. Edit the paths in qmake/qtikzconfig.pri 2. Run the following commands (this will create an executable named qtikz): mkdir buildqt cd buildqt qmake ../qtikz.pro make sudo make install sudo update-mime-database /usr/share/mime Note that qmake will tell you where the files will be installed. If you don't like the installation directories, you can change them in the file qmake/qtikzconfig.pri before running make. Make sure to make the changes in qmake/qtikzconfig.pri before running make. In order to uninstall qtikz run the following commands in the build directory: sudo make uninstall sudo update-mime-database /usr/share/mime Install the KDE (ktikz) application and the KPart (using cmake): ---------------------------------------------------------------- Run the following commands (this will create an executable named ktikz and a KPart which will be loaded when clicking a *.pgf or *.tikz file in Konqueror): mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` .. make sudo make install Because a new mimetype (text/x-pgf) is added to the system, as a user one may additionally have to run kbuildsycoca4 or restart KDE so that konqueror uses the KPart for this mimetype. In order to uninstall ktikz run the following commands in the build directory (the path in the last command depends of course on where the mimetype was installed, see the output of the make uninstall command for the correct path): sudo make uninstall sudo update-mime-database /usr/share/mime You may additionally run the following command to remove the installation directories created during "make install" (WARNING: this will also remove the directories if they are not empty, use at your own risk): sudo make uninstalldirs ktikz-0.12/INSTALL-0.10.Windows000066400000000000000000000047061325124551100156340ustar00rootroot00000000000000The following instructions describe how I (Glad Deschrijver) managed to compile QtikZ under Windows. Install dependencies: --------------------- 1. First download the LGPL version of the "Qt SDK for Windows" at http://qt.nokia.com/downloads Install the Qt SDK by running the downloaded file. Select MinGW gcc as the compiler. 2. Download "KDE for Windows" at http://windows.kde.org/download.php and follow the installation instructions at http://techbase.kde.org/Projects/KDE_on_Windows/Installation Select the "End User" install mode and the "MinGW" compiler mode. In the "Package Selection" select to install "okular" (its dependencies including the poppler libs will be included automatically). 3. Copy the DLL files of poppler and its dependencies from the bin directory inside the "KDE for Windows" installation directory to the win32/poppler directory in the qtikz source directory. The following DLL files must be copied: iconv.dll jpeg62.dll libfontconfig.dll libfreetype.dll liblcms-1.dll libopenjpeg.dll libpng12.dll libpoppler.dll libpoppler-qt4.dll libxml2.dll zlib1.dll After this stage, "KDE for Windows" can be uninstalled as it is not needed for compiling or running qtikz. 4. Download the poppler source code from http://poppler.freedesktop.org/ and extract the following header files from the downloaded .tar.gz file and put them also in the win32/poppler directory: poppler-annotation.h poppler-export.h poppler-link.h poppler-optcontent.h poppler-page-transition.h poppler-qt4.h Compile qtikz: -------------- Open Qt Creator, select in the "File" menu "Open File or Project" and click on qtikz.pro in the qtikz source directory. In the Qt Creator main window select "Projects", in the "Build Steps" click on "Add build step" -> "Make" and change the "Make arguments" to "install" (without the quotes). Then push the "Build All" button to install qtikz. You will find the qtikz.exe executable in the directory specified in the PREFIX variable in defaults.pri (in the win32 section of that file) or conf.pri. Alternatively, launch the "Qt command prompt" in the Qt submenu of the Windows Start menu and in the qtikz source directory run the following commands: qmake qtikz.pro mingw32-make mingw32-make install Create installer: ----------------- Download NSIS (Nullsoft Scriptable Install System) from http://nsis.sourceforge.net/Download Run the qtikz.nsi script in the installation directory to create the Windows installer. ktikz-0.12/INSTALL-0.11.Windows000066400000000000000000000114061325124551100156300ustar00rootroot00000000000000The following instructions describe how I (Glad Deschrijver) managed to compile QtikZ under Windows. Initialization: --------------- 0. Get TortoiseSVN at http://tortoisesvn.net/downloads.html and install it. Create a folder named "ktikz" wherever you want to have to source of ktikz, right-click on the new folder and select "TortoiseSVN" -> "Checkout". Enter the URL of the checkout: svn://hackenberger.at/svnroot/ktikz/trunk and click on "OK". Get the Qt SDK at http://qt.nokia.com/downloads/ and install it. Get NSIS at http://nsis.sourceforge.net/Download and install it. Install dependencies: --------------------- 1. Download from http://www.gtk.org/download/win32.php the following packages (run-time version and developer version): - zlib - cairo - libpng - freetype - fontconfig 2. Download the openjpeg-*-win32-x86.zip file from http://code.google.com/p/openjpeg/ 3. Download tiff*-bin.zip and tiff*-lib.zip from http://sourceforge.net/projects/gnuwin32/files/tiff/ or http://gnuwin32.sourceforge.net/packages/tiff.htm 4. Download jpeg*-bin.zip and jpeg*-lib.zip from http://gnuwin32.sourceforge.net/packages/jpeg.htm 5. Extract all these packages. 6. Download the poppler source from http://poppler.freedesktop.org/ 7. Get the win32 installer of cmake from http://cmake.org/cmake/resources/software.html 8. Create directory named "build" (without the quotes) inside the extracted poppler source and go to it on the command line. 9. Add the following to the main CMakeLists.txt file (in the poppler source) at the top (change DEP_BASE_DIR to the directory in which you have extracted all the above packages; also update all version numbers below): set(DEP_BASE_DIR C:/Users/glad/Downloads/) set(FREETYPE_INCLUDE_DIR_freetype2 ${DEP_BASE_DIR}/freetype-dev_2.4.2-1_win32/include/freetype2) set(FREETYPE_INCLUDE_DIR_ft2build ${DEP_BASE_DIR}/freetype-dev_2.4.2-1_win32/include) set(FREETYPE_LIBRARY ${DEP_BASE_DIR}/freetype-dev_2.4.2-1_win32/lib/freetype.lib) set(CAIRO_INCLUDE_DIR ${DEP_BASE_DIR}/cairo-dev_1.10.2-2_win32/include/cairo) set(CAIRO_LIBRARY ${DEP_BASE_DIR}/cairo-dev_1.10.2-2_win32/lib/cairo.lib) set(LIBOPENJPEG_INCLUDE_DIR ${DEP_BASE_DIR}/openjpeg-1.5.0-win32-x86/include/openjpeg-1.5/) set(LIBOPENJPEG_LIBRARIES ${DEP_BASE_DIR}/openjpeg-1.5.0-win32-x86/lib/openjpeg.lib) set(PNG_PNG_INCLUDE_DIR ${DEP_BASE_DIR}/libpng-dev_1.4.3-1_win32/include) set(PNG_LIBRARY ${DEP_BASE_DIR}/libpng-dev_1.4.3-1_win32/lib/libpng.lib) set(JPEG_INCLUDE_DIR ${DEP_BASE_DIR}/jpeg-6b-4-lib/include) set(JPEG_LIBRARY ${DEP_BASE_DIR}/jpeg-6b-4-lib/lib/jpeg.lib) set(TIFF_INCLUDE_DIR ${DEP_BASE_DIR}/tiff-3.8.2-1-lib/include) set(TIFF_LIBRARY ${DEP_BASE_DIR}/tiff-3.8.2-1-lib/lib/libtiff.lib) set(ZLIB_INCLUDE_DIR ${DEP_BASE_DIR}/zlib-dev_1.2.5-2_win32/include) set(ZLIB_LIBRARY ${DEP_BASE_DIR}/zlib-dev_1.2.5-2_win32/lib/zdll.lib) include_directories(${DEP_BASE_DIR}/fontconfig-dev_2.8.0-2_win32/include/) 10. Run on the command line (remember that in step 8 you have already gone into the build directory of poppler): "C:\Program Files\CMake 2.8\bin\cmake.exe" -G "MinGW Makefiles" .. 11. Run on the command line: mingw32-make (this hopefully gets as far as it needs to have poppler, pdftops and poppler-qt4) 12. Copy from the binary zip files downloaded above the following files to the win32/poppler directory in the ktikz source: freetype6.dll jpeg62.dll libfontconfig-1.dll libpng14-14.dll libpoppler.dll (this is the compiled version from steps 8-9) libpoppler-qt4.dll (idem) libtiff3.dll openjpeg.dll zlib1.dll pdftops.exe (compiled in steps 8-9) poppler-annotation.h poppler-export.h poppler-link.h poppler-optcontent.h poppler-page-transition.h poppler-qt4.h Compile QtikZ: -------------- 13. Open Qt Creator, in the menu select "File" -> "Open File or Project". Select qtikz.pro in the main directory of the qtikz source. 14. In the Qt Creator main window select "Projects". Make sure that the correct Qt version is set. In the "Build Steps" click on "Add build step" -> "Make" and change the "Make arguments" to "install" (without the quotes). 15. Press the "Build All" button to install qtikz. You will find the qtikz.exe executable in the directory specified in the PREFIX variable in qtikzdefaults.pri (in the win32 section of that file) or in qtikzconfig.pri. Likely this directory is "C:\QtikZ". 16. Copy all the files mentioned in step 12 to this directory (if they are not already there). Double-click on qtikz.exe to test whether it runs. Create installer: ----------------- 17. Copy win32/qtikz-0.11.nsi to the directory mentioned in step 15 (if it is not already there), right-click on the copied file and select "Compile NSIS Script". This should create the installer. ktikz-0.12/KtikzCPackOptions.cmake000066400000000000000000000055621325124551100171530ustar00rootroot00000000000000set(KTIKZ_PACKAGE_NAME "KtikZ") include(InstallRequiredSystemLibraries) #set(CPACK_PACKAGE_NAME "KtikZ") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "KtikZ is a program for making pictures using TikZ") set(CPACK_PACKAGE_VENDOR "Florian Hackenberger") set(CPACK_PACKAGE_VERSION ${KTIKZ_VERSION}) #set(CPACK_PACKAGE_VERSION_MAJOR "0") #set(CPACK_PACKAGE_VERSION_MINOR "10") #set(CPACK_PACKAGE_VERSION_PATCH "0") string(REGEX REPLACE "\\..*" "" CPACK_PACKAGE_VERSION_MAJOR ${CPACK_PACKAGE_VERSION}) string(REGEX REPLACE "([0-9]*)\\.([0-9]*)(\\.([0-9]*))?" "\\2" CPACK_PACKAGE_VERSION_MINOR ${CPACK_PACKAGE_VERSION}) string(REGEX REPLACE "([0-9]*)\\.([0-9]*)(\\.)?" "" CPACK_PACKAGE_VERSION_PATCH ${CPACK_PACKAGE_VERSION}) if("${CPACK_PACKAGE_VERSION_PATCH}" STREQUAL "") # if ${CPACK_PACKAGE_VERSION} is of the form 0.10 instead of 0.10.3 set(CPACK_PACKAGE_VERSION_PATCH "0") endif("${CPACK_PACKAGE_VERSION_PATCH}" STREQUAL "") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${KTIKZ_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.GPL2") set(CPACK_SOURCE_GENERATOR "TBZ2") set(CPACK_SOURCE_IGNORE_FILES "/.svn/;/build*/*;/templates/;Makefile;~$;.qch$;.qhc$;/debian/;.exe$") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}") set(CPACK_SET_DESTDIR TRUE) if(WIN32 AND NOT UNIX) # There is a bug in NSI that does not handle full unix paths properly. Make # sure there is at least one set of four (4) backslashes. # set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${KTIKZ_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\ktikz.exe") set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${KTIKZ_PACKAGE_NAME}") set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.hackenberger.at/ktikz-editor-for-the-tikz-language") set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.hackenberger.at/ktikz-editor-for-the-tikz-language") set(CPACK_NSIS_CONTACT "florian@hackenberger.at") set(CPACK_NSIS_MODIFY_PATH ON) else(WIN32 AND NOT UNIX) set(CPACK_STRIP_FILES "bin/ktikz") set(CPACK_SOURCE_STRIP_FILES "") endif(WIN32 AND NOT UNIX) set(CPACK_PACKAGE_EXECUTABLES "ktikz;${KTIKZ_PACKAGE_NAME}") #execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE DEBIAN_PACKAGE_ARCHITECTURE) #set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEBIAN_PACKAGE_ARCHITECTURE}) set(CPACK_DEBIAN_PACKAGE_DEPENDS "libkdeui5 (>=4.3.0), libpoppler-qt4-4 (>=0.6), poppler-utils (>=0.6), pgf") set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "khelpcenter4") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Florian Hackenberger ") set(CPACK_DEBIAN_PACKAGE_SECTION "graphics") #set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") ktikz-0.12/KtikzConfig.cmake000066400000000000000000000003001325124551100160040ustar00rootroot00000000000000set(KTIKZ_DATA_INSTALL_DIR ${DATA_INSTALL_DIR}/ktikz) set(KTIKZ_TRANSLATIONS_INSTALL_DIR ${KTIKZ_DATA_INSTALL_DIR}/locale) set(KTIKZ_TEMPLATES_INSTALL_DIR ${KTIKZ_DATA_INSTALL_DIR}/templates) ktikz-0.12/LICENSE.FDL1.2000066400000000000000000000476631325124551100144410ustar00rootroot00000000000000 GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. ktikz-0.12/LICENSE.GPL2000066400000000000000000000437741325124551100143160ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE KtikZ is Copyright (C) 2007-2011 Florian Hackenberger and Glad Deschrijver. Contact: Florian Hackenberger (florian@hackenberger.at) Glad Deschrijver (glad.deschrijver@gmail.com) You may use, distribute and copy KtikZ under the terms of GNU General Public License version 2, which is displayed below. ------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 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 How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ktikz-0.12/PACKAGING000066400000000000000000000043021325124551100137750ustar00rootroot00000000000000Create source package (only using cmake): ----------------------------------------- After having run cmake and make as described in the section "Install using cmake" in the INSTALL file, running either of the following commands in the build directory will build a .tar.bz2 file containing the complete source in the build directory: make package_source make dist Create debian package for own use (only using cmake): ----------------------------------------------------- After having run cmake and make as described in the section "Install using cmake" in the INSTALL file, running the following command in the build directory will build a .deb package in the build directory: cpack -G DEB You may specify the architecture for which the .deb is created as follows: cpack -G DEB -D CPACK_DEBIAN_PACKAGE_ARCHITECTURE="amd64" Note that the debian package created by this command probably does NOT satisfy the requirements for inclusion in the debian repositories. But you can still use the debian package for easily installing and removing ktikz on your own computer (if you run a debian based distribution). Create debian package (only using qmake) (old version): ------------------------------------------------------- The Ubuntu/debian package infrastructure can be found in ./debian In order to compile a releasable package, you need a pbuilder environment. Please follow the Ubuntu packaging guide: https://wiki.ubuntu.com/PackagingGuide/Complete#The Personal Builder: pbuilder A debian package is created in two steps. The first step is to create a source package which describes all changes relative to the release tarball. Create a release tarball using: make package Untar this release tarball to /tmp and copy the debian directory cp qtikz-VERSION.tar.gz /tmp tar --directory /tmp -xf qtikz-VERSION.tar.gz rsync -r --exclude=.svn debian /tmp/qtikz-VERSION cd /tmp/qtikz-VERSION The next step is to create the source package cd /tmp/qtikz-VERSION debuild -S Now you should have a .dsc file in /tmp. The next step is to compile the binary package using pbuilder: cd /tmp pbuilder --build qtikz_VERSION.dsc If the build finished successfully you should have the result in /var/cache/pbuilder/result/qtikz_VERSION_ARCH.deb ktikz-0.12/README.md000066400000000000000000000145271325124551100140570ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/fhackenberger/ktikz.svg?branch=master)](https://travis-ci.org/fhackenberger/ktikz) # KtikZ KtikZ provides a nice user interface for making pictures using TikZ # Usage You write the TikZ code in the editor and KtikZ automatically generates the image in a preview panel. The complete description of the usage is available in the application itself, under Help -> KtikZ Manual. # Installation See the INSTALL file. # Screenshots The main window showing the application in action: ![The main window showing the application in action](screenshot_v0.10.png) Another example file: ![Another example file](screenshot_v0.10_2.png) # License ``` Copyright (C) 2007-2011 Florian Hackenberger Copyright (C) 2007-2013 Glad Deschrijver Copyright (C) 2013 by JoУЃo Carreira License: GPL version 2 or later This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program links to poppler which is based on xpdf code, which currently is released under the GPL version 2 only. As long as xpdf is not released under the GPL version 2 or later, this program cannot be released under the GPL version 3. Currently there are no other restrictions for this move. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Additional copyright holders and licenses: app/tikzeditor.cpp: GPL v2 or later contributions: Copyright (C) 2006 Jean-Luc Biord (http://qdevelop.org) Copyright (C) 2003-2008 Pascal Brachet (http://www.xm1math.net/texmaker) LGPL v2.1 contributions: Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) LGPL v2 contributions: Copyright (C) 2007 Mirko Stocker Copyright (C) 2003-2005 Hamish Rodda Copyright (C) 2001 Christoph Cullmann Copyright (C) 2001 Joseph Wenninger Copyright (C) 1999 Jochen Wilhelmy part/part.cpp: GPL v2 or later contributions: Copyright (C) 2002 Wilco Greven Copyright (C) 2002 Chris Cheney Copyright (C) 2002 Malcolm Hunter Copyright (C) 2003-2004 Christophe Devriese Copyright (C) 2003 Daniel Molkentin Copyright (C) 2003 Andy Goossens Copyright (C) 2003 Dirk Mueller Copyright (C) 2003 Laurent Montel Copyright (C) 2004 Dominique Devriese Copyright (C) 2004 Christoph Cullmann Copyright (C) 2004 Henrique Pinto Copyright (C) 2004 Waldo Bastian Copyright (C) 2004-2008 Albert Astals Cid Copyright (C) 2004 Antti Markus common/utils/colorbutton.cpp: GPL v2 or later contributions: Copyright (C) 2004 Ariya Hidayat (http://code.google.com/p/speedcrunch/) common/utils/lineedit.{h,cpp}: Use, modification and distribution is allowed without limitation, warranty, liability or support of any kind. Copyright (C) 2007 Trolltech ASA doc/*: GFDL v1.2 or later contributions: Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. Copyright (C) 2010-2011 Glad Deschrijver app/icons/Prociono.otf This font is used in the QtikZ and KtikZ icons. This font has been released into the public domain by its author, Barry Schwartz. This applies worldwide. In some countries this may not be legally possible; if so: Barry Schwartz grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. app/icons/qt-logo-22.png LGPL v2.1 contributions: Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) app/icons/* The icons are copied or derived from KDE's Oxygen icon set which is released under the LGPL (see http://www.oxygen-icons.org/?page_id=4). Upstream authors and copyright holders: Copyright (C) 2007-2009 David Vignoni Copyright (C) 2007-2009 Johann Ollivier Lapeyre Copyright (C) 2007-2009 Kenneth Wimer Copyright (C) 2007-2009 Nuno Fernades Pinheiro Copyright (C) 2007-2009 Riccardo Iaconelli Copyright (C) 2007-2009 David Miller and others. License: This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. translations/cs/ktikz.po, translations/cs/qtikz_cs.ts The translations are licenced under the same terms as ktikz itself. Copyright (C) 2010 Pavel Fric translations/*/ktikz.po, translations/*/qtikz_*.ts The translations are licenced under the same terms as ktikz itself. Copyright (C) 2007-2011 Florian Hackenberger Copyright (C) 2007-2013 Glad Deschrijver ``` ktikz-0.12/TODO000066400000000000000000000027611325124551100132650ustar00rootroot00000000000000Features: --------- - In multiple image mode, allow to save and export only the current image (use KFileDialog(url, filter, parent, widget) where widget is a checkbox). This is already the case for all exports except "Export to PDF" because that's the only thing that works. - Allow loading commands from user specified files. This is useful for allowing commands from the TikZ libraries to be highlighted. - Implement a fancier tikz command insertion mechanism (e.g. like in QtCreator). - Clicking an item in the TikZ commands dock widget should not insert it, but only select it. Pressing an Insert button would then do the actual insertion. There should also be a Help button which opens the TikZ manual at the page where the selected item is explained. - Make a graphical tool for editing the XML file containing the TikZ commands similar to keditbookmarks - Create a new process for each window opened by the "New" action. Is that really necessary? - Download files which are \included or \inputted in remote template files or remote pgf files to the temporary directory (could be dangerous when the user is still editing the \input command). No, don't do that, find a better way to handle this. Bugs or shortcomings: --------------------- - Make sure that all strings in the kpart are translated. - In common/utils/standardaction.cpp a better way of promoting the KActions to Action must be found. - In common/tikzpreviewcontroller.cpp find a better way to print the image. ktikz-0.12/app/000077500000000000000000000000001325124551100133475ustar00rootroot00000000000000ktikz-0.12/app/CMakeLists.txt000066400000000000000000000065051325124551100161150ustar00rootroot00000000000000include(../KtikzConfig.cmake) add_definitions("-DKTIKZ_TRANSLATIONS_INSTALL_DIR=\"${KTIKZ_TRANSLATIONS_INSTALL_DIR}\"") add_definitions("-DKTIKZ_TEMPLATES_INSTALL_DIR=\"${KTIKZ_TEMPLATES_INSTALL_DIR}\"") include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../common ${CMAKE_CURRENT_SOURCE_DIR}/../common/utils ) set(ktikz_SRCS configappearancewidget.cpp configeditorwidget.cpp configgeneralwidget.cpp configpreviewwidget.cpp configdialog.cpp editgotolinewidget.cpp editindentwidget.cpp editreplacewidget.cpp editreplacecurrentwidget.cpp ktikzapplication.cpp linenumberwidget.cpp loghighlighter.cpp logtextedit.cpp main.cpp mainwindow.cpp tikzcommandinserter.cpp tikzcommandwidget.cpp tikzdocumentationcontroller.cpp tikzeditor.cpp tikzeditorhighlighter.cpp tikzeditorview.cpp usercommandeditdialog.cpp usercommandinserter.cpp ../common/templatewidget.cpp ../common/tikzpreview.cpp ../common/tikzpreviewmessagewidget.cpp ../common/tikzpreviewrenderer.cpp ../common/tikzpreviewcontroller.cpp ../common/tikzpreviewgenerator.cpp ../common/utils/action.cpp ../common/utils/colorbutton.cpp ../common/utils/combobox.cpp ../common/utils/file.cpp ../common/utils/filedialog.cpp ../common/utils/globallocale.cpp ../common/utils/lineedit.cpp ../common/utils/messagebox.cpp ../common/utils/pagedialog.cpp ../common/utils/printpreviewdialog.cpp ../common/utils/recentfilesaction.cpp ../common/utils/selectaction.cpp ../common/utils/standardaction.cpp ../common/utils/tempdir.cpp ../common/utils/toggleaction.cpp ../common/utils/toolbar.cpp ../common/utils/url.cpp ../common/utils/zoomaction.cpp ) # dirty hack: use ki18n_wrap_ui to let Qt translate the .ui files instead of KDE (to have less duplication in the translation effort) ki18n_wrap_ui(ktikz_UI_FILES configappearancewidget.ui configeditorwidget.ui configgeneralwidget.ui configpreviewwidget.ui editgotolinewidget.ui editindentwidget.ui editreplacewidget.ui usercommandeditdialog.ui ../common/templatewidget.ui ) kconfig_add_kcfg_files(ktikz_SRCS ../common/settings.kcfgc) qt5_add_resources(ktikz_SRCS ktikz.qrc) qt5_add_resources(ktikz_SRCS qtikz.qrc) # kde4_add_app_icon(ktikz_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/icons/hi*-apps-ktikz.png") # add icons for win32 and mac; this command assumes that the first arg is of the form _SRCS # dirty hack: use ki18n_wrap_ui to let Qt translate the .ui files instead of KDE add_executable(ktikz ${ktikz_SRCS} ${ktikz_UI_FILES}) target_link_libraries(ktikz KF5::XmlGui KF5::TextEditor KF5::IconThemes Qt5::PrintSupport ${Poppler_LIBRARIES} ) install(TARGETS ktikz DESTINATION ${KDE_INSTALL_BINDIR}) install(FILES ktikzui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/ktikz) install(FILES ../common/ktikz.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) add_subdirectory(icons) add_custom_target(uninstalldirs_app) add_custom_command(TARGET uninstalldirs_app POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory ${KTIKZ_TRANSLATIONS_INSTALL_DIR} COMMAND ${CMAKE_COMMAND} -E remove_directory ${KTIKZ_TEMPLATES_INSTALL_DIR} COMMAND ${CMAKE_COMMAND} -E remove_directory ${KTIKZ_DATA_INSTALL_DIR} COMMAND ${CMAKE_COMMAND} -E remove_directory ${KXMLGUI_INSTALL_DIR}/ktikz COMMENT "Removing directories ${KTIKZ_TRANSLATIONS_INSTALL_DIR} ${KTIKZ_TEMPLATES_INSTALL_DIR} ${KTIKZ_DATA_INSTALL_DIR} ${KXMLGUI_INSTALL_DIR}/ktikz" VERBATIM) ktikz-0.12/app/ReadMe000066400000000000000000000005261325124551100144320ustar00rootroot00000000000000READ THIS IN ORDER TO COMPILE THE Qt4 TEMPLATE ---------------------------------------------- Before compiling, check the Qt Options, go to Project->Project Options->C++ Support and open the Qt Options tab. Check that the Qt installation directory is correct for the Qt version you've chosen. ------------------ Andreas Pakulat July 2006 ktikz-0.12/app/aboutdialog.cpp000066400000000000000000000073601325124551100163530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "aboutdialog.h" #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #include #include #else #include #include #include #include #endif #include "ktikzapplication.h" AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent) { QLabel *pixmapLabel = new QLabel; pixmapLabel->setPixmap(QPixmap(QLatin1String(":/icons/qtikz-128.png"))); QLabel *label = new QLabel(QString(QLatin1String("

%1 %2

%3

%4

")) .arg(KtikzApplication::applicationName()) .arg(QCoreApplication::applicationVersion()) .arg(tr("Copyright 2007-2014 Florian Hackenberger and Glad Deschrijver")) .arg(tr("This is a program for creating TikZ (from the LaTeX pgf package) diagrams."))); label->setWordWrap(true); QWidget *topWidget = new QWidget; QHBoxLayout *topLayout = new QHBoxLayout; topLayout->addWidget(pixmapLabel); topLayout->addWidget(label); topWidget->setLayout(topLayout); QTextBrowser *textEdit = new QTextBrowser; textEdit->setHtml(tr("

This program is free " "software; you can redistribute it and/or modify it under the " "terms of the GNU General Public License as published by the " "Free Software Foundation; either version 2 of the License, " "or (at your option) any later version.

" "

This program is distributed in the hope that it will " "be useful, but WITHOUT ANY WARRANTY; without even the implied " "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " "See the GNU General Public License for more details.

")); textEdit->setReadOnly(true); textEdit->setOpenExternalLinks(true); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok); connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(topWidget); mainLayout->addWidget(textEdit); mainLayout->addWidget(buttonBox); mainLayout->setSpacing(10); buttonBox->setFocus(); setWindowTitle(tr("About %1").arg(KtikzApplication::applicationName())); } ktikz-0.12/app/aboutdialog.h000066400000000000000000000031061325124551100160120ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif class AboutDialog : public QDialog { Q_OBJECT public: explicit AboutDialog(QWidget *parent = 0); }; #endif ktikz-0.12/app/app.pri000066400000000000000000000053211325124551100146440ustar00rootroot00000000000000TEMPLATE = app TARGET = $${APPEXENAME} VERSION = $${APPVERSION} LANGUAGE = C++ CONFIG += qt warn_on thread QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets DEFINES += QT_STL QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_BYTEARRAY QT_STRICT_ITERATORS QT_NO_URL_CAST_FROM_STRING QT_NO_KEYWORDS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050200 #DEFINES += -Wold-style-cast -Wfloat-equal -Woverloaded-virtual -Wshadow -Wundef -Weffc++ -Wdouble-promotion #QMAKE_CXXFLAGS += -std=c++11 #QMAKE_CXXFLAGS += -Wall -Wextra -Wpedantic -Weffc++ -Wlogical-op -Wmissing-declarations -Wold-style-cast -Woverloaded-virtual -Wshadow -Wstrict-null-sentinel -Wswitch-default -Wuseless-cast -Wzero-as-null-pointer-constant -fmessage-length=0 -fdiagnostics-show-location=every-line #QMAKE_CXXFLAGS += -Wall -Wextra -Wpedantic -Wlogical-op -Wmissing-declarations -Wold-style-cast -Woverloaded-virtual #QMAKE_CXX = clang DEFINES += ORGNAME=\\\"$${ORGNAME}\\\" DEFINES += APPNAME=\\\"$${APPNAME}\\\" DEFINES += APPVERSION=\\\"$${APPVERSION}\\\" DEFINES += KTIKZ_DOCUMENTATION_INSTALL_DIR=\\\"$${DOCUMENTATION_INSTALL_DIR}\\\" DEFINES += KTIKZ_TIKZ_DOCUMENTATION_DEFAULT=\\\"$${TIKZ_DOCUMENTATION_DEFAULT}\\\" DEFINES += KTIKZ_TRANSLATIONS_INSTALL_DIR=\\\"$${TRANSLATIONS_INSTALL_DIR}\\\" ### Build files MOC_DIR = moc OBJECTS_DIR = obj RCC_DIR = rcc UI_DIR = ui ### Input include(../common/common.pri) FORMS += \ $${PWD}/configappearancewidget.ui \ $${PWD}/configeditorwidget.ui \ $${PWD}/configgeneralwidget.ui \ $${PWD}/configpreviewwidget.ui \ $${PWD}/editgotolinewidget.ui \ $${PWD}/editindentwidget.ui \ $${PWD}/editreplacewidget.ui \ $${PWD}/usercommandeditdialog.ui #SOURCES += $$formSources($$FORMS) \ # linguist does not use translations in corresponding cpp files if we use this :-( SOURCES += \ $${PWD}/aboutdialog.cpp \ $${PWD}/assistantcontroller.cpp \ $${PWD}/configappearancewidget.cpp \ $${PWD}/configdialog.cpp \ $${PWD}/configeditorwidget.cpp \ $${PWD}/configgeneralwidget.cpp \ $${PWD}/configpreviewwidget.cpp \ $${PWD}/editgotolinewidget.cpp \ $${PWD}/editindentwidget.cpp \ $${PWD}/editreplacewidget.cpp \ $${PWD}/editreplacecurrentwidget.cpp \ $${PWD}/ktikzapplication.cpp \ $${PWD}/linenumberwidget.cpp \ $${PWD}/loghighlighter.cpp \ $${PWD}/logtextedit.cpp \ $${PWD}/main.cpp \ $${PWD}/mainwindow.cpp \ $${PWD}/tikzcommandinserter.cpp \ $${PWD}/tikzcommandwidget.cpp \ $${PWD}/tikzdocumentationcontroller.cpp \ $${PWD}/tikzeditor.cpp \ $${PWD}/tikzeditorhighlighter.cpp \ $${PWD}/tikzeditorview.cpp \ $${PWD}/usercommandeditdialog.cpp \ $${PWD}/usercommandinserter.cpp HEADERS += $$headerFiles($$SOURCES) RESOURCES = $${PWD}/qtikz.qrc ### Output target.path = $${BIN_INSTALL_DIR} INSTALLS += target ktikz-0.12/app/assistantcontroller.cpp000066400000000000000000000063711325124551100201770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2010 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "assistantcontroller.h" #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif #include "ktikzapplication.h" AssistantController::AssistantController() : m_process(0) { } AssistantController::~AssistantController() { if (m_process && m_process->state() == QProcess::Running) { m_process->terminate(); m_process->waitForFinished(3000); } delete m_process; } bool AssistantController::startAssistant() { if (!m_process) m_process = new QProcess(); if (m_process->state() != QProcess::Running) { QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator(); #if !defined(Q_OS_MAC) app += QLatin1String("assistant"); #else app += QLatin1String("Assistant.app/Contents/MacOS/Assistant"); #endif const QString ktikzDocFile = QString::fromLocal8Bit(KTIKZ_DOCUMENTATION_INSTALL_DIR) + QLatin1String("/qtikz.qhc"); if (!QFileInfo(ktikzDocFile).isReadable()) { QMessageBox::critical(0, KtikzApplication::applicationName(), QCoreApplication::translate("AssistantController", "Unable to open the help file (%1)").arg(ktikzDocFile)); return false; } QStringList args; args << QLatin1String("-collectionFile") << ktikzDocFile << QLatin1String("-enableRemoteControl"); m_process->start(app, args); if (!m_process->waitForStarted()) { QMessageBox::critical(0, KtikzApplication::applicationName(), QCoreApplication::translate("AssistantController", "Unable to launch Qt Assistant (%1)").arg(app)); return false; } } return true; } void AssistantController::showDocumentation(const QString &page) { if (!startAssistant()) return; if (!page.isEmpty()) { QByteArray ba; ba.append("setSource qthelp://hackenberger.qtikz/doc/"); m_process->write(ba + page.toLocal8Bit() + '\0'); } } ktikz-0.12/app/assistantcontroller.h000066400000000000000000000031341325124551100176360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2010, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef ASSISTANTCONTROLLER_H #define ASSISTANTCONTROLLER_H #include class QProcess; class AssistantController { public: AssistantController(); ~AssistantController(); void showDocumentation(const QString &page = QString()); private: bool startAssistant(); QProcess *m_process; }; #endif ktikz-0.12/app/configappearancewidget.cpp000066400000000000000000000242331325124551100205500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009, 2012 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "configappearancewidget.h" #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #else #include #include #endif #include "../common/utils/colordialog.h" #include "../common/utils/fontdialog.h" ConfigAppearanceWidget::ConfigAppearanceWidget(QWidget *parent) : QWidget(parent) { m_itemMargin = 10; ui.setupUi(this); QButtonGroup *buttonGroup = new QButtonGroup(this); buttonGroup->addButton(ui.standardAppearanceCheck); buttonGroup->addButton(ui.customAppearanceCheck); buttonGroup->setExclusive(true); connect(buttonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(toggleCustom())); QPalette palette = ui.itemTable->palette(); QColor highlightBackgroundColor(QApplication::style()->standardPalette().color(QPalette::Normal, QPalette::AlternateBase)); if (highlightBackgroundColor == QApplication::style()->standardPalette().color(QPalette::Normal, QPalette::Base)) highlightBackgroundColor = highlightBackgroundColor.darker(110); palette.setColor(QPalette::Normal, QPalette::Highlight, highlightBackgroundColor); palette.setColor(QPalette::Normal, QPalette::HighlightedText, QPalette::Text); palette.setColor(QPalette::Inactive, QPalette::Highlight, highlightBackgroundColor); palette.setColor(QPalette::Inactive, QPalette::HighlightedText, QPalette::Text); palette.setColor(QPalette::Disabled, QPalette::Highlight, highlightBackgroundColor); ui.itemTable->setPalette(palette); m_itemHighlighted = -1; connect(ui.itemTable, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)), this, SLOT(setItemHighlighted(QTableWidgetItem*))); connect(ui.fontButton, SIGNAL(clicked()), this, SLOT(showFontDialog())); connect(ui.colorButton, SIGNAL(clicked()), this, SLOT(showColorDialog())); } void ConfigAppearanceWidget::readSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); m_custom = settings.value(QLatin1String("Customize"), true).toBool(); const int numOfRules = settings.value(QLatin1String("Number"), 0).toInt(); for (int i = 0; i < numOfRules; ++i) { const int num = m_typeNames.indexOf(settings.value(QLatin1String("Item") + QString::number(i) + QLatin1String("/Name")).toString()); if (num >= 0) { m_itemColors[num] = settings.value(QLatin1String("Item") + QString::number(i) + QLatin1String("/Color")).toString(); m_itemFonts[num] = settings.value(QLatin1String("Item") + QString::number(i) + QLatin1String("/Font")).toString(); } } settings.endGroup(); setCustomizationType(m_custom); setItemFonts(m_itemFonts); setItemColors(m_itemColors); } void ConfigAppearanceWidget::writeSettings(const QString &settingsGroup) { m_custom = getCustomizationType(); QSettings settings; settings.beginGroup(settingsGroup); settings.setValue(QLatin1String("Customize"), m_custom); if (m_custom) { for (int i = 0; i < m_typeNames.size(); ++i) { settings.setValue(QLatin1String("Item") + QString::number(i) + QLatin1String("/Name"), m_typeNames.at(i)); settings.setValue(QLatin1String("Item") + QString::number(i) + QLatin1String("/Color"), m_itemColors.at(i)); settings.setValue(QLatin1String("Item") + QString::number(i) + QLatin1String("/Font"), m_itemFonts.at(i)); } settings.setValue(QLatin1String("Number"), m_typeNames.size()); } settings.endGroup(); } void ConfigAppearanceWidget::setItemHighlighted(QTableWidgetItem *item) { m_itemHighlighted = ui.itemTable->row(item); setHighlightedForeground(m_itemColors.at(m_itemHighlighted)); ui.fontButton->setEnabled(true); ui.colorButton->setEnabled(true); } void ConfigAppearanceWidget::setItemToolTip(QTableWidgetItem *item, const QFont &font) { const QFontMetrics metrics(font); ui.itemTable->setRowHeight(m_itemHighlighted, metrics.height() + m_itemMargin); if (metrics.width(item->text()) >= ui.itemTable->contentsRect().width() - 30) item->setToolTip(item->text()); else item->setToolTip(QString()); } void ConfigAppearanceWidget::showEvent(QShowEvent*) { for (int i = 0; i < ui.itemTable->rowCount(); ++i) { QFont font; font.fromString(m_itemFonts.at(i)); setItemToolTip(ui.itemTable->item(i, 0), font); } if (m_itemHighlighted < 0) return; setHighlightedForeground(m_itemColors.at(m_itemHighlighted)); } void ConfigAppearanceWidget::addItem(const QString &titleName) { const int itemTableRowNum = ui.itemTable->rowCount(); ui.itemTable->setRowCount(itemTableRowNum + 1); QTableWidgetItem *item = new QTableWidgetItem; item->setText(titleName); item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); ui.itemTable->setItem(itemTableRowNum, 0, item); } void ConfigAppearanceWidget::addItemFont(const QString &fontName) { const int rowNum = m_itemFonts.size(); m_itemFonts.append(fontName); QFont font; font.fromString(fontName); ui.itemTable->item(rowNum, 0)->setFont(font); ui.itemTable->setRowHeight(rowNum, QFontMetrics(font).height() + m_itemMargin); } void ConfigAppearanceWidget::addItemColor(const QString &colorName) { const int rowNum = m_itemColors.size(); m_itemColors.append(colorName); ui.itemTable->item(rowNum, 0)->setForeground(QColor(colorName)); toggleCustom(); } void ConfigAppearanceWidget::addItems(const QStringList &titleNames) { for (int i = 0; i < titleNames.size(); ++i) addItem(titleNames.at(i)); } void ConfigAppearanceWidget::setItemFonts(const QStringList &fontNames) { m_itemFonts = fontNames; for (int i = 0; i < m_itemFonts.size(); ++i) { QFont font; font.fromString(m_itemFonts.at(i)); ui.itemTable->item(i, 0)->setFont(font); ui.itemTable->setRowHeight(i, QFontMetrics(font).height() + m_itemMargin); } } void ConfigAppearanceWidget::setItemColors(const QStringList &colorNames) { m_itemColors = colorNames; for (int i = 0; i < m_itemColors.size(); ++i) ui.itemTable->item(i, 0)->setForeground(QColor(m_itemColors.at(i))); toggleCustom(); } QStringList ConfigAppearanceWidget::getItemFonts() { return m_itemFonts; } QStringList ConfigAppearanceWidget::getItemColors() { return m_itemColors; } void ConfigAppearanceWidget::setCustomizationType(bool custom) { if (custom) ui.customAppearanceCheck->setChecked(true); else ui.standardAppearanceCheck->setChecked(true); toggleCustom(); } bool ConfigAppearanceWidget::getCustomizationType() { return !ui.standardAppearanceCheck->isChecked(); } void ConfigAppearanceWidget::toggleCustom() { if (ui.customAppearanceCheck->isChecked()) { ui.appearanceGroupBox->setEnabled(true); for (int i = 0; i < m_itemColors.size(); ++i) ui.itemTable->item(i, 0)->setForeground(QColor(m_itemColors.at(i))); } else { ui.appearanceGroupBox->setEnabled(false); for (int i = 0; i < m_itemColors.size(); ++i) ui.itemTable->item(i, 0)->setForeground(QApplication::style()->standardPalette().color(QPalette::Disabled, QPalette::Text)); } } void ConfigAppearanceWidget::setTypeNames(const QStringList &typeNames) { m_typeNames = typeNames; } void ConfigAppearanceWidget::setDefaultTextCharFormats(const QMap &defaultFormatList) { for (int i = 0; i < defaultFormatList.size(); ++i) { m_itemColors << QString(); m_itemFonts << QString(); } QMap::const_iterator it = defaultFormatList.constBegin(); while (it != defaultFormatList.constEnd()) { const int num = m_typeNames.indexOf(it.key()); if (num >= 0) { m_itemColors[num] = it.value().foreground().color().name(); m_itemFonts[num] = it.value().font().toString(); } ++it; } } void ConfigAppearanceWidget::showFontDialog() { if (m_itemHighlighted < 0) return; bool ok; QFont currentFont; currentFont.fromString(m_itemFonts.at(m_itemHighlighted)); const QFont newFont = FontDialog::getFont(&ok, currentFont, this); if (ok) { QTableWidgetItem *item = ui.itemTable->item(m_itemHighlighted, 0); m_itemFonts.replace(m_itemHighlighted, newFont.toString()); item->setFont(newFont); setItemToolTip(item, newFont); } } void ConfigAppearanceWidget::showColorDialog() { if (m_itemHighlighted < 0) return; bool ok; const QColor currentColor(m_itemColors.at(m_itemHighlighted)); const QColor newColor = ColorDialog::getColor(&ok, currentColor, this); if (ok) { m_itemColors.replace(m_itemHighlighted, newColor.name()); ui.itemTable->item(m_itemHighlighted, 0)->setForeground(newColor); setHighlightedForeground(m_itemColors.at(m_itemHighlighted)); } } void ConfigAppearanceWidget::setHighlightedForeground(const QString &colorName) { QPalette palette = ui.itemTable->palette(); const QColor color(colorName); palette.setColor(QPalette::Normal, QPalette::HighlightedText, color); palette.setColor(QPalette::Inactive, QPalette::HighlightedText, color); palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QApplication::style()->standardPalette().color(QPalette::Disabled, QPalette::Text)); ui.itemTable->setPalette(palette); } ktikz-0.12/app/configappearancewidget.h000066400000000000000000000055071325124551100202200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZ_CONFIGAPPEARANCEWIDGET_H #define KTIKZ_CONFIGAPPEARANCEWIDGET_H #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif #include "ui_configappearancewidget.h" class QTableWidgetItem; class QTextCharFormat; class ConfigAppearanceWidget : public QWidget { Q_OBJECT public: explicit ConfigAppearanceWidget(QWidget *parent = 0); void readSettings(const QString &settingsGroup); void writeSettings(const QString &settingsGroup); void addItem(const QString &titleName); void addItemFont(const QString &fontName); void addItemColor(const QString &colorName); void addItems(const QStringList &titleNames); void setItemFonts(const QStringList &fontNames); void setItemColors(const QStringList &colorNames); void setCustomizationType(bool custom); QStringList getItemFonts(); QStringList getItemColors(); bool getCustomizationType(); void setTypeNames(const QStringList &typeNames); void setDefaultTextCharFormats(const QMap &defaultFormatList); protected: Ui::ConfigAppearanceWidget ui; private Q_SLOTS: void setItemHighlighted(QTableWidgetItem *item); void toggleCustom(); void showFontDialog(); void showColorDialog(); private: void showEvent(QShowEvent*); void setHighlightedForeground(const QString &colorName); void setItemToolTip(QTableWidgetItem *item, const QFont &font); int m_itemHighlighted; int m_itemMargin; bool m_custom; QStringList m_itemFonts; QStringList m_itemColors; QStringList m_typeNames; }; #endif ktikz-0.12/app/configappearancewidget.ui000066400000000000000000000103401325124551100203750ustar00rootroot00000000000000 ConfigAppearanceWidget Highlighting <p>When this option is checked, the default fonts and colors are used in the output.</p> &Standard <p>When this option is checked, the fonts and colors defined below will be used in the output instead of the default ones.</p> &Custom true Change st&yle for: <p>Select the structure appearing in the TikZ code for which you want to change the fonts and colors.</p> false QAbstractItemView::SingleSelection 1 false true false false true false Qt::Horizontal 80 20 false <p>Select the font in which the structure that you selected in the box above should be displayed.</p> Change &font... false <p>Select the text color in which the structure that you selected in the box above should be displayed.</p> Change c&olor... Qt::Vertical 20 20 ktikz-0.12/app/configdialog.cpp000066400000000000000000000073051325124551100165050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009, 2011, 2014 * * by Glad Deschrijver * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "configdialog.h" #include #include #include "configappearancewidget.h" #include "configeditorwidget.h" #include "configgeneralwidget.h" #include "configpreviewwidget.h" #include "ktikzapplication.h" #include "../common/utils/icon.h" ConfigDialog::ConfigDialog(QWidget *parent) : PageDialog(parent) { setWindowTitle(tr("Configure %1").arg(KtikzApplication::applicationName())); // TODO: Check if this is needed // setHelp(QLatin1String("chap-configuration")); m_configGeneralWidget = new ConfigGeneralWidget(this); m_configEditorWidget = new ConfigEditorWidget(this); m_configAppearanceWidget = new ConfigAppearanceWidget(this); m_configPreviewWidget = new ConfigPreviewWidget(this); addPage(m_configGeneralWidget, tr("&General"), QLatin1String("preferences-desktop-theme")); addPage(m_configEditorWidget, tr("&Editor"), QLatin1String("accessories-text-editor")); addPage(m_configAppearanceWidget, tr("&Highlighting"), QLatin1String("preferences-desktop-color")); addPage(m_configPreviewWidget, tr("&Preview"), QLatin1String("preferences-desktop-theme")); } void ConfigDialog::readSettings() { m_configGeneralWidget->readSettings(QString()); m_configEditorWidget->readSettings(QLatin1String("Editor")); m_configAppearanceWidget->readSettings(QLatin1String("Highlighting")); m_configPreviewWidget->readSettings(QLatin1String("Preview")); } void ConfigDialog::writeSettings() { m_configGeneralWidget->writeSettings(QString()); m_configEditorWidget->writeSettings(QLatin1String("Editor")); m_configAppearanceWidget->writeSettings(QLatin1String("Highlighting")); m_configPreviewWidget->writeSettings(QLatin1String("Preview")); } void ConfigDialog::setTranslatedHighlightTypeNames(const QStringList &typeNames) { Q_FOREACH (const QString &typeName, typeNames) m_configAppearanceWidget->addItem(typeName); } void ConfigDialog::setHighlightTypeNames(const QStringList &typeNames) { m_configAppearanceWidget->setTypeNames(typeNames); } void ConfigDialog::setDefaultHighlightFormats(const QMap &defaultFormatList) { m_configAppearanceWidget->setDefaultTextCharFormats(defaultFormatList); } void ConfigDialog::accept() { writeSettings(); Q_EMIT settingsChanged(); QDialog::accept(); } void ConfigDialog::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_F1 && event->modifiers() == Qt::ShiftModifier) QWhatsThis::enterWhatsThisMode(); QDialog::keyPressEvent(event); } ktikz-0.12/app/configdialog.h000066400000000000000000000042711325124551100161510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZ_CONFIGDIALOG_H #define KTIKZ_CONFIGDIALOG_H #include "../common/utils/pagedialog.h" class QTextCharFormat; class ConfigAppearanceWidget; class ConfigEditorWidget; class ConfigGeneralWidget; class ConfigPreviewWidget; class ConfigDialog : public PageDialog { Q_OBJECT public: explicit ConfigDialog(QWidget *parent = 0); void readSettings(); void writeSettings(); void setTranslatedHighlightTypeNames(const QStringList &typeNames); void setHighlightTypeNames(const QStringList &typeNames); void setDefaultHighlightFormats(const QMap &defaultFormatList); Q_SIGNALS: void settingsChanged(); private Q_SLOTS: void accept(); private: void keyPressEvent(QKeyEvent *event); ConfigAppearanceWidget *m_configAppearanceWidget; ConfigEditorWidget *m_configEditorWidget; ConfigGeneralWidget *m_configGeneralWidget; ConfigPreviewWidget *m_configPreviewWidget; }; #endif ktikz-0.12/app/configeditorwidget.cpp000066400000000000000000000254351325124551100177440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2012, 2013 by Glad Deschrijver * * * * Copyright (C) 2013 by JoУЃo Carreira * * Copyright (C) 2016 by G. Prudhomme * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "configeditorwidget.h" #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif #include "../common/utils/fontdialog.h" ConfigEditorWidget::ConfigEditorWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); connect(ui.generalFontButton, SIGNAL(clicked()), this, SLOT(selectFont())); // ** Encoding initializeEncoding(); } void ConfigEditorWidget::initializeEncoding() { /// Local codec QTextCodec* localCodec = QTextCodec::codecForLocale(); QString localCodecName; if (localCodec->aliases().empty()) localCodecName = codecNameToString( localCodec); else localCodecName = codecNameToString( localCodec->aliases()[1]); ui.encodingComboBox->addItem(tr("System local - %1", "Encoding").arg(localCodecName), QString::fromLatin1("System")); ui.encodingComboBox->addItem(tr("UTF-8", "Encoding"), QString::fromLatin1("UTF-8 BOM")); ui.encodingComboBox->addItem(tr("UTF-8 without BOM", "Encoding"), QString::fromLatin1("UTF-8")); ui.encodingComboBox->addItem(tr("(Advanced)", "Encoding"), QString()); ui.encodingComboBox->setCurrentIndex(ui.encodingComboBox->count()-1); QComboBox* cb (ui.defaultEncodingComboBox); cb->addItem(tr("(Local codec - %1)", "Encoding").arg(localCodecName), QVariant() ); fillCodecComboBox(cb); cb = ui.readEncodingComboBox; cb->addItem(tr("(Local or unicode)", "Encoding"), QVariant()); fillCodecComboBox(cb); cb = ui.writeEncodingComboBox; cb->addItem(tr("(Same)", "Encoding"), QVariant()); fillCodecComboBox(cb); } QVariant ConfigEditorWidget::defaultSetting(const QString &key) { if (key == QLatin1String("ShowLineNumberArea")) return true; else if (key == QLatin1String("Font")) return qApp->font().toString(); else if (key == QLatin1String("ShowWhiteSpaces")) return false; else if (key == QLatin1String("ShowTabulators")) return false; else if (key == QLatin1String("ShowMatchingBrackets")) return true; else if (key == QLatin1String("ColorWhiteSpaces")) return QColor(Qt::gray); else if (key == QLatin1String("ColorTabulators")) return QColor(Qt::gray); else if (key == QLatin1String("ColorMatchingBrackets")) return QColor(Qt::darkGreen); else if (key == QLatin1String("ShowHighlightCurrentLine")) return true; else if (key == QLatin1String("ColorHighlightCurrentLine")) { const QColor lineColor(QApplication::palette().color(QPalette::Normal, QPalette::Base)); return lineColor.darker(105); } else if (key == QLatin1String("UseCompletion")) return true; return QVariant(); } void ConfigEditorWidget::readSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); ui.showLineNumberAreaCheck->setChecked(settings.value(QLatin1String("ShowLineNumberArea"), defaultSetting(QLatin1String("ShowLineNumberArea"))).toBool()); m_generalFont.fromString(settings.value(QLatin1String("Font"), defaultSetting(QLatin1String("Font"))).toString()); ui.generalFontEdit->setText(m_generalFont.family() + QLatin1Char(' ') + QString::number(m_generalFont.pointSize())); ui.generalFontEdit->setFont(m_generalFont); ui.showWhiteSpacesCheck->setChecked(settings.value(QLatin1String("ShowWhiteSpaces"), defaultSetting(QLatin1String("ShowWhiteSpaces"))).toBool()); ui.showTabulatorsCheck->setChecked(settings.value(QLatin1String("ShowTabulators"), defaultSetting(QLatin1String("ShowTabulators"))).toBool()); ui.showMatchingBracketsCheck->setChecked(settings.value(QLatin1String("ShowMatchingBrackets"), defaultSetting(QLatin1String("ShowMatchingBrackets"))).toBool()); ui.whiteSpacesColorButton->setColor(settings.value(QLatin1String("ColorWhiteSpaces"), defaultSetting(QLatin1String("ColorWhiteSpaces"))).value()); ui.tabulatorsColorButton->setColor(settings.value(QLatin1String("ColorTabulators"), defaultSetting(QLatin1String("ColorTabulators"))).value()); ui.matchingBracketsColorButton->setColor(settings.value(QLatin1String("ColorMatchingBrackets"), defaultSetting(QLatin1String("ColorMatchingBrackets"))).value()); ui.highlightCurrentLineCheck->setChecked(settings.value(QLatin1String("ShowHighlightCurrentLine"), defaultSetting(QLatin1String("ShowHighlightCurrentLine"))).toBool()); ui.highlightCurrentLineColorButton->setColor(settings.value(QLatin1String("ColorHighlightCurrentLine"), defaultSetting(QLatin1String("ColorHighlightCurrentLine"))).value()); ui.useCompletionCheck->setChecked(settings.value(QLatin1String("UseCompletion"), defaultSetting(QLatin1String("UseCompletion"))).toBool()); // encoding settings.beginGroup(QLatin1String("encoding")); selectEncoding(ui.defaultEncodingComboBox, settings.value(QLatin1String("default"))); selectEncoding(ui.readEncodingComboBox, settings.value(QLatin1String("decoder"))); selectEncoding(ui.writeEncodingComboBox, settings.value(QLatin1String("encoder"))); ui.bomCheckBox->setChecked(settings.value(QLatin1String("bom"), true).toBool()); selectEncoding(ui.encodingComboBox, settings.value(QLatin1String("preset"), QLatin1String("System"))); settings.endGroup(); settings.endGroup(); } void ConfigEditorWidget::writeSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); settings.setValue(QLatin1String("ShowLineNumberArea"), ui.showLineNumberAreaCheck->isChecked()); settings.setValue(QLatin1String("Font"), m_generalFont.toString()); settings.setValue(QLatin1String("ShowWhiteSpaces"), ui.showWhiteSpacesCheck->isChecked()); settings.setValue(QLatin1String("ShowTabulators"), ui.showTabulatorsCheck->isChecked()); settings.setValue(QLatin1String("ShowMatchingBrackets"), ui.showMatchingBracketsCheck->isChecked()); settings.setValue(QLatin1String("ColorWhiteSpaces"), ui.whiteSpacesColorButton->color()); settings.setValue(QLatin1String("ColorTabulators"), ui.tabulatorsColorButton->color()); settings.setValue(QLatin1String("ColorMatchingBrackets"), ui.matchingBracketsColorButton->color()); settings.setValue(QLatin1String("ShowHighlightCurrentLine"), ui.highlightCurrentLineCheck->isChecked()); settings.setValue(QLatin1String("ColorHighlightCurrentLine"), ui.highlightCurrentLineColorButton->color()); settings.setValue(QLatin1String("UseCompletion"), ui.useCompletionCheck->isChecked()); settings.beginGroup(QLatin1String("encoding")); settings.setValue(QLatin1String("default"), ui.defaultEncodingComboBox->itemData(ui.defaultEncodingComboBox->currentIndex())); settings.setValue(QLatin1String("encoder"), ui.writeEncodingComboBox->itemData(ui.writeEncodingComboBox->currentIndex())); settings.setValue(QLatin1String("decoder"), ui.readEncodingComboBox->itemData(ui.readEncodingComboBox->currentIndex())); settings.setValue(QLatin1String("bom"), ui.bomCheckBox->isChecked()); settings.setValue(QLatin1String("preset"), ui.encodingComboBox->itemData(ui.encodingComboBox->currentIndex())); settings.endGroup(); settings.endGroup(); } void ConfigEditorWidget::selectFont() { bool ok; const QFont newFont = FontDialog::getFont(&ok, m_generalFont, this); if (ok) { m_generalFont = newFont; ui.generalFontEdit->setText(m_generalFont.family() + QLatin1Char(' ') + QString::number(m_generalFont.pointSize())); ui.generalFontEdit->setFont(m_generalFont); } } class ComboItem { public: ComboItem() {} ComboItem(const QString &text, const QVariant &data): text(text), data(data) {} QString text; QVariant data; bool operator <(const ComboItem &other) const {return QString::compare(this->text, other.text, Qt::CaseInsensitive) < 0;} }; void ConfigEditorWidget::fillCodecComboBox(QComboBox *cb) { const QList ca (QTextCodec::availableCodecs()); QVector ciList; ciList.reserve(ca.length()); Q_FOREACH(const QByteArray &ba , ca) ciList.append(ComboItem(codecNameToString(ba), ba)); qSort(ciList); Q_FOREACH (const ComboItem& ci, ciList) { cb->addItem(ci.text, ci.data); } } void ConfigEditorWidget::selectEncoding(QComboBox *cb, const QVariant &codecName) { for(int i=0; icount(); ++i) { if(cb->itemData(i) == codecName) { cb->setCurrentIndex(i); return ; } } } void ConfigEditorWidget::on_encodingComboBox_currentIndexChanged(int index) { bool bShowAdvEncondingOptions = (index == -1); // (!bShowAdvEncondingOptions) is true when the widget is initialized. if(Q_LIKELY( !bShowAdvEncondingOptions) ) { QString key=ui.encodingComboBox->itemData(index).toString(); if (key.isEmpty()) { bShowAdvEncondingOptions = true; } else { QVariant de, re, we; bool bom ; if (key.compare(QString::fromLatin1("UTF-8+BOM"))==0) { de = QString::fromLatin1("UTF-8"); we = de; bom = true; } else if (key.compare(QString::fromLatin1("UTF-8"))==0) { de = QString::fromLatin1("UTF-8"); we = de; bom = false; } else // if (key.compare(QString::fromLatin1("System"))==0) { bom = true; } selectEncoding(ui.defaultEncodingComboBox,de); selectEncoding(ui.readEncodingComboBox,re); selectEncoding(ui.writeEncodingComboBox,we); ui.bomCheckBox->setChecked(bom); } } ui.encodingAdvWidget->setVisible(bShowAdvEncondingOptions); } QString ConfigEditorWidget::codecNameToString(const QByteArray& codecName) { return QString::fromLatin1(codecName.constData(), codecName.length()); } QString ConfigEditorWidget::codecNameToString(QTextCodec *codec){return codecNameToString(codec->name());} ktikz-0.12/app/configeditorwidget.h000066400000000000000000000044161325124551100174050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2013, 2014 by Glad Deschrijver * * * * Copyright (C) 2016 by G. Prudhomme * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZ_CONFIGEDITORWIDGET_H #define KTIKZ_CONFIGEDITORWIDGET_H #include "ui_configeditorwidget.h" class QTextCodec; class QComboBox; class ConfigEditorWidget : public QWidget { Q_OBJECT public: explicit ConfigEditorWidget(QWidget *parent = 0); static QVariant defaultSetting(const QString &key); void readSettings(const QString &settingsGroup); void writeSettings(const QString &settingsGroup); void initializeEncoding(); protected: Ui::ConfigEditorWidget ui; private Q_SLOTS: void selectFont(); void on_encodingComboBox_currentIndexChanged(int index); private: QFont m_generalFont; static QString codecNameToString(const QByteArray &codecName); static QString codecNameToString(QTextCodec *codec); static void fillCodecComboBox(QComboBox *cb); static void selectEncoding(QComboBox *cb, const QVariant& codecName); }; #endif ktikz-0.12/app/configeditorwidget.ui000066400000000000000000000401431325124551100175700ustar00rootroot00000000000000 ConfigEditorWidget 0 0 332 479 Configure Editor Line numbers <p>Show the line numbers on the left hand side of the editor.</p> Show &line numbers true Editor <p>Select the font of the main text.</p> Text &font: generalFontButton 0 0 <p>Select the font of the main text.</p> true <p>Select the font of the main text.</p> Choose... <p>Show white spaces in the text by replacing them with special symbols. These symbols will not be saved on disk.</p> Show &white spaces false <p>Select the color in which the spaces will be shown.</p> &Use color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter whiteSpacesColorButton false <p>Select the color in which the spaces will be shown.</p> <p>Show tabulators in the text by replacing them with special symbols. These symbols will not be saved on disk.</p> Show &tabulators false <p>Select the color in which the tabulators will be shown.</p> U&se color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter tabulatorsColorButton false <p>Select the color in which the tabulators will be shown.</p> <p>If the cursor is on a bracket ({[]}), then the corresponding opening/closing bracket will be highlighted.</p> Show matching &brackets false <p>Select the color in which the highlighted brackets will be shown.</p> Us&e color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter matchingBracketsColorButton false <p>Select the color in which the highlighted brackets will be shown.</p> <p>Highlight the line on which the text cursor is currently located.</p> Highlight cu&rrent line false <p>Select the color with which the current line will be highlighted.</p> Use c&olor: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter highlightCurrentLineColorButton false <p>Select the color with which the current line will be highlighted.</p> <p>When the first letters of a TikZ command are typed in the text, a list of possible completions will be shown.</p> Use command &completion Encoding 0 0 0 0 Defaut encoding for new documents Defaut encoding 0 0 Encoding for reading text files. Warning: if a BOM was detected, the decoder automatically switch to UTF-8 or UTF-16. Decoder 0 0 Encoding for saving text files Encoder 0 0 Add BOM to documents Qt::Vertical 20 20 ColorButton QToolButton
../common/utils/colorbutton.h
showWhiteSpacesCheck toggled(bool) colorWhiteSpacesLabel setEnabled(bool) 102 78 226 79 showTabulatorsCheck toggled(bool) colorTabulatorsLabel setEnabled(bool) 102 107 226 108 showMatchingBracketsCheck toggled(bool) colorMatchingBracketsLabel setEnabled(bool) 102 136 226 137 showWhiteSpacesCheck toggled(bool) whiteSpacesColorButton setEnabled(bool) 73 69 251 61 showTabulatorsCheck toggled(bool) tabulatorsColorButton setEnabled(bool) 66 100 251 101 showMatchingBracketsCheck toggled(bool) matchingBracketsColorButton setEnabled(bool) 88 131 251 131 highlightCurrentLineCheck toggled(bool) highlightCurrentLineLabel setEnabled(bool) 95 218 212 218 highlightCurrentLineCheck toggled(bool) highlightCurrentLineColorButton setEnabled(bool) 95 218 260 218
ktikz-0.12/app/configgeneralwidget.cpp000066400000000000000000000144411325124551100200660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2010, 2011, 2012 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "configgeneralwidget.h" #include #include "ktikzapplication.h" #include "tikzdocumentationcontroller.h" #include "../common/utils/filedialog.h" #include "../common/utils/icon.h" #include "../common/utils/messagebox.h" #include "../common/utils/urlcompletion.h" #include "../common/utils/url.h" ConfigGeneralWidget::ConfigGeneralWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); #ifdef KTIKZ_USE_KDE ui.historyLengthLabel->setVisible(false); ui.historyLengthSpinBox->setVisible(false); ui.toolBarStyleLabel->setVisible(false); ui.toolBarStyleComboBox->setVisible(false); #endif m_urlCompletion = new UrlCompletion(this); ui.tikzDocEdit->setCompletionObject(m_urlCompletion); ui.latexEdit->setCompletionObject(m_urlCompletion); ui.pdftopsEdit->setCompletionObject(m_urlCompletion); ui.editorEdit->setCompletionObject(m_urlCompletion); ui.tikzDocButton->setIcon(Icon(QLatin1String("document-open"))); ui.latexButton->setIcon(Icon(QLatin1String("document-open"))); ui.pdftopsButton->setIcon(Icon(QLatin1String("document-open"))); ui.editorButton->setIcon(Icon(QLatin1String("document-open"))); connect(ui.tikzDocButton, SIGNAL(clicked()), this, SLOT(browseCommand())); connect(ui.tikzDocSearchButton, SIGNAL(clicked()), this, SLOT(searchTikzDocumentation())); connect(ui.latexButton, SIGNAL(clicked()), this, SLOT(browseCommand())); connect(ui.pdftopsButton, SIGNAL(clicked()), this, SLOT(browseCommand())); connect(ui.editorButton, SIGNAL(clicked()), this, SLOT(browseCommand())); } ConfigGeneralWidget::~ConfigGeneralWidget() { delete m_urlCompletion; } void ConfigGeneralWidget::readSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); #ifndef KTIKZ_USE_KDE ui.historyLengthSpinBox->setValue(settings.value(QLatin1String("RecentFilesNumber"), 10).toInt()); #endif ui.commandsInDockCheck->setChecked(settings.value(QLatin1String("CommandsInDock"), false).toBool()); ui.tikzDocEdit->setText(TikzDocumentationController::tikzDocumentationPath()); ui.latexEdit->setText(settings.value(QLatin1String("LatexCommand"), QLatin1String("pdflatex")).toString()); ui.pdftopsEdit->setText(settings.value(QLatin1String("PdftopsCommand"), QLatin1String("pdftops")).toString()); ui.editorEdit->setText(settings.value(QLatin1String("TemplateEditor"), QLatin1String("")).toString()); ui.replaceEdit->setText(settings.value(QLatin1String("TemplateReplaceText"), QLatin1String("<>")).toString()); settings.endGroup(); #ifndef KTIKZ_USE_KDE settings.beginGroup(QLatin1String("MainWindow")); ui.toolBarStyleComboBox->setCurrentIndex(settings.value(QLatin1String("ToolBarStyle"), 0).toInt()); settings.endGroup(); #endif } void ConfigGeneralWidget::writeSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); #ifndef KTIKZ_USE_KDE settings.setValue(QLatin1String("RecentFilesNumber"), ui.historyLengthSpinBox->value()); #endif settings.setValue(QLatin1String("CommandsInDock"), ui.commandsInDockCheck->isChecked()); TikzDocumentationController::storeTikzDocumentationPath(ui.tikzDocEdit->text()); settings.setValue(QLatin1String("LatexCommand"), ui.latexEdit->text()); settings.setValue(QLatin1String("PdftopsCommand"), ui.pdftopsEdit->text()); settings.setValue(QLatin1String("TemplateEditor"), ui.editorEdit->text()); settings.setValue(QLatin1String("TemplateReplaceText"), ui.replaceEdit->text()); settings.endGroup(); #ifndef KTIKZ_USE_KDE settings.beginGroup(QLatin1String("MainWindow")); settings.setValue(QLatin1String("ToolBarStyle"), ui.toolBarStyleComboBox->currentIndex()); settings.endGroup(); #endif } void ConfigGeneralWidget::searchTikzDocumentation() { const QString tikzDocFile = TikzDocumentationController::searchTikzDocumentationInTexTree(); if (tikzDocFile.isEmpty()) MessageBox::sorry(this, tr("Cannot find TikZ documentation."), KtikzApplication::applicationName()); else ui.tikzDocEdit->setText(tikzDocFile); } void ConfigGeneralWidget::browseCommand(QLineEdit *lineEdit, bool isProgram) { QString location; if (isProgram) { Url url = FileDialog::getOpenUrl(this, tr("Browse program"), Url(QDir::rootPath())); location = url.path(); } else { const QString oldLocation = lineEdit->text(); Url url = FileDialog::getOpenUrl(this, tr("Browse file"), Url(!oldLocation.isEmpty() ? oldLocation : QDir::homePath())); location = url.path(); } if (!location.isEmpty()) { location.replace(QLatin1Char('\\'), QLatin1Char('/')); lineEdit->setText(location); } } void ConfigGeneralWidget::browseCommand() { QToolButton *button = qobject_cast(sender()); if (button->objectName() == QLatin1String("latexButton")) browseCommand(ui.latexEdit); else if (button->objectName() == QLatin1String("pdftopsButton")) browseCommand(ui.pdftopsEdit); else if (button->objectName() == QLatin1String("editorButton")) browseCommand(ui.editorEdit); else if (button->objectName() == QLatin1String("tikzDocButton")) browseCommand(ui.tikzDocEdit, false); } ktikz-0.12/app/configgeneralwidget.h000066400000000000000000000036011325124551100175270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2010, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZ_CONFIGGENERALWIDGET_H #define KTIKZ_CONFIGGENERALWIDGET_H #include "ui_configgeneralwidget.h" class UrlCompletion; class ConfigGeneralWidget : public QWidget { Q_OBJECT public: explicit ConfigGeneralWidget(QWidget *parent = 0); ~ConfigGeneralWidget(); void readSettings(const QString &settingsGroup); void writeSettings(const QString &settingsGroup); protected: Ui::ConfigGeneralWidget ui; private Q_SLOTS: void searchTikzDocumentation(); void browseCommand(); private: void browseCommand(QLineEdit *lineEdit, bool isProgram = true); UrlCompletion *m_urlCompletion; }; #endif ktikz-0.12/app/configgeneralwidget.ui000066400000000000000000000405341325124551100177230ustar00rootroot00000000000000 ConfigGeneralWidget General Interface 10 <p>Select the maximum number of entries that appear in the "Open Recent" menu. When the number of recently opened files exceeds this limit, the oldest entries will be lost.</p> &Number of entries in the "Open Recent" menu: historyLengthSpinBox <p>Select the maximum number of entries that appear in the "Open Recent" menu. When the number of recently opened files exceeds this limit, the oldest entries will be lost.</p> Qt::Horizontal 40 0 2 <p>If this option is checked, a dock widget is available with a list of TikZ commands which you can insert in your code by clicking on them. If this option is not checked, the TikZ commands will be available in a menu instead.</p> Show TikZ commands in &dock instead of menu (you have to restart this program for this change to take effect) <p>Select the style in which the toolbar will be displayed.</p> Toolbar st&yle: toolBarStyleComboBox <p>Select the style in which the toolbar will be displayed.</p> Icons only Text only Text alongside icons Text under icons Qt::Horizontal 40 0 Commands <p>Enter the path to the LaTeX executable here.</p> PDF&LaTeX command: latexEdit 0 0 <p>Enter the path to the LaTeX executable here.</p> Browse command <p>Browse to the LaTeX executable.</p> :/icons/document-open.png:/icons/document-open.png <p>Enter the path to the pdftops executable here.</p> &Pdftops command: pdftopsEdit 0 0 <p>Enter the path to the pdftops executable here.</p> Browse command <p>Browse to the pdftops executable.</p> :/icons/document-open.png:/icons/document-open.png Templates <p>Enter the text which will be replaced by the TikZ code in the template here.</p> &Replace text: replaceEdit 0 0 <p>Enter the text which will be replaced by the TikZ code in the template here.</p> <p>Enter the path to the executable of the text editor for the template here.</p> Editor &command: editorEdit 0 0 <p>Enter the path to the executable of the text editor for the template here.</p> Browse command <p>Browse to the editor executable.</p> :/icons/document-open.png:/icons/document-open.png Help 0 0 <p>Enter the path to the file containing the TikZ documentation here.</p> &TikZ documentation: tikzDocEdit 0 0 <p>Enter the path to the file containing the TikZ documentation here.</p> Browse file <p>Browse to the file containing the TikZ documentation.</p> :/icons/document-open.png:/icons/document-open.png 0 0 Search in TeX directory structure <p>Press this button to search the file containing the TikZ documentation in the TeX directory structure using kpsewhich.</p> &Search Qt::Horizontal 40 20 Qt::Vertical 20 0 LineEdit QLineEdit
../common/utils/lineedit.h
ComboBox QComboBox
../common/utils/combobox.h
showCoordinatesCheck toggled(bool) bestPrecisionRadio setEnabled(bool) 101 245 258 245 showCoordinatesCheck toggled(bool) specifyPrecisionWidget setEnabled(bool) 101 241 287 269 specifyPrecisionRadio toggled(bool) specifyPrecisionSpinBox setEnabled(bool) 255 269 351 269
ktikz-0.12/app/configpreviewwidget.cpp000066400000000000000000000053401325124551100201300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "configpreviewwidget.h" #include ConfigPreviewWidget::ConfigPreviewWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); } ConfigPreviewWidget::~ConfigPreviewWidget() { } void ConfigPreviewWidget::readSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); if (settings.value(QLatin1String("BuildAutomatically"), true).toBool()) ui.buildAutomaticallyRadio->setChecked(true); else ui.buildManuallyRadio->setChecked(true); ui.showCoordinatesCheck->setChecked(settings.value(QLatin1String("ShowCoordinates"), true).toBool()); const int precision = settings.value(QLatin1String("ShowCoordinatesPrecision"), -1).toInt(); if (precision < 0) { ui.bestPrecisionRadio->setChecked(true); } else { ui.specifyPrecisionRadio->setChecked(true); ui.specifyPrecisionSpinBox->setValue(precision); } settings.endGroup(); } void ConfigPreviewWidget::writeSettings(const QString &settingsGroup) { QSettings settings; settings.beginGroup(settingsGroup); settings.setValue(QLatin1String("BuildAutomatically"), ui.buildAutomaticallyRadio->isChecked()); settings.setValue(QLatin1String("ShowCoordinates"), ui.showCoordinatesCheck->isChecked()); if (ui.bestPrecisionRadio->isChecked()) settings.setValue(QLatin1String("ShowCoordinatesPrecision"), -1); else settings.setValue(QLatin1String("ShowCoordinatesPrecision"), ui.specifyPrecisionSpinBox->value()); settings.endGroup(); } ktikz-0.12/app/configpreviewwidget.h000066400000000000000000000033231325124551100175740ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2009, 2010, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZ_CONFIGPREVIEWWIDGET_H #define KTIKZ_CONFIGPREVIEWWIDGET_H #include "ui_configpreviewwidget.h" class ConfigPreviewWidget : public QWidget { Q_OBJECT public: explicit ConfigPreviewWidget(QWidget *parent = 0); ~ConfigPreviewWidget(); void readSettings(const QString &settingsGroup); void writeSettings(const QString &settingsGroup); protected: Ui::ConfigPreviewWidget ui; }; #endif // KTIKZ_CONFIGPREVIEWWIDGET_H ktikz-0.12/app/configpreviewwidget.ui000066400000000000000000000142131325124551100177620ustar00rootroot00000000000000 ConfigPreviewWidget Preview 2 <p>Specify whether the preview should be generated automatically or manually. If the option "Automatically" is checked, the TikZ code in the editor is compiled while editing. If the option "Manually" is checked, a "Build" button is available and the TikZ code is only compiled when you press that button.</p> Preview generation: <p>If this option is checked, the TikZ code in the editor is compiled while editing.</p> &Automatically buildButtonGroup <p>If this option is checked, a "Build" button is available and the TikZ code is only compiled when you press that button.</p> &Manually buildButtonGroup <p>If this option is checked, the coordinates of the mouse cursor in the preview are shown.</p> S&how mouse coordinates: false <p>If this option is checked, the mouse coordinates are shown with enough precision but without redundant decimals.</p> Use &best precision true precisionButtonGroup false 0 <p>If this option is checked, the mouse coordinates are shown with the specified number of decimals.</p> Speci&fy precision: precisionButtonGroup false <p>Specify the number of decimals with which the mouse coordinates are shown.</p> Qt::Vertical 20 0 showCoordinatesCheck toggled(bool) bestPrecisionRadio setEnabled(bool) 101 245 258 245 showCoordinatesCheck toggled(bool) specifyPrecisionWidget setEnabled(bool) 101 241 287 269 specifyPrecisionRadio toggled(bool) specifyPrecisionSpinBox setEnabled(bool) 255 269 351 269 ktikz-0.12/app/editgotolinewidget.cpp000066400000000000000000000045241325124551100177520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "editgotolinewidget.h" #include #include "../common/utils/icon.h" GoToLineWidget::GoToLineWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); ui.spinBoxGo->setMinimum(1); ui.pushButtonClose->setIcon(Icon(QLatin1String("dialog-cancel"))); setFocusProxy(ui.spinBoxGo); connect(ui.pushButtonGo, SIGNAL(clicked()), this, SLOT(goToLine())); connect(ui.pushButtonClose, SIGNAL(clicked()), this, SLOT(hide())); } GoToLineWidget::~GoToLineWidget() { } void GoToLineWidget::goToLine() { Q_EMIT goToLine(ui.spinBoxGo->value() - 1); } void GoToLineWidget::setMaximumValue(int maximumValue) { ui.spinBoxGo->setMaximum(maximumValue); } void GoToLineWidget::setValue(int value) { ui.spinBoxGo->setValue(value); ui.spinBoxGo->setFocus(); ui.spinBoxGo->selectAll(); } void GoToLineWidget::hide() { setVisible(false); Q_EMIT focusEditor(); } void GoToLineWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) hide(); else if (event->key() == Qt::Key_Return) goToLine(); QWidget::keyPressEvent(event); } ktikz-0.12/app/editgotolinewidget.h000066400000000000000000000034461325124551100174210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef GOTOLINEWIDGET_H #define GOTOLINEWIDGET_H #include "ui_editgotolinewidget.h" class GoToLineWidget : public QWidget { Q_OBJECT public: explicit GoToLineWidget(QWidget *parent = 0); ~GoToLineWidget(); void setMaximumValue(int maximumValue); void setValue(int value); public Q_SLOTS: void goToLine(); Q_SIGNALS: void goToLine(int lineNumber); void focusEditor(); protected: virtual void keyPressEvent(QKeyEvent *event); protected Q_SLOTS: void hide(); private: Ui::GoToLineWidget ui; }; #endif ktikz-0.12/app/editgotolinewidget.ui000066400000000000000000000031711325124551100176020ustar00rootroot00000000000000 GoToLineWidget Go To Line Go to line: spinBoxGo &Go Close go to line box &Cancel :/icons/window-close.png:/icons/window-close.png Qt::Horizontal 40 20 spinBoxGo pushButtonGo pushButtonClose ktikz-0.12/app/editindentwidget.cpp000066400000000000000000000100011325124551100173760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2011, 2012, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "editindentwidget.h" #include #include #include "../common/utils/icon.h" IndentWidget::IndentWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); ui.pushButtonClose->setIcon(Icon(QLatin1String("dialog-cancel"))); readSettings(); connect(ui.pushButtonIndent, SIGNAL(clicked()), this, SLOT(indent())); connect(ui.pushButtonClose, SIGNAL(clicked()), this, SLOT(hide())); } IndentWidget::~IndentWidget() { } void IndentWidget::readSettings() { QSettings settings; settings.beginGroup(QLatin1String("Editor")); ui.radioButtonSpaces->setChecked(settings.value(QLatin1String("Indent/InsertChar"), '\t').toChar() == QLatin1Char(' ')); ui.radioButtonTabs->setChecked(settings.value(QLatin1String("Indent/InsertChar"), '\t').toChar() != QLatin1Char(' ')); ui.spinBoxSpaces->setValue(settings.value(QLatin1String("Indent/NumberOfSpaces"), 2).toInt()); ui.spinBoxTabs->setValue(settings.value(QLatin1String("Indent/NumberOfTabs"), 1).toInt()); settings.endGroup(); } void IndentWidget::writeSettings() { QSettings settings; settings.beginGroup(QLatin1String("Editor")); settings.setValue(QLatin1String("Indent/InsertChar"), ui.radioButtonSpaces->isChecked() ? QVariant::fromValue(' ') : QVariant::fromValue('\t')); settings.setValue(QLatin1String("Indent/NumberOfSpaces"), ui.spinBoxSpaces->value()); settings.setValue(QLatin1String("Indent/NumberOfTabs"), ui.spinBoxTabs->value()); settings.endGroup(); } void IndentWidget::setUnindenting(bool isUnindenting) { m_isUnindenting = isUnindenting; setWindowTitle(m_isUnindenting ? tr("Unindent") : tr("Indent")); ui.pushButtonIndent->setText(m_isUnindenting ? tr("Unin&dent") : tr("In&dent")); } QChar IndentWidget::insertChar() const { return ui.radioButtonSpaces->isChecked() ? QLatin1Char(' ') : QLatin1Char('\t'); } int IndentWidget::numOfInserts() const { return ui.radioButtonSpaces->isChecked() ? ui.spinBoxSpaces->value() : ui.spinBoxTabs->value(); } void IndentWidget::indent() { const QChar insertChar = ui.radioButtonSpaces->isChecked() ? QLatin1Char(' ') : QLatin1Char('\t'); const int numOfInserts = ui.radioButtonSpaces->isChecked() ? ui.spinBoxSpaces->value() : ui.spinBoxTabs->value(); Q_EMIT indent(insertChar, numOfInserts, m_isUnindenting); writeSettings(); } void IndentWidget::hide() { setVisible(false); Q_EMIT hidden(); readSettings(); } void IndentWidget::showEvent(QShowEvent *event) { if (ui.radioButtonSpaces->isChecked()) setFocusProxy(ui.radioButtonSpaces); else setFocusProxy(ui.radioButtonTabs); QWidget::showEvent(event); } void IndentWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) hide(); else if (event->key() == Qt::Key_Return) indent(); QWidget::keyPressEvent(event); } ktikz-0.12/app/editindentwidget.h000066400000000000000000000036711325124551100170620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef INDENTWIDGET_H #define INDENTWIDGET_H #include "ui_editindentwidget.h" class IndentWidget : public QWidget { Q_OBJECT public: explicit IndentWidget(QWidget *parent = 0); ~IndentWidget(); void setUnindenting(bool isUnindenting = true); QChar insertChar() const; int numOfInserts() const; Q_SIGNALS: void indent(QChar insertChar, int numOfInserts, bool isUnindenting); void hidden(); protected: virtual void showEvent(QShowEvent *event); virtual void keyPressEvent(QKeyEvent *event); private Q_SLOTS: void indent(); void hide(); private: void readSettings(); void writeSettings(); Ui::IndentWidget ui; bool m_isUnindenting; }; #endif ktikz-0.12/app/editindentwidget.ui000066400000000000000000000127621325124551100172510ustar00rootroot00000000000000 IndentWidget Indent Indent: Using sp&aces buttonGroup Qt::Horizontal QSizePolicy::Fixed 20 20 false &Number of spaces: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter spinBoxSpaces false 1 2 Using ta&bs true buttonGroup N&umber of tabs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter spinBoxTabs 1 1 In&dent Close indent box &Cancel :/icons/window-close.png:/icons/window-close.png Qt::Horizontal 47 19 pushButtonIndent pushButtonClose radioButtonSpaces toggled(bool) labelSpaces setEnabled(bool) 55 17 192 17 radioButtonSpaces toggled(bool) spinBoxSpaces setEnabled(bool) 55 17 281 17 radioButtonTabs toggled(bool) labelTabs setEnabled(bool) 55 48 192 49 radioButtonTabs toggled(bool) spinBoxTabs setEnabled(bool) 55 48 281 48 ktikz-0.12/app/editreplacecurrentwidget.cpp000066400000000000000000000070711325124551100211500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "editreplacecurrentwidget.h" #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #include #include #else #include #include #include #include #endif #include "../common/utils/icon.h" ReplaceCurrentWidget::ReplaceCurrentWidget(QWidget *parent) : QWidget(parent) { m_replaceLabel = new QLabel; m_replaceButton = new QPushButton(tr("&Replace")); QPushButton *replaceAllButton = new QPushButton(tr("Replace &All")); QPushButton *dontReplaceButton = new QPushButton(tr("&Don't Replace")); QPushButton *cancelButton = new QPushButton(tr("&Cancel")); cancelButton->setIcon(Icon(QLatin1String("dialog-cancel"))); QVBoxLayout *mainLayout = new QVBoxLayout(this); QWidget *buttonsWidget = new QWidget; QHBoxLayout *buttonsLayout = new QHBoxLayout; buttonsLayout->addWidget(m_replaceButton); buttonsLayout->addWidget(replaceAllButton); buttonsLayout->addWidget(dontReplaceButton); buttonsLayout->addWidget(cancelButton); buttonsLayout->addStretch(); buttonsLayout->setMargin(0); buttonsWidget->setLayout(buttonsLayout); mainLayout->addWidget(m_replaceLabel); mainLayout->addWidget(buttonsWidget); setFocusProxy(m_replaceButton); connect(m_replaceButton, SIGNAL(clicked()), this, SIGNAL(replace())); connect(replaceAllButton, SIGNAL(clicked()), this, SIGNAL(replaceAll())); connect(dontReplaceButton, SIGNAL(clicked()), this, SLOT(dontReplace())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(hide())); } ReplaceCurrentWidget::~ReplaceCurrentWidget() { } void ReplaceCurrentWidget::setReplacement(const QString &text, const QString &replacement) { m_replaceLabel->setText(tr("Replace %1 by %2?").arg(text).arg(replacement)); } void ReplaceCurrentWidget::dontReplace() { Q_EMIT search(); } void ReplaceCurrentWidget::hide() { setVisible(false); Q_EMIT hidden(); } void ReplaceCurrentWidget::showEvent(QShowEvent *event) { m_replaceButton->setFocus(); QWidget::showEvent(event); } void ReplaceCurrentWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) hide(); else if (event->key() == Qt::Key_Return) Q_EMIT replace(); QWidget::keyPressEvent(event); } ktikz-0.12/app/editreplacecurrentwidget.h000066400000000000000000000040601325124551100206100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef REPLACECURRENTWIDGET_H #define REPLACECURRENTWIDGET_H #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif class QLabel; class QPushButton; class ReplaceCurrentWidget : public QWidget { Q_OBJECT public: explicit ReplaceCurrentWidget(QWidget *parent = 0); ~ReplaceCurrentWidget(); void setReplacement(const QString &text, const QString &replacement); Q_SIGNALS: void search(); void replace(); void replaceAll(); void hidden(); protected: virtual void showEvent(QShowEvent *event); virtual void keyPressEvent(QKeyEvent *event); protected Q_SLOTS: void hide(); private Q_SLOTS: void dontReplace(); private: QLabel *m_replaceLabel; QPushButton *m_replaceButton; }; #endif ktikz-0.12/app/editreplacewidget.cpp000066400000000000000000000121441325124551100175420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "editreplacewidget.h" #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) #include #endif #ifdef KTIKZ_USE_KDE #include #endif #include #include "../common/utils/icon.h" #include "../common/utils/lineedit.h" ReplaceWidget::ReplaceWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) ui.comboBoxFind->setEditable(true); ui.comboBoxReplace->setEditable(true); ui.comboBoxFind->lineEdit()->setClearButtonEnabled(true); ui.comboBoxReplace->lineEdit()->setClearButtonEnabled(true); #else ui.comboBoxFind->setLineEdit(new LineEdit(this)); ui.comboBoxReplace->setLineEdit(new LineEdit(this)); #endif ui.pushButtonClose->setIcon(Icon(QLatin1String("dialog-cancel"))); ui.pushButtonBackward->setIcon(Icon(QLatin1String("go-up"))); ui.pushButtonForward->setIcon(Icon(QLatin1String("go-down"))); #ifdef KTIKZ_USE_KDE // activate completion KCompletion *completion = ui.comboBoxFind->completionObject(); connect(ui.comboBoxFind, SIGNAL(returnPressed(QString)), completion, SLOT(addItem(QString))); completion = ui.comboBoxReplace->completionObject(); connect(ui.comboBoxReplace, SIGNAL(returnPressed(QString)), completion, SLOT(addItem(QString))); #endif setFocusProxy(ui.comboBoxFind); connect(ui.pushButtonBackward, SIGNAL(clicked()), this, SLOT(setBackward())); connect(ui.pushButtonForward, SIGNAL(clicked()), this, SLOT(setForward())); connect(ui.pushButtonFind, SIGNAL(clicked()), this, SLOT(doFind())); connect(ui.pushButtonReplace, SIGNAL(clicked()), this, SLOT(doReplace())); connect(ui.pushButtonClose, SIGNAL(clicked()), this, SLOT(hide())); } ReplaceWidget::~ReplaceWidget() { } void ReplaceWidget::setBackward() { ui.pushButtonBackward->setChecked(true); ui.pushButtonForward->setChecked(false); } void ReplaceWidget::setForward() { ui.pushButtonBackward->setChecked(false); ui.pushButtonForward->setChecked(true); } void ReplaceWidget::setForward(bool forward) { if (forward) setForward(); else setBackward(); } void ReplaceWidget::hide() { setVisible(false); Q_EMIT focusEditor(); } void ReplaceWidget::doFind() { const QString currentText = ui.comboBoxFind->currentText(); if (currentText.isEmpty()) return; if (ui.comboBoxFind->findText(currentText) < 0) ui.comboBoxFind->addItem(currentText); QTextDocument::FindFlags flags = 0; if (ui.checkBoxCaseSensitive->isChecked()) flags |= QTextDocument::FindCaseSensitively; if (ui.checkBoxWholeWords->isChecked()) flags |= QTextDocument::FindWholeWords; if (!ui.pushButtonForward->isChecked()) flags |= QTextDocument::FindBackward; Q_EMIT search(currentText, flags); } void ReplaceWidget::doReplace() { const QString currentText = ui.comboBoxFind->currentText(); if (currentText.isEmpty()) return; const QString replacementText = ui.comboBoxReplace->currentText(); if (ui.comboBoxFind->findText(currentText) < 0) ui.comboBoxFind->addItem(currentText); if (ui.comboBoxReplace->findText(replacementText) < 0) ui.comboBoxReplace->addItem(replacementText); QTextDocument::FindFlags flags = 0; if (ui.checkBoxCaseSensitive->isChecked()) flags |= QTextDocument::FindCaseSensitively; if (ui.checkBoxWholeWords->isChecked()) flags |= QTextDocument::FindWholeWords; if (!ui.pushButtonForward->isChecked()) flags |= QTextDocument::FindBackward; Q_EMIT replace(currentText, replacementText, flags); } void ReplaceWidget::setText(const QString &text) { ui.comboBoxFind->lineEdit()->setText(text); ui.comboBoxFind->setFocus(); ui.comboBoxFind->lineEdit()->selectAll(); } void ReplaceWidget::showEvent(QShowEvent *event) { ui.comboBoxFind->setFocus(); QWidget::showEvent(event); } void ReplaceWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) hide(); else if (event->key() == Qt::Key_Return) doFind(); QWidget::keyPressEvent(event); } ktikz-0.12/app/editreplacewidget.h000066400000000000000000000040711325124551100172070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef REPLACEWIDGET_H #define REPLACEWIDGET_H #include "ui_editreplacewidget.h" #include class ReplaceWidget : public QWidget { Q_OBJECT public: explicit ReplaceWidget(QWidget *parent = 0); ~ReplaceWidget(); void setForward(bool forward); void setText(const QString &text); public Q_SLOTS: void doFind(); Q_SIGNALS: void focusEditor(); void search(const QString &text, QTextDocument::FindFlags flags); void replace(const QString &text, const QString &replacement, QTextDocument::FindFlags flags); protected: virtual void showEvent(QShowEvent *event); virtual void keyPressEvent(QKeyEvent *event); protected Q_SLOTS: void hide(); private Q_SLOTS: void setBackward(); void setForward(); void doReplace(); private: Ui::ReplaceWidget ui; }; #endif ktikz-0.12/app/editreplacewidget.ui000066400000000000000000000112641325124551100173770ustar00rootroot00000000000000 ReplaceWidget Find and Replace Fin&d: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter comboBoxFind 0 0 &Whole words C&ase sensitive Rep&lace with: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter comboBoxReplace 0 0 Search backward :/icons/go-up.png:/icons/go-up.png true Search forward :/icons/go-down.png:/icons/go-down.png true true &Find &Replace Close find and replace box &Cancel :/icons/window-close.png:/icons/window-close.png ComboBox QComboBox
../common/utils/combobox.h
comboBoxFind comboBoxReplace checkBoxWholeWords checkBoxCaseSensitive pushButtonBackward pushButtonForward pushButtonFind pushButtonReplace pushButtonClose
ktikz-0.12/app/extract-tikzcommands.xq000066400000000000000000000061321325124551100200760ustar00rootroot00000000000000(: : Copyright (C) 2010 by Glad Deschrijver : : : This program is free software; you can redistribute it and/or modify : it under the terms of the GNU General Public License as published by : the Free Software Foundation; either version 2 of the License, or : (at your option) any later version. : : This program is distributed in the hope that it will be useful, : but WITHOUT ANY WARRANTY; without even the implied warranty of : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the : GNU General Public License for more details. : : You should have received a copy of the GNU General Public License : along with this program; if not, see . :) (: : XQuery script to extract all translatable strings from tikzcommands.xml : and obtain a .h file containing QT_TRANSLATE_NOOP("TikzCommandInserter", str) lines. : The translatable strings are the arguments of
, : and the options which are the strings between < and > : in the arguments of . :) declare variable $prefix := string("QT_TRANSLATE_NOOP("TikzCommandInserter", ""); declare variable $suffix := concat("")", codepoints-to-string(10)); (: The function below gets the list of options of one in the xml file :) declare function local:getOption($text as xs:string) { let $text := fn:replace($text, "<=", "") let $option := fn:replace($text, ".*<([^>]*)>.*", "\\1") let $option := fn:replace($option, " ", "<") (: dirty hack to keep the spaces in an option, since we have filtered out all < this is a good temporary replacement string :) return $option, (: get recursively the other options on the same line :) let $temp := fn:replace($text, "^[^>]*", "") let $temp := fn:replace($temp, "^>", "") return if (fn:contains($temp, "<")) then local:getOption($temp) else "" }; declare variable $doc := doc("tikzcommands.xml"); (: The function below gets the list of options of all s in the xml file :) declare function local:getOptionList() { for $text in ($doc//item/@description) return if (fn:contains($text, "<")) then let $options := fn:string-join(local:getOption($text), ' ') return $options else "" }; (: join all options in a space-separated list which is then turned into a : real list from which all duplicates are removed :) let $options := fn:string-join(local:getOptionList(), '') let $options := fn:tokenize($options, '\s') let $options := fn:distinct-values($options) for $option in $options let $option := fn:replace($option, "<", " ") (: dirty hack to keep the spaces in an option :) return fn:concat($prefix, $option, $suffix), (: get the titles of the
s and the names of the s :) for $text in ($doc/tikzcommands/@title, $doc//section/@title, $doc//item/@name) let $text := fn:replace($text, '\\', '\\\\') let $text := fn:replace($text, '"', '\\"') return fn:concat($prefix, data($text), $suffix) ktikz-0.12/app/icons/000077500000000000000000000000001325124551100144625ustar00rootroot00000000000000ktikz-0.12/app/icons/CMakeLists.txt000066400000000000000000000005451325124551100172260ustar00rootroot00000000000000# this installs the icons with a file name of the form --., e.g. hi22-apps-ktikz.png ecm_install_icons(ICONS hi16-apps-ktikz.png hi22-apps-ktikz.png hi32-apps-ktikz.png hi48-apps-ktikz.png hi64-apps-ktikz.png hi128-apps-ktikz.png hisc-apps-ktikz.svgz hisc-apps-ktikz.svg DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor )ktikz-0.12/app/icons/Prociono.otf000066400000000000000000001054601325124551100167720ustar00rootroot00000000000000OTTO €PCFF ЄXАu TpLFFTMR…†GDEF+<|  GPOSˆш˜O~Ф@GSUB‹GС‡}@„OS/2Y%(@`cmapнѕ§lЦheadђ#;Eм6hheaЌ„$hmtxŠј о† maxpDP8name ў]з Щpostџ†2 4 LЬ ШT_<ѕ шШVе<ШVе<ў1џ,$№№џ-dNў1џФ$DPDŠМрŠМ1€o@BPfEd@ ћџ5№гЫо 2fЋФ#J mŒ$п " _ Є d ™ Д FЬ 8 S z H•  ,1 ,vThis font has been released into the public domain by its author, Barry Schwartz. This applies worldwide. In some countries this may not be legally possible; if so: Barry Schwartz grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.This font has been released into the public domain by its author, Barry Schwartz. This applies worldwide. In some countries this may not be legally possible; if so: Barry Schwartz grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.ProcionoProcionoRegularRegularFontForge 2.0 : Prociono : 4-7-2010FontForge 2.0 : Prociono : 4-7-2010ProcionoProcionoVersion 2.3 Version 2.3 ProcionoProcionoThe Crud Factory / La RubejplenigejoThe Crud Factory / La RubejplenigejoBarry SchwartzBarry Schwartzhttp://crudfactory.comhttp://crudfactory.comhttp://crudfactory.comhttp://crudfactory.comМ d@$~ЃЋБДИЛЯжняі§!%-5:>DHU]aeq7Чкн '    " & 0 : Ќ"ћћџџ ЁІ­ДЖКПбипёјџ$(09=CGLX`dht7Цим '    & 0 9 Ќ"ћћџџџсџПџНџМџКџЙџИџЕџДџГџВџБџАџЏџ­џЋџЉџЇџЅџЃџ џžџšџ˜џ•џ“џ‘џџџ‹ўдўFў6ў5ўўў§їсс с с срџрїр†п!43   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_yz|~…Š“’”–•—™›šœŸž ЁЂЄЃЅЇІЊЉЋЌ+labd-o‘jfne{‹mgr˜Јt`hs.ux‰чш"#()%&Ў20156,p'*/wv€}‚ƒ„‡ˆ†ŽŒд kq џƒ2 Prociono,ј‘ј’ј“ј”јќcћhњИњ„ž8\2z %+1<GQ[agmsz‡—ЁЇ­ИУЩЯйуюљџ )+-8CIOU[agmsz‡šЇ­ГЙПХЫжсчэѓљ *7BMXcioyƒˆ—ŸЌДНХбмуђњ !%(+.38;IT]foŠ•˜ЪвкsofthyphenAmacronamacronAbreveabreveCacutecacuteCcircumflexccircumflexCdotaccentcdotaccentCcaronccaronDcarondcaronEmacronemacronEbreveebreveEdotaccentedotaccentEcaronecaronGcircumflexgcircumflexGbrevegbreveGdotaccentgdotaccentHcircumflexhcircumflexItildeitildeImacronimacronIbreveibreveIdotaccentIJijJcircumflexjcircumflexLacutelacuteLcaronlcaronNacutenacuteNcaronncaronOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcaronrcaronSacutesacuteScircumflexscircumflexTcarontcaronUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautWcircumflexwcircumflexYcircumflexycircumflexZacutezacuteZdotaccentzdotaccentlongsuni0237gravecmbacutecmbcircumflexcmbtildecmbmacroncmbbrevecmbdotaccentcmbdieresiscmbringcmbhungarumlautcmbcaroncmbcedillacmbhyphentwouni2011horizontalbarEurof_ff_if_lf_f_if_f_ls_tcircumflex.capcommaaccentacute.capcaron.capgrave.caphungarumlaut.capuni2014.altc_tf_tf_f_t2.3This font has been released into the public domain by its author, Barry Schwartz. This applies worldwide. In some countries this may not be legally possible; if so: Barry Schwartz grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.ProcionoProcionoh  !"#$%&'()*+,-./0123456789:;<=>?@|BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab fƒЊ‹j‡Ѕ€Ёœ}sr…x{ЎЋЌА­ЏŠБЕВГДЙЖЗИКОЛМПНФСТУХ•ЫШЩЭЪЬЮвЯабжгдезлиймк“сопртуˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ‘­ЎЏАБВГДЕЖЗИЙКЛМНОŽ”ПРСТУФХЦРнЧШЩЪЫЬЭЮЯабвгдежЦзийкЧфлм~ˆ‚„†нопрстуфхцчшщъ:o‰ыAuiwvpqtyzklьІэюя№ёђѓєѕіїјљњћќD#&\к}QoМFx‰šЊМnлRдJа*И  8 X z Œ ­ +   с ќ 1 _ + W t ,Qј"<ф@hŒРс1Gбтј>R™ЙХэЉОч[ЁКнљЎЫЏШ_ѓ"4ZШлsƒЄyЙћ}46асбу ? y   д ц ѓ!X!–"#"L"u"ž"Ч"ј#)$P% %R%—%м&)&V&ƒ&А&х''F'n'–'Н'ь((О(я))W)z**K**В*ф+#+c,,Џ,й--0-c-†-Њ-Ю-ї.%.M.v.œ.Ф.ѕ/‘/Х/љ0-0o00К0т11<1o1š1П1ъ2292[2†2Ћ2ј3S3—3С4404v4Ÿ4ф55?5–5Ф66I6 6у7 787\7ˆ7Љ7е7ј8'898o8Ќ8з8ѓ9(9V9‰9Е9я::W:…:Ќ:б:ј; ;U;‚<Ž=D=}=Ђ=л>>8>b>™>Т>љ?"?o??Н?№@@S@‚@Ж@єA6ApAЉAбAѓBB8BcB BвBјC*CdC•C№CџDD%D7DJDeDuDŒD DДDШDлDюEEE1EMEfEzEˆE™EЊEОEгEрEэEўFF!F:FTFlFшGЦHH-HѕIIBIРIЫJ€K(KŒLŒM4MџNN$N8NLN`NN•O@OјQD‹НјCНННїРННј$јЇќ$НќuјCїРќCћпћпї2Уїаљz‹b™ћЅ“ћ"7Ќ…™еЃїЊ›ї\–p…c…h†~§& ћ_јЩї|ЧчIГхчIГРЧљЋ ЅћvГ‹Р! ї0ˆЅћvГ‹! 7ї7ЗщИїЩаЊЪ~ЭшЛї7оˆa‚B„`‹‹О–‘‹ТŽЧ’Њя‡`ƒCƒ`‹‹О—‘‹СЪ’Њк‹”Л2‹—цу‹•Й.‹дТ—П”Љ‹‹U‰…‹sƒ?‡l+Т—С•Љ‹‹R‡…‹sƒ?‡l?‹‚_и‹‚.=‹їŒ–шэ‹.~Шј5ФпЮЫДжЬNАјпїњ‹.ЮpЫuћ<kx—šoБ Сi‹s‹ˆ‚‹ћ‹|Ž€ƒ•{­xиŠ<ДоЕ“Џ•К昨Ї‹Ї‹ёAЇIЂї.Ёˆ ƒ–zє˜x–`Œ}А‹ЦŽЈ‹•‹Џx’|‘t•p’k‹ˆоb5[„oueN~w‡p‹pЮЕ‹›’ДФ“ћf›pž‹Вєћєї.јЕ|Ќw‹^‹aoq\…їЦї=ЦdЧї=ЦЕОї3ПуОї3РпЕј3ИJме‹Жв’›‘š‘Ћ‹œ‹жfн-‹{‹fntouvd‹PОŒшИЊВЗgMHzrQg[­ШФќ АsїѕјАfЃћќ 2ИKме‹Жв’›‘™’Ћ‹Пеeо-{‹fntpuud‹PОŒшЙŒЉВЗhMGzsQg[­ШїeyиavјuЌїYЦИю‰тї8ЭКИїV‹WŸTОZХSЃ‹а‹с‹›’­ЃЋЁЊ ЉІЅ­vїћ ОЌ‹М‹ЌCПHРNРѓїWGнї”Ќr‰bŠa‹b‹aŒrjП‡Ё‹Y‹UxChJћPї>ћ ї5‹дПВЈИЕБ|P‹|ˆ}‰­ƒЅС–Е‹ЊЎnŸћ$>@A‹\ЂNЫˆRŠrlјЊћŠš‰ЩŠЋ‹Љ‹Јр‹їщ’єа–]‚ћK(Yp‹о8зј зїж№p•Ј™nј?‹‹ЂЋœА–d‡5†?‹pn‹iŒfŒ•“™•›–ПЎрЦѓо‹ъ‹ї !Ќ;‹v‹y‰|‡ћ9™nпВЎ‹ш‹œW‹[‹GEL.Bћ2ћ_ОїзЗї„бїЩх;шшŸћ1Ђ]їyї ї+ї‹ЭLв6№ыЗВУ‹Ы‹ц-Т5‹x‹yˆy†ћ3›oйЗМ•™‹”‹фs‹=‹o}8ћDo’_“‹’Œ’‹шї"ЈPO(ћ"ћ‹~Œ~‹ијUwїЋхˆЙЃ]Мˆї1‹О‹Šћˆ,‹‹˜Л”ЁŒ‹‹†ЮŠїІЄ‹Ђ‹Ё•Ќ‘Ѕ›ˆŽŠŒ‡Žm‰`ˆi‹‹јM„“t‹X„‡f^&ћ5Cћ™.ЄоїїaМР/‹:Š<ˆ$uŠn‹h‹l‹iŒiŽћ_Оїфпї1оїЩяЁћ1Ђ]ї]ї7їїNї!П._‹Šx‰Ў˜у’ЋЉŒЁŒЉ‹­‹ЗŠиŠ‹Дž–?ˆSŠb‹`‹qŒ~Œ}}‡kaћš‹‹ yУ‹цЭ…ћ"(ћ2ћ‹~Œ~zРїќЦїЬwЄьїпЄїЁћwёPївї,Ўїї-7К2+‹glo_‘ї мїЭИœ–ВЄОІ•xЊNwWp[gBTћ ћ‹ћъД‹•Œ”‹”ŸЇЁЉг‹‹›‰™†ЭwЄc‹%‹2j%9‹ћ‹{ї†юŠ‹”Š‹œј>нГЈГїфЈЈз’–“ЅŠїj‹‹‹—€aћHћCћOћЕœ~˜„•‡іїїјQ“ї–mŠ@Š>‹(‹$ŒxŒ}}Œy‹{‹|‹k‰nˆYzСљDО йTхї|йDрф їVћс8її'еї ї‹мgкDБiœисСДв‹ЪрCгћћ75ћ‹aА1дb+TfP‹,ф醋д­ТсОГvХmУf‹5?b:/R7аоиЎјJЦЕВбжИ]=‹QcYHmAЎXЬ‹Ыћ`­їpПјХЎсїыЎїІћй0ѕА‹Д–ЖЅhћ>,Lћ?s‘iї+Žї”П‹јBђfї!ћ&ћ ћ Yћ]сІїСОХї ‘ћ'_‹SˆZ…`y|r€`‹ћ wщєћпї2їMї2ЪїЪп їы ћпћїšїMї2ЪїFа`Ъј? ћч" јžwˆї‹јnћg—–Шќї?јї?—Ш–ќ`ћaї@ЭхЭї@$ }х$ јžwˆК—€ј`їa™бќnїg€—Nјћ?ќћ?ћї2ї бїЧЩУї+ЄˆЌїUйъбљ.‹tmcЄ–Е}Нї‹П‹Ѓw”Pil‹o‹6kY*‹u‹e–[Дц–ћdЌ… ОКЂ{І€Ќ‹ї‹Зр‹ї‹Џ†ВƒГ‰“Iї ћ‹#z{^}ќк їёћ_Кї#м;Шј.Ъї5ШŸцї)гї“Хї:уП€Ÿї‚ћvї)ћkїФФ‹ѓЄД›ƒЈc‚J}N‹ћЈћїLїYї<ъїЖї­ї3ї9)ћgћ10ћ<]t…ДЏ‹Ѓ”їЬ Сu”hln–Oœi‹9ћ-ћ"ћEп€ћIїhЃВ‹тЫОМП€˜,ЎzЌ‹юї(ї‚ї0їˆћGї ћYћƒћœћBћрїЬ~їЛэкЏ‹ЗvЛ[‹€ƒћ8†Pп€cXQfZ‹cTуаїL‹ЏїiЖјWw‹% їrї”& й…ЩїШЛїЏМїі'эїЃї;ѕтЈІЦП‹Ј‹Ј‰І‰Ћ‰Є‰Ј‰Є‹ її эї ‹оSШћАЉšєЭЌИЕ‹фТrїћKw\‹Šћ.‹W‹Pp‹f™ŠКˆ ‡Œkъ' їPђђ‹І‹иїЄЬБ‹ьдX&"DX[ћ"d‘йїžŒѕїŒН—–І•м­‹єšыoћ ‹VtK ј‹Аљ,АсЫcТјЖї5ѕаљQХˆНˆ‹nр‹‹‰ћOuћя†N|oL„gї€В`]’‹Ќи‹їc‘ї0”ї/ї”ќэВ‹Хї+сїgіїФ™ћ{‘ћћ-‹ec†YˆfїЉАQxއЗŠЇиїэ„їZ‹‘‹ЉМŽЦŽАћx‚pHћN>ћR8ћHћtјР‚Іћx‹їb‹Вљ)БёЮOТјeШRНаšљQ? р@ дA ШB дC їB}ЭљЩЕёј]ђЕїњD ё E Э‹АїБНїзМї їћѓїŸїьЈїъ­eŽVR‹А‹“ŒїŒїЄ€И†А‹їSкї кэbєћ9w\‹Šћ-‹V‹Qo‹f™ŠєКˆ ‡ŒkGŒ5‹5ь‹ћ_‰&ŠiŠec†ZˆїYјєŒсїХ––Ѕ”еŽЕ‹‘‹—‡–†зfŒD‹U‹W‡'ћ%‹P‹c›{™їB}ЭљЩЕёј]ђЕїњћeщћ7їsž‹ЈŽЋ”ї0ћU™“žЄЕ—›kЂ_ДHдїФбї‹їp‹їf,їћj‹R‹ћ1n@ћfSp9‹ћё E э‹АїдНїЖКїі'ьїѓьЋ3 єF ь' їSјG W|вјvї5ЫФлCАїЉиNщђФјГH ъI єJ А‹ЎљЮRФЎїcє%їїdЎжљkK ЖL КM ЖN жO Ж€–ќо‹їN}Чљ#Аї ђјЬLРш­љQP №Q шR їG vљQАљQМˆ™tšfї—§Ы‹їјЪЛї–œТ‘Џћ€dг„–‹n‹sћћћHћ)fић,јN‹Ё‹  •РАћЈјA vљQАї€йї$їљQS ж‹Аљ,А‹їtВ\h‘‹ž‹›ьї бщї$ћw‘€ƒ‹„‹v[…p‰fї•А\Ž…9їћїoї>їyЁЇ­ВВЏћtdЭ…•‡‹x‹xG"@%'ї7pР‹š‹›œ‘ОАћЉfЋ‰œ€—zїaћЩ_Mћ"ћWrtvwlsw‰й‹Ўљ.АїŸяљQT х‹Нј‡vї3Ое­јdГ –U ћЈћa­њ;ЌяхяћU–€‹žИ‹Ї‹БŠН‰­&ˆ•ŠЙљЦŒЙŽ–№ЌY‰e‹o‹^‹xŒ‡Œ€€љБwwљБј]ў=Ъ‹ќ_њ=ћЈћa­њ;Ќєхћ?iНБŒЇ‹И‹ž‰‹––‹њg€–‡ŠxŠ^‹o‹e‹Yj№‰Ž€Œ]§ЦŠ]ˆ&‰љwˆїЅ–Ш—ї?јї?ќШ–—ћgјnE~D)Т`TјˆУDјУї]ї$їhї$љ_Бhя7Уf UУGпkГo‹ov‰s.Юј)ЫГхKДїlу8їфГї V иW шх•X g|ај(аїiЌЃwссїŒф•љ™jд‹ƒ‹11ˆћIћрЇdщtИ‹Ў‹ЎŽІ—СЃУЩ‘“ЌН•Ъ‹тїqяћ0w‹q…ћPїЉ‹Ж–‚ƒ€‹b|)‚ї5ќФ‹­‹ЙŒЧЭгБœŒЁ‹С‹оp‹ћ%‹„‡ћ~axMm…]‹W‹OЄ|žƒ“‰Ÿ‹тћ}ијаЉфїˆЉЉї„Y _|сј#ХїiЌЃwЉуїы.сњЉї†Z ќ[ уБ\ њ] #|иї[Иї,ЬЉыїmшЉїŠ^ эЧ_ ћb‹Њј5Уї•Аї я.фї:ЖьЉјT` є‹бїDєї‹ŽУћ‹‹šї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|+ћ`ВїWМјЎvШ•сVч?цї?ъfыш€•8a уb ф€c дd тe Ш€сЈf еВјg …‹­ј5дїlЌЃwьхїiфЁљ™h ћЕ‹­јGЌŸкїфї,ујфљ-i фP§-j ћгјjЌŸйїбїбљ-k @§цl ‹­јN­їzЌЃwђтї1їQЂљ™jЮˆ–‘‹ћg‹4‰ћ‹ћD‹!…”L}iїl­U—ƒ†‹У‹ЅА‹Ф‹“‹™Š™ТthЕї}ћЈКЊ‹И‹‹‹—Œ‹”‹ˆ’‚”ћЅїЄ‹‹їїхЎЁŒ‹‹“…“‹t‰gŠg‹f‹fŒt}І„‹ƒ‚’‚—𑄁^ћћ ^ŒјP‹š‹Ё‹‘–ƒ€‹c|)‚ћГ‹­љUЌЅw№ь-пшЅm №n шo ї›‹­ј6еъхїVшїTу0Ћјe ‰š‹”ƒ™—‹ќ‹q~~^ˆiї`­Z™„|‹ї‹УŽрї ™МЂЈ‹ж‹™r‹e‹SŠn‹ћY‹Sˆ}Xˆiї`­[•‚€‹ї‹Л‹фŒїž•ФЇЃ‹у‹k‹K‹ћŒB‹]‹L…€Xˆiї`­YŽ‚†‹ї‹Со‹ї‹Ћsс2‹H‹I]irUФi™f‹Z‹ViRk™Д†—yp‹gqCƒƒ‹­ј6дцђ+фїbщшЋјp иq шr Uzвј%вЉъїЇцЉї˜s ъ“t zћ_­ї7Лј+иэц1сї‹ыєЉјŠjЩƒ]ь‹ћѓ‹)Œ-‹r}~_†kї`­Y”‚ŠФє‹ЇŽЭŒШ“}•Zї‹ї цїїYїgћ+˜zD‹PThz‹•ŽЕ‹‹—ƒ‹€‹c|(‚ї3ћЈ‹УЫŒЭЖЁЖšА‹ЭМ]ћћWitQU‹ћ+ы‘юœїїЃ‹к‡h‹{‹ћŽ‹s†rzryi~j‹OPЖїћA‹­ј2жёцї-ЏЄu ћLzЫј7ЦИЮїHЬNГ№Иїњv шw ћ€|вјУьх•јTx |‚кј[wффїiх3ы0їфЁј†y №z ш{ №| <‘vјДwјї ј‰jЅˆ›šzЋgЊћ­ћКћ1ŠtВ‹Л‹~žыї№їž‚‹š‹’‰“‹z‹x‡m‹€‹{{‹y‹{ˆ‹|‹iЏЊ‹_‹{ˆV$ћЄ‹"ј Ћ—‚Žƒ€‹`z2€ї„‘vјДwљ<їј‰} ћ Žv­јtwїнї p†ї8­s~‹—‹ŸЌИЯєАѓћ3Э8Ж‹‹—‹‹Ÿ‰—ћ;ї™•šЫщ­ЕЊЕІ{‹ ‹›ƒ‹t‹…‰n‹o‹|}‹w‹ˆ}‹ˆ‹pАЃ‹g‹fZcS8ї*€Ўm‹w‹o{LƒjЭ„|їћIћћ=l_s~p‚†‚‹€Š<јЅwјї ј‰~ T vКј.ИСБїьЖmЕИЌЅ–qx t€ ћKНїЎЋ„Б‚Г~ЄfoћхТUГи}Н‚”Ќk“k“c™uЋ™їdxїƒЛAЏv ŽеЏ“Лžї}їdЁЋГ˜Ћ“Ћ’‚ЌYƒ>|cTTЊћоocc~kƒkƒћпљБwмймћ_йњ|=ћKљ”ЌћC”jН”и™Г•ТСoїхЄАØЋ“Ћ’‘Ћk’e•c˜oГЊїоTТc•>šY“‚jЋ„ЋƒГ~Ёk}ћdžћ“[еg ˆv‰Agƒ[xћ™ћdukc}kƒkƒїŒЭˆЭ@їВРiЕУŸŽ˜‹€Э‹ЮLз‹д‹КЫЇVЌgZws‹@U‹BЪ?‹J‹b]j^ћп–vаїУŒ—€І‘Г‘Ў‹Д}їЅƒї"†пj‘}AsћЊ{ћ\˜љD}АAЄЅЅП—“pсvsaZvј\ЮМфяДђЉМї„‹^‘b“iŸ]œoЌmГvЎ‚Љ‹>ДмЯЗШДИvŸ‹‹IGIˆјЖ†Вx‘w•_‹‹Љ‹•Œї ŸIœO‹уb1j…cxGM†‡rq†tZˆb‹VфЋї"ŸЕлќ7{о‹є8‹ЭIЌmФїNГїYКј Ђ†ЈZЄЌ–j:šŒŸх‹ZР‹нŠї‰‰Ÿ‰ї ‹•n‹{Kœ‚wzˆe…A‹KoY‹ц1‹}Фƒеh‹pŠ7†hБgН†О‹Й‹А—ЌІиЫŽЮ‹Ћ‹ВЏvЊ›Šq›gЁщиЊЙЋ‹є‹кYЏXЇQЊ-ОkЏ‹Л‹НЖЌР‹Ќ‹Д~™wш€—y˜MŒ}А‹І‹нЎo Rœf‹Q‹d}hnpudf‹E‹NЎUЮeXhTdtp‹AёпІ‹М›КйЂ‹їWE87k†SЈc jЃ‹ЗDјмїьїеїьљ їO‚ їayМмШїеУуЛЏМїгїYЄїGЛЏїпћIї$ћ<їgїMї8ї(їaїUћ,ї2ћ_ћIћ<ћ$ћgМŒїKї%її1ї4ї%ћћDћAћћћ7ћLћї&ї/ї~‹gj‘o›f™tІsЅ|­€Г‹–‹ЁžŽхэz›‹JOTt‹w”z™™€›‚Ѓ…ЃˆЊ‹Г‹ї›ЌЬ‹Й‹П‘w—VЄ‹‹“‹э›ƒŽU™[‹d‹h‹.0‰‰‡ˆƒc‰k‹_ћ™јKАpšїЁлЎГСdЄїФКГј“‹\šuаˆЂŽЮГŸav‹Е”­šw‹t”‰ їT‰”†‘€’ršf–y‹v‹Z€fv„BЄ‹‹˜бВІОx|]4y8‹,КС‘‹Є™˜”Ќ™В˜ЅŒ0et{†€‰…‹l|˜Ї[Її‰Шaэ1ЫLЈšћ+їEї-їGk›||ћ&ћN`їYШaэ1ЫLЈšћ,їEї.їGk›||ћ&ћN`ћСїŽЭœї€œїŽ# СїЏрїЁїЂгАНКї ЖђЙїЖНј—ћ$цћ їBї#ї ї ї$ї#-ї ћ:ћ%ћ ћ ћ#Кї щѕїїр!ћ ћ 1 ћћ5№їнћ#—ŒЄ‹Ѓ‹Ђ‹Ѕ‹—ŠtŒz‹š‹‹СŒУ—‡œŠš‹—‹ић%Єš‹Ѓ‹‹šs”kЙ\о‹‹­ŸŸ›‹АИgІf‚y‹ƒ‡M‹r‹s‹Œ‹y‘ŠŸŠ•‰‹Ž;‹ћ"‹ˆ‹|z‰uŠпї.‹ВŒЏ‹ž•ЊŒ—‹‘Џƒ]t€j_w‹yƒDјюШїїŽїјюƒ ћ™јNЏї\ЏГПї,ОГјЪ!ЬyЗž‹œŽš‘Љ—ЋЏŽ•–ŸЇ‹Ь‹йRЈT‹l‹Lpun€}{m‹[ПэЋ”ГЭ™f`‹P~[l€†ŠŠ‚‹YiŸд‹ЭїeЭїAwїdЭ–їЇїYћ@Э™Œї2їL‹˜Т–ћN‹Œї5€—S~‹ћ4ћK‹}ћщ„ DјТї]ї$їhї$јзvУАяпБЎ‰Ѓo o‹kcG7USљSЎЉїЇhЎйЏаЉјКћ6ї,cЦАЈќšЎљ§й§§Џњ ћћŠћˆ‹ћLћеїdї2ЪїЪїТ DїІНїDћ<… ћqјFГїpВГХї:ТГјпћиvНЁ‹Ž›’Ћ˜­ВސŸІ’Љ‹Л‹шH­L‹i‹Gnuk}|j‹eХђЏ‹А—‹–Š”ˆИ›r‹M‹7tsx„…‰€‹‹QdЃш[Иј9ї-ћGћ,ћEЈ|ЬЪэхЧЕOЖћ'ї}šї9{ї-ћGћ,ћEЈ|ЬЪэхЧЕOЖћ'ї|šћЩїЧбчwУйї,їBЌˆЄђУї|‹gd“cƒЭћ ї‹ѓ‹œ›‹И‹Ђ‰Љ‰Гr€a™Yћ‹W‹sŸ‚Ц†­‡Њ‹Ї‹рЋНь‹Ё‹Б€Лbє€їdj‘‡v†X†\t›p–j‹ћ_6ћјїzј=}АAЄЅЅП—“pсvsaZvїL‹ЏїiЖјCŸЧїBїmї{їmњ/† ћmў3% їrї”& їL‹ЏїiЖјCŸЧїBїХї{їХљЯ‡ ћХ§Я% їrї”& їL‹ЏїiЖјCŸПїї›ї„ї›љПˆ ћ›§П% їrї”& їL‹ЏїiЖјCŸїЧїnївїnљв‰ ћn§в% їrї”& їL‹ЏїiЖјCŸаїї{їеїї{љ§ їO‚ ќ6§§% їrї”& їL‹ЏїiЖјCŸМЌїЌїИЕсГїИњŠ Е‹ ћтў % їrї”& јb‹З_ЏїiЖПе[Жї РjАј•ѓ%ѓїД­˜А`р‹ї€Вbe‘‹Ї‹Ѓхї%Žїža`Š9ŠK‹wŠec†ZˆfјУ‹•‘їIŽДf‹}Ue|MquЉ`€‚Hˆp‹ћ ‹\‘‹Ќ(р‹”ŒїŒї(0рЈˆї*’Дm‹•е*рvŠћ:‡O‹ŒсŒщХŒЈЄУ‹ї‹œˆЋ…”„Ž‚‹‰œ<p­Œ™Ѓї4––‹ћ•І$рl‰ZŠ]‹bрW‹ћp‹f™ŠГˆ›Œ‹}…‡†‹ћ›ќc0ћ1{€O…їЂї”їkј-`Ž’Ž‹“‹’ŒBŒ2‹5,р‹a‹bŠeї1{Сљ ЩдяїОї,­tАєдј‹ћšї(ї3ysH—€Й‰Іy‹ywlxHŽeЂŒЕЁЊšЇš‹Н‹Й] _”ІЪ‹оиЂХ ‹•‹ї(Дf‹}Ue|_‡„clYwR‹W‹ašlžћй†ї)‹Ъ‹ї‡ЗрїX‹З‹Й‡Х|ј–ƒ–oЇ(­Œ™”ї,‹•–lœ<—C‹c‹[ˆn‡ћz4 vZsS€E‹;а‹АfЗїкЖїЄПgАЬїBї єZї{ї­˜АїCњ/† ЂРћ&ў3- rР. *Р–2Р/ ЊР0 а‹АfЗїкЖїЄПgАЬїBї єВї{Ÿ­˜Аї›љЯ‡ ЂРћ~§Я- rР. *Р–2Р/ ЊР0 а‹АfЗїкЖїЄПgАФїї єˆї„Р­˜АїqљПˆ ЂРћT§П- rР. *Р–2Р/ ЊР0 а‹АfЗїкЖїЄПgАеїї єhїеїЃ­˜А€їQљ§ їO‚ Ђ`ћя§§- r`. *`–2`/ Њ`0 ћ€‹Аљ,АЬїB’ї{ћї#ь0’њ/† ФЁў33 Ш7 Ф' ћ€‹Аљ,АЬїBъї{ћjї#ь0ъљЯ‡ ФI§Я3 Ш7 Ф' ћ€‹Аљ,АФїРї„ћIї#ь0РљПˆ Фs§П3 Ш7 Ф' ћ€‹Аљ,Аеї їuї#ьƒї2 љ§ їO‚ ФћG§§3 Ш7 Ф' їb‹Вљ)БїЧёЮOТжївгШRН$їƒљв‰ Шћtћ? а@ ЩA ТB ЩC їB}ЭљЩПїBЕёої{ї#ђїwњ/† ћMќЭD ё E їB}ЭљЩПїBЕёї?ї{ТђїЯљЯ‡ ћЅќiD ё E їB}ЭљЩЗїЕёїї„уђїЅљПˆ ћ{ќYD ё E їB}ЭљЩї ЧЕёпївТђїxљв‰ ћNќlD ё E їB}ЭљЩШїЕёьїеїЦђї…љ§ їO‚ ќќ—D ё E їB}ЭљЩЕёј]ђЕїњ‹ћ*ЛћїPjGВy­ЯЎГ„И‹Х‹ї$ЉгѕЪч“ї‹в‹їe№9УЏгbžiFažZ•P‹R‹ћ1n@ћfSp9‹ћё ї{шкїœ‹Ї‹”‰Ћ†Ќ~ЈsћŸќЏ+с‹ї1‹ЉїћРї›јІАXЄ:‹ћ‹ћsу8ї$їQјз бћ)ќ^V ЪW вх•X .Юј)ЫЗїJГхKД їŒVу8ї$їјйŽ б3ќ`V ЪW вх•X .Юј)ЫїЧГхKДwїв9у8ї$тјю‰ б\ќuV ЪW вх•X .Юј)ЫХїГхKД„їеї=у8ї&яљ їO‚ а€ћ‹ќ V ЩW бх•X .Юј)ЫБЌїЌГхKДСЕсГ…у8ї3ї5љ$Š Е‹ Ш@ћ7ќ­V Ф€W Ш€х•X їQЮї`Иї0ЫГхKДїlыїmшіГї LЁGзш‹– сУІЉQРaц‹т‹УЭХЦuЂZ[ZtN‹ћ‰яюїaЕ‹АЅ›Šа—їAћ`‹^‹Ypdk{­dЇ3‹юћe‹Ÿћ*‡iД‡Ѕщ•Љв‹К‹Щy‹G‹Šs‹sћ,iћ“‹ћ=іх•X їЗїC_ ћ|еј!аЉуїОЩЈЉї„‹^‘b“iž]oЌm ЅЈ†rF—€К‰Ѕy‹ywmxGŽeЂŒЕЁЊšЇš‹Н‹Й] _”‘Ї ‹˜‹–Œ™˜Ž˜її vŸ‹:@Hn‹s—vœ|œ}Ÿ€Ј„Љ†Б‹Н‹ї# Дл‹Ф‹Ы~’r›KЈ‹‹•Œї ŽŸ€IœO‹[‹`‹ћћyy…ћ ‹g#|иї[Иї,ЬЏї]ЉыjїfГшшљ_Œ ъLќi^ эЧ_ #|иї[Иї,ЬЎї]ЉыЬїgPшїSјз ъћ5ћс^ эЧ_ #|иї[Иї,ЬКїJЉыїŒhшїјйŽ ъ'ћу^ эЧ_ #|иї[Иї,ЬШїЉыsїеїOшёљ їO‚ щћ—ќ#^ эЧ_ ћЕ‹­јGЌŸЌї]yїf6уyљ_Œ фЛ§_j ћЕ‹­јGЌŸЋї]лїgћLулјз фYќзj ћЕ‹­јGЌŸЗїJžїŒћ4уžјйŽ ф–ќйj ћЕ‹­јGЌŸХї‚їŽуzїфЉj dјї їO‚ ƒ‹­ј6дїЧцђ+фhїв>щ$ї,јю‰ вћ ћp Ъq вr Uzвј%вЌї]Љъїfиц(їљ_Œ д8ќ[s ъ“t Uzвј%вЋї]Љъсїguц(їgјз дћIћгs ъ“t Uzвј%вЗїJЉъЄїŒцї*јйŽ ћ ћеs ъ“t Uzвј%вїЧЉъ{ївpц(їјю‰ д<ћъs ъ“t Uzвј%вХїЉъˆїеїtц,їљ їO‚ вћЋќs ъ“t Uzвј%вЉъїЇцЉї˜‹ћДDОgmN­yЉШЈ€Љ‡Ѕ‹Ў‹ЈІ—СЃТг‘“ЌН–Р‹т‹юeЩWЎЋЫhžkKo–k‘m‹S‹ћVfQ{qrP‹Eъ“їOЧ‹ШŸ‹ˆ›‡Љћ9ћтqЌ}П‹мбћUї;їхІn–_‹C‹ћ,e_l€‡zŠ{‹g‹lr›|‚кјGŸ­ї]ффUїfФх3ы0ї(їљ_Œ б%ћmy дz в{ д| |‚кјGŸЌї]ффЗїgaх3ы0ї(їrјз бћ\:y дz в{ д| |‚кјGŸИїJффzїŒyх3ы0ї(ї5јйŽ бћ8y дz в{ д| |‚кјGŸЦїфф^їеї`х3ы0ї,їљ їO‚ а€ћОћ'y вz б{ в| <ј‘ŸЈї]їcїg\ї `їcјз ћc=~ <ј‘ŸТїї їеї[ї pї љ їO‚ ˆћХћ$~ їL‹ЏїiЖјCŸтШїїŽїљвƒ ћœў% їrї”& .Юј)ЫзШГхKĘїŽ\у8ї$ї јюƒ б.ќВV ЪW вх•X їL‹ЏїiЖјCŸЬХїїЄїњ& ћФў?% їrї”& .Юј)ЫСХГхKД–їЄHу8ї$ї љB бћќтV ЪW вх•X ѓzТљ ЩОїBЕяїUї{wиkА(їуљЯ‡ вћЙќa( д) ћ}ијаЌї]ЉфЮїgiЉ(їNјз дћ0ћчY ѓzТљ ЩЖїЕяї+ї„˜иkА(їЙљПˆ вћќQ( д) ћ}ијаИїJЉф‘їŒЉ(їјйŽ д,ћщY ѓzТљ ЩШїЕяїdїоиkА(їђљ§ вћШќ( д) ћ}ијаЧїЉфЮїЫЉїNљ ћ0ќ)Y ѓzТљ ЩЕїЕяї,ї€›иkА(їКњ‘ вћЈќЫ( д) ћ}ијаДїJЉф‡їЈoЉ(їљ`’ дћќY їa…ЩSАљ%Н`АУїїї"ьЮї€їђ їЏњ‘ D€ћЊў9ІЦР‹Є€* T€+ B€' їOђЄ€, д|сј#ХїiЌЃwЉуїы.сї"ЯљјЂљZ›…„Ѕ{‹u‹z€el]Ѓ}ЫЯЁѕ‹tЋr™m›uxuY…xњќ„ќhZ ќ[ уБ\ њ] а‹АfЗїкЖїЄПgАчШї є|їŽТ­˜Аїeљвƒ ЂРћUў- rР. *Р–2Р/ ЊР0 #|иї[Иї,ЬкШЉы‡їŽnшїјюƒ ъ"ќ5^ эЧ_ а‹АfЗїкЖїЄПgАбХї єzїЄЎ­˜Аїcњ& ЂРћ}ў?- rР. *Р–2Р/ ЊР0 #|иї[Иї,ЬФХЉы…їЄZшї љB ъћ%ќe^ эЧ_ а‹АfЗїкЖїЄПgАжїї єСїї­˜АїЊљ§ ЂРћ§§- rР. *Р–2Р/ ЊР0 #|иї[Иї,ЬЩїЉыЬїВшїSљ ћ5ќ#^ эЧ_ а‹АfЗїкЖїЄПgАУїї є‰ї€У­˜Аїrњ‘ ЂРћmў9- rР. *Р–2Р/ ЊР0 #|иї[Иї,ЬЖїJЉы…їЈVшї љ`’ ъћ ќŠ^ эЧ_ їNzЬїrЏјЩЖїЕяї1ї„ЏщZЎїПљПˆ ъћ•ќQ1 щ2 +ћ`ВїWМјЎvШЙїJ•сVч?цzїŒOъfы€їјйŽ ф ћ§,a с@b т c вd сe Ф сЈf в@Вјg їNzЬїrЏјЩУХЕяї#їЄщZЎїБњ& ъћОќб1 щ2 +ћ`ВїWМјЎvШУХ•сVч?цpїЄAъfы€їљB ф ћ<§Ўa с@b т c вd сe Ф сЈf в@Вјg їNzЬїrЏјЩШїЕяїjїѕщZЎїјљ§ ъћЮќ1 щ2 +ћ`ВїWМјЎvШШї•сVч?цЗї™ъfы€їVљ ф ћL§la с@b т c вd сe Ф сЈf в@Вјg їЊ‹АїсЖїДАФїїѕ(ьъї„кѕ#ьїЫљПˆ фћЎ§П3 щ4 р€5 щ6 ф' …‹­ј5дїlЌŸЁїJœїŒћ<хїiф œљвŽ ѓRh ћ€‹Аљ,АїЧ“ївћjї#ь0“љв‰ Ф §в3 Ш7 Ф' ћЕ‹­јGЌŸїЧuївћQуuјю‰ фПќюj ћ€‹Аљ,АчШДїŽћGї#ь0Дљвƒ Фrў3 Ш7 Ф' ћЕ‹­јGЌŸзШ–їŽћ.уфЉj xјЬƒ ћ€‹Аљ,АбХВїЄћ[ї#ь0Вњ& ФJў?3 Ш7 Ф' ћЕ‹­јGЌŸСХ”їЄћBу”љB фi§[j ћ€‹Аљ,Ажїїїћї#ь0їљ§ Ф:§§3 Ш7 Ф' ћЕ‹­јGЌЃwіуЉj з‹Аљ,Аїї#ьїlї!хDїућ68 H9 D: аћсї!3 р7 а' f‹­јGЌkЌŽŸxŸйїфї,уї1ї,€їєљ-k @§цl жћPљцi бP§-j ћ—љQАФїВї„ћJї!х`ВљПˆ ˆdўa8 9 ˆ: ћдјjЌŸЕїJ€їŒ€јиŽ ‘§‘l ~‹АfЗљ%АЬїB№ї{ћpї#ьїХА№љЯ‡ ЃC§Я; c< Ѕ= Ѓ> ћГ‹­љUЌ‘Ÿ”ї]пїgћVь-ппља тQ§аm фn тo š‹АfЗј€їš*Аїї#ьї?аЬА•Є; U< ™= •> "їЭљQ" ћ+‹­јŠїšPЌ‘Ÿ№ь-пїаДЅm Иn Дo BїљT" їb‹Вљ)БЬїBёЮOТї6ї{гШRН$їкљЯ‡ ШћЫћ? а@ ЩA ТB ЩC ƒ‹­ј6дЌї]цђ+фЮїgCщ$ї’јз вћr5p Ъq вr їb‹Вљ)БУїёЮOТї ї€їШRН$їБњ‘ ШћКћ|? а@ ЩA ТB ЩC ƒ‹­ј6дДїJцђ+ф‡їЈIщ$їKљ`’ вћFћ“p Ъq вr їB}ЭљЩкШЕёї їŽхђї™љвƒ ћ|ќЉD ё E Uzвј%взШЉъœїŽ“цї"јюƒ ћќ's ъ“t їB}ЭљЩФХЕёїїЄбђї—њ& ћЄќйD ё E Uzвј%вСХЉъšїЄц(ї љB дћ9ќWs ъ“t їB}ЭљЩПїBЕёїї{[ї{7ђ$јZљЯ‡ (ћK‡ вћyќiD ё E Uzвј%вЋї]Љъ‹їgЫц(їШјз“ ћK д,ћгs ъ“t јЇ}МfЗїСеZЖїЖЗЕёјIє%ѓїД­˜АŽРЕїњћcчћ9їuє‹і™Ц‹^Рї<‹ћ‰ј‹‹•їIДf‹}Ue{Mru€‚Gˆq‹ћ ‹\‘‹ЌР‹”‹її(-РЇˆї+’Гn‹•еРv‰ћ:‡O‹ŒсщХ‹ЈЄФ‹З‹Х‹Ѓˆ™‰•Š˜ˆ”„‚ށŒ‰›<p­Œ™Ђї4Ž––ќ‰В‰d‹V‹*˜/‹E‹ћ*lF#fSp9‹ћё ї“їЮї:žРі‹Р|ŒpРŽB‹2‹5žР‹ћ-‰ћ%Škb#†iћ3ћ цї‘їzвFиї[Иї)вЉъїЇъїmшОЉї˜ћƒїeрз‹ЛЁЭк~ЉRРaц‹с‹ФЭХЦuЂZ[ZtN‹ћŠяюїaД‹БЅ›Šа—їAћ`‹S‹J`ddaЧGЄI‹S‹ћVfQ{qrP‹Eъ“їOЧ‹ШŸ‹ˆ›‡дtІ_‹ћ‹ћ,e_lО€‡zŠ{‹*JЗї>јБєšКых™3]rzWŠ9‹э‹АїдНїЖКЦїBїі'ьЃї{wѓї‡љЯ‡ хћg§Я3 щF х' їSјG ћA‹­ј2жЎї]ёцmїgoЏ(ї7јз дћќзu э‹АїдНїЖКНїїі'ьzї€›ѓї^њ‘ хћVў93 щF х' їSјG ћA‹­ј2жЖїJчїЈћžцї-Џ0чљ`’ Ь-§€u W|вјl ї ЫНїBФлCАїї{JиNщїiљЯ‡ ш€ћ0ћАH ф€I щJ ћLzЫј7ЦЌї]ИЮГїgDЬNГ(ї,јз д ћqv вw W|вјl ї ЫЕїФлCАаї„kиNщї?љПˆ ш€ћћ H ф€I щJ ћLzЫј7ЦИїJИЮvїŒ\ЬNГ(цјйŽ д]ћsv вw W|вјl ї ЫДїФлCАбї€nиNщї@њ‘ ш€ћќH ф€I щJ ћLzЫј7ЦДїJИЮlїЈJЬNГ(мљ`’ дLќv вw А‹ЎљЮRФУїЎї(ї€ћEє%їїdЎїPњ‘ Щ€ћhћbK Љ€L Њ€M Љ€N Щ€O Љ€€–ќо‹ћ'|вјУЋїšьх№а•јTx ї}ї˜" їN}Чљ#АїЧї ђЎївЕЬLР(ї”љв‰ вћrћP дQ вR |‚кјGŸїЧффQїв\х3ы0ї(ї јю‰ б)#y дz в{ д| їN}Чљ#АчШї ђЯїŽиЬLР(їЕљвƒ вћ ћRP дQ вR |‚кјGŸиШффrїŽх3ы0ї(ї-јюƒ бћ$ћ9y дz в{ д| їN}Чљ#АбХї ђЭїЄФЬLР(їГњ& вћШћ‚P дQ вR |‚кјGŸТХффpїЄkх3ы0ї(ї+љB бћLћiy дz в{ д| їN}Чљ#АСЌїЌї ђїЕсГї ЬLР6їоњŠ Е‹ Ш€ћцћMP ЩQ Ш€R |‚кјGŸВЌїЌфф›ЕсГЈх3ы0ї6їVљ$Š Е‹ Ш@ћjћ4y Щz Ш€{ Щ| їN}Чљ#АЬїBї ђйї{[ї{*ЬLР$јvљЯ‡ (ћK‡ бћћP вQ бR |‚кјGŸЌї]ффaїgЗх3ы0ї(їгјз“ ћK бћ:y дz в{ д| јA‹ љ<АФїї€йчї„ћPї(ј*љПˆ дќ*ћS ї„| ј‹ŸДїJїХїŒїїїХјйŽ ћХ;} й‹Ўљ.АФїїˆї„ћmя0їˆљПˆ ШћˆћT <ј‘ŸДїJї&їŒtї `ї&јйŽ ћ&;~ й‹Ўљ.АеїїhїQяЋї4їhљ§ їO‚ Шќ#ћ@T х‹Нјr їОРїBе­їvї{’ГїтљУ™sЩІїЬЗЇ‹ЁsЃqei9DM^ћЭ§ИU T‹ zКј.ИПї]СБїїgЖmЕїqјз ЊћPќН–qj i€ х‹Нјr їОРїе­їKїї<ГїЗљч ћЂ§мU T‹ zКј.ИкїСБїїёЖmЕїqљ ЊћPќџ–qj i€ х‹Нјr їОРїе­її€ѕГїzњ­dЕW›vГ—žПШГЕ{œ)G)Яћ}ў+U T‹ zКј.ИЧїJСБХїЈ•ЖmЕї*љ`’ Њћ$§f–qj i€ ћv‹­љkАѕфї:ЖЅїЌЊ'€‚‹Ф‹бїDєвї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&ŒZŽћŽћA‹h‹P„B€ћдјjЌЃw†ћMl DјЮїJїїŒїјйŽ DјЪїJїїЈїљ`’ DјиХїїЄїљB DјнїїSїїSљ DјШЌїЌї:ЕсГї:љ$Š Е‹ DљЧцївцјю‰ DјТї]Рїgї€јз“ ћK ќЯјУї]ћјїfћјљ_Œ ќЯјТї]ћЩїgћЩјз ќЯјЮїJћяїŒћяјйŽ ќЯљЧќUївќUјю‰ ќЯјюШќ їŽќ јюƒ ќЯјиХќ6їЄќ6љB ќЯјнїћЩїћЩљ ќЯјмїќ\їеїќ\љ їO‚ ќЯјШЌїЌћцЕсГћцљ$Š Е‹ ќЯјТї]ќOїgћ˜јз“ ћK ќЯјЪїJќїЈќљ`’ ќЯћdНћЦћ<… ћСїŽЭœї€œїŽ# ћСїŽЭœї€œїŽ# їŽЭЅїŽј3‹˜Т–ќ&‹DїŽЭЅїŽјG‹˜Т–ќ:‹јAїŽЭЅїŽ” јAїŽЭЅїŽ” ћпјЙїЭЬЭљ• ћпјЙїїЬЭљy– ћпћ їїЬЭв– ћCјЙїЭЬцЬїrљ• ћ0• ћCјЙїїЬцЬїrљy– ћ0– ћCћ їїЬцЬЭв– ї0– „јdЦSМїrwїtї$ыЈЉјo‹‡‹‡Œˆhї]Ž‹‚ќl•!ГА”Эїд‹ї]Ј— hћ^„pЅŽЉ‹Вh‹Њ‰А†ЙƒŒ——\‹w‹uˆ~p†c‰h‹kh‹dŽjpЈћR’††„t‹w„ъЦXЛїЭЦSМїrwїtї#ыŠЉї‹†Œ†Œ†Jї^“‡pˆm‹d‹lf^’Šƒ~Ж‹Њ‹œ”’“ŒВЎ‹ЋŠ‹ВˆЌ†ІїR„‘’Ђ‹Ÿ‹Ž‹ŠZћ]‡НŽН‹Н‹ТˆТ„У,— ћ^„ЅŽЉ‹В‹Њ‰А†Йƒ—–]‹l‹z‚„„†c‰h‹k‹dŽjp,ћR’††„t‹w‹‡‹‡Œˆ\ї]Ž…X‰Y‹XJ‹TŽU’TŠћVŽˆ…„w‹yїVї›їїšїїн‹f—ЁyЈtЋuЁ|–ƒ–‹‘‹ŽŽФКСЪ‹™‹‰Ё‹Ž†Іћкx‹yŠ" ‹wї)wї2ЪїїїїїpјГе ћ„ ћ„ јIЦї=ЦdЧї=ЦЕНї3РуНї3РННї3РпРЕј3ИJме‹Жв‘›‘š’Ћ‹œ‹жeн-‹{‹fotouvd‹PНŒшЙЉГЖgMH{rQf[­ШФќ БsїѕјАeЃћќ 2ИKме‹Жв‘›‘™’Ћ‹ПРеfо,{‹fotouvd‹PНŒ˜ їšŠ2ИKме‹Жв‘›‘™’Ћ‹‹еfо,‹{‹fotouvd‹PНŒ˜ ћŠЇї‘Її‰Чaэ1ЬLЈšћ,їEї-їGk›}|ћ'ћO`ћ‰Иї‘Иј9ї-ћGћ,ћEЈ|ЬЪьхШЕNЖћ&ї|š|иїКИКїЬдыїБаŠ~‹~‹~…]x\Ю‹—#М#ї#‹с‹ФЭХЦuЂZ[ZtN‹(‹sЦ†гї=‹žКћR‹‹ ‹Ѓїe‹žКћv‹ŽтŸВу‹р‹ ežq›ŒЂУpГ[Ћ6‹>‹,:x`†€…s†kTїŽЭ–їŽ„ ї‹Њј5Уї•Аї я.фї:Ж™я.фї:Жь€ЉјT` ѕ€‹бїDєїpŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Фі€‹бїDєї‹ŽУћ‹‹šї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—‹дГF‹ћ.‹Fћ*‰ћ$ћošї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|Ј‹­ј2УЁwї•Џї юїbу=ЖќЉјTхŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф‹бїDєїC‹yŒŸ‹Ј‹}ћ ћd‹d„‚E†iї|­_Žt•‹Ї‹їЄї ‹Ж‹—‚ƒ‹‹>uC‹ћ ‹ЈŒГЄ–ЮВэз‹њЏ‹Ћqœ/Ж‹ЂŒŸ‹œЪІ,ћZRћћ:2|Д‹­ј2Уї—Ўї я.хїlп:цшЉјTхŽћŽћA‹h‹P„B€iїЌЊ'‚‹Фђ™ фš ђ‹ї:•и‹їƒ‹Х‹Ю‰м—Ž…ћ8ћ0Fћ/ћ&2|ї№‹­ј2УЁwї•Џїфї:Жšюїbу=ЖџЉјTхŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф‹бїDєїpŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф‹бїDєїC‹yŒŸ‹Ј‹}ћ ћd‹d„‚E†iї|­_Žt•‹Ї‹їЄї ‹Ж‹—‚ƒ‹‹>uC‹ћ ‹ЈŒГЄ–ЮВэз‹ў€Џ‹Ћqœ/Ж‹ЂŒŸ‹œ‹ЪІ,‹ћW‹Qћ‰ћ7ћošї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|їќ‹­ј2Уї•Аї я.фї:Ж™я.хїlп:цьЉјT` ѕ‹бїDєїpŽћŽћA‹h‹P„B€iїЌЊ'‚‹Фц@™ ф€š і@‹ї:•и‹їƒ‹Х‹Ю‰м—Ž…ћ8ћ.‹Fћ*‰ћ$ћošї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|ї+zЫMвјУeУї[КИЮчА‰ы`ЬїхjЏœ€Иїњ‹ћGї‹Э‹ћ‹\hoP‹ћ ‹ЬїZ‹s‹ˆ‚‹ћ‹|Ž€ƒ•zЏxн‹š‹Ф“ЂœЋЄ—šŸЋ˜ЁЇ‹Ї‹їNћ‰N‹ї ‹“Лз‹Ћ‹Ž†“Š‹ЃEЕ—Ђž‹СmЃU—n „ЄˆŸ‹žялЎидбlgl@› ž ‹ЊŽЊ‹Дф8Д3)#Vћ ‹uŽu”o7‹npbI~w‡p‹pќЯјЪїќ*ї„ќ*јкˆ ћећїšїаЪу" ќЯјгїBћФї{ћФјы‡ ќЯјЪїќї€ќљ:‘ ќЯјгїBћўї{ћўљK† ќЯјгїBќcї{[ї{ ћЌјы‡ РћK‡ їGїŽЭЄїŽљA‹˜Т–§4‹їa|вEијУ[аїXКЉфї$Аї‚хjЏ^€Љї„‹^‘b“iŸ]œoЌmДuЏƒЊ‹ц‹ПжЛРvŸ‹EDHћwцї ї"ŸЕлЈ‹ЊˆЃ„–tЄj ‹—‹Ё—‹Б‹›‚Т?–„Є‰Ÿ‹žялЎибЯmfЏ› ^€‹ЊŽЊ‹Дх:Г6)#Uћ ‹uŽt”p|^‹c‹*2†‡rq†tZˆb‹Vі|вSЊј5Уї•Аїфї:Ж›х~ЉјTхŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф‹бїDєїq‹ ˆ6‹GОћ#™OцЃ‹И ФЦvŸkxty‹c‹„Н‹ъ‹ЪŽн‹ёї‹ŽУћ‹‹Њ‹Љž‹—‹—„Žƒ‹‡‹“Š:t8ћqšї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|ј>|вSЊј5Уї•Аїфї:Ж™я.фї:Ж›х}РЉјTхŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф‹бїDєїpŽћŽћA‹h‹P„B€iїЌЊ'€‚‹ФОР‹бїDєїq‹ ˆ6‹G‹ћ#™Oц‹Ѓ‹И ФЦvŸkxty‹c‹„Н‹ъ‹ЪŽн‹ёї‹ŽУћ‹‹Њ‹Љž‹—‹—„Žƒ‹‡‹“Š:t8ћqšї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ(ћ&ћošї ОїЛЃ‹Ѓkš9ЖŒ‹˜Œ—‹—дГFћ0Fћ/ћ&2|јtјЯyјŒЄїaž™” ŒћaŒ‘ ‹ А Ќ‘‘‘ х РА’‘“ 8|&FR^БЛЫFh|ЊТ*R­оъї_‚ВТкщ 0LgЅеUxІб0D_p”БащGfЄФ G … “ Ј ц ї  1 P ^ ~ ” Ї Х > Q † ˜ Х б ќ   5 | Ќ д - † А3;Z&‰Ђ$.:fšДс 0H_{œЎЦсј$CUg… цƒІ5 ЃЕМ ™fеrqqW Ѕїv‚yx‹x‹y‰‚‡ ‹sИi‹c‹_cj‹€ƒ˜ƒзїПЋaЯuykQ‰ їt‹—Т€–ћg‹ ј^‹™Т–ќR‹ ї€В`\’‹Ќ‹šГёЁМїЕ’x’z’{ž_˜m“r‹w‹jVƒgˆiїВЏY’{Є{Ї„™ћ”љ ‹‹„‹Y†€ƒћdќœLћ1€€O… їїнїћн ‘ћ[Œќ‹ƒ‹ec†Yˆ ћКї$2їRш‹хЅЬЃ‹•‹ї(Дf‹}Ue|_‡„blZwR‹W‹aškžћй†ї)‹Ъ‹ї‡ЗрїW‹И‹Й‡Х| ”…Ž‹‰Є<“oЎŒ™“ї,‹•€–lœ<—C‹c‹[ˆn‡ћz4 vZsS€E‹; а‹сС‹ ї!їXёїЭї}+ёћmvH‹‰ћ8‹ V‹Pp‹f™ŠКˆ ‡Œk ‹Рј ѕ–– ’ЗЫ‹їM‹о(‹ћn‹,zFtbcCk_!‹ћ3‹dœ‹Ю јФ‹•їIДf‹}Ue{Mru €‚Hˆp‹ћ ‹\‘‹Ќ‹”‹її(Јˆї*’Дmœ‹•еvŠћ:‡P‹ŒсŒщХŒЈЃФ‹З‹Х‹Ѓˆš‰”Š˜ˆ•„ނށŒ‰›<p­Œ™Ђї4Ž– ‹ћ–Іm‰YŠ^‹ W‹Pp‹f™ŠЙˆ ‡ŒkŽBŒ2‹5‹ћ-ˆћ%Šk‹ec†Yˆ ћКї$2їRш‹ї­ЬЂ––‹їN‹ž™”КŽ™Œ‹Аp‰b‰V‹V‹?pŒiЄ‰ДˆД‡‹jћkm`~C‹ћyRї)ї9ї‡ЗрїXэ‹нrЁ} Є:’sЎŒ™“ї,‹•–mœћ —C‹c‹[ˆn‡ћz4 vZsS€E‹; їЉАWe‹А ‹”ŒїŒї(ј0 ћ)‹ћ‹†‹ec†YˆfїЉАWe‹А ‹”ј>ї#ŒЋ КŽ™Œ‹АћЉ‹‹f™ŠКˆ ‡ŒkE1Œ3ќ/ŒэыŒСŒЋ КŽ™Œ‹АћЉ‹‹f™ŠКˆ ‡Œk ‹”ј>ї#ŒЋ КŽ™Œ‹АћЉ‹‹f™ŠКˆ ‡Œk ŸkЗЃУЌЦХ™т ‘Њ“јMїI‹ЋЁЙŽšŒ‹АћЉ‹‹f™ŠКˆž‡k v.‹ќ[‹ћZIP јœ‹•їIДf‹}Ue{Mru ~€.Š|‹vCq›Ђ ‹”ј>ї#ŒЋ­КŽ™Œ‹АћЖ‹‹f™ŠКˆŸ‡k ‘ћUŒћ§‹s‹ff†V‡ Н†Ў‡‘~‹ˆŒћ‹Fk ‹ћq‰ћ†g‡kgƒ`‡gї€В_a’‹Ќ ›†їS‹їЧј-ќžŽН>Ц‹‰їЕ ‹”Žїрї‹‹ŽЅŽ˜ž­­ŽЏћ†eсƒŽ|Œ`ŒjŽ7‹Y ‹2ŽћaŒ}ћˆївћEїƒЃћQ ћeщћ7їsХ‹ї$ЉгѕЪч“ї‹в‹їf,їћj‹R‹ћ1n@ћfSp9‹ћ ї{шкїœ‹Ї‹”‰щ}щ>‹ћ‰‹ћs Œzћ‹YЎ“ЈЄкŒ‘Ž““‘‘‘‘Œ ЅХ ‹–‹›‰šˆO‹?‹> ћNˆћV‹‹eQ…Z‡hїдЎYQ‘‹Б ‹їFŽїНї šŽ›–‹  ‹Х†Ѕ†‘Š‘‰‘…ƒŽƒ…Œ‰Є<“nЎ‹НїŒœ Х‡ˆ_Œ€ќ=‹‹KЏћ8їdї.ї/Їїt ‹Г’їеŽДŒІ­—ЗЏћ€dЖ‡К„‹j ‹ћ 1‹2ћuv6ћ7ћ<_ыТ‹š‹ЖŠТл‹ђŠї‹М‹ААРАћЈ Бˆ–u”e˜aВћї ќ5_й—Яїј;ЉйЊ6ї ћќЅће’­їSљ‹‹–Ї˜–ЋŽЏћjdФ†Ѕ„‹m‹t<ћВOћIWї4їі‹™‹ЇАŽЊАћЉfНˆЅ‡‹n‹vћќ c&sШ$ј1‹ ‹Њ ŽЫАћ˜ ЏˆЇ_‹‹мћ №ћ(œl‹‹ћ‹ћ9‹eT…Y‡hїЪЎcŽ\~Ѓ‡’ŠЖ‹Ћ‹їŒЬЗїtїЪ“•˜–­ЏћddИˆЄˆ‹w‹vћћSfVXл'ї2‹Ё‹Ÿœ“ЭАћЈ —€јЯ‹‹”ї&Чc‹fe{Srv‚g‡ћJ‹R‹i‘tЊЫїœј ї5їw–ќЇ‹€‹ŽћBŒ|­“ЈЄкŒŽ•­ЂŒї ŽЂŒЌ‹З‹Њ‰Љˆ LЁGзш‹– сУ‘™OЁ‹’‹бЂ‹‹’‹ ‹^Д‹Ж‹Ом‹ї‹М‰рћ.‹ћe‹Ÿћ*‡iД‡Ѕщ•Љв‹К‹Щy‹G‹Šs‹sћ,iћ“‹ћ= ‹щЃ‡ї<УŒm‹n‹q‹d‹c„…gm]wf‹en Р ‹^‘b“iŸ]œoЌmДuЏƒЊ‹ц‹ПжЛРvŸ‹EDHћwцї ї"ŸЕлФ‹Ы~’r‘w•_‹‹Љ‹•Œї ŸIœO‹^‹c‹*2†‡rq†tZˆb‹V ћXї&NНК‹ДЌИН—™I‹“‹™‘Є–•Ў“‹’‹–XЛ‹З ‹ї#’ї‹ј‹—„‹€‹b|(‚jЮ‰Ž‹>‹i[‹G`•gp‹W‹o}wiwds[q‹ћR їBН›аЖ‹ЛІ{ ‹JŽЋ‹ћЙmnf{g‹DIЩї' ћ Бћ"ї<т‹УЭХЦuЂZ[ZtN‹ћŠяюїaЕ‹АЅ›Šа—їAћ`‹>‹,:x`ƒx}L‹D єšКых™3]szWŠ9‹ хŽћŽћA‹h‹P„B€iїЌЊ'€‚‹Ф *їsиїWЬяЮ‹П_Жo–w“I†‹ћ  ryšž‹ЄІТ™П–Б™Џ ЕВ›Џ‹У‹Њ‚Т€› кЕ…‘m„b†qŠ _АaŽu‹"‹54~p~n‡e‹r‹ƒ‹„Œ‡—JЄpЮm 5qˆl‹|‹nЈyН„ћ XƒX‹k ЫЯŸэхІfdH_W$O?КЫ їЈЈИ‹‹Šз‚Ёw‹2+woJGjЙХ jбŽ‹ћX‹ћOŠ-‹ћO‹q}~^ˆiї`­SŽŠ˜‹в‹їBŽї‹‹ЅœЮЂЖ‹Я”tћ ћG‹;‰…[€iїR­[‘ˆ‹Ы‹мŽв‹Ч‹ї|д)‹b‹Au>`Œї–‹•ŒЙ‹”‹–‚ƒ‹€‹b|)‚ ~­\ŸЁАА­Џ_Є|jvJ„ ї|­_Žt•‹Ї‹їЄї ‹Ж‹—‚ƒ‹€‹b|)‚jš‹О‘„ћ;ћd‹d„‚E† ~­\  БА­Џ_Є|juJ„ œzї;ї˜‹јШ‹—‚ƒ‹€‹c|(‚jš‹Л”}3‹ќg‡Ї0ћ ї€­J“‚‹‹Р ‹їC•и‹їz‹оŠнŠД‹—‚Žƒ‹‹d|(€j˜‹Д‹™‡ŒhŒ[ ћ+Œ#‹AћM‹%‚–F~ ŽeЋˆ›“k „ћ˜‹†‹#ˆˆP‚iїf­[Ž€Œ‹с ‹ТхŽї&ЇžЦЃ‹БН‡Vћб‹oˆU‡iї`­[ކ•‹ІїтМuЯ5_‹Ny8\™Д…—yp‹hqBƒ ћƒїeрЎ‹ЈІ—СЃТг‘“ЌН–Р‹т‹ї>ћЩ"‹S‹ћVfQ{qrP‹E їOЧ‹ШŸ‹ˆ›‡дtІ_‹ћ‹ћ,e_l€‡zŠ{‹*JЗї> їЌЊ/˜wŒ‹Й‹ВŒїG‹Р‹ЧкЅЁ‹Є‹ЁxSЏ“Н“Ў‹Ђ‹Њ|–Y‹m‹_uJL‹ŠŸД…—zo‹hqCƒeЫ…Œœ‹ћВj‹ћˆAƒ ‹ћGї‹Э‹ћ‹\hoP‹]‹s™~oБ Сi‹s‹ˆ‚‹ћ‹|Ž€ƒ•zЏxн‹š‹Ф“ЂœЋЄ—šŸЋ˜ЁЇ‹Ї‹їNћ‰N‹ї ‹“Лз‹Љ‹Љ„šu ˜x–`Œ}А‹ЦŽЈ‹•‹Џx’|‘q–n‘u‹9‹k}Z<~w‡p‹p т‹ ˆ6‹G‹ћ#™Oц‹Ѓ‹И ФЦvŸkxty‹c‹„Н‹ъ‹ЪŽн‹ёї‹ŽУћ‹‹Њ‹Љž‹—‹—„Žƒ‹‡‹“Š:t‹/4z iЧŠ‹ћ0,‹aI{šPПaК‹ž‹е•чЬ‘™OЁ‹’‹бЂ‹‹’‹ ‹^Д‹Ж ‹д“ш‹їm‹—Žƒ‹€‹c}(jЋ‹Ћ‘‹8 ‹\‰A‹ћ‹l‰†dwxTo‹x‹lœЈƒЁ‰Ў‹И‹Щї ‹ї—Žƒ€‹`z3 jЅˆ›™zЋgЋћЌћЛћ1‰tВ‹Л‹žъїЖё›UœIQКћ1ŠtВ‹Л‹~žыї№їЈ‚‹š‹’‰“‹z‹n‡m‹€‹{{‹y‹{ˆ‹|‹iЏА‹Y‹{ˆV$ћЄ‹‹9їЛxх‰—Ž–]‹P|„€‹›y‹v‹eq0<ћf‹"ј Ћ—Žƒ€‹`z3€ jЅˆ›šzЎcѓќ‹`‹RDI‹f‹zœМ‹­‹i‘їFјOёїž‚‹š’ˆ“€z‹x‡m‹€‹z|‹y‹{ˆ‹|‹iЏЊ‹_‹{‡V%ћЄ‹"ј Ћ—‚Žƒ€‹_z3€ ї Љї&‹х”‰nЗˆ‹Š‹‘ ‹Л‘х‘ТaŽƒlˆsr€p‘sћv‹‚‹‡Œ‹‹’Зёї3їYЅЋ­ДЈЏ‹‹–…•t‹‹‹&‡ћ‹ћ‹‹Žl‹q‹”‹ƒћPБЉїŒї‹оžŠˆ ~­[  АБ­Џ_Є}ivJ„ ~­[  ББ­Џ_Є|juJ„ ї‚‹—Шћ‹ јT‹˜Т–ќG‹ eЂŒЕЁЋšІš‹Н‹Й^ ^”•Мsl3—€Й‰Іy‹ywlxH ЖoїJЩp˜ЃMИ9вe­q‡ts‹u ˜sЩІїЬЖЇ‹ЁtЃqei9DM^ yябђGžœdЕwЂdФch[vp][ ˜}ŸžЎІЃ’Б‹СV­‹Ÿ‹ШЪžЇ|—wxtzs„HnЎm‹w‹DDxo <Й~Њ˜‹••ž“ Ѓ—œœ‹Ј‹Уc e‹v‹cy}x…‚‚x‹t Р‹ž’‹ŠŠЂ„”‹j‹`‡ˆŠ…‹†‹mw—М Аhя7Фf› VУGпkГo‹ovŠs œvУАяпБЎ‰Ѓo o‹kcG7VS Ÿ~юїї!›˜kЛSѓ‚œczT4]H ЃJМbР‹Н‹СЎЕпl™o\ioi‹o‹pžtЕ— ­[ŸЁАА­Џ_Є|jvJ„ ЎdЕWšvГ˜žОШГЕ|œ(G)Я Џ[Ч:—vГ™ЩпПЫћћћѕ œvФАяпАЎŠЃo o‹kcG7US њ;‹˜Т–ў.‹ mГJ œЉТ‹Ђ`Ћ‹Б‹ЕБЊ‹–’“‰zC"Z ‹tЖk‹e‹ael‹€„—ƒœгєМЉcЬvzmT‰ їVˆŽ’’Ÿ‹‹ŠŠ шЙŒЊВЖhMG{sQf[­Ш ‹бŒїDєї‹ŽУћ‹‹šыЋї(№УІƒ$ ‹Wˆћћ‹$‹%ƒ–E~iї€­K“‹‹Р ‹etxi‹/4z‹mт‹‹ ˆ6‹G‹ћ#™Oц‹Ѓ‹И ФЦvŸkxty‹c‹„Н‹ъ‹ЪŽн‹ёї‹ŽУћ‹‹Њ „˜@AABdeefjkklmnnoдежз  349::;;<?@@ACџ§9 <zDFLTlatnџџџџCAPS dlig&liga,salt2ss018 $.*2<FtšџрB[ !@"# !@"#(CGU8GM7GJG* BU6M5J4GG6",е+AUжK9U*DJT .>DFLTlatnџџџџkernкVt†џиџиџФџФџиџœџьџьџьџтџтџтџтџтџьџтџЮџиџиџіџиџтџтџиџЮџЮџКџЮџтџіџьџФџКџКџКџКџКџФџКџКџКџЮџЮџиџКџœџь-""%%&&''//0011 33 44 55 66 7788::uz{{}€……†ŠŒ ББЛЛППУУннппууччщщ ыы ээ яя ёё ѓѓ ѕѕ її љљ ћћ §§ џџ%%(("  ""((55667788::BBFF PP VVZZuzŒ˜˜ ББХХЧЧЩЩшш ѓѓѕѕїїљљћћ§§џџ&&))<"%&'/01345678:uvwxyz{}~€…†‡ˆ‰ŠŒŽБЛПУнпучщыэяёѓѕїљћ§џ%(аиZ џнџнџнџћџћџтџьџёџьџтџьџКџтџьџКџтџьџК""BBFFNNQQSSWWXXZZ uz’—š­Ў ББВВРРФФъъьь  BBCCFFIIQQWWXXZZ ’—š­Ў ВВРРФФЬЬ #"BFNQSWXZuvwxyz’“”•–—š›œ­ЎБВРФъьЧўАпСК{iШVе<є2№№8p<ч0рTЙ* -д<JdJ2р №?№?рџьрр<р ррџ§ррр(рр#№?№?рџ§ррџ§Н8˜ѓ‰Ѓ*€4ѕ*QO8ž .Й щ*}щ* 9`ѕ"юш†‰•'dрџь'рџ§єєо( Йгmл 5ќџћ?B 3 *Žƒ-O ,ь+Хџћь!„2№Q„р№8р1ш№Qр2єa$6( q2є}6(р єрњ?єА^( -Н8ѓѓѓѓѓѓ иI€€€€OOOO щ*щ*щ*щ*щ*щ*ѕ"ѕ"ѕ"ѕ"‰Vо(о(о(о(о(о(ј(Йггггџюџї3 ,,,,ььѓо(ѓо(Ѓ*ЙЃ*ЙЃ*ЙЃ*Й„€г€г€г€гѕ*л ѕ*л ѕ*л Q5OџъO O O‡8ћџѕ.JЄ 3  3 щ*щ*щ*N*D Ž Ž9ƒ-9ƒ-9ƒ-`Ј ѕ",ѕ",ѕ",ѕ",ѕ",ш+‰ь‰•!•!•!Yћџћє~єpєrєПєІє[є5ўœўЫўЅў?ў‰ў^ўЫў8ўЎўEў|ўЮрєшш№B№B№BŒBŒBŒB44рmа?№*EF-рр ЌXd—Ѓв-ўjњ?ўаўŒў–ў1юІхktikz-0.12/app/icons/accessories-text-editor.png000066400000000000000000000130051325124551100217400ustar00rootroot00000000000000‰PNG  IHDR #ъІЗ pHYs7\7\ЫЧЄЙ vpAg ‡њœbKGDџџџџџџ XїмbIDATxк­йwX“чЛ№'ˆ[†EEЋ*8€:qS­ZwнŠEдк*–Š­ŠwнЋюŠ{я… ADTT6$™„$dЏ7 ёž^ч:чћљуцўухКю7yя<ђЏЙEUw,ђЯ4жƒ"G/эЃX‡JWP.чQ™Zоx@БPBЊ*ыћ_(BОŸ@‘oнЃ(BчQѕ6ЄRO~ЃІœHœBmвоаž†NзT+в^*TЬдр0єбЇъћк2э9э8 p E`~ї0ьсR ћšю+Л/ХРЖљm кВэЉj ˜7ЄRR—щ!эІ\оКЏЁЊЧ­хbЅШЇRAYљ)хQбP (~UœZќХqХЧŠ|_Эз8v хBаbч”ў\КЄtу'§MК^zЬбG1MёЋbЦ+-Ъ Ѕ ZUPЙЕќ1 h"O•/€CV$ћKжЕ—ЊЅw€’J–•м тй9œu9ЇSa/@qАќЭk@ѓ\пе<,+­/ЕСціzЦM ЈGPу@1гЩ{Œї$яp€TцюеіЅXзЊкzФ­R-RЛв—тІx3ўЭ„7вŽ rY‚L€WŸз„чcяЩпЭч?@ДЈЛЈЋшhФsХ!b@2VЌЏ…Ѓt\‰Иd. |,\.є8n-nW ФQЊ•Дђь…мn@ž…н„Л `УнТ› №– ^•І’І2žВ ОV‘ є3 ЗM? :‡њЊ{08eр ОnџЊ§лі€k„ыLз№Š)Є2пмЎёЬя­u"Є0Ž"„ыC‘šљДН.$œK8}цˆ',*ўўHО7ѓЃ0JиBp ръ н ЛGй?sІ9Сyu њЙђ9)Ю:Лр—ТZЇŒWG№Ÿ’эTzвљєВ€fDХ$э^Р|Этiй иГьoьЯЧ+ЧFGgŸ`lЛŠъ$яOоќ;0УoFрŒ sFчмЮ…ŒŸg„чLЯp йѓfIЭ’цЗpšEHы‘”Ы•ЎЇЉOoyR#_МЇfŸZvjoЬQ{Ё^˜OрG ю3ёмЏxEЂ@С>юHопЏПЄЄ P(‰”7ЪЎ+Ё: TlжжжžŒ=ЦжЮКкшiи X.ZЬЮы4а,UgŽaš>P5+Я,_ ”>/UˆлМmХЋјq@ЮЉмgљMеmV{Џn :8шР @ƒ> z7шС„Z1jхЈU@ZEš6Mwк^уcxOеXƒj§E‘O~lўІќ]„,?Оќќђ;ЃЛђ—ёхODк’I%oqОtxЉVœ„ЙCn•€ВI "PQ%ЈъђaВЫв2@YЂœ[іжйЧШЛЪђѕ*ѕYЕГђO І ћмэE]‹лВ AЙжй'№ФТ+џ'бIЩF@лСPлœэy.§ТU`вЄI§'Ек…З‹jЗhе Адб(З}юзЙ_’ж’V’VяЋж›[JБЎy|M‘Яш_Gџ<кљ R•IќиЅl)[Ёj*§I:Zк–{ЫжЂžєŒt˜Є(ш_0Џр8PиГЈЯШ+-8Хy А=И yЃЂAЗвoВеЊ$э@ZWоН,Јј]wз80?ЗzйNv ЪьCuи›ипЈШc‘ЃцЋ€nšnцю,z–ЌUЧХlєиВa>\P)[*•Z”k§И~Џ§юјїш+ы›езљЬЯi9ЇйжЈQ›)ђП›ъ}Ц{іћв'Gб@IІЄЅŒчhЪc N–к‚HюЙт}€P[*”Эщх_Ћm€ЖОnžС АфXЃmІгƒщ8І;Z2/œ§NІ™=0Н7 5юєнu—t.€nНю'] АnпКЋыоЁнCG„Юмpoэ&zЗ щгgPaг_3…сЙnКё‚ѕRuєєЛe9ЫŽ,7zw>;jоcчвkWшТ-bх 2єH@§ћИїё‚Ї)O_=MП0Ry]yZЙ]•л™хЎђ™Њ€.C—Ў{˜f™\Œ–`ѓ!S‘ГЮ4'™ `ќоmTьЈш­Щd“dПЫЖ…ŽЂ$оE  ‹ѓsсP@іЌBъ_oKїё‚38c?cYqEйBйFщ ”G–ЗQО`.jыTLеlrі•”sБ‡и_LЯ ­‹Р (ц Є@о‘‚uœ|€kрAxЗ“5,лШќЫ‚U9€u–}\Ж7Її`ЬпcдcчСЯ‚oŸм{PРйŽьPeУВeŠ€ušХaйЯќd/Бsь€ЏяŸГвЫ№уй?ЄV!EОœ"/ŠЮxЮtЮlBV”­0ЏЌ7v–ьЂьАl# ъЃњ[eЧyseАZ…дт_…›ФуžV іd•^@ЊЭ2TF‹йЧ2`Ч P^шTFР `С•с \€рўС‚НŸsNчq]ЦыфхЎЮ иc9Џ З;ыю[о6 ь†:DЗШQпАЮФБ^ичйПВ[ОRѕЏЊ1оїыљr"У)жя#зŒм:ђ!{/ІьШЙ‚'х—*Т*юk}%OѕЂЂ!мt }‚с.`_bџЫ~мYчиыйNжПЌm-Л‹нВз РммДв˜hLšgš…€mŽ-ЪЖ8”rЈш№пфџЗ<аqKЧџкrкfЗMž>ž8(KWiЕ™€ьF™kyнК†Б€~€ОТцpXtЮ­ Й 9'9­Ќх;гїgпШŽзћОэћОo!ГGPЌс#Дљз$§ГuЫБфиrb ЕєfН0Иыџанsx›L‹Œ{ѕ_H–Ib%М!ХžќzWS4„Чuжо*С5@ДAь' Єl}Uћu1аљ`чћ…@Ÿ.^]оНŸx?Жм~xћQTЧ|Ю<Ю$,я-?›K“Фtид 06FCёд4д4и4ЙšЁšašс@ŒGŒ{ŒлЈтœ 9ыsжТnNБ2Ћ—ЁOЅ/&•!'>^м"ЙCђЗ[t@ХmЎ~03ЋlšjЙv(PpЂАPtOpXќ ЎHRЉЙTй[Э SLЎ–zЈЮЬЈ™б3—эжЕ[C?зЏwNл\`$—TзЎ–•N+УlУbУ6g}kрЬЮ:ЮnXшЌž†ц@Язы‹˜G†7†4C*pvѓш‹Ы0‘"ŸЇЦЏ>ічзž?xўц ‡Ё•^ЁП Tж5жs™Гк™њЫІ%€u­mАнpluьsФ•)˜0fг еЙАёТŸ"Џн^лМ6ўŸY>>@ТY еб™u&0и &ƒа?з?е?rіm э ~Ю^ЉЗклкt­‚ 3§nZo: $ЂЮЖЏБ ŸTй‹ѕ’њn€ ХЪ+ZQДД(šUпЎъМЊУиLѕjѕ_jz†Я5я1їХA[WыЋ^лойNйціёібісЮ:Ю>зОе‘EШFЫъжtZиЉ+р{ХїЊя еёVGZcБc1Р ь€ЁПaЄ!ЬйŠŒ“›ГЎ1ю7оLЛL‡Lё€6\;XлаH44н}ЌѓFMvд1Н4Э6*€ьsTњ§Њe8Д֘—ўB‘Я3žKВ`3Х?B=BC—Fр‚РЈРшH"%ѓ$ПЈzZ#ЌQже€%л"ГК Б-н–eуіw”ГNuоŠ1ЈNxtИ>т(аЄИiƒІЩ@ћ5N3€аАЕ€ќЈќДќ*`8iXg˜шш[щžc4bЭ<@yM9Єь%P:Ў4 ФdffЮ‚чЂЅ ЙZ™Ђ vIYђђђЅ@Ў-Я3/@жЊюЎКQu‡љ=ѕxр1н]ю|Ж—…Ю Фъжu E>gUноЉБ ѕьaTЦћrћ2ћRРкЬъemюhcbŸl˜ЧL2“Œъ”їUn+ыlZЋљM џhьt •Žн8іэб%€.Qw^ЗШ]šGђ.ьn`ЁxзђУ ЬLg]Ÿq%gЉГFevЫMrфџШ§(ZХ_RтЏ—$;АLЈiKПrых6ЭmgжOлOгO5$d­umщкЗ„ьrь2ю*g­‹kG‘ЯSЫJUЗ§QrЈЊ’—}^†Мь}qŒ§ §ˆ§`НoНh=ЬЬБ+ьыэuЕVЅк hDЎZdEО§" р\{ЉкєˆЏГy`ЗкРмЋsžMŸˆ'ЫїЈ-;Ќhˆр!РН]|Љ$(^%Œ.Px†З‰Ÿ"…ѓEq€ј‰ФCВЪЅ—Ѕ?ђBљpй!@ЖPzS’nI‚Ш$j„сœХœŽьРДYг–O;0їXні]е|ѕIJŸтв‰њlОћи_ŒОИєbьJБЕЇЕ“Е-`З靘“Ю-?Щђ()–ЮrНйS‹gI‹ю&ю <x’ mсЌ1зšФЈcгNѓ ЂБі;н <Ў\Њ $7˜ œ*HІ'JA ?ЕИ(jT8”;($м™œу@Ж9;5{3№!+c|FPєИ8DPШkСn]˜цСmYЈ+і-ZФŠŽнœW5одЊ9zWѕCIЃJџ-AдЇPтFБјХПo*Žw.УЋ^ЌRлымХ›ѕпOылMlUЏзэ4ћс­%Юfƒ3Х …{3йРѓОчL|мO<џђ @Лœќ#№ох§о€$ЗфИ”ѕ@JјЋљoнзYяžd-вoeхн>tЩўЃрY­s/Г5@ЮЌќzœQŒCт*сHs€ Т 7l>?ЗъпГЩ?O|+}žIM)BЂ)Vи(Q GеqоŸ fA :—sфЙTuЭqмБЦиmіІжDxЁ*3ћ‡ўёА‘Y^kТf 31Ы+;H™‘Т~ЙИ{Sx{ˆdiъZрбаgЁ/šЩЉwгП ЮEˆоЁ8 P (ж<S^ЂŽЌ”•(G*г№Ђd_Щh‘бёЄЈ{сEЎƒ1 Y‚•ќ|ЦЭмЩd7Ѕё]у{Ц|1Ђълс№cš‰­вчi<ˆЊnШ?т1››Яхp‹3ФЬ;&‘ЙŠЊ8кПuM'яšv~t8SzЉлэKРН{Мƒ=ў*ёхЫБ@F§l)§/%JBрpЖЈb2`t5Ў0ЙBoiДтwгQSуDЧFнPэ­ †йY6ЛЌ‘тѓЋшЅшКhцѓ/ѓјo‰›Ф_2|ё@ёёbdpjqrМŒгcZФxХ4KL&•щлПЦw…-\пPџiZЈъv*CvUU’z+5#еxЩлёвЮ№уы:œcц&uйьЕШx›ѕgN(PоRЕQЈCеg5Э`0ЫЬgЬёЇ­Йuƒхƒc‹ѕ€ее2™9d^mі3=a˜XFЉёЕc›Щздг40 0„buИzЙњ0dвVRiРщЪ цєpќ™•В e~ixмУИ{qЗ‡E…E†§Кi‚лTЗ)n“'ЇЪ„ЌwyBy/q§ЭisєxŠЬqYA‘ЯуB}Ж п|ь/НК”|щщЊЛЖ-Ж}ЖxРў‡нгvŒqХ‡Р1ЭqАЬтц2A№E И:1‡˜ГЬ]€™Ц,eŽТс<5H˜к€ѕыы<фщ‡ш‡ыGВ"WЦ6o.xURФЛœ2"eXЪG>чzыyЎЧіžгїRcXН)џЛЌЉ”ћЦ:QЫTчѕщгќЏг“њt$з)_)Z њиIБ“cЇќИЦ 4( 2cХXŠ-и‹Ѓј!јрсcr­л­Л­ћчыЃ^lIрGП{џ.§ныЧЗoнОyћЦю;<ЈйУGЮЅBЖ‘Ъx_Ќэ \=Ш?ѓе>Т“QЈдБzеrЃШкc(ч ЌЃˆKН=љr&ѕЃœЫА'ХŠуцдШЙ їэ кгyАДЕдGъЃцыТu3tг,п‹‹BE§ eњfvШlџPvп§Ол§F;9ЛјдЌљЃћR!НЊЛU”kа—ГјQ„ЈgPфT†ёv Х:зтХђџјхЇk4EЦVѕюфџšЦо!-эЙа 7EˆыЊЩРЅ_QпL ЄBЧ‘ЪДвз@ЙrЩ?гсуЬЪ9рŠјV ЖеTDЙtиŸAБЗnCБъW]ЖаЃ#EšzFPфџ=џСУ?Ÿёъ"zTXtSoftwarexк+//зЫЬЫ.NN,HеЫ/J6иXSЪ\IENDЎB`‚ktikz-0.12/app/icons/application-exit.png000066400000000000000000000021561325124551100204460ustar00rootroot00000000000000‰PNG  IHDRФДl; pHYsТТМЯtIMEз  вЁabKGDџџџ НЇ“ћIDATxкЕ’_hUЦПћgfw6й MIЄЄMI— `#DHEв†рCŒ…šЁ­4Ђ(Jќƒˆ +bOyRњдЇњXi(H‰Ђжк$&6kТnSEШnВЛййЙ3у™лlZж"тŸsИsПпљіьрПЈ Bэ еWЮ ™sчv{ГГЇзЇІzT6ЫƒŠєwћ{іэ ЖѕїџМКМмП{|<%Aх-/Mю]]рžїзщpїђЄDСїлV?=џ€! Nž=лoиU.уп”ceiЙTœ_F&sыg1†t]@ЯЙ˜яп=9чњ^X;ззСhЯLmлм{$wc!ТN$АџР0}съ’I Nа\K ам/"КАnš№*WHP›`EJьнK>ЎС]4Рnm…*•є;’юKtжйзЇЁtW{*яcUрBeвТ™3Агi щkc[o/ай eЕќŽ$zzрy”R(ЅRкC^ ж‰ЗVASнbQƒТК:1ћЦЦ ›šєйЎюnм”\ї>BuЏVV079‰РuЁ9ŽяЮФО”zхŠжж0wъ}ЈЉЂг7ДwbћaJ-%…?€Ъ­СЅЄ<›ЯЁlлw$k‹‹–#f!j€$OНƒ=ЯП ПЁЉ2@'х2ИqzвГсфж‘џ=‹фЬOІЗьмћЮ\Л’XQx}„dСЏbњ‹Ябўј“Z_ЙєФЅѓpŠ.JФ)†!РbбъU€Ф‡)<UwђXь)t ы”Є-јЎ'р{VЈ D ђIђK^ цд1H ­ˆeТ} ƒBzu7чPџл|8@Уƒ#Fп„Ik3l„`3у68œИSыХЗ њ$MсœtќУ#0'FаY$ЁuџсЃЈ}љ ђа|Ш?'fКуЄЦзпEїБgBЃЧR?B<ŒЗQk8О}5‰h4 г4б~фiмћЦIэFxѓ ЙeNЉu§{dп:цк`сlSœ4(=‹H$Ђя557п‚…œJbк ЎС~L#џЭeиWПТђKƒpK6Ъ (:@Ё8eРЕќ:>53oПФwЯk/ЌТ…$Yл­~Ж0#8С+c‡PbA„ gs(ѓ@™“ѓ/ bУF  "V п[SАЃXќr}{лЃЮв/&"0 JВ ъI’#,=@Iг™2 j<Xf™<ƒЋќ) fŒyя56Žи…Т'Є>ZФ?(!3*ІЅŽуџЌ?–АЭїЂжlIENDЎB`‚ktikz-0.12/app/icons/application-pdf.png000066400000000000000000000017451325124551100202510ustar00rootroot00000000000000‰PNG  IHDRФДl;ЌIDATxк••MHTQЧ›uЁ 7.FkбЎСZ.rб&ТJ+‰r‘BшТUазЂ…TP ‘MжєхN„\Th1a–…жd:6ѓо›7oо›7_~§;ч*OДqЄ fИїмп9їœsялЖ:JI5ЄКВлэЧm6лњ9‡уxлšUЮкШЯЯ?ЙММŒХХEЁ„,#:5…`_L]G:ŠљљyБ!p„"цгЅЩ19чљм`6bуL:8хњkUЦіэƒііэJa`PфQM№h4Ъщт}ЙСifX™Œˆ0CЙЎЏЧдЎ]а\.,вœNs ф€гЦб+ф@г4žЫцvIЏAYТX{ѕ Ёцf.WWCїxxž%ьcК.rЏЦџеЛw‘œ˜Р<Еžвд„@YЄsч`Rойžг`ЎtPЮT0x\НxщЙ9ža "xъ~––bІЎJПHOZQ6‰˜РV~W%РHS4мnЂТ9•>Ц7JЭpI †ЫЫёўgo,оjфђ™3Ђ УсА.ај;№ьпw••И~onнТФЅKp8'ВƒS) ЮJббУgЯŠ 1=6†Ё–toпWEЗЖЂЋЋ Ямn  ЇЇЧOЈђЭŠЗNЦћї_ОŒ™kз№qчNМЄ“БЬ*Z”œП|ёBr:‡eЯfc ЪџхЋWсu:1Оg<7oтщ“'МЦ7MМО™<|№@...>lA7Г8вљѓ˜оБПЏ\СяЩI|лэЖ ~К™ЎЮNЙЈЈш!,[ŽХУ"Ыјs№ |`– ї‡ZmŽ4B`Ž˜ћ5рѓСѕш‘\XXxЬ‚цsѕC шЉ”юнУ\oЏx"ƒ†‡†аM’ІЊтјG-шV`оЄмО$СќMM\!лCWљ]ŽŽіv)//Я:ўVрz+­цїC}ўf0(ЎДx*^ЏwЙ­­m–zЕf Кѕ(#е’Nв‡ГоfГѓЗыФёбw[епbќ[Ѕg›ЦEP IENDЎB`‚ktikz-0.12/app/icons/application-postscript.png000066400000000000000000000016221325124551100217040ustar00rootroot00000000000000‰PNG  IHDRФДl;YIDATxк­•нORqЧЛеЭдLя\wнІuЏ^ЕЖjеКi]є?дjЎВхRT42ƒVkы,уM4œщЬЬˆ‘—Qh­iЪсхлУoНЉЕеГ}і;~чsžѓь9Я鑉мммнД%ŽџG™g]œТˆŒgНј4(цчБИА€8ЧAˆЧБЬѓH–7РCр кУsэ1qNNЮQёвт"ЛPoxCwД]/аЎю„щЅ9sNєЂ‹ж?1єєгџ8]‹‹ЙX бh§УxkЕУ<8‚{їЁОAŠgj=z-CP>г N"…ЭюDaaИ8NfwLан}pyќЈОxхћ ЂЂeхћБЏЌl=є{9*ЋЊажv ЅЅЅттDb6›s‘/ˆ~ўŠ– T_ЊХйѓQSл€+"д\•рм…Kш3ЂЄ$K)’Щ$Ме9‰Фr Ž 7І‚!І7gŠршiѓѓѓХХЉT nЗБOФБДД}2‘——'.NЇгИ%ПЕІ“аЏсЙњOtŒŽч v<щіЂЈh—Иxee–!xМИ=>§РOњсšќШ˜pљ/œ^8œТљ…%dщŠе•њЭЏ~IB3„g?#Ž"šУtpŸ!|єOУы P~*нŒnТq<еxgіŒћ-$І §S!Јк;№Xљ”бzSŽлЗяЂЕUŽ––VH›ehlj„z\вH}ќСN}\xZ\œJ§ІУащpR6vzд'$згy[› $ЋЋ“ ЖіЎбj0šвЃЃo8B{ЗژФ3$6PЫy№юНfЫ Ў’шчОееUжE4в:­N ЧAfЪвnkФZgВЗЁЇзŒ&щuж9‚ А5 І?|”‘b–ьт$Э‰ЕтЮIŒОЕТднKѕlbй~Ѓ …в*Ѕ2#=Ь ›Š“Iє bвћ[lsК№zlSъ%ЌsсpК]ЅиЧb+1™УУ#єŠ1;ЁїпB=ь…еjCwЯKШ ЖчсƒqqЉИ˜ јwуу00 V ЅR ™LF…\Юбў#йDѕiтiРD"477e5нnPџгr‚8Й Чˆ=лu~ р9‡.$IENDЎB`‚ktikz-0.12/app/icons/application-x-executable.png000066400000000000000000000013361325124551100220620ustar00rootroot00000000000000‰PNG  IHDRnНЄАsRGBЎЮщ pHYs „ „ЊтcytIMEк 3’"̘bKGDџ‡ЬПbIDAT…СMl‹qЧё_ukйTešUqrИ; ‰Иˆ‰ЙˆЋ%L8`$"т тр%ёrє6 ЩМ-ё2жGŸvOл=Яг{Щ0лш0aЭџ+‹0Y">i–RHQEZЋџ›{Оыѕ—м—  ыŸjЕ`]@вЂюJ•*?*&­ (ЂZЭRwшBсGуцЙЋЯоу+псш-­MlqЇ\Tў:|y’ ѓŽOL2A… &ЬwFцГ™dї%…єG"ЩˆљРЉ0Ю0УŒQaœQF5OQBП- F›]†cŸeJјфyЯ{оRfis<ЈсM> QЄL?ƒєSЂ€Ч;†(RГAП4K5Š|№†вИє3жЫЅl<\ЂЕ]еl”Twющ­С>\r„З*Ќ№œІr”)bг>tњ‰ъЅјu,вdЩ“ЦуФ#еjZэЉŽYњ№qАЙ‰K‰+t“$CŠ.Чю(ЈiС“w‹8dЩ“Цт:JHб#Х6^Т&I/=SZЅiЋьj‡ЎВП ЈДPЫ[^&Эs,В&]НвvЕ-_-› /Щ‘6ћКЕ\ #§йў ‹WМІ‡4=4lгŒušздE‡чЄHг‹ƒC‰: 5­зŒјэЉЄБШХ'K}јМЁˆOлДOЉQЬпйй‹m’8јЦУХУЇdђиdM–=šЏПФw=ОЯВ–Ц­=\\Z_EwФZюБЗKš%Њ•ё Є%7?ЛИ\Ћh‰ддJEѕOѕ'Н.sмSНў'PL+ДBБ†€fљ 9.Щў Hѕ IENDЎB`‚ktikz-0.12/app/icons/configure-toolbars.png000066400000000000000000000021201325124551100207670ustar00rootroot00000000000000‰PNG  IHDRФДl;IDATxкЅ”{LлUЧЧk€ВЬФ(FќУЦ?SГИБЬљ—нц†yШВL^6›“Ѓ­ФGЪЋ мEE TŒAЫ…б9FŸ --}wm)н$Ž—BчзѓЛa$*K&œф›_ЯНч~ющ=чоm›ЕуЉЧЖŸ+ўtЈтЋфSкAC!Є-YH_Ÿ"пh4,3FGAuMe`їюФЄn'=EŠ{ЕЖЕ VWWБДДН^‡wо}лMу…Є]мќ+Š? ˆGА`0ˆ›Ѓ717їVVўDK‹*•ъ?a111 8d^Џuuѕ‚Чу#yй˜Я7ƒ™?ќўYњлЃИмеAОѓ ѓаj5P*oАŠ%ЭРэv‚Р{зСNЇ vЛ2YЫхц| rЃЂЂ’ЉВВ %ЅЅ(,: ЋЭŠЛwярЉћj7Цдj.žmмв&Ehhш |џў_0›-АXl‹k1<<Œщi+ЌV;КЛ{hC'гШˆŸYŽjqfg§fis$Mр Ъ жЈ Ў#,,ь8/,,Т`˜Тд”™`6,//Џљ&єєєВЏбhBџР Z)ЃЯЪр ЈЊЉЁ#Л_'' ђЁбЈ‘“ШШШdіћ§ащЦQ[[‹ZЌеъIуTѕ tvvr_І+WЎќxgЮр ‘/юлЄRXЌf і#-# %%%ˆŽŽNb`‡УIееРd2sйвo-ѓеj-dВvі%QДbbBŒЌx?=Ѕ|>ђNŸЦДХL5!##““DEE%2АнюР­[*ŒЉQUUMYЏf№ЖЖ Њas]]]№x=АY-Hћ0 ХХчšz йй9‰*p§К’1""bL ˆŠfСттт№zЦННrX шt9йх0'QTT„‚ѕУ+<<ќŸръъšЕlUœИЉщ[‚*hМŸњќŽОuїцяЧуббШ ‘|ГЅ5 Lэ–РРt‚tОTaШЈЬ\‡АN0а™u\ю€B!Gђd\Мє5фr9љ}ЌEMІiŠ}ЯAb2№R щЕєц‘7D}з8єЪ!МДєу:ЄЄМкLsЏoМ†БžXБ6в'…gwI[Оџ=/?;п‰yh“Еh.‰Х<\Зч_и-WєЊ% ˆ{:ёЯЦЃ“о‰ЌY ьEмЄ…ќ<єSЙнaУс#‡‘˜€мМ\4H..PХlлЌ …ќчlvлJхО|;S4J.!33Н“Іл4ИщЛЦїД: мюл(+;OзЖъХЫБББTœ-˜@x>AЎшYu8эЌgtђѓs›YЖ[ДКzёЩх№œзыYmяh—бй>љн€oєB„bIENDЎB`‚ktikz-0.12/app/icons/configure.png000066400000000000000000000017111325124551100171510ustar00rootroot00000000000000‰PNG  IHDRФДl;IDATxкЅTkL“W.PЊ?f\Ш ‚КЙ(H,Šc\DlЭX1QЉQ"b№6o„l@ПJЅj[„к‚3:Ѕ ”ZЋ"EТ’ЙЂ`иф’‹Pу4тБŠ/эГЗќѓвњ$OrЮwоѓ|яyЯѓ–№‘H˜eK“ЁЕекwыЯ?nд_З\0ъw­т'rX^ТGЁяz:єє­гљ‡і‡vtўнЋзъ\Ьм3УіXuѕ‚M У#Уx3љуЏЧЁбЈббпѕћћћŸЄЂŸЧТ))ыФmэ­z6„ёёWxMТ‰ќUh)h*S/сЗ}G†ЙЪt T Œ=‡уЅii›ЅюНЦХ%ъ‡‡чупЧ0<ќFGGqГЁОeоќy\šX’3{кЊ+ЂЎ\5Л” 47[0Bu~F%щЛп‡’уšпsФПЬ­Ў1E5ЗXєЊcE§гvУљayћн;аUV`f&˜<)žюнћМхбащѕX“"ТŽн?a`рzzЛAЧ‡й\ыšѓеœzкУ§ЄЈV[šойй1A]†/Ц •ЩА!5™YY(Џ(ŸКШЛT"†Пхp8зhOиG]Т‹\тg4Uе&ЇP(DLl ЌV+@mьLOпђRРчлљ|О•ЭfЛ;n1№ЃЂћія™eЊ1ехЫђЕ< IIIиDYкњmN†aк)3… ‰ ‰DЮ'НЬHФп/КRDы:7‘K#!ааpг•“]G!пxкЖ>ђ˜фГeЅ#1Бп#ˆа„/Gq‰jњж”Ј‡№39еХЊwМЅ<‡„ (8м .вЖІЙНkЃ˜hZ—Ы œQЄRъ**Ыћ3VЎ@XxиTттуpо  yќj?Q,W•;тWФI3ЖoнxZ{ъQl\,ˆdЇs“nГЯ`y ƒQп“пBУ/‰>ПžаdэнЗЇKs ќRњ6›х ЊkЊк6ЅnьІс""[Ѕ),(+зКDЂuWhЬђtмŒЫЕеяsХйЗщЙ3бžšЄн ЅЏYŸ пЂc…;GюHђФm? “dюL?їёў3ОЩ€кRIENDЎB`‚ktikz-0.12/app/icons/dialog-cancel.png000066400000000000000000000024201325124551100176500ustar00rootroot00000000000000‰PNG  IHDRФДl;зIDATxкЅ’{PTUЧ{wяНьтƒнхТЎ(Ђ–€bˆ9юJЌˆБ>x9i$AА‚Ъ4PтkeqiMpДI|ЁQ`PрcUт-ˆ‹ЁІгLJNх4§сDцЏжЮ0ЬŽУдwц;їоsППЯ9чwŒGo’їЪхтcООl€ў>7ШdQUЗЭц[C55~mnўЉОўСїEEg;—/74L™Ђ70’\ Ејїї2ёnyооГo™ЭxГАM&Єя;v`‹Fѓ[УфЄE<šH>ЭБ›:bV=$Ш ЃmлЗaї;ЩиЊ[^Фі„8ќvѓFьЭЫУžм\ьJIЦ/eSР$‡P7ђQVbh_ЛћЗlСОМ\Д.гс)ХфV*ЪЂж„аXwœcO4ЬёћЃ5% л32Аm} ~.(­ћ8ЋJ€ Г:э№еœьк53М~ЎаЏ9ШКŸфпYзФуЅЄ$̘˜ˆжјеXХŠM/ЎЃтЃn-эщи–ž†е3Н–ЬЊещTŸЭђщЗЎ^№l|<6ЦЦbcL жП8LЋіЛŠд…Ођtі3КХHаЗ^uЕfeЉ;r6иZуVсeН/DGузQ‘xrо,Ќ‹ŒФЏbW`ЫьЛіJ˜ТЦ8=6ХЧaхTх­Е’Бац;ез,цЎ=ЖED`sx8ž_ОyИўј‘XtЊZГOыtXх7§N˜Н}ЅЊIчыщдЯD…cЁ„) mШЬTї–˜l=њзА[ЋХПYŠ=…{лf~СЋ |dОп“<:˜O…–ч”54X­ Т­iЃЁ‡—-S_ЮNГ]‹ХОр`ь Т+aЌ№rЛ— рЄ зrLœˆЛ'I0 ц@›єFБ `…Џ)œn‡nPWЮіВѕ-ЦР@Ро—цт~oї{ jЯЅИh2‹;аDЯїцСˆђ•мХbZFYЦЄL‚юvamЭЮьЁ‚ыф>ЉKфь§їќa”h’ЧЪь’ГOжS-ŒШР2Х{шG)#Тэ'`šQЮк.Nќ:8b™‹м§”бPћЮXЦt€ъЭ"РmїCcПЧšwЫ А_Ху‡ і—FъU}лШ7Хhvх†ж:€&Ј UќУJ‚ZxfиEifƒ’ы>@ЋЊ’ˆАж…Х МBюŸ С]nќP,@РXшjЇM.ьЙу”?HYЃкщЯ{яэвhžвЧU4s-РSp;Е"пŠvЅ‰МГ”мЅгn<žЄl…Ъ ЅтВicƒ ђJŽйRц-У/~ŽТuєnP9]Я]b(OIYr(;{сЧЉЉkv……|Zъ=сбyъk=хŽ <І*ИЮХЮрHžLЯ‹|œŸ4б hЁЂz^™ЁРЖ™иЎёЧЎyгАOpТЮ‘]‰ъ)УЗ•\лž%В њнЉвЛGМdиI§ы§їШ§фЋ<ƒ žRЬї’=ŠфS ѕЦ+:щ"К0+ОўсAeШєЧ'B§џВ„јќžіМВ3T,кL›tџЈ d5€dУLžЫВŠ)Мы8ъўєе4i:QлIENDЎB`‚ktikz-0.12/app/icons/dialog-error.png000066400000000000000000000027671325124551100175720ustar00rootroot00000000000000‰PNG  IHDR szzєsBIT|dˆ pHYsvv}е‚ЬtEXtSoftwarewww.inkscape.org›ю<tIDATxкэWMhTWўю{“™$ІiSъЄ“hmЋDJв…`їb@ЄŠUTPФ*Š(bŠ ЁнИА]ИЛБuaеJM+X A)Ђ&ЦŸT3N&™™їцнляЬ}Щ‹™˜ЉДХM/|œ{я{чœя{Юyя)c ^чp№šGlМЭƒJЙ!Й7…8ѓ а_`Ьxс~кЕЋmR*ѕM.žТ}хVUСФbŠР№ZЙ.dэPB)€6t@‹0"}СЕРШʘЯЏЏЏЋ˜ЩlћьфЩЦ@M2љѕфжжi piш_Š@рКъЯћї[ žї€)e$ьoи0ЅeЮф;:№_Œ†–ќ~сBуїєGD@ЮќЩ­[*€_(ќЭG‹†AхQEлнээ*ЬЏ ьњюо…ŸЫЁ@DNˆh^Nт%ЮM$ЃыДл{чхU`ГНчб#xМЩЯчЁЦ:WœU hmя#dиH(кэ№Г9ЗhТ’ŒЕрQТ<3wя†Уs”{^\&ƒЗлкаМe Мс}Ћo!kъщ‰Q E *i"Fч-›6С‰Чбњљч@*U"Ёy ›NcъЊUxkю\$„шіэ№EW‘Бr"†rCDšхЊЦFЬкЖMjј,№ЩxЩ$ќlйО>L_ГM `xT75aЃх‘dHТкЃmS)Хlж*БЁb^iШŽ(цяиЁцfL]Зг-Ти1ин=ђ&Д'ы т Ž„жxўзЗn…—Щ”‘јdя^$—,)sўјъUм;rqщŒЁ-ШW  УЦ [C(Ю'1*ПЎ]‹B:]FbьшОxBН1Ђ+(йA’Pй!@Xe‡pЉ<еѓ№ЫЪ•ШѕїуeуољѓxzрšHЬ=ъФ Ј €ЧHінј>&x _{;Њу5Ј­ЋCmM b„[]8“АŽ‘шЙv ­Ы–•9—šя:s)­с2gЄєhЮУZd’љО/ВДvыыБјєitВЧC;b/f}L@РРE‰mмˆйћї‡Ю#ќxј0:/]zaЯ!‰ЇNсёМy0жБu.yс(њЈЅьІ+АБѕ&їь)s~љрAL?v зйЛ._.#‘:zДtюЎ8Ё‡sŠ  Ђыv^Ы$zИy3Яqp™>ѓјq,ІХ/˜lЗWЏЦЃQ$ђдyВ~=о,qU~E ‚Kд=‹‡L@!q›Ož:qItBm$ё„}тй•+ШwvтёŠHіє@иБ )СDU a‰іќE&Јмxюz–.Хt>н Ўѕ˜ЯљOIЂƒm9Ч№ЗєіЂ(6Т ђ­АЪD_ЎкоLщSйN *VSОУўчО–•CЈАT…јl6_ъŸыPв/ˆоу— ыkќE2›4тˆj=|ЊЂ=šшТШ…Є…@ž2G™Ѓ^at^vђн@щМвN•t ыTЄ%FщSЦ‡KЪ’ŒШ‡Ф…yымvС’ -Ъњ™gєИџыjc7ц4щљ3В.\э nЄ‰D )l&Qiњ&дс ?$тЩ<мЫ)Ъd€Ž~ќqєA№сИGа<ЩйЋ7пžЭя>Я8lђF%Ѓ"ŒQЦGsЛЯ‰ы*§^ПК3ЃЦљВьЯшUЭъЧї `^ѕзьџПуПVЋмyhyIENDЎB`‚ktikz-0.12/app/icons/document-edit.png000066400000000000000000000017441325124551100177370ustar00rootroot00000000000000‰PNG  IHDRФДl;ЋIDATxк­дoLSWpщ\›—8вz–F‰ PдшœfФЄ:5:lљр˜5SEј бЭeЫ>ЭичЌ‹qдёGŒ›qŒ`В9Ы7LlM?A7Ќ-ДЗээhyvЮ™м\šД1f'y>5љѕ=ЯЩ{ќЧRЗ[7ЄгEFtК[–JЫ%йє29R#гЛo-ѓ=оЕ~v Ј_sœ§ѓммМ9x^тФ‚OСп+ЧЏоФк•j\ЭЮЦ …F™Ќuо9;; ЇЫзф$ІмnИ=xxМз ЏЯпП Аx=LнК–ЂrЕJЅћпЩˆп\'K4ЩdЇЄ№<”'Ј— є?…@A№СеЏ‡Н‡Уцѕjp‡j­,ўЄ§•™Ž3r3ё6ŠU˜ЂѓЇ$ 0ƒ’„B!L 5џЕњwK RЉPЕђ5 _‘%~ќB~—XћH Є‹(›R ,#L2emE`р-yП ХХХ(Q/FПIŽЛч6…|СQb­!ЩТR”^Yœ‚‘HОёям уG[Њ)RЂяьЋјЋ‹Уы‹2:‰Г›d!Ѕp2*‚бh‚ѓ‚#ћpэЫh4ЈU:?QРv§ œhn1ZIВ(– ЇDCМ ЁбƒИ}?ЪЪJ ЊТљу™П™ƒую@KK …kE-’аX,†Ар@рqFњ аV–Г Ю|АŽВб|`ъыы1<y<ŠЧуЂc—ЫeэИbNпьR)ЅY ‘HP$щ?›NЇѓГхTpZT %’ЪRT€ћH сљ9ўХ|‘ЮБHkVp‘рG.•JQ(Т›ї]љцѕЬZ,ХїисССyН^>Ы_sУУУO”bГUZIЊы:Хqв4ЖЖ6+###oйqU-–jвт3^ œОnгЮЮvsllєџў:DJ1њ•‡&ЇMЇгFЏл,˜Иї‘{C–ЊХЊФ.ЇMањњF™“кeЉ,~Щ‘‰yјJpЇoфэЋХЗ GђK№X”šsЛ )˜›Ь(s—yР`єаЋ=йш]{0!*Z+ЩL ]J%Ь‘‘џfЁыA+Rss›:чцМnўљvюбЙЎcјТнЙ‡пs—€ нЃ,ВRЃІCѓйаeшћєkЋfšЭн 7$‰ulАT§UŽг9j'Џyм ЫЌ–Џ,n 6;Ь 6šЅЧ”“€Ћ~-xрёzс]єСчїУ`iy™gye+С ќ+~=-BЅЃЭsЭИ<ж€ФhœhРM6ЇМc;šgЩтАЧЛˆEŸ‚XZJƒЋЋX …а4нэ-ъ>жс’Лч‡Њ|б^ЋГѕИ№ЉZ›tŸЎq˜Ё‰–*0ДЖ†5–Во2Hнr­9(я2 М-[РЇюdуЬ3J;s ѕJ є…УЂЋ 1TУс0"‘tVЈ…idЕ’виЧсšвr\__Чz4Šмў\а­ЬАдЦр qX [юƒб lА” —€žŽД ŒЗI`5w 5={ѓš>їбƒС$‰p4ЪP”e›››h§о zA ABбkBEOЎ дО'фй є’e€Ўs˜o_4(cБтё8ф˜Œ‚‘ э'эHТeн }Х›‚†щu‘ФaЪ[ ”gkk žЈХяŠAіНцвC‚Vйўр~г1šgЛЪˆИ(бT…ђlooCŽЫh™kбe„nR‡МЩ<а§ЄКB?(KAоЛ}qІMyvvvb$Р˜ЕUŽ@\TВЉнннU%-,к&Ž Ъž•їЂ@ZјР… ”E…*ымn7fffрt:111›ЭЖРŒТДА8[u[бдхrЅД“ѓѓѓ+Ј‚UЧ jЫŽŽ tjЪ7KOs(ЬЮW}iЉmљМУсрsNчdмd2Pf˜Ѓ‡ТЪЛ}˜Е~+'Lј0џ€:;;=zНўd&T§Ÿ—9Ч2€"ПrQ„-ДпЦkIENDЎB`‚ktikz-0.12/app/icons/document-open-recent.png000066400000000000000000000020341325124551100212220ustar00rootroot00000000000000‰PNG  IHDRФДl;bKGDџџџ НЇ“ pHYs з зB(›xtIMEи$Ш§ƒЉIDATxк•[LUЦsYXXX. эvMЭr1B_М€ёI_š“†дgŸšњ FcMгјXУEIHћІi4еxьƒ–VkЉм„m]vЙЫЫ^faoььИ™,Œлcќ’цЬЩЩяџЭwЮф’‰џ"й*ђдй:ŠJыбДaП‡ё‹ “/іРннн/vvvžжv'уihxl‘ УЫЎŽ–&Зmg]АзИї…вЪ=џcђ|џїŸ№€L^еuѕѕšІ!ŠbŽ'pub‰Kуiz_;ЩГЭ‡АŠ*"иNбР№мЃg{‹ізЏђKЯ††DAдЁћUH‰ѓъ‡SМђ|+Їк\)—X_і­тЖCїё‡immjТvј]@, ЂАчV4 И2ђ'–J/ф VI#O06і+оy/Б˜Т‘2SэnЄђЪ.Žu= cH‡D‘gT•Qo‡tqЈL"‘LŽ„™žžЦчїс™ёфХq?y‚в Л5Vqєё]А)SнiОA6f; жbД,ЉTŠh4ЪШѕы$‰м|1щмš3<TbYЈ1ЄУ4иƒŠљ&’$сr3ŠŒЅА Њўe§яSUY…ѓА“rЛЏ|rяёТZ ЬЛ(2TZр~ЏКX?TЭфхQŠ“|Дж ЯcJs g:-Ц%ь№ƒF)ЗЯї}дРЬ>:q†Иg Ња2] ы п‘}:`д[Сš:В'­Д TœАж§klѕ2t“МВБмвЪC)КњhЮXk џPГк•|gr|sИщY&Oб §Z"P_, uтJiЌnІыГsŸOшаїВзЫЉ=5Сƒ<FZъ7˜ŽОШЖјРzаcu#FрыL7Ђ Ы м 5ђ\РlаБR4(n ЯїѓЪ6WЅ€5ж6Р0шъvќ$рt#В 0 oХ ^ЄЉљpJ’л=ƒ(dDFЗЂ`EЗ›С2g"Я Ѕ–­œОwЋњWT|Ÿф€ БЩљЪхоЫ5УЏ’˜?Х;щѕ€S0 Ќ‘VР$`!'nMBt’Ё‘“fУЭ†їQGДГ(Ѕ\eY^lŒw1њЗТZ ouъЃ"f—иЊІgоhъ­Ма<†<ЯФХЩпVжўђ§UаšPw^/Ю?{:>}зDб0Лђ#WM;JЬїW/Ÿ“›pЂбj]к{8tŒgКлля„љЁ{к8ОЌxK˜й/qхљTкеyЉIENDЎB`‚ktikz-0.12/app/icons/document-print-preview.png000066400000000000000000000025151325124551100216220ustar00rootroot00000000000000‰PNG  IHDRѓjœ §PLTE666:::ˆˆˆ 111aa^ъъъРРР‡‡‡aaa><9ГАЋƒƒƒ………sss‰‰‰едбАААЪЭЧЇЇЇ‰‰’‰‰“ŸŸІдеб‹‹‹ТТЦйкиЬЬЬŒŒŒллоуффŽŽŽЌЌ­ЫЫЫ==;===‹‹‹•••Эажхххђђєєєіџџџ l~t…6FГд$$$%%$&€Ф'''((())))Q‘**)++*--,333555;;;;‰Ъ<51<<<===CCCDDDEEEE—лIIIIc‘KKKLKILLLONMPPQSSRSj—UUUXАYYYZq™[[[]Їсaa`bfmbЋмeeegƒЌjjjjБтkkkkИ№lllmmmnnmnnnppprrrsnlsssttsv~‘wwwxxx{{z|ЖїƒƒƒƒЁй‡‡‡‡™ˆˆˆˆЂШˆЗнŠŠŠŠŠ‹ŒŒŒ‘‘‘’“•“ЂК””””ЄТ–––————ШьššššЗоœœœœЯёЇЖžžžŸŸŸ   ЂЂЁЂЂЂЃЃЃЃЎСЅЅЅЇ œЈЈЈЋЋЋЌДТЏЏЏЏДПААААГМБББВВВВКУГГГДДДЕЕДЕЕЖИИИКККМММНННОНОСРРФФЦХХХШШЮЪЪЯЫЫЫЬЬаЬЬбЬЬвЭЭЭЯЯЮЯЯЯЯЯеббеввбвввввзввигваггзддзееееекжжжззлииииимййийймкккккнккоккпмммннроосппппптссстттттфууцуучцццццщччцшшъщшшщщщщщыъщщыыыыыьььюээьэээээяюю№яяяяя№яяё№№№ёёђѓѓѓєєєѕѕіііѕііїїїїјјјљљљљљњњњњћћћћћќ§§§ўўўўўџџџџЦЃ/“9tRNS%((.0345’ИwЁ”ЕаM дЪйD‚‚Ђ"ј-бP™ё‘FЭ‘QIыš™3љ˜|дф8у;чыџša“Ihбчžsўпяо{ИїhN!-ZШљKЂџф8KœƒПlЌ§?ФЧЧЧџVмоо•œœ\тѓэ"’œыЌe&ЂИЅЅх–С`Рњњ&</D№~Пlь9ц<зYЫLDq[[лН‚‚,.~ЦъЊ [[пБННОСюю{Ž9ЏжYЫЬ)qYYй5ЄКК ШЮЮЦфф[ЬЭ-РсXТђђ*жжОТхZgЯ1чЙЮZ>1š››™W:)О+ ВВMMMЈЊЊBRRЭ›P7˜еЁы)bЯ1чЙЎjkkkбееХ<=PќМММѕѕѕшшш@MM ВВВžžŽДД4Ejj*RRRЏ9„Еuuub^yФї\ГMZuЗл 0™Lч‚™PкћЙYнчѓ!€ЭfCnnюЙ`&дAЇ6џq^?::BЋеŠŒŒŒ ™™™ШЯЯG^^с5_?Ќ†™PктЂ]…ХbQ˜Эf щыыCggg(œ ­a&˜Ї‹NЭnw†эБЫх‚УсУnЗŸ"tfЛЛЛБББ:5ГyL_ZZB€ттb$&&"..N‹˜˜˜08GИžР ГќQдMщд_шггг м+Їг)сXМ|i„бј §§Џ1ГЯ8t]чџ`ieUO ШБйmЌ}s=NЃ%~C›((Jь ж7[…аиЙm бH”МММОŸ–е`NCC]нн”‚c~Љ\ ]’рИА 0Жb3Рv…eeГўЩфb{#yiž:!( ‚WЏІтєв­ ™чDЧ.ѓ1дАЦїg{ˆWАч+žЮoуйMП_&<г€?žŠэђ\D$*ЁІk]Op,LАбWC чdYаўЮяŒќУКјхЯ гRlЋ…аm0XZC$ЌGoсX‹шŒ…g;О TЅmcЯaСБS†Ѓа-o9№+Й9_ЮUЙђР$ифшё`љ Ц`9ž=•13ћi?эхгУ:#оыир&uJ‡.=Щ§ХїqgzV,QœшXцEЅ„ˆ Л‘№(3‚ЛшьъЂyЏп[ъlфfКизБ„ЛsІ3ыоЂиyш€&™ЌxЧf*Є65ЎA!ЪЦеI\ѓџФЊ-“ёњ‚ЌЊђR>ЯEнЮF~&oцПžl%A&+оБ•Š˜ж,sЯBVд^тІЊВdоuЫ]д2™nТќL0з$Ъ28Сё"RБИš•ЕћИтЬšжЫцZяHЂу<4ЇгiЮŸЈ‰"+/;­Ÿњ—ŸЁn§~ўъLKОNKЃ/OоСщЫSi••–Гк—jёћGЭЕ™YHEт D~*S’йѓn1M|СguR\Ѓьm sќŒƒ]_УвЅ%”””0<юЎlLZЧRJДж[hži‚g™2шYА…JУ3‰NЇЃСRцА`šsІ€t‚–Ы>6>uqнМ09ѕR(–DСёBsAŸРѓ8№pыт<\ЉC097YЊ…ц+„$ЗЦБEЧЇKЃM,Э№qs‡б•Х)d2'Јq­XЎc:`РЊfI†ЫчІ`нšеИк—Cчqj›QШ8ЮmциьќРaД8{Ъ‚5'wСt BPiŸ>9Щ S;ŽЙ ~vг\4ФЙРА„ЇaV:r#ddЬА\ЧfЄећw0†ˆх:ЖЃ[dpдёј}@шЩћЋ—ЏVQЋеўыlщіњ§žюž4?O!0§T8чЖ) C<}ќišЂZ­тй‹чАr^z{{%ьял~!В"8уМаШЂˆšЉva ЌCpN@ъ‚€XX zЋ ЁУSЎƒ Е‘pnпhд_o4№uч›sѓ„”1c~ЉЄП"IIСтQQsь[Ј,fjoLЕvмяѕŠŽ}/Иї3 [Е‰ ‚kаЪƒ‡HyЊoRO58@ы~№;BЬb№4ЏTАЛЛ[wЖЛoNЯЬ <иo!‡пnЗQQэѓ/Ѕ Wп(M]3Ц А\Š(йŸщЄЛP—џят€IENDЎB`‚ktikz-0.12/app/icons/edit-clear-locationbar-rtl.png000066400000000000000000000011031325124551100222660ustar00rootroot00000000000000‰PNG  IHDR(-S5PLTEџџџ:B:,2, =><=>;ccc01/$%$   !"!"""''&/0.111231777:::=>;???AAAAB?DECEEEGGGJJJJKHKKKMNKNNNNOMPPPSSSTTTVVUVWTXYVYYY[[[ddcdfbfhdhhhjjjjkgqqquuuyyyzzz„„„†††ŠŠŠŸŸŸЌЌЌЎЎЎВВБЗИЗСССФХФЦЦЦЯаЯдддооосссчччщщщъъъэээ№№№ѓѓѓєєєњњњћћћќќќuJїЊtRNS..??TTeeИЪЪдххх№№јј§§ ЉЌšЅIDATxкEТ@C‹Л{qЗтŠЛ;ХлЮ§РР\€Чп§l’`џТW% фB]{>Іƒ~єыbЙbэГ&C—š ­3ћк0р^ёA—[вЅ|f9№ЌЅ0аФR ‚XР-У+ dfЗЧ›ЃзЧЅbГa‰бŽo‡Цўv тп‘оŸнV3Э]'nG;кH‘ъ{Tй‰!xJB§У­7\r‚ќјIENDЎB`‚ktikz-0.12/app/icons/edit-copy.png000066400000000000000000000007071325124551100170710ustar00rootroot00000000000000‰PNG  IHDRѓjœ “PLTEџџџ%%$&&&(((ЙЙИММЛТУТФФУХЦФЎЎЎЏЏЏАААБББВВВвввгггзззиииноохццчччщщщяяяєєєѕѕѕііііїїїїїїјјјјјјљљљљљљњњњњњћћћќќќ§§§ўўўџџџWvtRNS$'017LMeeƒ“ђѕљњћvW9%аIDATxкeЮыRТ0†сЂ †"xHБ€œЌ!ФнЄоџеБиІпЯgvойЊЙЛ*K!Цєˆ9wуюјг…xNРCуР*ˆtoOлOЏk–3юKћ”ќ O|?ь;Hр‡}‡žњ|Š<Š(ЃЇўѕ’veФ†њЄŠЅ7†ЄZhЦЙAгž&œ™E‹ёM3„Јœ…UБ;ьЗ/ЬќКуЊmз‹Gт‡КЎ_33КЖ/яOOBвј‡УЊ|< )KЃ„нцЭTћќZќžO ЅЏ›Ž.у4мГдї№IENDЎB`‚ktikz-0.12/app/icons/edit-cut.png000066400000000000000000000011001325124551100166760ustar00rootroot00000000000000‰PNG  IHDRnНЄАsBITUьF pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю<ПIDATxк•вOHгqЧёїќГt˜ahБKCCЮRшœzђ AЗyъPt <ЈЭЫ g#кb љa%†f[ЌPЪЮБ-7фї(ПŸlsђОпчѓМЯОHІАи;1HnbАнР’эsG}яоа| 7'НХБ3ВэЦ”щMЎсШ6ХёХ гщЛЃaХЯхтИЦё№PœЁAыІ^ЊŽœЫУй­СџIc?Tћ =B)lїЄEёбJЋтKЫИki\mмKЇR-C-CЉд^깑ƒяFўќ… ЋеŠЎЎ.KOO‡JЅBEEыЗRЉDFFl6, ::;‘ššJЊ; РŸW‡ёZmђA 5-_|ДAb!BЄ"ЄюO Щk ‹‘€ямa} @KK3ф!R„CЉroHцІпЧ§šƒž[qqш•HŠ(иšŸ—ы–‹9\6ёeг0WёВўФФФ 99™ѕб`0 ‚Tq(1жп§LšЪsЁ ђƒ&5 =яC$Sсb,чЖqм7|I“ЭkТ9иъ_Go‘цC~nЄ$UNNkIаоPМ’$DЇA†nC8кLЧ‘Ц!&:сВфexо№sp.‹‚_J'}k4Ј№f2‡“)кrХxЋМ˜ ‰juu•ьOко6Ђ!ƒщy5ъЇб\– ™\Mbп‡#PР]ілУs^ОvМФsѓJЗgм~ЮгrІћРТТVVVx}}SSSx6>Н˜АŸУp_Дг л€GзИxО „u‚л rтЪЪЪшДй^њ kkk ЬѓИї9ф*œ:!УфЇžк#Тєє4:=УУзжЩћХВА7БѓsПсчёГБНˆ?&bёјёРЊsy(єьІлР >0Usc=F?+СяПNрбŒTNчЂЇППŸBњOJМ ќэЭQvКyžŠ•эŸђм.”‡'‹MŸ ЪMž/тv#ђѕRxЫ2юТкX|[Œ)егщIENDЎB`‚ktikz-0.12/app/icons/edit-find.png000066400000000000000000000015631325124551100170400ustar00rootroot00000000000000‰PNG  IHDRѓjœ ЄPLTEџџџ.../// ;;;,,,777777???111CCCTTTuuuSSRUTS<62‹‹‹KKKPPPWWW BBBJJJQ;)rrr„{sŸ‘ƒ   !!!"""#$&&&----0'!6 888>>>AAAD GGGIIIK( N( RD9RRRTTTUUUX(YVT]]]_<"`-`?%dH0fbagREic`l4ooopVFtG!w8xDxxx{]C|A |ePƒƒƒ………‰‰‰ŠŠŠŽŽŽ`4“““šb9šc:ЄrKЉyUБ™‚ИИИРРРgЙFtRNS #'.3CYf‚„•›ЊЌЎЕЕИЙРСЧЭЭЭЯавзмпщъ№ђѕѕїїјљљљњћћќќ§§§ўўўўўўўўaкД”8IDATxкЕаg7`Рё'-ЂвІ%E{Љh'J{г$MГЁ”&ёЅ„у№sЯ§НКч‚Šgг–XЂБёа_ŒнВYЫhйЦўрf}7фЏЌŠЁ§uЬмLkRн]ХaьїŽЪЃNК†јdЂj0~ыњŽRЉ#_ї}Хx<~[S§hбЫВ ‰DА~зEЃ&]Ѕ52„Кk€ Jѕd?IEG„pA™срL‡ 3С4'9ШT.V,œ І48Ч:ХTИжaиjЗЋ1хЧџ.…>š€ѓз˜‚ћx<ˆ‡г~{Rй>ЖЊ1i–cнѕМaф„пЏužcжэѕzајй€VЋ.зшіћ`ЯЦБуЧh4‚Яе*œ_YхsЫкZ§G]]}јр:]=vэfvk˜‡˜•B—‘нн§ЊжVЏ”ж7^у\Е=yЌXн.,ž\дžwvО@a­pэёЦ“5_›ВЧуYаЏH;А"+ a{Л 73eыгж3z мl6o`Š˜Ћа‰q ГЬЅёCљ—№чwCI&“Яїї^tЎџ<•Яч/cKœcќЭЁЌL?~xџvsѓЭодђАFDf,IENDЎB`‚ktikz-0.12/app/icons/edit-redo.png000066400000000000000000000022611325124551100170450ustar00rootroot00000000000000‰PNG  IHDRФДl;xIDATxкХб{L[UРqкR(NиЪ:DVоtP-ЏЖМ[hЁМG Cl ђѓБlуŒ ›b6чта™€ђ.”gKaАVžU3нцœ1ЩюЯпmf ]ВLњщ=їžsОmOЭ`[ўž6H†^Gші#ншJGЖльЃ’з‹*очм‰э…Œ1 œX<~l‚/ю]‚ яBхtШ{„Р;Чљзf=кcдш:Ж5ШBWТ.s‰ВЙƒpкpšoПя„цЛ5$уИхЇг№жї5PЙtЂ[yюЙŠНbИh88^л5HU"8ЖrЃU№ІЁь?еW o|ѓ*фŒ%‚R“ЕЋхPБ\@†‰сЋ н"8В\ G–rЁb)g“ъхƒ8—ЗщY%ЊZЪƒк•rЈЙuя•PЖјВ)LFs‚?ђ!Ъч wFЪ™Qоl2DM†‚л30К@ыЂKe ~cШЙ!…Ђ› (šEЈЬІ@ЩBО1ќЯќ’7ž iИX:)2Š›Œћч€йgћGЙ7 в‰б№РUmЎ*ФыB@y]Ъi dO'@цt<”Ь+Mс,ўЧћ‰ьЉ:hІ VŸ-с=тAd +€птG4qж9ычg€Xы\Е$щ>Š 1ШuB(ž?` Пл&„h]ј y=DБћ~ЗWэ^Я‘‘‹юЃdишnjoЄM…ƒpит5О2IкPHађЁp.УV+GрояКітћДРшbшФƒќп‚[і8ŸЙсюOј2œ(˜ХвЧљЊ@В†бЃО„”wSn ?ШбШaO/k–еЧонЫъЄtP>“Ј"њ7yўѓє с;ЕKљPЌO„RНJч’Ёd.щePh$‡,Е” п"пOŒ‹N‹nѓ.њ'ццЭnˆяс?Щ#и.CП"‘чN^ЗвМчbќyЩ_‰€йnнaжiVъаQQЛП!№МЙАˆŒn•ЊŽІ”.ЫщŠ™HjЎ^B)б+(чЩp}и%"ЈЫCС TŒ”>эьГЂ+<2МFЦ‘ѕЦGŒН;-mz,ЉІч[ТщчН q›џзЬBЩ–]ДјН QdыО -Оз‚млCЮИ}ШЧ5Fб/ІTыPЅзЙtvџ.†НЪšЖЋ—Aй.ЬФ3YŒОЬ3x}юTgоE ЗщaсЎѓ“#њд]бш!5xФˆЯИљЩЏ iВiŠп№ѓ”—эЈЮЖT\ћx˜|Уoт'8ыV—мxТЖЭŠЗЇo‡'{€щ‚§‡ї2ЃlЋH ]ЌuЅЁЧ"žCvл‡IТ“/0%эсŽЏЌJœU6j–wиŒ>ЅuЃKtšlТЫx’Э7ј’ФэШџжл&~Ъћй '+‘Ц•žЈуPг&}ŒбЇ ›Dh”ЊеLzтT­z%†š?У3FŸ>ќdџјo1Л:Нƒ§ UIENDЎB`‚ktikz-0.12/app/icons/edit-undo.png000066400000000000000000000022701325124551100170610ustar00rootroot00000000000000‰PNG  IHDRФДl;IDATxкЕ“L”uЧПЯ§рю у‘•”њe™Еfйжв­eИe6&ІеVЙхІўQХ 'Љ,‘DшШ;v ПФЛƒћХуюŽУƒCЎгиxїy™‰-лњуѕ}ОЯчy^ћ>Яїљ2L›ХDќ5ЊEk‰o‰jТ5MБŸXMDђй™рЛˆ1BKФMKзщВЙы†ђp8t‘эxAћ*Л“р7%bP?І29(уЁьšћ‰уіaж(As3QжR(טa>~янˆ[УЛ19ў%&§i<ТќІч3zЖcэёh>)сћJˆ˜П‹qУє&,я Џ^…^]–Зњ7]iџHp№L_EO• К,цфхw‹;– аЛуІuИaоŒ€c}лЉ–v‡‰^Оі‘0Eш3ЌѕЇ0№o{—xьЪ"јЭТoйП•' ~[FM0PљњN<л!)КеrєŸ|žš•ямFl†z[Ѓ!WЬЫзџ%n[пеM№7Уgк_чИ›VСVЫщ œ—aИNŠ‘: †ЪDАЋёИој>F[R|-`P;‹1‚изšo[ МЉ№SсnM‚Е" =•Jњh(Bw” jГИрх< ЕR8ђЙЉОМG0Ђ_‡‘KЩ^н24ЋNО-nZWгZИлоƒчj2њ—Т~1 §киЊУљ —ˆ'Тˆѕ„ЯqAЬЏќ–ГpсЄЇvѕOэ Д тC‚xИ^‰žŠ8ы_СP[\&ТМзКцcрWŒg„љ%ф№$_>.B_ А–w{НŸ№ –ПvнV!уГZ>dЗjфp_”С­“УЅSРнOS †›Ѓ1мЂ€ЇA‡ˆЅФ­ю3м”-ƒU:‹–ж_+yQу,NlъЋЮУ;ї [Ru€UWbЎ:5 P}Sўz?Б#DFќa)MY3XnїQ•К'{Vž-Kyжzћэ|їEЗFФ ќ(Й4сві њ,DМUŸУСxR2@+оIь"іšrхэ…сГБ™m‡Х"ыwrYoЭУђањЯ,Ђ&“Ѕ\<ТЦ[O‰q%G~ВЩ$нHl7фHыѓ…Э;0“”#Љи’ћP˜НxЖдq)Zдq^ХNЅГ7ŠіА‚в}ЌLsDЌзe+ŽQf9eWRO‰пmЯыжч0^МіБ5[ЮYr•œљФ,NИ?;—sjUтc_poЄs› їŠ7œ;БМыtьЪ,Ђl"ѕ,kШ”Із—ZiП~Ѓ§Rн+ЮфЬ?4ЄfЊ˜Члyєsйу4—™ЮЦGv–>зUћ$eŸjV+ЋдŠУ…{˜њєзьyО‡oќWjŸbу…‰БrмTЏъ,™3Л§ћшЙ5йб/эП™Й“=ЧgD,pUϘ3hŸх 5 гљљr{х<хˆ^хЊU(ББЏR ?0НЭ‰œГ>N<~%6Ь{AЬЭ”с‡џŒ]sџ~~ј_ј–ЫO`“‚*IENDЎB`‚ktikz-0.12/app/icons/format-indent-less.png000066400000000000000000000012251325124551100207030ustar00rootroot00000000000000‰PNG  IHDRѓjœ DPLTEџџџUUU€П```iУ‡Б^МqО]П‘Ѓ{ИRRRrrrhПTTTqqqUUUpppUUUppprrr†ЏšqОО’ЇgН SSSTTTUUUcccpppqqqqrrrw{†š›ž ЄЏБЙОУ(!ХХ.ЧаH<ге@8ж и?&иA)л н<'р9'рррсe[т ттту3"у6$х[KхххцcTцiZцn^цццчqbчteчwkш щ щxjщщщыrэээюю‡|яяя№!№Ž…ђ•ѓѓѓє!і!їїїљљљќќќў!!Рvˆ)tRNS$$9=??GPVV……ЄЄЊЊЋЋББИИИЩЩртт№ѓѓі§§˜(ЈзIDATxкЧRТP@_P)в!!tib€ ˆ еB‘&ХщŠJјџН/яf‚+8‹{яœЭ™Й`?HV„”h†чљпйsЃСHДљLФМcFw ‡=ŽАЏЅмR>Х­хИН)i|w_yИЉs…ф)мќœц€ЅЛ№6њxЩJ­!pѓњ4шw3№vD‚і”Њ•њУcч'=\дћЏok­w.oi  pЅяЙљwl!3†Š?Ћ №ЕїjƒлЦbœіG'‰ JТц>єˆhUpX#šћђ@Е&gДNm’IENDЎB`‚ktikz-0.12/app/icons/format-indent-more.png000066400000000000000000000011741325124551100207020ustar00rootroot00000000000000‰PNG  IHDRѓjœ 5PLTEџџџ@@€@K<‡<\#2€2:‹6?M9Š59Œ6=!e',w,V6†4RRRrrr E8Œ6TTTrrrUUUpppTTTUUUppprrr^"01&n*M8‹6 E"h%/x-8‹6]?7MNV^" f&%n*+v--g015‡48‹69zO™ASSSTTTTT•7UUUZŽ ^›_’b•cccd—jЂkŸmЃ4pppqqqrrrsІwЅ%wІ#wЇ'x­ zЎ {БW}Ў!„Д†К ˆК“ОG•ОN—Сb™ТTœФ\ХY Ч^ЋЮlАбsГдzФр‘Щф˜зю­ррртттхххцццщщщэээѓѓѓљљљќќќЁД(tRNS$$9=??GPVV……ЄЄЊЊЋЋББИИИИЩЩртт№ѓѓі§§оQ0ЮIDATxк•азnТ@а%„PCOш5єN‚щНїІўџ№Ў…V&‰ѓ4š—бНрyŠ ІРuіL;QЧ=I’Y\Ыу˜<Фн­БЯзkж–-#›ЖхoŸŽ[4^ЏF.й Њ5Пˆ†ŽЁхb>Iп[`6EЛ„]ћЕzЇлЯ›шl(AXћЂаъЅmЬ$Еcѕ™j3њЭƒYѕ0ўЙЄSЪ7мAГќcѕ(ЙзЌЎ0ОˆйІ№Л,ЊCžrg+ИNпВIENDЎB`‚ktikz-0.12/app/icons/go-down.png000066400000000000000000000015151325124551100165440ustar00rootroot00000000000000‰PNG  IHDRФДl;IDATxкн‘[Lвa‡џmЈЅ–Љх)xЈiGгV*šЅiЫЄy@г$ХPKФ‰ЇL%%а‘L I­Hа–™ЖжlЌцЊ­жКh­›.кВuAэВ.jДRђЊg{ЖїлїюЙy‰џ ђО2 НчГ/­ћƒ§Ÿ…}їЬSrћєн7Іаsы™‰aЬ^x't’Ь “Љ§щбG=6б{†ѓТžqЭzбРmˆеwLєŠТcW“yсБ њКГWРS\5б}GмЂkЭ ЛEешЙв!TДыPyjј‡:У[ з­\ИDpџN-•‰c˜mŸ\"ЪХЂp$nгЮhœKZеpeУ)Є`кhhсt$]8нЋ›š„ƒ“xТјC­H/яНJ†ь:rњСnDQ‹ХbэŒЦ™}B<ўy0yJdжШБЏЂљѕнH-’о3 /)XьЪzMeЕ ЃЊЫV"ЏQVги"!8‚"ё%ІQаЌ1„/boЙ‘ћ№кЪ†§њ7ЧрьэФяpи˜E!Gф~M)“^ЃƒЇB_ƒ\С0˜ќadђ4HЋРю"ТГЄN ЎЮ›В`З–жHќ [Пиуф№<„в%ˆЮыB\q?ИƒHЎд"ЙJ‹ФŠ!Ф—^@,KF;v–Сж'zbI@ТŸiэniэОy2$M*G…д## CџќыШlGZэe$”Ћ•г‰%dЪGk0ob6X-_НЦб7ь ­JkŒн[2vлђХwРоФОњQИRaхД6˜ $;’uQйЦЇу*фOP) ю™IJя‚BЋ†…ƒпYbЎXић, йКŽг8]8Ђ˜BУљ—hTНB]п 0ъ‡Ааqх ЧU6„9ь<нь=?TЫBЌ{ ЩЅw8vю9\ќ#Пь}7џЩС/10цNŽОЧщё $q`БЬŸEЬ–NыdеНШЎUСв9PmщDЬ VЎ›l6ч}iыЛэ•л–ЅФ|тАžJ^фщ3л§яibУж№КЭ„IENDЎB`‚ktikz-0.12/app/icons/go-jump.png000066400000000000000000000007521325124551100165520ustar00rootroot00000000000000‰PNG  IHDRФДl;БIDATxкэд;KУP€сX/аEh+UЈŠSQ‡BzгZM0MSIЉ4’Њi4ещдХKUМ,nŽ%*VŠ?СAЛ‰((.nКъ Ч/р "xI\Ф/!$<Тљ‚!„~Ѕ?ч‹Eгвв†-•šщdЙ[E‡fјттІ>ПГX\^›LMЯ%Ц“ЪШhт86,E"Б$ЫВЦСЇЇ—-ЪnЁo!З*&Ївѓ’$oЧGЅ“/мq‘!ФВƒ€—>;ЛjUі Ž\nЭ.ЇгŽDbЂ7ѓпЋ0D§Н…aX™Чу'ЂцKpЉTЊќш%žќ?Њ0IбЈЧ8wЙНШщt5Ÿ Ž‹†~"ЉF?h>n№]Ћ8nh… …ŸпРЗšažчm\$Њќј>зm@hšЖ’$= №5сіщ>yйlжрrЙк~uЄІпІ;lБ˜6qМ ЉM]aŸЯ}h6›Ž7ъ g2“Е^Џ{ФjЕжОіџЃџ: ЫU@•P•z}Н7| У*‡ŒЊ‡šЁ6Ј" >( EЁ ф‡К vШ5AuPѕыЦe/эzю‹&Х’•IENDЎB`‚ktikz-0.12/app/icons/go-next.png000066400000000000000000000016361325124551100165570ustar00rootroot00000000000000‰PNG  IHDRФДl;eIDATxкнгLдuЧёы\–„ж\$ф<:psЁ #сD) ќAё‘с„ќtФOс:~‰П=љu@€ d7IЄKяяŽb5IнВЕЕЦњЏ­ўiЭgпкjЙYЋ`kыЕНійчѓЧуѓўуѓ§gV­4Кzсо’-8mи&‹щ \IXДћИЩFHZявƒ-EВшNёŠрОћЪИ~ї[&ОF­НŒєuУ5яhЃЧВсЪtЦœ_1<{Ÿ sїбšnтwФИфлўЗ‘g•'Х;ѓХ’'Фюђуb7џФUю[ЃщЗмЁћњ"]S‹tNнІy|žАœ‹МЮ'n`ѕ_ЂхНОХH‚Вq“'ГоOХ3›їђД,”vѓЇД^Y EhѓФЧЦц1\v Ў4уgВћФіП№ЇАwh6m—fа_Ав02KУЈ]Ј“њ_ziНАžqRwбNэ№,UяXбš,фЎтЏјNkŠ$ь&OЂЄнLqЧ$eнД§6*чЈrP3ь Zhер-tГT˜ЌhК>Єјм5ђ[о'п0AРБN„'й#‹щu}–ШЩ:3JžСLQЧ4šn+х}shПUипBг3Ciч r'QWŒp ЫˆДYи[HУЫё>tюŽї!ЃзяАG@ЏЄ4qИ`$н2єгd7 @‹•œf+™7HЋ›F]9‰ЊdŒШМ!ТвЛNlтЅшJ^Œд нsŠM‘ŸKЖўVФѓђбzіfѕsъ=дUSЄž§ˆ7ы­d4X…ѕ&oœБќz~фД™ЈТQ"2ћив.рѕТДš^{*Z7FTЛ<єУvФvТˆЊlŒН…ЌЖ9ђ;ч)ь^рdЛ“мV;™†Rы,$ъ>@U:NTбЛ(е6„ф-=З3ŸшQй~ cме'Wйk<Е)/k<ќl ІДч3 Я Д9„щm$зL“P}•­QЇq“ЇŒKгнEџ4’mЏЂМK™щ6ЦOШщp[1ŠgрБязo‹Ouлž$њW‘ьЇfєKДCї(ZdWr ыdaіu›їћŠ–ЅŠZѓ7dї9ёV§Щхљ З]ЅЁ/ §ФЛ є(JX+U~ёЄЇ"HДRё R_уЉЈ}bƒ|­шŸ€ТъЩФП€цIENDЎB`‚ktikz-0.12/app/icons/go-previous.png000066400000000000000000000015621325124551100174530ustar00rootroot00000000000000‰PNG  IHDRФДl;9IDATxкн”ILгAЦ"Ш‹B%­P–ˆE6уP -BUVˆT X–X–PZЖЂ”QКP‚ DЄ.,ІT@,‹Aу–шƒz№`тЭЈŸџ6FЂAТ‰—|™™Ьф7oц}3ЄЕ;є˜Тў1ерМlu€ёr O†”œЎј*PN"6OŽCЗЧЫ]ЈБ’ћь-юпC?џ ”ƒ…+г;"}’n|МмЊ‡nrсЗШћв№Ÿ@ЕЅЬв|oбЮB3ђšб7шўЅо1иpЪвyošхfzІ…KиEBљЫCYž4–rŠ]v­кiДп~ љР<ƒЯ |n–ѕi‘pђa$ƒМ?;ђХW ,]$–2бїЄъsЎh 4uMЂYѓ-=3ѕЮЁЕяЉIцОT;KЬЭkъUc\‚чЁ\ќmЃ ;ф7B2р{QжЌCEы0ЊлѕЉ&Pп9…ЦЎiˆoЭ I3knКŒЈU?†@n0Џх‰р‚ХЊЧЕQ<™з^Ъ ЃDŽЌЪ›рˆњP$жЁДeќ6Њ“t!ьœˆЉ­!ЦќыуИP \5‚Epм“ДІ2Z(бтt–iЕ`œ—сO3•НШЉН Žx…ŠЄурJ'/Gn“Ї…#`ѓu`i™­Р~vМуўМ їc56”ˆŠfї#Х?|c+šм„ˆsэ8^ Ћь’Ћ ‡ШЌ7 Ћё‘YgыЦ.AвeЂ9]KЙ ЛбKлpkxA”k8чƒ\5Žц(СМд‹“хїLPFЛy ЅFBгШ#њІ RЋ‡ЭYH“€ьЧќЗПЩA™›3њНЂx`p{R5dЪ”=їкŠлчБЮ‰ kg/Ќп›mСАѕ8 J`<міЦѕ/ыeТјЄ~ь3Ўєд/1y*d‹ЧQ ›AЉт9Ъ;_aѓЎ•=iGЏš-r*”ХGЁl|ѕ+дtПƒ5yїЪ?!;ъ+[їа jPт7Ю=ъњ`этвj…=Фо#єэqž юС V3Ќ]эЗјG vn#­Љј Ѓ‚и<н/ЦIENDЎB`‚ktikz-0.12/app/icons/go-up.png000066400000000000000000000016411325124551100162210ustar00rootroot00000000000000‰PNG  IHDRФДl;bKGDџџџ НЇ“ pHYs „ „ЊтcytIMEз   >’.IDATxкН’KhWЦПѓ˜gю#Й6ЦфЦЄЙЙЦZkъ#иjЋ!bP№иŠКsUw*ˆЅ`ХЎtЅˆnд(” ZКqбв. .Є•ЖYЈ`T|{ѓИwfЮœгџŒ(ˆ<(§fО9sЮ~ѓ§џ3˜ЎЖўОuѓСKELSгPЧЦcюФјфе0R?wя8—љЯРZE_їєЬ]вЛx^ƒ9‰iH` ЕЎ9ИОЛдrjћ–X[KwяW–šљ›†ŸќqљЦЌ7Џм[p,v~Ы†eЌZCтСеEd\~zСЮ‹хYƒMXЛЄЃQЉTSGAk—В€ўvСЎ!{ЦрТћЛї”Лл>-ЖвЄc•qŒUЧQЅ1чj,,Š>еŽЭЈЧљw?щЪdќ+§§+c€8жP‰•FЉдљроШУUnчРЕЪ№OџL™8ЗpЋ`апєѕѕцŒa#P™чŽШAВF~Џœg&=_8в6%иuИЋдљq6пH Š%%ЧБf4чщœBCH хŽЦцИ^j_ї-ИЁ4И"“Щ|йY*)HУ$Р,$–аєŒг†L6 зТ€Њ=ўќ•`ЗГп70Cs‹%kВSЙ€в‚@6AŸк•–Ј Ѓc #Цqчю(„эУhuДmЭžё$9еœцТЋЉх0­†PtDF#в€эpHС ФБ$ИN_bй<ŸіЊvVJЯёŽОЮ•КоŠ'&qћЯпС`ЇоёйQИž KЪ„KхS5ФgIТЭAzM(ДЯGЫтв_/%Ољн‰}nGџ~&,0сDCЋZшyЎh№}и6­3–ўjBpЗVЎш ЫЙхabвТ№oЗт—Р‰ъw~е/~ЬѕpОO%ЛN Т&MIтGз/Цx…$о$a)лFС9ч@Bˆьf6&9AзШ8{О&м<РЌйпAEЈзƒД œ\„д?п„кD€Yл{§xсдWл ˜АСЅNЃ—ЫуэеЫЏў§Ыu…зˆa љЅA™BAЅЇїЩ(еуkgёПы_wJH№ГIENDЎB`‚ktikz-0.12/app/icons/help-contents.png000066400000000000000000000020361325124551100177540ustar00rootroot00000000000000‰PNG  IHDRФДl;sBIT|dˆ pHYsaaС0UњtEXtSoftwarewww.inkscape.org›ю<›IDATxк…•KˆU†џsъе3=н г“Œh2A Ipа˜(† ŠYИеdхТ КмуVФЕn"ШBФ"*б€Ђ 1:>0NПœюЁ_uЧ[ЗЊЇ0Nс…гнлХwўњы4Šц‹ˆЮ9iК2ч_мМЇVoАБжcБжiЖl.тЎДЩ­жі‡ыяН~sЮ QBпккКЖББ0 /4,… 3@ Ў€ЕзЎPь/~pcxтТЛ+?ОѓœЩСхzzss­V J)<јЬЫвz|o2Р43˜ср(ЌsZЬpц0Sіъзй“uМџѕУ‰`!bЄ uZ1Ч6‹b:zЧ>т_№FёгŽ‹+`™`Њ ЅcfFYT€KчєWc Qhaм6№7ЙЊŠТ[ "HЦкџШнљѓ,oФkCИ‡ƒHоє­–џп1‚жкќ!Нkƒ‡я­сЩE\Й1Цї*XXЗNp И€њŒС1icAeЦxh=ЦJБж$|ѓЛg‘P +С2(ŒЁЁЬљвЧ}‚ сR"mCJЩ3H$ˆяЛcм[›ђЋїоЕG™у*бСЌ† ŽЫQyRўШ}ч@шДd*vЏёŸССС1вЖx1+žY)ЩО6›Ѕьp™ \› ф_"p;№ї­xЬГ40Z/Tф‡ИЃ(‰+КH=ИhаўЫЕ{ŒŒ4Щщгл;Л№§!ne7"&яš[%ЊКЊ'ЊЮѓ†РOsB?tћoSPЌЗриэKљ7щШИФэFЁУœЉS[VYR>В4Н:Л{АХЏЎЊдpІ ТšД67Avуkuœ‚уŽ‹uiQ&NЇkАoјжќњƒК^уt мГ™_fnnN›ю~й ]',ќJpьn9.'зтFj-И‚ЇъКїѓНеёBїЭ</Ч(-Ј&К[бидnTVUц†ЧЛус s!GeяfГйQtЬD1‘р Аэ1ь1,hxl­gLI_К* LLL ЗW&+..ЎІр^Љъвињg ЏЏ]LяЉЫVfŽjpddфfвЇБсV+3{Н6ріjєŸбAНюŸЗЭєf[TVVц…††ЭзбДНpє ЈГMŠ’Šшт‚fЧFIЙвІњqвQoo“Щќ%,,4Џр›wО@ЁІ>ЇіуГpъtъ ЧЩ ŽŒI‡cЊпN@œпIШхr|х•BРЩ8ќs:††† ‹І!*ѓѕєГ.ЅEіЋ]^Џы юaЈ|iHOт" ЙW“[ЫA~ ТOЌCoЇЯЅј§i†‡‡Щpj—˜˜˜ш~pа“_1 Е1-]Љъ йƒЉ,:$ѕuЈ’ љy žђBpaЫsBIT|dˆ pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю< IDATxœэyxХ™џ?еsыО,ЫЖ[ЖlЫЗуƒгии˜ЫL’х$YHВ 9Y’АN „\dCВ›d—#йРВNл膈Рƒял’mIЖeнЗFsuзяžuЯєH#Y&йпцћ<ѓLOuuuMпzы­ЗоЊRJўŽГ!€+юуB@П”ВџЏW;тя0:HBЖ;њё˜>n 4ЇЅ”сПF} 8џš7џпŠ(йNt2Э„{т>ю›oОyк’%KцOž<ЙВЌЌЌМЋЋЋoсТ…ї h;“Кј|ОћчЬ™sљЌYГJ O;vьЅgžyцЧRЪ`Jџхя`p˜Ш6ZДйnРsгM7U,YВф#SІLЉ,---/..ž (Š' ‡‘Rтёxњ333џ8Gз#Њ[vvі•ЊЊО‡ХЄI“‡Уܘ1ƒЩ“'wtttќЧу?ў])Ѕ6шџћЛ `ВуеИчЦoЌXВdЩМŠŠŠeeeйоP(D$Aг4ьžmVV—\rЩšЊЊЊwЃ@ƒ”22мКИ€эРl€žž„ƒzУ/--eюмЙяюкЕыЊњњњіdхќŸэтШ6ž@іѕз_?хЂ‹.š?uъдFЫv8Вћњњ’нУ‚p8Ьe—]VQUUЕ#ZО Н;.ОE”|€ЌЌЌ`zzК;‹ЬЬL>LCCУyгЇOп9mкДe‡>nWШџ А!;ЉvнuзM^КtщќŠŠŠ™йNЇгg­Њ*}}} фк‘m—ЎЊ*ГgЯžxш>†5(((˜|Рыѕ^—Ы…ЫхТяїsх•WђъЋЏВoпОRЇгљœт)Ѕ?ОЌџ/@OЖmŸ§‰O|bђвЅKчO:uFYYйd3йсpMг№ћ§F™цђвь~лг4Щ“'—0 ЎсќЗ‚‚xpчффаее…ЯчsК\ХH)йЖm›ЬЭЭННН„УсyРзяЧ—їП^„’[уБОzѕъ‰Ы—/_`"ЛихrХШNЅeлœjš9НЌЌl&Bик vјв—ОєruuѕyяОћ.С`—ЫехѓљВѓЊЊ‡ёћ§ТяїGчЬ™3йПџ'А€џUF`”ь! ДkЎЙІlљђх ІM›f&;- ЦШ–R&%w0вЯT222XО|љšЊЊЊ-Р1R4zшЁЏ”––ў ЁЁЧ{,мннэR%–'аллKggчq)хЄhВž”R~*ОЬПY *йW_}uщŠ+N›6­ВДДtrIII‰лэN D""‘ННН ЄкЉёб‚dщ‘H„•+WNŽ!јт‹/fў[aa!љљљЬŸ?Ÿ… Кž|ђI6mк3FЃ­ПGJ9бtљ рkvхўM€‰ьСЌqїЊUЋJWЌXБ`њєщ3ЫЪЪЪЃdЇBЁЊЊвллk”ћŒьT‰Љбg—ІЊ*sцЬ–!ИcЧŽЧцЮы2l“ŒŒ &L˜@qq1K—.хс‡цаЁC‚С Ш4]~‹”ВеЎм]тШŽЗЦcЄ_qХ%—\rЩ‚ЪЪЪ™FЫіx<щ§§§1В{zzЬхк~';Ik-@JЩ”)SR6 Ццхх]ъёx˜9s&nЗ‡УA$СчѓБxёbJJJxъЉЇјяџўяz дtљЃRЪз“•}Vm€$d'ИL/ЛьВт•+WZШіzН~Пcјeд3бЉ’<*џLКгyffцэРa –A<‚Я:ŽOܘ1ƒТТBVЏ^-KKKEvv6iii(ŠB0ЄНН№›пќ†элЗ43Є”]Iы1Z „PHДЦњьK.ЙdТe—]Ж ВВrFYYYEqqqБзыЭьяя' ЦњВ‘§З&ƒЅћ|>–-[іЏoП§іЛ b\ Ь~№VЌXЁ­\ЙR1„@г4"‘Ш’VТ„Є­hmЊЄ№,YВdмЊUЋTVVЮ*++›\ZZZOvGGЖўУњ*m$ЧЉќN5}Ъ”)Ѕ$1 VŸ›1c~ПП7gФ—йннЭЏ~ѕЋ“›7o.НуŽ;(**таЁCыяОћюlo_—d6€" ;aТ„влoП}йЬ™3gj<###ЛЏЏўўў˜ceШ BжйP§Ж 'Э@$ёgeeSУЕD С‚‚‚4`oeeeyYY[ЗnEJ)‡Ѕ0Mг8}њtƒпярёxИцškܘ1cіНїо;ш4pЌ~ƒ@P~юЙчžїЮ;яќЂББ1eВmЪJњ§aДњЁHM•ш3QџvщnЗ›%K–мНeЫ–­˜ С‚‚‚ЧŒѓѕE‹qтФ "‘H_SSSzќѕнннZSSS0К…^`–”ВЮЖ6P9ч[Зnэъщщщ )‘ЏtŸBщИ2вЯљC•=”рХ“=иЕCн3•tMгИєвK+0u‹…_™3gB:::ќ фЋЊJkkk=фм=ђapˆ /ъъъN›§ЭƒСбY‹в|јpZќpЕЫp‰KEвЄ†vЃєœТбQPƒЖyЅ”Ь;wQpЙ\iРc ,pфччГcЧ‚С зN{ДЕЕ5ЋЊ:б”ДјЕ-)ƒ`0VУшС‹šššzѓtу`аМЙ-‚аєXЧ‘’?мЯ`х 7mЈжn@@C vЁtŸРбQЃ§ŽЎcЕвђyS.Ÿ­а–ЉсЬЬЬЛЪЪЪfM™2…††&MšдЋЊjG@€ЎЎ.Џ))|nЈ№/; 6 E ьоНћјE] 7 в—‹p(ˆ@'dŒR'ДZЊч†s-‚юA{@ ‚”‡ щЮ@ІA:} л–cBtjиуѓљІyНоЏЯ›7€†††@{{{†цmll<”›’ю—RВНСHIЌ_ПО&==ЁВGZBJN 5RFЛkHѕм j^ ЃкQКŽЃДб[wЯ аTdЦ8dў4dСtДмЩQ„pЅ ЊС’!###§œsЮчѓљжœsЮ9ЎТТB>јрЄ”N;ђ;:::ТсА™ќнРIo0’j)Ѕ*„ЁmлЖ5…BЁ^tПР N/єwŒˆ”Гё=TšЂ… иѕ dдаuИС“…Ь,жуHŒ'u0’‡Ъ“‘‘qЭДiгfLŸ>“'O2}њєО-[Ж$Д8Mгhkk3лTtе?’˜B`hO`L дееЮЪЪЊаДфнŒAІцЩФъFctШMе/"]‡{ASB n№d#ГJ‘WjнЭяTЯ™Q__OmmэЂ+ЏМUUЉЎЎЗДДЄлЕўSЇN™ƒ<~&Ѕмžв’ eЈЉЉЉ?чœs*’й–•–ь8†‚†Фa9ЖШЗ#\‰є#Bн(?H!ЄУ‹єd"г&‚pЄDі`BьЄŠ;яМ“Х‹;ЦЯЦЩЬЬЄ­-q­HoooO ˜hJЊюі у0ди.&Лwя>юёxl3Х&}Й(ј;’’8щУ#DЈG_#ŽŽj\5ИКjP‚рJGЭž„–7 5З™] о\ љIэ€$Чёџ}Ј~>YўЇŸ~šжжVцЬ™УёуЧ™={v ЖЖ6aИ%ЅЄБББ0n"[GcmсPР зЏ__ѓЭo~“ююю„?dў -4‰ьDf&ф;ЃD„zPB=ˆА_OсЮ@sg"3ЦЁХ7H]KKј_ƒЄйaА|ЭЭЭ<јрƒ\zщЅ„B!іяпЏ>}кыp8ђ666жЦ…x=,Ѕ|3ЅJ AРdЗmлж‰Dњ€у$AИвŠбп$ЕoK>"иƒ#д‹ˆє#”сЭDѓцък(лvЧƒЅ$РнwпЭмЙs)--хеW_eтФ‰ВЙЙ9!_ шяээ-1%О‘вMR@*ёfCА!333fк‘fkю DА+хV.ЄŠьA uC$ˆЂPHwЊ/сNO4ш†A№H„`АДсœЧКuы8uъЋWЏц№сУ,^̘'žx"ЁщK)ihhh&˜’џIJйŸwЄ–дддœXМxqE0˜шк4ОcщiЙШЮZнјRœ–ѓB ы*<д#ъ1ФсBzВPг‹._l_юhДіЁК€јsvi7аееХќc.ЙфњњњиО};---ЖзЖЖЖžPUемњџ(Ѕ|)ЅЇˆTќaЂЖ€aFLьи—‡"(}-8њ[qwЧе~WћaœН'Ajh™Х„ѓІЩŸŽš;-­сђYЪ љfCk8і†ЙўЩNХрГ5 #ћЙїо{ЉЌЌdђфЩlнК•‹.КШvQH( wvvŽ5%Е_єЦ#@Њ6lЈNKг'ŸьZ‘Ђqј›qvжр Дс№7уш8 B!’YJ$КўЩ.GІ‚У}цFс CВn`џбО§ы˜їЩћiэь”xЫ=Т~шmDДW#Z Z@Я)Њоz‹ъъjЮ;ян‹˜3 'B§§мџР?Бlй2КККxяНї№ћ§ЖBеооо‰DЬЊџU)х“ GЉ…Z<‚йййS ЕЅyѓО| ‘4сI‡ўNЪќЩЗSїжЎпЦэЌЕ}RJш`„{К•‚tЅщ^ФєБ 8Ъ4№Уў)SІ0}њtž~њinОљf~ўѓŸ'ф ‡УZ[[[–)ЉјЂmЅFЉMђ›ршбЃ'œЮЃЮ€эБ/E ъѓуIZћh‘?œытяcРыq“]ѕьO&фOEЬ@TBvxsgRћ`ЧŽьиБƒѓЯ?Ÿ-[Ж0wю\~іГŸйоІЁЁЁ }zиРЗЄ”'’WьЬ0 3/КшЂ‹#}ўсp} ѕQUi!\§Н\:DЈGHq$…#*›о?LЬU;‡%mЩМЩфdZm‘ €ІIњ!ВвЃЯXS‘С.DА›ЙљAЎ>goэk ЋЯъђ9eˆьRт1”A …Иїо{Йр‚ hmmх­ЗЗpач“WQJ ! EAЎ”-9-мЖzа›шxGndи6ТАЛ€з^{­њпјFlСхк;јнЫл’^ИіЖi,лОмXšёаќС0Ÿўю†МљПљ* *KЯHK Eјт§ПчƒƒuЌПџjЦцЄpр№х г ™wо$ž?ok7lуSпљэ uŠxуќC=Ф„ ˜8q"Я?џгІMуљ—ж ыяŒфЂ” j№Y A‡CŸLY0͘™хEЩoрє@ гђаŒcЏлХeчVЈу8!XPYJa^Іх:ѓБюGє6!кŽ šїAг^шЊ)!ЛЅhbьlўgg'Zдxн№ю~Žд'К^ ЇM,Š?‘є?к …ІiЌYГ†sЯ=—ЖЖ6о|ѓM:„2<ЙO­Р†‘\8œЅa†ЈЉЉЉ?яМѓ&‡УaЎЙh6з\4›њІN>і­пвиfѕR:Мˆ_пAQ,Фљ<.ж~џBa•Й7џˆ&гЕчЭžФяю§4ЦфФђ(j]КPEƒ7—М9;)ц[0 ˜Žп?PgЉлЮCѕБ–O`Q~ЖхЗџЩ4”’‡~˜мм\ йАa?ў8џјЧС31БAFТTЉЂтЈУсjD8лP §Ж Ю|FndDNW‚@pЯž=ЕK—.%ќ,+ЪeХТ žм`Opx3AєЁ„{‘žЌX~у[Pс№@PKv†ЧО}3Хй.ш>ЅПЄ„;щЭALБуЫ4OаŽCѕ–пЇZУж Œ+ШNHKV.`ёцеззѓмsЯqх•WВwя^Š‹‹ЙікkБ ђЃžЄeїz|>nЗ›Я}юsЁŸ§ьgї2А`cleє‚лА˜WЬˆ}Љк`ъ6nмXэѕzівLIМ7–1#ПяЄН{`Ћ>Нq йзЌїЭcІAбlDбdоdDzСАЩhˆn`nEБm>!…yYЖщёљЅ” ЎмЛяО›… вооNUUšІХШІМNЂeЯkИнn<хххќр?p/XА ѕ‚цF:•DђЩэlIЈlŠŽы‚oП§іiUU§`}(й‰!ƒŠ7„~}Ј((ЁnDgJЫ~Dг^жОјF,љ„ЎџФ50v6"Џ|ЙБЩ$у~ƒ}Ч›ыИd~Х@НС9ГЫmѓфgЇ'œ3УŽx)%O=ѕBrrrиО};ЏНі›6m2чŠЙњHвввp8ќќч?Чэvsљх—W0АгЌђЏ'gф!LYЂ6D’Х"B6ŽSэ‡pЂqŽ–§(­‡ а­ЧЬ™I›o2Џэ:ЫчM+p:)œ*љЎИ`Vьxіф у3ў:ЇУўб$#^JIss3=ігЇOчаЁCdeeqс…Zыc:юo:JFFnЗ›O}ъS\pСH)™7oо$ьўѕ Š˜PSSsТщPУH‰+в›x-„Ш)…Д|ДТYШТ™Шь№d!…g7я$бЙтБЙмxйЂиЕУqњФл§ОёВХхыЊ}ѕХѓ“цp9ЭЃdФXГf sцЬЁГГ“-[ЖPQ1…ФŸќщ'--ЂЂ"юЙч@=TTTЋ†%љˆЗЭBї ˜ёмўШс„Š#€Рž={Ž›7%@€BткAGf!dŽгQ„ћђGБvУБуЏr.Ї} fВДcЇZlgъьH-ШЩрбя|†ySKј—O]jлЇiq q-ˆ Bo3Вѕ/=ёkкккHOOgзЎ]<ѕдSќёOл]ћЮtk8~єЃ‘‘‘Іј}ЃWŽzы‡3€7жxНfЊ dиИ7…аc…HX+pАЖ‰не'(ЪЯтгЋЮВЕЧСp„ћ~™Й7мЯуЏlЕм3™az7№ўжюK p5_чˆЗиеZwZѓAdу§гqMSщ”YќьБgЉЈЈршбЃhšЦuз]gћN]#(‘>|7W]u+WЎДфЩЮЮЮœ?ўЂh }чгјUрЖ7†+1CАЊЊЊ!‰є›Iqиє›‡ачЄ~}гj#џк яЧђ}љ†‹ёК]–ѓцcsZKg/snј?јэЋУzќ„ќfФЇйег’'д‡#`н`[ыnЁ r'СийњЇ`"Гˆя§№***шююfлЖm\yх•ЖC>)%-бИ?Зц'''‡ћюЛЯr^J‰Іi\qХS1ДРЌыЂЬи,З?в˜p“abX`ђ†€`]]нi3A ­}RХtyЭЊ4)yzЃю3ШЯNчs=?VŽљл.­НЋк†иy—#љ4ь ]ƒ”ьЎ“h{QOэDkи…кu‡г:3Јф–"2Цъ‹HLxѓЭ7йЗo>Ÿ}ћіёрƒђ№У'дˆюPЊ{љ=ВŸ5kж———`KhšЦќљѓ'b€гkЇNžАНЩ01’MЂb‹F=zЂЈЈЈм˜ДеQяŸ№х"ћšQЂcѓЖC4Еыћќнqн2‹JNеш3o7Ф—€д д‹жпьяŠ-žL„/%k›iЇтsBqша!жЎ]ЫФI“иt2™›Чуoеƒo6vX\ЉС“'OfеЊU”——лцГУЁЦўФйЕQВў ŒT,†рВeЫ–ЊЊjkZAA<ђІпx§…хєFі рД\”‚ pymЛ€g7~РПќ.[їВ‚ю˜O[ђВ“uvћ hšЦ]wнEII ЇOЃDвQЩwNQТНtєД›‰ЫхтЖлL†_ЈO2ug н™ зЊЊЦ;ћOцФ%•лйšљ 0LАiгІЗлuŸкŒњšсєnфЩxьЅ­tњuэuЧЇЎЦQКЅd!Ђh&Jі„Єф !јъOŸц‹?z2%ђ<.]ЖЧфfВhцD<юDY7‹k2A0убGЅЃЃƒоо^Ž;ЦЗ>>Џкc›WQ\8!Ш7оHGGїѓ­‡ qВq7ВЇЉИ‘Ю4лыпй}”ціžј)ШЇћЯ#СH5€a†оxу Уєй €Ч‡;™Tје/Аbn1•“ѕuЉZњУ…зЃk€ieEl{| {kN1чњяZђкЩЖ ˆ“ццf~љЫ_2~ќxЊЋЋYКt)|ќ1в|хжЌH• }”фЯ$pѕЅK™1{ЎЃЄіШџДyGbbАѓO)]< ŒHL†`жзз7Ž;v’­'0-.ў§ЩЭ4Жщ­хі•S&ој§щЋЮумй“@[ЛИџбWbyўс’…\МpšЅI_4ЊЅЌY“ЧsоœrонsЬRЖ=љ-nЧЕџјџ //ЦЦFmmm(ŠBHБЖ`D}лўх ддд№о{яёТ /@’Э5ь jЯџe—5Q‹ьуРџдІ\HŠ8“7†XV 7ЮVœN…cЇZљЩуЏ0m|—TX€vl`й‚Љ:ЩРc X2 _јјEC–QZ”'чЬфыпжkkЇРЇвввТП№yžyVoŒAХкњ3;vгззШc=ЦЂE‹ИџўћIЖГJќН МЙЃš–ŽИЎ%аБŽaОb.ŒдгH`пО}Ч].—mEKG/ЗўрI!Ня_ЕИД02Ђ/МЮ|ОxЃЮnZз уЧлцЁё-еє5#иOт``IDAT;­ёƒОД4Nœ8СєщгYцU…“А20#šЅЕб[Зƒєєt"‘“&MbбЂEиa0€њз8НыMўЦ І6oо\уrЙbN3Vпѕ_l?8№0зя<…ЫФP*}ПХ!4ШЙ„МІlЬ6PЄŠж}­щъ‰PO|€l>„Œ„i–Мб­я=O,ШЃЯ™o*+BпСЌYГ† /МТТBОљЭoZЪŒtUу…7w[в<2p„ЎК^єЉсФБірL fnоМљT8и {§ж%VъZиUп§э#j§@,Жп.o2ђЕPА\'{NƒдPђ&Ё/аНˆуц В‹ѕ§M…BќУ?ќ'N ,гыrgїЄlB!ѕѕѕЬž=›яџћ›kEКo|p˜і.ы{ˆЯЉШkРњb‰QУˆ ~БH}}§i;GžzЏi‰ГѕыїЖžї@Ъ`/ZG‘“; зНGИю=ДжcБ‘AьКœRDжјВЅ”БзЯШЩЩaУ†lа‘AРЁ‡—Ѕk]фгЦэЗпЮў§ћikkcљђх)oж ЯnВЊџtЏ›[Ў:G"6Z8 жUУ'‡e!РЧ—Я‹Щ <Г­‰Pя@ˆіpZП"бIгзFјФv"uяЉ{­ЃЉИqЭФYКgщbуfсЫДК`%ё•­Цяп§юw–є‚1cpšтж/pт:::xѕеW)--хЛп§юФлuЁАЪKU{,љЎZ2‡ЙГ*'`%|Ц5иЗoп1‡У‘р Кџ‹х_oЙм’жжdУюглВ’Bы—впкRCЄё€5ЫƒkТ\\ЯХYvЪи(YESP‡”2A$›№yы­Зxу7,чš‚o"ТMЗSŸШœтмy•,ZДˆŽŽ>ё‰O——gћ_†В6m;HWЏuыП.]@YY™>5ќ7(F˜xа0эь€/[” ІŸzїtТbˆЎЉh}­ЈЭGˆдm#RЛ•H§ћШоDZtUљOxГŽФчџ Œ@{Сяїsз]w/цjЖzЪ‘BAA#ЃЗš•+WRTTФœ9sXН:q%wЊ]СŸ^пiљ=&7“‹N#'''kжЌYљ ФŽš!xІo­оДiгЉp8PХвЁJ`ќ˜l–~Є‚7>8K_ПЇ…жЦ &хAšПMд„т@IЫEЩƒRXFЄN”Иѕ‡ŠНсŸцb№уџX7єМ‰ЎG=.Нѕ;къыф…^ ЈЈˆŸўєЇIя=Є”Ba^y{Џ%§cЯУщPPU•UЋVMнЗoпДР№пнcƒ3€8` ООўДCQ&йх§фe‹-V%kџМО.Œ#=%kЪиJKSKjнЧ•mз}Ф;v0cNХЫХй~„šњšЙTlј.`АEцяx<ілЧшяя7_`ЛІ ЖЎ–+І{q;Ќe§iѓ№FОтеЩи\VЈMгRЂЊъY1G[‚ЁP8d—СLьM—[Е€”вV $ѓ$hRlѕjмЬфў§БуqуЦс0љњуK[Йђ2fWVрiЕvWš&љўcЏЦўG<ѓvіјйќО5ТљcЯГН^г4rrrВЇM›–‡Щ nЋ nЛA,ИmШ7Кйaє l/fмpщТ„•7Пђn‚1˜*ьŒ@-и‹ь<кА+6IЄvŸŽЛRЯыvЛёћ§ †ЗпЎтwосІЫЯ‰m[gр…ЗіАћШЩ„k†ъ ^~{ЁАеd2 €бњЭZр‚ .0ќ†!ј`-`яКЃ"q†`Фц0@TQA6+OЗ”бкйЫѓoФХС%AМњ{PлŽЃžмAЄv+jн{hэЕ 8QЦLЧYvŽ>I”ЗФ.ZŒБGжnхЦoф№сУмџНяђљk­лОH)Й?ЊЬiv0ЇЧЋџ‰уѓ™?­ФвъUUEгĘ!8yђф"ЌБЦк0€0СЖq- `T Dœ:йTЏ1ј№ѓUIЏг!‘§(}жeён­—eм,œЯХQvŽЂ™ˆЌqр,ORPPt-П‡фПјiiiмЖњТ„‰Ѕu[іѓA4ђ)ђлЛћјЫі#–ѓЋ—Юа`Qву Сттт1€!а мЇE} Кє !„2”0ŒЖIq’тЃKч’ЗKЧ[;ŽpИЎIџ!5ДОЖшŒр{„Žm!t|+Zw#nŸU=(YE шЄ$# ЛЧ:‰Є(‚PШОЧrЦэ4aм8VЌXш[Эм7œИџбWS6_ЊкKDЕЦ5||сX} EЈЯЂў M3fЬєWЦћ№хe“PУ*QтMHєYp@$tvZ Эыцк8oР§ўiТЧЖЎл†жлŠHЫУUКwљљИ'‡ГЈO–5^ЏЏпўe–ё!пџѕŸПБœOOOO єжзаа`IћъWПbљ§Ѕы—%\Зљ§Clй“ИpХBОд Пƒџй№Ў%OyQ6sІO‚БГа^TU%‰‰D‡УЈЊJ(Ђ   GЁk€13ІaLш…ћ#$’?$Ю†АЕфbB †‘=MЈЇїsуќDУѕЩЊ:ДтХzpЧиi( •ј§ќС!эNКЛЛ_”oML2p‡УФ5NВГ­Ьщ‹И$ЮŽЌЖ€ІЂѕЖ@k5ђдvфЩ Лh>}ŠЊ}VЃqѕђ…DмйУ‚С ЁPˆp8€P(D?љљљYB]xВ*cЛ“YаR2D50‚IMyЕa/‘“Ла‚Н(9XБъcZ—ПЕuѕё?ЏлЌŠ1СэŠ€@hШaрŸŸŽЫ.YbIГы5MЃОО^aД q‡RrЧuЫЎ{зQ^_ї"Z§6Д†нњ$PF!bТGХ aќ|^мг…gШ^}сŒX‹7 !04@nnnFTМИ|гB‹с‘цЯ`фУшj€pB`:vN˜ƒГlŽшєЏЂ>iымŒŸе3wvЮ)% 'kpЙЌЄК]жПЏЊЊN>@мA–ak$„ж}šхЅ*•їўў‹Ч%‹ц#ђ&7БО<>ђgrqгЫ ‡УТ !0зФ‰s/ЯРжЇ­‡Œчž2љp6@$зvА TэЌцрёј1ћ€0$tСЛ€Н{їrўтyhkМн’EуШH(+ L ХiйtЕnЋўiмЏПћ0o"ЗпtEТ§о?PЧk[ъзEЧяЁPˆP(ФЩІvЖю=nЩѕ3cdФЋЊнTJZFсp˜YГfЂИвqz‡A']гo)ЕTШ‡C QЪIујШ”Ф—3<ќ\•Mnљq{ŸjюLШcЖА_}љЯLЋ(!ВЦл/ž•Сw>?Žл?су‚й ЇO]јBKоOŽВsq”‹2ažОћЉ;.]@ANЂ-sџcЏЦњюP(#ѕ…7ї$ЌkXuAЅ…|ЃХТcF"ЪЫЫѓEсŒ™ХX›F'_“R&ЎkgA(иоeѕАйЉє›.OR§сеw „ьЗРЯЭJ#3m є№Н}Ч-ZрлП~Ÿ=Й€`0ˆЯ- ;c;ƒˆћ№9{™VццІNbўL]нn7‹/Ии’їdЛ§‹КНnЗ^sABњюъSМјжž„>§ЯoYуўІ0y|^Œ|s‹7Ђ“ŒпŠЂЧNš4)Sf•˜‡P)ЅšjЋ7ctр#ЗКЪdsво$?fAИaеœqFVGЗŸЕыэпE$ЅЄДh є:Ž№Ы?ОNGŸЏџьYј§zžнЄяAјт /pЩвyD‚]9iеЛNhH-ŒЫ›Ч—У§w­т_Пr5пњцП kpЂЉ#vo34Mу–ЋЯIŒ6x|с№љ'›:иqињА fOŒЉ{Ѓ|ѓј_гДикGEQRвKЦвђч˜Šё–1gƒXp›ј)К—*†§n=+MgrqrWѕиќVЮЫК]Vп?џј)ќС0w\wqТ5eуђйl`Ќўэ_џ™я=ђrl>соеS еTБыНM,šqСО.žАvяOчЦ…й8=9И<9єuJЦMΘUз~’џМхKоэ‡ъљlt3K FšЊЊфЄ{Иvщlžоd5юе5ёќ›ЛЙњ‚H)yёэ} сlП_їп?ТМŠёŒЭЭ  'ЗS!Šа … †"У*ЁˆFЭЉ6oЊ0œ^:l‚R„жААрЖ р~р ё- Q|dz)Ÿџи>ћQ]]ЦЯє§ёOsѓЯоАНіЦЫѓфnЕЬћџѓŸр?Ÿ{Ы6џЕKf№єџФёКzжНє8~G:~ї4лjејЬёan:пЩФlІр \учѓѓЇ6sєdтиЭ(упО|-Г'KшЃoфвЏќgТ5хуѓxѕС[q(‚џыуь9šhмž1Є<-w<:~шŒ‰.`њNжIЩ§u-цНуqЭEsЩђй+Є?џe'jзiB'w8ђ‡џТгьЇУ3|~ў›Aq№ь3Oб!3јз?Г%`ƒ‹^†ОЉ|ђгЗrЧOўhK>шж§c/МsвƒСиаmЪ„<ЮŸ=1сšc эМЕы('š:ЯљШШHcGл1Мй||q!–Z7ЮмМKёN[ЦUЛŽ™х‰љПћ…Ћ?&UUщj9ŠT‡ŸWЅ“лПєе”ъЉiZLтЧэџxхлkЊvЇjїqлsЃ•†ˆ† pИЯ’ ЄюЯ!вŸџљ›Ў]Q8FзФёVWЌ ѕЃѕ6ЃѕД КИiь?‘Efv.Y™™dee’™ц%/;ї8“л5:П№ЭМœOп3АужеrЧѕКНАaУ–_AWPхж‹нЈс~ДH?šFХщЅ­KЃ/RШЪш$Чэф_oЙм2џnЭ’R2ЋМˆp8lБвnєТйY6Пœ`8BVК—Ќ4Yщ^V.šЪФqyДvѕYЖЅ‰Э“h*Dњ!@DЉ!…™–pљbF ёёzН<љЬѓћъš›ЄУгŠт:Š`ЏцСлЖ… ‘ ”Sж­[їѕхЫ—_`ќY­ы4сЦCњŸqћpdŽХ‘UˆтЭD­~ Х†2q№НƒЭpуж<їЦЎZ2‡+ЮŸKПѓЋŸчжыfъo%дпF8аA$д‹рtgqА6Dc`пќжšи5ЁPШ27Оу?ц)[s§ŒџhоБ$о‚'вшяд_{ь5‚pzєЗЎ{Г‘оЄтŠ ћŒУсˆgffrп}їНђ‹_ќb{$9TЕRЪ-дSФЈт`^5\ЗbХŠи@й‘=GЮx[r…';Жo@ЊXyю .9GŸ1ˆijjbLVˆHЈ‡HЈ5м‡ІŠ‚У™ЦО?СЙЌљіЗcѓь†пнpТŸјiYѓ}Ьѕ|B@ЈьB vЃЛбДТхгw;Э,‚1га„cР].%2z3љŠБуzєcјЂГ‚цш aуЌ Р›oОY§ѕЏ}`эСжўЇхЂљ[ €ИM†ƒЇžz‚хч— ѕФШp8}ь9вGCџlю§ю=/бтЭФЧЗx;тcЧЁ^шяDЛ!дЃџMw:ŽŒ<”мb№dЃDЙ(RJœб§Ь‚fGКЁEŒ§Š‹‹Г„љЂ1‚RЪa-=[лPzнКuѕЁP(Є(ЪFŠєц „‚єwшб<#Ф‘}oБ|ЮТ?Z$€”ŠУУЮƒ=4єЯц;їмƒпяЗxшЬ­>ОХЧеь‰юcм‰ѕ"№f/GўDi9(бзЩ'‹2†e_цћ™‰6ŽЭat%уЧЯBEQМšІ™CФ†eœRЪшЊсЊЊ'N4–••%О{=Š/W §#€G}”­ліpУ•ХxЄTŠ“іurЂЗ’{юYCљfџ{ьЃEєWм:ЁП-аЋЧzГqdфј)8вВQ‡… ЃЯЖs{*мЮЖЪ‰?6Ъ;vlvД<}jx TќЏ/QФКcЧŽLEpИNwьmу#СлUaџсSмђѕЇљЮч2}r[w6Sл5•я}я@ТЬ›ІiH5‚ця@эkCіwFw(w ЄхрHЯCNЧсЩАm‘fТэШ7l„xUпЭи•kќ6Ъ1ЮххщЁЩБш Ў8›`оGАvљђхчЇ2тPМйШ @WWЯ=џgNžюцŸОН‘Ь.aЪŒsy№С{щяязЧю?j_;‘оVдоvД_­/сЫС1vТ“SпЉnЮcœŠtѓ'ўv§П9лэіŒ3ЦнддЏ†…Г­B@ ЊЊЊцk_ћšэыTрЭОVd$ˆp ‚vБ…ёxњщЇщ7‡hR2oсrО§е/аsь}"н­„‚~Єp/[Пзиq8м>‹zЕkхЩСЩцo#Ÿ]ы,-отl`ЅІiЬž=;ГЙЙ9ˆNќˆ СГ)БUУ/Пќr]8 !†4…/ E€slЪЫЦљЏ_Y~џуЕ—№/з/ЅЇ­Э“,Т™АС€]ŸknеёПэH7ъ??˜ˆїиYќ`HЃОBІOŸžљњыЏЗ‰!xжРЦl*---ђ:oBшёџ o1A tЃv5ЁѕЖщiaяЁvэXeћй[>УЗю^Ѓ;wЂ§НnиЉCn&6™˜е|єџк<˜к†lѕЦБЫх"њІVѕРѕ›6m:іт‹/ž†˜`о=фЏ/Q˜ СeeeЖ`VяТщA*ЮCPJДўNдюfdo joR‹ Мй(™8ђ'т*[ШяџыKБђnЙхюњЦ7b}ОyxOАYЅExтъЁњЧžŒ|Г 9ёЦБзыХэv §[Зn=іЪ+ЏђЩ'OєєєЈІ{KtWЭЇЎ2љp Dд#8Є!(5до64‘цд–S€DIЫХ‘5чиiИ'ч#‡ЅхuvvВvэZ Jў]wсїћQUEQp:ЭЄ› ŽяуЭi–jЦœЦ<” –жm|\.>ŸЏзKcccЫцЭ›џщO:ОnнКf“2ЌiZП”ВOJщ~їшGй‡Q%Сй€иH ЊЊЊњЋ_§Њ%ђEыжUИкнЄo'”Œ<юLйЯŒЋІЅ]vі@(тљчŸЇЛЛ—Я}юГ|уп$‰рvЛZWМФЗtCP#мŒСZјPjп€ДД4вввp:ъ‘#GNОўњыЧŸxт‰ућіэыwіDkšц’@Wѓ§бу аД3ЬнУЮЪdPЌp§IŽ&Й\Ўщ===ПBИŒ:њJЦ™…КcХ@O#кщ](Х Q2 ЭхХŽ–жппЯЇ?§i јЮwОыы“ Ёт5€гщ’pЛ00Гк7ЯщёЮC№нn7щщщЄЅЅ‰DњЗoп^Л~§њујУъ[[[{Ђ„їI)§šІљ кLЖљлиЌ3є7.№Ќ €b 0ЈЈЎЎўqiii‰йБaЪ7pQ$€vь D~Ž1Smѓ; бннЫхВєЏшUKEЅѕ;C/^(мn7iiiЄЇЇгкккіЮ;яџѓŸџ|єљчŸ? …zЃ-м/ЅŒ'лŽpЃ[ Ч# 5pЖЛ0йQр#сђAм; бuˆŸŸkaцsёз&ћm7›gї{АсœљЗŸЯGZZnЗ[;rфШЉ—^zщШкЕkїОѓЮ;ЇЂЊмЯ€*7Оƒи#}И“=CсУ€ 8pр@эђхЫЯJ`Ѕ”O&К‡tчœNgТЌнhi7ЃE'ъ9<NЇЗлMWWWgMMM§ыЏПОџ‘GйY[[kh§qпё„[Z6>“ж > ˆэ#XUUUѓх/9ЁЕ‚Mыіх ƒЕ-6AЧЗвГ3сцЉZЇг—wttt?~МсШ‘#u;vь8іт‹/жTWW„Ч“џmQчЃнКSС‡!†G0№вK/е…УсАЂш1ЭƒЖnO6HшFЄчлч9 Ѕі „;N:;;ЛŽ=zъШ‘#'vьиqєЅ—^Њ>|јА™lsЋ6 c-ž№Qџ_УХY“G0‡ћOž<йTRRR<Є‹з—Ѓ{4`€Tц 2ЭЄЅ1тG нЕЕЕ GŽЉлЙsчё—_~љШŒaV|KŽџ˜ћmУPж’­ †€8`iiiёWИвŠ‚t%%=žшTЛ…x{WWWOmmэЉъъъњ;v{х•WŽьлЗЯ л z(Вc)GОPуУЦ‡.ЈЛјт‹m СЂ]iњћuЯцж%ЛЁККК~чЮЧ_yх•У{іьiУJt<й!гw<с‘ПU>R|иЌЊЊЊљв—Оdё&Sщ"-­Ї‡” ;q52p8tvvідееЎЎЎЎлЙsgэКuыŽьмЙГ…фd‡АЖьxТџW“m‡Гю‚˜Gp<0бхrMяээ§ ѓ&sХ“<иЙЎЎЎоккк†ššš;wю<Ж~§њъэлЗЗ`%z0Ву џџŽl;|( j†0‚ХХХCкvŽ€юююОККК†ъъъњнЛw_Зnн‘їп?йfЂџO“m‡Ћ €ИС’’[0ћёEЁЇЇЧ_[[лpєшбЛvэ:ЖaУ†ъ­[З6‘Hv<б';ќ5 xрРкeЫ–Ov__Ÿ?кgзяйГЇvУ† GЖlйвШ№Ш6ўwВ‡Р_ETUU§ьg?л_WWwњшбЃ'vяо}lуЦ5UUU oœ§wВЯŠ–Љс2`oОњ;йE|h jvЂя ЂЌЊм<b&ќяdŸE|h vC!2бƒшѓ'ћЏˆџ–K/_šѕ vIENDЎB`‚ktikz-0.12/app/icons/hi16-apps-ktikz.png000066400000000000000000000016331325124551100200350ustar00rootroot00000000000000‰PNG  IHDRѓџasBIT|dˆ pHYsЛЛ:ьутtEXtSoftwarewww.inkscape.org›ю<IDAT8u“_h›eЦяћ~п—6Ё]гЌдVcqЬŠШ(mХЁeЈ“Iэˆu •‰Ла A„!шzс˜З‘1ZЕLЖХBE%іЯpL‡Љк? лЬnkзж46э—Єљ’&љ^/Ќevрс\‡sž­5Зр …BуууCёx<;==Нˆ@ pgmmm№l–Т …BћZ[[пёћ§ј|>_"‘J)Є”H)|€ЇЋЋ+lліЮўўў&CaЦbБьь1K˜LгФ0 У@)…R )@ ЪЄЁЁсШШШШЧѓЅжzJeЅ”)ЫЮПУJb)y‹,ЫТєT’NЇinn~{nnюї™™™cRkэ:Ž“1Ќ L7iš(ЋУЊРД<ŒХц‰/&‘”щээХuн:рC­u @$“Щ їSШeyўhN.‡)]ОЙtЇЈЙ‘Hљ~ˆг__ІTпfаік'Ђ­Лe аззїqKsйdŽзŸ}”•ьѓ‰5žм{jY{•ѓс0wдTђнЉїкНЁЧNOnzzzЎJ2ђы5žщИŸЁhŒO~ц­“§(УфЬЙЏМZрн7^фяДƒG”VџћžмьыBРŸЫiЄ”ˆš_FG‰Nнdпž э‚№№Ч№oh­нbБXиYSХ_Љ,ea ”IАоO8&хVqтшмb™љ]?tрџА”HХ_ш|˜Я~Зˆ“[чЧKYNЎаzo#?]хњЭev5XwђBДкЛ ‰NХ-ЫbтZЫ48?<†Pъ‚M<зйСйсq>ћvЗTрЬрD ЎЎиВђК9Yэ5Ÿњре§4w1=q™Р:OІT,№оK”Д$Е–ХЛћnƒŽ-m0}юBџ”Ўм!„ђ*дЦ*Џz“ЦЛš№zНфѓy2™ хrymrrђ7VЏ;lpK v)gkЗ\дЅRIчѓymлvyvvvepp№‹ііі=›[‰Н‰DN,..ІЂбшйююю jгюЗќ?P„Œя9Щ)IENDЎB`‚ktikz-0.12/app/icons/hi22-apps-ktikz.png000066400000000000000000000026711325124551100200350ustar00rootroot00000000000000‰PNG  IHDRФДl;sBIT|dˆ pHYsaaС0UњtEXtSoftwarewww.inkscape.org›ю<6IDAT8еL]gЧёїѓœsp/аF›TкЉ™ЖЌ–ЩДaVКд™ЕsЋы\жюM6шBтЏl1™qЫŒ†E%ВЭ@В2fj3—л­з2:Š"ƒaсІP,Ў-\И…УюsЮНчы-MkЩВoђљуЩ“МžoО<_D„OРЈ­­-mkk{|hh(:999”ЏнWVVўКЁЁсы"ТЧ"UUU[[[8555ЕЧНD"!WЏ^•ХХEБ,Kš››Ž=њТЎ]Л& УшЬ5D—––ЗДД<вззw2‹%ЇЇЇН+WЎШььЌЬЭЭI"‘И%“IY^^–••9{іьщŠŠŠђ}ћіыщщЩьйГЇCDP"B4lнКѕ~œ*PˆaЗDkжУ0PJЁЕBy.Ъ№Гh-Ѕъыыпђћ§ћ.]К4Мwяо‘H$ЅтёxLDаnъ6да Ÿђ№)SхЏЬ@гчgpp0Є”Њ™››‹хrЙg#‘H @ДЗЗw)Ѕ0˜ЙLђјд؆Т„ЎХТ „бОZ+V’НННJ)U–NЇEЄŸыЅЂбшdЮѓˆЭfЩй‰еc-!fУФа ђ6#<іг6ДИhЩѓЛ—[‰М7ШBVлTыuUї§Њ[``5“usO§І‡Љ‹ЁБџ№ьџ yC\ %М№чг|ѕKŸЧCЁ}єѕџƒС‘s\влиљЕCaBeПТpŸО—М3{яЊ№љ43V†ічžФ№‡ћШB™ОГП•w( šЄ’‹Міъ+ФgfhмОž—›У ЋˆъњџŽы1MJ›ˆРц’ ёЙyо|wМ“!J  ђќ‹Пexl‚Э›юрЯ<…ЇЬТњгшmp[[[—ЉЏžхС/oCТœ8;СыЇFјK_Œ#П| ЯѓHЬЯёўП/rоћ ‡>ШЮэŸцэўqЅsщ“мT7рооо)У0xѓЬƒZ+|e;OьпХЃїеRНЅ;НЬ№Ш(Бй пЈ-тл‡уЁyуд<МЛrv]XёkкIз;CˆkЃ|(У‡˜AТсZ~џ–Г9BЁ0/ўьˆ›ХВ,V3YžљоЁƒыТ"тІв™д#MЛщŠЦаў”Rˆ€чЄI-/ёў™>”6БЭ|ъŽЭxкЧё31jмAEEХU}АhНŽЙ№п™ѓ%…AЊ*Šщџ`УsYX\3ШШ‡Ѓ\О2CIІЁЎšЮЗњ'ЭёгУ_WWЗу“ ыхF"ъЦSFIENDЎB`‚ktikz-0.12/app/icons/hi32-apps-ktikz.png000066400000000000000000000047051325124551100200360ustar00rootroot00000000000000‰PNG  IHDR szzєsBIT|dˆ pHYsvv}е‚ЬtEXtSoftwarewww.inkscape.org›ю< BIDATX…­—{pTе€ПsюНћHvГIHТЫ№* )EР"-Œb‘RTDкZtZqЦaj[дњgкqtЄ e)%ш@Ъ›€(‰H@6‰!l’MvГЛїqњGHЪ#€уєЬœ9їž9ГпwП{юўJ)ў€ЏАААзВeЫfюиБЃtюмЙ“/ZЃ:єO‹-КЉsNч4!„!ФЅ”ŸŸџћH$2ы№сУыКў+лЖЫФ9ГЋТ@pётХ'Mš4ГИИјж`0иг0 эмšK:@sssd№рС”RЩљѓчп2~ќјM+VЌ№ьйГчыК;•R‹/ш„ƒСРЂE‹&Œ7юОттт[srrzъКЎH)B\2v'`лЖ›ŸŸпG)еиЏ_Пђ9sцŒš5kV№щЇŸnZП~§@ЅTB?іЌYГце#GŽLЯЮЮю%Ѕд]зEJ‰”MгК~ИsюћшК.=Oa=юљЅЅЅ9eeeЇGŒё7ЅT@(ЅBф?~М^зu?€lЋ…Мўhšv№r№Ўб1И!PК!ufЯžН$.ЉЉЉЩkll<Ч(ЅцvF]ž‘HЄњ“nЗ№ѓчt•AwMtзDsвшЎ‰єј‘О„7ˆІ{RЧ—TUUХlлNФуё|р‰ѓпБNkяоНwцXЪѓсЂ ІЙitеž,„7€є‘О`ЧЕІ_‘ВВ24M+№љ|з…УсzрIЅTєЅ”*--н*ЅDs3hRЁYёs@ сЩFxЯЙю  izWDЮДФ9^ги‘ЧDиIZ›‡Уджжъ---•ЎыžPJНё.ыŒпjšІŽжЖq№Œ@Y&й|qВ™ƒпдOš]iшЛ™­-Э\wяyЋt;ТJ" /ТрЕППЩ{|B‚lšMЃ'зў|…Н`œИ~СРn€h&“1W–эуюЇоЅЅ% B№иkы˜іфrъбœ4вN!э$Љі6–М^F~A!Я,œ†аŒŽ(Iђђr*++9+ЄЮ‚1xŠ$ићр341ћr‰ІІІSЯ,ИГc aсQ&CŠ XџтoYђЃѓђ$’p9mGAмtь<клл)+ћpM >MqgП8О8ћSls т_—Аіьйѓ‘зc yГˆY:iK1aє0ЄдиWyšн‡ОEС О…МЙt6Т1Щв]p,”йЮЫ/І!ц Гr‘ў\”цAj:J)<††–/_ŽaDь\4?2нIЁЬЪŒГnѓ^&пTТ€т>=€ре"Рў§ћЋ5)(2˜ЎэЫЊ ;ЯD:Ы+l+УŠяаxі,9^ˆ Лч”'ž ЪШц§•ЬќйH)ЅЧу)ИЊ•Ву?§ЁЛЧГђу(хB&Ž…c&qг1T:Юw фф„№ћќ„ДїMЭs+6w…џыS д4Д0uм2™ SІL!n\№„ш,.#@сЂ\fNJ]$Ці=‡оl‚9ARŽDxƒьјьs”ыаииH"™dܘ1<ўРэќgзWž@™qопRС]7ХЖ-Z[[  И хфЯэNРЮXЖ“qEНzqЧиAМ]і ВЈihцјщ3ФZшS”Х„‚оНћаГЈ€ї/р–Qƒyюнr–`нŽЃLНЙ„xЊПkцЯџиШœgж0mщ{Ќпџн ИіИKЊb1ъЗcIдоњюЋЋoо—t<Ъж/O3rФ0zцч№ЩgGIзю&ЋрШ)‡y–Њšвщ4УaHСЎЧд;цX !СqСШ бвкYј‡ЇPMGЗ_V@‘‰DBЁWJjЋCЫы€у8<8cз—єцСљ/‘jkЦЖm„†Я?T€Іщ˜ІI:Ц0 |>–eХ єKЫВЖtВ.w0Iœ9sІ: •€ЅPV•ŽГeыfNзЕђФтgi‰4т ф‘ђ“MVVšІuMгDг4<^Џз­ЎЎnBєBHЅ”{%kзЎ]]7x`‰“ˆA*ŠЬъ >лЪл+K …Bќ~G|nыu‚-ЫТыѕfъъъj7lи№щoМБ;•J…mлЎъ„\іЌ7vьиЩ™LFY–Ѕœ–х:ЖRJ)Чq”eY*“Щ(г4U:VЉTJЕЗЗЋh4ъ†Усіђђђ}ѓцЭ{  є€жчВG3!Ф d2yв0 „CJ ссК.J)lлVёx_ЉХbБ™І™*))™ ь—§ ќ~џЬD"БнсpX‹‹‹_vЙ\пtѕъеЗМњъЋѓЪЪЪцzНо‘ЊЊ:Lгь›п|№+ёi<O!P,„h№љ|5ъІp8œиБcUUUZЖlY™Ђ(+ћ;ЯэЅ555е^ЏwLЮ+F ЁZћ@ўi">M€Ђ(Ьœ9syCCCэјёуы:::.J)ЧФуёPssГјŽ”ђљ|JоuoSSSc~H‰D'J<< МЂ(^чпчз\;&ЊЭЋ](RЯѕYДhбt›ЭЖЎЛЛ;"ЅpсТ…vр АЎИч ш9pр@MжТсEэ?˜ˆ>^ŠEIFQѕю4А4o^ѕ!4{юw‰DbщтХ‹чЦуq'@0Ќ•R^мп~ш/ YYYYЃЊъЧ-ТL пмLf 3 z7*&ТюA8Ве‹АЙ 7€жжV‚СршгЇO7kšцбuНЃЋЋk№””ђLxШФRJCб ЄЕЯ њAЋf‘вQDІ]UšЌnШыЙкџр‰'ž ЃЃCƒСBššššX;|„;;;лћФВ5F3КQ“Q4ЃЁЈЛьn„У67Ттt,dя{ЩxN‘ŒВ}л[L™2…ѓчЯ#„ ЃЃу„išхР*)Ѕ1˜€ў3qWcccэдЉSЊF E€pƒi"mn„Ђ /NƒeЂ—ЗрщпяDЈ}ё!„@ЦњBЁ3žтƒ}ћ‰Чуtww#Ѕд[[[GkЅ”ЕƒС$ чрСƒGІOŸОpгоГtХzQLƒ•ЗАЙ‡‘2%/ОН?э:EaжЄбL-9 ˆp{š™РуВЃЅ445Ь‡pИб'|ўэ‰яSџчfž‚Ег4Ѕ2ЌH7“Уbк§пЮt‹Щš ы?M@ВВВВцЁ‡тƒус­їO2Mюš№”WHЅLžyНšP{ЗЫСЏОїEІПХдЩXрGПоŽЊйјїя.у+KцГu'Я^DˆєџgьйГ‡сУ‡ѓ_UЕДкЦd9Ќ8№ПШcл|B@Ÿ1 Ѕ4šдskў‘7• fЌkЗZјя,AUл~њюЙхZ”о&JA1JA1ТщG8§ќї‰ѓ|xіBд]рШ !RвггУkЏНЦ… ˆХz(l;ЬНVIу{‹0rC†юеў№Ÿ)сЎЎЎˆ‚kМщ—Њf/JЌ%aѓžм3П‚ŠЩ7ц`…Ер™fб­72Е|dюоaЗf”Ћ?џйЯhlhр­­[‰KФэ…g~ёqуШBЧ1Ha›0аr:zњєщК3f,P5KР=„B7.ооwŠЊчПн'ю?lМHSАХГ'чD|ыЫ АhjN˜Уfi"{ТЉ­ЃщќyКЂQ$PXXHИ§?~њЧИ\./^<§DЊЌ˜„ф=y`C№J=аНџў#щќžžдTЇ‘шdыћЧљЬMу˜0zhŸ,ѓŸОBѕ‘3{@І(ЖщИе8Фл1{кpЈ&щ№’д\ќтйH&“D"‘єяЄЩЭ“ЧqЧw ЅdсТ…Зbq,O?С& ЙuыжУЊЊЂfЄъ(D1^zћпџъТОЉвдС4аdйгБ0ш1А{'mр№У‡Эщв!єєгOS__Omm:Cу+*р{ЋяЫѕ;vьTлR ЁT&р!”™‘/H)SЊЊЈЊЊ№СŸBј эTŒpЄ!…E!š„hТ њxk^Јbщќ jы›јх+;Йn˜ŸъѕпЭ,ПAЇNт•-ЄХ1‘do ‹ХB љцЊ/Б№ж)й~.FтEХl‘G^шМb™вжййбTЅ@‰GXЛЅŽ|mЂ $чЖЮЦ.§!БЬ [[пDйЕCјŠhD1Ф›BRђшЃтs*œŽZIi”ЊmLŸ:…ЅŸƒŒЕƒн BЁrw]к§Rp№~š€h}}§1UQ>№ЛъFкc’й“JћФ~БлХ™-?сsп|†[Ї\Яїп…Їа‰УfaCхћшЉTšС4‘FœŽH„ЃЇkp{Š1Ѓ(TтŒВGxшлkгЁ–Ž’7wEUHІšяМœ€Ц@ЯоН{gЧР“ып!мнK*жйG€ЂЎёЁЉ EN;зј‹pXUЬžvьšD˜fw+fЌHWŒіH„ n 7 ’)юvОД|У† Ып/тxУЮ‡˜1ОД“–ZuЦЫ шЭd€yгЫИижХ{‡Nї]MЪ2&eш#ьiУŒEР^ˆЭсDбЌрєƒУЫŽяЂ( MMMD-ЦXC\7Ќ˜ћюЛ/їМЌˆMЛjИџюл@бU Rѕѕѕ„РјсЊ;јЭO ЛCШюVЬh+2EqњBEГ ИJРсEЂ`ЗZЈ7ђQгG€ Њ6Ѓм?ќpnVЮZ_JЩц]Ејн,™?ЭјDџuїx -‹%Ъќ‚щхЅьЈЛDЈз†R@- œ^ І)sћйbЭLbС`ЇžzŠ!C†` r”Qh„™={6eeeШ”‰d,ŒŒ…Љ9v‚s—Т,7ЋES&L˜0‚Ыь_]N@Дљb№€т №х;gbЄL^оZы )гDQDп=KE€€G}ЛнNgg'Іа0Q‰hCИџЋЫ оŽLv#­Eр№!э^6яmр Ÿ™Š”’%K–Llџ=g?jnЪВlС4,šЪKяўDG3o›№уЦэ­!о}ї]ь6+A’dИЕ“DJхЗЛЯ э^Аe2lZxeѕ1JnЙё:t]gўќљ3—˜ѕАуjєўЙщвљьпутГГn ёb„Нu}:Jг=†йн–Ю:=mєі&јѓ_Ю1aТК{b(Њ‚iš,П}4n—ƒЕ/я$оЋї ЛC'ЯбŒpЯМ Є”†зыб§ЭU RбxВ=Пэо;oрз›wхbжьiЃРn%njˆ?"ГЄ>tф(І4iiiIПHQа4•Ч~№}Vо5“`{ыЗ|}ROАљН|сЖыIЅR$“IœNЇ‚Р(Є.„а„jў Оœ@ЕuAцу#бХg+†с-АQЙч$]ІЅ еU‚ЇШ•›Ѕ”ДЖЖ2lˆgf ]XXHKЈЁCЏСnЗѓХ7Ё*‚_ОВ“юp ФкIIЖ|PЯѕ#J3j]]]єєє (ŠЯшл2D™ФіБл./@бY(сpcwјТмёФ{u6ўсPЎ›ЇаСЅЖєrЅЋ'AеЎ”јŒQШмЉ6ššўТш1e8э6dO˜‹gOІ­3Цѓл?$ЉЙЈ>жDKИ‹Лn@,#‘Hалл‹ЊЊVQр›ІRJГт`ьBХ>`чЁSй6V|nЯН^EЈ= €лх`ЫюZ–~чYўѓ?`&‚4ЕДгв‘dљЂR\1ŸвВI4Зucи<`q№РнГxцЕн\ ЕБywбU5 TзžeSе‡<ЛiŸP][@šml ~>0uе; >Ат_^B7LVмy ГnšЬ˜ЁnъЯЕ№еЧŸgћЯяcмP)гффЙk>?Ч_иKэЙ$`с‘Эз0ЮМџћ]мїЏ/ёмš{(сe☨?{‰пn?ЬЛъxщУd:Э‹й;АЁ;LA“кNпўћ_=wУЕ%ЪG !ррў§ДZЏcф№г'\GЄЋ‡oиЦзЯbя;pкC„УЭ4\,р‹ї>F‰ЯCУG—H&“ИЎюCJЩ™ѓm4Зv2~„ŸP(„iшH$SQQ,š…­яќсаЫoМѕ СК§Н№ЉBˆ1ЭЭЭ€?;q™-Ђдчн4M"‘;п|œЁE­ь?‘ф+џє<šІЧбuУ00ѕJ2šо0ST, ЭцL/Ѓ5—}4MУjЕbБX8x№рБ%K–<М—ќWvФ=yђфё@ 0/'ЪZНQАї]gНќ›ѕlйє.3І]ЯЪ~–D4BЂГT*НБІ(*šн‰е; ‹е†ХbСjMgЊd2‰ЎышКŽЊЊhš–ЋЅЅЅ^UUЉTЪJоёг• шйГgЯЁЙsчЮЫЅ_Л™шDф 0у]ќюЗ/внЃsЯ=п"i&ЁкQ^4Э’ƒЕX,8ЌV+RЪtЖ !rрЊЊbЕZб4M!|€ шОZЩmлЖyђЩ'вDšГЕ1Нˆ)сDуGtЧ“lxёUД‚T› ‡еŠЭfУfГсp8АX,ЙEŸiš†Ўы$“I У@J‰ХbСщt’H$К8pvнКuuUUUч…Qrћ‘W!@JЉ !Ю†‘RSНЊŒGP |—е727Ю]8ЬцЪmxН^TUХnЗcГйШ~Sф/™SЉTnLшzz9сt:Эp8мКcЧŽкѕыз9sцЬy]з/m@+аDЎZ@ІДЕЗЗwŸbOяяЫ~ЦXrївСNфћЌw УР0ŒЌ№d0<їілoяZЗnнP(д„vвЁєђџе ˆž:uъУ@ 0'л ЌHЦVgЮ §K~ЛЎыz( жжжжVWW~у7ŽЖЕЕ…2Р]@”RІЎщЊєTWWœ3gNN€ДЙ1{;QЌЮ,Є­L&ѕP(ЌЉЉ9V]]}шЭ7п< ƒиюLM^nпџJЫt !,'NМЛІІцќ§O!DжВЁšššcUUU‡^§ѕš l;§[Тў5psssѓ6У0єКККcUUU‡6mкtфтХ‹YЫўнadЛŠ?5№#IЧk~ЬўŸСTўXю=wЭ-IENDЎB`‚ktikz-0.12/app/icons/hi64-apps-ktikz.png000066400000000000000000000145441325124551100200450ustar00rootroot00000000000000‰PNG  IHDR@@ЊiqоsBIT|dˆ pHYsььu85tEXtSoftwarewww.inkscape.org›ю<сIDATxœе›ytея?ЗЊѕ"Е$ЋЕY’7Yи–-ƒYgXЬ3!0иФœ0ICxМТ„ф2$LШ›€yysBBˆЃШ KР€q‚-Ѓ[оmY–-YЛZjЉ[НVнїGuЗКЅЖ-ьy3ѓ~чдЉНю§~яoЛПЊRJўЋ‹Bциbœ€tJ)G.цйІ‹яоПЏЄ[ZZ:щы_џњ•ѓцЭ[4kжЌ+ђѓѓЫЖmлЖmнКu?šЯіЌЬЬLЗгщl˜2eJtсТ…xНоŸПњъЋ-)э§gjРА6 3іŠЪЪЪХsцЬЙЂ   дbБ8t]'оW!mmmG/ЛьВЛ€ЯЄ”ZКччхх§XFC>ŸЯjЗл{ЪЪЪn жXЦ‚­ЌЌЌš3gNUAAСt‹ХтRЂы:B„ФG:О?Q№qYЕjеМчž{ю …Зл§ЇoМбўня~—'Ÿ|вОeЫкллO3нР–јЕŸ‹€s€ЋёbЗл=ЭbБ8у6яДІi!P%мйЖ'BТТ… ч`D„d№ gЮœЙИЄЄ$jЕZMыж­cЩ’%<ёФйЛwя'ЅLииYM lТчччЛюЙчž%•••‹gЯžНxвЄIг­VЋSзѕ”‘=л’ єbС !hnn>К`С‚„#B˜rssыцЭ›З ННнЛ|љrзwмУсРуёАaУ†з6nмxg2Ю BЈ€ ШЬЯЯЯ^Лvэ’K/НtёЌYГЊђђђІ›ЭцLMгЃ)„ ‰œјљˆИPJKKЫb§5кЄI“YВdЩ‚уЧЗ*Š2uћіэькЕЋgЭš5љNЇ3ЈiкЗЦ tВ!І<ћьГ?\БbХšdАiД#БФUњѓŽќљ€OD&OžМЪуёМ———WX\\мЄ(JРчѓЙ„H)inn>%„(ЙцškОДsчЮwЧbQЦьg!\RЪЬp8œодН?ЅsŠЂLќЙЎM>пNwЬи(бдшHЪЕ+WЎœ‹с^˜?ОХуёDуфДЕЕ}L‘RЎO>О={іV”Б‡hЁ…&<ъ%"= %тC іЃћQC”рB553хкE‹ЭЩЮЮўіmЗнvЭсУ‡OY­жI@ 7 ЭХШO>У555‡LІ4ССъB ^№sDІkЮЛсШ­нГ}œy”––^6ўќœ8qТ?00Pяю™3gМ>ю[щЅИŒEіљ|žH$Рs‰†Аe#BCЅфМрЮjыRG‰јQdд8.,YˆŒьxcчЕџdyс…І.]КTнДiSЂ(€žžž}RЪљРПJ)?>јtD€ЁЎЎЎг—$:.вž‹:|9AрŠдa zЌѓЁš‘'R5'€Іs’ч?^SSУмЙsе;vx€|€p8<шѕz+€3Р#ч?Ž€X,оЗoпОхЫ—Ї Ь6„Nщј(и(jШ:"žшЈfШp!гшЈ rачžŽˆўў~Жlй‚”’іііьИпjkkыfїI)‡ЮG@o‡ЏЎЎюPZU6YQТУЈAІ`j Жh!dFв‘ДЛ‘v7dф г„b2!cЩI&Т0%ЧœЅK—222‚CяёxъК>и$Ѕ|ы|р!M&(„ШrЙ\Ыу’ЬЁ6ќ}?ўСxБtЛмї›žЯM@uuѕA“Щ№тзЬŸ>zƒ5DH %шЁігЁїоМ+fИжLDfсштЬ7ВК$`#С9YіАі Ы8рёŠбSO=Eyy9ѓчЯ'‰‹ˆрнЛ…k+ѓxэ™ј9Кu;/МŒdЦ„мx6№pі‚HШыѕ„Ус€ЊЊ6kвUЊ('Рd‚Œl^нй‚еlтЌНсpгйХз+ЎžЫїЉђ7U—Єœ‹_7551<<Ь_v~L_ПЧx. ŽtSPTФњѕы™YТЧЄI“јоwОMпв– Šуэ]‡ №Ш^fxЗO„€Гš@мжзз7)Ъ(гЊ=‡ŸПеLеŒ\WUЁd‚ЩšbџО@ˆЋ”рЮЩф+ЫцsЫВфfБў{ЋxтО[Ѓ’ютžЇžzŠ'NPш2cбbŽEDИБТЬe—VrеЎ5fžŽќx)%54дТяШ7оHћОpТФФзииxаdƒПћc=Џ§ЙŽo^;ЄžтœтђЫ‡WёЛќ: .)eыњяАe§§Ь,3œнмђЩ$%;‘ 2l€=|ј0K._ŒЧ!ЌиtКu}]э<јаїZCLтДчРIкКŒƒоŽ?OќD№WWWĘGќЩѓ†c=м„bг%=ё‘UЦ„?)%JlpЂAtяtяћ Цб№й^|І<Šшфž•+x№СЩЪЪJq|qљУŸрЮvDh§рИ0оq\4!Чу ƒ8‚мL^§K šЯ3nєGЦіЅn€lGlClЧЊ'U‹ 2‹YХH[ˆТB#’љMyИ”.Щ"„рЦoч,Ѕ”hšЮцŒ{яXО ##МhТ€ЗЃЃЃ]хјчП {РЯŸvL}єЂЦРz;ŒЈй%(й%(ЎзdlY91vFAМџўћœ:u €СBŠ“€šEЙ­ЇУСЃ>š:YvэoЁГЯЛwпtЅйщtЦ3Т‹# юыъъšд˜#,/qsХмЉќлЛћакалал’=5Ї2 LцqЮА˜cфЭѓшЃ’x! 7Ѓœ|г0–ш0Зоz+nЗ;mИ”Rђ‡˜ѓ›5ЕЙ3ŠYЕjU%рИhbтkhhHМ,блYНЬHcпнпGž…šSfŒАЭ•дБXŠї@ЋХ№мё(№ГŸ§ŒЮЮN23 ѓъЖ^B@u‘obЦŒЌ^Н:x4ˆєї"§НhО^ЖЦдеѕ‹!cо_ ўЭ›7ˆЎVн|-ГŠІK^y3ЕьžььРхфб—R&9FЈ­­х•W^ЁЌЌŒ`0РˆЩ0‘У<іУ‡‘О№ї‚ПщыAjАч=G<є™•з]†”’E‹Эœq„! длллЏ‘‚ьL;7]=€ oš<.ёЄ&MU Щhьјс‡B …чŠ‘СЬytxupИСсFкѓŒm‹3AfЭ‡F]АjЮІOBJIYYй4FЇЦM@№JŒ $ЦGwЎИ€ьl<žrУи08Юvc›GрфЩ“”Я˜+rreaЇ) РO_њ0AV|пŽj:oюl`хЕ—Х"‚†нnЗeffцБш[хbеЊГjТy RFЁhT‹ТhђВтЊЙLr~fУ›Ÿ$€ЧEз“:ьяGъBъDъBŽєpќD љљљєіyRкьыц‡їЌрЃњЃќuos ёэътђЃ(‚л’аu],[ЖЌp€иBKЮY§СD4Рh0OйЄВъ†*j>lФы €EїѕЂu’5*Щ€‘‘…’/“5g%@ФЫnЋ€ыoИžяЌYAБлpЊ?yўqрv чЗtў4ђэ:бh”h4J8ІЂЂbg.0_—.„P…ŠcЋ%РFУЩЃEXГܘ#B^лК}dе‘‹’UDnбTF"ЏЧ’фѕЏрАлSŠ}§†fмЗnf“ЪНЗ-`WS ж$2рEuђДёVL§oџт\ЂЊёЌ@ Р№№0………%Иg/l Ÿб0ВŽqiЂ„$в0J2<‚ sEе|*J НсН§(NwbrтАY1Љ СaлЩЖ›iјІ ыhѓmmmˆXŽo1›AJюЙaіXр‰пnCїv€PYХ|pиЫаH‹IeљU—тїћ ƒ„B!‚С “'O.РюО€Ž†(†ђъrL"1Q"я‹Х1 Ё˜ИыЦE49ЭОуэ)7egкђж$Є”ьппФЅ•г˜;3›+/uрА)єєєр.(6hGu’›Э7ъuђчDе ol7j _\TŽU…P(D$I˜AQQQ>ч|@4)Ѕ6ќФ И|­ ЁКššЯЄ8Л;ПМ4ъ^мњWƒ Є:џбS]iэтo`ыŽНде~LOŸ‘&BaОvНТКUSЉZ8›МТКТШ*‹ћџі ‰ч=ётёљќx‡}МЛћ0Ы/Џ '€Ч?рВgeЛ0лg#‰žэSZ˜Рw‚Ђъо…HыЃ Э=ї&?Кg_КЦШЪŠђљТь>>дЭЏЋw“iч‰ћ)йNК.™wЧуфfкјщъ…МyиЧІwћh8mbПЇ—еЦзмЩџyУˆ&Яmў Oм{3“ 0ЧЦuU3й^wŒ':yы/ЦЗJў`€G~ѕы7~LiО Mг EЂ„#э=оHщчr~ к@ЎŒяжlх_ЄV›юКжHЅ”ќЏ—ўDДП•h+з.(‹‡ЇZEуСЃlmфЃƒЦМ$ЌђиЖLЎќo№єk;‰Dzqл'М_{ПпO р7-JДЕё§Fў”єЊNJшьтгCm4=У–nŽЕѕ1ѓ=Љ+#<яЗТbСпWb–n"#V<'цОѕђГ?we9Э—Oq #_з Жю ЛxY™–/ЉDJIwџ=Г‰Ѕ<|з ќъщG(,€ЎюvЄІЙгТUзпЫWoИšъ‰DˆD#hšFyq.YkТyОѕЩalV3S‹rБY-tїіAhДЄйŽАgЃЊ*Ж п{єБmЭэžэt|њ‚”2mtТK !LРТ§ћїoЌЈЈ˜žR ђѕ@аƒ’?gtjAJ-0„дPPMЈЖLЬЙeЈ+ЊЊ&ОAж4-сјEI Њ†Ц———ЛTUЭб4Э\1ёезз^ГfЭ­)GU‹1C;‹hšЦkЏoсНwM\U5ƒ{xW–‹СЎS„†њбЕ(RJTUAБЙ0х–ЂšЬ˜LІ”%>1Ь$NŸЯЋЊšјєFQfЭš•Ї(JŽІigM…?/ўЭ›7яц™gЦŸQ­ ј7СяМЕ•žОA.VЏМ—>Ш@kвъDq ЈІФшХU8ОŽoЧе<–ы'Т^|œ d"JJJВЅ”™@–BM?/ЁŽŽŽО`0ЪШША&Ÿ™ШРBЭGѓїЁ &ьјЙ_=M~^6ЏМК‰З›€ІЁиЬ1Р‹%ИеjMЬтœ8јфxЏыzŠv˜Эf222dOOOџіэлО№Т Ч+УzбDo[[[ЧЬ™3ЇЁEа†{‘ЁaDР§m(“ІЁ8н˜ g!Ѕфєщг8жЦЫП<З“Щ„ЭfKŒn|БX,˜Эц1я HQѕфэ8x›Э†Хb‰ž8qЂ}ыж­‡^~љхунннBЏЎы§šІѕн@4 ЯE@Ьезз7Эœ9sšAd81хL6ЪTнQѓgІмгееХцЭ[)--E1NЭ“kqч–˜я'z2pЛнŽІiўН{їпМyѓОз_§H8іhšж Ц–!Р[gЫ/ф—_CCУсеЋWп"2ВFmн”aМ#‹/ЧЎЧŠЎы)€…X,ќ~OmmmуЦыо{яНЃšІ ФРz“№Йвпdљм?M !ВKJJnjiiy5Ж?ZpцЇќ0•,>ŸЯпккzКЖЖЖiЯž=‡jjjњ|ОFСЦэ6Œ1ВRх •ЯM@мжее5•——OMšY”Rїљ|ў“'OЖэкЕЋщгO?=X]]}Шчѓyы­џCРІ“ §oапииxxѕъе_I№ћ§­­­эЛvэкWWWwЈІІц зыƒъ*иtrЁ oйВЅqіьйoдззЊЎЎŽƒ"UCќ›N.шзY!„”ќ6ќ_]с*сp]їIENDЎB`‚ktikz-0.12/app/icons/hisc-apps-ktikz.svg000066400000000000000000007625071325124551100202450ustar00rootroot00000000000000 image/svg+xml KtikZ ktikz-0.12/app/icons/hisc-apps-ktikz.svgz000066400000000000000000002032301325124551100204160ustar00rootroot00000000000000‹:‘QMktikz.svgф[oЗ’Чпѓ)ДЪЫ9€†b‹7;ЮAЎ‹ьb6і-Є‘-Ф– i[чгoБu™&›-вn1aуŒ[ъс4йœ_‘Eў‹ф7џјєюэСлы›‹ЋЫW‡ фсСіђєъьтђѕЋУ_љyуnv'—g'oЏ.ЗЏ/ЏџёэWпќЧfs№УѕіdЗ=;јxБ{s№ЯЫпoNOоoўіfЗ{џтјјуЧттўЂИК~}ќїƒЭцлЏОњццз_pО—7/ЮN_ор§‡ыЗCТГгуэлэЛэхюцю“Ÿю“Ÿ†м/ўиž^Н{wuy3|ђђцыQтыГѓЧдЁ4еМїЧ7œbss{Й;љД‰?ЪeЬ}Ѕ”Чќо>e]ЊŸоrUЬfxwœ;Wџ{ўџёФЭе‡ыгэ9r+.ЗЛуљёёЭgЛГбmj?Ъ7њJ.OоmoоŸœnoŽЎŸџxqЖ{У4 ~}ГНx§fЗџ§тье!?x#‡пJ№т‘#)о%НПэј-ВзˆкЉ!EФ^tЗГЋгPРW‡Пя.~џ—xЈбЧ[^}иНџАћmћiЗНМЛ?гш‡ЗУЧDєpїЧ_lљavзЖ‡пђ›пœmЯoBЂЛ‡ ПёSт№Пћ˜ѕ{.єћэiря.ѕшЖЛлPхqRuїНD5ђўЗO\/ ё_Mq{—)ўGfгќkјfžИЯ}6WзЏ/Иš†t„Т„—?УO=z8Уп№Сё§г3Ѕл“ыџМ>9Л`л"~‡Євї5ЦŸКй]НHЫЕДЛ}ЫЕ.nNЏо^]ПјZЏ—УЅ+†ёbwћBО<мцъќќfЫјЩбЕAўчeK8ЩmŸJЫм Ic­7њ№KJX‘-Й|ЖЦYKŸŸ-<‘эЂКZ‹ ([Щлd љЏдяЁ;ŽйКП~;y;Aёx.Ц[јесЩл'З7™ э‹7з[юОЮ@;f:ЮТWoПОПјыхХŽ{€7лыџ ­шџ\ўzГЄњхњфђ†›ьwЏпьЎ/>§ hАкqякA8к€аоЁVGJH DцH ‘пCрІП?оњ”­…Вш§ў"З–*А/ы9'%/”s^яПлsNkЌ0„Юэг^п%ULІйЯQзё=”U№T][mŸ­ЎЅръOGм=‚SвшЃ№*ђGс=тjчъWB‡к+Д3dуЊ‰ТqЉ\TзмЫIўЊЂКžІ=ЯІхКe…ѓJ§ЅUmфПgUч;Г[фДИАžі–ѕ)\Е–-УЉ§е[`{ѓ\nЏіМ~ WЕ@ыб.ХсћљПџўЏўјJјэАаЛ &л Лс•эI‹}k№єнП^йFНаzЯ8Ÿ…љЈžц=ўj№й№fџаx{iщшсп§;Ј„qЮј#@сЕгcЂM2њžHž‚1QИЮ’9?є!О1ћ@в[ъћBxEFB\`–ЭiTДЯ%™‡ъ$ЃnI2кўIъщI’MW$OИ(\g ЩмУnRrc'ŒЖ‰5ЇIЂФЈМZБ1ЛcW1ИІЫ5`ь Ћž0NБ˜(ЫZ„eУ<\U6iхyшh•ŒK`|˜ыpREe%ђв‹кb[1Д„x4Шюb[€XіёŒˆВМЩЌђ)HHэ’Лђ@QBтж„™0˜R,[‘і~ХІ‚bI-)–f ›Ї)лХ0f Ъђ6&ГŠb'иOяjи(ЮŸ9vSbˆ ЧœЯ‡X—!žтё,hЧыФдФS0f Ъс6цВrtGЮ'n ЁIЧ]іьКHŸИФРYIЋ L5ЫІуІТаТ)3eYSYE0"ЩЅ3m ‚LJ`…7.žfЩЦИ`UАS-vz ЋЇ–Ў+€,Вјd9‹ЌсWЃа|пјЖ"&ЮИHg њœщJŸЫ1ƒQЙ15$ЃzVs'šxA“ .8›ШЬƒŽВРŸАњXзт5шsЖ Я™ОєЙ‹,>yаЦLж№ –}чdœx1шxŒ‰$уэ&ТN0>ђб?Ÿ_[УoKmьД9[ацLWкмŒ,BYжFPVёKBCКƒEE0Е@‰ЁQ8ЂІ­хРД”хРЌA–ГYNw%ЫЅXdёЩr6&ВŠ^мІ'Qj$љ"Х‹7Р‡yH­*вKш­ау@Зду@ЏAГ=NSgk™#,Вјd9YEЏc›p8 ЖфbяB\FBЏђТ[П`эœЅzeSzз Хй‚ЇЛ’тR,Вјd9YE/eUтPЃ0іВoя–ѓ9Вqœ;' СЂ8w[ЁХЕдт€ж Хй‚G]iqS0ВeYSYыћРdE)Џё,žжЇŠЁђjбz#[!Хj)ХZƒg RщЮЄфŒ)?YЪЦ<жА+Еp&A7ьа9ž,‡ЏЩ‘ƒu_H0jйМC‡О)НkасlA‡#ьŒоŒ,BYжFPVёы„Хtї.Y‹‰эФ QЩ›‡˜ЈpЖF…УІ*ЎA…ГNuЅТЅXЬ”emLeСJ€LƒŒ%kМСмэ]Ё|Є9п]ГЮ/рздЈoаT}ƒ5ЈoІ О)гПY|Вœ‰ЌЂ—‡NЦєz/Ьx_Б{зeCŽ)­@-—­З75Ъ›lЊМС”7SPоTWЪлŒˆrИЙЌ`˜?яœ4IУюƒCi8\ˆВЩZ{фВв‚XvSЃНЩІк›\ƒіf к›’}эЉv;'Y„dП ЄMјu>ј%&нx%,iŠён„.€nI,šЉапЄoЉПIП§Эє7ьJЫ‘c([f ХN št‡#ё)7CPВZ*™ЃБ}IЕШЎтЄk)ФIЗ!Ю„8ьJˆ›p1ƒPЗЭ*8ЌIДdЧ-ПВ6‰Mо„rsч›rЬЯуDЃЊсX6хx ’œ)Hr}5Ч s хГYгƒ№фSЏа 9>ŠdъJŸЪ‡ФЙ-YЂa*t9i[ъrуНC;†И ЫыLWNРШ”%-‚В†`+јІ˜N­ЁчrХoHhД.mˆб†ihЛhvЂB“ІЅ:'Эд9SPч /unЦE9р"4k86‚ŒžьІ‚С…IцЈ7VXTzЂr„Ца-сUuRћІ ЏAЈ3ЁКъІ`ЬQ”%.‚Г†d)ЧŽ)Щ@B‘Kќš lЛcЛ№ф##k n)жѕЯŽ!.ˆuВ/БЮNO>šр“х,BВ†_ Ќіf"J qЌмЦ ЋAЇ.EŠJ\0YЌ+є:I-ѕ:IkаыtAЏ“ІГо#,цЪвYAБ ЧPrWЩЖa|,vl—•§™Dя`sУ „/лщ бN*з”т5ˆvК кЩЮDЛŒ9ŠВФаЌЁи ђi(Ї*ѕ$€/Ъ$№2œІxкжмRГ“j š.hvВ+Э.Ё"OO–Гu-Аq6б…}у-`ВМсLнxGсж[/—ФНыЭ›jvИЭN?­й9п—f7%#OQИЮ’Q№гйg#,‘I;‚а?ИЈИпёB-л EзwаTИƒ5wZXІЮіBI٘у(]h ЭZVщ.+|cщ“•›А’бcNЋе"’kЄ;h*нСЄ;M’ћ’юІdф)ЪсYC1 G“Хј.œ%ц1-jС&“D)~@щ–ЬRдhwВЉv'з нщЇЕЛёуwб'\ф ЪУYAБѕТ)•Њw– ЋЌJ•+Ѓ<ІЛЌЁк/Y™ЏЫђxпPО‹zЙŽ9ЦЧКЏ@Š„‹9†ђРEpжљШNv0ЖТ9Ÿ xРOЃMм‡ н$-™nƒ ŒoŠёФ; ŒЛяR,ђќфQ‹АЌk•ŸИмс,"Дikl…Д˜œ3ю„ЗnС6Zж0Œ-vkаюєгкГ]iw)y~ђЈEXжДУ ШMі‘G•œаМA)ЬxУЁЄaЪO-л‘Џ@иъ–л5hwф wЅнMСШ3”Ѕm„eС &FV“фoТц™“8 э–DGЎ‚aуš2МхŽ\aъ,(#ЯP–ЖЬ_Т ­ЬxјџАЅМ›ˆœšщšg vСŽУdk†– ›5ˆwd cgkž#,ђќdI‹ Ќ!Xrb ”`Љ„wZOІG<Шє$ЮТ|о‚аb2kjIБ^ƒ~G§ЮЪОb(R0ц(ЪСYAВqB)J#2Н ћSЊп…јOв“Э[ЗfЫ–’Ў@™lK”i ђф;геtёŒ9ŠђШExжАl…в.Рѓaз!DŸv (,Кx7 %єТF™jH–MI^ƒ|GљЎЏУ І`фЪуЁYУБ ЋKмti*!аФA&aеt ) АœxQЃЌ*PVЊ%Ъj 4<гWLХ”Œ9ŽђаE€жаьЙˆм $7жТ‘ЧNн­ ЁЊЩ‚шP8­5Ь5J6Uђp J”<ƒ})y2ц8ЪCZCs(Є7Жl&гѓЃ7 …Be'‘ ьЇ-=І1šŠyИ1 b^_GuLИШ”‡-Г†b6 ”ЦVPcКдSЇ:’™œќ5ƒОd1еzаTаƒ5zTєtg1B s х‹рЌ YЛ šŽљиAСЩ^+Z h%ЇЁnŽДYтZЈYO6•ѕфd=UѕДщ-и-!cŽЃ qš5-2†ТЄ›УA8эЦЊФU'-@MœфрЏ—ьdЌ*”=ч›*{r Ъž*({}B“b1GP–ЖЬКжXOw" g)А‹n&e˜[Ё”д‹V–*[CqKmЯљ5h{Њ эiьKIСШ3”Ѕ-Г†bdФъЩ–мЌ#ѕ*Иd2о›%?˜‘ ‚нT…Жч\KmЯЙ5h{Њ эщО–—&XЬ”Ѕ-Г†bv_xŒ+'‡;Л4dT…Ж‚й3з(—ЕФЂžГ-EНqЌcЧ DНОЮUš‚‘g(УZeСф…c7eКaВсbЅsm„BЃв 2œУmX2е€,›‚МMO4=ъk|—AcŽЄР\Ёъ9гRеsf Њž*Јzд—Њ—r1ЧPИЮš–й†C›t:ЇУЛ:U5 mЙбOw7|yIЇЊPєœnЉшЇ^;&Й шQgŠ^ТХCyр"8kHцЦ^К4жТ„ИчtЮФˆёвзЋS–ИZž#п”с5hyЊ х‘ь­5ŽИШ”с,В†о`”hZ(ювikО,&Zt˜4 –D )YCpKoмwLpAХS}ЉxS2ђхЁYCБdзƒт0:Э7…фјщЁPd&ћ…ѓŸМ^"сa…„чTK ЯЉ5HxX№Tgо„Œ9ŽrШаЌ‹кдЩr?ds1Щщ9IКћў‚ћАEЧXЃо•Ю!Х,џ—#X€”Іув†qічОЫfЁШъЊ, >НіюЇ~ЪfaЌЏЪЁрз№ъ‡ŸГ9ИА:ѕO4Ш‚Љžu˜ЊМeћ R7›m7`и №/іш1ЩА)ŒQіШ‰А Œw/Ÿ3Ќ эM­nЪerGрђ[яt›І{ˆ!\‚5bЄєЭ ЙQ‚jm”ЅCh;2Ъ‚ЖЊАKЃœŸ3Ќ эM­Т(ЙWNяш)x‹щсiТСeъAК%Ÿb…ИjK›:-ЗJ[ŠЅyЋ,д,ЗJ‰ЋБЪ‚VќМЧ‡>›UNЯ™Fо†іЦVa–h'ЗДZX.1Ы4сА%ЇL_2“€zБuЊЙY:нк,mщЩХfiK›yud–љ]—f9>gyк[н^с“ўзxЁuЂКЉU ЏhФ‚ЪЗ-)пЯ`’%љћLвRk“Дf5&Yђбєh’)э9ЃШЯоШълžмб†1ЊŒЗEѕSп5œSЄ–hїXЁнл’žѓ цЈе›#_eŽZБ9Rи\Ї& ћХіhТiТ5Y””;њюћѓeЏjUJлљяПџю'ШfсЁю)Jб пбђ'њЋgІ ёихDXк$фZŽl Гo‰Ћ8”їфэВЪŒяЁЦ‹BЅЦoыё|ђвJeЅg†щ~уŽjZЋрЛЌе?gТЈmЭš>kіO™!o[ГЊЯš§3СЖ+ћЌи?#ўЁiХJл bA 4ь0žП9nЭЭЄfЅёќџРеЎўŠШ’i…(dЙ0‘Ђаdчa ЃВсЪxPЂЅвоЊ—хљЮVeчfžЬVЏ$л—Ѕљœчd*v~`§3vJQЎќQ(т™{УШcнsjИ$Kх1Г:ѓ]ГњSѕўЙ;_я[Аzшmœ™ђНЛхч˜е™яŸе‡ ,šRйX#ІТй–ЦS„bLъ Ь$e­“zЪьа:Ѕдщсr™x/Й$і–Ы”žbѕ`_еwHв9Cс§ХVс~h‘ЬЛ…Xr€‚^Ы1“яr\ЪѓiШ9hЇ$”гяTЁ{H(чЇдœ\žCB{Y(SЙ]ЦхOЭ]qГDЖЧМ~О!ўPцVFСХ#W2 х[ЌПюс2 е  оџА?gXˆШЕjЪQeЧAWžLCйKcђBЂч0п=њ7eОƒX[BЧ ЛŠfYЖлP!T‡|JjiЉ’Ѓ=Є–žTj#=‡ъЄ|Пъ”Єж‚qЁ=‡™Я+у~#Игжн.ЭУ‚ЊБx–РT+ЮBЊ%`ГIЬ•ь#g|BыїГо'[џї€Лн!‚х9gLї+ЮИАѕ†АY2*лcЯЇ3н‰ gїnœЩтXw†в/7чКг-zbъ-bЕК3ƒB…~ЌыNјЏЌЗ~щ*ю$<&мЦwЫхЭюч)џЎp=$ЪЦБьeЛУ}zЙф9Й<я8& М=ЈCvЉФ1RhCsБ<.Оœc+Џ–нšGШ-˜ЛjeеY`”ГrH&Ц*”IЏoсйфиГЩБ—]‘’шQ“УяЉБ$Žњ`еЩс)CFp‚žCDУН!#+vШ§ ј#ˆbnLHE]}#Ÿ†мЊNўэB…ФШ;§ эЪ)?ЉœцЧШ)э9ŠЇўяБ–‰ЂAЉLnSMп=&ЈЕЯtxp\lz:PzŽщ@tџt8г&FЫB­Аsc1Ž> Мџ|$sЙM.ІD-§в6]o4œ VI’вp&Pо ЯИ&ЧžMŽэfŽI§gBєzЊODГЂ†дС(}ЬLИуЇ§^Z7§tЭ OyяЇлгMНЈ§Т‹O5ѕbП2єфд;$Дћc ‹’CJ;{у $тŸЃ6ДИх^>%wїES“CН=1y 9єxЄOМdїпшE‰Я&ЧžMŽНlЃ"$\єN<Иа>ё7R$žхЄзaOЮdЗЉK№Ш Юb$&y8”‚GжБЋЋХыс6уєTOТіБЊм—Ž2ЩспЈž>жs*НЬ”'‹РЯЫ_\@ўИсРItЗvИх№#ёЫR\њЌ!.iQё{ђd™и&ќ+QoaЌ…ў•˜Дl6/0ц%ВySЂbжъ‰д(јOЖgЫц}Вr3­Ь•Ѕ!=Ј\ РЬksйG*Ы@Ы*]aвбƒЊFMДJ@з—kє ЋРs•Жh…)FЊ! <г‹Ќ!Н@Uy`™_dUљzLЫђтzL,аo&Њв э7Г@* Щ/Де-ъ€fzЙ-ъh^ @ѓ l^Й@+[ Y^d+лš[Чўц‘—дмzvїР’_dЛћЧa9C}ђЪЈЏш(љ1Ї&RтЪ9RЏ†hЕ`–hq!С”ю“зХ}€šВцJ2Хї­QнHvŠ‚UгŒ.Л,Є2e†§фuБВЦњ[‘:С%Šœk,%kэЉп‰x!Ÿ]f­ŒA9q=Э= g#­ ЏнВ™‡xм•ЫRxЮp [˜hЇ:ЪбТLЁЦђi$Ÿ№>•–bш2У‚lUfˆЁ4 d:гЬбRэД'|k­8Гя@YЬ Э0 [•JMoœ’Э I*й,жААTV]q”…–ВC34ШЪК\їфd3Йзкс мKУшppш1џ—YG—"TVe‰<–ъP\Ь ШЏV4H‹•ЮЬx zО’34ЈЌ‹•&й@ПэbPŽЅЂAЙСФЏа}‡ЏаRіg†•uй{daЅ”ЋЅ4 ЉЦRŒd$г *Ћ2>ьщХVк<Ё^­ЧдˆФ<\ќЩЅсBe!У“fPY•сЯН’*bDaX[Оƒ27f%УЁ?ЁA—™пщ~ў“УЪјyeЌА,M.%V!іLmІ| ІyјB‚Щ3hђк‚Fд_ƒМvˆFБL јЮ…J2ќИчeА”,гкЂšгШєxЅDЊЬИiJЊА„MМдZZJ3XЎ,ў.#yФ|r›ёQЊ5  ™eАЛcЇ5Ii1­Љ3xЎ+— Н0D­7Ѕс~=ы–GТэЬTћы–qƒЌKiЭћ™OІu1PЎЂ™о&ф2^KcЋФвKБфeV,’ЭРШыЂу?iД’Зl(T  Њ}оЖJ1Yh‚—,We|рLБЪŽУ)J u`У‰{џчЗк#ŒTN(Ђђ,5Ь`Й*уу‰Ё^ћб†ФЊщэкSЊщ]H;/oSšВЌ,ЎamlФС S)udCМxаа'‚-MKYa>qUV'f_eШЃ…Ÿ&ХlЃIН—Сј”мЪЅˆЮŸИ*лУЅё€Ye{рuІQРЭЗХ IjŠ]ШUзкзE{М{†Фz“VЛБpД|šТ9WŽКЛIЁи217с=q]МЧэ8—ЁТtНxb)’8Ч*ИQЌ‰Qu!вЃ3Є'Ўlг5ь8–Я2HUpк g­БtтОиN-Ё<М.угФ$CїЂZrхЅ/ (Ив,,І.gHЏŒєФджzц6й‹—jм“Y‚VЪоЛ……lј чсДВШl•Ўє‘Ѕ^ ЎЊхОМKa!_(Я№Ю+Убrн97/#ъ(§К’цп—YШЭ3„‡WeqЂЋ?ефn3ў“Œв"YЎLют/ф зZ\xBKжЮЙгђ*ŽюД< -у Ы‘uБё‚[TE}}7Іф8кW—ЄrЬ ЏСsAr†хHZ_,Й УIx‡я–ЖиleГ8‰-ѓЭ3Gж•г“=oМ’Gјй2Т1x‡Tсшm"Šy†лШЊ,gфˆ qє ‰zS Д#!лXCвB‹Жy†зЄUOCЌ Mє"бЁк-”ЈБj‘ЬMЫd‹ч^“Vej’OlFp‰єmJ#Иvˆ6ЄкS“в-шQ@ЮАš••0€6dw}ЊaтU:ым“з­тлО‹(]Цои ЗIkлHP8Œ6M!“šоmДПUЃг7oщ2ыb6УnжUФ@›A1х]”4hЂзфЏ…8F[hслfиЭКЊ#ᇇʒЙ20Dз[ЇсЩЩЪBHЮœuU0ˆОrР’nвЋЂ9бsѓЋЂ9ю…˜mЃc3єf]Е bi‚хa|WдKв"˜›кx{9Ї’т2ŒлfјЭКjјў]ЖR1юšиЦw+(=\dU4MИIМKi3g]U Ф+‡ “A;цS˜Ј.[а&ьЦбІЫ„/l†цЌЋh”ЖчH_шЈў QN1еNМvх…Єr†шЌЋfг@%ы$8т,U^„# ё­ЬNЧ”В:3Tg]% ’SЕКˆ`РƒQ]хPЏЭ2ТВА,*3Dg] њ6ІV–0G4hTиa› ‘j3.юр/ДJ[fЈЮК*8>кг‡ ИЄEеу>ЩaЕШRМЇј‹]OŸ˜xCоPZы&tтіIvРr/ъЁ2ал]= ѕсьXl(С({ЃZŠpЩлдТUr`йћ.тљ7IНph$oИ†šdˆЕoфŸД]вН #о#ћ(d+Н=АЕћЕ­GА/ЛЁœГш3ЖVжЕrR({гпЦх*Rл&фЦ( {Ÿ;k{]r‹47fQhуй{jQзнВj_TЫ:Q]YяЊ=Q=lm„ƒЁКЦ&Vћ"ЫыDv…нЌіE6­йѕЕЕкиuЎіЗкиel—я+Wл5[6ВЎA >EС$ЖеїКнЋЯ}ДƒжXјCѕЙ_ь~ДsьC4М:UЩ!ЅkjrЁ(ў9Њ?pq!ЧP(|У'Q˜њPwМХ1Џ?–€'ѓаWПѓйфиГЩБ—О„Ћ$\tQёfІћљёk5ј2ГeЁiЈл˜ЧэБl<Ќ]q0xr.ІaOmЧ—MWАК{ˆЙ'М'IiHо(opалКt69іlrьesЧ1 В,цН У$цљ1 ќ‘lŽЁ)ђЎŽВGГЕэK.›6н‹ƒюф?JŒ,>ШуФЉ PxF^Ю§п-kn`^ляЮ&ЧžMŽэ€Oe˜вГ№ёўХЫ?x<‚o|W4ХЬŽшБo—Фф7Ч§и3”CŒ-ж`a!ХЬ… яцI1зE13˜ДLD,FЪ6 №љ:9In…=4bІ0xvЏЌ*ђ"СЩjZк]НКЂŽИОƒ­ŒqhCsУ9˜ УpкфЈ_ЙЕЁИWАЈ'З+пы Дž„#юmb)ˆојОdїК-т*pНz—КЌ˜GHћ]tZВ РЈ.+Еc9TсH&+ЙА8‡ћнСƒV˜ш ъ=xл†МmŠiзз 0gыc›\$K3AЗ=BOEйъHg5іlrЌ•сЪˆRсeЅЙŠ*Є9/Ќ?†ŸЏG8ф@œ\œ)Р1‰ГыWЧvq†+OPД–чЬƒc<ћŽчƒчж№&КоCвF‘С z?XеЌ­ ƒС‘яsЈД…КŸLw) ѕЎBž`šюьиpoblnI–ЪВК"пячЩ!—љLanМ•7LВю”Ј\nуЗЪ"и+’ђЇT3в|ˆъWўёУЩеіћАГ/јy€ѕ*Ѕ=b4)ЅщRšи—цВ—“H[С<і,ыD’bъ[МкђйХt0‡ЈољmtjвТ[ ˜Ew@ЧHЩїR4EРФнПрњњgН*]-„—PЙУб+QF8HŒБЗiЩС6ЏЧtр'ѕbkћg ŒД.†p `0q‚щ:‡˜СЊс tвŽ1xф”|Uкљ„[; Ю!ьЯr>hЅŒkd:Q­tШz~kД d3,мБ—і"шах§щещіьsћщѓХщљ'ќїѕ?N>nOџyО§ѕпn ysrѓ˜ŸNоmі&Р_ЮкПн‰7—ЇлЫыSкў N]Бѓ+]5awтц§љЗоœгч?П?9НјšЏ>љлХХGWˆ7лЩoХтkзы љ&СхіфЗvgbЙ ’пžќry‰WyќсфлЯгўЯ5ŽŸп_ќњювqЙКќВ­Џ<НxћхЃ_њЅ–O_ы~эё›7_ЇПрзѓр9=?Нzя+мёŽяЗчяо_yјUюс[.wœl7лЄ;N~<љzўёќЗ-ž1\‹ЪЧэеЩщЩеЩ­X\!ѓ^л›гГзџѓџљѓNф~zћіѕџ]\ў§ZЁ91рфЭХќђя~О9ќгщлз>eNЎ~>џˆ—§ъѓ?п§ћз  7'ƒЏО}ко~iїЕ—лЯ_.пnџњнћЋЋOЏ_НњєхђCsqљ_‚џ|<ї‹^§яељ‡џх7ЙQ/>v?tїЏzЯёгЋыmџпЛ[bqƒс‡“7л§ю?yDуЗёхгЧ‹гэюђkроѕuб;И‚ЗгіjЪ};ЮЅ\ џaо`іnчн-6“WЇітшf”­Ÿо§Ењяч]ьvDŽ=/АКбmќжч.4›ГхvMШ?k‰ьŸ}„ˆИ—"pŒ˜щ‡оНqїO'WяћЗТ$Мњіžс]О*Ђы?ќЦџ>ŠА^Б0ЈљGи{:њлQt~GЭ)˜{>Ъ46уЧl|q™B‘Ѓ\мєёnМє•yQиЃ_ŽМФ|ц qуЉg„ѓŒЃmц”BбlВЇБ@мШУєў‰lВy:ќ‘х&сНс™НС\$39‚’*јi-™ ГрbxРЮ~n5J.9СѕФkУeОž^РѓpЃА.’Г‡ЁшOѓЗ#i8@бћW’w ё?rЫЁŒЧh>pзI„~;ЊАєюя—juъжn@І}‚AчНэўzѓыosѕћjџcT.?ќшgwжс5MНхЖ Ѕ@Юe%€ч йVлxљ Хь2™Чё .›bЪмЪg+ ОP–jж“‹GI’X[Y  сj(Л|Р -œ2ЎЭOЙ”іЈлw;ђМ_X6<З1рUКlрEu‰‘d…vуЗ“%P‰.xНQl“ 9L?ц;sG™n„?qлзЛ:w†д%г#/сд@[МA~…–IМю~чкыyч›МЭ§b/ы|EПYЂD›‚я LџnЏћuЬNЁ™ЉВЧLН„3=МxZЙsрн~a(ёMяCw*lТRхпN§,нпЕCš”"”цjРЮ%rЇ-xžсйo]ХLпЛ,еЉЏО†Є$PІ2 ы5fИїЗзm …xЄz$?Є2ћnоh6†Њxf}ѓСJЯ‚TЁ{‚с+їFŠЕa*œЊќPйh’*_ (Њi1Љ*ЯхУCЅюsПxжaЁJє,Pq8Нќ[Ы#QЈќГ€sqЊxшёGФоО}іхa.haWођхuЮ9ъЏя4={­н&40pf…жЈžенЋЧ:Wп=аhPcНЧднћв­Єfпдъм№щ–~А'ЬХЭ•:Аоє’Нœ}*Д:Nї…aєv“тƒy‚.лŠхжЭБvaэŠzBеwгVпКrS^А}ї Ÿ’еAА_мTЈ]ёŽ‚9œПМЫЫš›Эс нbв№=ЯєoЮr!ѕ2[Щ›cћЧЌкз0ЩѕцaDЌ{ЭСЫ 6km,3ѓ\­Œa†dLж0‹ЯЁ=ФУ-С7тŠRцх9њ§Ж№WGzОыHѕђH_бБЎ(Зу;HžР†кKpС­ТЂЧ/‘ТћЗвћ\пvў]ёuјЛГ„qeM9аж}мё,ЭыиBВThСDŽјьНCл wиЯpюђ…ZБBЙёwШНp9ЛC }?р$Fэ яvун}цb-ђи,V_œбјч-Фl]Ођ†|;/OьП|њ+/ŸХCЁЙNF‡жєќъž6c‡зƒJќј˜ц ~вЇп89gњцб;сQз*:xНWk){mш,’[зЊ‹ЏY#”YяУ ѕН ‡…AЈwŸ(иМФ=5‹ЉМ‘Й$B6С‘s&…ТЭБК.лдУB Y=KFMТ .СBИDLй6 аТЮˆ%дл'ЂH*я`Л”!БЫWbр2hС"жФg>v~{Щп(бpЉТнЩб№РЖКПшНХ fб“ƒ%wг^э* Z yАGЪОЊ]2ђ`HA"ЮвДБи›рКwжЊ^Š<пмЈЫ– %ГЇг0kЭ>‹!Ž/йфКgПKїЬўJїtьBЙ’Ў!З7Lз‰єЧ_явљ`]H‹У< …,г*ZьCЯcН–ЂRA­cНB˜Wm(ШЕA YVDŠу=їђЭ!ыbЃХ7kЕщ Ÿк€gQ-Ф–qœиZ‹„f‰zЉ`аќЩ x„Žйg_?&ДЅDѓЎ–p—›ЃˆŸс?BxЁу,sуќƒjwСZФmќ4 š­sZУ(н)Žтš_Јn”ыГщ’•ФэD#%Ьшъ’ёЪГдыmˆƒКЇ Jl:‚№Р= ,xЎŒ% Щv…SS,эCемУаёУR3Lє`Qh+tjъЎјqэkDНˆi[ Ѓ–(Ѕ~В OјkЗеss–ьБь-МБjХ6jьќ'Nд oN :АKо‹—xЊ,\jік'я]šlЯКnќ #Ьў­Я.Зхн”љPѕ-ъ"гњIfџР|цUШaьУ0ёЖZэWўQуи†э т ыq‰vЉŒ„f}йК9V9єЊŒf ћ—яfєЅMѓ0›C ъюа5 фИPДQ:ћа оњюFЛ†7Ќ…iњIіяКЖИOЌXXXЌФВэ№3тсеkЖАн}Зкn с БZгR]vаЎг’~cZyП§!>3„єб~Х9m]7Єˆ&Оv;xa&ѕ`лсКёŽAЊ „шt2оaŠ6cчšЯё СmўљJЎ|@Фнw‰ИU^ŠИ№ƒC[Z*‡9єAНѓмІЅ яpХNїсяbњfДАRћ•Fˆм”oыЁ1уfщМюF… Хr„і&{х–8GюЈ8­ЂЃVДD/ХCкО99<Ÿ:`Бaю‰яэrі ЧeбmB…EŽГMƒј,qh№`8м];м†р-h __Я9-пфй!IЗ7ЦRжA-aШі­щ Ctб‚kХпЗъѕ UНdГЕ]ЌёI‹cXЕК,iѕ•KягC&ЧY-|ЬЖЛї!ОМW­oУ\аТКY]ЫF^”їщ‚к’тa“9™ј‰W–jА:К™+Кежы.ўE|ˆЂУJex'zh*М2Џ%Љ}Mь і0Щл.е7Ј`ЌwAУ:Э< И‹šрТь‰S m aЗhсOU1F|Jчh*Ё‡дw‡a‰cзjyЭујД*.W‡Н чЛHœ…@пцо Цйm’> АЧЁЛуSћMž' $о'ьL ќЩ'?Ёь+/ѕm•o )Д$йУ‰"vёър`хВlqВmѕЧЋХі&„епlї‡yч]hз‘^Q hё‘уZz3=ЫСМФnЅxIД‰C§ъl‡#:1}—ƒaгЕчоА‹}$B1{1*р'кЦX–рAmcˆvкАУЛ~o†C Ч‡ОХ’o=‡Њ4dпРž~ pхmš…ТСыvЩbQёXŸ` u,Hэ—kі~yИъћфс~)І{ЩM ЁЃZ#o™эУшB‡Œ|“9^ШЇ­NJƒ$А(UpœУг…x0БЎAл3а7Ÿ`2б№ u8*Ё+пЧ$Œ(ˆЫORQt!EиЁж}нВЪdVљU~1ќ}Џъ %іt^‡9ЊŠзЙСєъјЃоќ}ЈOhс("т4_‰ЛЉeЃ§чЭžR8ŒаBš žМVN)м=ˆЕібнCЫ*dЦ!кi.N“<ЖЃŒ‡ša,ё=Б2їx%УУšWKD•sœЗfЋЋ‘дšцžžя@wђ>a,ЧЩbЛцГ95Œ–bG`удГqCГ$ 3+>dќ`э™ё”0ŒІй"Оў˜Z8Щцpv%&b—VЊаІ8Ч/,M”Жˆ”ъhЧ‚!ЭЇќЄW;Ёwе• Љж~пЦУЁХЂZ%…чфXдxѓЂ+У‡/b-В"ЄIцеЭp{зтт<­М™–‡# g.МѓЁъ%}Фс QЭЁ‰ Њ{(о?pђCЖ;$2§ј`oЊ™э<,Э•ЁЪ+Ы/­[[З—D9хы˜x&.МŽџˆ#.ZHљкž[cAukHф4ДxљЄэ0‰Дp‹§™P‡VѕPУ Г%Ю|иvŸ УZэ†/Ќ3гтД­ …„RI!еТ+ѓsvьЩбsjиџ{њ9ЁЧLk6ЮтѓBcž|ѓZуHxy9ІЄЕЃoŒWРѓнВ 1иТЬ›{)h_Ц˜ыb­RЖјцю^ZDaэВЁЦYюi'єбŸп !nG ђFНЖЕџл|ЂК)4CтФЛчнёB’šрљјfœффњ"ъуV>– 6;CЌj/i4…K†‘BЋ {k§:тJ…*оЋмJ*t:Рцn>ж- У)mЧФЛMTƒч`9ЙкФ|3~OгnЧŠЦMкW<œа…] з–аядYэђmљчжЌаb3cyхhъа8]Aіји_тЪnЎ…Єжљ 1кгџиЈWhНІ€RDdлЖП-–j˜љBvшЪƒK`–šaIЪ‡PH89E‚П'їЬmexGАкIъ'Ћ…RJўBhХ‰xѕтЗ 5ьK‰Г=JБ@•/.CЊЋЊуЫVDТбi”cXєqхз0HьJп‡itћё›з:Ф>XuѕъЋУhЖзc™эkЭŽeѓ‘ЧНpт‡D}сxУ„jТ|Г0УљіН}Р]zХE~N4†Ѓиˆm5S„у.ЫœwэpйчWVгьЗїe€П*‘§6Щд›Ф‡ysРЪЬBioй#aOaЖ xлVc0щОc+!ЉT~6(%Е.Сщ ёЙЁсъйЕ >•Хt4ŠН‰ХjeeЙћ †5pШeЖj(цTl0ЦCˆПъЉеБ і‡Лaя’[&BˆhЈ‰ЛmЕv-Ž[IЫoѕн„кVГЅœ|D е™п‡5ШuС%тЯ№т\#ЁоmvŠ3дЌ9зцьY#]о„Haf†~†cл„DдѓkB1)<щx S№“Ю”AYТ‰њСY:ˆJ;…АЯ›C *­<ˆC‘лeyvМŽhИrсяВ.Бт€јќ.Gf‹ ЙtФс6ѓйGЇЄјю{Уг 'Y%NeЯMT кJХ–‰к^YЉйbZИ;ь5ѓ[ZИХЌ#77/.%?C з}kqiЮлQŽУ…/|ѓ'Cц;`ъЄЎМ›@М61Œыiіcьz‘=ВтИ?рчаŸ2іУPTАpшqŽЄT3цщ-?…qтаnЉХrgХЭЉя‘р)ёg вљMЉЬ:ТuсРЂM`u{Н:›ИЬ wхSYк{™§HB+VЃ?МLМэ7e­ Zhk‰Яˆfщ<:wтДњfb„Xbaи†РвuЊ§и ЮЁх!л{ ‘-›Э‹Фа•a•jрюиQ"ОД +Ј Fь.ёЯrЛNИzЧл]$*Е$л/$ѕu™ХЄёзКћ‘ё3:ЁIIvВ8›Bvп#šЫИnƒ†ќАeИх-m]Й1ЁЊiё)Z№Йˆ№Пм„Ш№їЅќO§† Б&Ф+r †пвœ0 p †Н[Ўœрмюћƒ9Дs* Э –ЪHгš…эОyТЬлVs)WД3Ж„™Х›Ф™gf>У(Ц’ЮG“+ЁіKИщЩт`Р);АЮAФ ЯѕЄu$~аљaЎbИж]Ч(ЬЉ[mZƒюЂ‹ћж ”гѕЭaЭ')Q(EW†жІ`[‰ЫЧСзЉиCAЇCићГ~s”ОХ сЖwХЬtˆ….LНйв Ќ~1-lХPыAы0ˆхeq/пM6рŠШ&ш]ЭPR‰”’i‰чHRx–ЙУ~ArЃюiеќшP7DRЁgК^МіT)Ќ‹ЈеBЂnщбg+ЭДŽчЂз^ S6ЕvЩзџ€,.b‚d№аnэ"ЏОqюB‰'†EfcњQ›г Iн/iЉA&ЦБ"FЅOЈЫЇIQВCC`ЄB[Ѓm‹‰№†й‚*Вx_Sб3)TЫ“žЄXЎюЫf8O*tg@AЈщЁ5 ­ито/TаЎМ"5јаАUЇЄ№Єё…u jehНGббxЎ,KѓL^>pЕ#Rœq?kUVfј[Є•Q aƒ9,€SДОˆёкJ Ёn`ГЇїF˜Ы}ВŠ›9ЋR…С­У'ѓ+Б€њ€kzFЦЖŠ/јЬЧ3уЬz#(AЋЖ}B-НУ„|й%ъWRСЦp€4ДзTд}єcЃyaUА3Ї5GтB똯ˆЎ„B‘6Ффєv ЗЉа-…і„J]Аqv­Й…н#џиНйЁш‹Ж‹­ =СЫьА*4МчыwFјOmџm!ƒ&Дэ:.TТ ЙЇС1+VсdЩТ jЅLFg&ŽЕžђЇˆ;œа’6ЉГŽ{Ы”[№хёОœ§WUЊVXЕ!3™бЄ V…ЂeЃ„ЙК!‘^2жfмž#4 &]Іƒž7wдМžбGЎЖlд…YN%%OЎc9‚N€\œ„7Еf&fлEёO™гЫљ–жJ}в˜Ф`зfцOЛ'ІЦ-ЮИrSƒ6Nu€ВЗАQ!ЧђkНи)у‘nљЬєN6oЪЧА98ееНфшКЂoahБдЭсс‡Р€ c›Л[ž€8и8єРŸWТR:цAп<‘ІгQ5 •є%!ХŽЮ@ј%D|swГKЩB РKTl- !9C2ЫПй:нG”*aбюЁW'§ЦБiс9tё16аЬ7Т БЙ„B@КaЌ†_fA_cџЕЖсТД IїоУ;WeЦnbфнC ШT1]IеўСtЫ7wц€ыXЦv,э˜ЋЃI|E4Е>Б1Чfк†ѕX‹%‡ЂJХ ЎЉс Ў}r…œ9ЊЅйьБЎ)“€6еЛˆьˆŸAВтџЩф‰5лДIљ^tКeћцбЄRЃXяЇЦJOFZДtD)Џs№UЙ !9ЏŸЧjыЄ8Z>5с()Ш+’ѓyy^%еЖ™JqЏВ’/oИt›TЪ^Ф„+„ЕOИaqЉhaыя Ю…FZО{W\Kё:ЁF/ЈSсЕrтњSКhб}ФД (ŽZ-}˜Бу'п<3ь?0™нДіЌЧ$8Uнкв.”ыњkт'‹У=%”U.аe–ѕЪ•m-<(щZŽі+фlsИ'N|iЩ‘…Š\ѓ)СЋ ­b@-'ьjйbЩЦВ“xƒ*ВdI‚8О=<чг г| ТŒТ\,і“ЖK%Єrг>œCa.‡.4еР0ЄЎŠLЄтn№$(=УХOPУ%…{УЪ‹EЛО’­sГњ$=ЁЇDnЂс6lпM‹Увo: )ДPБ—(•dёЁ RКSД…рЛ›ЄЛCгWПehою_\у„&€O\]Я֘/ywШŠЦ__L$G ”Ї‹з­/гgЧ’uiЛYŒMPД’J?И”fg^ч†Џ †І[Ё}SU5HАќЎ_|3Ьq(:#KЏ{ЊЯM8П–}Aїнwњ1SВF ѓјС$Љx0•p!1Dэ>яСЏ.`†L‘МшMцЃзq€ŒTdз+І­йNjсхцR„НпЇЈвŸ8„г­ТRŸ-=ШMžF GќBї.,‚OЋгДm/PŽТІ›ТИєЪТG| ]н!ЗPлWyœЅрTI—&>+Ье%oXeд ]y2N~=yfZ2ѓТгв<бщк.6ˆЯO„гTэt‹/ywXF#'Тџк˜иДг‡Э1ќх—э§ЪuПЋJх‡sXЈ\‡ЊЂšƒ+tˆСа9E{U=>МBCЩтK‚qYCv ­.ИЃRen‰мта„f;Ої`!/=ЃQtЃ'“)ЊкOwˆЎЌT\ф9aˆњ:Jќu0Ит ЈaŠzБƒЫ]•КфuЅЭM@šQIєќ/žЯ)ѕPДъыu:Щ>nХіЌЊЁžГ [ш2" oъ0;тwДŒЫ…ЉшЅ–žЛUЌЌ5’Ѕ`ь ‹Ђ_$K=64p™Нba€ЙШъr€ЌАєЁюEЃўNВ(ќНиб6хwЌМЯІ6Ek›К9йЩп,ZŒMNЂћ7kJ(*ўЗ~V]вšБаn`„Ž“c_нрх+3RNЙСŸvQьXх††—/ЗЩ’ѕЙѓцIrW%ЧFѕ.nv›#иЕГ…I­!Wтs˜СDaЂЈ$‰ŒЭA+мPЭт"Я 7йAЉяFХ"G^›нЛJX1з—Jны 5 šRё 4‡,z:š^ВЋXєь8‰ўєUHo‹њ‘ќ?!yӘ‚>іД‘г)?awŽ\гу=k!КNўц:ж\Ё{Ш@‹DРQ~‡F%”Y5Ф№Ь{УыПК0єртˆa•^ŸтPŒю ЧQЅ}•Ъ)еb-’ЎTЏш^ъ7Фб jНЁъжЙюЬЫoЕ|Ккі^3Ё}јdŸrэ s,6U3$УQqЬцsиЫ‘"ˆЗDЊO.LтъЃY]ю=до ˆЛюЅ[Oд`E?wьъ‡,‚т aDтё83G8эXDб*4Rба#БufzНq0ТЁ-\ПдYБFЪ™!іBVјбБтDѕYіЖѓ1!а‡H].ю ь{ш@ уХ|ШZdDЋЊ Ё*Ж‘=Ь›ЏG•PŒ”7уЎл|ЛрЫ‰>„s‹Lпоч9ƒRПŸE%/% (ћ}^ˆT[".=а•gЄ“д|іhз&дp/юrхu;­p†|wяrd+DгЛ?RlBMкТ‡ЕLl№ф5u3-lAЃИIlUЌѕ+mДfЎЏMх>‹РвшfžЪ \hГnЫ4RˆBh=§ФГB щfТaxjП‚п{Јh0Зƒ! Цшб…$„iW№.К;Œ–1š-‚PК;lЛ2d9 CЖНтДЕстХ{K>{ЈBBд0ЌЪ†‹ВZў")dбњнvьN[N?‹кЯ1я…уц CŸЗи™Ђз‰ЏНšU*/.ƒ‰н*еa—†GЁŸЄђЇ;Ecк-$Ђ™…x™_Вхэ6PБлmo!ІојPqіGojN”]ЖЕ@”уz юŽгЗ9Ѓ„еЛ‡OeVф:ѕ‰t>щ‡*[r%— bƒOAl!5bЬiq~|ѓъѕРКЮ?CœИvQ}.аТХЕŸŸЊ} юи^œЁrкЯ/ЭІXp§}мkЄт”т<Њb1ГfЖйnмhjFУВ зœЏл‹ЉхЌ  ZQ•MХ(ОўђЭ„‚ЁЁпОЇ œщT)y$ј‚"ў乆Нм s@яRaЈ Њ \я0NDk\(ЇЄ`щQ˜JKтЬЅvьAЄXоOŠФёжKž№ЙhŠ&–ЪЈ›‚ˆ0<ЇЉЯž‡0 W6u9А>ё‰[w‡чL1гаo;6І Axeoдhв-Њ Ч)bРaj^дт„V…дЩnЏXЧв…aЛф…aŠлŠv--lV}|Ёjэј,jh&šЙщ”.ЮџЈ14Œ€ •ъ:5dOƒ„ЗЇZš)tЌnІcјщ№;aѕ}MМ$1Oг(Уv‚ЅgаЁо|s%В ЧапP7Ь=ІŽpрЈЁ™@х*4тцАž~В*@яоrењŠv„›С{w&ЂBЋ}dW;љMАњаЋ оUкYуfЁ7^/ва@э=ЫыШАTЖZѓŠъЭлАЧ;œЋ–ruа aашФкйљпАХ<БЕIX‚|ˆЯ|Ѕ ъ‡Ѕ@xћ$U \UХнКtКРт(_šd‘З*в& Љ&й2Её˜CGОКОБk=ZнЙе}Ў‡NечL*p…8Р‡h…z(5Y‡š\œ*‰ChуЋуђšu1—eЌЉh5ltн‹уЛЙМ†žQхЖЪŠе€GoІ^rt'ШѕtЦбё9320†ф™Дf№ˆ>‘cvuкKHЁвГл˜Eгб.ЯаMЃZў ?е&M*RПXhйЩЮџ& эNrˆD_hyIЙ}—тP=уSiЅ0кXИбм‹LЄNч1Фго’“mШш„ЄЮt!!ъемdщRву„ BQИSx”–Б`SИВZЧ>в~Sк,М:ЫЅuaA P'o*­_дIJS/41 ЈВelxSWќЏаM˜ˆУш{фE нПђюxtЛ–њЁюЇОz„’/еlyZЉю.ЧНЇŽ–‰ФAЈC=ѕPЛћДЇ"-"еy{i/зћђ]U@ЗОўPCьРžТ*эйёI€в[ѕИъјdŒ;gƒЋaMА–и$‡яоd:}нХђѕ•gљИR™KУЁBT‹РЁсЙЧ–мEз9’ z…NЮMЂ^Ђ",згмтнIѕЈћBiI5;7юбоЧwбxGYNXœf’8иЎ­weЊaœ8'KŠ\Ц†‘є щAМŸІ“l"MaЏ:mЦОyќцд$<ШObp!Ё.–чЊ­ЮЯXЄ8=э|ZjО† KЪOн duпдлАH*PVвн 6‰ˆЇ?МJСЪП$‚T–ŒœBЕѓqЛtїuнИ*ZoьiогЕ "Эuл—ІkГ6т Z3j2 ъПўnм'|…/а“ч7*v^ИЖPMХУ/§wnлvеvзЋР&Л)\Љ’–tc_ŠЄtКЌ€Ž Бlлš*mО8Ўj‡$ФHKit”x}‡y‡І>ЕыN{4’оЄ,:ищЉУ[Ћшœ–{ fMъ<ёЌ/%šЊDЃ V,Љn›`!Y‡Є *!К.ѕ:юВxѓ@[W*Ц(ДЯ7‰Ь EЇ!>œ†|ЮWЇbСзб=  šžgi/‹5ёш9`eШЮ ABЁ[SŽlN+ЭЙЦ#?ЈеЭ7|ЩkжяHбТ(ёGSД&;х‚pі V™н]C№JN+­]VА;k"›bžь )xЫŠЂг" …0:W*™ ŽЈфc(:s†zЭЃФIkbЪ2ЄцОЪЙЫЦІўъ%Ѓ|@ѓМЋ„шЖзАDvЪђ ЄЧeЙЉИuЕУ7dSдGKwˆп94ТrЇ;РЅYмЎcИ;j6ЕВЊу–P™woUkmlŠ/ lзЌЫWЏ=y$žЌ>n|‹Ѕ}§„Дць’Яj vС_~Ч{*–U 9…ѕМ#Е‡О94b™fуюy3fДЌ№ЗšћžQ-GзѓkRMх„ЇezMcШще6AW>"$[‚ ePЂВМи~r jќаэOˆ,ч6ЄЙ Єыmї–Ћ•‰єzJшEщ~J6дЂg8-B5єт„†­љ‹!~1OЙ ]oŸЯ\?a дm([‹€Vуџ$J Бyќ›8ZкфГЎ ‡’›ю’яа}+oъо#Ю6УzЅo–]ї“\Й4s˜t>ЌАхОбšй0MaŸ6‹ђ>эж›pэPн~&й2obй—[Нщ{Аt:$RС"л#˜.ЂЋ~џC‹™‚%Pь+q=Ž~ќgЧќЧaБUнЈІЗЊm–#s;Аt:FЗŽ8$ПжтыїГџЎВ•л_уaYEЅ$яwњ#…NTѕвG]ї"mAкшC:p:а€E4*ъ›Gœƒ›ЪћhaБлшж8ЁФеmE%‚ЬЁ№<ЛњBЎЊ] }}šКњBйЯ<Ор6Е“…+еД+!Ѕšа†:e~%НжBqUe­у`‘`цJ 'ДpzJ­ГohGЁ„–gЏОкгMEНŸEћЬ˜WлЈЙ~ +„X­hз KЄ+U ƒEGуЩЇlл6aЏœ•Ue€Ž™TкPXu)і!˜бUCХ‰Ђ^BKоЉ'тGcжˆM*єЉpЌ“ЄJpEx›jкrы0д"“žGЇIAwуЎ)О†Zˆ„oЁu7SіђСM˜2D=ўњц' Gхјб {uEBКмtї!јqnuаoGЅhДkКђ„Wxѓ›‹фY“ъHя=Ю›э03ЊCTG NЕцRЧ&ZЅ[л}Ћи*Q;˜K Ф`fx}Ш+Њ“6˜u} %[PUs™}ZOЎlDOЇЧПК…XдМš ,ПP!+Џ#зцsj(–u€,ОПЙр™x™h(бчUv'ы†ЄџмтњjДI№vЫXкЂяšгO?ŽФ•8OюЙЄуќ<ЁДš›–`/ЛХ•Cч РVд“HСЏfЕ) 'нKMu7?RГсч8 Ѕые*Pœ0С—}ЋF\Ћљ4’Lћ?ќkŸиCK‚Lшж‡ЎъЈ_i&vхIъ—„Žф ­ц–]5\шz …˜Ql­ctвшЙG4H"Š>I#VqйPZ‡aвшzmєLW(Љ7WјЕŠзЦfЊДщХѕdё†і ќ ›Е–lfХ[Ж;к6­дЂЩяЖуЉrhЕ8;0Їв)ыuamОtќ”KwБV›њПњ’KоЏxЮћJ:њKрDg|^АRД иЬЄlЕ+”0г%ІyЙ‚qPуєГDЫIЬё^6Dю’Ч•ю Щ_ РМнŒпЋ#ˆ*LŽ•›•F;Г ЉЦ#hся‰щРf:‰G|˜‘с Ч­ѕ‡јЎй˜т†lŽ?SŠBЫM3JЪ0:J7 -(oйш^RB)e3%yмў‰KšЄmнДmЩeТ5hzВAI­lзЂQP]$—i!ЇяHиlъAБЙy!‰чXЊ‡-=i™TуYБ`ž‹d^gЃМђцўба{Sт]EЂ`ЄвъоејNі`Я ‚+™…3J†нуœl`feg4‚[ h•Ж3VЩђKkžjњћЮшЧhП@u„e"Ь“ ИВŒcІтLсЈФš(Ё^оМЙcСаЖфVu|<с›ШЖХPљЄU›О‘Щ-ЁV.=rК.vЃœ@ёЄ‡PКХ4ЪЬtнЅ{љ,Ѕh іЂшSЉ3‰MЄ№; ‡šєzf"›PЖт/ž)”—+Tgv4юЎТiЁ l*cРTЭŸŒ$ъsЌ” †­ђТВюЊЙFС Ї•$МЭbжФЫa2­b€Šqb!z­Žj‘аᆂАЅƒUˆŽ'ч„HXыиu&™,6‰хsшd‡ОіщЇЊЭЁ“и’:“uО(mяKvŽ—MљЖ=‰]`r}Ммщ,жЮŠ ?›.ЄZaЗЇз91ŽХШ›уi{H…Йts5Т „НYъ€ž(aЧнb‰Г<ьTY+€ывF|Zs^ŒЃVћюз}в1;[jзИ Ў’žНC§Иaтq. rH^wљчіWƒ,€=Јишœё ьMƒ2Є@Ё€дЪNŽ РЄ6bЊ]Ѕлˆƒр6Dж’аУЖAxzoxЭ4„Jї“ћИ-у—*BS›О Г%H 1MЕ% ыDV йM›­тxоЬжdТW_ЙЋЁПжБэс3РБ‰7аIЊSM†Пhv[іƒ КœЪ/nuнј%1–ƒАQbUђkX[ бbIЖР‡aЅ@Нбp*   хf?v§Rд~ƒЈfљBžКYтroB;_XЏC ЗwєћквёЖИ1Ђ.>G.Q5„—PЅн[lкБ#Зѕe3ъm'C Є8[:c Я[V‡кнмZБkшњЂ,›#ТяЋnєЊг7nкDГU—tGЗ(Uw„КmAъз[6L№—gVЭњHлRœыE›Ям ЊŽmpѕAњCg‚eЃ•"­чХ@Ч‘|•Т'S1*eTЏ|№QsŒxŸеžƒЛПmєžQs/йс"gИдe„Д)Щ$ь#ВЈрXМWЩUt  Е› Е@ї!>šДs:ЩУ€”œ43е!ŠЂžІЯЉёжcц>)—Lа|ЙhХяKЋЭзЭѕdЩУ’зiRХяqу)-3Vк`XїьрЅiR\ŽњQmˆЌ"Ўщ_Гwд–"cgЫМЗŒЁі]œЏ`LыAf9LЖѕj@mй„IL›юz„™OjM,\9‰ДuoсГcчЫи№aњkœ2аs'U‘u@ЏЖwLіKД№ВЇc ъ~іu…ьбXnџжAТжђПI‚иAOštc›€ю*яrшyђc(XВ­€Hч)сњ=ьM &A2”щXЩŽеyZЦMYN,/@С8X ЏЅ.vАЃmаƒЇŸэзИ,ћ:8&§VŸ6јqлтЉ6-аLЖT&№ФўX‹ЇR]ENNы”І)л+<8Љ1š2EjrЁ Иj’€$ІФNвЁwЁ‘зЏ+œ|’г№Ч“быЂ–PEЦбŒWЮ/qyњПр󊘽й-q4˜ˆЃЇІ˜јfšIД0Ћq4h~уnо0v7Б0ТDЋ^5k‰‰sŒ*Др/LУQw<џyвo•Ђ?}alѓœЫwc† З(B‹lKr[\Иќ–з€h;†D‹~н/Зсђћ}ЩЉљКП]щЛљ(•LEайКoњ­уЋОиюƒЏЄxЯтt/:йh|ЭVёЃъœ yьi.ЧЫžю3пŽ–аX9ѓбфЪtœ ”'*С&v†ТШУHЁ€Ж-ЧоhlrЏИ*^3d~Pщ:"фA]ШЖЕ@@( ГЏ€юH­…нчуоh6\эњц1kLУŽ>54Э7Wц14g`AгZЗр ?јЉAЃYХvд&Ј,ъ>›Dч~( ѕЎггиЈZ„Щ№Lбі{fбвЄ› ŠJbл%RЅŒЈA"{jŒM”ЉЭ?Y4єS\K_œhBWq2&ЦJ ‹o SMNѕJ~б•мt wЕ@$(DП‡”J№–Ј“"’šд4Mдо0kв‚Р_[Hr‹­d0'‰фu"в˜dФДIaZоMНk‡lXг…БъtВ‘Хp7"IXВМа№ оф!&ЛX(UPk…|B§шђ•”M5q`А*^Ша шS…дыђТВЭ‡+ЗЎНvŠЇ)В№ЂгœЛЌ єйВфЛУэq4јч|РЄ‡К’i5 ы3РФT wЃXAyІlЈБ;ЮАяІ›O}нЁšќƒЙ џэc9Аp)ФЃIДѓ2 >/Ћ€ jаEšЬ[оWАv9vTdzиФ3`/,‡ъУˆЪ<т]"w›VЉњіМ I;s|в4ЉаvЈ OS=pѓѕк' лx•„Є)чЫ3i$адїvŽ`!(І_дбТ]oŸhЌЃ\ё5FИОšŒєЪ@-МРE№ƒ#mм[ПX8.8–5 эєЎemъхx)‡? о—Г\пjЕїŒœ\Tѓ~šUС›‡V-Œu*ŽFvџKнХ$iД!DHj6ъ‡Јщ–ŽtМTЗпЂkТJЃџžсЪŽЖR…Ÿmб4 iЃCЇњQ[tјfЭБЙр/MеLћVšМYЗdг‰SEea?юЪяХQ]&sЈE|вМ'K˜Ћž>}ЦlHZ^feЉ)Ÿ6§+[0ѓІ'гЪйљэїЦЕ[ЧvLџqJбљ'F ‡šДЗйP}QS•ВKН†Š1SмN/Д[Њ[IiзЋЛЌЩ v Ъ:_ѓn! Л3@‘ъхmš{ )a•ИEwy–Ё0yЯ‚ Xž ^$нгдyNтH;HWЙФСѕ[1ˆХЦў4T„‚6&3ЊоmZ‘_…XКФp>‹ЪœfQе+Ађ}Р 5ф5%™а/# AaужsбQщж№йdЧЊх˜j?y8^CфQ•Ћ… _5(&ЩццpЪщN’МgCСв=cB‹Eь  ЃжPqoрЖљJ[А“Г W9 бvЌы&€0є›ЈУё-+x„.@в&зЎ%ыєэeПЪщнVuX9M}-YВуНnžB(0єјєЧщМВОd0)rQ|@ƒхД‚l­!0н3f>ђИš†4ІЫu™PC…’vœŸ6л*‘@ Mвb-›УCvж+‘‚ххžшi0:­šNм+бƒпВ„еЕЭs пxЙєq-Ÿ//Д№O C`2ТXѕКЎ­’Ш‡"ьmUЋаЄіsџ -1M–Hlе–б§`-„ыAУœVR\бцŽ”OgŽe“X@B†ЗJОRKЎџ fчгЇ€Ж3)i)$Ў•IQVкMЄкa8`Ub73jЅI]њ”ЗGMЗ T›tSІЕЅцн†Hqь‹ѕ~П6КяKdюзНщ€РRWЉ•ІзЖ=]ƒŒм“)ъUUКЂ‰>эъя Ша дЗ† ’HЛŸЧЃŽМ’ФJGНЌEДvУђдGГГ]•>k†mbЃ4цpA;Ь#ФмЄщфe`;Р^ „VЗІ3ЪеьLчf>~QИ• zЦ›-ЂЖс*њћŠЛпŽњУ5чѕ”™ЈМЅшИjrЏКУmн4“ЄuЉю-/MѓуEЛ…›fё\S)OŽsО‹@“ЖfбRрWB;K‹­I [AЂЭxЂ!ЏŠўnъ Dk*žcš ~“IRг4GЭЋ€ЗюЅIеЦk˜˜уЫ/мЂ@Н•О}k ŽD€њmjМЪVsœ|їаќG v яleГ9Xў2"щц‚F\ЯюЇLU[гVПмНСЛпTїkzяДХ7щ?‰ЎMэ$vУџwW:SЊйщ‚ЬO6 ,Ж6XеЉ^‹8деKNъкРyЦjа=П‡кОжpЌзо­ншЙвЦЮ …J2ыЫ+,ЇtЩкIЖ#wЅfэ†чЌ}(|C‚TJˆЬ|-ЙєЊ н:МxФї€LЛњОˆ`jЃN рwеwЋ`@W†МЦ@РызAZ]Г–jлфЦ’#Ÿ ЬЦч@Zе˜.SoоУ-У44 `%ШТ)ЭѓJ+шб†Ж0Ў8†M˜wЊhЋлГd>ЙRz˜GЄЕD-fIГL`Д‡Іaнм<ы'+yO)Cu–— PмыоyFƒ9[AЃ8z8žWТULMцVЅ•&"ћДaГ…Š-‰2Z7mЪс<Г?Œd?:˜gј›Ћцышщ•п„ћД[ШЏК;є”Ђ™ v”оkвƒ)ы_AцМлжЭПnЉХШъ6ЫjU—I,‚]ЙбЮЕƒ‡Де$Гe ъZэ…Ў6ПtљпbCАЇ2MУ>“NE{§шmwžKCС›“ўTЎБъ—ПючжжG›?)18M&#qL1;ўз JЋЬYЊcЁЦ2,ю7ѓ=ЛЕ iЛ€КsГšdPТаФј›ј!&ќеЬыJ‚ L Gwh>.#нMmAЂэš-т<‡ШАK+”%]Ў‚-;v=;tБЇопЇЏž@Жг‚4еmїаїL3„Q#Ј$ќтiRЇќющŒзT ГŸFf@s’ІЂњЯ]еї€,^щ†#TЏ5їя% ўo†'˜š*cx+т†7пq‘’ь"LПвG&ѕk{ Kj†№vKЙ"ƒVанІ8ГВѕјЭ*n1Гz§ъГTб5Ѓw`k’6І?sГН’€dnБZЙ4&šлq*ЊtZz!Ц<ЭjшїigЊб^˜А<HѓlKЖшРFyy˜чFц•щє+ю}%ћeКtЄоC§ŸSAŒ#qвђdˆHh]к$sŠSu-HXЉягдИuW;зГ!Кіа$лЉCШ„ТX…­Ѕ–qЋ №=U—дІ7eђ“{ ™ыZ „:­qSяU№QЗЌћye#M†БЯ\;C/{lм­M‹†ŸТА rc \3г7›к€Г…Пцxщdє4 wNЗЅВчвR0%Ы'†"M-ГfДyH87b MkЫTV_ItqƒІй8РLzh9s%ж)МXЬ”›uчL…“Жо”]Кyo@(Џэ&r<УAеI,UW†ЁЗЌъ™@Оx ШtS*œ Цj~нро œЂОАЈGIsы)ЧажeŠ€Ц—OЦ$љЋЏк4иГЏЗоBЋKc4љф=t+z~ВКт6Б6 LŠjйZ…‡gй“џQЦG&r Зыјц:зЦ 8Ц~rЌ^%К( m@jї|cзW‡чэ&Цн5'КјЄ‡“btUpр˜ ˜О82ИТщѕZv}r€=,P%Ї-дqBјЂЁ“БхЛРщ†^јИ™T™Н&SŒtNлZJŸьš)ЂOdњћаiˆƒыF2н;ЈbйŽДЖ†.,Я ЇцG{ЉеГъЛuNиЭwoРФ„•ф—PшqdyЂќ2 ‹rФf ”‹]ОЁrv1UА…q˜€ЄЎ^­йсћъ%ЮЫ6ф­hфƘX$Д`xьuWIHY*E 2ЎуKXиуБBУЮчК>џ8CІ@``~‘ј™ƒ‡,$І8­Т!›ŽcRЂ„fЇ„~oЮ[ƒ%А.ДА…—§!мlћ)Qіљ„ЖЄ^Lp  aКOh[†ђэкзRfЮG>RЦЃ СЄŽm‘dLОЄБ?]LО5…Ни=gжЄCЛљВ ЇrDДДЖЄQ8ХзЖuBяуќYjс\Oт&+=SWLх—дЅЪї „*Е@:щ™6T'L ,ќЇщ{щˆё„m ѓ5Шдq}7\K4jС0ФеМе}ж“Зи–И˜ь„-“’С аі<Ё]–дгНСMO55ZWсІ{WMс*p ЈЅdаъ9Ї  eД9Ьˆа -юЂ­ЅёЎhќЌ^ѓюPигѓЋ) EЭЉвƒшЇЦmWђ{Ы й6ЫIBzЮXь-vъИ ™‹‹{}ѓ"гw"р нь№SI‘,й4ф6$1caЗ їЪёѓt3ХR€2лхP!>Жeс%тАMl*хмšN+›ц9/pИі§sOе˜юы‚tˆДОjyфА9Wb|h/БXL yУGЛ]кœО™ОжІ§Тb<К9’ънЂu§JZЪ№/UщKaыnд:§xd<ы^Ÿr(€•Т(фТXDБ$эMЄЅЙ…]№Ѓ;w5жЩn] |; Э=,€`Оyп)5цК3Етєкcv‘7ёігx*ё(‰іŠ,гЊ€hјФmaА8БJ[*b§hЪyЭlБ~єƒNщ24kЇ@рЭй”J’DB—бbЫ:сQљJ@'МЏуОlfчЙ— Ж”з?LЪАЛЉ ПUŒГu&…ЃBa7 &ЯРœЌ(Г" ЅгYљMфц$69-2ЄЉ):EбI‡ЗЉ~]w8MŽ‡ИŽЇ„К…Ќщn zТfтnцfZ€г[}7ЎЙ§ђЬW,Dэщn1ёišO%ыXqП8ЁУavквLАй}вŒш'ƒКфP#y?Wэћ‘Ъ„FРq]№{Є­и‹и&xI/Tњ‹3GХjыТ)m"w˜щTЇЈЋZЙСъцN”F;HЗE<ЌB(ЅbћѓМН+šN !Ў)6–КNT‘б|ю•йN“ ]є—|€aп“!Žнyйе шA8ПБGЊbиWЩ)pVуиj0Ф]‰\PЈ€viИ$ Іj,!Ѕ ЪьWD^ЎT3c„Gё'кU&%д4u biмрџ)ƒ аžaHйЉо. uнз5Њ‹€Ѓa№Т|г$ƒщ(€ўp]о4†CЉMЁ?^-І#„ь†N ЃC#šўмMp%ŒЇЉ’n!O dІprcШkvФіЬЅЯMЖ5‚Ќd?ЧАVšвL™pрGR•ъhLQd"gН…”Ѕ4јН§IГодР->ьˆІ|Џя^г-qšѕІол)Gь=ЛpЈ‡l2А2(‘вoЊЄš."ŠMŸCŸїZўAZ˜Љ–!гЈ{ 9RHЫc:Œ uSZŠЁЉVаЎŠС(Ћ9@ ћКJѓћ4LцzюІŽVWкЕ<{Ћё^Џ*я~в(K/bœћўРx5хЮИШXAХNŸ|kšh 6V5Q•gг}qOАњеЎвsd ЉN>MS# eФBЎкZBЮsuD“!ME•6;й1ь`Œtu!~Ўз4kBћ-ЪˆгSk>еац.јZw€јЋQ$ЗФ&F‰V)(ЫЃ .н bcШOрТшЯаЙ$У8Пax"Ь5њ)м]!ˆН8ыя;Лдї‰зУдеuХ›ЇkъІ1ЎЊyЁž…џ‚Ё‚м%_д­BЈЉЎHђs0gRЌ9…$Dt)Ћ\F0œL| * …г[…–‰™~Pl'у}›а{ЊOЃ:qе2 ЙUvSѕЦ0aЈU•bžœa‡(ўЎ.УРP qВєƒы0ŸЯА/ДжlsѕъBoC&‰TІpnAС0wЉ™7…HяЛщ$сD"Р"ї•w} 0џJOЉ$SиvњZЂЦ`ˆXdPM-ИFГ/4Šœ›‘vшc{S­ф<Jlъ ;„ЪЎєр(:И <СЦPœny cЧШ#з|ФЃіъЖАŽЫ„6o(б6ўм›&Xмvu?c|Rš"pњnчи(Ж`Pј)•ЙЉ˜'+`ЙSє=ЁЦЭЫ`aыRлЩнёœS R-<ё•m†ЉPвmž"8’0А>M  і[м#hСZXЫaGwweЃз1˜qЎча+\ŽА‰k~uu—•‚rиg^ёxё“ј/„Йuћ$C*LFwt­ЄRдл/THЦM™S[]ј](† юIqцМTгdKП8ЌjЄЏ*ЏџlёYТЄлЫњю ќ‡BЇр%гhѕзЮ† I$я]ˆL{o6%Œндšи?MƒAEЂвNјDрUъ}ЈП‰EФ юЃ'иT“P@це›oЁЈ‘дœ АS2ШDˆы4і‰Рnvт*‘СRyр`2$з-кУ 12ЄцYR"Gƒ„§ЭSтЃ0˜FФЌPЁПХк\vP&{@ %P–ь м,ЄiЊ;бтf:ю,‘т;ЫЩ›/№ ЖctЕSF(^;Ё УдSp!FUиЕЛЇъcлЅГ@kэжђыX—KІЕiЄні#6‹T( {С“‚Цєs §iчk.љ€Цщяв8ѕeЇЉjЏ†Lў* cBщlГ("•ё4$О1тЎ.МtЅDыЙVl`KмX„ЛЋБ ЬѕtGшpŒ'Шi]žя XЌфкЁˆагХ—њ+Ьж ьЫщт€кй:УnШЁKPfШ`kzŠ9`ђхбžšxq`zЛ @ТВWЖ2њ„J‹і'хoк^mx.ФЃžNё(q”ІЂ‡]$Pб†ЩдHцо“cD=>фNQ-х…HMь^ЈЖА1\L—™јlaюЧW2хQy“+зF•бБу–!іоД<јжрЯКѕƒфE—n;ьƒT"Њz0P^@—я“жVчN–йЬ;a<к^@$7г”ю–cNlЮј#§єE9пЅ([§мŒ~ўŒкн #$К.-Ј‰Я%С%ЦДnкŽNм{ўB}u’€Рє]п|a’ЦaоА$uuю•4шcзc(—PЩ№OСі–Fž№Їzhtр<№.•ќїД[O5­Ш“Ž?‘š&_ œ˜B?8=ЁS8эВ… ,GzmЦд…ЊšМЂ!7cD=­й‹щ/­8dЧOщ0рћЕF<[Кn ж.V^…,Љb(ОЅy|Є"LЊЕІ.-&ЖИ/iеNПЊЯ3EOўц)г"}SŽЄ7Z]ƒкђ>ќЭ$ђ"Ф”ЊšЬEг>›9CІ5Jск„*žЊ}кy ФРL…ЈyЊ‚іbє\чоP”g Гgƒ™ЩяЕђ[pŸpёxiЕGдm šm эХ№j­M(ыЁЃK†Мх:ЈƒЃл/ЄŽЮј'ŒyьЯъИ Пъќх№{ž‘pБОH1І tЗlЪY3ё0š‹ FДjДI†ѕ%`,zаeKбхxўюN6яƒeX˜fІIінЁ5.%Ї%UЂЙ^сіTŠкЕƒLј[эхy0 ё‘Є2ЅЂXЇCѕКq Tш@ФišЖ ƒ›Šж“Lr—ПhЯщЛёГ"­ЁЫšЮbЃЎ\мп6Тr+Z &ЂlА№ў’сƒ:Љ|7юР4Žaж\ЕгЁрРщ YeOW<№њ)ѓiŽл*ZЈЮЖг^Оѓ оCeЗ†г[Фnч;ކ=Q_­йФ№~Ÿ~йЭ S\0№mјmct В/М,2A~эХю5н•€МЈ‰Q"Щœ…wCСБnywк >м?)f”бЫВpаїBSі`Ш‹ъ'SЅФь Б#HкЂ\iљlN …XSШUЋSЛ…AМйдѕ@н@з„yвRErAљtщФQ>а˜BЧВ[YiиCрГ’=жG 6EŸьэho#Ž|„%бцX6ш˜ §њ|ЈAЁџиEŒ\3яБ ф (*]жCЭГЙшдq`2кдigўЮq˜ƒ†[h]ХzЖ—Ѕ!–эшВјц#GЗЩhPQ) Уќ”‡SЧЙпмО/HN}лo‚МИ”їhВEЇ“’–uщsџ‡ѓјНи$(†Z$AX„Y…FXеC:m“ЧЫ]ЫєЭƒЉЎ @›JЉ™‡)ѕлЂ~INгВя]™~Ž ЖdЉЮ#„/кЃ,УCmN nz›&lЃymP“š­аХцWчEbP3BvЩ0`pЯЭэŒ Y˜!|2zі*Ђ>6Е4ИVЇ‰˜•б‰}ˆkщVЛ>[“^2>ИrBJU—tсU`ћЙ›œZ8э0тCgfr4Е…UcФЇB`Mnеш†п№Š2­1Ѓ(ŽЇ„cаФiѕzыа 5СЮЖ}и˜ЛЂ{ uРВ•k7Jг‹ћ€ |_rВПl_Ц3РœsЦ C†Јкv >Фј%,6ސ;†„‡ДЩ› ›†Ц)#'9aїЇ‘%РзmД`кrЇСР<Dш<_цД%Жm3:бt LGљ6“/}e˜юB§ A ф*NЎ^OЎs)™3ЩP хŽЅ-@BЂT, кѕ‡яe^›#S+ЄГО‚[@Ў`%Р§x@ПN/QJЅT MщїєfмPЛ†№Ž%жЄВёСз"2бЕ.p›h…–нM]'ЈƒsќеБЇдЙŠї€(Џ0…@х- щІ>suР†М—Ј€и ЙQБзl›ЁЇ ВK W0p‹ 8KP kф4Jмь№ƒ--xЋІЊ@X6vеРiфT3ИЧМ‡‘ЭЌQЩпF/ЉS‚І-р0h­д(щбДЎ„fМ8щя:ѕ}ЉЩбОƒеБЌ7/MбмmˆХNЁгЈ)Х@…_ы5†y@Ђ2BЄб0Д}3@нЂ7И`4ceP<(ЭЂcѕIa– V шP{lЄŽEЃєRœ4 -ЉЃюGћЌкјЄ sщ6Т`š;б{6$КR31ДYMКђP/№ЩŠ‚rk2ЖЧAВY{кн”?Jв’рщЂš1 гФ–.ян‡ …JЛf%Dk›iŽУ№T$wЕ†! ѓИŠЁ 5ir”^!РІЩЭzPaіЊˆxЎEЈyjYФxCц)u.љЃ1дткге2„˜M:H"’ъ#hёгЄAЁQИтвр1w?>:шLОaДІ™О›„I Х@и4Эˆ‡VЉMђз€С;EнtЌ'8Ÿр ї›№тv5~‡J<™wBЩ †ЋH$vƒF’Yлzб?@Q–D­Рздx3@Х6х’#ƒ p!5“QЙ%у‹“Ю!п$jИhKЬBci-иІ‹!ƒu5Ÿ‚žДуЂYнŒ-і& ПE|2dе•—А@7&€Yoи[ :аj}"cЫep}0P•;3OImР„виЇA†шЬу*BКхƒ!9є‹X6щЋЗхК$тёЫђ‡d\тHэ8ХЊ:Сmо(К v2)швц/iK7F7щкBОћ&ЈX‘ †Х;qzmЫЅ P4HށЕ.3Ћ‡ дkOH2r SšЌХ=Bб,ƘEц8їRц;$€жШ=]ёf–(ДJš›‚щЉPFі„яВ)SшyуЈƒ(kiDIю9Žt,йЊИ*} ,эR PЬ”oht)‰ЉIОžШ“A—Uхџ+ќu№ОМсxйюDhСОТЙлn#hй…mY  3Д3оГ%i'ѕЦЛљ{‰ˆnƒё€dПаЎS@>aе:˜{ЊИъ 9azтѕs.ѕRUтbп2АВБК0+!‘4ХьaЯ&0щуJŠ0ЩгвсЈпo‹ПІНy]v3m": ЈхЋрЖ‰Н@У\ ItцДoЈЖ ‰(а5ƒP,ШАЮуT‘ф z‘U€эDT›ъ№’$пX‘гЃO–”KЌœ 6е!йBЙ‡Ќ;xЄYЎЭьтќ‡щ—iСЇкќЋ5w Ф(›нt‰ y [йVхP] P\5ЉhdCOмЃ8с;НŠЁюEЂxЫ(С@ _žЁdЁQїпœ}45—й>.HкРљ+`о6ДŠъе!ЂЊЫ‚ђ%т7"ŠьП @єн@}к>'L9ДŽиV-‡(Х}юfћ%ЮеьЪ'^Ѕ3л)Лg ™^Ё-фўѓбФрМтScѓє%…BOV|/srй;ДИЁЈVMє)гўPˆЯЉ›ЩУйЫ‰йћхz}@О/4_Ж9HЦЫєБиг\‹0оВлыр‹&ўiLд5тз-…уO#—0}ябФYЉЎ#№ТW5jD@*АjKЏзОкe€IѓЭ%hJFb‰‰yK ƒZjЄЉ’тj‚ЯSь…:Nн"O €`u†KY­#Сц“  +wZcHбa* _ш’ьmT*HSЧ?uw%2щ˜мzlЮ6тZ Жщр˜Т‚e„/‡’) К Р ˆP}НTKюЯБ}uш% Ќ:eф…‘ЁC.b[C„?AЉ"T$Ь‚hxƒФi‰^P9P9A@UЉ`ˆъA@яљц0Л­Ъ‹cЂ‡Ј%OДЦt”чб2‰Ј{СяЅ<{Pїёfдч-НЂ•Ё Ўrнљ…8išD nRУBœztœЙйЬ+„…xr‘TXк#№Ф—ЦKЧ~O!8G7ЅXŸ›“ˆ.д 3шJ-ћ@5@P p …Еc­ф PјБ7Ї№џЗР†РННОƒиИ@рŒ›дпs3Щ_=љёА$§„гV˜„)ЄR ?ž&pљYКїPЦо TЌ™ЂКF0@TЮku˜з- Ё№i7$hto­Жи<ддp7^и5о@тZёКЎžh›bŠЪzŸ„ bdЕЉРш9`jmэ"}вmК”лЏ Yз{‡PyŠ„NF]6џ&мp†NŠжшЮG6†з‹F7•#D›сЛР’T5ЋзpnЬ7д‹ѓ1 ћF-Љ•?РžаtЄYЛƒ1k]ŸpІX:‚и1А†aBcТTBP…ыБ˜gиЁdћq§{XГ‚‡уїZЊб>SЄ Ќšƒ№ˆh3Ый­TКјJ@)М/;Е^і9-*XYX"Е8ЪИМСrЫЯrЦв4BЫ7*€Џ*Ь$Ды^юƒЯЖ[jA2ЬзHnScІДќeЎІ нсnЬф§ м­г†<Ќ8‘Ђћы№{№x(“8l]аna(ЌВН+ Щ^Bи2эо — P'Д2nк&ьуЮSю\ю EOІ‘ƒжBl@WEЛш{Iр)рДПLШ.Aд=У83гЖ†AoеІћnђ^О.l’iм'~ГІ`Žoet04Ѕu%˜ДS€W ліьб…ŸЕд+[Шoš%ОЕ&ШБКЬР–oфХтw§ƒєJЋ†ЌMY–р“6VcћЅ15)‚)Д­LUЕ†ым t‡"e‡=J,бФ‘Ё%d H•6JOъpЌ*оF^OnlžтуаЮ&Э,кРž?RBб§dVT0ЈЏѓ ЦWРяРK'J"јЖЦ‘І™ˆ=„W3`†њюыЙ€‘e€я5РСЂh Ш­9- биЩD] іRВ14ЎMbкnV„hMBЬЄРg’њзйЌгšЄ†.ЬRБM‚^ M|‰udФ•ыўxЮщzЃР€GРJ@LКuїюЛ™lwЌoЧoёb6К{Ѓc̘+ќhє‹D†ещ…„g­qK™-@…’Єщф8:@›ћfњР­пЖ џ„йrДн,F'0!кѓ1 ›яэзщ)Aњyд“Ј4T.8јESв5 Ю“•ž s…‡3Щ(Ѓ <~о Є’Ј lTпMFлGѓЊ [4Ъnt@%ьFЩ9Ž6RЇžrвonч‘JЛуYщw–№ѕЃІБHиC}Ѕ*Ь„)5„5гosRЅAЭАkиёЯЩрё)[ЉаЉрiШЧћ$vЭЃ3РгЉi;P"nи'њНXђ‚ЬК НR шЉBи уkЄŸ‰ѓЙРЈšж4†=yŠiЪї„цGъъœu™‚АЂёД;ДAЦsфQрШјНї%-Ж)М2жˆœ}ЉЮ> Yп—ѓм/2Н€д!)&IфЋЩ\>Ч! aSСЁ <аy9@јNcsœnЃDБ|ЬхЊwЩ[sAзžoЯЄ-ЄК‚Ћ CX˜;бјpО‡Є?Q(š—ЙОЖ:ТŽRАЏv7МЄ@ЁЯU—-оšСUј€жfDУA PС3s•†’алмЗМ _h&~№MѕсMБx>qеюд%WK0‹=”…Ќ‰е |„эTSˆю/xlšъ~=]„‰FCEIq­r%q2јЖЖ'G8MEЇcMН3_@šА1ŒОуP› +ўвчЈдmw ќ.]H/Ps|НS ЮY\ЂŒ)'‰aђ‰,чОQH}Œ Ÿp3NМdxО Їм%хЃХЁ+5rw‚VLЅЯbЮјЂ1ўRŒEмфп\Су%€ё4{=B3_ТRа”jŽ2щ/! ™њДl ,оћu›ТL‹x@><СL!PŒ"\У"Л”­КWœY†В›zиЬњФFLZF ~qp8Л{tъфЌє]pn•Bі‘щJЊsŒ•$’ 3 –^sИьLЏD[…MЄаДи†Ъ Žч&аB #Рк‡ш­e1UЁBBm$хЕ9@Ÿъша5 MŒчmIзr_с{™iы iуYтSž†є†,ЊMS+uZne[7гnъOžb— і~aио—‹нћXcxqЋfтФИ­РRХžИtNЬ.єЊPљN†‹l$б3OЪL†оvпK™жАMxШ™Ip`mё8}k cЉ ыЋеwоЫјфm+“) "UЈt–Юn р'RмlBГlŒNе)ЇџЎф‡4h2р,?„Жpmg3`O5@іЖhнnsJусu|‚*shTA!АДwIXЧ[ЁчYљьЎ (Ю~“Їyq,–Лd,ƒЋQ­CC„яD hъ7™S…5f€fp‚Hu"ˆ•+кХ/пS­ћЭуWЖЎdvјж72C-ёЧ4DQ&Азk ЊПу љЋЮd ўќšхжyxщhрРtЁЉ‘ЕыzЃ8ѕ]cl†„cёKјZYŽF-…†…‹VEЃ4вАYEј(*І#:"$­–„†pmAНЁ"ИCн;›ѓ'‹‚\Ѕ™ƒтCСœЙПqШ[њŒy&ƒ,“кt3Љ†ЂНёx ћŒ&ЋЊOЁ2Ў!мLя+sѕZ~єэђУЕ_БRТч#*e•UZš‡@&бОѕnщ1иWеДfvuуI ЎkБž2пБ‚ЉЃд‚чI[е˜&aAtТМкв™rt[’–зЉК:šAююьњдсoФЎгТДH=јО_Щ“ˆЖїхЯј№sХB˜ —Л\f2нO: w6п3Ю~@ ˜T4‹MqыBкнw6дП„цaX!\Л Лу›ш)*‚–щz †9%ЌЦ@+‚,Sп.%ƒWЯfЦнv‡/ЙkдўLЯCсŽй}?ЌgсlA‹_ПZu‚ЙQКЦV. ЊЊ:ŽСlІ’g(й{?ў!ЦgЃ˜šлсhq(хдšц<КDfGБICу6ргтлNТA/ФR>н(№&У*„Я!ГЊ:T@gБ%"V хЃу8д{_т‰№фiЄЅРdа/,їхQ&tф­Иo2зкЄŽ|f ћщŸWZ!jЄХEЄЊШt чІŒLuыšbЂzКJŒtZСЃэ‡JюF}!o zAѓчФЋmН:=юUŸгЩhщ|T уди~‘вkќ$šФ‚RTДИЛнЩ@{}(<:’ !Й˜…œЧ%jАфжчrкgLГ)c!МjƒЪ“’;r[кn0Щ§M˜ВzW<Фюш4ЉнKМЦ MЃ з^зCz|ЦˆVs`˜ю]№0с=џ"‰mЃкь*ќпЅйЎS~žp„Jѕє+™PK Ѕ,{^‰iƒЦ–€lдЄ@^іxЭ-ЮЫkЂр™la5f1Jfvž5Xc(љОd$’ŽGцвxSyŠIjђЇПjХТцїL/Ј”Нi%4oС­џрg‹FЊrє—ы§]єОя}йђ'М0ЩМ ygЗ ‘цЙA›Bšfѓ—`&Э‘-ŽE5фƒБмЎCo&eœЫjЋ3VНЛoлЧњhъїmЅN0NГ7œ•TЦџУтЈM™ЛQ$S„п "_…*$ŒЛI’Їџбљ Гщ%CB ЄCii`АЃ_Т.eЏ cа˜z%ш<НКќЄb%SsP•ЬнV&8[!ў7ТQбH&Сzuh6њєœйЙJФ€mp (­чŒ9”Џ(ДZ˜ЂФОѕ‹ћ a†~ЉФ54 f3дO’ё•4тƒ ЊrdН№Y™ ЭsˆцABСЯўtC3й"шon^э@‹6Œ @п"ЅˆњНе=pGрp ядћ5 ‹+šц;Й: лpYЅ/zqВ‹w3J ъLœqу,qбB7-б‚Hёr7ШЋЫ_=(жа•Œ&Ђї~ГgŒPиЭ(MнЃQF90Дм‰_A†;R '‡ kŒЭФq€ zЕгWѕДЩ(aЦЇ~0A3•ёз7w СЖEMћъХѓлg‰СŸfТЃ„`Y–EmЊџУЏЎMйњ C6ЉЩвqщ4•јfŠжКфN(–ЕКi…Ё~МAЇ”Їі ~И^уZ˜0дbK„†%жЭХ:ШДbjќё4пПŽЙЁЉјO4fbBТXд.DpO†Єжх HК…x+Љ]Ѕ]“ЇKКmš,ђбјлˆ„ЁЊ˜„Иa§DЄG7‡бCpZЅC3aoЈІ…ˆ“6еЯ№Ёэ›iрД€`б,WуKn х\KG€м0И&Жшѓ…М”DAиŠ€С}іНуёы”пЪ_xпZђЕЕŒ\Yidg№ЧЖŸRєф?gOh€о„;Žж"^%Ом!>Ё7ии фmvMЕЮЖ№rЊЙ8МЊџPВU№˜­‘gt€3^ZRŒŒ•бЊ,љЉ§iHпMэqШЌ`ˆ„ИЕ›‘ВzФQИpЏЮЅ„5•ЮUn%BђŒ’кl3ЇИ™к ЊЈэ%LfЮЊЫЇ фe[Mtтj‰fЇl—AѓA"Qdаd“€F#…^ˆ š№—Ž!"ТФД•вцƒЂЇ2@эX)с$JИЬВRCсЊ!Hџљћ}"bЧК>pRЮЏ _…б䛈ЃЇVŸL„qх'#Иš~7DnЫК™СY3WQzЙ3fГю KЎ?TbpнW. уЂЬ‚ѓњr> Оп•U­e~C|wкзЗЕтЁEЬУдф›fGіЩ …’ ЖќI еэsи> O(жXД9ЕѓдSW‘A"ЫqЏЂЁZУУѕНђ2Gˆ™#pˆ8˜rЎЈ[ъЫГЗЭеpХs“УeŽ0Л2Tn(КIБ&‰§эƒt€ѓ‘з-5УЎК2МMА2HŒЈrЉsЌXXЪНy/dPЁ…2šіУтћУr iЙWcRB+LuX §0ŠШ•)ўОоЈWiB[ДЫIа1aZ8V+Б[т:ЂЕА8;!Бrв‰w4L"Z7cXхЭє )(€"{ЮЎ‡ТJЩЉЅaвЎйщ;uѓd8С’ ЩЗШ{˜zH~ЛоzЅ['ўJЎ#‰M§`ˆм8ФкЏкФi*•еœТ0‰ №рoВ$zХP$іГК?qа~DŸ6“›єŠTп_5Сѓ8{БœоmлпВ™ЋM{љ9щк…LјgKцмЇгР§ъ!М)­’œAхCBЮПP+fјjBA—щBЕљЧkH=пEck^I7V]јР>h.9)їЌD,nrt‡Mmњš0ŸЫu џBЈz‚ЉBђФkvЈтмvФ.}ьCž|SЁхIО а„@кс0ЎšИђ\+‹šs§ТшчІБ…%€ф*ЭA э~‡(Б#Q ‚•oд()9KN€„Гmї“vн™ш СА•$Ѓ@XЕЫž"VЃЁd\зjK;gуv˜L~7№њkxЛ[8оCДЂ^ о…pЂtХah&џ0сRМ"OГu„rE)†~(™uoX"€>щ’xaWчьZ75X мтёд€Єщa0ƒŠ{pђ4ќxоЏAњЛRбqv_j`š*й-…3Šёў(@ЉдЇ,a~Kк дЗюДїТЪm€–у8~Л–-ц`УЮмш‰эBхC™cŠqтœя*0*€Hїi…дЅтx 7 NIuver„(ˆ|NU§ін^(БlЃпрс…qЇШA#ШО[н5‘*ЃТхЩ.ъ„„SK:ytДv_UЗSЊ.ХuЫ eqJ-љ-ay,‡Ш‚™>Ќ+ –Œ`}RіЛБ жАёС–"ГKькƒ$E’—Ь*=У(2‚ _fдБX›zЬž•ЌД lhкА–wжЈ6j rи‹zІМYѓјк=\ OЪфOmЊ№тК^cы‘оe>€дыЋ2šњш//V*A$Їм†€Ці:2ќ)У2HВ|ŸMЯЈхЮл6 mMh+ѓ„ьь7O+ЌЊB‡ˆIш˜u0‚}$žН ДУr˜6кШњ‰эА…Їaа‚№šЊ§КЙmЬAИ2QNjі„Œ} (kX. /зBЇ4aD„Ї2yЉkн‡ЏЮЅФївД84Jе4АнМnсqƒђNѕsш„ѓ`k %…:7ШМ*7-ГъJё$ЖFь7’АЊ(\6зIг‘Й|ЎЉ Vcоћ2^УдXЗЅŽїљм<˜fHпDHQ]жS€Ћc— ЋŠф@БїћсCчn{Ѕ$ЪiS"љD9) Ы+bПŽ„ЎŒШK<'$—УЎЁ&’ё)Ž7 gЇэ\ЧэPjcдxrZ+4lОЉ˜›ц!г–UН^БЏvсМПO€пo€Щ„vWT.йY5УъJє„0 …А…й(Њ\!ЩЄІЅ,‰|Ў„GшыdHУОњцрзю0ZWO&kтSzЖЂ ›юЖ † FЈфZXЗ(BW(ЯџУ0Rd:…ьŠFkШ‚š8-g˜v8)CІJБѕюМp8SѓTЕЊ‡‚Ъен•=GœСKХ Ё#ЙVe•‘ЙtЪ3ukЗ)!ХžЇDЫzя|]тˆјnФ–nЦЫ EsЁеtЬ`.эŠ}6 O‘L*$ƒќIpЏ†}д ЈяSN +~2–ПX№\Ве…5І{ њл.ht^ПИ“JMƒЈЎ „еxkЄwуИOя Нщ>јЇЈЙEэФtРЎ"DЇ•i9Ы@ЁŸяІ‘хU8ŠЊg9щБРkеGk^|+э%њ`З?К3$A3(JxшИ*3Ым.ЈSqщЎ^ЌК‰щпnЉp1šF"8\ ўэ1jGэўРћ;фAOдњ$Œ`Еy %˜бŒД г И4ЎЭюˆ KъЃJ+ ыТ‰@гкы)ю {q^еJЌъ‡m Ђ3*бIМƒƒq,  ]h^TЌЭМб€З6їюэnЁ‚™<$e+3Р–ŸщfhЯС9І#™Ъ›Ь еž ЬeО2Ѕh:чЃЊн:’„я'Ссљз*…ЛnYЃuњ*;(0RВ3j$-;Г3Ь'юОЎTkg&рXuп7I rd$A$BЧINьЋ%ћ€~WІ9DЩK!Ммac­Њ 3ЗІ!"ї„;uЯcp˜k tС0зЪЁTц—lЉІІТ6Уh2P'b™™,Иž8ЭВ•М›‡іTsޘЈ˜)ŸџКhЇƒ+Іgц•s`$Ия„?в-zіЄ|XЧ#міЃ@eX\uЅ—ъPFшч1ŸУEв 9hBїЋЎŒмбZр&‹6HеЄІŸWu‡‰YЯбЌ*ZТЭзц„&ˆ џ@(›"Ью3†šК%”жЃ“yЧХъ9?j‹†n:‚cиЖѕтHJp9‰)њ98ј3СІnюL]Wп>SXЏBbвНѓqFvšZc7ЛcЖ7}г_їtO< AњфЃљ{^suKЬ„ЫќДh§кМ)И•І­б-ŽhпљбСД1С|ЬяаV-Wš['#@YеКЎUњУ&$Уmѕ#0№уД8‡™—GА')™GuP"8I[kOЗT P6DДƒЃ|„`T(*Ен=iРXНлй †$™cЙŠsa†ЊгUБaЇ(Цv5ƒоКйл m!ЌС7зДd*‰Uh—… ё sPр_ДaRкŽШu.‰‚dгr‘~г‹ƒў™ѓЎд]hгo _Я0дГ› JэfЦEЉнwRМэрЛкœдS\СWф“ы4–* ш„BД8”АЮ„LЁg[љ ‚#j~G‰ѕД.—"SjЇgšЦ‘SС:5HнaъЉ0X@фМ~Ў…•p+єкSм^WЦK_?˜>ќ* –С№Ža…ЪФНGЮƒ…S<„™t—ЭЇ В—яŽям’Н uМЅYїъ4ЗkhвMоŽxYWЊ=h UˆЏ­C\‚ОЛ3љMўЪъ#ŸPT #ЉBrhˆдЋЃKšGUЋњrŠў$‡–J2„}ђxxXёыњ„ђЩЗl—пљцсЬ( l‹№FЬЅЃР\7!"ФюјеЩїр$tњІє=[f'Д№ОЬi˜Ќ4U[RсLgЎqт •ОuxLж(T—ЬvйЮЭПиЎx-XKЯЇœj­A1‰„8Iчх0C%ІrtЫі Ђcш}€sœЖPСГ|wАiы2Р(вКFЖ Хб6&ƒ#—q1 mб*ѕЉИHы|…їЪЦќТЂѕћЭMзФ§І’J“WіѓЫѓ)CВИ‹`ЁЛ^Ѓ*Ф„‹шћ‘БэСЖIDдF0Eл{šІ‘љРЁбС а<6уqЬСќ‚ЪРmЃVМжu3ИЗKМq†šŒ>~ZЎ\™„š$=юЊК’Й…Рєв#ХиLh Я•юWtЎ€­ЌL gAдЉ%О№8ИЫg4œŽ‰SY”“}а€№mЎˆqp|tЈИеїтф2*ќOгђ2"6TJб V*Кf’Yї$QŸЛяСЄјћ2xЃ|CЇ№™Ж‹pпЄ–с#Ь)}\BБлљ7ЯШ™ŠщРс 'Дj?УЊшЊ„ОРЁzЬпŠЛДivГŸ"ZUчv8%јe€ѓЩ…o -žŒЪФ_G*щЂыš„ŸœЁUŠьlщџ%Иўi]ЮѓV‹б•ОGуЩmФ?зqскb|›`TСњЌЦќвљ}”KTruѓuX—бxиЧлCf™вRЋ>ліmЊjЮЇкqЫRч‡ŽkНД}k&Ž&‰щќ-СwЪЃaі‹MMю$Ž “#Ф0zL1ž{БЬeИPіT‡S|ЊW"drОуФтNЁ_Ј)PПЛКї—ІВбžТъа(m; 'аЫ8) v62јц,ЗuЁpаhI Ѓц)xXЧƒ&$ЯqВN­›hжіыъl5y8?‚`ЬI4—R9­ЛёXЬЙЬЗjoWakTд1ЬК>'еЈЭ{z-Т(“ЦЯЫ|$ЊŠr ЉД27ƒCa$!Tьв“Сo7-l%е3 Љžпю_вН”f-o6s.Эєkфўcr:жЎЃ“З^Ј,O5ш:#ЪlЖS‰Ш™”Dfœ‘ZmЭ|ЅЇоЏ2ЧћR–cJр0™кыJ‰нu0fЏжыh.жЇl№БЬЭ”:Вс`~й€cpLіП/DДэй Шќ'Х>“љЗXѕB‘и.ЌЦ)4Цн‡ЃКXŠxOp7ar_юМ’™KŠс‘йOнXWо]52EІŸZЈЁСNзs Ш‚ФXЊEЋFїр’˜ЗЌЎ”ŸшК=•Ф~*B—™яHƒЭ p^[C„eтd5?ЉЖГ3…f`[„qQС˜д бЁхе&w~u!]їЭърeшЪХЬ;Ёi„п хЉ•A@ƒ"™Е.ЛМюјGэThщЋМƒДPNЙб ‚VKžjLсCД~5˜9AHQHЦ8ГЬ(ЇIРw3UйTЬІ+iŽиВ—:SGК;ф'8{K №>‹zжщ[ЉeТ( ЕА< 3ЏRПсАх8уА$EыsКRяf1PЙŒwТŠRlіюP@жь"dзI-i[ТшЦ‚ {ЇЫ‰[Ge,ЦиТœА“xІhWB Ѕ/(Ї6[ŽfRФ­нІ>7б(ЕЖE?]…VАСТqd]уyѓюве5ЉRІнr'њЮ0xЉ‰шQŽ"p*гX‰!тYЮеVYMцц*фI#ШеЩмyyŒЄЖŠ!БGfm#Ма‘ьNцЃ~RŠRП+b­ЎсtЊџRъ˜д•ЗnІЬH2sАяr}lьЦJt""s9Э” б˜Д™Ъ5ЋЇPDeх:дЌЛЯš™Ъ`J]гIЌТ_T р| ЉQjVjо[О wP2!С\ЈCдСЮАDŠBž:L%”qRд\ѓJ”&ИDшpлЋЂу~Є…Ў™%/рњ—ІЂW{™рV „lТО.$šбŸh•+щ=т-TmO|uБ=ОJJ2ІуJXQUsWиJKіУЄ,ŒqЊМ=0aК$ч$6sйФLrsћP$ Ё_ѓ1`:Јб€>дškO|ZОuийVЏЇЋХMЪb0фM‘TZ•ДTЭЩkЂhиш$ŠTаЎ-cPykuZЦЭЂbЯѓхzч>€Zf›Д ЯˆЦ‡њ@I?•цЇ‡™Т—(}Е зlCНљЄ\DьGS}гw‡)Ї,їВ‚eѓъи YЗuiіRИЕM%,XЙЩ ‡$wiZ9<,‡.Сt ЋXр#Sгу‡КУG‚єбj6%7XxгgLs@4;і­ДЕыВ2Г^P7SЭІ…›ЊTф#‡zЖ—ЃЗЊ8ьж8ѓЏfСтnjЌIВ@\^іJ{'p-4э™‰(2I&ЂLkъм2ЙЇыюF0JЫ^wд^.кФсћRфыe3іС§lјпЊ^Qоє@ФкЦ<1OЄ3cЅcR,2Рл}ьНњC<СiƒЕ{$mџ ЅзŽPєІGаH˜ьj‘ЛнВыRkЉуОSXK >73ц~H№1пжМЇyѓЋ;*€—з‘ћЈХBqK”>ТHа\)aз`Г№‹‹) тђ&СuЇЧwUы(wЊbУ††ЕPŽБаsК€ЧtX˜‡ЌT[„јг– ДZХ=і‚Б‚F§ФюаNžUБsKiН/ёZбЊl7pш&SЉИ0)I\*Н~†zї+#›.™™уIПтфЫ(Є ,š|ьBл’ ФфY {PЂ`k‹уC_Y<\H-БјфЂ*%\‰š_ё,!QгBдq7ўоњђdх˜2ФэgdŠ“уCЫm1ўнм ВeЪЄЪ /Q;Ж+Љ[‘‹)H>Л] WSУЯ7ƒ‹-шЎЋQTЌFЛ.л.иЭбщуЙ{rк%fР3­fЕ‚jt:и? *‚|аHlХ*Э~aa4ЯСНtKvh№ЁЇэ c(Т€MН#S лїžЃ)ђCY‹–Љ!лФНl;ъ“Нн8Vфу)дp!Э+!r\ŸmЫzвКЉ)ŸЊЕЙљ@4{щгiPh ^ЯЄЇ}ZgАgз—ѕщп;eцˆћЂhФЊюK^q\ єє.Дл[і_ААxщ-”ѕЉXUб˜Ощ тžнЅ_Е-ъHїЪюД+7_',Й/Є’4Дљ.iP.ŠНdTФœ:ТЄЕlЁєt‹”џpЊˆj„|юV—€#Y4ЇВЁa)бТTQGckšŠr8чф–‚ЫlГ5ќfp6ЈhаВІ`2ЌC,dяЧkj­Яž.л*{Ьзd~hЯctAЧВŽbМЖ>ћжэ 3мц0ЃЁ…„hзўœЪМuѓ$k/oёЇЮ% ™fНFœiqИЋ>‡gXаЛІuиснъ•MUљаКŠЁMGx*щЧ;~6Е9m:™Sі~SDХьLЊу4Ы q&Ел>юАКю2ДнdU“У/р›/YшмќО@§yйAfeжјэbgfxК—ENЈ _SXІћR.ьмœшŽѓua™FŠ2‘ВНнЂfbcІjКР‚vу†&‘†ћvЦcА>Цw‹5| 2Е!‰sєv еq СjdƒF—LKЋ?›zŽќjpB1‡ё с-7vщ]‡’ч5([rCf$+h)@сЎш%ЉйMƒYпТќ#угqˆŠњ‚†A]юдПО]š<№ЌЁбsЬxСє ёНžХ_ЁЁ.8‰|JР™ й mс[xyPЮЗ‹„ю`™ юаœ0FщцЏ У_ЉUˆ‚‚к4Зэ ўzд‘Ё(*Ј`W№ˆq Ўƒu†^зШ 0к u…|7ркa0ёB{ 'Ж)†оEЕуAзU}J,ŒŸНзЎˆ}˜1] k›х=Ь:ІQЧ+– =1Жq‘_М*6k'љЇ„­›Г\ “ъž`kц”V˜/kЊјќњцx f:_FќаЁЎх™DиФЙБЏSK1Aг`ђЮ|4эГЁтЎЧWoнM!d-Ж‹Ёfа(НЎzv‘dˆЫС%QG?ЦТdŒсвн ЛїжƒwП­/У+ Те1SХoпмYb•GLEхKё 5ЊФTр7џфJFЃ=Oс‘.Ј‚Фw(Oд ‘тЌ‹DAžaѕьnŽlлH@ж‘ЋU№q„MGЬТ‚,+КАЁћя1\ѕvœтЮнМMєS'6 ї WKя †Žx7вGхЄ§ф!fЈVг™cђ­ŽulЅдЂјSH„MТ–ЩТWY‰awЇFDВџЎzŠp1X .Б0ь„43!‘qіbсHr…ЦoKf(Ч€BFѓMЮbІЋ@ХЋН=tЎР2ФєЁD(;Ц1лђ]<жiю5@qИщн—e!SКъСХКЊOЦžўJк@ёМ/%r_v ŽЊ вб9%7iD šл ѕЦй`гЋ†6ЅыД@ђИ9оЖŒуBС!‰“ЉёБК2lM}ё:Ъб ЙOХвWўк4r‡ЊXA ъal“ЩХˆYЧjUbЬ‰у€Ў`К№‡-ршbь2ЈЖOxжн€šƒЪ+hёгю7ш[3‚Хx4>о№'БН$§ЬMи›СЈ”Р^РЂЈYёнL ?RЬ#!xЗЯ•и„ймœ]=eˆ„{hxjа’+-№њ[š‚cХЬАkЇujшХ‹с|Џ„ЫУ ѕ• ївXtсOiQњ:–жЌѓ:езЕ[+­глЎ+cАf…Ž7YqŽУxяŠQœ5†ьюўn>Zjд|šяЕ7Ё …nrQЉщяIlМCOI•Eћ1…9ЄпдЙ$ к…нH|-іž#aЕBx5ПјЁeK,ЩvйPа=‚єЊИŸњEjTt˜АOДМ”S hЛQ@{4Т,Ј‚fбW/Ek? „( Яст NђT€ћ Цv3Y\Є Š охїCVЇ+NqшXX@TPkЗAТBБљtыю§ђФ •ƒuушˆ…˜QšX]­р X>fLA2c版k\Н8LEЫ†ЧмIqЉТдa”Т *)FЎ&вPšhёFЩЬ:(к`йŒ\IЉkб6Bєеh”Їл& JЁšR %Л`/Џ ŠЋ7овЅ>(Б3А^(>Д8Є і|Tnн,XˆЌ …3˜†іжK•Ф‘5ЃЙMT~]A‡‚я‚Ў-ХEyV?€DХЭ)Cœв’”^TŸЕѕрRКЎ›I6jfz2ГЊZ:К№VЎ‚Z[^и`$A8ЊњB0‰ыШэisŸў0‰HzсЛ ћцвCЈф`,XРvjЦAН”Вт“Zѕ—|ђхѓЎЄ\Љ/•ј3šЮЧŸАh ўњА7ЂeWPi—)‚]Жд6ŠDŸO5H‚Жo‡*,jї„Ч,№хЪСЌ]ЃЙTЮКм!ƒa ›EVс9Ж„…§4€—ZŸєБ !ІnŸТ шВ~“Њ ё8Ы  ВMќЕьœЬ-АњюА6РЄŽЉЫ[гZ4#о›iг)Ž3ЎЄЎ ъб•Œ‡/ІЦMз…—пŒGIВгхvу’‚ѓаЌ­a@Л…€WiЪ”wˆ'іИ$ЧkбТр$^bФ}4\‘4 ъ8ЖЌCIќШ”З*pКэW Г%nVd•^}DpbNvaЖЭmяG4pt™Д#€ПУРPY\Мы›щŸолvи%іцпœ ГL'к zƒѕDšјgО™BЬН&,т+ŒGbMіOРѕлTЌ8šrжК€Щy=ˆ§БU@И­šEЉ1-ќЅЂЕiaђУьЁAmўƒЛЃ XЈŒЎїС ƒЃъj:)ш*a[в|ОЛ=cѕ•Vлa%6PА`AІгCхРH<ХCтХFт6QЩИк8s"wщЙ—Цn<ФжІИ–R‘чХу=–DщUlœЯŽЗLF^†я$YBSДйvna:9ўр-€ЊI? ј8>ušFŒMИJ`rYѕи]Лн™{І?-ДCR=-dBf#:Уž{ќЕЂкxhuзp5Ўi}ЬЂ@"гuІЕї•žњ€Ъ|W4\х—*S›!q коt Л>llтїРSmћ=jNлm№ЊЇФ;F2џKcиа:!9X9Dуetevя кˆPХtЎ.ƒєџa…ЗЋR€;Щ†VжИ•„ ˜*a0еfІЭKsSЃGdэopцM`fC Х ~Ы^8HЊ§‚эщЎ%зЦu™юѕЧPЭЯїdЊŸ"g8’:Хр™lŒ}…`s$јWмЁ@‘*}Ѕ'tP†ЛАiaАз\УЅуГ3nХИ-}лБ‰ЩdIЧJиx –e)uш1­іЏž‡]>4HЮL+ыъ}јМДrђfъ Yqжq0РCcTЛDŠц›NАWФЗNh€\K Z‹RЈ Т//јО2VзPI‡>ЋІ_ьнS„5ўф8tgTa3pPшѓзћєЕЭ?УZзaЌфn5ЊЩє…qœ†ЇRG№QЛ#чНФф2qЅk-aТюLЩьUшRaEOѓ‰@BЯЫS#ŸI#8†E$Ѓv љаm2ІZЬBэ•Ус„п…=ŸЈу ммЩ72hЬЙ­y!чYљаtUh—ЂЙ єНy/=ЪоУmd„"s-TЇfCЁ=`њ$eœPј[‹0wO-ЏЦL‡ XZqšщŽскЊд‡Њї–е‚МђfpбZ)цЛСщ‰5ЎПXБїKТUп' _Ж`КЄАУнXигѓc)м Q^Aй ЗQО@Ф9ŠЅ9SГЪ2tиж4вЄuю89rЎ`СR}&“РЂh!B›ыкTш`7“Dџ…DТЫ\iсH…Wœя` љJ$ЂP@ЫzЧPВQМћž9a7бZЋC+цNŠ`*“Џ™n4zLЙ2Lr}su3 –>бЬf1LZWnv_2МРІшю7\аІХС`a˜с'vCЕ@ *СжЊЏЄwmшцPJ7Ђyћц™ZHйz3є”жд{ЭАђxаVІ–ŠІcг•бdИ…яstZЈLŽ3Є_ћT2‹Є…wРŠhƒИыId3@ŒЈiœ­ЂGGUkјtК{‚Ђ‰lyїa”ŽоЄPx†fzpўxЫ‰D]ЧIЕЖVxXх(\G‘РдsЋ `˜џ9жщФБ эхЙє^ЧЬФš>Ѕƒ3ДXEЕeS№ўЬ[Љљ^ЫТЅбCрkл˜(I§тЄQoйЭЊНvWт Lf _ŒŒЙT•к-Ф`юјvШi&* •т7mL@uЛpdj8сЇ[Л A_uB"v†ІЯ/ћфЮЛRЕС/[П…ЎA‹У#Йh}%ђj™L7hƒж “фзˆФOТЌRNЧ‘к„‚ KнЎ•›J`Tе/џ-$ћЫи1ЛЌ'faЄ;сєtћТ3с*7&РІТ `Jb›$zоLЯ_зS–E !зЕS‡Ј‹p)АŠvj„љЌъ[5h3U&7А UНЪ0?N%аЙТ  эў ‰3ф‘Ћ•6ї7ŠsBяMѕ§ƒа…JЎИжкL€п!сOЏ\n ^*DЪ)—‘74зU’†^ lШ1f%… ДЗу9FгдGšшћFбЬѕЌxy•DЪTHєє8" 6ЈL!“P‡7L+BЛеBб7 а(5vQЯЎ{ј)tkBWШїЦAЎІс—cќЪ3Ё $s СB№Њ(ЩV@§ѕ5`”T"рь žВ^D4ЪRH˜ь8[Ь„@ж’фKМY`.}й:лbЇЁ`њQ! TЗI §LрtG#г€йBVmж;ъХm‰BC2YzDС*Є5 ы•TЃ=К…DІ† Љо0PЏжŒКšьА-“JYnG<…~[š~`ѓ‰Є;РCѕЙ§ЌI‚Ь2mTЯ‘аDtи )JОгy>(ŽsaƒІ5‹fЪF#Ђ|Х)РkdѕySсЛЫфЂn[nзффK}Е•Ž\!3швAgС4Чэ•иQ{nєІY…й'•šКЃeл#<Ѓ“\*ръŸŒ2Тдm•ѕ­dё"ФьnіЛJС’ЅЪb"gлЎЖpАХгЊ^{"ИКEЁLЃЂ—OЧКо† lГjЭщQ)ЭPлЖC™3m„ЦqZMDЅрJ:ѕgЎ&9ž/ЛlЃmoйaЬ‹Dб {=D€ф…~ёJfџxб@AАЏ€РћЪKƒhdЩкЫ%џ€2zWњv—UpДSЄbСSW1x‰‡^А‘H†нѕ!д,Езы8юм>'Ќ`>жБД|26пf‹ѓq4XdЉB}dиx&P>mює™hWУ&C'а$OщМЖ…3e‚`ЋjнШиŒ@Ј@дjЏ˜ад &˜^’ЪSњзСЅЅvж‡шD"9з7‡[и kxі’DЙC‘.љ ’ЗљьTУ—ZprѓЛрfЁЮ /ЩЈаЇˆGсZQ№$!C>р{љ6ujxЋJІЛ [w’Iв№&бГ ­”(/†mЋоjXŽJ’вWЊkу›Єkg№іxSvУš” ]єиq ЦXкѕ‹”qjhz›аTвhє‚B-4ДpНiˆ•ФgJ3ЫаЇмTQъmЦJœ‚йёЖТh=!нlЫšЊ “р/шЁjпvбВmф…г­i6јіBD ТVFќ[IP„#ДОJŠSjЏц~О[6=Ѓ7дмЯЦš™ћк lшѓOƒMјР KPц6}h†ДIЩ”зю‚Юч—‡ючџ}ДўВ­mЋжb3ŠžЈ7œиНƒВz˜x– У)‹E•Т‚‰‹˜+u4Eу˜MВОN F KШІVЭ"їMГSЉNeZWkzВ№uф ІВ(\СУŒ&ƒ/\ВyTі™Жt:н єJšz(‰IC;@3ЊE”Та€OЪЩ=ЅŠ1!)HVЛ }hД|š?i;нІm№#фл ЇТ($p‘<:Їљ \ ш;ЧWёэ”Щ€Bт&t†ЂиєЃћ|З№dџЏб›o ­E#вкŒ›СpЩ -ќн^`ƒЙK?9+nЌ`~[WвњSLšAзёŒЂѓš~ш6РPбОR?>ЗЗa2o]Fяжˆ^н Чп—жѓ@-T u+lЗ„X(`ЭWГ$ь'р№czЊRŠџ7жьa,ЎшЂД˜@6JгIП:5|Р§ф x œЛ•Xѕ&јo˜яУщ,ŽQ‚]-љ~]ЧцŠaUШеу`#b‘wOMw–l`~›Uа&ж%yœuѕш Ъgц0žУян‡Ц•Љ94^Q†E‰™РЯЌТEAlэ^йš%%\”нkю}ј$QЖZуt8<Ј=žУ‚ƒчZѕ‹С%Ђ ГXг $kП рRe#Х[OЃЄyЕ™ЪЌУЎ KО'D1NЎ#Бй„м Zp ЪЬРЫм4pѕеЁ7хчn•Т4;‚Гн`iёN<bйЁћУ>(Ш0љ”бІ3ŒўЪ{Уp`К#ж˜utс_…ХкшЪЉдLџ–Ё,žМ3–яа•ШЭЬџ`ЊЂтqзлЎЉl и"-ц$50ЁZ№ЁфёUoњ(РN WЯEIќ>v€ѓэѕЩHaпLa^G)f_œЎФs™ИBb‚}м,ЄCЧ(Cэ„AфAж яїŠƒюаvH˜ЄьЩ‰oО*0еuD@“ЅŸЪ›;М(зB1а ЅТ#№yЧkЇбЬG„0“Žьж)&91iэр2Њ8ЅyoшїšчF€в_T8ГD%wэМ’a$Y@zЌ‰FGп}ИЗ…„@{Є:jЉћОбЖ*=„х?*fЛж”іuswІOт­dL^-јћю~_іhОtœ7Кш0›T—4 •TЉv4ŽџVDзb_МЫP Г9’ЄЇМn@CШ™їŒJQ$Hž ŒA`Hhёv8”n€Ы№яйUU€рv&…^Œk”•4Ъ}Œ2бн9ЛЊъиъ}ЅЖўрT1Q4™>/‰ж[ЪssЌЄ=ьјМщЧ 0ьa<ќЂ&Q]ўX{€_.…—ВoТ$ŠЈќB˜@ёЂ?FћР1;П`T^­.EХЯщџ‰fX€,)Т)ђ!жЋekќМ"Rи'ХMkPБSѕеЧVђж47Ю)БjД`Š&\OЮаXЮЌЉ6 ™Unˆ&љО6кwXhKЯЎ@1_aBЛМЏ§”F_жЪз9MЋC??xаШЂ8p.ш­BK#‹is–Вюx5Ь"ЫЛ'  "b$З_Б§Lnт|x№ЊЁ ЄЦH[VИc г„’ЖжœЇ`Э(^юzГˆVgsв•Ќ”šД•hг6бК0KˆTА§ wр.Ж’Ў€Ю‰IДкяЦh)^Дœ|є­.= ШW\.cМѕƒч  г€2Hю‘‘LР‘jтGў§œЄбс2Uг€FњM{ЭЛ3Ќ^ 9Dыў•23жagЋœ~q5­ywlНm}švXqh­;ДDѕTа X[зagД„љaRЎяІЈjбт@NуэИ/І ЙwЊ‹/=Кm"8дUUЄ˜k‰їmЙ‡]Т&q\—#ЄЧf||]ПEC•ІКзcТСІO•…$]4šŒ4BNfДpkвDр КшСъьА|К9>бџй.]B†zmMi5•й„К6Юб1TШдTЄP[‚9н:юИ€ЦаhBПF{сtuh!ЫЦsї&8}Ёж`Г-ЬЌ0БТdАVт8Š+ї†ёУ ъф"тŽс.lu|bсм6І8™ІМЛbƒ>Ў­тк5яsї*aњnСњ†ƒњ№хб[2wАˆЋЩpxб[№gыNЁь\/‰Ќпб(6ЂщPhŸTД~ш~e^є'еk5&ЉўђŽ–w3 цˆkJ№‹*МyЛ7(–DCEЈц1g`T8хs‹кd€~r›вE€GЈW‚зX<к\\uя-ЭMT&h>—‡6ˆ*ф$ioAnЊJAаuGMіL/‚†)&~ЁыљASЅН^ћI… Дpžl$ƒэ2œ№šNЎ№šW‚@…?Z3B?™/дІ‘в ЌћЂ#чWэ'Яe—QqfjИEcS “ћњщЗ7&ЮP9€BQЉ З :ЛЃћM€}J ЋŒ[1 о^‰фh‡їenїЫоЧ.МC‚)!"СЦ•Ља)UVqY,>E–MИ !T‚A! "Шё…›‰ї€ы и„цЁЉ4F#ќ„. `a'сЁˆDѓЂa\у$*М S–Тд•ƒЙ@)а™КDЃ$$‘OhN†Ъ !RFwћюJыbW[хЂ|Ыaа‘A*жV7”>њЬ#tr4Зky†*ъК‹M ІhТF(nЛ‚Z9™а.Хпа0ОішЙ:”?A[L ѓšК7EdвoNEH„цы&! уплE3С C†Џ)t4 СхаГ9ZDчћbТщ†&ѓSЈl;ІmwtЭіщZ ’#&№ŠLD]О2чє[§рЧІя^Œ Ў~4N>—нЯa$‹hDУ0„ЦLŠDн˜!n†п2ŽSxё<{œ..-њ.}ŒЊ†|йpє™B=љBІи]@ ОІ…њОТN›§zƒ%]РJвŸТ(EэЁFTc6‰hˆTбПWš{ђnцЦUm•Bs˜4cј, НDГ‰2Ћvx-’yЂв0м [ЬЙMMЩєГOжы]0НВižщ зќ(aЌFzОкœл‰‹Ћхž1fНрž4ъе(*ѓ+ж‚iˆЭїSжжд^[ЎЂdAW ц,_н ˆЃyCёLŸКвIgЬ MH:œHжfЌ‹ш"4њsщ–B@“иэУНыЃ]‰гмУ+IyцLОИ`Ы{oT!ІЎ\7Э*z%q~tэNU+ЗŒЯ вRыѕЈЃ_Š1(ЕŠV4FЇФШ—UљАЉdДLe“@cаАОrФAb€х№я…{nY5ФПX"VкeЭ…&MMŒКьh№Ђˆ WОy2фйK„Оšzђ ‰—R’9/zУ0;t>ўЮ-q’ ІаВBђ‚Gr%‰ˆЎє€Мї<Ў ‚Šэщ›>Ÿф„№ъ§бgЇЄћёz@CО/'~Ъ7а:?eЁ ŒѕƒББiДб вж/€Љ`Жv  ‡СишЋIфN^Ц#у;šE™+gЈœ&‹„MкИЦЎ™iQ0M8OжR$‚Д`єНќƒ›йœУ0љsЁFwТBрA{Ÿ>ŸFXxяЖvфR2TЗпZОМяо*…Ј~?(ТiізUЃp€Лъ% 1БЪ №ШuЉшЪMЧлNY‡ЬŒ<СсB‹aо”^FSD`P-5&г'…Б€5~T+N[†эщVЃрš?‚Ќk*/д1щfšБQДˆMCЃQо`№K fВ™Лf*О§аЬЈ“š™ЎI\Фrц2Л-ЗPW_w€i3–жЎ.лtЎъLhžЄЄ2Ез>сЄfZўтИR 2ФЗуM[Дmцкћ1Н,Ћ,:ђ[&›žЂ:Tа jkрЋ %Љj№ЕhХУyсZ$l'†юX† Ы~ЇŠ•Їut]œIбкЬ&WяЌИ“1ЅтЇEiІЯЪ(ЦПY5-Fp•('<южRKгз'№ЮiЎnщ+ЃRГ`HzН<ж&NHз‹jР`9”“еhЁА›Я?…yЭДАs|ў)6ІБйfУ§ У‰:ь MeіУU™†;@8ашОђy`Bfо\fYъЭu/#Ћ3њЪXуm€nAЪLИ Ћњf”H*ћ 75Ѕ:3ŒzKгдЂOьЖк›0™cУмьйг УmдбdЖN б‘И8oї‰ФPА"ШЂnЧќ)ЌvЪ‹MгH2ЬH&Уejxа–*LRI˜ ’>ŒКєS4oЮw/ЅѓDьZАъцš4P* Й5Cъ"љтѓ1‡’5А{ЦЙљ ђ=P€ŠіЧU’Кч Лнq4сфˆV’g›с.tѓhц/`КђЅщЂO~Ш;‹Dn:ѓŽЂнгvžЩ­|Ў‡ЪMѕƒъзЧАЛх U>б#6ёЃgК`юЯќšЋвэд}CЋ=E+щ*…CšNхTП‰д ‘Жž{ЧЮвblcВЃ“ №­™Вh= D›ђњŒM–c\…ЙrqI: єGyкЈS,ŸUUD&K­гх!T$ЊMЃЗдˆAРВ8`СНЋ†І—њ А•A6Н8oэ7ћєCж47ЪјfUfиЕmг`"С•Э{АЦ6B€ CНѕЗЈГŒdБчІwAajХВ€Qщ ‡™дž.ш&э‹#йє:‚PY €œ‘p)ДmšСщŸ4"зР;@›Ї†ыQ=’Q&'RІрцЌJcГ&ІьL vѕOщцBщмеРАљхцM[5TвWO^фCcm#Фа?нЊТ$btЯЭ“јд Z„Hт HЁ‚ЉГсeˆчlhРiшTЉsњIŠNЎclбiKј€ ъjЊЦnqeЋЙŽTи?ЧqяeЯzŸCю J† пGЪMћКw—б9A+LРDП-QЂљКY“БЇЭwЬ3гfѕ‚QЎ00T ’šfˆ3SHы7у‡ЄнХ>Р5н' Lи“ ЫЮˆЛžS[,}ВваhЃЕ˜ЎMэjюX­‰р”бІ[Эіё}gʘйзТР`‰ЮQ№рRЅ< !дwWђ.еуqрЎ ї.EЧ‰gЋiЗ”бО{€”ћ%ЌЮІ0xнВаF#xУS!а}ї$*ОЁ&Ј amE9ЏІY/п} ƒ­1cмˆ+Ё3ЩшŠŽbŸX6ј™ŠИиqсђ ЗhŠ%хнБ‰E?IwЮм&бWЉ—ьYп s‹†U“>сС@GшСХX/kчš_1†пfkDCЅчƒЖhя傇ЧrѓЩГ1f‰g‚м­_ŠрЎj‰–л ›PRŽЈ€Х`“Ѕv…ќщHё –пиAДы™Щу!†06JMŸrСЦГса›В`4А1њc}Ячок-‹Vл^‰С”уЧяМ^ЦЇўžЌ’ш д(hJœњUcа>$%‘+h‹Ъga7ЇUXЬЏbЧЦibu0lОјбMеє јn5г;ЬSLLЗЬ#SŒ—C >^!}—йdЕ  mƒЩLеѓ)ГЛН]?дђюЃ0хWё9GНаfаЋћ}zѕ%nФИ;6ОeyўZ з mС$/”;ћЪЅс.4)*Т3jL; тЭ&j@T2ц@)Да%№Ѓv>ћsg5Lп xŠŸиєMдЮГ'nјžš‚“Žr|3;5”^Жч˜Š(Ј”DaŠЦ№—к’ЌH:t)WжWЯ8 (чрЙlMfз&гƒ•lжэщж2…ібКЯфedDїЭхXГ2ЈЩ@"C‘rт"tVнЊЫ@hu№а Nцš?X[WLПU”Д…ЪеР‹–‚Š-ъЮC‰X†RЕа|З@%uїЄ)ќшюАЖУєY=ƒYњНА<jM!ъ[%.+ЗТБ™tKўb~юjФbаŠ†$ф'†fAю8Vмђ3%сŠ >ё`ШяА Pтlн(aS"@˜g$‡AЮЂЉX Е€рюЛWˆL`ё -ƒgЌŸтРЅЇ‰Љ@эч}TнjшнEлЃ’Ђ№a—’ђ5iGйТ;4фCšv=wƒp•ዉ[FЋXчНŒ‚A*TвшЋЪЊ?ымŒЃЁŒ$…;jЈВ]Pщ'2‚c-yЬђX;СЃЬ…яЅЧЪIм†šƒдИ4тџ‰NL]I#yТ ,KO іp‘ља хСМцЄQяƒћЋmP>z Z‡Ђ?‘ТC?;”њђПЩnG@"eЫT`6PŽRˆI‚mZЊЉХ­ЇZŸQфнTиiЭ ˜ђ4іХ#y‰"dЧа%PѓбŒЎZЏїRc~[цšУЄžгE7нЪJЏ7 б/йтЪ.04 эžПЧA^ЫП—њБСД  Hэ—2!ОеЂ6g‡VIЯэіR@+МЋт&ŽљЫІhУ›*eYЕ=PŒЄzСрcu0*jFQЊтЦЬжrїња\ ЁНнšё€к ›CЭ“‚џ'"‹-BqтPЏ9ЁЁc?!qРwWнф•§ьB!(ИV–=У Š•ЛS=Њ”%y"[ѕУ Ž:uЦp(еї†! v[,VIx J ь%Pžф уѕ/ Пбˆ]ХI@yнŠ+€O‹ъ™HїДМgŒ œУхЅмj№2sGЫK7јУ= Ч€EЦгцўЩ&˜ceъж^HSѓŽЋ/4ѓ/РA72›ГKю >16wъТјjллaџ NMЂ#>ф_~щ>xYрПЧяНж#с H­+8 #H2cїD"9ŠРC­t5Š-M"0МВP(xаv•0жн‡ЌžЁSДЕœЉ†ў8зK-hGL54uёPФђЭ“Ў0}!жz3ї15S<5ІfЩ№6ЎЃ“ŸАВЉž)%[V};РыѓЭa‘h˜P’тy/Р%^wАˆЏІ9eТЊ]Ѓ­š ЪFЅќ MФУЅœ еФ`BК,&дІЪVrkDŠІ`ђ‰Н.HФaYЏт–чюžJ!МДЎ§aкЛMФжZ4ІиH!)‹”@ё‘`,оRˆ§жšзЌ8с%zxЌчэ›™]jЗЪc1д!gЉCЖН\Аї ТћЎт•0_ BУ]dЎ…†єйŸF•гja6Еоkœћdv5дгkЊYœ‡#с!*ёbЉ:p vЦJ§7Д–ZD1ЅDЭс!%†И,”оъЇ1п1љД§Џ]tЎdяzu“ж"6Аl­pTŽG•%ч‘5Ч3C |q,EрО9ЬЖкеxиу’Цэ›ћUu?rЙ0Ћ ‘0NГ­_8аЄчb‰u3Х›{љќ--;хЖЮ/™š*и‡ЛеK†„йтмУjqСх;‰aБЇšўБ˜OЃЋ~І[[і-‰s–qЉD}­ІwК9бЦіs–F.pjшdДујсЃЕЮ*аѓ ]apзс `‰u:Т+ Ыш:аиrŠ:Џ)ЇnyћŸ›*ВоrFўЦŸ3ЬG]йЦ5a@“§дJ1i" €b…‹p„Д:Ч№jЦ!9Ph ч˜–пЬshАкЖЖT ‡|:тFHЮRˆUYŠ`‹rS<†Q(*…SˆLф7ЌжXвД2z@9MЫGїЎё„P5vбшTЕЭm.5ќŠ=куИUМvYЖшЫБ>)#ёSHч€ 'fЃ,xЅбDтљгО#›Ћ щ`ByЦ| 4~м†XМї•Сvн‚„иЌ‚єTЋQf!†D~$єЉОmЊs7cвйл`Фы)œbБюq#пћЖ”x”Hме!2-ЬX эЇгзсdмJь*RnЃEУw=zіAмщ7ƒe+hjп-М3QтоbVћp…ъИ@/­|’ЈZ”0]x€y‘EKЂmзЫ"Нx•Q%˜иаŽї№+]ѕЕйпЇ6_ƒ>а1 d­['ўiПЃЯ{@Яѓƒ№АNšk”ЗАЉ АЃЬmп Ккк?T”еР^+SSЇ:СЩry +Цкєt КkЉ,›Ж(BARГєє…‡™ДdвЃ"1ŠвHРŠгіКЪ:–BЪбЙE“ЕтиŠІZZяйгх•ЁG €aЦ’?І]r2˜ЮRЅюžЊЁœюzИэ–m^ЭPdЎVї•jљ‚mr‡ДщlжzS?R›†qm[gF№Яz85W4ъ&{M@•эрJ Сeэ ЋLšP|єјс€Oэ6sO…ыНКg˜пil1жМjџ‘‰]дш71-&в)оФ_Оa-’Ы2Fпзi‚šЂЉgн3cэM+GЊ‹LVИL"сЧЧ­OЪЕhО е™Ѕ"•>ЖЅ№їќœ~Нл јЛ‰1Qо2i–т„:гВQ!sp?ч#ТОкцgУжcиciк ƒ­чP=)\„xБ2l№]зBвщО™0-QJхЅ КЦb]сfЫ.˜У0Д ,PUћѓ‹г)G…xэ,E“”ЉЌЏз,xЎІі  {&•Б>”М–gЪу(љмQЯЋyЭDтrйЭу™Ы€#‘œ­GЃнСД6t `зШ‚оSд­в\Ц­nс:Ѕф кѓ€CФ”єЗ|Сщъ,v—ЉVd~" ьžMЁ=#ЯAƒеЧ1У$ ф@Ф—GЈ7 fОŒUЏ6`ўžžг>dўърм"`ЖЋ šhL+Іvяcїе&|@ŠП/чоз7ЄјйšД.яК9щzд ,'ЌrшДыœЛ­­ЇœE pНїФ`Yю+?v…xЉО№Boѕ­ЊпђђЄŸ’Е"в™АлN&=ЦИXЂ1rPЫЯ”я~ђКЕЄПСЂdlЁ.t`@М8ўЭСаEЩ8 иbБТ(Вј<&ЈЉ§\ЅСzZŒЛ[Э;]zFЮKѕšяp †Чўоаз•Fў‚+ЌБ˜ќЯ™€Ё†dKSZС@HTl; ˜„v‡R€лтoЭCk3ЙЄ‚8%ЧoЙŒ­Ш!~>Ј(љьЛIЛKшRзбПќІmЉЮфёюлm›]z„J€GgЫl гЗžКО]5Œк9еСŠ‡'‹pжШ6ЭЁ%TЫЃЛб4a9оS@тћЄyxСгЛ hёУкYхц|ўЄСаєЉyЌ;Hдё›šЉЅЩЯCЊY™Ь’–Fяљ}рZLЋ…-шoЭiщyАіДЮ“н;ЏfeГБјЖRImOпюЩБ“ЄЊnmbЉдћъuЊвЊ2RѓбжН5ЬћЛцшиК}žпd$ЎxџЖщw/еC†(Нфo’8жZеДˆO/M`CRІЈїЫœhёdР„>S$o))lnD"џmц*RAKwS–QєъTЄmуЧЬNŸHmЊЯ>IЕ/Nž<і+#w˜K 7\ЮD ѕы|ЅЮ'›v>хŸT,А†УL§AЈ‰iЖЏШ`‰цВыѕл-{/‹;ЧIр zœш„ ІAMnVџР_ ш„6Y+zeџ—я&Й”IЫ89ЇьоЯ!и)•lЙ>ЅGа8лЁя-АЬS“ІAKшJЅхнл&СЬўˆЗчзB.ˆmjьm7› ШЂQФnAиˆC„Й…Юqѕ5fI ЭЦvЄЊRn{bP zќ’Wx№ClВ*фЁ.Bпв—-_Ogx#чrЩЇWЃђ„ цЎ ъЫХ Лю[щ0œ pЎА{ЏдN ‘_ &ўаcŠrжЂM!О@[ъPxэК,L Kїид cV?ЈŒ =ЉЌxёкQ‡=Ј`ёЭ`ч:oљХ;1•щ<є^‚lBݘюfv‚ЯЉкEкMж›tТC›;qЁС@_2H+ц“:  zЫАЯ…їаfўdU ‡xb=%mњŠргWMЫрšfщѕњ Ќjсаиk„ˆ_%7bЕ|Ѓс› Ьчf€Сm€З–„TЧE20,ќkˆЗ8Ћ[wb­‰№F;Ÿ/ŒЇ,У†E1ФP5бg€’)лЦ1И-?:ЮЕ|p)l5XЊWптџа.|Б2:ргЫј•Хєуэ}…у%ЌŒMілЅ†РWЩLNaЗ’xЕR–ЈаЋФУП…fœэx4–q@ъ’Э%PЖяF:Œв€Г­аЧQ2žНŒЙtЖЇхg˜S[WEыЋ?n+ЊаTUБтџІ•}щQГХgS m:/РQЧеЈ0ЈјТљ$њ•э2бЌіуUAHЩДЧ%M+УЙв№1й7ƒsшД4:S…™Прœ{xРqЅЦ)?†E\yѓОТX‚:T*uп|ХžTгVГН†ХќljМ­ƒOБКŠюŠzg†Є*јнyПТx _Р8ДsОlЧXЭP•|–ШН%kФЏЖїŠ‡>РЮ?ЪHџЗџ§o№Пќ˜ГПџепќн?Цџћ‹јеп|ї›ўЧяОџХЯўкџ§ЮƒўЛљwSитўЦј•ЂтќFБХ б-TъсiФїY7ЁФВЂŠб`‰№Q™TH„ŠЌEUмЊфмšДh*x"–la,ХUN3ЬvАкv<рсС~„Ю' ‡BЁЊh*:0УLQIьбh',_PhPћ„…A‹XМфба€Eb[75/аB57XвOУ„оЗцБЏa6ёЉMЃ)zт_-Я66ЗѕWџјЫПўЛпќѓ_„kџ_ЕХџ\ЛъџхчЯПжпнр?hOПџ>ўoќёпїпи[ ЬОо[ЭtbЎъ9RŸДT;Цњ›ЊИKЌq—ыš–в{ІКPi'uАЪ‰ž \Ѓ€JиЂсБA/ЅЄ…Vриv"-ъ$ыЄ/†кb(}aо6›ЬEXu №.јЃjл„bЕK…њŸOm“ѓoрWЗ[MЇJіж†JkУto$б/@Хь\шЌрУмчQ3@Ѓђш*8ж(ŽЎ ѓn5rъ%‰TЮ}іФjf&Њс „љЇ- •йъUХzB#іЅ„CЅ‡>МAIt™хWёЩoœЛOBŠ˜j!Ї|1„ІнЃpZUЃ…‹чhяmђ*ЉЩш“f†Кі„бƒЫЎnўры†xaT­Оz˜j 1˜#$DЃpgHО`MLhdSО›–4Е"лBОŒsR­а]ЖtђыaТJУиЃњWз]њ9ЌvAPсœ6Ž• Gu)‡хЌЏ€/Ž)MHu Iy?‰ŸJ]dRЇ№~)УZ_Ўl Ър6гЖB]ШˆJд­lŠ”dhnРЙ [ i$ЙAFX2‚HКidіЌѓINYю`§jXQ8-wj:xхд?ьAm#gTељF2АЈ ‡8дbDЃЃPН mb_ЁaŽЌ-љP‡Ъ|ЭеŸ_“Џ|˜јвЮѓяA> ~tЈыЅtЛnкє mЏG8Le j˜mДаЫеFНUЭv[Ъ—3ІY 7№}‘ўсд3Yє“n1Р–[z%‰Ё#CAг\]­‘"UHvGуDQУBЇХЉ`ќ]уqЋ‰XъxЧѓk’\ќСjДsмth%ЂtМ)qюRі3l†ЊуЭK™ДLв*0а2УнCK‘uхxS0AчvМЌ"5ЖАJfCПIтнЙЗGTBЬдuX УЄRЂэЩVЖлнї„-'œS9Hћ‹8ЉЧ ?ЧиCлEЄ­і1ы№Ёй'BЙLcЈњI™їCшРŒз Ћ‹S‹Й8žЁE>.Чю€є† OxфїНrшілА)zcЧш>d<еd”Ь+Оњќ’њћNgћисФP \ўе•їМРџђпѕпП’WЦкšhЕU˜Gџ‰НВGЊбЯђГ?дmўƒ7Nю;~ћ/џў‹ћ~J§Г;{_mЌ@ИР?”  С Š6ЊыVюŸШфSyxa8D8-\ ЈIy*ЁVЊkъI˜UЬџ#6#БВ„P1Tv—ЈйXвU4rЯ“&>~•сMвЂ*kDэв)J0ЮCЋTяРи q YwЊœахS†>уа@{Ђœ@jLCU3“њPiыmfиœzВ5Ьх$t@У? ?sAzБhпоюёглјƒ+зПџ§Б 5 mЊ‚джкПчнј§GЅџфQљј§cbпr_Пьќ§ч4$cчAтЅ% ѕ8oДЖh/E7р6ЫіVвr ГM>UЅРдЈIЋ иык‘ЇZ~ќ+2ћ) [нсё9dK˜ъVпІумŽЂШюM2zсY]C)†Е-Aц~Е>п8Т!ићvљAаџіыяўњ7ПНх7Пўх?|џпѕыџљ‹Ÿ§Я_ўцзїOџ6=XŠ\:—одю­ Vќгžѕ­М•?ћСsy*? tњШџуЛПћлџё›_ќЌhXi‰EћС?Ъ€јХЯhЋ;ъ‡ї§ѓ/~†ЭИрЙфŸ~ё3C˜ёУцвЏиpўзoF‡cщџьлБФџ—Із—K3ЇZ з‹ЅQсI/ѓGKCџpЮњS/Э§З[šўzi§KПƒаёгKг5п§Жѕ'^šZџэ–fўi–Ќ ЦŒќЉTэџvKГџ4KCWqXЮъ…™џv sџ4 Ѓ) ”ќЉ—цBј}?|ТШј'D'qPЁПћT•bј›+SB@Эs_ьBX‹?$џ;ќƒЅљлŸўС}P&њAь§рѓGўIjІqё§ъ9шoЩ §іџїї§Ыќю/ўў—џчwџ‹Ÿ}ўх?їыOѕgяЗ_к)cП4v$@Ъˆkќ–JY--f†њyqёO˜в.ј]>{g^Іџњ§НТџђнЏѕэшЬјƒИG,гя†=ўи`д_§їџў§w?Иђ’П§ётўm]?ђйПцЁЬQg*h9*Ю~NFBХќлэ0J8(єН§Мб2yЧњГŸ§žb‘— №/_;?№#ыыY ЕЊЦ’`Ѕ\ѓnЧгƒ&ёyЋъv /ыSеH ОЁŽИA‰ЌдЋ)"Zs;CЅЇ”,QЗаШ}n‚k›_мaŠпeZXяMЯжHќPQ7H BєvMъƒО~{fЂ›hД$@[›y–<ћd6РbQBПwеœYCЃ_йИ)d„Ц6|љlЊВєœЅ.@гшсuшvš?Еh?ЂўДŸ(СјFР№З‡шЛџчЛр‚Пљ‰т?ўгбџљП~ѓ›ЏЮŽЭOŸ‚зЬјGМэs§яžњїПюGтŸЏNн^џMLВŸ+игЊ&вGVЂ…ŽT’Тg€­›‹„ љ—1юj*вЊš\yžцЂЎВˆГЮ‘ЙТ yѕќЏ tОщvмЌѕ‡F$ўpЁђS2…Žа—ЋШ1Ѓљ­Њ"ТЅj­j(ёАјЦі…X йuЫђв„Ђ˜n>X‡ЈЊ)ы> Мxвя/hњqфЄ}х|ќћdиэ +rўхХbE…YоОБ‡Дь–cŒЉ^ВмЁžV" іq9РДHљ%—™.Џ&жПЌJYs?Ф6EЂМmКoAЈ†~ОbЕѓ№ ђyхB]*дXЭ”ц`ЎћЈ>=Рє' [™–щ жnгшƒ%”Ь…д@ј~— a€н[ёN•ŒфЙjнх!ЦљЎр˜[…въЋuњіŸ`Рџ@Fв7 [“г^[ ЧsВМ—…’Ємv“зУDiX yQкKІ„P&A9S7d$еS‚гмКAЮЕMбЋpФDм"аGч–tA@Yt3Bв?nщDБWЕ)Т КхWћъ…?Ачѓ?юžџ!zућ?Bч|џЕЮљК|qъ џњ‡йџЁVє9w•ъwa*9;A%4UЧ‚:Hc)\ЎcБџlъ Ч"ЕёŠ†ёј\„~5BЭAЄИЬp žШv?'с0Љ/ bЮѕлеѕJ?zхoZ/­§Nќќн6Щ_џ!Xєw$QI<2ьл`Н…b9x’;Aя\цІ3m!›з“ХЊ@ž(86П^†ŸтЛњЧШЅП~ПlzYa§›я@*ОХ]l я/Э Н.Wя2[у<Уєд‹д–)qТBšG­Š&Ѕ?и1&@tq˜asxШlpчh.гk“—ЦЮVЭКыЅ&бyE=žтЁ& J&qд§0їTћЋЌK[№˜ЕDЈГЖDYЃ}№е‘zXБ=`\ŒDјќjЙ~‚?л§#фт7 §њ hРJыjЦ9šРЅ`†iЕЁЋЁ0U YnЬдPНWVГОŸ)оЬUšТŽИщwpЌ†Љa/пКРзц\/Тp0У0[I~1эбтŽ=ЏT@™ "Ÿч’ыћ.Тю!šY”ЇжG€Ћќъcвrћ~t/}ВќљQOXнп§|шоeг#№s щ§sаoћючт'bоы ”Хџќg/Qšч5ЎO”єŽОŸў ›lрŸщЁІЪЇрЊOŸ~N‰ЭЉчэНхеCўх[vъЏџ™дТѓпМъŸ~ёГ/ќжEMчyт7/Š_b ;  ї[СœЏч$ќ~bџq.DћїчB Ъ~ёГ_ўњ=ЎУЏўёЛјХЯ~ѓыџѕнЗ~ѕЛˆUŒ.AпКъћпќђз$~џЛНwŸю–}њ-ЗЖњnпЙс‚‚yzыэЇѓeЪшЅ‚+‹4тйП#LОќюл—›S–шњO\O-аџ ™Iœ tOE*ў\aТnсЏЛ-мрйœА$5U6Ю”Ч4яїВXЏіŸЬОрsc 3›ЌрKa$ЇЅЮlџюšЃtnNЅГеИRЊ"eюХat)ЇцTˆi<—МвOtцюп&Џ№Лх!пЌ­аи…c0щбіУПП\ёЃ"š?ЄХќє?. ўяJ_ВœЁ.|lВќe0Bў–ёу;[nц. и†О˜вОJSТfO8лч_s§єјлќУпљЗп{7зжyпz§vЅЫ|Џ}жчTnћ`F№_Оџўћo&•ћk+JшoЪйЄqнH-cкА)є˜ЈU”jYƒNйЎ^q%њлСœWІ6ЧžƒЪ ЋnjHsЪ2№ЗЪіSvТeе(Гќƒsua“Улq2twНmйсП—žD€Ж^кiƒЪohuzиrPS”иQKаyŠ?В, [„ щSяљмм…pЇмbXŽŽ0IэјХ+žшЋ%{7кЦщћЯўнд~ќk ]_ Ѕ+Fыя–)<ˆ Ў.ы›ТcєwяЯ§O"<ў дўёЈџй䢘яуФпЋтќŽт§РцўќЫо§џbгџt6нњіц&^Ўиt?Чџ;рXќ‰К?nwкЈћцKџЁVнЗVьkНп-LўѓZu,ЫoОћЇX–3^k ЬXЭ№S™Zшт;ЄокцЏ%ьЊeVц0иы…ДцVWiCмŒYpdОn„еTѕc‡Њ.H4GпЄЌ|b0Х,qLH—91е?а(ОаC…іЊиЫвоmЋ,Ёž9ѓѕН5E;С+ПТЎ3‘ІО#tЩoЭq$Š — О+ЄqœxвЋХ{,ˆгi_цˆBŠя]гпYРs5I “Z ž‰їxеEѕ­хХа*ЊйvоrTМ\ Tћ4OЫOёХ~ў•Ќj5љ&QL"n`МСB˜cЈЛ24J„LАМweфQL М ˜Dт\<№ ЃЄA7>ULKЅHћцчƒkqO—VИVf˜јзњV}UœbŠсѕдe(gjьЃо№ тЃ…Eє'0јN$#оВечцV‘zЎн<22mи”у‡о ОеZVƒек…X=eЫŸАЗ.л­Žъf(g’жsЦ.`Ї‹xЕHЬўВ’кGы;„BШC]:Щ6hњКо Œo uрњ‚9^mЉ3K№ 0ИєН*Ф83„оРUРR'qЕU!^ј"miЊV;ЫУХž+Жі&XЄzОќц{АA-ᘾtf r%lЫг№б˜ЋЭ•Œ2ˆ‹рœ€лš‹Є5!рФЮљщ{?WNPxxЯyЪ}ˆƒФ9_tnэЯгїлџ*ЏЄф˜ђ{і—лѕ"ИиљtYХovЭH.$LјЦЈ `šПKИo —фЇяЮWо1я—•ыŒ5Б‡8˜p ŠЈ€эѓіЭdEPџќънџJ%WDбй<@ЛЯЪЌГЊлеьЭшq† %œnwJW ЫѓHmA$gы;/ЃеQ-Ќt“€Є4‡DЄJ„>ЛH•9дtpoЩ'П/жЊ„œЪ;ЫеД‹#є‹йЬxƒZ €b4ЕQвƒYІДчHuЫXЇГќcxн) нб`Ќ^bТЦ)НънцЎ>R-~LЄЮX-“У‡4>cŸЌFSp"DЈѓфУЇEcа$pDb ВuП–ЎM˜Ч`ђЫ ›ЏЗeR ыЭЌЉ{Ь @г–4ХOјвX‡r|/ЧЃiўxlˆŸП'ё/Td^„тМG›_=•љ€LК~хYoЙХ$O“Ргg"ШZ#WœЊ[Cи($$YІєЪ`єІ‘їЄ’hЗ2ќ„Iа?t_ЯЈmблм†Aї@{Оuп6юIbIc ‚І_ЛЎЫ]qыuœђК тšЗc(ЊHШZ‘ 3E’(§`бˆ8ЎvŸщІ„Rб*MpWDb,ЊV‰zСдL”Е5/p˜,~ТdжЖHЩ2..@„Œ[Ў’нsC'q§–HžB6ЦnxлžФбт@‡[<ТљG2Т‚0„ =V= J3^`я Юgs•і&Юr"˜i kШDр&ЮЃСХ"†ЏмOGцУб /ФŽŠкЬ–T"!Юˆ_ПjtwRлг-”Чб/Œ]Пш&цЕla­‡1ПЕ‘ІПЛЙ(ƒzЦ4оЧЃœ€ЌkдЊйYљЎ&ћ0mC‚[з†ˆ3udО72ЧkЏ8№Mj?k|ЁЦQріqŠЃЊˆP“бxyЉTЁЈk=Ћ‚вЭo€ƒŸWјб—љ{‡ВKЃН­ІD эRпѓќbmзѓН•Ф€рЋчYХ(ГЉ хЄq Xyоw hjHк‡ђ6?€=ѕp‰œЉ аCЌŒчгhС1Žњo‰—_хіНJџё—љ{уt„­ЉЫсц=r™ёізРфaЕ\ЪО3j:lы#§pБаZF@Ђ\н жАхвфю љA‹Wп6 УMŠП“ЖЊkвѓІŽ]г!& n‘PЄќ8ьD=К=цџUZЏ8яcwЮЊтK ѓ\M‹ђ7УѓyѓФ!‡к7MћЄ)hSЌc˜Aк}xТ‡оАОдAЗћKKˆЦteВfСš4їуJŽB‰ƒЉhE1–ћцЎf=~CЩGЯўtq№-пЗ?їяњuР^ЋухNџ•ѕШˆћЁžлWIЮоŒšбъVr YЄ^˜йіPлУЎс™,ь_ш_ЄйWм†шŸЯ;Шd1‘d†Ž7AЭB‹хМКАбы"Ы„:>…5u>шыMдŸН ып0+M‹/Е(Pа“4OррTсFМf#&I™жs–КэМрФ7ЭsWЅ­>Іџтъ цChГi{>6 SМfRЯАЃЬЄБч6Ц‚™Яўв С€…„ѕНpф&2еI_:iПкmћ_ю…^Мк§r~0c‰&ьyJ™+Y!ЁЖЋV—‘b дСЕЊ№šfRLЊB[кZжЬbбТgmZHLЬXHгNн_Ќ!†.›+i›|ЏФc@ћ•Ёо;ƒ=xЫ ћ4ё;Әє5ŒДДš%ŒЉХАДкзNк)^т"йНЗХKtRvђ}$Т„nнmO1ІMh(ВђмL"ГOЋBРIПЧLZ›qA7ƒЙЙž3;5 ЩTб‘зA,†л}qН:ѓЦ‚ѓ˜Юб0$є№­ЪcjФб’iХhй†ЭЯїqnвЦа{Vєй„Н@ .a_VњавЦЖс U]њХ`˜Nи!п{k2< ЛpЕh(Њ_ьсnиЂ›Є•‡v[В1Зі…ъpSˆй–?ш I‘ЛF„=ан4п}нЬ,Ѓ*еДу#ߘ€PCd&h0ŸЖбcй†ЄƒG‹v™‚“цaУџJъшї •)+ќТŽ8…5пzгаХ`эЪМ$ВЈw ‹м]|]ѓ!ѕіЇ[ЭKˆfзёрт:hy&Э$KЎЌ ­ЊЙ:i'…HьдёуДЄžПDєƒt ‰ЄёtzєfŠФБ]›wfеЃЊ+Ы\pšŸBфKзХж„RЯЛУВ№1ЉФ_§hЭЪжбЁbаЎ^g”XЕєіEњ Vj,щАЧ†›ТЊKМўН№5іcм1ЭRgф„i№D WСЧ\зТЋЌ­"г‡dЬŒGЕPЪЂѕЦ†?ЖжЎ"2cЇњfВЏі:О~мЄЪт„Oyњs3СWяМY›šг Т†I} з ЄuњћЗ‚,;q№bНМкёMC"rЙ]@лŒзДѓЌ!.i}Ј”кtуC›+v_Aхž2љЫГћXо)LуШY<7?ћв•4^)‹oф-~ѕџw5НТ@єо_Uк[P kв„d#э^їRЉRНЙ”Ж悉Œ•fїзя<ƒ 1&AMЋžHŒЧŸУŒafоHTт_–„бfЗЌџтV"KU№М.йr%ИдeoЦІ’<–љ“%S™N_m%ž‹Y{4/aЌjK u[О)Ё…| Šђ)KrшЧ†HІЏЅjЈjЖк"4­і,wƒz:ЯМљпф—а˜/&ї™т“;.ЋЁЌ#нŸ‡ЦЏl†4w№D”:щ|˜ЖžšНcxGЅгУa2ЦзЏЎ-ܘWp@$NьЫ …ЩЯI<39€K‘ІCъУ6 *г‘О.Кё юЯ-ЕЗТюЧeл‘Џ\БлNМD*.sРŒŒO(‰Ёc@U!В!‡6ЮoЋ;+’!ќL7ЩБІсЃ! ч@nБ[ђ oсr+J'N5ЌЙOXвѓЙJв|Х_Ь§˜[ё Ь­ikОeБЖ,ј–ƒЙuЉmd›ОёВяGц8‹зfсЎц В'_пєзžV˜БїЕХУИ‡­T[A8ліwEžTT—zиЈЌЪдvѕвS-ёlXЕ4jФ5ЫрЃЏіЗЊLE)Ыe`са‚zм›,Я"хšююkљєžOaіеZO;:ЪАЇ-леХv‡fЌctИ!б›ЦžcЌy>Ђ—РЖАУз4П<šœЩU6ŸтаМrс ŒлM#„œЇсЌWš ЄOв—и}P8O‚! ГыЕУМНй ЬЇчжюу’swгсG?гŽиr‡ћ?‚жПЕјѓАК2ыИІ+Е€Gг<ЁЋЋjK—џ{IˆќGхktikz-0.12/app/icons/image-png.png000066400000000000000000000016401325124551100170350ustar00rootroot00000000000000‰PNG  IHDRФДl;sRGBЎЮщbKGDџџџ НЇ“ pHYs „ „ЊтcytIMEк 97kї№ IDAT8Ыэ”OhœUХяћОљ›1m&ŽfZкNl3•T0QD+‚`г,ЄVhЊˆ;\шBDuЅ[] PQ”‚”vгT‰бк`›Ќ8IRbœ4fцћїюu1ЭX;Z+И<ЋЫ{—ѓЮ;ямџ5˜RЉ”ЊT*Н€˜ЋїџdЭљ›-‹г(Ћъ™U­1;НuOevюЊufXœО‹$–СX~р} оНЭLѕНЦdo?N`T0jС \ЎWж|rh€ёжOщш[!—яІ‘uБг9:2I(e™ммХЋУ7Б)Нчн/јљ–2qТT1.­кsvПNчгљ$ctЭdШZ—ѓsЮvэfjyžлz-~/[Šы‹E&/m$д*Ё#•Ѕ{5С›sOrjЬgцж_шмЙ‡K?z$5ФЈ‚*Ј *TЕ]qїЯАх;“›XШ 7ЧЄ№шє О^фЖў}ŒЮюТC@EUDATAl+-тЬрƒ$J>y.АfЯsИОТWЇёf• Я Е“=ЌAQT,ˆEХЂЃ6" §uКЄ(€ѕ<жž;Фжб—И;њ‰ћ—&ЈnН}9рГšЯБЅqMŒŠћuц/Ь‡ \cБhф3ИЃG.Ю-Г-БBЊPтЬГЃ|ўЦУ”ящЃјоЊm Š\ТІЇ"ЬUЮqьэЧЉзќІЏЊtЄzbќћк–mНC@ЕEЌ(ЈС]œтщ‡ЖѓkљEдЩ#Qˆ‡…–Bљ€‹уКDAHН^ујиЕНУCCРDћx:ёЉwhœ;ŠЋ тXЎHi*FёœAр!ѕZo&О]н;<Д8бЗІо}Џ0_=H.Л cƒЫ/А~'EUQcPБ4ъuО_~dџўЧ€ЃWRyЬЖь,ЬхAуіPPT-щtŠУЧTGFŽ\нк"^ P‹QiцвЦUдЦhaУ€э=|ќбЇGF<|љWƒXжˆ?xя4АыZ?œW(fŒ1їюuўŠpXц\~9Z­Љ ~Ћ%IENDЎB`‚ktikz-0.12/app/icons/image-x-eps.png000066400000000000000000000016211325124551100173040ustar00rootroot00000000000000‰PNG  IHDRФДl;XIDATxкЅ•[Ha†G3KЩЂPК(ˆŠюЊ‹Ръ>(Сь@atU™P:пt" ЪьЂш`mх&b(вA*+ЅЭж‚PФвZнмнœйУМНџЏ+6I}№ђ ЬЬѓЇљF–™™™MW@­ћЄЇЅ‘ѓЋmТ?šIu66ЂОИ‚ѓ;ИТД ”Џ QєˆЊPќ€:44Њh<ЗЧƒЦŠ ”хцbЗЂрUБlglАЁBйцž.-FDг ХbhБйpjб"$шШ№иТ…xR[ š8ІI Rђ^z†Ь#€–ЪJЯЪBA'SRp˜ўB~>КNyŸ™XƒUUЧРО№ћqmљR\"ш\j*Žг_/,„ћѓg$L‘HD*ЬЌ,СSж™ВkЯ „BЈš>ЕЃЮхdуSW—DЃQD КЎC†[‚хC›у--EУ’ХhžЈрNZ nЬ•їтМ'усЃpЁП‚‘HрУцЭx‘І …рлЉ |}}I є„ЪkƒPJМg NІєdСФ‘z)Р<Рqі Q"fЃГћ-7kpbж|< ­uuшїљазл;ОRмŸ”.J!е”= §§>Мёаіъ-.Šf&Ї'Є`_F>іє гщ”ЃJЮЦБСЌU”Э{——‡#рgT=k}oе \ž‘…“яЅŠЉ ”НІ­­­fsss€œyŒXЮqQšІeHшSъе@ј‚hђу~8ГОЎ.LЦJ–н5спК~OюN™ŒgЌѓ‚o,іC2€Рр <.—yУfаМ$шЭ3†7[iНf\УУCћaŸ=ч9ЯЛБƒAxнnиЋЊ4О›/жр„eЋ4њ—rЛ…8JоtwУfЗЫЄзы5oйэК& А›owШЈщXІќХы…ГЃеееВС#щX№ЦиnБШЈ†ИфПsУЙ].ДЗЕс5с•WЎЈ|~ЕkмП&ЙћИ/ЪЫЫ§ВІу5ўLsшжS,Д–š3^цO˜ИёSR–mIENDЎB`‚ktikz-0.12/app/icons/preferences-desktop-color.png000066400000000000000000000061321325124551100222560ustar00rootroot00000000000000‰PNG  IHDR szzє pHYs7\7\ЫЧЄЙbKGDџџџ НЇ“ ЬIDATxкu–{Tѕ•ЧПчwяэ{ћvЯLOїЬ0fx :ŒА<*Š1)‰Y„ЭnтЎЛB*5…дкЪn\M\Š XФАЅЎбJ™hВPдJтъА Yп>ПsЮ§ОHіFE‚P­12ж‚шv]C>d№Я]Я<Кlб\~цam:І­З!V„ˆ†B!эyA|^J€ №‹РqlФŸвИ]Л№'$`њ _ЖƒЖdІЏhHЩ9v@`сNNZ[Кпl~x§oьщrО‘ссTЗ”dЉ;njп#F6с1%˜  јLЛБё‹ ж!^RѓoЧY[hm 2мЎGДтЭKD§Ъy~ымЉ…&гбўсHЁшp.›—Ю 5pф—‘Kч/КЇСh†&Њˆфьёаєyњќћ: o nl,4љ…ЃУQ=+{(ЕnuЧппЁ7NkЂZA>Ї3„‘1ˆ†eо-R>яŠ’™jZ№ѕ–pю…жБ)Bk~АQc\ Wё1>'7Žgр3w­`~ DMAЄМд‘џжёZ‹АзЦЊCsЂ‘Аt ’ГйHјЌklлІББ1шКŽbšdЂЎ{ёмœЊяжэ›Ћ‹и“’йІё-xYётеXŸЯ™ќˆš5`$(х§wLЕЃеедhfицРˆШ’RТ0ŒJpfFјВББ N_А9q… l Ш0ыo+КЏšу>•Ї‰ Ј€xo[ВИу‡sц\лP[KVиdч•P*•ШїlœВ‰P(TОfeFЬŸ?#‘ШзЎ]YП(/K!Ш`АЧ€Ўˆ+p пZіiњи0u’ХЂї/ээsжЧу3 Ьв$‹E-ŸЯГы8”w]ђy”ŠХŠпїЁi …-]К”š›ša† мКЉ}–„gIPK@oмЕŒХnWh•іLПНщ?х#ѓfŠяЬ›џicЩ›вЌѓu#Аl[ЈlPБTbЯїЩ“’>u]Z1322‚ЖЖ6tvvr ю#ш26IиNоЙдulьЌ­ЅфŸxРР+ |€­ Мwuдаr–м‰5:иџъŽsП~ѕKњЙЎРбœl–]ѕЃ%Езmƒb1“&!2e Т--( &Е.^МИВšЊ‘”zF8EЇыљ‹?Xj§#ЗМђ‚­чМ…жTŽœе1Ў Фј+VYМІЗ!6єаІ…жёЃь ‡.@ ”qЪыc ЁLнГs':oК Eз­д‚”Л"Ќѕœ;>ѓЮЖcџ№•Е‹єe}з6ЯfбxKў@У$<@’<Ž зv4ы|ўгf4ъCа„(яёјЪŒВ„bжТ…Иwїn,Пы.pTКY‚Ё!bАL8s”ШШЮ\љўfЫО<ВIЫИ”уRЅ8B СФA9цйфXf4fёh1G%”ЄТS„•‘IK–ркћюC‡ ­Ўћ>ŒАUюHи0МЫ›е,ѕ епЪеco&уkЏпPќ#7t P @ЦЇоg[DљСkFН‹ззі4џ>кšёrB&" ѕˆЮ˜щЫ–ЁёЖлаДhЂ‘рљ  €І@BЅп‚<€СЁv"#Сzэ2sr§ђУЩ _Zq%єnoЂ|#РoыІ0А-`tk YЅ8П3лŸ2“' эЈZД*hyќq=\]Эv}=…УaшЬх „>1FH фЄ0tf;"ЂZb‰ŠбA‰PzьЎђїˆšяv4Їп5UСJ`/ЁpPџr#@@ЎуеКчnм3G˜К%=нП%ˆИЈрjОю:3гԘ#њNL=&иGёЪKњ`3RC’3n€nїB1VD EІ’™™,гп™zх№їЕЕ{ТWЮˆ†UO‘~s=@лИhMзwЭpuќсњЏншЯdz†ѓn*žJ-д 2MС8ОH`є-xн;сІо@ЊЌ0†{ŽЦ•Zн†f6@h&Qе\Ž:ћаšоГЕіЖ—ТЩмЙwєjw= Т:ZtТђbS.}Ж>?oжuЭ“џв4MR@AP"Њ,]їƒrЧ#)d†f„aZH3AB—+<№…, KI]unfкЂК“'gј‰иџiЋџГмЫ€C  ‘зDc'жПЖї'OЬ [VЛ2 Ыs "вs0і[€2№ЁТ€iзPEjAГ2…D,і}&v>ЂЁж=є?§ЅЊбAO№™XAjИАл!"ТG]чžv3™ŒІкŒ‰@€X‚bЫјjh(Р…!t бp*Ѕ0:дЯНR)NП0Ќ –КMš6‰и@фу?_е @Ю+(Š*lг‰0ѕў1_e'SННЛFGG‘ЫхdPю"Ў8-“ќ(д]а š2Qme0:м']6б‹’;€ ”AЅ–ѕуv NŸAyр q=­xL{ŠРcЩV§Jд„>`ќBН)пкПлрр`:thЎыJfЎd9€АZЦ аPЯ‚fТ hСzT№^eЂЅТKo iЬ Цм6tW›{?ќєТiуђЊ2yЫёeТL4Ш’я, "+ XƒA€o<іXoзСƒлlлоЎjЫ#зВ,f/Jбј7#ћ чNV2сЁ:œCj,;lСŽ™ RžŠњ юї‰lІOžљЄыхSЯ§&”оtYЄж§QX‡ЂвNQ‹њѕ–>їОПyѓЎООО‡††4• щћ>)UВ@šJn*w „*t#„АžFџ@?ЛЃgсxUЦЭ~6›н—.ќћ3Лž=ђг-иH@™ш”V~Ђ>ш­;†\џ@:?4дCPЯx9жЖ>ѕTўТ… O @™@Й&” fž0Q{ (ўU.B”АБ4ЮѕPVЬчRтя|Ї  >ysЫ#nбIЧт,цпy'˜пьюЦШЪ•<ѕщЇЩЉЋKѕf2+ЎнКuАsя^Q3y2ыž{шС|­ЗЗїw§§§B(T9Š(–$J їF\аь1‹5ЮTZmџ$3YWџјьЉ7žќбПЎроБz5ݘ>дЉіѓ[ž'–ЊУХњK—фi’Мi лЗ#œJaѓŽˆUU‰п—!ЧщМЎЃуэЦІ&Q__КК:*з€ЕkЉ„žmœб–q1ёmіBsФ@я'јшФ‰ŸnкєаљЕwпMЭЭMl‡mаЏњ*3TСŽ „$“-Е55 К5  ф]ЧЙ”Nїœš={xEЉ$OwuэninОO№‰„^SSОЕl\0ќ4У=-ђЦdВYКrщуS‡п=њшЮ;їѕє\І ЊЋ^§unmmEЗЪК~їрЧDk­^}я_ЏY3_5 ЯгСJRЂŒЊ8$M3гМmлЙOxщї7м№ьЂлV}]Э„xy8 EВТ˜Оˆœ;MіПBЅќйэOџьЅLzд9ў<іяпЯRЪЋЃМВв‹Реkдь–V2)Œx\ л–"bРОOвu…ЇіНин‚@; ьмОbХ[wЖЗџА)™LЦbБe™Х\ЮшщЙrњНcGМѕПшW­k–9ŽSPRxј Y6№ГZрoЫ“нА,Ж&O&kъT„ZZ ЊЊИ”ЩРЙ|™в/:УЉд…ю|ўа+D{ЮѕBJ[зѕмvнМ'ЅtК’MDКчyEљ \ENсLЌybџЬnnU‡Ž6­Ййѕѕ…R,6VаѕЌz И}§§}ЧRЉK‡ћћ{Д p ЂRX@Ыу9`fЅh4Њ•_Xљ|^Њ‰щ&№?G  ќ?€сх X"В)"zTXtSoftwarexк+//зЫЬЫ.NN,HеЫ/J6иXSЪ\IENDЎB`‚ktikz-0.12/app/icons/preferences-desktop-theme.png000066400000000000000000000020661325124551100222440ustar00rootroot00000000000000‰PNG  IHDR szzєbKGDџџџ НЇ“ pHYsЏЏ^‘tIMEз  _5\šУIDATxкн—OL#UЧПoцM mЖЫ.нжcХ&ˆQljТЭ1&Фd/В!№ьХѕN\BЂgcд‹б›'oШDHHЄы–КA„­ХІлвNь?кљыы‹“6ЄЮz№“ќњK^пМ~fњќяY[[зззпС%xҘІљ.Г_p ŒххeR.— &‰\з4-МИИјr‘>ВВВ".,,ьЛнn?!­=ж~Жі{ЫОЦ"фч0пnр~?Йя „†j"ЅgИ'yЖd–ђнЌ§Y={Д№цwhЃбtнxš­{EІЉШfГ‡У`ыpЙ\mBРhљsЉањёJЅ‚LMAI%заPс^Y…kvйУ#ј?љХ\n”9K­‹ УУМŽў~Ње* Š"ЮceъМ€vўі;"ЯЯ€"8пmРBaVSјў\€a˜ TФ­[~8СЩЩ ƒD0p!ХќcXMШЃїx<,ђ~'К™Lбhџ†aІИ,N‘H$022вPД˜І#xхѓyј§ўŽ2e рнюЛЛ˘˜˜шЌT€Г%e™Gхѕz;ь‡ььь`rrВ›fm ЃŽ A)э\рH№Hтё8ЦЦЦа ŸuЄМёЦЧЧб-„’^№лŽ?t†††а5’677љЯ­ иЃP(№њћ|>иBBo666‹ХРјя3ppp€P(I’`"йРгОННЉЉ)0zЯ@Н^G7lmmazzкJzЮMЇг<ЊZэьЪЛЁ9В%“IЬЯЯЃT*СFіИщКЗ›6Ї-B­Hь'PЎ—РЖ@ OyMQ|эС§$”—оТчАƒj˜Шеu$Š:ЄAГ‡===x]“?сыŸПМё р ޘщ€$Hx{ј}Мy 6рG)L@ЊЊсT7Q,‹ ”КЗЗwM–‹Ъдs/{&Т/&ќ­Б{k{Ч|aщмcДcMШWBР3PЌЉPх ШЃxƒ•Т$lМ‹Н~[3д€яІЯМ IbТфвхМќŒnR0њ‹ ЮлЦЅп№вjšnЪЅ’z˜Jзв'…Rъ№:<<\^ZZњaрЦ•\эыы“XsVdКІ‘{нЛћС‡wW бйpёFВƒn˜fЉЁ‘bE§ізŒZY}/GGGG@ XˆFgШEяsssЗйДќхkЏЮYЌЊ*ї61јьсЭ—WСўlžХфo"ЊпЛЙ*ўуIENDЎB`‚ktikz-0.12/app/icons/process-stop.png000066400000000000000000000017371325124551100176410ustar00rootroot00000000000000‰PNG  IHDRФДl;ІIDATxкНе_lSu№ГнЇlˆ’№СЂ3(OjHіІl‰Ц ЦХ9p ћCІЧ6el0a$(aџТ„‘ЌcВ?/ƒdК€‘dЎнmїЇ“ЕwєЖНнd[ћzŽИf—–№$'Зїояљфз_яM Р#щ‡орŠкHї<‘)RЫ=Щќ'˜+І˜ш•V“Щz!3г});лs5/Я{ЃЄD—ЃœwЌYЃHFВ‘Œˆh!бЋнЋVщў+Wt80oЗcNQpЧfУЌеŠ™ў~xњња™‘ЁK6mK_Ё{.^ФэЮNLЕЖ"pі,єгЇс;u Zc#&ъърnhРŸmXO‹ˆ/GЃ9№Z н?Д#`БРпм S|ѕѕаNœ€чјqL;їб#ИYscЕG1\_‡–ДTПЬŠa€ЙЂфFCJRРйд/ЏN;yюnјЮœЦ€іM <‡ЊЁјzwЦЋbфЫ}њЊжCUhz,ECЌœE{$š†ЌU•PљkЊЕЕа;Юcqaїff }ї-|хe№04йгЉy— ЮНfиwэФ@Q!Ў™?‡b…`ytЧ‘gЄК 7ЙЧ+ ЈКБTїІЇЁёѕЉЎN,/эћf ч~„?Ж€†ХЫWЦ“зС+уv™ПР­В§ИЋЊ!dqnЮ€Nђя Оџœ[ЗРію;мg†apEљ•Тнpь†ыГ№ця€‡?ЧЧё`щэч }’ џž"xЫїcЌЈзЗoƒapi"КжЎЦ/Я= eуИВ6AЭй НЭb@ччс.)ЦФлobьХѕPb№k,ЁЧD# 6'бф9ОйЧЁ~юС8‚Лt/"е‚ІAy)ЮиЙ%џSIь‡Dй!дq ђРBяSМъф(()бАЇЦ„ZЮ/ЏK„dxЅ9дGЦ?ŽЇлХыв‚e/?<Ищ…`uж9ўsžП2u:„ўпMЄџеvOS‡!IENDЎB`‚ktikz-0.12/app/icons/qt-logo-22.png000066400000000000000000000022271325124551100167760ustar00rootroot00000000000000‰PNG  IHDRЭ_ЬAsRGBЎЮщbKGDџџџ НЇ“ pHYs  šœtIMEл#МЫ„IDAT8Ыe”KlTeЧчЛwю<˜ЁгiiKБK-BEš(Љ ‰A‰Ђ Б ‰`Œ&.ta‚К˜šюиЉQОˆ‰n|ЦDЃ‰  QT,[„>вж–Іewцоћг6-œхїхќЯџqОOњžЮ^Мђї З–нд)u1з в^іœѓsУšжпš2Я]š0HEUƒћк†Н-ћBQV”tОыМŒ>sџFŒКx­X"aФpг‘чxCVѕRкЫžЗ Qy<ЫЬЅНььѓНЧЏIэCmЅіЮxbчнТPAYІЊ*UpEеbФСsт`&-vвgм Ђ aLb‰І рК†RЅ@% TёœЎЧ P‚ЈSДh а]ЎT)ШJНу#§;^т]ћ$А>?^ўŒF>AQЌUŒ1("fyОYe˜ГЪc/sшо'№R1Єћ <еѓ–€ чg9вvœgwПIЁ2ПЄ~5q ?VЯу{рФйžћ ŸŸў<Хю[іБ5wыт­4з5wXЕЈъЭŒ*Ов’ОИЃ9;ё=&•чЬаiТ(Є7w‡;акДЭЙ;9zї[д&P]СHD˜ЉpG['ГЅ)K<щ2Н0…UKkC+у WЈ„!љЪ<ЃsУDUе,(\h^з@9(з1+…ъJИЪиЕJОЯФѕa>ќыuќYDnYKЬqАиeІ‘Г\у-ž;xNAW™­рХ]Šy\ЋЎ ъ"И @hn,YiЖ*dk<ЎNސіВЈ*AhIz)ТЈŒЉЎџъZЄддЦ8wy€КдzтnŠŠвИЖ a|a˜0 –%WyШъдW™зЫЬЬЭАЇe?IщiпCЬu9=њи(Ђum=uШz еојm5ыš<жЗФ CEтefЦ„ОЮ^Ж7іБЅО‡=[wѓЫиЗ|§Я ђХйD Й:r™.ќw?, ™[u[зКћЊЏ_JѓЭкЧ+ЈIgјќтл|7|?,E–„“&•HQK”УЂ**ц&гŒЮYѓп№юАЁІL<‡ЂИЎ!”"ѓў ~XЈ‚ˆуп„‚ЕJ[ћZNž~OЇчЇш^П—§OR‰ќjbК"y &QџЉЛBаХ/%(+н{EŽ}y„юіLфGpŒKd#<'Ž#юДХNq†Ждя<ъЊ.і#‚XDЋ#BЌЕx™9ЇOMŠ8—ъ““юšK…pa$хІgcЦЛvИыииІКmОЛmcЧatт§Ш†*ъD)oэПŽ‰§‘p’ПnЮu§XџТФТ№uзxa[эірPз‹‘ˆDK2^хcўл”ЮФRџ”uIENDЎB`‚ktikz-0.12/app/icons/qtikz-128.png000066400000000000000000000400061325124551100166420ustar00rootroot00000000000000‰PNG  IHDR€€У>aЫsBIT|dˆ pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю< IDATxœэw˜Х™џ?н“gsаЎвiwЅе*#!! „#lьЧѓaŒэУцА X6С8`ћœюscћ0ј3@,V”Гv%mвj%mš “ЛыїGOЯvїєlVpї;ПЯ3ЯtWWWUїї­Зоzы}Ћ%!ЇѓC’$И,?'BBˆаћз:ЄП3РшPАн‰ŸЧ№sр4pR{?кЋ“ѓ§Ќќ+%РvЂiмcљЙ?ѕЉOM]КtщмŠŠŠieee“@џќљѓят@?аq.mёљ|їЭš5ы3fЬ()**j9vьиѓўѓŸяBD†ѕ,—ƒ“lНGлэ<Ÿќф'Ћ–.]zAeeхДвввЩ'Nœ ЫВ'‹ХBрёxBYYYЗG€уhRрЌк–““ГZQ”bБ˜4iв$bБ555TTTtuuu§ЧЃ>zBєљўЮ4иV1юљјЧ?^Еtщв9UUU5eee:иоh4J<GUUьоmvv6ЋV­ZS[[ћ&phBФGкжТТBА˜ алл‹$ID"ZЧ/--eіьйoюкЕыƒMMMщЪљ?;XР6žі 7мPЙlйВЙSІLЉб{ЖУс0нппŸЎХb1ЎИтŠЊккк‰ђ]hУСHщрdggG222мБXLЪЪЪт№сУДЖЖ.ЊЎЎо9uъд‡>nWШџ А;­‚v§ѕзW,_О|nUUеtlЇгщгСV…ўўўpэРЖKW…™3gNМ #š жп№zН„УсpffІзхrсrЙƒЌ^Нš_|‘}ћі•:Юg$IZ"„ZЫњџ’$IВ‚m;fєЃ­XО|љм)SІд”••UСŽХbЈЊJ0дЫ4–Ÿ’fwnwMUU***J`зHž­ААP~ Иsss ј|>ЇЫ5PŒ‚Зп~[фххI}}}ФbБ9Рзя[Ыћ_Я’$9HЏ'{ј5з\SОrхЪyА'К\Ў$иУщйv7ݘ^VV6H’dЋ/иб­ЗоњB]]нЂ7п|“H$‚Ых ј|О§КЂ(Фb1‚С  у€sњєщьпПџЃи0Рџ*%0і кеW_]ЖrхЪySЇN5‚эD"IА…iС єse€ЬЬLVЎ\ЙІЖЖv+pŒa*‚ПњеЏОRZZњK€жжVyф‘XOOK–хdžp8L__нннЧ…“Щx\ёik™џc%РpСўа‡>TzщЅ—ЮŸ:uъДвввŠ’’’Злэ‡УФуqтё8}}}) к‰ёбf‚tщёxœЫ.ЛЌr$ŠркЕkГŠŠŠ~ZTTDAAsчЮeўќљЎЧœM›6%•бDяяB”noОfWюџ0€=˜6юОъЊЋJ/НєвyееегЫЪЪ&'РЮ‡УDЃQEЁЏЏO/3љ?иУњl•>Л4EQ˜5kжˆС;v<2{іl—Ў›dff2aТ&NœШђхЫyшЁ‡8tшсp˜H$В Зп(„hЗ+ї=g иVm< њ•W^YВjеЊyгІM›ЎїlЧ“ …’`їііЫЕ§Ow|6Н}Дt!•••УV ‹ѓѓѓ/їxЗлУс уѓљXА`%%%<ёФќсhJ ЗџVёjКВЯЋь“щW\1ёВЫ.3эѕz3ƒС њєKog: ‡ ђhˆќs зƒYYY_ b,,,|ксp|ДІІ†ЂЂ"ЎЙцQZZ*хффрїћ‘e™H$Bgg'рСdћіэ­@"ЖЃХ’$ЩЄjу)cіЊUЋ&\qХѓІM›VSVVV5qтФ‰^Џ7+ ‰D’cйй§? Kїљ|ЌXБтл[Жly“AСТТТkgІM›†,ЫДДДєdgggјУfХŠdffтёx$‰h4JOOнннlоМ™|№КH$ђЌmtVC@ь!Д•+WŽћР>0кДiгЫЪЪ*=;+ ЂkфнннC‚}>™aИЧУ9IšЂ(\vйeU[ЖlйIEААА0x ДД”мм\vюм)мnwv?O>љ$;vьруџ8уЧGЗH’„лэІЄЄфдPрУ0`А“ /_О|ќъеЋч%РЎ*))™шїћГћћћ ‡УФb1:;;ЯьїzmёЏ_SU•YГf•3И"јЏ™™™уJJJ8qтЁP(фз/>|˜ќр\zщЅъe—]&ыL Њ*ёxќ ia Д hh&chЄ№,]КtмUW]5oкДi3ЪЪЪ*JKKK­`wuuбееeћ№яеџPigs<œѓсІWVV–’F,,,МИЉІІ€`0и‹Х2­eієє№РДМђЪ+Ѕ_ўђ—;v,‡кpчw>g[ЙЕ-щtI’Вт &”~щK_Z1}њєКЯЬЬЬщяя' % +CV4XчCєПзL0’4тёx0;;[_n ЁњНгІM›\VVЦЖmлB‡Уa*LUUNž<й Чx<ЎОњъ5553яОћюA—“э„ Щ]tбЂ7оxу—mmmУлІЌДџяEЏ дс}.тп.нэvГtщв;ЗnнК ƒ"XXXјГ1cЦ|§Т /ЄЙЙ™x<оъдЉ ы§===ъЉSЇТ€>,є3„ЖА!ykРБmлЖ@ooo_8јrЯ фюњг~>РЊьЁЯ і`їUчpвUUхђЫ/ЏТ0 .$щ+ГfЭB’$ККК‚mmm)р+ŠB{{{рм9№apˆЃ9/†OэЭƒ‘ЃЛљєрНщё#•.#n8L’&TЄHrя ]uHJФ6Џ‚йГgO"С.—Ы<2oоОlйВЄЛб`$|yH)м ™ХР№С­о?мk#Й€GŽѕ"EzA‰€HТ‰ШƒpњRЖ-Ч@‰ЅaЯч›ъѕzП>gЮZ[[У™v’З­­э0йtŸтmCаА$Р† ъ32R†!{ђч# #м ”б†{mP1ЏЦУШуШGДонл Њ‚Ш‡(˜Š(ЌFЭЋ€ЬБH.џ ,efff,\ИpœЯч[ГpсBWQQяОћ.BЇј]]]]БXЬўnрЧi+‚вJ!„"IRˆО§ілЇЂбhš]`PN/Hu(чуЈ4YBЄ)к‹$ŠЎУ žlDжDэиЂдС@*OffцеSЇN­ЉЎЎІЅЅ…ъъъў­[ЗІє8UUщшш0Nл4б6>…Ра–РЄhll<™]ЅЊщ‡Lе“…#кƒЪш€?šЂ_Ї51ыUA’$„У žDv)Тсоp`s>мkFjjjЂЁЁсТеЋWЃ( uuuБ3gЮdиѕў'N<~.„и>ЌŠваА ОООiсТ…Uщєг‹ђ КŽ!Ѓ"p˜ЎŸ/№э—у!Єhr<BA’d„У‹№d!ќх 9†і`Lю —nЛэ6,Xр?~<7n$++‹ŽŽдX‘ОООоp8\nHЊюq…jn—d€нЛwїx<Ж™Ќ€ _ВУСЎД њШР)к‡ЃП GWЎюz\zфHИ2Pr&ЁцOEЩЋBф”‚7Я~Z= ЭБѕй‡чгхъЉЇhoogжЌY?~œ™3g†RІ[BкккB€^‰>7Б…CI}&йАaC§эЗпNOOOЪџ№чƒ*#нˆЌЂ”|чдуHб^фh/R,ЈЅK’;е…Ш‡jnЖ––ђ\ƒЄйб`љNŸ>ЭЯ~і3.ПќrЂб(ћїяWOž<щu8)yлкк,.^ !6ЋCа  `P#oП§іЉx<оЄ(')РхG’HЁ.У{ёЖрЃ"EzqDћт!$YB Щ›…ъЭгДQжьŽK;›<wоy'ГgЯІДД”_|‘ђђrqњєщ”|сp8дззWbH:|kX• ƒ†у`T[ГВВ’Š hњБъЮDІнЫ%Ё Gz‘Ѓ= ЫШ„;ХW€фЮHUшF№й0С`i#ЙnЅѕызsтФ ЎЙц>Ь‚ xьБЧRКО‚жжжN`‚!љŸ…=жМgK#b€њњњц TE"ЉІM§?™юЯCt7hЪ—ь4]—д˜&ТЃ=8C.„'%c,’Ы—œAXЫо>д`НfGg; юПџ~V­ZE?лЗoчЬ™3ЖїЖЗЗ7+Šbь§BВф@ю?ƒ#дŽЛч8ЎЮУИ:уьkЁЂfM$–?•xA5J^%ЊПЩх3•w6р­‘шЦіЇx8 Ÿ­bC,ШнwпЭДiгЈЈЈ`лЖm,[ЖЬ6($ЦКЛЛ‹ IРП ZёYаp „_zщЅ:П_[|ВыEВС<ГЛWИG№4ŽЎЃ ЩФГJ‰TkПœЩˆŒ"pИЯ])O?§Дm}'NœhCѓвщ+B{Qq4ф „ˆK’"лЖm;Чћ%IЪэЁ‘.С3šђчє"<9Ј“Q$Ž@+8М_Сbї|?T}жczњУММэ/oлЯKoюЇѕЬ€cэсЦS,œ1I›]Фњ5+bТА œ>ЭŠ˜; d'’$…ИяЧџЬŠ+Мѕж[ƒAлК;;;OЧуqЃшQёxJЦQ с:…š,‚999•КиRНљ_ šфЩ€P7 ЅО‡рл‰{;њУѓ[ЙэіНSэj@юкŒO"ЃdГбЫH?ќсЉЌЌЄККšЇžzŠO}ъSќтПHЩ‹ХдŽŽŽlCR/№Eл†Œ o‘пРGmv:”:l}yШJD[7\EbМЙї8[vуTgЏщžsѓ‡“пZ‘$IBBрs b^Я)Eж ЇANxs‘ЮДeюиБƒ;vАxёbЖnнЪьйГљљЯn[tkkkкђАNw!šг7цмh$ Љ.[Жь’x\{AC)‚ЂчRДМЙМЕП‘ћнФлћQ k Y~/зЏšЫЗўё2ЦфfšЪ.јУЩkj Ј*С`ˆLG)вƒ $sЫѓјр’6яђ-–ЬЎъ№“Ÿќ„ЃGВlй2ž}іYnМёFОі5-NГг]F‡Ї|аrЮ’юлОw8‡;ФI˜„ЗnнкЧ“j№`У€№fГЃБ—мЕvH№њCQюxр9xњѕs?A žAtд!Nэ…гћКŽƒЌё‹ѓЇзыиyє4Ÿџе&јЦ:>ѓСХL_hjЇ,йП6ыPtша!^{э5цЯŸЯ;яМУдЉSљЪWО’ЬЏHч-4sыp3Ћ‰Xz“"˜——WaŒзГыqћŽЖqУУGшŒlЙњ;џљЮ<[e‰)eХoЕ ЎMi—NЊЊВfЭ.Кш":::иМy3“'OЦИЬ;јрqжtxeИ™GТ‚КЎЏЏoZДhQE,K ЪсІг\џ?аП 'ƒE3'1yBЁHœгНМєжAТ‘дНяxр9.Пh‹ђLeЫJТw'7d—O;oRвЖ “œFб{ї@cђ\СЎУЭ)=]Я;Ў0'%ни&+ !xшЁ‡ШЫЫЃЈЈˆ—^z‰G}”|ф#жœЉeЊqЂф’@’hћ іЁyjKќŠБ*ў“иў№А}GЪ ВgЯž†хЫ—‹™?ѕу`8ЪЧОѓКzє§uржы.тыŸО’LПй’xІЛ[џѕi^оvаTY(хО‡žчЁЙT›g $мo.Rс”фли†tC’5mчс&Szы™nл|Хљй–kЉeuЉІІ&žyцVЏ^ЭоН{™8q"з^{-CyV{;їqЫu‹Ѓ?џљЯoe`С6;=MšwГд–K Z‰…†Ћ€a*ИqуЦ:Џз›іeџў…ЗhыˆнџЮUЅмu§2§ž”ќEyY№T1‹™Юџ›Д[ ‡Э‰‡’&XDqП]ћfRєЛœОѓ‰EыGjлƒуЬ~фіCюб|цЧL‡БГ x&c'зpЫ?,OЉїЏ›w‹+iu уПѕию\OЛrёŒфљеЅјНnл|’$сršWjэ€BpњєiyфЊЋЋ9tшййй\|ёХ)х‚ЖП__п€”\ЕА†%K– „`Юœ9“zїы-ч‚ѓЩ JъѕѕѕЭNч€F‚]mќч_^OfўфВ Jѓ\HЙЅр/@-š(šŽШ)O6’…Оі‰KЩЫі›*ьъ ђъ;‡“yF|€O_u… Ѓге+цІЭрpиП&ЋXГf ГfЭЂЛЛ›­[ЗRUU‰‡РСƒq9$л=ЗkгCUUЉЊЊвЃ†ѕ|sлцн<TёПUlИСЖВAшl МgЯžуЦM р‘uлщъpНnѕ Ш™YуД ŠXџ@ўs2}|уS—ЅTњЬk;•њq]г)КzS7vДЋЋ8?›пЌљ4ж”ѓеO\jЪ“:dЄ*|BˆG я4Ђ§Я?іk:::ШШШ`зЎ]<ёФќщOOЅДAA(ЄЙђЙнкћs9eІW•$™ЩК`J!ітDЪŸNgЭ7nЌїzLж’$ѓвЮЩsЗЫЩМъФ‚–?_S‡ˆјЬU SиЖяј ї„"1Оѓыч˜ѓ‰яѓФњЗ†_?Пі’ЙМљ‡;ёК]Жyt ­@ъ<Šhлƒш:ŽЊ*t‹l~ўШгTUUqєшQTUхњы­Z#ЧCKK YYY8CЫ”ВБ8 в0'''kюмЙcHl %I)#kс1Р~хj)$Скккжx<вA‰ЦтьЉoMfœ?­OтХтЭеІqAЭ<Ў7K’Dn–ŸЪ’1ІJЖДгŒЄмак`ж їђуџк@4Ї'˜ъЖ>иа Ы6&уh?j ѕд~дж]Шн цѓ+ x&NEЪЫї~јcЊЊЊшщщсэЗпfѕъеЖZП‚#Gސ‘‘Aff&ОDЊ.›М.„@UUЎМђЪ)иHiоЭe–Ђз‹эŸеwFФ •\jll<ЉПИ=ѕ'‰ХТЧЭœЄ5X’4п>—)<0ѕЬ„М`zyJНЛ7лyІГ—ЦЖuЋТ6Ј^ Dz!а‚кЖхФNдж](нШcІ ›kLzЛџцЭ›йЗo>Ÿ}ћіёГŸ§Œ‡zШ6ЏОCiVV.—‹UЋДЁЇКlЌI—PU•Йsч–c? ŒŠіЏгH%‚FKУяl4eZ2kВЉwЫОЧCmœщъKfИ Ё§›іхi/7д=шјZ/О кИл)tѕє#”єŸA=sЕe;JЫvDЧQS>G~9ђј9Ш“|Й)`[ЅШ–]uмђЃЧ9йHЫVŠХcмqЧ”——гввBgg'=і˜­„r:дзз“MFFЊЊђЩO~!ŸИr‡џђ=МюTkoŠ"шЫїЕdk^KлаaаˆЄ KУIEpћЁVcМ:yYЦœфKqИpИ<J?0/˜VТ–]ѕЩєЮŽv8sHJВ' y25н"˜о[ЪNьєБщ­ƒМєц~^оЖŸЇЕE eTqУх&ŸбјМЊjf†ЇўєNЇ“ОО>іюнЫ]wнХ§>Nм5™8Вˆ# EHzBЬ^ѕ1кšсrЙїо{“хdљНdљНиQBАN^u к  ‘žЩЪŸ­G‚Il911@vFš…"_.m†€XТнˆ`'j<Œ,Щ”e™Чвю0ШуfЅ4ф„eя‹?|Œ/ўа,яЛхОsгUМђіA.џв/RˆDЕњ†#^~љ%jЪ‹8tшŸјФ'јхЏў“9Ыv+ќАЛЄŒY|ыSг™kя‡sџpі `R{х&#~V†ІX™@ђхЁіДтш<ŽˆѕЃЦЃZКлў<фТ*piЬ“=NЕЩћѕѕ€юооє.x~+яьoВБFCј )zщРW-[яsђd+МѓЮ;8dpˆ(qЩ>z Уч‹_јќ@BД"pg"мY)љMŠ УуGv~Ш’х€иў№ЎД“Ю™6mкT_Омќ!ŠьŒ„NЄWл+(д…Pуš/^АыG*ЊFv0ŠuVaНС0qEХщЙхўЧyzг№їEаЧиЂќ,цз”БЇюбXz/ЅTEа|= бtьЗп~;?ќ0%СДњf‘SWнФxфыWтh?BA Р• оpњSђы”“““5gЮœТ]™c@ЪЗ\>чоgЇТ€"}эЕзNttї™TёlЕЉuєД‚Ы‡T<ЙфBЄЩЫ!kŒц?яаДќtК@vfЊ—]DЮpHЗHNŸ<žЗ]Cэ#ЉСЕzнvRР:ДДДА|љr~ѓ›п$гœjмМ5.€Ч)ё…e|јђЅˆТ)ˆт™P< ђ'ƒП K`GŠЂhKУYуVY. р‰Az˜tVРт#9qЊ# $Ы[JM*‚nd‡лД& ]N=NJuѕє3&/‹Я]s1+цO хT?њ§њdžO^Й0ЙжЏя Аь‚*ˆѓЇ•1wjIвИšыX:Р­DщшшH1їFes›Ls7sп=‚4›k FBfЮžSСKЇ/В\к"Ж?мh{гщ\мR“УРщЮ“<Э1єоp}9šOŸн5УБumьИtС4.]0 I’и~АбФЫ.˜ТЭз.Е]и1ў—ŒЭ71€ЎПйџЊХЁу#з]KэЫMЩq˜Чђљc‚ќєлп&нЮ*жЖYIUUNє9Њ‘RЦ•Q ;HЮЌЂ9э,|љЈ§эˆxЩ•9#дЬwIDAT>_– tъIŠlKЛЙИ]ЯжCt ”(RИьBєqКН“?>іdј МєђЫXGюИф6)ўp+ЫfNчТ /LiЕ-щHСл‡O[Ї~QЮrхЯŽFE#q†)Pvbn›2 $№ч!ImaШeŸА•Сp4%ЭЊеЫВy=пюE !R@tCiV‘œnЭ[){В;ƒ5wн„ь0П&йса6h3PПГ yь–U*$ rСЄХЌГ.m]щ@He}> љц7П™ЬыѕzЉЋ;YЉžУ.—‹NїdT$\2ЌЌЮчškR#ЙЯFјЫ+;Mч2J@myѓ‰Ѕa!ФЈH‚se€8§эІ}kb 0˜ѓ†ф/!С.№хCЈ 5и‘$йьЯЃ7b~Ць’dПY6ёuVВz,š}ТЈsџ§їгм<`˜2e ‡лЌHЂ(4wЧ —hŠlevм{_кК‡г>њC6МЙп”VUьk8Ќ*њWк\ЄЬCЮŽЮ‰Š`ˆ(HnаТЎњ‚ВьlJ ь„P'JW3j(€юС‘Q€œ=ЙxšI‰ш ХLїgјRƒ7Ќг@ЋIwИг@ иО};Пћня’i3fЬа˜СU@ I2ŽВE ‚GVљТ5‹7n`&p.:Р‹oь'd ˜§‡3Bп_ŸtsgэdЄбP!D/’”|KЇ:{Ей@,ŒшЈG‰єiг3‡9ЃG^)ŒŸ ёЮв SMЦh@іІ@~я@дя гР4ю[CщŠЊpлmЗaмГЉЉ Эчб2Є9<41ИЊIЃš‚(7пtcкКвЕCŠЕСp@ kwzSјЫЋfё_>Ў€kW-Ь§ўасb#ІбaDd€г]НT–ŒAШф‚Щ8<лО$AєхAWc"ъ7uA$ЎЈ„ЃНРn 6г@†ю§‹ЮкЕk9rфHђ|ъдЉиmн афЌBЬЛг/Xd˘djdДТЄHЁ$Тъ]O6фU$g+Н§a6ОeŽ”Оі’9щ|Я™Юv5аHQІPлг]НиWrч [EP’Д%bRuыОP-dџ`oЖs№АЮчг‘ѕКb№ц CЦђ)‹ѓуџ|Nю‚Sћ иŽpgЁT#ЦЮ†БГЕ`"э"ŒŸБˆџЩ ™3e"БXŒ~№ƒК mЬрйа93@тL  o§f%Ћ1H–I‹ •њ, ВЄи–Ёьжlк7ьЉифЩ“q:]RЊоНZGЃTЊE;чMFxsгЎѕлšПУЋя1Ѕ]wЩ§[РК ЎЄjФgAЃ!L(Жu lf=˜MojЈги^KˆзŒŠёЖхи gЇ rrrшьД[g1З/vр9ЪђЭ0Wјбя7 R~zрuZћњгкhуПЊЊФb1cд№ЈщЃФ’‰v2oП’– МyHБА6nZЎY‡€™•жxRЇЧ#э§a+њ­э_xсМє›;ЩЭ2›ˆŸи№ѕЭіŠуp˜ђ/Џ™]ќ*KЦ0}’6І(ЪyQG‡$ЩдmoKYХВых’?Lы:Y•Р™Uі+rжXIƒэН ЁN žмЫ‹CGAA>бЏЊ*}§§ІДОхK”Œ-рЎЯ­6Ѕ+ЊЪR@ЇСzН1Є#аЯы;ЬVЭыVЬI^WU•мммœЉSЇц“F”цнDw3Jы.тoo| ЅН„рŒšЭ3^7х7nзb$ЧC0hЖъ1}Ÿ^Нќѓц’OПВƒC к b$CСs›їWЬЬ|эŠйI№u)АdЩ’RtЋј2№$Ы0iДt€ж„mћŽ >ўЃ)‚IвЌƒ–ыoюˆј™>yќ ѓyАѕ Jу[Ј ;‘ЧTу,[ˆГl!ђиH9јі]пKnв S:­ПЕЕ•%K–˜лh‹пыцІ/6]SUСїЗ~P№эш™зЬЏpjY1SЫŠPUU“Š`EEХX†Ћ"Ј9CЊqEN %ЃЧGбіБKв›{6u0’щ\’N?"dюиЖїXђx`/uЃДзk|›ШБ7рŒYkŽd•с([ˆcьtЄьqꆑzс…XП~=C‘§;ў|6oоlКfŒўТuKSBвŸлМ‡=ѕ'АR:№OuіВe—9ФэšхГ’=_—БXŒ‰'ŽAsРѕI’фФЯЮJ4H‰ti0fлБз˜Ж§PSŠFkKў\DДЃwпёжvгLЂ&?NєиVЂЧЗЁіД!yВq–\€{вb|Ї›ŠыEвОшіііфJŸ•$ЫlТэvгккЪќљѓYЖмМy•Q-ШцЃ—^`К.„рћЌOIГ#!§лЎ”Ёьъe3“РЋЊŠЂ(„УaЦŒ3э“ё>4) 2•ШДuщXœЉЫ ’`47Ћн ,вO‚с(ЛыZИАІ|№хa>šQк!Љqд`[jЭНaщђИ'WЄм+„Hщ}FПAЋџ-З|‘@ UсД’ЊЊIГ№<€ЛИВg'Џы@/џЫз/чЩ—о1•Б~ы~ЖlbоДR3јB…p@sM @Ј<ѓвІ{ЋЫ‹ЉœXH<GQ”ф0F),,Ь•$Щ'„0ЮќcЊбСv{oоб@’^Ж&=mpiJЇФНЇPNю'~|+Ъщz”Ўfm[љЌ"\“.тS|Y3i fZ7Ф ЗЫЬУvŽЃ===L­˜˜ынюєv”X,–Œѓяээх†}мtнК§ььЊ‰\lиwPЇћ~ЛЕя Дз!NlGДМ‹hнЅщ<О<ЄqГ9щЉdлѓ—`>|ё ЂбhВБXŒh4J(Ђ   [’$]шVA й1рг{ТШB 2M №2Т ђ_ыЖqзЭW%#`•жНк'с2 s' ћg€PQд0В7;a†­№ГWляГЇ?“5v?ќѕйgјќg?FvvЭMlкнщ3Ь‰!@UUššьў№‡ЉЊž/HІ9ЉЦІ/єbS43Р+ясЭ]‡YQU•ПМК#ЅЌе‹ЇЧ“Ђ_—ŠЂ0fܘЬxPУHВОеЊJз1%ё@ƒ‚Ѓ(Фі‡CХДKuo˜Ч^|+yюœ0 gй…8 +|‰™Š$ƒЫ—4 7ŸъboІ@Йœ>}•5(ЦLV ав,ˆVёпкRзых]ЩзОј!ЎZ5+)Šb?''‡_ўђ—Щ€Њ‚кsЕm?Jу[(oqХ$…ЩуRg_?xzЗˆ”1‹%{ї3Џэ6хŸV^LYqŠЂЧMŒАyИЪЫЫѓаРwAђуЬњХ&ј0šC€ЊŒ6;žMј$Љ­Ѓ‡›юћу ІPй—‡@ К|фЙ}†oКzIк{tЪЯ6bZOЇN)_xўЏL­*! ‹ˆGФЃц^=ЛRтфЩ“ч5U|ѕ#‹QOІлbеьЩЌаv?Е|aфгЋšТтtњўя6˜@еЅРГл’їŠ…S’=^7ўш3!ёxœЩ“'H’Є‚œфWЎbр“О#њ8Уш2@нКbс‡­Щ/o;Рї^ЇЛЅочЫ#UЙюіG’cјДIуИќЂщЉy-4Ж лфмБuЯQSшїm?џ3л›њ‰EК‰'~БH€–vГuяђЅ˜;]‹ТrЛн<ђш“8Ъс˜0‡о˜YЪДœЖ_СєК|цЊ…)щяlbу[“"]g‚чǘ§ўjЪ‹(+ЮM‚­›ЙѕsY–Q…I“&eI’4А*(;Џ6“њё…AhT@Її>ˆ)2џGиРЗў ­к~†FF8дтƒ?нЦŽ:­fљН<§у/ щоЅ3TIq^ђZ0хзOџЮž~n§ЩŸјї?џ†€#!њФ"=ФЃŽ2w”CgrИя›WёэЏ|ˆ;nџ555Щ:КћЬ‚дшКH$B$сЦЋиn*ѕ“Ч^MЧ9окСоЃ'MyЯ,7~єŸюIЅЛЎ—––ъŠ ›вЅ ЩWŠŒўGkNэiЇ`ЪсЭ§’ѕвцэG˜ѓ‰ћ˜]5‘’Бљdњ=<~’w4šŒFППчŸ˜6iœѕіДTRœO}ѓРTъ›Пњ kx–h\ыAпќh…&њЃšј„д6;˜МuмЫђ*™q—pгч>гзrК›]GZLyп=иФЧ.›gваѕ^Z˜ууЊХ5ќьvnт'_ОšЉЅcL"[UUnМъТјХSЏГr^%В,БnыС”ы-gДœвX•…П(uУ$оG@ЃёHc›юuЫъˆЂX/œœЫ}7]ž<7”РIЂ-Л љсУ#rl+j'rіXЎЙЪК†F^—ЬOnžA,вC,`УЎ^~ДЮХžіІЧN‡Иэ—Д=‰ОђГ?гpв~ оw4ёшКЗ’S:удnњЄ"цWЇ._n:У›ћ8квЮЁF{ПQ ї]hQУ§ЇлуG_§щммјУ‡›‡Е2uјdmфхdЃєœ‚H .фЬ18ѓJ'ЬJZэu]рCЫђЉ*)ЂЮтŒБД4Bž/B4 эAU"˜?ЪynЄ$hєv}>sх<о=д’rOэюучЇn 5Šєў2€B$Ж‰Њ] MOм}Cѓ_З-НяЗыRЌt—“iЅь:ЊЭГ{Bq~№›gјщWoРUT‰У?`XБ…I–%Ољ™+јќїџ˜L[}a9ЗЌPˆG{ДљДъЂ>>Н „$ЩШN/•ўx‹XГ3МФb1’рŸ\irкАўfUŒKNзЯžlыЅѓ+ЙxV9ЊdћНdgxЩЮєrхТЉчgвг˜Љ ФC#ХУHBEH„ПЩхK*њЯыѕђјŸŸнздzњ”pxкqљ:qњ8\ДЯЦ ›†ѕха‘’$I9h[šWЎ_Пўы+WЎ\вгbџБ“ьй{€cGБhJ!+ц”сЭKеq:БгЈЧхра3пЇtl~кшbы зџ_|c/k7яцкKцВсЩ_№Йыkˆ†к‰†:ˆ…ЛˆGћ$pКГ9иЅ-<‹ляX“,#&Еt]Л7jуFeЬ=^їE4ЅЇ5xт!ЄPЗійЛH”8’гЃ}uн›ƒ№ц"dWrкЇџGђ8++‹{яНwн/љЫэёxќ кзУ„#о2ў|}К2Й{ШО}ћ/Нєв%й>ЭœЬт™“A2ятёйЋ/цў?hЎT‘˜ТнПYЫяяўЇWzхт\ЙxmmmlЯŽ&{ОыGU"HВŒУщg_}ЖШlж|ч;Щuv}бХhз5|Ѓ‚ЉKЛVGд$Dћ‘"фHrЄU#Й|кBPжX3Ur ,D Hдc_–eclњ’№YЛ‰Ÿ% Аyѓц:гwsl A7_ЛЬ4чьХmь?жš’oИєФБrёdтбо$јЇ=GњiюЋслkю"  …BD"Ђбhr>Џ›mѕŸuК—Тб>Є@ вЉ§аИЉё ЄŽ:ФqфMD*[„qю†P7jИOћ ˜7Gf>ŒЉФсЯA–&€є1лж:!Тэt ЅыБ^fqqqNЂ<}iXwyџ AЩaриБc-C1Р‹І3yBЁЩјЮ†з›КЋч`ДЅіoь?|‚Пўп§ђETWфВmчiSјоїю"›€з=ЁhоHJ‡цЃ d.ŽŒ|ЄЂjžLлiм|]G0!vŠЅ]ЙњЙ^Ž~-?_›K&є€ГŽ8Ÿ мGpпО} +WЎ\<иŒC’$>н2юјїg’i[vеѓBэ>И4бЫL@€gžеќ§[Nі№ЯпйШ3KЈЌЙˆŸ§ьnBЁ6І‡ƒ(§ФћкQњ:QЃAэSДО\$_.Žт$OFR|pc§кP ж:ьЦcЗлэ3fŒћдЉSV 0":_J О6^[[[ŸюŠFКёУK№XжїП§ЯЂЊƒ‡TщєдSO „”ЉB0gўJюџізш=іНћ6вГчE‚uoщjEqјЁx:ŽŠe8'/С9~ŽМ‰ШоL‡Їг‰гщФхrсvЛ“џњЯуё˜вМ^oђc‘Cѕx+јщ~VFаЫž9sІО*шт,СѓЩq{ П№Т БXЬоWЫ@9ќУ ГЇЮОЃ'L.bƒбУПyРtўOзЎт7,ЇЗЃ•ˆ#“јиYP~1”.а>HUœмž^яЩFР­`ы€ы {<ž$шnЗІб[AL Xэv?`b ЊЋЋ“Š щcЅѓ6и(‚ЇJKKK†Кя‹зЏфБŽЗ“ЙSSoSУ=(SЈ}gˆїžaяЁzvэXaћьŸсŽ;зhЦФxЏ)vŠ­’eуњБ]š~lѓ‰чЕx0Б йыѕc!хРM›6m:Жvэк“дŒЛ‡ [<Ÿ:˜СцВВ2[0:Š\4{*sЪsйе yі\2o*>$жж€ш;ЃmўЈЦ‘М9ШY…8 Ъq•ЭчП~skВМoМ‘o~ы[Щ1п8НВЌйњo0Рг cvгЙtр=вЏы’%‰ЗmлvlнКuЧќёцоо^ХPЗ@УQџдќАж]tz/ JТ"8”"ˆPQњ:јќВqм’`€ЫЫU";pdу,žŠЛЂIv˜z^ww7O>љ$џ›п$ Ђ( В,уt:M A7lTтЌiІfZNG"іu№э”=—Ы…ЯчУыѕвжжvц•W^9ўпџ§пЧзЏ_к`…ŒЉЊBє !‚‰џ~Д§0яїb…’3кккКЏ~ѕЋ(ŠЦМBдM„+=ЇД IFЮЬч†Ѕ•мљtPœы>љ|c5wqЛyu4хйgŸЅЇЇ›nњ,пњжэФуqмnwJяВ2€ЕЇыŒ2рFЌ‡%іu№ћ§ј§~œNЇrфШ‘–W_}ѕјc=v|пО}} чЮДЊЊСиa41JG€^ “юvО ЉЎ[ЗЎ)‹Х$Irщ/8~І9s ювyša%Aоо6>НьЏзїS:ж~зM щ4љт‹/ђљЯžя~їЛ(Š‚лэN;…ВJЇг9lРз㉧Сtаќ 322№ћ§Фуёаіэл6lиpќќcS{{{o№~!DPUе @С6ўGП0а7\o`Ю+СX,jnnn3*‚žJћ |Й|qU9 fНvяp8x№СqЙ\І ЉVЕсˆєa<г [=~ПŸŒŒ клл;^{эЕу§ы_>ћьГЧЂбh_Ђ‡…VАэз‡еЈ~lлиЋ?]YГ>ъЯ5R:я `PcБX,дввrЊЄЄdт`b_Ўfбw†РьžЅПфЁ$†uЦанннгаааzфШ‘Ц;wс…Ž8p@ŸfY{ВѕgЗuEэœОё{ОшН`Б–––ў—!ЫHс@Zа­@wXАки@oCCУ‰КККІ;v[Зnн‘}ћіщ`ы@vђ'„‘oўћIя98p ё’K.БUS€vљЕнДЯ‘ŒН;vk]]]гЮ;Џ[Зю№ž={:0m;jјЗџŸ ЪЯ–оkˆджжжпzы­&‹`:‘.љѓP{OуТфK8œ™Ус ЛЛЛЗББёd]]]уЮ;жЏ_dчЮgHvsЯЖўПl;:/nс)•hhЪ].Wu__пƒ@в"hллu-є544Джзз7ямЙѓи† ъЖoп~3аƒmќџ;Аэш=‘ E0ŠAœ8qтz€с ЇЇЇПБББЕЎЎЎiїюнЧзЏ_фwоIЖшџг`лб{5€ХGАЄЄФ–ŒNВ,гллlhhh=zєhѓЎ]ЛŽНєвKuлЖm;E*иV џі0ш§`€ШVЌXq‘ьўўў`bЬnкГgOУK/Нtdыж­mŒ l#р{z_$@mmэбЯ~іГЁЦЦЦ“GmоН{їБ7жзжжЖ2ВyіпС>GzO”@H*‚уаb'1№хЋПƒ§>в{&Š`7к>‚ кіfFQn\1ўwАЯ#Нg YЁ$eЁ9/:бж ўіћHџЋб7r7OљЋIENDЎB`‚ktikz-0.12/app/icons/qtikz-22.png000066400000000000000000000027301325124551100165550ustar00rootroot00000000000000‰PNG  IHDRФДl;sBIT|dˆ pHYsaaС0UњtEXtSoftwarewww.inkscape.org›ю<UIDAT8•qHœчЧ?ЯѓОїољzgŒqБЇгœ”’š„ЅжФЭвЬЭ™”Да-Ќ-, ЗQиЄЃ”@щ ы`АВ– ЁХ­‘VGŒ&ck ЖЫuЦMнljІІQЃЋ&оЉчžїон{яНЯўА†HBщ>№Р~<Яѓ{О(ЅјЂкюнЛKкккŽ^О|9<11БlпиƒПnhhј–RŠЯ•„BЁт“'O>344tqjjj5‰И‹‹‹jiiI-//Ћx<ЎŽ?~T)EKKЫ+uuušІ њ†D–””ЕЖЖ~ЗППџНёёё•™™їцЭ›j~~^EЃQЕИИx[ЖВВЂVWWU2™Tƒƒƒџ(++л~№рСџієєЄ8аЎ”B(Ѕ‡УНеее‡АSЏMг6!ЅDJ‰Іi!R мB3XŽ'Rѕѕѕ У88;;;вддєdoooJD"‘qЅ2—КKЊIGИx„‹.ђŸКЗнc0<!„иfYжАRj€ЯJ„Ус M“Hп’I‹ўб›фЅi˜hšHзЧІхФ›\њp ЉђДўў$/ ЫШ,9#~vЏxф…‚лb`-Ÿw5[ёƒWпЁуТ?}ЅMхжŠсыQТ#г4юЋ!Ї4њўЭеЋW‰;x№б#E˜лž@Ш~ж2ОлbЅT.™LЮПкё>эЧѓж/ШL$AЦѕ№ёt % v†юcпЮrќ^I&•Єуэǘ›хЪR.МўЂзщѕКњzќЮŽэ‰&,‚Ѕ[ёh_нUЩџЭёFW;“"ogБ№˜œщ>Ч•бO(+ЏфЅc?Тяї›РQ>}cбжжжјЪwžз4‰tRьЈ(cјz„сёYާі_к КМ”dlžЙЙ9&е§дэкУзыv‚дB<Ž7№ђІЫшЛОАPhz2D>GUАзБйПЋ’S/=CSm5љ\†юѓaцVŒт€IыЫЯс"љшкЇ”њИј]њ.1…Ёx&ы(‘Зљ вu–•"ЄŽв}˜~??ш#ЙšdйSС›'ZPЙ ЪЩа}ё2Я=§hwдmБšxwеJ[ii˜Ѓ€O—ж–ркsгSLMNрѕyё>&Ђi\щAIƒK#“|я№з*Eѕ7}bпO<›;ЎMG–n-,ƒ“ev~ЊвB4\bЉ<эФ LNќјлќцэїА­$џљјz '—i3yЛт.q,ПqюŸмXЬ0M*ЪяcKQ€?tў•Ї‡и€C=ЦЮŠbъjЊјуп†љѓпGјЦо8NоDxЁY`§к(Ќ 5љўєшд-:~„Ц†‡Й00ЪщюШŒ“.x„Šђ [ іTбv~MТb"Rч_#з>B/hRЖ­l с‰ЧуVЪvѕ^ћg^ћщtšтЩЇžЇ<ТЩ;xН…І‰aА26J)ЭЭЭЯ^ЙrЅ}г;о˜РЩЩЩ[;ОЌђEfm…wп9ЯCћŸb{љ§JЖQTT„Ўыd2RЉдњ0шњкШШШT"‘Шо)лDWWWk.—S s7”ыК*›Э*лЖU6›UщtZY–ЅbБ˜šžžЖЮž=лU__џЬЃНg4566юЗm[9жŠr]Wхr9ЧГccccэээПЈЉЉйњчцу=ВnЫааPпщгЇU[[Лї‹HюХџѕ,"Lш^ЙIENDЎB`‚ktikz-0.12/app/icons/qtikz.svg000066400000000000000000007625071325124551100163660ustar00rootroot00000000000000 image/svg+xml QtikZ ktikz-0.12/app/icons/run-build.png000066400000000000000000000021301325124551100170650ustar00rootroot00000000000000‰PNG  IHDRФДl;IDATxк­TkHde‚%*Щ\ЉmЋ­e‘Ѕ\„KJ! „”СўШ– g.ДгЊcКaLeХЕЭK^JСKГЮxgtцЬшЬЈЃŽ+Ž:ц/лržОчР€АкЦВМœsОї}ŸяyŸя}ъџЌђђђs---ъжжж,ƒСЂzTЫl6‡@[\\„иŠ~œ'ЋwoŒŒŒ„——— ќ\иЇгщЮчччПњŸˆ /x<žѕнн]”””ш›››ЏNMMmяяяc{{[БНН=yaaс^www^ЏЯйии@(‚VЋ}ы8м'œNчкњњКМЖЖ&‡DЂЬф­­-ПлммФЮЮ+Њ)QZZкйћPЃЃЃ­V+–––ˆееU&! bbbЇNЩЩ=ŽЙ€_јC”…ё˜ŸŸ—EeHNNVI9..югййYˆR•ђ|>$IТммИяїћ1ыŸ…гх€ЭiсЁŠoffщщщхЧj\PP   Шфф$•ї@р††MјЋяO>ЏзЧЛг"тМp8-YюcMMMwМ^Џ<== ›Э† ї„С[zX}U№,5сS1њК жбХDзРh4ЪьЈУ€'Ј!5 рЛлэЦјј8М“SИVѕ>Ь3_УЖR щo,я№Уo 9'100€ў~иэvцЩ”ŠЄВГГпVХЦЦІOS4uЙ\JАKђAѓѓуЈБПжЉаюWуІ+ ѓSЈКq===ЬcŽB„—Я<ЕZЃŠˆˆHЦааƒш c4›UТхŸ"qеt…цSаš_ФЗІS(Й‡Џ_Щd" tttФ!FFFFЅxОВВђnmm­L'М8–щpИ№YсyO"Пы\ю<]зЫИT‹–плI†БUи666‚8‰‰‰iaЃ„Х—••ežL‹ З№Щ—/Asу|~3‹žХ•"­№;ТЅ3NSzO`œs_[dffъؘ€l!ѓ`nћP_џ+ОњІКТ/PWW'4uQW…-уiyyy ЧіБЩy!НННŠu›лaьЩм/ЪЕCŒ<™ƒС>'cE FS|$h||ќivЅ cDrКиBЁqњ”Ж?+РЫЃ$2;*777ѓ(ьЇЋЋЋ— .LїЖH”™|Ши5Ъ cВ`-wttќ#0^?NГ555Ћ,9))щZjjъїAС. JЖМљ­ЌЌЌ_ЂЂЂrEЫЩwcbbоU=`CѓоЁя(1ълс‰ЄІbяtи)цр‚xМІz˜ежж\YYсoRбžџnе#ZdєQddфЧтљfiiщў8dЙІygX€IENDЎB`‚ktikz-0.12/app/icons/view-refresh.png000066400000000000000000000022711325124551100176000ustar00rootroot00000000000000‰PNG  IHDRФДl;€IDATxкЕ•[lTU†з>їsІЇЇ3г™щ5вЇ\,лЊ‰Dв …NgІRЪДєо”ЂPщ-…I4 хJ J TZ 4Šr‰ŠDƒšјаCЂo<4&Ac:П{Ц„I[A_xј’•НзњЮЪZЩйр‰№ш‹zвЈ‰ЖАzv>kSжdAOСTaOa$Џ3яЖЛЭ§=Ћa(@ѓgж•|ZђhБPOОФЦФп _/Dес*t}в…э_oЧЮяvЂџЫ~lйˆ•+aЎ3яБеД‹|”ФyŠеа…eЫ&g‰)DЊ\+~–Й>#вђa v|ГуqФ>ђтЖч#b•№ЃXЭnЌиЗŽV;f‰•Етх‚Оtœя@зХЎiє^ъEї…юYч=—zаpЂ•CшОи {“5]ЌеHхž:WЄuЄmcm1жŸYхя.Gv{6Д) СSяA~_>ъ†ыаvЎ-ЮйHjLŒ‹ЉŠ лj§^Щž„…c„†BHoNѓ1ˆЅЄUBD)•"б˜…Д K.Eј#ž?Ъ9ЭУj0уbЋA}#Г9ўƒў‡ИынЫИР/нMZЃV/ь'1Й™#$o}тЁmaXr| ќЃМцчИŸ‹ттЄАўEюF/Šп)Žснф+ePƒв]1(кЇ-иGЊ_М)ѕ `ц›ƒт1^wŠsЄ‰uЖИ8ЁR›\иНEлŠЂФцЉЌЁTˆoЭjR™0!ѕ p~ыDоЕ<}^„ТГ…˜{h.[ажЪqБTўђvx1oѓ<фО– PTсѓ];C,ЅЏsќ*жj$Шa JЕБ’AЊ ‡˜ѕъiMfЊOўSЋд`ЋВСЈ5@Е\Ž0\<ъ'J*Wdg•.:єщїёŽЅ_ЂлЇJ5s: ­ Ф }”˜•б|{Ѓс–šK Къ—ффАСІ‰љ,ПвƒЈ)*хМI0еђ}ц#џЌnJЩ+„qллJ‰КWЪvГ^уБzuгж( ХrЅА5ЁBuh'Bп'!cРт[Vя№љэсВb*Ѓ—ИАK+—nЄі›чм‡mлЌA­Iп'—№šЂ”NsЎк.ХХф#‹уОб-ƒэ"h\Ъ 2dbСqRЗšHnЗM9›Љд‹ŽІмђžHО>чЈ}œчьMд:]ƒЖ5і§…YПM Rж"ђnцžЁ№BЬ?щЦтгЉ(8“ŽќS9б8ŸЅнцwYGэcя[ЛmЖї(Dљ3Х1Ф€p!sГч Ь#r?paёHž=Ÿ‚м+.ф\sDсq2ёГчFвю,8щў!ЇЯy…ќ4Ь—Џ§Ћ˜ЯPьВЋХ6•Лп…Мс,Oƒїj22',x~JˆСуийЫcYШюrќСt•VRњО  RГVНenP‘ПпРгу.8' и&xЎ›xfм[ŸcќoцUŽўџŸІ0ЉМроЭЈcў3 ГћTKьuњM!Ш.‘ŸЖѓ.э{ѓž‡СЪНЩlџсIENDЎB`‚ktikz-0.12/app/icons/window-close.png000066400000000000000000000022741325124551100176070ustar00rootroot00000000000000‰PNG  IHDRФДl;ƒIDATxк”LдuЦŸƒѓ@ ŽиЌtГ\ќЃ-5№K kKM’?( ЪV: s€ЋДщD-KРMQчъ@ь<ŽŸ‡‚ Z Ј3ЬiЭвDžžљЅ‹IгжГ=ЛнїОпзчy?яЛУЃД№H^мЬCS€рM€/ўЇL_Ѓ€Н‚оиp—Л;w[,L(ј$ фk`оrРŒџЂ8`аF`Г€wг}|XС–mлxеfуUЛ—`Ml,Г§ќИ wЎžдЊ‹ЗЬ?žэЉЉьШЬфем!_ЩШ`eTїšЭT5Пl№oš PвЃ;:Ff[тF^ќ&—’x99‘—6ЩIrb"/Ъэ ї]Щ4“‰‚џМxЖ_ЇgБFуQЋ•чb—Вie4/gэeгšel]УЖЕqМА:Ž-+bй№q4/ьмЩzUвУВ1cИлЈЅ0pwQУo-уJР“AxњУYlЭN#{zxНО’•ЫТјУЪpЖ|іЖ> eуŽімЛЧЮЦF–Ь™УšаPfЋ’-@ОюJЬзц™Ћ‘ъBƒXюЯŽкSќ[?.Ѕc?ЫоЧъ”xAЛIщіЏ]ДЯуЉЩ“ш№ѕх#u7Hюъ6mР<3ј§$/жEŒ`N˜/з”ЛрmЮ–$~ъ‚ўоu“‡УЇВpь:‡?A‡Be_Х›!Р@H–Э@ѕ€…ЕСЦY&ž‰Д0}К/[+Ыј nuurпœ`YX5ЪЮa`БTTІЊŽЯ‘€шлжCK|РК—СІй`ЫB№Ь№‹ оМrОйUЗLšBлtа}u!`е `™pЗЌž! к4eC`o%жaрљРѓ”bе"оЌЏ6ІП6 ‘рй7T_ X>ДL—зc!y \Ј1шАшє—”b˜/ЌДЛwQПuВЃљŸ…ўXjcЮЬЌŸЋћ_Uт!8јs>0 в€d`ƒгnKG€ЧЧъ5~{zЁw-ZхOћ/^k*uСлЫmДЯ№d•РљƒС\€@z—чЖ:мUGД ŽД№њйjД|Eы—C?аыЭЭМћі-–,G‡:ўЮd€wkбчЩš;№ˆnШ~\‹ТkU%tFћГт-uљx.N‹•+—zГГ>ЕkЇВ(DЯx ŒћО<Р„^™u!0шœ‡MВрЙ#5b€њ› VМЉў#РъwѕЅїс`бd…№2’=[x@ƒW Ё?Ž<$gzъ€aJЏQѓќѕАвОžTЪgР,Г‘ДиXкЭяуJы’qСњ №~)pНF’,Ѕпo–=e-(УC7%…І‘@ї~р[+№$Д/Идю5˜ЄФЙРэ2(Ёlƒ‘Ю.Щ'5z!PЇ)прлњ0ИE:˜’|™ЎХЊuX­F.JЖ/цŠє4Яўу?њ€ВŒ1‡їњ)й*{<,х_тЬA-r‹АIENDЎB`‚ktikz-0.12/app/icons/zoom-fit-best.png000066400000000000000000000011501325124551100176640ustar00rootroot00000000000000‰PNG  IHDRФДl;/IDATxкНгMkQ`уPqђ„€аН ЎбџрТWb‘‚вPБ‰љš€$U(ll ЋЎ”bZWБ›В4™Й3sgђз3—x˜цcFМ№’\2yђцž™Kџc]ЁЌ§cЎ.ƒo !ІRJŽmлЁБМX–КžŒ;Kсбh„ƒjšІA+QЄTiЏ /B@˜&L/–Ы—Щd‚U№-Юцr8яtащvЁы:2™ Œй6l/RBRіŽ-І ‡sw дg 7Зrј|ттУ7љ#[‡Џі%žэкxRВp§ЙРк† с†Рљ|^ЁдR5ЬfГPэŽыТЅєz=•~ПнcТюc:Ућ• RЉ^О~‡t: эB dl0Ј ‡CNЬM?}wењРyьЏ`PщЋыG/ tн|ТaBUгм‘BЙЅЧ Ё ЊЮєЭЁУM—Ёt{љпЄ/ђ 6П8ŒЎщяsТ`>зѕ=9пtф§ьГx6ЌЇМ€vѕ.jЕъѕ:Z­–JЛнF$Y ѓРПЗЅpгггѕъom:Ъх’ #Й цћѕQб^zgg?а‚Vёxќ!—сƒ=$зMzHњПa†šЭцt{ћ­ˆХb ‚eoˆ/Lgф‡е{:O?jDЃбћŒРќ@œ›C-Њiƒšzh„… 8hбЈщяь”D"qбurї“ Cа=SЙ#zVTIENDЎB`‚ktikz-0.12/app/icons/zoom-fit-width.png000066400000000000000000000011021325124551100200430ustar00rootroot00000000000000‰PNG  IHDRФДl; IDATxкНвM‹г@pы‡p)дCщ—и‹ тIO.Ыњ…TФ—›КаBSvЛАA”вК7НtїVївBqлn’™$“єНЯЮ Œd“&ё тЦѕ$8q ъѕzWаННЗДP(ь*єo`ёYЬ3Œ’|>ПЃа48mО –ЈЎk„7hNЉpЪ%ў@žўсa”JЅm…f]7yўf6ГаKЇž[МЋ|hоIENDЎB`‚ktikz-0.12/app/icons/zoom-in.png000066400000000000000000000020011325124551100165510ustar00rootroot00000000000000‰PNG  IHDRФДl;ШIDATxк­д_LSWРё; –Б‡ёрŸVГe.›&.Ўr`ьН4ІЯхД-Јвš–Ц”œњЫmПњХбБЈТЊбQw‡x|FcєiЇЌСћs‹с!G„Ь2ŽЩ pmЦюжлB’ПЬў‡е<9*•кV6ВїДvŠ2kRm№Jчахh€ъЌ“ЕbўЪPŽ4MйC§ЩœшыъK3'qХ0_РЫўЁEhхX„мЅ$гэ‡ Y“TF…КіК іe–JпЭ:;є …Њ7джK,œќ3uvцём”УNгїЖЅИcіg‘олd8m`РСЊVR\™}в.хЪь D8+;у§УyLЦvkW№де'WFПьЕ‡R†–"{MфЄД"!$Ш§№в=?М>„…“Jg ѓDщђў’З Ћˆxџф_RѕЕ(\,Ё5ppиЁИпL=%вƒlUс5дЮcїMѕЫЁЯ"Ћ!‘H›ЮUVH•KПЁия<їГ{ШлƒA|‡#AСLЫxЊмd—VА–hiдT$J›‰SпЊљЉ{ўl§тuН/ї~(Вo";Э8ьЖ|ЂxОPYЯ}њivЦ­јјx„№|.уш'O/~пЁЈЙЅoцЋБЊіCcm›pјDQ1ЮШЫEх 9T~wnќУ§$#kАyыіm;HɘžNSгщ‡Ї33)в>ІVНEй›@ьПЃеiёё‰‡РКPЛvПёъZ͘џЦџ%–)›С<P(хјЗхБі"В^БББЯЅОЁоэёx№СМИЄhšXлДюx\\\ q“Ј|?т\tтН}wрѓ/ђЅШF Шdђq‘Xц3оѕЫ 8šs„ƒl’’’Ю+” ˜~2…ЗЖЕ@zЦЁ,тYlH<FЃ]CQTj^uОВй@[ЪП)oпїwЗ!„j‘,Mjол"IENDЎB`‚ktikz-0.12/app/icons/zoom-out.png000066400000000000000000000020051325124551100167560ustar00rootroot00000000000000‰PNG  IHDRФДl;ЬIDATxк­дkL[eРё#ƒ5т‡сТ &s‹ЈY a5&.Nжщ@c0„mА1E‘ЈЃNec@ЗY6мИ*v­VE[;(х6VА-6НаKж–– ЗCлs_LќТ%№Kž<Щ{’rђ&/В€lˆVЇйыt,оВлЌ ЅrеjTгJ…ЌnH2є2B*((XtЕ7ѓј§PЧъXфt ќ5ŽВ:„6F]›yЛ}їkв•+ЅkкmfAEw^ІВиьмj]№šЬЈWoBН:гœfHn6–\k\рr~юZsTЎ˜ЪiцђнгF‡I;‹ЉѕvьoУœwм№д;<3ч•ЈЌиа”С=:ЈD••ѕ\їBAњšТВ єvч˜fRяšќЧŒItsо>УЂяžбщу>ЖѕоQX—zІŸ`cп3EƒEжUЃ5Ее‘ П№<"љќу[`СэЈ&ш№94œ р†Хљ?ѕшЛh%зќYgNю\1ЬfГRшЕэцЊ^K‡С н{ЂЉГБп=оŸrnєэФЏ$бqyТзціm맆в @ПмcН™UHŸЭ>{*vХp}3­ЌІ§In“ЎіОЪ}У‡œ\Hё$aGШ}t UŽс…5ЂЇ?ž)М<›z<љнУYЇ3#Ћ9иg šЦЋТЙќЛЖЅип]ў}§!tУK"МИМnx­Яс;а<ИРЬЬЩЧŠ EVБ…нкd9quЈ“)FЫ:,žУB?f#ТЅx~d v<Фр•IЗџTe—і^FЦ1-ВšРРР€’KВХУSЎ“Ўо™3KИ„ПI†^•’A9Eц'BLд^YxОдїбTdЖ’—ј[YЧјuЪhUyN уФ;r"-{чЭP~ž^eHJŠ!kММžЭЬLЏ8ћy.ўi K\кЎЎnХŠ[Фњых wџЬљ"HOO› ‹Чп{џdЖnнqјУXFтЊєxj‚*9)NO-ŽŽ‰ !ППЅжЈ‰Щ)”гЫ tikzcommands.xml ktikz-0.12/app/ktikzapplication.cpp000066400000000000000000000135341325124551100174410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009, 2010, 2011, 2012 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "ktikzapplication.h" #include "mainwindow.h" #include #include #include #include #include KtikzApplication::KtikzApplication(int &argc, char **argv) : QApplication(argc, argv) { } void KtikzApplication::init() { if (isSessionRestored()) { QSettings settings; settings.beginGroup(QLatin1String("Session") + sessionId()); const int size = settings.beginReadArray(QLatin1String("MainWindowList")); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); const QString fileName = settings.value(QLatin1String("CurrentFile")).toString(); const int lineNumber = settings.value(QLatin1String("LineNumber"), 1).toInt(); MainWindow *mainWindow = new MainWindow; mainWindow->show(); if (!fileName.isEmpty()) { mainWindow->loadUrl(QUrl::fromUserInput(fileName)); mainWindow->setLineNumber(lineNumber); } } settings.endArray(); settings.remove(QString()); settings.endGroup(); return; } MainWindow *mainWindow = new MainWindow; mainWindow->show(); QStringList args = arguments(); for (int i = 1; i < args.size(); ++i) mainWindow->loadUrl(QUrl::fromUserInput(QFileInfo(args.at(i)).absoluteFilePath())); } #ifdef KTIKZ_USE_KDE QString KtikzApplication::applicationName() { return QStringLiteral("KtikZ"); } #else QString KtikzApplication::applicationName() { return QStringLiteral("QtikZ"); } #endif void KtikzApplication::commitData(QSessionManager &manager) { if (manager.allowsInteraction()) { QList saveDocuments; QList mainWindowList = MainWindow::mainWindowList(); // find out which documents to save for (int i = 0; i < mainWindowList.size(); ++i) { if (mainWindowList.at(i)->isDocumentModified()) { const QMessageBox::StandardButton ret = QMessageBox::warning(mainWindowList.at(i), applicationName(), tr("The document \"%1\" has been modified.\n" "Do you want to save your changes?").arg(mainWindowList.at(i)->url().fileName()), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save); if (ret == QMessageBox::Save) saveDocuments << i; // store the number of the document that has to be saved else if (ret == QMessageBox::Cancel) manager.cancel(); } } manager.release(); // release the manager so that it can handle other programs // do the actual saving (after releasing the manager, so the manager doesn't have to wait until the saving has finished) for (int i = 0; i < saveDocuments.size(); ++i) { if (!mainWindowList.at(saveDocuments.at(i))->save()) manager.cancel(); } } else { // TODO save unsaved documents to a temporary file } } void KtikzApplication::saveState(QSessionManager &manager) { QList mainWindowList = MainWindow::mainWindowList(); if (mainWindowList.size() == 0) return; // in X11 the session manager calls saveState() also on startup, // we don't want to save anything at startup, so we define a // discard command (in main.cpp) which cleans up the unnecessary // session information QStringList discard = QStringList(applicationFilePath()); discard << QLatin1String("--discard") << sessionId(); manager.setDiscardCommand(discard); // this lets xsm hang, but it works in real session management in KDE Plasma QSettings settings; settings.beginGroup(QLatin1String("Session") + sessionId()); settings.beginWriteArray(QLatin1String("MainWindowList")); for (int i = 0; i < mainWindowList.size(); ++i) { settings.setArrayIndex(i); settings.setValue(QLatin1String("CurrentFile"), mainWindowList.at(i)->url().path()); settings.setValue(QLatin1String("LineNumber"), mainWindowList.at(i)->lineNumber()); } settings.endArray(); settings.endGroup(); } KtikzApplication::~KtikzApplication() { // don't delete the MainWindows here because they are already deleted on // close, however: // the MainWindows are not deleted by the session manager when the session // closes, therefore we explicitly delete them here so that the temporary // files generated by them get deleted, note that we cannot delete them // in commitData() or saveState() because both need access to them and it // is not specified which is executed first, furthermore I see no other // way of deleting them when KTIKZ_USE_KDE is defined QList mainWindowList = MainWindow::mainWindowList(); while (!mainWindowList.isEmpty()) delete mainWindowList.takeFirst(); } ktikz-0.12/app/ktikzapplication.h000066400000000000000000000032561325124551100171060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009, 2010, 2011 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef KTIKZAPPLICATION_H #define KTIKZAPPLICATION_H #include #include class KtikzApplication : public QApplication { Q_OBJECT public: KtikzApplication(int &argc, char **argv); virtual ~KtikzApplication(); void init(); static QString applicationName(); protected: void commitData(QSessionManager &manager); void saveState(QSessionManager &manager); }; #endif ktikz-0.12/app/ktikzui.rc000066400000000000000000000077131325124551100153770ustar00rootroot00000000000000 &File &Edit &Bookmarks &View &Go &Process &Settings &Sidebars &Help File Toolbar Edit Toolbar Process Toolbar View Toolbar ktikz-0.12/app/linenumberwidget.cpp000066400000000000000000000104071325124551100174210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2011, 2012, 2013 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "linenumberwidget.h" #include #include #include #include "tikzeditor.h" LineNumberWidget::LineNumberWidget(TikzEditor *editor) : QWidget(editor), m_editor(editor) { setAutoFillBackground(true); QPalette p(palette()); const QPalette standardPalette(p); // const QPalette standardPalette(QApplication::style()->standardPalette()); is slow, since we are in the constructor palette() == QApplication::palette() const QColor windowColor(standardPalette.color(QPalette::Normal, QPalette::Window)); p.setColor(backgroundRole(), windowColor.lighter(102)); setPalette(p); m_highlightColor = QColor(standardPalette.color(QPalette::Normal, QPalette::Highlight)); m_highlightBrush = QBrush(m_highlightColor); m_highlightPen = QPen(m_highlightColor); m_highlightPen.setStyle(Qt::SolidLine); m_highlightedTextPen = QPen(standardPalette.color(QPalette::Normal, QPalette::HighlightedText)); setToolTip(tr("Click to add or remove a bookmark")); } QSize LineNumberWidget::sizeHint() const { return QSize(m_editor->lineNumberAreaWidth(), 0); } void LineNumberWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); const QFontMetrics fm = m_editor->fontMetrics(); // draw separator between line number area and text editor painter.setPen(m_highlightPen); painter.drawLine(width() - 2, 0, width() - 2, height()); QTextBlock block = m_editor->firstVisibleBlock(); int lineNumber = block.blockNumber() + 1; int top = (int) m_editor->blockBoundingGeometry(block).translated(m_editor->contentOffset()).top(); int lineHeight = m_editor->blockBoundingRect(block).height(); int bottom = top + lineHeight; QList userBookmarks = m_editor->userBookmarks(); while (block.isValid() && top <= event->rect().bottom()) { if (bottom >= event->rect().top()) { for (int i = 0; i < userBookmarks.length(); ++i) { if (userBookmarks.at(i) == lineNumber) { painter.fillRect(2, top, fm.width(QLatin1Char('B')) + 4, lineHeight, m_highlightBrush); painter.setPen(m_highlightedTextPen); painter.drawText(4, top, width() - 4, lineHeight, Qt::AlignLeft | Qt::AlignTop, QLatin1String("B")); painter.setPen(m_highlightPen); // update(0, top, width(), lineHeight); // make sure the bookmark is visible even when the line is wrapped break; } } painter.drawText(0, top, width() - 4, lineHeight, Qt::AlignRight | Qt::AlignTop, QString::number(lineNumber)); } block = block.next(); top = bottom; lineHeight = m_editor->blockBoundingRect(block).height(); bottom += lineHeight; ++lineNumber; } painter.end(); } void LineNumberWidget::mousePressEvent(QMouseEvent *event) { event->accept(); const QPoint p = m_editor->viewport()->mapFromGlobal(event->globalPos()); const int lineNumber = m_editor->cursorForPosition(p).blockNumber() + 1; if (lineNumber <= 0) return; m_editor->toggleUserBookmark(lineNumber); update(); } void LineNumberWidget::mouseReleaseEvent(QMouseEvent*) { m_editor->setFocus(); } ktikz-0.12/app/linenumberwidget.h000066400000000000000000000036701325124551100170720ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2011, 2012 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef LINENUMBERWIDGET_H #define LINENUMBERWIDGET_H #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif class TikzEditor; class LineNumberWidget : public QWidget { Q_OBJECT public: explicit LineNumberWidget(TikzEditor *editor); QSize sizeHint() const; protected: virtual void paintEvent(QPaintEvent *event); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent*); private: TikzEditor* m_editor; QColor m_highlightColor; QBrush m_highlightBrush; QPen m_highlightPen; QPen m_highlightedTextPen; }; #endif // LINENUMBERWIDGET_H ktikz-0.12/app/loghighlighter.cpp000066400000000000000000000102621325124551100170540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Florian Hackenberger * * * * Copyright (C) 2007, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "loghighlighter.h" LogHighlighter::LogHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { LogHighlightingRule rule; QTextCharFormat keywordFormat; keywordFormat.setForeground(Qt::red); keywordFormat.setFontWeight(QFont::Bold); QStringList keywordPatterns; keywordPatterns << QLatin1String("\\S*:\\d+:.*$") << QLatin1String("Undefined control sequence") << QLatin1String("LaTeX Warning:") << QLatin1String("LaTeX Error:") << QLatin1String("Runaway argument?") << QLatin1String("Missing character: .*!") << QLatin1String("Error:") << tr("Error:") << tr("Warning:") // error msg created by TikzPreviewGenerator << QLatin1String("^\\[.*\\] Line \\d+: .*") // error msg created by TikzPreviewGenerator::getParsedLogText() << tr("This program will not work!"); Q_FOREACH (const QString &pattern, keywordPatterns) { rule.pattern = QRegExp(pattern); rule.format = keywordFormat; m_highlightingRules.append(rule); } QTextCharFormat commandFormat; commandFormat.setForeground(Qt::darkBlue); commandFormat.setFontWeight(QFont::Bold); rule.pattern = QRegExp(QLatin1String("^\\[[^\\]\\d][^\\]]*\\]")); rule.format = commandFormat; m_highlightingRules.append(rule); m_statisticsFormat.setForeground(Qt::darkGray); // m_statisticsFormat.setFontPointSize(5.0); m_statisticsStartExpression = QLatin1String("Here is how much of TeX's memory you used:"); } LogHighlighter::~LogHighlighter() { } void LogHighlighter::highlightBlock(const QString &text) { // Try each highlighting pattern and apply formatting if it matches Q_FOREACH (const LogHighlightingRule &rule, m_highlightingRules) { // const QRegExp expression(rule.pattern); // int index = text.indexOf(expression); QRegExp expression(rule.pattern); int index = expression.indexIn(text); while (index >= 0) { const int length = expression.matchedLength(); setFormat(index, length, rule.format); // index = text.indexOf(expression, index + length); index = expression.indexIn(text, index + length); } } // Highlight statistics (at the end of the log) setCurrentBlockState(0); // The current block state tracks multiline formatting int startIndex = text.indexOf(m_statisticsStartExpression); // Index to start highlighting statistics (if any) if (previousBlockState() == 1) // The previous block ended within statistics startIndex = 0; // Continue highlighting statistics if (startIndex >= 0) { const int endIndex = text.size() - 1; const int statisticsLength = endIndex - startIndex + 1; setFormat(startIndex, statisticsLength, m_statisticsFormat); // Make the next invocation of this routine aware that it should continue highlighting in statistics format setCurrentBlockState(1); } } ktikz-0.12/app/loghighlighter.h000066400000000000000000000046631325124551100165310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Florian Hackenberger * * * * Copyright (C) 2007, 2011 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef LOGHIGHLIGHTER_H #define LOGHIGHLIGHTER_H #include #include /** A simple, incomplete highlighter for LaTeX .log files * @author Florian Hackenberger */ class LogHighlighter : public QSyntaxHighlighter { Q_OBJECT public: explicit LogHighlighter(QTextDocument *parent = 0); virtual ~LogHighlighter(); protected: /** Implements QSyntaxHighlighter::highlightBlock() * @see QSyntaxHighlighter::highlightBlock() */ void highlightBlock(const QString &text); private: struct LogHighlightingRule { QRegExp pattern; /// The pattern to match for formatting QTextCharFormat format; /// The style of the formatting }; /// All highlighting rules with their formatting for easy iteration QVector m_highlightingRules; /// The start of the statistics output by LaTeX QString m_statisticsStartExpression; /// The highlighting format for LaTeX statistics QTextCharFormat m_statisticsFormat; }; #endif ktikz-0.12/app/logtextedit.cpp000066400000000000000000000047441325124551100164200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2011, 2013 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "logtextedit.h" #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif #include "loghighlighter.h" LogTextEdit::LogTextEdit(QWidget *parent) : QTextEdit(parent) { m_logHighlighter = new LogHighlighter(document()); setReadOnly(true); } LogTextEdit::~LogTextEdit() { m_logHighlighter->deleteLater(); } QSize LogTextEdit::sizeHint() const { return QSize(300, 90); } void LogTextEdit::updateLog(const QString &logText) { setPlainText(logText); } void LogTextEdit::updateLog(const QString &logText, bool runFailed) { setPlainText(logText); setLogPalette(runFailed); } void LogTextEdit::appendLog(const QString &logText) { setPlainText(toPlainText() + logText); } void LogTextEdit::appendLog(const QString &logText, bool runFailed) { setPlainText(toPlainText() + logText); setLogPalette(runFailed); } void LogTextEdit::setLogPalette(bool runFailed) { moveCursor(QTextCursor::End); if (runFailed) { QPalette failedPalette(QApplication::palette()); failedPalette.setColor(QPalette::Background, QColor(255, 102, 102)); setAutoFillBackground(true); setPalette(failedPalette); } else setPalette(QApplication::palette()); } ktikz-0.12/app/logtextedit.h000066400000000000000000000037041325124551100160600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2011, 2014 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef LOGTEXTEDIT_H #define LOGTEXTEDIT_H #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif class QSyntaxHighlighter; class LogTextEdit : public QTextEdit { Q_OBJECT public: explicit LogTextEdit(QWidget *parent = 0); ~LogTextEdit(); virtual QSize sizeHint() const; public Q_SLOTS: void updateLog(const QString &logText); void updateLog(const QString &logText, bool runFailed); void appendLog(const QString &logText); void appendLog(const QString &logText, bool runFailed); private: void setLogPalette(bool runFailed); QSyntaxHighlighter *m_logHighlighter; }; #endif ktikz-0.12/app/main.cpp000066400000000000000000000166411325124551100150070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Florian Hackenberger * * * * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 by Glad Deschrijver * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifdef KTIKZ_USE_KDE #include #include #else #include #endif #include #include #include #include #include #include // needed for abort() below #include #include #include "../common/utils/url.h" #include "ktikzapplication.h" // add copyright notice to the *.ts files; this string is not used anywhere else static struct { const char *source; const char *comment; } copyrightString = QT_TRANSLATE_NOOP3("__Copyright__", "The original English text is copyrighted by the authors of the source " "files where the strings come from. This file is distributed under the " "same license as the KtikZ package. The translations in this file are " "copyrighted as follows.", "Translators: don't translate this, but put in the \"translation\" " "a copyright notice of the form \"This file was translated by . " "Copyright (C) .\" in which you fill in the year(s) of " "translation and your name."); #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) static void debugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // qDebug() and qWarning() only show messages when in debug mode QByteArray localMsg = msg.toLocal8Bit(); switch (type) { case QtDebugMsg: case QtWarningMsg: #ifndef QT_NO_DEBUG fprintf(stderr, "%s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); #endif break; case QtCriticalMsg: fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); abort(); } } #else static void debugOutput(QtMsgType type, const char *msg) { // qDebug() and qWarning() only show messages when in debug mode switch (type) { case QtDebugMsg: case QtWarningMsg: #ifndef QT_NO_DEBUG fprintf(stderr, "%s\n", msg); #endif break; case QtCriticalMsg: fprintf(stderr, "%s\n", msg); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s\n", msg); abort(); } } #endif static bool findTranslator(QTranslator *translator, const QString &transName, const QString &transDir) { const QString qmFile = transName + QLatin1String(".qm"); const QFileInfo fi(QDir(transDir), qmFile); if (fi.exists()) return translator->load(qmFile, transDir); return false; } static void createTranslator(QTranslator *translator, const QString &transName, const QString &transDir) { const QString locale = QString(QLocale::system().name()); const QString localeShort = locale.left(2).toLower(); const QStringList transDirs = QStringList() << transDir #ifdef KTIKZ_TRANSLATIONS_INSTALL_DIR << QDir(QLatin1String(KTIKZ_TRANSLATIONS_INSTALL_DIR)).absolutePath() // set during compilation #endif // KTIKZ_TRANSLATIONS_INSTALL_DIR << QString(); // working dir for (int i = 0; i < transDirs.size(); ++i) { if (findTranslator(translator, transName + QLatin1Char('_') + locale, transDirs.at(i))) return; if (findTranslator(translator, transName + QLatin1Char('_') + localeShort, transDirs.at(i))) return; } } int main(int argc, char **argv) { //QTime t = QTime::currentTime(); Q_UNUSED(copyrightString); #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) qInstallMessageHandler(debugOutput); #else qInstallMsgHandler(debugOutput); #endif #ifndef KTIKZ_USE_KDE // discard session (X11 calls QApplication::saveState() also when the app // has been started, but then also calls QSessionManager::discardCommand() // which we define as below in order to remove unnecessary session // information) if (argc == 3 && !strcmp(argv[1], "--discard")) { QSettings settings(QString::fromLocal8Bit(ORGNAME), QString::fromLocal8Bit(APPNAME)); settings.remove(QLatin1String("Session") + QLatin1String(argv[2])); // argv[2] contains the session id settings.sync(); return 0; } #endif #ifdef KTIKZ_USE_KDE Q_INIT_RESOURCE(ktikz); #else Q_INIT_RESOURCE(qtikz); #endif KtikzApplication app(argc, argv); // slow #ifdef KTIKZ_USE_KDE Q_INIT_RESOURCE(ktikz); KAboutData aboutData(QStringLiteral("ktikz"),i18n("KtikZ"), APPVERSION); aboutData.setShortDescription(i18n("A TikZ Editor")); aboutData.setLicense(KAboutLicense::GPL_V2); aboutData.setCopyrightStatement(i18n("Copyright 2007-2017 Florian Hackenberger, Glad Deschrijver, Joao Carreira")); aboutData.setOtherText(i18n("This is a program for creating TikZ (from the LaTeX pgf package) diagrams.")); aboutData.setBugAddress("jfmcarreira@gmail.com"); aboutData.addAuthor(i18n("Florian Hackenberger"), i18n("Maintainer"), "florian@hackenberger.at"); aboutData.addAuthor(i18n("Glad Deschrijver"), i18n("Developer"), "glad.deschrijver@gmail.com"); aboutData.addAuthor(i18n("Joao Carreira"), i18n("Maintainer"), "jfmcarreira@gmail.com"); QCommandLineParser parser; aboutData.setupCommandLine(&parser); KAboutData::setApplicationData(aboutData); parser.addVersionOption(); parser.addHelpOption(); parser.addPositionalArgument(QLatin1String("[URL]"), i18n("TikZ document to open")); parser.process(app); // PORTING SCRIPT: move this to after any parser.addOption aboutData.processCommandLine(&parser); #endif QCoreApplication::setOrganizationName(QString::fromLocal8Bit(ORGNAME)); #ifndef KTIKZ_USE_KDE QCoreApplication::setApplicationName(QString::fromLocal8Bit(APPNAME)); QCoreApplication::setApplicationVersion(QString::fromLocal8Bit(APPVERSION)); #endif const QString translationsDirPath = QString::fromLocal8Bit(qgetenv("KTIKZ_TRANSLATIONS_DIR").constData()); QTranslator qtTranslator; QTranslator qtikzTranslator; createTranslator(&qtTranslator, QLatin1String("qt"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); createTranslator(&qtikzTranslator, QLatin1String("qtikz"), translationsDirPath); app.installTranslator(&qtTranslator); app.installTranslator(&qtikzTranslator); app.init(); //qCritical() << t.msecsTo(QTime::currentTime()); return app.exec(); } ktikz-0.12/app/mainwindow.cpp000066400000000000000000001216461325124551100162410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Florian Hackenberger * * * * Copyright (C) 2007, 2008, 2009, 2010, 2012 by Glad Deschrijver * * * * Copyright (C) 2016 by G. Prudhomme * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ //#include #include "mainwindow.h" #ifdef KTIKZ_USE_KDE #include #include #include #include #include #else #include #include "aboutdialog.h" #include "assistantcontroller.h" #endif #include #include #include #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #include #include #include #include #include #include #include #include #else #include #include #include #include #include #include #include #include #include #include #endif #include "configdialog.h" #include "ktikzapplication.h" #include "logtextedit.h" #include "tikzcommandinserter.h" #include "tikzdocumentationcontroller.h" #include "tikzeditorhighlighter.h" #include "tikzeditorview.h" #include "usercommandinserter.h" #include "../common/templatewidget.h" #include "../common/tikzpreviewcontroller.h" #include "../common/tikzpreview.h" #include "../common/utils/action.h" #include "../common/utils/file.h" #include "../common/utils/filedialog.h" #include "../common/utils/icon.h" #include "../common/utils/recentfilesaction.h" #include "../common/utils/standardaction.h" #include "../common/utils/toggleaction.h" #include "../common/utils/url.h" QList MainWindow::s_mainWindowList; MainWindow::MainWindow() { //QTime t = QTime::currentTime(); #ifndef KTIKZ_USE_KDE m_aboutDialog = 0; m_assistantController = 0; #endif m_configDialog = 0; m_isModifiedExternally = false; m_insertAction = 0; s_mainWindowList.append(this); #ifndef KTIKZ_USE_KDE QStringList themeSearchPaths; themeSearchPaths << QDir::homePath() + QLatin1String("/.local/share/icons/"); themeSearchPaths << QIcon::themeSearchPaths(); QIcon::setThemeSearchPaths(themeSearchPaths); #endif setAttribute(Qt::WA_DeleteOnClose); #ifdef KTIKZ_USE_KDE setObjectName(QLatin1String("ktikz#")); setWindowIcon(QIcon::fromTheme(QLatin1String("ktikz"))); Action::setActionCollection(actionCollection()); #else setObjectName(QLatin1String("qtikz#") + QString::number(s_mainWindowList.size())); setWindowIcon(QIcon(QLatin1String(":/icons/qtikz-22.png"))); #endif setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); //qCritical() << t.msecsTo(QTime::currentTime()); m_tikzPreviewController = new TikzPreviewController(this); //qCritical() << "TikzPreviewController" << t.msecsTo(QTime::currentTime()); m_tikzEditorView = new TikzEditorView(this); //qCritical() << "TikzEditorView" << t.msecsTo(QTime::currentTime()); m_commandInserter = new TikzCommandInserter(this); m_tikzHighlighter = new TikzHighlighter(m_tikzEditorView->editor()->document()); m_userCommandInserter = new UserCommandInserter(this); QWidget *mainWidget = new QWidget(this); QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget); mainLayout->setSpacing(0); mainLayout->setMargin(0); mainLayout->addWidget(m_tikzPreviewController->templateWidget()); mainLayout->addWidget(m_tikzEditorView); m_logDock = new QDockWidget(this); m_logDock->setObjectName(QLatin1String("LogDock")); m_logDock->setAllowedAreas(Qt::AllDockWidgetAreas); m_logDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); m_logDock->setWindowTitle(tr("&Messages")); addDockWidget(Qt::BottomDockWidgetArea, m_logDock); m_logTextEdit = new LogTextEdit; m_logTextEdit->setWhatsThis(tr("

The messages produced by " "LaTeX are shown here. If your TikZ code contains errors, " "then a red border will appear and the errors will be " "highlighted.

")); m_logDock->setWidget(m_logTextEdit); m_previewDock = new QDockWidget(this); m_previewDock->setObjectName(QLatin1String("PreviewDock")); m_previewDock->setAllowedAreas(Qt::AllDockWidgetAreas); m_previewDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); m_previewDock->setWindowTitle(tr("Previe&w")); m_previewDock->setWidget(m_tikzPreviewController->tikzPreview()); addDockWidget(Qt::RightDockWidgetArea, m_previewDock); setCentralWidget(mainWidget); createActions(); #ifndef KTIKZ_USE_KDE createToolBars(); // run first in order to be able to add file/editToolBar->toggleViewAction() to the menu createMenus(); #endif //qCritical() << "createMenus" << t.msecsTo(QTime::currentTime()); createCommandInsertWidget(); // must happen after createMenus and before readSettings createStatusBar(); #ifdef KTIKZ_USE_KDE setupGUI(ToolBar | Keys | StatusBar | Save); setXMLFile(QLatin1String("ktikzui.rc")); createGUI(); guiFactory()->addClient(this); #endif setTabOrder(m_tikzPreviewController->templateWidget()->lastTabOrderWidget(), m_tikzEditorView->editor()); connect(m_commandInserter, SIGNAL(showStatusMessage(QString,int)), statusBar(), SLOT(showMessage(QString,int))); connect(m_tikzEditorView, SIGNAL(modificationChanged(bool)), this, SLOT(setDocumentModified(bool))); connect(m_tikzEditorView, SIGNAL(cursorPositionChanged(int,int)), this, SLOT(showCursorPosition(int,int))); connect(m_tikzEditorView, SIGNAL(showStatusMessage(QString,int)), statusBar(), SLOT(showMessage(QString,int))); connect(m_tikzEditorView, SIGNAL(focusIn()), this, SLOT(checkForFileChanges())); connect(m_tikzEditorView, SIGNAL(focusOut()), this, SLOT(saveLastInternalModifiedDateTime())); connect(m_tikzPreviewController, SIGNAL(updateLog(QString,bool)), m_logTextEdit, SLOT(updateLog(QString,bool))); connect(m_tikzPreviewController, SIGNAL(appendLog(QString,bool)), m_logTextEdit, SLOT(appendLog(QString,bool))); connect(m_tikzPreviewController, SIGNAL(showMouseCoordinates(qreal,qreal,int,int)), this, SLOT(showMouseCoordinates(qreal,qreal,int,int))); connect(m_userCommandInserter, SIGNAL(updateCompleter()), this, SLOT(updateCompleter())); readSettings(); // must be run after defining tikzController and tikzHighlighter, and after creating the toolbars, and after the connects //qCritical() << "readSettings()" << t.msecsTo(QTime::currentTime()); setCurrentUrl(Url()); setDocumentModified(false); saveLastInternalModifiedDateTime(); m_tikzEditorView->editor()->setFocus(); // delayed initialization // QTimer::singleShot(0, this, SLOT(init())); // this causes flicker at startup and init() is not executed in a separate thread anyway :( init(); //qCritical() << "mainwindow" << t.msecsTo(QTime::currentTime()); } MainWindow::~MainWindow() { s_mainWindowList.removeAll(this); writeSettings(); #ifndef KTIKZ_USE_KDE if (m_aboutDialog) delete m_aboutDialog; if (m_assistantController) delete m_assistantController; #endif delete m_tikzPreviewController; m_tikzHighlighter->deleteLater(); } void MainWindow::init() { //QTime t = QTime::currentTime(); m_tikzEditorView->setPasteEnabled(); TikzCommandInserter::loadCommands(); //qCritical() << "TikzCommandInserter::loadCommands()" << t.msecsTo(QTime::currentTime()); m_commandInserter->setEditor(m_tikzEditorView->editor()); if (m_insertAction) m_insertAction->setMenu(m_commandInserter->getMenu()); else m_commandInserter->showItemsInDockWidget(); //qCritical() << "setMenu()" << t.msecsTo(QTime::currentTime()); m_tikzHighlighter->setHighlightingRules(m_commandInserter->getHighlightingRules()); //qCritical() << "setHighlightingRules()" << t.msecsTo(QTime::currentTime()); // m_tikzHighlighter->rehighlight(); // avoid that textEdit emits the signal contentsChanged() when it is still empty connect(m_userCommandInserter, SIGNAL(insertTag(QString)), m_commandInserter, SLOT(insertTag(QString))); // the following disconnect ensures that the following signal is not unnecessarily triggered twice when a file is loaded in a new window disconnect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); applySettings(); // must do this in order to load the command completions //qCritical() << "applySettings()" << t.msecsTo(QTime::currentTime()); if (m_buildAutomatically) connect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); if (m_tikzPreviewController->tempDir().isEmpty()) // then the temporary directory could not be created m_logTextEdit->updateLog(tr("Error: unable to create a temporary directory in \"%1\". This program will not work!").arg(m_tikzPreviewController->tempDirLocation()), true); //qCritical() << "init()" << t.msecsTo(QTime::currentTime()); } QWidget *MainWindow::widget() { return this; } #ifdef KTIKZ_USE_KDE bool MainWindow::queryClose() { return maybeSave(); } void MainWindow::readProperties(const KConfigGroup &group) { const Url url(group.readPathEntry(QLatin1String("CurrentUrl"), QString())); if (url.isValid() && !url.isEmpty()) loadUrl(url); } void MainWindow::saveProperties(KConfigGroup &group) { group.writePathEntry(QLatin1String("CurrentUrl"), m_currentUrl.url()); } #endif void MainWindow::closeEvent(QCloseEvent *event) { if (maybeSave()) { QApplication::restoreOverrideCursor(); event->accept(); } else event->ignore(); } void MainWindow::newFile() { MainWindow *newMainWindow = new MainWindow; newMainWindow->show(); } bool MainWindow::closeFile() { if (maybeSave()) { disconnect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); m_tikzEditorView->editor()->clear(); connect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); setCurrentUrl(Url()); m_tikzPreviewController->emptyPreview(); // abort still running processes m_logTextEdit->updateLog(QString(), false); // clear log window m_mouseCoordinatesLabel->setText(QString()); return true; } return false; } void MainWindow::open() { const Url openUrl = FileDialog::getOpenUrl(this, tr("Open PGF source file"), m_lastUrl, QLatin1String("text/x-pgf")); if (openUrl.isValid() && !openUrl.isEmpty()) loadUrl(openUrl); } bool MainWindow::save() { if (!m_currentUrl.isValid() || m_currentUrl.isEmpty()) return saveAs(); else { if (m_isModifiedExternally) { checkForFileChanges(Saving); return true; } else return saveUrl(m_currentUrl); } } bool MainWindow::saveAs() { const Url saveAsUrl = FileDialog::getSaveUrl(this, tr("Save PGF source file"), Url(m_currentUrl), QLatin1String("text/x-pgf")); if (!saveAsUrl.isValid() || saveAsUrl.isEmpty()) return false; return saveUrl(saveAsUrl); } void MainWindow::reload() { const QUrl currentUrl = m_currentUrl; if (closeFile()) { saveLastInternalModifiedDateTime(); loadUrl(currentUrl); } } void MainWindow::checkForFileChanges(const FileCheckMoment &moment) { if (moment == FocusIn) { QDateTime lastExternalModifiedDateTime(QFileInfo(m_currentUrl.path()).lastModified()); if (lastExternalModifiedDateTime > m_lastInternalModifiedDateTime) m_isModifiedExternally = true; else // when the fileChangedWarningMessageBox below is cancelled, the main window is focused in again with m_isModifiedExternally == true so this slot is called again, but now m_lastInternalModifiedDateTime has been updated (during focusOut) and now we don't want to show the dialog again return; } if (!m_isModifiedExternally) return; m_isModifiedExternally = false; QPointer fileChangedWarningMessageBox = new QMessageBox(this); fileChangedWarningMessageBox->setText(tr("The document was modified by another program.\nWhat do you want to do?")); fileChangedWarningMessageBox->setWindowTitle(KtikzApplication::applicationName()); fileChangedWarningMessageBox->setIcon(QMessageBox::Warning); QAbstractButton *overwriteButton = fileChangedWarningMessageBox->addButton(tr("&Overwrite"), QMessageBox::AcceptRole); QAbstractButton *reloadButton; switch (moment) { case Saving: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Save under another name"), QMessageBox::AcceptRole); break; case Closing: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Close without saving"), QMessageBox::AcceptRole); break; case FocusIn: default: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Reload file"), QMessageBox::AcceptRole); break; } fileChangedWarningMessageBox->addButton(QMessageBox::Cancel); fileChangedWarningMessageBox->exec(); if (fileChangedWarningMessageBox->clickedButton() == overwriteButton) saveUrl(m_currentUrl); else if (fileChangedWarningMessageBox->clickedButton() == reloadButton) switch (moment) { case Saving: saveAs(); break; case Closing: // do nothing since the file will be closed anyway break; case FocusIn: default: reload(); break; } else // cancel (check again on "Save" or "Close") m_isModifiedExternally = true; delete fileChangedWarningMessageBox; } void MainWindow::saveLastInternalModifiedDateTime() { m_lastInternalModifiedDateTime = QDateTime::currentDateTime(); } /***************************************************************************/ void MainWindow::showTikzDocumentation() { QApplication::setOverrideCursor(Qt::WaitCursor); const QString tikzDocFile = TikzDocumentationController::tikzDocumentationPath(); const bool tikzDocFileExists = QFileInfo(tikzDocFile).exists(); // true if tikzDocFile is local and exists const QUrl tikzDocUrl = tikzDocFileExists ? QUrl(QLatin1String("file:///") + tikzDocFile) : QUrl(tikzDocFile); if (!QDesktopServices::openUrl(tikzDocUrl)) { if (!tikzDocFileExists) QMessageBox::warning(this, KtikzApplication::applicationName(), tr("Cannot find TikZ documentation.\n" "Go to Settings -> Configure %1 and change in the \"General\" tab " "the path to the TikZ documentation.") .arg(KtikzApplication::applicationName())); else // if tikzDocFile is local and exists then failure to open it is caused by not finding the correct application QMessageBox::warning(this, KtikzApplication::applicationName(), tr("Cannot open TikZ documentation.\n" "No application is found which can open the file \"%1\".") .arg(tikzDocFile)); } QApplication::restoreOverrideCursor(); } #ifndef KTIKZ_USE_KDE void MainWindow::about() { if (!m_aboutDialog) m_aboutDialog = new AboutDialog(this); m_aboutDialog->exec(); } void MainWindow::showDocumentation() { if (!m_assistantController) m_assistantController = new AssistantController; m_assistantController->showDocumentation(); } #endif /***************************************************************************/ bool MainWindow::isDocumentModified() const { return isWindowModified(); } void MainWindow::setDocumentModified(bool isModified) { setWindowModified(isModified); m_saveAction->setEnabled(isModified); m_saveAsAction->setEnabled(m_currentUrl.isValid() && !m_currentUrl.isEmpty()); } void MainWindow::updateLog() { m_logTextEdit->updateLog(m_tikzPreviewController->getLogText()); // m_logTextEdit->updateLog(m_tikzController->getLogText(), m_tikzController->hasRunFailed()); } /***************************************************************************/ #ifdef KTIKZ_USE_KDE void MainWindow::toggleWhatsThisMode() { if (QWhatsThis::inWhatsThisMode()) QWhatsThis::leaveWhatsThisMode(); else QWhatsThis::enterWhatsThisMode(); } #endif void MainWindow::createActions() { // Open m_newAction = StandardAction::openNew(this, SLOT(newFile()), this); m_openAction = StandardAction::open(this, SLOT(open()), this); m_openRecentAction = StandardAction::openRecent(this, SLOT(loadUrl(const QUrl&)), this); m_saveAction = StandardAction::save(this, SLOT(save()), this); m_saveAsAction = StandardAction::saveAs(this, SLOT(saveAs()), this); m_reloadAction = new Action(Icon(QStringLiteral("view-refresh")), tr("Reloa&d"), this, QLatin1String("file_reload")); m_reloadAction->setShortcut(QKeySequence::Refresh); m_reloadAction->setStatusTip(tr("Reload the current document")); m_reloadAction->setWhatsThis(tr("

Reload the current document from disk.

")); connect(m_reloadAction, SIGNAL(triggered()), this, SLOT(reload())); m_closeAction = StandardAction::close(this, SLOT(closeFile()), this); m_exitAction = StandardAction::quit(this, SLOT(close()), this); m_newAction->setStatusTip(tr("Create a new document")); m_openAction->setStatusTip(tr("Open an existing file")); m_openRecentAction->setStatusTip(tr("Open a recently opened file")); m_saveAction->setStatusTip(tr("Save the current document to disk")); m_saveAsAction->setStatusTip(tr("Save the document under a new name")); m_closeAction->setStatusTip(tr("Close the current document")); m_exitAction->setStatusTip(tr("Exit the application")); m_newAction->setWhatsThis(tr("

Create a new document.

")); m_openAction->setWhatsThis(tr("

Open an existing file.

")); m_openRecentAction->setWhatsThis(tr("

Open a recently opened file.

")); m_saveAction->setWhatsThis(tr("

Save the current document to disk.

")); m_saveAsAction->setWhatsThis(tr("

Save the document under a new name.

")); m_closeAction->setWhatsThis(tr("

Close the current document.

")); m_exitAction->setWhatsThis(tr("

Exit the application.

")); // View m_buildAction = new Action(Icon(QLatin1String("run-build")), tr("&Build"), this, QLatin1String("build")); //m_buildAction->setShortcut(tr("Ctrl+B", "View|Build")); m_buildAction->setStatusTip(tr("Build preview")); m_buildAction->setWhatsThis(tr("

Generate preview by building the current TikZ code in the editor.

")); connect(m_buildAction, SIGNAL(triggered()), m_tikzPreviewController, SLOT(regeneratePreview())); m_viewLogAction = new Action(Icon(QLatin1String("run-build-file")), tr("View &Log"), this, QLatin1String("view_log")); m_viewLogAction->setStatusTip(tr("View log messages produced by the last executed process")); m_viewLogAction->setWhatsThis(tr("

Show the log messages produced by the last executed process in the Messages box.

")); connect(m_viewLogAction, SIGNAL(triggered()), this, SLOT(updateLog())); // Configure m_configureAction = StandardAction::preferences(this, SLOT(configure()), this); m_configureAction->setText(tr("&Configure %1...").arg(KtikzApplication::applicationName())); m_configureAction->setStatusTip(tr("Configure the settings of this application")); m_configureAction->setWhatsThis(tr("

Configure the settings of this application.

")); #ifdef KTIKZ_USE_KDE addActionCloneToCollection(QLatin1String("toggle_preview"), m_previewDock->toggleViewAction()); addActionCloneToCollection(QLatin1String("toggle_log"), m_logDock->toggleViewAction()); #endif // Help m_showTikzDocAction = new Action(Icon(QLatin1String("help-contents")), tr("TikZ &Manual"), this, QLatin1String("show_tikz_doc")); m_showTikzDocAction->setStatusTip(tr("Show the manual of TikZ and PGF")); m_showTikzDocAction->setWhatsThis(tr("

Show the manual of TikZ and PGF.

")); connect(m_showTikzDocAction, SIGNAL(triggered()), this, SLOT(showTikzDocumentation())); #ifdef KTIKZ_USE_KDE m_whatsThisAction = KStandardAction::whatsThis(this, SLOT(toggleWhatsThisMode()), this); #else m_helpAction = new QAction(Icon(QLatin1String("help-contents")), tr("%1 &Handbook").arg(KtikzApplication::applicationName()), this); m_helpAction->setStatusTip(tr("Show the application's documentation")); m_helpAction->setShortcut(QKeySequence::HelpContents); connect(m_helpAction, SIGNAL(triggered()), this, SLOT(showDocumentation())); m_whatsThisAction = QWhatsThis::createAction(this); m_whatsThisAction->setIcon(Icon(QLatin1String("help-contextual"))); m_whatsThisAction->setStatusTip(tr("Show simple description of any widget")); m_aboutAction = new QAction(QIcon(QLatin1String(":/icons/qtikz-22.png")), tr("&About %1").arg(KtikzApplication::applicationName()), this); m_aboutAction->setStatusTip(tr("Show the application's About box")); connect(m_aboutAction, SIGNAL(triggered()), this, SLOT(about())); m_aboutQtAction = new QAction(QIcon(QLatin1String(":/icons/qt-logo-22.png")), tr("About &Qt"), this); m_aboutQtAction->setStatusTip(tr("Show the Qt library's About box")); connect(m_aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); #endif } #ifdef KTIKZ_USE_KDE void MainWindow::addActionCloneToCollection(const QString &actionName, QAction *action) { // XXX This is a dirty hack to avoid the warning "Attempt to use QAction with KXMLGUIFactory" KToggleAction *actionClone = new KToggleAction(this); actionCollection()->addAction(actionName, actionClone); actionClone->setText(action->text()); actionClone->setIcon(action->icon()); connect(action, SIGNAL(toggled(bool)), actionClone, SLOT(setChecked(bool))); connect(actionClone, SIGNAL(triggered()), action, SLOT(trigger())); } #else void MainWindow::createMenus() { QMenu *fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(m_newAction); fileMenu->addAction(m_openAction); fileMenu->addAction(m_openRecentAction); fileMenu->addSeparator(); fileMenu->addAction(m_saveAction); fileMenu->addAction(m_saveAsAction); fileMenu->addAction(m_tikzPreviewController->exportAction()); fileMenu->addSeparator(); fileMenu->addAction(m_reloadAction); fileMenu->addSeparator(); fileMenu->addAction(m_tikzPreviewController->printPreviewAction()); fileMenu->addAction(m_tikzPreviewController->printAction()); fileMenu->addSeparator(); fileMenu->addAction(m_closeAction); fileMenu->addSeparator(); fileMenu->addAction(m_exitAction); menuBar()->addMenu(m_tikzEditorView->editMenu()); menuBar()->addMenu(m_tikzEditorView->bookmarksMenu()); QMenu *viewMenu = m_tikzPreviewController->menu(); viewMenu->insertAction(viewMenu->actions().at(viewMenu->actions().size() - 2), m_buildAction); viewMenu->addAction(m_viewLogAction); menuBar()->addMenu(viewMenu); m_settingsMenu = menuBar()->addMenu(tr("&Settings")); QMenu *toolBarMenu = new QMenu(tr("&Toolbars"), this); toolBarMenu->setIcon(Icon(QLatin1String("configure-toolbars"))); toolBarMenu->menuAction()->setStatusTip(tr("Show or hide toolbars")); toolBarMenu->addAction(m_fileToolBar->toggleViewAction()); toolBarMenu->addAction(m_editToolBar->toggleViewAction()); toolBarMenu->addAction(m_viewToolBar->toggleViewAction()); toolBarMenu->addAction(m_runToolBar->toggleViewAction()); m_fileToolBar->toggleViewAction()->setStatusTip(tr("Show toolbar \"%1\"").arg(m_fileToolBar->windowTitle())); m_editToolBar->toggleViewAction()->setStatusTip(tr("Show toolbar \"%1\"").arg(m_editToolBar->windowTitle())); m_viewToolBar->toggleViewAction()->setStatusTip(tr("Show toolbar \"%1\"").arg(m_viewToolBar->windowTitle())); m_runToolBar->toggleViewAction()->setStatusTip(tr("Show toolbar \"%1\"").arg(m_runToolBar->windowTitle())); m_settingsMenu->addMenu(toolBarMenu); m_sideBarMenu = new QMenu(tr("&Sidebars"), this); m_sideBarMenu->setIcon(Icon(QLatin1String("configure-toolbars"))); m_sideBarMenu->menuAction()->setStatusTip(tr("Show or hide sidebars")); m_sideBarMenu->addAction(m_previewDock->toggleViewAction()); m_sideBarMenu->addAction(m_logDock->toggleViewAction()); m_previewDock->toggleViewAction()->setStatusTip(tr("Show sidebar \"%1\"").arg(m_previewDock->windowTitle())); m_logDock->toggleViewAction()->setStatusTip(tr("Show sidebar \"%1\"").arg(m_logDock->windowTitle())); m_settingsMenu->addMenu(m_sideBarMenu); m_settingsMenu->addSeparator(); m_settingsMenu->addAction(m_configureAction); connect(m_fileToolBar->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setToolBarStatusTip(bool))); connect(m_editToolBar->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setToolBarStatusTip(bool))); connect(m_viewToolBar->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setToolBarStatusTip(bool))); connect(m_runToolBar->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setToolBarStatusTip(bool))); connect(m_previewDock->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setDockWidgetStatusTip(bool))); connect(m_logDock->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setDockWidgetStatusTip(bool))); menuBar()->addSeparator(); QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); helpMenu->addAction(m_helpAction); helpMenu->addAction(m_showTikzDocAction); helpMenu->addAction(m_whatsThisAction); helpMenu->addSeparator(); helpMenu->addAction(m_aboutAction); helpMenu->addAction(m_aboutQtAction); } void MainWindow::createToolBars() { m_fileToolBar = addToolBar(tr("File")); m_fileToolBar->setObjectName(QLatin1String("FileToolBar")); m_fileToolBar->addAction(m_newAction); m_fileToolBar->addAction(m_openAction); m_fileToolBar->addAction(m_saveAction); m_fileToolBar->addAction(m_closeAction); m_editToolBar = m_tikzEditorView->toolBar(); addToolBar(m_editToolBar); QList viewAndRunToolBars = m_tikzPreviewController->toolBars(); addToolBar(viewAndRunToolBars.at(0)); viewAndRunToolBars.at(1)->insertAction(viewAndRunToolBars.at(1)->actions().at(0), m_buildAction); viewAndRunToolBars.at(1)->addAction(m_viewLogAction); addToolBar(viewAndRunToolBars.at(1)); m_viewToolBar = viewAndRunToolBars.at(0); m_runToolBar = viewAndRunToolBars.at(1); setToolBarStyle(); } void MainWindow::setToolBarStyle() { QSettings settings; settings.beginGroup(QLatin1String("MainWindow")); int toolBarStyleNumber = settings.value(QLatin1String("ToolBarStyle"), 0).toInt(); Qt::ToolButtonStyle toolBarStyle = Qt::ToolButtonIconOnly; switch (toolBarStyleNumber) { case 0: toolBarStyle = Qt::ToolButtonIconOnly; break; case 1: toolBarStyle = Qt::ToolButtonTextOnly; break; case 2: toolBarStyle = Qt::ToolButtonTextBesideIcon; break; case 3: toolBarStyle = Qt::ToolButtonTextUnderIcon; break; } m_fileToolBar->setToolButtonStyle(toolBarStyle); m_editToolBar->setToolButtonStyle(toolBarStyle); m_tikzPreviewController->setToolBarStyle(toolBarStyle); settings.endGroup(); } #endif void MainWindow::createCommandInsertWidget() { // insert global commands widget QSettings settings; bool commandsInDock = settings.value(QLatin1String("CommandsInDock"), false).toBool(); if (commandsInDock) { m_commandsDock = m_commandInserter->getDockWidget(this); addDockWidget(Qt::LeftDockWidgetArea, m_commandsDock); #ifdef KTIKZ_USE_KDE actionCollection()->addAction(QLatin1String("toggle_commands_list"), m_commandsDock->toggleViewAction()); #else m_sideBarMenu->insertAction(m_sideBarMenu->actions().at(1), m_commandsDock->toggleViewAction()); #endif connect(m_commandsDock->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(setDockWidgetStatusTip(bool))); } else { // add commands action (menu will be added later in init()) m_insertAction = new Action(tr("&Insert"), this, QLatin1String("insert")); #ifndef KTIKZ_USE_KDE menuBar()->insertAction(m_settingsMenu->menuAction(), m_insertAction); #endif } // add user commands menu #ifdef KTIKZ_USE_KDE QMenu *userMenu = m_userCommandInserter->getMenu(); QAction *userInsertAction = new Action(userMenu->title(), this, QLatin1String("user_insert")); userInsertAction->setMenu(userMenu); #else menuBar()->insertMenu(m_settingsMenu->menuAction(), m_userCommandInserter->getMenu()); #endif } void MainWindow::createStatusBar() { QStatusBar *status = statusBar(); m_positionLabel = new QLabel(status); m_positionLabel->setMinimumWidth(150); status->addPermanentWidget(m_positionLabel, 0); m_mouseCoordinatesLabel = new QLabel(status); m_mouseCoordinatesLabel->setMinimumWidth(300); status->addPermanentWidget(m_mouseCoordinatesLabel, 0); status->showMessage(tr("Ready")); } void MainWindow::setDockWidgetStatusTip(bool enabled) { QAction *action = qobject_cast(sender()); QString dockName = action->text(); dockName.remove(QLatin1Char('&')); if (enabled) action->setStatusTip(tr("Hide sidebar \"%1\"").arg(dockName)); else action->setStatusTip(tr("Show sidebar \"%1\"").arg(dockName)); } void MainWindow::setToolBarStatusTip(bool enabled) { QAction *action = qobject_cast(sender()); if (enabled) action->setStatusTip(tr("Hide toolbar \"%1\"").arg(action->text())); else action->setStatusTip(tr("Show toolbar \"%1\"").arg(action->text())); } /***************************************************************************/ void MainWindow::configure() { if (!m_configDialog) { m_configDialog = new ConfigDialog(this); m_configDialog->setTranslatedHighlightTypeNames(TikzHighlighter::getTranslatedHighlightTypeNames()); m_configDialog->setHighlightTypeNames(TikzHighlighter::getHighlightTypeNames()); m_configDialog->setDefaultHighlightFormats(TikzHighlighter::getDefaultHighlightFormats()); connect(m_configDialog, SIGNAL(settingsChanged()), this, SLOT(applySettings())); } disconnect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); m_configDialog->readSettings(); m_configDialog->exec(); if (m_buildAutomatically) connect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); } void MainWindow::applySettings() { QSettings settings; m_tikzEditorView->applySettings(); m_tikzPreviewController->applySettings(); settings.beginGroup(QLatin1String("Preview")); m_buildAutomatically = settings.value(QLatin1String("BuildAutomatically"), true).toBool(); m_buildAction->setVisible(!m_buildAutomatically); if (!settings.value(QLatin1String("ShowCoordinates"), true).toBool()) m_mouseCoordinatesLabel->setText(QString()); settings.endGroup(); settings.beginGroup(QLatin1String("Editor")); m_useCompletion = settings.value(QLatin1String("UseCompletion"), true).toBool(); updateCompleter(); settings.beginGroup(QLatin1String("encoding")); QVariant qv = settings.value(QLatin1String("default")); setCurrentEncoding( qv.isNull() ? QTextCodec::codecForLocale() : QTextCodec::codecForName(qv.toByteArray())) ; qv = settings.value(QLatin1String("encoder")); m_overrideEncoder = qv.isNull() ? NULL : QTextCodec::codecForName(qv.toByteArray()) ; qv = settings.value(QLatin1String("decoder")); m_overrideDecoder = qv.isNull() ? NULL : QTextCodec::codecForName(qv.toByteArray()) ; m_encoderBom = settings.value(QLatin1String("bom"), true).toBool(); settings.endGroup(); m_tikzHighlighter->applySettings(); m_tikzHighlighter->rehighlight(); m_openRecentAction->createRecentFilesList(); #ifndef KTIKZ_USE_KDE setToolBarStyle(); #endif } void MainWindow::readSettings() { m_openRecentAction->loadEntries(); QSettings settings; settings.beginGroup(QLatin1String("MainWindow")); const int screenWidth = QApplication::desktop()->availableGeometry().width(); QSize size; if (screenWidth > 1200) size = settings.value(QLatin1String("size"), QSize(1200, 600)).toSize(); else if (screenWidth > 1024) size = settings.value(QLatin1String("size"), QSize(1024, 600)).toSize(); else size = settings.value(QLatin1String("size"), QSize(800, 600)).toSize(); resize(size); restoreState(settings.value(QLatin1String("MainWindowState")).toByteArray()); settings.endGroup(); // none of the problems below seem to persist in May 2014 // still do the following (see applySettings()) here in order to avoid flicker in the toolbar // settings.beginGroup(QLatin1String("Preview")); // m_buildAutomatically = settings.value(QLatin1String("BuildAutomatically"), true).toBool(); // m_buildAction->setVisible(!m_buildAutomatically); // settings.endGroup(); // still do the following here in order to avoid a crash when a file is opened in a new window // m_openRecentAction->createRecentFilesList(); // still do this here, otherwise the compilation fails when a file is loaded in a new window // m_tikzPreviewController->applySettings(); } void MainWindow::writeSettings() { m_openRecentAction->saveEntries(); QSettings settings; settings.beginGroup(QLatin1String("MainWindow")); settings.setValue(QLatin1String("size"), size()); settings.setValue(QLatin1String("MainWindowState"), QMainWindow::saveState()); settings.endGroup(); } /***************************************************************************/ bool MainWindow::maybeSave() { checkForFileChanges(Closing); if (m_isModifiedExternally) // if the user presses "Cancel" when asked to overwrite or close the file, then we abort the closing procedure return false; if (m_tikzEditorView->editor()->document()->isModified()) { const int ret = QMessageBox::warning(this, KtikzApplication::applicationName(), tr("The document has been modified.\n" "Do you want to save your changes?"), QMessageBox::Save | QMessageBox::Default, QMessageBox::Discard, QMessageBox::Cancel | QMessageBox::Escape); if (ret == QMessageBox::Save) return save(); else if (ret == QMessageBox::Cancel) return false; } return true; } void MainWindow::loadUrl(const QUrl &url) { // loadUrl(Url(url)); //} //void MainWindow::loadUrl(const Url &url) //{ //QTime t = QTime::currentTime(); // check whether the file can be opened if (!url.isValid() || url.isEmpty()) return; File file(url, File::ReadOnly); if (!file.open(QFile::Text)) { QMessageBox::warning(this, KtikzApplication::applicationName(), tr("Cannot read file \"%1\":\n%2.") .arg(url.path()) .arg(file.errorString())); m_openRecentAction->removeUrl(url); return; } // only open a new window (if necessary) if the file can actually be opened if (!m_tikzEditorView->editor()->document()->isEmpty()) { MainWindow *newMainWindow = new MainWindow; newMainWindow->loadUrl(url); newMainWindow->show(); return; } // set current url before loading its contents in m_tikzEditorView->editor() // because this latter action causes m_tikzPreviewController->generatePreview() // to be called which calls url() setCurrentUrl(url); // load the file and generate preview //qCritical() << "loadUrl" << t.msecsTo(QTime::currentTime()); disconnect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); QTextStream in(file.file()); QApplication::setOverrideCursor(Qt::WaitCursor); this->configureStreamDecoding(in); m_tikzEditorView->editor()->setPlainText(in.readAll()); setCurrentEncoding(in.codec()); QApplication::restoreOverrideCursor(); //qCritical() << "loadUrl" << t.msecsTo(QTime::currentTime()); m_tikzPreviewController->generatePreview(); //qCritical() << "loadUrl" << t.msecsTo(QTime::currentTime()); if (m_buildAutomatically) connect(m_tikzEditorView, SIGNAL(contentsChanged()), m_tikzPreviewController, SLOT(regeneratePreviewAfterDelay())); m_lastUrl = url; m_openRecentAction->addUrl(url); //qCritical() << "loadUrl" << t.msecsTo(QTime::currentTime()); // statusBar()->showMessage(tr("File loaded"), 2000); // this is slow // statusBar()->showMessage(tr("File loaded using %1 codec").arg(QString( m_currentEncoding->name())), 2000); //qCritical() << "loadUrl" << t.msecsTo(QTime::currentTime()); } bool MainWindow::saveUrl(const QUrl &url) { if (!url.isValid() || url.isEmpty()) return false; File file(url, File::WriteOnly); if (!file.open(QFile::Text)) { QMessageBox::warning(this, KtikzApplication::applicationName(), tr("Cannot write file \"%1\":\n%2") .arg(url.path()) .arg(file.errorString())); return false; } QTextStream out(file.file()); QApplication::setOverrideCursor(Qt::WaitCursor); this->configureStreamEncoding(out); out << m_tikzEditorView->editor()->toPlainText(); out.flush(); QApplication::restoreOverrideCursor(); if (!file.close()) { QMessageBox::warning(this, KtikzApplication::applicationName(), tr("Cannot write file \"%1\":\n%2") .arg(url.path()) .arg(file.errorString())); return false; } m_lastUrl = url; setCurrentUrl(url); m_openRecentAction->addUrl(url); saveLastInternalModifiedDateTime(); // make sure that the save in this function is not seen as an "external" save statusBar()->showMessage(tr("File saved", "@info:status"), 2000); return true; } void MainWindow::setCurrentEncoding(QTextCodec *codec, bool isUserRequest) { m_currentEncoding = codec; // TODO: implement user warning and suggestion to reload the file. } QUrl MainWindow::url() const { return m_currentUrl; } void MainWindow::setCurrentUrl(const QUrl &url) { m_currentUrl = url; m_tikzEditorView->editor()->document()->setModified(false); setDocumentModified(false); setWindowTitle(tr("%1[*] - %2").arg(strippedName(m_currentUrl)).arg(KtikzApplication::applicationName())); } QString MainWindow::strippedName(const QUrl &url) const { if (!url.isValid() || url.isEmpty()) return QLatin1String("untitled.txt"); const QString fileName = url.fileName(); return (fileName.isEmpty()) ? QLatin1String("untitled.txt") : fileName; } QTextCodec *MainWindow::getEncoder() const { return this->m_overrideEncoder ? this->m_overrideEncoder : this->m_currentEncoding; } void MainWindow::configureStreamEncoding(QTextStream& textStream) { QTextCodec* encoder = this->getEncoder(); if(Q_LIKELY(encoder)) // should be true textStream.setCodec(encoder); else qWarning("The encoder variable should not be null."); textStream.setGenerateByteOrderMark(this->m_encoderBom); } void MainWindow::configureStreamDecoding(QTextStream &textStream) { if(m_overrideDecoder) { textStream.setCodec(m_overrideDecoder); } textStream.setAutoDetectUnicode(true); } /***************************************************************************/ void MainWindow::setLineNumber(int lineNumber) { m_tikzEditorView->goToLine(lineNumber - 1); } int MainWindow::lineNumber() const { return m_tikzEditorView->lineNumber(); } /***************************************************************************/ void MainWindow::showCursorPosition(int row, int col) { m_positionLabel->setText(tr("Line: %1\tCol: %2", "@info:status").arg(QString::number(row)).arg(QString::number(col))); } void MainWindow::showMouseCoordinates(qreal x, qreal y, int precisionX, int precisionY) { m_mouseCoordinatesLabel->setText(tr("Preview: x = %1\ty = %2", "@info:status").arg(QLocale::system().toString(x, 'f', precisionX)).arg(QLocale::system().toString(y, 'f', precisionY))); } /***************************************************************************/ QString MainWindow::tikzCode() const { return m_tikzEditorView->editor()->toPlainText(); } /***************************************************************************/ void MainWindow::updateCompleter() { //QTime t = QTime::currentTime(); QStringList words = m_commandInserter->getCommandWords(); words << m_userCommandInserter->getCommandWords(); words.sort(); words.removeDuplicates(); m_tikzEditorView->updateCompleter(m_useCompletion, words); //qCritical() << "updateCompleter" << t.msecsTo(QTime::currentTime()); } ktikz-0.12/app/mainwindow.h000066400000000000000000000155631325124551100157060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007 by Florian Hackenberger * * * * Copyright (C) 2007, 2008, 2009, 2010, 2012, 2014 * * by Glad Deschrijver * * Copyright (C) 2016 by G. Prudhomme * * * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #ifdef KTIKZ_USE_KDE #include #else #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #else #include #endif class AboutDialog; class AssistantController; #endif #include #include #include "../common/mainwidget.h" class QAction; class QCloseEvent; class QDockWidget; class QLabel; class QMenu; class QToolButton; class Action; class ConfigDialog; class LogTextEdit; class RecentFilesAction; class TikzCommandInserter; class TikzEditorView; class TikzHighlighter; class TikzPreviewController; class UserCommandInserter; /** Provides a tiny application for simple editing of TikZ graphics * @author Florian Hackenberger */ #ifdef KTIKZ_USE_KDE class MainWindow : public KXmlGuiWindow, public MainWidget #else class MainWindow : public QMainWindow, public MainWidget #endif { Q_OBJECT public: /*! * This enum is used to determine when the file is checked for external changes. */ enum FileCheckMoment { FocusIn, /*! mainWindowList() { return s_mainWindowList; } virtual void configureStreamEncoding(QTextStream &textStream); virtual void configureStreamDecoding(QTextStream &textStream); public Q_SLOTS: void loadUrl(const QUrl &url); //void loadUrl(const Url &url); bool save(); protected: #ifdef KTIKZ_USE_KDE bool queryClose(); void readProperties(const KConfigGroup &group); void saveProperties(KConfigGroup &group); #endif void closeEvent(QCloseEvent *event); private Q_SLOTS: void init(); void checkForFileChanges(const FileCheckMoment &moment = FocusIn); void saveLastInternalModifiedDateTime(); void setDockWidgetStatusTip(bool enabled); void setToolBarStatusTip(bool enabled); void newFile(); bool closeFile(); void open(); bool saveAs(); void reload(); void showTikzDocumentation(); #ifndef KTIKZ_USE_KDE void about(); void showDocumentation(); #endif void configure(); void applySettings(); void setDocumentModified(bool isModified); void updateLog(); #ifdef KTIKZ_USE_KDE void toggleWhatsThisMode(); #endif void showCursorPosition(int row, int col); void showMouseCoordinates(qreal x, qreal y, int precisionX = 5, int precisionY = 5); void updateCompleter(); /// Change the codec for the current document /// @param isUserRequest set to true if the user requested the changement (in this case, the application should warn the user -- not implemented yet.). void setCurrentEncoding(QTextCodec* codec, bool isUserRequest = false); private: void createActions(); #ifdef KTIKZ_USE_KDE void addActionCloneToCollection(const QString &actionName, QAction *action); #else void createMenus(); void createToolBars(); void setToolBarStyle(); #endif void createCommandInsertWidget(); void createStatusBar(); void readSettings(); void writeSettings(); bool maybeSave(); bool saveUrl(const QUrl &url); void setCurrentUrl(const QUrl &url); QString strippedName(const QUrl &url) const; void showPdfPage(); static QList s_mainWindowList; TikzEditorView *m_tikzEditorView; TikzHighlighter *m_tikzHighlighter; bool m_useCompletion; TikzPreviewController *m_tikzPreviewController; bool m_buildAutomatically; QDockWidget *m_previewDock; QDockWidget *m_logDock; LogTextEdit *m_logTextEdit; QDockWidget *m_commandsDock; TikzCommandInserter *m_commandInserter; UserCommandInserter *m_userCommandInserter; QLabel *m_positionLabel; QLabel *m_mouseCoordinatesLabel; QMenu *m_settingsMenu; QMenu *m_sideBarMenu; QToolBar *m_fileToolBar; QToolBar *m_editToolBar; QToolBar *m_viewToolBar; QToolBar *m_runToolBar; QAction *m_newAction; QAction *m_openAction; RecentFilesAction *m_openRecentAction; QAction *m_saveAction; QAction *m_saveAsAction; QAction *m_exportAction; QAction *m_exportEpsAction; QAction *m_exportPdfAction; QAction *m_exportPngAction; Action *m_reloadAction; QAction *m_closeAction; QAction *m_exitAction; QAction *m_procStopAction; Action *m_buildAction; Action *m_insertAction; QAction *m_viewLogAction; QAction *m_shellEscapeAction; QAction *m_configureAction; QAction *m_showTikzDocAction; QAction *m_whatsThisAction; #ifndef KTIKZ_USE_KDE QAction *m_helpAction; QAction *m_aboutAction; QAction *m_aboutQtAction; #endif QToolButton *m_shellEscapeButton; bool m_useShellEscaping; #ifndef KTIKZ_USE_KDE QPointer m_aboutDialog; AssistantController *m_assistantController; #endif QPointer m_configDialog; QUrl m_currentUrl; QTextCodec* m_currentEncoding; /// If not null, override the encoder (rather than @ref m_currentEncoding) QTextCodec* m_overrideEncoder; /// If not null, override the decoder QTextCodec* m_overrideDecoder; /// True if a BOM must be added to the PGF-file bool m_encoderBom; /// Return the current encoder (m_currentEncoding or another if encoder is overriden). /*virtual*/ QTextCodec* getEncoder() const; QUrl m_lastUrl; QDateTime m_lastInternalModifiedDateTime; bool m_isModifiedExternally; }; #endif ktikz-0.12/app/qtikz.qrc000066400000000000000000000040771325124551100152300ustar00rootroot00000000000000 tikzcommands.xml tikzcommands.json icons/qtikz-22.png icons/qtikz-128.png icons/document-edit.png icons/edit-clear-locationbar-rtl.png icons/document-new.png icons/document-open.png icons/document-open-recent.png icons/document-save.png icons/document-save-as.png icons/document-export.png icons/view-refresh.png icons/document-print-preview.png icons/document-print.png icons/application-exit.png icons/zoom-fit-best.png icons/zoom-fit-width.png icons/edit-undo.png icons/edit-redo.png icons/edit-copy.png icons/edit-cut.png icons/edit-paste.png icons/format-indent-more.png icons/format-indent-less.png icons/edit-find.png icons/go-up.png icons/go-down.png icons/edit-find-replace.png icons/go-jump.png icons/dialog-cancel.png icons/window-close.png icons/image-x-eps.png icons/application-pdf.png icons/image-png.png icons/zoom-in.png icons/zoom-out.png icons/go-previous.png icons/go-next.png icons/process-stop.png icons/run-build.png icons/application-x-executable.png icons/dialog-error.png icons/configure-toolbars.png icons/configure.png icons/accessories-text-editor.png icons/preferences-desktop-color.png icons/preferences-desktop-theme.png icons/help-contents.png icons/help-contextual.png icons/qt-logo-22.png ktikz-0.12/app/tikzcommandinserter.cpp000066400000000000000000000746111325124551100201600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 * * by Glad Deschrijver * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #include "tikzcommandinserter.h" #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #include #include #include #endif #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #include #include #include #include #include #include #include #else #include #include #include #include #include #include #include #include #include #endif #include "tikzeditorhighlighter.h" #include "tikzcommandwidget.h" #include "../common/utils/combobox.h" static const QString s_completionPlaceHolder(0x2022); TikzCommandList TikzCommandInserter::m_tikzSections; QList TikzCommandInserter::m_tikzCommandsList; TikzCommandInserter::TikzCommandInserter(QWidget *parent) : QObject(parent) , m_mainEdit(0) , m_commandsCombo(0) , m_commandsStack(0) { } /***************************************************************************/ static TikzCommand newCommand(const QString &name, const QString &description, const QString &command, const QString &highlightString, int dx, int dy, int type) { // type: // 0: plain text // 1: command // 2: draw to next point // 3: option TikzCommand tikzCommand; tikzCommand.name = name; tikzCommand.description = description; tikzCommand.command = command; tikzCommand.highlightString = highlightString; tikzCommand.dx = dx; tikzCommand.dy = dy; tikzCommand.type = type; return tikzCommand; } static QString translateOptions(const QString &text) { QString translatedText; for (int pos = 0, oldPos = 0; pos >= 0;) { oldPos = pos; pos = text.indexOf(QLatin1Char('<'), pos); // option is between < and > translatedText += text.midRef(oldPos, pos - oldPos + 1); // add text between the current option and the previous option; this also adds the end of the original string, except when there are no options if (pos >= 0) { oldPos = pos; pos = text.indexOf(QLatin1Char('>'), pos); // option is between < and > translatedText += QCoreApplication::translate("TikzCommandInserter", text.mid(oldPos+1, pos - oldPos - 1).toLatin1().data()); } } if (!translatedText.isEmpty()) // when there are no options, translatedText is empty return translatedText; return text; } static QString restoreNewLines(const QString &text) { QString newText = text; // replace all "\n" not preceded by a backslash (as in "\\node") by a newline character for (int pos = 0; ; ++pos) { pos = newText.indexOf(QLatin1String("\\n"), pos); if (pos < 0) break; if (pos == 0 || newText.at(pos-1) != QLatin1Char('\\')) newText.replace(pos, 2, QLatin1Char('\n')); } return newText; } static TikzCommandList getChildCommands(QXmlStreamReader *xml, QList *tikzCommandsList) { TikzCommandList commandList; QList commands; commandList.title = QApplication::translate("TikzCommandInserter", xml->attributes().value(QLatin1String("title")).toString().toLatin1().data()); while (xml->readNextStartElement()) { if (xml->name() == QLatin1String("item")) { QXmlStreamAttributes xmlAttributes = xml->attributes(); QString name = QApplication::translate("TikzCommandInserter", xmlAttributes.value(QLatin1String("name")).toString().toLatin1().data()); QString description = xmlAttributes.value(QLatin1String("description")).toString(); QString insertion = xmlAttributes.value(QLatin1String("insert")).toString(); QString highlightString = xmlAttributes.value(QLatin1String("highlight")).toString(); QString type = xmlAttributes.value(QLatin1String("type")).toString(); // currently description contains no newlines, otherwise add code to replace all "\n" not preceded by a backslash (as in "\\node") by a newline character description.replace(QLatin1String("\\\\"), QLatin1String("\\")); description = translateOptions(description); insertion = restoreNewLines(insertion); // this must be done before the next line insertion.replace(QLatin1String("\\\\"), QLatin1String("\\")); if (description.isEmpty()) // if both name and description are empty, setting the description first ensures that name is also set to insertion description = insertion; if (name.isEmpty()) { name = description; description.remove(QLatin1Char('&')); // we assume that if name.isEmpty() then an accelerator is defined in description } if (type.isEmpty()) type = QLatin1Char('0'); TikzCommand tikzCommand = newCommand(name, description, insertion, highlightString, xmlAttributes.value(QLatin1String("dx")).toString().toInt(), xmlAttributes.value(QLatin1String("dy")).toString().toInt(), type.toInt()); tikzCommand.number = tikzCommandsList->size(); tikzCommandsList->append(tikzCommand); commands << tikzCommand; xml->skipCurrentElement(); // allow to read the next start element on the same level: this skips reading the current end element which would cause xml.readNextStartElement() to evaluate to false } else if (xml->name() == QLatin1String("separator")) { commands << newCommand(QString(), QString(), QString(), QString(), 0, 0, 0); xml->skipCurrentElement(); // same as above } else if (xml->name() == QLatin1String("section")) { commands << newCommand(QString(), QString(), QString(), QString(), 0, 0, -1); // the i-th command with type == -1 corresponds to the i-th submenu (assumed in getMenu()) commandList.children << getChildCommands(xml, tikzCommandsList); } else xml->skipCurrentElement(); } commandList.commands = commands; return commandList; } static TikzCommandList getCommands(QXmlStreamReader *xml, QList *tikzCommandsList) { TikzCommandList commandList; QFile tagsFile(QLatin1String(":/tikzcommands.xml")); if (!tagsFile.open(QFile::ReadOnly)) return commandList; xml->setDevice(&tagsFile); if (xml->readNextStartElement()) { if (xml->name() == QLatin1String("tikzcommands")) commandList = getChildCommands(xml, tikzCommandsList); else xml->raiseError(QApplication::translate("TikzCommandInserter", "Cannot parse the TikZ commands file.")); } if (xml->error()) // this should never happen in a final release because tikzcommands.xml is built in the binary qCritical("Parse error in TikZ commands file at line %d, column %d:\n%s", int(xml->lineNumber()), int(xml->columnNumber()), qPrintable(xml->errorString())); return commandList; } #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) static TikzCommandList loadChildCommandsJson(QJsonObject sectionObject, QList *tikzCommandsList) { TikzCommandList commandList; QList commands; if (sectionObject.contains(QLatin1String("title"))) commandList.title = QCoreApplication::translate("TikzCommandInserter", sectionObject.value(QLatin1String("title")).toString().toLatin1().data()); if (sectionObject.contains(QLatin1String("commands"))) { QJsonValue commandsArrayObject = sectionObject.value(QLatin1String("commands")); if (commandsArrayObject.isArray()) { QJsonArray commandsArray = commandsArrayObject.toArray(); for (int i = 0; i < commandsArray.size(); ++i) { if (!commandsArray.at(i).isObject()) continue; QJsonObject commandObject = commandsArray.at(i).toObject(); const int type = commandObject.value(QLatin1String("type")).toInt(); if (commandObject.contains(QLatin1String("commands"))) { commands << newCommand(QString(), QString(), QString(), QString(), 0, 0, -1); // the i-th command with type == -1 corresponds to the i-th submenu (assumed in getMenu()) commandList.children << loadChildCommandsJson(commandObject, tikzCommandsList); } else if (type == -1) { commands << newCommand(QString(), QString(), QString(), QString(), 0, 0, 0); } else { QString name = QCoreApplication::translate("TikzCommandInserter", commandObject.value(QLatin1String("name")).toString().toLatin1().data()); QString description = commandObject.value(QLatin1String("description")).toString(); QString insertion = commandObject.value(QLatin1String("insert")).toString(); QString highlightString = commandObject.value(QLatin1String("highlight")).toString(); // currently description contains no newlines, otherwise add code to replace all "\n" not preceded by a backslash (as in "\\node") by a newline character description.replace(QLatin1String("\\\\"), QLatin1String("\\")); description = translateOptions(description); insertion = restoreNewLines(insertion); // this must be done before the next line insertion.replace(QLatin1String("\\\\"), QLatin1String("\\")); // insertion.replace(QLatin1String("•"), QString(0x2022)); if (description.isEmpty()) // if both name and description are empty, setting the description first ensures that name is also set to insertion description = insertion; if (name.isEmpty()) { name = description; description.remove(QLatin1Char('&')); // we assume that if name.isEmpty() then an accelerator is defined in description } TikzCommand tikzCommand = newCommand(name, description, insertion, highlightString, commandObject.value(QLatin1String("dx")).toInt(), commandObject.value(QLatin1String("dy")).toInt(), type); tikzCommand.number = tikzCommandsList->size(); tikzCommandsList->append(tikzCommand); commands << tikzCommand; } } } } commandList.commands = commands; return commandList; } static TikzCommandList loadCommandsJson(const QString &fileName, QList *tikzCommandsList) { TikzCommandList commandList; QFile commandsFile(fileName); if (!commandsFile.open(QIODevice::ReadOnly | QIODevice::Text)) return commandList; QJsonParseError error; QJsonDocument commandsDocument = QJsonDocument::fromJson(commandsFile.readAll(), &error); if (error.error != QJsonParseError::NoError) { qCritical("Parse error in TikZ commands file %s at offset %d:\n%s", qPrintable(fileName), error.offset, qPrintable(error.errorString())); return commandList; } if (commandsDocument.isObject()) { QJsonObject sectionObject = commandsDocument.object(); commandList = loadChildCommandsJson(sectionObject, tikzCommandsList); } return commandList; } #endif // QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) void TikzCommandInserter::loadCommands() { if (!m_tikzSections.commands.isEmpty()) return; // don't load the commands again when opening a second window #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) m_tikzSections = loadCommandsJson(QLatin1String(":/tikzcommands.json"), &m_tikzCommandsList); #else // QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QXmlStreamReader xml; m_tikzSections = getCommands(&xml, &m_tikzCommandsList); #endif // QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) } /***************************************************************************/ static QString removeOptionsAndSpecialCharacters(const QString &text) { bool isInOption = false; for (int i = 0; i < text.length(); ++i) { if (isInOption) continue; QChar::Category cat = text.at(i).category(); if (cat == QChar::Letter_Lowercase || cat == QChar::Letter_Uppercase || text.at(i) == QLatin1Char('\\')) return text.mid(i); if (text.at(i) == QLatin1Char('<')) { isInOption = true; continue; } else if (text.at(i) == QLatin1Char('>')) { isInOption = false; continue; } } return QString(); } QStringList TikzCommandInserter::getCommandWords() { QStringList words; // QRegExp rx1(QLatin1String("^([^a-z\\\\<>]*<[^>]*>)*")); // QRegExp rx2(QLatin1String("^[^a-z\\\\]*")); // QString allowedLetters = QLatin1String("abcdefghijklmnopqrstuvwxyz\\"); for (int i = 0; i < m_tikzCommandsList.size(); ++i) { QString word = m_tikzCommandsList.at(i).description; // remove all special characters and at the beginning of the word /* if (!word.isEmpty() && !allowedLetters.contains(word.at(0))) // minimize the number of uses of QRegExp { word.remove(rx1); word.remove(rx2); } if (!word.isEmpty()) words.append(word); else { word = m_tikzCommandsList.at(i).command; // remove all special characters and at the beginning of the word if (!word.isEmpty() && !allowedLetters.contains(word.at(0))) // minimize the number of uses of QRegExp { word.remove(rx1); word.remove(rx2); } if (!word.isEmpty()) words.append(word); } */ if (word.isEmpty()) word = m_tikzCommandsList.at(i).command; word = removeOptionsAndSpecialCharacters(word); if (!word.isEmpty()) words.append(word); } return words; } /*! * \name Menu with TikZ commands */ //@{ void TikzCommandInserter::updateDescriptionToolTip() { QAction *action = qobject_cast(sender()); if (action) { const int num = action->data().toInt(); const TikzCommand cmd = m_tikzCommandsList.at(num); QString description = cmd.description; description.replace(QLatin1Char('&'), QLatin1String("&")); description.replace(QLatin1Char('<'), QLatin1String("<")); description.replace(QLatin1Char('>'), QLatin1String(">")); QMenu *menu = qobject_cast(action->parentWidget()); const QRect rect = menu->actionGeometry(action); #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) // QToolTip::showText(menu->mapToGlobal(rect.topRight()), QLatin1String("

") + description + QLatin1String("

"), menu, rect, 5000); QToolTip::showText(menu->mapToGlobal(QPoint(rect.x() + rect.width(), rect.y() - rect.height() / 2)), QLatin1String("

") + description + QLatin1String("

"), menu, rect, 5000); #else // QToolTip::showText(menu->mapToGlobal(rect.topRight()), QLatin1String("

") + description + QLatin1String("

"), menu, rect); QToolTip::showText(menu->mapToGlobal(QPoint(rect.x() + rect.width(), rect.y() - rect.height() / 2)), QLatin1String("

") + description + QLatin1String("

"), menu, rect); #endif } } QMenu *TikzCommandInserter::getMenu(const TikzCommandList &commandList, QWidget *parent) { QMenu *menu = new QMenu(commandList.title, parent); const int numOfCommands = commandList.commands.size(); int whichSection = 0; for (int i = 0; i < numOfCommands; ++i) { const QString name = commandList.commands.at(i).name; if (name.isEmpty()) // add separator or submenu { if (commandList.commands.at(i).type == 0) { menu->addSeparator(); } else // type == -1, so add submenu; this assumes that the i-th command with type == -1 corresponds with the i-th submenu (see getCommands()) { menu->addMenu(getMenu(commandList.children.at(whichSection), parent)); ++whichSection; } } else // add command { QAction *action = menu->addAction(name); action->setData(commandList.commands.at(i).number); // link to the corresponding item in m_tikzCommandsList action->setStatusTip(commandList.commands.at(i).description); connect(action, SIGNAL(triggered()), this, SLOT(insertTag())); connect(action, SIGNAL(hovered()), this, SLOT(updateDescriptionToolTip())); } } return menu; } /*! * This function returns a menu containing a list of TikZ commands * which can be inserted in the main text. * \return a menu with TikZ commands */ QMenu *TikzCommandInserter::getMenu() { return getMenu(m_tikzSections, qobject_cast(parent())); } //@} /*! * \name Dock widget with TikZ commands */ //@{ void TikzCommandInserter::addListWidgetItems(QListWidget *listWidget, const QPalette &standardPalette, const TikzCommandList &commandList, bool addChildren) { QFont titleFont = qApp->font(); titleFont.setBold(true); // QColor titleBg(standardPalette.color(QPalette::Normal, QPalette::Highlight)); // titleBg = titleBg.lighter(120); QColor titleBg(standardPalette.color(QPalette::Normal, QPalette::Window)); titleBg = titleBg.darker(200); QColor titleFg(standardPalette.color(QPalette::Normal, QPalette::HighlightedText)); // QColor separatorBg(standardPalette.color(QPalette::Normal, QPalette::AlternateBase)); // if (separatorBg == standardPalette.color(QPalette::Normal, QPalette::Base)) // separatorBg = separatorBg.darker(110); for (int i = 0; i < commandList.commands.size(); ++i) { if (commandList.commands.at(i).type == -1) // if we have an empty command corresponding to a submenu, then don't add the command, the submenus will be added later continue; QString itemText = commandList.commands.at(i).name; if (itemText.isEmpty()) continue; QListWidgetItem *item = new QListWidgetItem(listWidget); item->setText(itemText.remove(QLatin1Char('&'))); // if (itemText.isEmpty()) // item->setBackgroundColor(separatorBg); // else item->setData(Qt::UserRole, commandList.commands.at(i).number); // link to the corresponding item in m_tikzCommandsList } if (!addChildren) return; for (int i = 0; i < commandList.children.size(); ++i) { QListWidgetItem *item = new QListWidgetItem(listWidget); QString itemText = commandList.children.at(i).title; item->setText(itemText.remove(QLatin1Char('&'))); item->setBackgroundColor(titleBg); item->setTextColor(titleFg); item->setFont(titleFont); addListWidgetItems(listWidget, standardPalette, commandList.children.at(i)); } } void TikzCommandInserter::showItemsInDockWidget() { Q_ASSERT_X(m_commandsCombo, "TikzCommandInserter::showItemsInDockWidget()", "TikzCommandInserter::getDockWidget(QWidget *parent) should be run before using this function"); Q_ASSERT_X(m_commandsStack, "TikzCommandInserter::showItemsInDockWidget()", "TikzCommandInserter::getDockWidget(QWidget *parent) should be run before using this function"); QListWidget *tikzListWidget = qobject_cast(m_commandsStack->widget(0)); QPalette standardPalette = QApplication::style()->standardPalette(); // this is slow, so we call this only once here and pass this as argument to addListWidgetItems instead of calling this each time in addListWidgetItems addListWidgetItems(tikzListWidget, standardPalette, m_tikzSections, false); // don't add children for (int i = 0; i < m_tikzSections.children.size(); ++i) { QListWidget *tikzListWidget = new QListWidget; addListWidgetItems(tikzListWidget, standardPalette, m_tikzSections.children.at(i)); tikzListWidget->setMouseTracking(true); connect(tikzListWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(setListStatusTip(QListWidgetItem*))); connect(tikzListWidget, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(setListStatusTip(QListWidgetItem*))); connect(tikzListWidget, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(insertTag(QListWidgetItem*))); // connect(tikzListWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(insertTag(QListWidgetItem*))); QString comboItemText = m_tikzSections.children.at(i).title; m_commandsCombo->addItem(comboItemText.remove(QLatin1Char('&'))); m_commandsStack->addWidget(tikzListWidget); } } /*! * This function returns a dock widget containing a list of TikZ commands * which can be inserted in the main text by clicking on them. * \param parent the parent widget * \return a dock widget with TikZ commands */ QDockWidget *TikzCommandInserter::getDockWidget(QWidget *parent) { QDockWidget *tikzDock = new QDockWidget(parent); tikzDock->setObjectName(QLatin1String("CommandsDock")); tikzDock->setAllowedAreas(Qt::AllDockWidgetAreas); tikzDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); tikzDock->setWindowTitle(m_tikzSections.title); tikzDock->setWhatsThis(tr("

This is a list of TikZ " "commands. You can insert these commands in your code by " "clicking on them. You can obtain more commands by " "changing the category in the combo box.

")); QAction *focusTikzDockAction = new QAction(parent); focusTikzDockAction->setShortcut(QKeySequence(tr("Alt+I"))); tikzDock->addAction(focusTikzDockAction); connect(focusTikzDockAction, SIGNAL(triggered()), tikzDock, SLOT(setFocus())); QLabel *commandsComboLabel = new QLabel(tr("Category:")); m_commandsCombo = new ComboBox; m_commandsCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); m_commandsStack = new QStackedWidget; connect(m_commandsCombo, SIGNAL(currentIndexChanged(int)), m_commandsStack, SLOT(setCurrentIndex(int))); QListWidget *tikzListWidget = new QListWidget; tikzListWidget->setMouseTracking(true); connect(tikzListWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(setListStatusTip(QListWidgetItem*))); connect(tikzListWidget, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(setListStatusTip(QListWidgetItem*))); connect(tikzListWidget, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(insertTag(QListWidgetItem*))); // connect(tikzListWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(insertTag(QListWidgetItem*))); m_commandsCombo->addItem(tr("General")); m_commandsStack->addWidget(tikzListWidget); QGridLayout *tikzLayout = new QGridLayout; tikzLayout->addWidget(commandsComboLabel, 0, 0); tikzLayout->addWidget(m_commandsCombo, 0, 1); tikzLayout->addWidget(m_commandsStack, 1, 0, 1, 2); tikzLayout->setMargin(5); TikzCommandWidget *tikzWidget = new TikzCommandWidget; tikzWidget->setLayout(tikzLayout); tikzDock->setWidget(tikzWidget); tikzDock->setFocusProxy(m_commandsCombo); return tikzDock; } void TikzCommandInserter::setListStatusTip(QListWidgetItem *item) { if (item && !item->font().bold() && !item->text().isEmpty()) { const int num = item->data(Qt::UserRole).toInt(); Q_EMIT showStatusMessage(m_tikzCommandsList.at(num).description, 10000); } else Q_EMIT showStatusMessage(QString()); } //@} /*! * Returns a list of default formats which will be used by TikzHighlighter * to highlight the different types of highlighting rules given by * getHighlightTypeNames(). Any value in the list returned by * getHighlightTypeNames() serves as a key in this list. * \return a list of default formats */ QMap TikzCommandInserter::getDefaultHighlightFormats() { QMap formatList; QStringList highlightTypeNames = getHighlightTypeNames(); QTextCharFormat commandFormat; commandFormat.setForeground(QColor(QLatin1String("#004080"))); commandFormat.setFont(qApp->font()); commandFormat.setFontWeight(QFont::Bold); formatList[highlightTypeNames.at(0)] = commandFormat; QTextCharFormat drawFormat; drawFormat.setForeground(Qt::darkRed); drawFormat.setFont(qApp->font()); drawFormat.setFontWeight(QFont::Normal); formatList[highlightTypeNames.at(1)] = drawFormat; QTextCharFormat optionFormat; optionFormat.setForeground(QColor(QLatin1String("#004000"))); optionFormat.setFont(qApp->font()); optionFormat.setFontWeight(QFont::Normal); formatList[highlightTypeNames.at(2)] = optionFormat; return formatList; } /*! * Returns the list of the names of the different types of highlighting * rules provided by this class. This list contains the names which may * be presented in a user interface and which will be translated when * another language is used. * \return a list of types of highlighting rules * \see getHighlightTypeNames */ QStringList TikzCommandInserter::getTranslatedHighlightTypeNames() { QStringList translatedHighlightTypeNames; translatedHighlightTypeNames << tr("Commands") << tr("Draw to") << tr("Options"); return translatedHighlightTypeNames; } /*! * Returns the list of the names of the different types of highlighting * rules provided by this class. This list contains the untranslated * versions of the type names and should not be used in the user interface. * \return a list of types of highlighting rules * \see getTranslatedHighlightTypeNames */ QStringList TikzCommandInserter::getHighlightTypeNames() { QStringList highlightTypeNames; highlightTypeNames << QLatin1String("Commands") << QLatin1String("Draw to") << QLatin1String("Options"); return highlightTypeNames; } /*! * Returns a vector with the highlighting rules derived from the TikZ * commands which are available in the menu/dock widget. These rules * are used by TikzHighlighter to highlight the commands in the text. * \return a vector containing the highlighting rules */ QVector TikzCommandInserter::getHighlightingRules() { QVector highlightingRules; HighlightingRule rule; QStringList highlightTypeNames = getHighlightTypeNames(); for (int i = 0; i < m_tikzCommandsList.size(); ++i) { QString command = m_tikzCommandsList.at(i).command.isEmpty() ? m_tikzCommandsList.at(i).description : m_tikzCommandsList.at(i).command; const int type = m_tikzCommandsList.at(i).type; int end; rule.isRegExp = false; if (!m_tikzCommandsList.at(i).highlightString.isEmpty()) { rule.pattern = QRegExp(m_tikzCommandsList.at(i).highlightString); rule.isRegExp = true; } switch (type) { case 1: { const int end1 = command.indexOf(QLatin1Char(' '), 0); const int end2 = command.indexOf(QLatin1Char('['), 0); const int end3 = command.indexOf(QLatin1Char('{'), 0); end = end1; if (end < 0 || (end2 >= 0 && end2 < end)) end = end2; if (end < 0 || (end3 >= 0 && end3 < end)) end = end3; command = command.left(end); // command = command.replace(QLatin1Char('\\'), QLatin1String("\\\\")); rule.type = highlightTypeNames.at(0); // rule.pattern = QRegExp(command); // rule.pattern.setPattern(command); rule.matchString = command; highlightingRules.append(rule); break; } case 2: // command = command.replace("()", "\\([^\\)]*\\)"); // command = command.replace("(,)", "\\([^\\)]*\\)"); // command = command.replace("(:::)", "\\([^\\)]*\\)"); command = command.remove(QLatin1Char('+')); command = command.remove(QLatin1String(" ()")); command = command.remove(QLatin1String(" (,)")); command = command.remove(QLatin1String(" (:::)")); command = command.remove(QLatin1String(" {} ")); rule.type = highlightTypeNames.at(1); // rule.pattern = QRegExp(command); // rule.pattern.setPattern(command); rule.matchString = command; highlightingRules.append(rule); break; case 3: // command = command.replace(QLatin1Char('|'), QLatin1String("\\|")); end = command.indexOf(QLatin1Char('='), 0) + 1; if (end > 0) command = command.left(end); rule.type = highlightTypeNames.at(2); // rule.pattern = QRegExp(command); // rule.pattern.setPattern(command); rule.matchString = command; highlightingRules.append(rule); break; } } return highlightingRules; } void TikzCommandInserter::insertTag() { QAction *action = qobject_cast(sender()); if (action) { const int num = action->data().toInt(); const TikzCommand cmd = m_tikzCommandsList.at(num); Q_EMIT showStatusMessage(cmd.description, 0); const QString command = cmd.command.isEmpty() ? cmd.description : cmd.command; insertTag(command, cmd.dx, cmd.dy); } } void TikzCommandInserter::insertTag(QListWidgetItem *item) { if (item && !item->font().bold() && !item->text().isEmpty()) { const int num = item->data(Qt::UserRole).toInt(); const TikzCommand cmd = m_tikzCommandsList.at(num); Q_EMIT showStatusMessage(cmd.description, 0); const QString command = cmd.command.isEmpty() ? cmd.description : cmd.command; insertTag(command, cmd.dx, cmd.dy); } } void TikzCommandInserter::setEditor(QPlainTextEdit *textEdit) { m_mainEdit = textEdit; } /*! * Inserts a TikZ command and moves the cursor to a position located * dx characters to the right of and dy characters below the * start of the inserted tag. * \param tag the TikZ command to be inserted * \param dx the x-offset of the new cursor position w.r.t. the beginning of the inserted tag * \param dy the y-offset of the new cursor position w.r.t. the beginning of the inserted tag */ void TikzCommandInserter::insertTag(const QString &tag, int dx, int dy) { Q_ASSERT_X(m_mainEdit, "TikzCommandInserter::insertTag(const QString &tag, int dx, int dy)", "m_mainEdit should be set using TikzCommandInserter::setEditor() before using this function"); QTextCursor cur = m_mainEdit->textCursor(); const int pos = cur.position(); // replace all options (between <...>) by a place holder QString insertWord = tag; const QRegExp rx(QLatin1String("<[^<>]*>")); insertWord.replace(rx, s_completionPlaceHolder); // insert tag m_mainEdit->insertPlainText(insertWord); cur.setPosition(pos, QTextCursor::MoveAnchor); // move the text cursor to the first option or to the specified place if (insertWord.contains(s_completionPlaceHolder)) { cur = m_mainEdit->document()->find(s_completionPlaceHolder, cur); m_mainEdit->setTextCursor(cur); } else if (dx > 0 || dy > 0) { if (dy > 0) { cur.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, dy); cur.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); } if (dx > 0) cur.movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, dx); m_mainEdit->setTextCursor(cur); } // else we are only inserting a string with no placeholders and no positioning, so the cursor must come at the end of the string (this is done automatically by Qt) m_mainEdit->setFocus(); } ktikz-0.12/app/tikzcommandinserter.h000066400000000000000000000065421325124551100176230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2014 * * by Glad Deschrijver * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, see . * ***************************************************************************/ #ifndef TIKZCOMMANDINSERTER_H #define TIKZCOMMANDINSERTER_H #include #include class QDockWidget; class QListWidget; class QListWidgetItem; class QMenu; class QPalette; class QPlainTextEdit; class QStackedWidget; class QTextCharFormat; class ComboBox; class HighlightingRule; struct TikzCommand { QString name; QString description; QString command; QString highlightString; int dx; int dy; int type; int number; }; struct TikzCommandList { QString title; QList commands; QList children; }; class TikzCommandInserter : public QObject { Q_OBJECT public: explicit TikzCommandInserter(QWidget *parent = 0); static void loadCommands(); static QStringList getCommandWords(); QMenu *getMenu(); void showItemsInDockWidget(); QDockWidget *getDockWidget(QWidget *parent = 0); static QMap getDefaultHighlightFormats(); static QStringList getTranslatedHighlightTypeNames(); static QStringList getHighlightTypeNames(); static QVector getHighlightingRules(); void setEditor(QPlainTextEdit *textEdit); public Q_SLOTS: void insertTag(const QString &tag, int dx = 0, int dy = 0); Q_SIGNALS: /*! * This signal is emitted whenever a message should be shown in * the statusbar. * \param message the message to be shown in the status bar * \param timeout the duration in milli-seconds (if non-zero) during which the message must be shown */ void showStatusMessage(const QString &message, int timeout = 0); private Q_SLOTS: void updateDescriptionToolTip(); void setListStatusTip(QListWidgetItem *item); void insertTag(); void insertTag(QListWidgetItem *item); private: QMenu *getMenu(const TikzCommandList &commandList, QWidget *parent); void addListWidgetItems(QListWidget *listWidget, const QPalette &standardPalette, const TikzCommandList &commandList, bool addChildren = true); QPlainTextEdit *m_mainEdit; static TikzCommandList m_tikzSections; static QList m_tikzCommandsList; ComboBox *m_commandsCombo; QStackedWidget *m_commandsStack; }; #endif ktikz-0.12/app/tikzcommands.json000066400000000000000000002023141325124551100167470ustar00rootroot00000000000000{ "title": "&Insert", "commands": [ { "title": "Pict&ures, scopes and styles", "commands": [ { "name": "&TikZ picture environment", "description": "\\begin{tikzpicture}[]", "insert": "\\begin{tikzpicture}\n\n\\end{tikzpicture}", "dx": 0, "dy": 1, "type": 0 }, { "name": "&Close TikZ picture environment", "description": "\\end{tikzpicture}", "type": 0 }, { "title": "Pict&ures", "commands": [ { "type": -1 }, { "name": "&Set baseline", "description": "baseline=", "type": 3 }, { "type": -1 }, { "name": "Install code to be executed at &begin of picture", "description": "execute at begin picture=", "type": 3 }, { "name": "Install code to be executed at &end of picture", "description": "execute at end picture=", "type": 3 }, { "type": -1 }, { "name": "&Define style for every picture", "description": "every picture/.style={